{"version":3,"mappings":"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rB,CAAmC,EAEnF,CACA,OAAOjrB,CACX,CCzTO,IAAIkrB,GAAW,CAClB,MAAO,CACH,IACA,GACR,EACI,IAAO,CACH,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,KACA,KACA,GACR,EACI,GAAM,CACF,IACA,KACA,KACA,GACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,IACA,IACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,GACR,EACI,GAAM,CACF,IACA,KACA,GACR,EACI,GAAM,CACF,IACA,KACA,GACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,KACA,GACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,KACA,GACR,EACI,GAAM,CACF,IACA,KACA,KACA,GACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,KACA,KACA,IACA,GACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,GACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,KACA,GACR,EACI,GAAM,CACF,IACA,IACA,IACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,KACA,GACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,IACA,IACR,EACI,GAAM,CACF,IACA,KACA,KACA,GACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,GACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,GACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,GACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,KACA,KACA,GACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,KACA,KACA,GACR,EACI,GAAM,CACF,IACA,KACA,KACA,GACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,KACA,KACA,IACA,GACR,EACI,GAAM,CACF,GACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,KACA,GACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,KACA,KACA,GACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,GACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,KACA,KACA,GACR,EACI,GAAM,CACF,KACA,GACR,EACI,GAAM,CACF,GACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,KACA,KACA,GACR,EACI,GAAM,CACF,IACA,IACA,GACR,EACI,GAAM,CACF,KACA,KACA,IACA,GACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,KACA,IACA,IACA,IACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,KACA,KACA,GACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,KACA,KACA,GACR,EACI,GAAM,CACF,IACA,KACA,KACA,GACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,KACA,GACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,IACA,IACR,EACI,GAAM,CACF,IACA,KACA,KACA,GACR,EACI,GAAM,CACF,IACA,KACA,KACA,GACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,KACA,GACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,GACR,EACI,GAAM,CACF,KACA,KACA,IACA,GACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,KACA,KACA,GACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,KACA,KACA,GACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,KACA,KACA,IACA,GACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,GACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,IACA,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,KACA,KACA,GACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,IACA,IACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,IACA,KACA,KACA,GACR,EACI,GAAM,CACF,IACA,KACA,GACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,KACA,KACA,GACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,KACA,KACA,GACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,KACA,GACR,EACI,GAAM,CACF,GACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,IACA,KACA,KACA,GACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,IACR,EACI,GAAM,CACF,IACA,KACA,KACA,GACR,EACI,GAAM,CACF,GACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,GACR,EACI,GAAM,CACF,GACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,IACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,KACA,KACA,GACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,IACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,IACA,KACA,KACA,GACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,IACA,KACA,KACA,GACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,KACA,KACA,IACA,GACR,EACI,GAAM,CACF,KACA,KACA,IACA,GACR,EACI,GAAM,CACF,IACA,KACA,GACR,EACI,GAAM,CACF,KACA,KACA,IACA,GACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,KACA,GACR,EACI,GAAM,CACF,IACA,IACA,IACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,GACR,EACI,GAAM,CACF,IACA,KACA,GACR,EACI,GAAM,CACF,IACA,KACA,KACA,GACR,EACI,GAAM,CACF,IACA,IACR,EACI,GAAM,CACF,IACA,IACA,KACA,IACR,EACI,GAAM,CACF,IACA,KACA,IACA,IACR,EACI,GAAM,CACF,IACA,GACR,EACI,QAAS,CACL,IACA,IACA,KACA,IACR,EACI,SAAU,CACN,IACA,KACA,KACA,GACR,EACI,QAAS,CACL,IACA,IACA,IACR,EACI,SAAU,CACN,IACA,KACA,IACA,IACR,EACI,QAAS,CACL,IACA,KACA,IACA,IACR,EACI,QAAS,CACL,IACA,IACA,KACA,IACR,EACI,QAAS,CACL,IACA,KACA,IACA,IACR,EACI,QAAS,CACL,IACA,IACA,KACA,IACR,EACI,QAAS,CACL,IACA,IACA,KACA,IACR,EACI,QAAS,CACL,IACA,IACA,KACA,IACR,EACI,QAAS,CACL,IACA,IACA,IACR,EACI,QAAS,CACL,IACA,IACA,IACR,EACI,QAAS,CACL,KACA,KACA,IACA,GACR,EACI,QAAS,CACL,KACA,IACA,GACR,EACI,QAAS,CACL,IACA,IACA,IACR,EACI,QAAS,CACL,IACA,IACA,IACR,EACI,QAAS,CACL,KACA,IACA,GACR,EACI,QAAS,CACL,KACA,IACA,GACR,EACI,QAAS,CACL,KACA,KACA,IACA,GACR,EACI,QAAS,CACL,KACA,KACA,IACA,GACR,EACI,QAAS,CA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,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACLA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACrBA,IAAM,OACNA,IAAM,OACLA,GAAK,OAAUA,GAAK,OACrBA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACLA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACrBA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACLA,GAAK,OAAUA,GAAK,OACrBA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACLA,GAAK,OAAUA,GAAK,OACrBA,IAAM,OACNA,IAAM,OACLA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACrBA,IAAM,OACLA,GAAK,OAAUA,GAAK,OACpBA,GAAK,OAAUA,GAAK,OACrBA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACLA,GAAK,OAAUA,GAAK,OACrBA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACLA,GAAK,OAAUA,GAAK,OACrBA,IAAM,OACLA,GAAK,OAAUA,GAAK,OACrBA,IAAM,OACNA,IAAM,OACNA,IAAM,OACNA,IAAM,OACLA,GAAK,O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CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EAGV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EAGT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,KAAM,GAAG,EACV,CAAC,IAAK,GAAG,EACT,CAAC,KAAM,GAAG,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EAGT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,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CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EAGT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,KAAK,EAGX,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EAGT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EAGT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,EAAE,EAGR,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,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,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EAGV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EAGV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,IAAI,EACX,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EAGX,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EAGT,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,IAAI,EACV,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX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CZgJ,mBAAW,EAAI,EACfrD,mBAAW,EAAK,EAChBsD,kBAAU,EAAK,EACfosC,sBAAc,EAAK,QAMVC,sBAAT,OAAO,EACPn0G,sBAAA,QAAQ,EAEJshG,EAAMviC,EAAA,IAAA8C,EAAY7hE,CAAQ,EAAGo0G,IAAiBC,GAAY,EAC1DvnJ,EAAOiyG,EAAA,IAAqB,CAC1B,MAAAu1C,EAAQzyC,EAAGsyC,CAAY,EAAC,IAC3Bj3I,GAEGghB,GAAShhB,CAAM,EACsCA,EAC/C,OAAOA,EAAQ,MAAOA,CAAM,GAIpC,OAAAg3I,EAAW,GACbI,EAAS,KAAI,CAAEp3J,EAAGC,IAAM2oB,GAAQ5oB,EAAE,MAAOC,EAAE,KAAK,GAG3Cm3J,CACT,CAAC,4BAGG,KAAK,UAASzyC,EAAC/0G,CAAO,GAAAq3G,GAAA,+WAF5B,CCxDO,MAAMowC,IAA0B,CACrC,QACA,MACA,SACA,QACA,SACA,QACA,SACA,OACA,OACA,SACA,MACA,SACA,QACA,SACA,OACA,KACA,SACA,QACA,SACA,OACA,KACA,SACA,SACA,QACA,SACA,SACA,SACA,OACA,OACA,MACA,QACA,SACA,QACA,SACA,OACA,SACA,SACA,QACA,QACA,QACA,SACA,MACA,QACA,SACA,OACA,SACA,SACA,QACA,OACA,OACA,SACA,MACA,SACA,SACA,QACA,SACA,MACA,OACA,SACA,SACA,SACA,KACA,SACA,QACA,QACA,SACA,SACA,OACA,QACA,KACA,OACA,QACA,SACA,OACA,MACA,SACA,SACA,QACA,SACA,OACA,OACA,SACA,SACA,OACA,OACA,SACA,QACA,OACA,QACA,MACA,OACA,MACA,OACA,OACA,OACA,QACA,QACA,QACA,SACA,QACA,SACA,MACA,OACA,SACA,MACA,MACF,EC3GaC,GAA4B,CACvC,EAAG,IACH,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,I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CF,oBAAqB,+BACrB,gBAAiB,yCACjB,qBAAsB,+BACtB,qBACE,gDACF,sBACE,iDACF,4BACE,yDACF,2BAA4B,iCAC5B,WAAY,4BACZ,UAAW,qBACjB,CACA,EAGE,cAAe,CACb,oBACE,yDACF,SACE,iDACN,EAGE,OAAQ,CACN,OAAQ,MACR,UAAW,QACX,MAAO,KACX,EAGE,WAAY,OACZ,MAAO,CACL,QAAS,CACP,cAAe,kBACf,gBAAiB,iBACvB,EACI,MAAO,CACL,kBACE,uDACR,EACI,WAAY,CACV,MAAO,SACP,MAAO,MACP,aAAc,QACpB,EACI,MAAO,CACL,KAAM,KACN,KAAM,MACN,MAAO,KACb,EACI,SAAU,CACR,MAAO,KACP,YAAa,CACX,MAAO,iBACP,gBAAiB,OACzB,CACA,EACI,SAAU,CACR,MAAO,QACP,OAAQ,CACN,MAAO,QACP,iBAAkB,CAChB,aAAc,wBACxB,EACQ,cAAe,CACb,aAAc,kBACxB,EACQ,kBAAmB,CACjB,aAAc,qBACxB,CACA,CACA,EACI,KAAM,CACJ,MAAO,MACP,mBAAoB,CAClB,MAAO,cACP,eAAgB,SACxB,EACM,WAAY,CACV,YAAa,eACb,YACE,wGACV,CACA,EACI,MAAO,CACL,MAAO,OACP,aAAc,CACZ,MAAO,mBACP,YAAa,mBACb,YACE,oHACF,OAAQ,kBACR,mBAAoB,kCAC5B,CACA,EACI,cAAe,CACb,MAAO,WACP,gBAAiB,CACf,MAAO,aACP,YACE,4CACF,aAAc,UACtB,CACA,EACI,SAAU,CACR,MAAO,KACP,KAAM,CACJ,MAAO,QACP,YACE,2CACF,aAAc,eACtB,EACM,eAAgB,CACd,MAAO,SACP,YACE,oDACF,aAAc,cACtB,EACM,YAAa,CACX,MAAO,UACP,YACE,yFACF,YAAa,cACb,UAAW,uBACX,YAAa,sBACrB,CACA,CACA,EAGE,oBAAqB,CACnB,qBAAsB,gBACtB,mBAAoB,eACpB,OAAQ,gBACR,aAAc,cACd,WAAY,WACZ,eAAgB,gBACpB,EAGE,iBAAkB,CAChB,KAAM,UACN,IAAK,YACL,IAAK,SACL,IAAK,OACL,K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","names":["is_array","index_of","array_from","define_property","get_descriptor","get_descriptors","object_prototype","array_prototype","get_prototype_of","is_extensible","is_function","thing","noop","is_promise","value","run_all","arr","i","deferred","resolve","reject","promise","res","rej","fallback","lazy","to_array","n","array","element","DERIVED","EFFECT","RENDER_EFFECT","BLOCK_EFFECT","BRANCH_EFFECT","ROOT_EFFECT","BOUNDARY_EFFECT","UNOWNED","DISCONNECTED","CLEAN","DIRTY","MAYBE_DIRTY","INERT","DESTROYED","EFFECT_RAN","EFFECT_TRANSPARENT","INSPECT_EFFECT","HEAD_EFFECT","EFFECT_PRESERVED","USER_EFFECT","REACTION_IS_UPDATING","ASYNC","ERROR_VALUE","STATE_SYMBOL","LEGACY_PROPS","LOADING_ATTR_SYMBOL","STALE_REACTION","await_outside_boundary","lifecycle_outside_component","name","async_derived_orphan","effect_in_teardown","rune","effect_in_unowned_derived","effect_orphan","effect_update_depth_exceeded","props_invalid_value","key","state_descriptors_fixed","state_prototype_fixed","state_unsafe_mutation","EACH_ITEM_REACTIVE","EACH_INDEX_REACTIVE","EACH_IS_CONTROLLED","EACH_IS_ANIMATED","EACH_ITEM_IMMUTABLE","PROPS_IS_IMMUTABLE","PROPS_IS_UPDATED","PROPS_IS_BINDABLE","PROPS_IS_LAZY_INITIAL","TEMPLATE_FRAGMENT","TEMPLATE_USE_IMPORT_NODE","UNINITIALIZED","NAMESPACE_HTML","NAMESPACE_SVG","ATTACHMENT_KEY","select_multiple_invalid_value","hydrating","equals","safe_not_equal","a","b","not_equal","safe_equals","empty","snapshot","skip_warning","clone","cloned","path","paths","original","unwrapped","copy","component_context","set_component_context","context","getContext","get_or_init_context_map","setContext","push","props","runes","fn","pop","component","effects","create_user_effect","is_runes","e.lifecycle_outside_component","get_parent_context","parent","context_map","adjustments","handle_error","error","effect","active_effect","active_reaction","apply_adjustments","invoke_error_boundary","e","adjusted","micro_tasks","idle_tasks","run_micro_tasks","tasks","run_idle_tasks","queue_micro_task","flush_tasks","get_pending_boundary","boundary","e.await_outside_boundary","derived","flags","parent_derived","async_derived","location","e.async_derived_orphan","signal","source","prev","should_suspend","async_effect","p","r","batch","current_batch","pending","handler","internal_set","unset_context","fulfil","next","go","user_derived","d","push_reaction_value","derived_safe_equal","destroy_derived_effects","destroy_effect","get_derived_parent_effect","execute_derived","prev_active_effect","set_active_effect","update_reaction","update_derived","increment_write_version","is_destroying_effect","batch_deriveds","status","skip_reaction","set_signal_status","flatten","sync","async","restore","capture","expression","result","previous_effect","previous_reaction","previous_component_context","set_active_reaction","batches","previous_batch","effect_pending_updates","dequeue","task","queued_root_effects","last_scheduled_effect","is_flushing","is_flushing_sync","Batch","#previous","#callbacks","#pending","#deferred","#neutered","#async_effects","#boundary_async_effects","#render_effects","#effects","#block_effects","#dirty_effects","#maybe_dirty_effects","root_effects","current_values","current","previous","root","#traverse_effect_tree","#commit","render_effects","flush_queued_effects","#defer_effects","v","wv","update_effect","is_branch","is_skippable_branch","skip","is_dirty","child","update","flush_effects","schedule_effect","flushSync","was_flushing_sync","was_updating_effect","is_updating_effect","flush_count","set_is_updating_effect","updates","entry","infinite_loop_guard","old_values","e.effect_update_depth_exceeded","length","unlink_effect","stack","state","s","mutable_source","initial_value","immutable","trackable","set","should_proxy","untracking","current_sources","e.state_unsafe_mutation","new_value","proxy","old_value","mark_reactions","untracked_writes","set_untracked_writes","increment","reactions","reaction","not_dirty","prototype","sources","is_proxied_array","version","parent_version","update_version","with_parent","set_update_version","_","prop","descriptor","e.state_descriptors_fixed","target","receiver","exists","get","has","other_s","ls","own_keys","e.state_prototype_fixed","get_proxied_value","is","$window","$document","is_firefox","first_child_getter","next_sibling_getter","init_operations","element_prototype","node_prototype","text_prototype","create_text","get_first_child","node","get_next_sibling","is_text","first_child","fragment","first","sibling","count","next_sibling","clear_text_content","should_defer_append","autofocus","dom","body","listening_to_form_reset","add_form_reset_listener","evt","without_reactive_context","listen_to_event_and_reset_event","event","on_reset","validate_effect","e.effect_orphan","e.effect_in_unowned_derived","e.effect_in_teardown","push_effect","parent_effect","parent_last","create_effect","type","inert","teardown","user_effect","defer","user_pre_effect","component_root","options","pause_effect","render_effect","template_effect","values","block","branch","execute_effect_teardown","previously_destroying_effect","set_is_destroying_effect","destroy_effect_children","remove_dom","controller","destroy_block_effect_children","removed","remove_effect_dom","remove_reactions","transitions","transition","end","callback","pause_children","run_out_transitions","remaining","check","local","transparent","resume_effect","resume_children","new_deps","skipped_deps","write_version","read_version","dependencies","is_unowned","dependency","is_disconnected","is_unowned_connected","schedule_possible_effect_self_invalidation","previous_deps","previous_skipped_deps","previous_untracked_writes","previous_skip_reaction","previous_sources","previous_untracking","previous_update_version","deps","remove_reaction","index","new_length","start_index","dep","tick","is_derived","destroyed","depends_on_old_values","untrack","STATUS_MASK","deep_read_state","deep_read","visited","proto","descriptors","is_capture_event","DELEGATED_EVENTS","is_delegated","event_name","ATTRIBUTE_ALIASES","normalize_attribute","PASSIVE_EVENTS","is_passive_event","all_registered_events","root_event_handles","create_event","target_handler","handle_event_propagation","on","passive","delegate","events","last_propagated_event","handler_element","owner_document","current_target","path_idx","handled_at","at_idx","handler_idx","throw_error","other_errors","parent_element","delegated","data","head","render_fn","anchor","create_fragment_from_html","html","elem","assign_nodes","start","from_html","content","is_fragment","use_import_node","has_start","text","t","comment","frag","append","props_id","set_text","str","mount","_mount","document_listeners","Component","intro","registered_events","event_handle","unmount","anchor_node","ctx","mounted_components","PENDING","THEN","CATCH","await_block","get_input","pending_fn","then_fn","catch_fn","active_component_context","input","pending_effect","then_effect","catch_effect","input_source","error_source","resolved","if_block","elseif","consequent_effect","alternate_effect","condition","has_branch","set_branch","flag","update_branch","offscreen_fragment","commit","active","inactive","new_condition","get_key","changed","css_props","get_styles","styles","pause_effects","items","controlled_anchor","items_map","is_controlled","parent_node","link","item","each","get_collection","fallback_fn","was_empty","offscreen_items","each_array","collection","each_effect","reconcile","keys","existing","update_item","create_item","is_animated","should_update","seen","to_animate","matched","stashed","move","child_anchor","j","to_destroy","destroy_length","unused","reactive","mutable","dest","next_node","get_value","svg","mathml","snippet","get_snippet","args","snippet_effect","get_component","get_tag","is_svg","get_namespace","tag","current_tag","next_tag","ns","append_styles","css","style","action","payload","inited","attach","get_fn","f","o","clsx","_clsx","whitespace","to_class","hash","directives","classname","len","important","separator","to_css_name","to_style","new_style","normal_styles","important_styles","in_str","in_apo","in_comment","reserved_names","name_index","c","property","set_class","is_html","prev_classes","next_classes","next_class_name","is_present","update_styles","priority","set_style","prev_styles","next_styles","next_style_attr","select_option","select","mounting","w.select_multiple_invalid_value","option","get_option_value","option_value","init_select","observer","CLASS","STYLE","IS_CUSTOM_ELEMENT","IS_HTML","set_selected","selected","set_attribute","attribute","attributes","get_attributes","get_setters","set_attributes","css_hash","is_custom_element","preserve_attribute_case","is_option_element","setters","prev_value","prefix","opts","event_handle_key","handle","is_default","use_default","attribute_effect","is_select","symbol","setters_cache","element_proto","bind_value","is_reset","is_numberlike_input","to_number","is_bound_this","bound_value","element_or_component","bind_this","get_parts","old_parts","parts","subscribe_to_store","store","run","invalidate","unsub","subscriber_queue","readable","writable","stop","subscribers","run_queue","subscriber","subscribe","stores","single","stores_array","auto","started","cleanup","unsubscribers","is_store_binding","IS_UNMOUNTED","store_get","store_name","is_synchronous_callback","get_store","store_unsub","store_set","setup_stores","store_mutate","mark_store_binding","capture_store_binding","previous_is_store_binding","rest_props_handler","rest_props","exclude","spread_props_handler","desc","spread_props","bindable","fallback_value","fallback_dirty","get_fallback","setter","is_entry_props","is_store_sub","e.props_invalid_value","getter","legacy_parent","mutation","overridden","onMount","showContentOverlay","showDuplicateToast","translatorApiKeyDialogState","copyFromLocaleToast","editorLeftPane","editorRightPane","selectAssetsView","customPreviewStyle","toDataView","RFC4648","RFC4648_HEX","CROCKFORD","base32Encode","variant","alphabet","defaultPadding","padding","view","bits","output","uuidPattern","generateUUID","uuid","generateRandomId","hex","buffer","h","getHash","algorithm","format","uint8Array","reader","finalData","digest","escapeRegExp","string","truncate","max","ellipsis","chars","stripSlashes","stripTags","isURL","compare","getBlobRegex","filePathRegEx","textFileTypes","isTextFileType","getPathInfo","dirname","basename","filename","extension","isValidFileType","file","specifiers","specifier","subtype","scanFiles","accept","readEntry","entries","readAsText","getDataURL","blob","encodeBase64","decodeBase64","base64","saveFile","blobURL","isMergeableObject","isNonNullObject","isSpecial","stringValue","isReactElement","canUseSymbol","REACT_ELEMENT_TYPE","emptyTarget","val","cloneUnlessOtherwiseSpecified","deepmerge","defaultArrayMerge","getMergeFunction","customMerge","getEnumerableOwnPropertySymbols","getKeys","propertyIsOnObject","object","propertyIsUnsafe","mergeObject","destination","sourceIsArray","targetIsArray","sourceAndTargetTypesMatch","deepmerge_1","cjs","extendStatics","__extends","__","__assign","__rest","__spreadArray","to","from","pack","l","ar","memoize","cache","cacheDefault","serializer","serializerDefault","strategy","strategyDefault","isPrimitive","monadic","arg","cacheKey","computedValue","variadic","assemble","serialize","strategyVariadic","ObjectWithoutPrototypeCache","strategies","ErrorKind","TYPE","SKELETON_TYPE","isLiteralElement","el","isArgumentElement","isNumberElement","isDateElement","isTimeElement","isSelectElement","isPluralElement","isPoundElement","isTagElement","isNumberSkeleton","isDateTimeSkeleton","SPACE_SEPARATOR_REGEX","DATE_TIME_REGEX","parseDateTimeSkeleton","skeleton","match","WHITE_SPACE_REGEX","parseNumberSkeletonFromString","stringTokens","x","tokens","_i","stringTokens_1","stringToken","stemAndOptions","stem","_a","options_1","icuUnitToEcma","unit","FRACTION_PRECISION_REGEX","SIGNIFICANT_PRECISION_REGEX","INTEGER_WIDTH_REGEX","CONCISE_INTEGER_WIDTH_REGEX","parseSignificantPrecision","g1","g2","parseSign","parseConciseScientificAndEngineeringStem","signDisplay","parseNotationOptions","opt","signOpts","parseNumberSkeleton","tokens_1","token","all","g3","g4","g5","conciseScientificAndEngineeringOpts","timeData","getBestPattern","locale","skeletonCopy","patternPos","patternChar","extraLength","hourLen","dayPeriodLen","dayPeriodChar","hourChar","getDefaultHourSymbolFromLocale","hourCycle","languageTag","regionTag","hourCycles","SPACE_SEPARATOR_START_REGEX","SPACE_SEPARATOR_END_REGEX","createLocation","hasNativeStartsWith","hasNativeFromCodePoint","hasNativeFromEntries","hasNativeCodePointAt","hasTrimStart","hasTrimEnd","hasNativeIsSafeInteger","isSafeInteger","REGEX_SUPPORTS_U_AND_Y","re","RE","startsWith","search","position","fromCodePoint","codePoints","elements","code","fromEntries","obj","entries_1","k","codePointAt","size","second","trimStart","trimEnd","matchIdentifierAtIndex","IDENTIFIER_PREFIX_RE_1","_isWhiteSpace","_isPatternSyntax","Parser","message","nestingLevel","parentArgType","expectingCloseTag","char","_isAlpha","startPosition","tagName","childrenResult","children","endTagStartPosition","closingTagNameStartPosition","closingTagName","startOffset","_isPotentialElementNameChar","parseQuoteResult","parseUnquotedResult","parseLeftAngleResult","_isAlphaOrSlash","ch","openingBracePosition","startingPosition","endOffset","endPosition","typeStartPosition","argType","typeEndPosition","styleAndLocation","styleStartPosition","styleLocation","argCloseResult","location_1","dateTimePattern","typeEndPosition_1","identifierAndLocation","pluralOffset","optionsResult","location_2","nestedBraces","apostrophePosition","expectCloseTag","parsedFirstIdentifier","hasOtherClause","parsedSelectors","selector","selectorLocation","fragmentResult","expectNumberError","invalidNumberError","sign","hasDigits","decimal","offset","kind","pattern","currentOffset","targetOffset","nextCode","codepoint","pruneLocation","els","parse","ErrorCode","FormatError","_super","msg","originalMessage","_this","InvalidValueError","variableId","InvalidValueTypeError","MissingValueError","PART_TYPE","mergeLiteral","part","lastPart","isFormatXMLElementFn","formatToParts","locales","formatters","formats","currentPluralValue","els_1","varName","value_1","formatFn","chunks","rule","mergeConfig","c1","c2","mergeConfigs","defaultConfig","configs","createFastMemoizeCache","createDefaultFormatters","IntlMessageFormat","overrideFormats","parseOpts","supportedLocales","delve","fullKey","partialKey","lookupCache","addToCache","lookup","refLocale","getPossibleLocales","getMessageFromDictionary","dictionary","$dictionary","getLocaleDictionary","hasLocaleDictionary","id","localeDictionary","getClosestAvailableLocale","relatedLocales","addMessages","partials","$locales","dictionary2","newDictionary","queue","removeLoaderFromQueue","loader","getLocaleQueue","getLocalesQueues","localeItem","localeQueue","hasLocaleQueue","loadLocaleQueue","partial","activeFlushes","flush","queues","localeName","__getOwnPropSymbols$2","__hasOwnProp$2","__propIsEnum$2","__objRest$1","defaultFormats","defaultMissingKeyHandler","getCurrentLocale","defaultOptions","getOptions","init","rest","initialLocale","$locale","$isLoading","__defProp$1","__defProps","__getOwnPropDescs","__getOwnPropSymbols$1","__hasOwnProp$1","__propIsEnum$1","__defNormalProp$1","__spreadValues$1","__spreadProps","internalLocale","getSubLocales","fallbackLocale","newLocale","loadingDelay","loadingTimer","getLocaleFromNavigator","monadicMemoize","__defProp","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","__spreadValues","__objRest","getIntlFormatterOptions","createNumberFormatter","_b","createDateFormatter","_c","_d","createTimeFormatter","_e","_f","getNumberFormatter","_g","_h","getDateFormatter","_j","getTimeFormatter","_k","_l","getMessageFormatter","formatMessage","messageObj","defaultValue","formatTime","formatDate","formatNumber","getJSON","$format","isObject","toRaw","ALIAS","DOC","MAP","PAIR","SCALAR","SEQ","NODE_TYPE","isAlias","isDocument","isMap","isPair","isScalar","isSeq","isCollection","isNode","hasAnchor","BREAK","SKIP","REMOVE","visit","visitor","visitor_","initVisitor","visit_","ctrl","callVisitor","replaceNode","ci","ck","cv","visitAsync","visitAsync_","pt","escapeChars","escapeTagName","tn","Directives","yaml","tags","line","onError","isValid","verbatim","suffix","doc","lines","tagEntries","tagNames","_key","anchorIsValid","anchorNames","anchors","findNewAnchor","createNodeAnchors","aliasObjects","sourceObjects","prevAnchors","ref","applyReviver","reviver","v0","v1","toJS","NodeBase","mapAsMap","maxAliasCount","onAnchor","Alias","nodes","found","_arg","getAliasCount","_onComment","_onChompKeep","src","kc","vc","isScalarValue","Scalar","defaultTagPrefix","findTagObject","tagObj","createNode","map","aliasDuplicateObjects","onTagObj","schema","collectionFromPath","isEmptyPath","Collection","it","keepScalar","allowScalar","stringifyComment","indentComment","indent","lineComment","FOLD_FLOW","FOLD_BLOCK","FOLD_QUOTED","foldFlowLines","mode","indentAtStart","lineWidth","minContentWidth","onFold","onOverflow","endStep","folds","escapedFolds","split","overflow","escStart","escEnd","consumeMoreIndentedLines","fold","getFoldOptions","isBlock","containsDocumentMarker","lineLengthOverLimit","indentLength","limit","strLen","doubleQuotedString","json","implicitKey","minMultiLineLength","singleQuotedString","quotedString","singleQuote","qs","hasDouble","hasSingle","blockEndNewlines","blockString","onComment","onChompKeep","blockQuote","commentString","literal","chomp","endStart","endNlPos","startWithSpace","startEnd","startNlPos","header","foldedValue","literalFallback","foldOptions","plainString","actualString","indentStep","inFlow","test","compat","stringifyString","ss","_stringify","_type","defaultKeyType","defaultStringType","createStringifyContext","getTagObject","testMatch","stringifyProps","stringify","stringifyPair","allNullValues","indentSeq","simpleKeys","keyComment","explicitKey","keyCommentDone","chompKeep","vsb","vcb","valueComment","valueCommentDone","valueStr","ws","cs","vs0","nl0","hasNewline","flow","hasPropsLine","sp0","warn","logLevel","warning","MERGE_KEY","merge","addMergeToJSMap","isMergeKey","mergeValue","srcMap","addPairToJSMap","jsKey","stringKey","stringifyKey","jsValue","strCtx","strKey","jsonStr","createPair","Pair","pair","stringifyCollection","stringifyFlowCollection","stringifyBlockCollection","blockItemPrefix","flowChars","itemIndent","itemCtx","addCommentBefore","ik","fcPadding","reqNewline","linesAtValue","iv","sum","ic","findPair","YAMLMap","keepUndefined","replacer","add","overwrite","_pair","sortEntries","Type","YAMLSeq","idx","asItemIndex","seq","nullTag","boolTag","sv","stringifyNumber","minFractionDigits","num","floatNaN","floatExp","float","dot","intIdentify","intResolve","radix","intAsBigInt","intStringify","intOct","_onError","int","intHex","stringifyJSON","jsonScalars","jsonError","binary","buf","resolvePairs","cn","createPairs","iterable","pairs","YAMLOMap","omap","seenKeys","boolStringify","trueTag","falseTag","intBin","YAMLSet","keepPair","parseSexagesimal","asBigInt","stringifySexagesimal","_60","intTime","floatTime","timestamp","year","month","day","hour","minute","millisec","date","tz","schemas","schema$1","schema$2","tagsByName","coreKnownTags","getTags","customTags","schemaName","addMergeTag","schemaTags","sortMapEntriesByKey","Schema","resolveKnownTags","sortMapEntries","toStringDefaults","stringifyDocument","hasDirectives","dir","contentComment","dc","Document","_replacer","assertCollection","keyToStr","asStr","anchorPrefix","setAnchors","jsonArg","contents","YAMLError","pos","YAMLParseError","YAMLWarning","prettifyError","lc","col","lineStr","pointer","resolveProps","indicator","parentIndent","startOnNewline","spaceBefore","atNewline","hasSpace","commentSep","reqSpace","tab","newlineAfterProp","comma","cb","last","containsNewline","st","flowIndentCheck","fc","mapIncludes","uniqueKeys","isEqual","startColMsg","resolveBlockMap","composeNode","composeEmptyNode","bm","NodeClass","commentEnd","collItem","sep","keyProps","keyStart","keyNode","valueProps","valueNode","resolveBlockSeq","bs","resolveEnd","blockMsg","resolveFlowCollection","fcName","coll","atRoot","prevItemComment","loop","endRange","expectedEnd","ce","ee","cePos","resolveCollection","CN","Coll","composeCollection","tagToken","nl","lastProp","expType","kt","resolveBlockScalar","scalar","parseBlockScalarHeader","splitLines","chompStart","trimIndent","contentStart","prevMoreIndented","crlf","strict","ts","m","resolveFlowScalar","rel","plainValue","singleQuotedValue","doubleQuotedValue","valueEnd","badChar","foldLines","foldNewline","cc","escapeCodes","parseCharCode","raw","wsStart","composeScalar","range","findScalarTagByName","findScalarTagByTest","matchWithTest","atKey","emptyScalarPosition","before","isSrcToken","composeAlias","alias","composeDoc","contentEnd","getErrorPos","parsePrelude","prelude","atComment","afterEmptyLine","Composer","afterDoc","forceDoc","resolveAsScalar","createScalarToken","he","addEndtoBlockProps","setScalarValue","afterKey","setBlockScalarValue","setFlowScalarValue","oa","tok","cst","stringifyToken","stringifyItem","_visit","field","BOM","DOCUMENT","FLOW_END","prettyToken","tokenType","isEmpty","hexDigits","tagChars","flowIndicatorChars","invalidAnchorChars","isNotAnchorChar","Lexer","incomplete","dt","dirEnd","sp","ch0","ch1","quote","qb","lastChar","allowEmpty","allowTabs","LineCounter","low","high","mid","includesToken","list","findNonEmptyIndex","isFlowToken","getPrevProps","getFirstKeyStartProps","fixFlowSeqItems","onNewLine","lexeme","top","bv","atMapIndent","atNextItem","fs","docEnd","parseOptions","prettyErrors","parseAllDocuments","lineCounter","parser","composer","docs","parseDocument","_doc","_reviver","allAssetFolders","globalAssetFolder","_allAssetFolders","collectionName","internalPath","selectedAssetFolder","targetAssetFolder","_selectedAssetFolder","_globalAssetFolder","getAssetFolder","fileName","keyPath","getAssetFoldersByPath","matchSubFolders","entryRelative","canCreateAsset","assetFolder","IndexedDB","#database","#databaseName","#storeName","#storeOptions","#indexes","databaseName","storeName","autoIncrement","indexes","#openDatabase","request","database","#getDatabase","upgradeNeeded","objectStoreNames","#query","getRequest","transaction","records","#search","query","direction","multiple","cursor","LocalStorage","isObjectArray","unique","fastDeepEqual","equal","isBuffer","keyIdentity","delimiter","maxDepth","transformKey","step","currentDepth","isarray","isbuffer","isobject","newKey","unflatten","getkey","parsedKey","addKeys","keyPrefix","recipient","isArray","key1","key2","getDateTimeParts","timeZone","escapeStringRegexp","replacements","doCustomReplacements","transliterate","customReplacements","builtinReplacements","slugify","encoding","cleanAccents","sanitizeReplacement","trimReplacement","siteConfig","slug","escapedReplacement","consecutivePattern","hookCallback","hooks","setHookCallback","hasOwnProp","isObjectEmpty","isUndefined","isNumber","isDate","arrLen","extend","createUTC","createLocalOrUTC","defaultParsingFlags","getParsingFlags","some","fun","parsedParts","isNowValid","createInvalid","momentProperties","updateInProgress","copyConfig","momentPropertiesLen","Moment","config","isMoment","deprecate","firstTime","argLen","deprecations","deprecateSimple","isFunction","parentConfig","childConfig","Locale","defaultCalendar","calendar","mom","now","zeroFill","number","targetLength","forceSign","absNumber","zerosToFill","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","padded","ordinal","func","removeFormattingTokens","makeFormatFunction","formatMoment","expandFormat","replaceLongDateFormatTokens","defaultLongDateFormat","longDateFormat","formatUpper","defaultInvalidDate","invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","defaultRelativeTime","relativeTime","withoutSuffix","isFuture","pastFuture","diff","aliases","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedInput","normalizedProp","priorities","getPrioritizedUnits","unitsObj","u","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","match1to2NoLeadingZero","match1to2HasZero","regexes","addRegexToken","regex","strictRegex","isStrict","localeData","getParseRegexForToken","unescapeFormat","regexEscape","p1","p2","p3","p4","absFloor","toInt","argumentForCoercion","coercedNumber","addParseToken","tokenLen","addWeekParseToken","addTimeToArrayFromToken","isLeapYear","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","y","daysInYear","getSetYear","makeGetSet","getIsLeapYear","keepTime","set$1","isUTC","stringGet","stringSet","prioritized","prioritizedLen","mod","indexOf","daysInMonth","modMonth","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","localeMonthsShort","handleStrictParse","monthName","ii","llc","localeMonthsParse","setMonth","getSetMonth","getDaysInMonth","monthsShortRegex","computeMonthsParse","monthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","shortP","longP","createDate","M","ms","createUTCDate","firstWeekOffset","dow","doy","fwd","fwdlw","dayOfYearFromWeeks","week","weekday","localWeekday","weekOffset","dayOfYear","resYear","resDayOfYear","weekOfYear","resWeek","weeksInYear","weekOffsetNext","localeWeek","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","parseWeekday","parseIsoWeekday","shiftWeekdays","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","weekdays","localeWeekdaysShort","localeWeekdaysMin","handleStrictParse$1","weekdayName","localeWeekdaysParse","getSetDayOfWeek","getSetLocaleDayOfWeek","getSetISODayOfWeek","weekdaysRegex","computeWeekdaysParse","weekdaysShortRegex","weekdaysMinRegex","minPieces","minp","shortp","longp","hFormat","kFormat","meridiem","lowercase","matchMeridiem","kInput","pos1","pos2","localeIsPM","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","hours","minutes","isLower","baseConfig","localeFamilies","globalLocale","commonPrefix","arr1","arr2","minl","normalizeLocale","chooseLocale","names","loadLocale","isLocaleNameSane","oldLocale","aliasedRequire","getSetGlobalLocale","getLocale","defineLocale","updateLocale","tmpLocale","listLocales","checkOverflow","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","rfc2822","obsOffsets","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","weekdayProvided","weekdayActual","calculateOffset","obsOffset","militaryOffset","numOffset","hm","configFromRFC2822","parsedArray","configFromString","defaults","currentDateArray","nowValue","configFromArray","currentDate","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","w","weekYear","temp","weekdayOverflow","curWeek","createLocal","skipped","stringLength","totalParsedInputLength","era","meridiemFixWrap","isPm","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","configFromObject","dayOrDate","createFromConfig","prepareConfig","configFromInput","prototypeMin","other","prototypeMax","pickBy","moments","min","ordering","isDurationValid","unitHasDecimal","orderLen","isValid$1","createInvalid$1","createDuration","Duration","duration","years","quarters","months","weeks","days","seconds","milliseconds","isDuration","absRound","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","offsetFromString","chunkOffset","matcher","matches","chunk","cloneWithOffset","model","getDateOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","ret","diffRes","parseIso","momentsDifference","inp","positiveMomentsDifference","base","createAdder","period","dur","tmp","isAdding","updateOffset","subtract","isString","isMomentInput","isNumberOrStringArray","isMomentInputObject","objectTest","propertyTest","properties","propertyLen","arrayTest","dataTypeTest","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","time","sod","isAfter","localInput","isBefore","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","that","zoneDelta","monthDiff","wholeMonthDiff","anchor2","adjust","toString","toISOString","keepOffset","utc","inspect","zone","datetime","inputString","fromNow","toNow","newLocaleData","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","startOf","startOfDate","endOf","valueOf","unix","toDate","toArray","toObject","toJSON","isValid$2","parsingFlags","invalidAt","creationData","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","localeEras","eras","localeErasParse","eraName","abbr","narrow","localeErasConvertYear","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","erasAbbrRegex","erasNarrowRegex","abbrPieces","namePieces","narrowPieces","erasName","erasAbbr","erasNarrow","addWeekYearFormatToken","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetSecond","getSetMillisecond","parseMs","getZoneAbbr","getZoneName","createUnix","createInZone","preParsePostFormat","proto$1","get$1","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","mathAbs","abs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","makeAs","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","valueOf$1","clone$1","get$2","makeGetter","round","thresholds","substituteTimeAgo","relativeTime$1","posNegDuration","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","threshold","humanize","argWithSuffix","argThresholds","withSuffix","th","abs$1","toISOString$1","total","totalSign","ymSign","daysSign","hmsSign","proto$2","getCanonicalLocale","canonicalLocale","getLocaleLabel","formatter","appLocale","ex","getListFormatter","getLocalePath","_i18n","defaultLocale","omitDefaultLocaleFromFileName","FULL_DATE_TIME_REGEX","DATE_REGEX","TIME_SUFFIX_REGEX","DATE_FORMAT_OPTIONS","TIME_FORMAT_OPTIONS","DATE_TIME_FORMAT_OPTIONS","parseDateTimeConfig","fieldConfig","getDate","currentValue","timeOnly","moment","getCurrentDateTime","dateOnly","dateStr","timeStr","getCurrentValue","inputValue","inputFormat","timeSuffix","getInputValue","dateForParts","getDateTimeFieldDisplayValue","DATE_TRANSFORMATION_REGEX","DEFAULT_TRANSFORMATION_REGEX","TERNARY_TRANSFORMATION_REGEX","TRUNCATE_TRANSFORMATION_REGEX","applyUpperCaseTransformation","applyLowerCaseTransformation","applyDateTransformation","sValue","applyDefaultTransformation","ternaryTransformation","truthyValue","falsyValue","applyTruncateTransformation","applyTransformation","transformation","dateTransformer","defaultTransformer","ternaryTransformer","truncateTransformer","applyTransformations","transformations","sleep","types","__classPrivateFieldGet","_Mime_extensionToType","_Mime_typeToExtension","_Mime_typeToExtensions","Mime","typeMap","force","extensions","ext","allExtensions","starred","currentType","hasPath","mime","standardTypes","otherTypes","isHighSurrogate","codePoint","isLowSurrogate","getLength","byteLength","charLength","curByteLength","segment","browser","prevCodePoint","require$$0","require$$1","illegalRe","controlRe","reservedRe","windowsReservedRe","windowsTrailingRe","sanitize","replacement","sanitized","sanitizeFilename","createPathRegEx","encodeFilePath","hasAtPrefix","decodeFilePath","formatSize","kb","mb","gb","tb","renameIfNeeded","otherNames","dupName","formatFileName","originalName","slugificationEnabled","assetNamesInSameFolder","createPath","segments","resolvePath","nameFound","lastIndex","getBlob","getGitHash","DataView$1","bufferTypeIsUnsupported","littleEndian","getDataView","byteOffset","DataViewWrapper","getStringFromDataView","dataView","getStringValueFromArray","getNullTerminatedStringFromDataView","getUnicodeStringFromDataView","getPascalStringFromDataView","charArray","charCode","objectAssign","deferInit","initializer","initialized","getBase64Image","image","byte","dataUriToBuffer","dataUri","decodedData","padStart","character","strRepeat","parseFloatRadix","COMPRESSION_METHOD_NONE","COMPRESSION_METHOD_DEFLATE","decompress","compressionMethod","returnType","decompressionStream","decompressedStream","arrayBuffer","Constants","getStringValue","getEncodedString","getCalculatedGpsValue","LITTLE_ENDIAN","BIG_ENDIAN","ByteOrder","getByteOrder","tiffHeaderOffset","Tiff","isTiffFile","findTiffOffsets","hasTiffMarker","Jpeg","isJpegFile","findJpegOffsets","MIN_JPEG_DATA_BUFFER_LENGTH","JPEG_ID","JPEG_ID_SIZE","APP_ID_OFFSET","APP_MARKER_SIZE","JFIF_DATA_OFFSET","TIFF_HEADER_OFFSET","IPTC_DATA_OFFSET","XMP_DATA_OFFSET","XMP_EXTENDED_DATA_OFFSET","APP2_ICC_DATA_OFFSET","MPF_DATA_OFFSET","APP2_ICC_IDENTIFIER","ICC_CHUNK_NUMBER_OFFSET","ICC_TOTAL_CHUNKS_OFFSET","APP2_MPF_IDENTIFIER","SOF0_MARKER","SOF2_MARKER","DHT_MARKER","DQT_MARKER","DRI_MARKER","SOS_MARKER","APP0_MARKER","APP1_MARKER","APP2_MARKER","APP13_MARKER","APP15_MARKER","COMMENT_MARKER","FILL_BYTE","APP0_JFIF_IDENTIFIER","APP1_EXIF_IDENTIFIER","APP1_XMP_IDENTIFIER","APP1_XMP_EXTENDED_IDENTIFIER","APP13_IPTC_IDENTIFIER","appMarkerPosition","fieldLength","sof0DataOffset","sof2DataOffset","jfifDataOffset","iptcDataOffset","xmpChunks","iccChunks","mpfDataOffset","isSOF0Marker","isSOF2Marker","isApp0JfifMarker","isApp1ExifMarker","isApp1XmpMarker","getXmpChunkDetails","isApp1ExtendedXmpMarker","getExtendedXmpChunkDetails","isApp13PhotoshopMarker","isApp2ICCMarker","iccDataOffset","iccDataLength","iccChunkNumber","iccChunksTotal","isApp2MPFMarker","isAppMarker","isFillByte","markerIdLength","isXmpIdentifier","isExtendedXmpIdentifier","appMarker","Png","isPngFile","findPngOffsets","PNG_ID","PNG_CHUNK_LENGTH_SIZE","PNG_CHUNK_TYPE_SIZE","PNG_CHUNK_LENGTH_OFFSET","PNG_CHUNK_TYPE_OFFSET","PNG_CHUNK_DATA_OFFSET","PNG_XMP_PREFIX","TYPE_TEXT","TYPE_ITXT","TYPE_ZTXT","TYPE_PHYS","TYPE_TIME","TYPE_EXIF","TYPE_ICCP","offsets","isPngImageHeaderChunk","isPngXmpChunk","dataOffset","getPngXmpDataOffset","isPngTextChunk","chunkType","isPngExifChunk","isPngIccpChunk","chunkDataLength","iccHeaderOffset","profileName","compressedProfileOffset","parseIccHeader","isPngChunk","SUPPORTED_PNG_CHUNK_TYPES","numberOfNullSeparators","get64BitValue","parseItemLocationBox","contentOffset","boxLength","sizes","getItemLocationBoxOffsetsAndSizes","offsetSize","lengthSize","baseOffsetSize","indexSize","getIndexSize","itemCount","getItemCount","getItems","getItemId","getVariableSizedValue","extent","getExtentIndex","TYPE_FTYP","TYPE_IPRP","TYPE_META","TYPE_ILOC","TYPE_IINF","TYPE_INFE","TYPE_IPCO","TYPE_COLR","ITEM_INFO_TYPE_EXIF","ITEM_INFO_TYPE_MIME","ITEM_INFO_TYPE_URI","parseBox","getBoxLength","parseFileTypeBox","parseItemPropertiesBox","parseItemPropertyContainerBox","parseColorInformationBox","parseMetadataBox","parseItemInformationBox","parseItemInformationEntryBox","extendsToEndOfFile","hasExtendedSize","hasEmptyHighBits","findOffsets","metaBox","findMetaBox","findExifOffset","findXmpChunks","findIccChunks","box","exifItemId","findIinfExifItemId","ilocItem","findIlocItem","exifOffset","getTiffHeaderOffset","itemInfo","itemId","xmpItemId","findIinfXmpItemId","ilocItemExtent","icc","parseSubBoxes","parseIcc","colorType","ACCEPTED_ITEM_INFO_TYPES","subBoxes","getItemInformationBoxOffsetsAndSizes","Heic","isHeicFile","findHeicOffsets","HEIC_MAJOR_BRANDS","headerBox","Avif","isAvifFile","findAvifOffsets","Webp","isWebpFile","RIFF_ID","WEBP_MARKER","EXIF_IDENTIFIER","hasAppMarkers","vp8xChunkOffset","chunkId","chunkSize","Gif","isGifFile","GIF_SIGNATURE_SIZE","GIF_SIGNATURES","Xml","isXMLFile","XML_MARKER_OFFSET","XML_MARKER","ImageHeader","parseAppMarkers","addFileType","fileType","fileTypeDescription","TagNamesCommon","denominator","TagNames0thIfd","sample","decodeXPValue","TagNamesExifIfd","focalLengthFrom","focalLengthTo","focalLengths","maxAperture","TagNamesGpsIfd","numerator","TagNamesInteroperabilityIfd","TagNamesMpfIfd","TagNamesCanonIfd","TagNamesPentaxIfd","tagNames0thExifIfds","IFD_TYPE_0TH","IFD_TYPE_1ST","IFD_TYPE_EXIF","IFD_TYPE_GPS","IFD_TYPE_INTEROPERABILITY","IFD_TYPE_MPF","IFD_TYPE_CANON","IFD_TYPE_PENTAX","TagNames$1","typeSizes","tagTypes","Types","getAsciiValue","getByteAt","getAsciiAt","getShortAt","getLongAt","getRationalAt","getUndefinedAt","getSlongAt","getSrationalAt","getIfdPointerAt","getTypeSize","byteOrder","typeName","getTagValueAt","get0thIfdOffset","readIfd","ifdType","offsetOrigin","includeUnknown","FIELD_COUNT_SIZE","FIELD_SIZE","numberOfFields","getNumberOfFields","fieldIndex","readTag","nextIfdOffset","TAG_TYPE_OFFSET","TAG_COUNT_OFFSET","TAG_VALUE_OFFSET","tagCode","tagType","tagCount","tagValue","tagValueOffset","TagNames","tagValueFitsInOffsetSlot","getTagValue","tagValueFitsInDataView","forceByteType","splitNullSeparatedAsciiString","decodeAsciiValue","tagDescription","getDescriptionFromTagValue","valueIndex","asciiValue","EXIF_IFD_POINTER_KEY","GPS_INFO_IFD_POINTER_KEY","INTEROPERABILITY_IFD_POINTER_KEY","Tags","read","read0thIfd","readExifIfd","readGpsIfd","readInteroperabilityIfd","MpfTags","ENTRY_SIZE","addMpfImages","images","getImageNumberValue","getImageFlags","getImageFormat","getImageType","imageSize","imageOffset","getImageOffset","dependentImage1EntryNumber","dependentImage2EntryNumber","flagsDescription","imageFormat","imageIndex","mpEntry","isFirstIndividualImage","FileTags","fileDataOffset","numberOfColorComponents","getNumberOfColorComponents","getDataPrecision","getImageHeight","getImageWidth","getSubsampling","components","componentOffset","getComponentIds","getSamplingType","ids","compontent","JfifTags","thumbnailWidth","getThumbnailWidth","thumbnailHeight","getThumbnailHeight","getVersion","getResolutionUnit","getXResolution","getYResolution","thumbnail","getThumbnail","majorVersion","minorVersion","getResolutionUnitDescription","thumbnailLength","IptcTagNames","getCreationDate","getCreationTime","getEncodingName","character0","character1","description","intValue","formatVersions","objectDataPreviewFileFormat","parsedTime","TextDecoder$1","TAG_HEADER_SIZE","TagDecoder","decode","Decoder","TextDecoder","BYTES_8BIM","BYTES_8BIM_SIZE","RESOURCE_ID_SIZE","RESOURCE_NAME_SIZE_SIZE","RESOURCE_NAME_MIN_SIZE","RESOURCE_SIZE_SIZE","RESOURCE_BLOCK_MIN_HEADER_SIZE","NAA_RESOURCE_BLOCK_TYPE","IptcTags","parseTags","naaBlock","newDataOffset","getNaaResourceBlock","resourceBlock","getResourceBlock","isNaaResourceBlock","getBlockPadding","resourceNameSize","resourceNameTotalSize","endOfBlockOffset","tagSize","leadByteIsMissing","getTagName","getTagDescription","tagIsRepeatable","tagContainsEncoding","tagIsName","hasDynamicName","hasDescriptionProperty","tagValueIsText","XmpTagNames","fraction","calculateGPSValue","parseNumber","numbers","isFraction","degreesString","minutesString","degrees","DOMParser$1","domParser","DOMParser","onErrorStopParsing","isMissingNamespaceError","missingNamespaceStrings","addMissingNamespaces","xmlString","rootTagMatch","rootTagName","declaredPrefixes","getAllDeclaredNamespacePrefixes","missingPrefixes","getUsedNamespacePrefixes","namespaceDeclarations","createNamespaceDeclarations","insertDeclarationsIntoRoot","xmlContent","prefixes","namespaceDeclarationRegex","prefixUsageRegex","KNOWN_NAMESPACE_URIS","declarations","uri","rootTagPattern","XmpTags","ParseError","readTags","standardXmp","extendedXmp","extractCompleteChunks","hasStandardTags","hasExtendedTags","combineChunks","completeChunks","totalLength","combinedChunks","slice","chunkDataView","getDocument","rdf","getRDF","parseXMPObject","convertToObject","_domParser","parseFromString","trimXmlSource","xmlSource","isRetry","errors","isTopNode","childNodes","getChildNodes","hasTextOnlyContent","getTextValue","getElementsFromNodes","isElement","nodeElement","getElementFromNode","getAttributes","xmpObject","nodeName","parseNodeAttributesAsTags","parseNodeChildrenAsTags","isTagAttribute","getLocalName","getDescription","isNamespaceDefinition","arrayDescription","getDescriptionOfArray","getDescriptionOfObject","descriptions","getClearTextKey","parseNodeAsTag","isDuplicateTag","parseNodeAsDuplicateTag","isEmptyResourceTag","hasNestedSimpleRdfDescription","parseNodeAsSimpleRdfDescription","hasNestedStructureRdfDescription","parseNodeAsStructureRdfDescription","isCompactStructure","parseNodeAsCompactStructure","parseNodeAsArray","parseNodeAsSimpleValue","parseNodeAttributes","parseNodeChildrenAsAttributes","parseRdfValue","getURIValue","getArrayChild","parseArrayValue","PathRecordTypes","PATH_RECORD_SIZE","pathResource","PATH_RECORD_TYPES","parseBezierKnot","parseClipboard","parsePathPoint","vertical","getFixedPointNumber","binaryPoint","integer","PhotoshopTags","SIGNATURE","TAG_ID_SIZE","RESOURCE_LENGTH_SIZE","SIGNATURE_SIZE","bytes","signature","tagId","tagNameSize","resourceSize","valueDataView","stringSize","iccTags","iccProfile","toCompany","parseDate","sliceToString","IccTags","PROFILE_HEADER_LENGTH","ICC_TAG_COUNT_OFFSET","ICC_SIGNATURE","TAG_TYPE_DESC","TAG_TYPE_MULTI_LOCALIZED_UNICODE_TYPE","TAG_TYPE_TEXT","TAG_TYPE_SIGNATURE","TAG_TABLE_SINGLE_TAG_DATA","iccData","readCompressedIcc","readIcc","compressionMethodIsSupported","compressedDataView","totalIccProfileLength","iccBinaryData","getBuffer","chunkNumber","iccDataChunk","chunkData","iccDoesNotHaveTagCount","hasTagsData","tagHeaderOffset","iccProfileKeys","profileEntry","tagSignature","tagOffset","tagValueSize","addTag","numRecords","recordSize","recordNum","languageCode","countryCode","textLength","textOffset","valObj","valIndex","SHOT_INFO_AUTO_ROTATE","CanonTags","parseShotInfo","shotInfoData","getAutoRotateDescription","autoRotate","BYTE_ORDER_OFFSET","PENTAX_IFD_OFFSET","MODEL_ID","LIK3III","PentaxTags","originOffset","hasLevelInfoK3III","parseLevelInfoK3III","levelInfoOffset","cameraOrientation","getOrientationDescription","rollAngle","getRollAngleDescription","pitchAngle","getPitchAngleDescription","orientation","PngFileTags","getBitDepth","getColorType","getCompression","getFilter","getInterlace","COLOR_TYPES","INTERLACE_TYPES","PngTextTags","STATE_KEYWORD","STATE_COMPRESSION","STATE_LANG","STATE_TRANSLATED_KEYWORD","STATE_TEXT","COMPRESSION_SECTION_ITXT_EXTRA_BYTE","COMPRESSION_FLAG_COMPRESSED","EXIF_OFFSET","pngTextChunks","tagsPromises","nameAndValue","getNameAndValue","isExifGroupTag","decodeRawData","isIptcGroupTag","keywordChars","langChars","valueChars","parsingState","getCompressionMethod","moveToNextState","decompressedValueChars","getEncodingFromType","_decompressedValueChars","constructTag","getValue","getName","hexToDataView","PngTags","chunkOffsets","chunkLength","getPixelsPerUnitX","getPixelsPerUnitY","getPixelUnits","getModifyDate","tagFitsInBuffer","pad","Vp8xTags","IMAGE_WIDTH_OFFSET","IMAGE_HEIGHT_OFFSET","getAlpha","getAnimation","getThreeByteValue","GifFileTags","getGifVersion","getGlobalColorMap","getColorResolution","COMPRESSION_JPEG","Thumbnail","thumbnailTags","hasJpegThumbnail","FOCAL_PLANE_RESOLUTION_UNIT","UNIT_FACTORS","Composite","expanded","compositeTags","hasCompositeTags","focalLength","focalPlaneXResolution","focalPlaneYResolution","focalPlaneResolutionUnit","imageWidth","imageHeight","focalLengthIn35mmFilm","getFocalLengthIn35mmFilmValue","scaleFactorTo35mmEquivalent","getScaleFactorTo35mmEquivalent","fieldOfView","getFieldOfView","group","resolutionUnitFactor","focalPlaneXResolutionMm","focalPlaneYResolutionMm","sensorWidthMm","sensorHeightMm","sensorDiagonal","MetadataMissingError","exifErrors","ExifReader","load","loadView","isFilePathOrURL","loadFile","fileContents","loadFromData","isBrowserFileObject","loadFileObject","fetchRemoteFile","nodeGetRemoteFile","isDataUri","loadLocalFile","url","response","requireNodeGet","requireNodeFs","fd","stat","readerEvent","isNodeBuffer","foundMetaData","pngHeaderOffset","pngChunkOffsets","gifHeaderOffset","hasFileData","hasJfifData","hasExifData","addGpsGroup","hasIptcData","readIptcTags","hasXmpData","readXmpTags","readPhotoshopTags","hasIccData","readIccTags","hasCanonData","readCanonTags","hasPentaxType1Data","readPentaxTags","addIccTags","hasMpfData","readMpfTags","hasPngFileData","hasPngTextData","readTagsPromise","addPngTextTags","tagList","hasPngData","hasVp8xData","hasGifFileData","composite","groupKey","iccDataOffsets","PENTAX_ID_STRING","pngFileDataOffset","toFixed","decimals","factor","EXIF_DATETIME_PATTERN","extractExifData","asset","DateTimeOriginal","DateTime","Latitude","Longitude","dateTimeMatch","createdDate","coordinates","dateTime","getImageSourceInfo","listener","getMediaSourceInfo","videoWidth","videoHeight","getSourceInfo","getMediaMetadata","dimensions","getUnpkgURL","loadModule","library","__vitePreload","RASTER_IMAGE_FORMATS","RASTER_IMAGE_TYPES","RASTER_IMAGE_EXTENSION_REGEX","VECTOR_IMAGE_TYPES","VECTOR_IMAGE_EXTENSION_REGEX","SUPPORTED_IMAGE_TYPES","RASTER_IMAGE_CONVERSION_FORMATS","encodingSupportMap","checkIfEncodingIsSupported","canvas","exportCanvasAsBlob","quality","imageData","encode","calculateResize","originalWidth","originalHeight","targetWidth","targetHeight","fit","isLandscape","isSmaller","scale","newWidth","newHeight","resizeCanvas","width","height","createImageSource","createVideoSource","video","createSource","transformImage","naturalWidth","naturalHeight","optimizeSVG","optimize","PDFJS_DIST_URL","PDFJS_MODULE_URL","PDFJS_WORKER_URL","PDFJS_GET_DOC_OPTIONS","pdfjs","renderPDF","pdfPage","viewport","requestedAssetPaths","getAssetBlob","retryCount","_blob","backend","getAssetBlobURL","thumbnailDB","getAssetThumbnailURL","cacheOnly","isPDF","thumbnailBlob","getAssetPublicURL","pathOnly","allowSpecial","publicPath","hasTemplateTags","baseURL","encodingEnabled","getMediaFieldURL","getAssetByPath","defaultAssetDetails","getAssetDetails","blobBaseURL","metaData","getEntriesByAssetURL","dataLoaded","dataLoadedProgress","allEntryFolders","allEntries","entryParseErrors","getEntryFoldersByPath","filePathMap","getCollection","getLocalizedLabel","getIndexFile","indexFile","isEntryCollection","isCollectionIndexFile","canCreateIndexFile","getEntriesByCollection","DATE_TIME_TEMPLATE_REGEX","getAssociatedCollections","extractDateTime","dateFieldName","fields","widget","fieldValue","getEntryPreviewURL","collectionFile","showLinks","entryFilePath","pathTemplate","regularFields","isIndexFile","dateTimeParts","fillTemplate","getEntryRepoBlobURL","isValidCollectionFile","getValidCollectionFiles","files","getCollectionFile","_collection","getCollectionFileLabel","getCollectionFilesByEntry","_file","getCollectionFileEntry","getCollectionFileIndex","collections","singletons","getValidCollections","MEDIA_WIDGETS","MULTI_VALUE_WIDGETS","MIN_MAX_VALUE_WIDGETS","g","C","S","N","O","A","D","P","F","L","I","z","K","R","B","W","J","$","U","V","Y","H","q","G","Q","Z","xi","tt","et","nt","rt","Ts","xo","co","zs","ot","_r","lt","zo","eo","Ss","vi","To","Es","ct","Pr","sr","vs","Ms","Xs","at","ut","Ro","yt$5","yt","Ct","mt","xt","Oo","vt","Tt","Nt","bt","ni","wt","Et","Mt","Ot","At","Dt","Pt","Ft","Lt","It","zt","Kt","Rt","Bt","Wt","Jt","$t","jt","Ut","Vt","Yt","Ht","fe","oe","qt","Ys","Gt","Xt","Qt","Zt","te","ie","Zs","ne","Wn","se","le","ae","ki","Ns","ue","de","ge","pe","ye","me","xe","Ce","Se","ve","Te","ke","Ne","be","we","Ee","Me","Oe","Ae","De","Pe","Fe","Le","Ie","ze","Ke","Re","Be","We","Je","$e","je","Ue","Ve","Ye","He","qe","Ge","Xe","Qe","Ze","en","nn","rn","sn","ln","an","Qs","yn","$s","wn","mn","Bs","Ws","_n","Js","js","ko","rs","gn","xs","pn","bn","Sn","Ls","Is","Zr","Fr","Dr","Nn","Gs","xn","un","dn","hn","Cn","Ds","us","hs","vn","Tn","kn","En","Mn","On","Co","Ps","An","Dn","Fn","os","Ln","oo","zr","yr","ys","Lr","fo","zn","ps","Cl","yl","ei","Fo","_o","hr","Cs","Bi","Kn","wo","Jn","Rn","Bn","$n","jn","Un","Vs","Vn","Yn","Hn","qn","gs","tr","Xn","rr","Gn","ir","Er","Kr","or","Qn","Zn","cr","er","bo","nr","lr","ur","pl","Ol","Sl","Qr","fr","dr","gr","Tl","gl","pr","Qo","Xo","ol","cl","qo","Pl","Nl","xr","br","vl","Nr","kl","Ml","Mo","Eo","$r","Ur","mo","Rr","uo","dl","Or","bl","Cr","vr","Sr","mr","Tr","Os","As","kr","wr","Mr","Ir","Br","Pi","T","E","Li","no","lo","Wr","Jr","jr","Al","Vr","Yr","Hr","qr","Gr","Xr","ti","ri","qi","si","oi","li","ai","ui","fi","Yi","Ii","yo","di","gi","hi","Ni","Xi","pi","yi","mi","Ci","Si","Ti","Ei","bi","wi","Mi","Oi","Ai","Di","zi","Ki","Ri","Lo","Wi","Ji","$i","ji","Vi","Hi","Fs","Po","io","so","Gi","Qi","es","ks","ds","_s","Ks","Rs","Us","No","ao","po","vo","Ao","Do","Io","Ko","Wo","Jo","$o","Vo","Uo","jo","Yo","Ho","rl","Zo","tl","il","sl","ul","ll","al","hl","ml","xl","Fl","Dl","wl","El","PUBLIC_VERSION","strings","restProps","$.rest_props","$$props","$0","$.derived","isMac","matchShortcuts","shortcuts","ctrlKey","metaKey","altKey","shiftKey","shortcut","activateKeyShortcuts","platformKeyShortcuts","disabled","offsetParent","left","removeListener","addListener","$.noop","$.template_effect","$.set_style","span","generateElementId","waitForVisibility","Popup$1","intersectionRect","rootBounds","contentHeight","contentWidth","topMargin","bottomMargin","right","bottom","anchorElement","popupElement","positionBaseElement","hasModifier","open","activatePopup","Popup","event_handler","dialog","lightDismiss","event_handler_1","escapeDismiss","setOpenClass","showBackdrop","setActiveClass","$.get","showContent","keepContent","$$render","consequent","$.bind_this","dialog_1","$$value","$.prop","role","focus","close","returnValue","waitForTransition","openDialog","$.set","closeDialog","$.user_effect","placeholder","Placeholder","dialogSnippet","div","contentType","classes","$style","$.event","hovered","parentDialogElement","hoveredTimeout","touchOptimized","dialogElement","$.state","touchEnabled","popupInstance","$$stores","_open","touch","contentWrapper","$$anchor","alternate","className","valueType","hidden","readonly","pressed","keyShortcuts","label","iconic","pill","flex","popupPosition","showPopupBackdrop","consequent_2","consequent_1","alternate_1","button","show","dismissible","icon","$_","getSelectedItemDetail","normalize","Group$1","clickToSelect","childRoles","childSelectedAttr","focusChild","selectFirst","allMembers","defaultSelected","isSelected","controlTarget","newTarget","targetRole","targetParent","selectByClick","selectByKeydown","isMenuItemCheckbox","isMenuItemRadio","multiSelect","singleSelect","isTarget","controlTargetId","activeMembers","currentTarget","member","colCount","searchTerms","terms","_terms","searchValue","term","activateGroup","params","Group","newParams","required","invalid","popupPositionBaseElement","buttonElement","wrapper","on_click","$.props_id","checked","indeterminate","$1","consequent_4","showClose","showOk","showCancel","okLabel","okShortcuts","okDisabled","cancelLabel","cancelShortcuts","cancelDisabled","focusInput","modal","consequent_3","consequent_5","consequent_6","consequent_7","showInlineLabel","inputmode","textboxAttrs","on_change","onSelect","onCancel","filePicker","$$element","$.action","$$node","$$action_arg","filtered","wrap","isPopupOpen","isPopupHovered","hasItems","itemChunkSize","loadedItemSize","spinner","loading","isIntersecting","$.snippet","node_1","inputElement","editable","filterThreshold","selectedSelector","comboboxElement","popupContent","showFilter","hasMatchingOptions","_onChange","_onSelect","detail","div_1","$.set_text","text_1","$.proxy","selectedValue","$.each","node_4","$$item","onPointerDown","on_pointerdown_1","on_keydown","onKeyDown","on_pointerdown_2","on_keydown_1","sliderLabel","sliderLabels","optionLabels","multiThumb","barWidth","positionList","valueList","startX","startScreenX","sliderPositions","dragging","targetPointerId","targetValueIndex","moveThumb","fromIndex","toIndex","_value","onPointerMove","screenX","pointerId","onPointerUp","clientX","onValueChange","value0","value1","stepCount","stepWidth","$.document","$.set_attribute","div_4","node_2","div_3","indicatorStyle","updateIndicator","offsetTop","offsetLeft","offsetWidth","offsetHeight","popoverBase","popover","toast","timerId","mql","setMode","X","_t","_self","Prism","uniqueId","plainTextGrammar","Token","deepClone","language","err","scripts","defaultActivation","classList","redef","inside","insert","grammar","newToken","old","DFS","objId","propertyType","container","env","insertHighlightedCode","highlightedCode","worker","tokenList","LinkedList","addAfter","matchGrammar","callbacks","matchedStr","matchPattern","lookbehind","lookbehindLength","startNode","startPos","rematch","patterns","patternObj","greedy","currentNode","removeCount","matchStr","after","reach","removeFrom","removeRange","wrapped","nestedRematch","tail","newNode","immediateClose","script","highlightAutomaticallyCallback","readyState","module","global","includedCdataInside","def","attrName","markup","LOADING_MESSAGE","FAILURE_MESSAGE","FAILURE_EMPTY_MESSAGE","EXTENSIONS","STATUS_ATTR","STATUS_LOADING","STATUS_LOADED","STATUS_FAILED","SELECTOR","success","xhr","parseRange","pre","autoloader","logged","inner","createInline","tableCell","tableRow","tableLine","walkTokens","codeLang","codeBlock","cls","textContent","ele","tagPattern","KNOWN_ENTITY_NAMES","known","powershell","multilineComment","typeInside","keywords","classNamePrefix","keyword","modName","I$2","ot$2","gt","ft","ht","St","g$1","m$2","rt$1","Nt$2","ye$1","Oe$1","availableButtons","textFormatButtonTypes","inlineButtonTypes","blockButtonTypes","TABLE_ROW_REG_EXP","TABLE_ROW_DIVIDER_REG_EXP","getTableColumnsSize","table","row","isTableRowNode","createTableCell","cell","createTableCellNode","TableCellHeaderStates","convertFromMarkdownString","TRANSFORMERS","mapToTableCells","TABLE","TableNode","TableRowNode","TableCellNode","isTableNode","rowOutput","isHeaderRow","isTableCellNode","convertToMarkdownString","parentNode","_children","rows","lastRow","matchCells","maxCells","isParagraphNode","firstChild","isTextNode","cells","previousSibling","createTableNode","createTableRowNode","allTransformers","prismBaseURL","editorConfig","HeadingNode","QuoteNode","LinkNode","ListNode","ListItemNode","CodeNode","CodeHighlightNode","getSelectionTypes","selection","getSelection","isRangeSelection","inlineTypes","ElementNode","getNearestNodeOfType","isLinkNode","isListItemNode","blockType","isHeadingNode","isListNode","isQuoteNode","isCodeNode","isCodeHighlightNode","onEditorUpdate","editor","initEditor","isCodeEditor","defaultLanguage","transformer","createEditor","registerRichText","registerDragonSupport","registerHistory","createEmptyHistoryState","registerCodeHighlighting","TOGGLE_LINK_COMMAND","toggleLink","COMMAND_PRIORITY_NORMAL","INSERT_UNORDERED_LIST_COMMAND","insertList","INSERT_ORDERED_LIST_COMMAND","INSERT_PARAGRAPH_COMMAND","handleListInsertParagraph","getRoot","createCodeNode","OUTDENT_CONTENT_COMMAND","INDENT_CONTENT_COMMAND","loadCodeHighlighter","canonicalLang","prismComponents","convertMarkdownToLexical","focusEditor","editorStore","lexicalRoot","onUpdate","hasConverterError","useRichText","newValue","onClick","createEditorStore","editorId","showConverterError","convertMarkdown","originalValue","hasChange","codeLanguages","aliasTitles","selectedLanguage","getNodeByKey","showLanguageSwitcher","backticks","_lang","_code","autoResize","selectionTypeMatches","FORMAT_TEXT_COMMAND","insertNodes","createParagraphNode","dialogMode","anchorURL","anchorText","createLink","getTextContent","removeLink","updateLink","_selection","onButtonClick","onInputKeyDown","onDialogClose","getPreviousSelection","createRangeSelection","createTextNode","setSelection","_registerCommand","KEY_DOWN_COMMAND","changeBlockType","headingLevel","setBlocksType","createHeadingNode","createQuoteNode","imageComponent","otherComponents","blockLevelButtons","inlineLevelButtons","node_8","modes","buttons","edited","maximumFractionDigits","isMin","isMax","newInputValue","decrease","increase","passwordVisible","stylesheets","fontLoader","mediaQuery","dataset","applyTheme","href","event_handler_2","initLocales","__vite_glob_0_0","__vite_glob_0_1","visible","setPrototypeOf","isFrozen","getPrototypeOf","getOwnPropertyDescriptor","freeze","seal","create","apply","construct","thisValue","Func","arrayForEach","unapply","arrayLastIndexOf","arrayPop","arrayPush","arraySplice","stringToLowerCase","stringToString","stringMatch","stringReplace","stringIndexOf","stringTrim","objectHasOwnProperty","regExpTest","typeErrorCreate","unconstruct","thisArg","_len","_len2","_key2","addToSet","transformCaseFunc","lcElement","cleanArray","newObject","lookupGetter","fallbackValue","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","CUSTOM_ELEMENT","EXPRESSIONS","getGlobal","_createTrustedTypesPolicy","trustedTypes","purifyHostElement","ATTR_NAME","policyName","scriptUrl","_createHooksMap","createDOMPurify","window","DOMPurify","document","originalDocument","currentScript","DocumentFragment","HTMLTemplateElement","Node","Element","NodeFilter","NamedNodeMap","HTMLFormElement","ElementPrototype","cloneNode","remove","getNextSibling","getParentNode","template","trustedTypesPolicy","emptyHTML","implementation","createNodeIterator","createDocumentFragment","getElementsByTagName","importNode","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","SAFE_FOR_XML","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","SANITIZE_NAMED_PROPS_PREFIX","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","DEFAULT_PARSER_MEDIA_TYPE","CONFIG","formElement","isRegexOrFunction","testValue","_parseConfig","cfg","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkValidNamespace","parentTagName","_forceRemove","_removeAttribute","_initDocument","dirty","leadingWhitespace","dirtyPayload","_createNodeIterator","_isClobbered","_isNode","_executeHooks","hook","_sanitizeElements","_isBasicCustomElement","childCount","childClone","expr","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","hookEvent","attr","namespaceURI","attrValue","initValue","_sanitizeShadowDOM","shadowNode","shadowIterator","importedNode","returnNode","nodeIterator","serializedHTML","entryPoint","hookFunction","purify","purify_cjs","STORAGE_KEY","prefsError","prefs","_prefs","newPrefs","theme","underlineLinks","beta","devMode","appLocales","autoTheming","autoTheme","entryDraft","i18nAutoDupEnabled","entryDraftModified","draft","originalLocales","currentLocales","originalSlugs","currentSlugs","originalValues","currentValues","repeat","trimLeadingNewlines","trimTrailingNewlines","indexEnd","blockElements","voidElements","isVoid","hasVoid","meaningfulWhenBlankElements","isMeaningfulWhenBlank","hasMeaningfulWhenBlank","rules","hLevel","underline","fenceChar","fenceSize","fenceInCodeRegex","fence","title","cleanAttribute","reference","references","hasSiblings","isCodeBlock","extraSpace","alt","titlePart","Rules","filter","findRule","filterValue","collapseWhitespace","isPre","prevText","keepLeadingWs","nextNode","canParseHTMLNatively","canParse","createHTMLParser","shouldUseActiveX","useActiveX","HTMLParser","RootNode","htmlParser","isPreOrCode","_htmlParser","isBlank","flankingWhitespace","edges","edgeWhitespace","isFlankedByWhitespace","side","regExp","isFlanked","reduce","escapes","TurndownService","canConvert","process","postProcess","plugin","accumulator","escape","self","replacementForNode","join","s1","s2","nls","serviceId","serviceLabel","apiLabel","developerURL","apiKeyURL","apiKeyPattern","SUPPORTED_LANGUAGES","normalizeLanguage","normalizedLocale","_match","region","translate","texts","sourceLocale","targetLocale","apiKey","sourceLanguage","targetLanguage","requestBody","errorData","google","sourceLanguageName","targetLanguageName","systemPrompt","userPrompt","parsedResponse","translations","expectedCount","actualCount","openai","allTranslationServices","translator","$prefs","defaultTranslationService","turndownService","getCopyingFieldMap","valueMap","getFieldArgs","_keyPath","targetLocaleValue","getField","updateToast","translateFields","copingFieldMap","markdownSupported","countType","translatedValues","isMarkdown","marked","copyFields","copyFromLocale","_draft","getSourceLanguage","$translator","getTargetLanguage","otherLocale","$entryDraft","$.snapshot","sourceDisabled","computed_const","valueStoreKey","$.fallback","outputCodeOnly","outputKeys","codeKeyPath","langKeyPath","setInputValue","setCurrentValue","$.store_mutate","$.untrack","$.key","inputAlphaValue","allowInput","enableAlpha","RGB_REGEX","RGBA_REGEX","newAlphaHexValue","newAlphaIntValue","$2","$.bind_value","hexToInt","rgb","valueTemplate","listFormatter","getIndex","getFieldDisplayValue","_inputValue","_currentValue","displayValue","viewType","gridId","showTitle","onChange","blurBackground","cover","checkerboard","dissolve","controls","mediaElement","hasError","loaded","blurImageURL","isThumbnail","isImage","updatingSrc","updateSrc","checkLoaded","img","audio","alternate_2","alternate_3","alternate_4","isSmallScreen","isMediumScreen","isLargeScreen","hasMouse","initUserEnvDetection","mqlSmall","mqlMedium","mqlLarge","mqlPointer","isSmallScreenSetter","isMediumScreenSetter","isLargeScreenSetter","hasMouseSetter","serviceType","hotlinking","authType","signIn","hasConfig","hasAuthInfo","userName","password","authState","searchResults","debounceTimer","searchAssets","selectAsset","downloadURL","credit","ok","$$array","text_2","$selectAssetsView","previewURL","_kind","$isSmallScreen","$.html","node_9","consequent_8","text_4","consequent_9","hasMatch","assets","selectedResource","basePath","filteredAssets","unsaved","folder","relPath","pathArray","getLabel","transformedFileMap","removable","originalFile","$appLocale","showUploadButton","showFilePreview","onDrop","dropTarget","typeMismatch","showTypeMismatchAlertDialog","showDefaultContent","openFilePicker","reset","updateFileList","allFiles","text_3","$hasMouse","typeMismatchAlert","node_6","_files","filteredFileList","dropZone","isGridView","$currentView","$isLargeScreen","MEDIA_KINDS","ASSET_KINDS","DOC_EXTENSION_REGEX","isMediaKind","canPreviewAsset","getMediaKind","mimeType","subType","canEditAsset","getAssetKind","allCloudStorageServices","getMediaLibraryOptions","libraryName","_siteConfig","siteLibName","fieldLib","fieldLibName","SUPPORTED_LOCALES","ENDPOINT","headers","results","page","pagedResults","nextPage","large2x","medium","photographer","pexels","webformatURL","largeImageURL","pageURL","user","pixabay","CREDIT_LINK_PARAMS","totalPages","regular","thumb","username","unsplash","allStockAssetProviders","getStockAssetMediaLibraryOptions","allProviderNames","providers","elementIdPrefix","rawSearchTerms","isDefaultLibrary","isEnabledMediaService","canEnterURL","enteredURL","droppedAssets","unsavedAssets","allDefaultLibraryFolders","fileAssetFolder","collectionAssetFolder","entryAssetFolder","$globalAssetFolder","selectedFolder","originalEntry","targetFolderPath","listedAssets","$allAssets","enabledStockAssetProviderEntries","enabledCloudServiceEntries","enabledExternalServiceEntries","Selector","Select","Listbox","convertFileItemToAsset","getUnsavedAssets","$.user_pre_effect","enabled","$showContentOverlay","headerItems","showServiceLink","serviceURL","resource","service","node_16","$$array_1","node_18","consequent_10","consequent_11","consequent_12","node_22","serviceProps","$$array_2","consequent_13","getDefaultMediaLibraryOptions","maxSize","transformFile","newFormat","newFileName","widgetContext","showSelectAssetsDialog","showSizeLimitDialog","showPhotoCreditDialog","photoCredit","processing","widgetName","isImageWidget","$$d","showRemoveButton","fileDisplayPath","getExistingBlobURL","foundURL","resetSelection","onResourceSelect","existingBlobURL","sha","existingAsset","updateProps","getURLArgs","text_5","getPairs","validatePairs","savePairs","i18n","_locale","_keyLabel","_valueLabel","keyLabel","valueLabel","rowElements","validations","updatePairs","updatedPairs","addPair","removePair","updateStore","th_2","tbody","$.index","addItem","widgetType","fieldName","labelPlural","listField","labelSingular","_disabled","itemLabel","centerContent","endContent","getDefaultValue","dynamicValue","getDefaultValueMap","isFieldRequired","jsonValue","parsedValue","subFields","_subField","populateDefaultValue","splitValue","GET_DEFAULT_VALUE_MAP_FUNCTIONS","getBooleanFieldDefaultValueMap","getCodeFieldDefaultValueMap","getDateTimeFieldDefaultValueMap","getHiddenFieldDefaultValueMap","getKeyValueFieldDefaultValueMap","getListFieldDefaultValueMap","getMarkdownFieldDefaultValueMap","getNumberFieldDefaultValueMap","getObjectFieldDefaultValueMap","getSelectFieldDefaultValueMap","dynamicValues","getDefaultValues","updateObject","newProps","getItemList","updateListField","manipulate","valueListRemainder","expanderStateList","expanderStateListRemainder","getInitialExpanderState","collapsed","currentState","syncExpanderStates","stateMap","getExpanderKeys","_keyPart","endingWithNumber","parentKeyPath","expandInvalidFields","validities","validityMap","valid","I18N_STRUCTURES","DEFAULT_LOCALE_KEY","DEFAULT_CANONICAL_SLUG","DEFAULT_I18N_CONFIG","mergeI18nConfigs","siteConfigValue","isSingletonCollection","determineStructure","defaultStructure","createStructureMap","i18nEnabled","structure","determineDefaultLocale","allLocales","specifiedDefault","determineInitialLocales","initialLocalesConfig","normalizeI18nConfig","specifiedDefaultLocale","saveAllLocalesConfig","canonicalSlugConfig","omitDefaultConfig","canonicalSlugKey","canonicalSlugTemplate","structureMap","saveAllLocales","initialLocales","getListFieldInfo","hasSingleSubField","hasMultiSubFields","hasVariableTypes","hasRootListField","formatSummary","summaryTemplate","keyPathWithIndex","singleFieldConfig","getVisibleFieldDisplayValue","widgetId","allowAdd","allowRemove","allowReorder","summary","minimizeCollapsed","addToTop","typeKey","keyPathRegex","$$d_1","isDuplicateField","parentExpandedKeyPath","parentExpanded","itemExpanderStates","_item","hasMaxItems","initializeExpanderState","updateComplexList","dupIndex","newItem","removeItem","moveDownItem","_formatSummary","expandedKeyPath","typeConfig","node_23","subField","div_5","mounted","updateSimpleList","normalizedValue","allProps","hasSubFields","ListEditorComplex","ListEditorSimple","highlightEditorField","preview","isList","expanderKeys","canTranslate","canDuplicate","targetField","widgetWrapper","Preview","previews","sectionId","headerId","$.await","subFieldName","ListPreviewComplex","ListPreviewSimple","sendRequest","responseType","refreshAccessToken","scheme","geometryType","drawMode","mapElement","draw","searchQuery","searching","showAlertDialog","errorMessage","searchInputTimeout","leaflet","TerraDraw","TerraDrawLineStringMode","TerraDrawPointMode","TerraDrawPolygonMode","TerraDrawLeafletAdapter","_draw","_ids","changeType","onDrawChange","feature","coords","geometry","longitude","latitude","searchLocation","setLocation","onSearchResultSelect","lat","lon","useCurrentLocation","clearValue","COMPONENT_NAME_PREFIX_REGEX","DEFAULT_MODES","NODE_NAME_MAP","DEFAULT_BUTTONS","BUTTON_NAME_MAP","BUILTIN_COMPONENTS","customComponents","_modes","_buttons","_editorComponents","linkedImagesEnabled","minimal","getComponentDef","EditorComponent","insertImages","outer","getNearestEditorFromDOMNode","onPaste","clipboardData","pastedItems","fileIndex","htmlIndex","dataTransfer","droppedFiles","dataMatcher","markedBidi","rawHTML","markedOptions","numInputValue","strInputValue","isNumeric","numberFormatter","copyDefaultLocaleValue","valueField","createProxy","getValueMap","validity","copyDefaultLocaleValues","newContent","noI18nFieldKeys","toggleLocale","hasValues","canEdit","typeKeyPath","addButtonDisabled","addFields","newValueMap","_valueMap","removeFields","node_5","node_7","formattedSummary","dropdownThreshold","updateList","addValue","removeValue","sortOptions","fieldOptions","SelectMultiple","SelectSingle","_options","characterEntitiesLegacy","characterReferenceInvalid","isDecimal","isHexadecimal","isAlphabetical","isAlphanumerical","decodeNamedCharacterReference","characterReference","messages","parseEntities","settings","additional","point","column","following","begin","characterReferenceCharacters","characters","terminated","namedReference","reason","referenceCode","prohibited","disallowed","sanitizeEntrySummary","allowMarkdown","parseInline","getEntrySummaryFromContent","identifierField","useBody","idField","replaceSub","entryPath","commitDate","commitAuthor","replace","replaceSubContext","getEntrySummary","useTemplate","replaceContext","optionCacheMap","normalizeFieldName","getListFieldTypes","isListWidget","hasField","hasFields","hasTypes","getFieldReplacement","fallbackContext","getDisplayValue","replaceTemplateFields","templates","fieldNames","extractFieldNames","prepareFieldTemplates","displayFields","searchFields","_valueField","_displayField","_searchField","allFieldNames","filterAndPrepareEntries","refEntries","entryFilters","refEntry","hasContent","createSimpleOption","replacers","analyzeListFields","listFieldConfigs","baseFieldGroups","baseFieldName","fieldConfigForList","processSingleSubfieldList","groupEntries","joinedValue","processedTemplates","processComplexListField","complexField","subFieldMatch","baseFieldNameForList","subKey","escapedBase","escapedSub","indexRegex","indexMatch","wildcardFieldName","wildcardMatch","subFieldKey","currentItemValue","processListFields","hasProcessedListFields","firstConfig","processEntry","hasListFields","filters","getReferencedOptionLabel","refOptions","selectFieldConfig","refValues","hasLabels","validateStringField","minlength","maxlength","hasMin","hasMax","tooShort","tooLong","extraHint","CharacterCounter","isYouTubeVideoURL","origin","pathname","searchParams","getYouTubeEmbedURL","embeddable","embedURL","blockedURI","violatedDirective","getInitialValue","useEncoding","editors","BooleanEditor","CodeEditor","ColorEditor","ComputeEditor","DateTimeEditor","FileEditor","KeyValueEditor","ListEditor","MapEditor","MarkdownEditor","NumberEditor","ObjectEditor","RelationEditor","SelectEditor","StringEditor","TextEditor","UuidEditor","BooleanPreview","CodePreview","ColorPreview","ComputePreview","DateTimePreview","FilePreview","KeyValuePreview","ListPreview","MapPreview","MarkdownPreview","NumberPreview","ObjectPreview","RelationPreview","SelectPreview","StringPreview","TextPreview","UuidPreview","revertFields","isDefaultLocale","revertLocale","revertArgs","revertChanges","fieldId","inEditorComponent","hint","readonlyOption","$$d_2","allowPrefix","allowExtraLabels","beforeInputLabel","afterInputLabel","hasExtraLabels","canAddMultiValue","$$d_3","otherLocales","canCopy","canRevert","fieldLabel","computed_const_1","quantity","consequent_14","text_10","consequent_15","text_11","consequent_16","consequent_17","Editor","node_25","consequent_20","consequent_21","consequent_22","node_30","consequent_23","consequent_19","alternate_5","consequent_18","ExtraHint","$extraHint","node_33","consequent_24","consequent_25","section","consequent_26","randomId","keyPathPrefix","getElement","escapeAllChars","imageProps","getCustomNodeFeatures","componentName","fromBlock","toBlock","toPreview","CustomNode","DecoratorNode","serializedNode","conversionMap","isCustomNode","textNode","matchArray","featureCacheMap","componentDef","features","labelCacheMap","getOptionLabel","labels","fieldConfigCacheMap","keyPathArray","isNumericKey","keyPathArraySub","tf","visibleItemKeyPath","getPropertyValue","resolveRef","login","email","FULL_REGEX_PATTERN","getRegex","MARKDOWN_IMAGE_REGEX","selectedEntries","filterField","filterPattern","filterValues","canCreateEntry","hasAsset","assetURL","newURL","isBlobURL","hasAssetArgs","collectionFiles","_entry","DATE_TIME_FIELDS","TEMPLATE_REGEX","UUID_TYPES","handleDateTimeTag","handleUuidTag","uuidGenerator","handleSlugTag","currentSlug","handleFilePathTag","pathAfterBase","lastSlashIndex","getFieldValue","replaceTemplateTag","dateTimeValue","slugValue","uuidValue","filePathValue","processTransformations","hasDefaultTransformation","innerTag","replaceTemplatePlaceholder","rawTransformations","getExistingSlugs","slugMaxLength","allAssets","selectedAssets","focusedAsset","overlaidAsset","uploadingAssets","editingAsset","renamingAsset","processedAssets","_uploadingAssets","originalFiles","newFile","getAsset","entryContent","entryFolder","resolvedPath","getAssetByRelativePath","getAssetByAbsolutePath","exactMatch","dirName","baseName","foundAsset","_collectionName","fullPath","getAssetsByFolder","getAssetsByDirName","parseAssetFiles","assetFiles","assetInfo","meta","GIT_CONFIG_FILE_REGEX","gitConfigFiles","getLineColFromPtr","ptr","makeCodeBlock","codeblock","numberLen","TomlError","isEscaped","indexOfNewline","skipComment","skipVoid","banNewLines","banComments","skipUntil","getStringEnd","seek","DATE_TIME_RE","TomlDate","#hasDate","#hasTime","#offset","hasDate","hasTime","iso","jsDate","INT_REGEX","FLOAT_REGEX","LEADING_ZERO","ESCAPE_REGEX","ESC_MAP","parseString","endPtr","isLiteral","isMultiline","isEscape","parsed","sliceStart","parseValue","toml","integersAsBigInt","isInt","numeric","sliceAndTrimEndOf","startPtr","allowNewLines","commentIdx","trimmed","newlineIdx","extractValue","depth","parseArray","parseInlineTable","newPtr","nextNewLine","KEY_PART_RE","parseKey","eos","strEnd","newLine","hasOwn","keyEndPtr","valueEndPtr","peekTable","tbl","isTableArray","BARE_KEY","extendedTypeOf","isArrayOfTables","formatString","stringifyValue","numberAsFloat","stringifyInlineTable","stringifyArray","stringifyArrayTable","stringifyTable","preamble","tables","tblKey","numbersAsFloat","parseJSON","parseTOML","TOML.parse","parseYAML","YAML","detectFrontMatterFormat","parseFrontMatter","_format","fmDelimiters","startDelimiter","endDelimiter","getFrontMatterDelimiters","sd","ed","parsedHead","parseEntryFile","customParser","customFileFormats","getSlug","subPath","subPathTemplate","regexPattern","nextPlaceholder","placeholderEnd","parseFileContent","transformRawContent","rawContent","i18nSingleFile","shouldSkipIndexFile","extractPathInfo","fullPathRegEx","isMultiFileStructure","locPath","processNonI18nEntry","processI18nSingleFileEntry","processI18nMultiFileEntry","canonicalSlug","localizedEntry","tempId","existingEntry","prepareEntry","i18nMultiFile","i18nMultiFolder","i18nRootMultiFolder","transformedContent","prepareEntries","entryFiles","createFileList","configFiles","fileInfo","getHandleByPath","rootDirHandle","normalizedPath","pathParts","getFileHandle","getDirectoryHandle","getPathRegex","scanDir","dirHandle","scanningPaths","scanningPathsRegEx","fileList","hasMatchingPath","lastModified","normalizeFileListItem","getAllFiles","folderPathMap","readTextFile","entryFile","loadFiles","moveFile","previousPath","fileHandle","writeFile","writer","deleteEmptyParentDirs","pathSegments","deleteFile","dirPath","saveChange","saveChanges","changes","change","backendName","remoteRepository","repositoryProps","repository","_obj","ROOT_DIR_HANDLE_KEY","rootDirHandleDB","getRootDirHandle","forceReload","showPicker","allBackendServices","signOut","fetchFiles","commitChanges","ROOT_DIR_NAME","BACKEND_NAME","BACKEND_LABEL","DEFAULT_API_ROOT","DEFAULT_AUTH_ROOT","DEFAULT_AUTH_PATH","MIN_GITEA_VERSION","MIN_FORGEJO_VERSION","_user","API_CONFIG_INFO_PLACEHOLDER","apiConfig","graphqlVars","clientId","tokenURL","refreshToken","fetchAPI","method","isGraphQL","restBaseURL","graphqlBaseURL","authScheme","fetchGraphQL","variables","getUserProfile","avatarURL","profileURL","inAuthPopup","openPopup","authURL","availHeight","availWidth","authorize","popup","timer","provider","resultStr","initServerSideAuth","siteDomain","scope","hostname","createAuthSecrets","codeVerifier","codeChallenge","initClientSideAuth","csrfToken","redirectURL","sendMessage","errorCode","_state","finishClientSideAuth","handleClientSideAuthPopup","realAuthURL","inPopup","REPOSITORY_INFO_PLACEHOLDER","getRepoURL","restApiRoot","repoPath","repositoryInfoCache","getBaseURLs","repoURL","getRepositoryInfo","owner","repo","checkRepositoryAccess","permissions","fetchDefaultBranchName","DEFAULT_COMMIT_MESSAGES","createCommitMessage","commitType","skipCI","customCommitMessages","autoDeployEnabled","firstSlug","firstPath","remainingPaths","collectionLabel","getCollectionLabel","fetchLastCommit","commitMessage","previousSha","savedFiles","instance","checkInstanceVersion","isForgejo","minVersion","getFileList","metaDB","lastHash","cachedFileEntries","fetchFileList","cachedHash","gitConfigFetched","restoreCachedFileData","cachedFiles","parseFile","fetchedFileMap","updateStores","updateCache","cacheDB","fetchingFiles","usedPaths","unusedPaths","fetchAndParseFiles","fetchFileContents","branchName","isLastCommitPublished","requestPath","gitEntries","tree","truncated","parseFileContents","fileData","allIds","remainingIds","perPage","slicedIds","fetchBlob","projectPath","authRoot","authPath","gitea","normalizeRestBaseURL","normalizeGraphQLBaseURL","FETCH_DEFAULT_BRANCH_NAME_QUERY","FETCH_LAST_COMMIT_QUERY","additions","deletions","triggerDeployment","getFileContentsQuery","startIndex","committedDate","fetchingFileList","dataLoadedProgressInterval","progress","STATUS_DASHBOARD_URL","STATUS_CHECK_URL","checkStatus","graphqlApiRoot","github","authArgs","userId","lastCommit","actions","FETCH_FILE_LIST_QUERY","blobs","endCursor","hasNextPage","FETCH_BLOBS_QUERY","fetchBlobs","allPaths","currentPaths","getFetchCommitsInnerQuery","fetchCommits","commits","rawTextBlob","author","authorName","authorEmail","idMatcher","gitlab","validBackendNames","gitBackendServices","_set","currentService","newService","assetFolders","replaceTags","globalMediaFolder","globalPublicFolder","normalizeAssetFolder","mediaFolder","publicFolder","baseFolder","globalFolders","addFolderIfNeeded","iterateFiles","filePath","fileMediaFolder","filePublicFolder","getAllAssetFolders","_globalMediaFolder","_globalPublicFolder","allAssetsFolder","_mediaFolder","getFilePathMap","getCollectionFileFolder","compareFilePath","getEntryCollectionFolders","folderPath","getFileCollectionFolders","getSingletonCollectionFolders","singletonCollection","getAllEntryFolders","SUPPORTED_TYPES","fetchFile","getConfigPath","fetchSiteConfig","links","objects","DEV","__vite_import_meta_env__","DEV_SITE_URL","rawSiteConfig","siteConfigVersion","siteConfigError","validate","initSiteConfig","manualConfig","rawConfig","_allEntryFolders","selectedCollection","collectionCacheMap","isFileCollection","isValidCollection","getFirstCollection","getThumbnailFieldNames","rawCollection","parseEntryCollection","getFileConfig","parseFileCollection","__i18n","__file","getSingletonCollection","_isEntryCollection","_isFileCollection","useSingular","singularLabel","getCollectionIndex","detectFileExtension","customExtension","detectFileFormat","getEntryPathRegEx","indexFileName","filePathMatcher","localeMatcher","yamlQuoteWarnedOnce","_extension","_delimiter","yamlQuote","__extension","__format","SveltiaLogo","filterAssets","groupAssets","groups","otherKey","aKey","bKey","sortAssets","order","_assets","aValue","bValue","showAssetOverlay","showUploadAssetsDialog","showUploadAssetsConfirmDialog","getFolderLabelByCollection","fileLabel","currentView","_allAssets","assetGroups","_listedAssets","_currentView","hasOverlay","_showContentOverlay","_showAssetOverlay","selectedPageName","announcedPageStatus","parseLocation","startViewTransition","transitionType","updateContent","updateContentFromHashChange","routeRegex","isTrusted","oldURL","oldPath","newPath","inSameSection","oldPathSegmentCount","newPathSegmentCount","goto","replaceState","notifyChange","goBack","openProductionSite","displayURL","siteURL","signInError","unauthenticated","signingIn","resetError","logError","signInAutomatically","userCache","hasUserCache","_backendName","_backend","copiedPrefs","encodedData","currentPrefs","signInManually","isLocalHost","isLocalBackendSupported","isBrave","showTokenDialog","configuredBackendName","$siteConfig","configuredBackend","repositoryName","isTestRepo","ButtonComponent","Button","SplitButton","brand","$signInError","$signingIn","$3","text_6","$.store_set","logoURL","$siteConfigError","$prefsError","$dataLoadedProgress","$dataLoaded","$user","$unauthenticated","$inAuthPopup","interval","$backend","startChecking","stopChecking","checkInterval","cacheTimeout","timeout","updateAvailable","checkForUpdates","latestVersion","userVersion","singleAsset","publicURLs","doCopyAction","copyPublicURLs","copyFilePaths","canCopyFileData","copyFileData","useButton","assetsDetailList","publicURL","assetBlob","checkCanCopyFileData","toastSingular","toastPlural","menuItems","UPDATE_TOAST_DEFAULT_STATE","contentUpdatesToast","assetUpdatesToast","getCommitAuthor","userData","savedEntries","savedAssets","savedEntryIds","savedAssetsPaths","movedAssetPaths","deletedAssetPaths","excludingPaths","savingEntries","savingAssets","_focusedAsset","deleteAssets","buttonDescription","dialogDescription","onDelete","showDialog","MenuItem","showToast","downloadFiles","extraItems","details","repoBlobURL","useShortcut","onclick","$selectedAssetFolder","$overlaidAsset","overflowButtons","iconUrl","formatDuration","entryLabel","showPreview","usedEntries","canPreview","usedEntryLink","text_16","text_23","moveFocus","$showAssetOverlay","originalAsset","updatedStores","_overlaidAsset","saveAssets","savingFileList","$editingAsset","initState","resetState","saveAsset","createEntryPath","entryCollection","pathOptions","getFillSlugOptions","getLocalizedSlug","localizingKeyPaths","slugTemplate","getLocalizedSlugs","defaultLocaleSlug","localize","getCanonicalSlug","localizedSlugs","fillSlugOptions","getSlugs","resolveAssetFolderPaths","isMultiFolders","subPathFirstPart","resolvedInternalPath","resolvedPublicPath","getAssetSavingInfo","assetFolderPaths","replaceBlobURL","dupFile","savingAssetProps","assetPath","parseField","keyPathList","createKeyPathList","copyProperty","unsortedMap","sortedMap","isTomlOutput","omitEmptyOptionalFields","finalizeContent","copyArgs","serializeContent","formatJSON","indentStyle","indentSize","formatTOML","TOML.stringify","formatYAML","legacyOptions","legacyQuote","formatFrontMatter","formatEntryFile","customFormatter","createBaseSavingEntryData","replaceBlobBaseArgs","replaceBlobArgs","getPreviousSha","getSingleFileChange","savingEntry","isNew","renamed","getMultiFileChange","createSavingEntryData","slugs","localizedEntryMap","getFileChangeArgs","getDraftBaseProps","addSavingEntryData","draftProps","_changes","collectEntryChanges","draftBaseProps","addDataProps","collectEntryChangesFromAsset","updatingEntries","movedAssets","focusedAssetPath","overlaidAssetPath","moveAssets","movingAssets","newName","componentId","pathInfo","$renamingAsset","renameAsset","updateSelection","$listedAssets","$isMediumScreen","$focusedAsset","$selectedAssets","$targetAssetFolder","Grid","$.spread_props","uploadDisabled","$assetGroups","node_3","searchMode","navigate","hadTerms","$searchTerms","searchBar","$searchMode","folders","$allAssetFolders","noneLabel","_label","updatedFilters","totalCount","selectedCount","$selectedItems","anySelected","allSelected","sortKeys","sortOrders","dateFields","_sortFields","hasListedAssets","hasMultipleAssets","$sortKeys","primaryToolbar","secondaryToolbar","mainContent","secondarySidebar","primarySidebar","main","$hasOverlay","ROUTE_REGEX","isIndexPage","selectedAssetFolderLabel","$.window","$assetUpdatesToast","$uploadingAssets","$processedAssets","undersizedFiles","oversizedFiles","$showUploadAssetsConfirmDialog","$showUploadAssetsDialog","backupTimeout","backupDB","BACKUP_TOAST_DEFAULT_STATE","restoreDialogState","backupToastState","deleteBackup","getBackup","backup","saveBackup","restoreBackup","restoreBackupIfNeeded","doRestore","showBackupToastIfNeeded","resetBackupToastState","$restoreDialogState","sameYear","sameMonth","sameDay","$backupToastState","iframe","generateHTML","mountPlaceholder","initializeIframe","iframe_1","styleURL","entryEditorSettings","initSettings","settingsDB","storageKey","_settings","savedView","thisPaneContentArea","thatPaneContentArea","$entryEditorSettings","syncScrolling","$thisPane","labelOptions","MainContent","EntryPreview","EntryEditor","contentArea","syncScrollPosition","isIframe","ownerDocument","scrollTop","scrollHeight","clientHeight","scrollTopMax","scrollRatio","thisElement","ratio","thatElement","eventOptions","initializeScrollSync","thatPane","listedLocales","$thatPane","hasAnyError","useDropDown","SelectComponent","SelectButtonGroup","OptionComponent","Option","SelectButton","isLocaleEnabled","isOnlyLocale","localeLabel","otherSlugs","updatedSlugs","assetPaths","_allEntries","deleteEntries","createDraft","expanderStates","enabledLocales","duplicateDraft","getInitialUuidValue","LIST_KEY_PATH_REGEX","DEFAULT_VALIDITY","validityProxyHandler","validateAnyField","validation","valueEntries","parentFieldConfig","validateField","validateList","validateArgs","validateFields","listValid","validateItems","validateEntry","currentValuesValid","currentValuesValidities","extraValuesValid","extraValuesValidities","published","saveEntry","getEntryThumbnail","_thumbnailFieldNames","getAssociatedAssets","relative","entryDirName","showDeleteDialog","showValidationToast","showEditSlugDialog","showErrorDialog","saving","menuButton","showSaveOptions","collectionLabelSingular","modified","$entryDraftModified","errorCount","associatedAssets","_goBack","save","savedEntry","entrySummary","$copyFromLocaleToast","restoring","leftPaneContentArea","rightPaneContentArea","paneStateKey","canCreate","createDisabled","restorePanes","_editorLeftPane","_editorRightPane","switchPanes","$editorLeftPane","savePanes","$editorRightPane","$showDuplicateToast","parseFilterConfig","defaultFilterName","defaultFilter","filterEntries","configuredFilters","validFilters","rawValue","refValue","viewFilters","_view","parseGroupConfig","defaultGroupName","defaultGroup","conditions","sortCondition","sortedGroups","_entries","viewGroups","entryListSettings","DEFAULT_SORT_KEYS","SPECIAL_SORT_KEY_TYPES","SPECIAL_SORT_KEYS","isValidArray","parseCustomSortableFields","customSortableFields","getDefaultSortKeys","customIdField","filteredDefaultKeys","getSortConfig","isCommitAuthorAvailable","isCommitDateAvailable","defaultKey","defaultOrder","hasCommitAuthorKey","hasCommitDateKey","getSortKeyType","getSortKeyLabel","defaultSort","removeMarkdownSyntax","markdownFieldKeys","dateFieldConfig","isMarkdownField","aDate","bDate","aValueStr","bValueStr","listedEntries","entryGroups","_listedEntries","$listedEntries","$selectedEntries","$selectedCollection","hasOptions","$allEntries","indexFileLabel","openEditor","$entryGroups","hide","canDelete","thumbnailFieldNames","hasListedEntries","hasMultipleEntries","$viewFilters","$viewGroups","FileList","EntryList","routeType","_fileMap","$contentUpdatesToast","$translatorApiKeyDialogState","showParseErrorToast","$entryParseErrors","canShowMobileSignInDialog","_isLargeScreen","_hasMouse","showMobileSignInDialog","uiSettingsDB","showInfobar","onboardingState","pages","$selectedPageName","onClose","accel","$appLocales","panels","AppearancePanel","LanguagePanel","ContentsPanel","I18nPanel","MediaPanel","AccessibilityPanel","AdvancedPanel","selectedPanel","toastMessage","$.derived_safe_equal","Content","showPrefsDialog","isLocalRepo","$backendName","$canShowMobileSignInDialog","hasAvatar","entryCollections","deployHookURL","showButton","canPublish","$isLastCommitPublished","toastStatus","publish","canPromise","toSJISFunction","CODEWORDS_COUNT","utils","digit","kanji","exports","fromString","level","BitBuffer","bufIndex","bit","bitBuffer","BitMatrix","reserved","bitMatrix","getSymbolSize","posCount","intervals","positions","posLength","FINDER_PATTERN_SIZE","finderPattern","PenaltyScores","mask","points","sameCountCol","sameCountRow","lastCol","bitsCol","bitsRow","darkCount","modulesCount","getMaskAt","maskPattern","setupFormatFunc","numPatterns","bestPattern","lowerPenalty","penalty","ECLevel","EC_BLOCKS_TABLE","EC_CODEWORDS_TABLE","errorCorrectionCode","errorCorrectionLevel","EXP_TABLE","LOG_TABLE","galoisField","GF","coeff","divident","degree","poly","Polynomial","ReedSolomonEncoder","paddedData","remainder","buff","reedSolomonEncoder","versionCheck","alphanumeric","TEST_KANJI","TEST_NUMERIC","TEST_ALPHANUMERIC","VersionCheck","Regex","dataStr","Utils","ECCode","require$$2","Mode","require$$3","require$$4","G18","G18_BCH","getBestVersionForDataLength","currentVersion","getReservedBitsCount","getTotalBitsFromDataArray","totalBits","reservedBits","getBestVersionForMixedData","totalCodewords","ecTotalCodewords","dataTotalCodewordsBits","usableBits","seg","ecl","G15","G15_MASK","G15_BCH","formatInfo","NumericData","remainingNum","numericData","ALPHA_NUM_CHARS","AlphanumericData","alphanumericData","ByteData","byteData","KanjiData","kanjiData","dijkstra","graph","predecessors","costs","closest","cost_of_s_to_u","adjacent_nodes","cost_of_e","cost_of_s_to_u_plus_cost_of_e","cost_of_s_to_v","first_visit","cost","require$$5","require$$6","require$$7","getStringByteLength","getSegments","getSegmentsFromString","numSegs","alphaNumSegs","byteSegs","kanjiSegs","getSegmentBitsLength","mergeSegments","segs","acc","curr","prevSeg","buildNodes","buildGraph","prevNodeIds","nodeGroup","currentNodeIds","prevNodeId","buildSingleSegment","modesHint","bestMode","optimizedSegs","AlignmentPattern","FinderPattern","MaskPattern","require$$8","Version","require$$9","FormatInfo","require$$10","require$$11","Segments","require$$12","setupFinderPattern","matrix","setupTimingPattern","setupAlignmentPattern","setupVersionInfo","setupFormatInfo","setupData","inc","bitIndex","byteIndex","dark","createData","remainingByte","createCodewords","dataTotalCodewords","ecTotalBlocks","blocksInGroup2","blocksInGroup1","totalCodewordsInGroup1","dataCodewordsInGroup1","dataCodewordsInGroup2","ecCount","dcData","ecData","maxDataSize","dataSize","createSymbol","estimatedVersion","rawSegments","bestVersion","dataBits","moduleCount","modules","qrcode","hex2rgba","hexCode","hexValue","margin","qrSize","imgData","symbolSize","scaledMargin","palette","posDst","pxColor","iSrc","jSrc","clearCanvas","getCanvasElement","qrData","canvasEl","rendererOpts","getColorAttrib","color","attrib","alpha","svgCmd","cmd","qrToPath","moveBy","newRow","lineLength","svgTag","qrcodesize","bg","viewBox","QRCode","CanvasRenderer","SvgRenderer","renderCanvas","renderFunc","argsNum","isLastArgCb","$showMobileSignInDialog","canvas_1","assetSearchResults","assetCount","$assetSearchResults","node_12","resultRow","scanEntry","searchEntries","entrySearchResults","entryCount","$entrySearchResults","panelKey","panel","BackButton","ContentsPage","AssetsPage","SearchPage","WorkflowPage","ConfigPage","MenuPage","SettingsPage","SelectedPage","selectPage","pageName","initAppLocale","ncRoot","$announcedPageStatus","unsupportedFuncNames","COMPATIBILITY_URL","App","registerCustomFormat","fromFile","toFile","registerEditorComponent","definition","registerEventListener","eventListener","registerPreviewStyle","registerPreviewTemplate","registerWidget","control","CMS"],"ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,150,151,152,153,154,155,156,157,158,160,165,166,167,168,169,170,171,172,173,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,362,363,364,367,440,452,453,454,455,456,457,458,459,489,490,491,492,493,494,495,496,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694],"sources":["../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/shared/utils.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/constants.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/shared/errors.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/errors.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/constants.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/warnings.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/dom/hydration.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/reactivity/equality.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/shared/clone.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/context.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/error-handling.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/dom/task.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/dom/blocks/boundary.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/reactivity/deriveds.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/reactivity/async.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/reactivity/batch.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/reactivity/sources.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/proxy.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/dom/operations.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/dom/elements/misc.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/dom/elements/bindings/shared.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/reactivity/effects.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/runtime.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/utils.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/dom/elements/events.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/dom/blocks/svelte-head.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/dom/reconciler.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/dom/template.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/render.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/dom/blocks/await.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/dom/blocks/if.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/dom/blocks/key.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/dom/blocks/css-props.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/dom/blocks/each.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/dom/blocks/html.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/dom/blocks/snippet.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/dom/blocks/svelte-component.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/dom/blocks/svelte-element.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/dom/css.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/dom/elements/actions.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/dom/elements/attachments.js","../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/shared/attributes.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/dom/elements/class.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/dom/elements/style.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/dom/elements/bindings/select.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/dom/elements/attributes.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/dom/elements/bindings/input.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/dom/elements/bindings/this.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/store/utils.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/store/shared/index.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/reactivity/store.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/client/reactivity/props.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/index-client.js","../../src/lib/services/contents/editor/index.js","../../node_modules/.pnpm/to-data-view@2.0.0/node_modules/to-data-view/index.js","../../node_modules/.pnpm/base32-encode@2.0.0/node_modules/base32-encode/index.js","../../node_modules/.pnpm/@sveltia+utils@0.8.0/node_modules/@sveltia/utils/dist/crypto.js","../../node_modules/.pnpm/@sveltia+utils@0.8.0/node_modules/@sveltia/utils/dist/string.js","../../node_modules/.pnpm/@sveltia+utils@0.8.0/node_modules/@sveltia/utils/dist/file.js","../../node_modules/.pnpm/deepmerge@4.3.1/node_modules/deepmerge/dist/cjs.js","../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../../node_modules/.pnpm/@formatjs+fast-memoize@2.2.7/node_modules/@formatjs/fast-memoize/lib/index.js","../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.11.2/node_modules/@formatjs/icu-messageformat-parser/lib/error.js","../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.11.2/node_modules/@formatjs/icu-messageformat-parser/lib/types.js","../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.11.2/node_modules/@formatjs/icu-messageformat-parser/lib/regex.generated.js","../../node_modules/.pnpm/@formatjs+icu-skeleton-parser@1.8.14/node_modules/@formatjs/icu-skeleton-parser/lib/date-time.js","../../node_modules/.pnpm/@formatjs+icu-skeleton-parser@1.8.14/node_modules/@formatjs/icu-skeleton-parser/lib/regex.generated.js","../../node_modules/.pnpm/@formatjs+icu-skeleton-parser@1.8.14/node_modules/@formatjs/icu-skeleton-parser/lib/number.js","../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.11.2/node_modules/@formatjs/icu-messageformat-parser/lib/time-data.generated.js","../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.11.2/node_modules/@formatjs/icu-messageformat-parser/lib/date-time-pattern-generator.js","../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.11.2/node_modules/@formatjs/icu-messageformat-parser/lib/parser.js","../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.11.2/node_modules/@formatjs/icu-messageformat-parser/lib/index.js","../../node_modules/.pnpm/intl-messageformat@10.7.16/node_modules/intl-messageformat/lib/src/error.js","../../node_modules/.pnpm/intl-messageformat@10.7.16/node_modules/intl-messageformat/lib/src/formatters.js","../../node_modules/.pnpm/intl-messageformat@10.7.16/node_modules/intl-messageformat/lib/src/core.js","../../node_modules/.pnpm/svelte-i18n@4.0.1_svelte@5.38.1/node_modules/svelte-i18n/dist/runtime.js","../../node_modules/.pnpm/@sveltia+utils@0.8.0/node_modules/@sveltia/utils/dist/object.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/nodes/identity.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/visit.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/doc/directives.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/doc/anchors.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/doc/applyReviver.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/nodes/toJS.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/nodes/Node.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/nodes/Alias.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/nodes/Scalar.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/doc/createNode.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/nodes/Collection.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/stringify/stringifyComment.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/stringify/foldFlowLines.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/stringify/stringifyString.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/stringify/stringify.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/stringify/stringifyPair.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/log.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/nodes/Pair.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/stringify/stringifyCollection.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/nodes/YAMLMap.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/common/map.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/nodes/YAMLSeq.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/common/seq.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/common/string.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/common/null.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/core/bool.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/stringify/stringifyNumber.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/core/float.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/core/int.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/core/schema.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/json/schema.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/tags.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/schema/Schema.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/stringify/stringifyDocument.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/doc/Document.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/errors.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/compose/resolve-props.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/compose/util-contains-newline.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/compose/util-map-includes.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/compose/resolve-block-map.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/compose/resolve-block-seq.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/compose/resolve-end.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/compose/compose-collection.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/compose/compose-scalar.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/compose/compose-node.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/compose/compose-doc.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/compose/composer.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/parse/cst-scalar.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/parse/cst-stringify.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/parse/cst-visit.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/parse/cst.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/parse/lexer.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/parse/line-counter.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/parse/parser.js","../../node_modules/.pnpm/yaml@2.8.1/node_modules/yaml/browser/dist/public-api.js","../../src/lib/services/assets/folders.js","../../node_modules/.pnpm/@sveltia+utils@0.8.0/node_modules/@sveltia/utils/dist/storage/indexed-db.js","../../node_modules/.pnpm/@sveltia+utils@0.8.0/node_modules/@sveltia/utils/dist/storage/local-storage.js","../../node_modules/.pnpm/@sveltia+utils@0.8.0/node_modules/@sveltia/utils/dist/array.js","../../node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js","../../node_modules/.pnpm/flat@6.0.1/node_modules/flat/index.js","../../node_modules/.pnpm/@sveltia+utils@0.8.0/node_modules/@sveltia/utils/dist/datetime.js","../../node_modules/.pnpm/escape-string-regexp@5.0.0/node_modules/escape-string-regexp/index.js","../../node_modules/.pnpm/@sindresorhus+transliterate@1.6.0/node_modules/@sindresorhus/transliterate/replacements.js","../../node_modules/.pnpm/@sindresorhus+transliterate@1.6.0/node_modules/@sindresorhus/transliterate/index.js","../../src/lib/services/common/slug.js","../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/dist/moment.js","../../src/lib/services/contents/i18n/index.js","../../src/lib/services/utils/date.js","../../src/lib/services/contents/widgets/date-time/helper.js","../../src/lib/services/common/transformations.js","../../node_modules/.pnpm/@sveltia+utils@0.8.0/node_modules/@sveltia/utils/dist/misc.js","../../node_modules/.pnpm/mime@4.0.7/node_modules/mime/dist/types/other.js","../../node_modules/.pnpm/mime@4.0.7/node_modules/mime/dist/types/standard.js","../../node_modules/.pnpm/mime@4.0.7/node_modules/mime/dist/src/Mime.js","../../node_modules/.pnpm/mime@4.0.7/node_modules/mime/dist/src/index.js","../../node_modules/.pnpm/truncate-utf8-bytes@1.0.2/node_modules/truncate-utf8-bytes/lib/truncate.js","../../node_modules/.pnpm/utf8-byte-length@1.0.5/node_modules/utf8-byte-length/browser.js","../../node_modules/.pnpm/truncate-utf8-bytes@1.0.2/node_modules/truncate-utf8-bytes/browser.js","../../node_modules/.pnpm/sanitize-filename@1.6.3/node_modules/sanitize-filename/index.js","../../src/lib/services/utils/file.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/dataview.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/utils.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/constants.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/tag-names-utils.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/byte-order.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/image-header-tiff.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/image-header-jpeg.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/image-header-png.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/image-header-iso-bmff-utils.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/image-header-iso-bmff-iloc.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/image-header-iso-bmff.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/image-header-heic.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/image-header-avif.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/image-header-webp.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/image-header-gif.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/xml.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/image-header.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/tag-names-common.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/tag-names-0th-ifd.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/tag-names-exif-ifd.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/tag-names-gps-ifd.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/tag-names-interoperability-ifd.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/tag-names-mpf-ifd.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/tag-names-canon-ifd.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/tag-names-pentax-ifd.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/tag-names.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/types.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/tags-helpers.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/tags.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/mpf-tags.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/file-tags.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/jfif-tags.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/iptc-tag-names.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/text-decoder.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/tag-decoder.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/iptc-tags.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/xmp-tag-names.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/dom-parser.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/xmp-namespaces.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/xmp-tags.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/photoshop-tag-names.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/photoshop-tags.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/icc-tag-names.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/icc-tags.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/canon-tags.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/pentax-tags.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/png-file-tags.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/png-text-tags.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/png-tags.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/vp8x-tags.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/gif-file-tags.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/thumbnail.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/composite.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/errors.js","../../node_modules/.pnpm/exifreader@4.31.1/node_modules/exifreader/src/exif-reader.js","../../src/lib/services/utils/number.js","../../src/lib/services/utils/media/image/exif.js","../../src/lib/services/utils/media/index.js","../../src/lib/services/app/dependencies.js","../../src/lib/services/utils/media/image/index.js","../../src/lib/services/utils/media/image/encode.js","../../src/lib/services/utils/media/image/resize.js","../../src/lib/services/utils/media/image/transform.js","../../src/lib/services/utils/media/pdf.js","../../src/lib/services/assets/info.js","../../src/lib/services/contents/index.js","../../src/lib/services/contents/collection/index-file.js","../../src/lib/services/contents/entry/index.js","../../src/lib/services/contents/collection/files.js","../../src/lib/services/contents/widgets/index.js","../../node_modules/.pnpm/lexical@0.33.1/node_modules/lexical/Lexical.prod.mjs","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/version.js","../../node_modules/.pnpm/svelte@5.38.1/node_modules/svelte/src/internal/disclose-version.js","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/locales/en.js","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/locales/ja.js","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/icon/icon.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/alert/alert.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/services/events.svelte.js","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/typography/truncated-text.svelte","../../node_modules/.pnpm/@sveltia+utils@0.8.0/node_modules/@sveltia/utils/dist/element.js","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/services/popup.svelte.js","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/util/placeholder.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/util/modal.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/util/popup.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/button/button.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/alert/infobar.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/bottom-navigation/bottom-navigation.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/button/button-group.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/button/floating-action-button-wrapper.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/services/select.svelte.js","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/services/group.svelte.js","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/button/select-button-group.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/button/select-button.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/menu/menu-button.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/button/split-button.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/divider/divider.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/divider/spacer.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/checkbox/checkbox-group.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/checkbox/checkbox.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/dialog/dialog.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/dialog/alert-dialog.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/dialog/confirmation-dialog.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/text-field/text-input.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/dialog/prompt-dialog.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/file/file-picker.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/grid/grid-body.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/grid/grid-cell.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/grid/grid-row.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/grid/grid.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/listbox/listbox.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/listbox/option-group.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/listbox/option.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/menu/menu.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/menu/menu-item.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/menu/menu-item-checkbox.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/menu/menu-item-radio.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/progressbar/progressbar.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/radio/radio-group.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/radio/radio.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/scroll/infinite-scroll.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/text-field/search-bar.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/select/combobox.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/select/select.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/select/select-tags.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/slider/slider.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/switch/switch.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/table/table-cell.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/table/table-row.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/table/table.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/tabs/tab-list.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/tabs/tab-panel.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/tabs/tab.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/toast/toast.svelte","../../node_modules/.pnpm/@lexical+selection@0.33.1/node_modules/@lexical/selection/LexicalSelection.prod.mjs","../../node_modules/.pnpm/@lexical+utils@0.33.1/node_modules/@lexical/utils/LexicalUtils.prod.mjs","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/prism.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-clike.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-javascript.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-markup.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-markdown.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-c.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-css.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-objectivec.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-sql.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-powershell.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-python.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-rust.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-swift.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-typescript.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-java.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-cpp.js","../../node_modules/.pnpm/@lexical+code@0.33.1/node_modules/@lexical/code/LexicalCode.prod.mjs","../../node_modules/.pnpm/@lexical+dragon@0.33.1/node_modules/@lexical/dragon/LexicalDragon.prod.mjs","../../node_modules/.pnpm/@lexical+history@0.33.1/node_modules/@lexical/history/LexicalHistory.prod.mjs","../../node_modules/.pnpm/@lexical+link@0.33.1/node_modules/@lexical/link/LexicalLink.prod.mjs","../../node_modules/.pnpm/@lexical+list@0.33.1/node_modules/@lexical/list/LexicalList.prod.mjs","../../node_modules/.pnpm/@lexical+html@0.33.1/node_modules/@lexical/html/LexicalHtml.prod.mjs","../../node_modules/.pnpm/@lexical+clipboard@0.33.1/node_modules/@lexical/clipboard/LexicalClipboard.prod.mjs","../../node_modules/.pnpm/@lexical+rich-text@0.33.1/node_modules/@lexical/rich-text/LexicalRichText.prod.mjs","../../node_modules/.pnpm/@lexical+markdown@0.33.1/node_modules/@lexical/markdown/LexicalMarkdown.prod.mjs","../../node_modules/.pnpm/@lexical+table@0.33.1/node_modules/@lexical/table/LexicalTable.prod.mjs","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components.js","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/text-editor/index.js","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/text-editor/transformers/table.js","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/text-editor/core.js","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/text-editor/lexical-root.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/text-editor/store.svelte.js","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/text-editor/toolbar/code-language-switcher.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/toolbar/toolbar.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/text-editor/toolbar/toolbar-wrapper.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/text-editor/toolbar/code-editor-toolbar.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/text-editor/code-editor.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/text-field/text-area.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/text-editor/toolbar/format-text-button.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/text-editor/toolbar/insert-image-button.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/text-editor/toolbar/insert-link-button.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/text-editor/toolbar/insert-menu-button.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/text-editor/toolbar/toggle-block-menu-item.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/text-editor/toolbar/text-editor-toolbar.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/text-editor/text-editor.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/text-field/number-input.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/text-field/password-input.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/util/app-shell.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/util/empty-state.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/components/util/group.svelte","../../node_modules/.pnpm/@sveltia+ui@0.27.9_svelte@5.38.1/node_modules/@sveltia/ui/dist/index.js","../../src/lib/components/common/visibility-observer.svelte","../../node_modules/.pnpm/dompurify@3.2.6/node_modules/dompurify/dist/purify.cjs.js","../../node_modules/.pnpm/isomorphic-dompurify@2.26.0/node_modules/isomorphic-dompurify/browser.js","../../node_modules/.pnpm/marked@16.1.2/node_modules/marked/lib/marked.esm.js","../../src/lib/services/user/prefs.js","../../src/lib/services/contents/draft/index.js","../../node_modules/.pnpm/turndown@7.2.1/node_modules/turndown/lib/turndown.browser.es.js","../../src/lib/services/integrations/translators/google.js","../../src/lib/services/integrations/translators/openai.js","../../src/lib/services/integrations/translators/index.js","../../src/lib/services/contents/draft/update/copy.js","../../src/lib/components/contents/details/editor/copy-menu-items.svelte","../../src/lib/components/contents/details/editor/translate-button.svelte","../../src/lib/components/contents/details/editor/validation-error.svelte","../../src/lib/components/contents/details/widgets/boolean/boolean-editor.svelte","../../src/lib/components/contents/details/widgets/boolean/boolean-preview.svelte","../../src/lib/components/contents/details/widgets/code/code-editor.svelte","../../src/lib/components/contents/details/widgets/code/code-preview.svelte","../../src/lib/components/contents/details/widgets/color/color-editor.svelte","../../src/lib/components/contents/details/widgets/color/color-preview.svelte","../../src/lib/components/contents/details/widgets/compute/compute-editor.svelte","../../src/lib/components/contents/details/widgets/compute/compute-preview.svelte","../../src/lib/components/contents/details/widgets/date-time/date-time-editor.svelte","../../src/lib/components/contents/details/widgets/date-time/date-time-preview.svelte","../../src/lib/components/assets/browser/simple-image-grid.svelte","../../src/lib/components/assets/shared/asset-preview.svelte","../../src/lib/services/user/env.js","../../src/lib/components/assets/browser/external-assets-panel.svelte","../../src/lib/services/search/util.js","../../src/lib/components/assets/browser/assets-panel.svelte","../../src/lib/components/assets/shared/image.svelte","../../src/lib/components/assets/shared/upload-assets-preview.svelte","../../src/lib/components/assets/shared/drop-zone.svelte","../../src/lib/components/assets/browser/internal-assets-panel.svelte","../../src/lib/components/common/page-toolbar/view-switcher.svelte","../../src/lib/services/assets/kinds.js","../../src/lib/services/integrations/media-libraries/cloud/index.js","../../src/lib/services/integrations/media-libraries/index.js","../../src/lib/services/integrations/media-libraries/stock/pexels.js","../../src/lib/services/integrations/media-libraries/stock/pixabay.js","../../src/lib/services/integrations/media-libraries/stock/unsplash.js","../../src/lib/services/integrations/media-libraries/stock/index.js","../../src/lib/components/assets/browser/select-assets-dialog.svelte","../../src/lib/services/integrations/media-libraries/default/index.js","../../src/lib/components/contents/details/widgets/file/file-editor.svelte","../../src/lib/components/contents/details/widgets/file/file-preview.svelte","../../src/lib/services/contents/widgets/key-value/helper.js","../../src/lib/components/contents/details/widgets/key-value/key-value-editor.svelte","../../src/lib/components/contents/details/widgets/key-value/key-value-preview.svelte","../../src/lib/components/contents/details/widgets/object/add-item-button.svelte","../../src/lib/components/contents/details/widgets/object/object-header.svelte","../../src/lib/services/contents/widgets/boolean/defaults.js","../../src/lib/services/contents/widgets/code/defaults.js","../../src/lib/services/contents/widgets/date-time/defaults.js","../../src/lib/services/contents/widgets/hidden/defaults.js","../../src/lib/services/contents/widgets/key-value/defaults.js","../../src/lib/services/contents/widgets/list/defaults.js","../../src/lib/services/contents/widgets/markdown/defaults.js","../../src/lib/services/contents/widgets/number/defaults.js","../../src/lib/services/contents/widgets/object/defaults.js","../../src/lib/services/contents/widgets/select/defaults.js","../../src/lib/services/contents/draft/defaults.js","../../src/lib/services/contents/draft/update/list.js","../../src/lib/services/contents/editor/expanders.js","../../src/lib/services/contents/i18n/config.js","../../src/lib/services/contents/widgets/list/helper.js","../../src/lib/components/contents/details/widgets/list/list-editor-complex.svelte","../../src/lib/components/contents/details/widgets/list/list-editor-simple.svelte","../../src/lib/components/contents/details/widgets/list/list-editor.svelte","../../src/lib/components/contents/details/preview/field-preview.svelte","../../src/lib/components/contents/details/widgets/object/subsection.svelte","../../src/lib/components/contents/details/widgets/list/list-preview-complex.svelte","../../src/lib/components/contents/details/widgets/list/list-preview-simple.svelte","../../src/lib/components/contents/details/widgets/list/list-preview.svelte","../../src/lib/services/utils/networking.js","../../src/lib/components/contents/details/widgets/map/map-editor.svelte","../../src/lib/components/contents/details/widgets/map/map-preview.svelte","../../src/lib/services/contents/widgets/markdown/index.js","../../src/lib/components/contents/details/widgets/markdown/markdown-editor.svelte","../../node_modules/.pnpm/marked-bidi@1.0.13_marked@16.1.2/node_modules/marked-bidi/src/index.js","../../src/lib/components/contents/details/widgets/markdown/markdown-preview.svelte","../../src/lib/components/contents/details/widgets/number/number-editor.svelte","../../src/lib/components/contents/details/widgets/number/number-preview.svelte","../../src/lib/services/contents/draft/create/proxy.js","../../src/lib/services/contents/draft/update/locale.js","../../src/lib/services/contents/widgets/object/helper.js","../../src/lib/components/contents/details/widgets/object/object-editor.svelte","../../src/lib/components/contents/details/widgets/object/object-preview.svelte","../../src/lib/components/contents/details/widgets/select/select-multiple.svelte","../../src/lib/components/contents/details/widgets/select/select-single.svelte","../../src/lib/components/contents/details/widgets/select/select-editor.svelte","../../node_modules/.pnpm/character-entities-legacy@3.0.0/node_modules/character-entities-legacy/index.js","../../node_modules/.pnpm/character-reference-invalid@2.0.1/node_modules/character-reference-invalid/index.js","../../node_modules/.pnpm/is-decimal@2.0.1/node_modules/is-decimal/index.js","../../node_modules/.pnpm/is-hexadecimal@2.0.1/node_modules/is-hexadecimal/index.js","../../node_modules/.pnpm/is-alphabetical@2.0.1/node_modules/is-alphabetical/index.js","../../node_modules/.pnpm/is-alphanumerical@2.0.1/node_modules/is-alphanumerical/index.js","../../node_modules/.pnpm/decode-named-character-reference@1.2.0/node_modules/decode-named-character-reference/index.dom.js","../../node_modules/.pnpm/parse-entities@4.0.2/node_modules/parse-entities/lib/index.js","../../src/lib/services/contents/entry/summary.js","../../src/lib/services/contents/widgets/relation/helper.js","../../src/lib/components/contents/details/widgets/relation/relation-editor.svelte","../../src/lib/components/contents/details/widgets/relation/relation-preview.svelte","../../src/lib/components/contents/details/widgets/select/select-preview.svelte","../../src/lib/services/contents/widgets/string/validate.js","../../src/lib/components/contents/details/widgets/string/character-counter.svelte","../../src/lib/components/contents/details/widgets/string/string-editor.svelte","../../src/lib/services/utils/media/video/youtube.js","../../src/lib/components/contents/details/widgets/string/youtube-embed.svelte","../../src/lib/components/contents/details/widgets/string/string-preview.svelte","../../src/lib/components/contents/details/widgets/text/text-editor.svelte","../../src/lib/components/contents/details/widgets/text/text-preview.svelte","../../src/lib/services/contents/widgets/uuid/helper.js","../../src/lib/components/contents/details/widgets/uuid/uuid-editor.svelte","../../src/lib/components/contents/details/widgets/uuid/uuid-preview.svelte","../../src/lib/components/contents/details/widgets/index.js","../../src/lib/services/contents/draft/update/revert.js","../../src/lib/components/contents/details/editor/field-editor.svelte","../../src/lib/components/contents/details/widgets/markdown/component.svelte","../../src/lib/services/contents/widgets/markdown/component.js","../../src/lib/services/contents/widgets/select/helper.js","../../src/lib/services/contents/entry/fields.js","../../src/lib/services/utils/misc.js","../../src/lib/services/contents/collection/entries.js","../../src/lib/services/common/template.js","../../src/lib/services/assets/index.js","../../src/lib/services/assets/parser.js","../../src/lib/services/backends/git/shared/config.js","../../node_modules/.pnpm/smol-toml@1.4.2/node_modules/smol-toml/dist/error.js","../../node_modules/.pnpm/smol-toml@1.4.2/node_modules/smol-toml/dist/util.js","../../node_modules/.pnpm/smol-toml@1.4.2/node_modules/smol-toml/dist/date.js","../../node_modules/.pnpm/smol-toml@1.4.2/node_modules/smol-toml/dist/primitive.js","../../node_modules/.pnpm/smol-toml@1.4.2/node_modules/smol-toml/dist/extract.js","../../node_modules/.pnpm/smol-toml@1.4.2/node_modules/smol-toml/dist/struct.js","../../node_modules/.pnpm/smol-toml@1.4.2/node_modules/smol-toml/dist/parse.js","../../node_modules/.pnpm/smol-toml@1.4.2/node_modules/smol-toml/dist/stringify.js","../../src/lib/services/contents/file/parse.js","../../src/lib/services/contents/file/process.js","../../src/lib/services/backends/process.js","../../src/lib/services/backends/fs/shared/files.js","../../src/lib/services/backends/fs/local.js","../../src/lib/services/backends/fs/test.js","../../src/lib/services/backends/git/gitea/constants.js","../../src/lib/services/user/index.js","../../src/lib/services/backends/git/shared/api.js","../../src/lib/services/backends/git/gitea/user.js","../../src/lib/services/backends/git/shared/auth.js","../../src/lib/services/backends/git/gitea/auth.js","../../src/lib/services/backends/git/shared/repository.js","../../src/lib/services/backends/git/gitea/repository.js","../../src/lib/services/backends/git/shared/commits.js","../../src/lib/services/backends/git/gitea/commits.js","../../src/lib/services/backends/git/gitea/instance.js","../../src/lib/services/backends/git/shared/fetch.js","../../src/lib/services/backends/git/gitea/files.js","../../src/lib/services/backends/git/gitea/index.js","../../src/lib/services/backends/git/github/constants.js","../../src/lib/services/backends/git/github/api.js","../../src/lib/services/backends/git/github/user.js","../../src/lib/services/backends/git/github/auth.js","../../src/lib/services/backends/git/github/repository.js","../../src/lib/services/backends/git/github/commits.js","../../src/lib/services/backends/git/github/deployment.js","../../src/lib/services/backends/git/github/files.js","../../src/lib/services/backends/git/github/status.js","../../src/lib/services/backends/git/github/index.js","../../src/lib/services/backends/git/gitlab/constants.js","../../src/lib/services/backends/git/gitlab/user.js","../../src/lib/services/backends/git/gitlab/auth.js","../../src/lib/services/backends/git/gitlab/repository.js","../../src/lib/services/backends/git/gitlab/commits.js","../../src/lib/services/backends/git/gitlab/files.js","../../src/lib/services/backends/git/gitlab/status.js","../../src/lib/services/backends/git/gitlab/index.js","../../src/lib/services/backends/index.js","../../src/lib/services/config/folders/assets.js","../../src/lib/services/config/folders/entries.js","../../src/lib/services/config/loader.js","../../src/lib/services/config/index.js","../../src/lib/services/contents/collection/index.js","../../src/lib/services/contents/file/config.js","../../src/lib/assets/sveltia-logo.svg?raw&inline","../../src/lib/services/assets/view/filter.js","../../src/lib/services/assets/view/group.js","../../src/lib/services/assets/view/sort.js","../../src/lib/services/assets/view/index.js","../../src/lib/services/app/navigation.js","../../src/lib/services/user/auth.js","../../src/lib/components/entrance/sign-in.svelte","../../src/lib/components/entrance/entrance-page.svelte","../../src/lib/components/global/infobars/backend-status-indicator.svelte","../../src/lib/components/global/infobars/update-notification.svelte","../../src/lib/components/assets/toolbar/copy-assets-button.svelte","../../src/lib/services/contents/collection/data/index.js","../../src/lib/services/assets/data/index.js","../../src/lib/services/backends/save.js","../../src/lib/services/assets/data/delete.js","../../src/lib/components/assets/toolbar/delete-assets-button.svelte","../../src/lib/components/assets/toolbar/download-assets-button.svelte","../../src/lib/components/assets/toolbar/edit-options-button.svelte","../../src/lib/components/common/page-toolbar/back-button.svelte","../../src/lib/components/assets/details/toolbar.svelte","../../src/lib/components/common/static-map.svelte","../../src/lib/services/utils/media/video/index.js","../../src/lib/components/assets/shared/info-panel.svelte","../../src/lib/components/assets/details/asset-details-overlay.svelte","../../src/lib/services/assets/data/create.js","../../src/lib/components/assets/details/edit-asset-dialog.svelte","../../src/lib/services/contents/draft/save/entry-path.js","../../src/lib/services/contents/draft/slugs.js","../../src/lib/services/contents/draft/save/assets.js","../../src/lib/services/contents/draft/save/key-path.js","../../src/lib/services/contents/draft/save/serialize.js","../../src/lib/services/contents/file/format.js","../../src/lib/services/contents/draft/save/changes.js","../../src/lib/services/assets/data/move.js","../../src/lib/components/assets/details/rename-asset-dialog.svelte","../../src/lib/components/assets/list/asset-list-item.svelte","../../src/lib/components/assets/toolbar/upload-assets-button.svelte","../../src/lib/components/common/list-container.svelte","../../src/lib/components/common/listing-grid.svelte","../../src/lib/components/assets/list/asset-list.svelte","../../src/lib/services/search/index.js","../../src/lib/components/global/toolbar/items/quick-search-bar.svelte","../../src/lib/components/assets/list/primary-sidebar.svelte","../../src/lib/components/assets/toolbar/preview-asset-button.svelte","../../src/lib/components/assets/list/primary-toolbar.svelte","../../src/lib/components/assets/list/secondary-sidebar.svelte","../../src/lib/components/common/page-toolbar/filter-menu.svelte","../../src/lib/components/common/page-toolbar/item-selector.svelte","../../src/lib/components/common/page-toolbar/sort-menu.svelte","../../src/lib/services/assets/view/sort-keys.js","../../src/lib/components/assets/list/secondary-toolbar.svelte","../../src/lib/components/common/page-container-main-area.svelte","../../src/lib/components/common/page-container.svelte","../../src/lib/components/assets/assets-page.svelte","../../src/lib/components/assets/shared/upload-assets-confirm-dialog.svelte","../../src/lib/components/assets/shared/upload-assets-dialog.svelte","../../src/lib/components/config/config-page.svelte","../../src/lib/services/contents/draft/backup.js","../../src/lib/components/contents/details/backup-feedback.svelte","../../src/lib/components/contents/details/editor/entry-editor.svelte","../../src/lib/components/common/placeholder.svelte","../../src/lib/components/contents/details/preview/entry-preview-iframe.svelte","../../src/lib/components/contents/details/preview/entry-preview.svelte","../../src/lib/services/contents/editor/settings.js","../../src/lib/components/contents/details/pane-body.svelte","../../src/lib/components/contents/details/locale-switcher.svelte","../../src/lib/components/contents/details/preview-button.svelte","../../src/lib/components/contents/details/pane-header.svelte","../../src/lib/components/contents/details/edit-slug-dialog.svelte","../../src/lib/services/contents/collection/data/delete.js","../../src/lib/services/contents/draft/create/index.js","../../src/lib/services/contents/draft/create/duplicate.js","../../src/lib/services/contents/draft/validate.js","../../src/lib/services/contents/draft/save/index.js","../../src/lib/services/contents/entry/assets.js","../../src/lib/components/contents/details/toolbar.svelte","../../src/lib/components/contents/details/content-details-overlay.svelte","../../src/lib/services/contents/collection/view/filter.js","../../src/lib/services/contents/collection/view/group.js","../../src/lib/services/contents/collection/view/settings.js","../../src/lib/services/contents/collection/view/sort-keys.js","../../src/lib/services/utils/markdown.js","../../src/lib/services/contents/collection/view/sort.js","../../src/lib/services/contents/collection/view/index.js","../../src/lib/components/contents/list/entry-list-item.svelte","../../src/lib/components/contents/toolbar/create-entry-button.svelte","../../src/lib/components/contents/list/entry-list.svelte","../../src/lib/components/contents/list/file-list.svelte","../../src/lib/components/contents/list/singleton-option.svelte","../../src/lib/components/contents/list/primary-sidebar.svelte","../../src/lib/components/contents/shared/delete-entries-dialog.svelte","../../src/lib/components/contents/list/primary-toolbar.svelte","../../src/lib/components/contents/list/secondary-sidebar.svelte","../../src/lib/components/common/page-toolbar/group-menu.svelte","../../src/lib/components/contents/list/secondary-toolbar.svelte","../../src/lib/components/contents/contents-page.svelte","../../src/lib/components/settings/controls/translator-selector.svelte","../../src/lib/components/contents/details/editor/translator-api-key-dialog.svelte","../../src/lib/components/contents/shared/entry-parse-errors-toast.svelte","../../src/lib/services/app/onboarding.js","../../src/lib/components/global/infobars/mobile-promo-infobar.svelte","../../src/lib/components/global/toolbar/items/page-switcher.svelte","../../src/lib/components/global/toolbar/bottom-navigation.svelte","../../src/lib/components/help/release-notes-menu-item.svelte","../../src/lib/components/help/shortcuts-dialog.svelte","../../src/lib/components/help/shortcuts-menu-item.svelte","../../src/lib/components/settings/controls/pref-switch.svelte","../../src/lib/components/settings/panels/accessibility-panel.svelte","../../src/lib/components/settings/panels/advanced-panel.svelte","../../src/lib/components/settings/panels/appearance-panel.svelte","../../src/lib/components/settings/panels/contents-panel.svelte","../../src/lib/components/settings/panels/i18n-panel.svelte","../../src/lib/components/settings/panels/language-panel.svelte","../../src/lib/components/settings/panels/media-panel.svelte","../../src/lib/components/settings/index.js","../../src/lib/components/settings/settings-dialog.svelte","../../src/lib/components/global/toolbar/items/account-menu.svelte","../../src/lib/components/global/toolbar/items/account-button.svelte","../../src/lib/components/global/toolbar/items/create-button.svelte","../../src/lib/components/global/toolbar/items/notifications-button.svelte","../../src/lib/components/global/toolbar/items/publish-button.svelte","../../src/lib/components/global/toolbar/items/site-logo.svelte","../../src/lib/components/global/toolbar/global-toolbar.svelte","../../src/lib/components/menu/menu-page.svelte","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/can-promise.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/utils.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-level.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-buffer.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/bit-matrix.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/alignment-pattern.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/finder-pattern.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/mask-pattern.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/error-correction-code.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/galois-field.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/polynomial.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/reed-solomon-encoder.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/version-check.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/regex.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/mode.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/version.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/format-info.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/numeric-data.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/alphanumeric-data.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/byte-data.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/kanji-data.js","../../node_modules/.pnpm/dijkstrajs@1.0.3/node_modules/dijkstrajs/dijkstra.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/segments.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/qrcode.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utils.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/canvas.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/svg-tag.js","../../node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/browser.js","../../src/lib/components/menu/mobile-sign-in-dialog.svelte","../../src/lib/components/search/asset-result-item.svelte","../../src/lib/services/search/assets.js","../../src/lib/components/search/asset-results.svelte","../../src/lib/components/search/entry-result-item.svelte","../../src/lib/services/search/entries.js","../../src/lib/components/search/entry-results.svelte","../../src/lib/components/search/search-results.svelte","../../src/lib/components/search/search-page.svelte","../../src/lib/components/settings/settings-page.svelte","../../src/lib/components/workflow/workflow-page.svelte","../../src/lib/components/global/main-router.svelte","../../src/lib/locales/en.js","../../src/lib/locales/ja.js","../../src/lib/services/app/i18n.js","../../src/lib/components/app.svelte","../../src/lib/main.js"],"sourcesContent":["// Store the references to globals in case someone tries to monkey patch these, causing the below\n// to de-opt (this occurs often when using popular extensions).\nexport var is_array = Array.isArray;\nexport var index_of = Array.prototype.indexOf;\nexport var array_from = Array.from;\nexport var object_keys = Object.keys;\nexport var define_property = Object.defineProperty;\nexport var get_descriptor = Object.getOwnPropertyDescriptor;\nexport var get_descriptors = Object.getOwnPropertyDescriptors;\nexport var object_prototype = Object.prototype;\nexport var array_prototype = Array.prototype;\nexport var get_prototype_of = Object.getPrototypeOf;\nexport var is_extensible = Object.isExtensible;\n\n/**\n * @param {any} thing\n * @returns {thing is Function}\n */\nexport function is_function(thing) {\n\treturn typeof thing === 'function';\n}\n\nexport const noop = () => {};\n\n// Adapted from https://github.com/then/is-promise/blob/master/index.js\n// Distributed under MIT License https://github.com/then/is-promise/blob/master/LICENSE\n\n/**\n * @template [T=any]\n * @param {any} value\n * @returns {value is PromiseLike<T>}\n */\nexport function is_promise(value) {\n\treturn typeof value?.then === 'function';\n}\n\n/** @param {Function} fn */\nexport function run(fn) {\n\treturn fn();\n}\n\n/** @param {Array<() => void>} arr */\nexport function run_all(arr) {\n\tfor (var i = 0; i < arr.length; i++) {\n\t\tarr[i]();\n\t}\n}\n\n/**\n * TODO replace with Promise.withResolvers once supported widely enough\n * @template T\n */\nexport function deferred() {\n\t/** @type {(value: T) => void} */\n\tvar resolve;\n\n\t/** @type {(reason: any) => void} */\n\tvar reject;\n\n\t/** @type {Promise<T>} */\n\tvar promise = new Promise((res, rej) => {\n\t\tresolve = res;\n\t\treject = rej;\n\t});\n\n\t// @ts-expect-error\n\treturn { promise, resolve, reject };\n}\n\n/**\n * @template V\n * @param {V} value\n * @param {V | (() => V)} fallback\n * @param {boolean} [lazy]\n * @returns {V}\n */\nexport function fallback(value, fallback, lazy = false) {\n\treturn value === undefined\n\t\t? lazy\n\t\t\t? /** @type {() => V} */ (fallback)()\n\t\t\t: /** @type {V} */ (fallback)\n\t\t: value;\n}\n\n/**\n * When encountering a situation like `let [a, b, c] = $derived(blah())`,\n * we need to stash an intermediate value that `a`, `b`, and `c` derive\n * from, in case it's an iterable\n * @template T\n * @param {ArrayLike<T> | Iterable<T>} value\n * @param {number} [n]\n * @returns {Array<T>}\n */\nexport function to_array(value, n) {\n\t// return arrays unchanged\n\tif (Array.isArray(value)) {\n\t\treturn value;\n\t}\n\n\t// if value is not iterable, or `n` is unspecified (indicates a rest\n\t// element, which means we're not concerned about unbounded iterables)\n\t// convert to an array with `Array.from`\n\tif (n === undefined || !(Symbol.iterator in value)) {\n\t\treturn Array.from(value);\n\t}\n\n\t// otherwise, populate an array with `n` values\n\n\t/** @type {T[]} */\n\tconst array = [];\n\n\tfor (const element of value) {\n\t\tarray.push(element);\n\t\tif (array.length === n) break;\n\t}\n\n\treturn array;\n}\n","export const DERIVED = 1 << 1;\nexport const EFFECT = 1 << 2;\nexport const RENDER_EFFECT = 1 << 3;\nexport const BLOCK_EFFECT = 1 << 4;\nexport const BRANCH_EFFECT = 1 << 5;\nexport const ROOT_EFFECT = 1 << 6;\nexport const BOUNDARY_EFFECT = 1 << 7;\nexport const UNOWNED = 1 << 8;\nexport const DISCONNECTED = 1 << 9;\nexport const CLEAN = 1 << 10;\nexport const DIRTY = 1 << 11;\nexport const MAYBE_DIRTY = 1 << 12;\nexport const INERT = 1 << 13;\nexport const DESTROYED = 1 << 14;\nexport const EFFECT_RAN = 1 << 15;\n/** 'Transparent' effects do not create a transition boundary */\nexport const EFFECT_TRANSPARENT = 1 << 16;\nexport const INSPECT_EFFECT = 1 << 17;\nexport const HEAD_EFFECT = 1 << 18;\nexport const EFFECT_PRESERVED = 1 << 19;\nexport const USER_EFFECT = 1 << 20;\n\n// Flags used for async\nexport const REACTION_IS_UPDATING = 1 << 21;\nexport const ASYNC = 1 << 22;\n\nexport const ERROR_VALUE = 1 << 23;\n\nexport const STATE_SYMBOL = Symbol('$state');\nexport const LEGACY_PROPS = Symbol('legacy props');\nexport const LOADING_ATTR_SYMBOL = Symbol('');\nexport const PROXY_PATH_SYMBOL = Symbol('proxy path');\n\n/** allow users to ignore aborted signal errors if `reason.name === 'StaleReactionError` */\nexport const STALE_REACTION = new (class StaleReactionError extends Error {\n\tname = 'StaleReactionError';\n\tmessage = 'The reaction that called `getAbortSignal()` was re-run or destroyed';\n})();\n\nexport const ELEMENT_NODE = 1;\nexport const TEXT_NODE = 3;\nexport const COMMENT_NODE = 8;\nexport const DOCUMENT_FRAGMENT_NODE = 11;\n","/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\n/**\n * Cannot await outside a `<svelte:boundary>` with a `pending` snippet\n * @returns {never}\n */\nexport function await_outside_boundary() {\n\tif (DEV) {\n\t\tconst error = new Error(`await_outside_boundary\\nCannot await outside a \\`<svelte:boundary>\\` with a \\`pending\\` snippet\\nhttps://svelte.dev/e/await_outside_boundary`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/await_outside_boundary`);\n\t}\n}\n\n/**\n * Cannot use `{@render children(...)}` if the parent component uses `let:` directives. Consider using a named snippet instead\n * @returns {never}\n */\nexport function invalid_default_snippet() {\n\tif (DEV) {\n\t\tconst error = new Error(`invalid_default_snippet\\nCannot use \\`{@render children(...)}\\` if the parent component uses \\`let:\\` directives. Consider using a named snippet instead\\nhttps://svelte.dev/e/invalid_default_snippet`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invalid_default_snippet`);\n\t}\n}\n\n/**\n * A snippet function was passed invalid arguments. Snippets should only be instantiated via `{@render ...}`\n * @returns {never}\n */\nexport function invalid_snippet_arguments() {\n\tif (DEV) {\n\t\tconst error = new Error(`invalid_snippet_arguments\\nA snippet function was passed invalid arguments. Snippets should only be instantiated via \\`{@render ...}\\`\\nhttps://svelte.dev/e/invalid_snippet_arguments`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invalid_snippet_arguments`);\n\t}\n}\n\n/**\n * `%name%(...)` can only be used during component initialisation\n * @param {string} name\n * @returns {never}\n */\nexport function lifecycle_outside_component(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`lifecycle_outside_component\\n\\`${name}(...)\\` can only be used during component initialisation\\nhttps://svelte.dev/e/lifecycle_outside_component`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/lifecycle_outside_component`);\n\t}\n}\n\n/**\n * Attempted to render a snippet without a `{@render}` block. This would cause the snippet code to be stringified instead of its content being rendered to the DOM. To fix this, change `{snippet}` to `{@render snippet()}`.\n * @returns {never}\n */\nexport function snippet_without_render_tag() {\n\tif (DEV) {\n\t\tconst error = new Error(`snippet_without_render_tag\\nAttempted to render a snippet without a \\`{@render}\\` block. This would cause the snippet code to be stringified instead of its content being rendered to the DOM. To fix this, change \\`{snippet}\\` to \\`{@render snippet()}\\`.\\nhttps://svelte.dev/e/snippet_without_render_tag`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/snippet_without_render_tag`);\n\t}\n}\n\n/**\n * `%name%` is not a store with a `subscribe` method\n * @param {string} name\n * @returns {never}\n */\nexport function store_invalid_shape(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`store_invalid_shape\\n\\`${name}\\` is not a store with a \\`subscribe\\` method\\nhttps://svelte.dev/e/store_invalid_shape`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/store_invalid_shape`);\n\t}\n}\n\n/**\n * The `this` prop on `<svelte:element>` must be a string, if defined\n * @returns {never}\n */\nexport function svelte_element_invalid_this_value() {\n\tif (DEV) {\n\t\tconst error = new Error(`svelte_element_invalid_this_value\\nThe \\`this\\` prop on \\`<svelte:element>\\` must be a string, if defined\\nhttps://svelte.dev/e/svelte_element_invalid_this_value`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/svelte_element_invalid_this_value`);\n\t}\n}","/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\nexport *  from '../shared/errors.js';\n\n/**\n * Cannot create a `$derived(...)` with an `await` expression outside of an effect tree\n * @returns {never}\n */\nexport function async_derived_orphan() {\n\tif (DEV) {\n\t\tconst error = new Error(`async_derived_orphan\\nCannot create a \\`$derived(...)\\` with an \\`await\\` expression outside of an effect tree\\nhttps://svelte.dev/e/async_derived_orphan`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/async_derived_orphan`);\n\t}\n}\n\n/**\n * Using `bind:value` together with a checkbox input is not allowed. Use `bind:checked` instead\n * @returns {never}\n */\nexport function bind_invalid_checkbox_value() {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_invalid_checkbox_value\\nUsing \\`bind:value\\` together with a checkbox input is not allowed. Use \\`bind:checked\\` instead\\nhttps://svelte.dev/e/bind_invalid_checkbox_value`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/bind_invalid_checkbox_value`);\n\t}\n}\n\n/**\n * Component %component% has an export named `%key%` that a consumer component is trying to access using `bind:%key%`, which is disallowed. Instead, use `bind:this` (e.g. `<%name% bind:this={component} />`) and then access the property on the bound component instance (e.g. `component.%key%`)\n * @param {string} component\n * @param {string} key\n * @param {string} name\n * @returns {never}\n */\nexport function bind_invalid_export(component, key, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_invalid_export\\nComponent ${component} has an export named \\`${key}\\` that a consumer component is trying to access using \\`bind:${key}\\`, which is disallowed. Instead, use \\`bind:this\\` (e.g. \\`<${name} bind:this={component} />\\`) and then access the property on the bound component instance (e.g. \\`component.${key}\\`)\\nhttps://svelte.dev/e/bind_invalid_export`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/bind_invalid_export`);\n\t}\n}\n\n/**\n * A component is attempting to bind to a non-bindable property `%key%` belonging to %component% (i.e. `<%name% bind:%key%={...}>`). To mark a property as bindable: `let { %key% = $bindable() } = $props()`\n * @param {string} key\n * @param {string} component\n * @param {string} name\n * @returns {never}\n */\nexport function bind_not_bindable(key, component, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_not_bindable\\nA component is attempting to bind to a non-bindable property \\`${key}\\` belonging to ${component} (i.e. \\`<${name} bind:${key}={...}>\\`). To mark a property as bindable: \\`let { ${key} = $bindable() } = $props()\\`\\nhttps://svelte.dev/e/bind_not_bindable`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/bind_not_bindable`);\n\t}\n}\n\n/**\n * Calling `%method%` on a component instance (of %component%) is no longer valid in Svelte 5\n * @param {string} method\n * @param {string} component\n * @returns {never}\n */\nexport function component_api_changed(method, component) {\n\tif (DEV) {\n\t\tconst error = new Error(`component_api_changed\\nCalling \\`${method}\\` on a component instance (of ${component}) is no longer valid in Svelte 5\\nhttps://svelte.dev/e/component_api_changed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/component_api_changed`);\n\t}\n}\n\n/**\n * Attempted to instantiate %component% with `new %name%`, which is no longer valid in Svelte 5. If this component is not under your control, set the `compatibility.componentApi` compiler option to `4` to keep it working.\n * @param {string} component\n * @param {string} name\n * @returns {never}\n */\nexport function component_api_invalid_new(component, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`component_api_invalid_new\\nAttempted to instantiate ${component} with \\`new ${name}\\`, which is no longer valid in Svelte 5. If this component is not under your control, set the \\`compatibility.componentApi\\` compiler option to \\`4\\` to keep it working.\\nhttps://svelte.dev/e/component_api_invalid_new`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/component_api_invalid_new`);\n\t}\n}\n\n/**\n * A derived value cannot reference itself recursively\n * @returns {never}\n */\nexport function derived_references_self() {\n\tif (DEV) {\n\t\tconst error = new Error(`derived_references_self\\nA derived value cannot reference itself recursively\\nhttps://svelte.dev/e/derived_references_self`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/derived_references_self`);\n\t}\n}\n\n/**\n * Keyed each block has duplicate key `%value%` at indexes %a% and %b%\n * @param {string} a\n * @param {string} b\n * @param {string | undefined | null} [value]\n * @returns {never}\n */\nexport function each_key_duplicate(a, b, value) {\n\tif (DEV) {\n\t\tconst error = new Error(`each_key_duplicate\\n${value\n\t\t\t? `Keyed each block has duplicate key \\`${value}\\` at indexes ${a} and ${b}`\n\t\t\t: `Keyed each block has duplicate key at indexes ${a} and ${b}`}\\nhttps://svelte.dev/e/each_key_duplicate`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/each_key_duplicate`);\n\t}\n}\n\n/**\n * `%rune%` cannot be used inside an effect cleanup function\n * @param {string} rune\n * @returns {never}\n */\nexport function effect_in_teardown(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_in_teardown\\n\\`${rune}\\` cannot be used inside an effect cleanup function\\nhttps://svelte.dev/e/effect_in_teardown`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_in_teardown`);\n\t}\n}\n\n/**\n * Effect cannot be created inside a `$derived` value that was not itself created inside an effect\n * @returns {never}\n */\nexport function effect_in_unowned_derived() {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_in_unowned_derived\\nEffect cannot be created inside a \\`$derived\\` value that was not itself created inside an effect\\nhttps://svelte.dev/e/effect_in_unowned_derived`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_in_unowned_derived`);\n\t}\n}\n\n/**\n * `%rune%` can only be used inside an effect (e.g. during component initialisation)\n * @param {string} rune\n * @returns {never}\n */\nexport function effect_orphan(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_orphan\\n\\`${rune}\\` can only be used inside an effect (e.g. during component initialisation)\\nhttps://svelte.dev/e/effect_orphan`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_orphan`);\n\t}\n}\n\n/**\n * `$effect.pending()` can only be called inside an effect or derived\n * @returns {never}\n */\nexport function effect_pending_outside_reaction() {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_pending_outside_reaction\\n\\`$effect.pending()\\` can only be called inside an effect or derived\\nhttps://svelte.dev/e/effect_pending_outside_reaction`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_pending_outside_reaction`);\n\t}\n}\n\n/**\n * Maximum update depth exceeded. This typically indicates that an effect reads and writes the same piece of state\n * @returns {never}\n */\nexport function effect_update_depth_exceeded() {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_update_depth_exceeded\\nMaximum update depth exceeded. This typically indicates that an effect reads and writes the same piece of state\\nhttps://svelte.dev/e/effect_update_depth_exceeded`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/effect_update_depth_exceeded`);\n\t}\n}\n\n/**\n * Cannot use `flushSync` inside an effect\n * @returns {never}\n */\nexport function flush_sync_in_effect() {\n\tif (DEV) {\n\t\tconst error = new Error(`flush_sync_in_effect\\nCannot use \\`flushSync\\` inside an effect\\nhttps://svelte.dev/e/flush_sync_in_effect`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/flush_sync_in_effect`);\n\t}\n}\n\n/**\n * `getAbortSignal()` can only be called inside an effect or derived\n * @returns {never}\n */\nexport function get_abort_signal_outside_reaction() {\n\tif (DEV) {\n\t\tconst error = new Error(`get_abort_signal_outside_reaction\\n\\`getAbortSignal()\\` can only be called inside an effect or derived\\nhttps://svelte.dev/e/get_abort_signal_outside_reaction`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/get_abort_signal_outside_reaction`);\n\t}\n}\n\n/**\n * Failed to hydrate the application\n * @returns {never}\n */\nexport function hydration_failed() {\n\tif (DEV) {\n\t\tconst error = new Error(`hydration_failed\\nFailed to hydrate the application\\nhttps://svelte.dev/e/hydration_failed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/hydration_failed`);\n\t}\n}\n\n/**\n * Could not `{@render}` snippet due to the expression being `null` or `undefined`. Consider using optional chaining `{@render snippet?.()}`\n * @returns {never}\n */\nexport function invalid_snippet() {\n\tif (DEV) {\n\t\tconst error = new Error(`invalid_snippet\\nCould not \\`{@render}\\` snippet due to the expression being \\`null\\` or \\`undefined\\`. Consider using optional chaining \\`{@render snippet?.()}\\`\\nhttps://svelte.dev/e/invalid_snippet`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invalid_snippet`);\n\t}\n}\n\n/**\n * `%name%(...)` cannot be used in runes mode\n * @param {string} name\n * @returns {never}\n */\nexport function lifecycle_legacy_only(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`lifecycle_legacy_only\\n\\`${name}(...)\\` cannot be used in runes mode\\nhttps://svelte.dev/e/lifecycle_legacy_only`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/lifecycle_legacy_only`);\n\t}\n}\n\n/**\n * Cannot do `bind:%key%={undefined}` when `%key%` has a fallback value\n * @param {string} key\n * @returns {never}\n */\nexport function props_invalid_value(key) {\n\tif (DEV) {\n\t\tconst error = new Error(`props_invalid_value\\nCannot do \\`bind:${key}={undefined}\\` when \\`${key}\\` has a fallback value\\nhttps://svelte.dev/e/props_invalid_value`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/props_invalid_value`);\n\t}\n}\n\n/**\n * Rest element properties of `$props()` such as `%property%` are readonly\n * @param {string} property\n * @returns {never}\n */\nexport function props_rest_readonly(property) {\n\tif (DEV) {\n\t\tconst error = new Error(`props_rest_readonly\\nRest element properties of \\`$props()\\` such as \\`${property}\\` are readonly\\nhttps://svelte.dev/e/props_rest_readonly`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/props_rest_readonly`);\n\t}\n}\n\n/**\n * The `%rune%` rune is only available inside `.svelte` and `.svelte.js/ts` files\n * @param {string} rune\n * @returns {never}\n */\nexport function rune_outside_svelte(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`rune_outside_svelte\\nThe \\`${rune}\\` rune is only available inside \\`.svelte\\` and \\`.svelte.js/ts\\` files\\nhttps://svelte.dev/e/rune_outside_svelte`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/rune_outside_svelte`);\n\t}\n}\n\n/**\n * `setContext` must be called when a component first initializes, not in a subsequent effect or after an `await` expression\n * @returns {never}\n */\nexport function set_context_after_init() {\n\tif (DEV) {\n\t\tconst error = new Error(`set_context_after_init\\n\\`setContext\\` must be called when a component first initializes, not in a subsequent effect or after an \\`await\\` expression\\nhttps://svelte.dev/e/set_context_after_init`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/set_context_after_init`);\n\t}\n}\n\n/**\n * Property descriptors defined on `$state` objects must contain `value` and always be `enumerable`, `configurable` and `writable`.\n * @returns {never}\n */\nexport function state_descriptors_fixed() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_descriptors_fixed\\nProperty descriptors defined on \\`$state\\` objects must contain \\`value\\` and always be \\`enumerable\\`, \\`configurable\\` and \\`writable\\`.\\nhttps://svelte.dev/e/state_descriptors_fixed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/state_descriptors_fixed`);\n\t}\n}\n\n/**\n * Cannot set prototype of `$state` object\n * @returns {never}\n */\nexport function state_prototype_fixed() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_prototype_fixed\\nCannot set prototype of \\`$state\\` object\\nhttps://svelte.dev/e/state_prototype_fixed`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/state_prototype_fixed`);\n\t}\n}\n\n/**\n * Updating state inside `$derived(...)`, `$inspect(...)` or a template expression is forbidden. If the value should not be reactive, declare it without `$state`\n * @returns {never}\n */\nexport function state_unsafe_mutation() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_unsafe_mutation\\nUpdating state inside \\`$derived(...)\\`, \\`$inspect(...)\\` or a template expression is forbidden. If the value should not be reactive, declare it without \\`$state\\`\\nhttps://svelte.dev/e/state_unsafe_mutation`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/state_unsafe_mutation`);\n\t}\n}\n\n/**\n * A `<svelte:boundary>` `reset` function cannot be called while an error is still being handled\n * @returns {never}\n */\nexport function svelte_boundary_reset_onerror() {\n\tif (DEV) {\n\t\tconst error = new Error(`svelte_boundary_reset_onerror\\nA \\`<svelte:boundary>\\` \\`reset\\` function cannot be called while an error is still being handled\\nhttps://svelte.dev/e/svelte_boundary_reset_onerror`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`);\n\t}\n}","export const EACH_ITEM_REACTIVE = 1;\nexport const EACH_INDEX_REACTIVE = 1 << 1;\n/** See EachBlock interface metadata.is_controlled for an explanation what this is */\nexport const EACH_IS_CONTROLLED = 1 << 2;\nexport const EACH_IS_ANIMATED = 1 << 3;\nexport const EACH_ITEM_IMMUTABLE = 1 << 4;\n\nexport const PROPS_IS_IMMUTABLE = 1;\nexport const PROPS_IS_RUNES = 1 << 1;\nexport const PROPS_IS_UPDATED = 1 << 2;\nexport const PROPS_IS_BINDABLE = 1 << 3;\nexport const PROPS_IS_LAZY_INITIAL = 1 << 4;\n\nexport const TRANSITION_IN = 1;\nexport const TRANSITION_OUT = 1 << 1;\nexport const TRANSITION_GLOBAL = 1 << 2;\n\nexport const TEMPLATE_FRAGMENT = 1;\nexport const TEMPLATE_USE_IMPORT_NODE = 1 << 1;\nexport const TEMPLATE_USE_SVG = 1 << 2;\nexport const TEMPLATE_USE_MATHML = 1 << 3;\n\nexport const HYDRATION_START = '[';\n/** used to indicate that an `{:else}...` block was rendered */\nexport const HYDRATION_START_ELSE = '[!';\nexport const HYDRATION_END = ']';\nexport const HYDRATION_ERROR = {};\n\nexport const ELEMENT_IS_NAMESPACED = 1;\nexport const ELEMENT_PRESERVE_ATTRIBUTE_CASE = 1 << 1;\n\nexport const UNINITIALIZED = Symbol();\n\n// Dev-time component properties\nexport const FILENAME = Symbol('filename');\nexport const HMR = Symbol('hmr');\n\nexport const NAMESPACE_HTML = 'http://www.w3.org/1999/xhtml';\nexport const NAMESPACE_SVG = 'http://www.w3.org/2000/svg';\nexport const NAMESPACE_MATHML = 'http://www.w3.org/1998/Math/MathML';\n\n// we use a list of ignorable runtime warnings because not every runtime warning\n// can be ignored and we want to keep the validation for svelte-ignore in place\nexport const IGNORABLE_RUNTIME_WARNINGS = /** @type {const} */ ([\n\t'await_waterfall',\n\t'await_reactivity_loss',\n\t'state_snapshot_uncloneable',\n\t'binding_property_non_reactive',\n\t'hydration_attribute_changed',\n\t'hydration_html_changed',\n\t'ownership_invalid_binding',\n\t'ownership_invalid_mutation'\n]);\n\n/**\n * Whitespace inside one of these elements will not result in\n * a whitespace node being created in any circumstances. (This\n * list is almost certainly very incomplete)\n * TODO this is currently unused\n */\nexport const ELEMENTS_WITHOUT_TEXT = ['audio', 'datalist', 'dl', 'optgroup', 'select', 'video'];\n\nexport const ATTACHMENT_KEY = '@attach';\n","/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\nvar bold = 'font-weight: bold';\nvar normal = 'font-weight: normal';\n\n/**\n * Assignment to `%property%` property (%location%) will evaluate to the right-hand side, not the value of `%property%` following the assignment. This may result in unexpected behaviour.\n * @param {string} property\n * @param {string} location\n */\nexport function assignment_value_stale(property, location) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] assignment_value_stale\\n%cAssignment to \\`${property}\\` property (${location}) will evaluate to the right-hand side, not the value of \\`${property}\\` following the assignment. This may result in unexpected behaviour.\\nhttps://svelte.dev/e/assignment_value_stale`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/assignment_value_stale`);\n\t}\n}\n\n/**\n * Detected reactivity loss when reading `%name%`. This happens when state is read in an async function after an earlier `await`\n * @param {string} name\n */\nexport function await_reactivity_loss(name) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] await_reactivity_loss\\n%cDetected reactivity loss when reading \\`${name}\\`. This happens when state is read in an async function after an earlier \\`await\\`\\nhttps://svelte.dev/e/await_reactivity_loss`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/await_reactivity_loss`);\n\t}\n}\n\n/**\n * An async derived, `%name%` (%location%) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app\n * @param {string} name\n * @param {string} location\n */\nexport function await_waterfall(name, location) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] await_waterfall\\n%cAn async derived, \\`${name}\\` (${location}) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app\\nhttps://svelte.dev/e/await_waterfall`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/await_waterfall`);\n\t}\n}\n\n/**\n * `%binding%` (%location%) is binding to a non-reactive property\n * @param {string} binding\n * @param {string | undefined | null} [location]\n */\nexport function binding_property_non_reactive(binding, location) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] binding_property_non_reactive\\n%c${location\n\t\t\t\t? `\\`${binding}\\` (${location}) is binding to a non-reactive property`\n\t\t\t\t: `\\`${binding}\\` is binding to a non-reactive property`}\\nhttps://svelte.dev/e/binding_property_non_reactive`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/binding_property_non_reactive`);\n\t}\n}\n\n/**\n * Your `console.%method%` contained `$state` proxies. Consider using `$inspect(...)` or `$state.snapshot(...)` instead\n * @param {string} method\n */\nexport function console_log_state(method) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] console_log_state\\n%cYour \\`console.${method}\\` contained \\`$state\\` proxies. Consider using \\`$inspect(...)\\` or \\`$state.snapshot(...)\\` instead\\nhttps://svelte.dev/e/console_log_state`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/console_log_state`);\n\t}\n}\n\n/**\n * %handler% should be a function. Did you mean to %suggestion%?\n * @param {string} handler\n * @param {string} suggestion\n */\nexport function event_handler_invalid(handler, suggestion) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] event_handler_invalid\\n%c${handler} should be a function. Did you mean to ${suggestion}?\\nhttps://svelte.dev/e/event_handler_invalid`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/event_handler_invalid`);\n\t}\n}\n\n/**\n * The `%attribute%` attribute on `%html%` changed its value between server and client renders. The client value, `%value%`, will be ignored in favour of the server value\n * @param {string} attribute\n * @param {string} html\n * @param {string} value\n */\nexport function hydration_attribute_changed(attribute, html, value) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] hydration_attribute_changed\\n%cThe \\`${attribute}\\` attribute on \\`${html}\\` changed its value between server and client renders. The client value, \\`${value}\\`, will be ignored in favour of the server value\\nhttps://svelte.dev/e/hydration_attribute_changed`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydration_attribute_changed`);\n\t}\n}\n\n/**\n * The value of an `{@html ...}` block %location% changed between server and client renders. The client value will be ignored in favour of the server value\n * @param {string | undefined | null} [location]\n */\nexport function hydration_html_changed(location) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] hydration_html_changed\\n%c${location\n\t\t\t\t? `The value of an \\`{@html ...}\\` block ${location} changed between server and client renders. The client value will be ignored in favour of the server value`\n\t\t\t\t: 'The value of an `{@html ...}` block changed between server and client renders. The client value will be ignored in favour of the server value'}\\nhttps://svelte.dev/e/hydration_html_changed`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydration_html_changed`);\n\t}\n}\n\n/**\n * Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near %location%\n * @param {string | undefined | null} [location]\n */\nexport function hydration_mismatch(location) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] hydration_mismatch\\n%c${location\n\t\t\t\t? `Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near ${location}`\n\t\t\t\t: 'Hydration failed because the initial UI does not match what was rendered on the server'}\\nhttps://svelte.dev/e/hydration_mismatch`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydration_mismatch`);\n\t}\n}\n\n/**\n * The `render` function passed to `createRawSnippet` should return HTML for a single element\n */\nexport function invalid_raw_snippet_render() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] invalid_raw_snippet_render\\n%cThe \\`render\\` function passed to \\`createRawSnippet\\` should return HTML for a single element\\nhttps://svelte.dev/e/invalid_raw_snippet_render`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/invalid_raw_snippet_render`);\n\t}\n}\n\n/**\n * Detected a migrated `$:` reactive block in `%filename%` that both accesses and updates the same reactive value. This may cause recursive updates when converted to an `$effect`.\n * @param {string} filename\n */\nexport function legacy_recursive_reactive_block(filename) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] legacy_recursive_reactive_block\\n%cDetected a migrated \\`$:\\` reactive block in \\`${filename}\\` that both accesses and updates the same reactive value. This may cause recursive updates when converted to an \\`$effect\\`.\\nhttps://svelte.dev/e/legacy_recursive_reactive_block`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/legacy_recursive_reactive_block`);\n\t}\n}\n\n/**\n * Tried to unmount a component that was not mounted\n */\nexport function lifecycle_double_unmount() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] lifecycle_double_unmount\\n%cTried to unmount a component that was not mounted\\nhttps://svelte.dev/e/lifecycle_double_unmount`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/lifecycle_double_unmount`);\n\t}\n}\n\n/**\n * %parent% passed property `%prop%` to %child% with `bind:`, but its parent component %owner% did not declare `%prop%` as a binding. Consider creating a binding between %owner% and %parent% (e.g. `bind:%prop%={...}` instead of `%prop%={...}`)\n * @param {string} parent\n * @param {string} prop\n * @param {string} child\n * @param {string} owner\n */\nexport function ownership_invalid_binding(parent, prop, child, owner) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] ownership_invalid_binding\\n%c${parent} passed property \\`${prop}\\` to ${child} with \\`bind:\\`, but its parent component ${owner} did not declare \\`${prop}\\` as a binding. Consider creating a binding between ${owner} and ${parent} (e.g. \\`bind:${prop}={...}\\` instead of \\`${prop}={...}\\`)\\nhttps://svelte.dev/e/ownership_invalid_binding`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/ownership_invalid_binding`);\n\t}\n}\n\n/**\n * Mutating unbound props (`%name%`, at %location%) is strongly discouraged. Consider using `bind:%prop%={...}` in %parent% (or using a callback) instead\n * @param {string} name\n * @param {string} location\n * @param {string} prop\n * @param {string} parent\n */\nexport function ownership_invalid_mutation(name, location, prop, parent) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] ownership_invalid_mutation\\n%cMutating unbound props (\\`${name}\\`, at ${location}) is strongly discouraged. Consider using \\`bind:${prop}={...}\\` in ${parent} (or using a callback) instead\\nhttps://svelte.dev/e/ownership_invalid_mutation`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/ownership_invalid_mutation`);\n\t}\n}\n\n/**\n * The `value` property of a `<select multiple>` element should be an array, but it received a non-array value. The selection will be kept as is.\n */\nexport function select_multiple_invalid_value() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] select_multiple_invalid_value\\n%cThe \\`value\\` property of a \\`<select multiple>\\` element should be an array, but it received a non-array value. The selection will be kept as is.\\nhttps://svelte.dev/e/select_multiple_invalid_value`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/select_multiple_invalid_value`);\n\t}\n}\n\n/**\n * Reactive `$state(...)` proxies and the values they proxy have different identities. Because of this, comparisons with `%operator%` will produce unexpected results\n * @param {string} operator\n */\nexport function state_proxy_equality_mismatch(operator) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] state_proxy_equality_mismatch\\n%cReactive \\`$state(...)\\` proxies and the values they proxy have different identities. Because of this, comparisons with \\`${operator}\\` will produce unexpected results\\nhttps://svelte.dev/e/state_proxy_equality_mismatch`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/state_proxy_equality_mismatch`);\n\t}\n}\n\n/**\n * A `<svelte:boundary>` `reset` function only resets the boundary the first time it is called\n */\nexport function svelte_boundary_reset_noop() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] svelte_boundary_reset_noop\\n%cA \\`<svelte:boundary>\\` \\`reset\\` function only resets the boundary the first time it is called\\nhttps://svelte.dev/e/svelte_boundary_reset_noop`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`);\n\t}\n}\n\n/**\n * The `slide` transition does not work correctly for elements with `display: %value%`\n * @param {string} value\n */\nexport function transition_slide_display(value) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] transition_slide_display\\n%cThe \\`slide\\` transition does not work correctly for elements with \\`display: ${value}\\`\\nhttps://svelte.dev/e/transition_slide_display`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/transition_slide_display`);\n\t}\n}","/** @import { TemplateNode } from '#client' */\n\nimport { COMMENT_NODE } from '#client/constants';\nimport {\n\tHYDRATION_END,\n\tHYDRATION_ERROR,\n\tHYDRATION_START,\n\tHYDRATION_START_ELSE\n} from '../../../constants.js';\nimport * as w from '../warnings.js';\nimport { get_next_sibling } from './operations.js';\n\n/**\n * Use this variable to guard everything related to hydration code so it can be treeshaken out\n * if the user doesn't use the `hydrate` method and these code paths are therefore not needed.\n */\nexport let hydrating = false;\n\n/** @param {boolean} value */\nexport function set_hydrating(value) {\n\thydrating = value;\n}\n\n/**\n * The node that is currently being hydrated. This starts out as the first node inside the opening\n * <!--[--> comment, and updates each time a component calls `$.child(...)` or `$.sibling(...)`.\n * When entering a block (e.g. `{#if ...}`), `hydrate_node` is the block opening comment; by the\n * time we leave the block it is the closing comment, which serves as the block's anchor.\n * @type {TemplateNode}\n */\nexport let hydrate_node;\n\n/** @param {TemplateNode} node */\nexport function set_hydrate_node(node) {\n\tif (node === null) {\n\t\tw.hydration_mismatch();\n\t\tthrow HYDRATION_ERROR;\n\t}\n\n\treturn (hydrate_node = node);\n}\n\nexport function hydrate_next() {\n\treturn set_hydrate_node(/** @type {TemplateNode} */ (get_next_sibling(hydrate_node)));\n}\n\n/** @param {TemplateNode} node */\nexport function reset(node) {\n\tif (!hydrating) return;\n\n\t// If the node has remaining siblings, something has gone wrong\n\tif (get_next_sibling(hydrate_node) !== null) {\n\t\tw.hydration_mismatch();\n\t\tthrow HYDRATION_ERROR;\n\t}\n\n\thydrate_node = node;\n}\n\n/**\n * @param {HTMLTemplateElement} template\n */\nexport function hydrate_template(template) {\n\tif (hydrating) {\n\t\t// @ts-expect-error TemplateNode doesn't include DocumentFragment, but it's actually fine\n\t\thydrate_node = template.content;\n\t}\n}\n\nexport function next(count = 1) {\n\tif (hydrating) {\n\t\tvar i = count;\n\t\tvar node = hydrate_node;\n\n\t\twhile (i--) {\n\t\t\tnode = /** @type {TemplateNode} */ (get_next_sibling(node));\n\t\t}\n\n\t\thydrate_node = node;\n\t}\n}\n\n/**\n * Removes all nodes starting at `hydrate_node` up until the next hydration end comment\n */\nexport function remove_nodes() {\n\tvar depth = 0;\n\tvar node = hydrate_node;\n\n\twhile (true) {\n\t\tif (node.nodeType === COMMENT_NODE) {\n\t\t\tvar data = /** @type {Comment} */ (node).data;\n\n\t\t\tif (data === HYDRATION_END) {\n\t\t\t\tif (depth === 0) return node;\n\t\t\t\tdepth -= 1;\n\t\t\t} else if (data === HYDRATION_START || data === HYDRATION_START_ELSE) {\n\t\t\t\tdepth += 1;\n\t\t\t}\n\t\t}\n\n\t\tvar next = /** @type {TemplateNode} */ (get_next_sibling(node));\n\t\tnode.remove();\n\t\tnode = next;\n\t}\n}\n\n/**\n *\n * @param {TemplateNode} node\n */\nexport function read_hydration_instruction(node) {\n\tif (!node || node.nodeType !== COMMENT_NODE) {\n\t\tw.hydration_mismatch();\n\t\tthrow HYDRATION_ERROR;\n\t}\n\n\treturn /** @type {Comment} */ (node).data;\n}\n","/** @import { Equals } from '#client' */\n\n/** @type {Equals} */\nexport function equals(value) {\n\treturn value === this.v;\n}\n\n/**\n * @param {unknown} a\n * @param {unknown} b\n * @returns {boolean}\n */\nexport function safe_not_equal(a, b) {\n\treturn a != a\n\t\t? b == b\n\t\t: a !== b || (a !== null && typeof a === 'object') || typeof a === 'function';\n}\n\n/**\n * @param {unknown} a\n * @param {unknown} b\n * @returns {boolean}\n */\nexport function not_equal(a, b) {\n\treturn a !== b;\n}\n\n/** @type {Equals} */\nexport function safe_equals(value) {\n\treturn !safe_not_equal(value, this.v);\n}\n","/** @import { Snapshot } from './types' */\nimport { DEV } from 'esm-env';\nimport * as w from './warnings.js';\nimport { get_prototype_of, is_array, object_prototype } from './utils.js';\n\n/**\n * In dev, we keep track of which properties could not be cloned. In prod\n * we don't bother, but we keep a dummy array around so that the\n * signature stays the same\n * @type {string[]}\n */\nconst empty = [];\n\n/**\n * @template T\n * @param {T} value\n * @param {boolean} [skip_warning]\n * @returns {Snapshot<T>}\n */\nexport function snapshot(value, skip_warning = false) {\n\tif (DEV && !skip_warning) {\n\t\t/** @type {string[]} */\n\t\tconst paths = [];\n\n\t\tconst copy = clone(value, new Map(), '', paths);\n\t\tif (paths.length === 1 && paths[0] === '') {\n\t\t\t// value could not be cloned\n\t\t\tw.state_snapshot_uncloneable();\n\t\t} else if (paths.length > 0) {\n\t\t\t// some properties could not be cloned\n\t\t\tconst slice = paths.length > 10 ? paths.slice(0, 7) : paths.slice(0, 10);\n\t\t\tconst excess = paths.length - slice.length;\n\n\t\t\tlet uncloned = slice.map((path) => `- <value>${path}`).join('\\n');\n\t\t\tif (excess > 0) uncloned += `\\n- ...and ${excess} more`;\n\n\t\t\tw.state_snapshot_uncloneable(uncloned);\n\t\t}\n\n\t\treturn copy;\n\t}\n\n\treturn clone(value, new Map(), '', empty);\n}\n\n/**\n * @template T\n * @param {T} value\n * @param {Map<T, Snapshot<T>>} cloned\n * @param {string} path\n * @param {string[]} paths\n * @param {null | T} original The original value, if `value` was produced from a `toJSON` call\n * @returns {Snapshot<T>}\n */\nfunction clone(value, cloned, path, paths, original = null) {\n\tif (typeof value === 'object' && value !== null) {\n\t\tvar unwrapped = cloned.get(value);\n\t\tif (unwrapped !== undefined) return unwrapped;\n\n\t\tif (value instanceof Map) return /** @type {Snapshot<T>} */ (new Map(value));\n\t\tif (value instanceof Set) return /** @type {Snapshot<T>} */ (new Set(value));\n\n\t\tif (is_array(value)) {\n\t\t\tvar copy = /** @type {Snapshot<any>} */ (Array(value.length));\n\t\t\tcloned.set(value, copy);\n\n\t\t\tif (original !== null) {\n\t\t\t\tcloned.set(original, copy);\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < value.length; i += 1) {\n\t\t\t\tvar element = value[i];\n\t\t\t\tif (i in value) {\n\t\t\t\t\tcopy[i] = clone(element, cloned, DEV ? `${path}[${i}]` : path, paths);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn copy;\n\t\t}\n\n\t\tif (get_prototype_of(value) === object_prototype) {\n\t\t\t/** @type {Snapshot<any>} */\n\t\t\tcopy = {};\n\t\t\tcloned.set(value, copy);\n\n\t\t\tif (original !== null) {\n\t\t\t\tcloned.set(original, copy);\n\t\t\t}\n\n\t\t\tfor (var key in value) {\n\t\t\t\t// @ts-expect-error\n\t\t\t\tcopy[key] = clone(value[key], cloned, DEV ? `${path}.${key}` : path, paths);\n\t\t\t}\n\n\t\t\treturn copy;\n\t\t}\n\n\t\tif (value instanceof Date) {\n\t\t\treturn /** @type {Snapshot<T>} */ (structuredClone(value));\n\t\t}\n\n\t\tif (typeof (/** @type {T & { toJSON?: any } } */ (value).toJSON) === 'function') {\n\t\t\treturn clone(\n\t\t\t\t/** @type {T & { toJSON(): any } } */ (value).toJSON(),\n\t\t\t\tcloned,\n\t\t\t\tDEV ? `${path}.toJSON()` : path,\n\t\t\t\tpaths,\n\t\t\t\t// Associate the instance with the toJSON clone\n\t\t\t\tvalue\n\t\t\t);\n\t\t}\n\t}\n\n\tif (value instanceof EventTarget) {\n\t\t// can't be cloned\n\t\treturn /** @type {Snapshot<T>} */ (value);\n\t}\n\n\ttry {\n\t\treturn /** @type {Snapshot<T>} */ (structuredClone(value));\n\t} catch (e) {\n\t\tif (DEV) {\n\t\t\tpaths.push(path);\n\t\t}\n\n\t\treturn /** @type {Snapshot<T>} */ (value);\n\t}\n}\n","/** @import { ComponentContext, DevStackEntry, Effect } from '#client' */\nimport { DEV } from 'esm-env';\nimport * as e from './errors.js';\nimport { active_effect, active_reaction } from './runtime.js';\nimport { create_user_effect } from './reactivity/effects.js';\nimport { async_mode_flag, legacy_mode_flag } from '../flags/index.js';\nimport { FILENAME } from '../../constants.js';\nimport { BRANCH_EFFECT, EFFECT_RAN } from './constants.js';\n\n/** @type {ComponentContext | null} */\nexport let component_context = null;\n\n/** @param {ComponentContext | null} context */\nexport function set_component_context(context) {\n\tcomponent_context = context;\n}\n\n/** @type {DevStackEntry | null} */\nexport let dev_stack = null;\n\n/** @param {DevStackEntry | null} stack */\nexport function set_dev_stack(stack) {\n\tdev_stack = stack;\n}\n\n/**\n * Execute a callback with a new dev stack entry\n * @param {() => any} callback - Function to execute\n * @param {DevStackEntry['type']} type - Type of block/component\n * @param {any} component - Component function\n * @param {number} line - Line number\n * @param {number} column - Column number\n * @param {Record<string, any>} [additional] - Any additional properties to add to the dev stack entry\n * @returns {any}\n */\nexport function add_svelte_meta(callback, type, component, line, column, additional) {\n\tconst parent = dev_stack;\n\n\tdev_stack = {\n\t\ttype,\n\t\tfile: component[FILENAME],\n\t\tline,\n\t\tcolumn,\n\t\tparent,\n\t\t...additional\n\t};\n\n\ttry {\n\t\treturn callback();\n\t} finally {\n\t\tdev_stack = parent;\n\t}\n}\n\n/**\n * The current component function. Different from current component context:\n * ```html\n * <!-- App.svelte -->\n * <Foo>\n *   <Bar /> <!-- context == Foo.svelte, function == App.svelte -->\n * </Foo>\n * ```\n * @type {ComponentContext['function']}\n */\nexport let dev_current_component_function = null;\n\n/** @param {ComponentContext['function']} fn */\nexport function set_dev_current_component_function(fn) {\n\tdev_current_component_function = fn;\n}\n\n/**\n * Retrieves the context that belongs to the closest parent component with the specified `key`.\n * Must be called during component initialisation.\n *\n * @template T\n * @param {any} key\n * @returns {T}\n */\nexport function getContext(key) {\n\tconst context_map = get_or_init_context_map('getContext');\n\tconst result = /** @type {T} */ (context_map.get(key));\n\treturn result;\n}\n\n/**\n * Associates an arbitrary `context` object with the current component and the specified `key`\n * and returns that object. The context is then available to children of the component\n * (including slotted content) with `getContext`.\n *\n * Like lifecycle functions, this must be called during component initialisation.\n *\n * @template T\n * @param {any} key\n * @param {T} context\n * @returns {T}\n */\nexport function setContext(key, context) {\n\tconst context_map = get_or_init_context_map('setContext');\n\n\tif (async_mode_flag) {\n\t\tvar flags = /** @type {Effect} */ (active_effect).f;\n\t\tvar valid = !active_reaction && (flags & BRANCH_EFFECT) !== 0 && (flags & EFFECT_RAN) === 0;\n\n\t\tif (!valid) {\n\t\t\te.set_context_after_init();\n\t\t}\n\t}\n\n\tcontext_map.set(key, context);\n\treturn context;\n}\n\n/**\n * Checks whether a given `key` has been set in the context of a parent component.\n * Must be called during component initialisation.\n *\n * @param {any} key\n * @returns {boolean}\n */\nexport function hasContext(key) {\n\tconst context_map = get_or_init_context_map('hasContext');\n\treturn context_map.has(key);\n}\n\n/**\n * Retrieves the whole context map that belongs to the closest parent component.\n * Must be called during component initialisation. Useful, for example, if you\n * programmatically create a component and want to pass the existing context to it.\n *\n * @template {Map<any, any>} [T=Map<any, any>]\n * @returns {T}\n */\nexport function getAllContexts() {\n\tconst context_map = get_or_init_context_map('getAllContexts');\n\treturn /** @type {T} */ (context_map);\n}\n\n/**\n * @param {Record<string, unknown>} props\n * @param {any} runes\n * @param {Function} [fn]\n * @returns {void}\n */\nexport function push(props, runes = false, fn) {\n\tcomponent_context = {\n\t\tp: component_context,\n\t\tc: null,\n\t\te: null,\n\t\ts: props,\n\t\tx: null,\n\t\tl: legacy_mode_flag && !runes ? { s: null, u: null, $: [] } : null\n\t};\n\n\tif (DEV) {\n\t\t// component function\n\t\tcomponent_context.function = fn;\n\t\tdev_current_component_function = fn;\n\t}\n}\n\n/**\n * @template {Record<string, any>} T\n * @param {T} [component]\n * @returns {T}\n */\nexport function pop(component) {\n\tvar context = /** @type {ComponentContext} */ (component_context);\n\tvar effects = context.e;\n\n\tif (effects !== null) {\n\t\tcontext.e = null;\n\n\t\tfor (var fn of effects) {\n\t\t\tcreate_user_effect(fn);\n\t\t}\n\t}\n\n\tif (component !== undefined) {\n\t\tcontext.x = component;\n\t}\n\n\tcomponent_context = context.p;\n\n\tif (DEV) {\n\t\tdev_current_component_function = component_context?.function ?? null;\n\t}\n\n\treturn component ?? /** @type {T} */ ({});\n}\n\n/** @returns {boolean} */\nexport function is_runes() {\n\treturn !legacy_mode_flag || (component_context !== null && component_context.l === null);\n}\n\n/**\n * @param {string} name\n * @returns {Map<unknown, unknown>}\n */\nfunction get_or_init_context_map(name) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component(name);\n\t}\n\n\treturn (component_context.c ??= new Map(get_parent_context(component_context) || undefined));\n}\n\n/**\n * @param {ComponentContext} component_context\n * @returns {Map<unknown, unknown> | null}\n */\nfunction get_parent_context(component_context) {\n\tlet parent = component_context.p;\n\twhile (parent !== null) {\n\t\tconst context_map = parent.c;\n\t\tif (context_map !== null) {\n\t\t\treturn context_map;\n\t\t}\n\t\tparent = parent.p;\n\t}\n\treturn null;\n}\n","/** @import { Derived, Effect } from '#client' */\n/** @import { Boundary } from './dom/blocks/boundary.js' */\nimport { DEV } from 'esm-env';\nimport { FILENAME } from '../../constants.js';\nimport { is_firefox } from './dom/operations.js';\nimport { ERROR_VALUE, BOUNDARY_EFFECT, EFFECT_RAN } from './constants.js';\nimport { define_property, get_descriptor } from '../shared/utils.js';\nimport { active_effect, active_reaction } from './runtime.js';\n\nconst adjustments = new WeakMap();\n\n/**\n * @param {unknown} error\n */\nexport function handle_error(error) {\n\tvar effect = active_effect;\n\n\t// for unowned deriveds, don't throw until we read the value\n\tif (effect === null) {\n\t\t/** @type {Derived} */ (active_reaction).f |= ERROR_VALUE;\n\t\treturn error;\n\t}\n\n\tif (DEV && error instanceof Error && !adjustments.has(error)) {\n\t\tadjustments.set(error, get_adjustments(error, effect));\n\t}\n\n\tif ((effect.f & EFFECT_RAN) === 0) {\n\t\t// if the error occurred while creating this subtree, we let it\n\t\t// bubble up until it hits a boundary that can handle it\n\t\tif ((effect.f & BOUNDARY_EFFECT) === 0) {\n\t\t\tif (!effect.parent && error instanceof Error) {\n\t\t\t\tapply_adjustments(error);\n\t\t\t}\n\n\t\t\tthrow error;\n\t\t}\n\n\t\t/** @type {Boundary} */ (effect.b).error(error);\n\t} else {\n\t\t// otherwise we bubble up the effect tree ourselves\n\t\tinvoke_error_boundary(error, effect);\n\t}\n}\n\n/**\n * @param {unknown} error\n * @param {Effect | null} effect\n */\nexport function invoke_error_boundary(error, effect) {\n\twhile (effect !== null) {\n\t\tif ((effect.f & BOUNDARY_EFFECT) !== 0) {\n\t\t\ttry {\n\t\t\t\t/** @type {Boundary} */ (effect.b).error(error);\n\t\t\t\treturn;\n\t\t\t} catch (e) {\n\t\t\t\terror = e;\n\t\t\t}\n\t\t}\n\n\t\teffect = effect.parent;\n\t}\n\n\tif (error instanceof Error) {\n\t\tapply_adjustments(error);\n\t}\n\n\tthrow error;\n}\n\n/**\n * Add useful information to the error message/stack in development\n * @param {Error} error\n * @param {Effect} effect\n */\nfunction get_adjustments(error, effect) {\n\tconst message_descriptor = get_descriptor(error, 'message');\n\n\t// if the message was already changed and it's not configurable we can't change it\n\t// or it will throw a different error swallowing the original error\n\tif (message_descriptor && !message_descriptor.configurable) return;\n\n\tvar indent = is_firefox ? '  ' : '\\t';\n\tvar component_stack = `\\n${indent}in ${effect.fn?.name || '<unknown>'}`;\n\tvar context = effect.ctx;\n\n\twhile (context !== null) {\n\t\tcomponent_stack += `\\n${indent}in ${context.function?.[FILENAME].split('/').pop()}`;\n\t\tcontext = context.p;\n\t}\n\n\treturn {\n\t\tmessage: error.message + `\\n${component_stack}\\n`,\n\t\tstack: error.stack\n\t\t\t?.split('\\n')\n\t\t\t.filter((line) => !line.includes('svelte/src/internal'))\n\t\t\t.join('\\n')\n\t};\n}\n\n/**\n * @param {Error} error\n */\nfunction apply_adjustments(error) {\n\tconst adjusted = adjustments.get(error);\n\n\tif (adjusted) {\n\t\tdefine_property(error, 'message', {\n\t\t\tvalue: adjusted.message\n\t\t});\n\n\t\tdefine_property(error, 'stack', {\n\t\t\tvalue: adjusted.stack\n\t\t});\n\t}\n}\n","import { run_all } from '../../shared/utils.js';\n\n// Fallback for when requestIdleCallback is not available\nconst request_idle_callback =\n\ttypeof requestIdleCallback === 'undefined'\n\t\t? (/** @type {() => void} */ cb) => setTimeout(cb, 1)\n\t\t: requestIdleCallback;\n\n/** @type {Array<() => void>} */\nlet micro_tasks = [];\n\n/** @type {Array<() => void>} */\nlet idle_tasks = [];\n\nfunction run_micro_tasks() {\n\tvar tasks = micro_tasks;\n\tmicro_tasks = [];\n\trun_all(tasks);\n}\n\nfunction run_idle_tasks() {\n\tvar tasks = idle_tasks;\n\tidle_tasks = [];\n\trun_all(tasks);\n}\n\n/**\n * @param {() => void} fn\n */\nexport function queue_micro_task(fn) {\n\tif (micro_tasks.length === 0) {\n\t\tqueueMicrotask(run_micro_tasks);\n\t}\n\n\tmicro_tasks.push(fn);\n}\n\n/**\n * @param {() => void} fn\n */\nexport function queue_idle_task(fn) {\n\tif (idle_tasks.length === 0) {\n\t\trequest_idle_callback(run_idle_tasks);\n\t}\n\n\tidle_tasks.push(fn);\n}\n\n/**\n * Synchronously run any queued tasks.\n */\nexport function flush_tasks() {\n\tif (micro_tasks.length > 0) {\n\t\trun_micro_tasks();\n\t}\n\n\tif (idle_tasks.length > 0) {\n\t\trun_idle_tasks();\n\t}\n}\n","/** @import { Effect, Source, TemplateNode, } from '#client' */\nimport {\n\tBOUNDARY_EFFECT,\n\tEFFECT_PRESERVED,\n\tEFFECT_RAN,\n\tEFFECT_TRANSPARENT\n} from '#client/constants';\nimport { component_context, set_component_context } from '../../context.js';\nimport { handle_error, invoke_error_boundary } from '../../error-handling.js';\nimport { block, branch, destroy_effect, pause_effect } from '../../reactivity/effects.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tget,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../runtime.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tnext,\n\tremove_nodes,\n\tset_hydrate_node\n} from '../hydration.js';\nimport { get_next_sibling } from '../operations.js';\nimport { queue_micro_task } from '../task.js';\nimport * as e from '../../errors.js';\nimport * as w from '../../warnings.js';\nimport { DEV } from 'esm-env';\nimport { Batch, effect_pending_updates } from '../../reactivity/batch.js';\nimport { internal_set, source } from '../../reactivity/sources.js';\nimport { tag } from '../../dev/tracing.js';\nimport { createSubscriber } from '../../../../reactivity/create-subscriber.js';\n\n/**\n * @typedef {{\n * \t onerror?: (error: unknown, reset: () => void) => void;\n *   failed?: (anchor: Node, error: () => unknown, reset: () => () => void) => void;\n *   pending?: (anchor: Node) => void;\n * }} BoundaryProps\n */\n\nvar flags = EFFECT_TRANSPARENT | EFFECT_PRESERVED | BOUNDARY_EFFECT;\n\n/**\n * @param {TemplateNode} node\n * @param {BoundaryProps} props\n * @param {((anchor: Node) => void)} children\n * @returns {void}\n */\nexport function boundary(node, props, children) {\n\tnew Boundary(node, props, children);\n}\n\nexport class Boundary {\n\tpending = false;\n\n\t/** @type {Boundary | null} */\n\tparent;\n\n\t/** @type {TemplateNode} */\n\t#anchor;\n\n\t/** @type {TemplateNode} */\n\t#hydrate_open;\n\n\t/** @type {BoundaryProps} */\n\t#props;\n\n\t/** @type {((anchor: Node) => void)} */\n\t#children;\n\n\t/** @type {Effect} */\n\t#effect;\n\n\t/** @type {Effect | null} */\n\t#main_effect = null;\n\n\t/** @type {Effect | null} */\n\t#pending_effect = null;\n\n\t/** @type {Effect | null} */\n\t#failed_effect = null;\n\n\t/** @type {DocumentFragment | null} */\n\t#offscreen_fragment = null;\n\n\t#pending_count = 0;\n\t#is_creating_fallback = false;\n\n\t/**\n\t * A source containing the number of pending async deriveds/expressions.\n\t * Only created if `$effect.pending()` is used inside the boundary,\n\t * otherwise updating the source results in needless `Batch.ensure()`\n\t * calls followed by no-op flushes\n\t * @type {Source<number> | null}\n\t */\n\t#effect_pending = null;\n\n\t#effect_pending_update = () => {\n\t\tif (this.#effect_pending) {\n\t\t\tinternal_set(this.#effect_pending, this.#pending_count);\n\t\t}\n\t};\n\n\t#effect_pending_subscriber = createSubscriber(() => {\n\t\tthis.#effect_pending = source(this.#pending_count);\n\n\t\tif (DEV) {\n\t\t\ttag(this.#effect_pending, '$effect.pending()');\n\t\t}\n\n\t\treturn () => {\n\t\t\tthis.#effect_pending = null;\n\t\t};\n\t});\n\n\t/**\n\t * @param {TemplateNode} node\n\t * @param {BoundaryProps} props\n\t * @param {((anchor: Node) => void)} children\n\t */\n\tconstructor(node, props, children) {\n\t\tthis.#anchor = node;\n\t\tthis.#props = props;\n\t\tthis.#children = children;\n\n\t\tthis.#hydrate_open = hydrate_node;\n\n\t\tthis.parent = /** @type {Effect} */ (active_effect).b;\n\n\t\tthis.pending = !!this.#props.pending;\n\n\t\tthis.#effect = block(() => {\n\t\t\t/** @type {Effect} */ (active_effect).b = this;\n\n\t\t\tif (hydrating) {\n\t\t\t\thydrate_next();\n\t\t\t}\n\n\t\t\tconst pending = this.#props.pending;\n\n\t\t\tif (hydrating && pending) {\n\t\t\t\tthis.#pending_effect = branch(() => pending(this.#anchor));\n\n\t\t\t\t// future work: when we have some form of async SSR, we will\n\t\t\t\t// need to use hydration boundary comments to report whether\n\t\t\t\t// the pending or main block was rendered for a given\n\t\t\t\t// boundary, and hydrate accordingly\n\t\t\t\tBatch.enqueue(() => {\n\t\t\t\t\tthis.#main_effect = this.#run(() => {\n\t\t\t\t\t\tBatch.ensure();\n\t\t\t\t\t\treturn branch(() => this.#children(this.#anchor));\n\t\t\t\t\t});\n\n\t\t\t\t\tif (this.#pending_count > 0) {\n\t\t\t\t\t\tthis.#show_pending_snippet();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpause_effect(/** @type {Effect} */ (this.#pending_effect), () => {\n\t\t\t\t\t\t\tthis.#pending_effect = null;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tthis.pending = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\ttry {\n\t\t\t\t\tthis.#main_effect = branch(() => children(this.#anchor));\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.error(error);\n\t\t\t\t}\n\n\t\t\t\tif (this.#pending_count > 0) {\n\t\t\t\t\tthis.#show_pending_snippet();\n\t\t\t\t} else {\n\t\t\t\t\tthis.pending = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}, flags);\n\n\t\tif (hydrating) {\n\t\t\tthis.#anchor = hydrate_node;\n\t\t}\n\t}\n\n\thas_pending_snippet() {\n\t\treturn !!this.#props.pending;\n\t}\n\n\t/**\n\t * @param {() => Effect | null} fn\n\t */\n\t#run(fn) {\n\t\tvar previous_effect = active_effect;\n\t\tvar previous_reaction = active_reaction;\n\t\tvar previous_ctx = component_context;\n\n\t\tset_active_effect(this.#effect);\n\t\tset_active_reaction(this.#effect);\n\t\tset_component_context(this.#effect.ctx);\n\n\t\ttry {\n\t\t\treturn fn();\n\t\t} catch (e) {\n\t\t\thandle_error(e);\n\t\t\treturn null;\n\t\t} finally {\n\t\t\tset_active_effect(previous_effect);\n\t\t\tset_active_reaction(previous_reaction);\n\t\t\tset_component_context(previous_ctx);\n\t\t}\n\t}\n\n\t#show_pending_snippet() {\n\t\tconst pending = /** @type {(anchor: Node) => void} */ (this.#props.pending);\n\n\t\tif (this.#main_effect !== null) {\n\t\t\tthis.#offscreen_fragment = document.createDocumentFragment();\n\t\t\tmove_effect(this.#main_effect, this.#offscreen_fragment);\n\t\t}\n\n\t\tif (this.#pending_effect === null) {\n\t\t\tthis.#pending_effect = branch(() => pending(this.#anchor));\n\t\t}\n\t}\n\n\t/** @param {1 | -1} d */\n\t#update_pending_count(d) {\n\t\tthis.#pending_count += d;\n\n\t\tif (this.#pending_count === 0) {\n\t\t\tthis.pending = false;\n\n\t\t\tif (this.#pending_effect) {\n\t\t\t\tpause_effect(this.#pending_effect, () => {\n\t\t\t\t\tthis.#pending_effect = null;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (this.#offscreen_fragment) {\n\t\t\t\tthis.#anchor.before(this.#offscreen_fragment);\n\t\t\t\tthis.#offscreen_fragment = null;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** @param {1 | -1} d */\n\tupdate_pending_count(d) {\n\t\tif (this.has_pending_snippet()) {\n\t\t\tthis.#update_pending_count(d);\n\t\t} else if (this.parent) {\n\t\t\tthis.parent.#update_pending_count(d);\n\t\t}\n\n\t\teffect_pending_updates.add(this.#effect_pending_update);\n\t}\n\n\tget_effect_pending() {\n\t\tthis.#effect_pending_subscriber();\n\t\treturn get(/** @type {Source<number>} */ (this.#effect_pending));\n\t}\n\n\t/** @param {unknown} error */\n\terror(error) {\n\t\tvar onerror = this.#props.onerror;\n\t\tlet failed = this.#props.failed;\n\n\t\tif (this.#main_effect) {\n\t\t\tdestroy_effect(this.#main_effect);\n\t\t\tthis.#main_effect = null;\n\t\t}\n\n\t\tif (this.#pending_effect) {\n\t\t\tdestroy_effect(this.#pending_effect);\n\t\t\tthis.#pending_effect = null;\n\t\t}\n\n\t\tif (this.#failed_effect) {\n\t\t\tdestroy_effect(this.#failed_effect);\n\t\t\tthis.#failed_effect = null;\n\t\t}\n\n\t\tif (hydrating) {\n\t\t\tset_hydrate_node(this.#hydrate_open);\n\t\t\tnext();\n\t\t\tset_hydrate_node(remove_nodes());\n\t\t}\n\n\t\tvar did_reset = false;\n\t\tvar calling_on_error = false;\n\n\t\tconst reset = () => {\n\t\t\tif (did_reset) {\n\t\t\t\tw.svelte_boundary_reset_noop();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdid_reset = true;\n\n\t\t\tif (calling_on_error) {\n\t\t\t\te.svelte_boundary_reset_onerror();\n\t\t\t}\n\n\t\t\tthis.#pending_count = 0;\n\n\t\t\tif (this.#failed_effect !== null) {\n\t\t\t\tpause_effect(this.#failed_effect, () => {\n\t\t\t\t\tthis.#failed_effect = null;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.pending = true;\n\n\t\t\tthis.#main_effect = this.#run(() => {\n\t\t\t\tthis.#is_creating_fallback = false;\n\t\t\t\treturn branch(() => this.#children(this.#anchor));\n\t\t\t});\n\n\t\t\tif (this.#pending_count > 0) {\n\t\t\t\tthis.#show_pending_snippet();\n\t\t\t} else {\n\t\t\t\tthis.pending = false;\n\t\t\t}\n\t\t};\n\n\t\t// If we have nothing to capture the error, or if we hit an error while\n\t\t// rendering the fallback, re-throw for another boundary to handle\n\t\tif (this.#is_creating_fallback || (!onerror && !failed)) {\n\t\t\tthrow error;\n\t\t}\n\n\t\tvar previous_reaction = active_reaction;\n\n\t\ttry {\n\t\t\tset_active_reaction(null);\n\t\t\tcalling_on_error = true;\n\t\t\tonerror?.(error, reset);\n\t\t\tcalling_on_error = false;\n\t\t} catch (error) {\n\t\t\tinvoke_error_boundary(error, this.#effect && this.#effect.parent);\n\t\t} finally {\n\t\t\tset_active_reaction(previous_reaction);\n\t\t}\n\n\t\tif (failed) {\n\t\t\tqueue_micro_task(() => {\n\t\t\t\tthis.#failed_effect = this.#run(() => {\n\t\t\t\t\tthis.#is_creating_fallback = true;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn branch(() => {\n\t\t\t\t\t\t\tfailed(\n\t\t\t\t\t\t\t\tthis.#anchor,\n\t\t\t\t\t\t\t\t() => error,\n\t\t\t\t\t\t\t\t() => reset\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tinvoke_error_boundary(error, /** @type {Effect} */ (this.#effect.parent));\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tthis.#is_creating_fallback = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n *\n * @param {Effect} effect\n * @param {DocumentFragment} fragment\n */\nfunction move_effect(effect, fragment) {\n\tvar node = effect.nodes_start;\n\tvar end = effect.nodes_end;\n\n\twhile (node !== null) {\n\t\t/** @type {TemplateNode | null} */\n\t\tvar next = node === end ? null : /** @type {TemplateNode} */ (get_next_sibling(node));\n\n\t\tfragment.append(node);\n\t\tnode = next;\n\t}\n}\n\nexport function get_pending_boundary() {\n\tvar boundary = /** @type {Effect} */ (active_effect).b;\n\n\twhile (boundary !== null && !boundary.has_pending_snippet()) {\n\t\tboundary = boundary.parent;\n\t}\n\n\tif (boundary === null) {\n\t\te.await_outside_boundary();\n\t}\n\n\treturn boundary;\n}\n\nexport function pending() {\n\tif (active_effect === null) {\n\t\te.effect_pending_outside_reaction();\n\t}\n\n\tvar boundary = active_effect.b;\n\n\tif (boundary === null) {\n\t\treturn 0; // TODO eventually we will need this to be global\n\t}\n\n\treturn boundary.get_effect_pending();\n}\n","/** @import { Derived, Effect, Source } from '#client' */\n/** @import { Batch } from './batch.js'; */\nimport { DEV } from 'esm-env';\nimport {\n\tERROR_VALUE,\n\tCLEAN,\n\tDERIVED,\n\tDIRTY,\n\tEFFECT_PRESERVED,\n\tMAYBE_DIRTY,\n\tSTALE_REACTION,\n\tUNOWNED,\n\tASYNC\n} from '#client/constants';\nimport {\n\tactive_reaction,\n\tactive_effect,\n\tset_signal_status,\n\tskip_reaction,\n\tupdate_reaction,\n\tincrement_write_version,\n\tset_active_effect,\n\tpush_reaction_value,\n\tis_destroying_effect\n} from '../runtime.js';\nimport { equals, safe_equals } from './equality.js';\nimport * as e from '../errors.js';\nimport * as w from '../warnings.js';\nimport { async_effect, destroy_effect } from './effects.js';\nimport { inspect_effects, internal_set, set_inspect_effects, source } from './sources.js';\nimport { get_stack } from '../dev/tracing.js';\nimport { tracing_mode_flag } from '../../flags/index.js';\nimport { Boundary } from '../dom/blocks/boundary.js';\nimport { component_context } from '../context.js';\nimport { UNINITIALIZED } from '../../../constants.js';\nimport { batch_deriveds, current_batch } from './batch.js';\nimport { unset_context } from './async.js';\n\n/** @type {Effect | null} */\nexport let current_async_effect = null;\n\n/** @param {Effect | null} v */\nexport function set_from_async_derived(v) {\n\tcurrent_async_effect = v;\n}\n\nexport const recent_async_deriveds = new Set();\n\n/**\n * @template V\n * @param {() => V} fn\n * @returns {Derived<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function derived(fn) {\n\tvar flags = DERIVED | DIRTY;\n\tvar parent_derived =\n\t\tactive_reaction !== null && (active_reaction.f & DERIVED) !== 0\n\t\t\t? /** @type {Derived} */ (active_reaction)\n\t\t\t: null;\n\n\tif (active_effect === null || (parent_derived !== null && (parent_derived.f & UNOWNED) !== 0)) {\n\t\tflags |= UNOWNED;\n\t} else {\n\t\t// Since deriveds are evaluated lazily, any effects created inside them are\n\t\t// created too late to ensure that the parent effect is added to the tree\n\t\tactive_effect.f |= EFFECT_PRESERVED;\n\t}\n\n\t/** @type {Derived<V>} */\n\tconst signal = {\n\t\tctx: component_context,\n\t\tdeps: null,\n\t\teffects: null,\n\t\tequals,\n\t\tf: flags,\n\t\tfn,\n\t\treactions: null,\n\t\trv: 0,\n\t\tv: /** @type {V} */ (UNINITIALIZED),\n\t\twv: 0,\n\t\tparent: parent_derived ?? active_effect,\n\t\tac: null\n\t};\n\n\tif (DEV && tracing_mode_flag) {\n\t\tsignal.created = get_stack('CreatedAt');\n\t}\n\n\treturn signal;\n}\n\n/**\n * @template V\n * @param {() => V | Promise<V>} fn\n * @param {string} [location] If provided, print a warning if the value is not read immediately after update\n * @returns {Promise<Source<V>>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function async_derived(fn, location) {\n\tlet parent = /** @type {Effect | null} */ (active_effect);\n\n\tif (parent === null) {\n\t\te.async_derived_orphan();\n\t}\n\n\tvar boundary = /** @type {Boundary} */ (parent.b);\n\n\tvar promise = /** @type {Promise<V>} */ (/** @type {unknown} */ (undefined));\n\tvar signal = source(/** @type {V} */ (UNINITIALIZED));\n\n\t/** @type {Promise<V> | null} */\n\tvar prev = null;\n\n\t// only suspend in async deriveds created on initialisation\n\tvar should_suspend = !active_reaction;\n\n\tasync_effect(() => {\n\t\tif (DEV) current_async_effect = active_effect;\n\n\t\ttry {\n\t\t\tvar p = fn();\n\t\t} catch (error) {\n\t\t\tp = Promise.reject(error);\n\t\t}\n\n\t\tif (DEV) current_async_effect = null;\n\n\t\tvar r = () => p;\n\t\tpromise = prev?.then(r, r) ?? Promise.resolve(p);\n\n\t\tprev = promise;\n\n\t\tvar batch = /** @type {Batch} */ (current_batch);\n\t\tvar pending = boundary.pending;\n\n\t\tif (should_suspend) {\n\t\t\tboundary.update_pending_count(1);\n\t\t\tif (!pending) batch.increment();\n\t\t}\n\n\t\t/**\n\t\t * @param {any} value\n\t\t * @param {unknown} error\n\t\t */\n\t\tconst handler = (value, error = undefined) => {\n\t\t\tprev = null;\n\n\t\t\tcurrent_async_effect = null;\n\n\t\t\tif (!pending) batch.activate();\n\n\t\t\tif (error) {\n\t\t\t\tif (error !== STALE_REACTION) {\n\t\t\t\t\tsignal.f |= ERROR_VALUE;\n\n\t\t\t\t\t// @ts-expect-error the error is the wrong type, but we don't care\n\t\t\t\t\tinternal_set(signal, error);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ((signal.f & ERROR_VALUE) !== 0) {\n\t\t\t\t\tsignal.f ^= ERROR_VALUE;\n\t\t\t\t}\n\n\t\t\t\tinternal_set(signal, value);\n\n\t\t\t\tif (DEV && location !== undefined) {\n\t\t\t\t\trecent_async_deriveds.add(signal);\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tif (recent_async_deriveds.has(signal)) {\n\t\t\t\t\t\t\tw.await_waterfall(/** @type {string} */ (signal.label), location);\n\t\t\t\t\t\t\trecent_async_deriveds.delete(signal);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (should_suspend) {\n\t\t\t\tboundary.update_pending_count(-1);\n\t\t\t\tif (!pending) batch.decrement();\n\t\t\t}\n\n\t\t\tunset_context();\n\t\t};\n\n\t\tpromise.then(handler, (e) => handler(null, e || 'unknown'));\n\n\t\tif (batch) {\n\t\t\treturn () => {\n\t\t\t\tqueueMicrotask(() => batch.neuter());\n\t\t\t};\n\t\t}\n\t});\n\n\tif (DEV) {\n\t\t// add a flag that lets this be printed as a derived\n\t\t// when using `$inspect.trace()`\n\t\tsignal.f |= ASYNC;\n\t}\n\n\treturn new Promise((fulfil) => {\n\t\t/** @param {Promise<V>} p */\n\t\tfunction next(p) {\n\t\t\tfunction go() {\n\t\t\t\tif (p === promise) {\n\t\t\t\t\tfulfil(signal);\n\t\t\t\t} else {\n\t\t\t\t\t// if the effect re-runs before the initial promise\n\t\t\t\t\t// resolves, delay resolution until we have a value\n\t\t\t\t\tnext(promise);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tp.then(go, go);\n\t\t}\n\n\t\tnext(promise);\n\t});\n}\n\n/**\n * @template V\n * @param {() => V} fn\n * @returns {Derived<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function user_derived(fn) {\n\tconst d = derived(fn);\n\n\tpush_reaction_value(d);\n\n\treturn d;\n}\n\n/**\n * @template V\n * @param {() => V} fn\n * @returns {Derived<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function derived_safe_equal(fn) {\n\tconst signal = derived(fn);\n\tsignal.equals = safe_equals;\n\treturn signal;\n}\n\n/**\n * @param {Derived} derived\n * @returns {void}\n */\nexport function destroy_derived_effects(derived) {\n\tvar effects = derived.effects;\n\n\tif (effects !== null) {\n\t\tderived.effects = null;\n\n\t\tfor (var i = 0; i < effects.length; i += 1) {\n\t\t\tdestroy_effect(/** @type {Effect} */ (effects[i]));\n\t\t}\n\t}\n}\n\n/**\n * The currently updating deriveds, used to detect infinite recursion\n * in dev mode and provide a nicer error than 'too much recursion'\n * @type {Derived[]}\n */\nlet stack = [];\n\n/**\n * @param {Derived} derived\n * @returns {Effect | null}\n */\nfunction get_derived_parent_effect(derived) {\n\tvar parent = derived.parent;\n\twhile (parent !== null) {\n\t\tif ((parent.f & DERIVED) === 0) {\n\t\t\treturn /** @type {Effect} */ (parent);\n\t\t}\n\t\tparent = parent.parent;\n\t}\n\treturn null;\n}\n\n/**\n * @template T\n * @param {Derived} derived\n * @returns {T}\n */\nexport function execute_derived(derived) {\n\tvar value;\n\tvar prev_active_effect = active_effect;\n\n\tset_active_effect(get_derived_parent_effect(derived));\n\n\tif (DEV) {\n\t\tlet prev_inspect_effects = inspect_effects;\n\t\tset_inspect_effects(new Set());\n\t\ttry {\n\t\t\tif (stack.includes(derived)) {\n\t\t\t\te.derived_references_self();\n\t\t\t}\n\n\t\t\tstack.push(derived);\n\n\t\t\tdestroy_derived_effects(derived);\n\t\t\tvalue = update_reaction(derived);\n\t\t} finally {\n\t\t\tset_active_effect(prev_active_effect);\n\t\t\tset_inspect_effects(prev_inspect_effects);\n\t\t\tstack.pop();\n\t\t}\n\t} else {\n\t\ttry {\n\t\t\tdestroy_derived_effects(derived);\n\t\t\tvalue = update_reaction(derived);\n\t\t} finally {\n\t\t\tset_active_effect(prev_active_effect);\n\t\t}\n\t}\n\n\treturn value;\n}\n\n/**\n * @param {Derived} derived\n * @returns {void}\n */\nexport function update_derived(derived) {\n\tvar value = execute_derived(derived);\n\n\tif (!derived.equals(value)) {\n\t\tderived.v = value;\n\t\tderived.wv = increment_write_version();\n\t}\n\n\t// don't mark derived clean if we're reading it inside a\n\t// cleanup function, or it will cache a stale value\n\tif (is_destroying_effect) {\n\t\treturn;\n\t}\n\n\tif (batch_deriveds !== null) {\n\t\tbatch_deriveds.set(derived, derived.v);\n\t} else {\n\t\tvar status =\n\t\t\t(skip_reaction || (derived.f & UNOWNED) !== 0) && derived.deps !== null ? MAYBE_DIRTY : CLEAN;\n\n\t\tset_signal_status(derived, status);\n\t}\n}\n","/** @import { Effect, Value } from '#client' */\n\nimport { DESTROYED } from '#client/constants';\nimport { DEV } from 'esm-env';\nimport { component_context, is_runes, set_component_context } from '../context.js';\nimport { get_pending_boundary } from '../dom/blocks/boundary.js';\nimport { invoke_error_boundary } from '../error-handling.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../runtime.js';\nimport { current_batch } from './batch.js';\nimport {\n\tasync_derived,\n\tcurrent_async_effect,\n\tderived,\n\tderived_safe_equal,\n\tset_from_async_derived\n} from './deriveds.js';\n\n/**\n *\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {(values: Value[]) => any} fn\n */\nexport function flatten(sync, async, fn) {\n\tconst d = is_runes() ? derived : derived_safe_equal;\n\n\tif (async.length === 0) {\n\t\tfn(sync.map(d));\n\t\treturn;\n\t}\n\n\tvar batch = current_batch;\n\tvar parent = /** @type {Effect} */ (active_effect);\n\n\tvar restore = capture();\n\tvar boundary = get_pending_boundary();\n\n\tPromise.all(async.map((expression) => async_derived(expression)))\n\t\t.then((result) => {\n\t\t\tbatch?.activate();\n\n\t\t\trestore();\n\n\t\t\ttry {\n\t\t\t\tfn([...sync.map(d), ...result]);\n\t\t\t} catch (error) {\n\t\t\t\t// ignore errors in blocks that have already been destroyed\n\t\t\t\tif ((parent.f & DESTROYED) === 0) {\n\t\t\t\t\tinvoke_error_boundary(error, parent);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbatch?.deactivate();\n\t\t\tunset_context();\n\t\t})\n\t\t.catch((error) => {\n\t\t\tboundary.error(error);\n\t\t});\n}\n\n/**\n * Captures the current effect context so that we can restore it after\n * some asynchronous work has happened (so that e.g. `await a + b`\n * causes `b` to be registered as a dependency).\n */\nfunction capture() {\n\tvar previous_effect = active_effect;\n\tvar previous_reaction = active_reaction;\n\tvar previous_component_context = component_context;\n\n\treturn function restore() {\n\t\tset_active_effect(previous_effect);\n\t\tset_active_reaction(previous_reaction);\n\t\tset_component_context(previous_component_context);\n\n\t\tif (DEV) {\n\t\t\tset_from_async_derived(null);\n\t\t}\n\t};\n}\n\n/**\n * Wraps an `await` expression in such a way that the effect context that was\n * active before the expression evaluated can be reapplied afterwards —\n * `await a + b` becomes `(await $.save(a))() + b`\n * @template T\n * @param {Promise<T>} promise\n * @returns {Promise<() => T>}\n */\nexport async function save(promise) {\n\tvar restore = capture();\n\tvar value = await promise;\n\n\treturn () => {\n\t\trestore();\n\t\treturn value;\n\t};\n}\n\n/**\n * Reset `current_async_effect` after the `promise` resolves, so\n * that we can emit `await_reactivity_loss` warnings\n * @template T\n * @param {Promise<T>} promise\n * @returns {Promise<() => T>}\n */\nexport async function track_reactivity_loss(promise) {\n\tvar previous_async_effect = current_async_effect;\n\tvar value = await promise;\n\n\treturn () => {\n\t\tset_from_async_derived(previous_async_effect);\n\t\treturn value;\n\t};\n}\n\n/**\n * Used in `for await` loops in DEV, so\n * that we can emit `await_reactivity_loss` warnings\n * after each `async_iterator` result resolves and\n * after the `async_iterator` return resolves (if it runs)\n * @template T\n * @template TReturn\n * @param {Iterable<T> | AsyncIterable<T>} iterable\n * @returns {AsyncGenerator<T, TReturn | undefined>}\n */\nexport async function* for_await_track_reactivity_loss(iterable) {\n\t// This is based on the algorithms described in ECMA-262:\n\t// ForIn/OfBodyEvaluation\n\t// https://tc39.es/ecma262/multipage/ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset\n\t// AsyncIteratorClose\n\t// https://tc39.es/ecma262/multipage/abstract-operations.html#sec-asynciteratorclose\n\n\t/** @type {AsyncIterator<T, TReturn>} */\n\t// @ts-ignore\n\tconst iterator = iterable[Symbol.asyncIterator]?.() ?? iterable[Symbol.iterator]?.();\n\n\tif (iterator === undefined) {\n\t\tthrow new TypeError('value is not async iterable');\n\t}\n\n\t/** Whether the completion of the iterator was \"normal\", meaning it wasn't ended via `break` or a similar method */\n\tlet normal_completion = false;\n\ttry {\n\t\twhile (true) {\n\t\t\tconst { done, value } = (await track_reactivity_loss(iterator.next()))();\n\t\t\tif (done) {\n\t\t\t\tnormal_completion = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tyield value;\n\t\t}\n\t} finally {\n\t\t// If the iterator had a normal completion and `return` is defined on the iterator, call it and return the value\n\t\tif (normal_completion && iterator.return !== undefined) {\n\t\t\t// eslint-disable-next-line no-unsafe-finally\n\t\t\treturn /** @type {TReturn} */ ((await track_reactivity_loss(iterator.return()))().value);\n\t\t}\n\t}\n}\n\nexport function unset_context() {\n\tset_active_effect(null);\n\tset_active_reaction(null);\n\tset_component_context(null);\n\tif (DEV) set_from_async_derived(null);\n}\n","/** @import { Derived, Effect, Source } from '#client' */\nimport {\n\tBLOCK_EFFECT,\n\tBRANCH_EFFECT,\n\tCLEAN,\n\tDESTROYED,\n\tDIRTY,\n\tEFFECT,\n\tASYNC,\n\tINERT,\n\tRENDER_EFFECT,\n\tROOT_EFFECT,\n\tUSER_EFFECT,\n\tMAYBE_DIRTY\n} from '#client/constants';\nimport { async_mode_flag } from '../../flags/index.js';\nimport { deferred, define_property } from '../../shared/utils.js';\nimport { get_pending_boundary } from '../dom/blocks/boundary.js';\nimport {\n\tactive_effect,\n\tis_dirty,\n\tis_updating_effect,\n\tset_is_updating_effect,\n\tset_signal_status,\n\tupdate_effect\n} from '../runtime.js';\nimport * as e from '../errors.js';\nimport { flush_tasks } from '../dom/task.js';\nimport { DEV } from 'esm-env';\nimport { invoke_error_boundary } from '../error-handling.js';\nimport { old_values } from './sources.js';\nimport { unlink_effect } from './effects.js';\nimport { unset_context } from './async.js';\n\n/** @type {Set<Batch>} */\nconst batches = new Set();\n\n/** @type {Batch | null} */\nexport let current_batch = null;\n\n/**\n * This is needed to avoid overwriting inputs in non-async mode\n * TODO 6.0 remove this, as non-async mode will go away\n * @type {Batch | null}\n */\nexport let previous_batch = null;\n\n/**\n * When time travelling, we re-evaluate deriveds based on the temporary\n * values of their dependencies rather than their actual values, and cache\n * the results in this map rather than on the deriveds themselves\n * @type {Map<Derived, any> | null}\n */\nexport let batch_deriveds = null;\n\n/** @type {Set<() => void>} */\nexport let effect_pending_updates = new Set();\n\n/** @type {Array<() => void>} */\nlet tasks = [];\n\nfunction dequeue() {\n\tconst task = /** @type {() => void} */ (tasks.shift());\n\n\tif (tasks.length > 0) {\n\t\tqueueMicrotask(dequeue);\n\t}\n\n\ttask();\n}\n\n/** @type {Effect[]} */\nlet queued_root_effects = [];\n\n/** @type {Effect | null} */\nlet last_scheduled_effect = null;\n\nlet is_flushing = false;\n\nlet is_flushing_sync = false;\nexport class Batch {\n\t/**\n\t * The current values of any sources that are updated in this batch\n\t * They keys of this map are identical to `this.#previous`\n\t * @type {Map<Source, any>}\n\t */\n\tcurrent = new Map();\n\n\t/**\n\t * The values of any sources that are updated in this batch _before_ those updates took place.\n\t * They keys of this map are identical to `this.#current`\n\t * @type {Map<Source, any>}\n\t */\n\t#previous = new Map();\n\n\t/**\n\t * When the batch is committed (and the DOM is updated), we need to remove old branches\n\t * and append new ones by calling the functions added inside (if/each/key/etc) blocks\n\t * @type {Set<() => void>}\n\t */\n\t#callbacks = new Set();\n\n\t/**\n\t * The number of async effects that are currently in flight\n\t */\n\t#pending = 0;\n\n\t/**\n\t * A deferred that resolves when the batch is committed, used with `settled()`\n\t * TODO replace with Promise.withResolvers once supported widely enough\n\t * @type {{ promise: Promise<void>, resolve: (value?: any) => void, reject: (reason: unknown) => void } | null}\n\t */\n\t#deferred = null;\n\n\t/**\n\t * True if an async effect inside this batch resolved and\n\t * its parent branch was already deleted\n\t */\n\t#neutered = false;\n\n\t/**\n\t * Async effects (created inside `async_derived`) encountered during processing.\n\t * These run after the rest of the batch has updated, since they should\n\t * always have the latest values\n\t * @type {Effect[]}\n\t */\n\t#async_effects = [];\n\n\t/**\n\t * The same as `#async_effects`, but for effects inside a newly-created\n\t * `<svelte:boundary>` — these do not prevent the batch from committing\n\t * @type {Effect[]}\n\t */\n\t#boundary_async_effects = [];\n\n\t/**\n\t * Template effects and `$effect.pre` effects, which run when\n\t * a batch is committed\n\t * @type {Effect[]}\n\t */\n\t#render_effects = [];\n\n\t/**\n\t * The same as `#render_effects`, but for `$effect` (which runs after)\n\t * @type {Effect[]}\n\t */\n\t#effects = [];\n\n\t/**\n\t * Block effects, which may need to re-run on subsequent flushes\n\t * in order to update internal sources (e.g. each block items)\n\t * @type {Effect[]}\n\t */\n\t#block_effects = [];\n\n\t/**\n\t * Deferred effects (which run after async work has completed) that are DIRTY\n\t * @type {Effect[]}\n\t */\n\t#dirty_effects = [];\n\n\t/**\n\t * Deferred effects that are MAYBE_DIRTY\n\t * @type {Effect[]}\n\t */\n\t#maybe_dirty_effects = [];\n\n\t/**\n\t * A set of branches that still exist, but will be destroyed when this batch\n\t * is committed — we skip over these during `process`\n\t * @type {Set<Effect>}\n\t */\n\tskipped_effects = new Set();\n\n\t/**\n\t *\n\t * @param {Effect[]} root_effects\n\t */\n\tprocess(root_effects) {\n\t\tqueued_root_effects = [];\n\n\t\tprevious_batch = null;\n\n\t\t/** @type {Map<Source, { v: unknown, wv: number }> | null} */\n\t\tvar current_values = null;\n\n\t\t// if there are multiple batches, we are 'time travelling' —\n\t\t// we need to undo the changes belonging to any batch\n\t\t// other than the current one\n\t\tif (batches.size > 1) {\n\t\t\tcurrent_values = new Map();\n\t\t\tbatch_deriveds = new Map();\n\n\t\t\tfor (const [source, current] of this.current) {\n\t\t\t\tcurrent_values.set(source, { v: source.v, wv: source.wv });\n\t\t\t\tsource.v = current;\n\t\t\t}\n\n\t\t\tfor (const batch of batches) {\n\t\t\t\tif (batch === this) continue;\n\n\t\t\t\tfor (const [source, previous] of batch.#previous) {\n\t\t\t\t\tif (!current_values.has(source)) {\n\t\t\t\t\t\tcurrent_values.set(source, { v: source.v, wv: source.wv });\n\t\t\t\t\t\tsource.v = previous;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const root of root_effects) {\n\t\t\tthis.#traverse_effect_tree(root);\n\t\t}\n\n\t\t// if we didn't start any new async work, and no async work\n\t\t// is outstanding from a previous flush, commit\n\t\tif (this.#async_effects.length === 0 && this.#pending === 0) {\n\t\t\tthis.#commit();\n\n\t\t\tvar render_effects = this.#render_effects;\n\t\t\tvar effects = this.#effects;\n\n\t\t\tthis.#render_effects = [];\n\t\t\tthis.#effects = [];\n\t\t\tthis.#block_effects = [];\n\n\t\t\t// If sources are written to, then work needs to happen in a separate batch, else prior sources would be mixed with\n\t\t\t// newly updated sources, which could lead to infinite loops when effects run over and over again.\n\t\t\tprevious_batch = current_batch;\n\t\t\tcurrent_batch = null;\n\n\t\t\tflush_queued_effects(render_effects);\n\t\t\tflush_queued_effects(effects);\n\n\t\t\t// Reinstate the current batch if there was no new one created, as `process()` runs in a loop in `flush_effects()`.\n\t\t\t// That method expects `current_batch` to be set, and could run the loop again if effects result in new effects\n\t\t\t// being scheduled but without writes happening in which case no new batch is created.\n\t\t\tif (current_batch === null) {\n\t\t\t\tcurrent_batch = this;\n\t\t\t} else {\n\t\t\t\tbatches.delete(this);\n\t\t\t}\n\n\t\t\tthis.#deferred?.resolve();\n\t\t} else {\n\t\t\tthis.#defer_effects(this.#render_effects);\n\t\t\tthis.#defer_effects(this.#effects);\n\t\t\tthis.#defer_effects(this.#block_effects);\n\t\t}\n\n\t\tif (current_values) {\n\t\t\tfor (const [source, { v, wv }] of current_values) {\n\t\t\t\t// reset the source to the current value (unless\n\t\t\t\t// it got a newer value as a result of effects running)\n\t\t\t\tif (source.wv <= wv) {\n\t\t\t\t\tsource.v = v;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbatch_deriveds = null;\n\t\t}\n\n\t\tfor (const effect of this.#async_effects) {\n\t\t\tupdate_effect(effect);\n\t\t}\n\n\t\tfor (const effect of this.#boundary_async_effects) {\n\t\t\tupdate_effect(effect);\n\t\t}\n\n\t\tthis.#async_effects = [];\n\t\tthis.#boundary_async_effects = [];\n\t}\n\n\t/**\n\t * Traverse the effect tree, executing effects or stashing\n\t * them for later execution as appropriate\n\t * @param {Effect} root\n\t */\n\t#traverse_effect_tree(root) {\n\t\troot.f ^= CLEAN;\n\n\t\tvar effect = root.first;\n\n\t\twhile (effect !== null) {\n\t\t\tvar flags = effect.f;\n\t\t\tvar is_branch = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) !== 0;\n\t\t\tvar is_skippable_branch = is_branch && (flags & CLEAN) !== 0;\n\n\t\t\tvar skip = is_skippable_branch || (flags & INERT) !== 0 || this.skipped_effects.has(effect);\n\n\t\t\tif (!skip && effect.fn !== null) {\n\t\t\t\tif (is_branch) {\n\t\t\t\t\teffect.f ^= CLEAN;\n\t\t\t\t} else if ((flags & CLEAN) === 0) {\n\t\t\t\t\tif ((flags & EFFECT) !== 0) {\n\t\t\t\t\t\tthis.#effects.push(effect);\n\t\t\t\t\t} else if (async_mode_flag && (flags & RENDER_EFFECT) !== 0) {\n\t\t\t\t\t\tthis.#render_effects.push(effect);\n\t\t\t\t\t} else if ((flags & ASYNC) !== 0) {\n\t\t\t\t\t\tvar effects = effect.b?.pending ? this.#boundary_async_effects : this.#async_effects;\n\t\t\t\t\t\teffects.push(effect);\n\t\t\t\t\t} else if (is_dirty(effect)) {\n\t\t\t\t\t\tif ((effect.f & BLOCK_EFFECT) !== 0) this.#block_effects.push(effect);\n\t\t\t\t\t\tupdate_effect(effect);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar child = effect.first;\n\n\t\t\t\tif (child !== null) {\n\t\t\t\t\teffect = child;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar parent = effect.parent;\n\t\t\teffect = effect.next;\n\n\t\t\twhile (effect === null && parent !== null) {\n\t\t\t\teffect = parent.next;\n\t\t\t\tparent = parent.parent;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {Effect[]} effects\n\t */\n\t#defer_effects(effects) {\n\t\tfor (const e of effects) {\n\t\t\tconst target = (e.f & DIRTY) !== 0 ? this.#dirty_effects : this.#maybe_dirty_effects;\n\t\t\ttarget.push(e);\n\n\t\t\t// mark as clean so they get scheduled if they depend on pending async state\n\t\t\tset_signal_status(e, CLEAN);\n\t\t}\n\n\t\teffects.length = 0;\n\t}\n\n\t/**\n\t * Associate a change to a given source with the current\n\t * batch, noting its previous and current values\n\t * @param {Source} source\n\t * @param {any} value\n\t */\n\tcapture(source, value) {\n\t\tif (!this.#previous.has(source)) {\n\t\t\tthis.#previous.set(source, value);\n\t\t}\n\n\t\tthis.current.set(source, source.v);\n\t}\n\n\tactivate() {\n\t\tcurrent_batch = this;\n\t}\n\n\tdeactivate() {\n\t\tcurrent_batch = null;\n\t\tprevious_batch = null;\n\n\t\tfor (const update of effect_pending_updates) {\n\t\t\teffect_pending_updates.delete(update);\n\t\t\tupdate();\n\n\t\t\tif (current_batch !== null) {\n\t\t\t\t// only do one at a time\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tneuter() {\n\t\tthis.#neutered = true;\n\t}\n\n\tflush() {\n\t\tif (queued_root_effects.length > 0) {\n\t\t\tflush_effects();\n\t\t} else {\n\t\t\tthis.#commit();\n\t\t}\n\n\t\tif (current_batch !== this) {\n\t\t\t// this can happen if a `flushSync` occurred during `flush_effects()`,\n\t\t\t// which is permitted in legacy mode despite being a terrible idea\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.#pending === 0) {\n\t\t\tbatches.delete(this);\n\t\t}\n\n\t\tthis.deactivate();\n\t}\n\n\t/**\n\t * Append and remove branches to/from the DOM\n\t */\n\t#commit() {\n\t\tif (!this.#neutered) {\n\t\t\tfor (const fn of this.#callbacks) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t}\n\n\t\tthis.#callbacks.clear();\n\t}\n\n\tincrement() {\n\t\tthis.#pending += 1;\n\t}\n\n\tdecrement() {\n\t\tthis.#pending -= 1;\n\n\t\tif (this.#pending === 0) {\n\t\t\tfor (const e of this.#dirty_effects) {\n\t\t\t\tset_signal_status(e, DIRTY);\n\t\t\t\tschedule_effect(e);\n\t\t\t}\n\n\t\t\tfor (const e of this.#maybe_dirty_effects) {\n\t\t\t\tset_signal_status(e, MAYBE_DIRTY);\n\t\t\t\tschedule_effect(e);\n\t\t\t}\n\n\t\t\tthis.#render_effects = [];\n\t\t\tthis.#effects = [];\n\n\t\t\tthis.flush();\n\t\t} else {\n\t\t\tthis.deactivate();\n\t\t}\n\t}\n\n\t/** @param {() => void} fn */\n\tadd_callback(fn) {\n\t\tthis.#callbacks.add(fn);\n\t}\n\n\tsettled() {\n\t\treturn (this.#deferred ??= deferred()).promise;\n\t}\n\n\tstatic ensure() {\n\t\tif (current_batch === null) {\n\t\t\tconst batch = (current_batch = new Batch());\n\t\t\tbatches.add(current_batch);\n\n\t\t\tif (!is_flushing_sync) {\n\t\t\t\tBatch.enqueue(() => {\n\t\t\t\t\tif (current_batch !== batch) {\n\t\t\t\t\t\t// a flushSync happened in the meantime\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tbatch.flush();\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn current_batch;\n\t}\n\n\t/** @param {() => void} task */\n\tstatic enqueue(task) {\n\t\tif (tasks.length === 0) {\n\t\t\tqueueMicrotask(dequeue);\n\t\t}\n\n\t\ttasks.unshift(task);\n\t}\n}\n\n/**\n * Synchronously flush any pending updates.\n * Returns void if no callback is provided, otherwise returns the result of calling the callback.\n * @template [T=void]\n * @param {(() => T) | undefined} [fn]\n * @returns {T}\n */\nexport function flushSync(fn) {\n\tif (async_mode_flag && active_effect !== null) {\n\t\te.flush_sync_in_effect();\n\t}\n\n\tvar was_flushing_sync = is_flushing_sync;\n\tis_flushing_sync = true;\n\n\ttry {\n\t\tvar result;\n\n\t\tif (fn) {\n\t\t\tflush_effects();\n\t\t\tresult = fn();\n\t\t}\n\n\t\twhile (true) {\n\t\t\tflush_tasks();\n\n\t\t\tif (queued_root_effects.length === 0) {\n\t\t\t\tcurrent_batch?.flush();\n\n\t\t\t\t// we need to check again, in case we just updated an `$effect.pending()`\n\t\t\t\tif (queued_root_effects.length === 0) {\n\t\t\t\t\t// this would be reset in `flush_effects()` but since we are early returning here,\n\t\t\t\t\t// we need to reset it here as well in case the first time there's 0 queued root effects\n\t\t\t\t\tlast_scheduled_effect = null;\n\n\t\t\t\t\treturn /** @type {T} */ (result);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tflush_effects();\n\t\t}\n\t} finally {\n\t\tis_flushing_sync = was_flushing_sync;\n\t}\n}\n\nfunction flush_effects() {\n\tvar was_updating_effect = is_updating_effect;\n\tis_flushing = true;\n\n\ttry {\n\t\tvar flush_count = 0;\n\t\tset_is_updating_effect(true);\n\n\t\twhile (queued_root_effects.length > 0) {\n\t\t\tvar batch = Batch.ensure();\n\n\t\t\tif (flush_count++ > 1000) {\n\t\t\t\tif (DEV) {\n\t\t\t\t\tvar updates = new Map();\n\n\t\t\t\t\tfor (const source of batch.current.keys()) {\n\t\t\t\t\t\tfor (const [stack, update] of source.updated ?? []) {\n\t\t\t\t\t\t\tvar entry = updates.get(stack);\n\n\t\t\t\t\t\t\tif (!entry) {\n\t\t\t\t\t\t\t\tentry = { error: update.error, count: 0 };\n\t\t\t\t\t\t\t\tupdates.set(stack, entry);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tentry.count += update.count;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const update of updates.values()) {\n\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\tconsole.error(update.error);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tinfinite_loop_guard();\n\t\t\t}\n\n\t\t\tbatch.process(queued_root_effects);\n\t\t\told_values.clear();\n\t\t}\n\t} finally {\n\t\tis_flushing = false;\n\t\tset_is_updating_effect(was_updating_effect);\n\n\t\tlast_scheduled_effect = null;\n\t}\n}\n\nfunction infinite_loop_guard() {\n\ttry {\n\t\te.effect_update_depth_exceeded();\n\t} catch (error) {\n\t\tif (DEV) {\n\t\t\t// stack contains no useful information, replace it\n\t\t\tdefine_property(error, 'stack', { value: '' });\n\t\t}\n\n\t\t// Best effort: invoke the boundary nearest the most recent\n\t\t// effect and hope that it's relevant to the infinite loop\n\t\tinvoke_error_boundary(error, last_scheduled_effect);\n\t}\n}\n\n/**\n * @param {Array<Effect>} effects\n * @returns {void}\n */\nfunction flush_queued_effects(effects) {\n\tvar length = effects.length;\n\tif (length === 0) return;\n\n\tvar i = 0;\n\n\twhile (i < length) {\n\t\tvar effect = effects[i++];\n\n\t\tif ((effect.f & (DESTROYED | INERT)) === 0 && is_dirty(effect)) {\n\t\t\tvar n = current_batch ? current_batch.current.size : 0;\n\n\t\t\tupdate_effect(effect);\n\n\t\t\t// Effects with no dependencies or teardown do not get added to the effect tree.\n\t\t\t// Deferred effects (e.g. `$effect(...)`) _are_ added to the tree because we\n\t\t\t// don't know if we need to keep them until they are executed. Doing the check\n\t\t\t// here (rather than in `update_effect`) allows us to skip the work for\n\t\t\t// immediate effects.\n\t\t\tif (effect.deps === null && effect.first === null && effect.nodes_start === null) {\n\t\t\t\t// if there's no teardown or abort controller we completely unlink\n\t\t\t\t// the effect from the graph\n\t\t\t\tif (effect.teardown === null && effect.ac === null) {\n\t\t\t\t\t// remove this effect from the graph\n\t\t\t\t\tunlink_effect(effect);\n\t\t\t\t} else {\n\t\t\t\t\t// keep the effect in the graph, but free up some memory\n\t\t\t\t\teffect.fn = null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// if state is written in a user effect, abort and re-schedule, lest we run\n\t\t\t// effects that should be removed as a result of the state change\n\t\t\tif (\n\t\t\t\tcurrent_batch !== null &&\n\t\t\t\tcurrent_batch.current.size > n &&\n\t\t\t\t(effect.f & USER_EFFECT) !== 0\n\t\t\t) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\twhile (i < length) {\n\t\tschedule_effect(effects[i++]);\n\t}\n}\n\n/**\n * @param {Effect} signal\n * @returns {void}\n */\nexport function schedule_effect(signal) {\n\tvar effect = (last_scheduled_effect = signal);\n\n\twhile (effect.parent !== null) {\n\t\teffect = effect.parent;\n\t\tvar flags = effect.f;\n\n\t\t// if the effect is being scheduled because a parent (each/await/etc) block\n\t\t// updated an internal source, bail out or we'll cause a second flush\n\t\tif (is_flushing && effect === active_effect && (flags & BLOCK_EFFECT) !== 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ((flags & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) {\n\t\t\tif ((flags & CLEAN) === 0) return;\n\t\t\teffect.f ^= CLEAN;\n\t\t}\n\t}\n\n\tqueued_root_effects.push(effect);\n}\n\nexport function suspend() {\n\tvar boundary = get_pending_boundary();\n\tvar batch = /** @type {Batch} */ (current_batch);\n\tvar pending = boundary.pending;\n\n\tboundary.update_pending_count(1);\n\tif (!pending) batch.increment();\n\n\treturn function unsuspend() {\n\t\tboundary.update_pending_count(-1);\n\n\t\tif (!pending) {\n\t\t\tbatch.activate();\n\t\t\tbatch.decrement();\n\t\t}\n\n\t\tunset_context();\n\t};\n}\n\n/**\n * Forcibly remove all current batches, to prevent cross-talk between tests\n */\nexport function clear() {\n\tbatches.clear();\n}\n","/** @import { Derived, Effect, Source, Value } from '#client' */\nimport { DEV } from 'esm-env';\nimport {\n\tactive_reaction,\n\tactive_effect,\n\tuntracked_writes,\n\tget,\n\tset_untracked_writes,\n\tset_signal_status,\n\tuntrack,\n\tincrement_write_version,\n\tupdate_effect,\n\tcurrent_sources,\n\tis_dirty,\n\tuntracking,\n\tis_destroying_effect,\n\tpush_reaction_value\n} from '../runtime.js';\nimport { equals, safe_equals } from './equality.js';\nimport {\n\tCLEAN,\n\tDERIVED,\n\tDIRTY,\n\tBRANCH_EFFECT,\n\tINSPECT_EFFECT,\n\tUNOWNED,\n\tMAYBE_DIRTY,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tASYNC\n} from '#client/constants';\nimport * as e from '../errors.js';\nimport { legacy_mode_flag, tracing_mode_flag } from '../../flags/index.js';\nimport { get_stack, tag_proxy } from '../dev/tracing.js';\nimport { component_context, is_runes } from '../context.js';\nimport { Batch, schedule_effect } from './batch.js';\nimport { proxy } from '../proxy.js';\nimport { execute_derived } from './deriveds.js';\n\n/** @type {Set<any>} */\nexport let inspect_effects = new Set();\n\n/** @type {Map<Source, any>} */\nexport const old_values = new Map();\n\n/**\n * @param {Set<any>} v\n */\nexport function set_inspect_effects(v) {\n\tinspect_effects = v;\n}\n\nlet inspect_effects_deferred = false;\n\nexport function set_inspect_effects_deferred() {\n\tinspect_effects_deferred = true;\n}\n\n/**\n * @template V\n * @param {V} v\n * @param {Error | null} [stack]\n * @returns {Source<V>}\n */\n// TODO rename this to `state` throughout the codebase\nexport function source(v, stack) {\n\t/** @type {Value} */\n\tvar signal = {\n\t\tf: 0, // TODO ideally we could skip this altogether, but it causes type errors\n\t\tv,\n\t\treactions: null,\n\t\tequals,\n\t\trv: 0,\n\t\twv: 0\n\t};\n\n\tif (DEV && tracing_mode_flag) {\n\t\tsignal.created = stack ?? get_stack('CreatedAt');\n\t\tsignal.updated = null;\n\t\tsignal.set_during_effect = false;\n\t\tsignal.trace = null;\n\t}\n\n\treturn signal;\n}\n\n/**\n * @template V\n * @param {V} v\n * @param {Error | null} [stack]\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function state(v, stack) {\n\tconst s = source(v, stack);\n\n\tpush_reaction_value(s);\n\n\treturn s;\n}\n\n/**\n * @template V\n * @param {V} initial_value\n * @param {boolean} [immutable]\n * @returns {Source<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function mutable_source(initial_value, immutable = false, trackable = true) {\n\tconst s = source(initial_value);\n\tif (!immutable) {\n\t\ts.equals = safe_equals;\n\t}\n\n\t// bind the signal to the component context, in case we need to\n\t// track updates to trigger beforeUpdate/afterUpdate callbacks\n\tif (legacy_mode_flag && trackable && component_context !== null && component_context.l !== null) {\n\t\t(component_context.l.s ??= []).push(s);\n\t}\n\n\treturn s;\n}\n\n/**\n * @template V\n * @param {Value<V>} source\n * @param {V} value\n */\nexport function mutate(source, value) {\n\tset(\n\t\tsource,\n\t\tuntrack(() => get(source))\n\t);\n\treturn value;\n}\n\n/**\n * @template V\n * @param {Source<V>} source\n * @param {V} value\n * @param {boolean} [should_proxy]\n * @returns {V}\n */\nexport function set(source, value, should_proxy = false) {\n\tif (\n\t\tactive_reaction !== null &&\n\t\t// since we are untracking the function inside `$inspect.with` we need to add this check\n\t\t// to ensure we error if state is set inside an inspect effect\n\t\t(!untracking || (active_reaction.f & INSPECT_EFFECT) !== 0) &&\n\t\tis_runes() &&\n\t\t(active_reaction.f & (DERIVED | BLOCK_EFFECT | ASYNC | INSPECT_EFFECT)) !== 0 &&\n\t\t!current_sources?.includes(source)\n\t) {\n\t\te.state_unsafe_mutation();\n\t}\n\n\tlet new_value = should_proxy ? proxy(value) : value;\n\n\tif (DEV) {\n\t\ttag_proxy(new_value, /** @type {string} */ (source.label));\n\t}\n\n\treturn internal_set(source, new_value);\n}\n\n/**\n * @template V\n * @param {Source<V>} source\n * @param {V} value\n * @returns {V}\n */\nexport function internal_set(source, value) {\n\tif (!source.equals(value)) {\n\t\tvar old_value = source.v;\n\n\t\tif (is_destroying_effect) {\n\t\t\told_values.set(source, value);\n\t\t} else {\n\t\t\told_values.set(source, old_value);\n\t\t}\n\n\t\tsource.v = value;\n\n\t\tvar batch = Batch.ensure();\n\t\tbatch.capture(source, old_value);\n\n\t\tif (DEV) {\n\t\t\tif (tracing_mode_flag || active_effect !== null) {\n\t\t\t\tconst error = get_stack('UpdatedAt');\n\n\t\t\t\tif (error !== null) {\n\t\t\t\t\tsource.updated ??= new Map();\n\t\t\t\t\tlet entry = source.updated.get(error.stack);\n\n\t\t\t\t\tif (!entry) {\n\t\t\t\t\t\tentry = { error, count: 0 };\n\t\t\t\t\t\tsource.updated.set(error.stack, entry);\n\t\t\t\t\t}\n\n\t\t\t\t\tentry.count++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (active_effect !== null) {\n\t\t\t\tsource.set_during_effect = true;\n\t\t\t}\n\t\t}\n\n\t\tif ((source.f & DERIVED) !== 0) {\n\t\t\t// if we are assigning to a dirty derived we set it to clean/maybe dirty but we also eagerly execute it to track the dependencies\n\t\t\tif ((source.f & DIRTY) !== 0) {\n\t\t\t\texecute_derived(/** @type {Derived} */ (source));\n\t\t\t}\n\t\t\tset_signal_status(source, (source.f & UNOWNED) === 0 ? CLEAN : MAYBE_DIRTY);\n\t\t}\n\n\t\tsource.wv = increment_write_version();\n\n\t\tmark_reactions(source, DIRTY);\n\n\t\t// It's possible that the current reaction might not have up-to-date dependencies\n\t\t// whilst it's actively running. So in the case of ensuring it registers the reaction\n\t\t// properly for itself, we need to ensure the current effect actually gets\n\t\t// scheduled. i.e: `$effect(() => x++)`\n\t\tif (\n\t\t\tis_runes() &&\n\t\t\tactive_effect !== null &&\n\t\t\t(active_effect.f & CLEAN) !== 0 &&\n\t\t\t(active_effect.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0\n\t\t) {\n\t\t\tif (untracked_writes === null) {\n\t\t\t\tset_untracked_writes([source]);\n\t\t\t} else {\n\t\t\t\tuntracked_writes.push(source);\n\t\t\t}\n\t\t}\n\n\t\tif (DEV && inspect_effects.size > 0 && !inspect_effects_deferred) {\n\t\t\tflush_inspect_effects();\n\t\t}\n\t}\n\n\treturn value;\n}\n\nexport function flush_inspect_effects() {\n\tinspect_effects_deferred = false;\n\n\tconst inspects = Array.from(inspect_effects);\n\n\tfor (const effect of inspects) {\n\t\t// Mark clean inspect-effects as maybe dirty and then check their dirtiness\n\t\t// instead of just updating the effects - this way we avoid overfiring.\n\t\tif ((effect.f & CLEAN) !== 0) {\n\t\t\tset_signal_status(effect, MAYBE_DIRTY);\n\t\t}\n\n\t\tif (is_dirty(effect)) {\n\t\t\tupdate_effect(effect);\n\t\t}\n\t}\n\n\tinspect_effects.clear();\n}\n\n/**\n * @template {number | bigint} T\n * @param {Source<T>} source\n * @param {1 | -1} [d]\n * @returns {T}\n */\nexport function update(source, d = 1) {\n\tvar value = get(source);\n\tvar result = d === 1 ? value++ : value--;\n\n\tset(source, value);\n\n\t// @ts-expect-error\n\treturn result;\n}\n\n/**\n * @template {number | bigint} T\n * @param {Source<T>} source\n * @param {1 | -1} [d]\n * @returns {T}\n */\nexport function update_pre(source, d = 1) {\n\tvar value = get(source);\n\n\t// @ts-expect-error\n\treturn set(source, d === 1 ? ++value : --value);\n}\n\n/**\n * Silently (without using `get`) increment a source\n * @param {Source<number>} source\n */\nexport function increment(source) {\n\tset(source, source.v + 1);\n}\n\n/**\n * @param {Value} signal\n * @param {number} status should be DIRTY or MAYBE_DIRTY\n * @returns {void}\n */\nfunction mark_reactions(signal, status) {\n\tvar reactions = signal.reactions;\n\tif (reactions === null) return;\n\n\tvar runes = is_runes();\n\tvar length = reactions.length;\n\n\tfor (var i = 0; i < length; i++) {\n\t\tvar reaction = reactions[i];\n\t\tvar flags = reaction.f;\n\n\t\t// In legacy mode, skip the current effect to prevent infinite loops\n\t\tif (!runes && reaction === active_effect) continue;\n\n\t\t// Inspect effects need to run immediately, so that the stack trace makes sense\n\t\tif (DEV && (flags & INSPECT_EFFECT) !== 0) {\n\t\t\tinspect_effects.add(reaction);\n\t\t\tcontinue;\n\t\t}\n\n\t\tvar not_dirty = (flags & DIRTY) === 0;\n\n\t\t// don't set a DIRTY reaction to MAYBE_DIRTY\n\t\tif (not_dirty) {\n\t\t\tset_signal_status(reaction, status);\n\t\t}\n\n\t\tif ((flags & DERIVED) !== 0) {\n\t\t\tmark_reactions(/** @type {Derived} */ (reaction), MAYBE_DIRTY);\n\t\t} else if (not_dirty) {\n\t\t\tschedule_effect(/** @type {Effect} */ (reaction));\n\t\t}\n\t}\n}\n","/** @import { Source } from '#client' */\nimport { DEV } from 'esm-env';\nimport {\n\tget,\n\tactive_effect,\n\tupdate_version,\n\tactive_reaction,\n\tset_update_version,\n\tset_active_reaction\n} from './runtime.js';\nimport {\n\tarray_prototype,\n\tget_descriptor,\n\tget_prototype_of,\n\tis_array,\n\tobject_prototype\n} from '../shared/utils.js';\nimport {\n\tstate as source,\n\tset,\n\tincrement,\n\tflush_inspect_effects,\n\tset_inspect_effects_deferred\n} from './reactivity/sources.js';\nimport { PROXY_PATH_SYMBOL, STATE_SYMBOL } from '#client/constants';\nimport { UNINITIALIZED } from '../../constants.js';\nimport * as e from './errors.js';\nimport { get_stack, tag } from './dev/tracing.js';\nimport { tracing_mode_flag } from '../flags/index.js';\n\n// TODO move all regexes into shared module?\nconst regex_is_valid_identifier = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;\n\n/**\n * @template T\n * @param {T} value\n * @returns {T}\n */\nexport function proxy(value) {\n\t// if non-proxyable, or is already a proxy, return `value`\n\tif (typeof value !== 'object' || value === null || STATE_SYMBOL in value) {\n\t\treturn value;\n\t}\n\n\tconst prototype = get_prototype_of(value);\n\n\tif (prototype !== object_prototype && prototype !== array_prototype) {\n\t\treturn value;\n\t}\n\n\t/** @type {Map<any, Source<any>>} */\n\tvar sources = new Map();\n\tvar is_proxied_array = is_array(value);\n\tvar version = source(0);\n\n\tvar stack = DEV && tracing_mode_flag ? get_stack('CreatedAt') : null;\n\tvar parent_version = update_version;\n\n\t/**\n\t * Executes the proxy in the context of the reaction it was originally created in, if any\n\t * @template T\n\t * @param {() => T} fn\n\t */\n\tvar with_parent = (fn) => {\n\t\tif (update_version === parent_version) {\n\t\t\treturn fn();\n\t\t}\n\n\t\t// child source is being created after the initial proxy —\n\t\t// prevent it from being associated with the current reaction\n\t\tvar reaction = active_reaction;\n\t\tvar version = update_version;\n\n\t\tset_active_reaction(null);\n\t\tset_update_version(parent_version);\n\n\t\tvar result = fn();\n\n\t\tset_active_reaction(reaction);\n\t\tset_update_version(version);\n\n\t\treturn result;\n\t};\n\n\tif (is_proxied_array) {\n\t\t// We need to create the length source eagerly to ensure that\n\t\t// mutations to the array are properly synced with our proxy\n\t\tsources.set('length', source(/** @type {any[]} */ (value).length, stack));\n\t\tif (DEV) {\n\t\t\tvalue = /** @type {any} */ (inspectable_array(/** @type {any[]} */ (value)));\n\t\t}\n\t}\n\n\t/** Used in dev for $inspect.trace() */\n\tvar path = '';\n\n\t/** @param {string} new_path */\n\tfunction update_path(new_path) {\n\t\tpath = new_path;\n\n\t\ttag(version, `${path} version`);\n\n\t\t// rename all child sources and child proxies\n\t\tfor (const [prop, source] of sources) {\n\t\t\ttag(source, get_label(path, prop));\n\t\t}\n\t}\n\n\treturn new Proxy(/** @type {any} */ (value), {\n\t\tdefineProperty(_, prop, descriptor) {\n\t\t\tif (\n\t\t\t\t!('value' in descriptor) ||\n\t\t\t\tdescriptor.configurable === false ||\n\t\t\t\tdescriptor.enumerable === false ||\n\t\t\t\tdescriptor.writable === false\n\t\t\t) {\n\t\t\t\t// we disallow non-basic descriptors, because unless they are applied to the\n\t\t\t\t// target object — which we avoid, so that state can be forked — we will run\n\t\t\t\t// afoul of the various invariants\n\t\t\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/getOwnPropertyDescriptor#invariants\n\t\t\t\te.state_descriptors_fixed();\n\t\t\t}\n\t\t\tvar s = sources.get(prop);\n\t\t\tif (s === undefined) {\n\t\t\t\ts = with_parent(() => {\n\t\t\t\t\tvar s = source(descriptor.value, stack);\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t\tif (DEV && typeof prop === 'string') {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\t\t\t\t\treturn s;\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tset(s, descriptor.value, true);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\tdeleteProperty(target, prop) {\n\t\t\tvar s = sources.get(prop);\n\n\t\t\tif (s === undefined) {\n\t\t\t\tif (prop in target) {\n\t\t\t\t\tconst s = with_parent(() => source(UNINITIALIZED, stack));\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t\tincrement(version);\n\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tset(s, UNINITIALIZED);\n\t\t\t\tincrement(version);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\tget(target, prop, receiver) {\n\t\t\tif (prop === STATE_SYMBOL) {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tif (DEV && prop === PROXY_PATH_SYMBOL) {\n\t\t\t\treturn update_path;\n\t\t\t}\n\n\t\t\tvar s = sources.get(prop);\n\t\t\tvar exists = prop in target;\n\n\t\t\t// create a source, but only if it's an own property and not a prototype property\n\t\t\tif (s === undefined && (!exists || get_descriptor(target, prop)?.writable)) {\n\t\t\t\ts = with_parent(() => {\n\t\t\t\t\tvar p = proxy(exists ? target[prop] : UNINITIALIZED);\n\t\t\t\t\tvar s = source(p, stack);\n\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\n\t\t\t\t\treturn s;\n\t\t\t\t});\n\n\t\t\t\tsources.set(prop, s);\n\t\t\t}\n\n\t\t\tif (s !== undefined) {\n\t\t\t\tvar v = get(s);\n\t\t\t\treturn v === UNINITIALIZED ? undefined : v;\n\t\t\t}\n\n\t\t\treturn Reflect.get(target, prop, receiver);\n\t\t},\n\n\t\tgetOwnPropertyDescriptor(target, prop) {\n\t\t\tvar descriptor = Reflect.getOwnPropertyDescriptor(target, prop);\n\n\t\t\tif (descriptor && 'value' in descriptor) {\n\t\t\t\tvar s = sources.get(prop);\n\t\t\t\tif (s) descriptor.value = get(s);\n\t\t\t} else if (descriptor === undefined) {\n\t\t\t\tvar source = sources.get(prop);\n\t\t\t\tvar value = source?.v;\n\n\t\t\t\tif (source !== undefined && value !== UNINITIALIZED) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\twritable: true\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn descriptor;\n\t\t},\n\n\t\thas(target, prop) {\n\t\t\tif (prop === STATE_SYMBOL) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tvar s = sources.get(prop);\n\t\t\tvar has = (s !== undefined && s.v !== UNINITIALIZED) || Reflect.has(target, prop);\n\n\t\t\tif (\n\t\t\t\ts !== undefined ||\n\t\t\t\t(active_effect !== null && (!has || get_descriptor(target, prop)?.writable))\n\t\t\t) {\n\t\t\t\tif (s === undefined) {\n\t\t\t\t\ts = with_parent(() => {\n\t\t\t\t\t\tvar p = has ? proxy(target[prop]) : UNINITIALIZED;\n\t\t\t\t\t\tvar s = source(p, stack);\n\n\t\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn s;\n\t\t\t\t\t});\n\n\t\t\t\t\tsources.set(prop, s);\n\t\t\t\t}\n\n\t\t\t\tvar value = get(s);\n\t\t\t\tif (value === UNINITIALIZED) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn has;\n\t\t},\n\n\t\tset(target, prop, value, receiver) {\n\t\t\tvar s = sources.get(prop);\n\t\t\tvar has = prop in target;\n\n\t\t\t// variable.length = value -> clear all signals with index >= value\n\t\t\tif (is_proxied_array && prop === 'length') {\n\t\t\t\tfor (var i = value; i < /** @type {Source<number>} */ (s).v; i += 1) {\n\t\t\t\t\tvar other_s = sources.get(i + '');\n\t\t\t\t\tif (other_s !== undefined) {\n\t\t\t\t\t\tset(other_s, UNINITIALIZED);\n\t\t\t\t\t} else if (i in target) {\n\t\t\t\t\t\t// If the item exists in the original, we need to create a uninitialized source,\n\t\t\t\t\t\t// else a later read of the property would result in a source being created with\n\t\t\t\t\t\t// the value of the original item at that index.\n\t\t\t\t\t\tother_s = with_parent(() => source(UNINITIALIZED, stack));\n\t\t\t\t\t\tsources.set(i + '', other_s);\n\n\t\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\t\ttag(other_s, get_label(path, i));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If we haven't yet created a source for this property, we need to ensure\n\t\t\t// we do so otherwise if we read it later, then the write won't be tracked and\n\t\t\t// the heuristics of effects will be different vs if we had read the proxied\n\t\t\t// object property before writing to that property.\n\t\t\tif (s === undefined) {\n\t\t\t\tif (!has || get_descriptor(target, prop)?.writable) {\n\t\t\t\t\ts = with_parent(() => source(undefined, stack));\n\t\t\t\t\tset(s, proxy(value));\n\n\t\t\t\t\tsources.set(prop, s);\n\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, get_label(path, prop));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\thas = s.v !== UNINITIALIZED;\n\n\t\t\t\tvar p = with_parent(() => proxy(value));\n\t\t\t\tset(s, p);\n\t\t\t}\n\n\t\t\tvar descriptor = Reflect.getOwnPropertyDescriptor(target, prop);\n\n\t\t\t// Set the new value before updating any signals so that any listeners get the new value\n\t\t\tif (descriptor?.set) {\n\t\t\t\tdescriptor.set.call(receiver, value);\n\t\t\t}\n\n\t\t\tif (!has) {\n\t\t\t\t// If we have mutated an array directly, we might need to\n\t\t\t\t// signal that length has also changed. Do it before updating metadata\n\t\t\t\t// to ensure that iterating over the array as a result of a metadata update\n\t\t\t\t// will not cause the length to be out of sync.\n\t\t\t\tif (is_proxied_array && typeof prop === 'string') {\n\t\t\t\t\tvar ls = /** @type {Source<number>} */ (sources.get('length'));\n\t\t\t\t\tvar n = Number(prop);\n\n\t\t\t\t\tif (Number.isInteger(n) && n >= ls.v) {\n\t\t\t\t\t\tset(ls, n + 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tincrement(version);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\townKeys(target) {\n\t\t\tget(version);\n\n\t\t\tvar own_keys = Reflect.ownKeys(target).filter((key) => {\n\t\t\t\tvar source = sources.get(key);\n\t\t\t\treturn source === undefined || source.v !== UNINITIALIZED;\n\t\t\t});\n\n\t\t\tfor (var [key, source] of sources) {\n\t\t\t\tif (source.v !== UNINITIALIZED && !(key in target)) {\n\t\t\t\t\town_keys.push(key);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn own_keys;\n\t\t},\n\n\t\tsetPrototypeOf() {\n\t\t\te.state_prototype_fixed();\n\t\t}\n\t});\n}\n\n/**\n * @param {string} path\n * @param {string | symbol} prop\n */\nfunction get_label(path, prop) {\n\tif (typeof prop === 'symbol') return `${path}[Symbol(${prop.description ?? ''})]`;\n\tif (regex_is_valid_identifier.test(prop)) return `${path}.${prop}`;\n\treturn /^\\d+$/.test(prop) ? `${path}[${prop}]` : `${path}['${prop}']`;\n}\n\n/**\n * @param {any} value\n */\nexport function get_proxied_value(value) {\n\ttry {\n\t\tif (value !== null && typeof value === 'object' && STATE_SYMBOL in value) {\n\t\t\treturn value[STATE_SYMBOL];\n\t\t}\n\t} catch {\n\t\t// the above if check can throw an error if the value in question\n\t\t// is the contentWindow of an iframe on another domain, in which\n\t\t// case we want to just return the value (because it's definitely\n\t\t// not a proxied value) so we don't break any JavaScript interacting\n\t\t// with that iframe (such as various payment companies client side\n\t\t// JavaScript libraries interacting with their iframes on the same\n\t\t// domain)\n\t}\n\n\treturn value;\n}\n\n/**\n * @param {any} a\n * @param {any} b\n */\nexport function is(a, b) {\n\treturn Object.is(get_proxied_value(a), get_proxied_value(b));\n}\n\nconst ARRAY_MUTATING_METHODS = new Set([\n\t'copyWithin',\n\t'fill',\n\t'pop',\n\t'push',\n\t'reverse',\n\t'shift',\n\t'sort',\n\t'splice',\n\t'unshift'\n]);\n\n/**\n * Wrap array mutating methods so $inspect is triggered only once and\n * to prevent logging an array in intermediate state (e.g. with an empty slot)\n * @param {any[]} array\n */\nfunction inspectable_array(array) {\n\treturn new Proxy(array, {\n\t\tget(target, prop, receiver) {\n\t\t\tvar value = Reflect.get(target, prop, receiver);\n\t\t\tif (!ARRAY_MUTATING_METHODS.has(/** @type {string} */ (prop))) {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @this {any[]}\n\t\t\t * @param {any[]} args\n\t\t\t */\n\t\t\treturn function (...args) {\n\t\t\t\tset_inspect_effects_deferred();\n\t\t\t\tvar result = value.apply(this, args);\n\t\t\t\tflush_inspect_effects();\n\t\t\t\treturn result;\n\t\t\t};\n\t\t}\n\t});\n}\n","/** @import { Effect, TemplateNode } from '#client' */\nimport { hydrate_node, hydrating, set_hydrate_node } from './hydration.js';\nimport { DEV } from 'esm-env';\nimport { init_array_prototype_warnings } from '../dev/equality.js';\nimport { get_descriptor, is_extensible } from '../../shared/utils.js';\nimport { active_effect } from '../runtime.js';\nimport { async_mode_flag } from '../../flags/index.js';\nimport { TEXT_NODE, EFFECT_RAN } from '#client/constants';\n\n// export these for reference in the compiled code, making global name deduplication unnecessary\n/** @type {Window} */\nexport var $window;\n\n/** @type {Document} */\nexport var $document;\n\n/** @type {boolean} */\nexport var is_firefox;\n\n/** @type {() => Node | null} */\nvar first_child_getter;\n/** @type {() => Node | null} */\nvar next_sibling_getter;\n\n/**\n * Initialize these lazily to avoid issues when using the runtime in a server context\n * where these globals are not available while avoiding a separate server entry point\n */\nexport function init_operations() {\n\tif ($window !== undefined) {\n\t\treturn;\n\t}\n\n\t$window = window;\n\t$document = document;\n\tis_firefox = /Firefox/.test(navigator.userAgent);\n\n\tvar element_prototype = Element.prototype;\n\tvar node_prototype = Node.prototype;\n\tvar text_prototype = Text.prototype;\n\n\t// @ts-ignore\n\tfirst_child_getter = get_descriptor(node_prototype, 'firstChild').get;\n\t// @ts-ignore\n\tnext_sibling_getter = get_descriptor(node_prototype, 'nextSibling').get;\n\n\tif (is_extensible(element_prototype)) {\n\t\t// the following assignments improve perf of lookups on DOM nodes\n\t\t// @ts-expect-error\n\t\telement_prototype.__click = undefined;\n\t\t// @ts-expect-error\n\t\telement_prototype.__className = undefined;\n\t\t// @ts-expect-error\n\t\telement_prototype.__attributes = null;\n\t\t// @ts-expect-error\n\t\telement_prototype.__style = undefined;\n\t\t// @ts-expect-error\n\t\telement_prototype.__e = undefined;\n\t}\n\n\tif (is_extensible(text_prototype)) {\n\t\t// @ts-expect-error\n\t\ttext_prototype.__t = undefined;\n\t}\n\n\tif (DEV) {\n\t\t// @ts-expect-error\n\t\telement_prototype.__svelte_meta = null;\n\n\t\tinit_array_prototype_warnings();\n\t}\n}\n\n/**\n * @param {string} value\n * @returns {Text}\n */\nexport function create_text(value = '') {\n\treturn document.createTextNode(value);\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n * @returns {Node | null}\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function get_first_child(node) {\n\treturn first_child_getter.call(node);\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n * @returns {Node | null}\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function get_next_sibling(node) {\n\treturn next_sibling_getter.call(node);\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @template {Node} N\n * @param {N} node\n * @param {boolean} is_text\n * @returns {Node | null}\n */\nexport function child(node, is_text) {\n\tif (!hydrating) {\n\t\treturn get_first_child(node);\n\t}\n\n\tvar child = /** @type {TemplateNode} */ (get_first_child(hydrate_node));\n\n\t// Child can be null if we have an element with a single child, like `<p>{text}</p>`, where `text` is empty\n\tif (child === null) {\n\t\tchild = hydrate_node.appendChild(create_text());\n\t} else if (is_text && child.nodeType !== TEXT_NODE) {\n\t\tvar text = create_text();\n\t\tchild?.before(text);\n\t\tset_hydrate_node(text);\n\t\treturn text;\n\t}\n\n\tset_hydrate_node(child);\n\treturn child;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {DocumentFragment | TemplateNode[]} fragment\n * @param {boolean} is_text\n * @returns {Node | null}\n */\nexport function first_child(fragment, is_text) {\n\tif (!hydrating) {\n\t\t// when not hydrating, `fragment` is a `DocumentFragment` (the result of calling `open_frag`)\n\t\tvar first = /** @type {DocumentFragment} */ (get_first_child(/** @type {Node} */ (fragment)));\n\n\t\t// TODO prevent user comments with the empty string when preserveComments is true\n\t\tif (first instanceof Comment && first.data === '') return get_next_sibling(first);\n\n\t\treturn first;\n\t}\n\n\t// if an {expression} is empty during SSR, there might be no\n\t// text node to hydrate — we must therefore create one\n\tif (is_text && hydrate_node?.nodeType !== TEXT_NODE) {\n\t\tvar text = create_text();\n\n\t\thydrate_node?.before(text);\n\t\tset_hydrate_node(text);\n\t\treturn text;\n\t}\n\n\treturn hydrate_node;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {TemplateNode} node\n * @param {number} count\n * @param {boolean} is_text\n * @returns {Node | null}\n */\nexport function sibling(node, count = 1, is_text = false) {\n\tlet next_sibling = hydrating ? hydrate_node : node;\n\tvar last_sibling;\n\n\twhile (count--) {\n\t\tlast_sibling = next_sibling;\n\t\tnext_sibling = /** @type {TemplateNode} */ (get_next_sibling(next_sibling));\n\t}\n\n\tif (!hydrating) {\n\t\treturn next_sibling;\n\t}\n\n\t// if a sibling {expression} is empty during SSR, there might be no\n\t// text node to hydrate — we must therefore create one\n\tif (is_text && next_sibling?.nodeType !== TEXT_NODE) {\n\t\tvar text = create_text();\n\t\t// If the next sibling is `null` and we're handling text then it's because\n\t\t// the SSR content was empty for the text, so we need to generate a new text\n\t\t// node and insert it after the last sibling\n\t\tif (next_sibling === null) {\n\t\t\tlast_sibling?.after(text);\n\t\t} else {\n\t\t\tnext_sibling.before(text);\n\t\t}\n\t\tset_hydrate_node(text);\n\t\treturn text;\n\t}\n\n\tset_hydrate_node(next_sibling);\n\treturn /** @type {TemplateNode} */ (next_sibling);\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n * @returns {void}\n */\nexport function clear_text_content(node) {\n\tnode.textContent = '';\n}\n\n/**\n * Returns `true` if we're updating the current block, for example `condition` in\n * an `{#if condition}` block just changed. In this case, the branch should be\n * appended (or removed) at the same time as other updates within the\n * current `<svelte:boundary>`\n */\nexport function should_defer_append() {\n\tif (!async_mode_flag) return false;\n\n\tvar flags = /** @type {Effect} */ (active_effect).f;\n\treturn (flags & EFFECT_RAN) !== 0;\n}\n\n/**\n *\n * @param {string} tag\n * @param {string} [namespace]\n * @param {string} [is]\n * @returns\n */\nexport function create_element(tag, namespace, is) {\n\tlet options = is ? { is } : undefined;\n\tif (namespace) {\n\t\treturn document.createElementNS(namespace, tag, options);\n\t}\n\treturn document.createElement(tag, options);\n}\n\nexport function create_fragment() {\n\treturn document.createDocumentFragment();\n}\n\n/**\n * @param {string} data\n * @returns\n */\nexport function create_comment(data = '') {\n\treturn document.createComment(data);\n}\n\n/**\n * @param {Element} element\n * @param {string} key\n * @param {string} value\n * @returns\n */\nexport function set_attribute(element, key, value = '') {\n\tif (key.startsWith('xlink:')) {\n\t\telement.setAttributeNS('http://www.w3.org/1999/xlink', key, value);\n\t\treturn;\n\t}\n\treturn element.setAttribute(key, value);\n}\n","import { hydrating } from '../hydration.js';\nimport { clear_text_content, get_first_child } from '../operations.js';\nimport { queue_micro_task } from '../task.js';\n\n/**\n * @param {HTMLElement} dom\n * @param {boolean} value\n * @returns {void}\n */\nexport function autofocus(dom, value) {\n\tif (value) {\n\t\tconst body = document.body;\n\t\tdom.autofocus = true;\n\n\t\tqueue_micro_task(() => {\n\t\t\tif (document.activeElement === body) {\n\t\t\t\tdom.focus();\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * The child of a textarea actually corresponds to the defaultValue property, so we need\n * to remove it upon hydration to avoid a bug when someone resets the form value.\n * @param {HTMLTextAreaElement} dom\n * @returns {void}\n */\nexport function remove_textarea_child(dom) {\n\tif (hydrating && get_first_child(dom) !== null) {\n\t\tclear_text_content(dom);\n\t}\n}\n\nlet listening_to_form_reset = false;\n\nexport function add_form_reset_listener() {\n\tif (!listening_to_form_reset) {\n\t\tlistening_to_form_reset = true;\n\t\tdocument.addEventListener(\n\t\t\t'reset',\n\t\t\t(evt) => {\n\t\t\t\t// Needs to happen one tick later or else the dom properties of the form\n\t\t\t\t// elements have not updated to their reset values yet\n\t\t\t\tPromise.resolve().then(() => {\n\t\t\t\t\tif (!evt.defaultPrevented) {\n\t\t\t\t\t\tfor (const e of /**@type {HTMLFormElement} */ (evt.target).elements) {\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\te.__on_r?.();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\t// In the capture phase to guarantee we get noticed of it (no possiblity of stopPropagation)\n\t\t\t{ capture: true }\n\t\t);\n\t}\n}\n","import { teardown } from '../../../reactivity/effects.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../../runtime.js';\nimport { add_form_reset_listener } from '../misc.js';\n\n/**\n * Fires the handler once immediately (unless corresponding arg is set to `false`),\n * then listens to the given events until the render effect context is destroyed\n * @param {EventTarget} target\n * @param {Array<string>} events\n * @param {(event?: Event) => void} handler\n * @param {any} call_handler_immediately\n */\nexport function listen(target, events, handler, call_handler_immediately = true) {\n\tif (call_handler_immediately) {\n\t\thandler();\n\t}\n\n\tfor (var name of events) {\n\t\ttarget.addEventListener(name, handler);\n\t}\n\n\tteardown(() => {\n\t\tfor (var name of events) {\n\t\t\ttarget.removeEventListener(name, handler);\n\t\t}\n\t});\n}\n\n/**\n * @template T\n * @param {() => T} fn\n */\nexport function without_reactive_context(fn) {\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\ttry {\n\t\treturn fn();\n\t} finally {\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_effect(previous_effect);\n\t}\n}\n\n/**\n * Listen to the given event, and then instantiate a global form reset listener if not already done,\n * to notify all bindings when the form is reset\n * @param {HTMLElement} element\n * @param {string} event\n * @param {(is_reset?: true) => void} handler\n * @param {(is_reset?: true) => void} [on_reset]\n */\nexport function listen_to_event_and_reset_event(element, event, handler, on_reset = handler) {\n\telement.addEventListener(event, () => without_reactive_context(handler));\n\t// @ts-expect-error\n\tconst prev = element.__on_r;\n\tif (prev) {\n\t\t// special case for checkbox that can have multiple binds (group & checked)\n\t\t// @ts-expect-error\n\t\telement.__on_r = () => {\n\t\t\tprev();\n\t\t\ton_reset(true);\n\t\t};\n\t} else {\n\t\t// @ts-expect-error\n\t\telement.__on_r = () => on_reset(true);\n\t}\n\n\tadd_form_reset_listener();\n}\n","/** @import { ComponentContext, ComponentContextLegacy, Derived, Effect, TemplateNode, TransitionManager } from '#client' */\nimport {\n\tis_dirty,\n\tactive_effect,\n\tactive_reaction,\n\tupdate_effect,\n\tget,\n\tis_destroying_effect,\n\tremove_reactions,\n\tset_active_reaction,\n\tset_is_destroying_effect,\n\tset_signal_status,\n\tuntrack,\n\tuntracking\n} from '../runtime.js';\nimport {\n\tDIRTY,\n\tBRANCH_EFFECT,\n\tRENDER_EFFECT,\n\tEFFECT,\n\tDESTROYED,\n\tINERT,\n\tEFFECT_RAN,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tEFFECT_TRANSPARENT,\n\tDERIVED,\n\tUNOWNED,\n\tCLEAN,\n\tINSPECT_EFFECT,\n\tHEAD_EFFECT,\n\tMAYBE_DIRTY,\n\tEFFECT_PRESERVED,\n\tSTALE_REACTION,\n\tUSER_EFFECT,\n\tASYNC\n} from '#client/constants';\nimport * as e from '../errors.js';\nimport { DEV } from 'esm-env';\nimport { define_property } from '../../shared/utils.js';\nimport { get_next_sibling } from '../dom/operations.js';\nimport { component_context, dev_current_component_function, dev_stack } from '../context.js';\nimport { Batch, schedule_effect } from './batch.js';\nimport { flatten } from './async.js';\nimport { without_reactive_context } from '../dom/elements/bindings/shared.js';\n\n/**\n * @param {'$effect' | '$effect.pre' | '$inspect'} rune\n */\nexport function validate_effect(rune) {\n\tif (active_effect === null && active_reaction === null) {\n\t\te.effect_orphan(rune);\n\t}\n\n\tif (active_reaction !== null && (active_reaction.f & UNOWNED) !== 0 && active_effect === null) {\n\t\te.effect_in_unowned_derived();\n\t}\n\n\tif (is_destroying_effect) {\n\t\te.effect_in_teardown(rune);\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {Effect} parent_effect\n */\nfunction push_effect(effect, parent_effect) {\n\tvar parent_last = parent_effect.last;\n\tif (parent_last === null) {\n\t\tparent_effect.last = parent_effect.first = effect;\n\t} else {\n\t\tparent_last.next = effect;\n\t\teffect.prev = parent_last;\n\t\tparent_effect.last = effect;\n\t}\n}\n\n/**\n * @param {number} type\n * @param {null | (() => void | (() => void))} fn\n * @param {boolean} sync\n * @param {boolean} push\n * @returns {Effect}\n */\nfunction create_effect(type, fn, sync, push = true) {\n\tvar parent = active_effect;\n\n\tif (DEV) {\n\t\t// Ensure the parent is never an inspect effect\n\t\twhile (parent !== null && (parent.f & INSPECT_EFFECT) !== 0) {\n\t\t\tparent = parent.parent;\n\t\t}\n\t}\n\n\tif (parent !== null && (parent.f & INERT) !== 0) {\n\t\ttype |= INERT;\n\t}\n\n\t/** @type {Effect} */\n\tvar effect = {\n\t\tctx: component_context,\n\t\tdeps: null,\n\t\tnodes_start: null,\n\t\tnodes_end: null,\n\t\tf: type | DIRTY,\n\t\tfirst: null,\n\t\tfn,\n\t\tlast: null,\n\t\tnext: null,\n\t\tparent,\n\t\tb: parent && parent.b,\n\t\tprev: null,\n\t\tteardown: null,\n\t\ttransitions: null,\n\t\twv: 0,\n\t\tac: null\n\t};\n\n\tif (DEV) {\n\t\teffect.component_function = dev_current_component_function;\n\t}\n\n\tif (sync) {\n\t\ttry {\n\t\t\tupdate_effect(effect);\n\t\t\teffect.f |= EFFECT_RAN;\n\t\t} catch (e) {\n\t\t\tdestroy_effect(effect);\n\t\t\tthrow e;\n\t\t}\n\t} else if (fn !== null) {\n\t\tschedule_effect(effect);\n\t}\n\n\t// if an effect has no dependencies, no DOM and no teardown function,\n\t// don't bother adding it to the effect tree\n\tvar inert =\n\t\tsync &&\n\t\teffect.deps === null &&\n\t\teffect.first === null &&\n\t\teffect.nodes_start === null &&\n\t\teffect.teardown === null &&\n\t\t(effect.f & EFFECT_PRESERVED) === 0;\n\n\tif (!inert && push) {\n\t\tif (parent !== null) {\n\t\t\tpush_effect(effect, parent);\n\t\t}\n\n\t\t// if we're in a derived, add the effect there too\n\t\tif (\n\t\t\tactive_reaction !== null &&\n\t\t\t(active_reaction.f & DERIVED) !== 0 &&\n\t\t\t(type & ROOT_EFFECT) === 0\n\t\t) {\n\t\t\tvar derived = /** @type {Derived} */ (active_reaction);\n\t\t\t(derived.effects ??= []).push(effect);\n\t\t}\n\t}\n\n\treturn effect;\n}\n\n/**\n * Internal representation of `$effect.tracking()`\n * @returns {boolean}\n */\nexport function effect_tracking() {\n\treturn active_reaction !== null && !untracking;\n}\n\n/**\n * @param {() => void} fn\n */\nexport function teardown(fn) {\n\tconst effect = create_effect(RENDER_EFFECT, null, false);\n\tset_signal_status(effect, CLEAN);\n\teffect.teardown = fn;\n\treturn effect;\n}\n\n/**\n * Internal representation of `$effect(...)`\n * @param {() => void | (() => void)} fn\n */\nexport function user_effect(fn) {\n\tvalidate_effect('$effect');\n\n\tif (DEV) {\n\t\tdefine_property(fn, 'name', {\n\t\t\tvalue: '$effect'\n\t\t});\n\t}\n\n\t// Non-nested `$effect(...)` in a component should be deferred\n\t// until the component is mounted\n\tvar flags = /** @type {Effect} */ (active_effect).f;\n\tvar defer = !active_reaction && (flags & BRANCH_EFFECT) !== 0 && (flags & EFFECT_RAN) === 0;\n\n\tif (defer) {\n\t\t// Top-level `$effect(...)` in an unmounted component — defer until mount\n\t\tvar context = /** @type {ComponentContext} */ (component_context);\n\t\t(context.e ??= []).push(fn);\n\t} else {\n\t\t// Everything else — create immediately\n\t\treturn create_user_effect(fn);\n\t}\n}\n\n/**\n * @param {() => void | (() => void)} fn\n */\nexport function create_user_effect(fn) {\n\treturn create_effect(EFFECT | USER_EFFECT, fn, false);\n}\n\n/**\n * Internal representation of `$effect.pre(...)`\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function user_pre_effect(fn) {\n\tvalidate_effect('$effect.pre');\n\tif (DEV) {\n\t\tdefine_property(fn, 'name', {\n\t\t\tvalue: '$effect.pre'\n\t\t});\n\t}\n\treturn create_effect(RENDER_EFFECT | USER_EFFECT, fn, true);\n}\n\n/** @param {() => void | (() => void)} fn */\nexport function inspect_effect(fn) {\n\treturn create_effect(INSPECT_EFFECT, fn, true);\n}\n\n/**\n * Internal representation of `$effect.root(...)`\n * @param {() => void | (() => void)} fn\n * @returns {() => void}\n */\nexport function effect_root(fn) {\n\tBatch.ensure();\n\tconst effect = create_effect(ROOT_EFFECT, fn, true);\n\n\treturn () => {\n\t\tdestroy_effect(effect);\n\t};\n}\n\n/**\n * An effect root whose children can transition out\n * @param {() => void} fn\n * @returns {(options?: { outro?: boolean }) => Promise<void>}\n */\nexport function component_root(fn) {\n\tBatch.ensure();\n\tconst effect = create_effect(ROOT_EFFECT, fn, true);\n\n\treturn (options = {}) => {\n\t\treturn new Promise((fulfil) => {\n\t\t\tif (options.outro) {\n\t\t\t\tpause_effect(effect, () => {\n\t\t\t\t\tdestroy_effect(effect);\n\t\t\t\t\tfulfil(undefined);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tdestroy_effect(effect);\n\t\t\t\tfulfil(undefined);\n\t\t\t}\n\t\t});\n\t};\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function effect(fn) {\n\treturn create_effect(EFFECT, fn, false);\n}\n\n/**\n * Internal representation of `$: ..`\n * @param {() => any} deps\n * @param {() => void | (() => void)} fn\n */\nexport function legacy_pre_effect(deps, fn) {\n\tvar context = /** @type {ComponentContextLegacy} */ (component_context);\n\n\t/** @type {{ effect: null | Effect, ran: boolean, deps: () => any }} */\n\tvar token = { effect: null, ran: false, deps };\n\n\tcontext.l.$.push(token);\n\n\ttoken.effect = render_effect(() => {\n\t\tdeps();\n\n\t\t// If this legacy pre effect has already run before the end of the reset, then\n\t\t// bail out to emulate the same behavior.\n\t\tif (token.ran) return;\n\n\t\ttoken.ran = true;\n\t\tuntrack(fn);\n\t});\n}\n\nexport function legacy_pre_effect_reset() {\n\tvar context = /** @type {ComponentContextLegacy} */ (component_context);\n\n\trender_effect(() => {\n\t\t// Run dirty `$:` statements\n\t\tfor (var token of context.l.$) {\n\t\t\ttoken.deps();\n\n\t\t\tvar effect = token.effect;\n\n\t\t\t// If the effect is CLEAN, then make it MAYBE_DIRTY. This ensures we traverse through\n\t\t\t// the effects dependencies and correctly ensure each dependency is up-to-date.\n\t\t\tif ((effect.f & CLEAN) !== 0) {\n\t\t\t\tset_signal_status(effect, MAYBE_DIRTY);\n\t\t\t}\n\n\t\t\tif (is_dirty(effect)) {\n\t\t\t\tupdate_effect(effect);\n\t\t\t}\n\n\t\t\ttoken.ran = false;\n\t\t}\n\t});\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function async_effect(fn) {\n\treturn create_effect(ASYNC | EFFECT_PRESERVED, fn, true);\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function render_effect(fn, flags = 0) {\n\treturn create_effect(RENDER_EFFECT | flags, fn, true);\n}\n\n/**\n * @param {(...expressions: any) => void | (() => void)} fn\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n */\nexport function template_effect(fn, sync = [], async = []) {\n\tflatten(sync, async, (values) => {\n\t\tcreate_effect(RENDER_EFFECT, () => fn(...values.map(get)), true);\n\t});\n}\n\n/**\n * @param {(() => void)} fn\n * @param {number} flags\n */\nexport function block(fn, flags = 0) {\n\tvar effect = create_effect(BLOCK_EFFECT | flags, fn, true);\n\tif (DEV) {\n\t\teffect.dev_stack = dev_stack;\n\t}\n\treturn effect;\n}\n\n/**\n * @param {(() => void)} fn\n * @param {boolean} [push]\n */\nexport function branch(fn, push = true) {\n\treturn create_effect(BRANCH_EFFECT, fn, true, push);\n}\n\n/**\n * @param {Effect} effect\n */\nexport function execute_effect_teardown(effect) {\n\tvar teardown = effect.teardown;\n\tif (teardown !== null) {\n\t\tconst previously_destroying_effect = is_destroying_effect;\n\t\tconst previous_reaction = active_reaction;\n\t\tset_is_destroying_effect(true);\n\t\tset_active_reaction(null);\n\t\ttry {\n\t\t\tteardown.call(null);\n\t\t} finally {\n\t\t\tset_is_destroying_effect(previously_destroying_effect);\n\t\t\tset_active_reaction(previous_reaction);\n\t\t}\n\t}\n}\n\n/**\n * @param {Effect} signal\n * @param {boolean} remove_dom\n * @returns {void}\n */\nexport function destroy_effect_children(signal, remove_dom = false) {\n\tvar effect = signal.first;\n\tsignal.first = signal.last = null;\n\n\twhile (effect !== null) {\n\t\tconst controller = effect.ac;\n\n\t\tif (controller !== null) {\n\t\t\twithout_reactive_context(() => {\n\t\t\t\tcontroller.abort(STALE_REACTION);\n\t\t\t});\n\t\t}\n\n\t\tvar next = effect.next;\n\n\t\tif ((effect.f & ROOT_EFFECT) !== 0) {\n\t\t\t// this is now an independent root\n\t\t\teffect.parent = null;\n\t\t} else {\n\t\t\tdestroy_effect(effect, remove_dom);\n\t\t}\n\n\t\teffect = next;\n\t}\n}\n\n/**\n * @param {Effect} signal\n * @returns {void}\n */\nexport function destroy_block_effect_children(signal) {\n\tvar effect = signal.first;\n\n\twhile (effect !== null) {\n\t\tvar next = effect.next;\n\t\tif ((effect.f & BRANCH_EFFECT) === 0) {\n\t\t\tdestroy_effect(effect);\n\t\t}\n\t\teffect = next;\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {boolean} [remove_dom]\n * @returns {void}\n */\nexport function destroy_effect(effect, remove_dom = true) {\n\tvar removed = false;\n\n\tif (\n\t\t(remove_dom || (effect.f & HEAD_EFFECT) !== 0) &&\n\t\teffect.nodes_start !== null &&\n\t\teffect.nodes_end !== null\n\t) {\n\t\tremove_effect_dom(effect.nodes_start, /** @type {TemplateNode} */ (effect.nodes_end));\n\t\tremoved = true;\n\t}\n\n\tdestroy_effect_children(effect, remove_dom && !removed);\n\tremove_reactions(effect, 0);\n\tset_signal_status(effect, DESTROYED);\n\n\tvar transitions = effect.transitions;\n\n\tif (transitions !== null) {\n\t\tfor (const transition of transitions) {\n\t\t\ttransition.stop();\n\t\t}\n\t}\n\n\texecute_effect_teardown(effect);\n\n\tvar parent = effect.parent;\n\n\t// If the parent doesn't have any children, then skip this work altogether\n\tif (parent !== null && parent.first !== null) {\n\t\tunlink_effect(effect);\n\t}\n\n\tif (DEV) {\n\t\teffect.component_function = null;\n\t}\n\n\t// `first` and `child` are nulled out in destroy_effect_children\n\t// we don't null out `parent` so that error propagation can work correctly\n\teffect.next =\n\t\teffect.prev =\n\t\teffect.teardown =\n\t\teffect.ctx =\n\t\teffect.deps =\n\t\teffect.fn =\n\t\teffect.nodes_start =\n\t\teffect.nodes_end =\n\t\teffect.ac =\n\t\t\tnull;\n}\n\n/**\n *\n * @param {TemplateNode | null} node\n * @param {TemplateNode} end\n */\nexport function remove_effect_dom(node, end) {\n\twhile (node !== null) {\n\t\t/** @type {TemplateNode | null} */\n\t\tvar next = node === end ? null : /** @type {TemplateNode} */ (get_next_sibling(node));\n\n\t\tnode.remove();\n\t\tnode = next;\n\t}\n}\n\n/**\n * Detach an effect from the effect tree, freeing up memory and\n * reducing the amount of work that happens on subsequent traversals\n * @param {Effect} effect\n */\nexport function unlink_effect(effect) {\n\tvar parent = effect.parent;\n\tvar prev = effect.prev;\n\tvar next = effect.next;\n\n\tif (prev !== null) prev.next = next;\n\tif (next !== null) next.prev = prev;\n\n\tif (parent !== null) {\n\t\tif (parent.first === effect) parent.first = next;\n\t\tif (parent.last === effect) parent.last = prev;\n\t}\n}\n\n/**\n * When a block effect is removed, we don't immediately destroy it or yank it\n * out of the DOM, because it might have transitions. Instead, we 'pause' it.\n * It stays around (in memory, and in the DOM) until outro transitions have\n * completed, and if the state change is reversed then we _resume_ it.\n * A paused effect does not update, and the DOM subtree becomes inert.\n * @param {Effect} effect\n * @param {() => void} [callback]\n */\nexport function pause_effect(effect, callback) {\n\t/** @type {TransitionManager[]} */\n\tvar transitions = [];\n\n\tpause_children(effect, transitions, true);\n\n\trun_out_transitions(transitions, () => {\n\t\tdestroy_effect(effect);\n\t\tif (callback) callback();\n\t});\n}\n\n/**\n * @param {TransitionManager[]} transitions\n * @param {() => void} fn\n */\nexport function run_out_transitions(transitions, fn) {\n\tvar remaining = transitions.length;\n\tif (remaining > 0) {\n\t\tvar check = () => --remaining || fn();\n\t\tfor (var transition of transitions) {\n\t\t\ttransition.out(check);\n\t\t}\n\t} else {\n\t\tfn();\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {TransitionManager[]} transitions\n * @param {boolean} local\n */\nexport function pause_children(effect, transitions, local) {\n\tif ((effect.f & INERT) !== 0) return;\n\teffect.f ^= INERT;\n\n\tif (effect.transitions !== null) {\n\t\tfor (const transition of effect.transitions) {\n\t\t\tif (transition.is_global || local) {\n\t\t\t\ttransitions.push(transition);\n\t\t\t}\n\t\t}\n\t}\n\n\tvar child = effect.first;\n\n\twhile (child !== null) {\n\t\tvar sibling = child.next;\n\t\tvar transparent = (child.f & EFFECT_TRANSPARENT) !== 0 || (child.f & BRANCH_EFFECT) !== 0;\n\t\t// TODO we don't need to call pause_children recursively with a linked list in place\n\t\t// it's slightly more involved though as we have to account for `transparent` changing\n\t\t// through the tree.\n\t\tpause_children(child, transitions, transparent ? local : false);\n\t\tchild = sibling;\n\t}\n}\n\n/**\n * The opposite of `pause_effect`. We call this if (for example)\n * `x` becomes falsy then truthy: `{#if x}...{/if}`\n * @param {Effect} effect\n */\nexport function resume_effect(effect) {\n\tresume_children(effect, true);\n}\n\n/**\n * @param {Effect} effect\n * @param {boolean} local\n */\nfunction resume_children(effect, local) {\n\tif ((effect.f & INERT) === 0) return;\n\teffect.f ^= INERT;\n\n\t// If a dependency of this effect changed while it was paused,\n\t// schedule the effect to update. we don't use `is_dirty`\n\t// here because we don't want to eagerly recompute a derived like\n\t// `{#if foo}{foo.bar()}{/if}` if `foo` is now `undefined\n\tif ((effect.f & CLEAN) === 0) {\n\t\tset_signal_status(effect, DIRTY);\n\t\tschedule_effect(effect);\n\t}\n\n\tvar child = effect.first;\n\n\twhile (child !== null) {\n\t\tvar sibling = child.next;\n\t\tvar transparent = (child.f & EFFECT_TRANSPARENT) !== 0 || (child.f & BRANCH_EFFECT) !== 0;\n\t\t// TODO we don't need to call resume_children recursively with a linked list in place\n\t\t// it's slightly more involved though as we have to account for `transparent` changing\n\t\t// through the tree.\n\t\tresume_children(child, transparent ? local : false);\n\t\tchild = sibling;\n\t}\n\n\tif (effect.transitions !== null) {\n\t\tfor (const transition of effect.transitions) {\n\t\t\tif (transition.is_global || local) {\n\t\t\t\ttransition.in();\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function aborted() {\n\tvar effect = /** @type {Effect} */ (active_effect);\n\treturn (effect.f & DESTROYED) !== 0;\n}\n","/** @import { Derived, Effect, Reaction, Signal, Source, Value } from '#client' */\nimport { DEV } from 'esm-env';\nimport { get_descriptors, get_prototype_of, index_of } from '../shared/utils.js';\nimport {\n\tdestroy_block_effect_children,\n\tdestroy_effect_children,\n\texecute_effect_teardown\n} from './reactivity/effects.js';\nimport {\n\tDIRTY,\n\tMAYBE_DIRTY,\n\tCLEAN,\n\tDERIVED,\n\tUNOWNED,\n\tDESTROYED,\n\tBRANCH_EFFECT,\n\tSTATE_SYMBOL,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tDISCONNECTED,\n\tREACTION_IS_UPDATING,\n\tSTALE_REACTION,\n\tERROR_VALUE\n} from './constants.js';\nimport { old_values } from './reactivity/sources.js';\nimport {\n\tdestroy_derived_effects,\n\texecute_derived,\n\tcurrent_async_effect,\n\trecent_async_deriveds,\n\tupdate_derived\n} from './reactivity/deriveds.js';\nimport { async_mode_flag, tracing_mode_flag } from '../flags/index.js';\nimport { tracing_expressions, get_stack } from './dev/tracing.js';\nimport {\n\tcomponent_context,\n\tdev_current_component_function,\n\tdev_stack,\n\tis_runes,\n\tset_component_context,\n\tset_dev_current_component_function,\n\tset_dev_stack\n} from './context.js';\nimport * as w from './warnings.js';\nimport { Batch, batch_deriveds, flushSync, schedule_effect } from './reactivity/batch.js';\nimport { handle_error } from './error-handling.js';\nimport { UNINITIALIZED } from '../../constants.js';\nimport { captured_signals } from './legacy.js';\nimport { without_reactive_context } from './dom/elements/bindings/shared.js';\n\nexport let is_updating_effect = false;\n\n/** @param {boolean} value */\nexport function set_is_updating_effect(value) {\n\tis_updating_effect = value;\n}\n\nexport let is_destroying_effect = false;\n\n/** @param {boolean} value */\nexport function set_is_destroying_effect(value) {\n\tis_destroying_effect = value;\n}\n\n/** @type {null | Reaction} */\nexport let active_reaction = null;\n\nexport let untracking = false;\n\n/** @param {null | Reaction} reaction */\nexport function set_active_reaction(reaction) {\n\tactive_reaction = reaction;\n}\n\n/** @type {null | Effect} */\nexport let active_effect = null;\n\n/** @param {null | Effect} effect */\nexport function set_active_effect(effect) {\n\tactive_effect = effect;\n}\n\n/**\n * When sources are created within a reaction, reading and writing\n * them within that reaction should not cause a re-run\n * @type {null | Source[]}\n */\nexport let current_sources = null;\n\n/** @param {Value} value */\nexport function push_reaction_value(value) {\n\tif (active_reaction !== null && (!async_mode_flag || (active_reaction.f & DERIVED) !== 0)) {\n\t\tif (current_sources === null) {\n\t\t\tcurrent_sources = [value];\n\t\t} else {\n\t\t\tcurrent_sources.push(value);\n\t\t}\n\t}\n}\n\n/**\n * The dependencies of the reaction that is currently being executed. In many cases,\n * the dependencies are unchanged between runs, and so this will be `null` unless\n * and until a new dependency is accessed — we track this via `skipped_deps`\n * @type {null | Value[]}\n */\nlet new_deps = null;\n\nlet skipped_deps = 0;\n\n/**\n * Tracks writes that the effect it's executed in doesn't listen to yet,\n * so that the dependency can be added to the effect later on if it then reads it\n * @type {null | Source[]}\n */\nexport let untracked_writes = null;\n\n/** @param {null | Source[]} value */\nexport function set_untracked_writes(value) {\n\tuntracked_writes = value;\n}\n\n/**\n * @type {number} Used by sources and deriveds for handling updates.\n * Version starts from 1 so that unowned deriveds differentiate between a created effect and a run one for tracing\n **/\nexport let write_version = 1;\n\n/** @type {number} Used to version each read of a source of derived to avoid duplicating depedencies inside a reaction */\nlet read_version = 0;\n\nexport let update_version = read_version;\n\n/** @param {number} value */\nexport function set_update_version(value) {\n\tupdate_version = value;\n}\n\n// If we are working with a get() chain that has no active container,\n// to prevent memory leaks, we skip adding the reaction.\nexport let skip_reaction = false;\n\nexport function increment_write_version() {\n\treturn ++write_version;\n}\n\n/**\n * Determines whether a derived or effect is dirty.\n * If it is MAYBE_DIRTY, will set the status to CLEAN\n * @param {Reaction} reaction\n * @returns {boolean}\n */\nexport function is_dirty(reaction) {\n\tvar flags = reaction.f;\n\n\tif ((flags & DIRTY) !== 0) {\n\t\treturn true;\n\t}\n\n\tif ((flags & MAYBE_DIRTY) !== 0) {\n\t\tvar dependencies = reaction.deps;\n\t\tvar is_unowned = (flags & UNOWNED) !== 0;\n\n\t\tif (dependencies !== null) {\n\t\t\tvar i;\n\t\t\tvar dependency;\n\t\t\tvar is_disconnected = (flags & DISCONNECTED) !== 0;\n\t\t\tvar is_unowned_connected = is_unowned && active_effect !== null && !skip_reaction;\n\t\t\tvar length = dependencies.length;\n\n\t\t\t// If we are working with a disconnected or an unowned signal that is now connected (due to an active effect)\n\t\t\t// then we need to re-connect the reaction to the dependency, unless the effect has already been destroyed\n\t\t\t// (which can happen if the derived is read by an async derived)\n\t\t\tif (\n\t\t\t\t(is_disconnected || is_unowned_connected) &&\n\t\t\t\t(active_effect === null || (active_effect.f & DESTROYED) === 0)\n\t\t\t) {\n\t\t\t\tvar derived = /** @type {Derived} */ (reaction);\n\t\t\t\tvar parent = derived.parent;\n\n\t\t\t\tfor (i = 0; i < length; i++) {\n\t\t\t\t\tdependency = dependencies[i];\n\n\t\t\t\t\t// We always re-add all reactions (even duplicates) if the derived was\n\t\t\t\t\t// previously disconnected, however we don't if it was unowned as we\n\t\t\t\t\t// de-duplicate dependencies in that case\n\t\t\t\t\tif (is_disconnected || !dependency?.reactions?.includes(derived)) {\n\t\t\t\t\t\t(dependency.reactions ??= []).push(derived);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (is_disconnected) {\n\t\t\t\t\tderived.f ^= DISCONNECTED;\n\t\t\t\t}\n\t\t\t\t// If the unowned derived is now fully connected to the graph again (it's unowned and reconnected, has a parent\n\t\t\t\t// and the parent is not unowned), then we can mark it as connected again, removing the need for the unowned\n\t\t\t\t// flag\n\t\t\t\tif (is_unowned_connected && parent !== null && (parent.f & UNOWNED) === 0) {\n\t\t\t\t\tderived.f ^= UNOWNED;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (i = 0; i < length; i++) {\n\t\t\t\tdependency = dependencies[i];\n\n\t\t\t\tif (is_dirty(/** @type {Derived} */ (dependency))) {\n\t\t\t\t\tupdate_derived(/** @type {Derived} */ (dependency));\n\t\t\t\t}\n\n\t\t\t\tif (dependency.wv > reaction.wv) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Unowned signals should never be marked as clean unless they\n\t\t// are used within an active_effect without skip_reaction\n\t\tif (!is_unowned || (active_effect !== null && !skip_reaction)) {\n\t\t\tset_signal_status(reaction, CLEAN);\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * @param {Value} signal\n * @param {Effect} effect\n * @param {boolean} [root]\n */\nfunction schedule_possible_effect_self_invalidation(signal, effect, root = true) {\n\tvar reactions = signal.reactions;\n\tif (reactions === null) return;\n\n\tif (!async_mode_flag && current_sources?.includes(signal)) {\n\t\treturn;\n\t}\n\n\tfor (var i = 0; i < reactions.length; i++) {\n\t\tvar reaction = reactions[i];\n\n\t\tif ((reaction.f & DERIVED) !== 0) {\n\t\t\tschedule_possible_effect_self_invalidation(/** @type {Derived} */ (reaction), effect, false);\n\t\t} else if (effect === reaction) {\n\t\t\tif (root) {\n\t\t\t\tset_signal_status(reaction, DIRTY);\n\t\t\t} else if ((reaction.f & CLEAN) !== 0) {\n\t\t\t\tset_signal_status(reaction, MAYBE_DIRTY);\n\t\t\t}\n\t\t\tschedule_effect(/** @type {Effect} */ (reaction));\n\t\t}\n\t}\n}\n\n/** @param {Reaction} reaction */\nexport function update_reaction(reaction) {\n\tvar previous_deps = new_deps;\n\tvar previous_skipped_deps = skipped_deps;\n\tvar previous_untracked_writes = untracked_writes;\n\tvar previous_reaction = active_reaction;\n\tvar previous_skip_reaction = skip_reaction;\n\tvar previous_sources = current_sources;\n\tvar previous_component_context = component_context;\n\tvar previous_untracking = untracking;\n\tvar previous_update_version = update_version;\n\n\tvar flags = reaction.f;\n\n\tnew_deps = /** @type {null | Value[]} */ (null);\n\tskipped_deps = 0;\n\tuntracked_writes = null;\n\tskip_reaction =\n\t\t(flags & UNOWNED) !== 0 && (untracking || !is_updating_effect || active_reaction === null);\n\tactive_reaction = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null;\n\n\tcurrent_sources = null;\n\tset_component_context(reaction.ctx);\n\tuntracking = false;\n\tupdate_version = ++read_version;\n\n\tif (reaction.ac !== null) {\n\t\twithout_reactive_context(() => {\n\t\t\t/** @type {AbortController} */ (reaction.ac).abort(STALE_REACTION);\n\t\t});\n\n\t\treaction.ac = null;\n\t}\n\n\ttry {\n\t\treaction.f |= REACTION_IS_UPDATING;\n\t\tvar fn = /** @type {Function} */ (reaction.fn);\n\t\tvar result = fn();\n\t\tvar deps = reaction.deps;\n\n\t\tif (new_deps !== null) {\n\t\t\tvar i;\n\n\t\t\tremove_reactions(reaction, skipped_deps);\n\n\t\t\tif (deps !== null && skipped_deps > 0) {\n\t\t\t\tdeps.length = skipped_deps + new_deps.length;\n\t\t\t\tfor (i = 0; i < new_deps.length; i++) {\n\t\t\t\t\tdeps[skipped_deps + i] = new_deps[i];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treaction.deps = deps = new_deps;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t!skip_reaction ||\n\t\t\t\t// Deriveds that already have reactions can cleanup, so we still add them as reactions\n\t\t\t\t((flags & DERIVED) !== 0 &&\n\t\t\t\t\t/** @type {import('#client').Derived} */ (reaction).reactions !== null)\n\t\t\t) {\n\t\t\t\tfor (i = skipped_deps; i < deps.length; i++) {\n\t\t\t\t\t(deps[i].reactions ??= []).push(reaction);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (deps !== null && skipped_deps < deps.length) {\n\t\t\tremove_reactions(reaction, skipped_deps);\n\t\t\tdeps.length = skipped_deps;\n\t\t}\n\n\t\t// If we're inside an effect and we have untracked writes, then we need to\n\t\t// ensure that if any of those untracked writes result in re-invalidation\n\t\t// of the current effect, then that happens accordingly\n\t\tif (\n\t\t\tis_runes() &&\n\t\t\tuntracked_writes !== null &&\n\t\t\t!untracking &&\n\t\t\tdeps !== null &&\n\t\t\t(reaction.f & (DERIVED | MAYBE_DIRTY | DIRTY)) === 0\n\t\t) {\n\t\t\tfor (i = 0; i < /** @type {Source[]} */ (untracked_writes).length; i++) {\n\t\t\t\tschedule_possible_effect_self_invalidation(\n\t\t\t\t\tuntracked_writes[i],\n\t\t\t\t\t/** @type {Effect} */ (reaction)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// If we are returning to an previous reaction then\n\t\t// we need to increment the read version to ensure that\n\t\t// any dependencies in this reaction aren't marked with\n\t\t// the same version\n\t\tif (previous_reaction !== null && previous_reaction !== reaction) {\n\t\t\tread_version++;\n\n\t\t\tif (untracked_writes !== null) {\n\t\t\t\tif (previous_untracked_writes === null) {\n\t\t\t\t\tprevious_untracked_writes = untracked_writes;\n\t\t\t\t} else {\n\t\t\t\t\tprevious_untracked_writes.push(.../** @type {Source[]} */ (untracked_writes));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ((reaction.f & ERROR_VALUE) !== 0) {\n\t\t\treaction.f ^= ERROR_VALUE;\n\t\t}\n\n\t\treturn result;\n\t} catch (error) {\n\t\treturn handle_error(error);\n\t} finally {\n\t\treaction.f ^= REACTION_IS_UPDATING;\n\t\tnew_deps = previous_deps;\n\t\tskipped_deps = previous_skipped_deps;\n\t\tuntracked_writes = previous_untracked_writes;\n\t\tactive_reaction = previous_reaction;\n\t\tskip_reaction = previous_skip_reaction;\n\t\tcurrent_sources = previous_sources;\n\t\tset_component_context(previous_component_context);\n\t\tuntracking = previous_untracking;\n\t\tupdate_version = previous_update_version;\n\t}\n}\n\n/**\n * @template V\n * @param {Reaction} signal\n * @param {Value<V>} dependency\n * @returns {void}\n */\nfunction remove_reaction(signal, dependency) {\n\tlet reactions = dependency.reactions;\n\tif (reactions !== null) {\n\t\tvar index = index_of.call(reactions, signal);\n\t\tif (index !== -1) {\n\t\t\tvar new_length = reactions.length - 1;\n\t\t\tif (new_length === 0) {\n\t\t\t\treactions = dependency.reactions = null;\n\t\t\t} else {\n\t\t\t\t// Swap with last element and then remove.\n\t\t\t\treactions[index] = reactions[new_length];\n\t\t\t\treactions.pop();\n\t\t\t}\n\t\t}\n\t}\n\n\t// If the derived has no reactions, then we can disconnect it from the graph,\n\t// allowing it to either reconnect in the future, or be GC'd by the VM.\n\tif (\n\t\treactions === null &&\n\t\t(dependency.f & DERIVED) !== 0 &&\n\t\t// Destroying a child effect while updating a parent effect can cause a dependency to appear\n\t\t// to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps`\n\t\t// allows us to skip the expensive work of disconnecting and immediately reconnecting it\n\t\t(new_deps === null || !new_deps.includes(dependency))\n\t) {\n\t\tset_signal_status(dependency, MAYBE_DIRTY);\n\t\t// If we are working with a derived that is owned by an effect, then mark it as being\n\t\t// disconnected.\n\t\tif ((dependency.f & (UNOWNED | DISCONNECTED)) === 0) {\n\t\t\tdependency.f ^= DISCONNECTED;\n\t\t}\n\t\t// Disconnect any reactions owned by this reaction\n\t\tdestroy_derived_effects(/** @type {Derived} **/ (dependency));\n\t\tremove_reactions(/** @type {Derived} **/ (dependency), 0);\n\t}\n}\n\n/**\n * @param {Reaction} signal\n * @param {number} start_index\n * @returns {void}\n */\nexport function remove_reactions(signal, start_index) {\n\tvar dependencies = signal.deps;\n\tif (dependencies === null) return;\n\n\tfor (var i = start_index; i < dependencies.length; i++) {\n\t\tremove_reaction(signal, dependencies[i]);\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @returns {void}\n */\nexport function update_effect(effect) {\n\tvar flags = effect.f;\n\n\tif ((flags & DESTROYED) !== 0) {\n\t\treturn;\n\t}\n\n\tset_signal_status(effect, CLEAN);\n\n\tvar previous_effect = active_effect;\n\tvar was_updating_effect = is_updating_effect;\n\n\tactive_effect = effect;\n\tis_updating_effect = true;\n\n\tif (DEV) {\n\t\tvar previous_component_fn = dev_current_component_function;\n\t\tset_dev_current_component_function(effect.component_function);\n\t\tvar previous_stack = /** @type {any} */ (dev_stack);\n\t\t// only block effects have a dev stack, keep the current one otherwise\n\t\tset_dev_stack(effect.dev_stack ?? dev_stack);\n\t}\n\n\ttry {\n\t\tif ((flags & BLOCK_EFFECT) !== 0) {\n\t\t\tdestroy_block_effect_children(effect);\n\t\t} else {\n\t\t\tdestroy_effect_children(effect);\n\t\t}\n\n\t\texecute_effect_teardown(effect);\n\t\tvar teardown = update_reaction(effect);\n\t\teffect.teardown = typeof teardown === 'function' ? teardown : null;\n\t\teffect.wv = write_version;\n\n\t\t// In DEV, increment versions of any sources that were written to during the effect,\n\t\t// so that they are correctly marked as dirty when the effect re-runs\n\t\tif (DEV && tracing_mode_flag && (effect.f & DIRTY) !== 0 && effect.deps !== null) {\n\t\t\tfor (var dep of effect.deps) {\n\t\t\t\tif (dep.set_during_effect) {\n\t\t\t\t\tdep.wv = increment_write_version();\n\t\t\t\t\tdep.set_during_effect = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} finally {\n\t\tis_updating_effect = was_updating_effect;\n\t\tactive_effect = previous_effect;\n\n\t\tif (DEV) {\n\t\t\tset_dev_current_component_function(previous_component_fn);\n\t\t\tset_dev_stack(previous_stack);\n\t\t}\n\t}\n}\n\n/**\n * Returns a promise that resolves once any pending state changes have been applied.\n * @returns {Promise<void>}\n */\nexport async function tick() {\n\tif (async_mode_flag) {\n\t\treturn new Promise((f) => requestAnimationFrame(() => f()));\n\t}\n\n\tawait Promise.resolve();\n\n\t// By calling flushSync we guarantee that any pending state changes are applied after one tick.\n\t// TODO look into whether we can make flushing subsequent updates synchronously in the future.\n\tflushSync();\n}\n\n/**\n * Returns a promise that resolves once any state changes, and asynchronous work resulting from them,\n * have resolved and the DOM has been updated\n * @returns {Promise<void>}\n * @since 5.36\n */\nexport function settled() {\n\treturn Batch.ensure().settled();\n}\n\n/**\n * @template V\n * @param {Value<V>} signal\n * @returns {V}\n */\nexport function get(signal) {\n\tvar flags = signal.f;\n\tvar is_derived = (flags & DERIVED) !== 0;\n\n\tcaptured_signals?.add(signal);\n\n\t// Register the dependency on the current reaction signal.\n\tif (active_reaction !== null && !untracking) {\n\t\t// if we're in a derived that is being read inside an _async_ derived,\n\t\t// it's possible that the effect was already destroyed. In this case,\n\t\t// we don't add the dependency, because that would create a memory leak\n\t\tvar destroyed = active_effect !== null && (active_effect.f & DESTROYED) !== 0;\n\n\t\tif (!destroyed && !current_sources?.includes(signal)) {\n\t\t\tvar deps = active_reaction.deps;\n\n\t\t\tif ((active_reaction.f & REACTION_IS_UPDATING) !== 0) {\n\t\t\t\t// we're in the effect init/update cycle\n\t\t\t\tif (signal.rv < read_version) {\n\t\t\t\t\tsignal.rv = read_version;\n\n\t\t\t\t\t// If the signal is accessing the same dependencies in the same\n\t\t\t\t\t// order as it did last time, increment `skipped_deps`\n\t\t\t\t\t// rather than updating `new_deps`, which creates GC cost\n\t\t\t\t\tif (new_deps === null && deps !== null && deps[skipped_deps] === signal) {\n\t\t\t\t\t\tskipped_deps++;\n\t\t\t\t\t} else if (new_deps === null) {\n\t\t\t\t\t\tnew_deps = [signal];\n\t\t\t\t\t} else if (!skip_reaction || !new_deps.includes(signal)) {\n\t\t\t\t\t\t// Normally we can push duplicated dependencies to `new_deps`, but if we're inside\n\t\t\t\t\t\t// an unowned derived because skip_reaction is true, then we need to ensure that\n\t\t\t\t\t\t// we don't have duplicates\n\t\t\t\t\t\tnew_deps.push(signal);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// we're adding a dependency outside the init/update cycle\n\t\t\t\t// (i.e. after an `await`)\n\t\t\t\t(active_reaction.deps ??= []).push(signal);\n\n\t\t\t\tvar reactions = signal.reactions;\n\n\t\t\t\tif (reactions === null) {\n\t\t\t\t\tsignal.reactions = [active_reaction];\n\t\t\t\t} else if (!reactions.includes(active_reaction)) {\n\t\t\t\t\treactions.push(active_reaction);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else if (\n\t\tis_derived &&\n\t\t/** @type {Derived} */ (signal).deps === null &&\n\t\t/** @type {Derived} */ (signal).effects === null\n\t) {\n\t\tvar derived = /** @type {Derived} */ (signal);\n\t\tvar parent = derived.parent;\n\n\t\tif (parent !== null && (parent.f & UNOWNED) === 0) {\n\t\t\t// If the derived is owned by another derived then mark it as unowned\n\t\t\t// as the derived value might have been referenced in a different context\n\t\t\t// since and thus its parent might not be its true owner anymore\n\t\t\tderived.f ^= UNOWNED;\n\t\t}\n\t}\n\n\tif (DEV) {\n\t\tif (current_async_effect) {\n\t\t\tvar tracking = (current_async_effect.f & REACTION_IS_UPDATING) !== 0;\n\t\t\tvar was_read = current_async_effect.deps?.includes(signal);\n\n\t\t\tif (!tracking && !untracking && !was_read) {\n\t\t\t\tw.await_reactivity_loss(/** @type {string} */ (signal.label));\n\n\t\t\t\tvar trace = get_stack('TracedAt');\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tif (trace) console.warn(trace);\n\t\t\t}\n\t\t}\n\n\t\trecent_async_deriveds.delete(signal);\n\n\t\tif (\n\t\t\ttracing_mode_flag &&\n\t\t\t!untracking &&\n\t\t\ttracing_expressions !== null &&\n\t\t\tactive_reaction !== null &&\n\t\t\ttracing_expressions.reaction === active_reaction\n\t\t) {\n\t\t\t// Used when mapping state between special blocks like `each`\n\t\t\tif (signal.trace) {\n\t\t\t\tsignal.trace();\n\t\t\t} else {\n\t\t\t\ttrace = get_stack('TracedAt');\n\n\t\t\t\tif (trace) {\n\t\t\t\t\tvar entry = tracing_expressions.entries.get(signal);\n\n\t\t\t\t\tif (entry === undefined) {\n\t\t\t\t\t\tentry = { traces: [] };\n\t\t\t\t\t\ttracing_expressions.entries.set(signal, entry);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar last = entry.traces[entry.traces.length - 1];\n\n\t\t\t\t\t// traces can be duplicated, e.g. by `snapshot` invoking both\n\t\t\t\t\t// both `getOwnPropertyDescriptor` and `get` traps at once\n\t\t\t\t\tif (trace.stack !== last?.stack) {\n\t\t\t\t\t\tentry.traces.push(trace);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (is_destroying_effect) {\n\t\tif (old_values.has(signal)) {\n\t\t\treturn old_values.get(signal);\n\t\t}\n\n\t\tif (is_derived) {\n\t\t\tderived = /** @type {Derived} */ (signal);\n\n\t\t\tvar value = derived.v;\n\n\t\t\t// if the derived is dirty and has reactions, or depends on the values that just changed, re-execute\n\t\t\t// (a derived can be maybe_dirty due to the effect destroy removing its last reaction)\n\t\t\tif (\n\t\t\t\t((derived.f & CLEAN) === 0 && derived.reactions !== null) ||\n\t\t\t\tdepends_on_old_values(derived)\n\t\t\t) {\n\t\t\t\tvalue = execute_derived(derived);\n\t\t\t}\n\n\t\t\told_values.set(derived, value);\n\n\t\t\treturn value;\n\t\t}\n\t} else if (is_derived) {\n\t\tderived = /** @type {Derived} */ (signal);\n\n\t\tif (batch_deriveds?.has(derived)) {\n\t\t\treturn batch_deriveds.get(derived);\n\t\t}\n\n\t\tif (is_dirty(derived)) {\n\t\t\tupdate_derived(derived);\n\t\t}\n\t}\n\n\tif ((signal.f & ERROR_VALUE) !== 0) {\n\t\tthrow signal.v;\n\t}\n\n\treturn signal.v;\n}\n\n/** @param {Derived} derived */\nfunction depends_on_old_values(derived) {\n\tif (derived.v === UNINITIALIZED) return true; // we don't know, so assume the worst\n\tif (derived.deps === null) return false;\n\n\tfor (const dep of derived.deps) {\n\t\tif (old_values.has(dep)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ((dep.f & DERIVED) !== 0 && depends_on_old_values(/** @type {Derived} */ (dep))) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * Like `get`, but checks for `undefined`. Used for `var` declarations because they can be accessed before being declared\n * @template V\n * @param {Value<V> | undefined} signal\n * @returns {V | undefined}\n */\nexport function safe_get(signal) {\n\treturn signal && get(signal);\n}\n\n/**\n * When used inside a [`$derived`](https://svelte.dev/docs/svelte/$derived) or [`$effect`](https://svelte.dev/docs/svelte/$effect),\n * any state read inside `fn` will not be treated as a dependency.\n *\n * ```ts\n * $effect(() => {\n *   // this will run when `data` changes, but not when `time` changes\n *   save(data, {\n *     timestamp: untrack(() => time)\n *   });\n * });\n * ```\n * @template T\n * @param {() => T} fn\n * @returns {T}\n */\nexport function untrack(fn) {\n\tvar previous_untracking = untracking;\n\ttry {\n\t\tuntracking = true;\n\t\treturn fn();\n\t} finally {\n\t\tuntracking = previous_untracking;\n\t}\n}\n\nconst STATUS_MASK = ~(DIRTY | MAYBE_DIRTY | CLEAN);\n\n/**\n * @param {Signal} signal\n * @param {number} status\n * @returns {void}\n */\nexport function set_signal_status(signal, status) {\n\tsignal.f = (signal.f & STATUS_MASK) | status;\n}\n\n/**\n * @param {Record<string, unknown>} obj\n * @param {string[]} keys\n * @returns {Record<string, unknown>}\n */\nexport function exclude_from_object(obj, keys) {\n\t/** @type {Record<string, unknown>} */\n\tvar result = {};\n\n\tfor (var key in obj) {\n\t\tif (!keys.includes(key)) {\n\t\t\tresult[key] = obj[key];\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Possibly traverse an object and read all its properties so that they're all reactive in case this is `$state`.\n * Does only check first level of an object for performance reasons (heuristic should be good for 99% of all cases).\n * @param {any} value\n * @returns {void}\n */\nexport function deep_read_state(value) {\n\tif (typeof value !== 'object' || !value || value instanceof EventTarget) {\n\t\treturn;\n\t}\n\n\tif (STATE_SYMBOL in value) {\n\t\tdeep_read(value);\n\t} else if (!Array.isArray(value)) {\n\t\tfor (let key in value) {\n\t\t\tconst prop = value[key];\n\t\t\tif (typeof prop === 'object' && prop && STATE_SYMBOL in prop) {\n\t\t\t\tdeep_read(prop);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Deeply traverse an object and read all its properties\n * so that they're all reactive in case this is `$state`\n * @param {any} value\n * @param {Set<any>} visited\n * @returns {void}\n */\nexport function deep_read(value, visited = new Set()) {\n\tif (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\t// We don't want to traverse DOM elements\n\t\t!(value instanceof EventTarget) &&\n\t\t!visited.has(value)\n\t) {\n\t\tvisited.add(value);\n\t\t// When working with a possible SvelteDate, this\n\t\t// will ensure we capture changes to it.\n\t\tif (value instanceof Date) {\n\t\t\tvalue.getTime();\n\t\t}\n\t\tfor (let key in value) {\n\t\t\ttry {\n\t\t\t\tdeep_read(value[key], visited);\n\t\t\t} catch (e) {\n\t\t\t\t// continue\n\t\t\t}\n\t\t}\n\t\tconst proto = get_prototype_of(value);\n\t\tif (\n\t\t\tproto !== Object.prototype &&\n\t\t\tproto !== Array.prototype &&\n\t\t\tproto !== Map.prototype &&\n\t\t\tproto !== Set.prototype &&\n\t\t\tproto !== Date.prototype\n\t\t) {\n\t\t\tconst descriptors = get_descriptors(proto);\n\t\t\tfor (let key in descriptors) {\n\t\t\t\tconst get = descriptors[key].get;\n\t\t\t\tif (get) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tget.call(value);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t// continue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n","const regex_return_characters = /\\r/g;\n\n/**\n * @param {string} str\n * @returns {string}\n */\nexport function hash(str) {\n\tstr = str.replace(regex_return_characters, '');\n\tlet hash = 5381;\n\tlet i = str.length;\n\n\twhile (i--) hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n\treturn (hash >>> 0).toString(36);\n}\n\nconst VOID_ELEMENT_NAMES = [\n\t'area',\n\t'base',\n\t'br',\n\t'col',\n\t'command',\n\t'embed',\n\t'hr',\n\t'img',\n\t'input',\n\t'keygen',\n\t'link',\n\t'meta',\n\t'param',\n\t'source',\n\t'track',\n\t'wbr'\n];\n\n/**\n * Returns `true` if `name` is of a void element\n * @param {string} name\n */\nexport function is_void(name) {\n\treturn VOID_ELEMENT_NAMES.includes(name) || name.toLowerCase() === '!doctype';\n}\n\nconst RESERVED_WORDS = [\n\t'arguments',\n\t'await',\n\t'break',\n\t'case',\n\t'catch',\n\t'class',\n\t'const',\n\t'continue',\n\t'debugger',\n\t'default',\n\t'delete',\n\t'do',\n\t'else',\n\t'enum',\n\t'eval',\n\t'export',\n\t'extends',\n\t'false',\n\t'finally',\n\t'for',\n\t'function',\n\t'if',\n\t'implements',\n\t'import',\n\t'in',\n\t'instanceof',\n\t'interface',\n\t'let',\n\t'new',\n\t'null',\n\t'package',\n\t'private',\n\t'protected',\n\t'public',\n\t'return',\n\t'static',\n\t'super',\n\t'switch',\n\t'this',\n\t'throw',\n\t'true',\n\t'try',\n\t'typeof',\n\t'var',\n\t'void',\n\t'while',\n\t'with',\n\t'yield'\n];\n\n/**\n * Returns `true` if `word` is a reserved JavaScript keyword\n * @param {string} word\n */\nexport function is_reserved(word) {\n\treturn RESERVED_WORDS.includes(word);\n}\n\n/**\n * @param {string} name\n */\nexport function is_capture_event(name) {\n\treturn name.endsWith('capture') && name !== 'gotpointercapture' && name !== 'lostpointercapture';\n}\n\n/** List of Element events that will be delegated */\nconst DELEGATED_EVENTS = [\n\t'beforeinput',\n\t'click',\n\t'change',\n\t'dblclick',\n\t'contextmenu',\n\t'focusin',\n\t'focusout',\n\t'input',\n\t'keydown',\n\t'keyup',\n\t'mousedown',\n\t'mousemove',\n\t'mouseout',\n\t'mouseover',\n\t'mouseup',\n\t'pointerdown',\n\t'pointermove',\n\t'pointerout',\n\t'pointerover',\n\t'pointerup',\n\t'touchend',\n\t'touchmove',\n\t'touchstart'\n];\n\n/**\n * Returns `true` if `event_name` is a delegated event\n * @param {string} event_name\n */\nexport function is_delegated(event_name) {\n\treturn DELEGATED_EVENTS.includes(event_name);\n}\n\n/**\n * Attributes that are boolean, i.e. they are present or not present.\n */\nconst DOM_BOOLEAN_ATTRIBUTES = [\n\t'allowfullscreen',\n\t'async',\n\t'autofocus',\n\t'autoplay',\n\t'checked',\n\t'controls',\n\t'default',\n\t'disabled',\n\t'formnovalidate',\n\t'hidden',\n\t'indeterminate',\n\t'inert',\n\t'ismap',\n\t'loop',\n\t'multiple',\n\t'muted',\n\t'nomodule',\n\t'novalidate',\n\t'open',\n\t'playsinline',\n\t'readonly',\n\t'required',\n\t'reversed',\n\t'seamless',\n\t'selected',\n\t'webkitdirectory',\n\t'defer',\n\t'disablepictureinpicture',\n\t'disableremoteplayback'\n];\n\n/**\n * Returns `true` if `name` is a boolean attribute\n * @param {string} name\n */\nexport function is_boolean_attribute(name) {\n\treturn DOM_BOOLEAN_ATTRIBUTES.includes(name);\n}\n\n/**\n * @type {Record<string, string>}\n * List of attribute names that should be aliased to their property names\n * because they behave differently between setting them as an attribute and\n * setting them as a property.\n */\nconst ATTRIBUTE_ALIASES = {\n\t// no `class: 'className'` because we handle that separately\n\tformnovalidate: 'formNoValidate',\n\tismap: 'isMap',\n\tnomodule: 'noModule',\n\tplaysinline: 'playsInline',\n\treadonly: 'readOnly',\n\tdefaultvalue: 'defaultValue',\n\tdefaultchecked: 'defaultChecked',\n\tsrcobject: 'srcObject',\n\tnovalidate: 'noValidate',\n\tallowfullscreen: 'allowFullscreen',\n\tdisablepictureinpicture: 'disablePictureInPicture',\n\tdisableremoteplayback: 'disableRemotePlayback'\n};\n\n/**\n * @param {string} name\n */\nexport function normalize_attribute(name) {\n\tname = name.toLowerCase();\n\treturn ATTRIBUTE_ALIASES[name] ?? name;\n}\n\nconst DOM_PROPERTIES = [\n\t...DOM_BOOLEAN_ATTRIBUTES,\n\t'formNoValidate',\n\t'isMap',\n\t'noModule',\n\t'playsInline',\n\t'readOnly',\n\t'value',\n\t'volume',\n\t'defaultValue',\n\t'defaultChecked',\n\t'srcObject',\n\t'noValidate',\n\t'allowFullscreen',\n\t'disablePictureInPicture',\n\t'disableRemotePlayback'\n];\n\n/**\n * @param {string} name\n */\nexport function is_dom_property(name) {\n\treturn DOM_PROPERTIES.includes(name);\n}\n\nconst NON_STATIC_PROPERTIES = ['autofocus', 'muted', 'defaultValue', 'defaultChecked'];\n\n/**\n * Returns `true` if the given attribute cannot be set through the template\n * string, i.e. needs some kind of JavaScript handling to work.\n * @param {string} name\n */\nexport function cannot_be_set_statically(name) {\n\treturn NON_STATIC_PROPERTIES.includes(name);\n}\n\n/**\n * Subset of delegated events which should be passive by default.\n * These two are already passive via browser defaults on window, document and body.\n * But since\n * - we're delegating them\n * - they happen often\n * - they apply to mobile which is generally less performant\n * we're marking them as passive by default for other elements, too.\n */\nconst PASSIVE_EVENTS = ['touchstart', 'touchmove'];\n\n/**\n * Returns `true` if `name` is a passive event\n * @param {string} name\n */\nexport function is_passive_event(name) {\n\treturn PASSIVE_EVENTS.includes(name);\n}\n\nconst CONTENT_EDITABLE_BINDINGS = ['textContent', 'innerHTML', 'innerText'];\n\n/** @param {string} name */\nexport function is_content_editable_binding(name) {\n\treturn CONTENT_EDITABLE_BINDINGS.includes(name);\n}\n\nconst LOAD_ERROR_ELEMENTS = [\n\t'body',\n\t'embed',\n\t'iframe',\n\t'img',\n\t'link',\n\t'object',\n\t'script',\n\t'style',\n\t'track'\n];\n\n/**\n * Returns `true` if the element emits `load` and `error` events\n * @param {string} name\n */\nexport function is_load_error_element(name) {\n\treturn LOAD_ERROR_ELEMENTS.includes(name);\n}\n\nconst SVG_ELEMENTS = [\n\t'altGlyph',\n\t'altGlyphDef',\n\t'altGlyphItem',\n\t'animate',\n\t'animateColor',\n\t'animateMotion',\n\t'animateTransform',\n\t'circle',\n\t'clipPath',\n\t'color-profile',\n\t'cursor',\n\t'defs',\n\t'desc',\n\t'discard',\n\t'ellipse',\n\t'feBlend',\n\t'feColorMatrix',\n\t'feComponentTransfer',\n\t'feComposite',\n\t'feConvolveMatrix',\n\t'feDiffuseLighting',\n\t'feDisplacementMap',\n\t'feDistantLight',\n\t'feDropShadow',\n\t'feFlood',\n\t'feFuncA',\n\t'feFuncB',\n\t'feFuncG',\n\t'feFuncR',\n\t'feGaussianBlur',\n\t'feImage',\n\t'feMerge',\n\t'feMergeNode',\n\t'feMorphology',\n\t'feOffset',\n\t'fePointLight',\n\t'feSpecularLighting',\n\t'feSpotLight',\n\t'feTile',\n\t'feTurbulence',\n\t'filter',\n\t'font',\n\t'font-face',\n\t'font-face-format',\n\t'font-face-name',\n\t'font-face-src',\n\t'font-face-uri',\n\t'foreignObject',\n\t'g',\n\t'glyph',\n\t'glyphRef',\n\t'hatch',\n\t'hatchpath',\n\t'hkern',\n\t'image',\n\t'line',\n\t'linearGradient',\n\t'marker',\n\t'mask',\n\t'mesh',\n\t'meshgradient',\n\t'meshpatch',\n\t'meshrow',\n\t'metadata',\n\t'missing-glyph',\n\t'mpath',\n\t'path',\n\t'pattern',\n\t'polygon',\n\t'polyline',\n\t'radialGradient',\n\t'rect',\n\t'set',\n\t'solidcolor',\n\t'stop',\n\t'svg',\n\t'switch',\n\t'symbol',\n\t'text',\n\t'textPath',\n\t'tref',\n\t'tspan',\n\t'unknown',\n\t'use',\n\t'view',\n\t'vkern'\n];\n\n/** @param {string} name */\nexport function is_svg(name) {\n\treturn SVG_ELEMENTS.includes(name);\n}\n\nconst MATHML_ELEMENTS = [\n\t'annotation',\n\t'annotation-xml',\n\t'maction',\n\t'math',\n\t'merror',\n\t'mfrac',\n\t'mi',\n\t'mmultiscripts',\n\t'mn',\n\t'mo',\n\t'mover',\n\t'mpadded',\n\t'mphantom',\n\t'mprescripts',\n\t'mroot',\n\t'mrow',\n\t'ms',\n\t'mspace',\n\t'msqrt',\n\t'mstyle',\n\t'msub',\n\t'msubsup',\n\t'msup',\n\t'mtable',\n\t'mtd',\n\t'mtext',\n\t'mtr',\n\t'munder',\n\t'munderover',\n\t'semantics'\n];\n\n/** @param {string} name */\nexport function is_mathml(name) {\n\treturn MATHML_ELEMENTS.includes(name);\n}\n\nconst STATE_CREATION_RUNES = /** @type {const} */ ([\n\t'$state',\n\t'$state.raw',\n\t'$derived',\n\t'$derived.by'\n]);\n\nconst RUNES = /** @type {const} */ ([\n\t...STATE_CREATION_RUNES,\n\t'$state.snapshot',\n\t'$props',\n\t'$props.id',\n\t'$bindable',\n\t'$effect',\n\t'$effect.pre',\n\t'$effect.tracking',\n\t'$effect.root',\n\t'$effect.pending',\n\t'$inspect',\n\t'$inspect().with',\n\t'$inspect.trace',\n\t'$host'\n]);\n\n/** @typedef {typeof RUNES[number]} RuneName */\n\n/**\n * @param {string} name\n * @returns {name is RuneName}\n */\nexport function is_rune(name) {\n\treturn RUNES.includes(/** @type {RuneName} */ (name));\n}\n\n/** @typedef {typeof STATE_CREATION_RUNES[number]} StateCreationRuneName */\n\n/**\n * @param {string} name\n * @returns {name is StateCreationRuneName}\n */\nexport function is_state_creation_rune(name) {\n\treturn STATE_CREATION_RUNES.includes(/** @type {StateCreationRuneName} */ (name));\n}\n\n/** List of elements that require raw contents and should not have SSR comments put in them */\nconst RAW_TEXT_ELEMENTS = /** @type {const} */ (['textarea', 'script', 'style', 'title']);\n\n/** @param {string} name */\nexport function is_raw_text_element(name) {\n\treturn RAW_TEXT_ELEMENTS.includes(/** @type {typeof RAW_TEXT_ELEMENTS[number]} */ (name));\n}\n\n/**\n * Prevent devtools trying to make `location` a clickable link by inserting a zero-width space\n * @template {string | undefined} T\n * @param {T} location\n * @returns {T};\n */\nexport function sanitize_location(location) {\n\treturn /** @type {T} */ (location?.replace(/\\//g, '/\\u200b'));\n}\n","import { teardown } from '../../reactivity/effects.js';\nimport { define_property, is_array } from '../../../shared/utils.js';\nimport { hydrating } from '../hydration.js';\nimport { queue_micro_task } from '../task.js';\nimport { FILENAME } from '../../../../constants.js';\nimport * as w from '../../warnings.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../runtime.js';\nimport { without_reactive_context } from './bindings/shared.js';\n\n/** @type {Set<string>} */\nexport const all_registered_events = new Set();\n\n/** @type {Set<(events: Array<string>) => void>} */\nexport const root_event_handles = new Set();\n\n/**\n * SSR adds onload and onerror attributes to catch those events before the hydration.\n * This function detects those cases, removes the attributes and replays the events.\n * @param {HTMLElement} dom\n */\nexport function replay_events(dom) {\n\tif (!hydrating) return;\n\n\tdom.removeAttribute('onload');\n\tdom.removeAttribute('onerror');\n\t// @ts-expect-error\n\tconst event = dom.__e;\n\tif (event !== undefined) {\n\t\t// @ts-expect-error\n\t\tdom.__e = undefined;\n\t\tqueueMicrotask(() => {\n\t\t\tif (dom.isConnected) {\n\t\t\t\tdom.dispatchEvent(event);\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * @param {string} event_name\n * @param {EventTarget} dom\n * @param {EventListener} [handler]\n * @param {AddEventListenerOptions} [options]\n */\nexport function create_event(event_name, dom, handler, options = {}) {\n\t/**\n\t * @this {EventTarget}\n\t */\n\tfunction target_handler(/** @type {Event} */ event) {\n\t\tif (!options.capture) {\n\t\t\t// Only call in the bubble phase, else delegated events would be called before the capturing events\n\t\t\thandle_event_propagation.call(dom, event);\n\t\t}\n\t\tif (!event.cancelBubble) {\n\t\t\treturn without_reactive_context(() => {\n\t\t\t\treturn handler?.call(this, event);\n\t\t\t});\n\t\t}\n\t}\n\n\t// Chrome has a bug where pointer events don't work when attached to a DOM element that has been cloned\n\t// with cloneNode() and the DOM element is disconnected from the document. To ensure the event works, we\n\t// defer the attachment till after it's been appended to the document. TODO: remove this once Chrome fixes\n\t// this bug. The same applies to wheel events and touch events.\n\tif (\n\t\tevent_name.startsWith('pointer') ||\n\t\tevent_name.startsWith('touch') ||\n\t\tevent_name === 'wheel'\n\t) {\n\t\tqueue_micro_task(() => {\n\t\t\tdom.addEventListener(event_name, target_handler, options);\n\t\t});\n\t} else {\n\t\tdom.addEventListener(event_name, target_handler, options);\n\t}\n\n\treturn target_handler;\n}\n\n/**\n * Attaches an event handler to an element and returns a function that removes the handler. Using this\n * rather than `addEventListener` will preserve the correct order relative to handlers added declaratively\n * (with attributes like `onclick`), which use event delegation for performance reasons\n *\n * @param {EventTarget} element\n * @param {string} type\n * @param {EventListener} handler\n * @param {AddEventListenerOptions} [options]\n */\nexport function on(element, type, handler, options = {}) {\n\tvar target_handler = create_event(type, element, handler, options);\n\n\treturn () => {\n\t\telement.removeEventListener(type, target_handler, options);\n\t};\n}\n\n/**\n * @param {string} event_name\n * @param {Element} dom\n * @param {EventListener} [handler]\n * @param {boolean} [capture]\n * @param {boolean} [passive]\n * @returns {void}\n */\nexport function event(event_name, dom, handler, capture, passive) {\n\tvar options = { capture, passive };\n\tvar target_handler = create_event(event_name, dom, handler, options);\n\n\tif (\n\t\tdom === document.body ||\n\t\t// @ts-ignore\n\t\tdom === window ||\n\t\t// @ts-ignore\n\t\tdom === document ||\n\t\t// Firefox has quirky behavior, it can happen that we still get \"canplay\" events when the element is already removed\n\t\tdom instanceof HTMLMediaElement\n\t) {\n\t\tteardown(() => {\n\t\t\tdom.removeEventListener(event_name, target_handler, options);\n\t\t});\n\t}\n}\n\n/**\n * @param {Array<string>} events\n * @returns {void}\n */\nexport function delegate(events) {\n\tfor (var i = 0; i < events.length; i++) {\n\t\tall_registered_events.add(events[i]);\n\t}\n\n\tfor (var fn of root_event_handles) {\n\t\tfn(events);\n\t}\n}\n\n// used to store the reference to the currently propagated event\n// to prevent garbage collection between microtasks in Firefox\n// If the event object is GCed too early, the expando __root property\n// set on the event object is lost, causing the event delegation\n// to process the event twice\nlet last_propagated_event = null;\n\n/**\n * @this {EventTarget}\n * @param {Event} event\n * @returns {void}\n */\nexport function handle_event_propagation(event) {\n\tvar handler_element = this;\n\tvar owner_document = /** @type {Node} */ (handler_element).ownerDocument;\n\tvar event_name = event.type;\n\tvar path = event.composedPath?.() || [];\n\tvar current_target = /** @type {null | Element} */ (path[0] || event.target);\n\n\tlast_propagated_event = event;\n\n\t// composedPath contains list of nodes the event has propagated through.\n\t// We check __root to skip all nodes below it in case this is a\n\t// parent of the __root node, which indicates that there's nested\n\t// mounted apps. In this case we don't want to trigger events multiple times.\n\tvar path_idx = 0;\n\n\t// the `last_propagated_event === event` check is redundant, but\n\t// without it the variable will be DCE'd and things will\n\t// fail mysteriously in Firefox\n\t// @ts-expect-error is added below\n\tvar handled_at = last_propagated_event === event && event.__root;\n\n\tif (handled_at) {\n\t\tvar at_idx = path.indexOf(handled_at);\n\t\tif (\n\t\t\tat_idx !== -1 &&\n\t\t\t(handler_element === document || handler_element === /** @type {any} */ (window))\n\t\t) {\n\t\t\t// This is the fallback document listener or a window listener, but the event was already handled\n\t\t\t// -> ignore, but set handle_at to document/window so that we're resetting the event\n\t\t\t// chain in case someone manually dispatches the same event object again.\n\t\t\t// @ts-expect-error\n\t\t\tevent.__root = handler_element;\n\t\t\treturn;\n\t\t}\n\n\t\t// We're deliberately not skipping if the index is higher, because\n\t\t// someone could create an event programmatically and emit it multiple times,\n\t\t// in which case we want to handle the whole propagation chain properly each time.\n\t\t// (this will only be a false negative if the event is dispatched multiple times and\n\t\t// the fallback document listener isn't reached in between, but that's super rare)\n\t\tvar handler_idx = path.indexOf(handler_element);\n\t\tif (handler_idx === -1) {\n\t\t\t// handle_idx can theoretically be -1 (happened in some JSDOM testing scenarios with an event listener on the window object)\n\t\t\t// so guard against that, too, and assume that everything was handled at this point.\n\t\t\treturn;\n\t\t}\n\n\t\tif (at_idx <= handler_idx) {\n\t\t\tpath_idx = at_idx;\n\t\t}\n\t}\n\n\tcurrent_target = /** @type {Element} */ (path[path_idx] || event.target);\n\t// there can only be one delegated event per element, and we either already handled the current target,\n\t// or this is the very first target in the chain which has a non-delegated listener, in which case it's safe\n\t// to handle a possible delegated event on it later (through the root delegation listener for example).\n\tif (current_target === handler_element) return;\n\n\t// Proxy currentTarget to correct target\n\tdefine_property(event, 'currentTarget', {\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\treturn current_target || owner_document;\n\t\t}\n\t});\n\n\t// This started because of Chromium issue https://chromestatus.com/feature/5128696823545856,\n\t// where removal or moving of of the DOM can cause sync `blur` events to fire, which can cause logic\n\t// to run inside the current `active_reaction`, which isn't what we want at all. However, on reflection,\n\t// it's probably best that all event handled by Svelte have this behaviour, as we don't really want\n\t// an event handler to run in the context of another reaction or effect.\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\n\ttry {\n\t\t/**\n\t\t * @type {unknown}\n\t\t */\n\t\tvar throw_error;\n\t\t/**\n\t\t * @type {unknown[]}\n\t\t */\n\t\tvar other_errors = [];\n\n\t\twhile (current_target !== null) {\n\t\t\t/** @type {null | Element} */\n\t\t\tvar parent_element =\n\t\t\t\tcurrent_target.assignedSlot ||\n\t\t\t\tcurrent_target.parentNode ||\n\t\t\t\t/** @type {any} */ (current_target).host ||\n\t\t\t\tnull;\n\n\t\t\ttry {\n\t\t\t\t// @ts-expect-error\n\t\t\t\tvar delegated = current_target['__' + event_name];\n\n\t\t\t\tif (\n\t\t\t\t\tdelegated != null &&\n\t\t\t\t\t(!(/** @type {any} */ (current_target).disabled) ||\n\t\t\t\t\t\t// DOM could've been updated already by the time this is reached, so we check this as well\n\t\t\t\t\t\t// -> the target could not have been disabled because it emits the event in the first place\n\t\t\t\t\t\tevent.target === current_target)\n\t\t\t\t) {\n\t\t\t\t\tif (is_array(delegated)) {\n\t\t\t\t\t\tvar [fn, ...data] = delegated;\n\t\t\t\t\t\tfn.apply(current_target, [event, ...data]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdelegated.call(current_target, event);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (throw_error) {\n\t\t\t\t\tother_errors.push(error);\n\t\t\t\t} else {\n\t\t\t\t\tthrow_error = error;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (event.cancelBubble || parent_element === handler_element || parent_element === null) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcurrent_target = parent_element;\n\t\t}\n\n\t\tif (throw_error) {\n\t\t\tfor (let error of other_errors) {\n\t\t\t\t// Throw the rest of the errors, one-by-one on a microtask\n\t\t\t\tqueueMicrotask(() => {\n\t\t\t\t\tthrow error;\n\t\t\t\t});\n\t\t\t}\n\t\t\tthrow throw_error;\n\t\t}\n\t} finally {\n\t\t// @ts-expect-error is used above\n\t\tevent.__root = handler_element;\n\t\t// @ts-ignore remove proxy on currentTarget\n\t\tdelete event.currentTarget;\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_effect(previous_effect);\n\t}\n}\n\n/**\n * In dev, warn if an event handler is not a function, as it means the\n * user probably called the handler or forgot to add a `() =>`\n * @param {() => (event: Event, ...args: any) => void} thunk\n * @param {EventTarget} element\n * @param {[Event, ...any]} args\n * @param {any} component\n * @param {[number, number]} [loc]\n * @param {boolean} [remove_parens]\n */\nexport function apply(\n\tthunk,\n\telement,\n\targs,\n\tcomponent,\n\tloc,\n\thas_side_effects = false,\n\tremove_parens = false\n) {\n\tlet handler;\n\tlet error;\n\n\ttry {\n\t\thandler = thunk();\n\t} catch (e) {\n\t\terror = e;\n\t}\n\n\tif (typeof handler !== 'function' && (has_side_effects || handler != null || error)) {\n\t\tconst filename = component?.[FILENAME];\n\t\tconst location = loc ? ` at ${filename}:${loc[0]}:${loc[1]}` : ` in ${filename}`;\n\t\tconst phase = args[0]?.eventPhase < Event.BUBBLING_PHASE ? 'capture' : '';\n\t\tconst event_name = args[0]?.type + phase;\n\t\tconst description = `\\`${event_name}\\` handler${location}`;\n\t\tconst suggestion = remove_parens ? 'remove the trailing `()`' : 'add a leading `() =>`';\n\n\t\tw.event_handler_invalid(description, suggestion);\n\n\t\tif (error) {\n\t\t\tthrow error;\n\t\t}\n\t}\n\thandler?.apply(element, args);\n}\n","/** @import { TemplateNode } from '#client' */\nimport { hydrate_node, hydrating, set_hydrate_node, set_hydrating } from '../hydration.js';\nimport { create_text, get_first_child, get_next_sibling } from '../operations.js';\nimport { block } from '../../reactivity/effects.js';\nimport { COMMENT_NODE, HEAD_EFFECT } from '#client/constants';\nimport { HYDRATION_START } from '../../../../constants.js';\n\n/**\n * @type {Node | undefined}\n */\nlet head_anchor;\n\nexport function reset_head_anchor() {\n\thead_anchor = undefined;\n}\n\n/**\n * @param {(anchor: Node) => void} render_fn\n * @returns {void}\n */\nexport function head(render_fn) {\n\t// The head function may be called after the first hydration pass and ssr comment nodes may still be present,\n\t// therefore we need to skip that when we detect that we're not in hydration mode.\n\tlet previous_hydrate_node = null;\n\tlet was_hydrating = hydrating;\n\n\t/** @type {Comment | Text} */\n\tvar anchor;\n\n\tif (hydrating) {\n\t\tprevious_hydrate_node = hydrate_node;\n\n\t\t// There might be multiple head blocks in our app, so we need to account for each one needing independent hydration.\n\t\tif (head_anchor === undefined) {\n\t\t\thead_anchor = /** @type {TemplateNode} */ (get_first_child(document.head));\n\t\t}\n\n\t\twhile (\n\t\t\thead_anchor !== null &&\n\t\t\t(head_anchor.nodeType !== COMMENT_NODE ||\n\t\t\t\t/** @type {Comment} */ (head_anchor).data !== HYDRATION_START)\n\t\t) {\n\t\t\thead_anchor = /** @type {TemplateNode} */ (get_next_sibling(head_anchor));\n\t\t}\n\n\t\t// If we can't find an opening hydration marker, skip hydration (this can happen\n\t\t// if a framework rendered body but not head content)\n\t\tif (head_anchor === null) {\n\t\t\tset_hydrating(false);\n\t\t} else {\n\t\t\thead_anchor = set_hydrate_node(/** @type {TemplateNode} */ (get_next_sibling(head_anchor)));\n\t\t}\n\t}\n\n\tif (!hydrating) {\n\t\tanchor = document.head.appendChild(create_text());\n\t}\n\n\ttry {\n\t\tblock(() => render_fn(anchor), HEAD_EFFECT);\n\t} finally {\n\t\tif (was_hydrating) {\n\t\t\tset_hydrating(true);\n\t\t\thead_anchor = hydrate_node; // so that next head block starts from the correct node\n\t\t\tset_hydrate_node(/** @type {TemplateNode} */ (previous_hydrate_node));\n\t\t}\n\t}\n}\n","/** @param {string} html */\nexport function create_fragment_from_html(html) {\n\tvar elem = document.createElement('template');\n\telem.innerHTML = html.replaceAll('<!>', '<!---->'); // XHTML compliance\n\treturn elem.content;\n}\n","/** @import { Effect, TemplateNode } from '#client' */\n/** @import { TemplateStructure } from './types' */\nimport { hydrate_next, hydrate_node, hydrating, set_hydrate_node } from './hydration.js';\nimport {\n\tcreate_text,\n\tget_first_child,\n\tis_firefox,\n\tcreate_element,\n\tcreate_fragment,\n\tcreate_comment,\n\tset_attribute\n} from './operations.js';\nimport { create_fragment_from_html } from './reconciler.js';\nimport { active_effect } from '../runtime.js';\nimport {\n\tNAMESPACE_MATHML,\n\tNAMESPACE_SVG,\n\tTEMPLATE_FRAGMENT,\n\tTEMPLATE_USE_IMPORT_NODE,\n\tTEMPLATE_USE_MATHML,\n\tTEMPLATE_USE_SVG\n} from '../../../constants.js';\nimport { COMMENT_NODE, DOCUMENT_FRAGMENT_NODE, TEXT_NODE } from '#client/constants';\n\n/**\n * @param {TemplateNode} start\n * @param {TemplateNode | null} end\n */\nexport function assign_nodes(start, end) {\n\tvar effect = /** @type {Effect} */ (active_effect);\n\tif (effect.nodes_start === null) {\n\t\teffect.nodes_start = start;\n\t\teffect.nodes_end = end;\n\t}\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_html(content, flags) {\n\tvar is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;\n\tvar use_import_node = (flags & TEMPLATE_USE_IMPORT_NODE) !== 0;\n\n\t/** @type {Node} */\n\tvar node;\n\n\t/**\n\t * Whether or not the first item is a text/element node. If not, we need to\n\t * create an additional comment node to act as `effect.nodes.start`\n\t */\n\tvar has_start = !content.startsWith('<!>');\n\n\treturn () => {\n\t\tif (hydrating) {\n\t\t\tassign_nodes(hydrate_node, null);\n\t\t\treturn hydrate_node;\n\t\t}\n\n\t\tif (node === undefined) {\n\t\t\tnode = create_fragment_from_html(has_start ? content : '<!>' + content);\n\t\t\tif (!is_fragment) node = /** @type {Node} */ (get_first_child(node));\n\t\t}\n\n\t\tvar clone = /** @type {TemplateNode} */ (\n\t\t\tuse_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true)\n\t\t);\n\n\t\tif (is_fragment) {\n\t\t\tvar start = /** @type {TemplateNode} */ (get_first_child(clone));\n\t\t\tvar end = /** @type {TemplateNode} */ (clone.lastChild);\n\n\t\t\tassign_nodes(start, end);\n\t\t} else {\n\t\t\tassign_nodes(clone, clone);\n\t\t}\n\n\t\treturn clone;\n\t};\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n * @param {'svg' | 'math'} ns\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nfunction from_namespace(content, flags, ns = 'svg') {\n\t/**\n\t * Whether or not the first item is a text/element node. If not, we need to\n\t * create an additional comment node to act as `effect.nodes.start`\n\t */\n\tvar has_start = !content.startsWith('<!>');\n\n\tvar is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;\n\tvar wrapped = `<${ns}>${has_start ? content : '<!>' + content}</${ns}>`;\n\n\t/** @type {Element | DocumentFragment} */\n\tvar node;\n\n\treturn () => {\n\t\tif (hydrating) {\n\t\t\tassign_nodes(hydrate_node, null);\n\t\t\treturn hydrate_node;\n\t\t}\n\n\t\tif (!node) {\n\t\t\tvar fragment = /** @type {DocumentFragment} */ (create_fragment_from_html(wrapped));\n\t\t\tvar root = /** @type {Element} */ (get_first_child(fragment));\n\n\t\t\tif (is_fragment) {\n\t\t\t\tnode = document.createDocumentFragment();\n\t\t\t\twhile (get_first_child(root)) {\n\t\t\t\t\tnode.appendChild(/** @type {Node} */ (get_first_child(root)));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnode = /** @type {Element} */ (get_first_child(root));\n\t\t\t}\n\t\t}\n\n\t\tvar clone = /** @type {TemplateNode} */ (node.cloneNode(true));\n\n\t\tif (is_fragment) {\n\t\t\tvar start = /** @type {TemplateNode} */ (get_first_child(clone));\n\t\t\tvar end = /** @type {TemplateNode} */ (clone.lastChild);\n\n\t\t\tassign_nodes(start, end);\n\t\t} else {\n\t\t\tassign_nodes(clone, clone);\n\t\t}\n\n\t\treturn clone;\n\t};\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_svg(content, flags) {\n\treturn from_namespace(content, flags, 'svg');\n}\n\n/**\n * @param {string} content\n * @param {number} flags\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_mathml(content, flags) {\n\treturn from_namespace(content, flags, 'math');\n}\n\n/**\n * @param {TemplateStructure[]} structure\n * @param {typeof NAMESPACE_SVG | typeof NAMESPACE_MATHML | undefined} [ns]\n */\nfunction fragment_from_tree(structure, ns) {\n\tvar fragment = create_fragment();\n\n\tfor (var item of structure) {\n\t\tif (typeof item === 'string') {\n\t\t\tfragment.append(create_text(item));\n\t\t\tcontinue;\n\t\t}\n\n\t\t// if `preserveComments === true`, comments are represented as `['// <data>']`\n\t\tif (item === undefined || item[0][0] === '/') {\n\t\t\tfragment.append(create_comment(item ? item[0].slice(3) : ''));\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst [name, attributes, ...children] = item;\n\n\t\tconst namespace = name === 'svg' ? NAMESPACE_SVG : name === 'math' ? NAMESPACE_MATHML : ns;\n\n\t\tvar element = create_element(name, namespace, attributes?.is);\n\n\t\tfor (var key in attributes) {\n\t\t\tset_attribute(element, key, attributes[key]);\n\t\t}\n\n\t\tif (children.length > 0) {\n\t\t\tvar target =\n\t\t\t\telement.tagName === 'TEMPLATE'\n\t\t\t\t\t? /** @type {HTMLTemplateElement} */ (element).content\n\t\t\t\t\t: element;\n\n\t\t\ttarget.append(\n\t\t\t\tfragment_from_tree(children, element.tagName === 'foreignObject' ? undefined : namespace)\n\t\t\t);\n\t\t}\n\n\t\tfragment.append(element);\n\t}\n\n\treturn fragment;\n}\n\n/**\n * @param {TemplateStructure[]} structure\n * @param {number} flags\n * @returns {() => Node | Node[]}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function from_tree(structure, flags) {\n\tvar is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;\n\tvar use_import_node = (flags & TEMPLATE_USE_IMPORT_NODE) !== 0;\n\n\t/** @type {Node} */\n\tvar node;\n\n\treturn () => {\n\t\tif (hydrating) {\n\t\t\tassign_nodes(hydrate_node, null);\n\t\t\treturn hydrate_node;\n\t\t}\n\n\t\tif (node === undefined) {\n\t\t\tconst ns =\n\t\t\t\t(flags & TEMPLATE_USE_SVG) !== 0\n\t\t\t\t\t? NAMESPACE_SVG\n\t\t\t\t\t: (flags & TEMPLATE_USE_MATHML) !== 0\n\t\t\t\t\t\t? NAMESPACE_MATHML\n\t\t\t\t\t\t: undefined;\n\n\t\t\tnode = fragment_from_tree(structure, ns);\n\t\t\tif (!is_fragment) node = /** @type {Node} */ (get_first_child(node));\n\t\t}\n\n\t\tvar clone = /** @type {TemplateNode} */ (\n\t\t\tuse_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true)\n\t\t);\n\n\t\tif (is_fragment) {\n\t\t\tvar start = /** @type {TemplateNode} */ (get_first_child(clone));\n\t\t\tvar end = /** @type {TemplateNode} */ (clone.lastChild);\n\n\t\t\tassign_nodes(start, end);\n\t\t} else {\n\t\t\tassign_nodes(clone, clone);\n\t\t}\n\n\t\treturn clone;\n\t};\n}\n\n/**\n * @param {() => Element | DocumentFragment} fn\n */\nexport function with_script(fn) {\n\treturn () => run_scripts(fn());\n}\n\n/**\n * Creating a document fragment from HTML that contains script tags will not execute\n * the scripts. We need to replace the script tags with new ones so that they are executed.\n * @param {Element | DocumentFragment} node\n * @returns {Node | Node[]}\n */\nfunction run_scripts(node) {\n\t// scripts were SSR'd, in which case they will run\n\tif (hydrating) return node;\n\n\tconst is_fragment = node.nodeType === DOCUMENT_FRAGMENT_NODE;\n\tconst scripts =\n\t\t/** @type {HTMLElement} */ (node).tagName === 'SCRIPT'\n\t\t\t? [/** @type {HTMLScriptElement} */ (node)]\n\t\t\t: node.querySelectorAll('script');\n\tconst effect = /** @type {Effect} */ (active_effect);\n\n\tfor (const script of scripts) {\n\t\tconst clone = document.createElement('script');\n\t\tfor (var attribute of script.attributes) {\n\t\t\tclone.setAttribute(attribute.name, attribute.value);\n\t\t}\n\n\t\tclone.textContent = script.textContent;\n\n\t\t// The script has changed - if it's at the edges, the effect now points at dead nodes\n\t\tif (is_fragment ? node.firstChild === script : node === script) {\n\t\t\teffect.nodes_start = clone;\n\t\t}\n\t\tif (is_fragment ? node.lastChild === script : node === script) {\n\t\t\teffect.nodes_end = clone;\n\t\t}\n\n\t\tscript.replaceWith(clone);\n\t}\n\treturn node;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {any} value\n */\nexport function text(value = '') {\n\tif (!hydrating) {\n\t\tvar t = create_text(value + '');\n\t\tassign_nodes(t, t);\n\t\treturn t;\n\t}\n\n\tvar node = hydrate_node;\n\n\tif (node.nodeType !== TEXT_NODE) {\n\t\t// if an {expression} is empty during SSR, we need to insert an empty text node\n\t\tnode.before((node = create_text()));\n\t\tset_hydrate_node(node);\n\t}\n\n\tassign_nodes(node, node);\n\treturn node;\n}\n\nexport function comment() {\n\t// we're not delegating to `template` here for performance reasons\n\tif (hydrating) {\n\t\tassign_nodes(hydrate_node, null);\n\t\treturn hydrate_node;\n\t}\n\n\tvar frag = document.createDocumentFragment();\n\tvar start = document.createComment('');\n\tvar anchor = create_text();\n\tfrag.append(start, anchor);\n\n\tassign_nodes(start, anchor);\n\n\treturn frag;\n}\n\n/**\n * Assign the created (or in hydration mode, traversed) dom elements to the current block\n * and insert the elements into the dom (in client mode).\n * @param {Text | Comment | Element} anchor\n * @param {DocumentFragment | Element} dom\n */\nexport function append(anchor, dom) {\n\tif (hydrating) {\n\t\t/** @type {Effect} */ (active_effect).nodes_end = hydrate_node;\n\t\thydrate_next();\n\t\treturn;\n\t}\n\n\tif (anchor === null) {\n\t\t// edge case — void `<svelte:element>` with content\n\t\treturn;\n\t}\n\n\tanchor.before(/** @type {Node} */ (dom));\n}\n\n/**\n * Create (or hydrate) an unique UID for the component instance.\n */\nexport function props_id() {\n\tif (\n\t\thydrating &&\n\t\thydrate_node &&\n\t\thydrate_node.nodeType === COMMENT_NODE &&\n\t\thydrate_node.textContent?.startsWith(`#`)\n\t) {\n\t\tconst id = hydrate_node.textContent.substring(1);\n\t\thydrate_next();\n\t\treturn id;\n\t}\n\n\t// @ts-expect-error This way we ensure the id is unique even across Svelte runtimes\n\t(window.__svelte ??= {}).uid ??= 1;\n\n\t// @ts-expect-error\n\treturn `c${window.__svelte.uid++}`;\n}\n","/** @import { ComponentContext, Effect, TemplateNode } from '#client' */\n/** @import { Component, ComponentType, SvelteComponent, MountOptions } from '../../index.js' */\nimport { DEV } from 'esm-env';\nimport {\n\tclear_text_content,\n\tcreate_text,\n\tget_first_child,\n\tget_next_sibling,\n\tinit_operations\n} from './dom/operations.js';\nimport { HYDRATION_END, HYDRATION_ERROR, HYDRATION_START } from '../../constants.js';\nimport { active_effect } from './runtime.js';\nimport { push, pop, component_context } from './context.js';\nimport { component_root, branch } from './reactivity/effects.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tset_hydrate_node,\n\tset_hydrating\n} from './dom/hydration.js';\nimport { array_from } from '../shared/utils.js';\nimport {\n\tall_registered_events,\n\thandle_event_propagation,\n\troot_event_handles\n} from './dom/elements/events.js';\nimport { reset_head_anchor } from './dom/blocks/svelte-head.js';\nimport * as w from './warnings.js';\nimport * as e from './errors.js';\nimport { assign_nodes } from './dom/template.js';\nimport { is_passive_event } from '../../utils.js';\nimport { COMMENT_NODE } from './constants.js';\n\n/**\n * This is normally true — block effects should run their intro transitions —\n * but is false during hydration (unless `options.intro` is `true`) and\n * when creating the children of a `<svelte:element>` that just changed tag\n */\nexport let should_intro = true;\n\n/** @param {boolean} value */\nexport function set_should_intro(value) {\n\tshould_intro = value;\n}\n\n/**\n * @param {Element} text\n * @param {string} value\n * @returns {void}\n */\nexport function set_text(text, value) {\n\t// For objects, we apply string coercion (which might make things like $state array references in the template reactive) before diffing\n\tvar str = value == null ? '' : typeof value === 'object' ? value + '' : value;\n\t// @ts-expect-error\n\tif (str !== (text.__t ??= text.nodeValue)) {\n\t\t// @ts-expect-error\n\t\ttext.__t = str;\n\t\ttext.nodeValue = str + '';\n\t}\n}\n\n/**\n * Mounts a component to the given target and returns the exports and potentially the props (if compiled with `accessors: true`) of the component.\n * Transitions will play during the initial render unless the `intro` option is set to `false`.\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<Props>> | Component<Props, Exports, any>} component\n * @param {MountOptions<Props>} options\n * @returns {Exports}\n */\nexport function mount(component, options) {\n\treturn _mount(component, options);\n}\n\n/**\n * Hydrates a component on the given target and returns the exports and potentially the props (if compiled with `accessors: true`) of the component\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<Props>> | Component<Props, Exports, any>} component\n * @param {{} extends Props ? {\n * \t\ttarget: Document | Element | ShadowRoot;\n * \t\tprops?: Props;\n * \t\tevents?: Record<string, (e: any) => any>;\n *  \tcontext?: Map<any, any>;\n * \t\tintro?: boolean;\n * \t\trecover?: boolean;\n * \t} : {\n * \t\ttarget: Document | Element | ShadowRoot;\n * \t\tprops: Props;\n * \t\tevents?: Record<string, (e: any) => any>;\n *  \tcontext?: Map<any, any>;\n * \t\tintro?: boolean;\n * \t\trecover?: boolean;\n * \t}} options\n * @returns {Exports}\n */\nexport function hydrate(component, options) {\n\tinit_operations();\n\toptions.intro = options.intro ?? false;\n\tconst target = options.target;\n\tconst was_hydrating = hydrating;\n\tconst previous_hydrate_node = hydrate_node;\n\n\ttry {\n\t\tvar anchor = /** @type {TemplateNode} */ (get_first_child(target));\n\t\twhile (\n\t\t\tanchor &&\n\t\t\t(anchor.nodeType !== COMMENT_NODE || /** @type {Comment} */ (anchor).data !== HYDRATION_START)\n\t\t) {\n\t\t\tanchor = /** @type {TemplateNode} */ (get_next_sibling(anchor));\n\t\t}\n\n\t\tif (!anchor) {\n\t\t\tthrow HYDRATION_ERROR;\n\t\t}\n\n\t\tset_hydrating(true);\n\t\tset_hydrate_node(/** @type {Comment} */ (anchor));\n\t\thydrate_next();\n\n\t\tconst instance = _mount(component, { ...options, anchor });\n\n\t\tif (\n\t\t\thydrate_node === null ||\n\t\t\thydrate_node.nodeType !== COMMENT_NODE ||\n\t\t\t/** @type {Comment} */ (hydrate_node).data !== HYDRATION_END\n\t\t) {\n\t\t\tw.hydration_mismatch();\n\t\t\tthrow HYDRATION_ERROR;\n\t\t}\n\n\t\tset_hydrating(false);\n\n\t\treturn /**  @type {Exports} */ (instance);\n\t} catch (error) {\n\t\t// re-throw Svelte errors - they are certainly not related to hydration\n\t\tif (\n\t\t\terror instanceof Error &&\n\t\t\terror.message.split('\\n').some((line) => line.startsWith('https://svelte.dev/e/'))\n\t\t) {\n\t\t\tthrow error;\n\t\t}\n\t\tif (error !== HYDRATION_ERROR) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn('Failed to hydrate: ', error);\n\t\t}\n\n\t\tif (options.recover === false) {\n\t\t\te.hydration_failed();\n\t\t}\n\n\t\t// If an error occured above, the operations might not yet have been initialised.\n\t\tinit_operations();\n\t\tclear_text_content(target);\n\n\t\tset_hydrating(false);\n\t\treturn mount(component, options);\n\t} finally {\n\t\tset_hydrating(was_hydrating);\n\t\tset_hydrate_node(previous_hydrate_node);\n\t\treset_head_anchor();\n\t}\n}\n\n/** @type {Map<string, number>} */\nconst document_listeners = new Map();\n\n/**\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<any>> | Component<any>} Component\n * @param {MountOptions} options\n * @returns {Exports}\n */\nfunction _mount(Component, { target, anchor, props = {}, events, context, intro = true }) {\n\tinit_operations();\n\n\t/** @type {Set<string>} */\n\tvar registered_events = new Set();\n\n\t/** @param {Array<string>} events */\n\tvar event_handle = (events) => {\n\t\tfor (var i = 0; i < events.length; i++) {\n\t\t\tvar event_name = events[i];\n\n\t\t\tif (registered_events.has(event_name)) continue;\n\t\t\tregistered_events.add(event_name);\n\n\t\t\tvar passive = is_passive_event(event_name);\n\n\t\t\t// Add the event listener to both the container and the document.\n\t\t\t// The container listener ensures we catch events from within in case\n\t\t\t// the outer content stops propagation of the event.\n\t\t\ttarget.addEventListener(event_name, handle_event_propagation, { passive });\n\n\t\t\tvar n = document_listeners.get(event_name);\n\n\t\t\tif (n === undefined) {\n\t\t\t\t// The document listener ensures we catch events that originate from elements that were\n\t\t\t\t// manually moved outside of the container (e.g. via manual portals).\n\t\t\t\tdocument.addEventListener(event_name, handle_event_propagation, { passive });\n\t\t\t\tdocument_listeners.set(event_name, 1);\n\t\t\t} else {\n\t\t\t\tdocument_listeners.set(event_name, n + 1);\n\t\t\t}\n\t\t}\n\t};\n\n\tevent_handle(array_from(all_registered_events));\n\troot_event_handles.add(event_handle);\n\n\t/** @type {Exports} */\n\t// @ts-expect-error will be defined because the render effect runs synchronously\n\tvar component = undefined;\n\n\tvar unmount = component_root(() => {\n\t\tvar anchor_node = anchor ?? target.appendChild(create_text());\n\n\t\tbranch(() => {\n\t\t\tif (context) {\n\t\t\t\tpush({});\n\t\t\t\tvar ctx = /** @type {ComponentContext} */ (component_context);\n\t\t\t\tctx.c = context;\n\t\t\t}\n\n\t\t\tif (events) {\n\t\t\t\t// We can't spread the object or else we'd lose the state proxy stuff, if it is one\n\t\t\t\t/** @type {any} */ (props).$$events = events;\n\t\t\t}\n\n\t\t\tif (hydrating) {\n\t\t\t\tassign_nodes(/** @type {TemplateNode} */ (anchor_node), null);\n\t\t\t}\n\n\t\t\tshould_intro = intro;\n\t\t\t// @ts-expect-error the public typings are not what the actual function looks like\n\t\t\tcomponent = Component(anchor_node, props) || {};\n\t\t\tshould_intro = true;\n\n\t\t\tif (hydrating) {\n\t\t\t\t/** @type {Effect} */ (active_effect).nodes_end = hydrate_node;\n\t\t\t}\n\n\t\t\tif (context) {\n\t\t\t\tpop();\n\t\t\t}\n\t\t});\n\n\t\treturn () => {\n\t\t\tfor (var event_name of registered_events) {\n\t\t\t\ttarget.removeEventListener(event_name, handle_event_propagation);\n\n\t\t\t\tvar n = /** @type {number} */ (document_listeners.get(event_name));\n\n\t\t\t\tif (--n === 0) {\n\t\t\t\t\tdocument.removeEventListener(event_name, handle_event_propagation);\n\t\t\t\t\tdocument_listeners.delete(event_name);\n\t\t\t\t} else {\n\t\t\t\t\tdocument_listeners.set(event_name, n);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\troot_event_handles.delete(event_handle);\n\n\t\t\tif (anchor_node !== anchor) {\n\t\t\t\tanchor_node.parentNode?.removeChild(anchor_node);\n\t\t\t}\n\t\t};\n\t});\n\n\tmounted_components.set(component, unmount);\n\treturn component;\n}\n\n/**\n * References of the components that were mounted or hydrated.\n * Uses a `WeakMap` to avoid memory leaks.\n */\nlet mounted_components = new WeakMap();\n\n/**\n * Unmounts a component that was previously mounted using `mount` or `hydrate`.\n *\n * Since 5.13.0, if `options.outro` is `true`, [transitions](https://svelte.dev/docs/svelte/transition) will play before the component is removed from the DOM.\n *\n * Returns a `Promise` that resolves after transitions have completed if `options.outro` is true, or immediately otherwise (prior to 5.13.0, returns `void`).\n *\n * ```js\n * import { mount, unmount } from 'svelte';\n * import App from './App.svelte';\n *\n * const app = mount(App, { target: document.body });\n *\n * // later...\n * unmount(app, { outro: true });\n * ```\n * @param {Record<string, any>} component\n * @param {{ outro?: boolean }} [options]\n * @returns {Promise<void>}\n */\nexport function unmount(component, options) {\n\tconst fn = mounted_components.get(component);\n\n\tif (fn) {\n\t\tmounted_components.delete(component);\n\t\treturn fn(options);\n\t}\n\n\tif (DEV) {\n\t\tw.lifecycle_double_unmount();\n\t}\n\n\treturn Promise.resolve();\n}\n","/** @import { Effect, Source, TemplateNode } from '#client' */\nimport { DEV } from 'esm-env';\nimport { is_promise } from '../../../shared/utils.js';\nimport { block, branch, pause_effect, resume_effect } from '../../reactivity/effects.js';\nimport { internal_set, mutable_source, source } from '../../reactivity/sources.js';\nimport { set_active_effect, set_active_reaction } from '../../runtime.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tremove_nodes,\n\tset_hydrate_node,\n\tset_hydrating\n} from '../hydration.js';\nimport { queue_micro_task } from '../task.js';\nimport { HYDRATION_START_ELSE, UNINITIALIZED } from '../../../../constants.js';\nimport {\n\tcomponent_context,\n\tdev_stack,\n\tis_runes,\n\tset_component_context,\n\tset_dev_current_component_function,\n\tset_dev_stack\n} from '../../context.js';\nimport { flushSync } from '../../reactivity/batch.js';\n\nconst PENDING = 0;\nconst THEN = 1;\nconst CATCH = 2;\n\n/** @typedef {typeof PENDING | typeof THEN | typeof CATCH} AwaitState */\n\n/**\n * @template V\n * @param {TemplateNode} node\n * @param {(() => Promise<V>)} get_input\n * @param {null | ((anchor: Node) => void)} pending_fn\n * @param {null | ((anchor: Node, value: Source<V>) => void)} then_fn\n * @param {null | ((anchor: Node, error: unknown) => void)} catch_fn\n * @returns {void}\n */\nexport function await_block(node, get_input, pending_fn, then_fn, catch_fn) {\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\tvar anchor = node;\n\tvar runes = is_runes();\n\tvar active_component_context = component_context;\n\n\t/** @type {any} */\n\tvar component_function = DEV ? component_context?.function : null;\n\tvar dev_original_stack = DEV ? dev_stack : null;\n\n\t/** @type {V | Promise<V> | typeof UNINITIALIZED} */\n\tvar input = UNINITIALIZED;\n\n\t/** @type {Effect | null} */\n\tvar pending_effect;\n\n\t/** @type {Effect | null} */\n\tvar then_effect;\n\n\t/** @type {Effect | null} */\n\tvar catch_effect;\n\n\tvar input_source = runes\n\t\t? source(/** @type {V} */ (undefined))\n\t\t: mutable_source(/** @type {V} */ (undefined), false, false);\n\tvar error_source = runes ? source(undefined) : mutable_source(undefined, false, false);\n\tvar resolved = false;\n\t/**\n\t * @param {AwaitState} state\n\t * @param {boolean} restore\n\t */\n\tfunction update(state, restore) {\n\t\tresolved = true;\n\n\t\tif (restore) {\n\t\t\tset_active_effect(effect);\n\t\t\tset_active_reaction(effect); // TODO do we need both?\n\t\t\tset_component_context(active_component_context);\n\t\t\tif (DEV) {\n\t\t\t\tset_dev_current_component_function(component_function);\n\t\t\t\tset_dev_stack(dev_original_stack);\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\tif (state === PENDING && pending_fn) {\n\t\t\t\tif (pending_effect) resume_effect(pending_effect);\n\t\t\t\telse pending_effect = branch(() => pending_fn(anchor));\n\t\t\t}\n\n\t\t\tif (state === THEN && then_fn) {\n\t\t\t\tif (then_effect) resume_effect(then_effect);\n\t\t\t\telse then_effect = branch(() => then_fn(anchor, input_source));\n\t\t\t}\n\n\t\t\tif (state === CATCH && catch_fn) {\n\t\t\t\tif (catch_effect) resume_effect(catch_effect);\n\t\t\t\telse catch_effect = branch(() => catch_fn(anchor, error_source));\n\t\t\t}\n\n\t\t\tif (state !== PENDING && pending_effect) {\n\t\t\t\tpause_effect(pending_effect, () => (pending_effect = null));\n\t\t\t}\n\n\t\t\tif (state !== THEN && then_effect) {\n\t\t\t\tpause_effect(then_effect, () => (then_effect = null));\n\t\t\t}\n\n\t\t\tif (state !== CATCH && catch_effect) {\n\t\t\t\tpause_effect(catch_effect, () => (catch_effect = null));\n\t\t\t}\n\t\t} finally {\n\t\t\tif (restore) {\n\t\t\t\tif (DEV) {\n\t\t\t\t\tset_dev_current_component_function(null);\n\t\t\t\t\tset_dev_stack(null);\n\t\t\t\t}\n\n\t\t\t\tset_component_context(null);\n\t\t\t\tset_active_reaction(null);\n\t\t\t\tset_active_effect(null);\n\n\t\t\t\t// without this, the DOM does not update until two ticks after the promise\n\t\t\t\t// resolves, which is unexpected behaviour (and somewhat irksome to test)\n\t\t\t\tflushSync();\n\t\t\t}\n\t\t}\n\t}\n\n\tvar effect = block(() => {\n\t\tif (input === (input = get_input())) return;\n\n\t\t/** Whether or not there was a hydration mismatch. Needs to be a `let` or else it isn't treeshaken out */\n\t\t// @ts-ignore coercing `anchor` to a `Comment` causes TypeScript and Prettier to fight\n\t\tlet mismatch = hydrating && is_promise(input) === (anchor.data === HYDRATION_START_ELSE);\n\n\t\tif (mismatch) {\n\t\t\t// Hydration mismatch: remove everything inside the anchor and start fresh\n\t\t\tanchor = remove_nodes();\n\n\t\t\tset_hydrate_node(anchor);\n\t\t\tset_hydrating(false);\n\t\t\tmismatch = true;\n\t\t}\n\n\t\tif (is_promise(input)) {\n\t\t\tvar promise = input;\n\n\t\t\tresolved = false;\n\n\t\t\tpromise.then(\n\t\t\t\t(value) => {\n\t\t\t\t\tif (promise !== input) return;\n\t\t\t\t\t// we technically could use `set` here since it's on the next microtick\n\t\t\t\t\t// but let's use internal_set for consistency and just to be safe\n\t\t\t\t\tinternal_set(input_source, value);\n\t\t\t\t\tupdate(THEN, true);\n\t\t\t\t},\n\t\t\t\t(error) => {\n\t\t\t\t\tif (promise !== input) return;\n\t\t\t\t\t// we technically could use `set` here since it's on the next microtick\n\t\t\t\t\t// but let's use internal_set for consistency and just to be safe\n\t\t\t\t\tinternal_set(error_source, error);\n\t\t\t\t\tupdate(CATCH, true);\n\t\t\t\t\tif (!catch_fn) {\n\t\t\t\t\t\t// Rethrow the error if no catch block exists\n\t\t\t\t\t\tthrow error_source.v;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (hydrating) {\n\t\t\t\tif (pending_fn) {\n\t\t\t\t\tpending_effect = branch(() => pending_fn(anchor));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Wait a microtask before checking if we should show the pending state as\n\t\t\t\t// the promise might have resolved by the next microtask.\n\t\t\t\tqueue_micro_task(() => {\n\t\t\t\t\tif (!resolved) update(PENDING, true);\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tinternal_set(input_source, input);\n\t\t\tupdate(THEN, false);\n\t\t}\n\n\t\tif (mismatch) {\n\t\t\t// continue in hydration mode\n\t\t\tset_hydrating(true);\n\t\t}\n\n\t\t// Set the input to something else, in order to disable the promise callbacks\n\t\treturn () => (input = UNINITIALIZED);\n\t});\n\n\tif (hydrating) {\n\t\tanchor = hydrate_node;\n\t}\n}\n","/** @import { Effect, TemplateNode } from '#client' */\n/** @import { Batch } from '../../reactivity/batch.js'; */\nimport { EFFECT_TRANSPARENT } from '#client/constants';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tread_hydration_instruction,\n\tremove_nodes,\n\tset_hydrate_node,\n\tset_hydrating\n} from '../hydration.js';\nimport { block, branch, pause_effect, resume_effect } from '../../reactivity/effects.js';\nimport { HYDRATION_START_ELSE, UNINITIALIZED } from '../../../../constants.js';\nimport { create_text, should_defer_append } from '../operations.js';\nimport { current_batch } from '../../reactivity/batch.js';\n\n// TODO reinstate https://github.com/sveltejs/svelte/pull/15250\n\n/**\n * @param {TemplateNode} node\n * @param {(branch: (fn: (anchor: Node) => void, flag?: boolean) => void) => void} fn\n * @param {boolean} [elseif] True if this is an `{:else if ...}` block rather than an `{#if ...}`, as that affects which transitions are considered 'local'\n * @returns {void}\n */\nexport function if_block(node, fn, elseif = false) {\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\tvar anchor = node;\n\n\t/** @type {Effect | null} */\n\tvar consequent_effect = null;\n\n\t/** @type {Effect | null} */\n\tvar alternate_effect = null;\n\n\t/** @type {typeof UNINITIALIZED | boolean | null} */\n\tvar condition = UNINITIALIZED;\n\n\tvar flags = elseif ? EFFECT_TRANSPARENT : 0;\n\n\tvar has_branch = false;\n\n\tconst set_branch = (/** @type {(anchor: Node) => void} */ fn, flag = true) => {\n\t\thas_branch = true;\n\t\tupdate_branch(flag, fn);\n\t};\n\n\t/** @type {DocumentFragment | null} */\n\tvar offscreen_fragment = null;\n\n\tfunction commit() {\n\t\tif (offscreen_fragment !== null) {\n\t\t\t// remove the anchor\n\t\t\t/** @type {Text} */ (offscreen_fragment.lastChild).remove();\n\n\t\t\tanchor.before(offscreen_fragment);\n\t\t\toffscreen_fragment = null;\n\t\t}\n\n\t\tvar active = condition ? consequent_effect : alternate_effect;\n\t\tvar inactive = condition ? alternate_effect : consequent_effect;\n\n\t\tif (active) {\n\t\t\tresume_effect(active);\n\t\t}\n\n\t\tif (inactive) {\n\t\t\tpause_effect(inactive, () => {\n\t\t\t\tif (condition) {\n\t\t\t\t\talternate_effect = null;\n\t\t\t\t} else {\n\t\t\t\t\tconsequent_effect = null;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tconst update_branch = (\n\t\t/** @type {boolean | null} */ new_condition,\n\t\t/** @type {null | ((anchor: Node) => void)} */ fn\n\t) => {\n\t\tif (condition === (condition = new_condition)) return;\n\n\t\t/** Whether or not there was a hydration mismatch. Needs to be a `let` or else it isn't treeshaken out */\n\t\tlet mismatch = false;\n\n\t\tif (hydrating) {\n\t\t\tconst is_else = read_hydration_instruction(anchor) === HYDRATION_START_ELSE;\n\n\t\t\tif (!!condition === is_else) {\n\t\t\t\t// Hydration mismatch: remove everything inside the anchor and start fresh.\n\t\t\t\t// This could happen with `{#if browser}...{/if}`, for example\n\t\t\t\tanchor = remove_nodes();\n\n\t\t\t\tset_hydrate_node(anchor);\n\t\t\t\tset_hydrating(false);\n\t\t\t\tmismatch = true;\n\t\t\t}\n\t\t}\n\n\t\tvar defer = should_defer_append();\n\t\tvar target = anchor;\n\n\t\tif (defer) {\n\t\t\toffscreen_fragment = document.createDocumentFragment();\n\t\t\toffscreen_fragment.append((target = create_text()));\n\t\t}\n\n\t\tif (condition) {\n\t\t\tconsequent_effect ??= fn && branch(() => fn(target));\n\t\t} else {\n\t\t\talternate_effect ??= fn && branch(() => fn(target));\n\t\t}\n\n\t\tif (defer) {\n\t\t\tvar batch = /** @type {Batch} */ (current_batch);\n\n\t\t\tvar active = condition ? consequent_effect : alternate_effect;\n\t\t\tvar inactive = condition ? alternate_effect : consequent_effect;\n\n\t\t\tif (active) batch.skipped_effects.delete(active);\n\t\t\tif (inactive) batch.skipped_effects.add(inactive);\n\n\t\t\tbatch.add_callback(commit);\n\t\t} else {\n\t\t\tcommit();\n\t\t}\n\n\t\tif (mismatch) {\n\t\t\t// continue in hydration mode\n\t\t\tset_hydrating(true);\n\t\t}\n\t};\n\n\tblock(() => {\n\t\thas_branch = false;\n\t\tfn(set_branch);\n\t\tif (!has_branch) {\n\t\t\tupdate_branch(null, null);\n\t\t}\n\t}, flags);\n\n\tif (hydrating) {\n\t\tanchor = hydrate_node;\n\t}\n}\n","/** @import { Effect, TemplateNode } from '#client' */\n/** @import { Batch } from '../../reactivity/batch.js'; */\nimport { UNINITIALIZED } from '../../../../constants.js';\nimport { block, branch, pause_effect } from '../../reactivity/effects.js';\nimport { not_equal, safe_not_equal } from '../../reactivity/equality.js';\nimport { is_runes } from '../../context.js';\nimport { hydrate_next, hydrate_node, hydrating } from '../hydration.js';\nimport { create_text, should_defer_append } from '../operations.js';\nimport { current_batch } from '../../reactivity/batch.js';\n\n/**\n * @template V\n * @param {TemplateNode} node\n * @param {() => V} get_key\n * @param {(anchor: Node) => TemplateNode | void} render_fn\n * @returns {void}\n */\nexport function key(node, get_key, render_fn) {\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\tvar anchor = node;\n\n\t/** @type {V | typeof UNINITIALIZED} */\n\tvar key = UNINITIALIZED;\n\n\t/** @type {Effect} */\n\tvar effect;\n\n\t/** @type {Effect} */\n\tvar pending_effect;\n\n\t/** @type {DocumentFragment | null} */\n\tvar offscreen_fragment = null;\n\n\tvar changed = is_runes() ? not_equal : safe_not_equal;\n\n\tfunction commit() {\n\t\tif (effect) {\n\t\t\tpause_effect(effect);\n\t\t}\n\n\t\tif (offscreen_fragment !== null) {\n\t\t\t// remove the anchor\n\t\t\t/** @type {Text} */ (offscreen_fragment.lastChild).remove();\n\n\t\t\tanchor.before(offscreen_fragment);\n\t\t\toffscreen_fragment = null;\n\t\t}\n\n\t\teffect = pending_effect;\n\t}\n\n\tblock(() => {\n\t\tif (changed(key, (key = get_key()))) {\n\t\t\tvar target = anchor;\n\n\t\t\tvar defer = should_defer_append();\n\n\t\t\tif (defer) {\n\t\t\t\toffscreen_fragment = document.createDocumentFragment();\n\t\t\t\toffscreen_fragment.append((target = create_text()));\n\t\t\t}\n\n\t\t\tpending_effect = branch(() => render_fn(target));\n\n\t\t\tif (defer) {\n\t\t\t\t/** @type {Batch} */ (current_batch).add_callback(commit);\n\t\t\t} else {\n\t\t\t\tcommit();\n\t\t\t}\n\t\t}\n\t});\n\n\tif (hydrating) {\n\t\tanchor = hydrate_node;\n\t}\n}\n","/** @import { TemplateNode } from '#client' */\nimport { render_effect, teardown } from '../../reactivity/effects.js';\nimport { hydrating, set_hydrate_node } from '../hydration.js';\nimport { get_first_child } from '../operations.js';\n\n/**\n * @param {HTMLDivElement | SVGGElement} element\n * @param {() => Record<string, string>} get_styles\n * @returns {void}\n */\nexport function css_props(element, get_styles) {\n\tif (hydrating) {\n\t\tset_hydrate_node(/** @type {TemplateNode} */ (get_first_child(element)));\n\t}\n\n\trender_effect(() => {\n\t\tvar styles = get_styles();\n\n\t\tfor (var key in styles) {\n\t\t\tvar value = styles[key];\n\n\t\t\tif (value) {\n\t\t\t\telement.style.setProperty(key, value);\n\t\t\t} else {\n\t\t\t\telement.style.removeProperty(key);\n\t\t\t}\n\t\t}\n\t});\n}\n","/** @import { EachItem, EachState, Effect, MaybeSource, Source, TemplateNode, TransitionManager, Value } from '#client' */\n/** @import { Batch } from '../../reactivity/batch.js'; */\nimport {\n\tEACH_INDEX_REACTIVE,\n\tEACH_IS_ANIMATED,\n\tEACH_IS_CONTROLLED,\n\tEACH_ITEM_IMMUTABLE,\n\tEACH_ITEM_REACTIVE,\n\tHYDRATION_END,\n\tHYDRATION_START_ELSE\n} from '../../../../constants.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tread_hydration_instruction,\n\tremove_nodes,\n\tset_hydrate_node,\n\tset_hydrating\n} from '../hydration.js';\nimport {\n\tclear_text_content,\n\tcreate_text,\n\tget_first_child,\n\tget_next_sibling,\n\tshould_defer_append\n} from '../operations.js';\nimport {\n\tblock,\n\tbranch,\n\tdestroy_effect,\n\trun_out_transitions,\n\tpause_children,\n\tpause_effect,\n\tresume_effect\n} from '../../reactivity/effects.js';\nimport { source, mutable_source, internal_set } from '../../reactivity/sources.js';\nimport { array_from, is_array } from '../../../shared/utils.js';\nimport { COMMENT_NODE, INERT } from '#client/constants';\nimport { queue_micro_task } from '../task.js';\nimport { active_effect, get } from '../../runtime.js';\nimport { DEV } from 'esm-env';\nimport { derived_safe_equal } from '../../reactivity/deriveds.js';\nimport { current_batch } from '../../reactivity/batch.js';\n\n/**\n * The row of a keyed each block that is currently updating. We track this\n * so that `animate:` directives have something to attach themselves to\n * @type {EachItem | null}\n */\nexport let current_each_item = null;\n\n/** @param {EachItem | null} item */\nexport function set_current_each_item(item) {\n\tcurrent_each_item = item;\n}\n\n/**\n * @param {any} _\n * @param {number} i\n */\nexport function index(_, i) {\n\treturn i;\n}\n\n/**\n * Pause multiple effects simultaneously, and coordinate their\n * subsequent destruction. Used in each blocks\n * @param {EachState} state\n * @param {EachItem[]} items\n * @param {null | Node} controlled_anchor\n */\nfunction pause_effects(state, items, controlled_anchor) {\n\tvar items_map = state.items;\n\n\t/** @type {TransitionManager[]} */\n\tvar transitions = [];\n\tvar length = items.length;\n\n\tfor (var i = 0; i < length; i++) {\n\t\tpause_children(items[i].e, transitions, true);\n\t}\n\n\tvar is_controlled = length > 0 && transitions.length === 0 && controlled_anchor !== null;\n\t// If we have a controlled anchor, it means that the each block is inside a single\n\t// DOM element, so we can apply a fast-path for clearing the contents of the element.\n\tif (is_controlled) {\n\t\tvar parent_node = /** @type {Element} */ (\n\t\t\t/** @type {Element} */ (controlled_anchor).parentNode\n\t\t);\n\t\tclear_text_content(parent_node);\n\t\tparent_node.append(/** @type {Element} */ (controlled_anchor));\n\t\titems_map.clear();\n\t\tlink(state, items[0].prev, items[length - 1].next);\n\t}\n\n\trun_out_transitions(transitions, () => {\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tvar item = items[i];\n\t\t\tif (!is_controlled) {\n\t\t\t\titems_map.delete(item.k);\n\t\t\t\tlink(state, item.prev, item.next);\n\t\t\t}\n\t\t\tdestroy_effect(item.e, !is_controlled);\n\t\t}\n\t});\n}\n\n/**\n * @template V\n * @param {Element | Comment} node The next sibling node, or the parent node if this is a 'controlled' block\n * @param {number} flags\n * @param {() => V[]} get_collection\n * @param {(value: V, index: number) => any} get_key\n * @param {(anchor: Node, item: MaybeSource<V>, index: MaybeSource<number>) => void} render_fn\n * @param {null | ((anchor: Node) => void)} fallback_fn\n * @returns {void}\n */\nexport function each(node, flags, get_collection, get_key, render_fn, fallback_fn = null) {\n\tvar anchor = node;\n\n\t/** @type {EachState} */\n\tvar state = { flags, items: new Map(), first: null };\n\n\tvar is_controlled = (flags & EACH_IS_CONTROLLED) !== 0;\n\n\tif (is_controlled) {\n\t\tvar parent_node = /** @type {Element} */ (node);\n\n\t\tanchor = hydrating\n\t\t\t? set_hydrate_node(/** @type {Comment | Text} */ (get_first_child(parent_node)))\n\t\t\t: parent_node.appendChild(create_text());\n\t}\n\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\t/** @type {Effect | null} */\n\tvar fallback = null;\n\n\tvar was_empty = false;\n\n\t/** @type {Map<any, EachItem>} */\n\tvar offscreen_items = new Map();\n\n\t// TODO: ideally we could use derived for runes mode but because of the ability\n\t// to use a store which can be mutated, we can't do that here as mutating a store\n\t// will still result in the collection array being the same from the store\n\tvar each_array = derived_safe_equal(() => {\n\t\tvar collection = get_collection();\n\n\t\treturn is_array(collection) ? collection : collection == null ? [] : array_from(collection);\n\t});\n\n\t/** @type {V[]} */\n\tvar array;\n\n\t/** @type {Effect} */\n\tvar each_effect;\n\n\tfunction commit() {\n\t\treconcile(\n\t\t\teach_effect,\n\t\t\tarray,\n\t\t\tstate,\n\t\t\toffscreen_items,\n\t\t\tanchor,\n\t\t\trender_fn,\n\t\t\tflags,\n\t\t\tget_key,\n\t\t\tget_collection\n\t\t);\n\n\t\tif (fallback_fn !== null) {\n\t\t\tif (array.length === 0) {\n\t\t\t\tif (fallback) {\n\t\t\t\t\tresume_effect(fallback);\n\t\t\t\t} else {\n\t\t\t\t\tfallback = branch(() => fallback_fn(anchor));\n\t\t\t\t}\n\t\t\t} else if (fallback !== null) {\n\t\t\t\tpause_effect(fallback, () => {\n\t\t\t\t\tfallback = null;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tblock(() => {\n\t\t// store a reference to the effect so that we can update the start/end nodes in reconciliation\n\t\teach_effect ??= /** @type {Effect} */ (active_effect);\n\n\t\tarray = /** @type {V[]} */ (get(each_array));\n\t\tvar length = array.length;\n\n\t\tif (was_empty && length === 0) {\n\t\t\t// ignore updates if the array is empty,\n\t\t\t// and it already was empty on previous run\n\t\t\treturn;\n\t\t}\n\t\twas_empty = length === 0;\n\n\t\t/** `true` if there was a hydration mismatch. Needs to be a `let` or else it isn't treeshaken out */\n\t\tlet mismatch = false;\n\n\t\tif (hydrating) {\n\t\t\tvar is_else = read_hydration_instruction(anchor) === HYDRATION_START_ELSE;\n\n\t\t\tif (is_else !== (length === 0)) {\n\t\t\t\t// hydration mismatch — remove the server-rendered DOM and start over\n\t\t\t\tanchor = remove_nodes();\n\n\t\t\t\tset_hydrate_node(anchor);\n\t\t\t\tset_hydrating(false);\n\t\t\t\tmismatch = true;\n\t\t\t}\n\t\t}\n\n\t\t// this is separate to the previous block because `hydrating` might change\n\t\tif (hydrating) {\n\t\t\t/** @type {EachItem | null} */\n\t\t\tvar prev = null;\n\n\t\t\t/** @type {EachItem} */\n\t\t\tvar item;\n\n\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\tif (\n\t\t\t\t\thydrate_node.nodeType === COMMENT_NODE &&\n\t\t\t\t\t/** @type {Comment} */ (hydrate_node).data === HYDRATION_END\n\t\t\t\t) {\n\t\t\t\t\t// The server rendered fewer items than expected,\n\t\t\t\t\t// so break out and continue appending non-hydrated items\n\t\t\t\t\tanchor = /** @type {Comment} */ (hydrate_node);\n\t\t\t\t\tmismatch = true;\n\t\t\t\t\tset_hydrating(false);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tvar value = array[i];\n\t\t\t\tvar key = get_key(value, i);\n\t\t\t\titem = create_item(\n\t\t\t\t\thydrate_node,\n\t\t\t\t\tstate,\n\t\t\t\t\tprev,\n\t\t\t\t\tnull,\n\t\t\t\t\tvalue,\n\t\t\t\t\tkey,\n\t\t\t\t\ti,\n\t\t\t\t\trender_fn,\n\t\t\t\t\tflags,\n\t\t\t\t\tget_collection\n\t\t\t\t);\n\t\t\t\tstate.items.set(key, item);\n\n\t\t\t\tprev = item;\n\t\t\t}\n\n\t\t\t// remove excess nodes\n\t\t\tif (length > 0) {\n\t\t\t\tset_hydrate_node(remove_nodes());\n\t\t\t}\n\t\t}\n\n\t\tif (hydrating) {\n\t\t\tif (length === 0 && fallback_fn) {\n\t\t\t\tfallback = branch(() => fallback_fn(anchor));\n\t\t\t}\n\t\t} else {\n\t\t\tif (should_defer_append()) {\n\t\t\t\tvar keys = new Set();\n\t\t\t\tvar batch = /** @type {Batch} */ (current_batch);\n\n\t\t\t\tfor (i = 0; i < length; i += 1) {\n\t\t\t\t\tvalue = array[i];\n\t\t\t\t\tkey = get_key(value, i);\n\n\t\t\t\t\tvar existing = state.items.get(key) ?? offscreen_items.get(key);\n\n\t\t\t\t\tif (existing) {\n\t\t\t\t\t\t// update before reconciliation, to trigger any async updates\n\t\t\t\t\t\tif ((flags & (EACH_ITEM_REACTIVE | EACH_INDEX_REACTIVE)) !== 0) {\n\t\t\t\t\t\t\tupdate_item(existing, value, i, flags);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\titem = create_item(\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\ti,\n\t\t\t\t\t\t\trender_fn,\n\t\t\t\t\t\t\tflags,\n\t\t\t\t\t\t\tget_collection,\n\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\toffscreen_items.set(key, item);\n\t\t\t\t\t}\n\n\t\t\t\t\tkeys.add(key);\n\t\t\t\t}\n\n\t\t\t\tfor (const [key, item] of state.items) {\n\t\t\t\t\tif (!keys.has(key)) {\n\t\t\t\t\t\tbatch.skipped_effects.add(item.e);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbatch.add_callback(commit);\n\t\t\t} else {\n\t\t\t\tcommit();\n\t\t\t}\n\t\t}\n\n\t\tif (mismatch) {\n\t\t\t// continue in hydration mode\n\t\t\tset_hydrating(true);\n\t\t}\n\n\t\t// When we mount the each block for the first time, the collection won't be\n\t\t// connected to this effect as the effect hasn't finished running yet and its deps\n\t\t// won't be assigned. However, it's possible that when reconciling the each block\n\t\t// that a mutation occurred and it's made the collection MAYBE_DIRTY, so reading the\n\t\t// collection again can provide consistency to the reactive graph again as the deriveds\n\t\t// will now be `CLEAN`.\n\t\tget(each_array);\n\t});\n\n\tif (hydrating) {\n\t\tanchor = hydrate_node;\n\t}\n}\n\n/**\n * Add, remove, or reorder items output by an each block as its input changes\n * @template V\n * @param {Effect} each_effect\n * @param {Array<V>} array\n * @param {EachState} state\n * @param {Map<any, EachItem>} offscreen_items\n * @param {Element | Comment | Text} anchor\n * @param {(anchor: Node, item: MaybeSource<V>, index: number | Source<number>, collection: () => V[]) => void} render_fn\n * @param {number} flags\n * @param {(value: V, index: number) => any} get_key\n * @param {() => V[]} get_collection\n * @returns {void}\n */\nfunction reconcile(\n\teach_effect,\n\tarray,\n\tstate,\n\toffscreen_items,\n\tanchor,\n\trender_fn,\n\tflags,\n\tget_key,\n\tget_collection\n) {\n\tvar is_animated = (flags & EACH_IS_ANIMATED) !== 0;\n\tvar should_update = (flags & (EACH_ITEM_REACTIVE | EACH_INDEX_REACTIVE)) !== 0;\n\n\tvar length = array.length;\n\tvar items = state.items;\n\tvar first = state.first;\n\tvar current = first;\n\n\t/** @type {undefined | Set<EachItem>} */\n\tvar seen;\n\n\t/** @type {EachItem | null} */\n\tvar prev = null;\n\n\t/** @type {undefined | Set<EachItem>} */\n\tvar to_animate;\n\n\t/** @type {EachItem[]} */\n\tvar matched = [];\n\n\t/** @type {EachItem[]} */\n\tvar stashed = [];\n\n\t/** @type {V} */\n\tvar value;\n\n\t/** @type {any} */\n\tvar key;\n\n\t/** @type {EachItem | undefined} */\n\tvar item;\n\n\t/** @type {number} */\n\tvar i;\n\n\tif (is_animated) {\n\t\tfor (i = 0; i < length; i += 1) {\n\t\t\tvalue = array[i];\n\t\t\tkey = get_key(value, i);\n\t\t\titem = items.get(key);\n\n\t\t\tif (item !== undefined) {\n\t\t\t\titem.a?.measure();\n\t\t\t\t(to_animate ??= new Set()).add(item);\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (i = 0; i < length; i += 1) {\n\t\tvalue = array[i];\n\t\tkey = get_key(value, i);\n\n\t\titem = items.get(key);\n\n\t\tif (item === undefined) {\n\t\t\tvar pending = offscreen_items.get(key);\n\n\t\t\tif (pending !== undefined) {\n\t\t\t\toffscreen_items.delete(key);\n\t\t\t\titems.set(key, pending);\n\n\t\t\t\tvar next = prev ? prev.next : current;\n\n\t\t\t\tlink(state, prev, pending);\n\t\t\t\tlink(state, pending, next);\n\n\t\t\t\tmove(pending, next, anchor);\n\t\t\t\tprev = pending;\n\t\t\t} else {\n\t\t\t\tvar child_anchor = current ? /** @type {TemplateNode} */ (current.e.nodes_start) : anchor;\n\n\t\t\t\tprev = create_item(\n\t\t\t\t\tchild_anchor,\n\t\t\t\t\tstate,\n\t\t\t\t\tprev,\n\t\t\t\t\tprev === null ? state.first : prev.next,\n\t\t\t\t\tvalue,\n\t\t\t\t\tkey,\n\t\t\t\t\ti,\n\t\t\t\t\trender_fn,\n\t\t\t\t\tflags,\n\t\t\t\t\tget_collection\n\t\t\t\t);\n\t\t\t}\n\n\t\t\titems.set(key, prev);\n\n\t\t\tmatched = [];\n\t\t\tstashed = [];\n\n\t\t\tcurrent = prev.next;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (should_update) {\n\t\t\tupdate_item(item, value, i, flags);\n\t\t}\n\n\t\tif ((item.e.f & INERT) !== 0) {\n\t\t\tresume_effect(item.e);\n\t\t\tif (is_animated) {\n\t\t\t\titem.a?.unfix();\n\t\t\t\t(to_animate ??= new Set()).delete(item);\n\t\t\t}\n\t\t}\n\n\t\tif (item !== current) {\n\t\t\tif (seen !== undefined && seen.has(item)) {\n\t\t\t\tif (matched.length < stashed.length) {\n\t\t\t\t\t// more efficient to move later items to the front\n\t\t\t\t\tvar start = stashed[0];\n\t\t\t\t\tvar j;\n\n\t\t\t\t\tprev = start.prev;\n\n\t\t\t\t\tvar a = matched[0];\n\t\t\t\t\tvar b = matched[matched.length - 1];\n\n\t\t\t\t\tfor (j = 0; j < matched.length; j += 1) {\n\t\t\t\t\t\tmove(matched[j], start, anchor);\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (j = 0; j < stashed.length; j += 1) {\n\t\t\t\t\t\tseen.delete(stashed[j]);\n\t\t\t\t\t}\n\n\t\t\t\t\tlink(state, a.prev, b.next);\n\t\t\t\t\tlink(state, prev, a);\n\t\t\t\t\tlink(state, b, start);\n\n\t\t\t\t\tcurrent = start;\n\t\t\t\t\tprev = b;\n\t\t\t\t\ti -= 1;\n\n\t\t\t\t\tmatched = [];\n\t\t\t\t\tstashed = [];\n\t\t\t\t} else {\n\t\t\t\t\t// more efficient to move earlier items to the back\n\t\t\t\t\tseen.delete(item);\n\t\t\t\t\tmove(item, current, anchor);\n\n\t\t\t\t\tlink(state, item.prev, item.next);\n\t\t\t\t\tlink(state, item, prev === null ? state.first : prev.next);\n\t\t\t\t\tlink(state, prev, item);\n\n\t\t\t\t\tprev = item;\n\t\t\t\t}\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tmatched = [];\n\t\t\tstashed = [];\n\n\t\t\twhile (current !== null && current.k !== key) {\n\t\t\t\t// If the each block isn't inert and an item has an effect that is already inert,\n\t\t\t\t// skip over adding it to our seen Set as the item is already being handled\n\t\t\t\tif ((current.e.f & INERT) === 0) {\n\t\t\t\t\t(seen ??= new Set()).add(current);\n\t\t\t\t}\n\t\t\t\tstashed.push(current);\n\t\t\t\tcurrent = current.next;\n\t\t\t}\n\n\t\t\tif (current === null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\titem = current;\n\t\t}\n\n\t\tmatched.push(item);\n\t\tprev = item;\n\t\tcurrent = item.next;\n\t}\n\n\tif (current !== null || seen !== undefined) {\n\t\tvar to_destroy = seen === undefined ? [] : array_from(seen);\n\n\t\twhile (current !== null) {\n\t\t\t// If the each block isn't inert, then inert effects are currently outroing and will be removed once the transition is finished\n\t\t\tif ((current.e.f & INERT) === 0) {\n\t\t\t\tto_destroy.push(current);\n\t\t\t}\n\t\t\tcurrent = current.next;\n\t\t}\n\n\t\tvar destroy_length = to_destroy.length;\n\n\t\tif (destroy_length > 0) {\n\t\t\tvar controlled_anchor = (flags & EACH_IS_CONTROLLED) !== 0 && length === 0 ? anchor : null;\n\n\t\t\tif (is_animated) {\n\t\t\t\tfor (i = 0; i < destroy_length; i += 1) {\n\t\t\t\t\tto_destroy[i].a?.measure();\n\t\t\t\t}\n\n\t\t\t\tfor (i = 0; i < destroy_length; i += 1) {\n\t\t\t\t\tto_destroy[i].a?.fix();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpause_effects(state, to_destroy, controlled_anchor);\n\t\t}\n\t}\n\n\tif (is_animated) {\n\t\tqueue_micro_task(() => {\n\t\t\tif (to_animate === undefined) return;\n\t\t\tfor (item of to_animate) {\n\t\t\t\titem.a?.apply();\n\t\t\t}\n\t\t});\n\t}\n\n\teach_effect.first = state.first && state.first.e;\n\teach_effect.last = prev && prev.e;\n\n\tfor (var unused of offscreen_items.values()) {\n\t\tdestroy_effect(unused.e);\n\t}\n\n\toffscreen_items.clear();\n}\n\n/**\n * @param {EachItem} item\n * @param {any} value\n * @param {number} index\n * @param {number} type\n * @returns {void}\n */\nfunction update_item(item, value, index, type) {\n\tif ((type & EACH_ITEM_REACTIVE) !== 0) {\n\t\tinternal_set(item.v, value);\n\t}\n\n\tif ((type & EACH_INDEX_REACTIVE) !== 0) {\n\t\tinternal_set(/** @type {Value<number>} */ (item.i), index);\n\t} else {\n\t\titem.i = index;\n\t}\n}\n\n/**\n * @template V\n * @param {Node | null} anchor\n * @param {EachState} state\n * @param {EachItem | null} prev\n * @param {EachItem | null} next\n * @param {V} value\n * @param {unknown} key\n * @param {number} index\n * @param {(anchor: Node, item: V | Source<V>, index: number | Value<number>, collection: () => V[]) => void} render_fn\n * @param {number} flags\n * @param {() => V[]} get_collection\n * @param {boolean} [deferred]\n * @returns {EachItem}\n */\nfunction create_item(\n\tanchor,\n\tstate,\n\tprev,\n\tnext,\n\tvalue,\n\tkey,\n\tindex,\n\trender_fn,\n\tflags,\n\tget_collection,\n\tdeferred\n) {\n\tvar previous_each_item = current_each_item;\n\tvar reactive = (flags & EACH_ITEM_REACTIVE) !== 0;\n\tvar mutable = (flags & EACH_ITEM_IMMUTABLE) === 0;\n\n\tvar v = reactive ? (mutable ? mutable_source(value, false, false) : source(value)) : value;\n\tvar i = (flags & EACH_INDEX_REACTIVE) === 0 ? index : source(index);\n\n\tif (DEV && reactive) {\n\t\t// For tracing purposes, we need to link the source signal we create with the\n\t\t// collection + index so that tracing works as intended\n\t\t/** @type {Value} */ (v).trace = () => {\n\t\t\tvar collection_index = typeof i === 'number' ? index : i.v;\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unused-expressions\n\t\t\tget_collection()[collection_index];\n\t\t};\n\t}\n\n\t/** @type {EachItem} */\n\tvar item = {\n\t\ti,\n\t\tv,\n\t\tk: key,\n\t\ta: null,\n\t\t// @ts-expect-error\n\t\te: null,\n\t\tprev,\n\t\tnext\n\t};\n\n\tcurrent_each_item = item;\n\n\ttry {\n\t\tif (anchor === null) {\n\t\t\tvar fragment = document.createDocumentFragment();\n\t\t\tfragment.append((anchor = create_text()));\n\t\t}\n\n\t\titem.e = branch(() => render_fn(/** @type {Node} */ (anchor), v, i, get_collection), hydrating);\n\n\t\titem.e.prev = prev && prev.e;\n\t\titem.e.next = next && next.e;\n\n\t\tif (prev === null) {\n\t\t\tif (!deferred) {\n\t\t\t\tstate.first = item;\n\t\t\t}\n\t\t} else {\n\t\t\tprev.next = item;\n\t\t\tprev.e.next = item.e;\n\t\t}\n\n\t\tif (next !== null) {\n\t\t\tnext.prev = item;\n\t\t\tnext.e.prev = item.e;\n\t\t}\n\n\t\treturn item;\n\t} finally {\n\t\tcurrent_each_item = previous_each_item;\n\t}\n}\n\n/**\n * @param {EachItem} item\n * @param {EachItem | null} next\n * @param {Text | Element | Comment} anchor\n */\nfunction move(item, next, anchor) {\n\tvar end = item.next ? /** @type {TemplateNode} */ (item.next.e.nodes_start) : anchor;\n\n\tvar dest = next ? /** @type {TemplateNode} */ (next.e.nodes_start) : anchor;\n\tvar node = /** @type {TemplateNode} */ (item.e.nodes_start);\n\n\twhile (node !== null && node !== end) {\n\t\tvar next_node = /** @type {TemplateNode} */ (get_next_sibling(node));\n\t\tdest.before(node);\n\t\tnode = next_node;\n\t}\n}\n\n/**\n * @param {EachState} state\n * @param {EachItem | null} prev\n * @param {EachItem | null} next\n */\nfunction link(state, prev, next) {\n\tif (prev === null) {\n\t\tstate.first = next;\n\t} else {\n\t\tprev.next = next;\n\t\tprev.e.next = next && next.e;\n\t}\n\n\tif (next !== null) {\n\t\tnext.prev = prev;\n\t\tnext.e.prev = prev && prev.e;\n\t}\n}\n","/** @import { Effect, TemplateNode } from '#client' */\nimport { FILENAME, HYDRATION_ERROR } from '../../../../constants.js';\nimport { remove_effect_dom, template_effect } from '../../reactivity/effects.js';\nimport { hydrate_next, hydrate_node, hydrating, set_hydrate_node } from '../hydration.js';\nimport { create_fragment_from_html } from '../reconciler.js';\nimport { assign_nodes } from '../template.js';\nimport * as w from '../../warnings.js';\nimport { hash, sanitize_location } from '../../../../utils.js';\nimport { DEV } from 'esm-env';\nimport { dev_current_component_function } from '../../context.js';\nimport { get_first_child, get_next_sibling } from '../operations.js';\nimport { active_effect } from '../../runtime.js';\nimport { COMMENT_NODE } from '#client/constants';\n\n/**\n * @param {Element} element\n * @param {string | null} server_hash\n * @param {string} value\n */\nfunction check_hash(element, server_hash, value) {\n\tif (!server_hash || server_hash === hash(String(value ?? ''))) return;\n\n\tlet location;\n\n\t// @ts-expect-error\n\tconst loc = element.__svelte_meta?.loc;\n\tif (loc) {\n\t\tlocation = `near ${loc.file}:${loc.line}:${loc.column}`;\n\t} else if (dev_current_component_function?.[FILENAME]) {\n\t\tlocation = `in ${dev_current_component_function[FILENAME]}`;\n\t}\n\n\tw.hydration_html_changed(sanitize_location(location));\n}\n\n/**\n * @param {Element | Text | Comment} node\n * @param {() => string} get_value\n * @param {boolean} [svg]\n * @param {boolean} [mathml]\n * @param {boolean} [skip_warning]\n * @returns {void}\n */\nexport function html(node, get_value, svg = false, mathml = false, skip_warning = false) {\n\tvar anchor = node;\n\n\tvar value = '';\n\n\ttemplate_effect(() => {\n\t\tvar effect = /** @type {Effect} */ (active_effect);\n\n\t\tif (value === (value = get_value() ?? '')) {\n\t\t\tif (hydrating) hydrate_next();\n\t\t\treturn;\n\t\t}\n\n\t\tif (effect.nodes_start !== null) {\n\t\t\tremove_effect_dom(effect.nodes_start, /** @type {TemplateNode} */ (effect.nodes_end));\n\t\t\teffect.nodes_start = effect.nodes_end = null;\n\t\t}\n\n\t\tif (value === '') return;\n\n\t\tif (hydrating) {\n\t\t\t// We're deliberately not trying to repair mismatches between server and client,\n\t\t\t// as it's costly and error-prone (and it's an edge case to have a mismatch anyway)\n\t\t\tvar hash = /** @type {Comment} */ (hydrate_node).data;\n\t\t\tvar next = hydrate_next();\n\t\t\tvar last = next;\n\n\t\t\twhile (\n\t\t\t\tnext !== null &&\n\t\t\t\t(next.nodeType !== COMMENT_NODE || /** @type {Comment} */ (next).data !== '')\n\t\t\t) {\n\t\t\t\tlast = next;\n\t\t\t\tnext = /** @type {TemplateNode} */ (get_next_sibling(next));\n\t\t\t}\n\n\t\t\tif (next === null) {\n\t\t\t\tw.hydration_mismatch();\n\t\t\t\tthrow HYDRATION_ERROR;\n\t\t\t}\n\n\t\t\tif (DEV && !skip_warning) {\n\t\t\t\tcheck_hash(/** @type {Element} */ (next.parentNode), hash, value);\n\t\t\t}\n\n\t\t\tassign_nodes(hydrate_node, last);\n\t\t\tanchor = set_hydrate_node(next);\n\t\t\treturn;\n\t\t}\n\n\t\tvar html = value + '';\n\t\tif (svg) html = `<svg>${html}</svg>`;\n\t\telse if (mathml) html = `<math>${html}</math>`;\n\n\t\t// Don't use create_fragment_with_script_from_html here because that would mean script tags are executed.\n\t\t// @html is basically `.innerHTML = ...` and that doesn't execute scripts either due to security reasons.\n\t\t/** @type {DocumentFragment | Element} */\n\t\tvar node = create_fragment_from_html(html);\n\n\t\tif (svg || mathml) {\n\t\t\tnode = /** @type {Element} */ (get_first_child(node));\n\t\t}\n\n\t\tassign_nodes(\n\t\t\t/** @type {TemplateNode} */ (get_first_child(node)),\n\t\t\t/** @type {TemplateNode} */ (node.lastChild)\n\t\t);\n\n\t\tif (svg || mathml) {\n\t\t\twhile (get_first_child(node)) {\n\t\t\t\tanchor.before(/** @type {Node} */ (get_first_child(node)));\n\t\t\t}\n\t\t} else {\n\t\t\tanchor.before(node);\n\t\t}\n\t});\n}\n","/** @import { Snippet } from 'svelte' */\n/** @import { Effect, TemplateNode } from '#client' */\n/** @import { Getters } from '#shared' */\nimport { EFFECT_TRANSPARENT, ELEMENT_NODE } from '#client/constants';\nimport { branch, block, destroy_effect, teardown } from '../../reactivity/effects.js';\nimport {\n\tdev_current_component_function,\n\tset_dev_current_component_function\n} from '../../context.js';\nimport { hydrate_next, hydrate_node, hydrating } from '../hydration.js';\nimport { create_fragment_from_html } from '../reconciler.js';\nimport { assign_nodes } from '../template.js';\nimport * as w from '../../warnings.js';\nimport * as e from '../../errors.js';\nimport { DEV } from 'esm-env';\nimport { get_first_child, get_next_sibling } from '../operations.js';\nimport { noop } from '../../../shared/utils.js';\nimport { prevent_snippet_stringification } from '../../../shared/validate.js';\n\n/**\n * @template {(node: TemplateNode, ...args: any[]) => void} SnippetFn\n * @param {TemplateNode} node\n * @param {() => SnippetFn | null | undefined} get_snippet\n * @param {(() => any)[]} args\n * @returns {void}\n */\nexport function snippet(node, get_snippet, ...args) {\n\tvar anchor = node;\n\n\t/** @type {SnippetFn | null | undefined} */\n\t// @ts-ignore\n\tvar snippet = noop;\n\n\t/** @type {Effect | null} */\n\tvar snippet_effect;\n\n\tblock(() => {\n\t\tif (snippet === (snippet = get_snippet())) return;\n\n\t\tif (snippet_effect) {\n\t\t\tdestroy_effect(snippet_effect);\n\t\t\tsnippet_effect = null;\n\t\t}\n\n\t\tif (DEV && snippet == null) {\n\t\t\te.invalid_snippet();\n\t\t}\n\n\t\tsnippet_effect = branch(() => /** @type {SnippetFn} */ (snippet)(anchor, ...args));\n\t}, EFFECT_TRANSPARENT);\n\n\tif (hydrating) {\n\t\tanchor = hydrate_node;\n\t}\n}\n\n/**\n * In development, wrap the snippet function so that it passes validation, and so that the\n * correct component context is set for ownership checks\n * @param {any} component\n * @param {(node: TemplateNode, ...args: any[]) => void} fn\n */\nexport function wrap_snippet(component, fn) {\n\tconst snippet = (/** @type {TemplateNode} */ node, /** @type {any[]} */ ...args) => {\n\t\tvar previous_component_function = dev_current_component_function;\n\t\tset_dev_current_component_function(component);\n\n\t\ttry {\n\t\t\treturn fn(node, ...args);\n\t\t} finally {\n\t\t\tset_dev_current_component_function(previous_component_function);\n\t\t}\n\t};\n\n\tprevent_snippet_stringification(snippet);\n\n\treturn snippet;\n}\n\n/**\n * Create a snippet programmatically\n * @template {unknown[]} Params\n * @param {(...params: Getters<Params>) => {\n *   render: () => string\n *   setup?: (element: Element) => void | (() => void)\n * }} fn\n * @returns {Snippet<Params>}\n */\nexport function createRawSnippet(fn) {\n\t// @ts-expect-error the types are a lie\n\treturn (/** @type {TemplateNode} */ anchor, /** @type {Getters<Params>} */ ...params) => {\n\t\tvar snippet = fn(...params);\n\n\t\t/** @type {Element} */\n\t\tvar element;\n\n\t\tif (hydrating) {\n\t\t\telement = /** @type {Element} */ (hydrate_node);\n\t\t\thydrate_next();\n\t\t} else {\n\t\t\tvar html = snippet.render().trim();\n\t\t\tvar fragment = create_fragment_from_html(html);\n\t\t\telement = /** @type {Element} */ (get_first_child(fragment));\n\n\t\t\tif (DEV && (get_next_sibling(element) !== null || element.nodeType !== ELEMENT_NODE)) {\n\t\t\t\tw.invalid_raw_snippet_render();\n\t\t\t}\n\n\t\t\tanchor.before(element);\n\t\t}\n\n\t\tconst result = snippet.setup?.(element);\n\t\tassign_nodes(element, element);\n\n\t\tif (typeof result === 'function') {\n\t\t\tteardown(result);\n\t\t}\n\t};\n}\n","/** @import { TemplateNode, Dom, Effect } from '#client' */\n/** @import { Batch } from '../../reactivity/batch.js'; */\nimport { EFFECT_TRANSPARENT } from '#client/constants';\nimport { block, branch, pause_effect } from '../../reactivity/effects.js';\nimport { current_batch } from '../../reactivity/batch.js';\nimport { hydrate_next, hydrate_node, hydrating } from '../hydration.js';\nimport { create_text, should_defer_append } from '../operations.js';\n\n/**\n * @template P\n * @template {(props: P) => void} C\n * @param {TemplateNode} node\n * @param {() => C} get_component\n * @param {(anchor: TemplateNode, component: C) => Dom | void} render_fn\n * @returns {void}\n */\nexport function component(node, get_component, render_fn) {\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\tvar anchor = node;\n\n\t/** @type {C} */\n\tvar component;\n\n\t/** @type {Effect | null} */\n\tvar effect;\n\n\t/** @type {DocumentFragment | null} */\n\tvar offscreen_fragment = null;\n\n\t/** @type {Effect | null} */\n\tvar pending_effect = null;\n\n\tfunction commit() {\n\t\tif (effect) {\n\t\t\tpause_effect(effect);\n\t\t\teffect = null;\n\t\t}\n\n\t\tif (offscreen_fragment) {\n\t\t\t// remove the anchor\n\t\t\t/** @type {Text} */ (offscreen_fragment.lastChild).remove();\n\n\t\t\tanchor.before(offscreen_fragment);\n\t\t\toffscreen_fragment = null;\n\t\t}\n\n\t\teffect = pending_effect;\n\t\tpending_effect = null;\n\t}\n\n\tblock(() => {\n\t\tif (component === (component = get_component())) return;\n\n\t\tvar defer = should_defer_append();\n\n\t\tif (component) {\n\t\t\tvar target = anchor;\n\n\t\t\tif (defer) {\n\t\t\t\toffscreen_fragment = document.createDocumentFragment();\n\t\t\t\toffscreen_fragment.append((target = create_text()));\n\t\t\t\tif (effect) {\n\t\t\t\t\t/** @type {Batch} */ (current_batch).skipped_effects.add(effect);\n\t\t\t\t}\n\t\t\t}\n\t\t\tpending_effect = branch(() => render_fn(target, component));\n\t\t}\n\n\t\tif (defer) {\n\t\t\t/** @type {Batch} */ (current_batch).add_callback(commit);\n\t\t} else {\n\t\t\tcommit();\n\t\t}\n\t}, EFFECT_TRANSPARENT);\n\n\tif (hydrating) {\n\t\tanchor = hydrate_node;\n\t}\n}\n","/** @import { Effect, TemplateNode } from '#client' */\nimport { FILENAME, NAMESPACE_SVG } from '../../../../constants.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tset_hydrate_node,\n\tset_hydrating\n} from '../hydration.js';\nimport { create_text, get_first_child } from '../operations.js';\nimport {\n\tblock,\n\tbranch,\n\tdestroy_effect,\n\tpause_effect,\n\tresume_effect\n} from '../../reactivity/effects.js';\nimport { set_should_intro } from '../../render.js';\nimport { current_each_item, set_current_each_item } from './each.js';\nimport { active_effect } from '../../runtime.js';\nimport { component_context, dev_stack } from '../../context.js';\nimport { DEV } from 'esm-env';\nimport { EFFECT_TRANSPARENT, ELEMENT_NODE } from '#client/constants';\nimport { assign_nodes } from '../template.js';\nimport { is_raw_text_element } from '../../../../utils.js';\n\n/**\n * @param {Comment | Element} node\n * @param {() => string} get_tag\n * @param {boolean} is_svg\n * @param {undefined | ((element: Element, anchor: Node | null) => void)} render_fn,\n * @param {undefined | (() => string)} get_namespace\n * @param {undefined | [number, number]} location\n * @returns {void}\n */\nexport function element(node, get_tag, is_svg, render_fn, get_namespace, location) {\n\tlet was_hydrating = hydrating;\n\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\tvar filename = DEV && location && component_context?.function[FILENAME];\n\n\t/** @type {string | null} */\n\tvar tag;\n\n\t/** @type {string | null} */\n\tvar current_tag;\n\n\t/** @type {null | Element} */\n\tvar element = null;\n\n\tif (hydrating && hydrate_node.nodeType === ELEMENT_NODE) {\n\t\telement = /** @type {Element} */ (hydrate_node);\n\t\thydrate_next();\n\t}\n\n\tvar anchor = /** @type {TemplateNode} */ (hydrating ? hydrate_node : node);\n\n\t/** @type {Effect | null} */\n\tvar effect;\n\n\t/**\n\t * The keyed `{#each ...}` item block, if any, that this element is inside.\n\t * We track this so we can set it when changing the element, allowing any\n\t * `animate:` directive to bind itself to the correct block\n\t */\n\tvar each_item_block = current_each_item;\n\n\tblock(() => {\n\t\tconst next_tag = get_tag() || null;\n\t\tvar ns = get_namespace ? get_namespace() : is_svg || next_tag === 'svg' ? NAMESPACE_SVG : null;\n\n\t\t// Assumption: Noone changes the namespace but not the tag (what would that even mean?)\n\t\tif (next_tag === tag) return;\n\n\t\t// See explanation of `each_item_block` above\n\t\tvar previous_each_item = current_each_item;\n\t\tset_current_each_item(each_item_block);\n\n\t\tif (effect) {\n\t\t\tif (next_tag === null) {\n\t\t\t\t// start outro\n\t\t\t\tpause_effect(effect, () => {\n\t\t\t\t\teffect = null;\n\t\t\t\t\tcurrent_tag = null;\n\t\t\t\t});\n\t\t\t} else if (next_tag === current_tag) {\n\t\t\t\t// same tag as is currently rendered — abort outro\n\t\t\t\tresume_effect(effect);\n\t\t\t} else {\n\t\t\t\t// tag is changing — destroy immediately, render contents without intro transitions\n\t\t\t\tdestroy_effect(effect);\n\t\t\t\tset_should_intro(false);\n\t\t\t}\n\t\t}\n\n\t\tif (next_tag && next_tag !== current_tag) {\n\t\t\teffect = branch(() => {\n\t\t\t\telement = hydrating\n\t\t\t\t\t? /** @type {Element} */ (element)\n\t\t\t\t\t: ns\n\t\t\t\t\t\t? document.createElementNS(ns, next_tag)\n\t\t\t\t\t\t: document.createElement(next_tag);\n\n\t\t\t\tif (DEV && location) {\n\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\telement.__svelte_meta = {\n\t\t\t\t\t\tparent: dev_stack,\n\t\t\t\t\t\tloc: {\n\t\t\t\t\t\t\tfile: filename,\n\t\t\t\t\t\t\tline: location[0],\n\t\t\t\t\t\t\tcolumn: location[1]\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tassign_nodes(element, element);\n\n\t\t\t\tif (render_fn) {\n\t\t\t\t\tif (hydrating && is_raw_text_element(next_tag)) {\n\t\t\t\t\t\t// prevent hydration glitches\n\t\t\t\t\t\telement.append(document.createComment(''));\n\t\t\t\t\t}\n\n\t\t\t\t\t// If hydrating, use the existing ssr comment as the anchor so that the\n\t\t\t\t\t// inner open and close methods can pick up the existing nodes correctly\n\t\t\t\t\tvar child_anchor = /** @type {TemplateNode} */ (\n\t\t\t\t\t\thydrating ? get_first_child(element) : element.appendChild(create_text())\n\t\t\t\t\t);\n\n\t\t\t\t\tif (hydrating) {\n\t\t\t\t\t\tif (child_anchor === null) {\n\t\t\t\t\t\t\tset_hydrating(false);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tset_hydrate_node(child_anchor);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// `child_anchor` is undefined if this is a void element, but we still\n\t\t\t\t\t// need to call `render_fn` in order to run actions etc. If the element\n\t\t\t\t\t// contains children, it's a user error (which is warned on elsewhere)\n\t\t\t\t\t// and the DOM will be silently discarded\n\t\t\t\t\trender_fn(element, child_anchor);\n\t\t\t\t}\n\n\t\t\t\t// we do this after calling `render_fn` so that child effects don't override `nodes.end`\n\t\t\t\t/** @type {Effect} */ (active_effect).nodes_end = element;\n\n\t\t\t\tanchor.before(element);\n\t\t\t});\n\t\t}\n\n\t\ttag = next_tag;\n\t\tif (tag) current_tag = tag;\n\t\tset_should_intro(true);\n\n\t\tset_current_each_item(previous_each_item);\n\t}, EFFECT_TRANSPARENT);\n\n\tif (was_hydrating) {\n\t\tset_hydrating(true);\n\t\tset_hydrate_node(anchor);\n\t}\n}\n","import { DEV } from 'esm-env';\nimport { register_style } from '../dev/css.js';\nimport { effect } from '../reactivity/effects.js';\n\n/**\n * @param {Node} anchor\n * @param {{ hash: string, code: string }} css\n */\nexport function append_styles(anchor, css) {\n\t// Use `queue_micro_task` to ensure `anchor` is in the DOM, otherwise getRootNode() will yield wrong results\n\teffect(() => {\n\t\tvar root = anchor.getRootNode();\n\n\t\tvar target = /** @type {ShadowRoot} */ (root).host\n\t\t\t? /** @type {ShadowRoot} */ (root)\n\t\t\t: /** @type {Document} */ (root).head ?? /** @type {Document} */ (root.ownerDocument).head;\n\n\t\t// Always querying the DOM is roughly the same perf as additionally checking for presence in a map first assuming\n\t\t// that you'll get cache hits half of the time, so we just always query the dom for simplicity and code savings.\n\t\tif (!target.querySelector('#' + css.hash)) {\n\t\t\tconst style = document.createElement('style');\n\t\t\tstyle.id = css.hash;\n\t\t\tstyle.textContent = css.code;\n\n\t\t\ttarget.appendChild(style);\n\n\t\t\tif (DEV) {\n\t\t\t\tregister_style(css.hash, style);\n\t\t\t}\n\t\t}\n\t});\n}\n","/** @import { ActionPayload } from '#client' */\nimport { effect, render_effect } from '../../reactivity/effects.js';\nimport { safe_not_equal } from '../../reactivity/equality.js';\nimport { deep_read_state, untrack } from '../../runtime.js';\n\n/**\n * @template P\n * @param {Element} dom\n * @param {(dom: Element, value?: P) => ActionPayload<P>} action\n * @param {() => P} [get_value]\n * @returns {void}\n */\nexport function action(dom, action, get_value) {\n\teffect(() => {\n\t\tvar payload = untrack(() => action(dom, get_value?.()) || {});\n\n\t\tif (get_value && payload?.update) {\n\t\t\tvar inited = false;\n\t\t\t/** @type {P} */\n\t\t\tvar prev = /** @type {any} */ ({}); // initialize with something so it's never equal on first run\n\n\t\t\trender_effect(() => {\n\t\t\t\tvar value = get_value();\n\n\t\t\t\t// Action's update method is coarse-grained, i.e. when anything in the passed value changes, update.\n\t\t\t\t// This works in legacy mode because of mutable_source being updated as a whole, but when using $state\n\t\t\t\t// together with actions and mutation, it wouldn't notice the change without a deep read.\n\t\t\t\tdeep_read_state(value);\n\n\t\t\t\tif (inited && safe_not_equal(prev, value)) {\n\t\t\t\t\tprev = value;\n\t\t\t\t\t/** @type {Function} */ (payload.update)(value);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tinited = true;\n\t\t}\n\n\t\tif (payload?.destroy) {\n\t\t\treturn () => /** @type {Function} */ (payload.destroy)();\n\t\t}\n\t});\n}\n","/** @import { Effect } from '#client' */\nimport { block, branch, effect, destroy_effect } from '../../reactivity/effects.js';\n\n// TODO in 6.0 or 7.0, when we remove legacy mode, we can simplify this by\n// getting rid of the block/branch stuff and just letting the effect rip.\n// see https://github.com/sveltejs/svelte/pull/15962\n\n/**\n * @param {Element} node\n * @param {() => (node: Element) => void} get_fn\n */\nexport function attach(node, get_fn) {\n\t/** @type {false | undefined | ((node: Element) => void)} */\n\tvar fn = undefined;\n\n\t/** @type {Effect | null} */\n\tvar e;\n\n\tblock(() => {\n\t\tif (fn !== (fn = get_fn())) {\n\t\t\tif (e) {\n\t\t\t\tdestroy_effect(e);\n\t\t\t\te = null;\n\t\t\t}\n\n\t\t\tif (fn) {\n\t\t\t\te = branch(() => {\n\t\t\t\t\teffect(() => /** @type {(node: Element) => void} */ (fn)(node));\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n}\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import { escape_html } from '../../escaping.js';\nimport { clsx as _clsx } from 'clsx';\n\n/**\n * `<div translate={false}>` should be rendered as `<div translate=\"no\">` and _not_\n * `<div translate=\"false\">`, which is equivalent to `<div translate=\"yes\">`. There\n * may be other odd cases that need to be added to this list in future\n * @type {Record<string, Map<any, string>>}\n */\nconst replacements = {\n\ttranslate: new Map([\n\t\t[true, 'yes'],\n\t\t[false, 'no']\n\t])\n};\n\n/**\n * @template V\n * @param {string} name\n * @param {V} value\n * @param {boolean} [is_boolean]\n * @returns {string}\n */\nexport function attr(name, value, is_boolean = false) {\n\tif (value == null || (!value && is_boolean)) return '';\n\tconst normalized = (name in replacements && replacements[name].get(value)) || value;\n\tconst assignment = is_boolean ? '' : `=\"${escape_html(normalized, true)}\"`;\n\treturn ` ${name}${assignment}`;\n}\n\n/**\n * Small wrapper around clsx to preserve Svelte's (weird) handling of falsy values.\n * TODO Svelte 6 revisit this, and likely turn all falsy values into the empty string (what clsx also does)\n * @param  {any} value\n */\nexport function clsx(value) {\n\tif (typeof value === 'object') {\n\t\treturn _clsx(value);\n\t} else {\n\t\treturn value ?? '';\n\t}\n}\n\nconst whitespace = [...' \\t\\n\\r\\f\\u00a0\\u000b\\ufeff'];\n\n/**\n * @param {any} value\n * @param {string | null} [hash]\n * @param {Record<string, boolean>} [directives]\n * @returns {string | null}\n */\nexport function to_class(value, hash, directives) {\n\tvar classname = value == null ? '' : '' + value;\n\n\tif (hash) {\n\t\tclassname = classname ? classname + ' ' + hash : hash;\n\t}\n\n\tif (directives) {\n\t\tfor (var key in directives) {\n\t\t\tif (directives[key]) {\n\t\t\t\tclassname = classname ? classname + ' ' + key : key;\n\t\t\t} else if (classname.length) {\n\t\t\t\tvar len = key.length;\n\t\t\t\tvar a = 0;\n\n\t\t\t\twhile ((a = classname.indexOf(key, a)) >= 0) {\n\t\t\t\t\tvar b = a + len;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t(a === 0 || whitespace.includes(classname[a - 1])) &&\n\t\t\t\t\t\t(b === classname.length || whitespace.includes(classname[b]))\n\t\t\t\t\t) {\n\t\t\t\t\t\tclassname = (a === 0 ? '' : classname.substring(0, a)) + classname.substring(b + 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ta = b;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn classname === '' ? null : classname;\n}\n\n/**\n *\n * @param {Record<string,any>} styles\n * @param {boolean} important\n */\nfunction append_styles(styles, important = false) {\n\tvar separator = important ? ' !important;' : ';';\n\tvar css = '';\n\n\tfor (var key in styles) {\n\t\tvar value = styles[key];\n\t\tif (value != null && value !== '') {\n\t\t\tcss += ' ' + key + ': ' + value + separator;\n\t\t}\n\t}\n\n\treturn css;\n}\n\n/**\n * @param {string} name\n * @returns {string}\n */\nfunction to_css_name(name) {\n\tif (name[0] !== '-' || name[1] !== '-') {\n\t\treturn name.toLowerCase();\n\t}\n\treturn name;\n}\n\n/**\n * @param {any} value\n * @param {Record<string, any> | [Record<string, any>, Record<string, any>]} [styles]\n * @returns {string | null}\n */\nexport function to_style(value, styles) {\n\tif (styles) {\n\t\tvar new_style = '';\n\n\t\t/** @type {Record<string,any> | undefined} */\n\t\tvar normal_styles;\n\n\t\t/** @type {Record<string,any> | undefined} */\n\t\tvar important_styles;\n\n\t\tif (Array.isArray(styles)) {\n\t\t\tnormal_styles = styles[0];\n\t\t\timportant_styles = styles[1];\n\t\t} else {\n\t\t\tnormal_styles = styles;\n\t\t}\n\n\t\tif (value) {\n\t\t\tvalue = String(value)\n\t\t\t\t.replaceAll(/\\s*\\/\\*.*?\\*\\/\\s*/g, '')\n\t\t\t\t.trim();\n\n\t\t\t/** @type {boolean | '\"' | \"'\"} */\n\t\t\tvar in_str = false;\n\t\t\tvar in_apo = 0;\n\t\t\tvar in_comment = false;\n\n\t\t\tvar reserved_names = [];\n\n\t\t\tif (normal_styles) {\n\t\t\t\treserved_names.push(...Object.keys(normal_styles).map(to_css_name));\n\t\t\t}\n\t\t\tif (important_styles) {\n\t\t\t\treserved_names.push(...Object.keys(important_styles).map(to_css_name));\n\t\t\t}\n\n\t\t\tvar start_index = 0;\n\t\t\tvar name_index = -1;\n\n\t\t\tconst len = value.length;\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\tvar c = value[i];\n\n\t\t\t\tif (in_comment) {\n\t\t\t\t\tif (c === '/' && value[i - 1] === '*') {\n\t\t\t\t\t\tin_comment = false;\n\t\t\t\t\t}\n\t\t\t\t} else if (in_str) {\n\t\t\t\t\tif (in_str === c) {\n\t\t\t\t\t\tin_str = false;\n\t\t\t\t\t}\n\t\t\t\t} else if (c === '/' && value[i + 1] === '*') {\n\t\t\t\t\tin_comment = true;\n\t\t\t\t} else if (c === '\"' || c === \"'\") {\n\t\t\t\t\tin_str = c;\n\t\t\t\t} else if (c === '(') {\n\t\t\t\t\tin_apo++;\n\t\t\t\t} else if (c === ')') {\n\t\t\t\t\tin_apo--;\n\t\t\t\t}\n\n\t\t\t\tif (!in_comment && in_str === false && in_apo === 0) {\n\t\t\t\t\tif (c === ':' && name_index === -1) {\n\t\t\t\t\t\tname_index = i;\n\t\t\t\t\t} else if (c === ';' || i === len - 1) {\n\t\t\t\t\t\tif (name_index !== -1) {\n\t\t\t\t\t\t\tvar name = to_css_name(value.substring(start_index, name_index).trim());\n\n\t\t\t\t\t\t\tif (!reserved_names.includes(name)) {\n\t\t\t\t\t\t\t\tif (c !== ';') {\n\t\t\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tvar property = value.substring(start_index, i).trim();\n\t\t\t\t\t\t\t\tnew_style += ' ' + property + ';';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart_index = i + 1;\n\t\t\t\t\t\tname_index = -1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (normal_styles) {\n\t\t\tnew_style += append_styles(normal_styles);\n\t\t}\n\n\t\tif (important_styles) {\n\t\t\tnew_style += append_styles(important_styles, true);\n\t\t}\n\n\t\tnew_style = new_style.trim();\n\t\treturn new_style === '' ? null : new_style;\n\t}\n\n\treturn value == null ? null : String(value);\n}\n","import { to_class } from '../../../shared/attributes.js';\nimport { hydrating } from '../hydration.js';\n\n/**\n * @param {Element} dom\n * @param {boolean | number} is_html\n * @param {string | null} value\n * @param {string} [hash]\n * @param {Record<string, any>} [prev_classes]\n * @param {Record<string, any>} [next_classes]\n * @returns {Record<string, boolean> | undefined}\n */\nexport function set_class(dom, is_html, value, hash, prev_classes, next_classes) {\n\t// @ts-expect-error need to add __className to patched prototype\n\tvar prev = dom.__className;\n\n\tif (\n\t\thydrating ||\n\t\tprev !== value ||\n\t\tprev === undefined // for edge case of `class={undefined}`\n\t) {\n\t\tvar next_class_name = to_class(value, hash, next_classes);\n\n\t\tif (!hydrating || next_class_name !== dom.getAttribute('class')) {\n\t\t\t// Removing the attribute when the value is only an empty string causes\n\t\t\t// performance issues vs simply making the className an empty string. So\n\t\t\t// we should only remove the class if the value is nullish\n\t\t\t// and there no hash/directives :\n\t\t\tif (next_class_name == null) {\n\t\t\t\tdom.removeAttribute('class');\n\t\t\t} else if (is_html) {\n\t\t\t\tdom.className = next_class_name;\n\t\t\t} else {\n\t\t\t\tdom.setAttribute('class', next_class_name);\n\t\t\t}\n\t\t}\n\n\t\t// @ts-expect-error need to add __className to patched prototype\n\t\tdom.__className = value;\n\t} else if (next_classes && prev_classes !== next_classes) {\n\t\tfor (var key in next_classes) {\n\t\t\tvar is_present = !!next_classes[key];\n\n\t\t\tif (prev_classes == null || is_present !== !!prev_classes[key]) {\n\t\t\t\tdom.classList.toggle(key, is_present);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn next_classes;\n}\n","import { to_style } from '../../../shared/attributes.js';\nimport { hydrating } from '../hydration.js';\n\n/**\n * @param {Element & ElementCSSInlineStyle} dom\n * @param {Record<string, any>} prev\n * @param {Record<string, any>} next\n * @param {string} [priority]\n */\nfunction update_styles(dom, prev = {}, next, priority) {\n\tfor (var key in next) {\n\t\tvar value = next[key];\n\n\t\tif (prev[key] !== value) {\n\t\t\tif (next[key] == null) {\n\t\t\t\tdom.style.removeProperty(key);\n\t\t\t} else {\n\t\t\t\tdom.style.setProperty(key, value, priority);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} dom\n * @param {string | null} value\n * @param {Record<string, any> | [Record<string, any>, Record<string, any>]} [prev_styles]\n * @param {Record<string, any> | [Record<string, any>, Record<string, any>]} [next_styles]\n */\nexport function set_style(dom, value, prev_styles, next_styles) {\n\t// @ts-expect-error\n\tvar prev = dom.__style;\n\n\tif (hydrating || prev !== value) {\n\t\tvar next_style_attr = to_style(value, next_styles);\n\n\t\tif (!hydrating || next_style_attr !== dom.getAttribute('style')) {\n\t\t\tif (next_style_attr == null) {\n\t\t\t\tdom.removeAttribute('style');\n\t\t\t} else {\n\t\t\t\tdom.style.cssText = next_style_attr;\n\t\t\t}\n\t\t}\n\n\t\t// @ts-expect-error\n\t\tdom.__style = value;\n\t} else if (next_styles) {\n\t\tif (Array.isArray(next_styles)) {\n\t\t\tupdate_styles(dom, prev_styles?.[0], next_styles[0]);\n\t\t\tupdate_styles(dom, prev_styles?.[1], next_styles[1], 'important');\n\t\t} else {\n\t\t\tupdate_styles(dom, prev_styles, next_styles);\n\t\t}\n\t}\n\n\treturn next_styles;\n}\n","import { effect, teardown } from '../../../reactivity/effects.js';\nimport { listen_to_event_and_reset_event } from './shared.js';\nimport { is } from '../../../proxy.js';\nimport { is_array } from '../../../../shared/utils.js';\nimport * as w from '../../../warnings.js';\n\n/**\n * Selects the correct option(s) (depending on whether this is a multiple select)\n * @template V\n * @param {HTMLSelectElement} select\n * @param {V} value\n * @param {boolean} mounting\n */\nexport function select_option(select, value, mounting = false) {\n\tif (select.multiple) {\n\t\t// If value is null or undefined, keep the selection as is\n\t\tif (value == undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If not an array, warn and keep the selection as is\n\t\tif (!is_array(value)) {\n\t\t\treturn w.select_multiple_invalid_value();\n\t\t}\n\n\t\t// Otherwise, update the selection\n\t\tfor (var option of select.options) {\n\t\t\toption.selected = value.includes(get_option_value(option));\n\t\t}\n\n\t\treturn;\n\t}\n\n\tfor (option of select.options) {\n\t\tvar option_value = get_option_value(option);\n\t\tif (is(option_value, value)) {\n\t\t\toption.selected = true;\n\t\t\treturn;\n\t\t}\n\t}\n\n\tif (!mounting || value !== undefined) {\n\t\tselect.selectedIndex = -1; // no option should be selected\n\t}\n}\n\n/**\n * Selects the correct option(s) if `value` is given,\n * and then sets up a mutation observer to sync the\n * current selection to the dom when it changes. Such\n * changes could for example occur when options are\n * inside an `#each` block.\n * @param {HTMLSelectElement} select\n */\nexport function init_select(select) {\n\tvar observer = new MutationObserver(() => {\n\t\t// @ts-ignore\n\t\tselect_option(select, select.__value);\n\t\t// Deliberately don't update the potential binding value,\n\t\t// the model should be preserved unless explicitly changed\n\t});\n\n\tobserver.observe(select, {\n\t\t// Listen to option element changes\n\t\tchildList: true,\n\t\tsubtree: true, // because of <optgroup>\n\t\t// Listen to option element value attribute changes\n\t\t// (doesn't get notified of select value changes,\n\t\t// because that property is not reflected as an attribute)\n\t\tattributes: true,\n\t\tattributeFilter: ['value']\n\t});\n\n\tteardown(() => {\n\t\tobserver.disconnect();\n\t});\n}\n\n/**\n * @param {HTMLSelectElement} select\n * @param {() => unknown} get\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_select_value(select, get, set = get) {\n\tvar mounting = true;\n\n\tlisten_to_event_and_reset_event(select, 'change', (is_reset) => {\n\t\tvar query = is_reset ? '[selected]' : ':checked';\n\t\t/** @type {unknown} */\n\t\tvar value;\n\n\t\tif (select.multiple) {\n\t\t\tvalue = [].map.call(select.querySelectorAll(query), get_option_value);\n\t\t} else {\n\t\t\t/** @type {HTMLOptionElement | null} */\n\t\t\tvar selected_option =\n\t\t\t\tselect.querySelector(query) ??\n\t\t\t\t// will fall back to first non-disabled option if no option is selected\n\t\t\t\tselect.querySelector('option:not([disabled])');\n\t\t\tvalue = selected_option && get_option_value(selected_option);\n\t\t}\n\n\t\tset(value);\n\t});\n\n\t// Needs to be an effect, not a render_effect, so that in case of each loops the logic runs after the each block has updated\n\teffect(() => {\n\t\tvar value = get();\n\t\tselect_option(select, value, mounting);\n\n\t\t// Mounting and value undefined -> take selection from dom\n\t\tif (mounting && value === undefined) {\n\t\t\t/** @type {HTMLOptionElement | null} */\n\t\t\tvar selected_option = select.querySelector(':checked');\n\t\t\tif (selected_option !== null) {\n\t\t\t\tvalue = get_option_value(selected_option);\n\t\t\t\tset(value);\n\t\t\t}\n\t\t}\n\n\t\t// @ts-ignore\n\t\tselect.__value = value;\n\t\tmounting = false;\n\t});\n\n\tinit_select(select);\n}\n\n/** @param {HTMLOptionElement} option */\nfunction get_option_value(option) {\n\t// __value only exists if the <option> has a value attribute\n\tif ('__value' in option) {\n\t\treturn option.__value;\n\t} else {\n\t\treturn option.value;\n\t}\n}\n","/** @import { Effect } from '#client' */\nimport { DEV } from 'esm-env';\nimport { hydrating, set_hydrating } from '../hydration.js';\nimport { get_descriptors, get_prototype_of } from '../../../shared/utils.js';\nimport { create_event, delegate } from './events.js';\nimport { add_form_reset_listener, autofocus } from './misc.js';\nimport * as w from '../../warnings.js';\nimport { LOADING_ATTR_SYMBOL } from '#client/constants';\nimport { queue_idle_task } from '../task.js';\nimport { is_capture_event, is_delegated, normalize_attribute } from '../../../../utils.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tget,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../runtime.js';\nimport { attach } from './attachments.js';\nimport { clsx } from '../../../shared/attributes.js';\nimport { set_class } from './class.js';\nimport { set_style } from './style.js';\nimport { ATTACHMENT_KEY, NAMESPACE_HTML, UNINITIALIZED } from '../../../../constants.js';\nimport { block, branch, destroy_effect, effect } from '../../reactivity/effects.js';\nimport { init_select, select_option } from './bindings/select.js';\nimport { flatten } from '../../reactivity/async.js';\n\nexport const CLASS = Symbol('class');\nexport const STYLE = Symbol('style');\n\nconst IS_CUSTOM_ELEMENT = Symbol('is custom element');\nconst IS_HTML = Symbol('is html');\n\n/**\n * The value/checked attribute in the template actually corresponds to the defaultValue property, so we need\n * to remove it upon hydration to avoid a bug when someone resets the form value.\n * @param {HTMLInputElement} input\n * @returns {void}\n */\nexport function remove_input_defaults(input) {\n\tif (!hydrating) return;\n\n\tvar already_removed = false;\n\n\t// We try and remove the default attributes later, rather than sync during hydration.\n\t// Doing it sync during hydration has a negative impact on performance, but deferring the\n\t// work in an idle task alleviates this greatly. If a form reset event comes in before\n\t// the idle callback, then we ensure the input defaults are cleared just before.\n\tvar remove_defaults = () => {\n\t\tif (already_removed) return;\n\t\talready_removed = true;\n\n\t\t// Remove the attributes but preserve the values\n\t\tif (input.hasAttribute('value')) {\n\t\t\tvar value = input.value;\n\t\t\tset_attribute(input, 'value', null);\n\t\t\tinput.value = value;\n\t\t}\n\n\t\tif (input.hasAttribute('checked')) {\n\t\t\tvar checked = input.checked;\n\t\t\tset_attribute(input, 'checked', null);\n\t\t\tinput.checked = checked;\n\t\t}\n\t};\n\n\t// @ts-expect-error\n\tinput.__on_r = remove_defaults;\n\tqueue_idle_task(remove_defaults);\n\tadd_form_reset_listener();\n}\n\n/**\n * @param {Element} element\n * @param {any} value\n */\nexport function set_value(element, value) {\n\tvar attributes = get_attributes(element);\n\n\tif (\n\t\tattributes.value ===\n\t\t\t(attributes.value =\n\t\t\t\t// treat null and undefined the same for the initial value\n\t\t\t\tvalue ?? undefined) ||\n\t\t// @ts-expect-error\n\t\t// `progress` elements always need their value set when it's `0`\n\t\t(element.value === value && (value !== 0 || element.nodeName !== 'PROGRESS'))\n\t) {\n\t\treturn;\n\t}\n\n\t// @ts-expect-error\n\telement.value = value ?? '';\n}\n\n/**\n * @param {Element} element\n * @param {boolean} checked\n */\nexport function set_checked(element, checked) {\n\tvar attributes = get_attributes(element);\n\n\tif (\n\t\tattributes.checked ===\n\t\t(attributes.checked =\n\t\t\t// treat null and undefined the same for the initial value\n\t\t\tchecked ?? undefined)\n\t) {\n\t\treturn;\n\t}\n\n\t// @ts-expect-error\n\telement.checked = checked;\n}\n\n/**\n * Sets the `selected` attribute on an `option` element.\n * Not set through the property because that doesn't reflect to the DOM,\n * which means it wouldn't be taken into account when a form is reset.\n * @param {HTMLOptionElement} element\n * @param {boolean} selected\n */\nexport function set_selected(element, selected) {\n\tif (selected) {\n\t\t// The selected option could've changed via user selection, and\n\t\t// setting the value without this check would set it back.\n\t\tif (!element.hasAttribute('selected')) {\n\t\t\telement.setAttribute('selected', '');\n\t\t}\n\t} else {\n\t\telement.removeAttribute('selected');\n\t}\n}\n\n/**\n * Applies the default checked property without influencing the current checked property.\n * @param {HTMLInputElement} element\n * @param {boolean} checked\n */\nexport function set_default_checked(element, checked) {\n\tconst existing_value = element.checked;\n\telement.defaultChecked = checked;\n\telement.checked = existing_value;\n}\n\n/**\n * Applies the default value property without influencing the current value property.\n * @param {HTMLInputElement | HTMLTextAreaElement} element\n * @param {string} value\n */\nexport function set_default_value(element, value) {\n\tconst existing_value = element.value;\n\telement.defaultValue = value;\n\telement.value = existing_value;\n}\n\n/**\n * @param {Element} element\n * @param {string} attribute\n * @param {string | null} value\n * @param {boolean} [skip_warning]\n */\nexport function set_attribute(element, attribute, value, skip_warning) {\n\tvar attributes = get_attributes(element);\n\n\tif (hydrating) {\n\t\tattributes[attribute] = element.getAttribute(attribute);\n\n\t\tif (\n\t\t\tattribute === 'src' ||\n\t\t\tattribute === 'srcset' ||\n\t\t\t(attribute === 'href' && element.nodeName === 'LINK')\n\t\t) {\n\t\t\tif (!skip_warning) {\n\t\t\t\tcheck_src_in_dev_hydration(element, attribute, value ?? '');\n\t\t\t}\n\n\t\t\t// If we reset these attributes, they would result in another network request, which we want to avoid.\n\t\t\t// We assume they are the same between client and server as checking if they are equal is expensive\n\t\t\t// (we can't just compare the strings as they can be different between client and server but result in the\n\t\t\t// same url, so we would need to create hidden anchor elements to compare them)\n\t\t\treturn;\n\t\t}\n\t}\n\n\tif (attributes[attribute] === (attributes[attribute] = value)) return;\n\n\tif (attribute === 'loading') {\n\t\t// @ts-expect-error\n\t\telement[LOADING_ATTR_SYMBOL] = value;\n\t}\n\n\tif (value == null) {\n\t\telement.removeAttribute(attribute);\n\t} else if (typeof value !== 'string' && get_setters(element).includes(attribute)) {\n\t\t// @ts-ignore\n\t\telement[attribute] = value;\n\t} else {\n\t\telement.setAttribute(attribute, value);\n\t}\n}\n\n/**\n * @param {Element} dom\n * @param {string} attribute\n * @param {string} value\n */\nexport function set_xlink_attribute(dom, attribute, value) {\n\tdom.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\n\n/**\n * @param {HTMLElement} node\n * @param {string} prop\n * @param {any} value\n */\nexport function set_custom_element_data(node, prop, value) {\n\t// We need to ensure that setting custom element props, which can\n\t// invoke lifecycle methods on other custom elements, does not also\n\t// associate those lifecycle methods with the current active reaction\n\t// or effect\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\n\t// If we're hydrating but the custom element is from Svelte, and it already scaffolded,\n\t// then it might run block logic in hydration mode, which we have to prevent.\n\tlet was_hydrating = hydrating;\n\tif (hydrating) {\n\t\tset_hydrating(false);\n\t}\n\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\n\ttry {\n\t\tif (\n\t\t\t// `style` should use `set_attribute` rather than the setter\n\t\t\tprop !== 'style' &&\n\t\t\t// Don't compute setters for custom elements while they aren't registered yet,\n\t\t\t// because during their upgrade/instantiation they might add more setters.\n\t\t\t// Instead, fall back to a simple \"an object, then set as property\" heuristic.\n\t\t\t(setters_cache.has(node.nodeName) ||\n\t\t\t// customElements may not be available in browser extension contexts\n\t\t\t!customElements ||\n\t\t\tcustomElements.get(node.tagName.toLowerCase())\n\t\t\t\t? get_setters(node).includes(prop)\n\t\t\t\t: value && typeof value === 'object')\n\t\t) {\n\t\t\t// @ts-expect-error\n\t\t\tnode[prop] = value;\n\t\t} else {\n\t\t\t// We did getters etc checks already, stringify before passing to set_attribute\n\t\t\t// to ensure it doesn't invoke the same logic again, and potentially populating\n\t\t\t// the setters cache too early.\n\t\t\tset_attribute(node, prop, value == null ? value : String(value));\n\t\t}\n\t} finally {\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_effect(previous_effect);\n\t\tif (was_hydrating) {\n\t\t\tset_hydrating(true);\n\t\t}\n\t}\n}\n\n/**\n * Spreads attributes onto a DOM element, taking into account the currently set attributes\n * @param {Element & ElementCSSInlineStyle} element\n * @param {Record<string | symbol, any> | undefined} prev\n * @param {Record<string | symbol, any>} next New attributes - this function mutates this object\n * @param {string} [css_hash]\n * @param {boolean} [skip_warning]\n * @returns {Record<string, any>}\n */\nexport function set_attributes(element, prev, next, css_hash, skip_warning = false) {\n\tvar attributes = get_attributes(element);\n\n\tvar is_custom_element = attributes[IS_CUSTOM_ELEMENT];\n\tvar preserve_attribute_case = !attributes[IS_HTML];\n\n\t// If we're hydrating but the custom element is from Svelte, and it already scaffolded,\n\t// then it might run block logic in hydration mode, which we have to prevent.\n\tlet is_hydrating_custom_element = hydrating && is_custom_element;\n\tif (is_hydrating_custom_element) {\n\t\tset_hydrating(false);\n\t}\n\n\tvar current = prev || {};\n\tvar is_option_element = element.tagName === 'OPTION';\n\n\tfor (var key in prev) {\n\t\tif (!(key in next)) {\n\t\t\tnext[key] = null;\n\t\t}\n\t}\n\n\tif (next.class) {\n\t\tnext.class = clsx(next.class);\n\t} else if (css_hash || next[CLASS]) {\n\t\tnext.class = null; /* force call to set_class() */\n\t}\n\n\tif (next[STYLE]) {\n\t\tnext.style ??= null; /* force call to set_style() */\n\t}\n\n\tvar setters = get_setters(element);\n\n\t// since key is captured we use const\n\tfor (const key in next) {\n\t\t// let instead of var because referenced in a closure\n\t\tlet value = next[key];\n\n\t\t// Up here because we want to do this for the initial value, too, even if it's undefined,\n\t\t// and this wouldn't be reached in case of undefined because of the equality check below\n\t\tif (is_option_element && key === 'value' && value == null) {\n\t\t\t// The <option> element is a special case because removing the value attribute means\n\t\t\t// the value is set to the text content of the option element, and setting the value\n\t\t\t// to null or undefined means the value is set to the string \"null\" or \"undefined\".\n\t\t\t// To align with how we handle this case in non-spread-scenarios, this logic is needed.\n\t\t\t// There's a super-edge-case bug here that is left in in favor of smaller code size:\n\t\t\t// Because of the \"set missing props to null\" logic above, we can't differentiate\n\t\t\t// between a missing value and an explicitly set value of null or undefined. That means\n\t\t\t// that once set, the value attribute of an <option> element can't be removed. This is\n\t\t\t// a very rare edge case, and removing the attribute altogether isn't possible either\n\t\t\t// for the <option value={undefined}> case, so we're not losing any functionality here.\n\t\t\t// @ts-ignore\n\t\t\telement.value = element.__value = '';\n\t\t\tcurrent[key] = value;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (key === 'class') {\n\t\t\tvar is_html = element.namespaceURI === 'http://www.w3.org/1999/xhtml';\n\t\t\tset_class(element, is_html, value, css_hash, prev?.[CLASS], next[CLASS]);\n\t\t\tcurrent[key] = value;\n\t\t\tcurrent[CLASS] = next[CLASS];\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (key === 'style') {\n\t\t\tset_style(element, value, prev?.[STYLE], next[STYLE]);\n\t\t\tcurrent[key] = value;\n\t\t\tcurrent[STYLE] = next[STYLE];\n\t\t\tcontinue;\n\t\t}\n\n\t\tvar prev_value = current[key];\n\n\t\t// Skip if value is unchanged, unless it's `undefined` and the element still has the attribute\n\t\tif (value === prev_value && !(value === undefined && element.hasAttribute(key))) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tcurrent[key] = value;\n\n\t\tvar prefix = key[0] + key[1]; // this is faster than key.slice(0, 2)\n\t\tif (prefix === '$$') continue;\n\n\t\tif (prefix === 'on') {\n\t\t\t/** @type {{ capture?: true }} */\n\t\t\tconst opts = {};\n\t\t\tconst event_handle_key = '$$' + key;\n\t\t\tlet event_name = key.slice(2);\n\t\t\tvar delegated = is_delegated(event_name);\n\n\t\t\tif (is_capture_event(event_name)) {\n\t\t\t\tevent_name = event_name.slice(0, -7);\n\t\t\t\topts.capture = true;\n\t\t\t}\n\n\t\t\tif (!delegated && prev_value) {\n\t\t\t\t// Listening to same event but different handler -> our handle function below takes care of this\n\t\t\t\t// If we were to remove and add listeners in this case, it could happen that the event is \"swallowed\"\n\t\t\t\t// (the browser seems to not know yet that a new one exists now) and doesn't reach the handler\n\t\t\t\t// https://github.com/sveltejs/svelte/issues/11903\n\t\t\t\tif (value != null) continue;\n\n\t\t\t\telement.removeEventListener(event_name, current[event_handle_key], opts);\n\t\t\t\tcurrent[event_handle_key] = null;\n\t\t\t}\n\n\t\t\tif (value != null) {\n\t\t\t\tif (!delegated) {\n\t\t\t\t\t/**\n\t\t\t\t\t * @this {any}\n\t\t\t\t\t * @param {Event} evt\n\t\t\t\t\t */\n\t\t\t\t\tfunction handle(evt) {\n\t\t\t\t\t\tcurrent[key].call(this, evt);\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrent[event_handle_key] = create_event(event_name, element, handle, opts);\n\t\t\t\t} else {\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\telement[`__${event_name}`] = value;\n\t\t\t\t\tdelegate([event_name]);\n\t\t\t\t}\n\t\t\t} else if (delegated) {\n\t\t\t\t// @ts-ignore\n\t\t\t\telement[`__${event_name}`] = undefined;\n\t\t\t}\n\t\t} else if (key === 'style') {\n\t\t\t// avoid using the setter\n\t\t\tset_attribute(element, key, value);\n\t\t} else if (key === 'autofocus') {\n\t\t\tautofocus(/** @type {HTMLElement} */ (element), Boolean(value));\n\t\t} else if (!is_custom_element && (key === '__value' || (key === 'value' && value != null))) {\n\t\t\t// @ts-ignore We're not running this for custom elements because __value is actually\n\t\t\t// how Lit stores the current value on the element, and messing with that would break things.\n\t\t\telement.value = element.__value = value;\n\t\t} else if (key === 'selected' && is_option_element) {\n\t\t\tset_selected(/** @type {HTMLOptionElement} */ (element), value);\n\t\t} else {\n\t\t\tvar name = key;\n\t\t\tif (!preserve_attribute_case) {\n\t\t\t\tname = normalize_attribute(name);\n\t\t\t}\n\n\t\t\tvar is_default = name === 'defaultValue' || name === 'defaultChecked';\n\n\t\t\tif (value == null && !is_custom_element && !is_default) {\n\t\t\t\tattributes[key] = null;\n\n\t\t\t\tif (name === 'value' || name === 'checked') {\n\t\t\t\t\t// removing value/checked also removes defaultValue/defaultChecked — preserve\n\t\t\t\t\tlet input = /** @type {HTMLInputElement} */ (element);\n\t\t\t\t\tconst use_default = prev === undefined;\n\t\t\t\t\tif (name === 'value') {\n\t\t\t\t\t\tlet previous = input.defaultValue;\n\t\t\t\t\t\tinput.removeAttribute(name);\n\t\t\t\t\t\tinput.defaultValue = previous;\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\tinput.value = input.__value = use_default ? previous : null;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet previous = input.defaultChecked;\n\t\t\t\t\t\tinput.removeAttribute(name);\n\t\t\t\t\t\tinput.defaultChecked = previous;\n\t\t\t\t\t\tinput.checked = use_default ? previous : false;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\telement.removeAttribute(key);\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\tis_default ||\n\t\t\t\t(setters.includes(name) && (is_custom_element || typeof value !== 'string'))\n\t\t\t) {\n\t\t\t\t// @ts-ignore\n\t\t\t\telement[name] = value;\n\t\t\t\t// remove it from attributes's cache\n\t\t\t\tif (name in attributes) attributes[name] = UNINITIALIZED;\n\t\t\t} else if (typeof value !== 'function') {\n\t\t\t\tset_attribute(element, name, value, skip_warning);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (is_hydrating_custom_element) {\n\t\tset_hydrating(true);\n\t}\n\n\treturn current;\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} element\n * @param {(...expressions: any) => Record<string | symbol, any>} fn\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {string} [css_hash]\n * @param {boolean} [skip_warning]\n */\nexport function attribute_effect(\n\telement,\n\tfn,\n\tsync = [],\n\tasync = [],\n\tcss_hash,\n\tskip_warning = false\n) {\n\tflatten(sync, async, (values) => {\n\t\t/** @type {Record<string | symbol, any> | undefined} */\n\t\tvar prev = undefined;\n\n\t\t/** @type {Record<symbol, Effect>} */\n\t\tvar effects = {};\n\n\t\tvar is_select = element.nodeName === 'SELECT';\n\t\tvar inited = false;\n\n\t\tblock(() => {\n\t\t\tvar next = fn(...values.map(get));\n\t\t\t/** @type {Record<string | symbol, any>} */\n\t\t\tvar current = set_attributes(element, prev, next, css_hash, skip_warning);\n\n\t\t\tif (inited && is_select && 'value' in next) {\n\t\t\t\tselect_option(/** @type {HTMLSelectElement} */ (element), next.value);\n\t\t\t}\n\n\t\t\tfor (let symbol of Object.getOwnPropertySymbols(effects)) {\n\t\t\t\tif (!next[symbol]) destroy_effect(effects[symbol]);\n\t\t\t}\n\n\t\t\tfor (let symbol of Object.getOwnPropertySymbols(next)) {\n\t\t\t\tvar n = next[symbol];\n\n\t\t\t\tif (symbol.description === ATTACHMENT_KEY && (!prev || n !== prev[symbol])) {\n\t\t\t\t\tif (effects[symbol]) destroy_effect(effects[symbol]);\n\t\t\t\t\teffects[symbol] = branch(() => attach(element, () => n));\n\t\t\t\t}\n\n\t\t\t\tcurrent[symbol] = n;\n\t\t\t}\n\n\t\t\tprev = current;\n\t\t});\n\n\t\tif (is_select) {\n\t\t\tvar select = /** @type {HTMLSelectElement} */ (element);\n\n\t\t\teffect(() => {\n\t\t\t\tselect_option(select, /** @type {Record<string | symbol, any>} */ (prev).value, true);\n\t\t\t\tinit_select(select);\n\t\t\t});\n\t\t}\n\n\t\tinited = true;\n\t});\n}\n\n/**\n *\n * @param {Element} element\n */\nfunction get_attributes(element) {\n\treturn /** @type {Record<string | symbol, unknown>} **/ (\n\t\t// @ts-expect-error\n\t\telement.__attributes ??= {\n\t\t\t[IS_CUSTOM_ELEMENT]: element.nodeName.includes('-'),\n\t\t\t[IS_HTML]: element.namespaceURI === NAMESPACE_HTML\n\t\t}\n\t);\n}\n\n/** @type {Map<string, string[]>} */\nvar setters_cache = new Map();\n\n/** @param {Element} element */\nfunction get_setters(element) {\n\tvar setters = setters_cache.get(element.nodeName);\n\tif (setters) return setters;\n\tsetters_cache.set(element.nodeName, (setters = []));\n\n\tvar descriptors;\n\tvar proto = element; // In the case of custom elements there might be setters on the instance\n\tvar element_proto = Element.prototype;\n\n\t// Stop at Element, from there on there's only unnecessary setters we're not interested in\n\t// Do not use contructor.name here as that's unreliable in some browser environments\n\twhile (element_proto !== proto) {\n\t\tdescriptors = get_descriptors(proto);\n\n\t\tfor (var key in descriptors) {\n\t\t\tif (descriptors[key].set) {\n\t\t\t\tsetters.push(key);\n\t\t\t}\n\t\t}\n\n\t\tproto = get_prototype_of(proto);\n\t}\n\n\treturn setters;\n}\n\n/**\n * @param {any} element\n * @param {string} attribute\n * @param {string} value\n */\nfunction check_src_in_dev_hydration(element, attribute, value) {\n\tif (!DEV) return;\n\tif (attribute === 'srcset' && srcset_url_equal(element, value)) return;\n\tif (src_url_equal(element.getAttribute(attribute) ?? '', value)) return;\n\n\tw.hydration_attribute_changed(\n\t\tattribute,\n\t\telement.outerHTML.replace(element.innerHTML, element.innerHTML && '...'),\n\t\tString(value)\n\t);\n}\n\n/**\n * @param {string} element_src\n * @param {string} url\n * @returns {boolean}\n */\nfunction src_url_equal(element_src, url) {\n\tif (element_src === url) return true;\n\treturn new URL(element_src, document.baseURI).href === new URL(url, document.baseURI).href;\n}\n\n/** @param {string} srcset */\nfunction split_srcset(srcset) {\n\treturn srcset.split(',').map((src) => src.trim().split(' ').filter(Boolean));\n}\n\n/**\n * @param {HTMLSourceElement | HTMLImageElement} element\n * @param {string} srcset\n * @returns {boolean}\n */\nfunction srcset_url_equal(element, srcset) {\n\tvar element_urls = split_srcset(element.srcset);\n\tvar urls = split_srcset(srcset);\n\n\treturn (\n\t\turls.length === element_urls.length &&\n\t\turls.every(\n\t\t\t([url, width], i) =>\n\t\t\t\twidth === element_urls[i][1] &&\n\t\t\t\t// We need to test both ways because Vite will create an a full URL with\n\t\t\t\t// `new URL(asset, import.meta.url).href` for the client when `base: './'`, and the\n\t\t\t\t// relative URLs inside srcset are not automatically resolved to absolute URLs by\n\t\t\t\t// browsers (in contrast to img.src). This means both SSR and DOM code could\n\t\t\t\t// contain relative or absolute URLs.\n\t\t\t\t(src_url_equal(element_urls[i][0], url) || src_url_equal(url, element_urls[i][0]))\n\t\t)\n\t);\n}\n","/** @import { Batch } from '../../../reactivity/batch.js' */\nimport { DEV } from 'esm-env';\nimport { render_effect, teardown } from '../../../reactivity/effects.js';\nimport { listen_to_event_and_reset_event } from './shared.js';\nimport * as e from '../../../errors.js';\nimport { is } from '../../../proxy.js';\nimport { queue_micro_task } from '../../task.js';\nimport { hydrating } from '../../hydration.js';\nimport { untrack } from '../../../runtime.js';\nimport { is_runes } from '../../../context.js';\nimport { current_batch, previous_batch } from '../../../reactivity/batch.js';\n\n/**\n * @param {HTMLInputElement} input\n * @param {() => unknown} get\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_value(input, get, set = get) {\n\tvar runes = is_runes();\n\n\tvar batches = new WeakSet();\n\n\tlisten_to_event_and_reset_event(input, 'input', (is_reset) => {\n\t\tif (DEV && input.type === 'checkbox') {\n\t\t\t// TODO should this happen in prod too?\n\t\t\te.bind_invalid_checkbox_value();\n\t\t}\n\n\t\t/** @type {any} */\n\t\tvar value = is_reset ? input.defaultValue : input.value;\n\t\tvalue = is_numberlike_input(input) ? to_number(value) : value;\n\t\tset(value);\n\n\t\tif (current_batch !== null) {\n\t\t\tbatches.add(current_batch);\n\t\t}\n\n\t\t// In runes mode, respect any validation in accessors (doesn't apply in legacy mode,\n\t\t// because we use mutable state which ensures the render effect always runs)\n\t\tif (runes && value !== (value = get())) {\n\t\t\tvar start = input.selectionStart;\n\t\t\tvar end = input.selectionEnd;\n\n\t\t\t// the value is coerced on assignment\n\t\t\tinput.value = value ?? '';\n\n\t\t\t// Restore selection\n\t\t\tif (end !== null) {\n\t\t\t\tinput.selectionStart = start;\n\t\t\t\tinput.selectionEnd = Math.min(end, input.value.length);\n\t\t\t}\n\t\t}\n\t});\n\n\tif (\n\t\t// If we are hydrating and the value has since changed,\n\t\t// then use the updated value from the input instead.\n\t\t(hydrating && input.defaultValue !== input.value) ||\n\t\t// If defaultValue is set, then value == defaultValue\n\t\t// TODO Svelte 6: remove input.value check and set to empty string?\n\t\t(untrack(get) == null && input.value)\n\t) {\n\t\tset(is_numberlike_input(input) ? to_number(input.value) : input.value);\n\n\t\tif (current_batch !== null) {\n\t\t\tbatches.add(current_batch);\n\t\t}\n\t}\n\n\trender_effect(() => {\n\t\tif (DEV && input.type === 'checkbox') {\n\t\t\t// TODO should this happen in prod too?\n\t\t\te.bind_invalid_checkbox_value();\n\t\t}\n\n\t\tvar value = get();\n\n\t\tif (input === document.activeElement) {\n\t\t\t// we need both, because in non-async mode, render effects run before previous_batch is set\n\t\t\tvar batch = /** @type {Batch} */ (previous_batch ?? current_batch);\n\n\t\t\t// Never rewrite the contents of a focused input. We can get here if, for example,\n\t\t\t// an update is deferred because of async work depending on the input:\n\t\t\t//\n\t\t\t// <input bind:value={query}>\n\t\t\t// <p>{await find(query)}</p>\n\t\t\tif (batches.has(batch)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (is_numberlike_input(input) && value === to_number(input.value)) {\n\t\t\t// handles 0 vs 00 case (see https://github.com/sveltejs/svelte/issues/9959)\n\t\t\treturn;\n\t\t}\n\n\t\tif (input.type === 'date' && !value && !input.value) {\n\t\t\t// Handles the case where a temporarily invalid date is set (while typing, for example with a leading 0 for the day)\n\t\t\t// and prevents this state from clearing the other parts of the date input (see https://github.com/sveltejs/svelte/issues/7897)\n\t\t\treturn;\n\t\t}\n\n\t\t// don't set the value of the input if it's the same to allow\n\t\t// minlength to work properly\n\t\tif (value !== input.value) {\n\t\t\t// @ts-expect-error the value is coerced on assignment\n\t\t\tinput.value = value ?? '';\n\t\t}\n\t});\n}\n\n/** @type {Set<HTMLInputElement[]>} */\nconst pending = new Set();\n\n/**\n * @param {HTMLInputElement[]} inputs\n * @param {null | [number]} group_index\n * @param {HTMLInputElement} input\n * @param {() => unknown} get\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_group(inputs, group_index, input, get, set = get) {\n\tvar is_checkbox = input.getAttribute('type') === 'checkbox';\n\tvar binding_group = inputs;\n\n\t// needs to be let or related code isn't treeshaken out if it's always false\n\tlet hydration_mismatch = false;\n\n\tif (group_index !== null) {\n\t\tfor (var index of group_index) {\n\t\t\t// @ts-expect-error\n\t\t\tbinding_group = binding_group[index] ??= [];\n\t\t}\n\t}\n\n\tbinding_group.push(input);\n\n\tlisten_to_event_and_reset_event(\n\t\tinput,\n\t\t'change',\n\t\t() => {\n\t\t\t// @ts-ignore\n\t\t\tvar value = input.__value;\n\n\t\t\tif (is_checkbox) {\n\t\t\t\tvalue = get_binding_group_value(binding_group, value, input.checked);\n\t\t\t}\n\n\t\t\tset(value);\n\t\t},\n\t\t// TODO better default value handling\n\t\t() => set(is_checkbox ? [] : null)\n\t);\n\n\trender_effect(() => {\n\t\tvar value = get();\n\n\t\t// If we are hydrating and the value has since changed, then use the update value\n\t\t// from the input instead.\n\t\tif (hydrating && input.defaultChecked !== input.checked) {\n\t\t\thydration_mismatch = true;\n\t\t\treturn;\n\t\t}\n\n\t\tif (is_checkbox) {\n\t\t\tvalue = value || [];\n\t\t\t// @ts-ignore\n\t\t\tinput.checked = value.includes(input.__value);\n\t\t} else {\n\t\t\t// @ts-ignore\n\t\t\tinput.checked = is(input.__value, value);\n\t\t}\n\t});\n\n\tteardown(() => {\n\t\tvar index = binding_group.indexOf(input);\n\n\t\tif (index !== -1) {\n\t\t\tbinding_group.splice(index, 1);\n\t\t}\n\t});\n\n\tif (!pending.has(binding_group)) {\n\t\tpending.add(binding_group);\n\n\t\tqueue_micro_task(() => {\n\t\t\t// necessary to maintain binding group order in all insertion scenarios\n\t\t\tbinding_group.sort((a, b) => (a.compareDocumentPosition(b) === 4 ? -1 : 1));\n\t\t\tpending.delete(binding_group);\n\t\t});\n\t}\n\n\tqueue_micro_task(() => {\n\t\tif (hydration_mismatch) {\n\t\t\tvar value;\n\n\t\t\tif (is_checkbox) {\n\t\t\t\tvalue = get_binding_group_value(binding_group, value, input.checked);\n\t\t\t} else {\n\t\t\t\tvar hydration_input = binding_group.find((input) => input.checked);\n\t\t\t\t// @ts-ignore\n\t\t\t\tvalue = hydration_input?.__value;\n\t\t\t}\n\n\t\t\tset(value);\n\t\t}\n\t});\n}\n\n/**\n * @param {HTMLInputElement} input\n * @param {() => unknown} get\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_checked(input, get, set = get) {\n\tlisten_to_event_and_reset_event(input, 'change', (is_reset) => {\n\t\tvar value = is_reset ? input.defaultChecked : input.checked;\n\t\tset(value);\n\t});\n\n\tif (\n\t\t// If we are hydrating and the value has since changed,\n\t\t// then use the update value from the input instead.\n\t\t(hydrating && input.defaultChecked !== input.checked) ||\n\t\t// If defaultChecked is set, then checked == defaultChecked\n\t\tuntrack(get) == null\n\t) {\n\t\tset(input.checked);\n\t}\n\n\trender_effect(() => {\n\t\tvar value = get();\n\t\tinput.checked = Boolean(value);\n\t});\n}\n\n/**\n * @template V\n * @param {Array<HTMLInputElement>} group\n * @param {V} __value\n * @param {boolean} checked\n * @returns {V[]}\n */\nfunction get_binding_group_value(group, __value, checked) {\n\t/** @type {Set<V>} */\n\tvar value = new Set();\n\n\tfor (var i = 0; i < group.length; i += 1) {\n\t\tif (group[i].checked) {\n\t\t\t// @ts-ignore\n\t\t\tvalue.add(group[i].__value);\n\t\t}\n\t}\n\n\tif (!checked) {\n\t\tvalue.delete(__value);\n\t}\n\n\treturn Array.from(value);\n}\n\n/**\n * @param {HTMLInputElement} input\n */\nfunction is_numberlike_input(input) {\n\tvar type = input.type;\n\treturn type === 'number' || type === 'range';\n}\n\n/**\n * @param {string} value\n */\nfunction to_number(value) {\n\treturn value === '' ? null : +value;\n}\n\n/**\n * @param {HTMLInputElement} input\n * @param {() => FileList | null} get\n * @param {(value: FileList | null) => void} set\n */\nexport function bind_files(input, get, set = get) {\n\tlisten_to_event_and_reset_event(input, 'change', () => {\n\t\tset(input.files);\n\t});\n\n\tif (\n\t\t// If we are hydrating and the value has since changed,\n\t\t// then use the updated value from the input instead.\n\t\thydrating &&\n\t\tinput.files\n\t) {\n\t\tset(input.files);\n\t}\n\n\trender_effect(() => {\n\t\tinput.files = get();\n\t});\n}\n","import { STATE_SYMBOL } from '#client/constants';\nimport { effect, render_effect } from '../../../reactivity/effects.js';\nimport { untrack } from '../../../runtime.js';\nimport { queue_micro_task } from '../../task.js';\n\n/**\n * @param {any} bound_value\n * @param {Element} element_or_component\n * @returns {boolean}\n */\nfunction is_bound_this(bound_value, element_or_component) {\n\treturn (\n\t\tbound_value === element_or_component || bound_value?.[STATE_SYMBOL] === element_or_component\n\t);\n}\n\n/**\n * @param {any} element_or_component\n * @param {(value: unknown, ...parts: unknown[]) => void} update\n * @param {(...parts: unknown[]) => unknown} get_value\n * @param {() => unknown[]} [get_parts] Set if the this binding is used inside an each block,\n * \t\t\t\t\t\t\t\t\t\treturns all the parts of the each block context that are used in the expression\n * @returns {void}\n */\nexport function bind_this(element_or_component = {}, update, get_value, get_parts) {\n\teffect(() => {\n\t\t/** @type {unknown[]} */\n\t\tvar old_parts;\n\n\t\t/** @type {unknown[]} */\n\t\tvar parts;\n\n\t\trender_effect(() => {\n\t\t\told_parts = parts;\n\t\t\t// We only track changes to the parts, not the value itself to avoid unnecessary reruns.\n\t\t\tparts = get_parts?.() || [];\n\n\t\t\tuntrack(() => {\n\t\t\t\tif (element_or_component !== get_value(...parts)) {\n\t\t\t\t\tupdate(element_or_component, ...parts);\n\t\t\t\t\t// If this is an effect rerun (cause: each block context changes), then nullfiy the binding at\n\t\t\t\t\t// the previous position if it isn't already taken over by a different effect.\n\t\t\t\t\tif (old_parts && is_bound_this(get_value(...old_parts), element_or_component)) {\n\t\t\t\t\t\tupdate(null, ...old_parts);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn () => {\n\t\t\t// We cannot use effects in the teardown phase, we we use a microtask instead.\n\t\t\tqueue_micro_task(() => {\n\t\t\t\tif (parts && is_bound_this(get_value(...parts), element_or_component)) {\n\t\t\t\t\tupdate(null, ...parts);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t});\n\n\treturn element_or_component;\n}\n","/** @import { Readable } from './public' */\nimport { untrack } from '../index-client.js';\nimport { noop } from '../internal/shared/utils.js';\n\n/**\n * @template T\n * @param {Readable<T> | null | undefined} store\n * @param {(value: T) => void} run\n * @param {(value: T) => void} [invalidate]\n * @returns {() => void}\n */\nexport function subscribe_to_store(store, run, invalidate) {\n\tif (store == null) {\n\t\t// @ts-expect-error\n\t\trun(undefined);\n\n\t\t// @ts-expect-error\n\t\tif (invalidate) invalidate(undefined);\n\n\t\treturn noop;\n\t}\n\n\t// Svelte store takes a private second argument\n\t// StartStopNotifier could mutate state, and we want to silence the corresponding validation error\n\tconst unsub = untrack(() =>\n\t\tstore.subscribe(\n\t\t\trun,\n\t\t\t// @ts-expect-error\n\t\t\tinvalidate\n\t\t)\n\t);\n\n\t// Also support RxJS\n\t// @ts-expect-error TODO fix this in the types?\n\treturn unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;\n}\n","/** @import { Readable, StartStopNotifier, Subscriber, Unsubscriber, Updater, Writable } from '../public.js' */\n/** @import { Stores, StoresValues, SubscribeInvalidateTuple } from '../private.js' */\nimport { noop, run_all } from '../../internal/shared/utils.js';\nimport { safe_not_equal } from '../../internal/client/reactivity/equality.js';\nimport { subscribe_to_store } from '../utils.js';\n\n/**\n * @type {Array<SubscribeInvalidateTuple<any> | any>}\n */\nconst subscriber_queue = [];\n\n/**\n * Creates a `Readable` store that allows reading by subscription.\n *\n * @template T\n * @param {T} [value] initial value\n * @param {StartStopNotifier<T>} [start]\n * @returns {Readable<T>}\n */\nexport function readable(value, start) {\n\treturn {\n\t\tsubscribe: writable(value, start).subscribe\n\t};\n}\n\n/**\n * Create a `Writable` store that allows both updating and reading by subscription.\n *\n * @template T\n * @param {T} [value] initial value\n * @param {StartStopNotifier<T>} [start]\n * @returns {Writable<T>}\n */\nexport function writable(value, start = noop) {\n\t/** @type {Unsubscriber | null} */\n\tlet stop = null;\n\n\t/** @type {Set<SubscribeInvalidateTuple<T>>} */\n\tconst subscribers = new Set();\n\n\t/**\n\t * @param {T} new_value\n\t * @returns {void}\n\t */\n\tfunction set(new_value) {\n\t\tif (safe_not_equal(value, new_value)) {\n\t\t\tvalue = new_value;\n\t\t\tif (stop) {\n\t\t\t\t// store is ready\n\t\t\t\tconst run_queue = !subscriber_queue.length;\n\t\t\t\tfor (const subscriber of subscribers) {\n\t\t\t\t\tsubscriber[1]();\n\t\t\t\t\tsubscriber_queue.push(subscriber, value);\n\t\t\t\t}\n\t\t\t\tif (run_queue) {\n\t\t\t\t\tfor (let i = 0; i < subscriber_queue.length; i += 2) {\n\t\t\t\t\t\tsubscriber_queue[i][0](subscriber_queue[i + 1]);\n\t\t\t\t\t}\n\t\t\t\t\tsubscriber_queue.length = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {Updater<T>} fn\n\t * @returns {void}\n\t */\n\tfunction update(fn) {\n\t\tset(fn(/** @type {T} */ (value)));\n\t}\n\n\t/**\n\t * @param {Subscriber<T>} run\n\t * @param {() => void} [invalidate]\n\t * @returns {Unsubscriber}\n\t */\n\tfunction subscribe(run, invalidate = noop) {\n\t\t/** @type {SubscribeInvalidateTuple<T>} */\n\t\tconst subscriber = [run, invalidate];\n\t\tsubscribers.add(subscriber);\n\t\tif (subscribers.size === 1) {\n\t\t\tstop = start(set, update) || noop;\n\t\t}\n\t\trun(/** @type {T} */ (value));\n\t\treturn () => {\n\t\t\tsubscribers.delete(subscriber);\n\t\t\tif (subscribers.size === 0 && stop) {\n\t\t\t\tstop();\n\t\t\t\tstop = null;\n\t\t\t}\n\t\t};\n\t}\n\treturn { set, update, subscribe };\n}\n\n/**\n * Derived value store by synchronizing one or more readable stores and\n * applying an aggregation function over its input values.\n *\n * @template {Stores} S\n * @template T\n * @overload\n * @param {S} stores\n * @param {(values: StoresValues<S>, set: (value: T) => void, update: (fn: Updater<T>) => void) => Unsubscriber | void} fn\n * @param {T} [initial_value]\n * @returns {Readable<T>}\n */\n/**\n * Derived value store by synchronizing one or more readable stores and\n * applying an aggregation function over its input values.\n *\n * @template {Stores} S\n * @template T\n * @overload\n * @param {S} stores\n * @param {(values: StoresValues<S>) => T} fn\n * @param {T} [initial_value]\n * @returns {Readable<T>}\n */\n/**\n * @template {Stores} S\n * @template T\n * @param {S} stores\n * @param {Function} fn\n * @param {T} [initial_value]\n * @returns {Readable<T>}\n */\nexport function derived(stores, fn, initial_value) {\n\tconst single = !Array.isArray(stores);\n\t/** @type {Array<Readable<any>>} */\n\tconst stores_array = single ? [stores] : stores;\n\tif (!stores_array.every(Boolean)) {\n\t\tthrow new Error('derived() expects stores as input, got a falsy value');\n\t}\n\tconst auto = fn.length < 2;\n\treturn readable(initial_value, (set, update) => {\n\t\tlet started = false;\n\t\t/** @type {T[]} */\n\t\tconst values = [];\n\t\tlet pending = 0;\n\t\tlet cleanup = noop;\n\t\tconst sync = () => {\n\t\t\tif (pending) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcleanup();\n\t\t\tconst result = fn(single ? values[0] : values, set, update);\n\t\t\tif (auto) {\n\t\t\t\tset(result);\n\t\t\t} else {\n\t\t\t\tcleanup = typeof result === 'function' ? result : noop;\n\t\t\t}\n\t\t};\n\t\tconst unsubscribers = stores_array.map((store, i) =>\n\t\t\tsubscribe_to_store(\n\t\t\t\tstore,\n\t\t\t\t(value) => {\n\t\t\t\t\tvalues[i] = value;\n\t\t\t\t\tpending &= ~(1 << i);\n\t\t\t\t\tif (started) {\n\t\t\t\t\t\tsync();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tpending |= 1 << i;\n\t\t\t\t}\n\t\t\t)\n\t\t);\n\t\tstarted = true;\n\t\tsync();\n\t\treturn function stop() {\n\t\t\trun_all(unsubscribers);\n\t\t\tcleanup();\n\t\t\t// We need to set this to false because callbacks can still happen despite having unsubscribed:\n\t\t\t// Callbacks might already be placed in the queue which doesn't know it should no longer\n\t\t\t// invoke this derived store.\n\t\t\tstarted = false;\n\t\t};\n\t});\n}\n\n/**\n * Takes a store and returns a new one derived from the old one that is readable.\n *\n * @template T\n * @param {Readable<T>} store  - store to make readonly\n * @returns {Readable<T>}\n */\nexport function readonly(store) {\n\treturn {\n\t\t// @ts-expect-error TODO i suspect the bind is unnecessary\n\t\tsubscribe: store.subscribe.bind(store)\n\t};\n}\n\n/**\n * Get the current value from a store by subscribing and immediately unsubscribing.\n *\n * @template T\n * @param {Readable<T>} store\n * @returns {T}\n */\nexport function get(store) {\n\tlet value;\n\tsubscribe_to_store(store, (_) => (value = _))();\n\t// @ts-expect-error\n\treturn value;\n}\n","/** @import { StoreReferencesContainer } from '#client' */\n/** @import { Store } from '#shared' */\nimport { subscribe_to_store } from '../../../store/utils.js';\nimport { get as get_store } from '../../../store/shared/index.js';\nimport { define_property, noop } from '../../shared/utils.js';\nimport { get } from '../runtime.js';\nimport { teardown } from './effects.js';\nimport { mutable_source, set } from './sources.js';\nimport { DEV } from 'esm-env';\n\n/**\n * Whether or not the prop currently being read is a store binding, as in\n * `<Child bind:x={$y} />`. If it is, we treat the prop as mutable even in\n * runes mode, and skip `binding_property_non_reactive` validation\n */\nlet is_store_binding = false;\n\nlet IS_UNMOUNTED = Symbol();\n\n/**\n * Gets the current value of a store. If the store isn't subscribed to yet, it will create a proxy\n * signal that will be updated when the store is. The store references container is needed to\n * track reassignments to stores and to track the correct component context.\n * @template V\n * @param {Store<V> | null | undefined} store\n * @param {string} store_name\n * @param {StoreReferencesContainer} stores\n * @returns {V}\n */\nexport function store_get(store, store_name, stores) {\n\tconst entry = (stores[store_name] ??= {\n\t\tstore: null,\n\t\tsource: mutable_source(undefined),\n\t\tunsubscribe: noop\n\t});\n\n\tif (DEV) {\n\t\tentry.source.label = store_name;\n\t}\n\n\t// if the component that setup this is already unmounted we don't want to register a subscription\n\tif (entry.store !== store && !(IS_UNMOUNTED in stores)) {\n\t\tentry.unsubscribe();\n\t\tentry.store = store ?? null;\n\n\t\tif (store == null) {\n\t\t\tentry.source.v = undefined; // see synchronous callback comment below\n\t\t\tentry.unsubscribe = noop;\n\t\t} else {\n\t\t\tvar is_synchronous_callback = true;\n\n\t\t\tentry.unsubscribe = subscribe_to_store(store, (v) => {\n\t\t\t\tif (is_synchronous_callback) {\n\t\t\t\t\t// If the first updates to the store value (possibly multiple of them) are synchronously\n\t\t\t\t\t// inside a derived, we will hit the `state_unsafe_mutation` error if we `set` the value\n\t\t\t\t\tentry.source.v = v;\n\t\t\t\t} else {\n\t\t\t\t\tset(entry.source, v);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tis_synchronous_callback = false;\n\t\t}\n\t}\n\n\t// if the component that setup this stores is already unmounted the source will be out of sync\n\t// so we just use the `get` for the stores, less performant but it avoids to create a memory leak\n\t// and it will keep the value consistent\n\tif (store && IS_UNMOUNTED in stores) {\n\t\treturn get_store(store);\n\t}\n\n\treturn get(entry.source);\n}\n\n/**\n * Unsubscribe from a store if it's not the same as the one in the store references container.\n * We need this in addition to `store_get` because someone could unsubscribe from a store but\n * then never subscribe to the new one (if any), causing the subscription to stay open wrongfully.\n * @param {Store<any> | null | undefined} store\n * @param {string} store_name\n * @param {StoreReferencesContainer} stores\n */\nexport function store_unsub(store, store_name, stores) {\n\t/** @type {StoreReferencesContainer[''] | undefined} */\n\tlet entry = stores[store_name];\n\n\tif (entry && entry.store !== store) {\n\t\t// Don't reset store yet, so that store_get above can resubscribe to new store if necessary\n\t\tentry.unsubscribe();\n\t\tentry.unsubscribe = noop;\n\t}\n\n\treturn store;\n}\n\n/**\n * Sets the new value of a store and returns that value.\n * @template V\n * @param {Store<V>} store\n * @param {V} value\n * @returns {V}\n */\nexport function store_set(store, value) {\n\tstore.set(value);\n\treturn value;\n}\n\n/**\n * @param {StoreReferencesContainer} stores\n * @param {string} store_name\n */\nexport function invalidate_store(stores, store_name) {\n\tvar entry = stores[store_name];\n\tif (entry.store !== null) {\n\t\tstore_set(entry.store, entry.source.v);\n\t}\n}\n\n/**\n * Unsubscribes from all auto-subscribed stores on destroy\n * @returns {[StoreReferencesContainer, ()=>void]}\n */\nexport function setup_stores() {\n\t/** @type {StoreReferencesContainer} */\n\tconst stores = {};\n\n\tfunction cleanup() {\n\t\tteardown(() => {\n\t\t\tfor (var store_name in stores) {\n\t\t\t\tconst ref = stores[store_name];\n\t\t\t\tref.unsubscribe();\n\t\t\t}\n\t\t\tdefine_property(stores, IS_UNMOUNTED, {\n\t\t\t\tenumerable: false,\n\t\t\t\tvalue: true\n\t\t\t});\n\t\t});\n\t}\n\n\treturn [stores, cleanup];\n}\n\n/**\n * Updates a store with a new value.\n * @param {Store<V>} store  the store to update\n * @param {any} expression  the expression that mutates the store\n * @param {V} new_value  the new store value\n * @template V\n */\nexport function store_mutate(store, expression, new_value) {\n\tstore.set(new_value);\n\treturn expression;\n}\n\n/**\n * @param {Store<number>} store\n * @param {number} store_value\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_store(store, store_value, d = 1) {\n\tstore.set(store_value + d);\n\treturn store_value;\n}\n\n/**\n * @param {Store<number>} store\n * @param {number} store_value\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_pre_store(store, store_value, d = 1) {\n\tconst value = store_value + d;\n\tstore.set(value);\n\treturn value;\n}\n\n/**\n * Called inside prop getters to communicate that the prop is a store binding\n */\nexport function mark_store_binding() {\n\tis_store_binding = true;\n}\n\n/**\n * Returns a tuple that indicates whether `fn()` reads a prop that is a store binding.\n * Used to prevent `binding_property_non_reactive` validation false positives and\n * ensure that these props are treated as mutable even in runes mode\n * @template T\n * @param {() => T} fn\n * @returns {[T, boolean]}\n */\nexport function capture_store_binding(fn) {\n\tvar previous_is_store_binding = is_store_binding;\n\n\ttry {\n\t\tis_store_binding = false;\n\t\treturn [fn(), is_store_binding];\n\t} finally {\n\t\tis_store_binding = previous_is_store_binding;\n\t}\n}\n","/** @import { Effect, Source } from './types.js' */\nimport { DEV } from 'esm-env';\nimport {\n\tPROPS_IS_BINDABLE,\n\tPROPS_IS_IMMUTABLE,\n\tPROPS_IS_LAZY_INITIAL,\n\tPROPS_IS_RUNES,\n\tPROPS_IS_UPDATED\n} from '../../../constants.js';\nimport { get_descriptor, is_function } from '../../shared/utils.js';\nimport { set, source, update } from './sources.js';\nimport { derived, derived_safe_equal } from './deriveds.js';\nimport {\n\tactive_effect,\n\tget,\n\tis_destroying_effect,\n\tset_active_effect,\n\tuntrack\n} from '../runtime.js';\nimport * as e from '../errors.js';\nimport { DESTROYED, LEGACY_PROPS, STATE_SYMBOL } from '#client/constants';\nimport { proxy } from '../proxy.js';\nimport { capture_store_binding } from './store.js';\nimport { legacy_mode_flag } from '../../flags/index.js';\n\n/**\n * @param {((value?: number) => number)} fn\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_prop(fn, d = 1) {\n\tconst value = fn();\n\tfn(value + d);\n\treturn value;\n}\n\n/**\n * @param {((value?: number) => number)} fn\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_pre_prop(fn, d = 1) {\n\tconst value = fn() + d;\n\tfn(value);\n\treturn value;\n}\n\n/**\n * The proxy handler for rest props (i.e. `const { x, ...rest } = $props()`).\n * Is passed the full `$$props` object and excludes the named props.\n * @type {ProxyHandler<{ props: Record<string | symbol, unknown>, exclude: Array<string | symbol>, name?: string }>}}\n */\nconst rest_props_handler = {\n\tget(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\treturn target.props[key];\n\t},\n\tset(target, key) {\n\t\tif (DEV) {\n\t\t\t// TODO should this happen in prod too?\n\t\t\te.props_rest_readonly(`${target.name}.${String(key)}`);\n\t\t}\n\n\t\treturn false;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\tif (key in target.props) {\n\t\t\treturn {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: target.props[key]\n\t\t\t};\n\t\t}\n\t},\n\thas(target, key) {\n\t\tif (target.exclude.includes(key)) return false;\n\t\treturn key in target.props;\n\t},\n\townKeys(target) {\n\t\treturn Reflect.ownKeys(target.props).filter((key) => !target.exclude.includes(key));\n\t}\n};\n\n/**\n * @param {Record<string, unknown>} props\n * @param {string[]} exclude\n * @param {string} [name]\n * @returns {Record<string, unknown>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function rest_props(props, exclude, name) {\n\treturn new Proxy(\n\t\tDEV ? { props, exclude, name, other: {}, to_proxy: [] } : { props, exclude },\n\t\trest_props_handler\n\t);\n}\n\n/**\n * The proxy handler for legacy $$restProps and $$props\n * @type {ProxyHandler<{ props: Record<string | symbol, unknown>, exclude: Array<string | symbol>, special: Record<string | symbol, (v?: unknown) => unknown>, version: Source<number>, parent_effect: Effect }>}}\n */\nconst legacy_rest_props_handler = {\n\tget(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\tget(target.version);\n\t\treturn key in target.special ? target.special[key]() : target.props[key];\n\t},\n\tset(target, key, value) {\n\t\tif (!(key in target.special)) {\n\t\t\tvar previous_effect = active_effect;\n\n\t\t\ttry {\n\t\t\t\tset_active_effect(target.parent_effect);\n\n\t\t\t\t// Handle props that can temporarily get out of sync with the parent\n\t\t\t\t/** @type {Record<string, (v?: unknown) => unknown>} */\n\t\t\t\ttarget.special[key] = prop(\n\t\t\t\t\t{\n\t\t\t\t\t\tget [key]() {\n\t\t\t\t\t\t\treturn target.props[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t/** @type {string} */ (key),\n\t\t\t\t\tPROPS_IS_UPDATED\n\t\t\t\t);\n\t\t\t} finally {\n\t\t\t\tset_active_effect(previous_effect);\n\t\t\t}\n\t\t}\n\n\t\ttarget.special[key](value);\n\t\tupdate(target.version); // $$props is coarse-grained: when $$props.x is updated, usages of $$props.y etc are also rerun\n\t\treturn true;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\tif (key in target.props) {\n\t\t\treturn {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: target.props[key]\n\t\t\t};\n\t\t}\n\t},\n\tdeleteProperty(target, key) {\n\t\t// Svelte 4 allowed for deletions on $$restProps\n\t\tif (target.exclude.includes(key)) return true;\n\t\ttarget.exclude.push(key);\n\t\tupdate(target.version);\n\t\treturn true;\n\t},\n\thas(target, key) {\n\t\tif (target.exclude.includes(key)) return false;\n\t\treturn key in target.props;\n\t},\n\townKeys(target) {\n\t\treturn Reflect.ownKeys(target.props).filter((key) => !target.exclude.includes(key));\n\t}\n};\n\n/**\n * @param {Record<string, unknown>} props\n * @param {string[]} exclude\n * @returns {Record<string, unknown>}\n */\nexport function legacy_rest_props(props, exclude) {\n\treturn new Proxy(\n\t\t{\n\t\t\tprops,\n\t\t\texclude,\n\t\t\tspecial: {},\n\t\t\tversion: source(0),\n\t\t\t// TODO this is only necessary because we need to track component\n\t\t\t// destruction inside `prop`, because of `bind:this`, but it\n\t\t\t// seems likely that we can simplify `bind:this` instead\n\t\t\tparent_effect: /** @type {Effect} */ (active_effect)\n\t\t},\n\t\tlegacy_rest_props_handler\n\t);\n}\n\n/**\n * The proxy handler for spread props. Handles the incoming array of props\n * that looks like `() => { dynamic: props }, { static: prop }, ..` and wraps\n * them so that the whole thing is passed to the component as the `$$props` argument.\n * @type {ProxyHandler<{ props: Array<Record<string | symbol, unknown> | (() => Record<string | symbol, unknown>)> }>}}\n */\nconst spread_props_handler = {\n\tget(target, key) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (typeof p === 'object' && p !== null && key in p) return p[key];\n\t\t}\n\t},\n\tset(target, key, value) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tconst desc = get_descriptor(p, key);\n\t\t\tif (desc && desc.set) {\n\t\t\t\tdesc.set(value);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (typeof p === 'object' && p !== null && key in p) {\n\t\t\t\tconst descriptor = get_descriptor(p, key);\n\t\t\t\tif (descriptor && !descriptor.configurable) {\n\t\t\t\t\t// Prevent a \"Non-configurability Report Error\": The target is an array, it does\n\t\t\t\t\t// not actually contain this property. If it is now described as non-configurable,\n\t\t\t\t\t// the proxy throws a validation error. Setting it to true avoids that.\n\t\t\t\t\tdescriptor.configurable = true;\n\t\t\t\t}\n\t\t\t\treturn descriptor;\n\t\t\t}\n\t\t}\n\t},\n\thas(target, key) {\n\t\t// To prevent a false positive `is_entry_props` in the `prop` function\n\t\tif (key === STATE_SYMBOL || key === LEGACY_PROPS) return false;\n\n\t\tfor (let p of target.props) {\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (p != null && key in p) return true;\n\t\t}\n\n\t\treturn false;\n\t},\n\townKeys(target) {\n\t\t/** @type {Array<string | symbol>} */\n\t\tconst keys = [];\n\n\t\tfor (let p of target.props) {\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (!p) continue;\n\n\t\t\tfor (const key in p) {\n\t\t\t\tif (!keys.includes(key)) keys.push(key);\n\t\t\t}\n\n\t\t\tfor (const key of Object.getOwnPropertySymbols(p)) {\n\t\t\t\tif (!keys.includes(key)) keys.push(key);\n\t\t\t}\n\t\t}\n\n\t\treturn keys;\n\t}\n};\n\n/**\n * @param {Array<Record<string, unknown> | (() => Record<string, unknown>)>} props\n * @returns {any}\n */\nexport function spread_props(...props) {\n\treturn new Proxy({ props }, spread_props_handler);\n}\n\n/**\n * This function is responsible for synchronizing a possibly bound prop with the inner component state.\n * It is used whenever the compiler sees that the component writes to the prop, or when it has a default prop_value.\n * @template V\n * @param {Record<string, unknown>} props\n * @param {string} key\n * @param {number} flags\n * @param {V | (() => V)} [fallback]\n * @returns {(() => V | ((arg: V) => V) | ((arg: V, mutation: boolean) => V))}\n */\nexport function prop(props, key, flags, fallback) {\n\tvar runes = !legacy_mode_flag || (flags & PROPS_IS_RUNES) !== 0;\n\tvar bindable = (flags & PROPS_IS_BINDABLE) !== 0;\n\tvar lazy = (flags & PROPS_IS_LAZY_INITIAL) !== 0;\n\n\tvar fallback_value = /** @type {V} */ (fallback);\n\tvar fallback_dirty = true;\n\n\tvar get_fallback = () => {\n\t\tif (fallback_dirty) {\n\t\t\tfallback_dirty = false;\n\n\t\t\tfallback_value = lazy\n\t\t\t\t? untrack(/** @type {() => V} */ (fallback))\n\t\t\t\t: /** @type {V} */ (fallback);\n\t\t}\n\n\t\treturn fallback_value;\n\t};\n\n\t/** @type {((v: V) => void) | undefined} */\n\tvar setter;\n\n\tif (bindable) {\n\t\t// Can be the case when someone does `mount(Component, props)` with `let props = $state({...})`\n\t\t// or `createClassComponent(Component, props)`\n\t\tvar is_entry_props = STATE_SYMBOL in props || LEGACY_PROPS in props;\n\n\t\tsetter =\n\t\t\tget_descriptor(props, key)?.set ??\n\t\t\t(is_entry_props && key in props ? (v) => (props[key] = v) : undefined);\n\t}\n\n\tvar initial_value;\n\tvar is_store_sub = false;\n\n\tif (bindable) {\n\t\t[initial_value, is_store_sub] = capture_store_binding(() => /** @type {V} */ (props[key]));\n\t} else {\n\t\tinitial_value = /** @type {V} */ (props[key]);\n\t}\n\n\tif (initial_value === undefined && fallback !== undefined) {\n\t\tinitial_value = get_fallback();\n\n\t\tif (setter) {\n\t\t\tif (runes) e.props_invalid_value(key);\n\t\t\tsetter(initial_value);\n\t\t}\n\t}\n\n\t/** @type {() => V} */\n\tvar getter;\n\n\tif (runes) {\n\t\tgetter = () => {\n\t\t\tvar value = /** @type {V} */ (props[key]);\n\t\t\tif (value === undefined) return get_fallback();\n\t\t\tfallback_dirty = true;\n\t\t\treturn value;\n\t\t};\n\t} else {\n\t\tgetter = () => {\n\t\t\tvar value = /** @type {V} */ (props[key]);\n\n\t\t\tif (value !== undefined) {\n\t\t\t\t// in legacy mode, we don't revert to the fallback value\n\t\t\t\t// if the prop goes from defined to undefined. The easiest\n\t\t\t\t// way to model this is to make the fallback undefined\n\t\t\t\t// as soon as the prop has a value\n\t\t\t\tfallback_value = /** @type {V} */ (undefined);\n\t\t\t}\n\n\t\t\treturn value === undefined ? fallback_value : value;\n\t\t};\n\t}\n\n\t// prop is never written to — we only need a getter\n\tif (runes && (flags & PROPS_IS_UPDATED) === 0) {\n\t\treturn getter;\n\t}\n\n\t// prop is written to, but the parent component had `bind:foo` which\n\t// means we can just call `$$props.foo = value` directly\n\tif (setter) {\n\t\tvar legacy_parent = props.$$legacy;\n\t\treturn /** @type {() => V} */ (\n\t\t\tfunction (/** @type {V} */ value, /** @type {boolean} */ mutation) {\n\t\t\t\tif (arguments.length > 0) {\n\t\t\t\t\t// We don't want to notify if the value was mutated and the parent is in runes mode.\n\t\t\t\t\t// In that case the state proxy (if it exists) should take care of the notification.\n\t\t\t\t\t// If the parent is not in runes mode, we need to notify on mutation, too, that the prop\n\t\t\t\t\t// has changed because the parent will not be able to detect the change otherwise.\n\t\t\t\t\tif (!runes || !mutation || legacy_parent || is_store_sub) {\n\t\t\t\t\t\t/** @type {Function} */ (setter)(mutation ? getter() : value);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\n\t\t\t\treturn getter();\n\t\t\t}\n\t\t);\n\t}\n\n\t// Either prop is written to, but there's no binding, which means we\n\t// create a derived that we can write to locally.\n\t// Or we are in legacy mode where we always create a derived to replicate that\n\t// Svelte 4 did not trigger updates when a primitive value was updated to the same value.\n\tvar overridden = false;\n\n\tvar d = ((flags & PROPS_IS_IMMUTABLE) !== 0 ? derived : derived_safe_equal)(() => {\n\t\toverridden = false;\n\t\treturn getter();\n\t});\n\n\tif (DEV) {\n\t\td.label = key;\n\t}\n\n\t// Capture the initial value if it's bindable\n\tif (bindable) get(d);\n\n\tvar parent_effect = /** @type {Effect} */ (active_effect);\n\n\treturn /** @type {() => V} */ (\n\t\tfunction (/** @type {any} */ value, /** @type {boolean} */ mutation) {\n\t\t\tif (arguments.length > 0) {\n\t\t\t\tconst new_value = mutation ? get(d) : runes && bindable ? proxy(value) : value;\n\n\t\t\t\tset(d, new_value);\n\t\t\t\toverridden = true;\n\n\t\t\t\tif (fallback_value !== undefined) {\n\t\t\t\t\tfallback_value = new_value;\n\t\t\t\t}\n\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\t// special case — avoid recalculating the derived if we're in a\n\t\t\t// teardown function and the prop was overridden locally, or the\n\t\t\t// component was already destroyed (this latter part is necessary\n\t\t\t// because `bind:this` can read props after the component has\n\t\t\t// been destroyed. TODO simplify `bind:this`\n\t\t\tif ((is_destroying_effect && overridden) || (parent_effect.f & DESTROYED) !== 0) {\n\t\t\t\treturn d.v;\n\t\t\t}\n\n\t\t\treturn get(d);\n\t\t}\n\t);\n}\n","/** @import { ComponentContext, ComponentContextLegacy } from '#client' */\n/** @import { EventDispatcher } from './index.js' */\n/** @import { NotFunction } from './internal/types.js' */\nimport { active_reaction, untrack } from './internal/client/runtime.js';\nimport { is_array } from './internal/shared/utils.js';\nimport { user_effect } from './internal/client/index.js';\nimport * as e from './internal/client/errors.js';\nimport { legacy_mode_flag } from './internal/flags/index.js';\nimport { component_context } from './internal/client/context.js';\nimport { DEV } from 'esm-env';\n\nif (DEV) {\n\t/**\n\t * @param {string} rune\n\t */\n\tfunction throw_rune_error(rune) {\n\t\tif (!(rune in globalThis)) {\n\t\t\t// TODO if people start adjusting the \"this can contain runes\" config through v-p-s more, adjust this message\n\t\t\t/** @type {any} */\n\t\t\tlet value; // let's hope noone modifies this global, but belts and braces\n\t\t\tObject.defineProperty(globalThis, rune, {\n\t\t\t\tconfigurable: true,\n\t\t\t\t// eslint-disable-next-line getter-return\n\t\t\t\tget: () => {\n\t\t\t\t\tif (value !== undefined) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\n\t\t\t\t\te.rune_outside_svelte(rune);\n\t\t\t\t},\n\t\t\t\tset: (v) => {\n\t\t\t\t\tvalue = v;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tthrow_rune_error('$state');\n\tthrow_rune_error('$effect');\n\tthrow_rune_error('$derived');\n\tthrow_rune_error('$inspect');\n\tthrow_rune_error('$props');\n\tthrow_rune_error('$bindable');\n}\n\n/**\n * Returns an [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) that aborts when the current [derived](https://svelte.dev/docs/svelte/$derived) or [effect](https://svelte.dev/docs/svelte/$effect) re-runs or is destroyed.\n *\n * Must be called while a derived or effect is running.\n *\n * ```svelte\n * <script>\n * \timport { getAbortSignal } from 'svelte';\n *\n * \tlet { id } = $props();\n *\n * \tasync function getData(id) {\n * \t\tconst response = await fetch(`/items/${id}`, {\n * \t\t\tsignal: getAbortSignal()\n * \t\t});\n *\n * \t\treturn await response.json();\n * \t}\n *\n * \tconst data = $derived(await getData(id));\n * </script>\n * ```\n */\nexport function getAbortSignal() {\n\tif (active_reaction === null) {\n\t\te.get_abort_signal_outside_reaction();\n\t}\n\n\treturn (active_reaction.ac ??= new AbortController()).signal;\n}\n\n/**\n * `onMount`, like [`$effect`](https://svelte.dev/docs/svelte/$effect), schedules a function to run as soon as the component has been mounted to the DOM.\n * Unlike `$effect`, the provided function only runs once.\n *\n * It must be called during the component's initialisation (but doesn't need to live _inside_ the component;\n * it can be called from an external module). If a function is returned _synchronously_ from `onMount`,\n * it will be called when the component is unmounted.\n *\n * `onMount` functions do not run during [server-side rendering](https://svelte.dev/docs/svelte/svelte-server#render).\n *\n * @template T\n * @param {() => NotFunction<T> | Promise<NotFunction<T>> | (() => any)} fn\n * @returns {void}\n */\nexport function onMount(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('onMount');\n\t}\n\n\tif (legacy_mode_flag && component_context.l !== null) {\n\t\tinit_update_callbacks(component_context).m.push(fn);\n\t} else {\n\t\tuser_effect(() => {\n\t\t\tconst cleanup = untrack(fn);\n\t\t\tif (typeof cleanup === 'function') return /** @type {() => void} */ (cleanup);\n\t\t});\n\t}\n}\n\n/**\n * Schedules a callback to run immediately before the component is unmounted.\n *\n * Out of `onMount`, `beforeUpdate`, `afterUpdate` and `onDestroy`, this is the\n * only one that runs inside a server-side component.\n *\n * @param {() => any} fn\n * @returns {void}\n */\nexport function onDestroy(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('onDestroy');\n\t}\n\n\tonMount(() => () => untrack(fn));\n}\n\n/**\n * @template [T=any]\n * @param {string} type\n * @param {T} [detail]\n * @param {any}params_0\n * @returns {CustomEvent<T>}\n */\nfunction create_custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {\n\treturn new CustomEvent(type, { detail, bubbles, cancelable });\n}\n\n/**\n * Creates an event dispatcher that can be used to dispatch [component events](https://svelte.dev/docs/svelte/legacy-on#Component-events).\n * Event dispatchers are functions that can take two arguments: `name` and `detail`.\n *\n * Component events created with `createEventDispatcher` create a\n * [CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent).\n * These events do not [bubble](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Event_bubbling_and_capture).\n * The `detail` argument corresponds to the [CustomEvent.detail](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail)\n * property and can contain any type of data.\n *\n * The event dispatcher can be typed to narrow the allowed event names and the type of the `detail` argument:\n * ```ts\n * const dispatch = createEventDispatcher<{\n *  loaded: null; // does not take a detail argument\n *  change: string; // takes a detail argument of type string, which is required\n *  optional: number | null; // takes an optional detail argument of type number\n * }>();\n * ```\n *\n * @deprecated Use callback props and/or the `$host()` rune instead — see [migration guide](https://svelte.dev/docs/svelte/v5-migration-guide#Event-changes-Component-events)\n * @template {Record<string, any>} [EventMap = any]\n * @returns {EventDispatcher<EventMap>}\n */\nexport function createEventDispatcher() {\n\tconst active_component_context = component_context;\n\tif (active_component_context === null) {\n\t\te.lifecycle_outside_component('createEventDispatcher');\n\t}\n\n\t/**\n\t * @param [detail]\n\t * @param [options]\n\t */\n\treturn (type, detail, options) => {\n\t\tconst events = /** @type {Record<string, Function | Function[]>} */ (\n\t\t\tactive_component_context.s.$$events\n\t\t)?.[/** @type {string} */ (type)];\n\n\t\tif (events) {\n\t\t\tconst callbacks = is_array(events) ? events.slice() : [events];\n\t\t\t// TODO are there situations where events could be dispatched\n\t\t\t// in a server (non-DOM) environment?\n\t\t\tconst event = create_custom_event(/** @type {string} */ (type), detail, options);\n\t\t\tfor (const fn of callbacks) {\n\t\t\t\tfn.call(active_component_context.x, event);\n\t\t\t}\n\t\t\treturn !event.defaultPrevented;\n\t\t}\n\n\t\treturn true;\n\t};\n}\n\n// TODO mark beforeUpdate and afterUpdate as deprecated in Svelte 6\n\n/**\n * Schedules a callback to run immediately before the component is updated after any state change.\n *\n * The first time the callback runs will be before the initial `onMount`.\n *\n * In runes mode use `$effect.pre` instead.\n *\n * @deprecated Use [`$effect.pre`](https://svelte.dev/docs/svelte/$effect#$effect.pre) instead\n * @param {() => void} fn\n * @returns {void}\n */\nexport function beforeUpdate(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('beforeUpdate');\n\t}\n\n\tif (component_context.l === null) {\n\t\te.lifecycle_legacy_only('beforeUpdate');\n\t}\n\n\tinit_update_callbacks(component_context).b.push(fn);\n}\n\n/**\n * Schedules a callback to run immediately after the component has been updated.\n *\n * The first time the callback runs will be after the initial `onMount`.\n *\n * In runes mode use `$effect` instead.\n *\n * @deprecated Use [`$effect`](https://svelte.dev/docs/svelte/$effect) instead\n * @param {() => void} fn\n * @returns {void}\n */\nexport function afterUpdate(fn) {\n\tif (component_context === null) {\n\t\te.lifecycle_outside_component('afterUpdate');\n\t}\n\n\tif (component_context.l === null) {\n\t\te.lifecycle_legacy_only('afterUpdate');\n\t}\n\n\tinit_update_callbacks(component_context).a.push(fn);\n}\n\n/**\n * Legacy-mode: Init callbacks object for onMount/beforeUpdate/afterUpdate\n * @param {ComponentContext} context\n */\nfunction init_update_callbacks(context) {\n\tvar l = /** @type {ComponentContextLegacy} */ (context).l;\n\treturn (l.u ??= { a: [], b: [], m: [] });\n}\n\nexport { flushSync } from './internal/client/reactivity/batch.js';\nexport { getContext, getAllContexts, hasContext, setContext } from './internal/client/context.js';\nexport { hydrate, mount, unmount } from './internal/client/render.js';\nexport { tick, untrack, settled } from './internal/client/runtime.js';\nexport { createRawSnippet } from './internal/client/dom/blocks/snippet.js';\n","import { writable } from 'svelte/store';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import { EntryEditorPane, InternalLocaleCode, SelectAssetsView } from '$lib/types/private';\n */\n\n/**\n * @typedef {object} CopyToastState\n * @property {number | undefined} id Unique identifier for the toast.\n * @property {boolean} show Whether the toast is currently visible.\n * @property {'info' | 'success' | 'error'} status Status of the toast.\n * @property {string | undefined} message Message to display in the toast.\n * @property {number} count Number of copies made.\n * @property {InternalLocaleCode | undefined} sourceLocale Source locale for the copy.\n */\n\n/**\n * @type {Writable<boolean>}\n */\nexport const showContentOverlay = writable(false);\n\n/**\n * @type {Writable<boolean>}\n */\nexport const showDuplicateToast = writable(false);\n\n/**\n * @type {Writable<{ show: boolean, multiple: boolean, resolve?: Function }>}\n */\nexport const translatorApiKeyDialogState = writable({ show: false, multiple: false });\n\n/**\n * Copy/translation toast state.\n * @type {Writable<CopyToastState>}\n */\nexport const copyFromLocaleToast = writable({\n  id: undefined,\n  show: false,\n  status: 'success',\n  message: undefined,\n  count: 1,\n  sourceLocale: undefined,\n});\n\n/**\n * @type {Writable<?EntryEditorPane>}\n */\nexport const editorLeftPane = writable(null);\n\n/**\n * @type {Writable<?EntryEditorPane>}\n */\nexport const editorRightPane = writable(null);\n\n/**\n * View settings for the Select Assets dialog.\n * @type {Writable<SelectAssetsView | undefined>}\n */\nexport const selectAssetsView = writable();\n\n/**\n * Custom entry preview stylesheet registered with the `CMS.registerPreviewStyle()` API.\n * @type {{ href: string }}\n * @see https://decapcms.org/docs/customization/\n */\nexport const customPreviewStyle = { href: '' };\n","export default function toDataView (data) {\n  if (data instanceof Int8Array || data instanceof Uint8Array || data instanceof Uint8ClampedArray) {\n    return new DataView(data.buffer, data.byteOffset, data.byteLength)\n  }\n\n  if (data instanceof ArrayBuffer) {\n    return new DataView(data)\n  }\n\n  throw new TypeError('Expected `data` to be an ArrayBuffer, Buffer, Int8Array, Uint8Array or Uint8ClampedArray')\n}\n","import toDataView from 'to-data-view'\n\nconst RFC4648 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'\nconst RFC4648_HEX = '0123456789ABCDEFGHIJKLMNOPQRSTUV'\nconst CROCKFORD = '0123456789ABCDEFGHJKMNPQRSTVWXYZ'\n\nexport default function base32Encode (data, variant, options) {\n  options = options || {}\n  let alphabet, defaultPadding\n\n  switch (variant) {\n    case 'RFC3548':\n    case 'RFC4648':\n      alphabet = RFC4648\n      defaultPadding = true\n      break\n    case 'RFC4648-HEX':\n      alphabet = RFC4648_HEX\n      defaultPadding = true\n      break\n    case 'Crockford':\n      alphabet = CROCKFORD\n      defaultPadding = false\n      break\n    default:\n      throw new Error('Unknown base32 variant: ' + variant)\n  }\n\n  const padding = (options.padding !== undefined ? options.padding : defaultPadding)\n  const view = toDataView(data)\n\n  let bits = 0\n  let value = 0\n  let output = ''\n\n  for (let i = 0; i < view.byteLength; i++) {\n    value = (value << 8) | view.getUint8(i)\n    bits += 8\n\n    while (bits >= 5) {\n      output += alphabet[(value >>> (bits - 5)) & 31]\n      bits -= 5\n    }\n  }\n\n  if (bits > 0) {\n    output += alphabet[(value << (5 - bits)) & 31]\n  }\n\n  if (padding) {\n    while ((output.length % 8) !== 0) {\n      output += '='\n    }\n  }\n\n  return output\n}\n","import base32Encode from 'base32-encode';\n\n/**\n * Regular expression that matches a UUID.\n */\nconst uuidPattern = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/;\n\n/**\n * Generate a v4 UUID or its shortened version.\n * @param {'short' | 'shorter' | number} [length] - Length.\n * @returns {string} UUID like `10f95178-c983-4cfe-91d6-4e62c8c7e582`.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Crypto/randomUUID\n */\nconst generateUUID = (length) => {\n  const uuid = /** @type {string} */ globalThis.crypto.randomUUID();\n\n  // Last 12 characters\n  if (length === 'short') {\n    return /** @type {string} */ (uuid.split('-').pop());\n  }\n\n  // First 8 characters\n  if (length === 'shorter') {\n    return /** @type {string} */ (uuid.split('-').shift());\n  }\n\n  // First X characters but without hyphens\n  if (typeof length === 'number') {\n    return uuid.split('-').join('').slice(0, length);\n  }\n\n  return uuid;\n};\n\n/**\n * Generate a random ID.\n * @returns {string} Generated 26-character string.\n */\nconst generateRandomId = () => {\n  const hex = generateUUID().replaceAll('-', '');\n  const { buffer } = new Uint8Array((hex.match(/../g) ?? []).map((h) => parseInt(h, 16)));\n\n  return base32Encode(buffer, 'RFC4648', { padding: false }).toLowerCase();\n};\n\n/**\n * Get the SHA hash of the given file or text.\n * @param {File | Blob | string} input - File or text.\n * @param {object} [options] - Options.\n * @param {'SHA-1' | 'SHA-256' | 'SHA-512'} [options.algorithm] - Digest algorithm. Default: SHA-1.\n * @param {'hex' | 'binary'} [options.format] - Hash format. Default: hex.\n * @returns {Promise<string>} Hash.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest\n */\nconst getHash = async (input, { algorithm = 'SHA-1', format = 'hex' } = {}) => {\n  let data;\n\n  if (typeof input === 'string') {\n    const uint8Array = new TextEncoder().encode(input);\n\n    data = uint8Array.buffer.slice(\n      uint8Array.byteOffset,\n      uint8Array.byteOffset + uint8Array.byteLength,\n    );\n  } else if (input && typeof input.arrayBuffer === 'function') {\n    // Use arrayBuffer method if available (modern browsers)\n    data = await input.arrayBuffer();\n  } else if (input && typeof input.size === 'number' && typeof input.type === 'string') {\n    // This is likely a Blob or File object without arrayBuffer method (jsdom)\n    data = await new Promise((resolve, reject) => {\n      const reader = new FileReader();\n\n      /**\n       * Handle successful file read.\n       */\n      reader.onload = function onLoad() {\n        resolve(reader.result);\n      };\n\n      /**\n       * Handle file read error.\n       */\n      reader.onerror = function onError() {\n        reject(new Error('Failed to read blob as ArrayBuffer'));\n      };\n\n      reader.readAsArrayBuffer(input);\n    });\n  } else if (input && input.constructor && input.constructor.name === 'ArrayBuffer') {\n    // Handle ArrayBuffer directly\n    data = input;\n  } else if (\n    input &&\n    // @ts-expect-error - TypedArray properties\n    input.buffer &&\n    // @ts-expect-error - TypedArray properties\n    typeof input.byteLength === 'number'\n  ) {\n    // Handle TypedArray - convert to ArrayBuffer\n    // @ts-expect-error - TypedArray properties\n    data = input.buffer.slice(input.byteOffset, input.byteOffset + input.byteLength);\n  } else {\n    throw new Error('Unsupported input type for getHash');\n  }\n\n  // Workaround for jsdom: Use Uint8Array instead of ArrayBuffer\n  // jsdom's crypto.subtle.digest has issues with ArrayBuffer instanceof checks\n  // but works correctly with Uint8Array (which is also a valid input type)\n  const finalData = new Uint8Array(data);\n  const digest = await globalThis.crypto.subtle.digest(algorithm, finalData);\n\n  if (format === 'binary') {\n    return Array.from(new Uint8Array(digest), (b) => String.fromCharCode(b)).join('');\n  }\n\n  return Array.from(new Uint8Array(digest), (b) => b.toString(16).padStart(2, '0')).join('');\n};\n\nexport { generateRandomId, generateUUID, getHash, uuidPattern };\n","/**\n * Escape the given string so it can be used safely for `new RegExp()`.\n * @param {string} string - Original string.\n * @returns {string} Escaped string.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping\n */\nconst escapeRegExp = (string) => string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n/**\n * Truncate the given string.\n * @param {string} string - Original string.\n * @param {number} max - Maximum number of characters.\n * @param {object} [options] - Options.\n * @param {string} [options.ellipsis] - Character(s) to be appended if the the truncated string is\n * longer than `max`.\n * @returns {string} Truncated string.\n */\nconst truncate = (string, max, { ellipsis = '…' } = {}) => {\n  // Don’t use `split()` because it breaks Unicode characters like emoji\n  const chars = [...string];\n  const truncated = chars.slice(0, max).join('').trim();\n\n  return `${truncated}${chars.length > max ? ellipsis : ''}`;\n};\n\n/**\n * Strip the leading and trailing slashes from the given string.\n * @param {string} string - Original string, e.g. `/foo/bar/`.\n * @returns {string} Trimmed string, e.g. `foo/bar`.\n */\nconst stripSlashes = (string) => string.replace(/^\\/+/, '').replace(/\\/+$/, '');\n\n/**\n * Remove all HTML tags from the given string so it’s safe to use in the app.\n * @param {string} string - Original string that may include tags, e.g. `<div>Hello</div>`.\n * @returns {string} Sanitized string, e.g. `Hello`.\n */\nconst stripTags = (string) =>\n  new DOMParser().parseFromString(string, 'text/html').body.textContent ?? '';\n\n/**\n * Check if the given string is a URL.\n * @param {string} string - String that might be a URL.\n * @returns {boolean} Result.\n */\nconst isURL = (string) => {\n  // @ts-ignore\n  if (typeof URL.canParse === 'function') {\n    // @ts-ignore\n    return URL.canParse(string);\n  }\n\n  try {\n    // eslint-disable-next-line no-new\n    new URL(string);\n    return true;\n  } catch {\n    return false;\n  }\n};\n\n/**\n * Compare strings for natural sorting.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare\n */\n// eslint-disable-next-line prefer-destructuring\nconst compare = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' }).compare;\n\nexport { compare, escapeRegExp, isURL, stripSlashes, stripTags, truncate };\n","import { uuidPattern } from './crypto';\nimport { escapeRegExp } from './string';\n\n/**\n * Get a regular expression that matches a blob URL.\n * @param {string} flags - Flags for `RegExp`.\n * @returns {RegExp} Regular expression.\n */\nconst getBlobRegex = (flags = '') =>\n  new RegExp(\n    `\\\\bblob:${escapeRegExp(globalThis.location.origin)}\\\\/${uuidPattern.source}\\\\b`,\n    flags,\n  );\n\n/**\n * A regular expression to match a file path. Chained extensions of tarballs like `archive.tar.gz`\n * are treated as a special case.\n */\nconst filePathRegEx = /(?:(.+?)\\/)?(([^/]+?)(?:\\.((?:tar\\.)?[a-zA-Z0-9]+))?)$/;\n\n/**\n * List of MIME types that can be considered as plaintext.\n */\nconst textFileTypes = [\n  'application/atom+xml',\n  'application/javascript',\n  'application/json',\n  'application/ld+json',\n  'application/rss+xml',\n  'application/xhtml+xml',\n  'application/xml',\n  'application/yaml', // RFC 9512\n  'image/svg+xml',\n];\n\n/**\n * Whether the given MIME type is plaintext.\n * @param {string} type - MIME type.\n * @returns {boolean} Result.\n */\nconst isTextFileType = (type) => type.startsWith('text/') || textFileTypes.includes(type);\n\n/**\n * Get information about a file path.\n * @param {string} path - Path to be parsed.\n * @returns {{ dirname?: string, basename: string, filename: string, extension?: string }} Result.\n * @see https://www.php.net/manual/en/function.pathinfo.php\n */\nconst getPathInfo = (path) => {\n  const [, dirname, basename, filename, extension] = path.match(filePathRegEx) ?? [];\n\n  return { dirname, basename, filename, extension };\n};\n\n/**\n * Encode the given (partial) file path or file name. Since {@link encodeURIComponent} encodes\n * slashes, we need to split and join.\n * @param {string} path - Original path.\n * @returns {string} Encoded path.\n */\nconst encodeFilePath = (path) => path.split('/').map(encodeURIComponent).join('/');\n/**\n * Encode the given (partial) file path or file name.\n * @param {string} path - Original path.\n * @returns {string} Decoded path.\n */\nconst decodeFilePath = (path) => decodeURIComponent(path);\n\n/**\n * Check if the given file matches one of the unique file type specifiers.\n * @param {File} file - File to be evaluated.\n * @param {string[]} specifiers - List of file type specifiers.\n * @returns {boolean} Result.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/accept\n */\nconst isValidFileType = (file, specifiers) => {\n  if (!specifiers.length) {\n    return true;\n  }\n\n  return specifiers.some((specifier) => {\n    if (specifier.startsWith('.')) {\n      return file.name.endsWith(specifier);\n    }\n\n    const [type, subtype] = specifier.split('/');\n\n    if (subtype === '*') {\n      return file.type.split('/')[0] === type;\n    }\n\n    return file.type === specifier;\n  });\n};\n\n/**\n * Scan local files in nested folders and return them in a flat array, sorted by name.\n * @param {DataTransfer} dataTransfer - From `drop` event.\n * @param {object} [options] - Options.\n * @param {string} [options.accept] - Accepted file types, which is the same as the `accept`\n * property for HTML `<input type=\"file\">`.\n * @returns {Promise<File[]>} Files.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem/webkitGetAsEntry\n */\nconst scanFiles = async ({ items }, { accept } = {}) => {\n  const specifiers = accept ? accept.trim().split(/,\\s*/) : [];\n\n  /**\n   * Read files recursively from the filesystem.\n   * @param {FileSystemEntry} entry - Either a file or\n   * directory entry.\n   * @returns {Promise<File | File[] | null>} File.\n   */\n  const readEntry = (entry) =>\n    new Promise((resolve) => {\n      // Skip hidden files\n      if (entry.name.startsWith('.')) {\n        resolve(null);\n      } else if (entry.isFile) {\n        /** @type {FileSystemFileEntry} */ (entry).file(\n          (file) => {\n            resolve(isValidFileType(file, specifiers) ? file : null);\n          },\n          // Skip inaccessible files\n          () => {\n            resolve(null);\n          },\n        );\n      } else {\n        /** @type {FileSystemDirectoryEntry} */ (entry).createReader().readEntries((entries) => {\n          resolve(/** @type {Promise<File[]>} */ (Promise.all(entries.map(readEntry))));\n        });\n      }\n    });\n\n  return /** @type {File[]} */ (\n    (\n      await Promise.all(\n        [...items].map((item) => {\n          const entry = item.webkitGetAsEntry();\n\n          return entry ? readEntry(entry) : null;\n        }),\n      )\n    )\n      .flat(100000)\n      .filter(Boolean)\n  ).sort((a, b) => a.name.localeCompare(b.name));\n};\n\n/**\n * Read the given file as plaintext. On Windows, the result may include CRLF line breaks. Convert\n * any CRLF to LF to parse entries properly.\n * @param {File | Blob} file - File.\n * @returns {Promise<string>} Content.\n */\nconst readAsText = async (file) => (await file.text()).replace(/\\r\\n/g, '\\n');\n\n/**\n * Get the data URL of the given input.\n * @param {File | Blob | string} input - Input file or string.\n * @returns {Promise<string>} Data URL like `data:text/plain;base64,...`.\n */\nconst getDataURL = async (input) => {\n  const blob = typeof input === 'string' ? new Blob([input], { type: 'text/plain' }) : input;\n  const reader = new FileReader();\n\n  return new Promise((resolve) => {\n    /**\n     * Return the result once the content is read.\n     */\n    reader.onload = () => {\n      resolve(/** @type {string} */ (reader.result));\n    };\n\n    reader.readAsDataURL(blob);\n  });\n};\n\n/**\n * Encode the given input, either a file or a string, as a Base64-encoded string.\n * @param {File | Blob | string} input - Input file or string.\n * @returns {Promise<string>} Base64.\n */\nconst encodeBase64 = async (input) => (await getDataURL(input)).split(',')[1];\n\n/**\n * Decode a Base64-encoded string as a plaintext UTF-8 string. Uses `Promise` to be consistent with\n * {@link encodeBase64}.\n * @param {string} base64 - Base64-encoded string.\n * @returns {Promise<string>} Decoded string.\n * @see https://stackoverflow.com/q/21797299\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array/fromBase64\n */\nconst decodeBase64 = async (base64) => {\n  const buffer =\n    Uint8Array.fromBase64?.(base64) ?? Uint8Array.from(atob(base64), (c) => c.charCodeAt(0));\n\n  return new TextDecoder().decode(buffer);\n};\n\n/**\n * Save the given file locally.\n * @param {File | Blob} file - File to be saved.\n * @param {string} [name] - File name. Required if the `file` param is a `Blob`.\n */\nconst saveFile = (file, name) => {\n  const link = document.createElement('a');\n  const blobURL = URL.createObjectURL(file);\n\n  link.download =\n    name ?? /** @type {File} */ (file).name ?? `${Date.now()}.${file.type.split('/')[1]}`;\n  link.href = blobURL;\n  link.click();\n\n  URL.revokeObjectURL(blobURL);\n};\n\nexport {\n  decodeBase64,\n  decodeFilePath,\n  encodeBase64,\n  encodeFilePath,\n  getBlobRegex,\n  getDataURL,\n  getPathInfo,\n  isTextFileType,\n  isValidFileType,\n  readAsText,\n  saveFile,\n  scanFiles,\n};\n","'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn Object.propertyIsEnumerable.call(target, symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n  return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n  ownKeys = Object.getOwnPropertyNames || function (o) {\n    var ar = [];\n    for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n    return ar;\n  };\n  return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose, inner;\n    if (async) {\n      if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n      dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n      if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n      dispose = value[Symbol.dispose];\n      if (async) inner = dispose;\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  var r, s = 0;\n  function next() {\n    while (r = env.stack.pop()) {\n      try {\n        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n        if (r.dispose) {\n          var result = r.dispose.call(r.value);\n          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n        }\n        else s |= 1;\n      }\n      catch (e) {\n        fail(e);\n      }\n    }\n    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n  if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n      return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n          return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n      });\n  }\n  return path;\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __esDecorate,\n  __runInitializers,\n  __propKey,\n  __setFunctionName,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n  __rewriteRelativeImportExtension,\n};\n","//\n// Main\n//\nexport function memoize(fn, options) {\n    var cache = options && options.cache ? options.cache : cacheDefault;\n    var serializer = options && options.serializer ? options.serializer : serializerDefault;\n    var strategy = options && options.strategy ? options.strategy : strategyDefault;\n    return strategy(fn, {\n        cache: cache,\n        serializer: serializer,\n    });\n}\n//\n// Strategy\n//\nfunction isPrimitive(value) {\n    return (value == null || typeof value === 'number' || typeof value === 'boolean'); // || typeof value === \"string\" 'unsafe' primitive for our needs\n}\nfunction monadic(fn, cache, serializer, arg) {\n    var cacheKey = isPrimitive(arg) ? arg : serializer(arg);\n    var computedValue = cache.get(cacheKey);\n    if (typeof computedValue === 'undefined') {\n        computedValue = fn.call(this, arg);\n        cache.set(cacheKey, computedValue);\n    }\n    return computedValue;\n}\nfunction variadic(fn, cache, serializer) {\n    var args = Array.prototype.slice.call(arguments, 3);\n    var cacheKey = serializer(args);\n    var computedValue = cache.get(cacheKey);\n    if (typeof computedValue === 'undefined') {\n        computedValue = fn.apply(this, args);\n        cache.set(cacheKey, computedValue);\n    }\n    return computedValue;\n}\nfunction assemble(fn, context, strategy, cache, serialize) {\n    return strategy.bind(context, fn, cache, serialize);\n}\nfunction strategyDefault(fn, options) {\n    var strategy = fn.length === 1 ? monadic : variadic;\n    return assemble(fn, this, strategy, options.cache.create(), options.serializer);\n}\nfunction strategyVariadic(fn, options) {\n    return assemble(fn, this, variadic, options.cache.create(), options.serializer);\n}\nfunction strategyMonadic(fn, options) {\n    return assemble(fn, this, monadic, options.cache.create(), options.serializer);\n}\n//\n// Serializer\n//\nvar serializerDefault = function () {\n    return JSON.stringify(arguments);\n};\n//\n// Cache\n//\nvar ObjectWithoutPrototypeCache = /** @class */ (function () {\n    function ObjectWithoutPrototypeCache() {\n        this.cache = Object.create(null);\n    }\n    ObjectWithoutPrototypeCache.prototype.get = function (key) {\n        return this.cache[key];\n    };\n    ObjectWithoutPrototypeCache.prototype.set = function (key, value) {\n        this.cache[key] = value;\n    };\n    return ObjectWithoutPrototypeCache;\n}());\nvar cacheDefault = {\n    create: function create() {\n        return new ObjectWithoutPrototypeCache();\n    },\n};\nexport var strategies = {\n    variadic: strategyVariadic,\n    monadic: strategyMonadic,\n};\n","export var ErrorKind;\n(function (ErrorKind) {\n    /** Argument is unclosed (e.g. `{0`) */\n    ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_CLOSING_BRACE\"] = 1] = \"EXPECT_ARGUMENT_CLOSING_BRACE\";\n    /** Argument is empty (e.g. `{}`). */\n    ErrorKind[ErrorKind[\"EMPTY_ARGUMENT\"] = 2] = \"EMPTY_ARGUMENT\";\n    /** Argument is malformed (e.g. `{foo!}``) */\n    ErrorKind[ErrorKind[\"MALFORMED_ARGUMENT\"] = 3] = \"MALFORMED_ARGUMENT\";\n    /** Expect an argument type (e.g. `{foo,}`) */\n    ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_TYPE\"] = 4] = \"EXPECT_ARGUMENT_TYPE\";\n    /** Unsupported argument type (e.g. `{foo,foo}`) */\n    ErrorKind[ErrorKind[\"INVALID_ARGUMENT_TYPE\"] = 5] = \"INVALID_ARGUMENT_TYPE\";\n    /** Expect an argument style (e.g. `{foo, number, }`) */\n    ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_STYLE\"] = 6] = \"EXPECT_ARGUMENT_STYLE\";\n    /** The number skeleton is invalid. */\n    ErrorKind[ErrorKind[\"INVALID_NUMBER_SKELETON\"] = 7] = \"INVALID_NUMBER_SKELETON\";\n    /** The date time skeleton is invalid. */\n    ErrorKind[ErrorKind[\"INVALID_DATE_TIME_SKELETON\"] = 8] = \"INVALID_DATE_TIME_SKELETON\";\n    /** Exepct a number skeleton following the `::` (e.g. `{foo, number, ::}`) */\n    ErrorKind[ErrorKind[\"EXPECT_NUMBER_SKELETON\"] = 9] = \"EXPECT_NUMBER_SKELETON\";\n    /** Exepct a date time skeleton following the `::` (e.g. `{foo, date, ::}`) */\n    ErrorKind[ErrorKind[\"EXPECT_DATE_TIME_SKELETON\"] = 10] = \"EXPECT_DATE_TIME_SKELETON\";\n    /** Unmatched apostrophes in the argument style (e.g. `{foo, number, 'test`) */\n    ErrorKind[ErrorKind[\"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\"] = 11] = \"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\";\n    /** Missing select argument options (e.g. `{foo, select}`) */\n    ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_OPTIONS\"] = 12] = \"EXPECT_SELECT_ARGUMENT_OPTIONS\";\n    /** Expecting an offset value in `plural` or `selectordinal` argument (e.g `{foo, plural, offset}`) */\n    ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\"] = 13] = \"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\";\n    /** Offset value in `plural` or `selectordinal` is invalid (e.g. `{foo, plural, offset: x}`) */\n    ErrorKind[ErrorKind[\"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\"] = 14] = \"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\";\n    /** Expecting a selector in `select` argument (e.g `{foo, select}`) */\n    ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_SELECTOR\"] = 15] = \"EXPECT_SELECT_ARGUMENT_SELECTOR\";\n    /** Expecting a selector in `plural` or `selectordinal` argument (e.g `{foo, plural}`) */\n    ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_SELECTOR\"] = 16] = \"EXPECT_PLURAL_ARGUMENT_SELECTOR\";\n    /** Expecting a message fragment after the `select` selector (e.g. `{foo, select, apple}`) */\n    ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\"] = 17] = \"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\";\n    /**\n     * Expecting a message fragment after the `plural` or `selectordinal` selector\n     * (e.g. `{foo, plural, one}`)\n     */\n    ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\"] = 18] = \"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\";\n    /** Selector in `plural` or `selectordinal` is malformed (e.g. `{foo, plural, =x {#}}`) */\n    ErrorKind[ErrorKind[\"INVALID_PLURAL_ARGUMENT_SELECTOR\"] = 19] = \"INVALID_PLURAL_ARGUMENT_SELECTOR\";\n    /**\n     * Duplicate selectors in `plural` or `selectordinal` argument.\n     * (e.g. {foo, plural, one {#} one {#}})\n     */\n    ErrorKind[ErrorKind[\"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\"] = 20] = \"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\";\n    /** Duplicate selectors in `select` argument.\n     * (e.g. {foo, select, apple {apple} apple {apple}})\n     */\n    ErrorKind[ErrorKind[\"DUPLICATE_SELECT_ARGUMENT_SELECTOR\"] = 21] = \"DUPLICATE_SELECT_ARGUMENT_SELECTOR\";\n    /** Plural or select argument option must have `other` clause. */\n    ErrorKind[ErrorKind[\"MISSING_OTHER_CLAUSE\"] = 22] = \"MISSING_OTHER_CLAUSE\";\n    /** The tag is malformed. (e.g. `<bold!>foo</bold!>) */\n    ErrorKind[ErrorKind[\"INVALID_TAG\"] = 23] = \"INVALID_TAG\";\n    /** The tag name is invalid. (e.g. `<123>foo</123>`) */\n    ErrorKind[ErrorKind[\"INVALID_TAG_NAME\"] = 25] = \"INVALID_TAG_NAME\";\n    /** The closing tag does not match the opening tag. (e.g. `<bold>foo</italic>`) */\n    ErrorKind[ErrorKind[\"UNMATCHED_CLOSING_TAG\"] = 26] = \"UNMATCHED_CLOSING_TAG\";\n    /** The opening tag has unmatched closing tag. (e.g. `<bold>foo`) */\n    ErrorKind[ErrorKind[\"UNCLOSED_TAG\"] = 27] = \"UNCLOSED_TAG\";\n})(ErrorKind || (ErrorKind = {}));\n","export var TYPE;\n(function (TYPE) {\n    /**\n     * Raw text\n     */\n    TYPE[TYPE[\"literal\"] = 0] = \"literal\";\n    /**\n     * Variable w/o any format, e.g `var` in `this is a {var}`\n     */\n    TYPE[TYPE[\"argument\"] = 1] = \"argument\";\n    /**\n     * Variable w/ number format\n     */\n    TYPE[TYPE[\"number\"] = 2] = \"number\";\n    /**\n     * Variable w/ date format\n     */\n    TYPE[TYPE[\"date\"] = 3] = \"date\";\n    /**\n     * Variable w/ time format\n     */\n    TYPE[TYPE[\"time\"] = 4] = \"time\";\n    /**\n     * Variable w/ select format\n     */\n    TYPE[TYPE[\"select\"] = 5] = \"select\";\n    /**\n     * Variable w/ plural format\n     */\n    TYPE[TYPE[\"plural\"] = 6] = \"plural\";\n    /**\n     * Only possible within plural argument.\n     * This is the `#` symbol that will be substituted with the count.\n     */\n    TYPE[TYPE[\"pound\"] = 7] = \"pound\";\n    /**\n     * XML-like tag\n     */\n    TYPE[TYPE[\"tag\"] = 8] = \"tag\";\n})(TYPE || (TYPE = {}));\nexport var SKELETON_TYPE;\n(function (SKELETON_TYPE) {\n    SKELETON_TYPE[SKELETON_TYPE[\"number\"] = 0] = \"number\";\n    SKELETON_TYPE[SKELETON_TYPE[\"dateTime\"] = 1] = \"dateTime\";\n})(SKELETON_TYPE || (SKELETON_TYPE = {}));\n/**\n * Type Guards\n */\nexport function isLiteralElement(el) {\n    return el.type === TYPE.literal;\n}\nexport function isArgumentElement(el) {\n    return el.type === TYPE.argument;\n}\nexport function isNumberElement(el) {\n    return el.type === TYPE.number;\n}\nexport function isDateElement(el) {\n    return el.type === TYPE.date;\n}\nexport function isTimeElement(el) {\n    return el.type === TYPE.time;\n}\nexport function isSelectElement(el) {\n    return el.type === TYPE.select;\n}\nexport function isPluralElement(el) {\n    return el.type === TYPE.plural;\n}\nexport function isPoundElement(el) {\n    return el.type === TYPE.pound;\n}\nexport function isTagElement(el) {\n    return el.type === TYPE.tag;\n}\nexport function isNumberSkeleton(el) {\n    return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.number);\n}\nexport function isDateTimeSkeleton(el) {\n    return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.dateTime);\n}\nexport function createLiteralElement(value) {\n    return {\n        type: TYPE.literal,\n        value: value,\n    };\n}\nexport function createNumberElement(value, style) {\n    return {\n        type: TYPE.number,\n        value: value,\n        style: style,\n    };\n}\n","// @generated from regex-gen.ts\nexport var SPACE_SEPARATOR_REGEX = /[ \\xA0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/;\nexport var WHITE_SPACE_REGEX = /[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/;\n","/**\n * https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * Credit: https://github.com/caridy/intl-datetimeformat-pattern/blob/master/index.js\n * with some tweaks\n */\nvar DATE_TIME_REGEX = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;\n/**\n * Parse Date time skeleton into Intl.DateTimeFormatOptions\n * Ref: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * @public\n * @param skeleton skeleton string\n */\nexport function parseDateTimeSkeleton(skeleton) {\n    var result = {};\n    skeleton.replace(DATE_TIME_REGEX, function (match) {\n        var len = match.length;\n        switch (match[0]) {\n            // Era\n            case 'G':\n                result.era = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short';\n                break;\n            // Year\n            case 'y':\n                result.year = len === 2 ? '2-digit' : 'numeric';\n                break;\n            case 'Y':\n            case 'u':\n            case 'U':\n            case 'r':\n                throw new RangeError('`Y/u/U/r` (year) patterns are not supported, use `y` instead');\n            // Quarter\n            case 'q':\n            case 'Q':\n                throw new RangeError('`q/Q` (quarter) patterns are not supported');\n            // Month\n            case 'M':\n            case 'L':\n                result.month = ['numeric', '2-digit', 'short', 'long', 'narrow'][len - 1];\n                break;\n            // Week\n            case 'w':\n            case 'W':\n                throw new RangeError('`w/W` (week) patterns are not supported');\n            case 'd':\n                result.day = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'D':\n            case 'F':\n            case 'g':\n                throw new RangeError('`D/F/g` (day) patterns are not supported, use `d` instead');\n            // Weekday\n            case 'E':\n                result.weekday = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short';\n                break;\n            case 'e':\n                if (len < 4) {\n                    throw new RangeError('`e..eee` (weekday) patterns are not supported');\n                }\n                result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n                break;\n            case 'c':\n                if (len < 4) {\n                    throw new RangeError('`c..ccc` (weekday) patterns are not supported');\n                }\n                result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n                break;\n            // Period\n            case 'a': // AM, PM\n                result.hour12 = true;\n                break;\n            case 'b': // am, pm, noon, midnight\n            case 'B': // flexible day periods\n                throw new RangeError('`b/B` (period) patterns are not supported, use `a` instead');\n            // Hour\n            case 'h':\n                result.hourCycle = 'h12';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'H':\n                result.hourCycle = 'h23';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'K':\n                result.hourCycle = 'h11';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'k':\n                result.hourCycle = 'h24';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'j':\n            case 'J':\n            case 'C':\n                throw new RangeError('`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead');\n            // Minute\n            case 'm':\n                result.minute = ['numeric', '2-digit'][len - 1];\n                break;\n            // Second\n            case 's':\n                result.second = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'S':\n            case 'A':\n                throw new RangeError('`S/A` (second) patterns are not supported, use `s` instead');\n            // Zone\n            case 'z': // 1..3, 4: specific non-location format\n                result.timeZoneName = len < 4 ? 'short' : 'long';\n                break;\n            case 'Z': // 1..3, 4, 5: The ISO8601 varios formats\n            case 'O': // 1, 4: milliseconds in day short, long\n            case 'v': // 1, 4: generic non-location format\n            case 'V': // 1, 2, 3, 4: time zone ID or city\n            case 'X': // 1, 2, 3, 4: The ISO8601 varios formats\n            case 'x': // 1, 2, 3, 4: The ISO8601 varios formats\n                throw new RangeError('`Z/O/v/V/X/x` (timeZone) patterns are not supported, use `z` instead');\n        }\n        return '';\n    });\n    return result;\n}\n","// @generated from regex-gen.ts\nexport var WHITE_SPACE_REGEX = /[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/i;\n","import { __assign } from \"tslib\";\nimport { WHITE_SPACE_REGEX } from './regex.generated';\nexport function parseNumberSkeletonFromString(skeleton) {\n    if (skeleton.length === 0) {\n        throw new Error('Number skeleton cannot be empty');\n    }\n    // Parse the skeleton\n    var stringTokens = skeleton\n        .split(WHITE_SPACE_REGEX)\n        .filter(function (x) { return x.length > 0; });\n    var tokens = [];\n    for (var _i = 0, stringTokens_1 = stringTokens; _i < stringTokens_1.length; _i++) {\n        var stringToken = stringTokens_1[_i];\n        var stemAndOptions = stringToken.split('/');\n        if (stemAndOptions.length === 0) {\n            throw new Error('Invalid number skeleton');\n        }\n        var stem = stemAndOptions[0], options = stemAndOptions.slice(1);\n        for (var _a = 0, options_1 = options; _a < options_1.length; _a++) {\n            var option = options_1[_a];\n            if (option.length === 0) {\n                throw new Error('Invalid number skeleton');\n            }\n        }\n        tokens.push({ stem: stem, options: options });\n    }\n    return tokens;\n}\nfunction icuUnitToEcma(unit) {\n    return unit.replace(/^(.*?)-/, '');\n}\nvar FRACTION_PRECISION_REGEX = /^\\.(?:(0+)(\\*)?|(#+)|(0+)(#+))$/g;\nvar SIGNIFICANT_PRECISION_REGEX = /^(@+)?(\\+|#+)?[rs]?$/g;\nvar INTEGER_WIDTH_REGEX = /(\\*)(0+)|(#+)(0+)|(0+)/g;\nvar CONCISE_INTEGER_WIDTH_REGEX = /^(0+)$/;\nfunction parseSignificantPrecision(str) {\n    var result = {};\n    if (str[str.length - 1] === 'r') {\n        result.roundingPriority = 'morePrecision';\n    }\n    else if (str[str.length - 1] === 's') {\n        result.roundingPriority = 'lessPrecision';\n    }\n    str.replace(SIGNIFICANT_PRECISION_REGEX, function (_, g1, g2) {\n        // @@@ case\n        if (typeof g2 !== 'string') {\n            result.minimumSignificantDigits = g1.length;\n            result.maximumSignificantDigits = g1.length;\n        }\n        // @@@+ case\n        else if (g2 === '+') {\n            result.minimumSignificantDigits = g1.length;\n        }\n        // .### case\n        else if (g1[0] === '#') {\n            result.maximumSignificantDigits = g1.length;\n        }\n        // .@@## or .@@@ case\n        else {\n            result.minimumSignificantDigits = g1.length;\n            result.maximumSignificantDigits =\n                g1.length + (typeof g2 === 'string' ? g2.length : 0);\n        }\n        return '';\n    });\n    return result;\n}\nfunction parseSign(str) {\n    switch (str) {\n        case 'sign-auto':\n            return {\n                signDisplay: 'auto',\n            };\n        case 'sign-accounting':\n        case '()':\n            return {\n                currencySign: 'accounting',\n            };\n        case 'sign-always':\n        case '+!':\n            return {\n                signDisplay: 'always',\n            };\n        case 'sign-accounting-always':\n        case '()!':\n            return {\n                signDisplay: 'always',\n                currencySign: 'accounting',\n            };\n        case 'sign-except-zero':\n        case '+?':\n            return {\n                signDisplay: 'exceptZero',\n            };\n        case 'sign-accounting-except-zero':\n        case '()?':\n            return {\n                signDisplay: 'exceptZero',\n                currencySign: 'accounting',\n            };\n        case 'sign-never':\n        case '+_':\n            return {\n                signDisplay: 'never',\n            };\n    }\n}\nfunction parseConciseScientificAndEngineeringStem(stem) {\n    // Engineering\n    var result;\n    if (stem[0] === 'E' && stem[1] === 'E') {\n        result = {\n            notation: 'engineering',\n        };\n        stem = stem.slice(2);\n    }\n    else if (stem[0] === 'E') {\n        result = {\n            notation: 'scientific',\n        };\n        stem = stem.slice(1);\n    }\n    if (result) {\n        var signDisplay = stem.slice(0, 2);\n        if (signDisplay === '+!') {\n            result.signDisplay = 'always';\n            stem = stem.slice(2);\n        }\n        else if (signDisplay === '+?') {\n            result.signDisplay = 'exceptZero';\n            stem = stem.slice(2);\n        }\n        if (!CONCISE_INTEGER_WIDTH_REGEX.test(stem)) {\n            throw new Error('Malformed concise eng/scientific notation');\n        }\n        result.minimumIntegerDigits = stem.length;\n    }\n    return result;\n}\nfunction parseNotationOptions(opt) {\n    var result = {};\n    var signOpts = parseSign(opt);\n    if (signOpts) {\n        return signOpts;\n    }\n    return result;\n}\n/**\n * https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options\n */\nexport function parseNumberSkeleton(tokens) {\n    var result = {};\n    for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {\n        var token = tokens_1[_i];\n        switch (token.stem) {\n            case 'percent':\n            case '%':\n                result.style = 'percent';\n                continue;\n            case '%x100':\n                result.style = 'percent';\n                result.scale = 100;\n                continue;\n            case 'currency':\n                result.style = 'currency';\n                result.currency = token.options[0];\n                continue;\n            case 'group-off':\n            case ',_':\n                result.useGrouping = false;\n                continue;\n            case 'precision-integer':\n            case '.':\n                result.maximumFractionDigits = 0;\n                continue;\n            case 'measure-unit':\n            case 'unit':\n                result.style = 'unit';\n                result.unit = icuUnitToEcma(token.options[0]);\n                continue;\n            case 'compact-short':\n            case 'K':\n                result.notation = 'compact';\n                result.compactDisplay = 'short';\n                continue;\n            case 'compact-long':\n            case 'KK':\n                result.notation = 'compact';\n                result.compactDisplay = 'long';\n                continue;\n            case 'scientific':\n                result = __assign(__assign(__assign({}, result), { notation: 'scientific' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));\n                continue;\n            case 'engineering':\n                result = __assign(__assign(__assign({}, result), { notation: 'engineering' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));\n                continue;\n            case 'notation-simple':\n                result.notation = 'standard';\n                continue;\n            // https://github.com/unicode-org/icu/blob/master/icu4c/source/i18n/unicode/unumberformatter.h\n            case 'unit-width-narrow':\n                result.currencyDisplay = 'narrowSymbol';\n                result.unitDisplay = 'narrow';\n                continue;\n            case 'unit-width-short':\n                result.currencyDisplay = 'code';\n                result.unitDisplay = 'short';\n                continue;\n            case 'unit-width-full-name':\n                result.currencyDisplay = 'name';\n                result.unitDisplay = 'long';\n                continue;\n            case 'unit-width-iso-code':\n                result.currencyDisplay = 'symbol';\n                continue;\n            case 'scale':\n                result.scale = parseFloat(token.options[0]);\n                continue;\n            case 'rounding-mode-floor':\n                result.roundingMode = 'floor';\n                continue;\n            case 'rounding-mode-ceiling':\n                result.roundingMode = 'ceil';\n                continue;\n            case 'rounding-mode-down':\n                result.roundingMode = 'trunc';\n                continue;\n            case 'rounding-mode-up':\n                result.roundingMode = 'expand';\n                continue;\n            case 'rounding-mode-half-even':\n                result.roundingMode = 'halfEven';\n                continue;\n            case 'rounding-mode-half-down':\n                result.roundingMode = 'halfTrunc';\n                continue;\n            case 'rounding-mode-half-up':\n                result.roundingMode = 'halfExpand';\n                continue;\n            // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width\n            case 'integer-width':\n                if (token.options.length > 1) {\n                    throw new RangeError('integer-width stems only accept a single optional option');\n                }\n                token.options[0].replace(INTEGER_WIDTH_REGEX, function (_, g1, g2, g3, g4, g5) {\n                    if (g1) {\n                        result.minimumIntegerDigits = g2.length;\n                    }\n                    else if (g3 && g4) {\n                        throw new Error('We currently do not support maximum integer digits');\n                    }\n                    else if (g5) {\n                        throw new Error('We currently do not support exact integer digits');\n                    }\n                    return '';\n                });\n                continue;\n        }\n        // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width\n        if (CONCISE_INTEGER_WIDTH_REGEX.test(token.stem)) {\n            result.minimumIntegerDigits = token.stem.length;\n            continue;\n        }\n        if (FRACTION_PRECISION_REGEX.test(token.stem)) {\n            // Precision\n            // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#fraction-precision\n            // precision-integer case\n            if (token.options.length > 1) {\n                throw new RangeError('Fraction-precision stems only accept a single optional option');\n            }\n            token.stem.replace(FRACTION_PRECISION_REGEX, function (_, g1, g2, g3, g4, g5) {\n                // .000* case (before ICU67 it was .000+)\n                if (g2 === '*') {\n                    result.minimumFractionDigits = g1.length;\n                }\n                // .### case\n                else if (g3 && g3[0] === '#') {\n                    result.maximumFractionDigits = g3.length;\n                }\n                // .00## case\n                else if (g4 && g5) {\n                    result.minimumFractionDigits = g4.length;\n                    result.maximumFractionDigits = g4.length + g5.length;\n                }\n                else {\n                    result.minimumFractionDigits = g1.length;\n                    result.maximumFractionDigits = g1.length;\n                }\n                return '';\n            });\n            var opt = token.options[0];\n            // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#trailing-zero-display\n            if (opt === 'w') {\n                result = __assign(__assign({}, result), { trailingZeroDisplay: 'stripIfInteger' });\n            }\n            else if (opt) {\n                result = __assign(__assign({}, result), parseSignificantPrecision(opt));\n            }\n            continue;\n        }\n        // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#significant-digits-precision\n        if (SIGNIFICANT_PRECISION_REGEX.test(token.stem)) {\n            result = __assign(__assign({}, result), parseSignificantPrecision(token.stem));\n            continue;\n        }\n        var signOpts = parseSign(token.stem);\n        if (signOpts) {\n            result = __assign(__assign({}, result), signOpts);\n        }\n        var conciseScientificAndEngineeringOpts = parseConciseScientificAndEngineeringStem(token.stem);\n        if (conciseScientificAndEngineeringOpts) {\n            result = __assign(__assign({}, result), conciseScientificAndEngineeringOpts);\n        }\n    }\n    return result;\n}\n","// @generated from time-data-gen.ts\n// prettier-ignore  \nexport var timeData = {\n    \"001\": [\n        \"H\",\n        \"h\"\n    ],\n    \"419\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"AC\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"AD\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AE\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"AF\": [\n        \"H\",\n        \"hb\",\n        \"hB\",\n        \"h\"\n    ],\n    \"AG\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"AI\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"AL\": [\n        \"h\",\n        \"H\",\n        \"hB\"\n    ],\n    \"AM\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AO\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AR\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"AS\": [\n        \"h\",\n        \"H\"\n    ],\n    \"AT\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AU\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"AW\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AX\": [\n        \"H\"\n    ],\n    \"AZ\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"BA\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"BB\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"BD\": [\n        \"h\",\n        \"hB\",\n        \"H\"\n    ],\n    \"BE\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BF\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BG\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"BH\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"BI\": [\n        \"H\",\n        \"h\"\n    ],\n    \"BJ\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BL\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"BN\": [\n        \"hb\",\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"BO\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"BQ\": [\n        \"H\"\n    ],\n    \"BR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BS\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"BT\": [\n        \"h\",\n        \"H\"\n    ],\n    \"BW\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"BY\": [\n        \"H\",\n        \"h\"\n    ],\n    \"BZ\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CA\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"CC\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CD\": [\n        \"hB\",\n        \"H\"\n    ],\n    \"CF\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"CG\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"CH\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"CI\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"CK\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CL\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"CM\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"CN\": [\n        \"H\",\n        \"hB\",\n        \"hb\",\n        \"h\"\n    ],\n    \"CO\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"CP\": [\n        \"H\"\n    ],\n    \"CR\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"CU\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"CV\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"CW\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"CX\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CY\": [\n        \"h\",\n        \"H\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CZ\": [\n        \"H\"\n    ],\n    \"DE\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"DG\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"DJ\": [\n        \"h\",\n        \"H\"\n    ],\n    \"DK\": [\n        \"H\"\n    ],\n    \"DM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"DO\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"DZ\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"EA\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"EC\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"EE\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"EG\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"EH\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"ER\": [\n        \"h\",\n        \"H\"\n    ],\n    \"ES\": [\n        \"H\",\n        \"hB\",\n        \"h\",\n        \"hb\"\n    ],\n    \"ET\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"FI\": [\n        \"H\"\n    ],\n    \"FJ\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"FK\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"FM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"FO\": [\n        \"H\",\n        \"h\"\n    ],\n    \"FR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GA\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GB\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"GD\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"GE\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"GF\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GG\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"GH\": [\n        \"h\",\n        \"H\"\n    ],\n    \"GI\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"GL\": [\n        \"H\",\n        \"h\"\n    ],\n    \"GM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"GN\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GP\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GQ\": [\n        \"H\",\n        \"hB\",\n        \"h\",\n        \"hb\"\n    ],\n    \"GR\": [\n        \"h\",\n        \"H\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"GT\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"GU\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"GW\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GY\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"HK\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"HN\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"HR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"HU\": [\n        \"H\",\n        \"h\"\n    ],\n    \"IC\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"ID\": [\n        \"H\"\n    ],\n    \"IE\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"IL\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"IM\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"IN\": [\n        \"h\",\n        \"H\"\n    ],\n    \"IO\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"IQ\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"IR\": [\n        \"hB\",\n        \"H\"\n    ],\n    \"IS\": [\n        \"H\"\n    ],\n    \"IT\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"JE\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"JM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"JO\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"JP\": [\n        \"H\",\n        \"K\",\n        \"h\"\n    ],\n    \"KE\": [\n        \"hB\",\n        \"hb\",\n        \"H\",\n        \"h\"\n    ],\n    \"KG\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"KH\": [\n        \"hB\",\n        \"h\",\n        \"H\",\n        \"hb\"\n    ],\n    \"KI\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"KM\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"KN\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"KP\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"KR\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"KW\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"KY\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"KZ\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"LA\": [\n        \"H\",\n        \"hb\",\n        \"hB\",\n        \"h\"\n    ],\n    \"LB\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"LC\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"LI\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"LK\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"LR\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"LS\": [\n        \"h\",\n        \"H\"\n    ],\n    \"LT\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"LU\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"LV\": [\n        \"H\",\n        \"hB\",\n        \"hb\",\n        \"h\"\n    ],\n    \"LY\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"MA\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"MC\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"MD\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"ME\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"MF\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"MG\": [\n        \"H\",\n        \"h\"\n    ],\n    \"MH\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"MK\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"ML\": [\n        \"H\"\n    ],\n    \"MM\": [\n        \"hB\",\n        \"hb\",\n        \"H\",\n        \"h\"\n    ],\n    \"MN\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"MO\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"MP\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"MQ\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"MR\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"MS\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"MT\": [\n        \"H\",\n        \"h\"\n    ],\n    \"MU\": [\n        \"H\",\n        \"h\"\n    ],\n    \"MV\": [\n        \"H\",\n        \"h\"\n    ],\n    \"MW\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"MX\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"MY\": [\n        \"hb\",\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"MZ\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"NA\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"NC\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"NE\": [\n        \"H\"\n    ],\n    \"NF\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"NG\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"NI\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"NL\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"NO\": [\n        \"H\",\n        \"h\"\n    ],\n    \"NP\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"NR\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"NU\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"NZ\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"OM\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"PA\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"PE\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"PF\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"PG\": [\n        \"h\",\n        \"H\"\n    ],\n    \"PH\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"PK\": [\n        \"h\",\n        \"hB\",\n        \"H\"\n    ],\n    \"PL\": [\n        \"H\",\n        \"h\"\n    ],\n    \"PM\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"PN\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"PR\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"PS\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"PT\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"PW\": [\n        \"h\",\n        \"H\"\n    ],\n    \"PY\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"QA\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"RE\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"RO\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"RS\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"RU\": [\n        \"H\"\n    ],\n    \"RW\": [\n        \"H\",\n        \"h\"\n    ],\n    \"SA\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"SB\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"SC\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"SD\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"SE\": [\n        \"H\"\n    ],\n    \"SG\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"SH\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"SI\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"SJ\": [\n        \"H\"\n    ],\n    \"SK\": [\n        \"H\"\n    ],\n    \"SL\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"SM\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"SN\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"SO\": [\n        \"h\",\n        \"H\"\n    ],\n    \"SR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"SS\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"ST\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"SV\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"SX\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"SY\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"SZ\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"TA\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"TC\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"TD\": [\n        \"h\",\n        \"H\",\n        \"hB\"\n    ],\n    \"TF\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"TG\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"TH\": [\n        \"H\",\n        \"h\"\n    ],\n    \"TJ\": [\n        \"H\",\n        \"h\"\n    ],\n    \"TL\": [\n        \"H\",\n        \"hB\",\n        \"hb\",\n        \"h\"\n    ],\n    \"TM\": [\n        \"H\",\n        \"h\"\n    ],\n    \"TN\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"TO\": [\n        \"h\",\n        \"H\"\n    ],\n    \"TR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"TT\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"TW\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"TZ\": [\n        \"hB\",\n        \"hb\",\n        \"H\",\n        \"h\"\n    ],\n    \"UA\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"UG\": [\n        \"hB\",\n        \"hb\",\n        \"H\",\n        \"h\"\n    ],\n    \"UM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"US\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"UY\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"UZ\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"VA\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"VC\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"VE\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"VG\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"VI\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"VN\": [\n        \"H\",\n        \"h\"\n    ],\n    \"VU\": [\n        \"h\",\n        \"H\"\n    ],\n    \"WF\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"WS\": [\n        \"h\",\n        \"H\"\n    ],\n    \"XK\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"YE\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"YT\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"ZA\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"ZM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"ZW\": [\n        \"H\",\n        \"h\"\n    ],\n    \"af-ZA\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"ar-001\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"ca-ES\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"en-001\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"en-HK\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"en-IL\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"en-MY\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"es-BR\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"es-ES\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"es-GQ\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"fr-CA\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"gl-ES\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"gu-IN\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"hi-IN\": [\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"it-CH\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"it-IT\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"kn-IN\": [\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"ml-IN\": [\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"mr-IN\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"pa-IN\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"ta-IN\": [\n        \"hB\",\n        \"h\",\n        \"hb\",\n        \"H\"\n    ],\n    \"te-IN\": [\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"zu-ZA\": [\n        \"H\",\n        \"hB\",\n        \"hb\",\n        \"h\"\n    ]\n};\n","import { timeData } from './time-data.generated';\n/**\n * Returns the best matching date time pattern if a date time skeleton\n * pattern is provided with a locale. Follows the Unicode specification:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#table-mapping-requested-time-skeletons-to-patterns\n * @param skeleton date time skeleton pattern that possibly includes j, J or C\n * @param locale\n */\nexport function getBestPattern(skeleton, locale) {\n    var skeletonCopy = '';\n    for (var patternPos = 0; patternPos < skeleton.length; patternPos++) {\n        var patternChar = skeleton.charAt(patternPos);\n        if (patternChar === 'j') {\n            var extraLength = 0;\n            while (patternPos + 1 < skeleton.length &&\n                skeleton.charAt(patternPos + 1) === patternChar) {\n                extraLength++;\n                patternPos++;\n            }\n            var hourLen = 1 + (extraLength & 1);\n            var dayPeriodLen = extraLength < 2 ? 1 : 3 + (extraLength >> 1);\n            var dayPeriodChar = 'a';\n            var hourChar = getDefaultHourSymbolFromLocale(locale);\n            if (hourChar == 'H' || hourChar == 'k') {\n                dayPeriodLen = 0;\n            }\n            while (dayPeriodLen-- > 0) {\n                skeletonCopy += dayPeriodChar;\n            }\n            while (hourLen-- > 0) {\n                skeletonCopy = hourChar + skeletonCopy;\n            }\n        }\n        else if (patternChar === 'J') {\n            skeletonCopy += 'H';\n        }\n        else {\n            skeletonCopy += patternChar;\n        }\n    }\n    return skeletonCopy;\n}\n/**\n * Maps the [hour cycle type](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle)\n * of the given `locale` to the corresponding time pattern.\n * @param locale\n */\nfunction getDefaultHourSymbolFromLocale(locale) {\n    var hourCycle = locale.hourCycle;\n    if (hourCycle === undefined &&\n        // @ts-ignore hourCycle(s) is not identified yet\n        locale.hourCycles &&\n        // @ts-ignore\n        locale.hourCycles.length) {\n        // @ts-ignore\n        hourCycle = locale.hourCycles[0];\n    }\n    if (hourCycle) {\n        switch (hourCycle) {\n            case 'h24':\n                return 'k';\n            case 'h23':\n                return 'H';\n            case 'h12':\n                return 'h';\n            case 'h11':\n                return 'K';\n            default:\n                throw new Error('Invalid hourCycle');\n        }\n    }\n    // TODO: Once hourCycle is fully supported remove the following with data generation\n    var languageTag = locale.language;\n    var regionTag;\n    if (languageTag !== 'root') {\n        regionTag = locale.maximize().region;\n    }\n    var hourCycles = timeData[regionTag || ''] ||\n        timeData[languageTag || ''] ||\n        timeData[\"\".concat(languageTag, \"-001\")] ||\n        timeData['001'];\n    return hourCycles[0];\n}\n","var _a;\nimport { __assign } from \"tslib\";\nimport { ErrorKind } from './error';\nimport { SKELETON_TYPE, TYPE, } from './types';\nimport { SPACE_SEPARATOR_REGEX } from './regex.generated';\nimport { parseNumberSkeleton, parseNumberSkeletonFromString, parseDateTimeSkeleton, } from '@formatjs/icu-skeleton-parser';\nimport { getBestPattern } from './date-time-pattern-generator';\nvar SPACE_SEPARATOR_START_REGEX = new RegExp(\"^\".concat(SPACE_SEPARATOR_REGEX.source, \"*\"));\nvar SPACE_SEPARATOR_END_REGEX = new RegExp(\"\".concat(SPACE_SEPARATOR_REGEX.source, \"*$\"));\nfunction createLocation(start, end) {\n    return { start: start, end: end };\n}\n// #region Ponyfills\n// Consolidate these variables up top for easier toggling during debugging\nvar hasNativeStartsWith = !!String.prototype.startsWith && '_a'.startsWith('a', 1);\nvar hasNativeFromCodePoint = !!String.fromCodePoint;\nvar hasNativeFromEntries = !!Object.fromEntries;\nvar hasNativeCodePointAt = !!String.prototype.codePointAt;\nvar hasTrimStart = !!String.prototype.trimStart;\nvar hasTrimEnd = !!String.prototype.trimEnd;\nvar hasNativeIsSafeInteger = !!Number.isSafeInteger;\nvar isSafeInteger = hasNativeIsSafeInteger\n    ? Number.isSafeInteger\n    : function (n) {\n        return (typeof n === 'number' &&\n            isFinite(n) &&\n            Math.floor(n) === n &&\n            Math.abs(n) <= 0x1fffffffffffff);\n    };\n// IE11 does not support y and u.\nvar REGEX_SUPPORTS_U_AND_Y = true;\ntry {\n    var re = RE('([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)', 'yu');\n    /**\n     * legacy Edge or Xbox One browser\n     * Unicode flag support: supported\n     * Pattern_Syntax support: not supported\n     * See https://github.com/formatjs/formatjs/issues/2822\n     */\n    REGEX_SUPPORTS_U_AND_Y = ((_a = re.exec('a')) === null || _a === void 0 ? void 0 : _a[0]) === 'a';\n}\ncatch (_) {\n    REGEX_SUPPORTS_U_AND_Y = false;\n}\nvar startsWith = hasNativeStartsWith\n    ? // Native\n        function startsWith(s, search, position) {\n            return s.startsWith(search, position);\n        }\n    : // For IE11\n        function startsWith(s, search, position) {\n            return s.slice(position, position + search.length) === search;\n        };\nvar fromCodePoint = hasNativeFromCodePoint\n    ? String.fromCodePoint\n    : // IE11\n        function fromCodePoint() {\n            var codePoints = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                codePoints[_i] = arguments[_i];\n            }\n            var elements = '';\n            var length = codePoints.length;\n            var i = 0;\n            var code;\n            while (length > i) {\n                code = codePoints[i++];\n                if (code > 0x10ffff)\n                    throw RangeError(code + ' is not a valid code point');\n                elements +=\n                    code < 0x10000\n                        ? String.fromCharCode(code)\n                        : String.fromCharCode(((code -= 0x10000) >> 10) + 0xd800, (code % 0x400) + 0xdc00);\n            }\n            return elements;\n        };\nvar fromEntries = \n// native\nhasNativeFromEntries\n    ? Object.fromEntries\n    : // Ponyfill\n        function fromEntries(entries) {\n            var obj = {};\n            for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n                var _a = entries_1[_i], k = _a[0], v = _a[1];\n                obj[k] = v;\n            }\n            return obj;\n        };\nvar codePointAt = hasNativeCodePointAt\n    ? // Native\n        function codePointAt(s, index) {\n            return s.codePointAt(index);\n        }\n    : // IE 11\n        function codePointAt(s, index) {\n            var size = s.length;\n            if (index < 0 || index >= size) {\n                return undefined;\n            }\n            var first = s.charCodeAt(index);\n            var second;\n            return first < 0xd800 ||\n                first > 0xdbff ||\n                index + 1 === size ||\n                (second = s.charCodeAt(index + 1)) < 0xdc00 ||\n                second > 0xdfff\n                ? first\n                : ((first - 0xd800) << 10) + (second - 0xdc00) + 0x10000;\n        };\nvar trimStart = hasTrimStart\n    ? // Native\n        function trimStart(s) {\n            return s.trimStart();\n        }\n    : // Ponyfill\n        function trimStart(s) {\n            return s.replace(SPACE_SEPARATOR_START_REGEX, '');\n        };\nvar trimEnd = hasTrimEnd\n    ? // Native\n        function trimEnd(s) {\n            return s.trimEnd();\n        }\n    : // Ponyfill\n        function trimEnd(s) {\n            return s.replace(SPACE_SEPARATOR_END_REGEX, '');\n        };\n// Prevent minifier to translate new RegExp to literal form that might cause syntax error on IE11.\nfunction RE(s, flag) {\n    return new RegExp(s, flag);\n}\n// #endregion\nvar matchIdentifierAtIndex;\nif (REGEX_SUPPORTS_U_AND_Y) {\n    // Native\n    var IDENTIFIER_PREFIX_RE_1 = RE('([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)', 'yu');\n    matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) {\n        var _a;\n        IDENTIFIER_PREFIX_RE_1.lastIndex = index;\n        var match = IDENTIFIER_PREFIX_RE_1.exec(s);\n        return (_a = match[1]) !== null && _a !== void 0 ? _a : '';\n    };\n}\nelse {\n    // IE11\n    matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) {\n        var match = [];\n        while (true) {\n            var c = codePointAt(s, index);\n            if (c === undefined || _isWhiteSpace(c) || _isPatternSyntax(c)) {\n                break;\n            }\n            match.push(c);\n            index += c >= 0x10000 ? 2 : 1;\n        }\n        return fromCodePoint.apply(void 0, match);\n    };\n}\nvar Parser = /** @class */ (function () {\n    function Parser(message, options) {\n        if (options === void 0) { options = {}; }\n        this.message = message;\n        this.position = { offset: 0, line: 1, column: 1 };\n        this.ignoreTag = !!options.ignoreTag;\n        this.locale = options.locale;\n        this.requiresOtherClause = !!options.requiresOtherClause;\n        this.shouldParseSkeletons = !!options.shouldParseSkeletons;\n    }\n    Parser.prototype.parse = function () {\n        if (this.offset() !== 0) {\n            throw Error('parser can only be used once');\n        }\n        return this.parseMessage(0, '', false);\n    };\n    Parser.prototype.parseMessage = function (nestingLevel, parentArgType, expectingCloseTag) {\n        var elements = [];\n        while (!this.isEOF()) {\n            var char = this.char();\n            if (char === 123 /* `{` */) {\n                var result = this.parseArgument(nestingLevel, expectingCloseTag);\n                if (result.err) {\n                    return result;\n                }\n                elements.push(result.val);\n            }\n            else if (char === 125 /* `}` */ && nestingLevel > 0) {\n                break;\n            }\n            else if (char === 35 /* `#` */ &&\n                (parentArgType === 'plural' || parentArgType === 'selectordinal')) {\n                var position = this.clonePosition();\n                this.bump();\n                elements.push({\n                    type: TYPE.pound,\n                    location: createLocation(position, this.clonePosition()),\n                });\n            }\n            else if (char === 60 /* `<` */ &&\n                !this.ignoreTag &&\n                this.peek() === 47 // char code for '/'\n            ) {\n                if (expectingCloseTag) {\n                    break;\n                }\n                else {\n                    return this.error(ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(this.clonePosition(), this.clonePosition()));\n                }\n            }\n            else if (char === 60 /* `<` */ &&\n                !this.ignoreTag &&\n                _isAlpha(this.peek() || 0)) {\n                var result = this.parseTag(nestingLevel, parentArgType);\n                if (result.err) {\n                    return result;\n                }\n                elements.push(result.val);\n            }\n            else {\n                var result = this.parseLiteral(nestingLevel, parentArgType);\n                if (result.err) {\n                    return result;\n                }\n                elements.push(result.val);\n            }\n        }\n        return { val: elements, err: null };\n    };\n    /**\n     * A tag name must start with an ASCII lower/upper case letter. The grammar is based on the\n     * [custom element name][] except that a dash is NOT always mandatory and uppercase letters\n     * are accepted:\n     *\n     * ```\n     * tag ::= \"<\" tagName (whitespace)* \"/>\" | \"<\" tagName (whitespace)* \">\" message \"</\" tagName (whitespace)* \">\"\n     * tagName ::= [a-z] (PENChar)*\n     * PENChar ::=\n     *     \"-\" | \".\" | [0-9] | \"_\" | [a-z] | [A-Z] | #xB7 | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x37D] |\n     *     [#x37F-#x1FFF] | [#x200C-#x200D] | [#x203F-#x2040] | [#x2070-#x218F] | [#x2C00-#x2FEF] |\n     *     [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n     * ```\n     *\n     * [custom element name]: https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\n     * NOTE: We're a bit more lax here since HTML technically does not allow uppercase HTML element but we do\n     * since other tag-based engines like React allow it\n     */\n    Parser.prototype.parseTag = function (nestingLevel, parentArgType) {\n        var startPosition = this.clonePosition();\n        this.bump(); // `<`\n        var tagName = this.parseTagName();\n        this.bumpSpace();\n        if (this.bumpIf('/>')) {\n            // Self closing tag\n            return {\n                val: {\n                    type: TYPE.literal,\n                    value: \"<\".concat(tagName, \"/>\"),\n                    location: createLocation(startPosition, this.clonePosition()),\n                },\n                err: null,\n            };\n        }\n        else if (this.bumpIf('>')) {\n            var childrenResult = this.parseMessage(nestingLevel + 1, parentArgType, true);\n            if (childrenResult.err) {\n                return childrenResult;\n            }\n            var children = childrenResult.val;\n            // Expecting a close tag\n            var endTagStartPosition = this.clonePosition();\n            if (this.bumpIf('</')) {\n                if (this.isEOF() || !_isAlpha(this.char())) {\n                    return this.error(ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition()));\n                }\n                var closingTagNameStartPosition = this.clonePosition();\n                var closingTagName = this.parseTagName();\n                if (tagName !== closingTagName) {\n                    return this.error(ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(closingTagNameStartPosition, this.clonePosition()));\n                }\n                this.bumpSpace();\n                if (!this.bumpIf('>')) {\n                    return this.error(ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition()));\n                }\n                return {\n                    val: {\n                        type: TYPE.tag,\n                        value: tagName,\n                        children: children,\n                        location: createLocation(startPosition, this.clonePosition()),\n                    },\n                    err: null,\n                };\n            }\n            else {\n                return this.error(ErrorKind.UNCLOSED_TAG, createLocation(startPosition, this.clonePosition()));\n            }\n        }\n        else {\n            return this.error(ErrorKind.INVALID_TAG, createLocation(startPosition, this.clonePosition()));\n        }\n    };\n    /**\n     * This method assumes that the caller has peeked ahead for the first tag character.\n     */\n    Parser.prototype.parseTagName = function () {\n        var startOffset = this.offset();\n        this.bump(); // the first tag name character\n        while (!this.isEOF() && _isPotentialElementNameChar(this.char())) {\n            this.bump();\n        }\n        return this.message.slice(startOffset, this.offset());\n    };\n    Parser.prototype.parseLiteral = function (nestingLevel, parentArgType) {\n        var start = this.clonePosition();\n        var value = '';\n        while (true) {\n            var parseQuoteResult = this.tryParseQuote(parentArgType);\n            if (parseQuoteResult) {\n                value += parseQuoteResult;\n                continue;\n            }\n            var parseUnquotedResult = this.tryParseUnquoted(nestingLevel, parentArgType);\n            if (parseUnquotedResult) {\n                value += parseUnquotedResult;\n                continue;\n            }\n            var parseLeftAngleResult = this.tryParseLeftAngleBracket();\n            if (parseLeftAngleResult) {\n                value += parseLeftAngleResult;\n                continue;\n            }\n            break;\n        }\n        var location = createLocation(start, this.clonePosition());\n        return {\n            val: { type: TYPE.literal, value: value, location: location },\n            err: null,\n        };\n    };\n    Parser.prototype.tryParseLeftAngleBracket = function () {\n        if (!this.isEOF() &&\n            this.char() === 60 /* `<` */ &&\n            (this.ignoreTag ||\n                // If at the opening tag or closing tag position, bail.\n                !_isAlphaOrSlash(this.peek() || 0))) {\n            this.bump(); // `<`\n            return '<';\n        }\n        return null;\n    };\n    /**\n     * Starting with ICU 4.8, an ASCII apostrophe only starts quoted text if it immediately precedes\n     * a character that requires quoting (that is, \"only where needed\"), and works the same in\n     * nested messages as on the top level of the pattern. The new behavior is otherwise compatible.\n     */\n    Parser.prototype.tryParseQuote = function (parentArgType) {\n        if (this.isEOF() || this.char() !== 39 /* `'` */) {\n            return null;\n        }\n        // Parse escaped char following the apostrophe, or early return if there is no escaped char.\n        // Check if is valid escaped character\n        switch (this.peek()) {\n            case 39 /* `'` */:\n                // double quote, should return as a single quote.\n                this.bump();\n                this.bump();\n                return \"'\";\n            // '{', '<', '>', '}'\n            case 123:\n            case 60:\n            case 62:\n            case 125:\n                break;\n            case 35: // '#'\n                if (parentArgType === 'plural' || parentArgType === 'selectordinal') {\n                    break;\n                }\n                return null;\n            default:\n                return null;\n        }\n        this.bump(); // apostrophe\n        var codePoints = [this.char()]; // escaped char\n        this.bump();\n        // read chars until the optional closing apostrophe is found\n        while (!this.isEOF()) {\n            var ch = this.char();\n            if (ch === 39 /* `'` */) {\n                if (this.peek() === 39 /* `'` */) {\n                    codePoints.push(39);\n                    // Bump one more time because we need to skip 2 characters.\n                    this.bump();\n                }\n                else {\n                    // Optional closing apostrophe.\n                    this.bump();\n                    break;\n                }\n            }\n            else {\n                codePoints.push(ch);\n            }\n            this.bump();\n        }\n        return fromCodePoint.apply(void 0, codePoints);\n    };\n    Parser.prototype.tryParseUnquoted = function (nestingLevel, parentArgType) {\n        if (this.isEOF()) {\n            return null;\n        }\n        var ch = this.char();\n        if (ch === 60 /* `<` */ ||\n            ch === 123 /* `{` */ ||\n            (ch === 35 /* `#` */ &&\n                (parentArgType === 'plural' || parentArgType === 'selectordinal')) ||\n            (ch === 125 /* `}` */ && nestingLevel > 0)) {\n            return null;\n        }\n        else {\n            this.bump();\n            return fromCodePoint(ch);\n        }\n    };\n    Parser.prototype.parseArgument = function (nestingLevel, expectingCloseTag) {\n        var openingBracePosition = this.clonePosition();\n        this.bump(); // `{`\n        this.bumpSpace();\n        if (this.isEOF()) {\n            return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        if (this.char() === 125 /* `}` */) {\n            this.bump();\n            return this.error(ErrorKind.EMPTY_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        // argument name\n        var value = this.parseIdentifierIfPossible().value;\n        if (!value) {\n            return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        this.bumpSpace();\n        if (this.isEOF()) {\n            return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        switch (this.char()) {\n            // Simple argument: `{name}`\n            case 125 /* `}` */: {\n                this.bump(); // `}`\n                return {\n                    val: {\n                        type: TYPE.argument,\n                        // value does not include the opening and closing braces.\n                        value: value,\n                        location: createLocation(openingBracePosition, this.clonePosition()),\n                    },\n                    err: null,\n                };\n            }\n            // Argument with options: `{name, format, ...}`\n            case 44 /* `,` */: {\n                this.bump(); // `,`\n                this.bumpSpace();\n                if (this.isEOF()) {\n                    return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n                }\n                return this.parseArgumentOptions(nestingLevel, expectingCloseTag, value, openingBracePosition);\n            }\n            default:\n                return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n        }\n    };\n    /**\n     * Advance the parser until the end of the identifier, if it is currently on\n     * an identifier character. Return an empty string otherwise.\n     */\n    Parser.prototype.parseIdentifierIfPossible = function () {\n        var startingPosition = this.clonePosition();\n        var startOffset = this.offset();\n        var value = matchIdentifierAtIndex(this.message, startOffset);\n        var endOffset = startOffset + value.length;\n        this.bumpTo(endOffset);\n        var endPosition = this.clonePosition();\n        var location = createLocation(startingPosition, endPosition);\n        return { value: value, location: location };\n    };\n    Parser.prototype.parseArgumentOptions = function (nestingLevel, expectingCloseTag, value, openingBracePosition) {\n        var _a;\n        // Parse this range:\n        // {name, type, style}\n        //        ^---^\n        var typeStartPosition = this.clonePosition();\n        var argType = this.parseIdentifierIfPossible().value;\n        var typeEndPosition = this.clonePosition();\n        switch (argType) {\n            case '':\n                // Expecting a style string number, date, time, plural, selectordinal, or select.\n                return this.error(ErrorKind.EXPECT_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));\n            case 'number':\n            case 'date':\n            case 'time': {\n                // Parse this range:\n                // {name, number, style}\n                //              ^-------^\n                this.bumpSpace();\n                var styleAndLocation = null;\n                if (this.bumpIf(',')) {\n                    this.bumpSpace();\n                    var styleStartPosition = this.clonePosition();\n                    var result = this.parseSimpleArgStyleIfPossible();\n                    if (result.err) {\n                        return result;\n                    }\n                    var style = trimEnd(result.val);\n                    if (style.length === 0) {\n                        return this.error(ErrorKind.EXPECT_ARGUMENT_STYLE, createLocation(this.clonePosition(), this.clonePosition()));\n                    }\n                    var styleLocation = createLocation(styleStartPosition, this.clonePosition());\n                    styleAndLocation = { style: style, styleLocation: styleLocation };\n                }\n                var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n                if (argCloseResult.err) {\n                    return argCloseResult;\n                }\n                var location_1 = createLocation(openingBracePosition, this.clonePosition());\n                // Extract style or skeleton\n                if (styleAndLocation && startsWith(styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style, '::', 0)) {\n                    // Skeleton starts with `::`.\n                    var skeleton = trimStart(styleAndLocation.style.slice(2));\n                    if (argType === 'number') {\n                        var result = this.parseNumberSkeletonFromString(skeleton, styleAndLocation.styleLocation);\n                        if (result.err) {\n                            return result;\n                        }\n                        return {\n                            val: { type: TYPE.number, value: value, location: location_1, style: result.val },\n                            err: null,\n                        };\n                    }\n                    else {\n                        if (skeleton.length === 0) {\n                            return this.error(ErrorKind.EXPECT_DATE_TIME_SKELETON, location_1);\n                        }\n                        var dateTimePattern = skeleton;\n                        // Get \"best match\" pattern only if locale is passed, if not, let it\n                        // pass as-is where `parseDateTimeSkeleton()` will throw an error\n                        // for unsupported patterns.\n                        if (this.locale) {\n                            dateTimePattern = getBestPattern(skeleton, this.locale);\n                        }\n                        var style = {\n                            type: SKELETON_TYPE.dateTime,\n                            pattern: dateTimePattern,\n                            location: styleAndLocation.styleLocation,\n                            parsedOptions: this.shouldParseSkeletons\n                                ? parseDateTimeSkeleton(dateTimePattern)\n                                : {},\n                        };\n                        var type = argType === 'date' ? TYPE.date : TYPE.time;\n                        return {\n                            val: { type: type, value: value, location: location_1, style: style },\n                            err: null,\n                        };\n                    }\n                }\n                // Regular style or no style.\n                return {\n                    val: {\n                        type: argType === 'number'\n                            ? TYPE.number\n                            : argType === 'date'\n                                ? TYPE.date\n                                : TYPE.time,\n                        value: value,\n                        location: location_1,\n                        style: (_a = styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style) !== null && _a !== void 0 ? _a : null,\n                    },\n                    err: null,\n                };\n            }\n            case 'plural':\n            case 'selectordinal':\n            case 'select': {\n                // Parse this range:\n                // {name, plural, options}\n                //              ^---------^\n                var typeEndPosition_1 = this.clonePosition();\n                this.bumpSpace();\n                if (!this.bumpIf(',')) {\n                    return this.error(ErrorKind.EXPECT_SELECT_ARGUMENT_OPTIONS, createLocation(typeEndPosition_1, __assign({}, typeEndPosition_1)));\n                }\n                this.bumpSpace();\n                // Parse offset:\n                // {name, plural, offset:1, options}\n                //                ^-----^\n                //\n                // or the first option:\n                //\n                // {name, plural, one {...} other {...}}\n                //                ^--^\n                var identifierAndLocation = this.parseIdentifierIfPossible();\n                var pluralOffset = 0;\n                if (argType !== 'select' && identifierAndLocation.value === 'offset') {\n                    if (!this.bumpIf(':')) {\n                        return this.error(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, createLocation(this.clonePosition(), this.clonePosition()));\n                    }\n                    this.bumpSpace();\n                    var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, ErrorKind.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE);\n                    if (result.err) {\n                        return result;\n                    }\n                    // Parse another identifier for option parsing\n                    this.bumpSpace();\n                    identifierAndLocation = this.parseIdentifierIfPossible();\n                    pluralOffset = result.val;\n                }\n                var optionsResult = this.tryParsePluralOrSelectOptions(nestingLevel, argType, expectingCloseTag, identifierAndLocation);\n                if (optionsResult.err) {\n                    return optionsResult;\n                }\n                var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n                if (argCloseResult.err) {\n                    return argCloseResult;\n                }\n                var location_2 = createLocation(openingBracePosition, this.clonePosition());\n                if (argType === 'select') {\n                    return {\n                        val: {\n                            type: TYPE.select,\n                            value: value,\n                            options: fromEntries(optionsResult.val),\n                            location: location_2,\n                        },\n                        err: null,\n                    };\n                }\n                else {\n                    return {\n                        val: {\n                            type: TYPE.plural,\n                            value: value,\n                            options: fromEntries(optionsResult.val),\n                            offset: pluralOffset,\n                            pluralType: argType === 'plural' ? 'cardinal' : 'ordinal',\n                            location: location_2,\n                        },\n                        err: null,\n                    };\n                }\n            }\n            default:\n                return this.error(ErrorKind.INVALID_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));\n        }\n    };\n    Parser.prototype.tryParseArgumentClose = function (openingBracePosition) {\n        // Parse: {value, number, ::currency/GBP }\n        //\n        if (this.isEOF() || this.char() !== 125 /* `}` */) {\n            return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        this.bump(); // `}`\n        return { val: true, err: null };\n    };\n    /**\n     * See: https://github.com/unicode-org/icu/blob/af7ed1f6d2298013dc303628438ec4abe1f16479/icu4c/source/common/messagepattern.cpp#L659\n     */\n    Parser.prototype.parseSimpleArgStyleIfPossible = function () {\n        var nestedBraces = 0;\n        var startPosition = this.clonePosition();\n        while (!this.isEOF()) {\n            var ch = this.char();\n            switch (ch) {\n                case 39 /* `'` */: {\n                    // Treat apostrophe as quoting but include it in the style part.\n                    // Find the end of the quoted literal text.\n                    this.bump();\n                    var apostrophePosition = this.clonePosition();\n                    if (!this.bumpUntil(\"'\")) {\n                        return this.error(ErrorKind.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE, createLocation(apostrophePosition, this.clonePosition()));\n                    }\n                    this.bump();\n                    break;\n                }\n                case 123 /* `{` */: {\n                    nestedBraces += 1;\n                    this.bump();\n                    break;\n                }\n                case 125 /* `}` */: {\n                    if (nestedBraces > 0) {\n                        nestedBraces -= 1;\n                    }\n                    else {\n                        return {\n                            val: this.message.slice(startPosition.offset, this.offset()),\n                            err: null,\n                        };\n                    }\n                    break;\n                }\n                default:\n                    this.bump();\n                    break;\n            }\n        }\n        return {\n            val: this.message.slice(startPosition.offset, this.offset()),\n            err: null,\n        };\n    };\n    Parser.prototype.parseNumberSkeletonFromString = function (skeleton, location) {\n        var tokens = [];\n        try {\n            tokens = parseNumberSkeletonFromString(skeleton);\n        }\n        catch (e) {\n            return this.error(ErrorKind.INVALID_NUMBER_SKELETON, location);\n        }\n        return {\n            val: {\n                type: SKELETON_TYPE.number,\n                tokens: tokens,\n                location: location,\n                parsedOptions: this.shouldParseSkeletons\n                    ? parseNumberSkeleton(tokens)\n                    : {},\n            },\n            err: null,\n        };\n    };\n    /**\n     * @param nesting_level The current nesting level of messages.\n     *     This can be positive when parsing message fragment in select or plural argument options.\n     * @param parent_arg_type The parent argument's type.\n     * @param parsed_first_identifier If provided, this is the first identifier-like selector of\n     *     the argument. It is a by-product of a previous parsing attempt.\n     * @param expecting_close_tag If true, this message is directly or indirectly nested inside\n     *     between a pair of opening and closing tags. The nested message will not parse beyond\n     *     the closing tag boundary.\n     */\n    Parser.prototype.tryParsePluralOrSelectOptions = function (nestingLevel, parentArgType, expectCloseTag, parsedFirstIdentifier) {\n        var _a;\n        var hasOtherClause = false;\n        var options = [];\n        var parsedSelectors = new Set();\n        var selector = parsedFirstIdentifier.value, selectorLocation = parsedFirstIdentifier.location;\n        // Parse:\n        // one {one apple}\n        // ^--^\n        while (true) {\n            if (selector.length === 0) {\n                var startPosition = this.clonePosition();\n                if (parentArgType !== 'select' && this.bumpIf('=')) {\n                    // Try parse `={number}` selector\n                    var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, ErrorKind.INVALID_PLURAL_ARGUMENT_SELECTOR);\n                    if (result.err) {\n                        return result;\n                    }\n                    selectorLocation = createLocation(startPosition, this.clonePosition());\n                    selector = this.message.slice(startPosition.offset, this.offset());\n                }\n                else {\n                    break;\n                }\n            }\n            // Duplicate selector clauses\n            if (parsedSelectors.has(selector)) {\n                return this.error(parentArgType === 'select'\n                    ? ErrorKind.DUPLICATE_SELECT_ARGUMENT_SELECTOR\n                    : ErrorKind.DUPLICATE_PLURAL_ARGUMENT_SELECTOR, selectorLocation);\n            }\n            if (selector === 'other') {\n                hasOtherClause = true;\n            }\n            // Parse:\n            // one {one apple}\n            //     ^----------^\n            this.bumpSpace();\n            var openingBracePosition = this.clonePosition();\n            if (!this.bumpIf('{')) {\n                return this.error(parentArgType === 'select'\n                    ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\n                    : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT, createLocation(this.clonePosition(), this.clonePosition()));\n            }\n            var fragmentResult = this.parseMessage(nestingLevel + 1, parentArgType, expectCloseTag);\n            if (fragmentResult.err) {\n                return fragmentResult;\n            }\n            var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n            if (argCloseResult.err) {\n                return argCloseResult;\n            }\n            options.push([\n                selector,\n                {\n                    value: fragmentResult.val,\n                    location: createLocation(openingBracePosition, this.clonePosition()),\n                },\n            ]);\n            // Keep track of the existing selectors\n            parsedSelectors.add(selector);\n            // Prep next selector clause.\n            this.bumpSpace();\n            (_a = this.parseIdentifierIfPossible(), selector = _a.value, selectorLocation = _a.location);\n        }\n        if (options.length === 0) {\n            return this.error(parentArgType === 'select'\n                ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR\n                : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, createLocation(this.clonePosition(), this.clonePosition()));\n        }\n        if (this.requiresOtherClause && !hasOtherClause) {\n            return this.error(ErrorKind.MISSING_OTHER_CLAUSE, createLocation(this.clonePosition(), this.clonePosition()));\n        }\n        return { val: options, err: null };\n    };\n    Parser.prototype.tryParseDecimalInteger = function (expectNumberError, invalidNumberError) {\n        var sign = 1;\n        var startingPosition = this.clonePosition();\n        if (this.bumpIf('+')) {\n        }\n        else if (this.bumpIf('-')) {\n            sign = -1;\n        }\n        var hasDigits = false;\n        var decimal = 0;\n        while (!this.isEOF()) {\n            var ch = this.char();\n            if (ch >= 48 /* `0` */ && ch <= 57 /* `9` */) {\n                hasDigits = true;\n                decimal = decimal * 10 + (ch - 48);\n                this.bump();\n            }\n            else {\n                break;\n            }\n        }\n        var location = createLocation(startingPosition, this.clonePosition());\n        if (!hasDigits) {\n            return this.error(expectNumberError, location);\n        }\n        decimal *= sign;\n        if (!isSafeInteger(decimal)) {\n            return this.error(invalidNumberError, location);\n        }\n        return { val: decimal, err: null };\n    };\n    Parser.prototype.offset = function () {\n        return this.position.offset;\n    };\n    Parser.prototype.isEOF = function () {\n        return this.offset() === this.message.length;\n    };\n    Parser.prototype.clonePosition = function () {\n        // This is much faster than `Object.assign` or spread.\n        return {\n            offset: this.position.offset,\n            line: this.position.line,\n            column: this.position.column,\n        };\n    };\n    /**\n     * Return the code point at the current position of the parser.\n     * Throws if the index is out of bound.\n     */\n    Parser.prototype.char = function () {\n        var offset = this.position.offset;\n        if (offset >= this.message.length) {\n            throw Error('out of bound');\n        }\n        var code = codePointAt(this.message, offset);\n        if (code === undefined) {\n            throw Error(\"Offset \".concat(offset, \" is at invalid UTF-16 code unit boundary\"));\n        }\n        return code;\n    };\n    Parser.prototype.error = function (kind, location) {\n        return {\n            val: null,\n            err: {\n                kind: kind,\n                message: this.message,\n                location: location,\n            },\n        };\n    };\n    /** Bump the parser to the next UTF-16 code unit. */\n    Parser.prototype.bump = function () {\n        if (this.isEOF()) {\n            return;\n        }\n        var code = this.char();\n        if (code === 10 /* '\\n' */) {\n            this.position.line += 1;\n            this.position.column = 1;\n            this.position.offset += 1;\n        }\n        else {\n            this.position.column += 1;\n            // 0 ~ 0x10000 -> unicode BMP, otherwise skip the surrogate pair.\n            this.position.offset += code < 0x10000 ? 1 : 2;\n        }\n    };\n    /**\n     * If the substring starting at the current position of the parser has\n     * the given prefix, then bump the parser to the character immediately\n     * following the prefix and return true. Otherwise, don't bump the parser\n     * and return false.\n     */\n    Parser.prototype.bumpIf = function (prefix) {\n        if (startsWith(this.message, prefix, this.offset())) {\n            for (var i = 0; i < prefix.length; i++) {\n                this.bump();\n            }\n            return true;\n        }\n        return false;\n    };\n    /**\n     * Bump the parser until the pattern character is found and return `true`.\n     * Otherwise bump to the end of the file and return `false`.\n     */\n    Parser.prototype.bumpUntil = function (pattern) {\n        var currentOffset = this.offset();\n        var index = this.message.indexOf(pattern, currentOffset);\n        if (index >= 0) {\n            this.bumpTo(index);\n            return true;\n        }\n        else {\n            this.bumpTo(this.message.length);\n            return false;\n        }\n    };\n    /**\n     * Bump the parser to the target offset.\n     * If target offset is beyond the end of the input, bump the parser to the end of the input.\n     */\n    Parser.prototype.bumpTo = function (targetOffset) {\n        if (this.offset() > targetOffset) {\n            throw Error(\"targetOffset \".concat(targetOffset, \" must be greater than or equal to the current offset \").concat(this.offset()));\n        }\n        targetOffset = Math.min(targetOffset, this.message.length);\n        while (true) {\n            var offset = this.offset();\n            if (offset === targetOffset) {\n                break;\n            }\n            if (offset > targetOffset) {\n                throw Error(\"targetOffset \".concat(targetOffset, \" is at invalid UTF-16 code unit boundary\"));\n            }\n            this.bump();\n            if (this.isEOF()) {\n                break;\n            }\n        }\n    };\n    /** advance the parser through all whitespace to the next non-whitespace code unit. */\n    Parser.prototype.bumpSpace = function () {\n        while (!this.isEOF() && _isWhiteSpace(this.char())) {\n            this.bump();\n        }\n    };\n    /**\n     * Peek at the *next* Unicode codepoint in the input without advancing the parser.\n     * If the input has been exhausted, then this returns null.\n     */\n    Parser.prototype.peek = function () {\n        if (this.isEOF()) {\n            return null;\n        }\n        var code = this.char();\n        var offset = this.offset();\n        var nextCode = this.message.charCodeAt(offset + (code >= 0x10000 ? 2 : 1));\n        return nextCode !== null && nextCode !== void 0 ? nextCode : null;\n    };\n    return Parser;\n}());\nexport { Parser };\n/**\n * This check if codepoint is alphabet (lower & uppercase)\n * @param codepoint\n * @returns\n */\nfunction _isAlpha(codepoint) {\n    return ((codepoint >= 97 && codepoint <= 122) ||\n        (codepoint >= 65 && codepoint <= 90));\n}\nfunction _isAlphaOrSlash(codepoint) {\n    return _isAlpha(codepoint) || codepoint === 47; /* '/' */\n}\n/** See `parseTag` function docs. */\nfunction _isPotentialElementNameChar(c) {\n    return (c === 45 /* '-' */ ||\n        c === 46 /* '.' */ ||\n        (c >= 48 && c <= 57) /* 0..9 */ ||\n        c === 95 /* '_' */ ||\n        (c >= 97 && c <= 122) /** a..z */ ||\n        (c >= 65 && c <= 90) /* A..Z */ ||\n        c == 0xb7 ||\n        (c >= 0xc0 && c <= 0xd6) ||\n        (c >= 0xd8 && c <= 0xf6) ||\n        (c >= 0xf8 && c <= 0x37d) ||\n        (c >= 0x37f && c <= 0x1fff) ||\n        (c >= 0x200c && c <= 0x200d) ||\n        (c >= 0x203f && c <= 0x2040) ||\n        (c >= 0x2070 && c <= 0x218f) ||\n        (c >= 0x2c00 && c <= 0x2fef) ||\n        (c >= 0x3001 && c <= 0xd7ff) ||\n        (c >= 0xf900 && c <= 0xfdcf) ||\n        (c >= 0xfdf0 && c <= 0xfffd) ||\n        (c >= 0x10000 && c <= 0xeffff));\n}\n/**\n * Code point equivalent of regex `\\p{White_Space}`.\n * From: https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n */\nfunction _isWhiteSpace(c) {\n    return ((c >= 0x0009 && c <= 0x000d) ||\n        c === 0x0020 ||\n        c === 0x0085 ||\n        (c >= 0x200e && c <= 0x200f) ||\n        c === 0x2028 ||\n        c === 0x2029);\n}\n/**\n * Code point equivalent of regex `\\p{Pattern_Syntax}`.\n * See https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n */\nfunction _isPatternSyntax(c) {\n    return ((c >= 0x0021 && c <= 0x0023) ||\n        c === 0x0024 ||\n        (c >= 0x0025 && c <= 0x0027) ||\n        c === 0x0028 ||\n        c === 0x0029 ||\n        c === 0x002a ||\n        c === 0x002b ||\n        c === 0x002c ||\n        c === 0x002d ||\n        (c >= 0x002e && c <= 0x002f) ||\n        (c >= 0x003a && c <= 0x003b) ||\n        (c >= 0x003c && c <= 0x003e) ||\n        (c >= 0x003f && c <= 0x0040) ||\n        c === 0x005b ||\n        c === 0x005c ||\n        c === 0x005d ||\n        c === 0x005e ||\n        c === 0x0060 ||\n        c === 0x007b ||\n        c === 0x007c ||\n        c === 0x007d ||\n        c === 0x007e ||\n        c === 0x00a1 ||\n        (c >= 0x00a2 && c <= 0x00a5) ||\n        c === 0x00a6 ||\n        c === 0x00a7 ||\n        c === 0x00a9 ||\n        c === 0x00ab ||\n        c === 0x00ac ||\n        c === 0x00ae ||\n        c === 0x00b0 ||\n        c === 0x00b1 ||\n        c === 0x00b6 ||\n        c === 0x00bb ||\n        c === 0x00bf ||\n        c === 0x00d7 ||\n        c === 0x00f7 ||\n        (c >= 0x2010 && c <= 0x2015) ||\n        (c >= 0x2016 && c <= 0x2017) ||\n        c === 0x2018 ||\n        c === 0x2019 ||\n        c === 0x201a ||\n        (c >= 0x201b && c <= 0x201c) ||\n        c === 0x201d ||\n        c === 0x201e ||\n        c === 0x201f ||\n        (c >= 0x2020 && c <= 0x2027) ||\n        (c >= 0x2030 && c <= 0x2038) ||\n        c === 0x2039 ||\n        c === 0x203a ||\n        (c >= 0x203b && c <= 0x203e) ||\n        (c >= 0x2041 && c <= 0x2043) ||\n        c === 0x2044 ||\n        c === 0x2045 ||\n        c === 0x2046 ||\n        (c >= 0x2047 && c <= 0x2051) ||\n        c === 0x2052 ||\n        c === 0x2053 ||\n        (c >= 0x2055 && c <= 0x205e) ||\n        (c >= 0x2190 && c <= 0x2194) ||\n        (c >= 0x2195 && c <= 0x2199) ||\n        (c >= 0x219a && c <= 0x219b) ||\n        (c >= 0x219c && c <= 0x219f) ||\n        c === 0x21a0 ||\n        (c >= 0x21a1 && c <= 0x21a2) ||\n        c === 0x21a3 ||\n        (c >= 0x21a4 && c <= 0x21a5) ||\n        c === 0x21a6 ||\n        (c >= 0x21a7 && c <= 0x21ad) ||\n        c === 0x21ae ||\n        (c >= 0x21af && c <= 0x21cd) ||\n        (c >= 0x21ce && c <= 0x21cf) ||\n        (c >= 0x21d0 && c <= 0x21d1) ||\n        c === 0x21d2 ||\n        c === 0x21d3 ||\n        c === 0x21d4 ||\n        (c >= 0x21d5 && c <= 0x21f3) ||\n        (c >= 0x21f4 && c <= 0x22ff) ||\n        (c >= 0x2300 && c <= 0x2307) ||\n        c === 0x2308 ||\n        c === 0x2309 ||\n        c === 0x230a ||\n        c === 0x230b ||\n        (c >= 0x230c && c <= 0x231f) ||\n        (c >= 0x2320 && c <= 0x2321) ||\n        (c >= 0x2322 && c <= 0x2328) ||\n        c === 0x2329 ||\n        c === 0x232a ||\n        (c >= 0x232b && c <= 0x237b) ||\n        c === 0x237c ||\n        (c >= 0x237d && c <= 0x239a) ||\n        (c >= 0x239b && c <= 0x23b3) ||\n        (c >= 0x23b4 && c <= 0x23db) ||\n        (c >= 0x23dc && c <= 0x23e1) ||\n        (c >= 0x23e2 && c <= 0x2426) ||\n        (c >= 0x2427 && c <= 0x243f) ||\n        (c >= 0x2440 && c <= 0x244a) ||\n        (c >= 0x244b && c <= 0x245f) ||\n        (c >= 0x2500 && c <= 0x25b6) ||\n        c === 0x25b7 ||\n        (c >= 0x25b8 && c <= 0x25c0) ||\n        c === 0x25c1 ||\n        (c >= 0x25c2 && c <= 0x25f7) ||\n        (c >= 0x25f8 && c <= 0x25ff) ||\n        (c >= 0x2600 && c <= 0x266e) ||\n        c === 0x266f ||\n        (c >= 0x2670 && c <= 0x2767) ||\n        c === 0x2768 ||\n        c === 0x2769 ||\n        c === 0x276a ||\n        c === 0x276b ||\n        c === 0x276c ||\n        c === 0x276d ||\n        c === 0x276e ||\n        c === 0x276f ||\n        c === 0x2770 ||\n        c === 0x2771 ||\n        c === 0x2772 ||\n        c === 0x2773 ||\n        c === 0x2774 ||\n        c === 0x2775 ||\n        (c >= 0x2794 && c <= 0x27bf) ||\n        (c >= 0x27c0 && c <= 0x27c4) ||\n        c === 0x27c5 ||\n        c === 0x27c6 ||\n        (c >= 0x27c7 && c <= 0x27e5) ||\n        c === 0x27e6 ||\n        c === 0x27e7 ||\n        c === 0x27e8 ||\n        c === 0x27e9 ||\n        c === 0x27ea ||\n        c === 0x27eb ||\n        c === 0x27ec ||\n        c === 0x27ed ||\n        c === 0x27ee ||\n        c === 0x27ef ||\n        (c >= 0x27f0 && c <= 0x27ff) ||\n        (c >= 0x2800 && c <= 0x28ff) ||\n        (c >= 0x2900 && c <= 0x2982) ||\n        c === 0x2983 ||\n        c === 0x2984 ||\n        c === 0x2985 ||\n        c === 0x2986 ||\n        c === 0x2987 ||\n        c === 0x2988 ||\n        c === 0x2989 ||\n        c === 0x298a ||\n        c === 0x298b ||\n        c === 0x298c ||\n        c === 0x298d ||\n        c === 0x298e ||\n        c === 0x298f ||\n        c === 0x2990 ||\n        c === 0x2991 ||\n        c === 0x2992 ||\n        c === 0x2993 ||\n        c === 0x2994 ||\n        c === 0x2995 ||\n        c === 0x2996 ||\n        c === 0x2997 ||\n        c === 0x2998 ||\n        (c >= 0x2999 && c <= 0x29d7) ||\n        c === 0x29d8 ||\n        c === 0x29d9 ||\n        c === 0x29da ||\n        c === 0x29db ||\n        (c >= 0x29dc && c <= 0x29fb) ||\n        c === 0x29fc ||\n        c === 0x29fd ||\n        (c >= 0x29fe && c <= 0x2aff) ||\n        (c >= 0x2b00 && c <= 0x2b2f) ||\n        (c >= 0x2b30 && c <= 0x2b44) ||\n        (c >= 0x2b45 && c <= 0x2b46) ||\n        (c >= 0x2b47 && c <= 0x2b4c) ||\n        (c >= 0x2b4d && c <= 0x2b73) ||\n        (c >= 0x2b74 && c <= 0x2b75) ||\n        (c >= 0x2b76 && c <= 0x2b95) ||\n        c === 0x2b96 ||\n        (c >= 0x2b97 && c <= 0x2bff) ||\n        (c >= 0x2e00 && c <= 0x2e01) ||\n        c === 0x2e02 ||\n        c === 0x2e03 ||\n        c === 0x2e04 ||\n        c === 0x2e05 ||\n        (c >= 0x2e06 && c <= 0x2e08) ||\n        c === 0x2e09 ||\n        c === 0x2e0a ||\n        c === 0x2e0b ||\n        c === 0x2e0c ||\n        c === 0x2e0d ||\n        (c >= 0x2e0e && c <= 0x2e16) ||\n        c === 0x2e17 ||\n        (c >= 0x2e18 && c <= 0x2e19) ||\n        c === 0x2e1a ||\n        c === 0x2e1b ||\n        c === 0x2e1c ||\n        c === 0x2e1d ||\n        (c >= 0x2e1e && c <= 0x2e1f) ||\n        c === 0x2e20 ||\n        c === 0x2e21 ||\n        c === 0x2e22 ||\n        c === 0x2e23 ||\n        c === 0x2e24 ||\n        c === 0x2e25 ||\n        c === 0x2e26 ||\n        c === 0x2e27 ||\n        c === 0x2e28 ||\n        c === 0x2e29 ||\n        (c >= 0x2e2a && c <= 0x2e2e) ||\n        c === 0x2e2f ||\n        (c >= 0x2e30 && c <= 0x2e39) ||\n        (c >= 0x2e3a && c <= 0x2e3b) ||\n        (c >= 0x2e3c && c <= 0x2e3f) ||\n        c === 0x2e40 ||\n        c === 0x2e41 ||\n        c === 0x2e42 ||\n        (c >= 0x2e43 && c <= 0x2e4f) ||\n        (c >= 0x2e50 && c <= 0x2e51) ||\n        c === 0x2e52 ||\n        (c >= 0x2e53 && c <= 0x2e7f) ||\n        (c >= 0x3001 && c <= 0x3003) ||\n        c === 0x3008 ||\n        c === 0x3009 ||\n        c === 0x300a ||\n        c === 0x300b ||\n        c === 0x300c ||\n        c === 0x300d ||\n        c === 0x300e ||\n        c === 0x300f ||\n        c === 0x3010 ||\n        c === 0x3011 ||\n        (c >= 0x3012 && c <= 0x3013) ||\n        c === 0x3014 ||\n        c === 0x3015 ||\n        c === 0x3016 ||\n        c === 0x3017 ||\n        c === 0x3018 ||\n        c === 0x3019 ||\n        c === 0x301a ||\n        c === 0x301b ||\n        c === 0x301c ||\n        c === 0x301d ||\n        (c >= 0x301e && c <= 0x301f) ||\n        c === 0x3020 ||\n        c === 0x3030 ||\n        c === 0xfd3e ||\n        c === 0xfd3f ||\n        (c >= 0xfe45 && c <= 0xfe46));\n}\n","import { __assign } from \"tslib\";\nimport { ErrorKind } from './error';\nimport { Parser } from './parser';\nimport { isDateElement, isDateTimeSkeleton, isNumberElement, isNumberSkeleton, isPluralElement, isSelectElement, isTagElement, isTimeElement, } from './types';\nfunction pruneLocation(els) {\n    els.forEach(function (el) {\n        delete el.location;\n        if (isSelectElement(el) || isPluralElement(el)) {\n            for (var k in el.options) {\n                delete el.options[k].location;\n                pruneLocation(el.options[k].value);\n            }\n        }\n        else if (isNumberElement(el) && isNumberSkeleton(el.style)) {\n            delete el.style.location;\n        }\n        else if ((isDateElement(el) || isTimeElement(el)) &&\n            isDateTimeSkeleton(el.style)) {\n            delete el.style.location;\n        }\n        else if (isTagElement(el)) {\n            pruneLocation(el.children);\n        }\n    });\n}\nexport function parse(message, opts) {\n    if (opts === void 0) { opts = {}; }\n    opts = __assign({ shouldParseSkeletons: true, requiresOtherClause: true }, opts);\n    var result = new Parser(message, opts).parse();\n    if (result.err) {\n        var error = SyntaxError(ErrorKind[result.err.kind]);\n        // @ts-expect-error Assign to error object\n        error.location = result.err.location;\n        // @ts-expect-error Assign to error object\n        error.originalMessage = result.err.message;\n        throw error;\n    }\n    if (!(opts === null || opts === void 0 ? void 0 : opts.captureLocation)) {\n        pruneLocation(result.val);\n    }\n    return result.val;\n}\nexport * from './types';\n// only for testing\nexport var _Parser = Parser;\nexport { isStructurallySame } from './manipulator';\n","import { __extends } from \"tslib\";\nexport var ErrorCode;\n(function (ErrorCode) {\n    // When we have a placeholder but no value to format\n    ErrorCode[\"MISSING_VALUE\"] = \"MISSING_VALUE\";\n    // When value supplied is invalid\n    ErrorCode[\"INVALID_VALUE\"] = \"INVALID_VALUE\";\n    // When we need specific Intl API but it's not available\n    ErrorCode[\"MISSING_INTL_API\"] = \"MISSING_INTL_API\";\n})(ErrorCode || (ErrorCode = {}));\nvar FormatError = /** @class */ (function (_super) {\n    __extends(FormatError, _super);\n    function FormatError(msg, code, originalMessage) {\n        var _this = _super.call(this, msg) || this;\n        _this.code = code;\n        _this.originalMessage = originalMessage;\n        return _this;\n    }\n    FormatError.prototype.toString = function () {\n        return \"[formatjs Error: \".concat(this.code, \"] \").concat(this.message);\n    };\n    return FormatError;\n}(Error));\nexport { FormatError };\nvar InvalidValueError = /** @class */ (function (_super) {\n    __extends(InvalidValueError, _super);\n    function InvalidValueError(variableId, value, options, originalMessage) {\n        return _super.call(this, \"Invalid values for \\\"\".concat(variableId, \"\\\": \\\"\").concat(value, \"\\\". Options are \\\"\").concat(Object.keys(options).join('\", \"'), \"\\\"\"), ErrorCode.INVALID_VALUE, originalMessage) || this;\n    }\n    return InvalidValueError;\n}(FormatError));\nexport { InvalidValueError };\nvar InvalidValueTypeError = /** @class */ (function (_super) {\n    __extends(InvalidValueTypeError, _super);\n    function InvalidValueTypeError(value, type, originalMessage) {\n        return _super.call(this, \"Value for \\\"\".concat(value, \"\\\" must be of type \").concat(type), ErrorCode.INVALID_VALUE, originalMessage) || this;\n    }\n    return InvalidValueTypeError;\n}(FormatError));\nexport { InvalidValueTypeError };\nvar MissingValueError = /** @class */ (function (_super) {\n    __extends(MissingValueError, _super);\n    function MissingValueError(variableId, originalMessage) {\n        return _super.call(this, \"The intl string context variable \\\"\".concat(variableId, \"\\\" was not provided to the string \\\"\").concat(originalMessage, \"\\\"\"), ErrorCode.MISSING_VALUE, originalMessage) || this;\n    }\n    return MissingValueError;\n}(FormatError));\nexport { MissingValueError };\n","import { isArgumentElement, isDateElement, isDateTimeSkeleton, isLiteralElement, isNumberElement, isNumberSkeleton, isPluralElement, isPoundElement, isSelectElement, isTagElement, isTimeElement, } from '@formatjs/icu-messageformat-parser';\nimport { ErrorCode, FormatError, InvalidValueError, InvalidValueTypeError, MissingValueError, } from './error';\nexport var PART_TYPE;\n(function (PART_TYPE) {\n    PART_TYPE[PART_TYPE[\"literal\"] = 0] = \"literal\";\n    PART_TYPE[PART_TYPE[\"object\"] = 1] = \"object\";\n})(PART_TYPE || (PART_TYPE = {}));\nfunction mergeLiteral(parts) {\n    if (parts.length < 2) {\n        return parts;\n    }\n    return parts.reduce(function (all, part) {\n        var lastPart = all[all.length - 1];\n        if (!lastPart ||\n            lastPart.type !== PART_TYPE.literal ||\n            part.type !== PART_TYPE.literal) {\n            all.push(part);\n        }\n        else {\n            lastPart.value += part.value;\n        }\n        return all;\n    }, []);\n}\nexport function isFormatXMLElementFn(el) {\n    return typeof el === 'function';\n}\n// TODO(skeleton): add skeleton support\nexport function formatToParts(els, locales, formatters, formats, values, currentPluralValue, \n// For debugging\noriginalMessage) {\n    // Hot path for straight simple msg translations\n    if (els.length === 1 && isLiteralElement(els[0])) {\n        return [\n            {\n                type: PART_TYPE.literal,\n                value: els[0].value,\n            },\n        ];\n    }\n    var result = [];\n    for (var _i = 0, els_1 = els; _i < els_1.length; _i++) {\n        var el = els_1[_i];\n        // Exit early for string parts.\n        if (isLiteralElement(el)) {\n            result.push({\n                type: PART_TYPE.literal,\n                value: el.value,\n            });\n            continue;\n        }\n        // TODO: should this part be literal type?\n        // Replace `#` in plural rules with the actual numeric value.\n        if (isPoundElement(el)) {\n            if (typeof currentPluralValue === 'number') {\n                result.push({\n                    type: PART_TYPE.literal,\n                    value: formatters.getNumberFormat(locales).format(currentPluralValue),\n                });\n            }\n            continue;\n        }\n        var varName = el.value;\n        // Enforce that all required values are provided by the caller.\n        if (!(values && varName in values)) {\n            throw new MissingValueError(varName, originalMessage);\n        }\n        var value = values[varName];\n        if (isArgumentElement(el)) {\n            if (!value || typeof value === 'string' || typeof value === 'number') {\n                value =\n                    typeof value === 'string' || typeof value === 'number'\n                        ? String(value)\n                        : '';\n            }\n            result.push({\n                type: typeof value === 'string' ? PART_TYPE.literal : PART_TYPE.object,\n                value: value,\n            });\n            continue;\n        }\n        // Recursively format plural and select parts' option — which can be a\n        // nested pattern structure. The choosing of the option to use is\n        // abstracted-by and delegated-to the part helper object.\n        if (isDateElement(el)) {\n            var style = typeof el.style === 'string'\n                ? formats.date[el.style]\n                : isDateTimeSkeleton(el.style)\n                    ? el.style.parsedOptions\n                    : undefined;\n            result.push({\n                type: PART_TYPE.literal,\n                value: formatters\n                    .getDateTimeFormat(locales, style)\n                    .format(value),\n            });\n            continue;\n        }\n        if (isTimeElement(el)) {\n            var style = typeof el.style === 'string'\n                ? formats.time[el.style]\n                : isDateTimeSkeleton(el.style)\n                    ? el.style.parsedOptions\n                    : formats.time.medium;\n            result.push({\n                type: PART_TYPE.literal,\n                value: formatters\n                    .getDateTimeFormat(locales, style)\n                    .format(value),\n            });\n            continue;\n        }\n        if (isNumberElement(el)) {\n            var style = typeof el.style === 'string'\n                ? formats.number[el.style]\n                : isNumberSkeleton(el.style)\n                    ? el.style.parsedOptions\n                    : undefined;\n            if (style && style.scale) {\n                value =\n                    value *\n                        (style.scale || 1);\n            }\n            result.push({\n                type: PART_TYPE.literal,\n                value: formatters\n                    .getNumberFormat(locales, style)\n                    .format(value),\n            });\n            continue;\n        }\n        if (isTagElement(el)) {\n            var children = el.children, value_1 = el.value;\n            var formatFn = values[value_1];\n            if (!isFormatXMLElementFn(formatFn)) {\n                throw new InvalidValueTypeError(value_1, 'function', originalMessage);\n            }\n            var parts = formatToParts(children, locales, formatters, formats, values, currentPluralValue);\n            var chunks = formatFn(parts.map(function (p) { return p.value; }));\n            if (!Array.isArray(chunks)) {\n                chunks = [chunks];\n            }\n            result.push.apply(result, chunks.map(function (c) {\n                return {\n                    type: typeof c === 'string' ? PART_TYPE.literal : PART_TYPE.object,\n                    value: c,\n                };\n            }));\n        }\n        if (isSelectElement(el)) {\n            var opt = el.options[value] || el.options.other;\n            if (!opt) {\n                throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n            }\n            result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values));\n            continue;\n        }\n        if (isPluralElement(el)) {\n            var opt = el.options[\"=\".concat(value)];\n            if (!opt) {\n                if (!Intl.PluralRules) {\n                    throw new FormatError(\"Intl.PluralRules is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-pluralrules\\\"\\n\", ErrorCode.MISSING_INTL_API, originalMessage);\n                }\n                var rule = formatters\n                    .getPluralRules(locales, { type: el.pluralType })\n                    .select(value - (el.offset || 0));\n                opt = el.options[rule] || el.options.other;\n            }\n            if (!opt) {\n                throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n            }\n            result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values, value - (el.offset || 0)));\n            continue;\n        }\n    }\n    return mergeLiteral(result);\n}\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\nimport { __assign, __rest, __spreadArray } from \"tslib\";\nimport { memoize, strategies } from '@formatjs/fast-memoize';\nimport { parse, } from '@formatjs/icu-messageformat-parser';\nimport { formatToParts, PART_TYPE, } from './formatters';\n// -- MessageFormat --------------------------------------------------------\nfunction mergeConfig(c1, c2) {\n    if (!c2) {\n        return c1;\n    }\n    return __assign(__assign(__assign({}, (c1 || {})), (c2 || {})), Object.keys(c1).reduce(function (all, k) {\n        all[k] = __assign(__assign({}, c1[k]), (c2[k] || {}));\n        return all;\n    }, {}));\n}\nfunction mergeConfigs(defaultConfig, configs) {\n    if (!configs) {\n        return defaultConfig;\n    }\n    return Object.keys(defaultConfig).reduce(function (all, k) {\n        all[k] = mergeConfig(defaultConfig[k], configs[k]);\n        return all;\n    }, __assign({}, defaultConfig));\n}\nfunction createFastMemoizeCache(store) {\n    return {\n        create: function () {\n            return {\n                get: function (key) {\n                    return store[key];\n                },\n                set: function (key, value) {\n                    store[key] = value;\n                },\n            };\n        },\n    };\n}\nfunction createDefaultFormatters(cache) {\n    if (cache === void 0) { cache = {\n        number: {},\n        dateTime: {},\n        pluralRules: {},\n    }; }\n    return {\n        getNumberFormat: memoize(function () {\n            var _a;\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new ((_a = Intl.NumberFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.number),\n            strategy: strategies.variadic,\n        }),\n        getDateTimeFormat: memoize(function () {\n            var _a;\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new ((_a = Intl.DateTimeFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.dateTime),\n            strategy: strategies.variadic,\n        }),\n        getPluralRules: memoize(function () {\n            var _a;\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new ((_a = Intl.PluralRules).bind.apply(_a, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.pluralRules),\n            strategy: strategies.variadic,\n        }),\n    };\n}\nvar IntlMessageFormat = /** @class */ (function () {\n    function IntlMessageFormat(message, locales, overrideFormats, opts) {\n        if (locales === void 0) { locales = IntlMessageFormat.defaultLocale; }\n        var _this = this;\n        this.formatterCache = {\n            number: {},\n            dateTime: {},\n            pluralRules: {},\n        };\n        this.format = function (values) {\n            var parts = _this.formatToParts(values);\n            // Hot path for straight simple msg translations\n            if (parts.length === 1) {\n                return parts[0].value;\n            }\n            var result = parts.reduce(function (all, part) {\n                if (!all.length ||\n                    part.type !== PART_TYPE.literal ||\n                    typeof all[all.length - 1] !== 'string') {\n                    all.push(part.value);\n                }\n                else {\n                    all[all.length - 1] += part.value;\n                }\n                return all;\n            }, []);\n            if (result.length <= 1) {\n                return result[0] || '';\n            }\n            return result;\n        };\n        this.formatToParts = function (values) {\n            return formatToParts(_this.ast, _this.locales, _this.formatters, _this.formats, values, undefined, _this.message);\n        };\n        this.resolvedOptions = function () {\n            var _a;\n            return ({\n                locale: ((_a = _this.resolvedLocale) === null || _a === void 0 ? void 0 : _a.toString()) ||\n                    Intl.NumberFormat.supportedLocalesOf(_this.locales)[0],\n            });\n        };\n        this.getAst = function () { return _this.ast; };\n        // Defined first because it's used to build the format pattern.\n        this.locales = locales;\n        this.resolvedLocale = IntlMessageFormat.resolveLocale(locales);\n        if (typeof message === 'string') {\n            this.message = message;\n            if (!IntlMessageFormat.__parse) {\n                throw new TypeError('IntlMessageFormat.__parse must be set to process `message` of type `string`');\n            }\n            var _a = opts || {}, formatters = _a.formatters, parseOpts = __rest(_a, [\"formatters\"]);\n            // Parse string messages into an AST.\n            this.ast = IntlMessageFormat.__parse(message, __assign(__assign({}, parseOpts), { locale: this.resolvedLocale }));\n        }\n        else {\n            this.ast = message;\n        }\n        if (!Array.isArray(this.ast)) {\n            throw new TypeError('A message must be provided as a String or AST.');\n        }\n        // Creates a new object with the specified `formats` merged with the default\n        // formats.\n        this.formats = mergeConfigs(IntlMessageFormat.formats, overrideFormats);\n        this.formatters =\n            (opts && opts.formatters) || createDefaultFormatters(this.formatterCache);\n    }\n    Object.defineProperty(IntlMessageFormat, \"defaultLocale\", {\n        get: function () {\n            if (!IntlMessageFormat.memoizedDefaultLocale) {\n                IntlMessageFormat.memoizedDefaultLocale =\n                    new Intl.NumberFormat().resolvedOptions().locale;\n            }\n            return IntlMessageFormat.memoizedDefaultLocale;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    IntlMessageFormat.memoizedDefaultLocale = null;\n    IntlMessageFormat.resolveLocale = function (locales) {\n        if (typeof Intl.Locale === 'undefined') {\n            return;\n        }\n        var supportedLocales = Intl.NumberFormat.supportedLocalesOf(locales);\n        if (supportedLocales.length > 0) {\n            return new Intl.Locale(supportedLocales[0]);\n        }\n        return new Intl.Locale(typeof locales === 'string' ? locales : locales[0]);\n    };\n    IntlMessageFormat.__parse = parse;\n    // Default format options used as the prototype of the `formats` provided to the\n    // constructor. These are used when constructing the internal Intl.NumberFormat\n    // and Intl.DateTimeFormat instances.\n    IntlMessageFormat.formats = {\n        number: {\n            integer: {\n                maximumFractionDigits: 0,\n            },\n            currency: {\n                style: 'currency',\n            },\n            percent: {\n                style: 'percent',\n            },\n        },\n        date: {\n            short: {\n                month: 'numeric',\n                day: 'numeric',\n                year: '2-digit',\n            },\n            medium: {\n                month: 'short',\n                day: 'numeric',\n                year: 'numeric',\n            },\n            long: {\n                month: 'long',\n                day: 'numeric',\n                year: 'numeric',\n            },\n            full: {\n                weekday: 'long',\n                month: 'long',\n                day: 'numeric',\n                year: 'numeric',\n            },\n        },\n        time: {\n            short: {\n                hour: 'numeric',\n                minute: 'numeric',\n            },\n            medium: {\n                hour: 'numeric',\n                minute: 'numeric',\n                second: 'numeric',\n            },\n            long: {\n                hour: 'numeric',\n                minute: 'numeric',\n                second: 'numeric',\n                timeZoneName: 'short',\n            },\n            full: {\n                hour: 'numeric',\n                minute: 'numeric',\n                second: 'numeric',\n                timeZoneName: 'short',\n            },\n        },\n    };\n    return IntlMessageFormat;\n}());\nexport { IntlMessageFormat };\n","import { writable, derived } from 'svelte/store';\nimport deepmerge from 'deepmerge';\nimport { IntlMessageFormat } from 'intl-messageformat';\n\nfunction delve(obj, fullKey) {\n  if (fullKey == null)\n    return void 0;\n  if (fullKey in obj) {\n    return obj[fullKey];\n  }\n  const keys = fullKey.split(\".\");\n  let result = obj;\n  for (let p = 0; p < keys.length; p++) {\n    if (typeof result === \"object\") {\n      if (p > 0) {\n        const partialKey = keys.slice(p, keys.length).join(\".\");\n        if (partialKey in result) {\n          result = result[partialKey];\n          break;\n        }\n      }\n      result = result[keys[p]];\n    } else {\n      result = void 0;\n    }\n  }\n  return result;\n}\n\nconst lookupCache = {};\nconst addToCache = (path, locale, message) => {\n  if (!message)\n    return message;\n  if (!(locale in lookupCache))\n    lookupCache[locale] = {};\n  if (!(path in lookupCache[locale]))\n    lookupCache[locale][path] = message;\n  return message;\n};\nconst lookup = (path, refLocale) => {\n  if (refLocale == null)\n    return void 0;\n  if (refLocale in lookupCache && path in lookupCache[refLocale]) {\n    return lookupCache[refLocale][path];\n  }\n  const locales = getPossibleLocales(refLocale);\n  for (let i = 0; i < locales.length; i++) {\n    const locale = locales[i];\n    const message = getMessageFromDictionary(locale, path);\n    if (message) {\n      return addToCache(path, refLocale, message);\n    }\n  }\n  return void 0;\n};\n\nlet dictionary;\nconst $dictionary = writable({});\nfunction getLocaleDictionary(locale) {\n  return dictionary[locale] || null;\n}\nfunction hasLocaleDictionary(locale) {\n  return locale in dictionary;\n}\nfunction getMessageFromDictionary(locale, id) {\n  if (!hasLocaleDictionary(locale)) {\n    return null;\n  }\n  const localeDictionary = getLocaleDictionary(locale);\n  const match = delve(localeDictionary, id);\n  return match;\n}\nfunction getClosestAvailableLocale(refLocale) {\n  if (refLocale == null)\n    return void 0;\n  const relatedLocales = getPossibleLocales(refLocale);\n  for (let i = 0; i < relatedLocales.length; i++) {\n    const locale = relatedLocales[i];\n    if (hasLocaleDictionary(locale)) {\n      return locale;\n    }\n  }\n  return void 0;\n}\nfunction addMessages(locale, ...partials) {\n  delete lookupCache[locale];\n  $dictionary.update((d) => {\n    d[locale] = deepmerge.all([d[locale] || {}, ...partials]);\n    return d;\n  });\n}\nconst $locales = derived(\n  [$dictionary],\n  ([dictionary2]) => Object.keys(dictionary2)\n);\n$dictionary.subscribe((newDictionary) => dictionary = newDictionary);\n\nconst queue = {};\nfunction createLocaleQueue(locale) {\n  queue[locale] = /* @__PURE__ */ new Set();\n}\nfunction removeLoaderFromQueue(locale, loader) {\n  queue[locale].delete(loader);\n  if (queue[locale].size === 0) {\n    delete queue[locale];\n  }\n}\nfunction getLocaleQueue(locale) {\n  return queue[locale];\n}\nfunction getLocalesQueues(locale) {\n  return getPossibleLocales(locale).map((localeItem) => {\n    const localeQueue = getLocaleQueue(localeItem);\n    return [localeItem, localeQueue ? [...localeQueue] : []];\n  }).filter(([, localeQueue]) => localeQueue.length > 0);\n}\nfunction hasLocaleQueue(locale) {\n  if (locale == null)\n    return false;\n  return getPossibleLocales(locale).some(\n    (localeQueue) => {\n      var _a;\n      return (_a = getLocaleQueue(localeQueue)) == null ? void 0 : _a.size;\n    }\n  );\n}\nfunction loadLocaleQueue(locale, localeQueue) {\n  const allLoadersPromise = Promise.all(\n    localeQueue.map((loader) => {\n      removeLoaderFromQueue(locale, loader);\n      return loader().then((partial) => partial.default || partial);\n    })\n  );\n  return allLoadersPromise.then((partials) => addMessages(locale, ...partials));\n}\nconst activeFlushes = {};\nfunction flush(locale) {\n  if (!hasLocaleQueue(locale)) {\n    if (locale in activeFlushes) {\n      return activeFlushes[locale];\n    }\n    return Promise.resolve();\n  }\n  const queues = getLocalesQueues(locale);\n  activeFlushes[locale] = Promise.all(\n    queues.map(\n      ([localeName, localeQueue]) => loadLocaleQueue(localeName, localeQueue)\n    )\n  ).then(() => {\n    if (hasLocaleQueue(locale)) {\n      return flush(locale);\n    }\n    delete activeFlushes[locale];\n  });\n  return activeFlushes[locale];\n}\nfunction registerLocaleLoader(locale, loader) {\n  if (!getLocaleQueue(locale))\n    createLocaleQueue(locale);\n  const localeQueue = getLocaleQueue(locale);\n  if (getLocaleQueue(locale).has(loader))\n    return;\n  if (!hasLocaleDictionary(locale)) {\n    $dictionary.update((d) => {\n      d[locale] = {};\n      return d;\n    });\n  }\n  localeQueue.add(loader);\n}\n\nvar __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$2 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$2 = Object.prototype.propertyIsEnumerable;\nvar __objRest$1 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$2.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$2)\n    for (var prop of __getOwnPropSymbols$2(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$2.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nconst defaultFormats = {\n  number: {\n    scientific: { notation: \"scientific\" },\n    engineering: { notation: \"engineering\" },\n    compactLong: { notation: \"compact\", compactDisplay: \"long\" },\n    compactShort: { notation: \"compact\", compactDisplay: \"short\" }\n  },\n  date: {\n    short: { month: \"numeric\", day: \"numeric\", year: \"2-digit\" },\n    medium: { month: \"short\", day: \"numeric\", year: \"numeric\" },\n    long: { month: \"long\", day: \"numeric\", year: \"numeric\" },\n    full: { weekday: \"long\", month: \"long\", day: \"numeric\", year: \"numeric\" }\n  },\n  time: {\n    short: { hour: \"numeric\", minute: \"numeric\" },\n    medium: { hour: \"numeric\", minute: \"numeric\", second: \"numeric\" },\n    long: {\n      hour: \"numeric\",\n      minute: \"numeric\",\n      second: \"numeric\",\n      timeZoneName: \"short\"\n    },\n    full: {\n      hour: \"numeric\",\n      minute: \"numeric\",\n      second: \"numeric\",\n      timeZoneName: \"short\"\n    }\n  }\n};\nfunction defaultMissingKeyHandler({ locale, id }) {\n  console.warn(\n    `[svelte-i18n] The message \"${id}\" was not found in \"${getPossibleLocales(\n      locale\n    ).join('\", \"')}\".${hasLocaleQueue(getCurrentLocale()) ? `\n\nNote: there are at least one loader still registered to this locale that wasn't executed.` : \"\"}`\n  );\n}\nconst defaultOptions = {\n  fallbackLocale: null,\n  loadingDelay: 200,\n  formats: defaultFormats,\n  warnOnMissingMessages: true,\n  handleMissingMessage: void 0,\n  ignoreTag: true\n};\nconst options = defaultOptions;\nfunction getOptions() {\n  return options;\n}\nfunction init(opts) {\n  const _a = opts, { formats } = _a, rest = __objRest$1(_a, [\"formats\"]);\n  let initialLocale = opts.fallbackLocale;\n  if (opts.initialLocale) {\n    try {\n      if (IntlMessageFormat.resolveLocale(opts.initialLocale)) {\n        initialLocale = opts.initialLocale;\n      }\n    } catch (e) {\n      console.warn(\n        `[svelte-i18n] The initial locale \"${opts.initialLocale}\" is not a valid locale.`\n      );\n    }\n  }\n  if (rest.warnOnMissingMessages) {\n    delete rest.warnOnMissingMessages;\n    if (rest.handleMissingMessage == null) {\n      rest.handleMissingMessage = defaultMissingKeyHandler;\n    } else {\n      console.warn(\n        '[svelte-i18n] The \"warnOnMissingMessages\" option is deprecated. Please use the \"handleMissingMessage\" option instead.'\n      );\n    }\n  }\n  Object.assign(options, rest, { initialLocale });\n  if (formats) {\n    if (\"number\" in formats) {\n      Object.assign(options.formats.number, formats.number);\n    }\n    if (\"date\" in formats) {\n      Object.assign(options.formats.date, formats.date);\n    }\n    if (\"time\" in formats) {\n      Object.assign(options.formats.time, formats.time);\n    }\n  }\n  return $locale.set(initialLocale);\n}\n\nconst $isLoading = writable(false);\n\nvar __defProp$1 = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$1 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$1 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$1 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$1.call(b, prop))\n      __defNormalProp$1(a, prop, b[prop]);\n  if (__getOwnPropSymbols$1)\n    for (var prop of __getOwnPropSymbols$1(b)) {\n      if (__propIsEnum$1.call(b, prop))\n        __defNormalProp$1(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nlet current;\nconst internalLocale = writable(null);\nfunction getSubLocales(refLocale) {\n  return refLocale.split(\"-\").map((_, i, arr) => arr.slice(0, i + 1).join(\"-\")).reverse();\n}\nfunction getPossibleLocales(refLocale, fallbackLocale = getOptions().fallbackLocale) {\n  const locales = getSubLocales(refLocale);\n  if (fallbackLocale) {\n    return [.../* @__PURE__ */ new Set([...locales, ...getSubLocales(fallbackLocale)])];\n  }\n  return locales;\n}\nfunction getCurrentLocale() {\n  return current != null ? current : void 0;\n}\ninternalLocale.subscribe((newLocale) => {\n  current = newLocale != null ? newLocale : void 0;\n  if (typeof window !== \"undefined\" && newLocale != null) {\n    document.documentElement.setAttribute(\"lang\", newLocale);\n  }\n});\nconst set = (newLocale) => {\n  if (newLocale && getClosestAvailableLocale(newLocale) && hasLocaleQueue(newLocale)) {\n    const { loadingDelay } = getOptions();\n    let loadingTimer;\n    if (typeof window !== \"undefined\" && getCurrentLocale() != null && loadingDelay) {\n      loadingTimer = window.setTimeout(\n        () => $isLoading.set(true),\n        loadingDelay\n      );\n    } else {\n      $isLoading.set(true);\n    }\n    return flush(newLocale).then(() => {\n      internalLocale.set(newLocale);\n    }).finally(() => {\n      clearTimeout(loadingTimer);\n      $isLoading.set(false);\n    });\n  }\n  return internalLocale.set(newLocale);\n};\nconst $locale = __spreadProps(__spreadValues$1({}, internalLocale), {\n  set\n});\n\nconst getFromQueryString = (queryString, key) => {\n  const keyVal = queryString.split(\"&\").find((i) => i.indexOf(`${key}=`) === 0);\n  if (keyVal) {\n    return keyVal.split(\"=\").pop();\n  }\n  return null;\n};\nconst getFirstMatch = (base, pattern) => {\n  const match = pattern.exec(base);\n  if (!match)\n    return null;\n  return match[1] || null;\n};\nconst getLocaleFromHostname = (hostname) => {\n  if (typeof window === \"undefined\")\n    return null;\n  return getFirstMatch(window.location.hostname, hostname);\n};\nconst getLocaleFromPathname = (pathname) => {\n  if (typeof window === \"undefined\")\n    return null;\n  return getFirstMatch(window.location.pathname, pathname);\n};\nconst getLocaleFromNavigator = () => {\n  if (typeof window === \"undefined\")\n    return null;\n  return window.navigator.language || window.navigator.languages[0];\n};\nconst getLocaleFromQueryString = (search) => {\n  if (typeof window === \"undefined\")\n    return null;\n  return getFromQueryString(window.location.search.substr(1), search);\n};\nconst getLocaleFromHash = (hash) => {\n  if (typeof window === \"undefined\")\n    return null;\n  return getFromQueryString(window.location.hash.substr(1), hash);\n};\n\nconst monadicMemoize = (fn) => {\n  const cache = /* @__PURE__ */ Object.create(null);\n  const memoizedFn = (arg) => {\n    const cacheKey = JSON.stringify(arg);\n    if (cacheKey in cache) {\n      return cache[cacheKey];\n    }\n    return cache[cacheKey] = fn(arg);\n  };\n  return memoizedFn;\n};\n\nvar __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp.call(b, prop))\n      __defNormalProp(a, prop, b[prop]);\n  if (__getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(b)) {\n      if (__propIsEnum.call(b, prop))\n        __defNormalProp(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __objRest = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nconst getIntlFormatterOptions = (type, name) => {\n  const { formats } = getOptions();\n  if (type in formats && name in formats[type]) {\n    return formats[type][name];\n  }\n  throw new Error(`[svelte-i18n] Unknown \"${name}\" ${type} format.`);\n};\nconst createNumberFormatter = monadicMemoize(\n  (_a) => {\n    var _b = _a, { locale, format } = _b, options = __objRest(_b, [\"locale\", \"format\"]);\n    if (locale == null) {\n      throw new Error('[svelte-i18n] A \"locale\" must be set to format numbers');\n    }\n    if (format) {\n      options = getIntlFormatterOptions(\"number\", format);\n    }\n    return new Intl.NumberFormat(locale, options);\n  }\n);\nconst createDateFormatter = monadicMemoize(\n  (_c) => {\n    var _d = _c, { locale, format } = _d, options = __objRest(_d, [\"locale\", \"format\"]);\n    if (locale == null) {\n      throw new Error('[svelte-i18n] A \"locale\" must be set to format dates');\n    }\n    if (format) {\n      options = getIntlFormatterOptions(\"date\", format);\n    } else if (Object.keys(options).length === 0) {\n      options = getIntlFormatterOptions(\"date\", \"short\");\n    }\n    return new Intl.DateTimeFormat(locale, options);\n  }\n);\nconst createTimeFormatter = monadicMemoize(\n  (_e) => {\n    var _f = _e, { locale, format } = _f, options = __objRest(_f, [\"locale\", \"format\"]);\n    if (locale == null) {\n      throw new Error(\n        '[svelte-i18n] A \"locale\" must be set to format time values'\n      );\n    }\n    if (format) {\n      options = getIntlFormatterOptions(\"time\", format);\n    } else if (Object.keys(options).length === 0) {\n      options = getIntlFormatterOptions(\"time\", \"short\");\n    }\n    return new Intl.DateTimeFormat(locale, options);\n  }\n);\nconst getNumberFormatter = (_g = {}) => {\n  var _h = _g, {\n    locale = getCurrentLocale()\n  } = _h, args = __objRest(_h, [\n    \"locale\"\n  ]);\n  return createNumberFormatter(__spreadValues({ locale }, args));\n};\nconst getDateFormatter = (_i = {}) => {\n  var _j = _i, {\n    locale = getCurrentLocale()\n  } = _j, args = __objRest(_j, [\n    \"locale\"\n  ]);\n  return createDateFormatter(__spreadValues({ locale }, args));\n};\nconst getTimeFormatter = (_k = {}) => {\n  var _l = _k, {\n    locale = getCurrentLocale()\n  } = _l, args = __objRest(_l, [\n    \"locale\"\n  ]);\n  return createTimeFormatter(__spreadValues({ locale }, args));\n};\nconst getMessageFormatter = monadicMemoize(\n  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n  (message, locale = getCurrentLocale()) => new IntlMessageFormat(message, locale, getOptions().formats, {\n    ignoreTag: getOptions().ignoreTag\n  })\n);\n\nconst formatMessage = (id, options = {}) => {\n  var _a, _b, _c, _d;\n  let messageObj = options;\n  if (typeof id === \"object\") {\n    messageObj = id;\n    id = messageObj.id;\n  }\n  const {\n    values,\n    locale = getCurrentLocale(),\n    default: defaultValue\n  } = messageObj;\n  if (locale == null) {\n    throw new Error(\n      \"[svelte-i18n] Cannot format a message without first setting the initial locale.\"\n    );\n  }\n  let message = lookup(id, locale);\n  if (!message) {\n    message = (_d = (_c = (_b = (_a = getOptions()).handleMissingMessage) == null ? void 0 : _b.call(_a, { locale, id, defaultValue })) != null ? _c : defaultValue) != null ? _d : id;\n  } else if (typeof message !== \"string\") {\n    console.warn(\n      `[svelte-i18n] Message with id \"${id}\" must be of type \"string\", found: \"${typeof message}\". Gettin its value through the \"$format\" method is deprecated; use the \"json\" method instead.`\n    );\n    return message;\n  }\n  if (!values) {\n    return message;\n  }\n  let result = message;\n  try {\n    result = getMessageFormatter(message, locale).format(values);\n  } catch (e) {\n    if (e instanceof Error) {\n      console.warn(\n        `[svelte-i18n] Message \"${id}\" has syntax error:`,\n        e.message\n      );\n    }\n  }\n  return result;\n};\nconst formatTime = (t, options) => {\n  return getTimeFormatter(options).format(t);\n};\nconst formatDate = (d, options) => {\n  return getDateFormatter(options).format(d);\n};\nconst formatNumber = (n, options) => {\n  return getNumberFormatter(options).format(n);\n};\nconst getJSON = (id, locale = getCurrentLocale()) => {\n  return lookup(id, locale);\n};\nconst $format = derived([$locale, $dictionary], () => formatMessage);\nconst $formatTime = derived([$locale], () => formatTime);\nconst $formatDate = derived([$locale], () => formatDate);\nconst $formatNumber = derived([$locale], () => formatNumber);\nconst $getJSON = derived([$locale, $dictionary], () => getJSON);\n\nfunction unwrapFunctionStore(store) {\n  let localReference;\n  const cancel = store.subscribe((value) => localReference = value);\n  const fn = (...args) => localReference(...args);\n  fn.freeze = cancel;\n  return fn;\n}\n\nfunction defineMessages(i) {\n  return i;\n}\nfunction waitLocale(locale) {\n  return flush(locale || getCurrentLocale() || getOptions().initialLocale);\n}\n\nexport { $format as _, addMessages, $formatDate as date, defineMessages, $dictionary as dictionary, $format as format, getDateFormatter, getLocaleFromHash, getLocaleFromHostname, getLocaleFromNavigator, getLocaleFromPathname, getLocaleFromQueryString, getMessageFormatter, getNumberFormatter, getTimeFormatter, init, $isLoading as isLoading, $getJSON as json, $locale as locale, $locales as locales, $formatNumber as number, registerLocaleLoader as register, $format as t, $formatTime as time, unwrapFunctionStore, waitLocale };\n","/**\n * Check if the given input is a simple object.\n * @param {any} input - Input, probably an object.\n * @returns {boolean} Result.\n */\nconst isObject = (input) => input !== null && typeof input === 'object' && !Array.isArray(input);\n/**\n * Convert a Proxy to the original object. The built-in `structuredClone()` method throws with a\n * Proxy, so this can be used instead. The name of `toRaw` is derived from the equivalent in Vue.\n * @param {object} obj - Proxified object.\n * @returns {object} Deproxified object.\n */\nconst toRaw = (obj) => JSON.parse(JSON.stringify(obj));\n\nexport { isObject, toRaw };\n","const ALIAS = Symbol.for('yaml.alias');\nconst DOC = Symbol.for('yaml.document');\nconst MAP = Symbol.for('yaml.map');\nconst PAIR = Symbol.for('yaml.pair');\nconst SCALAR = Symbol.for('yaml.scalar');\nconst SEQ = Symbol.for('yaml.seq');\nconst NODE_TYPE = Symbol.for('yaml.node.type');\nconst isAlias = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === ALIAS;\nconst isDocument = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === DOC;\nconst isMap = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === MAP;\nconst isPair = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === PAIR;\nconst isScalar = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SCALAR;\nconst isSeq = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SEQ;\nfunction isCollection(node) {\n    if (node && typeof node === 'object')\n        switch (node[NODE_TYPE]) {\n            case MAP:\n            case SEQ:\n                return true;\n        }\n    return false;\n}\nfunction isNode(node) {\n    if (node && typeof node === 'object')\n        switch (node[NODE_TYPE]) {\n            case ALIAS:\n            case MAP:\n            case SCALAR:\n            case SEQ:\n                return true;\n        }\n    return false;\n}\nconst hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor;\n\nexport { ALIAS, DOC, MAP, NODE_TYPE, PAIR, SCALAR, SEQ, hasAnchor, isAlias, isCollection, isDocument, isMap, isNode, isPair, isScalar, isSeq };\n","import { isDocument, isNode, isPair, isCollection, isMap, isSeq, isScalar, isAlias } from './nodes/identity.js';\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove node');\n/**\n * Apply a visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n *   - `key`: For sequence values and map `Pair`, the node's index in the\n *     collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n *     `null` for the root node.\n *   - `node`: The current node.\n *   - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n *   - `undefined` (default): Do nothing and continue\n *   - `visit.SKIP`: Do not visit the children of this node, continue with next\n *     sibling\n *   - `visit.BREAK`: Terminate traversal completely\n *   - `visit.REMOVE`: Remove the current node, then continue with the next one\n *   - `Node`: Replace the current node, then continue by visiting it\n *   - `number`: While iterating the items of a sequence or map, set the index\n *     of the next step. This is useful especially if the index of the current\n *     node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nfunction visit(node, visitor) {\n    const visitor_ = initVisitor(visitor);\n    if (isDocument(node)) {\n        const cd = visit_(null, node.contents, visitor_, Object.freeze([node]));\n        if (cd === REMOVE)\n            node.contents = null;\n    }\n    else\n        visit_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisit.SKIP = SKIP;\n/** Remove the current node */\nvisit.REMOVE = REMOVE;\nfunction visit_(key, node, visitor, path) {\n    const ctrl = callVisitor(key, node, visitor, path);\n    if (isNode(ctrl) || isPair(ctrl)) {\n        replaceNode(key, path, ctrl);\n        return visit_(key, ctrl, visitor, path);\n    }\n    if (typeof ctrl !== 'symbol') {\n        if (isCollection(node)) {\n            path = Object.freeze(path.concat(node));\n            for (let i = 0; i < node.items.length; ++i) {\n                const ci = visit_(i, node.items[i], visitor, path);\n                if (typeof ci === 'number')\n                    i = ci - 1;\n                else if (ci === BREAK)\n                    return BREAK;\n                else if (ci === REMOVE) {\n                    node.items.splice(i, 1);\n                    i -= 1;\n                }\n            }\n        }\n        else if (isPair(node)) {\n            path = Object.freeze(path.concat(node));\n            const ck = visit_('key', node.key, visitor, path);\n            if (ck === BREAK)\n                return BREAK;\n            else if (ck === REMOVE)\n                node.key = null;\n            const cv = visit_('value', node.value, visitor, path);\n            if (cv === BREAK)\n                return BREAK;\n            else if (cv === REMOVE)\n                node.value = null;\n        }\n    }\n    return ctrl;\n}\n/**\n * Apply an async visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n *   - `key`: For sequence values and map `Pair`, the node's index in the\n *     collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n *     `null` for the root node.\n *   - `node`: The current node.\n *   - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n *   - `Promise`: Must resolve to one of the following values\n *   - `undefined` (default): Do nothing and continue\n *   - `visit.SKIP`: Do not visit the children of this node, continue with next\n *     sibling\n *   - `visit.BREAK`: Terminate traversal completely\n *   - `visit.REMOVE`: Remove the current node, then continue with the next one\n *   - `Node`: Replace the current node, then continue by visiting it\n *   - `number`: While iterating the items of a sequence or map, set the index\n *     of the next step. This is useful especially if the index of the current\n *     node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nasync function visitAsync(node, visitor) {\n    const visitor_ = initVisitor(visitor);\n    if (isDocument(node)) {\n        const cd = await visitAsync_(null, node.contents, visitor_, Object.freeze([node]));\n        if (cd === REMOVE)\n            node.contents = null;\n    }\n    else\n        await visitAsync_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisitAsync.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisitAsync.SKIP = SKIP;\n/** Remove the current node */\nvisitAsync.REMOVE = REMOVE;\nasync function visitAsync_(key, node, visitor, path) {\n    const ctrl = await callVisitor(key, node, visitor, path);\n    if (isNode(ctrl) || isPair(ctrl)) {\n        replaceNode(key, path, ctrl);\n        return visitAsync_(key, ctrl, visitor, path);\n    }\n    if (typeof ctrl !== 'symbol') {\n        if (isCollection(node)) {\n            path = Object.freeze(path.concat(node));\n            for (let i = 0; i < node.items.length; ++i) {\n                const ci = await visitAsync_(i, node.items[i], visitor, path);\n                if (typeof ci === 'number')\n                    i = ci - 1;\n                else if (ci === BREAK)\n                    return BREAK;\n                else if (ci === REMOVE) {\n                    node.items.splice(i, 1);\n                    i -= 1;\n                }\n            }\n        }\n        else if (isPair(node)) {\n            path = Object.freeze(path.concat(node));\n            const ck = await visitAsync_('key', node.key, visitor, path);\n            if (ck === BREAK)\n                return BREAK;\n            else if (ck === REMOVE)\n                node.key = null;\n            const cv = await visitAsync_('value', node.value, visitor, path);\n            if (cv === BREAK)\n                return BREAK;\n            else if (cv === REMOVE)\n                node.value = null;\n        }\n    }\n    return ctrl;\n}\nfunction initVisitor(visitor) {\n    if (typeof visitor === 'object' &&\n        (visitor.Collection || visitor.Node || visitor.Value)) {\n        return Object.assign({\n            Alias: visitor.Node,\n            Map: visitor.Node,\n            Scalar: visitor.Node,\n            Seq: visitor.Node\n        }, visitor.Value && {\n            Map: visitor.Value,\n            Scalar: visitor.Value,\n            Seq: visitor.Value\n        }, visitor.Collection && {\n            Map: visitor.Collection,\n            Seq: visitor.Collection\n        }, visitor);\n    }\n    return visitor;\n}\nfunction callVisitor(key, node, visitor, path) {\n    if (typeof visitor === 'function')\n        return visitor(key, node, path);\n    if (isMap(node))\n        return visitor.Map?.(key, node, path);\n    if (isSeq(node))\n        return visitor.Seq?.(key, node, path);\n    if (isPair(node))\n        return visitor.Pair?.(key, node, path);\n    if (isScalar(node))\n        return visitor.Scalar?.(key, node, path);\n    if (isAlias(node))\n        return visitor.Alias?.(key, node, path);\n    return undefined;\n}\nfunction replaceNode(key, path, node) {\n    const parent = path[path.length - 1];\n    if (isCollection(parent)) {\n        parent.items[key] = node;\n    }\n    else if (isPair(parent)) {\n        if (key === 'key')\n            parent.key = node;\n        else\n            parent.value = node;\n    }\n    else if (isDocument(parent)) {\n        parent.contents = node;\n    }\n    else {\n        const pt = isAlias(parent) ? 'alias' : 'scalar';\n        throw new Error(`Cannot replace node with ${pt} parent`);\n    }\n}\n\nexport { visit, visitAsync };\n","import { isNode } from '../nodes/identity.js';\nimport { visit } from '../visit.js';\n\nconst escapeChars = {\n    '!': '%21',\n    ',': '%2C',\n    '[': '%5B',\n    ']': '%5D',\n    '{': '%7B',\n    '}': '%7D'\n};\nconst escapeTagName = (tn) => tn.replace(/[!,[\\]{}]/g, ch => escapeChars[ch]);\nclass Directives {\n    constructor(yaml, tags) {\n        /**\n         * The directives-end/doc-start marker `---`. If `null`, a marker may still be\n         * included in the document's stringified representation.\n         */\n        this.docStart = null;\n        /** The doc-end marker `...`.  */\n        this.docEnd = false;\n        this.yaml = Object.assign({}, Directives.defaultYaml, yaml);\n        this.tags = Object.assign({}, Directives.defaultTags, tags);\n    }\n    clone() {\n        const copy = new Directives(this.yaml, this.tags);\n        copy.docStart = this.docStart;\n        return copy;\n    }\n    /**\n     * During parsing, get a Directives instance for the current document and\n     * update the stream state according to the current version's spec.\n     */\n    atDocument() {\n        const res = new Directives(this.yaml, this.tags);\n        switch (this.yaml.version) {\n            case '1.1':\n                this.atNextDocument = true;\n                break;\n            case '1.2':\n                this.atNextDocument = false;\n                this.yaml = {\n                    explicit: Directives.defaultYaml.explicit,\n                    version: '1.2'\n                };\n                this.tags = Object.assign({}, Directives.defaultTags);\n                break;\n        }\n        return res;\n    }\n    /**\n     * @param onError - May be called even if the action was successful\n     * @returns `true` on success\n     */\n    add(line, onError) {\n        if (this.atNextDocument) {\n            this.yaml = { explicit: Directives.defaultYaml.explicit, version: '1.1' };\n            this.tags = Object.assign({}, Directives.defaultTags);\n            this.atNextDocument = false;\n        }\n        const parts = line.trim().split(/[ \\t]+/);\n        const name = parts.shift();\n        switch (name) {\n            case '%TAG': {\n                if (parts.length !== 2) {\n                    onError(0, '%TAG directive should contain exactly two parts');\n                    if (parts.length < 2)\n                        return false;\n                }\n                const [handle, prefix] = parts;\n                this.tags[handle] = prefix;\n                return true;\n            }\n            case '%YAML': {\n                this.yaml.explicit = true;\n                if (parts.length !== 1) {\n                    onError(0, '%YAML directive should contain exactly one part');\n                    return false;\n                }\n                const [version] = parts;\n                if (version === '1.1' || version === '1.2') {\n                    this.yaml.version = version;\n                    return true;\n                }\n                else {\n                    const isValid = /^\\d+\\.\\d+$/.test(version);\n                    onError(6, `Unsupported YAML version ${version}`, isValid);\n                    return false;\n                }\n            }\n            default:\n                onError(0, `Unknown directive ${name}`, true);\n                return false;\n        }\n    }\n    /**\n     * Resolves a tag, matching handles to those defined in %TAG directives.\n     *\n     * @returns Resolved tag, which may also be the non-specific tag `'!'` or a\n     *   `'!local'` tag, or `null` if unresolvable.\n     */\n    tagName(source, onError) {\n        if (source === '!')\n            return '!'; // non-specific tag\n        if (source[0] !== '!') {\n            onError(`Not a valid tag: ${source}`);\n            return null;\n        }\n        if (source[1] === '<') {\n            const verbatim = source.slice(2, -1);\n            if (verbatim === '!' || verbatim === '!!') {\n                onError(`Verbatim tags aren't resolved, so ${source} is invalid.`);\n                return null;\n            }\n            if (source[source.length - 1] !== '>')\n                onError('Verbatim tags must end with a >');\n            return verbatim;\n        }\n        const [, handle, suffix] = source.match(/^(.*!)([^!]*)$/s);\n        if (!suffix)\n            onError(`The ${source} tag has no suffix`);\n        const prefix = this.tags[handle];\n        if (prefix) {\n            try {\n                return prefix + decodeURIComponent(suffix);\n            }\n            catch (error) {\n                onError(String(error));\n                return null;\n            }\n        }\n        if (handle === '!')\n            return source; // local tag\n        onError(`Could not resolve tag: ${source}`);\n        return null;\n    }\n    /**\n     * Given a fully resolved tag, returns its printable string form,\n     * taking into account current tag prefixes and defaults.\n     */\n    tagString(tag) {\n        for (const [handle, prefix] of Object.entries(this.tags)) {\n            if (tag.startsWith(prefix))\n                return handle + escapeTagName(tag.substring(prefix.length));\n        }\n        return tag[0] === '!' ? tag : `!<${tag}>`;\n    }\n    toString(doc) {\n        const lines = this.yaml.explicit\n            ? [`%YAML ${this.yaml.version || '1.2'}`]\n            : [];\n        const tagEntries = Object.entries(this.tags);\n        let tagNames;\n        if (doc && tagEntries.length > 0 && isNode(doc.contents)) {\n            const tags = {};\n            visit(doc.contents, (_key, node) => {\n                if (isNode(node) && node.tag)\n                    tags[node.tag] = true;\n            });\n            tagNames = Object.keys(tags);\n        }\n        else\n            tagNames = [];\n        for (const [handle, prefix] of tagEntries) {\n            if (handle === '!!' && prefix === 'tag:yaml.org,2002:')\n                continue;\n            if (!doc || tagNames.some(tn => tn.startsWith(prefix)))\n                lines.push(`%TAG ${handle} ${prefix}`);\n        }\n        return lines.join('\\n');\n    }\n}\nDirectives.defaultYaml = { explicit: false, version: '1.2' };\nDirectives.defaultTags = { '!!': 'tag:yaml.org,2002:' };\n\nexport { Directives };\n","import { isScalar, isCollection } from '../nodes/identity.js';\nimport { visit } from '../visit.js';\n\n/**\n * Verify that the input string is a valid anchor.\n *\n * Will throw on errors.\n */\nfunction anchorIsValid(anchor) {\n    if (/[\\x00-\\x19\\s,[\\]{}]/.test(anchor)) {\n        const sa = JSON.stringify(anchor);\n        const msg = `Anchor must not contain whitespace or control characters: ${sa}`;\n        throw new Error(msg);\n    }\n    return true;\n}\nfunction anchorNames(root) {\n    const anchors = new Set();\n    visit(root, {\n        Value(_key, node) {\n            if (node.anchor)\n                anchors.add(node.anchor);\n        }\n    });\n    return anchors;\n}\n/** Find a new anchor name with the given `prefix` and a one-indexed suffix. */\nfunction findNewAnchor(prefix, exclude) {\n    for (let i = 1; true; ++i) {\n        const name = `${prefix}${i}`;\n        if (!exclude.has(name))\n            return name;\n    }\n}\nfunction createNodeAnchors(doc, prefix) {\n    const aliasObjects = [];\n    const sourceObjects = new Map();\n    let prevAnchors = null;\n    return {\n        onAnchor: (source) => {\n            aliasObjects.push(source);\n            prevAnchors ?? (prevAnchors = anchorNames(doc));\n            const anchor = findNewAnchor(prefix, prevAnchors);\n            prevAnchors.add(anchor);\n            return anchor;\n        },\n        /**\n         * With circular references, the source node is only resolved after all\n         * of its child nodes are. This is why anchors are set only after all of\n         * the nodes have been created.\n         */\n        setAnchors: () => {\n            for (const source of aliasObjects) {\n                const ref = sourceObjects.get(source);\n                if (typeof ref === 'object' &&\n                    ref.anchor &&\n                    (isScalar(ref.node) || isCollection(ref.node))) {\n                    ref.node.anchor = ref.anchor;\n                }\n                else {\n                    const error = new Error('Failed to resolve repeated object (this should not happen)');\n                    error.source = source;\n                    throw error;\n                }\n            }\n        },\n        sourceObjects\n    };\n}\n\nexport { anchorIsValid, anchorNames, createNodeAnchors, findNewAnchor };\n","/**\n * Applies the JSON.parse reviver algorithm as defined in the ECMA-262 spec,\n * in section 24.5.1.1 \"Runtime Semantics: InternalizeJSONProperty\" of the\n * 2021 edition: https://tc39.es/ecma262/#sec-json.parse\n *\n * Includes extensions for handling Map and Set objects.\n */\nfunction applyReviver(reviver, obj, key, val) {\n    if (val && typeof val === 'object') {\n        if (Array.isArray(val)) {\n            for (let i = 0, len = val.length; i < len; ++i) {\n                const v0 = val[i];\n                const v1 = applyReviver(reviver, val, String(i), v0);\n                // eslint-disable-next-line @typescript-eslint/no-array-delete\n                if (v1 === undefined)\n                    delete val[i];\n                else if (v1 !== v0)\n                    val[i] = v1;\n            }\n        }\n        else if (val instanceof Map) {\n            for (const k of Array.from(val.keys())) {\n                const v0 = val.get(k);\n                const v1 = applyReviver(reviver, val, k, v0);\n                if (v1 === undefined)\n                    val.delete(k);\n                else if (v1 !== v0)\n                    val.set(k, v1);\n            }\n        }\n        else if (val instanceof Set) {\n            for (const v0 of Array.from(val)) {\n                const v1 = applyReviver(reviver, val, v0, v0);\n                if (v1 === undefined)\n                    val.delete(v0);\n                else if (v1 !== v0) {\n                    val.delete(v0);\n                    val.add(v1);\n                }\n            }\n        }\n        else {\n            for (const [k, v0] of Object.entries(val)) {\n                const v1 = applyReviver(reviver, val, k, v0);\n                if (v1 === undefined)\n                    delete val[k];\n                else if (v1 !== v0)\n                    val[k] = v1;\n            }\n        }\n    }\n    return reviver.call(obj, key, val);\n}\n\nexport { applyReviver };\n","import { hasAnchor } from './identity.js';\n\n/**\n * Recursively convert any node or its contents to native JavaScript\n *\n * @param value - The input value\n * @param arg - If `value` defines a `toJSON()` method, use this\n *   as its first argument\n * @param ctx - Conversion context, originally set in Document#toJS(). If\n *   `{ keep: true }` is not set, output should be suitable for JSON\n *   stringification.\n */\nfunction toJS(value, arg, ctx) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n    if (Array.isArray(value))\n        return value.map((v, i) => toJS(v, String(i), ctx));\n    if (value && typeof value.toJSON === 'function') {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n        if (!ctx || !hasAnchor(value))\n            return value.toJSON(arg, ctx);\n        const data = { aliasCount: 0, count: 1, res: undefined };\n        ctx.anchors.set(value, data);\n        ctx.onCreate = res => {\n            data.res = res;\n            delete ctx.onCreate;\n        };\n        const res = value.toJSON(arg, ctx);\n        if (ctx.onCreate)\n            ctx.onCreate(res);\n        return res;\n    }\n    if (typeof value === 'bigint' && !ctx?.keep)\n        return Number(value);\n    return value;\n}\n\nexport { toJS };\n","import { applyReviver } from '../doc/applyReviver.js';\nimport { NODE_TYPE, isDocument } from './identity.js';\nimport { toJS } from './toJS.js';\n\nclass NodeBase {\n    constructor(type) {\n        Object.defineProperty(this, NODE_TYPE, { value: type });\n    }\n    /** Create a copy of this node.  */\n    clone() {\n        const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n        if (this.range)\n            copy.range = this.range.slice();\n        return copy;\n    }\n    /** A plain JavaScript representation of this node. */\n    toJS(doc, { mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n        if (!isDocument(doc))\n            throw new TypeError('A document argument is required');\n        const ctx = {\n            anchors: new Map(),\n            doc,\n            keep: true,\n            mapAsMap: mapAsMap === true,\n            mapKeyWarned: false,\n            maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n        };\n        const res = toJS(this, '', ctx);\n        if (typeof onAnchor === 'function')\n            for (const { count, res } of ctx.anchors.values())\n                onAnchor(res, count);\n        return typeof reviver === 'function'\n            ? applyReviver(reviver, { '': res }, '', res)\n            : res;\n    }\n}\n\nexport { NodeBase };\n","import { anchorIsValid } from '../doc/anchors.js';\nimport { visit } from '../visit.js';\nimport { ALIAS, isAlias, isCollection, isPair, hasAnchor } from './identity.js';\nimport { NodeBase } from './Node.js';\nimport { toJS } from './toJS.js';\n\nclass Alias extends NodeBase {\n    constructor(source) {\n        super(ALIAS);\n        this.source = source;\n        Object.defineProperty(this, 'tag', {\n            set() {\n                throw new Error('Alias nodes cannot have tags');\n            }\n        });\n    }\n    /**\n     * Resolve the value of this alias within `doc`, finding the last\n     * instance of the `source` anchor before this node.\n     */\n    resolve(doc, ctx) {\n        let nodes;\n        if (ctx?.aliasResolveCache) {\n            nodes = ctx.aliasResolveCache;\n        }\n        else {\n            nodes = [];\n            visit(doc, {\n                Node: (_key, node) => {\n                    if (isAlias(node) || hasAnchor(node))\n                        nodes.push(node);\n                }\n            });\n            if (ctx)\n                ctx.aliasResolveCache = nodes;\n        }\n        let found = undefined;\n        for (const node of nodes) {\n            if (node === this)\n                break;\n            if (node.anchor === this.source)\n                found = node;\n        }\n        return found;\n    }\n    toJSON(_arg, ctx) {\n        if (!ctx)\n            return { source: this.source };\n        const { anchors, doc, maxAliasCount } = ctx;\n        const source = this.resolve(doc, ctx);\n        if (!source) {\n            const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n            throw new ReferenceError(msg);\n        }\n        let data = anchors.get(source);\n        if (!data) {\n            // Resolve anchors for Node.prototype.toJS()\n            toJS(source, null, ctx);\n            data = anchors.get(source);\n        }\n        /* istanbul ignore if */\n        if (!data || data.res === undefined) {\n            const msg = 'This should not happen: Alias anchor was not resolved?';\n            throw new ReferenceError(msg);\n        }\n        if (maxAliasCount >= 0) {\n            data.count += 1;\n            if (data.aliasCount === 0)\n                data.aliasCount = getAliasCount(doc, source, anchors);\n            if (data.count * data.aliasCount > maxAliasCount) {\n                const msg = 'Excessive alias count indicates a resource exhaustion attack';\n                throw new ReferenceError(msg);\n            }\n        }\n        return data.res;\n    }\n    toString(ctx, _onComment, _onChompKeep) {\n        const src = `*${this.source}`;\n        if (ctx) {\n            anchorIsValid(this.source);\n            if (ctx.options.verifyAliasOrder && !ctx.anchors.has(this.source)) {\n                const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n                throw new Error(msg);\n            }\n            if (ctx.implicitKey)\n                return `${src} `;\n        }\n        return src;\n    }\n}\nfunction getAliasCount(doc, node, anchors) {\n    if (isAlias(node)) {\n        const source = node.resolve(doc);\n        const anchor = anchors && source && anchors.get(source);\n        return anchor ? anchor.count * anchor.aliasCount : 0;\n    }\n    else if (isCollection(node)) {\n        let count = 0;\n        for (const item of node.items) {\n            const c = getAliasCount(doc, item, anchors);\n            if (c > count)\n                count = c;\n        }\n        return count;\n    }\n    else if (isPair(node)) {\n        const kc = getAliasCount(doc, node.key, anchors);\n        const vc = getAliasCount(doc, node.value, anchors);\n        return Math.max(kc, vc);\n    }\n    return 1;\n}\n\nexport { Alias };\n","import { SCALAR } from './identity.js';\nimport { NodeBase } from './Node.js';\nimport { toJS } from './toJS.js';\n\nconst isScalarValue = (value) => !value || (typeof value !== 'function' && typeof value !== 'object');\nclass Scalar extends NodeBase {\n    constructor(value) {\n        super(SCALAR);\n        this.value = value;\n    }\n    toJSON(arg, ctx) {\n        return ctx?.keep ? this.value : toJS(this.value, arg, ctx);\n    }\n    toString() {\n        return String(this.value);\n    }\n}\nScalar.BLOCK_FOLDED = 'BLOCK_FOLDED';\nScalar.BLOCK_LITERAL = 'BLOCK_LITERAL';\nScalar.PLAIN = 'PLAIN';\nScalar.QUOTE_DOUBLE = 'QUOTE_DOUBLE';\nScalar.QUOTE_SINGLE = 'QUOTE_SINGLE';\n\nexport { Scalar, isScalarValue };\n","import { Alias } from '../nodes/Alias.js';\nimport { isNode, isPair, MAP, SEQ, isDocument } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\n\nconst defaultTagPrefix = 'tag:yaml.org,2002:';\nfunction findTagObject(value, tagName, tags) {\n    if (tagName) {\n        const match = tags.filter(t => t.tag === tagName);\n        const tagObj = match.find(t => !t.format) ?? match[0];\n        if (!tagObj)\n            throw new Error(`Tag ${tagName} not found`);\n        return tagObj;\n    }\n    return tags.find(t => t.identify?.(value) && !t.format);\n}\nfunction createNode(value, tagName, ctx) {\n    if (isDocument(value))\n        value = value.contents;\n    if (isNode(value))\n        return value;\n    if (isPair(value)) {\n        const map = ctx.schema[MAP].createNode?.(ctx.schema, null, ctx);\n        map.items.push(value);\n        return map;\n    }\n    if (value instanceof String ||\n        value instanceof Number ||\n        value instanceof Boolean ||\n        (typeof BigInt !== 'undefined' && value instanceof BigInt) // not supported everywhere\n    ) {\n        // https://tc39.es/ecma262/#sec-serializejsonproperty\n        value = value.valueOf();\n    }\n    const { aliasDuplicateObjects, onAnchor, onTagObj, schema, sourceObjects } = ctx;\n    // Detect duplicate references to the same object & use Alias nodes for all\n    // after first. The `ref` wrapper allows for circular references to resolve.\n    let ref = undefined;\n    if (aliasDuplicateObjects && value && typeof value === 'object') {\n        ref = sourceObjects.get(value);\n        if (ref) {\n            ref.anchor ?? (ref.anchor = onAnchor(value));\n            return new Alias(ref.anchor);\n        }\n        else {\n            ref = { anchor: null, node: null };\n            sourceObjects.set(value, ref);\n        }\n    }\n    if (tagName?.startsWith('!!'))\n        tagName = defaultTagPrefix + tagName.slice(2);\n    let tagObj = findTagObject(value, tagName, schema.tags);\n    if (!tagObj) {\n        if (value && typeof value.toJSON === 'function') {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n            value = value.toJSON();\n        }\n        if (!value || typeof value !== 'object') {\n            const node = new Scalar(value);\n            if (ref)\n                ref.node = node;\n            return node;\n        }\n        tagObj =\n            value instanceof Map\n                ? schema[MAP]\n                : Symbol.iterator in Object(value)\n                    ? schema[SEQ]\n                    : schema[MAP];\n    }\n    if (onTagObj) {\n        onTagObj(tagObj);\n        delete ctx.onTagObj;\n    }\n    const node = tagObj?.createNode\n        ? tagObj.createNode(ctx.schema, value, ctx)\n        : typeof tagObj?.nodeClass?.from === 'function'\n            ? tagObj.nodeClass.from(ctx.schema, value, ctx)\n            : new Scalar(value);\n    if (tagName)\n        node.tag = tagName;\n    else if (!tagObj.default)\n        node.tag = tagObj.tag;\n    if (ref)\n        ref.node = node;\n    return node;\n}\n\nexport { createNode };\n","import { createNode } from '../doc/createNode.js';\nimport { isNode, isPair, isCollection, isScalar } from './identity.js';\nimport { NodeBase } from './Node.js';\n\nfunction collectionFromPath(schema, path, value) {\n    let v = value;\n    for (let i = path.length - 1; i >= 0; --i) {\n        const k = path[i];\n        if (typeof k === 'number' && Number.isInteger(k) && k >= 0) {\n            const a = [];\n            a[k] = v;\n            v = a;\n        }\n        else {\n            v = new Map([[k, v]]);\n        }\n    }\n    return createNode(v, undefined, {\n        aliasDuplicateObjects: false,\n        keepUndefined: false,\n        onAnchor: () => {\n            throw new Error('This should not happen, please report a bug.');\n        },\n        schema,\n        sourceObjects: new Map()\n    });\n}\n// Type guard is intentionally a little wrong so as to be more useful,\n// as it does not cover untypable empty non-string iterables (e.g. []).\nconst isEmptyPath = (path) => path == null ||\n    (typeof path === 'object' && !!path[Symbol.iterator]().next().done);\nclass Collection extends NodeBase {\n    constructor(type, schema) {\n        super(type);\n        Object.defineProperty(this, 'schema', {\n            value: schema,\n            configurable: true,\n            enumerable: false,\n            writable: true\n        });\n    }\n    /**\n     * Create a copy of this collection.\n     *\n     * @param schema - If defined, overwrites the original's schema\n     */\n    clone(schema) {\n        const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n        if (schema)\n            copy.schema = schema;\n        copy.items = copy.items.map(it => isNode(it) || isPair(it) ? it.clone(schema) : it);\n        if (this.range)\n            copy.range = this.range.slice();\n        return copy;\n    }\n    /**\n     * Adds a value to the collection. For `!!map` and `!!omap` the value must\n     * be a Pair instance or a `{ key, value }` object, which may not have a key\n     * that already exists in the map.\n     */\n    addIn(path, value) {\n        if (isEmptyPath(path))\n            this.add(value);\n        else {\n            const [key, ...rest] = path;\n            const node = this.get(key, true);\n            if (isCollection(node))\n                node.addIn(rest, value);\n            else if (node === undefined && this.schema)\n                this.set(key, collectionFromPath(this.schema, rest, value));\n            else\n                throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n        }\n    }\n    /**\n     * Removes a value from the collection.\n     * @returns `true` if the item was found and removed.\n     */\n    deleteIn(path) {\n        const [key, ...rest] = path;\n        if (rest.length === 0)\n            return this.delete(key);\n        const node = this.get(key, true);\n        if (isCollection(node))\n            return node.deleteIn(rest);\n        else\n            throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n    }\n    /**\n     * Returns item at `key`, or `undefined` if not found. By default unwraps\n     * scalar values from their surrounding node; to disable set `keepScalar` to\n     * `true` (collections are always returned intact).\n     */\n    getIn(path, keepScalar) {\n        const [key, ...rest] = path;\n        const node = this.get(key, true);\n        if (rest.length === 0)\n            return !keepScalar && isScalar(node) ? node.value : node;\n        else\n            return isCollection(node) ? node.getIn(rest, keepScalar) : undefined;\n    }\n    hasAllNullValues(allowScalar) {\n        return this.items.every(node => {\n            if (!isPair(node))\n                return false;\n            const n = node.value;\n            return (n == null ||\n                (allowScalar &&\n                    isScalar(n) &&\n                    n.value == null &&\n                    !n.commentBefore &&\n                    !n.comment &&\n                    !n.tag));\n        });\n    }\n    /**\n     * Checks if the collection includes a value with the key `key`.\n     */\n    hasIn(path) {\n        const [key, ...rest] = path;\n        if (rest.length === 0)\n            return this.has(key);\n        const node = this.get(key, true);\n        return isCollection(node) ? node.hasIn(rest) : false;\n    }\n    /**\n     * Sets a value in this collection. For `!!set`, `value` needs to be a\n     * boolean to add/remove the item from the set.\n     */\n    setIn(path, value) {\n        const [key, ...rest] = path;\n        if (rest.length === 0) {\n            this.set(key, value);\n        }\n        else {\n            const node = this.get(key, true);\n            if (isCollection(node))\n                node.setIn(rest, value);\n            else if (node === undefined && this.schema)\n                this.set(key, collectionFromPath(this.schema, rest, value));\n            else\n                throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n        }\n    }\n}\n\nexport { Collection, collectionFromPath, isEmptyPath };\n","/**\n * Stringifies a comment.\n *\n * Empty comment lines are left empty,\n * lines consisting of a single space are replaced by `#`,\n * and all other lines are prefixed with a `#`.\n */\nconst stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, '#');\nfunction indentComment(comment, indent) {\n    if (/^\\n+$/.test(comment))\n        return comment.substring(1);\n    return indent ? comment.replace(/^(?! *$)/gm, indent) : comment;\n}\nconst lineComment = (str, indent, comment) => str.endsWith('\\n')\n    ? indentComment(comment, indent)\n    : comment.includes('\\n')\n        ? '\\n' + indentComment(comment, indent)\n        : (str.endsWith(' ') ? '' : ' ') + comment;\n\nexport { indentComment, lineComment, stringifyComment };\n","const FOLD_FLOW = 'flow';\nconst FOLD_BLOCK = 'block';\nconst FOLD_QUOTED = 'quoted';\n/**\n * Tries to keep input at up to `lineWidth` characters, splitting only on spaces\n * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are\n * terminated with `\\n` and started with `indent`.\n */\nfunction foldFlowLines(text, indent, mode = 'flow', { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) {\n    if (!lineWidth || lineWidth < 0)\n        return text;\n    if (lineWidth < minContentWidth)\n        minContentWidth = 0;\n    const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);\n    if (text.length <= endStep)\n        return text;\n    const folds = [];\n    const escapedFolds = {};\n    let end = lineWidth - indent.length;\n    if (typeof indentAtStart === 'number') {\n        if (indentAtStart > lineWidth - Math.max(2, minContentWidth))\n            folds.push(0);\n        else\n            end = lineWidth - indentAtStart;\n    }\n    let split = undefined;\n    let prev = undefined;\n    let overflow = false;\n    let i = -1;\n    let escStart = -1;\n    let escEnd = -1;\n    if (mode === FOLD_BLOCK) {\n        i = consumeMoreIndentedLines(text, i, indent.length);\n        if (i !== -1)\n            end = i + endStep;\n    }\n    for (let ch; (ch = text[(i += 1)]);) {\n        if (mode === FOLD_QUOTED && ch === '\\\\') {\n            escStart = i;\n            switch (text[i + 1]) {\n                case 'x':\n                    i += 3;\n                    break;\n                case 'u':\n                    i += 5;\n                    break;\n                case 'U':\n                    i += 9;\n                    break;\n                default:\n                    i += 1;\n            }\n            escEnd = i;\n        }\n        if (ch === '\\n') {\n            if (mode === FOLD_BLOCK)\n                i = consumeMoreIndentedLines(text, i, indent.length);\n            end = i + indent.length + endStep;\n            split = undefined;\n        }\n        else {\n            if (ch === ' ' &&\n                prev &&\n                prev !== ' ' &&\n                prev !== '\\n' &&\n                prev !== '\\t') {\n                // space surrounded by non-space can be replaced with newline + indent\n                const next = text[i + 1];\n                if (next && next !== ' ' && next !== '\\n' && next !== '\\t')\n                    split = i;\n            }\n            if (i >= end) {\n                if (split) {\n                    folds.push(split);\n                    end = split + endStep;\n                    split = undefined;\n                }\n                else if (mode === FOLD_QUOTED) {\n                    // white-space collected at end may stretch past lineWidth\n                    while (prev === ' ' || prev === '\\t') {\n                        prev = ch;\n                        ch = text[(i += 1)];\n                        overflow = true;\n                    }\n                    // Account for newline escape, but don't break preceding escape\n                    const j = i > escEnd + 1 ? i - 2 : escStart - 1;\n                    // Bail out if lineWidth & minContentWidth are shorter than an escape string\n                    if (escapedFolds[j])\n                        return text;\n                    folds.push(j);\n                    escapedFolds[j] = true;\n                    end = j + endStep;\n                    split = undefined;\n                }\n                else {\n                    overflow = true;\n                }\n            }\n        }\n        prev = ch;\n    }\n    if (overflow && onOverflow)\n        onOverflow();\n    if (folds.length === 0)\n        return text;\n    if (onFold)\n        onFold();\n    let res = text.slice(0, folds[0]);\n    for (let i = 0; i < folds.length; ++i) {\n        const fold = folds[i];\n        const end = folds[i + 1] || text.length;\n        if (fold === 0)\n            res = `\\n${indent}${text.slice(0, end)}`;\n        else {\n            if (mode === FOLD_QUOTED && escapedFolds[fold])\n                res += `${text[fold]}\\\\`;\n            res += `\\n${indent}${text.slice(fold + 1, end)}`;\n        }\n    }\n    return res;\n}\n/**\n * Presumes `i + 1` is at the start of a line\n * @returns index of last newline in more-indented block\n */\nfunction consumeMoreIndentedLines(text, i, indent) {\n    let end = i;\n    let start = i + 1;\n    let ch = text[start];\n    while (ch === ' ' || ch === '\\t') {\n        if (i < start + indent) {\n            ch = text[++i];\n        }\n        else {\n            do {\n                ch = text[++i];\n            } while (ch && ch !== '\\n');\n            end = i;\n            start = i + 1;\n            ch = text[start];\n        }\n    }\n    return end;\n}\n\nexport { FOLD_BLOCK, FOLD_FLOW, FOLD_QUOTED, foldFlowLines };\n","import { Scalar } from '../nodes/Scalar.js';\nimport { foldFlowLines, FOLD_FLOW, FOLD_QUOTED, FOLD_BLOCK } from './foldFlowLines.js';\n\nconst getFoldOptions = (ctx, isBlock) => ({\n    indentAtStart: isBlock ? ctx.indent.length : ctx.indentAtStart,\n    lineWidth: ctx.options.lineWidth,\n    minContentWidth: ctx.options.minContentWidth\n});\n// Also checks for lines starting with %, as parsing the output as YAML 1.1 will\n// presume that's starting a new document.\nconst containsDocumentMarker = (str) => /^(%|---|\\.\\.\\.)/m.test(str);\nfunction lineLengthOverLimit(str, lineWidth, indentLength) {\n    if (!lineWidth || lineWidth < 0)\n        return false;\n    const limit = lineWidth - indentLength;\n    const strLen = str.length;\n    if (strLen <= limit)\n        return false;\n    for (let i = 0, start = 0; i < strLen; ++i) {\n        if (str[i] === '\\n') {\n            if (i - start > limit)\n                return true;\n            start = i + 1;\n            if (strLen - start <= limit)\n                return false;\n        }\n    }\n    return true;\n}\nfunction doubleQuotedString(value, ctx) {\n    const json = JSON.stringify(value);\n    if (ctx.options.doubleQuotedAsJSON)\n        return json;\n    const { implicitKey } = ctx;\n    const minMultiLineLength = ctx.options.doubleQuotedMinMultiLineLength;\n    const indent = ctx.indent || (containsDocumentMarker(value) ? '  ' : '');\n    let str = '';\n    let start = 0;\n    for (let i = 0, ch = json[i]; ch; ch = json[++i]) {\n        if (ch === ' ' && json[i + 1] === '\\\\' && json[i + 2] === 'n') {\n            // space before newline needs to be escaped to not be folded\n            str += json.slice(start, i) + '\\\\ ';\n            i += 1;\n            start = i;\n            ch = '\\\\';\n        }\n        if (ch === '\\\\')\n            switch (json[i + 1]) {\n                case 'u':\n                    {\n                        str += json.slice(start, i);\n                        const code = json.substr(i + 2, 4);\n                        switch (code) {\n                            case '0000':\n                                str += '\\\\0';\n                                break;\n                            case '0007':\n                                str += '\\\\a';\n                                break;\n                            case '000b':\n                                str += '\\\\v';\n                                break;\n                            case '001b':\n                                str += '\\\\e';\n                                break;\n                            case '0085':\n                                str += '\\\\N';\n                                break;\n                            case '00a0':\n                                str += '\\\\_';\n                                break;\n                            case '2028':\n                                str += '\\\\L';\n                                break;\n                            case '2029':\n                                str += '\\\\P';\n                                break;\n                            default:\n                                if (code.substr(0, 2) === '00')\n                                    str += '\\\\x' + code.substr(2);\n                                else\n                                    str += json.substr(i, 6);\n                        }\n                        i += 5;\n                        start = i + 1;\n                    }\n                    break;\n                case 'n':\n                    if (implicitKey ||\n                        json[i + 2] === '\"' ||\n                        json.length < minMultiLineLength) {\n                        i += 1;\n                    }\n                    else {\n                        // folding will eat first newline\n                        str += json.slice(start, i) + '\\n\\n';\n                        while (json[i + 2] === '\\\\' &&\n                            json[i + 3] === 'n' &&\n                            json[i + 4] !== '\"') {\n                            str += '\\n';\n                            i += 2;\n                        }\n                        str += indent;\n                        // space after newline needs to be escaped to not be folded\n                        if (json[i + 2] === ' ')\n                            str += '\\\\';\n                        i += 1;\n                        start = i + 1;\n                    }\n                    break;\n                default:\n                    i += 1;\n            }\n    }\n    str = start ? str + json.slice(start) : json;\n    return implicitKey\n        ? str\n        : foldFlowLines(str, indent, FOLD_QUOTED, getFoldOptions(ctx, false));\n}\nfunction singleQuotedString(value, ctx) {\n    if (ctx.options.singleQuote === false ||\n        (ctx.implicitKey && value.includes('\\n')) ||\n        /[ \\t]\\n|\\n[ \\t]/.test(value) // single quoted string can't have leading or trailing whitespace around newline\n    )\n        return doubleQuotedString(value, ctx);\n    const indent = ctx.indent || (containsDocumentMarker(value) ? '  ' : '');\n    const res = \"'\" + value.replace(/'/g, \"''\").replace(/\\n+/g, `$&\\n${indent}`) + \"'\";\n    return ctx.implicitKey\n        ? res\n        : foldFlowLines(res, indent, FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction quotedString(value, ctx) {\n    const { singleQuote } = ctx.options;\n    let qs;\n    if (singleQuote === false)\n        qs = doubleQuotedString;\n    else {\n        const hasDouble = value.includes('\"');\n        const hasSingle = value.includes(\"'\");\n        if (hasDouble && !hasSingle)\n            qs = singleQuotedString;\n        else if (hasSingle && !hasDouble)\n            qs = doubleQuotedString;\n        else\n            qs = singleQuote ? singleQuotedString : doubleQuotedString;\n    }\n    return qs(value, ctx);\n}\n// The negative lookbehind avoids a polynomial search,\n// but isn't supported yet on Safari: https://caniuse.com/js-regexp-lookbehind\nlet blockEndNewlines;\ntry {\n    blockEndNewlines = new RegExp('(^|(?<!\\n))\\n+(?!\\n|$)', 'g');\n}\ncatch {\n    blockEndNewlines = /\\n+(?!\\n|$)/g;\n}\nfunction blockString({ comment, type, value }, ctx, onComment, onChompKeep) {\n    const { blockQuote, commentString, lineWidth } = ctx.options;\n    // 1. Block can't end in whitespace unless the last line is non-empty.\n    // 2. Strings consisting of only whitespace are best rendered explicitly.\n    if (!blockQuote || /\\n[\\t ]+$/.test(value)) {\n        return quotedString(value, ctx);\n    }\n    const indent = ctx.indent ||\n        (ctx.forceBlockIndent || containsDocumentMarker(value) ? '  ' : '');\n    const literal = blockQuote === 'literal'\n        ? true\n        : blockQuote === 'folded' || type === Scalar.BLOCK_FOLDED\n            ? false\n            : type === Scalar.BLOCK_LITERAL\n                ? true\n                : !lineLengthOverLimit(value, lineWidth, indent.length);\n    if (!value)\n        return literal ? '|\\n' : '>\\n';\n    // determine chomping from whitespace at value end\n    let chomp;\n    let endStart;\n    for (endStart = value.length; endStart > 0; --endStart) {\n        const ch = value[endStart - 1];\n        if (ch !== '\\n' && ch !== '\\t' && ch !== ' ')\n            break;\n    }\n    let end = value.substring(endStart);\n    const endNlPos = end.indexOf('\\n');\n    if (endNlPos === -1) {\n        chomp = '-'; // strip\n    }\n    else if (value === end || endNlPos !== end.length - 1) {\n        chomp = '+'; // keep\n        if (onChompKeep)\n            onChompKeep();\n    }\n    else {\n        chomp = ''; // clip\n    }\n    if (end) {\n        value = value.slice(0, -end.length);\n        if (end[end.length - 1] === '\\n')\n            end = end.slice(0, -1);\n        end = end.replace(blockEndNewlines, `$&${indent}`);\n    }\n    // determine indent indicator from whitespace at value start\n    let startWithSpace = false;\n    let startEnd;\n    let startNlPos = -1;\n    for (startEnd = 0; startEnd < value.length; ++startEnd) {\n        const ch = value[startEnd];\n        if (ch === ' ')\n            startWithSpace = true;\n        else if (ch === '\\n')\n            startNlPos = startEnd;\n        else\n            break;\n    }\n    let start = value.substring(0, startNlPos < startEnd ? startNlPos + 1 : startEnd);\n    if (start) {\n        value = value.substring(start.length);\n        start = start.replace(/\\n+/g, `$&${indent}`);\n    }\n    const indentSize = indent ? '2' : '1'; // root is at -1\n    // Leading | or > is added later\n    let header = (startWithSpace ? indentSize : '') + chomp;\n    if (comment) {\n        header += ' ' + commentString(comment.replace(/ ?[\\r\\n]+/g, ' '));\n        if (onComment)\n            onComment();\n    }\n    if (!literal) {\n        const foldedValue = value\n            .replace(/\\n+/g, '\\n$&')\n            .replace(/(?:^|\\n)([\\t ].*)(?:([\\n\\t ]*)\\n(?![\\n\\t ]))?/g, '$1$2') // more-indented lines aren't folded\n            //                ^ more-ind. ^ empty     ^ capture next empty lines only at end of indent\n            .replace(/\\n+/g, `$&${indent}`);\n        let literalFallback = false;\n        const foldOptions = getFoldOptions(ctx, true);\n        if (blockQuote !== 'folded' && type !== Scalar.BLOCK_FOLDED) {\n            foldOptions.onOverflow = () => {\n                literalFallback = true;\n            };\n        }\n        const body = foldFlowLines(`${start}${foldedValue}${end}`, indent, FOLD_BLOCK, foldOptions);\n        if (!literalFallback)\n            return `>${header}\\n${indent}${body}`;\n    }\n    value = value.replace(/\\n+/g, `$&${indent}`);\n    return `|${header}\\n${indent}${start}${value}${end}`;\n}\nfunction plainString(item, ctx, onComment, onChompKeep) {\n    const { type, value } = item;\n    const { actualString, implicitKey, indent, indentStep, inFlow } = ctx;\n    if ((implicitKey && value.includes('\\n')) ||\n        (inFlow && /[[\\]{},]/.test(value))) {\n        return quotedString(value, ctx);\n    }\n    if (/^[\\n\\t ,[\\]{}#&*!|>'\"%@`]|^[?-]$|^[?-][ \\t]|[\\n:][ \\t]|[ \\t]\\n|[\\n\\t ]#|[\\n\\t :]$/.test(value)) {\n        // not allowed:\n        // - '-' or '?'\n        // - start with an indicator character (except [?:-]) or /[?-] /\n        // - '\\n ', ': ' or ' \\n' anywhere\n        // - '#' not preceded by a non-space char\n        // - end with ' ' or ':'\n        return implicitKey || inFlow || !value.includes('\\n')\n            ? quotedString(value, ctx)\n            : blockString(item, ctx, onComment, onChompKeep);\n    }\n    if (!implicitKey &&\n        !inFlow &&\n        type !== Scalar.PLAIN &&\n        value.includes('\\n')) {\n        // Where allowed & type not set explicitly, prefer block style for multiline strings\n        return blockString(item, ctx, onComment, onChompKeep);\n    }\n    if (containsDocumentMarker(value)) {\n        if (indent === '') {\n            ctx.forceBlockIndent = true;\n            return blockString(item, ctx, onComment, onChompKeep);\n        }\n        else if (implicitKey && indent === indentStep) {\n            return quotedString(value, ctx);\n        }\n    }\n    const str = value.replace(/\\n+/g, `$&\\n${indent}`);\n    // Verify that output will be parsed as a string, as e.g. plain numbers and\n    // booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'),\n    // and others in v1.1.\n    if (actualString) {\n        const test = (tag) => tag.default && tag.tag !== 'tag:yaml.org,2002:str' && tag.test?.test(str);\n        const { compat, tags } = ctx.doc.schema;\n        if (tags.some(test) || compat?.some(test))\n            return quotedString(value, ctx);\n    }\n    return implicitKey\n        ? str\n        : foldFlowLines(str, indent, FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction stringifyString(item, ctx, onComment, onChompKeep) {\n    const { implicitKey, inFlow } = ctx;\n    const ss = typeof item.value === 'string'\n        ? item\n        : Object.assign({}, item, { value: String(item.value) });\n    let { type } = item;\n    if (type !== Scalar.QUOTE_DOUBLE) {\n        // force double quotes on control characters & unpaired surrogates\n        if (/[\\x00-\\x08\\x0b-\\x1f\\x7f-\\x9f\\u{D800}-\\u{DFFF}]/u.test(ss.value))\n            type = Scalar.QUOTE_DOUBLE;\n    }\n    const _stringify = (_type) => {\n        switch (_type) {\n            case Scalar.BLOCK_FOLDED:\n            case Scalar.BLOCK_LITERAL:\n                return implicitKey || inFlow\n                    ? quotedString(ss.value, ctx) // blocks are not valid inside flow containers\n                    : blockString(ss, ctx, onComment, onChompKeep);\n            case Scalar.QUOTE_DOUBLE:\n                return doubleQuotedString(ss.value, ctx);\n            case Scalar.QUOTE_SINGLE:\n                return singleQuotedString(ss.value, ctx);\n            case Scalar.PLAIN:\n                return plainString(ss, ctx, onComment, onChompKeep);\n            default:\n                return null;\n        }\n    };\n    let res = _stringify(type);\n    if (res === null) {\n        const { defaultKeyType, defaultStringType } = ctx.options;\n        const t = (implicitKey && defaultKeyType) || defaultStringType;\n        res = _stringify(t);\n        if (res === null)\n            throw new Error(`Unsupported default string type ${t}`);\n    }\n    return res;\n}\n\nexport { stringifyString };\n","import { anchorIsValid } from '../doc/anchors.js';\nimport { isPair, isAlias, isNode, isScalar, isCollection } from '../nodes/identity.js';\nimport { stringifyComment } from './stringifyComment.js';\nimport { stringifyString } from './stringifyString.js';\n\nfunction createStringifyContext(doc, options) {\n    const opt = Object.assign({\n        blockQuote: true,\n        commentString: stringifyComment,\n        defaultKeyType: null,\n        defaultStringType: 'PLAIN',\n        directives: null,\n        doubleQuotedAsJSON: false,\n        doubleQuotedMinMultiLineLength: 40,\n        falseStr: 'false',\n        flowCollectionPadding: true,\n        indentSeq: true,\n        lineWidth: 80,\n        minContentWidth: 20,\n        nullStr: 'null',\n        simpleKeys: false,\n        singleQuote: null,\n        trueStr: 'true',\n        verifyAliasOrder: true\n    }, doc.schema.toStringOptions, options);\n    let inFlow;\n    switch (opt.collectionStyle) {\n        case 'block':\n            inFlow = false;\n            break;\n        case 'flow':\n            inFlow = true;\n            break;\n        default:\n            inFlow = null;\n    }\n    return {\n        anchors: new Set(),\n        doc,\n        flowCollectionPadding: opt.flowCollectionPadding ? ' ' : '',\n        indent: '',\n        indentStep: typeof opt.indent === 'number' ? ' '.repeat(opt.indent) : '  ',\n        inFlow,\n        options: opt\n    };\n}\nfunction getTagObject(tags, item) {\n    if (item.tag) {\n        const match = tags.filter(t => t.tag === item.tag);\n        if (match.length > 0)\n            return match.find(t => t.format === item.format) ?? match[0];\n    }\n    let tagObj = undefined;\n    let obj;\n    if (isScalar(item)) {\n        obj = item.value;\n        let match = tags.filter(t => t.identify?.(obj));\n        if (match.length > 1) {\n            const testMatch = match.filter(t => t.test);\n            if (testMatch.length > 0)\n                match = testMatch;\n        }\n        tagObj =\n            match.find(t => t.format === item.format) ?? match.find(t => !t.format);\n    }\n    else {\n        obj = item;\n        tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass);\n    }\n    if (!tagObj) {\n        const name = obj?.constructor?.name ?? (obj === null ? 'null' : typeof obj);\n        throw new Error(`Tag not resolved for ${name} value`);\n    }\n    return tagObj;\n}\n// needs to be called before value stringifier to allow for circular anchor refs\nfunction stringifyProps(node, tagObj, { anchors, doc }) {\n    if (!doc.directives)\n        return '';\n    const props = [];\n    const anchor = (isScalar(node) || isCollection(node)) && node.anchor;\n    if (anchor && anchorIsValid(anchor)) {\n        anchors.add(anchor);\n        props.push(`&${anchor}`);\n    }\n    const tag = node.tag ?? (tagObj.default ? null : tagObj.tag);\n    if (tag)\n        props.push(doc.directives.tagString(tag));\n    return props.join(' ');\n}\nfunction stringify(item, ctx, onComment, onChompKeep) {\n    if (isPair(item))\n        return item.toString(ctx, onComment, onChompKeep);\n    if (isAlias(item)) {\n        if (ctx.doc.directives)\n            return item.toString(ctx);\n        if (ctx.resolvedAliases?.has(item)) {\n            throw new TypeError(`Cannot stringify circular structure without alias nodes`);\n        }\n        else {\n            if (ctx.resolvedAliases)\n                ctx.resolvedAliases.add(item);\n            else\n                ctx.resolvedAliases = new Set([item]);\n            item = item.resolve(ctx.doc);\n        }\n    }\n    let tagObj = undefined;\n    const node = isNode(item)\n        ? item\n        : ctx.doc.createNode(item, { onTagObj: o => (tagObj = o) });\n    tagObj ?? (tagObj = getTagObject(ctx.doc.schema.tags, node));\n    const props = stringifyProps(node, tagObj, ctx);\n    if (props.length > 0)\n        ctx.indentAtStart = (ctx.indentAtStart ?? 0) + props.length + 1;\n    const str = typeof tagObj.stringify === 'function'\n        ? tagObj.stringify(node, ctx, onComment, onChompKeep)\n        : isScalar(node)\n            ? stringifyString(node, ctx, onComment, onChompKeep)\n            : node.toString(ctx, onComment, onChompKeep);\n    if (!props)\n        return str;\n    return isScalar(node) || str[0] === '{' || str[0] === '['\n        ? `${props} ${str}`\n        : `${props}\\n${ctx.indent}${str}`;\n}\n\nexport { createStringifyContext, stringify };\n","import { isCollection, isNode, isScalar, isSeq } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\nimport { stringify } from './stringify.js';\nimport { lineComment, indentComment } from './stringifyComment.js';\n\nfunction stringifyPair({ key, value }, ctx, onComment, onChompKeep) {\n    const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx;\n    let keyComment = (isNode(key) && key.comment) || null;\n    if (simpleKeys) {\n        if (keyComment) {\n            throw new Error('With simple keys, key nodes cannot have comments');\n        }\n        if (isCollection(key) || (!isNode(key) && typeof key === 'object')) {\n            const msg = 'With simple keys, collection cannot be used as a key value';\n            throw new Error(msg);\n        }\n    }\n    let explicitKey = !simpleKeys &&\n        (!key ||\n            (keyComment && value == null && !ctx.inFlow) ||\n            isCollection(key) ||\n            (isScalar(key)\n                ? key.type === Scalar.BLOCK_FOLDED || key.type === Scalar.BLOCK_LITERAL\n                : typeof key === 'object'));\n    ctx = Object.assign({}, ctx, {\n        allNullValues: false,\n        implicitKey: !explicitKey && (simpleKeys || !allNullValues),\n        indent: indent + indentStep\n    });\n    let keyCommentDone = false;\n    let chompKeep = false;\n    let str = stringify(key, ctx, () => (keyCommentDone = true), () => (chompKeep = true));\n    if (!explicitKey && !ctx.inFlow && str.length > 1024) {\n        if (simpleKeys)\n            throw new Error('With simple keys, single line scalar must not span more than 1024 characters');\n        explicitKey = true;\n    }\n    if (ctx.inFlow) {\n        if (allNullValues || value == null) {\n            if (keyCommentDone && onComment)\n                onComment();\n            return str === '' ? '?' : explicitKey ? `? ${str}` : str;\n        }\n    }\n    else if ((allNullValues && !simpleKeys) || (value == null && explicitKey)) {\n        str = `? ${str}`;\n        if (keyComment && !keyCommentDone) {\n            str += lineComment(str, ctx.indent, commentString(keyComment));\n        }\n        else if (chompKeep && onChompKeep)\n            onChompKeep();\n        return str;\n    }\n    if (keyCommentDone)\n        keyComment = null;\n    if (explicitKey) {\n        if (keyComment)\n            str += lineComment(str, ctx.indent, commentString(keyComment));\n        str = `? ${str}\\n${indent}:`;\n    }\n    else {\n        str = `${str}:`;\n        if (keyComment)\n            str += lineComment(str, ctx.indent, commentString(keyComment));\n    }\n    let vsb, vcb, valueComment;\n    if (isNode(value)) {\n        vsb = !!value.spaceBefore;\n        vcb = value.commentBefore;\n        valueComment = value.comment;\n    }\n    else {\n        vsb = false;\n        vcb = null;\n        valueComment = null;\n        if (value && typeof value === 'object')\n            value = doc.createNode(value);\n    }\n    ctx.implicitKey = false;\n    if (!explicitKey && !keyComment && isScalar(value))\n        ctx.indentAtStart = str.length + 1;\n    chompKeep = false;\n    if (!indentSeq &&\n        indentStep.length >= 2 &&\n        !ctx.inFlow &&\n        !explicitKey &&\n        isSeq(value) &&\n        !value.flow &&\n        !value.tag &&\n        !value.anchor) {\n        // If indentSeq === false, consider '- ' as part of indentation where possible\n        ctx.indent = ctx.indent.substring(2);\n    }\n    let valueCommentDone = false;\n    const valueStr = stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true));\n    let ws = ' ';\n    if (keyComment || vsb || vcb) {\n        ws = vsb ? '\\n' : '';\n        if (vcb) {\n            const cs = commentString(vcb);\n            ws += `\\n${indentComment(cs, ctx.indent)}`;\n        }\n        if (valueStr === '' && !ctx.inFlow) {\n            if (ws === '\\n')\n                ws = '\\n\\n';\n        }\n        else {\n            ws += `\\n${ctx.indent}`;\n        }\n    }\n    else if (!explicitKey && isCollection(value)) {\n        const vs0 = valueStr[0];\n        const nl0 = valueStr.indexOf('\\n');\n        const hasNewline = nl0 !== -1;\n        const flow = ctx.inFlow ?? value.flow ?? value.items.length === 0;\n        if (hasNewline || !flow) {\n            let hasPropsLine = false;\n            if (hasNewline && (vs0 === '&' || vs0 === '!')) {\n                let sp0 = valueStr.indexOf(' ');\n                if (vs0 === '&' &&\n                    sp0 !== -1 &&\n                    sp0 < nl0 &&\n                    valueStr[sp0 + 1] === '!') {\n                    sp0 = valueStr.indexOf(' ', sp0 + 1);\n                }\n                if (sp0 === -1 || nl0 < sp0)\n                    hasPropsLine = true;\n            }\n            if (!hasPropsLine)\n                ws = `\\n${ctx.indent}`;\n        }\n    }\n    else if (valueStr === '' || valueStr[0] === '\\n') {\n        ws = '';\n    }\n    str += ws + valueStr;\n    if (ctx.inFlow) {\n        if (valueCommentDone && onComment)\n            onComment();\n    }\n    else if (valueComment && !valueCommentDone) {\n        str += lineComment(str, ctx.indent, commentString(valueComment));\n    }\n    else if (chompKeep && onChompKeep) {\n        onChompKeep();\n    }\n    return str;\n}\n\nexport { stringifyPair };\n","function debug(logLevel, ...messages) {\n    if (logLevel === 'debug')\n        console.log(...messages);\n}\nfunction warn(logLevel, warning) {\n    if (logLevel === 'debug' || logLevel === 'warn') {\n        console.warn(warning);\n    }\n}\n\nexport { debug, warn };\n","import { isScalar, isAlias, isSeq, isMap } from '../../nodes/identity.js';\nimport { Scalar } from '../../nodes/Scalar.js';\n\n// If the value associated with a merge key is a single mapping node, each of\n// its key/value pairs is inserted into the current mapping, unless the key\n// already exists in it. If the value associated with the merge key is a\n// sequence, then this sequence is expected to contain mapping nodes and each\n// of these nodes is merged in turn according to its order in the sequence.\n// Keys in mapping nodes earlier in the sequence override keys specified in\n// later mapping nodes. -- http://yaml.org/type/merge.html\nconst MERGE_KEY = '<<';\nconst merge = {\n    identify: value => value === MERGE_KEY ||\n        (typeof value === 'symbol' && value.description === MERGE_KEY),\n    default: 'key',\n    tag: 'tag:yaml.org,2002:merge',\n    test: /^<<$/,\n    resolve: () => Object.assign(new Scalar(Symbol(MERGE_KEY)), {\n        addToJSMap: addMergeToJSMap\n    }),\n    stringify: () => MERGE_KEY\n};\nconst isMergeKey = (ctx, key) => (merge.identify(key) ||\n    (isScalar(key) &&\n        (!key.type || key.type === Scalar.PLAIN) &&\n        merge.identify(key.value))) &&\n    ctx?.doc.schema.tags.some(tag => tag.tag === merge.tag && tag.default);\nfunction addMergeToJSMap(ctx, map, value) {\n    value = ctx && isAlias(value) ? value.resolve(ctx.doc) : value;\n    if (isSeq(value))\n        for (const it of value.items)\n            mergeValue(ctx, map, it);\n    else if (Array.isArray(value))\n        for (const it of value)\n            mergeValue(ctx, map, it);\n    else\n        mergeValue(ctx, map, value);\n}\nfunction mergeValue(ctx, map, value) {\n    const source = ctx && isAlias(value) ? value.resolve(ctx.doc) : value;\n    if (!isMap(source))\n        throw new Error('Merge sources must be maps or map aliases');\n    const srcMap = source.toJSON(null, ctx, Map);\n    for (const [key, value] of srcMap) {\n        if (map instanceof Map) {\n            if (!map.has(key))\n                map.set(key, value);\n        }\n        else if (map instanceof Set) {\n            map.add(key);\n        }\n        else if (!Object.prototype.hasOwnProperty.call(map, key)) {\n            Object.defineProperty(map, key, {\n                value,\n                writable: true,\n                enumerable: true,\n                configurable: true\n            });\n        }\n    }\n    return map;\n}\n\nexport { addMergeToJSMap, isMergeKey, merge };\n","import { warn } from '../log.js';\nimport { isMergeKey, addMergeToJSMap } from '../schema/yaml-1.1/merge.js';\nimport { createStringifyContext } from '../stringify/stringify.js';\nimport { isNode } from './identity.js';\nimport { toJS } from './toJS.js';\n\nfunction addPairToJSMap(ctx, map, { key, value }) {\n    if (isNode(key) && key.addToJSMap)\n        key.addToJSMap(ctx, map, value);\n    // TODO: Should drop this special case for bare << handling\n    else if (isMergeKey(ctx, key))\n        addMergeToJSMap(ctx, map, value);\n    else {\n        const jsKey = toJS(key, '', ctx);\n        if (map instanceof Map) {\n            map.set(jsKey, toJS(value, jsKey, ctx));\n        }\n        else if (map instanceof Set) {\n            map.add(jsKey);\n        }\n        else {\n            const stringKey = stringifyKey(key, jsKey, ctx);\n            const jsValue = toJS(value, stringKey, ctx);\n            if (stringKey in map)\n                Object.defineProperty(map, stringKey, {\n                    value: jsValue,\n                    writable: true,\n                    enumerable: true,\n                    configurable: true\n                });\n            else\n                map[stringKey] = jsValue;\n        }\n    }\n    return map;\n}\nfunction stringifyKey(key, jsKey, ctx) {\n    if (jsKey === null)\n        return '';\n    // eslint-disable-next-line @typescript-eslint/no-base-to-string\n    if (typeof jsKey !== 'object')\n        return String(jsKey);\n    if (isNode(key) && ctx?.doc) {\n        const strCtx = createStringifyContext(ctx.doc, {});\n        strCtx.anchors = new Set();\n        for (const node of ctx.anchors.keys())\n            strCtx.anchors.add(node.anchor);\n        strCtx.inFlow = true;\n        strCtx.inStringifyKey = true;\n        const strKey = key.toString(strCtx);\n        if (!ctx.mapKeyWarned) {\n            let jsonStr = JSON.stringify(strKey);\n            if (jsonStr.length > 40)\n                jsonStr = jsonStr.substring(0, 36) + '...\"';\n            warn(ctx.doc.options.logLevel, `Keys with collection values will be stringified due to JS Object restrictions: ${jsonStr}. Set mapAsMap: true to use object keys.`);\n            ctx.mapKeyWarned = true;\n        }\n        return strKey;\n    }\n    return JSON.stringify(jsKey);\n}\n\nexport { addPairToJSMap };\n","import { createNode } from '../doc/createNode.js';\nimport { stringifyPair } from '../stringify/stringifyPair.js';\nimport { addPairToJSMap } from './addPairToJSMap.js';\nimport { NODE_TYPE, PAIR, isNode } from './identity.js';\n\nfunction createPair(key, value, ctx) {\n    const k = createNode(key, undefined, ctx);\n    const v = createNode(value, undefined, ctx);\n    return new Pair(k, v);\n}\nclass Pair {\n    constructor(key, value = null) {\n        Object.defineProperty(this, NODE_TYPE, { value: PAIR });\n        this.key = key;\n        this.value = value;\n    }\n    clone(schema) {\n        let { key, value } = this;\n        if (isNode(key))\n            key = key.clone(schema);\n        if (isNode(value))\n            value = value.clone(schema);\n        return new Pair(key, value);\n    }\n    toJSON(_, ctx) {\n        const pair = ctx?.mapAsMap ? new Map() : {};\n        return addPairToJSMap(ctx, pair, this);\n    }\n    toString(ctx, onComment, onChompKeep) {\n        return ctx?.doc\n            ? stringifyPair(this, ctx, onComment, onChompKeep)\n            : JSON.stringify(this);\n    }\n}\n\nexport { Pair, createPair };\n","import { isNode, isPair } from '../nodes/identity.js';\nimport { stringify } from './stringify.js';\nimport { lineComment, indentComment } from './stringifyComment.js';\n\nfunction stringifyCollection(collection, ctx, options) {\n    const flow = ctx.inFlow ?? collection.flow;\n    const stringify = flow ? stringifyFlowCollection : stringifyBlockCollection;\n    return stringify(collection, ctx, options);\n}\nfunction stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) {\n    const { indent, options: { commentString } } = ctx;\n    const itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null });\n    let chompKeep = false; // flag for the preceding node's status\n    const lines = [];\n    for (let i = 0; i < items.length; ++i) {\n        const item = items[i];\n        let comment = null;\n        if (isNode(item)) {\n            if (!chompKeep && item.spaceBefore)\n                lines.push('');\n            addCommentBefore(ctx, lines, item.commentBefore, chompKeep);\n            if (item.comment)\n                comment = item.comment;\n        }\n        else if (isPair(item)) {\n            const ik = isNode(item.key) ? item.key : null;\n            if (ik) {\n                if (!chompKeep && ik.spaceBefore)\n                    lines.push('');\n                addCommentBefore(ctx, lines, ik.commentBefore, chompKeep);\n            }\n        }\n        chompKeep = false;\n        let str = stringify(item, itemCtx, () => (comment = null), () => (chompKeep = true));\n        if (comment)\n            str += lineComment(str, itemIndent, commentString(comment));\n        if (chompKeep && comment)\n            chompKeep = false;\n        lines.push(blockItemPrefix + str);\n    }\n    let str;\n    if (lines.length === 0) {\n        str = flowChars.start + flowChars.end;\n    }\n    else {\n        str = lines[0];\n        for (let i = 1; i < lines.length; ++i) {\n            const line = lines[i];\n            str += line ? `\\n${indent}${line}` : '\\n';\n        }\n    }\n    if (comment) {\n        str += '\\n' + indentComment(commentString(comment), indent);\n        if (onComment)\n            onComment();\n    }\n    else if (chompKeep && onChompKeep)\n        onChompKeep();\n    return str;\n}\nfunction stringifyFlowCollection({ items }, ctx, { flowChars, itemIndent }) {\n    const { indent, indentStep, flowCollectionPadding: fcPadding, options: { commentString } } = ctx;\n    itemIndent += indentStep;\n    const itemCtx = Object.assign({}, ctx, {\n        indent: itemIndent,\n        inFlow: true,\n        type: null\n    });\n    let reqNewline = false;\n    let linesAtValue = 0;\n    const lines = [];\n    for (let i = 0; i < items.length; ++i) {\n        const item = items[i];\n        let comment = null;\n        if (isNode(item)) {\n            if (item.spaceBefore)\n                lines.push('');\n            addCommentBefore(ctx, lines, item.commentBefore, false);\n            if (item.comment)\n                comment = item.comment;\n        }\n        else if (isPair(item)) {\n            const ik = isNode(item.key) ? item.key : null;\n            if (ik) {\n                if (ik.spaceBefore)\n                    lines.push('');\n                addCommentBefore(ctx, lines, ik.commentBefore, false);\n                if (ik.comment)\n                    reqNewline = true;\n            }\n            const iv = isNode(item.value) ? item.value : null;\n            if (iv) {\n                if (iv.comment)\n                    comment = iv.comment;\n                if (iv.commentBefore)\n                    reqNewline = true;\n            }\n            else if (item.value == null && ik?.comment) {\n                comment = ik.comment;\n            }\n        }\n        if (comment)\n            reqNewline = true;\n        let str = stringify(item, itemCtx, () => (comment = null));\n        if (i < items.length - 1)\n            str += ',';\n        if (comment)\n            str += lineComment(str, itemIndent, commentString(comment));\n        if (!reqNewline && (lines.length > linesAtValue || str.includes('\\n')))\n            reqNewline = true;\n        lines.push(str);\n        linesAtValue = lines.length;\n    }\n    const { start, end } = flowChars;\n    if (lines.length === 0) {\n        return start + end;\n    }\n    else {\n        if (!reqNewline) {\n            const len = lines.reduce((sum, line) => sum + line.length + 2, 2);\n            reqNewline = ctx.options.lineWidth > 0 && len > ctx.options.lineWidth;\n        }\n        if (reqNewline) {\n            let str = start;\n            for (const line of lines)\n                str += line ? `\\n${indentStep}${indent}${line}` : '\\n';\n            return `${str}\\n${indent}${end}`;\n        }\n        else {\n            return `${start}${fcPadding}${lines.join(' ')}${fcPadding}${end}`;\n        }\n    }\n}\nfunction addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) {\n    if (comment && chompKeep)\n        comment = comment.replace(/^\\n+/, '');\n    if (comment) {\n        const ic = indentComment(commentString(comment), indent);\n        lines.push(ic.trimStart()); // Avoid double indent on first line\n    }\n}\n\nexport { stringifyCollection };\n","import { stringifyCollection } from '../stringify/stringifyCollection.js';\nimport { addPairToJSMap } from './addPairToJSMap.js';\nimport { Collection } from './Collection.js';\nimport { MAP, isPair, isScalar } from './identity.js';\nimport { Pair, createPair } from './Pair.js';\nimport { isScalarValue } from './Scalar.js';\n\nfunction findPair(items, key) {\n    const k = isScalar(key) ? key.value : key;\n    for (const it of items) {\n        if (isPair(it)) {\n            if (it.key === key || it.key === k)\n                return it;\n            if (isScalar(it.key) && it.key.value === k)\n                return it;\n        }\n    }\n    return undefined;\n}\nclass YAMLMap extends Collection {\n    static get tagName() {\n        return 'tag:yaml.org,2002:map';\n    }\n    constructor(schema) {\n        super(MAP, schema);\n        this.items = [];\n    }\n    /**\n     * A generic collection parsing method that can be extended\n     * to other node classes that inherit from YAMLMap\n     */\n    static from(schema, obj, ctx) {\n        const { keepUndefined, replacer } = ctx;\n        const map = new this(schema);\n        const add = (key, value) => {\n            if (typeof replacer === 'function')\n                value = replacer.call(obj, key, value);\n            else if (Array.isArray(replacer) && !replacer.includes(key))\n                return;\n            if (value !== undefined || keepUndefined)\n                map.items.push(createPair(key, value, ctx));\n        };\n        if (obj instanceof Map) {\n            for (const [key, value] of obj)\n                add(key, value);\n        }\n        else if (obj && typeof obj === 'object') {\n            for (const key of Object.keys(obj))\n                add(key, obj[key]);\n        }\n        if (typeof schema.sortMapEntries === 'function') {\n            map.items.sort(schema.sortMapEntries);\n        }\n        return map;\n    }\n    /**\n     * Adds a value to the collection.\n     *\n     * @param overwrite - If not set `true`, using a key that is already in the\n     *   collection will throw. Otherwise, overwrites the previous value.\n     */\n    add(pair, overwrite) {\n        let _pair;\n        if (isPair(pair))\n            _pair = pair;\n        else if (!pair || typeof pair !== 'object' || !('key' in pair)) {\n            // In TypeScript, this never happens.\n            _pair = new Pair(pair, pair?.value);\n        }\n        else\n            _pair = new Pair(pair.key, pair.value);\n        const prev = findPair(this.items, _pair.key);\n        const sortEntries = this.schema?.sortMapEntries;\n        if (prev) {\n            if (!overwrite)\n                throw new Error(`Key ${_pair.key} already set`);\n            // For scalars, keep the old node & its comments and anchors\n            if (isScalar(prev.value) && isScalarValue(_pair.value))\n                prev.value.value = _pair.value;\n            else\n                prev.value = _pair.value;\n        }\n        else if (sortEntries) {\n            const i = this.items.findIndex(item => sortEntries(_pair, item) < 0);\n            if (i === -1)\n                this.items.push(_pair);\n            else\n                this.items.splice(i, 0, _pair);\n        }\n        else {\n            this.items.push(_pair);\n        }\n    }\n    delete(key) {\n        const it = findPair(this.items, key);\n        if (!it)\n            return false;\n        const del = this.items.splice(this.items.indexOf(it), 1);\n        return del.length > 0;\n    }\n    get(key, keepScalar) {\n        const it = findPair(this.items, key);\n        const node = it?.value;\n        return (!keepScalar && isScalar(node) ? node.value : node) ?? undefined;\n    }\n    has(key) {\n        return !!findPair(this.items, key);\n    }\n    set(key, value) {\n        this.add(new Pair(key, value), true);\n    }\n    /**\n     * @param ctx - Conversion context, originally set in Document#toJS()\n     * @param {Class} Type - If set, forces the returned collection type\n     * @returns Instance of Type, Map, or Object\n     */\n    toJSON(_, ctx, Type) {\n        const map = Type ? new Type() : ctx?.mapAsMap ? new Map() : {};\n        if (ctx?.onCreate)\n            ctx.onCreate(map);\n        for (const item of this.items)\n            addPairToJSMap(ctx, map, item);\n        return map;\n    }\n    toString(ctx, onComment, onChompKeep) {\n        if (!ctx)\n            return JSON.stringify(this);\n        for (const item of this.items) {\n            if (!isPair(item))\n                throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`);\n        }\n        if (!ctx.allNullValues && this.hasAllNullValues(false))\n            ctx = Object.assign({}, ctx, { allNullValues: true });\n        return stringifyCollection(this, ctx, {\n            blockItemPrefix: '',\n            flowChars: { start: '{', end: '}' },\n            itemIndent: ctx.indent || '',\n            onChompKeep,\n            onComment\n        });\n    }\n}\n\nexport { YAMLMap, findPair };\n","import { isMap } from '../../nodes/identity.js';\nimport { YAMLMap } from '../../nodes/YAMLMap.js';\n\nconst map = {\n    collection: 'map',\n    default: true,\n    nodeClass: YAMLMap,\n    tag: 'tag:yaml.org,2002:map',\n    resolve(map, onError) {\n        if (!isMap(map))\n            onError('Expected a mapping for this tag');\n        return map;\n    },\n    createNode: (schema, obj, ctx) => YAMLMap.from(schema, obj, ctx)\n};\n\nexport { map };\n","import { createNode } from '../doc/createNode.js';\nimport { stringifyCollection } from '../stringify/stringifyCollection.js';\nimport { Collection } from './Collection.js';\nimport { SEQ, isScalar } from './identity.js';\nimport { isScalarValue } from './Scalar.js';\nimport { toJS } from './toJS.js';\n\nclass YAMLSeq extends Collection {\n    static get tagName() {\n        return 'tag:yaml.org,2002:seq';\n    }\n    constructor(schema) {\n        super(SEQ, schema);\n        this.items = [];\n    }\n    add(value) {\n        this.items.push(value);\n    }\n    /**\n     * Removes a value from the collection.\n     *\n     * `key` must contain a representation of an integer for this to succeed.\n     * It may be wrapped in a `Scalar`.\n     *\n     * @returns `true` if the item was found and removed.\n     */\n    delete(key) {\n        const idx = asItemIndex(key);\n        if (typeof idx !== 'number')\n            return false;\n        const del = this.items.splice(idx, 1);\n        return del.length > 0;\n    }\n    get(key, keepScalar) {\n        const idx = asItemIndex(key);\n        if (typeof idx !== 'number')\n            return undefined;\n        const it = this.items[idx];\n        return !keepScalar && isScalar(it) ? it.value : it;\n    }\n    /**\n     * Checks if the collection includes a value with the key `key`.\n     *\n     * `key` must contain a representation of an integer for this to succeed.\n     * It may be wrapped in a `Scalar`.\n     */\n    has(key) {\n        const idx = asItemIndex(key);\n        return typeof idx === 'number' && idx < this.items.length;\n    }\n    /**\n     * Sets a value in this collection. For `!!set`, `value` needs to be a\n     * boolean to add/remove the item from the set.\n     *\n     * If `key` does not contain a representation of an integer, this will throw.\n     * It may be wrapped in a `Scalar`.\n     */\n    set(key, value) {\n        const idx = asItemIndex(key);\n        if (typeof idx !== 'number')\n            throw new Error(`Expected a valid index, not ${key}.`);\n        const prev = this.items[idx];\n        if (isScalar(prev) && isScalarValue(value))\n            prev.value = value;\n        else\n            this.items[idx] = value;\n    }\n    toJSON(_, ctx) {\n        const seq = [];\n        if (ctx?.onCreate)\n            ctx.onCreate(seq);\n        let i = 0;\n        for (const item of this.items)\n            seq.push(toJS(item, String(i++), ctx));\n        return seq;\n    }\n    toString(ctx, onComment, onChompKeep) {\n        if (!ctx)\n            return JSON.stringify(this);\n        return stringifyCollection(this, ctx, {\n            blockItemPrefix: '- ',\n            flowChars: { start: '[', end: ']' },\n            itemIndent: (ctx.indent || '') + '  ',\n            onChompKeep,\n            onComment\n        });\n    }\n    static from(schema, obj, ctx) {\n        const { replacer } = ctx;\n        const seq = new this(schema);\n        if (obj && Symbol.iterator in Object(obj)) {\n            let i = 0;\n            for (let it of obj) {\n                if (typeof replacer === 'function') {\n                    const key = obj instanceof Set ? it : String(i++);\n                    it = replacer.call(obj, key, it);\n                }\n                seq.items.push(createNode(it, undefined, ctx));\n            }\n        }\n        return seq;\n    }\n}\nfunction asItemIndex(key) {\n    let idx = isScalar(key) ? key.value : key;\n    if (idx && typeof idx === 'string')\n        idx = Number(idx);\n    return typeof idx === 'number' && Number.isInteger(idx) && idx >= 0\n        ? idx\n        : null;\n}\n\nexport { YAMLSeq };\n","import { isSeq } from '../../nodes/identity.js';\nimport { YAMLSeq } from '../../nodes/YAMLSeq.js';\n\nconst seq = {\n    collection: 'seq',\n    default: true,\n    nodeClass: YAMLSeq,\n    tag: 'tag:yaml.org,2002:seq',\n    resolve(seq, onError) {\n        if (!isSeq(seq))\n            onError('Expected a sequence for this tag');\n        return seq;\n    },\n    createNode: (schema, obj, ctx) => YAMLSeq.from(schema, obj, ctx)\n};\n\nexport { seq };\n","import { stringifyString } from '../../stringify/stringifyString.js';\n\nconst string = {\n    identify: value => typeof value === 'string',\n    default: true,\n    tag: 'tag:yaml.org,2002:str',\n    resolve: str => str,\n    stringify(item, ctx, onComment, onChompKeep) {\n        ctx = Object.assign({ actualString: true }, ctx);\n        return stringifyString(item, ctx, onComment, onChompKeep);\n    }\n};\n\nexport { string };\n","import { Scalar } from '../../nodes/Scalar.js';\n\nconst nullTag = {\n    identify: value => value == null,\n    createNode: () => new Scalar(null),\n    default: true,\n    tag: 'tag:yaml.org,2002:null',\n    test: /^(?:~|[Nn]ull|NULL)?$/,\n    resolve: () => new Scalar(null),\n    stringify: ({ source }, ctx) => typeof source === 'string' && nullTag.test.test(source)\n        ? source\n        : ctx.options.nullStr\n};\n\nexport { nullTag };\n","import { Scalar } from '../../nodes/Scalar.js';\n\nconst boolTag = {\n    identify: value => typeof value === 'boolean',\n    default: true,\n    tag: 'tag:yaml.org,2002:bool',\n    test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,\n    resolve: str => new Scalar(str[0] === 't' || str[0] === 'T'),\n    stringify({ source, value }, ctx) {\n        if (source && boolTag.test.test(source)) {\n            const sv = source[0] === 't' || source[0] === 'T';\n            if (value === sv)\n                return source;\n        }\n        return value ? ctx.options.trueStr : ctx.options.falseStr;\n    }\n};\n\nexport { boolTag };\n","function stringifyNumber({ format, minFractionDigits, tag, value }) {\n    if (typeof value === 'bigint')\n        return String(value);\n    const num = typeof value === 'number' ? value : Number(value);\n    if (!isFinite(num))\n        return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf';\n    let n = JSON.stringify(value);\n    if (!format &&\n        minFractionDigits &&\n        (!tag || tag === 'tag:yaml.org,2002:float') &&\n        /^\\d/.test(n)) {\n        let i = n.indexOf('.');\n        if (i < 0) {\n            i = n.length;\n            n += '.';\n        }\n        let d = minFractionDigits - (n.length - i - 1);\n        while (d-- > 0)\n            n += '0';\n    }\n    return n;\n}\n\nexport { stringifyNumber };\n","import { Scalar } from '../../nodes/Scalar.js';\nimport { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst floatNaN = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n    resolve: str => str.slice(-3).toLowerCase() === 'nan'\n        ? NaN\n        : str[0] === '-'\n            ? Number.NEGATIVE_INFINITY\n            : Number.POSITIVE_INFINITY,\n    stringify: stringifyNumber\n};\nconst floatExp = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    format: 'EXP',\n    test: /^[-+]?(?:\\.[0-9]+|[0-9]+(?:\\.[0-9]*)?)[eE][-+]?[0-9]+$/,\n    resolve: str => parseFloat(str),\n    stringify(node) {\n        const num = Number(node.value);\n        return isFinite(num) ? num.toExponential() : stringifyNumber(node);\n    }\n};\nconst float = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    test: /^[-+]?(?:\\.[0-9]+|[0-9]+\\.[0-9]*)$/,\n    resolve(str) {\n        const node = new Scalar(parseFloat(str));\n        const dot = str.indexOf('.');\n        if (dot !== -1 && str[str.length - 1] === '0')\n            node.minFractionDigits = str.length - dot - 1;\n        return node;\n    },\n    stringify: stringifyNumber\n};\n\nexport { float, floatExp, floatNaN };\n","import { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nconst intResolve = (str, offset, radix, { intAsBigInt }) => (intAsBigInt ? BigInt(str) : parseInt(str.substring(offset), radix));\nfunction intStringify(node, radix, prefix) {\n    const { value } = node;\n    if (intIdentify(value) && value >= 0)\n        return prefix + value.toString(radix);\n    return stringifyNumber(node);\n}\nconst intOct = {\n    identify: value => intIdentify(value) && value >= 0,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'OCT',\n    test: /^0o[0-7]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 2, 8, opt),\n    stringify: node => intStringify(node, 8, '0o')\n};\nconst int = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    test: /^[-+]?[0-9]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n    stringify: stringifyNumber\n};\nconst intHex = {\n    identify: value => intIdentify(value) && value >= 0,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'HEX',\n    test: /^0x[0-9a-fA-F]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n    stringify: node => intStringify(node, 16, '0x')\n};\n\nexport { int, intHex, intOct };\n","import { map } from '../common/map.js';\nimport { nullTag } from '../common/null.js';\nimport { seq } from '../common/seq.js';\nimport { string } from '../common/string.js';\nimport { boolTag } from './bool.js';\nimport { floatNaN, floatExp, float } from './float.js';\nimport { intOct, int, intHex } from './int.js';\n\nconst schema = [\n    map,\n    seq,\n    string,\n    nullTag,\n    boolTag,\n    intOct,\n    int,\n    intHex,\n    floatNaN,\n    floatExp,\n    float\n];\n\nexport { schema };\n","import { Scalar } from '../../nodes/Scalar.js';\nimport { map } from '../common/map.js';\nimport { seq } from '../common/seq.js';\n\nfunction intIdentify(value) {\n    return typeof value === 'bigint' || Number.isInteger(value);\n}\nconst stringifyJSON = ({ value }) => JSON.stringify(value);\nconst jsonScalars = [\n    {\n        identify: value => typeof value === 'string',\n        default: true,\n        tag: 'tag:yaml.org,2002:str',\n        resolve: str => str,\n        stringify: stringifyJSON\n    },\n    {\n        identify: value => value == null,\n        createNode: () => new Scalar(null),\n        default: true,\n        tag: 'tag:yaml.org,2002:null',\n        test: /^null$/,\n        resolve: () => null,\n        stringify: stringifyJSON\n    },\n    {\n        identify: value => typeof value === 'boolean',\n        default: true,\n        tag: 'tag:yaml.org,2002:bool',\n        test: /^true$|^false$/,\n        resolve: str => str === 'true',\n        stringify: stringifyJSON\n    },\n    {\n        identify: intIdentify,\n        default: true,\n        tag: 'tag:yaml.org,2002:int',\n        test: /^-?(?:0|[1-9][0-9]*)$/,\n        resolve: (str, _onError, { intAsBigInt }) => intAsBigInt ? BigInt(str) : parseInt(str, 10),\n        stringify: ({ value }) => intIdentify(value) ? value.toString() : JSON.stringify(value)\n    },\n    {\n        identify: value => typeof value === 'number',\n        default: true,\n        tag: 'tag:yaml.org,2002:float',\n        test: /^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,\n        resolve: str => parseFloat(str),\n        stringify: stringifyJSON\n    }\n];\nconst jsonError = {\n    default: true,\n    tag: '',\n    test: /^/,\n    resolve(str, onError) {\n        onError(`Unresolved plain scalar ${JSON.stringify(str)}`);\n        return str;\n    }\n};\nconst schema = [map, seq].concat(jsonScalars, jsonError);\n\nexport { schema };\n","import { Scalar } from '../../nodes/Scalar.js';\nimport { stringifyString } from '../../stringify/stringifyString.js';\n\nconst binary = {\n    identify: value => value instanceof Uint8Array, // Buffer inherits from Uint8Array\n    default: false,\n    tag: 'tag:yaml.org,2002:binary',\n    /**\n     * Returns a Buffer in node and an Uint8Array in browsers\n     *\n     * To use the resulting buffer as an image, you'll want to do something like:\n     *\n     *   const blob = new Blob([buffer], { type: 'image/jpeg' })\n     *   document.querySelector('#photo').src = URL.createObjectURL(blob)\n     */\n    resolve(src, onError) {\n        if (typeof atob === 'function') {\n            // On IE 11, atob() can't handle newlines\n            const str = atob(src.replace(/[\\n\\r]/g, ''));\n            const buffer = new Uint8Array(str.length);\n            for (let i = 0; i < str.length; ++i)\n                buffer[i] = str.charCodeAt(i);\n            return buffer;\n        }\n        else {\n            onError('This environment does not support reading binary tags; either Buffer or atob is required');\n            return src;\n        }\n    },\n    stringify({ comment, type, value }, ctx, onComment, onChompKeep) {\n        if (!value)\n            return '';\n        const buf = value; // checked earlier by binary.identify()\n        let str;\n        if (typeof btoa === 'function') {\n            let s = '';\n            for (let i = 0; i < buf.length; ++i)\n                s += String.fromCharCode(buf[i]);\n            str = btoa(s);\n        }\n        else {\n            throw new Error('This environment does not support writing binary tags; either Buffer or btoa is required');\n        }\n        type ?? (type = Scalar.BLOCK_LITERAL);\n        if (type !== Scalar.QUOTE_DOUBLE) {\n            const lineWidth = Math.max(ctx.options.lineWidth - ctx.indent.length, ctx.options.minContentWidth);\n            const n = Math.ceil(str.length / lineWidth);\n            const lines = new Array(n);\n            for (let i = 0, o = 0; i < n; ++i, o += lineWidth) {\n                lines[i] = str.substr(o, lineWidth);\n            }\n            str = lines.join(type === Scalar.BLOCK_LITERAL ? '\\n' : ' ');\n        }\n        return stringifyString({ comment, type, value: str }, ctx, onComment, onChompKeep);\n    }\n};\n\nexport { binary };\n","import { isSeq, isPair, isMap } from '../../nodes/identity.js';\nimport { createPair, Pair } from '../../nodes/Pair.js';\nimport { Scalar } from '../../nodes/Scalar.js';\nimport { YAMLSeq } from '../../nodes/YAMLSeq.js';\n\nfunction resolvePairs(seq, onError) {\n    if (isSeq(seq)) {\n        for (let i = 0; i < seq.items.length; ++i) {\n            let item = seq.items[i];\n            if (isPair(item))\n                continue;\n            else if (isMap(item)) {\n                if (item.items.length > 1)\n                    onError('Each pair must have its own sequence indicator');\n                const pair = item.items[0] || new Pair(new Scalar(null));\n                if (item.commentBefore)\n                    pair.key.commentBefore = pair.key.commentBefore\n                        ? `${item.commentBefore}\\n${pair.key.commentBefore}`\n                        : item.commentBefore;\n                if (item.comment) {\n                    const cn = pair.value ?? pair.key;\n                    cn.comment = cn.comment\n                        ? `${item.comment}\\n${cn.comment}`\n                        : item.comment;\n                }\n                item = pair;\n            }\n            seq.items[i] = isPair(item) ? item : new Pair(item);\n        }\n    }\n    else\n        onError('Expected a sequence for this tag');\n    return seq;\n}\nfunction createPairs(schema, iterable, ctx) {\n    const { replacer } = ctx;\n    const pairs = new YAMLSeq(schema);\n    pairs.tag = 'tag:yaml.org,2002:pairs';\n    let i = 0;\n    if (iterable && Symbol.iterator in Object(iterable))\n        for (let it of iterable) {\n            if (typeof replacer === 'function')\n                it = replacer.call(iterable, String(i++), it);\n            let key, value;\n            if (Array.isArray(it)) {\n                if (it.length === 2) {\n                    key = it[0];\n                    value = it[1];\n                }\n                else\n                    throw new TypeError(`Expected [key, value] tuple: ${it}`);\n            }\n            else if (it && it instanceof Object) {\n                const keys = Object.keys(it);\n                if (keys.length === 1) {\n                    key = keys[0];\n                    value = it[key];\n                }\n                else {\n                    throw new TypeError(`Expected tuple with one key, not ${keys.length} keys`);\n                }\n            }\n            else {\n                key = it;\n            }\n            pairs.items.push(createPair(key, value, ctx));\n        }\n    return pairs;\n}\nconst pairs = {\n    collection: 'seq',\n    default: false,\n    tag: 'tag:yaml.org,2002:pairs',\n    resolve: resolvePairs,\n    createNode: createPairs\n};\n\nexport { createPairs, pairs, resolvePairs };\n","import { isScalar, isPair } from '../../nodes/identity.js';\nimport { toJS } from '../../nodes/toJS.js';\nimport { YAMLMap } from '../../nodes/YAMLMap.js';\nimport { YAMLSeq } from '../../nodes/YAMLSeq.js';\nimport { resolvePairs, createPairs } from './pairs.js';\n\nclass YAMLOMap extends YAMLSeq {\n    constructor() {\n        super();\n        this.add = YAMLMap.prototype.add.bind(this);\n        this.delete = YAMLMap.prototype.delete.bind(this);\n        this.get = YAMLMap.prototype.get.bind(this);\n        this.has = YAMLMap.prototype.has.bind(this);\n        this.set = YAMLMap.prototype.set.bind(this);\n        this.tag = YAMLOMap.tag;\n    }\n    /**\n     * If `ctx` is given, the return type is actually `Map<unknown, unknown>`,\n     * but TypeScript won't allow widening the signature of a child method.\n     */\n    toJSON(_, ctx) {\n        if (!ctx)\n            return super.toJSON(_);\n        const map = new Map();\n        if (ctx?.onCreate)\n            ctx.onCreate(map);\n        for (const pair of this.items) {\n            let key, value;\n            if (isPair(pair)) {\n                key = toJS(pair.key, '', ctx);\n                value = toJS(pair.value, key, ctx);\n            }\n            else {\n                key = toJS(pair, '', ctx);\n            }\n            if (map.has(key))\n                throw new Error('Ordered maps must not include duplicate keys');\n            map.set(key, value);\n        }\n        return map;\n    }\n    static from(schema, iterable, ctx) {\n        const pairs = createPairs(schema, iterable, ctx);\n        const omap = new this();\n        omap.items = pairs.items;\n        return omap;\n    }\n}\nYAMLOMap.tag = 'tag:yaml.org,2002:omap';\nconst omap = {\n    collection: 'seq',\n    identify: value => value instanceof Map,\n    nodeClass: YAMLOMap,\n    default: false,\n    tag: 'tag:yaml.org,2002:omap',\n    resolve(seq, onError) {\n        const pairs = resolvePairs(seq, onError);\n        const seenKeys = [];\n        for (const { key } of pairs.items) {\n            if (isScalar(key)) {\n                if (seenKeys.includes(key.value)) {\n                    onError(`Ordered maps must not include duplicate keys: ${key.value}`);\n                }\n                else {\n                    seenKeys.push(key.value);\n                }\n            }\n        }\n        return Object.assign(new YAMLOMap(), pairs);\n    },\n    createNode: (schema, iterable, ctx) => YAMLOMap.from(schema, iterable, ctx)\n};\n\nexport { YAMLOMap, omap };\n","import { Scalar } from '../../nodes/Scalar.js';\n\nfunction boolStringify({ value, source }, ctx) {\n    const boolObj = value ? trueTag : falseTag;\n    if (source && boolObj.test.test(source))\n        return source;\n    return value ? ctx.options.trueStr : ctx.options.falseStr;\n}\nconst trueTag = {\n    identify: value => value === true,\n    default: true,\n    tag: 'tag:yaml.org,2002:bool',\n    test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,\n    resolve: () => new Scalar(true),\n    stringify: boolStringify\n};\nconst falseTag = {\n    identify: value => value === false,\n    default: true,\n    tag: 'tag:yaml.org,2002:bool',\n    test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,\n    resolve: () => new Scalar(false),\n    stringify: boolStringify\n};\n\nexport { falseTag, trueTag };\n","import { Scalar } from '../../nodes/Scalar.js';\nimport { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst floatNaN = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n    resolve: (str) => str.slice(-3).toLowerCase() === 'nan'\n        ? NaN\n        : str[0] === '-'\n            ? Number.NEGATIVE_INFINITY\n            : Number.POSITIVE_INFINITY,\n    stringify: stringifyNumber\n};\nconst floatExp = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    format: 'EXP',\n    test: /^[-+]?(?:[0-9][0-9_]*)?(?:\\.[0-9_]*)?[eE][-+]?[0-9]+$/,\n    resolve: (str) => parseFloat(str.replace(/_/g, '')),\n    stringify(node) {\n        const num = Number(node.value);\n        return isFinite(num) ? num.toExponential() : stringifyNumber(node);\n    }\n};\nconst float = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    test: /^[-+]?(?:[0-9][0-9_]*)?\\.[0-9_]*$/,\n    resolve(str) {\n        const node = new Scalar(parseFloat(str.replace(/_/g, '')));\n        const dot = str.indexOf('.');\n        if (dot !== -1) {\n            const f = str.substring(dot + 1).replace(/_/g, '');\n            if (f[f.length - 1] === '0')\n                node.minFractionDigits = f.length;\n        }\n        return node;\n    },\n    stringify: stringifyNumber\n};\n\nexport { float, floatExp, floatNaN };\n","import { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nfunction intResolve(str, offset, radix, { intAsBigInt }) {\n    const sign = str[0];\n    if (sign === '-' || sign === '+')\n        offset += 1;\n    str = str.substring(offset).replace(/_/g, '');\n    if (intAsBigInt) {\n        switch (radix) {\n            case 2:\n                str = `0b${str}`;\n                break;\n            case 8:\n                str = `0o${str}`;\n                break;\n            case 16:\n                str = `0x${str}`;\n                break;\n        }\n        const n = BigInt(str);\n        return sign === '-' ? BigInt(-1) * n : n;\n    }\n    const n = parseInt(str, radix);\n    return sign === '-' ? -1 * n : n;\n}\nfunction intStringify(node, radix, prefix) {\n    const { value } = node;\n    if (intIdentify(value)) {\n        const str = value.toString(radix);\n        return value < 0 ? '-' + prefix + str.substr(1) : prefix + str;\n    }\n    return stringifyNumber(node);\n}\nconst intBin = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'BIN',\n    test: /^[-+]?0b[0-1_]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 2, 2, opt),\n    stringify: node => intStringify(node, 2, '0b')\n};\nconst intOct = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'OCT',\n    test: /^[-+]?0[0-7_]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 1, 8, opt),\n    stringify: node => intStringify(node, 8, '0')\n};\nconst int = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    test: /^[-+]?[0-9][0-9_]*$/,\n    resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n    stringify: stringifyNumber\n};\nconst intHex = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'HEX',\n    test: /^[-+]?0x[0-9a-fA-F_]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n    stringify: node => intStringify(node, 16, '0x')\n};\n\nexport { int, intBin, intHex, intOct };\n","import { isMap, isPair, isScalar } from '../../nodes/identity.js';\nimport { Pair, createPair } from '../../nodes/Pair.js';\nimport { YAMLMap, findPair } from '../../nodes/YAMLMap.js';\n\nclass YAMLSet extends YAMLMap {\n    constructor(schema) {\n        super(schema);\n        this.tag = YAMLSet.tag;\n    }\n    add(key) {\n        let pair;\n        if (isPair(key))\n            pair = key;\n        else if (key &&\n            typeof key === 'object' &&\n            'key' in key &&\n            'value' in key &&\n            key.value === null)\n            pair = new Pair(key.key, null);\n        else\n            pair = new Pair(key, null);\n        const prev = findPair(this.items, pair.key);\n        if (!prev)\n            this.items.push(pair);\n    }\n    /**\n     * If `keepPair` is `true`, returns the Pair matching `key`.\n     * Otherwise, returns the value of that Pair's key.\n     */\n    get(key, keepPair) {\n        const pair = findPair(this.items, key);\n        return !keepPair && isPair(pair)\n            ? isScalar(pair.key)\n                ? pair.key.value\n                : pair.key\n            : pair;\n    }\n    set(key, value) {\n        if (typeof value !== 'boolean')\n            throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);\n        const prev = findPair(this.items, key);\n        if (prev && !value) {\n            this.items.splice(this.items.indexOf(prev), 1);\n        }\n        else if (!prev && value) {\n            this.items.push(new Pair(key));\n        }\n    }\n    toJSON(_, ctx) {\n        return super.toJSON(_, ctx, Set);\n    }\n    toString(ctx, onComment, onChompKeep) {\n        if (!ctx)\n            return JSON.stringify(this);\n        if (this.hasAllNullValues(true))\n            return super.toString(Object.assign({}, ctx, { allNullValues: true }), onComment, onChompKeep);\n        else\n            throw new Error('Set items must all have null values');\n    }\n    static from(schema, iterable, ctx) {\n        const { replacer } = ctx;\n        const set = new this(schema);\n        if (iterable && Symbol.iterator in Object(iterable))\n            for (let value of iterable) {\n                if (typeof replacer === 'function')\n                    value = replacer.call(iterable, value, value);\n                set.items.push(createPair(value, null, ctx));\n            }\n        return set;\n    }\n}\nYAMLSet.tag = 'tag:yaml.org,2002:set';\nconst set = {\n    collection: 'map',\n    identify: value => value instanceof Set,\n    nodeClass: YAMLSet,\n    default: false,\n    tag: 'tag:yaml.org,2002:set',\n    createNode: (schema, iterable, ctx) => YAMLSet.from(schema, iterable, ctx),\n    resolve(map, onError) {\n        if (isMap(map)) {\n            if (map.hasAllNullValues(true))\n                return Object.assign(new YAMLSet(), map);\n            else\n                onError('Set items must all have null values');\n        }\n        else\n            onError('Expected a mapping for this tag');\n        return map;\n    }\n};\n\nexport { YAMLSet, set };\n","import { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\n/** Internal types handle bigint as number, because TS can't figure it out. */\nfunction parseSexagesimal(str, asBigInt) {\n    const sign = str[0];\n    const parts = sign === '-' || sign === '+' ? str.substring(1) : str;\n    const num = (n) => asBigInt ? BigInt(n) : Number(n);\n    const res = parts\n        .replace(/_/g, '')\n        .split(':')\n        .reduce((res, p) => res * num(60) + num(p), num(0));\n    return (sign === '-' ? num(-1) * res : res);\n}\n/**\n * hhhh:mm:ss.sss\n *\n * Internal types handle bigint as number, because TS can't figure it out.\n */\nfunction stringifySexagesimal(node) {\n    let { value } = node;\n    let num = (n) => n;\n    if (typeof value === 'bigint')\n        num = n => BigInt(n);\n    else if (isNaN(value) || !isFinite(value))\n        return stringifyNumber(node);\n    let sign = '';\n    if (value < 0) {\n        sign = '-';\n        value *= num(-1);\n    }\n    const _60 = num(60);\n    const parts = [value % _60]; // seconds, including ms\n    if (value < 60) {\n        parts.unshift(0); // at least one : is required\n    }\n    else {\n        value = (value - parts[0]) / _60;\n        parts.unshift(value % _60); // minutes\n        if (value >= 60) {\n            value = (value - parts[0]) / _60;\n            parts.unshift(value); // hours\n        }\n    }\n    return (sign +\n        parts\n            .map(n => String(n).padStart(2, '0'))\n            .join(':')\n            .replace(/000000\\d*$/, '') // % 60 may introduce error\n    );\n}\nconst intTime = {\n    identify: value => typeof value === 'bigint' || Number.isInteger(value),\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'TIME',\n    test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,\n    resolve: (str, _onError, { intAsBigInt }) => parseSexagesimal(str, intAsBigInt),\n    stringify: stringifySexagesimal\n};\nconst floatTime = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    format: 'TIME',\n    test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*$/,\n    resolve: str => parseSexagesimal(str, false),\n    stringify: stringifySexagesimal\n};\nconst timestamp = {\n    identify: value => value instanceof Date,\n    default: true,\n    tag: 'tag:yaml.org,2002:timestamp',\n    // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part\n    // may be omitted altogether, resulting in a date format. In such a case, the time part is\n    // assumed to be 00:00:00Z (start of day, UTC).\n    test: RegExp('^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd\n        '(?:' + // time is optional\n        '(?:t|T|[ \\\\t]+)' + // t | T | whitespace\n        '([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)?\n        '(?:[ \\\\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30\n        ')?$'),\n    resolve(str) {\n        const match = str.match(timestamp.test);\n        if (!match)\n            throw new Error('!!timestamp expects a date, starting with yyyy-mm-dd');\n        const [, year, month, day, hour, minute, second] = match.map(Number);\n        const millisec = match[7] ? Number((match[7] + '00').substr(1, 3)) : 0;\n        let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec);\n        const tz = match[8];\n        if (tz && tz !== 'Z') {\n            let d = parseSexagesimal(tz, false);\n            if (Math.abs(d) < 30)\n                d *= 60;\n            date -= 60000 * d;\n        }\n        return new Date(date);\n    },\n    stringify: ({ value }) => value?.toISOString().replace(/(T00:00:00)?\\.000Z$/, '') ?? ''\n};\n\nexport { floatTime, intTime, timestamp };\n","import { map } from '../common/map.js';\nimport { nullTag } from '../common/null.js';\nimport { seq } from '../common/seq.js';\nimport { string } from '../common/string.js';\nimport { binary } from './binary.js';\nimport { trueTag, falseTag } from './bool.js';\nimport { floatNaN, floatExp, float } from './float.js';\nimport { intBin, intOct, int, intHex } from './int.js';\nimport { merge } from './merge.js';\nimport { omap } from './omap.js';\nimport { pairs } from './pairs.js';\nimport { set } from './set.js';\nimport { intTime, floatTime, timestamp } from './timestamp.js';\n\nconst schema = [\n    map,\n    seq,\n    string,\n    nullTag,\n    trueTag,\n    falseTag,\n    intBin,\n    intOct,\n    int,\n    intHex,\n    floatNaN,\n    floatExp,\n    float,\n    binary,\n    merge,\n    omap,\n    pairs,\n    set,\n    intTime,\n    floatTime,\n    timestamp\n];\n\nexport { schema };\n","import { map } from './common/map.js';\nimport { nullTag } from './common/null.js';\nimport { seq } from './common/seq.js';\nimport { string } from './common/string.js';\nimport { boolTag } from './core/bool.js';\nimport { floatNaN, floatExp, float } from './core/float.js';\nimport { intOct, intHex, int } from './core/int.js';\nimport { schema } from './core/schema.js';\nimport { schema as schema$1 } from './json/schema.js';\nimport { binary } from './yaml-1.1/binary.js';\nimport { merge } from './yaml-1.1/merge.js';\nimport { omap } from './yaml-1.1/omap.js';\nimport { pairs } from './yaml-1.1/pairs.js';\nimport { schema as schema$2 } from './yaml-1.1/schema.js';\nimport { set } from './yaml-1.1/set.js';\nimport { timestamp, intTime, floatTime } from './yaml-1.1/timestamp.js';\n\nconst schemas = new Map([\n    ['core', schema],\n    ['failsafe', [map, seq, string]],\n    ['json', schema$1],\n    ['yaml11', schema$2],\n    ['yaml-1.1', schema$2]\n]);\nconst tagsByName = {\n    binary,\n    bool: boolTag,\n    float,\n    floatExp,\n    floatNaN,\n    floatTime,\n    int,\n    intHex,\n    intOct,\n    intTime,\n    map,\n    merge,\n    null: nullTag,\n    omap,\n    pairs,\n    seq,\n    set,\n    timestamp\n};\nconst coreKnownTags = {\n    'tag:yaml.org,2002:binary': binary,\n    'tag:yaml.org,2002:merge': merge,\n    'tag:yaml.org,2002:omap': omap,\n    'tag:yaml.org,2002:pairs': pairs,\n    'tag:yaml.org,2002:set': set,\n    'tag:yaml.org,2002:timestamp': timestamp\n};\nfunction getTags(customTags, schemaName, addMergeTag) {\n    const schemaTags = schemas.get(schemaName);\n    if (schemaTags && !customTags) {\n        return addMergeTag && !schemaTags.includes(merge)\n            ? schemaTags.concat(merge)\n            : schemaTags.slice();\n    }\n    let tags = schemaTags;\n    if (!tags) {\n        if (Array.isArray(customTags))\n            tags = [];\n        else {\n            const keys = Array.from(schemas.keys())\n                .filter(key => key !== 'yaml11')\n                .map(key => JSON.stringify(key))\n                .join(', ');\n            throw new Error(`Unknown schema \"${schemaName}\"; use one of ${keys} or define customTags array`);\n        }\n    }\n    if (Array.isArray(customTags)) {\n        for (const tag of customTags)\n            tags = tags.concat(tag);\n    }\n    else if (typeof customTags === 'function') {\n        tags = customTags(tags.slice());\n    }\n    if (addMergeTag)\n        tags = tags.concat(merge);\n    return tags.reduce((tags, tag) => {\n        const tagObj = typeof tag === 'string' ? tagsByName[tag] : tag;\n        if (!tagObj) {\n            const tagName = JSON.stringify(tag);\n            const keys = Object.keys(tagsByName)\n                .map(key => JSON.stringify(key))\n                .join(', ');\n            throw new Error(`Unknown custom tag ${tagName}; use one of ${keys}`);\n        }\n        if (!tags.includes(tagObj))\n            tags.push(tagObj);\n        return tags;\n    }, []);\n}\n\nexport { coreKnownTags, getTags };\n","import { MAP, SCALAR, SEQ } from '../nodes/identity.js';\nimport { map } from './common/map.js';\nimport { seq } from './common/seq.js';\nimport { string } from './common/string.js';\nimport { getTags, coreKnownTags } from './tags.js';\n\nconst sortMapEntriesByKey = (a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0;\nclass Schema {\n    constructor({ compat, customTags, merge, resolveKnownTags, schema, sortMapEntries, toStringDefaults }) {\n        this.compat = Array.isArray(compat)\n            ? getTags(compat, 'compat')\n            : compat\n                ? getTags(null, compat)\n                : null;\n        this.name = (typeof schema === 'string' && schema) || 'core';\n        this.knownTags = resolveKnownTags ? coreKnownTags : {};\n        this.tags = getTags(customTags, this.name, merge);\n        this.toStringOptions = toStringDefaults ?? null;\n        Object.defineProperty(this, MAP, { value: map });\n        Object.defineProperty(this, SCALAR, { value: string });\n        Object.defineProperty(this, SEQ, { value: seq });\n        // Used by createMap()\n        this.sortMapEntries =\n            typeof sortMapEntries === 'function'\n                ? sortMapEntries\n                : sortMapEntries === true\n                    ? sortMapEntriesByKey\n                    : null;\n    }\n    clone() {\n        const copy = Object.create(Schema.prototype, Object.getOwnPropertyDescriptors(this));\n        copy.tags = this.tags.slice();\n        return copy;\n    }\n}\n\nexport { Schema };\n","import { isNode } from '../nodes/identity.js';\nimport { createStringifyContext, stringify } from './stringify.js';\nimport { indentComment, lineComment } from './stringifyComment.js';\n\nfunction stringifyDocument(doc, options) {\n    const lines = [];\n    let hasDirectives = options.directives === true;\n    if (options.directives !== false && doc.directives) {\n        const dir = doc.directives.toString(doc);\n        if (dir) {\n            lines.push(dir);\n            hasDirectives = true;\n        }\n        else if (doc.directives.docStart)\n            hasDirectives = true;\n    }\n    if (hasDirectives)\n        lines.push('---');\n    const ctx = createStringifyContext(doc, options);\n    const { commentString } = ctx.options;\n    if (doc.commentBefore) {\n        if (lines.length !== 1)\n            lines.unshift('');\n        const cs = commentString(doc.commentBefore);\n        lines.unshift(indentComment(cs, ''));\n    }\n    let chompKeep = false;\n    let contentComment = null;\n    if (doc.contents) {\n        if (isNode(doc.contents)) {\n            if (doc.contents.spaceBefore && hasDirectives)\n                lines.push('');\n            if (doc.contents.commentBefore) {\n                const cs = commentString(doc.contents.commentBefore);\n                lines.push(indentComment(cs, ''));\n            }\n            // top-level block scalars need to be indented if followed by a comment\n            ctx.forceBlockIndent = !!doc.comment;\n            contentComment = doc.contents.comment;\n        }\n        const onChompKeep = contentComment ? undefined : () => (chompKeep = true);\n        let body = stringify(doc.contents, ctx, () => (contentComment = null), onChompKeep);\n        if (contentComment)\n            body += lineComment(body, '', commentString(contentComment));\n        if ((body[0] === '|' || body[0] === '>') &&\n            lines[lines.length - 1] === '---') {\n            // Top-level block scalars with a preceding doc marker ought to use the\n            // same line for their header.\n            lines[lines.length - 1] = `--- ${body}`;\n        }\n        else\n            lines.push(body);\n    }\n    else {\n        lines.push(stringify(doc.contents, ctx));\n    }\n    if (doc.directives?.docEnd) {\n        if (doc.comment) {\n            const cs = commentString(doc.comment);\n            if (cs.includes('\\n')) {\n                lines.push('...');\n                lines.push(indentComment(cs, ''));\n            }\n            else {\n                lines.push(`... ${cs}`);\n            }\n        }\n        else {\n            lines.push('...');\n        }\n    }\n    else {\n        let dc = doc.comment;\n        if (dc && chompKeep)\n            dc = dc.replace(/^\\n+/, '');\n        if (dc) {\n            if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '')\n                lines.push('');\n            lines.push(indentComment(commentString(dc), ''));\n        }\n    }\n    return lines.join('\\n') + '\\n';\n}\n\nexport { stringifyDocument };\n","import { Alias } from '../nodes/Alias.js';\nimport { isEmptyPath, collectionFromPath } from '../nodes/Collection.js';\nimport { NODE_TYPE, DOC, isNode, isCollection, isScalar } from '../nodes/identity.js';\nimport { Pair } from '../nodes/Pair.js';\nimport { toJS } from '../nodes/toJS.js';\nimport { Schema } from '../schema/Schema.js';\nimport { stringifyDocument } from '../stringify/stringifyDocument.js';\nimport { anchorNames, findNewAnchor, createNodeAnchors } from './anchors.js';\nimport { applyReviver } from './applyReviver.js';\nimport { createNode } from './createNode.js';\nimport { Directives } from './directives.js';\n\nclass Document {\n    constructor(value, replacer, options) {\n        /** A comment before this Document */\n        this.commentBefore = null;\n        /** A comment immediately after this Document */\n        this.comment = null;\n        /** Errors encountered during parsing. */\n        this.errors = [];\n        /** Warnings encountered during parsing. */\n        this.warnings = [];\n        Object.defineProperty(this, NODE_TYPE, { value: DOC });\n        let _replacer = null;\n        if (typeof replacer === 'function' || Array.isArray(replacer)) {\n            _replacer = replacer;\n        }\n        else if (options === undefined && replacer) {\n            options = replacer;\n            replacer = undefined;\n        }\n        const opt = Object.assign({\n            intAsBigInt: false,\n            keepSourceTokens: false,\n            logLevel: 'warn',\n            prettyErrors: true,\n            strict: true,\n            stringKeys: false,\n            uniqueKeys: true,\n            version: '1.2'\n        }, options);\n        this.options = opt;\n        let { version } = opt;\n        if (options?._directives) {\n            this.directives = options._directives.atDocument();\n            if (this.directives.yaml.explicit)\n                version = this.directives.yaml.version;\n        }\n        else\n            this.directives = new Directives({ version });\n        this.setSchema(version, options);\n        // @ts-expect-error We can't really know that this matches Contents.\n        this.contents =\n            value === undefined ? null : this.createNode(value, _replacer, options);\n    }\n    /**\n     * Create a deep copy of this Document and its contents.\n     *\n     * Custom Node values that inherit from `Object` still refer to their original instances.\n     */\n    clone() {\n        const copy = Object.create(Document.prototype, {\n            [NODE_TYPE]: { value: DOC }\n        });\n        copy.commentBefore = this.commentBefore;\n        copy.comment = this.comment;\n        copy.errors = this.errors.slice();\n        copy.warnings = this.warnings.slice();\n        copy.options = Object.assign({}, this.options);\n        if (this.directives)\n            copy.directives = this.directives.clone();\n        copy.schema = this.schema.clone();\n        // @ts-expect-error We can't really know that this matches Contents.\n        copy.contents = isNode(this.contents)\n            ? this.contents.clone(copy.schema)\n            : this.contents;\n        if (this.range)\n            copy.range = this.range.slice();\n        return copy;\n    }\n    /** Adds a value to the document. */\n    add(value) {\n        if (assertCollection(this.contents))\n            this.contents.add(value);\n    }\n    /** Adds a value to the document. */\n    addIn(path, value) {\n        if (assertCollection(this.contents))\n            this.contents.addIn(path, value);\n    }\n    /**\n     * Create a new `Alias` node, ensuring that the target `node` has the required anchor.\n     *\n     * If `node` already has an anchor, `name` is ignored.\n     * Otherwise, the `node.anchor` value will be set to `name`,\n     * or if an anchor with that name is already present in the document,\n     * `name` will be used as a prefix for a new unique anchor.\n     * If `name` is undefined, the generated anchor will use 'a' as a prefix.\n     */\n    createAlias(node, name) {\n        if (!node.anchor) {\n            const prev = anchorNames(this);\n            node.anchor =\n                // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n                !name || prev.has(name) ? findNewAnchor(name || 'a', prev) : name;\n        }\n        return new Alias(node.anchor);\n    }\n    createNode(value, replacer, options) {\n        let _replacer = undefined;\n        if (typeof replacer === 'function') {\n            value = replacer.call({ '': value }, '', value);\n            _replacer = replacer;\n        }\n        else if (Array.isArray(replacer)) {\n            const keyToStr = (v) => typeof v === 'number' || v instanceof String || v instanceof Number;\n            const asStr = replacer.filter(keyToStr).map(String);\n            if (asStr.length > 0)\n                replacer = replacer.concat(asStr);\n            _replacer = replacer;\n        }\n        else if (options === undefined && replacer) {\n            options = replacer;\n            replacer = undefined;\n        }\n        const { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options ?? {};\n        const { onAnchor, setAnchors, sourceObjects } = createNodeAnchors(this, \n        // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n        anchorPrefix || 'a');\n        const ctx = {\n            aliasDuplicateObjects: aliasDuplicateObjects ?? true,\n            keepUndefined: keepUndefined ?? false,\n            onAnchor,\n            onTagObj,\n            replacer: _replacer,\n            schema: this.schema,\n            sourceObjects\n        };\n        const node = createNode(value, tag, ctx);\n        if (flow && isCollection(node))\n            node.flow = true;\n        setAnchors();\n        return node;\n    }\n    /**\n     * Convert a key and a value into a `Pair` using the current schema,\n     * recursively wrapping all values as `Scalar` or `Collection` nodes.\n     */\n    createPair(key, value, options = {}) {\n        const k = this.createNode(key, null, options);\n        const v = this.createNode(value, null, options);\n        return new Pair(k, v);\n    }\n    /**\n     * Removes a value from the document.\n     * @returns `true` if the item was found and removed.\n     */\n    delete(key) {\n        return assertCollection(this.contents) ? this.contents.delete(key) : false;\n    }\n    /**\n     * Removes a value from the document.\n     * @returns `true` if the item was found and removed.\n     */\n    deleteIn(path) {\n        if (isEmptyPath(path)) {\n            if (this.contents == null)\n                return false;\n            // @ts-expect-error Presumed impossible if Strict extends false\n            this.contents = null;\n            return true;\n        }\n        return assertCollection(this.contents)\n            ? this.contents.deleteIn(path)\n            : false;\n    }\n    /**\n     * Returns item at `key`, or `undefined` if not found. By default unwraps\n     * scalar values from their surrounding node; to disable set `keepScalar` to\n     * `true` (collections are always returned intact).\n     */\n    get(key, keepScalar) {\n        return isCollection(this.contents)\n            ? this.contents.get(key, keepScalar)\n            : undefined;\n    }\n    /**\n     * Returns item at `path`, or `undefined` if not found. By default unwraps\n     * scalar values from their surrounding node; to disable set `keepScalar` to\n     * `true` (collections are always returned intact).\n     */\n    getIn(path, keepScalar) {\n        if (isEmptyPath(path))\n            return !keepScalar && isScalar(this.contents)\n                ? this.contents.value\n                : this.contents;\n        return isCollection(this.contents)\n            ? this.contents.getIn(path, keepScalar)\n            : undefined;\n    }\n    /**\n     * Checks if the document includes a value with the key `key`.\n     */\n    has(key) {\n        return isCollection(this.contents) ? this.contents.has(key) : false;\n    }\n    /**\n     * Checks if the document includes a value at `path`.\n     */\n    hasIn(path) {\n        if (isEmptyPath(path))\n            return this.contents !== undefined;\n        return isCollection(this.contents) ? this.contents.hasIn(path) : false;\n    }\n    /**\n     * Sets a value in this document. For `!!set`, `value` needs to be a\n     * boolean to add/remove the item from the set.\n     */\n    set(key, value) {\n        if (this.contents == null) {\n            // @ts-expect-error We can't really know that this matches Contents.\n            this.contents = collectionFromPath(this.schema, [key], value);\n        }\n        else if (assertCollection(this.contents)) {\n            this.contents.set(key, value);\n        }\n    }\n    /**\n     * Sets a value in this document. For `!!set`, `value` needs to be a\n     * boolean to add/remove the item from the set.\n     */\n    setIn(path, value) {\n        if (isEmptyPath(path)) {\n            // @ts-expect-error We can't really know that this matches Contents.\n            this.contents = value;\n        }\n        else if (this.contents == null) {\n            // @ts-expect-error We can't really know that this matches Contents.\n            this.contents = collectionFromPath(this.schema, Array.from(path), value);\n        }\n        else if (assertCollection(this.contents)) {\n            this.contents.setIn(path, value);\n        }\n    }\n    /**\n     * Change the YAML version and schema used by the document.\n     * A `null` version disables support for directives, explicit tags, anchors, and aliases.\n     * It also requires the `schema` option to be given as a `Schema` instance value.\n     *\n     * Overrides all previously set schema options.\n     */\n    setSchema(version, options = {}) {\n        if (typeof version === 'number')\n            version = String(version);\n        let opt;\n        switch (version) {\n            case '1.1':\n                if (this.directives)\n                    this.directives.yaml.version = '1.1';\n                else\n                    this.directives = new Directives({ version: '1.1' });\n                opt = { resolveKnownTags: false, schema: 'yaml-1.1' };\n                break;\n            case '1.2':\n            case 'next':\n                if (this.directives)\n                    this.directives.yaml.version = version;\n                else\n                    this.directives = new Directives({ version });\n                opt = { resolveKnownTags: true, schema: 'core' };\n                break;\n            case null:\n                if (this.directives)\n                    delete this.directives;\n                opt = null;\n                break;\n            default: {\n                const sv = JSON.stringify(version);\n                throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${sv}`);\n            }\n        }\n        // Not using `instanceof Schema` to allow for duck typing\n        if (options.schema instanceof Object)\n            this.schema = options.schema;\n        else if (opt)\n            this.schema = new Schema(Object.assign(opt, options));\n        else\n            throw new Error(`With a null YAML version, the { schema: Schema } option is required`);\n    }\n    // json & jsonArg are only used from toJSON()\n    toJS({ json, jsonArg, mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n        const ctx = {\n            anchors: new Map(),\n            doc: this,\n            keep: !json,\n            mapAsMap: mapAsMap === true,\n            mapKeyWarned: false,\n            maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n        };\n        const res = toJS(this.contents, jsonArg ?? '', ctx);\n        if (typeof onAnchor === 'function')\n            for (const { count, res } of ctx.anchors.values())\n                onAnchor(res, count);\n        return typeof reviver === 'function'\n            ? applyReviver(reviver, { '': res }, '', res)\n            : res;\n    }\n    /**\n     * A JSON representation of the document `contents`.\n     *\n     * @param jsonArg Used by `JSON.stringify` to indicate the array index or\n     *   property name.\n     */\n    toJSON(jsonArg, onAnchor) {\n        return this.toJS({ json: true, jsonArg, mapAsMap: false, onAnchor });\n    }\n    /** A YAML representation of the document. */\n    toString(options = {}) {\n        if (this.errors.length > 0)\n            throw new Error('Document with errors cannot be stringified');\n        if ('indent' in options &&\n            (!Number.isInteger(options.indent) || Number(options.indent) <= 0)) {\n            const s = JSON.stringify(options.indent);\n            throw new Error(`\"indent\" option must be a positive integer, not ${s}`);\n        }\n        return stringifyDocument(this, options);\n    }\n}\nfunction assertCollection(contents) {\n    if (isCollection(contents))\n        return true;\n    throw new Error('Expected a YAML collection as document contents');\n}\n\nexport { Document };\n","class YAMLError extends Error {\n    constructor(name, pos, code, message) {\n        super();\n        this.name = name;\n        this.code = code;\n        this.message = message;\n        this.pos = pos;\n    }\n}\nclass YAMLParseError extends YAMLError {\n    constructor(pos, code, message) {\n        super('YAMLParseError', pos, code, message);\n    }\n}\nclass YAMLWarning extends YAMLError {\n    constructor(pos, code, message) {\n        super('YAMLWarning', pos, code, message);\n    }\n}\nconst prettifyError = (src, lc) => (error) => {\n    if (error.pos[0] === -1)\n        return;\n    error.linePos = error.pos.map(pos => lc.linePos(pos));\n    const { line, col } = error.linePos[0];\n    error.message += ` at line ${line}, column ${col}`;\n    let ci = col - 1;\n    let lineStr = src\n        .substring(lc.lineStarts[line - 1], lc.lineStarts[line])\n        .replace(/[\\n\\r]+$/, '');\n    // Trim to max 80 chars, keeping col position near the middle\n    if (ci >= 60 && lineStr.length > 80) {\n        const trimStart = Math.min(ci - 39, lineStr.length - 79);\n        lineStr = '…' + lineStr.substring(trimStart);\n        ci -= trimStart - 1;\n    }\n    if (lineStr.length > 80)\n        lineStr = lineStr.substring(0, 79) + '…';\n    // Include previous line in context if pointing at line start\n    if (line > 1 && /^ *$/.test(lineStr.substring(0, ci))) {\n        // Regexp won't match if start is trimmed\n        let prev = src.substring(lc.lineStarts[line - 2], lc.lineStarts[line - 1]);\n        if (prev.length > 80)\n            prev = prev.substring(0, 79) + '…\\n';\n        lineStr = prev + lineStr;\n    }\n    if (/[^ ]/.test(lineStr)) {\n        let count = 1;\n        const end = error.linePos[1];\n        if (end && end.line === line && end.col > col) {\n            count = Math.max(1, Math.min(end.col - col, 80 - ci));\n        }\n        const pointer = ' '.repeat(ci) + '^'.repeat(count);\n        error.message += `:\\n\\n${lineStr}\\n${pointer}\\n`;\n    }\n};\n\nexport { YAMLError, YAMLParseError, YAMLWarning, prettifyError };\n","function resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {\n    let spaceBefore = false;\n    let atNewline = startOnNewline;\n    let hasSpace = startOnNewline;\n    let comment = '';\n    let commentSep = '';\n    let hasNewline = false;\n    let reqSpace = false;\n    let tab = null;\n    let anchor = null;\n    let tag = null;\n    let newlineAfterProp = null;\n    let comma = null;\n    let found = null;\n    let start = null;\n    for (const token of tokens) {\n        if (reqSpace) {\n            if (token.type !== 'space' &&\n                token.type !== 'newline' &&\n                token.type !== 'comma')\n                onError(token.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n            reqSpace = false;\n        }\n        if (tab) {\n            if (atNewline && token.type !== 'comment' && token.type !== 'newline') {\n                onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n            }\n            tab = null;\n        }\n        switch (token.type) {\n            case 'space':\n                // At the doc level, tabs at line start may be parsed\n                // as leading white space rather than indentation.\n                // In a flow collection, only the parser handles indent.\n                if (!flow &&\n                    (indicator !== 'doc-start' || next?.type !== 'flow-collection') &&\n                    token.source.includes('\\t')) {\n                    tab = token;\n                }\n                hasSpace = true;\n                break;\n            case 'comment': {\n                if (!hasSpace)\n                    onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n                const cb = token.source.substring(1) || ' ';\n                if (!comment)\n                    comment = cb;\n                else\n                    comment += commentSep + cb;\n                commentSep = '';\n                atNewline = false;\n                break;\n            }\n            case 'newline':\n                if (atNewline) {\n                    if (comment)\n                        comment += token.source;\n                    else if (!found || indicator !== 'seq-item-ind')\n                        spaceBefore = true;\n                }\n                else\n                    commentSep += token.source;\n                atNewline = true;\n                hasNewline = true;\n                if (anchor || tag)\n                    newlineAfterProp = token;\n                hasSpace = true;\n                break;\n            case 'anchor':\n                if (anchor)\n                    onError(token, 'MULTIPLE_ANCHORS', 'A node can have at most one anchor');\n                if (token.source.endsWith(':'))\n                    onError(token.offset + token.source.length - 1, 'BAD_ALIAS', 'Anchor ending in : is ambiguous', true);\n                anchor = token;\n                start ?? (start = token.offset);\n                atNewline = false;\n                hasSpace = false;\n                reqSpace = true;\n                break;\n            case 'tag': {\n                if (tag)\n                    onError(token, 'MULTIPLE_TAGS', 'A node can have at most one tag');\n                tag = token;\n                start ?? (start = token.offset);\n                atNewline = false;\n                hasSpace = false;\n                reqSpace = true;\n                break;\n            }\n            case indicator:\n                // Could here handle preceding comments differently\n                if (anchor || tag)\n                    onError(token, 'BAD_PROP_ORDER', `Anchors and tags must be after the ${token.source} indicator`);\n                if (found)\n                    onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.source} in ${flow ?? 'collection'}`);\n                found = token;\n                atNewline =\n                    indicator === 'seq-item-ind' || indicator === 'explicit-key-ind';\n                hasSpace = false;\n                break;\n            case 'comma':\n                if (flow) {\n                    if (comma)\n                        onError(token, 'UNEXPECTED_TOKEN', `Unexpected , in ${flow}`);\n                    comma = token;\n                    atNewline = false;\n                    hasSpace = false;\n                    break;\n                }\n            // else fallthrough\n            default:\n                onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.type} token`);\n                atNewline = false;\n                hasSpace = false;\n        }\n    }\n    const last = tokens[tokens.length - 1];\n    const end = last ? last.offset + last.source.length : offset;\n    if (reqSpace &&\n        next &&\n        next.type !== 'space' &&\n        next.type !== 'newline' &&\n        next.type !== 'comma' &&\n        (next.type !== 'scalar' || next.source !== '')) {\n        onError(next.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n    }\n    if (tab &&\n        ((atNewline && tab.indent <= parentIndent) ||\n            next?.type === 'block-map' ||\n            next?.type === 'block-seq'))\n        onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n    return {\n        comma,\n        found,\n        spaceBefore,\n        comment,\n        hasNewline,\n        anchor,\n        tag,\n        newlineAfterProp,\n        end,\n        start: start ?? end\n    };\n}\n\nexport { resolveProps };\n","function containsNewline(key) {\n    if (!key)\n        return null;\n    switch (key.type) {\n        case 'alias':\n        case 'scalar':\n        case 'double-quoted-scalar':\n        case 'single-quoted-scalar':\n            if (key.source.includes('\\n'))\n                return true;\n            if (key.end)\n                for (const st of key.end)\n                    if (st.type === 'newline')\n                        return true;\n            return false;\n        case 'flow-collection':\n            for (const it of key.items) {\n                for (const st of it.start)\n                    if (st.type === 'newline')\n                        return true;\n                if (it.sep)\n                    for (const st of it.sep)\n                        if (st.type === 'newline')\n                            return true;\n                if (containsNewline(it.key) || containsNewline(it.value))\n                    return true;\n            }\n            return false;\n        default:\n            return true;\n    }\n}\n\nexport { containsNewline };\n","import { containsNewline } from './util-contains-newline.js';\n\nfunction flowIndentCheck(indent, fc, onError) {\n    if (fc?.type === 'flow-collection') {\n        const end = fc.end[0];\n        if (end.indent === indent &&\n            (end.source === ']' || end.source === '}') &&\n            containsNewline(fc)) {\n            const msg = 'Flow end indicator should be more indented than parent';\n            onError(end, 'BAD_INDENT', msg, true);\n        }\n    }\n}\n\nexport { flowIndentCheck };\n","import { isScalar } from '../nodes/identity.js';\n\nfunction mapIncludes(ctx, items, search) {\n    const { uniqueKeys } = ctx.options;\n    if (uniqueKeys === false)\n        return false;\n    const isEqual = typeof uniqueKeys === 'function'\n        ? uniqueKeys\n        : (a, b) => a === b || (isScalar(a) && isScalar(b) && a.value === b.value);\n    return items.some(pair => isEqual(pair.key, search));\n}\n\nexport { mapIncludes };\n","import { Pair } from '../nodes/Pair.js';\nimport { YAMLMap } from '../nodes/YAMLMap.js';\nimport { resolveProps } from './resolve-props.js';\nimport { containsNewline } from './util-contains-newline.js';\nimport { flowIndentCheck } from './util-flow-indent-check.js';\nimport { mapIncludes } from './util-map-includes.js';\n\nconst startColMsg = 'All mapping items must start at the same column';\nfunction resolveBlockMap({ composeNode, composeEmptyNode }, ctx, bm, onError, tag) {\n    const NodeClass = tag?.nodeClass ?? YAMLMap;\n    const map = new NodeClass(ctx.schema);\n    if (ctx.atRoot)\n        ctx.atRoot = false;\n    let offset = bm.offset;\n    let commentEnd = null;\n    for (const collItem of bm.items) {\n        const { start, key, sep, value } = collItem;\n        // key properties\n        const keyProps = resolveProps(start, {\n            indicator: 'explicit-key-ind',\n            next: key ?? sep?.[0],\n            offset,\n            onError,\n            parentIndent: bm.indent,\n            startOnNewline: true\n        });\n        const implicitKey = !keyProps.found;\n        if (implicitKey) {\n            if (key) {\n                if (key.type === 'block-seq')\n                    onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'A block sequence may not be used as an implicit map key');\n                else if ('indent' in key && key.indent !== bm.indent)\n                    onError(offset, 'BAD_INDENT', startColMsg);\n            }\n            if (!keyProps.anchor && !keyProps.tag && !sep) {\n                commentEnd = keyProps.end;\n                if (keyProps.comment) {\n                    if (map.comment)\n                        map.comment += '\\n' + keyProps.comment;\n                    else\n                        map.comment = keyProps.comment;\n                }\n                continue;\n            }\n            if (keyProps.newlineAfterProp || containsNewline(key)) {\n                onError(key ?? start[start.length - 1], 'MULTILINE_IMPLICIT_KEY', 'Implicit keys need to be on a single line');\n            }\n        }\n        else if (keyProps.found?.indent !== bm.indent) {\n            onError(offset, 'BAD_INDENT', startColMsg);\n        }\n        // key value\n        ctx.atKey = true;\n        const keyStart = keyProps.end;\n        const keyNode = key\n            ? composeNode(ctx, key, keyProps, onError)\n            : composeEmptyNode(ctx, keyStart, start, null, keyProps, onError);\n        if (ctx.schema.compat)\n            flowIndentCheck(bm.indent, key, onError);\n        ctx.atKey = false;\n        if (mapIncludes(ctx, map.items, keyNode))\n            onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n        // value properties\n        const valueProps = resolveProps(sep ?? [], {\n            indicator: 'map-value-ind',\n            next: value,\n            offset: keyNode.range[2],\n            onError,\n            parentIndent: bm.indent,\n            startOnNewline: !key || key.type === 'block-scalar'\n        });\n        offset = valueProps.end;\n        if (valueProps.found) {\n            if (implicitKey) {\n                if (value?.type === 'block-map' && !valueProps.hasNewline)\n                    onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'Nested mappings are not allowed in compact mappings');\n                if (ctx.options.strict &&\n                    keyProps.start < valueProps.found.offset - 1024)\n                    onError(keyNode.range, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit block mapping key');\n            }\n            // value value\n            const valueNode = value\n                ? composeNode(ctx, value, valueProps, onError)\n                : composeEmptyNode(ctx, offset, sep, null, valueProps, onError);\n            if (ctx.schema.compat)\n                flowIndentCheck(bm.indent, value, onError);\n            offset = valueNode.range[2];\n            const pair = new Pair(keyNode, valueNode);\n            if (ctx.options.keepSourceTokens)\n                pair.srcToken = collItem;\n            map.items.push(pair);\n        }\n        else {\n            // key with no value\n            if (implicitKey)\n                onError(keyNode.range, 'MISSING_CHAR', 'Implicit map keys need to be followed by map values');\n            if (valueProps.comment) {\n                if (keyNode.comment)\n                    keyNode.comment += '\\n' + valueProps.comment;\n                else\n                    keyNode.comment = valueProps.comment;\n            }\n            const pair = new Pair(keyNode);\n            if (ctx.options.keepSourceTokens)\n                pair.srcToken = collItem;\n            map.items.push(pair);\n        }\n    }\n    if (commentEnd && commentEnd < offset)\n        onError(commentEnd, 'IMPOSSIBLE', 'Map comment with trailing content');\n    map.range = [bm.offset, offset, commentEnd ?? offset];\n    return map;\n}\n\nexport { resolveBlockMap };\n","import { YAMLSeq } from '../nodes/YAMLSeq.js';\nimport { resolveProps } from './resolve-props.js';\nimport { flowIndentCheck } from './util-flow-indent-check.js';\n\nfunction resolveBlockSeq({ composeNode, composeEmptyNode }, ctx, bs, onError, tag) {\n    const NodeClass = tag?.nodeClass ?? YAMLSeq;\n    const seq = new NodeClass(ctx.schema);\n    if (ctx.atRoot)\n        ctx.atRoot = false;\n    if (ctx.atKey)\n        ctx.atKey = false;\n    let offset = bs.offset;\n    let commentEnd = null;\n    for (const { start, value } of bs.items) {\n        const props = resolveProps(start, {\n            indicator: 'seq-item-ind',\n            next: value,\n            offset,\n            onError,\n            parentIndent: bs.indent,\n            startOnNewline: true\n        });\n        if (!props.found) {\n            if (props.anchor || props.tag || value) {\n                if (value && value.type === 'block-seq')\n                    onError(props.end, 'BAD_INDENT', 'All sequence items must start at the same column');\n                else\n                    onError(offset, 'MISSING_CHAR', 'Sequence item without - indicator');\n            }\n            else {\n                commentEnd = props.end;\n                if (props.comment)\n                    seq.comment = props.comment;\n                continue;\n            }\n        }\n        const node = value\n            ? composeNode(ctx, value, props, onError)\n            : composeEmptyNode(ctx, props.end, start, null, props, onError);\n        if (ctx.schema.compat)\n            flowIndentCheck(bs.indent, value, onError);\n        offset = node.range[2];\n        seq.items.push(node);\n    }\n    seq.range = [bs.offset, offset, commentEnd ?? offset];\n    return seq;\n}\n\nexport { resolveBlockSeq };\n","function resolveEnd(end, offset, reqSpace, onError) {\n    let comment = '';\n    if (end) {\n        let hasSpace = false;\n        let sep = '';\n        for (const token of end) {\n            const { source, type } = token;\n            switch (type) {\n                case 'space':\n                    hasSpace = true;\n                    break;\n                case 'comment': {\n                    if (reqSpace && !hasSpace)\n                        onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n                    const cb = source.substring(1) || ' ';\n                    if (!comment)\n                        comment = cb;\n                    else\n                        comment += sep + cb;\n                    sep = '';\n                    break;\n                }\n                case 'newline':\n                    if (comment)\n                        sep += source;\n                    hasSpace = true;\n                    break;\n                default:\n                    onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${type} at node end`);\n            }\n            offset += source.length;\n        }\n    }\n    return { comment, offset };\n}\n\nexport { resolveEnd };\n","import { isPair } from '../nodes/identity.js';\nimport { Pair } from '../nodes/Pair.js';\nimport { YAMLMap } from '../nodes/YAMLMap.js';\nimport { YAMLSeq } from '../nodes/YAMLSeq.js';\nimport { resolveEnd } from './resolve-end.js';\nimport { resolveProps } from './resolve-props.js';\nimport { containsNewline } from './util-contains-newline.js';\nimport { mapIncludes } from './util-map-includes.js';\n\nconst blockMsg = 'Block collections are not allowed within flow collections';\nconst isBlock = (token) => token && (token.type === 'block-map' || token.type === 'block-seq');\nfunction resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onError, tag) {\n    const isMap = fc.start.source === '{';\n    const fcName = isMap ? 'flow map' : 'flow sequence';\n    const NodeClass = (tag?.nodeClass ?? (isMap ? YAMLMap : YAMLSeq));\n    const coll = new NodeClass(ctx.schema);\n    coll.flow = true;\n    const atRoot = ctx.atRoot;\n    if (atRoot)\n        ctx.atRoot = false;\n    if (ctx.atKey)\n        ctx.atKey = false;\n    let offset = fc.offset + fc.start.source.length;\n    for (let i = 0; i < fc.items.length; ++i) {\n        const collItem = fc.items[i];\n        const { start, key, sep, value } = collItem;\n        const props = resolveProps(start, {\n            flow: fcName,\n            indicator: 'explicit-key-ind',\n            next: key ?? sep?.[0],\n            offset,\n            onError,\n            parentIndent: fc.indent,\n            startOnNewline: false\n        });\n        if (!props.found) {\n            if (!props.anchor && !props.tag && !sep && !value) {\n                if (i === 0 && props.comma)\n                    onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n                else if (i < fc.items.length - 1)\n                    onError(props.start, 'UNEXPECTED_TOKEN', `Unexpected empty item in ${fcName}`);\n                if (props.comment) {\n                    if (coll.comment)\n                        coll.comment += '\\n' + props.comment;\n                    else\n                        coll.comment = props.comment;\n                }\n                offset = props.end;\n                continue;\n            }\n            if (!isMap && ctx.options.strict && containsNewline(key))\n                onError(key, // checked by containsNewline()\n                'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n        }\n        if (i === 0) {\n            if (props.comma)\n                onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n        }\n        else {\n            if (!props.comma)\n                onError(props.start, 'MISSING_CHAR', `Missing , between ${fcName} items`);\n            if (props.comment) {\n                let prevItemComment = '';\n                loop: for (const st of start) {\n                    switch (st.type) {\n                        case 'comma':\n                        case 'space':\n                            break;\n                        case 'comment':\n                            prevItemComment = st.source.substring(1);\n                            break loop;\n                        default:\n                            break loop;\n                    }\n                }\n                if (prevItemComment) {\n                    let prev = coll.items[coll.items.length - 1];\n                    if (isPair(prev))\n                        prev = prev.value ?? prev.key;\n                    if (prev.comment)\n                        prev.comment += '\\n' + prevItemComment;\n                    else\n                        prev.comment = prevItemComment;\n                    props.comment = props.comment.substring(prevItemComment.length + 1);\n                }\n            }\n        }\n        if (!isMap && !sep && !props.found) {\n            // item is a value in a seq\n            // → key & sep are empty, start does not include ? or :\n            const valueNode = value\n                ? composeNode(ctx, value, props, onError)\n                : composeEmptyNode(ctx, props.end, sep, null, props, onError);\n            coll.items.push(valueNode);\n            offset = valueNode.range[2];\n            if (isBlock(value))\n                onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n        }\n        else {\n            // item is a key+value pair\n            // key value\n            ctx.atKey = true;\n            const keyStart = props.end;\n            const keyNode = key\n                ? composeNode(ctx, key, props, onError)\n                : composeEmptyNode(ctx, keyStart, start, null, props, onError);\n            if (isBlock(key))\n                onError(keyNode.range, 'BLOCK_IN_FLOW', blockMsg);\n            ctx.atKey = false;\n            // value properties\n            const valueProps = resolveProps(sep ?? [], {\n                flow: fcName,\n                indicator: 'map-value-ind',\n                next: value,\n                offset: keyNode.range[2],\n                onError,\n                parentIndent: fc.indent,\n                startOnNewline: false\n            });\n            if (valueProps.found) {\n                if (!isMap && !props.found && ctx.options.strict) {\n                    if (sep)\n                        for (const st of sep) {\n                            if (st === valueProps.found)\n                                break;\n                            if (st.type === 'newline') {\n                                onError(st, 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n                                break;\n                            }\n                        }\n                    if (props.start < valueProps.found.offset - 1024)\n                        onError(valueProps.found, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit flow sequence key');\n                }\n            }\n            else if (value) {\n                if ('source' in value && value.source && value.source[0] === ':')\n                    onError(value, 'MISSING_CHAR', `Missing space after : in ${fcName}`);\n                else\n                    onError(valueProps.start, 'MISSING_CHAR', `Missing , or : between ${fcName} items`);\n            }\n            // value value\n            const valueNode = value\n                ? composeNode(ctx, value, valueProps, onError)\n                : valueProps.found\n                    ? composeEmptyNode(ctx, valueProps.end, sep, null, valueProps, onError)\n                    : null;\n            if (valueNode) {\n                if (isBlock(value))\n                    onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n            }\n            else if (valueProps.comment) {\n                if (keyNode.comment)\n                    keyNode.comment += '\\n' + valueProps.comment;\n                else\n                    keyNode.comment = valueProps.comment;\n            }\n            const pair = new Pair(keyNode, valueNode);\n            if (ctx.options.keepSourceTokens)\n                pair.srcToken = collItem;\n            if (isMap) {\n                const map = coll;\n                if (mapIncludes(ctx, map.items, keyNode))\n                    onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n                map.items.push(pair);\n            }\n            else {\n                const map = new YAMLMap(ctx.schema);\n                map.flow = true;\n                map.items.push(pair);\n                const endRange = (valueNode ?? keyNode).range;\n                map.range = [keyNode.range[0], endRange[1], endRange[2]];\n                coll.items.push(map);\n            }\n            offset = valueNode ? valueNode.range[2] : valueProps.end;\n        }\n    }\n    const expectedEnd = isMap ? '}' : ']';\n    const [ce, ...ee] = fc.end;\n    let cePos = offset;\n    if (ce && ce.source === expectedEnd)\n        cePos = ce.offset + ce.source.length;\n    else {\n        const name = fcName[0].toUpperCase() + fcName.substring(1);\n        const msg = atRoot\n            ? `${name} must end with a ${expectedEnd}`\n            : `${name} in block collection must be sufficiently indented and end with a ${expectedEnd}`;\n        onError(offset, atRoot ? 'MISSING_CHAR' : 'BAD_INDENT', msg);\n        if (ce && ce.source.length !== 1)\n            ee.unshift(ce);\n    }\n    if (ee.length > 0) {\n        const end = resolveEnd(ee, cePos, ctx.options.strict, onError);\n        if (end.comment) {\n            if (coll.comment)\n                coll.comment += '\\n' + end.comment;\n            else\n                coll.comment = end.comment;\n        }\n        coll.range = [fc.offset, cePos, end.offset];\n    }\n    else {\n        coll.range = [fc.offset, cePos, cePos];\n    }\n    return coll;\n}\n\nexport { resolveFlowCollection };\n","import { isNode } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\nimport { YAMLMap } from '../nodes/YAMLMap.js';\nimport { YAMLSeq } from '../nodes/YAMLSeq.js';\nimport { resolveBlockMap } from './resolve-block-map.js';\nimport { resolveBlockSeq } from './resolve-block-seq.js';\nimport { resolveFlowCollection } from './resolve-flow-collection.js';\n\nfunction resolveCollection(CN, ctx, token, onError, tagName, tag) {\n    const coll = token.type === 'block-map'\n        ? resolveBlockMap(CN, ctx, token, onError, tag)\n        : token.type === 'block-seq'\n            ? resolveBlockSeq(CN, ctx, token, onError, tag)\n            : resolveFlowCollection(CN, ctx, token, onError, tag);\n    const Coll = coll.constructor;\n    // If we got a tagName matching the class, or the tag name is '!',\n    // then use the tagName from the node class used to create it.\n    if (tagName === '!' || tagName === Coll.tagName) {\n        coll.tag = Coll.tagName;\n        return coll;\n    }\n    if (tagName)\n        coll.tag = tagName;\n    return coll;\n}\nfunction composeCollection(CN, ctx, token, props, onError) {\n    const tagToken = props.tag;\n    const tagName = !tagToken\n        ? null\n        : ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg));\n    if (token.type === 'block-seq') {\n        const { anchor, newlineAfterProp: nl } = props;\n        const lastProp = anchor && tagToken\n            ? anchor.offset > tagToken.offset\n                ? anchor\n                : tagToken\n            : (anchor ?? tagToken);\n        if (lastProp && (!nl || nl.offset < lastProp.offset)) {\n            const message = 'Missing newline after block sequence props';\n            onError(lastProp, 'MISSING_CHAR', message);\n        }\n    }\n    const expType = token.type === 'block-map'\n        ? 'map'\n        : token.type === 'block-seq'\n            ? 'seq'\n            : token.start.source === '{'\n                ? 'map'\n                : 'seq';\n    // shortcut: check if it's a generic YAMLMap or YAMLSeq\n    // before jumping into the custom tag logic.\n    if (!tagToken ||\n        !tagName ||\n        tagName === '!' ||\n        (tagName === YAMLMap.tagName && expType === 'map') ||\n        (tagName === YAMLSeq.tagName && expType === 'seq')) {\n        return resolveCollection(CN, ctx, token, onError, tagName);\n    }\n    let tag = ctx.schema.tags.find(t => t.tag === tagName && t.collection === expType);\n    if (!tag) {\n        const kt = ctx.schema.knownTags[tagName];\n        if (kt && kt.collection === expType) {\n            ctx.schema.tags.push(Object.assign({}, kt, { default: false }));\n            tag = kt;\n        }\n        else {\n            if (kt) {\n                onError(tagToken, 'BAD_COLLECTION_TYPE', `${kt.tag} used for ${expType} collection, but expects ${kt.collection ?? 'scalar'}`, true);\n            }\n            else {\n                onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, true);\n            }\n            return resolveCollection(CN, ctx, token, onError, tagName);\n        }\n    }\n    const coll = resolveCollection(CN, ctx, token, onError, tagName, tag);\n    const res = tag.resolve?.(coll, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg), ctx.options) ?? coll;\n    const node = isNode(res)\n        ? res\n        : new Scalar(res);\n    node.range = coll.range;\n    node.tag = tagName;\n    if (tag?.format)\n        node.format = tag.format;\n    return node;\n}\n\nexport { composeCollection };\n","import { Scalar } from '../nodes/Scalar.js';\n\nfunction resolveBlockScalar(ctx, scalar, onError) {\n    const start = scalar.offset;\n    const header = parseBlockScalarHeader(scalar, ctx.options.strict, onError);\n    if (!header)\n        return { value: '', type: null, comment: '', range: [start, start, start] };\n    const type = header.mode === '>' ? Scalar.BLOCK_FOLDED : Scalar.BLOCK_LITERAL;\n    const lines = scalar.source ? splitLines(scalar.source) : [];\n    // determine the end of content & start of chomping\n    let chompStart = lines.length;\n    for (let i = lines.length - 1; i >= 0; --i) {\n        const content = lines[i][1];\n        if (content === '' || content === '\\r')\n            chompStart = i;\n        else\n            break;\n    }\n    // shortcut for empty contents\n    if (chompStart === 0) {\n        const value = header.chomp === '+' && lines.length > 0\n            ? '\\n'.repeat(Math.max(1, lines.length - 1))\n            : '';\n        let end = start + header.length;\n        if (scalar.source)\n            end += scalar.source.length;\n        return { value, type, comment: header.comment, range: [start, end, end] };\n    }\n    // find the indentation level to trim from start\n    let trimIndent = scalar.indent + header.indent;\n    let offset = scalar.offset + header.length;\n    let contentStart = 0;\n    for (let i = 0; i < chompStart; ++i) {\n        const [indent, content] = lines[i];\n        if (content === '' || content === '\\r') {\n            if (header.indent === 0 && indent.length > trimIndent)\n                trimIndent = indent.length;\n        }\n        else {\n            if (indent.length < trimIndent) {\n                const message = 'Block scalars with more-indented leading empty lines must use an explicit indentation indicator';\n                onError(offset + indent.length, 'MISSING_CHAR', message);\n            }\n            if (header.indent === 0)\n                trimIndent = indent.length;\n            contentStart = i;\n            if (trimIndent === 0 && !ctx.atRoot) {\n                const message = 'Block scalar values in collections must be indented';\n                onError(offset, 'BAD_INDENT', message);\n            }\n            break;\n        }\n        offset += indent.length + content.length + 1;\n    }\n    // include trailing more-indented empty lines in content\n    for (let i = lines.length - 1; i >= chompStart; --i) {\n        if (lines[i][0].length > trimIndent)\n            chompStart = i + 1;\n    }\n    let value = '';\n    let sep = '';\n    let prevMoreIndented = false;\n    // leading whitespace is kept intact\n    for (let i = 0; i < contentStart; ++i)\n        value += lines[i][0].slice(trimIndent) + '\\n';\n    for (let i = contentStart; i < chompStart; ++i) {\n        let [indent, content] = lines[i];\n        offset += indent.length + content.length + 1;\n        const crlf = content[content.length - 1] === '\\r';\n        if (crlf)\n            content = content.slice(0, -1);\n        /* istanbul ignore if already caught in lexer */\n        if (content && indent.length < trimIndent) {\n            const src = header.indent\n                ? 'explicit indentation indicator'\n                : 'first line';\n            const message = `Block scalar lines must not be less indented than their ${src}`;\n            onError(offset - content.length - (crlf ? 2 : 1), 'BAD_INDENT', message);\n            indent = '';\n        }\n        if (type === Scalar.BLOCK_LITERAL) {\n            value += sep + indent.slice(trimIndent) + content;\n            sep = '\\n';\n        }\n        else if (indent.length > trimIndent || content[0] === '\\t') {\n            // more-indented content within a folded block\n            if (sep === ' ')\n                sep = '\\n';\n            else if (!prevMoreIndented && sep === '\\n')\n                sep = '\\n\\n';\n            value += sep + indent.slice(trimIndent) + content;\n            sep = '\\n';\n            prevMoreIndented = true;\n        }\n        else if (content === '') {\n            // empty line\n            if (sep === '\\n')\n                value += '\\n';\n            else\n                sep = '\\n';\n        }\n        else {\n            value += sep + content;\n            sep = ' ';\n            prevMoreIndented = false;\n        }\n    }\n    switch (header.chomp) {\n        case '-':\n            break;\n        case '+':\n            for (let i = chompStart; i < lines.length; ++i)\n                value += '\\n' + lines[i][0].slice(trimIndent);\n            if (value[value.length - 1] !== '\\n')\n                value += '\\n';\n            break;\n        default:\n            value += '\\n';\n    }\n    const end = start + header.length + scalar.source.length;\n    return { value, type, comment: header.comment, range: [start, end, end] };\n}\nfunction parseBlockScalarHeader({ offset, props }, strict, onError) {\n    /* istanbul ignore if should not happen */\n    if (props[0].type !== 'block-scalar-header') {\n        onError(props[0], 'IMPOSSIBLE', 'Block scalar header not found');\n        return null;\n    }\n    const { source } = props[0];\n    const mode = source[0];\n    let indent = 0;\n    let chomp = '';\n    let error = -1;\n    for (let i = 1; i < source.length; ++i) {\n        const ch = source[i];\n        if (!chomp && (ch === '-' || ch === '+'))\n            chomp = ch;\n        else {\n            const n = Number(ch);\n            if (!indent && n)\n                indent = n;\n            else if (error === -1)\n                error = offset + i;\n        }\n    }\n    if (error !== -1)\n        onError(error, 'UNEXPECTED_TOKEN', `Block scalar header includes extra characters: ${source}`);\n    let hasSpace = false;\n    let comment = '';\n    let length = source.length;\n    for (let i = 1; i < props.length; ++i) {\n        const token = props[i];\n        switch (token.type) {\n            case 'space':\n                hasSpace = true;\n            // fallthrough\n            case 'newline':\n                length += token.source.length;\n                break;\n            case 'comment':\n                if (strict && !hasSpace) {\n                    const message = 'Comments must be separated from other tokens by white space characters';\n                    onError(token, 'MISSING_CHAR', message);\n                }\n                length += token.source.length;\n                comment = token.source.substring(1);\n                break;\n            case 'error':\n                onError(token, 'UNEXPECTED_TOKEN', token.message);\n                length += token.source.length;\n                break;\n            /* istanbul ignore next should not happen */\n            default: {\n                const message = `Unexpected token in block scalar header: ${token.type}`;\n                onError(token, 'UNEXPECTED_TOKEN', message);\n                const ts = token.source;\n                if (ts && typeof ts === 'string')\n                    length += ts.length;\n            }\n        }\n    }\n    return { mode, indent, chomp, comment, length };\n}\n/** @returns Array of lines split up as `[indent, content]` */\nfunction splitLines(source) {\n    const split = source.split(/\\n( *)/);\n    const first = split[0];\n    const m = first.match(/^( *)/);\n    const line0 = m?.[1]\n        ? [m[1], first.slice(m[1].length)]\n        : ['', first];\n    const lines = [line0];\n    for (let i = 1; i < split.length; i += 2)\n        lines.push([split[i], split[i + 1]]);\n    return lines;\n}\n\nexport { resolveBlockScalar };\n","import { Scalar } from '../nodes/Scalar.js';\nimport { resolveEnd } from './resolve-end.js';\n\nfunction resolveFlowScalar(scalar, strict, onError) {\n    const { offset, type, source, end } = scalar;\n    let _type;\n    let value;\n    const _onError = (rel, code, msg) => onError(offset + rel, code, msg);\n    switch (type) {\n        case 'scalar':\n            _type = Scalar.PLAIN;\n            value = plainValue(source, _onError);\n            break;\n        case 'single-quoted-scalar':\n            _type = Scalar.QUOTE_SINGLE;\n            value = singleQuotedValue(source, _onError);\n            break;\n        case 'double-quoted-scalar':\n            _type = Scalar.QUOTE_DOUBLE;\n            value = doubleQuotedValue(source, _onError);\n            break;\n        /* istanbul ignore next should not happen */\n        default:\n            onError(scalar, 'UNEXPECTED_TOKEN', `Expected a flow scalar value, but found: ${type}`);\n            return {\n                value: '',\n                type: null,\n                comment: '',\n                range: [offset, offset + source.length, offset + source.length]\n            };\n    }\n    const valueEnd = offset + source.length;\n    const re = resolveEnd(end, valueEnd, strict, onError);\n    return {\n        value,\n        type: _type,\n        comment: re.comment,\n        range: [offset, valueEnd, re.offset]\n    };\n}\nfunction plainValue(source, onError) {\n    let badChar = '';\n    switch (source[0]) {\n        /* istanbul ignore next should not happen */\n        case '\\t':\n            badChar = 'a tab character';\n            break;\n        case ',':\n            badChar = 'flow indicator character ,';\n            break;\n        case '%':\n            badChar = 'directive indicator character %';\n            break;\n        case '|':\n        case '>': {\n            badChar = `block scalar indicator ${source[0]}`;\n            break;\n        }\n        case '@':\n        case '`': {\n            badChar = `reserved character ${source[0]}`;\n            break;\n        }\n    }\n    if (badChar)\n        onError(0, 'BAD_SCALAR_START', `Plain value cannot start with ${badChar}`);\n    return foldLines(source);\n}\nfunction singleQuotedValue(source, onError) {\n    if (source[source.length - 1] !== \"'\" || source.length === 1)\n        onError(source.length, 'MISSING_CHAR', \"Missing closing 'quote\");\n    return foldLines(source.slice(1, -1)).replace(/''/g, \"'\");\n}\nfunction foldLines(source) {\n    /**\n     * The negative lookbehind here and in the `re` RegExp is to\n     * prevent causing a polynomial search time in certain cases.\n     *\n     * The try-catch is for Safari, which doesn't support this yet:\n     * https://caniuse.com/js-regexp-lookbehind\n     */\n    let first, line;\n    try {\n        first = new RegExp('(.*?)(?<![ \\t])[ \\t]*\\r?\\n', 'sy');\n        line = new RegExp('[ \\t]*(.*?)(?:(?<![ \\t])[ \\t]*)?\\r?\\n', 'sy');\n    }\n    catch {\n        first = /(.*?)[ \\t]*\\r?\\n/sy;\n        line = /[ \\t]*(.*?)[ \\t]*\\r?\\n/sy;\n    }\n    let match = first.exec(source);\n    if (!match)\n        return source;\n    let res = match[1];\n    let sep = ' ';\n    let pos = first.lastIndex;\n    line.lastIndex = pos;\n    while ((match = line.exec(source))) {\n        if (match[1] === '') {\n            if (sep === '\\n')\n                res += sep;\n            else\n                sep = '\\n';\n        }\n        else {\n            res += sep + match[1];\n            sep = ' ';\n        }\n        pos = line.lastIndex;\n    }\n    const last = /[ \\t]*(.*)/sy;\n    last.lastIndex = pos;\n    match = last.exec(source);\n    return res + sep + (match?.[1] ?? '');\n}\nfunction doubleQuotedValue(source, onError) {\n    let res = '';\n    for (let i = 1; i < source.length - 1; ++i) {\n        const ch = source[i];\n        if (ch === '\\r' && source[i + 1] === '\\n')\n            continue;\n        if (ch === '\\n') {\n            const { fold, offset } = foldNewline(source, i);\n            res += fold;\n            i = offset;\n        }\n        else if (ch === '\\\\') {\n            let next = source[++i];\n            const cc = escapeCodes[next];\n            if (cc)\n                res += cc;\n            else if (next === '\\n') {\n                // skip escaped newlines, but still trim the following line\n                next = source[i + 1];\n                while (next === ' ' || next === '\\t')\n                    next = source[++i + 1];\n            }\n            else if (next === '\\r' && source[i + 1] === '\\n') {\n                // skip escaped CRLF newlines, but still trim the following line\n                next = source[++i + 1];\n                while (next === ' ' || next === '\\t')\n                    next = source[++i + 1];\n            }\n            else if (next === 'x' || next === 'u' || next === 'U') {\n                const length = { x: 2, u: 4, U: 8 }[next];\n                res += parseCharCode(source, i + 1, length, onError);\n                i += length;\n            }\n            else {\n                const raw = source.substr(i - 1, 2);\n                onError(i - 1, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n                res += raw;\n            }\n        }\n        else if (ch === ' ' || ch === '\\t') {\n            // trim trailing whitespace\n            const wsStart = i;\n            let next = source[i + 1];\n            while (next === ' ' || next === '\\t')\n                next = source[++i + 1];\n            if (next !== '\\n' && !(next === '\\r' && source[i + 2] === '\\n'))\n                res += i > wsStart ? source.slice(wsStart, i + 1) : ch;\n        }\n        else {\n            res += ch;\n        }\n    }\n    if (source[source.length - 1] !== '\"' || source.length === 1)\n        onError(source.length, 'MISSING_CHAR', 'Missing closing \"quote');\n    return res;\n}\n/**\n * Fold a single newline into a space, multiple newlines to N - 1 newlines.\n * Presumes `source[offset] === '\\n'`\n */\nfunction foldNewline(source, offset) {\n    let fold = '';\n    let ch = source[offset + 1];\n    while (ch === ' ' || ch === '\\t' || ch === '\\n' || ch === '\\r') {\n        if (ch === '\\r' && source[offset + 2] !== '\\n')\n            break;\n        if (ch === '\\n')\n            fold += '\\n';\n        offset += 1;\n        ch = source[offset + 1];\n    }\n    if (!fold)\n        fold = ' ';\n    return { fold, offset };\n}\nconst escapeCodes = {\n    '0': '\\0', // null character\n    a: '\\x07', // bell character\n    b: '\\b', // backspace\n    e: '\\x1b', // escape character\n    f: '\\f', // form feed\n    n: '\\n', // line feed\n    r: '\\r', // carriage return\n    t: '\\t', // horizontal tab\n    v: '\\v', // vertical tab\n    N: '\\u0085', // Unicode next line\n    _: '\\u00a0', // Unicode non-breaking space\n    L: '\\u2028', // Unicode line separator\n    P: '\\u2029', // Unicode paragraph separator\n    ' ': ' ',\n    '\"': '\"',\n    '/': '/',\n    '\\\\': '\\\\',\n    '\\t': '\\t'\n};\nfunction parseCharCode(source, offset, length, onError) {\n    const cc = source.substr(offset, length);\n    const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc);\n    const code = ok ? parseInt(cc, 16) : NaN;\n    if (isNaN(code)) {\n        const raw = source.substr(offset - 2, length + 2);\n        onError(offset - 2, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n        return raw;\n    }\n    return String.fromCodePoint(code);\n}\n\nexport { resolveFlowScalar };\n","import { isScalar, SCALAR } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\nimport { resolveBlockScalar } from './resolve-block-scalar.js';\nimport { resolveFlowScalar } from './resolve-flow-scalar.js';\n\nfunction composeScalar(ctx, token, tagToken, onError) {\n    const { value, type, comment, range } = token.type === 'block-scalar'\n        ? resolveBlockScalar(ctx, token, onError)\n        : resolveFlowScalar(token, ctx.options.strict, onError);\n    const tagName = tagToken\n        ? ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg))\n        : null;\n    let tag;\n    if (ctx.options.stringKeys && ctx.atKey) {\n        tag = ctx.schema[SCALAR];\n    }\n    else if (tagName)\n        tag = findScalarTagByName(ctx.schema, value, tagName, tagToken, onError);\n    else if (token.type === 'scalar')\n        tag = findScalarTagByTest(ctx, value, token, onError);\n    else\n        tag = ctx.schema[SCALAR];\n    let scalar;\n    try {\n        const res = tag.resolve(value, msg => onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg), ctx.options);\n        scalar = isScalar(res) ? res : new Scalar(res);\n    }\n    catch (error) {\n        const msg = error instanceof Error ? error.message : String(error);\n        onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg);\n        scalar = new Scalar(value);\n    }\n    scalar.range = range;\n    scalar.source = value;\n    if (type)\n        scalar.type = type;\n    if (tagName)\n        scalar.tag = tagName;\n    if (tag.format)\n        scalar.format = tag.format;\n    if (comment)\n        scalar.comment = comment;\n    return scalar;\n}\nfunction findScalarTagByName(schema, value, tagName, tagToken, onError) {\n    if (tagName === '!')\n        return schema[SCALAR]; // non-specific tag\n    const matchWithTest = [];\n    for (const tag of schema.tags) {\n        if (!tag.collection && tag.tag === tagName) {\n            if (tag.default && tag.test)\n                matchWithTest.push(tag);\n            else\n                return tag;\n        }\n    }\n    for (const tag of matchWithTest)\n        if (tag.test?.test(value))\n            return tag;\n    const kt = schema.knownTags[tagName];\n    if (kt && !kt.collection) {\n        // Ensure that the known tag is available for stringifying,\n        // but does not get used by default.\n        schema.tags.push(Object.assign({}, kt, { default: false, test: undefined }));\n        return kt;\n    }\n    onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, tagName !== 'tag:yaml.org,2002:str');\n    return schema[SCALAR];\n}\nfunction findScalarTagByTest({ atKey, directives, schema }, value, token, onError) {\n    const tag = schema.tags.find(tag => (tag.default === true || (atKey && tag.default === 'key')) &&\n        tag.test?.test(value)) || schema[SCALAR];\n    if (schema.compat) {\n        const compat = schema.compat.find(tag => tag.default && tag.test?.test(value)) ??\n            schema[SCALAR];\n        if (tag.tag !== compat.tag) {\n            const ts = directives.tagString(tag.tag);\n            const cs = directives.tagString(compat.tag);\n            const msg = `Value may be parsed as either ${ts} or ${cs}`;\n            onError(token, 'TAG_RESOLVE_FAILED', msg, true);\n        }\n    }\n    return tag;\n}\n\nexport { composeScalar };\n","function emptyScalarPosition(offset, before, pos) {\n    if (before) {\n        pos ?? (pos = before.length);\n        for (let i = pos - 1; i >= 0; --i) {\n            let st = before[i];\n            switch (st.type) {\n                case 'space':\n                case 'comment':\n                case 'newline':\n                    offset -= st.source.length;\n                    continue;\n            }\n            // Technically, an empty scalar is immediately after the last non-empty\n            // node, but it's more useful to place it after any whitespace.\n            st = before[++i];\n            while (st?.type === 'space') {\n                offset += st.source.length;\n                st = before[++i];\n            }\n            break;\n        }\n    }\n    return offset;\n}\n\nexport { emptyScalarPosition };\n","import { Alias } from '../nodes/Alias.js';\nimport { isScalar } from '../nodes/identity.js';\nimport { composeCollection } from './compose-collection.js';\nimport { composeScalar } from './compose-scalar.js';\nimport { resolveEnd } from './resolve-end.js';\nimport { emptyScalarPosition } from './util-empty-scalar-position.js';\n\nconst CN = { composeNode, composeEmptyNode };\nfunction composeNode(ctx, token, props, onError) {\n    const atKey = ctx.atKey;\n    const { spaceBefore, comment, anchor, tag } = props;\n    let node;\n    let isSrcToken = true;\n    switch (token.type) {\n        case 'alias':\n            node = composeAlias(ctx, token, onError);\n            if (anchor || tag)\n                onError(token, 'ALIAS_PROPS', 'An alias node must not specify any properties');\n            break;\n        case 'scalar':\n        case 'single-quoted-scalar':\n        case 'double-quoted-scalar':\n        case 'block-scalar':\n            node = composeScalar(ctx, token, tag, onError);\n            if (anchor)\n                node.anchor = anchor.source.substring(1);\n            break;\n        case 'block-map':\n        case 'block-seq':\n        case 'flow-collection':\n            node = composeCollection(CN, ctx, token, props, onError);\n            if (anchor)\n                node.anchor = anchor.source.substring(1);\n            break;\n        default: {\n            const message = token.type === 'error'\n                ? token.message\n                : `Unsupported token (type: ${token.type})`;\n            onError(token, 'UNEXPECTED_TOKEN', message);\n            node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError);\n            isSrcToken = false;\n        }\n    }\n    if (anchor && node.anchor === '')\n        onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n    if (atKey &&\n        ctx.options.stringKeys &&\n        (!isScalar(node) ||\n            typeof node.value !== 'string' ||\n            (node.tag && node.tag !== 'tag:yaml.org,2002:str'))) {\n        const msg = 'With stringKeys, all keys must be strings';\n        onError(tag ?? token, 'NON_STRING_KEY', msg);\n    }\n    if (spaceBefore)\n        node.spaceBefore = true;\n    if (comment) {\n        if (token.type === 'scalar' && token.source === '')\n            node.comment = comment;\n        else\n            node.commentBefore = comment;\n    }\n    // @ts-expect-error Type checking misses meaning of isSrcToken\n    if (ctx.options.keepSourceTokens && isSrcToken)\n        node.srcToken = token;\n    return node;\n}\nfunction composeEmptyNode(ctx, offset, before, pos, { spaceBefore, comment, anchor, tag, end }, onError) {\n    const token = {\n        type: 'scalar',\n        offset: emptyScalarPosition(offset, before, pos),\n        indent: -1,\n        source: ''\n    };\n    const node = composeScalar(ctx, token, tag, onError);\n    if (anchor) {\n        node.anchor = anchor.source.substring(1);\n        if (node.anchor === '')\n            onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n    }\n    if (spaceBefore)\n        node.spaceBefore = true;\n    if (comment) {\n        node.comment = comment;\n        node.range[2] = end;\n    }\n    return node;\n}\nfunction composeAlias({ options }, { offset, source, end }, onError) {\n    const alias = new Alias(source.substring(1));\n    if (alias.source === '')\n        onError(offset, 'BAD_ALIAS', 'Alias cannot be an empty string');\n    if (alias.source.endsWith(':'))\n        onError(offset + source.length - 1, 'BAD_ALIAS', 'Alias ending in : is ambiguous', true);\n    const valueEnd = offset + source.length;\n    const re = resolveEnd(end, valueEnd, options.strict, onError);\n    alias.range = [offset, valueEnd, re.offset];\n    if (re.comment)\n        alias.comment = re.comment;\n    return alias;\n}\n\nexport { composeEmptyNode, composeNode };\n","import { Document } from '../doc/Document.js';\nimport { composeNode, composeEmptyNode } from './compose-node.js';\nimport { resolveEnd } from './resolve-end.js';\nimport { resolveProps } from './resolve-props.js';\n\nfunction composeDoc(options, directives, { offset, start, value, end }, onError) {\n    const opts = Object.assign({ _directives: directives }, options);\n    const doc = new Document(undefined, opts);\n    const ctx = {\n        atKey: false,\n        atRoot: true,\n        directives: doc.directives,\n        options: doc.options,\n        schema: doc.schema\n    };\n    const props = resolveProps(start, {\n        indicator: 'doc-start',\n        next: value ?? end?.[0],\n        offset,\n        onError,\n        parentIndent: 0,\n        startOnNewline: true\n    });\n    if (props.found) {\n        doc.directives.docStart = true;\n        if (value &&\n            (value.type === 'block-map' || value.type === 'block-seq') &&\n            !props.hasNewline)\n            onError(props.end, 'MISSING_CHAR', 'Block collection cannot start on same line with directives-end marker');\n    }\n    // @ts-expect-error If Contents is set, let's trust the user\n    doc.contents = value\n        ? composeNode(ctx, value, props, onError)\n        : composeEmptyNode(ctx, props.end, start, null, props, onError);\n    const contentEnd = doc.contents.range[2];\n    const re = resolveEnd(end, contentEnd, false, onError);\n    if (re.comment)\n        doc.comment = re.comment;\n    doc.range = [offset, contentEnd, re.offset];\n    return doc;\n}\n\nexport { composeDoc };\n","import { Directives } from '../doc/directives.js';\nimport { Document } from '../doc/Document.js';\nimport { YAMLWarning, YAMLParseError } from '../errors.js';\nimport { isCollection, isPair } from '../nodes/identity.js';\nimport { composeDoc } from './compose-doc.js';\nimport { resolveEnd } from './resolve-end.js';\n\nfunction getErrorPos(src) {\n    if (typeof src === 'number')\n        return [src, src + 1];\n    if (Array.isArray(src))\n        return src.length === 2 ? src : [src[0], src[1]];\n    const { offset, source } = src;\n    return [offset, offset + (typeof source === 'string' ? source.length : 1)];\n}\nfunction parsePrelude(prelude) {\n    let comment = '';\n    let atComment = false;\n    let afterEmptyLine = false;\n    for (let i = 0; i < prelude.length; ++i) {\n        const source = prelude[i];\n        switch (source[0]) {\n            case '#':\n                comment +=\n                    (comment === '' ? '' : afterEmptyLine ? '\\n\\n' : '\\n') +\n                        (source.substring(1) || ' ');\n                atComment = true;\n                afterEmptyLine = false;\n                break;\n            case '%':\n                if (prelude[i + 1]?.[0] !== '#')\n                    i += 1;\n                atComment = false;\n                break;\n            default:\n                // This may be wrong after doc-end, but in that case it doesn't matter\n                if (!atComment)\n                    afterEmptyLine = true;\n                atComment = false;\n        }\n    }\n    return { comment, afterEmptyLine };\n}\n/**\n * Compose a stream of CST nodes into a stream of YAML Documents.\n *\n * ```ts\n * import { Composer, Parser } from 'yaml'\n *\n * const src: string = ...\n * const tokens = new Parser().parse(src)\n * const docs = new Composer().compose(tokens)\n * ```\n */\nclass Composer {\n    constructor(options = {}) {\n        this.doc = null;\n        this.atDirectives = false;\n        this.prelude = [];\n        this.errors = [];\n        this.warnings = [];\n        this.onError = (source, code, message, warning) => {\n            const pos = getErrorPos(source);\n            if (warning)\n                this.warnings.push(new YAMLWarning(pos, code, message));\n            else\n                this.errors.push(new YAMLParseError(pos, code, message));\n        };\n        // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n        this.directives = new Directives({ version: options.version || '1.2' });\n        this.options = options;\n    }\n    decorate(doc, afterDoc) {\n        const { comment, afterEmptyLine } = parsePrelude(this.prelude);\n        //console.log({ dc: doc.comment, prelude, comment })\n        if (comment) {\n            const dc = doc.contents;\n            if (afterDoc) {\n                doc.comment = doc.comment ? `${doc.comment}\\n${comment}` : comment;\n            }\n            else if (afterEmptyLine || doc.directives.docStart || !dc) {\n                doc.commentBefore = comment;\n            }\n            else if (isCollection(dc) && !dc.flow && dc.items.length > 0) {\n                let it = dc.items[0];\n                if (isPair(it))\n                    it = it.key;\n                const cb = it.commentBefore;\n                it.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n            }\n            else {\n                const cb = dc.commentBefore;\n                dc.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n            }\n        }\n        if (afterDoc) {\n            Array.prototype.push.apply(doc.errors, this.errors);\n            Array.prototype.push.apply(doc.warnings, this.warnings);\n        }\n        else {\n            doc.errors = this.errors;\n            doc.warnings = this.warnings;\n        }\n        this.prelude = [];\n        this.errors = [];\n        this.warnings = [];\n    }\n    /**\n     * Current stream status information.\n     *\n     * Mostly useful at the end of input for an empty stream.\n     */\n    streamInfo() {\n        return {\n            comment: parsePrelude(this.prelude).comment,\n            directives: this.directives,\n            errors: this.errors,\n            warnings: this.warnings\n        };\n    }\n    /**\n     * Compose tokens into documents.\n     *\n     * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n     * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n     */\n    *compose(tokens, forceDoc = false, endOffset = -1) {\n        for (const token of tokens)\n            yield* this.next(token);\n        yield* this.end(forceDoc, endOffset);\n    }\n    /** Advance the composer by one CST token. */\n    *next(token) {\n        switch (token.type) {\n            case 'directive':\n                this.directives.add(token.source, (offset, message, warning) => {\n                    const pos = getErrorPos(token);\n                    pos[0] += offset;\n                    this.onError(pos, 'BAD_DIRECTIVE', message, warning);\n                });\n                this.prelude.push(token.source);\n                this.atDirectives = true;\n                break;\n            case 'document': {\n                const doc = composeDoc(this.options, this.directives, token, this.onError);\n                if (this.atDirectives && !doc.directives.docStart)\n                    this.onError(token, 'MISSING_CHAR', 'Missing directives-end/doc-start indicator line');\n                this.decorate(doc, false);\n                if (this.doc)\n                    yield this.doc;\n                this.doc = doc;\n                this.atDirectives = false;\n                break;\n            }\n            case 'byte-order-mark':\n            case 'space':\n                break;\n            case 'comment':\n            case 'newline':\n                this.prelude.push(token.source);\n                break;\n            case 'error': {\n                const msg = token.source\n                    ? `${token.message}: ${JSON.stringify(token.source)}`\n                    : token.message;\n                const error = new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg);\n                if (this.atDirectives || !this.doc)\n                    this.errors.push(error);\n                else\n                    this.doc.errors.push(error);\n                break;\n            }\n            case 'doc-end': {\n                if (!this.doc) {\n                    const msg = 'Unexpected doc-end without preceding document';\n                    this.errors.push(new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg));\n                    break;\n                }\n                this.doc.directives.docEnd = true;\n                const end = resolveEnd(token.end, token.offset + token.source.length, this.doc.options.strict, this.onError);\n                this.decorate(this.doc, true);\n                if (end.comment) {\n                    const dc = this.doc.comment;\n                    this.doc.comment = dc ? `${dc}\\n${end.comment}` : end.comment;\n                }\n                this.doc.range[2] = end.offset;\n                break;\n            }\n            default:\n                this.errors.push(new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', `Unsupported token ${token.type}`));\n        }\n    }\n    /**\n     * Call at end of input to yield any remaining document.\n     *\n     * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n     * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n     */\n    *end(forceDoc = false, endOffset = -1) {\n        if (this.doc) {\n            this.decorate(this.doc, true);\n            yield this.doc;\n            this.doc = null;\n        }\n        else if (forceDoc) {\n            const opts = Object.assign({ _directives: this.directives }, this.options);\n            const doc = new Document(undefined, opts);\n            if (this.atDirectives)\n                this.onError(endOffset, 'MISSING_CHAR', 'Missing directives-end indicator line');\n            doc.range = [0, endOffset, endOffset];\n            this.decorate(doc, false);\n            yield doc;\n        }\n    }\n}\n\nexport { Composer };\n","import { resolveBlockScalar } from '../compose/resolve-block-scalar.js';\nimport { resolveFlowScalar } from '../compose/resolve-flow-scalar.js';\nimport { YAMLParseError } from '../errors.js';\nimport { stringifyString } from '../stringify/stringifyString.js';\n\nfunction resolveAsScalar(token, strict = true, onError) {\n    if (token) {\n        const _onError = (pos, code, message) => {\n            const offset = typeof pos === 'number' ? pos : Array.isArray(pos) ? pos[0] : pos.offset;\n            if (onError)\n                onError(offset, code, message);\n            else\n                throw new YAMLParseError([offset, offset + 1], code, message);\n        };\n        switch (token.type) {\n            case 'scalar':\n            case 'single-quoted-scalar':\n            case 'double-quoted-scalar':\n                return resolveFlowScalar(token, strict, _onError);\n            case 'block-scalar':\n                return resolveBlockScalar({ options: { strict } }, token, _onError);\n        }\n    }\n    return null;\n}\n/**\n * Create a new scalar token with `value`\n *\n * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,\n * as this function does not support any schema operations and won't check for such conflicts.\n *\n * @param value The string representation of the value, which will have its content properly indented.\n * @param context.end Comments and whitespace after the end of the value, or after the block scalar header. If undefined, a newline will be added.\n * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.\n * @param context.indent The indent level of the token.\n * @param context.inFlow Is this scalar within a flow collection? This may affect the resolved type of the token's value.\n * @param context.offset The offset position of the token.\n * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.\n */\nfunction createScalarToken(value, context) {\n    const { implicitKey = false, indent, inFlow = false, offset = -1, type = 'PLAIN' } = context;\n    const source = stringifyString({ type, value }, {\n        implicitKey,\n        indent: indent > 0 ? ' '.repeat(indent) : '',\n        inFlow,\n        options: { blockQuote: true, lineWidth: -1 }\n    });\n    const end = context.end ?? [\n        { type: 'newline', offset: -1, indent, source: '\\n' }\n    ];\n    switch (source[0]) {\n        case '|':\n        case '>': {\n            const he = source.indexOf('\\n');\n            const head = source.substring(0, he);\n            const body = source.substring(he + 1) + '\\n';\n            const props = [\n                { type: 'block-scalar-header', offset, indent, source: head }\n            ];\n            if (!addEndtoBlockProps(props, end))\n                props.push({ type: 'newline', offset: -1, indent, source: '\\n' });\n            return { type: 'block-scalar', offset, indent, props, source: body };\n        }\n        case '\"':\n            return { type: 'double-quoted-scalar', offset, indent, source, end };\n        case \"'\":\n            return { type: 'single-quoted-scalar', offset, indent, source, end };\n        default:\n            return { type: 'scalar', offset, indent, source, end };\n    }\n}\n/**\n * Set the value of `token` to the given string `value`, overwriting any previous contents and type that it may have.\n *\n * Best efforts are made to retain any comments previously associated with the `token`,\n * though all contents within a collection's `items` will be overwritten.\n *\n * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,\n * as this function does not support any schema operations and won't check for such conflicts.\n *\n * @param token Any token. If it does not include an `indent` value, the value will be stringified as if it were an implicit key.\n * @param value The string representation of the value, which will have its content properly indented.\n * @param context.afterKey In most cases, values after a key should have an additional level of indentation.\n * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.\n * @param context.inFlow Being within a flow collection may affect the resolved type of the token's value.\n * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.\n */\nfunction setScalarValue(token, value, context = {}) {\n    let { afterKey = false, implicitKey = false, inFlow = false, type } = context;\n    let indent = 'indent' in token ? token.indent : null;\n    if (afterKey && typeof indent === 'number')\n        indent += 2;\n    if (!type)\n        switch (token.type) {\n            case 'single-quoted-scalar':\n                type = 'QUOTE_SINGLE';\n                break;\n            case 'double-quoted-scalar':\n                type = 'QUOTE_DOUBLE';\n                break;\n            case 'block-scalar': {\n                const header = token.props[0];\n                if (header.type !== 'block-scalar-header')\n                    throw new Error('Invalid block scalar header');\n                type = header.source[0] === '>' ? 'BLOCK_FOLDED' : 'BLOCK_LITERAL';\n                break;\n            }\n            default:\n                type = 'PLAIN';\n        }\n    const source = stringifyString({ type, value }, {\n        implicitKey: implicitKey || indent === null,\n        indent: indent !== null && indent > 0 ? ' '.repeat(indent) : '',\n        inFlow,\n        options: { blockQuote: true, lineWidth: -1 }\n    });\n    switch (source[0]) {\n        case '|':\n        case '>':\n            setBlockScalarValue(token, source);\n            break;\n        case '\"':\n            setFlowScalarValue(token, source, 'double-quoted-scalar');\n            break;\n        case \"'\":\n            setFlowScalarValue(token, source, 'single-quoted-scalar');\n            break;\n        default:\n            setFlowScalarValue(token, source, 'scalar');\n    }\n}\nfunction setBlockScalarValue(token, source) {\n    const he = source.indexOf('\\n');\n    const head = source.substring(0, he);\n    const body = source.substring(he + 1) + '\\n';\n    if (token.type === 'block-scalar') {\n        const header = token.props[0];\n        if (header.type !== 'block-scalar-header')\n            throw new Error('Invalid block scalar header');\n        header.source = head;\n        token.source = body;\n    }\n    else {\n        const { offset } = token;\n        const indent = 'indent' in token ? token.indent : -1;\n        const props = [\n            { type: 'block-scalar-header', offset, indent, source: head }\n        ];\n        if (!addEndtoBlockProps(props, 'end' in token ? token.end : undefined))\n            props.push({ type: 'newline', offset: -1, indent, source: '\\n' });\n        for (const key of Object.keys(token))\n            if (key !== 'type' && key !== 'offset')\n                delete token[key];\n        Object.assign(token, { type: 'block-scalar', indent, props, source: body });\n    }\n}\n/** @returns `true` if last token is a newline */\nfunction addEndtoBlockProps(props, end) {\n    if (end)\n        for (const st of end)\n            switch (st.type) {\n                case 'space':\n                case 'comment':\n                    props.push(st);\n                    break;\n                case 'newline':\n                    props.push(st);\n                    return true;\n            }\n    return false;\n}\nfunction setFlowScalarValue(token, source, type) {\n    switch (token.type) {\n        case 'scalar':\n        case 'double-quoted-scalar':\n        case 'single-quoted-scalar':\n            token.type = type;\n            token.source = source;\n            break;\n        case 'block-scalar': {\n            const end = token.props.slice(1);\n            let oa = source.length;\n            if (token.props[0].type === 'block-scalar-header')\n                oa -= token.props[0].source.length;\n            for (const tok of end)\n                tok.offset += oa;\n            delete token.props;\n            Object.assign(token, { type, source, end });\n            break;\n        }\n        case 'block-map':\n        case 'block-seq': {\n            const offset = token.offset + source.length;\n            const nl = { type: 'newline', offset, indent: token.indent, source: '\\n' };\n            delete token.items;\n            Object.assign(token, { type, source, end: [nl] });\n            break;\n        }\n        default: {\n            const indent = 'indent' in token ? token.indent : -1;\n            const end = 'end' in token && Array.isArray(token.end)\n                ? token.end.filter(st => st.type === 'space' ||\n                    st.type === 'comment' ||\n                    st.type === 'newline')\n                : [];\n            for (const key of Object.keys(token))\n                if (key !== 'type' && key !== 'offset')\n                    delete token[key];\n            Object.assign(token, { type, indent, source, end });\n        }\n    }\n}\n\nexport { createScalarToken, resolveAsScalar, setScalarValue };\n","/**\n * Stringify a CST document, token, or collection item\n *\n * Fair warning: This applies no validation whatsoever, and\n * simply concatenates the sources in their logical order.\n */\nconst stringify = (cst) => 'type' in cst ? stringifyToken(cst) : stringifyItem(cst);\nfunction stringifyToken(token) {\n    switch (token.type) {\n        case 'block-scalar': {\n            let res = '';\n            for (const tok of token.props)\n                res += stringifyToken(tok);\n            return res + token.source;\n        }\n        case 'block-map':\n        case 'block-seq': {\n            let res = '';\n            for (const item of token.items)\n                res += stringifyItem(item);\n            return res;\n        }\n        case 'flow-collection': {\n            let res = token.start.source;\n            for (const item of token.items)\n                res += stringifyItem(item);\n            for (const st of token.end)\n                res += st.source;\n            return res;\n        }\n        case 'document': {\n            let res = stringifyItem(token);\n            if (token.end)\n                for (const st of token.end)\n                    res += st.source;\n            return res;\n        }\n        default: {\n            let res = token.source;\n            if ('end' in token && token.end)\n                for (const st of token.end)\n                    res += st.source;\n            return res;\n        }\n    }\n}\nfunction stringifyItem({ start, key, sep, value }) {\n    let res = '';\n    for (const st of start)\n        res += st.source;\n    if (key)\n        res += stringifyToken(key);\n    if (sep)\n        for (const st of sep)\n            res += st.source;\n    if (value)\n        res += stringifyToken(value);\n    return res;\n}\n\nexport { stringify };\n","const BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove item');\n/**\n * Apply a visitor to a CST document or item.\n *\n * Walks through the tree (depth-first) starting from the root, calling a\n * `visitor` function with two arguments when entering each item:\n *   - `item`: The current item, which included the following members:\n *     - `start: SourceToken[]` – Source tokens before the key or value,\n *       possibly including its anchor or tag.\n *     - `key?: Token | null` – Set for pair values. May then be `null`, if\n *       the key before the `:` separator is empty.\n *     - `sep?: SourceToken[]` – Source tokens between the key and the value,\n *       which should include the `:` map value indicator if `value` is set.\n *     - `value?: Token` – The value of a sequence item, or of a map pair.\n *   - `path`: The steps from the root to the current node, as an array of\n *     `['key' | 'value', number]` tuples.\n *\n * The return value of the visitor may be used to control the traversal:\n *   - `undefined` (default): Do nothing and continue\n *   - `visit.SKIP`: Do not visit the children of this token, continue with\n *      next sibling\n *   - `visit.BREAK`: Terminate traversal completely\n *   - `visit.REMOVE`: Remove the current item, then continue with the next one\n *   - `number`: Set the index of the next step. This is useful especially if\n *     the index of the current token has changed.\n *   - `function`: Define the next visitor for this item. After the original\n *     visitor is called on item entry, next visitors are called after handling\n *     a non-empty `key` and when exiting the item.\n */\nfunction visit(cst, visitor) {\n    if ('type' in cst && cst.type === 'document')\n        cst = { start: cst.start, value: cst.value };\n    _visit(Object.freeze([]), cst, visitor);\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current item */\nvisit.SKIP = SKIP;\n/** Remove the current item */\nvisit.REMOVE = REMOVE;\n/** Find the item at `path` from `cst` as the root */\nvisit.itemAtPath = (cst, path) => {\n    let item = cst;\n    for (const [field, index] of path) {\n        const tok = item?.[field];\n        if (tok && 'items' in tok) {\n            item = tok.items[index];\n        }\n        else\n            return undefined;\n    }\n    return item;\n};\n/**\n * Get the immediate parent collection of the item at `path` from `cst` as the root.\n *\n * Throws an error if the collection is not found, which should never happen if the item itself exists.\n */\nvisit.parentCollection = (cst, path) => {\n    const parent = visit.itemAtPath(cst, path.slice(0, -1));\n    const field = path[path.length - 1][0];\n    const coll = parent?.[field];\n    if (coll && 'items' in coll)\n        return coll;\n    throw new Error('Parent collection not found');\n};\nfunction _visit(path, item, visitor) {\n    let ctrl = visitor(item, path);\n    if (typeof ctrl === 'symbol')\n        return ctrl;\n    for (const field of ['key', 'value']) {\n        const token = item[field];\n        if (token && 'items' in token) {\n            for (let i = 0; i < token.items.length; ++i) {\n                const ci = _visit(Object.freeze(path.concat([[field, i]])), token.items[i], visitor);\n                if (typeof ci === 'number')\n                    i = ci - 1;\n                else if (ci === BREAK)\n                    return BREAK;\n                else if (ci === REMOVE) {\n                    token.items.splice(i, 1);\n                    i -= 1;\n                }\n            }\n            if (typeof ctrl === 'function' && field === 'key')\n                ctrl = ctrl(item, path);\n        }\n    }\n    return typeof ctrl === 'function' ? ctrl(item, path) : ctrl;\n}\n\nexport { visit };\n","export { createScalarToken, resolveAsScalar, setScalarValue } from './cst-scalar.js';\nexport { stringify } from './cst-stringify.js';\nexport { visit } from './cst-visit.js';\n\n/** The byte order mark */\nconst BOM = '\\u{FEFF}';\n/** Start of doc-mode */\nconst DOCUMENT = '\\x02'; // C0: Start of Text\n/** Unexpected end of flow-mode */\nconst FLOW_END = '\\x18'; // C0: Cancel\n/** Next token is a scalar value */\nconst SCALAR = '\\x1f'; // C0: Unit Separator\n/** @returns `true` if `token` is a flow or block collection */\nconst isCollection = (token) => !!token && 'items' in token;\n/** @returns `true` if `token` is a flow or block scalar; not an alias */\nconst isScalar = (token) => !!token &&\n    (token.type === 'scalar' ||\n        token.type === 'single-quoted-scalar' ||\n        token.type === 'double-quoted-scalar' ||\n        token.type === 'block-scalar');\n/* istanbul ignore next */\n/** Get a printable representation of a lexer token */\nfunction prettyToken(token) {\n    switch (token) {\n        case BOM:\n            return '<BOM>';\n        case DOCUMENT:\n            return '<DOC>';\n        case FLOW_END:\n            return '<FLOW_END>';\n        case SCALAR:\n            return '<SCALAR>';\n        default:\n            return JSON.stringify(token);\n    }\n}\n/** Identify the type of a lexer token. May return `null` for unknown tokens. */\nfunction tokenType(source) {\n    switch (source) {\n        case BOM:\n            return 'byte-order-mark';\n        case DOCUMENT:\n            return 'doc-mode';\n        case FLOW_END:\n            return 'flow-error-end';\n        case SCALAR:\n            return 'scalar';\n        case '---':\n            return 'doc-start';\n        case '...':\n            return 'doc-end';\n        case '':\n        case '\\n':\n        case '\\r\\n':\n            return 'newline';\n        case '-':\n            return 'seq-item-ind';\n        case '?':\n            return 'explicit-key-ind';\n        case ':':\n            return 'map-value-ind';\n        case '{':\n            return 'flow-map-start';\n        case '}':\n            return 'flow-map-end';\n        case '[':\n            return 'flow-seq-start';\n        case ']':\n            return 'flow-seq-end';\n        case ',':\n            return 'comma';\n    }\n    switch (source[0]) {\n        case ' ':\n        case '\\t':\n            return 'space';\n        case '#':\n            return 'comment';\n        case '%':\n            return 'directive-line';\n        case '*':\n            return 'alias';\n        case '&':\n            return 'anchor';\n        case '!':\n            return 'tag';\n        case \"'\":\n            return 'single-quoted-scalar';\n        case '\"':\n            return 'double-quoted-scalar';\n        case '|':\n        case '>':\n            return 'block-scalar-header';\n    }\n    return null;\n}\n\nexport { BOM, DOCUMENT, FLOW_END, SCALAR, isCollection, isScalar, prettyToken, tokenType };\n","import { BOM, DOCUMENT, FLOW_END, SCALAR } from './cst.js';\n\n/*\nSTART -> stream\n\nstream\n  directive -> line-end -> stream\n  indent + line-end -> stream\n  [else] -> line-start\n\nline-end\n  comment -> line-end\n  newline -> .\n  input-end -> END\n\nline-start\n  doc-start -> doc\n  doc-end -> stream\n  [else] -> indent -> block-start\n\nblock-start\n  seq-item-start -> block-start\n  explicit-key-start -> block-start\n  map-value-start -> block-start\n  [else] -> doc\n\ndoc\n  line-end -> line-start\n  spaces -> doc\n  anchor -> doc\n  tag -> doc\n  flow-start -> flow -> doc\n  flow-end -> error -> doc\n  seq-item-start -> error -> doc\n  explicit-key-start -> error -> doc\n  map-value-start -> doc\n  alias -> doc\n  quote-start -> quoted-scalar -> doc\n  block-scalar-header -> line-end -> block-scalar(min) -> line-start\n  [else] -> plain-scalar(false, min) -> doc\n\nflow\n  line-end -> flow\n  spaces -> flow\n  anchor -> flow\n  tag -> flow\n  flow-start -> flow -> flow\n  flow-end -> .\n  seq-item-start -> error -> flow\n  explicit-key-start -> flow\n  map-value-start -> flow\n  alias -> flow\n  quote-start -> quoted-scalar -> flow\n  comma -> flow\n  [else] -> plain-scalar(true, 0) -> flow\n\nquoted-scalar\n  quote-end -> .\n  [else] -> quoted-scalar\n\nblock-scalar(min)\n  newline + peek(indent < min) -> .\n  [else] -> block-scalar(min)\n\nplain-scalar(is-flow, min)\n  scalar-end(is-flow) -> .\n  peek(newline + (indent < min)) -> .\n  [else] -> plain-scalar(min)\n*/\nfunction isEmpty(ch) {\n    switch (ch) {\n        case undefined:\n        case ' ':\n        case '\\n':\n        case '\\r':\n        case '\\t':\n            return true;\n        default:\n            return false;\n    }\n}\nconst hexDigits = new Set('0123456789ABCDEFabcdef');\nconst tagChars = new Set(\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()\");\nconst flowIndicatorChars = new Set(',[]{}');\nconst invalidAnchorChars = new Set(' ,[]{}\\n\\r\\t');\nconst isNotAnchorChar = (ch) => !ch || invalidAnchorChars.has(ch);\n/**\n * Splits an input string into lexical tokens, i.e. smaller strings that are\n * easily identifiable by `tokens.tokenType()`.\n *\n * Lexing starts always in a \"stream\" context. Incomplete input may be buffered\n * until a complete token can be emitted.\n *\n * In addition to slices of the original input, the following control characters\n * may also be emitted:\n *\n * - `\\x02` (Start of Text): A document starts with the next token\n * - `\\x18` (Cancel): Unexpected end of flow-mode (indicates an error)\n * - `\\x1f` (Unit Separator): Next token is a scalar value\n * - `\\u{FEFF}` (Byte order mark): Emitted separately outside documents\n */\nclass Lexer {\n    constructor() {\n        /**\n         * Flag indicating whether the end of the current buffer marks the end of\n         * all input\n         */\n        this.atEnd = false;\n        /**\n         * Explicit indent set in block scalar header, as an offset from the current\n         * minimum indent, so e.g. set to 1 from a header `|2+`. Set to -1 if not\n         * explicitly set.\n         */\n        this.blockScalarIndent = -1;\n        /**\n         * Block scalars that include a + (keep) chomping indicator in their header\n         * include trailing empty lines, which are otherwise excluded from the\n         * scalar's contents.\n         */\n        this.blockScalarKeep = false;\n        /** Current input */\n        this.buffer = '';\n        /**\n         * Flag noting whether the map value indicator : can immediately follow this\n         * node within a flow context.\n         */\n        this.flowKey = false;\n        /** Count of surrounding flow collection levels. */\n        this.flowLevel = 0;\n        /**\n         * Minimum level of indentation required for next lines to be parsed as a\n         * part of the current scalar value.\n         */\n        this.indentNext = 0;\n        /** Indentation level of the current line. */\n        this.indentValue = 0;\n        /** Position of the next \\n character. */\n        this.lineEndPos = null;\n        /** Stores the state of the lexer if reaching the end of incpomplete input */\n        this.next = null;\n        /** A pointer to `buffer`; the current position of the lexer. */\n        this.pos = 0;\n    }\n    /**\n     * Generate YAML tokens from the `source` string. If `incomplete`,\n     * a part of the last line may be left as a buffer for the next call.\n     *\n     * @returns A generator of lexical tokens\n     */\n    *lex(source, incomplete = false) {\n        if (source) {\n            if (typeof source !== 'string')\n                throw TypeError('source is not a string');\n            this.buffer = this.buffer ? this.buffer + source : source;\n            this.lineEndPos = null;\n        }\n        this.atEnd = !incomplete;\n        let next = this.next ?? 'stream';\n        while (next && (incomplete || this.hasChars(1)))\n            next = yield* this.parseNext(next);\n    }\n    atLineEnd() {\n        let i = this.pos;\n        let ch = this.buffer[i];\n        while (ch === ' ' || ch === '\\t')\n            ch = this.buffer[++i];\n        if (!ch || ch === '#' || ch === '\\n')\n            return true;\n        if (ch === '\\r')\n            return this.buffer[i + 1] === '\\n';\n        return false;\n    }\n    charAt(n) {\n        return this.buffer[this.pos + n];\n    }\n    continueScalar(offset) {\n        let ch = this.buffer[offset];\n        if (this.indentNext > 0) {\n            let indent = 0;\n            while (ch === ' ')\n                ch = this.buffer[++indent + offset];\n            if (ch === '\\r') {\n                const next = this.buffer[indent + offset + 1];\n                if (next === '\\n' || (!next && !this.atEnd))\n                    return offset + indent + 1;\n            }\n            return ch === '\\n' || indent >= this.indentNext || (!ch && !this.atEnd)\n                ? offset + indent\n                : -1;\n        }\n        if (ch === '-' || ch === '.') {\n            const dt = this.buffer.substr(offset, 3);\n            if ((dt === '---' || dt === '...') && isEmpty(this.buffer[offset + 3]))\n                return -1;\n        }\n        return offset;\n    }\n    getLine() {\n        let end = this.lineEndPos;\n        if (typeof end !== 'number' || (end !== -1 && end < this.pos)) {\n            end = this.buffer.indexOf('\\n', this.pos);\n            this.lineEndPos = end;\n        }\n        if (end === -1)\n            return this.atEnd ? this.buffer.substring(this.pos) : null;\n        if (this.buffer[end - 1] === '\\r')\n            end -= 1;\n        return this.buffer.substring(this.pos, end);\n    }\n    hasChars(n) {\n        return this.pos + n <= this.buffer.length;\n    }\n    setNext(state) {\n        this.buffer = this.buffer.substring(this.pos);\n        this.pos = 0;\n        this.lineEndPos = null;\n        this.next = state;\n        return null;\n    }\n    peek(n) {\n        return this.buffer.substr(this.pos, n);\n    }\n    *parseNext(next) {\n        switch (next) {\n            case 'stream':\n                return yield* this.parseStream();\n            case 'line-start':\n                return yield* this.parseLineStart();\n            case 'block-start':\n                return yield* this.parseBlockStart();\n            case 'doc':\n                return yield* this.parseDocument();\n            case 'flow':\n                return yield* this.parseFlowCollection();\n            case 'quoted-scalar':\n                return yield* this.parseQuotedScalar();\n            case 'block-scalar':\n                return yield* this.parseBlockScalar();\n            case 'plain-scalar':\n                return yield* this.parsePlainScalar();\n        }\n    }\n    *parseStream() {\n        let line = this.getLine();\n        if (line === null)\n            return this.setNext('stream');\n        if (line[0] === BOM) {\n            yield* this.pushCount(1);\n            line = line.substring(1);\n        }\n        if (line[0] === '%') {\n            let dirEnd = line.length;\n            let cs = line.indexOf('#');\n            while (cs !== -1) {\n                const ch = line[cs - 1];\n                if (ch === ' ' || ch === '\\t') {\n                    dirEnd = cs - 1;\n                    break;\n                }\n                else {\n                    cs = line.indexOf('#', cs + 1);\n                }\n            }\n            while (true) {\n                const ch = line[dirEnd - 1];\n                if (ch === ' ' || ch === '\\t')\n                    dirEnd -= 1;\n                else\n                    break;\n            }\n            const n = (yield* this.pushCount(dirEnd)) + (yield* this.pushSpaces(true));\n            yield* this.pushCount(line.length - n); // possible comment\n            this.pushNewline();\n            return 'stream';\n        }\n        if (this.atLineEnd()) {\n            const sp = yield* this.pushSpaces(true);\n            yield* this.pushCount(line.length - sp);\n            yield* this.pushNewline();\n            return 'stream';\n        }\n        yield DOCUMENT;\n        return yield* this.parseLineStart();\n    }\n    *parseLineStart() {\n        const ch = this.charAt(0);\n        if (!ch && !this.atEnd)\n            return this.setNext('line-start');\n        if (ch === '-' || ch === '.') {\n            if (!this.atEnd && !this.hasChars(4))\n                return this.setNext('line-start');\n            const s = this.peek(3);\n            if ((s === '---' || s === '...') && isEmpty(this.charAt(3))) {\n                yield* this.pushCount(3);\n                this.indentValue = 0;\n                this.indentNext = 0;\n                return s === '---' ? 'doc' : 'stream';\n            }\n        }\n        this.indentValue = yield* this.pushSpaces(false);\n        if (this.indentNext > this.indentValue && !isEmpty(this.charAt(1)))\n            this.indentNext = this.indentValue;\n        return yield* this.parseBlockStart();\n    }\n    *parseBlockStart() {\n        const [ch0, ch1] = this.peek(2);\n        if (!ch1 && !this.atEnd)\n            return this.setNext('block-start');\n        if ((ch0 === '-' || ch0 === '?' || ch0 === ':') && isEmpty(ch1)) {\n            const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true));\n            this.indentNext = this.indentValue + 1;\n            this.indentValue += n;\n            return yield* this.parseBlockStart();\n        }\n        return 'doc';\n    }\n    *parseDocument() {\n        yield* this.pushSpaces(true);\n        const line = this.getLine();\n        if (line === null)\n            return this.setNext('doc');\n        let n = yield* this.pushIndicators();\n        switch (line[n]) {\n            case '#':\n                yield* this.pushCount(line.length - n);\n            // fallthrough\n            case undefined:\n                yield* this.pushNewline();\n                return yield* this.parseLineStart();\n            case '{':\n            case '[':\n                yield* this.pushCount(1);\n                this.flowKey = false;\n                this.flowLevel = 1;\n                return 'flow';\n            case '}':\n            case ']':\n                // this is an error\n                yield* this.pushCount(1);\n                return 'doc';\n            case '*':\n                yield* this.pushUntil(isNotAnchorChar);\n                return 'doc';\n            case '\"':\n            case \"'\":\n                return yield* this.parseQuotedScalar();\n            case '|':\n            case '>':\n                n += yield* this.parseBlockScalarHeader();\n                n += yield* this.pushSpaces(true);\n                yield* this.pushCount(line.length - n);\n                yield* this.pushNewline();\n                return yield* this.parseBlockScalar();\n            default:\n                return yield* this.parsePlainScalar();\n        }\n    }\n    *parseFlowCollection() {\n        let nl, sp;\n        let indent = -1;\n        do {\n            nl = yield* this.pushNewline();\n            if (nl > 0) {\n                sp = yield* this.pushSpaces(false);\n                this.indentValue = indent = sp;\n            }\n            else {\n                sp = 0;\n            }\n            sp += yield* this.pushSpaces(true);\n        } while (nl + sp > 0);\n        const line = this.getLine();\n        if (line === null)\n            return this.setNext('flow');\n        if ((indent !== -1 && indent < this.indentNext && line[0] !== '#') ||\n            (indent === 0 &&\n                (line.startsWith('---') || line.startsWith('...')) &&\n                isEmpty(line[3]))) {\n            // Allowing for the terminal ] or } at the same (rather than greater)\n            // indent level as the initial [ or { is technically invalid, but\n            // failing here would be surprising to users.\n            const atFlowEndMarker = indent === this.indentNext - 1 &&\n                this.flowLevel === 1 &&\n                (line[0] === ']' || line[0] === '}');\n            if (!atFlowEndMarker) {\n                // this is an error\n                this.flowLevel = 0;\n                yield FLOW_END;\n                return yield* this.parseLineStart();\n            }\n        }\n        let n = 0;\n        while (line[n] === ',') {\n            n += yield* this.pushCount(1);\n            n += yield* this.pushSpaces(true);\n            this.flowKey = false;\n        }\n        n += yield* this.pushIndicators();\n        switch (line[n]) {\n            case undefined:\n                return 'flow';\n            case '#':\n                yield* this.pushCount(line.length - n);\n                return 'flow';\n            case '{':\n            case '[':\n                yield* this.pushCount(1);\n                this.flowKey = false;\n                this.flowLevel += 1;\n                return 'flow';\n            case '}':\n            case ']':\n                yield* this.pushCount(1);\n                this.flowKey = true;\n                this.flowLevel -= 1;\n                return this.flowLevel ? 'flow' : 'doc';\n            case '*':\n                yield* this.pushUntil(isNotAnchorChar);\n                return 'flow';\n            case '\"':\n            case \"'\":\n                this.flowKey = true;\n                return yield* this.parseQuotedScalar();\n            case ':': {\n                const next = this.charAt(1);\n                if (this.flowKey || isEmpty(next) || next === ',') {\n                    this.flowKey = false;\n                    yield* this.pushCount(1);\n                    yield* this.pushSpaces(true);\n                    return 'flow';\n                }\n            }\n            // fallthrough\n            default:\n                this.flowKey = false;\n                return yield* this.parsePlainScalar();\n        }\n    }\n    *parseQuotedScalar() {\n        const quote = this.charAt(0);\n        let end = this.buffer.indexOf(quote, this.pos + 1);\n        if (quote === \"'\") {\n            while (end !== -1 && this.buffer[end + 1] === \"'\")\n                end = this.buffer.indexOf(\"'\", end + 2);\n        }\n        else {\n            // double-quote\n            while (end !== -1) {\n                let n = 0;\n                while (this.buffer[end - 1 - n] === '\\\\')\n                    n += 1;\n                if (n % 2 === 0)\n                    break;\n                end = this.buffer.indexOf('\"', end + 1);\n            }\n        }\n        // Only looking for newlines within the quotes\n        const qb = this.buffer.substring(0, end);\n        let nl = qb.indexOf('\\n', this.pos);\n        if (nl !== -1) {\n            while (nl !== -1) {\n                const cs = this.continueScalar(nl + 1);\n                if (cs === -1)\n                    break;\n                nl = qb.indexOf('\\n', cs);\n            }\n            if (nl !== -1) {\n                // this is an error caused by an unexpected unindent\n                end = nl - (qb[nl - 1] === '\\r' ? 2 : 1);\n            }\n        }\n        if (end === -1) {\n            if (!this.atEnd)\n                return this.setNext('quoted-scalar');\n            end = this.buffer.length;\n        }\n        yield* this.pushToIndex(end + 1, false);\n        return this.flowLevel ? 'flow' : 'doc';\n    }\n    *parseBlockScalarHeader() {\n        this.blockScalarIndent = -1;\n        this.blockScalarKeep = false;\n        let i = this.pos;\n        while (true) {\n            const ch = this.buffer[++i];\n            if (ch === '+')\n                this.blockScalarKeep = true;\n            else if (ch > '0' && ch <= '9')\n                this.blockScalarIndent = Number(ch) - 1;\n            else if (ch !== '-')\n                break;\n        }\n        return yield* this.pushUntil(ch => isEmpty(ch) || ch === '#');\n    }\n    *parseBlockScalar() {\n        let nl = this.pos - 1; // may be -1 if this.pos === 0\n        let indent = 0;\n        let ch;\n        loop: for (let i = this.pos; (ch = this.buffer[i]); ++i) {\n            switch (ch) {\n                case ' ':\n                    indent += 1;\n                    break;\n                case '\\n':\n                    nl = i;\n                    indent = 0;\n                    break;\n                case '\\r': {\n                    const next = this.buffer[i + 1];\n                    if (!next && !this.atEnd)\n                        return this.setNext('block-scalar');\n                    if (next === '\\n')\n                        break;\n                } // fallthrough\n                default:\n                    break loop;\n            }\n        }\n        if (!ch && !this.atEnd)\n            return this.setNext('block-scalar');\n        if (indent >= this.indentNext) {\n            if (this.blockScalarIndent === -1)\n                this.indentNext = indent;\n            else {\n                this.indentNext =\n                    this.blockScalarIndent + (this.indentNext === 0 ? 1 : this.indentNext);\n            }\n            do {\n                const cs = this.continueScalar(nl + 1);\n                if (cs === -1)\n                    break;\n                nl = this.buffer.indexOf('\\n', cs);\n            } while (nl !== -1);\n            if (nl === -1) {\n                if (!this.atEnd)\n                    return this.setNext('block-scalar');\n                nl = this.buffer.length;\n            }\n        }\n        // Trailing insufficiently indented tabs are invalid.\n        // To catch that during parsing, we include them in the block scalar value.\n        let i = nl + 1;\n        ch = this.buffer[i];\n        while (ch === ' ')\n            ch = this.buffer[++i];\n        if (ch === '\\t') {\n            while (ch === '\\t' || ch === ' ' || ch === '\\r' || ch === '\\n')\n                ch = this.buffer[++i];\n            nl = i - 1;\n        }\n        else if (!this.blockScalarKeep) {\n            do {\n                let i = nl - 1;\n                let ch = this.buffer[i];\n                if (ch === '\\r')\n                    ch = this.buffer[--i];\n                const lastChar = i; // Drop the line if last char not more indented\n                while (ch === ' ')\n                    ch = this.buffer[--i];\n                if (ch === '\\n' && i >= this.pos && i + 1 + indent > lastChar)\n                    nl = i;\n                else\n                    break;\n            } while (true);\n        }\n        yield SCALAR;\n        yield* this.pushToIndex(nl + 1, true);\n        return yield* this.parseLineStart();\n    }\n    *parsePlainScalar() {\n        const inFlow = this.flowLevel > 0;\n        let end = this.pos - 1;\n        let i = this.pos - 1;\n        let ch;\n        while ((ch = this.buffer[++i])) {\n            if (ch === ':') {\n                const next = this.buffer[i + 1];\n                if (isEmpty(next) || (inFlow && flowIndicatorChars.has(next)))\n                    break;\n                end = i;\n            }\n            else if (isEmpty(ch)) {\n                let next = this.buffer[i + 1];\n                if (ch === '\\r') {\n                    if (next === '\\n') {\n                        i += 1;\n                        ch = '\\n';\n                        next = this.buffer[i + 1];\n                    }\n                    else\n                        end = i;\n                }\n                if (next === '#' || (inFlow && flowIndicatorChars.has(next)))\n                    break;\n                if (ch === '\\n') {\n                    const cs = this.continueScalar(i + 1);\n                    if (cs === -1)\n                        break;\n                    i = Math.max(i, cs - 2); // to advance, but still account for ' #'\n                }\n            }\n            else {\n                if (inFlow && flowIndicatorChars.has(ch))\n                    break;\n                end = i;\n            }\n        }\n        if (!ch && !this.atEnd)\n            return this.setNext('plain-scalar');\n        yield SCALAR;\n        yield* this.pushToIndex(end + 1, true);\n        return inFlow ? 'flow' : 'doc';\n    }\n    *pushCount(n) {\n        if (n > 0) {\n            yield this.buffer.substr(this.pos, n);\n            this.pos += n;\n            return n;\n        }\n        return 0;\n    }\n    *pushToIndex(i, allowEmpty) {\n        const s = this.buffer.slice(this.pos, i);\n        if (s) {\n            yield s;\n            this.pos += s.length;\n            return s.length;\n        }\n        else if (allowEmpty)\n            yield '';\n        return 0;\n    }\n    *pushIndicators() {\n        switch (this.charAt(0)) {\n            case '!':\n                return ((yield* this.pushTag()) +\n                    (yield* this.pushSpaces(true)) +\n                    (yield* this.pushIndicators()));\n            case '&':\n                return ((yield* this.pushUntil(isNotAnchorChar)) +\n                    (yield* this.pushSpaces(true)) +\n                    (yield* this.pushIndicators()));\n            case '-': // this is an error\n            case '?': // this is an error outside flow collections\n            case ':': {\n                const inFlow = this.flowLevel > 0;\n                const ch1 = this.charAt(1);\n                if (isEmpty(ch1) || (inFlow && flowIndicatorChars.has(ch1))) {\n                    if (!inFlow)\n                        this.indentNext = this.indentValue + 1;\n                    else if (this.flowKey)\n                        this.flowKey = false;\n                    return ((yield* this.pushCount(1)) +\n                        (yield* this.pushSpaces(true)) +\n                        (yield* this.pushIndicators()));\n                }\n            }\n        }\n        return 0;\n    }\n    *pushTag() {\n        if (this.charAt(1) === '<') {\n            let i = this.pos + 2;\n            let ch = this.buffer[i];\n            while (!isEmpty(ch) && ch !== '>')\n                ch = this.buffer[++i];\n            return yield* this.pushToIndex(ch === '>' ? i + 1 : i, false);\n        }\n        else {\n            let i = this.pos + 1;\n            let ch = this.buffer[i];\n            while (ch) {\n                if (tagChars.has(ch))\n                    ch = this.buffer[++i];\n                else if (ch === '%' &&\n                    hexDigits.has(this.buffer[i + 1]) &&\n                    hexDigits.has(this.buffer[i + 2])) {\n                    ch = this.buffer[(i += 3)];\n                }\n                else\n                    break;\n            }\n            return yield* this.pushToIndex(i, false);\n        }\n    }\n    *pushNewline() {\n        const ch = this.buffer[this.pos];\n        if (ch === '\\n')\n            return yield* this.pushCount(1);\n        else if (ch === '\\r' && this.charAt(1) === '\\n')\n            return yield* this.pushCount(2);\n        else\n            return 0;\n    }\n    *pushSpaces(allowTabs) {\n        let i = this.pos - 1;\n        let ch;\n        do {\n            ch = this.buffer[++i];\n        } while (ch === ' ' || (allowTabs && ch === '\\t'));\n        const n = i - this.pos;\n        if (n > 0) {\n            yield this.buffer.substr(this.pos, n);\n            this.pos = i;\n        }\n        return n;\n    }\n    *pushUntil(test) {\n        let i = this.pos;\n        let ch = this.buffer[i];\n        while (!test(ch))\n            ch = this.buffer[++i];\n        return yield* this.pushToIndex(i, false);\n    }\n}\n\nexport { Lexer };\n","/**\n * Tracks newlines during parsing in order to provide an efficient API for\n * determining the one-indexed `{ line, col }` position for any offset\n * within the input.\n */\nclass LineCounter {\n    constructor() {\n        this.lineStarts = [];\n        /**\n         * Should be called in ascending order. Otherwise, call\n         * `lineCounter.lineStarts.sort()` before calling `linePos()`.\n         */\n        this.addNewLine = (offset) => this.lineStarts.push(offset);\n        /**\n         * Performs a binary search and returns the 1-indexed { line, col }\n         * position of `offset`. If `line === 0`, `addNewLine` has never been\n         * called or `offset` is before the first known newline.\n         */\n        this.linePos = (offset) => {\n            let low = 0;\n            let high = this.lineStarts.length;\n            while (low < high) {\n                const mid = (low + high) >> 1; // Math.floor((low + high) / 2)\n                if (this.lineStarts[mid] < offset)\n                    low = mid + 1;\n                else\n                    high = mid;\n            }\n            if (this.lineStarts[low] === offset)\n                return { line: low + 1, col: 1 };\n            if (low === 0)\n                return { line: 0, col: offset };\n            const start = this.lineStarts[low - 1];\n            return { line: low, col: offset - start + 1 };\n        };\n    }\n}\n\nexport { LineCounter };\n","import { tokenType } from './cst.js';\nimport { Lexer } from './lexer.js';\n\nfunction includesToken(list, type) {\n    for (let i = 0; i < list.length; ++i)\n        if (list[i].type === type)\n            return true;\n    return false;\n}\nfunction findNonEmptyIndex(list) {\n    for (let i = 0; i < list.length; ++i) {\n        switch (list[i].type) {\n            case 'space':\n            case 'comment':\n            case 'newline':\n                break;\n            default:\n                return i;\n        }\n    }\n    return -1;\n}\nfunction isFlowToken(token) {\n    switch (token?.type) {\n        case 'alias':\n        case 'scalar':\n        case 'single-quoted-scalar':\n        case 'double-quoted-scalar':\n        case 'flow-collection':\n            return true;\n        default:\n            return false;\n    }\n}\nfunction getPrevProps(parent) {\n    switch (parent.type) {\n        case 'document':\n            return parent.start;\n        case 'block-map': {\n            const it = parent.items[parent.items.length - 1];\n            return it.sep ?? it.start;\n        }\n        case 'block-seq':\n            return parent.items[parent.items.length - 1].start;\n        /* istanbul ignore next should not happen */\n        default:\n            return [];\n    }\n}\n/** Note: May modify input array */\nfunction getFirstKeyStartProps(prev) {\n    if (prev.length === 0)\n        return [];\n    let i = prev.length;\n    loop: while (--i >= 0) {\n        switch (prev[i].type) {\n            case 'doc-start':\n            case 'explicit-key-ind':\n            case 'map-value-ind':\n            case 'seq-item-ind':\n            case 'newline':\n                break loop;\n        }\n    }\n    while (prev[++i]?.type === 'space') {\n        /* loop */\n    }\n    return prev.splice(i, prev.length);\n}\nfunction fixFlowSeqItems(fc) {\n    if (fc.start.type === 'flow-seq-start') {\n        for (const it of fc.items) {\n            if (it.sep &&\n                !it.value &&\n                !includesToken(it.start, 'explicit-key-ind') &&\n                !includesToken(it.sep, 'map-value-ind')) {\n                if (it.key)\n                    it.value = it.key;\n                delete it.key;\n                if (isFlowToken(it.value)) {\n                    if (it.value.end)\n                        Array.prototype.push.apply(it.value.end, it.sep);\n                    else\n                        it.value.end = it.sep;\n                }\n                else\n                    Array.prototype.push.apply(it.start, it.sep);\n                delete it.sep;\n            }\n        }\n    }\n}\n/**\n * A YAML concrete syntax tree (CST) parser\n *\n * ```ts\n * const src: string = ...\n * for (const token of new Parser().parse(src)) {\n *   // token: Token\n * }\n * ```\n *\n * To use the parser with a user-provided lexer:\n *\n * ```ts\n * function* parse(source: string, lexer: Lexer) {\n *   const parser = new Parser()\n *   for (const lexeme of lexer.lex(source))\n *     yield* parser.next(lexeme)\n *   yield* parser.end()\n * }\n *\n * const src: string = ...\n * const lexer = new Lexer()\n * for (const token of parse(src, lexer)) {\n *   // token: Token\n * }\n * ```\n */\nclass Parser {\n    /**\n     * @param onNewLine - If defined, called separately with the start position of\n     *   each new line (in `parse()`, including the start of input).\n     */\n    constructor(onNewLine) {\n        /** If true, space and sequence indicators count as indentation */\n        this.atNewLine = true;\n        /** If true, next token is a scalar value */\n        this.atScalar = false;\n        /** Current indentation level */\n        this.indent = 0;\n        /** Current offset since the start of parsing */\n        this.offset = 0;\n        /** On the same line with a block map key */\n        this.onKeyLine = false;\n        /** Top indicates the node that's currently being built */\n        this.stack = [];\n        /** The source of the current token, set in parse() */\n        this.source = '';\n        /** The type of the current token, set in parse() */\n        this.type = '';\n        // Must be defined after `next()`\n        this.lexer = new Lexer();\n        this.onNewLine = onNewLine;\n    }\n    /**\n     * Parse `source` as a YAML stream.\n     * If `incomplete`, a part of the last line may be left as a buffer for the next call.\n     *\n     * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens.\n     *\n     * @returns A generator of tokens representing each directive, document, and other structure.\n     */\n    *parse(source, incomplete = false) {\n        if (this.onNewLine && this.offset === 0)\n            this.onNewLine(0);\n        for (const lexeme of this.lexer.lex(source, incomplete))\n            yield* this.next(lexeme);\n        if (!incomplete)\n            yield* this.end();\n    }\n    /**\n     * Advance the parser by the `source` of one lexical token.\n     */\n    *next(source) {\n        this.source = source;\n        if (this.atScalar) {\n            this.atScalar = false;\n            yield* this.step();\n            this.offset += source.length;\n            return;\n        }\n        const type = tokenType(source);\n        if (!type) {\n            const message = `Not a YAML token: ${source}`;\n            yield* this.pop({ type: 'error', offset: this.offset, message, source });\n            this.offset += source.length;\n        }\n        else if (type === 'scalar') {\n            this.atNewLine = false;\n            this.atScalar = true;\n            this.type = 'scalar';\n        }\n        else {\n            this.type = type;\n            yield* this.step();\n            switch (type) {\n                case 'newline':\n                    this.atNewLine = true;\n                    this.indent = 0;\n                    if (this.onNewLine)\n                        this.onNewLine(this.offset + source.length);\n                    break;\n                case 'space':\n                    if (this.atNewLine && source[0] === ' ')\n                        this.indent += source.length;\n                    break;\n                case 'explicit-key-ind':\n                case 'map-value-ind':\n                case 'seq-item-ind':\n                    if (this.atNewLine)\n                        this.indent += source.length;\n                    break;\n                case 'doc-mode':\n                case 'flow-error-end':\n                    return;\n                default:\n                    this.atNewLine = false;\n            }\n            this.offset += source.length;\n        }\n    }\n    /** Call at end of input to push out any remaining constructions */\n    *end() {\n        while (this.stack.length > 0)\n            yield* this.pop();\n    }\n    get sourceToken() {\n        const st = {\n            type: this.type,\n            offset: this.offset,\n            indent: this.indent,\n            source: this.source\n        };\n        return st;\n    }\n    *step() {\n        const top = this.peek(1);\n        if (this.type === 'doc-end' && (!top || top.type !== 'doc-end')) {\n            while (this.stack.length > 0)\n                yield* this.pop();\n            this.stack.push({\n                type: 'doc-end',\n                offset: this.offset,\n                source: this.source\n            });\n            return;\n        }\n        if (!top)\n            return yield* this.stream();\n        switch (top.type) {\n            case 'document':\n                return yield* this.document(top);\n            case 'alias':\n            case 'scalar':\n            case 'single-quoted-scalar':\n            case 'double-quoted-scalar':\n                return yield* this.scalar(top);\n            case 'block-scalar':\n                return yield* this.blockScalar(top);\n            case 'block-map':\n                return yield* this.blockMap(top);\n            case 'block-seq':\n                return yield* this.blockSequence(top);\n            case 'flow-collection':\n                return yield* this.flowCollection(top);\n            case 'doc-end':\n                return yield* this.documentEnd(top);\n        }\n        /* istanbul ignore next should not happen */\n        yield* this.pop();\n    }\n    peek(n) {\n        return this.stack[this.stack.length - n];\n    }\n    *pop(error) {\n        const token = error ?? this.stack.pop();\n        /* istanbul ignore if should not happen */\n        if (!token) {\n            const message = 'Tried to pop an empty stack';\n            yield { type: 'error', offset: this.offset, source: '', message };\n        }\n        else if (this.stack.length === 0) {\n            yield token;\n        }\n        else {\n            const top = this.peek(1);\n            if (token.type === 'block-scalar') {\n                // Block scalars use their parent rather than header indent\n                token.indent = 'indent' in top ? top.indent : 0;\n            }\n            else if (token.type === 'flow-collection' && top.type === 'document') {\n                // Ignore all indent for top-level flow collections\n                token.indent = 0;\n            }\n            if (token.type === 'flow-collection')\n                fixFlowSeqItems(token);\n            switch (top.type) {\n                case 'document':\n                    top.value = token;\n                    break;\n                case 'block-scalar':\n                    top.props.push(token); // error\n                    break;\n                case 'block-map': {\n                    const it = top.items[top.items.length - 1];\n                    if (it.value) {\n                        top.items.push({ start: [], key: token, sep: [] });\n                        this.onKeyLine = true;\n                        return;\n                    }\n                    else if (it.sep) {\n                        it.value = token;\n                    }\n                    else {\n                        Object.assign(it, { key: token, sep: [] });\n                        this.onKeyLine = !it.explicitKey;\n                        return;\n                    }\n                    break;\n                }\n                case 'block-seq': {\n                    const it = top.items[top.items.length - 1];\n                    if (it.value)\n                        top.items.push({ start: [], value: token });\n                    else\n                        it.value = token;\n                    break;\n                }\n                case 'flow-collection': {\n                    const it = top.items[top.items.length - 1];\n                    if (!it || it.value)\n                        top.items.push({ start: [], key: token, sep: [] });\n                    else if (it.sep)\n                        it.value = token;\n                    else\n                        Object.assign(it, { key: token, sep: [] });\n                    return;\n                }\n                /* istanbul ignore next should not happen */\n                default:\n                    yield* this.pop();\n                    yield* this.pop(token);\n            }\n            if ((top.type === 'document' ||\n                top.type === 'block-map' ||\n                top.type === 'block-seq') &&\n                (token.type === 'block-map' || token.type === 'block-seq')) {\n                const last = token.items[token.items.length - 1];\n                if (last &&\n                    !last.sep &&\n                    !last.value &&\n                    last.start.length > 0 &&\n                    findNonEmptyIndex(last.start) === -1 &&\n                    (token.indent === 0 ||\n                        last.start.every(st => st.type !== 'comment' || st.indent < token.indent))) {\n                    if (top.type === 'document')\n                        top.end = last.start;\n                    else\n                        top.items.push({ start: last.start });\n                    token.items.splice(-1, 1);\n                }\n            }\n        }\n    }\n    *stream() {\n        switch (this.type) {\n            case 'directive-line':\n                yield { type: 'directive', offset: this.offset, source: this.source };\n                return;\n            case 'byte-order-mark':\n            case 'space':\n            case 'comment':\n            case 'newline':\n                yield this.sourceToken;\n                return;\n            case 'doc-mode':\n            case 'doc-start': {\n                const doc = {\n                    type: 'document',\n                    offset: this.offset,\n                    start: []\n                };\n                if (this.type === 'doc-start')\n                    doc.start.push(this.sourceToken);\n                this.stack.push(doc);\n                return;\n            }\n        }\n        yield {\n            type: 'error',\n            offset: this.offset,\n            message: `Unexpected ${this.type} token in YAML stream`,\n            source: this.source\n        };\n    }\n    *document(doc) {\n        if (doc.value)\n            return yield* this.lineEnd(doc);\n        switch (this.type) {\n            case 'doc-start': {\n                if (findNonEmptyIndex(doc.start) !== -1) {\n                    yield* this.pop();\n                    yield* this.step();\n                }\n                else\n                    doc.start.push(this.sourceToken);\n                return;\n            }\n            case 'anchor':\n            case 'tag':\n            case 'space':\n            case 'comment':\n            case 'newline':\n                doc.start.push(this.sourceToken);\n                return;\n        }\n        const bv = this.startBlockValue(doc);\n        if (bv)\n            this.stack.push(bv);\n        else {\n            yield {\n                type: 'error',\n                offset: this.offset,\n                message: `Unexpected ${this.type} token in YAML document`,\n                source: this.source\n            };\n        }\n    }\n    *scalar(scalar) {\n        if (this.type === 'map-value-ind') {\n            const prev = getPrevProps(this.peek(2));\n            const start = getFirstKeyStartProps(prev);\n            let sep;\n            if (scalar.end) {\n                sep = scalar.end;\n                sep.push(this.sourceToken);\n                delete scalar.end;\n            }\n            else\n                sep = [this.sourceToken];\n            const map = {\n                type: 'block-map',\n                offset: scalar.offset,\n                indent: scalar.indent,\n                items: [{ start, key: scalar, sep }]\n            };\n            this.onKeyLine = true;\n            this.stack[this.stack.length - 1] = map;\n        }\n        else\n            yield* this.lineEnd(scalar);\n    }\n    *blockScalar(scalar) {\n        switch (this.type) {\n            case 'space':\n            case 'comment':\n            case 'newline':\n                scalar.props.push(this.sourceToken);\n                return;\n            case 'scalar':\n                scalar.source = this.source;\n                // block-scalar source includes trailing newline\n                this.atNewLine = true;\n                this.indent = 0;\n                if (this.onNewLine) {\n                    let nl = this.source.indexOf('\\n') + 1;\n                    while (nl !== 0) {\n                        this.onNewLine(this.offset + nl);\n                        nl = this.source.indexOf('\\n', nl) + 1;\n                    }\n                }\n                yield* this.pop();\n                break;\n            /* istanbul ignore next should not happen */\n            default:\n                yield* this.pop();\n                yield* this.step();\n        }\n    }\n    *blockMap(map) {\n        const it = map.items[map.items.length - 1];\n        // it.sep is true-ish if pair already has key or : separator\n        switch (this.type) {\n            case 'newline':\n                this.onKeyLine = false;\n                if (it.value) {\n                    const end = 'end' in it.value ? it.value.end : undefined;\n                    const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n                    if (last?.type === 'comment')\n                        end?.push(this.sourceToken);\n                    else\n                        map.items.push({ start: [this.sourceToken] });\n                }\n                else if (it.sep) {\n                    it.sep.push(this.sourceToken);\n                }\n                else {\n                    it.start.push(this.sourceToken);\n                }\n                return;\n            case 'space':\n            case 'comment':\n                if (it.value) {\n                    map.items.push({ start: [this.sourceToken] });\n                }\n                else if (it.sep) {\n                    it.sep.push(this.sourceToken);\n                }\n                else {\n                    if (this.atIndentedComment(it.start, map.indent)) {\n                        const prev = map.items[map.items.length - 2];\n                        const end = prev?.value?.end;\n                        if (Array.isArray(end)) {\n                            Array.prototype.push.apply(end, it.start);\n                            end.push(this.sourceToken);\n                            map.items.pop();\n                            return;\n                        }\n                    }\n                    it.start.push(this.sourceToken);\n                }\n                return;\n        }\n        if (this.indent >= map.indent) {\n            const atMapIndent = !this.onKeyLine && this.indent === map.indent;\n            const atNextItem = atMapIndent &&\n                (it.sep || it.explicitKey) &&\n                this.type !== 'seq-item-ind';\n            // For empty nodes, assign newline-separated not indented empty tokens to following node\n            let start = [];\n            if (atNextItem && it.sep && !it.value) {\n                const nl = [];\n                for (let i = 0; i < it.sep.length; ++i) {\n                    const st = it.sep[i];\n                    switch (st.type) {\n                        case 'newline':\n                            nl.push(i);\n                            break;\n                        case 'space':\n                            break;\n                        case 'comment':\n                            if (st.indent > map.indent)\n                                nl.length = 0;\n                            break;\n                        default:\n                            nl.length = 0;\n                    }\n                }\n                if (nl.length >= 2)\n                    start = it.sep.splice(nl[1]);\n            }\n            switch (this.type) {\n                case 'anchor':\n                case 'tag':\n                    if (atNextItem || it.value) {\n                        start.push(this.sourceToken);\n                        map.items.push({ start });\n                        this.onKeyLine = true;\n                    }\n                    else if (it.sep) {\n                        it.sep.push(this.sourceToken);\n                    }\n                    else {\n                        it.start.push(this.sourceToken);\n                    }\n                    return;\n                case 'explicit-key-ind':\n                    if (!it.sep && !it.explicitKey) {\n                        it.start.push(this.sourceToken);\n                        it.explicitKey = true;\n                    }\n                    else if (atNextItem || it.value) {\n                        start.push(this.sourceToken);\n                        map.items.push({ start, explicitKey: true });\n                    }\n                    else {\n                        this.stack.push({\n                            type: 'block-map',\n                            offset: this.offset,\n                            indent: this.indent,\n                            items: [{ start: [this.sourceToken], explicitKey: true }]\n                        });\n                    }\n                    this.onKeyLine = true;\n                    return;\n                case 'map-value-ind':\n                    if (it.explicitKey) {\n                        if (!it.sep) {\n                            if (includesToken(it.start, 'newline')) {\n                                Object.assign(it, { key: null, sep: [this.sourceToken] });\n                            }\n                            else {\n                                const start = getFirstKeyStartProps(it.start);\n                                this.stack.push({\n                                    type: 'block-map',\n                                    offset: this.offset,\n                                    indent: this.indent,\n                                    items: [{ start, key: null, sep: [this.sourceToken] }]\n                                });\n                            }\n                        }\n                        else if (it.value) {\n                            map.items.push({ start: [], key: null, sep: [this.sourceToken] });\n                        }\n                        else if (includesToken(it.sep, 'map-value-ind')) {\n                            this.stack.push({\n                                type: 'block-map',\n                                offset: this.offset,\n                                indent: this.indent,\n                                items: [{ start, key: null, sep: [this.sourceToken] }]\n                            });\n                        }\n                        else if (isFlowToken(it.key) &&\n                            !includesToken(it.sep, 'newline')) {\n                            const start = getFirstKeyStartProps(it.start);\n                            const key = it.key;\n                            const sep = it.sep;\n                            sep.push(this.sourceToken);\n                            // @ts-expect-error type guard is wrong here\n                            delete it.key;\n                            // @ts-expect-error type guard is wrong here\n                            delete it.sep;\n                            this.stack.push({\n                                type: 'block-map',\n                                offset: this.offset,\n                                indent: this.indent,\n                                items: [{ start, key, sep }]\n                            });\n                        }\n                        else if (start.length > 0) {\n                            // Not actually at next item\n                            it.sep = it.sep.concat(start, this.sourceToken);\n                        }\n                        else {\n                            it.sep.push(this.sourceToken);\n                        }\n                    }\n                    else {\n                        if (!it.sep) {\n                            Object.assign(it, { key: null, sep: [this.sourceToken] });\n                        }\n                        else if (it.value || atNextItem) {\n                            map.items.push({ start, key: null, sep: [this.sourceToken] });\n                        }\n                        else if (includesToken(it.sep, 'map-value-ind')) {\n                            this.stack.push({\n                                type: 'block-map',\n                                offset: this.offset,\n                                indent: this.indent,\n                                items: [{ start: [], key: null, sep: [this.sourceToken] }]\n                            });\n                        }\n                        else {\n                            it.sep.push(this.sourceToken);\n                        }\n                    }\n                    this.onKeyLine = true;\n                    return;\n                case 'alias':\n                case 'scalar':\n                case 'single-quoted-scalar':\n                case 'double-quoted-scalar': {\n                    const fs = this.flowScalar(this.type);\n                    if (atNextItem || it.value) {\n                        map.items.push({ start, key: fs, sep: [] });\n                        this.onKeyLine = true;\n                    }\n                    else if (it.sep) {\n                        this.stack.push(fs);\n                    }\n                    else {\n                        Object.assign(it, { key: fs, sep: [] });\n                        this.onKeyLine = true;\n                    }\n                    return;\n                }\n                default: {\n                    const bv = this.startBlockValue(map);\n                    if (bv) {\n                        if (bv.type === 'block-seq') {\n                            if (!it.explicitKey &&\n                                it.sep &&\n                                !includesToken(it.sep, 'newline')) {\n                                yield* this.pop({\n                                    type: 'error',\n                                    offset: this.offset,\n                                    message: 'Unexpected block-seq-ind on same line with key',\n                                    source: this.source\n                                });\n                                return;\n                            }\n                        }\n                        else if (atMapIndent) {\n                            map.items.push({ start });\n                        }\n                        this.stack.push(bv);\n                        return;\n                    }\n                }\n            }\n        }\n        yield* this.pop();\n        yield* this.step();\n    }\n    *blockSequence(seq) {\n        const it = seq.items[seq.items.length - 1];\n        switch (this.type) {\n            case 'newline':\n                if (it.value) {\n                    const end = 'end' in it.value ? it.value.end : undefined;\n                    const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n                    if (last?.type === 'comment')\n                        end?.push(this.sourceToken);\n                    else\n                        seq.items.push({ start: [this.sourceToken] });\n                }\n                else\n                    it.start.push(this.sourceToken);\n                return;\n            case 'space':\n            case 'comment':\n                if (it.value)\n                    seq.items.push({ start: [this.sourceToken] });\n                else {\n                    if (this.atIndentedComment(it.start, seq.indent)) {\n                        const prev = seq.items[seq.items.length - 2];\n                        const end = prev?.value?.end;\n                        if (Array.isArray(end)) {\n                            Array.prototype.push.apply(end, it.start);\n                            end.push(this.sourceToken);\n                            seq.items.pop();\n                            return;\n                        }\n                    }\n                    it.start.push(this.sourceToken);\n                }\n                return;\n            case 'anchor':\n            case 'tag':\n                if (it.value || this.indent <= seq.indent)\n                    break;\n                it.start.push(this.sourceToken);\n                return;\n            case 'seq-item-ind':\n                if (this.indent !== seq.indent)\n                    break;\n                if (it.value || includesToken(it.start, 'seq-item-ind'))\n                    seq.items.push({ start: [this.sourceToken] });\n                else\n                    it.start.push(this.sourceToken);\n                return;\n        }\n        if (this.indent > seq.indent) {\n            const bv = this.startBlockValue(seq);\n            if (bv) {\n                this.stack.push(bv);\n                return;\n            }\n        }\n        yield* this.pop();\n        yield* this.step();\n    }\n    *flowCollection(fc) {\n        const it = fc.items[fc.items.length - 1];\n        if (this.type === 'flow-error-end') {\n            let top;\n            do {\n                yield* this.pop();\n                top = this.peek(1);\n            } while (top && top.type === 'flow-collection');\n        }\n        else if (fc.end.length === 0) {\n            switch (this.type) {\n                case 'comma':\n                case 'explicit-key-ind':\n                    if (!it || it.sep)\n                        fc.items.push({ start: [this.sourceToken] });\n                    else\n                        it.start.push(this.sourceToken);\n                    return;\n                case 'map-value-ind':\n                    if (!it || it.value)\n                        fc.items.push({ start: [], key: null, sep: [this.sourceToken] });\n                    else if (it.sep)\n                        it.sep.push(this.sourceToken);\n                    else\n                        Object.assign(it, { key: null, sep: [this.sourceToken] });\n                    return;\n                case 'space':\n                case 'comment':\n                case 'newline':\n                case 'anchor':\n                case 'tag':\n                    if (!it || it.value)\n                        fc.items.push({ start: [this.sourceToken] });\n                    else if (it.sep)\n                        it.sep.push(this.sourceToken);\n                    else\n                        it.start.push(this.sourceToken);\n                    return;\n                case 'alias':\n                case 'scalar':\n                case 'single-quoted-scalar':\n                case 'double-quoted-scalar': {\n                    const fs = this.flowScalar(this.type);\n                    if (!it || it.value)\n                        fc.items.push({ start: [], key: fs, sep: [] });\n                    else if (it.sep)\n                        this.stack.push(fs);\n                    else\n                        Object.assign(it, { key: fs, sep: [] });\n                    return;\n                }\n                case 'flow-map-end':\n                case 'flow-seq-end':\n                    fc.end.push(this.sourceToken);\n                    return;\n            }\n            const bv = this.startBlockValue(fc);\n            /* istanbul ignore else should not happen */\n            if (bv)\n                this.stack.push(bv);\n            else {\n                yield* this.pop();\n                yield* this.step();\n            }\n        }\n        else {\n            const parent = this.peek(2);\n            if (parent.type === 'block-map' &&\n                ((this.type === 'map-value-ind' && parent.indent === fc.indent) ||\n                    (this.type === 'newline' &&\n                        !parent.items[parent.items.length - 1].sep))) {\n                yield* this.pop();\n                yield* this.step();\n            }\n            else if (this.type === 'map-value-ind' &&\n                parent.type !== 'flow-collection') {\n                const prev = getPrevProps(parent);\n                const start = getFirstKeyStartProps(prev);\n                fixFlowSeqItems(fc);\n                const sep = fc.end.splice(1, fc.end.length);\n                sep.push(this.sourceToken);\n                const map = {\n                    type: 'block-map',\n                    offset: fc.offset,\n                    indent: fc.indent,\n                    items: [{ start, key: fc, sep }]\n                };\n                this.onKeyLine = true;\n                this.stack[this.stack.length - 1] = map;\n            }\n            else {\n                yield* this.lineEnd(fc);\n            }\n        }\n    }\n    flowScalar(type) {\n        if (this.onNewLine) {\n            let nl = this.source.indexOf('\\n') + 1;\n            while (nl !== 0) {\n                this.onNewLine(this.offset + nl);\n                nl = this.source.indexOf('\\n', nl) + 1;\n            }\n        }\n        return {\n            type,\n            offset: this.offset,\n            indent: this.indent,\n            source: this.source\n        };\n    }\n    startBlockValue(parent) {\n        switch (this.type) {\n            case 'alias':\n            case 'scalar':\n            case 'single-quoted-scalar':\n            case 'double-quoted-scalar':\n                return this.flowScalar(this.type);\n            case 'block-scalar-header':\n                return {\n                    type: 'block-scalar',\n                    offset: this.offset,\n                    indent: this.indent,\n                    props: [this.sourceToken],\n                    source: ''\n                };\n            case 'flow-map-start':\n            case 'flow-seq-start':\n                return {\n                    type: 'flow-collection',\n                    offset: this.offset,\n                    indent: this.indent,\n                    start: this.sourceToken,\n                    items: [],\n                    end: []\n                };\n            case 'seq-item-ind':\n                return {\n                    type: 'block-seq',\n                    offset: this.offset,\n                    indent: this.indent,\n                    items: [{ start: [this.sourceToken] }]\n                };\n            case 'explicit-key-ind': {\n                this.onKeyLine = true;\n                const prev = getPrevProps(parent);\n                const start = getFirstKeyStartProps(prev);\n                start.push(this.sourceToken);\n                return {\n                    type: 'block-map',\n                    offset: this.offset,\n                    indent: this.indent,\n                    items: [{ start, explicitKey: true }]\n                };\n            }\n            case 'map-value-ind': {\n                this.onKeyLine = true;\n                const prev = getPrevProps(parent);\n                const start = getFirstKeyStartProps(prev);\n                return {\n                    type: 'block-map',\n                    offset: this.offset,\n                    indent: this.indent,\n                    items: [{ start, key: null, sep: [this.sourceToken] }]\n                };\n            }\n        }\n        return null;\n    }\n    atIndentedComment(start, indent) {\n        if (this.type !== 'comment')\n            return false;\n        if (this.indent <= indent)\n            return false;\n        return start.every(st => st.type === 'newline' || st.type === 'space');\n    }\n    *documentEnd(docEnd) {\n        if (this.type !== 'doc-mode') {\n            if (docEnd.end)\n                docEnd.end.push(this.sourceToken);\n            else\n                docEnd.end = [this.sourceToken];\n            if (this.type === 'newline')\n                yield* this.pop();\n        }\n    }\n    *lineEnd(token) {\n        switch (this.type) {\n            case 'comma':\n            case 'doc-start':\n            case 'doc-end':\n            case 'flow-seq-end':\n            case 'flow-map-end':\n            case 'map-value-ind':\n                yield* this.pop();\n                yield* this.step();\n                break;\n            case 'newline':\n                this.onKeyLine = false;\n            // fallthrough\n            case 'space':\n            case 'comment':\n            default:\n                // all other values are errors\n                if (token.end)\n                    token.end.push(this.sourceToken);\n                else\n                    token.end = [this.sourceToken];\n                if (this.type === 'newline')\n                    yield* this.pop();\n        }\n    }\n}\n\nexport { Parser };\n","import { Composer } from './compose/composer.js';\nimport { Document } from './doc/Document.js';\nimport { prettifyError, YAMLParseError } from './errors.js';\nimport { warn } from './log.js';\nimport { isDocument } from './nodes/identity.js';\nimport { LineCounter } from './parse/line-counter.js';\nimport { Parser } from './parse/parser.js';\n\nfunction parseOptions(options) {\n    const prettyErrors = options.prettyErrors !== false;\n    const lineCounter = options.lineCounter || (prettyErrors && new LineCounter()) || null;\n    return { lineCounter, prettyErrors };\n}\n/**\n * Parse the input as a stream of YAML documents.\n *\n * Documents should be separated from each other by `...` or `---` marker lines.\n *\n * @returns If an empty `docs` array is returned, it will be of type\n *   EmptyStream and contain additional stream information. In\n *   TypeScript, you should use `'empty' in docs` as a type guard for it.\n */\nfunction parseAllDocuments(source, options = {}) {\n    const { lineCounter, prettyErrors } = parseOptions(options);\n    const parser = new Parser(lineCounter?.addNewLine);\n    const composer = new Composer(options);\n    const docs = Array.from(composer.compose(parser.parse(source)));\n    if (prettyErrors && lineCounter)\n        for (const doc of docs) {\n            doc.errors.forEach(prettifyError(source, lineCounter));\n            doc.warnings.forEach(prettifyError(source, lineCounter));\n        }\n    if (docs.length > 0)\n        return docs;\n    return Object.assign([], { empty: true }, composer.streamInfo());\n}\n/** Parse an input string into a single YAML.Document */\nfunction parseDocument(source, options = {}) {\n    const { lineCounter, prettyErrors } = parseOptions(options);\n    const parser = new Parser(lineCounter?.addNewLine);\n    const composer = new Composer(options);\n    // `doc` is always set by compose.end(true) at the very latest\n    let doc = null;\n    for (const _doc of composer.compose(parser.parse(source), true, source.length)) {\n        if (!doc)\n            doc = _doc;\n        else if (doc.options.logLevel !== 'silent') {\n            doc.errors.push(new YAMLParseError(_doc.range.slice(0, 2), 'MULTIPLE_DOCS', 'Source contains multiple documents; please use YAML.parseAllDocuments()'));\n            break;\n        }\n    }\n    if (prettyErrors && lineCounter) {\n        doc.errors.forEach(prettifyError(source, lineCounter));\n        doc.warnings.forEach(prettifyError(source, lineCounter));\n    }\n    return doc;\n}\nfunction parse(src, reviver, options) {\n    let _reviver = undefined;\n    if (typeof reviver === 'function') {\n        _reviver = reviver;\n    }\n    else if (options === undefined && reviver && typeof reviver === 'object') {\n        options = reviver;\n    }\n    const doc = parseDocument(src, options);\n    if (!doc)\n        return null;\n    doc.warnings.forEach(warning => warn(doc.options.logLevel, warning));\n    if (doc.errors.length > 0) {\n        if (doc.options.logLevel !== 'silent')\n            throw doc.errors[0];\n        else\n            doc.errors = [];\n    }\n    return doc.toJS(Object.assign({ reviver: _reviver }, options));\n}\nfunction stringify(value, replacer, options) {\n    let _replacer = null;\n    if (typeof replacer === 'function' || Array.isArray(replacer)) {\n        _replacer = replacer;\n    }\n    else if (options === undefined && replacer) {\n        options = replacer;\n    }\n    if (typeof options === 'string')\n        options = options.length;\n    if (typeof options === 'number') {\n        const indent = Math.round(options);\n        options = indent < 1 ? undefined : indent > 8 ? { indent: 8 } : { indent };\n    }\n    if (value === undefined) {\n        const { keepUndefined } = options ?? replacer ?? {};\n        if (!keepUndefined)\n            return undefined;\n    }\n    if (isDocument(value) && !_replacer)\n        return value.toString(options);\n    return new Document(value, _replacer, options).toString(options);\n}\n\nexport { parse, parseAllDocuments, parseDocument, stringify };\n","import { getPathInfo } from '@sveltia/utils/file';\nimport { derived, get, writable } from 'svelte/store';\n\n/**\n * @import { Readable, Writable } from 'svelte/store';\n * @import { AssetFolderInfo } from '$lib/types/private';\n * @import { FieldKeyPath } from '$lib/types/public';\n */\n\n/**\n * List of all asset folders.\n * @type {Writable<AssetFolderInfo[]>}\n */\nexport const allAssetFolders = writable([]);\n\n/**\n * Global asset folder.\n * @type {Readable<AssetFolderInfo>}\n */\n\nexport const globalAssetFolder = derived([allAssetFolders], ([_allAssetFolders], set) => {\n  set(\n    /** @type {AssetFolderInfo} */ (\n      _allAssetFolders.find(\n        ({ collectionName, internalPath }) =>\n          collectionName === undefined && internalPath !== undefined,\n      )\n    ),\n  );\n});\n\n/**\n * Selected asset folder.\n * @type {Writable<AssetFolderInfo | undefined>}\n */\nexport const selectedAssetFolder = writable();\n\n/**\n * Upload target asset folder.\n * @type {Readable<AssetFolderInfo>}\n */\nexport const targetAssetFolder = derived(\n  [selectedAssetFolder, globalAssetFolder],\n  ([_selectedAssetFolder, _globalAssetFolder]) =>\n    // When selecting All Assets folder, the `internalPath` will be `undefined`\n    _selectedAssetFolder?.internalPath !== undefined ? _selectedAssetFolder : _globalAssetFolder,\n);\n\n/**\n * Get an asset folder that matches the given condition.\n * @param {object} args Arguments.\n * @param {string | undefined} args.collectionName Collection name.\n * @param {string} [args.fileName] Collection file name. File/singleton collection only.\n * @param {FieldKeyPath} [args.keyPath] Field key path.\n * @returns {AssetFolderInfo | undefined} Asset folder information.\n */\nexport const getAssetFolder = ({ collectionName, fileName, keyPath }) =>\n  get(allAssetFolders).find(\n    (f) => f.collectionName === collectionName && f.fileName === fileName && f.keyPath === keyPath,\n  );\n\n/**\n * Get collection asset folders that match the given path.\n * @param {string} path Asset path.\n * @param {object} [options] Options.\n * @param {boolean} [options.matchSubFolders] Whether to match assets stored in the subfolders of a\n * global/collection internal path. Default: `true`. If `false`, for example, if the given `path` is\n * `images/products/image.jpg`, it matches the `images/products` folder but not `images`.\n * @returns {AssetFolderInfo[]} Asset folders.\n */\nexport const getAssetFoldersByPath = (path, { matchSubFolders = true } = {}) => {\n  const { filename } = getPathInfo(path);\n\n  // Exclude files with a leading `+` sign, which are Svelte page/layout files\n  if (filename.startsWith('+')) {\n    return [];\n  }\n\n  return get(allAssetFolders)\n    .filter(({ internalPath, entryRelative }) => {\n      if (internalPath === undefined) {\n        return false;\n      }\n\n      if (entryRelative) {\n        return path.startsWith(`${internalPath}/`);\n      }\n\n      // Compare that the enclosing directory is exactly the same as the internal path, and ignore\n      // any subdirectories, unless the `matchSubFolders` option is specified. The internal path can\n      // contain template tags like `{{slug}}` so that we have to take it into account.\n      const regex = new RegExp(\n        `^${internalPath.replace(/{{.+?}}/g, '.+?')}${internalPath && matchSubFolders ? '\\\\b' : '$'}`,\n      );\n\n      return regex.test(getPathInfo(path).dirname ?? '');\n    })\n    .sort((a, b) => (b.internalPath ?? '').localeCompare(a.internalPath ?? '') ?? 0);\n};\n\n/**\n * Check if asset creation is allowed in the folder. Can’t upload assets if collection assets are\n * saved at entry-relative paths or the asset folder contains template tags.\n * @param {AssetFolderInfo | undefined} assetFolder Asset folder.\n * @returns {boolean} Result.\n */\nexport const canCreateAsset = (assetFolder) =>\n  !!assetFolder && !assetFolder.entryRelative && !assetFolder.hasTemplateTags;\n","/* eslint-disable jsdoc/require-jsdoc */\n\n/**\n * Implement a wrapper for the IndexedDB API, making it easier to use the client-side database with\n * auto-upgrades and convenient Promise methods.\n */\nexport default class IndexedDB {\n  /**\n   * Database itself.\n   * @type {IDBDatabase | undefined}\n   */\n  #database;\n\n  /**\n   * Database name in use.\n   * @type {string}\n   */\n  #databaseName = '';\n\n  /**\n   * Store name in use.\n   * @type {string}\n   */\n  #storeName = '';\n\n  /**\n   * Store options to be passed to `IDBDatabase.createObjectStore()`. Note that this cannot be\n   * altered after the store is created.\n   * @type {IDBObjectStoreParameters}\n   */\n  #storeOptions = {};\n\n  /**\n   * Index options to be passed to `IDBObjectStore.createIndex()`.\n   * @type {import(\"../typedefs\").DatabaseIndex[]}\n   */\n  #indexes = [];\n\n  /**\n   * Initialize a new `IndexedDB` instance.\n   * @param {string} databaseName - Database name.\n   * @param {string} storeName - Store name.\n   * @param {object} [options] - Options.\n   * @param {string | string[]} [options.keyPath] - Option for `createObjectStore()`.\n   * @param {boolean} [options.autoIncrement] - Option for `createObjectStore()`.\n   * @param {import(\"../typedefs\").DatabaseIndex[]} [options.indexes] - Arguments for\n   * `createIndex()`.\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase/createObjectStore\n   * @see https://stackoverflow.com/questions/33852508/how-to-create-an-indexeddb-composite-key\n   */\n  constructor(databaseName, storeName, { keyPath, autoIncrement, indexes = [] } = {}) {\n    this.#database = undefined;\n    this.#databaseName = databaseName;\n    this.#storeName = storeName;\n    this.#storeOptions = { keyPath, autoIncrement };\n    this.#indexes = indexes;\n  }\n\n  /**\n   * Open the database and create a store if needed.\n   * @param {number} [version] - Database version.\n   * @returns {Promise<IDBDatabase>} Database.\n   */\n  async #openDatabase(version) {\n    return new Promise((resolve) => {\n      const request = globalThis.indexedDB.open(this.#databaseName, version);\n\n      request.onupgradeneeded = () => {\n        const database = request.result;\n        const storeName = this.#storeName;\n\n        const store = database.objectStoreNames.contains(storeName)\n          ? database.transaction(storeName, 'readwrite').objectStore(storeName)\n          : database.createObjectStore(storeName, this.#storeOptions);\n\n        this.#indexes.forEach(({ name, keyPath, options }) => {\n          if (!store.indexNames.contains(name)) {\n            store.createIndex(name, keyPath, options);\n          }\n        });\n      };\n\n      request.onsuccess = () => {\n        resolve(request.result);\n      };\n    });\n  }\n\n  /**\n   * Get the database and automatically upgrade it if a new store is not created yet.\n   * @returns {Promise<IDBDatabase>} Database.\n   */\n  async #getDatabase() {\n    let upgradeNeeded = false;\n    let database = await this.#openDatabase();\n    const { version, objectStoreNames } = database;\n    const storeName = this.#storeName;\n\n    if (objectStoreNames.contains(storeName)) {\n      const store = database.transaction(storeName).objectStore(storeName);\n\n      upgradeNeeded = this.#indexes.some(({ name }) => !store.indexNames.contains(name));\n    } else {\n      upgradeNeeded = true;\n    }\n\n    if (upgradeNeeded) {\n      database.close();\n      database = await this.#openDatabase(version + 1);\n    }\n\n    // Avoid upgrade conflict\n    database.onversionchange = () => {\n      database.close();\n      this.#database = undefined;\n    };\n\n    return database;\n  }\n\n  /**\n   * Create a database if not yet initialized, then execute the given function over the store.\n   * @param {(store: IDBObjectStore) => IDBRequest | void} getRequest - Function to be executed.\n   * @returns {Promise<any | void>} Result.\n   */\n  async #query(getRequest) {\n    this.#database ??= await this.#getDatabase();\n\n    const database = /** @type {IDBDatabase} */ (this.#database);\n    const storeName = this.#storeName;\n    const transaction = database.transaction(storeName, 'readwrite');\n    const request = getRequest(transaction.objectStore(storeName));\n\n    if (request) {\n      return new Promise((resolve) => {\n        request.onsuccess = () => {\n          resolve(request.result);\n        };\n      });\n    }\n\n    return new Promise((resolve) => {\n      transaction.oncomplete = () => {\n        resolve(undefined);\n      };\n    });\n  }\n\n  /**\n   * Save a value with an out-of-line key.\n   * @param {any} key - Key.\n   * @param {any} value - Value.\n   * @returns {Promise<any>} Key.\n   */\n  async set(key, value) {\n    return this.#query((store) => store.put(value, key));\n  }\n\n  /**\n   * Save a value with an inline key.\n   * @param {any} value - Value.\n   * @returns {Promise<any>} Key.\n   */\n  async put(value) {\n    return this.#query((store) => store.put(value));\n  }\n\n  /**\n   * Save multiple records.\n   * @param {[any, any][]} records - Key/value pairs.\n   * @returns {Promise<any>} Key.\n   */\n  async saveEntries(records) {\n    return this.#query((store) => {\n      records.forEach(([key, value]) => {\n        store.put(value, key);\n      });\n    });\n  }\n\n  /**\n   * Retrieve a value by key.\n   * @param {any} key - Key.\n   * @returns {Promise<any>} Value.\n   */\n  async get(key) {\n    return this.#query((store) => store.get(key));\n  }\n\n  /**\n   * Retrieve all the keys.\n   * @returns {Promise<any[]>} Keys.\n   */\n  async keys() {\n    return this.#query((store) => store.getAllKeys());\n  }\n\n  /**\n   * Retrieve all the values.\n   * @returns {Promise<any[]>} Values.\n   */\n  async values() {\n    return this.#query((store) => store.getAll());\n  }\n\n  /**\n   * Retrieve all the records.\n   * @returns {Promise<[any, any][]>} Key/value pairs.\n   */\n  async entries() {\n    const [keys, values] = await Promise.all([this.keys(), this.values()]);\n\n    return keys.map((key, index) => [key, values[index]]);\n  }\n\n  /**\n   * Find one or more records using a cursor.\n   * @param {object} args - Arguments.\n   * @param {(record: any) => boolean} [args.callback] - A function to execute for each record.\n   * @param {string} [args.index] - Index name.\n   * @param {IDBValidKey | IDBKeyRange} [args.query] - Query option for `openCursor()`.\n   * @param {IDBCursorDirection} [args.direction] - The direction option for `openCursor()`.\n   * @param {boolean} [args.multiple] - Whether to return all matching records.\n   * @returns {Promise<any | any[]>} Found record(s).\n   */\n  async #search({\n    callback = undefined,\n    index = undefined,\n    query = undefined,\n    direction = 'next',\n    multiple = false,\n  }) {\n    return new Promise((resolve) => {\n      this.#query((store) => {\n        const request = (index ? store.index(index) : store).openCursor(query, direction);\n        /** @type {any[]} */\n        const records = [];\n\n        request.onsuccess = () => {\n          const cursor = request.result;\n\n          if (cursor) {\n            const { value } = cursor;\n\n            if (typeof callback === 'function' ? callback(value) : true) {\n              if (multiple) {\n                records.push(value);\n                cursor.continue();\n              } else {\n                resolve(value);\n              }\n            } else {\n              cursor.continue();\n            }\n          } else {\n            resolve(multiple ? records : undefined);\n          }\n        };\n      });\n    });\n  }\n\n  /**\n   * Find the first record that matches the condition.\n   * @param {(record: any) => boolean} [callback] - A function to execute for each record.\n   * @param {object} [options] - Options.\n   * @param {string} [options.index] - Index.\n   * @param {IDBValidKey | IDBKeyRange} [options.query] - Query option for `openCursor()`.\n   * @returns {Promise<any>} Found record.\n   */\n  async find(callback, { index, query } = {}) {\n    return this.#search({ callback, index, query });\n  }\n\n  /**\n   * Find the last record that matches the condition.\n   * @param {(record: any) => boolean} [callback] - A function to execute for each record.\n   * @param {object} [options] - Options.\n   * @param {string} [options.index] - Index.\n   * @param {IDBValidKey | IDBKeyRange} [options.query] - Query option for `openCursor()`.\n   * @returns {Promise<any>} Found record.\n   */\n  async findLast(callback, { index, query } = {}) {\n    return this.#search({ callback, index, query, direction: 'prev' });\n  }\n\n  /**\n   * Find all the records that match the condition.\n   * @param {(record: any) => boolean} [callback] - A function to execute for each record.\n   * @param {object} [options] - Options.\n   * @param {string} [options.index] - Index.\n   * @param {IDBValidKey | IDBKeyRange} [options.query] - Query option for `openCursor()`.\n   * @returns {Promise<any[]>} Found records.\n   */\n  async filter(callback, { index, query } = {}) {\n    return this.#search({ callback, index, query, multiple: true });\n  }\n\n  /**\n   * Delete an record by key.\n   * @param {any} key - Key.\n   * @returns {Promise<void>} Result.\n   */\n  async delete(key) {\n    await this.#query((store) => store.delete(key));\n  }\n\n  /**\n   * Delete multiple records by keys.\n   * @param {any[]} keys - Property keys.\n   * @returns {Promise<void>} Result.\n   */\n  async deleteEntries(keys) {\n    await this.#query((store) => {\n      keys.forEach((key) => {\n        store.delete(key);\n      });\n    });\n  }\n\n  /**\n   * Delete all the records.\n   * @returns {Promise<void>} Result.\n   */\n  async clear() {\n    await this.#query((store) => store.clear());\n  }\n}\n","/**\n * Implement a wrapper for the Web Storage API. These methods are async just like the experimental\n * KV Storage and automatically parse/stringify JSON data.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Storage\n * @see https://developer.chrome.com/blog/kv-storage/\n */\nexport default class LocalStorage {\n  /**\n   * Save data.\n   * @param {string} key - Storage key.\n   * @param {any} value - Serializable value.\n   * @throws {DOMException} When storage access is denied.\n   */\n  static async set(key, value) {\n    globalThis.localStorage.setItem(key, JSON.stringify(value));\n  }\n\n  /**\n   * Retrieve data by key.\n   * @param {string} key - Storage key.\n   * @returns {Promise<*>} Data.\n   * @throws {DOMException} When storage access is denied.\n   */\n  static async get(key) {\n    const cache = globalThis.localStorage.getItem(key);\n\n    return cache ? JSON.parse(cache) : null;\n  }\n\n  /**\n   * Delete data by key.\n   * @param {string} key - Storage key.\n   * @throws {DOMException} When storage access is denied.\n   */\n  static async delete(key) {\n    globalThis.localStorage.removeItem(key);\n  }\n\n  /**\n   * Clear the storage.\n   * @throws {DOMException} When storage access is denied.\n   */\n  static async clear() {\n    globalThis.localStorage.clear();\n  }\n\n  /**\n   * Get a list of storage keys.\n   * @returns {Promise<string[]>} Keys.\n   * @throws {DOMException} When storage access is denied.\n   */\n  static async keys() {\n    return Object.keys(globalThis.localStorage);\n  }\n\n  /**\n   * Get a list of storage values.\n   * @returns {Promise<*[]>} Values.\n   * @throws {DOMException} When storage access is denied.\n   */\n  static async values() {\n    return Object.values(globalThis.localStorage).map((value) => JSON.parse(value));\n  }\n\n  /**\n   * Get a list of storage entries.\n   * @returns {Promise<[string, any][]>} Entries.\n   * @throws {DOMException} When storage access is denied.\n   */\n  static async entries() {\n    return Object.entries(globalThis.localStorage).map(([key, value]) => [key, JSON.parse(value)]);\n  }\n}\n","import { isObject } from './object';\n\n/**\n * Check if the given input is an array of objects.\n * @param {any} input - Input, probably an array.\n * @returns {boolean} Result.\n */\nconst isObjectArray = (input) =>\n  Array.isArray(input) && /** @type {any[]} */ (input).every((item) => isObject(item));\n\n/**\n * Remove duplicate values from the given array.\n * @param {any[]} array - Original array with primitive values.\n * @returns {any[]} - Array without duplicates.\n */\nconst unique = (array) => [...new Set(array)];\n\nexport { isObjectArray, unique };\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    if (a.constructor !== b.constructor) return false;\n\n    var length, i, keys;\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n\n\n    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) return false;\n\n    for (i = length; i-- !== 0;)\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n    for (i = length; i-- !== 0;) {\n      var key = keys[i];\n\n      if (!equal(a[key], b[key])) return false;\n    }\n\n    return true;\n  }\n\n  // true if both NaN, false otherwise\n  return a!==a && b!==b;\n};\n","function isBuffer (obj) {\n  return obj &&\n    obj.constructor &&\n    (typeof obj.constructor.isBuffer === 'function') &&\n    obj.constructor.isBuffer(obj)\n}\n\nfunction keyIdentity (key) {\n  return key\n}\n\nexport function flatten (target, opts) {\n  opts = opts || {}\n\n  const delimiter = opts.delimiter || '.'\n  const maxDepth = opts.maxDepth\n  const transformKey = opts.transformKey || keyIdentity\n  const output = {}\n\n  function step (object, prev, currentDepth) {\n    currentDepth = currentDepth || 1\n    Object.keys(object).forEach(function (key) {\n      const value = object[key]\n      const isarray = opts.safe && Array.isArray(value)\n      const type = Object.prototype.toString.call(value)\n      const isbuffer = isBuffer(value)\n      const isobject = (\n        type === '[object Object]' ||\n        type === '[object Array]'\n      )\n\n      const newKey = prev\n        ? prev + delimiter + transformKey(key)\n        : transformKey(key)\n\n      if (!isarray && !isbuffer && isobject && Object.keys(value).length &&\n        (!opts.maxDepth || currentDepth < maxDepth)) {\n        return step(value, newKey, currentDepth + 1)\n      }\n\n      output[newKey] = value\n    })\n  }\n\n  step(target)\n\n  return output\n}\n\nexport function unflatten (target, opts) {\n  opts = opts || {}\n\n  const delimiter = opts.delimiter || '.'\n  const overwrite = opts.overwrite || false\n  const transformKey = opts.transformKey || keyIdentity\n  const result = {}\n\n  const isbuffer = isBuffer(target)\n  if (isbuffer || Object.prototype.toString.call(target) !== '[object Object]') {\n    return target\n  }\n\n  // safely ensure that the key is\n  // an integer.\n  function getkey (key) {\n    const parsedKey = Number(key)\n\n    return (\n      isNaN(parsedKey) ||\n      key.indexOf('.') !== -1 ||\n      opts.object\n    )\n      ? key\n      : parsedKey\n  }\n\n  function addKeys (keyPrefix, recipient, target) {\n    return Object.keys(target).reduce(function (result, key) {\n      result[keyPrefix + delimiter + key] = target[key]\n\n      return result\n    }, recipient)\n  }\n\n  function isEmpty (val) {\n    const type = Object.prototype.toString.call(val)\n    const isArray = type === '[object Array]'\n    const isObject = type === '[object Object]'\n\n    if (!val) {\n      return true\n    } else if (isArray) {\n      return !val.length\n    } else if (isObject) {\n      return !Object.keys(val).length\n    }\n  }\n\n  target = Object.keys(target).reduce(function (result, key) {\n    const type = Object.prototype.toString.call(target[key])\n    const isObject = (type === '[object Object]' || type === '[object Array]')\n    if (!isObject || isEmpty(target[key])) {\n      result[key] = target[key]\n      return result\n    } else {\n      return addKeys(\n        key,\n        result,\n        flatten(target[key], opts)\n      )\n    }\n  }, {})\n\n  Object.keys(target).forEach(function (key) {\n    const split = key.split(delimiter).map(transformKey)\n    let key1 = getkey(split.shift())\n    let key2 = getkey(split[0])\n    let recipient = result\n\n    while (key2 !== undefined) {\n      if (key1 === '__proto__') {\n        return\n      }\n\n      const type = Object.prototype.toString.call(recipient[key1])\n      const isobject = (\n        type === '[object Object]' ||\n        type === '[object Array]'\n      )\n\n      // do not write over falsey, non-undefined values if overwrite is false\n      if (!overwrite && !isobject && typeof recipient[key1] !== 'undefined') {\n        return\n      }\n\n      if ((overwrite && !isobject) || (!overwrite && recipient[key1] == null)) {\n        recipient[key1] = (\n          typeof key2 === 'number' &&\n          !opts.object\n            ? []\n            : {}\n        )\n      }\n\n      recipient = recipient[key1]\n      if (split.length > 0) {\n        key1 = getkey(split.shift())\n        key2 = getkey(split[0])\n      }\n    }\n\n    // unflatten again for 'messy objects'\n    recipient[key1] = unflatten(target[key], opts)\n  })\n\n  return result\n}\n","/**\n * Get an object containing date parts that can be used for the `YYYY-MM-DD` format, especially in\n * the local time zone.\n * @param {object} [options] - Options.\n * @param {Date} [options.date] - Date to use.\n * @param {string} [options.timeZone] - Time zone, e.g. `UTC`.\n * @returns {{ [key: string]: string }} Result like `{ year: '2023', month: '01', day: '23', ... }`.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/formatToParts\n */\nconst getDateTimeParts = ({ date = new Date(), timeZone = undefined } = {}) => {\n  /** @type {Intl.DateTimeFormatOptions} */\n  const options = {\n    year: 'numeric',\n    month: '2-digit',\n    day: '2-digit',\n    hour: '2-digit',\n    minute: '2-digit',\n    second: '2-digit',\n    timeZoneName: 'longOffset',\n  };\n\n  return Object.fromEntries(\n    new Intl.DateTimeFormat('en-US', { ...options, hour12: false, timeZone })\n      .formatToParts(date)\n      .filter(({ type }) => type in options)\n      .map(({ type, value }) => [type, type === 'hour' && value === '24' ? '00' : value]),\n  );\n};\n\nexport { getDateTimeParts };\n","export default function escapeStringRegexp(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n}\n","const replacements = [\n\t// German umlauts\n\t['ß', 'ss'],\n\t['ẞ', 'Ss'],\n\t['ä', 'ae'],\n\t['Ä', 'Ae'],\n\t['ö', 'oe'],\n\t['Ö', 'Oe'],\n\t['ü', 'ue'],\n\t['Ü', 'Ue'],\n\n\t// Latin\n\t['À', 'A'],\n\t['Á', 'A'],\n\t['Â', 'A'],\n\t['Ã', 'A'],\n\t['Ä', 'Ae'],\n\t['Å', 'A'],\n\t['Æ', 'AE'],\n\t['Ç', 'C'],\n\t['È', 'E'],\n\t['É', 'E'],\n\t['Ê', 'E'],\n\t['Ë', 'E'],\n\t['Ì', 'I'],\n\t['Í', 'I'],\n\t['Î', 'I'],\n\t['Ï', 'I'],\n\t['Ð', 'D'],\n\t['Ñ', 'N'],\n\t['Ò', 'O'],\n\t['Ó', 'O'],\n\t['Ô', 'O'],\n\t['Õ', 'O'],\n\t['Ö', 'Oe'],\n\t['Ő', 'O'],\n\t['Ø', 'O'],\n\t['Ù', 'U'],\n\t['Ú', 'U'],\n\t['Û', 'U'],\n\t['Ü', 'Ue'],\n\t['Ű', 'U'],\n\t['Ý', 'Y'],\n\t['Þ', 'TH'],\n\t['ß', 'ss'],\n\t['à', 'a'],\n\t['á', 'a'],\n\t['â', 'a'],\n\t['ã', 'a'],\n\t['ä', 'ae'],\n\t['å', 'a'],\n\t['æ', 'ae'],\n\t['ç', 'c'],\n\t['è', 'e'],\n\t['é', 'e'],\n\t['ê', 'e'],\n\t['ë', 'e'],\n\t['ì', 'i'],\n\t['í', 'i'],\n\t['î', 'i'],\n\t['ï', 'i'],\n\t['ð', 'd'],\n\t['ñ', 'n'],\n\t['ò', 'o'],\n\t['ó', 'o'],\n\t['ô', 'o'],\n\t['õ', 'o'],\n\t['ö', 'oe'],\n\t['ő', 'o'],\n\t['ø', 'o'],\n\t['ù', 'u'],\n\t['ú', 'u'],\n\t['û', 'u'],\n\t['ü', 'ue'],\n\t['ű', 'u'],\n\t['ý', 'y'],\n\t['þ', 'th'],\n\t['ÿ', 'y'],\n\t['ẞ', 'SS'],\n\n\t// Vietnamese\n\t['à', 'a'],\n\t['À', 'A'],\n\t['á', 'a'],\n\t['Á', 'A'],\n\t['â', 'a'],\n\t['Â', 'A'],\n\t['ã', 'a'],\n\t['Ã', 'A'],\n\t['è', 'e'],\n\t['È', 'E'],\n\t['é', 'e'],\n\t['É', 'E'],\n\t['ê', 'e'],\n\t['Ê', 'E'],\n\t['ì', 'i'],\n\t['Ì', 'I'],\n\t['í', 'i'],\n\t['Í', 'I'],\n\t['ò', 'o'],\n\t['Ò', 'O'],\n\t['ó', 'o'],\n\t['Ó', 'O'],\n\t['ô', 'o'],\n\t['Ô', 'O'],\n\t['õ', 'o'],\n\t['Õ', 'O'],\n\t['ù', 'u'],\n\t['Ù', 'U'],\n\t['ú', 'u'],\n\t['Ú', 'U'],\n\t['ý', 'y'],\n\t['Ý', 'Y'],\n\t['ă', 'a'],\n\t['Ă', 'A'],\n\t['Đ', 'D'],\n\t['đ', 'd'],\n\t['ĩ', 'i'],\n\t['Ĩ', 'I'],\n\t['ũ', 'u'],\n\t['Ũ', 'U'],\n\t['ơ', 'o'],\n\t['Ơ', 'O'],\n\t['ư', 'u'],\n\t['Ư', 'U'],\n\t['ạ', 'a'],\n\t['Ạ', 'A'],\n\t['ả', 'a'],\n\t['Ả', 'A'],\n\t['ấ', 'a'],\n\t['Ấ', 'A'],\n\t['ầ', 'a'],\n\t['Ầ', 'A'],\n\t['ẩ', 'a'],\n\t['Ẩ', 'A'],\n\t['ẫ', 'a'],\n\t['Ẫ', 'A'],\n\t['ậ', 'a'],\n\t['Ậ', 'A'],\n\t['ắ', 'a'],\n\t['Ắ', 'A'],\n\t['ằ', 'a'],\n\t['Ằ', 'A'],\n\t['ẳ', 'a'],\n\t['Ẳ', 'A'],\n\t['ẵ', 'a'],\n\t['Ẵ', 'A'],\n\t['ặ', 'a'],\n\t['Ặ', 'A'],\n\t['ẹ', 'e'],\n\t['Ẹ', 'E'],\n\t['ẻ', 'e'],\n\t['Ẻ', 'E'],\n\t['ẽ', 'e'],\n\t['Ẽ', 'E'],\n\t['ế', 'e'],\n\t['Ế', 'E'],\n\t['ề', 'e'],\n\t['Ề', 'E'],\n\t['ể', 'e'],\n\t['Ể', 'E'],\n\t['ễ', 'e'],\n\t['Ễ', 'E'],\n\t['ệ', 'e'],\n\t['Ệ', 'E'],\n\t['ỉ', 'i'],\n\t['Ỉ', 'I'],\n\t['ị', 'i'],\n\t['Ị', 'I'],\n\t['ọ', 'o'],\n\t['Ọ', 'O'],\n\t['ỏ', 'o'],\n\t['Ỏ', 'O'],\n\t['ố', 'o'],\n\t['Ố', 'O'],\n\t['ồ', 'o'],\n\t['Ồ', 'O'],\n\t['ổ', 'o'],\n\t['Ổ', 'O'],\n\t['ỗ', 'o'],\n\t['Ỗ', 'O'],\n\t['ộ', 'o'],\n\t['Ộ', 'O'],\n\t['ớ', 'o'],\n\t['Ớ', 'O'],\n\t['ờ', 'o'],\n\t['Ờ', 'O'],\n\t['ở', 'o'],\n\t['Ở', 'O'],\n\t['ỡ', 'o'],\n\t['Ỡ', 'O'],\n\t['ợ', 'o'],\n\t['Ợ', 'O'],\n\t['ụ', 'u'],\n\t['Ụ', 'U'],\n\t['ủ', 'u'],\n\t['Ủ', 'U'],\n\t['ứ', 'u'],\n\t['Ứ', 'U'],\n\t['ừ', 'u'],\n\t['Ừ', 'U'],\n\t['ử', 'u'],\n\t['Ử', 'U'],\n\t['ữ', 'u'],\n\t['Ữ', 'U'],\n\t['ự', 'u'],\n\t['Ự', 'U'],\n\t['ỳ', 'y'],\n\t['Ỳ', 'Y'],\n\t['ỵ', 'y'],\n\t['Ỵ', 'Y'],\n\t['ỷ', 'y'],\n\t['Ỷ', 'Y'],\n\t['ỹ', 'y'],\n\t['Ỹ', 'Y'],\n\n\t// Arabic\n\t['ء', 'e'],\n\t['آ', 'a'],\n\t['أ', 'a'],\n\t['ؤ', 'w'],\n\t['إ', 'i'],\n\t['ئ', 'y'],\n\t['ا', 'a'],\n\t['ب', 'b'],\n\t['ة', 't'],\n\t['ت', 't'],\n\t['ث', 'th'],\n\t['ج', 'j'],\n\t['ح', 'h'],\n\t['خ', 'kh'],\n\t['د', 'd'],\n\t['ذ', 'dh'],\n\t['ر', 'r'],\n\t['ز', 'z'],\n\t['س', 's'],\n\t['ش', 'sh'],\n\t['ص', 's'],\n\t['ض', 'd'],\n\t['ط', 't'],\n\t['ظ', 'z'],\n\t['ع', 'e'],\n\t['غ', 'gh'],\n\t['ـ', '_'],\n\t['ف', 'f'],\n\t['ق', 'q'],\n\t['ك', 'k'],\n\t['ل', 'l'],\n\t['م', 'm'],\n\t['ن', 'n'],\n\t['ه', 'h'],\n\t['و', 'w'],\n\t['ى', 'a'],\n\t['ي', 'y'],\n\t['َ‎', 'a'],\n\t['ُ', 'u'],\n\t['ِ‎', 'i'],\n\t['٠', '0'],\n\t['١', '1'],\n\t['٢', '2'],\n\t['٣', '3'],\n\t['٤', '4'],\n\t['٥', '5'],\n\t['٦', '6'],\n\t['٧', '7'],\n\t['٨', '8'],\n\t['٩', '9'],\n\n\t// Persian / Farsi\n\t['چ', 'ch'],\n\t['ک', 'k'],\n\t['گ', 'g'],\n\t['پ', 'p'],\n\t['ژ', 'zh'],\n\t['ی', 'y'],\n\t['۰', '0'],\n\t['۱', '1'],\n\t['۲', '2'],\n\t['۳', '3'],\n\t['۴', '4'],\n\t['۵', '5'],\n\t['۶', '6'],\n\t['۷', '7'],\n\t['۸', '8'],\n\t['۹', '9'],\n\n\t// Pashto\n\t['ټ', 'p'],\n\t['ځ', 'z'],\n\t['څ', 'c'],\n\t['ډ', 'd'],\n\t['ﺫ', 'd'],\n\t['ﺭ', 'r'],\n\t['ړ', 'r'],\n\t['ﺯ', 'z'],\n\t['ږ', 'g'],\n\t['ښ', 'x'],\n\t['ګ', 'g'],\n\t['ڼ', 'n'],\n\t['ۀ', 'e'],\n\t['ې', 'e'],\n\t['ۍ', 'ai'],\n\n\t// Urdu\n\t['ٹ', 't'],\n\t['ڈ', 'd'],\n\t['ڑ', 'r'],\n\t['ں', 'n'],\n\t['ہ', 'h'],\n\t['ھ', 'h'],\n\t['ے', 'e'],\n\n\t// Russian\n\t['А', 'A'],\n\t['а', 'a'],\n\t['Б', 'B'],\n\t['б', 'b'],\n\t['В', 'V'],\n\t['в', 'v'],\n\t['Г', 'G'],\n\t['г', 'g'],\n\t['Д', 'D'],\n\t['д', 'd'],\n\t['ъе', 'ye'],\n\t['Ъе', 'Ye'],\n\t['ъЕ', 'yE'],\n\t['ЪЕ', 'YE'],\n\t['Е', 'E'],\n\t['е', 'e'],\n\t['Ё', 'Yo'],\n\t['ё', 'yo'],\n\t['Ж', 'Zh'],\n\t['ж', 'zh'],\n\t['З', 'Z'],\n\t['з', 'z'],\n\t['И', 'I'],\n\t['и', 'i'],\n\t['ый', 'iy'],\n\t['Ый', 'Iy'],\n\t['ЫЙ', 'IY'],\n\t['ыЙ', 'iY'],\n\t['Й', 'Y'],\n\t['й', 'y'],\n\t['К', 'K'],\n\t['к', 'k'],\n\t['Л', 'L'],\n\t['л', 'l'],\n\t['М', 'M'],\n\t['м', 'm'],\n\t['Н', 'N'],\n\t['н', 'n'],\n\t['О', 'O'],\n\t['о', 'o'],\n\t['П', 'P'],\n\t['п', 'p'],\n\t['Р', 'R'],\n\t['р', 'r'],\n\t['С', 'S'],\n\t['с', 's'],\n\t['Т', 'T'],\n\t['т', 't'],\n\t['У', 'U'],\n\t['у', 'u'],\n\t['Ф', 'F'],\n\t['ф', 'f'],\n\t['Х', 'Kh'],\n\t['х', 'kh'],\n\t['Ц', 'Ts'],\n\t['ц', 'ts'],\n\t['Ч', 'Ch'],\n\t['ч', 'ch'],\n\t['Ш', 'Sh'],\n\t['ш', 'sh'],\n\t['Щ', 'Sch'],\n\t['щ', 'sch'],\n\t['Ъ', ''],\n\t['ъ', ''],\n\t['Ы', 'Y'],\n\t['ы', 'y'],\n\t['Ь', ''],\n\t['ь', ''],\n\t['Э', 'E'],\n\t['э', 'e'],\n\t['Ю', 'Yu'],\n\t['ю', 'yu'],\n\t['Я', 'Ya'],\n\t['я', 'ya'],\n\n\t// Romanian\n\t['ă', 'a'],\n\t['Ă', 'A'],\n\t['ș', 's'],\n\t['Ș', 'S'],\n\t['ț', 't'],\n\t['Ț', 'T'],\n\t['ţ', 't'],\n\t['Ţ', 'T'],\n\n\t// Turkish\n\t['ş', 's'],\n\t['Ş', 'S'],\n\t['ç', 'c'],\n\t['Ç', 'C'],\n\t['ğ', 'g'],\n\t['Ğ', 'G'],\n\t['ı', 'i'],\n\t['İ', 'I'],\n\n\t// Armenian\n\t['ա', 'a'],\n\t['Ա', 'A'],\n\t['բ', 'b'],\n\t['Բ', 'B'],\n\t['գ', 'g'],\n\t['Գ', 'G'],\n\t['դ', 'd'],\n\t['Դ', 'D'],\n\t['ե', 'ye'],\n\t['Ե', 'Ye'],\n\t['զ', 'z'],\n\t['Զ', 'Z'],\n\t['է', 'e'],\n\t['Է', 'E'],\n\t['ը', 'y'],\n\t['Ը', 'Y'],\n\t['թ', 't'],\n\t['Թ', 'T'],\n\t['ժ', 'zh'],\n\t['Ժ', 'Zh'],\n\t['ի', 'i'],\n\t['Ի', 'I'],\n\t['լ', 'l'],\n\t['Լ', 'L'],\n\t['խ', 'kh'],\n\t['Խ', 'Kh'],\n\t['ծ', 'ts'],\n\t['Ծ', 'Ts'],\n\t['կ', 'k'],\n\t['Կ', 'K'],\n\t['հ', 'h'],\n\t['Հ', 'H'],\n\t['ձ', 'dz'],\n\t['Ձ', 'Dz'],\n\t['ղ', 'gh'],\n\t['Ղ', 'Gh'],\n\t['ճ', 'tch'],\n\t['Ճ', 'Tch'],\n\t['մ', 'm'],\n\t['Մ', 'M'],\n\t['յ', 'y'],\n\t['Յ', 'Y'],\n\t['ն', 'n'],\n\t['Ն', 'N'],\n\t['շ', 'sh'],\n\t['Շ', 'Sh'],\n\t['ո', 'vo'],\n\t['Ո', 'Vo'],\n\t['չ', 'ch'],\n\t['Չ', 'Ch'],\n\t['պ', 'p'],\n\t['Պ', 'P'],\n\t['ջ', 'j'],\n\t['Ջ', 'J'],\n\t['ռ', 'r'],\n\t['Ռ', 'R'],\n\t['ս', 's'],\n\t['Ս', 'S'],\n\t['վ', 'v'],\n\t['Վ', 'V'],\n\t['տ', 't'],\n\t['Տ', 'T'],\n\t['ր', 'r'],\n\t['Ր', 'R'],\n\t['ց', 'c'],\n\t['Ց', 'C'],\n\t['ու', 'u'],\n\t['ՈՒ', 'U'],\n\t['Ու', 'U'],\n\t['փ', 'p'],\n\t['Փ', 'P'],\n\t['ք', 'q'],\n\t['Ք', 'Q'],\n\t['օ', 'o'],\n\t['Օ', 'O'],\n\t['ֆ', 'f'],\n\t['Ֆ', 'F'],\n\t['և', 'yev'],\n\n\t// Georgian\n\t['ა', 'a'],\n\t['ბ', 'b'],\n\t['გ', 'g'],\n\t['დ', 'd'],\n\t['ე', 'e'],\n\t['ვ', 'v'],\n\t['ზ', 'z'],\n\t['თ', 't'],\n\t['ი', 'i'],\n\t['კ', 'k'],\n\t['ლ', 'l'],\n\t['მ', 'm'],\n\t['ნ', 'n'],\n\t['ო', 'o'],\n\t['პ', 'p'],\n\t['ჟ', 'zh'],\n\t['რ', 'r'],\n\t['ს', 's'],\n\t['ტ', 't'],\n\t['უ', 'u'],\n\t['ფ', 'ph'],\n\t['ქ', 'q'],\n\t['ღ', 'gh'],\n\t['ყ', 'k'],\n\t['შ', 'sh'],\n\t['ჩ', 'ch'],\n\t['ც', 'ts'],\n\t['ძ', 'dz'],\n\t['წ', 'ts'],\n\t['ჭ', 'tch'],\n\t['ხ', 'kh'],\n\t['ჯ', 'j'],\n\t['ჰ', 'h'],\n\n\t// Czech\n\t['č', 'c'],\n\t['ď', 'd'],\n\t['ě', 'e'],\n\t['ň', 'n'],\n\t['ř', 'r'],\n\t['š', 's'],\n\t['ť', 't'],\n\t['ů', 'u'],\n\t['ž', 'z'],\n\t['Č', 'C'],\n\t['Ď', 'D'],\n\t['Ě', 'E'],\n\t['Ň', 'N'],\n\t['Ř', 'R'],\n\t['Š', 'S'],\n\t['Ť', 'T'],\n\t['Ů', 'U'],\n\t['Ž', 'Z'],\n\n\t// Dhivehi\n\t['ހ', 'h'],\n\t['ށ', 'sh'],\n\t['ނ', 'n'],\n\t['ރ', 'r'],\n\t['ބ', 'b'],\n\t['ޅ', 'lh'],\n\t['ކ', 'k'],\n\t['އ', 'a'],\n\t['ވ', 'v'],\n\t['މ', 'm'],\n\t['ފ', 'f'],\n\t['ދ', 'dh'],\n\t['ތ', 'th'],\n\t['ލ', 'l'],\n\t['ގ', 'g'],\n\t['ޏ', 'gn'],\n\t['ސ', 's'],\n\t['ޑ', 'd'],\n\t['ޒ', 'z'],\n\t['ޓ', 't'],\n\t['ޔ', 'y'],\n\t['ޕ', 'p'],\n\t['ޖ', 'j'],\n\t['ޗ', 'ch'],\n\t['ޘ', 'tt'],\n\t['ޙ', 'hh'],\n\t['ޚ', 'kh'],\n\t['ޛ', 'th'],\n\t['ޜ', 'z'],\n\t['ޝ', 'sh'],\n\t['ޞ', 's'],\n\t['ޟ', 'd'],\n\t['ޠ', 't'],\n\t['ޡ', 'z'],\n\t['ޢ', 'a'],\n\t['ޣ', 'gh'],\n\t['ޤ', 'q'],\n\t['ޥ', 'w'],\n\t['ަ', 'a'],\n\t['ާ', 'aa'],\n\t['ި', 'i'],\n\t['ީ', 'ee'],\n\t['ު', 'u'],\n\t['ޫ', 'oo'],\n\t['ެ', 'e'],\n\t['ޭ', 'ey'],\n\t['ޮ', 'o'],\n\t['ޯ', 'oa'],\n\t['ް', ''],\n\n\t// Greek\n\t['α', 'a'],\n\t['β', 'v'],\n\t['γ', 'g'],\n\t['δ', 'd'],\n\t['ε', 'e'],\n\t['ζ', 'z'],\n\t['η', 'i'],\n\t['θ', 'th'],\n\t['ι', 'i'],\n\t['κ', 'k'],\n\t['λ', 'l'],\n\t['μ', 'm'],\n\t['ν', 'n'],\n\t['ξ', 'ks'],\n\t['ο', 'o'],\n\t['π', 'p'],\n\t['ρ', 'r'],\n\t['σ', 's'],\n\t['τ', 't'],\n\t['υ', 'y'],\n\t['φ', 'f'],\n\t['χ', 'x'],\n\t['ψ', 'ps'],\n\t['ω', 'o'],\n\t['ά', 'a'],\n\t['έ', 'e'],\n\t['ί', 'i'],\n\t['ό', 'o'],\n\t['ύ', 'y'],\n\t['ή', 'i'],\n\t['ώ', 'o'],\n\t['ς', 's'],\n\t['ϊ', 'i'],\n\t['ΰ', 'y'],\n\t['ϋ', 'y'],\n\t['ΐ', 'i'],\n\t['Α', 'A'],\n\t['Β', 'B'],\n\t['Γ', 'G'],\n\t['Δ', 'D'],\n\t['Ε', 'E'],\n\t['Ζ', 'Z'],\n\t['Η', 'I'],\n\t['Θ', 'TH'],\n\t['Ι', 'I'],\n\t['Κ', 'K'],\n\t['Λ', 'L'],\n\t['Μ', 'M'],\n\t['Ν', 'N'],\n\t['Ξ', 'KS'],\n\t['Ο', 'O'],\n\t['Π', 'P'],\n\t['Ρ', 'R'],\n\t['Σ', 'S'],\n\t['Τ', 'T'],\n\t['Υ', 'Y'],\n\t['Φ', 'F'],\n\t['Χ', 'X'],\n\t['Ψ', 'PS'],\n\t['Ω', 'O'],\n\t['Ά', 'A'],\n\t['Έ', 'E'],\n\t['Ί', 'I'],\n\t['Ό', 'O'],\n\t['Ύ', 'Y'],\n\t['Ή', 'I'],\n\t['Ώ', 'O'],\n\t['Ϊ', 'I'],\n\t['Ϋ', 'Y'],\n\n\t// Disabled as it conflicts with German and Latin.\n\t// Hungarian\n\t// ['ä', 'a'],\n\t// ['Ä', 'A'],\n\t// ['ö', 'o'],\n\t// ['Ö', 'O'],\n\t// ['ü', 'u'],\n\t// ['Ü', 'U'],\n\t// ['ű', 'u'],\n\t// ['Ű', 'U'],\n\n\t// Latvian\n\t['ā', 'a'],\n\t['ē', 'e'],\n\t['ģ', 'g'],\n\t['ī', 'i'],\n\t['ķ', 'k'],\n\t['ļ', 'l'],\n\t['ņ', 'n'],\n\t['ū', 'u'],\n\t['Ā', 'A'],\n\t['Ē', 'E'],\n\t['Ģ', 'G'],\n\t['Ī', 'I'],\n\t['Ķ', 'K'],\n\t['Ļ', 'L'],\n\t['Ņ', 'N'],\n\t['Ū', 'U'],\n\t['č', 'c'],\n\t['š', 's'],\n\t['ž', 'z'],\n\t['Č', 'C'],\n\t['Š', 'S'],\n\t['Ž', 'Z'],\n\n\t// Lithuanian\n\t['ą', 'a'],\n\t['č', 'c'],\n\t['ę', 'e'],\n\t['ė', 'e'],\n\t['į', 'i'],\n\t['š', 's'],\n\t['ų', 'u'],\n\t['ū', 'u'],\n\t['ž', 'z'],\n\t['Ą', 'A'],\n\t['Č', 'C'],\n\t['Ę', 'E'],\n\t['Ė', 'E'],\n\t['Į', 'I'],\n\t['Š', 'S'],\n\t['Ų', 'U'],\n\t['Ū', 'U'],\n\n\t// Macedonian\n\t['Ќ', 'Kj'],\n\t['ќ', 'kj'],\n\t['Љ', 'Lj'],\n\t['љ', 'lj'],\n\t['Њ', 'Nj'],\n\t['њ', 'nj'],\n\t['Тс', 'Ts'],\n\t['тс', 'ts'],\n\n\t// Polish\n\t['ą', 'a'],\n\t['ć', 'c'],\n\t['ę', 'e'],\n\t['ł', 'l'],\n\t['ń', 'n'],\n\t['ś', 's'],\n\t['ź', 'z'],\n\t['ż', 'z'],\n\t['Ą', 'A'],\n\t['Ć', 'C'],\n\t['Ę', 'E'],\n\t['Ł', 'L'],\n\t['Ń', 'N'],\n\t['Ś', 'S'],\n\t['Ź', 'Z'],\n\t['Ż', 'Z'],\n\n\t// Disabled as it conflicts with Vietnamese.\n\t// Serbian\n\t// ['љ', 'lj'],\n\t// ['њ', 'nj'],\n\t// ['Љ', 'Lj'],\n\t// ['Њ', 'Nj'],\n\t// ['đ', 'dj'],\n\t// ['Đ', 'Dj'],\n\t// ['ђ', 'dj'],\n\t// ['ј', 'j'],\n\t// ['ћ', 'c'],\n\t// ['џ', 'dz'],\n\t// ['Ђ', 'Dj'],\n\t// ['Ј', 'j'],\n\t// ['Ћ', 'C'],\n\t// ['Џ', 'Dz'],\n\n\t// Disabled as it conflicts with German and Latin.\n\t// Slovak\n\t// ['ä', 'a'],\n\t// ['Ä', 'A'],\n\t// ['ľ', 'l'],\n\t// ['ĺ', 'l'],\n\t// ['ŕ', 'r'],\n\t// ['Ľ', 'L'],\n\t// ['Ĺ', 'L'],\n\t// ['Ŕ', 'R'],\n\n\t// Disabled as it conflicts with German and Latin.\n\t// Swedish\n\t// ['å', 'o'],\n\t// ['Å', 'o'],\n\t// ['ä', 'a'],\n\t// ['Ä', 'A'],\n\t// ['ë', 'e'],\n\t// ['Ë', 'E'],\n\t// ['ö', 'o'],\n\t// ['Ö', 'O'],\n\n\t// Ukrainian\n\t['Є', 'Ye'],\n\t['І', 'I'],\n\t['Ї', 'Yi'],\n\t['Ґ', 'G'],\n\t['є', 'ye'],\n\t['і', 'i'],\n\t['ї', 'yi'],\n\t['ґ', 'g'],\n\n\t// Dutch\n\t['Ĳ', 'IJ'],\n\t['ĳ', 'ij'],\n\n\t// Danish\n\t// ['Æ', 'Ae'],\n\t// ['Ø', 'Oe'],\n\t// ['Å', 'Aa'],\n\t// ['æ', 'ae'],\n\t// ['ø', 'oe'],\n\t// ['å', 'aa']\n\n\t// Currencies\n\t['¢', 'c'],\n\t['¥', 'Y'],\n\t['߿', 'b'],\n\t['৳', 't'],\n\t['૱', 'Bo'],\n\t['฿', 'B'],\n\t['₠', 'CE'],\n\t['₡', 'C'],\n\t['₢', 'Cr'],\n\t['₣', 'F'],\n\t['₥', 'm'],\n\t['₦', 'N'],\n\t['₧', 'Pt'],\n\t['₨', 'Rs'],\n\t['₩', 'W'],\n\t['₫', 's'],\n\t['€', 'E'],\n\t['₭', 'K'],\n\t['₮', 'T'],\n\t['₯', 'Dp'],\n\t['₰', 'S'],\n\t['₱', 'P'],\n\t['₲', 'G'],\n\t['₳', 'A'],\n\t['₴', 'S'],\n\t['₵', 'C'],\n\t['₶', 'tt'],\n\t['₷', 'S'],\n\t['₸', 'T'],\n\t['₹', 'R'],\n\t['₺', 'L'],\n\t['₽', 'P'],\n\t['₿', 'B'],\n\t['﹩', '$'],\n\t['￠', 'c'],\n\t['￥', 'Y'],\n\t['￦', 'W'],\n\n\t// Latin\n\t['𝐀', 'A'],\n\t['𝐁', 'B'],\n\t['𝐂', 'C'],\n\t['𝐃', 'D'],\n\t['𝐄', 'E'],\n\t['𝐅', 'F'],\n\t['𝐆', 'G'],\n\t['𝐇', 'H'],\n\t['𝐈', 'I'],\n\t['𝐉', 'J'],\n\t['𝐊', 'K'],\n\t['𝐋', 'L'],\n\t['𝐌', 'M'],\n\t['𝐍', 'N'],\n\t['𝐎', 'O'],\n\t['𝐏', 'P'],\n\t['𝐐', 'Q'],\n\t['𝐑', 'R'],\n\t['𝐒', 'S'],\n\t['𝐓', 'T'],\n\t['𝐔', 'U'],\n\t['𝐕', 'V'],\n\t['𝐖', 'W'],\n\t['𝐗', 'X'],\n\t['𝐘', 'Y'],\n\t['𝐙', 'Z'],\n\t['𝐚', 'a'],\n\t['𝐛', 'b'],\n\t['𝐜', 'c'],\n\t['𝐝', 'd'],\n\t['𝐞', 'e'],\n\t['𝐟', 'f'],\n\t['𝐠', 'g'],\n\t['𝐡', 'h'],\n\t['𝐢', 'i'],\n\t['𝐣', 'j'],\n\t['𝐤', 'k'],\n\t['𝐥', 'l'],\n\t['𝐦', 'm'],\n\t['𝐧', 'n'],\n\t['𝐨', 'o'],\n\t['𝐩', 'p'],\n\t['𝐪', 'q'],\n\t['𝐫', 'r'],\n\t['𝐬', 's'],\n\t['𝐭', 't'],\n\t['𝐮', 'u'],\n\t['𝐯', 'v'],\n\t['𝐰', 'w'],\n\t['𝐱', 'x'],\n\t['𝐲', 'y'],\n\t['𝐳', 'z'],\n\t['𝐴', 'A'],\n\t['𝐵', 'B'],\n\t['𝐶', 'C'],\n\t['𝐷', 'D'],\n\t['𝐸', 'E'],\n\t['𝐹', 'F'],\n\t['𝐺', 'G'],\n\t['𝐻', 'H'],\n\t['𝐼', 'I'],\n\t['𝐽', 'J'],\n\t['𝐾', 'K'],\n\t['𝐿', 'L'],\n\t['𝑀', 'M'],\n\t['𝑁', 'N'],\n\t['𝑂', 'O'],\n\t['𝑃', 'P'],\n\t['𝑄', 'Q'],\n\t['𝑅', 'R'],\n\t['𝑆', 'S'],\n\t['𝑇', 'T'],\n\t['𝑈', 'U'],\n\t['𝑉', 'V'],\n\t['𝑊', 'W'],\n\t['𝑋', 'X'],\n\t['𝑌', 'Y'],\n\t['𝑍', 'Z'],\n\t['𝑎', 'a'],\n\t['𝑏', 'b'],\n\t['𝑐', 'c'],\n\t['𝑑', 'd'],\n\t['𝑒', 'e'],\n\t['𝑓', 'f'],\n\t['𝑔', 'g'],\n\t['𝑖', 'i'],\n\t['𝑗', 'j'],\n\t['𝑘', 'k'],\n\t['𝑙', 'l'],\n\t['𝑚', 'm'],\n\t['𝑛', 'n'],\n\t['𝑜', 'o'],\n\t['𝑝', 'p'],\n\t['𝑞', 'q'],\n\t['𝑟', 'r'],\n\t['𝑠', 's'],\n\t['𝑡', 't'],\n\t['𝑢', 'u'],\n\t['𝑣', 'v'],\n\t['𝑤', 'w'],\n\t['𝑥', 'x'],\n\t['𝑦', 'y'],\n\t['𝑧', 'z'],\n\t['𝑨', 'A'],\n\t['𝑩', 'B'],\n\t['𝑪', 'C'],\n\t['𝑫', 'D'],\n\t['𝑬', 'E'],\n\t['𝑭', 'F'],\n\t['𝑮', 'G'],\n\t['𝑯', 'H'],\n\t['𝑰', 'I'],\n\t['𝑱', 'J'],\n\t['𝑲', 'K'],\n\t['𝑳', 'L'],\n\t['𝑴', 'M'],\n\t['𝑵', 'N'],\n\t['𝑶', 'O'],\n\t['𝑷', 'P'],\n\t['𝑸', 'Q'],\n\t['𝑹', 'R'],\n\t['𝑺', 'S'],\n\t['𝑻', 'T'],\n\t['𝑼', 'U'],\n\t['𝑽', 'V'],\n\t['𝑾', 'W'],\n\t['𝑿', 'X'],\n\t['𝒀', 'Y'],\n\t['𝒁', 'Z'],\n\t['𝒂', 'a'],\n\t['𝒃', 'b'],\n\t['𝒄', 'c'],\n\t['𝒅', 'd'],\n\t['𝒆', 'e'],\n\t['𝒇', 'f'],\n\t['𝒈', 'g'],\n\t['𝒉', 'h'],\n\t['𝒊', 'i'],\n\t['𝒋', 'j'],\n\t['𝒌', 'k'],\n\t['𝒍', 'l'],\n\t['𝒎', 'm'],\n\t['𝒏', 'n'],\n\t['𝒐', 'o'],\n\t['𝒑', 'p'],\n\t['𝒒', 'q'],\n\t['𝒓', 'r'],\n\t['𝒔', 's'],\n\t['𝒕', 't'],\n\t['𝒖', 'u'],\n\t['𝒗', 'v'],\n\t['𝒘', 'w'],\n\t['𝒙', 'x'],\n\t['𝒚', 'y'],\n\t['𝒛', 'z'],\n\t['𝒜', 'A'],\n\t['𝒞', 'C'],\n\t['𝒟', 'D'],\n\t['𝒢', 'g'],\n\t['𝒥', 'J'],\n\t['𝒦', 'K'],\n\t['𝒩', 'N'],\n\t['𝒪', 'O'],\n\t['𝒫', 'P'],\n\t['𝒬', 'Q'],\n\t['𝒮', 'S'],\n\t['𝒯', 'T'],\n\t['𝒰', 'U'],\n\t['𝒱', 'V'],\n\t['𝒲', 'W'],\n\t['𝒳', 'X'],\n\t['𝒴', 'Y'],\n\t['𝒵', 'Z'],\n\t['𝒶', 'a'],\n\t['𝒷', 'b'],\n\t['𝒸', 'c'],\n\t['𝒹', 'd'],\n\t['𝒻', 'f'],\n\t['𝒽', 'h'],\n\t['𝒾', 'i'],\n\t['𝒿', 'j'],\n\t['𝓀', 'h'],\n\t['𝓁', 'l'],\n\t['𝓂', 'm'],\n\t['𝓃', 'n'],\n\t['𝓅', 'p'],\n\t['𝓆', 'q'],\n\t['𝓇', 'r'],\n\t['𝓈', 's'],\n\t['𝓉', 't'],\n\t['𝓊', 'u'],\n\t['𝓋', 'v'],\n\t['𝓌', 'w'],\n\t['𝓍', 'x'],\n\t['𝓎', 'y'],\n\t['𝓏', 'z'],\n\t['𝓐', 'A'],\n\t['𝓑', 'B'],\n\t['𝓒', 'C'],\n\t['𝓓', 'D'],\n\t['𝓔', 'E'],\n\t['𝓕', 'F'],\n\t['𝓖', 'G'],\n\t['𝓗', 'H'],\n\t['𝓘', 'I'],\n\t['𝓙', 'J'],\n\t['𝓚', 'K'],\n\t['𝓛', 'L'],\n\t['𝓜', 'M'],\n\t['𝓝', 'N'],\n\t['𝓞', 'O'],\n\t['𝓟', 'P'],\n\t['𝓠', 'Q'],\n\t['𝓡', 'R'],\n\t['𝓢', 'S'],\n\t['𝓣', 'T'],\n\t['𝓤', 'U'],\n\t['𝓥', 'V'],\n\t['𝓦', 'W'],\n\t['𝓧', 'X'],\n\t['𝓨', 'Y'],\n\t['𝓩', 'Z'],\n\t['𝓪', 'a'],\n\t['𝓫', 'b'],\n\t['𝓬', 'c'],\n\t['𝓭', 'd'],\n\t['𝓮', 'e'],\n\t['𝓯', 'f'],\n\t['𝓰', 'g'],\n\t['𝓱', 'h'],\n\t['𝓲', 'i'],\n\t['𝓳', 'j'],\n\t['𝓴', 'k'],\n\t['𝓵', 'l'],\n\t['𝓶', 'm'],\n\t['𝓷', 'n'],\n\t['𝓸', 'o'],\n\t['𝓹', 'p'],\n\t['𝓺', 'q'],\n\t['𝓻', 'r'],\n\t['𝓼', 's'],\n\t['𝓽', 't'],\n\t['𝓾', 'u'],\n\t['𝓿', 'v'],\n\t['𝔀', 'w'],\n\t['𝔁', 'x'],\n\t['𝔂', 'y'],\n\t['𝔃', 'z'],\n\t['𝔄', 'A'],\n\t['𝔅', 'B'],\n\t['𝔇', 'D'],\n\t['𝔈', 'E'],\n\t['𝔉', 'F'],\n\t['𝔊', 'G'],\n\t['𝔍', 'J'],\n\t['𝔎', 'K'],\n\t['𝔏', 'L'],\n\t['𝔐', 'M'],\n\t['𝔑', 'N'],\n\t['𝔒', 'O'],\n\t['𝔓', 'P'],\n\t['𝔔', 'Q'],\n\t['𝔖', 'S'],\n\t['𝔗', 'T'],\n\t['𝔘', 'U'],\n\t['𝔙', 'V'],\n\t['𝔚', 'W'],\n\t['𝔛', 'X'],\n\t['𝔜', 'Y'],\n\t['𝔞', 'a'],\n\t['𝔟', 'b'],\n\t['𝔠', 'c'],\n\t['𝔡', 'd'],\n\t['𝔢', 'e'],\n\t['𝔣', 'f'],\n\t['𝔤', 'g'],\n\t['𝔥', 'h'],\n\t['𝔦', 'i'],\n\t['𝔧', 'j'],\n\t['𝔨', 'k'],\n\t['𝔩', 'l'],\n\t['𝔪', 'm'],\n\t['𝔫', 'n'],\n\t['𝔬', 'o'],\n\t['𝔭', 'p'],\n\t['𝔮', 'q'],\n\t['𝔯', 'r'],\n\t['𝔰', 's'],\n\t['𝔱', 't'],\n\t['𝔲', 'u'],\n\t['𝔳', 'v'],\n\t['𝔴', 'w'],\n\t['𝔵', 'x'],\n\t['𝔶', 'y'],\n\t['𝔷', 'z'],\n\t['𝔸', 'A'],\n\t['𝔹', 'B'],\n\t['𝔻', 'D'],\n\t['𝔼', 'E'],\n\t['𝔽', 'F'],\n\t['𝔾', 'G'],\n\t['𝕀', 'I'],\n\t['𝕁', 'J'],\n\t['𝕂', 'K'],\n\t['𝕃', 'L'],\n\t['𝕄', 'M'],\n\t['𝕆', 'N'],\n\t['𝕊', 'S'],\n\t['𝕋', 'T'],\n\t['𝕌', 'U'],\n\t['𝕍', 'V'],\n\t['𝕎', 'W'],\n\t['𝕏', 'X'],\n\t['𝕐', 'Y'],\n\t['𝕒', 'a'],\n\t['𝕓', 'b'],\n\t['𝕔', 'c'],\n\t['𝕕', 'd'],\n\t['𝕖', 'e'],\n\t['𝕗', 'f'],\n\t['𝕘', 'g'],\n\t['𝕙', 'h'],\n\t['𝕚', 'i'],\n\t['𝕛', 'j'],\n\t['𝕜', 'k'],\n\t['𝕝', 'l'],\n\t['𝕞', 'm'],\n\t['𝕟', 'n'],\n\t['𝕠', 'o'],\n\t['𝕡', 'p'],\n\t['𝕢', 'q'],\n\t['𝕣', 'r'],\n\t['𝕤', 's'],\n\t['𝕥', 't'],\n\t['𝕦', 'u'],\n\t['𝕧', 'v'],\n\t['𝕨', 'w'],\n\t['𝕩', 'x'],\n\t['𝕪', 'y'],\n\t['𝕫', 'z'],\n\t['𝕬', 'A'],\n\t['𝕭', 'B'],\n\t['𝕮', 'C'],\n\t['𝕯', 'D'],\n\t['𝕰', 'E'],\n\t['𝕱', 'F'],\n\t['𝕲', 'G'],\n\t['𝕳', 'H'],\n\t['𝕴', 'I'],\n\t['𝕵', 'J'],\n\t['𝕶', 'K'],\n\t['𝕷', 'L'],\n\t['𝕸', 'M'],\n\t['𝕹', 'N'],\n\t['𝕺', 'O'],\n\t['𝕻', 'P'],\n\t['𝕼', 'Q'],\n\t['𝕽', 'R'],\n\t['𝕾', 'S'],\n\t['𝕿', 'T'],\n\t['𝖀', 'U'],\n\t['𝖁', 'V'],\n\t['𝖂', 'W'],\n\t['𝖃', 'X'],\n\t['𝖄', 'Y'],\n\t['𝖅', 'Z'],\n\t['𝖆', 'a'],\n\t['𝖇', 'b'],\n\t['𝖈', 'c'],\n\t['𝖉', 'd'],\n\t['𝖊', 'e'],\n\t['𝖋', 'f'],\n\t['𝖌', 'g'],\n\t['𝖍', 'h'],\n\t['𝖎', 'i'],\n\t['𝖏', 'j'],\n\t['𝖐', 'k'],\n\t['𝖑', 'l'],\n\t['𝖒', 'm'],\n\t['𝖓', 'n'],\n\t['𝖔', 'o'],\n\t['𝖕', 'p'],\n\t['𝖖', 'q'],\n\t['𝖗', 'r'],\n\t['𝖘', 's'],\n\t['𝖙', 't'],\n\t['𝖚', 'u'],\n\t['𝖛', 'v'],\n\t['𝖜', 'w'],\n\t['𝖝', 'x'],\n\t['𝖞', 'y'],\n\t['𝖟', 'z'],\n\t['𝖠', 'A'],\n\t['𝖡', 'B'],\n\t['𝖢', 'C'],\n\t['𝖣', 'D'],\n\t['𝖤', 'E'],\n\t['𝖥', 'F'],\n\t['𝖦', 'G'],\n\t['𝖧', 'H'],\n\t['𝖨', 'I'],\n\t['𝖩', 'J'],\n\t['𝖪', 'K'],\n\t['𝖫', 'L'],\n\t['𝖬', 'M'],\n\t['𝖭', 'N'],\n\t['𝖮', 'O'],\n\t['𝖯', 'P'],\n\t['𝖰', 'Q'],\n\t['𝖱', 'R'],\n\t['𝖲', 'S'],\n\t['𝖳', 'T'],\n\t['𝖴', 'U'],\n\t['𝖵', 'V'],\n\t['𝖶', 'W'],\n\t['𝖷', 'X'],\n\t['𝖸', 'Y'],\n\t['𝖹', 'Z'],\n\t['𝖺', 'a'],\n\t['𝖻', 'b'],\n\t['𝖼', 'c'],\n\t['𝖽', 'd'],\n\t['𝖾', 'e'],\n\t['𝖿', 'f'],\n\t['𝗀', 'g'],\n\t['𝗁', 'h'],\n\t['𝗂', 'i'],\n\t['𝗃', 'j'],\n\t['𝗄', 'k'],\n\t['𝗅', 'l'],\n\t['𝗆', 'm'],\n\t['𝗇', 'n'],\n\t['𝗈', 'o'],\n\t['𝗉', 'p'],\n\t['𝗊', 'q'],\n\t['𝗋', 'r'],\n\t['𝗌', 's'],\n\t['𝗍', 't'],\n\t['𝗎', 'u'],\n\t['𝗏', 'v'],\n\t['𝗐', 'w'],\n\t['𝗑', 'x'],\n\t['𝗒', 'y'],\n\t['𝗓', 'z'],\n\t['𝗔', 'A'],\n\t['𝗕', 'B'],\n\t['𝗖', 'C'],\n\t['𝗗', 'D'],\n\t['𝗘', 'E'],\n\t['𝗙', 'F'],\n\t['𝗚', 'G'],\n\t['𝗛', 'H'],\n\t['𝗜', 'I'],\n\t['𝗝', 'J'],\n\t['𝗞', 'K'],\n\t['𝗟', 'L'],\n\t['𝗠', 'M'],\n\t['𝗡', 'N'],\n\t['𝗢', 'O'],\n\t['𝗣', 'P'],\n\t['𝗤', 'Q'],\n\t['𝗥', 'R'],\n\t['𝗦', 'S'],\n\t['𝗧', 'T'],\n\t['𝗨', 'U'],\n\t['𝗩', 'V'],\n\t['𝗪', 'W'],\n\t['𝗫', 'X'],\n\t['𝗬', 'Y'],\n\t['𝗭', 'Z'],\n\t['𝗮', 'a'],\n\t['𝗯', 'b'],\n\t['𝗰', 'c'],\n\t['𝗱', 'd'],\n\t['𝗲', 'e'],\n\t['𝗳', 'f'],\n\t['𝗴', 'g'],\n\t['𝗵', 'h'],\n\t['𝗶', 'i'],\n\t['𝗷', 'j'],\n\t['𝗸', 'k'],\n\t['𝗹', 'l'],\n\t['𝗺', 'm'],\n\t['𝗻', 'n'],\n\t['𝗼', 'o'],\n\t['𝗽', 'p'],\n\t['𝗾', 'q'],\n\t['𝗿', 'r'],\n\t['𝘀', 's'],\n\t['𝘁', 't'],\n\t['𝘂', 'u'],\n\t['𝘃', 'v'],\n\t['𝘄', 'w'],\n\t['𝘅', 'x'],\n\t['𝘆', 'y'],\n\t['𝘇', 'z'],\n\t['𝘈', 'A'],\n\t['𝘉', 'B'],\n\t['𝘊', 'C'],\n\t['𝘋', 'D'],\n\t['𝘌', 'E'],\n\t['𝘍', 'F'],\n\t['𝘎', 'G'],\n\t['𝘏', 'H'],\n\t['𝘐', 'I'],\n\t['𝘑', 'J'],\n\t['𝘒', 'K'],\n\t['𝘓', 'L'],\n\t['𝘔', 'M'],\n\t['𝘕', 'N'],\n\t['𝘖', 'O'],\n\t['𝘗', 'P'],\n\t['𝘘', 'Q'],\n\t['𝘙', 'R'],\n\t['𝘚', 'S'],\n\t['𝘛', 'T'],\n\t['𝘜', 'U'],\n\t['𝘝', 'V'],\n\t['𝘞', 'W'],\n\t['𝘟', 'X'],\n\t['𝘠', 'Y'],\n\t['𝘡', 'Z'],\n\t['𝘢', 'a'],\n\t['𝘣', 'b'],\n\t['𝘤', 'c'],\n\t['𝘥', 'd'],\n\t['𝘦', 'e'],\n\t['𝘧', 'f'],\n\t['𝘨', 'g'],\n\t['𝘩', 'h'],\n\t['𝘪', 'i'],\n\t['𝘫', 'j'],\n\t['𝘬', 'k'],\n\t['𝘭', 'l'],\n\t['𝘮', 'm'],\n\t['𝘯', 'n'],\n\t['𝘰', 'o'],\n\t['𝘱', 'p'],\n\t['𝘲', 'q'],\n\t['𝘳', 'r'],\n\t['𝘴', 's'],\n\t['𝘵', 't'],\n\t['𝘶', 'u'],\n\t['𝘷', 'v'],\n\t['𝘸', 'w'],\n\t['𝘹', 'x'],\n\t['𝘺', 'y'],\n\t['𝘻', 'z'],\n\t['𝘼', 'A'],\n\t['𝘽', 'B'],\n\t['𝘾', 'C'],\n\t['𝘿', 'D'],\n\t['𝙀', 'E'],\n\t['𝙁', 'F'],\n\t['𝙂', 'G'],\n\t['𝙃', 'H'],\n\t['𝙄', 'I'],\n\t['𝙅', 'J'],\n\t['𝙆', 'K'],\n\t['𝙇', 'L'],\n\t['𝙈', 'M'],\n\t['𝙉', 'N'],\n\t['𝙊', 'O'],\n\t['𝙋', 'P'],\n\t['𝙌', 'Q'],\n\t['𝙍', 'R'],\n\t['𝙎', 'S'],\n\t['𝙏', 'T'],\n\t['𝙐', 'U'],\n\t['𝙑', 'V'],\n\t['𝙒', 'W'],\n\t['𝙓', 'X'],\n\t['𝙔', 'Y'],\n\t['𝙕', 'Z'],\n\t['𝙖', 'a'],\n\t['𝙗', 'b'],\n\t['𝙘', 'c'],\n\t['𝙙', 'd'],\n\t['𝙚', 'e'],\n\t['𝙛', 'f'],\n\t['𝙜', 'g'],\n\t['𝙝', 'h'],\n\t['𝙞', 'i'],\n\t['𝙟', 'j'],\n\t['𝙠', 'k'],\n\t['𝙡', 'l'],\n\t['𝙢', 'm'],\n\t['𝙣', 'n'],\n\t['𝙤', 'o'],\n\t['𝙥', 'p'],\n\t['𝙦', 'q'],\n\t['𝙧', 'r'],\n\t['𝙨', 's'],\n\t['𝙩', 't'],\n\t['𝙪', 'u'],\n\t['𝙫', 'v'],\n\t['𝙬', 'w'],\n\t['𝙭', 'x'],\n\t['𝙮', 'y'],\n\t['𝙯', 'z'],\n\t['𝙰', 'A'],\n\t['𝙱', 'B'],\n\t['𝙲', 'C'],\n\t['𝙳', 'D'],\n\t['𝙴', 'E'],\n\t['𝙵', 'F'],\n\t['𝙶', 'G'],\n\t['𝙷', 'H'],\n\t['𝙸', 'I'],\n\t['𝙹', 'J'],\n\t['𝙺', 'K'],\n\t['𝙻', 'L'],\n\t['𝙼', 'M'],\n\t['𝙽', 'N'],\n\t['𝙾', 'O'],\n\t['𝙿', 'P'],\n\t['𝚀', 'Q'],\n\t['𝚁', 'R'],\n\t['𝚂', 'S'],\n\t['𝚃', 'T'],\n\t['𝚄', 'U'],\n\t['𝚅', 'V'],\n\t['𝚆', 'W'],\n\t['𝚇', 'X'],\n\t['𝚈', 'Y'],\n\t['𝚉', 'Z'],\n\t['𝚊', 'a'],\n\t['𝚋', 'b'],\n\t['𝚌', 'c'],\n\t['𝚍', 'd'],\n\t['𝚎', 'e'],\n\t['𝚏', 'f'],\n\t['𝚐', 'g'],\n\t['𝚑', 'h'],\n\t['𝚒', 'i'],\n\t['𝚓', 'j'],\n\t['𝚔', 'k'],\n\t['𝚕', 'l'],\n\t['𝚖', 'm'],\n\t['𝚗', 'n'],\n\t['𝚘', 'o'],\n\t['𝚙', 'p'],\n\t['𝚚', 'q'],\n\t['𝚛', 'r'],\n\t['𝚜', 's'],\n\t['𝚝', 't'],\n\t['𝚞', 'u'],\n\t['𝚟', 'v'],\n\t['𝚠', 'w'],\n\t['𝚡', 'x'],\n\t['𝚢', 'y'],\n\t['𝚣', 'z'],\n\n\t// Dotless letters\n\t['𝚤', 'l'],\n\t['𝚥', 'j'],\n\n\t// Greek\n\t['𝛢', 'A'],\n\t['𝛣', 'B'],\n\t['𝛤', 'G'],\n\t['𝛥', 'D'],\n\t['𝛦', 'E'],\n\t['𝛧', 'Z'],\n\t['𝛨', 'I'],\n\t['𝛩', 'TH'],\n\t['𝛪', 'I'],\n\t['𝛫', 'K'],\n\t['𝛬', 'L'],\n\t['𝛭', 'M'],\n\t['𝛮', 'N'],\n\t['𝛯', 'KS'],\n\t['𝛰', 'O'],\n\t['𝛱', 'P'],\n\t['𝛲', 'R'],\n\t['𝛳', 'TH'],\n\t['𝛴', 'S'],\n\t['𝛵', 'T'],\n\t['𝛶', 'Y'],\n\t['𝛷', 'F'],\n\t['𝛸', 'x'],\n\t['𝛹', 'PS'],\n\t['𝛺', 'O'],\n\t['𝛻', 'D'],\n\t['𝛼', 'a'],\n\t['𝛽', 'b'],\n\t['𝛾', 'g'],\n\t['𝛿', 'd'],\n\t['𝜀', 'e'],\n\t['𝜁', 'z'],\n\t['𝜂', 'i'],\n\t['𝜃', 'th'],\n\t['𝜄', 'i'],\n\t['𝜅', 'k'],\n\t['𝜆', 'l'],\n\t['𝜇', 'm'],\n\t['𝜈', 'n'],\n\t['𝜉', 'ks'],\n\t['𝜊', 'o'],\n\t['𝜋', 'p'],\n\t['𝜌', 'r'],\n\t['𝜍', 's'],\n\t['𝜎', 's'],\n\t['𝜏', 't'],\n\t['𝜐', 'y'],\n\t['𝜑', 'f'],\n\t['𝜒', 'x'],\n\t['𝜓', 'ps'],\n\t['𝜔', 'o'],\n\t['𝜕', 'd'],\n\t['𝜖', 'E'],\n\t['𝜗', 'TH'],\n\t['𝜘', 'K'],\n\t['𝜙', 'f'],\n\t['𝜚', 'r'],\n\t['𝜛', 'p'],\n\t['𝜜', 'A'],\n\t['𝜝', 'V'],\n\t['𝜞', 'G'],\n\t['𝜟', 'D'],\n\t['𝜠', 'E'],\n\t['𝜡', 'Z'],\n\t['𝜢', 'I'],\n\t['𝜣', 'TH'],\n\t['𝜤', 'I'],\n\t['𝜥', 'K'],\n\t['𝜦', 'L'],\n\t['𝜧', 'M'],\n\t['𝜨', 'N'],\n\t['𝜩', 'KS'],\n\t['𝜪', 'O'],\n\t['𝜫', 'P'],\n\t['𝜬', 'S'],\n\t['𝜭', 'TH'],\n\t['𝜮', 'S'],\n\t['𝜯', 'T'],\n\t['𝜰', 'Y'],\n\t['𝜱', 'F'],\n\t['𝜲', 'X'],\n\t['𝜳', 'PS'],\n\t['𝜴', 'O'],\n\t['𝜵', 'D'],\n\t['𝜶', 'a'],\n\t['𝜷', 'v'],\n\t['𝜸', 'g'],\n\t['𝜹', 'd'],\n\t['𝜺', 'e'],\n\t['𝜻', 'z'],\n\t['𝜼', 'i'],\n\t['𝜽', 'th'],\n\t['𝜾', 'i'],\n\t['𝜿', 'k'],\n\t['𝝀', 'l'],\n\t['𝝁', 'm'],\n\t['𝝂', 'n'],\n\t['𝝃', 'ks'],\n\t['𝝄', 'o'],\n\t['𝝅', 'p'],\n\t['𝝆', 'r'],\n\t['𝝇', 's'],\n\t['𝝈', 's'],\n\t['𝝉', 't'],\n\t['𝝊', 'y'],\n\t['𝝋', 'f'],\n\t['𝝌', 'x'],\n\t['𝝍', 'ps'],\n\t['𝝎', 'o'],\n\t['𝝏', 'a'],\n\t['𝝐', 'e'],\n\t['𝝑', 'i'],\n\t['𝝒', 'k'],\n\t['𝝓', 'f'],\n\t['𝝔', 'r'],\n\t['𝝕', 'p'],\n\t['𝝖', 'A'],\n\t['𝝗', 'B'],\n\t['𝝘', 'G'],\n\t['𝝙', 'D'],\n\t['𝝚', 'E'],\n\t['𝝛', 'Z'],\n\t['𝝜', 'I'],\n\t['𝝝', 'TH'],\n\t['𝝞', 'I'],\n\t['𝝟', 'K'],\n\t['𝝠', 'L'],\n\t['𝝡', 'M'],\n\t['𝝢', 'N'],\n\t['𝝣', 'KS'],\n\t['𝝤', 'O'],\n\t['𝝥', 'P'],\n\t['𝝦', 'R'],\n\t['𝝧', 'TH'],\n\t['𝝨', 'S'],\n\t['𝝩', 'T'],\n\t['𝝪', 'Y'],\n\t['𝝫', 'F'],\n\t['𝝬', 'X'],\n\t['𝝭', 'PS'],\n\t['𝝮', 'O'],\n\t['𝝯', 'D'],\n\t['𝝰', 'a'],\n\t['𝝱', 'v'],\n\t['𝝲', 'g'],\n\t['𝝳', 'd'],\n\t['𝝴', 'e'],\n\t['𝝵', 'z'],\n\t['𝝶', 'i'],\n\t['𝝷', 'th'],\n\t['𝝸', 'i'],\n\t['𝝹', 'k'],\n\t['𝝺', 'l'],\n\t['𝝻', 'm'],\n\t['𝝼', 'n'],\n\t['𝝽', 'ks'],\n\t['𝝾', 'o'],\n\t['𝝿', 'p'],\n\t['𝞀', 'r'],\n\t['𝞁', 's'],\n\t['𝞂', 's'],\n\t['𝞃', 't'],\n\t['𝞄', 'y'],\n\t['𝞅', 'f'],\n\t['𝞆', 'x'],\n\t['𝞇', 'ps'],\n\t['𝞈', 'o'],\n\t['𝞉', 'a'],\n\t['𝞊', 'e'],\n\t['𝞋', 'i'],\n\t['𝞌', 'k'],\n\t['𝞍', 'f'],\n\t['𝞎', 'r'],\n\t['𝞏', 'p'],\n\t['𝞐', 'A'],\n\t['𝞑', 'V'],\n\t['𝞒', 'G'],\n\t['𝞓', 'D'],\n\t['𝞔', 'E'],\n\t['𝞕', 'Z'],\n\t['𝞖', 'I'],\n\t['𝞗', 'TH'],\n\t['𝞘', 'I'],\n\t['𝞙', 'K'],\n\t['𝞚', 'L'],\n\t['𝞛', 'M'],\n\t['𝞜', 'N'],\n\t['𝞝', 'KS'],\n\t['𝞞', 'O'],\n\t['𝞟', 'P'],\n\t['𝞠', 'S'],\n\t['𝞡', 'TH'],\n\t['𝞢', 'S'],\n\t['𝞣', 'T'],\n\t['𝞤', 'Y'],\n\t['𝞥', 'F'],\n\t['𝞦', 'X'],\n\t['𝞧', 'PS'],\n\t['𝞨', 'O'],\n\t['𝞩', 'D'],\n\t['𝞪', 'av'],\n\t['𝞫', 'g'],\n\t['𝞬', 'd'],\n\t['𝞭', 'e'],\n\t['𝞮', 'z'],\n\t['𝞯', 'i'],\n\t['𝞰', 'i'],\n\t['𝞱', 'th'],\n\t['𝞲', 'i'],\n\t['𝞳', 'k'],\n\t['𝞴', 'l'],\n\t['𝞵', 'm'],\n\t['𝞶', 'n'],\n\t['𝞷', 'ks'],\n\t['𝞸', 'o'],\n\t['𝞹', 'p'],\n\t['𝞺', 'r'],\n\t['𝞻', 's'],\n\t['𝞼', 's'],\n\t['𝞽', 't'],\n\t['𝞾', 'y'],\n\t['𝞿', 'f'],\n\t['𝟀', 'x'],\n\t['𝟁', 'ps'],\n\t['𝟂', 'o'],\n\t['𝟃', 'a'],\n\t['𝟄', 'e'],\n\t['𝟅', 'i'],\n\t['𝟆', 'k'],\n\t['𝟇', 'f'],\n\t['𝟈', 'r'],\n\t['𝟉', 'p'],\n\t['𝟊', 'F'],\n\t['𝟋', 'f'],\n\t['⒜', '(a)'],\n\t['⒝', '(b)'],\n\t['⒞', '(c)'],\n\t['⒟', '(d)'],\n\t['⒠', '(e)'],\n\t['⒡', '(f)'],\n\t['⒢', '(g)'],\n\t['⒣', '(h)'],\n\t['⒤', '(i)'],\n\t['⒥', '(j)'],\n\t['⒦', '(k)'],\n\t['⒧', '(l)'],\n\t['⒨', '(m)'],\n\t['⒩', '(n)'],\n\t['⒪', '(o)'],\n\t['⒫', '(p)'],\n\t['⒬', '(q)'],\n\t['⒭', '(r)'],\n\t['⒮', '(s)'],\n\t['⒯', '(t)'],\n\t['⒰', '(u)'],\n\t['⒱', '(v)'],\n\t['⒲', '(w)'],\n\t['⒳', '(x)'],\n\t['⒴', '(y)'],\n\t['⒵', '(z)'],\n\t['Ⓐ', '(A)'],\n\t['Ⓑ', '(B)'],\n\t['Ⓒ', '(C)'],\n\t['Ⓓ', '(D)'],\n\t['Ⓔ', '(E)'],\n\t['Ⓕ', '(F)'],\n\t['Ⓖ', '(G)'],\n\t['Ⓗ', '(H)'],\n\t['Ⓘ', '(I)'],\n\t['Ⓙ', '(J)'],\n\t['Ⓚ', '(K)'],\n\t['Ⓛ', '(L)'],\n\t['Ⓝ', '(N)'],\n\t['Ⓞ', '(O)'],\n\t['Ⓟ', '(P)'],\n\t['Ⓠ', '(Q)'],\n\t['Ⓡ', '(R)'],\n\t['Ⓢ', '(S)'],\n\t['Ⓣ', '(T)'],\n\t['Ⓤ', '(U)'],\n\t['Ⓥ', '(V)'],\n\t['Ⓦ', '(W)'],\n\t['Ⓧ', '(X)'],\n\t['Ⓨ', '(Y)'],\n\t['Ⓩ', '(Z)'],\n\t['ⓐ', '(a)'],\n\t['ⓑ', '(b)'],\n\t['ⓒ', '(b)'],\n\t['ⓓ', '(c)'],\n\t['ⓔ', '(e)'],\n\t['ⓕ', '(f)'],\n\t['ⓖ', '(g)'],\n\t['ⓗ', '(h)'],\n\t['ⓘ', '(i)'],\n\t['ⓙ', '(j)'],\n\t['ⓚ', '(k)'],\n\t['ⓛ', '(l)'],\n\t['ⓜ', '(m)'],\n\t['ⓝ', '(n)'],\n\t['ⓞ', '(o)'],\n\t['ⓟ', '(p)'],\n\t['ⓠ', '(q)'],\n\t['ⓡ', '(r)'],\n\t['ⓢ', '(s)'],\n\t['ⓣ', '(t)'],\n\t['ⓤ', '(u)'],\n\t['ⓥ', '(v)'],\n\t['ⓦ', '(w)'],\n\t['ⓧ', '(x)'],\n\t['ⓨ', '(y)'],\n\t['ⓩ', '(z)'],\n\n\t// Maltese\n\t['Ċ', 'C'],\n\t['ċ', 'c'],\n\t['Ġ', 'G'],\n\t['ġ', 'g'],\n\t['Ħ', 'H'],\n\t['ħ', 'h'],\n\t['Ż', 'Z'],\n\t['ż', 'z'],\n\n\t// Numbers\n\t['𝟎', '0'],\n\t['𝟏', '1'],\n\t['𝟐', '2'],\n\t['𝟑', '3'],\n\t['𝟒', '4'],\n\t['𝟓', '5'],\n\t['𝟔', '6'],\n\t['𝟕', '7'],\n\t['𝟖', '8'],\n\t['𝟗', '9'],\n\t['𝟘', '0'],\n\t['𝟙', '1'],\n\t['𝟚', '2'],\n\t['𝟛', '3'],\n\t['𝟜', '4'],\n\t['𝟝', '5'],\n\t['𝟞', '6'],\n\t['𝟟', '7'],\n\t['𝟠', '8'],\n\t['𝟡', '9'],\n\t['𝟢', '0'],\n\t['𝟣', '1'],\n\t['𝟤', '2'],\n\t['𝟥', '3'],\n\t['𝟦', '4'],\n\t['𝟧', '5'],\n\t['𝟨', '6'],\n\t['𝟩', '7'],\n\t['𝟪', '8'],\n\t['𝟫', '9'],\n\t['𝟬', '0'],\n\t['𝟭', '1'],\n\t['𝟮', '2'],\n\t['𝟯', '3'],\n\t['𝟰', '4'],\n\t['𝟱', '5'],\n\t['𝟲', '6'],\n\t['𝟳', '7'],\n\t['𝟴', '8'],\n\t['𝟵', '9'],\n\t['𝟶', '0'],\n\t['𝟷', '1'],\n\t['𝟸', '2'],\n\t['𝟹', '3'],\n\t['𝟺', '4'],\n\t['𝟻', '5'],\n\t['𝟼', '6'],\n\t['𝟽', '7'],\n\t['𝟾', '8'],\n\t['𝟿', '9'],\n\t['①', '1'],\n\t['②', '2'],\n\t['③', '3'],\n\t['④', '4'],\n\t['⑤', '5'],\n\t['⑥', '6'],\n\t['⑦', '7'],\n\t['⑧', '8'],\n\t['⑨', '9'],\n\t['⑩', '10'],\n\t['⑪', '11'],\n\t['⑫', '12'],\n\t['⑬', '13'],\n\t['⑭', '14'],\n\t['⑮', '15'],\n\t['⑯', '16'],\n\t['⑰', '17'],\n\t['⑱', '18'],\n\t['⑲', '19'],\n\t['⑳', '20'],\n\t['⑴', '1'],\n\t['⑵', '2'],\n\t['⑶', '3'],\n\t['⑷', '4'],\n\t['⑸', '5'],\n\t['⑹', '6'],\n\t['⑺', '7'],\n\t['⑻', '8'],\n\t['⑼', '9'],\n\t['⑽', '10'],\n\t['⑾', '11'],\n\t['⑿', '12'],\n\t['⒀', '13'],\n\t['⒁', '14'],\n\t['⒂', '15'],\n\t['⒃', '16'],\n\t['⒄', '17'],\n\t['⒅', '18'],\n\t['⒆', '19'],\n\t['⒇', '20'],\n\t['⒈', '1.'],\n\t['⒉', '2.'],\n\t['⒊', '3.'],\n\t['⒋', '4.'],\n\t['⒌', '5.'],\n\t['⒍', '6.'],\n\t['⒎', '7.'],\n\t['⒏', '8.'],\n\t['⒐', '9.'],\n\t['⒑', '10.'],\n\t['⒒', '11.'],\n\t['⒓', '12.'],\n\t['⒔', '13.'],\n\t['⒕', '14.'],\n\t['⒖', '15.'],\n\t['⒗', '16.'],\n\t['⒘', '17.'],\n\t['⒙', '18.'],\n\t['⒚', '19.'],\n\t['⒛', '20.'],\n\t['⓪', '0'],\n\t['⓫', '11'],\n\t['⓬', '12'],\n\t['⓭', '13'],\n\t['⓮', '14'],\n\t['⓯', '15'],\n\t['⓰', '16'],\n\t['⓱', '17'],\n\t['⓲', '18'],\n\t['⓳', '19'],\n\t['⓴', '20'],\n\t['⓵', '1'],\n\t['⓶', '2'],\n\t['⓷', '3'],\n\t['⓸', '4'],\n\t['⓹', '5'],\n\t['⓺', '6'],\n\t['⓻', '7'],\n\t['⓼', '8'],\n\t['⓽', '9'],\n\t['⓾', '10'],\n\t['⓿', '0'],\n\n\t// Punctuation\n\t['🙰', '&'],\n\t['🙱', '&'],\n\t['🙲', '&'],\n\t['🙳', '&'],\n\t['🙴', '&'],\n\t['🙵', '&'],\n\t['🙶', '\"'],\n\t['🙷', '\"'],\n\t['🙸', '\"'],\n\t['‽', '?!'],\n\t['🙹', '?!'],\n\t['🙺', '?!'],\n\t['🙻', '?!'],\n\t['🙼', '/'],\n\t['🙽', '\\\\'],\n\n\t// Alchemy\n\t['🜇', 'AR'],\n\t['🜈', 'V'],\n\t['🜉', 'V'],\n\t['🜆', 'VR'],\n\t['🜅', 'VF'],\n\t['🜩', '2'],\n\t['🜪', '5'],\n\t['🝡', 'f'],\n\t['🝢', 'W'],\n\t['🝣', 'U'],\n\t['🝧', 'V'],\n\t['🝨', 'T'],\n\t['🝪', 'V'],\n\t['🝫', 'MB'],\n\t['🝬', 'VB'],\n\t['🝲', '3B'],\n\t['🝳', '3B'],\n\n\t// Emojis\n\t['💯', '100'],\n\t['🔙', 'BACK'],\n\t['🔚', 'END'],\n\t['🔛', 'ON!'],\n\t['🔜', 'SOON'],\n\t['🔝', 'TOP'],\n\t['🔞', '18'],\n\t['🔤', 'abc'],\n\t['🔠', 'ABCD'],\n\t['🔡', 'abcd'],\n\t['🔢', '1234'],\n\t['🔣', 'T&@%'],\n\t['#️⃣', '#'],\n\t['*️⃣', '*'],\n\t['0️⃣', '0'],\n\t['1️⃣', '1'],\n\t['2️⃣', '2'],\n\t['3️⃣', '3'],\n\t['4️⃣', '4'],\n\t['5️⃣', '5'],\n\t['6️⃣', '6'],\n\t['7️⃣', '7'],\n\t['8️⃣', '8'],\n\t['9️⃣', '9'],\n\t['🔟', '10'],\n\t['🅰️', 'A'],\n\t['🅱️', 'B'],\n\t['🆎', 'AB'],\n\t['🆑', 'CL'],\n\t['🅾️', 'O'],\n\t['🅿', 'P'],\n\t['🆘', 'SOS'],\n\t['🅲', 'C'],\n\t['🅳', 'D'],\n\t['🅴', 'E'],\n\t['🅵', 'F'],\n\t['🅶', 'G'],\n\t['🅷', 'H'],\n\t['🅸', 'I'],\n\t['🅹', 'J'],\n\t['🅺', 'K'],\n\t['🅻', 'L'],\n\t['🅼', 'M'],\n\t['🅽', 'N'],\n\t['🆀', 'Q'],\n\t['🆁', 'R'],\n\t['🆂', 'S'],\n\t['🆃', 'T'],\n\t['🆄', 'U'],\n\t['🆅', 'V'],\n\t['🆆', 'W'],\n\t['🆇', 'X'],\n\t['🆈', 'Y'],\n\t['🆉', 'Z']\n];\n\nexport default replacements;\n","import escapeStringRegexp from 'escape-string-regexp';\nimport builtinReplacements from './replacements.js';\n\nconst doCustomReplacements = (string, replacements) => {\n\tfor (const [key, value] of replacements) {\n\t\t// TODO: Use `String#replaceAll()` when targeting Node.js 16.\n\t\tstring = string.replace(new RegExp(escapeStringRegexp(key), 'g'), value);\n\t}\n\n\treturn string;\n};\n\nexport default function transliterate(string, options) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a string, got \\`${typeof string}\\``);\n\t}\n\n\toptions = {\n\t\tcustomReplacements: [],\n\t\t...options\n\t};\n\n\tconst customReplacements = new Map([\n\t\t...builtinReplacements,\n\t\t...options.customReplacements\n\t]);\n\n\tstring = string.normalize();\n\tstring = doCustomReplacements(string, customReplacements);\n\tstring = string.normalize('NFD').replace(/\\p{Diacritic}/gu, '').normalize();\n\n\treturn string;\n}\n","import transliterate from '@sindresorhus/transliterate';\nimport { generateUUID } from '@sveltia/utils/crypto';\nimport { get } from 'svelte/store';\n\nimport { siteConfig } from '$lib/services/config';\n\n/**\n * @import { InternalSiteConfig } from '$lib/types/private';\n */\n\n/**\n * Slugify the given string to be used as a filename or URL slug, based on the `slug` configuration.\n * This function can be used for both entry slugs and asset file names.\n * @param {string} string String to be normalized.\n * @param {object} [options] Options.\n * @param {boolean} [options.fallback] Whether to return a fallback value if the slug is empty.\n * Defaults to `true`, which returns a part of a UUID.\n * @returns {string} Slug.\n * @see https://decapcms.org/docs/configuration-options/#slug-type\n */\nexport const slugify = (string, { fallback = true } = {}) => {\n  const {\n    slug: {\n      encoding = 'unicode',\n      clean_accents: cleanAccents = false,\n      sanitize_replacement: sanitizeReplacement = '-',\n      trim: trimReplacement = true,\n    } = {},\n  } = /** @type {InternalSiteConfig} */ (get(siteConfig)) ?? {};\n\n  let slug = string;\n\n  if (cleanAccents) {\n    // Remove any accent after transliteration\n    // @see https://www.npmjs.com/package/@sindresorhus/transliterate\n    // @see https://stackoverflow.com/q/990904\n    slug = transliterate(slug)\n      .normalize('NFD')\n      .replace(/\\p{Diacritic}/gu, '');\n  }\n\n  if (encoding === 'ascii') {\n    slug = slug.replaceAll(/[^\\w-~]/g, ' ');\n  } else {\n    // Disallow space, control, delimiter, reserved, unwise characters\n    // @see https://stackoverflow.com/q/1547899\n    slug = slug.replaceAll(/[\\p{Z}\\p{C}!\"#$&'()*+,/:;<=>?@[\\]^`{|}]/gu, ' ');\n  }\n\n  // Make the string lowercase; replace all the spaces with replacers (hyphens by default)\n  slug = slug.toLocaleLowerCase().trim().replaceAll(/\\s+/g, sanitizeReplacement);\n\n  // Consolidate consecutive replacement characters into a single one and trim them from ends\n  if (sanitizeReplacement) {\n    const escapedReplacement = sanitizeReplacement.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n    const consecutivePattern = new RegExp(`${escapedReplacement}+`, 'g');\n\n    slug = slug.replace(consecutivePattern, sanitizeReplacement);\n\n    // Trim replacement characters from the beginning and end\n    if (trimReplacement) {\n      slug = slug.replace(new RegExp(`^${escapedReplacement}+|${escapedReplacement}+$`, 'g'), '');\n    }\n  }\n\n  if (!slug && fallback) {\n    return generateUUID('short');\n  }\n\n  return slug;\n};\n","//! moment.js\n//! version : 2.30.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\nvar hookCallback;\n\nfunction hooks() {\n    return hookCallback.apply(null, arguments);\n}\n\n// This is done to register the method called with moment()\n// without creating circular dependencies.\nfunction setHookCallback(callback) {\n    hookCallback = callback;\n}\n\nfunction isArray(input) {\n    return (\n        input instanceof Array ||\n        Object.prototype.toString.call(input) === '[object Array]'\n    );\n}\n\nfunction isObject(input) {\n    // IE8 will treat undefined and null as object if it wasn't for\n    // input != null\n    return (\n        input != null &&\n        Object.prototype.toString.call(input) === '[object Object]'\n    );\n}\n\nfunction hasOwnProp(a, b) {\n    return Object.prototype.hasOwnProperty.call(a, b);\n}\n\nfunction isObjectEmpty(obj) {\n    if (Object.getOwnPropertyNames) {\n        return Object.getOwnPropertyNames(obj).length === 0;\n    } else {\n        var k;\n        for (k in obj) {\n            if (hasOwnProp(obj, k)) {\n                return false;\n            }\n        }\n        return true;\n    }\n}\n\nfunction isUndefined(input) {\n    return input === void 0;\n}\n\nfunction isNumber(input) {\n    return (\n        typeof input === 'number' ||\n        Object.prototype.toString.call(input) === '[object Number]'\n    );\n}\n\nfunction isDate(input) {\n    return (\n        input instanceof Date ||\n        Object.prototype.toString.call(input) === '[object Date]'\n    );\n}\n\nfunction map(arr, fn) {\n    var res = [],\n        i,\n        arrLen = arr.length;\n    for (i = 0; i < arrLen; ++i) {\n        res.push(fn(arr[i], i));\n    }\n    return res;\n}\n\nfunction extend(a, b) {\n    for (var i in b) {\n        if (hasOwnProp(b, i)) {\n            a[i] = b[i];\n        }\n    }\n\n    if (hasOwnProp(b, 'toString')) {\n        a.toString = b.toString;\n    }\n\n    if (hasOwnProp(b, 'valueOf')) {\n        a.valueOf = b.valueOf;\n    }\n\n    return a;\n}\n\nfunction createUTC(input, format, locale, strict) {\n    return createLocalOrUTC(input, format, locale, strict, true).utc();\n}\n\nfunction defaultParsingFlags() {\n    // We need to deep clone this object.\n    return {\n        empty: false,\n        unusedTokens: [],\n        unusedInput: [],\n        overflow: -2,\n        charsLeftOver: 0,\n        nullInput: false,\n        invalidEra: null,\n        invalidMonth: null,\n        invalidFormat: false,\n        userInvalidated: false,\n        iso: false,\n        parsedDateParts: [],\n        era: null,\n        meridiem: null,\n        rfc2822: false,\n        weekdayMismatch: false,\n    };\n}\n\nfunction getParsingFlags(m) {\n    if (m._pf == null) {\n        m._pf = defaultParsingFlags();\n    }\n    return m._pf;\n}\n\nvar some;\nif (Array.prototype.some) {\n    some = Array.prototype.some;\n} else {\n    some = function (fun) {\n        var t = Object(this),\n            len = t.length >>> 0,\n            i;\n\n        for (i = 0; i < len; i++) {\n            if (i in t && fun.call(this, t[i], i, t)) {\n                return true;\n            }\n        }\n\n        return false;\n    };\n}\n\nfunction isValid(m) {\n    var flags = null,\n        parsedParts = false,\n        isNowValid = m._d && !isNaN(m._d.getTime());\n    if (isNowValid) {\n        flags = getParsingFlags(m);\n        parsedParts = some.call(flags.parsedDateParts, function (i) {\n            return i != null;\n        });\n        isNowValid =\n            flags.overflow < 0 &&\n            !flags.empty &&\n            !flags.invalidEra &&\n            !flags.invalidMonth &&\n            !flags.invalidWeekday &&\n            !flags.weekdayMismatch &&\n            !flags.nullInput &&\n            !flags.invalidFormat &&\n            !flags.userInvalidated &&\n            (!flags.meridiem || (flags.meridiem && parsedParts));\n        if (m._strict) {\n            isNowValid =\n                isNowValid &&\n                flags.charsLeftOver === 0 &&\n                flags.unusedTokens.length === 0 &&\n                flags.bigHour === undefined;\n        }\n    }\n    if (Object.isFrozen == null || !Object.isFrozen(m)) {\n        m._isValid = isNowValid;\n    } else {\n        return isNowValid;\n    }\n    return m._isValid;\n}\n\nfunction createInvalid(flags) {\n    var m = createUTC(NaN);\n    if (flags != null) {\n        extend(getParsingFlags(m), flags);\n    } else {\n        getParsingFlags(m).userInvalidated = true;\n    }\n\n    return m;\n}\n\n// Plugins that add properties should also add the key here (null value),\n// so we can properly clone ourselves.\nvar momentProperties = (hooks.momentProperties = []),\n    updateInProgress = false;\n\nfunction copyConfig(to, from) {\n    var i,\n        prop,\n        val,\n        momentPropertiesLen = momentProperties.length;\n\n    if (!isUndefined(from._isAMomentObject)) {\n        to._isAMomentObject = from._isAMomentObject;\n    }\n    if (!isUndefined(from._i)) {\n        to._i = from._i;\n    }\n    if (!isUndefined(from._f)) {\n        to._f = from._f;\n    }\n    if (!isUndefined(from._l)) {\n        to._l = from._l;\n    }\n    if (!isUndefined(from._strict)) {\n        to._strict = from._strict;\n    }\n    if (!isUndefined(from._tzm)) {\n        to._tzm = from._tzm;\n    }\n    if (!isUndefined(from._isUTC)) {\n        to._isUTC = from._isUTC;\n    }\n    if (!isUndefined(from._offset)) {\n        to._offset = from._offset;\n    }\n    if (!isUndefined(from._pf)) {\n        to._pf = getParsingFlags(from);\n    }\n    if (!isUndefined(from._locale)) {\n        to._locale = from._locale;\n    }\n\n    if (momentPropertiesLen > 0) {\n        for (i = 0; i < momentPropertiesLen; i++) {\n            prop = momentProperties[i];\n            val = from[prop];\n            if (!isUndefined(val)) {\n                to[prop] = val;\n            }\n        }\n    }\n\n    return to;\n}\n\n// Moment prototype object\nfunction Moment(config) {\n    copyConfig(this, config);\n    this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n    if (!this.isValid()) {\n        this._d = new Date(NaN);\n    }\n    // Prevent infinite loop in case updateOffset creates new moment\n    // objects.\n    if (updateInProgress === false) {\n        updateInProgress = true;\n        hooks.updateOffset(this);\n        updateInProgress = false;\n    }\n}\n\nfunction isMoment(obj) {\n    return (\n        obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n    );\n}\n\nfunction warn(msg) {\n    if (\n        hooks.suppressDeprecationWarnings === false &&\n        typeof console !== 'undefined' &&\n        console.warn\n    ) {\n        console.warn('Deprecation warning: ' + msg);\n    }\n}\n\nfunction deprecate(msg, fn) {\n    var firstTime = true;\n\n    return extend(function () {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(null, msg);\n        }\n        if (firstTime) {\n            var args = [],\n                arg,\n                i,\n                key,\n                argLen = arguments.length;\n            for (i = 0; i < argLen; i++) {\n                arg = '';\n                if (typeof arguments[i] === 'object') {\n                    arg += '\\n[' + i + '] ';\n                    for (key in arguments[0]) {\n                        if (hasOwnProp(arguments[0], key)) {\n                            arg += key + ': ' + arguments[0][key] + ', ';\n                        }\n                    }\n                    arg = arg.slice(0, -2); // Remove trailing comma and space\n                } else {\n                    arg = arguments[i];\n                }\n                args.push(arg);\n            }\n            warn(\n                msg +\n                    '\\nArguments: ' +\n                    Array.prototype.slice.call(args).join('') +\n                    '\\n' +\n                    new Error().stack\n            );\n            firstTime = false;\n        }\n        return fn.apply(this, arguments);\n    }, fn);\n}\n\nvar deprecations = {};\n\nfunction deprecateSimple(name, msg) {\n    if (hooks.deprecationHandler != null) {\n        hooks.deprecationHandler(name, msg);\n    }\n    if (!deprecations[name]) {\n        warn(msg);\n        deprecations[name] = true;\n    }\n}\n\nhooks.suppressDeprecationWarnings = false;\nhooks.deprecationHandler = null;\n\nfunction isFunction(input) {\n    return (\n        (typeof Function !== 'undefined' && input instanceof Function) ||\n        Object.prototype.toString.call(input) === '[object Function]'\n    );\n}\n\nfunction set(config) {\n    var prop, i;\n    for (i in config) {\n        if (hasOwnProp(config, i)) {\n            prop = config[i];\n            if (isFunction(prop)) {\n                this[i] = prop;\n            } else {\n                this['_' + i] = prop;\n            }\n        }\n    }\n    this._config = config;\n    // Lenient ordinal parsing accepts just a number in addition to\n    // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n    // TODO: Remove \"ordinalParse\" fallback in next major release.\n    this._dayOfMonthOrdinalParseLenient = new RegExp(\n        (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n            '|' +\n            /\\d{1,2}/.source\n    );\n}\n\nfunction mergeConfigs(parentConfig, childConfig) {\n    var res = extend({}, parentConfig),\n        prop;\n    for (prop in childConfig) {\n        if (hasOwnProp(childConfig, prop)) {\n            if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                res[prop] = {};\n                extend(res[prop], parentConfig[prop]);\n                extend(res[prop], childConfig[prop]);\n            } else if (childConfig[prop] != null) {\n                res[prop] = childConfig[prop];\n            } else {\n                delete res[prop];\n            }\n        }\n    }\n    for (prop in parentConfig) {\n        if (\n            hasOwnProp(parentConfig, prop) &&\n            !hasOwnProp(childConfig, prop) &&\n            isObject(parentConfig[prop])\n        ) {\n            // make sure changes to properties don't modify parent config\n            res[prop] = extend({}, res[prop]);\n        }\n    }\n    return res;\n}\n\nfunction Locale(config) {\n    if (config != null) {\n        this.set(config);\n    }\n}\n\nvar keys;\n\nif (Object.keys) {\n    keys = Object.keys;\n} else {\n    keys = function (obj) {\n        var i,\n            res = [];\n        for (i in obj) {\n            if (hasOwnProp(obj, i)) {\n                res.push(i);\n            }\n        }\n        return res;\n    };\n}\n\nvar defaultCalendar = {\n    sameDay: '[Today at] LT',\n    nextDay: '[Tomorrow at] LT',\n    nextWeek: 'dddd [at] LT',\n    lastDay: '[Yesterday at] LT',\n    lastWeek: '[Last] dddd [at] LT',\n    sameElse: 'L',\n};\n\nfunction calendar(key, mom, now) {\n    var output = this._calendar[key] || this._calendar['sameElse'];\n    return isFunction(output) ? output.call(mom, now) : output;\n}\n\nfunction zeroFill(number, targetLength, forceSign) {\n    var absNumber = '' + Math.abs(number),\n        zerosToFill = targetLength - absNumber.length,\n        sign = number >= 0;\n    return (\n        (sign ? (forceSign ? '+' : '') : '-') +\n        Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n        absNumber\n    );\n}\n\nvar formattingTokens =\n        /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n    localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n    formatFunctions = {},\n    formatTokenFunctions = {};\n\n// token:    'M'\n// padded:   ['MM', 2]\n// ordinal:  'Mo'\n// callback: function () { this.month() + 1 }\nfunction addFormatToken(token, padded, ordinal, callback) {\n    var func = callback;\n    if (typeof callback === 'string') {\n        func = function () {\n            return this[callback]();\n        };\n    }\n    if (token) {\n        formatTokenFunctions[token] = func;\n    }\n    if (padded) {\n        formatTokenFunctions[padded[0]] = function () {\n            return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n        };\n    }\n    if (ordinal) {\n        formatTokenFunctions[ordinal] = function () {\n            return this.localeData().ordinal(\n                func.apply(this, arguments),\n                token\n            );\n        };\n    }\n}\n\nfunction removeFormattingTokens(input) {\n    if (input.match(/\\[[\\s\\S]/)) {\n        return input.replace(/^\\[|\\]$/g, '');\n    }\n    return input.replace(/\\\\/g, '');\n}\n\nfunction makeFormatFunction(format) {\n    var array = format.match(formattingTokens),\n        i,\n        length;\n\n    for (i = 0, length = array.length; i < length; i++) {\n        if (formatTokenFunctions[array[i]]) {\n            array[i] = formatTokenFunctions[array[i]];\n        } else {\n            array[i] = removeFormattingTokens(array[i]);\n        }\n    }\n\n    return function (mom) {\n        var output = '',\n            i;\n        for (i = 0; i < length; i++) {\n            output += isFunction(array[i])\n                ? array[i].call(mom, format)\n                : array[i];\n        }\n        return output;\n    };\n}\n\n// format date using native date object\nfunction formatMoment(m, format) {\n    if (!m.isValid()) {\n        return m.localeData().invalidDate();\n    }\n\n    format = expandFormat(format, m.localeData());\n    formatFunctions[format] =\n        formatFunctions[format] || makeFormatFunction(format);\n\n    return formatFunctions[format](m);\n}\n\nfunction expandFormat(format, locale) {\n    var i = 5;\n\n    function replaceLongDateFormatTokens(input) {\n        return locale.longDateFormat(input) || input;\n    }\n\n    localFormattingTokens.lastIndex = 0;\n    while (i >= 0 && localFormattingTokens.test(format)) {\n        format = format.replace(\n            localFormattingTokens,\n            replaceLongDateFormatTokens\n        );\n        localFormattingTokens.lastIndex = 0;\n        i -= 1;\n    }\n\n    return format;\n}\n\nvar defaultLongDateFormat = {\n    LTS: 'h:mm:ss A',\n    LT: 'h:mm A',\n    L: 'MM/DD/YYYY',\n    LL: 'MMMM D, YYYY',\n    LLL: 'MMMM D, YYYY h:mm A',\n    LLLL: 'dddd, MMMM D, YYYY h:mm A',\n};\n\nfunction longDateFormat(key) {\n    var format = this._longDateFormat[key],\n        formatUpper = this._longDateFormat[key.toUpperCase()];\n\n    if (format || !formatUpper) {\n        return format;\n    }\n\n    this._longDateFormat[key] = formatUpper\n        .match(formattingTokens)\n        .map(function (tok) {\n            if (\n                tok === 'MMMM' ||\n                tok === 'MM' ||\n                tok === 'DD' ||\n                tok === 'dddd'\n            ) {\n                return tok.slice(1);\n            }\n            return tok;\n        })\n        .join('');\n\n    return this._longDateFormat[key];\n}\n\nvar defaultInvalidDate = 'Invalid date';\n\nfunction invalidDate() {\n    return this._invalidDate;\n}\n\nvar defaultOrdinal = '%d',\n    defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\nfunction ordinal(number) {\n    return this._ordinal.replace('%d', number);\n}\n\nvar defaultRelativeTime = {\n    future: 'in %s',\n    past: '%s ago',\n    s: 'a few seconds',\n    ss: '%d seconds',\n    m: 'a minute',\n    mm: '%d minutes',\n    h: 'an hour',\n    hh: '%d hours',\n    d: 'a day',\n    dd: '%d days',\n    w: 'a week',\n    ww: '%d weeks',\n    M: 'a month',\n    MM: '%d months',\n    y: 'a year',\n    yy: '%d years',\n};\n\nfunction relativeTime(number, withoutSuffix, string, isFuture) {\n    var output = this._relativeTime[string];\n    return isFunction(output)\n        ? output(number, withoutSuffix, string, isFuture)\n        : output.replace(/%d/i, number);\n}\n\nfunction pastFuture(diff, output) {\n    var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n    return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n}\n\nvar aliases = {\n    D: 'date',\n    dates: 'date',\n    date: 'date',\n    d: 'day',\n    days: 'day',\n    day: 'day',\n    e: 'weekday',\n    weekdays: 'weekday',\n    weekday: 'weekday',\n    E: 'isoWeekday',\n    isoweekdays: 'isoWeekday',\n    isoweekday: 'isoWeekday',\n    DDD: 'dayOfYear',\n    dayofyears: 'dayOfYear',\n    dayofyear: 'dayOfYear',\n    h: 'hour',\n    hours: 'hour',\n    hour: 'hour',\n    ms: 'millisecond',\n    milliseconds: 'millisecond',\n    millisecond: 'millisecond',\n    m: 'minute',\n    minutes: 'minute',\n    minute: 'minute',\n    M: 'month',\n    months: 'month',\n    month: 'month',\n    Q: 'quarter',\n    quarters: 'quarter',\n    quarter: 'quarter',\n    s: 'second',\n    seconds: 'second',\n    second: 'second',\n    gg: 'weekYear',\n    weekyears: 'weekYear',\n    weekyear: 'weekYear',\n    GG: 'isoWeekYear',\n    isoweekyears: 'isoWeekYear',\n    isoweekyear: 'isoWeekYear',\n    w: 'week',\n    weeks: 'week',\n    week: 'week',\n    W: 'isoWeek',\n    isoweeks: 'isoWeek',\n    isoweek: 'isoWeek',\n    y: 'year',\n    years: 'year',\n    year: 'year',\n};\n\nfunction normalizeUnits(units) {\n    return typeof units === 'string'\n        ? aliases[units] || aliases[units.toLowerCase()]\n        : undefined;\n}\n\nfunction normalizeObjectUnits(inputObject) {\n    var normalizedInput = {},\n        normalizedProp,\n        prop;\n\n    for (prop in inputObject) {\n        if (hasOwnProp(inputObject, prop)) {\n            normalizedProp = normalizeUnits(prop);\n            if (normalizedProp) {\n                normalizedInput[normalizedProp] = inputObject[prop];\n            }\n        }\n    }\n\n    return normalizedInput;\n}\n\nvar priorities = {\n    date: 9,\n    day: 11,\n    weekday: 11,\n    isoWeekday: 11,\n    dayOfYear: 4,\n    hour: 13,\n    millisecond: 16,\n    minute: 14,\n    month: 8,\n    quarter: 7,\n    second: 15,\n    weekYear: 1,\n    isoWeekYear: 1,\n    week: 5,\n    isoWeek: 5,\n    year: 1,\n};\n\nfunction getPrioritizedUnits(unitsObj) {\n    var units = [],\n        u;\n    for (u in unitsObj) {\n        if (hasOwnProp(unitsObj, u)) {\n            units.push({ unit: u, priority: priorities[u] });\n        }\n    }\n    units.sort(function (a, b) {\n        return a.priority - b.priority;\n    });\n    return units;\n}\n\nvar match1 = /\\d/, //       0 - 9\n    match2 = /\\d\\d/, //      00 - 99\n    match3 = /\\d{3}/, //     000 - 999\n    match4 = /\\d{4}/, //    0000 - 9999\n    match6 = /[+-]?\\d{6}/, // -999999 - 999999\n    match1to2 = /\\d\\d?/, //       0 - 99\n    match3to4 = /\\d\\d\\d\\d?/, //     999 - 9999\n    match5to6 = /\\d\\d\\d\\d\\d\\d?/, //   99999 - 999999\n    match1to3 = /\\d{1,3}/, //       0 - 999\n    match1to4 = /\\d{1,4}/, //       0 - 9999\n    match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n    matchUnsigned = /\\d+/, //       0 - inf\n    matchSigned = /[+-]?\\d+/, //    -inf - inf\n    matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n    matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n    matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n    // any word (or two) characters or numbers including two/three word month in arabic.\n    // includes scottish gaelic two word and hyphenated months\n    matchWord =\n        /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n    match1to2NoLeadingZero = /^[1-9]\\d?/, //         1-99\n    match1to2HasZero = /^([1-9]\\d|\\d)/, //           0-99\n    regexes;\n\nregexes = {};\n\nfunction addRegexToken(token, regex, strictRegex) {\n    regexes[token] = isFunction(regex)\n        ? regex\n        : function (isStrict, localeData) {\n              return isStrict && strictRegex ? strictRegex : regex;\n          };\n}\n\nfunction getParseRegexForToken(token, config) {\n    if (!hasOwnProp(regexes, token)) {\n        return new RegExp(unescapeFormat(token));\n    }\n\n    return regexes[token](config._strict, config._locale);\n}\n\n// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\nfunction unescapeFormat(s) {\n    return regexEscape(\n        s\n            .replace('\\\\', '')\n            .replace(\n                /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n                function (matched, p1, p2, p3, p4) {\n                    return p1 || p2 || p3 || p4;\n                }\n            )\n    );\n}\n\nfunction regexEscape(s) {\n    return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n\nfunction absFloor(number) {\n    if (number < 0) {\n        // -0 -> 0\n        return Math.ceil(number) || 0;\n    } else {\n        return Math.floor(number);\n    }\n}\n\nfunction toInt(argumentForCoercion) {\n    var coercedNumber = +argumentForCoercion,\n        value = 0;\n\n    if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n        value = absFloor(coercedNumber);\n    }\n\n    return value;\n}\n\nvar tokens = {};\n\nfunction addParseToken(token, callback) {\n    var i,\n        func = callback,\n        tokenLen;\n    if (typeof token === 'string') {\n        token = [token];\n    }\n    if (isNumber(callback)) {\n        func = function (input, array) {\n            array[callback] = toInt(input);\n        };\n    }\n    tokenLen = token.length;\n    for (i = 0; i < tokenLen; i++) {\n        tokens[token[i]] = func;\n    }\n}\n\nfunction addWeekParseToken(token, callback) {\n    addParseToken(token, function (input, array, config, token) {\n        config._w = config._w || {};\n        callback(input, config._w, config, token);\n    });\n}\n\nfunction addTimeToArrayFromToken(token, input, config) {\n    if (input != null && hasOwnProp(tokens, token)) {\n        tokens[token](input, config._a, config, token);\n    }\n}\n\nfunction isLeapYear(year) {\n    return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n}\n\nvar YEAR = 0,\n    MONTH = 1,\n    DATE = 2,\n    HOUR = 3,\n    MINUTE = 4,\n    SECOND = 5,\n    MILLISECOND = 6,\n    WEEK = 7,\n    WEEKDAY = 8;\n\n// FORMATTING\n\naddFormatToken('Y', 0, 0, function () {\n    var y = this.year();\n    return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n});\n\naddFormatToken(0, ['YY', 2], 0, function () {\n    return this.year() % 100;\n});\n\naddFormatToken(0, ['YYYY', 4], 0, 'year');\naddFormatToken(0, ['YYYYY', 5], 0, 'year');\naddFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n// PARSING\n\naddRegexToken('Y', matchSigned);\naddRegexToken('YY', match1to2, match2);\naddRegexToken('YYYY', match1to4, match4);\naddRegexToken('YYYYY', match1to6, match6);\naddRegexToken('YYYYYY', match1to6, match6);\n\naddParseToken(['YYYYY', 'YYYYYY'], YEAR);\naddParseToken('YYYY', function (input, array) {\n    array[YEAR] =\n        input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n});\naddParseToken('YY', function (input, array) {\n    array[YEAR] = hooks.parseTwoDigitYear(input);\n});\naddParseToken('Y', function (input, array) {\n    array[YEAR] = parseInt(input, 10);\n});\n\n// HELPERS\n\nfunction daysInYear(year) {\n    return isLeapYear(year) ? 366 : 365;\n}\n\n// HOOKS\n\nhooks.parseTwoDigitYear = function (input) {\n    return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n};\n\n// MOMENTS\n\nvar getSetYear = makeGetSet('FullYear', true);\n\nfunction getIsLeapYear() {\n    return isLeapYear(this.year());\n}\n\nfunction makeGetSet(unit, keepTime) {\n    return function (value) {\n        if (value != null) {\n            set$1(this, unit, value);\n            hooks.updateOffset(this, keepTime);\n            return this;\n        } else {\n            return get(this, unit);\n        }\n    };\n}\n\nfunction get(mom, unit) {\n    if (!mom.isValid()) {\n        return NaN;\n    }\n\n    var d = mom._d,\n        isUTC = mom._isUTC;\n\n    switch (unit) {\n        case 'Milliseconds':\n            return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();\n        case 'Seconds':\n            return isUTC ? d.getUTCSeconds() : d.getSeconds();\n        case 'Minutes':\n            return isUTC ? d.getUTCMinutes() : d.getMinutes();\n        case 'Hours':\n            return isUTC ? d.getUTCHours() : d.getHours();\n        case 'Date':\n            return isUTC ? d.getUTCDate() : d.getDate();\n        case 'Day':\n            return isUTC ? d.getUTCDay() : d.getDay();\n        case 'Month':\n            return isUTC ? d.getUTCMonth() : d.getMonth();\n        case 'FullYear':\n            return isUTC ? d.getUTCFullYear() : d.getFullYear();\n        default:\n            return NaN; // Just in case\n    }\n}\n\nfunction set$1(mom, unit, value) {\n    var d, isUTC, year, month, date;\n\n    if (!mom.isValid() || isNaN(value)) {\n        return;\n    }\n\n    d = mom._d;\n    isUTC = mom._isUTC;\n\n    switch (unit) {\n        case 'Milliseconds':\n            return void (isUTC\n                ? d.setUTCMilliseconds(value)\n                : d.setMilliseconds(value));\n        case 'Seconds':\n            return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));\n        case 'Minutes':\n            return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));\n        case 'Hours':\n            return void (isUTC ? d.setUTCHours(value) : d.setHours(value));\n        case 'Date':\n            return void (isUTC ? d.setUTCDate(value) : d.setDate(value));\n        // case 'Day': // Not real\n        //    return void (isUTC ? d.setUTCDay(value) : d.setDay(value));\n        // case 'Month': // Not used because we need to pass two variables\n        //     return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));\n        case 'FullYear':\n            break; // See below ...\n        default:\n            return; // Just in case\n    }\n\n    year = value;\n    month = mom.month();\n    date = mom.date();\n    date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;\n    void (isUTC\n        ? d.setUTCFullYear(year, month, date)\n        : d.setFullYear(year, month, date));\n}\n\n// MOMENTS\n\nfunction stringGet(units) {\n    units = normalizeUnits(units);\n    if (isFunction(this[units])) {\n        return this[units]();\n    }\n    return this;\n}\n\nfunction stringSet(units, value) {\n    if (typeof units === 'object') {\n        units = normalizeObjectUnits(units);\n        var prioritized = getPrioritizedUnits(units),\n            i,\n            prioritizedLen = prioritized.length;\n        for (i = 0; i < prioritizedLen; i++) {\n            this[prioritized[i].unit](units[prioritized[i].unit]);\n        }\n    } else {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units](value);\n        }\n    }\n    return this;\n}\n\nfunction mod(n, x) {\n    return ((n % x) + x) % x;\n}\n\nvar indexOf;\n\nif (Array.prototype.indexOf) {\n    indexOf = Array.prototype.indexOf;\n} else {\n    indexOf = function (o) {\n        // I know\n        var i;\n        for (i = 0; i < this.length; ++i) {\n            if (this[i] === o) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\n\nfunction daysInMonth(year, month) {\n    if (isNaN(year) || isNaN(month)) {\n        return NaN;\n    }\n    var modMonth = mod(month, 12);\n    year += (month - modMonth) / 12;\n    return modMonth === 1\n        ? isLeapYear(year)\n            ? 29\n            : 28\n        : 31 - ((modMonth % 7) % 2);\n}\n\n// FORMATTING\n\naddFormatToken('M', ['MM', 2], 'Mo', function () {\n    return this.month() + 1;\n});\n\naddFormatToken('MMM', 0, 0, function (format) {\n    return this.localeData().monthsShort(this, format);\n});\n\naddFormatToken('MMMM', 0, 0, function (format) {\n    return this.localeData().months(this, format);\n});\n\n// PARSING\n\naddRegexToken('M', match1to2, match1to2NoLeadingZero);\naddRegexToken('MM', match1to2, match2);\naddRegexToken('MMM', function (isStrict, locale) {\n    return locale.monthsShortRegex(isStrict);\n});\naddRegexToken('MMMM', function (isStrict, locale) {\n    return locale.monthsRegex(isStrict);\n});\n\naddParseToken(['M', 'MM'], function (input, array) {\n    array[MONTH] = toInt(input) - 1;\n});\n\naddParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n    var month = config._locale.monthsParse(input, token, config._strict);\n    // if we didn't find a month name, mark the date as invalid.\n    if (month != null) {\n        array[MONTH] = month;\n    } else {\n        getParsingFlags(config).invalidMonth = input;\n    }\n});\n\n// LOCALES\n\nvar defaultLocaleMonths =\n        'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n    defaultLocaleMonthsShort =\n        'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n    defaultMonthsShortRegex = matchWord,\n    defaultMonthsRegex = matchWord;\n\nfunction localeMonths(m, format) {\n    if (!m) {\n        return isArray(this._months)\n            ? this._months\n            : this._months['standalone'];\n    }\n    return isArray(this._months)\n        ? this._months[m.month()]\n        : this._months[\n              (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n                  ? 'format'\n                  : 'standalone'\n          ][m.month()];\n}\n\nfunction localeMonthsShort(m, format) {\n    if (!m) {\n        return isArray(this._monthsShort)\n            ? this._monthsShort\n            : this._monthsShort['standalone'];\n    }\n    return isArray(this._monthsShort)\n        ? this._monthsShort[m.month()]\n        : this._monthsShort[\n              MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n          ][m.month()];\n}\n\nfunction handleStrictParse(monthName, format, strict) {\n    var i,\n        ii,\n        mom,\n        llc = monthName.toLocaleLowerCase();\n    if (!this._monthsParse) {\n        // this is not used\n        this._monthsParse = [];\n        this._longMonthsParse = [];\n        this._shortMonthsParse = [];\n        for (i = 0; i < 12; ++i) {\n            mom = createUTC([2000, i]);\n            this._shortMonthsParse[i] = this.monthsShort(\n                mom,\n                ''\n            ).toLocaleLowerCase();\n            this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n        }\n    }\n\n    if (strict) {\n        if (format === 'MMM') {\n            ii = indexOf.call(this._shortMonthsParse, llc);\n            return ii !== -1 ? ii : null;\n        } else {\n            ii = indexOf.call(this._longMonthsParse, llc);\n            return ii !== -1 ? ii : null;\n        }\n    } else {\n        if (format === 'MMM') {\n            ii = indexOf.call(this._shortMonthsParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf.call(this._longMonthsParse, llc);\n            return ii !== -1 ? ii : null;\n        } else {\n            ii = indexOf.call(this._longMonthsParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf.call(this._shortMonthsParse, llc);\n            return ii !== -1 ? ii : null;\n        }\n    }\n}\n\nfunction localeMonthsParse(monthName, format, strict) {\n    var i, mom, regex;\n\n    if (this._monthsParseExact) {\n        return handleStrictParse.call(this, monthName, format, strict);\n    }\n\n    if (!this._monthsParse) {\n        this._monthsParse = [];\n        this._longMonthsParse = [];\n        this._shortMonthsParse = [];\n    }\n\n    // TODO: add sorting\n    // Sorting makes sure if one month (or abbr) is a prefix of another\n    // see sorting in computeMonthsParse\n    for (i = 0; i < 12; i++) {\n        // make the regex if we don't have it already\n        mom = createUTC([2000, i]);\n        if (strict && !this._longMonthsParse[i]) {\n            this._longMonthsParse[i] = new RegExp(\n                '^' + this.months(mom, '').replace('.', '') + '$',\n                'i'\n            );\n            this._shortMonthsParse[i] = new RegExp(\n                '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n                'i'\n            );\n        }\n        if (!strict && !this._monthsParse[i]) {\n            regex =\n                '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n            this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n        }\n        // test the regex\n        if (\n            strict &&\n            format === 'MMMM' &&\n            this._longMonthsParse[i].test(monthName)\n        ) {\n            return i;\n        } else if (\n            strict &&\n            format === 'MMM' &&\n            this._shortMonthsParse[i].test(monthName)\n        ) {\n            return i;\n        } else if (!strict && this._monthsParse[i].test(monthName)) {\n            return i;\n        }\n    }\n}\n\n// MOMENTS\n\nfunction setMonth(mom, value) {\n    if (!mom.isValid()) {\n        // No op\n        return mom;\n    }\n\n    if (typeof value === 'string') {\n        if (/^\\d+$/.test(value)) {\n            value = toInt(value);\n        } else {\n            value = mom.localeData().monthsParse(value);\n            // TODO: Another silent failure?\n            if (!isNumber(value)) {\n                return mom;\n            }\n        }\n    }\n\n    var month = value,\n        date = mom.date();\n\n    date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));\n    void (mom._isUTC\n        ? mom._d.setUTCMonth(month, date)\n        : mom._d.setMonth(month, date));\n    return mom;\n}\n\nfunction getSetMonth(value) {\n    if (value != null) {\n        setMonth(this, value);\n        hooks.updateOffset(this, true);\n        return this;\n    } else {\n        return get(this, 'Month');\n    }\n}\n\nfunction getDaysInMonth() {\n    return daysInMonth(this.year(), this.month());\n}\n\nfunction monthsShortRegex(isStrict) {\n    if (this._monthsParseExact) {\n        if (!hasOwnProp(this, '_monthsRegex')) {\n            computeMonthsParse.call(this);\n        }\n        if (isStrict) {\n            return this._monthsShortStrictRegex;\n        } else {\n            return this._monthsShortRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_monthsShortRegex')) {\n            this._monthsShortRegex = defaultMonthsShortRegex;\n        }\n        return this._monthsShortStrictRegex && isStrict\n            ? this._monthsShortStrictRegex\n            : this._monthsShortRegex;\n    }\n}\n\nfunction monthsRegex(isStrict) {\n    if (this._monthsParseExact) {\n        if (!hasOwnProp(this, '_monthsRegex')) {\n            computeMonthsParse.call(this);\n        }\n        if (isStrict) {\n            return this._monthsStrictRegex;\n        } else {\n            return this._monthsRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_monthsRegex')) {\n            this._monthsRegex = defaultMonthsRegex;\n        }\n        return this._monthsStrictRegex && isStrict\n            ? this._monthsStrictRegex\n            : this._monthsRegex;\n    }\n}\n\nfunction computeMonthsParse() {\n    function cmpLenRev(a, b) {\n        return b.length - a.length;\n    }\n\n    var shortPieces = [],\n        longPieces = [],\n        mixedPieces = [],\n        i,\n        mom,\n        shortP,\n        longP;\n    for (i = 0; i < 12; i++) {\n        // make the regex if we don't have it already\n        mom = createUTC([2000, i]);\n        shortP = regexEscape(this.monthsShort(mom, ''));\n        longP = regexEscape(this.months(mom, ''));\n        shortPieces.push(shortP);\n        longPieces.push(longP);\n        mixedPieces.push(longP);\n        mixedPieces.push(shortP);\n    }\n    // Sorting makes sure if one month (or abbr) is a prefix of another it\n    // will match the longer piece.\n    shortPieces.sort(cmpLenRev);\n    longPieces.sort(cmpLenRev);\n    mixedPieces.sort(cmpLenRev);\n\n    this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n    this._monthsShortRegex = this._monthsRegex;\n    this._monthsStrictRegex = new RegExp(\n        '^(' + longPieces.join('|') + ')',\n        'i'\n    );\n    this._monthsShortStrictRegex = new RegExp(\n        '^(' + shortPieces.join('|') + ')',\n        'i'\n    );\n}\n\nfunction createDate(y, m, d, h, M, s, ms) {\n    // can't just apply() to create a date:\n    // https://stackoverflow.com/q/181348\n    var date;\n    // the date constructor remaps years 0-99 to 1900-1999\n    if (y < 100 && y >= 0) {\n        // preserve leap years using a full 400 year cycle, then reset\n        date = new Date(y + 400, m, d, h, M, s, ms);\n        if (isFinite(date.getFullYear())) {\n            date.setFullYear(y);\n        }\n    } else {\n        date = new Date(y, m, d, h, M, s, ms);\n    }\n\n    return date;\n}\n\nfunction createUTCDate(y) {\n    var date, args;\n    // the Date.UTC function remaps years 0-99 to 1900-1999\n    if (y < 100 && y >= 0) {\n        args = Array.prototype.slice.call(arguments);\n        // preserve leap years using a full 400 year cycle, then reset\n        args[0] = y + 400;\n        date = new Date(Date.UTC.apply(null, args));\n        if (isFinite(date.getUTCFullYear())) {\n            date.setUTCFullYear(y);\n        }\n    } else {\n        date = new Date(Date.UTC.apply(null, arguments));\n    }\n\n    return date;\n}\n\n// start-of-first-week - start-of-year\nfunction firstWeekOffset(year, dow, doy) {\n    var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n        fwd = 7 + dow - doy,\n        // first-week day local weekday -- which local weekday is fwd\n        fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n    return -fwdlw + fwd - 1;\n}\n\n// https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\nfunction dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n    var localWeekday = (7 + weekday - dow) % 7,\n        weekOffset = firstWeekOffset(year, dow, doy),\n        dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n        resYear,\n        resDayOfYear;\n\n    if (dayOfYear <= 0) {\n        resYear = year - 1;\n        resDayOfYear = daysInYear(resYear) + dayOfYear;\n    } else if (dayOfYear > daysInYear(year)) {\n        resYear = year + 1;\n        resDayOfYear = dayOfYear - daysInYear(year);\n    } else {\n        resYear = year;\n        resDayOfYear = dayOfYear;\n    }\n\n    return {\n        year: resYear,\n        dayOfYear: resDayOfYear,\n    };\n}\n\nfunction weekOfYear(mom, dow, doy) {\n    var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n        week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n        resWeek,\n        resYear;\n\n    if (week < 1) {\n        resYear = mom.year() - 1;\n        resWeek = week + weeksInYear(resYear, dow, doy);\n    } else if (week > weeksInYear(mom.year(), dow, doy)) {\n        resWeek = week - weeksInYear(mom.year(), dow, doy);\n        resYear = mom.year() + 1;\n    } else {\n        resYear = mom.year();\n        resWeek = week;\n    }\n\n    return {\n        week: resWeek,\n        year: resYear,\n    };\n}\n\nfunction weeksInYear(year, dow, doy) {\n    var weekOffset = firstWeekOffset(year, dow, doy),\n        weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n    return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n}\n\n// FORMATTING\n\naddFormatToken('w', ['ww', 2], 'wo', 'week');\naddFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n// PARSING\n\naddRegexToken('w', match1to2, match1to2NoLeadingZero);\naddRegexToken('ww', match1to2, match2);\naddRegexToken('W', match1to2, match1to2NoLeadingZero);\naddRegexToken('WW', match1to2, match2);\n\naddWeekParseToken(\n    ['w', 'ww', 'W', 'WW'],\n    function (input, week, config, token) {\n        week[token.substr(0, 1)] = toInt(input);\n    }\n);\n\n// HELPERS\n\n// LOCALES\n\nfunction localeWeek(mom) {\n    return weekOfYear(mom, this._week.dow, this._week.doy).week;\n}\n\nvar defaultLocaleWeek = {\n    dow: 0, // Sunday is the first day of the week.\n    doy: 6, // The week that contains Jan 6th is the first week of the year.\n};\n\nfunction localeFirstDayOfWeek() {\n    return this._week.dow;\n}\n\nfunction localeFirstDayOfYear() {\n    return this._week.doy;\n}\n\n// MOMENTS\n\nfunction getSetWeek(input) {\n    var week = this.localeData().week(this);\n    return input == null ? week : this.add((input - week) * 7, 'd');\n}\n\nfunction getSetISOWeek(input) {\n    var week = weekOfYear(this, 1, 4).week;\n    return input == null ? week : this.add((input - week) * 7, 'd');\n}\n\n// FORMATTING\n\naddFormatToken('d', 0, 'do', 'day');\n\naddFormatToken('dd', 0, 0, function (format) {\n    return this.localeData().weekdaysMin(this, format);\n});\n\naddFormatToken('ddd', 0, 0, function (format) {\n    return this.localeData().weekdaysShort(this, format);\n});\n\naddFormatToken('dddd', 0, 0, function (format) {\n    return this.localeData().weekdays(this, format);\n});\n\naddFormatToken('e', 0, 0, 'weekday');\naddFormatToken('E', 0, 0, 'isoWeekday');\n\n// PARSING\n\naddRegexToken('d', match1to2);\naddRegexToken('e', match1to2);\naddRegexToken('E', match1to2);\naddRegexToken('dd', function (isStrict, locale) {\n    return locale.weekdaysMinRegex(isStrict);\n});\naddRegexToken('ddd', function (isStrict, locale) {\n    return locale.weekdaysShortRegex(isStrict);\n});\naddRegexToken('dddd', function (isStrict, locale) {\n    return locale.weekdaysRegex(isStrict);\n});\n\naddWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n    var weekday = config._locale.weekdaysParse(input, token, config._strict);\n    // if we didn't get a weekday name, mark the date as invalid\n    if (weekday != null) {\n        week.d = weekday;\n    } else {\n        getParsingFlags(config).invalidWeekday = input;\n    }\n});\n\naddWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n    week[token] = toInt(input);\n});\n\n// HELPERS\n\nfunction parseWeekday(input, locale) {\n    if (typeof input !== 'string') {\n        return input;\n    }\n\n    if (!isNaN(input)) {\n        return parseInt(input, 10);\n    }\n\n    input = locale.weekdaysParse(input);\n    if (typeof input === 'number') {\n        return input;\n    }\n\n    return null;\n}\n\nfunction parseIsoWeekday(input, locale) {\n    if (typeof input === 'string') {\n        return locale.weekdaysParse(input) % 7 || 7;\n    }\n    return isNaN(input) ? null : input;\n}\n\n// LOCALES\nfunction shiftWeekdays(ws, n) {\n    return ws.slice(n, 7).concat(ws.slice(0, n));\n}\n\nvar defaultLocaleWeekdays =\n        'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n    defaultWeekdaysRegex = matchWord,\n    defaultWeekdaysShortRegex = matchWord,\n    defaultWeekdaysMinRegex = matchWord;\n\nfunction localeWeekdays(m, format) {\n    var weekdays = isArray(this._weekdays)\n        ? this._weekdays\n        : this._weekdays[\n              m && m !== true && this._weekdays.isFormat.test(format)\n                  ? 'format'\n                  : 'standalone'\n          ];\n    return m === true\n        ? shiftWeekdays(weekdays, this._week.dow)\n        : m\n          ? weekdays[m.day()]\n          : weekdays;\n}\n\nfunction localeWeekdaysShort(m) {\n    return m === true\n        ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n        : m\n          ? this._weekdaysShort[m.day()]\n          : this._weekdaysShort;\n}\n\nfunction localeWeekdaysMin(m) {\n    return m === true\n        ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n        : m\n          ? this._weekdaysMin[m.day()]\n          : this._weekdaysMin;\n}\n\nfunction handleStrictParse$1(weekdayName, format, strict) {\n    var i,\n        ii,\n        mom,\n        llc = weekdayName.toLocaleLowerCase();\n    if (!this._weekdaysParse) {\n        this._weekdaysParse = [];\n        this._shortWeekdaysParse = [];\n        this._minWeekdaysParse = [];\n\n        for (i = 0; i < 7; ++i) {\n            mom = createUTC([2000, 1]).day(i);\n            this._minWeekdaysParse[i] = this.weekdaysMin(\n                mom,\n                ''\n            ).toLocaleLowerCase();\n            this._shortWeekdaysParse[i] = this.weekdaysShort(\n                mom,\n                ''\n            ).toLocaleLowerCase();\n            this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n        }\n    }\n\n    if (strict) {\n        if (format === 'dddd') {\n            ii = indexOf.call(this._weekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        } else if (format === 'ddd') {\n            ii = indexOf.call(this._shortWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        } else {\n            ii = indexOf.call(this._minWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        }\n    } else {\n        if (format === 'dddd') {\n            ii = indexOf.call(this._weekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf.call(this._shortWeekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf.call(this._minWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        } else if (format === 'ddd') {\n            ii = indexOf.call(this._shortWeekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf.call(this._weekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf.call(this._minWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        } else {\n            ii = indexOf.call(this._minWeekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf.call(this._weekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf.call(this._shortWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        }\n    }\n}\n\nfunction localeWeekdaysParse(weekdayName, format, strict) {\n    var i, mom, regex;\n\n    if (this._weekdaysParseExact) {\n        return handleStrictParse$1.call(this, weekdayName, format, strict);\n    }\n\n    if (!this._weekdaysParse) {\n        this._weekdaysParse = [];\n        this._minWeekdaysParse = [];\n        this._shortWeekdaysParse = [];\n        this._fullWeekdaysParse = [];\n    }\n\n    for (i = 0; i < 7; i++) {\n        // make the regex if we don't have it already\n\n        mom = createUTC([2000, 1]).day(i);\n        if (strict && !this._fullWeekdaysParse[i]) {\n            this._fullWeekdaysParse[i] = new RegExp(\n                '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n                'i'\n            );\n            this._shortWeekdaysParse[i] = new RegExp(\n                '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n                'i'\n            );\n            this._minWeekdaysParse[i] = new RegExp(\n                '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n                'i'\n            );\n        }\n        if (!this._weekdaysParse[i]) {\n            regex =\n                '^' +\n                this.weekdays(mom, '') +\n                '|^' +\n                this.weekdaysShort(mom, '') +\n                '|^' +\n                this.weekdaysMin(mom, '');\n            this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n        }\n        // test the regex\n        if (\n            strict &&\n            format === 'dddd' &&\n            this._fullWeekdaysParse[i].test(weekdayName)\n        ) {\n            return i;\n        } else if (\n            strict &&\n            format === 'ddd' &&\n            this._shortWeekdaysParse[i].test(weekdayName)\n        ) {\n            return i;\n        } else if (\n            strict &&\n            format === 'dd' &&\n            this._minWeekdaysParse[i].test(weekdayName)\n        ) {\n            return i;\n        } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n            return i;\n        }\n    }\n}\n\n// MOMENTS\n\nfunction getSetDayOfWeek(input) {\n    if (!this.isValid()) {\n        return input != null ? this : NaN;\n    }\n\n    var day = get(this, 'Day');\n    if (input != null) {\n        input = parseWeekday(input, this.localeData());\n        return this.add(input - day, 'd');\n    } else {\n        return day;\n    }\n}\n\nfunction getSetLocaleDayOfWeek(input) {\n    if (!this.isValid()) {\n        return input != null ? this : NaN;\n    }\n    var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n    return input == null ? weekday : this.add(input - weekday, 'd');\n}\n\nfunction getSetISODayOfWeek(input) {\n    if (!this.isValid()) {\n        return input != null ? this : NaN;\n    }\n\n    // behaves the same as moment#day except\n    // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n    // as a setter, sunday should belong to the previous week.\n\n    if (input != null) {\n        var weekday = parseIsoWeekday(input, this.localeData());\n        return this.day(this.day() % 7 ? weekday : weekday - 7);\n    } else {\n        return this.day() || 7;\n    }\n}\n\nfunction weekdaysRegex(isStrict) {\n    if (this._weekdaysParseExact) {\n        if (!hasOwnProp(this, '_weekdaysRegex')) {\n            computeWeekdaysParse.call(this);\n        }\n        if (isStrict) {\n            return this._weekdaysStrictRegex;\n        } else {\n            return this._weekdaysRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_weekdaysRegex')) {\n            this._weekdaysRegex = defaultWeekdaysRegex;\n        }\n        return this._weekdaysStrictRegex && isStrict\n            ? this._weekdaysStrictRegex\n            : this._weekdaysRegex;\n    }\n}\n\nfunction weekdaysShortRegex(isStrict) {\n    if (this._weekdaysParseExact) {\n        if (!hasOwnProp(this, '_weekdaysRegex')) {\n            computeWeekdaysParse.call(this);\n        }\n        if (isStrict) {\n            return this._weekdaysShortStrictRegex;\n        } else {\n            return this._weekdaysShortRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n            this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n        }\n        return this._weekdaysShortStrictRegex && isStrict\n            ? this._weekdaysShortStrictRegex\n            : this._weekdaysShortRegex;\n    }\n}\n\nfunction weekdaysMinRegex(isStrict) {\n    if (this._weekdaysParseExact) {\n        if (!hasOwnProp(this, '_weekdaysRegex')) {\n            computeWeekdaysParse.call(this);\n        }\n        if (isStrict) {\n            return this._weekdaysMinStrictRegex;\n        } else {\n            return this._weekdaysMinRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n            this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n        }\n        return this._weekdaysMinStrictRegex && isStrict\n            ? this._weekdaysMinStrictRegex\n            : this._weekdaysMinRegex;\n    }\n}\n\nfunction computeWeekdaysParse() {\n    function cmpLenRev(a, b) {\n        return b.length - a.length;\n    }\n\n    var minPieces = [],\n        shortPieces = [],\n        longPieces = [],\n        mixedPieces = [],\n        i,\n        mom,\n        minp,\n        shortp,\n        longp;\n    for (i = 0; i < 7; i++) {\n        // make the regex if we don't have it already\n        mom = createUTC([2000, 1]).day(i);\n        minp = regexEscape(this.weekdaysMin(mom, ''));\n        shortp = regexEscape(this.weekdaysShort(mom, ''));\n        longp = regexEscape(this.weekdays(mom, ''));\n        minPieces.push(minp);\n        shortPieces.push(shortp);\n        longPieces.push(longp);\n        mixedPieces.push(minp);\n        mixedPieces.push(shortp);\n        mixedPieces.push(longp);\n    }\n    // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n    // will match the longer piece.\n    minPieces.sort(cmpLenRev);\n    shortPieces.sort(cmpLenRev);\n    longPieces.sort(cmpLenRev);\n    mixedPieces.sort(cmpLenRev);\n\n    this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n    this._weekdaysShortRegex = this._weekdaysRegex;\n    this._weekdaysMinRegex = this._weekdaysRegex;\n\n    this._weekdaysStrictRegex = new RegExp(\n        '^(' + longPieces.join('|') + ')',\n        'i'\n    );\n    this._weekdaysShortStrictRegex = new RegExp(\n        '^(' + shortPieces.join('|') + ')',\n        'i'\n    );\n    this._weekdaysMinStrictRegex = new RegExp(\n        '^(' + minPieces.join('|') + ')',\n        'i'\n    );\n}\n\n// FORMATTING\n\nfunction hFormat() {\n    return this.hours() % 12 || 12;\n}\n\nfunction kFormat() {\n    return this.hours() || 24;\n}\n\naddFormatToken('H', ['HH', 2], 0, 'hour');\naddFormatToken('h', ['hh', 2], 0, hFormat);\naddFormatToken('k', ['kk', 2], 0, kFormat);\n\naddFormatToken('hmm', 0, 0, function () {\n    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n});\n\naddFormatToken('hmmss', 0, 0, function () {\n    return (\n        '' +\n        hFormat.apply(this) +\n        zeroFill(this.minutes(), 2) +\n        zeroFill(this.seconds(), 2)\n    );\n});\n\naddFormatToken('Hmm', 0, 0, function () {\n    return '' + this.hours() + zeroFill(this.minutes(), 2);\n});\n\naddFormatToken('Hmmss', 0, 0, function () {\n    return (\n        '' +\n        this.hours() +\n        zeroFill(this.minutes(), 2) +\n        zeroFill(this.seconds(), 2)\n    );\n});\n\nfunction meridiem(token, lowercase) {\n    addFormatToken(token, 0, 0, function () {\n        return this.localeData().meridiem(\n            this.hours(),\n            this.minutes(),\n            lowercase\n        );\n    });\n}\n\nmeridiem('a', true);\nmeridiem('A', false);\n\n// PARSING\n\nfunction matchMeridiem(isStrict, locale) {\n    return locale._meridiemParse;\n}\n\naddRegexToken('a', matchMeridiem);\naddRegexToken('A', matchMeridiem);\naddRegexToken('H', match1to2, match1to2HasZero);\naddRegexToken('h', match1to2, match1to2NoLeadingZero);\naddRegexToken('k', match1to2, match1to2NoLeadingZero);\naddRegexToken('HH', match1to2, match2);\naddRegexToken('hh', match1to2, match2);\naddRegexToken('kk', match1to2, match2);\n\naddRegexToken('hmm', match3to4);\naddRegexToken('hmmss', match5to6);\naddRegexToken('Hmm', match3to4);\naddRegexToken('Hmmss', match5to6);\n\naddParseToken(['H', 'HH'], HOUR);\naddParseToken(['k', 'kk'], function (input, array, config) {\n    var kInput = toInt(input);\n    array[HOUR] = kInput === 24 ? 0 : kInput;\n});\naddParseToken(['a', 'A'], function (input, array, config) {\n    config._isPm = config._locale.isPM(input);\n    config._meridiem = input;\n});\naddParseToken(['h', 'hh'], function (input, array, config) {\n    array[HOUR] = toInt(input);\n    getParsingFlags(config).bigHour = true;\n});\naddParseToken('hmm', function (input, array, config) {\n    var pos = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos));\n    array[MINUTE] = toInt(input.substr(pos));\n    getParsingFlags(config).bigHour = true;\n});\naddParseToken('hmmss', function (input, array, config) {\n    var pos1 = input.length - 4,\n        pos2 = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos1));\n    array[MINUTE] = toInt(input.substr(pos1, 2));\n    array[SECOND] = toInt(input.substr(pos2));\n    getParsingFlags(config).bigHour = true;\n});\naddParseToken('Hmm', function (input, array, config) {\n    var pos = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos));\n    array[MINUTE] = toInt(input.substr(pos));\n});\naddParseToken('Hmmss', function (input, array, config) {\n    var pos1 = input.length - 4,\n        pos2 = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos1));\n    array[MINUTE] = toInt(input.substr(pos1, 2));\n    array[SECOND] = toInt(input.substr(pos2));\n});\n\n// LOCALES\n\nfunction localeIsPM(input) {\n    // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n    // Using charAt should be more compatible.\n    return (input + '').toLowerCase().charAt(0) === 'p';\n}\n\nvar defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n    // Setting the hour should keep the time, because the user explicitly\n    // specified which hour they want. So trying to maintain the same hour (in\n    // a new timezone) makes sense. Adding/subtracting hours does not follow\n    // this rule.\n    getSetHour = makeGetSet('Hours', true);\n\nfunction localeMeridiem(hours, minutes, isLower) {\n    if (hours > 11) {\n        return isLower ? 'pm' : 'PM';\n    } else {\n        return isLower ? 'am' : 'AM';\n    }\n}\n\nvar baseConfig = {\n    calendar: defaultCalendar,\n    longDateFormat: defaultLongDateFormat,\n    invalidDate: defaultInvalidDate,\n    ordinal: defaultOrdinal,\n    dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n    relativeTime: defaultRelativeTime,\n\n    months: defaultLocaleMonths,\n    monthsShort: defaultLocaleMonthsShort,\n\n    week: defaultLocaleWeek,\n\n    weekdays: defaultLocaleWeekdays,\n    weekdaysMin: defaultLocaleWeekdaysMin,\n    weekdaysShort: defaultLocaleWeekdaysShort,\n\n    meridiemParse: defaultLocaleMeridiemParse,\n};\n\n// internal storage for locale config files\nvar locales = {},\n    localeFamilies = {},\n    globalLocale;\n\nfunction commonPrefix(arr1, arr2) {\n    var i,\n        minl = Math.min(arr1.length, arr2.length);\n    for (i = 0; i < minl; i += 1) {\n        if (arr1[i] !== arr2[i]) {\n            return i;\n        }\n    }\n    return minl;\n}\n\nfunction normalizeLocale(key) {\n    return key ? key.toLowerCase().replace('_', '-') : key;\n}\n\n// pick the locale from the array\n// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\nfunction chooseLocale(names) {\n    var i = 0,\n        j,\n        next,\n        locale,\n        split;\n\n    while (i < names.length) {\n        split = normalizeLocale(names[i]).split('-');\n        j = split.length;\n        next = normalizeLocale(names[i + 1]);\n        next = next ? next.split('-') : null;\n        while (j > 0) {\n            locale = loadLocale(split.slice(0, j).join('-'));\n            if (locale) {\n                return locale;\n            }\n            if (\n                next &&\n                next.length >= j &&\n                commonPrefix(split, next) >= j - 1\n            ) {\n                //the next array item is better than a shallower substring of this one\n                break;\n            }\n            j--;\n        }\n        i++;\n    }\n    return globalLocale;\n}\n\nfunction isLocaleNameSane(name) {\n    // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n    // Ensure name is available and function returns boolean\n    return !!(name && name.match('^[^/\\\\\\\\]*$'));\n}\n\nfunction loadLocale(name) {\n    var oldLocale = null,\n        aliasedRequire;\n    // TODO: Find a better way to register and load all the locales in Node\n    if (\n        locales[name] === undefined &&\n        typeof module !== 'undefined' &&\n        module &&\n        module.exports &&\n        isLocaleNameSane(name)\n    ) {\n        try {\n            oldLocale = globalLocale._abbr;\n            aliasedRequire = require;\n            aliasedRequire('./locale/' + name);\n            getSetGlobalLocale(oldLocale);\n        } catch (e) {\n            // mark as not found to avoid repeating expensive file require call causing high CPU\n            // when trying to find en-US, en_US, en-us for every format call\n            locales[name] = null; // null means not found\n        }\n    }\n    return locales[name];\n}\n\n// This function will load locale and then set the global locale.  If\n// no arguments are passed in, it will simply return the current global\n// locale key.\nfunction getSetGlobalLocale(key, values) {\n    var data;\n    if (key) {\n        if (isUndefined(values)) {\n            data = getLocale(key);\n        } else {\n            data = defineLocale(key, values);\n        }\n\n        if (data) {\n            // moment.duration._locale = moment._locale = data;\n            globalLocale = data;\n        } else {\n            if (typeof console !== 'undefined' && console.warn) {\n                //warn user if arguments are passed but the locale could not be set\n                console.warn(\n                    'Locale ' + key + ' not found. Did you forget to load it?'\n                );\n            }\n        }\n    }\n\n    return globalLocale._abbr;\n}\n\nfunction defineLocale(name, config) {\n    if (config !== null) {\n        var locale,\n            parentConfig = baseConfig;\n        config.abbr = name;\n        if (locales[name] != null) {\n            deprecateSimple(\n                'defineLocaleOverride',\n                'use moment.updateLocale(localeName, config) to change ' +\n                    'an existing locale. moment.defineLocale(localeName, ' +\n                    'config) should only be used for creating a new locale ' +\n                    'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n            );\n            parentConfig = locales[name]._config;\n        } else if (config.parentLocale != null) {\n            if (locales[config.parentLocale] != null) {\n                parentConfig = locales[config.parentLocale]._config;\n            } else {\n                locale = loadLocale(config.parentLocale);\n                if (locale != null) {\n                    parentConfig = locale._config;\n                } else {\n                    if (!localeFamilies[config.parentLocale]) {\n                        localeFamilies[config.parentLocale] = [];\n                    }\n                    localeFamilies[config.parentLocale].push({\n                        name: name,\n                        config: config,\n                    });\n                    return null;\n                }\n            }\n        }\n        locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n        if (localeFamilies[name]) {\n            localeFamilies[name].forEach(function (x) {\n                defineLocale(x.name, x.config);\n            });\n        }\n\n        // backwards compat for now: also set the locale\n        // make sure we set the locale AFTER all child locales have been\n        // created, so we won't end up with the child locale set.\n        getSetGlobalLocale(name);\n\n        return locales[name];\n    } else {\n        // useful for testing\n        delete locales[name];\n        return null;\n    }\n}\n\nfunction updateLocale(name, config) {\n    if (config != null) {\n        var locale,\n            tmpLocale,\n            parentConfig = baseConfig;\n\n        if (locales[name] != null && locales[name].parentLocale != null) {\n            // Update existing child locale in-place to avoid memory-leaks\n            locales[name].set(mergeConfigs(locales[name]._config, config));\n        } else {\n            // MERGE\n            tmpLocale = loadLocale(name);\n            if (tmpLocale != null) {\n                parentConfig = tmpLocale._config;\n            }\n            config = mergeConfigs(parentConfig, config);\n            if (tmpLocale == null) {\n                // updateLocale is called for creating a new locale\n                // Set abbr so it will have a name (getters return\n                // undefined otherwise).\n                config.abbr = name;\n            }\n            locale = new Locale(config);\n            locale.parentLocale = locales[name];\n            locales[name] = locale;\n        }\n\n        // backwards compat for now: also set the locale\n        getSetGlobalLocale(name);\n    } else {\n        // pass null for config to unupdate, useful for tests\n        if (locales[name] != null) {\n            if (locales[name].parentLocale != null) {\n                locales[name] = locales[name].parentLocale;\n                if (name === getSetGlobalLocale()) {\n                    getSetGlobalLocale(name);\n                }\n            } else if (locales[name] != null) {\n                delete locales[name];\n            }\n        }\n    }\n    return locales[name];\n}\n\n// returns locale data\nfunction getLocale(key) {\n    var locale;\n\n    if (key && key._locale && key._locale._abbr) {\n        key = key._locale._abbr;\n    }\n\n    if (!key) {\n        return globalLocale;\n    }\n\n    if (!isArray(key)) {\n        //short-circuit everything else\n        locale = loadLocale(key);\n        if (locale) {\n            return locale;\n        }\n        key = [key];\n    }\n\n    return chooseLocale(key);\n}\n\nfunction listLocales() {\n    return keys(locales);\n}\n\nfunction checkOverflow(m) {\n    var overflow,\n        a = m._a;\n\n    if (a && getParsingFlags(m).overflow === -2) {\n        overflow =\n            a[MONTH] < 0 || a[MONTH] > 11\n                ? MONTH\n                : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n                  ? DATE\n                  : a[HOUR] < 0 ||\n                      a[HOUR] > 24 ||\n                      (a[HOUR] === 24 &&\n                          (a[MINUTE] !== 0 ||\n                              a[SECOND] !== 0 ||\n                              a[MILLISECOND] !== 0))\n                    ? HOUR\n                    : a[MINUTE] < 0 || a[MINUTE] > 59\n                      ? MINUTE\n                      : a[SECOND] < 0 || a[SECOND] > 59\n                        ? SECOND\n                        : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n                          ? MILLISECOND\n                          : -1;\n\n        if (\n            getParsingFlags(m)._overflowDayOfYear &&\n            (overflow < YEAR || overflow > DATE)\n        ) {\n            overflow = DATE;\n        }\n        if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n            overflow = WEEK;\n        }\n        if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n            overflow = WEEKDAY;\n        }\n\n        getParsingFlags(m).overflow = overflow;\n    }\n\n    return m;\n}\n\n// iso 8601 regex\n// 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\nvar extendedIsoRegex =\n        /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n    basicIsoRegex =\n        /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n    tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n    isoDates = [\n        ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n        ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n        ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n        ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n        ['YYYY-DDD', /\\d{4}-\\d{3}/],\n        ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n        ['YYYYYYMMDD', /[+-]\\d{10}/],\n        ['YYYYMMDD', /\\d{8}/],\n        ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n        ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n        ['YYYYDDD', /\\d{7}/],\n        ['YYYYMM', /\\d{6}/, false],\n        ['YYYY', /\\d{4}/, false],\n    ],\n    // iso time formats and regexes\n    isoTimes = [\n        ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n        ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n        ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n        ['HH:mm', /\\d\\d:\\d\\d/],\n        ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n        ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n        ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n        ['HHmm', /\\d\\d\\d\\d/],\n        ['HH', /\\d\\d/],\n    ],\n    aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n    // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n    rfc2822 =\n        /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n    obsOffsets = {\n        UT: 0,\n        GMT: 0,\n        EDT: -4 * 60,\n        EST: -5 * 60,\n        CDT: -5 * 60,\n        CST: -6 * 60,\n        MDT: -6 * 60,\n        MST: -7 * 60,\n        PDT: -7 * 60,\n        PST: -8 * 60,\n    };\n\n// date from iso format\nfunction configFromISO(config) {\n    var i,\n        l,\n        string = config._i,\n        match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n        allowTime,\n        dateFormat,\n        timeFormat,\n        tzFormat,\n        isoDatesLen = isoDates.length,\n        isoTimesLen = isoTimes.length;\n\n    if (match) {\n        getParsingFlags(config).iso = true;\n        for (i = 0, l = isoDatesLen; i < l; i++) {\n            if (isoDates[i][1].exec(match[1])) {\n                dateFormat = isoDates[i][0];\n                allowTime = isoDates[i][2] !== false;\n                break;\n            }\n        }\n        if (dateFormat == null) {\n            config._isValid = false;\n            return;\n        }\n        if (match[3]) {\n            for (i = 0, l = isoTimesLen; i < l; i++) {\n                if (isoTimes[i][1].exec(match[3])) {\n                    // match[2] should be 'T' or space\n                    timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                    break;\n                }\n            }\n            if (timeFormat == null) {\n                config._isValid = false;\n                return;\n            }\n        }\n        if (!allowTime && timeFormat != null) {\n            config._isValid = false;\n            return;\n        }\n        if (match[4]) {\n            if (tzRegex.exec(match[4])) {\n                tzFormat = 'Z';\n            } else {\n                config._isValid = false;\n                return;\n            }\n        }\n        config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n        configFromStringAndFormat(config);\n    } else {\n        config._isValid = false;\n    }\n}\n\nfunction extractFromRFC2822Strings(\n    yearStr,\n    monthStr,\n    dayStr,\n    hourStr,\n    minuteStr,\n    secondStr\n) {\n    var result = [\n        untruncateYear(yearStr),\n        defaultLocaleMonthsShort.indexOf(monthStr),\n        parseInt(dayStr, 10),\n        parseInt(hourStr, 10),\n        parseInt(minuteStr, 10),\n    ];\n\n    if (secondStr) {\n        result.push(parseInt(secondStr, 10));\n    }\n\n    return result;\n}\n\nfunction untruncateYear(yearStr) {\n    var year = parseInt(yearStr, 10);\n    if (year <= 49) {\n        return 2000 + year;\n    } else if (year <= 999) {\n        return 1900 + year;\n    }\n    return year;\n}\n\nfunction preprocessRFC2822(s) {\n    // Remove comments and folding whitespace and replace multiple-spaces with a single space\n    return s\n        .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n        .replace(/(\\s\\s+)/g, ' ')\n        .replace(/^\\s\\s*/, '')\n        .replace(/\\s\\s*$/, '');\n}\n\nfunction checkWeekday(weekdayStr, parsedInput, config) {\n    if (weekdayStr) {\n        // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n        var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n            weekdayActual = new Date(\n                parsedInput[0],\n                parsedInput[1],\n                parsedInput[2]\n            ).getDay();\n        if (weekdayProvided !== weekdayActual) {\n            getParsingFlags(config).weekdayMismatch = true;\n            config._isValid = false;\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction calculateOffset(obsOffset, militaryOffset, numOffset) {\n    if (obsOffset) {\n        return obsOffsets[obsOffset];\n    } else if (militaryOffset) {\n        // the only allowed military tz is Z\n        return 0;\n    } else {\n        var hm = parseInt(numOffset, 10),\n            m = hm % 100,\n            h = (hm - m) / 100;\n        return h * 60 + m;\n    }\n}\n\n// date and time from ref 2822 format\nfunction configFromRFC2822(config) {\n    var match = rfc2822.exec(preprocessRFC2822(config._i)),\n        parsedArray;\n    if (match) {\n        parsedArray = extractFromRFC2822Strings(\n            match[4],\n            match[3],\n            match[2],\n            match[5],\n            match[6],\n            match[7]\n        );\n        if (!checkWeekday(match[1], parsedArray, config)) {\n            return;\n        }\n\n        config._a = parsedArray;\n        config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n        config._d = createUTCDate.apply(null, config._a);\n        config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n        getParsingFlags(config).rfc2822 = true;\n    } else {\n        config._isValid = false;\n    }\n}\n\n// date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\nfunction configFromString(config) {\n    var matched = aspNetJsonRegex.exec(config._i);\n    if (matched !== null) {\n        config._d = new Date(+matched[1]);\n        return;\n    }\n\n    configFromISO(config);\n    if (config._isValid === false) {\n        delete config._isValid;\n    } else {\n        return;\n    }\n\n    configFromRFC2822(config);\n    if (config._isValid === false) {\n        delete config._isValid;\n    } else {\n        return;\n    }\n\n    if (config._strict) {\n        config._isValid = false;\n    } else {\n        // Final attempt, use Input Fallback\n        hooks.createFromInputFallback(config);\n    }\n}\n\nhooks.createFromInputFallback = deprecate(\n    'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n        'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n        'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n    function (config) {\n        config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n    }\n);\n\n// Pick the first defined of two or three arguments.\nfunction defaults(a, b, c) {\n    if (a != null) {\n        return a;\n    }\n    if (b != null) {\n        return b;\n    }\n    return c;\n}\n\nfunction currentDateArray(config) {\n    // hooks is actually the exported moment object\n    var nowValue = new Date(hooks.now());\n    if (config._useUTC) {\n        return [\n            nowValue.getUTCFullYear(),\n            nowValue.getUTCMonth(),\n            nowValue.getUTCDate(),\n        ];\n    }\n    return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n}\n\n// convert an array to a date.\n// the array should mirror the parameters below\n// note: all values past the year are optional and will default to the lowest possible value.\n// [year, month, day , hour, minute, second, millisecond]\nfunction configFromArray(config) {\n    var i,\n        date,\n        input = [],\n        currentDate,\n        expectedWeekday,\n        yearToUse;\n\n    if (config._d) {\n        return;\n    }\n\n    currentDate = currentDateArray(config);\n\n    //compute day of the year from weeks and weekdays\n    if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n        dayOfYearFromWeekInfo(config);\n    }\n\n    //if the day of the year is set, figure out what it is\n    if (config._dayOfYear != null) {\n        yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n        if (\n            config._dayOfYear > daysInYear(yearToUse) ||\n            config._dayOfYear === 0\n        ) {\n            getParsingFlags(config)._overflowDayOfYear = true;\n        }\n\n        date = createUTCDate(yearToUse, 0, config._dayOfYear);\n        config._a[MONTH] = date.getUTCMonth();\n        config._a[DATE] = date.getUTCDate();\n    }\n\n    // Default to current date.\n    // * if no year, month, day of month are given, default to today\n    // * if day of month is given, default month and year\n    // * if month is given, default only year\n    // * if year is given, don't default anything\n    for (i = 0; i < 3 && config._a[i] == null; ++i) {\n        config._a[i] = input[i] = currentDate[i];\n    }\n\n    // Zero out whatever was not defaulted, including time\n    for (; i < 7; i++) {\n        config._a[i] = input[i] =\n            config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n    }\n\n    // Check for 24:00:00.000\n    if (\n        config._a[HOUR] === 24 &&\n        config._a[MINUTE] === 0 &&\n        config._a[SECOND] === 0 &&\n        config._a[MILLISECOND] === 0\n    ) {\n        config._nextDay = true;\n        config._a[HOUR] = 0;\n    }\n\n    config._d = (config._useUTC ? createUTCDate : createDate).apply(\n        null,\n        input\n    );\n    expectedWeekday = config._useUTC\n        ? config._d.getUTCDay()\n        : config._d.getDay();\n\n    // Apply timezone offset from input. The actual utcOffset can be changed\n    // with parseZone.\n    if (config._tzm != null) {\n        config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n    }\n\n    if (config._nextDay) {\n        config._a[HOUR] = 24;\n    }\n\n    // check for mismatching day of week\n    if (\n        config._w &&\n        typeof config._w.d !== 'undefined' &&\n        config._w.d !== expectedWeekday\n    ) {\n        getParsingFlags(config).weekdayMismatch = true;\n    }\n}\n\nfunction dayOfYearFromWeekInfo(config) {\n    var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n    w = config._w;\n    if (w.GG != null || w.W != null || w.E != null) {\n        dow = 1;\n        doy = 4;\n\n        // TODO: We need to take the current isoWeekYear, but that depends on\n        // how we interpret now (local, utc, fixed offset). So create\n        // a now version of current config (take local/utc/offset flags, and\n        // create now).\n        weekYear = defaults(\n            w.GG,\n            config._a[YEAR],\n            weekOfYear(createLocal(), 1, 4).year\n        );\n        week = defaults(w.W, 1);\n        weekday = defaults(w.E, 1);\n        if (weekday < 1 || weekday > 7) {\n            weekdayOverflow = true;\n        }\n    } else {\n        dow = config._locale._week.dow;\n        doy = config._locale._week.doy;\n\n        curWeek = weekOfYear(createLocal(), dow, doy);\n\n        weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n        // Default to current week.\n        week = defaults(w.w, curWeek.week);\n\n        if (w.d != null) {\n            // weekday -- low day numbers are considered next week\n            weekday = w.d;\n            if (weekday < 0 || weekday > 6) {\n                weekdayOverflow = true;\n            }\n        } else if (w.e != null) {\n            // local weekday -- counting starts from beginning of week\n            weekday = w.e + dow;\n            if (w.e < 0 || w.e > 6) {\n                weekdayOverflow = true;\n            }\n        } else {\n            // default to beginning of week\n            weekday = dow;\n        }\n    }\n    if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n        getParsingFlags(config)._overflowWeeks = true;\n    } else if (weekdayOverflow != null) {\n        getParsingFlags(config)._overflowWeekday = true;\n    } else {\n        temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n        config._a[YEAR] = temp.year;\n        config._dayOfYear = temp.dayOfYear;\n    }\n}\n\n// constant that refers to the ISO standard\nhooks.ISO_8601 = function () {};\n\n// constant that refers to the RFC 2822 form\nhooks.RFC_2822 = function () {};\n\n// date from string and format string\nfunction configFromStringAndFormat(config) {\n    // TODO: Move this to another part of the creation flow to prevent circular deps\n    if (config._f === hooks.ISO_8601) {\n        configFromISO(config);\n        return;\n    }\n    if (config._f === hooks.RFC_2822) {\n        configFromRFC2822(config);\n        return;\n    }\n    config._a = [];\n    getParsingFlags(config).empty = true;\n\n    // This array is used to make a Date, either with `new Date` or `Date.UTC`\n    var string = '' + config._i,\n        i,\n        parsedInput,\n        tokens,\n        token,\n        skipped,\n        stringLength = string.length,\n        totalParsedInputLength = 0,\n        era,\n        tokenLen;\n\n    tokens =\n        expandFormat(config._f, config._locale).match(formattingTokens) || [];\n    tokenLen = tokens.length;\n    for (i = 0; i < tokenLen; i++) {\n        token = tokens[i];\n        parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n            [])[0];\n        if (parsedInput) {\n            skipped = string.substr(0, string.indexOf(parsedInput));\n            if (skipped.length > 0) {\n                getParsingFlags(config).unusedInput.push(skipped);\n            }\n            string = string.slice(\n                string.indexOf(parsedInput) + parsedInput.length\n            );\n            totalParsedInputLength += parsedInput.length;\n        }\n        // don't parse if it's not a known token\n        if (formatTokenFunctions[token]) {\n            if (parsedInput) {\n                getParsingFlags(config).empty = false;\n            } else {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n            addTimeToArrayFromToken(token, parsedInput, config);\n        } else if (config._strict && !parsedInput) {\n            getParsingFlags(config).unusedTokens.push(token);\n        }\n    }\n\n    // add remaining unparsed input length to the string\n    getParsingFlags(config).charsLeftOver =\n        stringLength - totalParsedInputLength;\n    if (string.length > 0) {\n        getParsingFlags(config).unusedInput.push(string);\n    }\n\n    // clear _12h flag if hour is <= 12\n    if (\n        config._a[HOUR] <= 12 &&\n        getParsingFlags(config).bigHour === true &&\n        config._a[HOUR] > 0\n    ) {\n        getParsingFlags(config).bigHour = undefined;\n    }\n\n    getParsingFlags(config).parsedDateParts = config._a.slice(0);\n    getParsingFlags(config).meridiem = config._meridiem;\n    // handle meridiem\n    config._a[HOUR] = meridiemFixWrap(\n        config._locale,\n        config._a[HOUR],\n        config._meridiem\n    );\n\n    // handle era\n    era = getParsingFlags(config).era;\n    if (era !== null) {\n        config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n    }\n\n    configFromArray(config);\n    checkOverflow(config);\n}\n\nfunction meridiemFixWrap(locale, hour, meridiem) {\n    var isPm;\n\n    if (meridiem == null) {\n        // nothing to do\n        return hour;\n    }\n    if (locale.meridiemHour != null) {\n        return locale.meridiemHour(hour, meridiem);\n    } else if (locale.isPM != null) {\n        // Fallback\n        isPm = locale.isPM(meridiem);\n        if (isPm && hour < 12) {\n            hour += 12;\n        }\n        if (!isPm && hour === 12) {\n            hour = 0;\n        }\n        return hour;\n    } else {\n        // this is not supposed to happen\n        return hour;\n    }\n}\n\n// date from string and array of format strings\nfunction configFromStringAndArray(config) {\n    var tempConfig,\n        bestMoment,\n        scoreToBeat,\n        i,\n        currentScore,\n        validFormatFound,\n        bestFormatIsValid = false,\n        configfLen = config._f.length;\n\n    if (configfLen === 0) {\n        getParsingFlags(config).invalidFormat = true;\n        config._d = new Date(NaN);\n        return;\n    }\n\n    for (i = 0; i < configfLen; i++) {\n        currentScore = 0;\n        validFormatFound = false;\n        tempConfig = copyConfig({}, config);\n        if (config._useUTC != null) {\n            tempConfig._useUTC = config._useUTC;\n        }\n        tempConfig._f = config._f[i];\n        configFromStringAndFormat(tempConfig);\n\n        if (isValid(tempConfig)) {\n            validFormatFound = true;\n        }\n\n        // if there is any input that was not parsed add a penalty for that format\n        currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n        //or tokens\n        currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n        getParsingFlags(tempConfig).score = currentScore;\n\n        if (!bestFormatIsValid) {\n            if (\n                scoreToBeat == null ||\n                currentScore < scoreToBeat ||\n                validFormatFound\n            ) {\n                scoreToBeat = currentScore;\n                bestMoment = tempConfig;\n                if (validFormatFound) {\n                    bestFormatIsValid = true;\n                }\n            }\n        } else {\n            if (currentScore < scoreToBeat) {\n                scoreToBeat = currentScore;\n                bestMoment = tempConfig;\n            }\n        }\n    }\n\n    extend(config, bestMoment || tempConfig);\n}\n\nfunction configFromObject(config) {\n    if (config._d) {\n        return;\n    }\n\n    var i = normalizeObjectUnits(config._i),\n        dayOrDate = i.day === undefined ? i.date : i.day;\n    config._a = map(\n        [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n        function (obj) {\n            return obj && parseInt(obj, 10);\n        }\n    );\n\n    configFromArray(config);\n}\n\nfunction createFromConfig(config) {\n    var res = new Moment(checkOverflow(prepareConfig(config)));\n    if (res._nextDay) {\n        // Adding is smart enough around DST\n        res.add(1, 'd');\n        res._nextDay = undefined;\n    }\n\n    return res;\n}\n\nfunction prepareConfig(config) {\n    var input = config._i,\n        format = config._f;\n\n    config._locale = config._locale || getLocale(config._l);\n\n    if (input === null || (format === undefined && input === '')) {\n        return createInvalid({ nullInput: true });\n    }\n\n    if (typeof input === 'string') {\n        config._i = input = config._locale.preparse(input);\n    }\n\n    if (isMoment(input)) {\n        return new Moment(checkOverflow(input));\n    } else if (isDate(input)) {\n        config._d = input;\n    } else if (isArray(format)) {\n        configFromStringAndArray(config);\n    } else if (format) {\n        configFromStringAndFormat(config);\n    } else {\n        configFromInput(config);\n    }\n\n    if (!isValid(config)) {\n        config._d = null;\n    }\n\n    return config;\n}\n\nfunction configFromInput(config) {\n    var input = config._i;\n    if (isUndefined(input)) {\n        config._d = new Date(hooks.now());\n    } else if (isDate(input)) {\n        config._d = new Date(input.valueOf());\n    } else if (typeof input === 'string') {\n        configFromString(config);\n    } else if (isArray(input)) {\n        config._a = map(input.slice(0), function (obj) {\n            return parseInt(obj, 10);\n        });\n        configFromArray(config);\n    } else if (isObject(input)) {\n        configFromObject(config);\n    } else if (isNumber(input)) {\n        // from milliseconds\n        config._d = new Date(input);\n    } else {\n        hooks.createFromInputFallback(config);\n    }\n}\n\nfunction createLocalOrUTC(input, format, locale, strict, isUTC) {\n    var c = {};\n\n    if (format === true || format === false) {\n        strict = format;\n        format = undefined;\n    }\n\n    if (locale === true || locale === false) {\n        strict = locale;\n        locale = undefined;\n    }\n\n    if (\n        (isObject(input) && isObjectEmpty(input)) ||\n        (isArray(input) && input.length === 0)\n    ) {\n        input = undefined;\n    }\n    // object construction must be done this way.\n    // https://github.com/moment/moment/issues/1423\n    c._isAMomentObject = true;\n    c._useUTC = c._isUTC = isUTC;\n    c._l = locale;\n    c._i = input;\n    c._f = format;\n    c._strict = strict;\n\n    return createFromConfig(c);\n}\n\nfunction createLocal(input, format, locale, strict) {\n    return createLocalOrUTC(input, format, locale, strict, false);\n}\n\nvar prototypeMin = deprecate(\n        'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n        function () {\n            var other = createLocal.apply(null, arguments);\n            if (this.isValid() && other.isValid()) {\n                return other < this ? this : other;\n            } else {\n                return createInvalid();\n            }\n        }\n    ),\n    prototypeMax = deprecate(\n        'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n        function () {\n            var other = createLocal.apply(null, arguments);\n            if (this.isValid() && other.isValid()) {\n                return other > this ? this : other;\n            } else {\n                return createInvalid();\n            }\n        }\n    );\n\n// Pick a moment m from moments so that m[fn](other) is true for all\n// other. This relies on the function fn to be transitive.\n//\n// moments should either be an array of moment objects or an array, whose\n// first element is an array of moment objects.\nfunction pickBy(fn, moments) {\n    var res, i;\n    if (moments.length === 1 && isArray(moments[0])) {\n        moments = moments[0];\n    }\n    if (!moments.length) {\n        return createLocal();\n    }\n    res = moments[0];\n    for (i = 1; i < moments.length; ++i) {\n        if (!moments[i].isValid() || moments[i][fn](res)) {\n            res = moments[i];\n        }\n    }\n    return res;\n}\n\n// TODO: Use [].sort instead?\nfunction min() {\n    var args = [].slice.call(arguments, 0);\n\n    return pickBy('isBefore', args);\n}\n\nfunction max() {\n    var args = [].slice.call(arguments, 0);\n\n    return pickBy('isAfter', args);\n}\n\nvar now = function () {\n    return Date.now ? Date.now() : +new Date();\n};\n\nvar ordering = [\n    'year',\n    'quarter',\n    'month',\n    'week',\n    'day',\n    'hour',\n    'minute',\n    'second',\n    'millisecond',\n];\n\nfunction isDurationValid(m) {\n    var key,\n        unitHasDecimal = false,\n        i,\n        orderLen = ordering.length;\n    for (key in m) {\n        if (\n            hasOwnProp(m, key) &&\n            !(\n                indexOf.call(ordering, key) !== -1 &&\n                (m[key] == null || !isNaN(m[key]))\n            )\n        ) {\n            return false;\n        }\n    }\n\n    for (i = 0; i < orderLen; ++i) {\n        if (m[ordering[i]]) {\n            if (unitHasDecimal) {\n                return false; // only allow non-integers for smallest unit\n            }\n            if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                unitHasDecimal = true;\n            }\n        }\n    }\n\n    return true;\n}\n\nfunction isValid$1() {\n    return this._isValid;\n}\n\nfunction createInvalid$1() {\n    return createDuration(NaN);\n}\n\nfunction Duration(duration) {\n    var normalizedInput = normalizeObjectUnits(duration),\n        years = normalizedInput.year || 0,\n        quarters = normalizedInput.quarter || 0,\n        months = normalizedInput.month || 0,\n        weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n        days = normalizedInput.day || 0,\n        hours = normalizedInput.hour || 0,\n        minutes = normalizedInput.minute || 0,\n        seconds = normalizedInput.second || 0,\n        milliseconds = normalizedInput.millisecond || 0;\n\n    this._isValid = isDurationValid(normalizedInput);\n\n    // representation for dateAddRemove\n    this._milliseconds =\n        +milliseconds +\n        seconds * 1e3 + // 1000\n        minutes * 6e4 + // 1000 * 60\n        hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n    // Because of dateAddRemove treats 24 hours as different from a\n    // day when working around DST, we need to store them separately\n    this._days = +days + weeks * 7;\n    // It is impossible to translate months into days without knowing\n    // which months you are are talking about, so we have to store\n    // it separately.\n    this._months = +months + quarters * 3 + years * 12;\n\n    this._data = {};\n\n    this._locale = getLocale();\n\n    this._bubble();\n}\n\nfunction isDuration(obj) {\n    return obj instanceof Duration;\n}\n\nfunction absRound(number) {\n    if (number < 0) {\n        return Math.round(-1 * number) * -1;\n    } else {\n        return Math.round(number);\n    }\n}\n\n// compare two arrays, return the number of differences\nfunction compareArrays(array1, array2, dontConvert) {\n    var len = Math.min(array1.length, array2.length),\n        lengthDiff = Math.abs(array1.length - array2.length),\n        diffs = 0,\n        i;\n    for (i = 0; i < len; i++) {\n        if (\n            (dontConvert && array1[i] !== array2[i]) ||\n            (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n        ) {\n            diffs++;\n        }\n    }\n    return diffs + lengthDiff;\n}\n\n// FORMATTING\n\nfunction offset(token, separator) {\n    addFormatToken(token, 0, 0, function () {\n        var offset = this.utcOffset(),\n            sign = '+';\n        if (offset < 0) {\n            offset = -offset;\n            sign = '-';\n        }\n        return (\n            sign +\n            zeroFill(~~(offset / 60), 2) +\n            separator +\n            zeroFill(~~offset % 60, 2)\n        );\n    });\n}\n\noffset('Z', ':');\noffset('ZZ', '');\n\n// PARSING\n\naddRegexToken('Z', matchShortOffset);\naddRegexToken('ZZ', matchShortOffset);\naddParseToken(['Z', 'ZZ'], function (input, array, config) {\n    config._useUTC = true;\n    config._tzm = offsetFromString(matchShortOffset, input);\n});\n\n// HELPERS\n\n// timezone chunker\n// '+10:00' > ['10',  '00']\n// '-1530'  > ['-15', '30']\nvar chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\nfunction offsetFromString(matcher, string) {\n    var matches = (string || '').match(matcher),\n        chunk,\n        parts,\n        minutes;\n\n    if (matches === null) {\n        return null;\n    }\n\n    chunk = matches[matches.length - 1] || [];\n    parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n    minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n    return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n}\n\n// Return a moment from input, that is local/utc/zone equivalent to model.\nfunction cloneWithOffset(input, model) {\n    var res, diff;\n    if (model._isUTC) {\n        res = model.clone();\n        diff =\n            (isMoment(input) || isDate(input)\n                ? input.valueOf()\n                : createLocal(input).valueOf()) - res.valueOf();\n        // Use low-level api, because this fn is low-level api.\n        res._d.setTime(res._d.valueOf() + diff);\n        hooks.updateOffset(res, false);\n        return res;\n    } else {\n        return createLocal(input).local();\n    }\n}\n\nfunction getDateOffset(m) {\n    // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n    // https://github.com/moment/moment/pull/1871\n    return -Math.round(m._d.getTimezoneOffset());\n}\n\n// HOOKS\n\n// This function will be called whenever a moment is mutated.\n// It is intended to keep the offset in sync with the timezone.\nhooks.updateOffset = function () {};\n\n// MOMENTS\n\n// keepLocalTime = true means only change the timezone, without\n// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n// +0200, so we adjust the time as needed, to be valid.\n//\n// Keeping the time actually adds/subtracts (one hour)\n// from the actual represented time. That is why we call updateOffset\n// a second time. In case it wants us to change the offset again\n// _changeInProgress == true case, then we have to adjust, because\n// there is no such time in the given timezone.\nfunction getSetOffset(input, keepLocalTime, keepMinutes) {\n    var offset = this._offset || 0,\n        localAdjust;\n    if (!this.isValid()) {\n        return input != null ? this : NaN;\n    }\n    if (input != null) {\n        if (typeof input === 'string') {\n            input = offsetFromString(matchShortOffset, input);\n            if (input === null) {\n                return this;\n            }\n        } else if (Math.abs(input) < 16 && !keepMinutes) {\n            input = input * 60;\n        }\n        if (!this._isUTC && keepLocalTime) {\n            localAdjust = getDateOffset(this);\n        }\n        this._offset = input;\n        this._isUTC = true;\n        if (localAdjust != null) {\n            this.add(localAdjust, 'm');\n        }\n        if (offset !== input) {\n            if (!keepLocalTime || this._changeInProgress) {\n                addSubtract(\n                    this,\n                    createDuration(input - offset, 'm'),\n                    1,\n                    false\n                );\n            } else if (!this._changeInProgress) {\n                this._changeInProgress = true;\n                hooks.updateOffset(this, true);\n                this._changeInProgress = null;\n            }\n        }\n        return this;\n    } else {\n        return this._isUTC ? offset : getDateOffset(this);\n    }\n}\n\nfunction getSetZone(input, keepLocalTime) {\n    if (input != null) {\n        if (typeof input !== 'string') {\n            input = -input;\n        }\n\n        this.utcOffset(input, keepLocalTime);\n\n        return this;\n    } else {\n        return -this.utcOffset();\n    }\n}\n\nfunction setOffsetToUTC(keepLocalTime) {\n    return this.utcOffset(0, keepLocalTime);\n}\n\nfunction setOffsetToLocal(keepLocalTime) {\n    if (this._isUTC) {\n        this.utcOffset(0, keepLocalTime);\n        this._isUTC = false;\n\n        if (keepLocalTime) {\n            this.subtract(getDateOffset(this), 'm');\n        }\n    }\n    return this;\n}\n\nfunction setOffsetToParsedOffset() {\n    if (this._tzm != null) {\n        this.utcOffset(this._tzm, false, true);\n    } else if (typeof this._i === 'string') {\n        var tZone = offsetFromString(matchOffset, this._i);\n        if (tZone != null) {\n            this.utcOffset(tZone);\n        } else {\n            this.utcOffset(0, true);\n        }\n    }\n    return this;\n}\n\nfunction hasAlignedHourOffset(input) {\n    if (!this.isValid()) {\n        return false;\n    }\n    input = input ? createLocal(input).utcOffset() : 0;\n\n    return (this.utcOffset() - input) % 60 === 0;\n}\n\nfunction isDaylightSavingTime() {\n    return (\n        this.utcOffset() > this.clone().month(0).utcOffset() ||\n        this.utcOffset() > this.clone().month(5).utcOffset()\n    );\n}\n\nfunction isDaylightSavingTimeShifted() {\n    if (!isUndefined(this._isDSTShifted)) {\n        return this._isDSTShifted;\n    }\n\n    var c = {},\n        other;\n\n    copyConfig(c, this);\n    c = prepareConfig(c);\n\n    if (c._a) {\n        other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n        this._isDSTShifted =\n            this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n    } else {\n        this._isDSTShifted = false;\n    }\n\n    return this._isDSTShifted;\n}\n\nfunction isLocal() {\n    return this.isValid() ? !this._isUTC : false;\n}\n\nfunction isUtcOffset() {\n    return this.isValid() ? this._isUTC : false;\n}\n\nfunction isUtc() {\n    return this.isValid() ? this._isUTC && this._offset === 0 : false;\n}\n\n// ASP.NET json date format regex\nvar aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n    // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n    // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n    // and further modified to allow for strings containing both week and day\n    isoRegex =\n        /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\nfunction createDuration(input, key) {\n    var duration = input,\n        // matching against regexp is expensive, do it on demand\n        match = null,\n        sign,\n        ret,\n        diffRes;\n\n    if (isDuration(input)) {\n        duration = {\n            ms: input._milliseconds,\n            d: input._days,\n            M: input._months,\n        };\n    } else if (isNumber(input) || !isNaN(+input)) {\n        duration = {};\n        if (key) {\n            duration[key] = +input;\n        } else {\n            duration.milliseconds = +input;\n        }\n    } else if ((match = aspNetRegex.exec(input))) {\n        sign = match[1] === '-' ? -1 : 1;\n        duration = {\n            y: 0,\n            d: toInt(match[DATE]) * sign,\n            h: toInt(match[HOUR]) * sign,\n            m: toInt(match[MINUTE]) * sign,\n            s: toInt(match[SECOND]) * sign,\n            ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n        };\n    } else if ((match = isoRegex.exec(input))) {\n        sign = match[1] === '-' ? -1 : 1;\n        duration = {\n            y: parseIso(match[2], sign),\n            M: parseIso(match[3], sign),\n            w: parseIso(match[4], sign),\n            d: parseIso(match[5], sign),\n            h: parseIso(match[6], sign),\n            m: parseIso(match[7], sign),\n            s: parseIso(match[8], sign),\n        };\n    } else if (duration == null) {\n        // checks for null or undefined\n        duration = {};\n    } else if (\n        typeof duration === 'object' &&\n        ('from' in duration || 'to' in duration)\n    ) {\n        diffRes = momentsDifference(\n            createLocal(duration.from),\n            createLocal(duration.to)\n        );\n\n        duration = {};\n        duration.ms = diffRes.milliseconds;\n        duration.M = diffRes.months;\n    }\n\n    ret = new Duration(duration);\n\n    if (isDuration(input) && hasOwnProp(input, '_locale')) {\n        ret._locale = input._locale;\n    }\n\n    if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n        ret._isValid = input._isValid;\n    }\n\n    return ret;\n}\n\ncreateDuration.fn = Duration.prototype;\ncreateDuration.invalid = createInvalid$1;\n\nfunction parseIso(inp, sign) {\n    // We'd normally use ~~inp for this, but unfortunately it also\n    // converts floats to ints.\n    // inp may be undefined, so careful calling replace on it.\n    var res = inp && parseFloat(inp.replace(',', '.'));\n    // apply sign while we're at it\n    return (isNaN(res) ? 0 : res) * sign;\n}\n\nfunction positiveMomentsDifference(base, other) {\n    var res = {};\n\n    res.months =\n        other.month() - base.month() + (other.year() - base.year()) * 12;\n    if (base.clone().add(res.months, 'M').isAfter(other)) {\n        --res.months;\n    }\n\n    res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n    return res;\n}\n\nfunction momentsDifference(base, other) {\n    var res;\n    if (!(base.isValid() && other.isValid())) {\n        return { milliseconds: 0, months: 0 };\n    }\n\n    other = cloneWithOffset(other, base);\n    if (base.isBefore(other)) {\n        res = positiveMomentsDifference(base, other);\n    } else {\n        res = positiveMomentsDifference(other, base);\n        res.milliseconds = -res.milliseconds;\n        res.months = -res.months;\n    }\n\n    return res;\n}\n\n// TODO: remove 'name' arg after deprecation is removed\nfunction createAdder(direction, name) {\n    return function (val, period) {\n        var dur, tmp;\n        //invert the arguments, but complain about it\n        if (period !== null && !isNaN(+period)) {\n            deprecateSimple(\n                name,\n                'moment().' +\n                    name +\n                    '(period, number) is deprecated. Please use moment().' +\n                    name +\n                    '(number, period). ' +\n                    'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n            );\n            tmp = val;\n            val = period;\n            period = tmp;\n        }\n\n        dur = createDuration(val, period);\n        addSubtract(this, dur, direction);\n        return this;\n    };\n}\n\nfunction addSubtract(mom, duration, isAdding, updateOffset) {\n    var milliseconds = duration._milliseconds,\n        days = absRound(duration._days),\n        months = absRound(duration._months);\n\n    if (!mom.isValid()) {\n        // No op\n        return;\n    }\n\n    updateOffset = updateOffset == null ? true : updateOffset;\n\n    if (months) {\n        setMonth(mom, get(mom, 'Month') + months * isAdding);\n    }\n    if (days) {\n        set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n    }\n    if (milliseconds) {\n        mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n    }\n    if (updateOffset) {\n        hooks.updateOffset(mom, days || months);\n    }\n}\n\nvar add = createAdder(1, 'add'),\n    subtract = createAdder(-1, 'subtract');\n\nfunction isString(input) {\n    return typeof input === 'string' || input instanceof String;\n}\n\n// type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\nfunction isMomentInput(input) {\n    return (\n        isMoment(input) ||\n        isDate(input) ||\n        isString(input) ||\n        isNumber(input) ||\n        isNumberOrStringArray(input) ||\n        isMomentInputObject(input) ||\n        input === null ||\n        input === undefined\n    );\n}\n\nfunction isMomentInputObject(input) {\n    var objectTest = isObject(input) && !isObjectEmpty(input),\n        propertyTest = false,\n        properties = [\n            'years',\n            'year',\n            'y',\n            'months',\n            'month',\n            'M',\n            'days',\n            'day',\n            'd',\n            'dates',\n            'date',\n            'D',\n            'hours',\n            'hour',\n            'h',\n            'minutes',\n            'minute',\n            'm',\n            'seconds',\n            'second',\n            's',\n            'milliseconds',\n            'millisecond',\n            'ms',\n        ],\n        i,\n        property,\n        propertyLen = properties.length;\n\n    for (i = 0; i < propertyLen; i += 1) {\n        property = properties[i];\n        propertyTest = propertyTest || hasOwnProp(input, property);\n    }\n\n    return objectTest && propertyTest;\n}\n\nfunction isNumberOrStringArray(input) {\n    var arrayTest = isArray(input),\n        dataTypeTest = false;\n    if (arrayTest) {\n        dataTypeTest =\n            input.filter(function (item) {\n                return !isNumber(item) && isString(input);\n            }).length === 0;\n    }\n    return arrayTest && dataTypeTest;\n}\n\nfunction isCalendarSpec(input) {\n    var objectTest = isObject(input) && !isObjectEmpty(input),\n        propertyTest = false,\n        properties = [\n            'sameDay',\n            'nextDay',\n            'lastDay',\n            'nextWeek',\n            'lastWeek',\n            'sameElse',\n        ],\n        i,\n        property;\n\n    for (i = 0; i < properties.length; i += 1) {\n        property = properties[i];\n        propertyTest = propertyTest || hasOwnProp(input, property);\n    }\n\n    return objectTest && propertyTest;\n}\n\nfunction getCalendarFormat(myMoment, now) {\n    var diff = myMoment.diff(now, 'days', true);\n    return diff < -6\n        ? 'sameElse'\n        : diff < -1\n          ? 'lastWeek'\n          : diff < 0\n            ? 'lastDay'\n            : diff < 1\n              ? 'sameDay'\n              : diff < 2\n                ? 'nextDay'\n                : diff < 7\n                  ? 'nextWeek'\n                  : 'sameElse';\n}\n\nfunction calendar$1(time, formats) {\n    // Support for single parameter, formats only overload to the calendar function\n    if (arguments.length === 1) {\n        if (!arguments[0]) {\n            time = undefined;\n            formats = undefined;\n        } else if (isMomentInput(arguments[0])) {\n            time = arguments[0];\n            formats = undefined;\n        } else if (isCalendarSpec(arguments[0])) {\n            formats = arguments[0];\n            time = undefined;\n        }\n    }\n    // We want to compare the start of today, vs this.\n    // Getting start-of-today depends on whether we're local/utc/offset or not.\n    var now = time || createLocal(),\n        sod = cloneWithOffset(now, this).startOf('day'),\n        format = hooks.calendarFormat(this, sod) || 'sameElse',\n        output =\n            formats &&\n            (isFunction(formats[format])\n                ? formats[format].call(this, now)\n                : formats[format]);\n\n    return this.format(\n        output || this.localeData().calendar(format, this, createLocal(now))\n    );\n}\n\nfunction clone() {\n    return new Moment(this);\n}\n\nfunction isAfter(input, units) {\n    var localInput = isMoment(input) ? input : createLocal(input);\n    if (!(this.isValid() && localInput.isValid())) {\n        return false;\n    }\n    units = normalizeUnits(units) || 'millisecond';\n    if (units === 'millisecond') {\n        return this.valueOf() > localInput.valueOf();\n    } else {\n        return localInput.valueOf() < this.clone().startOf(units).valueOf();\n    }\n}\n\nfunction isBefore(input, units) {\n    var localInput = isMoment(input) ? input : createLocal(input);\n    if (!(this.isValid() && localInput.isValid())) {\n        return false;\n    }\n    units = normalizeUnits(units) || 'millisecond';\n    if (units === 'millisecond') {\n        return this.valueOf() < localInput.valueOf();\n    } else {\n        return this.clone().endOf(units).valueOf() < localInput.valueOf();\n    }\n}\n\nfunction isBetween(from, to, units, inclusivity) {\n    var localFrom = isMoment(from) ? from : createLocal(from),\n        localTo = isMoment(to) ? to : createLocal(to);\n    if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n        return false;\n    }\n    inclusivity = inclusivity || '()';\n    return (\n        (inclusivity[0] === '('\n            ? this.isAfter(localFrom, units)\n            : !this.isBefore(localFrom, units)) &&\n        (inclusivity[1] === ')'\n            ? this.isBefore(localTo, units)\n            : !this.isAfter(localTo, units))\n    );\n}\n\nfunction isSame(input, units) {\n    var localInput = isMoment(input) ? input : createLocal(input),\n        inputMs;\n    if (!(this.isValid() && localInput.isValid())) {\n        return false;\n    }\n    units = normalizeUnits(units) || 'millisecond';\n    if (units === 'millisecond') {\n        return this.valueOf() === localInput.valueOf();\n    } else {\n        inputMs = localInput.valueOf();\n        return (\n            this.clone().startOf(units).valueOf() <= inputMs &&\n            inputMs <= this.clone().endOf(units).valueOf()\n        );\n    }\n}\n\nfunction isSameOrAfter(input, units) {\n    return this.isSame(input, units) || this.isAfter(input, units);\n}\n\nfunction isSameOrBefore(input, units) {\n    return this.isSame(input, units) || this.isBefore(input, units);\n}\n\nfunction diff(input, units, asFloat) {\n    var that, zoneDelta, output;\n\n    if (!this.isValid()) {\n        return NaN;\n    }\n\n    that = cloneWithOffset(input, this);\n\n    if (!that.isValid()) {\n        return NaN;\n    }\n\n    zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n    units = normalizeUnits(units);\n\n    switch (units) {\n        case 'year':\n            output = monthDiff(this, that) / 12;\n            break;\n        case 'month':\n            output = monthDiff(this, that);\n            break;\n        case 'quarter':\n            output = monthDiff(this, that) / 3;\n            break;\n        case 'second':\n            output = (this - that) / 1e3;\n            break; // 1000\n        case 'minute':\n            output = (this - that) / 6e4;\n            break; // 1000 * 60\n        case 'hour':\n            output = (this - that) / 36e5;\n            break; // 1000 * 60 * 60\n        case 'day':\n            output = (this - that - zoneDelta) / 864e5;\n            break; // 1000 * 60 * 60 * 24, negate dst\n        case 'week':\n            output = (this - that - zoneDelta) / 6048e5;\n            break; // 1000 * 60 * 60 * 24 * 7, negate dst\n        default:\n            output = this - that;\n    }\n\n    return asFloat ? output : absFloor(output);\n}\n\nfunction monthDiff(a, b) {\n    if (a.date() < b.date()) {\n        // end-of-month calculations work correct when the start month has more\n        // days than the end month.\n        return -monthDiff(b, a);\n    }\n    // difference in months\n    var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n        // b is in (anchor - 1 month, anchor + 1 month)\n        anchor = a.clone().add(wholeMonthDiff, 'months'),\n        anchor2,\n        adjust;\n\n    if (b - anchor < 0) {\n        anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n        // linear across the month\n        adjust = (b - anchor) / (anchor - anchor2);\n    } else {\n        anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n        // linear across the month\n        adjust = (b - anchor) / (anchor2 - anchor);\n    }\n\n    //check for negative zero, return zero if negative zero\n    return -(wholeMonthDiff + adjust) || 0;\n}\n\nhooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\nhooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\nfunction toString() {\n    return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n}\n\nfunction toISOString(keepOffset) {\n    if (!this.isValid()) {\n        return null;\n    }\n    var utc = keepOffset !== true,\n        m = utc ? this.clone().utc() : this;\n    if (m.year() < 0 || m.year() > 9999) {\n        return formatMoment(\n            m,\n            utc\n                ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n                : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n        );\n    }\n    if (isFunction(Date.prototype.toISOString)) {\n        // native implementation is ~50x faster, use it when we can\n        if (utc) {\n            return this.toDate().toISOString();\n        } else {\n            return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n                .toISOString()\n                .replace('Z', formatMoment(m, 'Z'));\n        }\n    }\n    return formatMoment(\n        m,\n        utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n    );\n}\n\n/**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\nfunction inspect() {\n    if (!this.isValid()) {\n        return 'moment.invalid(/* ' + this._i + ' */)';\n    }\n    var func = 'moment',\n        zone = '',\n        prefix,\n        year,\n        datetime,\n        suffix;\n    if (!this.isLocal()) {\n        func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n        zone = 'Z';\n    }\n    prefix = '[' + func + '(\"]';\n    year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n    datetime = '-MM-DD[T]HH:mm:ss.SSS';\n    suffix = zone + '[\")]';\n\n    return this.format(prefix + year + datetime + suffix);\n}\n\nfunction format(inputString) {\n    if (!inputString) {\n        inputString = this.isUtc()\n            ? hooks.defaultFormatUtc\n            : hooks.defaultFormat;\n    }\n    var output = formatMoment(this, inputString);\n    return this.localeData().postformat(output);\n}\n\nfunction from(time, withoutSuffix) {\n    if (\n        this.isValid() &&\n        ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n    ) {\n        return createDuration({ to: this, from: time })\n            .locale(this.locale())\n            .humanize(!withoutSuffix);\n    } else {\n        return this.localeData().invalidDate();\n    }\n}\n\nfunction fromNow(withoutSuffix) {\n    return this.from(createLocal(), withoutSuffix);\n}\n\nfunction to(time, withoutSuffix) {\n    if (\n        this.isValid() &&\n        ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n    ) {\n        return createDuration({ from: this, to: time })\n            .locale(this.locale())\n            .humanize(!withoutSuffix);\n    } else {\n        return this.localeData().invalidDate();\n    }\n}\n\nfunction toNow(withoutSuffix) {\n    return this.to(createLocal(), withoutSuffix);\n}\n\n// If passed a locale key, it will set the locale for this\n// instance.  Otherwise, it will return the locale configuration\n// variables for this instance.\nfunction locale(key) {\n    var newLocaleData;\n\n    if (key === undefined) {\n        return this._locale._abbr;\n    } else {\n        newLocaleData = getLocale(key);\n        if (newLocaleData != null) {\n            this._locale = newLocaleData;\n        }\n        return this;\n    }\n}\n\nvar lang = deprecate(\n    'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n    function (key) {\n        if (key === undefined) {\n            return this.localeData();\n        } else {\n            return this.locale(key);\n        }\n    }\n);\n\nfunction localeData() {\n    return this._locale;\n}\n\nvar MS_PER_SECOND = 1000,\n    MS_PER_MINUTE = 60 * MS_PER_SECOND,\n    MS_PER_HOUR = 60 * MS_PER_MINUTE,\n    MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n// actual modulo - handles negative numbers (for dates before 1970):\nfunction mod$1(dividend, divisor) {\n    return ((dividend % divisor) + divisor) % divisor;\n}\n\nfunction localStartOfDate(y, m, d) {\n    // the date constructor remaps years 0-99 to 1900-1999\n    if (y < 100 && y >= 0) {\n        // preserve leap years using a full 400 year cycle, then reset\n        return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n    } else {\n        return new Date(y, m, d).valueOf();\n    }\n}\n\nfunction utcStartOfDate(y, m, d) {\n    // Date.UTC remaps years 0-99 to 1900-1999\n    if (y < 100 && y >= 0) {\n        // preserve leap years using a full 400 year cycle, then reset\n        return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n    } else {\n        return Date.UTC(y, m, d);\n    }\n}\n\nfunction startOf(units) {\n    var time, startOfDate;\n    units = normalizeUnits(units);\n    if (units === undefined || units === 'millisecond' || !this.isValid()) {\n        return this;\n    }\n\n    startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n    switch (units) {\n        case 'year':\n            time = startOfDate(this.year(), 0, 1);\n            break;\n        case 'quarter':\n            time = startOfDate(\n                this.year(),\n                this.month() - (this.month() % 3),\n                1\n            );\n            break;\n        case 'month':\n            time = startOfDate(this.year(), this.month(), 1);\n            break;\n        case 'week':\n            time = startOfDate(\n                this.year(),\n                this.month(),\n                this.date() - this.weekday()\n            );\n            break;\n        case 'isoWeek':\n            time = startOfDate(\n                this.year(),\n                this.month(),\n                this.date() - (this.isoWeekday() - 1)\n            );\n            break;\n        case 'day':\n        case 'date':\n            time = startOfDate(this.year(), this.month(), this.date());\n            break;\n        case 'hour':\n            time = this._d.valueOf();\n            time -= mod$1(\n                time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                MS_PER_HOUR\n            );\n            break;\n        case 'minute':\n            time = this._d.valueOf();\n            time -= mod$1(time, MS_PER_MINUTE);\n            break;\n        case 'second':\n            time = this._d.valueOf();\n            time -= mod$1(time, MS_PER_SECOND);\n            break;\n    }\n\n    this._d.setTime(time);\n    hooks.updateOffset(this, true);\n    return this;\n}\n\nfunction endOf(units) {\n    var time, startOfDate;\n    units = normalizeUnits(units);\n    if (units === undefined || units === 'millisecond' || !this.isValid()) {\n        return this;\n    }\n\n    startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n    switch (units) {\n        case 'year':\n            time = startOfDate(this.year() + 1, 0, 1) - 1;\n            break;\n        case 'quarter':\n            time =\n                startOfDate(\n                    this.year(),\n                    this.month() - (this.month() % 3) + 3,\n                    1\n                ) - 1;\n            break;\n        case 'month':\n            time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n            break;\n        case 'week':\n            time =\n                startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - this.weekday() + 7\n                ) - 1;\n            break;\n        case 'isoWeek':\n            time =\n                startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - (this.isoWeekday() - 1) + 7\n                ) - 1;\n            break;\n        case 'day':\n        case 'date':\n            time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n            break;\n        case 'hour':\n            time = this._d.valueOf();\n            time +=\n                MS_PER_HOUR -\n                mod$1(\n                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                    MS_PER_HOUR\n                ) -\n                1;\n            break;\n        case 'minute':\n            time = this._d.valueOf();\n            time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n            break;\n        case 'second':\n            time = this._d.valueOf();\n            time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n            break;\n    }\n\n    this._d.setTime(time);\n    hooks.updateOffset(this, true);\n    return this;\n}\n\nfunction valueOf() {\n    return this._d.valueOf() - (this._offset || 0) * 60000;\n}\n\nfunction unix() {\n    return Math.floor(this.valueOf() / 1000);\n}\n\nfunction toDate() {\n    return new Date(this.valueOf());\n}\n\nfunction toArray() {\n    var m = this;\n    return [\n        m.year(),\n        m.month(),\n        m.date(),\n        m.hour(),\n        m.minute(),\n        m.second(),\n        m.millisecond(),\n    ];\n}\n\nfunction toObject() {\n    var m = this;\n    return {\n        years: m.year(),\n        months: m.month(),\n        date: m.date(),\n        hours: m.hours(),\n        minutes: m.minutes(),\n        seconds: m.seconds(),\n        milliseconds: m.milliseconds(),\n    };\n}\n\nfunction toJSON() {\n    // new Date(NaN).toJSON() === null\n    return this.isValid() ? this.toISOString() : null;\n}\n\nfunction isValid$2() {\n    return isValid(this);\n}\n\nfunction parsingFlags() {\n    return extend({}, getParsingFlags(this));\n}\n\nfunction invalidAt() {\n    return getParsingFlags(this).overflow;\n}\n\nfunction creationData() {\n    return {\n        input: this._i,\n        format: this._f,\n        locale: this._locale,\n        isUTC: this._isUTC,\n        strict: this._strict,\n    };\n}\n\naddFormatToken('N', 0, 0, 'eraAbbr');\naddFormatToken('NN', 0, 0, 'eraAbbr');\naddFormatToken('NNN', 0, 0, 'eraAbbr');\naddFormatToken('NNNN', 0, 0, 'eraName');\naddFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\naddFormatToken('y', ['y', 1], 'yo', 'eraYear');\naddFormatToken('y', ['yy', 2], 0, 'eraYear');\naddFormatToken('y', ['yyy', 3], 0, 'eraYear');\naddFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\naddRegexToken('N', matchEraAbbr);\naddRegexToken('NN', matchEraAbbr);\naddRegexToken('NNN', matchEraAbbr);\naddRegexToken('NNNN', matchEraName);\naddRegexToken('NNNNN', matchEraNarrow);\n\naddParseToken(\n    ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n    function (input, array, config, token) {\n        var era = config._locale.erasParse(input, token, config._strict);\n        if (era) {\n            getParsingFlags(config).era = era;\n        } else {\n            getParsingFlags(config).invalidEra = input;\n        }\n    }\n);\n\naddRegexToken('y', matchUnsigned);\naddRegexToken('yy', matchUnsigned);\naddRegexToken('yyy', matchUnsigned);\naddRegexToken('yyyy', matchUnsigned);\naddRegexToken('yo', matchEraYearOrdinal);\n\naddParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\naddParseToken(['yo'], function (input, array, config, token) {\n    var match;\n    if (config._locale._eraYearOrdinalRegex) {\n        match = input.match(config._locale._eraYearOrdinalRegex);\n    }\n\n    if (config._locale.eraYearOrdinalParse) {\n        array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n    } else {\n        array[YEAR] = parseInt(input, 10);\n    }\n});\n\nfunction localeEras(m, format) {\n    var i,\n        l,\n        date,\n        eras = this._eras || getLocale('en')._eras;\n    for (i = 0, l = eras.length; i < l; ++i) {\n        switch (typeof eras[i].since) {\n            case 'string':\n                // truncate time\n                date = hooks(eras[i].since).startOf('day');\n                eras[i].since = date.valueOf();\n                break;\n        }\n\n        switch (typeof eras[i].until) {\n            case 'undefined':\n                eras[i].until = +Infinity;\n                break;\n            case 'string':\n                // truncate time\n                date = hooks(eras[i].until).startOf('day').valueOf();\n                eras[i].until = date.valueOf();\n                break;\n        }\n    }\n    return eras;\n}\n\nfunction localeErasParse(eraName, format, strict) {\n    var i,\n        l,\n        eras = this.eras(),\n        name,\n        abbr,\n        narrow;\n    eraName = eraName.toUpperCase();\n\n    for (i = 0, l = eras.length; i < l; ++i) {\n        name = eras[i].name.toUpperCase();\n        abbr = eras[i].abbr.toUpperCase();\n        narrow = eras[i].narrow.toUpperCase();\n\n        if (strict) {\n            switch (format) {\n                case 'N':\n                case 'NN':\n                case 'NNN':\n                    if (abbr === eraName) {\n                        return eras[i];\n                    }\n                    break;\n\n                case 'NNNN':\n                    if (name === eraName) {\n                        return eras[i];\n                    }\n                    break;\n\n                case 'NNNNN':\n                    if (narrow === eraName) {\n                        return eras[i];\n                    }\n                    break;\n            }\n        } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n            return eras[i];\n        }\n    }\n}\n\nfunction localeErasConvertYear(era, year) {\n    var dir = era.since <= era.until ? +1 : -1;\n    if (year === undefined) {\n        return hooks(era.since).year();\n    } else {\n        return hooks(era.since).year() + (year - era.offset) * dir;\n    }\n}\n\nfunction getEraName() {\n    var i,\n        l,\n        val,\n        eras = this.localeData().eras();\n    for (i = 0, l = eras.length; i < l; ++i) {\n        // truncate time\n        val = this.clone().startOf('day').valueOf();\n\n        if (eras[i].since <= val && val <= eras[i].until) {\n            return eras[i].name;\n        }\n        if (eras[i].until <= val && val <= eras[i].since) {\n            return eras[i].name;\n        }\n    }\n\n    return '';\n}\n\nfunction getEraNarrow() {\n    var i,\n        l,\n        val,\n        eras = this.localeData().eras();\n    for (i = 0, l = eras.length; i < l; ++i) {\n        // truncate time\n        val = this.clone().startOf('day').valueOf();\n\n        if (eras[i].since <= val && val <= eras[i].until) {\n            return eras[i].narrow;\n        }\n        if (eras[i].until <= val && val <= eras[i].since) {\n            return eras[i].narrow;\n        }\n    }\n\n    return '';\n}\n\nfunction getEraAbbr() {\n    var i,\n        l,\n        val,\n        eras = this.localeData().eras();\n    for (i = 0, l = eras.length; i < l; ++i) {\n        // truncate time\n        val = this.clone().startOf('day').valueOf();\n\n        if (eras[i].since <= val && val <= eras[i].until) {\n            return eras[i].abbr;\n        }\n        if (eras[i].until <= val && val <= eras[i].since) {\n            return eras[i].abbr;\n        }\n    }\n\n    return '';\n}\n\nfunction getEraYear() {\n    var i,\n        l,\n        dir,\n        val,\n        eras = this.localeData().eras();\n    for (i = 0, l = eras.length; i < l; ++i) {\n        dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n        // truncate time\n        val = this.clone().startOf('day').valueOf();\n\n        if (\n            (eras[i].since <= val && val <= eras[i].until) ||\n            (eras[i].until <= val && val <= eras[i].since)\n        ) {\n            return (\n                (this.year() - hooks(eras[i].since).year()) * dir +\n                eras[i].offset\n            );\n        }\n    }\n\n    return this.year();\n}\n\nfunction erasNameRegex(isStrict) {\n    if (!hasOwnProp(this, '_erasNameRegex')) {\n        computeErasParse.call(this);\n    }\n    return isStrict ? this._erasNameRegex : this._erasRegex;\n}\n\nfunction erasAbbrRegex(isStrict) {\n    if (!hasOwnProp(this, '_erasAbbrRegex')) {\n        computeErasParse.call(this);\n    }\n    return isStrict ? this._erasAbbrRegex : this._erasRegex;\n}\n\nfunction erasNarrowRegex(isStrict) {\n    if (!hasOwnProp(this, '_erasNarrowRegex')) {\n        computeErasParse.call(this);\n    }\n    return isStrict ? this._erasNarrowRegex : this._erasRegex;\n}\n\nfunction matchEraAbbr(isStrict, locale) {\n    return locale.erasAbbrRegex(isStrict);\n}\n\nfunction matchEraName(isStrict, locale) {\n    return locale.erasNameRegex(isStrict);\n}\n\nfunction matchEraNarrow(isStrict, locale) {\n    return locale.erasNarrowRegex(isStrict);\n}\n\nfunction matchEraYearOrdinal(isStrict, locale) {\n    return locale._eraYearOrdinalRegex || matchUnsigned;\n}\n\nfunction computeErasParse() {\n    var abbrPieces = [],\n        namePieces = [],\n        narrowPieces = [],\n        mixedPieces = [],\n        i,\n        l,\n        erasName,\n        erasAbbr,\n        erasNarrow,\n        eras = this.eras();\n\n    for (i = 0, l = eras.length; i < l; ++i) {\n        erasName = regexEscape(eras[i].name);\n        erasAbbr = regexEscape(eras[i].abbr);\n        erasNarrow = regexEscape(eras[i].narrow);\n\n        namePieces.push(erasName);\n        abbrPieces.push(erasAbbr);\n        narrowPieces.push(erasNarrow);\n        mixedPieces.push(erasName);\n        mixedPieces.push(erasAbbr);\n        mixedPieces.push(erasNarrow);\n    }\n\n    this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n    this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n    this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n    this._erasNarrowRegex = new RegExp(\n        '^(' + narrowPieces.join('|') + ')',\n        'i'\n    );\n}\n\n// FORMATTING\n\naddFormatToken(0, ['gg', 2], 0, function () {\n    return this.weekYear() % 100;\n});\n\naddFormatToken(0, ['GG', 2], 0, function () {\n    return this.isoWeekYear() % 100;\n});\n\nfunction addWeekYearFormatToken(token, getter) {\n    addFormatToken(0, [token, token.length], 0, getter);\n}\n\naddWeekYearFormatToken('gggg', 'weekYear');\naddWeekYearFormatToken('ggggg', 'weekYear');\naddWeekYearFormatToken('GGGG', 'isoWeekYear');\naddWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n// ALIASES\n\n// PARSING\n\naddRegexToken('G', matchSigned);\naddRegexToken('g', matchSigned);\naddRegexToken('GG', match1to2, match2);\naddRegexToken('gg', match1to2, match2);\naddRegexToken('GGGG', match1to4, match4);\naddRegexToken('gggg', match1to4, match4);\naddRegexToken('GGGGG', match1to6, match6);\naddRegexToken('ggggg', match1to6, match6);\n\naddWeekParseToken(\n    ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n    function (input, week, config, token) {\n        week[token.substr(0, 2)] = toInt(input);\n    }\n);\n\naddWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n    week[token] = hooks.parseTwoDigitYear(input);\n});\n\n// MOMENTS\n\nfunction getSetWeekYear(input) {\n    return getSetWeekYearHelper.call(\n        this,\n        input,\n        this.week(),\n        this.weekday() + this.localeData()._week.dow,\n        this.localeData()._week.dow,\n        this.localeData()._week.doy\n    );\n}\n\nfunction getSetISOWeekYear(input) {\n    return getSetWeekYearHelper.call(\n        this,\n        input,\n        this.isoWeek(),\n        this.isoWeekday(),\n        1,\n        4\n    );\n}\n\nfunction getISOWeeksInYear() {\n    return weeksInYear(this.year(), 1, 4);\n}\n\nfunction getISOWeeksInISOWeekYear() {\n    return weeksInYear(this.isoWeekYear(), 1, 4);\n}\n\nfunction getWeeksInYear() {\n    var weekInfo = this.localeData()._week;\n    return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n}\n\nfunction getWeeksInWeekYear() {\n    var weekInfo = this.localeData()._week;\n    return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n}\n\nfunction getSetWeekYearHelper(input, week, weekday, dow, doy) {\n    var weeksTarget;\n    if (input == null) {\n        return weekOfYear(this, dow, doy).year;\n    } else {\n        weeksTarget = weeksInYear(input, dow, doy);\n        if (week > weeksTarget) {\n            week = weeksTarget;\n        }\n        return setWeekAll.call(this, input, week, weekday, dow, doy);\n    }\n}\n\nfunction setWeekAll(weekYear, week, weekday, dow, doy) {\n    var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n        date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n    this.year(date.getUTCFullYear());\n    this.month(date.getUTCMonth());\n    this.date(date.getUTCDate());\n    return this;\n}\n\n// FORMATTING\n\naddFormatToken('Q', 0, 'Qo', 'quarter');\n\n// PARSING\n\naddRegexToken('Q', match1);\naddParseToken('Q', function (input, array) {\n    array[MONTH] = (toInt(input) - 1) * 3;\n});\n\n// MOMENTS\n\nfunction getSetQuarter(input) {\n    return input == null\n        ? Math.ceil((this.month() + 1) / 3)\n        : this.month((input - 1) * 3 + (this.month() % 3));\n}\n\n// FORMATTING\n\naddFormatToken('D', ['DD', 2], 'Do', 'date');\n\n// PARSING\n\naddRegexToken('D', match1to2, match1to2NoLeadingZero);\naddRegexToken('DD', match1to2, match2);\naddRegexToken('Do', function (isStrict, locale) {\n    // TODO: Remove \"ordinalParse\" fallback in next major release.\n    return isStrict\n        ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n        : locale._dayOfMonthOrdinalParseLenient;\n});\n\naddParseToken(['D', 'DD'], DATE);\naddParseToken('Do', function (input, array) {\n    array[DATE] = toInt(input.match(match1to2)[0]);\n});\n\n// MOMENTS\n\nvar getSetDayOfMonth = makeGetSet('Date', true);\n\n// FORMATTING\n\naddFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n// PARSING\n\naddRegexToken('DDD', match1to3);\naddRegexToken('DDDD', match3);\naddParseToken(['DDD', 'DDDD'], function (input, array, config) {\n    config._dayOfYear = toInt(input);\n});\n\n// HELPERS\n\n// MOMENTS\n\nfunction getSetDayOfYear(input) {\n    var dayOfYear =\n        Math.round(\n            (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n        ) + 1;\n    return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n}\n\n// FORMATTING\n\naddFormatToken('m', ['mm', 2], 0, 'minute');\n\n// PARSING\n\naddRegexToken('m', match1to2, match1to2HasZero);\naddRegexToken('mm', match1to2, match2);\naddParseToken(['m', 'mm'], MINUTE);\n\n// MOMENTS\n\nvar getSetMinute = makeGetSet('Minutes', false);\n\n// FORMATTING\n\naddFormatToken('s', ['ss', 2], 0, 'second');\n\n// PARSING\n\naddRegexToken('s', match1to2, match1to2HasZero);\naddRegexToken('ss', match1to2, match2);\naddParseToken(['s', 'ss'], SECOND);\n\n// MOMENTS\n\nvar getSetSecond = makeGetSet('Seconds', false);\n\n// FORMATTING\n\naddFormatToken('S', 0, 0, function () {\n    return ~~(this.millisecond() / 100);\n});\n\naddFormatToken(0, ['SS', 2], 0, function () {\n    return ~~(this.millisecond() / 10);\n});\n\naddFormatToken(0, ['SSS', 3], 0, 'millisecond');\naddFormatToken(0, ['SSSS', 4], 0, function () {\n    return this.millisecond() * 10;\n});\naddFormatToken(0, ['SSSSS', 5], 0, function () {\n    return this.millisecond() * 100;\n});\naddFormatToken(0, ['SSSSSS', 6], 0, function () {\n    return this.millisecond() * 1000;\n});\naddFormatToken(0, ['SSSSSSS', 7], 0, function () {\n    return this.millisecond() * 10000;\n});\naddFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n    return this.millisecond() * 100000;\n});\naddFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n    return this.millisecond() * 1000000;\n});\n\n// PARSING\n\naddRegexToken('S', match1to3, match1);\naddRegexToken('SS', match1to3, match2);\naddRegexToken('SSS', match1to3, match3);\n\nvar token, getSetMillisecond;\nfor (token = 'SSSS'; token.length <= 9; token += 'S') {\n    addRegexToken(token, matchUnsigned);\n}\n\nfunction parseMs(input, array) {\n    array[MILLISECOND] = toInt(('0.' + input) * 1000);\n}\n\nfor (token = 'S'; token.length <= 9; token += 'S') {\n    addParseToken(token, parseMs);\n}\n\ngetSetMillisecond = makeGetSet('Milliseconds', false);\n\n// FORMATTING\n\naddFormatToken('z', 0, 0, 'zoneAbbr');\naddFormatToken('zz', 0, 0, 'zoneName');\n\n// MOMENTS\n\nfunction getZoneAbbr() {\n    return this._isUTC ? 'UTC' : '';\n}\n\nfunction getZoneName() {\n    return this._isUTC ? 'Coordinated Universal Time' : '';\n}\n\nvar proto = Moment.prototype;\n\nproto.add = add;\nproto.calendar = calendar$1;\nproto.clone = clone;\nproto.diff = diff;\nproto.endOf = endOf;\nproto.format = format;\nproto.from = from;\nproto.fromNow = fromNow;\nproto.to = to;\nproto.toNow = toNow;\nproto.get = stringGet;\nproto.invalidAt = invalidAt;\nproto.isAfter = isAfter;\nproto.isBefore = isBefore;\nproto.isBetween = isBetween;\nproto.isSame = isSame;\nproto.isSameOrAfter = isSameOrAfter;\nproto.isSameOrBefore = isSameOrBefore;\nproto.isValid = isValid$2;\nproto.lang = lang;\nproto.locale = locale;\nproto.localeData = localeData;\nproto.max = prototypeMax;\nproto.min = prototypeMin;\nproto.parsingFlags = parsingFlags;\nproto.set = stringSet;\nproto.startOf = startOf;\nproto.subtract = subtract;\nproto.toArray = toArray;\nproto.toObject = toObject;\nproto.toDate = toDate;\nproto.toISOString = toISOString;\nproto.inspect = inspect;\nif (typeof Symbol !== 'undefined' && Symbol.for != null) {\n    proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n        return 'Moment<' + this.format() + '>';\n    };\n}\nproto.toJSON = toJSON;\nproto.toString = toString;\nproto.unix = unix;\nproto.valueOf = valueOf;\nproto.creationData = creationData;\nproto.eraName = getEraName;\nproto.eraNarrow = getEraNarrow;\nproto.eraAbbr = getEraAbbr;\nproto.eraYear = getEraYear;\nproto.year = getSetYear;\nproto.isLeapYear = getIsLeapYear;\nproto.weekYear = getSetWeekYear;\nproto.isoWeekYear = getSetISOWeekYear;\nproto.quarter = proto.quarters = getSetQuarter;\nproto.month = getSetMonth;\nproto.daysInMonth = getDaysInMonth;\nproto.week = proto.weeks = getSetWeek;\nproto.isoWeek = proto.isoWeeks = getSetISOWeek;\nproto.weeksInYear = getWeeksInYear;\nproto.weeksInWeekYear = getWeeksInWeekYear;\nproto.isoWeeksInYear = getISOWeeksInYear;\nproto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\nproto.date = getSetDayOfMonth;\nproto.day = proto.days = getSetDayOfWeek;\nproto.weekday = getSetLocaleDayOfWeek;\nproto.isoWeekday = getSetISODayOfWeek;\nproto.dayOfYear = getSetDayOfYear;\nproto.hour = proto.hours = getSetHour;\nproto.minute = proto.minutes = getSetMinute;\nproto.second = proto.seconds = getSetSecond;\nproto.millisecond = proto.milliseconds = getSetMillisecond;\nproto.utcOffset = getSetOffset;\nproto.utc = setOffsetToUTC;\nproto.local = setOffsetToLocal;\nproto.parseZone = setOffsetToParsedOffset;\nproto.hasAlignedHourOffset = hasAlignedHourOffset;\nproto.isDST = isDaylightSavingTime;\nproto.isLocal = isLocal;\nproto.isUtcOffset = isUtcOffset;\nproto.isUtc = isUtc;\nproto.isUTC = isUtc;\nproto.zoneAbbr = getZoneAbbr;\nproto.zoneName = getZoneName;\nproto.dates = deprecate(\n    'dates accessor is deprecated. Use date instead.',\n    getSetDayOfMonth\n);\nproto.months = deprecate(\n    'months accessor is deprecated. Use month instead',\n    getSetMonth\n);\nproto.years = deprecate(\n    'years accessor is deprecated. Use year instead',\n    getSetYear\n);\nproto.zone = deprecate(\n    'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n    getSetZone\n);\nproto.isDSTShifted = deprecate(\n    'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n    isDaylightSavingTimeShifted\n);\n\nfunction createUnix(input) {\n    return createLocal(input * 1000);\n}\n\nfunction createInZone() {\n    return createLocal.apply(null, arguments).parseZone();\n}\n\nfunction preParsePostFormat(string) {\n    return string;\n}\n\nvar proto$1 = Locale.prototype;\n\nproto$1.calendar = calendar;\nproto$1.longDateFormat = longDateFormat;\nproto$1.invalidDate = invalidDate;\nproto$1.ordinal = ordinal;\nproto$1.preparse = preParsePostFormat;\nproto$1.postformat = preParsePostFormat;\nproto$1.relativeTime = relativeTime;\nproto$1.pastFuture = pastFuture;\nproto$1.set = set;\nproto$1.eras = localeEras;\nproto$1.erasParse = localeErasParse;\nproto$1.erasConvertYear = localeErasConvertYear;\nproto$1.erasAbbrRegex = erasAbbrRegex;\nproto$1.erasNameRegex = erasNameRegex;\nproto$1.erasNarrowRegex = erasNarrowRegex;\n\nproto$1.months = localeMonths;\nproto$1.monthsShort = localeMonthsShort;\nproto$1.monthsParse = localeMonthsParse;\nproto$1.monthsRegex = monthsRegex;\nproto$1.monthsShortRegex = monthsShortRegex;\nproto$1.week = localeWeek;\nproto$1.firstDayOfYear = localeFirstDayOfYear;\nproto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\nproto$1.weekdays = localeWeekdays;\nproto$1.weekdaysMin = localeWeekdaysMin;\nproto$1.weekdaysShort = localeWeekdaysShort;\nproto$1.weekdaysParse = localeWeekdaysParse;\n\nproto$1.weekdaysRegex = weekdaysRegex;\nproto$1.weekdaysShortRegex = weekdaysShortRegex;\nproto$1.weekdaysMinRegex = weekdaysMinRegex;\n\nproto$1.isPM = localeIsPM;\nproto$1.meridiem = localeMeridiem;\n\nfunction get$1(format, index, field, setter) {\n    var locale = getLocale(),\n        utc = createUTC().set(setter, index);\n    return locale[field](utc, format);\n}\n\nfunction listMonthsImpl(format, index, field) {\n    if (isNumber(format)) {\n        index = format;\n        format = undefined;\n    }\n\n    format = format || '';\n\n    if (index != null) {\n        return get$1(format, index, field, 'month');\n    }\n\n    var i,\n        out = [];\n    for (i = 0; i < 12; i++) {\n        out[i] = get$1(format, i, field, 'month');\n    }\n    return out;\n}\n\n// ()\n// (5)\n// (fmt, 5)\n// (fmt)\n// (true)\n// (true, 5)\n// (true, fmt, 5)\n// (true, fmt)\nfunction listWeekdaysImpl(localeSorted, format, index, field) {\n    if (typeof localeSorted === 'boolean') {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n    } else {\n        format = localeSorted;\n        index = format;\n        localeSorted = false;\n\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n    }\n\n    var locale = getLocale(),\n        shift = localeSorted ? locale._week.dow : 0,\n        i,\n        out = [];\n\n    if (index != null) {\n        return get$1(format, (index + shift) % 7, field, 'day');\n    }\n\n    for (i = 0; i < 7; i++) {\n        out[i] = get$1(format, (i + shift) % 7, field, 'day');\n    }\n    return out;\n}\n\nfunction listMonths(format, index) {\n    return listMonthsImpl(format, index, 'months');\n}\n\nfunction listMonthsShort(format, index) {\n    return listMonthsImpl(format, index, 'monthsShort');\n}\n\nfunction listWeekdays(localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n}\n\nfunction listWeekdaysShort(localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n}\n\nfunction listWeekdaysMin(localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n}\n\ngetSetGlobalLocale('en', {\n    eras: [\n        {\n            since: '0001-01-01',\n            until: +Infinity,\n            offset: 1,\n            name: 'Anno Domini',\n            narrow: 'AD',\n            abbr: 'AD',\n        },\n        {\n            since: '0000-12-31',\n            until: -Infinity,\n            offset: 1,\n            name: 'Before Christ',\n            narrow: 'BC',\n            abbr: 'BC',\n        },\n    ],\n    dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n    ordinal: function (number) {\n        var b = number % 10,\n            output =\n                toInt((number % 100) / 10) === 1\n                    ? 'th'\n                    : b === 1\n                      ? 'st'\n                      : b === 2\n                        ? 'nd'\n                        : b === 3\n                          ? 'rd'\n                          : 'th';\n        return number + output;\n    },\n});\n\n// Side effect imports\n\nhooks.lang = deprecate(\n    'moment.lang is deprecated. Use moment.locale instead.',\n    getSetGlobalLocale\n);\nhooks.langData = deprecate(\n    'moment.langData is deprecated. Use moment.localeData instead.',\n    getLocale\n);\n\nvar mathAbs = Math.abs;\n\nfunction abs() {\n    var data = this._data;\n\n    this._milliseconds = mathAbs(this._milliseconds);\n    this._days = mathAbs(this._days);\n    this._months = mathAbs(this._months);\n\n    data.milliseconds = mathAbs(data.milliseconds);\n    data.seconds = mathAbs(data.seconds);\n    data.minutes = mathAbs(data.minutes);\n    data.hours = mathAbs(data.hours);\n    data.months = mathAbs(data.months);\n    data.years = mathAbs(data.years);\n\n    return this;\n}\n\nfunction addSubtract$1(duration, input, value, direction) {\n    var other = createDuration(input, value);\n\n    duration._milliseconds += direction * other._milliseconds;\n    duration._days += direction * other._days;\n    duration._months += direction * other._months;\n\n    return duration._bubble();\n}\n\n// supports only 2.0-style add(1, 's') or add(duration)\nfunction add$1(input, value) {\n    return addSubtract$1(this, input, value, 1);\n}\n\n// supports only 2.0-style subtract(1, 's') or subtract(duration)\nfunction subtract$1(input, value) {\n    return addSubtract$1(this, input, value, -1);\n}\n\nfunction absCeil(number) {\n    if (number < 0) {\n        return Math.floor(number);\n    } else {\n        return Math.ceil(number);\n    }\n}\n\nfunction bubble() {\n    var milliseconds = this._milliseconds,\n        days = this._days,\n        months = this._months,\n        data = this._data,\n        seconds,\n        minutes,\n        hours,\n        years,\n        monthsFromDays;\n\n    // if we have a mix of positive and negative values, bubble down first\n    // check: https://github.com/moment/moment/issues/2166\n    if (\n        !(\n            (milliseconds >= 0 && days >= 0 && months >= 0) ||\n            (milliseconds <= 0 && days <= 0 && months <= 0)\n        )\n    ) {\n        milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n        days = 0;\n        months = 0;\n    }\n\n    // The following code bubbles up values, see the tests for\n    // examples of what that means.\n    data.milliseconds = milliseconds % 1000;\n\n    seconds = absFloor(milliseconds / 1000);\n    data.seconds = seconds % 60;\n\n    minutes = absFloor(seconds / 60);\n    data.minutes = minutes % 60;\n\n    hours = absFloor(minutes / 60);\n    data.hours = hours % 24;\n\n    days += absFloor(hours / 24);\n\n    // convert days to months\n    monthsFromDays = absFloor(daysToMonths(days));\n    months += monthsFromDays;\n    days -= absCeil(monthsToDays(monthsFromDays));\n\n    // 12 months -> 1 year\n    years = absFloor(months / 12);\n    months %= 12;\n\n    data.days = days;\n    data.months = months;\n    data.years = years;\n\n    return this;\n}\n\nfunction daysToMonths(days) {\n    // 400 years have 146097 days (taking into account leap year rules)\n    // 400 years have 12 months === 4800\n    return (days * 4800) / 146097;\n}\n\nfunction monthsToDays(months) {\n    // the reverse of daysToMonths\n    return (months * 146097) / 4800;\n}\n\nfunction as(units) {\n    if (!this.isValid()) {\n        return NaN;\n    }\n    var days,\n        months,\n        milliseconds = this._milliseconds;\n\n    units = normalizeUnits(units);\n\n    if (units === 'month' || units === 'quarter' || units === 'year') {\n        days = this._days + milliseconds / 864e5;\n        months = this._months + daysToMonths(days);\n        switch (units) {\n            case 'month':\n                return months;\n            case 'quarter':\n                return months / 3;\n            case 'year':\n                return months / 12;\n        }\n    } else {\n        // handle milliseconds separately because of floating point math errors (issue #1867)\n        days = this._days + Math.round(monthsToDays(this._months));\n        switch (units) {\n            case 'week':\n                return days / 7 + milliseconds / 6048e5;\n            case 'day':\n                return days + milliseconds / 864e5;\n            case 'hour':\n                return days * 24 + milliseconds / 36e5;\n            case 'minute':\n                return days * 1440 + milliseconds / 6e4;\n            case 'second':\n                return days * 86400 + milliseconds / 1000;\n            // Math.floor prevents floating point math errors here\n            case 'millisecond':\n                return Math.floor(days * 864e5) + milliseconds;\n            default:\n                throw new Error('Unknown unit ' + units);\n        }\n    }\n}\n\nfunction makeAs(alias) {\n    return function () {\n        return this.as(alias);\n    };\n}\n\nvar asMilliseconds = makeAs('ms'),\n    asSeconds = makeAs('s'),\n    asMinutes = makeAs('m'),\n    asHours = makeAs('h'),\n    asDays = makeAs('d'),\n    asWeeks = makeAs('w'),\n    asMonths = makeAs('M'),\n    asQuarters = makeAs('Q'),\n    asYears = makeAs('y'),\n    valueOf$1 = asMilliseconds;\n\nfunction clone$1() {\n    return createDuration(this);\n}\n\nfunction get$2(units) {\n    units = normalizeUnits(units);\n    return this.isValid() ? this[units + 's']() : NaN;\n}\n\nfunction makeGetter(name) {\n    return function () {\n        return this.isValid() ? this._data[name] : NaN;\n    };\n}\n\nvar milliseconds = makeGetter('milliseconds'),\n    seconds = makeGetter('seconds'),\n    minutes = makeGetter('minutes'),\n    hours = makeGetter('hours'),\n    days = makeGetter('days'),\n    months = makeGetter('months'),\n    years = makeGetter('years');\n\nfunction weeks() {\n    return absFloor(this.days() / 7);\n}\n\nvar round = Math.round,\n    thresholds = {\n        ss: 44, // a few seconds to seconds\n        s: 45, // seconds to minute\n        m: 45, // minutes to hour\n        h: 22, // hours to day\n        d: 26, // days to month/week\n        w: null, // weeks to month\n        M: 11, // months to year\n    };\n\n// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\nfunction substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n    return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n}\n\nfunction relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n    var duration = createDuration(posNegDuration).abs(),\n        seconds = round(duration.as('s')),\n        minutes = round(duration.as('m')),\n        hours = round(duration.as('h')),\n        days = round(duration.as('d')),\n        months = round(duration.as('M')),\n        weeks = round(duration.as('w')),\n        years = round(duration.as('y')),\n        a =\n            (seconds <= thresholds.ss && ['s', seconds]) ||\n            (seconds < thresholds.s && ['ss', seconds]) ||\n            (minutes <= 1 && ['m']) ||\n            (minutes < thresholds.m && ['mm', minutes]) ||\n            (hours <= 1 && ['h']) ||\n            (hours < thresholds.h && ['hh', hours]) ||\n            (days <= 1 && ['d']) ||\n            (days < thresholds.d && ['dd', days]);\n\n    if (thresholds.w != null) {\n        a =\n            a ||\n            (weeks <= 1 && ['w']) ||\n            (weeks < thresholds.w && ['ww', weeks]);\n    }\n    a = a ||\n        (months <= 1 && ['M']) ||\n        (months < thresholds.M && ['MM', months]) ||\n        (years <= 1 && ['y']) || ['yy', years];\n\n    a[2] = withoutSuffix;\n    a[3] = +posNegDuration > 0;\n    a[4] = locale;\n    return substituteTimeAgo.apply(null, a);\n}\n\n// This function allows you to set the rounding function for relative time strings\nfunction getSetRelativeTimeRounding(roundingFunction) {\n    if (roundingFunction === undefined) {\n        return round;\n    }\n    if (typeof roundingFunction === 'function') {\n        round = roundingFunction;\n        return true;\n    }\n    return false;\n}\n\n// This function allows you to set a threshold for relative time strings\nfunction getSetRelativeTimeThreshold(threshold, limit) {\n    if (thresholds[threshold] === undefined) {\n        return false;\n    }\n    if (limit === undefined) {\n        return thresholds[threshold];\n    }\n    thresholds[threshold] = limit;\n    if (threshold === 's') {\n        thresholds.ss = limit - 1;\n    }\n    return true;\n}\n\nfunction humanize(argWithSuffix, argThresholds) {\n    if (!this.isValid()) {\n        return this.localeData().invalidDate();\n    }\n\n    var withSuffix = false,\n        th = thresholds,\n        locale,\n        output;\n\n    if (typeof argWithSuffix === 'object') {\n        argThresholds = argWithSuffix;\n        argWithSuffix = false;\n    }\n    if (typeof argWithSuffix === 'boolean') {\n        withSuffix = argWithSuffix;\n    }\n    if (typeof argThresholds === 'object') {\n        th = Object.assign({}, thresholds, argThresholds);\n        if (argThresholds.s != null && argThresholds.ss == null) {\n            th.ss = argThresholds.s - 1;\n        }\n    }\n\n    locale = this.localeData();\n    output = relativeTime$1(this, !withSuffix, th, locale);\n\n    if (withSuffix) {\n        output = locale.pastFuture(+this, output);\n    }\n\n    return locale.postformat(output);\n}\n\nvar abs$1 = Math.abs;\n\nfunction sign(x) {\n    return (x > 0) - (x < 0) || +x;\n}\n\nfunction toISOString$1() {\n    // for ISO strings we do not use the normal bubbling rules:\n    //  * milliseconds bubble up until they become hours\n    //  * days do not bubble at all\n    //  * months bubble up until they become years\n    // This is because there is no context-free conversion between hours and days\n    // (think of clock changes)\n    // and also not between days and months (28-31 days per month)\n    if (!this.isValid()) {\n        return this.localeData().invalidDate();\n    }\n\n    var seconds = abs$1(this._milliseconds) / 1000,\n        days = abs$1(this._days),\n        months = abs$1(this._months),\n        minutes,\n        hours,\n        years,\n        s,\n        total = this.asSeconds(),\n        totalSign,\n        ymSign,\n        daysSign,\n        hmsSign;\n\n    if (!total) {\n        // this is the same as C#'s (Noda) and python (isodate)...\n        // but not other JS (goog.date)\n        return 'P0D';\n    }\n\n    // 3600 seconds -> 60 minutes -> 1 hour\n    minutes = absFloor(seconds / 60);\n    hours = absFloor(minutes / 60);\n    seconds %= 60;\n    minutes %= 60;\n\n    // 12 months -> 1 year\n    years = absFloor(months / 12);\n    months %= 12;\n\n    // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n    s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n    totalSign = total < 0 ? '-' : '';\n    ymSign = sign(this._months) !== sign(total) ? '-' : '';\n    daysSign = sign(this._days) !== sign(total) ? '-' : '';\n    hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n    return (\n        totalSign +\n        'P' +\n        (years ? ymSign + years + 'Y' : '') +\n        (months ? ymSign + months + 'M' : '') +\n        (days ? daysSign + days + 'D' : '') +\n        (hours || minutes || seconds ? 'T' : '') +\n        (hours ? hmsSign + hours + 'H' : '') +\n        (minutes ? hmsSign + minutes + 'M' : '') +\n        (seconds ? hmsSign + s + 'S' : '')\n    );\n}\n\nvar proto$2 = Duration.prototype;\n\nproto$2.isValid = isValid$1;\nproto$2.abs = abs;\nproto$2.add = add$1;\nproto$2.subtract = subtract$1;\nproto$2.as = as;\nproto$2.asMilliseconds = asMilliseconds;\nproto$2.asSeconds = asSeconds;\nproto$2.asMinutes = asMinutes;\nproto$2.asHours = asHours;\nproto$2.asDays = asDays;\nproto$2.asWeeks = asWeeks;\nproto$2.asMonths = asMonths;\nproto$2.asQuarters = asQuarters;\nproto$2.asYears = asYears;\nproto$2.valueOf = valueOf$1;\nproto$2._bubble = bubble;\nproto$2.clone = clone$1;\nproto$2.get = get$2;\nproto$2.milliseconds = milliseconds;\nproto$2.seconds = seconds;\nproto$2.minutes = minutes;\nproto$2.hours = hours;\nproto$2.days = days;\nproto$2.weeks = weeks;\nproto$2.months = months;\nproto$2.years = years;\nproto$2.humanize = humanize;\nproto$2.toISOString = toISOString$1;\nproto$2.toString = toISOString$1;\nproto$2.toJSON = toISOString$1;\nproto$2.locale = locale;\nproto$2.localeData = localeData;\n\nproto$2.toIsoString = deprecate(\n    'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n    toISOString$1\n);\nproto$2.lang = lang;\n\n// FORMATTING\n\naddFormatToken('X', 0, 0, 'unix');\naddFormatToken('x', 0, 0, 'valueOf');\n\n// PARSING\n\naddRegexToken('x', matchSigned);\naddRegexToken('X', matchTimestamp);\naddParseToken('X', function (input, array, config) {\n    config._d = new Date(parseFloat(input) * 1000);\n});\naddParseToken('x', function (input, array, config) {\n    config._d = new Date(toInt(input));\n});\n\n//! moment.js\n\nhooks.version = '2.30.1';\n\nsetHookCallback(createLocal);\n\nhooks.fn = proto;\nhooks.min = min;\nhooks.max = max;\nhooks.now = now;\nhooks.utc = createUTC;\nhooks.unix = createUnix;\nhooks.months = listMonths;\nhooks.isDate = isDate;\nhooks.locale = getSetGlobalLocale;\nhooks.invalid = createInvalid;\nhooks.duration = createDuration;\nhooks.isMoment = isMoment;\nhooks.weekdays = listWeekdays;\nhooks.parseZone = createInZone;\nhooks.localeData = getLocale;\nhooks.isDuration = isDuration;\nhooks.monthsShort = listMonthsShort;\nhooks.weekdaysMin = listWeekdaysMin;\nhooks.defineLocale = defineLocale;\nhooks.updateLocale = updateLocale;\nhooks.locales = listLocales;\nhooks.weekdaysShort = listWeekdaysShort;\nhooks.normalizeUnits = normalizeUnits;\nhooks.relativeTimeRounding = getSetRelativeTimeRounding;\nhooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\nhooks.calendarFormat = getCalendarFormat;\nhooks.prototype = proto;\n\n// currently HTML5 input type only supports 24-hour formats\nhooks.HTML5_FMT = {\n    DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n    DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n    DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n    DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n    TIME: 'HH:mm', // <input type=\"time\" />\n    TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n    TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n    WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n    MONTH: 'YYYY-MM', // <input type=\"month\" />\n};\n\nexport default hooks;\n","import { get } from 'svelte/store';\nimport { locale as appLocale } from 'svelte-i18n';\n\n/**\n * @import { InternalI18nOptions, InternalLocaleCode, } from '$lib/types/private';\n * @import { LocaleCode } from '$lib/types/public';\n */\n\n/**\n * Get the canonical locale of the given locale that can be used for various `Intl` methods.\n * @param {InternalLocaleCode} locale Locale.\n * @returns {LocaleCode | undefined} Locale or `undefined` if not determined.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#locales_argument\n */\nexport const getCanonicalLocale = (locale) => {\n  let canonicalLocale = undefined;\n\n  if (locale !== '_default') {\n    try {\n      [canonicalLocale] = Intl.getCanonicalLocales(locale);\n    } catch {\n      //\n    }\n  }\n\n  return canonicalLocale;\n};\n\n/**\n * Translate the given locale code in the application UI locale.\n * @param {InternalLocaleCode} locale Locale code like `en`.\n * @returns {string} Locale label like `English`. If the formatter raises an error, just return the\n * locale code as is.\n */\nexport const getLocaleLabel = (locale) => {\n  const canonicalLocale = getCanonicalLocale(locale);\n\n  if (!canonicalLocale) {\n    return locale;\n  }\n\n  const formatter = new Intl.DisplayNames(/** @type {string} */ (get(appLocale)), {\n    type: 'language',\n  });\n\n  try {\n    return formatter.of(canonicalLocale) ?? locale;\n  } catch (/** @type {any} */ ex) {\n    // eslint-disable-next-line no-console\n    console.error(ex);\n\n    return locale;\n  }\n};\n\n/**\n * Get a simple list formatter.\n * @param {InternalLocaleCode} locale Locale code.\n * @param {Partial<Intl.ListFormatOptions>} options Format options.\n * @returns {Intl.ListFormat} Formatter.\n */\nexport const getListFormatter = (locale, options = {}) =>\n  new Intl.ListFormat(getCanonicalLocale(locale), {\n    style: 'narrow',\n    type: 'conjunction',\n    ...options,\n  });\n\n/**\n * Get the complete path for the given entry folder, including the locale.\n * @param {object} args Arguments.\n * @param {InternalI18nOptions} args._i18n I18n configuration.\n * @param {InternalLocaleCode} args.locale Locale code.\n * @param {string} args.path Collection file path with `{{locale}}` placeholder.\n * @returns {string} Complete path, including the locale.\n */\nexport const getLocalePath = ({ _i18n, locale, path }) => {\n  const { defaultLocale, omitDefaultLocaleFromFileName } = _i18n;\n\n  // Remove the default locale from the file name (for Zola compatibility)\n  // @see https://github.com/sveltia/sveltia-cms/discussions/394\n  if (omitDefaultLocaleFromFileName && locale === defaultLocale) {\n    path = path.replace(/\\.{{locale}}\\.(\\w+)$/, '.$1');\n  }\n\n  // Replace the placeholder with the actual locale. The placeholder may appear multiple times\n  // @see https://github.com/sveltia/sveltia-cms/issues/462\n  return path.replaceAll('{{locale}}', locale);\n};\n","/**\n * Regular expression to match partial or complete ISO 8601 date format.\n * @see https://stackoverflow.com/q/3143070\n */\nexport const FULL_DATE_TIME_REGEX =\n  /^(?:\\d{4}-[01]\\d-[0-3]\\d)?(?:T?[0-2]\\d:[0-5]\\d)?(?::[0-5]\\d)?(?:\\.\\d+)?(?:[+-][0-2]\\d:[0-5]\\d|Z)?$/;\n\nexport const DATE_REGEX = /^\\d{4}-[01]\\d-[0-3]\\d$/;\nexport const TIME_SUFFIX_REGEX = /T00:00(?::00)?(?:\\.000)?Z$/;\n\n/**\n * Standard date format options.\n * @type {Intl.DateTimeFormatOptions}\n */\nexport const DATE_FORMAT_OPTIONS = { year: 'numeric', month: 'short', day: 'numeric' };\n\n/**\n * Standard time format options.\n * @type {Intl.DateTimeFormatOptions}\n */\nexport const TIME_FORMAT_OPTIONS = { hour: 'numeric', minute: 'numeric', hour12: true };\n\n/**\n * Standard date/time format options.\n * @type {Intl.DateTimeFormatOptions}\n */\nexport const DATE_TIME_FORMAT_OPTIONS = { ...DATE_FORMAT_OPTIONS, ...TIME_FORMAT_OPTIONS };\n","import { getDateTimeParts } from '@sveltia/utils/datetime';\nimport moment from 'moment';\n\nimport { getCanonicalLocale } from '$lib/services/contents/i18n';\nimport {\n  DATE_FORMAT_OPTIONS,\n  DATE_REGEX,\n  TIME_FORMAT_OPTIONS,\n  TIME_SUFFIX_REGEX,\n} from '$lib/services/utils/date';\n\n/**\n * @import { DateTimeFieldNormalizedProps, InternalLocaleCode } from '$lib/types/private';\n * @import { DateTimeField } from '$lib/types/public';\n */\n\n/**\n * Parse the DateTime field configuration and return as normalized format.\n * @param {DateTimeField} fieldConfig Field config.\n * @returns {DateTimeFieldNormalizedProps} Normalized properties.\n */\nexport const parseDateTimeConfig = (fieldConfig) => {\n  const {\n    format,\n    date_format: dateFormat = undefined,\n    time_format: timeFormat = undefined,\n    picker_utc: utc = false,\n  } = fieldConfig;\n\n  const dateFormatStr = typeof dateFormat === 'string' ? dateFormat : '';\n  const timeFormatStr = typeof timeFormat === 'string' ? timeFormat : '';\n\n  return {\n    format: format || [dateFormatStr, timeFormatStr].join(' ').trim() || undefined,\n    dateOnly: timeFormat === false,\n    timeOnly: dateFormat === false,\n    utc,\n  };\n};\n\n/**\n * Get a `Date` object given the current value.\n * @param {string | undefined} currentValue Value in the entry draft datastore.\n * @param {DateTimeField} fieldConfig Field configuration.\n * @returns {Date | undefined} Date.\n */\nexport const getDate = (currentValue, fieldConfig) => {\n  const { format, timeOnly, utc } = parseDateTimeConfig(fieldConfig);\n\n  if (!currentValue) {\n    return undefined;\n  }\n\n  try {\n    if (format) {\n      return (utc ? moment.utc : moment)(currentValue, format).toDate();\n    }\n\n    if (timeOnly) {\n      // Use the current date\n      return new Date(`${new Date().toJSON().split('T')[0]}T${currentValue}`);\n    }\n\n    return new Date(currentValue);\n  } catch (ex) {\n    // eslint-disable-next-line no-console\n    console.error(ex);\n\n    return undefined;\n  }\n};\n\n/**\n * Get the current date/time.\n * @param {DateTimeField} fieldConfig Field configuration.\n * @returns {string} Current date/time in the ISO 8601 format.\n */\nexport const getCurrentDateTime = (fieldConfig) => {\n  const { dateOnly, timeOnly, utc } = parseDateTimeConfig(fieldConfig);\n\n  const { year, month, day, hour, minute } = getDateTimeParts({\n    timeZone: utc ? 'UTC' : undefined,\n  });\n\n  const dateStr = `${year}-${month}-${day}`;\n  const timeStr = `${hour}:${minute}`;\n\n  if (dateOnly) {\n    return dateStr;\n  }\n\n  if (timeOnly) {\n    return timeStr;\n  }\n\n  if (utc) {\n    return `${dateStr}T${timeStr}:00.000Z`;\n  }\n\n  return `${dateStr}T${timeStr}`;\n};\n\n/**\n * Get the current value given the input value.\n * @param {string | undefined} inputValue Value on the date/time input widget.\n * @param {string | undefined} currentValue Value in the entry draft datastore.\n * @param {DateTimeField} fieldConfig Field configuration.\n * @returns {string | undefined} New value.\n */\nexport const getCurrentValue = (inputValue, currentValue, fieldConfig) => {\n  const { format, dateOnly, timeOnly, utc } = parseDateTimeConfig(fieldConfig);\n  const inputFormat = dateOnly ? 'YYYY-MM-DD' : timeOnly ? 'HH:mm' : 'YYYY-MM-DDTHH:mm';\n  // Append seconds (and milliseconds) for data format & framework compatibility\n  const timeSuffix = `:00${currentValue?.endsWith('.000') ? '.000' : ''}`;\n\n  if (inputValue === '') {\n    return '';\n  }\n\n  if (!inputValue) {\n    return undefined;\n  }\n\n  try {\n    if (format) {\n      const result = (utc ? moment.utc : moment)(inputValue, inputFormat).format(format);\n\n      // Handle `moment.js` inconsistency where `Z` token might output `+00:00` instead of `Z`\n      if (format.includes('Z') && result.endsWith('+00:00')) {\n        return result.replace('+00:00', 'Z');\n      }\n\n      return result;\n    }\n\n    if (dateOnly) {\n      return inputValue;\n    }\n\n    if (utc) {\n      return `${inputValue}:00.000Z`;\n    }\n\n    return `${inputValue}${timeSuffix}`;\n  } catch (ex) {\n    // eslint-disable-next-line no-console\n    console.error(ex);\n\n    return undefined;\n  }\n};\n\n/**\n * Get the input value given the current value.\n * @param {string | undefined} currentValue Value in the entry draft datastore.\n * @param {DateTimeField} fieldConfig Field configuration.\n * @returns {string | undefined} New value.\n */\nexport const getInputValue = (currentValue, fieldConfig) => {\n  const { dateOnly, timeOnly, utc } = parseDateTimeConfig(fieldConfig);\n\n  // If the default value is an empty string, the input will be blank by default\n  if (!currentValue) {\n    return '';\n  }\n\n  // If the current value is the standard format, return it as is\n  const value = dateOnly\n    ? currentValue?.match(/^(?<date>\\d{4}-[01]\\d-[0-3]\\d)\\b/)?.groups?.date\n    : timeOnly\n      ? // Match both `YYYY-MM-DDTHH:mm(:ss)` and `HH:mm(:ss)` formats\n        currentValue?.match(/(?:^|T)(?<time>[0-2]\\d:[0-5]\\d)\\b/)?.groups?.time\n      : undefined;\n\n  if (value) {\n    return value;\n  }\n\n  try {\n    const dateForParts = currentValue ? getDate(currentValue, fieldConfig) : new Date();\n\n    // If `getDate` returned `undefined` (parsing failed), return empty string\n    if (currentValue && !dateForParts) {\n      return '';\n    }\n\n    // If `getDate` returned an invalid `Date` object, return empty string\n    if (currentValue && dateForParts && Number.isNaN(dateForParts.getTime())) {\n      return '';\n    }\n\n    const { year, month, day, hour, minute } = getDateTimeParts({\n      date: dateForParts,\n      timeZone: utc ? 'UTC' : undefined,\n    });\n\n    const dateStr = `${year}-${month}-${day}`;\n    const timeStr = `${hour}:${minute}`;\n\n    if (dateOnly) {\n      return dateStr;\n    }\n\n    if (timeOnly) {\n      return timeStr;\n    }\n\n    return `${dateStr}T${timeStr}`;\n  } catch (ex) {\n    // eslint-disable-next-line no-console\n    console.error(ex);\n\n    return '';\n  }\n};\n\n/**\n * Get the display value of a DateTime field.\n * @param {object} args Arguments.\n * @param {InternalLocaleCode} args.locale Locale code.\n * @param {DateTimeField} args.fieldConfig Field configuration.\n * @param {string | undefined} args.currentValue Stored value.\n * @returns {string} Display value.\n */\nexport const getDateTimeFieldDisplayValue = ({ locale, fieldConfig, currentValue }) => {\n  const { format, dateOnly, timeOnly, utc } = parseDateTimeConfig(fieldConfig);\n\n  if (typeof currentValue !== 'string' || !currentValue.trim()) {\n    return '';\n  }\n\n  if (format) {\n    try {\n      // Parse and reformat the value because it could be saved in a wrong format\n      return (utc ? moment.utc : moment)(currentValue, format).format(format);\n    } catch {\n      //\n    }\n  }\n\n  const date = getDate(currentValue, fieldConfig);\n  const canonicalLocale = getCanonicalLocale(locale);\n\n  if (!date || Number.isNaN(date.getTime())) {\n    return '';\n  }\n\n  if (timeOnly) {\n    return date.toLocaleTimeString(canonicalLocale, TIME_FORMAT_OPTIONS);\n  }\n\n  if (dateOnly) {\n    return date.toLocaleDateString(canonicalLocale, {\n      ...DATE_FORMAT_OPTIONS,\n      timeZone:\n        utc || DATE_REGEX.test(currentValue) || TIME_SUFFIX_REGEX.test(currentValue)\n          ? 'UTC'\n          : undefined,\n    });\n  }\n\n  return date.toLocaleString(canonicalLocale, {\n    ...DATE_FORMAT_OPTIONS,\n    ...TIME_FORMAT_OPTIONS,\n    timeZone: utc ? 'UTC' : undefined,\n    timeZoneName: utc ? undefined : 'short',\n  });\n};\n","import { truncate } from '@sveltia/utils/string';\nimport moment from 'moment';\n\nimport { parseDateTimeConfig } from '$lib/services/contents/widgets/date-time/helper';\n\n/**\n * @import { DateTimeField, Field } from '$lib/types/public';\n */\n\n/**\n * @typedef {object} DateTimeTransformationArgs\n * @property {string} format The date format string to use for output.\n * @property {string} [timeZone] The time zone to use (`utc` for UTC, otherwise local).\n */\n\n/**\n * @typedef {object} DefaultTransformationArgs\n * @property {string} defaultValue The default value to return if the input value is falsy.\n */\n\n/**\n * @typedef {object} TernaryTransformationArgs\n * @property {string} truthyValue The value to return if the input value is truthy.\n * @property {string} falsyValue The value to return if the input value is falsy.\n */\n\n/**\n * @typedef {object} TruncateTransformationArgs\n * @property {string} max The maximum length of the string.\n * @property {string} [ellipsis] The string to append if truncation occurs.\n */\n\nexport const DATE_TRANSFORMATION_REGEX = /^date\\('(?<format>.+?)'(?:,\\s*'(?<timeZone>.+?)')?\\)$/;\nexport const DEFAULT_TRANSFORMATION_REGEX = /^default\\('(?<defaultValue>.+?)'\\)$/;\nexport const TERNARY_TRANSFORMATION_REGEX =\n  /^ternary\\('(?<truthyValue>.*?)',\\s*'(?<falsyValue>.*?)'\\)$/;\nexport const TRUNCATE_TRANSFORMATION_REGEX = /^truncate\\((?<max>\\d+)(?:,\\s*'(?<ellipsis>.+?)')?\\)$/;\n\n/**\n * Transform the input value to its uppercase string representation.\n * @param {any} value The value to be transformed to uppercase.\n * @returns {string} The uppercase string representation of the input value.\n */\nconst applyUpperCaseTransformation = (value) => String(value).toUpperCase();\n/**\n * Transform the input value to a string and returns it in lowercase.\n * @param {any} value The value to be transformed to lowercase.\n * @returns {string} The lowercase string representation of the input value.\n */\nconst applyLowerCaseTransformation = (value) => String(value).toLowerCase();\n\n/**\n * Transform the input value to a formatted string based on the provided format and time zone\n * options.\n * @param {any} value The input value to be transformed into a date string.\n * @param {DateTimeTransformationArgs} args Transformation arguments.\n * @param {DateTimeField} fieldConfig Field configuration containing date and time settings.\n * @returns {string} The formatted date string if valid, otherwise an empty string.\n */\nconst applyDateTransformation = (value, { format, timeZone }, fieldConfig) => {\n  const sValue = String(value);\n  const { dateOnly, utc } = parseDateTimeConfig(fieldConfig);\n\n  const useUTC =\n    timeZone === 'utc' ||\n    utc ||\n    (dateOnly && !!sValue.match(/^\\d{4}-[01]\\d-[0-3]\\d$/)) ||\n    (dateOnly && !!sValue.match(/T\\d{2}:\\d{2}(?::\\d{2})?(?:\\.\\d+)?Z$/));\n\n  const date = (useUTC ? moment.utc : moment)(sValue);\n\n  if (date.isValid()) {\n    return date.format(format);\n  }\n\n  return '';\n};\n\n/**\n * Return the string representation of the given value if it is truthy; otherwise, returns the\n * provided default value.\n * @param {any} value The value to evaluate for truthiness.\n * @param {DefaultTransformationArgs} args Transformation arguments.\n * @returns {string} The stringified value or the default value.\n */\nconst applyDefaultTransformation = (value, { defaultValue }) =>\n  value ? String(value) : defaultValue;\n\n/**\n * Return one of two values based on the truthiness of the input value.\n * @param {any} value The value to evaluate for truthiness.\n * @param {TernaryTransformationArgs} args Transformation arguments.\n * @returns {string} Returns `truthyValue` if `value` is truthy, otherwise returns `falsyValue`.\n */\nconst ternaryTransformation = (value, { truthyValue, falsyValue }) =>\n  value ? truthyValue : falsyValue;\n\n/**\n * Truncate a string to a specified maximum length and append an ellipsis if truncation occurs.\n * @param {any} value The value to be truncated.\n * @param {TruncateTransformationArgs} args Transformation arguments.\n * @returns {string} The truncated string with ellipsis if applicable.\n */\nconst applyTruncateTransformation = (value, { max, ellipsis = '…' }) =>\n  truncate(String(value), Number(max), { ellipsis });\n\n/**\n * Apply a single string transformation to the value based on the specified transformation type.\n * @param {object} args Arguments.\n * @param {Field} [args.fieldConfig] Field configuration, used for date transformations.\n * @param {any} args.value Original value to be transformed.\n * @param {string} args.transformation Transformation, e.g `upper`, `truncate(10)`.\n * @returns {string} Transformed value.\n * @see https://decapcms.org/docs/summary-strings/\n */\nexport const applyTransformation = ({ fieldConfig, value, transformation }) => {\n  if (transformation === 'upper') {\n    return applyUpperCaseTransformation(value);\n  }\n\n  if (transformation === 'lower') {\n    return applyLowerCaseTransformation(value);\n  }\n\n  const dateTransformer = transformation.match(DATE_TRANSFORMATION_REGEX);\n\n  if (dateTransformer?.groups) {\n    return applyDateTransformation(\n      value,\n      /** @type {DateTimeTransformationArgs} */ (dateTransformer.groups),\n      /** @type {DateTimeField} */ (fieldConfig ?? {}),\n    );\n  }\n\n  const defaultTransformer = transformation.match(DEFAULT_TRANSFORMATION_REGEX);\n\n  if (defaultTransformer?.groups) {\n    return applyDefaultTransformation(\n      value,\n      /** @type {DefaultTransformationArgs} */ (defaultTransformer.groups),\n    );\n  }\n\n  const ternaryTransformer = transformation.match(TERNARY_TRANSFORMATION_REGEX);\n\n  if (ternaryTransformer?.groups) {\n    return ternaryTransformation(\n      value,\n      /** @type {TernaryTransformationArgs} */ (ternaryTransformer.groups),\n    );\n  }\n\n  const truncateTransformer = transformation.match(TRUNCATE_TRANSFORMATION_REGEX);\n\n  if (truncateTransformer?.groups) {\n    return applyTruncateTransformation(\n      value,\n      /** @type {TruncateTransformationArgs} */ (truncateTransformer.groups),\n    );\n  }\n\n  return String(value);\n};\n\n/**\n * Apply string transformations to the value.\n * @param {object} args Arguments.\n * @param {Field} [args.fieldConfig] Field configuration.\n * @param {any} args.value Original value.\n * @param {string[]} args.transformations List of transformations.\n * @returns {string} Transformed value.\n */\nexport const applyTransformations = ({ fieldConfig, value, transformations }) => {\n  transformations.forEach((transformation) => {\n    value = applyTransformation({ fieldConfig, value, transformation });\n  });\n\n  return value;\n};\n","/**\n * Return a simple `Promise` to resolve in the given time, making it easier to wait for a bit in the\n * code, particularly while making sequential HTTP requests.\n * @param {number} [ms] - Milliseconds to wait.\n * @returns {Promise<void>} Nothing.\n */\nconst sleep = (ms = 0) =>\n  new Promise((resolve) => {\n    globalThis.setTimeout(() => {\n      resolve(undefined);\n    }, ms);\n  });\n\nexport { sleep };\n","const types = {\n    'application/prs.cww': ['cww'],\n    'application/prs.xsf+xml': ['xsf'],\n    'application/vnd.1000minds.decision-model+xml': ['1km'],\n    'application/vnd.3gpp.pic-bw-large': ['plb'],\n    'application/vnd.3gpp.pic-bw-small': ['psb'],\n    'application/vnd.3gpp.pic-bw-var': ['pvb'],\n    'application/vnd.3gpp2.tcap': ['tcap'],\n    'application/vnd.3m.post-it-notes': ['pwn'],\n    'application/vnd.accpac.simply.aso': ['aso'],\n    'application/vnd.accpac.simply.imp': ['imp'],\n    'application/vnd.acucobol': ['acu'],\n    'application/vnd.acucorp': ['atc', 'acutc'],\n    'application/vnd.adobe.air-application-installer-package+zip': ['air'],\n    'application/vnd.adobe.formscentral.fcdt': ['fcdt'],\n    'application/vnd.adobe.fxp': ['fxp', 'fxpl'],\n    'application/vnd.adobe.xdp+xml': ['xdp'],\n    'application/vnd.adobe.xfdf': ['*xfdf'],\n    'application/vnd.age': ['age'],\n    'application/vnd.ahead.space': ['ahead'],\n    'application/vnd.airzip.filesecure.azf': ['azf'],\n    'application/vnd.airzip.filesecure.azs': ['azs'],\n    'application/vnd.amazon.ebook': ['azw'],\n    'application/vnd.americandynamics.acc': ['acc'],\n    'application/vnd.amiga.ami': ['ami'],\n    'application/vnd.android.package-archive': ['apk'],\n    'application/vnd.anser-web-certificate-issue-initiation': ['cii'],\n    'application/vnd.anser-web-funds-transfer-initiation': ['fti'],\n    'application/vnd.antix.game-component': ['atx'],\n    'application/vnd.apple.installer+xml': ['mpkg'],\n    'application/vnd.apple.keynote': ['key'],\n    'application/vnd.apple.mpegurl': ['m3u8'],\n    'application/vnd.apple.numbers': ['numbers'],\n    'application/vnd.apple.pages': ['pages'],\n    'application/vnd.apple.pkpass': ['pkpass'],\n    'application/vnd.aristanetworks.swi': ['swi'],\n    'application/vnd.astraea-software.iota': ['iota'],\n    'application/vnd.audiograph': ['aep'],\n    'application/vnd.autodesk.fbx': ['fbx'],\n    'application/vnd.balsamiq.bmml+xml': ['bmml'],\n    'application/vnd.blueice.multipass': ['mpm'],\n    'application/vnd.bmi': ['bmi'],\n    'application/vnd.businessobjects': ['rep'],\n    'application/vnd.chemdraw+xml': ['cdxml'],\n    'application/vnd.chipnuts.karaoke-mmd': ['mmd'],\n    'application/vnd.cinderella': ['cdy'],\n    'application/vnd.citationstyles.style+xml': ['csl'],\n    'application/vnd.claymore': ['cla'],\n    'application/vnd.cloanto.rp9': ['rp9'],\n    'application/vnd.clonk.c4group': ['c4g', 'c4d', 'c4f', 'c4p', 'c4u'],\n    'application/vnd.cluetrust.cartomobile-config': ['c11amc'],\n    'application/vnd.cluetrust.cartomobile-config-pkg': ['c11amz'],\n    'application/vnd.commonspace': ['csp'],\n    'application/vnd.contact.cmsg': ['cdbcmsg'],\n    'application/vnd.cosmocaller': ['cmc'],\n    'application/vnd.crick.clicker': ['clkx'],\n    'application/vnd.crick.clicker.keyboard': ['clkk'],\n    'application/vnd.crick.clicker.palette': ['clkp'],\n    'application/vnd.crick.clicker.template': ['clkt'],\n    'application/vnd.crick.clicker.wordbank': ['clkw'],\n    'application/vnd.criticaltools.wbs+xml': ['wbs'],\n    'application/vnd.ctc-posml': ['pml'],\n    'application/vnd.cups-ppd': ['ppd'],\n    'application/vnd.curl.car': ['car'],\n    'application/vnd.curl.pcurl': ['pcurl'],\n    'application/vnd.dart': ['dart'],\n    'application/vnd.data-vision.rdz': ['rdz'],\n    'application/vnd.dbf': ['dbf'],\n    'application/vnd.dcmp+xml': ['dcmp'],\n    'application/vnd.dece.data': ['uvf', 'uvvf', 'uvd', 'uvvd'],\n    'application/vnd.dece.ttml+xml': ['uvt', 'uvvt'],\n    'application/vnd.dece.unspecified': ['uvx', 'uvvx'],\n    'application/vnd.dece.zip': ['uvz', 'uvvz'],\n    'application/vnd.denovo.fcselayout-link': ['fe_launch'],\n    'application/vnd.dna': ['dna'],\n    'application/vnd.dolby.mlp': ['mlp'],\n    'application/vnd.dpgraph': ['dpg'],\n    'application/vnd.dreamfactory': ['dfac'],\n    'application/vnd.ds-keypoint': ['kpxx'],\n    'application/vnd.dvb.ait': ['ait'],\n    'application/vnd.dvb.service': ['svc'],\n    'application/vnd.dynageo': ['geo'],\n    'application/vnd.ecowin.chart': ['mag'],\n    'application/vnd.enliven': ['nml'],\n    'application/vnd.epson.esf': ['esf'],\n    'application/vnd.epson.msf': ['msf'],\n    'application/vnd.epson.quickanime': ['qam'],\n    'application/vnd.epson.salt': ['slt'],\n    'application/vnd.epson.ssf': ['ssf'],\n    'application/vnd.eszigno3+xml': ['es3', 'et3'],\n    'application/vnd.ezpix-album': ['ez2'],\n    'application/vnd.ezpix-package': ['ez3'],\n    'application/vnd.fdf': ['*fdf'],\n    'application/vnd.fdsn.mseed': ['mseed'],\n    'application/vnd.fdsn.seed': ['seed', 'dataless'],\n    'application/vnd.flographit': ['gph'],\n    'application/vnd.fluxtime.clip': ['ftc'],\n    'application/vnd.framemaker': ['fm', 'frame', 'maker', 'book'],\n    'application/vnd.frogans.fnc': ['fnc'],\n    'application/vnd.frogans.ltf': ['ltf'],\n    'application/vnd.fsc.weblaunch': ['fsc'],\n    'application/vnd.fujitsu.oasys': ['oas'],\n    'application/vnd.fujitsu.oasys2': ['oa2'],\n    'application/vnd.fujitsu.oasys3': ['oa3'],\n    'application/vnd.fujitsu.oasysgp': ['fg5'],\n    'application/vnd.fujitsu.oasysprs': ['bh2'],\n    'application/vnd.fujixerox.ddd': ['ddd'],\n    'application/vnd.fujixerox.docuworks': ['xdw'],\n    'application/vnd.fujixerox.docuworks.binder': ['xbd'],\n    'application/vnd.fuzzysheet': ['fzs'],\n    'application/vnd.genomatix.tuxedo': ['txd'],\n    'application/vnd.geogebra.file': ['ggb'],\n    'application/vnd.geogebra.slides': ['ggs'],\n    'application/vnd.geogebra.tool': ['ggt'],\n    'application/vnd.geometry-explorer': ['gex', 'gre'],\n    'application/vnd.geonext': ['gxt'],\n    'application/vnd.geoplan': ['g2w'],\n    'application/vnd.geospace': ['g3w'],\n    'application/vnd.gmx': ['gmx'],\n    'application/vnd.google-apps.document': ['gdoc'],\n    'application/vnd.google-apps.drawing': ['gdraw'],\n    'application/vnd.google-apps.form': ['gform'],\n    'application/vnd.google-apps.jam': ['gjam'],\n    'application/vnd.google-apps.map': ['gmap'],\n    'application/vnd.google-apps.presentation': ['gslides'],\n    'application/vnd.google-apps.script': ['gscript'],\n    'application/vnd.google-apps.site': ['gsite'],\n    'application/vnd.google-apps.spreadsheet': ['gsheet'],\n    'application/vnd.google-earth.kml+xml': ['kml'],\n    'application/vnd.google-earth.kmz': ['kmz'],\n    'application/vnd.gov.sk.xmldatacontainer+xml': ['xdcf'],\n    'application/vnd.grafeq': ['gqf', 'gqs'],\n    'application/vnd.groove-account': ['gac'],\n    'application/vnd.groove-help': ['ghf'],\n    'application/vnd.groove-identity-message': ['gim'],\n    'application/vnd.groove-injector': ['grv'],\n    'application/vnd.groove-tool-message': ['gtm'],\n    'application/vnd.groove-tool-template': ['tpl'],\n    'application/vnd.groove-vcard': ['vcg'],\n    'application/vnd.hal+xml': ['hal'],\n    'application/vnd.handheld-entertainment+xml': ['zmm'],\n    'application/vnd.hbci': ['hbci'],\n    'application/vnd.hhe.lesson-player': ['les'],\n    'application/vnd.hp-hpgl': ['hpgl'],\n    'application/vnd.hp-hpid': ['hpid'],\n    'application/vnd.hp-hps': ['hps'],\n    'application/vnd.hp-jlyt': ['jlt'],\n    'application/vnd.hp-pcl': ['pcl'],\n    'application/vnd.hp-pclxl': ['pclxl'],\n    'application/vnd.hydrostatix.sof-data': ['sfd-hdstx'],\n    'application/vnd.ibm.minipay': ['mpy'],\n    'application/vnd.ibm.modcap': ['afp', 'listafp', 'list3820'],\n    'application/vnd.ibm.rights-management': ['irm'],\n    'application/vnd.ibm.secure-container': ['sc'],\n    'application/vnd.iccprofile': ['icc', 'icm'],\n    'application/vnd.igloader': ['igl'],\n    'application/vnd.immervision-ivp': ['ivp'],\n    'application/vnd.immervision-ivu': ['ivu'],\n    'application/vnd.insors.igm': ['igm'],\n    'application/vnd.intercon.formnet': ['xpw', 'xpx'],\n    'application/vnd.intergeo': ['i2g'],\n    'application/vnd.intu.qbo': ['qbo'],\n    'application/vnd.intu.qfx': ['qfx'],\n    'application/vnd.ipunplugged.rcprofile': ['rcprofile'],\n    'application/vnd.irepository.package+xml': ['irp'],\n    'application/vnd.is-xpr': ['xpr'],\n    'application/vnd.isac.fcs': ['fcs'],\n    'application/vnd.jam': ['jam'],\n    'application/vnd.jcp.javame.midlet-rms': ['rms'],\n    'application/vnd.jisp': ['jisp'],\n    'application/vnd.joost.joda-archive': ['joda'],\n    'application/vnd.kahootz': ['ktz', 'ktr'],\n    'application/vnd.kde.karbon': ['karbon'],\n    'application/vnd.kde.kchart': ['chrt'],\n    'application/vnd.kde.kformula': ['kfo'],\n    'application/vnd.kde.kivio': ['flw'],\n    'application/vnd.kde.kontour': ['kon'],\n    'application/vnd.kde.kpresenter': ['kpr', 'kpt'],\n    'application/vnd.kde.kspread': ['ksp'],\n    'application/vnd.kde.kword': ['kwd', 'kwt'],\n    'application/vnd.kenameaapp': ['htke'],\n    'application/vnd.kidspiration': ['kia'],\n    'application/vnd.kinar': ['kne', 'knp'],\n    'application/vnd.koan': ['skp', 'skd', 'skt', 'skm'],\n    'application/vnd.kodak-descriptor': ['sse'],\n    'application/vnd.las.las+xml': ['lasxml'],\n    'application/vnd.llamagraphics.life-balance.desktop': ['lbd'],\n    'application/vnd.llamagraphics.life-balance.exchange+xml': ['lbe'],\n    'application/vnd.lotus-1-2-3': ['123'],\n    'application/vnd.lotus-approach': ['apr'],\n    'application/vnd.lotus-freelance': ['pre'],\n    'application/vnd.lotus-notes': ['nsf'],\n    'application/vnd.lotus-organizer': ['org'],\n    'application/vnd.lotus-screencam': ['scm'],\n    'application/vnd.lotus-wordpro': ['lwp'],\n    'application/vnd.macports.portpkg': ['portpkg'],\n    'application/vnd.mapbox-vector-tile': ['mvt'],\n    'application/vnd.mcd': ['mcd'],\n    'application/vnd.medcalcdata': ['mc1'],\n    'application/vnd.mediastation.cdkey': ['cdkey'],\n    'application/vnd.mfer': ['mwf'],\n    'application/vnd.mfmp': ['mfm'],\n    'application/vnd.micrografx.flo': ['flo'],\n    'application/vnd.micrografx.igx': ['igx'],\n    'application/vnd.mif': ['mif'],\n    'application/vnd.mobius.daf': ['daf'],\n    'application/vnd.mobius.dis': ['dis'],\n    'application/vnd.mobius.mbk': ['mbk'],\n    'application/vnd.mobius.mqy': ['mqy'],\n    'application/vnd.mobius.msl': ['msl'],\n    'application/vnd.mobius.plc': ['plc'],\n    'application/vnd.mobius.txf': ['txf'],\n    'application/vnd.mophun.application': ['mpn'],\n    'application/vnd.mophun.certificate': ['mpc'],\n    'application/vnd.mozilla.xul+xml': ['xul'],\n    'application/vnd.ms-artgalry': ['cil'],\n    'application/vnd.ms-cab-compressed': ['cab'],\n    'application/vnd.ms-excel': ['xls', 'xlm', 'xla', 'xlc', 'xlt', 'xlw'],\n    'application/vnd.ms-excel.addin.macroenabled.12': ['xlam'],\n    'application/vnd.ms-excel.sheet.binary.macroenabled.12': ['xlsb'],\n    'application/vnd.ms-excel.sheet.macroenabled.12': ['xlsm'],\n    'application/vnd.ms-excel.template.macroenabled.12': ['xltm'],\n    'application/vnd.ms-fontobject': ['eot'],\n    'application/vnd.ms-htmlhelp': ['chm'],\n    'application/vnd.ms-ims': ['ims'],\n    'application/vnd.ms-lrm': ['lrm'],\n    'application/vnd.ms-officetheme': ['thmx'],\n    'application/vnd.ms-outlook': ['msg'],\n    'application/vnd.ms-pki.seccat': ['cat'],\n    'application/vnd.ms-pki.stl': ['*stl'],\n    'application/vnd.ms-powerpoint': ['ppt', 'pps', 'pot'],\n    'application/vnd.ms-powerpoint.addin.macroenabled.12': ['ppam'],\n    'application/vnd.ms-powerpoint.presentation.macroenabled.12': ['pptm'],\n    'application/vnd.ms-powerpoint.slide.macroenabled.12': ['sldm'],\n    'application/vnd.ms-powerpoint.slideshow.macroenabled.12': ['ppsm'],\n    'application/vnd.ms-powerpoint.template.macroenabled.12': ['potm'],\n    'application/vnd.ms-project': ['*mpp', 'mpt'],\n    'application/vnd.ms-visio.viewer': ['vdx'],\n    'application/vnd.ms-word.document.macroenabled.12': ['docm'],\n    'application/vnd.ms-word.template.macroenabled.12': ['dotm'],\n    'application/vnd.ms-works': ['wps', 'wks', 'wcm', 'wdb'],\n    'application/vnd.ms-wpl': ['wpl'],\n    'application/vnd.ms-xpsdocument': ['xps'],\n    'application/vnd.mseq': ['mseq'],\n    'application/vnd.musician': ['mus'],\n    'application/vnd.muvee.style': ['msty'],\n    'application/vnd.mynfc': ['taglet'],\n    'application/vnd.nato.bindingdataobject+xml': ['bdo'],\n    'application/vnd.neurolanguage.nlu': ['nlu'],\n    'application/vnd.nitf': ['ntf', 'nitf'],\n    'application/vnd.noblenet-directory': ['nnd'],\n    'application/vnd.noblenet-sealer': ['nns'],\n    'application/vnd.noblenet-web': ['nnw'],\n    'application/vnd.nokia.n-gage.ac+xml': ['*ac'],\n    'application/vnd.nokia.n-gage.data': ['ngdat'],\n    'application/vnd.nokia.n-gage.symbian.install': ['n-gage'],\n    'application/vnd.nokia.radio-preset': ['rpst'],\n    'application/vnd.nokia.radio-presets': ['rpss'],\n    'application/vnd.novadigm.edm': ['edm'],\n    'application/vnd.novadigm.edx': ['edx'],\n    'application/vnd.novadigm.ext': ['ext'],\n    'application/vnd.oasis.opendocument.chart': ['odc'],\n    'application/vnd.oasis.opendocument.chart-template': ['otc'],\n    'application/vnd.oasis.opendocument.database': ['odb'],\n    'application/vnd.oasis.opendocument.formula': ['odf'],\n    'application/vnd.oasis.opendocument.formula-template': ['odft'],\n    'application/vnd.oasis.opendocument.graphics': ['odg'],\n    'application/vnd.oasis.opendocument.graphics-template': ['otg'],\n    'application/vnd.oasis.opendocument.image': ['odi'],\n    'application/vnd.oasis.opendocument.image-template': ['oti'],\n    'application/vnd.oasis.opendocument.presentation': ['odp'],\n    'application/vnd.oasis.opendocument.presentation-template': ['otp'],\n    'application/vnd.oasis.opendocument.spreadsheet': ['ods'],\n    'application/vnd.oasis.opendocument.spreadsheet-template': ['ots'],\n    'application/vnd.oasis.opendocument.text': ['odt'],\n    'application/vnd.oasis.opendocument.text-master': ['odm'],\n    'application/vnd.oasis.opendocument.text-template': ['ott'],\n    'application/vnd.oasis.opendocument.text-web': ['oth'],\n    'application/vnd.olpc-sugar': ['xo'],\n    'application/vnd.oma.dd2+xml': ['dd2'],\n    'application/vnd.openblox.game+xml': ['obgx'],\n    'application/vnd.openofficeorg.extension': ['oxt'],\n    'application/vnd.openstreetmap.data+xml': ['osm'],\n    'application/vnd.openxmlformats-officedocument.presentationml.presentation': [\n        'pptx',\n    ],\n    'application/vnd.openxmlformats-officedocument.presentationml.slide': [\n        'sldx',\n    ],\n    'application/vnd.openxmlformats-officedocument.presentationml.slideshow': [\n        'ppsx',\n    ],\n    'application/vnd.openxmlformats-officedocument.presentationml.template': [\n        'potx',\n    ],\n    'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': ['xlsx'],\n    'application/vnd.openxmlformats-officedocument.spreadsheetml.template': [\n        'xltx',\n    ],\n    'application/vnd.openxmlformats-officedocument.wordprocessingml.document': [\n        'docx',\n    ],\n    'application/vnd.openxmlformats-officedocument.wordprocessingml.template': [\n        'dotx',\n    ],\n    'application/vnd.osgeo.mapguide.package': ['mgp'],\n    'application/vnd.osgi.dp': ['dp'],\n    'application/vnd.osgi.subsystem': ['esa'],\n    'application/vnd.palm': ['pdb', 'pqa', 'oprc'],\n    'application/vnd.pawaafile': ['paw'],\n    'application/vnd.pg.format': ['str'],\n    'application/vnd.pg.osasli': ['ei6'],\n    'application/vnd.picsel': ['efif'],\n    'application/vnd.pmi.widget': ['wg'],\n    'application/vnd.pocketlearn': ['plf'],\n    'application/vnd.powerbuilder6': ['pbd'],\n    'application/vnd.previewsystems.box': ['box'],\n    'application/vnd.procrate.brushset': ['brushset'],\n    'application/vnd.procreate.brush': ['brush'],\n    'application/vnd.procreate.dream': ['drm'],\n    'application/vnd.proteus.magazine': ['mgz'],\n    'application/vnd.publishare-delta-tree': ['qps'],\n    'application/vnd.pvi.ptid1': ['ptid'],\n    'application/vnd.pwg-xhtml-print+xml': ['xhtm'],\n    'application/vnd.quark.quarkxpress': [\n        'qxd',\n        'qxt',\n        'qwd',\n        'qwt',\n        'qxl',\n        'qxb',\n    ],\n    'application/vnd.rar': ['rar'],\n    'application/vnd.realvnc.bed': ['bed'],\n    'application/vnd.recordare.musicxml': ['mxl'],\n    'application/vnd.recordare.musicxml+xml': ['musicxml'],\n    'application/vnd.rig.cryptonote': ['cryptonote'],\n    'application/vnd.rim.cod': ['cod'],\n    'application/vnd.rn-realmedia': ['rm'],\n    'application/vnd.rn-realmedia-vbr': ['rmvb'],\n    'application/vnd.route66.link66+xml': ['link66'],\n    'application/vnd.sailingtracker.track': ['st'],\n    'application/vnd.seemail': ['see'],\n    'application/vnd.sema': ['sema'],\n    'application/vnd.semd': ['semd'],\n    'application/vnd.semf': ['semf'],\n    'application/vnd.shana.informed.formdata': ['ifm'],\n    'application/vnd.shana.informed.formtemplate': ['itp'],\n    'application/vnd.shana.informed.interchange': ['iif'],\n    'application/vnd.shana.informed.package': ['ipk'],\n    'application/vnd.simtech-mindmapper': ['twd', 'twds'],\n    'application/vnd.smaf': ['mmf'],\n    'application/vnd.smart.teacher': ['teacher'],\n    'application/vnd.software602.filler.form+xml': ['fo'],\n    'application/vnd.solent.sdkm+xml': ['sdkm', 'sdkd'],\n    'application/vnd.spotfire.dxp': ['dxp'],\n    'application/vnd.spotfire.sfs': ['sfs'],\n    'application/vnd.stardivision.calc': ['sdc'],\n    'application/vnd.stardivision.draw': ['sda'],\n    'application/vnd.stardivision.impress': ['sdd'],\n    'application/vnd.stardivision.math': ['smf'],\n    'application/vnd.stardivision.writer': ['sdw', 'vor'],\n    'application/vnd.stardivision.writer-global': ['sgl'],\n    'application/vnd.stepmania.package': ['smzip'],\n    'application/vnd.stepmania.stepchart': ['sm'],\n    'application/vnd.sun.wadl+xml': ['wadl'],\n    'application/vnd.sun.xml.calc': ['sxc'],\n    'application/vnd.sun.xml.calc.template': ['stc'],\n    'application/vnd.sun.xml.draw': ['sxd'],\n    'application/vnd.sun.xml.draw.template': ['std'],\n    'application/vnd.sun.xml.impress': ['sxi'],\n    'application/vnd.sun.xml.impress.template': ['sti'],\n    'application/vnd.sun.xml.math': ['sxm'],\n    'application/vnd.sun.xml.writer': ['sxw'],\n    'application/vnd.sun.xml.writer.global': ['sxg'],\n    'application/vnd.sun.xml.writer.template': ['stw'],\n    'application/vnd.sus-calendar': ['sus', 'susp'],\n    'application/vnd.svd': ['svd'],\n    'application/vnd.symbian.install': ['sis', 'sisx'],\n    'application/vnd.syncml+xml': ['xsm'],\n    'application/vnd.syncml.dm+wbxml': ['bdm'],\n    'application/vnd.syncml.dm+xml': ['xdm'],\n    'application/vnd.syncml.dmddf+xml': ['ddf'],\n    'application/vnd.tao.intent-module-archive': ['tao'],\n    'application/vnd.tcpdump.pcap': ['pcap', 'cap', 'dmp'],\n    'application/vnd.tmobile-livetv': ['tmo'],\n    'application/vnd.trid.tpt': ['tpt'],\n    'application/vnd.triscape.mxs': ['mxs'],\n    'application/vnd.trueapp': ['tra'],\n    'application/vnd.ufdl': ['ufd', 'ufdl'],\n    'application/vnd.uiq.theme': ['utz'],\n    'application/vnd.umajin': ['umj'],\n    'application/vnd.unity': ['unityweb'],\n    'application/vnd.uoml+xml': ['uoml', 'uo'],\n    'application/vnd.vcx': ['vcx'],\n    'application/vnd.visio': ['vsd', 'vst', 'vss', 'vsw', 'vsdx', 'vtx'],\n    'application/vnd.visionary': ['vis'],\n    'application/vnd.vsf': ['vsf'],\n    'application/vnd.wap.wbxml': ['wbxml'],\n    'application/vnd.wap.wmlc': ['wmlc'],\n    'application/vnd.wap.wmlscriptc': ['wmlsc'],\n    'application/vnd.webturbo': ['wtb'],\n    'application/vnd.wolfram.player': ['nbp'],\n    'application/vnd.wordperfect': ['wpd'],\n    'application/vnd.wqd': ['wqd'],\n    'application/vnd.wt.stf': ['stf'],\n    'application/vnd.xara': ['xar'],\n    'application/vnd.xfdl': ['xfdl'],\n    'application/vnd.yamaha.hv-dic': ['hvd'],\n    'application/vnd.yamaha.hv-script': ['hvs'],\n    'application/vnd.yamaha.hv-voice': ['hvp'],\n    'application/vnd.yamaha.openscoreformat': ['osf'],\n    'application/vnd.yamaha.openscoreformat.osfpvg+xml': ['osfpvg'],\n    'application/vnd.yamaha.smaf-audio': ['saf'],\n    'application/vnd.yamaha.smaf-phrase': ['spf'],\n    'application/vnd.yellowriver-custom-menu': ['cmp'],\n    'application/vnd.zul': ['zir', 'zirz'],\n    'application/vnd.zzazz.deck+xml': ['zaz'],\n    'application/x-7z-compressed': ['7z'],\n    'application/x-abiword': ['abw'],\n    'application/x-ace-compressed': ['ace'],\n    'application/x-apple-diskimage': ['*dmg'],\n    'application/x-arj': ['arj'],\n    'application/x-authorware-bin': ['aab', 'x32', 'u32', 'vox'],\n    'application/x-authorware-map': ['aam'],\n    'application/x-authorware-seg': ['aas'],\n    'application/x-bcpio': ['bcpio'],\n    'application/x-bdoc': ['*bdoc'],\n    'application/x-bittorrent': ['torrent'],\n    'application/x-blender': ['blend'],\n    'application/x-blorb': ['blb', 'blorb'],\n    'application/x-bzip': ['bz'],\n    'application/x-bzip2': ['bz2', 'boz'],\n    'application/x-cbr': ['cbr', 'cba', 'cbt', 'cbz', 'cb7'],\n    'application/x-cdlink': ['vcd'],\n    'application/x-cfs-compressed': ['cfs'],\n    'application/x-chat': ['chat'],\n    'application/x-chess-pgn': ['pgn'],\n    'application/x-chrome-extension': ['crx'],\n    'application/x-cocoa': ['cco'],\n    'application/x-compressed': ['*rar'],\n    'application/x-conference': ['nsc'],\n    'application/x-cpio': ['cpio'],\n    'application/x-csh': ['csh'],\n    'application/x-debian-package': ['*deb', 'udeb'],\n    'application/x-dgc-compressed': ['dgc'],\n    'application/x-director': [\n        'dir',\n        'dcr',\n        'dxr',\n        'cst',\n        'cct',\n        'cxt',\n        'w3d',\n        'fgd',\n        'swa',\n    ],\n    'application/x-doom': ['wad'],\n    'application/x-dtbncx+xml': ['ncx'],\n    'application/x-dtbook+xml': ['dtb'],\n    'application/x-dtbresource+xml': ['res'],\n    'application/x-dvi': ['dvi'],\n    'application/x-envoy': ['evy'],\n    'application/x-eva': ['eva'],\n    'application/x-font-bdf': ['bdf'],\n    'application/x-font-ghostscript': ['gsf'],\n    'application/x-font-linux-psf': ['psf'],\n    'application/x-font-pcf': ['pcf'],\n    'application/x-font-snf': ['snf'],\n    'application/x-font-type1': ['pfa', 'pfb', 'pfm', 'afm'],\n    'application/x-freearc': ['arc'],\n    'application/x-futuresplash': ['spl'],\n    'application/x-gca-compressed': ['gca'],\n    'application/x-glulx': ['ulx'],\n    'application/x-gnumeric': ['gnumeric'],\n    'application/x-gramps-xml': ['gramps'],\n    'application/x-gtar': ['gtar'],\n    'application/x-hdf': ['hdf'],\n    'application/x-httpd-php': ['php'],\n    'application/x-install-instructions': ['install'],\n    'application/x-ipynb+json': ['ipynb'],\n    'application/x-iso9660-image': ['*iso'],\n    'application/x-iwork-keynote-sffkey': ['*key'],\n    'application/x-iwork-numbers-sffnumbers': ['*numbers'],\n    'application/x-iwork-pages-sffpages': ['*pages'],\n    'application/x-java-archive-diff': ['jardiff'],\n    'application/x-java-jnlp-file': ['jnlp'],\n    'application/x-keepass2': ['kdbx'],\n    'application/x-latex': ['latex'],\n    'application/x-lua-bytecode': ['luac'],\n    'application/x-lzh-compressed': ['lzh', 'lha'],\n    'application/x-makeself': ['run'],\n    'application/x-mie': ['mie'],\n    'application/x-mobipocket-ebook': ['*prc', 'mobi'],\n    'application/x-ms-application': ['application'],\n    'application/x-ms-shortcut': ['lnk'],\n    'application/x-ms-wmd': ['wmd'],\n    'application/x-ms-wmz': ['wmz'],\n    'application/x-ms-xbap': ['xbap'],\n    'application/x-msaccess': ['mdb'],\n    'application/x-msbinder': ['obd'],\n    'application/x-mscardfile': ['crd'],\n    'application/x-msclip': ['clp'],\n    'application/x-msdos-program': ['*exe'],\n    'application/x-msdownload': ['*exe', '*dll', 'com', 'bat', '*msi'],\n    'application/x-msmediaview': ['mvb', 'm13', 'm14'],\n    'application/x-msmetafile': ['*wmf', '*wmz', '*emf', 'emz'],\n    'application/x-msmoney': ['mny'],\n    'application/x-mspublisher': ['pub'],\n    'application/x-msschedule': ['scd'],\n    'application/x-msterminal': ['trm'],\n    'application/x-mswrite': ['wri'],\n    'application/x-netcdf': ['nc', 'cdf'],\n    'application/x-ns-proxy-autoconfig': ['pac'],\n    'application/x-nzb': ['nzb'],\n    'application/x-perl': ['pl', 'pm'],\n    'application/x-pilot': ['*prc', '*pdb'],\n    'application/x-pkcs12': ['p12', 'pfx'],\n    'application/x-pkcs7-certificates': ['p7b', 'spc'],\n    'application/x-pkcs7-certreqresp': ['p7r'],\n    'application/x-rar-compressed': ['*rar'],\n    'application/x-redhat-package-manager': ['rpm'],\n    'application/x-research-info-systems': ['ris'],\n    'application/x-sea': ['sea'],\n    'application/x-sh': ['sh'],\n    'application/x-shar': ['shar'],\n    'application/x-shockwave-flash': ['swf'],\n    'application/x-silverlight-app': ['xap'],\n    'application/x-sql': ['*sql'],\n    'application/x-stuffit': ['sit'],\n    'application/x-stuffitx': ['sitx'],\n    'application/x-subrip': ['srt'],\n    'application/x-sv4cpio': ['sv4cpio'],\n    'application/x-sv4crc': ['sv4crc'],\n    'application/x-t3vm-image': ['t3'],\n    'application/x-tads': ['gam'],\n    'application/x-tar': ['tar'],\n    'application/x-tcl': ['tcl', 'tk'],\n    'application/x-tex': ['tex'],\n    'application/x-tex-tfm': ['tfm'],\n    'application/x-texinfo': ['texinfo', 'texi'],\n    'application/x-tgif': ['*obj'],\n    'application/x-ustar': ['ustar'],\n    'application/x-virtualbox-hdd': ['hdd'],\n    'application/x-virtualbox-ova': ['ova'],\n    'application/x-virtualbox-ovf': ['ovf'],\n    'application/x-virtualbox-vbox': ['vbox'],\n    'application/x-virtualbox-vbox-extpack': ['vbox-extpack'],\n    'application/x-virtualbox-vdi': ['vdi'],\n    'application/x-virtualbox-vhd': ['vhd'],\n    'application/x-virtualbox-vmdk': ['vmdk'],\n    'application/x-wais-source': ['src'],\n    'application/x-web-app-manifest+json': ['webapp'],\n    'application/x-x509-ca-cert': ['der', 'crt', 'pem'],\n    'application/x-xfig': ['fig'],\n    'application/x-xliff+xml': ['*xlf'],\n    'application/x-xpinstall': ['xpi'],\n    'application/x-xz': ['xz'],\n    'application/x-zip-compressed': ['*zip'],\n    'application/x-zmachine': ['z1', 'z2', 'z3', 'z4', 'z5', 'z6', 'z7', 'z8'],\n    'audio/vnd.dece.audio': ['uva', 'uvva'],\n    'audio/vnd.digital-winds': ['eol'],\n    'audio/vnd.dra': ['dra'],\n    'audio/vnd.dts': ['dts'],\n    'audio/vnd.dts.hd': ['dtshd'],\n    'audio/vnd.lucent.voice': ['lvp'],\n    'audio/vnd.ms-playready.media.pya': ['pya'],\n    'audio/vnd.nuera.ecelp4800': ['ecelp4800'],\n    'audio/vnd.nuera.ecelp7470': ['ecelp7470'],\n    'audio/vnd.nuera.ecelp9600': ['ecelp9600'],\n    'audio/vnd.rip': ['rip'],\n    'audio/x-aac': ['*aac'],\n    'audio/x-aiff': ['aif', 'aiff', 'aifc'],\n    'audio/x-caf': ['caf'],\n    'audio/x-flac': ['flac'],\n    'audio/x-m4a': ['*m4a'],\n    'audio/x-matroska': ['mka'],\n    'audio/x-mpegurl': ['m3u'],\n    'audio/x-ms-wax': ['wax'],\n    'audio/x-ms-wma': ['wma'],\n    'audio/x-pn-realaudio': ['ram', 'ra'],\n    'audio/x-pn-realaudio-plugin': ['rmp'],\n    'audio/x-realaudio': ['*ra'],\n    'audio/x-wav': ['*wav'],\n    'chemical/x-cdx': ['cdx'],\n    'chemical/x-cif': ['cif'],\n    'chemical/x-cmdf': ['cmdf'],\n    'chemical/x-cml': ['cml'],\n    'chemical/x-csml': ['csml'],\n    'chemical/x-xyz': ['xyz'],\n    'image/prs.btif': ['btif', 'btf'],\n    'image/prs.pti': ['pti'],\n    'image/vnd.adobe.photoshop': ['psd'],\n    'image/vnd.airzip.accelerator.azv': ['azv'],\n    'image/vnd.dece.graphic': ['uvi', 'uvvi', 'uvg', 'uvvg'],\n    'image/vnd.djvu': ['djvu', 'djv'],\n    'image/vnd.dvb.subtitle': ['*sub'],\n    'image/vnd.dwg': ['dwg'],\n    'image/vnd.dxf': ['dxf'],\n    'image/vnd.fastbidsheet': ['fbs'],\n    'image/vnd.fpx': ['fpx'],\n    'image/vnd.fst': ['fst'],\n    'image/vnd.fujixerox.edmics-mmr': ['mmr'],\n    'image/vnd.fujixerox.edmics-rlc': ['rlc'],\n    'image/vnd.microsoft.icon': ['ico'],\n    'image/vnd.ms-dds': ['dds'],\n    'image/vnd.ms-modi': ['mdi'],\n    'image/vnd.ms-photo': ['wdp'],\n    'image/vnd.net-fpx': ['npx'],\n    'image/vnd.pco.b16': ['b16'],\n    'image/vnd.tencent.tap': ['tap'],\n    'image/vnd.valve.source.texture': ['vtf'],\n    'image/vnd.wap.wbmp': ['wbmp'],\n    'image/vnd.xiff': ['xif'],\n    'image/vnd.zbrush.pcx': ['pcx'],\n    'image/x-3ds': ['3ds'],\n    'image/x-adobe-dng': ['dng'],\n    'image/x-cmu-raster': ['ras'],\n    'image/x-cmx': ['cmx'],\n    'image/x-freehand': ['fh', 'fhc', 'fh4', 'fh5', 'fh7'],\n    'image/x-icon': ['*ico'],\n    'image/x-jng': ['jng'],\n    'image/x-mrsid-image': ['sid'],\n    'image/x-ms-bmp': ['*bmp'],\n    'image/x-pcx': ['*pcx'],\n    'image/x-pict': ['pic', 'pct'],\n    'image/x-portable-anymap': ['pnm'],\n    'image/x-portable-bitmap': ['pbm'],\n    'image/x-portable-graymap': ['pgm'],\n    'image/x-portable-pixmap': ['ppm'],\n    'image/x-rgb': ['rgb'],\n    'image/x-tga': ['tga'],\n    'image/x-xbitmap': ['xbm'],\n    'image/x-xpixmap': ['xpm'],\n    'image/x-xwindowdump': ['xwd'],\n    'message/vnd.wfa.wsc': ['wsc'],\n    'model/vnd.bary': ['bary'],\n    'model/vnd.cld': ['cld'],\n    'model/vnd.collada+xml': ['dae'],\n    'model/vnd.dwf': ['dwf'],\n    'model/vnd.gdl': ['gdl'],\n    'model/vnd.gtw': ['gtw'],\n    'model/vnd.mts': ['*mts'],\n    'model/vnd.opengex': ['ogex'],\n    'model/vnd.parasolid.transmit.binary': ['x_b'],\n    'model/vnd.parasolid.transmit.text': ['x_t'],\n    'model/vnd.pytha.pyox': ['pyo', 'pyox'],\n    'model/vnd.sap.vds': ['vds'],\n    'model/vnd.usda': ['usda'],\n    'model/vnd.usdz+zip': ['usdz'],\n    'model/vnd.valve.source.compiled-map': ['bsp'],\n    'model/vnd.vtu': ['vtu'],\n    'text/prs.lines.tag': ['dsc'],\n    'text/vnd.curl': ['curl'],\n    'text/vnd.curl.dcurl': ['dcurl'],\n    'text/vnd.curl.mcurl': ['mcurl'],\n    'text/vnd.curl.scurl': ['scurl'],\n    'text/vnd.dvb.subtitle': ['sub'],\n    'text/vnd.familysearch.gedcom': ['ged'],\n    'text/vnd.fly': ['fly'],\n    'text/vnd.fmi.flexstor': ['flx'],\n    'text/vnd.graphviz': ['gv'],\n    'text/vnd.in3d.3dml': ['3dml'],\n    'text/vnd.in3d.spot': ['spot'],\n    'text/vnd.sun.j2me.app-descriptor': ['jad'],\n    'text/vnd.wap.wml': ['wml'],\n    'text/vnd.wap.wmlscript': ['wmls'],\n    'text/x-asm': ['s', 'asm'],\n    'text/x-c': ['c', 'cc', 'cxx', 'cpp', 'h', 'hh', 'dic'],\n    'text/x-component': ['htc'],\n    'text/x-fortran': ['f', 'for', 'f77', 'f90'],\n    'text/x-handlebars-template': ['hbs'],\n    'text/x-java-source': ['java'],\n    'text/x-lua': ['lua'],\n    'text/x-markdown': ['mkd'],\n    'text/x-nfo': ['nfo'],\n    'text/x-opml': ['opml'],\n    'text/x-org': ['*org'],\n    'text/x-pascal': ['p', 'pas'],\n    'text/x-processing': ['pde'],\n    'text/x-sass': ['sass'],\n    'text/x-scss': ['scss'],\n    'text/x-setext': ['etx'],\n    'text/x-sfv': ['sfv'],\n    'text/x-suse-ymp': ['ymp'],\n    'text/x-uuencode': ['uu'],\n    'text/x-vcalendar': ['vcs'],\n    'text/x-vcard': ['vcf'],\n    'video/vnd.dece.hd': ['uvh', 'uvvh'],\n    'video/vnd.dece.mobile': ['uvm', 'uvvm'],\n    'video/vnd.dece.pd': ['uvp', 'uvvp'],\n    'video/vnd.dece.sd': ['uvs', 'uvvs'],\n    'video/vnd.dece.video': ['uvv', 'uvvv'],\n    'video/vnd.dvb.file': ['dvb'],\n    'video/vnd.fvt': ['fvt'],\n    'video/vnd.mpegurl': ['mxu', 'm4u'],\n    'video/vnd.ms-playready.media.pyv': ['pyv'],\n    'video/vnd.uvvu.mp4': ['uvu', 'uvvu'],\n    'video/vnd.vivo': ['viv'],\n    'video/x-f4v': ['f4v'],\n    'video/x-fli': ['fli'],\n    'video/x-flv': ['flv'],\n    'video/x-m4v': ['m4v'],\n    'video/x-matroska': ['mkv', 'mk3d', 'mks'],\n    'video/x-mng': ['mng'],\n    'video/x-ms-asf': ['asf', 'asx'],\n    'video/x-ms-vob': ['vob'],\n    'video/x-ms-wm': ['wm'],\n    'video/x-ms-wmv': ['wmv'],\n    'video/x-ms-wmx': ['wmx'],\n    'video/x-ms-wvx': ['wvx'],\n    'video/x-msvideo': ['avi'],\n    'video/x-sgi-movie': ['movie'],\n    'video/x-smv': ['smv'],\n    'x-conference/x-cooltalk': ['ice'],\n};\nObject.freeze(types);\nexport default types;\n","const types = {\n    'application/andrew-inset': ['ez'],\n    'application/appinstaller': ['appinstaller'],\n    'application/applixware': ['aw'],\n    'application/appx': ['appx'],\n    'application/appxbundle': ['appxbundle'],\n    'application/atom+xml': ['atom'],\n    'application/atomcat+xml': ['atomcat'],\n    'application/atomdeleted+xml': ['atomdeleted'],\n    'application/atomsvc+xml': ['atomsvc'],\n    'application/atsc-dwd+xml': ['dwd'],\n    'application/atsc-held+xml': ['held'],\n    'application/atsc-rsat+xml': ['rsat'],\n    'application/automationml-aml+xml': ['aml'],\n    'application/automationml-amlx+zip': ['amlx'],\n    'application/bdoc': ['bdoc'],\n    'application/calendar+xml': ['xcs'],\n    'application/ccxml+xml': ['ccxml'],\n    'application/cdfx+xml': ['cdfx'],\n    'application/cdmi-capability': ['cdmia'],\n    'application/cdmi-container': ['cdmic'],\n    'application/cdmi-domain': ['cdmid'],\n    'application/cdmi-object': ['cdmio'],\n    'application/cdmi-queue': ['cdmiq'],\n    'application/cpl+xml': ['cpl'],\n    'application/cu-seeme': ['cu'],\n    'application/cwl': ['cwl'],\n    'application/dash+xml': ['mpd'],\n    'application/dash-patch+xml': ['mpp'],\n    'application/davmount+xml': ['davmount'],\n    'application/dicom': ['dcm'],\n    'application/docbook+xml': ['dbk'],\n    'application/dssc+der': ['dssc'],\n    'application/dssc+xml': ['xdssc'],\n    'application/ecmascript': ['ecma'],\n    'application/emma+xml': ['emma'],\n    'application/emotionml+xml': ['emotionml'],\n    'application/epub+zip': ['epub'],\n    'application/exi': ['exi'],\n    'application/express': ['exp'],\n    'application/fdf': ['fdf'],\n    'application/fdt+xml': ['fdt'],\n    'application/font-tdpfr': ['pfr'],\n    'application/geo+json': ['geojson'],\n    'application/gml+xml': ['gml'],\n    'application/gpx+xml': ['gpx'],\n    'application/gxf': ['gxf'],\n    'application/gzip': ['gz'],\n    'application/hjson': ['hjson'],\n    'application/hyperstudio': ['stk'],\n    'application/inkml+xml': ['ink', 'inkml'],\n    'application/ipfix': ['ipfix'],\n    'application/its+xml': ['its'],\n    'application/java-archive': ['jar', 'war', 'ear'],\n    'application/java-serialized-object': ['ser'],\n    'application/java-vm': ['class'],\n    'application/javascript': ['*js'],\n    'application/json': ['json', 'map'],\n    'application/json5': ['json5'],\n    'application/jsonml+json': ['jsonml'],\n    'application/ld+json': ['jsonld'],\n    'application/lgr+xml': ['lgr'],\n    'application/lost+xml': ['lostxml'],\n    'application/mac-binhex40': ['hqx'],\n    'application/mac-compactpro': ['cpt'],\n    'application/mads+xml': ['mads'],\n    'application/manifest+json': ['webmanifest'],\n    'application/marc': ['mrc'],\n    'application/marcxml+xml': ['mrcx'],\n    'application/mathematica': ['ma', 'nb', 'mb'],\n    'application/mathml+xml': ['mathml'],\n    'application/mbox': ['mbox'],\n    'application/media-policy-dataset+xml': ['mpf'],\n    'application/mediaservercontrol+xml': ['mscml'],\n    'application/metalink+xml': ['metalink'],\n    'application/metalink4+xml': ['meta4'],\n    'application/mets+xml': ['mets'],\n    'application/mmt-aei+xml': ['maei'],\n    'application/mmt-usd+xml': ['musd'],\n    'application/mods+xml': ['mods'],\n    'application/mp21': ['m21', 'mp21'],\n    'application/mp4': ['*mp4', '*mpg4', 'mp4s', 'm4p'],\n    'application/msix': ['msix'],\n    'application/msixbundle': ['msixbundle'],\n    'application/msword': ['doc', 'dot'],\n    'application/mxf': ['mxf'],\n    'application/n-quads': ['nq'],\n    'application/n-triples': ['nt'],\n    'application/node': ['cjs'],\n    'application/octet-stream': [\n        'bin',\n        'dms',\n        'lrf',\n        'mar',\n        'so',\n        'dist',\n        'distz',\n        'pkg',\n        'bpk',\n        'dump',\n        'elc',\n        'deploy',\n        'exe',\n        'dll',\n        'deb',\n        'dmg',\n        'iso',\n        'img',\n        'msi',\n        'msp',\n        'msm',\n        'buffer',\n    ],\n    'application/oda': ['oda'],\n    'application/oebps-package+xml': ['opf'],\n    'application/ogg': ['ogx'],\n    'application/omdoc+xml': ['omdoc'],\n    'application/onenote': [\n        'onetoc',\n        'onetoc2',\n        'onetmp',\n        'onepkg',\n        'one',\n        'onea',\n    ],\n    'application/oxps': ['oxps'],\n    'application/p2p-overlay+xml': ['relo'],\n    'application/patch-ops-error+xml': ['xer'],\n    'application/pdf': ['pdf'],\n    'application/pgp-encrypted': ['pgp'],\n    'application/pgp-keys': ['asc'],\n    'application/pgp-signature': ['sig', '*asc'],\n    'application/pics-rules': ['prf'],\n    'application/pkcs10': ['p10'],\n    'application/pkcs7-mime': ['p7m', 'p7c'],\n    'application/pkcs7-signature': ['p7s'],\n    'application/pkcs8': ['p8'],\n    'application/pkix-attr-cert': ['ac'],\n    'application/pkix-cert': ['cer'],\n    'application/pkix-crl': ['crl'],\n    'application/pkix-pkipath': ['pkipath'],\n    'application/pkixcmp': ['pki'],\n    'application/pls+xml': ['pls'],\n    'application/postscript': ['ai', 'eps', 'ps'],\n    'application/provenance+xml': ['provx'],\n    'application/pskc+xml': ['pskcxml'],\n    'application/raml+yaml': ['raml'],\n    'application/rdf+xml': ['rdf', 'owl'],\n    'application/reginfo+xml': ['rif'],\n    'application/relax-ng-compact-syntax': ['rnc'],\n    'application/resource-lists+xml': ['rl'],\n    'application/resource-lists-diff+xml': ['rld'],\n    'application/rls-services+xml': ['rs'],\n    'application/route-apd+xml': ['rapd'],\n    'application/route-s-tsid+xml': ['sls'],\n    'application/route-usd+xml': ['rusd'],\n    'application/rpki-ghostbusters': ['gbr'],\n    'application/rpki-manifest': ['mft'],\n    'application/rpki-roa': ['roa'],\n    'application/rsd+xml': ['rsd'],\n    'application/rss+xml': ['rss'],\n    'application/rtf': ['rtf'],\n    'application/sbml+xml': ['sbml'],\n    'application/scvp-cv-request': ['scq'],\n    'application/scvp-cv-response': ['scs'],\n    'application/scvp-vp-request': ['spq'],\n    'application/scvp-vp-response': ['spp'],\n    'application/sdp': ['sdp'],\n    'application/senml+xml': ['senmlx'],\n    'application/sensml+xml': ['sensmlx'],\n    'application/set-payment-initiation': ['setpay'],\n    'application/set-registration-initiation': ['setreg'],\n    'application/shf+xml': ['shf'],\n    'application/sieve': ['siv', 'sieve'],\n    'application/smil+xml': ['smi', 'smil'],\n    'application/sparql-query': ['rq'],\n    'application/sparql-results+xml': ['srx'],\n    'application/sql': ['sql'],\n    'application/srgs': ['gram'],\n    'application/srgs+xml': ['grxml'],\n    'application/sru+xml': ['sru'],\n    'application/ssdl+xml': ['ssdl'],\n    'application/ssml+xml': ['ssml'],\n    'application/swid+xml': ['swidtag'],\n    'application/tei+xml': ['tei', 'teicorpus'],\n    'application/thraud+xml': ['tfi'],\n    'application/timestamped-data': ['tsd'],\n    'application/toml': ['toml'],\n    'application/trig': ['trig'],\n    'application/ttml+xml': ['ttml'],\n    'application/ubjson': ['ubj'],\n    'application/urc-ressheet+xml': ['rsheet'],\n    'application/urc-targetdesc+xml': ['td'],\n    'application/voicexml+xml': ['vxml'],\n    'application/wasm': ['wasm'],\n    'application/watcherinfo+xml': ['wif'],\n    'application/widget': ['wgt'],\n    'application/winhlp': ['hlp'],\n    'application/wsdl+xml': ['wsdl'],\n    'application/wspolicy+xml': ['wspolicy'],\n    'application/xaml+xml': ['xaml'],\n    'application/xcap-att+xml': ['xav'],\n    'application/xcap-caps+xml': ['xca'],\n    'application/xcap-diff+xml': ['xdf'],\n    'application/xcap-el+xml': ['xel'],\n    'application/xcap-ns+xml': ['xns'],\n    'application/xenc+xml': ['xenc'],\n    'application/xfdf': ['xfdf'],\n    'application/xhtml+xml': ['xhtml', 'xht'],\n    'application/xliff+xml': ['xlf'],\n    'application/xml': ['xml', 'xsl', 'xsd', 'rng'],\n    'application/xml-dtd': ['dtd'],\n    'application/xop+xml': ['xop'],\n    'application/xproc+xml': ['xpl'],\n    'application/xslt+xml': ['*xsl', 'xslt'],\n    'application/xspf+xml': ['xspf'],\n    'application/xv+xml': ['mxml', 'xhvml', 'xvml', 'xvm'],\n    'application/yang': ['yang'],\n    'application/yin+xml': ['yin'],\n    'application/zip': ['zip'],\n    'application/zip+dotlottie': ['lottie'],\n    'audio/3gpp': ['*3gpp'],\n    'audio/aac': ['adts', 'aac'],\n    'audio/adpcm': ['adp'],\n    'audio/amr': ['amr'],\n    'audio/basic': ['au', 'snd'],\n    'audio/midi': ['mid', 'midi', 'kar', 'rmi'],\n    'audio/mobile-xmf': ['mxmf'],\n    'audio/mp3': ['*mp3'],\n    'audio/mp4': ['m4a', 'mp4a', 'm4b'],\n    'audio/mpeg': ['mpga', 'mp2', 'mp2a', 'mp3', 'm2a', 'm3a'],\n    'audio/ogg': ['oga', 'ogg', 'spx', 'opus'],\n    'audio/s3m': ['s3m'],\n    'audio/silk': ['sil'],\n    'audio/wav': ['wav'],\n    'audio/wave': ['*wav'],\n    'audio/webm': ['weba'],\n    'audio/xm': ['xm'],\n    'font/collection': ['ttc'],\n    'font/otf': ['otf'],\n    'font/ttf': ['ttf'],\n    'font/woff': ['woff'],\n    'font/woff2': ['woff2'],\n    'image/aces': ['exr'],\n    'image/apng': ['apng'],\n    'image/avci': ['avci'],\n    'image/avcs': ['avcs'],\n    'image/avif': ['avif'],\n    'image/bmp': ['bmp', 'dib'],\n    'image/cgm': ['cgm'],\n    'image/dicom-rle': ['drle'],\n    'image/dpx': ['dpx'],\n    'image/emf': ['emf'],\n    'image/fits': ['fits'],\n    'image/g3fax': ['g3'],\n    'image/gif': ['gif'],\n    'image/heic': ['heic'],\n    'image/heic-sequence': ['heics'],\n    'image/heif': ['heif'],\n    'image/heif-sequence': ['heifs'],\n    'image/hej2k': ['hej2'],\n    'image/ief': ['ief'],\n    'image/jaii': ['jaii'],\n    'image/jais': ['jais'],\n    'image/jls': ['jls'],\n    'image/jp2': ['jp2', 'jpg2'],\n    'image/jpeg': ['jpg', 'jpeg', 'jpe'],\n    'image/jph': ['jph'],\n    'image/jphc': ['jhc'],\n    'image/jpm': ['jpm', 'jpgm'],\n    'image/jpx': ['jpx', 'jpf'],\n    'image/jxl': ['jxl'],\n    'image/jxr': ['jxr'],\n    'image/jxra': ['jxra'],\n    'image/jxrs': ['jxrs'],\n    'image/jxs': ['jxs'],\n    'image/jxsc': ['jxsc'],\n    'image/jxsi': ['jxsi'],\n    'image/jxss': ['jxss'],\n    'image/ktx': ['ktx'],\n    'image/ktx2': ['ktx2'],\n    'image/pjpeg': ['jfif'],\n    'image/png': ['png'],\n    'image/sgi': ['sgi'],\n    'image/svg+xml': ['svg', 'svgz'],\n    'image/t38': ['t38'],\n    'image/tiff': ['tif', 'tiff'],\n    'image/tiff-fx': ['tfx'],\n    'image/webp': ['webp'],\n    'image/wmf': ['wmf'],\n    'message/disposition-notification': ['disposition-notification'],\n    'message/global': ['u8msg'],\n    'message/global-delivery-status': ['u8dsn'],\n    'message/global-disposition-notification': ['u8mdn'],\n    'message/global-headers': ['u8hdr'],\n    'message/rfc822': ['eml', 'mime', 'mht', 'mhtml'],\n    'model/3mf': ['3mf'],\n    'model/gltf+json': ['gltf'],\n    'model/gltf-binary': ['glb'],\n    'model/iges': ['igs', 'iges'],\n    'model/jt': ['jt'],\n    'model/mesh': ['msh', 'mesh', 'silo'],\n    'model/mtl': ['mtl'],\n    'model/obj': ['obj'],\n    'model/prc': ['prc'],\n    'model/step': ['step', 'stp', 'stpnc', 'p21', '210'],\n    'model/step+xml': ['stpx'],\n    'model/step+zip': ['stpz'],\n    'model/step-xml+zip': ['stpxz'],\n    'model/stl': ['stl'],\n    'model/u3d': ['u3d'],\n    'model/vrml': ['wrl', 'vrml'],\n    'model/x3d+binary': ['*x3db', 'x3dbz'],\n    'model/x3d+fastinfoset': ['x3db'],\n    'model/x3d+vrml': ['*x3dv', 'x3dvz'],\n    'model/x3d+xml': ['x3d', 'x3dz'],\n    'model/x3d-vrml': ['x3dv'],\n    'text/cache-manifest': ['appcache', 'manifest'],\n    'text/calendar': ['ics', 'ifb'],\n    'text/coffeescript': ['coffee', 'litcoffee'],\n    'text/css': ['css'],\n    'text/csv': ['csv'],\n    'text/html': ['html', 'htm', 'shtml'],\n    'text/jade': ['jade'],\n    'text/javascript': ['js', 'mjs'],\n    'text/jsx': ['jsx'],\n    'text/less': ['less'],\n    'text/markdown': ['md', 'markdown'],\n    'text/mathml': ['mml'],\n    'text/mdx': ['mdx'],\n    'text/n3': ['n3'],\n    'text/plain': ['txt', 'text', 'conf', 'def', 'list', 'log', 'in', 'ini'],\n    'text/richtext': ['rtx'],\n    'text/rtf': ['*rtf'],\n    'text/sgml': ['sgml', 'sgm'],\n    'text/shex': ['shex'],\n    'text/slim': ['slim', 'slm'],\n    'text/spdx': ['spdx'],\n    'text/stylus': ['stylus', 'styl'],\n    'text/tab-separated-values': ['tsv'],\n    'text/troff': ['t', 'tr', 'roff', 'man', 'me', 'ms'],\n    'text/turtle': ['ttl'],\n    'text/uri-list': ['uri', 'uris', 'urls'],\n    'text/vcard': ['vcard'],\n    'text/vtt': ['vtt'],\n    'text/wgsl': ['wgsl'],\n    'text/xml': ['*xml'],\n    'text/yaml': ['yaml', 'yml'],\n    'video/3gpp': ['3gp', '3gpp'],\n    'video/3gpp2': ['3g2'],\n    'video/h261': ['h261'],\n    'video/h263': ['h263'],\n    'video/h264': ['h264'],\n    'video/iso.segment': ['m4s'],\n    'video/jpeg': ['jpgv'],\n    'video/jpm': ['*jpm', '*jpgm'],\n    'video/mj2': ['mj2', 'mjp2'],\n    'video/mp2t': ['ts', 'm2t', 'm2ts', 'mts'],\n    'video/mp4': ['mp4', 'mp4v', 'mpg4'],\n    'video/mpeg': ['mpeg', 'mpg', 'mpe', 'm1v', 'm2v'],\n    'video/ogg': ['ogv'],\n    'video/quicktime': ['qt', 'mov'],\n    'video/webm': ['webm'],\n};\nObject.freeze(types);\nexport default types;\n","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Mime_extensionToType, _Mime_typeToExtension, _Mime_typeToExtensions;\nclass Mime {\n    constructor(...args) {\n        _Mime_extensionToType.set(this, new Map());\n        _Mime_typeToExtension.set(this, new Map());\n        _Mime_typeToExtensions.set(this, new Map());\n        for (const arg of args) {\n            this.define(arg);\n        }\n    }\n    define(typeMap, force = false) {\n        for (let [type, extensions] of Object.entries(typeMap)) {\n            type = type.toLowerCase();\n            extensions = extensions.map((ext) => ext.toLowerCase());\n            if (!__classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").has(type)) {\n                __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").set(type, new Set());\n            }\n            const allExtensions = __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").get(type);\n            let first = true;\n            for (let extension of extensions) {\n                const starred = extension.startsWith('*');\n                extension = starred ? extension.slice(1) : extension;\n                allExtensions?.add(extension);\n                if (first) {\n                    __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\").set(type, extension);\n                }\n                first = false;\n                if (starred)\n                    continue;\n                const currentType = __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").get(extension);\n                if (currentType && currentType != type && !force) {\n                    throw new Error(`\"${type} -> ${extension}\" conflicts with \"${currentType} -> ${extension}\". Pass \\`force=true\\` to override this definition.`);\n                }\n                __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").set(extension, type);\n            }\n        }\n        return this;\n    }\n    getType(path) {\n        if (typeof path !== 'string')\n            return null;\n        const last = path.replace(/^.*[/\\\\]/s, '').toLowerCase();\n        const ext = last.replace(/^.*\\./s, '').toLowerCase();\n        const hasPath = last.length < path.length;\n        const hasDot = ext.length < last.length - 1;\n        if (!hasDot && hasPath)\n            return null;\n        return __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").get(ext) ?? null;\n    }\n    getExtension(type) {\n        if (typeof type !== 'string')\n            return null;\n        type = type?.split?.(';')[0];\n        return ((type && __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\").get(type.trim().toLowerCase())) ?? null);\n    }\n    getAllExtensions(type) {\n        if (typeof type !== 'string')\n            return null;\n        return __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").get(type.toLowerCase()) ?? null;\n    }\n    _freeze() {\n        this.define = () => {\n            throw new Error('define() not allowed for built-in Mime objects. See https://github.com/broofa/mime/blob/main/README.md#custom-mime-instances');\n        };\n        Object.freeze(this);\n        for (const extensions of __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").values()) {\n            Object.freeze(extensions);\n        }\n        return this;\n    }\n    _getTestState() {\n        return {\n            types: __classPrivateFieldGet(this, _Mime_extensionToType, \"f\"),\n            extensions: __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\"),\n        };\n    }\n}\n_Mime_extensionToType = new WeakMap(), _Mime_typeToExtension = new WeakMap(), _Mime_typeToExtensions = new WeakMap();\nexport default Mime;\n","import otherTypes from '../types/other.js';\nimport standardTypes from '../types/standard.js';\nimport Mime from './Mime.js';\nexport { default as Mime } from './Mime.js';\nexport default new Mime(standardTypes, otherTypes)._freeze();\n","'use strict';\n\nfunction isHighSurrogate(codePoint) {\n  return codePoint >= 0xd800 && codePoint <= 0xdbff;\n}\n\nfunction isLowSurrogate(codePoint) {\n  return codePoint >= 0xdc00 && codePoint <= 0xdfff;\n}\n\n// Truncate string by size in bytes\nmodule.exports = function truncate(getLength, string, byteLength) {\n  if (typeof string !== \"string\") {\n    throw new Error(\"Input must be string\");\n  }\n\n  var charLength = string.length;\n  var curByteLength = 0;\n  var codePoint;\n  var segment;\n\n  for (var i = 0; i < charLength; i += 1) {\n    codePoint = string.charCodeAt(i);\n    segment = string[i];\n\n    if (isHighSurrogate(codePoint) && isLowSurrogate(string.charCodeAt(i + 1))) {\n      i += 1;\n      segment += string[i];\n    }\n\n    curByteLength += getLength(segment);\n\n    if (curByteLength === byteLength) {\n      return string.slice(0, i + 1);\n    }\n    else if (curByteLength > byteLength) {\n      return string.slice(0, i - segment.length + 1);\n    }\n  }\n\n  return string;\n};\n\n","'use strict';\n\nfunction isHighSurrogate(codePoint) {\n  return codePoint >= 0xd800 && codePoint <= 0xdbff;\n}\n\nfunction isLowSurrogate(codePoint) {\n  return codePoint >= 0xdc00 && codePoint <= 0xdfff;\n}\n\n// Truncate string by size in bytes\nmodule.exports = function getByteLength(string) {\n  if (typeof string !== \"string\") {\n    throw new Error(\"Input must be string\");\n  }\n\n  var charLength = string.length;\n  var byteLength = 0;\n  var codePoint = null;\n  var prevCodePoint = null;\n  for (var i = 0; i < charLength; i++) {\n    codePoint = string.charCodeAt(i);\n    // handle 4-byte non-BMP chars\n    // low surrogate\n    if (isLowSurrogate(codePoint)) {\n      // when parsing previous hi-surrogate, 3 is added to byteLength\n      if (prevCodePoint != null && isHighSurrogate(prevCodePoint)) {\n        byteLength += 1;\n      }\n      else {\n        byteLength += 3;\n      }\n    }\n    else if (codePoint <= 0x7f ) {\n      byteLength += 1;\n    }\n    else if (codePoint >= 0x80 && codePoint <= 0x7ff) {\n      byteLength += 2;\n    }\n    else if (codePoint >= 0x800 && codePoint <= 0xffff) {\n      byteLength += 3;\n    }\n    prevCodePoint = codePoint;\n  }\n\n  return byteLength;\n};\n","'use strict';\n\nvar truncate = require(\"./lib/truncate\");\nvar getLength = require(\"utf8-byte-length/browser\");\nmodule.exports = truncate.bind(null, getLength);\n","/*jshint node:true*/\n'use strict';\n\n/**\n * Replaces characters in strings that are illegal/unsafe for filenames.\n * Unsafe characters are either removed or replaced by a substitute set\n * in the optional `options` object.\n *\n * Illegal Characters on Various Operating Systems\n * / ? < > \\ : * | \"\n * https://kb.acronis.com/content/39790\n *\n * Unicode Control codes\n * C0 0x00-0x1f & C1 (0x80-0x9f)\n * http://en.wikipedia.org/wiki/C0_and_C1_control_codes\n *\n * Reserved filenames on Unix-based systems (\".\", \"..\")\n * Reserved filenames in Windows (\"CON\", \"PRN\", \"AUX\", \"NUL\", \"COM1\",\n * \"COM2\", \"COM3\", \"COM4\", \"COM5\", \"COM6\", \"COM7\", \"COM8\", \"COM9\",\n * \"LPT1\", \"LPT2\", \"LPT3\", \"LPT4\", \"LPT5\", \"LPT6\", \"LPT7\", \"LPT8\", and\n * \"LPT9\") case-insesitively and with or without filename extensions.\n *\n * Capped at 255 characters in length.\n * http://unix.stackexchange.com/questions/32795/what-is-the-maximum-allowed-filename-and-folder-size-with-ecryptfs\n *\n * @param  {String} input   Original filename\n * @param  {Object} options {replacement: String | Function }\n * @return {String}         Sanitized filename\n */\n\nvar truncate = require(\"truncate-utf8-bytes\");\n\nvar illegalRe = /[\\/\\?<>\\\\:\\*\\|\"]/g;\nvar controlRe = /[\\x00-\\x1f\\x80-\\x9f]/g;\nvar reservedRe = /^\\.+$/;\nvar windowsReservedRe = /^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\\..*)?$/i;\nvar windowsTrailingRe = /[\\. ]+$/;\n\nfunction sanitize(input, replacement) {\n  if (typeof input !== 'string') {\n    throw new Error('Input must be string');\n  }\n  var sanitized = input\n    .replace(illegalRe, replacement)\n    .replace(controlRe, replacement)\n    .replace(reservedRe, replacement)\n    .replace(windowsReservedRe, replacement)\n    .replace(windowsTrailingRe, replacement);\n  return truncate(sanitized, 255);\n}\n\nmodule.exports = function (input, options) {\n  var replacement = (options && options.replacement) || '';\n  var output = sanitize(input, replacement);\n  if (replacement === '') {\n    return output;\n  }\n  return sanitize(output, '');\n};\n","import { getHash } from '@sveltia/utils/crypto';\nimport { getPathInfo } from '@sveltia/utils/file';\nimport { compare, escapeRegExp } from '@sveltia/utils/string';\nimport sanitize from 'sanitize-filename';\nimport { get } from 'svelte/store';\nimport { _, locale as appLocale } from 'svelte-i18n';\n\nimport { slugify } from '$lib/services/common/slug';\n\n/**\n * Create a regular expression that matches the given path.\n * @param {string} path Path.\n * @param {(segment: string) => string} replacer Function to replace each path segment.\n * @returns {RegExp} Regular expression.\n */\nexport const createPathRegEx = (path, replacer) =>\n  new RegExp(`^${path.split('/').map(replacer).join('\\\\/')}\\\\b`);\n\n/**\n * Encode the given (partial) file path or file name. Since {@link encodeURIComponent} encodes\n * slashes, we need to split and join. Also, encode some more characters, including `!`, `(` and\n * `)`, which affect the Markdown syntax like images and links. The `@` prefix is an exception; it\n * shouldn’t be encoded.\n * @param {string} path Original path.\n * @returns {string} Encoded path.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent#encoding_for_rfc3986\n */\nexport const encodeFilePath = (path) => {\n  const hasAtPrefix = path.startsWith('@');\n\n  if (hasAtPrefix) {\n    path = path.slice(1);\n  }\n\n  path = path\n    .split('/')\n    .map((str) =>\n      encodeURIComponent(str).replace(\n        /[!'()*]/g,\n        (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`,\n      ),\n    )\n    .join('/');\n\n  if (hasAtPrefix) {\n    return `@${path}`;\n  }\n\n  return path;\n};\n\n/**\n * Encode the given (partial) file path or file name. We can use {@link decodeURIComponent} as is.\n * @param {string} path Original path.\n * @returns {string} Decoded path.\n */\nexport const decodeFilePath = (path) => decodeURIComponent(path);\n\n/**\n * Format the given file size in bytes, KB, MB, GB or TB.\n * @param {number} size File size.\n * @returns {string} Formatted size.\n */\nexport const formatSize = (size) => {\n  const formatter = new Intl.NumberFormat(/** @type {string} */ (get(appLocale)), {\n    maximumFractionDigits: 1,\n  });\n\n  const kb = 1000;\n  const mb = kb * 1000;\n  const gb = mb * 1000;\n  const tb = gb * 1000;\n\n  if (size < kb) {\n    return get(_)('file_size_units.b', { values: { size: formatter.format(size) } });\n  }\n\n  if (size < mb) {\n    return get(_)('file_size_units.kb', { values: { size: formatter.format(size / kb) } });\n  }\n\n  if (size < gb) {\n    return get(_)('file_size_units.mb', { values: { size: formatter.format(size / mb) } });\n  }\n\n  if (size < tb) {\n    return get(_)('file_size_units.gb', { values: { size: formatter.format(size / gb) } });\n  }\n\n  return get(_)('file_size_units.tb', { values: { size: formatter.format(size / tb) } });\n};\n\n/**\n * Check if the given file name or slug has duplicate(s) or its variant in the other names. If\n * found, rename it by prepending a number like `summer-beach-2.jpg`.\n * @param {string} name Original name.\n * @param {string[]} otherNames Other names (of files in the same folder).\n * @returns {string} Determined name.\n */\nexport const renameIfNeeded = (name, otherNames) => {\n  if (!otherNames.length) {\n    return name;\n  }\n\n  const { filename: slug, extension } = getPathInfo(name);\n\n  const regex = new RegExp(\n    `^${escapeRegExp(slug)}(?:-(?<num>\\\\d+?))?${extension ? `\\\\.${extension}` : ''}$`,\n  );\n\n  const dupName = otherNames\n    .sort((a, b) => compare(a.split('.')[0], b.split('.')[0]))\n    .findLast((p) => regex.test(p));\n\n  if (!dupName) {\n    return name;\n  }\n\n  const number = Number(dupName.match(regex)?.groups?.num ?? 0) + 1;\n\n  return `${slug}-${number}${extension ? `.${extension}` : ''}`;\n};\n\n/**\n * Format the file name for uploading, ensuring it is sanitized and optionally slugified.\n * @param {string} originalName The original file name.\n * @param {object} [options] Options.\n * @param {boolean} [options.slugificationEnabled] Whether to slugify the file name.\n * @param {string[]} [options.assetNamesInSameFolder] List of asset names in the same folder to\n * avoid name conflicts.\n * @returns {string} The formatted file name, sanitized and possibly slugified.\n */\nexport const formatFileName = (\n  originalName,\n  { slugificationEnabled = false, assetNamesInSameFolder = [] } = {},\n) => {\n  let fileName = sanitize(originalName.normalize());\n\n  if (slugificationEnabled) {\n    const { filename, extension } = getPathInfo(fileName);\n\n    fileName = `${slugify(filename)}${extension ? `.${extension}` : ''}`;\n  }\n\n  return renameIfNeeded(fileName, assetNamesInSameFolder);\n};\n\n/**\n * Join the given path segments while ignoring any falsy value.\n * @param {(string | null | undefined)[]} segments List of path segments.\n * @returns {string} Path.\n */\nexport const createPath = (segments) => segments.filter(Boolean).join('/');\n\n/**\n * Resolve the given file path. This processes only dot(s) in the middle of the path; leading dots\n * like `../../foo/image.jpg` will be untouched.\n * @param {string} path Unresolved path, e.g. `foo/bar/baz/../../image.jpg`.\n * @returns {string} Resolved path, e.g. `foo/image.jpg`.\n */\nexport const resolvePath = (path) => {\n  /** @type {(string | null)[]} */\n  const segments = path.split('/');\n  let nameFound = false;\n\n  segments.forEach((segment, index) => {\n    if (segment === '.' || segment === '..') {\n      if (nameFound) {\n        segments[index] = null;\n\n        if (segment === '..') {\n          const lastIndex = segments.findLastIndex((s, i) => !!s && i < index);\n\n          if (lastIndex > -1) {\n            segments[lastIndex] = null;\n          }\n        }\n      }\n    } else {\n      nameFound = true;\n    }\n  });\n\n  return createPath(segments);\n};\n\n/**\n * Get the Blob object from the given file or blob input. If the input is a string, it is treated as\n * the file content and converted to a Blob with `text/plain` MIME type.\n * @param {File | Blob | string} input File or Blob object, or a string representing the file\n * content.\n * @returns {Blob} Blob object representing the file.\n */\nexport const getBlob = (input) =>\n  typeof input === 'string' ? new Blob([input], { type: 'text/plain' }) : input;\n\n/**\n * Get the Git object ID (SHA-1 hash) of the given file or blob.\n * @param {File | Blob | string} input File or Blob object, or a string representing the file\n * content.\n * @returns {Promise<string>} Git object ID (SHA-1 hash) of the file.\n * @see https://stackoverflow.com/a/68806436\n * @see https://github.com/Richienb/git-hash-object/blob/master/index.js\n */\nexport const getGitHash = async (input) => {\n  const file = getBlob(input);\n  const buffer = await file.arrayBuffer();\n\n  return getHash(new Blob([`blob ${buffer.byteLength}\\0`, buffer]));\n};\n","export default class DataView {\n    constructor(buffer) {\n        if (bufferTypeIsUnsupported(buffer)) {\n            throw new Error('DataView: Passed buffer type is unsupported.');\n        }\n\n        this.buffer = buffer;\n        this.byteLength = this.buffer.length;\n    }\n\n    getUint8(offset) {\n        return this.buffer.readUInt8(offset);\n    }\n\n    getUint16(offset, littleEndian) {\n        if (littleEndian) {\n            return this.buffer.readUInt16LE(offset);\n        }\n        return this.buffer.readUInt16BE(offset);\n    }\n\n    getUint32(offset, littleEndian) {\n        if (littleEndian) {\n            return this.buffer.readUInt32LE(offset);\n        }\n        return this.buffer.readUInt32BE(offset);\n    }\n\n    getInt32(offset, littleEndian) {\n        if (littleEndian) {\n            return this.buffer.readInt32LE(offset);\n        }\n        return this.buffer.readInt32BE(offset);\n    }\n}\n\nfunction bufferTypeIsUnsupported(buffer) {\n    return typeof buffer !== 'object'\n        || buffer.length === undefined\n        || buffer.readUInt8 === undefined\n        || buffer.readUInt16LE === undefined\n        || buffer.readUInt16BE === undefined\n        || buffer.readUInt32LE === undefined\n        || buffer.readUInt32BE === undefined\n        || buffer.readInt32LE === undefined\n        || buffer.readInt32BE === undefined;\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport DataViewWrapper from './dataview.js';\n\nexport function getDataView(data, byteOffset, byteLength) {\n    try {\n        return new DataView(data, byteOffset, byteLength);\n    } catch (error) {\n        return new DataViewWrapper(data, byteOffset, byteLength);\n    }\n}\n\nexport function getStringFromDataView(dataView, offset, length) {\n    const chars = [];\n    for (let i = 0; i < length && offset + i < dataView.byteLength; i++) {\n        chars.push(dataView.getUint8(offset + i));\n    }\n    return getStringValueFromArray(chars);\n}\n\nexport function getNullTerminatedStringFromDataView(dataView, offset) {\n    const chars = [];\n    let i = 0;\n    while (offset + i < dataView.byteLength) {\n        const char = dataView.getUint8(offset + i);\n        if (char === 0) {\n            break;\n        }\n        chars.push(char);\n        i++;\n    }\n    return getStringValueFromArray(chars);\n}\n\nexport function getUnicodeStringFromDataView(dataView, offset, length) {\n    const chars = [];\n    for (let i = 0; i < length && offset + i < dataView.byteLength; i += 2) {\n        chars.push(dataView.getUint16(offset + i));\n    }\n    if (chars[chars.length - 1] === 0) {\n        chars.pop();\n    }\n    return getStringValueFromArray(chars);\n}\n\nexport function getPascalStringFromDataView(dataView, offset) {\n    const size = dataView.getUint8(offset);\n    const string = getStringFromDataView(dataView, offset + 1, size);\n    return [size, string];\n}\n\nexport function getStringValueFromArray(charArray) {\n    return charArray.map((charCode) => String.fromCharCode(charCode)).join('');\n}\n\nexport function getCharacterArray(string) {\n    return string.split('').map((character) => character.charCodeAt(0));\n}\n\nexport function objectAssign() {\n    for (let i = 1; i < arguments.length; i++) {\n        for (const property in arguments[i]) {\n            arguments[0][property] = arguments[i][property];\n        }\n    }\n\n    return arguments[0];\n}\n\nexport function deferInit(object, key, initializer) {\n    let initialized = false;\n    Object.defineProperty(object, key, {\n        get() {\n            if (!initialized) {\n                initialized = true;\n                Object.defineProperty(object, key, {\n                    configurable: true,\n                    enumerable: true,\n                    value: initializer.apply(object),\n                    writable: true\n                });\n            }\n            return object[key];\n        },\n        configurable: true,\n        enumerable: true\n    });\n}\n\nexport function getBase64Image(image) {\n    if (typeof btoa !== 'undefined') {\n        if (typeof image === 'string') {\n            // This only happens during the build tests using Node 16+ (npm run test:build).\n            return btoa(image);\n        }\n        // IE11- does not implement reduce on the Uint8Array prototype.\n        return btoa(Array.prototype.reduce.call(new Uint8Array(image), (data, byte) => data + String.fromCharCode(byte), ''));\n    }\n    if (typeof Buffer === 'undefined') {\n        return undefined;\n    }\n    if (typeof Buffer.from !== 'undefined') { // eslint-disable-line no-undef\n        return Buffer.from(image).toString('base64'); // eslint-disable-line no-undef\n    }\n    return (new Buffer(image)).toString('base64'); // eslint-disable-line no-undef\n}\n\nexport function dataUriToBuffer(dataUri) {\n    const data = dataUri.substring(dataUri.indexOf(',') + 1);\n\n    if (dataUri.indexOf(';base64') !== -1) {\n        if (typeof atob !== 'undefined') {\n            return Uint8Array.from(atob(data), (char) => char.charCodeAt(0)).buffer;\n        }\n        if (typeof Buffer === 'undefined') {\n            return undefined;\n        }\n        if (typeof Buffer.from !== 'undefined') { // eslint-disable-line no-undef\n            return Buffer.from(data, 'base64'); // eslint-disable-line no-undef\n        }\n        return new Buffer(data, 'base64'); // eslint-disable-line no-undef\n    }\n\n    const decodedData = decodeURIComponent(data);\n    if (typeof Buffer !== 'undefined') {\n        if (typeof Buffer.from !== 'undefined') { // eslint-disable-line no-undef\n            return Buffer.from(decodedData); // eslint-disable-line no-undef\n        }\n        return new Buffer(decodedData); // eslint-disable-line no-undef\n    }\n    return Uint8Array.from(decodedData, (char) => char.charCodeAt(0)).buffer;\n}\n\nexport function padStart(string, length, character) {\n    const padding = strRepeat(character, length - string.length);\n    return padding + string;\n}\n\nexport function parseFloatRadix(string, radix) {\n    return parseInt(string.replace('.', ''), radix)\n        / Math.pow(radix, (string.split('.')[1] || '').length);\n}\n\nexport function strRepeat(string, num) {\n    return new Array(num + 1).join(string);\n}\n\nexport const COMPRESSION_METHOD_NONE = undefined;\nexport const COMPRESSION_METHOD_DEFLATE = 0;\n\nexport function decompress(dataView, compressionMethod, encoding, returnType = 'string') {\n    if (compressionMethod === COMPRESSION_METHOD_DEFLATE) {\n        if (typeof DecompressionStream === 'function') {\n            const decompressionStream = new DecompressionStream('deflate');\n            const decompressedStream = new Blob([dataView]).stream().pipeThrough(decompressionStream);\n            if (returnType === 'dataview') {\n                return new Response(decompressedStream).arrayBuffer().then((arrayBuffer) => new DataView(arrayBuffer));\n            }\n            return new Response(decompressedStream).arrayBuffer()\n                .then((buffer) => new TextDecoder(encoding).decode(buffer));\n        }\n    }\n    if (compressionMethod !== undefined) {\n        return Promise.reject(`Unknown compression method ${compressionMethod}.`);\n    }\n    return dataView;\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nexport default {\n    USE_FILE: true,\n    USE_JFIF: true,\n    USE_PNG_FILE: true,\n    USE_EXIF: true,\n    USE_IPTC: true,\n    USE_XMP: true,\n    USE_ICC: true,\n    USE_MPF: true,\n    USE_PHOTOSHOP: true,\n    USE_THUMBNAIL: true,\n    USE_TIFF: true,\n    USE_JPEG: true,\n    USE_PNG: true,\n    USE_HEIC: true,\n    USE_AVIF: true,\n    USE_WEBP: true,\n    USE_GIF: true,\n    USE_MAKER_NOTES: true\n};\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nexport function getStringValue(value) {\n    return value.map((charCode) => String.fromCharCode(charCode)).join('');\n}\n\nexport function getEncodedString(value) {\n    if (value.length >= 8) {\n        const encoding = getStringValue(value.slice(0, 8));\n\n        if (encoding === 'ASCII\\x00\\x00\\x00') {\n            return getStringValue(value.slice(8));\n        } else if (encoding === 'JIS\\x00\\x00\\x00\\x00\\x00') {\n            return '[JIS encoded text]';\n        } else if (encoding === 'UNICODE\\x00') {\n            return '[Unicode encoded text]';\n        } else if (encoding === '\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00') {\n            return '[Undefined encoding]';\n        }\n    }\n\n    return 'Undefined';\n}\n\nexport function getCalculatedGpsValue(value) {\n    return (value[0][0] / value[0][1]) + (value[1][0] / value[1][1]) / 60 + (value[2][0] / value[2][1]) / 3600;\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nconst LITTLE_ENDIAN = 0x4949;\nconst BIG_ENDIAN = 0x4d4d;\n\nexport default {\n    BIG_ENDIAN,\n    LITTLE_ENDIAN,\n    getByteOrder\n};\n\nfunction getByteOrder(dataView, tiffHeaderOffset) {\n    if (dataView.getUint16(tiffHeaderOffset) === LITTLE_ENDIAN) {\n        return LITTLE_ENDIAN;\n    } else if (dataView.getUint16(tiffHeaderOffset) === BIG_ENDIAN) {\n        return BIG_ENDIAN;\n    }\n    throw new Error('Illegal byte order value. Faulty image.');\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport ByteOrder from './byte-order.js';\nimport Constants from './constants.js';\n\nexport default {\n    isTiffFile,\n    findTiffOffsets\n};\n\nfunction isTiffFile(dataView) {\n    const MIN_TIFF_DATA_BUFFER_LENGTH = 4;\n\n    return !!dataView && (dataView.byteLength >= MIN_TIFF_DATA_BUFFER_LENGTH) && hasTiffMarker(dataView);\n}\n\nfunction hasTiffMarker(dataView) {\n    const TIFF_ID = 0x2a;\n    const TIFF_ID_OFFSET = 2;\n\n    const littleEndian = dataView.getUint16(0) === ByteOrder.LITTLE_ENDIAN;\n    return dataView.getUint16(TIFF_ID_OFFSET, littleEndian) === TIFF_ID;\n}\n\nfunction findTiffOffsets() {\n    const TIFF_FILE_HEADER_OFFSET = 0;\n\n    if (Constants.USE_EXIF) {\n        return {\n            hasAppMarkers: true,\n            tiffHeaderOffset: TIFF_FILE_HEADER_OFFSET\n        };\n    }\n    return {};\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport {getStringFromDataView} from './utils.js';\nimport Constants from './constants.js';\n\nexport default {\n    isJpegFile,\n    findJpegOffsets\n};\n\nconst MIN_JPEG_DATA_BUFFER_LENGTH = 2;\nconst JPEG_ID = 0xffd8;\nconst JPEG_ID_SIZE = 2;\nconst APP_ID_OFFSET = 4;\nconst APP_MARKER_SIZE = 2;\nconst JFIF_DATA_OFFSET = 2; // From start of APP0 marker.\nconst TIFF_HEADER_OFFSET = 10; // From start of APP1 marker.\nconst IPTC_DATA_OFFSET = 18; // From start of APP13 marker.\nconst XMP_DATA_OFFSET = 33; // From start of APP1 marker.\nconst XMP_EXTENDED_DATA_OFFSET = 79; // From start of APP1 marker including GUID, total length, and offset.\nconst APP2_ICC_DATA_OFFSET = 18; // From start of APP2 marker including marker and chunk/chunk total numbers.\nconst MPF_DATA_OFFSET = 8;\n\nconst APP2_ICC_IDENTIFIER = 'ICC_PROFILE\\0';\nconst ICC_CHUNK_NUMBER_OFFSET = APP_ID_OFFSET + APP2_ICC_IDENTIFIER.length;\nconst ICC_TOTAL_CHUNKS_OFFSET = ICC_CHUNK_NUMBER_OFFSET + 1;\n\nconst APP2_MPF_IDENTIFIER = 'MPF\\0';\n\nconst SOF0_MARKER = 0xffc0;\nconst SOF2_MARKER = 0xffc2;\nconst DHT_MARKER = 0xffc4;\nconst DQT_MARKER = 0xffdb;\nconst DRI_MARKER = 0xffdd;\nconst SOS_MARKER = 0xffda;\n\nconst APP0_MARKER = 0xffe0;\nconst APP1_MARKER = 0xffe1;\nconst APP2_MARKER = 0xffe2;\nconst APP13_MARKER = 0xffed;\nconst APP15_MARKER = 0xffef;\nconst COMMENT_MARKER = 0xfffe;\n\n// Any number of fill bytes can be placed before an app marker. It's actually the first 0xff that is the\n// fill byte and the next 0xff is either another fill byte or the first half of the next app marker.\nconst FILL_BYTE = 0xffff;\n\nconst APP0_JFIF_IDENTIFIER = 'JFIF';\nconst APP1_EXIF_IDENTIFIER = 'Exif';\nconst APP1_XMP_IDENTIFIER = 'http://ns.adobe.com/xap/1.0/\\x00';\nconst APP1_XMP_EXTENDED_IDENTIFIER = 'http://ns.adobe.com/xmp/extension/\\x00';\nconst APP13_IPTC_IDENTIFIER = 'Photoshop 3.0';\n\nfunction isJpegFile(dataView) {\n    return !!dataView && (dataView.byteLength >= MIN_JPEG_DATA_BUFFER_LENGTH) && (dataView.getUint16(0) === JPEG_ID);\n}\n\nfunction findJpegOffsets(dataView) {\n    let appMarkerPosition = JPEG_ID_SIZE;\n    let fieldLength;\n    let sof0DataOffset;\n    let sof2DataOffset;\n    let jfifDataOffset;\n    let tiffHeaderOffset;\n    let iptcDataOffset;\n    let xmpChunks;\n    let iccChunks;\n    let mpfDataOffset;\n\n    while (appMarkerPosition + APP_ID_OFFSET + 5 <= dataView.byteLength) {\n        if (Constants.USE_FILE && isSOF0Marker(dataView, appMarkerPosition)) {\n            fieldLength = dataView.getUint16(appMarkerPosition + APP_MARKER_SIZE);\n            sof0DataOffset = appMarkerPosition + APP_MARKER_SIZE;\n        } else if (Constants.USE_FILE && isSOF2Marker(dataView, appMarkerPosition)) {\n            fieldLength = dataView.getUint16(appMarkerPosition + APP_MARKER_SIZE);\n            sof2DataOffset = appMarkerPosition + APP_MARKER_SIZE;\n        } else if (Constants.USE_JFIF && isApp0JfifMarker(dataView, appMarkerPosition)) {\n            fieldLength = dataView.getUint16(appMarkerPosition + APP_MARKER_SIZE);\n            jfifDataOffset = appMarkerPosition + JFIF_DATA_OFFSET;\n        } else if (Constants.USE_EXIF && isApp1ExifMarker(dataView, appMarkerPosition)) {\n            fieldLength = dataView.getUint16(appMarkerPosition + APP_MARKER_SIZE);\n            tiffHeaderOffset = appMarkerPosition + TIFF_HEADER_OFFSET;\n        } else if (Constants.USE_XMP && isApp1XmpMarker(dataView, appMarkerPosition)) {\n            if (!xmpChunks) {\n                xmpChunks = [];\n            }\n            fieldLength = dataView.getUint16(appMarkerPosition + APP_MARKER_SIZE);\n            xmpChunks.push(getXmpChunkDetails(appMarkerPosition, fieldLength));\n        } else if (Constants.USE_XMP && isApp1ExtendedXmpMarker(dataView, appMarkerPosition)) {\n            if (!xmpChunks) {\n                xmpChunks = [];\n            }\n            fieldLength = dataView.getUint16(appMarkerPosition + APP_MARKER_SIZE);\n            xmpChunks.push(getExtendedXmpChunkDetails(appMarkerPosition, fieldLength));\n        } else if (Constants.USE_IPTC && isApp13PhotoshopMarker(dataView, appMarkerPosition)) {\n            fieldLength = dataView.getUint16(appMarkerPosition + APP_MARKER_SIZE);\n            iptcDataOffset = appMarkerPosition + IPTC_DATA_OFFSET;\n        } else if (Constants.USE_ICC && isApp2ICCMarker(dataView, appMarkerPosition)) {\n            fieldLength = dataView.getUint16(appMarkerPosition + APP_MARKER_SIZE);\n            const iccDataOffset = appMarkerPosition + APP2_ICC_DATA_OFFSET;\n            const iccDataLength = fieldLength - (APP2_ICC_DATA_OFFSET - APP_MARKER_SIZE);\n\n            const iccChunkNumber = dataView.getUint8(appMarkerPosition + ICC_CHUNK_NUMBER_OFFSET);\n            const iccChunksTotal = dataView.getUint8(appMarkerPosition + ICC_TOTAL_CHUNKS_OFFSET);\n            if (!iccChunks) {\n                iccChunks = [];\n            }\n            iccChunks.push({offset: iccDataOffset, length: iccDataLength, chunkNumber: iccChunkNumber, chunksTotal: iccChunksTotal});\n        } else if (Constants.USE_MPF && isApp2MPFMarker(dataView, appMarkerPosition)) {\n            fieldLength = dataView.getUint16(appMarkerPosition + APP_MARKER_SIZE);\n            mpfDataOffset = appMarkerPosition + MPF_DATA_OFFSET;\n        } else if (isAppMarker(dataView, appMarkerPosition)) {\n            fieldLength = dataView.getUint16(appMarkerPosition + APP_MARKER_SIZE);\n        } else if (isFillByte(dataView, appMarkerPosition)) {\n            appMarkerPosition++;\n            continue;\n        } else {\n            break;\n        }\n        appMarkerPosition += APP_MARKER_SIZE + fieldLength;\n    }\n\n    return {\n        hasAppMarkers: appMarkerPosition > JPEG_ID_SIZE,\n        fileDataOffset: sof0DataOffset || sof2DataOffset,\n        jfifDataOffset,\n        tiffHeaderOffset,\n        iptcDataOffset,\n        xmpChunks,\n        iccChunks,\n        mpfDataOffset\n    };\n}\n\nfunction isSOF0Marker(dataView, appMarkerPosition) {\n    return (dataView.getUint16(appMarkerPosition) === SOF0_MARKER);\n}\n\nfunction isSOF2Marker(dataView, appMarkerPosition) {\n    return (dataView.getUint16(appMarkerPosition) === SOF2_MARKER);\n}\n\nfunction isApp2ICCMarker(dataView, appMarkerPosition) {\n    const markerIdLength = APP2_ICC_IDENTIFIER.length;\n\n    return (dataView.getUint16(appMarkerPosition) === APP2_MARKER)\n        && (getStringFromDataView(dataView, appMarkerPosition + APP_ID_OFFSET, markerIdLength) === APP2_ICC_IDENTIFIER);\n}\n\nfunction isApp2MPFMarker(dataView, appMarkerPosition) {\n    const markerIdLength = APP2_MPF_IDENTIFIER.length;\n\n    return (dataView.getUint16(appMarkerPosition) === APP2_MARKER)\n        && (getStringFromDataView(dataView, appMarkerPosition + APP_ID_OFFSET, markerIdLength) === APP2_MPF_IDENTIFIER);\n}\n\nfunction isApp0JfifMarker(dataView, appMarkerPosition) {\n    const markerIdLength = APP0_JFIF_IDENTIFIER.length;\n\n    return (dataView.getUint16(appMarkerPosition) === APP0_MARKER)\n        && (getStringFromDataView(dataView, appMarkerPosition + APP_ID_OFFSET, markerIdLength) === APP0_JFIF_IDENTIFIER)\n        && (dataView.getUint8(appMarkerPosition + APP_ID_OFFSET + markerIdLength) === 0x00);\n}\n\nfunction isApp1ExifMarker(dataView, appMarkerPosition) {\n    const markerIdLength = APP1_EXIF_IDENTIFIER.length;\n\n    return (dataView.getUint16(appMarkerPosition) === APP1_MARKER)\n        && (getStringFromDataView(dataView, appMarkerPosition + APP_ID_OFFSET, markerIdLength) === APP1_EXIF_IDENTIFIER)\n        && (dataView.getUint8(appMarkerPosition + APP_ID_OFFSET + markerIdLength) === 0x00);\n}\n\nfunction isApp1XmpMarker(dataView, appMarkerPosition) {\n    return (dataView.getUint16(appMarkerPosition) === APP1_MARKER)\n        && isXmpIdentifier(dataView, appMarkerPosition);\n}\n\nfunction isXmpIdentifier(dataView, appMarkerPosition) {\n    const markerIdLength = APP1_XMP_IDENTIFIER.length;\n    return getStringFromDataView(dataView, appMarkerPosition + APP_ID_OFFSET, markerIdLength) === APP1_XMP_IDENTIFIER;\n}\n\nfunction isApp1ExtendedXmpMarker(dataView, appMarkerPosition) {\n    return (dataView.getUint16(appMarkerPosition) === APP1_MARKER)\n        && isExtendedXmpIdentifier(dataView, appMarkerPosition);\n}\n\nfunction isExtendedXmpIdentifier(dataView, appMarkerPosition) {\n    const markerIdLength = APP1_XMP_EXTENDED_IDENTIFIER.length;\n    return getStringFromDataView(dataView, appMarkerPosition + APP_ID_OFFSET, markerIdLength) === APP1_XMP_EXTENDED_IDENTIFIER;\n}\n\nfunction getXmpChunkDetails(appMarkerPosition, fieldLength) {\n    return {\n        dataOffset: appMarkerPosition + XMP_DATA_OFFSET,\n        length: fieldLength - (XMP_DATA_OFFSET - APP_MARKER_SIZE)\n    };\n}\n\nfunction getExtendedXmpChunkDetails(appMarkerPosition, fieldLength) {\n    return {\n        dataOffset: appMarkerPosition + XMP_EXTENDED_DATA_OFFSET,\n        length: fieldLength - (XMP_EXTENDED_DATA_OFFSET - APP_MARKER_SIZE)\n    };\n}\n\nfunction isApp13PhotoshopMarker(dataView, appMarkerPosition) {\n    const markerIdLength = APP13_IPTC_IDENTIFIER.length;\n\n    return (dataView.getUint16(appMarkerPosition) === APP13_MARKER)\n        && (getStringFromDataView(dataView, appMarkerPosition + APP_ID_OFFSET, markerIdLength) === APP13_IPTC_IDENTIFIER)\n        && (dataView.getUint8(appMarkerPosition + APP_ID_OFFSET + markerIdLength) === 0x00);\n}\n\nfunction isAppMarker(dataView, appMarkerPosition) {\n    const appMarker = dataView.getUint16(appMarkerPosition);\n    return ((appMarker >= APP0_MARKER) && (appMarker <= APP15_MARKER))\n        || (appMarker === COMMENT_MARKER)\n        || (appMarker === SOF0_MARKER)\n        || (appMarker === SOF2_MARKER)\n        || (appMarker === DHT_MARKER)\n        || (appMarker === DQT_MARKER)\n        || (appMarker === DRI_MARKER)\n        || (appMarker === SOS_MARKER);\n}\n\nfunction isFillByte(dataView, appMarkerPosition) {\n    return dataView.getUint16(appMarkerPosition) === FILL_BYTE;\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\n// Specification: http://www.libpng.org/pub/png/spec/1.2/\n\nimport {getStringFromDataView, getNullTerminatedStringFromDataView} from './utils.js';\nimport Constants from './constants.js';\n\nexport default {\n    isPngFile,\n    findPngOffsets\n};\n\nconst PNG_ID = '\\x89\\x50\\x4e\\x47\\x0d\\x0a\\x1a\\x0a';\nconst PNG_CHUNK_LENGTH_SIZE = 4;\nexport const PNG_CHUNK_TYPE_SIZE = 4;\nexport const PNG_CHUNK_LENGTH_OFFSET = 0;\nexport const PNG_CHUNK_TYPE_OFFSET = PNG_CHUNK_LENGTH_SIZE;\nexport const PNG_CHUNK_DATA_OFFSET = PNG_CHUNK_LENGTH_SIZE + PNG_CHUNK_TYPE_SIZE;\nconst PNG_XMP_PREFIX = 'XML:com.adobe.xmp\\x00';\nexport const TYPE_TEXT = 'tEXt';\nexport const TYPE_ITXT = 'iTXt';\nexport const TYPE_ZTXT = 'zTXt';\nexport const TYPE_PHYS = 'pHYs';\nexport const TYPE_TIME = 'tIME';\nexport const TYPE_EXIF = 'eXIf';\nexport const TYPE_ICCP = 'iCCP';\n\nfunction isPngFile(dataView) {\n    return !!dataView && getStringFromDataView(dataView, 0, PNG_ID.length) === PNG_ID;\n}\n\nfunction findPngOffsets(dataView, async) {\n    const PNG_CRC_SIZE = 4;\n\n    const offsets = {\n        hasAppMarkers: false\n    };\n\n    let offset = PNG_ID.length;\n\n    while (offset + PNG_CHUNK_LENGTH_SIZE + PNG_CHUNK_TYPE_SIZE <= dataView.byteLength) {\n        if (Constants.USE_PNG_FILE && isPngImageHeaderChunk(dataView, offset)) {\n            offsets.hasAppMarkers = true;\n            offsets.pngHeaderOffset = offset + PNG_CHUNK_DATA_OFFSET;\n        } else if (Constants.USE_XMP && isPngXmpChunk(dataView, offset)) {\n            const dataOffset = getPngXmpDataOffset(dataView, offset);\n            if (dataOffset !== undefined) {\n                offsets.hasAppMarkers = true;\n                offsets.xmpChunks = [{\n                    dataOffset,\n                    length: dataView.getUint32(offset + PNG_CHUNK_LENGTH_OFFSET) - (dataOffset - (offset + PNG_CHUNK_DATA_OFFSET))\n                }];\n            }\n        } else if (isPngTextChunk(dataView, offset, async)) {\n            offsets.hasAppMarkers = true;\n            const chunkType = getStringFromDataView(dataView, offset + PNG_CHUNK_TYPE_OFFSET, PNG_CHUNK_TYPE_SIZE);\n            if (!offsets.pngTextChunks) {\n                offsets.pngTextChunks = [];\n            }\n            offsets.pngTextChunks.push({\n                length: dataView.getUint32(offset + PNG_CHUNK_LENGTH_OFFSET),\n                type: chunkType,\n                offset: offset + PNG_CHUNK_DATA_OFFSET\n            });\n        } else if (isPngExifChunk(dataView, offset)) {\n            offsets.hasAppMarkers = true;\n            offsets.tiffHeaderOffset = offset + PNG_CHUNK_DATA_OFFSET;\n        } else if (Constants.USE_ICC && async && isPngIccpChunk(dataView, offset)) {\n            offsets.hasAppMarkers = true;\n            const chunkDataLength = dataView.getUint32(offset + PNG_CHUNK_LENGTH_OFFSET);\n            const iccHeaderOffset = offset + PNG_CHUNK_DATA_OFFSET;\n            const {profileName, compressionMethod, compressedProfileOffset} = parseIccHeader(dataView, iccHeaderOffset);\n            if (!offsets.iccChunks) {\n                offsets.iccChunks = [];\n            }\n            offsets.iccChunks.push({\n                offset: compressedProfileOffset,\n                length: chunkDataLength - (compressedProfileOffset - iccHeaderOffset),\n                chunkNumber: 1,\n                chunksTotal: 1,\n                profileName,\n                compressionMethod\n            });\n        } else if (isPngChunk(dataView, offset)) {\n            offsets.hasAppMarkers = true;\n            if (!offsets.pngChunkOffsets) {\n                offsets.pngChunkOffsets = [];\n            }\n            offsets.pngChunkOffsets.push(offset + PNG_CHUNK_LENGTH_OFFSET);\n        }\n\n        offset += dataView.getUint32(offset + PNG_CHUNK_LENGTH_OFFSET)\n            + PNG_CHUNK_LENGTH_SIZE\n            + PNG_CHUNK_TYPE_SIZE\n            + PNG_CRC_SIZE;\n    }\n\n    return offsets;\n}\n\nfunction isPngImageHeaderChunk(dataView, offset) {\n    const PNG_CHUNK_TYPE_IMAGE_HEADER = 'IHDR';\n    return getStringFromDataView(dataView, offset + PNG_CHUNK_TYPE_OFFSET, PNG_CHUNK_TYPE_SIZE) === PNG_CHUNK_TYPE_IMAGE_HEADER;\n}\n\nfunction isPngXmpChunk(dataView, offset) {\n    return (getStringFromDataView(dataView, offset + PNG_CHUNK_TYPE_OFFSET, PNG_CHUNK_TYPE_SIZE) === TYPE_ITXT)\n        && (getStringFromDataView(dataView, offset + PNG_CHUNK_DATA_OFFSET, PNG_XMP_PREFIX.length) === PNG_XMP_PREFIX);\n}\n\nfunction isPngTextChunk(dataView, offset, async) {\n    const chunkType = getStringFromDataView(dataView, offset + PNG_CHUNK_TYPE_OFFSET, PNG_CHUNK_TYPE_SIZE);\n    return chunkType === TYPE_TEXT || chunkType === TYPE_ITXT || (chunkType === TYPE_ZTXT && async);\n}\n\nfunction isPngExifChunk(dataView, offset) {\n    return getStringFromDataView(dataView, offset + PNG_CHUNK_TYPE_OFFSET, PNG_CHUNK_TYPE_SIZE) === TYPE_EXIF;\n}\n\nfunction isPngIccpChunk(dataView, offset) {\n    return getStringFromDataView(dataView, offset + PNG_CHUNK_TYPE_OFFSET, PNG_CHUNK_TYPE_SIZE) === TYPE_ICCP;\n}\n\nfunction isPngChunk(dataView, offset) {\n    const SUPPORTED_PNG_CHUNK_TYPES = [TYPE_PHYS, TYPE_TIME];\n    const chunkType = getStringFromDataView(dataView, offset + PNG_CHUNK_TYPE_OFFSET, PNG_CHUNK_TYPE_SIZE);\n    return SUPPORTED_PNG_CHUNK_TYPES.includes(chunkType);\n}\n\nfunction getPngXmpDataOffset(dataView, offset) {\n    const COMPRESSION_FLAG_SIZE = 1;\n    const COMPRESSION_METHOD_SIZE = 1;\n\n    offset += PNG_CHUNK_DATA_OFFSET + PNG_XMP_PREFIX.length + COMPRESSION_FLAG_SIZE + COMPRESSION_METHOD_SIZE;\n\n    let numberOfNullSeparators = 0;\n    while (numberOfNullSeparators < 2 && offset < dataView.byteLength) {\n        if (dataView.getUint8(offset) === 0x00) {\n            numberOfNullSeparators++;\n        }\n        offset++;\n    }\n    if (numberOfNullSeparators < 2) {\n        return undefined;\n    }\n    return offset;\n}\n\nfunction parseIccHeader(dataView, offset) {\n    const NULL_SEPARATOR_SIZE = 1;\n    const COMPRESSION_METHOD_SIZE = 1;\n\n    const profileName = getNullTerminatedStringFromDataView(dataView, offset);\n    offset += profileName.length + NULL_SEPARATOR_SIZE;\n\n    const compressionMethod = dataView.getUint8(offset);\n    offset += COMPRESSION_METHOD_SIZE;\n\n    return {\n        profileName,\n        compressionMethod,\n        compressedProfileOffset: offset\n    };\n}\n","export function get64BitValue(dataView, offset) {\n    // It's a bit tricky to handle 64 bit numbers in JavaScript. Let's\n    // wait until there are real-world examples where it is necessary.\n    return dataView.getUint32(offset + 4);\n}\n","import {get64BitValue} from './image-header-iso-bmff-utils.js';\n\nexport function parseItemLocationBox(dataView, version, contentOffset, boxLength) {\n    const FLAGS_SIZE = 3;\n\n    const {offsets, sizes} = getItemLocationBoxOffsetsAndSizes(version, contentOffset + FLAGS_SIZE);\n\n    const offsetSize = dataView.getUint8(offsets.offsetSize) >> 4;\n    sizes.item.extent.extentOffset = offsetSize;\n    const lengthSize = dataView.getUint8(offsets.lengthSize) & 0x0f;\n    sizes.item.extent.extentLength = lengthSize;\n    const baseOffsetSize = dataView.getUint8(offsets.baseOffsetSize) >> 4;\n    sizes.item.baseOffset = baseOffsetSize;\n    const indexSize = getIndexSize(dataView, offsets.indexSize, version);\n    sizes.item.extent.extentIndex = indexSize !== undefined ? indexSize : 0;\n    const itemCount = getItemCount(dataView, offsets.itemCount, version);\n\n    return {\n        type: 'iloc',\n        items: getItems(dataView, version, offsets, sizes, offsetSize, lengthSize, indexSize, itemCount),\n        length: boxLength\n    };\n}\n\nfunction getItemLocationBoxOffsetsAndSizes(version, contentOffset) {\n    const sizes = {\n        item: {\n            dataReferenceIndex: 2,\n            extentCount: 2,\n            extent: {}\n        }\n    };\n    if (version < 2) {\n        sizes.itemCount = 2;\n        sizes.item.itemId = 2;\n    } else if (version === 2) {\n        sizes.itemCount = 4;\n        sizes.item.itemId = 4;\n    }\n    if (version === 1 || version === 2) {\n        sizes.item.constructionMethod = 2;\n    } else {\n        sizes.item.constructionMethod = 0;\n    }\n\n    const offsets = {\n        offsetSize: contentOffset,\n        lengthSize: contentOffset,\n        baseOffsetSize: contentOffset + 1,\n        indexSize: contentOffset + 1\n    };\n    offsets.itemCount = contentOffset + 2;\n    offsets.items = offsets.itemCount + sizes.itemCount;\n    offsets.item = {\n        itemId: 0\n    };\n    offsets.item.constructionMethod = offsets.item.itemId + sizes.item.itemId;\n    offsets.item.dataReferenceIndex = offsets.item.constructionMethod + sizes.item.constructionMethod;\n\n    return {offsets, sizes};\n}\n\nfunction getIndexSize(dataView, offset, version) {\n    if (version === 1 || version === 2) {\n        return dataView.getUint8(offset) & 0x0f;\n    }\n    return undefined;\n}\n\nfunction getItemCount(dataView, offset, version) {\n    if (version < 2) {\n        return dataView.getUint16(offset);\n    } else if (version === 2) {\n        return dataView.getUint32(offset);\n    }\n    return undefined;\n}\n\nfunction getItems(dataView, version, offsets, sizes, offsetSize, lengthSize, indexSize, itemCount) {\n    if (itemCount === undefined) {\n        return [];\n    }\n\n    const items = [];\n    let offset = offsets.items;\n\n    for (let i = 0; i < itemCount; i++) {\n        const item = {extents: []};\n        item.itemId = getItemId(dataView, offset, version);\n        offset += sizes.item.itemId;\n        item.constructionMethod = (version === 1) || (version === 2) ? dataView.getUint16(offset) & 0x0f : undefined;\n        offset += sizes.item.constructionMethod;\n        item.dataReferenceIndex = dataView.getUint16(offset);\n        offset += sizes.item.dataReferenceIndex;\n        item.baseOffset = getVariableSizedValue(dataView, offset, sizes.item.baseOffset);\n        offset += sizes.item.baseOffset;\n        item.extentCount = dataView.getUint16(offset);\n        offset += sizes.item.extentCount;\n        for (let j = 0; j < item.extentCount; j++) {\n            const extent = {};\n\n            extent.extentIndex = getExtentIndex(dataView, version, offset, indexSize);\n            offset += sizes.item.extent.extentIndex;\n            extent.extentOffset = getVariableSizedValue(dataView, offset, offsetSize);\n            offset += sizes.item.extent.extentOffset;\n            extent.extentLength = getVariableSizedValue(dataView, offset, lengthSize);\n            offset += sizes.item.extent.extentLength;\n\n            item.extents.push(extent);\n        }\n\n        items.push(item);\n    }\n\n    return items;\n}\n\nfunction getItemId(dataView, offset, version) {\n    if (version < 2) {\n        return dataView.getUint16(offset);\n    } else if (version === 2) {\n        return dataView.getUint32(offset);\n    }\n    return undefined;\n}\n\nfunction getExtentIndex(dataView, version, offset, indexSize) {\n    if ((version === 1 || version === 2) && indexSize > 0) {\n        return getVariableSizedValue(dataView, offset, indexSize);\n    }\n    return undefined;\n}\n\nfunction getVariableSizedValue(dataView, offset, size) {\n    if (size === 4) {\n        return dataView.getUint32(offset);\n    }\n    if (size === 8) {\n        // eslint-disable-next-line no-console\n        console.warn('This file uses an 8-bit offset which is currently not supported by ExifReader. Contact the maintainer to get it fixed.');\n        return get64BitValue(dataView, offset);\n    }\n    return 0;\n}\n","import Constants from './constants.js';\nimport {getNullTerminatedStringFromDataView, getStringFromDataView} from './utils.js';\n// import {get64BitValue} from './image-header-iso-bmff-utils.js';\nimport {parseItemLocationBox} from './image-header-iso-bmff-iloc.js';\n\n// HEIC and AVIF files are based on the ISO-BMFF format. This file format is\n// built up by boxes. There are boxes and full boxes. All box types have a\n// length (4 or 8 bytes) and a type (4 bytes). Full boxes also have a version\n// (1 byte) and flags (3 bytes). The boxes can be nested. Each box type has its\n// own structure that can be seen in the specification.\n//\n// For metadata we are interested in the meta box. The meta box contains sub\n// boxes. The sub box type iinf has info about which types of metadata are\n// present in the file. The item ID we get from there we then look up in the\n// iloc sub box to get the offset to the real location of the metadata.\n//\n// The ICC profiles is a bit more nested. We have to look in\n// meta > iprp > ipco > colr, and then the whole profile is stored there.\n\n// These are actually 32-bit strings, not random IDs, e.g. \"ftyp\" and \"meta\".\nconst TYPE_FTYP = 0x66747970;\nconst TYPE_IPRP = 0x69707270;\nconst TYPE_META = 0x6d657461;\nconst TYPE_ILOC = 0x696c6f63;\nconst TYPE_IINF = 0x69696e66;\nconst TYPE_INFE = 0x696e6665;\nconst TYPE_IPCO = 0x6970636f;\nconst TYPE_COLR = 0x636f6c72;\n\n// const EXTENSION_TYPE_FDEL = 0x6664656c;\n\nexport const ITEM_INFO_TYPE_EXIF = 0x45786966;\nexport const ITEM_INFO_TYPE_MIME = 0x6d696d65;\nconst ITEM_INFO_TYPE_URI = 0x75726920;\n\n/**\n * Parses a ISO-BMFF box from the provided data view starting at the given offset.\n *\n * @param {DataView} dataView - The DataView to parse.\n * @param {number} offset - The offset at which to start parsing.\n * @returns {Object} The parsed box.\n */\nexport function parseBox(dataView, offset) {\n    const BOX_TYPE_OFFSET = 4;\n    const BOX_MIN_LENGTH = 8;\n    const VERSION_SIZE = 1;\n\n    const {length, contentOffset} = getBoxLength(dataView, offset);\n    if (length < BOX_MIN_LENGTH) {\n        return undefined;\n    }\n\n    const type = dataView.getUint32(offset + BOX_TYPE_OFFSET);\n\n    if (type === TYPE_FTYP) {\n        return parseFileTypeBox(dataView, contentOffset, length);\n    }\n    if (type === TYPE_IPRP) {\n        return parseItemPropertiesBox(dataView, offset, contentOffset, length);\n    }\n    if (type === TYPE_IPCO) {\n        return parseItemPropertyContainerBox(dataView, offset, contentOffset, length);\n    }\n    if (type === TYPE_COLR) {\n        return parseColorInformationBox(dataView, contentOffset, length);\n    }\n\n    // The following are full boxes, also containing version and flags.\n    const version = dataView.getUint8(contentOffset);\n\n    if (type === TYPE_META) {\n        return parseMetadataBox(dataView, offset, contentOffset + VERSION_SIZE, length);\n    }\n    if (type === TYPE_ILOC) {\n        return parseItemLocationBox(dataView, version, contentOffset + VERSION_SIZE, length);\n    }\n    if (type === TYPE_IINF) {\n        return parseItemInformationBox(dataView, offset, version, contentOffset + VERSION_SIZE, length);\n    }\n    if (type === TYPE_INFE) {\n        return parseItemInformationEntryBox(dataView, offset, version, contentOffset + VERSION_SIZE, length);\n    }\n\n    return {\n        // type: getStringFromDataView(dataView, offset + BOX_TYPE_OFFSET, 4),\n        type: undefined,\n        length\n    };\n}\n\n/**\n * @typedef {Object} BoxLength\n * @property {number} length The length of the box including length and type.\n * @property {number} contentOffset\n */\n\n/**\n * @param {DataView} dataView\n * @param {number} offset\n * @returns {BoxLength}\n */\nfunction getBoxLength(dataView, offset) {\n    const BOX_LENGTH_SIZE = 4;\n    const BOX_TYPE_SIZE = 4;\n    const BOX_EXTENDED_SIZE = 8;\n    const BOX_EXTENDED_SIZE_LOW_OFFSET = 12;\n\n    const boxLength = dataView.getUint32(offset);\n    if (extendsToEndOfFile(boxLength)) {\n        return {\n            length: dataView.byteLength - offset,\n            contentOffset: offset + BOX_LENGTH_SIZE + BOX_TYPE_SIZE,\n        };\n    }\n    if (hasExtendedSize(boxLength)) {\n        if (hasEmptyHighBits(dataView, offset)) {\n            // It's a bit tricky to handle 64 bit numbers in JavaScript. Let's\n            // wait until there are real-world examples where it is necessary.\n            return {\n                length: dataView.getUint32(offset + BOX_EXTENDED_SIZE_LOW_OFFSET),\n                contentOffset: offset + BOX_LENGTH_SIZE + BOX_TYPE_SIZE + BOX_EXTENDED_SIZE,\n            };\n        }\n    }\n\n    return {\n        length: boxLength,\n        contentOffset: offset + BOX_LENGTH_SIZE + BOX_TYPE_SIZE,\n    };\n}\n\nfunction extendsToEndOfFile(boxLength) {\n    return boxLength === 0;\n}\n\nfunction hasExtendedSize(boxLength) {\n    return boxLength === 1;\n}\n\nfunction hasEmptyHighBits(dataView, offset) {\n    const BOX_EXTENDED_SIZE_OFFSET = 8;\n    return dataView.getUint32(offset + BOX_EXTENDED_SIZE_OFFSET) === 0;\n}\n\n/**\n * @typedef {Object} Offsets\n * @property {number} tiffHeaderOffset\n * @property {Array<Object>} xmpChunks\n * @property {Array<Object>} iccChunks\n * @property {boolean} hasAppMarkers\n */\n\n/**\n * Finds the offsets of ISO-BMFF-structued data in the provided data view.\n *\n * @param {DataView} dataView - The data view to find offsets in.\n * @returns {Offsets} An object containing the offsets of the TIFF header, XMP chunks, ICC chunks, and a boolean indicating if any of these exist.\n */\nexport function findOffsets(dataView) {\n    if (Constants.USE_EXIF || Constants.USE_XMP || Constants.USE_ICC) {\n        const offsets = {};\n        const metaBox = findMetaBox(dataView);\n\n        if (!metaBox) {\n            return {hasAppMarkers: false};\n        }\n\n        if (Constants.USE_EXIF) {\n            offsets.tiffHeaderOffset = findExifOffset(dataView, metaBox);\n        }\n        if (Constants.USE_XMP) {\n            offsets.xmpChunks = findXmpChunks(metaBox);\n        }\n        if (Constants.USE_ICC) {\n            offsets.iccChunks = findIccChunks(metaBox);\n        }\n        offsets.hasAppMarkers = (offsets.tiffHeaderOffset !== undefined) || (offsets.xmpChunks !== undefined) || (offsets.iccChunks !== undefined);\n        return offsets;\n    }\n\n    return {};\n}\n\nfunction findMetaBox(dataView) {\n    const BOX_LENGTH_SIZE = 4;\n    const BOX_TYPE_SIZE = 4;\n\n    let offset = 0;\n\n    while (offset + BOX_LENGTH_SIZE + BOX_TYPE_SIZE <= dataView.byteLength) {\n        const box = parseBox(dataView, offset);\n\n        if (box === undefined) {\n            break;\n        }\n\n        if (box.type === 'meta') {\n            return box;\n        }\n\n        offset += box.length;\n    }\n\n    return undefined;\n}\n\nfunction findExifOffset(dataView, metaBox) {\n    try {\n        const exifItemId = findIinfExifItemId(metaBox).itemId;\n        const ilocItem = findIlocItem(metaBox, exifItemId);\n        const exifOffset = ilocItem.baseOffset + ilocItem.extents[0].extentOffset;\n        return getTiffHeaderOffset(dataView, exifOffset);\n    } catch (error) {\n        return undefined;\n    }\n}\n\nfunction findIinfExifItemId(metaBox) {\n    return metaBox.subBoxes.find((box) => box.type === 'iinf').itemInfos.find((itemInfo) => itemInfo.itemType === ITEM_INFO_TYPE_EXIF);\n}\n\nfunction findIlocItem(metaBox, itemId) {\n    return metaBox.subBoxes.find((box) => box.type === 'iloc').items.find((item) => item.itemId === itemId);\n}\n\nfunction getTiffHeaderOffset(dataView, exifOffset) {\n    // ISO-BMFF formatted files store the Exif data as an \"Exif block\" where the\n    // first 32 bits is the TIFF header offset.\n    const TIFF_HEADER_OFFSET_SIZE = 4;\n    return exifOffset + TIFF_HEADER_OFFSET_SIZE + dataView.getUint32(exifOffset);\n}\n\nfunction findXmpChunks(metaBox) {\n    try {\n        const xmpItemId = findIinfXmpItemId(metaBox).itemId;\n        const ilocItem = findIlocItem(metaBox, xmpItemId);\n        const ilocItemExtent = findIlocItem(metaBox, xmpItemId).extents[0];\n        return [\n            {\n                dataOffset: ilocItem.baseOffset + ilocItemExtent.extentOffset,\n                length: ilocItemExtent.extentLength,\n            }\n        ];\n    } catch (error) {\n        return undefined;\n    }\n}\n\nfunction findIinfXmpItemId(metaBox) {\n    return metaBox.subBoxes.find((box) => box.type === 'iinf')\n        .itemInfos.find((itemInfo) => itemInfo.itemType === ITEM_INFO_TYPE_MIME && itemInfo.contentType === 'application/rdf+xml');\n}\n\nfunction findIccChunks(metaBox) {\n    // This finds the first ICC chunk, but there could be one for each image\n    // that is embedded in the file. If it turns out we need to match the ICC\n    // chunk to a specific image, we need to check the \"ipma\" in addition to the\n    // \"ipco\" (currently we only extract the \"ipco\" so more code would be\n    // needed).\n    try {\n        const icc = metaBox.subBoxes.find((box) => box.type === 'iprp')\n            .subBoxes.find((box) => box.type === 'ipco')\n            .properties.find((box) => box.type === 'colr')\n            .icc;\n        if (icc) {\n            return [icc];\n        }\n    } catch (error) {\n        // Let it pass through.\n    }\n    return undefined;\n}\n\nfunction parseFileTypeBox(dataView, contentOffset, boxLength) {\n    const MAJOR_BRAND_SIZE = 4;\n    const majorBrand = getStringFromDataView(dataView, contentOffset, MAJOR_BRAND_SIZE);\n\n    return {\n        type: 'ftyp',\n        majorBrand,\n        length: boxLength\n    };\n}\n\nfunction parseItemPropertiesBox(dataView, startOffset, contentOffset, length) {\n    return {\n        type: 'iprp',\n        subBoxes: parseSubBoxes(dataView, contentOffset, length - (contentOffset - startOffset)),\n        length,\n    };\n}\n\nfunction parseItemPropertyContainerBox(dataView, startOffset, contentOffset, length) {\n    return {\n        type: 'ipco',\n        properties: parseSubBoxes(dataView, contentOffset, length - (contentOffset - startOffset)),\n        length,\n    };\n}\n\nfunction parseColorInformationBox(dataView, contentOffset, length) {\n    return {\n        type: 'colr',\n        icc: parseIcc(dataView, contentOffset),\n        length,\n    };\n}\n\nfunction parseIcc(dataView, contentOffset) {\n    const COLOR_TYPE_SIZE = 4;\n\n    const colorType = getStringFromDataView(dataView, contentOffset, COLOR_TYPE_SIZE);\n    if (colorType !== 'prof' && colorType !== 'rICC') {\n        // Support for nclx would require some restructuring for ICC handling.\n        // Probably do it as a separate feature instead of combining with ICC.\n        // Exiftool groups it under QuickTime. The test file test.avif has nclx.\n        return undefined;\n    }\n\n    return {\n        offset: contentOffset + COLOR_TYPE_SIZE,\n        length: dataView.getUint32(contentOffset + COLOR_TYPE_SIZE),\n        chunkNumber: 1,\n        chunksTotal: 1\n    };\n}\n\nfunction parseMetadataBox(dataView, startOffset, contentOffset, length) {\n    const FLAGS_SIZE = 3;\n\n    return {\n        type: 'meta',\n        subBoxes: parseSubBoxes(dataView, contentOffset + FLAGS_SIZE, length - (contentOffset + FLAGS_SIZE - startOffset)),\n        length\n    };\n}\n\n/**\n * @param {DataView} dataView\n * @param {number} offset The offset to start parsing from.\n * @param {number} length The length of all sub boxes combined.\n * @return {Array<Object>}\n */\nfunction parseSubBoxes(dataView, offset, length) {\n    const ACCEPTED_ITEM_INFO_TYPES = [\n        ITEM_INFO_TYPE_EXIF,\n        ITEM_INFO_TYPE_MIME,\n    ];\n\n    const subBoxes = [];\n    let currentOffset = offset;\n    while (currentOffset < offset + length) {\n        const box = parseBox(dataView, currentOffset);\n        if (box === undefined) {\n            break;\n        }\n        if (box.type !== undefined && (box.itemType === undefined || ACCEPTED_ITEM_INFO_TYPES.indexOf(box.itemType) !== -1)) {\n            subBoxes.push(box);\n        }\n        currentOffset += box.length;\n    }\n    return subBoxes;\n}\n\nfunction parseItemInformationBox(dataView, startOffset, version, contentOffset, length) {\n    const {offsets} = getItemInformationBoxOffsetsAndSizes(version, contentOffset);\n\n    return {\n        type: 'iinf',\n        itemInfos: parseSubBoxes(dataView, offsets.itemInfos, length - (offsets.itemInfos - startOffset)),\n        length\n    };\n}\n\nfunction getItemInformationBoxOffsetsAndSizes(version, contentOffset) {\n    const FLAGS_SIZE = 3;\n\n    const offsets = {entryCount: contentOffset + FLAGS_SIZE};\n    const sizes = {};\n\n    if (version === 0) {\n        sizes.entryCount = 2;\n    } else {\n        sizes.entryCount = 4;\n    }\n\n    offsets.itemInfos = offsets.entryCount + sizes.entryCount;\n\n    return {offsets};\n}\n\nfunction parseItemInformationEntryBox(dataView, startOffset, version, contentOffset, length) {\n    const FLAGS_SIZE = 3;\n\n    contentOffset += FLAGS_SIZE;\n    const entry = {type: 'infe', length};\n\n    if (version === 0 || version === 1) {\n        entry.itemId = dataView.getUint16(contentOffset);\n        contentOffset += 2;\n        entry.itemProtectionIndex = dataView.getUint16(contentOffset);\n        contentOffset += 2;\n        entry.itemName = getNullTerminatedStringFromDataView(dataView, contentOffset);\n        contentOffset += entry.itemName.length + 1;\n        // entry.contentType = getNullTerminatedStringFromDataView(dataView, offset);\n        // offset += entry.contentType.length + 1;\n        // Since contentEncoding is optional we need to check the offset against length here.\n        // entry.contentEncoding = getNullTerminatedStringFromDataView(dataView, offset);\n        // offset += entry.contentEncoding.length + 1;\n    }\n    // The following code should be correct but we currently don't need it.\n    // if (version === 1) {\n    //     // Everything here is optional, check the offset against length.\n    //     entry.extensionType = dataView.getUint32(contentOffset);\n    //     contentOffset += 4;\n    //     if (entry.extensionType === EXTENSION_TYPE_FDEL) {\n    //         entry.contentLocation = getNullTerminatedStringFromDataView(dataView, contentOffset);\n    //         contentOffset += entry.contentLocation.length + 1;\n    //         entry.contentMd5 = getNullTerminatedStringFromDataView(dataView, contentOffset);\n    //         contentOffset += entry.contentMd5.length + 1;\n    //         entry.contentLength = get64BitValue(dataView, contentOffset);\n    //         contentOffset += 8;\n    //         entry.transferLength = get64BitValue(dataView, contentOffset);\n    //         contentOffset += 8;\n    //         entry.entryCount = dataView.getUint8(contentOffset);\n    //         contentOffset += 1;\n    //         entry.entries = [];\n    //         for (let i = 0; i < entry.entryCount; i++) {\n    //             entry.entries.push({groupId: dataView.getUint32(contentOffset)});\n    //             contentOffset += 4;\n    //         }\n    //     }\n    // }\n    if (version >= 2) {\n        if (version === 2) {\n            entry.itemId = dataView.getUint16(contentOffset);\n            contentOffset += 2;\n        } else if (version === 3) {\n            entry.itemId = dataView.getUint32(contentOffset);\n            contentOffset += 4;\n        }\n        entry.itemProtectionIndex = dataView.getUint16(contentOffset);\n        contentOffset += 2;\n        // entry.itemTypeAscii = getStringFromDataView(dataView, offset, 4); // For testing.\n        entry.itemType = dataView.getUint32(contentOffset);\n        contentOffset += 4;\n        entry.itemName = getNullTerminatedStringFromDataView(dataView, contentOffset);\n        contentOffset += entry.itemName.length + 1;\n        if (entry.itemType === ITEM_INFO_TYPE_MIME) {\n            entry.contentType = getNullTerminatedStringFromDataView(dataView, contentOffset);\n            contentOffset += entry.contentType.length + 1;\n            if (startOffset + length > contentOffset) {\n                entry.contentEncoding = getNullTerminatedStringFromDataView(dataView, contentOffset);\n                contentOffset += entry.contentEncoding.length + 1;\n            }\n        } else if (entry.itemType === ITEM_INFO_TYPE_URI) {\n            entry.itemUri = getNullTerminatedStringFromDataView(dataView, contentOffset);\n            contentOffset += entry.itemUri.length + 1;\n        }\n    }\n    return entry;\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport {parseBox, findOffsets} from './image-header-iso-bmff.js';\n\nexport default {\n    isHeicFile,\n    findHeicOffsets\n};\n\n/**\n * Checks if the provided data view represents a HEIC/HEIF file.\n *\n * @param {DataView} dataView - The data view to check.\n * @returns {boolean} True if the data view represents a HEIC/HEIF file, false otherwise.\n */\nfunction isHeicFile(dataView) {\n    if (!dataView) {\n        return false;\n    }\n\n    const HEIC_MAJOR_BRANDS = ['heic', 'heix', 'hevc', 'hevx', 'heim', 'heis', 'hevm', 'hevs', 'mif1'];\n\n    try {\n        const headerBox = parseBox(dataView, 0);\n        return headerBox && HEIC_MAJOR_BRANDS.indexOf(headerBox.majorBrand) !== -1;\n    } catch (error) {\n        return false;\n    }\n}\n\n/**\n * Finds the offsets of a HEIC file in the provided data view.\n *\n * @param {DataView} dataView - The data view to find offsets in.\n * @returns {Object} An object containing the offsets of the TIFF header, XMP chunks, ICC chunks, and a boolean indicating if any of these exist.\n */\nfunction findHeicOffsets(dataView) {\n    return findOffsets(dataView);\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\n// Specification:\n// https://aomediacodec.github.io/av1-avif\n\nimport {parseBox, findOffsets} from './image-header-iso-bmff.js';\n\nexport default {\n    isAvifFile,\n    findAvifOffsets\n};\n\n/**\n * Checks if the provided data view represents an AVIF file.\n *\n * @param {DataView} dataView - The data view to check.\n * @returns {boolean} True if the data view represents an AVIF file, false otherwise.\n */\nfunction isAvifFile(dataView) {\n    if (!dataView) {\n        return false;\n    }\n\n    try {\n        const headerBox = parseBox(dataView, 0);\n        return headerBox && headerBox.majorBrand === 'avif';\n    } catch (error) {\n        return false;\n    }\n}\n\n/**\n * Finds the offsets of an AVIF file in the provided data view.\n *\n * @param {DataView} dataView - The data view to find offsets in.\n * @returns {Object} An object containing the offsets of the TIFF header, XMP chunks, ICC chunks, and a boolean indicating if any of these exist.\n */\nfunction findAvifOffsets(dataView) {\n    return findOffsets(dataView);\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport {getStringFromDataView} from './utils.js';\nimport Constants from './constants.js';\n\nexport default {\n    isWebpFile,\n    findOffsets\n};\n\nfunction isWebpFile(dataView) {\n    const RIFF_ID_OFFSET = 0;\n    const RIFF_ID = 'RIFF';\n    const WEBP_MARKER_OFFSET = 8;\n    const WEBP_MARKER = 'WEBP';\n\n    return !!dataView && getStringFromDataView(dataView, RIFF_ID_OFFSET, RIFF_ID.length) === RIFF_ID\n        && getStringFromDataView(dataView, WEBP_MARKER_OFFSET, WEBP_MARKER.length) === WEBP_MARKER;\n}\n\nfunction findOffsets(dataView) {\n    const SUB_CHUNK_START_OFFSET = 12;\n    const CHUNK_SIZE_OFFSET = 4;\n    const EXIF_IDENTIFIER = 'Exif\\x00\\x00';\n    const CHUNK_HEADER_SIZE = 8;\n\n    let offset = SUB_CHUNK_START_OFFSET;\n    let hasAppMarkers = false;\n    let tiffHeaderOffset;\n    let xmpChunks;\n    let iccChunks;\n    let vp8xChunkOffset;\n\n    while (offset + CHUNK_HEADER_SIZE < dataView.byteLength) {\n        const chunkId = getStringFromDataView(dataView, offset, 4);\n        const chunkSize = dataView.getUint32(offset + CHUNK_SIZE_OFFSET, true);\n\n        if (Constants.USE_EXIF && (chunkId === 'EXIF')) {\n            hasAppMarkers = true;\n            if (getStringFromDataView(dataView, offset + CHUNK_HEADER_SIZE, EXIF_IDENTIFIER.length) === EXIF_IDENTIFIER) {\n                tiffHeaderOffset = offset + CHUNK_HEADER_SIZE + EXIF_IDENTIFIER.length;\n            } else {\n                tiffHeaderOffset = offset + CHUNK_HEADER_SIZE;\n            }\n        } else if (Constants.USE_XMP && (chunkId === 'XMP ')) {\n            hasAppMarkers = true;\n            xmpChunks = [{\n                dataOffset: offset + CHUNK_HEADER_SIZE,\n                length: chunkSize\n            }];\n        } else if (Constants.USE_ICC && (chunkId === 'ICCP')) {\n            hasAppMarkers = true;\n            iccChunks = [{\n                offset: offset + CHUNK_HEADER_SIZE,\n                length: chunkSize,\n                chunkNumber: 1,\n                chunksTotal: 1\n            }];\n        } else if (chunkId === 'VP8X') {\n            hasAppMarkers = true;\n            vp8xChunkOffset = offset + CHUNK_HEADER_SIZE;\n        }\n\n        offset += CHUNK_HEADER_SIZE + (chunkSize % 2 === 0 ? chunkSize : chunkSize + 1);\n    }\n\n    return {\n        hasAppMarkers,\n        tiffHeaderOffset,\n        xmpChunks,\n        iccChunks,\n        vp8xChunkOffset\n    };\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport {getStringFromDataView} from './utils.js';\n\nexport default {\n    isGifFile,\n    findOffsets\n};\n\nconst GIF_SIGNATURE_SIZE = 6;\nconst GIF_SIGNATURES = ['GIF87a', 'GIF89a'];\n\nfunction isGifFile(dataView) {\n    return !!dataView && GIF_SIGNATURES.includes(getStringFromDataView(dataView, 0, GIF_SIGNATURE_SIZE));\n}\n\nfunction findOffsets() {\n    return {\n        gifHeaderOffset: 0\n    };\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport {getStringFromDataView} from './utils.js';\n\nexport default {\n    isXMLFile,\n    findOffsets\n};\n\nconst XML_MARKER_OFFSET = 0;\nconst XML_MARKER = '<?xpacket begin';\n\nfunction isXMLFile(dataView) {\n    return !!dataView && getStringFromDataView(dataView, XML_MARKER_OFFSET, XML_MARKER.length) === XML_MARKER;\n}\n\nfunction findOffsets(dataView) {\n    const xmpChunks = [];\n    xmpChunks.push({dataOffset: XML_MARKER_OFFSET, length: dataView.byteLength});\n    return {\n        xmpChunks,\n    };\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport Constants from './constants.js';\nimport Tiff from './image-header-tiff.js';\nimport Jpeg from './image-header-jpeg.js';\nimport Png from './image-header-png.js';\nimport Heic from './image-header-heic.js';\nimport Avif from './image-header-avif.js';\nimport Webp from './image-header-webp.js';\nimport Gif from './image-header-gif.js';\nimport Xml from './xml.js';\nimport {objectAssign} from './utils.js';\n\nexport default {\n    parseAppMarkers\n};\n\nfunction parseAppMarkers(dataView, async) {\n    if (Constants.USE_TIFF && Tiff.isTiffFile(dataView)) {\n        return addFileType(Tiff.findTiffOffsets(), 'tiff', 'TIFF');\n    }\n\n    if (Constants.USE_JPEG && Jpeg.isJpegFile(dataView)) {\n        return addFileType(Jpeg.findJpegOffsets(dataView), 'jpeg', 'JPEG');\n    }\n\n    if (Constants.USE_PNG && Png.isPngFile(dataView)) {\n        return addFileType(Png.findPngOffsets(dataView, async), 'png', 'PNG');\n    }\n\n    if (Constants.USE_HEIC && Heic.isHeicFile(dataView)) {\n        return addFileType(Heic.findHeicOffsets(dataView), 'heic', 'HEIC');\n    }\n\n    if (Constants.USE_AVIF && Avif.isAvifFile(dataView)) {\n        return addFileType(Avif.findAvifOffsets(dataView), 'avif', 'AVIF');\n    }\n\n    if (Constants.USE_WEBP && Webp.isWebpFile(dataView)) {\n        return addFileType(Webp.findOffsets(dataView), 'webp', 'WebP');\n    }\n\n    if (Constants.USE_GIF && Gif.isGifFile(dataView)) {\n        return addFileType(Gif.findOffsets(dataView), 'gif', 'GIF');\n    }\n\n    if (Constants.USE_XMP && Xml.isXMLFile(dataView)) {\n        return addFileType(Xml.findOffsets(dataView), 'xml', 'XML');\n    }\n\n    throw new Error('Invalid image format');\n}\n\nfunction addFileType(offsets, fileType, fileTypeDescription) {\n    return objectAssign({}, offsets, {fileType: {value: fileType, description: fileTypeDescription}});\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nexport default {\n    ApertureValue: (value) => Math.pow(Math.sqrt(2), value[0] / value[1]).toFixed(2),\n    ColorSpace(value) {\n        if (value === 1) {\n            return 'sRGB';\n        } else if (value === 0xffff) {\n            return 'Uncalibrated';\n        }\n        return 'Unknown';\n    },\n    ComponentsConfiguration(value) {\n        return value.map((character) => {\n            if (character === 0x31) {\n                return 'Y';\n            } else if (character === 0x32) {\n                return 'Cb';\n            } else if (character === 0x33) {\n                return 'Cr';\n            } else if (character === 0x34) {\n                return 'R';\n            } else if (character === 0x35) {\n                return 'G';\n            } else if (character === 0x36) {\n                return 'B';\n            }\n        }).join('');\n    },\n    Contrast(value) {\n        if (value === 0) {\n            return 'Normal';\n        } else if (value === 1) {\n            return 'Soft';\n        } else if (value === 2) {\n            return 'Hard';\n        }\n        return 'Unknown';\n    },\n    CustomRendered(value) {\n        if (value === 0) {\n            return 'Normal process';\n        } else if (value === 1) {\n            return 'Custom process';\n        }\n        return 'Unknown';\n    },\n    ExposureMode(value) {\n        if (value === 0) {\n            return 'Auto exposure';\n        } else if (value === 1) {\n            return 'Manual exposure';\n        } else if (value === 2) {\n            return 'Auto bracket';\n        }\n        return 'Unknown';\n    },\n    ExposureProgram(value) {\n        if (value === 0) {\n            return 'Undefined';\n        } else if (value === 1) {\n            return 'Manual';\n        } else if (value === 2) {\n            return 'Normal program';\n        } else if (value === 3) {\n            return 'Aperture priority';\n        } else if (value === 4) {\n            return 'Shutter priority';\n        } else if (value === 5) {\n            return 'Creative program';\n        } else if (value === 6) {\n            return 'Action program';\n        } else if (value === 7) {\n            return 'Portrait mode';\n        } else if (value === 8) {\n            return 'Landscape mode';\n        } else if (value === 9) {\n            return 'Bulb';\n        }\n        return 'Unknown';\n    },\n    ExposureTime(value) {\n        if (value[0] / value[1] > 0.25) {\n            const decimal = value[0] / value[1];\n            if (Number.isInteger(decimal)) {\n                return '' + decimal;\n            }\n            return decimal.toFixed(1);\n        }\n        if (value[0] !== 0) {\n            return `1/${Math.round(value[1] / value[0])}`;\n        }\n        return `0/${value[1]}`;\n    },\n    FNumber: (value) => `f/${Number(value[0] / value[1]).toFixed(1)}`,\n    FocalLength: (value) => (value[0] / value[1]) + ' mm',\n    FocalPlaneResolutionUnit(value) {\n        if (value === 2) {\n            return 'inches';\n        } else if (value === 3) {\n            return 'centimeters';\n        } else if (value === 4) {\n            return 'millimeters';\n        }\n        return 'Unknown';\n    },\n    LightSource: (value) => {\n        if (value === 1) {\n            return 'Daylight';\n        } else if (value === 2) {\n            return 'Fluorescent';\n        } else if (value === 3) {\n            return 'Tungsten (incandescent light)';\n        } else if (value === 4) {\n            return 'Flash';\n        } else if (value === 9) {\n            return 'Fine weather';\n        } else if (value === 10) {\n            return 'Cloudy weather';\n        } else if (value === 11) {\n            return 'Shade';\n        } else if (value === 12) {\n            return 'Daylight fluorescent (D 5700 – 7100K)';\n        } else if (value === 13) {\n            return 'Day white fluorescent (N 4600 – 5400K)';\n        } else if (value === 14) {\n            return 'Cool white fluorescent (W 3900 – 4500K)';\n        } else if (value === 15) {\n            return 'White fluorescent (WW 3200 – 3700K)';\n        } else if (value === 17) {\n            return 'Standard light A';\n        } else if (value === 18) {\n            return 'Standard light B';\n        } else if (value === 19) {\n            return 'Standard light C';\n        } else if (value === 20) {\n            return 'D55';\n        } else if (value === 21) {\n            return 'D65';\n        } else if (value === 22) {\n            return 'D75';\n        } else if (value === 23) {\n            return 'D50';\n        } else if (value === 24) {\n            return 'ISO studio tungsten';\n        } else if (value === 255) {\n            return 'Other light source';\n        }\n        return 'Unknown';\n    },\n    MeteringMode(value) {\n        if (value === 1) {\n            return 'Average';\n        } else if (value === 2) {\n            return 'CenterWeightedAverage';\n        } else if (value === 3) {\n            return 'Spot';\n        } else if (value === 4) {\n            return 'MultiSpot';\n        } else if (value === 5) {\n            return 'Pattern';\n        } else if (value === 6) {\n            return 'Partial';\n        } else if (value === 255) {\n            return 'Other';\n        }\n        return 'Unknown';\n    },\n    ResolutionUnit(value) {\n        if (value === 2) {\n            return 'inches';\n        }\n        if (value === 3) {\n            return 'centimeters';\n        }\n        return 'Unknown';\n    },\n    Saturation(value) {\n        if (value === 0) {\n            return 'Normal';\n        } else if (value === 1) {\n            return 'Low saturation';\n        } else if (value === 2) {\n            return 'High saturation';\n        }\n        return 'Unknown';\n    },\n    FocalLengthIn35mmFilm(value) {\n        if (value === 0) {\n            return 'Unknown';\n        }\n        return value + ' mm';\n    },\n    SceneCaptureType(value) {\n        if (value === 0) {\n            return 'Standard';\n        } else if (value === 1) {\n            return 'Landscape';\n        } else if (value === 2) {\n            return 'Portrait';\n        } else if (value === 3) {\n            return 'Night scene';\n        }\n        return 'Unknown';\n    },\n    Sharpness(value) {\n        if (value === 0) {\n            return 'Normal';\n        } else if (value === 1) {\n            return 'Soft';\n        } else if (value === 2) {\n            return 'Hard';\n        }\n        return 'Unknown';\n    },\n    ShutterSpeedValue(value) {\n        const denominator = Math.pow(2, value[0] / value[1]);\n        if (denominator <= 1) {\n            return `${Math.round(1 / denominator)}`;\n        }\n        return `1/${Math.round(denominator)}`;\n    },\n    WhiteBalance(value) {\n        if (value === 0) {\n            return 'Auto white balance';\n        } else if (value === 1) {\n            return 'Manual white balance';\n        }\n        return 'Unknown';\n    },\n    XResolution: (value) => '' + Math.round(value[0] / value[1]),\n    YResolution: (value) => '' + Math.round(value[0] / value[1])\n};\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport TagNamesCommon from './tag-names-common.js';\n\nexport default {\n    0x000b: 'ProcessingSoftware',\n    0x00fe: {\n        name: 'SubfileType',\n        description: (value) => ({\n            0x0: 'Full-resolution image',\n            0x1: 'Reduced-resolution image',\n            0x2: 'Single page of multi-page image',\n            0x3: 'Single page of multi-page reduced-resolution image',\n            0x4: 'Transparency mask',\n            0x5: 'Transparency mask of reduced-resolution image',\n            0x6: 'Transparency mask of multi-page image',\n            0x7: 'Transparency mask of reduced-resolution multi-page image',\n            0x10001: 'Alternate reduced-resolution image',\n            0xffffffff: 'Invalid'\n        })[value] || 'Unknown'\n    },\n    0x00ff: {\n        name: 'OldSubfileType',\n        description: (value) => ({\n            0: 'Full-resolution image',\n            1: 'Reduced-resolution image',\n            2: 'Single page of multi-page image'\n        })[value] || 'Unknown'\n    },\n    0x0100: 'ImageWidth',\n    0x0101: 'ImageLength',\n    0x0102: 'BitsPerSample',\n    0x0103: 'Compression',\n    0x0106: 'PhotometricInterpretation',\n    0x0107: {\n        name: 'Thresholding',\n        description: (value) => ({\n            1: 'No dithering or halftoning',\n            2: 'Ordered dither or halfton',\n            3: 'Randomized dither'\n        })[value] || 'Unknown'\n    },\n    0x0108: 'CellWidth',\n    0x0109: 'CellLength',\n    0x010a: {\n        name: 'FillOrder',\n        description: (value) => ({\n            1: 'Normal',\n            2: 'Reversed'\n        })[value] || 'Unknown'\n    },\n    0x010d: 'DocumentName',\n    0x010e: 'ImageDescription',\n    0x010f: 'Make',\n    0x0110: 'Model',\n    0x0111: 'StripOffsets',\n    0x0112: {\n        name: 'Orientation',\n        description: (value) => {\n            if (value === 1) {\n                return 'top-left';\n            }\n            if (value === 2) {\n                return 'top-right';\n            }\n            if (value === 3) {\n                return 'bottom-right';\n            }\n            if (value === 4) {\n                return 'bottom-left';\n            }\n            if (value === 5) {\n                return 'left-top';\n            }\n            if (value === 6) {\n                return 'right-top';\n            }\n            if (value === 7) {\n                return 'right-bottom';\n            }\n            if (value === 8) {\n                return 'left-bottom';\n            }\n            return 'Undefined';\n        }\n    },\n    0x0115: 'SamplesPerPixel',\n    0x0116: 'RowsPerStrip',\n    0x0117: 'StripByteCounts',\n    0x0118: 'MinSampleValue',\n    0x0119: 'MaxSampleValue',\n    0x011a: {\n        'name': 'XResolution',\n        'description': TagNamesCommon.XResolution\n    },\n    0x011b: {\n        'name': 'YResolution',\n        'description': TagNamesCommon.YResolution\n    },\n    0x011c: 'PlanarConfiguration',\n    0x011d: 'PageName',\n    0x011e: {\n        'name': 'XPosition',\n        'description': (value) => {\n            return '' + Math.round(value[0] / value[1]);\n        }\n    },\n    0x011f: {\n        'name': 'YPosition',\n        'description': (value) => {\n            return '' + Math.round(value[0] / value[1]);\n        }\n    },\n    0x0122: {\n        name: 'GrayResponseUnit',\n        description: (value) => ({\n            1: '0.1',\n            2: '0.001',\n            3: '0.0001',\n            4: '1e-05',\n            5: '1e-06'\n        })[value] || 'Unknown'\n    },\n    0x0128: {\n        name: 'ResolutionUnit',\n        description: TagNamesCommon.ResolutionUnit\n    },\n    0x0129: 'PageNumber',\n    0x012d: 'TransferFunction',\n    0x0131: 'Software',\n    0x0132: 'DateTime',\n    0x013b: 'Artist',\n    0x013c: 'HostComputer',\n    0x013d: 'Predictor',\n    0x013e: {\n        'name': 'WhitePoint',\n        'description': (values) => {\n            return values.map((value) => `${value[0]}/${value[1]}`).join(', ');\n        }\n    },\n    0x013f: {\n        'name': 'PrimaryChromaticities',\n        'description': (values) => {\n            return values.map((value) => `${value[0]}/${value[1]}`).join(', ');\n        }\n    },\n    0x0141: 'HalftoneHints',\n    0x0142: 'TileWidth',\n    0x0143: 'TileLength',\n    0x014a: 'A100DataOffset',\n    0x014c: {\n        name: 'InkSet',\n        description: (value) => ({\n            1: 'CMYK',\n            2: 'Not CMYK'\n        })[value] || 'Unknown'\n    },\n    0x0151: 'TargetPrinter',\n    0x0152: {\n        name: 'ExtraSamples',\n        description: (value) => ({\n            0: 'Unspecified',\n            1: 'Associated Alpha',\n            2: 'Unassociated Alpha',\n        })[value] || 'Unknown'\n    },\n    0x0153: {\n        name: 'SampleFormat',\n        description: (value) => {\n            const formats = {\n                1: 'Unsigned',\n                2: 'Signed',\n                3: 'Float',\n                4: 'Undefined',\n                5: 'Complex int',\n                6: 'Complex float',\n            };\n            if (!Array.isArray(value)) {\n                return 'Unknown';\n            }\n            return value.map((sample) => formats[sample] || 'Unknown').join(', ');\n        }\n    },\n    0x0201: 'JPEGInterchangeFormat',\n    0x0202: 'JPEGInterchangeFormatLength',\n    0x0211: {\n        'name': 'YCbCrCoefficients',\n        'description': (values) => {\n            return values.map((value) => '' + value[0] / value[1]).join('/');\n        }\n    },\n    0x0212: 'YCbCrSubSampling',\n    0x0213: {\n        name: 'YCbCrPositioning',\n        description: (value) => {\n            if (value === 1) {\n                return 'centered';\n            }\n            if (value === 2) {\n                return 'co-sited';\n            }\n            return 'undefined ' + value;\n        }\n    },\n    0x0214: {\n        'name': 'ReferenceBlackWhite',\n        'description': (values) => {\n            return values.map((value) => '' + value[0] / value[1]).join(', ');\n        }\n    },\n    0x02bc: 'ApplicationNotes',\n    0x4746: 'Rating',\n    0x4749: 'RatingPercent',\n    0x8298: {\n        name: 'Copyright',\n        description: (value) => value.join('; ')\n    },\n    0x830e: 'PixelScale',\n    0x83bb: 'IPTC-NAA',\n    0x8480: 'IntergraphMatrix',\n    0x8482: 'ModelTiePoint',\n    0x8546: 'SEMInfo',\n    0x85d8: 'ModelTransform',\n    0x8649: 'PhotoshopSettings',\n    0x8769: 'Exif IFD Pointer',\n    0x8773: 'ICC_Profile',\n    0x87af: 'GeoTiffDirectory',\n    0x87b0: 'GeoTiffDoubleParams',\n    0x87b1: 'GeoTiffAsciiParams',\n    0x8825: 'GPS Info IFD Pointer',\n    0x9c9b: {\n        name: 'XPTitle',\n        description: decodeXPValue,\n    },\n    0x9c9c: {\n        name: 'XPComment',\n        description: decodeXPValue\n    },\n    0x9c9d: {\n        name: 'XPAuthor',\n        description: decodeXPValue,\n    },\n    0x9c9e: {\n        name: 'XPKeywords',\n        description: decodeXPValue,\n    },\n    0x9c9f: {\n        name: 'XPSubject',\n        description: decodeXPValue,\n    },\n    0xa480: 'GDALMetadata',\n    0xa481: 'GDALNoData',\n    0xc4a5: 'PrintIM',\n    0xc613: 'DNGBackwardVersion',\n    0xc614: 'UniqueCameraModel',\n    0xc615: 'LocalizedCameraModel',\n    0xc621: 'ColorMatrix1',\n    0xc622: 'ColorMatrix2',\n    0xc623: 'CameraCalibration1',\n    0xc624: 'CameraCalibration2',\n    0xc625: 'ReductionMatrix1',\n    0xc626: 'ReductionMatrix2',\n    0xc627: 'AnalogBalance',\n    0xc628: 'AsShotNeutral',\n    0xc629: 'AsShotWhiteXY',\n    0xc62a: 'BaselineExposure',\n    0xc62b: 'BaselineNoise',\n    0xc62c: 'BaselineSharpness',\n    0xc62e: 'LinearResponseLimit',\n    0xc62f: 'CameraSerialNumber',\n    0xc630: 'DNGLensInfo',\n    0xc633: 'ShadowScale',\n    0xc635: {\n        name: 'MakerNoteSafety',\n        description: (value) => ({\n            0: 'Unsafe',\n            1: 'Safe'\n        })[value] || 'Unknown'\n    },\n    0xc65a: {\n        name: 'CalibrationIlluminant1',\n        description: TagNamesCommon['LightSource']\n    },\n    0xc65b: {\n        name: 'CalibrationIlluminant2',\n        description: TagNamesCommon['LightSource']\n    },\n    0xc65d: 'RawDataUniqueID',\n    0xc68b: 'OriginalRawFileName',\n    0xc68c: 'OriginalRawFileData',\n    0xc68f: 'AsShotICCProfile',\n    0xc690: 'AsShotPreProfileMatrix',\n    0xc691: 'CurrentICCProfile',\n    0xc692: 'CurrentPreProfileMatrix',\n    0xc6bf: 'ColorimetricReference',\n    0xc6c5: 'SRawType',\n    0xc6d2: 'PanasonicTitle',\n    0xc6d3: 'PanasonicTitle2',\n    0xc6f3: 'CameraCalibrationSig',\n    0xc6f4: 'ProfileCalibrationSig',\n    0xc6f5: 'ProfileIFD',\n    0xc6f6: 'AsShotProfileName',\n    0xc6f8: 'ProfileName',\n    0xc6f9: 'ProfileHueSatMapDims',\n    0xc6fa: 'ProfileHueSatMapData1',\n    0xc6fb: 'ProfileHueSatMapData2',\n    0xc6fc: 'ProfileToneCurve',\n    0xc6fd: {\n        name: 'ProfileEmbedPolicy',\n        description: (value) => ({\n            0: 'Allow Copying',\n            1: 'Embed if Used',\n            2: 'Never Embed',\n            3: 'No Restrictions'\n        })[value] || 'Unknown'\n    },\n    0xc6fe: 'ProfileCopyright',\n    0xc714: 'ForwardMatrix1',\n    0xc715: 'ForwardMatrix2',\n    0xc716: 'PreviewApplicationName',\n    0xc717: 'PreviewApplicationVersion',\n    0xc718: 'PreviewSettingsName',\n    0xc719: 'PreviewSettingsDigest',\n    0xc71a: {\n        name: 'PreviewColorSpace',\n        description: (value) => ({\n            1: 'Gray Gamma 2.2',\n            2: 'sRGB',\n            3: 'Adobe RGB',\n            4: 'ProPhoto RGB'\n        })[value] || 'Unknown'\n    },\n    0xc71b: 'PreviewDateTime',\n    0xc71c: 'RawImageDigest',\n    0xc71d: 'OriginalRawFileDigest',\n    0xc725: 'ProfileLookTableDims',\n    0xc726: 'ProfileLookTableData',\n    0xc763: 'TimeCodes',\n    0xc764: 'FrameRate',\n    0xc772: 'TStop',\n    0xc789: 'ReelName',\n    0xc791: 'OriginalDefaultFinalSize',\n    0xc792: 'OriginalBestQualitySize',\n    0xc793: 'OriginalDefaultCropSize',\n    0xc7a1: 'CameraLabel',\n    0xc7a3: {\n        name: 'ProfileHueSatMapEncoding',\n        description: (value) => ({\n            0: 'Linear',\n            1: 'sRGB'\n        })[value] || 'Unknown'\n    },\n    0xc7a4: {\n        name: 'ProfileLookTableEncoding',\n        description: (value) => ({\n            0: 'Linear',\n            1: 'sRGB'\n        })[value] || 'Unknown'\n    },\n    0xc7a5: 'BaselineExposureOffset',\n    0xc7a6: {\n        name: 'DefaultBlackRender',\n        description: (value) => ({\n            0: 'Auto',\n            1: 'None'\n        })[value] || 'Unknown'\n    },\n    0xc7a7: 'NewRawImageDigest',\n    0xc7a8: 'RawToPreviewGain'\n};\n\nfunction decodeXPValue(value) {\n    // The XP tags are encoded as UCS-2 which uses two bytes per character but\n    // it's close to UTF-16 so we can use that to decode them.\n    // https://www.loc.gov/preservation/digital/formats/content/tiff_tags.shtml\n    const decodedValue = new TextDecoder('utf-16').decode(new Uint8Array(value));\n    // Some softwares pad the string with null characters so we remove them.\n    return decodedValue.replace(/\\u0000+$/, ''); // eslint-disable-line no-control-regex\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport {getStringValue, getEncodedString} from './tag-names-utils.js';\nimport TagNamesCommon from './tag-names-common.js';\n\nexport default {\n    0x829a: {\n        'name': 'ExposureTime',\n        'description': TagNamesCommon.ExposureTime\n    },\n    0x829d: {\n        'name': 'FNumber',\n        'description': TagNamesCommon.FNumber\n    },\n    0x8822: {\n        'name': 'ExposureProgram',\n        'description': TagNamesCommon.ExposureProgram\n    },\n    0x8824: 'SpectralSensitivity',\n    0x8827: 'ISOSpeedRatings',\n    0x8828: {\n        'name': 'OECF',\n        'description': () => '[Raw OECF table data]'\n    },\n    0x882a: 'TimeZoneOffset',\n    0x882b: 'SelfTimerMode',\n    0x8830: {\n        name: 'SensitivityType',\n        description: (value) => ({\n            1: 'Standard Output Sensitivity',\n            2: 'Recommended Exposure Index',\n            3: 'ISO Speed',\n            4: 'Standard Output Sensitivity and Recommended Exposure Index',\n            5: 'Standard Output Sensitivity and ISO Speed',\n            6: 'Recommended Exposure Index and ISO Speed',\n            7: 'Standard Output Sensitivity, Recommended Exposure Index and ISO Speed'\n        })[value] || 'Unknown'\n    },\n    0x8831: 'StandardOutputSensitivity',\n    0x8832: 'RecommendedExposureIndex',\n    0x8833: 'ISOSpeed',\n    0x8834: 'ISOSpeedLatitudeyyy',\n    0x8835: 'ISOSpeedLatitudezzz',\n    0x9000: {\n        'name': 'ExifVersion',\n        'description': (value) => getStringValue(value)\n    },\n    0x9003: 'DateTimeOriginal',\n    0x9004: 'DateTimeDigitized',\n    0x9009: 'GooglePlusUploadCode',\n    0x9010: 'OffsetTime',\n    0x9011: 'OffsetTimeOriginal',\n    0x9012: 'OffsetTimeDigitized',\n    0x9101: {\n        'name': 'ComponentsConfiguration',\n        'description': TagNamesCommon.ComponentsConfiguration\n    },\n    0x9102: 'CompressedBitsPerPixel',\n    0x9201: {\n        'name': 'ShutterSpeedValue',\n        'description': TagNamesCommon.ShutterSpeedValue\n    },\n    0x9202: {\n        'name': 'ApertureValue',\n        'description': TagNamesCommon.ApertureValue\n    },\n    0x9203: 'BrightnessValue',\n    0x9204: 'ExposureBiasValue',\n    0x9205: {\n        'name': 'MaxApertureValue',\n        'description': (value) => {\n            return Math.pow(Math.sqrt(2), value[0] / value[1]).toFixed(2);\n        }\n    },\n    0x9206: {\n        'name': 'SubjectDistance',\n        'description': (value) => (value[0] / value[1]) + ' m'\n    },\n    0x9207: {\n        'name': 'MeteringMode',\n        'description': TagNamesCommon.MeteringMode\n    },\n    0x9208: {\n        'name': 'LightSource',\n        description: TagNamesCommon.LightSource\n    },\n    0x9209: {\n        'name': 'Flash',\n        'description': (value) => {\n            if (value === 0x00) {\n                return 'Flash did not fire';\n            } else if (value === 0x01) {\n                return 'Flash fired';\n            } else if (value === 0x05) {\n                return 'Strobe return light not detected';\n            } else if (value === 0x07) {\n                return 'Strobe return light detected';\n            } else if (value === 0x09) {\n                return 'Flash fired, compulsory flash mode';\n            } else if (value === 0x0d) {\n                return 'Flash fired, compulsory flash mode, return light not detected';\n            } else if (value === 0x0f) {\n                return 'Flash fired, compulsory flash mode, return light detected';\n            } else if (value === 0x10) {\n                return 'Flash did not fire, compulsory flash mode';\n            } else if (value === 0x18) {\n                return 'Flash did not fire, auto mode';\n            } else if (value === 0x19) {\n                return 'Flash fired, auto mode';\n            } else if (value === 0x1d) {\n                return 'Flash fired, auto mode, return light not detected';\n            } else if (value === 0x1f) {\n                return 'Flash fired, auto mode, return light detected';\n            } else if (value === 0x20) {\n                return 'No flash function';\n            } else if (value === 0x41) {\n                return 'Flash fired, red-eye reduction mode';\n            } else if (value === 0x45) {\n                return 'Flash fired, red-eye reduction mode, return light not detected';\n            } else if (value === 0x47) {\n                return 'Flash fired, red-eye reduction mode, return light detected';\n            } else if (value === 0x49) {\n                return 'Flash fired, compulsory flash mode, red-eye reduction mode';\n            } else if (value === 0x4d) {\n                return 'Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected';\n            } else if (value === 0x4f) {\n                return 'Flash fired, compulsory flash mode, red-eye reduction mode, return light detected';\n            } else if (value === 0x59) {\n                return 'Flash fired, auto mode, red-eye reduction mode';\n            } else if (value === 0x5d) {\n                return 'Flash fired, auto mode, return light not detected, red-eye reduction mode';\n            } else if (value === 0x5f) {\n                return 'Flash fired, auto mode, return light detected, red-eye reduction mode';\n            }\n            return 'Unknown';\n        }\n    },\n    0x920a: {\n        'name': 'FocalLength',\n        'description': TagNamesCommon.FocalLength\n    },\n    0x9211: 'ImageNumber',\n    0x9212: {\n        name: 'SecurityClassification',\n        description: (value) => ({\n            'C': 'Confidential',\n            'R': 'Restricted',\n            'S': 'Secret',\n            'T': 'Top Secret',\n            'U': 'Unclassified'\n        })[value] || 'Unknown'\n    },\n    0x9213: 'ImageHistory',\n    0x9214: {\n        'name': 'SubjectArea',\n        'description': (value) => {\n            if (value.length === 2) {\n                return `Location; X: ${value[0]}, Y: ${value[1]}`;\n            } else if (value.length === 3) {\n                return `Circle; X: ${value[0]}, Y: ${value[1]}, diameter: ${value[2]}`;\n            } else if (value.length === 4) {\n                return `Rectangle; X: ${value[0]}, Y: ${value[1]}, width: ${value[2]}, height: ${value[3]}`;\n            }\n            return 'Unknown';\n        }\n    },\n    0x927c: {\n        'name': 'MakerNote',\n        'description': () => '[Raw maker note data]'\n    },\n    0x9286: {\n        'name': 'UserComment',\n        'description': getEncodedString\n    },\n    0x9290: 'SubSecTime',\n    0x9291: 'SubSecTimeOriginal',\n    0x9292: 'SubSecTimeDigitized',\n    0x935c: 'ImageSourceData',\n    0x9400: {\n        'name': 'AmbientTemperature',\n        'description': (value) => (value[0] / value[1]) + ' °C'\n    },\n    0x9401: {\n        'name': 'Humidity',\n        'description': (value) => (value[0] / value[1]) + ' %'\n    },\n    0x9402: {\n        'name': 'Pressure',\n        'description': (value) => (value[0] / value[1]) + ' hPa'\n    },\n    0x9403: {\n        'name': 'WaterDepth',\n        'description': (value) => (value[0] / value[1]) + ' m'\n    },\n    0x9404: {\n        'name': 'Acceleration',\n        'description': (value) => (value[0] / value[1]) + ' mGal'\n    },\n    0x9405: {\n        'name': 'CameraElevationAngle',\n        'description': (value) => (value[0] / value[1]) + ' °'\n    },\n    0xa000: {\n        'name': 'FlashpixVersion',\n        'description': (value) => value.map((charCode) => String.fromCharCode(charCode)).join('')\n    },\n    0xa001: {\n        'name': 'ColorSpace',\n        'description': TagNamesCommon.ColorSpace\n    },\n    0xa002: 'PixelXDimension',\n    0xa003: 'PixelYDimension',\n    0xa004: 'RelatedSoundFile',\n    0xa005: 'Interoperability IFD Pointer',\n    0xa20b: 'FlashEnergy',\n    0xa20c: {\n        'name': 'SpatialFrequencyResponse',\n        'description': () => '[Raw SFR table data]'\n    },\n    0xa20e: 'FocalPlaneXResolution',\n    0xa20f: 'FocalPlaneYResolution',\n    0xa210: {\n        'name': 'FocalPlaneResolutionUnit',\n        'description': TagNamesCommon.FocalPlaneResolutionUnit\n    },\n    0xa214: {\n        'name': 'SubjectLocation',\n        'description': ([x, y]) => `X: ${x}, Y: ${y}`\n    },\n    0xa215: 'ExposureIndex',\n    0xa217: {\n        'name': 'SensingMethod',\n        'description': (value) => {\n            if (value === 1) {\n                return 'Undefined';\n            } else if (value === 2) {\n                return 'One-chip color area sensor';\n            } else if (value === 3) {\n                return 'Two-chip color area sensor';\n            } else if (value === 4) {\n                return 'Three-chip color area sensor';\n            } else if (value === 5) {\n                return 'Color sequential area sensor';\n            } else if (value === 7) {\n                return 'Trilinear sensor';\n            } else if (value === 8) {\n                return 'Color sequential linear sensor';\n            }\n            return 'Unknown';\n        }\n    },\n    0xa300: {\n        'name': 'FileSource',\n        'description': (value) => {\n            if (value === 3) {\n                return 'DSC';\n            }\n            return 'Unknown';\n        }\n    },\n    0xa301: {\n        'name': 'SceneType',\n        'description': (value) => {\n            if (value === 1) {\n                return 'A directly photographed image';\n            }\n            return 'Unknown';\n        }\n    },\n    0xa302: {\n        'name': 'CFAPattern',\n        'description': () => '[Raw CFA pattern table data]'\n    },\n    0xa401: {\n        'name': 'CustomRendered',\n        'description': TagNamesCommon.CustomRendered\n    },\n    0xa402: {\n        'name': 'ExposureMode',\n        'description': TagNamesCommon.ExposureMode\n    },\n    0xa403: {\n        'name': 'WhiteBalance',\n        'description': TagNamesCommon.WhiteBalance\n    },\n    0xa404: {\n        'name': 'DigitalZoomRatio',\n        'description': (value) => {\n            if (value[0] === 0) {\n                return 'Digital zoom was not used';\n            }\n            return '' + (value[0] / value[1]);\n        }\n    },\n    0xa405: {\n        'name': 'FocalLengthIn35mmFilm', // Sometimes called FocalLengthIn35mmFormat.\n        'description': TagNamesCommon.FocalLengthIn35mmFilm\n    },\n    0xa406: {\n        'name': 'SceneCaptureType',\n        'description': TagNamesCommon.SceneCaptureType\n    },\n    0xa407: {\n        'name': 'GainControl',\n        'description': (value) => {\n            if (value === 0) {\n                return 'None';\n            } else if (value === 1) {\n                return 'Low gain up';\n            } else if (value === 2) {\n                return 'High gain up';\n            } else if (value === 3) {\n                return 'Low gain down';\n            } else if (value === 4) {\n                return 'High gain down';\n            }\n            return 'Unknown';\n        }\n    },\n    0xa408: {\n        'name': 'Contrast',\n        'description': TagNamesCommon.Contrast\n    },\n    0xa409: {\n        'name': 'Saturation',\n        'description': TagNamesCommon.Saturation\n    },\n    0xa40a: {\n        'name': 'Sharpness',\n        'description': TagNamesCommon.Sharpness\n    },\n    0xa40b: {\n        'name': 'DeviceSettingDescription',\n        'description': () => '[Raw device settings table data]'\n    },\n    0xa40c: {\n        'name': 'SubjectDistanceRange',\n        'description': (value) => {\n            if (value === 1) {\n                return 'Macro';\n            } else if (value === 2) {\n                return 'Close view';\n            } else if (value === 3) {\n                return 'Distant view';\n            }\n            return 'Unknown';\n        }\n    },\n    0xa420: 'ImageUniqueID',\n    0xa430: 'CameraOwnerName',\n    0xa431: 'BodySerialNumber',\n    0xa432: {\n        'name': 'LensSpecification',\n        'description': (value) => {\n            const focalLengthFrom = parseFloat((value[0][0] / value[0][1]).toFixed(5));\n            const focalLengthTo = parseFloat((value[1][0] / value[1][1]).toFixed(5));\n            const focalLengths = `${focalLengthFrom}-${focalLengthTo} mm`;\n            if (value[3][1] === 0) {\n                return `${focalLengths} f/?`;\n            }\n            const maxAperture = 1 / ((value[2][1] / value[2][1]) / (value[3][0] / value[3][1]));\n            return `${focalLengths} f/${parseFloat(maxAperture.toFixed(5))}`;\n        }\n    },\n    0xa433: 'LensMake',\n    0xa434: 'LensModel',\n    0xa435: 'LensSerialNumber',\n    0xa460: {\n        name: 'CompositeImage',\n        description: (value) => ({\n            1: 'Not a Composite Image',\n            2: 'General Composite Image',\n            3: 'Composite Image Captured While Shooting',\n        })[value] || 'Unknown'\n    },\n    0xa461: 'SourceImageNumberOfCompositeImage',\n    0xa462: 'SourceExposureTimesOfCompositeImage',\n    0xa500: 'Gamma',\n    0xea1c: 'Padding',\n    0xea1d: 'OffsetSchema',\n    0xfde8: 'OwnerName',\n    0xfde9: 'SerialNumber',\n    0xfdea: 'Lens',\n    0xfe4c: 'RawFile',\n    0xfe4d: 'Converter',\n    0xfe4e: 'WhiteBalance',\n    0xfe51: 'Exposure',\n    0xfe52: 'Shadows',\n    0xfe53: 'Brightness',\n    0xfe54: 'Contrast',\n    0xfe55: 'Saturation',\n    0xfe56: 'Sharpness',\n    0xfe57: 'Smoothness',\n    0xfe58: 'MoireFilter'\n};\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport {getEncodedString, getCalculatedGpsValue} from './tag-names-utils.js';\n\nexport default {\n    0x0000: {\n        'name': 'GPSVersionID',\n        'description': (value) => {\n            if (value[0] === 2 && value[1] === 2 && value[2] === 0 && value[3] === 0) {\n                return 'Version 2.2';\n            }\n            return 'Unknown';\n        }\n    },\n    0x0001: {\n        'name': 'GPSLatitudeRef',\n        'description': (value) => {\n            const ref = value.join('');\n            if (ref === 'N') {\n                return 'North latitude';\n            } else if (ref === 'S') {\n                return 'South latitude';\n            }\n            return 'Unknown';\n        }\n    },\n    0x0002: {\n        'name': 'GPSLatitude',\n        'description': getCalculatedGpsValue\n    },\n    0x0003: {\n        'name': 'GPSLongitudeRef',\n        'description': (value) => {\n            const ref = value.join('');\n            if (ref === 'E') {\n                return 'East longitude';\n            } else if (ref === 'W') {\n                return 'West longitude';\n            }\n            return 'Unknown';\n        }\n    },\n    0x0004: {\n        'name': 'GPSLongitude',\n        'description': getCalculatedGpsValue\n    },\n    0x0005: {\n        'name': 'GPSAltitudeRef',\n        'description': (value) => {\n            if (value === 0) {\n                return 'Sea level';\n            } else if (value === 1) {\n                return 'Sea level reference (negative value)';\n            }\n            return 'Unknown';\n        }\n    },\n    0x0006: {\n        'name': 'GPSAltitude',\n        'description': (value) => {\n            return (value[0] / value[1]) + ' m';\n        }\n    },\n    0x0007: {\n        'name': 'GPSTimeStamp',\n        'description': (values) => {\n            return values.map(([numerator, denominator]) => {\n                const num = numerator / denominator;\n                if (/^\\d(\\.|$)/.test(`${num}`)) {\n                    return `0${num}`;\n                }\n                return num;\n            }).join(':');\n        }\n    },\n    0x0008: 'GPSSatellites',\n    0x0009: {\n        'name': 'GPSStatus',\n        'description': (value) => {\n            const status = value.join('');\n            if (status === 'A') {\n                return 'Measurement in progress';\n            } else if (status === 'V') {\n                return 'Measurement Interoperability';\n            }\n            return 'Unknown';\n        }\n    },\n    0x000a: {\n        'name': 'GPSMeasureMode',\n        'description': (value) => {\n            const mode = value.join('');\n            if (mode === '2') {\n                return '2-dimensional measurement';\n            } else if (mode === '3') {\n                return '3-dimensional measurement';\n            }\n            return 'Unknown';\n        }\n    },\n    0x000b: 'GPSDOP',\n    0x000c: {\n        'name': 'GPSSpeedRef',\n        'description': (value) => {\n            const ref = value.join('');\n            if (ref === 'K') {\n                return 'Kilometers per hour';\n            } else if (ref === 'M') {\n                return 'Miles per hour';\n            } else if (ref === 'N') {\n                return 'Knots';\n            }\n            return 'Unknown';\n        }\n    },\n    0x000d: 'GPSSpeed',\n    0x000e: {\n        'name': 'GPSTrackRef',\n        'description': (value) => {\n            const ref = value.join('');\n            if (ref === 'T') {\n                return 'True direction';\n            } else if (ref === 'M') {\n                return 'Magnetic direction';\n            }\n            return 'Unknown';\n        }\n    },\n    0x000f: 'GPSTrack',\n    0x0010: {\n        'name': 'GPSImgDirectionRef',\n        'description': (value) => {\n            const ref = value.join('');\n            if (ref === 'T') {\n                return 'True direction';\n            } else if (ref === 'M') {\n                return 'Magnetic direction';\n            }\n            return 'Unknown';\n        }\n    },\n    0x0011: 'GPSImgDirection',\n    0x0012: 'GPSMapDatum',\n    0x0013: {\n        'name': 'GPSDestLatitudeRef',\n        'description': (value) => {\n            const ref = value.join('');\n            if (ref === 'N') {\n                return 'North latitude';\n            } else if (ref === 'S') {\n                return 'South latitude';\n            }\n            return 'Unknown';\n        }\n    },\n    0x0014: {\n        'name': 'GPSDestLatitude',\n        'description': (value) => {\n            return (value[0][0] / value[0][1]) + (value[1][0] / value[1][1]) / 60 + (value[2][0] / value[2][1]) / 3600;\n        }\n    },\n    0x0015: {\n        'name': 'GPSDestLongitudeRef',\n        'description': (value) => {\n            const ref = value.join('');\n            if (ref === 'E') {\n                return 'East longitude';\n            } else if (ref === 'W') {\n                return 'West longitude';\n            }\n            return 'Unknown';\n        }\n    },\n    0x0016: {\n        'name': 'GPSDestLongitude',\n        'description': (value) => {\n            return (value[0][0] / value[0][1]) + (value[1][0] / value[1][1]) / 60 + (value[2][0] / value[2][1]) / 3600;\n        }\n    },\n    0x0017: {\n        'name': 'GPSDestBearingRef',\n        'description': (value) => {\n            const ref = value.join('');\n            if (ref === 'T') {\n                return 'True direction';\n            } else if (ref === 'M') {\n                return 'Magnetic direction';\n            }\n            return 'Unknown';\n        }\n    },\n    0x0018: 'GPSDestBearing',\n    0x0019: {\n        'name': 'GPSDestDistanceRef',\n        'description': (value) => {\n            const ref = value.join('');\n            if (ref === 'K') {\n                return 'Kilometers';\n            } else if (ref === 'M') {\n                return 'Miles';\n            } else if (ref === 'N') {\n                return 'Knots';\n            }\n            return 'Unknown';\n        }\n    },\n    0x001a: 'GPSDestDistance',\n    0x001b: {\n        'name': 'GPSProcessingMethod',\n        'description': getEncodedString\n    },\n    0x001c: {\n        'name': 'GPSAreaInformation',\n        'description': getEncodedString\n    },\n    0x001d: 'GPSDateStamp',\n    0x001e: {\n        'name': 'GPSDifferential',\n        'description': (value) => {\n            if (value === 0) {\n                return 'Measurement without differential correction';\n            } else if (value === 1) {\n                return 'Differential correction applied';\n            }\n            return 'Unknown';\n        }\n    },\n    0x001f: 'GPSHPositioningError'\n};\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport {getStringValue} from './tag-names-utils.js';\n\nexport default {\n    0x0001: 'InteroperabilityIndex',\n    0x0002: {\n        name: 'InteroperabilityVersion',\n        description: (value) => getStringValue(value)\n    },\n    0x1000: 'RelatedImageFileFormat',\n    0x1001: 'RelatedImageWidth',\n    0x1002: 'RelatedImageHeight'\n};\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport {getStringValue} from './tag-names-utils.js';\n\nexport default {\n    0xb000: {\n        'name': 'MPFVersion',\n        'description': (value) => getStringValue(value)\n    },\n    0xb001: 'NumberOfImages',\n    0xb002: 'MPEntry',\n    0xb003: 'ImageUIDList',\n    0xb004: 'TotalFrames'\n};\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nexport default {\n    0x0004: {\n        'name': 'ShotInfo',\n        'description': (value) => value\n    },\n};\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nexport default {\n    0x0000: {\n        'name': 'PentaxVersion',\n        'description': (value) => value.join('.')\n    },\n    0x0005: 'PentaxModelID',\n    0x022b: 'LevelInfo'\n};\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport {objectAssign} from './utils.js';\nimport Constants from './constants.js';\nimport TagNames0thIfd from './tag-names-0th-ifd.js';\nimport TagNamesExifIfd from './tag-names-exif-ifd.js';\nimport TagNamesGpsIfd from './tag-names-gps-ifd.js';\nimport TagNamesInteroperabilityIfd from './tag-names-interoperability-ifd.js';\nimport TagNamesMpfIfd from './tag-names-mpf-ifd.js';\nimport TagNamesCanonIfd from './tag-names-canon-ifd.js';\nimport TagNamesPentaxIfd from './tag-names-pentax-ifd.js';\n\nconst tagNames0thExifIfds = objectAssign({}, TagNames0thIfd, TagNamesExifIfd);\n\nexport const IFD_TYPE_0TH = '0th';\nexport const IFD_TYPE_1ST = '1st';\nexport const IFD_TYPE_EXIF = 'exif';\nexport const IFD_TYPE_GPS = 'gps';\nexport const IFD_TYPE_INTEROPERABILITY = 'interoperability';\nexport const IFD_TYPE_MPF = 'mpf';\nexport const IFD_TYPE_CANON = 'canon';\nexport const IFD_TYPE_PENTAX = 'pentax';\n\nexport default {\n    [IFD_TYPE_0TH]: tagNames0thExifIfds,\n    [IFD_TYPE_1ST]: TagNames0thIfd,\n    [IFD_TYPE_EXIF]: tagNames0thExifIfds,\n    [IFD_TYPE_GPS]: TagNamesGpsIfd,\n    [IFD_TYPE_INTEROPERABILITY]: TagNamesInteroperabilityIfd,\n    [IFD_TYPE_MPF]: Constants.USE_MPF ? TagNamesMpfIfd : {},\n    [IFD_TYPE_CANON]: Constants.USE_MAKER_NOTES ? TagNamesCanonIfd : {},\n    [IFD_TYPE_PENTAX]: Constants.USE_MAKER_NOTES ? TagNamesPentaxIfd : {},\n};\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport ByteOrder from './byte-order.js';\n\nconst typeSizes = {\n    1: 1, // BYTE\n    2: 1, // ASCII\n    3: 2, // SHORT\n    4: 4, // LONG\n    5: 8, // RATIONAL\n    7: 1, // UNDEFINED\n    9: 4, // SLONG\n    10: 8, // SRATIONAL\n    13: 4 // IFD\n};\n\nconst tagTypes = {\n    'BYTE': 1,\n    'ASCII': 2,\n    'SHORT': 3,\n    'LONG': 4,\n    'RATIONAL': 5,\n    'UNDEFINED': 7,\n    'SLONG': 9,\n    'SRATIONAL': 10,\n    'IFD': 13\n};\n\nexport default {\n    getAsciiValue,\n    getByteAt,\n    getAsciiAt,\n    getShortAt,\n    getLongAt,\n    getRationalAt,\n    getUndefinedAt,\n    getSlongAt,\n    getSrationalAt,\n    getIfdPointerAt,\n    typeSizes,\n    tagTypes,\n    getTypeSize\n};\n\nfunction getAsciiValue(charArray) {\n    return charArray.map((charCode) => String.fromCharCode(charCode));\n}\n\nfunction getByteAt(dataView, offset) {\n    return dataView.getUint8(offset);\n}\n\nfunction getAsciiAt(dataView, offset) {\n    return dataView.getUint8(offset);\n}\n\nfunction getShortAt(dataView, offset, byteOrder) {\n    return dataView.getUint16(offset, byteOrder === ByteOrder.LITTLE_ENDIAN);\n}\n\nfunction getLongAt(dataView, offset, byteOrder) {\n    return dataView.getUint32(offset, byteOrder === ByteOrder.LITTLE_ENDIAN);\n}\n\nfunction getRationalAt(dataView, offset, byteOrder) {\n    return [getLongAt(dataView, offset, byteOrder), getLongAt(dataView, offset + 4, byteOrder)];\n}\n\nfunction getUndefinedAt(dataView, offset) {\n    return getByteAt(dataView, offset);\n}\n\nfunction getSlongAt(dataView, offset, byteOrder) {\n    return dataView.getInt32(offset, byteOrder === ByteOrder.LITTLE_ENDIAN);\n}\n\nfunction getSrationalAt(dataView, offset, byteOrder) {\n    return [getSlongAt(dataView, offset, byteOrder), getSlongAt(dataView, offset + 4, byteOrder)];\n}\n\nfunction getIfdPointerAt(dataView, offset, byteOrder) {\n    return getLongAt(dataView, offset, byteOrder);\n}\n\nfunction getTypeSize(typeName) {\n    if (tagTypes[typeName] === undefined) {\n        throw new Error('No such type found.');\n    }\n\n    return typeSizes[tagTypes[typeName]];\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport Constants from './constants.js';\nimport Types from './types.js';\nimport TagNames, {IFD_TYPE_0TH, IFD_TYPE_1ST, IFD_TYPE_PENTAX} from './tag-names.js';\n\nconst getTagValueAt = {\n    1: Types.getByteAt,\n    2: Types.getAsciiAt,\n    3: Types.getShortAt,\n    4: Types.getLongAt,\n    5: Types.getRationalAt,\n    7: Types.getUndefinedAt,\n    9: Types.getSlongAt,\n    10: Types.getSrationalAt,\n    13: Types.getIfdPointerAt\n};\n\nexport function get0thIfdOffset(dataView, tiffHeaderOffset, byteOrder) {\n    return tiffHeaderOffset + Types.getLongAt(dataView, tiffHeaderOffset + 4, byteOrder);\n}\n\nexport function readIfd(dataView, ifdType, offsetOrigin, offset, byteOrder, includeUnknown) {\n    const FIELD_COUNT_SIZE = Types.getTypeSize('SHORT');\n    const FIELD_SIZE = 12;\n\n    const tags = {};\n    const numberOfFields = getNumberOfFields(dataView, offset, byteOrder);\n\n    offset += FIELD_COUNT_SIZE;\n    for (let fieldIndex = 0; fieldIndex < numberOfFields; fieldIndex++) {\n        if (offset + FIELD_SIZE > dataView.byteLength) {\n            break;\n        }\n\n        const tag = readTag(dataView, ifdType, offsetOrigin, offset, byteOrder, includeUnknown);\n        if (tag !== undefined) {\n            tags[tag.name] = {\n                'id': tag.id,\n                'value': tag.value,\n                'description': tag.description\n            };\n            if (tag.name === 'MakerNote' || (ifdType === IFD_TYPE_PENTAX && tag.name === 'LevelInfo')) {\n                tags[tag.name].__offset = tag.__offset;\n            }\n        }\n\n        offset += FIELD_SIZE;\n    }\n\n    if (Constants.USE_THUMBNAIL && (offset < dataView.byteLength - Types.getTypeSize('LONG'))) {\n        const nextIfdOffset = Types.getLongAt(dataView, offset, byteOrder);\n        if (nextIfdOffset !== 0 && ifdType === IFD_TYPE_0TH) {\n            tags['Thumbnail'] = readIfd(dataView, IFD_TYPE_1ST, offsetOrigin, offsetOrigin + nextIfdOffset, byteOrder, includeUnknown);\n        }\n    }\n\n    return tags;\n}\n\nfunction getNumberOfFields(dataView, offset, byteOrder) {\n    if (offset + Types.getTypeSize('SHORT') <= dataView.byteLength) {\n        return Types.getShortAt(dataView, offset, byteOrder);\n    }\n    return 0;\n}\n\nfunction readTag(dataView, ifdType, offsetOrigin, offset, byteOrder, includeUnknown) {\n    const TAG_CODE_IPTC_NAA = 0x83bb;\n    const TAG_TYPE_OFFSET = Types.getTypeSize('SHORT');\n    const TAG_COUNT_OFFSET = TAG_TYPE_OFFSET + Types.getTypeSize('SHORT');\n    const TAG_VALUE_OFFSET = TAG_COUNT_OFFSET + Types.getTypeSize('LONG');\n\n    const tagCode = Types.getShortAt(dataView, offset, byteOrder);\n    const tagType = Types.getShortAt(dataView, offset + TAG_TYPE_OFFSET, byteOrder);\n    const tagCount = Types.getLongAt(dataView, offset + TAG_COUNT_OFFSET, byteOrder);\n    let tagValue;\n    let tagValueOffset;\n\n    if (Types.typeSizes[tagType] === undefined || (!includeUnknown && TagNames[ifdType][tagCode] === undefined)) {\n        return undefined;\n    }\n\n    if (tagValueFitsInOffsetSlot(tagType, tagCount)) {\n        tagValueOffset = offset + TAG_VALUE_OFFSET;\n        tagValue = getTagValue(dataView, tagValueOffset, tagType, tagCount, byteOrder);\n    } else {\n        tagValueOffset = Types.getLongAt(dataView, offset + TAG_VALUE_OFFSET, byteOrder);\n        if (tagValueFitsInDataView(dataView, offsetOrigin, tagValueOffset, tagType, tagCount)) {\n            const forceByteType = tagCode === TAG_CODE_IPTC_NAA;\n            tagValue = getTagValue(dataView, offsetOrigin + tagValueOffset, tagType, tagCount, byteOrder, forceByteType);\n        } else {\n            tagValue = '<faulty value>';\n        }\n    }\n\n    if (tagType === Types.tagTypes['ASCII']) {\n        tagValue = splitNullSeparatedAsciiString(tagValue);\n        tagValue = decodeAsciiValue(tagValue);\n    }\n\n    let tagName = `undefined-${tagCode}`;\n    let tagDescription = tagValue;\n\n    if (TagNames[ifdType][tagCode] !== undefined) {\n        if ((TagNames[ifdType][tagCode]['name'] !== undefined) && (TagNames[ifdType][tagCode]['description'] !== undefined)) {\n            tagName = TagNames[ifdType][tagCode]['name'];\n            try {\n                tagDescription = TagNames[ifdType][tagCode]['description'](tagValue);\n            } catch (error) {\n                tagDescription = getDescriptionFromTagValue(tagValue);\n            }\n        } else if ((tagType === Types.tagTypes['RATIONAL']) || (tagType === Types.tagTypes['SRATIONAL'])) {\n            tagName = TagNames[ifdType][tagCode];\n            tagDescription = '' + (tagValue[0] / tagValue[1]);\n        } else {\n            tagName = TagNames[ifdType][tagCode];\n            tagDescription = getDescriptionFromTagValue(tagValue);\n        }\n    }\n\n    return {\n        id: tagCode,\n        name: tagName,\n        value: tagValue,\n        description: tagDescription,\n        __offset: tagValueOffset\n    };\n}\n\nfunction tagValueFitsInOffsetSlot(tagType, tagCount) {\n    return Types.typeSizes[tagType] * tagCount <= Types.getTypeSize('LONG');\n}\n\nfunction getTagValue(dataView, offset, type, count, byteOrder, forceByteType = false) {\n    let value = [];\n\n    if (forceByteType) {\n        count = count * Types.typeSizes[type];\n        type = Types.tagTypes['BYTE'];\n    }\n    for (let valueIndex = 0; valueIndex < count; valueIndex++) {\n        value.push(getTagValueAt[type](dataView, offset, byteOrder));\n        offset += Types.typeSizes[type];\n    }\n\n    if (type === Types.tagTypes['ASCII']) {\n        value = Types.getAsciiValue(value);\n    } else if (value.length === 1) {\n        value = value[0];\n    }\n\n    return value;\n}\n\nfunction tagValueFitsInDataView(dataView, offsetOrigin, tagValueOffset, tagType, tagCount) {\n    return offsetOrigin + tagValueOffset + Types.typeSizes[tagType] * tagCount <= dataView.byteLength;\n}\n\nfunction splitNullSeparatedAsciiString(string) {\n    const tagValue = [];\n    let i = 0;\n\n    for (let j = 0; j < string.length; j++) {\n        if (string[j] === '\\x00') {\n            i++;\n            continue;\n        }\n        if (tagValue[i] === undefined) {\n            tagValue[i] = '';\n        }\n        tagValue[i] += string[j];\n    }\n\n    return tagValue;\n}\n\nfunction decodeAsciiValue(asciiValue) {\n    try {\n        return asciiValue.map((value) => decodeURIComponent(escape(value)));\n    } catch (error) {\n        return asciiValue;\n    }\n}\n\nfunction getDescriptionFromTagValue(tagValue) {\n    if (tagValue instanceof Array) {\n        return tagValue.join(', ');\n    }\n    return tagValue;\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport {objectAssign} from './utils.js';\nimport ByteOrder from './byte-order.js';\nimport {IFD_TYPE_0TH, IFD_TYPE_EXIF, IFD_TYPE_GPS, IFD_TYPE_INTEROPERABILITY} from './tag-names.js';\nimport {readIfd, get0thIfdOffset} from './tags-helpers.js';\n\nconst EXIF_IFD_POINTER_KEY = 'Exif IFD Pointer';\nconst GPS_INFO_IFD_POINTER_KEY = 'GPS Info IFD Pointer';\nconst INTEROPERABILITY_IFD_POINTER_KEY = 'Interoperability IFD Pointer';\n\nexport default {\n    read,\n};\n\nfunction read(dataView, tiffHeaderOffset, includeUnknown) {\n    const byteOrder = ByteOrder.getByteOrder(dataView, tiffHeaderOffset);\n    let tags = read0thIfd(dataView, tiffHeaderOffset, byteOrder, includeUnknown);\n    tags = readExifIfd(tags, dataView, tiffHeaderOffset, byteOrder, includeUnknown);\n    tags = readGpsIfd(tags, dataView, tiffHeaderOffset, byteOrder, includeUnknown);\n    tags = readInteroperabilityIfd(tags, dataView, tiffHeaderOffset, byteOrder, includeUnknown);\n\n    return {tags, byteOrder};\n}\n\nfunction read0thIfd(dataView, tiffHeaderOffset, byteOrder, includeUnknown) {\n    return readIfd(dataView, IFD_TYPE_0TH, tiffHeaderOffset, get0thIfdOffset(dataView, tiffHeaderOffset, byteOrder), byteOrder, includeUnknown);\n}\n\nfunction readExifIfd(tags, dataView, tiffHeaderOffset, byteOrder, includeUnknown) {\n    if (tags[EXIF_IFD_POINTER_KEY] !== undefined) {\n        return objectAssign(tags, readIfd(dataView, IFD_TYPE_EXIF, tiffHeaderOffset, tiffHeaderOffset + tags[EXIF_IFD_POINTER_KEY].value, byteOrder, includeUnknown));\n    }\n\n    return tags;\n}\n\nfunction readGpsIfd(tags, dataView, tiffHeaderOffset, byteOrder, includeUnknown) {\n    if (tags[GPS_INFO_IFD_POINTER_KEY] !== undefined) {\n        return objectAssign(tags, readIfd(dataView, IFD_TYPE_GPS, tiffHeaderOffset, tiffHeaderOffset + tags[GPS_INFO_IFD_POINTER_KEY].value, byteOrder, includeUnknown));\n    }\n\n    return tags;\n}\n\nfunction readInteroperabilityIfd(tags, dataView, tiffHeaderOffset, byteOrder, includeUnknown) {\n    if (tags[INTEROPERABILITY_IFD_POINTER_KEY] !== undefined) {\n        return objectAssign(tags, readIfd(dataView, IFD_TYPE_INTEROPERABILITY, tiffHeaderOffset, tiffHeaderOffset + tags[INTEROPERABILITY_IFD_POINTER_KEY].value, byteOrder, includeUnknown));\n    }\n\n    return tags;\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport ByteOrder from './byte-order.js';\nimport Types from './types.js';\nimport {IFD_TYPE_MPF} from './tag-names.js';\nimport {deferInit, getBase64Image} from './utils.js';\nimport {readIfd, get0thIfdOffset} from './tags-helpers.js';\n\nexport default {\n    read\n};\n\nconst ENTRY_SIZE = 16;\n\nfunction read(dataView, dataOffset, includeUnknown) {\n    const byteOrder = ByteOrder.getByteOrder(dataView, dataOffset);\n    const tags = readIfd(dataView, IFD_TYPE_MPF, dataOffset, get0thIfdOffset(dataView, dataOffset, byteOrder), byteOrder, includeUnknown);\n    return addMpfImages(dataView, dataOffset, tags, byteOrder);\n}\n\nfunction addMpfImages(dataView, dataOffset, tags, byteOrder) {\n    if (!tags['MPEntry']) {\n        return tags;\n    }\n\n    const images = [];\n    for (let i = 0; i < Math.ceil(tags['MPEntry'].value.length / ENTRY_SIZE); i++) {\n        images[i] = {};\n\n        const attributes = getImageNumberValue(tags['MPEntry'].value, i * ENTRY_SIZE, Types.getTypeSize('LONG'), byteOrder);\n        images[i]['ImageFlags'] = getImageFlags(attributes);\n        images[i]['ImageFormat'] = getImageFormat(attributes);\n        images[i]['ImageType'] = getImageType(attributes);\n\n        const imageSize = getImageNumberValue(tags['MPEntry'].value, i * ENTRY_SIZE + 4, Types.getTypeSize('LONG'), byteOrder);\n        images[i]['ImageSize'] = {\n            value: imageSize,\n            description: '' + imageSize\n        };\n\n        const imageOffset = getImageOffset(i, tags['MPEntry'], byteOrder, dataOffset);\n        images[i]['ImageOffset'] = {\n            value: imageOffset,\n            description: '' + imageOffset\n        };\n\n        const dependentImage1EntryNumber =\n            getImageNumberValue(tags['MPEntry'].value, i * ENTRY_SIZE + 12, Types.getTypeSize('SHORT'), byteOrder);\n        images[i]['DependentImage1EntryNumber'] = {\n            value: dependentImage1EntryNumber,\n            description: '' + dependentImage1EntryNumber\n        };\n\n        const dependentImage2EntryNumber =\n            getImageNumberValue(tags['MPEntry'].value, i * ENTRY_SIZE + 14, Types.getTypeSize('SHORT'), byteOrder);\n        images[i]['DependentImage2EntryNumber'] = {\n            value: dependentImage2EntryNumber,\n            description: '' + dependentImage2EntryNumber\n        };\n\n        images[i].image = dataView.buffer.slice(imageOffset, imageOffset + imageSize);\n        deferInit(images[i], 'base64', function () {\n            return getBase64Image(this.image);\n        });\n    }\n\n    tags['Images'] = images;\n\n    return tags;\n}\n\nfunction getImageNumberValue(entries, offset, size, byteOrder) {\n    if (byteOrder === ByteOrder.LITTLE_ENDIAN) {\n        let value = 0;\n        for (let i = 0; i < size; i++) {\n            value += entries[offset + i] << (8 * i);\n        }\n        return value;\n    }\n\n    let value = 0;\n    for (let i = 0; i < size; i++) {\n        value += entries[offset + i] << (8 * (size - 1 - i));\n    }\n    return value;\n}\n\nfunction getImageFlags(attributes) {\n    const flags = [\n        (attributes >> 31) & 0x1,\n        (attributes >> 30) & 0x1,\n        (attributes >> 29) & 0x1\n    ];\n\n    const flagsDescription = [];\n\n    if (flags[0]) {\n        flagsDescription.push('Dependent Parent Image');\n    }\n    if (flags[1]) {\n        flagsDescription.push('Dependent Child Image');\n    }\n    if (flags[2]) {\n        flagsDescription.push('Representative Image');\n    }\n\n    return {\n        value: flags,\n        description: flagsDescription.join(', ') || 'None'\n    };\n}\n\nfunction getImageFormat(attributes) {\n    const imageFormat = attributes >> 24 & 0x7;\n    return {\n        value: imageFormat,\n        description: imageFormat === 0 ? 'JPEG' : 'Unknown'\n    };\n}\n\nfunction getImageType(attributes) {\n    const type = attributes & 0xffffff;\n    const descriptions = {\n        0x30000: 'Baseline MP Primary Image',\n        0x10001: 'Large Thumbnail (VGA equivalent)',\n        0x10002: 'Large Thumbnail (Full HD equivalent)',\n        0x20001: 'Multi-Frame Image (Panorama)',\n        0x20002: 'Multi-Frame Image (Disparity)',\n        0x20003: 'Multi-Frame Image (Multi-Angle)',\n        0x0: 'Undefined',\n    };\n\n    return {\n        value: type,\n        description: descriptions[type] || 'Unknown'\n    };\n}\n\nfunction getImageOffset(imageIndex, mpEntry, byteOrder, dataOffset) {\n    if (isFirstIndividualImage(imageIndex)) {\n        return 0;\n    }\n    return getImageNumberValue(mpEntry.value, imageIndex * ENTRY_SIZE + 8, Types.getTypeSize('LONG'), byteOrder) + dataOffset;\n}\n\nfunction isFirstIndividualImage(imageIndex) {\n    return imageIndex === 0;\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport Types from './types.js';\n\nexport default {\n    read\n};\n\nfunction read(dataView, fileDataOffset) {\n    const length = getLength(dataView, fileDataOffset);\n    const numberOfColorComponents = getNumberOfColorComponents(dataView, fileDataOffset, length);\n    return {\n        'Bits Per Sample': getDataPrecision(dataView, fileDataOffset, length),\n        'Image Height': getImageHeight(dataView, fileDataOffset, length),\n        'Image Width': getImageWidth(dataView, fileDataOffset, length),\n        'Color Components': numberOfColorComponents,\n        'Subsampling': numberOfColorComponents && getSubsampling(dataView, fileDataOffset, numberOfColorComponents.value, length)\n    };\n}\n\nfunction getLength(dataView, fileDataOffset) {\n    return Types.getShortAt(dataView, fileDataOffset);\n}\n\nfunction getDataPrecision(dataView, fileDataOffset, length) {\n    const OFFSET = 2;\n    const SIZE = 1;\n\n    if (OFFSET + SIZE > length) {\n        return undefined;\n    }\n\n    const value = Types.getByteAt(dataView, fileDataOffset + OFFSET);\n    return {\n        value,\n        description: '' + value\n    };\n}\n\nfunction getImageHeight(dataView, fileDataOffset, length) {\n    const OFFSET = 3;\n    const SIZE = 2;\n\n    if (OFFSET + SIZE > length) {\n        return undefined;\n    }\n\n    const value = Types.getShortAt(dataView, fileDataOffset + OFFSET);\n    return {\n        value,\n        description: `${value}px`\n    };\n}\n\nfunction getImageWidth(dataView, fileDataOffset, length) {\n    const OFFSET = 5;\n    const SIZE = 2;\n\n    if (OFFSET + SIZE > length) {\n        return undefined;\n    }\n\n    const value = Types.getShortAt(dataView, fileDataOffset + OFFSET);\n    return {\n        value,\n        description: `${value}px`\n    };\n}\n\nfunction getNumberOfColorComponents(dataView, fileDataOffset, length) {\n    const OFFSET = 7;\n    const SIZE = 1;\n\n    if (OFFSET + SIZE > length) {\n        return undefined;\n    }\n\n    const value = Types.getByteAt(dataView, fileDataOffset + OFFSET);\n    return {\n        value,\n        description: '' + value\n    };\n}\n\nfunction getSubsampling(dataView, fileDataOffset, numberOfColorComponents, length) {\n    const OFFSET = 8;\n    const SIZE = 3 * numberOfColorComponents;\n\n    if (OFFSET + SIZE > length) {\n        return undefined;\n    }\n\n    const components = [];\n\n    for (let i = 0; i < numberOfColorComponents; i++) {\n        const componentOffset = fileDataOffset + OFFSET + i * 3;\n        components.push([\n            Types.getByteAt(dataView, componentOffset),\n            Types.getByteAt(dataView, componentOffset + 1),\n            Types.getByteAt(dataView, componentOffset + 2)\n        ]);\n    }\n\n    return {\n        value: components,\n        description: components.length > 1 ? getComponentIds(components) + getSamplingType(components) : ''\n    };\n}\n\nfunction getComponentIds(components) {\n    const ids = {\n        0x01: 'Y',\n        0x02: 'Cb',\n        0x03: 'Cr',\n        0x04: 'I',\n        0x05: 'Q',\n    };\n\n    return components.map((compontent) => ids[compontent[0]]).join('');\n}\n\nfunction getSamplingType(components) {\n    const types = {\n        0x11: '4:4:4 (1 1)',\n        0x12: '4:4:0 (1 2)',\n        0x14: '4:4:1 (1 4)',\n        0x21: '4:2:2 (2 1)',\n        0x22: '4:2:0 (2 2)',\n        0x24: '4:2:1 (2 4)',\n        0x41: '4:1:1 (4 1)',\n        0x42: '4:1:0 (4 2)'\n    };\n\n    if (components.length === 0 || components[0][1] === undefined || types[components[0][1]] === undefined) {\n        return '';\n    }\n\n    return types[components[0][1]];\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport Types from './types.js';\n\nexport default {\n    read\n};\n\nfunction read(dataView, jfifDataOffset) {\n    const length = getLength(dataView, jfifDataOffset);\n    const thumbnailWidth = getThumbnailWidth(dataView, jfifDataOffset, length);\n    const thumbnailHeight = getThumbnailHeight(dataView, jfifDataOffset, length);\n    const tags = {\n        'JFIF Version': getVersion(dataView, jfifDataOffset, length),\n        'Resolution Unit': getResolutionUnit(dataView, jfifDataOffset, length),\n        'XResolution': getXResolution(dataView, jfifDataOffset, length),\n        'YResolution': getYResolution(dataView, jfifDataOffset, length),\n        'JFIF Thumbnail Width': thumbnailWidth,\n        'JFIF Thumbnail Height': thumbnailHeight\n    };\n\n    if (thumbnailWidth !== undefined && thumbnailHeight !== undefined) {\n        const thumbnail = getThumbnail(dataView, jfifDataOffset, 3 * thumbnailWidth.value * thumbnailHeight.value, length);\n        if (thumbnail) {\n            tags['JFIF Thumbnail'] = thumbnail;\n        }\n    }\n\n    for (const tagName in tags) {\n        if (tags[tagName] === undefined) {\n            delete tags[tagName];\n        }\n    }\n\n    return tags;\n}\n\nfunction getLength(dataView, jfifDataOffset) {\n    return Types.getShortAt(dataView, jfifDataOffset);\n}\n\nfunction getVersion(dataView, jfifDataOffset, length) {\n    const OFFSET = 7;\n    const SIZE = 2;\n\n    if (OFFSET + SIZE > length) {\n        return undefined;\n    }\n\n    const majorVersion = Types.getByteAt(dataView, jfifDataOffset + OFFSET);\n    const minorVersion = Types.getByteAt(dataView, jfifDataOffset + OFFSET + 1);\n    return {\n        value: majorVersion * 0x100 + minorVersion,\n        description: majorVersion + '.' + minorVersion\n    };\n}\n\nfunction getResolutionUnit(dataView, jfifDataOffset, length) {\n    const OFFSET = 9;\n    const SIZE = 1;\n\n    if (OFFSET + SIZE > length) {\n        return undefined;\n    }\n\n    const value = Types.getByteAt(dataView, jfifDataOffset + OFFSET);\n    return {\n        value,\n        description: getResolutionUnitDescription(value)\n    };\n}\n\nfunction getResolutionUnitDescription(value) {\n    if (value === 0) {\n        return 'None';\n    }\n    if (value === 1) {\n        return 'inches';\n    }\n    if (value === 2) {\n        return 'cm';\n    }\n    return 'Unknown';\n}\n\nfunction getXResolution(dataView, jfifDataOffset, length) {\n    const OFFSET = 10;\n    const SIZE = 2;\n\n    if (OFFSET + SIZE > length) {\n        return undefined;\n    }\n\n    const value = Types.getShortAt(dataView, jfifDataOffset + OFFSET);\n    return {\n        value,\n        description: '' + value\n    };\n}\n\nfunction getYResolution(dataView, jfifDataOffset, length) {\n    const OFFSET = 12;\n    const SIZE = 2;\n\n    if (OFFSET + SIZE > length) {\n        return undefined;\n    }\n\n    const value = Types.getShortAt(dataView, jfifDataOffset + OFFSET);\n    return {\n        value,\n        description: '' + value\n    };\n}\n\nfunction getThumbnailWidth(dataView, jfifDataOffset, length) {\n    const OFFSET = 14;\n    const SIZE = 1;\n\n    if (OFFSET + SIZE > length) {\n        return undefined;\n    }\n\n    const value = Types.getByteAt(dataView, jfifDataOffset + OFFSET);\n    return {\n        value,\n        description: `${value}px`\n    };\n}\n\nfunction getThumbnailHeight(dataView, jfifDataOffset, length) {\n    const OFFSET = 15;\n    const SIZE = 1;\n\n    if (OFFSET + SIZE > length) {\n        return undefined;\n    }\n\n    const value = Types.getByteAt(dataView, jfifDataOffset + OFFSET);\n    return {\n        value,\n        description: `${value}px`\n    };\n}\n\nfunction getThumbnail(dataView, jfifDataOffset, thumbnailLength, length) {\n    const OFFSET = 16;\n\n    if (thumbnailLength === 0 || OFFSET + thumbnailLength > length) {\n        return undefined;\n    }\n\n    const value = dataView.buffer.slice(jfifDataOffset + OFFSET, jfifDataOffset + OFFSET + thumbnailLength);\n    return {\n        value,\n        description: '<24-bit RGB pixel data>'\n    };\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport {getStringValue} from './tag-names-utils.js';\n\nexport default {\n    'iptc': {\n        0x0100: {\n            'name': 'Model Version',\n            'description': (value) => {\n                return ((value[0] << 8) + value[1]).toString();\n            }\n        },\n        0x0105: {\n            'name': 'Destination',\n            'repeatable': true\n        },\n        0x0114: {\n            'name': 'File Format',\n            'description': (value) => {\n                return ((value[0] << 8) + value[1]).toString();\n            }\n        },\n        0x0116: {\n            'name': 'File Format Version',\n            'description': (value) => {\n                return ((value[0] << 8) + value[1]).toString();\n            }\n        },\n        0x011e: 'Service Identifier',\n        0x0128: 'Envelope Number',\n        0x0132: 'Product ID',\n        0x013c: 'Envelope Priority',\n        0x0146: {\n            'name': 'Date Sent',\n            'description': getCreationDate\n        },\n        0x0150: {\n            'name': 'Time Sent',\n            'description': getCreationTime\n        },\n        0x015a: {\n            'name': 'Coded Character Set',\n            'description': getEncodingName,\n            'encoding_name': getEncodingName,\n        },\n        0x0164: 'UNO',\n        0x0178: {\n            'name': 'ARM Identifier',\n            'description': (value) => {\n                return ((value[0] << 8) + value[1]).toString();\n            }\n        },\n        0x017a: {\n            'name': 'ARM Version',\n            'description': (value) => {\n                return ((value[0] << 8) + value[1]).toString();\n            }\n        },\n        0x0200: {\n            'name': 'Record Version',\n            'description': (value) => {\n                return ((value[0] << 8) + value[1]).toString();\n            }\n        },\n        0x0203: 'Object Type Reference',\n        0x0204: 'Object Attribute Reference',\n        0x0205: 'Object Name',\n        0x0207: 'Edit Status',\n        0x0208: {\n            'name': 'Editorial Update',\n            'description': (value) => {\n                if (getStringValue(value) === '01') {\n                    return 'Additional Language';\n                }\n                return 'Unknown';\n            }\n        },\n        0x020a: 'Urgency',\n        0x020c: {\n            'name': 'Subject Reference',\n            'repeatable': true,\n            'description': (value) => {\n                const parts = getStringValue(value).split(':');\n                return parts[2] + (parts[3] ? '/' + parts[3] : '') + (parts[4] ? '/' + parts[4] : '');\n            }\n        },\n        0x020f: 'Category',\n        0x0214: {\n            'name': 'Supplemental Category',\n            'repeatable': true\n        },\n        0x0216: 'Fixture Identifier',\n        0x0219: {\n            'name': 'Keywords',\n            'repeatable': true\n        },\n        0x021a: {\n            'name': 'Content Location Code',\n            'repeatable': true\n        },\n        0x021b: {\n            'name': 'Content Location Name',\n            'repeatable': true\n        },\n        0x021e: 'Release Date',\n        0x0223: 'Release Time',\n        0x0225: 'Expiration Date',\n        0x0226: 'Expiration Time',\n        0x0228: 'Special Instructions',\n        0x022a: {\n            'name': 'Action Advised',\n            'description': (value) => {\n                const string = getStringValue(value);\n                if (string === '01') {\n                    return 'Object Kill';\n                } else if (string === '02') {\n                    return 'Object Replace';\n                } else if (string === '03') {\n                    return 'Object Append';\n                } else if (string === '04') {\n                    return 'Object Reference';\n                }\n                return 'Unknown';\n            }\n        },\n        0x022d: {\n            'name': 'Reference Service',\n            'repeatable': true\n        },\n        0x022f: {\n            'name': 'Reference Date',\n            'repeatable': true\n        },\n        0x0232: {\n            'name': 'Reference Number',\n            'repeatable': true\n        },\n        0x0237: {\n            'name': 'Date Created',\n            'description': getCreationDate\n        },\n        0x023c: {\n            'name': 'Time Created',\n            'description': getCreationTime\n        },\n        0x023e: {\n            'name': 'Digital Creation Date',\n            'description': getCreationDate\n        },\n        0x023f: {\n            'name': 'Digital Creation Time',\n            'description': getCreationTime\n        },\n        0x0241: 'Originating Program',\n        0x0246: 'Program Version',\n        0x024b: {\n            'name': 'Object Cycle',\n            'description': (value) => {\n                const string = getStringValue(value);\n                if (string === 'a') {\n                    return 'morning';\n                } else if (string === 'p') {\n                    return 'evening';\n                } else if (string === 'b') {\n                    return 'both';\n                }\n                return 'Unknown';\n            }\n        },\n        0x0250: {\n            'name': 'By-line',\n            'repeatable': true\n        },\n        0x0255: {\n            'name': 'By-line Title',\n            'repeatable': true\n        },\n        0x025a: 'City',\n        0x025c: 'Sub-location',\n        0x025f: 'Province/State',\n        0x0264: 'Country/Primary Location Code',\n        0x0265: 'Country/Primary Location Name',\n        0x0267: 'Original Transmission Reference',\n        0x0269: 'Headline',\n        0x026e: 'Credit',\n        0x0273: 'Source',\n        0x0274: 'Copyright Notice',\n        0x0276: {\n            'name': 'Contact',\n            'repeatable': true\n        },\n        0x0278: 'Caption/Abstract',\n        0x027a: {\n            'name': 'Writer/Editor',\n            'repeatable': true\n        },\n        0x027d: {\n            'name': 'Rasterized Caption',\n            'description': (value) => value\n        },\n        0x0282: 'Image Type',\n        0x0283: {\n            'name': 'Image Orientation',\n            'description': (value) => {\n                const string = getStringValue(value);\n                if (string === 'P') {\n                    return 'Portrait';\n                } else if (string === 'L') {\n                    return 'Landscape';\n                } else if (string === 'S') {\n                    return 'Square';\n                }\n                return 'Unknown';\n            }\n        },\n        0x0287: 'Language Identifier',\n        0x0296: {\n            'name': 'Audio Type',\n            'description': (value) => {\n                const stringValue = getStringValue(value);\n                const character0 = stringValue.charAt(0);\n                const character1 = stringValue.charAt(1);\n                let description = '';\n\n                if (character0 === '1') {\n                    description += 'Mono';\n                } else if (character0 === '2') {\n                    description += 'Stereo';\n                }\n\n                if (character1 === 'A') {\n                    description += ', actuality';\n                } else if (character1 === 'C') {\n                    description += ', question and answer session';\n                } else if (character1 === 'M') {\n                    description += ', music, transmitted by itself';\n                } else if (character1 === 'Q') {\n                    description += ', response to a question';\n                } else if (character1 === 'R') {\n                    description += ', raw sound';\n                } else if (character1 === 'S') {\n                    description += ', scener';\n                } else if (character1 === 'V') {\n                    description += ', voicer';\n                } else if (character1 === 'W') {\n                    description += ', wrap';\n                }\n\n                if (description !== '') {\n                    return description;\n                }\n                return stringValue;\n            }\n        },\n        0x0297: {\n            'name': 'Audio Sampling Rate',\n            'description': (value) => parseInt(getStringValue(value), 10) + ' Hz'\n        },\n        0x0298: {\n            'name': 'Audio Sampling Resolution',\n            'description': (value) => {\n                const bits = parseInt(getStringValue(value), 10);\n                return bits + (bits === 1 ? ' bit' : ' bits');\n            }\n        },\n        0x0299: {\n            'name': 'Audio Duration',\n            'description': (value) => {\n                const duration = getStringValue(value);\n                if (duration.length >= 6) {\n                    return duration.substr(0, 2) + ':' + duration.substr(2, 2) + ':' + duration.substr(4, 2);\n                }\n                return duration;\n            }\n        },\n        0x029a: 'Audio Outcue',\n        0x02ba: 'Short Document ID',\n        0x02bb: 'Unique Document ID',\n        0x02bc: 'Owner ID',\n        0x02c8: {\n            'name': (value) => {\n                if (value.length === 2) {\n                    return 'ObjectData Preview File Format';\n                }\n                return 'Record 2 destination';\n            },\n            'description': (value) => {\n                if (value.length === 2) {\n                    const intValue = (value[0] << 8) + value[1];\n                    if (intValue === 0) {\n                        return 'No ObjectData';\n                    } else if (intValue === 1) {\n                        return 'IPTC-NAA Digital Newsphoto Parameter Record';\n                    } else if (intValue === 2) {\n                        return 'IPTC7901 Recommended Message Format';\n                    } else if (intValue === 3) {\n                        return 'Tagged Image File Format (Adobe/Aldus Image data)';\n                    } else if (intValue === 4) {\n                        return 'Illustrator (Adobe Graphics data)';\n                    } else if (intValue === 5) {\n                        return 'AppleSingle (Apple Computer Inc)';\n                    } else if (intValue === 6) {\n                        return 'NAA 89-3 (ANPA 1312)';\n                    } else if (intValue === 7) {\n                        return 'MacBinary II';\n                    } else if (intValue === 8) {\n                        return 'IPTC Unstructured Character Oriented File Format (UCOFF)';\n                    } else if (intValue === 9) {\n                        return 'United Press International ANPA 1312 variant';\n                    } else if (intValue === 10) {\n                        return 'United Press International Down-Load Message';\n                    } else if (intValue === 11) {\n                        return 'JPEG File Interchange (JFIF)';\n                    } else if (intValue === 12) {\n                        return 'Photo-CD Image-Pac (Eastman Kodak)';\n                    } else if (intValue === 13) {\n                        return 'Microsoft Bit Mapped Graphics File [*.BMP]';\n                    } else if (intValue === 14) {\n                        return 'Digital Audio File [*.WAV] (Microsoft & Creative Labs)';\n                    } else if (intValue === 15) {\n                        return 'Audio plus Moving Video [*.AVI] (Microsoft)';\n                    } else if (intValue === 16) {\n                        return 'PC DOS/Windows Executable Files [*.COM][*.EXE]';\n                    } else if (intValue === 17) {\n                        return 'Compressed Binary File [*.ZIP] (PKWare Inc)';\n                    } else if (intValue === 18) {\n                        return 'Audio Interchange File Format AIFF (Apple Computer Inc)';\n                    } else if (intValue === 19) {\n                        return 'RIFF Wave (Microsoft Corporation)';\n                    } else if (intValue === 20) {\n                        return 'Freehand (Macromedia/Aldus)';\n                    } else if (intValue === 21) {\n                        return 'Hypertext Markup Language \"HTML\" (The Internet Society)';\n                    } else if (intValue === 22) {\n                        return 'MPEG 2 Audio Layer 2 (Musicom), ISO/IEC';\n                    } else if (intValue === 23) {\n                        return 'MPEG 2 Audio Layer 3, ISO/IEC';\n                    } else if (intValue === 24) {\n                        return 'Portable Document File (*.PDF) Adobe';\n                    } else if (intValue === 25) {\n                        return 'News Industry Text Format (NITF)';\n                    } else if (intValue === 26) {\n                        return 'Tape Archive (*.TAR)';\n                    } else if (intValue === 27) {\n                        return 'Tidningarnas Telegrambyrå NITF version (TTNITF DTD)';\n                    } else if (intValue === 28) {\n                        return 'Ritzaus Bureau NITF version (RBNITF DTD)';\n                    } else if (intValue === 29) {\n                        return 'Corel Draw [*.CDR]';\n                    }\n                    return `Unknown format ${intValue}`;\n                }\n                return getStringValue(value);\n            }\n        },\n        0x02c9: {\n            'name': 'ObjectData Preview File Format Version',\n            'description': (value, tags) => {\n                // Format ID, Version ID, Version Description\n                const formatVersions = {\n                    '00': {'00': '1'},\n                    '01': {'01': '1', '02': '2', '03': '3', '04': '4'},\n                    '02': {'04': '4'},\n                    '03': {'01': '5.0', '02': '6.0'},\n                    '04': {'01': '1.40'},\n                    '05': {'01': '2'},\n                    '06': {'01': '1'},\n                    '11': {'01': '1.02'},\n                    '20': {'01': '3.1', '02': '4.0', '03': '5.0', '04': '5.5'},\n                    '21': {'02': '2.0'}\n                };\n                const stringValue = getStringValue(value);\n\n                if (tags['ObjectData Preview File Format']) {\n                    const objectDataPreviewFileFormat = getStringValue(tags['ObjectData Preview File Format'].value);\n                    if (formatVersions[objectDataPreviewFileFormat]\n                        && formatVersions[objectDataPreviewFileFormat][stringValue]) {\n                        return formatVersions[objectDataPreviewFileFormat][stringValue];\n                    }\n                }\n\n                return stringValue;\n            }\n        },\n        0x02ca: 'ObjectData Preview Data',\n        0x070a: {\n            'name': 'Size Mode',\n            'description': (value) => {\n                return (value[0]).toString();\n            }\n        },\n        0x0714: {\n            'name': 'Max Subfile Size',\n            'description': (value) => {\n                let n = 0;\n                for (let i = 0; i < value.length; i++) {\n                    n = (n << 8) + value[i];\n                }\n                return n.toString();\n            }\n        },\n        0x075a: {\n            'name': 'ObjectData Size Announced',\n            'description': (value) => {\n                let n = 0;\n                for (let i = 0; i < value.length; i++) {\n                    n = (n << 8) + value[i];\n                }\n                return n.toString();\n            }\n        },\n        0x075f: {\n            'name': 'Maximum ObjectData Size',\n            'description': (value) => {\n                let n = 0;\n                for (let i = 0; i < value.length; i++) {\n                    n = (n << 8) + value[i];\n                }\n                return n.toString();\n            }\n        }\n    }\n};\n\nfunction getCreationDate(value) {\n    const date = getStringValue(value);\n\n    if (date.length >= 8) {\n        return date.substr(0, 4) + '-' + date.substr(4, 2) + '-' + date.substr(6, 2);\n    }\n\n    return date;\n}\n\nfunction getCreationTime(value) {\n    const time = getStringValue(value);\n    let parsedTime = time;\n\n    if (time.length >= 6) {\n        parsedTime = time.substr(0, 2) + ':' + time.substr(2, 2) + ':' + time.substr(4, 2);\n        if (time.length === 11) {\n            parsedTime += time.substr(6, 1) + time.substr(7, 2) + ':' + time.substr(9, 2);\n        }\n    }\n\n    return parsedTime;\n}\n\nfunction getEncodingName(value) {\n    const string = getStringValue(value);\n    if (string === '\\x1b%G') {\n        return 'UTF-8';\n    } else if (string === '\\x1b%5') {\n        return 'Windows-1252';\n    } else if (string === '\\x1b%/G') {\n        return 'UTF-8 Level 1';\n    } else if (string === '\\x1b%/H') {\n        return 'UTF-8 Level 2';\n    } else if (string === '\\x1b%/I') {\n        return 'UTF-8 Level 3';\n    } else if (string === '\\x1B/A') {\n        return 'ISO-8859-1';\n    } else if (string === '\\x1B/B') {\n        return 'ISO-8859-2';\n    } else if (string === '\\x1B/C') {\n        return 'ISO-8859-3';\n    } else if (string === '\\x1B/D') {\n        return 'ISO-8859-4';\n    } else if (string === '\\x1B/@') {\n        return 'ISO-8859-5';\n    } else if (string === '\\x1B/G') {\n        return 'ISO-8859-6';\n    } else if (string === '\\x1B/F') {\n        return 'ISO-8859-7';\n    } else if (string === '\\x1B/H') {\n        return 'ISO-8859-8';\n    }\n    return 'Unknown';\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nexport default {\n    get\n};\n\nfunction get() {\n    if (typeof TextDecoder !== 'undefined') {\n        return TextDecoder;\n    }\n\n    return undefined;\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport TextDecoder from './text-decoder.js';\n\nconst TAG_HEADER_SIZE = 5;\n\nexport default {\n    decode,\n    TAG_HEADER_SIZE\n};\n\nfunction decode(encoding, tagValue) {\n    const Decoder = TextDecoder.get();\n    if ((typeof Decoder !== 'undefined') && (encoding !== undefined)) {\n        try {\n            return new Decoder(encoding).decode(tagValue instanceof DataView ? tagValue.buffer : Uint8Array.from(tagValue));\n        } catch (error) {\n            // Pass through and fall back to ASCII decoding.\n        }\n    }\n\n    const stringValue = tagValue.map((charCode) => String.fromCharCode(charCode)).join('');\n    return decodeAsciiValue(stringValue);\n}\n\nfunction decodeAsciiValue(asciiValue) {\n    try {\n        return decodeURIComponent(escape(asciiValue));\n    } catch (error) {\n        return asciiValue;\n    }\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport IptcTagNames from './iptc-tag-names.js';\nimport TagDecoder from './tag-decoder.js';\n\nconst BYTES_8BIM = 0x3842494d;\nconst BYTES_8BIM_SIZE = 4;\nconst RESOURCE_ID_SIZE = 2;\nconst RESOURCE_NAME_SIZE_SIZE = 1;\nconst RESOURCE_NAME_MIN_SIZE = 2;\nconst RESOURCE_SIZE_SIZE = 4;\nconst RESOURCE_BLOCK_MIN_HEADER_SIZE = BYTES_8BIM_SIZE + RESOURCE_ID_SIZE + RESOURCE_NAME_MIN_SIZE + RESOURCE_SIZE_SIZE;\nconst NAA_RESOURCE_BLOCK_TYPE = 0x0404; // Sometimes called resource ID.\nconst TAG_HEADER_SIZE = 5;\n\nexport default {\n    read\n};\n\nfunction read(dataView, dataOffset, includeUnknown) {\n    try {\n        if (Array.isArray(dataView)) {\n            return parseTags(new DataView(Uint8Array.from(dataView).buffer), {size: dataView.length}, 0, includeUnknown);\n        }\n        const {naaBlock, dataOffset: newDataOffset} = getNaaResourceBlock(dataView, dataOffset);\n        return parseTags(dataView, naaBlock, newDataOffset, includeUnknown);\n    } catch (error) {\n        return {};\n    }\n}\n\nfunction getNaaResourceBlock(dataView, dataOffset) {\n    while (dataOffset + RESOURCE_BLOCK_MIN_HEADER_SIZE <= dataView.byteLength) {\n        const resourceBlock = getResourceBlock(dataView, dataOffset);\n        if (isNaaResourceBlock(resourceBlock)) {\n            return {naaBlock: resourceBlock, dataOffset: dataOffset + resourceBlock.headerSize};\n        }\n        dataOffset += resourceBlock.headerSize + resourceBlock.size + getBlockPadding(resourceBlock);\n    }\n    throw new Error('No IPTC NAA resource block.');\n}\n\nfunction getResourceBlock(dataView, dataOffset) {\n    if (dataView.getUint32(dataOffset, false) !== BYTES_8BIM) {\n        throw new Error('Not an IPTC resource block.');\n    }\n\n    // We currently do not use the resource name for anything, we just need to know the size.\n    const resourceNameSize = dataView.getUint8(dataOffset + BYTES_8BIM_SIZE + RESOURCE_ID_SIZE);\n    const resourceNameTotalSize = (resourceNameSize % 2 === 0 ? resourceNameSize + 1 : resourceNameSize) + RESOURCE_NAME_SIZE_SIZE;\n\n    return {\n        headerSize: BYTES_8BIM_SIZE + RESOURCE_ID_SIZE + resourceNameTotalSize + RESOURCE_SIZE_SIZE,\n        type: dataView.getUint16(dataOffset + BYTES_8BIM_SIZE),\n        size: dataView.getUint32(dataOffset + BYTES_8BIM_SIZE + RESOURCE_ID_SIZE + resourceNameTotalSize),\n    };\n}\n\nfunction isNaaResourceBlock(resourceBlock) {\n    return resourceBlock.type === NAA_RESOURCE_BLOCK_TYPE;\n}\n\nfunction getBlockPadding(resourceBlock) {\n    if (resourceBlock.size % 2 !== 0) {\n        return 1;\n    }\n    return 0;\n}\n\nfunction parseTags(dataView, naaBlock, dataOffset, includeUnknown) {\n    const tags = {};\n    let encoding = undefined;\n\n    const endOfBlockOffset = dataOffset + naaBlock['size'];\n\n    while ((dataOffset < endOfBlockOffset) && (dataOffset < dataView.byteLength)) {\n        const {tag, tagSize} = readTag(dataView, dataOffset, tags, encoding, includeUnknown);\n\n        if (tag === null) {\n            break;\n        }\n\n        if (tag) {\n            if ('encoding' in tag) {\n                encoding = tag.encoding;\n            }\n\n            if ((tags[tag.name] === undefined) || (tag['repeatable'] === undefined)) {\n                tags[tag.name] = {\n                    id: tag.id,\n                    value: tag.value,\n                    description: tag.description\n                };\n            } else {\n                if (!(tags[tag.name] instanceof Array)) {\n                    tags[tag.name] = [{\n                        id: tags[tag.name].id,\n                        value: tags[tag.name].value,\n                        description: tags[tag.name].description\n                    }];\n                }\n                tags[tag.name].push({\n                    id: tag.id,\n                    value: tag.value,\n                    description: tag.description\n                });\n            }\n        }\n\n        dataOffset += TAG_HEADER_SIZE + tagSize;\n    }\n\n    return tags;\n}\n\nfunction readTag(dataView, dataOffset, tags, encoding, includeUnknown) {\n    const TAG_CODE_OFFSET = 1;\n    const TAG_SIZE_OFFSET = 3;\n\n    if (leadByteIsMissing(dataView, dataOffset)) {\n        return {tag: null, tagSize: 0};\n    }\n\n    const tagCode = dataView.getUint16(dataOffset + TAG_CODE_OFFSET);\n    const tagSize = dataView.getUint16(dataOffset + TAG_SIZE_OFFSET);\n\n    if (!includeUnknown && !IptcTagNames['iptc'][tagCode]) {\n        return {tag: undefined, tagSize};\n    }\n\n    const tagValue = getTagValue(dataView, dataOffset + TAG_HEADER_SIZE, tagSize);\n\n    const tag = {\n        id: tagCode,\n        name: getTagName(IptcTagNames['iptc'][tagCode], tagCode, tagValue),\n        value: tagValue,\n        description: getTagDescription(IptcTagNames['iptc'][tagCode], tagValue, tags, encoding)\n    };\n    if (tagIsRepeatable(tagCode)) {\n        tag['repeatable'] = true;\n    }\n    if (tagContainsEncoding(tagCode)) {\n        tag['encoding'] = IptcTagNames['iptc'][tagCode]['encoding_name'](tagValue);\n    }\n\n    return {tag, tagSize};\n}\n\nfunction leadByteIsMissing(dataView, dataOffset) {\n    const TAG_LEAD_BYTE = 0x1c;\n    return dataView.getUint8(dataOffset) !== TAG_LEAD_BYTE;\n}\n\nfunction getTagValue(dataView, offset, size) {\n    const value = [];\n\n    for (let valueIndex = 0; valueIndex < size; valueIndex++) {\n        value.push(dataView.getUint8(offset + valueIndex));\n    }\n\n    return value;\n}\n\nfunction getTagName(tag, tagCode, tagValue) {\n    if (!tag) {\n        return `undefined-${tagCode}`;\n    }\n    if (tagIsName(tag)) {\n        return tag;\n    }\n    if (hasDynamicName(tag)) {\n        return tag['name'](tagValue);\n    }\n    return tag['name'];\n}\n\nfunction tagIsName(tag) {\n    return typeof tag === 'string';\n}\n\nfunction hasDynamicName(tag) {\n    return typeof (tag['name']) === 'function';\n}\n\nfunction getTagDescription(tag, tagValue, tags, encoding) {\n    if (hasDescriptionProperty(tag)) {\n        try {\n            return tag['description'](tagValue, tags);\n        } catch (error) {\n            // Fall through to next handler.\n        }\n    }\n    if (tagValueIsText(tag, tagValue)) {\n        return TagDecoder.decode(encoding, tagValue);\n    }\n    return tagValue;\n}\n\nfunction tagValueIsText(tag, tagValue) {\n    return tag && tagValue instanceof Array;\n}\n\nfunction hasDescriptionProperty(tag) {\n    return tag && tag['description'] !== undefined;\n}\n\nfunction tagIsRepeatable(tagCode) {\n    return IptcTagNames['iptc'][tagCode] && IptcTagNames['iptc'][tagCode]['repeatable'];\n}\n\nfunction tagContainsEncoding(tagCode) {\n    return IptcTagNames['iptc'][tagCode] && IptcTagNames['iptc'][tagCode]['encoding_name'] !== undefined;\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport TagNamesCommon from './tag-names-common.js';\n\nexport default {\n    'tiff:Orientation'(value) {\n        if (value === '1') {\n            return 'Horizontal (normal)';\n        }\n        if (value === '2') {\n            return 'Mirror horizontal';\n        }\n        if (value === '3') {\n            return 'Rotate 180';\n        }\n        if (value === '4') {\n            return 'Mirror vertical';\n        }\n        if (value === '5') {\n            return 'Mirror horizontal and rotate 270 CW';\n        }\n        if (value === '6') {\n            return 'Rotate 90 CW';\n        }\n        if (value === '7') {\n            return 'Mirror horizontal and rotate 90 CW';\n        }\n        if (value === '8') {\n            return 'Rotate 270 CW';\n        }\n        return value;\n    },\n    'tiff:ResolutionUnit': (value) => TagNamesCommon.ResolutionUnit(parseInt(value, 10)),\n    'tiff:XResolution': (value) => fraction(TagNamesCommon.XResolution, value),\n    'tiff:YResolution': (value) => fraction(TagNamesCommon.YResolution, value),\n    'exif:ApertureValue': (value) => fraction(TagNamesCommon.ApertureValue, value),\n    'exif:GPSLatitude': calculateGPSValue,\n    'exif:GPSLongitude': calculateGPSValue,\n    'exif:FNumber': (value) => fraction(TagNamesCommon.FNumber, value),\n    'exif:FocalLength': (value) => fraction(TagNamesCommon.FocalLength, value),\n    'exif:FocalPlaneResolutionUnit': (value) => TagNamesCommon.FocalPlaneResolutionUnit(parseInt(value, 10)),\n    'exif:ColorSpace': (value) => TagNamesCommon.ColorSpace(parseNumber(value)),\n    'exif:ComponentsConfiguration'(value, description) {\n        if (/^\\d, \\d, \\d, \\d$/.test(description)) {\n            const numbers = description.split(', ').map((number) => number.charCodeAt(0));\n            return TagNamesCommon.ComponentsConfiguration(numbers);\n        }\n        return description;\n    },\n    'exif:Contrast': (value) => TagNamesCommon.Contrast(parseInt(value, 10)),\n    'exif:CustomRendered': (value) => TagNamesCommon.CustomRendered(parseInt(value, 10)),\n    'exif:ExposureMode': (value) => TagNamesCommon.ExposureMode(parseInt(value, 10)),\n    'exif:ExposureProgram': (value) => TagNamesCommon.ExposureProgram(parseInt(value, 10)),\n    'exif:ExposureTime'(value) {\n        if (isFraction(value)) {\n            return TagNamesCommon.ExposureTime(value.split('/').map((number) => parseInt(number, 10)));\n        }\n        return value;\n    },\n    'exif:MeteringMode': (value) => TagNamesCommon.MeteringMode(parseInt(value, 10)),\n    'exif:Saturation': (value) => TagNamesCommon.Saturation(parseInt(value, 10)),\n    'exif:SceneCaptureType': (value) => TagNamesCommon.SceneCaptureType(parseInt(value, 10)),\n    'exif:Sharpness': (value) => TagNamesCommon.Sharpness(parseInt(value, 10)),\n    'exif:ShutterSpeedValue': (value) => fraction(TagNamesCommon.ShutterSpeedValue, value),\n    'exif:WhiteBalance': (value) => TagNamesCommon.WhiteBalance(parseInt(value, 10))\n};\n\nfunction fraction(func, value) {\n    if (isFraction(value)) {\n        return func(value.split('/'));\n    }\n    return value;\n}\n\nfunction parseNumber(value) {\n    if (value.substring(0, 2) === '0x') {\n        return parseInt(value.substring(2), 16);\n    }\n    return parseInt(value, 10);\n}\n\nfunction isFraction(value) {\n    return /^-?\\d+\\/-?\\d+$/.test(value);\n}\n\nfunction calculateGPSValue(value) {\n    const [degreesString, minutesString] = value.split(',');\n    if ((degreesString !== undefined) && (minutesString !== undefined)) {\n        const degrees = parseFloat(degreesString);\n        const minutes = parseFloat(minutesString);\n        const ref = minutesString.charAt(minutesString.length - 1);\n        if ((!Number.isNaN(degrees)) && (!Number.isNaN(minutes))) {\n            return '' + (degrees + minutes / 60) + ref;\n        }\n    }\n    return value;\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nexport default {\n    get\n};\n\nfunction get(domParser) {\n    if (domParser) {\n        return domParser;\n    }\n\n    if (typeof DOMParser !== 'undefined') {\n        return new DOMParser();\n    }\n    try {\n        // eslint-disable-next-line no-undef\n        const {DOMParser, onErrorStopParsing} = __non_webpack_require__('@xmldom/xmldom');\n        return new DOMParser({onError: onErrorStopParsing});\n    } catch (error) {\n        return undefined;\n    }\n}\n","export function isMissingNamespaceError(error) {\n    const missingNamespaceStrings = [\n        // @xmldom/xmldom\n        'prefix is non-null and namespace is null',\n        // Firefox\n        'prefix not bound to a namespace', // en\n        'prefix inte bundet till en namnrymd', // sv\n        // Chrome\n        /Namespace prefix .+ is not defined/\n    ];\n\n    for (let i = 0; i < missingNamespaceStrings.length; i++) {\n        const regexp = new RegExp(missingNamespaceStrings[i]);\n        if (regexp.test(error.message)) {\n            return true;\n        }\n    }\n\n    return false;\n}\n\n// This should fix most missing namespace errors, but it's not a complete solution.\nexport function addMissingNamespaces(xmlString) {\n    const rootTagMatch = xmlString.match(/<([A-Za-z_][A-Za-z0-9._-]*)([^>]*)>/);\n    if (!rootTagMatch) {\n        return xmlString;\n    }\n    const rootTagName = rootTagMatch[1];\n\n    const declaredPrefixes = getAllDeclaredNamespacePrefixes(xmlString);\n    const usedPrefixes = getUsedNamespacePrefixes(xmlString);\n    const missingPrefixes = usedPrefixes.filter((prefix) => declaredPrefixes.indexOf(prefix) === -1);\n    if (missingPrefixes.length === 0) {\n        return xmlString;\n    }\n\n    const namespaceDeclarations = createNamespaceDeclarations(missingPrefixes);\n    return insertDeclarationsIntoRoot(xmlString, rootTagName, namespaceDeclarations);\n}\n\nfunction getAllDeclaredNamespacePrefixes(xmlContent) {\n    const prefixes = [];\n    const namespaceDeclarationRegex = /xmlns:([\\w-]+)=[\"'][^\"']+[\"']/g;\n    let match;\n    while ((match = namespaceDeclarationRegex.exec(xmlContent)) !== null) {\n        if (prefixes.indexOf(match[1]) === -1) {\n            prefixes.push(match[1]);\n        }\n    }\n    return prefixes;\n}\n\nfunction getUsedNamespacePrefixes(xmlContent) {\n    const prefixes = [];\n    const prefixUsageRegex = /\\b([A-Za-z_][A-Za-z0-9._-]*):[A-Za-z_][A-Za-z0-9._-]*\\b/g;\n    let match;\n    while ((match = prefixUsageRegex.exec(xmlContent)) !== null) {\n        const prefix = match[1];\n        if (prefix === 'xmlns' || prefix === 'xml') {\n            continue;\n        }\n        if (prefixes.indexOf(prefix) === -1) {\n            prefixes.push(prefix);\n        }\n    }\n    return prefixes;\n}\n\nconst KNOWN_NAMESPACE_URIS = {\n    xmp: 'http://ns.adobe.com/xap/1.0/',\n    tiff: 'http://ns.adobe.com/tiff/1.0/',\n    exif: 'http://ns.adobe.com/exif/1.0/',\n    dc: 'http://purl.org/dc/elements/1.1/',\n    xmpMM: 'http://ns.adobe.com/xap/1.0/mm/',\n    stEvt: 'http://ns.adobe.com/xap/1.0/sType/ResourceEvent#',\n    stRef: 'http://ns.adobe.com/xap/1.0/sType/ResourceRef#',\n    photoshop: 'http://ns.adobe.com/photoshop/1.0/'\n};\n\nfunction createNamespaceDeclarations(prefixes) {\n    const declarations = [];\n    for (let i = 0; i < prefixes.length; i++) {\n        const prefix = prefixes[i];\n        const uri = KNOWN_NAMESPACE_URIS[prefix] || 'http://fallback.namespace/' + prefix;\n        declarations.push(' xmlns:' + prefix + '=\"' + uri + '\"');\n    }\n    return declarations.join('');\n}\n\nfunction insertDeclarationsIntoRoot(xmlString, rootTagName, declarations) {\n    const rootTagPattern = new RegExp('<' + rootTagName + '([^>]*)>');\n    return xmlString.replace(rootTagPattern, '<' + rootTagName + '$1' + declarations + '>');\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport {getStringFromDataView, objectAssign} from './utils.js';\nimport XmpTagNames from './xmp-tag-names.js';\nimport DOMParser from './dom-parser.js';\nimport {isMissingNamespaceError, addMissingNamespaces} from './xmp-namespaces.js';\n\nexport default {\n    read\n};\n\nclass ParseError extends Error {\n    constructor(message) {\n        super(message);\n        this.name = 'ParseError';\n    }\n}\n\nfunction read(dataView, chunks, domParser) {\n    const tags = {};\n\n    if (typeof dataView === 'string') {\n        readTags(tags, dataView, domParser);\n        return tags;\n    }\n\n    const [standardXmp, extendedXmp] = extractCompleteChunks(dataView, chunks);\n\n    const hasStandardTags = readTags(tags, standardXmp, domParser);\n\n    if (extendedXmp) {\n        const hasExtendedTags = readTags(tags, extendedXmp, domParser);\n\n        if (!hasStandardTags && !hasExtendedTags) {\n            // Some writers are not spec-compliant in that they split an XMP\n            // metadata tree over both the standard XMP block and the extended\n            // XMP block. If we failed parsing both of the XMPs in the regular\n            // way, we try to combine them to see if that works better.\n            delete tags._raw;\n            readTags(tags, combineChunks(dataView, chunks), domParser);\n        }\n    }\n\n    return tags;\n}\n\n// The first chunk is always the regular XMP document. Then there is something\n// called extended XMP. The extended XMP is also a single XMP document but it\n// can be divided into multiple chunks that need to be combined into one.\nfunction extractCompleteChunks(dataView, chunks) {\n    if (chunks.length === 0) {\n        return [];\n    }\n\n    const completeChunks = [combineChunks(dataView, chunks.slice(0, 1))];\n    if (chunks.length > 1) {\n        completeChunks.push(combineChunks(dataView, chunks.slice(1)));\n    }\n\n    return completeChunks;\n}\n\nfunction combineChunks(dataView, chunks) {\n    const totalLength = chunks.reduce((size, chunk) => size + chunk.length, 0);\n    const combinedChunks = new Uint8Array(totalLength);\n    let offset = 0;\n\n    for (let i = 0; i < chunks.length; i++) {\n        const chunk = chunks[i];\n        const slice = dataView.buffer.slice(chunk.dataOffset, chunk.dataOffset + chunk.length);\n        combinedChunks.set(new Uint8Array(slice), offset);\n        offset += chunk.length;\n    }\n\n    return new DataView(combinedChunks.buffer);\n}\n\nfunction readTags(tags, chunkDataView, domParser) {\n    try {\n        const {doc, raw} = getDocument(chunkDataView, domParser);\n        tags._raw = (tags._raw || '') + raw;\n        const rdf = getRDF(doc);\n\n        objectAssign(tags, parseXMPObject(convertToObject(rdf, true)));\n        return true;\n    } catch (error) {\n        return false;\n    }\n}\n\nfunction getDocument(chunkDataView, _domParser) {\n    const domParser = DOMParser.get(_domParser);\n    if (!domParser) {\n        console.warn('Warning: DOMParser is not available. It is needed to be able to parse XMP tags.'); // eslint-disable-line no-console\n        throw new Error();\n    }\n\n    const xmlString = typeof chunkDataView === 'string' ? chunkDataView : getStringFromDataView(chunkDataView, 0, chunkDataView.byteLength);\n    const doc = parseFromString(domParser, trimXmlSource(xmlString));\n\n    return {\n        doc,\n        raw: xmlString,\n    };\n}\n\nfunction trimXmlSource(xmlSource) {\n    return xmlSource.replace(/^.+(<\\?xpacket begin)/, '$1').replace(/(<\\?xpacket end=\".*\"\\?>).+$/, '$1');\n}\n\nfunction parseFromString(domParser, xmlString, isRetry = false) {\n    try {\n        const doc = domParser.parseFromString(xmlString, 'application/xml');\n        const errors = doc.getElementsByTagName('parsererror');\n        if (errors.length > 0) {\n            throw new ParseError(errors[0].textContent);\n        }\n        return doc;\n    } catch (error) {\n        if (error.name === 'ParseError' && isMissingNamespaceError(error) && !isRetry) {\n            // Retry once after trying to fix the invalid XML.\n            return parseFromString(domParser, addMissingNamespaces(xmlString), true);\n        }\n        throw error;\n    }\n}\n\nfunction getRDF(node) {\n    for (let i = 0; i < node.childNodes.length; i++) {\n        if (node.childNodes[i].tagName === 'x:xmpmeta') {\n            return getRDF(node.childNodes[i]);\n        }\n        if (node.childNodes[i].tagName === 'rdf:RDF') {\n            return node.childNodes[i];\n        }\n    }\n\n    throw new Error();\n}\n\nfunction convertToObject(node, isTopNode = false) {\n    const childNodes = getChildNodes(node);\n\n    if (hasTextOnlyContent(childNodes)) {\n        if (isTopNode) {\n            return {};\n        }\n        return getTextValue(childNodes[0]);\n    }\n\n    return getElementsFromNodes(childNodes);\n}\n\nfunction getChildNodes(node) {\n    const elements = [];\n\n    for (let i = 0; i < node.childNodes.length; i++) {\n        elements.push(node.childNodes[i]);\n    }\n\n    return elements;\n}\n\nfunction hasTextOnlyContent(nodes) {\n    return (nodes.length === 1) && (nodes[0].nodeName === '#text');\n}\n\nfunction getTextValue(node) {\n    return node.nodeValue;\n}\n\nfunction getElementsFromNodes(nodes) {\n    const elements = {};\n\n    nodes.forEach((node) => {\n        if (isElement(node)) {\n            const nodeElement = getElementFromNode(node);\n\n            if (elements[node.nodeName] !== undefined) {\n                if (!Array.isArray(elements[node.nodeName])) {\n                    elements[node.nodeName] = [elements[node.nodeName]];\n                }\n                elements[node.nodeName].push(nodeElement);\n            } else {\n                elements[node.nodeName] = nodeElement;\n            }\n        }\n    });\n\n    return elements;\n}\n\nfunction isElement(node) {\n    return (node.nodeName) && (node.nodeName !== '#text');\n}\n\nfunction getElementFromNode(node) {\n    return {\n        attributes: getAttributes(node),\n        value: convertToObject(node)\n    };\n}\n\nfunction getAttributes(element) {\n    const attributes = {};\n\n    for (let i = 0; i < element.attributes.length; i++) {\n        attributes[element.attributes[i].nodeName] = decodeURIComponent(escape(element.attributes[i].value));\n    }\n\n    return attributes;\n}\n\nfunction parseXMPObject(xmpObject) {\n    const tags = {};\n\n    if (typeof xmpObject === 'string') {\n        return xmpObject;\n    }\n\n    for (const nodeName in xmpObject) {\n        let nodes = xmpObject[nodeName];\n\n        if (!Array.isArray(nodes)) {\n            nodes = [nodes];\n        }\n\n        nodes.forEach((node) => {\n            objectAssign(tags, parseNodeAttributesAsTags(node.attributes));\n            if (typeof node.value === 'object') {\n                objectAssign(tags, parseNodeChildrenAsTags(node.value));\n            }\n        });\n    }\n\n    return tags;\n}\n\nfunction parseNodeAttributesAsTags(attributes) {\n    const tags = {};\n\n    for (const name in attributes) {\n        try {\n            if (isTagAttribute(name)) {\n                tags[getLocalName(name)] = {\n                    value: attributes[name],\n                    attributes: {},\n                    description: getDescription(attributes[name], name)\n                };\n            }\n        } catch (error) {\n            // Keep going and try to parse the rest of the tags.\n        }\n    }\n\n    return tags;\n}\n\nfunction isTagAttribute(name) {\n    return (name !== 'rdf:parseType') && (!isNamespaceDefinition(name));\n}\n\nfunction isNamespaceDefinition(name) {\n    return name.split(':')[0] === 'xmlns';\n}\n\nfunction getLocalName(name) {\n    if (/^MicrosoftPhoto(_\\d+_)?:Rating$/i.test(name)) {\n        return 'RatingPercent';\n    }\n    return name.split(':')[1];\n}\n\nfunction getDescription(value, name = undefined) {\n    if (Array.isArray(value)) {\n        const arrayDescription = getDescriptionOfArray(value);\n        if ((name) && (typeof XmpTagNames[name] === 'function')) {\n            return XmpTagNames[name](value, arrayDescription);\n        }\n        return arrayDescription;\n    }\n    if (typeof value === 'object') {\n        return getDescriptionOfObject(value);\n    }\n\n    try {\n        if ((name) && (typeof XmpTagNames[name] === 'function')) {\n            return XmpTagNames[name](value);\n        }\n        return decodeURIComponent(escape(value));\n    } catch (error) {\n        return value;\n    }\n}\n\nfunction getDescriptionOfArray(value) {\n    return value.map((item) => {\n        if (item.value !== undefined) {\n            return getDescription(item.value);\n        }\n        return getDescription(item);\n    }).join(', ');\n}\n\nfunction getDescriptionOfObject(value) {\n    const descriptions = [];\n\n    for (const key in value) {\n        descriptions.push(`${getClearTextKey(key)}: ${getDescription(value[key].value)}`);\n    }\n\n    return descriptions.join('; ');\n}\n\nfunction getClearTextKey(key) {\n    if (key === 'CiAdrCity') {\n        return 'CreatorCity';\n    }\n    if (key === 'CiAdrCtry') {\n        return 'CreatorCountry';\n    }\n    if (key === 'CiAdrExtadr') {\n        return 'CreatorAddress';\n    }\n    if (key === 'CiAdrPcode') {\n        return 'CreatorPostalCode';\n    }\n    if (key === 'CiAdrRegion') {\n        return 'CreatorRegion';\n    }\n    if (key === 'CiEmailWork') {\n        return 'CreatorWorkEmail';\n    }\n    if (key === 'CiTelWork') {\n        return 'CreatorWorkPhone';\n    }\n    if (key === 'CiUrlWork') {\n        return 'CreatorWorkUrl';\n    }\n    return key;\n}\n\nfunction parseNodeChildrenAsTags(children) {\n    const tags = {};\n\n    for (const name in children) {\n        try {\n            if (!isNamespaceDefinition(name)) {\n                tags[getLocalName(name)] = parseNodeAsTag(children[name], name);\n            }\n        } catch (error) {\n            // Keep going and try to parse the rest of the tags.\n        }\n    }\n\n    return tags;\n}\n\nfunction parseNodeAsTag(node, name) {\n    if (isDuplicateTag(node)) {\n        return parseNodeAsDuplicateTag(node, name);\n    }\n    if (isEmptyResourceTag(node)) {\n        return {value: '', attributes: {}, description: ''};\n    }\n    if (hasNestedSimpleRdfDescription(node)) {\n        return parseNodeAsSimpleRdfDescription(node, name);\n    }\n    if (hasNestedStructureRdfDescription(node)) {\n        return parseNodeAsStructureRdfDescription(node, name);\n    }\n    if (isCompactStructure(node)) {\n        return parseNodeAsCompactStructure(node, name);\n    }\n    if (isArray(node)) {\n        return parseNodeAsArray(node, name);\n    }\n    return parseNodeAsSimpleValue(node, name);\n}\n\nfunction isEmptyResourceTag(node) {\n    return (node.attributes['rdf:parseType'] === 'Resource')\n        && (typeof node.value === 'string')\n        && (node.value.trim() === '');\n}\n\nfunction isDuplicateTag(node) {\n    return Array.isArray(node);\n}\n\nfunction parseNodeAsDuplicateTag(node, name) {\n    return parseNodeAsSimpleValue(node[node.length - 1], name);\n}\n\nfunction hasNestedSimpleRdfDescription(node) {\n    return ((node.attributes['rdf:parseType'] === 'Resource') && (node.value['rdf:value'] !== undefined))\n        || ((node.value['rdf:Description'] !== undefined) && (node.value['rdf:Description'].value['rdf:value'] !== undefined));\n}\n\nfunction parseNodeAsSimpleRdfDescription(node, name) {\n    const attributes = parseNodeAttributes(node);\n\n    if (node.value['rdf:Description'] !== undefined) {\n        node = node.value['rdf:Description'];\n    }\n\n    objectAssign(attributes, parseNodeAttributes(node), parseNodeChildrenAsAttributes(node));\n\n    const value = parseRdfValue(node);\n\n    return {\n        value,\n        attributes,\n        description: getDescription(value, name)\n    };\n}\n\nfunction parseNodeAttributes(node) {\n    const attributes = {};\n\n    for (const name in node.attributes) {\n        if ((name !== 'rdf:parseType') && (name !== 'rdf:resource') && (!isNamespaceDefinition(name))) {\n            attributes[getLocalName(name)] = node.attributes[name];\n        }\n    }\n\n    return attributes;\n}\n\nfunction parseNodeChildrenAsAttributes(node) {\n    const attributes = {};\n\n    for (const name in node.value) {\n        if ((name !== 'rdf:value') && (!isNamespaceDefinition(name))) {\n            attributes[getLocalName(name)] = node.value[name].value;\n        }\n    }\n\n    return attributes;\n}\n\nfunction parseRdfValue(node) {\n    return getURIValue(node.value['rdf:value']) || node.value['rdf:value'].value;\n}\n\nfunction hasNestedStructureRdfDescription(node) {\n    return (node.attributes['rdf:parseType'] === 'Resource')\n        || ((node.value['rdf:Description'] !== undefined) && (node.value['rdf:Description'].value['rdf:value'] === undefined));\n}\n\nfunction parseNodeAsStructureRdfDescription(node, name) {\n    const tag = {\n        value: {},\n        attributes: {}\n    };\n\n    if (node.value['rdf:Description'] !== undefined) {\n        objectAssign(tag.value, parseNodeAttributesAsTags(node.value['rdf:Description'].attributes));\n        objectAssign(tag.attributes, parseNodeAttributes(node));\n        node = node.value['rdf:Description'];\n    }\n\n    objectAssign(tag.value, parseNodeChildrenAsTags(node.value));\n\n    tag.description = getDescription(tag.value, name);\n\n    return tag;\n}\n\nfunction isCompactStructure(node) {\n    return (Object.keys(node.value).length === 0)\n        && (node.attributes['xml:lang'] === undefined)\n        && (node.attributes['rdf:resource'] === undefined);\n}\n\nfunction parseNodeAsCompactStructure(node, name) {\n    const value = parseNodeAttributesAsTags(node.attributes);\n\n    return {\n        value,\n        attributes: {},\n        description: getDescription(value, name)\n    };\n}\n\nfunction isArray(node) {\n    return getArrayChild(node.value) !== undefined;\n}\n\nfunction getArrayChild(value) {\n    return value['rdf:Bag'] || value['rdf:Seq'] || value['rdf:Alt'];\n}\n\nfunction parseNodeAsArray(node, name) {\n    let items = getArrayChild(node.value).value['rdf:li'];\n    const attributes = parseNodeAttributes(node);\n    const value = [];\n\n    if (items === undefined) {\n        items = [];\n    } else if (!Array.isArray(items)) {\n        items = [items];\n    }\n\n    items.forEach((item) => {\n        value.push(parseArrayValue(item));\n    });\n\n    return {\n        value,\n        attributes,\n        description: getDescription(value, name)\n    };\n}\n\nfunction parseArrayValue(item) {\n    if (hasNestedSimpleRdfDescription(item)) {\n        return parseNodeAsSimpleRdfDescription(item);\n    }\n    if (hasNestedStructureRdfDescription(item)) {\n        return parseNodeAsStructureRdfDescription(item).value;\n    }\n    if (isCompactStructure(item)) {\n        return parseNodeAsCompactStructure(item).value;\n    }\n\n    return parseNodeAsSimpleValue(item);\n}\n\nfunction parseNodeAsSimpleValue(node, name) {\n    const value = getURIValue(node) || parseXMPObject(node.value);\n\n    return {\n        value,\n        attributes: parseNodeAttributes(node),\n        description: getDescription(value, name)\n    };\n}\n\nfunction getURIValue(node) {\n    return node.attributes && node.attributes['rdf:resource'];\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport Types from './types.js';\nimport {\n    getPascalStringFromDataView,\n    padStart,\n    parseFloatRadix,\n    strRepeat\n} from './utils.js';\n\n// export const OsTypeKeys = {\n//     OBJC: 'Objc',\n//     DOUB: 'doub',\n//     UNTF: 'UntF',\n//     TEXT: 'TEXT',\n//     BOOL: 'bool',\n//     ENUM: 'enum',\n//     LONG: 'long'\n// };\n\nexport const PathRecordTypes = {\n    CLOSED_SUBPATH_LENGTH: 0,\n    CLOSED_SUBPATH_BEZIER_LINKED: 1,\n    CLOSED_SUBPATH_BEZIER_UNLINKED: 2,\n    OPEN_SUBPATH_LENGTH: 3,\n    OPEN_SUBPATH_BEZIER_LINKED: 4,\n    OPEN_SUBPATH_BEZIER_UNLINKED: 5,\n    FILL_RULE: 6,\n    CLIPBOARD: 7,\n    INITIAL_FILL_RULE: 8\n};\n\nconst PATH_RECORD_SIZE = 24;\n\nexport default {\n    // 0x0425: {\n    //     name: 'CaptionDigest',\n    //     description(dataView) {\n    //         let description = '';\n    //         for (let i = 0; i < dataView.byteLength; i++) {\n    //             const byte = dataView.getUint8(i);\n    //             description += padStart(byte.toString(16), 2, '0');\n    //         }\n    //         return description;\n    //     }\n    // },\n    // Commented out for now to lower bundle size until someone asks for it.\n    // 0x043a: {\n    //     name: 'PrintInformation',\n    //     description: parseDescriptor\n    // },\n    // 0x043b: {\n    //     name: 'PrintStyle',\n    //     description: parseDescriptor\n    // },\n    0x07d0: {\n        name: 'PathInformation',\n        description: pathResource\n    },\n    0x0bb7: {\n        name: 'ClippingPathName',\n        description(dataView) {\n            const [, string] = getPascalStringFromDataView(dataView, 0);\n            return string;\n        }\n    },\n};\n\n// function parseDescriptor(dataView) {\n//     const DESCRIPTOR_VERSION_SIZE = 4;\n//     // This is a unicode string terminated with null. Unsure about the format though since in my example image it starts with 0x0000.\n//     const UNCLEAR_CLASS_ID_NAME_PART_SIZE = 6;\n//     let offset = 0;\n//     offset += DESCRIPTOR_VERSION_SIZE + UNCLEAR_CLASS_ID_NAME_PART_SIZE;\n//     const [classId, classIdSize] = getBlockValue(dataView, offset);\n//     offset += classIdSize;\n//     const numItems = Types.getLongAt(dataView, offset);\n//     offset += 4;\n//     const descriptor = {[classId]: {}};\n//     for (let i = 0; i < numItems; i++) {\n//         const [itemKey, itemKeySize] = getBlockValue(dataView, offset);\n//         offset += itemKeySize;\n//         const osTypeKey = getStringFromDataView(dataView, offset, 4);\n//         offset += 4;\n//         try {\n//             const {itemValue, itemSize} = getItemValue(dataView, offset, osTypeKey);\n//             offset += itemSize;\n//             descriptor[classId][ITEM_KEY_TERMS[itemKey] || itemKey] = itemValue;\n//         } catch (error) {\n//             // We can't recover from unknown OS type key since we don't know\n//             // where the next one starts.\n//             break;\n//         }\n//     }\n//     return JSON.stringify(descriptor);\n// }\n\n// function getBlockValue(dataView, offset, unicode = false) {\n//     const length = (unicode ? 2 : 1) * Types.getLongAt(dataView, offset) || 4;\n//     offset += 4;\n//     const value = (unicode ? getUnicodeStringFromDataView : getStringFromDataView)(dataView, offset, length);\n//     offset += length;\n//     return [value, 4 + length];\n// }\n\n// function getItemValue(dataView, offset, osTypeKey) {\n//     // Not all OSType keys are implemented yet because they are missing in the example image.\n//     if (osTypeKey === OsTypeKeys.OBJC) {\n//         const [classIdName, classIdNameSize] = getBlockValue(dataView, offset, true);\n//         offset += classIdNameSize;\n//         const [classId, classIdSize] = getBlockValue(dataView, offset);\n//         offset += classIdSize;\n//         const _offset = Types.getLongAt(dataView, offset);\n//         return {\n//             itemValue: {[classIdName]: {[classId]: _offset}},\n//             itemSize: classIdNameSize + classIdSize + 4\n//         };\n//     }\n//     if (osTypeKey === OsTypeKeys.DOUB) {\n//         return {\n//             itemValue: parseDouble(dataView, offset),\n//             itemSize: 8\n//         };\n//     }\n//     if (osTypeKey === OsTypeKeys.UNTF) {\n//         const unit = getStringFromDataView(dataView, offset, 4);\n//         return {\n//             itemValue: {unit, value: parseDouble(dataView, offset + 4)},\n//             itemSize: unit.length + 8\n//         };\n//     }\n//     if (osTypeKey === OsTypeKeys.TEXT) {\n//         const length = 2 * Types.getLongAt(dataView, offset);\n//         offset += 4;\n//         const text = getUnicodeStringFromDataView(dataView, offset, length);\n//         return {\n//             itemValue: text,\n//             itemSize: 4 + length\n//         };\n//     }\n//     if (osTypeKey === OsTypeKeys.BOOL) {\n//         return {\n//             itemValue: Types.getByteAt(dataView, offset) === 1,\n//             itemSize: 1\n//         };\n//     }\n//     if (osTypeKey === OsTypeKeys.ENUM) {\n//         const [type, typeSize] = getBlockValue(dataView, offset);\n//         offset += typeSize;\n//         const [enumName, enumSize] = getBlockValue(dataView, offset);\n//         return {\n//             itemValue: {[type]: enumName},\n//             itemSize: typeSize + enumSize\n//         };\n//     }\n//     if (osTypeKey === OsTypeKeys.LONG) {\n//         return {\n//             itemValue: Types.getLongAt(dataView, offset),\n//             itemSize: 4\n//         };\n//     }\n//     throw new Error(`Unknown OS type key: ${osTypeKey}`);\n// }\n\n// function parseDouble(dataView, offset) {\n//     const BIAS = 1023;\n//     const sign = (Types.getByteAt(dataView, offset) & parseInt('10000000', 2)) === 0 ? 1 : -1;\n//     const exponent = ((Types.getShortAt(dataView, offset) & parseInt('0111111111110000', 2)) >> 4) - BIAS;\n//     const fractionHigh = padStart((Types.getLongAt(dataView, offset) & parseInt('00000000000011111111111111111111', 2)).toString(2), 20, '0');\n//     const fractionLow = padStart(Types.getLongAt(dataView, offset + 4).toString(2), 32, '0');\n//     const fraction = parseFloatRadix('1.' + fractionHigh + fractionLow, 2);\n//     return sign * fraction * Math.pow(2, exponent);\n// }\n\nfunction pathResource(dataView) {\n    const TYPE_SIZE = 2;\n    const types = {};\n    const paths = [];\n\n    for (let offset = 0; offset < dataView.byteLength; offset += TYPE_SIZE + PATH_RECORD_SIZE) {\n        const type = Types.getShortAt(dataView, offset);\n        if (PATH_RECORD_TYPES[type]) {\n            if (!types[type]) {\n                types[type] = PATH_RECORD_TYPES[type].description;\n            }\n            paths.push({\n                type,\n                path: PATH_RECORD_TYPES[type].path(dataView, offset + TYPE_SIZE)\n            });\n        }\n    }\n    return JSON.stringify({types, paths});\n}\n\nconst PATH_RECORD_TYPES = {\n    [PathRecordTypes.CLOSED_SUBPATH_LENGTH]: {\n        description: 'Closed subpath length',\n        path: (dataView, offset) => [Types.getShortAt(dataView, offset)]\n    },\n    [PathRecordTypes.CLOSED_SUBPATH_BEZIER_LINKED]: {\n        description: 'Closed subpath Bezier knot, linked',\n        path: parseBezierKnot\n    },\n    [PathRecordTypes.CLOSED_SUBPATH_BEZIER_UNLINKED]: {\n        description: 'Closed subpath Bezier knot, unlinked',\n        path: parseBezierKnot\n    },\n    [PathRecordTypes.OPEN_SUBPATH_LENGTH]: {\n        description: 'Open subpath length',\n        path: (dataView, offset) => [Types.getShortAt(dataView, offset)]\n    },\n    [PathRecordTypes.OPEN_SUBPATH_BEZIER_LINKED]: {\n        description: 'Open subpath Bezier knot, linked',\n        path: parseBezierKnot\n    },\n    [PathRecordTypes.OPEN_SUBPATH_BEZIER_UNLINKED]: {\n        description: 'Open subpath Bezier knot, unlinked',\n        path: parseBezierKnot\n    },\n    [PathRecordTypes.FILL_RULE]: {\n        description: 'Path fill rule',\n        path: () => []\n    },\n    [PathRecordTypes.INITIAL_FILL_RULE]: {\n        description: 'Initial fill rule',\n        path: (dataView, offset) => [Types.getShortAt(dataView, offset)]\n    },\n    [PathRecordTypes.CLIPBOARD]: {\n        description: 'Clipboard',\n        path: parseClipboard\n    }\n};\n\nfunction parseBezierKnot(dataView, offset) {\n    const PATH_POINT_SIZE = 8;\n    const path = [];\n    for (let i = 0; i < PATH_RECORD_SIZE; i += PATH_POINT_SIZE) {\n        path.push(parsePathPoint(dataView, offset + i));\n    }\n    return path;\n}\n\nfunction parsePathPoint(dataView, offset) {\n    const vertical = getFixedPointNumber(dataView, offset, 8);\n    const horizontal = getFixedPointNumber(dataView, offset + 4, 8);\n    return [horizontal, vertical];\n}\n\nfunction parseClipboard(dataView, offset) {\n    return [\n        [\n            getFixedPointNumber(dataView, offset, 8), // Top\n            getFixedPointNumber(dataView, offset + 4, 8), // Left\n            getFixedPointNumber(dataView, offset + 8, 8), // Botton\n            getFixedPointNumber(dataView, offset + 12, 8), // Right\n        ],\n        getFixedPointNumber(dataView, offset + 16, 8) // Resolution\n    ];\n}\n\nfunction getFixedPointNumber(dataView, offset, binaryPoint) {\n    const number = Types.getLongAt(dataView, offset);\n\n    const sign = (number >>> 31) === 0 ? 1 : -1;\n    const integer = (number & 0x7f000000) >>> (32 - binaryPoint);\n    const fraction = number & parseInt(strRepeat('1', 32 - binaryPoint), 2);\n\n    return sign * parseFloatRadix(integer.toString(2) + '.' + padStart(fraction.toString(2), 32 - binaryPoint, '0'), 2);\n}\n\n// Item key terminology: https://psd-tools.readthedocs.io/en/latest/reference/psd_tools.terminology.html\n// Are these correct? There are collisions that are commented out. A lot of code for little gain?\n// const ITEM_KEY_TERMS = {\n//     'A   ': 'A',\n//     'Adjs': 'Adjustment',\n//     'Algd': 'Aligned',\n//     'Algn': 'Alignment',\n//     'AllE': 'AllExcept',\n//     'All ': 'AllPS',\n//     'AlTl': 'AllToolOptions',\n//     'AChn': 'AlphaChannelOptions',\n//     'AlpC': 'AlphaChannels',\n//     'AmbB': 'AmbientBrightness',\n//     'AmbC': 'AmbientColor',\n//     'Amnt': 'Amount',\n//     'AmMx': 'AmplitudeMax',\n//     'AmMn': 'AmplitudeMin',\n//     'Anch': 'Anchor',\n//     'Angl': 'Angle',\n//     'Ang1': 'Angle1',\n//     'Ang2': 'Angle2',\n//     'Ang3': 'Angle3',\n//     'Ang4': 'Angle4',\n//     'AntA': 'AntiAlias',\n//     'Appe': 'Append',\n//     'Aply': 'Apply',\n//     'Ar  ': 'Area',\n//     'Arrw': 'Arrowhead',\n//     'As  ': 'As',\n//     'Asst': 'AssetBin',\n//     'AssC': 'AssumedCMYK',\n//     'AssG': 'AssumedGray',\n//     'AssR': 'AssumedRGB',\n//     'At  ': 'At',\n//     'Auto': 'Auto',\n//     'AuCo': 'AutoContrast',\n//     'Atrs': 'AutoErase',\n//     'AtKr': 'AutoKern',\n//     'AtUp': 'AutoUpdate',\n//     'Axis': 'Axis',\n//     'B   ': 'B',\n//     'Bckg': 'Background',\n//     'BckC': 'BackgroundColor',\n//     'BckL': 'BackgroundLevel',\n//     'Bwd ': 'Backward',\n//     'Blnc': 'Balance',\n//     'Bsln': 'BaselineShift',\n//     'BpWh': 'BeepWhenDone',\n//     'BgnR': 'BeginRamp',\n//     'BgnS': 'BeginSustain',\n//     'bvlD': 'BevelDirection',\n//     'ebbl': 'BevelEmboss',\n//     'bvlS': 'BevelStyle',\n//     'bvlT': 'BevelTechnique',\n//     'BgNH': 'BigNudgeH',\n//     'BgNV': 'BigNudgeV',\n//     'BtDp': 'BitDepth',\n//     'Blck': 'Black',\n//     'BlcC': 'BlackClip',\n//     'Blcn': 'BlackGeneration',\n//     'BlcG': 'BlackGenerationCurve',\n//     'BlcI': 'BlackIntensity',\n//     'BlcL': 'BlackLevel',\n//     // 'BlcL': 'BlackLimit',\n//     'Bld ': 'Bleed',\n//     'Blnd': 'BlendRange',\n//     'Bl  ': 'Blue',\n//     'BlBl': 'BlueBlackPoint',\n//     'blueFloat': 'BlueFloat',\n//     'BlGm': 'BlueGamma',\n//     'BlWh': 'BlueWhitePoint',\n//     'BlX ': 'BlueX',\n//     'BlY ': 'BlueY',\n//     'blur': 'Blur',\n//     'BlrM': 'BlurMethod',\n//     'BlrQ': 'BlurQuality',\n//     'Bk  ': 'Book',\n//     'BrdT': 'BorderThickness',\n//     'Btom': 'Bottom',\n//     'Brgh': 'Brightness',\n//     'BrsD': 'BrushDetail',\n//     'BrsS': 'BrushSize',\n//     'BrsT': 'BrushType',\n//     'Brsh': 'Brushes',\n//     'BmpA': 'BumpAmplitude',\n//     'BmpC': 'BumpChannel',\n//     'By  ': 'By',\n//     'Byln': 'Byline',\n//     'BylT': 'BylineTitle',\n//     'BytO': 'ByteOrder',\n//     'CMYS': 'CMYKSetup',\n//     'CchP': 'CachePrefs',\n//     'Clcl': 'Calculation',\n//     'Clbr': 'CalibrationBars',\n//     'Cptn': 'Caption',\n//     'CptW': 'CaptionWriter',\n//     'Ctgr': 'Category',\n//     'ClSz': 'CellSize',\n//     'Cntr': 'Center',\n//     'CntC': 'CenterCropMarks',\n//     'ChlA': 'ChalkArea',\n//     'Chnl': 'Channel',\n//     'ChMx': 'ChannelMatrix',\n//     'ChnN': 'ChannelName',\n//     'Chns': 'Channels',\n//     'ChnI': 'ChannelsInterleaved',\n//     'ChAm': 'CharcoalAmount',\n//     'ChrA': 'CharcoalArea',\n//     'Ckmt': 'ChokeMatte',\n//     'ChFX': 'ChromeFX',\n//     'City': 'City',\n//     'ClrA': 'ClearAmount',\n//     'ClPt': 'ClippingPath',\n//     'ClpP': 'ClippingPathEPS',\n//     'ClpF': 'ClippingPathFlatness',\n//     'ClpI': 'ClippingPathIndex',\n//     'Clpg': 'ClippingPathInfo',\n//     'ClnS': 'CloneSource',\n//     'Clsp': 'ClosedSubpath',\n//     'Clr ': 'Color',\n//     'Clrh': 'ColorChannels',\n//     'ClrC': 'ColorCorrection',\n//     'ClrI': 'ColorIndicates',\n//     'ClMg': 'ColorManagement',\n//     'Clrr': 'ColorPickerPrefs',\n//     'ClrS': 'ColorSpace',\n//     'ClrT': 'ColorTable',\n//     'Clrz': 'Colorize',\n//     'Clrs': 'Colors',\n//     'ClrL': 'ColorsList',\n//     'ClmW': 'ColumnWidth',\n//     'CmdK': 'CommandKey',\n//     'Cmpn': 'Compensation',\n//     'Cmpr': 'Compression',\n//     'Cncv': 'Concavity',\n//     'Cndt': 'Condition',\n//     'Cnst': 'Constant',\n//     // 'Cnst': 'Constrain',\n//     'CnsP': 'ConstrainProportions',\n//     'Cfov': 'ConstructionFOV',\n//     'Cntg': 'Contiguous',\n//     'Cntn': 'Continue',\n//     'Cnty': 'Continuity',\n//     'ShpC': 'ContourType',\n//     // 'Cntr': 'Contrast',\n//     'Cnvr': 'Convert',\n//     'Cpy ': 'Copy',\n//     'Cpyr': 'Copyright',\n//     'CprN': 'CopyrightNotice',\n//     'CrnC': 'CornerCropMarks',\n//     'Cnt ': 'Count',\n//     'CntN': 'CountryName',\n//     'CrcB': 'CrackBrightness',\n//     'CrcD': 'CrackDepth',\n//     'CrcS': 'CrackSpacing',\n//     'blfl': 'CreateLayersFromLayerFX',\n//     'Crdt': 'Credit',\n//     'Crss': 'Crossover',\n//     'Crnt': 'Current',\n//     'CrnH': 'CurrentHistoryState',\n//     'CrnL': 'CurrentLight',\n//     'CrnT': 'CurrentToolOptions',\n//     'Crv ': 'Curve',\n//     'CrvF': 'CurveFile',\n//     'Cstm': 'Custom',\n//     'CstF': 'CustomForced',\n//     'CstM': 'CustomMatte',\n//     'CstP': 'CustomPalette',\n//     'Cyn ': 'Cyan',\n//     'DCS ': 'DCS',\n//     'DPXf': 'DPXFormat',\n//     'DrkI': 'DarkIntensity',\n//     'Drkn': 'Darkness',\n//     'DtCr': 'DateCreated',\n//     'Dt ': 'Datum',\n//     'Dfnt': 'Definition',\n//     'Dnst': 'Density',\n//     'Dpth': 'Depth',\n//     'Dstl': 'DestBlackMax',\n//     'DstB': 'DestBlackMin',\n//     'Dstt': 'DestWhiteMax',\n//     'DstW': 'DestWhiteMin',\n//     'DstM': 'DestinationMode',\n//     'Dtl ': 'Detail',\n//     'Dmtr': 'Diameter',\n//     'DffD': 'DiffusionDither',\n//     'Drct': 'Direction',\n//     'DrcB': 'DirectionBalance',\n//     'DspF': 'DisplaceFile',\n//     'DspM': 'DisplacementMap',\n//     'DspP': 'DisplayPrefs',\n//     'Dstn': 'Distance',\n//     // 'Dstr': 'Distortion',\n//     // 'Dstr': 'Distribution',\n//     'Dthr': 'Dither',\n//     'DthA': 'DitherAmount',\n//     'Dthp': 'DitherPreserve',\n//     'Dthq': 'DitherQuality',\n//     'DocI': 'DocumentID',\n//     'DtGn': 'DotGain',\n//     'DtGC': 'DotGainCurves',\n//     'DrSh': 'DropShadow',\n//     'Dplc': 'Duplicate',\n//     'DnmC': 'DynamicColorSliders',\n//     'Edg ': 'Edge',\n//     'EdgB': 'EdgeBrightness',\n//     'EdgF': 'EdgeFidelity',\n//     'EdgI': 'EdgeIntensity',\n//     'EdgS': 'EdgeSimplicity',\n//     'EdgT': 'EdgeThickness',\n//     'EdgW': 'EdgeWidth',\n//     'Effc': 'Effect',\n//     'EmbC': 'EmbedCMYK',\n//     'EmbG': 'EmbedGray',\n//     'EmbL': 'EmbedLab',\n//     'EmbP': 'EmbedProfiles',\n//     'EmbR': 'EmbedRGB',\n//     'EmlD': 'EmulsionDown',\n//     'EGst': 'EnableGestures',\n//     'enab': 'Enabled',\n//     'Encd': 'Encoding',\n//     'End ': 'End',\n//     'EndA': 'EndArrowhead',\n//     'EndR': 'EndRamp',\n//     'EndS': 'EndSustain',\n//     'Engn': 'Engine',\n//     'ErsT': 'EraseToHistory',\n//     'ErsK': 'EraserKind',\n//     'ExcP': 'ExactPoints',\n//     'Expr': 'Export',\n//     'ExpC': 'ExportClipboard',\n//     'Exps': 'Exposure',\n//     'Extd': 'Extend',\n//     'EQlt': 'ExtendedQuality',\n//     'Extn': 'Extension',\n//     'ExtQ': 'ExtensionsQuery',\n//     'ExtD': 'ExtrudeDepth',\n//     'ExtM': 'ExtrudeMaskIncomplete',\n//     'ExtR': 'ExtrudeRandom',\n//     'ExtS': 'ExtrudeSize',\n//     'ExtF': 'ExtrudeSolidFace',\n//     'ExtT': 'ExtrudeType',\n//     'EyDr': 'EyeDropperSample',\n//     'FxCm': 'FPXCompress',\n//     'FxQl': 'FPXQuality',\n//     'FxSz': 'FPXSize',\n//     'FxVw': 'FPXView',\n//     'FdT ': 'FadeTo',\n//     'FdtS': 'FadeoutSteps',\n//     'FlOf': 'Falloff',\n//     'Fthr': 'Feather',\n//     'FbrL': 'FiberLength',\n//     'File': 'File',\n//     'FlCr': 'FileCreator',\n//     'FlIn': 'FileInfo',\n//     'FilR': 'FileReference',\n//     'FlSP': 'FileSavePrefs',\n//     'FlTy': 'FileType',\n//     'flst': 'FilesList',\n//     'Fl  ': 'Fill',\n//     'FlCl': 'FillColor',\n//     'FlNt': 'FillNeutral',\n//     'FlPd': 'FilterLayerPersistentData',\n//     'FlRs': 'FilterLayerRandomSeed',\n//     'Fngr': 'Fingerpainting',\n//     'FlrC': 'FlareCenter',\n//     'Fltn': 'Flatness',\n//     'Fltt': 'Flatten',\n//     'FlpV': 'FlipVertical',\n//     'Fcs ': 'Focus',\n//     'Fldr': 'Folders',\n//     'FntD': 'FontDesignAxes',\n//     'FntV': 'FontDesignAxesVectors',\n//     'FntN': 'FontName',\n//     'Scrp': 'FontScript',\n//     'FntS': 'FontStyleName',\n//     'FntT': 'FontTechnology',\n//     'FrcC': 'ForcedColors',\n//     'FrgC': 'ForegroundColor',\n//     'FrgL': 'ForegroundLevel',\n//     'Fmt ': 'Format',\n//     'Fwd ': 'Forward',\n//     'FrFX': 'FrameFX',\n//     'FrmW': 'FrameWidth',\n//     'FTcs': 'FreeTransformCenterState',\n//     'Frqn': 'Frequency',\n//     'From': 'From',\n//     'FrmB': 'FromBuiltin',\n//     'FrmM': 'FromMode',\n//     'FncK': 'FunctionKey',\n//     'Fzns': 'Fuzziness',\n//     'GCR ': 'GCR',\n//     'GFPT': 'GIFColorFileType',\n//     'GFCL': 'GIFColorLimit',\n//     'GFEC': 'GIFExportCaption',\n//     'GFMI': 'GIFMaskChannelIndex',\n//     'GFMV': 'GIFMaskChannelInverted',\n//     'GFPF': 'GIFPaletteFile',\n//     'GFPL': 'GIFPaletteType',\n//     'GFCS': 'GIFRequiredColorSpaceType',\n//     'GFIT': 'GIFRowOrderType',\n//     'GFTC': 'GIFTransparentColor',\n//     'GFTB': 'GIFTransparentIndexBlue',\n//     'GFTG': 'GIFTransparentIndexGreen',\n//     'GFTR': 'GIFTransparentIndexRed',\n//     'GFBM': 'GIFUseBestMatch',\n//     'Gmm ': 'Gamma',\n//     'GmtW': 'GamutWarning',\n//     'GnrP': 'GeneralPrefs',\n//     'gblA': 'GlobalAngle',\n//     'gagl': 'GlobalLightingAngle',\n//     'Glos': 'Gloss',\n//     'GlwA': 'GlowAmount',\n//     'GlwT': 'GlowTechnique',\n//     'Grad': 'Gradient',\n//     'Grdf': 'GradientFill',\n//     // 'Grn ': 'Grain',\n//     'Grnt': 'GrainType',\n//     'Grns': 'Graininess',\n//     'Gry ': 'Gray',\n//     'GrBh': 'GrayBehavior',\n//     'GrSt': 'GraySetup',\n//     'Grn ': 'Green',\n//     'GrnB': 'GreenBlackPoint',\n//     'greenFloat': 'GreenFloat',\n//     'GrnG': 'GreenGamma',\n//     'GrnW': 'GreenWhitePoint',\n//     'GrnX': 'GreenX',\n//     'GrnY': 'GreenY',\n//     'GrdC': 'GridColor',\n//     'Grds': 'GridCustomColor',\n//     'GrdM': 'GridMajor',\n//     'Grdn': 'GridMinor',\n//     'GrdS': 'GridStyle',\n//     'Grdt': 'GridUnits',\n//     'Grup': 'Group',\n//     'GrtW': 'GroutWidth',\n//     'GrwS': 'GrowSelection',\n//     'Gdes': 'Guides',\n//     'GdsC': 'GuidesColor',\n//     'Gdss': 'GuidesCustomColor',\n//     'GdPr': 'GuidesPrefs',\n//     'GdsS': 'GuidesStyle',\n//     'GttW': 'GutterWidth',\n//     'HlfF': 'HalftoneFile',\n//     'HlfS': 'HalftoneScreen',\n//     'HlSz': 'HalftoneSize',\n//     'Hlfp': 'HalftoneSpec',\n//     'Hrdn': 'Hardness',\n//     'HCdH': 'HasCmdHPreference',\n//     'Hdr ': 'Header',\n//     'Hdln': 'Headline',\n//     'Hght': 'Height',\n//     'HghA': 'HighlightArea',\n//     'hglC': 'HighlightColor',\n//     'HghL': 'HighlightLevels',\n//     'hglM': 'HighlightMode',\n//     'hglO': 'HighlightOpacity',\n//     'HghS': 'HighlightStrength',\n//     'HstB': 'HistoryBrushSource',\n//     'HstP': 'HistoryPrefs',\n//     'HsSS': 'HistoryStateSource',\n//     'HsSt': 'HistoryStates',\n//     'Hrzn': 'Horizontal',\n//     'HrzS': 'HorizontalScale',\n//     'HstN': 'HostName',\n//     'HstV': 'HostVersion',\n//     'H   ': 'Hue',\n//     'ICCE': 'ICCEngine',\n//     'ICCt': 'ICCSetupName',\n//     'Idnt': 'ID',\n//     'Idle': 'Idle',\n//     'ImgB': 'ImageBalance',\n//     'Impr': 'Import',\n//     'Imps': 'Impressionist',\n//     'In  ': 'In',\n//     'c@#^': 'Inherits',\n//     'InkC': 'InkColors',\n//     'Inks': 'Inks',\n//     'IrGl': 'InnerGlow',\n//     'glwS': 'InnerGlowSource',\n//     'IrSh': 'InnerShadow',\n//     'Inpt': 'Input',\n//     'kIBP': 'InputBlackPoint',\n//     'Inmr': 'InputMapRange',\n//     'Inpr': 'InputRange',\n//     'kIWP': 'InputWhitePoint',\n//     'Intn': 'Intensity',\n//     'Inte': 'Intent',\n//     'IntH': 'InterfaceBevelHighlight',\n//     'Intv': 'InterfaceBevelShadow',\n//     'IntB': 'InterfaceBlack',\n//     'Intd': 'InterfaceBorder',\n//     'Intk': 'InterfaceButtonDarkShadow',\n//     'Intt': 'InterfaceButtonDownFill',\n//     'InBF': 'InterfaceButtonUpFill',\n//     'ICBL': 'InterfaceColorBlue2',\n//     'ICBH': 'InterfaceColorBlue32',\n//     'ICGL': 'InterfaceColorGreen2',\n//     'ICGH': 'InterfaceColorGreen32',\n//     'ICRL': 'InterfaceColorRed2',\n//     'ICRH': 'InterfaceColorRed32',\n//     'IntI': 'InterfaceIconFillActive',\n//     'IntF': 'InterfaceIconFillDimmed',\n//     'Intc': 'InterfaceIconFillSelected',\n//     'Intm': 'InterfaceIconFrameActive',\n//     // 'Intr': 'InterfaceIconFrameDimmed',\n//     'IntS': 'InterfaceIconFrameSelected',\n//     'IntP': 'InterfacePaletteFill',\n//     'IntR': 'InterfaceRed',\n//     'IntT': 'InterfaceToolTipBackground',\n//     'ITTT': 'InterfaceToolTipText',\n//     'ITBg': 'InterfaceTransparencyBackground',\n//     'ITFg': 'InterfaceTransparencyForeground',\n//     'IntW': 'InterfaceWhite',\n//     // 'Intr': 'Interlace',\n//     'IntC': 'InterlaceCreateType',\n//     'IntE': 'InterlaceEliminateType',\n//     // 'Intr': 'Interpolation',\n//     'IntM': 'InterpolationMethod',\n//     'Invr': 'Invert',\n//     'InvM': 'InvertMask',\n//     'InvS': 'InvertSource2',\n//     'InvT': 'InvertTexture',\n//     'IsDr': 'IsDirty',\n//     'ItmI': 'ItemIndex',\n//     'JPEQ': 'JPEGQuality',\n//     'Krng': 'Kerning',\n//     'Kywd': 'Keywords',\n//     'Knd ': 'Kind',\n//     'LTnm': 'LUTAnimation',\n//     'LZWC': 'LZWCompression',\n//     'Lbls': 'Labels',\n//     'Lnds': 'Landscape',\n//     'LstT': 'LastTransform',\n//     'Lyr ': 'Layer',\n//     'Lefx': 'LayerEffects',\n//     'lfxv': 'LayerFXVisible',\n//     'LyrI': 'LayerID',\n//     'LyrN': 'LayerName',\n//     'Lyrs': 'Layers',\n//     'Ldng': 'Leading',\n//     'Left': 'Left',\n//     'lSNs': 'LegacySerialString',\n//     // 'Lngt': 'Length',\n//     'Lns ': 'Lens',\n//     'Lvl ': 'Level',\n//     'Lvls': 'Levels',\n//     'LgDr': 'LightDark',\n//     'LghD': 'LightDirection',\n//     'LghI': 'LightIntensity',\n//     'LghP': 'LightPosition',\n//     'LghS': 'LightSource',\n//     'LghT': 'LightType',\n//     'LghG': 'LightenGrout',\n//     'Lght': 'Lightness',\n//     'Line': 'Line',\n//     'lnkE': 'LinkEnable',\n//     'LnkL': 'LinkedLayerIDs',\n//     'Lald': 'LocalLightingAltitude',\n//     'lagl': 'LocalLightingAngle',\n//     'LclR': 'LocalRange',\n//     'Lctn': 'Location',\n//     'Log ': 'Log',\n//     'kLog': 'Logarithmic',\n//     'LwCs': 'LowerCase',\n//     'Lmnc': 'Luminance',\n//     'Mgnt': 'Magenta',\n//     'MkVs': 'MakeVisible',\n//     'Mfov': 'ManipulationFOV',\n//     'MpBl': 'MapBlack',\n//     'Mpng': 'Mapping',\n//     'MpgS': 'MappingShape',\n//     'Mtrl': 'Material',\n//     'Mtrx': 'Matrix',\n//     'MttC': 'MatteColor',\n//     'Mxm ': 'Maximum',\n//     'MxmS': 'MaximumStates',\n//     'MmrU': 'MemoryUsagePercent',\n//     'Mrge': 'Merge',\n//     'Mrgd': 'Merged',\n//     'Msge': 'Message',\n//     'Mthd': 'Method',\n//     'MztT': 'MezzotintType',\n//     'Mdpn': 'Midpoint',\n//     'MdtL': 'MidtoneLevels',\n//     'Mnm ': 'Minimum',\n//     'MsmC': 'MismatchCMYK',\n//     'MsmG': 'MismatchGray',\n//     'MsmR': 'MismatchRGB',\n//     'Md  ': 'Mode',\n//     'Mnch': 'Monochromatic',\n//     'MvT ': 'MoveTo',\n//     'Nm  ': 'Name',\n//     'Ngtv': 'Negative',\n//     'Nw  ': 'New',\n//     'Nose': 'Noise',\n//     'NnIm': 'NonImageData',\n//     'NnLn': 'NonLinear',\n//     'null': 'Null',\n//     'Nm L': 'NumLights',\n//     'Nmbr': 'Number',\n//     'NCch': 'NumberOfCacheLevels',\n//     'NC64': 'NumberOfCacheLevels64',\n//     'NmbO': 'NumberOfChannels',\n//     'NmbC': 'NumberOfChildren',\n//     'NmbD': 'NumberOfDocuments',\n//     'NmbG': 'NumberOfGenerators',\n//     // 'NmbL': 'NumberOfLayers',\n//     // 'NmbL': 'NumberOfLevels',\n//     'NmbP': 'NumberOfPaths',\n//     'NmbR': 'NumberOfRipples',\n//     'NmbS': 'NumberOfSiblings',\n//     'ObjN': 'ObjectName',\n//     'Ofst': 'Offset',\n//     'Sftt': 'OldSmallFontType',\n//     'On  ': 'On',\n//     'Opct': 'Opacity',\n//     'Optm': 'Optimized',\n//     'Ornt': 'Orientation',\n//     'OrgH': 'OriginalHeader',\n//     'OrgT': 'OriginalTransmissionReference',\n//     'OthC': 'OtherCursors',\n//     'OrGl': 'OuterGlow',\n//     'Otpt': 'Output',\n//     'kOBP': 'OutputBlackPoint',\n//     'kOWP': 'OutputWhitePoint',\n//     'OvrC': 'OverprintColors',\n//     'OvrO': 'OverrideOpen',\n//     'ObrP': 'OverridePrinter',\n//     'Ovrd': 'OverrideSave',\n//     'PNGf': 'PNGFilter',\n//     'PGIT': 'PNGInterlaceType',\n//     'PMpf': 'PageFormat',\n//     'PgNm': 'PageNumber',\n//     'PgPs': 'PagePosition',\n//     'PgSt': 'PageSetup',\n//     'PnCK': 'PaintCursorKind',\n//     'PntT': 'PaintType',\n//     'PntC': 'PaintingCursors',\n//     'Plt ': 'Palette',\n//     'PltF': 'PaletteFile',\n//     'PprB': 'PaperBrightness',\n//     'PrIn': 'ParentIndex',\n//     'PrNm': 'ParentName',\n//     'Path': 'Path',\n//     'PthC': 'PathContents',\n//     'PthN': 'PathName',\n//     'Pttn': 'Pattern',\n//     'Pncl': 'PencilWidth',\n//     'Prsp': 'PerspectiveIndex',\n//     'Phsp': 'Phosphors',\n//     'PckI': 'PickerID',\n//     'Pckr': 'PickerKind',\n//     'PPSz': 'PixelPaintSize',\n//     'Pltf': 'Platform',\n//     'PlgF': 'PluginFolder',\n//     'PlgP': 'PluginPrefs',\n//     'Pts ': 'Points',\n//     'Pstn': 'Position',\n//     'PstS': 'PostScriptColor',\n//     'Pstr': 'Posterization',\n//     'PrdC': 'PredefinedColors',\n//     'PrfB': 'PreferBuiltin',\n//     'Prfr': 'Preferences',\n//     'PrsA': 'PreserveAdditional',\n//     'PrsL': 'PreserveLuminosity',\n//     'PrsT': 'PreserveTransparency',\n//     'Prs ': 'Pressure',\n//     'Prvw': 'Preview',\n//     'PrvK': 'PreviewCMYK',\n//     'PrvF': 'PreviewFullSize',\n//     'PrvI': 'PreviewIcon',\n//     'PrvM': 'PreviewMacThumbnail',\n//     'PrvW': 'PreviewWinThumbnail',\n//     'PrvQ': 'PreviewsQuery',\n//     'PMps': 'PrintSettings',\n//     'PrfS': 'ProfileSetup',\n//     'PrvS': 'ProvinceState',\n//     'Qlty': 'Quality',\n//     'QucM': 'QuickMask',\n//     'RGBS': 'RGBSetup',\n//     'Rds ': 'Radius',\n//     'RndS': 'RandomSeed',\n//     'Rt  ': 'Ratio',\n//     'Rcnf': 'RecentFiles',\n//     'Rd  ': 'Red',\n//     'RdBl': 'RedBlackPoint',\n//     'redFloat': 'RedFloat',\n//     'RdGm': 'RedGamma',\n//     'RdWh': 'RedWhitePoint',\n//     'RdX ': 'RedX',\n//     'RdY ': 'RedY',\n//     'RgsM': 'RegistrationMarks',\n//     'Rltv': 'Relative',\n//     'Rlf ': 'Relief',\n//     'Rfid': 'RenderFidelity',\n//     'Rsmp': 'Resample',\n//     'RWOZ': 'ResizeWindowsOnZoom',\n//     'Rslt': 'Resolution',\n//     'RsrI': 'ResourceID',\n//     'Rspn': 'Response',\n//     'RtnH': 'RetainHeader',\n//     'Rvrs': 'Reverse',\n//     'Rght': 'Right',\n//     'RplM': 'RippleMagnitude',\n//     'RplS': 'RippleSize',\n//     'Rtt ': 'Rotate',\n//     'Rndn': 'Roundness',\n//     'RlrH': 'RulerOriginH',\n//     'RlrV': 'RulerOriginV',\n//     'RlrU': 'RulerUnits',\n//     // 'Strt': 'Saturation',\n//     'SvAn': 'SaveAndClose',\n//     'SvCm': 'SaveComposite',\n//     'PltL': 'SavePaletteLocations',\n//     'SvPt': 'SavePaths',\n//     'SvPy': 'SavePyramids',\n//     'Svng': 'Saving',\n//     'Scl ': 'Scale',\n//     'SclH': 'ScaleHorizontal',\n//     'SclV': 'ScaleVertical',\n//     'Scln': 'Scaling',\n//     'Scns': 'Scans',\n//     'ScrD': 'ScratchDisks',\n//     'ScrF': 'ScreenFile',\n//     'ScrT': 'ScreenType',\n//     'Sprt': 'Separations',\n//     'SrlS': 'SerialString',\n//     // 'ShdI': 'ShadingIntensity',\n//     'ShdN': 'ShadingNoise',\n//     'ShdS': 'ShadingShape',\n//     'sdwC': 'ShadowColor',\n//     // 'ShdI': 'ShadowIntensity',\n//     'ShdL': 'ShadowLevels',\n//     'sdwM': 'ShadowMode',\n//     'sdwO': 'ShadowOpacity',\n//     'Shp ': 'Shape',\n//     'Shrp': 'Sharpness',\n//     'ShrE': 'ShearEd',\n//     'ShrP': 'ShearPoints',\n//     'ShrS': 'ShearSt',\n//     'ShfK': 'ShiftKey',\n//     'ShKT': 'ShiftKeyToolSwitch',\n//     'ShrN': 'ShortNames',\n//     'ShwE': 'ShowEnglishFontNames',\n//     'SwMC': 'ShowMenuColors',\n//     'ShwT': 'ShowToolTips',\n//     'ShTr': 'ShowTransparency',\n//     'Sz  ': 'SizeKey',\n//     'Skew': 'Skew',\n//     'Sfts': 'SmallFontType',\n//     'SmBM': 'SmartBlurMode',\n//     'SmBQ': 'SmartBlurQuality',\n//     'Smoo': 'Smooth',\n//     'Smth': 'Smoothness',\n//     'SnpI': 'SnapshotInitial',\n//     'SfCl': 'SoftClip',\n//     'Sftn': 'Softness',\n//     'SoFi': 'SolidFill',\n//     'Srce': 'Source',\n//     'Src2': 'Source2',\n//     'SrcM': 'SourceMode',\n//     'Spcn': 'Spacing',\n//     'SpcI': 'SpecialInstructions',\n//     'SphM': 'SpherizeMode',\n//     'Spot': 'Spot',\n//     'SprR': 'SprayRadius',\n//     'SqrS': 'SquareSize',\n//     'Srcl': 'SrcBlackMax',\n//     'SrcB': 'SrcBlackMin',\n//     'Srcm': 'SrcWhiteMax',\n//     'SrcW': 'SrcWhiteMin',\n//     // 'Strt': 'Start',\n//     'StrA': 'StartArrowhead',\n//     'Stte': 'State',\n//     'srgh': 'Strength',\n//     'srgR': 'StrengthRatio',\n//     'Strg': 'Strength_PLUGIN',\n//     'StDt': 'StrokeDetail',\n//     'SDir': 'StrokeDirection',\n//     'StrL': 'StrokeLength',\n//     'StrP': 'StrokePressure',\n//     'StrS': 'StrokeSize',\n//     'StrW': 'StrokeWidth',\n//     'Styl': 'Style',\n//     'Stys': 'Styles',\n//     'StlC': 'StylusIsColor',\n//     'StlO': 'StylusIsOpacity',\n//     'StlP': 'StylusIsPressure',\n//     'StlS': 'StylusIsSize',\n//     'SbpL': 'SubPathList',\n//     'SplC': 'SupplementalCategories',\n//     'SstI': 'SystemInfo',\n//     'SstP': 'SystemPalette',\n//     // 'null': 'Target',\n//     'Trgp': 'TargetPath',\n//     'TrgP': 'TargetPathIndex',\n//     // 'Lngt': 'TermLength',\n//     'Txt ': 'Text',\n//     // 'TxtC': 'TextClickPoint',\n//     'TxtD': 'TextData',\n//     'TxtS': 'TextStyle',\n//     'Txtt': 'TextStyleRange',\n//     'Txtr': 'Texture',\n//     // 'TxtC': 'TextureCoverage',\n//     'TxtF': 'TextureFile',\n//     'TxtT': 'TextureType',\n//     'Thsh': 'Threshold',\n//     'TlNm': 'TileNumber',\n//     'TlOf': 'TileOffset',\n//     'TlSz': 'TileSize',\n//     'Ttl ': 'Title',\n//     'T   ': 'To',\n//     'TBl ': 'ToBuiltin',\n//     'ToLk': 'ToLinked',\n//     'TMd ': 'ToMode',\n//     'TglO': 'ToggleOthers',\n//     'Tlrn': 'Tolerance',\n//     'Top ': 'Top',\n//     'TtlL': 'TotalLimit',\n//     'Trck': 'Tracking',\n//     'TrnF': 'TransferFunction',\n//     // 'TrnS': 'TransferSpec',\n//     'Trns': 'Transparency',\n//     // 'TrnG': 'TransparencyGrid',\n//     'TrnC': 'TransparencyGridColors',\n//     // 'TrnG': 'TransparencyGridSize',\n//     'TrnP': 'TransparencyPrefs',\n//     // 'TrnS': 'TransparencyShape',\n//     'TrnI': 'TransparentIndex',\n//     'TrnW': 'TransparentWhites',\n//     'Twst': 'Twist',\n//     'Type': 'Type',\n//     'UC  ': 'UCA',\n//     'URL ': 'URL',\n//     'UndA': 'UndefinedArea',\n//     'Undl': 'Underline',\n//     'UntP': 'UnitsPrefs',\n//     'Untl': 'Untitled',\n//     'UppY': 'UpperY',\n//     'Urgn': 'Urgency',\n//     'AcrS': 'UseAccurateScreens',\n//     'AdPl': 'UseAdditionalPlugins',\n//     'UsCc': 'UseCacheForHistograms',\n//     'UsCr': 'UseCurves',\n//     'UsDf': 'UseDefault',\n//     'uglg': 'UseGlobalAngle',\n//     'UsIC': 'UseICCProfile',\n//     'UsMs': 'UseMask',\n//     'UsrM': 'UserMaskEnabled',\n//     'Usrs': 'UserMaskLinked',\n//     'Usng': 'Using',\n//     'Vl  ': 'Value',\n//     'Vrnc': 'Variance',\n//     'Vct0': 'Vector0',\n//     'Vct1': 'Vector1',\n//     'VctC': 'VectorColor',\n//     'VrsF': 'VersionFix',\n//     'VrsM': 'VersionMajor',\n//     'VrsN': 'VersionMinor',\n//     'Vrtc': 'Vertical',\n//     'VrtS': 'VerticalScale',\n//     'Vdlp': 'VideoAlpha',\n//     'Vsbl': 'Visible',\n//     'WtcS': 'WatchSuspension',\n//     'watr': 'Watermark',\n//     'Wvtp': 'WaveType',\n//     'WLMx': 'WavelengthMax',\n//     'WLMn': 'WavelengthMin',\n//     'WbdP': 'WebdavPrefs',\n//     'Wtdg': 'WetEdges',\n//     'What': 'What',\n//     'WhtC': 'WhiteClip',\n//     'WhtI': 'WhiteIntensity',\n//     'WhHi': 'WhiteIsHigh',\n//     'WhtL': 'WhiteLevel',\n//     'WhtP': 'WhitePoint',\n//     'WhPt': 'WholePath',\n//     'Wdth': 'Width',\n//     'WndM': 'WindMethod',\n//     'With': 'With',\n//     'WrPt': 'WorkPath',\n//     'WrkP': 'WorkPathIndex',\n//     'X   ': 'X',\n//     'Y   ': 'Y',\n//     'Ylw ': 'Yellow',\n//     'ZZTy': 'ZigZagType',\n//     'Alis': '_3DAntiAlias',\n// };\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\n// Specification: https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/\n\nimport {getDataView, getStringFromDataView, getPascalStringFromDataView} from './utils.js';\nimport Types from './types.js';\nimport TagNames from './photoshop-tag-names.js';\n\nexport default {\n    read\n};\n\nconst SIGNATURE = '8BIM';\nconst TAG_ID_SIZE = 2;\nconst RESOURCE_LENGTH_SIZE = 4;\n\nconst SIGNATURE_SIZE = SIGNATURE.length;\n\nfunction read(bytes, includeUnknown) {\n    const dataView = getDataView(new Uint8Array(bytes).buffer);\n    const tags = {};\n    let offset = 0;\n\n    while (offset < bytes.length) {\n        const signature = getStringFromDataView(dataView, offset, SIGNATURE_SIZE);\n        offset += SIGNATURE_SIZE;\n        const tagId = Types.getShortAt(dataView, offset);\n        offset += TAG_ID_SIZE;\n        const {tagName, tagNameSize} = getTagName(dataView, offset);\n        offset += tagNameSize;\n        const resourceSize = Types.getLongAt(dataView, offset);\n        offset += RESOURCE_LENGTH_SIZE;\n        if (signature === SIGNATURE) {\n            const valueDataView = getDataView(dataView.buffer, offset, resourceSize);\n            const tag = {\n                id: tagId,\n                value: getStringFromDataView(valueDataView, 0, resourceSize),\n            };\n            if (TagNames[tagId]) {\n                try {\n                    tag.description = TagNames[tagId].description(valueDataView);\n                } catch (error) {\n                    tag.description = '<no description formatter>';\n                }\n                tags[tagName ? tagName : TagNames[tagId].name] = tag;\n            } else if (includeUnknown) {\n                tags[`undefined-${tagId}`] = tag;\n            }\n        }\n        offset += resourceSize + (resourceSize % 2);\n    }\n\n    return tags;\n}\n\nfunction getTagName(dataView, offset) {\n    // The name is encoded as a Pascal string (the string is prefixed with one\n    // byte containing the length of the string) and everything is padded with a\n    // null byte to make the size even.\n    const [stringSize, string] = getPascalStringFromDataView(dataView, offset);\n    return {\n        tagName: string,\n        tagNameSize: 1 + stringSize + (stringSize % 2 === 0 ? 1 : 0)\n    };\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport {getStringFromDataView} from './utils.js';\n\nexport const iccTags = {\n    'desc': {\n        'name': 'ICC Description',\n    },\n    'cprt': {\n        'name': 'ICC Copyright',\n    },\n    'dmdd': {\n        'name': 'ICC Device Model Description',\n    },\n    'vued': {\n        'name': 'ICC Viewing Conditions Description',\n    },\n    'dmnd': {\n        'name': 'ICC Device Manufacturer for Display',\n    },\n    'tech': {\n        'name': 'Technology',\n    },\n};\n\nexport const iccProfile = {\n    4: {\n        'name': 'Preferred CMM type',\n        'value': (dataView, offset) => getStringFromDataView(dataView, offset, 4),\n        'description': (value) => value !== null ? toCompany(value) : '',\n    },\n    8: {\n        'name': 'Profile Version',\n        'value': (dataView, offset) => {\n            return (dataView.getUint8(offset)).toString(10) + '.'\n            + (dataView.getUint8(offset + 1) >> 4).toString(10) + '.'\n            + (dataView.getUint8(offset + 1) % 16).toString(10);\n        }\n    },\n    12: {\n        'name': 'Profile/Device class',\n        'value': (dataView, offset) => getStringFromDataView(dataView, offset, 4),\n        'description': (value) => {\n            switch (value.toLowerCase()) {\n                case 'scnr': return 'Input Device profile';\n                case 'mntr': return 'Display Device profile';\n                case 'prtr': return 'Output Device profile';\n                case 'link': return 'DeviceLink profile';\n                case 'abst': return 'Abstract profile';\n                case 'spac': return 'ColorSpace profile';\n                case 'nmcl': return 'NamedColor profile';\n                case 'cenc': return 'ColorEncodingSpace profile';\n                case 'mid ': return 'MultiplexIdentification profile';\n                case 'mlnk': return 'MultiplexLink profile';\n                case 'mvis': return 'MultiplexVisualization profile';\n                default: return value;\n            }\n        }\n    },\n    16: {\n        'name': 'Color Space',\n        'value': (dataView, offset) => getStringFromDataView(dataView, offset, 4)\n    },\n    20: {\n        'name': 'Connection Space',\n        'value': (dataView, offset) => getStringFromDataView(dataView, offset, 4)\n    },\n    24: {\n        'name': 'ICC Profile Date',\n        'value': (dataView, offset) => parseDate(dataView, offset).toISOString()\n    },\n    36: {\n        'name': 'ICC Signature',\n        'value': (dataView, offset) => sliceToString(dataView.buffer.slice(offset, offset + 4))\n    },\n    40: {\n        'name': 'Primary Platform',\n        'value': (dataView, offset) => getStringFromDataView(dataView, offset, 4),\n        'description': (value) => toCompany(value)\n    },\n    48: {\n        'name': 'Device Manufacturer',\n        'value': (dataView, offset) => getStringFromDataView(dataView, offset, 4),\n        'description': (value) => toCompany(value)\n    },\n    52: {\n        'name': 'Device Model Number',\n        'value': (dataView, offset) => getStringFromDataView(dataView, offset, 4)\n    },\n    64: {\n        'name': 'Rendering Intent',\n        'value': (dataView, offset) => dataView.getUint32(offset),\n        'description': (value) => {\n            switch (value) {\n                case 0: return 'Perceptual';\n                case 1: return 'Relative Colorimetric';\n                case 2: return 'Saturation';\n                case 3: return 'Absolute Colorimetric';\n                default: return value;\n            }\n        }\n    },\n\n    80: {\n        'name': 'Profile Creator',\n        'value': (dataView, offset) => getStringFromDataView(dataView, offset, 4)\n    },\n};\n\nfunction parseDate(dataView, offset) {\n    const year = dataView.getUint16(offset);\n    const month = dataView.getUint16(offset + 2) - 1;\n    const day = dataView.getUint16(offset + 4);\n    const hours = dataView.getUint16(offset + 6);\n    const minutes = dataView.getUint16(offset + 8);\n    const seconds = dataView.getUint16(offset + 10);\n    return new Date(Date.UTC(year, month, day, hours, minutes, seconds));\n}\n\nfunction sliceToString(slice) {\n    return String.fromCharCode.apply(null, new Uint8Array(slice));\n}\n\nfunction toCompany(value) {\n    switch (value.toLowerCase()) {\n        case 'appl': return 'Apple';\n        case 'adbe': return 'Adobe';\n        case 'msft': return 'Microsoft';\n        case 'sunw': return 'Sun Microsystems';\n        case 'sgi': return 'Silicon Graphics';\n        case 'tgnt': return 'Taligent';\n        default: return value;\n    }\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\nimport {iccTags, iccProfile} from './icc-tag-names.js';\nimport {getStringFromDataView, getUnicodeStringFromDataView, decompress, COMPRESSION_METHOD_NONE, COMPRESSION_METHOD_DEFLATE} from './utils.js';\n\nexport default {\n    read\n};\n\nconst PROFILE_HEADER_LENGTH = 84;\nconst ICC_TAG_COUNT_OFFSET = 128;\nconst ICC_SIGNATURE = 'acsp';\nconst TAG_TYPE_DESC = 'desc';\nconst TAG_TYPE_MULTI_LOCALIZED_UNICODE_TYPE = 'mluc';\nconst TAG_TYPE_TEXT = 'text';\nconst TAG_TYPE_SIGNATURE = 'sig ';\nconst TAG_TABLE_SINGLE_TAG_DATA = 12;\n\n// ICC profile data can be longer than application segment max length of ~64k.\n// so it can be split into multiple APP2 segments. Each segment includes\n// total chunk count and chunk number.\n// Here we read all chunks into single continuous array of bytes.\n// Compressed ICC profile data only has support for a single chunk.\nfunction read(dataView, iccData, async) {\n    if (async && iccData[0].compressionMethod !== COMPRESSION_METHOD_NONE) {\n        return readCompressedIcc(dataView, iccData);\n    }\n\n    return readIcc(dataView, iccData);\n}\n\nfunction readCompressedIcc(dataView, iccData) {\n    if (!compressionMethodIsSupported(iccData[0].compressionMethod)) {\n        return {};\n    }\n    const compressedDataView = new DataView(dataView.buffer.slice(iccData[0].offset, iccData[0].offset + iccData[0].length));\n    return decompress(compressedDataView, iccData[0].compressionMethod, 'utf-8', 'dataview')\n        .then(parseTags)\n        .catch(() => ({}));\n}\n\nfunction compressionMethodIsSupported(compressionMethod) {\n    return compressionMethod === COMPRESSION_METHOD_DEFLATE;\n}\n\nfunction readIcc(dataView, iccData) {\n    try {\n        const totalIccProfileLength = iccData.reduce((sum, icc) => sum + icc.length, 0);\n\n        const iccBinaryData = new Uint8Array(totalIccProfileLength);\n        let offset = 0;\n        const buffer = getBuffer(dataView);\n\n        for (let chunkNumber = 1; chunkNumber <= iccData.length; chunkNumber++) {\n            const iccDataChunk = iccData.find((x) => x.chunkNumber === chunkNumber);\n            if (!iccDataChunk) {\n                throw new Error(`ICC chunk ${chunkNumber} not found`);\n            }\n\n            const data = buffer.slice(iccDataChunk.offset, iccDataChunk.offset + iccDataChunk.length);\n            const chunkData = new Uint8Array(data);\n\n            iccBinaryData.set(chunkData, offset);\n            offset += chunkData.length;\n        }\n\n        return parseTags(new DataView(iccBinaryData.buffer));\n    } catch (error) {\n        return {};\n    }\n}\n\nfunction getBuffer(dataView) {\n    if (Array.isArray(dataView)) {\n        return (new DataView(Uint8Array.from(dataView).buffer)).buffer;\n    }\n    return dataView.buffer;\n}\n\nfunction iccDoesNotHaveTagCount(buffer) {\n    return buffer.length < (ICC_TAG_COUNT_OFFSET + 4);\n}\n\nfunction hasTagsData(buffer, tagHeaderOffset) {\n    return buffer.length < tagHeaderOffset + TAG_TABLE_SINGLE_TAG_DATA;\n}\n\nexport function parseTags(dataView) {\n    const buffer = dataView.buffer;\n\n    const length = dataView.getUint32();\n    if (dataView.byteLength !== length) {\n        throw new Error('ICC profile length not matching');\n    }\n\n    if (dataView.byteLength < PROFILE_HEADER_LENGTH) {\n        throw new Error('ICC profile too short');\n    }\n\n    const tags = {};\n\n    const iccProfileKeys = Object.keys(iccProfile);\n    for (let i = 0; i < iccProfileKeys.length; i++) {\n        const offset = iccProfileKeys[i];\n        const profileEntry = iccProfile[offset];\n        const value = profileEntry.value(dataView, parseInt(offset, 10));\n        let description = value;\n        if (profileEntry.description) {\n            description = profileEntry.description(value);\n        }\n\n        tags[profileEntry.name] = {\n            value,\n            description\n        };\n    }\n\n    const signature = sliceToString(buffer.slice(36, 40));\n    if (signature !== ICC_SIGNATURE) {\n        throw new Error('ICC profile: missing signature');\n    }\n\n    /* ICC data is incomplete but we have header parsed so lets return it */\n    if (iccDoesNotHaveTagCount(buffer)) {\n        return tags;\n    }\n\n    const tagCount = dataView.getUint32(128);\n    let tagHeaderOffset = 132;\n\n    for (let i = 0; i < tagCount; i++) {\n        if (hasTagsData(buffer, tagHeaderOffset)) {\n            // Tags are corrupted (offset too far), return what we parsed until now\n            return tags;\n        }\n        const tagSignature = getStringFromDataView(dataView, tagHeaderOffset, 4);\n        const tagOffset = dataView.getUint32(tagHeaderOffset + 4);\n        const tagSize = dataView.getUint32(tagHeaderOffset + 8);\n\n        if (tagOffset > buffer.length) {\n            // Tag data is invalid, lets return what we managed to parse\n            return tags;\n        }\n        const tagType = getStringFromDataView(dataView, tagOffset, 4);\n\n        if (tagType === TAG_TYPE_DESC) {\n            const tagValueSize = dataView.getUint32(tagOffset + 8);\n            if (tagValueSize > tagSize) {\n                // Tag data is invalid, lets return what we managed to parse\n                return tags;\n            }\n\n            const val = sliceToString(buffer.slice(tagOffset + 12, tagOffset + tagValueSize + 11));\n            addTag(tags, tagSignature, val);\n        } else if (tagType === TAG_TYPE_MULTI_LOCALIZED_UNICODE_TYPE) {\n            const numRecords = dataView.getUint32(tagOffset + 8);\n            const recordSize = dataView.getUint32(tagOffset + 12);\n            let offset = tagOffset + 16;\n            const val = [];\n            for (let recordNum = 0; recordNum < numRecords; recordNum++) {\n                const languageCode = getStringFromDataView(dataView, offset + 0, 2);\n                const countryCode = getStringFromDataView(dataView, offset + 2, 2);\n                const textLength = dataView.getUint32(offset + 4);\n                const textOffset = dataView.getUint32(offset + 8);\n\n                const text = getUnicodeStringFromDataView(dataView, tagOffset + textOffset, textLength);\n                val.push({languageCode, countryCode, text});\n                offset += recordSize;\n            }\n            if (numRecords === 1) {\n                addTag(tags, tagSignature, val[0].text);\n            } else {\n                const valObj = {};\n                for (let valIndex = 0; valIndex < val.length; valIndex++) {\n                    valObj[`${val[valIndex].languageCode}-${val[valIndex].countryCode}`] = val[valIndex].text;\n                }\n                addTag(tags, tagSignature, valObj);\n            }\n        } else if (tagType === TAG_TYPE_TEXT) {\n            const val = sliceToString(buffer.slice(tagOffset + 8, tagOffset + tagSize - 7));\n            addTag(tags, tagSignature, val);\n        } else if (tagType === TAG_TYPE_SIGNATURE) {\n            const val = sliceToString(buffer.slice(tagOffset + 8, tagOffset + 12));\n            addTag(tags, tagSignature, val);\n        }\n        tagHeaderOffset = tagHeaderOffset + 12;\n    }\n\n    return tags;\n}\n\nfunction sliceToString(slice) {\n    return String.fromCharCode.apply(null, new Uint8Array(slice));\n}\n\nfunction addTag(tags, tagSignature, value) {\n    if (iccTags[tagSignature]) {\n        tags[iccTags[tagSignature].name] = {value, description: value};\n    } else {\n        tags[tagSignature] = {value, description: value};\n    }\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\n// Reverse-engineered docs:\n// https://exiftool.org/makernote_types.html\n// https://exiv2.org/makernote.html\n// https://exiv2.org/tags-canon.html\n// https://gist.github.com/redaktor/bae0ef2377ab70bc5276\n// https://www.ozhiker.com/electronics/pjmt/jpeg_info/canon_mn.html\n\nimport {objectAssign} from './utils.js';\nimport {readIfd} from './tags-helpers.js';\nimport {IFD_TYPE_CANON} from './tag-names.js';\n\nconst SHOT_INFO_AUTO_ROTATE = 27; // First position is size.\n\nexport default {\n    read,\n    SHOT_INFO_AUTO_ROTATE\n};\n\nfunction read(dataView, tiffHeaderOffset, offset, byteOrder, includeUnknown) {\n    let tags = readIfd(dataView, IFD_TYPE_CANON, tiffHeaderOffset, tiffHeaderOffset + offset, byteOrder, includeUnknown);\n\n    if (tags['ShotInfo']) {\n        tags = objectAssign({}, tags, parseShotInfo(tags['ShotInfo'].value));\n        delete tags['ShotInfo'];\n    }\n\n    return tags;\n}\n\nfunction parseShotInfo(shotInfoData) {\n    const tags = {};\n\n    if (shotInfoData[SHOT_INFO_AUTO_ROTATE] !== undefined) {\n        tags['AutoRotate'] = {\n            value: shotInfoData[SHOT_INFO_AUTO_ROTATE],\n            description: getAutoRotateDescription(shotInfoData[SHOT_INFO_AUTO_ROTATE])\n        };\n    }\n\n    return tags;\n}\n\nfunction getAutoRotateDescription(autoRotate) {\n    if (autoRotate === 0) {\n        return 'None';\n    }\n    if (autoRotate === 1) {\n        return 'Rotate 90 CW';\n    }\n    if (autoRotate === 2) {\n        return 'Rotate 180';\n    }\n    if (autoRotate === 3) {\n        return 'Rotate 270 CW';\n    }\n    return 'Unknown';\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\n// Reverse-engineered docs:\n// https://exiftool.org/makernote_types.html\n// https://exiv2.org/makernote.html\n// https://exiftool.org/TagNames/Pentax.html\n\nimport ByteOrder from './byte-order.js';\nimport {objectAssign} from './utils.js';\nimport {readIfd} from './tags-helpers.js';\nimport {IFD_TYPE_PENTAX} from './tag-names.js';\n\nconst BYTE_ORDER_OFFSET = 8; // Pentax5: https://exiftool.org/makernote_types.html\nconst PENTAX_IFD_OFFSET = BYTE_ORDER_OFFSET + 2; // https://exiftool.org/makernote_types.html\n\nconst MODEL_ID = {\n    K3_III: 0x13254,\n};\nconst LIK3III = {\n    CAMERA_ORIENTATION: 1,\n    ROLL_ANGLE: 3,\n    PITCH_ANGLE: 5\n};\n\nexport default {\n    read,\n    PENTAX_IFD_OFFSET,\n    MODEL_ID,\n    LIK3III\n};\n\nfunction read(dataView, tiffHeaderOffset, offset, includeUnknown) {\n    // Pentax does not use the standard TIFF header offset as base for tag\n    // offsets but instead uses the start of the IFD, i.e. directly after the\n    // two byte order bytes. originOffset below is this offset.\n    const byteOrder = ByteOrder.getByteOrder(dataView, tiffHeaderOffset + offset + BYTE_ORDER_OFFSET);\n    const originOffset = tiffHeaderOffset + offset;\n    let tags = readIfd(dataView, IFD_TYPE_PENTAX, originOffset, originOffset + PENTAX_IFD_OFFSET, byteOrder, includeUnknown, true);\n\n    if (hasLevelInfoK3III(tags)) {\n        tags = objectAssign({}, tags, parseLevelInfoK3III(dataView, originOffset + tags['LevelInfo'].__offset, byteOrder));\n        delete tags['LevelInfo'];\n    }\n\n    return tags;\n}\n\nfunction hasLevelInfoK3III(tags) {\n    return tags['PentaxModelID'] && tags['PentaxModelID'].value === MODEL_ID.K3_III && tags['LevelInfo'];\n}\n\nfunction parseLevelInfoK3III(dataView, levelInfoOffset, byteOrder) {\n    const tags = {};\n\n    if (levelInfoOffset + 7 > dataView.byteLength) {\n        return tags;\n    }\n\n    const cameraOrientation = dataView.getInt8(levelInfoOffset + LIK3III.CAMERA_ORIENTATION);\n    tags['CameraOrientation'] = {\n        value: cameraOrientation,\n        description: getOrientationDescription(cameraOrientation)\n    };\n\n    const rollAngle = dataView.getInt16(levelInfoOffset + LIK3III.ROLL_ANGLE, byteOrder === ByteOrder.LITTLE_ENDIAN);\n    tags['RollAngle'] = {\n        value: rollAngle,\n        description: getRollAngleDescription(rollAngle)\n    };\n\n    const pitchAngle = dataView.getInt16(levelInfoOffset + LIK3III.PITCH_ANGLE, byteOrder === ByteOrder.LITTLE_ENDIAN);\n    tags['PitchAngle'] = {\n        value: pitchAngle,\n        description: getPitchAngleDescription(pitchAngle)\n    };\n\n    return tags;\n}\n\nfunction getOrientationDescription(orientation) {\n    if (orientation === 0) {\n        return 'Horizontal (normal)';\n    }\n    if (orientation === 1) {\n        return 'Rotate 270 CW';\n    }\n    if (orientation === 2) {\n        return 'Rotate 180';\n    }\n    if (orientation === 3) {\n        return 'Rotate 90 CW';\n    }\n    if (orientation === 4) {\n        return 'Upwards';\n    }\n    if (orientation === 5) {\n        return 'Downwards';\n    }\n    return 'Unknown';\n}\n\nfunction getRollAngleDescription(rollAngle) {\n    return '' + (rollAngle * -0.5);\n}\n\nfunction getPitchAngleDescription(pitchAngle) {\n    return '' + (pitchAngle * -0.5);\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport Types from './types.js';\n\nexport default {\n    read\n};\n\nfunction read(dataView, fileDataOffset) {\n    return {\n        'Image Width': getImageWidth(dataView, fileDataOffset),\n        'Image Height': getImageHeight(dataView, fileDataOffset),\n        'Bit Depth': getBitDepth(dataView, fileDataOffset),\n        'Color Type': getColorType(dataView, fileDataOffset),\n        'Compression': getCompression(dataView, fileDataOffset),\n        'Filter': getFilter(dataView, fileDataOffset),\n        'Interlace': getInterlace(dataView, fileDataOffset)\n    };\n}\n\nfunction getImageWidth(dataView, fileDataOffset) {\n    const OFFSET = 0;\n    const SIZE = 4;\n\n    if (fileDataOffset + OFFSET + SIZE > dataView.byteLength) {\n        return undefined;\n    }\n\n    const value = Types.getLongAt(dataView, fileDataOffset);\n    return {\n        value,\n        description: `${value}px`\n    };\n}\n\nfunction getImageHeight(dataView, fileDataOffset) {\n    const OFFSET = 4;\n    const SIZE = 4;\n\n    if (fileDataOffset + OFFSET + SIZE > dataView.byteLength) {\n        return undefined;\n    }\n\n    const value = Types.getLongAt(dataView, fileDataOffset + OFFSET);\n    return {\n        value,\n        description: `${value}px`\n    };\n}\n\nfunction getBitDepth(dataView, fileDataOffset) {\n    const OFFSET = 8;\n    const SIZE = 1;\n\n    if (fileDataOffset + OFFSET + SIZE > dataView.byteLength) {\n        return undefined;\n    }\n\n    const value = Types.getByteAt(dataView, fileDataOffset + OFFSET);\n    return {\n        value,\n        description: `${value}`\n    };\n}\n\nfunction getColorType(dataView, fileDataOffset) {\n    const OFFSET = 9;\n    const SIZE = 1;\n    const COLOR_TYPES = {\n        0: 'Grayscale',\n        2: 'RGB',\n        3: 'Palette',\n        4: 'Grayscale with Alpha',\n        6: 'RGB with Alpha'\n    };\n\n    if (fileDataOffset + OFFSET + SIZE > dataView.byteLength) {\n        return undefined;\n    }\n\n    const value = Types.getByteAt(dataView, fileDataOffset + OFFSET);\n    return {\n        value,\n        description: COLOR_TYPES[value] || 'Unknown'\n    };\n}\n\nfunction getCompression(dataView, fileDataOffset) {\n    const OFFSET = 10;\n    const SIZE = 1;\n\n    if (fileDataOffset + OFFSET + SIZE > dataView.byteLength) {\n        return undefined;\n    }\n\n    const value = Types.getByteAt(dataView, fileDataOffset + OFFSET);\n    return {\n        value,\n        description: value === 0 ? 'Deflate/Inflate' : 'Unknown'\n    };\n}\n\nfunction getFilter(dataView, fileDataOffset) {\n    const OFFSET = 11;\n    const SIZE = 1;\n\n    if (fileDataOffset + OFFSET + SIZE > dataView.byteLength) {\n        return undefined;\n    }\n\n    const value = Types.getByteAt(dataView, fileDataOffset + OFFSET);\n    return {\n        value,\n        description: value === 0 ? 'Adaptive' : 'Unknown'\n    };\n}\n\nfunction getInterlace(dataView, fileDataOffset) {\n    const OFFSET = 12;\n    const SIZE = 1;\n    const INTERLACE_TYPES = {\n        0: 'Noninterlaced',\n        1: 'Adam7 Interlace'\n    };\n\n    if (fileDataOffset + OFFSET + SIZE > dataView.byteLength) {\n        return undefined;\n    }\n\n    const value = Types.getByteAt(dataView, fileDataOffset + OFFSET);\n    return {\n        value,\n        description: INTERLACE_TYPES[value] || 'Unknown'\n    };\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\n// Specification: http://www.libpng.org/pub/png/spec/1.2/\n\nimport {getStringValueFromArray, getStringFromDataView, decompress, COMPRESSION_METHOD_NONE} from './utils.js';\nimport TagDecoder from './tag-decoder.js';\nimport {TYPE_TEXT, TYPE_ITXT, TYPE_ZTXT} from './image-header-png.js';\nimport Tags from './tags.js';\nimport IptcTags from './iptc-tags.js';\nimport Constants from './constants.js';\n\nexport default {\n    read\n};\n\nconst STATE_KEYWORD = 'STATE_KEYWORD';\nconst STATE_COMPRESSION = 'STATE_COMPRESSION';\nconst STATE_LANG = 'STATE_LANG';\nconst STATE_TRANSLATED_KEYWORD = 'STATE_TRANSLATED_KEYWORD';\nconst STATE_TEXT = 'STATE_TEXT';\nconst COMPRESSION_SECTION_ITXT_EXTRA_BYTE = 1;\nconst COMPRESSION_FLAG_COMPRESSED = 1;\nconst EXIF_OFFSET = 6;\n\nfunction read(dataView, pngTextChunks, async, includeUnknown) {\n    const tags = {};\n    const tagsPromises = [];\n    for (let i = 0; i < pngTextChunks.length; i++) {\n        const {offset, length, type} = pngTextChunks[i];\n        const nameAndValue = getNameAndValue(dataView, offset, length, type, async);\n        if (nameAndValue instanceof Promise) {\n            tagsPromises.push(nameAndValue.then(({name, value, description}) => {\n                try {\n                    if (Constants.USE_EXIF && isExifGroupTag(name, value)) {\n                        return {\n                            __exif: Tags.read(decodeRawData(value), EXIF_OFFSET, includeUnknown).tags\n                        };\n                    } else if (Constants.USE_IPTC && isIptcGroupTag(name, value)) {\n                        return {\n                            __iptc: IptcTags.read(decodeRawData(value), 0, includeUnknown)\n                        };\n                    } else if (name && !isExifGroupTag(name, value) && !isIptcGroupTag(name, value)) {\n                        return {\n                            [name]: {\n                                value,\n                                description\n                            }\n                        };\n                    }\n                } catch (error) {\n                    // Ignore the broken tag.\n                }\n                return {};\n            }));\n        } else {\n            const {name, value, description} = nameAndValue;\n            if (name) {\n                tags[name] = {\n                    value,\n                    description\n                };\n            }\n        }\n    }\n\n    return {\n        readTags: tags,\n        readTagsPromise: tagsPromises.length > 0 ? Promise.all(tagsPromises) : undefined\n    };\n}\n\nfunction getNameAndValue(dataView, offset, length, type, async) {\n    const keywordChars = [];\n    const langChars = [];\n    const translatedKeywordChars = [];\n    let valueChars;\n    let parsingState = STATE_KEYWORD;\n    let compressionMethod = COMPRESSION_METHOD_NONE;\n\n    for (let i = 0; i < length && offset + i < dataView.byteLength; i++) {\n        if (parsingState === STATE_COMPRESSION) {\n            compressionMethod = getCompressionMethod({type, dataView, offset: offset + i});\n            if (type === TYPE_ITXT) {\n                i += COMPRESSION_SECTION_ITXT_EXTRA_BYTE;\n            }\n            parsingState = moveToNextState(type, parsingState);\n            continue;\n        } else if (parsingState === STATE_TEXT) {\n            valueChars = new DataView(dataView.buffer.slice(offset + i, offset + length));\n            break;\n        }\n        const byte = dataView.getUint8(offset + i);\n        if (byte === 0) {\n            parsingState = moveToNextState(type, parsingState);\n        } else if (parsingState === STATE_KEYWORD) {\n            keywordChars.push(byte);\n        } else if (parsingState === STATE_LANG) {\n            langChars.push(byte);\n        } else if (parsingState === STATE_TRANSLATED_KEYWORD) {\n            translatedKeywordChars.push(byte);\n        }\n    }\n\n    if (compressionMethod !== COMPRESSION_METHOD_NONE && !async) {\n        return {};\n    }\n    const decompressedValueChars = decompress(valueChars, compressionMethod, getEncodingFromType(type));\n    if (decompressedValueChars instanceof Promise) {\n        return decompressedValueChars\n            .then((_decompressedValueChars) => constructTag(_decompressedValueChars, type, langChars, keywordChars))\n            .catch(() => constructTag('<text using unknown compression>'.split(''), type, langChars, keywordChars));\n    }\n    return constructTag(decompressedValueChars, type, langChars, keywordChars);\n}\n\nfunction getCompressionMethod({type, dataView, offset}) {\n    if (type === TYPE_ITXT) {\n        if (dataView.getUint8(offset) === COMPRESSION_FLAG_COMPRESSED) {\n            return dataView.getUint8(offset + 1);\n        }\n    } else if (type === TYPE_ZTXT) {\n        return dataView.getUint8(offset);\n    }\n    return COMPRESSION_METHOD_NONE;\n}\n\nfunction moveToNextState(type, parsingState) {\n    if (parsingState === STATE_KEYWORD && [TYPE_ITXT, TYPE_ZTXT].includes(type)) {\n        return STATE_COMPRESSION;\n    }\n    if (parsingState === STATE_COMPRESSION) {\n        if (type === TYPE_ITXT) {\n            return STATE_LANG;\n        }\n        return STATE_TEXT;\n    }\n    if (parsingState === STATE_LANG) {\n        return STATE_TRANSLATED_KEYWORD;\n    }\n    return STATE_TEXT;\n}\n\nfunction getEncodingFromType(type) {\n    if (type === TYPE_TEXT || type === TYPE_ZTXT) {\n        return 'latin1';\n    }\n    return 'utf-8';\n}\n\nfunction constructTag(valueChars, type, langChars, keywordChars) {\n    const value = getValue(valueChars);\n    return {\n        name: getName(type, langChars, keywordChars),\n        value,\n        description: type === TYPE_ITXT ? getDescription(valueChars) : value\n    };\n}\n\nfunction getName(type, langChars, keywordChars) {\n    const name = getStringValueFromArray(keywordChars);\n    if (type === TYPE_TEXT || langChars.length === 0) {\n        return name;\n    }\n    const lang = getStringValueFromArray(langChars);\n    return `${name} (${lang})`;\n}\n\nfunction getValue(valueChars) {\n    if (valueChars instanceof DataView) {\n        return getStringFromDataView(valueChars, 0, valueChars.byteLength);\n    }\n    return valueChars;\n}\n\nfunction getDescription(valueChars) {\n    return TagDecoder.decode('UTF-8', valueChars);\n}\n\nfunction isExifGroupTag(name, value) {\n    return name.toLowerCase() === 'raw profile type exif' && value.substring(1, 5) === 'exif';\n}\n\nfunction isIptcGroupTag(name, value) {\n    return name.toLowerCase() === 'raw profile type iptc' && value.substring(1, 5) === 'iptc';\n}\n\nfunction decodeRawData(value) {\n    const parts = value.match(/\\n(exif|iptc)\\n\\s*\\d+\\n([\\s\\S]*)$/);\n    return hexToDataView(parts[2].replace(/\\n/g, ''));\n}\n\nfunction hexToDataView(hex) {\n    const dataView = new DataView(new ArrayBuffer(hex.length / 2));\n    for (let i = 0; i < hex.length; i += 2) {\n        dataView.setUint8(i / 2, parseInt(hex.substring(i, i + 2), 16));\n    }\n    return dataView;\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport Types from './types.js';\nimport {PNG_CHUNK_LENGTH_OFFSET, PNG_CHUNK_TYPE_OFFSET, PNG_CHUNK_DATA_OFFSET, PNG_CHUNK_TYPE_SIZE, TYPE_PHYS, TYPE_TIME} from './image-header-png.js';\nimport {getStringFromDataView} from './utils.js';\n\nexport default {\n    read\n};\n\nfunction read(dataView, chunkOffsets) {\n    const tags = {};\n\n    for (let i = 0; i < chunkOffsets.length; i++) {\n        const chunkLength = Types.getLongAt(dataView, chunkOffsets[i] + PNG_CHUNK_LENGTH_OFFSET);\n        const chunkType = getStringFromDataView(dataView, chunkOffsets[i] + PNG_CHUNK_TYPE_OFFSET, PNG_CHUNK_TYPE_SIZE);\n\n        if (chunkType === TYPE_PHYS) {\n            tags['Pixels Per Unit X'] = getPixelsPerUnitX(dataView, chunkOffsets[i], chunkLength);\n            tags['Pixels Per Unit Y'] = getPixelsPerUnitY(dataView, chunkOffsets[i], chunkLength);\n            tags['Pixel Units'] = getPixelUnits(dataView, chunkOffsets[i], chunkLength);\n        } else if (chunkType === TYPE_TIME) {\n            tags['Modify Date'] = getModifyDate(dataView, chunkOffsets[i], chunkLength);\n        }\n    }\n\n    return tags;\n}\n\nfunction getPixelsPerUnitX(dataView, chunkOffset, chunkLength) {\n    const TAG_OFFSET = 0;\n    const TAG_SIZE = 4;\n\n    if (!tagFitsInBuffer(dataView, chunkOffset, chunkLength, TAG_OFFSET, TAG_SIZE)) {\n        return undefined;\n    }\n\n    const value = Types.getLongAt(dataView, chunkOffset + PNG_CHUNK_DATA_OFFSET + TAG_OFFSET);\n\n    return {\n        value,\n        description: '' + value\n    };\n}\n\nfunction getPixelsPerUnitY(dataView, chunkOffset, chunkLength) {\n    const TAG_OFFSET = 4;\n    const TAG_SIZE = 4;\n\n    if (!tagFitsInBuffer(dataView, chunkOffset, chunkLength, TAG_OFFSET, TAG_SIZE)) {\n        return undefined;\n    }\n\n    const value = Types.getLongAt(dataView, chunkOffset + PNG_CHUNK_DATA_OFFSET + TAG_OFFSET);\n\n    return {\n        value,\n        description: '' + value\n    };\n}\n\nfunction getPixelUnits(dataView, chunkOffset, chunkLength) {\n    const TAG_OFFSET = 8;\n    const TAG_SIZE = 1;\n\n    if (!tagFitsInBuffer(dataView, chunkOffset, chunkLength, TAG_OFFSET, TAG_SIZE)) {\n        return undefined;\n    }\n\n    const value = Types.getByteAt(dataView, chunkOffset + PNG_CHUNK_DATA_OFFSET + TAG_OFFSET);\n\n    return {\n        value,\n        description: value === 1 ? 'meters' : 'Unknown'\n    };\n}\n\nfunction getModifyDate(dataView, chunkOffset, chunkLength) {\n    const TIME_TAG_SIZE = 7;\n\n    if (!tagFitsInBuffer(dataView, chunkOffset, chunkLength, 0, TIME_TAG_SIZE)) {\n        return undefined;\n    }\n\n    const year = Types.getShortAt(dataView, chunkOffset + PNG_CHUNK_DATA_OFFSET);\n    const month = Types.getByteAt(dataView, chunkOffset + PNG_CHUNK_DATA_OFFSET + 2);\n    const day = Types.getByteAt(dataView, chunkOffset + PNG_CHUNK_DATA_OFFSET + 3);\n    const hours = Types.getByteAt(dataView, chunkOffset + PNG_CHUNK_DATA_OFFSET + 4);\n    const minutes = Types.getByteAt(dataView, chunkOffset + PNG_CHUNK_DATA_OFFSET + 5);\n    const seconds = Types.getByteAt(dataView, chunkOffset + PNG_CHUNK_DATA_OFFSET + 6);\n\n    return {\n        value: [year, month, day, hours, minutes, seconds],\n        description: `${pad(year, 4)}-${pad(month, 2)}-${pad(day, 2)} ${pad(hours, 2)}:${pad(minutes, 2)}:${pad(seconds, 2)}`\n    };\n}\n\nfunction tagFitsInBuffer(dataView, chunkOffset, chunkLength, tagOffset, tagSize) {\n    return tagOffset + tagSize <= chunkLength && chunkOffset + PNG_CHUNK_DATA_OFFSET + tagOffset + tagSize <= dataView.byteLength;\n}\n\nfunction pad(number, size) {\n    return `${'0'.repeat(size - ('' + number).length)}${number}`;\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport Types from './types.js';\n\nexport default {\n    read\n};\n\nconst IMAGE_WIDTH_OFFSET = 4;\nconst IMAGE_HEIGHT_OFFSET = 7;\n\n// https://developers.google.com/speed/webp/docs/riff_container#extended_file_format\nfunction read(dataView, chunkOffset) {\n    const tags = {};\n\n    const flags = Types.getByteAt(dataView, chunkOffset);\n\n    tags['Alpha'] = getAlpha(flags);\n    tags['Animation'] = getAnimation(flags);\n    tags['ImageWidth'] = getThreeByteValue(dataView, chunkOffset + IMAGE_WIDTH_OFFSET);\n    tags['ImageHeight'] = getThreeByteValue(dataView, chunkOffset + IMAGE_HEIGHT_OFFSET);\n\n    return tags;\n}\n\nfunction getAlpha(flags) {\n    const value = flags & 0x10;\n    return {\n        value: value ? 1 : 0,\n        description: value ? 'Yes' : 'No'\n    };\n}\n\nfunction getAnimation(flags) {\n    const value = flags & 0x02;\n    return {\n        value: value ? 1 : 0,\n        description: value ? 'Yes' : 'No'\n    };\n}\n\nfunction getThreeByteValue(dataView, offset) {\n    // Values are stored little-endian.\n    const value = Types.getByteAt(dataView, offset)\n        + 256 * Types.getByteAt(dataView, offset + 1)\n        + 256 * 256 * Types.getByteAt(dataView, offset + 2)\n        + 1; // Value is 1-based, i.e. a value of 7 means 8px.\n\n    return {\n        value,\n        description: value + 'px'\n    };\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\n// https://www.w3.org/Graphics/GIF/spec-gif87.txt\n// https://www.w3.org/Graphics/GIF/spec-gif89a.txt\n\nimport {getStringFromDataView} from './utils.js';\n\nexport default {\n    read\n};\n\nfunction read(dataView) {\n    return {\n        'GIF Version': getGifVersion(dataView),\n        'Image Width': getImageWidth(dataView),\n        'Image Height': getImageHeight(dataView),\n        'Global Color Map': getGlobalColorMap(dataView),\n        'Bits Per Pixel': getBitDepth(dataView),\n        'Color Resolution Depth': getColorResolution(dataView)\n    };\n}\n\nfunction getGifVersion(dataView) {\n    const OFFSET = 3;\n    const SIZE = 3;\n\n    if (OFFSET + SIZE > dataView.byteLength) {\n        return undefined;\n    }\n\n    const value = getStringFromDataView(dataView, OFFSET, SIZE);\n    return {\n        value,\n        description: value\n    };\n}\n\nfunction getImageWidth(dataView) {\n    const OFFSET = 6;\n    const SIZE = 2;\n\n    if (OFFSET + SIZE > dataView.byteLength) {\n        return undefined;\n    }\n\n    const value = dataView.getUint16(OFFSET, true);\n    return {\n        value,\n        description: `${value}px`\n    };\n}\n\nfunction getImageHeight(dataView) {\n    const OFFSET = 8;\n    const SIZE = 2;\n\n    if (OFFSET + SIZE > dataView.byteLength) {\n        return undefined;\n    }\n\n    const value = dataView.getUint16(OFFSET, true);\n    return {\n        value,\n        description: `${value}px`\n    };\n}\n\nfunction getGlobalColorMap(dataView) {\n    const OFFSET = 10;\n    const SIZE = 1;\n\n    if (OFFSET + SIZE > dataView.byteLength) {\n        return undefined;\n    }\n\n    const byteValue = dataView.getUint8(OFFSET);\n    const value = (byteValue & 0b10000000) >>> 7;\n    return {\n        value,\n        description: value === 1 ? 'Yes' : 'No'\n    };\n}\n\nfunction getColorResolution(dataView) {\n    const OFFSET = 10;\n    const SIZE = 1;\n\n    if (OFFSET + SIZE > dataView.byteLength) {\n        return undefined;\n    }\n\n    const byteValue = dataView.getUint8(OFFSET);\n    const value = ((byteValue & 0b01110000) >>> 4) + 1; // Zero-based.\n    return {\n        value,\n        description: `${value} ${value === 1 ? 'bit' : 'bits'}`\n    };\n}\n\nfunction getBitDepth(dataView) {\n    const OFFSET = 10;\n    const SIZE = 1;\n\n    if (OFFSET + SIZE > dataView.byteLength) {\n        return undefined;\n    }\n\n    const byteValue = dataView.getUint8(OFFSET);\n    const value = (byteValue & 0b00000111) + 1; // Zero-based.\n    return {\n        value,\n        description: `${value} ${value === 1 ? 'bit' : 'bits'}`\n    };\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport {deferInit, getBase64Image} from './utils.js';\n\n// https://exiftool.org/TagNames/EXIF.html#Compression\nconst COMPRESSION_JPEG = [6, 7, 99];\n\nexport default {\n    get,\n};\n\nfunction get(dataView, thumbnailTags, tiffHeaderOffset) {\n    if (hasJpegThumbnail(thumbnailTags)) {\n        thumbnailTags.type = 'image/jpeg';\n        const offset = tiffHeaderOffset + thumbnailTags.JPEGInterchangeFormat.value;\n        thumbnailTags.image = dataView.buffer.slice(offset, offset + thumbnailTags.JPEGInterchangeFormatLength.value);\n        deferInit(thumbnailTags, 'base64', function () {\n            return getBase64Image(this.image);\n        });\n    }\n\n    // There is a small possibility of thumbnails in TIFF format but they are\n    // not stored as a self-contained image file and would be much more\n    // difficult to extract.\n    // https://exiftool.org/forum/index.php?topic=3273.msg14778#msg14778\n\n    return thumbnailTags;\n}\n\nfunction hasJpegThumbnail(tags) {\n    return tags && ((tags.Compression === undefined) || (COMPRESSION_JPEG.includes(tags.Compression.value)))\n        && tags.JPEGInterchangeFormat && tags.JPEGInterchangeFormat.value\n        && tags.JPEGInterchangeFormatLength && tags.JPEGInterchangeFormatLength.value;\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\nimport TagNamesCommon from './tag-names-common.js';\n\nconst FOCAL_PLANE_RESOLUTION_UNIT = {\n    INCHES: 2,\n    CENTIMETERS: 3,\n    MILLIMETERS: 4\n};\n\nconst UNIT_FACTORS = {\n    INCHES_TO_MM: 25.4, // 1 inch = 25.4 mm\n    CM_TO_MM: 10, // 1 cm = 10 mm\n    MM_TO_MM: 1 // Already in mm\n};\n\nexport default {\n    get,\n};\n\nexport {FOCAL_PLANE_RESOLUTION_UNIT};\n\nfunction get(tags, expanded) {\n    const compositeTags = {};\n    let hasCompositeTags = false;\n\n    const focalLength = getTagValue(tags, 'exif', 'FocalLength', expanded);\n    const focalPlaneXResolution = getTagValue(tags, 'exif', 'FocalPlaneXResolution', expanded);\n    const focalPlaneYResolution = getTagValue(tags, 'exif', 'FocalPlaneYResolution', expanded);\n    const focalPlaneResolutionUnit = getTagValue(tags, 'exif', 'FocalPlaneResolutionUnit', expanded);\n    const imageWidth = getTagValue(tags, 'file', 'Image Width', expanded);\n    const imageHeight = getTagValue(tags, 'file', 'Image Height', expanded);\n    const focalLengthIn35mmFilm = getTagValue(tags, 'exif', 'FocalLengthIn35mmFilm', expanded)\n        || getFocalLengthIn35mmFilmValue(focalPlaneXResolution, focalPlaneYResolution, focalPlaneResolutionUnit, imageWidth, imageHeight, focalLength);\n\n    if (focalLengthIn35mmFilm) {\n        compositeTags.FocalLength35efl = {\n            value: focalLengthIn35mmFilm,\n            description: TagNamesCommon.FocalLengthIn35mmFilm(focalLengthIn35mmFilm)\n        };\n        hasCompositeTags = true;\n    }\n\n    const scaleFactorTo35mmEquivalent = getScaleFactorTo35mmEquivalent(focalLength, focalLengthIn35mmFilm);\n    if (scaleFactorTo35mmEquivalent) {\n        compositeTags.ScaleFactorTo35mmEquivalent = scaleFactorTo35mmEquivalent;\n        hasCompositeTags = true;\n    }\n\n    const fieldOfView = getFieldOfView(focalLengthIn35mmFilm);\n    if (fieldOfView) {\n        compositeTags.FieldOfView = fieldOfView;\n        hasCompositeTags = true;\n    }\n\n    if (hasCompositeTags) {\n        return compositeTags;\n    }\n\n    return undefined;\n}\n\nfunction getTagValue(tags, group, tagName, expanded) {\n    if (expanded && tags[group] && tags[group][tagName]) {\n        return tags[group][tagName].value;\n    }\n    if (!expanded && tags[tagName]) {\n        return tags[tagName].value;\n    }\n    return undefined;\n}\n\n/**\n * Calculates the 35mm equivalent focal length from camera sensor data.\n *\n * This function determines how the field of view of a camera's sensor compares to a\n * standard 35mm film frame (36mm × 24mm). The conversion involves:\n *\n * 1. **Sensor dimensions**: Calculated from image pixel count and focal plane\n *    resolution (pixels per unit area)\n * 2. **Crop factor**: The ratio between the sensor diagonal and the standard\n *    35mm diagonal (43.27mm)\n * 3. **Equivalent focal length**: Actual focal length multiplied by the crop factor\n *\n * For example, a 50mm lens on a camera with a 1.5x crop factor gives an equivalent\n * field of view of a 75mm lens on a 35mm camera. This doesn't change the actual\n * focal length or depth of field characteristics, only the angle of view.\n */\nfunction getFocalLengthIn35mmFilmValue(focalPlaneXResolution, focalPlaneYResolution, focalPlaneResolutionUnit, imageWidth, imageHeight, focalLength) {\n    // Standard 35mm film diagonal is 43.27mm (calculated from 36mm x 24mm frame)\n    const DIAGONAL_35mm = 43.27;\n\n    if (focalPlaneXResolution && focalPlaneYResolution && focalPlaneResolutionUnit && imageWidth && imageHeight && focalLength) {\n        try {\n            let resolutionUnitFactor;\n            switch (focalPlaneResolutionUnit) {\n                case FOCAL_PLANE_RESOLUTION_UNIT.INCHES:\n                    resolutionUnitFactor = UNIT_FACTORS.INCHES_TO_MM;\n                    break;\n                case FOCAL_PLANE_RESOLUTION_UNIT.CENTIMETERS:\n                    resolutionUnitFactor = UNIT_FACTORS.CM_TO_MM;\n                    break;\n                case FOCAL_PLANE_RESOLUTION_UNIT.MILLIMETERS:\n                    resolutionUnitFactor = UNIT_FACTORS.MM_TO_MM;\n                    break;\n                default:\n                    return undefined;\n            }\n\n            const focalPlaneXResolutionMm = focalPlaneXResolution[0] / focalPlaneXResolution[1] * resolutionUnitFactor;\n            const focalPlaneYResolutionMm = focalPlaneYResolution[0] / focalPlaneYResolution[1] * resolutionUnitFactor;\n\n            const sensorWidthMm = imageWidth / focalPlaneXResolutionMm;\n            const sensorHeightMm = imageHeight / focalPlaneYResolutionMm;\n\n            const sensorDiagonal = Math.sqrt(sensorWidthMm ** 2 + sensorHeightMm ** 2);\n            const focalLength35mm = (focalLength[0] / focalLength[1]) * (DIAGONAL_35mm / sensorDiagonal);\n            return focalLength35mm;\n        } catch (error) {\n            // Ignore.\n        }\n    }\n    return undefined;\n}\n\nfunction getScaleFactorTo35mmEquivalent(focalLength, focalLengthIn35mmFilm) {\n    if (focalLength && focalLengthIn35mmFilm) {\n        try {\n            const value = focalLengthIn35mmFilm / (focalLength[0] / focalLength[1]);\n            return {\n                value,\n                description: value.toFixed(1),\n            };\n        } catch (error) {\n            // Ignore.\n        }\n    }\n    return undefined;\n}\n\nfunction getFieldOfView(focalLengthIn35mmFilm) {\n    const FULL_FRAME_SENSOR_WIDTH_MM = 36;\n\n    if (focalLengthIn35mmFilm) {\n        try {\n            const value = 2 * Math.atan(FULL_FRAME_SENSOR_WIDTH_MM / (2 * focalLengthIn35mmFilm)) * (180 / Math.PI);\n            return {\n                value,\n                description: value.toFixed(1) + ' deg',\n            };\n        } catch (error) {\n            // Ignore.\n        }\n    }\n    return undefined;\n}\n","/* This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/. */\n\n/**\n * Thrown when no Exif metadata was found for the given image.\n *\n * @param {string} message The error message.\n */\nfunction MetadataMissingError(message) {\n    this.name = 'MetadataMissingError';\n    this.message = message || 'No Exif data';\n    this.stack = (new Error()).stack;\n}\n\nMetadataMissingError.prototype = new Error;\n\nexport default {\n    MetadataMissingError,\n};\n","/**\n * ExifReader\n * http://github.com/mattiasw/exifreader\n * Copyright (C) 2011-2023  Mattias Wallander <mattias@wallander.eu>\n * This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/.\n */\n/* global Buffer, __non_webpack_require__ */\n\nimport {objectAssign, dataUriToBuffer} from './utils.js';\nimport DataViewWrapper from './dataview.js';\nimport Constants from './constants.js';\nimport {getStringValueFromArray} from './utils.js';\nimport {getCalculatedGpsValue} from './tag-names-utils.js';\nimport ImageHeader from './image-header.js';\nimport Tags from './tags.js';\nimport MpfTags from './mpf-tags.js';\nimport FileTags from './file-tags.js';\nimport JfifTags from './jfif-tags.js';\nimport IptcTags from './iptc-tags.js';\nimport XmpTags from './xmp-tags.js';\nimport PhotoshopTags from './photoshop-tags.js';\nimport IccTags from './icc-tags.js';\nimport CanonTags from './canon-tags.js';\nimport PentaxTags from './pentax-tags.js';\nimport PngFileTags from './png-file-tags.js';\nimport PngTextTags from './png-text-tags.js';\nimport PngTags from './png-tags.js';\nimport Vp8xTags from './vp8x-tags.js';\nimport GifFileTags from './gif-file-tags.js';\nimport Thumbnail from './thumbnail.js';\nimport Composite from './composite.js';\nimport exifErrors from './errors.js';\n\nexport default {\n    load,\n    loadView,\n    errors: exifErrors,\n};\n\nexport const errors = exifErrors;\n\nexport function load(data, options = {}) {\n    if (isFilePathOrURL(data)) {\n        options.async = true;\n        return loadFile(data, options).then((fileContents) => loadFromData(fileContents, options));\n    }\n    if (isBrowserFileObject(data)) {\n        options.async = true;\n        return loadFileObject(data).then((fileContents) => loadFromData(fileContents, options));\n    }\n    return loadFromData(data, options);\n}\n\nfunction isFilePathOrURL(data) {\n    return typeof data === 'string';\n}\n\nfunction loadFile(filename, options) {\n    if (/^\\w+:\\/\\//.test(filename)) {\n        if (typeof fetch !== 'undefined') {\n            return fetchRemoteFile(filename, options);\n        }\n\n        return nodeGetRemoteFile(filename, options);\n    }\n\n    if (isDataUri(filename)) {\n        return Promise.resolve(dataUriToBuffer(filename));\n    }\n\n    return loadLocalFile(filename, options);\n}\n\nfunction fetchRemoteFile(url, {length} = {}) {\n    const options = {method: 'GET'};\n    if (Number.isInteger(length) && length >= 0) {\n        options.headers = {\n            range: `bytes=0-${length - 1}`,\n        };\n    }\n    return fetch(url, options).then((response) => response.arrayBuffer());\n}\n\nfunction nodeGetRemoteFile(url, {length} = {}) {\n    return new Promise((resolve, reject) => {\n        const options = {};\n        if (Number.isInteger(length) && length >= 0) {\n            options.headers = {\n                range: `bytes=0-${length - 1}`,\n            };\n        }\n\n        const get = requireNodeGet(url);\n        get(url, options, (response) => {\n            if ((response.statusCode >= 200) && (response.statusCode <= 299)) {\n                const data = [];\n                response.on('data', (chunk) => data.push(Buffer.from(chunk)));\n                response.on('error', (error) => reject(error));\n                response.on('end', () => resolve(Buffer.concat(data)));\n            } else {\n                reject(`Could not fetch file: ${response.statusCode} ${response.statusMessage}`);\n                response.resume();\n            }\n        }).on('error', (error) => reject(error));\n    });\n}\n\nfunction requireNodeGet(url) {\n    if (/^https:\\/\\//.test(url)) {\n        return __non_webpack_require__('https').get;\n    }\n    return __non_webpack_require__('http').get;\n}\n\nfunction isDataUri(filename) {\n    return /^data:[^;,]*(;base64)?,/.test(filename);\n}\n\nfunction loadLocalFile(filename, {length} = {}) {\n    return new Promise((resolve, reject) => {\n        const fs = requireNodeFs();\n        fs.open(filename, (error, fd) => {\n            if (error) {\n                reject(error);\n            } else {\n                fs.stat(filename, (error, stat) => {\n                    if (error) {\n                        reject(error);\n                    } else {\n                        const size = Math.min(stat.size, length !== undefined ? length : stat.size);\n                        const buffer = Buffer.alloc(size);\n                        const options = {\n                            buffer,\n                            length: size\n                        };\n                        fs.read(fd, options, (error) => {\n                            if (error) {\n                                reject(error);\n                            } else {\n                                fs.close(fd, (error) => {\n                                    if (error) {\n                                        console.warn(`Could not close file ${filename}:`, error); // eslint-disable-line no-console\n                                    }\n                                    resolve(buffer);\n                                });\n                            }\n                        });\n                    }\n                });\n            }\n        });\n    });\n}\n\nfunction requireNodeFs() {\n    try {\n        return __non_webpack_require__('fs');\n    } catch (error) {\n        return undefined;\n    }\n}\n\nfunction isBrowserFileObject(data) {\n    return (typeof File !== 'undefined') && (data instanceof File);\n}\n\nfunction loadFileObject(file) {\n    return new Promise((resolve, reject) => {\n        const reader = new FileReader();\n        reader.onload = (readerEvent) => resolve(readerEvent.target.result);\n        reader.onerror = () => reject(reader.error);\n        reader.readAsArrayBuffer(file);\n    });\n}\n\nfunction loadFromData(data, options) {\n    if (isNodeBuffer(data)) {\n        // File data read in Node can share the underlying buffer with other\n        // data. Therefore it's safest to get a new one to avoid weird bugs.\n        data = (new Uint8Array(data)).buffer;\n    }\n    return loadView(getDataView(data), options);\n}\n\nfunction isNodeBuffer(data) {\n    try {\n        return Buffer.isBuffer(data);\n    } catch (error) {\n        return false;\n    }\n}\n\nfunction getDataView(data) {\n    try {\n        return new DataView(data);\n    } catch (error) {\n        return new DataViewWrapper(data);\n    }\n}\n\nexport function loadView(\n    dataView,\n    {\n        expanded = false,\n        async = false,\n        includeUnknown = false,\n        domParser = undefined,\n    } = {\n        expanded: false,\n        async: false,\n        includeUnknown: false,\n        domParser: undefined,\n    }\n) {\n    let foundMetaData = false;\n    let tags = {};\n    const tagsPromises = [];\n\n    const {\n        fileType,\n        fileDataOffset,\n        jfifDataOffset,\n        tiffHeaderOffset,\n        iptcDataOffset,\n        xmpChunks,\n        iccChunks,\n        mpfDataOffset,\n        pngHeaderOffset,\n        pngTextChunks,\n        pngChunkOffsets,\n        vp8xChunkOffset,\n        gifHeaderOffset\n    } = ImageHeader.parseAppMarkers(dataView, async);\n\n    if (Constants.USE_JPEG && Constants.USE_FILE && hasFileData(fileDataOffset)) {\n        foundMetaData = true;\n        const readTags = FileTags.read(dataView, fileDataOffset);\n        if (expanded) {\n            tags.file = readTags;\n        } else {\n            tags = objectAssign({}, tags, readTags);\n        }\n    }\n\n    if (Constants.USE_JPEG && Constants.USE_JFIF && hasJfifData(jfifDataOffset)) {\n        foundMetaData = true;\n        const readTags = JfifTags.read(dataView, jfifDataOffset);\n        if (expanded) {\n            tags.jfif = readTags;\n        } else {\n            tags = objectAssign({}, tags, readTags);\n        }\n    }\n\n    if (Constants.USE_EXIF && hasExifData(tiffHeaderOffset)) {\n        foundMetaData = true;\n        const {tags: readTags, byteOrder} = Tags.read(dataView, tiffHeaderOffset, includeUnknown);\n        if (readTags.Thumbnail) {\n            tags.Thumbnail = readTags.Thumbnail;\n            delete readTags.Thumbnail;\n        }\n\n        if (expanded) {\n            tags.exif = readTags;\n            addGpsGroup(tags);\n        } else {\n            tags = objectAssign({}, tags, readTags);\n        }\n\n        if (Constants.USE_TIFF && Constants.USE_IPTC && readTags['IPTC-NAA'] && !hasIptcData(iptcDataOffset)) {\n            const readIptcTags = IptcTags.read(readTags['IPTC-NAA'].value, 0, includeUnknown);\n            if (expanded) {\n                tags.iptc = readIptcTags;\n            } else {\n                tags = objectAssign({}, tags, readIptcTags);\n            }\n        }\n\n        if (Constants.USE_TIFF && Constants.USE_XMP && readTags['ApplicationNotes'] && !hasXmpData(xmpChunks)) {\n            const readXmpTags = XmpTags.read(getStringValueFromArray(readTags['ApplicationNotes'].value), undefined, domParser);\n            if (expanded) {\n                tags.xmp = readXmpTags;\n            } else {\n                delete readXmpTags._raw;\n                tags = objectAssign({}, tags, readXmpTags);\n            }\n        }\n\n        if (Constants.USE_PHOTOSHOP && readTags['ImageSourceData'] && readTags['PhotoshopSettings']) {\n            const readPhotoshopTags = PhotoshopTags.read(readTags['PhotoshopSettings'].value, includeUnknown);\n            if (expanded) {\n                tags.photoshop = readPhotoshopTags;\n            } else {\n                tags = objectAssign({}, tags, readPhotoshopTags);\n            }\n        }\n\n        if (Constants.USE_TIFF && Constants.USE_ICC && readTags['ICC_Profile'] && !hasIccData(iccChunks)) {\n            const readIccTags = IccTags.read(\n                readTags['ICC_Profile'].value,\n                [{\n                    offset: 0,\n                    length: readTags['ICC_Profile'].value.length,\n                    chunkNumber: 1,\n                    chunksTotal: 1\n                }]\n            );\n            if (expanded) {\n                tags.icc = readIccTags;\n            } else {\n                tags = objectAssign({}, tags, readIccTags);\n            }\n        }\n\n        if (Constants.USE_MAKER_NOTES && readTags['MakerNote']) {\n            if (hasCanonData(readTags)) {\n                const readCanonTags = CanonTags.read(dataView, tiffHeaderOffset, readTags['MakerNote'].__offset, byteOrder, includeUnknown);\n                if (expanded) {\n                    tags.makerNotes = readCanonTags;\n                } else {\n                    tags = objectAssign({}, tags, readCanonTags);\n                }\n            } else if (hasPentaxType1Data(readTags)) {\n                const readPentaxTags = PentaxTags.read(dataView, tiffHeaderOffset, readTags['MakerNote'].__offset, includeUnknown);\n                if (expanded) {\n                    tags.makerNotes = readPentaxTags;\n                } else {\n                    tags = objectAssign({}, tags, readPentaxTags);\n                }\n            }\n        }\n\n        if (readTags['MakerNote']) {\n            delete readTags['MakerNote'].__offset;\n        }\n    }\n\n    if (Constants.USE_JPEG && Constants.USE_IPTC && hasIptcData(iptcDataOffset)) {\n        foundMetaData = true;\n        const readTags = IptcTags.read(dataView, iptcDataOffset, includeUnknown);\n        if (expanded) {\n            tags.iptc = readTags;\n        } else {\n            tags = objectAssign({}, tags, readTags);\n        }\n    }\n\n    if (Constants.USE_XMP && hasXmpData(xmpChunks)) {\n        foundMetaData = true;\n        const readTags = XmpTags.read(dataView, xmpChunks, domParser);\n        if (expanded) {\n            tags.xmp = readTags;\n        } else {\n            delete readTags._raw;\n            tags = objectAssign({}, tags, readTags);\n        }\n    }\n\n    if ((Constants.USE_JPEG || Constants.USE_WEBP) && Constants.USE_ICC && hasIccData(iccChunks)) {\n        foundMetaData = true;\n        const readTags = IccTags.read(dataView, iccChunks, async);\n        if (readTags instanceof Promise) {\n            tagsPromises.push(readTags.then(addIccTags));\n        } else {\n            addIccTags(readTags);\n        }\n    }\n\n    if (Constants.USE_MPF && hasMpfData(mpfDataOffset)) {\n        foundMetaData = true;\n        const readMpfTags = MpfTags.read(dataView, mpfDataOffset, includeUnknown);\n        if (expanded) {\n            tags.mpf = readMpfTags;\n        } else {\n            tags = objectAssign({}, tags, readMpfTags);\n        }\n    }\n\n    if (Constants.USE_PNG && Constants.USE_PNG_FILE && hasPngFileData(pngHeaderOffset)) {\n        foundMetaData = true;\n        const readTags = PngFileTags.read(dataView, pngHeaderOffset);\n        if (expanded) {\n            tags.png = !tags.png ? readTags : objectAssign({}, tags.png, readTags);\n            tags.pngFile = readTags;\n        } else {\n            tags = objectAssign({}, tags, readTags);\n        }\n    }\n\n    if (Constants.USE_PNG && hasPngTextData(pngTextChunks)) {\n        foundMetaData = true;\n        const {readTags, readTagsPromise} = PngTextTags.read(dataView, pngTextChunks, async, includeUnknown);\n        addPngTextTags(readTags);\n        if (readTagsPromise) {\n            tagsPromises.push(readTagsPromise.then((tagList) => tagList.forEach(addPngTextTags)));\n        }\n    }\n\n    if (Constants.USE_PNG && hasPngData(pngChunkOffsets)) {\n        foundMetaData = true;\n        const readTags = PngTags.read(dataView, pngChunkOffsets);\n        if (expanded) {\n            tags.png = !tags.png ? readTags : objectAssign({}, tags.png, readTags);\n        } else {\n            tags = objectAssign({}, tags, readTags);\n        }\n    }\n\n    if (Constants.USE_WEBP && hasVp8xData(vp8xChunkOffset)) {\n        foundMetaData = true;\n        const readTags = Vp8xTags.read(dataView, vp8xChunkOffset);\n        if (expanded) {\n            tags.riff = !tags.riff ? readTags : objectAssign({}, tags.riff, readTags);\n        } else {\n            tags = objectAssign({}, tags, readTags);\n        }\n    }\n\n    if (Constants.USE_GIF && hasGifFileData(gifHeaderOffset)) {\n        foundMetaData = true;\n        const readTags = GifFileTags.read(dataView, gifHeaderOffset);\n        if (expanded) {\n            tags.gif = !tags.gif ? readTags : objectAssign({}, tags.gif, readTags);\n        } else {\n            tags = objectAssign({}, tags, readTags);\n        }\n    }\n\n    const composite = Composite.get(tags, expanded);\n    if (composite) {\n        if (expanded) {\n            tags.composite = composite;\n        } else {\n            tags = objectAssign({}, tags, composite);\n        }\n    }\n\n    const thumbnail = (Constants.USE_JPEG || Constants.USE_WEBP)\n        && Constants.USE_EXIF\n        && Constants.USE_THUMBNAIL\n        && Thumbnail.get(dataView, tags.Thumbnail, tiffHeaderOffset);\n    if (thumbnail) {\n        foundMetaData = true;\n        tags.Thumbnail = thumbnail;\n    } else {\n        delete tags.Thumbnail;\n    }\n\n    if (fileType) {\n        if (expanded) {\n            if (!tags.file) {\n                tags.file = {};\n            }\n            tags.file.FileType = fileType;\n        } else {\n            tags.FileType = fileType;\n        }\n        foundMetaData = true;\n    }\n\n    if (!foundMetaData) {\n        throw new exifErrors.MetadataMissingError();\n    }\n\n    if (async) {\n        return Promise.all(tagsPromises).then(() => tags);\n    }\n    return tags;\n\n    function addIccTags(readTags) {\n        if (expanded) {\n            tags.icc = readTags;\n        } else {\n            tags = objectAssign({}, tags, readTags);\n        }\n    }\n\n    function addPngTextTags(readTags) {\n        if (expanded) {\n            for (const group of ['exif', 'iptc']) {\n                const groupKey = `__${group}`;\n                if (readTags[groupKey]) {\n                    tags[group] = !tags[group] ? readTags[groupKey] : objectAssign({}, tags.exif, readTags[groupKey]);\n                    delete readTags[groupKey];\n                }\n            }\n            tags.png = !tags.png ? readTags : objectAssign({}, tags.png, readTags);\n            tags.pngText = !tags.pngText ? readTags : objectAssign({}, tags.png, readTags);\n        } else {\n            tags = objectAssign(\n                {},\n                tags,\n                readTags.__exif ? readTags.__exif : {},\n                readTags.__iptc ? readTags.__iptc : {},\n                readTags\n            );\n            delete tags.__exif;\n            delete tags.__iptc;\n        }\n    }\n}\n\nfunction hasFileData(fileDataOffset) {\n    return fileDataOffset !== undefined;\n}\n\nfunction hasJfifData(jfifDataOffset) {\n    return jfifDataOffset !== undefined;\n}\n\nfunction hasExifData(tiffHeaderOffset) {\n    return tiffHeaderOffset !== undefined;\n}\n\nfunction addGpsGroup(tags) {\n    if (tags.exif) {\n        if (tags.exif.GPSLatitude && tags.exif.GPSLatitudeRef) {\n            try {\n                tags.gps = tags.gps || {};\n                tags.gps.Latitude = getCalculatedGpsValue(tags.exif.GPSLatitude.value);\n                if (tags.exif.GPSLatitudeRef.value.join('') === 'S') {\n                    tags.gps.Latitude = -tags.gps.Latitude;\n                }\n            } catch (error) {\n                // Ignore.\n            }\n        }\n\n        if (tags.exif.GPSLongitude && tags.exif.GPSLongitudeRef) {\n            try {\n                tags.gps = tags.gps || {};\n                tags.gps.Longitude = getCalculatedGpsValue(tags.exif.GPSLongitude.value);\n                if (tags.exif.GPSLongitudeRef.value.join('') === 'W') {\n                    tags.gps.Longitude = -tags.gps.Longitude;\n                }\n            } catch (error) {\n                // Ignore.\n            }\n        }\n\n        if (tags.exif.GPSAltitude && tags.exif.GPSAltitudeRef) {\n            try {\n                tags.gps = tags.gps || {};\n                tags.gps.Altitude = tags.exif.GPSAltitude.value[0] / tags.exif.GPSAltitude.value[1];\n                if (tags.exif.GPSAltitudeRef.value === 1) {\n                    tags.gps.Altitude = -tags.gps.Altitude;\n                }\n            } catch (error) {\n                // Ignore.\n            }\n        }\n    }\n}\n\nfunction hasIptcData(iptcDataOffset) {\n    return iptcDataOffset !== undefined;\n}\n\nfunction hasXmpData(xmpChunks) {\n    return Array.isArray(xmpChunks) && xmpChunks.length > 0;\n}\n\nfunction hasIccData(iccDataOffsets) {\n    return Array.isArray(iccDataOffsets) && iccDataOffsets.length > 0;\n}\n\nfunction hasCanonData(tags) {\n    return tags['Make'] && tags['Make'].value && Array.isArray(tags['Make'].value) && tags['Make'].value[0] === 'Canon'\n        && tags['MakerNote'] && tags['MakerNote'].__offset;\n}\n\nfunction hasPentaxType1Data(tags) {\n    const PENTAX_ID_STRING = 'PENTAX ';\n    return tags['MakerNote'].value.length > PENTAX_ID_STRING.length\n        && getStringValueFromArray(tags['MakerNote'].value.slice(0, PENTAX_ID_STRING.length)) === PENTAX_ID_STRING\n        && tags['MakerNote'].__offset;\n}\n\nfunction hasMpfData(mpfDataOffset) {\n    return mpfDataOffset !== undefined;\n}\n\nfunction hasPngFileData(pngFileDataOffset) {\n    return pngFileDataOffset !== undefined;\n}\n\nfunction hasPngTextData(pngTextChunks) {\n    return pngTextChunks !== undefined;\n}\n\nfunction hasPngData(pngChunkOffsets) {\n    return pngChunkOffsets !== undefined;\n}\n\nfunction hasVp8xData(vp8xChunkOffset) {\n    return vp8xChunkOffset !== undefined;\n}\n\nfunction hasGifFileData(gifHeaderOffset) {\n    return gifHeaderOffset !== undefined;\n}\n","/**\n * Convert a number to a fixed decimal string.\n * @param {number} number Number to convert.\n * @param {number} decimals Number of decimal places to keep.\n * @returns {number} Number with fixed decimal places.\n */\nexport const toFixed = (number, decimals) => {\n  // Handle non-numeric inputs\n  if (typeof number !== 'number') {\n    return NaN;\n  }\n\n  // Handle special cases\n  if (!Number.isFinite(number)) {\n    // Returns NaN or Infinity as-is\n    return number;\n  }\n\n  // Use proper mathematical rounding instead of JavaScript’s native `toFixed`\n  const factor = 10 ** decimals;\n\n  return Math.round(number * factor) / factor;\n};\n","import ExifReader from 'exifreader';\n\nimport { toFixed } from '$lib/services/utils/number';\n\n/**\n * @import { Asset, AssetKind, GeoCoordinates } from '$lib/types/private';\n */\n\n/**\n * Regular expression to match the EXIF date/time format like `2023:10:01 12:34:56`.\n */\nconst EXIF_DATETIME_PATTERN =\n  /^(?<year>\\d{4}):(?<month>\\d{2}):(?<date>\\d{2}) (?<hour>\\d{2}):(?<minute>\\d{2}):(?<second>\\d{2})$/;\n\n/**\n * Extract the timestamp and coordinates (latitude/longitude) from EXIF data of an image asset.\n * @param {Asset} asset Asset object.\n * @param {AssetKind} kind Media type: `image`, `video` or `audio`.\n * @returns {Promise<{ createdDate: Date | undefined, coordinates: GeoCoordinates | undefined }>}\n * Date/Time and GPS Coordinates. If the asset is not an image or does not have EXIF data, returns\n * `undefined`.\n * @see https://github.com/mattiasw/ExifReader\n * @todo Extract more EXIF metadata, such as camera model, exposure time, etc.\n */\nexport const extractExifData = async (asset, kind) => {\n  const isImage = kind === 'image';\n\n  if (!isImage || !asset.file) {\n    return { createdDate: undefined, coordinates: undefined };\n  }\n\n  const {\n    exif: { DateTimeOriginal, DateTime } = { DateTimeOriginal: undefined, DateTime: undefined },\n    gps: { Latitude, Longitude } = { Latitude: undefined, Longitude: undefined },\n  } = (await ExifReader.load(asset.file, { expanded: true }).catch(() => {})) ?? {};\n\n  const dateTimeStr = DateTimeOriginal?.description ?? DateTime?.description;\n  const dateTimeMatch = dateTimeStr?.match(EXIF_DATETIME_PATTERN);\n  let createdDate = undefined;\n  let coordinates = undefined;\n\n  if (dateTimeMatch?.groups) {\n    const { year, month, date, hour, minute, second } = dateTimeMatch.groups;\n    const dateTime = new Date(`${year}-${month}-${date}T${hour}:${minute}:${second}Z`);\n\n    if (!Number.isNaN(dateTime.getTime())) {\n      createdDate = dateTime;\n    }\n  }\n\n  if (\n    typeof Latitude === 'number' &&\n    typeof Longitude === 'number' &&\n    Number.isFinite(Latitude) &&\n    Number.isFinite(Longitude)\n  ) {\n    coordinates = {\n      latitude: toFixed(Latitude, 7),\n      longitude: toFixed(Longitude, 7),\n    };\n  }\n\n  return { createdDate, coordinates };\n};\n","import { extractExifData } from '$lib/services/utils/media/image/exif';\n\n/**\n * @import { Asset, AssetKind, GeoCoordinates, MediaDimensions } from '$lib/types/private';\n */\n\n/**\n * Get the dimensions of an image asset.\n * @param {string} src Source URL of the image.\n * @returns {Promise<{ dimensions: MediaDimensions }>} Dimensions (width/height) and duration.\n */\nexport const getImageSourceInfo = (src) => {\n  const element = new Image();\n\n  return new Promise((resolve) => {\n    // eslint-disable-next-line jsdoc/require-jsdoc\n    const listener = () => {\n      resolve({\n        dimensions: { width: element.naturalWidth, height: element.naturalHeight },\n      });\n    };\n\n    element.addEventListener('load', listener, { once: true });\n    element.src = src;\n  });\n};\n\n/**\n * Get the dimensions and duration of a video or audio asset.\n * @param {string} src Source URL of the media.\n * @param {AssetKind} kind Media type: `video` or `audio`.\n * @returns {Promise<{ dimensions?: MediaDimensions, duration: number }>} Dimensions and duration of\n * the media.\n */\nexport const getMediaSourceInfo = async (src, kind) => {\n  const element = /** @type {HTMLMediaElement} */ (document.createElement(kind));\n\n  return new Promise((resolve) => {\n    // eslint-disable-next-line jsdoc/require-jsdoc\n    const listener = () => {\n      const { duration } = element;\n\n      if (kind === 'audio') {\n        resolve({ duration });\n      }\n\n      const { videoWidth, videoHeight } = /** @type {HTMLVideoElement} */ (element);\n\n      resolve({\n        dimensions: { width: videoWidth, height: videoHeight },\n        duration,\n      });\n    };\n\n    element.addEventListener('loadedmetadata', listener, { once: true });\n    element.src = src;\n  });\n};\n\n/**\n * Get the dimensions and duration of an image, video or audio asset.\n * @param {string} src Source URL.\n * @param {AssetKind} kind Media type: `image`, `video` or `audio`.\n * @returns {Promise<{ dimensions?: MediaDimensions, duration?: number }>} Dimensions (width/height)\n * and duration.\n */\nexport const getSourceInfo = async (src, kind) => {\n  if (kind === 'image') {\n    return getImageSourceInfo(src);\n  }\n\n  return getMediaSourceInfo(src, kind);\n};\n\n/**\n * Get the metadata of an image, video or audio asset.\n * @param {Asset} asset Asset object.\n * @param {string} src Source URL.\n * @param {AssetKind} kind Media type: `image`, `video` or `audio`.\n * @returns {Promise<{ dimensions: MediaDimensions | undefined, duration: number | undefined,\n * createdDate: Date | undefined, coordinates: GeoCoordinates | undefined }>} Metadata object\n * containing dimensions, duration, created date and coordinates.\n */\nexport const getMediaMetadata = async (asset, src, kind) => {\n  const { dimensions, duration } = await getSourceInfo(src, kind);\n  const { createdDate, coordinates } = await extractExifData(asset, kind);\n\n  return { dimensions, duration, createdDate, coordinates };\n};\n","import { dependencies } from '$lib/services/app';\n\n/**\n * Get the UNPKG CDN URL for the given dependency.\n * @param {string} name Dependency name.\n * @returns {string} URL.\n */\nexport const getUnpkgURL = (name) => {\n  const url = `https://unpkg.com/${name}`;\n  const version = /** @type {Record<string, string>} */ (dependencies)[name]?.replace(/^\\D/, '');\n\n  return version ? `${url}@${version}` : url;\n};\n\n/**\n * Load an ES module of a third-party library from UNPKG.\n * @param {string} library Library name.\n * @param {string} path Absolute path of the module file to be loaded without the leading slash.\n * @returns {Promise<any>} Module.\n */\nexport const loadModule = async (library, path) =>\n  import(/* @vite-ignore */ `${getUnpkgURL(library)}/${path}`);\n","/**\n * @import {\n * RasterImageConversionFormat,\n * RasterImageFormat,\n * VectorImageFormat,\n * } from '$lib/types/public';\n */\n\n/** @type {RasterImageFormat[]} */\nexport const RASTER_IMAGE_FORMATS = ['avif', 'gif', 'jpeg', 'png', 'webp'];\nexport const RASTER_IMAGE_TYPES = RASTER_IMAGE_FORMATS.map((format) => `image/${format}`);\nexport const RASTER_IMAGE_EXTENSION_REGEX = /\\b(?:avif|gif|jpe?g|png|webp)$/i;\n\n/** @type {VectorImageFormat[]} */\nexport const VECTOR_IMAGE_FORMATS = ['svg'];\nexport const VECTOR_IMAGE_TYPES = ['image/svg+xml'];\nexport const VECTOR_IMAGE_EXTENSION_REGEX = /\\b(?:svg)$/i;\n\nexport const SUPPORTED_IMAGE_FORMATS = [...RASTER_IMAGE_FORMATS, ...VECTOR_IMAGE_FORMATS];\nexport const SUPPORTED_IMAGE_TYPES = [...RASTER_IMAGE_TYPES, ...VECTOR_IMAGE_TYPES];\n\n/** @type {RasterImageConversionFormat[]} */\nexport const RASTER_IMAGE_CONVERSION_FORMATS = ['webp'];\n","import { loadModule } from '$lib/services/app/dependencies';\nimport { RASTER_IMAGE_CONVERSION_FORMATS } from '$lib/services/utils/media/image';\n\n/** @type {Record<string, boolean>} */\nconst encodingSupportMap = {};\n\n/**\n * Check if the browser supports `canvas.convertToBlob()` encoding for the given format. Safari\n * doesn’t support native WebP encoding, so this returns `false` if the `format` is `webp`.\n * @param {string} format Format, like `webp`.\n * @returns {Promise<boolean>} Result.\n * @see https://bugs.webkit.org/show_bug.cgi?id=183257\n */\nexport const checkIfEncodingIsSupported = async (format) => {\n  if (format in encodingSupportMap) {\n    return encodingSupportMap[format];\n  }\n\n  const type = `image/${format}`;\n  const canvas = new OffscreenCanvas(1, 1);\n  // Need this for Chrome for some reason\n  // eslint-disable-next-line no-unused-vars\n  const context = /** @type {OffscreenCanvasRenderingContext2D} */ (canvas.getContext('2d'));\n  const blob = await canvas.convertToBlob({ type });\n  const result = blob.type === type;\n\n  encodingSupportMap[format] = result;\n\n  return result;\n};\n\n/**\n * Export Canvas data as an image blob. If the browser doesn’t support native encoding for the given\n * format (e.g. WebP on Safari), use the jSquash library as fallback.\n * @param {OffscreenCanvas} canvas Canvas to be exported.\n * @param {object} [options] Options.\n * @param {string} [options.format] Format, like `webp`.\n * @param {number} [options.quality] Image quality between 0 and 100.\n * @returns {Promise<Blob>} Image blob.\n * @see https://github.com/jamsinclair/jSquash\n */\nexport const exportCanvasAsBlob = async (canvas, { format = 'webp', quality = 85 } = {}) => {\n  const type = `image/${format}`;\n\n  if (\n    !(await checkIfEncodingIsSupported(format)) &&\n    /** @type {string[]} */ (RASTER_IMAGE_CONVERSION_FORMATS).includes(format)\n  ) {\n    const context = /** @type {OffscreenCanvasRenderingContext2D} */ (canvas.getContext('2d'));\n    const imageData = context.getImageData(0, 0, canvas.width, canvas.height);\n\n    try {\n      /** @type {import('@jsquash/webp').encode} */\n      const encode = (await loadModule(`@jsquash/${format}`, 'encode.js?module')).default;\n      const buffer = await encode(imageData, { quality });\n\n      return new Blob([buffer], { type });\n    } catch {\n      //\n    }\n  }\n\n  return canvas.convertToBlob({ type, quality: quality / 100 });\n};\n","/**\n * @import { ImageFitOption, MediaDimensions } from '$lib/types/private';\n */\n\n/**\n * Calculate the size of resized canvas.\n * @param {MediaDimensions} source Source dimensions.\n * @param {{ width?: number, height?: number, fit?: ImageFitOption }} [target] Target dimensions and\n * fit option.\n * @returns {{ scale: number, width: number, height: number }} Scale and new width/height.\n */\nexport const calculateResize = (\n  { width: originalWidth, height: originalHeight },\n  {\n    width: targetWidth = originalWidth,\n    height: targetHeight = originalHeight,\n    fit = 'scale-down',\n  } = {},\n) => {\n  const original = { scale: 1, width: originalWidth, height: originalHeight };\n\n  if (originalWidth === targetHeight && originalHeight === targetHeight) {\n    return original;\n  }\n\n  const isLandscape = originalWidth > originalHeight;\n  const isSmaller = originalWidth < targetHeight || originalHeight < targetHeight;\n  let scale = 1;\n  let newWidth = 0;\n  let newHeight = 0;\n\n  if (fit === 'scale-down') {\n    if (isSmaller) {\n      return original;\n    }\n\n    fit = 'contain';\n  }\n\n  if (fit === 'contain') {\n    if (isLandscape) {\n      if (targetWidth > targetHeight) {\n        scale = targetWidth / originalWidth;\n        newWidth = targetWidth;\n      } else {\n        scale = targetHeight / originalWidth;\n        newWidth = targetHeight;\n      }\n\n      newHeight = originalHeight * scale;\n    } else {\n      if (targetWidth > targetHeight) {\n        scale = targetHeight / originalHeight;\n        newHeight = targetHeight;\n      } else {\n        scale = targetWidth / originalHeight;\n        newHeight = targetWidth;\n      }\n\n      newWidth = originalWidth * scale;\n    }\n  }\n\n  return { scale, width: newWidth, height: newHeight };\n};\n\n/**\n * Resize a Canvas based on the given dimension.\n * @param {HTMLCanvasElement | OffscreenCanvas} canvas Canvas to be resized.\n * @param {MediaDimensions} source Source dimensions.\n * @param {{ width?: number, height?: number, fit?: ImageFitOption }} [target] Target dimensions and\n * fit option.\n * @returns {{ scale: number, width: number, height: number }} Scale and new width/height.\n */\nexport const resizeCanvas = (canvas, source, target) => {\n  const { scale, width, height } = calculateResize(source, target);\n\n  canvas.width = width;\n  canvas.height = height;\n\n  return { scale, width, height };\n};\n","import { loadModule } from '$lib/services/app/dependencies';\nimport { exportCanvasAsBlob } from '$lib/services/utils/media/image/encode';\nimport { resizeCanvas } from '$lib/services/utils/media/image/resize';\n\n/**\n * @import { InternalImageTransformationOptions } from '$lib/types/private';\n */\n\n/**\n * Create an image source from a Blob URL. This function creates an `<img>` element, waits for it to\n * load, and returns the image element along with its natural dimensions.\n * @param {object} args Arguments.\n * @param {File | Blob} args.blob File or blob to be converted to an image source.\n * @returns {Promise<{ source: CanvasImageSource, naturalWidth: number, naturalHeight: number }>}\n * Image element and its natural dimensions.\n */\nexport const createImageSource = async ({ blob }) => {\n  const blobURL = URL.createObjectURL(blob);\n  const image = new Image();\n\n  return new Promise((resolve) => {\n    image.addEventListener(\n      'load',\n      () => {\n        resolve({\n          source: image,\n          naturalWidth: image.naturalWidth,\n          naturalHeight: image.naturalHeight,\n        });\n\n        URL.revokeObjectURL(blobURL);\n      },\n      { once: true },\n    );\n    image.src = blobURL;\n  });\n};\n\n/**\n * Create a video source from a Blob URL. This function creates a `<video>` element, waits for it to\n * be ready, and returns the video element along with its natural dimensions.\n * @param {object} args Arguments.\n * @param {File | Blob} args.blob File or blob to be converted to an video source.\n * @returns {Promise<{ source: CanvasImageSource, naturalWidth: number, naturalHeight: number }>}\n * Video element and its natural dimensions.\n */\nexport const createVideoSource = async ({ blob }) => {\n  const blobURL = URL.createObjectURL(blob);\n  const video = document.createElement('video');\n\n  return new Promise((resolve) => {\n    video.addEventListener(\n      'canplay',\n      () => {\n        video.pause();\n\n        resolve({\n          source: video,\n          naturalWidth: video.videoWidth,\n          naturalHeight: video.videoHeight,\n        });\n\n        URL.revokeObjectURL(blobURL);\n      },\n      { once: true },\n    );\n\n    video.muted = true;\n    video.autoplay = true;\n    video.playsInline = true;\n    video.src = blobURL;\n\n    // Add `<video>` to DOM or it won’t be rendered on canvas\n    video.style.opacity = '0';\n    video.style.pointerEvents = 'none';\n    document.body.appendChild(video);\n  });\n};\n\n/**\n * Get an image source from a Blob or File. If the Blob is a video, create a `<video>` element, and\n * return it. If it’s an image, create an `<img>` element and return it.\n * @param {File | Blob} blob File or blob to be converted to an image source.\n * @returns {Promise<{ source: CanvasImageSource, naturalWidth: number, naturalHeight: number }>}\n * Canvas image source and its natural dimensions.\n */\nexport const createSource = async (blob) => {\n  if (blob.type.startsWith('video/')) {\n    return createVideoSource({ blob });\n  }\n\n  return createImageSource({ blob });\n};\n\n/**\n * Convert the given image file to another format.\n * @param {File | Blob} blob Source file.\n * @param {InternalImageTransformationOptions} [options] Options.\n * @returns {Promise<Blob>} New image file.\n * @throws {Error} If the file is not an image.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob\n * @see https://stackoverflow.com/q/62909538\n */\nexport const transformImage = async (\n  blob,\n  { format = 'png', quality = 85, width = undefined, height = undefined, fit = 'scale-down' } = {},\n) => {\n  /** @type {CanvasImageSource} */\n  let source;\n  /** @type {number} */\n  let naturalWidth = 0;\n  /** @type {number} */\n  let naturalHeight = 0;\n\n  try {\n    source = await createImageBitmap(blob);\n    ({ width: naturalWidth, height: naturalHeight } = source);\n  } catch {\n    // Fall back to `<img>` or `<video>` when thrown; this includes SVG\n    ({ source, naturalWidth, naturalHeight } = await createSource(blob));\n  }\n\n  width ??= naturalWidth;\n  height ??= naturalHeight;\n\n  const canvas = new OffscreenCanvas(512, 512);\n  const context = /** @type {OffscreenCanvasRenderingContext2D} */ (canvas.getContext('2d'));\n\n  resizeCanvas(canvas, { width: naturalWidth, height: naturalHeight }, { fit, width, height });\n  context.drawImage(source, 0, 0, canvas.width, canvas.height);\n\n  // Clean up\n  if (source instanceof HTMLVideoElement) {\n    document.body.removeChild(source);\n  }\n\n  return exportCanvasAsBlob(canvas, { format, quality });\n};\n\n/**\n * Optimize a SVG image using the SVGO library.\n * @param {File | Blob} blob Source file.\n * @returns {Promise<Blob>} Optimized image file.\n * @see https://github.com/svg/svgo/issues/1050\n */\nexport const optimizeSVG = async (blob) => {\n  const string = await blob.text();\n\n  try {\n    /** @type {import('svgo')} */\n    const { optimize } = await loadModule('svgo', 'dist/svgo.browser.js');\n    const { data } = optimize(string);\n\n    return new Blob([data], { type: blob.type });\n  } catch {\n    //\n  }\n\n  return blob;\n};\n","import { getUnpkgURL } from '$lib/services/app/dependencies';\nimport { exportCanvasAsBlob } from '$lib/services/utils/media/image/encode';\nimport { resizeCanvas } from '$lib/services/utils/media/image/resize';\n\n/**\n * @import { InternalImageTransformationOptions } from '$lib/types/private';\n */\n\n/**\n * PDF.js distribution URL. We don’t bundle the library due to the large size and multiple files.\n * However, having it as a dependency in `package.json` allows us to include the latest version in\n * the UNPKG URL, making it faster to load the script without waiting for a redirect.\n * @see https://github.com/mozilla/pdf.js\n */\nconst PDFJS_DIST_URL = getUnpkgURL('pdfjs-dist');\nconst PDFJS_MODULE_URL = `${PDFJS_DIST_URL}/build/pdf.min.mjs`;\nconst PDFJS_WORKER_URL = `${PDFJS_DIST_URL}/build/pdf.worker.min.mjs`;\n\nconst PDFJS_GET_DOC_OPTIONS = {\n  isEvalSupported: false,\n  disableAutoFetch: true,\n  cMapUrl: `${PDFJS_DIST_URL}/cmaps/`,\n  iccUrl: `${PDFJS_DIST_URL}/iccs/`,\n  standardFontDataUrl: `${PDFJS_DIST_URL}/standard_fonts/`,\n  wasmUrl: `${PDFJS_DIST_URL}/wasm/`,\n};\n\n/**\n * Placeholder for the PDF.js module.\n * @type {import('pdfjs-dist')}\n */\nlet pdfjs;\n\n/**\n * Create a thumbnail image of a PDF document using PDF.js.\n * @param {File | Blob} blob Source file.\n * @param {InternalImageTransformationOptions} [options] Options.\n * @returns {Promise<Blob>} Thumbnail blob.\n * @throws {Error} When the rendering failed.\n * @see https://github.com/mozilla/pdf.js/blob/master/examples/webpack/main.mjs\n * @see https://github.com/mozilla/pdf.js/issues/10478\n */\nexport const renderPDF = async (\n  blob,\n  { format = 'png', quality = 85, width = undefined, height = undefined, fit = 'scale-down' } = {},\n) => {\n  // Lazily load the PDF.js library\n  if (!pdfjs) {\n    try {\n      pdfjs = await import(/* @vite-ignore */ PDFJS_MODULE_URL);\n      pdfjs.GlobalWorkerOptions.workerSrc = PDFJS_WORKER_URL;\n    } catch {\n      throw new Error('Failed to load PDF.js library');\n    }\n  }\n\n  const url = URL.createObjectURL(blob);\n  const canvas = new OffscreenCanvas(512, 512);\n  const context = /** @type {OffscreenCanvasRenderingContext2D} */ (canvas.getContext('2d'));\n\n  try {\n    const pdfDocument = await pdfjs.getDocument({ ...PDFJS_GET_DOC_OPTIONS, url }).promise;\n    const pdfPage = await pdfDocument.getPage(1);\n    const viewport = pdfPage.getViewport({ scale: 1 });\n\n    const { scale } = resizeCanvas(\n      canvas,\n      { width: viewport.width, height: viewport.height },\n      { width, height, fit },\n    );\n\n    await pdfPage.render({\n      // @ts-ignore `OffscreenCanvas` is supported\n      canvasContext: context,\n      viewport: scale === 1 ? viewport : pdfPage.getViewport({ scale }),\n    }).promise;\n\n    URL.revokeObjectURL(url);\n  } catch {\n    throw new Error('Failed to render PDF');\n  }\n\n  return exportCanvasAsBlob(canvas, { format, quality });\n};\n","import { getPathInfo } from '@sveltia/utils/file';\nimport { sleep } from '@sveltia/utils/misc';\nimport { IndexedDB } from '@sveltia/utils/storage';\nimport { escapeRegExp } from '@sveltia/utils/string';\nimport mime from 'mime';\nimport { get } from 'svelte/store';\n\nimport { getAssetByPath } from '$lib/services/assets';\nimport { getAssetFoldersByPath, globalAssetFolder } from '$lib/services/assets/folders';\nimport { backend } from '$lib/services/backends';\nimport { siteConfig } from '$lib/services/config';\nimport { getEntriesByAssetURL } from '$lib/services/contents/collection/entries';\nimport { createPathRegEx, encodeFilePath } from '$lib/services/utils/file';\nimport { getMediaMetadata } from '$lib/services/utils/media';\nimport { transformImage } from '$lib/services/utils/media/image/transform';\nimport { renderPDF } from '$lib/services/utils/media/pdf';\n\n/**\n * @import {\n * Asset,\n * AssetDetails,\n * Entry,\n * InternalImageTransformationOptions,\n * InternalSiteConfig,\n * } from '$lib/types/private';\n */\n\n/**\n * Set of asset paths that are currently being requested. This is used to prevent multiple requests\n * for the same asset when the same asset is used in multiple places.\n */\nconst requestedAssetPaths = new Set();\n\n/**\n * Get the blob for the given asset.\n * @param {Asset} asset Asset.\n * @param {number} [retryCount] Retry count.\n * @returns {Promise<Blob>} Blob.\n */\nexport const getAssetBlob = async (asset, retryCount = 0) => {\n  const { file, blobURL, name, path } = asset;\n\n  if (blobURL) {\n    return fetch(blobURL).then((r) => r.blob());\n  }\n\n  /** @type {Blob} */\n  let blob;\n\n  if (file) {\n    blob = file;\n  } else {\n    // If the blob is already being requested, wait for it to prevent multiple requests. If the\n    // `blobURL` is still not available after 25 retries, or 5 seconds, fetch the file directly.\n    if (requestedAssetPaths.has(path) && retryCount <= 25) {\n      await sleep(200);\n      return getAssetBlob(asset, retryCount + 1);\n    }\n\n    requestedAssetPaths.add(path);\n\n    const _blob = await get(backend)?.fetchBlob?.(asset);\n\n    if (!_blob) {\n      throw new Error('Failed to retrieve blob');\n    }\n\n    // Override the MIME type as it can be `application/octet-stream`\n    blob = new Blob([_blob], { type: mime.getType(name) ?? _blob.type });\n  }\n\n  // Cache the URL\n  asset.blobURL = URL.createObjectURL(blob);\n\n  requestedAssetPaths.delete(path);\n\n  return blob;\n};\n\n/**\n * Get the blob URL for the given asset.\n * @param {Asset} asset Asset.\n * @returns {Promise<string | undefined>} URL or `undefined` if the blob is not available.\n */\nexport const getAssetBlobURL = async (asset) => {\n  if (!asset.blobURL) {\n    await getAssetBlob(asset);\n  }\n\n  return asset.blobURL;\n};\n\n/** @type {IndexedDB | null | undefined} */\nlet thumbnailDB = undefined;\n\n/**\n * Get a thumbnail image for the given asset.\n * @param {Asset} asset Asset.\n * @param {object} [options] Options.\n * @param {boolean} [options.cacheOnly] Whether to search a thumbnail in the cache database only.\n * @returns {Promise<string | undefined>} Thumbnail blob URL.\n */\nexport const getAssetThumbnailURL = async (asset, { cacheOnly = false } = {}) => {\n  const isPDF = asset.name.endsWith('.pdf');\n\n  if (!(['image', 'video'].includes(asset.kind) || isPDF)) {\n    return undefined;\n  }\n\n  // Initialize the thumbnail DB\n  if (thumbnailDB === undefined) {\n    const { databaseName } = get(backend)?.repository ?? {};\n\n    thumbnailDB = databaseName ? new IndexedDB(databaseName, 'asset-thumbnails') : null;\n  }\n\n  /** @type {Blob | undefined} */\n  let thumbnailBlob = await thumbnailDB?.get(asset.sha);\n\n  if (!thumbnailBlob) {\n    if (cacheOnly) {\n      return undefined;\n    }\n\n    const blob = await getAssetBlob(asset);\n    /** @type {InternalImageTransformationOptions} */\n    const options = { format: 'webp', quality: 85, width: 512, height: 512, fit: 'contain' };\n\n    thumbnailBlob = isPDF ? await renderPDF(blob, options) : await transformImage(blob, options);\n\n    await thumbnailDB?.set(asset.sha, thumbnailBlob);\n  }\n\n  return URL.createObjectURL(thumbnailBlob);\n};\n\n/**\n * Get the public URL for the given asset.\n * @param {Asset} asset Asset file, such as an image.\n * @param {object} [options] Options.\n * @param {boolean} [options.pathOnly] Whether to use the absolute path starting with `/` instead of\n * the complete URL starting with `https`.\n * @param {boolean} [options.allowSpecial] Whether to allow returning a special, unlinkable path\n * starting with `@`, etc.\n * @param {Entry} [options.entry] Associated entry to be used to help locate an asset from a\n * relative path. Can be `undefined` when editing a new draft.\n * @returns {string | undefined} URL or `undefined` if it cannot be determined.\n */\nexport const getAssetPublicURL = (\n  asset,\n  { pathOnly = false, allowSpecial = false, entry = undefined } = {},\n) => {\n  const { publicPath, entryRelative, hasTemplateTags } =\n    asset.folder.collectionName === undefined\n      ? // Use the global asset folder\n        asset.folder\n      : // Search for the asset folder instead of using `asset.folder` directly, as an asset can be\n        // used for multiple collections, and the public path can be different for each\n        (getAssetFoldersByPath(asset.path).find(\n          ({ collectionName }) => collectionName !== undefined,\n        ) ?? get(globalAssetFolder));\n\n  // Cannot determine the URL if it’s relative to an entry, unless the asset is in the same folder\n  if (entryRelative) {\n    if (\n      pathOnly &&\n      !!entry &&\n      getPathInfo(asset.path).dirname === getPathInfo(Object.values(entry.locales)[0].path).dirname\n    ) {\n      return asset.name;\n    }\n\n    return undefined;\n  }\n\n  const { _baseURL: baseURL = '', output: { encode_file_path: encodingEnabled = false } = {} } =\n    /** @type {InternalSiteConfig} */ (get(siteConfig));\n\n  let path = hasTemplateTags\n    ? asset.path.replace(\n        // Deal with template tags like `/assets/images/{{slug}}`\n        createPathRegEx(asset.folder.internalPath ?? '', (segment) => {\n          const tag = segment.match(/{{(?<tag>.+?)}}/)?.groups?.tag;\n\n          return tag ? `(?<${tag}>[^/]+)` : escapeRegExp(segment);\n        }),\n        publicPath?.replaceAll(/{{(.+?)}}/g, '$<$1>') ?? '',\n      )\n    : asset.path.replace(\n        asset.folder.internalPath ?? '',\n        publicPath === '/' ? '' : (publicPath ?? ''),\n      );\n\n  if (encodingEnabled) {\n    path = encodeFilePath(path);\n  }\n\n  // Path starting with `@`, etc. cannot be linked\n  if (!path.startsWith('/') && !allowSpecial) {\n    return undefined;\n  }\n\n  if (pathOnly) {\n    return path;\n  }\n\n  return `${baseURL}${path}`;\n};\n\n/**\n * Get the blob or public URL from the given image/file entry field value.\n * @param {object} args Arguments.\n * @param {string} args.value Saved field value. It can be an absolute path, entry-relative path, or\n * a complete/external URL.\n * @param {Entry} [args.entry] Associated entry to be used to help locate an asset from a relative\n * path. Can be `undefined` when editing a new draft.\n * @param {string} args.collectionName Collection name.\n * @param {string} [args.fileName] Collection file name. File/singleton collection only.\n * @param {boolean} [args.thumbnail] Whether to use a thumbnail of the image.\n * @returns {Promise<string | undefined>} Blob URL or public URL that can be used in the app UI.\n */\nexport const getMediaFieldURL = async ({\n  value,\n  entry,\n  collectionName,\n  fileName,\n  thumbnail = false,\n}) => {\n  if (!value) {\n    return undefined;\n  }\n\n  if (/^(?:https?|data|blob):/.test(value)) {\n    return value;\n  }\n\n  const asset = getAssetByPath({ value, entry, collectionName, fileName });\n\n  if (!asset) {\n    return undefined;\n  }\n\n  return (\n    (thumbnail ? await getAssetThumbnailURL(asset) : await getAssetBlobURL(asset)) ??\n    getAssetPublicURL(asset)\n  );\n};\n\n/** @type {AssetDetails} */\nexport const defaultAssetDetails = {\n  publicURL: undefined,\n  repoBlobURL: undefined,\n  dimensions: undefined,\n  duration: undefined,\n  usedEntries: [],\n};\n\n/**\n * Get the given asset’s extra info.\n * @param {Asset} asset Asset.\n * @returns {Promise<AssetDetails>} Details.\n */\nexport const getAssetDetails = async (asset) => {\n  const { kind, path } = asset;\n  const { blobBaseURL } = get(backend)?.repository ?? {};\n  const blobURL = await getAssetBlobURL(asset);\n  const url = getAssetPublicURL(asset, { allowSpecial: true, pathOnly: true }) ?? blobURL;\n  let metaData = {};\n\n  if (['image', 'video', 'audio'].includes(kind) && blobURL) {\n    metaData = await getMediaMetadata(asset, blobURL, kind);\n  }\n\n  return {\n    ...metaData,\n    publicURL: getAssetPublicURL(asset),\n    repoBlobURL: blobBaseURL ? `${blobBaseURL}/${path}` : undefined,\n    usedEntries: url ? await getEntriesByAssetURL(url) : [],\n  };\n};\n","import { get, writable } from 'svelte/store';\n\nimport { getCollection } from '$lib/services/contents/collection';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import { Entry, EntryCollection, EntryFolderInfo } from '$lib/types/private';\n */\n\n/**\n * @type {Writable<boolean>}\n */\nexport const dataLoaded = writable(false);\n/**\n * @type {Writable<number | undefined>}\n */\nexport const dataLoadedProgress = writable();\n/**\n * @type {Writable<EntryFolderInfo[]>}\n */\nexport const allEntryFolders = writable([]);\n/**\n * @type {Writable<Entry[]>}\n */\nexport const allEntries = writable([]);\n/**\n * @type {Writable<Error[]>}\n */\nexport const entryParseErrors = writable([]);\n\n/**\n * Get collection entry folders that match the given path.\n * @param {string} path Entry path.\n * @returns {EntryFolderInfo[]} Entry folders. Sometimes it’s hard to find the right folder because\n * multiple collections can have the same folder or partially overlapping folder paths, but the\n * first one is most likely what you need.\n */\nexport const getEntryFoldersByPath = (path) =>\n  get(allEntryFolders)\n    .filter(({ collectionName, filePathMap }) => {\n      if (filePathMap) {\n        return Object.values(filePathMap).includes(path);\n      }\n\n      return /** @type {EntryCollection} */ (\n        getCollection(collectionName)\n      )?._file?.fullPathRegEx?.test(path);\n    })\n    .sort((a, b) => b.folderPath?.localeCompare(a.folderPath ?? '') ?? 0);\n","import { get } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { isEntryCollection } from '$lib/services/contents/collection';\nimport { getEntriesByCollection } from '$lib/services/contents/collection/entries';\n\n/**\n * @import { Entry, InternalCollection } from '$lib/types/private';\n * @import { Collection, CollectionIndexFile } from '$lib/types/public';\n */\n\n/**\n * Get the localized label for the index file. Use `try-catch` to handle cases where svelte-i18n is\n * not initialized during automated tests.\n * @returns {string} Localized label for the index file.\n */\nexport const getLocalizedLabel = () => {\n  try {\n    return get(_)('index_file');\n  } catch {\n    return 'Index File';\n  }\n};\n\n/**\n * Get the collection’s index file configuration. This function returns the index file configuration\n * if index file inclusion is enabled for the collection. If no specific configuration is provided,\n * it returns a default configuration with the `_index` file name, which is used for Hugo’s special\n * index file.\n * @param {InternalCollection | Collection} collection Collection.\n * @returns {CollectionIndexFile | undefined} Index file configuration if index file inclusion is\n * enabled for the collection, otherwise `undefined`.\n * @see https://gohugo.io/content-management/organization/#index-pages-_indexmd\n * @see https://github.com/decaporg/decap-cms/issues/7381\n * @see https://github.com/sveltia/sveltia-cms#including-hugos-special-index-file-in-a-folder-collection\n */\nexport const getIndexFile = (collection) => {\n  const { index_file: indexFile } = collection;\n\n  if (!isEntryCollection(collection) || !indexFile) {\n    return undefined;\n  }\n\n  const file = indexFile === true ? {} : indexFile;\n\n  return {\n    name: file.name ?? '_index',\n    label: file.label ?? getLocalizedLabel(),\n    icon: file.icon ?? 'home',\n    // The following properties are inherited from the collection file, collection or global config\n    fields: file.fields,\n    editor: file.editor,\n  };\n};\n\n/**\n * Check if index file inclusion (for Hugo) is enabled for the collection, and the given entry is\n * the special index file.\n * @param {InternalCollection} collection Collection.\n * @param {Entry} entry Entry.\n * @returns {boolean} Result.\n */\nexport const isCollectionIndexFile = (collection, entry) => {\n  const indexFile = getIndexFile(collection);\n\n  if (!indexFile) {\n    return false;\n  }\n\n  return entry.slug === indexFile.name;\n};\n\n/**\n * Check if index file creation is allowed in the collection.\n * @param {InternalCollection} collection Collection.\n * @returns {boolean} Result. It returns `false` if the index file already exists.\n */\nexport const canCreateIndexFile = (collection) => {\n  const indexFile = getIndexFile(collection);\n\n  if (!indexFile) {\n    return false;\n  }\n\n  return !getEntriesByCollection(collection.name).some(({ slug }) => slug === indexFile.name);\n};\n","import { getDateTimeParts } from '@sveltia/utils/datetime';\nimport moment from 'moment';\nimport { get } from 'svelte/store';\n\nimport { backend } from '$lib/services/backends';\nimport { fillTemplate } from '$lib/services/common/template';\nimport { siteConfig } from '$lib/services/config';\nimport { getEntryFoldersByPath } from '$lib/services/contents';\nimport { getCollection } from '$lib/services/contents/collection';\nimport { getIndexFile, isCollectionIndexFile } from '$lib/services/contents/collection/index-file';\n\n/**\n * @import {\n * Entry,\n * FlattenedEntryContent,\n * InternalCollection,\n * InternalCollectionFile,\n * InternalLocaleCode,\n * } from '$lib/types/private';\n * @import { DateTimeField, Field } from '$lib/types/public';\n */\n\n/**\n * Regular expression to match date and time template placeholders in entry file path templates.\n */\nconst DATE_TIME_TEMPLATE_REGEX = /{{(?:year|month|day|hour|minute|second)}}/;\n\n/**\n * Get a list of collections the given entry belongs to. One entry can theoretically appear in\n * multiple collections depending on the configuration, so that the result is an array.\n * @param {Entry} entry Entry.\n * @returns {InternalCollection[]} Collections.\n */\nexport const getAssociatedCollections = (entry) =>\n  getEntryFoldersByPath(Object.values(entry.locales)[0].path)\n    .map(({ collectionName }) => getCollection(collectionName))\n    .filter((collection) => !!collection);\n\n/**\n * Determine date and time parts from the given entry content.\n * @param {object} args Arguments.\n * @param {string} [args.dateFieldName] Date field name.\n * @param {Field[]} args.fields Fields.\n * @param {FlattenedEntryContent} args.content Entry content.\n * @returns {Record<string, string> | undefined} Date and time parts.\n */\nexport const extractDateTime = ({ dateFieldName, fields, content }) => {\n  const fieldConfig = dateFieldName\n    ? fields.find(({ widget, name }) => widget === 'datetime' && name === dateFieldName)\n    : fields.find(({ widget }) => widget === 'datetime');\n\n  const fieldValue = fieldConfig ? content[fieldConfig.name] : undefined;\n\n  if (!fieldConfig || !fieldValue) {\n    return undefined;\n  }\n\n  const { format, picker_utc: utc = false } = /** @type {DateTimeField} */ (fieldConfig);\n\n  return getDateTimeParts({\n    date: (utc ? moment.utc : moment)(fieldValue, format).toDate(),\n    timeZone: utc ? 'UTC' : undefined,\n  });\n};\n\n/**\n * Get the given entry file’s web-accessible URL on the live site.\n * @param {Entry} entry Entry.\n * @param {InternalLocaleCode} locale Locale.\n * @param {InternalCollection} collection Collection.\n * @param {InternalCollectionFile} [collectionFile] Collection file. File/singleton collection only.\n * @returns {string | undefined} URL on the live site.\n * @see https://decapcms.org/docs/deploy-preview-links/\n */\nexport const getEntryPreviewURL = (entry, locale, collection, collectionFile) => {\n  const { show_preview_links: showLinks = true, _baseURL: baseURL } = get(siteConfig) ?? {};\n  const { slug, path: entryFilePath, content } = entry.locales[locale] ?? {};\n\n  const {\n    preview_path: pathTemplate,\n    preview_path_date_field: dateFieldName,\n    fields: regularFields = [],\n  } = collectionFile ?? collection;\n\n  if (!showLinks || !baseURL || !entryFilePath || !content || !pathTemplate) {\n    return undefined;\n  }\n\n  const isIndexFile = isCollectionIndexFile(collection, entry);\n  const indexFile = isIndexFile ? getIndexFile(collection) : undefined;\n  const fields = indexFile?.fields ?? regularFields;\n  /** @type {Record<string, string> | undefined} */\n  let dateTimeParts;\n\n  if (DATE_TIME_TEMPLATE_REGEX.test(pathTemplate)) {\n    dateTimeParts = extractDateTime({ dateFieldName, fields, content });\n\n    // Cannot generate a URL if the date and time parts are not available\n    if (!dateTimeParts) {\n      return undefined;\n    }\n  }\n\n  try {\n    const path = fillTemplate(pathTemplate, {\n      type: 'preview_path',\n      collection,\n      content,\n      locale,\n      currentSlug: slug,\n      entryFilePath,\n      dateTimeParts,\n      isIndexFile,\n    });\n\n    return `${baseURL.replace(/\\/$/, '')}/${path.replace(/^\\//, '')}`;\n  } catch {\n    return undefined;\n  }\n};\n\n/**\n * Get the given entry file’s web-accessible URL on the repository.\n * @param {Entry} entry Entry.\n * @param {InternalLocaleCode} locale Locale.\n * @returns {string} URL on the repository.\n */\nexport const getEntryRepoBlobURL = (entry, locale) =>\n  `${get(backend)?.repository?.blobBaseURL}/${entry.locales[locale]?.path}?plain=1`;\n","import { get } from 'svelte/store';\n\nimport { siteConfig } from '$lib/services/config';\nimport { allEntries } from '$lib/services/contents';\nimport { getCollection, getValidCollections } from '$lib/services/contents/collection';\nimport { getAssociatedCollections } from '$lib/services/contents/entry';\n\n/**\n * @import {\n * Entry,\n * InternalCollection,\n * InternalCollectionFile,\n * InternalSiteConfig,\n * } from '$lib/types/private';\n * @import { CollectionDivider, CollectionFile } from '$lib/types/public';\n */\n\n/**\n * Check if the given collection file is valid. A valid file must have a string `file` property, not\n * be a `divider`, and have `fields` defined as an array.\n * @param {CollectionFile | CollectionDivider} file File definition or divider.\n * @returns {boolean} Whether the file is valid.\n */\nexport const isValidCollectionFile = (file) =>\n  !('divider' in file) && typeof file.file === 'string' && Array.isArray(file.fields);\n\n/**\n * Get a list of valid collection files from the given file definitions. This filters out dividers\n * and invalid files that do not have a string `file` property or do not have `fields` defined as an\n * array.\n * @param {(CollectionFile | CollectionDivider)[]} files File definitions. May include dividers.\n * @returns {CollectionFile[]} List of valid collection files.\n */\nexport const getValidCollectionFiles = (files) =>\n  /** @type {CollectionFile[]} */ (files.filter((file) => isValidCollectionFile(file)));\n\n/**\n * Get a file in a file/singleton collection by its name.\n * @param {InternalCollection | string} collection Collection or collection name.\n * @param {string} fileName File name.\n * @returns {InternalCollectionFile | undefined} Collection file.\n */\nexport const getCollectionFile = (collection, fileName) => {\n  /** @type {InternalCollection | undefined} */\n  const _collection = typeof collection === 'string' ? getCollection(collection) : collection;\n\n  if (!_collection || !('_fileMap' in _collection)) {\n    return undefined;\n  }\n\n  return _collection._fileMap[fileName];\n};\n\n/**\n * Get a human-readable label for a collection file. If the file has a `label` property, it is used;\n * otherwise, the `name` property is used.\n * @param {InternalCollectionFile} file Collection file.\n * @returns {string} File label.\n */\nexport const getCollectionFileLabel = (file) => file.label || file.name;\n\n/**\n * Get a file/singleton collection’s file configurations that matches the given entry. One file can\n * theoretically appear in multiple collections files depending on the configuration, so that the\n * result is an array.\n * @param {InternalCollection} collection Collection.\n * @param {Entry} entry Entry.\n * @returns {InternalCollectionFile[]} Collection files.\n */\nexport const getCollectionFilesByEntry = (collection, entry) => {\n  if (!('_fileMap' in collection)) {\n    // It’s an entry collection\n    return [];\n  }\n\n  return Object.values(collection._fileMap).filter(\n    ({ _file, _i18n }) => _file.fullPath === entry.locales[_i18n.defaultLocale]?.path,\n  );\n};\n\n/**\n * Get a file/singleton collection entry that matches the given collection name and file name.\n * @param {string} collectionName Collection name.\n * @param {string} fileName Collection file name.\n * @returns {Entry | undefined} File.\n * @see https://decapcms.org/docs/collection-file/\n */\nexport const getCollectionFileEntry = (collectionName, fileName) =>\n  get(allEntries).find((entry) =>\n    getAssociatedCollections(entry).some(\n      (collection) =>\n        collection.name === collectionName &&\n        getCollectionFilesByEntry(collection, entry).some((file) => file.name === fileName),\n    ),\n  );\n\n/**\n * Get the index of a collection file with the given name.\n * @param {string | undefined} collectionName Collection name.\n * @param {string | undefined} fileName Collection file name.\n * @returns {number} Index.\n */\nexport const getCollectionFileIndex = (collectionName, fileName) => {\n  if (collectionName && fileName) {\n    const { collections, singletons } = /** @type {InternalSiteConfig} */ (get(siteConfig));\n\n    if (collectionName === '_singletons') {\n      if (Array.isArray(singletons)) {\n        return getValidCollectionFiles(singletons).findIndex((file) => file.name === fileName);\n      }\n\n      return -1;\n    }\n\n    return (\n      getValidCollections({ collections })\n        .find(({ name }) => name === collectionName)\n        ?.files?.findIndex(({ name }) => name === fileName) ?? -1\n    );\n  }\n\n  return -1;\n};\n","/**\n * List of widgets that support a simple value: boolean, number or string.\n * @type {string[]}\n */\nexport const SIMPLE_VALUE_WIDGETS = [\n  'boolean',\n  'color',\n  'compute',\n  'datetime',\n  'map',\n  'markdown',\n  'number',\n  'string',\n  'text',\n  'uuid',\n];\n\n/**\n * List of widgets that support media files.\n * @type {string[]}\n */\nexport const MEDIA_WIDGETS = ['file', 'image'];\n\n/**\n * List of widgets that support the `multiple` option.\n * @type {string[]}\n */\nexport const MULTI_VALUE_WIDGETS = [...MEDIA_WIDGETS, 'relation', 'select'];\n\n/**\n * List of widgets that support the `min` and `max` options.\n * @type {string[]}\n */\nexport const MIN_MAX_VALUE_WIDGETS = [...MULTI_VALUE_WIDGETS, 'list', 'number'];\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nfunction t(t,...e){const n=new URL(\"https://lexical.dev/docs/error\"),r=new URLSearchParams;r.append(\"code\",t);for(const t of e)r.append(\"v\",t);throw n.search=r.toString(),Error(`Minified Lexical error #${t}; visit ${n.toString()} for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`)}const e=\"undefined\"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement,n=e&&\"documentMode\"in document?document.documentMode:null,r=e&&/Mac|iPod|iPhone|iPad/.test(navigator.platform),i=e&&/^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent),s=!(!e||!(\"InputEvent\"in window)||n)&&\"getTargetRanges\"in new window.InputEvent(\"input\"),o=e&&/Version\\/[\\d.]+.*Safari/.test(navigator.userAgent),l=e&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,c=e&&/Android/.test(navigator.userAgent),a=e&&/^(?=.*Chrome).*/i.test(navigator.userAgent),u=e&&c&&a,f=e&&/AppleWebKit\\/[\\d.]+/.test(navigator.userAgent)&&!a;function d(...t){const e=[];for(const n of t)if(n&&\"string\"==typeof n)for(const[t]of n.matchAll(/\\S+/g))e.push(t);return e}const h=1,g=3,_=9,p=11,y=0,m=1,x=2,C=0,S=1,v=2,T=1,k=2,N=4,b=8,w=16,E=32,M=64,O=128,A=1792|(112|(3|N|b)|O),D=1,P=2,F=3,L=4,I=5,z=6,K=o||l||f?\" \":\"​\",R=\"\\n\\n\",B=i?\" \":K,W=\"֑-߿יִ-﷽ﹰ-ﻼ\",J=\"A-Za-zÀ-ÖØ-öø-ʸ̀-֐ࠀ-῿‎Ⰰ-﬜︀-﹯﻽-￿\",$=new RegExp(\"^[^\"+J+\"]*[\"+W+\"]\"),j=new RegExp(\"^[^\"+W+\"]*[\"+J+\"]\"),U={bold:1,capitalize:1024,code:16,highlight:O,italic:2,lowercase:256,strikethrough:N,subscript:32,superscript:64,underline:b,uppercase:512},V={directionless:1,unmergeable:2},Y={center:P,end:z,justify:L,left:D,right:F,start:I},H={[P]:\"center\",[z]:\"end\",[L]:\"justify\",[D]:\"left\",[F]:\"right\",[I]:\"start\"},q={normal:0,segmented:2,token:1},G={[C]:\"normal\",[v]:\"segmented\",[S]:\"token\"},X=\"$\",Q=\"$config\";function Z(t,e,n,r,i,s){let o=t.getFirstChild();for(;null!==o;){const t=o.__key;o.__parent===e&&(xi(o)&&Z(o,t,n,r,i,s),n.has(t)||s.delete(t),i.push(t)),o=o.getNextSibling()}}const tt=100;let et=!1,nt=0;function rt(t){nt=t.timeStamp}function it(t,e,n){const r=\"BR\"===t.nodeName,i=e.__lexicalLineBreak;return i&&(t===i||r&&t.previousSibling===i)||r&&void 0!==Ts(t,n)}function st(t,e,n){const r=xo(co(n));let i=null,s=null;null!==r&&r.anchorNode===t&&(i=r.anchorOffset,s=r.focusOffset);const o=t.nodeValue;null!==o&&zs(e,o,i,s,!1)}function ot(t,e,n){if(_r(t)){const e=t.anchor.getNode();if(e.is(n)&&t.format!==e.getFormat())return!1}return fs(e)&&n.isAttached()}function lt(t,e,n,r){for(let i=t;i&&!zo(i);i=eo(i)){const t=Ts(i,e);if(void 0!==t){const e=Ss(t,n);if(e)return vi(e)||!To(i)?void 0:[i,e]}else if(i===r)return[r,Es(n)]}}function ct(t,e,n){et=!0;const r=performance.now()-nt>tt;try{_i(t,(()=>{const s=Pr()||function(t){return t.getEditorState().read((()=>{const t=Pr();return null!==t?t.clone():null}))}(t),o=new Map,l=t.getRootElement(),c=t._editorState,a=t._blockCursorElement;let u=!1,f=\"\";for(let n=0;n<e.length;n++){const d=e[n],h=d.type,g=d.target,_=lt(g,t,c,l);if(!_)continue;const[p,y]=_;if(\"characterData\"===h)r&&sr(y)&&fs(g)&&ot(s,g,y)&&st(g,y,t);else if(\"childList\"===h){u=!0;const e=d.addedNodes;for(let n=0;n<e.length;n++){const r=e[n],s=vs(r),o=r.parentNode;if(null!=o&&r!==a&&null===s&&!it(r,o,t)){if(i){const t=(To(r)?r.innerText:null)||r.nodeValue;t&&(f+=t)}o.removeChild(r)}}const n=d.removedNodes,r=n.length;if(r>0){let e=0;for(let i=0;i<r;i++){const r=n[i];(it(r,g,t)||a===r)&&(g.appendChild(r),e++)}r!==e&&o.set(p,y)}}}if(o.size>0)for(const[e,n]of o)n.reconcileObservedMutation(e,t);const d=n.takeRecords();if(d.length>0){for(let e=0;e<d.length;e++){const n=d[e],r=n.addedNodes,i=n.target;for(let e=0;e<r.length;e++){const n=r[e],s=n.parentNode;null==s||\"BR\"!==n.nodeName||it(n,i,t)||s.removeChild(n)}}n.takeRecords()}null!==s&&(u&&Ms(s),i&&Xs(t)&&s.insertRawText(f))}))}finally{et=!1}}function at(t){const e=t._observer;if(null!==e){ct(t,e.takeRecords(),e)}}function ut(t){!function(t){0===nt&&co(t).addEventListener(\"textInput\",rt,!0)}(t),t._observer=new MutationObserver(((e,n)=>{ct(t,e,n)}))}class ft{constructor(t,e){this.key=t,this.parse=e.parse.bind(e),this.unparse=(e.unparse||St).bind(e),this.isEqual=(e.isEqual||Object.is).bind(e),this.defaultValue=this.parse(void 0)}}function dt(t,e){return new ft(t,e)}function ht(t,e,n=\"latest\"){const r=(\"latest\"===n?t.getLatest():t).__state;return r?r.getValue(e):e.defaultValue}function gt(t,e,n){const r=ht(t,n,\"direct\"),i=ht(e,n,\"direct\");return n.isEqual(r,i)?null:[r,i]}function _t(t,e,n){let r;if(Zr(),\"function\"==typeof n){const i=t.getLatest(),s=ht(i,e);if(r=n(s),e.isEqual(s,r))return i}else r=n;const i=t.getWritable();return mt(i).updateFromKnown(e,r),i}function pt(t){const e=new Map,n=new Set;for(let r=\"function\"==typeof t?t:t.replace;r.prototype&&void 0!==r.prototype.getType;r=Object.getPrototypeOf(r)){const{ownNodeConfig:t}=Ro(r);if(t&&t.stateConfigs)for(const r of t.stateConfigs){let t;\"stateConfig\"in r?(t=r.stateConfig,r.flat&&n.add(t.key)):t=r,e.set(t.key,t)}}return{flatKeys:n,sharedConfigMap:e}}class yt{constructor(t,e,n=void 0,r=new Map,i=void 0){this.node=t,this.sharedNodeState=e,this.unknownState=n,this.knownState=r;const{sharedConfigMap:s}=this.sharedNodeState,o=void 0!==i?i:function(t,e,n){let r=n.size;if(e)for(const i in e){const e=t.get(i);e&&n.has(e)||r++}return r}(s,n,r);this.size=o}getValue(t){const e=this.knownState.get(t);if(void 0!==e)return e;this.sharedNodeState.sharedConfigMap.set(t.key,t);let n=t.defaultValue;if(this.unknownState&&t.key in this.unknownState){const e=this.unknownState[t.key];void 0!==e&&(n=t.parse(e)),this.updateFromKnown(t,n)}return n}getInternalState(){return[this.unknownState,this.knownState]}toJSON(){const t={...this.unknownState},e={};for(const[e,n]of this.knownState)e.isEqual(n,e.defaultValue)?delete t[e.key]:t[e.key]=e.unparse(n);for(const n of this.sharedNodeState.flatKeys)n in t&&(e[n]=t[n],delete t[n]);return Ct(t)&&(e.$=t),e}getWritable(t){if(this.node===t)return this;const{sharedNodeState:e,unknownState:n}=this,r=new Map(this.knownState);return new yt(t,e,function(t,e,n){let r;if(n)for(const[i,s]of Object.entries(n)){const n=t.get(i);n?e.has(n)||e.set(n,n.parse(s)):(r=r||{},r[i]=s)}return r}(e.sharedConfigMap,r,n),r,this.size)}updateFromKnown(t,e){const n=t.key;this.sharedNodeState.sharedConfigMap.set(n,t);const{knownState:r,unknownState:i}=this;r.has(t)||i&&n in i||(i&&(delete i[n],this.unknownState=Ct(i)),this.size++),r.set(t,e)}updateFromUnknown(t,e){const n=this.sharedNodeState.sharedConfigMap.get(t);n?this.updateFromKnown(n,n.parse(e)):(this.unknownState=this.unknownState||{},t in this.unknownState||this.size++,this.unknownState[t]=e)}updateFromJSON(t){const{knownState:e}=this;for(const t of e.keys())e.set(t,t.defaultValue);if(this.size=e.size,this.unknownState=void 0,t)for(const[e,n]of Object.entries(t))this.updateFromUnknown(e,n)}}function mt(t){const e=t.getWritable(),n=e.__state?e.__state.getWritable(e):new yt(e,xt(e));return e.__state=n,n}function xt(t){return t.__state?t.__state.sharedNodeState:ts(Oo(),t.getType()).sharedNodeState}function Ct(t){if(t)for(const e in t)return t}function St(t){return t}function vt(t,e,n){for(const[r,i]of e.knownState){if(t.has(r.key))continue;t.add(r.key);const e=n?n.getValue(r):r.defaultValue;if(e!==i&&!r.isEqual(e,i))return!0}return!1}function Tt(t,e,n){const{unknownState:r}=e,i=n?n.unknownState:void 0;if(r)for(const[e,n]of Object.entries(r)){if(t.has(e))continue;t.add(e);if(n!==(i?i[e]:void 0))return!0}return!1}function kt(t,e){const n=t.__state;return n&&n.node===t?n.getWritable(e):n}function Nt(t,e){const n=t.__mode,r=t.__format,i=t.__style,s=e.__mode,o=e.__format,l=e.__style,c=t.__state,a=e.__state;return(null===n||n===s)&&(null===r||r===o)&&(null===i||i===l)&&(null===t.__state||c===a||function(t,e){if(t===e)return!0;if(t&&e&&t.size!==e.size)return!1;const n=new Set;return!(t&&vt(n,t,e)||e&&vt(n,e,t)||t&&Tt(n,t,e)||e&&Tt(n,e,t))}(c,a))}function bt(t,e){const n=t.mergeWithSibling(e),r=ni()._normalizedNodes;return r.add(t.__key),r.add(e.__key),n}function wt(t){let e,n,r=t;if(\"\"!==r.__text||!r.isSimpleText()||r.isUnmergeable()){for(;null!==(e=r.getPreviousSibling())&&sr(e)&&e.isSimpleText()&&!e.isUnmergeable();){if(\"\"!==e.__text){if(Nt(e,r)){r=bt(e,r);break}break}e.remove()}for(;null!==(n=r.getNextSibling())&&sr(n)&&n.isSimpleText()&&!n.isUnmergeable();){if(\"\"!==n.__text){if(Nt(r,n)){r=bt(r,n);break}break}n.remove()}}else r.remove()}function Et(t){return Mt(t.anchor),Mt(t.focus),t}function Mt(t){for(;\"element\"===t.type;){const e=t.getNode(),n=t.offset;let r,i;if(n===e.getChildrenSize()?(r=e.getChildAtIndex(n-1),i=!0):(r=e.getChildAtIndex(n),i=!1),sr(r)){t.set(r.__key,i?r.getTextContentSize():0,\"text\",!0);break}if(!xi(r))break;t.set(r.__key,i?r.getChildrenSize():0,\"element\",!0)}}let Ot,At,Dt,Pt,Ft,Lt,It,zt,Kt,Rt,Bt=\"\",Wt=\"\",Jt=null,$t=\"\",jt=\"\",Ut=!1,Vt=!1,Yt=null;function Ht(t,e){const n=It.get(t);if(null!==e){const n=fe(t);n.parentNode===e&&e.removeChild(n)}if(zt.has(t)||At._keyToDOMMap.delete(t),xi(n)){const t=oe(n,It);qt(t,0,t.length-1,null)}void 0!==n&&Ys(Rt,Dt,Pt,n,\"destroyed\")}function qt(t,e,n,r){let i=e;for(;i<=n;++i){const e=t[i];void 0!==e&&Ht(e,r)}}function Gt(t,e){t.setProperty(\"text-align\",e)}const Xt=\"40px\";function Qt(t,e){const n=Ot.theme.indent;if(\"string\"==typeof n){const r=t.classList.contains(n);e>0&&!r?t.classList.add(n):e<1&&r&&t.classList.remove(n)}const r=getComputedStyle(t).getPropertyValue(\"--lexical-indent-base-value\")||Xt;t.style.setProperty(\"padding-inline-start\",0===e?\"\":`calc(${e} * ${r})`)}function Zt(t,e){const n=t.style;0===e?Gt(n,\"\"):e===D?Gt(n,\"left\"):e===P?Gt(n,\"center\"):e===F?Gt(n,\"right\"):e===L?Gt(n,\"justify\"):e===I?Gt(n,\"start\"):e===z&&Gt(n,\"end\")}function te(e,n){const r=zt.get(e);void 0===r&&t(60);const i=r.createDOM(Ot,At);if(function(t,e,n){const r=n._keyToDOMMap;(function(t,e,n){const r=`__lexicalKey_${e._key}`;t[r]=n})(e,n,t),r.set(t,e)}(e,i,At),sr(r)?i.setAttribute(\"data-lexical-text\",\"true\"):vi(r)&&i.setAttribute(\"data-lexical-decorator\",\"true\"),xi(r)){const t=r.__indent,e=r.__size;if(0!==t&&Qt(i,t),0!==e){const t=e-1;!function(t,e,n,r){const i=Wt;Wt=\"\",ee(t,n,0,e,n.getDOMSlot(r)),ie(n,r),Wt=i}(oe(r,zt),t,r,i)}const n=r.__format;0!==n&&Zt(i,n),r.isInline()||re(null,r,i),Zs(r)&&(Bt+=R,jt+=R)}else{const t=r.getTextContent();if(vi(r)){const t=r.decorate(At,Ot);null!==t&&ce(e,t),i.contentEditable=\"false\"}else sr(r)&&(r.isDirectionless()||(Wt+=t));Bt+=t,jt+=t}return null!==n&&n.insertChild(i),Ys(Rt,Dt,Pt,r,\"created\"),i}function ee(t,e,n,r,i){const s=Bt;Bt=\"\";let o=n;for(;o<=r;++o){te(t[o],i);const e=zt.get(t[o]);null!==e&&sr(e)&&(null===Jt&&(Jt=e.getFormat()),\"\"===$t&&($t=e.getStyle()))}Zs(e)&&(Bt+=R);i.element.__lexicalTextContent=Bt,Bt=s+Bt}function ne(t,e){if(t){const n=t.__last;if(n){const t=e.get(n);if(t)return Wn(t)?\"line-break\":vi(t)&&t.isInline()?\"decorator\":null}return\"empty\"}return null}function re(t,e,n){const r=ne(t,It),i=ne(e,zt);r!==i&&e.getDOMSlot(n).setManagedLineBreak(i)}function ie(t,e){const n=e.__lexicalDirTextContent||\"\",r=e.__lexicalDir||\"\";if(n!==Wt||r!==Yt){const n=\"\"===Wt,i=n?Yt:function(t){if($.test(t))return\"rtl\";if(j.test(t))return\"ltr\";return null}(Wt);if(i!==r){const s=e.classList,o=Ot.theme;let l=null!==r?o[r]:void 0,c=null!==i?o[i]:void 0;if(void 0!==l){if(\"string\"==typeof l){const t=d(l);l=o[r]=t}s.remove(...l)}if(null===i||n&&\"ltr\"===i)e.removeAttribute(\"dir\");else{if(void 0!==c){if(\"string\"==typeof c){const t=d(c);c=o[i]=t}void 0!==c&&s.add(...c)}e.dir=i}if(!Vt){t.getWritable().__dir=i}}Yt=i,e.__lexicalDirTextContent=Wt,e.__lexicalDir=i}}function se(e,n,r){const i=Wt;var s;Wt=\"\",Jt=null,$t=\"\",function(e,n,r){const i=Bt,s=e.__size,o=n.__size;Bt=\"\";const l=r.element;if(1===s&&1===o){const t=e.__first,r=n.__first;if(t===r)le(t,l);else{const e=fe(t),n=te(r,null);try{l.replaceChild(n,e)}catch(i){if(\"object\"==typeof i&&null!=i){const s=`${i.toString()} Parent: ${l.tagName}, new child: {tag: ${n.tagName} key: ${r}}, old child: {tag: ${e.tagName}, key: ${t}}.`;throw new Error(s)}throw i}Ht(t,null)}const i=zt.get(r);sr(i)&&(null===Jt&&(Jt=i.getFormat()),\"\"===$t&&($t=i.getStyle()))}else{const i=oe(e,It),c=oe(n,zt);if(i.length!==s&&t(227),c.length!==o&&t(228),0===s)0!==o&&ee(c,n,0,o-1,r);else if(0===o){if(0!==s){const t=null==r.after&&null==r.before&&null==r.element.__lexicalLineBreak;qt(i,0,s-1,t?null:l),t&&(l.textContent=\"\")}}else!function(t,e,n,r,i,s){const o=r-1,l=i-1;let c,a,u=s.getFirstChild(),f=0,d=0;for(;f<=o&&d<=l;){const t=e[f],r=n[d];if(t===r)u=ae(le(r,s.element)),f++,d++;else{void 0===c&&(c=new Set(e)),void 0===a&&(a=new Set(n));const i=a.has(t),o=c.has(r);if(i)if(o){const t=to(At,r);t===u?u=ae(le(r,s.element)):(s.withBefore(u).insertChild(t),le(r,s.element)),f++,d++}else te(r,s.withBefore(u)),d++;else u=ae(fe(t)),Ht(t,s.element),f++}const i=zt.get(r);null!==i&&sr(i)&&(null===Jt&&(Jt=i.getFormat()),\"\"===$t&&($t=i.getStyle()))}const h=f>o,g=d>l;if(h&&!g){const e=n[l+1],r=void 0===e?null:At.getElementByKey(e);ee(n,t,d,l,s.withBefore(r))}else g&&!h&&qt(e,f,o,s.element)}(n,i,c,s,o,r)}Zs(n)&&(Bt+=R);l.__lexicalTextContent=Bt,Bt=i+Bt}(e,n,n.getDOMSlot(r)),ie(n,r),s=n,null==Jt||Jt===s.__textFormat||Vt||s.setTextFormat(Jt),function(t){\"\"===$t||$t===t.__textStyle||Vt||t.setTextStyle($t)}(n),Wt=i}function oe(e,n){const r=[];let i=e.__first;for(;null!==i;){const e=n.get(i);void 0===e&&t(101),r.push(i),i=e.__next}return r}function le(e,n){const r=It.get(e);let i=zt.get(e);void 0!==r&&void 0!==i||t(61);const s=Ut||Lt.has(e)||Ft.has(e),o=to(At,e);if(r===i&&!s){if(xi(r)){const t=o.__lexicalTextContent;void 0!==t&&(Bt+=t,jt+=t);const e=o.__lexicalDirTextContent;void 0!==e&&(Wt+=e)}else{const t=r.getTextContent();sr(r)&&!r.isDirectionless()&&(Wt+=t),jt+=t,Bt+=t}return o}if(r!==i&&s&&Ys(Rt,Dt,Pt,i,\"updated\"),i.updateDOM(r,o,Ot)){const r=te(e,null);return null===n&&t(62),n.replaceChild(r,o),Ht(e,null),r}if(xi(r)&&xi(i)){const t=i.__indent;t!==r.__indent&&Qt(o,t);const e=i.__format;e!==r.__format&&Zt(o,e),s&&(se(r,i,o),ki(i)||i.isInline()||re(r,i,o)),Zs(i)&&(Bt+=R,jt+=R)}else{const t=i.getTextContent();if(vi(i)){const t=i.decorate(At,Ot);null!==t&&ce(e,t)}else sr(i)&&!i.isDirectionless()&&(Wt+=t);Bt+=t,jt+=t}if(!Vt&&ki(i)&&i.__cachedText!==jt){const t=i.getWritable();t.__cachedText=jt,i=t}return o}function ce(t,e){let n=At._pendingDecorators;const r=At._decorators;if(null===n){if(r[t]===e)return;n=Ns(At)}n[t]=e}function ae(t){let e=t.nextSibling;return null!==e&&e===At._blockCursorElement&&(e=e.nextSibling),e}function ue(t,e,n,r,i,s){Bt=\"\",jt=\"\",Wt=\"\",Ut=r===x,Yt=null,At=n,Ot=n._config,Dt=n._nodes,Pt=At._listeners.mutation,Ft=i,Lt=s,It=t._nodeMap,zt=e._nodeMap,Vt=e._readOnly,Kt=new Map(n._keyToDOMMap);const o=new Map;return Rt=o,le(\"root\",null),At=void 0,Dt=void 0,Ft=void 0,Lt=void 0,It=void 0,zt=void 0,Ot=void 0,Kt=void 0,Rt=void 0,o}function fe(e){const n=Kt.get(e);return void 0===n&&t(75,e),n}function de(t){return{type:t}}const he=de(\"SELECTION_CHANGE_COMMAND\"),ge=de(\"SELECTION_INSERT_CLIPBOARD_NODES_COMMAND\"),_e=de(\"CLICK_COMMAND\"),pe=de(\"DELETE_CHARACTER_COMMAND\"),ye=de(\"INSERT_LINE_BREAK_COMMAND\"),me=de(\"INSERT_PARAGRAPH_COMMAND\"),xe=de(\"CONTROLLED_TEXT_INSERTION_COMMAND\"),Ce=de(\"PASTE_COMMAND\"),Se=de(\"REMOVE_TEXT_COMMAND\"),ve=de(\"DELETE_WORD_COMMAND\"),Te=de(\"DELETE_LINE_COMMAND\"),ke=de(\"FORMAT_TEXT_COMMAND\"),Ne=de(\"UNDO_COMMAND\"),be=de(\"REDO_COMMAND\"),we=de(\"KEYDOWN_COMMAND\"),Ee=de(\"KEY_ARROW_RIGHT_COMMAND\"),Me=de(\"MOVE_TO_END\"),Oe=de(\"KEY_ARROW_LEFT_COMMAND\"),Ae=de(\"MOVE_TO_START\"),De=de(\"KEY_ARROW_UP_COMMAND\"),Pe=de(\"KEY_ARROW_DOWN_COMMAND\"),Fe=de(\"KEY_ENTER_COMMAND\"),Le=de(\"KEY_SPACE_COMMAND\"),Ie=de(\"KEY_BACKSPACE_COMMAND\"),ze=de(\"KEY_ESCAPE_COMMAND\"),Ke=de(\"KEY_DELETE_COMMAND\"),Re=de(\"KEY_TAB_COMMAND\"),Be=de(\"INSERT_TAB_COMMAND\"),We=de(\"INDENT_CONTENT_COMMAND\"),Je=de(\"OUTDENT_CONTENT_COMMAND\"),$e=de(\"DROP_COMMAND\"),je=de(\"FORMAT_ELEMENT_COMMAND\"),Ue=de(\"DRAGSTART_COMMAND\"),Ve=de(\"DRAGOVER_COMMAND\"),Ye=de(\"DRAGEND_COMMAND\"),He=de(\"COPY_COMMAND\"),qe=de(\"CUT_COMMAND\"),Ge=de(\"SELECT_ALL_COMMAND\"),Xe=de(\"CLEAR_EDITOR_COMMAND\"),Qe=de(\"CLEAR_HISTORY_COMMAND\"),Ze=de(\"CAN_REDO_COMMAND\"),tn=de(\"CAN_UNDO_COMMAND\"),en=de(\"FOCUS_COMMAND\"),nn=de(\"BLUR_COMMAND\"),rn=de(\"KEY_MODIFIER_COMMAND\"),sn=Object.freeze({}),on=30,ln=[[\"keydown\",function(t,e){if(cn=t.timeStamp,an=t.key,e.isComposing())return;if(Qs(e,we,t))return;if(null==t.key)return;if(yn&&$s(t))return _i(e,(()=>{wn(e,mn)})),yn=!1,void(mn=\"\");if(function(t){return Bs(t,\"ArrowRight\",{shiftKey:\"any\"})}(t))Qs(e,Ee,t);else if(function(t){return Bs(t,\"ArrowRight\",Ws)}(t))Qs(e,Me,t);else if(function(t){return Bs(t,\"ArrowLeft\",{shiftKey:\"any\"})}(t))Qs(e,Oe,t);else if(function(t){return Bs(t,\"ArrowLeft\",Ws)}(t))Qs(e,Ae,t);else if(function(t){return Bs(t,\"ArrowUp\",{altKey:\"any\",shiftKey:\"any\"})}(t))Qs(e,De,t);else if(function(t){return Bs(t,\"ArrowDown\",{altKey:\"any\",shiftKey:\"any\"})}(t))Qs(e,Pe,t);else if(function(t){return Bs(t,\"Enter\",{altKey:\"any\",ctrlKey:\"any\",metaKey:\"any\",shiftKey:!0})}(t))_n=!0,Qs(e,Fe,t);else if(function(t){return\" \"===t.key}(t))Qs(e,Le,t);else if(function(t){return r&&Bs(t,\"o\",{ctrlKey:!0})}(t))t.preventDefault(),_n=!0,Qs(e,ye,!0);else if(function(t){return Bs(t,\"Enter\",{altKey:\"any\",ctrlKey:\"any\",metaKey:\"any\"})}(t))_n=!1,Qs(e,Fe,t);else if(function(t){return Bs(t,\"Backspace\",{shiftKey:\"any\"})||r&&Bs(t,\"h\",{ctrlKey:!0})}(t))$s(t)?Qs(e,Ie,t):(t.preventDefault(),Qs(e,pe,!0));else if(function(t){return\"Escape\"===t.key}(t))Qs(e,ze,t);else if(function(t){return Bs(t,\"Delete\",{})||r&&Bs(t,\"d\",{ctrlKey:!0})}(t))!function(t){return\"Delete\"===t.key}(t)?(t.preventDefault(),Qs(e,pe,!1)):Qs(e,Ke,t);else if(function(t){return Bs(t,\"Backspace\",Js)}(t))t.preventDefault(),Qs(e,ve,!0);else if(function(t){return Bs(t,\"Delete\",Js)}(t))t.preventDefault(),Qs(e,ve,!1);else if(function(t){return r&&Bs(t,\"Backspace\",{metaKey:!0})}(t))t.preventDefault(),Qs(e,Te,!0);else if(function(t){return r&&(Bs(t,\"Delete\",{metaKey:!0})||Bs(t,\"k\",{ctrlKey:!0}))}(t))t.preventDefault(),Qs(e,Te,!1);else if(function(t){return Bs(t,\"b\",Ws)}(t))t.preventDefault(),Qs(e,ke,\"bold\");else if(function(t){return Bs(t,\"u\",Ws)}(t))t.preventDefault(),Qs(e,ke,\"underline\");else if(function(t){return Bs(t,\"i\",Ws)}(t))t.preventDefault(),Qs(e,ke,\"italic\");else if(function(t){return Bs(t,\"Tab\",{shiftKey:\"any\"})}(t))Qs(e,Re,t);else if(function(t){return Bs(t,\"z\",Ws)}(t))t.preventDefault(),Qs(e,Ne,void 0);else if(function(t){if(r)return Bs(t,\"z\",{metaKey:!0,shiftKey:!0});return Bs(t,\"y\",{ctrlKey:!0})||Bs(t,\"z\",{ctrlKey:!0,shiftKey:!0})}(t))t.preventDefault(),Qs(e,be,void 0);else{const n=e._editorState._selection;null===n||_r(n)?js(t)&&(t.preventDefault(),Qs(e,Ge,t)):!function(t){return Bs(t,\"c\",Ws)}(t)?!function(t){return Bs(t,\"x\",Ws)}(t)?js(t)&&(t.preventDefault(),Qs(e,Ge,t)):(t.preventDefault(),Qs(e,qe,t)):(t.preventDefault(),Qs(e,He,t))}(function(t){return t.ctrlKey||t.shiftKey||t.altKey||t.metaKey})(t)&&Qs(e,rn,t)}],[\"pointerdown\",function(t,e){const n=t.target,r=t.pointerType;ko(n)&&\"touch\"!==r&&\"pen\"!==r&&0===t.button&&_i(e,(()=>{rs(n)||(gn=!0)}))}],[\"compositionstart\",function(t,e){_i(e,(()=>{const n=Pr();if(_r(n)&&!e.isComposing()){const r=n.anchor,i=n.anchor.getNode();xs(r.key),(t.timeStamp<cn+on||\"element\"===r.type||!n.isCollapsed()||i.getFormat()!==n.format||sr(i)&&i.getStyle()!==n.style)&&Qs(e,xe,B)}}))}],[\"compositionend\",function(t,e){i?pn=!0:l||!o&&!f?_i(e,(()=>{wn(e,t.data)})):(yn=!0,mn=t.data)}],[\"input\",function(t,e){t.stopPropagation(),_i(e,(()=>{if(To(t.target)&&rs(t.target))return;const n=Pr(),r=t.data,c=bn(t);if(null!=r&&_r(n)&&Sn(n,c,r,t.timeStamp,!1)){pn&&(wn(e,r),pn=!1);const c=n.anchor.getNode(),a=xo(co(e));if(null===a)return;const u=n.isBackward(),d=u?n.anchor.offset:n.focus.offset,h=u?n.focus.offset:n.anchor.offset;s&&!n.isCollapsed()&&sr(c)&&null!==a.anchorNode&&c.getTextContent().slice(0,d)+r+c.getTextContent().slice(d+h)===Ls(a.anchorNode)||Qs(e,xe,r);const g=r.length;i&&g>1&&\"insertCompositionText\"===t.inputType&&!e.isComposing()&&(n.anchor.offset-=g),o||l||f||!e.isComposing()||(cn=0,xs(null))}else{Is(!1,e,null!==r?r:void 0),pn&&(wn(e,r||void 0),pn=!1)}!function(){Zr();const t=ni();at(t)}()}),{event:t}),fn=null}],[\"click\",function(t,e){_i(e,(()=>{const n=Pr(),r=xo(co(e)),i=Fr();if(r)if(_r(n)){const e=n.anchor,s=e.getNode();if(\"element\"===e.type&&0===e.offset&&n.isCollapsed()&&!ki(s)&&1===ws().getChildrenSize()&&s.getTopLevelElementOrThrow().isEmpty()&&null!==i&&n.is(i))r.removeAllRanges(),n.dirty=!0;else if(3===t.detail&&!n.isCollapsed()){if(s!==n.focus.getNode()){const t=function(t,e){let n=t;for(;n!==ws()&&null!=n;){if(e(n))return n;n=n.getParent()}return null}(s,(t=>xi(t)&&!t.isInline()));xi(t)&&t.select(0)}}}else if(\"touch\"===t.pointerType||\"pen\"===t.pointerType){const n=r.anchorNode;if(To(n)||fs(n)){Ms(Dr(i,r,e,t))}}Qs(e,_e,t)}))}],[\"cut\",sn],[\"copy\",sn],[\"dragstart\",sn],[\"dragover\",sn],[\"dragend\",sn],[\"paste\",sn],[\"focus\",sn],[\"blur\",sn],[\"drop\",sn]];s&&ln.push([\"beforeinput\",(e,n)=>function(e,n){const r=e.inputType,s=bn(e);if(\"deleteCompositionText\"===r||i&&Xs(n))return;if(\"insertCompositionText\"===r)return;_i(n,(()=>{const i=Pr();if(\"deleteContentBackward\"===r){if(null===i){const t=Fr();if(!_r(t))return;Ms(t.clone())}if(_r(i)){const r=i.anchor.key===i.focus.key;if(o=e.timeStamp,\"MediaLast\"===an&&o<cn+on&&n.isComposing()&&r){if(xs(null),cn=0,setTimeout((()=>{_i(n,(()=>{xs(null)}))}),on),_r(i)){const e=i.anchor.getNode();e.markDirty(),sr(e)||t(142),Nn(i,e)}}else{xs(null),e.preventDefault();const t=i.anchor.getNode(),s=t.getTextContent(),o=t.canInsertTextAfter(),l=0===i.anchor.offset&&i.focus.offset===s.length;let c=u&&r&&!l&&o;if(c&&i.isCollapsed()&&(c=!vi(Gs(i.anchor,!0))),!c){Qs(n,pe,!0);const t=Pr();u&&_r(t)&&t.isCollapsed()&&(xn=t,setTimeout((()=>xn=null)))}}return}}var o;if(!_r(i))return;const c=e.data;null!==fn&&Is(!1,n,fn),i.dirty&&null===fn||!i.isCollapsed()||ki(i.anchor.getNode())||null===s||i.applyDOMRange(s),fn=null;const a=i.anchor,f=i.focus,d=a.getNode(),h=f.getNode();if(\"insertText\"!==r&&\"insertTranspose\"!==r)switch(e.preventDefault(),r){case\"insertFromYank\":case\"insertFromDrop\":case\"insertReplacementText\":Qs(n,xe,e);break;case\"insertFromComposition\":xs(null),Qs(n,xe,e);break;case\"insertLineBreak\":xs(null),Qs(n,ye,!1);break;case\"insertParagraph\":xs(null),_n&&!l?(_n=!1,Qs(n,ye,!1)):Qs(n,me,void 0);break;case\"insertFromPaste\":case\"insertFromPasteAsQuotation\":Qs(n,Ce,e);break;case\"deleteByComposition\":(function(t,e){return t!==e||xi(t)||xi(e)||!as(t)||!as(e)})(d,h)&&Qs(n,Se,e);break;case\"deleteByDrag\":case\"deleteByCut\":Qs(n,Se,e);break;case\"deleteContent\":Qs(n,pe,!1);break;case\"deleteWordBackward\":Qs(n,ve,!0);break;case\"deleteWordForward\":Qs(n,ve,!1);break;case\"deleteHardLineBackward\":case\"deleteSoftLineBackward\":Qs(n,Te,!0);break;case\"deleteContentForward\":case\"deleteHardLineForward\":case\"deleteSoftLineForward\":Qs(n,Te,!1);break;case\"formatStrikeThrough\":Qs(n,ke,\"strikethrough\");break;case\"formatBold\":Qs(n,ke,\"bold\");break;case\"formatItalic\":Qs(n,ke,\"italic\");break;case\"formatUnderline\":Qs(n,ke,\"underline\");break;case\"historyUndo\":Qs(n,Ne,void 0);break;case\"historyRedo\":Qs(n,be,void 0)}else{if(\"\\n\"===c)e.preventDefault(),Qs(n,ye,!1);else if(c===R)e.preventDefault(),Qs(n,me,void 0);else if(null==c&&e.dataTransfer){const t=e.dataTransfer.getData(\"text/plain\");e.preventDefault(),i.insertRawText(t)}else null!=c&&Sn(i,s,c,e.timeStamp,!0)?(e.preventDefault(),Qs(n,xe,c)):fn=c;un=e.timeStamp}}))}(e,n)]);let cn=0,an=null,un=0,fn=null;const dn=new WeakMap;let hn=!1,gn=!1,_n=!1,pn=!1,yn=!1,mn=\"\",xn=null,Cn=[0,\"\",0,\"root\",0];function Sn(t,e,n,r,i){const o=t.anchor,l=t.focus,c=o.getNode(),a=ni(),u=xo(co(a)),f=null!==u?u.anchorNode:null,d=o.key,h=a.getElementByKey(d),g=n.length;return d!==l.key||!sr(c)||(!i&&(!s||un<r+50)||c.isDirty()&&g<2||Ds(n))&&o.offset!==l.offset&&!c.isComposing()||us(c)||c.isDirty()&&g>1||(i||!s)&&null!==h&&!c.isComposing()&&f!==hs(h)||null!==u&&null!==e&&(!e.collapsed||e.startContainer!==u.anchorNode||e.startOffset!==u.anchorOffset)||c.getFormat()!==t.format||c.getStyle()!==t.style||function(t,e){if(e.isSegmented())return!0;if(!t.isCollapsed())return!1;const n=t.anchor.offset,r=e.getParentOrThrow(),i=as(e);return 0===n?!e.canInsertTextBefore()||!r.canInsertTextBefore()&&!e.isComposing()||i||function(t){const e=t.getPreviousSibling();return(sr(e)||xi(e)&&e.isInline())&&!e.canInsertTextAfter()}(e):n===e.getTextContentSize()&&(!e.canInsertTextAfter()||!r.canInsertTextAfter()&&!e.isComposing()||i)}(t,c)}function vn(t,e){return fs(t)&&null!==t.nodeValue&&0!==e&&e!==t.nodeValue.length}function Tn(e,n,r){const{anchorNode:i,anchorOffset:s,focusNode:o,focusOffset:l}=e;hn&&(hn=!1,vn(i,s)&&vn(o,l)&&!xn)||_i(n,(()=>{if(!r)return void Ms(null);if(!ss(n,i,o))return;let c=Pr();if(xn&&_r(c)&&c.isCollapsed()){const t=c.anchor,e=xn.anchor;(t.key===e.key&&t.offset===e.offset+1||1===t.offset&&e.getNode().is(t.getNode().getPreviousSibling()))&&(c=xn.clone(),Ms(c))}if(xn=null,_r(c)){const r=c.anchor,i=r.getNode();if(c.isCollapsed()){\"Range\"===e.type&&e.anchorNode===e.focusNode&&(c.dirty=!0);const s=co(n).event,o=s?s.timeStamp:performance.now(),[l,a,u,f,d]=Cn,h=ws(),g=!1===n.isComposing()&&\"\"===h.getTextContent();if(o<d+200&&r.offset===u&&r.key===f)kn(c,l,a);else if(\"text\"===r.type)sr(i)||t(141),Nn(c,i);else if(\"element\"===r.type&&!g){xi(i)||t(259);const e=r.getNode();e.isEmpty()?function(t,e){const n=e.getTextFormat(),r=e.getTextStyle();kn(t,n,r)}(c,e):kn(c,0,\"\")}}else{const t=r.key,e=c.focus.key,n=c.getNodes(),i=n.length,o=c.isBackward(),a=o?l:s,u=o?s:l,f=o?e:t,d=o?t:e;let h=A,g=!1;for(let t=0;t<i;t++){const e=n[t],r=e.getTextContentSize();if(sr(e)&&0!==r&&!(0===t&&e.__key===f&&a===r||t===i-1&&e.__key===d&&0===u)&&(g=!0,h&=e.getFormat(),0===h))break}c.format=g?h:0}}Qs(n,he,void 0)}))}function kn(t,e,n){t.format===e&&t.style===n||(t.format=e,t.style=n,t.dirty=!0)}function Nn(t,e){kn(t,e.getFormat(),e.getStyle())}function bn(t){if(!t.getTargetRanges)return null;const e=t.getTargetRanges();return 0===e.length?null:e[0]}function wn(t,e){const n=t._compositionKey;if(xs(null),null!==n&&null!=e){if(\"\"===e){const e=Ss(n),r=hs(t.getElementByKey(n));return void(null!==r&&null!==r.nodeValue&&sr(e)&&zs(e,r.nodeValue,null,null,!0))}if(\"\\n\"===e[e.length-1]){const e=Pr();if(_r(e)){const n=e.focus;return e.anchor.set(n.key,n.offset,n.type),void Qs(t,Fe,null)}}}Is(!0,t,e)}function En(t){let e=t.__lexicalEventHandles;return void 0===e&&(e=[],t.__lexicalEventHandles=e),e}const Mn=new Map;function On(t){const e=Co(t.target);if(null===e)return;const n=ls(e.anchorNode);if(null===n)return;gn&&(gn=!1,_i(n,(()=>{const r=Fr(),i=e.anchorNode;if(To(i)||fs(i)){Ms(Dr(r,e,n,t))}})));const r=Ps(n),i=r[r.length-1],s=i._key,o=Mn.get(s),l=o||i;l!==n&&Tn(e,l,!1),Tn(e,n,!0),n!==i?Mn.set(s,n):o&&Mn.delete(s)}function An(t){t._lexicalHandled=!0}function Dn(t){return!0===t._lexicalHandled}const Pn=()=>{};function Fn(e){const n=e.ownerDocument,r=dn.get(n);if(void 0===r)return void Pn();const i=r-1;i>=0||t(164),dn.set(n,i),0===i&&n.removeEventListener(\"selectionchange\",On);const s=cs(e);os(s)?(!function(t){if(null!==t._parentEditor){const e=Ps(t),n=e[e.length-1]._key;Mn.get(n)===t&&Mn.delete(n)}else Mn.delete(t._key)}(s),e.__lexicalEditor=null):s&&t(198);const o=En(e);for(let t=0;t<o.length;t++)o[t]();e.__lexicalEventHandles=[]}function Ln(t,e,n){Zr();const r=t.__key,i=t.getParent();if(null===i)return;const s=function(t){const e=Pr();if(!_r(e)||!xi(t))return e;const{anchor:n,focus:r}=e,i=n.getNode(),s=r.getNode();oo(i,t)&&n.set(t.__key,0,\"element\");oo(s,t)&&r.set(t.__key,0,\"element\");return e}(t);let o=!1;if(_r(s)&&e){const e=s.anchor,n=s.focus;e.key===r&&(zr(e,t,i,t.getPreviousSibling(),t.getNextSibling()),o=!0),n.key===r&&(zr(n,t,i,t.getPreviousSibling(),t.getNextSibling()),o=!0)}else yr(s)&&e&&t.isSelected()&&t.selectPrevious();if(_r(s)&&e&&!o){const e=t.getIndexWithinParent();ys(t),Lr(s,i,e,-1)}else ys(t);n||fo(i)||i.canBeEmpty()||!i.isEmpty()||Ln(i,e),e&&s&&ki(i)&&i.isEmpty()&&i.selectEnd()}function In(t){return t}class zn{static getType(){const{ownNodeType:e}=Ro(this);return void 0===e&&t(64,this.name),e}static clone(e){t(65,this.name)}$config(){return{}}config(t,e){const n=e.extends||Object.getPrototypeOf(this.constructor);return Object.assign(e,{extends:n,type:t}),{[t]:e}}afterCloneFrom(t){this.__key===t.__key?(this.__parent=t.__parent,this.__next=t.__next,this.__prev=t.__prev,this.__state=t.__state):t.__state&&(this.__state=t.__state.getWritable(this))}constructor(t){this.__type=this.constructor.getType(),this.__parent=null,this.__prev=null,this.__next=null,Object.defineProperty(this,\"__state\",{configurable:!0,enumerable:!1,value:void 0,writable:!0}),ps(this,t)}getType(){return this.__type}isInline(){t(137,this.constructor.name)}isAttached(){let t=this.__key;for(;null!==t;){if(\"root\"===t)return!0;const e=Ss(t);if(null===e)break;t=e.__parent}return!1}isSelected(t){const e=t||Pr();if(null==e)return!1;const n=e.getNodes().some((t=>t.__key===this.__key));if(sr(this))return n;if(_r(e)&&\"element\"===e.anchor.type&&\"element\"===e.focus.type){if(e.isCollapsed())return!1;const t=this.getParent();if(vi(this)&&this.isInline()&&t){const n=e.isBackward()?e.focus:e.anchor;if(t.is(n.getNode())&&n.offset===t.getChildrenSize()&&this.is(t.getLastChild()))return!1}}return n}getKey(){return this.__key}getIndexWithinParent(){const t=this.getParent();if(null===t)return-1;let e=t.getFirstChild(),n=0;for(;null!==e;){if(this.is(e))return n;n++,e=e.getNextSibling()}return-1}getParent(){const t=this.getLatest().__parent;return null===t?null:Ss(t)}getParentOrThrow(){const e=this.getParent();return null===e&&t(66,this.__key),e}getTopLevelElement(){let e=this;for(;null!==e;){const n=e.getParent();if(fo(n))return xi(e)||e===this&&vi(e)||t(194),e;e=n}return null}getTopLevelElementOrThrow(){const e=this.getTopLevelElement();return null===e&&t(67,this.__key),e}getParents(){const t=[];let e=this.getParent();for(;null!==e;)t.push(e),e=e.getParent();return t}getParentKeys(){const t=[];let e=this.getParent();for(;null!==e;)t.push(e.__key),e=e.getParent();return t}getPreviousSibling(){const t=this.getLatest().__prev;return null===t?null:Ss(t)}getPreviousSiblings(){const t=[],e=this.getParent();if(null===e)return t;let n=e.getFirstChild();for(;null!==n&&!n.is(this);)t.push(n),n=n.getNextSibling();return t}getNextSibling(){const t=this.getLatest().__next;return null===t?null:Ss(t)}getNextSiblings(){const t=[];let e=this.getNextSibling();for(;null!==e;)t.push(e),e=e.getNextSibling();return t}getCommonAncestor(t){const e=xi(this)?this:this.getParent(),n=xi(t)?t:t.getParent(),r=e&&n?Cl(e,n):null;return r?r.commonAncestor:null}is(t){return null!=t&&this.__key===t.__key}isBefore(e){const n=Cl(this,e);return null!==n&&(\"descendant\"===n.type||(\"branch\"===n.type?-1===yl(n):(\"same\"!==n.type&&\"ancestor\"!==n.type&&t(279),!1)))}isParentOf(t){const e=Cl(this,t);return null!==e&&\"ancestor\"===e.type}getNodesBetween(e){const n=this.isBefore(e),r=[],i=new Set;let s=this;for(;null!==s;){const o=s.__key;if(i.has(o)||(i.add(o),r.push(s)),s===e)break;const l=xi(s)?n?s.getFirstChild():s.getLastChild():null;if(null!==l){s=l;continue}const c=n?s.getNextSibling():s.getPreviousSibling();if(null!==c){s=c;continue}const a=s.getParentOrThrow();if(i.has(a.__key)||r.push(a),a===e)break;let u=null,f=a;do{if(null===f&&t(68),u=n?f.getNextSibling():f.getPreviousSibling(),f=f.getParent(),null===f)break;null!==u||i.has(f.__key)||r.push(f)}while(null===u);s=u}return n||r.reverse(),r}isDirty(){const t=ni()._dirtyLeaves;return null!==t&&t.has(this.__key)}getLatest(){const e=Ss(this.__key);return null===e&&t(113),e}getWritable(){Zr();const t=ei(),e=ni(),n=t._nodeMap,r=this.__key,i=this.getLatest(),s=e._cloneNotNeeded,o=Pr();if(null!==o&&o.setCachedNodes(null),s.has(r))return ms(i),i;const l=Fo(i);return s.add(r),ms(l),n.set(r,l),l}getTextContent(){return\"\"}getTextContentSize(){return this.getTextContent().length}createDOM(e,n){t(70)}updateDOM(e,n,r){t(71)}exportDOM(t){return{element:this.createDOM(t._config,t)}}exportJSON(){const t=this.__state?this.__state.toJSON():void 0;return{type:this.__type,version:1,...t}}static importJSON(e){t(18,this.name)}updateFromJSON(t){return function(t,e){const n=t.getWritable(),r=e.$;let i=r;for(const t of xt(n).flatKeys)t in e&&(void 0!==i&&i!==r||(i={...r}),i[t]=e[t]);return(n.__state||i)&&mt(t).updateFromJSON(i),n}(this,t)}static transform(){return null}remove(t){Ln(this,!0,t)}replace(e,n){Zr();let r=Pr();null!==r&&(r=r.clone()),_o(this,e);const i=this.getLatest(),s=this.__key,o=e.__key,l=e.getWritable(),c=this.getParentOrThrow().getWritable(),a=c.__size;ys(l);const u=i.getPreviousSibling(),f=i.getNextSibling(),d=i.__prev,h=i.__next,g=i.__parent;if(Ln(i,!1,!0),null===u)c.__first=o;else{u.getWritable().__next=o}if(l.__prev=d,null===f)c.__last=o;else{f.getWritable().__prev=o}if(l.__next=h,l.__parent=g,c.__size=a,n&&(xi(this)&&xi(l)||t(139),this.getChildren().forEach((t=>{l.append(t)}))),_r(r)){Ms(r);const t=r.anchor,e=r.focus;t.key===s&&hr(t,l),e.key===s&&hr(e,l)}return Cs()===s&&xs(o),l}insertAfter(t,e=!0){Zr(),_o(this,t);const n=this.getWritable(),r=t.getWritable(),i=r.getParent(),s=Pr();let o=!1,l=!1;if(null!==i){const e=t.getIndexWithinParent();if(ys(r),_r(s)){const t=i.__key,n=s.anchor,r=s.focus;o=\"element\"===n.type&&n.key===t&&n.offset===e+1,l=\"element\"===r.type&&r.key===t&&r.offset===e+1}}const c=this.getNextSibling(),a=this.getParentOrThrow().getWritable(),u=r.__key,f=n.__next;if(null===c)a.__last=u;else{c.getWritable().__prev=u}if(a.__size++,n.__next=u,r.__next=f,r.__prev=n.__key,r.__parent=n.__parent,e&&_r(s)){const t=this.getIndexWithinParent();Lr(s,a,t+1);const e=a.__key;o&&s.anchor.set(e,t+2,\"element\"),l&&s.focus.set(e,t+2,\"element\")}return t}insertBefore(t,e=!0){Zr(),_o(this,t);const n=this.getWritable(),r=t.getWritable(),i=r.__key;ys(r);const s=this.getPreviousSibling(),o=this.getParentOrThrow().getWritable(),l=n.__prev,c=this.getIndexWithinParent();if(null===s)o.__first=i;else{s.getWritable().__next=i}o.__size++,n.__prev=i,r.__prev=l,r.__next=n.__key,r.__parent=n.__parent;const a=Pr();if(e&&_r(a)){Lr(a,this.getParentOrThrow(),c)}return t}isParentRequired(){return!1}createParentElementNode(){return Bi()}selectStart(){return this.selectPrevious()}selectEnd(){return this.selectNext(0,0)}selectPrevious(t,e){Zr();const n=this.getPreviousSibling(),r=this.getParentOrThrow();if(null===n)return r.select(0,0);if(xi(n))return n.select();if(!sr(n)){const t=n.getIndexWithinParent()+1;return r.select(t,t)}return n.select(t,e)}selectNext(t,e){Zr();const n=this.getNextSibling(),r=this.getParentOrThrow();if(null===n)return r.select();if(xi(n))return n.select(0,0);if(!sr(n)){const t=n.getIndexWithinParent();return r.select(t,t)}return n.select(t,e)}markDirty(){this.getWritable()}reconcileObservedMutation(t,e){this.markDirty()}}class Kn extends zn{static getType(){return\"linebreak\"}static clone(t){return new Kn(t.__key)}constructor(t){super(t)}getTextContent(){return\"\\n\"}createDOM(){return document.createElement(\"br\")}updateDOM(){return!1}isInline(){return!0}static importDOM(){return{br:t=>function(t){const e=t.parentElement;if(null!==e&&wo(e)){const n=e.firstChild;if(n===t||n.nextSibling===t&&Jn(n)){const n=e.lastChild;if(n===t||n.previousSibling===t&&Jn(n))return!0}}return!1}(t)||function(t){const e=t.parentElement;if(null!==e&&wo(e)){const n=e.firstChild;if(n===t||n.nextSibling===t&&Jn(n))return!1;const r=e.lastChild;if(r===t||r.previousSibling===t&&Jn(r))return!0}return!1}(t)?null:{conversion:Rn,priority:0}}}static importJSON(t){return Bn().updateFromJSON(t)}}function Rn(t){return{node:Bn()}}function Bn(){return go(new Kn)}function Wn(t){return t instanceof Kn}function Jn(t){return fs(t)&&/^( |\\t|\\r?\\n)+$/.test(t.textContent||\"\")}function $n(t,e){return 16&e?\"code\":e&O?\"mark\":32&e?\"sub\":64&e?\"sup\":null}function jn(t,e){return 1&e?\"strong\":2&e?\"em\":\"span\"}function Un(t,e,n,r,i){const s=r.classList;let o=Vs(i,\"base\");void 0!==o&&s.add(...o),o=Vs(i,\"underlineStrikethrough\");let l=!1;const c=e&b&&e&N;void 0!==o&&(n&b&&n&N?(l=!0,c||s.add(...o)):c&&s.remove(...o));for(const t in U){const r=U[t];if(o=Vs(i,t),void 0!==o)if(n&r){if(l&&(\"underline\"===t||\"strikethrough\"===t)){e&r&&s.remove(...o);continue}e&r&&(!c||\"underline\"!==t)&&\"strikethrough\"!==t||s.add(...o)}else e&r&&s.remove(...o)}}function Vn(t,e,n){const r=e.firstChild,s=n.isComposing(),o=t+(s?K:\"\");if(null==r)e.textContent=o;else{const t=r.nodeValue;if(t!==o)if(s||i){const[e,n,i]=function(t,e){const n=t.length,r=e.length;let i=0,s=0;for(;i<n&&i<r&&t[i]===e[i];)i++;for(;s+i<n&&s+i<r&&t[n-s-1]===e[r-s-1];)s++;return[i,n-i-s,e.slice(i,r-s)]}(t,o);0!==n&&r.deleteData(e,n),r.insertData(e,i)}else r.nodeValue=o}}function Yn(t,e,n,r,i,s){Vn(i,t,e);const o=s.theme.text;void 0!==o&&Un(0,0,r,t,o)}function Hn(t,e){const n=document.createElement(e);return n.appendChild(t),n}class qn extends zn{static getType(){return\"text\"}static clone(t){return new qn(t.__text,t.__key)}afterCloneFrom(t){super.afterCloneFrom(t),this.__text=t.__text,this.__format=t.__format,this.__style=t.__style,this.__mode=t.__mode,this.__detail=t.__detail}constructor(t=\"\",e){super(e),this.__text=t,this.__format=0,this.__style=\"\",this.__mode=0,this.__detail=0}getFormat(){return this.getLatest().__format}getDetail(){return this.getLatest().__detail}getMode(){const t=this.getLatest();return G[t.__mode]}getStyle(){return this.getLatest().__style}isToken(){return 1===this.getLatest().__mode}isComposing(){return this.__key===Cs()}isSegmented(){return 2===this.getLatest().__mode}isDirectionless(){return!!(1&this.getLatest().__detail)}isUnmergeable(){return!!(2&this.getLatest().__detail)}hasFormat(t){const e=U[t];return!!(this.getFormat()&e)}isSimpleText(){return\"text\"===this.__type&&0===this.__mode}getTextContent(){return this.getLatest().__text}getFormatFlags(t,e){return gs(this.getLatest().__format,t,e)}canHaveFormat(){return!0}isInline(){return!0}createDOM(t,e){const n=this.__format,r=$n(0,n),i=jn(0,n),s=null===r?i:r,o=document.createElement(s);let l=o;this.hasFormat(\"code\")&&o.setAttribute(\"spellcheck\",\"false\"),null!==r&&(l=document.createElement(i),o.appendChild(l));Yn(l,this,0,n,this.__text,t);const c=this.__style;return\"\"!==c&&(o.style.cssText=c),o}updateDOM(e,n,r){const i=this.__text,s=e.__format,o=this.__format,l=$n(0,s),c=$n(0,o),a=jn(0,s),u=jn(0,o);if((null===l?a:l)!==(null===c?u:c))return!0;if(l===c&&a!==u){const e=n.firstChild;null==e&&t(48);const s=document.createElement(u);return Yn(s,this,0,o,i,r),n.replaceChild(s,e),!1}let f=n;null!==c&&null!==l&&(f=n.firstChild,null==f&&t(49)),Vn(i,f,this);const d=r.theme.text;void 0!==d&&s!==o&&Un(0,s,o,f,d);const h=e.__style,g=this.__style;return h!==g&&(n.style.cssText=g),!1}static importDOM(){return{\"#text\":()=>({conversion:tr,priority:0}),b:()=>({conversion:Xn,priority:0}),code:()=>({conversion:rr,priority:0}),em:()=>({conversion:rr,priority:0}),i:()=>({conversion:rr,priority:0}),mark:()=>({conversion:rr,priority:0}),s:()=>({conversion:rr,priority:0}),span:()=>({conversion:Gn,priority:0}),strong:()=>({conversion:rr,priority:0}),sub:()=>({conversion:rr,priority:0}),sup:()=>({conversion:rr,priority:0}),u:()=>({conversion:rr,priority:0})}}static importJSON(t){return ir().updateFromJSON(t)}updateFromJSON(t){return super.updateFromJSON(t).setTextContent(t.text).setFormat(t.format).setDetail(t.detail).setMode(t.mode).setStyle(t.style)}exportDOM(e){let{element:n}=super.exportDOM(e);return To(n)||t(132),n.style.whiteSpace=\"pre-wrap\",this.hasFormat(\"lowercase\")?n.style.textTransform=\"lowercase\":this.hasFormat(\"uppercase\")?n.style.textTransform=\"uppercase\":this.hasFormat(\"capitalize\")&&(n.style.textTransform=\"capitalize\"),this.hasFormat(\"bold\")&&(n=Hn(n,\"b\")),this.hasFormat(\"italic\")&&(n=Hn(n,\"i\")),this.hasFormat(\"strikethrough\")&&(n=Hn(n,\"s\")),this.hasFormat(\"underline\")&&(n=Hn(n,\"u\")),{element:n}}exportJSON(){return{detail:this.getDetail(),format:this.getFormat(),mode:this.getMode(),style:this.getStyle(),text:this.getTextContent(),...super.exportJSON()}}selectionTransform(t,e){}setFormat(t){const e=this.getWritable();return e.__format=\"string\"==typeof t?U[t]:t,e}setDetail(t){const e=this.getWritable();return e.__detail=\"string\"==typeof t?V[t]:t,e}setStyle(t){const e=this.getWritable();return e.__style=t,e}toggleFormat(t){const e=gs(this.getFormat(),t,null);return this.setFormat(e)}toggleDirectionless(){const t=this.getWritable();return t.__detail^=1,t}toggleUnmergeable(){const t=this.getWritable();return t.__detail^=2,t}setMode(t){const e=q[t];if(this.__mode===e)return this;const n=this.getWritable();return n.__mode=e,n}setTextContent(t){if(this.__text===t)return this;const e=this.getWritable();return e.__text=t,e}select(t,e){Zr();let n=t,r=e;const i=Pr(),s=this.getTextContent(),o=this.__key;if(\"string\"==typeof s){const t=s.length;void 0===n&&(n=t),void 0===r&&(r=t)}else n=0,r=0;if(!_r(i))return Er(o,n,o,r,\"text\",\"text\");{const t=Cs();t!==i.anchor.key&&t!==i.focus.key||xs(o),i.setTextNodeRange(this,n,this,r)}return i}selectStart(){return this.select(0,0)}selectEnd(){const t=this.getTextContentSize();return this.select(t,t)}spliceText(t,e,n,r){const i=this.getWritable(),s=i.__text,o=n.length;let l=t;l<0&&(l=o+l,l<0&&(l=0));const c=Pr();if(r&&_r(c)){const e=t+o;c.setTextNodeRange(i,e,i,e)}const a=s.slice(0,l)+n+s.slice(l+e);return i.__text=a,i}canInsertTextBefore(){return!0}canInsertTextAfter(){return!0}splitText(...t){Zr();const e=this.getLatest(),n=e.getTextContent();if(\"\"===n)return[];const r=e.__key,i=Cs(),s=n.length;t.sort(((t,e)=>t-e)),t.push(s);const o=[],l=t.length;for(let e=0,r=0;e<s&&r<=l;r++){const i=t[r];i>e&&(o.push(n.slice(e,i)),e=i)}const c=o.length;if(1===c)return[e];const a=o[0],u=e.getParent();let f;const d=e.getFormat(),h=e.getStyle(),g=e.__detail;let _=!1,p=null,y=null;const m=Pr();if(_r(m)){const[t,e]=m.isBackward()?[m.focus,m.anchor]:[m.anchor,m.focus];\"text\"===t.type&&t.key===r&&(p=t),\"text\"===e.type&&e.key===r&&(y=e)}e.isSegmented()?(f=ir(a),f.__format=d,f.__style=h,f.__detail=g,f.__state=kt(e,f),_=!0):f=e.setTextContent(a);const x=[f];for(let t=1;t<c;t++){const n=ir(o[t]);n.__format=d,n.__style=h,n.__detail=g,n.__state=kt(e,n);const s=n.__key;i===r&&xs(s),x.push(n)}const C=p?p.offset:null,S=y?y.offset:null;let v=0;for(const t of x){if(!p&&!y)break;const e=v+t.getTextContentSize();if(null!==p&&null!==C&&C<=e&&C>=v&&(p.set(t.getKey(),C-v,\"text\"),C<e&&(p=null)),null!==y&&null!==S&&S<=e&&S>=v){y.set(t.getKey(),S-v,\"text\");break}v=e}if(null!==u){!function(t){const e=t.getPreviousSibling(),n=t.getNextSibling();null!==e&&ms(e);null!==n&&ms(n)}(this);const t=u.getWritable(),e=this.getIndexWithinParent();_?(t.splice(e,0,x),this.remove()):t.splice(e,1,x),_r(m)&&Lr(m,u,e,c-1)}return x}mergeWithSibling(e){const n=e===this.getPreviousSibling();n||e===this.getNextSibling()||t(50);const r=this.__key,i=e.__key,s=this.__text,o=s.length;Cs()===i&&xs(r);const l=Pr();if(_r(l)){const t=l.anchor,s=l.focus;null!==t&&t.key===i&&Kr(t,n,r,e,o),null!==s&&s.key===i&&Kr(s,n,r,e,o)}const c=e.__text,a=n?c+s:s+c;this.setTextContent(a);const u=this.getWritable();return e.remove(),u}isTextEntity(){return!1}}function Gn(t){return{forChild:or(t.style),node:null}}function Xn(t){const e=t,n=\"normal\"===e.style.fontWeight;return{forChild:or(e.style,n?void 0:\"bold\"),node:null}}const Qn=new WeakMap;function Zn(t){if(!To(t))return!1;if(\"PRE\"===t.nodeName)return!0;const e=t.style.whiteSpace;return\"string\"==typeof e&&e.startsWith(\"pre\")}function tr(e){const n=e;null===e.parentElement&&t(129);let r=n.textContent||\"\";if(null!==function(t){let e,n=t.parentNode;const r=[t];for(;null!==n&&void 0===(e=Qn.get(n))&&!Zn(n);)r.push(n),n=n.parentNode;const i=void 0===e?n:e;for(let t=0;t<r.length;t++)Qn.set(r[t],i);return i}(n)){const t=r.split(/(\\r?\\n|\\t)/),e=[],n=t.length;for(let r=0;r<n;r++){const n=t[r];\"\\n\"===n||\"\\r\\n\"===n?e.push(Bn()):\"\\t\"===n?e.push(cr()):\"\"!==n&&e.push(ir(n))}return{node:e}}if(r=r.replace(/\\r/g,\"\").replace(/[ \\t\\n]+/g,\" \"),\"\"===r)return{node:null};if(\" \"===r[0]){let t=n,e=!0;for(;null!==t&&null!==(t=er(t,!1));){const n=t.textContent||\"\";if(n.length>0){/[ \\t\\n]$/.test(n)&&(r=r.slice(1)),e=!1;break}}e&&(r=r.slice(1))}if(\" \"===r[r.length-1]){let t=n,e=!0;for(;null!==t&&null!==(t=er(t,!0));){if((t.textContent||\"\").replace(/^( |\\t|\\r?\\n)+/,\"\").length>0){e=!1;break}}e&&(r=r.slice(0,r.length-1))}return\"\"===r?{node:null}:{node:ir(r)}}function er(t,e){let n=t;for(;;){let t;for(;null===(t=e?n.nextSibling:n.previousSibling);){const t=n.parentElement;if(null===t)return null;n=t}if(n=t,To(n)){const t=n.style.display;if(\"\"===t&&!bo(n)||\"\"!==t&&!t.startsWith(\"inline\"))return null}let r=n;for(;null!==(r=e?n.firstChild:n.lastChild);)n=r;if(fs(n))return n;if(\"BR\"===n.nodeName)return null}}const nr={code:\"code\",em:\"italic\",i:\"italic\",mark:\"highlight\",s:\"strikethrough\",strong:\"bold\",sub:\"subscript\",sup:\"superscript\",u:\"underline\"};function rr(t){const e=nr[t.nodeName.toLowerCase()];return void 0===e?{node:null}:{forChild:or(t.style,e),node:null}}function ir(t=\"\"){return go(new qn(t))}function sr(t){return t instanceof qn}function or(t,e){const n=t.fontWeight,r=t.textDecoration.split(\" \"),i=\"700\"===n||\"bold\"===n,s=r.includes(\"line-through\"),o=\"italic\"===t.fontStyle,l=r.includes(\"underline\"),c=t.verticalAlign;return t=>sr(t)?(i&&!t.hasFormat(\"bold\")&&t.toggleFormat(\"bold\"),s&&!t.hasFormat(\"strikethrough\")&&t.toggleFormat(\"strikethrough\"),o&&!t.hasFormat(\"italic\")&&t.toggleFormat(\"italic\"),l&&!t.hasFormat(\"underline\")&&t.toggleFormat(\"underline\"),\"sub\"!==c||t.hasFormat(\"subscript\")||t.toggleFormat(\"subscript\"),\"super\"!==c||t.hasFormat(\"superscript\")||t.toggleFormat(\"superscript\"),e&&!t.hasFormat(e)&&t.toggleFormat(e),t):t}class lr extends qn{static getType(){return\"tab\"}static clone(t){return new lr(t.__key)}constructor(t){super(\"\\t\",t),this.__detail=2}static importDOM(){return null}createDOM(t){const e=super.createDOM(t),n=Vs(t.theme,\"tab\");if(void 0!==n){e.classList.add(...n)}return e}static importJSON(t){return cr().updateFromJSON(t)}setTextContent(e){return\"\\t\"!==e&&\"\"!==e&&t(126),super.setTextContent(\"\\t\")}spliceText(e,n,r,i){return\"\"===r&&0===n||\"\\t\"===r&&1===n||t(286),this}setDetail(e){return 2!==e&&t(127),this}setMode(e){return\"normal\"!==e&&t(128),this}canInsertTextBefore(){return!1}canInsertTextAfter(){return!1}}function cr(){return go(new lr)}function ar(t){return t instanceof lr}class ur{constructor(t,e,n){this._selection=null,this.key=t,this.offset=e,this.type=n}is(t){return this.key===t.key&&this.offset===t.offset&&this.type===t.type}isBefore(t){if(this.key===t.key)return this.offset<t.offset;return pl(Ol(Sl(this,\"next\")),Ol(Sl(t,\"next\")))<0}getNode(){const e=Ss(this.key);return null===e&&t(20),e}set(t,e,n,r){const i=this._selection,s=this.key;r&&this.key===t&&this.offset===e&&this.type===n||(this.key=t,this.offset=e,this.type=n,Qr()||(Cs()===s&&xs(t),null!==i&&(i.setCachedNodes(null),i.dirty=!0)))}}function fr(t,e,n){return new ur(t,e,n)}function dr(t,e){let n=e.__key,r=t.offset,i=\"element\";if(sr(e)){i=\"text\";const t=e.getTextContentSize();r>t&&(r=t)}else if(!xi(e)){const t=e.getNextSibling();if(sr(t))n=t.__key,r=0,i=\"text\";else{const t=e.getParent();t&&(n=t.__key,r=e.getIndexWithinParent()+1)}}t.set(n,r,i)}function hr(t,e){if(xi(e)){const n=e.getLastDescendant();xi(n)||sr(n)?dr(t,n):dr(t,e)}else dr(t,e)}class gr{constructor(t){this._cachedNodes=null,this._nodes=t,this.dirty=!1}getCachedNodes(){return this._cachedNodes}setCachedNodes(t){this._cachedNodes=t}is(t){if(!yr(t))return!1;const e=this._nodes,n=t._nodes;return e.size===n.size&&Array.from(e).every((t=>n.has(t)))}isCollapsed(){return!1}isBackward(){return!1}getStartEndPoints(){return null}add(t){this.dirty=!0,this._nodes.add(t),this._cachedNodes=null}delete(t){this.dirty=!0,this._nodes.delete(t),this._cachedNodes=null}clear(){this.dirty=!0,this._nodes.clear(),this._cachedNodes=null}has(t){return this._nodes.has(t)}clone(){return new gr(new Set(this._nodes))}extract(){return this.getNodes()}insertRawText(t){}insertText(){}insertNodes(t){const e=this.getNodes(),n=e.length,r=e[n-1];let i;if(sr(r))i=r.select();else{const t=r.getIndexWithinParent()+1;i=r.getParentOrThrow().select(t,t)}i.insertNodes(t);for(let t=0;t<n;t++)e[t].remove()}getNodes(){const t=this._cachedNodes;if(null!==t)return t;const e=this._nodes,n=[];for(const t of e){const e=Ss(t);null!==e&&n.push(e)}return Qr()||(this._cachedNodes=n),n}getTextContent(){const t=this.getNodes();let e=\"\";for(let n=0;n<t.length;n++)e+=t[n].getTextContent();return e}deleteNodes(){const t=this.getNodes();if((Pr()||Fr())===this&&t[0]){const e=nl(t[0],\"next\");Tl(gl(e,e))}for(const e of t)e.remove()}}function _r(t){return t instanceof pr}class pr{constructor(t,e,n,r){this.anchor=t,this.focus=e,t._selection=this,e._selection=this,this._cachedNodes=null,this.format=n,this.style=r,this.dirty=!1}getCachedNodes(){return this._cachedNodes}setCachedNodes(t){this._cachedNodes=t}is(t){return!!_r(t)&&(this.anchor.is(t.anchor)&&this.focus.is(t.focus)&&this.format===t.format&&this.style===t.style)}isCollapsed(){return this.anchor.is(this.focus)}getNodes(){const t=this._cachedNodes;if(null!==t)return t;const e=function(t){const e=[],[n,r]=t.getTextSlices();n&&e.push(n.caret.origin);const i=new Set,s=new Set;for(const n of t)if(Qo(n)){const{origin:t}=n;0===e.length?i.add(t):(s.add(t),e.push(t))}else{const{origin:t}=n;xi(t)&&s.has(t)||e.push(t)}r&&e.push(r.caret.origin);if(Xo(t.focus)&&xi(t.focus.origin)&&null===t.focus.getNodeAtCaret())for(let n=ol(t.focus.origin,\"previous\");Qo(n)&&i.has(n.origin)&&!n.origin.isEmpty()&&n.origin.is(e[e.length-1]);n=cl(n))i.delete(n.origin),e.pop();for(;e.length>1;){const t=e[e.length-1];if(!xi(t)||s.has(t)||t.isEmpty()||i.has(t))break;e.pop()}if(0===e.length&&t.isCollapsed()){const n=Ol(t.anchor),r=Ol(t.anchor.getFlipped()),i=t=>qo(t)?t.origin:t.getNodeAtCaret(),s=i(n)||i(r)||(t.anchor.getNodeAtCaret()?n.origin:r.origin);e.push(s)}return e}(Pl(Nl(this),\"next\"));return Qr()||(this._cachedNodes=e),e}setTextNodeRange(t,e,n,r){this.anchor.set(t.__key,e,\"text\"),this.focus.set(n.__key,r,\"text\")}getTextContent(){const t=this.getNodes();if(0===t.length)return\"\";const e=t[0],n=t[t.length-1],r=this.anchor,i=this.focus,s=r.isBefore(i),[o,l]=xr(this);let c=\"\",a=!0;for(let u=0;u<t.length;u++){const f=t[u];if(xi(f)&&!f.isInline())a||(c+=\"\\n\"),a=!f.isEmpty();else if(a=!1,sr(f)){let t=f.getTextContent();f===e?f===n?\"element\"===r.type&&\"element\"===i.type&&i.offset!==r.offset||(t=o<l?t.slice(o,l):t.slice(l,o)):t=s?t.slice(o):t.slice(l):f===n&&(t=s?t.slice(0,l):t.slice(0,o)),c+=t}else!vi(f)&&!Wn(f)||f===n&&this.isCollapsed()||(c+=f.getTextContent())}return c}applyDOMRange(t){const e=ni(),n=e.getEditorState()._selection,r=br(t.startContainer,t.startOffset,t.endContainer,t.endOffset,e,n);if(null===r)return;const[i,s]=r;this.anchor.set(i.key,i.offset,i.type,!0),this.focus.set(s.key,s.offset,s.type,!0),Et(this)}clone(){const t=this.anchor,e=this.focus;return new pr(fr(t.key,t.offset,t.type),fr(e.key,e.offset,e.type),this.format,this.style)}toggleFormat(t){this.format=gs(this.format,t,null),this.dirty=!0}setFormat(t){this.format=t,this.dirty=!0}setStyle(t){this.style=t,this.dirty=!0}hasFormat(t){const e=U[t];return!!(this.format&e)}insertRawText(t){const e=t.split(/(\\r?\\n|\\t)/),n=[],r=e.length;for(let t=0;t<r;t++){const r=e[t];\"\\n\"===r||\"\\r\\n\"===r?n.push(Bn()):\"\\t\"===r?n.push(cr()):n.push(ir(r))}this.insertNodes(n)}insertText(e){const n=this.anchor,r=this.focus,i=this.format,s=this.style;let o=n,l=r;!this.isCollapsed()&&r.isBefore(n)&&(o=r,l=n),\"element\"===o.type&&function(t,e,n,r){const i=t.getNode(),s=i.getChildAtIndex(t.offset),o=ir(),l=ki(i)?Bi().append(o):o;o.setFormat(n),o.setStyle(r),null===s?i.append(l):s.insertBefore(l),t.is(e)&&e.set(o.__key,0,\"text\"),t.set(o.__key,0,\"text\")}(o,l,i,s),\"element\"===l.type&&vl(l,Ol(Sl(l,\"next\")));const c=o.offset;let a=l.offset;const u=this.getNodes(),f=u.length;let d=u[0];sr(d)||t(26);const h=d.getTextContent().length,g=d.getParentOrThrow();let _=u[f-1];if(1===f&&\"element\"===l.type&&(a=h,l.set(o.key,a,\"text\")),this.isCollapsed()&&c===h&&(us(d)||!d.canInsertTextAfter()||!g.canInsertTextAfter()&&null===d.getNextSibling())){let t=d.getNextSibling();if(sr(t)&&t.canInsertTextBefore()&&!us(t)||(t=ir(),t.setFormat(i),t.setStyle(s),g.canInsertTextAfter()?d.insertAfter(t):g.insertAfter(t)),t.select(0,0),d=t,\"\"!==e)return void this.insertText(e)}else if(this.isCollapsed()&&0===c&&(us(d)||!d.canInsertTextBefore()||!g.canInsertTextBefore()&&null===d.getPreviousSibling())){let t=d.getPreviousSibling();if(sr(t)&&!us(t)||(t=ir(),t.setFormat(i),g.canInsertTextBefore()?d.insertBefore(t):g.insertBefore(t)),t.select(),d=t,\"\"!==e)return void this.insertText(e)}else if(d.isSegmented()&&c!==h){const t=ir(d.getTextContent());t.setFormat(i),d.replace(t),d=t}else if(!this.isCollapsed()&&\"\"!==e){const t=_.getParent();if(!g.canInsertTextBefore()||!g.canInsertTextAfter()||xi(t)&&(!t.canInsertTextBefore()||!t.canInsertTextAfter()))return this.insertText(\"\"),Nr(this.anchor,this.focus,null),void this.insertText(e)}if(1===f){if(as(d)){const t=ir(e);return t.select(),void d.replace(t)}const t=d.getFormat(),n=d.getStyle();if(c!==a||t===i&&n===s){if(ar(d)){const t=ir(e);return t.setFormat(i),t.setStyle(s),t.select(),void d.replace(t)}}else{if(\"\"!==d.getTextContent()){const t=ir(e);if(t.setFormat(i),t.setStyle(s),t.select(),0===c)d.insertBefore(t,!1);else{const[e]=d.splitText(c);e.insertAfter(t,!1)}return void(t.isComposing()&&\"text\"===this.anchor.type&&(this.anchor.offset-=e.length))}d.setFormat(i),d.setStyle(s)}const r=a-c;d=d.spliceText(c,r,e,!0),\"\"===d.getTextContent()?d.remove():\"text\"===this.anchor.type&&(d.isComposing()?this.anchor.offset-=e.length:(this.format=t,this.style=n))}else{const t=new Set([...d.getParentKeys(),..._.getParentKeys()]),n=xi(d)?d:d.getParentOrThrow();let r=xi(_)?_:_.getParentOrThrow(),i=_;if(!n.is(r)&&r.isInline())do{i=r,r=r.getParentOrThrow()}while(r.isInline());if(\"text\"===l.type&&(0!==a||\"\"===_.getTextContent())||\"element\"===l.type&&_.getIndexWithinParent()<a)if(sr(_)&&!as(_)&&a!==_.getTextContentSize()){if(_.isSegmented()){const t=ir(_.getTextContent());_.replace(t),_=t}ki(l.getNode())||\"text\"!==l.type||(_=_.spliceText(0,a,\"\")),t.add(_.__key)}else{const t=_.getParentOrThrow();t.canBeEmpty()||1!==t.getChildrenSize()?_.remove():t.remove()}else t.add(_.__key);const s=r.getChildren(),o=new Set(u),g=n.is(r),p=n.isInline()&&null===d.getNextSibling()?n:d;for(let t=s.length-1;t>=0;t--){const e=s[t];if(e.is(d)||xi(e)&&e.isParentOf(d))break;e.isAttached()&&(!o.has(e)||e.is(i)?g||p.insertAfter(e,!1):e.remove())}if(!g){let e=r,n=null;for(;null!==e;){const r=e.getChildren(),i=r.length;(0===i||r[i-1].is(n))&&(t.delete(e.__key),n=e),e=e.getParent()}}if(as(d))if(c===h)d.select();else{const t=ir(e);t.select(),d.replace(t)}else d=d.spliceText(c,h-c,e,!0),\"\"===d.getTextContent()?d.remove():d.isComposing()&&\"text\"===this.anchor.type&&(this.anchor.offset-=e.length);for(let e=1;e<f;e++){const n=u[e],r=n.__key;t.has(r)||n.remove()}}}removeText(){const t=Pr()===this;kl(this,Ml(Nl(this))),t&&Pr()!==this&&Ms(this)}formatText(t,e=null){if(this.isCollapsed())return this.toggleFormat(t),void xs(null);const n=this.getNodes(),r=[];for(const t of n)sr(t)&&r.push(t);const i=e=>{n.forEach((n=>{if(xi(n)){const r=n.getFormatFlags(t,e);n.setTextFormat(r)}}))},s=r.length;if(0===s)return this.toggleFormat(t),xs(null),void i(e);const o=this.anchor,l=this.focus,c=this.isBackward(),a=c?l:o,u=c?o:l;let f=0,d=r[0],h=\"element\"===a.type?0:a.offset;if(\"text\"===a.type&&h===d.getTextContentSize()&&(f=1,d=r[1],h=0),null==d)return;const g=d.getFormatFlags(t,e);i(g);const _=s-1;let p=r[_];const y=\"text\"===u.type?u.offset:p.getTextContentSize();if(d.is(p)){if(h===y)return;if(us(d)||0===h&&y===d.getTextContentSize())d.setFormat(g);else{const t=d.splitText(h,y),e=0===h?t[0]:t[1];e.setFormat(g),\"text\"===a.type&&a.set(e.__key,0,\"text\"),\"text\"===u.type&&u.set(e.__key,y-h,\"text\")}return void(this.format=g)}0===h||us(d)||([,d]=d.splitText(h),h=0),d.setFormat(g);const m=p.getFormatFlags(t,g);y>0&&(y===p.getTextContentSize()||us(p)||([p]=p.splitText(y)),p.setFormat(m));for(let e=f+1;e<_;e++){const n=r[e],i=n.getFormatFlags(t,m);n.setFormat(i)}\"text\"===a.type&&a.set(d.__key,h,\"text\"),\"text\"===u.type&&u.set(p.__key,y,\"text\"),this.format=g|m}insertNodes(e){if(0===e.length)return;if(this.isCollapsed()||this.removeText(),\"root\"===this.anchor.key){this.insertParagraph();const n=Pr();return _r(n)||t(134),n.insertNodes(e)}const n=(this.isBackward()?this.focus:this.anchor).getNode(),r=Mo(n,Eo),i=e[e.length-1];if(xi(r)&&\"__language\"in r){if(\"__language\"in e[0])this.insertText(e[0].getTextContent());else{const t=$r(this);r.splice(t,0,e),i.selectEnd()}return}if(!e.some((t=>(xi(t)||vi(t))&&!t.isInline()))){xi(r)||t(211,n.constructor.name,n.getType());const s=$r(this);return r.splice(s,0,e),void i.selectEnd()}const s=function(t){const e=Bi();let n=null;for(let r=0;r<t.length;r++){const i=t[r],s=Wn(i);if(s||vi(i)&&i.isInline()||xi(i)&&i.isInline()||sr(i)||i.isParentRequired()){if(null===n&&(n=i.createParentElementNode(),e.append(n),s))continue;null!==n&&n.append(i)}else e.append(i),n=null}return e}(e),o=s.getLastDescendant(),l=s.getChildren(),c=!xi(r)||!r.isEmpty()?this.insertParagraph():null,a=l[l.length-1];let u=l[0];var f;xi(f=u)&&Eo(f)&&!f.isEmpty()&&xi(r)&&(!r.isEmpty()||r.canMergeWhenEmpty())&&(xi(r)||t(211,n.constructor.name,n.getType()),r.append(...u.getChildren()),u=l[1]),u&&(null===r&&t(212,n.constructor.name,n.getType()),function(e,n,r){const i=n.getParentOrThrow().getLastChild();let s=n;const o=[n];for(;s!==i;)s.getNextSibling()||t(140),s=s.getNextSibling(),o.push(s);let l=e;for(const t of o)l=l.insertAfter(t)}(r,u));const d=Mo(o,Eo);c&&xi(d)&&(c.canMergeWhenEmpty()||Eo(a))&&(d.append(...c.getChildren()),c.remove()),xi(r)&&r.isEmpty()&&r.remove(),o.selectEnd();const h=xi(r)?r.getLastChild():null;Wn(h)&&d!==r&&h.remove()}insertParagraph(){if(\"root\"===this.anchor.key){const t=Bi();return ws().splice(this.anchor.offset,0,[t]),t.select(),t}const e=$r(this),n=Mo(this.anchor.getNode(),Eo);xi(n)||t(213);const r=n.getChildAtIndex(e),i=r?[r,...r.getNextSiblings()]:[],s=n.insertNewAfter(this,!1);return s?(s.append(...i),s.selectStart(),s):null}insertLineBreak(t){const e=Bn();if(this.insertNodes([e]),t){const t=e.getParentOrThrow(),n=e.getIndexWithinParent();t.select(n,n)}}extract(){const t=this.getNodes(),e=t.length,n=e-1,r=this.anchor,i=this.focus;let s=t[0],o=t[n];const[l,c]=xr(this);if(0===e)return[];if(1===e){if(sr(s)&&!this.isCollapsed()){const t=l>c?c:l,e=l>c?l:c,n=s.splitText(t,e),r=0===t?n[0]:n[1];return null!=r?[r]:[]}return[s]}const a=r.isBefore(i);if(sr(s)){const e=a?l:c;e===s.getTextContentSize()?t.shift():0!==e&&([,s]=s.splitText(e),t[0]=s)}if(sr(o)){const e=o.getTextContent().length,r=a?c:l;0===r?t.pop():r!==e&&([o]=o.splitText(r),t[n]=o)}return t}modify(t,e,n){if(Ur(this,t,e,n))return;const r=\"move\"===t,i=ni(),s=xo(co(i));if(!s)return;const o=i._blockCursorElement,l=i._rootElement,c=this.focus.getNode();if(null===l||null===o||!xi(c)||c.isInline()||c.canBeEmpty()||mo(o,i,l),this.dirty){let t=to(i,this.anchor.key),e=to(i,this.focus.key);\"text\"===this.anchor.type&&(t=hs(t)),\"text\"===this.focus.type&&(e=hs(e)),t&&e&&Rr(s,t,this.anchor.offset,e,this.focus.offset)}if(function(t,e,n,r){t.modify(e,n,r)}(s,t,e?\"backward\":\"forward\",n),s.rangeCount>0){const t=s.getRangeAt(0),n=this.anchor.getNode(),i=ki(n)?n:uo(n);if(this.applyDOMRange(t),this.dirty=!0,!r){const n=this.getNodes(),r=[];let o=!1;for(let t=0;t<n.length;t++){const e=n[t];oo(e,i)?r.push(e):o=!0}if(o&&r.length>0)if(e){const t=r[0];xi(t)?t.selectStart():t.getParentOrThrow().selectStart()}else{const t=r[r.length-1];xi(t)?t.selectEnd():t.getParentOrThrow().selectEnd()}s.anchorNode===t.startContainer&&s.anchorOffset===t.startOffset||function(t){const e=t.focus,n=t.anchor,r=n.key,i=n.offset,s=n.type;n.set(e.key,e.offset,e.type,!0),e.set(r,i,s,!0)}(this)}}\"lineboundary\"===n&&Ur(this,t,e,n,\"decorators\")}forwardDeletion(t,e,n){if(!n&&(\"element\"===t.type&&xi(e)&&t.offset===e.getChildrenSize()||\"text\"===t.type&&t.offset===e.getTextContentSize())){const t=e.getParent(),n=e.getNextSibling()||(null===t?null:t.getNextSibling());if(xi(n)&&n.isShadowRoot())return!0}return!1}deleteCharacter(t){const e=this.isCollapsed();if(this.isCollapsed()){const e=this.anchor;let n=e.getNode();if(this.forwardDeletion(e,n,t))return;const r=dl(Sl(e,t?\"previous\":\"next\"));if(r.getTextSlices().every((t=>null===t||0===t.distance))){let t={type:\"initial\"};for(const e of r.iterNodeCarets(\"shadowRoot\"))if(Qo(e))if(e.origin.isInline());else{if(e.origin.isShadowRoot()){if(\"merge-block\"===t.type)break;if(xi(r.anchor.origin)&&r.anchor.origin.isEmpty()){const t=Ol(e);kl(this,gl(t,t)),r.anchor.origin.remove()}return}\"merge-next-block\"!==t.type&&\"merge-block\"!==t.type||(t={block:t.block,caret:e,type:\"merge-block\"})}else{if(\"merge-block\"===t.type)break;if(Xo(e)){if(xi(e.origin)){if(e.origin.isInline()){if(!e.origin.isParentOf(r.anchor.origin))break}else t={block:e.origin,type:\"merge-next-block\"};continue}if(vi(e.origin)){if(e.origin.isIsolated());else if(\"merge-next-block\"===t.type&&(e.origin.isKeyboardSelectable()||!e.origin.isInline())&&xi(r.anchor.origin)&&r.anchor.origin.isEmpty()){r.anchor.origin.remove();const t=Or();t.add(e.origin.getKey()),Ms(t)}else e.origin.remove();return}break}}if(\"merge-block\"===t.type){const{caret:e,block:n}=t;return kl(this,gl(!e.origin.isEmpty()&&n.isEmpty()?bl(nl(n,e.direction)):r.anchor,e)),this.removeText()}}const i=this.focus;if(this.modify(\"extend\",t,\"character\"),this.isCollapsed()){if(t&&0===e.offset&&Cr(this,e.getNode()))return}else{const r=\"text\"===i.type?i.getNode():null;if(n=\"text\"===e.type?e.getNode():null,null!==r&&r.isSegmented()){const e=i.offset,s=r.getTextContentSize();if(r.is(n)||t&&e!==s||!t&&0!==e)return void vr(r,t,e)}else if(null!==n&&n.isSegmented()){const i=e.offset,s=n.getTextContentSize();if(n.is(r)||t&&0!==i||!t&&i!==s)return void vr(n,t,i)}!function(t,e){const n=t.anchor,r=t.focus,i=n.getNode(),s=r.getNode();if(i===s&&\"text\"===n.type&&\"text\"===r.type){const t=n.offset,s=r.offset,o=t<s,l=o?t:s,c=o?s:t,a=c-1;if(l!==a){(function(t){return!(Ds(t)||Sr(t))})(i.getTextContent().slice(l,c))&&(e?r.set(r.key,a,r.type):n.set(n.key,a,n.type))}}}(this,t)}}if(this.removeText(),t&&!e&&this.isCollapsed()&&\"element\"===this.anchor.type&&0===this.anchor.offset){const t=this.anchor.getNode();t.isEmpty()&&ki(t.getParent())&&null===t.getPreviousSibling()&&Cr(this,t)}}deleteLine(t){this.isCollapsed()&&this.modify(\"extend\",t,\"lineboundary\"),this.isCollapsed()?this.deleteCharacter(t):this.removeText()}deleteWord(t){if(this.isCollapsed()){const e=this.anchor,n=e.getNode();if(this.forwardDeletion(e,n,t))return;this.modify(\"extend\",t,\"word\")}this.removeText()}isBackward(){return this.focus.isBefore(this.anchor)}getStartEndPoints(){return[this.anchor,this.focus]}}function yr(t){return t instanceof gr}function mr(t){const e=t.offset;if(\"text\"===t.type)return e;const n=t.getNode();return e===n.getChildrenSize()?n.getTextContent().length:0}function xr(t){const e=t.getStartEndPoints();if(null===e)return[0,0];const[n,r]=e;return\"element\"===n.type&&\"element\"===r.type&&n.key===r.key&&n.offset===r.offset?[0,0]:[mr(n),mr(r)]}function Cr(t,e){for(let n=e;n;n=n.getParent()){if(xi(n)){if(n.collapseAtStart(t))return!0;if(fo(n))break}if(n.getPreviousSibling())break}return!1}const Sr=(()=>{try{const t=new RegExp(\"\\\\p{Emoji}\",\"u\"),e=t.test.bind(t);if(e(\"❤️\")&&e(\"#️⃣\")&&e(\"👍\"))return e}catch(t){}return()=>!1})();function vr(t,e,n){const r=t,i=r.getTextContent().split(/(?=\\s)/g),s=i.length;let o=0,l=0;for(let t=0;t<s;t++){const r=t===s-1;if(l=o,o+=i[t].length,e&&o===n||o>n||r){i.splice(t,1),r&&(l=void 0);break}}const c=i.join(\"\").trim();\"\"===c?r.remove():(r.setTextContent(c),r.select(l,l))}function Tr(e,n,r,i){let s,o=n;if(To(e)){let l=!1;const c=e.childNodes,a=c.length,u=i._blockCursorElement;o===a&&(l=!0,o=a-1);let f=c[o],d=!1;if(f===u)f=c[o+1],d=!0;else if(null!==u){const t=u.parentNode;if(e===t){n>Array.prototype.indexOf.call(t.children,u)&&o--}}if(s=Os(f),sr(s))o=As(s,l);else{let c=Os(e);if(null===c)return null;if(xi(c)){const a=i.getElementByKey(c.getKey());null===a&&t(214);const u=c.getDOMSlot(a);[c,o]=u.resolveChildIndex(c,a,e,n),xi(c)||t(215),l&&o>=c.getChildrenSize()&&(o=Math.max(0,c.getChildrenSize()-1));let f=c.getChildAtIndex(o);if(xi(f)&&function(t,e,n){const r=t.getParent();return null===n||null===r||!r.canBeEmpty()||r!==n.getNode()}(f,0,r)){const t=l?f.getLastDescendant():f.getFirstDescendant();null===t?c=f:(f=t,c=xi(f)?f:f.getParentOrThrow()),o=0}sr(f)?(s=f,c=null,o=As(f,l)):f!==c&&l&&!d&&(xi(c)||t(216),o=Math.min(c.getChildrenSize(),o+1))}else{const t=c.getIndexWithinParent();o=0===n&&vi(c)&&Os(e)===c?t:t+1,c=c.getParentOrThrow()}if(xi(c))return fr(c.__key,o,\"element\")}}else s=Os(e);return sr(s)?fr(s.__key,o,\"text\"):null}function kr(t,e,n){const r=t.offset,i=t.getNode();if(0===r){const r=i.getPreviousSibling(),s=i.getParent();if(e){if((n||!e)&&null===r&&xi(s)&&s.isInline()){const e=s.getPreviousSibling();sr(e)&&t.set(e.__key,e.getTextContent().length,\"text\")}}else xi(r)&&!n&&r.isInline()?t.set(r.__key,r.getChildrenSize(),\"element\"):sr(r)&&t.set(r.__key,r.getTextContent().length,\"text\")}else if(r===i.getTextContent().length){const r=i.getNextSibling(),s=i.getParent();if(e&&xi(r)&&r.isInline())t.set(r.__key,0,\"element\");else if((n||e)&&null===r&&xi(s)&&s.isInline()&&!s.canInsertTextAfter()){const e=s.getNextSibling();sr(e)&&t.set(e.__key,0,\"text\")}}}function Nr(t,e,n){if(\"text\"===t.type&&\"text\"===e.type){const r=t.isBefore(e),i=t.is(e);kr(t,r,i),kr(e,!r,i),i&&e.set(t.key,t.offset,t.type);const s=ni();if(s.isComposing()&&s._compositionKey!==t.key&&_r(n)){const r=n.anchor,i=n.focus;t.set(r.key,r.offset,r.type,!0),e.set(i.key,i.offset,i.type,!0)}}}function br(t,e,n,r,i,s){if(null===t||null===n||!ss(i,t,n))return null;const o=Tr(t,e,_r(s)?s.anchor:null,i);if(null===o)return null;const l=Tr(n,r,_r(s)?s.focus:null,i);if(null===l)return null;if(\"element\"===o.type&&\"element\"===l.type){const e=Os(t),r=Os(n);if(vi(e)&&vi(r))return null}return Nr(o,l,s),[o,l]}function wr(t){return xi(t)&&!t.isInline()}function Er(t,e,n,r,i,s){const o=ei(),l=new pr(fr(t,e,i),fr(n,r,s),0,\"\");return l.dirty=!0,o._selection=l,l}function Mr(){const t=fr(\"root\",0,\"element\"),e=fr(\"root\",0,\"element\");return new pr(t,e,0,\"\")}function Or(){return new gr(new Set)}function Ar(t,e){return Dr(null,t,e,null)}function Dr(t,e,n,r){const i=n._window;if(null===i)return null;const s=r||i.event,o=s?s.type:void 0,l=\"selectionchange\"===o,c=!et&&(l||\"beforeinput\"===o||\"compositionstart\"===o||\"compositionend\"===o||\"click\"===o&&s&&3===s.detail||\"drop\"===o||void 0===o);let a,u,f,d;if(_r(t)&&!c)return t.clone();if(null===e)return null;if(a=e.anchorNode,u=e.focusNode,f=e.anchorOffset,d=e.focusOffset,l&&_r(t)&&!ss(n,a,u))return t.clone();const h=br(a,f,u,d,n,t);if(null===h)return null;const[g,_]=h;return new pr(g,_,_r(t)?t.format:0,_r(t)?t.style:\"\")}function Pr(){return ei()._selection}function Fr(){return ni()._editorState._selection}function Lr(t,e,n,r=1){const i=t.anchor,s=t.focus,o=i.getNode(),l=s.getNode();if(!e.is(o)&&!e.is(l))return;const c=e.__key;if(t.isCollapsed()){const e=i.offset;if(n<=e&&r>0||n<e&&r<0){const n=Math.max(0,e+r);i.set(c,n,\"element\"),s.set(c,n,\"element\"),Ir(t)}}else{const o=t.isBackward(),l=o?s:i,a=l.getNode(),u=o?i:s,f=u.getNode();if(e.is(a)){const t=l.offset;(n<=t&&r>0||n<t&&r<0)&&l.set(c,Math.max(0,t+r),\"element\")}if(e.is(f)){const t=u.offset;(n<=t&&r>0||n<t&&r<0)&&u.set(c,Math.max(0,t+r),\"element\")}}Ir(t)}function Ir(t){const e=t.anchor,n=e.offset,r=t.focus,i=r.offset,s=e.getNode(),o=r.getNode();if(t.isCollapsed()){if(!xi(s))return;const t=s.getChildrenSize(),i=n>=t,o=i?s.getChildAtIndex(t-1):s.getChildAtIndex(n);if(sr(o)){let t=0;i&&(t=o.getTextContentSize()),e.set(o.__key,t,\"text\"),r.set(o.__key,t,\"text\")}}else{if(xi(s)){const t=s.getChildrenSize(),r=n>=t,i=r?s.getChildAtIndex(t-1):s.getChildAtIndex(n);if(sr(i)){let t=0;r&&(t=i.getTextContentSize()),e.set(i.__key,t,\"text\")}}if(xi(o)){const t=o.getChildrenSize(),e=i>=t,n=e?o.getChildAtIndex(t-1):o.getChildAtIndex(i);if(sr(n)){let t=0;e&&(t=n.getTextContentSize()),r.set(n.__key,t,\"text\")}}}}function zr(t,e,n,r,i){let s=null,o=0,l=null;null!==r?(s=r.__key,sr(r)?(o=r.getTextContentSize(),l=\"text\"):xi(r)&&(o=r.getChildrenSize(),l=\"element\")):null!==i&&(s=i.__key,sr(i)?l=\"text\":xi(i)&&(l=\"element\")),null!==s&&null!==l?t.set(s,o,l):(o=e.getIndexWithinParent(),-1===o&&(o=n.getChildrenSize()),t.set(n.__key,o,\"element\"))}function Kr(t,e,n,r,i){\"text\"===t.type?t.set(n,t.offset+(e?0:i),\"text\"):t.offset>r.getIndexWithinParent()&&t.set(t.key,t.offset-1,\"element\")}function Rr(t,e,n,r,i){try{t.setBaseAndExtent(e,n,r,i)}catch(t){}}function Br(t,e,n,r,i,s,o){const l=r.anchorNode,c=r.focusNode,a=r.anchorOffset,u=r.focusOffset,f=document.activeElement;if(i.has(Pi)&&f!==s||null!==f&&is(f))return;if(!_r(e))return void(null!==t&&ss(n,l,c)&&r.removeAllRanges());const d=e.anchor,h=e.focus,g=d.key,_=h.key,p=to(n,g),y=to(n,_),m=d.offset,x=h.offset,C=e.format,S=e.style,v=e.isCollapsed();let T=p,k=y,N=!1;if(\"text\"===d.type){T=hs(p);const t=d.getNode();N=t.getFormat()!==C||t.getStyle()!==S}else _r(t)&&\"text\"===t.anchor.type&&(N=!0);var b,w,E,M,O;if((\"text\"===h.type&&(k=hs(y)),null!==T&&null!==k)&&(v&&(null===t||N||_r(t)&&(t.format!==C||t.style!==S))&&(b=C,w=S,E=m,M=g,O=performance.now(),Cn=[b,w,E,M,O]),a!==m||u!==x||l!==T||c!==k||\"Range\"===r.type&&v||(null!==f&&s.contains(f)||s.focus({preventScroll:!0}),\"element\"===d.type))){if(Rr(r,T,m,k,x),!i.has(Li)&&e.isCollapsed()&&null!==s&&s===document.activeElement){const t=_r(e)&&\"element\"===e.anchor.type?T.childNodes[m]||null:r.rangeCount>0?r.getRangeAt(0):null;if(null!==t){let e;if(t instanceof Text){const n=document.createRange();n.selectNode(t),e=n.getBoundingClientRect()}else e=t.getBoundingClientRect();!function(t,e,n){const r=no(n),i=lo(r);if(null===r||null===i)return;let{top:s,bottom:o}=e,l=0,c=0,a=n;for(;null!==a;){const e=a===r.body;if(e)l=0,c=co(t).innerHeight;else{const t=a.getBoundingClientRect();l=t.top,c=t.bottom}let n=0;if(s<l?n=-(l-s):o>c&&(n=o-c),0!==n)if(e)i.scrollBy(0,n);else{const t=a.scrollTop;a.scrollTop+=n;const e=a.scrollTop-t;s-=e,o-=e}if(e)break;a=eo(a)}}(n,e,s)}}hn=!0}}function Wr(t){let e=Pr()||Fr();null===e&&(e=ws().selectEnd()),e.insertNodes(t)}function Jr(){const t=Pr();return null===t?\"\":t.getTextContent()}function $r(e){let n=e;e.isCollapsed()||n.removeText();const r=Pr();_r(r)&&(n=r),_r(n)||t(161);const i=n.anchor;let s=i.getNode(),o=i.offset;for(;!Eo(s);){const t=s;if([s,o]=jr(s,o),t.is(s))break}return o}function jr(t,e){const n=t.getParent();if(!n){const t=Bi();return ws().append(t),t.select(),[ws(),0]}if(sr(t)){const r=t.splitText(e);if(0===r.length)return[n,t.getIndexWithinParent()];const i=0===e?0:1;return[n,r[0].getIndexWithinParent()+i]}if(!xi(t)||0===e)return[n,t.getIndexWithinParent()];const r=t.getChildAtIndex(e);if(r){const n=new pr(fr(t.__key,e,\"element\"),fr(t.__key,e,\"element\"),0,\"\"),i=t.insertNewAfter(n);i&&i.append(r,...r.getNextSiblings())}return[n,t.getIndexWithinParent()+1]}function Ur(t,e,n,r,i=\"decorators-and-blocks\"){if(\"move\"===e&&\"character\"===r&&!t.isCollapsed()){const[e,r]=n===t.isBackward()?[t.focus,t.anchor]:[t.anchor,t.focus];return r.set(e.key,e.offset,e.type),!0}const s=Sl(t.focus,n?\"previous\":\"next\"),o=\"lineboundary\"===r,l=\"move\"===e;let c=s,a=\"decorators-and-blocks\"===i;if(!Al(c)){for(const t of c){a=!1;const{origin:e}=t;if(!vi(e)||e.isIsolated()||(c=t,!o||!e.isInline()))break}if(a)for(const t of dl(s).iterNodeCarets(\"extend\"===e?\"shadowRoot\":\"root\")){if(Qo(t))t.origin.isInline()||(c=t);else{if(xi(t.origin))continue;vi(t.origin)&&!t.origin.isInline()&&(c=t)}break}}if(c===s)return!1;if(l&&!o&&vi(c.origin)&&c.origin.isKeyboardSelectable()){const t=Or();return t.add(c.origin.getKey()),Ms(t),!0}return c=Ol(c),l&&vl(t.anchor,c),vl(t.focus,c),a||!o}let Vr=null,Yr=null,Hr=!1,qr=!1,Gr=0;const Xr={characterData:!0,childList:!0,subtree:!0};function Qr(){return Hr||null!==Vr&&Vr._readOnly}function Zr(){Hr&&t(13)}function ti(){Gr>99&&t(14)}function ei(){return null===Vr&&t(195,ri()),Vr}function ni(){return null===Yr&&t(196,ri()),Yr}function ri(){let t=0;const e=new Set,n=qi.version;if(\"undefined\"!=typeof window)for(const r of document.querySelectorAll(\"[contenteditable]\")){const i=cs(r);if(os(i))t++;else if(i){let t=String(i.constructor.version||\"<0.17.1\");t===n&&(t+=\" (separately built, likely a bundler configuration issue)\"),e.add(t)}}let r=` Detected on the page: ${t} compatible editor(s) with version ${n}`;return e.size&&(r+=` and incompatible editors with versions ${Array.from(e).join(\", \")}`),r}function ii(){return Yr}function si(t,e,n){const r=e.__type,i=ts(t,r);let s=n.get(r);void 0===s&&(s=Array.from(i.transforms),n.set(r,s));const o=s.length;for(let t=0;t<o&&(s[t](e),e.isAttached());t++);}function oi(t,e){return void 0!==t&&t.__key!==e&&t.isAttached()}function li(t,e){if(!e)return;const n=t._updateTags;let r=e;Array.isArray(e)||(r=[e]);for(const t of r)n.add(t)}function ci(t){return ai(t,ni()._nodes)}function ai(e,n){const r=e.type,i=n.get(r);void 0===i&&t(17,r);const s=i.klass;e.type!==s.getType()&&t(18,s.name);const o=s.importJSON(e),l=e.children;if(xi(o)&&Array.isArray(l))for(let t=0;t<l.length;t++){const e=ai(l[t],n);o.append(e)}return o}function ui(t,e,n){const r=Vr,i=Hr,s=Yr;Vr=e,Hr=!0,Yr=t;try{return n()}finally{Vr=r,Hr=i,Yr=s}}function fi(t,e){const n=t._pendingEditorState,r=t._rootElement,i=t._headless||null===r;if(null===n)return;const s=t._editorState,o=s._selection,l=n._selection,c=t._dirtyType!==y,a=Vr,u=Hr,f=Yr,h=t._updating,g=t._observer;let _=null;if(t._pendingEditorState=null,t._editorState=n,!i&&c&&null!==g){Yr=t,Vr=n,Hr=!1,t._updating=!0;try{const e=t._dirtyType,r=t._dirtyElements,i=t._dirtyLeaves;g.disconnect(),_=ue(s,n,t,e,r,i)}catch(e){if(e instanceof Error&&t._onError(e),qr)throw e;return Yi(t,null,r,n),ut(t),t._dirtyType=x,qr=!0,fi(t,s),void(qr=!1)}finally{g.observe(r,Xr),t._updating=h,Vr=a,Hr=u,Yr=f}}n._readOnly||(n._readOnly=!0);const p=t._dirtyLeaves,m=t._dirtyElements,C=t._normalizedNodes,S=t._updateTags,v=t._deferred;c&&(t._dirtyType=y,t._cloneNotNeeded.clear(),t._dirtyLeaves=new Set,t._dirtyElements=new Map,t._normalizedNodes=new Set,t._updateTags=new Set),function(t,e){const n=t._decorators;let r=t._pendingDecorators||n;const i=e._nodeMap;let s;for(s in r)i.has(s)||(r===n&&(r=Ns(t)),delete r[s])}(t,n);const T=i?null:xo(co(t));if(t._editable&&null!==T&&(c||null===l||l.dirty)&&null!==r&&!S.has(Ii)){Yr=t,Vr=n;try{if(null!==g&&g.disconnect(),c||null===l||l.dirty){const e=t._blockCursorElement;null!==e&&mo(e,t,r),Br(o,l,t,T,S,r)}!function(t,e,n){let r=t._blockCursorElement;if(_r(n)&&n.isCollapsed()&&\"element\"===n.anchor.type&&e.contains(document.activeElement)){const i=n.anchor,s=i.getNode(),o=i.offset;let l=!1,c=null;if(o===s.getChildrenSize()){yo(s.getChildAtIndex(o-1))&&(l=!0)}else{const e=s.getChildAtIndex(o);if(null!==e&&yo(e)){const n=e.getPreviousSibling();(null===n||yo(n))&&(l=!0,c=t.getElementByKey(e.__key))}}if(l){const n=t.getElementByKey(s.__key);return null===r&&(t._blockCursorElement=r=function(t){const e=t.theme,n=document.createElement(\"div\");n.contentEditable=\"false\",n.setAttribute(\"data-lexical-cursor\",\"true\");let r=e.blockCursor;if(void 0!==r){if(\"string\"==typeof r){const t=d(r);r=e.blockCursor=t}void 0!==r&&n.classList.add(...r)}return n}(t._config)),e.style.caretColor=\"transparent\",void(null===c?n.appendChild(r):n.insertBefore(r,c))}}null!==r&&mo(r,t,e)}(t,r,l)}finally{null!==g&&g.observe(r,Xr),Yr=f,Vr=a}}null!==_&&function(t,e,n,r,i){const s=Array.from(t._listeners.mutation),o=s.length;for(let t=0;t<o;t++){const[o,l]=s[t];for(const t of l){const s=e.get(t);void 0!==s&&o(s,{dirtyLeaves:r,prevEditorState:i,updateTags:n})}}}(t,_,S,p,s),_r(l)||null===l||null!==o&&o.is(l)||t.dispatchCommand(he,void 0);const k=t._pendingDecorators;null!==k&&(t._decorators=k,t._pendingDecorators=null,di(\"decorator\",t,!0,k)),function(t,e,n){const r=bs(e),i=bs(n);r!==i&&di(\"textcontent\",t,!0,i)}(t,e||s,n),di(\"update\",t,!0,{dirtyElements:m,dirtyLeaves:p,editorState:n,mutatedNodes:_,normalizedNodes:C,prevEditorState:e||s,tags:S}),function(t,e){if(t._deferred=[],0!==e.length){const n=t._updating;t._updating=!0;try{for(let t=0;t<e.length;t++)e[t]()}finally{t._updating=n}}}(t,v),function(t){const e=t._updates;if(0!==e.length){const n=e.shift();if(n){const[e,r]=n;gi(t,e,r)}}}(t)}function di(t,e,n,...r){const i=e._updating;e._updating=n;try{const n=Array.from(e._listeners[t]);for(let t=0;t<n.length;t++)n[t].apply(null,r)}finally{e._updating=i}}function hi(e,n){const r=e._updates;let i=n||!1;for(;0!==r.length;){const n=r.shift();if(n){const[r,s]=n;let o;if(void 0!==s){if(o=s.onUpdate,s.skipTransforms&&(i=!0),s.discrete){const n=e._pendingEditorState;null===n&&t(191),n._flushSync=!0}o&&e._deferred.push(o),li(e,s.tag)}r()}}return i}function gi(e,n,r){const i=e._updateTags;let s,o=!1,l=!1;void 0!==r&&(s=r.onUpdate,li(e,r.tag),o=r.skipTransforms||!1,l=r.discrete||!1),s&&e._deferred.push(s);const c=e._editorState;let a=e._pendingEditorState,u=!1;(null===a||a._readOnly)&&(a=e._pendingEditorState=Ni(a||c),u=!0),a._flushSync=l;const f=Vr,d=Hr,h=Yr,g=e._updating;Vr=a,Hr=!1,e._updating=!0,Yr=e;const _=e._headless||null===e.getRootElement();Xi(null);try{u&&(_?null!==c._selection&&(a._selection=c._selection.clone()):a._selection=function(t,e){const n=t.getEditorState()._selection,r=xo(co(t));return _r(n)||null==n?Dr(n,r,t,e):n.clone()}(e,r&&r.event||null));const i=e._compositionKey;n(),o=hi(e,o),function(t,e){const n=e.getEditorState()._selection,r=t._selection;if(_r(r)){const t=r.anchor,e=r.focus;let i;if(\"text\"===t.type&&(i=t.getNode(),i.selectionTransform(n,r)),\"text\"===e.type){const t=e.getNode();i!==t&&t.selectionTransform(n,r)}}}(a,e),e._dirtyType!==y&&(o?function(t,e){const n=e._dirtyLeaves,r=t._nodeMap;for(const t of n){const e=r.get(t);sr(e)&&e.isAttached()&&e.isSimpleText()&&!e.isUnmergeable()&&wt(e)}}(a,e):function(t,e){const n=e._dirtyLeaves,r=e._dirtyElements,i=t._nodeMap,s=Cs(),o=new Map;let l=n,c=l.size,a=r,u=a.size;for(;c>0||u>0;){if(c>0){e._dirtyLeaves=new Set;for(const t of l){const r=i.get(t);sr(r)&&r.isAttached()&&r.isSimpleText()&&!r.isUnmergeable()&&wt(r),void 0!==r&&oi(r,s)&&si(e,r,o),n.add(t)}if(l=e._dirtyLeaves,c=l.size,c>0){Gr++;continue}}e._dirtyLeaves=new Set,e._dirtyElements=new Map,a.delete(\"root\")&&a.set(\"root\",!0);for(const t of a){const n=t[0],l=t[1];if(r.set(n,l),!l)continue;const c=i.get(n);void 0!==c&&oi(c,s)&&si(e,c,o)}l=e._dirtyLeaves,c=l.size,a=e._dirtyElements,u=a.size,Gr++}e._dirtyLeaves=n,e._dirtyElements=r}(a,e),hi(e),function(t,e,n,r){const i=t._nodeMap,s=e._nodeMap,o=[];for(const[t]of r){const e=s.get(t);void 0!==e&&(e.isAttached()||(xi(e)&&Z(e,t,i,s,o,r),i.has(t)||r.delete(t),o.push(t)))}for(const t of o)s.delete(t);for(const t of n){const e=s.get(t);void 0===e||e.isAttached()||(i.has(t)||n.delete(t),s.delete(t))}}(c,a,e._dirtyLeaves,e._dirtyElements));i!==e._compositionKey&&(a._flushSync=!0);const s=a._selection;if(_r(s)){const e=a._nodeMap,n=s.anchor.key,r=s.focus.key;void 0!==e.get(n)&&void 0!==e.get(r)||t(19)}else yr(s)&&0===s._nodes.size&&(a._selection=null)}catch(t){return t instanceof Error&&e._onError(t),e._pendingEditorState=c,e._dirtyType=x,e._cloneNotNeeded.clear(),e._dirtyLeaves=new Set,e._dirtyElements.clear(),void fi(e)}finally{Vr=f,Hr=d,Yr=h,e._updating=g,Gr=0}const p=e._dirtyType!==y||e._deferred.length>0||function(t,e){const n=e.getEditorState()._selection,r=t._selection;if(null!==r){if(r.dirty||!r.is(n))return!0}else if(null!==n)return!0;return!1}(a,e);p?a._flushSync?(a._flushSync=!1,fi(e)):u&&ns((()=>{fi(e)})):(a._flushSync=!1,u&&(i.clear(),e._deferred=[],e._pendingEditorState=null))}function _i(t,e,n){Yr===t&&void 0===n?e():gi(t,e,n)}class pi{constructor(t,e,n){this.element=t,this.before=e||null,this.after=n||null}withBefore(t){return new pi(this.element,t,this.after)}withAfter(t){return new pi(this.element,this.before,t)}withElement(t){return this.element===t?this:new pi(t,this.before,this.after)}insertChild(e){const n=this.before||this.getManagedLineBreak();return null!==n&&n.parentElement!==this.element&&t(222),this.element.insertBefore(e,n),this}removeChild(e){return e.parentElement!==this.element&&t(223),this.element.removeChild(e),this}replaceChild(e,n){return n.parentElement!==this.element&&t(224),this.element.replaceChild(e,n),this}getFirstChild(){const t=this.after?this.after.nextSibling:this.element.firstChild;return t===this.before||t===this.getManagedLineBreak()?null:t}getManagedLineBreak(){return this.element.__lexicalLineBreak||null}setManagedLineBreak(t){if(null===t)this.removeManagedLineBreak();else{const e=\"decorator\"===t&&(l||o);this.insertManagedLineBreak(e)}}removeManagedLineBreak(){const t=this.getManagedLineBreak();if(t){const e=this.element,n=\"IMG\"===t.nodeName?t.nextSibling:null;n&&e.removeChild(n),e.removeChild(t),e.__lexicalLineBreak=void 0}}insertManagedLineBreak(t){const e=this.getManagedLineBreak();if(e){if(t===(\"IMG\"===e.nodeName))return;this.removeManagedLineBreak()}const n=this.element,r=this.before,i=document.createElement(\"br\");if(n.insertBefore(i,r),t){const t=document.createElement(\"img\");t.setAttribute(\"data-lexical-linebreak\",\"true\"),t.style.cssText=\"display: inline !important; border: 0px !important; margin: 0px !important;\",t.alt=\"\",n.insertBefore(t,i),n.__lexicalLineBreak=t}else n.__lexicalLineBreak=i}getFirstChildOffset(){let t=0;for(let e=this.after;null!==e;e=e.previousSibling)t++;return t}resolveChildIndex(t,e,n,r){if(n===this.element){const e=this.getFirstChildOffset();return[t,Math.min(e+t.getChildrenSize(),Math.max(e,r))]}const i=yi(e,n);i.push(r);const s=yi(e,this.element);let o=t.getIndexWithinParent();for(let t=0;t<s.length;t++){const e=i[t],n=s[t];if(void 0===e||e<n)break;if(e>n){o+=1;break}}return[t.getParentOrThrow(),o]}}function yi(e,n){const r=[];let i=n;for(;i!==e&&null!==i;i=i.parentNode){let t=0;for(let e=i.previousSibling;null!==e;e=e.previousSibling)t++;r.push(t)}return i!==e&&t(225),r.reverse()}class mi extends zn{constructor(t){super(t),this.__first=null,this.__last=null,this.__size=0,this.__format=0,this.__style=\"\",this.__indent=0,this.__dir=null,this.__textFormat=0,this.__textStyle=\"\"}afterCloneFrom(t){super.afterCloneFrom(t),this.__key===t.__key&&(this.__first=t.__first,this.__last=t.__last,this.__size=t.__size),this.__indent=t.__indent,this.__format=t.__format,this.__style=t.__style,this.__dir=t.__dir,this.__textFormat=t.__textFormat,this.__textStyle=t.__textStyle}getFormat(){return this.getLatest().__format}getFormatType(){const t=this.getFormat();return H[t]||\"\"}getStyle(){return this.getLatest().__style}getIndent(){return this.getLatest().__indent}getChildren(){const t=[];let e=this.getFirstChild();for(;null!==e;)t.push(e),e=e.getNextSibling();return t}getChildrenKeys(){const t=[];let e=this.getFirstChild();for(;null!==e;)t.push(e.__key),e=e.getNextSibling();return t}getChildrenSize(){return this.getLatest().__size}isEmpty(){return 0===this.getChildrenSize()}isDirty(){const t=ni()._dirtyElements;return null!==t&&t.has(this.__key)}isLastChild(){const t=this.getLatest(),e=this.getParentOrThrow().getLastChild();return null!==e&&e.is(t)}getAllTextNodes(){const t=[];let e=this.getFirstChild();for(;null!==e;){if(sr(e)&&t.push(e),xi(e)){const n=e.getAllTextNodes();t.push(...n)}e=e.getNextSibling()}return t}getFirstDescendant(){let t=this.getFirstChild();for(;xi(t);){const e=t.getFirstChild();if(null===e)break;t=e}return t}getLastDescendant(){let t=this.getLastChild();for(;xi(t);){const e=t.getLastChild();if(null===e)break;t=e}return t}getDescendantByIndex(t){const e=this.getChildren(),n=e.length;if(t>=n){const t=e[n-1];return xi(t)&&t.getLastDescendant()||t||null}const r=e[t];return xi(r)&&r.getFirstDescendant()||r||null}getFirstChild(){const t=this.getLatest().__first;return null===t?null:Ss(t)}getFirstChildOrThrow(){const e=this.getFirstChild();return null===e&&t(45,this.__key),e}getLastChild(){const t=this.getLatest().__last;return null===t?null:Ss(t)}getLastChildOrThrow(){const e=this.getLastChild();return null===e&&t(96,this.__key),e}getChildAtIndex(t){const e=this.getChildrenSize();let n,r;if(t<e/2){for(n=this.getFirstChild(),r=0;null!==n&&r<=t;){if(r===t)return n;n=n.getNextSibling(),r++}return null}for(n=this.getLastChild(),r=e-1;null!==n&&r>=t;){if(r===t)return n;n=n.getPreviousSibling(),r--}return null}getTextContent(){let t=\"\";const e=this.getChildren(),n=e.length;for(let r=0;r<n;r++){const i=e[r];t+=i.getTextContent(),xi(i)&&r!==n-1&&!i.isInline()&&(t+=R)}return t}getTextContentSize(){let t=0;const e=this.getChildren(),n=e.length;for(let r=0;r<n;r++){const i=e[r];t+=i.getTextContentSize(),xi(i)&&r!==n-1&&!i.isInline()&&(t+=R.length)}return t}getDirection(){return this.getLatest().__dir}getTextFormat(){return this.getLatest().__textFormat}hasFormat(t){if(\"\"!==t){const e=Y[t];return!!(this.getFormat()&e)}return!1}hasTextFormat(t){const e=U[t];return!!(this.getTextFormat()&e)}getFormatFlags(t,e){return gs(this.getLatest().__textFormat,t,e)}getTextStyle(){return this.getLatest().__textStyle}select(t,e){Zr();const n=Pr();let r=t,i=e;const s=this.getChildrenSize();if(!this.canBeEmpty())if(0===t&&0===e){const t=this.getFirstChild();if(sr(t)||xi(t))return t.select(0,0)}else if(!(void 0!==t&&t!==s||void 0!==e&&e!==s)){const t=this.getLastChild();if(sr(t)||xi(t))return t.select()}void 0===r&&(r=s),void 0===i&&(i=s);const o=this.__key;return _r(n)?(n.anchor.set(o,r,\"element\"),n.focus.set(o,i,\"element\"),n.dirty=!0,n):Er(o,r,o,i,\"element\",\"element\")}selectStart(){const t=this.getFirstDescendant();return t?t.selectStart():this.select()}selectEnd(){const t=this.getLastDescendant();return t?t.selectEnd():this.select()}clear(){const t=this.getWritable();return this.getChildren().forEach((t=>t.remove())),t}append(...t){return this.splice(this.getChildrenSize(),0,t)}setDirection(t){const e=this.getWritable();return e.__dir=t,e}setFormat(t){return this.getWritable().__format=\"\"!==t?Y[t]:0,this}setStyle(t){return this.getWritable().__style=t||\"\",this}setTextFormat(t){const e=this.getWritable();return e.__textFormat=t,e}setTextStyle(t){const e=this.getWritable();return e.__textStyle=t,e}setIndent(t){return this.getWritable().__indent=t,this}splice(e,n,r){const i=r.length,s=this.getChildrenSize(),o=this.getWritable();e+n<=s||t(226,String(e),String(n),String(s));const l=o.__key,c=[],a=[],u=this.getChildAtIndex(e+n);let f=null,d=s-n+i;if(0!==e)if(e===s)f=this.getLastChild();else{const t=this.getChildAtIndex(e);null!==t&&(f=t.getPreviousSibling())}if(n>0){let e=null===f?this.getFirstChild():f.getNextSibling();for(let r=0;r<n;r++){null===e&&t(100);const n=e.getNextSibling(),r=e.__key;ys(e.getWritable()),a.push(r),e=n}}let h=f;for(let e=0;e<i;e++){const n=r[e];null!==h&&n.is(h)&&(f=h=h.getPreviousSibling());const i=n.getWritable();i.__parent===l&&d--,ys(i);const s=n.__key;if(null===h)o.__first=s,i.__prev=null;else{const t=h.getWritable();t.__next=s,i.__prev=t.__key}n.__key===l&&t(76),i.__parent=l,c.push(s),h=n}if(e+n===s){if(null!==h){h.getWritable().__next=null,o.__last=h.__key}}else if(null!==u){const t=u.getWritable();if(null!==h){const e=h.getWritable();t.__prev=h.__key,e.__next=u.__key}else t.__prev=null}if(o.__size=d,a.length){const t=Pr();if(_r(t)){const e=new Set(a),n=new Set(c),{anchor:r,focus:i}=t;Ci(r,e,n)&&zr(r,r.getNode(),this,f,u),Ci(i,e,n)&&zr(i,i.getNode(),this,f,u),0!==d||this.canBeEmpty()||fo(this)||this.remove()}}return o}getDOMSlot(t){return new pi(t)}exportDOM(t){const{element:e}=super.exportDOM(t);if(To(e)){const t=this.getIndent();t>0&&(e.style.paddingInlineStart=40*t+\"px\");const n=this.getDirection();n&&(e.dir=n)}return{element:e}}exportJSON(){const t={children:[],direction:this.getDirection(),format:this.getFormatType(),indent:this.getIndent(),...super.exportJSON()},e=this.getTextFormat(),n=this.getTextStyle();return 0!==e&&(t.textFormat=e),\"\"!==n&&(t.textStyle=n),t}updateFromJSON(t){return super.updateFromJSON(t).setFormat(t.format).setIndent(t.indent).setDirection(t.direction).setTextFormat(t.textFormat||0).setTextStyle(t.textStyle||\"\")}insertNewAfter(t,e){return null}canIndent(){return!0}collapseAtStart(t){return!1}excludeFromCopy(t){return!1}canReplaceWith(t){return!0}canInsertAfter(t){return!0}canBeEmpty(){return!0}canInsertTextBefore(){return!0}canInsertTextAfter(){return!0}isInline(){return!1}isShadowRoot(){return!1}canMergeWith(t){return!1}extractWithChild(t,e,n){return!1}canMergeWhenEmpty(){return!1}reconcileObservedMutation(t,e){const n=this.getDOMSlot(t);let r=n.getFirstChild();for(let t=this.getFirstChild();t;t=t.getNextSibling()){const i=e.getElementByKey(t.getKey());null!==i&&(null==r?(n.insertChild(i),r=i):r!==i&&n.replaceChild(i,r),r=r.nextSibling)}}}function xi(t){return t instanceof mi}function Ci(t,e,n){let r=t.getNode();for(;r;){const t=r.__key;if(e.has(t)&&!n.has(t))return!0;r=r.getParent()}return!1}class Si extends zn{decorate(e,n){t(47)}isIsolated(){return!1}isInline(){return!0}isKeyboardSelectable(){return!0}}function vi(t){return t instanceof Si}class Ti extends mi{static getType(){return\"root\"}static clone(){return new Ti}constructor(){super(\"root\"),this.__cachedText=null}getTopLevelElementOrThrow(){t(51)}getTextContent(){const t=this.__cachedText;return!Qr()&&ni()._dirtyType!==y||null===t?super.getTextContent():t}remove(){t(52)}replace(e){t(53)}insertBefore(e){t(54)}insertAfter(e){t(55)}updateDOM(t,e){return!1}splice(e,n,r){for(const e of r)xi(e)||vi(e)||t(282);return super.splice(e,n,r)}static importJSON(t){return ws().updateFromJSON(t)}collapseAtStart(){return!0}}function ki(t){return t instanceof Ti}function Ni(t){return new Ei(new Map(t._nodeMap))}function bi(){return new Ei(new Map([[\"root\",new Ti]]))}function wi(e){const n=e.exportJSON(),r=e.constructor;if(n.type!==r.getType()&&t(130,r.name),xi(e)){const i=n.children;Array.isArray(i)||t(59,r.name);const s=e.getChildren();for(let t=0;t<s.length;t++){const e=wi(s[t]);i.push(e)}}return n}class Ei{constructor(t,e){this._nodeMap=t,this._selection=e||null,this._flushSync=!1,this._readOnly=!1}isEmpty(){return 1===this._nodeMap.size&&null===this._selection}read(t,e){return ui(e&&e.editor||null,this,t)}clone(t){const e=new Ei(this._nodeMap,void 0===t?this._selection:t);return e._readOnly=!0,e}toJSON(){return ui(null,this,(()=>({root:wi(ws())})))}}const Mi=\"historic\",Oi=\"history-push\",Ai=\"history-merge\",Di=\"paste\",Pi=\"collaboration\",Fi=\"skip-collab\",Li=\"skip-scroll-into-view\",Ii=\"skip-dom-selection\";class zi extends mi{static getType(){return\"artificial\"}createDOM(t){return document.createElement(\"div\")}}class Ki extends mi{static getType(){return\"paragraph\"}static clone(t){return new Ki(t.__key)}createDOM(t){const e=document.createElement(\"p\"),n=Vs(t.theme,\"paragraph\");if(void 0!==n){e.classList.add(...n)}return e}updateDOM(t,e,n){return!1}static importDOM(){return{p:t=>({conversion:Ri,priority:0})}}exportDOM(t){const{element:e}=super.exportDOM(t);if(To(e)){this.isEmpty()&&e.append(document.createElement(\"br\"));const t=this.getFormatType();t&&(e.style.textAlign=t)}return{element:e}}static importJSON(t){return Bi().updateFromJSON(t)}exportJSON(){return{...super.exportJSON(),textFormat:this.getTextFormat(),textStyle:this.getTextStyle()}}insertNewAfter(t,e){const n=Bi();n.setTextFormat(t.format),n.setTextStyle(t.style);const r=this.getDirection();return n.setDirection(r),n.setFormat(this.getFormatType()),n.setStyle(this.getStyle()),this.insertAfter(n,e),n}collapseAtStart(){const t=this.getChildren();if(0===t.length||sr(t[0])&&\"\"===t[0].getTextContent().trim()){if(null!==this.getNextSibling())return this.selectNext(),this.remove(),!0;if(null!==this.getPreviousSibling())return this.selectPrevious(),this.remove(),!0}return!1}}function Ri(t){const e=Bi();return t.style&&(e.setFormat(t.style.textAlign),Lo(t,e)),{node:e}}function Bi(){return go(new Ki)}function Wi(t){return t instanceof Ki}const Ji=0,$i=1,ji=2,Ui=3,Vi=4;function Yi(t,e,n,r){const i=t._keyToDOMMap;i.clear(),t._editorState=bi(),t._pendingEditorState=r,t._compositionKey=null,t._dirtyType=y,t._cloneNotNeeded.clear(),t._dirtyLeaves=new Set,t._dirtyElements.clear(),t._normalizedNodes=new Set,t._updateTags=new Set,t._updates=[],t._blockCursorElement=null;const s=t._observer;null!==s&&(s.disconnect(),t._observer=null),null!==e&&(e.textContent=\"\"),null!==n&&(n.textContent=\"\",i.set(\"root\",n))}function Hi(t){const e=t||{},n=ii(),r=e.theme||{},i=void 0===t?n:e.parentEditor||null,s=e.disableEvents||!1,o=bi(),l=e.namespace||(null!==i?i._config.namespace:Fs()),c=e.editorState,a=[Ti,qn,Kn,lr,Ki,zi,...e.nodes||[]],{onError:u,html:f}=e,d=void 0===e.editable||e.editable;let h;if(void 0===t&&null!==n)h=n._nodes;else{h=new Map;for(let t=0;t<a.length;t++){let e=a[t],n=null,r=null;if(\"function\"!=typeof e){const t=e;e=t.replace,n=t.with,r=t.withKlass||null}const{ownNodeConfig:i}=Ro(e),s=e.getType(),o=e.transform(),l=new Set;i&&i.$transform&&l.add(i.$transform),null!==o&&l.add(o),h.set(s,{exportDOM:f&&f.export?f.export.get(e):void 0,klass:e,replace:n,replaceWithKlass:r,sharedNodeState:pt(a[t]),transforms:l})}}const g=new qi(o,i,h,{disableEvents:s,namespace:l,theme:r},u||console.error,function(t,e){const n=new Map,r=new Set,i=t=>{Object.keys(t).forEach((e=>{let r=n.get(e);void 0===r&&(r=[],n.set(e,r)),r.push(t[e])}))};return t.forEach((t=>{const e=t.klass.importDOM;if(null==e||r.has(e))return;r.add(e);const n=e.call(t.klass);null!==n&&i(n)})),e&&i(e),n}(h,f?f.import:void 0),d,t);return void 0!==c&&(g._pendingEditorState=c,g._dirtyType=x),g}class qi{constructor(t,e,n,r,i,s,o,l){this._createEditorArgs=l,this._parentEditor=e,this._rootElement=null,this._editorState=t,this._pendingEditorState=null,this._compositionKey=null,this._deferred=[],this._keyToDOMMap=new Map,this._updates=[],this._updating=!1,this._listeners={decorator:new Set,editable:new Set,mutation:new Map,root:new Set,textcontent:new Set,update:new Set},this._commands=new Map,this._config=r,this._nodes=n,this._decorators={},this._pendingDecorators=null,this._dirtyType=y,this._cloneNotNeeded=new Set,this._dirtyLeaves=new Set,this._dirtyElements=new Map,this._normalizedNodes=new Set,this._updateTags=new Set,this._observer=null,this._key=Fs(),this._onError=i,this._htmlConversions=s,this._editable=o,this._headless=null!==e&&e._headless,this._window=null,this._blockCursorElement=null}isComposing(){return null!=this._compositionKey}registerUpdateListener(t){const e=this._listeners.update;return e.add(t),()=>{e.delete(t)}}registerEditableListener(t){const e=this._listeners.editable;return e.add(t),()=>{e.delete(t)}}registerDecoratorListener(t){const e=this._listeners.decorator;return e.add(t),()=>{e.delete(t)}}registerTextContentListener(t){const e=this._listeners.textcontent;return e.add(t),()=>{e.delete(t)}}registerRootListener(t){const e=this._listeners.root;return t(this._rootElement,null),e.add(t),()=>{t(null,this._rootElement),e.delete(t)}}registerCommand(e,n,r){void 0===r&&t(35);const i=this._commands;i.has(e)||i.set(e,[new Set,new Set,new Set,new Set,new Set]);const s=i.get(e);void 0===s&&t(36,String(e));const o=s[r];return o.add(n),()=>{o.delete(n),s.every((t=>0===t.size))&&i.delete(e)}}registerMutationListener(t,e,n){const r=this.resolveRegisteredNodeAfterReplacements(this.getRegisteredNode(t)).klass,i=this._listeners.mutation;let s=i.get(e);void 0===s&&(s=new Set,i.set(e,s)),s.add(r);const o=n&&n.skipInitialization;return void 0!==o&&o||this.initializeMutationListener(e,r),()=>{s.delete(r),0===s.size&&i.delete(e)}}getRegisteredNode(e){const n=this._nodes.get(e.getType());return void 0===n&&t(37,e.name),n}resolveRegisteredNodeAfterReplacements(t){for(;t.replaceWithKlass;)t=this.getRegisteredNode(t.replaceWithKlass);return t}initializeMutationListener(t,e){const n=this._editorState,r=Po(n).get(e.getType());if(!r)return;const i=new Map;for(const t of r.keys())i.set(t,\"created\");i.size>0&&t(i,{dirtyLeaves:new Set,prevEditorState:n,updateTags:new Set([\"registerMutationListener\"])})}registerNodeTransformToKlass(t,e){const n=this.getRegisteredNode(t);return n.transforms.add(e),n}registerNodeTransform(t,e){const n=this.registerNodeTransformToKlass(t,e),r=[n],i=n.replaceWithKlass;if(null!=i){const t=this.registerNodeTransformToKlass(i,e);r.push(t)}return function(t,e){const n=Po(t.getEditorState()),r=[];for(const t of e){const e=n.get(t);e&&r.push(e)}if(0===r.length)return;t.update((()=>{for(const t of r)for(const e of t.keys()){const t=Ss(e);t&&t.markDirty()}}),null===t._pendingEditorState?{tag:Ai}:void 0)}(this,r.map((t=>t.klass.getType()))),()=>{r.forEach((t=>t.transforms.delete(e)))}}hasNode(t){return this._nodes.has(t.getType())}hasNodes(t){return t.every(this.hasNode.bind(this))}dispatchCommand(t,e){return Qs(this,t,e)}getDecorators(){return this._decorators}getRootElement(){return this._rootElement}getKey(){return this._key}setRootElement(t){const e=this._rootElement;if(t!==e){const n=Vs(this._config.theme,\"root\"),r=this._pendingEditorState||this._editorState;if(this._rootElement=t,Yi(this,e,t,r),null!==e&&(this._config.disableEvents||Fn(e),null!=n&&e.classList.remove(...n)),null!==t){const e=lo(t),r=t.style;r.userSelect=\"text\",r.whiteSpace=\"pre-wrap\",r.wordBreak=\"break-word\",t.setAttribute(\"data-lexical-editor\",\"true\"),this._window=e,this._dirtyType=x,ut(this),this._updateTags.add(Ai),fi(this),this._config.disableEvents||function(t,e){const n=t.ownerDocument,r=dn.get(n);(void 0===r||r<1)&&n.addEventListener(\"selectionchange\",On),dn.set(n,(r||0)+1),t.__lexicalEditor=e;const i=En(t);for(let n=0;n<ln.length;n++){const[r,s]=ln[n],o=\"function\"==typeof s?t=>{Dn(t)||(An(t),(e.isEditable()||\"click\"===r)&&s(t,e))}:t=>{if(Dn(t))return;An(t);const n=e.isEditable();switch(r){case\"cut\":return n&&Qs(e,qe,t);case\"copy\":return Qs(e,He,t);case\"paste\":return n&&Qs(e,Ce,t);case\"dragstart\":return n&&Qs(e,Ue,t);case\"dragover\":return n&&Qs(e,Ve,t);case\"dragend\":return n&&Qs(e,Ye,t);case\"focus\":return n&&Qs(e,en,t);case\"blur\":return n&&Qs(e,nn,t);case\"drop\":return n&&Qs(e,$e,t)}};t.addEventListener(r,o),i.push((()=>{t.removeEventListener(r,o)}))}}(t,this),null!=n&&t.classList.add(...n)}else this._window=null,this._updateTags.add(Ai),fi(this);di(\"root\",this,!1,t,e)}}getElementByKey(t){return this._keyToDOMMap.get(t)||null}getEditorState(){return this._editorState}setEditorState(e,n){e.isEmpty()&&t(38);let r=e;r._readOnly&&(r=Ni(e),r._selection=e._selection?e._selection.clone():null),at(this);const i=this._pendingEditorState,s=this._updateTags,o=void 0!==n?n.tag:null;null===i||i.isEmpty()||(null!=o&&s.add(o),fi(this)),this._pendingEditorState=r,this._dirtyType=x,this._dirtyElements.set(\"root\",!1),this._compositionKey=null,null!=o&&s.add(o),this._updating||fi(this)}parseEditorState(t,e){return function(t,e,n){const r=bi(),i=Vr,s=Hr,o=Yr,l=e._dirtyElements,c=e._dirtyLeaves,a=e._cloneNotNeeded,u=e._dirtyType;e._dirtyElements=new Map,e._dirtyLeaves=new Set,e._cloneNotNeeded=new Set,e._dirtyType=0,Vr=r,Hr=!1,Yr=e,Xi(null);try{const i=e._nodes;ai(t.root,i),n&&n(),r._readOnly=!0}catch(t){t instanceof Error&&e._onError(t)}finally{e._dirtyElements=l,e._dirtyLeaves=c,e._cloneNotNeeded=a,e._dirtyType=u,Vr=i,Hr=s,Yr=o}return r}(\"string\"==typeof t?JSON.parse(t):t,this,e)}read(t){return fi(this),this.getEditorState().read(t,{editor:this})}update(t,e){!function(t,e,n){t._updating?t._updates.push([e,n]):gi(t,e,n)}(this,t,e)}focus(t,e={}){const n=this._rootElement;null!==n&&(n.setAttribute(\"autocapitalize\",\"off\"),_i(this,(()=>{const r=Pr(),i=ws();null!==r?r.dirty||Ms(r.clone()):0!==i.getChildrenSize()&&(\"rootStart\"===e.defaultSelection?i.selectStart():i.selectEnd()),io(\"focus\"),so((()=>{n.removeAttribute(\"autocapitalize\"),t&&t()}))})),null===this._pendingEditorState&&n.removeAttribute(\"autocapitalize\"))}blur(){const t=this._rootElement;null!==t&&t.blur();const e=xo(this._window);null!==e&&e.removeAllRanges()}isEditable(){return this._editable}setEditable(t){this._editable!==t&&(this._editable=t,di(\"editable\",this,!0,t))}toJSON(){return{editorState:this._editorState.toJSON()}}}qi.version=\"0.33.1+prod.esm\";let Gi=null;function Xi(t){Gi=t}let Qi=1;function Zi(){Qi=1}function ts(e,n){const r=es(e,n);return void 0===r&&t(30,n),r}function es(t,e){return t._nodes.get(e)}const ns=\"function\"==typeof queueMicrotask?queueMicrotask:t=>{Promise.resolve().then(t)};function rs(t){return vi(ks(t))}function is(t){const e=document.activeElement;if(!To(e))return!1;const n=e.nodeName;return vi(ks(t))&&(\"INPUT\"===n||\"TEXTAREA\"===n||\"true\"===e.contentEditable&&null==cs(e))}function ss(t,e,n){const r=t.getRootElement();try{return null!==r&&r.contains(e)&&r.contains(n)&&null!==e&&!is(e)&&ls(e)===t}catch(t){return!1}}function os(t){return t instanceof qi}function ls(t){let e=t;for(;null!=e;){const t=cs(e);if(os(t))return t;e=eo(e)}return null}function cs(t){return t?t.__lexicalEditor:null}function as(t){return ar(t)||t.isToken()}function us(t){return as(t)||t.isSegmented()}function fs(t){return ko(t)&&t.nodeType===g}function ds(t){return ko(t)&&t.nodeType===_}function hs(t){let e=t;for(;null!=e;){if(fs(e))return e;e=e.firstChild}return null}function gs(t,e,n){const r=U[e];if(null!==n&&(t&r)==(n&r))return t;let i=t^r;return\"subscript\"===e?i&=~U.superscript:\"superscript\"===e?i&=~U.subscript:\"lowercase\"===e?(i&=~U.uppercase,i&=~U.capitalize):\"uppercase\"===e?(i&=~U.lowercase,i&=~U.capitalize):\"capitalize\"===e&&(i&=~U.lowercase,i&=~U.uppercase),i}function _s(t){return sr(t)||Wn(t)||vi(t)}function ps(t,e){const n=function(){const t=Gi;return Gi=null,t}();if(null!=(e=e||n&&n.__key))return void(t.__key=e);Zr(),ti();const r=ni(),i=ei(),s=\"\"+Qi++;i._nodeMap.set(s,t),xi(t)?r._dirtyElements.set(s,!0):r._dirtyLeaves.add(s),r._cloneNotNeeded.add(s),r._dirtyType=m,t.__key=s}function ys(t){const e=t.getParent();if(null!==e){const n=t.getWritable(),r=e.getWritable(),i=t.getPreviousSibling(),s=t.getNextSibling(),o=null!==s?s.__key:null,l=null!==i?i.__key:null,c=null!==i?i.getWritable():null,a=null!==s?s.getWritable():null;null===i&&(r.__first=o),null===s&&(r.__last=l),null!==c&&(c.__next=o),null!==a&&(a.__prev=l),n.__prev=null,n.__next=null,n.__parent=null,r.__size--}}function ms(t){ti();const e=t.getLatest(),n=e.__parent,r=ei(),i=ni(),s=r._nodeMap,o=i._dirtyElements;null!==n&&function(t,e,n){let r=t;for(;null!==r;){if(n.has(r))return;const t=e.get(r);if(void 0===t)break;n.set(r,!1),r=t.__parent}}(n,s,o);const l=e.__key;i._dirtyType=m,xi(t)?o.set(l,!0):i._dirtyLeaves.add(l)}function xs(t){Zr();const e=ni(),n=e._compositionKey;if(t!==n){if(e._compositionKey=t,null!==n){const t=Ss(n);null!==t&&t.getWritable()}if(null!==t){const e=Ss(t);null!==e&&e.getWritable()}}}function Cs(){if(Qr())return null;return ni()._compositionKey}function Ss(t,e){const n=(e||ei())._nodeMap.get(t);return void 0===n?null:n}function vs(t,e){const n=Ts(t,ni());return void 0!==n?Ss(n,e):null}function Ts(t,e){return t[`__lexicalKey_${e._key}`]}function ks(t,e){let n=t;for(;null!=n;){const t=vs(n,e);if(null!==t)return t;n=eo(n)}return null}function Ns(t){const e=t._decorators,n=Object.assign({},e);return t._pendingDecorators=n,n}function bs(t){return t.read((()=>ws().getTextContent()))}function ws(){return Es(ei())}function Es(t){return t._nodeMap.get(\"root\")}function Ms(t){Zr();const e=ei();null!==t&&(t.dirty=!0,t.setCachedNodes(null)),e._selection=t}function Os(t){const e=ni(),n=function(t,e){let n=t;for(;null!=n;){const t=Ts(n,e);if(void 0!==t)return t;n=eo(n)}return null}(t,e);if(null===n){return t===e.getRootElement()?Ss(\"root\"):null}return Ss(n)}function As(t,e){return e?t.getTextContentSize():0}function Ds(t){return/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g.test(t)}function Ps(t){const e=[];let n=t;for(;null!==n;)e.push(n),n=n._parentEditor;return e}function Fs(){return Math.random().toString(36).replace(/[^a-z]+/g,\"\").substring(0,5)}function Ls(t){return fs(t)?t.nodeValue:null}function Is(t,e,n){const r=xo(co(e));if(null===r)return;const i=r.anchorNode;let{anchorOffset:s,focusOffset:o}=r;if(null!==i){let e=Ls(i);const r=ks(i);if(null!==e&&sr(r)){if(e===K&&n){const t=n.length;e=n,s=t,o=t}null!==e&&zs(r,e,s,o,t)}}}function zs(t,e,n,r,i){let s=t;if(s.isAttached()&&(i||!s.isDirty())){const c=s.isComposing();let a=e;(c||i)&&e[e.length-1]===K&&(a=e.slice(0,-1));const u=s.getTextContent();if(i||a!==u){if(\"\"===a){if(xs(null),o||l||f)s.remove();else{const t=ni();setTimeout((()=>{t.update((()=>{s.isAttached()&&s.remove()}))}),20)}return}const e=s.getParent(),i=Fr(),u=s.getTextContentSize(),d=Cs(),h=s.getKey();if(s.isToken()||null!==d&&h===d&&!c||_r(i)&&(null!==e&&!e.canInsertTextBefore()&&0===i.anchor.offset||i.anchor.key===t.__key&&0===i.anchor.offset&&!s.canInsertTextBefore()&&!c||i.focus.key===t.__key&&i.focus.offset===u&&!s.canInsertTextAfter()&&!c))return void s.markDirty();const g=Pr();if(!_r(g)||null===n||null===r)return void s.setTextContent(a);if(g.setTextNodeRange(s,n,s,r),s.isSegmented()){const t=ir(s.getTextContent());s.replace(t),s=t}s.setTextContent(a)}}}function Ks(t,e,n){const r=e[n]||!1;return\"any\"===r||r===t[n]}function Rs(t,e){return Ks(t,e,\"altKey\")&&Ks(t,e,\"ctrlKey\")&&Ks(t,e,\"shiftKey\")&&Ks(t,e,\"metaKey\")}function Bs(t,e,n){return Rs(t,n)&&t.key.toLowerCase()===e.toLowerCase()}const Ws={ctrlKey:!r,metaKey:r},Js={altKey:r,ctrlKey:!r};function $s(t){return\"Backspace\"===t.key}function js(t){return Bs(t,\"a\",Ws)}function Us(t){const e=ws();if(_r(t)){const e=t.anchor,n=t.focus,r=e.getNode().getTopLevelElementOrThrow().getParentOrThrow();return e.set(r.getKey(),0,\"element\"),n.set(r.getKey(),r.getChildrenSize(),\"element\"),Et(t),t}{const t=e.select(0,e.getChildrenSize());return Ms(Et(t)),t}}function Vs(t,e){void 0===t.__lexicalClassNameCache&&(t.__lexicalClassNameCache={});const n=t.__lexicalClassNameCache,r=n[e];if(void 0!==r)return r;const i=t[e];if(\"string\"==typeof i){const t=d(i);return n[e]=t,t}return i}function Ys(e,n,r,i,s){if(0===r.size)return;const o=i.__type,l=i.__key,c=n.get(o);void 0===c&&t(33,o);const a=c.klass;let u=e.get(a);void 0===u&&(u=new Map,e.set(a,u));const f=u.get(l),d=\"destroyed\"===f&&\"created\"===s;(void 0===f||d)&&u.set(l,d?\"updated\":s)}function Hs(t){const e=t.getType(),n=ei();if(n._readOnly){const t=Po(n).get(e);return t?Array.from(t.values()):[]}const r=n._nodeMap,i=[];for(const[,n]of r)n instanceof t&&n.__type===e&&n.isAttached()&&i.push(n);return i}function qs(t,e,n){const r=t.getParent();let i=n,s=t;return null!==r&&(e&&0===n?(i=s.getIndexWithinParent(),s=r):e||n!==s.getChildrenSize()||(i=s.getIndexWithinParent()+1,s=r)),s.getChildAtIndex(e?i-1:i)}function Gs(t,e){const n=t.offset;if(\"element\"===t.type){return qs(t.getNode(),e,n)}{const r=t.getNode();if(e&&0===n||!e&&n===r.getTextContentSize()){const t=e?r.getPreviousSibling():r.getNextSibling();return null===t?qs(r.getParentOrThrow(),e,r.getIndexWithinParent()+(e?0:1)):t}}return null}function Xs(t){const e=co(t).event,n=e&&e.inputType;return\"insertFromPaste\"===n||\"insertFromPasteAsQuotation\"===n}function Qs(t,e,n){return function(t,e,n){const r=Ps(t);for(let i=4;i>=0;i--)for(let s=0;s<r.length;s++){const o=r[s],l=o._commands.get(e);if(void 0!==l){const e=l[i];if(void 0!==e){const r=Array.from(e),i=r.length;let s=!1;if(_i(o,(()=>{for(let e=0;e<i;e++)if(r[e](n,t))return void(s=!0)})),s)return s}}}return!1}(t,e,n)}function Zs(t){return!ki(t)&&!t.isLastChild()&&!t.isInline()}function to(e,n){const r=e._keyToDOMMap.get(n);return void 0===r&&t(75,n),r}function eo(t){const e=t.assignedSlot||t.parentElement;return No(e)?e.host:e}function no(t){return ds(t)?t:To(t)?t.ownerDocument:null}function ro(t){return ni()._updateTags.has(t)}function io(t){Zr();ni()._updateTags.add(t)}function so(t){Zr();ni()._deferred.push(t)}function oo(t,e){let n=t.getParent();for(;null!==n;){if(n.is(e))return!0;n=n.getParent()}return!1}function lo(t){const e=no(t);return e?e.defaultView:null}function co(e){const n=e._window;return null===n&&t(78),n}function ao(t){return xi(t)&&t.isInline()||vi(t)&&t.isInline()}function uo(t){let e=t.getParentOrThrow();for(;null!==e;){if(fo(e))return e;e=e.getParentOrThrow()}return e}function fo(t){return ki(t)||xi(t)&&t.isShadowRoot()}function ho(t){const e=t.constructor.clone(t);return ps(e,null),e.afterCloneFrom(t),e}function go(e){const n=ni(),r=e.getType(),i=es(n,r);void 0===i&&t(200,e.constructor.name,r);const{replace:s,replaceWithKlass:o}=i;if(null!==s){const n=s(e),i=n.constructor;return null!==o?n instanceof o||t(201,o.name,o.getType(),i.name,i.getType(),e.constructor.name,r):n instanceof e.constructor&&i!==e.constructor||t(202,i.name,i.getType(),e.constructor.name,r),n.__key===e.__key&&t(203,e.constructor.name,r,i.name,i.getType()),n}return e}function _o(e,n){!ki(e.getParent())||xi(n)||vi(n)||t(99)}function po(e){const n=Ss(e);return null===n&&t(63,e),n}function yo(t){return(vi(t)||xi(t)&&!t.canBeEmpty())&&!t.isInline()}function mo(t,e,n){n.style.removeProperty(\"caret-color\"),e._blockCursorElement=null;const r=t.parentElement;null!==r&&r.removeChild(t)}function xo(t){return e?(t||window).getSelection():null}function Co(t){const e=lo(t);return e?e.getSelection():null}function So(e,n){let r=e.getChildAtIndex(n);null==r&&(r=e),fo(e)&&t(102);const i=e=>{const n=e.getParentOrThrow(),s=fo(n),o=e!==r||s?ho(e):e;if(s)return xi(e)&&xi(o)||t(133),e.insertAfter(o),[e,o,o];{const[t,r,s]=i(n),l=e.getNextSiblings();return s.append(o,...l),[t,r,o]}},[s,o]=i(r);return[s,o]}function vo(t){return To(t)&&\"A\"===t.tagName}function To(t){return ko(t)&&t.nodeType===h}function ko(t){return\"object\"==typeof t&&null!==t&&\"nodeType\"in t&&\"number\"==typeof t.nodeType}function No(t){return ko(t)&&t.nodeType===p}function bo(t){const e=new RegExp(/^(a|abbr|acronym|b|cite|code|del|em|i|ins|kbd|label|mark|output|q|ruby|s|samp|span|strong|sub|sup|time|u|tt|var|#text)$/,\"i\");return null!==t.nodeName.match(e)}function wo(t){const e=new RegExp(/^(address|article|aside|blockquote|canvas|dd|div|dl|dt|fieldset|figcaption|figure|footer|form|h1|h2|h3|h4|h5|h6|header|hr|li|main|nav|noscript|ol|p|pre|section|table|td|tfoot|ul|video)$/,\"i\");return null!==t.nodeName.match(e)}function Eo(t){if(vi(t)&&!t.isInline())return!0;if(!xi(t)||fo(t))return!1;const e=t.getFirstChild(),n=null===e||Wn(e)||sr(e)||e.isInline();return!t.isInline()&&!1!==t.canBeEmpty()&&n}function Mo(t,e){let n=t;for(;null!==n&&null!==n.getParent()&&!e(n);)n=n.getParentOrThrow();return e(n)?n:null}function Oo(){return ni()}const Ao=new WeakMap,Do=new Map;function Po(e){if(!e._readOnly&&e.isEmpty())return Do;e._readOnly||t(192);let n=Ao.get(e);return n||(n=function(t){const e=new Map;for(const[n,r]of t._nodeMap){const t=r.__type;let i=e.get(t);i||(i=new Map,e.set(t,i)),i.set(n,r)}return e}(e),Ao.set(e,n)),n}function Fo(t){const e=t.constructor.clone(t);return e.afterCloneFrom(t),e}function Lo(t,e){const n=parseInt(t.style.paddingInlineStart,10)||0,r=Math.round(n/40);e.setIndent(r)}function Io(t){t.__lexicalUnmanaged=!0}function zo(t){return!0===t.__lexicalUnmanaged}function Ko(t,e){return function(t,e){return Object.prototype.hasOwnProperty.call(t,e)}(t,e)&&t[e]!==zn[e]}function Ro(t){const e=Q in t.prototype?t.prototype[Q]():void 0,n=function(t){return t===Si||t===mi||t===zn}(t),r=!n&&Ko(t,\"getType\")?t.getType():void 0;let i,s=r;if(e)if(r)i=e[r];else for(const[t,n]of Object.entries(e))s=t,i=n;if(!n&&s&&(Ko(t,\"getType\")||(t.getType=()=>s),Ko(t,\"clone\")||(t.clone=e=>(Xi(e),new t)),Ko(t,\"importJSON\")||(t.importJSON=i&&i.$importJSON||(e=>(new t).updateFromJSON(e))),!Ko(t,\"importDOM\")&&i)){const{importDOM:e}=i;e&&(t.importDOM=()=>e)}return{ownNodeConfig:i,ownNodeType:s}}function Bo(t){const e=Oo();Zr();return new(e.resolveRegisteredNodeAfterReplacements(e.getRegisteredNode(t)).klass)}const Wo={next:\"previous\",previous:\"next\"};class Jo{constructor(t){this.origin=t}[Symbol.iterator](){return _l({hasNext:Xo,initial:this.getAdjacentCaret(),map:t=>t,step:t=>t.getAdjacentCaret()})}getAdjacentCaret(){return nl(this.getNodeAtCaret(),this.direction)}getSiblingCaret(){return nl(this.origin,this.direction)}remove(){const t=this.getNodeAtCaret();return t&&t.remove(),this}replaceOrInsert(t,e){const n=this.getNodeAtCaret();return t.is(this.origin)||t.is(n)||(null===n?this.insert(t):n.replace(t,e)),this}splice(e,n,r=\"next\"){const i=r===this.direction?n:Array.from(n).reverse();let s=this;const o=this.getParentAtCaret(),l=new Map;for(let t=s.getAdjacentCaret();null!==t&&l.size<e;t=t.getAdjacentCaret()){const e=t.origin.getWritable();l.set(e.getKey(),e)}for(const e of i){if(l.size>0){const n=s.getNodeAtCaret();if(n)if(l.delete(n.getKey()),l.delete(e.getKey()),n.is(e)||s.origin.is(e));else{const t=e.getParent();t&&t.is(o)&&e.remove(),n.replace(e)}else null===n&&t(263,Array.from(l).join(\" \"))}else s.insert(e);s=nl(e,this.direction)}for(const t of l.values())t.remove();return this}}class $o extends Jo{type=\"child\";getLatest(){const t=this.origin.getLatest();return t===this.origin?this:ol(t,this.direction)}getParentCaret(t=\"root\"){return nl(Vo(this.getParentAtCaret(),t),this.direction)}getFlipped(){const t=Uo(this.direction);return nl(this.getNodeAtCaret(),t)||ol(this.origin,t)}getParentAtCaret(){return this.origin}getChildCaret(){return this}isSameNodeCaret(t){return t instanceof $o&&this.direction===t.direction&&this.origin.is(t.origin)}isSamePointCaret(t){return this.isSameNodeCaret(t)}}const jo={root:ki,shadowRoot:fo};function Uo(t){return Wo[t]}function Vo(t,e=\"root\"){return jo[e](t)?null:t}class Yo extends Jo{type=\"sibling\";getLatest(){const t=this.origin.getLatest();return t===this.origin?this:nl(t,this.direction)}getSiblingCaret(){return this}getParentAtCaret(){return this.origin.getParent()}getChildCaret(){return xi(this.origin)?ol(this.origin,this.direction):null}getParentCaret(t=\"root\"){return nl(Vo(this.getParentAtCaret(),t),this.direction)}getFlipped(){const t=Uo(this.direction);return nl(this.getNodeAtCaret(),t)||ol(this.origin.getParentOrThrow(),t)}isSamePointCaret(t){return t instanceof Yo&&this.direction===t.direction&&this.origin.is(t.origin)}isSameNodeCaret(t){return(t instanceof Yo||t instanceof Ho)&&this.direction===t.direction&&this.origin.is(t.origin)}}class Ho extends Jo{type=\"text\";constructor(t,e){super(t),this.offset=e}getLatest(){const t=this.origin.getLatest();return t===this.origin?this:rl(t,this.direction,this.offset)}getParentAtCaret(){return this.origin.getParent()}getChildCaret(){return null}getParentCaret(t=\"root\"){return nl(Vo(this.getParentAtCaret(),t),this.direction)}getFlipped(){return rl(this.origin,Uo(this.direction),this.offset)}isSamePointCaret(t){return t instanceof Ho&&this.direction===t.direction&&this.origin.is(t.origin)&&this.offset===t.offset}isSameNodeCaret(t){return(t instanceof Yo||t instanceof Ho)&&this.direction===t.direction&&this.origin.is(t.origin)}getSiblingCaret(){return nl(this.origin,this.direction)}}function qo(t){return t instanceof Ho}function Go(t){return t instanceof Jo}function Xo(t){return t instanceof Yo}function Qo(t){return t instanceof $o}const Zo={next:class extends Ho{direction=\"next\";getNodeAtCaret(){return this.origin.getNextSibling()}insert(t){return this.origin.insertAfter(t),this}},previous:class extends Ho{direction=\"previous\";getNodeAtCaret(){return this.origin.getPreviousSibling()}insert(t){return this.origin.insertBefore(t),this}}},tl={next:class extends Yo{direction=\"next\";getNodeAtCaret(){return this.origin.getNextSibling()}insert(t){return this.origin.insertAfter(t),this}},previous:class extends Yo{direction=\"previous\";getNodeAtCaret(){return this.origin.getPreviousSibling()}insert(t){return this.origin.insertBefore(t),this}}},el={next:class extends $o{direction=\"next\";getNodeAtCaret(){return this.origin.getFirstChild()}insert(t){return this.origin.splice(0,0,[t]),this}},previous:class extends $o{direction=\"previous\";getNodeAtCaret(){return this.origin.getLastChild()}insert(t){return this.origin.splice(this.origin.getChildrenSize(),0,[t]),this}}};function nl(t,e){return t?new tl[e](t):null}function rl(t,e,n){return t?new Zo[e](t,il(t,n)):null}function il(t,e){const n=t.getTextContentSize();let r=\"next\"===e?n:\"previous\"===e?0:e;return(r<0||r>n)&&(!function(t,...e){const n=new URL(\"https://lexical.dev/docs/error\"),r=new URLSearchParams;r.append(\"code\",t);for(const t of e)r.append(\"v\",t);n.search=r.toString(),console.warn(`Minified Lexical warning #${t}; visit ${n.toString()} for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`)}(284,String(e),String(n),t.getKey()),r=r<0?0:n),r}function sl(t,e){return new ul(t,e)}function ol(t,e){return xi(t)?new el[e](t):null}function ll(t){return t&&t.getChildCaret()||t}function cl(t){return t&&ll(t.getAdjacentCaret())}class al{type=\"node-caret-range\";constructor(t,e,n){this.anchor=t,this.focus=e,this.direction=n}getLatest(){const t=this.anchor.getLatest(),e=this.focus.getLatest();return t===this.anchor&&e===this.focus?this:new al(t,e,this.direction)}isCollapsed(){return this.anchor.isSamePointCaret(this.focus)}getTextSlices(){const t=t=>{const e=this[t].getLatest();return qo(e)?function(t,e){const{direction:n,origin:r}=t,i=il(r,\"focus\"===e?Uo(n):n);return sl(t,i-t.offset)}(e,t):null},e=t(\"anchor\"),n=t(\"focus\");if(e&&n){const{caret:t}=e,{caret:r}=n;if(t.isSameNodeCaret(r))return[sl(t,r.offset-t.offset),null]}return[e,n]}iterNodeCarets(t=\"root\"){const e=qo(this.anchor)?this.anchor.getSiblingCaret():this.anchor.getLatest(),n=this.focus.getLatest(),r=qo(n),i=e=>e.isSameNodeCaret(n)?null:cl(e)||e.getParentCaret(t);return _l({hasNext:t=>null!==t&&!(r&&n.isSameNodeCaret(t)),initial:e.isSameNodeCaret(n)?null:i(e),map:t=>t,step:i})}[Symbol.iterator](){return this.iterNodeCarets(\"root\")}}class ul{type=\"slice\";constructor(t,e){this.caret=t,this.distance=e}getSliceIndices(){const{distance:t,caret:{offset:e}}=this,n=e+t;return n<e?[n,e]:[e,n]}getTextContent(){const[t,e]=this.getSliceIndices();return this.caret.origin.getTextContent().slice(t,e)}getTextContentSize(){return Math.abs(this.distance)}removeTextSlice(){const{caret:{origin:t,direction:e}}=this,[n,r]=this.getSliceIndices(),i=t.getTextContent();return rl(t.setTextContent(i.slice(0,n)+i.slice(r)),e,n)}}function fl(t){return t instanceof ul}function dl(t){return gl(t,nl(ws(),t.direction))}function hl(t){return gl(t,t)}function gl(e,n){return e.direction!==n.direction&&t(265),new al(e,n,e.direction)}function _l(t){const{initial:e,hasNext:n,step:r,map:i}=t;let s=e;return{[Symbol.iterator](){return this},next(){if(!n(s))return{done:!0,value:void 0};const t={done:!1,value:i(s)};return s=r(s),t}}}function pl(e,n){const r=Cl(e.origin,n.origin);switch(null===r&&t(275,e.origin.getKey(),n.origin.getKey()),r.type){case\"same\":{const t=\"text\"===e.type,r=\"text\"===n.type;return t&&r?function(t,e){return Math.sign(t-e)}(e.offset,n.offset):e.type===n.type?0:t?-1:r?1:\"child\"===e.type?-1:1}case\"ancestor\":return\"child\"===e.type?-1:1;case\"descendant\":return\"child\"===n.type?1:-1;case\"branch\":return yl(r)}}function yl(t){const{a:e,b:n}=t,r=e.__key,i=n.__key;let s=e,o=n;for(;s&&o;s=s.getNextSibling(),o=o.getNextSibling()){if(s.__key===i)return-1;if(o.__key===r)return 1}return null===s?1:-1}function ml(t,e){return e.is(t)}function xl(t){return xi(t)?[t.getLatest(),null]:[t.getParent(),t.getLatest()]}function Cl(e,n){if(e.is(n))return{commonAncestor:e,type:\"same\"};const r=new Map;for(let[t,n]=xl(e);t;n=t,t=t.getParent())r.set(t,n);for(let[i,s]=xl(n);i;s=i,i=i.getParent()){const o=r.get(i);if(void 0!==o)return null===o?(ml(e,i)||t(276),{commonAncestor:i,type:\"ancestor\"}):null===s?(ml(n,i)||t(277),{commonAncestor:i,type:\"descendant\"}):((xi(o)||ml(e,o))&&(xi(s)||ml(n,s))&&i.is(o.getParent())&&i.is(s.getParent())||t(278),{a:o,b:s,commonAncestor:i,type:\"branch\"})}return null}function Sl(e,n){const{type:r,key:i,offset:s}=e,o=po(e.key);return\"text\"===r?(sr(o)||t(266,o.getType(),i),rl(o,n,s)):(xi(o)||t(267,o.getType(),i),Fl(o,e.offset,n))}function vl(e,n){const{origin:r,direction:i}=n,s=\"next\"===i;qo(n)?e.set(r.getKey(),n.offset,\"text\"):Xo(n)?sr(r)?e.set(r.getKey(),il(r,i),\"text\"):e.set(r.getParentOrThrow().getKey(),r.getIndexWithinParent()+(s?1:0),\"element\"):(Qo(n)&&xi(r)||t(268),e.set(r.getKey(),s?0:r.getChildrenSize(),\"element\"))}function Tl(t){const e=Pr(),n=_r(e)?e:Mr();return kl(n,t),Ms(n),n}function kl(t,e){vl(t.anchor,e.anchor),vl(t.focus,e.focus)}function Nl(t){const{anchor:e,focus:n}=t,r=Sl(e,\"next\"),i=Sl(n,\"next\"),s=pl(r,i)<=0?\"next\":\"previous\";return gl(Dl(r,s),Dl(i,s))}function bl(t){const{direction:e,origin:n}=t,r=nl(n,Uo(e)).getNodeAtCaret();return r?nl(r,e):ol(n.getParentOrThrow(),e)}function wl(t,e=\"root\"){const n=[t];for(let r=Qo(t)?t.getParentCaret(e):t.getSiblingCaret();null!==r;r=r.getParentCaret(e))n.push(bl(r));return n}function El(t){return!!t&&t.origin.isAttached()}function Ml(e,n=\"removeEmptySlices\"){if(e.isCollapsed())return e;const r=\"root\",i=\"next\";let s=n;const o=Pl(e,i),l=wl(o.anchor,r),c=wl(o.focus.getFlipped(),r),a=new Set,u=[];for(const t of o.iterNodeCarets(r))if(Qo(t))a.add(t.origin.getKey());else if(Xo(t)){const{origin:e}=t;xi(e)&&!a.has(e.getKey())||u.push(e)}for(const t of u)t.remove();for(const t of o.getTextSlices()){if(!t)continue;const{origin:e}=t.caret,n=e.getTextContentSize(),r=bl(nl(e,i)),o=e.getMode();if(Math.abs(t.distance)===n&&\"removeEmptySlices\"===s||\"token\"===o&&0!==t.distance)r.remove();else if(0!==t.distance){s=\"removeEmptySlices\";let e=t.removeTextSlice();const n=t.caret.origin;if(\"segmented\"===o){const t=e.origin,n=ir(t.getTextContent()).setStyle(t.getStyle()).setFormat(t.getFormat());r.replaceOrInsert(n),e=rl(n,i,e.offset)}n.is(l[0].origin)&&(l[0]=e),n.is(c[0].origin)&&(c[0]=e.getFlipped())}}let f,d;for(const t of l)if(El(t)){f=Ol(t);break}for(const t of c)if(El(t)){d=Ol(t);break}const h=function(t,e,n){if(!t||!e)return null;const r=t.getParentAtCaret(),i=e.getParentAtCaret();if(!r||!i)return null;const s=r.getParents().reverse();s.push(r);const o=i.getParents().reverse();o.push(i);const l=Math.min(s.length,o.length);let c;for(c=0;c<l&&s[c]===o[c];c++);const a=(t,e)=>{let n;for(let r=c;r<t.length;r++){const i=t[r];if(fo(i))return;!n&&e(i)&&(n=i)}return n},u=a(s,Eo),f=u&&a(o,(t=>n.has(t.getKey())&&Eo(t)));return u&&f?[u,f]:null}(f,d,a);if(h){const[t,e]=h;ol(t,\"previous\").splice(0,e.getChildren()),e.remove()}const g=[f,d,...l,...c].find(El);if(g){return hl(Dl(Ol(g),e.direction))}t(269,JSON.stringify(l.map((t=>t.origin.__key))))}function Ol(t){const e=function(t){let e=t;for(;Qo(e);){const t=cl(e);if(!Qo(t))break;e=t}return e}(t.getLatest()),{direction:n}=e;if(sr(e.origin))return qo(e)?e:rl(e.origin,n,n);const r=e.getAdjacentCaret();return Xo(r)&&sr(r.origin)?rl(r.origin,n,Uo(n)):e}function Al(t){return qo(t)&&t.offset!==il(t.origin,t.direction)}function Dl(t,e){return t.direction===e?t:t.getFlipped()}function Pl(t,e){return t.direction===e?t:gl(Dl(t.focus,e),Dl(t.anchor,e))}function Fl(t,e,n){let r=ol(t,\"next\");for(let t=0;t<e;t++){const t=r.getAdjacentCaret();if(null===t)break;r=t}return Dl(r,n)}function Ll(t,e=\"root\"){let n=0,r=t,i=cl(r);for(;null===i;){if(n--,i=r.getParentCaret(e),!i)return null;r=i,i=cl(r)}return i&&[i,n]}function Il(e){const{origin:n,offset:r,direction:i}=e;if(r===il(n,i))return e.getSiblingCaret();if(r===il(n,Uo(i)))return bl(e.getSiblingCaret());const[s]=n.splitText(r);return sr(s)||t(281),Dl(nl(s,\"next\"),i)}function zl(t,e){return!0}function Kl(t,{$copyElementNode:e=ho,$splitTextPointCaretNext:n=Il,rootMode:r=\"shadowRoot\",$shouldSplit:i=zl}={}){if(qo(t))return n(t);const s=t.getParentCaret(r);if(s){const{origin:n}=s;if(Qo(t)&&(!n.canBeEmpty()||!i(n,\"first\")))return bl(s);const r=function(t){const e=[];for(let n=t.getAdjacentCaret();n;n=n.getAdjacentCaret())e.push(n.origin);return e}(t);(r.length>0||n.canBeEmpty()&&i(n,\"last\"))&&s.insert(e(n).splice(0,0,r))}return s}export{io as $addUpdateTag,go as $applyNodeReplacement,Sl as $caretFromPoint,Nl as $caretRangeFromSelection,Fo as $cloneWithProperties,pl as $comparePointCaretNext,ho as $copyNode,Bo as $create,Bn as $createLineBreakNode,Or as $createNodeSelection,Bi as $createParagraphNode,fr as $createPoint,Mr as $createRangeSelection,Ar as $createRangeSelectionFromDom,cr as $createTabNode,ir as $createTextNode,dl as $extendCaretToRange,cl as $getAdjacentChildCaret,Gs as $getAdjacentNode,Ll as $getAdjacentSiblingOrParentSiblingCaret,Dl as $getCaretInDirection,gl as $getCaretRange,Pl as $getCaretRangeInDirection,xr as $getCharacterOffsets,ol as $getChildCaret,Fl as $getChildCaretAtIndex,ll as $getChildCaretOrSelf,hl as $getCollapsedCaretRange,Cl as $getCommonAncestor,yl as $getCommonAncestorResultBranchOrder,Oo as $getEditor,ks as $getNearestNodeFromDOMNode,uo as $getNearestRootOrShadowRoot,Ss as $getNodeByKey,po as $getNodeByKeyOrThrow,Fr as $getPreviousSelection,ws as $getRoot,Pr as $getSelection,nl as $getSiblingCaret,ht as $getState,gt as $getStateChange,Jr as $getTextContent,il as $getTextNodeOffset,rl as $getTextPointCaret,sl as $getTextPointCaretSlice,mt as $getWritableNodeState,oo as $hasAncestor,ro as $hasUpdateTag,Wr as $insertNodes,wr as $isBlockElementNode,Qo as $isChildCaret,vi as $isDecoratorNode,xi as $isElementNode,Al as $isExtendableTextPointCaret,ao as $isInlineElementOrDecoratorNode,_s as $isLeafNode,Wn as $isLineBreakNode,Go as $isNodeCaret,yr as $isNodeSelection,Wi as $isParagraphNode,_r as $isRangeSelection,ki as $isRootNode,fo as $isRootOrShadowRoot,Xo as $isSiblingCaret,ar as $isTabNode,sr as $isTextNode,qo as $isTextPointCaret,fl as $isTextPointCaretSlice,us as $isTokenOrSegmented,as as $isTokenOrTab,Hs as $nodesOfType,Ol as $normalizeCaret,Et as $normalizeSelection__EXPERIMENTAL,so as $onUpdate,ci as $parseSerializedNode,Ml as $removeTextFromCaretRange,bl as $rewindSiblingCaret,Us as $selectAll,xs as $setCompositionKey,vl as $setPointFromCaret,Ms as $setSelection,Tl as $setSelectionFromCaretRange,_t as $setState,Kl as $splitAtPointCaretNext,So as $splitNode,kl as $updateRangeSelectionFromCaretRange,zi as ArtificialNode__DO_NOT_USE,nn as BLUR_COMMAND,Ze as CAN_REDO_COMMAND,tn as CAN_UNDO_COMMAND,Xe as CLEAR_EDITOR_COMMAND,Qe as CLEAR_HISTORY_COMMAND,_e as CLICK_COMMAND,Pi as COLLABORATION_TAG,Vi as COMMAND_PRIORITY_CRITICAL,Ji as COMMAND_PRIORITY_EDITOR,Ui as COMMAND_PRIORITY_HIGH,$i as COMMAND_PRIORITY_LOW,ji as COMMAND_PRIORITY_NORMAL,xe as CONTROLLED_TEXT_INSERTION_COMMAND,He as COPY_COMMAND,qe as CUT_COMMAND,pe as DELETE_CHARACTER_COMMAND,Te as DELETE_LINE_COMMAND,ve as DELETE_WORD_COMMAND,Ye as DRAGEND_COMMAND,Ve as DRAGOVER_COMMAND,Ue as DRAGSTART_COMMAND,$e as DROP_COMMAND,Si as DecoratorNode,mi as ElementNode,en as FOCUS_COMMAND,je as FORMAT_ELEMENT_COMMAND,ke as FORMAT_TEXT_COMMAND,Mi as HISTORIC_TAG,Ai as HISTORY_MERGE_TAG,Oi as HISTORY_PUSH_TAG,We as INDENT_CONTENT_COMMAND,ye as INSERT_LINE_BREAK_COMMAND,me as INSERT_PARAGRAPH_COMMAND,Be as INSERT_TAB_COMMAND,Eo as INTERNAL_$isBlock,A as IS_ALL_FORMATTING,T as IS_BOLD,w as IS_CODE,O as IS_HIGHLIGHT,k as IS_ITALIC,N as IS_STRIKETHROUGH,E as IS_SUBSCRIPT,M as IS_SUPERSCRIPT,b as IS_UNDERLINE,Pe as KEY_ARROW_DOWN_COMMAND,Oe as KEY_ARROW_LEFT_COMMAND,Ee as KEY_ARROW_RIGHT_COMMAND,De as KEY_ARROW_UP_COMMAND,Ie as KEY_BACKSPACE_COMMAND,Ke as KEY_DELETE_COMMAND,we as KEY_DOWN_COMMAND,Fe as KEY_ENTER_COMMAND,ze as KEY_ESCAPE_COMMAND,rn as KEY_MODIFIER_COMMAND,Le as KEY_SPACE_COMMAND,Re as KEY_TAB_COMMAND,Kn as LineBreakNode,Me as MOVE_TO_END,Ae as MOVE_TO_START,X as NODE_STATE_KEY,Je as OUTDENT_CONTENT_COMMAND,Ce as PASTE_COMMAND,Di as PASTE_TAG,Ki as ParagraphNode,be as REDO_COMMAND,Se as REMOVE_TEXT_COMMAND,Ti as RootNode,he as SELECTION_CHANGE_COMMAND,ge as SELECTION_INSERT_CLIPBOARD_NODES_COMMAND,Ge as SELECT_ALL_COMMAND,Fi as SKIP_COLLAB_TAG,Ii as SKIP_DOM_SELECTION_TAG,Li as SKIP_SCROLL_INTO_VIEW_TAG,U as TEXT_TYPE_TO_FORMAT,lr as TabNode,qn as TextNode,Ne as UNDO_COMMAND,In as buildImportMap,de as createCommand,Hi as createEditor,pt as createSharedNodeState,dt as createState,Uo as flipDirection,no as getDOMOwnerDocument,xo as getDOMSelection,Co as getDOMSelectionFromTarget,hs as getDOMTextNode,cs as getEditorPropertyFromDOMNode,ls as getNearestEditorFromDOMNode,es as getRegisteredNode,ts as getRegisteredNodeOrThrow,wo as isBlockDomNode,Qr as isCurrentlyReadOnlyMode,ds as isDOMDocumentNode,ko as isDOMNode,fs as isDOMTextNode,zo as isDOMUnmanaged,No as isDocumentFragment,Bs as isExactShortcutMatch,vo as isHTMLAnchorElement,To as isHTMLElement,bo as isInlineDomNode,os as isLexicalEditor,Rs as isModifierMatch,is as isSelectionCapturedInDecoratorInput,ss as isSelectionWithinEditor,_l as makeStepwiseIterator,ys as removeFromParent,Zi as resetRandomKey,Io as setDOMUnmanaged,Lo as setNodeIndentFromDOM};\n","// generated during release, do not modify\n\n/**\n * The current version, as set in package.json.\n * @type {string}\n */\nexport const VERSION = '5.38.1';\nexport const PUBLIC_VERSION = '5';\n","import { PUBLIC_VERSION } from '../version.js';\n\nif (typeof window !== 'undefined') {\n\t// @ts-expect-error\n\t((window.__svelte ??= {}).v ??= new Set()).add(PUBLIC_VERSION);\n}\n","export const strings = {\n  ok: 'OK',\n  cancel: 'Cancel',\n  close: 'Close',\n  clear: 'Clear',\n  insert: 'Insert',\n  update: 'Update',\n  remove: 'Remove',\n  collapse: 'Collapse',\n  expand: 'Expand',\n  dismiss: 'Dismiss',\n  calendar: {\n    year: 'Year',\n    previous_decade: 'Previous Decade',\n    next_decade: 'Next Decade',\n    month: 'Month',\n    previous_month: 'Previous Month',\n    next_month: 'Next Month',\n    today: 'Today',\n  },\n  split_button: {\n    x_options: '{name} Options',\n    more_options: 'More Options',\n  },\n  combobox: {\n    select_an_option: 'Select an option…',\n    filter_options: 'Filter Options',\n    no_matching_options: 'No matching options found',\n  },\n  number_input: {\n    decrease: 'Decrease',\n    increase: 'Increase',\n  },\n  password_input: {\n    show_password: 'Show Password',\n    hide_password: 'Hide Password',\n  },\n  text_editor: {\n    text_editor: 'Text Editor',\n    code_editor: 'Code Editor',\n    text_style_options: 'Text Style Options',\n    show_text_style_options: 'Show Text Style Options',\n    paragraph: 'Paragraph',\n    heading_1: 'Heading 1',\n    heading_2: 'Heading 2',\n    heading_3: 'Heading 3',\n    heading_4: 'Heading 4',\n    heading_5: 'Heading 5',\n    heading_6: 'Heading 6',\n    bulleted_list: 'Bulleted List',\n    numbered_list: 'Numbered List',\n    blockquote: 'Block Quote',\n    code_block: 'Code Block',\n    bold: 'Bold',\n    italic: 'Italic',\n    code: 'Code',\n    link: 'Link',\n    insert_link: 'Insert Link',\n    update_link: 'Update Link',\n    text: 'Text',\n    url: 'URL',\n    edit_in_markdown: 'Edit in Markdown',\n    converter_error:\n      'There was an error while enabling rich text mode. Please use the plain text editor instead.',\n    language: 'Language',\n    plain_text: 'Plain Text',\n  },\n};\n","export const strings = {\n  ok: 'OK',\n  cancel: 'キャンセル',\n  close: '閉じる',\n  clear: 'クリア',\n  insert: '挿入',\n  update: '更新',\n  remove: '削除',\n  collapse: '折り畳む',\n  expand: '広げる',\n  dismiss: '閉じる',\n  calendar: {\n    year: '年',\n    previous_decade: '前の 10 年',\n    next_decade: '次の 10 年',\n    month: '月',\n    previous_month: '前月',\n    next_month: '翌月',\n    today: '今日',\n  },\n  split_button: {\n    x_options: '{name} オプション',\n    more_options: 'その他のオプション',\n  },\n  combobox: {\n    select_an_option: 'オプションを選択…',\n    filter_options: 'オプションを絞り込み',\n    no_matching_options: '一致するオプションは見つかりませんでした',\n  },\n  number_input: {\n    decrease: '減らす',\n    increase: '増やす',\n  },\n  password_input: {\n    show_password: 'パスワードを表示',\n    hide_password: 'パスワードを隠す',\n  },\n  text_editor: {\n    text_editor: 'テキストエディター',\n    code_editor: 'コードエディター',\n    text_style_options: 'テキストスタイルオプション',\n    show_text_style_options: 'テキストスタイルオプションを表示',\n    paragraph: '段落',\n    heading_1: '見出し 1',\n    heading_2: '見出し 2',\n    heading_3: '見出し 3',\n    heading_4: '見出し 4',\n    heading_5: '見出し 5',\n    heading_6: '見出し 6',\n    bulleted_list: '番号なしリスト',\n    numbered_list: '番号付きリスト',\n    blockquote: 'ブロック引用',\n    code_block: 'コードブロック',\n    bold: '太字',\n    italic: '斜体',\n    code: 'コード',\n    link: 'リンク',\n    insert_link: 'リンクを挿入',\n    update_link: 'リンクを更新',\n    text: 'テキスト',\n    url: 'URL',\n    edit_in_markdown: 'マークダウンで編集',\n    converter_error:\n      'リッチテキストモードを有効化中に問題が発生しました。代わりにプレーンテキストエディターを使用してください。',\n    language: '言語',\n    plain_text: 'プレーンテキスト',\n  },\n};\n","<!--\n  @component\n  A Material Symbols icon.\n  @see https://developers.google.com/fonts/docs/material_symbols\n-->\n<script>\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the `span` element.\n   * @property {string} [name] Icon name, e.g. `search`, `expand_more`, `close`, etc.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    name,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<span\n  {...restProps}\n  class=\"sui icon material-symbols-outlined {className}\"\n  aria-hidden={!('aria-label' in restProps)}\n>\n  {name}\n</span>\n\n<style>.icon.small-arrow {\n  overflow: hidden;\n  width: 12px;\n  text-indent: -6px;\n}</style>\n","<!--\n  @component\n  Inline alert message.\n  @see https://w3c.github.io/aria/#alert\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/alert/\n-->\n<script>\n  import Icon from '../icon/icon.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {'error' | 'warning' | 'info' | 'success'} status Alert status.\n   * @property {Snippet} [children] Primary slot content.\n   * @property {Snippet} [icon] Icon slot content.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    status,\n    children,\n    icon,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div {...restProps} role=\"alert\" class=\"sui alert {status}\">\n  {#if icon}\n    {@render icon()}\n  {:else}\n    <Icon name={status === 'success' ? 'check_circle' : status} />\n  {/if}\n  {@render children?.()}\n</div>\n\n<style>.alert {\n  display: flex;\n  align-items: center;\n  gap: var(--gap, 8px);\n  padding: var(--padding, 8px);\n  border-width: var(--border-width, var(--sui-control-medium-border-width));\n  border-style: var(--border-style, solid);\n  border-radius: var(--border-radius, var(--sui-control-medium-border-radius));\n  font-size: var(--font-size, var(--sui-font-size-default));\n}\n.alert.error {\n  border-color: var(--sui-error-border-color);\n  color: var(--sui-error-foreground-color);\n  background-color: var(--sui-error-background-color);\n}\n.alert.warning {\n  border-color: var(--sui-warning-border-color);\n  color: var(--sui-warning-foreground-color);\n  background-color: var(--sui-warning-background-color);\n}\n.alert.info {\n  border-color: var(--sui-info-border-color);\n  color: var(--sui-info-foreground-color);\n  background-color: var(--sui-info-background-color);\n}\n.alert.success {\n  border-color: var(--sui-success-border-color);\n  color: var(--sui-success-foreground-color);\n  background-color: var(--sui-success-background-color);\n}</style>\n","/**\n * @import { ActionReturn } from 'svelte/action';\n */\n\n/**\n * Check if the user agent is macOS.\n * @returns {boolean} Result.\n */\nexport const isMac = () =>\n  /** @type {any} */ (navigator).userAgentData?.platform === 'macOS' ||\n  navigator.platform.startsWith('Mac');\n\n/**\n * Whether the event matches the given keyboard shortcuts.\n * @param {KeyboardEvent} event `keydown` or `keypress` event.\n * @param {string} shortcuts Keyboard shortcuts like `A` or `Ctrl+S`.\n * @returns {boolean} Result.\n * @see https://w3c.github.io/aria/#aria-keyshortcuts\n */\nexport const matchShortcuts = (event, shortcuts) => {\n  const { ctrlKey, metaKey, altKey, shiftKey, code } = event;\n  const key = code.replace(/^(?:Digit|Key)(.)$/, '$1');\n\n  return shortcuts.split(/\\s+/).some((shortcut) => {\n    const keys = shortcut.split('+');\n\n    // Check if required modifier keys are pressed\n    if (\n      (keys.includes('Ctrl') && !ctrlKey) ||\n      (keys.includes('Meta') && !metaKey) ||\n      (keys.includes('Alt') && !altKey) ||\n      (keys.includes('Shift') && !shiftKey)\n    ) {\n      return false;\n    }\n\n    // Check if unnecessary modifier keys are not pressed\n    if (\n      (!keys.includes('Ctrl') && ctrlKey) ||\n      (!keys.includes('Meta') && metaKey) ||\n      (!keys.includes('Alt') && altKey) ||\n      (!keys.includes('Shift') && shiftKey)\n    ) {\n      return false;\n    }\n\n    return keys\n      .filter((_key) => !['Ctrl', 'Meta', 'Alt', 'Shift'].includes(_key))\n      .every((_key) => _key.toUpperCase() === key.toUpperCase());\n  });\n};\n\n/**\n * Activate keyboard shortcuts.\n * @param {(HTMLInputElement | HTMLButtonElement)} element Element.\n * @param {string} [shortcuts] Keyboard shortcuts like `A` or `Accel+S` to focus and click the text\n * field or button. Multiple shortcuts can be defined space-separated. The `Accel` modifier will be\n * replaced with `Ctrl` on Windows/Linux and `Command` on macOS.\n * @returns {ActionReturn} Actions.\n */\nexport const activateKeyShortcuts = (element, shortcuts = '') => {\n  /** @type {string | undefined} */\n  let platformKeyShortcuts;\n\n  /**\n   * Handle the event.\n   * @param {KeyboardEvent} event `keydown` event.\n   */\n  const handler = (event) => {\n    const { disabled, offsetParent } = element;\n    const { top, left } = element.getBoundingClientRect();\n\n    // Check if the element is visible\n    if (!matchShortcuts(event, /** @type {string} */ (platformKeyShortcuts)) || !offsetParent) {\n      return;\n    }\n\n    if (disabled) {\n      // Make sure `elementsFromPoint()` works as expected\n      element.style.setProperty('pointer-events', 'auto');\n    }\n\n    // Check if the element is clickable (not behind a modal dialog)\n    if (document.elementsFromPoint(left + 4, top + 4).includes(element)) {\n      event.preventDefault();\n\n      // Trigger click only when the element is enabled\n      if (!disabled) {\n        element.focus();\n        element.click();\n      }\n    }\n\n    if (disabled) {\n      element.style.removeProperty('pointer-events');\n    }\n  };\n\n  /**\n   * Remove the event listener.\n   */\n  const removeListener = () => {\n    globalThis.removeEventListener('keydown', handler, { capture: true });\n    element.removeAttribute('aria-keyshortcuts');\n  };\n\n  /**\n   * Add the event listener.\n   */\n  const addListener = () => {\n    platformKeyShortcuts = shortcuts\n      ? shortcuts.replace(/\\bAccel\\b/g, isMac() ? 'Meta' : 'Ctrl')\n      : undefined;\n\n    if (platformKeyShortcuts) {\n      globalThis.addEventListener('keydown', handler, { capture: true });\n      element.setAttribute('aria-keyshortcuts', platformKeyShortcuts);\n    }\n  };\n\n  addListener();\n\n  return {\n    // eslint-disable-next-line jsdoc/require-jsdoc, no-shadow, no-unused-vars\n    update(shortcuts) {\n      removeListener();\n      addListener();\n    },\n\n    // eslint-disable-next-line jsdoc/require-jsdoc\n    destroy() {\n      removeListener();\n    },\n  };\n};\n","<script>\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {number} [lines] Number of lines.\n   * @property {Snippet} [children] Primary slot content.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    lines = 1,\n    children = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<span\n  role=\"none\"\n  class=\"sui truncated-text\"\n  style=\"-webkit-line-clamp: {lines}; line-clamp: {lines};\"\n>\n  {@render children?.()}\n</span>\n\n<style>.truncated-text {\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  overflow: hidden;\n  white-space: normal;\n  overflow-wrap: anywhere;\n}</style>\n","import { generateUUID } from './crypto';\n\n/**\n * Get a random ID that can be used for elements.\n * @param {string} [prefix] - Prefix to be added to the ID, e.g. `popup`.\n * @param {number} [length] - Number of characters to be used in the ID.\n * @returns {string} Generated ID.\n */\nconst generateElementId = (prefix = 'e', length = 7) => [prefix, generateUUID(length)].join('-');\n\n/**\n * Wait until the given element enters the viewport.\n * @param {HTMLElement | undefined} element - Element to observe.\n * @returns {void | Promise<void>} Promise to be resolved when the element becomes visible. If the\n * `element` is not available yet, `undefined` will be returned instead.\n */\nconst waitForVisibility = (element) => {\n  if (!element) {\n    return undefined;\n  }\n\n  return new Promise((resolve) => {\n    const observer = new IntersectionObserver(([entry]) => {\n      if (entry.isIntersecting) {\n        observer.disconnect();\n        resolve(undefined);\n      }\n    });\n\n    globalThis.requestAnimationFrame(() => {\n      observer.observe(element);\n    });\n  });\n};\n\nexport { generateElementId, waitForVisibility };\n","/* eslint-disable no-nested-ternary */\n\nimport { generateElementId } from '@sveltia/utils/element';\nimport { sleep } from '@sveltia/utils/misc';\nimport { on } from 'svelte/events';\nimport { get, writable } from 'svelte/store';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import { PopupPosition } from '../typedefs';\n */\n\n/**\n * Implement the popup handler.\n */\nclass Popup {\n  open = writable(false);\n\n  /**\n   * @type {Writable<{\n   * inset: string | undefined,\n   * zIndex: number | undefined,\n   * minWidth: string | undefined,\n   * maxWidth: string | undefined,\n   * height: string | undefined,\n   * }>}\n   */\n  style = writable({\n    inset: undefined,\n    zIndex: undefined,\n    minWidth: undefined,\n    maxWidth: undefined,\n    height: undefined,\n  });\n\n  observer = new IntersectionObserver((entries) => {\n    entries.forEach(({ intersectionRect, rootBounds }) => {\n      if (!intersectionRect || !rootBounds) {\n        return;\n      }\n\n      const content = /** @type {HTMLElement} */ (this.popupElement.querySelector('.content'));\n      const { scrollHeight: contentHeight, scrollWidth: contentWidth } = content;\n      const topMargin = intersectionRect.top - 8;\n      const bottomMargin = rootBounds.height - intersectionRect.bottom - 8;\n      let { position } = this;\n      let height;\n\n      // Alter the position if the space is limited\n      // @todo Handle more overflow cases\n      if (position.startsWith('bottom-')) {\n        if (contentHeight > bottomMargin) {\n          if (topMargin > bottomMargin) {\n            position = /** @type {PopupPosition} */ (position.replace('bottom-', 'top-'));\n            height = topMargin;\n          } else {\n            height = bottomMargin;\n          }\n        }\n      }\n\n      // If the popup overflows the viewport, change the position\n      if (position.endsWith('-left')) {\n        if (intersectionRect.left + contentWidth > rootBounds.width - 8) {\n          position = /** @type {PopupPosition} */ (position.replace('-left', '-right'));\n        }\n      }\n\n      const top = position.startsWith('bottom-')\n        ? `${Math.round(intersectionRect.bottom)}px`\n        : position.endsWith('-top')\n          ? `${Math.round(intersectionRect.top)}px`\n          : 'auto';\n\n      const right = position.startsWith('left-')\n        ? `${Math.round(rootBounds.width - intersectionRect.left)}px`\n        : position.endsWith('-right')\n          ? `${Math.round(rootBounds.width - intersectionRect.right)}px`\n          : 'auto';\n\n      const bottom = position.startsWith('top-')\n        ? `${Math.round(rootBounds.height - intersectionRect.top)}px`\n        : position.endsWith('-bottom')\n          ? `${Math.round(rootBounds.height - intersectionRect.bottom)}px`\n          : 'auto';\n\n      const left = position.startsWith('right-')\n        ? `${Math.round(intersectionRect.right)}px`\n        : position.endsWith('-left')\n          ? `${Math.round(intersectionRect.left)}px`\n          : 'auto';\n\n      const style = {\n        inset: [top, right, bottom, left].join(' '),\n        zIndex: 1000,\n        minWidth: `${Math.round(intersectionRect.width)}px`,\n        maxWidth: position.endsWith('-left')\n          ? `${Math.round(rootBounds.width - intersectionRect.left - 8)}px`\n          : `${Math.round(intersectionRect.right - 8)}px`,\n        height: height ? `${Math.round(height)}px` : 'auto',\n      };\n\n      if (JSON.stringify(style) !== JSON.stringify(get(this.style))) {\n        this.style.set(style);\n      }\n    });\n  });\n\n  /**\n   * Initialize a new `Popup` instance.\n   * @param {HTMLButtonElement} anchorElement `<button>` element that triggers the popup.\n   * @param {HTMLDialogElement} popupElement `<dialog>` element to be used for the popup.\n   * @param {PopupPosition} position Where to show the popup content.\n   * @param {HTMLElement} [positionBaseElement] The base element of the `position`. If omitted, this\n   * will be the `anchorElement`.\n   */\n  constructor(anchorElement, popupElement, position, positionBaseElement) {\n    this.anchorElement = anchorElement;\n    this.popupElement = popupElement; // = backdrop\n    this.position = position;\n    this.positionBaseElement = positionBaseElement ?? anchorElement;\n    this.id = generateElementId('popup');\n\n    this.anchorElement.setAttribute('aria-controls', this.id);\n    this.popupElement.setAttribute('id', this.id);\n\n    on(anchorElement, 'click', () => {\n      if (!this.isDisabled && !this.isReadOnly) {\n        this.open.set(!get(this.open));\n      }\n    });\n\n    on(anchorElement, 'keydown', (event) => {\n      const { key, ctrlKey, metaKey, shiftKey, altKey } = event;\n      const hasModifier = shiftKey || altKey || ctrlKey || metaKey;\n\n      if (!this.isDisabled && !this.isReadOnly && ['Enter', ' '].includes(key) && !hasModifier) {\n        event.preventDefault();\n        event.stopPropagation();\n        this.open.set(!get(this.open));\n      }\n    });\n\n    on(anchorElement, 'transitionstart', () => {\n      if (this.anchorElement.closest('.hiding, .hidden, [hidden]')) {\n        this.hideImmediately();\n      }\n    });\n\n    new IntersectionObserver(([entry]) => {\n      if (!entry.isIntersecting && get(this.open)) {\n        this.hideImmediately();\n      }\n    }).observe(this.anchorElement);\n\n    // Close the popup when the backdrop, a menu item or an option is clicked\n    on(this.popupElement, 'click', (event) => {\n      event.stopPropagation();\n\n      // eslint-disable-next-line prefer-destructuring\n      const target = /** @type {HTMLElement} */ (event.target);\n\n      if (\n        get(this.open) &&\n        (target === this.popupElement || target.matches('[role^=\"menuitem\"], [role=\"option\"]'))\n      ) {\n        this.open.set(false);\n      }\n    });\n\n    on(this.popupElement, 'keydown', (event) => {\n      const { key, ctrlKey, metaKey, shiftKey, altKey } = event;\n      const hasModifier = shiftKey || altKey || ctrlKey || metaKey;\n\n      if (key === 'Escape' && !hasModifier) {\n        event.preventDefault();\n        event.stopPropagation();\n        this.open.set(false);\n      }\n    });\n\n    this.open.subscribe((open) => {\n      if (open) {\n        this.checkPosition();\n      } else if (this.anchorElement.getAttribute('aria-expanded') === 'true') {\n        this.anchorElement.focus();\n        this.anchorElement.removeAttribute('aria-controls');\n      }\n\n      this.anchorElement.setAttribute('aria-expanded', String(open));\n    });\n\n    // Update the popup width when the base element is resized\n    new ResizeObserver(() => {\n      this.checkPosition();\n    }).observe(this.positionBaseElement);\n  }\n\n  /**\n   * Whether the anchor element is disabled.\n   * @type {boolean}\n   */\n  get isDisabled() {\n    return this.anchorElement.matches('[aria-disabled=\"true\"]');\n  }\n\n  /**\n   * Whether the anchor element is read-only.\n   * @type {boolean}\n   */\n  get isReadOnly() {\n    return this.anchorElement.matches('[aria-readonly=\"true\"]');\n  }\n\n  /**\n   * Check the position of the anchor element.\n   */\n  checkPosition() {\n    this.observer.unobserve(this.positionBaseElement);\n    this.observer.observe(this.positionBaseElement);\n  }\n\n  /**\n   * Hide the popup immediately (when the anchor is being hidden).\n   */\n  async hideImmediately() {\n    this.popupElement.hidden = true;\n    this.open.set(false);\n    await sleep(50);\n    this.popupElement.hidden = false;\n  }\n}\n\n/**\n * Activate a new popup.\n * @param {...any} args Arguments.\n * @returns {Popup} New popup.\n */\n// @ts-ignore\nexport const activatePopup = (...args) => new Popup(...args);\n","<!--\n  @component\n  @see https://github.com/sveltejs/svelte/issues/3088\n-->\n<script>\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Snippet} [children] Primary slot content.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    children,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n{@render children?.()}\n","<!--\n  @component\n  A generic modal top-layer helper based on the HTML `<dialog>` element.\n-->\n<script>\n  import { sleep } from '@sveltia/utils/misc';\n  import { mount, onMount, unmount } from 'svelte';\n  import Placeholder from './placeholder.svelte';\n\n  /**\n   * @import { ModalProps } from '../../typedefs';\n   */\n\n  /**\n   * @type {ModalProps & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    open = $bindable(false),\n    dialog = $bindable(),\n    class: className,\n    role = 'dialog',\n    showBackdrop = false,\n    lightDismiss = false,\n    escapeDismiss = true,\n    keepContent = false,\n    children,\n    extraContent,\n    onOpening,\n    onOpen,\n    onClosing,\n    onOk,\n    onCancel,\n    onClose,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /**\n   * Focus the `<dialog>` element.\n   */\n  export const focus = () => {\n    dialog?.focus();\n  };\n\n  /**\n   * Close the modal.\n   * @param {string} returnValue Return value to be used for `<dialog>`.\n   */\n  export const close = (returnValue) => {\n    if (!dialog) {\n      return;\n    }\n\n    dialog.returnValue = returnValue;\n    open = false;\n  };\n\n  let setOpenClass = $state(false);\n  let setActiveClass = $state(false);\n  let showContent = $state(false);\n\n  /**\n   * Resolve once the transition is complete.\n   * @returns {Promise<void>} Nothing.\n   */\n  const waitForTransition = async () =>\n    new Promise((resolve) => {\n      /**\n       * Transition event listener.\n       * @param {TransitionEvent} event `transition` event.\n       */\n      const listener = (event) => {\n        if (event.target === dialog) {\n          dialog.removeEventListener('transitionend', listener);\n          resolve();\n        }\n      };\n\n      dialog?.addEventListener('transitionend', listener);\n    });\n\n  /**\n   * Show the modal.\n   */\n  const openDialog = async () => {\n    if (!dialog || dialog?.open) {\n      return;\n    }\n\n    onOpening?.(new CustomEvent('Opening'));\n    showContent = true;\n    dialog.showModal();\n    onOpen?.(new CustomEvent('Open'));\n    await sleep(0);\n    setOpenClass = true;\n    await waitForTransition();\n    setActiveClass = true;\n  };\n\n  /**\n   * Hide the modal.\n   */\n  const closeDialog = async () => {\n    if (!dialog || !dialog.open) {\n      return;\n    }\n\n    const { returnValue } = dialog;\n\n    onClosing?.(new CustomEvent('Closing'));\n    // Prevent a button behind the `<dialog>` from being clicked erroneously (Svelte bug)\n    document.body.inert = true;\n    dialog.close();\n    document.body.inert = false;\n    setActiveClass = false;\n    setOpenClass = false;\n    await waitForTransition();\n    showContent = false;\n\n    if (returnValue === 'ok') {\n      onOk?.(new CustomEvent('Ok'));\n    }\n\n    if (returnValue === 'cancel') {\n      onCancel?.(new CustomEvent('Cancel'));\n    }\n\n    onClose?.(new CustomEvent('Close', { detail: { returnValue } }));\n    dialog.returnValue = '';\n  };\n\n  $effect(() => {\n    if (open) {\n      openDialog();\n    } else {\n      closeDialog();\n    }\n  });\n\n  onMount(() => {\n    const placeholder = mount(Placeholder, {\n      target: document.querySelector('.sui.app-shell') ?? document.body,\n      // eslint-disable-next-line no-use-before-define\n      props: { children: dialogSnippet },\n    });\n\n    // onUnmount\n    return () => {\n      dialog?.close();\n      unmount(placeholder);\n    };\n  });\n</script>\n\n{#snippet dialogSnippet()}\n  <dialog\n    bind:this={dialog}\n    {...restProps}\n    inert={!setOpenClass}\n    {role}\n    class=\"sui modal {className}\"\n    class:backdrop={showBackdrop}\n    class:open={setOpenClass}\n    class:active={setActiveClass}\n    onclick={({ target }) => {\n      if (\n        dialog &&\n        lightDismiss &&\n        /** @type {HTMLElement | undefined} */ (target)?.matches('dialog')\n      ) {\n        dialog.returnValue = 'cancel';\n        open = false;\n      }\n    }}\n    oncancel={(event) => {\n      event.preventDefault();\n\n      // Escape key is pressed\n      if (dialog && escapeDismiss) {\n        dialog.returnValue = 'cancel';\n        open = false;\n      }\n    }}\n  >\n    {@render extraContent?.()}\n    {#if showContent || keepContent}\n      {@render children?.()}\n    {/if}\n  </dialog>\n{/snippet}\n\n<style>dialog {\n  position: fixed;\n  inset: 0;\n  z-index: 9999999;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  overflow: hidden;\n  outline: 0;\n  margin: 0;\n  border: 0;\n  padding: 0;\n  width: 100dvw;\n  max-width: 100dvw;\n  height: 100dvh;\n  max-height: 100dvh;\n  color: var(--sui-primary-foreground-color);\n  background: transparent;\n  -webkit-user-select: none;\n  user-select: none;\n  touch-action: none;\n  pointer-events: all;\n  cursor: default;\n}\ndialog::backdrop {\n  background: transparent;\n}\ndialog.backdrop {\n  background-color: var(--sui-popup-backdrop-color);\n}\ndialog.open {\n  transition-duration: 50ms;\n  opacity: 1;\n}\ndialog:not(.open) {\n  transition-duration: 400ms;\n  opacity: 0;\n}\ndialog[hidden] {\n  transition-duration: 1ms !important;\n}\ndialog:not(.active) {\n  pointer-events: none !important;\n}\ndialog:not(.active) :global(*) {\n  transition-duration: 0ms !important;\n  pointer-events: none !important;\n}</style>\n","<!--\n  @component\n  Generic popup helper.\n-->\n<script>\n  import { sleep } from '@sveltia/utils/misc';\n  import { onMount } from 'svelte';\n  import { writable } from 'svelte/store';\n  import { activatePopup } from '../../services/popup.svelte.js';\n  import Modal from './modal.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import { Writable } from 'svelte/store';\n   * @import { ModalProps, PopupPosition } from '../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the content element.\n   * @property {boolean} [open] Whether to open the popup.\n   * @property {boolean} [hovered] Whether the content is hovered.\n   * @property {HTMLElement} [anchor] A reference to the anchor element that opens the popup.\n   * Typically a `<button>`.\n   * @property {HTMLElement} [content] A reference to the content element.\n   * @property {PopupPosition} [position] Where to show the popup.\n   * @property {HTMLElement} [positionBaseElement] The base element of {@link position}. If omitted,\n   * this will be {@link anchor}.\n   * @property {HTMLDialogElement} [parentDialogElement] A reference to a dialog element that is\n   * already displayed. This should be provided for a nested popup.\n   * @property {boolean} [touchOptimized] Whether to show the popup at the center of the screen on\n   * mobile/tablet and ignore the defined dropdown `position`.\n   * @property {Snippet} [children] Primary slot content.\n   * @property {Snippet} [extraContent] Extra slot content.\n   * @property {(event: CustomEvent) => void} [onOpen] Custom `Open` event handler.\n   */\n\n  /**\n   * @type {ModalProps & Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    open = $bindable(false),\n    hovered = $bindable(false),\n    content = $bindable(undefined),\n    class: className,\n    showBackdrop = undefined,\n    anchor,\n    position = 'bottom-left',\n    positionBaseElement = undefined,\n    parentDialogElement = undefined,\n    touchOptimized = false,\n    children,\n    onOpen,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /**\n   * @type {boolean}\n   */\n  let initialized = $state(false);\n  /**\n   * A reference to the `<dialog>` element.\n   * @type {HTMLDialogElement | undefined}\n   */\n  let dialogElement = $state();\n  /**\n   * Whether the touch is enabled on the user device.\n   * @type {boolean}\n   */\n  let touchEnabled = $state(false);\n  /**\n   * The type of the content displayed in the popup, defined with the `aria-haspopup` attribute on\n   * the anchor element.\n   * @type {string | undefined}\n   * @see https://w3c.github.io/aria/#aria-haspopup\n   */\n  let contentType = $state();\n  /**\n   * Style to be applied to the content.\n   * @type {Writable<Record<string, any>>}\n   */\n  let style = $state(\n    writable({\n      inset: undefined,\n      zIndex: undefined,\n      width: undefined,\n      height: undefined,\n    }),\n  );\n\n  /**\n   * @type {{ style: Writable<Record<string, any>>, open: Writable<boolean>, checkPosition:\n   * () => void } | undefined}\n   */\n  let popupInstance = undefined;\n  let hoveredTimeout = 0;\n\n  /**\n   * Initialize the popup.\n   */\n  const init = () => {\n    popupInstance = activatePopup(anchor, dialogElement, position, positionBaseElement);\n\n    style = popupInstance.style;\n    popupInstance.open.subscribe((_open) => {\n      open = _open;\n    });\n\n    contentType = anchor?.getAttribute('aria-haspopup') ?? undefined;\n    initialized = true;\n  };\n\n  $effect(() => {\n    if (parentDialogElement && !dialogElement && content) {\n      dialogElement = parentDialogElement;\n      dialogElement.append(content);\n    }\n  });\n\n  $effect(() => {\n    if (anchor && dialogElement && !initialized) {\n      init();\n    }\n  });\n\n  $effect(() => {\n    if (parentDialogElement && open) {\n      popupInstance?.checkPosition();\n    }\n  });\n\n  const touch = $derived(touchOptimized && touchEnabled);\n\n  onMount(() => {\n    touchEnabled = globalThis.matchMedia('(pointer: coarse)').matches;\n  });\n</script>\n\n{#snippet contentWrapper()}\n  <div\n    bind:this={content}\n    hidden={!open}\n    role=\"none\"\n    class=\"content {className} {contentType}\"\n    class:touch\n    style:inset={$style.inset}\n    style:z-index={$style.zIndex}\n    style:min-width={$style.minWidth}\n    style:max-width={$style.maxWidth}\n    style:max-height={$style.height}\n    style:visibility={$style.inset ? undefined : 'hidden'}\n    onmouseenter={() => {\n      hovered = true;\n\n      if (parentDialogElement) {\n        window.clearTimeout(hoveredTimeout);\n      }\n    }}\n    onmouseleave={() => {\n      hovered = false;\n\n      if (parentDialogElement) {\n        hoveredTimeout = window.setTimeout(() => {\n          open = false;\n        }, 200);\n      }\n    }}\n  >\n    {@render children?.()}\n  </div>\n{/snippet}\n\n{#if parentDialogElement}\n  {@render contentWrapper()}\n{:else}\n  <Modal\n    {...restProps}\n    bind:dialog={dialogElement}\n    role=\"none\"\n    class=\"popup\"\n    bind:open\n    showBackdrop={showBackdrop ?? touch}\n    lightDismiss={true}\n    keepContent={true}\n    onOpen={async (event) => {\n      onOpen?.(event);\n\n      await sleep(100);\n\n      if (!content) {\n        return;\n      }\n\n      const target = /** @type {HTMLElement} */ (\n        content.querySelector('[tabindex]:not([aria-disabled=\"true\"])')\n      );\n\n      if (target) {\n        target.focus();\n      } else {\n        content.tabIndex = -1;\n        content.focus();\n      }\n    }}\n  >\n    {@render contentWrapper()}\n  </Modal>\n{/if}\n\n<style>.content {\n  position: absolute;\n  overflow-y: auto;\n  outline-width: 0 !important;\n  width: auto;\n  color: var(--sui-primary-foreground-color);\n  background-color: var(--sui-secondary-background-color-translucent);\n  box-shadow: 0 8px 16px var(--sui-popup-shadow-color);\n  -webkit-backdrop-filter: blur(16px);\n  backdrop-filter: blur(16px);\n  transition-property: opacity, transform;\n}\n.content.menu {\n  border-width: var(--sui-menu-border-width, 1px);\n  border-style: var(--sui-menu-border-style, solid);\n  border-color: var(--sui-menu-border-width, var(--sui-secondary-border-color));\n  border-radius: var(--sui-menu-border-radius, 4px);\n  padding: var(--sui-menu-padding, 4px);\n}\n.content.menu :global(.sui.menu) {\n  border-width: 0;\n  border-radius: 0;\n  padding: 0;\n  background-color: transparent;\n}\n.content.listbox {\n  border-width: var(--sui-listbox-border-width, 1px);\n  border-style: var(--sui-listbox-border-style, solid);\n  border-color: var(--sui-listbox-border-width, var(--sui-secondary-border-color));\n  border-radius: var(--sui-listbox-border-radius, 4px);\n  padding: var(--sui-listbox-padding, 4px);\n}\n.content.listbox :global(.sui.listbox) {\n  border-width: 0;\n  border-radius: 0;\n  padding: 0;\n  background-color: transparent;\n}\n.content.touch {\n  position: static;\n  border-width: 0 !important;\n  border-radius: 4px !important;\n  padding: 8px;\n  min-width: 320px !important;\n  max-width: calc(100dvw - 32px) !important;\n  max-height: calc(100dvh - 32px) !important;\n}\n:global(dialog.open) .content.touch {\n  transform: scale(100%) !important;\n}\n:global(dialog:not(.open)) .content.touch {\n  transform: scale(90%);\n}\n.content.touch.combobox :global(.sui.listbox) {\n  gap: 4px;\n  padding: 8px 4px !important;\n}\n:global(dialog.open) .content {\n  transition-duration: 50ms;\n  opacity: 1;\n  transform: translateY(2px);\n}\n:global(dialog:not(.open)) .content {\n  transition-duration: 300ms;\n  opacity: 0;\n  transform: translateY(-8px);\n}</style>\n","<!--\n  @component\n  A generic button widget based on the HTML `<button>` element.\n  @see https://w3c.github.io/aria/#button\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/button/\n-->\n<script>\n  import { activateKeyShortcuts } from '../../services/events.svelte';\n  import TruncatedText from '../typography/truncated-text.svelte';\n  import Popup from '../util/popup.svelte';\n\n  /**\n   * @import { ButtonProps, CommonEventHandlers } from '../../typedefs';\n   */\n\n  /**\n   * @type {ButtonProps & CommonEventHandlers & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    element = $bindable(),\n    class: className = '',\n    type = 'button',\n    role = 'button',\n    name = undefined,\n    value = undefined,\n    valueType = typeof value,\n    hidden = false,\n    disabled = false,\n    readonly = false,\n    pressed = undefined,\n    keyShortcuts = undefined,\n    label = '',\n    lines = 1,\n    variant = undefined,\n    size = 'medium',\n    iconic = false,\n    pill = false,\n    flex = false,\n    popupPosition = 'bottom-left',\n    showPopupBackdrop = false,\n    children,\n    startIcon,\n    endIcon,\n    popup,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<button\n  bind:this={element}\n  {...restProps}\n  class=\"sui button {variant} {size} {className}\"\n  class:iconic\n  class:pill\n  class:flex\n  {type}\n  {name}\n  {value}\n  {hidden}\n  {disabled}\n  {role}\n  aria-hidden={hidden}\n  aria-disabled={disabled}\n  aria-readonly={readonly}\n  aria-pressed={pressed}\n  data-type={valueType}\n  data-name={name}\n  data-label={label}\n  data-value={value}\n  use:activateKeyShortcuts={keyShortcuts}\n>\n  {@render startIcon?.()}\n  {#if variant === 'link'}\n    {#if label}\n      <span role=\"none\" class=\"label\">\n        <TruncatedText {lines}>\n          {label}\n        </TruncatedText>\n      </span>\n    {:else}\n      <span role=\"none\" class=\"label\">\n        {@render children?.()}\n      </span>\n    {/if}\n  {:else}\n    {#if label}\n      <span role=\"none\" class=\"label\">\n        <TruncatedText {lines}>\n          {label}\n        </TruncatedText>\n      </span>\n    {/if}\n    {@render children?.()}\n  {/if}\n  {@render endIcon?.()}\n</button>\n\n{#if popup}\n  <Popup\n    anchor={element}\n    position={popupPosition}\n    showBackdrop={showPopupBackdrop}\n    touchOptimized={true}\n  >\n    {@render popup()}\n  </Popup>\n{/if}\n\n<style>button {\n  flex: none;\n  display: inline-flex;\n  align-items: center;\n  gap: 4px;\n  margin: var(--sui-focus-ring-width);\n  border-width: 0;\n  border-style: solid;\n  border-color: transparent;\n  padding: 0;\n  color: var(--sui-control-foreground-color, inherit);\n  background-color: transparent;\n  box-shadow: none;\n  font-family: var(--sui-control-font-family);\n  font-size: var(--sui-control-font-size);\n  line-height: var(--sui-control-line-height);\n  font-weight: var(--sui-font-weight-normal, normal);\n  text-align: start;\n  cursor: pointer;\n  transition: all 200ms;\n}\nbutton[hidden] {\n  display: none !important;\n}\nbutton:not(:disabled):focus-visible {\n  z-index: 1;\n}\nbutton:is(.primary, .secondary, .tertiary, .ghost) {\n  justify-content: center;\n  border-width: 1px;\n}\nbutton:is(.primary, .secondary, .tertiary, .ghost) .label:only-child {\n  padding: 0 4px;\n}\nbutton.primary {\n  border-width: var(--sui-button-primary-border-width, 1px);\n  border-style: var(--sui-button-primary-border-style, solid);\n  border-color: var(--sui-button-primary-border-color, var(--sui-primary-accent-color));\n  color: var(--sui-button-primary-foreground-color, var(--sui-primary-accent-color-inverted));\n  background-color: var(--sui-button-primary-background-color, var(--sui-primary-accent-color));\n  font-weight: var(--sui-button-primary-font-weight, var(--sui-font-weight-normal, normal));\n}\nbutton.primary:is(:hover, :focus-visible, [aria-expanded=true]) {\n  color: var(--sui-button-primary-foreground-color-focus, var(--sui-button-primary-foreground-color, var(--sui-primary-accent-color-inverted)));\n  background-color: var(--sui-button-primary-background-color-focus, var(--sui-primary-accent-color-light));\n}\nbutton.primary:active {\n  color: var(--sui-button-primary-foreground-color-active, var(--sui-button-primary-foreground-color, var(--sui-primary-accent-color-inverted)));\n  background-color: var(--sui-button-primary-background-color-active, var(--sui-primary-accent-color-dark));\n}\nbutton.secondary {\n  border-width: var(--sui-button-secondary-border-width, 1px);\n  border-style: var(--sui-button-secondary-border-style, solid);\n  border-color: var(--sui-button-secondary-border-color, var(--sui-primary-accent-color));\n  color: var(--sui-button-secondary-foreground-color, var(--sui-primary-accent-color-text));\n  background-color: var(--sui-button-secondary-background-color, var(--sui-button-background-color));\n  font-weight: var(--sui-button-secondary-font-weight, var(--sui-font-weight-normal, normal));\n}\nbutton.secondary:is(:hover, :focus-visible, [aria-expanded=true]) {\n  color: var(--sui-button-secondary-foreground-color-focus, var(--sui-button-secondary-foreground-color, var(--sui-primary-accent-color-text)));\n  background-color: var(--sui-button-secondary-background-color-focus, var(--sui-hover-background-color));\n}\nbutton.secondary:active {\n  color: var(--sui-button-secondary-foreground-color-active, var(--sui-button-secondary-foreground-color, var(--sui-primary-accent-color-text)));\n  background-color: var(--sui-button-secondary-background-color-active, var(--sui-active-background-color));\n}\nbutton.secondary[aria-pressed=true] {\n  color: var(--sui-button-secondary-foreground-color-pressed);\n  background-color: var(--sui-button-secondary-background-color-pressed, var(--sui-primary-accent-color));\n}\nbutton.tertiary {\n  border-width: var(--sui-button-tertiary-border-width, 1px);\n  border-style: var(--sui-button-tertiary-border-style, solid);\n  border-color: var(--sui-button-tertiary-border-color, var(--sui-button-border-color));\n  color: var(--sui-button-tertiary-foreground-color, var(--sui-highlight-foreground-color));\n  background-color: var(--sui-button-tertiary-background-color, var(--sui-button-background-color));\n  font-weight: var(--sui-button-tertiary-font-weight, var(--sui-font-weight-normal, normal));\n}\nbutton.tertiary:is(:hover, :focus-visible, [aria-expanded=true]) {\n  color: var(--sui-button-tertiary-foreground-color-focus, var(--sui-button-tertiary-foreground-color, var(--sui-highlight-foreground-color)));\n  background-color: var(--sui-button-tertiary-background-color-focus, var(--sui-hover-background-color));\n}\nbutton.tertiary:active {\n  color: var(--sui-button-tertiary-foreground-color-active, var(--sui-button-tertiary-foreground-color, var(--sui-highlight-foreground-color)));\n  background-color: var(--sui-button-tertiary-background-color-active, var(--sui-active-background-color));\n}\nbutton.tertiary[aria-pressed=true] {\n  color: var(--sui-button-tertiary-foreground-color-pressed);\n  background-color: var(--sui-button-tertiary-background-color-pressed, var(--sui-selected-background-color));\n}\nbutton.ghost {\n  font-weight: var(--sui-button-ghost-font-weight, var(--sui-font-weight-normal, normal));\n}\nbutton.ghost:is(:hover, :focus-visible, [aria-expanded=true]) {\n  color: var(--sui-button-ghost-foreground-color-focus);\n  background-color: var(--sui-button-ghost-background-color-focus, var(--sui-hover-background-color));\n}\nbutton.ghost:active {\n  color: var(--sui-button-ghost-foreground-color-active);\n  background-color: var(--sui-button-ghost-background-color-active, var(--sui-active-background-color));\n}\nbutton.ghost[aria-pressed=true] {\n  color: var(--sui-button-ghost-foreground-color-pressed);\n  background-color: var(--sui-button-ghost-background-color-pressed, var(--sui-selected-background-color));\n}\nbutton.link {\n  outline: 0;\n  margin: 0;\n  border-radius: 0 !important;\n  padding: 0 !important;\n  height: auto !important;\n  color: var(--sui-button-link-foreground-color, var(--sui-primary-accent-color-text));\n}\nbutton.link .label {\n  padding: 0;\n  line-height: var(--sui-line-height-compact);\n  text-decoration: var(--sui-button-link-text-decoration, none);\n  text-underline-offset: 2px;\n  white-space: normal;\n}\n:global(:is(:root, :host)[data-underline-links=\"true\"]) button.link .label {\n  text-decoration: underline;\n}\nbutton.link:is(:hover, :focus, :active) .label {\n  text-decoration: var(--sui-button-link-text-decoration-focus, underline);\n}\nbutton.small {\n  border-radius: var(--sui-button-small-border-radius);\n  padding: var(--sui-button-small-padding);\n  height: var(--sui-button-small-height);\n  font-size: var(--sui-button-small-font-size, var(--sui-font-size-small));\n}\nbutton.small :global(.icon) {\n  font-size: var(--sui-font-size-large);\n}\nbutton.medium {\n  border-radius: var(--sui-button-medium-border-radius);\n  padding: var(--sui-button-medium-padding);\n  height: var(--sui-button-medium-height);\n  font-size: var(--sui-button-medium-font-size, var(--sui-font-size-default));\n}\nbutton.large {\n  border-radius: var(--sui-button-large-border-radius);\n  padding: var(--sui-button-large-padding);\n  height: var(--sui-button-large-height);\n  font-size: var(--sui-button-large-font-size, var(--sui-font-size-large));\n}\nbutton.pill {\n  border-radius: 80px;\n  padding: var(--sui-button-medium-pill-padding, 0 12px);\n}\nbutton.flex {\n  flex: auto;\n  width: -moz-available;\n  width: -webkit-fill-available;\n  width: stretch;\n}\nbutton.iconic {\n  justify-content: center;\n  padding: 0;\n  aspect-ratio: 1/1;\n}\nbutton.danger {\n  background-color: var(--sui-error-background-color);\n}\nbutton .label {\n  padding: 0 4px;\n}\nbutton > :global(*) {\n  pointer-events: none;\n}\nbutton :global(:has([slot=start-icon] + [slot=end-icon])) {\n  gap: 0;\n}</style>\n","<script>\n  import { _ } from 'svelte-i18n';\n  import Button from '../button/button.svelte';\n  import Icon from '../icon/icon.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} [show] Whether to show the toast.\n   * @property {boolean} [dismissible] Whether to show the close button.\n   * @property {'error' | 'warning' | 'info' | 'success'} [status] Information status.\n   * @property {Snippet} [children] Primary slot content.\n   * @property {Snippet} [icon] Icon slot content.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    show = $bindable(true),\n    dismissible = true,\n    status = 'info',\n    children = undefined,\n    icon = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n{#if show}\n  <div role=\"none\" class=\"infobar {status}\">\n    <div role=\"alert\" class=\"message\">\n      {#if icon}\n        {@render icon()}\n      {:else}\n        <Icon name={status === 'success' ? 'check_circle' : status} />\n      {/if}\n      {@render children?.()}\n    </div>\n    {#if dismissible}\n      <div role=\"none\">\n        <Button\n          iconic\n          size=\"small\"\n          variant=\"ghost\"\n          aria-label={$_('_sui.dismiss')}\n          onclick={() => {\n            show = false;\n          }}\n        >\n          <Icon name=\"close\" />\n        </Button>\n      </div>\n    {/if}\n  </div>\n{/if}\n\n<style>.infobar {\n  flex: none;\n  display: flex;\n  align-items: center;\n  gap: var(--sui-infobar-gap, 8px);\n  border-width: var(--sui-infobar-border-width, 0 0 1px);\n  border-style: var(--sui-infobar-border-style, solid);\n  padding: var(--sui-infobar-padding, 0);\n  min-height: var(--sui-infobar-min-height, 32px);\n  font-size: var(--sui-infobar-font-size, var(--sui-font-size-small));\n}\n.infobar.info {\n  border-color: var(--sui-info-border-color);\n  color: var(--sui-info-foreground-color);\n  background-color: var(--sui-info-background-color);\n}\n.infobar.warning {\n  border-color: var(--sui-warning-border-color);\n  color: var(--sui-warning-foreground-color);\n  background-color: var(--sui-warning-background-color);\n}\n.infobar.error {\n  border-color: var(--sui-error-border-color);\n  color: var(--sui-error-foreground-color);\n  background-color: var(--sui-error-background-color);\n}\n.infobar.success {\n  border-color: var(--sui-success-border-color);\n  color: var(--sui-success-foreground-color);\n  background-color: var(--sui-success-background-color);\n}\n\n.message {\n  flex: auto;\n  display: flex;\n  align-items: center;\n  justify-content: var(--sui-infobar-message-justify-content, left);\n  gap: var(--sui-infobar-message-gap, 6px);\n  padding: var(--sui-infobar-message-padding, 0 8px);\n}\n.message :global(button) {\n  font-size: inherit !important;\n}\n.message :global(.icon) {\n  font-size: 16px; /* !hardcoded */\n}</style>\n","<script>\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {boolean} [hidden] Whether to hide the widget. An alias of the `aria-hidden`\n   * attribute.\n   * @property {boolean} [disabled] Whether to disable the widget. An alias of the `aria-disabled`\n   * attribute.\n   * @property {string} [title] Text label displayed above the group items.\n   * @property {Snippet} [children] Primary slot content.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    children,\n    ...rest\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div role=\"none\" class=\"sui bottom-navigation {className}\" {...rest}>\n  {@render children?.()}\n</div>\n\n<style>.bottom-navigation {\n  height: var(--sui-bottom-navigation-height, var(--sui-primary-toolbar-size));\n  border-top-width: var(--sui-bottom-navigation-border-color, 1px);\n  border-top-style: var(--sui-bottom-navigation-border-style, solid);\n  border-top-color: var(--sui-bottom-navigation-border-color, var(--sui-secondary-border-color));\n}\n.bottom-navigation:is([inert], [hidden]) {\n  display: none;\n}\n.bottom-navigation :global(.buttons) {\n  flex: auto;\n  display: flex;\n  align-items: center;\n  justify-content: space-evenly;\n}</style>\n","<script>\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {Snippet} [children] Primary slot content.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    children,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div {...restProps} role=\"group\" class=\"sui button-group {className}\">\n  {@render children?.()}\n</div>\n\n<style>.button-group {\n  flex: none;\n  display: inline-flex;\n  align-items: center;\n}</style>\n","<script>\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Snippet} [children] Slot content.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    children = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div role=\"none\" class=\"sui floating-action-button-wrapper\">\n  {@render children?.()}\n</div>\n\n<style>.floating-action-button-wrapper {\n  display: contents;\n}\n@media (width < 768px) {\n  .floating-action-button-wrapper {\n    display: block;\n    position: fixed;\n    inset: auto 16px 72px auto;\n    z-index: 100;\n  }\n  .floating-action-button-wrapper :global(button) {\n    border-radius: 50%;\n    height: 56px;\n    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.4);\n  }\n  .floating-action-button-wrapper :global(button) :global(.icon) {\n    font-size: 32px;\n  }\n}</style>\n","/**\n * @import { SelectedItemDetail } from '../typedefs';\n */\n\n/**\n * Get the detail of the selected element.\n * @param {HTMLElement} target Element to get the detail from.\n * @returns {SelectedItemDetail} Detail of the selected element.\n */\nexport const getSelectedItemDetail = (target) => {\n  const { type = 'string', name, label } = target.dataset;\n  /** @type {any} */\n  let { value } = target.dataset;\n\n  if (type === 'number') {\n    value = Number(value);\n\n    if (Number.isNaN(value)) {\n      value = null;\n    }\n  } else if (type === 'boolean') {\n    value = value === 'true';\n  } else if (type === 'string') {\n    value = value ? String(value) : '';\n  }\n\n  return { target, type, name, label, value };\n};\n","/**\n * @import { ActionReturn } from 'svelte/action';\n */\n\nimport { generateElementId } from '@sveltia/utils/element';\nimport { sleep } from '@sveltia/utils/misc';\nimport { getSelectedItemDetail } from './select.svelte';\n\n/**\n * Normalize the given string for search value comparison. Since `transliterate` is slow, we only\n * apply basic normalization.\n * @param {string} value Original value.\n * @returns {string} Normalized value.\n * @todo Move this to @sveltia/utils.\n */\nconst normalize = (value) => {\n  value = value.trim();\n\n  if (!value) {\n    return '';\n  }\n\n  return value\n    .normalize('NFD')\n    .replace(/\\p{Diacritic}/gu, '')\n    .toLocaleLowerCase();\n};\n\n/**\n * @type {{ [role: string]: {\n * orientation: 'vertical' | 'horizontal',\n * childRoles: string[],\n * childSelectedAttr: 'aria-selected' | 'aria-checked',\n * focusChild: boolean\n * selectFirst: boolean\n * } }}\n */\nconst config = {\n  grid: {\n    orientation: 'vertical',\n    childRoles: ['row'],\n    childSelectedAttr: 'aria-selected',\n    focusChild: true,\n    selectFirst: true,\n  },\n  listbox: {\n    orientation: 'vertical',\n    childRoles: ['option'],\n    childSelectedAttr: 'aria-selected',\n    focusChild: false,\n    selectFirst: false,\n  },\n  menu: {\n    orientation: 'vertical',\n    childRoles: ['menuitem', 'menuitemcheckbox', 'menuitemradio'],\n    childSelectedAttr: 'aria-checked',\n    focusChild: true,\n    selectFirst: false,\n  },\n  menubar: {\n    orientation: 'horizontal',\n    childRoles: ['menuitem', 'menuitemcheckbox', 'menuitemradio'],\n    childSelectedAttr: 'aria-checked',\n    focusChild: true,\n    selectFirst: false,\n  },\n  radiogroup: {\n    orientation: 'horizontal',\n    childRoles: ['radio'],\n    childSelectedAttr: 'aria-checked',\n    focusChild: true,\n    selectFirst: false,\n  },\n  tablist: {\n    orientation: 'horizontal',\n    childRoles: ['tab'],\n    childSelectedAttr: 'aria-selected',\n    focusChild: true,\n    selectFirst: true,\n  },\n};\n\n/**\n * Implement keyboard and mouse interactions for a grouping composite widget.\n */\nclass Group {\n  /**\n   * Initialize a new `Group` instance.\n   * @param {HTMLElement} parent Parent element.\n   * @param {object} [options] Options.\n   * @param {boolean} [options.clickToSelect] Whether to select an item by clicking on it.\n   * @todo Check for added elements probably with `MutationObserver`.\n   */\n  constructor(parent, { clickToSelect = true } = {}) {\n    parent.dispatchEvent(new CustomEvent('Initializing'));\n\n    this.parent = parent;\n    this.role = /** @type {string} */ (parent.getAttribute('role'));\n    this.multi = this.parent.getAttribute('aria-multiselectable') === 'true';\n    this.id = generateElementId(this.role);\n    this.parentGroupSelector = `[role=\"group\"], [role=\"${this.role}\"]`;\n    this.clickToSelect = clickToSelect;\n\n    const { orientation, childRoles, childSelectedAttr, focusChild, selectFirst } =\n      config[this.role];\n\n    this.orientation = this.grid\n      ? 'horizontal'\n      : (this.parent.getAttribute('aria-orientation') ?? orientation);\n    this.childRoles = childRoles;\n    this.childSelectedAttr = childSelectedAttr;\n    this.childSelectedProp = childSelectedAttr.replace('aria-', '');\n    this.focusChild = focusChild;\n    this.selectFirst = selectFirst;\n\n    this.parent.tabIndex = focusChild ? -1 : 0;\n\n    // Wait a bit before the relevant components, including the `aria-controls` target are mounted\n    (async () => {\n      await sleep(100);\n      this.activate();\n    })();\n  }\n\n  /**\n   * Activate the members.\n   */\n  activate() {\n    const { parent, allMembers, selected: defaultSelected } = this;\n\n    allMembers.forEach((element, index) => {\n      // Select the first one if no member has the `selected` attribute\n      const isSelected =\n        element.getAttribute(this.childSelectedAttr) === 'true' ||\n        (defaultSelected ? element === defaultSelected : this.selectFirst && index === 0);\n\n      const controlTarget = /** @type {HTMLElement | null} */ (\n        document.querySelector(`#${element.getAttribute('aria-controls')}`)\n      );\n\n      element.id ||= `${this.id}-item-${index + 1}`;\n      element.tabIndex = isSelected ? 0 : -1;\n      element.setAttribute(this.childSelectedAttr, String(isSelected));\n\n      if (controlTarget) {\n        controlTarget.inert = !isSelected;\n        controlTarget.setAttribute('aria-labelledby', element.id);\n        controlTarget.setAttribute('aria-hidden', String(!isSelected));\n\n        if (isSelected) {\n          globalThis.setTimeout(() => {\n            try {\n              controlTarget.scrollIntoView({\n                block: 'nearest',\n                inline: 'nearest',\n                behavior: 'auto',\n              });\n            } catch {\n              controlTarget.scrollIntoView(true);\n            }\n          }, 300);\n        }\n      }\n    });\n\n    parent.addEventListener('click', (event) => {\n      this.onClick(event);\n    });\n\n    parent.addEventListener('keydown', (event) => {\n      this.onKeyDown(event);\n    });\n\n    parent.dispatchEvent(new CustomEvent('Initialized'));\n  }\n\n  /**\n   * CSS selector to retrieve the members.\n   * @type {string}\n   */\n  get selector() {\n    return this.childRoles.map((role) => `[role=\"${role}\"]`).join(',');\n  }\n\n  /**\n   * List of all the members.\n   * @type {HTMLElement[]}\n   */\n  get allMembers() {\n    return /** @type {HTMLElement[]} */ ([...this.parent.querySelectorAll(this.selector)]);\n  }\n\n  /**\n   * List of the enabled and visible members.\n   * @type {HTMLElement[]}\n   */\n  get activeMembers() {\n    return this.allMembers.filter(\n      (element) => !element.matches('[aria-disabled=\"true\"], [aria-hidden=\"true\"]'),\n    );\n  }\n\n  /**\n   * Get the currently selected member.\n   * @type {HTMLElement | undefined}\n   */\n  get selected() {\n    return this.activeMembers.find((element) =>\n      element.matches(`[${this.childSelectedAttr}=\"true\"]`),\n    );\n  }\n\n  /**\n   * Whether the parent is disabled.\n   * @type {boolean}\n   */\n  get isDisabled() {\n    return this.parent.matches('[aria-disabled=\"true\"]');\n  }\n\n  /**\n   * Whether the parent is read-only.\n   * @type {boolean}\n   */\n  get isReadOnly() {\n    return this.parent.matches('[aria-readonly=\"true\"]');\n  }\n\n  /**\n   * Whether the widget is displayed in grid mode.\n   * @type {boolean}\n   */\n  get grid() {\n    return this.role === 'grid' || (this.role === 'listbox' && this.parent.matches('.grid'));\n  }\n\n  /**\n   * Select (and move focus to) the given target.\n   * @param {(MouseEvent | KeyboardEvent)} event Triggered event.\n   * @param {HTMLElement} newTarget Target element.\n   */\n  selectTarget(event, newTarget) {\n    if (this.isDisabled || this.isReadOnly) {\n      event.preventDefault();\n\n      return;\n    }\n\n    const targetRole = newTarget.getAttribute('role');\n    const targetParent = newTarget.closest(this.parentGroupSelector);\n    const selectByClick = event.type === 'click';\n\n    const selectByKeydown =\n      event.type === 'keydown' && /** @type {KeyboardEvent} */ (event).key === ' ';\n\n    this.activeMembers.forEach((element) => {\n      const isMenuItemCheckbox = element.matches('[role=\"menuitemcheckbox\"]');\n      const isMenuItemRadio = element.matches('[role=\"menuitemradio\"]');\n\n      if (\n        (isMenuItemCheckbox || isMenuItemRadio) &&\n        (element.getAttribute('role') !== targetRole ||\n          element.closest(this.parentGroupSelector) !== targetParent)\n      ) {\n        return;\n      }\n\n      const multiSelect = isMenuItemCheckbox || this.multi;\n      const singleSelect = isMenuItemRadio || !multiSelect;\n      const isTarget = element === newTarget;\n      const isSelected = element.matches(`[${this.childSelectedAttr}=\"true\"]`);\n      const controlTargetId = element.getAttribute('aria-controls');\n      const controlTarget = controlTargetId ? document.getElementById(controlTargetId) : null;\n\n      if (multiSelect && isTarget && (selectByClick || selectByKeydown)) {\n        element.setAttribute(this.childSelectedAttr, String(!isSelected));\n        element.dispatchEvent(\n          new CustomEvent('Change', { detail: { [this.childSelectedProp]: !isSelected } }),\n        );\n\n        if (!isSelected) {\n          element.dispatchEvent(new CustomEvent('Select'));\n        }\n      }\n\n      if (\n        singleSelect &&\n        isSelected !== isTarget &&\n        (isMenuItemRadio ? selectByKeydown || selectByClick : true)\n      ) {\n        element.setAttribute(this.childSelectedAttr, String(isTarget));\n        element.dispatchEvent(\n          new CustomEvent('Change', { detail: { [this.childSelectedProp]: isTarget } }),\n        );\n\n        if (isTarget) {\n          element.dispatchEvent(new CustomEvent('Select'));\n        }\n      }\n\n      if (this.focusChild) {\n        // Wait a bit before the element is rerendered\n        globalThis.requestAnimationFrame(() => {\n          element.tabIndex = isTarget ? 0 : -1;\n\n          if (isTarget) {\n            element.focus();\n            element.dispatchEvent(new CustomEvent('Focus'));\n          }\n        });\n      } else {\n        element.classList.toggle('focused', isTarget);\n\n        if (isTarget) {\n          element.dispatchEvent(new CustomEvent('Focus'));\n        }\n      }\n\n      if (controlTarget) {\n        controlTarget.inert = !isTarget;\n        controlTarget.setAttribute('aria-hidden', String(!isTarget));\n\n        if (isTarget) {\n          globalThis.setTimeout(() => {\n            try {\n              controlTarget.scrollIntoView({\n                block: 'nearest',\n                inline: 'nearest',\n                behavior: 'auto',\n              });\n            } catch {\n              controlTarget.scrollIntoView(true);\n            }\n          }, 300);\n        }\n      }\n\n      if (isTarget) {\n        this.parent.setAttribute('aria-activedescendant', element.id);\n\n        globalThis.setTimeout(() => {\n          try {\n            element.scrollIntoView({ block: 'nearest', inline: 'nearest', behavior: 'auto' });\n          } catch {\n            element.scrollIntoView(true);\n          }\n        }, 300);\n      }\n    });\n\n    this.parent.dispatchEvent(\n      new CustomEvent('Change', { detail: getSelectedItemDetail(newTarget) }),\n    );\n  }\n\n  /**\n   * Handle the `click` event on the widget.\n   * @param {MouseEvent} event `click` event.\n   */\n  onClick(event) {\n    // eslint-disable-next-line prefer-destructuring\n    const target = /** @type {HTMLElement} */ (event.target);\n\n    const newTarget = target.matches(this.selector)\n      ? target\n      : /** @type {HTMLElement | null} */ (target.closest(this.selector));\n\n    if (!newTarget || event.button !== 0 || !this.clickToSelect) {\n      return;\n    }\n\n    this.selectTarget(event, newTarget);\n  }\n\n  /**\n   * Handle the `keydown` event on the widget.\n   * @param {KeyboardEvent} event `keydown` event.\n   */\n  onKeyDown(event) {\n    const { key, ctrlKey, metaKey, shiftKey, altKey } = event;\n    const hasModifier = shiftKey || altKey || ctrlKey || metaKey;\n\n    if (hasModifier) {\n      return;\n    }\n\n    // eslint-disable-next-line prefer-destructuring\n    const target = /** @type {HTMLElement} */ (event.target);\n    const { allMembers, activeMembers } = this;\n\n    /** @type {HTMLElement | undefined} */\n    const currentTarget = (() => {\n      if (!this.focusChild) {\n        return activeMembers.find((member) => member.matches('.focused'));\n      }\n\n      if (target.matches(this.selector)) {\n        return target;\n      }\n\n      return undefined;\n    })();\n\n    if (['Enter', ' ', 'ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(key)) {\n      event.preventDefault();\n    }\n\n    if (key === 'Enter') {\n      currentTarget?.click(); // Also close the popup if needed\n\n      return;\n    }\n\n    if (key === ' ') {\n      if (currentTarget) {\n        this.selectTarget(event, currentTarget);\n      }\n\n      return;\n    }\n\n    let index;\n    let newTarget;\n\n    if (this.grid) {\n      const colCount = Math.floor(this.parent.clientWidth / activeMembers[0].clientWidth);\n\n      index = currentTarget ? allMembers.indexOf(currentTarget) : -1;\n\n      if (key === 'ArrowUp' && index > 0) {\n        newTarget = allMembers[index - colCount];\n      }\n\n      if (key === 'ArrowDown' && index < allMembers.length - 1) {\n        newTarget = allMembers[index + colCount];\n      }\n\n      if (key === 'ArrowLeft' && index > 0) {\n        newTarget = allMembers[index - 1];\n      }\n\n      if (key === 'ArrowRight' && index < allMembers.length - 1) {\n        newTarget = allMembers[index + 1];\n      }\n\n      if (newTarget?.matches('[aria-disabled=\"true\"], [aria-hidden=\"true\"]')) {\n        newTarget = undefined;\n      }\n    } else {\n      index = currentTarget ? activeMembers.indexOf(currentTarget) : -1;\n\n      if (key === (this.orientation === 'horizontal' ? 'ArrowLeft' : 'ArrowUp')) {\n        if (index > 0) {\n          // Previous member\n          newTarget = activeMembers[index - 1];\n        }\n\n        if (index === 0) {\n          // Last member\n          newTarget = activeMembers[activeMembers.length - 1];\n        }\n      }\n\n      if (key === (this.orientation === 'horizontal' ? 'ArrowRight' : 'ArrowDown')) {\n        if (index < activeMembers.length - 1) {\n          // Next member\n          newTarget = activeMembers[index + 1];\n        }\n\n        if (index === activeMembers.length - 1) {\n          // First member\n          [newTarget] = activeMembers;\n        }\n      }\n    }\n\n    if (newTarget && newTarget !== currentTarget) {\n      this.selectTarget(event, newTarget);\n    }\n  }\n\n  /**\n   * Called whenever the params are updated. Filter the items based on the search terms.\n   * @param {{ searchTerms: string }} params Updated params.\n   */\n  onUpdate({ searchTerms }) {\n    const terms = normalize(searchTerms);\n    const _terms = terms ? terms.split(/\\s+/) : [];\n\n    const matched = this.allMembers\n      .map((member) => {\n        const searchValue = normalize(\n          member.dataset.searchValue ??\n            member.dataset.label ??\n            member.querySelector('.label')?.textContent ??\n            member.textContent ??\n            '',\n        );\n\n        const hidden = !_terms.every((term) => searchValue.includes(term));\n\n        member.dispatchEvent(new CustomEvent('Toggle', { detail: { hidden } }));\n\n        return hidden;\n      })\n      .filter((hidden) => !hidden).length;\n\n    this.parent.dispatchEvent(\n      new CustomEvent('Filter', { detail: { matched, total: this.allMembers.length } }),\n    );\n  }\n}\n\n/**\n * Activate a new group.\n * @param {HTMLElement} parent Parent element.\n * @param {object} [params] Action params.\n * @returns {ActionReturn} Action.\n */\nexport const activateGroup = (parent, params) => {\n  const group = new Group(parent, params);\n\n  return {\n    /**\n     * Called whenever the params are updated.\n     * @param {any} newParams Updated params.\n     */\n    update(newParams) {\n      group.onUpdate(newParams);\n    },\n  };\n};\n","<!--\n  @component\n  A variant of `<RadioGroup>`, looking like normal buttons.\n  @see https://w3c.github.io/aria/#radiogroup\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/radio/\n-->\n<script>\n  import { activateGroup } from '../../services/group.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {boolean} [hidden] Whether to hide the widget.\n   * @property {boolean} [disabled] Whether to disable the widget. An alias of the `aria-disabled`\n   * attribute.\n   * @property {boolean} [readonly] Whether to make the widget read-only. An alias of the\n   * `aria-readonly` attribute.\n   * @property {boolean} [required] Whether to mark the widget required. An alias of the\n   * `aria-required` attribute.\n   * @property {boolean} [invalid] Whether to mark the widget invalid. An alias of the\n   * `aria-invalid` attribute.\n   * @property {Snippet} [children] Primary slot content.\n   * @property {(event: CustomEvent) => void} [onChange] Custom `Change` event handler.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    hidden = false,\n    disabled = false,\n    readonly = false,\n    required = false,\n    invalid = false,\n    children,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div\n  {...restProps}\n  role=\"radiogroup\"\n  class=\"sui select-button-group {className}\"\n  {hidden}\n  tabindex=\"-1\"\n  aria-hidden={hidden}\n  aria-disabled={disabled}\n  aria-readonly={readonly}\n  aria-required={required}\n  aria-invalid={invalid}\n  use:activateGroup\n>\n  <div role=\"none\" class=\"inner\" inert={disabled}>\n    {@render children?.()}\n  </div>\n</div>\n\n<style>.select-button-group {\n  flex: none;\n  display: inline-flex;\n  align-items: center;\n  margin: var(--sui-focus-ring-width);\n}\n.select-button-group:focus-visible {\n  outline-width: 0 !important;\n}\n.select-button-group :global(button) {\n  margin: 0 !important;\n  border-radius: 0 !important;\n  color: var(--sui-primary-foreground-color);\n}\n.select-button-group :global(button:first-child) {\n  border-top-left-radius: 4px !important;\n  border-bottom-left-radius: 4px !important;\n}\n.select-button-group :global(button:not(:first-child)) {\n  border-left-width: 0;\n}\n.select-button-group :global(button:last-child) {\n  border-top-right-radius: 4px !important;\n  border-bottom-right-radius: 4px !important;\n}\n.select-button-group :global(button[aria-checked=true]) {\n  color: var(--sui-highlight-foreground-color);\n  background-color: var(--sui-selected-background-color);\n}\n.select-button-group :global([aria-invalid=true]) :global(button) {\n  border-color: var(--sui-error-border-color);\n}\n.select-button-group :global([aria-disabled=false]) :global(button[aria-disabled=true]) {\n  filter: grayscale(0) opacity(1);\n}\n.select-button-group :global([aria-disabled=false]) :global(button[aria-disabled=true]) :global(*) {\n  filter: grayscale(1) opacity(0.35);\n}\n\n.inner {\n  display: contents;\n}</style>\n","<!--\n  @component\n  A variant of `<Radio>`, looking like a normal button.\n  @see https://w3c.github.io/aria/#radio\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/radio/\n-->\n<script>\n  import Button from './button.svelte';\n\n  /**\n   * @import { ButtonProps, CommonEventHandlers } from '../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} [selected] Whether to select the widget. An alias of the `aria-checked`\n   * attribute. Because the UI is a button, we expose `selected` instead of `checked`.\n   */\n\n  /**\n   * @type {ButtonProps & CommonEventHandlers & Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    selected = $bindable(false),\n    class: className,\n    onChange,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<Button\n  {...restProps}\n  role=\"radio\"\n  class=\"sui select-button {className}\"\n  aria-checked={selected}\n  onChange={(event) => {\n    selected = event.detail.selected;\n    onChange?.(event);\n  }}\n></Button>\n","<!--\n  @component\n  A button to open a `<Menu>` widget.\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/menu-button/\n-->\n<script>\n  import Button from '../button/button.svelte';\n  import Icon from '../icon/icon.svelte';\n  import Popup from '../util/popup.svelte';\n\n  /**\n   * @import { ButtonProps, CommonEventHandlers } from '../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {HTMLElement} [popupPositionBaseElement] The base element of {@link popupPosition}.\n   * If omitted, this will be {@link buttonComponent}.\n   */\n\n  /**\n   * @type {ButtonProps & CommonEventHandlers & Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    hidden = false,\n    disabled = false,\n    popupPosition = 'bottom-left',\n    popupPositionBaseElement = undefined,\n    showPopupBackdrop = false,\n    label = '',\n    variant = undefined,\n    size = 'medium',\n    iconic = false,\n    children: _children,\n    startIcon: _startIcon,\n    endIcon: _endIcon,\n    popup,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /**\n   * Reference to the `<button>` element.\n   * @type {HTMLButtonElement | undefined}\n   */\n  let buttonElement = $state();\n\n  /**\n   * Move focus to the `<button>` element.\n   */\n  export const focus = () => {\n    buttonElement?.focus();\n  };\n</script>\n\n<Button\n  {...restProps}\n  bind:element={buttonElement}\n  class=\"sui menu-button {className}\"\n  {hidden}\n  {disabled}\n  {label}\n  {variant}\n  {size}\n  {iconic}\n  aria-haspopup=\"menu\"\n>\n  {#snippet startIcon()}\n    {@render _startIcon?.()}\n  {/snippet}\n  {#snippet children()}\n    {@render _children?.()}\n  {/snippet}\n  {#snippet endIcon()}\n    {#if _endIcon}\n      {@render _endIcon()}\n    {:else if iconic}\n      <Icon name=\"more_vert\" />\n    {:else}\n      <Icon name=\"arrow_drop_down\" class=\"small-arrow\" />\n    {/if}\n  {/snippet}\n</Button>\n\n<Popup\n  anchor={buttonElement}\n  position={popupPosition}\n  positionBaseElement={popupPositionBaseElement}\n  showBackdrop={showPopupBackdrop}\n>\n  {@render popup?.()}\n</Popup>\n","<!--\n  @component\n  A combination of a normal `<Button>` (default action) and an arrow-only `<MenuButton>` (different\n  actions). For example, Microsoft Word has the Paste button along with the Keep Source Formatting,\n  Match Formatting and Keep Text Only options.\n  @see https://www.google.com/search?q=split+button&tbm=isch\n-->\n<script>\n  import { _ } from 'svelte-i18n';\n  import Icon from '../icon/icon.svelte';\n  import MenuButton from '../menu/menu-button.svelte';\n  import Button from './button.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import { ButtonProps, CommonEventHandlers, PopupPosition } from '../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {PopupPosition} [popupPosition] Where to show the dropdown menu.\n   * @property {boolean} [showPopupBackdrop] Whether to show the backdrop for the popup.\n   * @property {Snippet} [chevronIcon] Chevron slot content.\n   * @property {Snippet} [popup] Popup slot content.\n   */\n\n  /**\n   * @type {ButtonProps & CommonEventHandlers & Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    hidden = false,\n    disabled = false,\n    label = '',\n    variant = undefined,\n    size = 'medium',\n    popupPosition = 'bottom-left',\n    showPopupBackdrop = false,\n    chevronIcon,\n    popup: _popup,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /**\n   * @type {HTMLElement | undefined}\n   */\n  let wrapper = $state();\n</script>\n\n<div\n  bind:this={wrapper}\n  role=\"group\"\n  class=\"sui split-button\"\n  {hidden}\n  aria-hidden={hidden}\n  aria-disabled={disabled}\n  aria-label={$_('_sui.split_button.x_options', { values: { name: label } })}\n>\n  <Button {...restProps} {hidden} {disabled} {label} {variant} {size}></Button>\n  <MenuButton\n    iconic\n    {hidden}\n    {disabled}\n    {variant}\n    {size}\n    aria-label={$_('_sui.split_button.more_options')}\n    {popupPosition}\n    popupPositionBaseElement={wrapper}\n    {showPopupBackdrop}\n  >\n    {#snippet endIcon()}\n      {#if chevronIcon}\n        {@render chevronIcon()}\n      {:else}\n        <Icon name=\"arrow_drop_down\" class=\"small-arrow\" />\n      {/if}\n    {/snippet}\n    {#snippet popup()}\n      {@render _popup?.()}\n    {/snippet}\n  </MenuButton>\n</div>\n\n<style>.split-button {\n  flex: none;\n  display: inline-flex;\n  margin: var(--sui-focus-ring-width);\n}\n.split-button :global(button) {\n  margin: 0;\n}\n.split-button :global(button.menu-button) {\n  border-left-width: 0;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n  aspect-ratio: 3/4;\n}\n.split-button :global(button:not(.menu-button)) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}</style>\n","<!--\n  @component\n  A content divider with a visible vertical/horizontal line.\n  @see https://w3c.github.io/aria/#separator\n-->\n<script>\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {boolean} [hidden] Whether to hide the widget. An alias of the `aria-hidden`\n   * attribute.\n   * @property {'horizontal'|'vertical'} [orientation] Orientation of the widget. An alias of the\n   * `aria-orientation` attribute.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    hidden = false,\n    orientation = 'horizontal',\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div\n  {...restProps}\n  role=\"separator\"\n  class=\"sui divider {className}\"\n  {hidden}\n  aria-hidden={hidden}\n  aria-orientation={orientation}\n></div>\n\n<style>.divider {\n  flex: none;\n  background-color: var(--sui-secondary-border-color);\n}\n.divider[aria-orientation=horizontal] {\n  margin: 8px 0;\n  width: 100%;\n  height: 1px;\n}\n.divider[aria-orientation=vertical] {\n  margin: 0 8px;\n  width: 1px;\n  height: 100%;\n}</style>\n","<!--\n  @component\n  A content divider with no line. It can be flexible.\n-->\n<script>\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {boolean} [flex] Whether to make the spacer flexible.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    flex = false,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div {...restProps} role=\"none\" class=\"sui spacer {className}\" class:flex></div>\n\n<style>.spacer.flex {\n  flex: auto;\n}\n.spacer:not(.flex) {\n  width: 8px;\n  height: 8px;\n}</style>\n","<!--\n  @component\n  The layout container of `<Checkbox>`es.\n-->\n<script>\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {boolean} [hidden] Whether to hide the widget. An alias of the `aria-hidden`\n   * attribute.\n   * @property {boolean} [disabled] Whether to disable the widget. An alias of the `aria-disabled`\n   * attribute.\n   * @property {'horizontal'|'vertical'} [orientation] Orientation of the widget.\n   * @property {Snippet} [children] Primary slot content.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    hidden = false,\n    disabled = false,\n    orientation = 'horizontal',\n    children,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div\n  {...restProps}\n  role=\"group\"\n  class=\"sui checkbox-group {className} {orientation}\"\n  {hidden}\n  aria-hidden={hidden}\n  aria-disabled={disabled}\n  aria-roledescription=\"checkbox group\"\n>\n  <div role=\"none\" class=\"inner\" inert={disabled}>\n    {@render children?.()}\n  </div>\n</div>\n\n<style>.checkbox-group {\n  display: inline-flex;\n}\n.checkbox-group.horizontal {\n  gap: 8px;\n  align-items: center;\n  flex-wrap: wrap;\n}\n.checkbox-group.vertical {\n  gap: 4px;\n  flex-direction: column;\n}\n@media (pointer: coarse) {\n  .checkbox-group.vertical {\n    gap: 8px;\n  }\n}\n\n.inner {\n  display: contents;\n}</style>\n","<!--\n  @component\n  The equivalent of the HTML `<input type=\"checkbox\">` element.\n  @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox\n  @see https://w3c.github.io/aria/#checkbox\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/checkbox/\n-->\n<script>\n  import Button from '../button/button.svelte';\n  import Icon from '../icon/icon.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import { ButtonProps, CommonEventHandlers } from '../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {boolean} [required] Whether to mark the widget required. An alias of the\n   * `aria-required` attribute.\n   * @property {boolean} [invalid] Whether to mark the widget invalid. An alias of the\n   * `aria-invalid` attribute.\n   * @property {boolean | 'mixed'} [checked] Whether to check the widget. An alias of the\n   * `aria-checked` attribute.\n   * @property {string} [label] Text label displayed next to the checkbox.\n   * @property {string} [aria-label] `aria-label` attribute.\n   * @property {Snippet} [checkIcon] Check icon slot content.\n   */\n\n  /**\n   * @type {ButtonProps & CommonEventHandlers & Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    checked = $bindable(),\n    class: className,\n    name = undefined,\n    value = undefined,\n    hidden = false,\n    disabled = false,\n    readonly = false,\n    required = false,\n    invalid = false,\n    label = undefined,\n    'aria-label': ariaLabel,\n    onChange,\n    children,\n    checkIcon,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const id = $props.id();\n\n  /**\n   * Reference to the `<button>` element.\n   * @type {HTMLButtonElement | undefined}\n   */\n  let buttonElement = $state();\n\n  const indeterminate = $derived(checked === 'mixed');\n</script>\n\n<div\n  role=\"none\"\n  class=\"sui checkbox {className}\"\n  class:checked\n  class:indeterminate\n  class:disabled\n  class:readonly\n  {hidden}\n  onclick={(event) => {\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (!(/** @type {HTMLElement} */ (event.target).matches('button'))) {\n      buttonElement?.click();\n    }\n  }}\n>\n  <div role=\"none\" class=\"inner\" inert={disabled}>\n    <Button\n      {...restProps}\n      bind:element={buttonElement}\n      role=\"checkbox\"\n      {id}\n      {name}\n      {value}\n      {hidden}\n      {disabled}\n      {readonly}\n      {required}\n      aria-invalid={invalid}\n      aria-checked={checked}\n      aria-label={ariaLabel || undefined}\n      aria-labelledby={ariaLabel ? undefined : `${id}-label`}\n      onclick={(event) => {\n        event.preventDefault();\n        event.stopPropagation();\n\n        if (!disabled && !readonly) {\n          checked = indeterminate ? true : !checked;\n          onChange?.(new CustomEvent('Change', { detail: { checked } }));\n        }\n      }}\n    >\n      {#snippet startIcon()}\n        {#if checkIcon}\n          {@render checkIcon()}\n        {:else if indeterminate}\n          <Icon name=\"remove\" />\n        {:else if checked}\n          <Icon name=\"check\" />\n        {/if}\n      {/snippet}\n    </Button>\n    {#if children || label}\n      <label id=\"{id}-label\">\n        {#if children}\n          {@render children()}\n        {:else}\n          {label}\n        {/if}\n      </label>\n    {/if}\n  </div>\n</div>\n\n<style>.checkbox {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  margin: var(--sui-focus-ring-width);\n  color: var(--sui-control-foreground-color);\n  font-family: var(--sui-control-font-family);\n  font-size: var(--sui-control-font-size);\n  line-height: var(--sui-control-line-height);\n  cursor: pointer;\n  -webkit-user-select: none;\n  user-select: none;\n}\n.checkbox:hover :global(button) {\n  background-color: var(--sui-hover-background-color);\n}\n.checkbox:hover :global(button[aria-checked=true]) {\n  background-color: var(--sui-primary-accent-color-light);\n}\n.checkbox:active :global(button) {\n  background-color: var(--sui-active-background-color);\n}\n.checkbox:active :global(button[aria-checked=true]) {\n  background-color: var(--sui-primary-accent-color-dark);\n}\n.checkbox :global(button) {\n  flex: none;\n  align-items: center;\n  justify-content: center;\n  overflow: hidden;\n  margin: 0 !important;\n  border-width: var(--sui-checkbox-border-width, 1.5px);\n  border-color: var(--sui-checkbox-border-color);\n  border-radius: var(--sui-checkbox-border-radius);\n  padding: 0;\n  width: var(--sui-checkbox-height);\n  height: var(--sui-checkbox-height);\n  color: var(--sui-primary-accent-text-color);\n  background-color: var(--sui-checkbox-background-color);\n  transition: all 200ms;\n}\n.checkbox :global(button[aria-checked=true]) {\n  border-color: var(--sui-checkbox-border-color-checked, var(--sui-primary-accent-color));\n  color: var(--sui-checkbox-foreground-color-checked, var(--sui-primary-accent-color-inverted));\n  background-color: var(--sui-checkbox-background-color-checked, var(--sui-primary-accent-color));\n}\n.checkbox :global(button[aria-invalid=true]) {\n  border-color: var(--sui-error-border-color);\n  color: var(--sui-error-foreground-color);\n}\n.checkbox :global(button[aria-checked=true][aria-invalid=true]) {\n  background-color: var(--sui-checkbox-background-color);\n}\n.checkbox :global(button) :global(.icon) {\n  font-size: calc(var(--sui-checkbox-height) - 2px);\n}\n.checkbox label {\n  cursor: inherit;\n}\n\n.inner {\n  display: contents;\n}</style>\n","<!--\n  @component\n  A feedback dialog widget based on the HTML `<dialog>` element.\n  @see https://w3c.github.io/aria/#dialog\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/\n-->\n<script>\n  import { sleep } from '@sveltia/utils/misc';\n  import { _ } from 'svelte-i18n';\n  import Button from '../button/button.svelte';\n  import Spacer from '../divider/spacer.svelte';\n  import Icon from '../icon/icon.svelte';\n  import Modal from '../util/modal.svelte';\n\n  /**\n   * @import { DialogProps, ModalProps } from '../../typedefs';\n   */\n\n  /**\n   * @type {ModalProps & DialogProps & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    open = $bindable(false),\n    value = $bindable(''),\n    title,\n    role = 'dialog',\n    size = 'medium',\n    class: className,\n    showClose = false,\n    showOk = true,\n    showCancel = true,\n    okLabel = '',\n    okShortcuts = undefined,\n    okDisabled = false,\n    cancelLabel = '',\n    cancelShortcuts = undefined,\n    cancelDisabled = false,\n    focusInput = true,\n    children,\n    header,\n    headerExtra,\n    footer,\n    footerExtra,\n    closeIcon,\n    input: _input,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /**\n   * The ID of the drawer.\n   * @type {string}\n   */\n  const id = $props.id();\n  /**\n   * A reference to the modal component.\n   * @type {Modal | undefined}\n   */\n  let modal = $state();\n  /**\n   * @type {HTMLElement | undefined}\n   */\n  let content = $state();\n\n  $effect(() => {\n    if (open && content) {\n      (async () => {\n        await sleep(50);\n\n        if (focusInput) {\n          /** @type {HTMLInputElement | HTMLButtonElement} */ (\n            content?.querySelector('input, button.primary')\n          )?.focus();\n          /** @type {HTMLInputElement} */ (content?.querySelector('input'))?.select();\n        } else {\n          modal?.focus();\n        }\n      })();\n    }\n  });\n</script>\n\n<Modal\n  bind:this={modal}\n  {...restProps}\n  {role}\n  {id}\n  class=\"dialog\"\n  aria-label={header ? undefined : title}\n  aria-labelledby={header ? title : `${id}-title`}\n  aria-describedby=\"{id}-body\"\n  bind:open\n  showBackdrop\n>\n  <div bind:this={content} role=\"none\" class=\"content {className} {size}\">\n    {#if title || showClose || header || headerExtra}\n      <div role=\"none\" class=\"header\">\n        {#if header}\n          {@render header()}\n        {:else}\n          <div role=\"none\" id=\"{id}-title\" class=\"title\">\n            {title}\n          </div>\n          <Spacer flex={true} />\n          {@render headerExtra?.()}\n          {#if showClose}\n            <Button\n              variant=\"ghost\"\n              iconic\n              aria-label={$_('_sui.close')}\n              aria-controls={id}\n              onclick={() => {\n                modal?.close('close');\n              }}\n            >\n              {#snippet startIcon()}\n                {#if closeIcon}\n                  {@render closeIcon()}\n                {:else}\n                  <Icon name=\"close\" />\n                {/if}\n              {/snippet}\n            </Button>\n          {/if}\n        {/if}\n      </div>\n    {/if}\n    <div role=\"none\" id=\"{id}-body\" class=\"body\">\n      {@render children?.()}\n    </div>\n    {#if showOk || showCancel || footer || footerExtra}\n      <div role=\"none\" class=\"footer\">\n        {#if footer}\n          {@render footer?.()}\n        {:else}\n          {@render footerExtra?.()}\n          <Spacer flex={true} />\n          {#if showOk}\n            <Button\n              variant=\"primary\"\n              label={okLabel || $_('_sui.ok')}\n              keyShortcuts={okShortcuts}\n              disabled={okDisabled}\n              onclick={() => {\n                modal?.close('ok');\n              }}\n            />\n          {/if}\n          {#if showCancel}\n            <Button\n              variant=\"secondary\"\n              label={cancelLabel || $_('_sui.cancel')}\n              keyShortcuts={cancelShortcuts}\n              disabled={cancelDisabled}\n              onclick={() => {\n                modal?.close('cancel');\n              }}\n            />\n          {/if}\n        {/if}\n      </div>\n    {/if}\n  </div>\n</Modal>\n\n<style>.content {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n  border-radius: var(--sui-dialog-content-border-radius, 4px);\n  max-width: calc(100dvw - var(--sui-dialog-content-margin, 16px) * 2);\n  background-color: var(--sui-dialog-content-background-color, var(--sui-secondary-background-color-translucent));\n  box-shadow: var(--sui-dialog-content-box-shadow, 0 8px 16px var(--sui-popup-shadow-color));\n  -webkit-backdrop-filter: var(--sui-dialog-content-backdrop-filter, blur(16px));\n  backdrop-filter: var(--sui-dialog-content-backdrop-filter, blur(16px));\n  transition-property: transform;\n}\n:global(dialog.open) .content {\n  transition-duration: 150ms;\n  transform: scale(100%);\n}\n:global(dialog:not(.open)) .content {\n  transition-duration: 300ms;\n  transform: scale(90%);\n}\n.content.small {\n  width: var(--sui-dialog-small-content-width, var(--sui-dialog-content-width, 400px));\n  max-height: var(--sui-dialog-small-content-max-height, var(--sui-dialog-content-max-height, 400px));\n}\n@media (max-height: 400px) {\n  .content.small {\n    max-height: calc(100dvh - 32px);\n  }\n}\n.content.medium {\n  width: var(--sui-dialog-medium-content-width, var(--sui-dialog-content-width, 600px));\n  max-height: var(--sui-dialog-medium-content-max-height, var(--sui-dialog-content-max-height, 600px));\n}\n@media (max-height: 600px) {\n  .content.medium {\n    max-height: calc(100dvh - 32px);\n  }\n}\n.content.large {\n  width: var(--sui-dialog-large-content-width, var(--sui-dialog-content-width, 800px));\n  max-height: var(--sui-dialog-large-content-max-height, var(--sui-dialog-content-max-height, 800px));\n}\n@media (max-height: 800px) {\n  .content.large {\n    max-height: calc(100dvh - 32px);\n  }\n}\n.content.x-large {\n  width: var(--sui-dialog-x-large-content-width, var(--sui-dialog-content-width, 1000px));\n  max-height: var(--sui-dialog-x-large-content-max-height, var(--sui-dialog-content-max-height, 1000px));\n}\n@media (max-height: 1000px) {\n  .content.x-large {\n    max-height: calc(100dvh - 32px);\n  }\n}\n\n:is(.header, .footer) {\n  display: flex;\n  align-items: center;\n  gap: 4px;\n}\n\n.header {\n  box-sizing: content-box;\n  margin: var(--sui-dialog-header-margin, 0 16px);\n  border-width: var(--sui-dialog-header-border-width, 0 0 1px);\n  border-color: var(--sui-dialog-header-border-color, var(--sui-secondary-border-color));\n  padding: var(--sui-dialog-header-padding, 16px 8px);\n  height: var(--sui-dialog-header-height, 32px);\n}\n.header .title {\n  font-size: var(--sui-font-size-large);\n  font-weight: var(--sui-font-weight-bold);\n}\n\n.footer {\n  margin: var(--sui-dialog-footer-margin, 0 24px 24px);\n}\n@media (width < 768px) {\n  .footer {\n    margin: var(--sui-dialog-footer-margin, 0 16px 16px);\n  }\n}\n\n.body {\n  overflow: auto;\n  margin: var(--sui-dialog-body-margin, 24px 24px);\n  white-space: normal;\n  line-height: var(--sui-line-height-compact);\n}\n@media (width < 768px) {\n  .body {\n    margin: var(--sui-dialog-body-margin, 16px 16px);\n  }\n}</style>\n","<!--\n  @component\n  A modal alert dialog. It only shows the OK button, just like `window.alert()`.\n  @see https://w3c.github.io/aria/#alertdialog\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/alertdialog/\n  @see https://developer.mozilla.org/en-US/docs/Web/API/Window/alert\n-->\n<script>\n  import Dialog from './dialog.svelte';\n\n  /**\n   * @import { DialogProps, ModalProps } from '../../typedefs';\n   */\n\n  /**\n   * @type {ModalProps & DialogProps & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    open = $bindable(false),\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<Dialog {...restProps} bind:open role=\"alertdialog\" showCancel={false}></Dialog>\n","<!--\n  @component\n  A modal confirmation dialog. It shows the OK and Cancel buttons, just like `window.confirm()`.\n  @see https://w3c.github.io/aria/#alertdialog\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/alertdialog/\n  @see https://developer.mozilla.org/en-US/docs/Web/API/Window/confirm\n-->\n<script>\n  import Dialog from './dialog.svelte';\n\n  /**\n   * @import { DialogProps, ModalProps } from '../../typedefs';\n   */\n\n  /**\n   * @type {ModalProps & DialogProps & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    open = $bindable(false),\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<Dialog {...restProps} bind:open role=\"alertdialog\"></Dialog>\n","<!--\n  @component\n  A generic, single-line text field. The equivalent of the HTML `<input type=\"text\">` element.\n  @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/text\n  @see https://w3c.github.io/aria/#textbox\n-->\n<script>\n  import { activateKeyShortcuts } from '../../services/events.svelte';\n  import TruncatedText from '../typography/truncated-text.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import { CommonEventHandlers, InputEventHandlers, TextInputProps } from '../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [value] Input value.\n   */\n\n  /**\n   * @type {TextInputProps & CommonEventHandlers & InputEventHandlers & Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    value = $bindable(),\n    element = $bindable(),\n    role = 'textbox',\n    keyShortcuts = undefined,\n    name = undefined,\n    showInlineLabel = false,\n    inputmode = 'text',\n    flex = false,\n    class: className,\n    hidden = false,\n    disabled = false,\n    readonly = false,\n    required = false,\n    invalid = false,\n    'aria-label': ariaLabel,\n    children,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const id = $props.id();\n</script>\n\n<div\n  role=\"none\"\n  class=\"sui text-input {className}\"\n  class:flex\n  class:disabled\n  class:readonly\n  {hidden}\n>\n  <input\n    bind:this={element}\n    {...restProps}\n    bind:value\n    type=\"text\"\n    {role}\n    dir=\"auto\"\n    name={name || undefined}\n    tabindex={disabled ? -1 : 0}\n    disabled={disabled || undefined}\n    readonly={readonly || undefined}\n    {inputmode}\n    aria-label={ariaLabel}\n    aria-hidden={hidden}\n    aria-disabled={disabled}\n    aria-readonly={readonly}\n    aria-required={required}\n    aria-invalid={invalid}\n    use:activateKeyShortcuts={keyShortcuts}\n  />\n  {#if ariaLabel && showInlineLabel}\n    <span id=\"{id}-label\" class=\"label\" class:hidden={!!value} aria-hidden=\"true\">\n      <TruncatedText>\n        {ariaLabel}\n      </TruncatedText>\n    </span>\n  {/if}\n</div>\n\n<style>.text-input {\n  display: inline-flex;\n  align-items: center;\n  position: relative;\n  margin: var(--sui-focus-ring-width);\n  min-width: var(--sui-textbox-singleline-min-width);\n}\n.text-input.flex {\n  width: -moz-available;\n  width: -webkit-fill-available;\n  width: stretch;\n  min-width: 0;\n}\n\ninput:is(:-webkit-autofill, :-webkit-autofill:focus) {\n  transition: background-color 0s 600000s, color 0s 600000s;\n}\n\ninput {\n  display: inline-block;\n  flex: auto;\n  border-width: var(--sui-textbox-border-width, 1px);\n  border-color: var(--sui-textbox-border-color);\n  border-radius: var(--sui-textbox-border-radius);\n  padding: var(--sui-textbox-singleline-padding);\n  min-width: 0;\n  height: var(--sui-textbox-height);\n  color: var(--sui-textbox-foreground-color);\n  background-color: var(--sui-textbox-background-color);\n  font-family: var(--sui-textbox-font-family);\n  font-size: var(--sui-textbox-font-size);\n  line-height: var(--sui-textbox-singleline-line-height);\n  font-weight: var(--sui-textbox-font-weight, var(--sui-font-weight-normal, normal));\n  text-align: var(--sui-textbox-text-align, start);\n  text-indent: var(--sui-textbox-text-indent, 0);\n  text-transform: var(--sui-textbox-text-transform, none);\n  letter-spacing: var(--sui-textbox-letter-spacing, normal);\n  word-spacing: var(--sui-word-spacing-normal, normal);\n  transition: all 200ms;\n}\ninput:focus {\n  border-color: var(--sui-textbox-border-color-focus, var(--sui-primary-accent-color));\n  color: var(--sui-textbox-foreground-color-focus, var(--sui-textbox-foreground-color));\n  background-color: var(--sui-textbox-background-color-focus, var(--sui-textbox-background-color));\n}\ninput:read-only {\n  color: var(--sui-tertiary-foreground-color);\n  border-color: var(--sui-textbox-border-color) !important;\n}\ninput:is(:disabled, :read-only) {\n  background-color: var(--sui-disabled-background-color);\n}\ninput[aria-invalid=true] {\n  border-color: var(--sui-error-border-color);\n}\ninput ~ :global(button) {\n  flex: none;\n  margin-left: -1px;\n  border-width: 1px;\n  border-color: var(--sui-textbox-border-color);\n  height: var(--sui-textbox-height);\n  aspect-ratio: 1/1;\n}\ninput ~ :global(button:last-child) {\n  border-radius: 0 4px 4px 0;\n}\ninput ~ :global(button) :global(.icon) {\n  font-size: var(--sui-font-size-xx-large);\n}\n\n.label {\n  position: absolute;\n  inset: var(--sui-textbox-singleline-padding);\n  z-index: 2;\n  display: flex;\n  align-items: center;\n  justify-content: var(--sui-textbox-placeholder-text-align, var(--sui-textbox-text-align, start));\n  pointer-events: none;\n}\n.label.hidden {\n  opacity: 0;\n}\n\ninput:focus + .label {\n  opacity: 0;\n}\n\ninput::placeholder,\n.label {\n  color: var(--sui-textbox-placeholder-foreground-color, var(--sui-textbox-foreground-color));\n  opacity: var(--sui-textbox-placeholder-opacity, 0.5);\n  font-family: var(--sui-textbox-placeholder-font-family, var(--sui-textbox-font-family));\n  font-size: var(--sui-textbox-placeholder-font-size, var(--sui-textbox-font-size));\n  line-height: var(--sui-textbox-placeholder-singleline-line-height, var(--sui-textbox-singleline-line-height));\n  font-weight: var(--sui-textbox-placeholder-font-weight, var(--sui-textbox-font-weight, var(--sui-font-weight-normal, normal)));\n  text-align: var(--sui-textbox-placeholder-text-align, var(--sui-textbox-text-align, start));\n  text-indent: var(--sui-textbox-placeholder-text-indent, var(--sui-textbox-text-indent, 0));\n  letter-spacing: var(--sui-textbox-placeholder-letter-spacing, var(--sui-textbox-letter-spacing, normal));\n}</style>\n","<!--\n  @component\n  A modal prompt dialog. It shows the OK and Cancel buttons as well as a textbox, just like\n  `window.prompt()`.\n  @see https://w3c.github.io/aria/#alertdialog\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/alertdialog/\n  @see https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt\n-->\n<script>\n  import TextInput from '../text-field/text-input.svelte';\n  import Dialog from './dialog.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import {\n   * CommonEventHandlers,\n   * DialogProps,\n   * InputEventHandlers,\n   * ModalProps,\n   * } from '../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [value] Value entered on the textbox.\n   * @property {object} [textboxAttrs] Extra attributes for the `<TextInput>`.\n   * @property {Snippet} [children] Primary slot content.\n   * @property {Snippet} [input] Input slot content.\n   */\n\n  /**\n   * @type {ModalProps & DialogProps & CommonEventHandlers & InputEventHandlers & Props &\n   * Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    open = $bindable(false),\n    value = $bindable(''),\n    textboxAttrs = {},\n    children,\n    input,\n    onkeydown,\n    onkeyup,\n    onkeypress,\n    oninput,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<Dialog {...restProps} bind:open role=\"alertdialog\">\n  {@render children?.()}\n  <div class=\"input-outer\">\n    {#if input}\n      {@render input()}\n    {:else}\n      <TextInput\n        bind:value\n        flex\n        autofocus\n        {...textboxAttrs}\n        {onkeydown}\n        {onkeyup}\n        {onkeypress}\n        {oninput}\n      />\n    {/if}\n  </div>\n</Dialog>\n\n<style>.input-outer {\n  margin: 12px 0 0;\n}</style>\n","<script>\n  /**\n   * @typedef {object} Props\n   * @property {string} [accept] The `accept` attribute for the `<input type=\"file\">`.\n   * @property {boolean} [multiple] Whether to accept multiple files.\n   * @property {(detail: { files: File[], file: File }) => void} [onSelect] Custom `select` event\n   * handler. Since `multiple` could be false, we pass both `file` and `files` with the arguments.\n   * @property {() => void} [onCancel] `cancel` event handler.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    accept = undefined,\n    multiple = false,\n    onSelect = undefined,\n    onCancel = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {HTMLInputElement | undefined} */\n  let filePicker = $state();\n\n  /**\n   * Show the browser’s file picker dialog.\n   */\n  export const open = () => {\n    filePicker?.click();\n  };\n</script>\n\n<input\n  class=\"sui file-picker\"\n  type=\"file\"\n  hidden\n  {accept}\n  {multiple}\n  bind:this={filePicker}\n  onchange={({ target }) => {\n    const files = [.../** @type {FileList} */ (/** @type {HTMLInputElement} */ (target).files)];\n\n    onSelect?.({ files, file: files[0] });\n  }}\n  oncancel={(event) => {\n    event.stopPropagation();\n    onCancel?.();\n  }}\n/>\n","<!--\n  @component\n  The interactive version of `<TableBody>`.\n  @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tbody\n  @see https://w3c.github.io/aria/#rowgroup\n-->\n<script>\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {string} [label] Display label for the row group.\n   * @property {Snippet} [children] Primary slot content.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    label = '',\n    children,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const id = $props.id();\n</script>\n\n<div\n  {...restProps}\n  role=\"rowgroup\"\n  class=\"sui grid-body row-group {className}\"\n  aria-labelledby={label ? `${id}-label` : undefined}\n  aria-roledescription=\"grid body\"\n>\n  {#if label}\n    <div role=\"row\" class=\"row-group-caption\">\n      <!-- We need `colspan` here but cannot place `<th>` under `<div>`, so use a hack -->\n      <svelte:element this={'th'} role=\"columnheader\" id=\"{id}-label\" colspan=\"9999\">\n        {label}\n      </svelte:element>\n    </div>\n  {/if}\n  {@render children?.()}\n</div>\n\n<style>[role=rowgroup] {\n  display: table-row-group;\n}\n\n[role=row] {\n  display: table-row;\n}\n\n[role=columnheader] {\n  display: table-cell;\n  padding: 8px;\n  color: var(--sui-secondary-foreground-color);\n  background-color: var(--sui-secondary-background-color);\n  font-size: var(--sui-font-size-default);\n  text-align: start;\n}</style>\n","<!--\n  @component\n  The interactive version of `<TableCell>`.\n  @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td\n  @see https://w3c.github.io/aria/#gridcell\n-->\n<script>\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {Snippet} [children] Primary slot content.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    children,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div {...restProps} role=\"gridcell\" class=\"sui grid-cell {className}\">\n  {@render children?.()}\n</div>\n\n<style>.grid-cell {\n  display: table-cell;\n}</style>\n","<!--\n  @component\n  The interactive version of `<TableRow>`.\n  @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tr\n  @see https://w3c.github.io/aria/#row\n-->\n<script>\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {boolean} [selected] Whether to select the widget. An alias of the `aria-selected`\n   * attribute.\n   * @property {Snippet} [children] Primary slot content.\n   * @property {(event: CustomEvent) => void} [onChange] Custom `Change` event handler.\n   * @property {(event: CustomEvent) => void} [onSelect] Custom `Select` event handler.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    selected = false,\n    children,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div\n  {...restProps}\n  role=\"row\"\n  class=\"sui grid-row {className}\"\n  tabindex=\"0\"\n  aria-selected={selected}\n>\n  {@render children?.()}\n</div>\n\n<style>.grid-row {\n  display: table-row;\n  height: var(--sui-primary-row-height);\n}</style>\n","<!--\n  @component\n  The interactive version of `<Table>`.\n  @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/table\n  @see https://w3c.github.io/aria/#grid\n-->\n<script>\n  import { activateGroup } from '../../services/group.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {boolean} [selected] Whether to allow selecting more than one `<GridRow>` and/or\n   * `<GridCell>`. An alias of the `aria-multiselectable` attribute.\n   * @property {boolean} [clickToSelect] Whether to select a row by clicking on it.\n   * @property {HTMLElement} [element] A reference to the wrapper element.\n   * @property {Snippet} [children] Primary slot content.\n   * @property {(event: CustomEvent) => void} [onChange] Custom `Change` event handler.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    element = $bindable(),\n    class: className,\n    multiple = false,\n    clickToSelect = true,\n    children,\n    onChange,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div\n  bind:this={element}\n  {...restProps}\n  role=\"grid\"\n  class=\"sui grid {className}\"\n  aria-multiselectable={multiple}\n  onChange={(/** @type {CustomEvent} */ event) => {\n    onChange?.(event);\n  }}\n  use:activateGroup={{ clickToSelect }}\n>\n  {@render children?.()}\n</div>\n\n<style>.grid {\n  display: table;\n  margin: var(--sui-focus-ring-width);\n  width: calc(100% - var(--sui-focus-ring-width) * 2);\n}\n.grid.data {\n  border-collapse: collapse;\n}\n.grid.data :global(:is(.grid-col-header, .grid-row-header, .grid-cell)) {\n  border: 1px solid var(--sui-secondary-border-color);\n  padding: 8px 8px;\n}</style>\n","<!--\n  @component\n  A list widget with selectable options. The equivalent of the HTML `<select multiple>` element.\n  @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select\n  @see https://w3c.github.io/aria/#listbox\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/listbox/\n-->\n<script>\n  import { activateGroup } from '../../services/group.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import { ButtonProps, CommonEventHandlers } from '../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {boolean} [hidden] Whether to hide the widget. An alias of the `aria-hidden`\n   * attribute.\n   * @property {boolean} [disabled] Whether to disable the widget. An alias of the `aria-disabled`\n   * attribute.\n   * @property {boolean} [readonly] Whether to make the widget read-only. An alias of the\n   * `aria-readonly` attribute.\n   * @property {boolean} [required] Whether to mark the widget required. An alias of the\n   * `aria-required` attribute.\n   * @property {boolean} [invalid] Whether to mark the widget invalid. An alias of the\n   * `aria-invalid` attribute.\n   * @property {boolean} [multiple] Whether to allow selecting more than one `<Option>`. An alias of\n   * the `aria-multiselectable` attribute.\n   * @property {string} [searchTerms] Search terms to be used to filter the items.\n   * @property {Snippet} [children] Primary slot content.\n   * @property {(event: CustomEvent) => void} [onChange] Custom `Change` event handler.\n   * @property {(event: CustomEvent) => void} [onFilter] Custom `Filter` event handler.\n   */\n\n  /**\n   * @type {CommonEventHandlers & Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    hidden = false,\n    disabled = false,\n    readonly = false,\n    required = false,\n    invalid = false,\n    multiple = false,\n    searchTerms = '',\n    children,\n    onFilter,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /**\n   * @type {boolean}\n   */\n  let filtered = $state(false);\n</script>\n\n<div\n  {...restProps}\n  role=\"listbox\"\n  class=\"sui listbox {className}\"\n  class:filtered\n  tabindex={disabled ? -1 : 0}\n  {hidden}\n  aria-hidden={hidden}\n  aria-disabled={disabled}\n  aria-readonly={readonly}\n  aria-required={required}\n  aria-invalid={invalid}\n  aria-multiselectable={multiple}\n  onFilter={(/** @type {CustomEvent} */ event) => {\n    const {\n      detail: { matched, total },\n    } = event;\n\n    filtered = matched !== total;\n    onFilter?.(event);\n  }}\n  use:activateGroup={{ searchTerms }}\n>\n  <div role=\"none\" class=\"inner\" inert={disabled}>\n    {@render children?.()}\n  </div>\n</div>\n\n<style>[role=listbox] {\n  display: flex;\n  flex-direction: column;\n  margin: var(--sui-focus-ring-width);\n  border-width: var(--sui-listbox-border-width, 1px);\n  border-style: var(--sui-listbox-border-style, solid);\n  border-color: var(--sui-listbox-border-width, var(--sui-secondary-border-color));\n  border-radius: var(--sui-listbox-border-radius, 4px);\n  padding: var(--sui-listbox-padding, 4px);\n  min-width: var(--sui-listbox-min-width, calc(var(--sui-option-height) * 5));\n  color: var(--sui-listbox-foreground-color);\n  background-color: var(--sui-listbox-background-color);\n  font-family: var(--sui-control-font-family);\n  font-size: var(--sui-control-font-size);\n  line-height: var(--sui-control-line-height);\n}\n@media (pointer: coarse) {\n  [role=listbox] {\n    gap: 8px 0;\n  }\n}\n[role=listbox] :global([role=separator]) {\n  margin: 4px 0;\n  background-color: var(--sui-control-border-color);\n}\n[role=listbox][aria-invalid=true] {\n  border-color: var(--sui-error-border-color);\n}\n[role=listbox].tabs {\n  padding: 0;\n  border-width: 0 1px 0 0;\n  border-color: var(--sui-control-border-color);\n}\n[role=listbox].tabs :global(.option) :global(button) {\n  justify-content: flex-start;\n  border-width: 0 2px 0 0;\n  border-color: transparent;\n  padding: 0 12px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  height: var(--sui-tab-medium-height);\n}\n[role=listbox].tabs :global(.option) :global(button[aria-selected=true]) {\n  border-color: var(--sui-primary-accent-color-light);\n}\n[role=listbox].tabs :global(.option) :global(button) :global(.icon) {\n  display: none;\n}\n[role=listbox].in-combobox:focus-visible {\n  outline-color: transparent;\n}\n[role=listbox].filtered :global([role=separator]) {\n  display: none;\n}\n\n.inner {\n  display: contents;\n}</style>\n","<!--\n  @component\n  A group within a `<Listbox>`. The equivalent of the HTML `<optgroup>` element. It can contain one\n  or more `<Option>`s.\n  @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/optgroup\n  @see https://w3c.github.io/aria/#listbox\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/listbox/examples/listbox-grouped/\n-->\n<script>\n  import TruncatedText from '../typography/truncated-text.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {boolean} [hidden] Whether to hide the widget. An alias of the `aria-hidden`\n   * attribute.\n   * @property {boolean} [disabled] Whether to disable the widget. An alias of the `aria-disabled`\n   * attribute.\n   * @property {string} [label] The group’s label to be displayed above the child `<Option>`s.\n   * @property {Snippet} [children] Primary slot content.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    hidden = false,\n    disabled = false,\n    label = '',\n    children,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const id = $props.id();\n</script>\n\n<div\n  {...restProps}\n  role=\"group\"\n  {id}\n  class=\"sui option-group {className}\"\n  {hidden}\n  aria-hidden={hidden}\n  aria-disabled={disabled}\n  aria-labelledby=\"{id}-label\"\n  aria-roledescription=\"option group\"\n>\n  <div role=\"none\" id=\"{id}-label\" class=\"label\">\n    <TruncatedText>\n      {label}\n    </TruncatedText>\n  </div>\n  <div role=\"none\" class=\"inner\" inert={disabled}>\n    {@render children?.()}\n  </div>\n</div>\n\n<style>.option-group:not(:first-child) {\n  margin: 12px 0 0;\n}\n\n.label {\n  margin: 8px;\n  color: var(--sui-secondary-foreground-color);\n  font-size: var(--sui-font-size-small);\n}\n\n.inner {\n  display: contents;\n}</style>\n","<!--\n  @component\n  An option within the `<Listbox>` widget. The equivalent of the HTML `<option>` element.\n  @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/option\n  @see https://w3c.github.io/aria/#option\n-->\n<script>\n  import Button from '../button/button.svelte';\n  import Icon from '../icon/icon.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import { ButtonProps, CommonEventHandlers } from '../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {boolean} [selected] Whether to select the widget. An alias of the `aria-selected`\n   * attribute.\n   * @property {string} label Text label displayed on the item.\n   * @property {string} [searchValue] The value to be searched.\n   * @property {boolean} [wrap] Whether to wrap a long label.\n   * @property {Snippet} [checkIcon] Check icon slot content.\n   */\n\n  /**\n   * @type {ButtonProps & CommonEventHandlers & Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    selected = $bindable(false),\n    hidden = $bindable(false),\n    class: className,\n    disabled = false,\n    label,\n    value = label,\n    searchValue = label,\n    wrap = false,\n    children,\n    checkIcon,\n    startIcon: _startIcon,\n    onChange,\n    onToggle,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div role=\"none\" class=\"sui option {className}\" class:wrap {hidden}>\n  <Button\n    {...restProps}\n    role=\"option\"\n    tabindex=\"-1\"\n    aria-selected={selected}\n    {label}\n    {value}\n    {hidden}\n    {disabled}\n    data-search-value={searchValue}\n    onChange={(event) => {\n      selected = event.detail.selected;\n      onChange?.(event);\n    }}\n    onToggle={(event) => {\n      hidden = event.detail.hidden;\n      selected = false;\n      onToggle?.(event);\n    }}\n  >\n    {#if selected}\n      {#if checkIcon}\n        {@render checkIcon()}\n      {:else}\n        <Icon class=\"check\" name=\"check\" />\n      {/if}\n    {/if}\n    {#snippet startIcon()}\n      {@render _startIcon?.()}\n    {/snippet}\n    {@render children?.()}\n  </Button>\n</div>\n\n<style>.option {\n  display: contents;\n}\n.option:focus-visible {\n  outline-width: 0 !important;\n}\n.option :global(.wrap) :global(button) {\n  white-space: normal;\n}\n.option :global(button) {\n  flex: none;\n  display: flex;\n  gap: 4px;\n  margin: 0 !important;\n  border-radius: var(--sui-option-border-radius);\n  padding: var(--sui-option-padding);\n  width: 100%;\n  height: auto;\n  min-height: var(--sui-option-height);\n}\n.option :global(button:active) {\n  background-color: var(--sui-active-background-color);\n}\n.option :global(button[aria-selected=true]) :global(.icon.check) {\n  color: var(--sui-primary-accent-color-text);\n}\n.option :global(button) :global(*) {\n  flex: none;\n}\n.option :global(button) :global(.label) {\n  flex: auto;\n}\n.option :global(:is(.focused, button:hover)) {\n  color: var(--sui-highlight-foreground-color);\n  background-color: var(--sui-hover-background-color);\n}\n.option :global(.icon.check) {\n  margin: -2px;\n}</style>\n","<!--\n  @component\n  A menu widget.\n  @see https://w3c.github.io/aria/#menu\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/menubar/\n-->\n<script>\n  import { activateGroup } from '../../services/group.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {boolean} [hidden] Whether to hide the widget. An alias of the `aria-hidden`\n   * attribute.\n   * @property {boolean} [disabled] Whether to disable the widget. An alias of the `aria-disabled`\n   * attribute.\n   * @property {Snippet} [children] Primary slot content.\n   * @property {(event: CustomEvent) => void} [onChange] Custom `Change` event handler.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    hidden = false,\n    disabled = false,\n    children,\n    onChange,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div\n  {...restProps}\n  role=\"menu\"\n  class=\"sui menu {className}\"\n  {hidden}\n  aria-hidden={hidden}\n  aria-disabled={disabled}\n  onChange={(/** @type {CustomEvent} */ event) => {\n    onChange?.(event);\n  }}\n  use:activateGroup\n>\n  {@render children?.()}\n</div>\n\n<style>.menu {\n  display: flex;\n  flex-direction: column;\n  margin: 0;\n  border-width: var(--sui-menu-border-width, 1px);\n  border-style: var(--sui-menu-border-style, solid);\n  border-color: var(--sui-menu-border-width, var(--sui-secondary-border-color));\n  border-radius: var(--sui-menu-border-radius, 4px);\n  padding: var(--sui-menu-padding, 4px);\n}\n@media (pointer: coarse) {\n  .menu {\n    gap: 8px 0;\n  }\n}\n.menu :global([role=separator]) {\n  margin: var(--sui-menu-divider-margin, 4px);\n  background-color: var(--sui-menu-divider-color, var(--sui-control-border-color));\n}</style>\n","<!--\n  @component\n  A menu item widget.\n  @see https://w3c.github.io/aria/#menuitem\n-->\n<script>\n  import { onMount } from 'svelte';\n  import Button from '../button/button.svelte';\n  import Icon from '../icon/icon.svelte';\n  import Popup from '../util/popup.svelte';\n  import Menu from './menu.svelte';\n\n  /**\n   * @import {\n   * ButtonProps,\n   * CommonEventHandlers,\n   * MenuItemProps,\n   * PopupPosition,\n   * } from '../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {PopupPosition} [popupPosition] Where to show the dropdown menu.\n   */\n\n  /**\n   * @type {ButtonProps & MenuItemProps & CommonEventHandlers & Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    role = 'menuitem',\n    hidden = false,\n    disabled = false,\n    label = '',\n    popupPosition = 'right-top', // @todo Make this auto detect\n    children: _children,\n    startIcon: _startIcon,\n    endIcon: _endIcon,\n    chevronIcon,\n    items,\n    onmouseenter,\n    onmouseleave,\n    onclick,\n    onChange,\n    onSelect,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  let isPopupOpen = $state(false);\n  let isPopupHovered = $state(false);\n\n  /**\n   * Reference to the `<button>` element.\n   * @type {HTMLButtonElement | undefined}\n   */\n  let buttonElement = $state();\n\n  /**\n   * Reference to the `<button>` element.\n   * @type {HTMLDialogElement | undefined}\n   */\n  let dialogElement = $state();\n\n  const hasItems = $derived(role === 'menuitem' && !!items);\n\n  onMount(() => {\n    dialogElement = buttonElement?.closest('dialog') ?? undefined;\n  });\n</script>\n\n<div role=\"none\" class=\"sui menuitem {className}\" {hidden}>\n  <Button\n    bind:element={buttonElement}\n    {...restProps}\n    {role}\n    {hidden}\n    {disabled}\n    aria-haspopup={hasItems ? 'menu' : undefined}\n    aria-expanded={hasItems ? isPopupOpen : undefined}\n    onmouseenter={(event) => {\n      if (hasItems) {\n        window.setTimeout(() => {\n          isPopupOpen = true;\n        }, 200);\n      }\n\n      onmouseenter?.(event);\n    }}\n    onmouseleave={(event) => {\n      if (hasItems) {\n        window.setTimeout(() => {\n          if (!isPopupHovered) {\n            isPopupOpen = false;\n          }\n        }, 200);\n      }\n\n      onmouseleave?.(event);\n    }}\n    onclick={(event) => {\n      if (hasItems) {\n        event.preventDefault();\n        event.stopPropagation();\n        isPopupOpen = !isPopupOpen;\n      }\n\n      onclick?.(event);\n    }}\n    {onChange}\n    {onSelect}\n  >\n    {#snippet startIcon()}\n      {@render _startIcon?.()}\n    {/snippet}\n    {#snippet children()}\n      <div role=\"none\" class=\"content\" class:label={!!label}>\n        {#if label}\n          {label}\n        {:else}\n          {@render _children?.()}\n        {/if}\n      </div>\n      {#if hasItems}\n        <span role=\"none\" class=\"icon-outer\">\n          {#if chevronIcon}\n            {@render chevronIcon()}\n          {:else}\n            <Icon name=\"chevron_right\" />\n          {/if}\n        </span>\n      {/if}\n    {/snippet}\n    {#snippet endIcon()}\n      {@render _endIcon?.()}\n    {/snippet}\n  </Button>\n  {#if hasItems && buttonElement && dialogElement}\n    <Popup\n      anchor={buttonElement}\n      parentDialogElement={dialogElement}\n      position={popupPosition}\n      bind:open={isPopupOpen}\n      bind:hovered={isPopupHovered}\n    >\n      <Menu>\n        {@render items?.()}\n      </Menu>\n    </Popup>\n  {/if}\n</div>\n\n<style>.menuitem {\n  position: relative;\n}\n.menuitem :global(button) {\n  display: flex;\n  gap: var(--sui-menuitem-gap, 4px);\n  align-items: var(--sui-menuitem-align-items, center);\n  border-radius: var(--sui-menuitem-border-radius, var(--sui-option-border-radius, 4px));\n  margin: 0 !important;\n  padding: var(--sui-menuitem-padding, 0 16px);\n  width: 100%;\n  min-width: var(--sui-menuitem-min-width, 160px);\n  height: var(--sui-menuitem-height, var(--sui-option-height));\n  color: var(--sui-menuitem-foreground-color, var(--sui-control-foreground-color, inherit));\n  background-color: var(--sui-menuitem-background-color, transparent);\n  font-size: var(--sui-menuitem-font-size, var(--sui-option-font-size));\n  font-weight: var(--sui-menuitem-font-weight, var(--sui-option-font-weight, var(--sui-font-weight-normal, normal)));\n}\n.menuitem :global(button[aria-checked=true]) :global(.icon) {\n  color: var(--sui-primary-accent-color-text);\n}\n.menuitem :global(button:hover) {\n  color: var(--sui-highlight-foreground-color);\n  background-color: var(--sui-hover-background-color);\n}\n.menuitem :global(button:active) {\n  background-color: var(--sui-active-background-color);\n}\n.menuitem :global(:hover) > :global([role=menu]) {\n  opacity: 1;\n}\n.menuitem > :global([role=menu]) {\n  position: absolute;\n  inset: 2px auto auto calc(100% + 4px);\n}\n.menuitem > :global([role=menu]:hover) {\n  opacity: 1;\n}\n\n.content {\n  flex: auto;\n}\n\n.icon-outer {\n  flex: none;\n  width: 24px;\n  height: 24px;\n}</style>\n","<!--\n  @component\n  A menu item widget with a checkbox.\n  @see https://w3c.github.io/aria/#menuitemcheckbox\n-->\n<script>\n  import Icon from '../icon/icon.svelte';\n  import MenuItem from './menu-item.svelte';\n\n  /**\n   * @import { ButtonProps, CommonEventHandlers, MenuItemProps } from '../../typedefs';\n   */\n\n  /**\n   * @type {ButtonProps & MenuItemProps & CommonEventHandlers & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    checked = $bindable(),\n    class: className,\n    hidden = false,\n    disabled = false,\n    label = '',\n    children: _children,\n    startIcon: _startIcon,\n    onChange,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<MenuItem\n  {...restProps}\n  role=\"menuitemcheckbox\"\n  class=\"sui menu-item-checkbox {className}\"\n  {label}\n  {hidden}\n  {disabled}\n  aria-checked={checked}\n  onChange={(event) => {\n    onChange?.(event);\n    checked = event.detail.checked;\n  }}\n>\n  {#snippet startIcon()}\n    {@render _startIcon?.()}\n  {/snippet}\n  {#snippet children()}\n    {@render _children?.()}\n  {/snippet}\n  {#snippet endIcon()}\n    {#if checked}\n      <Icon name=\"check\" />\n    {/if}\n  {/snippet}\n</MenuItem>\n","<!--\n  @component\n  A menu item widget with a radio. Only one item can be selected within the parent `<Menu>` or\n  `<MenuItemGroup>` component.\n  @see https://w3c.github.io/aria/#menuitemradio\n-->\n<script>\n  import Icon from '../icon/icon.svelte';\n  import MenuItem from './menu-item.svelte';\n\n  /**\n   * @import { ButtonProps, CommonEventHandlers, MenuItemProps } from '../../typedefs';\n   */\n\n  /**\n   * @type {ButtonProps & MenuItemProps & CommonEventHandlers & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    checked = $bindable(),\n    class: className,\n    hidden = false,\n    disabled = false,\n    label = '',\n    children: _children,\n    startIcon: _startIcon,\n    onChange,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<MenuItem\n  {...restProps}\n  role=\"menuitemradio\"\n  class=\"sui menu-item-radio {className}\"\n  {label}\n  {hidden}\n  {disabled}\n  aria-checked={checked}\n  onChange={(event) => {\n    onChange?.(event);\n    checked = event.detail.checked;\n  }}\n>\n  {#snippet startIcon()}\n    {@render _startIcon?.()}\n  {/snippet}\n  {#snippet children()}\n    {@render _children?.()}\n  {/snippet}\n  {#snippet endIcon()}\n    {#if checked}\n      <Icon name=\"check\" />\n    {/if}\n  {/snippet}\n</MenuItem>\n","<!--\n  @component\n  A progressbar widget.\n  @see https://w3c.github.io/aria/#progressbar\n-->\n<script>\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {number} now The `aria-valuenow` attribute on the wrapper element.\n   * @property {number} [min] The `aria-valuemin` attribute on the wrapper element.\n   * @property {number} [max] The `aria-valuemax` attribute on the wrapper element.\n   * @property {string} [text] The `aria-valuetext` attribute on the wrapper element.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    now = 0,\n    min = 0,\n    max = 100,\n    text,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div\n  {...restProps}\n  role=\"progressbar\"\n  class=\"sui progressbar {className}\"\n  aria-valuenow={now}\n  aria-valuemin={min}\n  aria-valuemax={max}\n  aria-valuetext={text}\n>\n  <div role=\"none\" style:width=\"{now}%\"></div>\n</div>\n\n<style>.progressbar {\n  overflow: hidden;\n  border-width: var(--sui-progressbar-border-width, 1px);\n  border-style: var(--sui-progressbar-border-style, solid);\n  border-color: var(--sui-progressbar-border-color, var(--sui-control-border-color));\n  border-radius: var(--sui-progressbar-border-radius, 16px);\n  width: var(--sui-progressbar-width, 240px);\n  height: var(--sui-progressbar-height, 10px);\n  background-color: var(--sui-progressbar-background-color, var(--sui-secondary-background-color));\n}\n.progressbar div {\n  height: 100%;\n  background-color: var(--sui-progressbar-foreground-color, var(--sui-primary-accent-color-light));\n  transition: width 250ms;\n}</style>\n","<!--\n  @component\n  The container of `<Radio>`s.\n  @see https://w3c.github.io/aria/#radiogroup\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/radio/\n-->\n<script>\n  import { activateGroup } from '../../services/group.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {boolean} [hidden] Whether to hide the widget.\n   * @property {boolean} [disabled] Whether to disable the widget. An alias of the `aria-disabled`\n   * attribute.\n   * @property {boolean} [readonly] Whether to make the widget read-only. An alias of the\n   * `aria-readonly` attribute.\n   * @property {boolean} [required] Whether to mark the widget required. An alias of the\n   * `aria-required` attribute.\n   * @property {boolean} [invalid] Whether to mark the widget invalid. An alias of the\n   * `aria-invalid` attribute.\n   * @property {'horizontal'|'vertical'} [orientation] Orientation of the widget. An alias of the\n   * `aria-orientation` attribute.\n   * @property {Snippet} [children] Primary slot content.\n   * @property {(event: CustomEvent) => void} [onChange] Custom `Change` event handler.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    hidden = false,\n    disabled = false,\n    readonly = false,\n    required = false,\n    invalid = false,\n    orientation = 'horizontal',\n    children,\n    onChange,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div\n  {...restProps}\n  role=\"radiogroup\"\n  class=\"sui radio-group {className} {orientation}\"\n  tabindex=\"-1\"\n  {hidden}\n  aria-hidden={hidden}\n  aria-disabled={disabled}\n  aria-readonly={readonly}\n  aria-required={required}\n  aria-invalid={invalid}\n  aria-orientation={orientation}\n  onChange={(/** @type {CustomEvent} */ event) => {\n    onChange?.(event);\n  }}\n  use:activateGroup\n>\n  <div role=\"none\" class=\"inner\" inert={disabled}>\n    {@render children?.()}\n  </div>\n</div>\n\n<style>.radio-group {\n  display: inline-flex;\n}\n.radio-group:focus-visible {\n  outline-width: 0 !important;\n}\n.radio-group.horizontal {\n  gap: 8px;\n  align-items: center;\n  flex-wrap: wrap;\n}\n.radio-group.vertical {\n  gap: 4px;\n  flex-direction: column;\n}\n@media (pointer: coarse) {\n  .radio-group.vertical {\n    gap: 8px;\n  }\n}\n.radio-group :global([aria-invalid=true]) :global(button) {\n  border-color: var(--sui-error-border-color);\n}\n.radio-group :global([aria-invalid=true]) :global(button[aria-checked=true]) {\n  border-color: var(--sui-error-border-color);\n}\n.radio-group :global([aria-invalid=true]) :global(button[aria-checked=true]::before) {\n  background-color: var(--sui-error-border-color);\n}\n\n.inner {\n  display: contents;\n}</style>\n","<!--\n  @component\n  The equivalent of the HTML `<input type=\"radio\">` element.\n  @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/radio\n  @see https://w3c.github.io/aria/#radio\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/radio/\n-->\n<script>\n  import Button from '../button/button.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {boolean} [hidden] Whether to hide the widget.\n   * @property {boolean} [disabled] Whether to disable the widget. An alias of the `aria-disabled`\n   * attribute.\n   * @property {boolean} [checked] Whether to check the widget. An alias of the `aria-checked`\n   * attribute.\n   * @property {string} [name] The `data-name` attribute on the `<button>` element.\n   * @property {any} [value] The `data-value` attribute on the `<button>` element.\n   * @property {string} [valueType] Data type of the `value`. Typically `string`, `number` or\n   * `boolean`. Default: auto detect.\n   * @property {string} [label] Text label displayed next to the checkbox.\n   * @property {Snippet} [children] Primary slot content.\n   * @property {Snippet} [default] Default slot content.\n   * @property {(event: CustomEvent) => void} [onChange] Custom `Change` event handler.\n   * @property {(event: CustomEvent) => void} [onSelect] Custom `Select` event handler.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    checked = false,\n    class: className,\n    hidden = false,\n    disabled = false,\n    name = undefined,\n    value = undefined,\n    valueType = undefined,\n    label = undefined,\n    children,\n    onChange,\n    onSelect,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const id = $props.id();\n\n  /**\n   * Reference to the `<button>` element.\n   * @type {HTMLButtonElement | undefined}\n   */\n  let buttonElement = $state();\n</script>\n\n<span\n  {...restProps}\n  role=\"none\"\n  class=\"sui radio {className}\"\n  class:disabled\n  {hidden}\n  onclick={(event) => {\n    if (!(/** @type {HTMLElement} */ (event.target).matches('button'))) {\n      buttonElement?.click();\n    }\n  }}\n>\n  <Button\n    bind:element={buttonElement}\n    role=\"radio\"\n    {id}\n    {hidden}\n    {disabled}\n    {name}\n    {value}\n    {valueType}\n    aria-checked={checked}\n    aria-labelledby=\"{id}-label\"\n    onclick={(event) => {\n      event.preventDefault();\n      checked = true;\n    }}\n    {onChange}\n    {onSelect}\n  />\n  {#if children || label}\n    <label id=\"{id}-label\">\n      {#if children}\n        {@render children?.()}\n      {:else}\n        {label}\n      {/if}\n    </label>\n  {/if}\n</span>\n\n<style>.radio {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  margin: var(--sui-focus-ring-width);\n  color: var(--sui-control-foreground-color);\n  font-family: var(--sui-control-font-family);\n  font-size: var(--sui-control-font-size);\n  line-height: var(--sui-control-line-height);\n  cursor: pointer;\n  -webkit-user-select: none;\n  user-select: none;\n}\n.radio :global(:hover) :global(button) {\n  background-color: var(--sui-hover-background-color);\n}\n.radio :global(:hover) :global(button[aria-checked=true]) {\n  border-color: var(--sui-primary-accent-color-light);\n  color: var(--sui-primary-accent-color-text);\n}\n.radio :global(:hover) :global(button[aria-checked=true]::before) {\n  background-color: var(--sui-primary-accent-color-light);\n}\n.radio :global(:active) :global(button) {\n  background-color: var(--sui-active-background-color);\n}\n.radio :global(:active) :global(button[aria-checked=true]) {\n  border-color: var(--sui-primary-accent-color-dark);\n  color: var(--sui-primary-accent-color-dark);\n}\n.radio :global(button) {\n  flex: none;\n  justify-content: center;\n  overflow: hidden;\n  margin: 0 !important;\n  border-width: 1.5px;\n  border-color: var(--sui-checkbox-border-color);\n  border-radius: var(--sui-checkbox-height);\n  padding: 0;\n  width: var(--sui-checkbox-height);\n  height: var(--sui-checkbox-height);\n  background-color: var(--sui-checkbox-background-color);\n  transition: all 200ms;\n}\n.radio :global(button::before) {\n  content: \"\";\n  border-radius: var(--sui-checkbox-height);\n  width: calc(var(--sui-checkbox-height) - 7px);\n  height: calc(var(--sui-checkbox-height) - 7px);\n  background-color: var(--sui-primary-accent-color);\n  opacity: 0;\n  transition: all 200ms;\n  will-change: opacity;\n}\n.radio :global(button[aria-checked=true]) {\n  border-color: var(--sui-primary-accent-color);\n}\n.radio :global(button[aria-checked=true]::before) {\n  opacity: 1;\n}\n.radio label {\n  cursor: inherit;\n}</style>\n","<!--\n  @component Enable infinite scroll for list items for better rendering performance.\n  @see https://svelte.dev/docs/svelte/v5-migration-guide#Snippets-instead-of-slots-Passing-data-back-up\n-->\n<script>\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {any[]} items Item list.\n   * @property {string} itemKey Item key used for the `each` loop.\n   * @property {number} [itemChunkSize] Number of items to be loaded at once. Defaults to 25.\n   * @property {Snippet<[any, number]>} renderItem Snippet to render each item. The snippet receives\n   * the item and its index as parameters.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    items,\n    itemKey,\n    itemChunkSize = 25,\n    renderItem,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {number} */\n  let loadedItemSize = $state(itemChunkSize);\n\n  /** @type {HTMLElement | undefined} */\n  let spinner = $state(undefined);\n\n  const loading = $derived(items.length > loadedItemSize);\n\n  const observer = new IntersectionObserver(([{ isIntersecting }]) => {\n    if (isIntersecting) {\n      if (loading) {\n        loadedItemSize += itemChunkSize;\n      } else {\n        observer.disconnect();\n      }\n    }\n  });\n\n  $effect(() => {\n    if (spinner) {\n      observer.observe(spinner);\n    }\n  });\n</script>\n\n{#each items.slice(0, loadedItemSize) as item, index (item[itemKey] ?? index)}\n  {@render renderItem(item, index)}\n{/each}\n\n{#if loading}\n  <div role=\"none\" class=\"spinner\" bind:this={spinner}></div>\n{/if}\n\n<style>\n  .spinner {\n    height: 1px;\n  }\n</style>\n","<!--\n  @component\n  The equivalent of the HTML `<input type=\"search\">` element. It comes with a magnifier icon and\n  clear button.\n  @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/search\n  @see https://w3c.github.io/aria/#search\n-->\n\n<script>\n  import { _ } from 'svelte-i18n';\n  import Button from '../button/button.svelte';\n  import Icon from '../icon/icon.svelte';\n  import TextInput from './text-input.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import { CommonEventHandlers, InputEventHandlers, TextInputProps } from '../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [value] Input value.\n   * @property {Snippet} [searchIcon] Search icon slot content.\n   * @property {Snippet} [closeIcon] Close icon slot content.\n   */\n\n  /**\n   * @type {TextInputProps & CommonEventHandlers & InputEventHandlers & Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    value = $bindable(),\n    flex = false,\n    class: className,\n    hidden = false,\n    disabled = false,\n    readonly = false,\n    required = false,\n    invalid = false,\n    children,\n    searchIcon,\n    closeIcon,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const id = $props.id();\n\n  /**\n   * Reference to the `<input>` element.\n   * @type {HTMLInputElement | undefined}\n   */\n  let inputElement = $state();\n\n  /**\n   * Move focus to the `<input>` element.\n   */\n  export const focus = () => {\n    inputElement?.focus();\n  };\n</script>\n\n<div\n  role={hidden ? undefined : 'none'}\n  class=\"sui search-bar {className}\"\n  class:flex\n  class:disabled\n  class:readonly\n  {hidden}\n  aria-hidden={hidden}\n>\n  <span role=\"none\">\n    {#if searchIcon}\n      {@render searchIcon()}\n    {:else}\n      <Icon name=\"search\" />\n    {/if}\n  </span>\n  <TextInput\n    bind:element={inputElement}\n    {...restProps}\n    role=\"searchbox\"\n    {id}\n    bind:value\n    {flex}\n    {hidden}\n    {disabled}\n    {readonly}\n    {required}\n    {invalid}\n    inputmode=\"search\"\n  />\n  {#if value}\n    <Button\n      iconic\n      aria-label={$_('_sui.clear')}\n      aria-controls={id}\n      onclick={() => {\n        value = '';\n        inputElement?.focus();\n        globalThis.requestIdleCallback(() => {\n          inputElement?.dispatchEvent(new KeyboardEvent('input'));\n          inputElement?.dispatchEvent(new KeyboardEvent('keypress'));\n          inputElement?.dispatchEvent(new KeyboardEvent('change'));\n        });\n      }}\n    >\n      {#snippet startIcon()}\n        {#if closeIcon}\n          {@render closeIcon()}\n        {:else}\n          <Icon name=\"close\" />\n        {/if}\n      {/snippet}\n    </Button>\n  {/if}\n</div>\n\n<style>.search-bar {\n  display: inline-flex;\n  align-items: center;\n  position: relative;\n  margin: var(--sui-focus-ring-width);\n  min-width: var(--sui-textbox-singleline-min-width);\n}\n.search-bar.flex {\n  width: -moz-available;\n  width: -webkit-fill-available;\n  width: stretch;\n  min-width: 0;\n}\n.search-bar > span {\n  position: absolute;\n  inset: 0 auto 0 0;\n  z-index: 2;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--sui-button-medium-height);\n  height: var(--sui-button-medium-height);\n}\n.search-bar :global(.icon) {\n  font-size: calc(var(--sui-textbox-height) * 0.6);\n  opacity: 0.5;\n}\n.search-bar > :global(button) {\n  position: absolute;\n  inset: 0 0 auto auto;\n  z-index: 2;\n  margin: 0 !important;\n  height: var(--sui-button-medium-height);\n}\n.search-bar :global(.label) {\n  --sui-textbox-singleline-padding: 0 36px;\n}\n.search-bar :global(.text-input) {\n  flex: auto;\n  margin: 0 !important;\n  width: 0;\n  min-width: 0 !important;\n}\n.search-bar :global(input) {\n  z-index: 1;\n  padding: 0 var(--sui-button-medium-height) !important;\n  width: 100%;\n}</style>\n","<!--\n  @component\n  A variant of the `<Select>` widget with an auto-complete text input field.\n  @see https://w3c.github.io/aria/#combobox\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/combobox/\n  @todo Add DOM API compatibility.\n-->\n<script>\n  import { _ } from 'svelte-i18n';\n  import { getSelectedItemDetail } from '../../services/select.svelte';\n  import Button from '../button/button.svelte';\n  import Icon from '../icon/icon.svelte';\n  import Listbox from '../listbox/listbox.svelte';\n  import SearchBar from '../text-field/search-bar.svelte';\n  import TextInput from '../text-field/text-input.svelte';\n  import TruncatedText from '../typography/truncated-text.svelte';\n  import Popup from '../util/popup.svelte';\n\n  /**\n   * @import { ComboboxProps, TextInputProps } from '../../typedefs';\n   */\n\n  /**\n   * @type {ComboboxProps & TextInputProps & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    value = $bindable(),\n    class: className,\n    hidden = false,\n    disabled = false,\n    readonly = false,\n    required = false,\n    invalid = false,\n    editable = true,\n    position = 'bottom-left',\n    filterThreshold = 5,\n    children,\n    chevronIcon,\n    onChange,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const id = $props.id();\n  const selectedSelector = '[role=\"option\"][aria-selected=\"true\"]';\n  let isPopupOpen = $state(false);\n\n  /** @type {HTMLElement | undefined} */\n  let comboboxElement = $state();\n  /** @type {HTMLInputElement | undefined} */\n  let inputElement = $state();\n  /** @type {HTMLElement | undefined} */\n  let popupContent = $state();\n  /** @type {string} */\n  let label = $state('');\n  /** @type {boolean} */\n  let showFilter = $state(false);\n  /** @type {string} */\n  let searchTerms = $state('');\n  /** @type {boolean} */\n  let hasMatchingOptions = $state(true);\n  /** @type {HTMLElement} */\n  const anchor = $derived(/** @type {HTMLElement} */ (comboboxElement ?? inputElement));\n\n  /**\n   * Update the {@link label} and selected option when the {@link value} is changed.\n   */\n  const _onChange = () => {\n    const selected = popupContent?.querySelector(selectedSelector);\n\n    const target = /** @type {HTMLButtonElement} */ (\n      popupContent?.querySelector(`[role=\"option\"][data-value=\"${value}\"]`)\n    );\n\n    if (target) {\n      label = target.dataset.label || target.dataset.value || target.textContent || '';\n\n      if (selected !== target) {\n        selected?.setAttribute('aria-selected', 'false');\n        target.setAttribute('aria-selected', 'true');\n      }\n    }\n  };\n\n  /**\n   * Update the {@link value} whenever an option is selected.\n   * @param {HTMLButtonElement} target Selected option.\n   */\n  const _onSelect = (target) => {\n    const detail = getSelectedItemDetail(target);\n\n    value = detail.value;\n\n    _onChange();\n    onChange?.(new CustomEvent('Change', { detail }));\n  };\n\n  $effect(() => {\n    if (popupContent) {\n      globalThis.requestAnimationFrame(() => {\n        const selected = popupContent?.querySelector(selectedSelector);\n\n        if (selected) {\n          _onSelect(/** @type {HTMLButtonElement} */ (selected));\n        }\n      });\n    }\n  });\n\n  $effect(() => {\n    void value;\n    _onChange();\n  });\n</script>\n\n<div {...restProps} role=\"none\" class=\"sui combobox {className}\" class:editable {hidden}>\n  {#if !editable}\n    <div\n      bind:this={comboboxElement}\n      {...restProps}\n      role=\"combobox\"\n      {id}\n      class:selected={value !== undefined}\n      tabindex={disabled ? -1 : 0}\n      aria-controls=\"{id}-popup\"\n      aria-expanded={isPopupOpen}\n      aria-hidden={hidden}\n      aria-disabled={disabled}\n      aria-readonly={readonly}\n      aria-required={required}\n      aria-invalid={invalid}\n      aria-haspopup=\"listbox\"\n    >\n      <div role=\"none\" class=\"label\">\n        <TruncatedText>\n          {value !== undefined ? label : $_('_sui.combobox.select_an_option')}\n        </TruncatedText>\n      </div>\n    </div>\n  {:else}\n    <TextInput\n      {...restProps}\n      bind:element={inputElement}\n      role=\"combobox\"\n      {id}\n      value={value === undefined ? '' : String(value)}\n      {hidden}\n      {disabled}\n      {readonly}\n      {required}\n      {invalid}\n      aria-controls=\"{id}-popup\"\n      aria-expanded={isPopupOpen}\n      aria-haspopup=\"listbox\"\n    />\n  {/if}\n  <Button\n    variant=\"ghost\"\n    iconic\n    {hidden}\n    {disabled}\n    tabindex={!editable || readonly || disabled ? -1 : 0}\n    aria-label={isPopupOpen ? $_('_sui.collapse') : $_('_sui.expand')}\n    aria-controls=\"{id}-popup\"\n    aria-expanded={isPopupOpen}\n    onclick={(event) => {\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (!disabled && !readonly) {\n        isPopupOpen = !isPopupOpen;\n      }\n    }}\n  >\n    {#snippet startIcon()}\n      {#if chevronIcon}\n        {@render chevronIcon()}\n      {:else}\n        <Icon name=\"expand_more\" />\n      {/if}\n    {/snippet}\n  </Button>\n</div>\n<Popup\n  bind:content={popupContent}\n  id=\"{id}-popup\"\n  class=\"combobox\"\n  {anchor}\n  {position}\n  touchOptimized={true}\n  bind:open={isPopupOpen}\n  onOpen={() => {\n    showFilter =\n      filterThreshold === -1\n        ? false\n        : (popupContent?.querySelectorAll('[role=\"option\"]')?.length ?? 0) > filterThreshold;\n    searchTerms = '';\n  }}\n>\n  <div role=\"none\" class=\"combobox-inner\">\n    {#if showFilter}\n      <SearchBar\n        flex\n        aria-label={$_('_sui.combobox.filter_options')}\n        aria-controls=\"{id}-listbox\"\n        bind:value={searchTerms}\n        onkeydown={(event) => {\n          if (['ArrowUp', 'ArrowDown', 'Enter'].includes(event.key)) {\n            event.preventDefault();\n            popupContent\n              ?.querySelector('.sui.listbox')\n              ?.dispatchEvent(new KeyboardEvent('keydown', event));\n          }\n        }}\n      />\n    {/if}\n    <Listbox\n      id=\"{id}-listbox\"\n      class=\"in-combobox\"\n      {searchTerms}\n      onclick={(event) => {\n        if (/** @type {HTMLElement} */ (event.target).matches('[role=\"option\"]')) {\n          _onSelect(/** @type {HTMLButtonElement} */ (event.target));\n        }\n      }}\n      onFilter={(event) => {\n        hasMatchingOptions = !!(/** @type {CustomEvent} */ (event).detail.matched);\n      }}\n    >\n      {@render children?.()}\n    </Listbox>\n    {#if !hasMatchingOptions}\n      <div role=\"alert\" class=\"no-options\">\n        {$_('_sui.combobox.no_matching_options')}\n      </div>\n    {/if}\n  </div>\n</Popup>\n\n<style>.combobox {\n  margin: var(--sui-focus-ring-width);\n  display: flex;\n  align-items: center;\n  position: relative;\n  min-width: var(--sui-combobox-min-width, calc(var(--sui-option-height) * 5));\n}\n.combobox div[role=combobox] {\n  display: flex;\n  align-items: center;\n  border-width: 1px;\n  border-color: var(--sui-control-border-color);\n  border-radius: var(--sui-textbox-border-radius);\n  padding: 0 var(--sui-textbox-height) 0 calc(var(--sui-textbox-height) / 4);\n  width: 100%;\n  height: var(--sui-textbox-height);\n  color: var(--sui-control-foreground-color);\n  background-color: var(--sui-disabled-background-color);\n  font-family: var(--sui-control-font-family);\n  font-size: var(--sui-control-font-size);\n  line-height: var(--sui-control-line-height);\n  -webkit-user-select: none;\n  user-select: none;\n  cursor: pointer;\n  transition: all 200ms;\n}\n.combobox div[role=combobox]:not(.selected) {\n  font-style: italic;\n}\n.combobox div[role=combobox]:is(:hover, :focus) {\n  background-color: var(--sui-hover-background-color);\n}\n.combobox div[role=combobox][aria-invalid=true] {\n  border-color: var(--sui-error-border-color);\n}\n.combobox div[role=combobox] .label {\n  width: 100%;\n}\n.combobox :global(.icon) {\n  font-size: var(--sui-font-size-xx-large);\n  opacity: 0.5;\n}\n.combobox > :global(.icon) {\n  position: absolute;\n  inset: 8px auto auto 8px;\n  z-index: 1;\n}\n.combobox > :global(button) {\n  position: absolute;\n  inset: 0 0 auto auto;\n  z-index: 1;\n  margin: 0 !important;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n  background-color: transparent !important;\n}\n.combobox > :global(button[tabindex=\"-1\"]) {\n  pointer-events: none;\n}\n.combobox :global(:not(.editable)) > :global(button) {\n  background-color: transparent !important;\n}\n.combobox :global(.text-input) {\n  margin: 0 !important;\n  width: 100% !important;\n}\n.combobox :global(input) {\n  padding: 0 32px 0 8px;\n  width: 0;\n}\n.combobox + :global([role=listbox]) {\n  position: fixed;\n  z-index: 100;\n  border-radius: var(--sui-control-medium-border-radius);\n  box-shadow: 0 8px 16px var(--sui-popup-shadow-color);\n  overflow: auto;\n  background-color: var(--sui-secondary-background-color);\n  -webkit-backdrop-filter: blur(32px);\n  backdrop-filter: blur(32px);\n  /* Add .1s delay before the position can be determined */\n  transition: opacity 100ms 100ms;\n}\n.combobox + :global([role=listbox]:not(.open)) {\n  opacity: 0;\n  pointer-events: none;\n}\n\n.combobox-inner {\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n}\n.combobox-inner :global(.sui.search-bar) {\n  flex: none;\n}\n.combobox-inner :global(.sui.listbox) {\n  flex: auto;\n  overflow-y: auto;\n}\n.combobox-inner .no-options {\n  flex: none;\n  display: flex;\n  align-items: center;\n  padding: var(--sui-option-padding);\n  height: var(--sui-option-height);\n  color: var(--sui-tertiary-foreground-color);\n}</style>\n","<!--\n  @component\n  A select-only variant of `<Combobox>`. The equivalent of the HTML `<select>` element.\n  @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select\n  @see https://w3c.github.io/aria/#combobox\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/combobox/examples/combobox-select-only/\n-->\n<script>\n  import Combobox from './combobox.svelte';\n\n  /**\n   * @import { ComboboxProps } from '../../typedefs';\n   */\n\n  /**\n   * @type {ComboboxProps & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    value = $bindable(),\n    class: className,\n    hidden = false,\n    disabled = false,\n    readonly = false,\n    required = false,\n    invalid = false,\n    children,\n    onChange,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<Combobox\n  {...restProps}\n  bind:value\n  class=\"sui select {className}\"\n  {hidden}\n  {disabled}\n  {readonly}\n  {required}\n  {invalid}\n  {onChange}\n  editable={false}\n>\n  {@render children?.()}\n</Combobox>\n","<script>\n  import { _ } from 'svelte-i18n';\n  import Button from '../button/button.svelte';\n  import Icon from '../icon/icon.svelte';\n  import Option from '../listbox/option.svelte';\n  import Select from './select.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {{ label: string, value: any, searchValue?: string }[]} options Available options.\n   * @property {string[]} [values] Selected option values.\n   * @property {number} [max] Maximum number of selectable options.\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {boolean} [hidden] Whether to hide the widget.\n   * @property {boolean} [disabled] Whether to disable the widget. An alias of the `aria-disabled`\n   * attribute.\n   * @property {boolean} [readonly] Whether to make the widget read-only. An alias of the\n   * `aria-readonly` attribute.\n   * @property {boolean} [required] Whether to mark the widget required. An alias of the\n   * `aria-required` attribute.\n   * @property {boolean} [invalid] Whether to mark the widget invalid. An alias of the\n   * `aria-invalid` attribute.\n   * @property {Snippet} [children] Primary slot content.\n   * @property {(event: CustomEvent) => void} [onAddValue] Custom `AddValue` event handler.\n   * @property {(event: CustomEvent) => void} [onRemoveValue] Custom `RemoveValue` event handler.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    values = $bindable([]),\n    options,\n    max = undefined,\n    class: className,\n    hidden = false,\n    disabled = false,\n    readonly = false,\n    required = false,\n    invalid = false,\n    children,\n    onAddValue,\n    onRemoveValue,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /**\n   * @type {string | undefined}\n   */\n  let selectedValue = $state();\n</script>\n\n<div role=\"none\" class=\"sui select-tags {className}\" class:disabled={disabled || readonly} {hidden}>\n  {#each values as value}\n    {@const option = options.find((o) => o.value === value)}\n    {#if option}\n      <span role=\"none\">\n        {option.label}\n        <Button\n          iconic\n          size=\"small\"\n          disabled={disabled || readonly}\n          aria-label={$_('remove_x', { values: { name: option.label } })}\n          onclick={() => {\n            values = values.filter((v) => v !== value);\n            onRemoveValue?.(new CustomEvent('RemoveValue', { detail: { value } }));\n          }}\n        >\n          {#snippet startIcon()}\n            <Icon name=\"close\" />\n          {/snippet}\n        </Button>\n      </span>\n    {/if}\n  {/each}\n  {#if (typeof max !== 'number' || values.length < max) && values.length < options.length}\n    <Select\n      {...restProps}\n      bind:value={selectedValue}\n      disabled={disabled || readonly}\n      {readonly}\n      {required}\n      {invalid}\n      onChange={() => {\n        if (selectedValue) {\n          values = [...values, selectedValue];\n          onAddValue?.(new CustomEvent('AddValue', { detail: { value: selectedValue } }));\n          // Reset the combobox\n          selectedValue = undefined;\n        }\n      }}\n    >\n      {#each options as { label, value, searchValue } (value)}\n        {#if !values.includes(value)}\n          <Option {label} {value} {searchValue} />\n        {/if}\n      {/each}\n    </Select>\n  {/if}\n</div>\n\n<style>.select-tags {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n}\n.select-tags.disabled {\n  pointer-events: none;\n}\n.select-tags.disabled > * {\n  opacity: 0.5;\n}\n.select-tags span {\n  display: inline-flex;\n  align-items: center;\n  margin: var(--sui-focus-ring-width);\n  padding: 0 0 0 8px;\n  border-radius: var(--sui-control-medium-border-radius);\n  background-color: var(--sui-secondary-background-color);\n}\n.select-tags span :global(.icon) {\n  font-size: var(--sui-font-size-large);\n}</style>\n","<!--\n  @component\n  The equivalent of the HTML `<input type=\"range\">` element, but it comes with the multi-thumb\n  support.\n  @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/range\n  @see https://w3c.github.io/aria/#slider\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/slider/\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/slider-multithumb/\n-->\n<script>\n  import { onMount } from 'svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {number} [value] Current value.\n   * @property {number} [min] Minimum allowed value. An alias of the `aria-valuemin` attribute.\n   * @property {number} [max] Maximum allowed value. An alias of the `aria-valuemax` attribute.\n   * @property {string} [sliderLabel] `aria-label` on the slider.\n   * @property {[number, number]} [values] Value list for a multi-thumb slider.\n   * @property {[string, string]} [sliderLabels] `aria-label` on a multi-thumb slider.\n   * @property {number} [step] Step option like `<input type=\"range\">`.\n   * @property {(string[] | number[])} [optionLabels] Visible labels on the slider.\n   * @property {boolean} [flex] Make the text input container flexible.\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {boolean} [hidden] Whether to hide the widget.\n   * @property {boolean} [disabled] Whether to disable the widget. An alias of the `aria-disabled`\n   * attribute.\n   * @property {boolean} [readonly] Whether to make the widget read-only. An alias of the\n   * `aria-readonly` attribute.\n   * @property {boolean} [invalid] Whether to mark the widget invalid. An alias of the\n   * `aria-invalid` attribute.\n   * @property {Snippet} [children] Primary slot content.\n   * @property {(detail: { values?: number[], value?: number }) => void} [onChange] `change` event\n   * handler.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    value = $bindable(0),\n    min = 0,\n    max = 100,\n    sliderLabel = '',\n    values = $bindable(undefined),\n    sliderLabels = undefined,\n    step = 1,\n    optionLabels = [],\n    class: className,\n    hidden = false,\n    disabled = false,\n    readonly = false,\n    invalid = false,\n    children,\n    onChange,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const multiThumb = $derived(Array.isArray(values));\n\n  /** @type {HTMLElement | undefined} */\n  let base = $state();\n  let barWidth = $state(0);\n  /** @type {number[]} */\n  let positionList = $state([]);\n  /** @type {number[]} */\n  let valueList = $state([]);\n  let startX = $state(0);\n  let startScreenX = $state(0);\n  // eslint-disable-next-line prefer-const\n  let sliderPositions = $state([0, 0]);\n  let dragging = $state(false);\n  let targetPointerId = $state(0);\n  let targetValueIndex = $state(0);\n\n  /**\n   * Move a thumb with mouse.\n   * @param {number} diff Distance from the original X position in pixels.\n   */\n  const moveThumb = (diff) => {\n    if (diff < 0) {\n      diff = 0;\n    } else if (diff > barWidth) {\n      diff = barWidth;\n    }\n\n    const fromIndex = positionList.findLastIndex((s) => s <= diff);\n    const toIndex = positionList.findIndex((s) => diff <= s);\n\n    const index =\n      Math.abs(positionList[fromIndex] - diff) < Math.abs(positionList[toIndex] - diff)\n        ? fromIndex\n        : toIndex;\n\n    if (\n      sliderPositions[targetValueIndex] === positionList[index] ||\n      (multiThumb &&\n        ((targetValueIndex === 0 && sliderPositions[1] <= positionList[index]) ||\n          (targetValueIndex === 1 && sliderPositions[0] >= positionList[index])))\n    ) {\n      return;\n    }\n\n    if (multiThumb) {\n      /** @type {[number, number]} */ (values)[targetValueIndex] = valueList[index];\n      values = [.../** @type {[number, number]} */ (values)];\n    } else {\n      value = valueList[index];\n    }\n  };\n\n  /**\n   * Handle the `keydown` event fired on the slider.\n   * @param {KeyboardEvent} event `keydown` event.\n   * @param {number} [valueIndex] Index in the {@link values} array to be used to get/set the value.\n   */\n  const onKeyDown = (event, valueIndex = 0) => {\n    const { key, ctrlKey, metaKey, shiftKey, altKey } = event;\n    const hasModifier = shiftKey || altKey || ctrlKey || metaKey;\n\n    if (disabled || readonly || hasModifier) {\n      return;\n    }\n\n    const _value = multiThumb ? /** @type {[number, number]} */ (values)[valueIndex] : value;\n    let index = -1;\n\n    if (['ArrowDown', 'ArrowLeft'].includes(key)) {\n      if (_value > min) {\n        index = valueList.indexOf(_value) - 1;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n    }\n\n    if (['ArrowUp', 'ArrowRight'].includes(key)) {\n      if (_value < max) {\n        index = valueList.indexOf(_value) + 1;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n    }\n\n    if (index > -1) {\n      if (\n        multiThumb &&\n        ((valueIndex === 0 && sliderPositions[1] <= positionList[index]) ||\n          (valueIndex === 1 && sliderPositions[0] >= positionList[index]))\n      ) {\n        return;\n      }\n\n      if (multiThumb) {\n        /** @type {[number, number]} */ (values)[valueIndex] = valueList[index];\n        values = [.../** @type {[number, number]} */ (values)];\n      } else {\n        value = valueList[index];\n      }\n    }\n  };\n\n  /**\n   * Handle the `pointermove` event fired anywhere on the page.\n   * @param {PointerEvent} event `pointermove` event.\n   */\n  const onPointerMove = (event) => {\n    const { screenX, pointerId } = event;\n\n    if (disabled || readonly || !dragging || pointerId !== targetPointerId) {\n      return;\n    }\n\n    event.stopPropagation();\n\n    moveThumb(startX + (screenX - startScreenX));\n  };\n\n  /**\n   * Handle the `pointerup` and `pointercancel` events fired anywhere on the page.\n   * @param {PointerEvent} event `pointerup` or `pointercancel` event.\n   */\n  const onPointerUp = (event) => {\n    const { pointerId } = event;\n\n    if (disabled || readonly || !dragging || pointerId !== targetPointerId) {\n      return;\n    }\n\n    event.stopPropagation();\n\n    // Handle a click on the bars\n    if (/** @type {HTMLElement} */ (event.target).matches('.base-bar, .slider-bar')) {\n      moveThumb(/** @type {any} */ (event).layerX);\n    }\n\n    // Reset everything\n    dragging = false;\n    startX = 0;\n    startScreenX = 0;\n    targetPointerId = 0;\n    targetValueIndex = 0;\n\n    document.removeEventListener('pointermove', onPointerMove);\n    document.removeEventListener('pointerup', onPointerUp);\n    document.removeEventListener('pointercancel', onPointerUp);\n  };\n\n  /**\n   * Handle the `pointerdown` event fired on the slider.\n   * @param {PointerEvent} event `pointerdown` event.\n   * @param {number} [valueIndex] Index in the {@link values} array to be used to get/set the value.\n   */\n  const onPointerDown = (event, valueIndex = 0) => {\n    const { clientX, screenX, pointerId } = event;\n\n    if (disabled || readonly) {\n      return;\n    }\n\n    event.stopPropagation();\n\n    dragging = true;\n    startX = clientX - /** @type {HTMLElement} */ (base).getBoundingClientRect().x;\n    startScreenX = screenX;\n    targetPointerId = pointerId;\n    targetValueIndex = valueIndex;\n\n    document.addEventListener('pointermove', onPointerMove);\n    document.addEventListener('pointerup', onPointerUp);\n    document.addEventListener('pointercancel', onPointerUp);\n  };\n\n  /**\n   * Update the thumb position and fire the `change` event when the value is changed.\n   */\n  const onValueChange = () => {\n    if (multiThumb) {\n      const [value0, value1] = /** @type {[number, number]} */ (values);\n\n      sliderPositions[0] = positionList[valueList.indexOf(value0)];\n      sliderPositions[1] = positionList[valueList.indexOf(value1)];\n      onChange?.({ values });\n    } else {\n      sliderPositions[0] = positionList[valueList.indexOf(value)];\n      onChange?.({ value });\n    }\n  };\n\n  /**\n   * Initialize the variables.\n   */\n  const init = () => {\n    if (!base) {\n      return;\n    }\n\n    barWidth = base.clientWidth;\n\n    const stepCount = (max - min) / step + 1;\n    const stepWidth = barWidth / (stepCount - 1);\n\n    valueList = new Array(stepCount).fill(0).map((_, index) => index * step + min, 10);\n    positionList = new Array(stepCount).fill(0).map((_, index) => index * stepWidth);\n\n    onValueChange();\n  };\n\n  onMount(() => {\n    const observer = new ResizeObserver(() => init());\n    const query = globalThis.matchMedia('(pointer: coarse)');\n\n    observer.observe(/** @type {HTMLElement} */ (base));\n    query.addEventListener('change', init);\n    init();\n\n    return () => {\n      observer.disconnect();\n      query.removeEventListener('change', init);\n    };\n  });\n\n  $effect(() => {\n    void value;\n    void values;\n    onValueChange();\n  });\n</script>\n\n<svelte:body\n  onclick={() => {\n    dragging = false;\n  }}\n/>\n\n<div\n  {...restProps}\n  role=\"none\"\n  class=\"sui slider {className}\"\n  class:disabled\n  class:readonly\n  class:invalid\n  {hidden}\n>\n  <div bind:this={base} role=\"none\" class=\"base\" onpointerdown={(event) => onPointerDown(event)}>\n    <div role=\"none\" class=\"base-bar\"></div>\n    <div\n      class=\"slider-bar\"\n      style:left=\"{multiThumb ? sliderPositions[0] : 0}px\"\n      style:width=\"{multiThumb ? sliderPositions[1] - sliderPositions[0] : sliderPositions[0]}px\"\n    ></div>\n    <div\n      role=\"slider\"\n      tabindex={disabled ? -1 : 0}\n      aria-label={multiThumb ? sliderLabels?.[0] : sliderLabel}\n      aria-hidden={hidden}\n      aria-disabled={disabled}\n      aria-readonly={readonly}\n      aria-invalid={invalid}\n      aria-valuemin={min}\n      aria-valuemax={max}\n      aria-valuenow={multiThumb ? values?.[0] : value}\n      style:left=\"{sliderPositions[0]}px\"\n      onpointerdown={(event) => onPointerDown(event, 0)}\n      onkeydown={(event) => onKeyDown(event, 0)}\n    ></div>\n    {#if multiThumb}\n      <div\n        role=\"slider\"\n        tabindex={disabled ? -1 : 0}\n        aria-label={sliderLabels?.[1]}\n        aria-hidden={hidden}\n        aria-disabled={disabled}\n        aria-readonly={readonly}\n        aria-invalid={invalid}\n        aria-valuemin={min}\n        aria-valuemax={max}\n        aria-valuenow={values?.[1]}\n        style:left=\"{sliderPositions[1]}px\"\n        onpointerdown={(event) => onPointerDown(event, 1)}\n        onkeydown={(event) => onKeyDown(event, 1)}\n      ></div>\n    {/if}\n    {#if optionLabels.length}\n      {#each optionLabels as label, index}\n        <span\n          role=\"none\"\n          class=\"label\"\n          style:left=\"{(barWidth / (optionLabels.length - 1)) * index}px\"\n        >\n          {label}\n        </span>\n      {/each}\n    {/if}\n  </div>\n</div>\n\n<style>.slider {\n  position: relative;\n  display: inline-block;\n  margin: var(--sui-focus-ring-width);\n  padding: 4px 6px;\n  touch-action: none;\n}\n.slider:hover .base-bar {\n  background-color: var(--sui-hover-background-color);\n}\n.slider:active .base-bar {\n  background-color: var(--sui-active-background-color);\n}\n\n.base {\n  position: relative;\n  width: var(--sui-slider-base-width, 240px);\n  height: calc(var(--sui-checkbox-height) / 2);\n  cursor: pointer;\n}\n\n.base-bar {\n  border-width: 1px;\n  border-style: solid;\n  border-color: var(--sui-control-border-color);\n  border-radius: var(--sui-checkbox-height);\n  background-color: var(--sui-slider-background-color, var(--sui-secondary-background-color));\n  transition: all 200ms;\n  width: 100%;\n  height: 100%;\n}\n\n.slider-bar {\n  position: absolute;\n  top: 0;\n  height: calc(var(--sui-checkbox-height) / 2);\n  border-radius: var(--sui-checkbox-height);\n  background-color: var(--sui-primary-accent-color-light);\n}\n.invalid .slider-bar {\n  background-color: var(--sui-error-border-color);\n}\n\n[role=slider] {\n  position: absolute;\n  top: 0;\n  border: 3px solid var(--sui-primary-accent-color-light);\n  border-radius: var(--sui-checkbox-height);\n  width: calc(var(--sui-checkbox-height) - 2px);\n  height: calc(var(--sui-checkbox-height) - 2px);\n  background-color: var(--sui-primary-accent-color-inverted);\n  cursor: pointer;\n  transform: translate(calc((var(--sui-checkbox-height) / 2 - 1px) * -1), calc((var(--sui-checkbox-height) / 4 - 1px) * -1));\n}\n.invalid [role=slider] {\n  border-color: var(--sui-error-border-color);\n}\n\n.label {\n  position: absolute;\n  top: calc(var(--sui-checkbox-height) / 2 + 8px);\n  transform: translateX(-50%);\n  font-size: var(--sui-font-size-x-small);\n}</style>\n","<!--\n  @component\n  A variant of `<Checkbox>`, looking like a switch that can be often seen on mobile apps.\n  @see https://w3c.github.io/aria/#switch\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/switch/\n-->\n<script>\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [label] Text label displayed next to the switch.\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {boolean} [hidden] Whether to hide the widget.\n   * @property {boolean} [disabled] Whether to disable the widget. An alias of the `aria-disabled`\n   * attribute.\n   * @property {boolean} [readonly] Whether to make the widget read-only. An alias of the\n   * `aria-readonly` attribute.\n   * @property {boolean} [required] Whether to mark the widget required. An alias of the\n   * `aria-required` attribute.\n   * @property {boolean} [invalid] Whether to mark the widget invalid. An alias of the\n   * `aria-invalid` attribute.\n   * @property {Snippet} [children] Primary slot content.\n   * @property {(event: CustomEvent) => void} [onChange] Custom `Change` event handler.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    checked = $bindable(),\n    label = undefined,\n    class: className,\n    hidden = false,\n    disabled = false,\n    readonly = false,\n    required = false,\n    invalid = false,\n    children,\n    onChange,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<button\n  {...restProps}\n  role=\"switch\"\n  class=\"sui switch {className}\"\n  type=\"button\"\n  {hidden}\n  disabled={disabled || undefined}\n  aria-checked={checked}\n  aria-hidden={hidden}\n  aria-disabled={disabled}\n  aria-readonly={readonly}\n  aria-required={required}\n  aria-invalid={invalid}\n  onclick={() => {\n    if (!disabled && !readonly) {\n      checked = !checked;\n      onChange?.(new CustomEvent('Change', { detail: { checked } }));\n    }\n  }}\n>\n  <span role=\"none\"></span>\n  {#if label}\n    {label}\n  {:else}\n    {@render children?.()}\n  {/if}\n</button>\n\n<style>button {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  margin: var(--sui-focus-ring-width);\n  border-width: 0;\n  border-style: solid;\n  border-color: transparent;\n  padding: 0;\n  color: var(--sui-control-foreground-color);\n  background-color: transparent;\n  box-shadow: none;\n  font-family: var(--sui-control-font-family);\n  font-size: var(--sui-control-font-size);\n  line-height: var(--sui-control-line-height);\n  font-weight: var(--sui-font-weight-normal, normal);\n  text-align: start;\n  cursor: pointer;\n  -webkit-user-select: none;\n  user-select: none;\n}\nbutton[aria-invalid=true] span {\n  background-color: var(--sui-error-border-color) !important;\n}\nbutton:hover[aria-checked=false] span {\n  background-color: var(--sui-hover-background-color);\n}\nbutton:hover[aria-checked=true] span {\n  background-color: var(--sui-primary-accent-color-light);\n}\nbutton:active[aria-checked=false] span {\n  background-color: var(--sui-active-background-color);\n}\nbutton:active[aria-checked=true] span {\n  background-color: var(--sui-primary-accent-color-dark);\n}\nbutton:focus-visible {\n  outline: 0;\n}\nbutton:focus-visible span {\n  outline-color: var(--sui-primary-accent-color-translucent);\n}\nbutton[aria-checked=true] span {\n  background-color: var(--sui-primary-accent-color);\n  border-color: transparent;\n}\nbutton[aria-checked=true] span::before {\n  transform: translateX(calc(var(--sui-checkbox-height) * 2 - var(--sui-checkbox-height)));\n  border-color: var(--sui-primary-accent-color);\n  background-color: var(--sui-primary-accent-color-inverted);\n}\n\nspan {\n  position: relative;\n  width: calc(var(--sui-checkbox-height) * 2);\n  height: var(--sui-checkbox-height);\n  padding: 0 2px;\n  display: inline-flex;\n  align-items: center;\n  border-width: 1.5px;\n  border-style: solid;\n  border-color: var(--sui-checkbox-border-color);\n  border-radius: var(--sui-checkbox-height);\n  background-color: var(--sui-control-background-color);\n  transition: all 200ms;\n}\nspan::before {\n  display: inline-block;\n  width: calc(var(--sui-checkbox-height) - 6px);\n  height: calc(var(--sui-checkbox-height) - 6px);\n  border-radius: var(--sui-checkbox-height);\n  background-color: var(--sui-checkbox-border-color);\n  transition: all 200ms;\n  content: \"\";\n}</style>\n","<!--\n  @component\n  The equivalent of the HTML `<td>` element.\n  @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td\n  @see https://w3c.github.io/aria/#cell\n-->\n<script>\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {Snippet} [children] Primary slot content.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    children,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div {...restProps} role=\"cell\" class=\"sui table-cell {className}\">\n  {@render children?.()}\n</div>\n\n<style>.table-cell {\n  display: table-cell;\n}</style>\n","<!--\n  @component\n  The equivalent of the HTML `<tr>` element.\n  @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tr\n  @see https://w3c.github.io/aria/#row\n-->\n<script>\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {Snippet} [children] Primary slot content.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    children,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div {...restProps} role=\"row\" class=\"sui table-row {className}\">\n  {@render children?.()}\n</div>\n\n<style>.table-row {\n  display: table-row;\n  height: var(--sui-primary-row-height);\n}</style>\n","<!--\n  @component\n  The equivalent of the HTML `<table>` element.\n  @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/table\n  @see https://w3c.github.io/aria/#table\n-->\n<script>\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {Snippet} [children] Primary slot content.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    children,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div {...restProps} role=\"table\" class=\"sui table {className}\">\n  {@render children?.()}\n</div>\n\n<style>.table {\n  display: table;\n  margin: var(--sui-focus-ring-width);\n  width: calc(100% - var(--sui-focus-ring-width) * 2);\n}\n.table.data {\n  border-collapse: collapse;\n}\n.table.data :global(:is(.table-col-header, .table-row-header, .table-cell)) {\n  border: 1px solid var(--sui-secondary-border-color);\n  padding: 8px 8px;\n}</style>\n","<!--\n  @component\n  A tab list widget.\n  @see https://w3c.github.io/aria/#tablist\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/tabs/\n-->\n<script>\n  import { onMount } from 'svelte';\n  import { activateGroup } from '../../services/group.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {boolean} [hidden] Whether to hide the widget.\n   * @property {boolean} [disabled] Whether to disable the widget. An alias of the `aria-disabled`\n   * attribute.\n   * @property {'horizontal' | 'vertical'} [orientation] Orientation of the widget. An alias of the\n   * `aria-orientation` attribute.\n   * @property {string} [name] The `data-name` attribute on the wrapper element.\n   * @property {Snippet} [children] Primary slot content.\n   * @property {(event: CustomEvent) => void} [onChange] Custom `Change` event handler.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    hidden = false,\n    disabled = false,\n    orientation = 'horizontal',\n    name = undefined,\n    children,\n    onChange,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /**\n   * A reference to the wrapper element.\n   * @type {HTMLElement | undefined}\n   */\n  let wrapper = $state();\n  /**\n   * The indicator’s CSS style.\n   * @type {string | undefined}\n   */\n  let indicatorStyle = $state();\n\n  /**\n   * Update the indicator position.\n   */\n  const updateIndicator = () => {\n    globalThis.requestAnimationFrame(() => {\n      const selected = /** @type {HTMLElement | null} */ (\n        wrapper?.querySelector('[role=\"tab\"][aria-selected=\"true\"]')\n      );\n\n      if (selected) {\n        const { offsetTop, offsetLeft, offsetWidth, offsetHeight } = selected;\n\n        indicatorStyle = Object.entries({\n          top: offsetTop,\n          left: offsetLeft,\n          width: offsetWidth,\n          height: offsetHeight,\n        })\n          .map(([key, value]) => `${key}: ${value}px`)\n          .join('; ');\n      } else {\n        indicatorStyle = undefined;\n      }\n    });\n  };\n\n  onMount(() => {\n    const observer = new ResizeObserver(() => {\n      updateIndicator();\n    });\n\n    observer.observe(/** @type {HTMLElement} */ (wrapper));\n\n    return () => {\n      observer.disconnect();\n    };\n  });\n</script>\n\n<div\n  bind:this={wrapper}\n  {...restProps}\n  role=\"tablist\"\n  class=\"sui tab-list {className}\"\n  {hidden}\n  aria-hidden={hidden}\n  aria-disabled={disabled}\n  aria-orientation={orientation}\n  data-name={name || undefined}\n  onInitialized={() => {\n    updateIndicator();\n  }}\n  onChange={(/** @type {CustomEvent} */ event) => {\n    updateIndicator();\n    onChange?.(event);\n  }}\n  use:activateGroup\n>\n  <div role=\"none\" class=\"inner\" inert={disabled}>\n    {@render children?.()}\n  </div>\n  <div role=\"none\" class=\"indicator\" style={indicatorStyle}></div>\n</div>\n\n<style>.tab-list {\n  flex: none;\n  position: relative;\n  display: flex;\n  align-items: center;\n  margin: var(--sui-tab-list-margin, var(--sui-focus-ring-width));\n  border-color: var(--sui-tab-list-border-color, var(--sui-control-border-color));\n  border-radius: var(--sui-tab-list-border-radius, 0);\n  background-color: var(--sui-tab-list-background-color, transparent);\n}\n.tab-list[aria-orientation=horizontal] {\n  gap: var(--sui-horizontal-tab-list-gap, var(--sui-tab-list-gap, 8px));\n  margin: var(--sui-horizontal-tab-list-margin, var(--sui-tab-list-margin, 0 0 32px));\n  border-width: var(--sui-horizontal-tab-list-border-width, var(--sui-tab-list-border-width, 0 0 1px));\n  padding: var(--sui-horizontal-tab-list-padding, var(--sui-tab-list-padding, 0 16px));\n}\n.tab-list[aria-orientation=horizontal] :global(button) {\n  width: var(--sui-horizontal-tab-width, var(--sui-tab-width, auto));\n  height: var(--sui-horizontal-tab-height, var(--sui-tab-height, 100%));\n  justify-content: var(--sui-horizontal-tab-justify-content, center);\n}\n.tab-list[aria-orientation=horizontal] .indicator {\n  border-width: var(--sui-horizontal-tab-list-indicator-border-width, var(--sui-tab-list-indicator-border-width, 0 0 2px 0));\n}\n.tab-list[aria-orientation=vertical] {\n  gap: var(--sui-vertical-tab-list-gap, var(--sui-tab-list-gap, 8px));\n  flex-direction: column;\n  margin: var(--sui-vertical-tab-list-margin, var(--sui-tab-list-margin, 0 32px 0 0));\n  border-width: var(--sui-vertical-tab-list-border-width, var(--sui-tab-list-border-width, 0 1px 0 0));\n  padding: var(--sui-vertical-tab-list-padding, var(--sui-tab-list-padding, 8px 0));\n  width: var(--sui-vertical-tab-list-width, auto);\n}\n.tab-list[aria-orientation=vertical] :global(button) {\n  justify-content: var(--sui-vertical-tab-justify-content, flex-start);\n  padding-right: 32px;\n  width: var(--sui-vertical-tab-width, var(--sui-tab-width, 100%));\n  height: var(--sui-vertical-tab-height, var(--sui-tab-height, auto));\n}\n.tab-list[aria-orientation=vertical] .indicator {\n  border-width: var(--sui-horizontal-tab-list-vertical-border-width, var(--sui-tab-list-indicator-border-width, 0 2px 0 0));\n}\n.tab-list :global(button) {\n  position: relative;\n  z-index: 1;\n  border-color: transparent;\n  margin: 0 !important;\n  border-radius: var(--sui-tab-border-radius, 0);\n  font-family: var(--sui-tab-font-family, var(--sui-control-font-family, inherit));\n  font-size: var(--sui-tab-font-size, var(--sui-control-font-size, inherit));\n  font-weight: var(--sui-tab-font-weight, var(--sui-control-font-weight, var(--sui-font-weight-normal, normal)));\n}\n\n.inner {\n  display: contents;\n}\n\n.indicator {\n  position: absolute;\n  z-index: 0;\n  inset: auto;\n  border-radius: var(--sui-tab-list-indicator-border-radius, 0);\n  border-color: var(--sui-tab-list-indicator-border-color, var(--sui-primary-accent-color-light));\n  background-color: var(--sui-tab-list-indicator-background-color, transparent);\n  box-shadow: var(--sui-tab-list-indicator-box-shadow, none);\n  pointer-events: none;\n  transition: var(--sui-tab-list-indicator-transition, all 200ms);\n}</style>\n","<!--\n  @component\n  A tab content panel.\n  @see https://w3c.github.io/aria/#tabpanel\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/tabs/\n-->\n<script>\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {Snippet} [children] Primary slot content.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    children,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div {...restProps} role=\"tabpanel\" class=\"sui tab-panel {className}\">\n  {@render children?.()}\n</div>\n\n<style>.tab-panel {\n  flex: auto;\n  transition: all 200ms;\n}\n.tab-panel[aria-hidden=true], .tab-panel:not([aria-hidden]) {\n  display: none;\n}</style>\n","<!--\n  @component\n  A tab widget.\n  @see https://w3c.github.io/aria/#tab\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/tabs/\n-->\n<script>\n  import Button from '../button/button.svelte';\n\n  /**\n   * @import { ButtonProps, CommonEventHandlers } from '../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} [selected] Whether to select the widget. An alias of the `aria-selected`\n   * attribute.\n   */\n\n  /**\n   * @type {ButtonProps & CommonEventHandlers & Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    hidden = false,\n    disabled = false,\n    selected = false,\n    children: _children,\n    startIcon: _startIcon,\n    endIcon: _endIcon,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<Button\n  {...restProps}\n  role=\"tab\"\n  class=\"sui tab {className}\"\n  {hidden}\n  {disabled}\n  aria-selected={selected}\n>\n  {#snippet startIcon()}\n    {@render _startIcon?.()}\n  {/snippet}\n  {#snippet children()}\n    {@render _children?.()}\n  {/snippet}\n  {#snippet endIcon()}\n    {@render _endIcon?.()}\n  {/snippet}\n</Button>\n","<!--\n  @component\n  Toast/snackbar notification. Use the Popover API if possible to acquire a non-modal top layer.\n  @see https://w3c.github.io/aria/#alert\n  @see https://developer.chrome.com/blog/introducing-popover-api/\n-->\n<script>\n  import { onMount, untrack } from 'svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import { ToastPosition } from '../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string | number} [id] The toast ID. If updated, the timer that hides\n   * the toast will be reset, meaning the same toast can be displayed for a longer period of time.\n   * @property {boolean} [show] Whether to show the toast.\n   * @property {number} [duration] Duration to automatically hide the toast. Use `0` to hide it\n   * manually from the consumer.\n   * @property {ToastPosition} [position] Position of the toast.\n   * @property {Snippet} [children] Primary slot content.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    show = $bindable(false),\n    id = undefined,\n    duration = 5000,\n    position = 'auto',\n    children,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /**\n   * @type {HTMLElement | undefined}\n   */\n  let popoverBase = $state();\n  /**\n   * @type {HTMLElement | undefined}\n   */\n  let popover = $state();\n  /**\n   * @type {HTMLElement | undefined}\n   */\n  let toast = $state();\n  /**\n   * @type {number}\n   */\n  let timerId = $state(0);\n\n  onMount(() => {\n    popover =\n      /** @type {HTMLElement} */ (document.querySelector('.sui.toast-base.enabled')) ?? undefined;\n\n    if (popover) {\n      popoverBase?.remove();\n    } else {\n      popover = popoverBase;\n\n      if (popover) {\n        popover.classList.add('enabled');\n        (document.querySelector('.sui.app-shell') ?? document.body).appendChild(popover);\n\n        // Move the element to top layer\n        if (popover.showPopover) {\n          popover.popover = 'manual';\n          popover.showPopover();\n        }\n      }\n    }\n\n    return () => {\n      toast?.remove();\n    };\n  });\n\n  onMount(() => {\n    if (position === 'auto') {\n      const mql = globalThis.matchMedia('(width < 1024px)');\n\n      // eslint-disable-next-line jsdoc/require-jsdoc\n      const setMode = () => {\n        position = mql.matches\n          ? 'bottom-center'\n          : `bottom-${document.dir === 'rtl' ? 'left' : 'right'}`;\n      };\n\n      setMode();\n      mql.addEventListener('change', setMode);\n    }\n  });\n\n  $effect(() => {\n    if (popover && toast) {\n      popover.appendChild(toast);\n    }\n  });\n\n  $effect(() => {\n    void id;\n    void show;\n    void duration;\n\n    untrack(() => {\n      globalThis.clearTimeout(timerId);\n    });\n\n    if (show && duration) {\n      timerId = globalThis.setTimeout(() => {\n        show = false;\n      }, duration);\n    }\n  });\n</script>\n\n<div bind:this={popoverBase} role=\"none\" class=\"sui toast-base\"></div>\n\n<div {...restProps} bind:this={toast} class=\"sui toast {position}\" aria-hidden={!show}>\n  {@render children?.()}\n</div>\n\n<style>.toast-base {\n  position: fixed;\n  inset: 16px;\n  z-index: 99999;\n  display: flex;\n  flex-direction: column;\n  justify-content: flex-end;\n  align-items: flex-end;\n  gap: 8px;\n  margin: 0;\n  border: 0;\n  padding: 0;\n  width: auto;\n  height: auto;\n  background-color: transparent;\n  font-family: var(--sui-font-family-default);\n  font-size: var(--sui-font-size-default);\n  font-weight: var(--sui-font-weight-normal, normal);\n  text-align: center;\n  pointer-events: none;\n  -webkit-user-select: none;\n  user-select: none;\n}\n\n:global(body:has(.sui.bottom-navigation:not([inert]:not([hidden])))) :global(.toast-base) {\n  bottom: calc(var(--sui-bottom-navigation-height) + 16px);\n}\n\n.toast {\n  position: absolute;\n  width: max-content;\n  max-width: 80dvw;\n  box-shadow: 0 8px 16px var(--sui-popup-shadow-color);\n  opacity: 1;\n  transition-duration: 250ms;\n  will-change: opacity;\n}\n.toast[aria-hidden=true] {\n  display: block;\n  opacity: 0;\n}\n.toast.top-left {\n  inset: 0 auto auto 0;\n}\n.toast.top-center {\n  inset: 0 auto auto 50%;\n  transform: translateX(-50%);\n}\n.toast.top-right {\n  inset: 0 0 auto auto;\n}\n.toast.bottom-left {\n  inset: auto auto 0 0;\n}\n.toast.bottom-center {\n  inset: auto auto 0 50%;\n  transform: translateX(-50%);\n}\n.toast.bottom-right {\n  inset: auto 0 0 auto;\n}</style>\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport{$isTextNode as e,$isTokenOrSegmented as t,$getCharacterOffsets as n,$isElementNode as o,$isRootNode as l,$getNodeByKey as r,$getPreviousSelection as s,$createTextNode as i,$isRangeSelection as c,$getSelection as f,$caretRangeFromSelection as u,$createRangeSelection as g,INTERNAL_$isBlock as a,$setSelection as d,$isRootOrShadowRoot as p,$hasAncestor as h,$isLeafNode as y,$caretFromPoint as m,$isExtendableTextPointCaret as S,$extendCaretToRange as x,$isChildCaret as T,$isDecoratorNode as w,$getEditor as v}from\"lexical\";export{$cloneWithProperties,$selectAll}from\"lexical\";function N(e,...t){const n=new URL(\"https://lexical.dev/docs/error\"),o=new URLSearchParams;o.append(\"code\",e);for(const e of t)o.append(\"v\",e);throw n.search=o.toString(),Error(`Minified Lexical error #${e}; visit ${n.toString()} for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`)}const C=new Map;function P(e){let t=e;for(;null!=t;){if(t.nodeType===Node.TEXT_NODE)return t;t=t.firstChild}return null}function K(e){const t=e.parentNode;if(null==t)throw new Error(\"Should never happen\");return[t,Array.from(t.childNodes).indexOf(e)]}function E(t,n,o,l,r){const s=n.getKey(),i=l.getKey(),c=document.createRange();let f=t.getElementByKey(s),u=t.getElementByKey(i),g=o,a=r;if(e(n)&&(f=P(f)),e(l)&&(u=P(u)),void 0===n||void 0===l||null===f||null===u)return null;\"BR\"===f.nodeName&&([f,g]=K(f)),\"BR\"===u.nodeName&&([u,a]=K(u));const d=f.firstChild;f===u&&null!=d&&\"BR\"===d.nodeName&&0===g&&0===a&&(a=1);try{c.setStart(f,g),c.setEnd(u,a)}catch(e){return null}return!c.collapsed||g===a&&s===i||(c.setStart(u,a),c.setEnd(f,g)),c}function k(e,t){const n=e.getRootElement();if(null===n)return[];const o=n.getBoundingClientRect(),l=getComputedStyle(n),r=parseFloat(l.paddingLeft)+parseFloat(l.paddingRight),s=Array.from(t.getClientRects());let i,c=s.length;s.sort(((e,t)=>{const n=e.top-t.top;return Math.abs(n)<=3?e.left-t.left:n}));for(let e=0;e<c;e++){const t=s[e],n=i&&i.top<=t.top&&i.top+i.height>t.top&&i.left+i.width>t.left,l=t.width+r===o.width;n||l?(s.splice(e--,1),c--):i=t}return s}function I(e){const t={};if(!e)return t;const n=e.split(\";\");for(const e of n)if(\"\"!==e){const[n,o]=e.split(/:([^]+)/);n&&o&&(t[n.trim()]=o.trim())}return t}function B(e){let t=C.get(e);return void 0===t&&(t=I(e),C.set(e,t)),t}function F(e){let t=\"\";for(const n in e)n&&(t+=`${n}: ${e[n]};`);return t}function b(e,o){const l=e.getStartEndPoints();if(o.isSelected(e)&&!t(o)&&null!==l){const[t,r]=l,s=e.isBackward(),i=t.getNode(),c=r.getNode(),f=o.is(i),u=o.is(c);if(f||u){const[t,l]=n(e),r=i.is(c),f=o.is(s?c:i),u=o.is(s?i:c);let g,a=0;if(r)a=t>l?l:t,g=t>l?t:l;else if(f){a=s?l:t,g=void 0}else if(u){a=0,g=s?t:l}o.__text=o.__text.slice(a,g)}}return o}function O(e){if(\"text\"===e.type)return e.offset===e.getNode().getTextContentSize();const t=e.getNode();return o(t)||N(177),e.offset===t.getChildrenSize()}function R(t,n,f){let u=n.getNode(),g=f;if(o(u)){const e=u.getDescendantByIndex(n.offset);null!==e&&(u=e)}for(;g>0&&null!==u;){if(o(u)){const e=u.getLastDescendant();null!==e&&(u=e)}let f=u.getPreviousSibling(),a=0;if(null===f){let e=u.getParentOrThrow(),t=e.getPreviousSibling();for(;null===t;){if(e=e.getParent(),null===e){f=null;break}t=e.getPreviousSibling()}null!==e&&(a=e.isInline()?0:2,f=t)}let d=u.getTextContent();\"\"===d&&o(u)&&!u.isInline()&&(d=\"\\n\\n\");const p=d.length;if(!e(u)||g>=p){const e=u.getParent();u.remove(),null==e||0!==e.getChildrenSize()||l(e)||e.remove(),g-=p+a,u=f}else{const o=u.getKey(),l=t.getEditorState().read((()=>{const t=r(o);return e(t)&&t.isSimpleText()?t.getTextContent():null})),f=p-g,a=d.slice(0,f);if(null!==l&&l!==d){const e=s();let t=u;if(u.isSimpleText())u.setTextContent(l);else{const e=i(l);u.replace(e),t=e}if(c(e)&&e.isCollapsed()){const n=e.anchor.offset;t.select(n,n)}}else if(u.isSimpleText()){const e=n.key===o;let t=n.offset;t<g&&(t=p);const l=e?t-g:0,r=e?t:f;if(e&&0===l){const[e]=u.splitText(l,r);e.remove()}else{const[,e]=u.splitText(l,r);e.remove()}}else{const e=i(a);u.replace(e)}g=0}}}function z(e){const t=e.getStyle(),n=I(t);C.set(t,n)}function A(t,n){(c(t)?t.isCollapsed():e(t)||o(t))||N(280);const l=B(c(t)?t.style:e(t)?t.getStyle():t.getTextStyle()),r=Object.entries(n).reduce(((e,[n,o])=>(\"function\"==typeof o?e[n]=o(l[n],t):null===o?delete e[n]:e[n]=o,e)),{...l}),s=F(r);c(t)||e(t)?t.setStyle(s):t.setTextStyle(s),C.set(s,r)}function M(e,t){if(c(e)&&e.isCollapsed()){A(e,t);const n=e.anchor.getNode();o(n)&&n.isEmpty()&&A(n,t)}L((e=>{A(e,t)}))}function L(n){const o=f();if(!o)return;const l=new Map;if(c(o))for(const e of u(o).getTextSlices())e&&l.set(e.caret.origin.getKey(),e.getSliceIndices());const r=o.getNodes();for(const o of r){if(!e(o)||!o.canHaveFormat())continue;const[r,i]=(s=o,l.get(s.getKey())||[0,s.getTextContentSize()]);if(i!==r)if(t(o)||0===r&&i===o.getTextContentSize())n(o);else{n(o.splitText(r,i)[0===r?0:1])}}var s;c(o)&&\"text\"===o.anchor.type&&\"text\"===o.focus.type&&o.anchor.key===o.focus.key&&$(o)}function $(e){if(e.isBackward()){const{anchor:t,focus:n}=e,{key:o,offset:l,type:r}=t;t.set(n.key,n.offset,n.type),n.set(o,l,r)}}function D(e,t){const n=e.getFormatType(),o=e.getIndent();n!==t.getFormatType()&&t.setFormat(n),o!==t.getIndent()&&t.setIndent(o)}function _(e,t,n=D){if(null===e)return;const l=e.getStartEndPoints(),r=new Map;let s=null;if(l){const[e,t]=l;s=g(),s.anchor.set(e.key,e.offset,e.type),s.focus.set(t.key,t.offset,t.type);const n=Z(e.getNode(),a),i=Z(t.getNode(),a);o(n)&&r.set(n.getKey(),n),o(i)&&r.set(i.getKey(),i)}for(const t of e.getNodes())if(o(t)&&a(t))r.set(t.getKey(),t);else if(null===l){const e=Z(t,a);o(e)&&r.set(e.getKey(),e)}for(const[e,o]of r){const l=t();n(o,l),o.replace(l,!0),s&&(e===s.anchor.key&&s.anchor.set(l.getKey(),s.anchor.offset,s.anchor.type),e===s.focus.key&&s.focus.set(l.getKey(),s.focus.offset,s.focus.type))}s&&e.is(f())&&d(s)}function U(e){return e.getNode().isAttached()}function j(e){let t=e;for(;null!==t&&!p(t);){const e=t.getLatest(),n=t.getParent();0===e.getChildrenSize()&&t.remove(!0),t=n}}function H(e,t,n=null){const o=e.getStartEndPoints(),l=o?o[0]:null,r=e.getNodes(),s=r.length;if(null!==l&&(0===s||1===s&&\"element\"===l.type&&0===l.getNode().getChildrenSize())){const e=\"text\"===l.type?l.getNode().getParentOrThrow():l.getNode(),o=e.getChildren();let r=t();return r.setFormat(e.getFormatType()),r.setIndent(e.getIndent()),o.forEach((e=>r.append(e))),n&&(r=n.append(r)),void e.replace(r)}let i=null,c=[];for(let o=0;o<s;o++){const l=r[o];p(l)?(V(e,c,c.length,t,n),c=[],i=l):null===i||null!==i&&h(l,i)?c.push(l):(V(e,c,c.length,t,n),c=[l])}V(e,c,c.length,t,n)}function V(e,t,n,l,r=null){if(0===t.length)return;const i=t[0],f=new Map,u=[];let g=o(i)?i:i.getParentOrThrow();g.isInline()&&(g=g.getParentOrThrow());let a=!1;for(;null!==g;){const e=g.getPreviousSibling();if(null!==e){g=e,a=!0;break}if(g=g.getParentOrThrow(),p(g))break}const h=new Set;for(let e=0;e<n;e++){const n=t[e];o(n)&&0===n.getChildrenSize()&&h.add(n.getKey())}const m=new Set;for(let e=0;e<n;e++){const n=t[e];let r=n.getParent();if(null!==r&&r.isInline()&&(r=r.getParent()),null!==r&&y(n)&&!m.has(n.getKey())){const e=r.getKey();if(void 0===f.get(e)){const t=l();t.setFormat(r.getFormatType()),t.setIndent(r.getIndent()),u.push(t),f.set(e,t),r.getChildren().forEach((e=>{t.append(e),m.add(e.getKey()),o(e)&&e.getChildrenKeys().forEach((e=>m.add(e)))})),j(r)}}else if(h.has(n.getKey())){o(n)||N(179);const e=l();e.setFormat(n.getFormatType()),e.setIndent(n.getIndent()),u.push(e),n.remove(!0)}}if(null!==r)for(let e=0;e<u.length;e++){const t=u[e];r.append(t)}let S=null;if(p(g))if(a)if(null!==r)g.insertAfter(r);else for(let e=u.length-1;e>=0;e--){const t=u[e];g.insertAfter(t)}else{const e=g.getFirstChild();if(o(e)&&(g=e),null===e)if(r)g.append(r);else for(let e=0;e<u.length;e++){const t=u[e];g.append(t),S=t}else if(null!==r)e.insertBefore(r);else for(let t=0;t<u.length;t++){const n=u[t];e.insertBefore(n),S=n}}else if(r)g.insertAfter(r);else for(let e=u.length-1;e>=0;e--){const t=u[e];g.insertAfter(t),S=t}const x=s();c(x)&&U(x.anchor)&&U(x.focus)?d(x.clone()):null!==S?S.selectEnd():e.dirty=!0}function W(e){const t=e.anchor.getNode(),n=l(t)?t:t.getParentOrThrow(),o=v().getElementByKey(n.getKey());if(null===o)return!1;const r=o.ownerDocument.defaultView;if(null===r)return!1;return\"vertical-rl\"===r.getComputedStyle(o).writingMode}function X(e,t){const n=W(e)?!t:t,l=m(e.focus,n?\"previous\":\"next\");if(S(l))return!1;for(const e of x(l)){if(T(e))return!e.origin.isInline();if(!o(e.origin)){if(w(e.origin))return!0;break}}return!1}function q(e,t,n,o){e.modify(t?\"extend\":\"move\",n,o)}function G(e){const t=e.anchor.getNode();return\"rtl\"===(l(t)?t:t.getParentOrThrow()).getDirection()}function J(e,t,n){const o=G(e);let l;l=W(e)||o?!n:n,q(e,t,l,\"character\")}function Q(e,t,n){const o=B(e.getStyle());return null!==o&&o[t]||n}function Y(t,n,o=\"\"){let l=null;const r=t.getNodes(),s=t.anchor,i=t.focus,f=t.isBackward(),u=f?i.offset:s.offset,g=f?i.getNode():s.getNode();if(c(t)&&t.isCollapsed()&&\"\"!==t.style){const e=B(t.style);if(null!==e&&n in e)return e[n]}for(let t=0;t<r.length;t++){const s=r[t];if((0===t||0!==u||!s.is(g))&&e(s)){const e=Q(s,n,o);if(null===l)l=e;else if(l!==e){l=\"\";break}}}return null===l?o:l}function Z(e,t){let n=e;for(;null!==n&&null!==n.getParent()&&!t(n);)n=n.getParentOrThrow();return t(n)?n:null}const ee=R;export{z as $addNodeStyle,D as $copyBlockFormatIndent,$ as $ensureForwardRangeSelection,L as $forEachSelectedTextNode,Y as $getSelectionStyleValueForProperty,O as $isAtNodeEnd,G as $isParentElementRTL,q as $moveCaretSelection,J as $moveCharacter,M as $patchStyleText,_ as $setBlocksType,X as $shouldOverrideDefaultCharacterSelection,b as $sliceSelectedTextNodeContent,R as $trimTextContentFromAnchor,H as $wrapNodes,E as createDOMRange,k as createRectsFromDOMRange,F as getCSSFromStyleObject,B as getStyleObjectFromCSS,ee as trimTextContentFromAnchor};\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport{isHTMLElement as t,$getSelection as e,$isRangeSelection as n,$isElementNode as o,getDOMTextNode as r,$getRoot as i,$getChildCaret as l,$getSiblingCaret as u,$getAdjacentChildCaret as s,$getChildCaretOrSelf as c,makeStepwiseIterator as f,$isChildCaret as a,$cloneWithProperties as d,$setSelection as g,$getPreviousSelection as p,$caretFromPoint as m,$createParagraphNode as h,$normalizeCaret as v,$setSelectionFromCaretRange as y,$getCollapsedCaretRange as w,$getCaretInDirection as x,$splitAtPointCaretNext as E,$isTextPointCaret as S,$isSiblingCaret as A,$rewindSiblingCaret as C,$getState as L,$setState as b}from\"lexical\";export{$splitNode,isBlockDomNode,isHTMLAnchorElement,isHTMLElement,isInlineDomNode}from\"lexical\";import{createRectsFromDOMRange as N}from\"@lexical/selection\";function P(t,...e){const n=new URL(\"https://lexical.dev/docs/error\"),o=new URLSearchParams;o.append(\"code\",t);for(const t of e)o.append(\"v\",t);throw n.search=o.toString(),Error(`Minified Lexical error #${t}; visit ${n.toString()} for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`)}const M=\"undefined\"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement,R=M&&\"documentMode\"in document?document.documentMode:null,T=M&&/Mac|iPod|iPhone|iPad/.test(navigator.platform),B=M&&/^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent),_=!(!M||!(\"InputEvent\"in window)||R)&&\"getTargetRanges\"in new window.InputEvent(\"input\"),k=M&&/Version\\/[\\d.]+.*Safari/.test(navigator.userAgent),K=M&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,H=M&&/Android/.test(navigator.userAgent),O=M&&/^(?=.*Chrome).*/i.test(navigator.userAgent),$=M&&H&&O,D=M&&/AppleWebKit\\/[\\d.]+/.test(navigator.userAgent)&&!O;function I(...t){const e=[];for(const n of t)if(n&&\"string\"==typeof n)for(const[t]of n.matchAll(/\\S+/g))e.push(t);return e}function j(...t){return()=>{for(let e=t.length-1;e>=0;e--)t[e]();t.length=0}}function F(t){return`${t}px`}const U={attributes:!0,characterData:!0,childList:!0,subtree:!0};function z(e,n,o){let r=null,i=null,l=null,u=[];const s=document.createElement(\"div\");function c(){null===r&&P(182),null===i&&P(183);const{left:t,top:l}=i.getBoundingClientRect(),c=N(e,n);var f,a;s.isConnected||(a=s,(f=i).insertBefore(a,f.firstChild));let d=!1;for(let e=0;e<c.length;e++){const n=c[e],o=u[e]||document.createElement(\"div\"),r=o.style;\"absolute\"!==r.position&&(r.position=\"absolute\",d=!0);const i=F(n.left-t);r.left!==i&&(r.left=i,d=!0);const f=F(n.top-l);r.top!==f&&(o.style.top=f,d=!0);const a=F(n.width);r.width!==a&&(o.style.width=a,d=!0);const g=F(n.height);r.height!==g&&(o.style.height=g,d=!0),o.parentNode!==s&&(s.append(o),d=!0),u[e]=o}for(;u.length>c.length;)u.pop();d&&o(u)}function f(){i=null,r=null,null!==l&&l.disconnect(),l=null,s.remove();for(const t of u)t.remove();u=[]}s.style.position=\"relative\";const a=e.registerRootListener((function n(){const o=e.getRootElement();if(null===o)return f();const u=o.parentElement;if(!t(u))return f();f(),r=o,i=u,l=new MutationObserver((t=>{const o=e.getRootElement(),l=o&&o.parentElement;if(o!==r||l!==i)return n();for(const e of t)if(!s.contains(e.target))return c()})),l.observe(u,U),c()}));return()=>{a(),f()}}function V(t,e,n){if(\"text\"!==t.type&&o(e)){const o=e.getDOMSlot(n);return[o.element,o.getFirstChildOffset()+t.offset]}return[r(n)||n,t.offset]}function W(t,o){let r=null,i=null,l=null,u=null,s=null,c=null,f=()=>{};function a(a){a.read((()=>{const a=e();if(!n(a))return r=null,l=null,u=null,c=null,f(),void(f=()=>{});const{anchor:d,focus:g}=a,p=d.getNode(),m=p.getKey(),h=d.offset,v=g.getNode(),y=v.getKey(),w=g.offset,x=t.getElementByKey(m),E=t.getElementByKey(y),S=null===r||x!==i||h!==l||m!==r.getKey(),A=null===u||E!==s||w!==c||y!==u.getKey();if((S||A)&&null!==x&&null!==E){const e=function(t,e,n,o,r,i,l){const u=(t._window?t._window.document:document).createRange();return i.isBefore(n)?(u.setStart(...V(r,i,l)),u.setEnd(...V(e,n,o))):(u.setStart(...V(e,n,o)),u.setEnd(...V(r,i,l))),u}(t,d,p,x,g,v,E);f(),f=z(t,e,(t=>{if(void 0===o)for(const e of t){const t=e.style;\"Highlight\"!==t.background&&(t.background=\"Highlight\"),\"HighlightText\"!==t.color&&(t.color=\"HighlightText\"),t.marginTop!==F(-1.5)&&(t.marginTop=F(-1.5)),t.paddingTop!==F(4)&&(t.paddingTop=F(4)),t.paddingBottom!==F(0)&&(t.paddingBottom=F(0))}else o(t)}))}r=p,i=x,l=h,u=v,s=E,c=w}))}return a(t.getEditorState()),j(t.registerUpdateListener((({editorState:t})=>a(t))),(()=>{f()}))}function G(t){let e=null;const n=()=>{const n=getSelection(),o=n&&n.anchorNode,r=t.getRootElement();null!==o&&null!==r&&r.contains(o)?null!==e&&(e(),e=null):null===e&&(e=W(t))};return document.addEventListener(\"selectionchange\",n),()=>{null!==e&&e(),document.removeEventListener(\"selectionchange\",n)}}const q=_,J=M,Q=H,X=$,Y=T,Z=D,tt=O,et=B,nt=K,ot=k;function rt(t,...e){const n=I(...e);n.length>0&&t.classList.add(...n)}function it(t,...e){const n=I(...e);n.length>0&&t.classList.remove(...n)}function lt(t,e){for(const n of e)if(t.type.startsWith(n))return!0;return!1}function ut(t,e){const n=t[Symbol.iterator]();return new Promise(((t,o)=>{const r=[],i=()=>{const{done:l,value:u}=n.next();if(l)return t(r);const s=new FileReader;s.addEventListener(\"error\",o),s.addEventListener(\"load\",(()=>{const t=s.result;\"string\"==typeof t&&r.push({file:u,result:t}),i()})),lt(u,e)?s.readAsDataURL(u):i()};i()}))}function st(t,e){return Array.from(at(t,e))}function ct(t){return t?t.getAdjacentCaret():null}function ft(t,e){return Array.from(ht(t,e))}function at(t,e){return dt(\"next\",t,e)}function dt(t,e,n){const r=i(),d=e||r,g=o(d)?l(d,t):u(d,t),p=pt(d),m=n?s(c(u(n,t))):function(t,e){const n=$t(u(t,e));return n&&n[0]}(d,t);let h=p;return f({hasNext:t=>null!==t,initial:g,map:t=>({depth:h,node:t.origin}),step:t=>{if(t.isSameNodeCaret(m))return null;a(t)&&h++;const e=$t(t);return!e||e[0].isSameNodeCaret(m)?null:(h+=e[1],e[0])}})}function gt(t){const e=$t(u(t,\"next\"));return e&&[e[0].origin,e[1]]}function pt(t){let e=-1;for(let n=t;null!==n;n=n.getParent())e++;return e}function mt(t){const e=$t(c(u(t,\"previous\")),\"root\");return e&&e[0].origin}function ht(t,e){return dt(\"previous\",t,e)}function vt(t,e){let n=t;for(;null!=n;){if(n instanceof e)return n;n=n.getParent()}return null}function yt(t){const e=wt(t,(t=>o(t)&&!t.isInline()));return o(e)||P(4,t.__key),e}const wt=(t,e)=>{let n=t;for(;n!==i()&&null!=n;){if(e(n))return n;n=n.getParent()}return null};function xt(t,e,n,o){const r=t=>t instanceof e;return t.registerNodeTransform(e,(t=>{const e=(t=>{const e=t.getChildren();for(let t=0;t<e.length;t++){const n=e[t];if(r(n))return null}let n=t,o=t;for(;null!==n;)if(o=n,n=n.getParent(),r(n))return{child:o,parent:n};return null})(t);if(null!==e){const{child:r,parent:i}=e;if(r.is(t)){o(i,t);const e=r.getNextSiblings(),l=e.length;if(i.insertAfter(r),0!==l){const t=n(i);r.insertAfter(t);for(let n=0;n<l;n++)t.append(e[n])}i.canBeEmpty()||0!==i.getChildrenSize()||i.remove()}}}))}function Et(t,e){const n=new Map,o=t._pendingEditorState;for(const[t,o]of e._nodeMap)n.set(t,d(o));o&&(o._nodeMap=n),t._dirtyType=2;const r=e._selection;g(null===r?null:r.clone())}function St(t){const o=e()||p();let r;if(n(o))r=m(o.focus,\"next\");else{if(null!=o){const t=o.getNodes(),e=t[t.length-1];e&&(r=u(e,\"next\"))}r=r||l(i(),\"previous\").getFlipped().insert(h())}const c=At(t,r),f=s(c),d=a(f)?v(f):c;return y(w(d)),t.getLatest()}function At(t,e,n){let o=x(e,\"next\");for(let t=o;t;t=E(t,n))o=t;return S(o)&&P(283),o.insert(t.isInline()?h().append(t):t),x(u(t.getLatest(),\"next\"),e.direction)}function Ct(t,e){const n=e();return t.replace(n),n.append(t),n}function Lt(t,e){return null!==t&&Object.getPrototypeOf(t).constructor.name===e.name}function bt(t,e){const n=[];for(let o=0;o<t.length;o++){const r=e(t[o]);null!==r&&n.push(r)}return n}function Nt(t,e){l(t,\"next\").insert(e)}let Pt=!(et||!J)&&void 0;function Mt(t){let e=1;if(function(){if(void 0===Pt){const t=document.createElement(\"div\");t.style.cssText=\"position: absolute; opacity: 0; width: 100px; left: -1000px;\",document.body.appendChild(t);const e=t.getBoundingClientRect();t.style.setProperty(\"zoom\",\"2\"),Pt=t.getBoundingClientRect().width===e.width,document.body.removeChild(t)}return Pt}())for(;t;)e*=Number(window.getComputedStyle(t).getPropertyValue(\"zoom\")),t=t.parentElement;return e}function Rt(t){return null!==t._parentEditor}function Tt(t,e){return Bt(t,e,null)}function Bt(t,e,n){let r=!1;for(const i of Kt(t))e(i)?null!==n&&n(i):(r=!0,o(i)&&Bt(i,e,n||(t=>i.insertAfter(t))),i.remove());return r}function _t(t,e){const n=[],r=Array.from(t).reverse();for(let t=r.pop();void 0!==t;t=r.pop())if(e(t))n.push(t);else if(o(t))for(const e of Kt(t))r.push(e);return n}function kt(t){return Ht(l(t,\"next\"))}function Kt(t){return Ht(l(t,\"previous\"))}function Ht(t){return f({hasNext:A,initial:t.getAdjacentCaret(),map:t=>t.origin.getLatest(),step:t=>t.getAdjacentCaret()})}function Ot(t){C(u(t,\"next\")).splice(1,t.getChildren())}function $t(t,e=\"root\"){let n=0,o=t,r=s(o);for(;null===r;){if(n--,r=o.getParentCaret(e),!r)return null;o=r,r=s(o)}return r&&[r,n]}function Dt(t){const e=e=>L(e,t),n=(e,n)=>b(e,t,n);return{$get:e,$set:n,accessors:[e,n],makeGetterMethod:()=>function(){return e(this)},makeSetterMethod:()=>function(t){return n(this,t)},stateConfig:t}}export{_t as $descendantsMatching,st as $dfs,at as $dfsIterator,bt as $filter,wt as $findMatchingParent,kt as $firstToLastIterator,ct as $getAdjacentCaret,$t as $getAdjacentSiblingOrParentSiblingCaret,pt as $getDepth,yt as $getNearestBlockElementAncestorOrThrow,vt as $getNearestNodeOfType,mt as $getNextRightPreorderNode,gt as $getNextSiblingOrParentSibling,Nt as $insertFirst,St as $insertNodeToNearestRoot,At as $insertNodeToNearestRootAtCaret,Rt as $isEditorIsNestedEditor,Kt as $lastToFirstIterator,Et as $restoreEditorState,ft as $reverseDfs,ht as $reverseDfsIterator,Tt as $unwrapAndFilterDescendants,Ot as $unwrapNode,Ct as $wrapNodeInElement,q as CAN_USE_BEFORE_INPUT,J as CAN_USE_DOM,Q as IS_ANDROID,X as IS_ANDROID_CHROME,Y as IS_APPLE,Z as IS_APPLE_WEBKIT,tt as IS_CHROME,et as IS_FIREFOX,nt as IS_IOS,ot as IS_SAFARI,rt as addClassNamesToElement,Mt as calculateZoomLevel,lt as isMimeType,Dt as makeStateWrapper,W as markSelection,ut as mediaFileReader,j as mergeRegister,Lt as objectKlassEquals,z as positionNodeOnRange,xt as registerNestedElementResolver,it as removeClassNamesFromElement,G as selectionAlwaysOnDisplay};\n","\n/* **********************************************\n     Begin prism-core.js\n********************************************** */\n\n/// <reference lib=\"WebWorker\"/>\n\nvar _self = (typeof window !== 'undefined')\n\t? window   // if in browser\n\t: (\n\t\t(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)\n\t\t\t? self // if in worker\n\t\t\t: {}   // if in node js\n\t);\n\n/**\n * Prism: Lightweight, robust, elegant syntax highlighting\n *\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @namespace\n * @public\n */\nvar Prism = (function (_self) {\n\n\t// Private helper vars\n\tvar lang = /(?:^|\\s)lang(?:uage)?-([\\w-]+)(?=\\s|$)/i;\n\tvar uniqueId = 0;\n\n\t// The grammar object for plaintext\n\tvar plainTextGrammar = {};\n\n\n\tvar _ = {\n\t\t/**\n\t\t * By default, Prism will attempt to highlight all code elements (by calling {@link Prism.highlightAll}) on the\n\t\t * current page after the page finished loading. This might be a problem if e.g. you wanted to asynchronously load\n\t\t * additional languages or plugins yourself.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not automatically highlight all code elements on the page.\n\t\t *\n\t\t * You obviously have to change this value before the automatic highlighting started. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.manual = true;\n\t\t * // add a new <script> to load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tmanual: _self.Prism && _self.Prism.manual,\n\t\t/**\n\t\t * By default, if Prism is in a web worker, it assumes that it is in a worker it created itself, so it uses\n\t\t * `addEventListener` to communicate with its parent instance. However, if you're using Prism manually in your\n\t\t * own worker, you don't want it to do this.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not add its own listeners to the worker.\n\t\t *\n\t\t * You obviously have to change this value before Prism executes. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.disableWorkerMessageHandler = true;\n\t\t * // Load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tdisableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,\n\n\t\t/**\n\t\t * A namespace for utility methods.\n\t\t *\n\t\t * All function in this namespace that are not explicitly marked as _public_ are for __internal use only__ and may\n\t\t * change or disappear at any time.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t */\n\t\tutil: {\n\t\t\tencode: function encode(tokens) {\n\t\t\t\tif (tokens instanceof Token) {\n\t\t\t\t\treturn new Token(tokens.type, encode(tokens.content), tokens.alias);\n\t\t\t\t} else if (Array.isArray(tokens)) {\n\t\t\t\t\treturn tokens.map(encode);\n\t\t\t\t} else {\n\t\t\t\t\treturn tokens.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\\u00a0/g, ' ');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the name of the type of the given value.\n\t\t\t *\n\t\t\t * @param {any} o\n\t\t\t * @returns {string}\n\t\t\t * @example\n\t\t\t * type(null)      === 'Null'\n\t\t\t * type(undefined) === 'Undefined'\n\t\t\t * type(123)       === 'Number'\n\t\t\t * type('foo')     === 'String'\n\t\t\t * type(true)      === 'Boolean'\n\t\t\t * type([1, 2])    === 'Array'\n\t\t\t * type({})        === 'Object'\n\t\t\t * type(String)    === 'Function'\n\t\t\t * type(/abc+/)    === 'RegExp'\n\t\t\t */\n\t\t\ttype: function (o) {\n\t\t\t\treturn Object.prototype.toString.call(o).slice(8, -1);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns a unique number for the given object. Later calls will still return the same number.\n\t\t\t *\n\t\t\t * @param {Object} obj\n\t\t\t * @returns {number}\n\t\t\t */\n\t\t\tobjId: function (obj) {\n\t\t\t\tif (!obj['__id']) {\n\t\t\t\t\tObject.defineProperty(obj, '__id', { value: ++uniqueId });\n\t\t\t\t}\n\t\t\t\treturn obj['__id'];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Creates a deep clone of the given object.\n\t\t\t *\n\t\t\t * The main intended use of this function is to clone language definitions.\n\t\t\t *\n\t\t\t * @param {T} o\n\t\t\t * @param {Record<number, any>} [visited]\n\t\t\t * @returns {T}\n\t\t\t * @template T\n\t\t\t */\n\t\t\tclone: function deepClone(o, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar clone; var id;\n\t\t\t\tswitch (_.util.type(o)) {\n\t\t\t\t\tcase 'Object':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = /** @type {Record<string, any>} */ ({});\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\tfor (var key in o) {\n\t\t\t\t\t\t\tif (o.hasOwnProperty(key)) {\n\t\t\t\t\t\t\t\tclone[key] = deepClone(o[key], visited);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tcase 'Array':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\t(/** @type {Array} */(/** @type {any} */(o))).forEach(function (v, i) {\n\t\t\t\t\t\t\tclone[i] = deepClone(v, visited);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn o;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.\n\t\t\t *\n\t\t\t * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @returns {string}\n\t\t\t */\n\t\t\tgetLanguage: function (element) {\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar m = lang.exec(element.className);\n\t\t\t\t\tif (m) {\n\t\t\t\t\t\treturn m[1].toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn 'none';\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Sets the Prism `language-xxxx` class of the given element.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} language\n\t\t\t * @returns {void}\n\t\t\t */\n\t\t\tsetLanguage: function (element, language) {\n\t\t\t\t// remove all `language-xxxx` classes\n\t\t\t\t// (this might leave behind a leading space)\n\t\t\t\telement.className = element.className.replace(RegExp(lang, 'gi'), '');\n\n\t\t\t\t// add the new `language-xxxx` class\n\t\t\t\t// (using `classList` will automatically clean up spaces for us)\n\t\t\t\telement.classList.add('language-' + language);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the script element that is currently executing.\n\t\t\t *\n\t\t\t * This does __not__ work for line script element.\n\t\t\t *\n\t\t\t * @returns {HTMLScriptElement | null}\n\t\t\t */\n\t\t\tcurrentScript: function () {\n\t\t\t\tif (typeof document === 'undefined') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tif (document.currentScript && document.currentScript.tagName === 'SCRIPT' && 1 < 2 /* hack to trip TS' flow analysis */) {\n\t\t\t\t\treturn /** @type {any} */ (document.currentScript);\n\t\t\t\t}\n\n\t\t\t\t// IE11 workaround\n\t\t\t\t// we'll get the src of the current script by parsing IE11's error stack trace\n\t\t\t\t// this will not work for inline scripts\n\n\t\t\t\ttry {\n\t\t\t\t\tthrow new Error();\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Get file src url from stack. Specifically works with the format of stack traces in IE.\n\t\t\t\t\t// A stack will look like this:\n\t\t\t\t\t//\n\t\t\t\t\t// Error\n\t\t\t\t\t//    at _.util.currentScript (http://localhost/components/prism-core.js:119:5)\n\t\t\t\t\t//    at Global code (http://localhost/components/prism-core.js:606:1)\n\n\t\t\t\t\tvar src = (/at [^(\\r\\n]*\\((.*):[^:]+:[^:]+\\)$/i.exec(err.stack) || [])[1];\n\t\t\t\t\tif (src) {\n\t\t\t\t\t\tvar scripts = document.getElementsByTagName('script');\n\t\t\t\t\t\tfor (var i in scripts) {\n\t\t\t\t\t\t\tif (scripts[i].src == src) {\n\t\t\t\t\t\t\t\treturn scripts[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns whether a given class is active for `element`.\n\t\t\t *\n\t\t\t * The class can be activated if `element` or one of its ancestors has the given class and it can be deactivated\n\t\t\t * if `element` or one of its ancestors has the negated version of the given class. The _negated version_ of the\n\t\t\t * given class is just the given class with a `no-` prefix.\n\t\t\t *\n\t\t\t * Whether the class is active is determined by the closest ancestor of `element` (where `element` itself is\n\t\t\t * closest ancestor) that has the given class or the negated version of it. If neither `element` nor any of its\n\t\t\t * ancestors have the given class or the negated version of it, then the default activation will be returned.\n\t\t\t *\n\t\t\t * In the paradoxical situation where the closest ancestor contains __both__ the given class and the negated\n\t\t\t * version of it, the class is considered active.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} className\n\t\t\t * @param {boolean} [defaultActivation=false]\n\t\t\t * @returns {boolean}\n\t\t\t */\n\t\t\tisActive: function (element, className, defaultActivation) {\n\t\t\t\tvar no = 'no-' + className;\n\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar classList = element.classList;\n\t\t\t\t\tif (classList.contains(className)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (classList.contains(no)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn !!defaultActivation;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * This namespace contains all currently loaded languages and the some helper functions to create and modify languages.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tlanguages: {\n\t\t\t/**\n\t\t\t * The grammar for plain, unformatted text.\n\t\t\t */\n\t\t\tplain: plainTextGrammar,\n\t\t\tplaintext: plainTextGrammar,\n\t\t\ttext: plainTextGrammar,\n\t\t\ttxt: plainTextGrammar,\n\n\t\t\t/**\n\t\t\t * Creates a deep copy of the language with the given id and appends the given tokens.\n\t\t\t *\n\t\t\t * If a token in `redef` also appears in the copied language, then the existing token in the copied language\n\t\t\t * will be overwritten at its original position.\n\t\t\t *\n\t\t\t * ## Best practices\n\t\t\t *\n\t\t\t * Since the position of overwriting tokens (token in `redef` that overwrite tokens in the copied language)\n\t\t\t * doesn't matter, they can technically be in any order. However, this can be confusing to others that trying to\n\t\t\t * understand the language definition because, normally, the order of tokens matters in Prism grammars.\n\t\t\t *\n\t\t\t * Therefore, it is encouraged to order overwriting tokens according to the positions of the overwritten tokens.\n\t\t\t * Furthermore, all non-overwriting tokens should be placed after the overwriting ones.\n\t\t\t *\n\t\t\t * @param {string} id The id of the language to extend. This has to be a key in `Prism.languages`.\n\t\t\t * @param {Grammar} redef The new tokens to append.\n\t\t\t * @returns {Grammar} The new language created.\n\t\t\t * @public\n\t\t\t * @example\n\t\t\t * Prism.languages['css-with-colors'] = Prism.languages.extend('css', {\n\t\t\t *     // Prism.languages.css already has a 'comment' token, so this token will overwrite CSS' 'comment' token\n\t\t\t *     // at its original position\n\t\t\t *     'comment': { ... },\n\t\t\t *     // CSS doesn't have a 'color' token, so this token will be appended\n\t\t\t *     'color': /\\b(?:red|green|blue)\\b/\n\t\t\t * });\n\t\t\t */\n\t\t\textend: function (id, redef) {\n\t\t\t\tvar lang = _.util.clone(_.languages[id]);\n\n\t\t\t\tfor (var key in redef) {\n\t\t\t\t\tlang[key] = redef[key];\n\t\t\t\t}\n\n\t\t\t\treturn lang;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Inserts tokens _before_ another token in a language definition or any other grammar.\n\t\t\t *\n\t\t\t * ## Usage\n\t\t\t *\n\t\t\t * This helper method makes it easy to modify existing languages. For example, the CSS language definition\n\t\t\t * not only defines CSS highlighting for CSS documents, but also needs to define highlighting for CSS embedded\n\t\t\t * in HTML through `<style>` elements. To do this, it needs to modify `Prism.languages.markup` and add the\n\t\t\t * appropriate tokens. However, `Prism.languages.markup` is a regular JavaScript object literal, so if you do\n\t\t\t * this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.markup.style = {\n\t\t\t *     // token\n\t\t\t * };\n\t\t\t * ```\n\t\t\t *\n\t\t\t * then the `style` token will be added (and processed) at the end. `insertBefore` allows you to insert tokens\n\t\t\t * before existing tokens. For the CSS example above, you would use it like this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'cdata', {\n\t\t\t *     'style': {\n\t\t\t *         // token\n\t\t\t *     }\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Special cases\n\t\t\t *\n\t\t\t * If the grammars of `inside` and `insert` have tokens with the same name, the tokens in `inside`'s grammar\n\t\t\t * will be ignored.\n\t\t\t *\n\t\t\t * This behavior can be used to insert tokens after `before`:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'comment', {\n\t\t\t *     'comment': Prism.languages.markup.comment,\n\t\t\t *     // tokens after 'comment'\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Limitations\n\t\t\t *\n\t\t\t * The main problem `insertBefore` has to solve is iteration order. Since ES2015, the iteration order for object\n\t\t\t * properties is guaranteed to be the insertion order (except for integer keys) but some browsers behave\n\t\t\t * differently when keys are deleted and re-inserted. So `insertBefore` can't be implemented by temporarily\n\t\t\t * deleting properties which is necessary to insert at arbitrary positions.\n\t\t\t *\n\t\t\t * To solve this problem, `insertBefore` doesn't actually insert the given tokens into the target object.\n\t\t\t * Instead, it will create a new object and replace all references to the target object with the new one. This\n\t\t\t * can be done without temporarily deleting properties, so the iteration order is well-defined.\n\t\t\t *\n\t\t\t * However, only references that can be reached from `Prism.languages` or `insert` will be replaced. I.e. if\n\t\t\t * you hold the target object in a variable, then the value of the variable will not change.\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * var oldMarkup = Prism.languages.markup;\n\t\t\t * var newMarkup = Prism.languages.insertBefore('markup', 'comment', { ... });\n\t\t\t *\n\t\t\t * assert(oldMarkup !== Prism.languages.markup);\n\t\t\t * assert(newMarkup === Prism.languages.markup);\n\t\t\t * ```\n\t\t\t *\n\t\t\t * @param {string} inside The property of `root` (e.g. a language id in `Prism.languages`) that contains the\n\t\t\t * object to be modified.\n\t\t\t * @param {string} before The key to insert before.\n\t\t\t * @param {Grammar} insert An object containing the key-value pairs to be inserted.\n\t\t\t * @param {Object<string, any>} [root] The object containing `inside`, i.e. the object that contains the\n\t\t\t * object to be modified.\n\t\t\t *\n\t\t\t * Defaults to `Prism.languages`.\n\t\t\t * @returns {Grammar} The new grammar object.\n\t\t\t * @public\n\t\t\t */\n\t\t\tinsertBefore: function (inside, before, insert, root) {\n\t\t\t\troot = root || /** @type {any} */ (_.languages);\n\t\t\t\tvar grammar = root[inside];\n\t\t\t\t/** @type {Grammar} */\n\t\t\t\tvar ret = {};\n\n\t\t\t\tfor (var token in grammar) {\n\t\t\t\t\tif (grammar.hasOwnProperty(token)) {\n\n\t\t\t\t\t\tif (token == before) {\n\t\t\t\t\t\t\tfor (var newToken in insert) {\n\t\t\t\t\t\t\t\tif (insert.hasOwnProperty(newToken)) {\n\t\t\t\t\t\t\t\t\tret[newToken] = insert[newToken];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Do not insert token which also occur in insert. See #1525\n\t\t\t\t\t\tif (!insert.hasOwnProperty(token)) {\n\t\t\t\t\t\t\tret[token] = grammar[token];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar old = root[inside];\n\t\t\t\troot[inside] = ret;\n\n\t\t\t\t// Update references in other language definitions\n\t\t\t\t_.languages.DFS(_.languages, function (key, value) {\n\t\t\t\t\tif (value === old && key != inside) {\n\t\t\t\t\t\tthis[key] = ret;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn ret;\n\t\t\t},\n\n\t\t\t// Traverse a language definition with Depth First Search\n\t\t\tDFS: function DFS(o, callback, type, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar objId = _.util.objId;\n\n\t\t\t\tfor (var i in o) {\n\t\t\t\t\tif (o.hasOwnProperty(i)) {\n\t\t\t\t\t\tcallback.call(o, i, o[i], type || i);\n\n\t\t\t\t\t\tvar property = o[i];\n\t\t\t\t\t\tvar propertyType = _.util.type(property);\n\n\t\t\t\t\t\tif (propertyType === 'Object' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, null, visited);\n\t\t\t\t\t\t} else if (propertyType === 'Array' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, i, visited);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tplugins: {},\n\n\t\t/**\n\t\t * This is the most high-level function in Prism’s API.\n\t\t * It fetches all the elements that have a `.language-xxxx` class and then calls {@link Prism.highlightElement} on\n\t\t * each one of them.\n\t\t *\n\t\t * This is equivalent to `Prism.highlightAllUnder(document, async, callback)`.\n\t\t *\n\t\t * @param {boolean} [async=false] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @param {HighlightCallback} [callback] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAll: function (async, callback) {\n\t\t\t_.highlightAllUnder(document, async, callback);\n\t\t},\n\n\t\t/**\n\t\t * Fetches all the descendants of `container` that have a `.language-xxxx` class and then calls\n\t\t * {@link Prism.highlightElement} on each one of them.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-highlightall`\n\t\t * 2. `before-all-elements-highlight`\n\t\t * 3. All hooks of {@link Prism.highlightElement} for each element.\n\t\t *\n\t\t * @param {ParentNode} container The root element, whose descendants that have a `.language-xxxx` class will be highlighted.\n\t\t * @param {boolean} [async=false] Whether each element is to be highlighted asynchronously using Web Workers.\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked on each element after its highlighting is done.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAllUnder: function (container, async, callback) {\n\t\t\tvar env = {\n\t\t\t\tcallback: callback,\n\t\t\t\tcontainer: container,\n\t\t\t\tselector: 'code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'\n\t\t\t};\n\n\t\t\t_.hooks.run('before-highlightall', env);\n\n\t\t\tenv.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector));\n\n\t\t\t_.hooks.run('before-all-elements-highlight', env);\n\n\t\t\tfor (var i = 0, element; (element = env.elements[i++]);) {\n\t\t\t\t_.highlightElement(element, async === true, env.callback);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Highlights the code inside a single element.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-sanity-check`\n\t\t * 2. `before-highlight`\n\t\t * 3. All hooks of {@link Prism.highlight}. These hooks will be run by an asynchronous worker if `async` is `true`.\n\t\t * 4. `before-insert`\n\t\t * 5. `after-highlight`\n\t\t * 6. `complete`\n\t\t *\n\t\t * Some the above hooks will be skipped if the element doesn't contain any text or there is no grammar loaded for\n\t\t * the element's language.\n\t\t *\n\t\t * @param {Element} element The element containing the code.\n\t\t * It must have a class of `language-xxxx` to be processed, where `xxxx` is a valid language identifier.\n\t\t * @param {boolean} [async=false] Whether the element is to be highlighted asynchronously using Web Workers\n\t\t * to improve performance and avoid blocking the UI when highlighting very large chunks of code. This option is\n\t\t * [disabled by default](https://prismjs.com/faq.html#why-is-asynchronous-highlighting-disabled-by-default).\n\t\t *\n\t\t * Note: All language definitions required to highlight the code must be included in the main `prism.js` file for\n\t\t * asynchronous highlighting to work. You can build your own bundle on the\n\t\t * [Download page](https://prismjs.com/download.html).\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked after the highlighting is done.\n\t\t * Mostly useful when `async` is `true`, since in that case, the highlighting is done asynchronously.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightElement: function (element, async, callback) {\n\t\t\t// Find language\n\t\t\tvar language = _.util.getLanguage(element);\n\t\t\tvar grammar = _.languages[language];\n\n\t\t\t// Set language on the element, if not present\n\t\t\t_.util.setLanguage(element, language);\n\n\t\t\t// Set language on the parent, for styling\n\t\t\tvar parent = element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre') {\n\t\t\t\t_.util.setLanguage(parent, language);\n\t\t\t}\n\n\t\t\tvar code = element.textContent;\n\n\t\t\tvar env = {\n\t\t\t\telement: element,\n\t\t\t\tlanguage: language,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tcode: code\n\t\t\t};\n\n\t\t\tfunction insertHighlightedCode(highlightedCode) {\n\t\t\t\tenv.highlightedCode = highlightedCode;\n\n\t\t\t\t_.hooks.run('before-insert', env);\n\n\t\t\t\tenv.element.innerHTML = env.highlightedCode;\n\n\t\t\t\t_.hooks.run('after-highlight', env);\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t}\n\n\t\t\t_.hooks.run('before-sanity-check', env);\n\n\t\t\t// plugins may change/add the parent/element\n\t\t\tparent = env.element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre' && !parent.hasAttribute('tabindex')) {\n\t\t\t\tparent.setAttribute('tabindex', '0');\n\t\t\t}\n\n\t\t\tif (!env.code) {\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_.hooks.run('before-highlight', env);\n\n\t\t\tif (!env.grammar) {\n\t\t\t\tinsertHighlightedCode(_.util.encode(env.code));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (async && _self.Worker) {\n\t\t\t\tvar worker = new Worker(_.filename);\n\n\t\t\t\tworker.onmessage = function (evt) {\n\t\t\t\t\tinsertHighlightedCode(evt.data);\n\t\t\t\t};\n\n\t\t\t\tworker.postMessage(JSON.stringify({\n\t\t\t\t\tlanguage: env.language,\n\t\t\t\t\tcode: env.code,\n\t\t\t\t\timmediateClose: true\n\t\t\t\t}));\n\t\t\t} else {\n\t\t\t\tinsertHighlightedCode(_.highlight(env.code, env.grammar, env.language));\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Low-level function, only use if you know what you’re doing. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns a string with the HTML produced.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-tokenize`\n\t\t * 2. `after-tokenize`\n\t\t * 3. `wrap`: On each {@link Token}.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @param {string} language The name of the language definition passed to `grammar`.\n\t\t * @returns {string} The highlighted HTML.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * Prism.highlight('var foo = true;', Prism.languages.javascript, 'javascript');\n\t\t */\n\t\thighlight: function (text, grammar, language) {\n\t\t\tvar env = {\n\t\t\t\tcode: text,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tlanguage: language\n\t\t\t};\n\t\t\t_.hooks.run('before-tokenize', env);\n\t\t\tif (!env.grammar) {\n\t\t\t\tthrow new Error('The language \"' + env.language + '\" has no grammar.');\n\t\t\t}\n\t\t\tenv.tokens = _.tokenize(env.code, env.grammar);\n\t\t\t_.hooks.run('after-tokenize', env);\n\t\t\treturn Token.stringify(_.util.encode(env.tokens), env.language);\n\t\t},\n\n\t\t/**\n\t\t * This is the heart of Prism, and the most low-level function you can use. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns an array with the tokenized code.\n\t\t *\n\t\t * When the language definition includes nested tokens, the function is called recursively on each of these tokens.\n\t\t *\n\t\t * This method could be useful in other contexts as well, as a very crude parser.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @returns {TokenStream} An array of strings and tokens, a token stream.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * let code = `var foo = 0;`;\n\t\t * let tokens = Prism.tokenize(code, Prism.languages.javascript);\n\t\t * tokens.forEach(token => {\n\t\t *     if (token instanceof Prism.Token && token.type === 'number') {\n\t\t *         console.log(`Found numeric literal: ${token.content}`);\n\t\t *     }\n\t\t * });\n\t\t */\n\t\ttokenize: function (text, grammar) {\n\t\t\tvar rest = grammar.rest;\n\t\t\tif (rest) {\n\t\t\t\tfor (var token in rest) {\n\t\t\t\t\tgrammar[token] = rest[token];\n\t\t\t\t}\n\n\t\t\t\tdelete grammar.rest;\n\t\t\t}\n\n\t\t\tvar tokenList = new LinkedList();\n\t\t\taddAfter(tokenList, tokenList.head, text);\n\n\t\t\tmatchGrammar(text, tokenList, grammar, tokenList.head, 0);\n\n\t\t\treturn toArray(tokenList);\n\t\t},\n\n\t\t/**\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thooks: {\n\t\t\tall: {},\n\n\t\t\t/**\n\t\t\t * Adds the given callback to the list of callbacks for the given hook.\n\t\t\t *\n\t\t\t * The callback will be invoked when the hook it is registered for is run.\n\t\t\t * Hooks are usually directly run by a highlight function but you can also run hooks yourself.\n\t\t\t *\n\t\t\t * One callback function can be registered to multiple hooks and the same hook multiple times.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {HookCallback} callback The callback function which is given environment variables.\n\t\t\t * @public\n\t\t\t */\n\t\t\tadd: function (name, callback) {\n\t\t\t\tvar hooks = _.hooks.all;\n\n\t\t\t\thooks[name] = hooks[name] || [];\n\n\t\t\t\thooks[name].push(callback);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Runs a hook invoking all registered callbacks with the given environment variables.\n\t\t\t *\n\t\t\t * Callbacks will be invoked synchronously and in the order in which they were registered.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.\n\t\t\t * @public\n\t\t\t */\n\t\t\trun: function (name, env) {\n\t\t\t\tvar callbacks = _.hooks.all[name];\n\n\t\t\t\tif (!callbacks || !callbacks.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0, callback; (callback = callbacks[i++]);) {\n\t\t\t\t\tcallback(env);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tToken: Token\n\t};\n\t_self.Prism = _;\n\n\n\t// Typescript note:\n\t// The following can be used to import the Token type in JSDoc:\n\t//\n\t//   @typedef {InstanceType<import(\"./prism-core\")[\"Token\"]>} Token\n\n\t/**\n\t * Creates a new token.\n\t *\n\t * @param {string} type See {@link Token#type type}\n\t * @param {string | TokenStream} content See {@link Token#content content}\n\t * @param {string|string[]} [alias] The alias(es) of the token.\n\t * @param {string} [matchedStr=\"\"] A copy of the full string this token was created from.\n\t * @class\n\t * @global\n\t * @public\n\t */\n\tfunction Token(type, content, alias, matchedStr) {\n\t\t/**\n\t\t * The type of the token.\n\t\t *\n\t\t * This is usually the key of a pattern in a {@link Grammar}.\n\t\t *\n\t\t * @type {string}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.type = type;\n\t\t/**\n\t\t * The strings or tokens contained by this token.\n\t\t *\n\t\t * This will be a token stream if the pattern matched also defined an `inside` grammar.\n\t\t *\n\t\t * @type {string | TokenStream}\n\t\t * @public\n\t\t */\n\t\tthis.content = content;\n\t\t/**\n\t\t * The alias(es) of the token.\n\t\t *\n\t\t * @type {string|string[]}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.alias = alias;\n\t\t// Copy of the full string this token was created from\n\t\tthis.length = (matchedStr || '').length | 0;\n\t}\n\n\t/**\n\t * A token stream is an array of strings and {@link Token Token} objects.\n\t *\n\t * Token streams have to fulfill a few properties that are assumed by most functions (mostly internal ones) that process\n\t * them.\n\t *\n\t * 1. No adjacent strings.\n\t * 2. No empty strings.\n\t *\n\t *    The only exception here is the token stream that only contains the empty string and nothing else.\n\t *\n\t * @typedef {Array<string | Token>} TokenStream\n\t * @global\n\t * @public\n\t */\n\n\t/**\n\t * Converts the given token or token stream to an HTML representation.\n\t *\n\t * The following hooks will be run:\n\t * 1. `wrap`: On each {@link Token}.\n\t *\n\t * @param {string | Token | TokenStream} o The token or token stream to be converted.\n\t * @param {string} language The name of current language.\n\t * @returns {string} The HTML representation of the token or token stream.\n\t * @memberof Token\n\t * @static\n\t */\n\tToken.stringify = function stringify(o, language) {\n\t\tif (typeof o == 'string') {\n\t\t\treturn o;\n\t\t}\n\t\tif (Array.isArray(o)) {\n\t\t\tvar s = '';\n\t\t\to.forEach(function (e) {\n\t\t\t\ts += stringify(e, language);\n\t\t\t});\n\t\t\treturn s;\n\t\t}\n\n\t\tvar env = {\n\t\t\ttype: o.type,\n\t\t\tcontent: stringify(o.content, language),\n\t\t\ttag: 'span',\n\t\t\tclasses: ['token', o.type],\n\t\t\tattributes: {},\n\t\t\tlanguage: language\n\t\t};\n\n\t\tvar aliases = o.alias;\n\t\tif (aliases) {\n\t\t\tif (Array.isArray(aliases)) {\n\t\t\t\tArray.prototype.push.apply(env.classes, aliases);\n\t\t\t} else {\n\t\t\t\tenv.classes.push(aliases);\n\t\t\t}\n\t\t}\n\n\t\t_.hooks.run('wrap', env);\n\n\t\tvar attributes = '';\n\t\tfor (var name in env.attributes) {\n\t\t\tattributes += ' ' + name + '=\"' + (env.attributes[name] || '').replace(/\"/g, '&quot;') + '\"';\n\t\t}\n\n\t\treturn '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\"' + attributes + '>' + env.content + '</' + env.tag + '>';\n\t};\n\n\t/**\n\t * @param {RegExp} pattern\n\t * @param {number} pos\n\t * @param {string} text\n\t * @param {boolean} lookbehind\n\t * @returns {RegExpExecArray | null}\n\t */\n\tfunction matchPattern(pattern, pos, text, lookbehind) {\n\t\tpattern.lastIndex = pos;\n\t\tvar match = pattern.exec(text);\n\t\tif (match && lookbehind && match[1]) {\n\t\t\t// change the match to remove the text matched by the Prism lookbehind group\n\t\t\tvar lookbehindLength = match[1].length;\n\t\t\tmatch.index += lookbehindLength;\n\t\t\tmatch[0] = match[0].slice(lookbehindLength);\n\t\t}\n\t\treturn match;\n\t}\n\n\t/**\n\t * @param {string} text\n\t * @param {LinkedList<string | Token>} tokenList\n\t * @param {any} grammar\n\t * @param {LinkedListNode<string | Token>} startNode\n\t * @param {number} startPos\n\t * @param {RematchOptions} [rematch]\n\t * @returns {void}\n\t * @private\n\t *\n\t * @typedef RematchOptions\n\t * @property {string} cause\n\t * @property {number} reach\n\t */\n\tfunction matchGrammar(text, tokenList, grammar, startNode, startPos, rematch) {\n\t\tfor (var token in grammar) {\n\t\t\tif (!grammar.hasOwnProperty(token) || !grammar[token]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar patterns = grammar[token];\n\t\t\tpatterns = Array.isArray(patterns) ? patterns : [patterns];\n\n\t\t\tfor (var j = 0; j < patterns.length; ++j) {\n\t\t\t\tif (rematch && rematch.cause == token + ',' + j) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar patternObj = patterns[j];\n\t\t\t\tvar inside = patternObj.inside;\n\t\t\t\tvar lookbehind = !!patternObj.lookbehind;\n\t\t\t\tvar greedy = !!patternObj.greedy;\n\t\t\t\tvar alias = patternObj.alias;\n\n\t\t\t\tif (greedy && !patternObj.pattern.global) {\n\t\t\t\t\t// Without the global flag, lastIndex won't work\n\t\t\t\t\tvar flags = patternObj.pattern.toString().match(/[imsuy]*$/)[0];\n\t\t\t\t\tpatternObj.pattern = RegExp(patternObj.pattern.source, flags + 'g');\n\t\t\t\t}\n\n\t\t\t\t/** @type {RegExp} */\n\t\t\t\tvar pattern = patternObj.pattern || patternObj;\n\n\t\t\t\tfor ( // iterate the token list and keep track of the current token/string position\n\t\t\t\t\tvar currentNode = startNode.next, pos = startPos;\n\t\t\t\t\tcurrentNode !== tokenList.tail;\n\t\t\t\t\tpos += currentNode.value.length, currentNode = currentNode.next\n\t\t\t\t) {\n\n\t\t\t\t\tif (rematch && pos >= rematch.reach) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar str = currentNode.value;\n\n\t\t\t\t\tif (tokenList.length > text.length) {\n\t\t\t\t\t\t// Something went terribly wrong, ABORT, ABORT!\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (str instanceof Token) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeCount = 1; // this is the to parameter of removeBetween\n\t\t\t\t\tvar match;\n\n\t\t\t\t\tif (greedy) {\n\t\t\t\t\t\tmatch = matchPattern(pattern, pos, text, lookbehind);\n\t\t\t\t\t\tif (!match || match.index >= text.length) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar from = match.index;\n\t\t\t\t\t\tvar to = match.index + match[0].length;\n\t\t\t\t\t\tvar p = pos;\n\n\t\t\t\t\t\t// find the node that contains the match\n\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\twhile (from >= p) {\n\t\t\t\t\t\t\tcurrentNode = currentNode.next;\n\t\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// adjust pos (and p)\n\t\t\t\t\t\tp -= currentNode.value.length;\n\t\t\t\t\t\tpos = p;\n\n\t\t\t\t\t\t// the current node is a Token, then the match starts inside another Token, which is invalid\n\t\t\t\t\t\tif (currentNode.value instanceof Token) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// find the last node which is affected by this match\n\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\tvar k = currentNode;\n\t\t\t\t\t\t\tk !== tokenList.tail && (p < to || typeof k.value === 'string');\n\t\t\t\t\t\t\tk = k.next\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tremoveCount++;\n\t\t\t\t\t\t\tp += k.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tremoveCount--;\n\n\t\t\t\t\t\t// replace with the new match\n\t\t\t\t\t\tstr = text.slice(pos, p);\n\t\t\t\t\t\tmatch.index -= pos;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmatch = matchPattern(pattern, 0, str, lookbehind);\n\t\t\t\t\t\tif (!match) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// eslint-disable-next-line no-redeclare\n\t\t\t\t\tvar from = match.index;\n\t\t\t\t\tvar matchStr = match[0];\n\t\t\t\t\tvar before = str.slice(0, from);\n\t\t\t\t\tvar after = str.slice(from + matchStr.length);\n\n\t\t\t\t\tvar reach = pos + str.length;\n\t\t\t\t\tif (rematch && reach > rematch.reach) {\n\t\t\t\t\t\trematch.reach = reach;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeFrom = currentNode.prev;\n\n\t\t\t\t\tif (before) {\n\t\t\t\t\t\tremoveFrom = addAfter(tokenList, removeFrom, before);\n\t\t\t\t\t\tpos += before.length;\n\t\t\t\t\t}\n\n\t\t\t\t\tremoveRange(tokenList, removeFrom, removeCount);\n\n\t\t\t\t\tvar wrapped = new Token(token, inside ? _.tokenize(matchStr, inside) : matchStr, alias, matchStr);\n\t\t\t\t\tcurrentNode = addAfter(tokenList, removeFrom, wrapped);\n\n\t\t\t\t\tif (after) {\n\t\t\t\t\t\taddAfter(tokenList, currentNode, after);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (removeCount > 1) {\n\t\t\t\t\t\t// at least one Token object was removed, so we have to do some rematching\n\t\t\t\t\t\t// this can only happen if the current pattern is greedy\n\n\t\t\t\t\t\t/** @type {RematchOptions} */\n\t\t\t\t\t\tvar nestedRematch = {\n\t\t\t\t\t\t\tcause: token + ',' + j,\n\t\t\t\t\t\t\treach: reach\n\t\t\t\t\t\t};\n\t\t\t\t\t\tmatchGrammar(text, tokenList, grammar, currentNode.prev, pos, nestedRematch);\n\n\t\t\t\t\t\t// the reach might have been extended because of the rematching\n\t\t\t\t\t\tif (rematch && nestedRematch.reach > rematch.reach) {\n\t\t\t\t\t\t\trematch.reach = nestedRematch.reach;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @typedef LinkedListNode\n\t * @property {T} value\n\t * @property {LinkedListNode<T> | null} prev The previous node.\n\t * @property {LinkedListNode<T> | null} next The next node.\n\t * @template T\n\t * @private\n\t */\n\n\t/**\n\t * @template T\n\t * @private\n\t */\n\tfunction LinkedList() {\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar head = { value: null, prev: null, next: null };\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar tail = { value: null, prev: head, next: null };\n\t\thead.next = tail;\n\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.head = head;\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.tail = tail;\n\t\tthis.length = 0;\n\t}\n\n\t/**\n\t * Adds a new node with the given value to the list.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {T} value\n\t * @returns {LinkedListNode<T>} The added node.\n\t * @template T\n\t */\n\tfunction addAfter(list, node, value) {\n\t\t// assumes that node != list.tail && values.length >= 0\n\t\tvar next = node.next;\n\n\t\tvar newNode = { value: value, prev: node, next: next };\n\t\tnode.next = newNode;\n\t\tnext.prev = newNode;\n\t\tlist.length++;\n\n\t\treturn newNode;\n\t}\n\t/**\n\t * Removes `count` nodes after the given node. The given node will not be removed.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {number} count\n\t * @template T\n\t */\n\tfunction removeRange(list, node, count) {\n\t\tvar next = node.next;\n\t\tfor (var i = 0; i < count && next !== list.tail; i++) {\n\t\t\tnext = next.next;\n\t\t}\n\t\tnode.next = next;\n\t\tnext.prev = node;\n\t\tlist.length -= i;\n\t}\n\t/**\n\t * @param {LinkedList<T>} list\n\t * @returns {T[]}\n\t * @template T\n\t */\n\tfunction toArray(list) {\n\t\tvar array = [];\n\t\tvar node = list.head.next;\n\t\twhile (node !== list.tail) {\n\t\t\tarray.push(node.value);\n\t\t\tnode = node.next;\n\t\t}\n\t\treturn array;\n\t}\n\n\n\tif (!_self.document) {\n\t\tif (!_self.addEventListener) {\n\t\t\t// in Node.js\n\t\t\treturn _;\n\t\t}\n\n\t\tif (!_.disableWorkerMessageHandler) {\n\t\t\t// In worker\n\t\t\t_self.addEventListener('message', function (evt) {\n\t\t\t\tvar message = JSON.parse(evt.data);\n\t\t\t\tvar lang = message.language;\n\t\t\t\tvar code = message.code;\n\t\t\t\tvar immediateClose = message.immediateClose;\n\n\t\t\t\t_self.postMessage(_.highlight(code, _.languages[lang], lang));\n\t\t\t\tif (immediateClose) {\n\t\t\t\t\t_self.close();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t}\n\n\t\treturn _;\n\t}\n\n\t// Get current script and highlight\n\tvar script = _.util.currentScript();\n\n\tif (script) {\n\t\t_.filename = script.src;\n\n\t\tif (script.hasAttribute('data-manual')) {\n\t\t\t_.manual = true;\n\t\t}\n\t}\n\n\tfunction highlightAutomaticallyCallback() {\n\t\tif (!_.manual) {\n\t\t\t_.highlightAll();\n\t\t}\n\t}\n\n\tif (!_.manual) {\n\t\t// If the document state is \"loading\", then we'll use DOMContentLoaded.\n\t\t// If the document state is \"interactive\" and the prism.js script is deferred, then we'll also use the\n\t\t// DOMContentLoaded event because there might be some plugins or languages which have also been deferred and they\n\t\t// might take longer one animation frame to execute which can create a race condition where only some plugins have\n\t\t// been loaded when Prism.highlightAll() is executed, depending on how fast resources are loaded.\n\t\t// See https://github.com/PrismJS/prism/issues/2102\n\t\tvar readyState = document.readyState;\n\t\tif (readyState === 'loading' || readyState === 'interactive' && script && script.defer) {\n\t\t\tdocument.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback);\n\t\t} else {\n\t\t\tif (window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(highlightAutomaticallyCallback);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(highlightAutomaticallyCallback, 16);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn _;\n\n}(_self));\n\nif (typeof module !== 'undefined' && module.exports) {\n\tmodule.exports = Prism;\n}\n\n// hack for components to work correctly in node.js\nif (typeof global !== 'undefined') {\n\tglobal.Prism = Prism;\n}\n\n// some additional documentation/types\n\n/**\n * The expansion of a simple `RegExp` literal to support additional properties.\n *\n * @typedef GrammarToken\n * @property {RegExp} pattern The regular expression of the token.\n * @property {boolean} [lookbehind=false] If `true`, then the first capturing group of `pattern` will (effectively)\n * behave as a lookbehind group meaning that the captured text will not be part of the matched text of the new token.\n * @property {boolean} [greedy=false] Whether the token is greedy.\n * @property {string|string[]} [alias] An optional alias or list of aliases.\n * @property {Grammar} [inside] The nested grammar of this token.\n *\n * The `inside` grammar will be used to tokenize the text value of each token of this kind.\n *\n * This can be used to make nested and even recursive language definitions.\n *\n * Note: This can cause infinite recursion. Be careful when you embed different languages or even the same language into\n * each another.\n * @global\n * @public\n */\n\n/**\n * @typedef Grammar\n * @type {Object<string, RegExp | GrammarToken | Array<RegExp | GrammarToken>>}\n * @property {Grammar} [rest] An optional grammar object that will be appended to this grammar.\n * @global\n * @public\n */\n\n/**\n * A function which will invoked after an element was successfully highlighted.\n *\n * @callback HighlightCallback\n * @param {Element} element The element successfully highlighted.\n * @returns {void}\n * @global\n * @public\n */\n\n/**\n * @callback HookCallback\n * @param {Object<string, any>} env The environment variables of the hook.\n * @returns {void}\n * @global\n * @public\n */\n\n\n/* **********************************************\n     Begin prism-markup.js\n********************************************** */\n\nPrism.languages.markup = {\n\t'comment': {\n\t\tpattern: /<!--(?:(?!<!--)[\\s\\S])*?-->/,\n\t\tgreedy: true\n\t},\n\t'prolog': {\n\t\tpattern: /<\\?[\\s\\S]+?\\?>/,\n\t\tgreedy: true\n\t},\n\t'doctype': {\n\t\t// https://www.w3.org/TR/xml/#NT-doctypedecl\n\t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\\]\\s*)?>/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'internal-subset': {\n\t\t\t\tpattern: /(^[^\\[]*\\[)[\\s\\S]+(?=\\]>$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t'string': {\n\t\t\t\tpattern: /\"[^\"]*\"|'[^']*'/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t'punctuation': /^<!|>$|[[\\]]/,\n\t\t\t'doctype-tag': /^DOCTYPE/i,\n\t\t\t'name': /[^\\s<>'\"]+/\n\t\t}\n\t},\n\t'cdata': {\n\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\tgreedy: true\n\t},\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'special-attr': [],\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': [\n\t\t{\n\t\t\tpattern: /&[\\da-z]{1,8};/i,\n\t\t\talias: 'named-entity'\n\t\t},\n\t\t/&#x?[\\da-f]{1,8};/i\n\t]\n};\n\nPrism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n\tPrism.languages.markup['entity'];\nPrism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function (env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&amp;/, '&');\n\t}\n});\n\nObject.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n\t/**\n\t * Adds an inlined language to markup.\n\t *\n\t * An example of an inlined language is CSS with `<style>` tags.\n\t *\n\t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addInlined('style', 'css');\n\t */\n\tvalue: function addInlined(tagName, lang) {\n\t\tvar includedCdataInside = {};\n\t\tincludedCdataInside['language-' + lang] = {\n\t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n\t\tvar inside = {\n\t\t\t'included-cdata': {\n\t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\t\t\tinside: includedCdataInside\n\t\t\t}\n\t\t};\n\t\tinside['language-' + lang] = {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\n\t\tvar def = {};\n\t\tdef[tagName] = {\n\t\t\tpattern: RegExp(/(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: inside\n\t\t};\n\n\t\tPrism.languages.insertBefore('markup', 'cdata', def);\n\t}\n});\nObject.defineProperty(Prism.languages.markup.tag, 'addAttribute', {\n\t/**\n\t * Adds an pattern to highlight languages embedded in HTML attributes.\n\t *\n\t * An example of an inlined language is CSS with `style` attributes.\n\t *\n\t * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addAttribute('style', 'css');\n\t */\n\tvalue: function (attrName, lang) {\n\t\tPrism.languages.markup.tag.inside['special-attr'].push({\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[\"'\\s])/.source + '(?:' + attrName + ')' + /\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))/.source,\n\t\t\t\t'i'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attr-name': /^[^\\s=]+/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /=[\\s\\S]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'value': {\n\t\t\t\t\t\t\tpattern: /(^=\\s*([\"']|(?![\"'])))\\S[\\s\\S]*(?=\\2$)/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: [lang, 'language-' + lang],\n\t\t\t\t\t\t\tinside: Prism.languages[lang]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/\"|'/\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\nPrism.languages.xml = Prism.languages.extend('markup', {});\nPrism.languages.ssml = Prism.languages.xml;\nPrism.languages.atom = Prism.languages.xml;\nPrism.languages.rss = Prism.languages.xml;\n\n\n/* **********************************************\n     Begin prism-css.js\n********************************************** */\n\n(function (Prism) {\n\n\tvar string = /(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/;\n\n\tPrism.languages.css = {\n\t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n\t\t'atrule': {\n\t\t\tpattern: RegExp('@[\\\\w-](?:' + /[^;{\\s\"']|\\s+(?!\\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\\s*\\{))/.source),\n\t\t\tinside: {\n\t\t\t\t'rule': /^@[\\w-]+/,\n\t\t\t\t'selector-function-argument': {\n\t\t\t\t\tpattern: /(\\bselector\\s*\\(\\s*(?![\\s)]))(?:[^()\\s]|\\s+(?![\\s)])|\\((?:[^()]|\\([^()]*\\))*\\))+(?=\\s*\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t'url': {\n\t\t\t// https://drafts.csswg.org/css-values-3/#urls\n\t\t\tpattern: RegExp('\\\\burl\\\\((?:' + string.source + '|' + /(?:[^\\\\\\r\\n()\"']|\\\\[\\s\\S])*/.source + ')\\\\)', 'i'),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^url/i,\n\t\t\t\t'punctuation': /^\\(|\\)$/,\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: RegExp('^' + string.source + '$'),\n\t\t\t\t\talias: 'url'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'selector': {\n\t\t\tpattern: RegExp('(^|[{}\\\\s])[^{}\\\\s](?:[^{};\"\\'\\\\s]|\\\\s+(?![\\\\s{])|' + string.source + ')*(?=\\\\s*\\\\{)'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: string,\n\t\t\tgreedy: true\n\t\t},\n\t\t'property': {\n\t\t\tpattern: /(^|[^-\\w\\xA0-\\uFFFF])(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*(?=\\s*:)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'important': /!important\\b/i,\n\t\t'function': {\n\t\t\tpattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\\()/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[(){};:,]/\n\t};\n\n\tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n\tvar markup = Prism.languages.markup;\n\tif (markup) {\n\t\tmarkup.tag.addInlined('style', 'css');\n\t\tmarkup.tag.addAttribute('style', 'css');\n\t}\n\n}(Prism));\n\n\n/* **********************************************\n     Begin prism-clike.js\n********************************************** */\n\nPrism.languages.clike = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|trait)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /[.\\\\]/\n\t\t}\n\t},\n\t'keyword': /\\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'function': /\\b\\w+(?=\\()/,\n\t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n\t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\n\n/* **********************************************\n     Begin prism-javascript.js\n********************************************** */\n\nPrism.languages.javascript = Prism.languages.extend('clike', {\n\t'class-name': [\n\t\tPrism.languages.clike['class-name'],\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$A-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\.(?:constructor|prototype))/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /((?:^|\\})\\s*)catch\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|assert(?=\\s*\\{)|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\\s*(?:\\{|$))|for|from(?=\\s*(?:['\"]|$))|function|(?:get|set)(?=\\s*(?:[#\\[$\\w\\xA0-\\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t],\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n\t'number': {\n\t\tpattern: RegExp(\n\t\t\t/(^|[^\\w$])/.source +\n\t\t\t'(?:' +\n\t\t\t(\n\t\t\t\t// constant\n\t\t\t\t/NaN|Infinity/.source +\n\t\t\t\t'|' +\n\t\t\t\t// binary integer\n\t\t\t\t/0[bB][01]+(?:_[01]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// octal integer\n\t\t\t\t/0[oO][0-7]+(?:_[0-7]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// hexadecimal integer\n\t\t\t\t/0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal bigint\n\t\t\t\t/\\d+(?:_\\d+)*n/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal number (integer or float) but no bigint\n\t\t\t\t/(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?/.source\n\t\t\t) +\n\t\t\t')' +\n\t\t\t/(?![\\w$])/.source\n\t\t),\n\t\tlookbehind: true\n\t},\n\t'operator': /--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/\n});\n\nPrism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|extends|implements|instanceof|interface|new)\\s+)[\\w.\\\\]+/;\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: RegExp(\n\t\t\t// lookbehind\n\t\t\t// eslint-disable-next-line regexp/no-dupe-characters-character-class\n\t\t\t/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/.source +\n\t\t\t// Regex pattern:\n\t\t\t// There are 2 regex patterns here. The RegExp set notation proposal added support for nested character\n\t\t\t// classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible\n\t\t\t// with the only syntax, so we have to define 2 different regex patterns.\n\t\t\t/\\//.source +\n\t\t\t'(?:' +\n\t\t\t/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}/.source +\n\t\t\t'|' +\n\t\t\t// `v` flag syntax. This supports 3 levels of nested character classes.\n\t\t\t/(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source +\n\t\t\t')' +\n\t\t\t// lookahead\n\t\t\t/(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/.source\n\t\t),\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'regex-source': {\n\t\t\t\tpattern: /^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'language-regex',\n\t\t\t\tinside: Prism.languages.regex\n\t\t\t},\n\t\t\t'regex-delimiter': /^\\/|\\/$/,\n\t\t\t'regex-flags': /^[a-z]+$/,\n\t\t}\n\t},\n\t// This must be declared before keyword because we use \"function\" inside the look-forward\n\t'function-variable': {\n\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,\n\t\talias: 'function'\n\t},\n\t'parameter': [\n\t\t{\n\t\t\tpattern: /(function(?:\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)?\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\))/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*=>)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*\\{)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t}\n\t],\n\t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'hashbang': {\n\t\tpattern: /^#!.*/,\n\t\tgreedy: true,\n\t\talias: 'comment'\n\t},\n\t'template-string': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'template-punctuation': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'string-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'operator', {\n\t'literal-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.markup.tag.addInlined('script', 'javascript');\n\n\t// add attribute support for all DOM events.\n\t// https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events\n\tPrism.languages.markup.tag.addAttribute(\n\t\t/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,\n\t\t'javascript'\n\t);\n}\n\nPrism.languages.js = Prism.languages.javascript;\n\n\n/* **********************************************\n     Begin prism-file-highlight.js\n********************************************** */\n\n(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\t// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\n\tif (!Element.prototype.matches) {\n\t\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\t}\n\n\tvar LOADING_MESSAGE = 'Loading…';\n\tvar FAILURE_MESSAGE = function (status, message) {\n\t\treturn '✖ Error ' + status + ' while fetching file: ' + message;\n\t};\n\tvar FAILURE_EMPTY_MESSAGE = '✖ Error: File does not exist or is empty';\n\n\tvar EXTENSIONS = {\n\t\t'js': 'javascript',\n\t\t'py': 'python',\n\t\t'rb': 'ruby',\n\t\t'ps1': 'powershell',\n\t\t'psm1': 'powershell',\n\t\t'sh': 'bash',\n\t\t'bat': 'batch',\n\t\t'h': 'c',\n\t\t'tex': 'latex'\n\t};\n\n\tvar STATUS_ATTR = 'data-src-status';\n\tvar STATUS_LOADING = 'loading';\n\tvar STATUS_LOADED = 'loaded';\n\tvar STATUS_FAILED = 'failed';\n\n\tvar SELECTOR = 'pre[data-src]:not([' + STATUS_ATTR + '=\"' + STATUS_LOADED + '\"])'\n\t\t+ ':not([' + STATUS_ATTR + '=\"' + STATUS_LOADING + '\"])';\n\n\t/**\n\t * Loads the given file.\n\t *\n\t * @param {string} src The URL or path of the source file to load.\n\t * @param {(result: string) => void} success\n\t * @param {(reason: string) => void} error\n\t */\n\tfunction loadFile(src, success, error) {\n\t\tvar xhr = new XMLHttpRequest();\n\t\txhr.open('GET', src, true);\n\t\txhr.onreadystatechange = function () {\n\t\t\tif (xhr.readyState == 4) {\n\t\t\t\tif (xhr.status < 400 && xhr.responseText) {\n\t\t\t\t\tsuccess(xhr.responseText);\n\t\t\t\t} else {\n\t\t\t\t\tif (xhr.status >= 400) {\n\t\t\t\t\t\terror(FAILURE_MESSAGE(xhr.status, xhr.statusText));\n\t\t\t\t\t} else {\n\t\t\t\t\t\terror(FAILURE_EMPTY_MESSAGE);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\txhr.send(null);\n\t}\n\n\t/**\n\t * Parses the given range.\n\t *\n\t * This returns a range with inclusive ends.\n\t *\n\t * @param {string | null | undefined} range\n\t * @returns {[number, number | undefined] | undefined}\n\t */\n\tfunction parseRange(range) {\n\t\tvar m = /^\\s*(\\d+)\\s*(?:(,)\\s*(?:(\\d+)\\s*)?)?$/.exec(range || '');\n\t\tif (m) {\n\t\t\tvar start = Number(m[1]);\n\t\t\tvar comma = m[2];\n\t\t\tvar end = m[3];\n\n\t\t\tif (!comma) {\n\t\t\t\treturn [start, start];\n\t\t\t}\n\t\t\tif (!end) {\n\t\t\t\treturn [start, undefined];\n\t\t\t}\n\t\t\treturn [start, Number(end)];\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tPrism.hooks.add('before-highlightall', function (env) {\n\t\tenv.selector += ', ' + SELECTOR;\n\t});\n\n\tPrism.hooks.add('before-sanity-check', function (env) {\n\t\tvar pre = /** @type {HTMLPreElement} */ (env.element);\n\t\tif (pre.matches(SELECTOR)) {\n\t\t\tenv.code = ''; // fast-path the whole thing and go to complete\n\n\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADING); // mark as loading\n\n\t\t\t// add code element with loading message\n\t\t\tvar code = pre.appendChild(document.createElement('CODE'));\n\t\t\tcode.textContent = LOADING_MESSAGE;\n\n\t\t\tvar src = pre.getAttribute('data-src');\n\n\t\t\tvar language = env.language;\n\t\t\tif (language === 'none') {\n\t\t\t\t// the language might be 'none' because there is no language set;\n\t\t\t\t// in this case, we want to use the extension as the language\n\t\t\t\tvar extension = (/\\.(\\w+)$/.exec(src) || [, 'none'])[1];\n\t\t\t\tlanguage = EXTENSIONS[extension] || extension;\n\t\t\t}\n\n\t\t\t// set language classes\n\t\t\tPrism.util.setLanguage(code, language);\n\t\t\tPrism.util.setLanguage(pre, language);\n\n\t\t\t// preload the language\n\t\t\tvar autoloader = Prism.plugins.autoloader;\n\t\t\tif (autoloader) {\n\t\t\t\tautoloader.loadLanguages(language);\n\t\t\t}\n\n\t\t\t// load file\n\t\t\tloadFile(\n\t\t\t\tsrc,\n\t\t\t\tfunction (text) {\n\t\t\t\t\t// mark as loaded\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADED);\n\n\t\t\t\t\t// handle data-range\n\t\t\t\t\tvar range = parseRange(pre.getAttribute('data-range'));\n\t\t\t\t\tif (range) {\n\t\t\t\t\t\tvar lines = text.split(/\\r\\n?|\\n/g);\n\n\t\t\t\t\t\t// the range is one-based and inclusive on both ends\n\t\t\t\t\t\tvar start = range[0];\n\t\t\t\t\t\tvar end = range[1] == null ? lines.length : range[1];\n\n\t\t\t\t\t\tif (start < 0) { start += lines.length; }\n\t\t\t\t\t\tstart = Math.max(0, Math.min(start - 1, lines.length));\n\t\t\t\t\t\tif (end < 0) { end += lines.length; }\n\t\t\t\t\t\tend = Math.max(0, Math.min(end, lines.length));\n\n\t\t\t\t\t\ttext = lines.slice(start, end).join('\\n');\n\n\t\t\t\t\t\t// add data-start for line numbers\n\t\t\t\t\t\tif (!pre.hasAttribute('data-start')) {\n\t\t\t\t\t\t\tpre.setAttribute('data-start', String(start + 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// highlight code\n\t\t\t\t\tcode.textContent = text;\n\t\t\t\t\tPrism.highlightElement(code);\n\t\t\t\t},\n\t\t\t\tfunction (error) {\n\t\t\t\t\t// mark as failed\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_FAILED);\n\n\t\t\t\t\tcode.textContent = error;\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t});\n\n\tPrism.plugins.fileHighlight = {\n\t\t/**\n\t\t * Executes the File Highlight plugin for all matching `pre` elements under the given container.\n\t\t *\n\t\t * Note: Elements which are already loaded or currently loading will not be touched by this method.\n\t\t *\n\t\t * @param {ParentNode} [container=document]\n\t\t */\n\t\thighlight: function highlight(container) {\n\t\t\tvar elements = (container || document).querySelectorAll(SELECTOR);\n\n\t\t\tfor (var i = 0, element; (element = elements[i++]);) {\n\t\t\t\tPrism.highlightElement(element);\n\t\t\t}\n\t\t}\n\t};\n\n\tvar logged = false;\n\t/** @deprecated Use `Prism.plugins.fileHighlight.highlight` instead. */\n\tPrism.fileHighlight = function () {\n\t\tif (!logged) {\n\t\t\tconsole.warn('Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead.');\n\t\t\tlogged = true;\n\t\t}\n\t\tPrism.plugins.fileHighlight.highlight.apply(this, arguments);\n\t};\n\n}());\n","Prism.languages.clike = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|trait)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /[.\\\\]/\n\t\t}\n\t},\n\t'keyword': /\\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'function': /\\b\\w+(?=\\()/,\n\t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n\t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n","Prism.languages.javascript = Prism.languages.extend('clike', {\n\t'class-name': [\n\t\tPrism.languages.clike['class-name'],\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$A-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\.(?:constructor|prototype))/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /((?:^|\\})\\s*)catch\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|assert(?=\\s*\\{)|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\\s*(?:\\{|$))|for|from(?=\\s*(?:['\"]|$))|function|(?:get|set)(?=\\s*(?:[#\\[$\\w\\xA0-\\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t],\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n\t'number': {\n\t\tpattern: RegExp(\n\t\t\t/(^|[^\\w$])/.source +\n\t\t\t'(?:' +\n\t\t\t(\n\t\t\t\t// constant\n\t\t\t\t/NaN|Infinity/.source +\n\t\t\t\t'|' +\n\t\t\t\t// binary integer\n\t\t\t\t/0[bB][01]+(?:_[01]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// octal integer\n\t\t\t\t/0[oO][0-7]+(?:_[0-7]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// hexadecimal integer\n\t\t\t\t/0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal bigint\n\t\t\t\t/\\d+(?:_\\d+)*n/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal number (integer or float) but no bigint\n\t\t\t\t/(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?/.source\n\t\t\t) +\n\t\t\t')' +\n\t\t\t/(?![\\w$])/.source\n\t\t),\n\t\tlookbehind: true\n\t},\n\t'operator': /--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/\n});\n\nPrism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|extends|implements|instanceof|interface|new)\\s+)[\\w.\\\\]+/;\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: RegExp(\n\t\t\t// lookbehind\n\t\t\t// eslint-disable-next-line regexp/no-dupe-characters-character-class\n\t\t\t/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/.source +\n\t\t\t// Regex pattern:\n\t\t\t// There are 2 regex patterns here. The RegExp set notation proposal added support for nested character\n\t\t\t// classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible\n\t\t\t// with the only syntax, so we have to define 2 different regex patterns.\n\t\t\t/\\//.source +\n\t\t\t'(?:' +\n\t\t\t/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}/.source +\n\t\t\t'|' +\n\t\t\t// `v` flag syntax. This supports 3 levels of nested character classes.\n\t\t\t/(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source +\n\t\t\t')' +\n\t\t\t// lookahead\n\t\t\t/(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/.source\n\t\t),\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'regex-source': {\n\t\t\t\tpattern: /^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'language-regex',\n\t\t\t\tinside: Prism.languages.regex\n\t\t\t},\n\t\t\t'regex-delimiter': /^\\/|\\/$/,\n\t\t\t'regex-flags': /^[a-z]+$/,\n\t\t}\n\t},\n\t// This must be declared before keyword because we use \"function\" inside the look-forward\n\t'function-variable': {\n\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,\n\t\talias: 'function'\n\t},\n\t'parameter': [\n\t\t{\n\t\t\tpattern: /(function(?:\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)?\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\))/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*=>)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*\\{)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t}\n\t],\n\t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'hashbang': {\n\t\tpattern: /^#!.*/,\n\t\tgreedy: true,\n\t\talias: 'comment'\n\t},\n\t'template-string': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'template-punctuation': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'string-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'operator', {\n\t'literal-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.markup.tag.addInlined('script', 'javascript');\n\n\t// add attribute support for all DOM events.\n\t// https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events\n\tPrism.languages.markup.tag.addAttribute(\n\t\t/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,\n\t\t'javascript'\n\t);\n}\n\nPrism.languages.js = Prism.languages.javascript;\n","Prism.languages.markup = {\n\t'comment': {\n\t\tpattern: /<!--(?:(?!<!--)[\\s\\S])*?-->/,\n\t\tgreedy: true\n\t},\n\t'prolog': {\n\t\tpattern: /<\\?[\\s\\S]+?\\?>/,\n\t\tgreedy: true\n\t},\n\t'doctype': {\n\t\t// https://www.w3.org/TR/xml/#NT-doctypedecl\n\t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\\]\\s*)?>/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'internal-subset': {\n\t\t\t\tpattern: /(^[^\\[]*\\[)[\\s\\S]+(?=\\]>$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t'string': {\n\t\t\t\tpattern: /\"[^\"]*\"|'[^']*'/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t'punctuation': /^<!|>$|[[\\]]/,\n\t\t\t'doctype-tag': /^DOCTYPE/i,\n\t\t\t'name': /[^\\s<>'\"]+/\n\t\t}\n\t},\n\t'cdata': {\n\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\tgreedy: true\n\t},\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'special-attr': [],\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': [\n\t\t{\n\t\t\tpattern: /&[\\da-z]{1,8};/i,\n\t\t\talias: 'named-entity'\n\t\t},\n\t\t/&#x?[\\da-f]{1,8};/i\n\t]\n};\n\nPrism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n\tPrism.languages.markup['entity'];\nPrism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function (env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&amp;/, '&');\n\t}\n});\n\nObject.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n\t/**\n\t * Adds an inlined language to markup.\n\t *\n\t * An example of an inlined language is CSS with `<style>` tags.\n\t *\n\t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addInlined('style', 'css');\n\t */\n\tvalue: function addInlined(tagName, lang) {\n\t\tvar includedCdataInside = {};\n\t\tincludedCdataInside['language-' + lang] = {\n\t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n\t\tvar inside = {\n\t\t\t'included-cdata': {\n\t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\t\t\tinside: includedCdataInside\n\t\t\t}\n\t\t};\n\t\tinside['language-' + lang] = {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\n\t\tvar def = {};\n\t\tdef[tagName] = {\n\t\t\tpattern: RegExp(/(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: inside\n\t\t};\n\n\t\tPrism.languages.insertBefore('markup', 'cdata', def);\n\t}\n});\nObject.defineProperty(Prism.languages.markup.tag, 'addAttribute', {\n\t/**\n\t * Adds an pattern to highlight languages embedded in HTML attributes.\n\t *\n\t * An example of an inlined language is CSS with `style` attributes.\n\t *\n\t * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addAttribute('style', 'css');\n\t */\n\tvalue: function (attrName, lang) {\n\t\tPrism.languages.markup.tag.inside['special-attr'].push({\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[\"'\\s])/.source + '(?:' + attrName + ')' + /\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))/.source,\n\t\t\t\t'i'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attr-name': /^[^\\s=]+/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /=[\\s\\S]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'value': {\n\t\t\t\t\t\t\tpattern: /(^=\\s*([\"']|(?![\"'])))\\S[\\s\\S]*(?=\\2$)/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: [lang, 'language-' + lang],\n\t\t\t\t\t\t\tinside: Prism.languages[lang]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/\"|'/\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\nPrism.languages.xml = Prism.languages.extend('markup', {});\nPrism.languages.ssml = Prism.languages.xml;\nPrism.languages.atom = Prism.languages.xml;\nPrism.languages.rss = Prism.languages.xml;\n","(function (Prism) {\n\n\t// Allow only one line break\n\tvar inner = /(?:\\\\.|[^\\\\\\n\\r]|(?:\\n|\\r\\n?)(?![\\r\\n]))/.source;\n\n\t/**\n\t * This function is intended for the creation of the bold or italic pattern.\n\t *\n\t * This also adds a lookbehind group to the given pattern to ensure that the pattern is not backslash-escaped.\n\t *\n\t * _Note:_ Keep in mind that this adds a capturing group.\n\t *\n\t * @param {string} pattern\n\t * @returns {RegExp}\n\t */\n\tfunction createInline(pattern) {\n\t\tpattern = pattern.replace(/<inner>/g, function () { return inner; });\n\t\treturn RegExp(/((?:^|[^\\\\])(?:\\\\{2})*)/.source + '(?:' + pattern + ')');\n\t}\n\n\n\tvar tableCell = /(?:\\\\.|``(?:[^`\\r\\n]|`(?!`))+``|`[^`\\r\\n]+`|[^\\\\|\\r\\n`])+/.source;\n\tvar tableRow = /\\|?__(?:\\|__)+\\|?(?:(?:\\n|\\r\\n?)|(?![\\s\\S]))/.source.replace(/__/g, function () { return tableCell; });\n\tvar tableLine = /\\|?[ \\t]*:?-{3,}:?[ \\t]*(?:\\|[ \\t]*:?-{3,}:?[ \\t]*)+\\|?(?:\\n|\\r\\n?)/.source;\n\n\n\tPrism.languages.markdown = Prism.languages.extend('markup', {});\n\tPrism.languages.insertBefore('markdown', 'prolog', {\n\t\t'front-matter-block': {\n\t\t\tpattern: /(^(?:\\s*[\\r\\n])?)---(?!.)[\\s\\S]*?[\\r\\n]---(?!.)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /^---|---$/,\n\t\t\t\t'front-matter': {\n\t\t\t\t\tpattern: /\\S+(?:\\s+\\S+)*/,\n\t\t\t\t\talias: ['yaml', 'language-yaml'],\n\t\t\t\t\tinside: Prism.languages.yaml\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'blockquote': {\n\t\t\t// > ...\n\t\t\tpattern: /^>(?:[\\t ]*>)*/m,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'table': {\n\t\t\tpattern: RegExp('^' + tableRow + tableLine + '(?:' + tableRow + ')*', 'm'),\n\t\t\tinside: {\n\t\t\t\t'table-data-rows': {\n\t\t\t\t\tpattern: RegExp('^(' + tableRow + tableLine + ')(?:' + tableRow + ')*$'),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'table-data': {\n\t\t\t\t\t\t\tpattern: RegExp(tableCell),\n\t\t\t\t\t\t\tinside: Prism.languages.markdown\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': /\\|/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'table-line': {\n\t\t\t\t\tpattern: RegExp('^(' + tableRow + ')' + tableLine + '$'),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': /\\||:?-{3,}:?/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'table-header-row': {\n\t\t\t\t\tpattern: RegExp('^' + tableRow + '$'),\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'table-header': {\n\t\t\t\t\t\t\tpattern: RegExp(tableCell),\n\t\t\t\t\t\t\talias: 'important',\n\t\t\t\t\t\t\tinside: Prism.languages.markdown\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': /\\|/\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'code': [\n\t\t\t{\n\t\t\t\t// Prefixed by 4 spaces or 1 tab and preceded by an empty line\n\t\t\t\tpattern: /((?:^|\\n)[ \\t]*\\n|(?:^|\\r\\n?)[ \\t]*\\r\\n?)(?: {4}|\\t).+(?:(?:\\n|\\r\\n?)(?: {4}|\\t).+)*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'keyword'\n\t\t\t},\n\t\t\t{\n\t\t\t\t// ```optional language\n\t\t\t\t// code block\n\t\t\t\t// ```\n\t\t\t\tpattern: /^```[\\s\\S]*?^```$/m,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'code-block': {\n\t\t\t\t\t\tpattern: /^(```.*(?:\\n|\\r\\n?))[\\s\\S]+?(?=(?:\\n|\\r\\n?)^```$)/m,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t},\n\t\t\t\t\t'code-language': {\n\t\t\t\t\t\tpattern: /^(```).+/,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t},\n\t\t\t\t\t'punctuation': /```/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'title': [\n\t\t\t{\n\t\t\t\t// title 1\n\t\t\t\t// =======\n\n\t\t\t\t// title 2\n\t\t\t\t// -------\n\t\t\t\tpattern: /\\S.*(?:\\n|\\r\\n?)(?:==+|--+)(?=[ \\t]*$)/m,\n\t\t\t\talias: 'important',\n\t\t\t\tinside: {\n\t\t\t\t\tpunctuation: /==+$|--+$/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t// # title 1\n\t\t\t\t// ###### title 6\n\t\t\t\tpattern: /(^\\s*)#.+/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'important',\n\t\t\t\tinside: {\n\t\t\t\t\tpunctuation: /^#+|#+$/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'hr': {\n\t\t\t// ***\n\t\t\t// ---\n\t\t\t// * * *\n\t\t\t// -----------\n\t\t\tpattern: /(^\\s*)([*-])(?:[\\t ]*\\2){2,}(?=\\s*$)/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'list': {\n\t\t\t// * item\n\t\t\t// + item\n\t\t\t// - item\n\t\t\t// 1. item\n\t\t\tpattern: /(^\\s*)(?:[*+-]|\\d+\\.)(?=[\\t ].)/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'url-reference': {\n\t\t\t// [id]: http://example.com \"Optional title\"\n\t\t\t// [id]: http://example.com 'Optional title'\n\t\t\t// [id]: http://example.com (Optional title)\n\t\t\t// [id]: <http://example.com> \"Optional title\"\n\t\t\tpattern: /!?\\[[^\\]]+\\]:[\\t ]+(?:\\S+|<(?:\\\\.|[^>\\\\])+>)(?:[\\t ]+(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\)))?/,\n\t\t\tinside: {\n\t\t\t\t'variable': {\n\t\t\t\t\tpattern: /^(!?\\[)[^\\]]+/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'string': /(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\))$/,\n\t\t\t\t'punctuation': /^[\\[\\]!:]|[<>]/\n\t\t\t},\n\t\t\talias: 'url'\n\t\t},\n\t\t'bold': {\n\t\t\t// **strong**\n\t\t\t// __strong__\n\n\t\t\t// allow one nested instance of italic text using the same delimiter\n\t\t\tpattern: createInline(/\\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\\b|\\*\\*(?:(?!\\*)<inner>|\\*(?:(?!\\*)<inner>)+\\*)+\\*\\*/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^..)[\\s\\S]+(?=..$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'punctuation': /\\*\\*|__/\n\t\t\t}\n\t\t},\n\t\t'italic': {\n\t\t\t// *em*\n\t\t\t// _em_\n\n\t\t\t// allow one nested instance of bold text using the same delimiter\n\t\t\tpattern: createInline(/\\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\\b|\\*(?:(?!\\*)<inner>|\\*\\*(?:(?!\\*)<inner>)+\\*\\*)+\\*/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^.)[\\s\\S]+(?=.$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'punctuation': /[*_]/\n\t\t\t}\n\t\t},\n\t\t'strike': {\n\t\t\t// ~~strike through~~\n\t\t\t// ~strike~\n\t\t\t// eslint-disable-next-line regexp/strict\n\t\t\tpattern: createInline(/(~~?)(?:(?!~)<inner>)+\\2/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^~~?)[\\s\\S]+(?=\\1$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'punctuation': /~~?/\n\t\t\t}\n\t\t},\n\t\t'code-snippet': {\n\t\t\t// `code`\n\t\t\t// ``code``\n\t\t\tpattern: /(^|[^\\\\`])(?:``[^`\\r\\n]+(?:`[^`\\r\\n]+)*``(?!`)|`[^`\\r\\n]+`(?!`))/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\talias: ['code', 'keyword']\n\t\t},\n\t\t'url': {\n\t\t\t// [example](http://example.com \"Optional title\")\n\t\t\t// [example][id]\n\t\t\t// [example] [id]\n\t\t\tpattern: createInline(/!?\\[(?:(?!\\])<inner>)+\\](?:\\([^\\s)]+(?:[\\t ]+\"(?:\\\\.|[^\"\\\\])*\")?\\)|[ \\t]?\\[(?:(?!\\])<inner>)+\\])/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'operator': /^!/,\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^\\[)[^\\]]+(?=\\])/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'variable': {\n\t\t\t\t\tpattern: /(^\\][ \\t]?\\[)[^\\]]+(?=\\]$)/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'url': {\n\t\t\t\t\tpattern: /(^\\]\\()[^\\s)]+/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: /(^[ \\t]+)\"(?:\\\\.|[^\"\\\\])*\"(?=\\)$)/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t['url', 'bold', 'italic', 'strike'].forEach(function (token) {\n\t\t['url', 'bold', 'italic', 'strike', 'code-snippet'].forEach(function (inside) {\n\t\t\tif (token !== inside) {\n\t\t\t\tPrism.languages.markdown[token].inside.content.inside[inside] = Prism.languages.markdown[inside];\n\t\t\t}\n\t\t});\n\t});\n\n\tPrism.hooks.add('after-tokenize', function (env) {\n\t\tif (env.language !== 'markdown' && env.language !== 'md') {\n\t\t\treturn;\n\t\t}\n\n\t\tfunction walkTokens(tokens) {\n\t\t\tif (!tokens || typeof tokens === 'string') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (var i = 0, l = tokens.length; i < l; i++) {\n\t\t\t\tvar token = tokens[i];\n\n\t\t\t\tif (token.type !== 'code') {\n\t\t\t\t\twalkTokens(token.content);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t/*\n\t\t\t\t * Add the correct `language-xxxx` class to this code block. Keep in mind that the `code-language` token\n\t\t\t\t * is optional. But the grammar is defined so that there is only one case we have to handle:\n\t\t\t\t *\n\t\t\t\t * token.content = [\n\t\t\t\t *     <span class=\"punctuation\">```</span>,\n\t\t\t\t *     <span class=\"code-language\">xxxx</span>,\n\t\t\t\t *     '\\n', // exactly one new lines (\\r or \\n or \\r\\n)\n\t\t\t\t *     <span class=\"code-block\">...</span>,\n\t\t\t\t *     '\\n', // exactly one new lines again\n\t\t\t\t *     <span class=\"punctuation\">```</span>\n\t\t\t\t * ];\n\t\t\t\t */\n\n\t\t\t\tvar codeLang = token.content[1];\n\t\t\t\tvar codeBlock = token.content[3];\n\n\t\t\t\tif (codeLang && codeBlock &&\n\t\t\t\t\tcodeLang.type === 'code-language' && codeBlock.type === 'code-block' &&\n\t\t\t\t\ttypeof codeLang.content === 'string') {\n\n\t\t\t\t\t// this might be a language that Prism does not support\n\n\t\t\t\t\t// do some replacements to support C++, C#, and F#\n\t\t\t\t\tvar lang = codeLang.content.replace(/\\b#/g, 'sharp').replace(/\\b\\+\\+/g, 'pp');\n\t\t\t\t\t// only use the first word\n\t\t\t\t\tlang = (/[a-z][\\w-]*/i.exec(lang) || [''])[0].toLowerCase();\n\t\t\t\t\tvar alias = 'language-' + lang;\n\n\t\t\t\t\t// add alias\n\t\t\t\t\tif (!codeBlock.alias) {\n\t\t\t\t\t\tcodeBlock.alias = [alias];\n\t\t\t\t\t} else if (typeof codeBlock.alias === 'string') {\n\t\t\t\t\t\tcodeBlock.alias = [codeBlock.alias, alias];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcodeBlock.alias.push(alias);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twalkTokens(env.tokens);\n\t});\n\n\tPrism.hooks.add('wrap', function (env) {\n\t\tif (env.type !== 'code-block') {\n\t\t\treturn;\n\t\t}\n\n\t\tvar codeLang = '';\n\t\tfor (var i = 0, l = env.classes.length; i < l; i++) {\n\t\t\tvar cls = env.classes[i];\n\t\t\tvar match = /language-(.+)/.exec(cls);\n\t\t\tif (match) {\n\t\t\t\tcodeLang = match[1];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tvar grammar = Prism.languages[codeLang];\n\n\t\tif (!grammar) {\n\t\t\tif (codeLang && codeLang !== 'none' && Prism.plugins.autoloader) {\n\t\t\t\tvar id = 'md-' + new Date().valueOf() + '-' + Math.floor(Math.random() * 1e16);\n\t\t\t\tenv.attributes['id'] = id;\n\n\t\t\t\tPrism.plugins.autoloader.loadLanguages(codeLang, function () {\n\t\t\t\t\tvar ele = document.getElementById(id);\n\t\t\t\t\tif (ele) {\n\t\t\t\t\t\tele.innerHTML = Prism.highlight(ele.textContent, Prism.languages[codeLang], codeLang);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tenv.content = Prism.highlight(textContent(env.content), grammar, codeLang);\n\t\t}\n\t});\n\n\tvar tagPattern = RegExp(Prism.languages.markup.tag.pattern.source, 'gi');\n\n\t/**\n\t * A list of known entity names.\n\t *\n\t * This will always be incomplete to save space. The current list is the one used by lowdash's unescape function.\n\t *\n\t * @see {@link https://github.com/lodash/lodash/blob/2da024c3b4f9947a48517639de7560457cd4ec6c/unescape.js#L2}\n\t */\n\tvar KNOWN_ENTITY_NAMES = {\n\t\t'amp': '&',\n\t\t'lt': '<',\n\t\t'gt': '>',\n\t\t'quot': '\"',\n\t};\n\n\t// IE 11 doesn't support `String.fromCodePoint`\n\tvar fromCodePoint = String.fromCodePoint || String.fromCharCode;\n\n\t/**\n\t * Returns the text content of a given HTML source code string.\n\t *\n\t * @param {string} html\n\t * @returns {string}\n\t */\n\tfunction textContent(html) {\n\t\t// remove all tags\n\t\tvar text = html.replace(tagPattern, '');\n\n\t\t// decode known entities\n\t\ttext = text.replace(/&(\\w{1,8}|#x?[\\da-f]{1,8});/gi, function (m, code) {\n\t\t\tcode = code.toLowerCase();\n\n\t\t\tif (code[0] === '#') {\n\t\t\t\tvar value;\n\t\t\t\tif (code[1] === 'x') {\n\t\t\t\t\tvalue = parseInt(code.slice(2), 16);\n\t\t\t\t} else {\n\t\t\t\t\tvalue = Number(code.slice(1));\n\t\t\t\t}\n\n\t\t\t\treturn fromCodePoint(value);\n\t\t\t} else {\n\t\t\t\tvar known = KNOWN_ENTITY_NAMES[code];\n\t\t\t\tif (known) {\n\t\t\t\t\treturn known;\n\t\t\t\t}\n\n\t\t\t\t// unable to decode\n\t\t\t\treturn m;\n\t\t\t}\n\t\t});\n\n\t\treturn text;\n\t}\n\n\tPrism.languages.md = Prism.languages.markdown;\n\n}(Prism));\n","Prism.languages.c = Prism.languages.extend('clike', {\n\t'comment': {\n\t\tpattern: /\\/\\/(?:[^\\r\\n\\\\]|\\\\(?:\\r\\n?|\\n|(?![\\r\\n])))*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\t// https://en.cppreference.com/w/c/language/string_literal\n\t\tpattern: /\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:enum|struct)\\s+(?:__attribute__\\s*\\(\\([\\s\\S]*?\\)\\)\\s*)?)\\w+|\\b[a-z]\\w*_t\\b/,\n\t\tlookbehind: true\n\t},\n\t'keyword': /\\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\\b/,\n\t'function': /\\b[a-z_]\\w*(?=\\s*\\()/i,\n\t'number': /(?:\\b0x(?:[\\da-f]+(?:\\.[\\da-f]*)?|\\.[\\da-f]+)(?:p[+-]?\\d+)?|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?)[ful]{0,4}/i,\n\t'operator': />>=?|<<=?|->|([-+&|:])\\1|[?:~]|[-+*/%&|^!=<>]=?/\n});\n\nPrism.languages.insertBefore('c', 'string', {\n\t'char': {\n\t\t// https://en.cppreference.com/w/c/language/character_constant\n\t\tpattern: /'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n]){0,32}'/,\n\t\tgreedy: true\n\t}\n});\n\nPrism.languages.insertBefore('c', 'string', {\n\t'macro': {\n\t\t// allow for multiline macro definitions\n\t\t// spaces after the # character compile fine with gcc\n\t\tpattern: /(^[\\t ]*)#\\s*[a-z](?:[^\\r\\n\\\\/]|\\/(?!\\*)|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/|\\\\(?:\\r\\n|[\\s\\S]))*/im,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property',\n\t\tinside: {\n\t\t\t'string': [\n\t\t\t\t{\n\t\t\t\t\t// highlight the path of the include statement as a string\n\t\t\t\t\tpattern: /^(#\\s*include\\s*)<[^>]+>/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\tPrism.languages.c['string']\n\t\t\t],\n\t\t\t'char': Prism.languages.c['char'],\n\t\t\t'comment': Prism.languages.c['comment'],\n\t\t\t'macro-name': [\n\t\t\t\t{\n\t\t\t\t\tpattern: /(^#\\s*define\\s+)\\w+\\b(?!\\()/i,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpattern: /(^#\\s*define\\s+)\\w+\\b(?=\\()/i,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'function'\n\t\t\t\t}\n\t\t\t],\n\t\t\t// highlight macro directives as keywords\n\t\t\t'directive': {\n\t\t\t\tpattern: /^(#\\s*)[a-z]+/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'keyword'\n\t\t\t},\n\t\t\t'directive-hash': /^#/,\n\t\t\t'punctuation': /##|\\\\(?=[\\r\\n])/,\n\t\t\t'expression': {\n\t\t\t\tpattern: /\\S[\\s\\S]*/,\n\t\t\t\tinside: Prism.languages.c\n\t\t\t}\n\t\t}\n\t}\n});\n\nPrism.languages.insertBefore('c', 'function', {\n\t// highlight predefined macros as constants\n\t'constant': /\\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\\b/\n});\n\ndelete Prism.languages.c['boolean'];\n","(function (Prism) {\n\n\tvar string = /(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/;\n\n\tPrism.languages.css = {\n\t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n\t\t'atrule': {\n\t\t\tpattern: RegExp('@[\\\\w-](?:' + /[^;{\\s\"']|\\s+(?!\\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\\s*\\{))/.source),\n\t\t\tinside: {\n\t\t\t\t'rule': /^@[\\w-]+/,\n\t\t\t\t'selector-function-argument': {\n\t\t\t\t\tpattern: /(\\bselector\\s*\\(\\s*(?![\\s)]))(?:[^()\\s]|\\s+(?![\\s)])|\\((?:[^()]|\\([^()]*\\))*\\))+(?=\\s*\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t'url': {\n\t\t\t// https://drafts.csswg.org/css-values-3/#urls\n\t\t\tpattern: RegExp('\\\\burl\\\\((?:' + string.source + '|' + /(?:[^\\\\\\r\\n()\"']|\\\\[\\s\\S])*/.source + ')\\\\)', 'i'),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^url/i,\n\t\t\t\t'punctuation': /^\\(|\\)$/,\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: RegExp('^' + string.source + '$'),\n\t\t\t\t\talias: 'url'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'selector': {\n\t\t\tpattern: RegExp('(^|[{}\\\\s])[^{}\\\\s](?:[^{};\"\\'\\\\s]|\\\\s+(?![\\\\s{])|' + string.source + ')*(?=\\\\s*\\\\{)'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: string,\n\t\t\tgreedy: true\n\t\t},\n\t\t'property': {\n\t\t\tpattern: /(^|[^-\\w\\xA0-\\uFFFF])(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*(?=\\s*:)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'important': /!important\\b/i,\n\t\t'function': {\n\t\t\tpattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\\()/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[(){};:,]/\n\t};\n\n\tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n\tvar markup = Prism.languages.markup;\n\tif (markup) {\n\t\tmarkup.tag.addInlined('style', 'css');\n\t\tmarkup.tag.addAttribute('style', 'css');\n\t}\n\n}(Prism));\n","Prism.languages.objectivec = Prism.languages.extend('c', {\n\t'string': {\n\t\tpattern: /@?\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"/,\n\t\tgreedy: true\n\t},\n\t'keyword': /\\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\\b/,\n\t'operator': /-[->]?|\\+\\+?|!=?|<<?=?|>>?=?|==?|&&?|\\|\\|?|[~^%?*\\/@]/\n});\n\ndelete Prism.languages.objectivec['class-name'];\n\nPrism.languages.objc = Prism.languages.objectivec;\n","Prism.languages.sql = {\n\t'comment': {\n\t\tpattern: /(^|[^\\\\])(?:\\/\\*[\\s\\S]*?\\*\\/|(?:--|\\/\\/|#).*)/,\n\t\tlookbehind: true\n\t},\n\t'variable': [\n\t\t{\n\t\t\tpattern: /@([\"'`])(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])+\\1/,\n\t\t\tgreedy: true\n\t\t},\n\t\t/@[\\w.$]+/\n\t],\n\t'string': {\n\t\tpattern: /(^|[^@\\\\])(\"|')(?:\\\\[\\s\\S]|(?!\\2)[^\\\\]|\\2\\2)*\\2/,\n\t\tgreedy: true,\n\t\tlookbehind: true\n\t},\n\t'identifier': {\n\t\tpattern: /(^|[^@\\\\])`(?:\\\\[\\s\\S]|[^`\\\\]|``)*`/,\n\t\tgreedy: true,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /^`|`$/\n\t\t}\n\t},\n\t'function': /\\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\\s*\\()/i, // Should we highlight user defined functions too?\n\t'keyword': /\\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\\b/i,\n\t'boolean': /\\b(?:FALSE|NULL|TRUE)\\b/i,\n\t'number': /\\b0x[\\da-f]+\\b|\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+\\b/i,\n\t'operator': /[-+*\\/=%^~]|&&?|\\|\\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\\b/i,\n\t'punctuation': /[;[\\]()`,.]/\n};\n","(function (Prism) {\n\n\tvar powershell = Prism.languages.powershell = {\n\t\t'comment': [\n\t\t\t{\n\t\t\t\tpattern: /(^|[^`])<#[\\s\\S]*?#>/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(^|[^`])#.*/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t'string': [\n\t\t\t{\n\t\t\t\tpattern: /\"(?:`[\\s\\S]|[^`\"])*\"/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /'(?:[^']|'')*'/,\n\t\t\t\tgreedy: true\n\t\t\t}\n\t\t],\n\t\t// Matches name spaces as well as casts, attribute decorators. Force starting with letter to avoid matching array indices\n\t\t// Supports two levels of nested brackets (e.g. `[OutputType([System.Collections.Generic.List[int]])]`)\n\t\t'namespace': /\\[[a-z](?:\\[(?:\\[[^\\]]*\\]|[^\\[\\]])*\\]|[^\\[\\]])*\\]/i,\n\t\t'boolean': /\\$(?:false|true)\\b/i,\n\t\t'variable': /\\$\\w+\\b/,\n\t\t// Cmdlets and aliases. Aliases should come last, otherwise \"write\" gets preferred over \"write-host\" for example\n\t\t// Get-Command | ?{ $_.ModuleName -match \"Microsoft.PowerShell.(Util|Core|Management)\" }\n\t\t// Get-Alias | ?{ $_.ReferencedCommand.Module.Name -match \"Microsoft.PowerShell.(Util|Core|Management)\" }\n\t\t'function': [\n\t\t\t/\\b(?:Add|Approve|Assert|Backup|Block|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy|Debug|Deny|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|ForEach|Format|Get|Grant|Group|Hide|Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Move|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push|Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke|Save|Search|Select|Send|Set|Show|Skip|Sort|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Tee|Test|Trace|Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Where|Write)-[a-z]+\\b/i,\n\t\t\t/\\b(?:ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\\b/i\n\t\t],\n\t\t// per http://technet.microsoft.com/en-us/library/hh847744.aspx\n\t\t'keyword': /\\b(?:Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\\b/i,\n\t\t'operator': {\n\t\t\tpattern: /(^|\\W)(?:!|-(?:b?(?:and|x?or)|as|(?:Not)?(?:Contains|In|Like|Match)|eq|ge|gt|is(?:Not)?|Join|le|lt|ne|not|Replace|sh[lr])\\b|-[-=]?|\\+[+=]?|[*\\/%]=?)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[|{}[\\];(),.]/\n\t};\n\n\t// Variable interpolation inside strings, and nested expressions\n\tpowershell.string[0].inside = {\n\t\t'function': {\n\t\t\t// Allow for one level of nesting\n\t\t\tpattern: /(^|[^`])\\$\\((?:\\$\\([^\\r\\n()]*\\)|(?!\\$\\()[^\\r\\n)])*\\)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: powershell\n\t\t},\n\t\t'boolean': powershell.boolean,\n\t\t'variable': powershell.variable,\n\t};\n\n}(Prism));\n","Prism.languages.python = {\n\t'comment': {\n\t\tpattern: /(^|[^\\\\])#.*/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'string-interpolation': {\n\t\tpattern: /(?:f|fr|rf)(?:(\"\"\"|''')[\\s\\S]*?\\1|(\"|')(?:\\\\.|(?!\\2)[^\\\\\\r\\n])*\\2)/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'interpolation': {\n\t\t\t\t// \"{\" <expression> <optional \"!s\", \"!r\", or \"!a\"> <optional \":\" format specifier> \"}\"\n\t\t\t\tpattern: /((?:^|[^{])(?:\\{\\{)*)\\{(?!\\{)(?:[^{}]|\\{(?!\\{)(?:[^{}]|\\{(?!\\{)(?:[^{}])+\\})+\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'format-spec': {\n\t\t\t\t\t\tpattern: /(:)[^:(){}]+(?=\\}$)/,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t},\n\t\t\t\t\t'conversion-option': {\n\t\t\t\t\t\tpattern: /![sra](?=[:}]$)/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: null\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'triple-quoted-string': {\n\t\tpattern: /(?:[rub]|br|rb)?(\"\"\"|''')[\\s\\S]*?\\1/i,\n\t\tgreedy: true,\n\t\talias: 'string'\n\t},\n\t'string': {\n\t\tpattern: /(?:[rub]|br|rb)?(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/i,\n\t\tgreedy: true\n\t},\n\t'function': {\n\t\tpattern: /((?:^|\\s)def[ \\t]+)[a-zA-Z_]\\w*(?=\\s*\\()/g,\n\t\tlookbehind: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\bclass\\s+)\\w+/i,\n\t\tlookbehind: true\n\t},\n\t'decorator': {\n\t\tpattern: /(^[\\t ]*)@\\w+(?:\\.\\w+)*/m,\n\t\tlookbehind: true,\n\t\talias: ['annotation', 'punctuation'],\n\t\tinside: {\n\t\t\t'punctuation': /\\./\n\t\t}\n\t},\n\t'keyword': /\\b(?:_(?=\\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\\b/,\n\t'builtin': /\\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\\b/,\n\t'boolean': /\\b(?:False|None|True)\\b/,\n\t'number': /\\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\\b|(?:\\b\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\B\\.\\d+(?:_\\d+)*)(?:e[+-]?\\d+(?:_\\d+)*)?j?(?!\\w)/i,\n\t'operator': /[-+%=]=?|!=|:=|\\*\\*?=?|\\/\\/?=?|<[<=>]?|>[=>]?|[&|^~]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\nPrism.languages.python['string-interpolation'].inside['interpolation'].inside.rest = Prism.languages.python;\n\nPrism.languages.py = Prism.languages.python;\n","(function (Prism) {\n\n\tvar multilineComment = /\\/\\*(?:[^*/]|\\*(?!\\/)|\\/(?!\\*)|<self>)*\\*\\//.source;\n\tfor (var i = 0; i < 2; i++) {\n\t\t// support 4 levels of nested comments\n\t\tmultilineComment = multilineComment.replace(/<self>/g, function () { return multilineComment; });\n\t}\n\tmultilineComment = multilineComment.replace(/<self>/g, function () { return /[^\\s\\S]/.source; });\n\n\n\tPrism.languages.rust = {\n\t\t'comment': [\n\t\t\t{\n\t\t\t\tpattern: RegExp(/(^|[^\\\\])/.source + multilineComment),\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t}\n\t\t],\n\t\t'string': {\n\t\t\tpattern: /b?\"(?:\\\\[\\s\\S]|[^\\\\\"])*\"|b?r(#*)\"(?:[^\"]|\"(?!\\1))*\"\\1/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'char': {\n\t\t\tpattern: /b?'(?:\\\\(?:x[0-7][\\da-fA-F]|u\\{(?:[\\da-fA-F]_*){1,6}\\}|.)|[^\\\\\\r\\n\\t'])'/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'attribute': {\n\t\t\tpattern: /#!?\\[(?:[^\\[\\]\"]|\"(?:\\\\[\\s\\S]|[^\\\\\"])*\")*\\]/,\n\t\t\tgreedy: true,\n\t\t\talias: 'attr-name',\n\t\t\tinside: {\n\t\t\t\t'string': null // see below\n\t\t\t}\n\t\t},\n\n\t\t// Closure params should not be confused with bitwise OR |\n\t\t'closure-params': {\n\t\t\tpattern: /([=(,:]\\s*|\\bmove\\s*)\\|[^|]*\\||\\|[^|]*\\|(?=\\s*(?:\\{|->))/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'closure-punctuation': {\n\t\t\t\t\tpattern: /^\\||\\|$/,\n\t\t\t\t\talias: 'punctuation'\n\t\t\t\t},\n\t\t\t\trest: null // see below\n\t\t\t}\n\t\t},\n\n\t\t'lifetime-annotation': {\n\t\t\tpattern: /'\\w+/,\n\t\t\talias: 'symbol'\n\t\t},\n\n\t\t'fragment-specifier': {\n\t\t\tpattern: /(\\$\\w+:)[a-z]+/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'variable': /\\$\\w+/,\n\n\t\t'function-definition': {\n\t\t\tpattern: /(\\bfn\\s+)\\w+/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'function'\n\t\t},\n\t\t'type-definition': {\n\t\t\tpattern: /(\\b(?:enum|struct|trait|type|union)\\s+)\\w+/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'class-name'\n\t\t},\n\t\t'module-declaration': [\n\t\t\t{\n\t\t\t\tpattern: /(\\b(?:crate|mod)\\s+)[a-z][a-z_\\d]*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'namespace'\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(\\b(?:crate|self|super)\\s*)::\\s*[a-z][a-z_\\d]*\\b(?:\\s*::(?:\\s*[a-z][a-z_\\d]*\\s*::)*)?/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'namespace',\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /::/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'keyword': [\n\t\t\t// https://github.com/rust-lang/reference/blob/master/src/keywords.md\n\t\t\t/\\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\\b/,\n\t\t\t// primitives and str\n\t\t\t// https://doc.rust-lang.org/stable/rust-by-example/primitives.html\n\t\t\t/\\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\\b/\n\t\t],\n\n\t\t// functions can technically start with an upper-case letter, but this will introduce a lot of false positives\n\t\t// and Rust's naming conventions recommend snake_case anyway.\n\t\t// https://doc.rust-lang.org/1.0.0/style/style/naming/README.html\n\t\t'function': /\\b[a-z_]\\w*(?=\\s*(?:::\\s*<|\\())/,\n\t\t'macro': {\n\t\t\tpattern: /\\b\\w+!/,\n\t\t\talias: 'property'\n\t\t},\n\t\t'constant': /\\b[A-Z_][A-Z_\\d]+\\b/,\n\t\t'class-name': /\\b[A-Z]\\w*\\b/,\n\n\t\t'namespace': {\n\t\t\tpattern: /(?:\\b[a-z][a-z_\\d]*\\s*::\\s*)*\\b[a-z][a-z_\\d]*\\s*::(?!\\s*<)/,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /::/\n\t\t\t}\n\t\t},\n\n\t\t// Hex, oct, bin, dec numbers with visual separators and type suffix\n\t\t'number': /\\b(?:0x[\\dA-Fa-f](?:_?[\\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\\d(?:_?\\d)*)?\\.)?\\d(?:_?\\d)*(?:[Ee][+-]?\\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\\b/,\n\t\t'boolean': /\\b(?:false|true)\\b/,\n\t\t'punctuation': /->|\\.\\.=|\\.{1,3}|::|[{}[\\];(),:]/,\n\t\t'operator': /[-+*\\/%!^]=?|=[=>]?|&[&=]?|\\|[|=]?|<<?=?|>>?=?|[@?]/\n\t};\n\n\tPrism.languages.rust['closure-params'].inside.rest = Prism.languages.rust;\n\tPrism.languages.rust['attribute'].inside['string'] = Prism.languages.rust['string'];\n\n}(Prism));\n","Prism.languages.swift = {\n\t'comment': {\n\t\t// Nested comments are supported up to 2 levels\n\t\tpattern: /(^|[^\\\\:])(?:\\/\\/.*|\\/\\*(?:[^/*]|\\/(?!\\*)|\\*(?!\\/)|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*\\*\\/)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'string-literal': [\n\t\t// https://docs.swift.org/swift-book/LanguageGuide/StringsAndCharacters.html\n\t\t{\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[^\"#])/.source\n\t\t\t\t+ '(?:'\n\t\t\t\t// single-line string\n\t\t\t\t+ /\"(?:\\\\(?:\\((?:[^()]|\\([^()]*\\))*\\)|\\r\\n|[^(])|[^\\\\\\r\\n\"])*\"/.source\n\t\t\t\t+ '|'\n\t\t\t\t// multi-line string\n\t\t\t\t+ /\"\"\"(?:\\\\(?:\\((?:[^()]|\\([^()]*\\))*\\)|[^(])|[^\\\\\"]|\"(?!\"\"))*\"\"\"/.source\n\t\t\t\t+ ')'\n\t\t\t\t+ /(?![\"#])/.source\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'interpolation': {\n\t\t\t\t\tpattern: /(\\\\\\()(?:[^()]|\\([^()]*\\))*(?=\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: null // see below\n\t\t\t\t},\n\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\tpattern: /^\\)|\\\\\\($/,\n\t\t\t\t\talias: 'punctuation'\n\t\t\t\t},\n\t\t\t\t'punctuation': /\\\\(?=[\\r\\n])/,\n\t\t\t\t'string': /[\\s\\S]+/\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[^\"#])(#+)/.source\n\t\t\t\t+ '(?:'\n\t\t\t\t// single-line string\n\t\t\t\t+ /\"(?:\\\\(?:#+\\((?:[^()]|\\([^()]*\\))*\\)|\\r\\n|[^#])|[^\\\\\\r\\n])*?\"/.source\n\t\t\t\t+ '|'\n\t\t\t\t// multi-line string\n\t\t\t\t+ /\"\"\"(?:\\\\(?:#+\\((?:[^()]|\\([^()]*\\))*\\)|[^#])|[^\\\\])*?\"\"\"/.source\n\t\t\t\t+ ')'\n\t\t\t\t+ '\\\\2'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'interpolation': {\n\t\t\t\t\tpattern: /(\\\\#+\\()(?:[^()]|\\([^()]*\\))*(?=\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: null // see below\n\t\t\t\t},\n\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\tpattern: /^\\)|\\\\#+\\($/,\n\t\t\t\t\talias: 'punctuation'\n\t\t\t\t},\n\t\t\t\t'string': /[\\s\\S]+/\n\t\t\t}\n\t\t},\n\t],\n\n\t'directive': {\n\t\t// directives with conditions\n\t\tpattern: RegExp(\n\t\t\t/#/.source\n\t\t\t+ '(?:'\n\t\t\t+ (\n\t\t\t\t/(?:elseif|if)\\b/.source\n\t\t\t\t+ '(?:[ \\t]*'\n\t\t\t\t// This regex is a little complex. It's equivalent to this:\n\t\t\t\t//   (?:![ \\t]*)?(?:\\b\\w+\\b(?:[ \\t]*<round>)?|<round>)(?:[ \\t]*(?:&&|\\|\\|))?\n\t\t\t\t// where <round> is a general parentheses expression.\n\t\t\t\t+ /(?:![ \\t]*)?(?:\\b\\w+\\b(?:[ \\t]*\\((?:[^()]|\\([^()]*\\))*\\))?|\\((?:[^()]|\\([^()]*\\))*\\))(?:[ \\t]*(?:&&|\\|\\|))?/.source\n\t\t\t\t+ ')+'\n\t\t\t)\n\t\t\t+ '|'\n\t\t\t+ /(?:else|endif)\\b/.source\n\t\t\t+ ')'\n\t\t),\n\t\talias: 'property',\n\t\tinside: {\n\t\t\t'directive-name': /^#\\w+/,\n\t\t\t'boolean': /\\b(?:false|true)\\b/,\n\t\t\t'number': /\\b\\d+(?:\\.\\d+)*\\b/,\n\t\t\t'operator': /!|&&|\\|\\||[<>]=?/,\n\t\t\t'punctuation': /[(),]/\n\t\t}\n\t},\n\t'literal': {\n\t\tpattern: /#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\\b/,\n\t\talias: 'constant'\n\t},\n\t'other-directive': {\n\t\tpattern: /#\\w+\\b/,\n\t\talias: 'property'\n\t},\n\n\t'attribute': {\n\t\tpattern: /@\\w+/,\n\t\talias: 'atrule'\n\t},\n\n\t'function-definition': {\n\t\tpattern: /(\\bfunc\\s+)\\w+/,\n\t\tlookbehind: true,\n\t\talias: 'function'\n\t},\n\t'label': {\n\t\t// https://docs.swift.org/swift-book/LanguageGuide/ControlFlow.html#ID141\n\t\tpattern: /\\b(break|continue)\\s+\\w+|\\b[a-zA-Z_]\\w*(?=\\s*:\\s*(?:for|repeat|while)\\b)/,\n\t\tlookbehind: true,\n\t\talias: 'important'\n\t},\n\n\t'keyword': /\\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'nil': {\n\t\tpattern: /\\bnil\\b/,\n\t\talias: 'constant'\n\t},\n\n\t'short-argument': /\\$\\d+\\b/,\n\t'omit': {\n\t\tpattern: /\\b_\\b/,\n\t\talias: 'keyword'\n\t},\n\t'number': /\\b(?:[\\d_]+(?:\\.[\\de_]+)?|0x[a-f0-9_]+(?:\\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b/i,\n\n\t// A class name must start with an upper-case letter and be either 1 letter long or contain a lower-case letter.\n\t'class-name': /\\b[A-Z](?:[A-Z_\\d]*[a-z]\\w*)?\\b/,\n\t'function': /\\b[a-z_]\\w*(?=\\s*\\()/i,\n\t'constant': /\\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\\b/,\n\n\t// Operators are generic in Swift. Developers can even create new operators (e.g. +++).\n\t// https://docs.swift.org/swift-book/ReferenceManual/zzSummaryOfTheGrammar.html#ID481\n\t// This regex only supports ASCII operators.\n\t'operator': /[-+*/%=!<>&|^~?]+|\\.[.\\-+*/%=!<>&|^~?]+/,\n\t'punctuation': /[{}[\\]();,.:\\\\]/\n};\n\nPrism.languages.swift['string-literal'].forEach(function (rule) {\n\trule.inside['interpolation'].inside = Prism.languages.swift;\n});\n","(function (Prism) {\n\n\tPrism.languages.typescript = Prism.languages.extend('javascript', {\n\t\t'class-name': {\n\t\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|type)\\s+)(?!keyof\\b)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?:\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: null // see below\n\t\t},\n\t\t'builtin': /\\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\\b/,\n\t});\n\n\t// The keywords TypeScript adds to JavaScript\n\tPrism.languages.typescript.keyword.push(\n\t\t/\\b(?:abstract|declare|is|keyof|readonly|require)\\b/,\n\t\t// keywords that have to be followed by an identifier\n\t\t/\\b(?:asserts|infer|interface|module|namespace|type)\\b(?=\\s*(?:[{_$a-zA-Z\\xA0-\\uFFFF]|$))/,\n\t\t// This is for `import type *, {}`\n\t\t/\\btype\\b(?=\\s*(?:[\\{*]|$))/\n\t);\n\n\t// doesn't work with TS because TS is too complex\n\tdelete Prism.languages.typescript['parameter'];\n\tdelete Prism.languages.typescript['literal-property'];\n\n\t// a version of typescript specifically for highlighting types\n\tvar typeInside = Prism.languages.extend('typescript', {});\n\tdelete typeInside['class-name'];\n\n\tPrism.languages.typescript['class-name'].inside = typeInside;\n\n\tPrism.languages.insertBefore('typescript', 'function', {\n\t\t'decorator': {\n\t\t\tpattern: /@[$\\w\\xA0-\\uFFFF]+/,\n\t\t\tinside: {\n\t\t\t\t'at': {\n\t\t\t\t\tpattern: /^@/,\n\t\t\t\t\talias: 'operator'\n\t\t\t\t},\n\t\t\t\t'function': /^[\\s\\S]+/\n\t\t\t}\n\t\t},\n\t\t'generic-function': {\n\t\t\t// e.g. foo<T extends \"bar\" | \"baz\">( ...\n\t\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\\s*\\()/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*/,\n\t\t\t\t'generic': {\n\t\t\t\t\tpattern: /<[\\s\\S]+/, // everything after the first <\n\t\t\t\t\talias: 'class-name',\n\t\t\t\t\tinside: typeInside\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tPrism.languages.ts = Prism.languages.typescript;\n\n}(Prism));\n","(function (Prism) {\n\n\tvar keywords = /\\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\\s*[(){}[\\]<>=%~.:,;?+\\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\\b/;\n\n\t// full package (optional) + parent classes (optional)\n\tvar classNamePrefix = /(?:[a-z]\\w*\\s*\\.\\s*)*(?:[A-Z]\\w*\\s*\\.\\s*)*/.source;\n\n\t// based on the java naming conventions\n\tvar className = {\n\t\tpattern: RegExp(/(^|[^\\w.])/.source + classNamePrefix + /[A-Z](?:[\\d_A-Z]*[a-z]\\w*)?\\b/.source),\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'namespace': {\n\t\t\t\tpattern: /^[a-z]\\w*(?:\\s*\\.\\s*[a-z]\\w*)*(?:\\s*\\.)?/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /\\./\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\./\n\t\t}\n\t};\n\n\tPrism.languages.java = Prism.languages.extend('clike', {\n\t\t'string': {\n\t\t\tpattern: /(^|[^\\\\])\"(?:\\\\.|[^\"\\\\\\r\\n])*\"/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t'class-name': [\n\t\t\tclassName,\n\t\t\t{\n\t\t\t\t// variables, parameters, and constructor references\n\t\t\t\t// this to support class names (or generic parameters) which do not contain a lower case letter (also works for methods)\n\t\t\t\tpattern: RegExp(/(^|[^\\w.])/.source + classNamePrefix + /[A-Z]\\w*(?=\\s+\\w+\\s*[;,=()]|\\s*(?:\\[[\\s,]*\\]\\s*)?::\\s*new\\b)/.source),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: className.inside\n\t\t\t},\n\t\t\t{\n\t\t\t\t// class names based on keyword\n\t\t\t\t// this to support class names (or generic parameters) which do not contain a lower case letter (also works for methods)\n\t\t\t\tpattern: RegExp(/(\\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\\s+)/.source + classNamePrefix + /[A-Z]\\w*\\b/.source),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: className.inside\n\t\t\t}\n\t\t],\n\t\t'keyword': keywords,\n\t\t'function': [\n\t\t\tPrism.languages.clike.function,\n\t\t\t{\n\t\t\t\tpattern: /(::\\s*)[a-z_]\\w*/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t'number': /\\b0b[01][01_]*L?\\b|\\b0x(?:\\.[\\da-f_p+-]+|[\\da-f_]+(?:\\.[\\da-f_p+-]+)?)\\b|(?:\\b\\d[\\d_]*(?:\\.[\\d_]*)?|\\B\\.\\d[\\d_]*)(?:e[+-]?\\d[\\d_]*)?[dfl]?/i,\n\t\t'operator': {\n\t\t\tpattern: /(^|[^.])(?:<<=?|>>>?=?|->|--|\\+\\+|&&|\\|\\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'constant': /\\b[A-Z][A-Z_\\d]+\\b/\n\t});\n\n\tPrism.languages.insertBefore('java', 'string', {\n\t\t'triple-quoted-string': {\n\t\t\t// http://openjdk.java.net/jeps/355#Description\n\t\t\tpattern: /\"\"\"[ \\t]*[\\r\\n](?:(?:\"|\"\")?(?:\\\\.|[^\"\\\\]))*\"\"\"/,\n\t\t\tgreedy: true,\n\t\t\talias: 'string'\n\t\t},\n\t\t'char': {\n\t\t\tpattern: /'(?:\\\\.|[^'\\\\\\r\\n]){1,6}'/,\n\t\t\tgreedy: true\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('java', 'class-name', {\n\t\t'annotation': {\n\t\t\tpattern: /(^|[^.])@\\w+(?:\\s*\\.\\s*\\w+)*/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'generics': {\n\t\t\tpattern: /<(?:[\\w\\s,.?]|&(?!&)|<(?:[\\w\\s,.?]|&(?!&)|<(?:[\\w\\s,.?]|&(?!&)|<(?:[\\w\\s,.?]|&(?!&))*>)*>)*>)*>/,\n\t\t\tinside: {\n\t\t\t\t'class-name': className,\n\t\t\t\t'keyword': keywords,\n\t\t\t\t'punctuation': /[<>(),.:]/,\n\t\t\t\t'operator': /[?&|]/\n\t\t\t}\n\t\t},\n\t\t'import': [\n\t\t\t{\n\t\t\t\tpattern: RegExp(/(\\bimport\\s+)/.source + classNamePrefix + /(?:[A-Z]\\w*|\\*)(?=\\s*;)/.source),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': className.inside.namespace,\n\t\t\t\t\t'punctuation': /\\./,\n\t\t\t\t\t'operator': /\\*/,\n\t\t\t\t\t'class-name': /\\w+/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: RegExp(/(\\bimport\\s+static\\s+)/.source + classNamePrefix + /(?:\\w+|\\*)(?=\\s*;)/.source),\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'static',\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': className.inside.namespace,\n\t\t\t\t\t'static': /\\b\\w+$/,\n\t\t\t\t\t'punctuation': /\\./,\n\t\t\t\t\t'operator': /\\*/,\n\t\t\t\t\t'class-name': /\\w+/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'namespace': {\n\t\t\tpattern: RegExp(\n\t\t\t\t/(\\b(?:exports|import(?:\\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\\s+)(?!<keyword>)[a-z]\\w*(?:\\.[a-z]\\w*)*\\.?/\n\t\t\t\t\t.source.replace(/<keyword>/g, function () { return keywords.source; })),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /\\./,\n\t\t\t}\n\t\t}\n\t});\n}(Prism));\n","(function (Prism) {\n\n\tvar keyword = /\\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\\b/;\n\tvar modName = /\\b(?!<keyword>)\\w+(?:\\s*\\.\\s*\\w+)*\\b/.source.replace(/<keyword>/g, function () { return keyword.source; });\n\n\tPrism.languages.cpp = Prism.languages.extend('c', {\n\t\t'class-name': [\n\t\t\t{\n\t\t\t\tpattern: RegExp(/(\\b(?:class|concept|enum|struct|typename)\\s+)(?!<keyword>)\\w+/.source\n\t\t\t\t\t.replace(/<keyword>/g, function () { return keyword.source; })),\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t// This is intended to capture the class name of method implementations like:\n\t\t\t//   void foo::bar() const {}\n\t\t\t// However! The `foo` in the above example could also be a namespace, so we only capture the class name if\n\t\t\t// it starts with an uppercase letter. This approximation should give decent results.\n\t\t\t/\\b[A-Z]\\w*(?=\\s*::\\s*\\w+\\s*\\()/,\n\t\t\t// This will capture the class name before destructors like:\n\t\t\t//   Foo::~Foo() {}\n\t\t\t/\\b[A-Z_]\\w*(?=\\s*::\\s*~\\w+\\s*\\()/i,\n\t\t\t// This also intends to capture the class name of method implementations but here the class has template\n\t\t\t// parameters, so it can't be a namespace (until C++ adds generic namespaces).\n\t\t\t/\\b\\w+(?=\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\\s*::\\s*\\w+\\s*\\()/\n\t\t],\n\t\t'keyword': keyword,\n\t\t'number': {\n\t\t\tpattern: /(?:\\b0b[01']+|\\b0x(?:[\\da-f']+(?:\\.[\\da-f']*)?|\\.[\\da-f']+)(?:p[+-]?[\\d']+)?|(?:\\b[\\d']+(?:\\.[\\d']*)?|\\B\\.[\\d']+)(?:e[+-]?[\\d']+)?)[ful]{0,4}/i,\n\t\t\tgreedy: true\n\t\t},\n\t\t'operator': />>=?|<<=?|->|--|\\+\\+|&&|\\|\\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\\b/,\n\t\t'boolean': /\\b(?:false|true)\\b/\n\t});\n\n\tPrism.languages.insertBefore('cpp', 'string', {\n\t\t'module': {\n\t\t\t// https://en.cppreference.com/w/cpp/language/modules\n\t\t\tpattern: RegExp(\n\t\t\t\t/(\\b(?:import|module)\\s+)/.source +\n\t\t\t\t'(?:' +\n\t\t\t\t// header-name\n\t\t\t\t/\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|<[^<>\\r\\n]*>/.source +\n\t\t\t\t'|' +\n\t\t\t\t// module name or partition or both\n\t\t\t\t/<mod-name>(?:\\s*:\\s*<mod-name>)?|:\\s*<mod-name>/.source.replace(/<mod-name>/g, function () { return modName; }) +\n\t\t\t\t')'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'string': /^[<\"][\\s\\S]+/,\n\t\t\t\t'operator': /:/,\n\t\t\t\t'punctuation': /\\./\n\t\t\t}\n\t\t},\n\t\t'raw-string': {\n\t\t\tpattern: /R\"([^()\\\\ ]{0,16})\\([\\s\\S]*?\\)\\1\"/,\n\t\t\talias: 'string',\n\t\t\tgreedy: true\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('cpp', 'keyword', {\n\t\t'generic-function': {\n\t\t\tpattern: /\\b(?!operator\\b)[a-z_]\\w*\\s*<(?:[^<>]|<[^<>]*>)*>(?=\\s*\\()/i,\n\t\t\tinside: {\n\t\t\t\t'function': /^\\w+/,\n\t\t\t\t'generic': {\n\t\t\t\t\tpattern: /<[\\s\\S]+/,\n\t\t\t\t\talias: 'class-name',\n\t\t\t\t\tinside: Prism.languages.cpp\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('cpp', 'operator', {\n\t\t'double-colon': {\n\t\t\tpattern: /::/,\n\t\t\talias: 'punctuation'\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('cpp', 'class-name', {\n\t\t// the base clause is an optional list of parent classes\n\t\t// https://en.cppreference.com/w/cpp/language/class\n\t\t'base-clause': {\n\t\t\tpattern: /(\\b(?:class|struct)\\s+\\w+\\s*:\\s*)[^;{}\"'\\s]+(?:\\s+[^;{}\"'\\s]+)*(?=\\s*[;{])/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: Prism.languages.extend('cpp', {})\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('inside', 'double-colon', {\n\t\t// All untokenized words that are not namespaces should be class names\n\t\t'class-name': /\\b[a-z_]\\w*\\b(?!\\s*::)/i\n\t}, Prism.languages.cpp['base-clause']);\n\n}(Prism));\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport{isHTMLElement as t,addClassNamesToElement as e,removeClassNamesFromElement as n,$getAdjacentCaret as r,mergeRegister as o}from\"@lexical/utils\";import{ElementNode as i,$createParagraphNode as s,$isTextNode as l,$isTabNode as c,$createTabNode as u,$createLineBreakNode as a,$applyNodeReplacement as g,TextNode as f,$getSiblingCaret as p,$isLineBreakNode as h,$createTextNode as d,$getNodeByKey as m,$getSelection as x,$isRangeSelection as y,$createPoint as S,INDENT_CONTENT_COMMAND as v,OUTDENT_CONTENT_COMMAND as _,INSERT_TAB_COMMAND as T,$setSelectionFromCaretRange as C,$getCaretRangeInDirection as N,$getCaretRange as j,$getTextPointCaret as b,$normalizeCaret as w,KEY_ARROW_UP_COMMAND as k,MOVE_TO_START as P,KEY_TAB_COMMAND as O,COMMAND_PRIORITY_LOW as A,$insertNodes as L,KEY_ARROW_DOWN_COMMAND as E,MOVE_TO_END as H}from\"lexical\";import\"prismjs\";import\"prismjs/components/prism-clike.js\";import\"prismjs/components/prism-javascript.js\";import\"prismjs/components/prism-markup.js\";import\"prismjs/components/prism-markdown.js\";import\"prismjs/components/prism-c.js\";import\"prismjs/components/prism-css.js\";import\"prismjs/components/prism-objectivec.js\";import\"prismjs/components/prism-sql.js\";import\"prismjs/components/prism-powershell.js\";import\"prismjs/components/prism-python.js\";import\"prismjs/components/prism-rust.js\";import\"prismjs/components/prism-swift.js\";import\"prismjs/components/prism-typescript.js\";import\"prismjs/components/prism-java.js\";import\"prismjs/components/prism-cpp.js\";function B(t,...e){const n=new URL(\"https://lexical.dev/docs/error\"),r=new URLSearchParams;r.append(\"code\",t);for(const t of e)r.append(\"v\",t);throw n.search=r.toString(),Error(`Minified Lexical error #${t}; visit ${n.toString()} for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`)}!function(t){t.languages.diff={coord:[/^(?:\\*{3}|-{3}|\\+{3}).*$/m,/^@@.*@@$/m,/^\\d.*$/m]};var e={\"deleted-sign\":\"-\",\"deleted-arrow\":\"<\",\"inserted-sign\":\"+\",\"inserted-arrow\":\">\",unchanged:\" \",diff:\"!\"};Object.keys(e).forEach((function(n){var r=e[n],o=[];/^\\w+$/.test(n)||o.push(/\\w+/.exec(n)[0]),\"diff\"===n&&o.push(\"bold\"),t.languages.diff[n]={pattern:RegExp(\"^(?:[\"+r+\"].*(?:\\r\\n?|\\n|(?![\\\\s\\\\S])))+\",\"m\"),alias:o,inside:{line:{pattern:/(.)(?=[\\s\\S]).*(?:\\r\\n?|\\n)?/,lookbehind:!0},prefix:{pattern:/[\\s\\S]/,alias:/\\w+/.exec(n)[0]}}}})),Object.defineProperty(t.languages.diff,\"PREFIXES\",{value:e})}(Prism);const z=globalThis.Prism||window.Prism;function D(t){return\"string\"==typeof t?t:Array.isArray(t)?t.map(D).join(\"\"):D(t.content)}const M=t=>{const e=/^diff-([\\w-]+)/i;try{if(!t)return!1;const n=e.exec(t);return n?z.languages.hasOwnProperty(\"diff\")&&z.languages.hasOwnProperty(n[1]):z.languages.hasOwnProperty(t)}catch(t){return!1}};function J(e,n){for(const r of e.childNodes){if(t(r)&&r.tagName===n)return!0;J(r,n)}return!1}const F=\"data-language\",R=\"data-highlight-language\";class I extends i{static getType(){return\"code\"}static clone(t){return new I(t.__language,t.__key)}constructor(t,e){super(e),this.__language=t||void 0,this.__isSyntaxHighlightSupported=M(t)}createDOM(t){const n=document.createElement(\"code\");e(n,t.theme.code),n.setAttribute(\"spellcheck\",\"false\");const r=this.getLanguage();return r&&(n.setAttribute(F,r),this.getIsSyntaxHighlightSupported()&&n.setAttribute(R,r)),n}updateDOM(t,e,n){const r=this.__language,o=t.__language;return r?r!==o&&(e.setAttribute(F,r),this.__isSyntaxHighlightSupported&&e.setAttribute(R,r)):o&&(e.removeAttribute(F),t.__isSyntaxHighlightSupported&&e.removeAttribute(R)),!1}exportDOM(t){const n=document.createElement(\"pre\");e(n,t._config.theme.code),n.setAttribute(\"spellcheck\",\"false\");const r=this.getLanguage();return r&&(n.setAttribute(F,r),this.getIsSyntaxHighlightSupported()&&n.setAttribute(R,r)),{element:n}}static importDOM(){return{code:t=>null!=t.textContent&&(/\\r?\\n/.test(t.textContent)||J(t,\"BR\"))?{conversion:q,priority:1}:null,div:()=>({conversion:U,priority:1}),pre:()=>({conversion:q,priority:0}),table:t=>G(t)?{conversion:W,priority:3}:null,td:t=>{const e=t,n=e.closest(\"table\");return e.classList.contains(\"js-file-line\")||n&&G(n)?{conversion:X,priority:3}:null},tr:t=>{const e=t.closest(\"table\");return e&&G(e)?{conversion:X,priority:3}:null}}}static importJSON(t){return K().updateFromJSON(t)}updateFromJSON(t){return super.updateFromJSON(t).setLanguage(t.language)}exportJSON(){return{...super.exportJSON(),language:this.getLanguage()}}insertNewAfter(t,e=!0){const n=this.getChildren(),r=n.length;if(r>=2&&\"\\n\"===n[r-1].getTextContent()&&\"\\n\"===n[r-2].getTextContent()&&t.isCollapsed()&&t.anchor.key===this.__key&&t.anchor.offset===r){n[r-1].remove(),n[r-2].remove();const t=s();return this.insertAfter(t,e),t}const{anchor:o,focus:i}=t,g=(o.isBefore(i)?o:i).getNode();if(l(g)){let t=ut(g);const e=[];for(;;)if(c(t))e.push(u()),t=t.getNextSibling();else{if(!lt(t))break;{let n=0;const r=t.getTextContent(),o=t.getTextContentSize();for(;n<o&&\" \"===r[n];)n++;if(0!==n&&e.push(st(\" \".repeat(n))),n!==o)break;t=t.getNextSibling()}}const n=g.splitText(o.offset)[0],r=0===o.offset?0:1,i=n.getIndexWithinParent()+r,s=g.getParentOrThrow(),l=[a(),...e];s.splice(i,0,l);const f=e[e.length-1];f?f.select():0===o.offset?n.selectPrevious():n.getNextSibling().selectNext(0,0)}if($(g)){const{offset:e}=t.anchor;g.splice(e,0,[a()]),g.select(e+1,e+1)}return null}canIndent(){return!1}collapseAtStart(){const t=s();return this.getChildren().forEach((e=>t.append(e))),this.replace(t),!0}setLanguage(t){const e=this.getWritable();return e.__language=t||void 0,e.__isSyntaxHighlightSupported=M(t),e}getLanguage(){return this.getLatest().__language}getIsSyntaxHighlightSupported(){return this.getLatest().__isSyntaxHighlightSupported}}function K(t){return g(new I(t))}function $(t){return t instanceof I}function q(t){return{node:K(t.getAttribute(F))}}function U(t){const e=t,n=Q(e);return n||function(t){let e=t.parentElement;for(;null!==e;){if(Q(e))return!0;e=e.parentElement}return!1}(e)?{node:n?K():null}:{node:null}}function W(){return{node:K()}}function X(){return{node:null}}function Q(t){return null!==t.style.fontFamily.match(\"monospace\")}function G(t){return t.classList.contains(\"js-file-line-container\")}const V=\"javascript\",Y={c:\"C\",clike:\"C-like\",cpp:\"C++\",css:\"CSS\",html:\"HTML\",java:\"Java\",js:\"JavaScript\",markdown:\"Markdown\",objc:\"Objective-C\",plain:\"Plain Text\",powershell:\"PowerShell\",py:\"Python\",rust:\"Rust\",sql:\"SQL\",swift:\"Swift\",typescript:\"TypeScript\",xml:\"XML\"},Z={cpp:\"cpp\",java:\"java\",javascript:\"js\",md:\"markdown\",plaintext:\"plain\",python:\"py\",text:\"plain\",ts:\"typescript\"};function tt(t){return Z[t]||t}function et(t){const e=tt(t);return Y[e]||e}const nt=()=>V,rt=()=>Object.keys(z.languages).filter((t=>\"function\"!=typeof z.languages[t])).sort();class ot extends f{constructor(t=\"\",e,n){super(t,n),this.__highlightType=e}static getType(){return\"code-highlight\"}static clone(t){return new ot(t.__text,t.__highlightType||void 0,t.__key)}getHighlightType(){return this.getLatest().__highlightType}setHighlightType(t){const e=this.getWritable();return e.__highlightType=t||void 0,e}canHaveFormat(){return!1}createDOM(t){const n=super.createDOM(t),r=it(t.theme,this.__highlightType);return e(n,r),n}updateDOM(t,r,o){const i=super.updateDOM(t,r,o),s=it(o.theme,t.__highlightType),l=it(o.theme,this.__highlightType);return s!==l&&(s&&n(r,s),l&&e(r,l)),i}static importJSON(t){return st().updateFromJSON(t)}updateFromJSON(t){return super.updateFromJSON(t).setHighlightType(t.highlightType)}exportJSON(){return{...super.exportJSON(),highlightType:this.getHighlightType()}}setFormat(t){return this}isParentRequired(){return!0}createParentElementNode(){return K()}}function it(t,e){return e&&t&&t.codeHighlight&&t.codeHighlight[e]}function st(t=\"\",e){return g(new ot(t,e))}function lt(t){return t instanceof ot}function ct(t,e){let n=t;for(let o=p(t,e);o&&(lt(o.origin)||c(o.origin));o=r(o))n=o.origin;return n}function ut(t){return ct(t,\"previous\")}function at(t){return ct(t,\"next\")}const gt={defaultLanguage:V,tokenize(t,e){return z.tokenize(t,z.languages[e||\"\"]||z.languages[this.defaultLanguage])}};function ft(t,e){let n=null,r=null,o=t,i=e,s=t.getTextContent();for(;;){if(0===i){if(o=o.getPreviousSibling(),null===o)break;if(lt(o)||c(o)||h(o)||B(167),h(o)){n={node:o,offset:1};break}i=Math.max(0,o.getTextContentSize()-1),s=o.getTextContent()}else i--;const t=s[i];lt(o)&&\" \"!==t&&(r={node:o,offset:i})}if(null!==r)return r;let l=null;if(e<t.getTextContentSize())lt(t)&&(l=t.getTextContent()[e]);else{const e=t.getNextSibling();lt(e)&&(l=e.getTextContent()[0])}if(null!==l&&\" \"!==l)return n;{const r=function(t,e){let n=t,r=e,o=t.getTextContent(),i=t.getTextContentSize();for(;;){if(!lt(n)||r===i){if(n=n.getNextSibling(),null===n||h(n))return null;lt(n)&&(r=0,o=n.getTextContent(),i=n.getTextContentSize())}if(lt(n)){if(\" \"!==o[r])return{node:n,offset:r};r++}}}(t,e);return null!==r?r:n}}function pt(t){const e=at(t);return h(e)&&B(168),e}function ht(t,e,n){const r=t.getParent();$(r)?xt(r,e,n):lt(t)&&t.replace(d(t.__text))}function dt(t,e){const n=e.getElementByKey(t.getKey());if(null===n)return;const r=t.getChildren(),o=r.length;if(o===n.__cachedChildrenLength)return;n.__cachedChildrenLength=o;let i=\"1\",s=1;for(let t=0;t<o;t++)h(r[t])&&(i+=\"\\n\"+ ++s);n.setAttribute(\"data-gutter\",i)}const mt=new Set;function xt(t,e,n){const r=t.getKey();mt.has(r)||(mt.add(r),void 0===t.getLanguage()&&t.setLanguage(n.defaultLanguage),e.update((()=>{!function(t,e){const n=m(t);if(!$(n)||!n.isAttached())return;const r=x();if(!y(r))return void e();const o=r.anchor,i=o.offset,s=\"element\"===o.type&&h(n.getChildAtIndex(o.offset-1));let c=0;if(!s){const t=o.getNode();c=i+t.getPreviousSiblings().reduce(((t,e)=>t+e.getTextContentSize()),0)}if(!e())return;if(s)return void o.getNode().select(i,i);n.getChildren().some((t=>{const e=l(t);if(e||h(t)){const n=t.getTextContentSize();if(e&&n>=c)return t.select(c,c),!0;c-=n}return!1}))}(r,(()=>{const e=m(r);if(!$(e)||!e.isAttached())return!1;const o=e.getLanguage()||n.defaultLanguage,i=/^diff-([\\w-]+)/i.exec(o),s=e.getTextContent();let l=n.tokenize(s,i?\"diff\":o);i&&(l=function(t,e){const n=e,r=z.languages[n],o={tokens:t},i=z.languages.diff.PREFIXES;for(const t of o.tokens){if(\"string\"==typeof t||!(t.type in i)||!Array.isArray(t.content))continue;const e=t.type;let n=0;const o=()=>(n++,new z.Token(\"prefix\",i[e],e.replace(/^(\\w+).*/,\"$1\"))),s=t.content.filter((t=>\"string\"==typeof t||\"prefix\"!==t.type)),l=t.content.length-s.length,c=z.tokenize(D(s),r);c.unshift(o());const u=/\\r\\n|\\n/g,a=t=>{const e=[];u.lastIndex=0;let r,i=0;for(;n<l&&(r=u.exec(t));){const n=r.index+r[0].length;e.push(t.slice(i,n)),i=n,e.push(o())}if(0!==e.length)return i<t.length&&e.push(t.slice(i)),e},g=t=>{for(let e=0;e<t.length&&n<l;e++){const n=t[e];if(\"string\"==typeof n){const r=a(n);r&&(t.splice(e,1,...r),e+=r.length-1)}else if(\"string\"==typeof n.content){const t=a(n.content);t&&(n.content=t)}else Array.isArray(n.content)?g(n.content):g([n.content])}};g(c),n<l&&c.push(o()),t.content=c}return o.tokens}(l,i[1]));const c=yt(l),u=function(t,e){let n=0;for(;n<t.length&&St(t[n],e[n]);)n++;const r=t.length,o=e.length,i=Math.min(r,o)-n;let s=0;for(;s<i;)if(s++,!St(t[r-s],e[o-s])){s--;break}const l=n,c=r-s,u=e.slice(n,o-s);return{from:l,nodesForReplacement:u,to:c}}(e.getChildren(),c),{from:a,to:g,nodesForReplacement:f}=u;return!(a===g&&!f.length)&&(t.splice(a,g-a,f),!0)}))}),{onUpdate:()=>{mt.delete(r)},skipTransforms:!0}))}function yt(t,e){const n=[];for(const r of t)if(\"string\"==typeof r){const t=r.split(/(\\n|\\t)/),o=t.length;for(let r=0;r<o;r++){const o=t[r];\"\\n\"===o||\"\\r\\n\"===o?n.push(a()):\"\\t\"===o?n.push(u()):o.length>0&&n.push(st(o,e))}}else{const{content:t,alias:e}=r;\"string\"==typeof t?n.push(...yt([t],\"prefix\"===r.type&&\"string\"==typeof e?e:r.type)):Array.isArray(t)&&n.push(...yt(t,\"unchanged\"===r.type?void 0:r.type))}return n}function St(t,e){return lt(t)&&lt(e)&&t.__text===e.__text&&t.__highlightType===e.__highlightType||c(t)&&c(e)||h(t)&&h(e)}function vt(t){if(!y(t))return!1;const e=t.anchor.getNode(),n=$(e)?e:e.getParent(),r=t.focus.getNode(),o=$(r)?r:r.getParent();return $(n)&&n.is(o)}function _t(t){const e=t.getNodes(),n=[];if(1===e.length&&$(e[0]))return n;let r=[];for(let t=0;t<e.length;t++){const o=e[t];lt(o)||c(o)||h(o)||B(169),h(o)?r.length>0&&(n.push(r),r=[]):r.push(o)}if(r.length>0){const e=t.isBackward()?t.anchor:t.focus,o=S(r[0].getKey(),0,\"text\");e.is(o)||n.push(r)}return n}function Tt(t){const e=x();if(!y(e)||!vt(e))return!1;const n=_t(e),r=n.length;if(0===r&&e.isCollapsed())return t===v&&e.insertNodes([u()]),!0;if(0===r&&t===v&&\"\\n\"===e.getTextContent()){const t=u(),n=a(),r=e.isBackward()?\"previous\":\"next\";return e.insertNodes([t,n]),C(N(j(b(t,\"next\",0),w(p(n,\"next\"))),r)),!0}for(let o=0;o<r;o++){const r=n[o];if(r.length>0){let n=r[0];if(0===o&&(n=ut(n)),t===v){const t=u();if(n.insertBefore(t),0===o){const r=e.isBackward()?\"focus\":\"anchor\",o=S(n.getKey(),0,\"text\");e[r].is(o)&&e[r].set(t.getKey(),0,\"text\")}}else c(n)&&n.remove()}}return!0}function Ct(t,e){const n=x();if(!y(n))return!1;const{anchor:r,focus:o}=n,i=r.offset,s=o.offset,l=r.getNode(),u=o.getNode(),a=t===k;if(!vt(n)||!lt(l)&&!c(l)||!lt(u)&&!c(u))return!1;if(!e.altKey){if(n.isCollapsed()){const t=l.getParentOrThrow();if(a&&0===i&&null===l.getPreviousSibling()){if(null===t.getPreviousSibling())return t.selectPrevious(),e.preventDefault(),!0}else if(!a&&i===l.getTextContentSize()&&null===l.getNextSibling()){if(null===t.getNextSibling())return t.selectNext(),e.preventDefault(),!0}}return!1}let g,f;if(l.isBefore(u)?(g=ut(l),f=at(u)):(g=ut(u),f=at(l)),null==g||null==f)return!1;const p=g.getNodesBetween(f);for(let t=0;t<p.length;t++){const e=p[t];if(!lt(e)&&!c(e)&&!h(e))return!1}e.preventDefault(),e.stopPropagation();const d=a?g.getPreviousSibling():f.getNextSibling();if(!h(d))return!0;const m=a?d.getPreviousSibling():d.getNextSibling();if(null==m)return!0;const S=lt(m)||c(m)||h(m)?a?ut(m):at(m):null;let v=null!=S?S:m;return d.remove(),p.forEach((t=>t.remove())),t===k?(p.forEach((t=>v.insertBefore(t))),v.insertBefore(d)):(v.insertAfter(d),v=d,p.forEach((t=>{v.insertAfter(t),v=t}))),n.setTextNodeRange(l,i,u,s),!0}function Nt(t,e){const n=x();if(!y(n))return!1;const{anchor:r,focus:o}=n,i=r.getNode(),s=o.getNode(),l=t===P;if(!vt(n)||!lt(i)&&!c(i)||!lt(s)&&!c(s))return!1;if(l){const t=ft(s,o.offset);if(null!==t){const{node:e,offset:r}=t;h(e)?e.selectNext(0,0):n.setTextNodeRange(e,r,e,r)}else s.getParentOrThrow().selectStart()}else{pt(s).select()}return e.preventDefault(),e.stopPropagation(),!0}function jt(t,e){if(!t.hasNodes([I,ot]))throw new Error(\"CodeHighlightPlugin: CodeNode or CodeHighlightNode not registered on editor\");null==e&&(e=gt);const n=[];return!0!==t._headless&&n.push(t.registerMutationListener(I,(e=>{t.update((()=>{for(const[n,r]of e)if(\"destroyed\"!==r){const e=m(n);null!==e&&dt(e,t)}}))}),{skipInitialization:!1})),n.push(t.registerNodeTransform(I,(n=>xt(n,t,e))),t.registerNodeTransform(f,(n=>ht(n,t,e))),t.registerNodeTransform(ot,(n=>ht(n,t,e))),t.registerCommand(O,(e=>{const n=function(t){const e=x();if(!y(e)||!vt(e))return null;const n=t?_:v,r=t?_:T,o=e.anchor,i=e.focus;if(o.is(i))return r;const s=_t(e);if(1!==s.length)return n;const l=s[0];let c,u;0===l.length&&B(285),e.isBackward()?(c=i,u=o):(c=o,u=i);const a=ut(l[0]),g=at(l[0]),f=S(a.getKey(),0,\"text\"),p=S(g.getKey(),g.getTextContentSize(),\"text\");return c.isBefore(f)||p.isBefore(u)?n:f.isBefore(c)||u.isBefore(p)?r:n}(e.shiftKey);return null!==n&&(e.preventDefault(),t.dispatchCommand(n,void 0),!0)}),A),t.registerCommand(T,(()=>!!vt(x())&&(L([u()]),!0)),A),t.registerCommand(v,(t=>Tt(v)),A),t.registerCommand(_,(t=>Tt(_)),A),t.registerCommand(k,(t=>{const e=x();if(!y(e))return!1;const{anchor:n}=e,r=n.getNode();return!!vt(e)&&(e.isCollapsed()&&0===n.offset&&null===r.getPreviousSibling()&&$(r.getParentOrThrow())?(t.preventDefault(),!0):Ct(k,t))}),A),t.registerCommand(E,(t=>{const e=x();if(!y(e))return!1;const{anchor:n}=e,r=n.getNode();return!!vt(e)&&(e.isCollapsed()&&n.offset===r.getTextContentSize()&&null===r.getNextSibling()&&$(r.getParentOrThrow())?(t.preventDefault(),!0):Ct(E,t))}),A),t.registerCommand(P,(t=>Nt(P,t)),A),t.registerCommand(H,(t=>Nt(H,t)),A)),o(...n)}const bt=ut,wt=at,kt=pt,Pt=ft;export{st as $createCodeHighlightNode,K as $createCodeNode,pt as $getEndOfCodeInLine,ut as $getFirstCodeNodeOfLine,at as $getLastCodeNodeOfLine,ft as $getStartOfCodeInLine,lt as $isCodeHighlightNode,$ as $isCodeNode,Y as CODE_LANGUAGE_FRIENDLY_NAME_MAP,Z as CODE_LANGUAGE_MAP,ot as CodeHighlightNode,I as CodeNode,V as DEFAULT_CODE_LANGUAGE,gt as PrismTokenizer,rt as getCodeLanguages,nt as getDefaultCodeLanguage,kt as getEndOfCodeInLine,bt as getFirstCodeNodeOfLine,et as getLanguageFriendlyName,wt as getLastCodeNodeOfLine,Pt as getStartOfCodeInLine,tt as normalizeCodeLang,jt as registerCodeHighlighting};\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport{$getSelection as e,$isRangeSelection as t,$isTextNode as n}from\"lexical\";function o(o){const i=window.location.origin,a=a=>{if(a.origin!==i)return;const r=o.getRootElement();if(document.activeElement!==r)return;const s=a.data;if(\"string\"==typeof s){let i;try{i=JSON.parse(s)}catch(e){return}if(i&&\"nuanria_messaging\"===i.protocol&&\"request\"===i.type){const r=i.payload;if(r&&\"makeChanges\"===r.functionId){const i=r.args;if(i){const[r,s,c,g,d,f]=i;o.update((()=>{const o=e();if(t(o)){const e=o.anchor;let t=e.getNode(),i=0,f=0;if(n(t)&&r>=0&&s>=0&&(i=r,f=r+s,o.setTextNodeRange(t,i,t,f)),i===f&&\"\"===c||(o.insertRawText(c),t=e.getNode()),n(t)){i=g,f=g+d;const e=t.getTextContentSize();i=i>e?e:i,f=f>e?e:f,o.setTextNodeRange(t,i,t,f)}a.stopImmediatePropagation()}}))}}}}};return window.addEventListener(\"message\",a,!0),()=>{window.removeEventListener(\"message\",a,!0)}}export{o as registerDragonSupport};\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport{mergeRegister as t}from\"@lexical/utils\";import{UNDO_COMMAND as e,COMMAND_PRIORITY_EDITOR as n,REDO_COMMAND as r,CLEAR_EDITOR_COMMAND as o,CLEAR_HISTORY_COMMAND as i,CAN_REDO_COMMAND as c,CAN_UNDO_COMMAND as s,HISTORIC_TAG as a,HISTORY_PUSH_TAG as u,HISTORY_MERGE_TAG as d,$isRangeSelection as l,$isTextNode as f,$isRootNode as p}from\"lexical\";const m=0,h=1,_=2,g=0,S=1,k=2,y=3,C=4;function x(t,e,n,r,o){if(null===t||0===n.size&&0===r.size&&!o)return g;const i=e._selection,c=t._selection;if(o)return S;if(!(l(i)&&l(c)&&c.isCollapsed()&&i.isCollapsed()))return g;const s=function(t,e,n){const r=t._nodeMap,o=[];for(const t of e){const e=r.get(t);void 0!==e&&o.push(e)}for(const[t,e]of n){if(!e)continue;const n=r.get(t);void 0===n||p(n)||o.push(n)}return o}(e,n,r);if(0===s.length)return g;if(s.length>1){const n=e._nodeMap,r=n.get(i.anchor.key),o=n.get(c.anchor.key);return r&&o&&!t._nodeMap.has(r.__key)&&f(r)&&1===r.__text.length&&1===i.anchor.offset?k:g}const a=s[0],u=t._nodeMap.get(a.__key);if(!f(u)||!f(a)||u.__mode!==a.__mode)return g;const d=u.__text,m=a.__text;if(d===m)return g;const h=i.anchor,_=c.anchor;if(h.key!==_.key||\"text\"!==h.type)return g;const x=h.offset,M=_.offset,z=m.length-d.length;return 1===z&&M===x-1?k:-1===z&&M===x+1?y:-1===z&&M===x?C:g}function M(t,e){let n=Date.now(),r=g;return(o,i,c,s,p,S)=>{const k=Date.now();if(S.has(a))return r=g,n=k,_;const y=x(o,i,s,p,t.isComposing()),C=(()=>{const a=null===c||c.editor===t,C=S.has(u);if(!C&&a&&S.has(d))return m;if(null===o)return h;const x=i._selection;if(!(s.size>0||p.size>0))return null!==x?m:_;if(!1===C&&y!==g&&y===r&&k<n+e&&a)return m;if(1===s.size){if(function(t,e,n){const r=e._nodeMap.get(t),o=n._nodeMap.get(t),i=e._selection,c=n._selection;return!(l(i)&&l(c)&&\"element\"===i.anchor.type&&\"element\"===i.focus.type&&\"text\"===c.anchor.type&&\"text\"===c.focus.type||!f(r)||!f(o)||r.__parent!==o.__parent)&&JSON.stringify(e.read((()=>r.exportJSON())))===JSON.stringify(n.read((()=>o.exportJSON())))}(Array.from(s)[0],o,i))return m}return h})();return n=k,r=y,C}}function z(t){t.undoStack=[],t.redoStack=[],t.current=null}function v(u,d,l){const f=M(u,l),p=t(u.registerCommand(e,(()=>(function(t,e){const n=e.redoStack,r=e.undoStack;if(0!==r.length){const o=e.current,i=r.pop();null!==o&&(n.push(o),t.dispatchCommand(c,!0)),0===r.length&&t.dispatchCommand(s,!1),e.current=i||null,i&&i.editor.setEditorState(i.editorState,{tag:a})}}(u,d),!0)),n),u.registerCommand(r,(()=>(function(t,e){const n=e.redoStack,r=e.undoStack;if(0!==n.length){const o=e.current;null!==o&&(r.push(o),t.dispatchCommand(s,!0));const i=n.pop();0===n.length&&t.dispatchCommand(c,!1),e.current=i||null,i&&i.editor.setEditorState(i.editorState,{tag:a})}}(u,d),!0)),n),u.registerCommand(o,(()=>(z(d),!1)),n),u.registerCommand(i,(()=>(z(d),u.dispatchCommand(c,!1),u.dispatchCommand(s,!1),!0)),n),u.registerUpdateListener((({editorState:t,prevEditorState:e,dirtyLeaves:n,dirtyElements:r,tags:o})=>{const i=d.current,a=d.redoStack,l=d.undoStack,p=null===i?null:i.editorState;if(null!==i&&t===p)return;const m=f(e,t,i,n,r,o);if(m===h)0!==a.length&&(d.redoStack=[],u.dispatchCommand(c,!1)),null!==i&&(l.push({...i}),u.dispatchCommand(s,!0));else if(m===_)return;d.current={editor:u,editorState:t}})));return p}function E(){return{current:null,redoStack:[],undoStack:[]}}export{E as createEmptyHistoryState,v as registerHistory};\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport{addClassNamesToElement as t,isHTMLAnchorElement as e,$findMatchingParent as r}from\"@lexical/utils\";import{createCommand as n,ElementNode as i,$isRangeSelection as s,$applyNodeReplacement as l,$isElementNode as o,$getSelection as u,$isNodeSelection as a,$normalizeSelection__EXPERIMENTAL as c,$setSelection as _}from\"lexical\";const h=new Set([\"http:\",\"https:\",\"mailto:\",\"sms:\",\"tel:\"]);class g extends i{static getType(){return\"link\"}static clone(t){return new g(t.__url,{rel:t.__rel,target:t.__target,title:t.__title},t.__key)}constructor(t=\"\",e={},r){super(r);const{target:n=null,rel:i=null,title:s=null}=e;this.__url=t,this.__target=n,this.__rel=i,this.__title=s}createDOM(e){const r=document.createElement(\"a\");return this.updateLinkDOM(null,r,e),t(r,e.theme.link),r}updateLinkDOM(t,r,n){if(e(r)){t&&t.__url===this.__url||(r.href=this.sanitizeUrl(this.__url));for(const e of[\"target\",\"rel\",\"title\"]){const n=`__${e}`,i=this[n];t&&t[n]===i||(i?r[e]=i:r.removeAttribute(e))}}}updateDOM(t,e,r){return this.updateLinkDOM(t,e,r),!1}static importDOM(){return{a:t=>({conversion:f,priority:1})}}static importJSON(t){return d().updateFromJSON(t)}updateFromJSON(t){return super.updateFromJSON(t).setURL(t.url).setRel(t.rel||null).setTarget(t.target||null).setTitle(t.title||null)}sanitizeUrl(t){t=S(t);try{const e=new URL(S(t));if(!h.has(e.protocol))return\"about:blank\"}catch(e){return t}return t}exportJSON(){return{...super.exportJSON(),rel:this.getRel(),target:this.getTarget(),title:this.getTitle(),url:this.getURL()}}getURL(){return this.getLatest().__url}setURL(t){const e=this.getWritable();return e.__url=t,e}getTarget(){return this.getLatest().__target}setTarget(t){const e=this.getWritable();return e.__target=t,e}getRel(){return this.getLatest().__rel}setRel(t){const e=this.getWritable();return e.__rel=t,e}getTitle(){return this.getLatest().__title}setTitle(t){const e=this.getWritable();return e.__title=t,e}insertNewAfter(t,e=!0){const r=d(this.__url,{rel:this.__rel,target:this.__target,title:this.__title});return this.insertAfter(r,e),r}canInsertTextBefore(){return!1}canInsertTextAfter(){return!1}canBeEmpty(){return!1}isInline(){return!0}extractWithChild(t,e,r){if(!s(e))return!1;const n=e.anchor.getNode(),i=e.focus.getNode();return this.isParentOf(n)&&this.isParentOf(i)&&e.getTextContent().length>0}isEmailURI(){return this.__url.startsWith(\"mailto:\")}isWebSiteURI(){return this.__url.startsWith(\"https://\")||this.__url.startsWith(\"http://\")}}function f(t){let r=null;if(e(t)){const e=t.textContent;(null!==e&&\"\"!==e||t.children.length>0)&&(r=d(t.getAttribute(\"href\")||\"\",{rel:t.getAttribute(\"rel\"),target:t.getAttribute(\"target\"),title:t.getAttribute(\"title\")}))}return{node:r}}function d(t=\"\",e){return l(new g(t,e))}function p(t){return t instanceof g}class m extends g{constructor(t=\"\",e={},r){super(t,e,r),this.__isUnlinked=void 0!==e.isUnlinked&&null!==e.isUnlinked&&e.isUnlinked}static getType(){return\"autolink\"}static clone(t){return new m(t.__url,{isUnlinked:t.__isUnlinked,rel:t.__rel,target:t.__target,title:t.__title},t.__key)}getIsUnlinked(){return this.__isUnlinked}setIsUnlinked(t){const e=this.getWritable();return e.__isUnlinked=t,e}createDOM(t){return this.__isUnlinked?document.createElement(\"span\"):super.createDOM(t)}updateDOM(t,e,r){return super.updateDOM(t,e,r)||t.__isUnlinked!==this.__isUnlinked}static importJSON(t){return U().updateFromJSON(t)}updateFromJSON(t){return super.updateFromJSON(t).setIsUnlinked(t.isUnlinked||!1)}static importDOM(){return null}exportJSON(){return{...super.exportJSON(),isUnlinked:this.__isUnlinked}}insertNewAfter(t,e=!0){const r=this.getParentOrThrow().insertNewAfter(t,e);if(o(r)){const t=U(this.__url,{isUnlinked:this.__isUnlinked,rel:this.__rel,target:this.__target,title:this.__title});return r.append(t),t}return null}}function U(t=\"\",e){return l(new m(t,e))}function O(t){return t instanceof m}const k=n(\"TOGGLE_LINK_COMMAND\");function N(t,e){if(\"element\"===t.type){const r=t.getNode();o(r)||function(t,...e){const r=new URL(\"https://lexical.dev/docs/error\"),n=new URLSearchParams;n.append(\"code\",t);for(const t of e)n.append(\"v\",t);throw r.search=n.toString(),Error(`Minified Lexical error #${t}; visit ${r.toString()} for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`)}(252);return r.getChildren()[t.offset+e]||null}return null}function v(t,e={}){const{target:n,title:i}=e,l=void 0===e.rel?\"noreferrer\":e.rel,h=u();if(null===h||!s(h)&&!a(h))return;if(a(h)){const e=h.getNodes();if(0===e.length)return;return void e.forEach((e=>{if(null===t){const t=r(e,(t=>!O(t)&&p(t)));t&&(t.insertBefore(e),0===t.getChildren().length&&t.remove())}else{const i=r(e,(t=>!O(t)&&p(t)));if(i)i.setURL(t),void 0!==n&&i.setTarget(n),void 0!==l&&i.setRel(l);else{const r=d(t,{rel:l,target:n});e.insertBefore(r),r.append(e)}}}))}const g=h.extract();if(null===t)return void g.forEach((t=>{const e=r(t,(t=>!O(t)&&p(t)));if(e){const t=e.getChildren();for(let r=0;r<t.length;r++)e.insertBefore(t[r]);e.remove()}}));const f=new Set,m=e=>{f.has(e.getKey())||(f.add(e.getKey()),e.setURL(t),void 0!==n&&e.setTarget(n),void 0!==l&&e.setRel(l),void 0!==i&&e.setTitle(i))};if(1===g.length){const t=x(g[0],p);if(null!==t)return m(t)}!function(t){const e=u();if(!s(e))return t();const r=c(e),n=r.isBackward(),i=N(r.anchor,n?-1:0),l=N(r.focus,n?0:-1),o=t();if(i||l){const t=u();if(s(t)){const e=t.clone();if(i){const t=i.getParent();t&&e.anchor.set(t.getKey(),i.getIndexWithinParent()+(n?1:0),\"element\")}if(l){const t=l.getParent();t&&e.focus.set(t.getKey(),l.getIndexWithinParent()+(n?0:1),\"element\")}_(c(e))}}}((()=>{let e=null;for(const r of g){if(!r.isAttached())continue;const s=x(r,p);if(s){m(s);continue}if(o(r)){if(!r.isInline())continue;if(p(r)){if(!(O(r)||null!==e&&e.getParentOrThrow().isParentOf(r))){m(r),e=r;continue}for(const t of r.getChildren())r.insertBefore(t);r.remove();continue}}const u=r.getPreviousSibling();p(u)&&u.is(e)?u.append(r):(e=d(t,{rel:l,target:n,title:i}),r.insertAfter(e),e.append(r))}}))}const T=v;function x(t,e){let r=t;for(;null!==r&&null!==r.getParent()&&!e(r);)r=r.getParentOrThrow();return e(r)?r:null}const L=/^\\+?[0-9\\s()-]{5,}$/;function S(t){return t.match(/^[a-z][a-z0-9+.-]*:/i)||t.match(/^[/#.]/)?t:t.includes(\"@\")?`mailto:${t}`:L.test(t)?`tel:${t}`:`https://${t}`}export{U as $createAutoLinkNode,d as $createLinkNode,O as $isAutoLinkNode,p as $isLinkNode,v as $toggleLink,m as AutoLinkNode,g as LinkNode,k as TOGGLE_LINK_COMMAND,S as formatUrl,T as toggleLink};\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport{$getNearestNodeOfType as t,removeClassNamesFromElement as e,addClassNamesToElement as n,isHTMLElement as r,mergeRegister as i,$findMatchingParent as s,calculateZoomLevel as o}from\"@lexical/utils\";import{$getSelection as l,$isRangeSelection as c,$isRootOrShadowRoot as a,$createParagraphNode as g,$isElementNode as u,$isLeafNode as h,$setPointFromCaret as f,$normalizeCaret as d,$getChildCaret as p,ElementNode as m,buildImportMap as _,$isParagraphNode as y,$applyNodeReplacement as C,$createTextNode as T,createCommand as S,COMMAND_PRIORITY_LOW as v,KEY_ARROW_DOWN_COMMAND as x,KEY_ARROW_UP_COMMAND as k,KEY_ESCAPE_COMMAND as b,KEY_SPACE_COMMAND as N,$getNearestNodeFromDOMNode as L,KEY_ARROW_LEFT_COMMAND as F,getNearestEditorFromDOMNode as P,$getNodeByKey as A,INSERT_PARAGRAPH_COMMAND as O,$isTextNode as E,TextNode as w}from\"lexical\";import{getStyleObjectFromCSS as D}from\"@lexical/selection\";function I(t,...e){const n=new URL(\"https://lexical.dev/docs/error\"),r=new URLSearchParams;r.append(\"code\",t);for(const t of e)r.append(\"v\",t);throw n.search=r.toString(),Error(`Minified Lexical error #${t}; visit ${n.toString()} for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`)}function M(t){let e=1,n=t.getParent();for(;null!=n;){if(nt(n)){const t=n.getParent();if(at(t)){e++,n=t.getParent();continue}I(40)}return e}return e}function R(t){let e=t.getParent();at(e)||I(40);let n=e;for(;null!==n;)n=n.getParent(),at(n)&&(e=n);return e}function B(t){let e=[];const n=t.getChildren().filter(nt);for(let t=0;t<n.length;t++){const r=n[t],i=r.getFirstChild();at(i)?e=e.concat(B(i)):e.push(r)}return e}function K(t){return nt(t)&&at(t.getFirstChild())}function W(t){return et().append(t)}function J(t,e){return nt(t)&&(0===e.length||1===e.length&&t.is(e[0])&&0===t.getChildrenSize())}function $(t){const e=l();if(null!==e){let n=e.getNodes();if(c(e)){const r=e.getStartEndPoints();null===r&&I(143);const[i]=r,s=i.getNode(),o=s.getParent();if(a(s)){const t=s.getFirstChild();if(t)n=t.selectStart().getNodes();else{const t=g();s.append(t),n=t.select().getNodes()}}else if(J(s,n)){const e=ct(t);if(a(o)){s.replace(e);const t=et();u(s)&&(t.setFormat(s.getFormatType()),t.setIndent(s.getIndent())),e.append(t)}else if(nt(s)){const t=s.getParentOrThrow();U(e,t.getChildren()),t.replace(e)}return}}const r=new Set;for(let e=0;e<n.length;e++){const i=n[e];if(u(i)&&i.isEmpty()&&!nt(i)&&!r.has(i.getKey())){V(i,t);continue}let s=h(i)?i.getParent():nt(i)&&i.isEmpty()?i:null;for(;null!=s;){const e=s.getKey();if(at(s)){if(!r.has(e)){const n=ct(t);U(n,s.getChildren()),s.replace(n),r.add(e)}break}{const n=s.getParent();if(a(n)&&!r.has(e)){r.add(e),V(s,t);break}s=n}}}}}function U(t,e){t.splice(t.getChildrenSize(),0,e)}function V(t,e){if(at(t))return t;const n=t.getPreviousSibling(),r=t.getNextSibling(),i=et();let s;if(U(i,t.getChildren()),at(n)&&e===n.getListType())n.append(i),at(r)&&e===r.getListType()&&(U(n,r.getChildren()),r.remove()),s=n;else if(at(r)&&e===r.getListType())r.getFirstChildOrThrow().insertBefore(i),s=r;else{const n=ct(e);n.append(i),t.replace(n),s=n}return i.setFormat(t.getFormatType()),i.setIndent(t.getIndent()),t.remove(),s}function z(t,e){const n=t.getLastChild(),r=e.getFirstChild();n&&r&&K(n)&&K(r)&&(z(n.getFirstChild(),r.getFirstChild()),r.remove());const i=e.getChildren();i.length>0&&t.append(...i),e.remove()}function q(){const e=l();if(c(e)){const n=new Set,r=e.getNodes(),i=e.anchor.getNode();if(J(i,r))n.add(R(i));else for(let e=0;e<r.length;e++){const i=r[e];if(h(i)){const e=t(i,Y);null!=e&&n.add(R(e))}}for(const t of n){let n=t;const r=B(t);for(const t of r){const r=g().setTextStyle(e.style).setTextFormat(e.format);U(r,t.getChildren()),n.insertAfter(r),n=r,t.__key===e.anchor.key&&f(e.anchor,d(p(r,\"next\"))),t.__key===e.focus.key&&f(e.focus,d(p(r,\"next\"))),t.remove()}t.remove()}}}function H(t){const e=\"check\"!==t.getListType();let n=t.getStart();for(const r of t.getChildren())nt(r)&&(r.getValue()!==n&&r.setValue(n),e&&null!=r.getLatest().__checked&&r.setChecked(void 0),at(r.getFirstChild())||n++)}function X(t){const e=new Set;if(K(t)||e.has(t.getKey()))return;const n=t.getParent(),r=t.getNextSibling(),i=t.getPreviousSibling();if(K(r)&&K(i)){const n=i.getFirstChild();if(at(n)){n.append(t);const i=r.getFirstChild();if(at(i)){U(n,i.getChildren()),r.remove(),e.add(r.getKey())}}}else if(K(r)){const e=r.getFirstChild();if(at(e)){const n=e.getFirstChild();null!==n&&n.insertBefore(t)}}else if(K(i)){const e=i.getFirstChild();at(e)&&e.append(t)}else if(at(n)){const e=et().setTextFormat(t.getTextFormat()).setTextStyle(t.getTextStyle()),s=ct(n.getListType()).setTextFormat(n.getTextFormat()).setTextStyle(n.getTextStyle());e.append(s),s.append(t),i?i.insertAfter(e):r?r.insertBefore(e):n.append(e)}}function j(t){if(K(t))return;const e=t.getParent(),n=e?e.getParent():void 0;if(at(n?n.getParent():void 0)&&nt(n)&&at(e)){const r=e?e.getFirstChild():void 0,i=e?e.getLastChild():void 0;if(t.is(r))n.insertBefore(t),e.isEmpty()&&n.remove();else if(t.is(i))n.insertAfter(t),e.isEmpty()&&n.remove();else{const r=e.getListType(),i=et(),s=ct(r);i.append(s),t.getPreviousSiblings().forEach((t=>s.append(t)));const o=et(),l=ct(r);o.append(l),U(l,t.getNextSiblings()),n.insertBefore(i),n.insertAfter(o),n.replace(t)}}}function G(){const t=l();if(!c(t)||!t.isCollapsed())return!1;const e=t.anchor.getNode();if(!nt(e)||0!==e.getChildrenSize())return!1;const n=R(e),r=e.getParent();at(r)||I(40);const i=r.getParent();let s;if(a(i))s=g(),n.insertAfter(s);else{if(!nt(i))return!1;s=et(),i.insertAfter(s)}s.setTextStyle(t.style).setTextFormat(t.format).select();const o=e.getNextSiblings();if(o.length>0){const t=ct(r.getListType());if(nt(s)){const e=et();e.append(t),s.insertAfter(e)}else s.insertAfter(t);t.append(...o)}return function(t){let e=t;for(;null==e.getNextSibling()&&null==e.getPreviousSibling();){const t=e.getParent();if(null==t||!nt(t)&&!at(t))break;e=t}e.remove()}(e),!0}function Q(...t){const e=[];for(const n of t)if(n&&\"string\"==typeof n)for(const[t]of n.matchAll(/\\S+/g))e.push(t);return e}class Y extends m{$config(){return this.config(\"listitem\",{$transform:t=>{if(null==t.__checked)return;const e=t.getParent();at(e)&&\"check\"!==e.getListType()&&null!=t.getChecked()&&t.setChecked(void 0)},extends:m,importDOM:_({li:()=>({conversion:Z,priority:0})})})}constructor(t=1,e=void 0,n){super(n),this.__value=void 0===t?1:t,this.__checked=e}afterCloneFrom(t){super.afterCloneFrom(t),this.__value=t.__value,this.__checked=t.__checked}createDOM(t){const e=document.createElement(\"li\");return this.updateListItemDOM(null,e,t),e}updateListItemDOM(t,r,i){const s=this.getParent();at(s)&&\"check\"===s.getListType()&&function(t,e,n,r){at(e.getFirstChild())?(t.removeAttribute(\"role\"),t.removeAttribute(\"tabIndex\"),t.removeAttribute(\"aria-checked\")):(t.setAttribute(\"role\",\"checkbox\"),t.setAttribute(\"tabIndex\",\"-1\"),n&&e.__checked===n.__checked||t.setAttribute(\"aria-checked\",e.getChecked()?\"true\":\"false\"))}(r,this,t),r.value=this.__value,function(t,r,i){const s=[],o=[],l=r.list,c=l?l.listitem:void 0;let a;l&&l.nested&&(a=l.nested.listitem);void 0!==c&&s.push(...Q(c));if(l){const t=i.getParent(),e=at(t)&&\"check\"===t.getListType(),n=i.getChecked();e&&!n||o.push(l.listitemUnchecked),e&&n||o.push(l.listitemChecked),e&&s.push(n?l.listitemChecked:l.listitemUnchecked)}if(void 0!==a){const t=Q(a);i.getChildren().some((t=>at(t)))?s.push(...t):o.push(...t)}o.length>0&&e(t,...o);s.length>0&&n(t,...s)}(r,i.theme,this);const o=t?t.__style:\"\",l=this.__style;o!==l&&(\"\"===l?r.removeAttribute(\"style\"):r.style.cssText=l),function(t,e,n){const r=D(e.__textStyle);for(const e in r)t.style.setProperty(`--listitem-marker-${e}`,r[e]);if(n)for(const e in D(n.__textStyle))e in r||t.style.removeProperty(`--listitem-marker-${e}`)}(r,this,t)}updateDOM(t,e,n){const r=e;return this.updateListItemDOM(t,r,n),!1}updateFromJSON(t){return super.updateFromJSON(t).setValue(t.value).setChecked(t.checked)}exportDOM(t){const e=this.createDOM(t._config),n=this.getFormatType();n&&(e.style.textAlign=n);const r=this.getDirection();return r&&(e.dir=r),{element:e}}exportJSON(){return{...super.exportJSON(),checked:this.getChecked(),value:this.getValue()}}append(...t){for(let e=0;e<t.length;e++){const n=t[e];if(u(n)&&this.canMergeWith(n)){const t=n.getChildren();this.append(...t),n.remove()}else super.append(n)}return this}replace(t,e){if(nt(t))return super.replace(t);this.setIndent(0);const n=this.getParentOrThrow();if(!at(n))return t;if(n.__first===this.getKey())n.insertBefore(t);else if(n.__last===this.getKey())n.insertAfter(t);else{const e=ct(n.getListType());let r=this.getNextSibling();for(;r;){const t=r;r=r.getNextSibling(),e.append(t)}n.insertAfter(t),t.insertAfter(e)}return e&&(u(t)||I(139),this.getChildren().forEach((e=>{t.append(e)}))),this.remove(),0===n.getChildrenSize()&&n.remove(),t}insertAfter(t,e=!0){const n=this.getParentOrThrow();if(at(n)||I(39),nt(t))return super.insertAfter(t,e);const r=this.getNextSiblings();if(n.insertAfter(t,e),0!==r.length){const i=ct(n.getListType());r.forEach((t=>i.append(t))),t.insertAfter(i,e)}return t}remove(t){const e=this.getPreviousSibling(),n=this.getNextSibling();super.remove(t),e&&n&&K(e)&&K(n)&&(z(e.getFirstChild(),n.getFirstChild()),n.remove())}insertNewAfter(t,e=!0){const n=et().updateFromJSON(this.exportJSON()).setChecked(!this.getChecked()&&void 0);return this.insertAfter(n,e),n}collapseAtStart(t){const e=g();this.getChildren().forEach((t=>e.append(t)));const n=this.getParentOrThrow(),r=n.getParentOrThrow(),i=nt(r);if(1===n.getChildrenSize())if(i)n.remove(),r.select();else{n.insertBefore(e),n.remove();const r=t.anchor,i=t.focus,s=e.getKey();\"element\"===r.type&&r.getNode().is(this)&&r.set(s,r.offset,\"element\"),\"element\"===i.type&&i.getNode().is(this)&&i.set(s,i.offset,\"element\")}else n.insertBefore(e),this.remove();return!0}getValue(){return this.getLatest().__value}setValue(t){const e=this.getWritable();return e.__value=t,e}getChecked(){const t=this.getLatest();let e;const n=this.getParent();return at(n)&&(e=n.getListType()),\"check\"===e?Boolean(t.__checked):void 0}setChecked(t){const e=this.getWritable();return e.__checked=t,e}toggleChecked(){const t=this.getWritable();return t.setChecked(!t.__checked)}getIndent(){const t=this.getParent();if(null===t||!this.isAttached())return this.getLatest().__indent;let e=t.getParentOrThrow(),n=0;for(;nt(e);)e=e.getParentOrThrow().getParentOrThrow(),n++;return n}setIndent(t){\"number\"!=typeof t&&I(117),(t=Math.floor(t))>=0||I(199);let e=this.getIndent();for(;e!==t;)e<t?(X(this),e++):(j(this),e--);return this}canInsertAfter(t){return nt(t)}canReplaceWith(t){return nt(t)}canMergeWith(t){return nt(t)||y(t)}extractWithChild(t,e){if(!c(e))return!1;const n=e.anchor.getNode(),r=e.focus.getNode();return this.isParentOf(n)&&this.isParentOf(r)&&this.getTextContent().length===e.getTextContent().length}isParentRequired(){return!0}createParentElementNode(){return ct(\"bullet\")}canMergeWhenEmpty(){return!0}}function Z(t){if(t.classList.contains(\"task-list-item\"))for(const e of t.children)if(\"INPUT\"===e.tagName)return tt(e);const e=t.getAttribute(\"aria-checked\");return{node:et(\"true\"===e||\"false\"!==e&&void 0)}}function tt(t){if(!(\"checkbox\"===t.getAttribute(\"type\")))return{node:null};return{node:et(t.hasAttribute(\"checked\"))}}function et(t){return C(new Y(void 0,t))}function nt(t){return t instanceof Y}class rt extends m{$config(){return this.config(\"list\",{$transform:t=>{!function(t){const e=t.getNextSibling();at(e)&&t.getListType()===e.getListType()&&z(t,e)}(t),H(t)},extends:m,importDOM:_({ol:()=>({conversion:ot,priority:0}),ul:()=>({conversion:ot,priority:0})})})}constructor(t=\"number\",e=1,n){super(n);const r=lt[t]||t;this.__listType=r,this.__tag=\"number\"===r?\"ol\":\"ul\",this.__start=e}afterCloneFrom(t){super.afterCloneFrom(t),this.__listType=t.__listType,this.__tag=t.__tag,this.__start=t.__start}getTag(){return this.getLatest().__tag}setListType(t){const e=this.getWritable();return e.__listType=t,e.__tag=\"number\"===t?\"ol\":\"ul\",e}getListType(){return this.getLatest().__listType}getStart(){return this.getLatest().__start}setStart(t){const e=this.getWritable();return e.__start=t,e}createDOM(t,e){const n=this.__tag,r=document.createElement(n);return 1!==this.__start&&r.setAttribute(\"start\",String(this.__start)),r.__lexicalListType=this.__listType,it(r,t.theme,this),r}updateDOM(t,e,n){return t.__tag!==this.__tag||(it(e,n.theme,this),!1)}updateFromJSON(t){return super.updateFromJSON(t).setListType(t.listType).setStart(t.start)}exportDOM(t){const e=this.createDOM(t._config,t);return r(e)&&(1!==this.__start&&e.setAttribute(\"start\",String(this.__start)),\"check\"===this.__listType&&e.setAttribute(\"__lexicalListType\",\"check\")),{element:e}}exportJSON(){return{...super.exportJSON(),listType:this.getListType(),start:this.getStart(),tag:this.getTag()}}canBeEmpty(){return!1}canIndent(){return!1}splice(t,e,n){let r=n;for(let t=0;t<n.length;t++){const e=n[t];nt(e)||(r===n&&(r=[...n]),r[t]=et().append(!u(e)||at(e)||e.isInline()?e:T(e.getTextContent())))}return super.splice(t,e,r)}extractWithChild(t){return nt(t)}}function it(t,r,i){const s=[],o=[],l=r.list;if(void 0!==l){const t=l[`${i.__tag}Depth`]||[],e=M(i)-1,n=e%t.length,r=t[n],c=l[i.__tag];let a;const g=l.nested,u=l.checklist;if(void 0!==g&&g.list&&(a=g.list),void 0!==c&&s.push(c),void 0!==u&&\"check\"===i.__listType&&s.push(u),void 0!==r){s.push(...Q(r));for(let e=0;e<t.length;e++)e!==n&&o.push(i.__tag+e)}if(void 0!==a){const t=Q(a);e>1?s.push(...t):o.push(...t)}}o.length>0&&e(t,...o),s.length>0&&n(t,...s)}function st(t){const e=[];for(let n=0;n<t.length;n++){const r=t[n];if(nt(r)){e.push(r);const t=r.getChildren();t.length>1&&t.forEach((t=>{at(t)&&e.push(W(t))}))}else e.push(W(r))}return e}function ot(t){const e=t.nodeName.toLowerCase();let n=null;if(\"ol\"===e){n=ct(\"number\",t.start)}else\"ul\"===e&&(n=function(t){if(\"check\"===t.getAttribute(\"__lexicallisttype\")||t.classList.contains(\"contains-task-list\"))return!0;for(const e of t.childNodes)if(r(e)&&e.hasAttribute(\"aria-checked\"))return!0;return!1}(t)?ct(\"check\"):ct(\"bullet\"));return{after:st,node:n}}const lt={ol:\"number\",ul:\"bullet\"};function ct(t=\"number\",e=1){return C(new rt(t,e))}function at(t){return t instanceof rt}const gt=S(\"INSERT_CHECK_LIST_COMMAND\");function ut(t){return i(t.registerCommand(gt,(()=>($(\"check\"),!0)),v),t.registerCommand(x,(e=>mt(e,t,!1)),v),t.registerCommand(k,(e=>mt(e,t,!0)),v),t.registerCommand(b,(()=>{if(null!=pt()){const e=t.getRootElement();return null!=e&&e.focus(),!0}return!1}),v),t.registerCommand(N,(e=>{const n=pt();return!(null==n||!t.isEditable())&&(t.update((()=>{const t=L(n);nt(t)&&(e.preventDefault(),t.toggleChecked())})),!0)}),v),t.registerCommand(F,(e=>t.getEditorState().read((()=>{const n=l();if(c(n)&&n.isCollapsed()){const{anchor:r}=n,i=\"element\"===r.type;if(i||0===r.offset){const n=r.getNode(),o=s(n,(t=>u(t)&&!t.isInline()));if(nt(o)){const r=o.getParent();if(at(r)&&\"check\"===r.getListType()&&(i||o.getFirstDescendant()===n)){const n=t.getElementByKey(o.__key);if(null!=n&&document.activeElement!==n)return n.focus(),e.preventDefault(),!0}}}}return!1}))),v),t.registerRootListener(((t,e)=>{null!==t&&(t.addEventListener(\"click\",ft),t.addEventListener(\"pointerdown\",dt)),null!==e&&(e.removeEventListener(\"click\",ft),e.removeEventListener(\"pointerdown\",dt))})))}function ht(t,e){const n=t.target;if(!r(n))return;const i=n.firstChild;if(r(i)&&(\"UL\"===i.tagName||\"OL\"===i.tagName))return;const s=n.parentNode;if(!s||\"check\"!==s.__lexicalListType)return;const l=n.getBoundingClientRect(),c=o(n),a=t.clientX/c,g=window.getComputedStyle?window.getComputedStyle(n,\"::before\"):{width:\"0px\"},u=parseFloat(g.width),h=\"touch\"===t.pointerType?32:0;(\"rtl\"===n.dir?a<l.right+h&&a>l.right-u-h:a>l.left-h&&a<l.left+u+h)&&e()}function ft(t){ht(t,(()=>{if(r(t.target)){const e=t.target,n=P(e);null!=n&&n.isEditable()&&n.update((()=>{const t=L(e);nt(t)&&(e.focus(),t.toggleChecked())}))}}))}function dt(t){ht(t,(()=>{t.preventDefault()}))}function pt(){const t=document.activeElement;return r(t)&&\"LI\"===t.tagName&&null!=t.parentNode&&\"check\"===t.parentNode.__lexicalListType?t:null}function mt(t,e,n){const r=pt();return null!=r&&e.update((()=>{const i=L(r);if(!nt(i))return;const s=function(t,e){let n=e?t.getPreviousSibling():t.getNextSibling(),r=t;for(;null==n&&nt(r);)r=r.getParentOrThrow().getParent(),null!=r&&(n=e?r.getPreviousSibling():r.getNextSibling());for(;nt(n);){const t=e?n.getLastChild():n.getFirstChild();if(!at(t))return n;n=e?t.getLastChild():t.getFirstChild()}return null}(i,n);if(null!=s){s.selectStart();const n=e.getElementByKey(s.__key);null!=n&&(t.preventDefault(),setTimeout((()=>{n.focus()}),0))}})),!1}const _t=S(\"UPDATE_LIST_START_COMMAND\"),yt=S(\"INSERT_UNORDERED_LIST_COMMAND\"),Ct=S(\"INSERT_ORDERED_LIST_COMMAND\"),Tt=S(\"REMOVE_LIST_COMMAND\");function St(t){return i(t.registerCommand(Ct,(()=>($(\"number\"),!0)),v),t.registerCommand(_t,(t=>{const{listNodeKey:e,newStart:n}=t,r=A(e);return!!at(r)&&(\"number\"===r.getListType()&&(r.setStart(n),H(r)),!0)}),v),t.registerCommand(yt,(()=>($(\"bullet\"),!0)),v),t.registerCommand(Tt,(()=>(q(),!0)),v),t.registerCommand(O,(()=>G()),v),t.registerNodeTransform(Y,(t=>{const e=t.getFirstChild();if(e){if(E(e)){const n=e.getStyle(),r=e.getFormat();t.getTextStyle()!==n&&t.setTextStyle(n),t.getTextFormat()!==r&&t.setTextFormat(r)}}else{const e=l();c(e)&&(e.style!==t.getTextStyle()||e.format!==t.getTextFormat())&&e.isCollapsed()&&t.is(e.anchor.getNode())&&t.setTextStyle(e.style).setTextFormat(e.format)}})),t.registerNodeTransform(w,(t=>{const e=t.getParent();if(nt(e)&&t.is(e.getFirstChild())){const n=t.getStyle(),r=t.getFormat();n===e.getTextStyle()&&r===e.getTextFormat()||e.setTextStyle(n).setTextFormat(r)}})))}function vt(t){const e=t=>{const e=t.getParent();if(at(t.getFirstChild())||!at(e))return;const n=s(t,(t=>nt(t)&&at(t.getParent())&&nt(t.getPreviousSibling())));if(null===n&&t.getIndent()>0)t.setIndent(0);else if(nt(n)){const r=n.getPreviousSibling();if(nt(r)){const n=function(t){let e=t,n=e.getFirstChild();for(;at(n);){const t=n.getLastChild();if(!nt(t))break;e=t,n=e.getFirstChild()}return e}(r),i=n.getParent();if(at(i)){const n=M(i);n+1<M(e)&&t.setIndent(n)}}}};return t.registerNodeTransform(rt,(t=>{const n=[t];for(;n.length>0;){const t=n.shift();if(at(t))for(const r of t.getChildren())if(nt(r)){e(r);const t=r.getFirstChild();at(t)&&n.push(t)}}}))}function xt(t,e){t.update((()=>$(e)))}function kt(t){t.update((()=>q()))}export{et as $createListItemNode,ct as $createListNode,M as $getListDepth,G as $handleListInsertParagraph,$ as $insertList,nt as $isListItemNode,at as $isListNode,q as $removeList,gt as INSERT_CHECK_LIST_COMMAND,Ct as INSERT_ORDERED_LIST_COMMAND,yt as INSERT_UNORDERED_LIST_COMMAND,Y as ListItemNode,rt as ListNode,Tt as REMOVE_LIST_COMMAND,_t as UPDATE_LIST_START_COMMAND,xt as insertList,ut as registerCheckList,St as registerList,vt as registerListStrictIndentTransform,kt as removeList};\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport{$sliceSelectedTextNodeContent as e}from\"@lexical/selection\";import{isHTMLElement as n,isBlockDomNode as t}from\"@lexical/utils\";import{$getRoot as o,$isElementNode as l,$cloneWithProperties as r,$isTextNode as i,getRegisteredNode as s,isDocumentFragment as c,$isRootOrShadowRoot as u,$isBlockElementNode as f,$createLineBreakNode as a,ArtificialNode__DO_NOT_USE as d,isInlineDomNode as p,$createParagraphNode as h}from\"lexical\";function m(e,n){const t=n.body?n.body.childNodes:[];let o=[];const l=[];for(let n=0;n<t.length;n++){const r=t[n];if(!y.has(r.nodeName)){const n=w(r,e,l,!1);null!==n&&(o=o.concat(n))}}return function(e){for(const n of e)n.getNextSibling()instanceof d&&n.insertAfter(a());for(const n of e){const e=n.getChildren();for(const t of e)n.insertBefore(t);n.remove()}}(l),o}function g(e,n){if(\"undefined\"==typeof document||\"undefined\"==typeof window&&void 0===global.window)throw new Error(\"To use $generateHtmlFromNodes in headless mode please initialize a headless browser implementation such as JSDom before calling this function.\");const t=document.createElement(\"div\"),l=o().getChildren();for(let o=0;o<l.length;o++){x(e,l[o],t,n)}return t.innerHTML}function x(t,o,u,f=null){let a=null===f||o.isSelected(f);const d=l(o)&&o.excludeFromCopy(\"html\");let p=o;if(null!==f){let n=r(o);n=i(n)&&null!==f?e(f,n):n,p=n}const h=l(p)?p.getChildren():[],m=s(t,p.getType());let g;g=m&&void 0!==m.exportDOM?m.exportDOM(t,p):p.exportDOM(t);const{element:y,after:w}=g;if(!y)return!1;const b=document.createDocumentFragment();for(let e=0;e<h.length;e++){const n=h[e],r=x(t,n,b,f);!a&&l(o)&&r&&o.extractWithChild(n,f,\"html\")&&(a=!0)}if(a&&!d){if((n(y)||c(y))&&y.append(b),u.append(y),w){const e=w.call(p,y);e&&(c(y)?y.replaceChildren(e):y.replaceWith(e))}}else u.append(b);return a}const y=new Set([\"STYLE\",\"SCRIPT\"]);function w(e,n,o,r,i=new Map,s){let c=[];if(y.has(e.nodeName))return c;let m=null;const g=function(e,n){const{nodeName:t}=e,o=n._htmlConversions.get(t.toLowerCase());let l=null;if(void 0!==o)for(const n of o){const t=n(e);null!==t&&(null===l||(l.priority||0)<=(t.priority||0))&&(l=t)}return null!==l?l.conversion:null}(e,n),x=g?g(e):null;let C=null;if(null!==x){C=x.after;const n=x.node;if(m=Array.isArray(n)?n[n.length-1]:n,null!==m){for(const[,e]of i)if(m=e(m,s),!m)break;m&&c.push(...Array.isArray(n)?n:[m])}null!=x.forChild&&i.set(e.nodeName,x.forChild)}const S=e.childNodes;let v=[];const N=(null==m||!u(m))&&(null!=m&&f(m)||r);for(let e=0;e<S.length;e++)v.push(...w(S[e],n,o,N,new Map(i),m));return null!=C&&(v=C(v)),t(e)&&(v=b(e,v,N?()=>{const e=new d;return o.push(e),e}:h)),null==m?v.length>0?c=c.concat(v):t(e)&&function(e){if(null==e.nextSibling||null==e.previousSibling)return!1;return p(e.nextSibling)&&p(e.previousSibling)}(e)&&(c=c.concat(a())):l(m)&&m.append(...v),c}function b(e,n,t){const o=e.style.textAlign,l=[];let r=[];for(let e=0;e<n.length;e++){const i=n[e];if(f(i))o&&!i.getFormat()&&i.setFormat(o),l.push(i);else if(r.push(i),e===n.length-1||e<n.length-1&&f(n[e+1])){const e=t();e.setFormat(o),e.append(...r),l.push(e),r=[]}}return l}export{g as $generateHtmlFromNodes,m as $generateNodesFromDOM};\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport{$generateHtmlFromNodes as t,$generateNodesFromDOM as e}from\"@lexical/html\";import{$addNodeStyle as n,$sliceSelectedTextNodeContent as o}from\"@lexical/selection\";import{objectKlassEquals as r}from\"@lexical/utils\";import{$isRangeSelection as i,$getSelection as l,$createTabNode as s,SELECTION_INSERT_CLIPBOARD_NODES_COMMAND as c,$caretFromPoint as a,$isTextPointCaret as u,$getCaretRange as f,$getChildCaret as d,$getRoot as p,$isTextNode as g,$isElementNode as m,$parseSerializedNode as h,getDOMSelection as x,COPY_COMMAND as w,COMMAND_PRIORITY_CRITICAL as y,isSelectionWithinEditor as T,$getEditor as v,$cloneWithProperties as C}from\"lexical\";function D(t,...e){const n=new URL(\"https://lexical.dev/docs/error\"),o=new URLSearchParams;o.append(\"code\",t);for(const t of e)o.append(\"v\",t);throw n.search=o.toString(),Error(`Minified Lexical error #${t}; visit ${n.toString()} for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`)}function N(e,n=l()){return null==n&&D(166),i(n)&&n.isCollapsed()||0===n.getNodes().length?\"\":t(e,n)}function S(t,e=l()){return null==e&&D(166),i(e)&&e.isCollapsed()||0===e.getNodes().length?null:JSON.stringify(E(t,e))}function R(t,e){const n=t.getData(\"text/plain\")||t.getData(\"text/uri-list\");null!=n&&e.insertRawText(n)}function A(t,n,o){const r=t.getData(\"application/x-lexical-editor\");if(r)try{const t=JSON.parse(r);if(t.namespace===o._config.namespace&&Array.isArray(t.nodes)){return P(o,L(t.nodes),n)}}catch(t){}const c=t.getData(\"text/html\"),a=t.getData(\"text/plain\");if(c&&a!==c)try{const t=(new DOMParser).parseFromString(function(t){if(window.trustedTypes&&window.trustedTypes.createPolicy){return window.trustedTypes.createPolicy(\"lexical\",{createHTML:t=>t}).createHTML(t)}return t}(c),\"text/html\");return P(o,e(o,t),n)}catch(t){}const u=a||t.getData(\"text/uri-list\");if(null!=u)if(i(n)){const t=u.split(/(\\r?\\n|\\t)/);\"\"===t[t.length-1]&&t.pop();for(let e=0;e<t.length;e++){const n=l();if(i(n)){const o=t[e];\"\\n\"===o||\"\\r\\n\"===o?n.insertParagraph():\"\\t\"===o?n.insertNodes([s()]):n.insertText(o)}}}else n.insertRawText(u)}function P(t,e,n){t.dispatchCommand(c,{nodes:e,selection:n})||(n.insertNodes(e),function(t){if(i(t)&&t.isCollapsed()){const e=t.anchor;let n=null;const o=a(e,\"previous\");if(o)if(u(o))n=o.origin;else{const t=f(o,d(p(),\"next\").getFlipped());for(const e of t){if(g(e.origin)){n=e.origin;break}if(m(e.origin)&&!e.origin.isInline())break}}if(n&&g(n)){const e=n.getFormat(),o=n.getStyle();t.format===e&&t.style===o||(t.format=e,t.style=o,t.dirty=!0)}}}(n))}function _(t,e,n,r=[]){let i=null===e||n.isSelected(e);const l=m(n)&&n.excludeFromCopy(\"html\");let s=n;if(null!==e){let t=C(n);t=g(t)&&null!==e?o(e,t):t,s=t}const c=m(s)?s.getChildren():[],a=function(t){const e=t.exportJSON(),n=t.constructor;if(e.type!==n.getType()&&D(58,n.name),m(t)){const t=e.children;Array.isArray(t)||D(59,n.name)}return e}(s);if(g(s)){const t=s.__text;t.length>0?a.text=t:i=!1}for(let o=0;o<c.length;o++){const r=c[o],l=_(t,e,r,a.children);!i&&m(n)&&l&&n.extractWithChild(r,e,\"clone\")&&(i=!0)}if(i&&!l)r.push(a);else if(Array.isArray(a.children))for(let t=0;t<a.children.length;t++){const e=a.children[t];r.push(e)}return i}function E(t,e){const n=[],o=p().getChildren();for(let r=0;r<o.length;r++){_(t,e,o[r],n)}return{namespace:t._config.namespace,nodes:n}}function L(t){const e=[];for(let o=0;o<t.length;o++){const r=t[o],i=h(r);g(i)&&n(i),e.push(i)}return e}let b=null;async function F(t,e,n){if(null!==b)return!1;if(null!==e)return new Promise(((o,r)=>{t.update((()=>{o(M(t,e,n))}))}));const o=t.getRootElement(),i=t._window||window,l=window.document,s=x(i);if(null===o||null===s)return!1;const c=l.createElement(\"span\");c.style.cssText=\"position: fixed; top: -1000px;\",c.append(l.createTextNode(\"#\")),o.append(c);const a=new Range;return a.setStart(c,0),a.setEnd(c,1),s.removeAllRanges(),s.addRange(a),new Promise(((e,o)=>{const i=t.registerCommand(w,(o=>(r(o,ClipboardEvent)&&(i(),null!==b&&(window.clearTimeout(b),b=null),e(M(t,o,n))),!0)),y);b=window.setTimeout((()=>{i(),b=null,e(!1)}),50),l.execCommand(\"copy\"),c.remove()}))}function M(t,e,n){if(void 0===n){const e=x(t._window);if(!e)return!1;const o=e.anchorNode,r=e.focusNode;if(null!==o&&null!==r&&!T(t,o,r))return!1;const i=l();if(null===i)return!1;n=J(i)}e.preventDefault();const o=e.clipboardData;return null!==o&&(k(o,n),!0)}const O=[[\"text/html\",N],[\"application/x-lexical-editor\",S]];function J(t=l()){const e={\"text/plain\":t?t.getTextContent():\"\"};if(t){const n=v();for(const[o,r]of O){const i=r(n,t);null!==i&&(e[o]=i)}}return e}function k(t,e){for(const n in e){const o=e[n];void 0!==o&&t.setData(n,o)}}export{E as $generateJSONFromSelectedNodes,L as $generateNodesFromSerializedNodes,J as $getClipboardDataFromSelection,N as $getHtmlContent,S as $getLexicalContent,R as $insertDataTransferForPlainText,A as $insertDataTransferForRichText,P as $insertGeneratedNodes,F as copyToClipboard,k as setLexicalClipboardDataTransfer};\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport{$insertDataTransferForRichText as t,copyToClipboard as e}from\"@lexical/clipboard\";import{$shouldOverrideDefaultCharacterSelection as n,$moveCharacter as r}from\"@lexical/selection\";import{addClassNamesToElement as o,isHTMLElement as i,objectKlassEquals as s,mergeRegister as a,$findMatchingParent as c,$getNearestBlockElementAncestorOrThrow as u}from\"@lexical/utils\";import{createCommand as l,ElementNode as d,$createParagraphNode as m,$applyNodeReplacement as f,setNodeIndentFromDOM as g,CLICK_COMMAND as p,$getSelection as h,$isNodeSelection as C,COMMAND_PRIORITY_EDITOR as v,DELETE_CHARACTER_COMMAND as y,$isRangeSelection as D,DELETE_WORD_COMMAND as x,DELETE_LINE_COMMAND as w,CONTROLLED_TEXT_INSERTION_COMMAND as N,REMOVE_TEXT_COMMAND as E,FORMAT_TEXT_COMMAND as O,FORMAT_ELEMENT_COMMAND as T,$isElementNode as _,INSERT_LINE_BREAK_COMMAND as A,INSERT_PARAGRAPH_COMMAND as F,INSERT_TAB_COMMAND as S,$insertNodes as I,$createTabNode as P,INDENT_CONTENT_COMMAND as M,OUTDENT_CONTENT_COMMAND as b,KEY_ARROW_UP_COMMAND as K,$getAdjacentNode as k,$isDecoratorNode as J,KEY_ARROW_DOWN_COMMAND as L,KEY_ARROW_LEFT_COMMAND as R,KEY_ARROW_RIGHT_COMMAND as W,KEY_BACKSPACE_COMMAND as z,KEY_DELETE_COMMAND as q,KEY_ENTER_COMMAND as X,KEY_ESCAPE_COMMAND as Y,DROP_COMMAND as B,$getNearestNodeFromDOMNode as G,$createRangeSelection as V,$isTextNode as j,$normalizeSelection__EXPERIMENTAL as H,$setSelection as Q,DRAGSTART_COMMAND as U,DRAGOVER_COMMAND as Z,SELECT_ALL_COMMAND as $,$selectAll as tt,COPY_COMMAND as et,CUT_COMMAND as nt,PASTE_COMMAND as rt,isDOMNode as ot,isSelectionCapturedInDecoratorInput as it,KEY_SPACE_COMMAND as st,KEY_TAB_COMMAND as at,PASTE_TAG as ct,$getRoot as ut,$isRootNode as lt}from\"lexical\";function dt(t,e){if(void 0!==document.caretRangeFromPoint){const n=document.caretRangeFromPoint(t,e);return null===n?null:{node:n.startContainer,offset:n.startOffset}}if(\"undefined\"!==document.caretPositionFromPoint){const n=document.caretPositionFromPoint(t,e);return null===n?null:{node:n.offsetNode,offset:n.offset}}return null}const mt=\"undefined\"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement,ft=mt&&\"documentMode\"in document?document.documentMode:null,gt=!(!mt||!(\"InputEvent\"in window)||ft)&&\"getTargetRanges\"in new window.InputEvent(\"input\"),pt=mt&&/Version\\/[\\d.]+.*Safari/.test(navigator.userAgent),ht=mt&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,Ct=mt&&/^(?=.*Chrome).*/i.test(navigator.userAgent),vt=mt&&/AppleWebKit\\/[\\d.]+/.test(navigator.userAgent)&&!Ct,yt=l(\"DRAG_DROP_PASTE_FILE\");class Dt extends d{static getType(){return\"quote\"}static clone(t){return new Dt(t.__key)}createDOM(t){const e=document.createElement(\"blockquote\");return o(e,t.theme.quote),e}updateDOM(t,e){return!1}static importDOM(){return{blockquote:t=>({conversion:Tt,priority:0})}}exportDOM(t){const{element:e}=super.exportDOM(t);if(i(e)){this.isEmpty()&&e.append(document.createElement(\"br\"));const t=this.getFormatType();t&&(e.style.textAlign=t);const n=this.getDirection();n&&(e.dir=n)}return{element:e}}static importJSON(t){return xt().updateFromJSON(t)}insertNewAfter(t,e){const n=m(),r=this.getDirection();return n.setDirection(r),this.insertAfter(n,e),n}collapseAtStart(){const t=m();return this.getChildren().forEach((e=>t.append(e))),this.replace(t),!0}canMergeWhenEmpty(){return!0}}function xt(){return f(new Dt)}function wt(t){return t instanceof Dt}class Nt extends d{static getType(){return\"heading\"}static clone(t){return new Nt(t.__tag,t.__key)}constructor(t,e){super(e),this.__tag=t}getTag(){return this.__tag}setTag(t){const e=this.getWritable();return this.__tag=t,e}createDOM(t){const e=this.__tag,n=document.createElement(e),r=t.theme.heading;if(void 0!==r){const t=r[e];o(n,t)}return n}updateDOM(t,e,n){return t.__tag!==this.__tag}static importDOM(){return{h1:t=>({conversion:Ot,priority:0}),h2:t=>({conversion:Ot,priority:0}),h3:t=>({conversion:Ot,priority:0}),h4:t=>({conversion:Ot,priority:0}),h5:t=>({conversion:Ot,priority:0}),h6:t=>({conversion:Ot,priority:0}),p:t=>{const e=t.firstChild;return null!==e&&Et(e)?{conversion:()=>({node:null}),priority:3}:null},span:t=>Et(t)?{conversion:t=>({node:_t(\"h1\")}),priority:3}:null}}exportDOM(t){const{element:e}=super.exportDOM(t);if(i(e)){this.isEmpty()&&e.append(document.createElement(\"br\"));const t=this.getFormatType();t&&(e.style.textAlign=t);const n=this.getDirection();n&&(e.dir=n)}return{element:e}}static importJSON(t){return _t(t.tag).updateFromJSON(t)}updateFromJSON(t){return super.updateFromJSON(t).setTag(t.tag)}exportJSON(){return{...super.exportJSON(),tag:this.getTag()}}insertNewAfter(t,e=!0){const n=t?t.anchor.offset:0,r=this.getLastDescendant(),o=!r||t&&t.anchor.key===r.getKey()&&n===r.getTextContentSize()||!t?m():_t(this.getTag()),i=this.getDirection();if(o.setDirection(i),this.insertAfter(o,e),0===n&&!this.isEmpty()&&t){const t=m();t.select(),this.replace(t,!0)}return o}collapseAtStart(){const t=this.isEmpty()?m():_t(this.getTag());return this.getChildren().forEach((e=>t.append(e))),this.replace(t),!0}extractWithChild(){return!0}}function Et(t){return\"span\"===t.nodeName.toLowerCase()&&\"26pt\"===t.style.fontSize}function Ot(t){const e=t.nodeName.toLowerCase();let n=null;return\"h1\"!==e&&\"h2\"!==e&&\"h3\"!==e&&\"h4\"!==e&&\"h5\"!==e&&\"h6\"!==e||(n=_t(e),null!==t.style&&(g(t,n),n.setFormat(t.style.textAlign))),{node:n}}function Tt(t){const e=xt();return null!==t.style&&(e.setFormat(t.style.textAlign),g(t,e)),{node:e}}function _t(t=\"h1\"){return f(new Nt(t))}function At(t){return t instanceof Nt}function Ft(t){let e=null;if(s(t,DragEvent)?e=t.dataTransfer:s(t,ClipboardEvent)&&(e=t.clipboardData),null===e)return[!1,[],!1];const n=e.types,r=n.includes(\"Files\"),o=n.includes(\"text/html\")||n.includes(\"text/plain\");return[r,Array.from(e.files),o]}function St(t){const e=h();if(!D(e))return!1;const n=new Set,r=e.getNodes();for(let e=0;e<r.length;e++){const o=r[e],i=o.getKey();if(n.has(i))continue;const s=c(o,(t=>_(t)&&!t.isInline()));if(null===s)continue;const a=s.getKey();s.canIndent()&&!n.has(a)&&(n.add(a),t(s))}return n.size>0}function It(t){const e=G(t);return J(e)}function Pt(t){for(const e of[\"lowercase\",\"uppercase\",\"capitalize\"])t.hasFormat(e)&&t.toggleFormat(e)}function Mt(o){return a(o.registerCommand(p,(t=>{const e=h();return!!C(e)&&(e.clear(),!0)}),v),o.registerCommand(y,(t=>{const e=h();return D(e)?(e.deleteCharacter(t),!0):!!C(e)&&(e.deleteNodes(),!0)}),v),o.registerCommand(x,(t=>{const e=h();return!!D(e)&&(e.deleteWord(t),!0)}),v),o.registerCommand(w,(t=>{const e=h();return!!D(e)&&(e.deleteLine(t),!0)}),v),o.registerCommand(N,(e=>{const n=h();if(\"string\"==typeof e)null!==n&&n.insertText(e);else{if(null===n)return!1;const r=e.dataTransfer;if(null!=r)t(r,n,o);else if(D(n)){const t=e.data;return t&&n.insertText(t),!0}}return!0}),v),o.registerCommand(E,(()=>{const t=h();return!!D(t)&&(t.removeText(),!0)}),v),o.registerCommand(O,(t=>{const e=h();return!!D(e)&&(e.formatText(t),!0)}),v),o.registerCommand(T,(t=>{const e=h();if(!D(e)&&!C(e))return!1;const n=e.getNodes();for(const e of n){const n=c(e,(t=>_(t)&&!t.isInline()));null!==n&&n.setFormat(t)}return!0}),v),o.registerCommand(A,(t=>{const e=h();return!!D(e)&&(e.insertLineBreak(t),!0)}),v),o.registerCommand(F,(()=>{const t=h();return!!D(t)&&(t.insertParagraph(),!0)}),v),o.registerCommand(S,(()=>(I([P()]),!0)),v),o.registerCommand(M,(()=>St((t=>{const e=t.getIndent();t.setIndent(e+1)}))),v),o.registerCommand(b,(()=>St((t=>{const e=t.getIndent();e>0&&t.setIndent(Math.max(0,e-1))}))),v),o.registerCommand(K,(t=>{const e=h();if(C(e)){const t=e.getNodes();if(t.length>0)return t[0].selectPrevious(),!0}else if(D(e)){const n=k(e.focus,!0);if(!t.shiftKey&&J(n)&&!n.isIsolated()&&!n.isInline())return n.selectPrevious(),t.preventDefault(),!0}return!1}),v),o.registerCommand(L,(t=>{const e=h();if(C(e)){const t=e.getNodes();if(t.length>0)return t[0].selectNext(0,0),!0}else if(D(e)){if(function(t){const e=t.focus;return\"root\"===e.key&&e.offset===ut().getChildrenSize()}(e))return t.preventDefault(),!0;const n=k(e.focus,!1);if(!t.shiftKey&&J(n)&&!n.isIsolated()&&!n.isInline())return n.selectNext(),t.preventDefault(),!0}return!1}),v),o.registerCommand(R,(t=>{const e=h();if(C(e)){const n=e.getNodes();if(n.length>0)return t.preventDefault(),n[0].selectPrevious(),!0}if(!D(e))return!1;if(n(e,!0)){const n=t.shiftKey;return t.preventDefault(),r(e,n,!0),!0}return!1}),v),o.registerCommand(W,(t=>{const e=h();if(C(e)){const n=e.getNodes();if(n.length>0)return t.preventDefault(),n[0].selectNext(0,0),!0}if(!D(e))return!1;const o=t.shiftKey;return!!n(e,!1)&&(t.preventDefault(),r(e,o,!1),!0)}),v),o.registerCommand(z,(t=>{if(It(t.target))return!1;const e=h();if(D(e)){if(function(t){if(!t.isCollapsed())return!1;const{anchor:e}=t;if(0!==e.offset)return!1;const n=e.getNode();if(lt(n))return!1;const r=u(n);return r.getIndent()>0&&(r.is(n)||n.is(r.getFirstDescendant()))}(e))return t.preventDefault(),o.dispatchCommand(b,void 0);if(ht&&\"ko-KR\"===navigator.language)return!1}else if(!C(e))return!1;return t.preventDefault(),o.dispatchCommand(y,!0)}),v),o.registerCommand(q,(t=>{if(It(t.target))return!1;const e=h();return!(!D(e)&&!C(e))&&(t.preventDefault(),o.dispatchCommand(y,!1))}),v),o.registerCommand(X,(t=>{const e=h();if(!D(e))return!1;if(Pt(e),null!==t){if((ht||pt||vt)&&gt)return!1;if(t.preventDefault(),t.shiftKey)return o.dispatchCommand(A,!1)}return o.dispatchCommand(F,void 0)}),v),o.registerCommand(Y,(()=>{const t=h();return!!D(t)&&(o.blur(),!0)}),v),o.registerCommand(B,(t=>{const[,e]=Ft(t);if(e.length>0){const n=dt(t.clientX,t.clientY);if(null!==n){const{offset:t,node:r}=n,i=G(r);if(null!==i){const e=V();if(j(i))e.anchor.set(i.getKey(),t,\"text\"),e.focus.set(i.getKey(),t,\"text\");else{const t=i.getParentOrThrow().getKey(),n=i.getIndexWithinParent()+1;e.anchor.set(t,n,\"element\"),e.focus.set(t,n,\"element\")}const n=H(e);Q(n)}o.dispatchCommand(yt,e)}return t.preventDefault(),!0}const n=h();return!!D(n)}),v),o.registerCommand(U,(t=>{const[e]=Ft(t),n=h();return!(e&&!D(n))}),v),o.registerCommand(Z,(t=>{const[e]=Ft(t),n=h();if(e&&!D(n))return!1;const r=dt(t.clientX,t.clientY);if(null!==r){const e=G(r.node);J(e)&&t.preventDefault()}return!0}),v),o.registerCommand($,(()=>(tt(),!0)),v),o.registerCommand(et,(t=>(e(o,s(t,ClipboardEvent)?t:null),!0)),v),o.registerCommand(nt,(t=>(async function(t,n){await e(n,s(t,ClipboardEvent)?t:null),n.update((()=>{const t=h();D(t)?t.removeText():C(t)&&t.getNodes().forEach((t=>t.remove()))}))}(t,o),!0)),v),o.registerCommand(rt,(e=>{const[,n,r]=Ft(e);if(n.length>0&&!r)return o.dispatchCommand(yt,n),!0;if(ot(e.target)&&it(e.target))return!1;return null!==h()&&(function(e,n){e.preventDefault(),n.update((()=>{const r=h(),o=s(e,InputEvent)||s(e,KeyboardEvent)?null:e.clipboardData;null!=o&&null!==r&&t(o,r,n)}),{tag:ct})}(e,o),!0)}),v),o.registerCommand(st,(t=>{const e=h();return D(e)&&Pt(e),!1}),v),o.registerCommand(at,(t=>{const e=h();return D(e)&&Pt(e),!1}),v))}export{_t as $createHeadingNode,xt as $createQuoteNode,At as $isHeadingNode,wt as $isQuoteNode,yt as DRAG_DROP_PASTE,Nt as HeadingNode,Dt as QuoteNode,Ft as eventFiles,Mt as registerRichText};\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport{$isParagraphNode as t,$isTextNode as e,$getRoot as n,$isElementNode as o,$isDecoratorNode as r,$isLineBreakNode as i,$getSelection as s,$createTextNode as l,$createParagraphNode as c,$createLineBreakNode as f,COLLABORATION_TAG as a,HISTORIC_TAG as u,$isRangeSelection as g,$isRootOrShadowRoot as p,$createRangeSelection as d,$setSelection as m}from\"lexical\";import{$isListNode as h,$isListItemNode as x,ListNode as T,ListItemNode as C,$createListItemNode as E,$createListNode as y}from\"@lexical/list\";import{$isQuoteNode as v,HeadingNode as S,$isHeadingNode as $,QuoteNode as b,$createQuoteNode as F,$createHeadingNode as I}from\"@lexical/rich-text\";import{$findMatchingParent as N}from\"@lexical/utils\";import{$isCodeNode as w,CodeNode as k,$createCodeNode as L}from\"@lexical/code\";import{LinkNode as P,$isLinkNode as R,$isAutoLinkNode as _,$createLinkNode as B}from\"@lexical/link\";function M(t,e){const n={};for(const o of t){const t=e(o);t&&(n[t]?n[t].push(o):n[t]=[o])}return n}function j(t){const e=M(t,(t=>t.type));return{element:e.element||[],multilineElement:e[\"multiline-element\"]||[],textFormat:e[\"text-format\"]||[],textMatch:e[\"text-match\"]||[]}}const A=/[!-/:-@[-`{-~\\s]/,z=/^\\s{0,3}$/;function U(n){if(!t(n))return!1;const o=n.getFirstChild();return null==o||1===n.getChildrenSize()&&e(o)&&z.test(o.getTextContent())}function W(t,e,n,i){for(const o of e){if(!o.export)continue;const e=o.export(t,(t=>D(t,n,i)));if(null!=e)return e}return o(t)?D(t,n,i):r(t)?t.getTextContent():null}function D(t,n,s,l,c){const f=[],a=t.getChildren();l||(l=[]),c||(c=[]);t:for(const t of a){for(const e of s){if(!e.export)continue;const o=e.export(t,(t=>D(t,n,s,l,[...c,...l])),((t,e)=>O(t,e,n,l,c)));if(null!=o){f.push(o);continue t}}i(t)?f.push(\"\\n\"):e(t)?f.push(O(t,t.getTextContent(),n,l,c)):o(t)?f.push(D(t,n,s,l,c)):r(t)&&f.push(t.getTextContent())}return f.join(\"\")}function O(t,e,n,o,r){let i=0===t.getFormat()?e:function(t){return t.replace(/^\\s+|\\s+$/g,(t=>[...t].map((t=>\"&#\"+t.codePointAt(0)+\";\")).join(\"\")))}(e);t.hasFormat(\"code\")||(i=i.replace(/([*_`~\\\\])/g,\"\\\\$1\"));let s=\"\",l=\"\",c=\"\";const f=q(t,!0),a=q(t,!1),u=new Set;for(const e of n){const n=e.format[0],r=e.tag;G(t,n)&&!u.has(n)&&(u.add(n),G(f,n)&&o.find((t=>t.tag===r))||(o.push({format:n,tag:r}),s+=r))}for(let e=0;e<o.length;e++){const n=G(t,o[e].format),i=G(a,o[e].format);if(n&&i)continue;const s=[...o];for(;s.length>e;){const t=s.pop();r&&t&&r.find((e=>e.tag===t.tag))||(t&&\"string\"==typeof t.tag&&(n?i||(c+=t.tag):l+=t.tag),o.pop())}break}return i=s+i+c,l+i}function q(t,n){let r=n?t.getPreviousSibling():t.getNextSibling();if(!r){const e=t.getParentOrThrow();e.isInline()&&(r=n?e.getPreviousSibling():e.getNextSibling())}for(;r;){if(o(r)){if(!r.isInline())break;const t=n?r.getLastDescendant():r.getFirstDescendant();if(e(t))return t;r=n?r.getPreviousSibling():r.getNextSibling()}if(e(r))return r;if(!o(r))return null}return null}function G(t,n){return e(t)&&t.hasFormat(n)}function H(t,e){const n=function(t,e){const n=t.match(e.openTagsRegExp);if(null==n)return null;for(const o of n){const n=o.replace(/^\\s/,\"\"),r=e.fullMatchRegExpByTag[n];if(null==r)continue;const i=t.match(r),s=e.transformersByTag[n];if(null!=i&&null!=s){if(!1!==s.intraword)return i;const{index:e=0}=i,n=t[e-1],o=t[e+i[0].length];if((!n||A.test(n))&&(!o||A.test(o)))return i}}return null}(t.getTextContent(),e);if(!n)return null;const o=n.index||0;return{endIndex:o+n[0].length,match:n,startIndex:o,transformer:e.transformersByTag[n[1]]}}function J(t){return e(t)&&!t.hasFormat(\"code\")}function K(t,e,n){let o=H(t,e),r=function(t,e){const n=t;let o,r,i,s;for(const t of e){if(!t.replace||!t.importRegExp)continue;const e=n.getTextContent().match(t.importRegExp);if(!e)continue;const l=e.index||0,c=t.getEndIndex?t.getEndIndex(n,e):l+e[0].length;!1!==c&&(void 0===o||void 0===r||l<o&&c>r)&&(o=l,r=c,i=t,s=e)}return void 0===o||void 0===r||void 0===i||void 0===s?null:{endIndex:r,match:s,startIndex:o,transformer:i}}(t,n);if(o&&r&&(o.startIndex<=r.startIndex&&o.endIndex>=r.endIndex?r=null:o=null),o){const r=function(t,e,n,o,r){const i=t.getTextContent();let s,l,c;if(r[0]===i?s=t:0===e?[s,l]=t.splitText(n):[c,s,l]=t.splitText(e,n),s.setTextContent(r[2]),o)for(const t of o.format)s.hasFormat(t)||s.toggleFormat(t);return{nodeAfter:l,nodeBefore:c,transformedNode:s}}(t,o.startIndex,o.endIndex,o.transformer,o.match);J(r.nodeAfter)&&K(r.nodeAfter,e,n),J(r.nodeBefore)&&K(r.nodeBefore,e,n),J(r.transformedNode)&&K(r.transformedNode,e,n)}else if(r){const o=function(t,e,n,o,r){let i,s,l;return 0===e?[i,s]=t.splitText(n):[l,i,s]=t.splitText(e,n),o.replace?{nodeAfter:s,nodeBefore:l,transformedNode:o.replace(i,r)||void 0}:null}(t,r.startIndex,r.endIndex,r.transformer,r.match);if(!o)return;J(o.nodeAfter)&&K(o.nodeAfter,e,n),J(o.nodeBefore)&&K(o.nodeBefore,e,n),J(o.transformedNode)&&K(o.transformedNode,e,n)}const i=t.getTextContent().replace(/\\\\([*_`~\\\\])/g,\"$1\").replace(/&#(\\d+);/g,((t,e)=>String.fromCodePoint(e)));t.setTextContent(i)}function Q(t,e=!1){const o=j(t),r=function(t){const e={},n={},o=[],r=\"(?<![\\\\\\\\])\";for(const r of t){const{tag:t}=r;e[t]=r;const i=t.replace(/(\\*|\\^|\\+)/g,\"\\\\$1\");o.push(i),1===t.length?n[t]=new RegExp(`(?<![\\\\\\\\${i}])(${i})((\\\\\\\\${i})?.*?[^${i}\\\\s](\\\\\\\\${i})?)((?<!\\\\\\\\)|(?<=\\\\\\\\\\\\\\\\))(${i})(?![\\\\\\\\${i}])`):n[t]=new RegExp(`(?<!\\\\\\\\)(${i})((\\\\\\\\${i})?.*?[^\\\\s](\\\\\\\\${i})?)((?<!\\\\\\\\)|(?<=\\\\\\\\\\\\\\\\))(${i})(?!\\\\\\\\)`)}return{fullMatchRegExpByTag:n,openTagsRegExp:new RegExp(`${r}(${o.join(\"|\")})`,\"g\"),transformersByTag:e}}(o.textFormat);return(t,i)=>{const l=t.split(\"\\n\"),c=l.length,f=i||n();f.clear();for(let t=0;t<c;t++){const n=l[t],[i,s]=V(l,t,o.multilineElement,f);i?t=s:X(n,f,o.element,r,o.textMatch,e)}const a=f.getChildren();for(const t of a)!e&&U(t)&&f.getChildrenSize()>1&&t.remove();null!==s()&&f.selectStart()}}function V(t,e,n,o){for(const r of n){const{handleImportAfterStartMatch:n,regExpEnd:i,regExpStart:s,replace:l}=r,c=t[e].match(s);if(!c)continue;if(n){const i=n({lines:t,rootNode:o,startLineIndex:e,startMatch:c,transformer:r});if(null===i)continue;if(i)return i}const f=\"object\"==typeof i&&\"regExp\"in i?i.regExp:i,a=i&&\"object\"==typeof i&&\"optional\"in i?i.optional:!i;let u=e;const g=t.length;for(;u<g;){const n=f?t[u].match(f):null;if(!n&&(!a||a&&u<g-1)){u++;continue}if(n&&e===u&&n.index===c.index){u++;continue}const r=[];if(n&&e===u)r.push(t[e].slice(c[0].length,-n[0].length));else for(let o=e;o<=u;o++)if(o===e){const e=t[o].slice(c[0].length);r.push(e)}else if(o===u&&n){const e=t[o].slice(0,-n[0].length);r.push(e)}else r.push(t[o]);if(!1!==l(o,null,c,n,r,!0))return[!0,u];break}}return[!1,e]}function X(e,n,o,r,i,s){const a=l(e),u=c();u.append(a),n.append(u);for(const{regExp:t,replace:n}of o){const o=e.match(t);if(o&&(a.setTextContent(e.slice(o[0].length)),!1!==n(u,[a],o,!0)))break}if(K(a,r,i),u.isAttached()&&e.length>0){const e=u.getPreviousSibling();if(!s&&(t(e)||v(e)||h(e))){let t=e;if(h(e)){const n=e.getLastDescendant();t=null==n?null:N(n,x)}null!=t&&t.getTextContentSize()>0&&(t.splice(t.getChildrenSize(),0,[f(),...u.getChildren()]),u.remove())}}}function Y(t,...e){const n=new URL(\"https://lexical.dev/docs/error\"),o=new URLSearchParams;o.append(\"code\",t);for(const t of e)o.append(\"v\",t);throw n.search=o.toString(),Error(`Minified Lexical error #${t}; visit ${n.toString()} for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`)}function Z(t,e,n){const o=n.length;for(let r=e;r>=o;r--){const e=r-o;if(tt(t,e,n,0,o)&&\" \"!==t[e+o])return e}return-1}function tt(t,e,n,o,r){for(let i=0;i<r;i++)if(t[e+i]!==n[o+i])return!1;return!0}function et(t,n=Bt){const o=j(n),r=M(o.textFormat,(({tag:t})=>t[t.length-1])),l=M(o.textMatch,(({trigger:t})=>t));for(const e of n){const n=e.type;if(\"element\"===n||\"text-match\"===n||\"multiline-element\"===n){const n=e.dependencies;for(const e of n)t.hasNode(e)||Y(173,e.getType())}}const c=(t,n,c)=>{(function(t,e,n,o){const r=t.getParent();if(!p(r)||t.getFirstChild()!==e)return!1;const i=e.getTextContent();if(\" \"!==i[n-1])return!1;for(const{regExp:r,replace:s}of o){const o=i.match(r);if(o&&o[0].length===(o[0].endsWith(\" \")?n:n-1)){const r=e.getNextSiblings(),[i,l]=e.splitText(n);if(!1!==s(t,l?[l,...r]:r,o,!1))return i.remove(),!0}}return!1})(t,n,c,o.element)||function(t,e,n,o){const r=t.getParent();if(!p(r)||t.getFirstChild()!==e)return!1;const i=e.getTextContent();if(\" \"!==i[n-1])return!1;for(const{regExpStart:r,replace:s,regExpEnd:l}of o){if(l&&!(\"optional\"in l)||l&&\"optional\"in l&&!l.optional)continue;const o=i.match(r);if(o&&o[0].length===(o[0].endsWith(\" \")?n:n-1)){const r=e.getNextSiblings(),[i,l]=e.splitText(n);if(!1!==s(t,l?[l,...r]:r,o,null,null,!1))return i.remove(),!0}}return!1}(t,n,c,o.multilineElement)||function(t,e,n){let o=t.getTextContent();const r=n[o[e-1]];if(null==r)return!1;e<o.length&&(o=o.slice(0,e));for(const e of r){if(!e.replace||!e.regExp)continue;const n=o.match(e.regExp);if(null===n)continue;const r=n.index||0,i=r+n[0].length;let s;return 0===r?[s]=t.splitText(i):[,s]=t.splitText(r,i),s.selectNext(0,0),e.replace(s,n),!0}return!1}(n,c,l)||function(t,n,o){const r=t.getTextContent(),l=n-1,c=r[l],f=o[c];if(!f)return!1;for(const n of f){const{tag:o}=n,f=o.length,a=l-f+1;if(f>1&&!tt(r,a,o,0,f))continue;if(\" \"===r[a-1])continue;const u=r[l+1];if(!1===n.intraword&&u&&!A.test(u))continue;const p=t;let h=p,x=Z(r,a,o),T=h;for(;x<0&&(T=T.getPreviousSibling())&&!i(T);)if(e(T)){if(T.hasFormat(\"code\"))continue;const t=T.getTextContent();h=T,x=Z(t,t.length,o)}if(x<0)continue;if(h===p&&x+f===a)continue;const C=h.getTextContent();if(x>0&&C[x-1]===c)continue;const E=C[x-1];if(!1===n.intraword&&E&&!A.test(E))continue;const y=p.getTextContent(),v=y.slice(0,a)+y.slice(l+1);p.setTextContent(v);const S=h===p?v:C;h.setTextContent(S.slice(0,x)+S.slice(x+f));const $=s(),b=d();m(b);const F=l-f*(h===p?2:1)+1;b.anchor.set(h.__key,x,\"text\"),b.focus.set(p.__key,F,\"text\");for(const t of n.format)b.hasFormat(t)||b.formatText(t);b.anchor.set(b.focus.key,b.focus.offset,b.focus.type);for(const t of n.format)b.hasFormat(t)&&b.toggleFormat(t);return g($)&&(b.format=$.format),!0}}(n,c,r)};return t.registerUpdateListener((({tags:n,dirtyLeaves:o,editorState:r,prevEditorState:i})=>{if(n.has(a)||n.has(u))return;if(t.isComposing())return;const l=r.read(s),f=i.read(s);if(!g(f)||!g(l)||!l.isCollapsed()||l.is(f))return;const p=l.anchor.key,d=l.anchor.offset,m=r._nodeMap.get(p);!e(m)||!o.has(p)||1!==d&&d>f.anchor.offset+1||t.update((()=>{if(!J(m))return;const t=m.getParent();null===t||w(t)||c(t,m,l.anchor.offset)}))}))}const nt=/^(\\s*)(\\d{1,})\\.\\s/,ot=/^(\\s*)[-*+]\\s/,rt=/^(\\s*)(?:-\\s)?\\s?(\\[(\\s|x)?\\])\\s/i,it=/^(#{1,6})\\s/,st=/^>\\s/,lt=/^[ \\t]*```([\\w-]+)?/,ct=/[ \\t]*```$/,ft=/^[ \\t]*```[^`]+(?:(?:`{1,2}|`{4,})[^`]+)*```(?:[^`]|$)/,at=/^(?:\\|)(.+)(?:\\|)\\s?$/,ut=/^(\\| ?:?-*:? ?)+\\|\\s?$/,gt=t=>(e,n,o,r)=>{const i=t(o);i.append(...n),e.replace(i),r||i.select(0,0)};const pt=t=>(e,n,o,r)=>{const i=e.getPreviousSibling(),s=e.getNextSibling(),l=E(\"check\"===t?\"x\"===o[3]:void 0);if(h(s)&&s.getListType()===t){const t=s.getFirstChild();null!==t?t.insertBefore(l):s.append(l),e.remove()}else if(h(i)&&i.getListType()===t)i.append(l),e.remove();else{const n=y(t,\"number\"===t?Number(o[2]):void 0);n.append(l),e.replace(n)}l.append(...n),r||l.select(0,0);const c=function(t){const e=t.match(/\\t/g),n=t.match(/ /g);let o=0;return e&&(o+=e.length),n&&(o+=Math.floor(n.length/4)),o}(o[1]);c&&l.setIndent(c)},dt=(t,e,n)=>{const o=[],r=t.getChildren();let i=0;for(const s of r)if(x(s)){if(1===s.getChildrenSize()){const t=s.getFirstChild();if(h(t)){o.push(dt(t,e,n+1));continue}}const r=\" \".repeat(4*n),l=t.getListType(),c=\"number\"===l?`${t.getStart()+i}. `:\"check\"===l?`- [${s.getChecked()?\"x\":\" \"}] `:\"- \";o.push(r+c+e(s)),i++}return o.join(\"\\n\")},mt={dependencies:[S],export:(t,e)=>{if(!$(t))return null;const n=Number(t.getTag().slice(1));return\"#\".repeat(n)+\" \"+e(t)},regExp:it,replace:gt((t=>{const e=\"h\"+t[1].length;return I(e)})),type:\"element\"},ht={dependencies:[b],export:(t,e)=>{if(!v(t))return null;const n=e(t).split(\"\\n\"),o=[];for(const t of n)o.push(\"> \"+t);return o.join(\"\\n\")},regExp:st,replace:(t,e,n,o)=>{if(o){const n=t.getPreviousSibling();if(v(n))return n.splice(n.getChildrenSize(),0,[f(),...e]),void t.remove()}const r=F();r.append(...e),t.replace(r),o||r.select(0,0)},type:\"element\"},xt={dependencies:[k],export:t=>{if(!w(t))return null;const e=t.getTextContent();return\"```\"+(t.getLanguage()||\"\")+(e?\"\\n\"+e:\"\")+\"\\n```\"},regExpEnd:{optional:!0,regExp:ct},regExpStart:lt,replace:(t,e,n,o,r,i)=>{let s,c;if(!e&&r){if(1===r.length)o?(s=L(),c=n[1]+r[0]):(s=L(n[1]),c=r[0].startsWith(\" \")?r[0].slice(1):r[0]);else{if(s=L(n[1]),0===r[0].trim().length)for(;r.length>0&&!r[0].length;)r.shift();else r[0]=r[0].startsWith(\" \")?r[0].slice(1):r[0];for(;r.length>0&&!r[r.length-1].length;)r.pop();c=r.join(\"\\n\")}const e=l(c);s.append(e),t.append(s)}else e&&gt((t=>L(t?t[1]:void 0)))(t,e,n,i)},type:\"multiline-element\"},Tt={dependencies:[T,C],export:(t,e)=>h(t)?dt(t,e,0):null,regExp:ot,replace:pt(\"bullet\"),type:\"element\"},Ct={dependencies:[T,C],export:(t,e)=>h(t)?dt(t,e,0):null,regExp:rt,replace:pt(\"check\"),type:\"element\"},Et={dependencies:[T,C],export:(t,e)=>h(t)?dt(t,e,0):null,regExp:nt,replace:pt(\"number\"),type:\"element\"},yt={format:[\"code\"],tag:\"`\",type:\"text-format\"},vt={format:[\"highlight\"],tag:\"==\",type:\"text-format\"},St={format:[\"bold\",\"italic\"],tag:\"***\",type:\"text-format\"},$t={format:[\"bold\",\"italic\"],intraword:!1,tag:\"___\",type:\"text-format\"},bt={format:[\"bold\"],tag:\"**\",type:\"text-format\"},Ft={format:[\"bold\"],intraword:!1,tag:\"__\",type:\"text-format\"},It={format:[\"strikethrough\"],tag:\"~~\",type:\"text-format\"},Nt={format:[\"italic\"],tag:\"*\",type:\"text-format\"},wt={format:[\"italic\"],intraword:!1,tag:\"_\",type:\"text-format\"},kt={dependencies:[P],export:(t,e,n)=>{if(!R(t)||_(t))return null;const o=t.getTitle(),r=e(t);return o?`[${r}](${t.getURL()} \"${o}\")`:`[${r}](${t.getURL()})`},importRegExp:/(?:\\[([^[]+)\\])(?:\\((?:([^()\\s]+)(?:\\s\"((?:[^\"]*\\\\\")*[^\"]*)\"\\s*)?)\\))/,regExp:/(?:\\[([^[]+)\\])(?:\\((?:([^()\\s]+)(?:\\s\"((?:[^\"]*\\\\\")*[^\"]*)\"\\s*)?)\\))$/,replace:(t,e)=>{const[,n,o,r]=e,i=B(o,{title:r}),s=l(n);return s.setFormat(t.getFormat()),i.append(s),t.replace(i),s},trigger:\")\",type:\"text-match\"};const Lt=[mt,ht,Tt,Et],Pt=[xt],Rt=[yt,St,$t,bt,Ft,vt,Nt,wt,It],_t=[kt],Bt=[...Lt,...Pt,...Rt,..._t];function Mt(t,e=Bt,n,o=!1,r=!1){const i=o?t:function(t,e=!1){const n=t.split(\"\\n\");let o=!1;const r=[];for(let t=0;t<n.length;t++){const i=n[t],s=r[r.length-1];ft.test(i)?r.push(i):lt.test(i)||ct.test(i)?(o=!o,r.push(i)):o||\"\"===i||\"\"===s||!s||it.test(s)||it.test(i)||st.test(i)||nt.test(i)||ot.test(i)||rt.test(i)||at.test(i)||ut.test(i)||!e?r.push(i):r[r.length-1]=s+i}return r.join(\"\\n\")}(t,r);return Q(e,o)(i,n)}function jt(t=Bt,e,o=!1){const r=function(t,e=!1){const o=j(t),r=[...o.multilineElement,...o.element],i=!e,s=o.textFormat.filter((t=>1===t.format.length)).sort(((t,e)=>Number(t.format.includes(\"code\"))-Number(e.format.includes(\"code\"))));return t=>{const e=[],l=(t||n()).getChildren();for(let t=0;t<l.length;t++){const n=l[t],c=W(n,r,s,o.textMatch);null!=c&&e.push(i&&t>0&&!U(n)&&!U(l[t-1])?\"\\n\".concat(c):c)}return e.join(\"\\n\")}}(t,o);return r(e)}export{Mt as $convertFromMarkdownString,jt as $convertToMarkdownString,St as BOLD_ITALIC_STAR,$t as BOLD_ITALIC_UNDERSCORE,bt as BOLD_STAR,Ft as BOLD_UNDERSCORE,Ct as CHECK_LIST,xt as CODE,Lt as ELEMENT_TRANSFORMERS,mt as HEADING,vt as HIGHLIGHT,yt as INLINE_CODE,Nt as ITALIC_STAR,wt as ITALIC_UNDERSCORE,kt as LINK,Pt as MULTILINE_ELEMENT_TRANSFORMERS,Et as ORDERED_LIST,ht as QUOTE,It as STRIKETHROUGH,Rt as TEXT_FORMAT_TRANSFORMERS,_t as TEXT_MATCH_TRANSFORMERS,Bt as TRANSFORMERS,Tt as UNORDERED_LIST,et as registerMarkdownShortcuts};\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport{addClassNamesToElement as e,$descendantsMatching as t,$findMatchingParent as n,removeClassNamesFromElement as o,objectKlassEquals as r,isHTMLElement as l,$insertFirst as s,mergeRegister as i,$insertNodeToNearestRoot as c,$unwrapAndFilterDescendants as a}from\"@lexical/utils\";import{ElementNode as u,isHTMLElement as h,$isInlineElementOrDecoratorNode as d,$isTextNode as f,$isLineBreakNode as g,$createParagraphNode as m,$applyNodeReplacement as p,createCommand as C,$createTextNode as _,$getSelection as S,$isRangeSelection as w,$isParagraphNode as b,$createPoint as y,$isElementNode as N,$normalizeSelection__EXPERIMENTAL as x,isCurrentlyReadOnlyMode as v,TEXT_TYPE_TO_FORMAT as R,$getNodeByKey as T,$getEditor as F,$setSelection as O,SELECTION_CHANGE_COMMAND as A,getDOMSelection as K,$createRangeSelection as E,$isRootNode as k,INSERT_PARAGRAPH_COMMAND as M,COMMAND_PRIORITY_HIGH as $,KEY_ESCAPE_COMMAND as L,COMMAND_PRIORITY_CRITICAL as W,CUT_COMMAND as z,FORMAT_TEXT_COMMAND as H,FORMAT_ELEMENT_COMMAND as P,CONTROLLED_TEXT_INSERTION_COMMAND as B,KEY_TAB_COMMAND as D,FOCUS_COMMAND as I,SELECTION_INSERT_CLIPBOARD_NODES_COMMAND as U,$getPreviousSelection as J,$getNearestNodeFromDOMNode as Y,$createRangeSelectionFromDom as q,$isRootOrShadowRoot as X,KEY_ARROW_DOWN_COMMAND as j,KEY_ARROW_UP_COMMAND as V,KEY_ARROW_LEFT_COMMAND as G,KEY_ARROW_RIGHT_COMMAND as Q,DELETE_WORD_COMMAND as Z,DELETE_LINE_COMMAND as ee,DELETE_CHARACTER_COMMAND as te,KEY_BACKSPACE_COMMAND as ne,KEY_DELETE_COMMAND as oe,isDOMNode as re,$caretFromPoint as le,$isExtendableTextPointCaret as se,$extendCaretToRange as ie,$isSiblingCaret as ce,$getSiblingCaret as ae,$setPointFromCaret as ue,$normalizeCaret as he,$getAdjacentChildCaret as de,$isChildCaret as fe,$getChildCaret as ge,setDOMUnmanaged as me,COMMAND_PRIORITY_EDITOR as pe,CLICK_COMMAND as Ce}from\"lexical\";import{copyToClipboard as _e,$getClipboardDataFromSelection as Se}from\"@lexical/clipboard\";const we=/^(\\d+(?:\\.\\d+)?)px$/,be={BOTH:3,COLUMN:2,NO_STATUS:0,ROW:1};class ye extends u{static getType(){return\"tablecell\"}static clone(e){return new ye(e.__headerState,e.__colSpan,e.__width,e.__key)}afterCloneFrom(e){super.afterCloneFrom(e),this.__rowSpan=e.__rowSpan,this.__backgroundColor=e.__backgroundColor,this.__verticalAlign=e.__verticalAlign}static importDOM(){return{td:e=>({conversion:xe,priority:0}),th:e=>({conversion:xe,priority:0})}}static importJSON(e){return ve().updateFromJSON(e)}updateFromJSON(e){return super.updateFromJSON(e).setHeaderStyles(e.headerState).setColSpan(e.colSpan||1).setRowSpan(e.rowSpan||1).setWidth(e.width||void 0).setBackgroundColor(e.backgroundColor||null).setVerticalAlign(e.verticalAlign||void 0)}constructor(e=be.NO_STATUS,t=1,n,o){super(o),this.__colSpan=t,this.__rowSpan=1,this.__headerState=e,this.__width=n,this.__backgroundColor=null,this.__verticalAlign=void 0}createDOM(t){const n=document.createElement(this.getTag());return this.__width&&(n.style.width=`${this.__width}px`),this.__colSpan>1&&(n.colSpan=this.__colSpan),this.__rowSpan>1&&(n.rowSpan=this.__rowSpan),null!==this.__backgroundColor&&(n.style.backgroundColor=this.__backgroundColor),Ne(this.__verticalAlign)&&(n.style.verticalAlign=this.__verticalAlign),e(n,t.theme.tableCell,this.hasHeader()&&t.theme.tableCellHeader),n}exportDOM(e){const t=super.exportDOM(e);if(h(t.element)){const e=t.element;e.setAttribute(\"data-temporary-table-cell-lexical-key\",this.getKey()),e.style.border=\"1px solid black\",this.__colSpan>1&&(e.colSpan=this.__colSpan),this.__rowSpan>1&&(e.rowSpan=this.__rowSpan),e.style.width=`${this.getWidth()||75}px`,e.style.verticalAlign=this.getVerticalAlign()||\"top\",e.style.textAlign=\"start\",null===this.__backgroundColor&&this.hasHeader()&&(e.style.backgroundColor=\"#f2f3f5\")}return t}exportJSON(){return{...super.exportJSON(),...Ne(this.__verticalAlign)&&{verticalAlign:this.__verticalAlign},backgroundColor:this.getBackgroundColor(),colSpan:this.__colSpan,headerState:this.__headerState,rowSpan:this.__rowSpan,width:this.getWidth()}}getColSpan(){return this.getLatest().__colSpan}setColSpan(e){const t=this.getWritable();return t.__colSpan=e,t}getRowSpan(){return this.getLatest().__rowSpan}setRowSpan(e){const t=this.getWritable();return t.__rowSpan=e,t}getTag(){return this.hasHeader()?\"th\":\"td\"}setHeaderStyles(e,t=be.BOTH){const n=this.getWritable();return n.__headerState=e&t|n.__headerState&~t,n}getHeaderStyles(){return this.getLatest().__headerState}setWidth(e){const t=this.getWritable();return t.__width=e,t}getWidth(){return this.getLatest().__width}getBackgroundColor(){return this.getLatest().__backgroundColor}setBackgroundColor(e){const t=this.getWritable();return t.__backgroundColor=e,t}getVerticalAlign(){return this.getLatest().__verticalAlign}setVerticalAlign(e){const t=this.getWritable();return t.__verticalAlign=e||void 0,t}toggleHeaderStyle(e){const t=this.getWritable();return(t.__headerState&e)===e?t.__headerState-=e:t.__headerState+=e,t}hasHeaderState(e){return(this.getHeaderStyles()&e)===e}hasHeader(){return this.getLatest().__headerState!==be.NO_STATUS}updateDOM(e){return e.__headerState!==this.__headerState||e.__width!==this.__width||e.__colSpan!==this.__colSpan||e.__rowSpan!==this.__rowSpan||e.__backgroundColor!==this.__backgroundColor||e.__verticalAlign!==this.__verticalAlign}isShadowRoot(){return!0}collapseAtStart(){return!0}canBeEmpty(){return!1}canIndent(){return!1}}function Ne(e){return\"middle\"===e||\"bottom\"===e}function xe(e){const t=e,n=e.nodeName.toLowerCase();let o;we.test(t.style.width)&&(o=parseFloat(t.style.width));const r=ve(\"th\"===n?be.ROW:be.NO_STATUS,t.colSpan,o);r.__rowSpan=t.rowSpan;const l=t.style.backgroundColor;\"\"!==l&&(r.__backgroundColor=l);const s=t.style.verticalAlign;Ne(s)&&(r.__verticalAlign=s);const i=t.style,c=(i&&i.textDecoration||\"\").split(\" \"),a=\"700\"===i.fontWeight||\"bold\"===i.fontWeight,u=c.includes(\"line-through\"),h=\"italic\"===i.fontStyle,p=c.includes(\"underline\");return{after:e=>{const t=[];let n=null;const o=()=>{if(n){const e=n.getFirstChild();g(e)&&1===n.getChildrenSize()&&e.remove()}};for(const r of e)d(r)||f(r)||g(r)?(f(r)&&(a&&r.toggleFormat(\"bold\"),u&&r.toggleFormat(\"strikethrough\"),h&&r.toggleFormat(\"italic\"),p&&r.toggleFormat(\"underline\")),n?n.append(r):(n=m().append(r),t.push(n))):(t.push(r),o(),n=null);return o(),0===t.length&&t.push(m()),t},node:r}}function ve(e=be.NO_STATUS,t=1,n){return p(new ye(e,t,n))}function Re(e){return e instanceof ye}const Te=C(\"INSERT_TABLE_COMMAND\");function Fe(e,...t){const n=new URL(\"https://lexical.dev/docs/error\"),o=new URLSearchParams;o.append(\"code\",e);for(const e of t)o.append(\"v\",e);throw n.search=o.toString(),Error(`Minified Lexical error #${e}; visit ${n.toString()} for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`)}class Oe extends u{static getType(){return\"tablerow\"}static clone(e){return new Oe(e.__height,e.__key)}static importDOM(){return{tr:e=>({conversion:Ae,priority:0})}}static importJSON(e){return Ke().updateFromJSON(e)}updateFromJSON(e){return super.updateFromJSON(e).setHeight(e.height)}constructor(e,t){super(t),this.__height=e}exportJSON(){const e=this.getHeight();return{...super.exportJSON(),...void 0===e?void 0:{height:e}}}createDOM(t){const n=document.createElement(\"tr\");return this.__height&&(n.style.height=`${this.__height}px`),e(n,t.theme.tableRow),n}extractWithChild(e,t,n){return\"html\"===n}isShadowRoot(){return!0}setHeight(e){const t=this.getWritable();return t.__height=e,t}getHeight(){return this.getLatest().__height}updateDOM(e){return e.__height!==this.__height}canBeEmpty(){return!1}canIndent(){return!1}}function Ae(e){const n=e;let o;return we.test(n.style.height)&&(o=parseFloat(n.style.height)),{after:e=>t(e,Re),node:Ke(o)}}function Ke(e){return p(new Oe(e))}function Ee(e){return e instanceof Oe}const ke=\"undefined\"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement,Me=ke&&\"documentMode\"in document?document.documentMode:null,$e=ke&&/^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent);function Le(e,t,n=!0){const o=dn();for(let r=0;r<e;r++){const e=Ke();for(let o=0;o<t;o++){let t=be.NO_STATUS;\"object\"==typeof n?(0===r&&n.rows&&(t|=be.ROW),0===o&&n.columns&&(t|=be.COLUMN)):n&&(0===r&&(t|=be.ROW),0===o&&(t|=be.COLUMN));const l=ve(t),s=m();s.append(_()),l.append(s),e.append(l)}o.append(e)}return o}function We(e){const t=n(e,(e=>Re(e)));return Re(t)?t:null}function ze(e){const t=n(e,(e=>Ee(e)));if(Ee(t))return t;throw new Error(\"Expected table cell to be inside of table row.\")}function He(e){const t=n(e,(e=>fn(e)));if(fn(t))return t;throw new Error(\"Expected table cell to be inside of table.\")}function Pe(e){const t=ze(e);return He(t).getChildren().findIndex((e=>e.is(t)))}function Be(e){return ze(e).getChildren().findIndex((t=>t.is(e)))}function De(e,t){const n=He(e),{x:o,y:r}=n.getCordsFromCellNode(e,t);return{above:n.getCellNodeFromCords(o,r-1,t),below:n.getCellNodeFromCords(o,r+1,t),left:n.getCellNodeFromCords(o-1,r,t),right:n.getCellNodeFromCords(o+1,r,t)}}function Ie(e,t){const n=e.getChildren();if(t>=n.length||t<0)throw new Error(\"Expected table cell to be inside of table row.\");return n[t].remove(),e}function Ue(e,t,n=!0,o,r){const l=e.getChildren();if(t>=l.length||t<0)throw new Error(\"Table row target index out of range\");const s=l[t];if(!Ee(s))throw new Error(\"Row before insertion index does not exist.\");for(let e=0;e<o;e++){const e=s.getChildren(),t=e.length,o=Ke();for(let n=0;n<t;n++){const t=e[n];Re(t)||Fe(12);const{above:l,below:s}=De(t,r);let i=be.NO_STATUS;const c=l&&l.getWidth()||s&&s.getWidth()||void 0;(l&&l.hasHeaderState(be.COLUMN)||s&&s.hasHeaderState(be.COLUMN))&&(i|=be.COLUMN);const a=ve(i,1,c);a.append(m()),o.append(a)}n?s.insertAfter(o):s.insertBefore(o)}return e}ke&&\"InputEvent\"in window&&!Me&&new window.InputEvent(\"input\");const Je=(e,t)=>e===be.BOTH||e===t?t:be.NO_STATUS;function Ye(e=!0){const t=S();w(t)||Ct(t)||Fe(188);const n=t.anchor.getNode(),o=t.focus.getNode(),[r]=dt(n),[l,,s]=dt(o),[,i,c]=ut(s,l,r),{startRow:a}=c,{startRow:u}=i;return e?Xe(a+r.__rowSpan>u+l.__rowSpan?r:l,!0):Xe(u<a?l:r,!1)}const qe=Ye;function Xe(e,t=!0){const[,,n]=dt(e),[o,r]=ut(n,e,e),l=o[0].length,{startRow:s}=r;let i=null;if(t){const t=s+e.__rowSpan-1,r=o[t],c=Ke();for(let e=0;e<l;e++){const{cell:n,startRow:o}=r[e];if(o+n.__rowSpan-1<=t){const t=r[e].cell.__headerState,n=Je(t,be.COLUMN);c.append(ve(n).append(m()))}else n.setRowSpan(n.__rowSpan+1)}const a=n.getChildAtIndex(t);Ee(a)||Fe(256),a.insertAfter(c),i=c}else{const e=s,t=o[e],r=Ke();for(let n=0;n<l;n++){const{cell:o,startRow:l}=t[n];if(l===e){const e=t[n].cell.__headerState,o=Je(e,be.COLUMN);r.append(ve(o).append(m()))}else o.setRowSpan(o.__rowSpan+1)}const c=n.getChildAtIndex(e);Ee(c)||Fe(257),c.insertBefore(r),i=r}return i}function je(e,t,n=!0,o,r){const l=e.getChildren(),s=[];for(let e=0;e<l.length;e++){const n=l[e];if(Ee(n))for(let e=0;e<o;e++){const e=n.getChildren();if(t>=e.length||t<0)throw new Error(\"Table column target index out of range\");const o=e[t];Re(o)||Fe(12);const{left:l,right:i}=De(o,r);let c=be.NO_STATUS;(l&&l.hasHeaderState(be.ROW)||i&&i.hasHeaderState(be.ROW))&&(c|=be.ROW);const a=ve(c);a.append(m()),s.push({newTableCell:a,targetCell:o})}}return s.forEach((({newTableCell:e,targetCell:t})=>{n?t.insertAfter(e):t.insertBefore(e)})),e}function Ve(e=!0){const t=S();w(t)||Ct(t)||Fe(188);const n=t.anchor.getNode(),o=t.focus.getNode(),[r]=dt(n),[l,,s]=dt(o),[,i,c]=ut(s,l,r),{startColumn:a}=c,{startColumn:u}=i;return e?Qe(a+r.__colSpan>u+l.__colSpan?r:l,!0):Qe(u<a?l:r,!1)}const Ge=Ve;function Qe(e,t=!0,n=!0){const[,,o]=dt(e),[r,l]=ut(o,e,e),s=r.length,{startColumn:i}=l,c=t?i+e.__colSpan-1:i-1,a=o.getFirstChild();Ee(a)||Fe(120);let u=null;function h(e=be.NO_STATUS){const t=ve(e).append(m());return null===u&&(u=t),t}let d=a;e:for(let e=0;e<s;e++){if(0!==e){const e=d.getNextSibling();Ee(e)||Fe(121),d=e}const t=r[e],n=t[c<0?0:c].cell.__headerState,o=Je(n,be.ROW);if(c<0){lt(d,h(o));continue}const{cell:l,startColumn:s,startRow:i}=t[c];if(s+l.__colSpan-1<=c){let n=l,r=i,s=c;for(;r!==e&&n.__rowSpan>1;){if(s-=l.__colSpan,!(s>=0)){d.append(h(o));continue e}{const{cell:e,startRow:o}=t[s];n=e,r=o}}n.insertAfter(h(o))}else l.setColSpan(l.__colSpan+1)}null!==u&&n&&rt(u);const f=o.getColWidths();if(f){const e=[...f],t=c<0?0:c,n=e[t];e.splice(t,0,n),o.setColWidths(e)}return u}function Ze(e,t){const n=e.getChildren();for(let e=0;e<n.length;e++){const o=n[e];if(Ee(o)){const e=o.getChildren();if(t>=e.length||t<0)throw new Error(\"Table column target index out of range\");e[t].remove()}}return e}function et(){const e=S();w(e)||Ct(e)||Fe(188);const[t,n]=e.isBackward()?[e.focus.getNode(),e.anchor.getNode()]:[e.anchor.getNode(),e.focus.getNode()],[o,,r]=dt(t),[l]=dt(n),[s,i,c]=ut(r,o,l),{startRow:a}=i,{startRow:u}=c,h=u+l.__rowSpan-1;if(s.length===h-a+1)return void r.remove();const d=s[0].length,f=s[h+1],g=r.getChildAtIndex(h+1);for(let e=h;e>=a;e--){for(let t=d-1;t>=0;t--){const{cell:n,startRow:o,startColumn:r}=s[e][t];if(r===t){if(o<a||o+n.__rowSpan-1>h){const e=Math.max(o,a),t=Math.min(n.__rowSpan+o-1,h),r=e<=t?t-e+1:0;n.setRowSpan(n.__rowSpan-r)}if(o>=a&&o+n.__rowSpan-1>h&&e===h){null===g&&Fe(122);let o=null;for(let n=0;n<t;n++){const t=f[n],r=t.cell;t.startRow===e+1&&(o=r),r.__colSpan>1&&(n+=r.__colSpan-1)}null===o?lt(g,n):o.insertAfter(n)}}}const t=r.getChildAtIndex(e);Ee(t)||Fe(206,String(e)),t.remove()}if(void 0!==f){const{cell:e}=f[0];rt(e)}else{const e=s[a-1],{cell:t}=e[0];rt(t)}}const tt=et;function nt(){const e=S();w(e)||Ct(e)||Fe(188);const t=e.anchor.getNode(),n=e.focus.getNode(),[o,,r]=dt(t),[l]=dt(n),[s,i,c]=ut(r,o,l),{startColumn:a}=i,{startRow:u,startColumn:h}=c,d=Math.min(a,h),f=Math.max(a+o.__colSpan-1,h+l.__colSpan-1),g=f-d+1;if(s[0].length===f-d+1)return r.selectPrevious(),void r.remove();const m=s.length;for(let e=0;e<m;e++)for(let t=d;t<=f;t++){const{cell:n,startColumn:o}=s[e][t];if(o<d){if(t===d){const e=d-o;n.setColSpan(n.__colSpan-Math.min(g,n.__colSpan-e))}}else if(o+n.__colSpan-1>f){if(t===f){const e=f-o+1;n.setColSpan(n.__colSpan-e)}}else n.remove()}const p=s[u],C=a>h?p[a+o.__colSpan]:p[h+l.__colSpan];if(void 0!==C){const{cell:e}=C;rt(e)}else{const e=h<a?p[h-1]:p[a-1],{cell:t}=e;rt(t)}const _=r.getColWidths();if(_){const e=[..._];e.splice(d,g),r.setColWidths(e)}}const ot=nt;function rt(e){const t=e.getFirstDescendant();null==t?e.selectStart():t.getParentOrThrow().selectStart()}function lt(e,t){const n=e.getFirstChild();null!==n?n.insertBefore(t):e.append(t)}function st(e){if(0===e.length)return null;const t=He(e[0]),[n]=ht(t,null,null);let o=1/0,r=-1/0,l=1/0,s=-1/0;const i=new Set;for(const t of n)for(const n of t){if(!n||!n.cell)continue;const t=n.cell.getKey();if(!i.has(t)&&e.some((e=>e.is(n.cell)))){i.add(t);const e=n.startRow,c=n.startColumn,a=n.cell.__rowSpan||1,u=n.cell.__colSpan||1;o=Math.min(o,e),r=Math.max(r,e+a-1),l=Math.min(l,c),s=Math.max(s,c+u-1)}}if(o===1/0||l===1/0)return null;const c=r-o+1,a=s-l+1,u=n[o][l];if(!u.cell)return null;const h=u.cell;h.setColSpan(a),h.setRowSpan(c);const d=new Set([h.getKey()]);for(let e=o;e<=r;e++)for(let t=l;t<=s;t++){const o=n[e][t];if(!o.cell)continue;const r=o.cell,l=r.getKey();if(!d.has(l)){d.add(l);it(r)||h.append(...r.getChildren()),r.remove()}}return 0===h.getChildrenSize()&&h.append(m()),h}function it(e){if(1!==e.getChildrenSize())return!1;const t=e.getFirstChildOrThrow();return!(!b(t)||!t.isEmpty())}function ct(){const e=S();w(e)||Ct(e)||Fe(188);const t=e.anchor.getNode(),o=n(t,Re);return Re(o)||Fe(148),at(o)}function at(e){const[t,n,o]=dt(e),r=t.__colSpan,l=t.__rowSpan;if(1===r&&1===l)return;const[s,i]=ut(o,t,t),{startColumn:c,startRow:a}=i,u=t.__headerState&be.COLUMN,h=Array.from({length:r},((e,t)=>{let n=u;for(let e=0;0!==n&&e<s.length;e++)n&=s[e][t+c].cell.__headerState;return n})),d=t.__headerState&be.ROW,f=Array.from({length:l},((e,t)=>{let n=d;for(let e=0;0!==n&&e<s[0].length;e++)n&=s[t+a][e].cell.__headerState;return n}));if(r>1){for(let e=1;e<r;e++)t.insertAfter(ve(h[e]|f[0]).append(m()));t.setColSpan(1)}if(l>1){let e;for(let t=1;t<l;t++){const o=a+t,l=s[o];e=(e||n).getNextSibling(),Ee(e)||Fe(125);let i=null;for(let e=0;e<c;e++){const t=l[e],n=t.cell;t.startRow===o&&(i=n),n.__colSpan>1&&(e+=n.__colSpan-1)}if(null===i)for(let n=r-1;n>=0;n--)lt(e,ve(h[n]|f[t]).append(m()));else for(let e=r-1;e>=0;e--)i.insertAfter(ve(h[e]|f[t]).append(m()))}t.setRowSpan(1)}}function ut(e,t,n){const[o,r,l]=ht(e,t,n);return null===r&&Fe(207),null===l&&Fe(208),[o,r,l]}function ht(e,t,n){const o=[];let r=null,l=null;function s(e){let t=o[e];return void 0===t&&(o[e]=t=[]),t}const i=e.getChildren();for(let e=0;e<i.length;e++){const o=i[e];Ee(o)||Fe(209);const c=s(e);for(let a=o.getFirstChild(),u=0;null!=a;a=a.getNextSibling()){for(Re(a)||Fe(147);void 0!==c[u];)u++;const o={cell:a,startColumn:u,startRow:e},{__rowSpan:h,__colSpan:d}=a;for(let t=0;t<h&&!(e+t>=i.length);t++){const n=s(e+t);for(let e=0;e<d;e++)n[u+e]=o}null!==t&&null===r&&t.is(a)&&(r=o),null!==n&&null===l&&n.is(a)&&(l=o)}}return[o,r,l]}function dt(e){let t;if(e instanceof ye)t=e;else if(\"__type\"in e){const o=n(e,Re);Re(o)||Fe(148),t=o}else{const o=n(e.getNode(),Re);Re(o)||Fe(148),t=o}const o=t.getParent();Ee(o)||Fe(149);const r=o.getParent();return fn(r)||Fe(210),[t,o,r]}function ft(e,t,n){let o,r=Math.min(t.startColumn,n.startColumn),l=Math.min(t.startRow,n.startRow),s=Math.max(t.startColumn+t.cell.__colSpan-1,n.startColumn+n.cell.__colSpan-1),i=Math.max(t.startRow+t.cell.__rowSpan-1,n.startRow+n.cell.__rowSpan-1);do{o=!1;for(let t=0;t<e.length;t++)for(let n=0;n<e[0].length;n++){const c=e[t][n];if(!c)continue;const a=c.startColumn+c.cell.__colSpan-1,u=c.startRow+c.cell.__rowSpan-1,h=c.startColumn<=s&&a>=r,d=c.startRow<=i&&u>=l;if(h&&d){const e=Math.min(r,c.startColumn),t=Math.max(s,a),n=Math.min(l,c.startRow),h=Math.max(i,u);e===r&&t===s&&n===l&&h===i||(r=e,s=t,l=n,i=h,o=!0)}}}while(o);return{maxColumn:s,maxRow:i,minColumn:r,minRow:l}}function gt(e){const[t,,n]=dt(e),o=n.getChildren(),r=o.length,l=o[0].getChildren().length,s=new Array(r);for(let e=0;e<r;e++)s[e]=new Array(l);for(let e=0;e<r;e++){const n=o[e].getChildren();let r=0;for(let o=0;o<n.length;o++){for(;s[e][r];)r++;const l=n[o],i=l.__rowSpan||1,c=l.__colSpan||1;for(let t=0;t<i;t++)for(let n=0;n<c;n++)s[e+t][r+n]=l;if(t===l)return{colSpan:c,columnIndex:r,rowIndex:e,rowSpan:i};r+=c}}return null}function mt(e){const[[t,o,r,l],[s,i,c,a]]=[\"anchor\",\"focus\"].map((t=>{const o=e[t].getNode(),r=n(o,Re);Re(r)||Fe(238,t,o.getKey(),o.getType());const l=r.getParent();Ee(l)||Fe(239,t);const s=l.getParent();return fn(s)||Fe(240,t),[o,r,l,s]}));return l.is(a)||Fe(241),{anchorCell:o,anchorNode:t,anchorRow:r,anchorTable:l,focusCell:i,focusNode:s,focusRow:c,focusTable:a}}class pt{constructor(e,t,n){this.anchor=t,this.focus=n,t._selection=this,n._selection=this,this._cachedNodes=null,this.dirty=!1,this.tableKey=e}getStartEndPoints(){return[this.anchor,this.focus]}isValid(){return\"root\"!==this.tableKey&&\"root\"!==this.anchor.key&&\"element\"===this.anchor.type&&\"root\"!==this.focus.key&&\"element\"===this.focus.type}isBackward(){return this.focus.isBefore(this.anchor)}getCachedNodes(){return this._cachedNodes}setCachedNodes(e){this._cachedNodes=e}is(e){return Ct(e)&&this.tableKey===e.tableKey&&this.anchor.is(e.anchor)&&this.focus.is(e.focus)}set(e,t,n){this.dirty=this.dirty||e!==this.tableKey||t!==this.anchor.key||n!==this.focus.key,this.tableKey=e,this.anchor.key=t,this.focus.key=n,this._cachedNodes=null}clone(){return new pt(this.tableKey,y(this.anchor.key,this.anchor.offset,this.anchor.type),y(this.focus.key,this.focus.offset,this.focus.type))}isCollapsed(){return!1}extract(){return this.getNodes()}insertRawText(e){}insertText(){}hasFormat(e){let t=0;this.getNodes().filter(Re).forEach((e=>{const n=e.getFirstChild();b(n)&&(t|=n.getTextFormat())}));const n=R[e];return!!(t&n)}insertNodes(e){const t=this.focus.getNode();N(t)||Fe(151);x(t.select(0,t.getChildrenSize())).insertNodes(e)}getShape(){const{anchorCell:e,focusCell:t}=mt(this),n=gt(e);null===n&&Fe(153);const o=gt(t);null===o&&Fe(155);const r=Math.min(n.columnIndex,o.columnIndex),l=Math.max(n.columnIndex+n.colSpan-1,o.columnIndex+o.colSpan-1),s=Math.min(n.rowIndex,o.rowIndex),i=Math.max(n.rowIndex+n.rowSpan-1,o.rowIndex+o.rowSpan-1);return{fromX:Math.min(r,l),fromY:Math.min(s,i),toX:Math.max(r,l),toY:Math.max(s,i)}}getNodes(){if(!this.isValid())return[];const e=this._cachedNodes;if(null!==e)return e;const{anchorTable:t,anchorCell:n,focusCell:o}=mt(this),r=o.getParents()[1];if(r!==t){if(t.isParentOf(o)){const e=r.getParent();null==e&&Fe(159),this.set(this.tableKey,o.getKey(),e.getKey())}else{const e=t.getParent();null==e&&Fe(158),this.set(this.tableKey,e.getKey(),o.getKey())}return this.getNodes()}const[l,s,i]=ut(t,n,o),{minColumn:c,maxColumn:a,minRow:u,maxRow:h}=ft(l,s,i),d=new Map([[t.getKey(),t]]);let f=null;for(let e=u;e<=h;e++)for(let t=c;t<=a;t++){const{cell:n}=l[e][t],o=n.getParent();Ee(o)||Fe(160),o!==f&&(d.set(o.getKey(),o),f=o),d.has(n.getKey())||wt(n,(e=>{d.set(e.getKey(),e)}))}const g=Array.from(d.values());return v()||(this._cachedNodes=g),g}getTextContent(){const e=this.getNodes().filter((e=>Re(e)));let t=\"\";for(let n=0;n<e.length;n++){const o=e[n],r=o.__parent,l=(e[n+1]||{}).__parent;t+=o.getTextContent()+(l!==r?\"\\n\":\"\\t\")}return t}}function Ct(e){return e instanceof pt}function _t(){const e=y(\"root\",0,\"element\"),t=y(\"root\",0,\"element\");return new pt(\"root\",e,t)}function St(e,t,n){e.getKey(),t.getKey(),n.getKey();const o=S(),r=Ct(o)?o.clone():_t();return r.set(e.getKey(),t.getKey(),n.getKey()),r}function wt(e,t){const n=[[e]];for(let e=n.at(-1);void 0!==e&&n.length>0;e=n.at(-1)){const o=e.pop();void 0===o?n.pop():!1!==t(o)&&N(o)&&n.push(o.getChildren())}}function bt(e,t=F()){const n=T(e);fn(n)||Fe(231,e);const o=Rt(n,t.getElementByKey(e));return null===o&&Fe(232,e),{tableElement:o,tableNode:n}}class yt{constructor(e,t){this.isHighlightingCells=!1,this.anchorX=-1,this.anchorY=-1,this.focusX=-1,this.focusY=-1,this.listenersToRemove=new Set,this.tableNodeKey=t,this.editor=e,this.table={columns:0,domRows:[],rows:0},this.tableSelection=null,this.anchorCellNodeKey=null,this.focusCellNodeKey=null,this.anchorCell=null,this.focusCell=null,this.hasHijackedSelectionStyles=!1,this.isSelecting=!1,this.pointerType=null,this.shouldCheckSelection=!1,this.abortController=new AbortController,this.listenerOptions={signal:this.abortController.signal},this.nextFocus=null,this.trackTable()}getTable(){return this.table}removeListeners(){this.abortController.abort(\"removeListeners\"),Array.from(this.listenersToRemove).forEach((e=>e())),this.listenersToRemove.clear()}$lookup(){return bt(this.tableNodeKey,this.editor)}trackTable(){const e=new MutationObserver((e=>{this.editor.getEditorState().read((()=>{let t=!1;for(let n=0;n<e.length;n++){const o=e[n].target.nodeName;if(\"TABLE\"===o||\"TBODY\"===o||\"THEAD\"===o||\"TR\"===o){t=!0;break}}if(!t)return;const{tableNode:n,tableElement:o}=this.$lookup();this.table=Lt(n,o)}),{editor:this.editor})}));this.editor.getEditorState().read((()=>{const{tableNode:t,tableElement:n}=this.$lookup();this.table=Lt(t,n),e.observe(n,{attributes:!0,childList:!0,subtree:!0})}),{editor:this.editor})}$clearHighlight(){const e=this.editor;this.isHighlightingCells=!1,this.anchorX=-1,this.anchorY=-1,this.focusX=-1,this.focusY=-1,this.tableSelection=null,this.anchorCellNodeKey=null,this.focusCellNodeKey=null,this.anchorCell=null,this.focusCell=null,this.hasHijackedSelectionStyles=!1,this.$enableHighlightStyle();const{tableNode:t,tableElement:n}=this.$lookup();Wt(e,Lt(t,n),null),null!==S()&&(O(null),e.dispatchCommand(A,void 0))}$enableHighlightStyle(){const e=this.editor,{tableElement:t}=this.$lookup();o(t,e._config.theme.tableSelection),t.classList.remove(\"disable-selection\"),this.hasHijackedSelectionStyles=!1}$disableHighlightStyle(){const{tableElement:t}=this.$lookup();e(t,this.editor._config.theme.tableSelection),this.hasHijackedSelectionStyles=!0}$updateTableTableSelection(e){if(null!==e){e.tableKey!==this.tableNodeKey&&Fe(233,e.tableKey,this.tableNodeKey);const t=this.editor;this.tableSelection=e,this.isHighlightingCells=!0,this.$disableHighlightStyle(),this.updateDOMSelection(),Wt(t,this.table,this.tableSelection)}else this.$clearHighlight()}setShouldCheckSelection(){this.shouldCheckSelection=!0}getAndClearShouldCheckSelection(){return!!this.shouldCheckSelection&&(this.shouldCheckSelection=!1,!0)}setNextFocus(e){this.nextFocus=e}getAndClearNextFocus(){const{nextFocus:e}=this;return null!==e&&(this.nextFocus=null),e}updateDOMSelection(){if(null!==this.anchorCell&&null!==this.focusCell){const e=K(this.editor._window);e&&e.rangeCount>0&&e.removeAllRanges()}}$setFocusCellForSelection(e,t=!1){const n=this.editor,{tableNode:o}=this.$lookup(),r=e.x,l=e.y;if(this.focusCell=e,this.isHighlightingCells||this.anchorX===r&&this.anchorY===l&&!t){if(r===this.focusX&&l===this.focusY)return!1}else this.isHighlightingCells=!0,this.$disableHighlightStyle();if(this.focusX=r,this.focusY=l,this.isHighlightingCells){const t=on(o,e.elem);if(null!=this.tableSelection&&null!=this.anchorCellNodeKey&&null!==t)return this.focusCellNodeKey=t.getKey(),this.tableSelection=St(o,this.$getAnchorTableCellOrThrow(),t),O(this.tableSelection),n.dispatchCommand(A,void 0),Wt(n,this.table,this.tableSelection),!0}return!1}$getAnchorTableCell(){return this.anchorCellNodeKey?T(this.anchorCellNodeKey):null}$getAnchorTableCellOrThrow(){const e=this.$getAnchorTableCell();return null===e&&Fe(234),e}$getFocusTableCell(){return this.focusCellNodeKey?T(this.focusCellNodeKey):null}$getFocusTableCellOrThrow(){const e=this.$getFocusTableCell();return null===e&&Fe(235),e}$setAnchorCellForSelection(e){this.isHighlightingCells=!1,this.anchorCell=e,this.anchorX=e.x,this.anchorY=e.y;const{tableNode:t}=this.$lookup(),n=on(t,e.elem);if(null!==n){const e=n.getKey();this.tableSelection=null!=this.tableSelection?this.tableSelection.clone():_t(),this.anchorCellNodeKey=e}}$formatCells(e){const t=S();Ct(t)||Fe(236);const n=E(),o=n.anchor,r=n.focus,l=t.getNodes().filter(Re);l.length>0||Fe(237);const s=l[0].getFirstChild(),i=b(s)?s.getFormatFlags(e,null):null;l.forEach((t=>{o.set(t.getKey(),0,\"element\"),r.set(t.getKey(),t.getChildrenSize(),\"element\"),n.formatText(e,i)})),O(t),this.editor.dispatchCommand(A,void 0)}$clearText(){const{editor:e}=this,t=T(this.tableNodeKey);if(!fn(t))throw new Error(\"Expected TableNode.\");const n=S();Ct(n)||Fe(253);const o=n.getNodes().filter(Re),r=t.getFirstChild(),l=t.getLastChild();if(o.length>0&&null!==r&&null!==l&&Ee(r)&&Ee(l)&&o[0]===r.getFirstChild()&&o[o.length-1]===l.getLastChild()){t.selectPrevious();const n=t.getParent();return t.remove(),void(k(n)&&n.isEmpty()&&e.dispatchCommand(M,void 0))}o.forEach((e=>{if(N(e)){const t=m(),n=_();t.append(n),e.append(t),e.getChildren().forEach((e=>{e!==t&&e.remove()}))}})),Wt(e,this.table,null),O(null),e.dispatchCommand(A,void 0)}}const Nt=\"__lexicalTableSelection\",xt=e=>!(1&~e.buttons);function vt(e){return h(e)&&\"TABLE\"===e.nodeName}function Rt(e,t){if(!t)return t;const n=vt(t)?t:e.getDOMSlot(t).element;return\"TABLE\"!==n.nodeName&&Fe(245,t.nodeName),n}function Tt(e){return e._window}function Ft(e,t){for(let n=t,o=null;null!==n;n=n.getParent()){if(e.is(n))return o;Re(n)&&(o=n)}return null}const Ot=[[j,\"down\"],[V,\"up\"],[G,\"backward\"],[Q,\"forward\"]],At=[Z,ee,te],Kt=[ne,oe];function Et(e,t,o,l){const s=o.getRootElement(),i=Tt(o);null!==s&&null!==i||Fe(246);const c=new yt(o,e.getKey()),a=Rt(e,t);!function(e,t){null!==kt(e)&&Fe(205);e[Nt]=t}(a,c),c.listenersToRemove.add((()=>function(e,t){kt(e)===t&&delete e[Nt]}(a,c)));const u=t=>{if(c.pointerType=t.pointerType,0!==t.button||!re(t.target)||!i)return;const n=Mt(t.target);null!==n&&o.update((()=>{const o=J();if($e&&t.shiftKey&&Jt(o,e)&&(w(o)||Ct(o))){const r=o.anchor.getNode(),l=Ft(e,o.anchor.getNode());if(l)c.$setAnchorCellForSelection(nn(c,l)),c.$setFocusCellForSelection(n),Zt(t);else{(e.isBefore(r)?e.selectStart():e.selectEnd()).anchor.set(o.anchor.key,o.anchor.offset,o.anchor.type)}}else\"touch\"!==t.pointerType&&c.$setAnchorCellForSelection(n)})),(()=>{if(c.isSelecting)return;const e=()=>{c.isSelecting=!1,i.removeEventListener(\"pointerup\",e),i.removeEventListener(\"pointermove\",t)},t=n=>{if(!xt(n)&&c.isSelecting)return c.isSelecting=!1,i.removeEventListener(\"pointerup\",e),void i.removeEventListener(\"pointermove\",t);if(!re(n.target))return;let r=null;const l=!($e||a.contains(n.target));if(l)r=$t(a,n.target);else for(const e of document.elementsFromPoint(n.clientX,n.clientY))if(r=$t(a,e),r)break;!r||null!==c.focusCell&&r.elem===c.focusCell.elem||(c.setNextFocus({focusCell:r,override:l}),o.dispatchCommand(A,void 0))};c.isSelecting=!0,i.addEventListener(\"pointerup\",e,c.listenerOptions),i.addEventListener(\"pointermove\",t,c.listenerOptions)})()};a.addEventListener(\"pointerdown\",u,c.listenerOptions),c.listenersToRemove.add((()=>{a.removeEventListener(\"pointerdown\",u)}));const h=e=>{if(e.detail>=3&&re(e.target)){null!==Mt(e.target)&&e.preventDefault()}};a.addEventListener(\"mousedown\",h,c.listenerOptions),c.listenersToRemove.add((()=>{a.removeEventListener(\"mousedown\",h)}));const d=e=>{const t=e.target;0===e.button&&re(t)&&o.update((()=>{const e=S();Ct(e)&&e.tableKey===c.tableNodeKey&&s.contains(t)&&c.$clearHighlight()}))};i.addEventListener(\"pointerdown\",d,c.listenerOptions),c.listenersToRemove.add((()=>{i.removeEventListener(\"pointerdown\",d)}));for(const[t,n]of Ot)c.listenersToRemove.add(o.registerCommand(t,(t=>Qt(o,t,n,e,c)),$));c.listenersToRemove.add(o.registerCommand(L,(t=>{const n=S();if(Ct(n)){const o=Ft(e,n.focus.getNode());if(null!==o)return Zt(t),o.selectEnd(),!0}return!1}),$));const g=t=>()=>{const o=S();if(!Jt(o,e))return!1;if(Ct(o))return c.$clearText(),!0;if(w(o)){if(!Re(Ft(e,o.anchor.getNode())))return!1;const r=o.anchor.getNode(),l=o.focus.getNode(),s=e.isParentOf(r),i=e.isParentOf(l);if(s&&!i||i&&!s)return c.$clearText(),!0;const a=n(o.anchor.getNode(),(e=>N(e))),u=a&&n(a,(e=>N(e)&&Re(e.getParent())));if(!N(u)||!N(a))return!1;if(t===ee&&null===u.getPreviousSibling())return!0}return!1};for(const e of At)c.listenersToRemove.add(o.registerCommand(e,g(e),W));const p=t=>{const n=S();if(!Ct(n)&&!w(n))return!1;const o=e.isParentOf(n.anchor.getNode());if(o!==e.isParentOf(n.focus.getNode())){const t=o?\"anchor\":\"focus\",r=o?\"focus\":\"anchor\",{key:l,offset:s,type:i}=n[r];return e[n[t].isBefore(n[r])?\"selectPrevious\":\"selectNext\"]()[r].set(l,s,i),!1}return!!Jt(n,e)&&(!!Ct(n)&&(t&&(t.preventDefault(),t.stopPropagation()),c.$clearText(),!0))};for(const e of Kt)c.listenersToRemove.add(o.registerCommand(e,p,W));return c.listenersToRemove.add(o.registerCommand(z,(e=>{const t=S();if(t){if(!Ct(t)&&!w(t))return!1;_e(o,r(e,ClipboardEvent)?e:null,Se(t));const n=p(e);return w(t)?(t.removeText(),!0):n}return!1}),W)),c.listenersToRemove.add(o.registerCommand(H,(t=>{const o=S();if(!Jt(o,e))return!1;if(Ct(o))return c.$formatCells(t),!0;if(w(o)){const e=n(o.anchor.getNode(),(e=>Re(e)));if(!Re(e))return!1}return!1}),W)),c.listenersToRemove.add(o.registerCommand(P,(t=>{const n=S();if(!Ct(n)||!Jt(n,e))return!1;const o=n.anchor.getNode(),r=n.focus.getNode();if(!Re(o)||!Re(r))return!1;if(function(e,t){if(Ct(e)){const n=e.anchor.getNode(),o=e.focus.getNode();if(t&&n&&o){const[e]=ut(t,n,o);return n.getKey()===e[0][0].cell.getKey()&&o.getKey()===e[e.length-1].at(-1).cell.getKey()}}return!1}(n,e))return e.setFormat(t),!0;const[l,s,i]=ut(e,o,r),c=Math.max(s.startRow+s.cell.__rowSpan-1,i.startRow+i.cell.__rowSpan-1),a=Math.max(s.startColumn+s.cell.__colSpan-1,i.startColumn+i.cell.__colSpan-1),u=Math.min(s.startRow,i.startRow),h=Math.min(s.startColumn,i.startColumn),d=new Set;for(let e=u;e<=c;e++)for(let n=h;n<=a;n++){const o=l[e][n].cell;if(d.has(o))continue;d.add(o),o.setFormat(t);const r=o.getChildren();for(let e=0;e<r.length;e++){const n=r[e];N(n)&&!n.isInline()&&n.setFormat(t)}}return!0}),W)),c.listenersToRemove.add(o.registerCommand(B,(t=>{const r=S();if(!Jt(r,e))return!1;if(Ct(r))return c.$clearHighlight(),!1;if(w(r)){const l=n(r.anchor.getNode(),(e=>Re(e)));if(!Re(l))return!1;if(\"string\"==typeof t){const n=tn(o,r,e);if(n)return en(n,e,[_(t)]),!0}}return!1}),W)),l&&c.listenersToRemove.add(o.registerCommand(D,(t=>{const o=S();if(!w(o)||!o.isCollapsed()||!Jt(o,e))return!1;const r=jt(o.anchor.getNode());return!(null===r||!e.is(Vt(r)))&&(Zt(t),function(e,t){const o=\"next\"===t?\"getNextSibling\":\"getPreviousSibling\",r=\"next\"===t?\"getFirstChild\":\"getLastChild\",l=e[o]();if(N(l))return l.selectEnd();const s=n(e,Ee);null===s&&Fe(247);for(let e=s[o]();Ee(e);e=e[o]()){const t=e[r]();if(N(t))return t.selectEnd()}const i=n(s,fn);null===i&&Fe(248);\"next\"===t?i.selectNext():i.selectPrevious()}(r,t.shiftKey?\"previous\":\"next\"),!0)}),W)),c.listenersToRemove.add(o.registerCommand(I,(t=>e.isSelected()),$)),c.listenersToRemove.add(o.registerCommand(U,((e,t)=>{if(o!==t)return!1;const{nodes:r,selection:l}=e,s=l.getStartEndPoints(),i=Ct(l),c=w(l)&&null!==n(l.anchor.getNode(),(e=>Re(e)))&&null!==n(l.focus.getNode(),(e=>Re(e)))||i;if(1!==r.length||!fn(r[0])||!c||null===s)return!1;const[a,u]=s,[h,d,g]=dt(a),p=n(u.getNode(),(e=>Re(e)));if(!(Re(h)&&Re(p)&&Ee(d)&&fn(g)))return!1;const C=r[0],[_,S,b]=ut(g,h,p),[y]=ht(C,null,null),N=_.length,x=N>0?_[0].length:0;let v=S.startRow,R=S.startColumn,T=y.length,F=T>0?y[0].length:0;if(i){const e=ft(_,S,b),t=e.maxRow-e.minRow+1,n=e.maxColumn-e.minColumn+1;v=e.minRow,R=e.minColumn,T=Math.min(T,t),F=Math.min(F,n)}let O=!1;const A=Math.min(N,v+T)-1,K=Math.min(x,R+F)-1,E=new Set;for(let e=v;e<=A;e++)for(let t=R;t<=K;t++){const n=_[e][t];E.has(n.cell.getKey())||(1===n.cell.__rowSpan&&1===n.cell.__colSpan||(at(n.cell),E.add(n.cell.getKey()),O=!0))}let[k]=ht(g.getWritable(),null,null);const M=T-N+v;for(let e=0;e<M;e++){Xe(k[N-1][0].cell)}const $=F-x+R;for(let e=0;e<$;e++){Qe(k[0][x-1].cell,!0,!1)}[k]=ht(g.getWritable(),null,null);for(let e=v;e<v+T;e++)for(let t=R;t<R+F;t++){const n=e-v,o=t-R,r=y[n][o];if(r.startRow!==n||r.startColumn!==o)continue;const l=r.cell;if(1!==l.__rowSpan||1!==l.__colSpan){const n=[],o=Math.min(e+l.__rowSpan,v+T)-1,r=Math.min(t+l.__colSpan,R+F)-1;for(let l=e;l<=o;l++)for(let e=t;e<=r;e++){const t=k[l][e];n.push(t.cell)}st(n),O=!0}const{cell:s}=k[e][t],i=s.getChildren();l.getChildren().forEach((e=>{if(f(e)){m().append(e),s.append(e)}else s.append(e)})),i.forEach((e=>e.remove()))}if(i&&O){const[e]=ht(g.getWritable(),null,null);e[S.startRow][S.startColumn].cell.selectEnd()}return!0}),W)),c.listenersToRemove.add(o.registerCommand(A,(()=>{const t=S(),r=J(),l=c.getAndClearNextFocus();if(null!==l){const{focusCell:n}=l;if(Ct(t)&&t.tableKey===c.tableNodeKey)return(n.x!==c.focusX||n.y!==c.focusY)&&(c.$setFocusCellForSelection(n),!0);if(n!==c.anchorCell&&Jt(t,e))return c.$setFocusCellForSelection(n),!0}if(c.getAndClearShouldCheckSelection()&&w(r)&&w(t)&&t.isCollapsed()){const o=t.anchor.getNode(),r=e.getFirstChild(),l=jt(o);if(null!==l&&Ee(r)){const t=r.getFirstChild();if(Re(t)&&e.is(n(l,(n=>n.is(e)||n.is(t)))))return t.selectStart(),!0}}if(w(t)){const{anchor:n,focus:l}=t,s=n.getNode(),i=l.getNode(),a=jt(s),u=jt(i),h=!(!a||!e.is(Vt(a))),d=!(!u||!e.is(Vt(u))),f=h!==d,g=h&&d,m=t.isBackward();if(f){const n=t.clone();if(d){const[t]=ut(e,u,u),o=t[0][0].cell,r=t[t.length-1].at(-1).cell;n.focus.set(m?o.getKey():r.getKey(),m?o.getChildrenSize():r.getChildrenSize(),\"element\")}else if(h){const[t]=ut(e,a,a),o=t[0][0].cell,r=t[t.length-1].at(-1).cell;n.anchor.set(m?r.getKey():o.getKey(),m?r.getChildrenSize():0,\"element\")}O(n),Ht(o,c)}else if(g&&(a.is(u)||(c.$setAnchorCellForSelection(nn(c,a)),c.$setFocusCellForSelection(nn(c,u),!0)),\"touch\"===c.pointerType&&c.isSelecting&&t.isCollapsed()&&w(r)&&r.isCollapsed())){const e=jt(r.anchor.getNode());e&&!e.is(u)&&(c.$setAnchorCellForSelection(nn(c,e)),c.$setFocusCellForSelection(nn(c,u),!0),c.pointerType=null)}}else if(t&&Ct(t)&&t.is(r)&&t.tableKey===e.getKey()){const n=K(i);if(n&&n.anchorNode&&n.focusNode){const r=Y(n.focusNode),l=r&&!e.isParentOf(r),s=Y(n.anchorNode),i=s&&e.isParentOf(s);if(l&&i&&n.rangeCount>0){const r=q(n,o);r&&(r.anchor.set(e.getKey(),t.isBackward()?e.getChildrenSize():0,\"element\"),n.removeAllRanges(),O(r))}}}return t&&!t.is(r)&&(Ct(t)||Ct(r))&&c.tableSelection&&!c.tableSelection.is(r)?(Ct(t)&&t.tableKey===c.tableNodeKey?c.$updateTableTableSelection(t):!Ct(t)&&Ct(r)&&r.tableKey===c.tableNodeKey&&c.$updateTableTableSelection(null),!1):(c.hasHijackedSelectionStyles&&!e.isSelected()?function(e,t){t.$enableHighlightStyle(),zt(t.table,(t=>{const n=t.elem;t.highlighted=!1,Xt(e,t),n.getAttribute(\"style\")||n.removeAttribute(\"style\")}))}(o,c):!c.hasHijackedSelectionStyles&&e.isSelected()&&Ht(o,c),!1)}),W)),c.listenersToRemove.add(o.registerCommand(M,(()=>{const t=S();if(!w(t)||!t.isCollapsed()||!Jt(t,e))return!1;const n=tn(o,t,e);return!!n&&(en(n,e),!0)}),W)),c}function kt(e){return e[Nt]||null}function Mt(e){let t=e;for(;null!=t;){const e=t.nodeName;if(\"TD\"===e||\"TH\"===e){const e=t._cell;return void 0===e?null:e}t=t.parentNode}return null}function $t(e,t){if(!e.contains(t))return null;let n=null;for(let o=t;null!=o;o=o.parentNode){if(o===e)return n;const t=o.nodeName;\"TD\"!==t&&\"TH\"!==t||(n=o._cell||null)}return null}function Lt(e,t){const n=[],o={columns:0,domRows:n,rows:0};let r=Rt(e,t).querySelector(\"tr\"),l=0,s=0;for(n.length=0;null!=r;){const e=r.nodeName;if(\"TD\"===e||\"TH\"===e){const e={elem:r,hasBackgroundColor:\"\"!==r.style.backgroundColor,highlighted:!1,x:l,y:s};r._cell=e;let t=n[s];void 0===t&&(t=n[s]=[]),t[l]=e}else{const e=r.firstChild;if(null!=e){r=e;continue}}const t=r.nextSibling;if(null!=t){l++,r=t;continue}const o=r.parentNode;if(null!=o){const e=o.nextSibling;if(null==e)break;s++,l=0,r=e}}return o.columns=l+1,o.rows=s+1,o}function Wt(e,t,n){const o=new Set(n?n.getNodes():[]);zt(t,((t,n)=>{const r=t.elem;o.has(n)?(t.highlighted=!0,qt(e,t)):(t.highlighted=!1,Xt(e,t),r.getAttribute(\"style\")||r.removeAttribute(\"style\"))}))}function zt(e,t){const{domRows:n}=e;for(let e=0;e<n.length;e++){const o=n[e];if(o)for(let n=0;n<o.length;n++){const r=o[n];if(!r)continue;const l=Y(r.elem);null!==l&&t(r,l,{x:n,y:e})}}}function Ht(e,t){t.$disableHighlightStyle(),zt(t.table,(t=>{t.highlighted=!0,qt(e,t)}))}const Pt=(e,t,n,o,r)=>{const l=\"forward\"===r;switch(r){case\"backward\":case\"forward\":return n!==(l?e.table.columns-1:0)?Yt(t.getCellNodeFromCordsOrThrow(n+(l?1:-1),o,e.table),l):o!==(l?e.table.rows-1:0)?Yt(t.getCellNodeFromCordsOrThrow(l?0:e.table.columns-1,o+(l?1:-1),e.table),l):l?t.selectNext():t.selectPrevious(),!0;case\"up\":return 0!==o?Yt(t.getCellNodeFromCordsOrThrow(n,o-1,e.table),!1):t.selectPrevious(),!0;case\"down\":return o!==e.table.rows-1?Yt(t.getCellNodeFromCordsOrThrow(n,o+1,e.table),!0):t.selectNext(),!0;default:return!1}};function Bt(e,t){let n,o;if(t.startColumn===e.minColumn)n=\"minColumn\";else{if(t.startColumn+t.cell.__colSpan-1!==e.maxColumn)return null;n=\"maxColumn\"}if(t.startRow===e.minRow)o=\"minRow\";else{if(t.startRow+t.cell.__rowSpan-1!==e.maxRow)return null;o=\"maxRow\"}return[n,o]}function Dt([e,t]){return[\"minColumn\"===e?\"maxColumn\":\"minColumn\",\"minRow\"===t?\"maxRow\":\"minRow\"]}function It(e,t,[n,o]){const r=t[o],l=e[r];void 0===l&&Fe(250,o,String(r));const s=t[n],i=l[s];return void 0===i&&Fe(250,n,String(s)),i}function Ut(e,t,n,o,r){const l=ft(t,n,o),s=function(e,t){const{minColumn:n,maxColumn:o,minRow:r,maxRow:l}=t;let s=1,i=1,c=1,a=1;const u=e[r],h=e[l];for(let e=n;e<=o;e++)s=Math.max(s,u[e].cell.__rowSpan),a=Math.max(a,h[e].cell.__rowSpan);for(let t=r;t<=l;t++)i=Math.max(i,e[t][n].cell.__colSpan),c=Math.max(c,e[t][o].cell.__colSpan);return{bottomSpan:a,leftSpan:i,rightSpan:c,topSpan:s}}(t,l),{topSpan:i,leftSpan:c,bottomSpan:a,rightSpan:u}=s,h=function(e,t){const n=Bt(e,t);return null===n&&Fe(249,t.cell.getKey()),n}(l,n),[d,f]=Dt(h);let g=l[d],m=l[f];\"forward\"===r?g+=\"maxColumn\"===d?1:c:\"backward\"===r?g-=\"minColumn\"===d?1:u:\"down\"===r?m+=\"maxRow\"===f?1:i:\"up\"===r&&(m-=\"minRow\"===f?1:a);const p=t[m];if(void 0===p)return!1;const C=p[g];if(void 0===C)return!1;const[_,S]=function(e,t,n){const o=ft(e,t,n),r=Bt(o,t);if(r)return[It(e,o,r),It(e,o,Dt(r))];const l=Bt(o,n);if(l)return[It(e,o,Dt(l)),It(e,o,l)];const s=[\"minColumn\",\"minRow\"];return[It(e,o,s),It(e,o,Dt(s))]}(t,n,C),w=nn(e,_.cell),b=nn(e,S.cell);return e.$setAnchorCellForSelection(w),e.$setFocusCellForSelection(b,!0),!0}function Jt(e,t){if(w(e)||Ct(e)){const n=t.isParentOf(e.anchor.getNode()),o=t.isParentOf(e.focus.getNode());return n&&o}return!1}function Yt(e,t){t?e.selectStart():e.selectEnd()}function qt(t,n){const o=n.elem,r=t._config.theme;Re(Y(o))||Fe(131),e(o,r.tableCellSelected)}function Xt(e,t){const n=t.elem;Re(Y(n))||Fe(131);const r=e._config.theme;o(n,r.tableCellSelected)}function jt(e){const t=n(e,Re);return Re(t)?t:null}function Vt(e){const t=n(e,fn);return fn(t)?t:null}function Gt(e,t,o,r,l,s,i){const c=le(o.focus,l?\"previous\":\"next\");if(se(c))return!1;let a=c;for(const e of ie(c).iterNodeCarets(\"shadowRoot\")){if(!ce(e)||!N(e.origin))return!1;a=e}const u=a.getParentAtCaret();if(!Re(u))return!1;const h=u,d=function(e){for(const t of ie(e).iterNodeCarets(\"root\")){const{origin:n}=t;if(Re(n)){if(fe(t))return ge(n,e.direction)}else if(!Ee(n))break}return null}(ae(h,a.direction)),f=n(h,fn);if(!f||!f.is(s))return!1;const g=e.getElementByKey(h.getKey()),m=Mt(g);if(!g||!m)return!1;const p=un(e,f);if(i.table=p,d)if(\"extend\"===r){const t=Mt(e.getElementByKey(d.origin.getKey()));if(!t)return!1;i.$setAnchorCellForSelection(m),i.$setFocusCellForSelection(t,!0)}else{const e=he(d);ue(o.anchor,e),ue(o.focus,e)}else if(\"extend\"===r)i.$setAnchorCellForSelection(m),i.$setFocusCellForSelection(m,!0);else{const e=function(e){const t=de(e);return fe(t)?he(t):e}(ae(f,c.direction));ue(o.anchor,e),ue(o.focus,e)}return Zt(t),!0}function Qt(e,t,o,r,l){if((\"up\"===o||\"down\"===o)&&function(e){const t=e.getRootElement();if(!t)return!1;return t.hasAttribute(\"aria-controls\")&&\"typeahead-menu\"===t.getAttribute(\"aria-controls\")}(e))return!1;const s=S();if(!Jt(s,r)){if(w(s)){if(\"backward\"===o){if(s.focus.offset>0)return!1;const e=function(e){for(let t=e,n=e;null!==n;t=n,n=n.getParent())if(N(n)){if(n!==t&&n.getFirstChild()!==t)return null;if(!n.isInline())return n}return null}(s.focus.getNode());if(!e)return!1;const n=e.getPreviousSibling();return!!fn(n)&&(Zt(t),t.shiftKey?s.focus.set(n.getParentOrThrow().getKey(),n.getIndexWithinParent(),\"element\"):n.selectEnd(),!0)}if(t.shiftKey&&(\"up\"===o||\"down\"===o)){const e=s.focus.getNode();if(!s.isCollapsed()&&(\"up\"===o&&!s.isBackward()||\"down\"===o&&s.isBackward())){let l=n(e,(e=>fn(e)));if(Re(l)&&(l=n(l,fn)),l!==r)return!1;if(!l)return!1;const i=\"down\"===o?l.getNextSibling():l.getPreviousSibling();if(!i)return!1;let c=0;\"up\"===o&&N(i)&&(c=i.getChildrenSize());let a=i;if(\"up\"===o&&N(i)){const e=i.getLastChild();a=e||i,c=f(a)?a.getTextContentSize():0}const u=s.clone();return u.focus.set(a.getKey(),c,f(a)?\"text\":\"element\"),O(u),Zt(t),!0}if(X(e)){const e=\"up\"===o?s.getNodes()[s.getNodes().length-1]:s.getNodes()[0];if(e){if(null!==Ft(r,e)){const e=r.getFirstDescendant(),t=r.getLastDescendant();if(!e||!t)return!1;const[n]=dt(e),[o]=dt(t),s=r.getCordsFromCellNode(n,l.table),i=r.getCordsFromCellNode(o,l.table),c=r.getDOMCellFromCordsOrThrow(s.x,s.y,l.table),a=r.getDOMCellFromCordsOrThrow(i.x,i.y,l.table);return l.$setAnchorCellForSelection(c),l.$setFocusCellForSelection(a,!0),!0}}return!1}{let r=n(e,(e=>N(e)&&!e.isInline()));if(Re(r)&&(r=n(r,fn)),!r)return!1;const i=\"down\"===o?r.getNextSibling():r.getPreviousSibling();if(fn(i)&&l.tableNodeKey===i.getKey()){const e=i.getFirstDescendant(),n=i.getLastDescendant();if(!e||!n)return!1;const[r]=dt(e),[l]=dt(n),c=s.clone();return c.focus.set((\"up\"===o?r:l).getKey(),\"up\"===o?0:l.getChildrenSize(),\"element\"),Zt(t),O(c),!0}}}}return\"down\"===o&&sn(e)&&l.setShouldCheckSelection(),!1}if(w(s)){if(\"backward\"===o||\"forward\"===o){return Gt(e,t,s,t.shiftKey?\"extend\":\"move\",\"backward\"===o,r,l)}if(s.isCollapsed()){const{anchor:i,focus:c}=s,a=n(i.getNode(),Re),u=n(c.getNode(),Re);if(!Re(a)||!a.is(u))return!1;const h=Vt(a);if(h!==r&&null!=h){const n=Rt(h,e.getElementByKey(h.getKey()));if(null!=n)return l.table=Lt(h,n),Qt(e,t,o,h,l)}const d=e.getElementByKey(a.__key),f=e.getElementByKey(i.key);if(null==f||null==d)return!1;let g;if(\"element\"===i.type)g=f.getBoundingClientRect();else{const t=K(Tt(e));if(null===t||0===t.rangeCount)return!1;g=t.getRangeAt(0).getBoundingClientRect()}const m=\"up\"===o?a.getFirstChild():a.getLastChild();if(null==m)return!1;const p=e.getElementByKey(m.__key);if(null==p)return!1;const C=p.getBoundingClientRect();if(\"up\"===o?C.top>g.top-g.height:g.bottom+g.height>C.bottom){Zt(t);const e=r.getCordsFromCellNode(a,l.table);if(!t.shiftKey)return Pt(l,r,e.x,e.y,o);{const t=r.getDOMCellFromCordsOrThrow(e.x,e.y,l.table);l.$setAnchorCellForSelection(t),l.$setFocusCellForSelection(t,!0)}return!0}}}else if(Ct(s)){const{anchor:i,focus:c}=s,a=n(i.getNode(),Re),u=n(c.getNode(),Re),[h]=s.getNodes();fn(h)||Fe(251);const d=Rt(h,e.getElementByKey(h.getKey()));if(!Re(a)||!Re(u)||!fn(h)||null==d)return!1;l.$updateTableTableSelection(s);const f=Lt(h,d),g=r.getCordsFromCellNode(a,f),m=r.getDOMCellFromCordsOrThrow(g.x,g.y,f);if(l.$setAnchorCellForSelection(m),Zt(t),t.shiftKey){const[e,t,n]=ut(r,a,u);return Ut(l,e,t,n,o)}return u.selectEnd(),!0}return!1}function Zt(e){e.preventDefault(),e.stopImmediatePropagation(),e.stopPropagation()}function en(e,t,n){const o=m();\"first\"===e?t.insertBefore(o):t.insertAfter(o),o.append(...n||[]),o.selectEnd()}function tn(e,t,o){const r=o.getParent();if(!r)return;const l=K(Tt(e));if(!l)return;const s=l.anchorNode,i=e.getElementByKey(r.getKey()),c=Rt(o,e.getElementByKey(o.getKey()));if(!s||!i||!c||!i.contains(s)||c.contains(s))return;const a=n(t.anchor.getNode(),(e=>Re(e)));if(!a)return;const u=n(a,(e=>fn(e)));if(!fn(u)||!u.is(o))return;const[h,d]=ut(o,a,a),f=h[0][0],g=h[h.length-1][h[0].length-1],{startRow:m,startColumn:p}=d,C=m===f.startRow&&p===f.startColumn,_=m===g.startRow&&p===g.startColumn;return C?\"first\":_?\"last\":void 0}function nn(e,t){const{tableNode:n}=e.$lookup(),o=n.getCordsFromCellNode(t,e.table);return n.getDOMCellFromCordsOrThrow(o.x,o.y,e.table)}function on(e,t,n){return Ft(e,Y(t,n))}function rn(t,n,r){if(!n.theme.tableAlignment)return;const l=[],s=[];for(const e of[\"center\",\"right\"]){const t=n.theme.tableAlignment[e];t&&(e===r?s:l).push(t)}o(t,...l),e(t,...s)}const ln=new WeakSet;function sn(e=F()){return ln.has(e)}function cn(e,t){t?ln.add(e):ln.delete(e)}class an extends u{static getType(){return\"table\"}getColWidths(){return this.getLatest().__colWidths}setColWidths(e){const t=this.getWritable();return t.__colWidths=e,t}static clone(e){return new an(e.__key)}afterCloneFrom(e){super.afterCloneFrom(e),this.__colWidths=e.__colWidths,this.__rowStriping=e.__rowStriping,this.__frozenColumnCount=e.__frozenColumnCount,this.__frozenRowCount=e.__frozenRowCount}static importDOM(){return{table:e=>({conversion:hn,priority:1})}}static importJSON(e){return dn().updateFromJSON(e)}updateFromJSON(e){return super.updateFromJSON(e).setRowStriping(e.rowStriping||!1).setFrozenColumns(e.frozenColumnCount||0).setFrozenRows(e.frozenRowCount||0).setColWidths(e.colWidths)}constructor(e){super(e),this.__rowStriping=!1,this.__frozenColumnCount=0,this.__frozenRowCount=0}exportJSON(){return{...super.exportJSON(),colWidths:this.getColWidths(),frozenColumnCount:this.__frozenColumnCount?this.__frozenColumnCount:void 0,frozenRowCount:this.__frozenRowCount?this.__frozenRowCount:void 0,rowStriping:this.__rowStriping?this.__rowStriping:void 0}}extractWithChild(e,t,n){return\"html\"===n}getDOMSlot(e){const t=vt(e)?e:e.querySelector(\"table\");return vt(t)||Fe(229),super.getDOMSlot(e).withElement(t).withAfter(t.querySelector(\"colgroup\"))}createDOM(t,n){const o=document.createElement(\"table\");this.__style&&(o.style.cssText=this.__style);const r=document.createElement(\"colgroup\");if(o.appendChild(r),me(r),e(o,t.theme.table),this.updateTableElement(null,o,t),sn(n)){const n=document.createElement(\"div\"),r=t.theme.tableScrollableWrapper;return r?e(n,r):n.style.cssText=\"overflow-x: auto;\",n.appendChild(o),this.updateTableWrapper(null,n,o,t),n}return o}updateTableWrapper(t,n,r,l){this.__frozenColumnCount!==(t?t.__frozenColumnCount:0)&&function(t,n,r,l){l>0?(e(t,r.theme.tableFrozenColumn),n.setAttribute(\"data-lexical-frozen-column\",\"true\")):(o(t,r.theme.tableFrozenColumn),n.removeAttribute(\"data-lexical-frozen-column\"))}(n,r,l,this.__frozenColumnCount),this.__frozenRowCount!==(t?t.__frozenRowCount:0)&&function(t,n,r,l){l>0?(e(t,r.theme.tableFrozenRow),n.setAttribute(\"data-lexical-frozen-row\",\"true\")):(o(t,r.theme.tableFrozenRow),n.removeAttribute(\"data-lexical-frozen-row\"))}(n,r,l,this.__frozenRowCount)}updateTableElement(t,n,r){this.__style!==(t?t.__style:\"\")&&(n.style.cssText=this.__style),this.__rowStriping!==(!!t&&t.__rowStriping)&&function(t,n,r){r?(e(t,n.theme.tableRowStriping),t.setAttribute(\"data-lexical-row-striping\",\"true\")):(o(t,n.theme.tableRowStriping),t.removeAttribute(\"data-lexical-row-striping\"))}(n,r,this.__rowStriping),function(e,t,n,o){const r=e.querySelector(\"colgroup\");if(!r)return;const l=[];for(let e=0;e<n;e++){const t=document.createElement(\"col\"),n=o&&o[e];n&&(t.style.width=`${n}px`),l.push(t)}r.replaceChildren(...l)}(n,0,this.getColumnCount(),this.getColWidths()),rn(n,r,this.getFormatType())}updateDOM(e,t,n){const o=this.getDOMSlot(t).element;return t===o===sn()||(l(r=t)&&\"DIV\"===r.nodeName&&this.updateTableWrapper(e,t,o,n),this.updateTableElement(e,o,n),!1);var r}exportDOM(e){const t=super.exportDOM(e),{element:n}=t;return{after:n=>{if(t.after&&(n=t.after(n)),!vt(n)&&l(n)&&(n=n.querySelector(\"table\")),!vt(n))return null;rn(n,e._config,this.getFormatType());const[o]=ht(this,null,null),r=new Map;for(const e of o)for(const t of e){const e=t.cell.getKey();r.has(e)||r.set(e,{colSpan:t.cell.getColSpan(),startColumn:t.startColumn})}const s=new Set;for(const e of n.querySelectorAll(\":scope > tr > [data-temporary-table-cell-lexical-key]\")){const t=e.getAttribute(\"data-temporary-table-cell-lexical-key\");if(t){const n=r.get(t);if(e.removeAttribute(\"data-temporary-table-cell-lexical-key\"),n){r.delete(t);for(let e=0;e<n.colSpan;e++)s.add(e+n.startColumn)}}}const i=n.querySelector(\":scope > colgroup\");if(i){const e=Array.from(n.querySelectorAll(\":scope > colgroup > col\")).filter(((e,t)=>s.has(t)));i.replaceChildren(...e)}const c=n.querySelectorAll(\":scope > tr\");if(c.length>0){const e=document.createElement(\"tbody\");for(const t of c)e.appendChild(t);n.append(e)}return n},element:!vt(n)&&l(n)?n.querySelector(\"table\"):n}}canBeEmpty(){return!1}isShadowRoot(){return!0}getCordsFromCellNode(e,t){const{rows:n,domRows:o}=t;for(let t=0;t<n;t++){const n=o[t];if(null!=n)for(let o=0;o<n.length;o++){const r=n[o];if(null==r)continue;const{elem:l}=r,s=on(this,l);if(null!==s&&e.is(s))return{x:o,y:t}}}throw new Error(\"Cell not found in table.\")}getDOMCellFromCords(e,t,n){const{domRows:o}=n,r=o[t];if(null==r)return null;const l=r[e<r.length?e:r.length-1];return null==l?null:l}getDOMCellFromCordsOrThrow(e,t,n){const o=this.getDOMCellFromCords(e,t,n);if(!o)throw new Error(\"Cell not found at cords.\");return o}getCellNodeFromCords(e,t,n){const o=this.getDOMCellFromCords(e,t,n);if(null==o)return null;const r=Y(o.elem);return Re(r)?r:null}getCellNodeFromCordsOrThrow(e,t,n){const o=this.getCellNodeFromCords(e,t,n);if(!o)throw new Error(\"Node at cords not TableCellNode.\");return o}getRowStriping(){return Boolean(this.getLatest().__rowStriping)}setRowStriping(e){const t=this.getWritable();return t.__rowStriping=e,t}setFrozenColumns(e){const t=this.getWritable();return t.__frozenColumnCount=e,t}getFrozenColumns(){return this.getLatest().__frozenColumnCount}setFrozenRows(e){const t=this.getWritable();return t.__frozenRowCount=e,t}getFrozenRows(){return this.getLatest().__frozenRowCount}canSelectBefore(){return!0}canIndent(){return!1}getColumnCount(){const e=this.getFirstChild();if(!e)return 0;let t=0;return e.getChildren().forEach((e=>{Re(e)&&(t+=e.getColSpan())})),t}}function un(e,t){const n=e.getElementByKey(t.getKey());return null===n&&Fe(230),Lt(t,n)}function hn(e){const n=dn();e.hasAttribute(\"data-lexical-row-striping\")&&n.setRowStriping(!0),e.hasAttribute(\"data-lexical-frozen-column\")&&n.setFrozenColumns(1),e.hasAttribute(\"data-lexical-frozen-row\")&&n.setFrozenRows(1);const o=e.querySelector(\":scope > colgroup\");if(o){let e=[];for(const t of o.querySelectorAll(\":scope > col\")){let n=t.style.width||\"\";if(!we.test(n)&&(n=t.getAttribute(\"width\")||\"\",!/^\\d+$/.test(n))){e=void 0;break}e.push(parseFloat(n))}e&&n.setColWidths(e)}return{after:e=>t(e,Ee),node:n}}function dn(){return p(new an)}function fn(e){return e instanceof an}function gn({rows:e,columns:t,includeHeaders:n}){const o=S()||J();if(!o||!w(o))return!1;if(Vt(o.anchor.getNode()))return!1;const r=Le(Number(e),Number(t),n);c(r);const l=r.getFirstDescendant();return f(l)&&l.select(),!0}function mn(e){Ee(e.getParent())?e.isEmpty()&&e.append(m()):e.remove()}function pn(e){fn(e.getParent())?a(e,Re):e.remove()}function Cn(e){a(e,Ee);const[t]=ht(e,null,null),n=t.reduce(((e,t)=>Math.max(e,t.length)),0),o=e.getChildren();for(let e=0;e<t.length;++e){const r=o[e];if(!r)continue;Ee(r)||Fe(254,r.constructor.name,r.getType());const l=t[e].reduce(((e,t)=>t?1+e:e),0);if(l!==n)for(let e=l;e<n;++e){const e=ve();e.append(m()),r.append(e)}}}function _n(e){if(e.detail<3||!re(e.target))return!1;const t=Y(e.target);if(null===t)return!1;const o=n(t,(e=>N(e)&&!e.isInline()));if(null===o)return!1;return!!Re(o.getParent())&&(o.select(0),!0)}function Sn(e){return e.registerNodeTransform(ye,(e=>{if(e.getColSpan()>1||e.getRowSpan()>1){const[,,t]=dt(e),[n]=ut(t,e,e),o=n.length,r=n[0].length;let l=t.getFirstChild();Ee(l)||Fe(175);const i=[];for(let e=0;e<o;e++){0!==e&&(l=l.getNextSibling(),Ee(l)||Fe(175));let t=null;for(let o=0;o<r;o++){const r=n[e][o],c=r.cell;if(r.startRow===e&&r.startColumn===o)t=c,i.push(c);else if(c.getColSpan()>1||c.getRowSpan()>1){Re(c)||Fe(176);const e=ve(c.__headerState);null!==t?t.insertAfter(e):s(l,e)}}}for(const e of i)e.setColSpan(1),e.setRowSpan(1)}}))}function wn(e,t=!0){const n=new Map,o=(o,r,l)=>{const s=Rt(o,l),i=Et(o,s,e,t);n.set(r,[i,s])},r=e.registerMutationListener(an,(t=>{e.getEditorState().read((()=>{for(const[e,r]of t){const t=n.get(e);if(\"created\"===r||\"updated\"===r){const{tableNode:r,tableElement:l}=bt(e);void 0===t?o(r,e,l):l!==t[1]&&(t[0].removeListeners(),n.delete(e),o(r,e,l))}else\"destroyed\"===r&&void 0!==t&&(t[0].removeListeners(),n.delete(e))}}),{editor:e})}),{skipInitialization:!1});return()=>{r();for(const[,[e]]of n)e.removeListeners()}}function bn(e){return e.hasNodes([an])||Fe(255),i(e.registerCommand(Te,gn,pe),e.registerCommand(U,(({nodes:t,selection:n},o)=>{if(e!==o||!w(n))return!1;return null!==Vt(n.anchor.getNode())&&t.some(fn)}),pe),e.registerCommand(Ce,_n,pe),e.registerNodeTransform(an,Cn),e.registerNodeTransform(Oe,pn),e.registerNodeTransform(ye,mn))}export{ut as $computeTableMap,ht as $computeTableMapSkipCellCheck,ve as $createTableCellNode,dn as $createTableNode,Le as $createTableNodeWithDimensions,Ke as $createTableRowNode,_t as $createTableSelection,St as $createTableSelectionFrom,Ze as $deleteTableColumn,nt as $deleteTableColumnAtSelection,ot as $deleteTableColumn__EXPERIMENTAL,et as $deleteTableRowAtSelection,tt as $deleteTableRow__EXPERIMENTAL,jt as $findCellNode,Vt as $findTableNode,un as $getElementForTableNode,dt as $getNodeTriplet,bt as $getTableAndElementByKey,We as $getTableCellNodeFromLexicalNode,gt as $getTableCellNodeRect,Be as $getTableColumnIndexFromTableCellNode,He as $getTableNodeFromLexicalNodeOrThrow,Pe as $getTableRowIndexFromTableCellNode,ze as $getTableRowNodeFromTableCellNodeOrThrow,je as $insertTableColumn,Ve as $insertTableColumnAtSelection,Ge as $insertTableColumn__EXPERIMENTAL,Ue as $insertTableRow,Ye as $insertTableRowAtSelection,qe as $insertTableRow__EXPERIMENTAL,sn as $isScrollableTablesActive,Re as $isTableCellNode,fn as $isTableNode,Ee as $isTableRowNode,Ct as $isTableSelection,st as $mergeCells,Ie as $removeTableRowAtIndex,ct as $unmergeCell,Te as INSERT_TABLE_COMMAND,be as TableCellHeaderStates,ye as TableCellNode,an as TableNode,yt as TableObserver,Oe as TableRowNode,Et as applyTableHandlers,Mt as getDOMCellFromTarget,Rt as getTableElement,kt as getTableObserverFromTableElement,Sn as registerTableCellUnmergeTransform,bn as registerTablePlugin,wn as registerTableSelectionObserver,cn as setScrollableTablesActive};\n","var components = {\"core\":{\"meta\":{\"path\":\"components/prism-core.js\",\"option\":\"mandatory\"},\"core\":\"Core\"},\"themes\":{\"meta\":{\"path\":\"themes/{id}.css\",\"link\":\"index.html?theme={id}\",\"exclusive\":true},\"prism\":{\"title\":\"Default\",\"option\":\"default\"},\"prism-dark\":\"Dark\",\"prism-funky\":\"Funky\",\"prism-okaidia\":{\"title\":\"Okaidia\",\"owner\":\"ocodia\"},\"prism-twilight\":{\"title\":\"Twilight\",\"owner\":\"remybach\"},\"prism-coy\":{\"title\":\"Coy\",\"owner\":\"tshedor\"},\"prism-solarizedlight\":{\"title\":\"Solarized Light\",\"owner\":\"hectormatos2011 \"},\"prism-tomorrow\":{\"title\":\"Tomorrow Night\",\"owner\":\"Rosey\"}},\"languages\":{\"meta\":{\"path\":\"components/prism-{id}\",\"noCSS\":true,\"examplesPath\":\"examples/prism-{id}\",\"addCheckAll\":true},\"markup\":{\"title\":\"Markup\",\"alias\":[\"html\",\"xml\",\"svg\",\"mathml\",\"ssml\",\"atom\",\"rss\"],\"aliasTitles\":{\"html\":\"HTML\",\"xml\":\"XML\",\"svg\":\"SVG\",\"mathml\":\"MathML\",\"ssml\":\"SSML\",\"atom\":\"Atom\",\"rss\":\"RSS\"},\"option\":\"default\"},\"css\":{\"title\":\"CSS\",\"option\":\"default\",\"modify\":\"markup\"},\"clike\":{\"title\":\"C-like\",\"option\":\"default\"},\"javascript\":{\"title\":\"JavaScript\",\"require\":\"clike\",\"modify\":\"markup\",\"optional\":\"regex\",\"alias\":\"js\",\"option\":\"default\"},\"abap\":{\"title\":\"ABAP\",\"owner\":\"dellagustin\"},\"abnf\":{\"title\":\"ABNF\",\"owner\":\"RunDevelopment\"},\"actionscript\":{\"title\":\"ActionScript\",\"require\":\"javascript\",\"modify\":\"markup\",\"owner\":\"Golmote\"},\"ada\":{\"title\":\"Ada\",\"owner\":\"Lucretia\"},\"agda\":{\"title\":\"Agda\",\"owner\":\"xy-ren\"},\"al\":{\"title\":\"AL\",\"owner\":\"RunDevelopment\"},\"antlr4\":{\"title\":\"ANTLR4\",\"alias\":\"g4\",\"owner\":\"RunDevelopment\"},\"apacheconf\":{\"title\":\"Apache Configuration\",\"owner\":\"GuiTeK\"},\"apex\":{\"title\":\"Apex\",\"require\":[\"clike\",\"sql\"],\"owner\":\"RunDevelopment\"},\"apl\":{\"title\":\"APL\",\"owner\":\"ngn\"},\"applescript\":{\"title\":\"AppleScript\",\"owner\":\"Golmote\"},\"aql\":{\"title\":\"AQL\",\"owner\":\"RunDevelopment\"},\"arduino\":{\"title\":\"Arduino\",\"require\":\"cpp\",\"alias\":\"ino\",\"owner\":\"dkern\"},\"arff\":{\"title\":\"ARFF\",\"owner\":\"Golmote\"},\"armasm\":{\"title\":\"ARM Assembly\",\"alias\":\"arm-asm\",\"owner\":\"RunDevelopment\"},\"arturo\":{\"title\":\"Arturo\",\"alias\":\"art\",\"optional\":[\"bash\",\"css\",\"javascript\",\"markup\",\"markdown\",\"sql\"],\"owner\":\"drkameleon\"},\"asciidoc\":{\"alias\":\"adoc\",\"title\":\"AsciiDoc\",\"owner\":\"Golmote\"},\"aspnet\":{\"title\":\"ASP.NET (C#)\",\"require\":[\"markup\",\"csharp\"],\"owner\":\"nauzilus\"},\"asm6502\":{\"title\":\"6502 Assembly\",\"owner\":\"kzurawel\"},\"asmatmel\":{\"title\":\"Atmel AVR Assembly\",\"owner\":\"cerkit\"},\"autohotkey\":{\"title\":\"AutoHotkey\",\"owner\":\"aviaryan\"},\"autoit\":{\"title\":\"AutoIt\",\"owner\":\"Golmote\"},\"avisynth\":{\"title\":\"AviSynth\",\"alias\":\"avs\",\"owner\":\"Zinfidel\"},\"avro-idl\":{\"title\":\"Avro IDL\",\"alias\":\"avdl\",\"owner\":\"RunDevelopment\"},\"awk\":{\"title\":\"AWK\",\"alias\":\"gawk\",\"aliasTitles\":{\"gawk\":\"GAWK\"},\"owner\":\"RunDevelopment\"},\"bash\":{\"title\":\"Bash\",\"alias\":[\"sh\",\"shell\"],\"aliasTitles\":{\"sh\":\"Shell\",\"shell\":\"Shell\"},\"owner\":\"zeitgeist87\"},\"basic\":{\"title\":\"BASIC\",\"owner\":\"Golmote\"},\"batch\":{\"title\":\"Batch\",\"owner\":\"Golmote\"},\"bbcode\":{\"title\":\"BBcode\",\"alias\":\"shortcode\",\"aliasTitles\":{\"shortcode\":\"Shortcode\"},\"owner\":\"RunDevelopment\"},\"bbj\":{\"title\":\"BBj\",\"owner\":\"hyyan\"},\"bicep\":{\"title\":\"Bicep\",\"owner\":\"johnnyreilly\"},\"birb\":{\"title\":\"Birb\",\"require\":\"clike\",\"owner\":\"Calamity210\"},\"bison\":{\"title\":\"Bison\",\"require\":\"c\",\"owner\":\"Golmote\"},\"bnf\":{\"title\":\"BNF\",\"alias\":\"rbnf\",\"aliasTitles\":{\"rbnf\":\"RBNF\"},\"owner\":\"RunDevelopment\"},\"bqn\":{\"title\":\"BQN\",\"owner\":\"yewscion\"},\"brainfuck\":{\"title\":\"Brainfuck\",\"owner\":\"Golmote\"},\"brightscript\":{\"title\":\"BrightScript\",\"owner\":\"RunDevelopment\"},\"bro\":{\"title\":\"Bro\",\"owner\":\"wayward710\"},\"bsl\":{\"title\":\"BSL (1C:Enterprise)\",\"alias\":\"oscript\",\"aliasTitles\":{\"oscript\":\"OneScript\"},\"owner\":\"Diversus23\"},\"c\":{\"title\":\"C\",\"require\":\"clike\",\"owner\":\"zeitgeist87\"},\"csharp\":{\"title\":\"C#\",\"require\":\"clike\",\"alias\":[\"cs\",\"dotnet\"],\"owner\":\"mvalipour\"},\"cpp\":{\"title\":\"C++\",\"require\":\"c\",\"owner\":\"zeitgeist87\"},\"cfscript\":{\"title\":\"CFScript\",\"require\":\"clike\",\"alias\":\"cfc\",\"owner\":\"mjclemente\"},\"chaiscript\":{\"title\":\"ChaiScript\",\"require\":[\"clike\",\"cpp\"],\"owner\":\"RunDevelopment\"},\"cil\":{\"title\":\"CIL\",\"owner\":\"sbrl\"},\"cilkc\":{\"title\":\"Cilk/C\",\"require\":\"c\",\"alias\":\"cilk-c\",\"owner\":\"OpenCilk\"},\"cilkcpp\":{\"title\":\"Cilk/C++\",\"require\":\"cpp\",\"alias\":[\"cilk-cpp\",\"cilk\"],\"owner\":\"OpenCilk\"},\"clojure\":{\"title\":\"Clojure\",\"owner\":\"troglotit\"},\"cmake\":{\"title\":\"CMake\",\"owner\":\"mjrogozinski\"},\"cobol\":{\"title\":\"COBOL\",\"owner\":\"RunDevelopment\"},\"coffeescript\":{\"title\":\"CoffeeScript\",\"require\":\"javascript\",\"alias\":\"coffee\",\"owner\":\"R-osey\"},\"concurnas\":{\"title\":\"Concurnas\",\"alias\":\"conc\",\"owner\":\"jasontatton\"},\"csp\":{\"title\":\"Content-Security-Policy\",\"owner\":\"ScottHelme\"},\"cooklang\":{\"title\":\"Cooklang\",\"owner\":\"ahue\"},\"coq\":{\"title\":\"Coq\",\"owner\":\"RunDevelopment\"},\"crystal\":{\"title\":\"Crystal\",\"require\":\"ruby\",\"owner\":\"MakeNowJust\"},\"css-extras\":{\"title\":\"CSS Extras\",\"require\":\"css\",\"modify\":\"css\",\"owner\":\"milesj\"},\"csv\":{\"title\":\"CSV\",\"owner\":\"RunDevelopment\"},\"cue\":{\"title\":\"CUE\",\"owner\":\"RunDevelopment\"},\"cypher\":{\"title\":\"Cypher\",\"owner\":\"RunDevelopment\"},\"d\":{\"title\":\"D\",\"require\":\"clike\",\"owner\":\"Golmote\"},\"dart\":{\"title\":\"Dart\",\"require\":\"clike\",\"owner\":\"Golmote\"},\"dataweave\":{\"title\":\"DataWeave\",\"owner\":\"machaval\"},\"dax\":{\"title\":\"DAX\",\"owner\":\"peterbud\"},\"dhall\":{\"title\":\"Dhall\",\"owner\":\"RunDevelopment\"},\"diff\":{\"title\":\"Diff\",\"owner\":\"uranusjr\"},\"django\":{\"title\":\"Django/Jinja2\",\"require\":\"markup-templating\",\"alias\":\"jinja2\",\"owner\":\"romanvm\"},\"dns-zone-file\":{\"title\":\"DNS zone file\",\"owner\":\"RunDevelopment\",\"alias\":\"dns-zone\"},\"docker\":{\"title\":\"Docker\",\"alias\":\"dockerfile\",\"owner\":\"JustinBeckwith\"},\"dot\":{\"title\":\"DOT (Graphviz)\",\"alias\":\"gv\",\"optional\":\"markup\",\"owner\":\"RunDevelopment\"},\"ebnf\":{\"title\":\"EBNF\",\"owner\":\"RunDevelopment\"},\"editorconfig\":{\"title\":\"EditorConfig\",\"owner\":\"osipxd\"},\"eiffel\":{\"title\":\"Eiffel\",\"owner\":\"Conaclos\"},\"ejs\":{\"title\":\"EJS\",\"require\":[\"javascript\",\"markup-templating\"],\"owner\":\"RunDevelopment\",\"alias\":\"eta\",\"aliasTitles\":{\"eta\":\"Eta\"}},\"elixir\":{\"title\":\"Elixir\",\"owner\":\"Golmote\"},\"elm\":{\"title\":\"Elm\",\"owner\":\"zwilias\"},\"etlua\":{\"title\":\"Embedded Lua templating\",\"require\":[\"lua\",\"markup-templating\"],\"owner\":\"RunDevelopment\"},\"erb\":{\"title\":\"ERB\",\"require\":[\"ruby\",\"markup-templating\"],\"owner\":\"Golmote\"},\"erlang\":{\"title\":\"Erlang\",\"owner\":\"Golmote\"},\"excel-formula\":{\"title\":\"Excel Formula\",\"alias\":[\"xlsx\",\"xls\"],\"owner\":\"RunDevelopment\"},\"fsharp\":{\"title\":\"F#\",\"require\":\"clike\",\"owner\":\"simonreynolds7\"},\"factor\":{\"title\":\"Factor\",\"owner\":\"catb0t\"},\"false\":{\"title\":\"False\",\"owner\":\"edukisto\"},\"firestore-security-rules\":{\"title\":\"Firestore security rules\",\"require\":\"clike\",\"owner\":\"RunDevelopment\"},\"flow\":{\"title\":\"Flow\",\"require\":\"javascript\",\"owner\":\"Golmote\"},\"fortran\":{\"title\":\"Fortran\",\"owner\":\"Golmote\"},\"ftl\":{\"title\":\"FreeMarker Template Language\",\"require\":\"markup-templating\",\"owner\":\"RunDevelopment\"},\"gml\":{\"title\":\"GameMaker Language\",\"alias\":\"gamemakerlanguage\",\"require\":\"clike\",\"owner\":\"LiarOnce\"},\"gap\":{\"title\":\"GAP (CAS)\",\"owner\":\"RunDevelopment\"},\"gcode\":{\"title\":\"G-code\",\"owner\":\"RunDevelopment\"},\"gdscript\":{\"title\":\"GDScript\",\"owner\":\"RunDevelopment\"},\"gedcom\":{\"title\":\"GEDCOM\",\"owner\":\"Golmote\"},\"gettext\":{\"title\":\"gettext\",\"alias\":\"po\",\"owner\":\"RunDevelopment\"},\"gherkin\":{\"title\":\"Gherkin\",\"owner\":\"hason\"},\"git\":{\"title\":\"Git\",\"owner\":\"lgiraudel\"},\"glsl\":{\"title\":\"GLSL\",\"require\":\"c\",\"owner\":\"Golmote\"},\"gn\":{\"title\":\"GN\",\"alias\":\"gni\",\"owner\":\"RunDevelopment\"},\"linker-script\":{\"title\":\"GNU Linker Script\",\"alias\":\"ld\",\"owner\":\"RunDevelopment\"},\"go\":{\"title\":\"Go\",\"require\":\"clike\",\"owner\":\"arnehormann\"},\"go-module\":{\"title\":\"Go module\",\"alias\":\"go-mod\",\"owner\":\"RunDevelopment\"},\"gradle\":{\"title\":\"Gradle\",\"require\":\"clike\",\"owner\":\"zeabdelkhalek-badido18\"},\"graphql\":{\"title\":\"GraphQL\",\"optional\":\"markdown\",\"owner\":\"Golmote\"},\"groovy\":{\"title\":\"Groovy\",\"require\":\"clike\",\"owner\":\"robfletcher\"},\"haml\":{\"title\":\"Haml\",\"require\":\"ruby\",\"optional\":[\"css\",\"css-extras\",\"coffeescript\",\"erb\",\"javascript\",\"less\",\"markdown\",\"scss\",\"textile\"],\"owner\":\"Golmote\"},\"handlebars\":{\"title\":\"Handlebars\",\"require\":\"markup-templating\",\"alias\":[\"hbs\",\"mustache\"],\"aliasTitles\":{\"mustache\":\"Mustache\"},\"owner\":\"Golmote\"},\"haskell\":{\"title\":\"Haskell\",\"alias\":\"hs\",\"owner\":\"bholst\"},\"haxe\":{\"title\":\"Haxe\",\"require\":\"clike\",\"optional\":\"regex\",\"owner\":\"Golmote\"},\"hcl\":{\"title\":\"HCL\",\"owner\":\"outsideris\"},\"hlsl\":{\"title\":\"HLSL\",\"require\":\"c\",\"owner\":\"RunDevelopment\"},\"hoon\":{\"title\":\"Hoon\",\"owner\":\"matildepark\"},\"http\":{\"title\":\"HTTP\",\"optional\":[\"csp\",\"css\",\"hpkp\",\"hsts\",\"javascript\",\"json\",\"markup\",\"uri\"],\"owner\":\"danielgtaylor\"},\"hpkp\":{\"title\":\"HTTP Public-Key-Pins\",\"owner\":\"ScottHelme\"},\"hsts\":{\"title\":\"HTTP Strict-Transport-Security\",\"owner\":\"ScottHelme\"},\"ichigojam\":{\"title\":\"IchigoJam\",\"owner\":\"BlueCocoa\"},\"icon\":{\"title\":\"Icon\",\"owner\":\"Golmote\"},\"icu-message-format\":{\"title\":\"ICU Message Format\",\"owner\":\"RunDevelopment\"},\"idris\":{\"title\":\"Idris\",\"alias\":\"idr\",\"owner\":\"KeenS\",\"require\":\"haskell\"},\"ignore\":{\"title\":\".ignore\",\"owner\":\"osipxd\",\"alias\":[\"gitignore\",\"hgignore\",\"npmignore\"],\"aliasTitles\":{\"gitignore\":\".gitignore\",\"hgignore\":\".hgignore\",\"npmignore\":\".npmignore\"}},\"inform7\":{\"title\":\"Inform 7\",\"owner\":\"Golmote\"},\"ini\":{\"title\":\"Ini\",\"owner\":\"aviaryan\"},\"io\":{\"title\":\"Io\",\"owner\":\"AlesTsurko\"},\"j\":{\"title\":\"J\",\"owner\":\"Golmote\"},\"java\":{\"title\":\"Java\",\"require\":\"clike\",\"owner\":\"sherblot\"},\"javadoc\":{\"title\":\"JavaDoc\",\"require\":[\"markup\",\"java\",\"javadoclike\"],\"modify\":\"java\",\"optional\":\"scala\",\"owner\":\"RunDevelopment\"},\"javadoclike\":{\"title\":\"JavaDoc-like\",\"modify\":[\"java\",\"javascript\",\"php\"],\"owner\":\"RunDevelopment\"},\"javastacktrace\":{\"title\":\"Java stack trace\",\"owner\":\"RunDevelopment\"},\"jexl\":{\"title\":\"Jexl\",\"owner\":\"czosel\"},\"jolie\":{\"title\":\"Jolie\",\"require\":\"clike\",\"owner\":\"thesave\"},\"jq\":{\"title\":\"JQ\",\"owner\":\"RunDevelopment\"},\"jsdoc\":{\"title\":\"JSDoc\",\"require\":[\"javascript\",\"javadoclike\",\"typescript\"],\"modify\":\"javascript\",\"optional\":[\"actionscript\",\"coffeescript\"],\"owner\":\"RunDevelopment\"},\"js-extras\":{\"title\":\"JS Extras\",\"require\":\"javascript\",\"modify\":\"javascript\",\"optional\":[\"actionscript\",\"coffeescript\",\"flow\",\"n4js\",\"typescript\"],\"owner\":\"RunDevelopment\"},\"json\":{\"title\":\"JSON\",\"alias\":\"webmanifest\",\"aliasTitles\":{\"webmanifest\":\"Web App Manifest\"},\"owner\":\"CupOfTea696\"},\"json5\":{\"title\":\"JSON5\",\"require\":\"json\",\"owner\":\"RunDevelopment\"},\"jsonp\":{\"title\":\"JSONP\",\"require\":\"json\",\"owner\":\"RunDevelopment\"},\"jsstacktrace\":{\"title\":\"JS stack trace\",\"owner\":\"sbrl\"},\"js-templates\":{\"title\":\"JS Templates\",\"require\":\"javascript\",\"modify\":\"javascript\",\"optional\":[\"css\",\"css-extras\",\"graphql\",\"markdown\",\"markup\",\"sql\"],\"owner\":\"RunDevelopment\"},\"julia\":{\"title\":\"Julia\",\"owner\":\"cdagnino\"},\"keepalived\":{\"title\":\"Keepalived Configure\",\"owner\":\"dev-itsheng\"},\"keyman\":{\"title\":\"Keyman\",\"owner\":\"mcdurdin\"},\"kotlin\":{\"title\":\"Kotlin\",\"alias\":[\"kt\",\"kts\"],\"aliasTitles\":{\"kts\":\"Kotlin Script\"},\"require\":\"clike\",\"owner\":\"Golmote\"},\"kumir\":{\"title\":\"KuMir (КуМир)\",\"alias\":\"kum\",\"owner\":\"edukisto\"},\"kusto\":{\"title\":\"Kusto\",\"owner\":\"RunDevelopment\"},\"latex\":{\"title\":\"LaTeX\",\"alias\":[\"tex\",\"context\"],\"aliasTitles\":{\"tex\":\"TeX\",\"context\":\"ConTeXt\"},\"owner\":\"japborst\"},\"latte\":{\"title\":\"Latte\",\"require\":[\"clike\",\"markup-templating\",\"php\"],\"owner\":\"nette\"},\"less\":{\"title\":\"Less\",\"require\":\"css\",\"optional\":\"css-extras\",\"owner\":\"Golmote\"},\"lilypond\":{\"title\":\"LilyPond\",\"require\":\"scheme\",\"alias\":\"ly\",\"owner\":\"RunDevelopment\"},\"liquid\":{\"title\":\"Liquid\",\"require\":\"markup-templating\",\"owner\":\"cinhtau\"},\"lisp\":{\"title\":\"Lisp\",\"alias\":[\"emacs\",\"elisp\",\"emacs-lisp\"],\"owner\":\"JuanCaicedo\"},\"livescript\":{\"title\":\"LiveScript\",\"owner\":\"Golmote\"},\"llvm\":{\"title\":\"LLVM IR\",\"owner\":\"porglezomp\"},\"log\":{\"title\":\"Log file\",\"optional\":\"javastacktrace\",\"owner\":\"RunDevelopment\"},\"lolcode\":{\"title\":\"LOLCODE\",\"owner\":\"Golmote\"},\"lua\":{\"title\":\"Lua\",\"owner\":\"Golmote\"},\"magma\":{\"title\":\"Magma (CAS)\",\"owner\":\"RunDevelopment\"},\"makefile\":{\"title\":\"Makefile\",\"owner\":\"Golmote\"},\"markdown\":{\"title\":\"Markdown\",\"require\":\"markup\",\"optional\":\"yaml\",\"alias\":\"md\",\"owner\":\"Golmote\"},\"markup-templating\":{\"title\":\"Markup templating\",\"require\":\"markup\",\"owner\":\"Golmote\"},\"mata\":{\"title\":\"Mata\",\"owner\":\"RunDevelopment\"},\"matlab\":{\"title\":\"MATLAB\",\"owner\":\"Golmote\"},\"maxscript\":{\"title\":\"MAXScript\",\"owner\":\"RunDevelopment\"},\"mel\":{\"title\":\"MEL\",\"owner\":\"Golmote\"},\"mermaid\":{\"title\":\"Mermaid\",\"owner\":\"RunDevelopment\"},\"metafont\":{\"title\":\"METAFONT\",\"owner\":\"LaeriExNihilo\"},\"mizar\":{\"title\":\"Mizar\",\"owner\":\"Golmote\"},\"mongodb\":{\"title\":\"MongoDB\",\"owner\":\"airs0urce\",\"require\":\"javascript\"},\"monkey\":{\"title\":\"Monkey\",\"owner\":\"Golmote\"},\"moonscript\":{\"title\":\"MoonScript\",\"alias\":\"moon\",\"owner\":\"RunDevelopment\"},\"n1ql\":{\"title\":\"N1QL\",\"owner\":\"TMWilds\"},\"n4js\":{\"title\":\"N4JS\",\"require\":\"javascript\",\"optional\":\"jsdoc\",\"alias\":\"n4jsd\",\"owner\":\"bsmith-n4\"},\"nand2tetris-hdl\":{\"title\":\"Nand To Tetris HDL\",\"owner\":\"stephanmax\"},\"naniscript\":{\"title\":\"Naninovel Script\",\"owner\":\"Elringus\",\"alias\":\"nani\"},\"nasm\":{\"title\":\"NASM\",\"owner\":\"rbmj\"},\"neon\":{\"title\":\"NEON\",\"owner\":\"nette\"},\"nevod\":{\"title\":\"Nevod\",\"owner\":\"nezaboodka\"},\"nginx\":{\"title\":\"nginx\",\"owner\":\"volado\"},\"nim\":{\"title\":\"Nim\",\"owner\":\"Golmote\"},\"nix\":{\"title\":\"Nix\",\"owner\":\"Golmote\"},\"nsis\":{\"title\":\"NSIS\",\"owner\":\"idleberg\"},\"objectivec\":{\"title\":\"Objective-C\",\"require\":\"c\",\"alias\":\"objc\",\"owner\":\"uranusjr\"},\"ocaml\":{\"title\":\"OCaml\",\"owner\":\"Golmote\"},\"odin\":{\"title\":\"Odin\",\"owner\":\"edukisto\"},\"opencl\":{\"title\":\"OpenCL\",\"require\":\"c\",\"modify\":[\"c\",\"cpp\"],\"owner\":\"Milania1\"},\"openqasm\":{\"title\":\"OpenQasm\",\"alias\":\"qasm\",\"owner\":\"RunDevelopment\"},\"oz\":{\"title\":\"Oz\",\"owner\":\"Golmote\"},\"parigp\":{\"title\":\"PARI/GP\",\"owner\":\"Golmote\"},\"parser\":{\"title\":\"Parser\",\"require\":\"markup\",\"owner\":\"Golmote\"},\"pascal\":{\"title\":\"Pascal\",\"alias\":\"objectpascal\",\"aliasTitles\":{\"objectpascal\":\"Object Pascal\"},\"owner\":\"Golmote\"},\"pascaligo\":{\"title\":\"Pascaligo\",\"owner\":\"DefinitelyNotAGoat\"},\"psl\":{\"title\":\"PATROL Scripting Language\",\"owner\":\"bertysentry\"},\"pcaxis\":{\"title\":\"PC-Axis\",\"alias\":\"px\",\"owner\":\"RunDevelopment\"},\"peoplecode\":{\"title\":\"PeopleCode\",\"alias\":\"pcode\",\"owner\":\"RunDevelopment\"},\"perl\":{\"title\":\"Perl\",\"owner\":\"Golmote\"},\"php\":{\"title\":\"PHP\",\"require\":\"markup-templating\",\"owner\":\"milesj\"},\"phpdoc\":{\"title\":\"PHPDoc\",\"require\":[\"php\",\"javadoclike\"],\"modify\":\"php\",\"owner\":\"RunDevelopment\"},\"php-extras\":{\"title\":\"PHP Extras\",\"require\":\"php\",\"modify\":\"php\",\"owner\":\"milesj\"},\"plant-uml\":{\"title\":\"PlantUML\",\"alias\":\"plantuml\",\"owner\":\"RunDevelopment\"},\"plsql\":{\"title\":\"PL/SQL\",\"require\":\"sql\",\"owner\":\"Golmote\"},\"powerquery\":{\"title\":\"PowerQuery\",\"alias\":[\"pq\",\"mscript\"],\"owner\":\"peterbud\"},\"powershell\":{\"title\":\"PowerShell\",\"owner\":\"nauzilus\"},\"processing\":{\"title\":\"Processing\",\"require\":\"clike\",\"owner\":\"Golmote\"},\"prolog\":{\"title\":\"Prolog\",\"owner\":\"Golmote\"},\"promql\":{\"title\":\"PromQL\",\"owner\":\"arendjr\"},\"properties\":{\"title\":\".properties\",\"owner\":\"Golmote\"},\"protobuf\":{\"title\":\"Protocol Buffers\",\"require\":\"clike\",\"owner\":\"just-boris\"},\"pug\":{\"title\":\"Pug\",\"require\":[\"markup\",\"javascript\"],\"optional\":[\"coffeescript\",\"ejs\",\"handlebars\",\"less\",\"livescript\",\"markdown\",\"scss\",\"stylus\",\"twig\"],\"owner\":\"Golmote\"},\"puppet\":{\"title\":\"Puppet\",\"owner\":\"Golmote\"},\"pure\":{\"title\":\"Pure\",\"optional\":[\"c\",\"cpp\",\"fortran\"],\"owner\":\"Golmote\"},\"purebasic\":{\"title\":\"PureBasic\",\"require\":\"clike\",\"alias\":\"pbfasm\",\"owner\":\"HeX0R101\"},\"purescript\":{\"title\":\"PureScript\",\"require\":\"haskell\",\"alias\":\"purs\",\"owner\":\"sriharshachilakapati\"},\"python\":{\"title\":\"Python\",\"alias\":\"py\",\"owner\":\"multipetros\"},\"qsharp\":{\"title\":\"Q#\",\"require\":\"clike\",\"alias\":\"qs\",\"owner\":\"fedonman\"},\"q\":{\"title\":\"Q (kdb+ database)\",\"owner\":\"Golmote\"},\"qml\":{\"title\":\"QML\",\"require\":\"javascript\",\"owner\":\"RunDevelopment\"},\"qore\":{\"title\":\"Qore\",\"require\":\"clike\",\"owner\":\"temnroegg\"},\"r\":{\"title\":\"R\",\"owner\":\"Golmote\"},\"racket\":{\"title\":\"Racket\",\"require\":\"scheme\",\"alias\":\"rkt\",\"owner\":\"RunDevelopment\"},\"cshtml\":{\"title\":\"Razor C#\",\"alias\":\"razor\",\"require\":[\"markup\",\"csharp\"],\"optional\":[\"css\",\"css-extras\",\"javascript\",\"js-extras\"],\"owner\":\"RunDevelopment\"},\"jsx\":{\"title\":\"React JSX\",\"require\":[\"markup\",\"javascript\"],\"optional\":[\"jsdoc\",\"js-extras\",\"js-templates\"],\"owner\":\"vkbansal\"},\"tsx\":{\"title\":\"React TSX\",\"require\":[\"jsx\",\"typescript\"]},\"reason\":{\"title\":\"Reason\",\"require\":\"clike\",\"owner\":\"Golmote\"},\"regex\":{\"title\":\"Regex\",\"owner\":\"RunDevelopment\"},\"rego\":{\"title\":\"Rego\",\"owner\":\"JordanSh\"},\"renpy\":{\"title\":\"Ren'py\",\"alias\":\"rpy\",\"owner\":\"HyuchiaDiego\"},\"rescript\":{\"title\":\"ReScript\",\"alias\":\"res\",\"owner\":\"vmarcosp\"},\"rest\":{\"title\":\"reST (reStructuredText)\",\"owner\":\"Golmote\"},\"rip\":{\"title\":\"Rip\",\"owner\":\"ravinggenius\"},\"roboconf\":{\"title\":\"Roboconf\",\"owner\":\"Golmote\"},\"robotframework\":{\"title\":\"Robot Framework\",\"alias\":\"robot\",\"owner\":\"RunDevelopment\"},\"ruby\":{\"title\":\"Ruby\",\"require\":\"clike\",\"alias\":\"rb\",\"owner\":\"samflores\"},\"rust\":{\"title\":\"Rust\",\"owner\":\"Golmote\"},\"sas\":{\"title\":\"SAS\",\"optional\":[\"groovy\",\"lua\",\"sql\"],\"owner\":\"Golmote\"},\"sass\":{\"title\":\"Sass (Sass)\",\"require\":\"css\",\"optional\":\"css-extras\",\"owner\":\"Golmote\"},\"scss\":{\"title\":\"Sass (SCSS)\",\"require\":\"css\",\"optional\":\"css-extras\",\"owner\":\"MoOx\"},\"scala\":{\"title\":\"Scala\",\"require\":\"java\",\"owner\":\"jozic\"},\"scheme\":{\"title\":\"Scheme\",\"owner\":\"bacchus123\"},\"shell-session\":{\"title\":\"Shell session\",\"require\":\"bash\",\"alias\":[\"sh-session\",\"shellsession\"],\"owner\":\"RunDevelopment\"},\"smali\":{\"title\":\"Smali\",\"owner\":\"RunDevelopment\"},\"smalltalk\":{\"title\":\"Smalltalk\",\"owner\":\"Golmote\"},\"smarty\":{\"title\":\"Smarty\",\"require\":\"markup-templating\",\"optional\":\"php\",\"owner\":\"Golmote\"},\"sml\":{\"title\":\"SML\",\"alias\":\"smlnj\",\"aliasTitles\":{\"smlnj\":\"SML/NJ\"},\"owner\":\"RunDevelopment\"},\"solidity\":{\"title\":\"Solidity (Ethereum)\",\"alias\":\"sol\",\"require\":\"clike\",\"owner\":\"glachaud\"},\"solution-file\":{\"title\":\"Solution file\",\"alias\":\"sln\",\"owner\":\"RunDevelopment\"},\"soy\":{\"title\":\"Soy (Closure Template)\",\"require\":\"markup-templating\",\"owner\":\"Golmote\"},\"sparql\":{\"title\":\"SPARQL\",\"require\":\"turtle\",\"owner\":\"Triply-Dev\",\"alias\":\"rq\"},\"splunk-spl\":{\"title\":\"Splunk SPL\",\"owner\":\"RunDevelopment\"},\"sqf\":{\"title\":\"SQF: Status Quo Function (Arma 3)\",\"require\":\"clike\",\"owner\":\"RunDevelopment\"},\"sql\":{\"title\":\"SQL\",\"owner\":\"multipetros\"},\"squirrel\":{\"title\":\"Squirrel\",\"require\":\"clike\",\"owner\":\"RunDevelopment\"},\"stan\":{\"title\":\"Stan\",\"owner\":\"RunDevelopment\"},\"stata\":{\"title\":\"Stata Ado\",\"require\":[\"mata\",\"java\",\"python\"],\"owner\":\"RunDevelopment\"},\"iecst\":{\"title\":\"Structured Text (IEC 61131-3)\",\"owner\":\"serhioromano\"},\"stylus\":{\"title\":\"Stylus\",\"owner\":\"vkbansal\"},\"supercollider\":{\"title\":\"SuperCollider\",\"alias\":\"sclang\",\"owner\":\"RunDevelopment\"},\"swift\":{\"title\":\"Swift\",\"owner\":\"chrischares\"},\"systemd\":{\"title\":\"Systemd configuration file\",\"owner\":\"RunDevelopment\"},\"t4-templating\":{\"title\":\"T4 templating\",\"owner\":\"RunDevelopment\"},\"t4-cs\":{\"title\":\"T4 Text Templates (C#)\",\"require\":[\"t4-templating\",\"csharp\"],\"alias\":\"t4\",\"owner\":\"RunDevelopment\"},\"t4-vb\":{\"title\":\"T4 Text Templates (VB)\",\"require\":[\"t4-templating\",\"vbnet\"],\"owner\":\"RunDevelopment\"},\"tap\":{\"title\":\"TAP\",\"owner\":\"isaacs\",\"require\":\"yaml\"},\"tcl\":{\"title\":\"Tcl\",\"owner\":\"PeterChaplin\"},\"tt2\":{\"title\":\"Template Toolkit 2\",\"require\":[\"clike\",\"markup-templating\"],\"owner\":\"gflohr\"},\"textile\":{\"title\":\"Textile\",\"require\":\"markup\",\"optional\":\"css\",\"owner\":\"Golmote\"},\"toml\":{\"title\":\"TOML\",\"owner\":\"RunDevelopment\"},\"tremor\":{\"title\":\"Tremor\",\"alias\":[\"trickle\",\"troy\"],\"owner\":\"darach\",\"aliasTitles\":{\"trickle\":\"trickle\",\"troy\":\"troy\"}},\"turtle\":{\"title\":\"Turtle\",\"alias\":\"trig\",\"aliasTitles\":{\"trig\":\"TriG\"},\"owner\":\"jakubklimek\"},\"twig\":{\"title\":\"Twig\",\"require\":\"markup-templating\",\"owner\":\"brandonkelly\"},\"typescript\":{\"title\":\"TypeScript\",\"require\":\"javascript\",\"optional\":\"js-templates\",\"alias\":\"ts\",\"owner\":\"vkbansal\"},\"typoscript\":{\"title\":\"TypoScript\",\"alias\":\"tsconfig\",\"aliasTitles\":{\"tsconfig\":\"TSConfig\"},\"owner\":\"dkern\"},\"unrealscript\":{\"title\":\"UnrealScript\",\"alias\":[\"uscript\",\"uc\"],\"owner\":\"RunDevelopment\"},\"uorazor\":{\"title\":\"UO Razor Script\",\"owner\":\"jaseowns\"},\"uri\":{\"title\":\"URI\",\"alias\":\"url\",\"aliasTitles\":{\"url\":\"URL\"},\"owner\":\"RunDevelopment\"},\"v\":{\"title\":\"V\",\"require\":\"clike\",\"owner\":\"taggon\"},\"vala\":{\"title\":\"Vala\",\"require\":\"clike\",\"optional\":\"regex\",\"owner\":\"TemplarVolk\"},\"vbnet\":{\"title\":\"VB.Net\",\"require\":\"basic\",\"owner\":\"Bigsby\"},\"velocity\":{\"title\":\"Velocity\",\"require\":\"markup\",\"owner\":\"Golmote\"},\"verilog\":{\"title\":\"Verilog\",\"owner\":\"a-rey\"},\"vhdl\":{\"title\":\"VHDL\",\"owner\":\"a-rey\"},\"vim\":{\"title\":\"vim\",\"owner\":\"westonganger\"},\"visual-basic\":{\"title\":\"Visual Basic\",\"alias\":[\"vb\",\"vba\"],\"aliasTitles\":{\"vba\":\"VBA\"},\"owner\":\"Golmote\"},\"warpscript\":{\"title\":\"WarpScript\",\"owner\":\"RunDevelopment\"},\"wasm\":{\"title\":\"WebAssembly\",\"owner\":\"Golmote\"},\"web-idl\":{\"title\":\"Web IDL\",\"alias\":\"webidl\",\"owner\":\"RunDevelopment\"},\"wgsl\":{\"title\":\"WGSL\",\"owner\":\"Dr4gonthree\"},\"wiki\":{\"title\":\"Wiki markup\",\"require\":\"markup\",\"owner\":\"Golmote\"},\"wolfram\":{\"title\":\"Wolfram language\",\"alias\":[\"mathematica\",\"nb\",\"wl\"],\"aliasTitles\":{\"mathematica\":\"Mathematica\",\"nb\":\"Mathematica Notebook\"},\"owner\":\"msollami\"},\"wren\":{\"title\":\"Wren\",\"owner\":\"clsource\"},\"xeora\":{\"title\":\"Xeora\",\"require\":\"markup\",\"alias\":\"xeoracube\",\"aliasTitles\":{\"xeoracube\":\"XeoraCube\"},\"owner\":\"freakmaxi\"},\"xml-doc\":{\"title\":\"XML doc (.net)\",\"require\":\"markup\",\"modify\":[\"csharp\",\"fsharp\",\"vbnet\"],\"owner\":\"RunDevelopment\"},\"xojo\":{\"title\":\"Xojo (REALbasic)\",\"owner\":\"Golmote\"},\"xquery\":{\"title\":\"XQuery\",\"require\":\"markup\",\"owner\":\"Golmote\"},\"yaml\":{\"title\":\"YAML\",\"alias\":\"yml\",\"owner\":\"hason\"},\"yang\":{\"title\":\"YANG\",\"owner\":\"RunDevelopment\"},\"zig\":{\"title\":\"Zig\",\"owner\":\"RunDevelopment\"}},\"plugins\":{\"meta\":{\"path\":\"plugins/{id}/prism-{id}\",\"link\":\"plugins/{id}/\"},\"line-highlight\":{\"title\":\"Line Highlight\",\"description\":\"Highlights specific lines and/or line ranges.\"},\"line-numbers\":{\"title\":\"Line Numbers\",\"description\":\"Line number at the beginning of code lines.\",\"owner\":\"kuba-kubula\"},\"show-invisibles\":{\"title\":\"Show Invisibles\",\"description\":\"Show hidden characters such as tabs and line breaks.\",\"optional\":[\"autolinker\",\"data-uri-highlight\"]},\"autolinker\":{\"title\":\"Autolinker\",\"description\":\"Converts URLs and emails in code to clickable links. Parses Markdown links in comments.\"},\"wpd\":{\"title\":\"WebPlatform Docs\",\"description\":\"Makes tokens link to <a href=\\\"https://webplatform.github.io/docs/\\\">WebPlatform.org documentation</a>. The links open in a new tab.\"},\"custom-class\":{\"title\":\"Custom Class\",\"description\":\"This plugin allows you to prefix Prism's default classes (<code>.comment</code> can become <code>.namespace--comment</code>) or replace them with your defined ones (like <code>.editor__comment</code>). You can even add new classes.\",\"owner\":\"dvkndn\",\"noCSS\":true},\"file-highlight\":{\"title\":\"File Highlight\",\"description\":\"Fetch external files and highlight them with Prism. Used on the Prism website itself.\",\"noCSS\":true},\"show-language\":{\"title\":\"Show Language\",\"description\":\"Display the highlighted language in code blocks (inline code does not show the label).\",\"owner\":\"nauzilus\",\"noCSS\":true,\"require\":\"toolbar\"},\"jsonp-highlight\":{\"title\":\"JSONP Highlight\",\"description\":\"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).\",\"noCSS\":true,\"owner\":\"nauzilus\"},\"highlight-keywords\":{\"title\":\"Highlight Keywords\",\"description\":\"Adds special CSS classes for each keyword for fine-grained highlighting.\",\"owner\":\"vkbansal\",\"noCSS\":true},\"remove-initial-line-feed\":{\"title\":\"Remove initial line feed\",\"description\":\"Removes the initial line feed in code blocks.\",\"owner\":\"Golmote\",\"noCSS\":true},\"inline-color\":{\"title\":\"Inline color\",\"description\":\"Adds a small inline preview for colors in style sheets.\",\"require\":\"css-extras\",\"owner\":\"RunDevelopment\"},\"previewers\":{\"title\":\"Previewers\",\"description\":\"Previewers for angles, colors, gradients, easing and time.\",\"require\":\"css-extras\",\"owner\":\"Golmote\"},\"autoloader\":{\"title\":\"Autoloader\",\"description\":\"Automatically loads the needed languages to highlight the code blocks.\",\"owner\":\"Golmote\",\"noCSS\":true},\"keep-markup\":{\"title\":\"Keep Markup\",\"description\":\"Prevents custom markup from being dropped out during highlighting.\",\"owner\":\"Golmote\",\"optional\":\"normalize-whitespace\",\"noCSS\":true},\"command-line\":{\"title\":\"Command Line\",\"description\":\"Display a command line with a prompt and, optionally, the output/response from the commands.\",\"owner\":\"chriswells0\"},\"unescaped-markup\":{\"title\":\"Unescaped Markup\",\"description\":\"Write markup without having to escape anything.\"},\"normalize-whitespace\":{\"title\":\"Normalize Whitespace\",\"description\":\"Supports multiple operations to normalize whitespace in code blocks.\",\"owner\":\"zeitgeist87\",\"optional\":\"unescaped-markup\",\"noCSS\":true},\"data-uri-highlight\":{\"title\":\"Data-URI Highlight\",\"description\":\"Highlights data-URI contents.\",\"owner\":\"Golmote\",\"noCSS\":true},\"toolbar\":{\"title\":\"Toolbar\",\"description\":\"Attach a toolbar for plugins to easily register buttons on the top of a code block.\",\"owner\":\"mAAdhaTTah\"},\"copy-to-clipboard\":{\"title\":\"Copy to Clipboard Button\",\"description\":\"Add a button that copies the code block to the clipboard when clicked.\",\"owner\":\"mAAdhaTTah\",\"require\":\"toolbar\",\"noCSS\":true},\"download-button\":{\"title\":\"Download Button\",\"description\":\"A button in the toolbar of a code block adding a convenient way to download a code file.\",\"owner\":\"Golmote\",\"require\":\"toolbar\",\"noCSS\":true},\"match-braces\":{\"title\":\"Match braces\",\"description\":\"Highlights matching braces.\",\"owner\":\"RunDevelopment\"},\"diff-highlight\":{\"title\":\"Diff Highlight\",\"description\":\"Highlights the code inside diff blocks.\",\"owner\":\"RunDevelopment\",\"require\":\"diff\"},\"filter-highlight-all\":{\"title\":\"Filter highlightAll\",\"description\":\"Filters the elements the <code>highlightAll</code> and <code>highlightAllUnder</code> methods actually highlight.\",\"owner\":\"RunDevelopment\",\"noCSS\":true},\"treeview\":{\"title\":\"Treeview\",\"description\":\"A language with special styles to highlight file system tree structures.\",\"owner\":\"Golmote\"}}};\nif (typeof module !== 'undefined' && module.exports) { module.exports = components; }","/**\n * @import { TextEditorBlockType, TextEditorFormatType, TextEditorInlineType } from '../../typedefs';\n */\n\n/**\n * List of available buttons.\n * @type {{ [key: string]: { labelKey: string, icon: string, inline: boolean } }}\n */\nexport const availableButtons = {\n  bold: {\n    labelKey: 'bold',\n    icon: 'format_bold',\n    inline: true,\n  },\n  italic: {\n    labelKey: 'italic',\n    icon: 'format_italic',\n    inline: true,\n  },\n  code: {\n    labelKey: 'code',\n    icon: 'code',\n    inline: true,\n  },\n  link: {\n    labelKey: 'link',\n    icon: 'link',\n    inline: true,\n  },\n  paragraph: {\n    labelKey: 'paragraph',\n    icon: 'format_paragraph',\n    inline: false,\n  },\n  'heading-1': {\n    labelKey: 'heading_1',\n    icon: 'format_h1',\n    inline: false,\n  },\n  'heading-2': {\n    labelKey: 'heading_2',\n    icon: 'format_h2',\n    inline: false,\n  },\n  'heading-3': {\n    labelKey: 'heading_3',\n    icon: 'format_h3',\n    inline: false,\n  },\n  'heading-4': {\n    labelKey: 'heading_4',\n    icon: 'format_h4',\n    inline: false,\n  },\n  'heading-5': {\n    labelKey: 'heading_5',\n    icon: 'format_h5',\n    inline: false,\n  },\n  'heading-6': {\n    labelKey: 'heading_6',\n    icon: 'format_h6',\n    inline: false,\n  },\n  'bulleted-list': {\n    labelKey: 'bulleted_list',\n    icon: 'format_list_bulleted',\n    inline: false,\n  },\n  'numbered-list': {\n    labelKey: 'numbered_list',\n    icon: 'format_list_numbered',\n    inline: false,\n  },\n  blockquote: {\n    labelKey: 'blockquote',\n    icon: 'format_quote',\n    inline: false,\n  },\n  'code-block': {\n    labelKey: 'code_block',\n    icon: 'code_blocks',\n    inline: false,\n  },\n};\n/**\n * @type {TextEditorFormatType[]}\n */\nexport const textFormatButtonTypes = ['bold', 'italic', 'code'];\n/**\n * @type {TextEditorInlineType[]}\n */\nexport const inlineButtonTypes = [...textFormatButtonTypes, 'link'];\n/**\n * @type {TextEditorBlockType[]}\n */\nexport const blockButtonTypes = [\n  'paragraph',\n  'heading-1',\n  'heading-2',\n  'heading-3',\n  'heading-4',\n  'heading-5',\n  'heading-6',\n  'bulleted-list',\n  'numbered-list',\n  'blockquote',\n  'code-block',\n];\n","// Adopted from https://github.com/facebook/lexical/blob/main/packages/lexical-playground/src/plugins/MarkdownTransformers/index.ts\n\n/* eslint-disable jsdoc/require-jsdoc */\n/* eslint-disable jsdoc/require-returns-description */\n/* eslint-disable jsdoc/require-param-description */\n\nimport {\n  TRANSFORMERS,\n  $convertFromMarkdownString as convertFromMarkdownString,\n  $convertToMarkdownString as convertToMarkdownString,\n} from '@lexical/markdown';\nimport {\n  TableCellHeaderStates,\n  TableCellNode,\n  TableNode,\n  TableRowNode,\n  $createTableCellNode as createTableCellNode,\n  $createTableNode as createTableNode,\n  $createTableRowNode as createTableRowNode,\n  $isTableCellNode as isTableCellNode,\n  $isTableNode as isTableNode,\n  $isTableRowNode as isTableRowNode,\n} from '@lexical/table';\nimport { $isParagraphNode as isParagraphNode, $isTextNode as isTextNode } from 'lexical';\n\n/**\n * @import { ElementTransformer } from '@lexical/markdown';\n */\n\nconst TABLE_ROW_REG_EXP = /^(?:\\|)(.+)(?:\\|)\\s?$/;\nconst TABLE_ROW_DIVIDER_REG_EXP = /^(\\| ?:?-*:? ?)+\\|\\s?$/;\n\n/**\n * Returns the number of columns in the table.\n * @param {TableNode} table\n * @returns {number}\n */\nfunction getTableColumnsSize(table) {\n  const row = table.getFirstChild();\n\n  return isTableRowNode(row) ? row.getChildrenSize() : 0;\n}\n\n/**\n * Creates a table cell with the given text content.\n * @param {string} textContent\n * @returns {TableCellNode}\n */\nconst createTableCell = (textContent) => {\n  textContent = textContent.replace(/\\\\n/g, '\\n');\n\n  const cell = createTableCellNode(TableCellHeaderStates.NO_STATUS);\n\n  convertFromMarkdownString(textContent, TRANSFORMERS, cell);\n\n  return cell;\n};\n\n/**\n * Maps the given text content to an array of table cells.\n * @param {string} textContent\n * @returns {TableCellNode[] | null}\n */\nconst mapToTableCells = (textContent) => {\n  const [, match] = textContent.match(TABLE_ROW_REG_EXP) ?? [];\n\n  if (!match) {\n    return null;\n  }\n\n  return match.split('|').map((text) => createTableCell(text));\n};\n\n/**\n * @type {ElementTransformer}\n */\nexport const TABLE = {\n  dependencies: [TableNode, TableRowNode, TableCellNode],\n  export: (node) => {\n    if (!isTableNode(node)) {\n      return null;\n    }\n\n    /** @type {string[]} */\n    const output = [];\n\n    node.getChildren().forEach((row) => {\n      /** @type {string[]} */\n      const rowOutput = [];\n\n      if (!isTableRowNode(row)) {\n        return;\n      }\n\n      let isHeaderRow = false;\n\n      row.getChildren().forEach((cell) => {\n        // It’s TableCellNode so it’s just to make flow happy\n        if (isTableCellNode(cell)) {\n          rowOutput.push(convertToMarkdownString(TRANSFORMERS, cell).replace(/\\n/g, '\\\\n').trim());\n\n          if (cell.__headerState === TableCellHeaderStates.ROW) {\n            isHeaderRow = true;\n          }\n        }\n      });\n\n      output.push(`| ${rowOutput.join(' | ')} |`);\n\n      if (isHeaderRow) {\n        output.push(`| ${rowOutput.map(() => '---').join(' | ')} |`);\n      }\n    });\n\n    return output.join('\\n');\n  },\n  regExp: TABLE_ROW_REG_EXP,\n  replace: (parentNode, _children, [textContent]) => {\n    // Header row\n    if (TABLE_ROW_DIVIDER_REG_EXP.test(textContent)) {\n      const table = parentNode.getPreviousSibling();\n\n      if (!table || !isTableNode(table)) {\n        return;\n      }\n\n      const rows = table.getChildren();\n      const lastRow = rows[rows.length - 1];\n\n      if (!lastRow || !isTableRowNode(lastRow)) {\n        return;\n      }\n\n      // Add header state to row cells\n      lastRow.getChildren().forEach((cell) => {\n        if (!isTableCellNode(cell)) {\n          return;\n        }\n\n        cell.setHeaderStyles(TableCellHeaderStates.ROW, TableCellHeaderStates.ROW);\n      });\n\n      // Remove line\n      parentNode.remove();\n\n      return;\n    }\n\n    const matchCells = mapToTableCells(textContent);\n\n    if (!matchCells) {\n      return;\n    }\n\n    const rows = [matchCells];\n    let sibling = parentNode.getPreviousSibling();\n    let maxCells = matchCells.length;\n\n    while (sibling) {\n      if (!isParagraphNode(sibling)) {\n        break;\n      }\n\n      if (sibling.getChildrenSize() !== 1) {\n        break;\n      }\n\n      const firstChild = sibling.getFirstChild();\n\n      if (!isTextNode(firstChild)) {\n        break;\n      }\n\n      const cells = mapToTableCells(firstChild.getTextContent());\n\n      if (!cells) {\n        break;\n      }\n\n      maxCells = Math.max(maxCells, cells.length);\n      rows.unshift(cells);\n\n      const previousSibling = sibling.getPreviousSibling();\n\n      sibling.remove();\n      sibling = previousSibling;\n    }\n\n    const table = createTableNode();\n\n    rows.forEach((cells) => {\n      const tableRow = createTableRowNode();\n\n      table.append(tableRow);\n\n      for (let i = 0; i < maxCells; i += 1) {\n        tableRow.append(i < cells.length ? cells[i] : createTableCell(''));\n      }\n    });\n\n    const previousSibling = parentNode.getPreviousSibling();\n\n    if (isTableNode(previousSibling) && getTableColumnsSize(previousSibling) === maxCells) {\n      previousSibling.append(...table.getChildren());\n      parentNode.remove();\n    } else {\n      parentNode.replace(table);\n    }\n\n    table.selectEnd();\n  },\n  type: 'element',\n};\n","import {\n  CodeHighlightNode,\n  CodeNode,\n  $createCodeNode as createCodeNode,\n  $isCodeHighlightNode as isCodeHighlightNode,\n  $isCodeNode as isCodeNode,\n  registerCodeHighlighting,\n} from '@lexical/code';\nimport { registerDragonSupport } from '@lexical/dragon';\nimport { createEmptyHistoryState, registerHistory } from '@lexical/history';\nimport {\n  LinkNode,\n  TOGGLE_LINK_COMMAND,\n  $isLinkNode as isLinkNode,\n  $toggleLink as toggleLink,\n} from '@lexical/link';\nimport {\n  INSERT_ORDERED_LIST_COMMAND,\n  INSERT_UNORDERED_LIST_COMMAND,\n  ListItemNode,\n  ListNode,\n  $handleListInsertParagraph as handleListInsertParagraph,\n  $insertList as insertList,\n  $isListItemNode as isListItemNode,\n  $isListNode as isListNode,\n} from '@lexical/list';\nimport {\n  TRANSFORMERS,\n  $convertFromMarkdownString as convertFromMarkdownString,\n  $convertToMarkdownString as convertToMarkdownString,\n} from '@lexical/markdown';\nimport {\n  HeadingNode,\n  QuoteNode,\n  $isHeadingNode as isHeadingNode,\n  $isQuoteNode as isQuoteNode,\n  registerRichText,\n} from '@lexical/rich-text';\nimport { TableCellNode, TableNode, TableRowNode } from '@lexical/table';\nimport { $getNearestNodeOfType as getNearestNodeOfType } from '@lexical/utils';\nimport { sleep } from '@sveltia/utils/misc';\nimport {\n  COMMAND_PRIORITY_NORMAL,\n  ElementNode,\n  INDENT_CONTENT_COMMAND,\n  INSERT_PARAGRAPH_COMMAND,\n  OUTDENT_CONTENT_COMMAND,\n  createEditor,\n  $getRoot as getRoot,\n  $getSelection as getSelection,\n  $isRangeSelection as isRangeSelection,\n} from 'lexical';\nimport prismComponents from 'prismjs/components';\nimport { blockButtonTypes, textFormatButtonTypes } from '.';\nimport { TABLE } from './transformers/table';\n\n/**\n * @import { CreateEditorArgs, LexicalEditor } from 'lexical';\n * @import {\n * TextEditorBlockType,\n * TextEditorConfig,\n * TextEditorInlineType,\n * TextEditorSelectionState,\n * } from '../../typedefs';\n */\n\nconst allTransformers = [...TRANSFORMERS, TABLE];\nconst prismBaseURL = `https://unpkg.com/prismjs@1.30.0`;\n\n/**\n * Lexical editor configuration.\n * @type {CreateEditorArgs}\n */\nconst editorConfig = {\n  namespace: 'editor',\n  nodes: [\n    HeadingNode,\n    QuoteNode,\n    LinkNode,\n    ListNode,\n    ListItemNode,\n    CodeNode,\n    CodeHighlightNode,\n    TableNode,\n    TableCellNode,\n    TableRowNode,\n  ],\n  theme: {\n    text: {\n      /**\n       * Enable bold+italic styling.\n       * @see https://github.com/facebook/lexical/discussions/4381\n       */\n      italic: 'italic',\n    },\n    list: {\n      nested: {\n        listitem: 'nested',\n      },\n    },\n    code: 'code-block',\n    // https://github.com/facebook/lexical/blob/main/packages/lexical-website/docs/getting-started/theming.md\n    codeHighlight: {\n      atrule: 'token atrule',\n      attr: 'token attr',\n      boolean: 'token boolean',\n      builtin: 'token builtin',\n      cdata: 'token cdata',\n      char: 'token char',\n      class: 'token class',\n      'class-name': 'token class-name',\n      comment: 'token comment',\n      constant: 'token constant',\n      deleted: 'token deleted',\n      doctype: 'token doctype',\n      entity: 'token entity',\n      function: 'token function',\n      important: 'token important',\n      inserted: 'token inserted',\n      keyword: 'token keyword',\n      namespace: 'token namespace',\n      number: 'token number',\n      operator: 'token operator',\n      prolog: 'token prolog',\n      property: 'token property',\n      punctuation: 'token punctuation',\n      regex: 'token regex',\n      selector: 'token selector',\n      string: 'token string',\n      symbol: 'token symbol',\n      tag: 'token tag',\n      url: 'token url',\n      variable: 'token variable',\n    },\n  },\n};\n\n/**\n * Get the current selection’s block node key as well as block and inline level types.\n * @returns {TextEditorSelectionState} Current selection state.\n */\nconst getSelectionTypes = () => {\n  const selection = getSelection();\n\n  if (!isRangeSelection(selection)) {\n    return {\n      blockNodeKey: null,\n      blockType: 'paragraph',\n      inlineTypes: [],\n    };\n  }\n\n  const anchor = selection.anchor.getNode();\n  /** @type {ElementNode | null} */\n  let parent = null;\n  /** @type {TextEditorInlineType[]} */\n  const inlineTypes = textFormatButtonTypes.filter((type) => selection.hasFormat(type));\n\n  if (anchor.getType() !== 'root') {\n    parent = anchor instanceof ElementNode ? anchor : getNearestNodeOfType(anchor, ElementNode);\n\n    if (isLinkNode(parent)) {\n      inlineTypes.push('link');\n      parent = getNearestNodeOfType(parent, ElementNode);\n    }\n\n    if (isListItemNode(parent)) {\n      parent = getNearestNodeOfType(parent, ListNode);\n    }\n  }\n\n  const blockType = /** @type {TextEditorBlockType} */ (\n    (() => {\n      if (!parent) {\n        return 'paragraph';\n      }\n\n      if (isHeadingNode(parent)) {\n        return `heading-${parent.getTag().match(/\\d/)?.[0]}`;\n      }\n\n      if (isListNode(parent)) {\n        return parent.getListType() === 'bullet' ? 'bulleted-list' : 'numbered-list';\n      }\n\n      if (isQuoteNode(parent)) {\n        return 'blockquote';\n      }\n\n      if (isCodeNode(parent) || isCodeHighlightNode(parent)) {\n        return 'code-block';\n      }\n\n      const type = parent.getType();\n\n      if (blockButtonTypes.includes(/** @type {any} */ (type))) {\n        return type;\n      }\n\n      return 'paragraph';\n    })()\n  );\n\n  return {\n    blockNodeKey: parent?.getKey() ?? null,\n    blockType,\n    inlineTypes,\n  };\n};\n\n/**\n * Listen to changes made on the editor and trigger the Update event.\n * @param {LexicalEditor} editor Editor instance.\n */\nconst onEditorUpdate = (editor) => {\n  editor.getRootElement()?.dispatchEvent(\n    new CustomEvent('Update', {\n      detail: {\n        value: convertToMarkdownString(\n          // Use underscores for italic text in Markdown instead of asterisks\n          allTransformers.filter((/** @type {any} */ { tag }) => tag !== '*'),\n        ) // Remove unnecessary backslashes for underscores\n          // @see https://github.com/sveltia/sveltia-cms/issues/430\n          .replace(/\\\\_/g, '_'),\n        selection: getSelectionTypes(),\n      },\n    }),\n  );\n};\n\n/**\n * Initialize the Lexical editor.\n * @param {TextEditorConfig} config Editor configuration.\n * @returns {LexicalEditor} Editor instance.\n */\nexport const initEditor = ({ components = [], isCodeEditor = false, defaultLanguage = '' }) => {\n  components.forEach(({ node, transformer }) => {\n    /** @type {any[]} */ (editorConfig.nodes).unshift(node);\n    allTransformers.unshift(transformer);\n  });\n\n  const editor = createEditor(editorConfig);\n\n  registerRichText(editor);\n  registerDragonSupport(editor);\n  registerHistory(editor, createEmptyHistoryState(), 1000);\n\n  registerCodeHighlighting(editor, {\n    defaultLanguage,\n    // eslint-disable-next-line jsdoc/require-jsdoc\n    tokenize: (code, lang = 'plain') =>\n      window.Prism.tokenize(code, window.Prism.languages[lang] ?? window.Prism.languages.plain),\n  });\n\n  editor.registerCommand(\n    TOGGLE_LINK_COMMAND,\n    (payload) => {\n      toggleLink(typeof payload === 'string' ? payload : null);\n\n      return true;\n    },\n    COMMAND_PRIORITY_NORMAL,\n  );\n\n  editor.registerCommand(\n    INSERT_UNORDERED_LIST_COMMAND,\n    () => {\n      insertList('bullet');\n\n      return true;\n    },\n    COMMAND_PRIORITY_NORMAL,\n  );\n\n  editor.registerCommand(\n    INSERT_ORDERED_LIST_COMMAND,\n    () => {\n      insertList('number');\n\n      return true;\n    },\n    COMMAND_PRIORITY_NORMAL,\n  );\n\n  // https://github.com/facebook/lexical/blob/main/packages/lexical-react/src/shared/useList.ts\n  editor.registerCommand(\n    INSERT_PARAGRAPH_COMMAND,\n    () => handleListInsertParagraph(),\n    COMMAND_PRIORITY_NORMAL,\n  );\n\n  editor.registerUpdateListener(async () => {\n    if (editor?.isComposing()) {\n      return;\n    }\n\n    await sleep(100);\n\n    editor.update(() => {\n      // Prevent CodeNode from being removed\n      if (isCodeEditor) {\n        const root = getRoot();\n        const children = root.getChildren();\n\n        if (children.length === 1 && !isCodeNode(children[0])) {\n          children[0].remove();\n        }\n\n        if (children.length === 0) {\n          const node = createCodeNode();\n\n          node.setLanguage(defaultLanguage);\n          root.append(node);\n        }\n      }\n\n      onEditorUpdate(editor);\n    });\n  });\n\n  // `editor.registerCommand(KEY_TAB_COMMAND, listener, priority)` doesn’t work for some reason, so\n  // use another method\n  editor.registerRootListener((root) => {\n    if (root) {\n      root.addEventListener('keydown', (event) => {\n        editor.update(() => {\n          if (event.key === 'Tab') {\n            const selection = getSelection();\n\n            if (!isRangeSelection(selection)) {\n              return;\n            }\n\n            const anchor = selection.anchor.getNode();\n\n            const parent =\n              anchor instanceof ElementNode ? anchor : getNearestNodeOfType(anchor, ElementNode);\n\n            if (isListItemNode(parent) && parent.canIndent()) {\n              if (!event.shiftKey) {\n                event.preventDefault();\n                editor.dispatchCommand(INDENT_CONTENT_COMMAND, undefined);\n              } else if (parent.getIndent() > 0) {\n                event.preventDefault();\n                editor.dispatchCommand(OUTDENT_CONTENT_COMMAND, undefined);\n              }\n            }\n          }\n        });\n      });\n    }\n  });\n\n  return editor;\n};\n\n/**\n * Load additional Prism syntax highlighter settings for the given programming language.\n * @param {string} lang Language name, like scss.\n */\nexport const loadCodeHighlighter = async (lang) => {\n  if (lang in window.Prism.languages) {\n    return;\n  }\n\n  const canonicalLang = Object.entries(prismComponents.languages).find(\n    // @ts-ignore\n    ([key, { alias }]) =>\n      key === lang || (Array.isArray(alias) ? alias.includes(lang) : alias === lang),\n  )?.[0];\n\n  if (!canonicalLang) {\n    return;\n  }\n\n  try {\n    // eslint-disable-next-line jsdoc/no-bad-blocks\n    await import(/* @vite-ignore */ `${prismBaseURL}/components/prism-${canonicalLang}.min.js`);\n  } catch {\n    //\n  }\n};\n\n/**\n * Convert Markdown to Lexical nodes.\n * @param {LexicalEditor} editor Editor instance.\n * @param {string} value Current Markdown value.\n * @returns {Promise<void>} Nothing.\n * @throws {Error} Failed to convert the value to Lexical nodes.\n */\nexport const convertMarkdownToLexical = async (editor, value) => {\n  // Load Prism language support on demand; the `loadLanguages` Prism utility method cannot be used\n  await Promise.all(\n    [...value.matchAll(/^```(?<lang>.+?)\\n/gm)].map(async ({ groups: { lang } = {} }) =>\n      loadCodeHighlighter(lang),\n    ),\n  );\n\n  return new Promise((resolve, reject) => {\n    editor.update(() => {\n      try {\n        convertFromMarkdownString(value, allTransformers);\n        resolve(undefined);\n      } catch (ex) {\n        reject(new Error('Failed to convert Markdown', { cause: ex }));\n      }\n    });\n  });\n};\n\n/**\n * Move focus to the editor so the user can start editing immediately.\n * @param {LexicalEditor} editor Editor instance.\n * @returns {Promise<void>} Nothing.\n */\nexport const focusEditor = async (editor) =>\n  new Promise((resolve) => {\n    editor.focus(() => {\n      resolve(undefined);\n    });\n  });\n","<script>\n  import { getContext, onMount } from 'svelte';\n  import { initEditor } from './core';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import { TextEditorStore } from '../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {boolean} [hidden] Whether to hide the widget.\n   * @property {boolean} [disabled] Whether to disable the widget. An alias of the `aria-disabled`\n   * attribute.\n   * @property {boolean} [readonly] Whether to make the widget read-only. An alias of the\n   * `aria-readonly` attribute.\n   * @property {boolean} [required] Whether to mark the widget required. An alias of the\n   * `aria-required` attribute.\n   * @property {boolean} [invalid] Whether to mark the widget invalid. An alias of the\n   * `aria-invalid` attribute.\n   * @property {Snippet} [children] Primary slot content.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    hidden = false,\n    disabled = false,\n    readonly = false,\n    required = false,\n    invalid = false,\n    children,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {TextEditorStore} */\n  const editorStore = getContext('editorStore');\n\n  /**\n   * Reference to the Lexical editor root element.\n   * @type {HTMLElement | undefined}\n   */\n  let lexicalRoot = $state();\n\n  const editable = $derived(!(disabled || readonly));\n\n  $effect(() => {\n    editorStore.editor?.setEditable(editable);\n  });\n\n  /**\n   * Update {@link value} and other state variables whenever the editor content is updated.\n   * @param {Event} event `Update` custom event.\n   */\n  const onUpdate = (event) => {\n    const { hasConverterError, useRichText, inputValue } = editorStore;\n\n    if (hasConverterError || !useRichText) {\n      return;\n    }\n\n    const { value: newValue, selection } = /** @type {CustomEvent} */ (event).detail;\n\n    if (inputValue !== newValue) {\n      // Temporarily disable rich text to prevent unnecessary Markdown conversion that resets\n      // Lexical nodes and selection, then restore the state\n      editorStore.useRichText = false;\n      editorStore.inputValue = newValue;\n      editorStore.useRichText = true;\n    }\n\n    editorStore.selection = selection;\n  };\n\n  /**\n   * Listen to `click` events on the editor. Ignore a click on a link.\n   * @param {MouseEvent} event `click` event.\n   */\n  const onClick = (event) => {\n    if (/** @type {HTMLElement} */ (event.target)?.matches('a')) {\n      event.preventDefault();\n    }\n  };\n\n  onMount(() => {\n    editorStore.editor = initEditor(editorStore.config);\n\n    lexicalRoot?.addEventListener('Update', onUpdate);\n    lexicalRoot?.addEventListener('click', onClick);\n\n    return () => {\n      lexicalRoot?.removeEventListener('Update', onUpdate);\n      lexicalRoot?.removeEventListener('click', onClick);\n    };\n  });\n\n  $effect(() => {\n    if (editorStore.editor && lexicalRoot) {\n      editorStore.editor.setRootElement(lexicalRoot);\n      editorStore.initialized = true;\n    }\n  });\n</script>\n\n<div\n  bind:this={lexicalRoot}\n  {...restProps}\n  role=\"textbox\"\n  aria-multiline=\"true\"\n  aria-hidden={hidden}\n  aria-disabled={disabled}\n  aria-readonly={readonly}\n  aria-required={required}\n  aria-invalid={invalid}\n  class=\"lexical-root\"\n  class:code={editorStore.config.isCodeEditor}\n  id=\"{editorStore.editorId}-lexical-root\"\n  contenteditable={editable}\n  {hidden}\n></div>\n\n<style>.lexical-root {\n  overflow: hidden;\n  border: 1px solid var(--sui-textbox-border-color);\n  border-radius: var(--sui-textbox-border-radius) !important;\n  padding: var(--sui-textbox-multiline-padding);\n  min-height: 8em;\n  color: var(--sui-textbox-foreground-color);\n  background-color: var(--sui-textbox-background-color);\n  font-family: var(--sui-textbox-font-family);\n  font-size: var(--sui-textbox-font-size);\n  line-height: var(--sui-textbox-multiline-line-height);\n}\n.lexical-root:not(:first-child) {\n  border-top-left-radius: 0 !important;\n  border-top-right-radius: 0 !important;\n}\n.lexical-root.code {\n  padding: 0;\n}\n.lexical-root.code :global(.code-block) {\n  border-radius: 0 !important;\n  min-height: 120px;\n}\n.lexical-root:focus-visible {\n  outline: 0;\n}\n.lexical-root[aria-invalid=true] {\n  border-color: var(--sui-error-border-color);\n}\n.lexical-root :global(:first-child) {\n  margin-top: 0;\n}\n.lexical-root :global(:last-child) {\n  margin-bottom: 0;\n}\n.lexical-root :global(strong.italic) {\n  font-style: italic;\n}\n.lexical-root :global(li.nested) {\n  list-style-type: none;\n}\n.lexical-root :global(.code-block) {\n  position: relative;\n  display: block;\n  padding: 8px 8px 8px 56px;\n  background-color: var(--sui-code-background-color);\n  overflow-x: auto;\n  white-space: pre;\n}\n.lexical-root :global(.code-block:not(:first-child)) {\n  margin-top: 1em;\n}\n.lexical-root :global(.code-block:not(:last-child)) {\n  margin-bottom: 1em;\n}\n.lexical-root :global(.code-block::before) {\n  position: absolute;\n  inset: 0 auto 0 0;\n  content: attr(data-gutter);\n  padding: 8px;\n  min-width: 40px;\n  color: var(--sui-tertiary-foreground-color);\n  background-color: var(--sui-tertiary-background-color);\n  text-align: right;\n}\n.lexical-root :global([data-lexical-text=true]) {\n  cursor: text;\n}\n.lexical-root :global(:is(th, td)) > :global(p) {\n  margin: 0;\n  white-space: normal;\n  word-break: normal;\n}\n\n:root[data-theme=light] .lexical-root :global(.token:is(.comment, .prolog, .doctype, .cdata)) {\n  color: slategray;\n}\n:root[data-theme=light] .lexical-root :global(.token.punctuation) {\n  color: #999;\n}\n:root[data-theme=light] .lexical-root :global(.token.namespace) {\n  opacity: 0.7;\n}\n:root[data-theme=light] .lexical-root :global(.token:is(.property, .tag, .boolean, .number, .constant, .symbol, .deleted)) {\n  color: #905;\n}\n:root[data-theme=light] .lexical-root :global(.token:is(.selector, .attr-name, .string, .char, .builtin, .inserted)) {\n  color: #690;\n}\n:root[data-theme=light] .lexical-root :global(.token:is(.operator, .entity, .url)), :root[data-theme=light] .lexical-root :global(.language-css) :global(.token.string), :root[data-theme=light] .lexical-root :global(.style) :global(.token.string) {\n  color: #9a6e3a;\n}\n:root[data-theme=light] .lexical-root :global(.token:is(.atrule, .attr-value, .keyword)) {\n  color: #07a;\n}\n:root[data-theme=light] .lexical-root :global(.token:is(.function, .class-name)) {\n  color: #dd4a68;\n}\n:root[data-theme=light] .lexical-root :global(.token:is(.regex, .important, .variable)) {\n  color: #e90;\n}\n\n:root[data-theme=dark] .lexical-root :global(.token:is(.comment, .block-comment, .prolog, .doctype, .cdata)) {\n  color: #999;\n}\n:root[data-theme=dark] .lexical-root :global(.token.punctuation) {\n  color: #ccc;\n}\n:root[data-theme=dark] .lexical-root :global(.token:is(.tag, .attr-name, .namespace, .deleted)) {\n  color: #e2777a;\n}\n:root[data-theme=dark] .lexical-root :global(.token.function-name) {\n  color: #6196cc;\n}\n:root[data-theme=dark] .lexical-root :global(.token:is(.boolean, .number, .function)) {\n  color: #f08d49;\n}\n:root[data-theme=dark] .lexical-root :global(.token:is(.property, .class-name, .constant, .symbol)) {\n  color: #f8c555;\n}\n:root[data-theme=dark] .lexical-root :global(.token:is(.selector, .important, .atrule, .keyword, .builtin)) {\n  color: #cc99cd;\n}\n:root[data-theme=dark] .lexical-root :global(.token:is(.string, .char, .attr-value, .regex, .variable)) {\n  color: #7ec699;\n}\n:root[data-theme=dark] .lexical-root :global(.token:is(.operator, .entity, .url)) {\n  color: #67cdcc;\n}\n:root[data-theme=dark] .lexical-root :global(.token:is(.important, .bold)) {\n  font-weight: bold;\n}\n:root[data-theme=dark] .lexical-root :global(.token.italic) {\n  font-style: italic;\n}\n:root[data-theme=dark] .lexical-root :global(.token.entity) {\n  cursor: help;\n}\n:root[data-theme=dark] .lexical-root :global(.token.inserted) {\n  color: green;\n}</style>\n","import { generateElementId } from '@sveltia/utils/element';\nimport { convertMarkdownToLexical } from './core';\n\n/**\n * @import { TextEditorConfig, TextEditorSelectionState, TextEditorStore } from '../../typedefs';\n * @import { LexicalEditor } from 'lexical';\n */\n\n/**\n * Create an editor editor store that contains all the states and configuration.\n * @returns {TextEditorStore} Store.\n */\nexport const createEditorStore = () => {\n  /** @type {string} */\n  const editorId = generateElementId('editor');\n  /** @type {boolean} */\n  let initialized = $state(false);\n  /** @type {LexicalEditor | undefined} */\n  let editor = $state();\n  /** @type {TextEditorConfig} */\n  let config = $state({ modes: [], enabledButtons: [], components: [], isCodeEditor: false });\n  /** @type {string} */\n  let inputValue = $state('');\n  /** @type {TextEditorSelectionState} */\n  let selection = $state({ blockNodeKey: null, blockType: 'paragraph', inlineTypes: [] });\n  /** @type {boolean} */\n  let useRichText = $state(true);\n  /** @type {boolean} */\n  let hasConverterError = $state(false);\n  /** @type {boolean} */\n  let showConverterError = $state(false);\n\n  /**\n   * Convert the Markdown {@link inputValue} to Lexical nodes. Disable the rich text mode and\n   * restore the original value when there is an error while conversion.\n   */\n  const convertMarkdown = async () => {\n    if (!editor || !initialized) {\n      return;\n    }\n\n    const originalValue = inputValue;\n\n    try {\n      // We should avoid an empty editor; there should be at least one `<p>`, so give it an empty\n      // string if the `value` is `undefined`\n      // @see https://github.com/facebook/lexical/issues/2308\n      await convertMarkdownToLexical(editor, inputValue || '');\n    } catch (ex) {\n      hasConverterError = true;\n      inputValue = originalValue;\n      // eslint-disable-next-line no-console\n      console.error(ex);\n    }\n  };\n\n  return {\n    /* eslint-disable jsdoc/require-jsdoc */\n    get editor() {\n      return editor;\n    },\n    set editor(newValue) {\n      editor = newValue;\n    },\n    get initialized() {\n      return initialized;\n    },\n    set initialized(newValue) {\n      initialized = newValue;\n    },\n    get config() {\n      return config;\n    },\n    set config(newValue) {\n      config = newValue;\n      useRichText = newValue.modes[0] === 'rich-text' || newValue.isCodeEditor;\n    },\n    get inputValue() {\n      return inputValue;\n    },\n    set inputValue(newValue) {\n      const hasChange = inputValue !== newValue;\n\n      if (hasChange) {\n        inputValue = newValue;\n      }\n\n      if (useRichText && (hasChange || editor?.getEditorState().isEmpty())) {\n        convertMarkdown();\n      }\n    },\n    get selection() {\n      return selection;\n    },\n    set selection(newValue) {\n      selection = newValue;\n    },\n    get useRichText() {\n      return useRichText;\n    },\n    set useRichText(newValue) {\n      useRichText = newValue;\n    },\n    get hasConverterError() {\n      return hasConverterError;\n    },\n    set hasConverterError(newValue) {\n      hasConverterError = newValue;\n\n      if (hasConverterError) {\n        useRichText = false;\n        showConverterError = true;\n      }\n    },\n    get showConverterError() {\n      return showConverterError;\n    },\n    set showConverterError(newValue) {\n      showConverterError = newValue;\n    },\n    editorId,\n    convertMarkdown,\n    /* eslint-enable jsdoc/require-jsdoc */\n  };\n};\n","<script>\n  import { $isCodeNode as isCodeNode } from '@lexical/code';\n  import { $getNodeByKey as getNodeByKey, $getRoot as getRoot } from 'lexical';\n  import prismComponents from 'prismjs/components';\n  import { getContext } from 'svelte';\n  import { _ } from 'svelte-i18n';\n  import Option from '../../listbox/option.svelte';\n  import Select from '../../select/select.svelte';\n  import { focusEditor, loadCodeHighlighter } from '../core';\n\n  /**\n   * @import { TextEditorStore } from '../../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} [disabled] Whether to disable the switcher.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    disabled = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {{ key: string, label: string, aliases: string[] }[]} */\n  const codeLanguages = Object.entries(prismComponents.languages)\n    .filter(([, config]) => 'title' in config)\n    .map(([key, val]) => {\n      const { title: label, aliasTitles, alias } = /** @type {Record<string, any>} */ (val);\n      let aliases = [];\n\n      if (alias && !aliasTitles) {\n        aliases = Array.isArray(alias) ? alias : [alias];\n      }\n\n      return [\n        { key, label, aliases },\n        ...Object.entries(aliasTitles ?? {}).map(([k, v]) => ({ key: k, label: v, aliases: [] })),\n      ];\n    })\n    .flat(1)\n    .sort((a, b) => a.label.localeCompare(b.label));\n\n  /** @type {TextEditorStore} */\n  const editorStore = getContext('editorStore');\n\n  let selectedLanguage = $state('');\n\n  $effect(() => {\n    void editorStore.selection.blockNodeKey;\n\n    editorStore.editor?.read(() => {\n      const node = editorStore.config.isCodeEditor\n        ? getRoot().getChildren()[0]\n        : getNodeByKey(/** @type {string} */ (editorStore.selection.blockNodeKey));\n\n      if (isCodeNode(node)) {\n        selectedLanguage = node.getLanguage() ?? editorStore.config.defaultLanguage ?? '';\n      }\n    });\n  });\n</script>\n\n<Select\n  {disabled}\n  aria-label={$_('_sui.text_editor.language')}\n  value={selectedLanguage}\n  onChange={async ({ detail: { value: lang } }) => {\n    if (!editorStore.editor || selectedLanguage === lang) {\n      return;\n    }\n\n    await focusEditor(editorStore.editor);\n\n    if (editorStore.selection?.blockNodeKey) {\n      await loadCodeHighlighter(lang);\n\n      editorStore.editor.update(() => {\n        // https://github.com/facebook/lexical/blob/main/packages/lexical-playground/src/plugins/ToolbarPlugin/index.tsx#L713\n        const node = getNodeByKey(/** @type {string} */ (editorStore.selection.blockNodeKey));\n\n        if (isCodeNode(node)) {\n          node.setLanguage(lang);\n          selectedLanguage = lang;\n        }\n      });\n    }\n  }}\n>\n  <Option label={$_('_sui.text_editor.plain_text')} value=\"\" />\n  {#each codeLanguages as { key, label, aliases } (key)}\n    <Option\n      {label}\n      value={key}\n      selected={key === selectedLanguage || aliases.includes(selectedLanguage)}\n    />\n  {/each}\n</Select>\n","<!--\n  @component\n  A toolbar layout that can contain `<Button>`, `<Select>` and other widgets.\n  @see https://w3c.github.io/aria/#toolbar\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/toolbar/\n-->\n<script>\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {boolean} [hidden] Whether to hide the widget.\n   * @property {boolean} [disabled] Whether to disable the widget. An alias of the `aria-disabled`\n   * attribute.\n   * @property {'horizontal' | 'vertical'} [orientation] Orientation of the widget. An alias of the\n   * `aria-orientation` attribute.\n   * @property {'primary' | 'secondary'} [variant] The style variant of the toolbar.\n   * @property {Snippet} [children] Primary slot content.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    hidden = false,\n    disabled = false,\n    orientation = 'horizontal',\n    variant = undefined,\n    children,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div\n  {...restProps}\n  role=\"toolbar\"\n  class=\"sui toolbar {orientation} {variant} {className}\"\n  {hidden}\n  aria-hidden={hidden}\n  aria-disabled={disabled}\n  aria-orientation={orientation}\n>\n  <div role=\"none\" class=\"inner\" inert={disabled}>\n    {@render children?.()}\n  </div>\n</div>\n\n<style>[role=toolbar] {\n  --toolbar-size: var(--sui-secondary-toolbar-size);\n  flex: none !important;\n  display: flex;\n  align-items: center;\n  padding-inline: 8px;\n  background-color: var(--toolbar-background-color, transparent);\n}\n[role=toolbar].primary {\n  --toolbar-size: var(--sui-primary-toolbar-size);\n}\n@media (width < 768px) {\n  [role=toolbar].secondary {\n    padding-inline: 0;\n  }\n}\n[role=toolbar][aria-orientation=horizontal] {\n  height: var(--toolbar-size);\n}\n[role=toolbar][aria-orientation=vertical] {\n  flex-direction: column;\n  width: var(--toolbar-size);\n}\n[role=toolbar] :global(button[role=button]:is([aria-pressed=true], [aria-checked=true])) {\n  background-color: var(--sui-selected-background-color);\n}\n[role=toolbar] :global(h2) {\n  flex: auto;\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin: 0;\n  padding-inline-end: 12px;\n  min-width: 0;\n  font-size: var(--sui-font-size-x-large);\n}\n[role=toolbar] :global(h2:first-child) {\n  padding-inline-start: 12px;\n}\n[role=toolbar] :global(h2) :global(span:not(.sui.truncated-text)) {\n  font-size: var(--sui-font-size-small);\n  font-weight: var(--sui-font-weight-normal, normal);\n  opacity: 0.8;\n}\n[role=toolbar] :global(.divider[aria-orientation=horizontal]) {\n  margin: 0 4px;\n  width: calc(100% - 8px);\n}\n[role=toolbar] :global(.divider[aria-orientation=vertical]) {\n  margin: 4px 0;\n  height: calc(100% - 8px);\n}\n\n.inner {\n  display: contents;\n}</style>\n","<script>\n  import Toolbar from '../../toolbar/toolbar.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} [disabled] Whether to disable the widget. An alias of the `aria-disabled`\n   * attribute.\n   * @property {boolean} [readonly] Whether to make the widget read-only. An alias of the\n   * `aria-readonly` attribute.\n   * @property {Snippet} [children] Primary slot content.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    code = $bindable(''),\n    lang = $bindable(''),\n    disabled = false,\n    children,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div role=\"none\" class=\"wrapper\">\n  <Toolbar {...restProps} {disabled}>\n    {@render children?.()}\n  </Toolbar>\n</div>\n\n<style>.wrapper {\n  display: contents;\n}\n.wrapper :global([role=toolbar]) {\n  position: sticky;\n  top: 0;\n  z-index: 1;\n  display: flex;\n  gap: 8px;\n  border-width: 1px 1px 0;\n  border-style: solid;\n  border-color: var(--sui-textbox-border-color);\n  border-radius: var(--sui-textbox-border-radius) var(--sui-textbox-border-radius) 0 0;\n  padding: 8px;\n  background-color: var(--sui-tertiary-background-color);\n}\n@media (width < 768px) {\n  .wrapper :global([role=toolbar]) {\n    flex-wrap: wrap;\n    height: auto;\n  }\n}\n.wrapper :global(.sui.menu-button) {\n  padding: 0 4px;\n}\n.wrapper :global(.sui.button) {\n  flex: none;\n  margin: 0 !important;\n}\n.wrapper :global(.sui.button-group) {\n  gap: 4px;\n}</style>\n","<script>\n  import { _ } from 'svelte-i18n';\n  import CodeLanguageSwitcher from './code-language-switcher.svelte';\n  import ToolbarWrapper from './toolbar-wrapper.svelte';\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} [hidden] Whether to hide the widget.\n   * @property {boolean} [disabled] Whether to disable the widget. An alias of the `aria-disabled`\n   * attribute.\n   * @property {boolean} [readonly] Whether to make the widget read-only. An alias of the\n   * `aria-readonly` attribute.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    disabled = false,\n    readonly = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<ToolbarWrapper disabled={disabled || readonly} aria-label={$_('_sui.text_editor.code_editor')}>\n  <CodeLanguageSwitcher disabled={disabled || readonly} />\n</ToolbarWrapper>\n","<!--\n  @component\n  A code editor based on Lexical.\n-->\n<script>\n  import { setContext, untrack } from 'svelte';\n  import { _ } from 'svelte-i18n';\n  import Alert from '../alert/alert.svelte';\n  import Toast from '../toast/toast.svelte';\n  import LexicalRoot from './lexical-root.svelte';\n  import { createEditorStore } from './store.svelte';\n  import CodeEditorToolbar from './toolbar/code-editor-toolbar.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [code] Input value.\n   * @property {string} [lang] Selected language.\n   * @property {boolean} [showLanguageSwitcher] Whether to show the language selector.\n   * @property {boolean} [flex] Make the text input container flexible.\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {boolean} [hidden] Whether to hide the widget.\n   * @property {boolean} [disabled] Whether to disable the widget. An alias of the `aria-disabled`\n   * attribute.\n   * @property {boolean} [readonly] Whether to make the widget read-only. An alias of the\n   * `aria-readonly` attribute.\n   * @property {boolean} [required] Whether to mark the widget required. An alias of the\n   * `aria-required` attribute.\n   * @property {boolean} [invalid] Whether to mark the widget invalid. An alias of the\n   * `aria-invalid` attribute.\n   * @property {Snippet} [children] Primary slot content.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    code = $bindable(''),\n    lang = $bindable(''),\n    showLanguageSwitcher = false,\n    flex = false,\n    hidden = false,\n    disabled = false,\n    readonly = false,\n    required = false,\n    invalid = false,\n    children,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const backticks = '```';\n  const editorStore = createEditorStore();\n\n  editorStore.config = { ...editorStore.config, isCodeEditor: true, defaultLanguage: lang };\n\n  setContext('editorStore', editorStore);\n\n  $effect(() => {\n    if (!editorStore.initialized) {\n      return;\n    }\n\n    void code;\n    void lang;\n\n    untrack(() => {\n      const newValue = code\n        ? `${backticks}${lang}\\n${code}\\n${backticks}`\n        : `${backticks}${lang}\\n${backticks}`;\n\n      editorStore.inputValue = newValue;\n    });\n  });\n\n  $effect(() => {\n    if (!editorStore.initialized) {\n      return;\n    }\n\n    void editorStore.inputValue;\n\n    untrack(() => {\n      const { lang: _lang = '', code: _code = '' } =\n        editorStore.inputValue.match(/^```(?<lang>\\w+?)?\\n(?:(?<code>.*)\\n)?```/s)?.groups ?? {};\n\n      if (lang !== _lang) {\n        lang = _lang;\n      }\n\n      if (code !== _code) {\n        code = _code;\n      }\n    });\n  });\n</script>\n\n<div {...restProps} role=\"none\" class=\"sui code-editor\" class:flex {hidden}>\n  {#if showLanguageSwitcher}\n    <CodeEditorToolbar {disabled} {readonly} />\n  {/if}\n  <LexicalRoot {hidden} {disabled} {readonly} {required} {invalid} />\n</div>\n\n{#if editorStore.showConverterError}\n  <Toast bind:show={editorStore.showConverterError}>\n    <Alert status=\"error\">{$_('_sui.text_editor.converter_error')}</Alert>\n  </Toast>\n{/if}\n\n<style>.code-editor {\n  margin: var(--sui-focus-ring-width);\n  width: calc(100% - var(--sui-focus-ring-width) * 2);\n}</style>\n","<!--\n  @component\n  A multi-line text field based on the HTML `<textarea>` element, providing the auto-resize support.\n  @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea\n  @see https://w3c.github.io/aria/#textbox\n  @see https://css-tricks.com/the-cleanest-trick-for-autogrowing-textareas/\n-->\n<script>\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import { CommonEventHandlers, InputEventHandlers } from '../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [value] Input value.\n   * @property {boolean} [flex] Make the text input container flexible.\n   * @property {string} [name] The `name` attribute on the `<textarea>` element.\n   * @property {boolean} [autoResize] Whether to automatically resize the `<textarea>` based on the\n   * content.\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {boolean} [hidden] Whether to hide the widget.\n   * @property {boolean} [disabled] Whether to disable the widget. An alias of the `aria-disabled`\n   * attribute.\n   * @property {boolean} [readonly] Whether to make the widget read-only. An alias of the\n   * `aria-readonly` attribute.\n   * @property {boolean} [required] Whether to mark the widget required. An alias of the\n   * `aria-required` attribute.\n   * @property {boolean} [invalid] Whether to mark the widget invalid. An alias of the\n   * `aria-invalid` attribute.\n   * @property {Snippet} [children] Primary slot content.\n   */\n\n  /**\n   * @type {CommonEventHandlers & InputEventHandlers & Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    value = $bindable(''),\n    flex = false,\n    name = undefined,\n    autoResize = false,\n    class: className,\n    hidden = false,\n    disabled = false,\n    readonly = false,\n    required = false,\n    invalid = false,\n    children,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div\n  role=\"none\"\n  class=\"sui text-area {className}\"\n  class:flex\n  class:disabled\n  class:readonly\n  {hidden}\n>\n  <textarea\n    {...restProps}\n    {name}\n    bind:value\n    dir=\"auto\"\n    disabled={disabled || undefined}\n    readonly={readonly || undefined}\n    aria-hidden={hidden}\n    aria-disabled={disabled}\n    aria-readonly={readonly}\n    aria-required={required}\n    aria-invalid={invalid}\n    class:auto-resize={autoResize}\n  ></textarea>\n  {#if autoResize}\n    <div class=\"clone\" aria-hidden=\"true\">{value}</div>\n  {/if}\n</div>\n\n<style>.text-area {\n  display: inline-grid;\n  margin: var(--sui-focus-ring-width);\n  min-width: var(--sui-textbox-multiline-min-width);\n}\n.text-area[hidden] {\n  display: none;\n}\n.text-area.flex {\n  width: -moz-available;\n  width: -webkit-fill-available;\n  width: stretch;\n  min-width: 0;\n}\n\n:is(textarea, .clone) {\n  grid-area: 1/1/2/2;\n  display: block;\n  margin: 0;\n  border-width: var(--sui-textbox-border-width, 1px);\n  border-color: var(--sui-textbox-border-color);\n  border-radius: var(--sui-textbox-border-radius);\n  padding: var(--sui-textbox-multiline-padding);\n  width: 100%;\n  min-height: 8em;\n  color: var(--sui-textbox-foreground-color);\n  background-color: var(--sui-textbox-background-color);\n  font-family: var(--sui-textbox-font-family);\n  font-size: var(--sui-textbox-font-size);\n  line-height: var(--sui-textbox-multiline-line-height);\n  font-weight: var(--sui-textbox-font-weight, var(--sui-font-weight-normal, normal));\n  text-align: var(--sui-textbox-text-align, start);\n  text-indent: var(--sui-textbox-text-indent, 0);\n  text-transform: var(--sui-textbox-text-transform, none);\n  letter-spacing: var(--sui-textbox-letter-spacing, normal);\n  word-spacing: var(--sui-word-spacing-normal, normal);\n  transition: all 200ms;\n}\n:is(textarea, .clone).resizing {\n  transition-duration: 0ms;\n}\n:is(textarea, .clone):focus {\n  border-color: var(--sui-textbox-border-color-focus, var(--sui-primary-accent-color));\n  color: var(--sui-textbox-foreground-color-focus, var(--sui-textbox-foreground-color));\n  background-color: var(--sui-textbox-background-color-focus, var(--sui-textbox-background-color));\n}\n:is(textarea, .clone):is(:disabled, :read-only) {\n  background-color: var(--sui-disabled-background-color);\n}\n\ntextarea {\n  resize: vertical;\n}\ntextarea.auto-resize {\n  overflow: hidden;\n  resize: none;\n}\ntextarea[aria-invalid=true] {\n  border-color: var(--sui-error-border-color);\n}\n\n.clone {\n  overflow: hidden;\n  visibility: hidden;\n  white-space: pre-wrap;\n}</style>\n","<script>\n  import { FORMAT_TEXT_COMMAND } from 'lexical';\n  import { getContext } from 'svelte';\n  import { _ } from 'svelte-i18n';\n  import { availableButtons } from '..';\n  import Button from '../../button/button.svelte';\n  import Icon from '../../icon/icon.svelte';\n  import { focusEditor } from '../core';\n\n  /**\n   * @import { TextEditorFormatType, TextEditorStore } from '../../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {TextEditorFormatType} type Button type.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    type,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {TextEditorStore} */\n  const editorStore = getContext('editorStore');\n  const selectionTypeMatches = $derived(editorStore.selection.inlineTypes.includes(type));\n</script>\n\n<Button\n  iconic\n  aria-label={$_(`_sui.text_editor.${availableButtons[type].labelKey}`)}\n  aria-controls=\"{editorStore.editorId}-lexical-root\"\n  disabled={!editorStore.useRichText}\n  pressed={selectionTypeMatches}\n  onclick={async () => {\n    if (editorStore.editor) {\n      await focusEditor(editorStore.editor);\n      editorStore.editor.dispatchCommand(FORMAT_TEXT_COMMAND, type);\n    }\n  }}\n>\n  {#snippet startIcon()}\n    <Icon name={availableButtons[type].icon} />\n  {/snippet}\n</Button>\n","<script>\n  import {\n    $createParagraphNode as createParagraphNode,\n    $insertNodes as insertNodes,\n  } from 'lexical';\n  import { getContext } from 'svelte';\n  import Button from '../../button/button.svelte';\n  import Icon from '../../icon/icon.svelte';\n\n  /**\n   * @import { TextEditorComponent, TextEditorStore } from '../../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {TextEditorComponent} component Image editor component.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    component,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {TextEditorStore} */\n  const editorStore = getContext('editorStore');\n</script>\n\n<Button\n  iconic\n  aria-label={component.label}\n  aria-controls=\"{editorStore.editorId}-lexical-root\"\n  disabled={!editorStore.useRichText}\n  onclick={() => {\n    editorStore.editor?.update(() => {\n      insertNodes([component.createNode(), createParagraphNode()]);\n    });\n  }}\n>\n  {#snippet startIcon()}\n    <Icon name={component.icon} />\n  {/snippet}\n</Button>\n","<script>\n  import { LinkNode, TOGGLE_LINK_COMMAND } from '@lexical/link';\n  import { $getNearestNodeOfType as getNearestNodeOfType } from '@lexical/utils';\n  import {\n    COMMAND_PRIORITY_NORMAL,\n    KEY_DOWN_COMMAND,\n    $createRangeSelection as createRangeSelection,\n    $createTextNode as createTextNode,\n    $getPreviousSelection as getPreviousSelection,\n    $getSelection as getSelection,\n    $getTextContent as getTextContent,\n    $insertNodes as insertNodes,\n    $isRangeSelection as isRangeSelection,\n    $setSelection as setSelection,\n  } from 'lexical';\n  import { getContext } from 'svelte';\n  import { _ } from 'svelte-i18n';\n  import { availableButtons } from '..';\n  import { isMac, matchShortcuts } from '../../../services/events.svelte';\n  import Button from '../../button/button.svelte';\n  import Dialog from '../../dialog/dialog.svelte';\n  import Icon from '../../icon/icon.svelte';\n  import TextInput from '../../text-field/text-input.svelte';\n  import { focusEditor } from '../core';\n\n  /**\n   * @import { TextEditorStore } from '../../../typedefs';\n   * @import { RangeSelection } from 'lexical';\n   */\n\n  const id = $props.id();\n\n  /**\n   * Button type.\n   */\n  const type = 'link';\n\n  /** @type {TextEditorStore} */\n  const editorStore = getContext('editorStore');\n  const selectionTypeMatches = $derived(editorStore.selection.inlineTypes.includes(type));\n\n  let openDialog = $state(false);\n  /** @type {'create' | 'update' | 'remove'} */\n  let dialogMode = $state('create');\n  let hasAnchor = $state(false);\n  let anchorURL = $state('');\n  let anchorText = $state('');\n\n  /**\n   * Create a new link by showing a dialog to accept a URL and optionally text.\n   */\n  const createLink = () => {\n    editorStore.editor?.getEditorState().read(() => {\n      const textContent = getTextContent().trim();\n\n      anchorURL = textContent;\n      hasAnchor = !!textContent;\n      dialogMode = 'create';\n      openDialog = true;\n    });\n  };\n\n  /**\n   * Remove an existing link.\n   */\n  const removeLink = () => {\n    editorStore.editor?.dispatchCommand(TOGGLE_LINK_COMMAND, null);\n  };\n\n  /**\n   * Update an existing link.\n   */\n  const updateLink = () => {\n    editorStore.editor?.getEditorState().read(() => {\n      const _selection = getSelection();\n\n      if (isRangeSelection(_selection)) {\n        const anchor = _selection.anchor.getNode();\n        const parent = anchor instanceof LinkNode ? anchor : getNearestNodeOfType(anchor, LinkNode);\n        const url = parent?.getURL();\n\n        if (url) {\n          hasAnchor = true;\n          anchorURL = url;\n          dialogMode = 'update';\n          openDialog = true;\n\n          return;\n        }\n      }\n\n      // Can’t update for some reason; remove it\n      removeLink();\n    });\n  };\n\n  /**\n   * Handle `click` event fired on the Link button. If a link is selected, update it. Otherwise,\n   * create a new link.\n   */\n  const onButtonClick = () => {\n    if (selectionTypeMatches) {\n      updateLink();\n    } else {\n      createLink();\n    }\n  };\n\n  /**\n   * Handle `keydown` event fired on the input fields on the dialog.\n   * @param {KeyboardEvent} event `keydown` event.\n   */\n  const onInputKeyDown = (event) => {\n    if (matchShortcuts(event, 'Enter') && anchorURL) {\n      openDialog = false;\n    }\n  };\n\n  /**\n   * Handle `close` event fired on the dialog. Insert a link with the given URL and optionally text.\n   * @param {CustomEvent} event `close` event.\n   * @see https://github.com/facebook/lexical/discussions/3013\n   */\n  const onDialogClose = async (event) => {\n    if (event.detail.returnValue !== 'cancel' && dialogMode !== 'remove') {\n      if (!editorStore.editor) {\n        return;\n      }\n\n      await new Promise((resolve) => {\n        editorStore.editor?.update(async () => {\n          let _selection = getSelection() ?? getPreviousSelection()?.clone();\n\n          if (!isRangeSelection(_selection)) {\n            _selection = createRangeSelection();\n          }\n\n          if (!hasAnchor) {\n            anchorText = anchorText.trim();\n            anchorText ||= anchorURL;\n\n            const { anchor, focus } = /** @type {RangeSelection} */ (_selection);\n            const node = createTextNode(anchorText);\n            const key = node.getKey();\n\n            insertNodes([node]);\n            anchor.set(key, anchorText.length, 'text');\n            focus.set(key, 0, 'text');\n          }\n\n          setSelection(_selection);\n          resolve(undefined);\n        });\n      });\n\n      await focusEditor(editorStore.editor);\n      editorStore.editor.dispatchCommand(TOGGLE_LINK_COMMAND, anchorURL);\n    }\n\n    anchorURL = '';\n    anchorText = '';\n  };\n\n  /**\n   * Open the dialog with a keyboard shortcut: Accel+K.\n   */\n  const _registerCommand = () => {\n    editorStore.editor?.registerCommand(\n      KEY_DOWN_COMMAND,\n      (event) => {\n        if (matchShortcuts(event, isMac() ? 'Meta+K' : 'Ctrl+K')) {\n          event.preventDefault();\n          onButtonClick();\n        }\n\n        return false;\n      },\n      COMMAND_PRIORITY_NORMAL,\n    );\n  };\n\n  $effect(() => {\n    if (editorStore.editor) {\n      _registerCommand();\n    }\n  });\n</script>\n\n<Button\n  iconic\n  aria-label={$_(`_sui.text_editor.${availableButtons[type].labelKey}`)}\n  aria-controls=\"{editorStore.editorId}-lexical-root\"\n  disabled={!editorStore.useRichText}\n  pressed={selectionTypeMatches}\n  onclick={() => {\n    onButtonClick();\n  }}\n>\n  {#snippet startIcon()}\n    <Icon name={availableButtons[type].icon} />\n  {/snippet}\n</Button>\n\n<Dialog\n  title={dialogMode === 'create'\n    ? $_('_sui.text_editor.insert_link')\n    : $_('_sui.text_editor.update_link')}\n  bind:open={openDialog}\n  bind:value={anchorURL}\n  okDisabled={!anchorURL}\n  okLabel={dialogMode === 'create' ? $_('_sui.insert') : $_('_sui.update')}\n  onClose={(event) => {\n    onDialogClose(event);\n  }}\n>\n  <div role=\"none\">\n    <label for=\"{id}-url\">{$_('_sui.text_editor.url')}</label>\n    <TextInput\n      id=\"{id}-url\"\n      bind:value={anchorURL}\n      flex\n      aria-label=\"URL\"\n      onkeydown={(event) => {\n        onInputKeyDown(event);\n      }}\n    />\n  </div>\n  {#if !hasAnchor}\n    <div role=\"none\">\n      <label for=\"{id}-text\">{$_('_sui.text_editor.text')}</label>\n      <TextInput\n        id=\"{id}-text\"\n        bind:value={anchorText}\n        flex\n        onkeydown={(event) => {\n          onInputKeyDown(event);\n        }}\n      />\n    </div>\n  {/if}\n  {#snippet footerExtra()}\n    {#if dialogMode !== 'create'}\n      <Button\n        variant=\"secondary\"\n        label={$_('_sui.remove')}\n        onclick={() => {\n          removeLink();\n          dialogMode = 'remove';\n          openDialog = false;\n        }}\n      />\n    {/if}\n  {/snippet}\n</Dialog>\n","<script>\n  import { $insertNodes as insertNodes } from 'lexical';\n  import { getContext } from 'svelte';\n  import { _ } from 'svelte-i18n';\n  import Icon from '../../icon/icon.svelte';\n  import MenuButton from '../../menu/menu-button.svelte';\n  import MenuItem from '../../menu/menu-item.svelte';\n  import Menu from '../../menu/menu.svelte';\n\n  /**\n   * @import { TextEditorComponent, TextEditorStore } from '../../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {TextEditorComponent[]} components Editor components.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    components,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {TextEditorStore} */\n  const editorStore = getContext('editorStore');\n</script>\n\n<MenuButton disabled={!editorStore.useRichText} label={$_('_sui.insert')}>\n  {#snippet endIcon()}\n    <Icon name=\"arrow_drop_down\" class=\"small-arrow\" />\n  {/snippet}\n  {#snippet popup()}\n    <Menu>\n      {#each components as { id, label, icon, createNode } (id)}\n        <MenuItem\n          {label}\n          onclick={() => {\n            editorStore.editor?.update(() => {\n              insertNodes([createNode()]);\n            });\n          }}\n        >\n          {#snippet startIcon()}\n            {#if icon}\n              <Icon name={icon} />\n            {/if}\n          {/snippet}\n        </MenuItem>\n      {/each}\n    </Menu>\n  {/snippet}\n</MenuButton>\n","<script>\n  import { $createCodeNode as createCodeNode } from '@lexical/code';\n  import { INSERT_ORDERED_LIST_COMMAND, INSERT_UNORDERED_LIST_COMMAND } from '@lexical/list';\n  import {\n    $createHeadingNode as createHeadingNode,\n    $createQuoteNode as createQuoteNode,\n  } from '@lexical/rich-text';\n  import { $setBlocksType as setBlocksType } from '@lexical/selection';\n  import {\n    $createParagraphNode as createParagraphNode,\n    $getSelection as getSelection,\n  } from 'lexical';\n  import { getContext } from 'svelte';\n  import { _ } from 'svelte-i18n';\n  import { availableButtons } from '..';\n  import Icon from '../../icon/icon.svelte';\n  import MenuItemCheckbox from '../../menu/menu-item-checkbox.svelte';\n  import { focusEditor } from '../core';\n\n  /**\n   * @import { TextEditorBlockType, TextEditorStore } from '../../../typedefs';\n   * @import { HeadingTagType } from '@lexical/rich-text';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {TextEditorBlockType} type Button type.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    type,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {TextEditorStore} */\n  const editorStore = getContext('editorStore');\n  const selectionTypeMatches = $derived(editorStore.selection.blockType === type);\n\n  /**\n   * Change the current selection’s type to {@link type}.\n   */\n  const changeBlockType = async () => {\n    if (!editorStore.editor) {\n      return;\n    }\n\n    await focusEditor(editorStore.editor);\n\n    const [, headingLevel] = type.match(/^heading-(\\d)$/) ?? [];\n\n    if (headingLevel) {\n      editorStore.editor.update(() => {\n        setBlocksType(getSelection(), () =>\n          createHeadingNode(/** @type {HeadingTagType} */ (`h${headingLevel}`)),\n        );\n      });\n    }\n\n    if (type === 'paragraph') {\n      editorStore.editor.update(() => {\n        setBlocksType(getSelection(), () => createParagraphNode());\n      });\n    }\n\n    if (type === 'bulleted-list') {\n      editorStore.editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined);\n    }\n\n    if (type === 'numbered-list') {\n      editorStore.editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined);\n    }\n\n    if (type === 'blockquote') {\n      editorStore.editor.update(() => {\n        setBlocksType(getSelection(), () => createQuoteNode());\n      });\n    }\n\n    if (type === 'code-block') {\n      editorStore.editor.update(() => {\n        setBlocksType(getSelection(), () => createCodeNode());\n      });\n    }\n  };\n</script>\n\n{#key selectionTypeMatches}\n  <MenuItemCheckbox\n    label={$_(`_sui.text_editor.${availableButtons[type].labelKey}`)}\n    checked={selectionTypeMatches}\n    onclick={() => {\n      if (!selectionTypeMatches) {\n        changeBlockType();\n      }\n    }}\n  >\n    {#snippet startIcon()}\n      <Icon name={availableButtons[type].icon} />\n    {/snippet}\n  </MenuItemCheckbox>\n{/key}\n","<script>\n  import { unique } from '@sveltia/utils/array';\n  import { getContext } from 'svelte';\n  import { _ } from 'svelte-i18n';\n  import { availableButtons, blockButtonTypes, inlineButtonTypes } from '..';\n  import ButtonGroup from '../../button/button-group.svelte';\n  import Button from '../../button/button.svelte';\n  import Divider from '../../divider/divider.svelte';\n  import Spacer from '../../divider/spacer.svelte';\n  import Icon from '../../icon/icon.svelte';\n  import MenuButton from '../../menu/menu-button.svelte';\n  import Menu from '../../menu/menu.svelte';\n  import CodeLanguageSwitcher from './code-language-switcher.svelte';\n  import FormatTextButton from './format-text-button.svelte';\n  import InsertImageButton from './insert-image-button.svelte';\n  import InsertLinkButton from './insert-link-button.svelte';\n  import InsertMenuButton from './insert-menu-button.svelte';\n  import ToggleBlockMenuItem from './toggle-block-menu-item.svelte';\n  import ToolbarWrapper from './toolbar-wrapper.svelte';\n\n  /**\n   * @import { TextEditorBlockType, TextEditorInlineType, TextEditorStore } from '../../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} [hidden] Whether to hide the widget.\n   * @property {boolean} [disabled] Whether to disable the widget. An alias of the `aria-disabled`\n   * attribute.\n   * @property {boolean} [readonly] Whether to make the widget read-only. An alias of the\n   * `aria-readonly` attribute.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    disabled = false,\n    readonly = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {TextEditorStore} */\n  const editorStore = getContext('editorStore');\n  const imageComponent = $derived(editorStore.config.components.find(({ id }) => id === 'image'));\n  const otherComponents = $derived(\n    editorStore.config.components.filter(({ id }) => id !== 'image'),\n  );\n\n  /**\n   * Enabled block level buttons.\n   * @type {TextEditorBlockType[]}\n   */\n  const blockLevelButtons = $derived(\n    unique([\n      'paragraph', // Always needed\n      ...editorStore.config.enabledButtons.filter((type) =>\n        blockButtonTypes.includes(/** @type {any} */ (type)),\n      ),\n    ]),\n  );\n\n  /**\n   * Enabled inline level buttons.\n   * @type {TextEditorInlineType[]}\n   */\n  const inlineLevelButtons = $derived(\n    unique([\n      ...editorStore.config.enabledButtons.filter((type) =>\n        inlineButtonTypes.includes(/** @type {any} */ (type)),\n      ),\n    ]),\n  );\n</script>\n\n<ToolbarWrapper disabled={disabled || readonly} aria-label={$_('_sui.text_editor.text_editor')}>\n  <MenuButton\n    disabled={!editorStore.useRichText}\n    aria-label={$_('_sui.text_editor.show_text_style_options')}\n    aria-controls=\"{editorStore.editorId}-lexical-root\"\n  >\n    {#snippet startIcon()}\n      <Icon\n        name={availableButtons[editorStore.selection.blockType ?? '']?.icon ?? 'format_paragraph'}\n      />\n    {/snippet}\n    {#snippet popup()}\n      <Menu aria-label={$_('_sui.text_editor.text_style_options')}>\n        {#each blockLevelButtons as type (type)}\n          <ToggleBlockMenuItem {type} />\n        {/each}\n      </Menu>\n    {/snippet}\n  </MenuButton>\n  {#if editorStore.selection.blockType === 'code-block'}\n    <Divider orientation=\"vertical\" />\n    <CodeLanguageSwitcher disabled={!editorStore.useRichText} />\n  {:else}\n    {#if inlineLevelButtons.length}\n      <Divider orientation=\"vertical\" />\n      <ButtonGroup>\n        {#each inlineLevelButtons as type (type)}\n          {#if type === 'link'}\n            <InsertLinkButton />\n          {:else}\n            <FormatTextButton {type} />\n          {/if}\n        {/each}\n      </ButtonGroup>\n    {/if}\n    {#if editorStore.config.components.length}\n      <Divider orientation=\"vertical\" />\n      {#if imageComponent}\n        <InsertImageButton component={imageComponent} />\n      {/if}\n      {#if otherComponents.length}\n        <InsertMenuButton components={otherComponents} />\n      {/if}\n    {/if}\n  {/if}\n  <Spacer flex />\n  {#if editorStore.config.modes.length > 1}\n    <Button\n      iconic\n      disabled={editorStore.hasConverterError}\n      pressed={!editorStore.useRichText}\n      aria-label={$_('_sui.text_editor.edit_in_markdown')}\n      onclick={() => {\n        editorStore.useRichText = !editorStore.useRichText;\n\n        if (editorStore.useRichText) {\n          editorStore.convertMarkdown();\n        }\n      }}\n    >\n      {#snippet startIcon()}\n        <Icon name=\"markdown\" />\n      {/snippet}\n    </Button>\n  {/if}\n</ToolbarWrapper>\n","<!--\n  @component\n  A rich text editor based on Lexical.\n-->\n<script>\n  import { setContext, untrack } from 'svelte';\n  import { _ } from 'svelte-i18n';\n  import { blockButtonTypes, inlineButtonTypes } from '.';\n  import Alert from '../alert/alert.svelte';\n  import TextArea from '../text-field/text-area.svelte';\n  import Toast from '../toast/toast.svelte';\n  import LexicalRoot from './lexical-root.svelte';\n  import { createEditorStore } from './store.svelte';\n  import TextEditorToolbar from './toolbar/text-editor-toolbar.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import {\n   * TextEditorBlockType,\n   * TextEditorComponent,\n   * TextEditorInlineType,\n   * TextEditorMode,\n   * } from '../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [value] Input value.\n   * @property {boolean} [flex] Make the text input container flexible.\n   * @property {TextEditorMode[]} [modes] Enabled modes.\n   * @property {(TextEditorBlockType | TextEditorInlineType)[]} [buttons] Enabled buttons.\n   * @property {TextEditorComponent[]} [components] Editor components.\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {boolean} [hidden] Whether to hide the widget.\n   * @property {boolean} [disabled] Whether to disable the widget. An alias of the `aria-disabled`\n   * attribute.\n   * @property {boolean} [readonly] Whether to make the widget read-only. An alias of the\n   * `aria-readonly` attribute.\n   * @property {boolean} [required] Whether to mark the widget required. An alias of the\n   * `aria-required` attribute.\n   * @property {boolean} [invalid] Whether to mark the widget invalid. An alias of the\n   * `aria-invalid` attribute.\n   * @property {Snippet} [children] Primary slot content.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    value = $bindable(''),\n    flex = false,\n    modes = ['rich-text', 'plain-text'],\n    buttons = [...inlineButtonTypes, ...blockButtonTypes],\n    components = [],\n    hidden = false,\n    disabled = false,\n    readonly = false,\n    required = false,\n    invalid = false,\n    children,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const editorStore = createEditorStore();\n\n  editorStore.config = { ...editorStore.config, modes, enabledButtons: buttons, components };\n\n  setContext('editorStore', editorStore);\n\n  $effect(() => {\n    if (!editorStore.initialized) {\n      return;\n    }\n\n    const newValue = value;\n\n    untrack(() => {\n      editorStore.inputValue = newValue;\n    });\n  });\n\n  $effect(() => {\n    if (!editorStore.initialized) {\n      return;\n    }\n\n    const newValue = editorStore.inputValue;\n\n    untrack(() => {\n      if (value !== newValue) {\n        value = newValue;\n      }\n    });\n  });\n</script>\n\n<div {...restProps} role=\"none\" class=\"sui text-editor\" class:flex {hidden}>\n  <TextEditorToolbar {disabled} {readonly} />\n  <LexicalRoot\n    hidden={!editorStore.useRichText || hidden}\n    {disabled}\n    {readonly}\n    {required}\n    {invalid}\n  />\n  <TextArea\n    autoResize={true}\n    bind:value={editorStore.inputValue}\n    {flex}\n    hidden={editorStore.useRichText || hidden}\n    {disabled}\n    {readonly}\n    {required}\n    {invalid}\n  />\n</div>\n\n{#if editorStore.showConverterError}\n  <Toast bind:show={editorStore.showConverterError}>\n    <Alert status=\"error\">{$_('_sui.text_editor.converter_error')}</Alert>\n  </Toast>\n{/if}\n\n<style>.text-editor {\n  margin: var(--sui-focus-ring-width);\n  width: calc(100% - var(--sui-focus-ring-width) * 2);\n}\n.text-editor :global(.sui.text-area) {\n  margin: 0 !important;\n  width: 100% !important;\n  min-width: auto;\n}\n.text-editor :global(.sui.text-area) :global(textarea) {\n  border-radius: 0 0 var(--sui-textbox-border-radius) var(--sui-textbox-border-radius) !important;\n}</style>\n","<!--\n  @component\n  The equivalent of the HTML `<input type=\"number\">` element.\n  @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/number\n  @see https://w3c.github.io/aria/#textbox\n-->\n<script>\n  import { untrack } from 'svelte';\n  import { _ } from 'svelte-i18n';\n  import Button from '../button/button.svelte';\n  import Icon from '../icon/icon.svelte';\n  import TextInput from './text-input.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import { CommonEventHandlers, InputEventHandlers, TextInputProps } from '../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {number} [value] Input value.\n   * @property {number} [min] Minimum allowed value.\n   * @property {number} [max] Maximum allowed value.\n   * @property {number} [step] Value to be added or removed when using the up/down arrow key or\n   * button.\n   * @property {Snippet} [increaseIcon] Increase icon slot content.\n   * @property {Snippet} [decreaseIcon] Decrease icon slot content.\n   */\n\n  /**\n   * @type {TextInputProps & CommonEventHandlers & InputEventHandlers & Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    value = $bindable(),\n    invalid = $bindable(false),\n    flex = false,\n    min = undefined,\n    max = undefined,\n    step = 1,\n    class: className,\n    hidden = false,\n    disabled = false,\n    readonly = false,\n    required = false,\n    children,\n    increaseIcon,\n    decreaseIcon,\n    onChange,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const id = $props.id();\n\n  let edited = $state(false);\n  let inputValue = $state('');\n\n  const maximumFractionDigits = $derived(String(step).split('.')[1]?.length || 0);\n  const isMin = $derived(typeof min === 'number' && Number(inputValue || 0) <= min);\n  const isMax = $derived(typeof max === 'number' && Number(inputValue || 0) >= max);\n\n  $effect(() => {\n    const newInputValue = String(value ?? '');\n\n    untrack(() => {\n      if (inputValue !== newInputValue) {\n        inputValue = newInputValue;\n      }\n    });\n  });\n\n  $effect(() => {\n    const newValue = inputValue.trim() ? Number(inputValue) : NaN;\n\n    value = !Number.isNaN(newValue) ? newValue : undefined;\n  });\n\n  $effect(() => {\n    if (edited) {\n      invalid =\n        (required && (value === undefined || inputValue === '')) ||\n        (inputValue !== undefined &&\n          inputValue !== '' &&\n          (Number.isNaN(Number(inputValue)) ||\n            (typeof min === 'number' && Number(inputValue || 0) < min) ||\n            (typeof max === 'number' && Number(inputValue || 0) > max)));\n    }\n  });\n\n  /**\n   * Decrease the number.\n   */\n  const decrease = () => {\n    if (isMin || Number.isNaN(Number(inputValue))) {\n      return;\n    }\n\n    inputValue = Number(Number(inputValue || 0) - step).toFixed(maximumFractionDigits);\n  };\n\n  /**\n   * Increase the number.\n   */\n  const increase = () => {\n    if (isMax || Number.isNaN(Number(inputValue))) {\n      return;\n    }\n\n    inputValue = Number(Number(inputValue || 0) + step).toFixed(maximumFractionDigits);\n  };\n</script>\n\n<div\n  role=\"none\"\n  class=\"sui number-input {className}\"\n  class:flex\n  class:disabled\n  class:readonly\n  {hidden}\n>\n  <div role=\"none\" class=\"buttons\">\n    <Button\n      iconic\n      disabled={disabled || readonly || Number.isNaN(Number(value)) || isMax}\n      aria-label={$_('_sui.number_input.increase')}\n      aria-controls={id}\n      onclick={() => {\n        increase();\n      }}\n    >\n      {#snippet startIcon()}\n        {#if increaseIcon}\n          {@render increaseIcon()}\n        {:else}\n          <Icon name=\"expand_less\" />\n        {/if}\n      {/snippet}\n    </Button>\n    <Button\n      iconic\n      disabled={disabled || readonly || Number.isNaN(Number(value)) || isMin}\n      aria-label={$_('_sui.number_input.decrease')}\n      aria-controls={id}\n      onclick={() => {\n        decrease();\n      }}\n    >\n      {#snippet startIcon()}\n        {#if decreaseIcon}\n          {@render decreaseIcon()}\n        {:else}\n          <Icon name=\"expand_more\" />\n        {/if}\n      {/snippet}\n    </Button>\n  </div>\n  <TextInput\n    {...restProps}\n    role=\"spinbutton\"\n    {id}\n    bind:value={inputValue}\n    spellcheck=\"false\"\n    {flex}\n    {hidden}\n    {disabled}\n    {readonly}\n    {required}\n    {invalid}\n    aria-valuenow={Number(value || 0)}\n    aria-valuemin={min}\n    aria-valuemax={max}\n    inputmode={maximumFractionDigits > 0 ? 'decimal' : 'numeric'}\n    onkeydown={(event) => {\n      const { key, ctrlKey, metaKey, altKey, shiftKey } = event;\n      const hasModifier = shiftKey || altKey || ctrlKey || metaKey;\n\n      if (key === 'ArrowDown' && !hasModifier) {\n        event.preventDefault();\n        decrease();\n      }\n\n      if (key === 'ArrowUp' && !hasModifier) {\n        event.preventDefault();\n        increase();\n      }\n\n      if (!edited) {\n        edited = true;\n      }\n    }}\n    oninput={() => {\n      if (!edited) {\n        edited = true;\n      }\n    }}\n    {onChange}\n  />\n</div>\n\n<style>.number-input {\n  display: inline-flex;\n  align-items: center;\n  margin: var(--sui-focus-ring-width);\n  min-width: var(--sui-textbox-singleline-min-width);\n}\n.number-input.flex {\n  width: -moz-available;\n  width: -webkit-fill-available;\n  width: stretch;\n  min-width: 0;\n}\n.number-input :global(:not(:first-child)) :global(input) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.number-input :global(:not(:last-child)) :global(input) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.number-input :global(:not(.disabled)) :global(button[aria-disabled=true]) {\n  filter: grayscale(0) opacity(1);\n}\n.number-input :global(:not(.disabled)) :global(button[aria-disabled=true]) :global(*) {\n  filter: grayscale(1) opacity(0.35);\n}\n.number-input :global(.text-input) {\n  flex: auto;\n  margin: 0 !important;\n  width: 0;\n  min-width: 0 !important;\n}\n\n.buttons {\n  display: flex;\n  flex-direction: column;\n  width: 24px;\n  height: var(--sui-textbox-height);\n}\n.buttons :global(button) {\n  flex: none;\n  margin: 0 !important;\n  border-width: 1px;\n  border-color: var(--sui-textbox-border-color);\n  width: 100%;\n  height: 50%;\n}\n.buttons :global(button:first-of-type) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n  border-width: 1px 0 0 1px;\n}\n.buttons :global(button:last-of-type) {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-width: 0 0 1px 1px;\n}\n.buttons :global(button) :global(.icon) {\n  font-size: 20px;\n}</style>\n","<!--\n  @component\n  The equivalent of the HTML `<input type=\"password\">` element, but it comes with the Show/Hide\n  button.\n  @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/password\n  @see https://w3c.github.io/aria/#textbox\n-->\n<script>\n  import { _ } from 'svelte-i18n';\n  import Button from '../button/button.svelte';\n  import Icon from '../icon/icon.svelte';\n  import TextInput from './text-input.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import { CommonEventHandlers, InputEventHandlers, TextInputProps } from '../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [value] Input value.\n   * @property {Snippet} [visibilityIcon] Visibility icon slot content.\n   */\n\n  /**\n   * @type {TextInputProps & CommonEventHandlers & InputEventHandlers & Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    value = $bindable(),\n    flex = false,\n    class: className,\n    hidden = false,\n    disabled = false,\n    readonly = false,\n    required = false,\n    invalid = false,\n    children,\n    visibilityIcon,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const id = $props.id();\n\n  /**\n   * Reference to the `<input>` element.\n   * @type {HTMLInputElement | undefined}\n   */\n  let inputElement = $state();\n  let passwordVisible = $state(false);\n\n  $effect(() => {\n    inputElement?.setAttribute('type', passwordVisible ? 'text' : 'password');\n  });\n</script>\n\n<div\n  role=\"none\"\n  class=\"sui password-input {className}\"\n  class:flex\n  class:disabled\n  class:readonly\n  {hidden}\n>\n  <TextInput\n    bind:element={inputElement}\n    {...restProps}\n    {id}\n    bind:value\n    type=\"password\"\n    spellcheck=\"false\"\n    {flex}\n    {hidden}\n    {disabled}\n    {readonly}\n    {required}\n    {invalid}\n  />\n  <Button\n    iconic\n    disabled={disabled || readonly}\n    pressed={passwordVisible}\n    aria-label={$_(\n      passwordVisible ? '_sui.password_input.hide_password' : '_sui.password_input.show_password',\n    )}\n    aria-controls={id}\n    onclick={() => {\n      passwordVisible = !passwordVisible;\n    }}\n  >\n    {#snippet startIcon()}\n      {#if visibilityIcon}\n        {@render visibilityIcon()}\n      {:else}\n        <Icon name={passwordVisible ? 'visibility_off' : 'visibility'} />\n      {/if}\n    {/snippet}\n  </Button>\n</div>\n\n<style>.password-input {\n  display: inline-flex;\n  align-items: center;\n  margin: var(--sui-focus-ring-width);\n  min-width: var(--sui-textbox-singleline-min-width);\n}\n.password-input.flex {\n  width: -moz-available;\n  width: -webkit-fill-available;\n  width: stretch;\n  min-width: 0;\n}\n.password-input :global(.text-input) {\n  flex: auto;\n  margin: 0 !important;\n  width: 0;\n  min-width: 0 !important;\n}\n.password-input :global(input) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.password-input :global(button) {\n  flex: none;\n  margin: 0 0 0 -1px;\n  border-width: 1px;\n  border-color: var(--sui-textbox-border-color);\n  width: var(--sui-textbox-height);\n  aspect-ratio: 1/1;\n}\n.password-input :global(button:last-child) {\n  border-radius: 0 4px 4px 0;\n}\n.password-input :global(button) :global(.icon) {\n  font-size: var(--sui-font-size-xx-large);\n}</style>\n","<!--\n  @component\n  Provide an application’s shell that makes the web app more like a native app. It also handles the\n  dark/light mode switching. This component has to be placed directly under `<body>` (or\n  `<div style=\"display:contents\">` in a SvelteKit app).\n-->\n<script>\n  import { onMount } from 'svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {'horizontal' | 'vertical'} [orientation] Orientation of the app shell’s children.\n   * @property {Snippet} [children] Primary slot content.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    orientation = 'horizontal',\n    children,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const stylesheets = [\n    // https://fonts.google.com/share?selection.family=Merriweather+Sans:ital,wght@0,300..800;1,300..800|Noto+Sans+Mono:wght@100..900\n    'https://fonts.googleapis.com/css2?family=Merriweather+Sans:ital,wght@0,300..800;1,300..800&family=Noto+Sans+Mono:wght@100..900&display=swap',\n    // https://fonts.google.com/icons?icon.set=Material+Symbols\n    // Use `font-display: block;` @see https://stackoverflow.com/q/41710834\n    'https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=block',\n  ];\n\n  /** @type {HTMLElement | undefined} */\n  let fontLoader = $state();\n\n  onMount(() => {\n    const mediaQuery = globalThis.matchMedia('(prefers-color-scheme: dark)');\n    const { dataset } = document.documentElement;\n\n    /**\n     * Apply the Dark or Light theme.\n     */\n    const applyTheme = () => {\n      if (dataset.autoTheming !== 'false') {\n        dataset.theme = mediaQuery.matches ? 'dark' : 'light';\n      }\n    };\n\n    applyTheme();\n\n    // eslint-disable-next-line jsdoc/require-jsdoc\n    mediaQuery.onchange = () => {\n      applyTheme();\n    };\n\n    globalThis.setTimeout(() => {\n      fontLoader?.remove();\n    }, 1000);\n  });\n</script>\n\n<!--\n  In the viewport meta tag, we set the maximum scale to 1 to prevent zooming in on mobile devices.\n  @see https://stackoverflow.com/q/2989263\n-->\n<svelte:head>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\" />\n  <meta name=\"google\" content=\"notranslate\" />\n  <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n  <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin=\"anonymous\" />\n  {#each stylesheets as href}\n    <link rel=\"preload\" {href} as=\"style\" />\n    <link rel=\"stylesheet\" {href} />\n  {/each}\n</svelte:head>\n\n<!-- Preload fonts, including the icons -->\n<div bind:this={fontLoader} class=\"font-loader\" aria-hidden=\"true\" style:opacity=\"0\">\n  Loading <strong>Sveltia</strong> <em>UI</em>\n  <span role=\"none\" class=\"material-symbols-outlined\">favorite</span>\n</div>\n\n<div\n  {...restProps}\n  role=\"none\"\n  class=\"sui app-shell {orientation}\"\n  ondragover={(event) => event.preventDefault()}\n  ondrop={(event) => event.preventDefault()}\n  oncontextmenu={(event) => {\n    // Allow context menu in developer mode\n    if (document.documentElement.matches('[data-env=\"dev\"]')) {\n      return;\n    }\n\n    // eslint-disable-next-line prefer-destructuring\n    const target = /** @type {HTMLElement} */ (event.target);\n\n    // Allow context menu on text inputs and contentEditable elements\n    if (\n      document.documentElement.matches('[data-env=\"dev\"]') ||\n      (target?.matches('input, textarea') && 'maxLength' in target) ||\n      /** @type {HTMLElement} */ (target?.closest('[role=\"textbox\"]'))?.contentEditable === 'true'\n    ) {\n      return;\n    }\n\n    event.preventDefault();\n  }}\n>\n  {@render children?.()}\n</div>\n\n<style>:global(:root),\n:global(:host) {\n  --sui-base-hue: 210;\n  --sui-highlight-foreground-color: hsl(var(--sui-foreground-color-1-hsl));\n  --sui-primary-foreground-color: hsl(var(--sui-foreground-color-2-hsl));\n  --sui-secondary-foreground-color: hsl(var(--sui-foreground-color-3-hsl));\n  --sui-tertiary-foreground-color: hsl(var(--sui-foreground-color-4-hsl));\n  --sui-disabled-foreground-color: hsl(var(--sui-foreground-color-5-hsl));\n  --sui-error-foreground-color: hsl(\n    var(--sui-error-color-hue) var(--sui-alert-foreground-color-saturation)\n      var(--sui-alert-foreground-color-lightness)\n  );\n  --sui-warning-foreground-color: hsl(\n    var(--sui-warning-color-hue) var(--sui-alert-foreground-color-saturation)\n      var(--sui-alert-foreground-color-lightness)\n  );\n  --sui-info-foreground-color: hsl(\n    var(--sui-info-color-hue) var(--sui-alert-foreground-color-saturation)\n      var(--sui-alert-foreground-color-lightness)\n  );\n  --sui-success-foreground-color: hsl(\n    var(--sui-success-color-hue) var(--sui-alert-foreground-color-saturation)\n      var(--sui-alert-foreground-color-lightness)\n  );\n  --sui-hover-background-color: hsl(var(--sui-background-color-5-hsl) / 35%);\n  --sui-selected-background-color: hsl(var(--sui-background-color-5-hsl) / 75%);\n  --sui-active-background-color: hsl(var(--sui-background-color-5-hsl) / 100%);\n  --sui-content-background-color: hsl(var(--sui-background-color-1-hsl));\n  --sui-code-background-color: hsl(var(--sui-background-color-3-hsl));\n  --sui-primary-background-color: hsl(var(--sui-background-color-2-hsl));\n  --sui-primary-background-color-translucent: hsl(var(--sui-background-color-2-hsl) / 80%);\n  --sui-secondary-background-color: hsl(var(--sui-background-color-3-hsl));\n  --sui-secondary-background-color-translucent: hsl(var(--sui-background-color-3-hsl) / 80%);\n  --sui-tertiary-background-color: hsl(var(--sui-background-color-4-hsl));\n  --sui-tertiary-background-color-translucent: hsl(var(--sui-background-color-4-hsl) / 80%);\n  --sui-disabled-background-color: hsl(var(--sui-background-color-4-hsl));\n  --sui-error-background-color: hsl(\n    var(--sui-error-color-hue) var(--sui-alert-background-color-saturation)\n      var(--sui-alert-background-color-lightness)\n  );\n  --sui-warning-background-color: hsl(\n    var(--sui-warning-color-hue) var(--sui-alert-background-color-saturation)\n      var(--sui-alert-background-color-lightness)\n  );\n  --sui-info-background-color: hsl(\n    var(--sui-info-color-hue) var(--sui-alert-background-color-saturation)\n      var(--sui-alert-background-color-lightness)\n  );\n  --sui-success-background-color: hsl(\n    var(--sui-success-color-hue) var(--sui-alert-background-color-saturation)\n      var(--sui-alert-background-color-lightness)\n  );\n  --sui-focus-ring-width: 4px;\n  --sui-primary-border-color: hsl(var(--sui-border-color-2-hsl));\n  --sui-secondary-border-color: hsl(var(--sui-border-color-3-hsl));\n  --sui-error-border-color: hsl(\n    var(--sui-error-color-hue) var(--sui-alert-border-color-saturation)\n      var(--sui-alert-border-color-lightness)\n  );\n  --sui-warning-border-color: hsl(\n    var(--sui-warning-color-hue) var(--sui-alert-border-color-saturation)\n      var(--sui-alert-border-color-lightness)\n  );\n  --sui-info-border-color: hsl(\n    var(--sui-info-color-hue) var(--sui-alert-border-color-saturation)\n      var(--sui-alert-border-color-lightness)\n  );\n  --sui-success-border-color: hsl(\n    var(--sui-success-color-hue) var(--sui-alert-border-color-saturation)\n      var(--sui-alert-border-color-lightness)\n  );\n  --sui-popup-shadow-color: hsl(var(--sui-shadow-color) / 40%);\n  --sui-popup-backdrop-color: hsl(var(--sui-shadow-color) / 40%);\n  --sui-font-family-default: \"Merriweather Sans\", sans-serif;\n  --sui-font-size-xxx-large: 24px;\n  --sui-font-size-xx-large: 20px;\n  --sui-font-size-x-large: 18px;\n  --sui-font-size-large: 16px;\n  --sui-font-size-default: 14px;\n  --sui-font-size-small: 12px;\n  --sui-font-size-x-small: 10px;\n  --sui-font-weight-normal: 325;\n  --sui-font-weight-bold: 625;\n  --sui-font-family-monospace: \"Noto Sans Mono\", monospace;\n  --sui-font-size-monospace: 0.95em;\n  --sui-line-height-default: 1.25;\n  --sui-line-height-compact: 1.5;\n  --sui-line-height-comfortable: 1.75;\n  --sui-word-spacing-normal: 0.1ex;\n  --sui-paragraph-margin: 1.75em;\n  --sui-control-small-border-width: 1px;\n  --sui-control-small-border-radius: calc(var(--sui-control-small-height) / 8);\n  --sui-control-small-padding: 0 calc((var(--sui-control-small-height) / 5));\n  --sui-control-small-height: 24px;\n  --sui-control-medium-border-width: 1px;\n  --sui-control-medium-border-radius: calc(var(--sui-control-medium-height) / 8);\n  --sui-control-medium-padding: 0 calc((var(--sui-control-medium-height) / 4));\n  --sui-control-medium-height: 32px;\n  --sui-control-large-border-width: 1px;\n  --sui-control-large-border-radius: calc(var(--sui-control-large-height) / 8);\n  --sui-control-large-padding: 0 calc((var(--sui-control-large-height) / 3));\n  --sui-control-large-height: 40px;\n  --sui-control-border-color: hsl(var(--sui-border-color-2-hsl));\n  --sui-control-foreground-color: var(--sui-primary-foreground-color);\n  --sui-control-background-color: hsl(var(--sui-background-color-4-hsl));\n  --sui-control-font-family: var(--sui-font-family-default);\n  --sui-control-font-size: var(--sui-font-size-default);\n  --sui-control-line-height: var(--sui-line-height-compact);\n  --sui-button-small-border-radius: var(--sui-control-small-border-radius);\n  --sui-button-small-padding: var(--sui-control-small-padding);\n  --sui-button-small-height: var(--sui-control-small-height);\n  --sui-button-medium-border-radius: var(--sui-control-medium-border-radius);\n  --sui-button-medium-padding: var(--sui-control-medium-padding);\n  --sui-button-medium-height: var(--sui-control-medium-height);\n  --sui-button-large-border-radius: var(--sui-control-large-border-radius);\n  --sui-button-large-padding: var(--sui-control-large-padding);\n  --sui-button-large-height: var(--sui-control-large-height);\n  --sui-button-border-color: var(--sui-control-border-color);\n  --sui-button-background-color: var(--sui-control-background-color);\n  --sui-checkbox-border-radius: var(--sui-control-medium-border-radius);\n  --sui-checkbox-height: 20px;\n  --sui-checkbox-border-color: hsl(var(--sui-border-color-1-hsl));\n  --sui-checkbox-background-color: var(--sui-control-background-color);\n  --sui-option-border-radius: var(--sui-control-medium-border-radius);\n  --sui-option-padding: calc((var(--sui-control-medium-height) / 6))\n    calc((var(--sui-control-medium-height) / 5));\n  --sui-option-height: var(--sui-control-medium-height);\n  --sui-listbox-border-radius: var(--sui-control-medium-border-radius);\n  --sui-listbox-border-color: var(--sui-control-border-color);\n  --sui-listbox-foreground-color: var(--sui-control-foreground-color);\n  --sui-listbox-background-color: hsl(var(--sui-background-color-1-hsl));\n  --sui-textbox-border-radius: var(--sui-control-medium-border-radius);\n  --sui-textbox-height: var(--sui-control-medium-height);\n  --sui-textbox-border-color: var(--sui-control-border-color);\n  --sui-textbox-foreground-color: var(--sui-control-foreground-color);\n  --sui-textbox-background-color: hsl(var(--sui-background-color-1-hsl));\n  --sui-textbox-font-family: var(--sui-font-family-default);\n  --sui-textbox-font-size: var(--sui-font-size-default);\n  --sui-textbox-singleline-padding: 0 8px;\n  --sui-textbox-singleline-min-width: 240px;\n  --sui-textbox-singleline-line-height: var(--sui-line-height-compact);\n  --sui-textbox-multiline-padding: 16px;\n  --sui-textbox-multiline-min-width: 480px;\n  --sui-textbox-multiline-line-height: var(--sui-line-height-comfortable);\n  --sui-tab-height: var(--sui-control-medium-height);\n  --sui-tab-small-height: var(--sui-control-small-height);\n  --sui-tab-medium-height: var(--sui-control-medium-height);\n  --sui-tab-large-height: var(--sui-control-large-height);\n  --sui-primary-toolbar-size: 56px;\n  --sui-secondary-toolbar-size: 48px;\n  --sui-bottom-navigation-height: var(--sui-primary-toolbar-size);\n  --sui-primary-row-height: 56px;\n  --sui-secondary-row-height: 40px;\n}\n@media (pointer: coarse) {\n  :global(:root),\n  :global(:host) {\n    --sui-control-small-height: 32px;\n    --sui-control-medium-height: 40px;\n    --sui-control-large-height: 48px;\n    --sui-checkbox-height: 24px;\n    --sui-secondary-row-height: 48px;\n  }\n}\n@media (prefers-reduced-transparency) {\n  :global(:root),\n  :global(:host) {\n    --sui-primary-background-color-translucent: hsl(var(--sui-background-color-2-hsl));\n    --sui-secondary-background-color-translucent: hsl(var(--sui-background-color-3-hsl));\n    --sui-tertiary-background-color-translucent: hsl(var(--sui-background-color-4-hsl));\n  }\n}\n:global(:root[data-theme=light]),\n:global(:host[data-theme=light]) {\n  color-scheme: light;\n  --sui-foreground-color-1-hsl: var(--sui-base-hue) 5% 5%;\n  --sui-foreground-color-2-hsl: var(--sui-base-hue) 5% 25%;\n  --sui-foreground-color-3-hsl: var(--sui-base-hue) 5% 35%;\n  --sui-foreground-color-4-hsl: var(--sui-base-hue) 5% 45%;\n  --sui-foreground-color-5-hsl: var(--sui-base-hue) 5% 65%;\n  --sui-background-color-1-hsl: var(--sui-base-hue) 5% 100%;\n  --sui-background-color-2-hsl: var(--sui-base-hue) 5% 98%;\n  --sui-background-color-3-hsl: var(--sui-base-hue) 5% 95%;\n  --sui-background-color-4-hsl: var(--sui-base-hue) 5% 92%;\n  --sui-background-color-5-hsl: var(--sui-base-hue) 5% 84%;\n  --sui-border-color-1-hsl: var(--sui-base-hue) 5% 60%;\n  --sui-border-color-2-hsl: var(--sui-base-hue) 5% 86%;\n  --sui-border-color-3-hsl: var(--sui-base-hue) 5% 90%;\n  --sui-shadow-color: var(--sui-base-hue) 10% 0%;\n  --sui-primary-accent-color-text: hsl(var(--sui-base-hue) 80% 40%);\n  --sui-primary-accent-color-light: hsl(var(--sui-base-hue) 80% 45%);\n  --sui-primary-accent-color: hsl(var(--sui-base-hue) 80% 40%);\n  --sui-primary-accent-color-dark: hsl(var(--sui-base-hue) 80% 35%);\n  --sui-primary-accent-color-inverted: hsl(var(--sui-base-hue) 10% 100%);\n  --sui-primary-accent-color-translucent: hsl(var(--sui-base-hue) 80% 50% / 40%);\n  --sui-error-color-hue: 0;\n  --sui-warning-color-hue: 40;\n  --sui-info-color-hue: 210;\n  --sui-success-color-hue: 100;\n  --sui-alert-foreground-color-saturation: 85%;\n  --sui-alert-foreground-color-lightness: 25%;\n  --sui-alert-background-color-saturation: 65%;\n  --sui-alert-background-color-lightness: 90%;\n  --sui-alert-border-color-saturation: 48%;\n  --sui-alert-border-color-lightness: 68%;\n}\n:global(:root[data-theme=dark]),\n:global(:host[data-theme=dark]) {\n  color-scheme: dark;\n  --sui-foreground-color-1-hsl: var(--sui-base-hue) 10% 95%;\n  --sui-foreground-color-2-hsl: var(--sui-base-hue) 10% 75%;\n  --sui-foreground-color-3-hsl: var(--sui-base-hue) 10% 65%;\n  --sui-foreground-color-4-hsl: var(--sui-base-hue) 10% 55%;\n  --sui-foreground-color-5-hsl: var(--sui-base-hue) 10% 35%;\n  --sui-background-color-1-hsl: var(--sui-base-hue) 10% 8%;\n  --sui-background-color-2-hsl: var(--sui-base-hue) 10% 10%;\n  --sui-background-color-3-hsl: var(--sui-base-hue) 10% 13%;\n  --sui-background-color-4-hsl: var(--sui-base-hue) 10% 16%;\n  --sui-background-color-5-hsl: var(--sui-base-hue) 10% 26%;\n  --sui-border-color-1-hsl: var(--sui-base-hue) 10% 40%;\n  --sui-border-color-2-hsl: var(--sui-base-hue) 10% 24%;\n  --sui-border-color-3-hsl: var(--sui-base-hue) 10% 20%;\n  --sui-shadow-color: var(--sui-base-hue) 10% 0%;\n  --sui-primary-accent-color-text: hsl(var(--sui-base-hue) 100% 60%);\n  --sui-primary-accent-color-light: hsl(var(--sui-base-hue) 100% 45%);\n  --sui-primary-accent-color: hsl(var(--sui-base-hue) 100% 40%);\n  --sui-primary-accent-color-dark: hsl(var(--sui-base-hue) 100% 35%);\n  --sui-primary-accent-color-inverted: hsl(var(--sui-base-hue) 10% 100%);\n  --sui-primary-accent-color-translucent: hsl(var(--sui-base-hue) 80% 50% / 40%);\n  --sui-error-color-hue: 0;\n  --sui-warning-color-hue: 40;\n  --sui-info-color-hue: 210;\n  --sui-success-color-hue: 100;\n  --sui-alert-foreground-color-saturation: 85%;\n  --sui-alert-foreground-color-lightness: 75%;\n  --sui-alert-background-color-saturation: 40%;\n  --sui-alert-background-color-lightness: 10%;\n  --sui-alert-border-color-saturation: 48%;\n  --sui-alert-border-color-lightness: 38%;\n}\n@media (prefers-color-scheme: light) {\n  :global(:root:not([data-theme])),\n  :global(:host:not([data-theme])) {\n    color-scheme: light;\n    --sui-foreground-color-1-hsl: var(--sui-base-hue) 5% 5%;\n    --sui-foreground-color-2-hsl: var(--sui-base-hue) 5% 25%;\n    --sui-foreground-color-3-hsl: var(--sui-base-hue) 5% 35%;\n    --sui-foreground-color-4-hsl: var(--sui-base-hue) 5% 45%;\n    --sui-foreground-color-5-hsl: var(--sui-base-hue) 5% 65%;\n    --sui-background-color-1-hsl: var(--sui-base-hue) 5% 100%;\n    --sui-background-color-2-hsl: var(--sui-base-hue) 5% 98%;\n    --sui-background-color-3-hsl: var(--sui-base-hue) 5% 95%;\n    --sui-background-color-4-hsl: var(--sui-base-hue) 5% 92%;\n    --sui-background-color-5-hsl: var(--sui-base-hue) 5% 84%;\n    --sui-border-color-1-hsl: var(--sui-base-hue) 5% 60%;\n    --sui-border-color-2-hsl: var(--sui-base-hue) 5% 86%;\n    --sui-border-color-3-hsl: var(--sui-base-hue) 5% 90%;\n    --sui-shadow-color: var(--sui-base-hue) 10% 0%;\n    --sui-primary-accent-color-text: hsl(var(--sui-base-hue) 80% 40%);\n    --sui-primary-accent-color-light: hsl(var(--sui-base-hue) 80% 45%);\n    --sui-primary-accent-color: hsl(var(--sui-base-hue) 80% 40%);\n    --sui-primary-accent-color-dark: hsl(var(--sui-base-hue) 80% 35%);\n    --sui-primary-accent-color-inverted: hsl(var(--sui-base-hue) 10% 100%);\n    --sui-primary-accent-color-translucent: hsl(var(--sui-base-hue) 80% 50% / 40%);\n    --sui-error-color-hue: 0;\n    --sui-warning-color-hue: 40;\n    --sui-info-color-hue: 210;\n    --sui-success-color-hue: 100;\n    --sui-alert-foreground-color-saturation: 85%;\n    --sui-alert-foreground-color-lightness: 25%;\n    --sui-alert-background-color-saturation: 65%;\n    --sui-alert-background-color-lightness: 90%;\n    --sui-alert-border-color-saturation: 48%;\n    --sui-alert-border-color-lightness: 68%;\n  }\n}\n@media (prefers-color-scheme: dark) {\n  :global(:root:not([data-theme])),\n  :global(:host:not([data-theme])) {\n    color-scheme: dark;\n    --sui-foreground-color-1-hsl: var(--sui-base-hue) 10% 95%;\n    --sui-foreground-color-2-hsl: var(--sui-base-hue) 10% 75%;\n    --sui-foreground-color-3-hsl: var(--sui-base-hue) 10% 65%;\n    --sui-foreground-color-4-hsl: var(--sui-base-hue) 10% 55%;\n    --sui-foreground-color-5-hsl: var(--sui-base-hue) 10% 35%;\n    --sui-background-color-1-hsl: var(--sui-base-hue) 10% 8%;\n    --sui-background-color-2-hsl: var(--sui-base-hue) 10% 10%;\n    --sui-background-color-3-hsl: var(--sui-base-hue) 10% 13%;\n    --sui-background-color-4-hsl: var(--sui-base-hue) 10% 16%;\n    --sui-background-color-5-hsl: var(--sui-base-hue) 10% 26%;\n    --sui-border-color-1-hsl: var(--sui-base-hue) 10% 40%;\n    --sui-border-color-2-hsl: var(--sui-base-hue) 10% 24%;\n    --sui-border-color-3-hsl: var(--sui-base-hue) 10% 20%;\n    --sui-shadow-color: var(--sui-base-hue) 10% 0%;\n    --sui-primary-accent-color-text: hsl(var(--sui-base-hue) 100% 60%);\n    --sui-primary-accent-color-light: hsl(var(--sui-base-hue) 100% 45%);\n    --sui-primary-accent-color: hsl(var(--sui-base-hue) 100% 40%);\n    --sui-primary-accent-color-dark: hsl(var(--sui-base-hue) 100% 35%);\n    --sui-primary-accent-color-inverted: hsl(var(--sui-base-hue) 10% 100%);\n    --sui-primary-accent-color-translucent: hsl(var(--sui-base-hue) 80% 50% / 40%);\n    --sui-error-color-hue: 0;\n    --sui-warning-color-hue: 40;\n    --sui-info-color-hue: 210;\n    --sui-success-color-hue: 100;\n    --sui-alert-foreground-color-saturation: 85%;\n    --sui-alert-foreground-color-lightness: 75%;\n    --sui-alert-background-color-saturation: 40%;\n    --sui-alert-background-color-lightness: 10%;\n    --sui-alert-border-color-saturation: 48%;\n    --sui-alert-border-color-lightness: 38%;\n  }\n}\n\n:global(.material-symbols-outlined) {\n  font-variation-settings: \"FILL\" 0, \"wght\" 300, \"GRAD\" 0, \"opsz\" 24;\n}\n:global(*),\n:global(::before),\n:global(::after) {\n  overflow-anchor: none;\n  scroll-behavior: smooth;\n  box-sizing: border-box;\n  outline-offset: 0px;\n  outline-width: var(--sui-focus-ring-width) !important;\n  outline-style: solid;\n  outline-color: transparent;\n  border-width: 0;\n  border-style: solid;\n  vertical-align: top;\n}\n@media (prefers-reduced-motion) {\n  :global(*),\n  :global(::before),\n  :global(::after) {\n    scroll-behavior: auto;\n    transition-duration: 1ms !important;\n  }\n}\n:global(::selection) {\n  background-color: var(--sui-primary-accent-color-translucent);\n}\n:global(*) {\n  -webkit-tap-highlight-color: transparent;\n}\n:global(:focus) {\n  z-index: 1;\n  outline-width: 0;\n}\n:global(:focus-visible) {\n  outline-color: var(--sui-primary-accent-color-translucent);\n  z-index: 2;\n}\n:global(:is(h1, h2, h3, h4, h5, h6)) {\n  margin: 0;\n  font-weight: var(--sui-font-weight-bold, bold);\n  line-height: var(--sui-line-height-default);\n}\n:global(h1) {\n  font-size: 32px;\n}\n:global(h2) {\n  font-size: 28px;\n}\n:global(h3) {\n  font-size: 24px;\n}\n:global(h4) {\n  font-size: 20px;\n}\n:global(h5) {\n  font-size: 16px;\n}\n:global(h6) {\n  font-size: 12px;\n}\n:global(strong) {\n  font-weight: var(--sui-font-weight-bold, bold);\n}\n:global(a) {\n  color: var(--sui-primary-accent-color-text);\n  text-decoration: none;\n  text-underline-offset: 2px;\n}\n:global(a:is(:hover, :focus, :active)) {\n  text-decoration: underline;\n}\n:is(:root, :host)[data-underline-links=true] :global(a) {\n  text-decoration: underline;\n}\n:global(:is(p, ul, ol, dl)) {\n  margin: var(--sui-paragraph-margin) 0;\n  line-height: var(--sui-line-height-comfortable);\n}\n:global(:is(ul, ol)) {\n  padding-inline: 2em;\n}\n:global(:is(code, pre)) {\n  border-radius: 4px;\n  background-color: var(--sui-code-background-color);\n  font-family: var(--sui-font-family-monospace);\n  font-size: var(--sui-font-size-monospace);\n  vertical-align: -0.05em;\n}\n:global(pre) {\n  padding: 8px;\n  line-height: var(--sui-line-height-compact);\n  -webkit-user-select: text;\n  user-select: text;\n}\n:global(code) {\n  padding: 2px 4px;\n}\n:global(table) {\n  border-collapse: collapse;\n}\n:global(:is(th, td)) {\n  border: 1px solid var(--sui-textbox-border-color);\n  padding: 8px;\n}\n:global(blockquote) {\n  margin-inline: 16px 0;\n  border-inline-start: 4px solid var(--sui-textbox-border-color);\n  padding-inline-start: 12px;\n}\n:global(:is(.disabled, .readonly, [aria-disabled=true], [aria-readonly=true], [inert]):not(body)) {\n  cursor: default;\n  pointer-events: none;\n  -webkit-user-select: none;\n  user-select: none;\n  filter: grayscale(1) opacity(0.35);\n}\n:global(:is(.disabled, .readonly, [aria-disabled=true], [aria-readonly=true], [inert]):not(body)) :global(*) {\n  filter: grayscale(0) opacity(1);\n}\n:global(:is(.disabled, .readonly, [aria-disabled=true], [aria-readonly=true], [inert])) :global(*) {\n  cursor: default;\n  pointer-events: none;\n  -webkit-user-select: none;\n  user-select: none;\n}\n\n.font-loader {\n  position: absolute;\n  left: -99999px;\n  font-family: var(--sui-font-family-default);\n}\n\n.app-shell {\n  position: fixed;\n  inset: 0;\n  overflow: hidden;\n  width: 100%;\n  height: 100%;\n  color: var(--sui-primary-foreground-color);\n  background-color: var(--sui-primary-background-color);\n  font-family: var(--sui-font-family-default);\n  font-size: var(--sui-font-size-default);\n  font-weight: var(--sui-font-weight-normal, normal);\n  word-spacing: var(--sui-word-spacing-normal);\n  -webkit-user-select: none;\n  user-select: none;\n  touch-action: none;\n  cursor: default;\n}\n.app-shell.horizontal {\n  display: flex;\n  flex-direction: row;\n  overflow: hidden;\n}\n.app-shell.vertical {\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n}</style>\n","<script>\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Snippet} [children] Slot content.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    children = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div role=\"none\" class=\"sui empty-state\">\n  {@render children?.()}\n</div>\n\n<style>.empty-state {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  gap: 16px;\n  padding: 16px;\n  width: 100%;\n  height: 100%;\n  text-align: center;\n}</style>\n","<!--\n  @component\n  A generic group layout.\n  @see https://w3c.github.io/aria/#group\n-->\n<script>\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {boolean} [hidden] Whether to hide the widget.\n   * @property {boolean} [disabled] Whether to disable the widget. An alias of the `aria-disabled`\n   * attribute.\n   * @property {Snippet} [children] Primary slot content.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    hidden = false,\n    disabled = false,\n    children,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div\n  {...restProps}\n  role=\"group\"\n  class=\"sui group {className}\"\n  {hidden}\n  aria-hidden={hidden}\n  aria-disabled={disabled}\n>\n  <div role=\"none\" class=\"inner\" inert={disabled}>\n    {@render children?.()}\n  </div>\n</div>\n\n<style>.inner {\n  display: contents;\n}</style>\n","import { addMessages, init } from 'svelte-i18n';\n\n/**\n * Load strings and initialize the locales.\n * @param {object} [init] Initialize options.\n * @param {string} [init.fallbackLocale] Fallback locale.\n * @param {string} [init.initialLocale] Initial locale.\n * @see https://github.com/kaisermann/svelte-i18n/blob/main/docs/Getting%20Started.md\n * @see https://vitejs.dev/guide/features.html#glob-import\n */\nexport const initLocales = ({ fallbackLocale = 'en', initialLocale = 'en' } = {}) => {\n  /** @type {{ [key: string]: { strings: object }}} */\n  const modules = import.meta.glob('./locales/*.js', { eager: true });\n\n  Object.entries(modules).forEach(([path, { strings }]) => {\n    const [, locale] = /** @type {string[]} */ (path.match(/([a-zA-Z-]+)\\.js/));\n\n    // Add `_sui` suffix to avoid collision with app localization\n    addMessages(locale, /** @type {any} */ ({ _sui: strings }));\n  });\n\n  init({\n    fallbackLocale,\n    initialLocale,\n  });\n};\n\ninitLocales();\n\nexport { default as Alert } from './components/alert/alert.svelte';\nexport { default as Infobar } from './components/alert/infobar.svelte';\nexport { default as BottomNavigation } from './components/bottom-navigation/bottom-navigation.svelte';\nexport { default as ButtonGroup } from './components/button/button-group.svelte';\nexport { default as Button } from './components/button/button.svelte';\nexport { default as FloatingActionButtonWrapper } from './components/button/floating-action-button-wrapper.svelte';\nexport { default as SelectButtonGroup } from './components/button/select-button-group.svelte';\nexport { default as SelectButton } from './components/button/select-button.svelte';\nexport { default as SplitButton } from './components/button/split-button.svelte';\nexport { default as Calendar } from './components/calendar/calendar.svelte';\nexport { default as CheckboxGroup } from './components/checkbox/checkbox-group.svelte';\nexport { default as Checkbox } from './components/checkbox/checkbox.svelte';\nexport { default as AlertDialog } from './components/dialog/alert-dialog.svelte';\nexport { default as ConfirmationDialog } from './components/dialog/confirmation-dialog.svelte';\nexport { default as Dialog } from './components/dialog/dialog.svelte';\nexport { default as PromptDialog } from './components/dialog/prompt-dialog.svelte';\nexport { default as Disclosure } from './components/disclosure/disclosure.svelte';\nexport { default as Divider } from './components/divider/divider.svelte';\nexport { default as Spacer } from './components/divider/spacer.svelte';\nexport { default as Drawer } from './components/drawer/drawer.svelte';\nexport { default as FilePicker } from './components/file/file-picker.svelte';\nexport { default as GridBody } from './components/grid/grid-body.svelte';\nexport { default as GridCell } from './components/grid/grid-cell.svelte';\nexport { default as GridColHeader } from './components/grid/grid-col-header.svelte';\nexport { default as GridFoot } from './components/grid/grid-foot.svelte';\nexport { default as GridHead } from './components/grid/grid-head.svelte';\nexport { default as GridRowHeader } from './components/grid/grid-row-header.svelte';\nexport { default as GridRow } from './components/grid/grid-row.svelte';\nexport { default as Grid } from './components/grid/grid.svelte';\nexport { default as Icon } from './components/icon/icon.svelte';\nexport { default as Listbox } from './components/listbox/listbox.svelte';\nexport { default as OptionGroup } from './components/listbox/option-group.svelte';\nexport { default as Option } from './components/listbox/option.svelte';\nexport { default as MenuButton } from './components/menu/menu-button.svelte';\nexport { default as MenuItemCheckbox } from './components/menu/menu-item-checkbox.svelte';\nexport { default as MenuItemGroup } from './components/menu/menu-item-group.svelte';\nexport { default as MenuItemRadio } from './components/menu/menu-item-radio.svelte';\nexport { default as MenuItem } from './components/menu/menu-item.svelte';\nexport { default as Menu } from './components/menu/menu.svelte';\nexport { default as Progressbar } from './components/progressbar/progressbar.svelte';\nexport { default as RadioGroup } from './components/radio/radio-group.svelte';\nexport { default as Radio } from './components/radio/radio.svelte';\nexport { default as InfiniteScroll } from './components/scroll/infinite-scroll.svelte';\nexport { default as Combobox } from './components/select/combobox.svelte';\nexport { default as SelectTags } from './components/select/select-tags.svelte';\nexport { default as Select } from './components/select/select.svelte';\nexport { default as Slider } from './components/slider/slider.svelte';\nexport { default as Switch } from './components/switch/switch.svelte';\nexport { default as TableBody } from './components/table/table-body.svelte';\nexport { default as TableCell } from './components/table/table-cell.svelte';\nexport { default as TableColHeader } from './components/table/table-col-header.svelte';\nexport { default as TableFoot } from './components/table/table-foot.svelte';\nexport { default as TableHead } from './components/table/table-head.svelte';\nexport { default as TableRowHeader } from './components/table/table-row-header.svelte';\nexport { default as TableRow } from './components/table/table-row.svelte';\nexport { default as Table } from './components/table/table.svelte';\nexport { default as TabBox } from './components/tabs/tab-box.svelte';\nexport { default as TabList } from './components/tabs/tab-list.svelte';\nexport { default as TabPanel } from './components/tabs/tab-panel.svelte';\nexport { default as TabPanels } from './components/tabs/tab-panels.svelte';\nexport { default as Tab } from './components/tabs/tab.svelte';\nexport { default as CodeEditor } from './components/text-editor/code-editor.svelte';\nexport { default as TextEditor } from './components/text-editor/text-editor.svelte';\nexport { default as NumberInput } from './components/text-field/number-input.svelte';\nexport { default as PasswordInput } from './components/text-field/password-input.svelte';\nexport { default as SearchBar } from './components/text-field/search-bar.svelte';\nexport { default as TextArea } from './components/text-field/text-area.svelte';\nexport { default as TextInput } from './components/text-field/text-input.svelte';\nexport { default as Toast } from './components/toast/toast.svelte';\nexport { default as Toolbar } from './components/toolbar/toolbar.svelte';\nexport { default as TruncatedText } from './components/typography/truncated-text.svelte';\nexport { default as AppShell } from './components/util/app-shell.svelte';\nexport { default as EmptyState } from './components/util/empty-state.svelte';\nexport { default as Group } from './components/util/group.svelte';\nexport { default as Modal } from './components/util/modal.svelte';\n\n// eslint-disable-next-line import/export export * from './typedefs';\n","<script>\n  import { waitForVisibility } from '@sveltia/utils/element';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Snippet} children Slot content.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    children,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {HTMLElement | null} */\n  let placeholder = $state(null);\n  /** @type {boolean} */\n  let visible = $state(false);\n\n  $effect(() => {\n    if (placeholder) {\n      (async () => {\n        await waitForVisibility(placeholder);\n        visible = true;\n      })();\n    }\n  });\n</script>\n\n{#if visible}\n  {@render children()}\n{:else}\n  <div class=\"placeholder\" bind:this={placeholder}></div>\n{/if}\n\n<style lang=\"scss\">\n  .placeholder {\n    height: 64px;\n  }\n</style>\n","/*! @license DOMPurify 3.2.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.6/LICENSE */\n\n'use strict';\n\nconst {\n  entries,\n  setPrototypeOf,\n  isFrozen,\n  getPrototypeOf,\n  getOwnPropertyDescriptor\n} = Object;\nlet {\n  freeze,\n  seal,\n  create\n} = Object; // eslint-disable-line import/no-mutable-exports\nlet {\n  apply,\n  construct\n} = typeof Reflect !== 'undefined' && Reflect;\nif (!freeze) {\n  freeze = function freeze(x) {\n    return x;\n  };\n}\nif (!seal) {\n  seal = function seal(x) {\n    return x;\n  };\n}\nif (!apply) {\n  apply = function apply(fun, thisValue, args) {\n    return fun.apply(thisValue, args);\n  };\n}\nif (!construct) {\n  construct = function construct(Func, args) {\n    return new Func(...args);\n  };\n}\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySplice = unapply(Array.prototype.splice);\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst regExpTest = unapply(RegExp.prototype.test);\nconst typeErrorCreate = unconstruct(TypeError);\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply(func) {\n  return function (thisArg) {\n    if (thisArg instanceof RegExp) {\n      thisArg.lastIndex = 0;\n    }\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n    return apply(func, thisArg, args);\n  };\n}\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct(func) {\n  return function () {\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n    return construct(func, args);\n  };\n}\n/**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\nfunction addToSet(set, array) {\n  let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n  if (setPrototypeOf) {\n    // Make 'in' and truthy checks like Boolean(set.constructor)\n    // independent of any properties defined on Object.prototype.\n    // Prevent prototype setters from intercepting set as a this value.\n    setPrototypeOf(set, null);\n  }\n  let l = array.length;\n  while (l--) {\n    let element = array[l];\n    if (typeof element === 'string') {\n      const lcElement = transformCaseFunc(element);\n      if (lcElement !== element) {\n        // Config presets (e.g. tags.js, attrs.js) are immutable.\n        if (!isFrozen(array)) {\n          array[l] = lcElement;\n        }\n        element = lcElement;\n      }\n    }\n    set[element] = true;\n  }\n  return set;\n}\n/**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\nfunction cleanArray(array) {\n  for (let index = 0; index < array.length; index++) {\n    const isPropertyExist = objectHasOwnProperty(array, index);\n    if (!isPropertyExist) {\n      array[index] = null;\n    }\n  }\n  return array;\n}\n/**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\nfunction clone(object) {\n  const newObject = create(null);\n  for (const [property, value] of entries(object)) {\n    const isPropertyExist = objectHasOwnProperty(object, property);\n    if (isPropertyExist) {\n      if (Array.isArray(value)) {\n        newObject[property] = cleanArray(value);\n      } else if (value && typeof value === 'object' && value.constructor === Object) {\n        newObject[property] = clone(value);\n      } else {\n        newObject[property] = value;\n      }\n    }\n  }\n  return newObject;\n}\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter(object, prop) {\n  while (object !== null) {\n    const desc = getOwnPropertyDescriptor(object, prop);\n    if (desc) {\n      if (desc.get) {\n        return unapply(desc.get);\n      }\n      if (typeof desc.value === 'function') {\n        return unapply(desc.value);\n      }\n    }\n    object = getPrototypeOf(object);\n  }\n  function fallbackValue() {\n    return null;\n  }\n  return fallbackValue;\n}\n\nconst html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\nconst svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\nconst svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nconst svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\nconst mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nconst mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\nconst text = freeze(['#text']);\n\nconst html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);\nconst svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\nconst mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\nconst xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n// eslint-disable-next-line unicorn/better-regex\nconst MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nconst ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nconst TMPLIT_EXPR = seal(/\\$\\{[\\w\\W]*/gm); // eslint-disable-line unicorn/better-regex\nconst DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nconst ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nconst IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nconst IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nconst ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nconst DOCTYPE_NAME = seal(/^html$/i);\nconst CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\nvar EXPRESSIONS = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  ARIA_ATTR: ARIA_ATTR,\n  ATTR_WHITESPACE: ATTR_WHITESPACE,\n  CUSTOM_ELEMENT: CUSTOM_ELEMENT,\n  DATA_ATTR: DATA_ATTR,\n  DOCTYPE_NAME: DOCTYPE_NAME,\n  ERB_EXPR: ERB_EXPR,\n  IS_ALLOWED_URI: IS_ALLOWED_URI,\n  IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n  MUSTACHE_EXPR: MUSTACHE_EXPR,\n  TMPLIT_EXPR: TMPLIT_EXPR\n});\n\n/* eslint-disable @typescript-eslint/indent */\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n  element: 1,\n  attribute: 2,\n  text: 3,\n  cdataSection: 4,\n  entityReference: 5,\n  // Deprecated\n  entityNode: 6,\n  // Deprecated\n  progressingInstruction: 7,\n  comment: 8,\n  document: 9,\n  documentType: 10,\n  documentFragment: 11,\n  notation: 12 // Deprecated\n};\nconst getGlobal = function getGlobal() {\n  return typeof window === 'undefined' ? null : window;\n};\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n  if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n    return null;\n  }\n  // Allow the callers to control the unique policy name\n  // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n  // Policy creation with duplicate names throws in Trusted Types.\n  let suffix = null;\n  const ATTR_NAME = 'data-tt-policy-suffix';\n  if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n    suffix = purifyHostElement.getAttribute(ATTR_NAME);\n  }\n  const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n  try {\n    return trustedTypes.createPolicy(policyName, {\n      createHTML(html) {\n        return html;\n      },\n      createScriptURL(scriptUrl) {\n        return scriptUrl;\n      }\n    });\n  } catch (_) {\n    // Policy creation failed (most likely another DOMPurify script has\n    // already run). Skip creating the policy, as this will only cause errors\n    // if TT are enforced.\n    console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n    return null;\n  }\n};\nconst _createHooksMap = function _createHooksMap() {\n  return {\n    afterSanitizeAttributes: [],\n    afterSanitizeElements: [],\n    afterSanitizeShadowDOM: [],\n    beforeSanitizeAttributes: [],\n    beforeSanitizeElements: [],\n    beforeSanitizeShadowDOM: [],\n    uponSanitizeAttribute: [],\n    uponSanitizeElement: [],\n    uponSanitizeShadowNode: []\n  };\n};\nfunction createDOMPurify() {\n  let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n  const DOMPurify = root => createDOMPurify(root);\n  DOMPurify.version = '3.2.6';\n  DOMPurify.removed = [];\n  if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {\n    // Not running in a browser, provide a factory function\n    // so that you can pass your own Window\n    DOMPurify.isSupported = false;\n    return DOMPurify;\n  }\n  let {\n    document\n  } = window;\n  const originalDocument = document;\n  const currentScript = originalDocument.currentScript;\n  const {\n    DocumentFragment,\n    HTMLTemplateElement,\n    Node,\n    Element,\n    NodeFilter,\n    NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n    HTMLFormElement,\n    DOMParser,\n    trustedTypes\n  } = window;\n  const ElementPrototype = Element.prototype;\n  const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n  const remove = lookupGetter(ElementPrototype, 'remove');\n  const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n  const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n  const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n  // As per issue #47, the web-components registry is inherited by a\n  // new document created via createHTMLDocument. As per the spec\n  // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n  // a new empty registry is used when creating a template contents owner\n  // document, so we use that as our parent document to ensure nothing\n  // is inherited.\n  if (typeof HTMLTemplateElement === 'function') {\n    const template = document.createElement('template');\n    if (template.content && template.content.ownerDocument) {\n      document = template.content.ownerDocument;\n    }\n  }\n  let trustedTypesPolicy;\n  let emptyHTML = '';\n  const {\n    implementation,\n    createNodeIterator,\n    createDocumentFragment,\n    getElementsByTagName\n  } = document;\n  const {\n    importNode\n  } = originalDocument;\n  let hooks = _createHooksMap();\n  /**\n   * Expose whether this browser supports running the full DOMPurify.\n   */\n  DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n  const {\n    MUSTACHE_EXPR,\n    ERB_EXPR,\n    TMPLIT_EXPR,\n    DATA_ATTR,\n    ARIA_ATTR,\n    IS_SCRIPT_OR_DATA,\n    ATTR_WHITESPACE,\n    CUSTOM_ELEMENT\n  } = EXPRESSIONS;\n  let {\n    IS_ALLOWED_URI: IS_ALLOWED_URI$1\n  } = EXPRESSIONS;\n  /**\n   * We consider the elements and attributes below to be safe. Ideally\n   * don't add any new ones but feel free to remove unwanted ones.\n   */\n  /* allowed element names */\n  let ALLOWED_TAGS = null;\n  const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n  /* Allowed attribute names */\n  let ALLOWED_ATTR = null;\n  const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n  /*\n   * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n   * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n   * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n   * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n   */\n  let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n    tagNameCheck: {\n      writable: true,\n      configurable: false,\n      enumerable: true,\n      value: null\n    },\n    attributeNameCheck: {\n      writable: true,\n      configurable: false,\n      enumerable: true,\n      value: null\n    },\n    allowCustomizedBuiltInElements: {\n      writable: true,\n      configurable: false,\n      enumerable: true,\n      value: false\n    }\n  }));\n  /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n  let FORBID_TAGS = null;\n  /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n  let FORBID_ATTR = null;\n  /* Decide if ARIA attributes are okay */\n  let ALLOW_ARIA_ATTR = true;\n  /* Decide if custom data attributes are okay */\n  let ALLOW_DATA_ATTR = true;\n  /* Decide if unknown protocols are okay */\n  let ALLOW_UNKNOWN_PROTOCOLS = false;\n  /* Decide if self-closing tags in attributes are allowed.\n   * Usually removed due to a mXSS issue in jQuery 3.0 */\n  let ALLOW_SELF_CLOSE_IN_ATTR = true;\n  /* Output should be safe for common template engines.\n   * This means, DOMPurify removes data attributes, mustaches and ERB\n   */\n  let SAFE_FOR_TEMPLATES = false;\n  /* Output should be safe even for XML used within HTML and alike.\n   * This means, DOMPurify removes comments when containing risky content.\n   */\n  let SAFE_FOR_XML = true;\n  /* Decide if document with <html>... should be returned */\n  let WHOLE_DOCUMENT = false;\n  /* Track whether config is already set on this instance of DOMPurify. */\n  let SET_CONFIG = false;\n  /* Decide if all elements (e.g. style, script) must be children of\n   * document.body. By default, browsers might move them to document.head */\n  let FORCE_BODY = false;\n  /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n   * string (or a TrustedHTML object if Trusted Types are supported).\n   * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n   */\n  let RETURN_DOM = false;\n  /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n   * string  (or a TrustedHTML object if Trusted Types are supported) */\n  let RETURN_DOM_FRAGMENT = false;\n  /* Try to return a Trusted Type object instead of a string, return a string in\n   * case Trusted Types are not supported  */\n  let RETURN_TRUSTED_TYPE = false;\n  /* Output should be free from DOM clobbering attacks?\n   * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n   */\n  let SANITIZE_DOM = true;\n  /* Achieve full DOM Clobbering protection by isolating the namespace of named\n   * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n   *\n   * HTML/DOM spec rules that enable DOM Clobbering:\n   *   - Named Access on Window (§7.3.3)\n   *   - DOM Tree Accessors (§3.1.5)\n   *   - Form Element Parent-Child Relations (§4.10.3)\n   *   - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n   *   - HTMLCollection (§4.2.10.2)\n   *\n   * Namespace isolation is implemented by prefixing `id` and `name` attributes\n   * with a constant string, i.e., `user-content-`\n   */\n  let SANITIZE_NAMED_PROPS = false;\n  const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n  /* Keep element content when removing element? */\n  let KEEP_CONTENT = true;\n  /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n   * of importing it into a new Document and returning a sanitized copy */\n  let IN_PLACE = false;\n  /* Allow usage of profiles like html, svg and mathMl */\n  let USE_PROFILES = {};\n  /* Tags to ignore content of when KEEP_CONTENT is true */\n  let FORBID_CONTENTS = null;\n  const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n  /* Tags that are safe for data: URIs */\n  let DATA_URI_TAGS = null;\n  const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n  /* Attributes safe for values like \"javascript:\" */\n  let URI_SAFE_ATTRIBUTES = null;\n  const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n  const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n  const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n  const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n  /* Document namespace */\n  let NAMESPACE = HTML_NAMESPACE;\n  let IS_EMPTY_INPUT = false;\n  /* Allowed XHTML+XML namespaces */\n  let ALLOWED_NAMESPACES = null;\n  const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n  let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n  let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n  // Certain elements are allowed in both SVG and HTML\n  // namespace. We need to specify them explicitly\n  // so that they don't get erroneously deleted from\n  // HTML namespace.\n  const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n  /* Parsing of strict XHTML documents */\n  let PARSER_MEDIA_TYPE = null;\n  const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n  const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n  let transformCaseFunc = null;\n  /* Keep a reference to config to pass to hooks */\n  let CONFIG = null;\n  /* Ideally, do not touch anything below this line */\n  /* ______________________________________________ */\n  const formElement = document.createElement('form');\n  const isRegexOrFunction = function isRegexOrFunction(testValue) {\n    return testValue instanceof RegExp || testValue instanceof Function;\n  };\n  /**\n   * _parseConfig\n   *\n   * @param cfg optional config literal\n   */\n  // eslint-disable-next-line complexity\n  const _parseConfig = function _parseConfig() {\n    let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    if (CONFIG && CONFIG === cfg) {\n      return;\n    }\n    /* Shield configuration object from tampering */\n    if (!cfg || typeof cfg !== 'object') {\n      cfg = {};\n    }\n    /* Shield configuration object from prototype pollution */\n    cfg = clone(cfg);\n    PARSER_MEDIA_TYPE =\n    // eslint-disable-next-line unicorn/prefer-includes\n    SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n    // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n    transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n    /* Set configuration parameters */\n    ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n    ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n    ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n    URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;\n    DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;\n    FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n    FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : clone({});\n    FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : clone({});\n    USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n    ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n    ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n    ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n    ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n    SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n    SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n    WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n    RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n    RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n    RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n    FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n    SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n    SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n    KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n    IN_PLACE = cfg.IN_PLACE || false; // Default false\n    IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n    NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n    MATHML_TEXT_INTEGRATION_POINTS = cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;\n    HTML_INTEGRATION_POINTS = cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;\n    CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n    if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n      CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n    }\n    if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n      CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n    }\n    if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n      CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n    }\n    if (SAFE_FOR_TEMPLATES) {\n      ALLOW_DATA_ATTR = false;\n    }\n    if (RETURN_DOM_FRAGMENT) {\n      RETURN_DOM = true;\n    }\n    /* Parse profile info */\n    if (USE_PROFILES) {\n      ALLOWED_TAGS = addToSet({}, text);\n      ALLOWED_ATTR = [];\n      if (USE_PROFILES.html === true) {\n        addToSet(ALLOWED_TAGS, html$1);\n        addToSet(ALLOWED_ATTR, html);\n      }\n      if (USE_PROFILES.svg === true) {\n        addToSet(ALLOWED_TAGS, svg$1);\n        addToSet(ALLOWED_ATTR, svg);\n        addToSet(ALLOWED_ATTR, xml);\n      }\n      if (USE_PROFILES.svgFilters === true) {\n        addToSet(ALLOWED_TAGS, svgFilters);\n        addToSet(ALLOWED_ATTR, svg);\n        addToSet(ALLOWED_ATTR, xml);\n      }\n      if (USE_PROFILES.mathMl === true) {\n        addToSet(ALLOWED_TAGS, mathMl$1);\n        addToSet(ALLOWED_ATTR, mathMl);\n        addToSet(ALLOWED_ATTR, xml);\n      }\n    }\n    /* Merge configuration parameters */\n    if (cfg.ADD_TAGS) {\n      if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n        ALLOWED_TAGS = clone(ALLOWED_TAGS);\n      }\n      addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n    }\n    if (cfg.ADD_ATTR) {\n      if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n        ALLOWED_ATTR = clone(ALLOWED_ATTR);\n      }\n      addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n    }\n    if (cfg.ADD_URI_SAFE_ATTR) {\n      addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n    }\n    if (cfg.FORBID_CONTENTS) {\n      if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n        FORBID_CONTENTS = clone(FORBID_CONTENTS);\n      }\n      addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n    }\n    /* Add #text in case KEEP_CONTENT is set to true */\n    if (KEEP_CONTENT) {\n      ALLOWED_TAGS['#text'] = true;\n    }\n    /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n    if (WHOLE_DOCUMENT) {\n      addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n    }\n    /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n    if (ALLOWED_TAGS.table) {\n      addToSet(ALLOWED_TAGS, ['tbody']);\n      delete FORBID_TAGS.tbody;\n    }\n    if (cfg.TRUSTED_TYPES_POLICY) {\n      if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n        throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n      }\n      if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n        throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n      }\n      // Overwrite existing TrustedTypes policy.\n      trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n      // Sign local variables required by `sanitize`.\n      emptyHTML = trustedTypesPolicy.createHTML('');\n    } else {\n      // Uninitialized policy, attempt to initialize the internal dompurify policy.\n      if (trustedTypesPolicy === undefined) {\n        trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n      }\n      // If creating the internal policy succeeded sign internal variables.\n      if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n        emptyHTML = trustedTypesPolicy.createHTML('');\n      }\n    }\n    // Prevent further manipulation of configuration.\n    // Not available in IE8, Safari 5, etc.\n    if (freeze) {\n      freeze(cfg);\n    }\n    CONFIG = cfg;\n  };\n  /* Keep track of all possible SVG and MathML tags\n   * so that we can perform the namespace checks\n   * correctly. */\n  const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n  const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n  /**\n   * @param element a DOM element whose namespace is being checked\n   * @returns Return false if the element has a\n   *  namespace that a spec-compliant parser would never\n   *  return. Return true otherwise.\n   */\n  const _checkValidNamespace = function _checkValidNamespace(element) {\n    let parent = getParentNode(element);\n    // In JSDOM, if we're inside shadow DOM, then parentNode\n    // can be null. We just simulate parent in this case.\n    if (!parent || !parent.tagName) {\n      parent = {\n        namespaceURI: NAMESPACE,\n        tagName: 'template'\n      };\n    }\n    const tagName = stringToLowerCase(element.tagName);\n    const parentTagName = stringToLowerCase(parent.tagName);\n    if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n      return false;\n    }\n    if (element.namespaceURI === SVG_NAMESPACE) {\n      // The only way to switch from HTML namespace to SVG\n      // is via <svg>. If it happens via any other tag, then\n      // it should be killed.\n      if (parent.namespaceURI === HTML_NAMESPACE) {\n        return tagName === 'svg';\n      }\n      // The only way to switch from MathML to SVG is via`\n      // svg if parent is either <annotation-xml> or MathML\n      // text integration points.\n      if (parent.namespaceURI === MATHML_NAMESPACE) {\n        return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n      }\n      // We only allow elements that are defined in SVG\n      // spec. All others are disallowed in SVG namespace.\n      return Boolean(ALL_SVG_TAGS[tagName]);\n    }\n    if (element.namespaceURI === MATHML_NAMESPACE) {\n      // The only way to switch from HTML namespace to MathML\n      // is via <math>. If it happens via any other tag, then\n      // it should be killed.\n      if (parent.namespaceURI === HTML_NAMESPACE) {\n        return tagName === 'math';\n      }\n      // The only way to switch from SVG to MathML is via\n      // <math> and HTML integration points\n      if (parent.namespaceURI === SVG_NAMESPACE) {\n        return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n      }\n      // We only allow elements that are defined in MathML\n      // spec. All others are disallowed in MathML namespace.\n      return Boolean(ALL_MATHML_TAGS[tagName]);\n    }\n    if (element.namespaceURI === HTML_NAMESPACE) {\n      // The only way to switch from SVG to HTML is via\n      // HTML integration points, and from MathML to HTML\n      // is via MathML text integration points\n      if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n        return false;\n      }\n      if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n        return false;\n      }\n      // We disallow tags that are specific for MathML\n      // or SVG and should never appear in HTML namespace\n      return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n    }\n    // For XHTML and XML documents that support custom namespaces\n    if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n      return true;\n    }\n    // The code should never reach this place (this means\n    // that the element somehow got namespace that is not\n    // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n    // Return false just in case.\n    return false;\n  };\n  /**\n   * _forceRemove\n   *\n   * @param node a DOM node\n   */\n  const _forceRemove = function _forceRemove(node) {\n    arrayPush(DOMPurify.removed, {\n      element: node\n    });\n    try {\n      // eslint-disable-next-line unicorn/prefer-dom-node-remove\n      getParentNode(node).removeChild(node);\n    } catch (_) {\n      remove(node);\n    }\n  };\n  /**\n   * _removeAttribute\n   *\n   * @param name an Attribute name\n   * @param element a DOM node\n   */\n  const _removeAttribute = function _removeAttribute(name, element) {\n    try {\n      arrayPush(DOMPurify.removed, {\n        attribute: element.getAttributeNode(name),\n        from: element\n      });\n    } catch (_) {\n      arrayPush(DOMPurify.removed, {\n        attribute: null,\n        from: element\n      });\n    }\n    element.removeAttribute(name);\n    // We void attribute values for unremovable \"is\" attributes\n    if (name === 'is') {\n      if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n        try {\n          _forceRemove(element);\n        } catch (_) {}\n      } else {\n        try {\n          element.setAttribute(name, '');\n        } catch (_) {}\n      }\n    }\n  };\n  /**\n   * _initDocument\n   *\n   * @param dirty - a string of dirty markup\n   * @return a DOM, filled with the dirty markup\n   */\n  const _initDocument = function _initDocument(dirty) {\n    /* Create a HTML document */\n    let doc = null;\n    let leadingWhitespace = null;\n    if (FORCE_BODY) {\n      dirty = '<remove></remove>' + dirty;\n    } else {\n      /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n      const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n      leadingWhitespace = matches && matches[0];\n    }\n    if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n      // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n      dirty = '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' + dirty + '</body></html>';\n    }\n    const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n    /*\n     * Use the DOMParser API by default, fallback later if needs be\n     * DOMParser not work for svg when has multiple root element.\n     */\n    if (NAMESPACE === HTML_NAMESPACE) {\n      try {\n        doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n      } catch (_) {}\n    }\n    /* Use createHTMLDocument in case DOMParser is not available */\n    if (!doc || !doc.documentElement) {\n      doc = implementation.createDocument(NAMESPACE, 'template', null);\n      try {\n        doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n      } catch (_) {\n        // Syntax error if dirtyPayload is invalid xml\n      }\n    }\n    const body = doc.body || doc.documentElement;\n    if (dirty && leadingWhitespace) {\n      body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n    }\n    /* Work on whole document or just its body */\n    if (NAMESPACE === HTML_NAMESPACE) {\n      return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n    }\n    return WHOLE_DOCUMENT ? doc.documentElement : body;\n  };\n  /**\n   * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n   *\n   * @param root The root element or node to start traversing on.\n   * @return The created NodeIterator\n   */\n  const _createNodeIterator = function _createNodeIterator(root) {\n    return createNodeIterator.call(root.ownerDocument || root, root,\n    // eslint-disable-next-line no-bitwise\n    NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n  };\n  /**\n   * _isClobbered\n   *\n   * @param element element to check for clobbering attacks\n   * @return true if clobbered, false if safe\n   */\n  const _isClobbered = function _isClobbered(element) {\n    return element instanceof HTMLFormElement && (typeof element.nodeName !== 'string' || typeof element.textContent !== 'string' || typeof element.removeChild !== 'function' || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== 'function' || typeof element.setAttribute !== 'function' || typeof element.namespaceURI !== 'string' || typeof element.insertBefore !== 'function' || typeof element.hasChildNodes !== 'function');\n  };\n  /**\n   * Checks whether the given object is a DOM node.\n   *\n   * @param value object to check whether it's a DOM node\n   * @return true is object is a DOM node\n   */\n  const _isNode = function _isNode(value) {\n    return typeof Node === 'function' && value instanceof Node;\n  };\n  function _executeHooks(hooks, currentNode, data) {\n    arrayForEach(hooks, hook => {\n      hook.call(DOMPurify, currentNode, data, CONFIG);\n    });\n  }\n  /**\n   * _sanitizeElements\n   *\n   * @protect nodeName\n   * @protect textContent\n   * @protect removeChild\n   * @param currentNode to check for permission to exist\n   * @return true if node was killed, false if left alive\n   */\n  const _sanitizeElements = function _sanitizeElements(currentNode) {\n    let content = null;\n    /* Execute a hook if present */\n    _executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n    /* Check if element is clobbered or can clobber */\n    if (_isClobbered(currentNode)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Now let's check the element's type and name */\n    const tagName = transformCaseFunc(currentNode.nodeName);\n    /* Execute a hook if present */\n    _executeHooks(hooks.uponSanitizeElement, currentNode, {\n      tagName,\n      allowedTags: ALLOWED_TAGS\n    });\n    /* Detect mXSS attempts abusing namespace confusion */\n    if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w!]/g, currentNode.innerHTML) && regExpTest(/<[/\\w!]/g, currentNode.textContent)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Remove any occurrence of processing instructions */\n    if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Remove any kind of possibly harmful comments */\n    if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Remove element if anything forbids its presence */\n    if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n      /* Check if we have a custom element to handle */\n      if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n        if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n          return false;\n        }\n        if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n          return false;\n        }\n      }\n      /* Keep content except for bad-listed elements */\n      if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n        const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n        const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n        if (childNodes && parentNode) {\n          const childCount = childNodes.length;\n          for (let i = childCount - 1; i >= 0; --i) {\n            const childClone = cloneNode(childNodes[i], true);\n            childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n            parentNode.insertBefore(childClone, getNextSibling(currentNode));\n          }\n        }\n      }\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Check whether element has a valid namespace */\n    if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Make sure that older browsers don't get fallback-tag mXSS */\n    if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Sanitize element content to be template-safe */\n    if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n      /* Get the element's text content */\n      content = currentNode.textContent;\n      arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n        content = stringReplace(content, expr, ' ');\n      });\n      if (currentNode.textContent !== content) {\n        arrayPush(DOMPurify.removed, {\n          element: currentNode.cloneNode()\n        });\n        currentNode.textContent = content;\n      }\n    }\n    /* Execute a hook if present */\n    _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n    return false;\n  };\n  /**\n   * _isValidAttribute\n   *\n   * @param lcTag Lowercase tag name of containing element.\n   * @param lcName Lowercase attribute name.\n   * @param value Attribute value.\n   * @return Returns true if `value` is valid, otherwise false.\n   */\n  // eslint-disable-next-line complexity\n  const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n    /* Make sure attribute cannot clobber */\n    if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n      return false;\n    }\n    /* Allow valid data-* attributes: At least one character after \"-\"\n        (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n        XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n        We don't need to check the value; it's always URI safe. */\n    if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n      if (\n      // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n      // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n      // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n      _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) ||\n      // Alternative, second condition checks if it's an `is`-attribute, AND\n      // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n      lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n        return false;\n      }\n      /* Check value is safe. First, is attr inert? If so, is safe */\n    } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {\n      return false;\n    } else ;\n    return true;\n  };\n  /**\n   * _isBasicCustomElement\n   * checks if at least one dash is included in tagName, and it's not the first char\n   * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n   *\n   * @param tagName name of the tag of the node to sanitize\n   * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n   */\n  const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n    return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n  };\n  /**\n   * _sanitizeAttributes\n   *\n   * @protect attributes\n   * @protect nodeName\n   * @protect removeAttribute\n   * @protect setAttribute\n   *\n   * @param currentNode to sanitize\n   */\n  const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n    /* Execute a hook if present */\n    _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n    const {\n      attributes\n    } = currentNode;\n    /* Check if we have attributes; if not we might have a text node */\n    if (!attributes || _isClobbered(currentNode)) {\n      return;\n    }\n    const hookEvent = {\n      attrName: '',\n      attrValue: '',\n      keepAttr: true,\n      allowedAttributes: ALLOWED_ATTR,\n      forceKeepAttr: undefined\n    };\n    let l = attributes.length;\n    /* Go backwards over all attributes; safely remove bad ones */\n    while (l--) {\n      const attr = attributes[l];\n      const {\n        name,\n        namespaceURI,\n        value: attrValue\n      } = attr;\n      const lcName = transformCaseFunc(name);\n      const initValue = attrValue;\n      let value = name === 'value' ? initValue : stringTrim(initValue);\n      /* Execute a hook if present */\n      hookEvent.attrName = lcName;\n      hookEvent.attrValue = value;\n      hookEvent.keepAttr = true;\n      hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n      _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n      value = hookEvent.attrValue;\n      /* Full DOM Clobbering protection via namespace isolation,\n       * Prefix id and name attributes with `user-content-`\n       */\n      if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n        // Remove the attribute with this value\n        _removeAttribute(name, currentNode);\n        // Prefix the value and later re-create the attribute with the sanitized value\n        value = SANITIZE_NAMED_PROPS_PREFIX + value;\n      }\n      /* Work around a security issue with comments inside attributes */\n      if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title)/i, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n      /* Did the hooks approve of the attribute? */\n      if (hookEvent.forceKeepAttr) {\n        continue;\n      }\n      /* Did the hooks approve of the attribute? */\n      if (!hookEvent.keepAttr) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n      /* Work around a security issue in jQuery 3.0 */\n      if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n      /* Sanitize attribute content to be template-safe */\n      if (SAFE_FOR_TEMPLATES) {\n        arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n          value = stringReplace(value, expr, ' ');\n        });\n      }\n      /* Is `value` valid for this attribute? */\n      const lcTag = transformCaseFunc(currentNode.nodeName);\n      if (!_isValidAttribute(lcTag, lcName, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n      /* Handle attributes that require Trusted Types */\n      if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n        if (namespaceURI) ; else {\n          switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n            case 'TrustedHTML':\n              {\n                value = trustedTypesPolicy.createHTML(value);\n                break;\n              }\n            case 'TrustedScriptURL':\n              {\n                value = trustedTypesPolicy.createScriptURL(value);\n                break;\n              }\n          }\n        }\n      }\n      /* Handle invalid data-* attribute set by try-catching it */\n      if (value !== initValue) {\n        try {\n          if (namespaceURI) {\n            currentNode.setAttributeNS(namespaceURI, name, value);\n          } else {\n            /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n            currentNode.setAttribute(name, value);\n          }\n          if (_isClobbered(currentNode)) {\n            _forceRemove(currentNode);\n          } else {\n            arrayPop(DOMPurify.removed);\n          }\n        } catch (_) {\n          _removeAttribute(name, currentNode);\n        }\n      }\n    }\n    /* Execute a hook if present */\n    _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n  };\n  /**\n   * _sanitizeShadowDOM\n   *\n   * @param fragment to iterate over recursively\n   */\n  const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n    let shadowNode = null;\n    const shadowIterator = _createNodeIterator(fragment);\n    /* Execute a hook if present */\n    _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n    while (shadowNode = shadowIterator.nextNode()) {\n      /* Execute a hook if present */\n      _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n      /* Sanitize tags and elements */\n      _sanitizeElements(shadowNode);\n      /* Check attributes next */\n      _sanitizeAttributes(shadowNode);\n      /* Deep shadow DOM detected */\n      if (shadowNode.content instanceof DocumentFragment) {\n        _sanitizeShadowDOM(shadowNode.content);\n      }\n    }\n    /* Execute a hook if present */\n    _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n  };\n  // eslint-disable-next-line complexity\n  DOMPurify.sanitize = function (dirty) {\n    let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    let body = null;\n    let importedNode = null;\n    let currentNode = null;\n    let returnNode = null;\n    /* Make sure we have a string to sanitize.\n      DO NOT return early, as this will return the wrong type if\n      the user has requested a DOM object rather than a string */\n    IS_EMPTY_INPUT = !dirty;\n    if (IS_EMPTY_INPUT) {\n      dirty = '<!-->';\n    }\n    /* Stringify, in case dirty is an object */\n    if (typeof dirty !== 'string' && !_isNode(dirty)) {\n      if (typeof dirty.toString === 'function') {\n        dirty = dirty.toString();\n        if (typeof dirty !== 'string') {\n          throw typeErrorCreate('dirty is not a string, aborting');\n        }\n      } else {\n        throw typeErrorCreate('toString is not a function');\n      }\n    }\n    /* Return dirty HTML if DOMPurify cannot run */\n    if (!DOMPurify.isSupported) {\n      return dirty;\n    }\n    /* Assign config vars */\n    if (!SET_CONFIG) {\n      _parseConfig(cfg);\n    }\n    /* Clean up removed elements */\n    DOMPurify.removed = [];\n    /* Check if dirty is correctly typed for IN_PLACE */\n    if (typeof dirty === 'string') {\n      IN_PLACE = false;\n    }\n    if (IN_PLACE) {\n      /* Do some early pre-sanitization to avoid unsafe root nodes */\n      if (dirty.nodeName) {\n        const tagName = transformCaseFunc(dirty.nodeName);\n        if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n          throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n        }\n      }\n    } else if (dirty instanceof Node) {\n      /* If dirty is a DOM element, append to an empty document to avoid\n         elements being stripped by the parser */\n      body = _initDocument('<!---->');\n      importedNode = body.ownerDocument.importNode(dirty, true);\n      if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n        /* Node is already a body, use as is */\n        body = importedNode;\n      } else if (importedNode.nodeName === 'HTML') {\n        body = importedNode;\n      } else {\n        // eslint-disable-next-line unicorn/prefer-dom-node-append\n        body.appendChild(importedNode);\n      }\n    } else {\n      /* Exit directly if we have nothing to do */\n      if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n      // eslint-disable-next-line unicorn/prefer-includes\n      dirty.indexOf('<') === -1) {\n        return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n      }\n      /* Initialize the document to work on */\n      body = _initDocument(dirty);\n      /* Check we have a DOM node from the data */\n      if (!body) {\n        return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n      }\n    }\n    /* Remove first element node (ours) if FORCE_BODY is set */\n    if (body && FORCE_BODY) {\n      _forceRemove(body.firstChild);\n    }\n    /* Get node iterator */\n    const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n    /* Now start iterating over the created document */\n    while (currentNode = nodeIterator.nextNode()) {\n      /* Sanitize tags and elements */\n      _sanitizeElements(currentNode);\n      /* Check attributes next */\n      _sanitizeAttributes(currentNode);\n      /* Shadow DOM detected, sanitize it */\n      if (currentNode.content instanceof DocumentFragment) {\n        _sanitizeShadowDOM(currentNode.content);\n      }\n    }\n    /* If we sanitized `dirty` in-place, return it. */\n    if (IN_PLACE) {\n      return dirty;\n    }\n    /* Return sanitized string or DOM */\n    if (RETURN_DOM) {\n      if (RETURN_DOM_FRAGMENT) {\n        returnNode = createDocumentFragment.call(body.ownerDocument);\n        while (body.firstChild) {\n          // eslint-disable-next-line unicorn/prefer-dom-node-append\n          returnNode.appendChild(body.firstChild);\n        }\n      } else {\n        returnNode = body;\n      }\n      if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n        /*\n          AdoptNode() is not used because internal state is not reset\n          (e.g. the past names map of a HTMLFormElement), this is safe\n          in theory but we would rather not risk another attack vector.\n          The state that is cloned by importNode() is explicitly defined\n          by the specs.\n        */\n        returnNode = importNode.call(originalDocument, returnNode, true);\n      }\n      return returnNode;\n    }\n    let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n    /* Serialize doctype if allowed */\n    if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n      serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n    }\n    /* Sanitize final string template-safe */\n    if (SAFE_FOR_TEMPLATES) {\n      arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n        serializedHTML = stringReplace(serializedHTML, expr, ' ');\n      });\n    }\n    return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n  };\n  DOMPurify.setConfig = function () {\n    let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    _parseConfig(cfg);\n    SET_CONFIG = true;\n  };\n  DOMPurify.clearConfig = function () {\n    CONFIG = null;\n    SET_CONFIG = false;\n  };\n  DOMPurify.isValidAttribute = function (tag, attr, value) {\n    /* Initialize shared config vars if necessary. */\n    if (!CONFIG) {\n      _parseConfig({});\n    }\n    const lcTag = transformCaseFunc(tag);\n    const lcName = transformCaseFunc(attr);\n    return _isValidAttribute(lcTag, lcName, value);\n  };\n  DOMPurify.addHook = function (entryPoint, hookFunction) {\n    if (typeof hookFunction !== 'function') {\n      return;\n    }\n    arrayPush(hooks[entryPoint], hookFunction);\n  };\n  DOMPurify.removeHook = function (entryPoint, hookFunction) {\n    if (hookFunction !== undefined) {\n      const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n      return index === -1 ? undefined : arraySplice(hooks[entryPoint], index, 1)[0];\n    }\n    return arrayPop(hooks[entryPoint]);\n  };\n  DOMPurify.removeHooks = function (entryPoint) {\n    hooks[entryPoint] = [];\n  };\n  DOMPurify.removeAllHooks = function () {\n    hooks = _createHooksMap();\n  };\n  return DOMPurify;\n}\nvar purify = createDOMPurify();\n\nmodule.exports = purify;\n//# sourceMappingURL=purify.cjs.js.map\n","module.exports = window.DOMPurify || (window.DOMPurify = require('dompurify').default || require('dompurify'));\n","/**\n * marked v16.1.2 - a markdown parser\n * Copyright (c) 2011-2025, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction L(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var O=L();function H(l){O=l}var E={exec:()=>null};function h(l,e=\"\"){let t=typeof l==\"string\"?l:l.source,n={replace:(r,i)=>{let s=typeof i==\"string\"?i:i.source;return s=s.replace(m.caret,\"$1\"),t=t.replace(r,s),n},getRegex:()=>new RegExp(t,e)};return n}var m={codeRemoveIndent:/^(?: {1,4}| {0,3}\\t)/gm,outputLinkReplace:/\\\\([\\[\\]])/g,indentCodeCompensation:/^(\\s+)(?:```)/,beginningSpace:/^\\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\\n/g,tabCharGlobal:/\\t/g,multipleSpaceGlobal:/\\s+/g,blankLine:/^[ \\t]*$/,doubleBlankLine:/\\n[ \\t]*\\n[ \\t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \\t]?/gm,listReplaceTabs:/^\\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\\[[ xX]\\] /,listReplaceTask:/^\\[[ xX]\\] +/,anyLine:/\\n.*\\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\\||\\| *$/g,tableRowBlankLine:/\\n[ \\t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\\s|>)/i,endPreScriptTag:/^<\\/(pre|code|kbd|script)(\\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,unicodeAlphaNumeric:/[\\p{L}\\p{N}]/u,escapeTest:/[&<>\"']/,escapeReplace:/[&<>\"']/g,escapeTestNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,escapeReplaceNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,unescapeTest:/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,caret:/(^|[^\\[])\\^/g,percentDecode:/%25/g,findPipe:/\\|/g,splitPipe:/ \\|/,slashPipe:/\\\\\\|/g,carriageReturn:/\\r\\n|\\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\\S*/,endingNewline:/\\n$/,listItemRegex:l=>new RegExp(`^( {0,3}${l})((?:[\t ][^\\\\n]*)?(?:\\\\n|$))`),nextBulletRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \t][^\\\\n]*)?(?:\\\\n|$))`),hrRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),fencesBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:\\`\\`\\`|~~~)`),headingBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}#`),htmlBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}<(?:[a-z].*>|!--)`,\"i\")},xe=/^(?:[ \\t]*(?:\\n|$))+/,be=/^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/,Re=/^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,C=/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,Oe=/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,j=/(?:[*+-]|\\d{1,9}[.)])/,se=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,ie=h(se).replace(/bull/g,j).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/\\|table/g,\"\").getRegex(),Te=h(se).replace(/bull/g,j).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/table/g,/ {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/).getRegex(),F=/^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,we=/^[^\\n]+/,Q=/(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/,ye=h(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace(\"label\",Q).replace(\"title\",/(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/).getRegex(),Pe=h(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/).replace(/bull/g,j).getRegex(),v=\"address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul\",U=/<!--(?:-?>|[\\s\\S]*?(?:-->|$))/,Se=h(\"^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$))\",\"i\").replace(\"comment\",U).replace(\"tag\",v).replace(\"attribute\",/ +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex(),oe=h(F).replace(\"hr\",C).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex(),$e=h(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace(\"paragraph\",oe).getRegex(),K={blockquote:$e,code:be,def:ye,fences:Re,heading:Oe,hr:C,html:Se,lheading:ie,list:Pe,newline:xe,paragraph:oe,table:E,text:we},re=h(\"^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\").replace(\"hr\",C).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"blockquote\",\" {0,3}>\").replace(\"code\",\"(?: {4}| {0,3}\t)[^\\\\n]\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex(),_e={...K,lheading:Te,table:re,paragraph:h(F).replace(\"hr\",C).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"table\",re).replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex()},Le={...K,html:h(`^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\\\s[^'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`).replace(\"comment\",U).replace(/tag/g,\"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b\").getRegex(),def:/^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,heading:/^(#{1,6})(.*)(?:\\n+|$)/,fences:E,lheading:/^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,paragraph:h(F).replace(\"hr\",C).replace(\"heading\",` *#{1,6} *[^\n]`).replace(\"lheading\",ie).replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"|fences\",\"\").replace(\"|list\",\"\").replace(\"|html\",\"\").replace(\"|tag\",\"\").getRegex()},Me=/^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,ze=/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,ae=/^( {2,}|\\\\)\\n(?!\\s*$)/,Ae=/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,D=/[\\p{P}\\p{S}]/u,W=/[\\s\\p{P}\\p{S}]/u,le=/[^\\s\\p{P}\\p{S}]/u,Ee=h(/^((?![*_])punctSpace)/,\"u\").replace(/punctSpace/g,W).getRegex(),ue=/(?!~)[\\p{P}\\p{S}]/u,Ce=/(?!~)[\\s\\p{P}\\p{S}]/u,Ie=/(?:[^\\s\\p{P}\\p{S}]|~)/u,Be=/\\[[^[\\]]*?\\]\\((?:\\\\.|[^\\\\\\(\\)]|\\((?:\\\\.|[^\\\\\\(\\)])*\\))*\\)|`[^`]*?`|<(?! )[^<>]*?>/g,pe=/^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/,qe=h(pe,\"u\").replace(/punct/g,D).getRegex(),ve=h(pe,\"u\").replace(/punct/g,ue).getRegex(),ce=\"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)\",De=h(ce,\"gu\").replace(/notPunctSpace/g,le).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),Ze=h(ce,\"gu\").replace(/notPunctSpace/g,Ie).replace(/punctSpace/g,Ce).replace(/punct/g,ue).getRegex(),Ge=h(\"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)\",\"gu\").replace(/notPunctSpace/g,le).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),He=h(/\\\\(punct)/,\"gu\").replace(/punct/g,D).getRegex(),Ne=h(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/).replace(\"scheme\",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(\"email\",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),je=h(U).replace(\"(?:-->|$)\",\"-->\").getRegex(),Fe=h(\"^comment|^</[a-zA-Z][\\\\w:-]*\\\\s*>|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\").replace(\"comment\",je).replace(\"attribute\",/\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/).getRegex(),q=/(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/,Qe=h(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/).replace(\"label\",q).replace(\"href\",/<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/).replace(\"title\",/\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex(),he=h(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\",q).replace(\"ref\",Q).getRegex(),de=h(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\",Q).getRegex(),Ue=h(\"reflink|nolink(?!\\\\()\",\"g\").replace(\"reflink\",he).replace(\"nolink\",de).getRegex(),X={_backpedal:E,anyPunctuation:He,autolink:Ne,blockSkip:Be,br:ae,code:ze,del:E,emStrongLDelim:qe,emStrongRDelimAst:De,emStrongRDelimUnd:Ge,escape:Me,link:Qe,nolink:de,punctuation:Ee,reflink:he,reflinkSearch:Ue,tag:Fe,text:Ae,url:E},Ke={...X,link:h(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\",q).getRegex(),reflink:h(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\",q).getRegex()},N={...X,emStrongRDelimAst:Ze,emStrongLDelim:ve,url:h(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\"i\").replace(\"email\",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,del:/^(~~?)(?=[^\\s~])((?:\\\\.|[^\\\\])*?(?:\\\\.|[^\\s~\\\\]))\\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/},We={...N,br:h(ae).replace(\"{2,}\",\"*\").getRegex(),text:h(N.text).replace(\"\\\\b_\",\"\\\\b_| {2,}\\\\n\").replace(/\\{2,\\}/g,\"*\").getRegex()},I={normal:K,gfm:_e,pedantic:Le},M={normal:X,gfm:N,breaks:We,pedantic:Ke};var Xe={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"},ke=l=>Xe[l];function w(l,e){if(e){if(m.escapeTest.test(l))return l.replace(m.escapeReplace,ke)}else if(m.escapeTestNoEncode.test(l))return l.replace(m.escapeReplaceNoEncode,ke);return l}function J(l){try{l=encodeURI(l).replace(m.percentDecode,\"%\")}catch{return null}return l}function V(l,e){let t=l.replace(m.findPipe,(i,s,o)=>{let a=!1,u=s;for(;--u>=0&&o[u]===\"\\\\\";)a=!a;return a?\"|\":\" |\"}),n=t.split(m.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length<e;)n.push(\"\");for(;r<n.length;r++)n[r]=n[r].trim().replace(m.slashPipe,\"|\");return n}function z(l,e,t){let n=l.length;if(n===0)return\"\";let r=0;for(;r<n;){let i=l.charAt(n-r-1);if(i===e&&!t)r++;else if(i!==e&&t)r++;else break}return l.slice(0,n-r)}function ge(l,e){if(l.indexOf(e[1])===-1)return-1;let t=0;for(let n=0;n<l.length;n++)if(l[n]===\"\\\\\")n++;else if(l[n]===e[0])t++;else if(l[n]===e[1]&&(t--,t<0))return n;return t>0?-2:-1}function fe(l,e,t,n,r){let i=e.href,s=e.title||null,o=l[1].replace(r.other.outputLinkReplace,\"$1\");n.state.inLink=!0;let a={type:l[0].charAt(0)===\"!\"?\"image\":\"link\",raw:t,href:i,title:s,text:o,tokens:n.inlineTokens(o)};return n.state.inLink=!1,a}function Je(l,e,t){let n=l.match(t.other.indentCodeCompensation);if(n===null)return e;let r=n[1];return e.split(`\n`).map(i=>{let s=i.match(t.other.beginningSpace);if(s===null)return i;let[o]=s;return o.length>=r.length?i.slice(r.length):i}).join(`\n`)}var y=class{options;rules;lexer;constructor(e){this.options=e||O}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:\"space\",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=t[0].replace(this.rules.other.codeRemoveIndent,\"\");return{type:\"code\",raw:t[0],codeBlockStyle:\"indented\",text:this.options.pedantic?n:z(n,`\n`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],r=Je(n,t[3]||\"\",this.rules);return{type:\"code\",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,\"$1\"):t[2],text:r}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let r=z(n,\"#\");(this.options.pedantic||!r||this.rules.other.endingSpaceChar.test(r))&&(n=r.trim())}return{type:\"heading\",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:\"hr\",raw:z(t[0],`\n`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=z(t[0],`\n`).split(`\n`),r=\"\",i=\"\",s=[];for(;n.length>0;){let o=!1,a=[],u;for(u=0;u<n.length;u++)if(this.rules.other.blockquoteStart.test(n[u]))a.push(n[u]),o=!0;else if(!o)a.push(n[u]);else break;n=n.slice(u);let p=a.join(`\n`),c=p.replace(this.rules.other.blockquoteSetextReplace,`\n    $1`).replace(this.rules.other.blockquoteSetextReplace2,\"\");r=r?`${r}\n${p}`:p,i=i?`${i}\n${c}`:c;let f=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(c,s,!0),this.lexer.state.top=f,n.length===0)break;let k=s.at(-1);if(k?.type===\"code\")break;if(k?.type===\"blockquote\"){let x=k,g=x.raw+`\n`+n.join(`\n`),T=this.blockquote(g);s[s.length-1]=T,r=r.substring(0,r.length-x.raw.length)+T.raw,i=i.substring(0,i.length-x.text.length)+T.text;break}else if(k?.type===\"list\"){let x=k,g=x.raw+`\n`+n.join(`\n`),T=this.list(g);s[s.length-1]=T,r=r.substring(0,r.length-k.raw.length)+T.raw,i=i.substring(0,i.length-x.raw.length)+T.raw,n=g.substring(s.at(-1).raw.length).split(`\n`);continue}}return{type:\"blockquote\",raw:r,tokens:s,text:i}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),r=n.length>1,i={type:\"list\",raw:\"\",ordered:r,start:r?+n.slice(0,-1):\"\",loose:!1,items:[]};n=r?`\\\\d{1,9}\\\\${n.slice(-1)}`:`\\\\${n}`,this.options.pedantic&&(n=r?n:\"[*+-]\");let s=this.rules.other.listItemRegex(n),o=!1;for(;e;){let u=!1,p=\"\",c=\"\";if(!(t=s.exec(e))||this.rules.block.hr.test(e))break;p=t[0],e=e.substring(p.length);let f=t[2].split(`\n`,1)[0].replace(this.rules.other.listReplaceTabs,Z=>\" \".repeat(3*Z.length)),k=e.split(`\n`,1)[0],x=!f.trim(),g=0;if(this.options.pedantic?(g=2,c=f.trimStart()):x?g=t[1].length+1:(g=t[2].search(this.rules.other.nonSpaceChar),g=g>4?1:g,c=f.slice(g),g+=t[1].length),x&&this.rules.other.blankLine.test(k)&&(p+=k+`\n`,e=e.substring(k.length+1),u=!0),!u){let Z=this.rules.other.nextBulletRegex(g),ee=this.rules.other.hrRegex(g),te=this.rules.other.fencesBeginRegex(g),ne=this.rules.other.headingBeginRegex(g),me=this.rules.other.htmlBeginRegex(g);for(;e;){let G=e.split(`\n`,1)[0],A;if(k=G,this.options.pedantic?(k=k.replace(this.rules.other.listReplaceNesting,\"  \"),A=k):A=k.replace(this.rules.other.tabCharGlobal,\"    \"),te.test(k)||ne.test(k)||me.test(k)||Z.test(k)||ee.test(k))break;if(A.search(this.rules.other.nonSpaceChar)>=g||!k.trim())c+=`\n`+A.slice(g);else{if(x||f.replace(this.rules.other.tabCharGlobal,\"    \").search(this.rules.other.nonSpaceChar)>=4||te.test(f)||ne.test(f)||ee.test(f))break;c+=`\n`+k}!x&&!k.trim()&&(x=!0),p+=G+`\n`,e=e.substring(G.length+1),f=A.slice(g)}}i.loose||(o?i.loose=!0:this.rules.other.doubleBlankLine.test(p)&&(o=!0));let T=null,Y;this.options.gfm&&(T=this.rules.other.listIsTask.exec(c),T&&(Y=T[0]!==\"[ ] \",c=c.replace(this.rules.other.listReplaceTask,\"\"))),i.items.push({type:\"list_item\",raw:p,task:!!T,checked:Y,loose:!1,text:c,tokens:[]}),i.raw+=p}let a=i.items.at(-1);if(a)a.raw=a.raw.trimEnd(),a.text=a.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let u=0;u<i.items.length;u++)if(this.lexer.state.top=!1,i.items[u].tokens=this.lexer.blockTokens(i.items[u].text,[]),!i.loose){let p=i.items[u].tokens.filter(f=>f.type===\"space\"),c=p.length>0&&p.some(f=>this.rules.other.anyLine.test(f.raw));i.loose=c}if(i.loose)for(let u=0;u<i.items.length;u++)i.items[u].loose=!0;return i}}html(e){let t=this.rules.block.html.exec(e);if(t)return{type:\"html\",block:!0,raw:t[0],pre:t[1]===\"pre\"||t[1]===\"script\"||t[1]===\"style\",text:t[0]}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal,\" \"),r=t[2]?t[2].replace(this.rules.other.hrefBrackets,\"$1\").replace(this.rules.inline.anyPunctuation,\"$1\"):\"\",i=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,\"$1\"):t[3];return{type:\"def\",tag:n,raw:t[0],href:r,title:i}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=V(t[1]),r=t[2].replace(this.rules.other.tableAlignChars,\"\").split(\"|\"),i=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,\"\").split(`\n`):[],s={type:\"table\",raw:t[0],header:[],align:[],rows:[]};if(n.length===r.length){for(let o of r)this.rules.other.tableAlignRight.test(o)?s.align.push(\"right\"):this.rules.other.tableAlignCenter.test(o)?s.align.push(\"center\"):this.rules.other.tableAlignLeft.test(o)?s.align.push(\"left\"):s.align.push(null);for(let o=0;o<n.length;o++)s.header.push({text:n[o],tokens:this.lexer.inline(n[o]),header:!0,align:s.align[o]});for(let o of i)s.rows.push(V(o,s.header.length).map((a,u)=>({text:a,tokens:this.lexer.inline(a),header:!1,align:s.align[u]})));return s}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:\"heading\",raw:t[0],depth:t[2].charAt(0)===\"=\"?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===`\n`?t[1].slice(0,-1):t[1];return{type:\"paragraph\",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:\"text\",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:\"escape\",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:\"html\",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let s=z(n.slice(0,-1),\"\\\\\");if((n.length-s.length)%2===0)return}else{let s=ge(t[2],\"()\");if(s===-2)return;if(s>-1){let a=(t[0].indexOf(\"!\")===0?5:4)+t[1].length+s;t[2]=t[2].substring(0,s),t[0]=t[0].substring(0,a).trim(),t[3]=\"\"}}let r=t[2],i=\"\";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(r);s&&(r=s[1],i=s[3])}else i=t[3]?t[3].slice(1,-1):\"\";return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?r=r.slice(1):r=r.slice(1,-1)),fe(t,{href:r&&r.replace(this.rules.inline.anyPunctuation,\"$1\"),title:i&&i.replace(this.rules.inline.anyPunctuation,\"$1\")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let r=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal,\" \"),i=t[r.toLowerCase()];if(!i){let s=n[0].charAt(0);return{type:\"text\",raw:s,text:s}}return fe(n,i,n[0],this.lexer,this.rules)}}emStrong(e,t,n=\"\"){let r=this.rules.inline.emStrongLDelim.exec(e);if(!r||r[3]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(r[1]||r[2]||\"\")||!n||this.rules.inline.punctuation.exec(n)){let s=[...r[0]].length-1,o,a,u=s,p=0,c=r[0][0]===\"*\"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+s);(r=c.exec(t))!=null;){if(o=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!o)continue;if(a=[...o].length,r[3]||r[4]){u+=a;continue}else if((r[5]||r[6])&&s%3&&!((s+a)%3)){p+=a;continue}if(u-=a,u>0)continue;a=Math.min(a,a+u+p);let f=[...r[0]][0].length,k=e.slice(0,s+r.index+f+a);if(Math.min(s,a)%2){let g=k.slice(1,-1);return{type:\"em\",raw:k,text:g,tokens:this.lexer.inlineTokens(g)}}let x=k.slice(2,-2);return{type:\"strong\",raw:k,text:x,tokens:this.lexer.inlineTokens(x)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal,\" \"),r=this.rules.other.nonSpaceChar.test(n),i=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return r&&i&&(n=n.substring(1,n.length-1)),{type:\"codespan\",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:\"br\",raw:t[0]}}del(e){let t=this.rules.inline.del.exec(e);if(t)return{type:\"del\",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,r;return t[2]===\"@\"?(n=t[1],r=\"mailto:\"+n):(n=t[1],r=n),{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,r;if(t[2]===\"@\")n=t[0],r=\"mailto:\"+n;else{let i;do i=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??\"\";while(i!==t[0]);n=t[0],t[1]===\"www.\"?r=\"http://\"+t[0]:r=t[0]}return{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:\"text\",raw:t[0],text:t[0],escaped:n}}}};var b=class l{tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||O,this.options.tokenizer=this.options.tokenizer||new y,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let t={other:m,block:I.normal,inline:M.normal};this.options.pedantic?(t.block=I.pedantic,t.inline=M.pedantic):this.options.gfm&&(t.block=I.gfm,this.options.breaks?t.inline=M.breaks:t.inline=M.gfm),this.tokenizer.rules=t}static get rules(){return{block:I,inline:M}}static lex(e,t){return new l(t).lex(e)}static lexInline(e,t){return new l(t).inlineTokens(e)}lex(e){e=e.replace(m.carriageReturn,`\n`),this.blockTokens(e,this.tokens);for(let t=0;t<this.inlineQueue.length;t++){let n=this.inlineQueue[t];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){for(this.options.pedantic&&(e=e.replace(m.tabCharGlobal,\"    \").replace(m.spaceLine,\"\"));e;){let r;if(this.options.extensions?.block?.some(s=>(r=s.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let s=t.at(-1);r.raw.length===1&&s!==void 0?s.raw+=`\n`:t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(r=this.tokenizer.fences(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.heading(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.hr(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.blockquote(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.list(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.html(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.def(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title});continue}if(r=this.tokenizer.table(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.lheading(e)){e=e.substring(r.raw.length),t.push(r);continue}let i=e;if(this.options.extensions?.startBlock){let s=1/0,o=e.slice(1),a;this.options.extensions.startBlock.forEach(u=>{a=u.call({lexer:this},o),typeof a==\"number\"&&a>=0&&(s=Math.min(s,a))}),s<1/0&&s>=0&&(i=e.substring(0,s+1))}if(this.state.top&&(r=this.tokenizer.paragraph(i))){let s=t.at(-1);n&&s?.type===\"paragraph\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r),n=i.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(e){let s=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n=e,r=null;if(this.tokens.links){let o=Object.keys(this.tokens.links);if(o.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)o.includes(r[0].slice(r[0].lastIndexOf(\"[\")+1,-1))&&(n=n.slice(0,r.index)+\"[\"+\"a\".repeat(r[0].length-2)+\"]\"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,r.index)+\"++\"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;(r=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)n=n.slice(0,r.index)+\"[\"+\"a\".repeat(r[0].length-2)+\"]\"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);let i=!1,s=\"\";for(;e;){i||(s=\"\"),i=!1;let o;if(this.options.extensions?.inline?.some(u=>(o=u.call({lexer:this},e,t))?(e=e.substring(o.raw.length),t.push(o),!0):!1))continue;if(o=this.tokenizer.escape(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.tag(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.link(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);let u=t.at(-1);o.type===\"text\"&&u?.type===\"text\"?(u.raw+=o.raw,u.text+=o.text):t.push(o);continue}if(o=this.tokenizer.emStrong(e,n,s)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.codespan(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.br(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.del(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.autolink(e)){e=e.substring(o.raw.length),t.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(e))){e=e.substring(o.raw.length),t.push(o);continue}let a=e;if(this.options.extensions?.startInline){let u=1/0,p=e.slice(1),c;this.options.extensions.startInline.forEach(f=>{c=f.call({lexer:this},p),typeof c==\"number\"&&c>=0&&(u=Math.min(u,c))}),u<1/0&&u>=0&&(a=e.substring(0,u+1))}if(o=this.tokenizer.inlineText(a)){e=e.substring(o.raw.length),o.raw.slice(-1)!==\"_\"&&(s=o.raw.slice(-1)),i=!0;let u=t.at(-1);u?.type===\"text\"?(u.raw+=o.raw,u.text+=o.text):t.push(o);continue}if(e){let u=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(u);break}else throw new Error(u)}}return t}};var P=class{options;parser;constructor(e){this.options=e||O}space(e){return\"\"}code({text:e,lang:t,escaped:n}){let r=(t||\"\").match(m.notSpaceStart)?.[0],i=e.replace(m.endingNewline,\"\")+`\n`;return r?'<pre><code class=\"language-'+w(r)+'\">'+(n?i:w(i,!0))+`</code></pre>\n`:\"<pre><code>\"+(n?i:w(i,!0))+`</code></pre>\n`}blockquote({tokens:e}){return`<blockquote>\n${this.parser.parse(e)}</blockquote>\n`}html({text:e}){return e}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>\n`}hr(e){return`<hr>\n`}list(e){let t=e.ordered,n=e.start,r=\"\";for(let o=0;o<e.items.length;o++){let a=e.items[o];r+=this.listitem(a)}let i=t?\"ol\":\"ul\",s=t&&n!==1?' start=\"'+n+'\"':\"\";return\"<\"+i+s+`>\n`+r+\"</\"+i+`>\n`}listitem(e){let t=\"\";if(e.task){let n=this.checkbox({checked:!!e.checked});e.loose?e.tokens[0]?.type===\"paragraph\"?(e.tokens[0].text=n+\" \"+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&e.tokens[0].tokens[0].type===\"text\"&&(e.tokens[0].tokens[0].text=n+\" \"+w(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=!0)):e.tokens.unshift({type:\"text\",raw:n+\" \",text:n+\" \",escaped:!0}):t+=n+\" \"}return t+=this.parser.parse(e.tokens,!!e.loose),`<li>${t}</li>\n`}checkbox({checked:e}){return\"<input \"+(e?'checked=\"\" ':\"\")+'disabled=\"\" type=\"checkbox\">'}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>\n`}table(e){let t=\"\",n=\"\";for(let i=0;i<e.header.length;i++)n+=this.tablecell(e.header[i]);t+=this.tablerow({text:n});let r=\"\";for(let i=0;i<e.rows.length;i++){let s=e.rows[i];n=\"\";for(let o=0;o<s.length;o++)n+=this.tablecell(s[o]);r+=this.tablerow({text:n})}return r&&(r=`<tbody>${r}</tbody>`),`<table>\n<thead>\n`+t+`</thead>\n`+r+`</table>\n`}tablerow({text:e}){return`<tr>\n${e}</tr>\n`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?\"th\":\"td\";return(e.align?`<${n} align=\"${e.align}\">`:`<${n}>`)+t+`</${n}>\n`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${w(e,!0)}</code>`}br(e){return\"<br>\"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=J(e);if(i===null)return r;e=i;let s='<a href=\"'+e+'\"';return t&&(s+=' title=\"'+w(t)+'\"'),s+=\">\"+r+\"</a>\",s}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=J(e);if(i===null)return w(n);e=i;let s=`<img src=\"${e}\" alt=\"${n}\"`;return t&&(s+=` title=\"${w(t)}\"`),s+=\">\",s}text(e){return\"tokens\"in e&&e.tokens?this.parser.parseInline(e.tokens):\"escaped\"in e&&e.escaped?e.text:w(e.text)}};var S=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return\"\"+e}image({text:e}){return\"\"+e}br(){return\"\"}};var R=class l{options;renderer;textRenderer;constructor(e){this.options=e||O,this.options.renderer=this.options.renderer||new P,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new S}static parse(e,t){return new l(t).parse(e)}static parseInline(e,t){return new l(t).parseInline(e)}parse(e,t=!0){let n=\"\";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let o=i,a=this.options.extensions.renderers[o.type].call({parser:this},o);if(a!==!1||![\"space\",\"hr\",\"heading\",\"code\",\"table\",\"blockquote\",\"list\",\"html\",\"paragraph\",\"text\"].includes(o.type)){n+=a||\"\";continue}}let s=i;switch(s.type){case\"space\":{n+=this.renderer.space(s);continue}case\"hr\":{n+=this.renderer.hr(s);continue}case\"heading\":{n+=this.renderer.heading(s);continue}case\"code\":{n+=this.renderer.code(s);continue}case\"table\":{n+=this.renderer.table(s);continue}case\"blockquote\":{n+=this.renderer.blockquote(s);continue}case\"list\":{n+=this.renderer.list(s);continue}case\"html\":{n+=this.renderer.html(s);continue}case\"paragraph\":{n+=this.renderer.paragraph(s);continue}case\"text\":{let o=s,a=this.renderer.text(o);for(;r+1<e.length&&e[r+1].type===\"text\";)o=e[++r],a+=`\n`+this.renderer.text(o);t?n+=this.renderer.paragraph({type:\"paragraph\",raw:a,text:a,tokens:[{type:\"text\",raw:a,text:a,escaped:!0}]}):n+=a;continue}default:{let o='Token with \"'+s.type+'\" type was not found.';if(this.options.silent)return console.error(o),\"\";throw new Error(o)}}}return n}parseInline(e,t=this.renderer){let n=\"\";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let o=this.options.extensions.renderers[i.type].call({parser:this},i);if(o!==!1||![\"escape\",\"html\",\"link\",\"image\",\"strong\",\"em\",\"codespan\",\"br\",\"del\",\"text\"].includes(i.type)){n+=o||\"\";continue}}let s=i;switch(s.type){case\"escape\":{n+=t.text(s);break}case\"html\":{n+=t.html(s);break}case\"link\":{n+=t.link(s);break}case\"image\":{n+=t.image(s);break}case\"strong\":{n+=t.strong(s);break}case\"em\":{n+=t.em(s);break}case\"codespan\":{n+=t.codespan(s);break}case\"br\":{n+=t.br(s);break}case\"del\":{n+=t.del(s);break}case\"text\":{n+=t.text(s);break}default:{let o='Token with \"'+s.type+'\" type was not found.';if(this.options.silent)return console.error(o),\"\";throw new Error(o)}}}return n}};var $=class{options;block;constructor(e){this.options=e||O}static passThroughHooks=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}provideLexer(){return this.block?b.lex:b.lexInline}provideParser(){return this.block?R.parse:R.parseInline}};var B=class{defaults=L();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=R;Renderer=P;TextRenderer=S;Lexer=b;Tokenizer=y;Hooks=$;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case\"table\":{let i=r;for(let s of i.header)n=n.concat(this.walkTokens(s.tokens,t));for(let s of i.rows)for(let o of s)n=n.concat(this.walkTokens(o.tokens,t));break}case\"list\":{let i=r;n=n.concat(this.walkTokens(i.items,t));break}default:{let i=r;this.defaults.extensions?.childTokens?.[i.type]?this.defaults.extensions.childTokens[i.type].forEach(s=>{let o=i[s].flat(1/0);n=n.concat(this.walkTokens(o,t))}):i.tokens&&(n=n.concat(this.walkTokens(i.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let r={...n};if(r.async=this.defaults.async||r.async||!1,n.extensions&&(n.extensions.forEach(i=>{if(!i.name)throw new Error(\"extension name required\");if(\"renderer\"in i){let s=t.renderers[i.name];s?t.renderers[i.name]=function(...o){let a=i.renderer.apply(this,o);return a===!1&&(a=s.apply(this,o)),a}:t.renderers[i.name]=i.renderer}if(\"tokenizer\"in i){if(!i.level||i.level!==\"block\"&&i.level!==\"inline\")throw new Error(\"extension level must be 'block' or 'inline'\");let s=t[i.level];s?s.unshift(i.tokenizer):t[i.level]=[i.tokenizer],i.start&&(i.level===\"block\"?t.startBlock?t.startBlock.push(i.start):t.startBlock=[i.start]:i.level===\"inline\"&&(t.startInline?t.startInline.push(i.start):t.startInline=[i.start]))}\"childTokens\"in i&&i.childTokens&&(t.childTokens[i.name]=i.childTokens)}),r.extensions=t),n.renderer){let i=this.defaults.renderer||new P(this.defaults);for(let s in n.renderer){if(!(s in i))throw new Error(`renderer '${s}' does not exist`);if([\"options\",\"parser\"].includes(s))continue;let o=s,a=n.renderer[o],u=i[o];i[o]=(...p)=>{let c=a.apply(i,p);return c===!1&&(c=u.apply(i,p)),c||\"\"}}r.renderer=i}if(n.tokenizer){let i=this.defaults.tokenizer||new y(this.defaults);for(let s in n.tokenizer){if(!(s in i))throw new Error(`tokenizer '${s}' does not exist`);if([\"options\",\"rules\",\"lexer\"].includes(s))continue;let o=s,a=n.tokenizer[o],u=i[o];i[o]=(...p)=>{let c=a.apply(i,p);return c===!1&&(c=u.apply(i,p)),c}}r.tokenizer=i}if(n.hooks){let i=this.defaults.hooks||new $;for(let s in n.hooks){if(!(s in i))throw new Error(`hook '${s}' does not exist`);if([\"options\",\"block\"].includes(s))continue;let o=s,a=n.hooks[o],u=i[o];$.passThroughHooks.has(s)?i[o]=p=>{if(this.defaults.async)return Promise.resolve(a.call(i,p)).then(f=>u.call(i,f));let c=a.call(i,p);return u.call(i,c)}:i[o]=(...p)=>{let c=a.apply(i,p);return c===!1&&(c=u.apply(i,p)),c}}r.hooks=i}if(n.walkTokens){let i=this.defaults.walkTokens,s=n.walkTokens;r.walkTokens=function(o){let a=[];return a.push(s.call(this,o)),i&&(a=a.concat(i.call(this,o))),a}}this.defaults={...this.defaults,...r}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return b.lex(e,t??this.defaults)}parser(e,t){return R.parse(e,t??this.defaults)}parseMarkdown(e){return(n,r)=>{let i={...r},s={...this.defaults,...i},o=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&i.async===!1)return o(new Error(\"marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.\"));if(typeof n>\"u\"||n===null)return o(new Error(\"marked(): input parameter is undefined or null\"));if(typeof n!=\"string\")return o(new Error(\"marked(): input parameter is of type \"+Object.prototype.toString.call(n)+\", string expected\"));s.hooks&&(s.hooks.options=s,s.hooks.block=e);let a=s.hooks?s.hooks.provideLexer():e?b.lex:b.lexInline,u=s.hooks?s.hooks.provideParser():e?R.parse:R.parseInline;if(s.async)return Promise.resolve(s.hooks?s.hooks.preprocess(n):n).then(p=>a(p,s)).then(p=>s.hooks?s.hooks.processAllTokens(p):p).then(p=>s.walkTokens?Promise.all(this.walkTokens(p,s.walkTokens)).then(()=>p):p).then(p=>u(p,s)).then(p=>s.hooks?s.hooks.postprocess(p):p).catch(o);try{s.hooks&&(n=s.hooks.preprocess(n));let p=a(n,s);s.hooks&&(p=s.hooks.processAllTokens(p)),s.walkTokens&&this.walkTokens(p,s.walkTokens);let c=u(p,s);return s.hooks&&(c=s.hooks.postprocess(c)),c}catch(p){return o(p)}}}onError(e,t){return n=>{if(n.message+=`\nPlease report this to https://github.com/markedjs/marked.`,e){let r=\"<p>An error occurred:</p><pre>\"+w(n.message+\"\",!0)+\"</pre>\";return t?Promise.resolve(r):r}if(t)return Promise.reject(n);throw n}}};var _=new B;function d(l,e){return _.parse(l,e)}d.options=d.setOptions=function(l){return _.setOptions(l),d.defaults=_.defaults,H(d.defaults),d};d.getDefaults=L;d.defaults=O;d.use=function(...l){return _.use(...l),d.defaults=_.defaults,H(d.defaults),d};d.walkTokens=function(l,e){return _.walkTokens(l,e)};d.parseInline=_.parseInline;d.Parser=R;d.parser=R.parse;d.Renderer=P;d.TextRenderer=S;d.Lexer=b;d.lexer=b.lex;d.Tokenizer=y;d.Hooks=$;d.parse=d;var Dt=d.options,Zt=d.setOptions,Gt=d.use,Ht=d.walkTokens,Nt=d.parseInline,jt=d,Ft=R.parse,Qt=b.lex;export{$ as Hooks,b as Lexer,B as Marked,R as Parser,P as Renderer,S as TextRenderer,y as Tokenizer,O as defaults,L as getDefaults,Qt as lexer,d as marked,Dt as options,jt as parse,Nt as parseInline,Ft as parser,Zt as setOptions,Gt as use,Ht as walkTokens};\n//# sourceMappingURL=marked.esm.js.map\n","import { LocalStorage } from '@sveltia/utils/storage';\nimport equal from 'fast-deep-equal';\nimport { get, writable } from 'svelte/store';\nimport { locale as appLocale, locales as appLocales } from 'svelte-i18n';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import { Preferences } from '$lib/types/private';\n */\n\nconst STORAGE_KEY = 'sveltia-cms.prefs';\n\n/**\n * @type {Writable<{ type: string } | undefined>}\n */\nexport const prefsError = writable();\n/**\n * @type {Writable<Preferences>}\n */\nexport const prefs = writable({}, (set) => {\n  prefsError.set(undefined);\n\n  (async () => {\n    try {\n      const _prefs = (await LocalStorage.get(STORAGE_KEY)) ?? {};\n\n      _prefs.apiKeys ??= {};\n      _prefs.useDraftBackup ??= true;\n      _prefs.closeOnSave ??= true;\n      _prefs.closeWithEscape ??= true;\n      _prefs.underlineLinks ??= true;\n      _prefs.beta ??= false;\n      _prefs.devModeEnabled ??= false;\n      _prefs.defaultTranslationService ??= 'google';\n      set(_prefs);\n    } catch {\n      prefsError.set({ type: 'permission_denied' });\n    }\n  })();\n});\n\nprefs.subscribe((newPrefs) => {\n  if (!newPrefs || !Object.keys(newPrefs).length) {\n    return;\n  }\n\n  (async () => {\n    try {\n      if (!equal(newPrefs, await LocalStorage.get(STORAGE_KEY))) {\n        await LocalStorage.set(STORAGE_KEY, newPrefs);\n      }\n    } catch {\n      //\n    }\n  })();\n\n  const {\n    locale,\n    theme,\n    underlineLinks = true,\n    beta = false,\n    devModeEnabled: devMode = false,\n  } = newPrefs;\n\n  if (locale && get(appLocales).includes(locale)) {\n    appLocale.set(locale);\n  }\n\n  const autoTheming = !theme || theme === 'auto';\n  const autoTheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n\n  Object.assign(document.documentElement.dataset, {\n    theme: autoTheming ? autoTheme : theme,\n    autoTheming,\n    underlineLinks,\n    beta,\n    devMode,\n  });\n});\n","import equal from 'fast-deep-equal';\nimport { derived, get, writable } from 'svelte/store';\n\nimport { prefs } from '$lib/services/user/prefs';\n\n/**\n * @import { Readable, Writable } from 'svelte/store';\n * @import { EntryDraft } from '$lib/types/private';\n */\n\n/**\n * @type {Writable<EntryDraft | null | undefined>}\n */\nexport const entryDraft = writable();\n/**\n * Whether to enable automatic i18n duplication in proxies in {@link entryDraft}. This can be\n * temporarily disabled for performance reasons when making large changes to the values.\n */\nexport const i18nAutoDupEnabled = writable(true);\n\n/**\n * Whether the current {@link entryDraft} has been modified.\n * @type {Readable<boolean>}\n */\nexport const entryDraftModified = derived([entryDraft], ([draft]) => {\n  if (!draft) {\n    return false;\n  }\n\n  const {\n    originalLocales,\n    currentLocales,\n    originalSlugs,\n    currentSlugs,\n    originalValues,\n    currentValues,\n  } = draft;\n\n  return (\n    !equal(originalLocales, currentLocales) ||\n    !equal(originalSlugs, currentSlugs) ||\n    !equal(originalValues, currentValues)\n  );\n});\n\nentryDraft.subscribe((draft) => {\n  if (get(prefs).devModeEnabled) {\n    // eslint-disable-next-line no-console\n    console.info('entryDraft', draft);\n  }\n});\n","function extend (destination) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n    for (var key in source) {\n      if (source.hasOwnProperty(key)) destination[key] = source[key];\n    }\n  }\n  return destination\n}\n\nfunction repeat (character, count) {\n  return Array(count + 1).join(character)\n}\n\nfunction trimLeadingNewlines (string) {\n  return string.replace(/^\\n*/, '')\n}\n\nfunction trimTrailingNewlines (string) {\n  // avoid match-at-end regexp bottleneck, see #370\n  var indexEnd = string.length;\n  while (indexEnd > 0 && string[indexEnd - 1] === '\\n') indexEnd--;\n  return string.substring(0, indexEnd)\n}\n\nvar blockElements = [\n  'ADDRESS', 'ARTICLE', 'ASIDE', 'AUDIO', 'BLOCKQUOTE', 'BODY', 'CANVAS',\n  'CENTER', 'DD', 'DIR', 'DIV', 'DL', 'DT', 'FIELDSET', 'FIGCAPTION', 'FIGURE',\n  'FOOTER', 'FORM', 'FRAMESET', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'HEADER',\n  'HGROUP', 'HR', 'HTML', 'ISINDEX', 'LI', 'MAIN', 'MENU', 'NAV', 'NOFRAMES',\n  'NOSCRIPT', 'OL', 'OUTPUT', 'P', 'PRE', 'SECTION', 'TABLE', 'TBODY', 'TD',\n  'TFOOT', 'TH', 'THEAD', 'TR', 'UL'\n];\n\nfunction isBlock (node) {\n  return is(node, blockElements)\n}\n\nvar voidElements = [\n  'AREA', 'BASE', 'BR', 'COL', 'COMMAND', 'EMBED', 'HR', 'IMG', 'INPUT',\n  'KEYGEN', 'LINK', 'META', 'PARAM', 'SOURCE', 'TRACK', 'WBR'\n];\n\nfunction isVoid (node) {\n  return is(node, voidElements)\n}\n\nfunction hasVoid (node) {\n  return has(node, voidElements)\n}\n\nvar meaningfulWhenBlankElements = [\n  'A', 'TABLE', 'THEAD', 'TBODY', 'TFOOT', 'TH', 'TD', 'IFRAME', 'SCRIPT',\n  'AUDIO', 'VIDEO'\n];\n\nfunction isMeaningfulWhenBlank (node) {\n  return is(node, meaningfulWhenBlankElements)\n}\n\nfunction hasMeaningfulWhenBlank (node) {\n  return has(node, meaningfulWhenBlankElements)\n}\n\nfunction is (node, tagNames) {\n  return tagNames.indexOf(node.nodeName) >= 0\n}\n\nfunction has (node, tagNames) {\n  return (\n    node.getElementsByTagName &&\n    tagNames.some(function (tagName) {\n      return node.getElementsByTagName(tagName).length\n    })\n  )\n}\n\nvar rules = {};\n\nrules.paragraph = {\n  filter: 'p',\n\n  replacement: function (content) {\n    return '\\n\\n' + content + '\\n\\n'\n  }\n};\n\nrules.lineBreak = {\n  filter: 'br',\n\n  replacement: function (content, node, options) {\n    return options.br + '\\n'\n  }\n};\n\nrules.heading = {\n  filter: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'],\n\n  replacement: function (content, node, options) {\n    var hLevel = Number(node.nodeName.charAt(1));\n\n    if (options.headingStyle === 'setext' && hLevel < 3) {\n      var underline = repeat((hLevel === 1 ? '=' : '-'), content.length);\n      return (\n        '\\n\\n' + content + '\\n' + underline + '\\n\\n'\n      )\n    } else {\n      return '\\n\\n' + repeat('#', hLevel) + ' ' + content + '\\n\\n'\n    }\n  }\n};\n\nrules.blockquote = {\n  filter: 'blockquote',\n\n  replacement: function (content) {\n    content = content.replace(/^\\n+|\\n+$/g, '');\n    content = content.replace(/^/gm, '> ');\n    return '\\n\\n' + content + '\\n\\n'\n  }\n};\n\nrules.list = {\n  filter: ['ul', 'ol'],\n\n  replacement: function (content, node) {\n    var parent = node.parentNode;\n    if (parent.nodeName === 'LI' && parent.lastElementChild === node) {\n      return '\\n' + content\n    } else {\n      return '\\n\\n' + content + '\\n\\n'\n    }\n  }\n};\n\nrules.listItem = {\n  filter: 'li',\n\n  replacement: function (content, node, options) {\n    var prefix = options.bulletListMarker + '   ';\n    var parent = node.parentNode;\n    if (parent.nodeName === 'OL') {\n      var start = parent.getAttribute('start');\n      var index = Array.prototype.indexOf.call(parent.children, node);\n      prefix = (start ? Number(start) + index : index + 1) + '.  ';\n    }\n    content = content\n      .replace(/^\\n+/, '') // remove leading newlines\n      .replace(/\\n+$/, '\\n') // replace trailing newlines with just a single one\n      .replace(/\\n/gm, '\\n' + ' '.repeat(prefix.length)); // indent\n    return (\n      prefix + content + (node.nextSibling && !/\\n$/.test(content) ? '\\n' : '')\n    )\n  }\n};\n\nrules.indentedCodeBlock = {\n  filter: function (node, options) {\n    return (\n      options.codeBlockStyle === 'indented' &&\n      node.nodeName === 'PRE' &&\n      node.firstChild &&\n      node.firstChild.nodeName === 'CODE'\n    )\n  },\n\n  replacement: function (content, node, options) {\n    return (\n      '\\n\\n    ' +\n      node.firstChild.textContent.replace(/\\n/g, '\\n    ') +\n      '\\n\\n'\n    )\n  }\n};\n\nrules.fencedCodeBlock = {\n  filter: function (node, options) {\n    return (\n      options.codeBlockStyle === 'fenced' &&\n      node.nodeName === 'PRE' &&\n      node.firstChild &&\n      node.firstChild.nodeName === 'CODE'\n    )\n  },\n\n  replacement: function (content, node, options) {\n    var className = node.firstChild.getAttribute('class') || '';\n    var language = (className.match(/language-(\\S+)/) || [null, ''])[1];\n    var code = node.firstChild.textContent;\n\n    var fenceChar = options.fence.charAt(0);\n    var fenceSize = 3;\n    var fenceInCodeRegex = new RegExp('^' + fenceChar + '{3,}', 'gm');\n\n    var match;\n    while ((match = fenceInCodeRegex.exec(code))) {\n      if (match[0].length >= fenceSize) {\n        fenceSize = match[0].length + 1;\n      }\n    }\n\n    var fence = repeat(fenceChar, fenceSize);\n\n    return (\n      '\\n\\n' + fence + language + '\\n' +\n      code.replace(/\\n$/, '') +\n      '\\n' + fence + '\\n\\n'\n    )\n  }\n};\n\nrules.horizontalRule = {\n  filter: 'hr',\n\n  replacement: function (content, node, options) {\n    return '\\n\\n' + options.hr + '\\n\\n'\n  }\n};\n\nrules.inlineLink = {\n  filter: function (node, options) {\n    return (\n      options.linkStyle === 'inlined' &&\n      node.nodeName === 'A' &&\n      node.getAttribute('href')\n    )\n  },\n\n  replacement: function (content, node) {\n    var href = node.getAttribute('href');\n    if (href) href = href.replace(/([()])/g, '\\\\$1');\n    var title = cleanAttribute(node.getAttribute('title'));\n    if (title) title = ' \"' + title.replace(/\"/g, '\\\\\"') + '\"';\n    return '[' + content + '](' + href + title + ')'\n  }\n};\n\nrules.referenceLink = {\n  filter: function (node, options) {\n    return (\n      options.linkStyle === 'referenced' &&\n      node.nodeName === 'A' &&\n      node.getAttribute('href')\n    )\n  },\n\n  replacement: function (content, node, options) {\n    var href = node.getAttribute('href');\n    var title = cleanAttribute(node.getAttribute('title'));\n    if (title) title = ' \"' + title + '\"';\n    var replacement;\n    var reference;\n\n    switch (options.linkReferenceStyle) {\n      case 'collapsed':\n        replacement = '[' + content + '][]';\n        reference = '[' + content + ']: ' + href + title;\n        break\n      case 'shortcut':\n        replacement = '[' + content + ']';\n        reference = '[' + content + ']: ' + href + title;\n        break\n      default:\n        var id = this.references.length + 1;\n        replacement = '[' + content + '][' + id + ']';\n        reference = '[' + id + ']: ' + href + title;\n    }\n\n    this.references.push(reference);\n    return replacement\n  },\n\n  references: [],\n\n  append: function (options) {\n    var references = '';\n    if (this.references.length) {\n      references = '\\n\\n' + this.references.join('\\n') + '\\n\\n';\n      this.references = []; // Reset references\n    }\n    return references\n  }\n};\n\nrules.emphasis = {\n  filter: ['em', 'i'],\n\n  replacement: function (content, node, options) {\n    if (!content.trim()) return ''\n    return options.emDelimiter + content + options.emDelimiter\n  }\n};\n\nrules.strong = {\n  filter: ['strong', 'b'],\n\n  replacement: function (content, node, options) {\n    if (!content.trim()) return ''\n    return options.strongDelimiter + content + options.strongDelimiter\n  }\n};\n\nrules.code = {\n  filter: function (node) {\n    var hasSiblings = node.previousSibling || node.nextSibling;\n    var isCodeBlock = node.parentNode.nodeName === 'PRE' && !hasSiblings;\n\n    return node.nodeName === 'CODE' && !isCodeBlock\n  },\n\n  replacement: function (content) {\n    if (!content) return ''\n    content = content.replace(/\\r?\\n|\\r/g, ' ');\n\n    var extraSpace = /^`|^ .*?[^ ].* $|`$/.test(content) ? ' ' : '';\n    var delimiter = '`';\n    var matches = content.match(/`+/gm) || [];\n    while (matches.indexOf(delimiter) !== -1) delimiter = delimiter + '`';\n\n    return delimiter + extraSpace + content + extraSpace + delimiter\n  }\n};\n\nrules.image = {\n  filter: 'img',\n\n  replacement: function (content, node) {\n    var alt = cleanAttribute(node.getAttribute('alt'));\n    var src = node.getAttribute('src') || '';\n    var title = cleanAttribute(node.getAttribute('title'));\n    var titlePart = title ? ' \"' + title + '\"' : '';\n    return src ? '![' + alt + ']' + '(' + src + titlePart + ')' : ''\n  }\n};\n\nfunction cleanAttribute (attribute) {\n  return attribute ? attribute.replace(/(\\n+\\s*)+/g, '\\n') : ''\n}\n\n/**\n * Manages a collection of rules used to convert HTML to Markdown\n */\n\nfunction Rules (options) {\n  this.options = options;\n  this._keep = [];\n  this._remove = [];\n\n  this.blankRule = {\n    replacement: options.blankReplacement\n  };\n\n  this.keepReplacement = options.keepReplacement;\n\n  this.defaultRule = {\n    replacement: options.defaultReplacement\n  };\n\n  this.array = [];\n  for (var key in options.rules) this.array.push(options.rules[key]);\n}\n\nRules.prototype = {\n  add: function (key, rule) {\n    this.array.unshift(rule);\n  },\n\n  keep: function (filter) {\n    this._keep.unshift({\n      filter: filter,\n      replacement: this.keepReplacement\n    });\n  },\n\n  remove: function (filter) {\n    this._remove.unshift({\n      filter: filter,\n      replacement: function () {\n        return ''\n      }\n    });\n  },\n\n  forNode: function (node) {\n    if (node.isBlank) return this.blankRule\n    var rule;\n\n    if ((rule = findRule(this.array, node, this.options))) return rule\n    if ((rule = findRule(this._keep, node, this.options))) return rule\n    if ((rule = findRule(this._remove, node, this.options))) return rule\n\n    return this.defaultRule\n  },\n\n  forEach: function (fn) {\n    for (var i = 0; i < this.array.length; i++) fn(this.array[i], i);\n  }\n};\n\nfunction findRule (rules, node, options) {\n  for (var i = 0; i < rules.length; i++) {\n    var rule = rules[i];\n    if (filterValue(rule, node, options)) return rule\n  }\n  return void 0\n}\n\nfunction filterValue (rule, node, options) {\n  var filter = rule.filter;\n  if (typeof filter === 'string') {\n    if (filter === node.nodeName.toLowerCase()) return true\n  } else if (Array.isArray(filter)) {\n    if (filter.indexOf(node.nodeName.toLowerCase()) > -1) return true\n  } else if (typeof filter === 'function') {\n    if (filter.call(rule, node, options)) return true\n  } else {\n    throw new TypeError('`filter` needs to be a string, array, or function')\n  }\n}\n\n/**\n * The collapseWhitespace function is adapted from collapse-whitespace\n * by Luc Thevenard.\n *\n * The MIT License (MIT)\n *\n * Copyright (c) 2014 Luc Thevenard <lucthevenard@gmail.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/**\n * collapseWhitespace(options) removes extraneous whitespace from an the given element.\n *\n * @param {Object} options\n */\nfunction collapseWhitespace (options) {\n  var element = options.element;\n  var isBlock = options.isBlock;\n  var isVoid = options.isVoid;\n  var isPre = options.isPre || function (node) {\n    return node.nodeName === 'PRE'\n  };\n\n  if (!element.firstChild || isPre(element)) return\n\n  var prevText = null;\n  var keepLeadingWs = false;\n\n  var prev = null;\n  var node = next(prev, element, isPre);\n\n  while (node !== element) {\n    if (node.nodeType === 3 || node.nodeType === 4) { // Node.TEXT_NODE or Node.CDATA_SECTION_NODE\n      var text = node.data.replace(/[ \\r\\n\\t]+/g, ' ');\n\n      if ((!prevText || / $/.test(prevText.data)) &&\n          !keepLeadingWs && text[0] === ' ') {\n        text = text.substr(1);\n      }\n\n      // `text` might be empty at this point.\n      if (!text) {\n        node = remove(node);\n        continue\n      }\n\n      node.data = text;\n\n      prevText = node;\n    } else if (node.nodeType === 1) { // Node.ELEMENT_NODE\n      if (isBlock(node) || node.nodeName === 'BR') {\n        if (prevText) {\n          prevText.data = prevText.data.replace(/ $/, '');\n        }\n\n        prevText = null;\n        keepLeadingWs = false;\n      } else if (isVoid(node) || isPre(node)) {\n        // Avoid trimming space around non-block, non-BR void elements and inline PRE.\n        prevText = null;\n        keepLeadingWs = true;\n      } else if (prevText) {\n        // Drop protection if set previously.\n        keepLeadingWs = false;\n      }\n    } else {\n      node = remove(node);\n      continue\n    }\n\n    var nextNode = next(prev, node, isPre);\n    prev = node;\n    node = nextNode;\n  }\n\n  if (prevText) {\n    prevText.data = prevText.data.replace(/ $/, '');\n    if (!prevText.data) {\n      remove(prevText);\n    }\n  }\n}\n\n/**\n * remove(node) removes the given node from the DOM and returns the\n * next node in the sequence.\n *\n * @param {Node} node\n * @return {Node} node\n */\nfunction remove (node) {\n  var next = node.nextSibling || node.parentNode;\n\n  node.parentNode.removeChild(node);\n\n  return next\n}\n\n/**\n * next(prev, current, isPre) returns the next node in the sequence, given the\n * current and previous nodes.\n *\n * @param {Node} prev\n * @param {Node} current\n * @param {Function} isPre\n * @return {Node}\n */\nfunction next (prev, current, isPre) {\n  if ((prev && prev.parentNode === current) || isPre(current)) {\n    return current.nextSibling || current.parentNode\n  }\n\n  return current.firstChild || current.nextSibling || current.parentNode\n}\n\n/*\n * Set up window for Node.js\n */\n\nvar root = (typeof window !== 'undefined' ? window : {});\n\n/*\n * Parsing HTML strings\n */\n\nfunction canParseHTMLNatively () {\n  var Parser = root.DOMParser;\n  var canParse = false;\n\n  // Adapted from https://gist.github.com/1129031\n  // Firefox/Opera/IE throw errors on unsupported types\n  try {\n    // WebKit returns null on unsupported types\n    if (new Parser().parseFromString('', 'text/html')) {\n      canParse = true;\n    }\n  } catch (e) {}\n\n  return canParse\n}\n\nfunction createHTMLParser () {\n  var Parser = function () {};\n\n  {\n    if (shouldUseActiveX()) {\n      Parser.prototype.parseFromString = function (string) {\n        var doc = new window.ActiveXObject('htmlfile');\n        doc.designMode = 'on'; // disable on-page scripts\n        doc.open();\n        doc.write(string);\n        doc.close();\n        return doc\n      };\n    } else {\n      Parser.prototype.parseFromString = function (string) {\n        var doc = document.implementation.createHTMLDocument('');\n        doc.open();\n        doc.write(string);\n        doc.close();\n        return doc\n      };\n    }\n  }\n  return Parser\n}\n\nfunction shouldUseActiveX () {\n  var useActiveX = false;\n  try {\n    document.implementation.createHTMLDocument('').open();\n  } catch (e) {\n    if (root.ActiveXObject) useActiveX = true;\n  }\n  return useActiveX\n}\n\nvar HTMLParser = canParseHTMLNatively() ? root.DOMParser : createHTMLParser();\n\nfunction RootNode (input, options) {\n  var root;\n  if (typeof input === 'string') {\n    var doc = htmlParser().parseFromString(\n      // DOM parsers arrange elements in the <head> and <body>.\n      // Wrapping in a custom element ensures elements are reliably arranged in\n      // a single element.\n      '<x-turndown id=\"turndown-root\">' + input + '</x-turndown>',\n      'text/html'\n    );\n    root = doc.getElementById('turndown-root');\n  } else {\n    root = input.cloneNode(true);\n  }\n  collapseWhitespace({\n    element: root,\n    isBlock: isBlock,\n    isVoid: isVoid,\n    isPre: options.preformattedCode ? isPreOrCode : null\n  });\n\n  return root\n}\n\nvar _htmlParser;\nfunction htmlParser () {\n  _htmlParser = _htmlParser || new HTMLParser();\n  return _htmlParser\n}\n\nfunction isPreOrCode (node) {\n  return node.nodeName === 'PRE' || node.nodeName === 'CODE'\n}\n\nfunction Node (node, options) {\n  node.isBlock = isBlock(node);\n  node.isCode = node.nodeName === 'CODE' || node.parentNode.isCode;\n  node.isBlank = isBlank(node);\n  node.flankingWhitespace = flankingWhitespace(node, options);\n  return node\n}\n\nfunction isBlank (node) {\n  return (\n    !isVoid(node) &&\n    !isMeaningfulWhenBlank(node) &&\n    /^\\s*$/i.test(node.textContent) &&\n    !hasVoid(node) &&\n    !hasMeaningfulWhenBlank(node)\n  )\n}\n\nfunction flankingWhitespace (node, options) {\n  if (node.isBlock || (options.preformattedCode && node.isCode)) {\n    return { leading: '', trailing: '' }\n  }\n\n  var edges = edgeWhitespace(node.textContent);\n\n  // abandon leading ASCII WS if left-flanked by ASCII WS\n  if (edges.leadingAscii && isFlankedByWhitespace('left', node, options)) {\n    edges.leading = edges.leadingNonAscii;\n  }\n\n  // abandon trailing ASCII WS if right-flanked by ASCII WS\n  if (edges.trailingAscii && isFlankedByWhitespace('right', node, options)) {\n    edges.trailing = edges.trailingNonAscii;\n  }\n\n  return { leading: edges.leading, trailing: edges.trailing }\n}\n\nfunction edgeWhitespace (string) {\n  var m = string.match(/^(([ \\t\\r\\n]*)(\\s*))(?:(?=\\S)[\\s\\S]*\\S)?((\\s*?)([ \\t\\r\\n]*))$/);\n  return {\n    leading: m[1], // whole string for whitespace-only strings\n    leadingAscii: m[2],\n    leadingNonAscii: m[3],\n    trailing: m[4], // empty for whitespace-only strings\n    trailingNonAscii: m[5],\n    trailingAscii: m[6]\n  }\n}\n\nfunction isFlankedByWhitespace (side, node, options) {\n  var sibling;\n  var regExp;\n  var isFlanked;\n\n  if (side === 'left') {\n    sibling = node.previousSibling;\n    regExp = / $/;\n  } else {\n    sibling = node.nextSibling;\n    regExp = /^ /;\n  }\n\n  if (sibling) {\n    if (sibling.nodeType === 3) {\n      isFlanked = regExp.test(sibling.nodeValue);\n    } else if (options.preformattedCode && sibling.nodeName === 'CODE') {\n      isFlanked = false;\n    } else if (sibling.nodeType === 1 && !isBlock(sibling)) {\n      isFlanked = regExp.test(sibling.textContent);\n    }\n  }\n  return isFlanked\n}\n\nvar reduce = Array.prototype.reduce;\nvar escapes = [\n  [/\\\\/g, '\\\\\\\\'],\n  [/\\*/g, '\\\\*'],\n  [/^-/g, '\\\\-'],\n  [/^\\+ /g, '\\\\+ '],\n  [/^(=+)/g, '\\\\$1'],\n  [/^(#{1,6}) /g, '\\\\$1 '],\n  [/`/g, '\\\\`'],\n  [/^~~~/g, '\\\\~~~'],\n  [/\\[/g, '\\\\['],\n  [/\\]/g, '\\\\]'],\n  [/^>/g, '\\\\>'],\n  [/_/g, '\\\\_'],\n  [/^(\\d+)\\. /g, '$1\\\\. ']\n];\n\nfunction TurndownService (options) {\n  if (!(this instanceof TurndownService)) return new TurndownService(options)\n\n  var defaults = {\n    rules: rules,\n    headingStyle: 'setext',\n    hr: '* * *',\n    bulletListMarker: '*',\n    codeBlockStyle: 'indented',\n    fence: '```',\n    emDelimiter: '_',\n    strongDelimiter: '**',\n    linkStyle: 'inlined',\n    linkReferenceStyle: 'full',\n    br: '  ',\n    preformattedCode: false,\n    blankReplacement: function (content, node) {\n      return node.isBlock ? '\\n\\n' : ''\n    },\n    keepReplacement: function (content, node) {\n      return node.isBlock ? '\\n\\n' + node.outerHTML + '\\n\\n' : node.outerHTML\n    },\n    defaultReplacement: function (content, node) {\n      return node.isBlock ? '\\n\\n' + content + '\\n\\n' : content\n    }\n  };\n  this.options = extend({}, defaults, options);\n  this.rules = new Rules(this.options);\n}\n\nTurndownService.prototype = {\n  /**\n   * The entry point for converting a string or DOM node to Markdown\n   * @public\n   * @param {String|HTMLElement} input The string or DOM node to convert\n   * @returns A Markdown representation of the input\n   * @type String\n   */\n\n  turndown: function (input) {\n    if (!canConvert(input)) {\n      throw new TypeError(\n        input + ' is not a string, or an element/document/fragment node.'\n      )\n    }\n\n    if (input === '') return ''\n\n    var output = process.call(this, new RootNode(input, this.options));\n    return postProcess.call(this, output)\n  },\n\n  /**\n   * Add one or more plugins\n   * @public\n   * @param {Function|Array} plugin The plugin or array of plugins to add\n   * @returns The Turndown instance for chaining\n   * @type Object\n   */\n\n  use: function (plugin) {\n    if (Array.isArray(plugin)) {\n      for (var i = 0; i < plugin.length; i++) this.use(plugin[i]);\n    } else if (typeof plugin === 'function') {\n      plugin(this);\n    } else {\n      throw new TypeError('plugin must be a Function or an Array of Functions')\n    }\n    return this\n  },\n\n  /**\n   * Adds a rule\n   * @public\n   * @param {String} key The unique key of the rule\n   * @param {Object} rule The rule\n   * @returns The Turndown instance for chaining\n   * @type Object\n   */\n\n  addRule: function (key, rule) {\n    this.rules.add(key, rule);\n    return this\n  },\n\n  /**\n   * Keep a node (as HTML) that matches the filter\n   * @public\n   * @param {String|Array|Function} filter The unique key of the rule\n   * @returns The Turndown instance for chaining\n   * @type Object\n   */\n\n  keep: function (filter) {\n    this.rules.keep(filter);\n    return this\n  },\n\n  /**\n   * Remove a node that matches the filter\n   * @public\n   * @param {String|Array|Function} filter The unique key of the rule\n   * @returns The Turndown instance for chaining\n   * @type Object\n   */\n\n  remove: function (filter) {\n    this.rules.remove(filter);\n    return this\n  },\n\n  /**\n   * Escapes Markdown syntax\n   * @public\n   * @param {String} string The string to escape\n   * @returns A string with Markdown syntax escaped\n   * @type String\n   */\n\n  escape: function (string) {\n    return escapes.reduce(function (accumulator, escape) {\n      return accumulator.replace(escape[0], escape[1])\n    }, string)\n  }\n};\n\n/**\n * Reduces a DOM node down to its Markdown string equivalent\n * @private\n * @param {HTMLElement} parentNode The node to convert\n * @returns A Markdown representation of the node\n * @type String\n */\n\nfunction process (parentNode) {\n  var self = this;\n  return reduce.call(parentNode.childNodes, function (output, node) {\n    node = new Node(node, self.options);\n\n    var replacement = '';\n    if (node.nodeType === 3) {\n      replacement = node.isCode ? node.nodeValue : self.escape(node.nodeValue);\n    } else if (node.nodeType === 1) {\n      replacement = replacementForNode.call(self, node);\n    }\n\n    return join(output, replacement)\n  }, '')\n}\n\n/**\n * Appends strings as each rule requires and trims the output\n * @private\n * @param {String} output The conversion output\n * @returns A trimmed version of the ouput\n * @type String\n */\n\nfunction postProcess (output) {\n  var self = this;\n  this.rules.forEach(function (rule) {\n    if (typeof rule.append === 'function') {\n      output = join(output, rule.append(self.options));\n    }\n  });\n\n  return output.replace(/^[\\t\\r\\n]+/, '').replace(/[\\t\\r\\n\\s]+$/, '')\n}\n\n/**\n * Converts an element node to its Markdown equivalent\n * @private\n * @param {HTMLElement} node The node to convert\n * @returns A Markdown representation of the node\n * @type String\n */\n\nfunction replacementForNode (node) {\n  var rule = this.rules.forNode(node);\n  var content = process.call(this, node);\n  var whitespace = node.flankingWhitespace;\n  if (whitespace.leading || whitespace.trailing) content = content.trim();\n  return (\n    whitespace.leading +\n    rule.replacement(content, node, this.options) +\n    whitespace.trailing\n  )\n}\n\n/**\n * Joins replacement to the current output with appropriate number of new lines\n * @private\n * @param {String} output The current conversion output\n * @param {String} replacement The string to append to the output\n * @returns Joined output\n * @type String\n */\n\nfunction join (output, replacement) {\n  var s1 = trimTrailingNewlines(output);\n  var s2 = trimLeadingNewlines(replacement);\n  var nls = Math.max(output.length - s1.length, replacement.length - s2.length);\n  var separator = '\\n\\n'.substring(0, nls);\n\n  return s1 + separator + s2\n}\n\n/**\n * Determines whether an input can be converted\n * @private\n * @param {String|HTMLElement} input Describe this parameter\n * @returns Describe what it returns\n * @type String|Object|Array|Boolean|Number\n */\n\nfunction canConvert (input) {\n  return (\n    input != null && (\n      typeof input === 'string' ||\n      (input.nodeType && (\n        input.nodeType === 1 || input.nodeType === 9 || input.nodeType === 11\n      ))\n    )\n  )\n}\n\nexport default TurndownService;\n","/**\n * @import { TranslateOptions, TranslationService } from '$lib/types/private';\n */\n\nconst serviceId = 'google';\nconst serviceLabel = 'Google Cloud Translation';\nconst apiLabel = 'Cloud Translation API';\nconst developerURL = 'https://console.cloud.google.com/apis/library/translate.googleapis.com';\nconst apiKeyURL = 'https://console.cloud.google.com/apis/api/translate.googleapis.com/credentials';\nconst apiKeyPattern = /AIza[0-9A-Za-z-_]{35}/;\n\n/**\n * Supported source/target languages for Google Cloud Translation API.\n * @see https://cloud.google.com/translate/docs/languages\n */\nconst SUPPORTED_LANGUAGES = [\n  'ab,ace,ach,af,ak,alz,am,ar,as,awa,ay,az',\n  'ba,ban,bbc,be,bem,bew,bg,bho,bik,bm,bn,br,bs,bts,btx,bua',\n  'ca,ceb,cgg,chm,ckb,cnh,co,crh,crs,cs,cv,cy',\n  'da,de,din,doi,dov,dv,dz',\n  'ee,el,en,eo,es,et,eu',\n  'fa,ff,fi,fil,fj,fr,fr-CA,fr-FR,fy',\n  'ga,gaa,gd,gl,gn,gom,gu',\n  'ha,haw,he,hi,hil,hmn,hr,hrx,ht,hu,hy',\n  'id,ig,ilo,is,it,iw',\n  'ja,jv,jw',\n  'ka,kk,km,kn,ko,kri,ktu,ku,ky',\n  'la,lb,lg,li,lij,lmo,ln,lo,lt,ltg,luo,lus,lv',\n  'mai,mak,mg,mi,min,mk,ml,mn,mni-Mtei,mr,ms,ms-Arab,mt,my',\n  'ne,new,nl,no,nr,nso,nus,ny',\n  'oc,om,or',\n  'pa,pa-Arab,pag,pam,pap,pl,ps,pt,pt-BR,pt-PT',\n  'qu',\n  'rn,ro,rom,ru,rw',\n  'sa,scn,sd,sg,shn,si,sk,sl,sm,sn,so,sq,sr,ss,st,su,sv,sw,szl',\n  'ta,te,tet,tg,th,ti,tk,tl,tn,tr,ts,tt',\n  'ug,uk,ur,uz',\n  'vi',\n  'xh',\n  'yi,yo,yua,yue',\n  'zh,zh-CN,zh-TW,zu',\n]\n  .join(',')\n  .split(',');\n\n/**\n * Normalize a locale code to a supported language code.\n * @param {string} locale Locale code, e.g., 'en', 'fr-FR', 'zh-CN'.\n * @returns {string | undefined} Normalized language code, e.g., 'en', 'fr-FR', 'zh-CN'.\n */\nexport const normalizeLanguage = (locale) => {\n  const normalizedLocale = locale.replace(\n    /^([a-z]{2,3})[-_]([a-z]{2,4})$/i,\n    (_match, lang, region) => `${lang.toLowerCase()}-${region.toUpperCase()}`,\n  );\n\n  if (SUPPORTED_LANGUAGES.includes(normalizedLocale)) {\n    return normalizedLocale;\n  }\n\n  const [lang] = normalizedLocale.split('-');\n\n  if (SUPPORTED_LANGUAGES.includes(lang)) {\n    return lang;\n  }\n\n  return undefined;\n};\n\n/**\n * Translate the given text with Google Cloud Translation API using the basic model and HTML format.\n * @param {string[]} texts Array of original texts.\n * @param {TranslateOptions} options Options.\n * @returns {Promise<string[]>} Translated strings in the original order.\n * @throws {Error} When the source or target locale is not supported or API call fails.\n * @see https://cloud.google.com/translate/docs/basic/translating-text\n * @see https://cloud.google.com/translate/docs/reference/rest/v2/translate\n * @see https://cloud.google.com/docs/authentication/api-keys-use\n */\nconst translate = async (texts, { sourceLocale, targetLocale, apiKey }) => {\n  const sourceLanguage = normalizeLanguage(sourceLocale);\n  const targetLanguage = normalizeLanguage(targetLocale);\n\n  if (!sourceLanguage) {\n    throw new Error('Source locale is not supported.');\n  }\n\n  if (!targetLanguage) {\n    throw new Error('Target locale is not supported.');\n  }\n\n  // Cloud Translation API v2 endpoint\n  const url = 'https://translation.googleapis.com/language/translate/v2';\n\n  const requestBody = {\n    q: texts,\n    source: sourceLanguage,\n    target: targetLanguage,\n    format: 'html',\n  };\n\n  try {\n    const response = await fetch(url, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n        'X-goog-api-key': apiKey,\n      },\n      body: JSON.stringify(requestBody),\n    });\n\n    if (!response.ok) {\n      const errorData = await response.json().catch(() => ({}));\n\n      throw new Error(\n        `Google Translate API error: ${response.status} ${response.statusText}` +\n          `${errorData.error?.message ? ` - ${errorData.error.message}` : ''}`,\n      );\n    }\n\n    const { data } = /** @type {{ data: { translations: { translatedText: string }[] } }} */ (\n      await response.json()\n    );\n\n    return data.translations.map((t) => t.translatedText);\n  } catch (error) {\n    if (error instanceof Error) {\n      throw error;\n    }\n\n    throw new Error('Failed to translate text with Google Translate API.');\n  }\n};\n\n/**\n * @type {TranslationService}\n */\nexport default {\n  serviceId,\n  serviceLabel,\n  apiLabel,\n  developerURL,\n  apiKeyURL,\n  apiKeyPattern,\n  markdownSupported: false,\n  getSourceLanguage: normalizeLanguage,\n  getTargetLanguage: normalizeLanguage,\n  translate,\n};\n","/**\n * @import { TranslateOptions, TranslationService } from '$lib/types/private';\n */\n\nimport { getLocaleLabel } from '$lib/services/contents/i18n';\n\nconst serviceId = 'openai';\nconst serviceLabel = 'OpenAI GPT';\nconst apiLabel = 'OpenAI API';\nconst developerURL = 'https://platform.openai.com/docs/overview';\nconst apiKeyURL = 'https://platform.openai.com/api-keys';\nconst apiKeyPattern = /sk-[a-zA-Z0-9-_]{40,}/;\n\n/**\n * Common languages supported by GPT.\n * OpenAI's GPT models support a wide range of languages, but we'll focus on the most common ones.\n * The model can translate between virtually any language pair.\n * @see https://platform.openai.com/docs/guides/text-generation\n */\nconst SUPPORTED_LANGUAGES = [\n  'af,ar,be,bg,bn,bs,ca,cs,cy,da,de,el,en,eo,es,et,eu,fa,fi,fr,ga,gl,gu,he,hi,hr,hu,hy,id,is,it,ja',\n  'ka,kk,km,kn,ko,ky,la,lt,lv,mk,ml,mn,mr,ms,mt,my,ne,nl,no,pl,pt,ro,ru,si,sk,sl,sq,sr,sv,sw,ta,te',\n  'th,tl,tr,uk,ur,uz,vi,zh',\n]\n  .join(',')\n  .split(',');\n\n/**\n * Normalize a locale code to a supported language code.\n * @param {string} locale Locale code, e.g., 'en', 'fr-FR', 'zh-CN'.\n * @returns {string | undefined} Normalized language code, e.g., 'en', 'fr', 'zh'.\n */\nexport const normalizeLanguage = (locale) => {\n  const [lang] = locale.toLowerCase().split(/[-_]/);\n\n  if (SUPPORTED_LANGUAGES.includes(lang)) {\n    return lang;\n  }\n\n  return undefined;\n};\n\n/**\n * Translate the given text with OpenAI GPT.\n * Supports markdown content and preserves formatting.\n * @param {string[]} texts Array of original texts.\n * @param {TranslateOptions} options Options.\n * @returns {Promise<string[]>} Translated strings in the original order.\n * @throws {Error} When the source or target locale is not supported or API call fails.\n * @see https://platform.openai.com/docs/api-reference/chat/create\n */\nconst translate = async (texts, { sourceLocale, targetLocale, apiKey }) => {\n  const sourceLanguage = normalizeLanguage(sourceLocale);\n  const targetLanguage = normalizeLanguage(targetLocale);\n\n  if (!sourceLanguage) {\n    throw new Error('Source locale is not supported.');\n  }\n\n  if (!targetLanguage) {\n    throw new Error('Target locale is not supported.');\n  }\n\n  const sourceLanguageName = getLocaleLabel(sourceLanguage);\n  const targetLanguageName = getLocaleLabel(targetLanguage);\n  // OpenAI Chat Completions API endpoint\n  const url = 'https://api.openai.com/v1/chat/completions';\n\n  const systemPrompt =\n    'You are a professional translator. Translate the given texts from ' +\n    `${sourceLanguageName} to ${targetLanguageName}.\n\nIMPORTANT INSTRUCTIONS:\n- Preserve all markdown formatting (headers, links, bold, italic, code blocks, lists, etc.)\n- Preserve all HTML tags and attributes exactly as they are\n- Maintain the original structure and formatting\n- Do not translate code content within code blocks or inline code\n- Do not translate URLs, email addresses, or technical identifiers\n- Do not split translations into separate paragraphs or add extra line breaks\n- Keep each translation as a single continuous text string in the array\n- Return your response as a valid JSON object with a \"translations\" array\n- The \"translations\" array should contain the translated texts in the same order as provided\n\nRESPONSE FORMAT:\nReturn a JSON object with this exact structure:\n{\n  \"translations\": [\"translated text 1\", \"translated text 2\", ...]\n}`;\n\n  const userPrompt = `Translate these texts:\\n${JSON.stringify(texts)}`;\n\n  const requestBody = {\n    model: 'gpt-3.5-turbo-1106',\n    messages: [\n      {\n        role: 'system',\n        content: systemPrompt,\n      },\n      {\n        role: 'user',\n        content: userPrompt,\n      },\n    ],\n    temperature: 0.3, // Lower temperature for more consistent translations\n    max_tokens: 4000,\n    response_format: { type: 'json_object' }, // Enable JSON mode\n  };\n\n  try {\n    const response = await fetch(url, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n        Authorization: `Bearer ${apiKey}`,\n      },\n      body: JSON.stringify(requestBody),\n    });\n\n    if (!response.ok) {\n      const errorData = await response.json().catch(() => ({}));\n\n      throw new Error(\n        `OpenAI API error: ${response.status} ${response.statusText}` +\n          `${errorData.error?.message ? ` - ${errorData.error.message}` : ''}`,\n      );\n    }\n\n    const data = await response.json();\n\n    if (!data.choices || !data.choices[0] || !data.choices[0].message) {\n      throw new Error('Invalid response format from OpenAI API.');\n    }\n\n    const content = data.choices[0].message.content.trim();\n    // Parse the JSON response\n    let parsedResponse;\n\n    try {\n      parsedResponse = JSON.parse(content);\n    } catch {\n      throw new Error('Failed to parse JSON response from OpenAI API.');\n    }\n\n    // Validate the response structure\n    if (!parsedResponse || !Array.isArray(parsedResponse.translations)) {\n      throw new Error('Invalid JSON structure in OpenAI API response.');\n    }\n\n    const { translations } = parsedResponse;\n\n    // Ensure we have the right number of translations\n    if (translations.length !== texts.length) {\n      const expectedCount = texts.length;\n      const actualCount = translations.length;\n\n      throw new Error(`Translation count mismatch: expected ${expectedCount}, got ${actualCount}`);\n    }\n\n    return translations;\n  } catch (error) {\n    if (error instanceof Error) {\n      throw error;\n    }\n\n    throw new Error('Failed to translate text with OpenAI API.');\n  }\n};\n\n/**\n * @type {TranslationService}\n */\nexport default {\n  serviceId,\n  serviceLabel,\n  apiLabel,\n  developerURL,\n  apiKeyURL,\n  apiKeyPattern,\n  markdownSupported: true,\n  getSourceLanguage: normalizeLanguage,\n  getTargetLanguage: normalizeLanguage,\n  translate,\n};\n","import { derived } from 'svelte/store';\n\nimport { prefs } from '$lib/services/user/prefs';\n\nimport google from './google';\nimport openai from './openai';\n\n/**\n * @import { Readable } from 'svelte/store';\n * @import { TranslationService } from '$lib/types/private';\n */\n\n/**\n * List of all the supported translation services.\n * @type {Record<string, TranslationService>}\n */\nexport const allTranslationServices = {\n  google,\n  openai,\n};\n\n/**\n * @type {Readable<TranslationService>}\n */\nexport const translator = derived([prefs], ([$prefs]) => {\n  const { defaultTranslationService = 'google' } = $prefs;\n\n  return allTranslationServices[defaultTranslationService] ?? google;\n});\n","import { marked } from 'marked';\nimport { get } from 'svelte/store';\nimport TurndownService from 'turndown';\n\nimport { entryDraft } from '$lib/services/contents/draft';\nimport { copyFromLocaleToast, translatorApiKeyDialogState } from '$lib/services/contents/editor';\nimport { getField } from '$lib/services/contents/entry/fields';\nimport { translator } from '$lib/services/integrations/translators';\nimport { prefs } from '$lib/services/user/prefs';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import { EntryDraft, InternalLocaleCode, LocaleContentMap } from '$lib/types/private';\n * @import { FieldKeyPath, ListField } from '$lib/types/public';\n */\n\n/**\n * @typedef {object} CopyOptions\n * @property {InternalLocaleCode} sourceLocale Source locale, e.g. `en`.\n * @property {InternalLocaleCode} targetLocale Target locale, e.g. `ja`.\n * @property {FieldKeyPath} [keyPath] Flattened (dot-notated) object keys that will be used for\n * searching the source values. Omit this if copying all the fields. If the triggered widget is List\n * or Object, this will likely match multiple fields.\n * @property {boolean} [translate] Whether to translate the copied text fields.\n */\n\n/**\n * @typedef {Record<FieldKeyPath, { value: string, isMarkdown: boolean }>} CopyingFieldMap\n */\n\n/**\n * Initialize a Turndown service instance for converting HTML to Markdown.\n * @see https://github.com/mixmark-io/turndown\n */\nconst turndownService = new TurndownService({\n  headingStyle: 'atx',\n  bulletListMarker: '-',\n  codeBlockStyle: 'fenced',\n});\n\n/**\n * Get a list of fields to be copied or translated from the source locale to the target locale.\n * @param {object} args Arguments.\n * @param {EntryDraft} args.draft Entry draft.\n * @param {CopyOptions} args.options Copy options.\n * @returns {CopyingFieldMap} Copied or translated field values.\n */\nconst getCopyingFieldMap = ({ draft, options }) => {\n  const { collectionName, fileName, currentValues, isIndexFile } = draft;\n  const { sourceLocale, targetLocale, keyPath = '', translate = false } = options;\n  const valueMap = currentValues[sourceLocale];\n  const getFieldArgs = { collectionName, fileName, valueMap, isIndexFile };\n\n  return Object.fromEntries(\n    Object.entries(valueMap)\n      .map(([_keyPath, value]) => {\n        const targetLocaleValue = currentValues[targetLocale][_keyPath];\n        const field = getField({ ...getFieldArgs, keyPath: _keyPath });\n        const widget = field?.widget ?? 'string';\n\n        if (\n          (keyPath && !_keyPath.startsWith(keyPath)) ||\n          typeof value !== 'string' ||\n          !value ||\n          !['markdown', 'text', 'string', 'list'].includes(widget) ||\n          // prettier-ignore\n          (widget === 'list' &&\n          (/** @type {ListField} */ (field).field ?? /** @type {ListField} */ (field).fields)) ||\n          (!translate && value === targetLocaleValue) ||\n          // Skip populated fields when translating all the fields\n          (!keyPath && translate && !!targetLocaleValue)\n        ) {\n          return null;\n        }\n\n        return [_keyPath, { value, isMarkdown: widget === 'markdown' }];\n      })\n      .filter((entry) => !!entry),\n  );\n};\n\n/**\n * Update the toast notification.\n * @param {'info' | 'success' | 'error'} status Status.\n * @param {string} message Message key.\n * @param {object} context Context.\n * @param {number} context.count Number of fields copied or translated.\n * @param {InternalLocaleCode} context.sourceLocale Source locale, e.g. `en`.\n */\nconst updateToast = (status, message, { count, sourceLocale }) => {\n  copyFromLocaleToast.set({ id: Date.now(), show: true, status, message, count, sourceLocale });\n};\n\n/**\n * Translate the field value(s) from another locale.\n * @param {object} args Arguments.\n * @param {LocaleContentMap} args.currentValues Current values for the entry draft. This will be\n * updated with the translated values.\n * @param {CopyOptions} args.options Copy options.\n * @param {CopyingFieldMap} args.copingFieldMap Copied or translated field values.\n */\nconst translateFields = async ({ currentValues, options, copingFieldMap }) => {\n  const { serviceId, markdownSupported, translate } = get(translator);\n  const { sourceLocale, targetLocale } = options;\n  const count = Object.keys(copingFieldMap).length;\n  const countType = count === 1 ? 'one' : 'many';\n\n  const apiKey =\n    get(prefs).apiKeys?.[serviceId] ||\n    (await new Promise((resolve) => {\n      // The promise will be resolved once the user enters an API key on the dialog\n      translatorApiKeyDialogState.set({ show: true, multiple: count > 1, resolve });\n    }));\n\n  if (!apiKey) {\n    return;\n  }\n\n  updateToast('info', 'translation.started', { count, sourceLocale });\n\n  try {\n    const translatedValues = await translate(\n      Object.entries(copingFieldMap).map(([, { value, isMarkdown }]) =>\n        // Convert the value from Markdown to HTML if needed\n        isMarkdown && !markdownSupported ? /** @type {string} */ (marked.parse(value)) : value,\n      ),\n      { apiKey, sourceLocale, targetLocale },\n    );\n\n    Object.entries(copingFieldMap).forEach(([_keyPath, { isMarkdown }], index) => {\n      const value = translatedValues[index];\n\n      // Convert the value back to Markdown if needed\n      currentValues[targetLocale][_keyPath] =\n        // @ts-ignore Silence a false type error\n        isMarkdown && !markdownSupported ? turndownService.turndown(value) : value;\n    });\n\n    updateToast('success', `translation.complete.${countType}`, { count, sourceLocale });\n  } catch (ex) {\n    // @todo Show a detailed error message.\n    updateToast('error', 'translation.error', { count, sourceLocale });\n    // eslint-disable-next-line no-console\n    console.error(ex);\n  }\n};\n\n/**\n * Copy the field value(s) from another locale.\n * @param {object} args Arguments.\n * @param {LocaleContentMap} args.currentValues Current values for the entry draft. This will be\n * updated with the copied values.\n * @param {CopyOptions} args.options Copy options.\n * @param {CopyingFieldMap} args.copingFieldMap Copied or translated field values.\n */\nconst copyFields = ({ currentValues, options, copingFieldMap }) => {\n  const { sourceLocale, targetLocale } = options;\n  const count = Object.keys(copingFieldMap).length;\n  const countType = count === 1 ? 'one' : 'many';\n\n  Object.entries(copingFieldMap).forEach(([_keyPath, { value }]) => {\n    currentValues[targetLocale][_keyPath] = value;\n  });\n\n  updateToast('success', `copy.complete.${countType}`, { count, sourceLocale });\n};\n\n/**\n * Copy or translate field value(s) from another locale.\n * @param {CopyOptions} options Copy options.\n */\nexport const copyFromLocale = async (options) => {\n  const { sourceLocale, translate = false } = options;\n  const draft = /** @type {EntryDraft} */ (get(entryDraft));\n  const { currentValues } = draft;\n  const copingFieldMap = getCopyingFieldMap({ draft, options });\n  const count = Object.keys(copingFieldMap).length;\n\n  if (!count) {\n    updateToast('info', `${translate ? 'translation' : 'copy'}.none`, { count, sourceLocale });\n\n    return;\n  }\n\n  if (translate) {\n    await translateFields({ currentValues, options, copingFieldMap });\n  } else {\n    copyFields({ currentValues, options, copingFieldMap });\n  }\n\n  /** @type {Writable<EntryDraft>} */ (entryDraft).update((_draft) => ({\n    ..._draft,\n    currentValues,\n  }));\n};\n","<script>\n  import { MenuItem } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { copyFromLocale } from '$lib/services/contents/draft/update/copy';\n  import { getLocaleLabel } from '$lib/services/contents/i18n';\n  import { translator } from '$lib/services/integrations/translators';\n\n  /**\n   * @import { InternalLocaleCode } from '$lib/types/private';\n   * @import { FieldKeyPath } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {InternalLocaleCode} locale Current pane’s locale.\n   * @property {InternalLocaleCode[]} otherLocales Other locales.\n   * @property {FieldKeyPath} [keyPath] Field key path.\n   * @property {boolean} [translate] Whether to translate the field.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    otherLocales,\n    keyPath = '',\n    translate = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const { getSourceLanguage, getTargetLanguage } = $derived($translator);\n</script>\n\n{#each otherLocales as otherLocale}\n  <MenuItem\n    label={$_(translate ? 'translate_from_x' : 'copy_from_x', {\n      values: { locale: getLocaleLabel(otherLocale) },\n    })}\n    disabled={!$entryDraft?.currentLocales[locale] ||\n      !$entryDraft.currentLocales[otherLocale] ||\n      (keyPath && !$state.snapshot($entryDraft.currentValues[otherLocale])[keyPath]) ||\n      (!translate &&\n        keyPath &&\n        $state.snapshot($entryDraft.currentValues[otherLocale])[keyPath] ===\n          $state.snapshot($entryDraft.currentValues[locale])[keyPath]) ||\n      (translate && (!getSourceLanguage(locale) || !getTargetLanguage(otherLocale)))}\n    onclick={() => {\n      copyFromLocale({\n        sourceLocale: otherLocale,\n        targetLocale: locale,\n        keyPath,\n        translate,\n      });\n    }}\n  />\n{/each}\n","<script>\n  import { Button, Icon, Menu, MenuButton } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import CopyMenuItems from '$lib/components/contents/details/editor/copy-menu-items.svelte';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { copyFromLocale } from '$lib/services/contents/draft/update/copy';\n  import { getLocaleLabel } from '$lib/services/contents/i18n';\n  import { translator } from '$lib/services/integrations/translators';\n\n  /**\n   * @import { InternalLocaleCode } from '$lib/types/private';\n   * @import { FieldKeyPath } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {'medium' | 'small'} [size] Button size.\n   * @property {InternalLocaleCode} locale Current pane’s locale.\n   * @property {InternalLocaleCode[]} otherLocales Other locales.\n   * @property {FieldKeyPath} [keyPath] Field key path.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    size = 'medium',\n    locale,\n    otherLocales,\n    keyPath = '',\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const { getSourceLanguage, getTargetLanguage } = $derived($translator ?? {});\n  const sourceDisabled = $derived(\n    !$entryDraft?.currentLocales[locale] || !getSourceLanguage(locale),\n  );\n</script>\n\n{#if otherLocales.length === 1}\n  {@const [otherLocale] = otherLocales}\n  {@const label = $_('translate_from_x', { values: { locale: getLocaleLabel(otherLocale) } })}\n  <!-- @todo Replace `title` with a native tooltip -->\n  <Button\n    variant=\"ghost\"\n    {size}\n    iconic\n    popupPosition=\"bottom-right\"\n    aria-label={label}\n    title={label}\n    disabled={sourceDisabled ||\n      !$entryDraft?.currentLocales[otherLocale] ||\n      !getTargetLanguage(otherLocale)}\n    onclick={() => {\n      copyFromLocale({\n        sourceLocale: otherLocale,\n        targetLocale: locale,\n        keyPath,\n        translate: true,\n      });\n    }}\n  >\n    {#snippet startIcon()}\n      <Icon name=\"translate\" />\n    {/snippet}\n  </Button>\n{:else}\n  <MenuButton\n    variant=\"ghost\"\n    {size}\n    iconic\n    popupPosition=\"bottom-right\"\n    aria-label={$_('translate')}\n    disabled={sourceDisabled}\n  >\n    {#snippet endIcon()}\n      <Icon name=\"translate\" />\n    {/snippet}\n    {#snippet popup()}\n      <Menu aria-label={$_('translation_options')}>\n        <CopyMenuItems {locale} {otherLocales} {keyPath} translate={true} />\n      </Menu>\n    {/snippet}\n  </MenuButton>\n{/if}\n","<script>\n  import { Icon } from '@sveltia/ui';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} id Alert ID referenced by `aria-errormessage`.\n   * @property {Snippet} children Slot content.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    id,\n    children,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div role=\"alert\" {id} class=\"validation\" aria-live=\"polite\">\n  <div role=\"none\">\n    <Icon name=\"error\" />\n    {@render children()}\n  </div>\n</div>\n\n<style lang=\"scss\">\n  .validation {\n    color: var(--sui-error-foreground-color) !important;\n    font-size: var(--sui-font-size-small);\n\n    div {\n      display: flex;\n      align-items: center;\n      gap: 4px;\n      margin: 4px 0;\n\n      :global(.icon) {\n        flex: none;\n        font-size: 16px; /* !hardcoded */\n      }\n    }\n  }\n</style>\n","<!--\n  @component\n  Implement the editor for the Boolean widget.\n  @see https://decapcms.org/docs/widgets/#boolean\n-->\n<script>\n  import { Switch } from '@sveltia/ui';\n\n  /**\n   * @import { WidgetEditorProps } from '$lib/types/private';\n   * @import { BooleanField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {BooleanField} fieldConfig Field configuration.\n   * @property {boolean | 'mixed' | undefined} currentValue Field value.\n   */\n\n  /** @type {WidgetEditorProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    fieldId,\n    currentValue = $bindable(),\n    required = true,\n    readonly = false,\n    invalid = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<Switch\n  bind:checked={currentValue}\n  {readonly}\n  {required}\n  {invalid}\n  aria-labelledby=\"{fieldId}-label\"\n  aria-errormessage=\"{fieldId}-error\"\n/>\n","<!--\n  @component\n  Implement the preview for the Boolean widget.\n  @see https://decapcms.org/docs/widgets/#boolean\n-->\n<script>\n  import { _ } from 'svelte-i18n';\n\n  /**\n   * @import { WidgetPreviewProps } from '$lib/types/private';\n   * @import { BooleanField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {BooleanField} fieldConfig Field configuration.\n   * @property {boolean | undefined} currentValue Field value.\n   */\n\n  /** @type {WidgetPreviewProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    currentValue = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n{#if typeof currentValue === 'boolean'}\n  <p>\n    {$_(`boolean.${currentValue}`)}\n  </p>\n{/if}\n","<!--\n  @component\n  Implement the editor for the Code widget.\n  @see https://decapcms.org/docs/widgets/#code\n-->\n<script>\n  import { CodeEditor } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import { getContext, untrack } from 'svelte';\n\n  import { entryDraft } from '$lib/services/contents/draft';\n\n  /**\n   * @import { FieldEditorContext, WidgetEditorProps } from '$lib/types/private';\n   * @import { CodeField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {CodeField} fieldConfig Field configuration.\n   * @property {string | {} | undefined} currentValue Field value.\n   */\n\n  /** @type {FieldEditorContext} */\n  const { valueStoreKey = 'currentValues' } = getContext('field-editor') ?? {};\n\n  /** @type {WidgetEditorProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    keyPath,\n    fieldId,\n    fieldConfig,\n    currentValue = $bindable(),\n    required = true,\n    readonly = false,\n    invalid = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  let code = $state('');\n  let lang = $state('');\n\n  const {\n    default_language: defaultLanguage = '',\n    allow_language_selection: showLanguageSwitcher = true,\n    output_code_only: outputCodeOnly = false,\n    keys: outputKeys = { code: 'code', lang: 'lang' },\n  } = $derived(fieldConfig);\n  const valueMap = $derived($state.snapshot($entryDraft?.[valueStoreKey][locale]) ?? {});\n  const codeKeyPath = $derived(`${keyPath}.${outputKeys.code}`);\n  const langKeyPath = $derived(`${keyPath}.${outputKeys.lang}`);\n\n  /**\n   * Update {@link code} and {@link lang} based on {@link currentValue}.\n   */\n  const setInputValue = () => {\n    if (outputCodeOnly) {\n      if (typeof currentValue !== 'string') {\n        code = '';\n      } else if (code !== currentValue) {\n        code = currentValue;\n      }\n    } else {\n      const _code = valueMap[codeKeyPath];\n      const _lang = valueMap[langKeyPath] || defaultLanguage;\n\n      if (typeof _code !== 'string') {\n        code = '';\n      } else if (code !== _code) {\n        code = _code;\n      }\n\n      if (typeof _lang !== 'string') {\n        lang = '';\n      } else if (lang !== _lang) {\n        lang = _lang;\n      }\n    }\n  };\n\n  /**\n   * Update {@link currentValue} based on {@link code} and {@link lang}.\n   */\n  const setCurrentValue = () => {\n    if (outputCodeOnly) {\n      if (currentValue !== code) {\n        currentValue = code;\n      }\n    } else if ($entryDraft) {\n      currentValue = {};\n\n      if (valueMap[codeKeyPath] !== code) {\n        $entryDraft[valueStoreKey][locale][codeKeyPath] = code;\n      }\n\n      if (valueMap[langKeyPath] !== lang) {\n        $entryDraft[valueStoreKey][locale][langKeyPath] = lang;\n      }\n    }\n  };\n\n  $effect(() => {\n    void [valueMap];\n\n    untrack(() => {\n      setInputValue();\n    });\n  });\n\n  $effect(() => {\n    void [code, lang];\n\n    untrack(() => {\n      setCurrentValue();\n    });\n  });\n</script>\n\n{#await sleep() then}\n  <!--\n    Reset the editor when the configuration changes. It happens when fields are reordered or removed\n    in a variable type list field. @see https://github.com/sveltia/sveltia-cms/issues/480\n  -->\n  {#key JSON.stringify(fieldConfig)}\n    <CodeEditor\n      bind:code\n      bind:lang\n      {showLanguageSwitcher}\n      flex\n      {readonly}\n      {required}\n      {invalid}\n      aria-labelledby=\"{fieldId}-label\"\n      aria-errormessage=\"{fieldId}-error\"\n    />\n  {/key}\n{/await}\n","<!--\n  @component\n  Implement the preview for the Code widget.\n  @see https://decapcms.org/docs/widgets/#code\n-->\n<script>\n  import { entryDraft } from '$lib/services/contents/draft';\n\n  /**\n   * @import { WidgetEditorProps } from '$lib/types/private';\n   * @import { CodeField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {CodeField} fieldConfig Field configuration.\n   * @property {string | {} | undefined} currentValue Field value.\n   */\n\n  /** @type {WidgetEditorProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    keyPath,\n    fieldConfig,\n    currentValue,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const {\n    default_language: defaultLanguage = '',\n    output_code_only: outputCodeOnly = false,\n    keys: outputKeys = { code: 'code', lang: 'lang' },\n  } = $derived(fieldConfig);\n  const valueMap = $derived($state.snapshot($entryDraft?.currentValues[locale]) ?? {});\n  const codeKeyPath = $derived(`${keyPath}.${outputKeys.code}`);\n  const langKeyPath = $derived(`${keyPath}.${outputKeys.lang}`);\n  const code = $derived(outputCodeOnly ? currentValue : valueMap[codeKeyPath]);\n  const lang = $derived(outputCodeOnly ? defaultLanguage : valueMap[langKeyPath]);\n</script>\n\n{#if code}\n  <pre class={lang ? `language-${lang}` : undefined}>{code}</pre>\n{/if}\n","<!--\n  @component\n  Implement the editor for the Color widget.\n  @see https://decapcms.org/docs/widgets/#color\n  @todo Replace the native `<input>` with a custom component.\n-->\n<script>\n  import { Button, Slider, TextInput } from '@sveltia/ui';\n  import { untrack } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  /**\n   * @import { WidgetEditorProps } from '$lib/types/private';\n   * @import { ColorField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {ColorField} fieldConfig Field configuration.\n   * @property {string | undefined} currentValue Field value.\n   */\n\n  /** @type {WidgetEditorProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    fieldId,\n    fieldConfig,\n    currentValue = $bindable(),\n    required = true,\n    readonly = false,\n    invalid = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  let inputValue = $state('');\n  let inputAlphaValue = $state(255);\n\n  const { allowInput = false, enableAlpha = false } = $derived(fieldConfig);\n\n  const id = $props.id();\n  const RGB_REGEX = /^#[0-9a-f]{6}$/;\n  const RGBA_REGEX = /^(?<rgb>#[0-9a-f]{6})(?<a>[0-9a-f]{2})?$/;\n\n  /**\n   * Update {@link inputValue} and {@link inputAlphaValue} based on {@link currentValue}.\n   */\n  const setInputValue = () => {\n    if (typeof currentValue !== 'string') {\n      return;\n    }\n\n    const { rgb: newValue, a: newAlphaHexValue = 'ff' } =\n      currentValue.match(RGBA_REGEX)?.groups ?? {};\n\n    // Avoid a cycle dependency & infinite loop\n    if (newValue && inputValue !== newValue) {\n      inputValue = newValue;\n    }\n\n    if (newValue && enableAlpha) {\n      const newAlphaIntValue = Number.parseInt(`0x${newAlphaHexValue}`, 16);\n\n      // Avoid a cycle dependency & infinite loop\n      if (inputAlphaValue !== newAlphaIntValue) {\n        inputAlphaValue = newAlphaIntValue;\n      }\n    }\n  };\n\n  /**\n   * Update {@link currentValue} based on {@link inputValue} and {@link inputAlphaValue}.\n   */\n  const setCurrentValue = () => {\n    let newValue = RGB_REGEX.test(inputValue) ? inputValue : '';\n\n    if (newValue && enableAlpha) {\n      newValue += inputAlphaValue.toString(16).padStart(2, '0');\n    }\n\n    // Avoid a cycle dependency & infinite loop\n    if (currentValue !== newValue) {\n      currentValue = newValue;\n    }\n  };\n\n  $effect(() => {\n    void [currentValue];\n\n    untrack(() => {\n      setInputValue();\n    });\n  });\n\n  $effect(() => {\n    void [inputValue, inputAlphaValue];\n\n    untrack(() => {\n      setCurrentValue();\n    });\n  });\n</script>\n\n<div role=\"none\">\n  <input\n    id=\"{id}-picker\"\n    type=\"color\"\n    bind:value={inputValue}\n    {readonly}\n    aria-invalid={invalid}\n    aria-readonly={readonly}\n    aria-required={required}\n    aria-labelledby=\"{fieldId}-label\"\n    aria-errormessage=\"{fieldId}-error\"\n  />\n  {#if allowInput || enableAlpha}\n    <span role=\"none\" class=\"value\">\n      {#if allowInput}\n        <TextInput\n          id=\"{id}-input\"\n          bind:value={inputValue}\n          {invalid}\n          {readonly}\n          {required}\n          aria-labelledby=\"{fieldId}-label\"\n          aria-errormessage=\"{fieldId}-error\"\n        />\n      {/if}\n      {#if enableAlpha}\n        {$_('opacity')}\n        <Slider\n          min={0}\n          max={255}\n          disabled={!inputValue}\n          bind:value={inputAlphaValue}\n          aria-label={$_('opacity')}\n        />\n      {/if}\n    </span>\n  {/if}\n  {#if !readonly && !required}\n    <Button\n      variant=\"tertiary\"\n      label={$_('clear')}\n      disabled={!inputValue}\n      aria-controls={`${id}-picker ${allowInput ? `${id}-input` : ''}`}\n      onclick={() => {\n        inputValue = '';\n        inputAlphaValue = 255;\n      }}\n    />\n  {/if}\n</div>\n\n<style lang=\"scss\">\n  div {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n\n    .value {\n      display: flex;\n      align-items: center;\n      gap: 8px;\n\n      :global {\n        .sui.text-input {\n          width: 80px;\n          min-width: 0;\n        }\n\n        .sui.slider {\n          padding: 8px;\n          --sui-slider-base-width: 80px;\n        }\n      }\n    }\n  }\n\n  input {\n    font-family: var(--sui-textbox-font-family);\n  }\n</style>\n","<!--\n  @component\n  Implement the preview for the Color widget.\n  @see https://decapcms.org/docs/widgets/#color\n-->\n<script>\n  /**\n   * @import { WidgetPreviewProps } from '$lib/types/private';\n   * @import { ColorField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {ColorField} fieldConfig Field configuration.\n   * @property {string | undefined} currentValue Field value.\n   */\n\n  /** @type {WidgetPreviewProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    fieldConfig,\n    currentValue,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const { enableAlpha = false } = $derived(fieldConfig);\n\n  /**\n   * Cast the given hex value to integer.\n   * @param {string} hex Hex value.\n   * @returns {number} Integer value.\n   */\n  const hexToInt = (hex) => Number.parseInt(`0x${hex}`, 16);\n\n  const RGBA_REGEX = /^#(?<r>[0-9a-f]{2})(?<g>[0-9a-f]{2})(?<b>[0-9a-f]{2})(?<a>[0-9a-f]{2})?$/;\n\n  const rgb = $derived.by(() => {\n    const { r, g, b, a } = currentValue?.match(RGBA_REGEX)?.groups ?? {};\n\n    return r\n      ? `rgb(${hexToInt(r)} ${hexToInt(g)} ${hexToInt(b)}` +\n          `${enableAlpha && a ? ` / ${Math.round((hexToInt(a) / 255) * 100)}%` : ''})`\n      : '';\n  });\n</script>\n\n{#if typeof currentValue === 'string' && currentValue.trim()}\n  <p>\n    <span role=\"none\" class=\"preview\">\n      <span role=\"none\" class=\"color\" style:background-color={currentValue}></span>\n      <span role=\"none\" class=\"value\">{currentValue}</span>\n      <span role=\"none\" class=\"value\">{rgb}</span>\n    </span>\n  </p>\n{/if}\n\n<style lang=\"scss\">\n  .preview {\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n\n    .color {\n      display: block;\n      width: 24px;\n      height: 24px;\n      border-radius: 24px;\n    }\n  }\n</style>\n","<!--\n  @component\n  Implement the editor for the experimental Compute widget. Note that this editor is hidden in\n  `FieldEditor` but still needed to compute the value.\n-->\n<script>\n  import { TextInput } from '@sveltia/ui';\n  import { getContext, untrack } from 'svelte';\n\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { getFieldDisplayValue } from '$lib/services/contents/entry/fields';\n  import { getListFormatter } from '$lib/services/contents/i18n';\n\n  /**\n   * @import { FieldEditorContext, WidgetEditorProps } from '$lib/types/private';\n   * @import { ComputeField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {ComputeField} fieldConfig Field configuration.\n   * @property {string | number | undefined} currentValue Field value.\n   */\n\n  /** @type {FieldEditorContext} */\n  const { valueStoreKey = 'currentValues' } = getContext('field-editor') ?? {};\n\n  /** @type {WidgetEditorProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    keyPath,\n    fieldId,\n    fieldConfig,\n    currentValue = $bindable(),\n    required = true,\n    readonly = false,\n    invalid = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const { value: valueTemplate = '' } = $derived(fieldConfig);\n  const isIndexFile = $derived($entryDraft?.isIndexFile ?? false);\n  const collectionName = $derived($entryDraft?.collectionName ?? '');\n  const fileName = $derived($entryDraft?.fileName);\n  const valueMap = $derived($state.snapshot($entryDraft?.[valueStoreKey][locale]) ?? {});\n  const listFormatter = $derived(getListFormatter(locale));\n\n  /**\n   * Get a list index found in the `keyPath`.\n   * @returns {number | undefined} Index.\n   * @see https://github.com/sveltia/sveltia-cms/issues/172\n   */\n  const getIndex = () => {\n    const [index] = keyPath.split('.').splice(-2, 1);\n\n    return index?.match(/^\\d+$/) ? Number(index) : undefined;\n  };\n\n  /**\n   * Update {@link currentValue} based on the current values.\n   */\n  const setCurrentValue = () => {\n    // Check if the `keyPath` is valid, otherwise a list item containing this compute field cannot\n    // be removed due to the `currentValue` update below\n    if (!Object.keys(valueMap).includes(keyPath)) {\n      return;\n    }\n\n    const newValue = (() => {\n      if (valueTemplate === '{{index}}') {\n        return getIndex() ?? '';\n      }\n\n      return valueTemplate.replaceAll(/{{(.+?)}}/g, (_match, tagName) => {\n        if (tagName === 'index') {\n          return String(getIndex() ?? '');\n        }\n\n        if (!tagName.startsWith('fields.')) {\n          return '';\n        }\n\n        const value = getFieldDisplayValue({\n          collectionName,\n          fileName,\n          valueMap,\n          keyPath: tagName.replace(/^fields\\./, ''),\n          locale,\n          isIndexFile,\n        });\n\n        return Array.isArray(value) ? listFormatter.format(value) : String(value);\n      });\n    })();\n\n    // Make sure to avoid infinite loops\n    if (currentValue !== newValue) {\n      currentValue = newValue;\n    }\n  };\n\n  $effect(() => {\n    void [valueMap];\n\n    untrack(() => {\n      setCurrentValue();\n    });\n  });\n</script>\n\n<TextInput\n  value={String(currentValue)}\n  flex\n  {readonly}\n  {required}\n  {invalid}\n  aria-labelledby=\"{fieldId}-label\"\n  aria-errormessage=\"{fieldId}-error\"\n/>\n","<!--\n  @component\n  Implement the preview for the experimental Compute widget.\n-->\n<script>\n  /**\n   * @import { WidgetPreviewProps } from '$lib/types/private';\n   * @import { StringField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {StringField} fieldConfig Field configuration.\n   * @property {string | number | undefined} currentValue Field value.\n   */\n\n  /** @type {WidgetPreviewProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    currentValue,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<p lang={locale} dir=\"auto\">{currentValue}</p>\n","<!--\n  @component\n  Implement the editor for the DataTime widget.\n  @see https://decapcms.org/docs/widgets/#datetime\n  @todo Replace the native `<input>` with a custom component.\n-->\n<script>\n  import { Button } from '@sveltia/ui';\n  import { untrack } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import {\n    getCurrentDateTime,\n    getCurrentValue,\n    getDate,\n    getInputValue,\n    parseDateTimeConfig,\n  } from '$lib/services/contents/widgets/date-time/helper';\n\n  /**\n   * @import { WidgetEditorProps } from '$lib/types/private';\n   * @import { DateTimeField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {DateTimeField} fieldConfig Field configuration.\n   * @property {string | undefined} currentValue Field value.\n   */\n\n  /** @type {WidgetEditorProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    fieldId,\n    fieldConfig,\n    currentValue = $bindable(),\n    required = true,\n    readonly = false,\n    invalid = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  let inputValue = $state('');\n\n  const { dateOnly, timeOnly, utc } = $derived(parseDateTimeConfig(fieldConfig));\n\n  /**\n   * Update {@link inputValue} based on {@link currentValue}.\n   */\n  const setInputValue = () => {\n    const _inputValue = getInputValue(currentValue, fieldConfig);\n\n    // Avoid a cycle dependency & infinite loop\n    if (_inputValue !== undefined && _inputValue !== inputValue) {\n      inputValue = _inputValue;\n    }\n  };\n\n  /**\n   * Update {@link currentValue} based on {@link inputValue}.\n   */\n  const setCurrentValue = () => {\n    const _currentValue = getCurrentValue(inputValue, currentValue, fieldConfig);\n\n    // Avoid a cycle dependency & infinite loop\n    if (\n      _currentValue !== undefined &&\n      _currentValue !== currentValue &&\n      // Compare the actual date/time: if a user edits an existing entry in a different location\n      // than where it was originally written, `inputValue` and `_currentValue` may shift to the\n      // current time zone, but the epoch won’t change. Don’t update `currentValue` in that case.\n      Number(getDate(_currentValue, fieldConfig)) !== Number(getDate(currentValue, fieldConfig))\n    ) {\n      currentValue = _currentValue;\n    }\n  };\n\n  $effect(() => {\n    void [currentValue];\n\n    untrack(() => {\n      setInputValue();\n    });\n  });\n\n  $effect(() => {\n    void [inputValue];\n\n    untrack(() => {\n      setCurrentValue();\n    });\n  });\n</script>\n\n<div role=\"none\">\n  <input\n    type={dateOnly ? 'date' : timeOnly ? 'time' : 'datetime-local'}\n    bind:value={inputValue}\n    {readonly}\n    aria-readonly={readonly}\n    aria-required={required}\n    aria-invalid={invalid}\n    aria-labelledby=\"{fieldId}-label\"\n    aria-errormessage=\"{fieldId}-error\"\n  />\n  {#if utc}\n    <span role=\"none\" class=\"utc\">UTC</span>\n  {/if}\n  {#if !readonly}\n    <Button\n      variant=\"tertiary\"\n      label={$_(dateOnly ? 'today' : 'now')}\n      onclick={() => {\n        const dt = getCurrentDateTime(fieldConfig);\n\n        inputValue = utc ? dt.replace(/:00\\.000Z$/, '') : dt;\n      }}\n    />\n  {/if}\n  {#if !readonly && !required}\n    <Button\n      variant=\"tertiary\"\n      label={$_('clear')}\n      disabled={!currentValue}\n      onclick={() => {\n        currentValue = '';\n      }}\n    />\n  {/if}\n</div>\n\n<style lang=\"scss\">\n  div {\n    display: flex;\n    align-items: center;\n  }\n\n  .utc {\n    margin: 0 8px;\n    color: var(--sui-secondary-foreground-color);\n    font-size: var(--sui-font-size-small);\n  }\n</style>\n","<!--\n  @component\n  Implement the preview for the DataTime widget.\n  @see https://decapcms.org/docs/widgets/#datetime\n-->\n<script>\n  import { getDateTimeFieldDisplayValue } from '$lib/services/contents/widgets/date-time/helper';\n\n  /**\n   * @import { WidgetPreviewProps } from '$lib/types/private';\n   * @import { DateTimeField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {DateTimeField} fieldConfig Field configuration.\n   * @property {string | undefined} currentValue Field value.\n   */\n\n  /** @type {WidgetPreviewProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    fieldConfig,\n    currentValue,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const displayValue = $derived(\n    getDateTimeFieldDisplayValue({ locale, fieldConfig, currentValue }),\n  );\n</script>\n\n{#if displayValue}\n  <p lang={locale} dir=\"auto\">\n    {displayValue}\n    {#if fieldConfig.picker_utc}\n      UTC\n    {/if}\n  </p>\n{/if}\n","<script>\n  import { Listbox } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [viewType] View type.\n   * @property {string} [gridId] The `id` attribute of the inner listbox.\n   * @property {boolean} [showTitle] Whether to show the file name or title under the image while in\n   * grid view.\n   * @property {(detail: { value: string }) => void} [onChange] Custom `change` event handler.\n   * @property {Snippet} [children] Slot content.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    viewType = 'grid',\n    gridId = undefined,\n    showTitle = false,\n    onChange = undefined,\n    children = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div role=\"none\" class=\"wrapper\" class:show-title={showTitle}>\n  <Listbox\n    id={gridId}\n    class={viewType}\n    aria-label={$_('assets_dialog.available_images')}\n    onChange={(event) => {\n      onChange?.(event.detail);\n    }}\n  >\n    {@render children?.()}\n  </Listbox>\n</div>\n\n<style lang=\"scss\">\n  .wrapper {\n    display: contents;\n\n    :global {\n      .listbox {\n        gap: 4px;\n        overflow-x: hidden;\n        overflow-y: auto;\n        border-width: 0;\n        max-height: calc(100% - var(--sui-focus-ring-width) * 2);\n\n        .option {\n          button {\n            border-radius: var(--sui-control-medium-border-radius);\n            padding: 4px;\n            width: 100%;\n            height: auto;\n            transition: none;\n\n            &:focus-visible {\n              outline-color: transparent;\n            }\n\n            .preview {\n              flex: none;\n              border-radius: var(--sui-control-medium-border-radius);\n              aspect-ratio: 1 / 1;\n              object-fit: contain;\n            }\n          }\n        }\n\n        .name {\n          min-height: calc(var(--sui-font-size-default) * 2);\n          white-space: normal;\n          line-height: var(--sui-line-height-compact);\n        }\n      }\n\n      .listbox.grid {\n        display: grid;\n        grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));\n        height: auto;\n        max-height: none;\n\n        .option {\n          button {\n            flex-direction: column;\n            justify-content: flex-start;\n\n            .preview {\n              width: 100%;\n              height: auto;\n            }\n\n            .name {\n              flex: none;\n              margin: 4px 0 12px;\n              padding: 0 8px;\n              width: 100%;\n              min-height: calc(var(--sui-font-size-default) * 3);\n            }\n          }\n        }\n\n        button[aria-selected='true'] {\n          outline-offset: -2px;\n          outline-width: 2px !important;\n          outline-style: solid;\n          outline-color: var(--sui-primary-accent-color-light);\n        }\n      }\n\n      &:not(.wrapper.show-title) .listbox.grid .option .name {\n        position: absolute;\n        left: -99999px;\n      }\n\n      .listbox.list {\n        .option {\n          button {\n            gap: 16px;\n\n            .preview {\n              width: 64px;\n            }\n\n            .name {\n              flex: auto;\n              padding-inline: 0 8px;\n            }\n          }\n\n          button[aria-selected='true'] {\n            outline-offset: -2px;\n            outline-width: 2px !important;\n            outline-style: solid;\n            outline-color: var(--sui-primary-accent-color-light);\n          }\n        }\n      }\n    }\n  }\n</style>\n","<script>\n  import { Icon } from '@sveltia/ui';\n  import { waitForVisibility } from '@sveltia/utils/element';\n  import { flushSync } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import { getAssetBlobURL, getAssetThumbnailURL } from '$lib/services/assets/info';\n\n  /**\n   * @import { Asset, AssetKind } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {AssetKind} kind Asset type.\n   * @property {'lazy' | 'eager'} [loading] Loading method.\n   * @property {Asset} [asset] Asset.\n   * @property {string} [src] Source URL.\n   * @property {'tile' | 'icon'} [variant] Style variant.\n   * @property {boolean} [blurBackground] Whether to show a blurred background (like Slack’s media\n   * overlay).\n   * @property {boolean} [cover] Whether to use `object-fit: cover`.\n   * @property {boolean} [checkerboard] Whether to show a checkerboard background below a\n   * transparent image.\n   * @property {boolean} [dissolve] Whether to add a short dissolve transition (fade-in effect) to\n   * the image/video when it’s first loaded to avoid a sudden appearance.\n   * @property {string} [alt] Alt text for the image.\n   * @property {boolean} [controls] Whether to show controls for audio/video. If this is `false` and\n   * {@link kind} is `audio`, an icon will be displayed instead.\n   */\n\n  /** @type {Props & Record<string, any>} */\n  let {\n    /* eslint-disable prefer-const */\n    kind,\n    loading = 'lazy',\n    asset = undefined,\n    src = $bindable(undefined),\n    variant = undefined,\n    blurBackground = false,\n    cover = false,\n    checkerboard = false,\n    dissolve = true,\n    alt = '',\n    controls = false,\n    ...rest\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {HTMLImageElement | HTMLMediaElement | undefined} */\n  let mediaElement = $state();\n  let hasError = $state(false);\n  let loaded = $state(false);\n  /** @type {string | undefined} */\n  let blurImageURL = $state();\n\n  const isThumbnail = $derived(!!asset && !!variant && !controls);\n  const isImage = $derived(isThumbnail || kind === 'image' || asset?.name.endsWith('.pdf'));\n\n  let updatingSrc = false;\n\n  /**\n   * Update the {@link src} property.\n   */\n  const updateSrc = async () => {\n    if (!asset || !mediaElement || updatingSrc) {\n      return;\n    }\n\n    updatingSrc = true;\n    hasError = false;\n\n    if (loading === 'lazy') {\n      await waitForVisibility(mediaElement);\n    }\n\n    try {\n      src = isThumbnail ? await getAssetThumbnailURL(asset) : await getAssetBlobURL(asset);\n    } catch {\n      hasError = true;\n    }\n\n    if (blurBackground && !blurImageURL && src) {\n      blurImageURL = src;\n    }\n\n    updatingSrc = false;\n\n    // For some reason this is required to update the `$effect` calling `checkLoaded()`, otherwise\n    // navigating from `/assets` to `/assets/<collection>` on small screen leaves the preview empty\n    flushSync();\n  };\n\n  /**\n   * Update the {@link loaded} state when the media is loaded.\n   */\n  const checkLoaded = async () => {\n    if (!mediaElement || !src) {\n      return;\n    }\n\n    if (\n      isImage\n        ? !(/** @type {HTMLImageElement} */ (mediaElement).complete)\n        : !(/** @type {HTMLMediaElement} */ (mediaElement).readyState)\n    ) {\n      // Not loaded yet; wait until it’s ready\n      await new Promise((resolve) => {\n        mediaElement?.addEventListener(\n          isImage ? 'load' : 'loadedmetadata',\n          () => {\n            resolve(undefined);\n          },\n          { once: true },\n        );\n      });\n    }\n\n    // Enable a dissolve transition\n    if (dissolve) {\n      await waitForVisibility(mediaElement);\n    }\n\n    loaded = true;\n\n    // Revoke the thumbnail blob URL\n    if (asset && isThumbnail && src.startsWith('blob:')) {\n      URL.revokeObjectURL(src);\n    }\n  };\n\n  $effect(() => {\n    if (asset && !blurImageURL) {\n      (async () => {\n        blurImageURL = await getAssetThumbnailURL(asset, { cacheOnly: true });\n      })();\n    }\n  });\n\n  $effect(() => {\n    if (mediaElement && asset) {\n      updateSrc();\n    }\n  });\n\n  $effect(() => {\n    if (mediaElement && src) {\n      checkLoaded();\n    }\n  });\n</script>\n\n<div\n  role=\"none\"\n  class=\"preview {variant}\"\n  class:cover\n  class:checkerboard\n  class:dissolve\n  class:loaded\n>\n  {#if hasError}\n    <Icon name=\"draft\" />\n  {:else if isImage}\n    <img {loading} {src} {alt} {...rest} bind:this={mediaElement} />\n  {:else if kind === 'video'}\n    <!-- svelte-ignore a11y_media_has_caption -->\n    <video {src} controls={controls || undefined} playsinline {...rest} bind:this={mediaElement}\n    ></video>\n  {:else if kind === 'audio'}\n    {#if controls}\n      <audio {src} controls playsinline {...rest} bind:this={mediaElement}></audio>\n    {:else}\n      <Icon name=\"audio_file\" />\n    {/if}\n  {:else}\n    <Icon name=\"draft\" />\n  {/if}\n  {#if blurBackground}\n    <div role=\"none\" class=\"blur\">\n      <div role=\"status\" class=\"overlay\">\n        {#if !isThumbnail && !loaded}\n          {$_('loading')}\n        {/if}\n      </div>\n      <img role=\"none\" loading=\"lazy\" src={blurImageURL} alt=\"\" class:loaded={!!blurImageURL} />\n    </div>\n  {/if}\n</div>\n\n<style lang=\"scss\">\n  .preview {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    position: relative;\n    width: 100%;\n    height: 100%;\n\n    &.tile {\n      border-width: 1px;\n      border-style: solid;\n      border-color: transparent;\n      padding: var(--tile-padding, 12px);\n\n      :global(.sui.icon) {\n        font-size: 48px;\n      }\n    }\n\n    &.icon {\n      border-radius: var(--sui-control-medium-border-radius);\n      width: var(--icon-size, 32px);\n      height: var(--icon-size, 32px);\n    }\n\n    &:is(.tile, .icon) {\n      overflow: hidden;\n      aspect-ratio: 1 / 1;\n\n      img {\n        // Prevent the image from being dragged\n        pointer-events: none;\n      }\n    }\n\n    .blur {\n      display: contents;\n\n      & > * {\n        position: absolute;\n        inset: 0;\n        pointer-events: none;\n      }\n\n      .overlay {\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        z-index: -1;\n        backdrop-filter: blur(32px) brightness(0.8);\n      }\n\n      img {\n        width: 100%;\n        height: 100%;\n        z-index: -2;\n        object-fit: cover;\n        transform: scale(1.2);\n\n        &.loaded {\n          opacity: 1;\n        }\n      }\n    }\n\n    &.cover {\n      padding: 0;\n\n      & > :is(:global(img, video)) {\n        flex: auto;\n      }\n    }\n\n    & > :is(:global(img, video)) {\n      flex: 0;\n      max-width: 100%;\n      max-height: 100%;\n    }\n\n    &.dissolve {\n      :is(:global(img, video)) {\n        opacity: 0;\n        transition: opacity 250ms;\n      }\n\n      &.loaded {\n        :is(:global(img, video)) {\n          opacity: 1;\n        }\n      }\n    }\n  }\n\n  img {\n    /* prettier-ignore */\n    .checkerboard & {\n      // hardcoded, the same color as the checkerboard in Photoshop\n      background-image:\n        linear-gradient(45deg, #ccc 25%, transparent 25%, transparent 75%, #ccc 75%),\n        linear-gradient(45deg, #ccc 25%, #fff 25%, #fff 75%, #ccc 75%);\n      background-size: 8px 8px;\n      background-position: 0 0, 4px 4px;\n    }\n\n    :not(.checkerboard) & {\n      // hardcoded, the same color as the transparent image preview in Chrome and Firefox\n      background-color: #e5e5e5;\n    }\n  }\n\n  :is(:global(img, video)) {\n    object-fit: contain;\n\n    &:not([src]) {\n      visibility: hidden;\n    }\n\n    .cover & {\n      object-fit: cover;\n      aspect-ratio: 1 / 1;\n    }\n  }\n</style>\n","import { writable } from 'svelte/store';\n\n/**\n * Whether the app is displayed on a small screen (mobile).\n */\nexport const isSmallScreen = writable(false);\n\n/**\n * Whether the app is displayed on a medium screen (tablet).\n */\nexport const isMediumScreen = writable(false);\n\n/**\n * Whether the app is displayed on a large screen (desktop).\n */\nexport const isLargeScreen = writable(false);\n\n/**\n * Whether the user has a mouse.\n */\nexport const hasMouse = writable(true);\n\n/**\n * Initialize the screen side detection. This should be called within `onMount()`.\n */\nexport const initUserEnvDetection = () => {\n  const mqlSmall = globalThis.matchMedia('(width < 768px)');\n  const mqlMedium = globalThis.matchMedia('(768px <= width < 1024px)');\n  const mqlLarge = globalThis.matchMedia('(1024px <= width)');\n  const mqlPointer = globalThis.matchMedia('(pointer: fine)');\n  /* eslint-disable jsdoc/require-jsdoc */\n  const isSmallScreenSetter = () => isSmallScreen.set(mqlSmall.matches);\n  const isMediumScreenSetter = () => isMediumScreen.set(mqlMedium.matches);\n  const isLargeScreenSetter = () => isLargeScreen.set(mqlLarge.matches);\n  const hasMouseSetter = () => hasMouse.set(mqlPointer.matches);\n  /* eslint-enable jsdoc/require-jsdoc */\n\n  isSmallScreenSetter();\n  isMediumScreenSetter();\n  isLargeScreenSetter();\n  hasMouseSetter();\n\n  mqlSmall.addEventListener('change', isSmallScreenSetter);\n  mqlMedium.addEventListener('change', isMediumScreenSetter);\n  mqlLarge.addEventListener('change', isLargeScreenSetter);\n  mqlPointer.addEventListener('change', hasMouseSetter);\n};\n","<!--\n  @component\n  Implement a panel that allows searching media files from an external media library and selecting\n  one for an image/file entry field.\n-->\n<script>\n  import {\n    Button,\n    EmptyState,\n    InfiniteScroll,\n    Option,\n    PasswordInput,\n    TextInput,\n  } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import DOMPurify from 'isomorphic-dompurify';\n  import { onMount } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import SimpleImageGrid from '$lib/components/assets/browser/simple-image-grid.svelte';\n  import AssetPreview from '$lib/components/assets/shared/asset-preview.svelte';\n  import { selectAssetsView } from '$lib/services/contents/editor';\n  import { isSmallScreen } from '$lib/services/user/env';\n  import { prefs } from '$lib/services/user/prefs';\n\n  /**\n   * @import {\n   * AssetKind,\n   * ExternalAsset,\n   * MediaLibraryService,\n   * SelectedResource,\n   * } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {AssetKind} [kind] Asset kind.\n   * @property {string} [searchTerms] Search terms for filtering assets.\n   * @property {MediaLibraryService} serviceProps Media library service details.\n   * @property {string} [gridId] The `id` attribute of the inner listbox.\n   * @property {(resource: SelectedResource) => void} [onSelect] Custom `Select` event handler.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    kind = 'image',\n    searchTerms = '',\n    serviceProps,\n    gridId = undefined,\n    onSelect = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const {\n    serviceType = 'stock_assets',\n    serviceId = '',\n    serviceLabel = '',\n    hotlinking = false,\n    authType = 'api_key',\n    developerURL = '',\n    apiKeyURL = '',\n    apiKeyPattern,\n    init,\n    signIn,\n    search,\n  } = $derived(serviceProps);\n\n  const input = $state({ userName: '', password: '' });\n  let hasConfig = $state(true);\n  let hasAuthInfo = $state(false);\n  let apiKey = $state('');\n  let userName = $state('');\n  let password = $state('');\n  /** @type {'initial' | 'requested' | 'success' | 'error'} */\n  let authState = $state('initial');\n  /** @type {ExternalAsset[] | null} */\n  let searchResults = $state(null);\n  /** @type {string | undefined} */\n  let error = $state();\n\n  let debounceTimer = 0;\n\n  /**\n   * Search assets.\n   * @param {string} [query] Search query.\n   */\n  const searchAssets = async (query = '') => {\n    searchResults = null;\n\n    try {\n      searchResults = await search(query, { kind, apiKey, userName, password });\n    } catch (ex) {\n      error = 'search_fetch_failed';\n      // eslint-disable-next-line no-console\n      console.error(ex);\n    }\n  };\n\n  /**\n   * Download the selected asset, if needed, and notify the file and credit. If hotlinking is\n   * required by the service, just notify the URL instead of downloading the file.\n   * @param {ExternalAsset} asset Selected asset.\n   * @todo Support video files.\n   */\n  const selectAsset = async (asset) => {\n    const { downloadURL, fileName, credit } = asset;\n\n    if (hotlinking) {\n      onSelect?.({ url: downloadURL, credit });\n\n      return;\n    }\n\n    try {\n      const response = await fetch(downloadURL);\n      const { ok, status } = response;\n\n      if (!ok) {\n        throw new Error(`The response returned with HTTP status ${status}.`);\n      }\n\n      const blob = await response.blob();\n      const file = new File([blob], fileName, { type: blob.type });\n\n      onSelect?.({ file, credit });\n    } catch (ex) {\n      error = 'image_fetch_failed';\n      // eslint-disable-next-line no-console\n      console.error(ex);\n    }\n  };\n\n  onMount(() => {\n    (async () => {\n      if (typeof init === 'function') {\n        hasConfig = false;\n        hasConfig = await init();\n      }\n\n      if (!hasConfig) {\n        return;\n      }\n\n      apiKey = $prefs.apiKeys?.[serviceId] ?? '';\n      [userName, password] = ($prefs.logins?.[serviceId] ?? '').split(' ');\n      hasAuthInfo = !!apiKey || !!password;\n      searchResults = null;\n\n      if (hasAuthInfo) {\n        searchAssets();\n      }\n    })();\n  });\n\n  $effect(() => {\n    void [searchTerms];\n    window.clearTimeout(debounceTimer);\n    debounceTimer = window.setTimeout(() => {\n      if (hasAuthInfo) {\n        searchAssets(searchTerms);\n      }\n    }, 1000);\n  });\n</script>\n\n{#if hasAuthInfo}\n  {#if error}\n    <EmptyState>\n      <span role=\"alert\">{$_(`assets_dialog.error.${error}`)}</span>\n    </EmptyState>\n  {:else if !searchResults}\n    <EmptyState>\n      <span role=\"alert\">{$_('searching')}</span>\n    </EmptyState>\n  {:else if !searchResults.length}\n    <EmptyState>\n      <span role=\"alert\">{$_('no_files_found')}</span>\n    </EmptyState>\n  {:else}\n    <SimpleImageGrid\n      {gridId}\n      viewType={$selectAssetsView?.type}\n      onChange={({ value }) => {\n        const asset = searchResults?.find(({ id }) => id === value);\n\n        if (asset) {\n          selectAsset(asset);\n        }\n      }}\n    >\n      <InfiniteScroll items={searchResults} itemKey=\"id\">\n        {#snippet renderItem(/** @type {ExternalAsset} */ asset)}\n          {#await sleep() then}\n            {@const { id, previewURL, description, kind: _kind } = asset}\n            <Option label=\"\" value={id}>\n              {#snippet checkIcon()}\n                <!-- Remove check icon -->\n              {/snippet}\n              <AssetPreview kind={_kind} src={previewURL} variant=\"tile\" crossorigin=\"anonymous\" />\n              {#if !$isSmallScreen || $selectAssetsView?.type === 'list'}\n                <span role=\"none\" class=\"name\">{description}</span>\n              {/if}\n            </Option>\n          {/await}\n        {/snippet}\n      </InfiniteScroll>\n    </SimpleImageGrid>\n  {/if}\n{:else if hasConfig}\n  <EmptyState>\n    <p role=\"alert\">\n      {#if serviceType === 'stock_assets'}\n        {@html DOMPurify.sanitize(\n          $_('prefs.media.stock_photos.description', {\n            values: {\n              service: serviceLabel,\n              homeHref: `href=\"${developerURL}\"`,\n              apiKeyHref: `href=\"${apiKeyURL}\"`,\n            },\n          }),\n          { ALLOWED_TAGS: ['a'], ALLOWED_ATTR: ['href', 'target', 'rel'] },\n        )}\n      {/if}\n      {#if serviceType === 'cloud_storage'}\n        {@html DOMPurify.sanitize(\n          $_(`cloud_storage.auth.${authState}`, {\n            values: {\n              service: serviceLabel,\n            },\n          }),\n          { ALLOWED_TAGS: ['a'], ALLOWED_ATTR: ['href', 'target', 'rel'] },\n        )}\n      {/if}\n    </p>\n    {#if authType === 'api_key'}\n      <div role=\"none\" class=\"input-outer\">\n        <TextInput\n          flex\n          spellcheck=\"false\"\n          aria-label={$_('prefs.media.stock_photos.field_label', {\n            values: { service: serviceLabel },\n          })}\n          oninput={(event) => {\n            const _value = /** @type {HTMLInputElement} */ (event.target).value.trim();\n\n            if (apiKeyPattern?.test(_value)) {\n              apiKey = _value;\n              hasAuthInfo = true;\n              $prefs.apiKeys ??= {};\n              $prefs.apiKeys[serviceId] = apiKey;\n              searchAssets();\n            }\n          }}\n        />\n      </div>\n    {/if}\n    {#if authType === 'password'}\n      <div role=\"none\" class=\"input-outer\">\n        <TextInput\n          flex\n          spellcheck=\"false\"\n          aria-label={$_('user_name')}\n          disabled={authState === 'requested'}\n          bind:value={input.userName}\n        />\n      </div>\n      <div role=\"none\" class=\"input-outer\">\n        <PasswordInput\n          aria-label={$_('password')}\n          disabled={authState === 'requested'}\n          bind:value={input.password}\n        />\n      </div>\n      <div role=\"none\" class=\"input-outer\">\n        <Button\n          variant=\"secondary\"\n          label={$_('sign_in')}\n          disabled={!input.userName || !input.password || authState === 'requested'}\n          onclick={async () => {\n            authState = 'requested';\n            input.userName = input.userName.trim();\n            input.password = input.password.trim();\n\n            if (await signIn?.(input.userName, input.password)) {\n              authState = 'success';\n              userName = input.userName;\n              password = input.password;\n              hasAuthInfo = true;\n              $prefs.logins ??= {};\n              $prefs.logins[serviceId] = [userName, password].join(' ');\n              searchAssets();\n            } else {\n              authState = 'error';\n            }\n          }}\n        />\n      </div>\n    {/if}\n  </EmptyState>\n{:else}\n  <EmptyState>\n    <span role=\"alert\">{$_('cloud_storage.invalid')}</span>\n  </EmptyState>\n{/if}\n\n<style lang=\"scss\">\n  p {\n    margin: 0 0 8px;\n  }\n\n  .input-outer {\n    width: 400px;\n    max-width: 100%;\n    text-align: center;\n  }\n</style>\n","/**\n * Normalize the given string for search value comparison. Since `transliterate` is slow, we only\n * apply basic normalization.\n * @param {string} value Original value.\n * @returns {string} Normalized value.\n */\nexport const normalize = (value) => {\n  value = value.trim();\n\n  if (!value) {\n    return '';\n  }\n\n  return value\n    .normalize('NFD')\n    .replace(/\\p{Diacritic}/gu, '')\n    .toLocaleLowerCase();\n};\n\n/**\n * Check if the given label matches the search terms.\n * @param {object} args Arguments.\n * @param {string} args.value Value to check against.\n * @param {string} args.terms Search terms.\n * @returns {boolean} Result of the match check.\n */\nexport const hasMatch = ({ value, terms }) => normalize(value).includes(terms);\n","<script>\n  import { EmptyState, InfiniteScroll, Option, TruncatedText } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import { stripSlashes } from '@sveltia/utils/string';\n  import equal from 'fast-deep-equal';\n  import DOMPurify from 'isomorphic-dompurify';\n  import { _ } from 'svelte-i18n';\n\n  import SimpleImageGrid from '$lib/components/assets/browser/simple-image-grid.svelte';\n  import AssetPreview from '$lib/components/assets/shared/asset-preview.svelte';\n  import { normalize } from '$lib/services/search/util';\n  import { isSmallScreen } from '$lib/services/user/env';\n\n  /**\n   * @import { Asset, SelectedResource, ViewType } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Asset[]} [assets] Asset list.\n   * @property {SelectedResource} [selectedResource] Selected resource.\n   * @property {ViewType} [viewType] View type.\n   * @property {string} [searchTerms] Search terms for filtering assets.\n   * @property {string} [basePath] Path to an asset folder, if any folder is selected.\n   * @property {string} [gridId] The `id` attribute of the inner listbox.\n   * @property {boolean} [checkerboard] Whether to show a checkerboard background below a\n   * transparent image.\n   * @property {(detail: { asset: Asset }) => void} [onSelect] Custom `select` event handler.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    assets = [],\n    selectedResource = $bindable(),\n    viewType = 'grid',\n    searchTerms = '',\n    basePath = undefined,\n    gridId = undefined,\n    checkerboard = false,\n    onSelect = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const filteredAssets = $derived(\n    searchTerms ? assets.filter(({ name }) => normalize(name).includes(searchTerms)) : assets,\n  );\n</script>\n\n{#snippet getLabel(/** @type {string} */ str)}\n  <!-- Allow to line-break after a hyphen, underscore and dot -->\n  {@html DOMPurify.sanitize(str.replace(/([-_.])/g, '$1<wbr>'), { ALLOWED_TAGS: ['wbr'] })}\n{/snippet}\n\n{#if filteredAssets.length}\n  <div role=\"none\" class=\"grid-wrapper\">\n    <SimpleImageGrid\n      {gridId}\n      {viewType}\n      showTitle={true}\n      onChange={({ value }) => {\n        const asset = /** @type {Asset} */ (assets.find(({ path }) => path === value));\n\n        selectedResource = { asset };\n        onSelect?.({ asset });\n      }}\n    >\n      <InfiniteScroll items={filteredAssets} itemKey=\"path\">\n        {#snippet renderItem(/** @type {Asset} */ asset)}\n          {#await sleep() then}\n            {@const { kind, name, path, unsaved, folder } = asset}\n            <!-- Show asset path relative to the base folder, or just file name -->\n            {@const relPath =\n              basePath && !folder.entryRelative ? stripSlashes(path.replace(basePath, '')) : name}\n            {@const pathArray = relPath.split('/')}\n            <Option label=\"\" value={path} selected={equal(asset, selectedResource?.asset)}>\n              {#snippet checkIcon()}\n                <!-- Remove check icon -->\n              {/snippet}\n              {#if viewType === 'grid' && unsaved}\n                <div role=\"none\" class=\"unsaved\">{$_('assets_dialog.unsaved')}</div>\n              {/if}\n              <AssetPreview {kind} {asset} variant=\"tile\" {checkerboard} />\n              {#if !$isSmallScreen || viewType === 'list'}\n                <span role=\"none\" class=\"name\">\n                  <TruncatedText lines={2}>\n                    {#each pathArray as segment, index}\n                      {#if index === pathArray.length - 1}\n                        <!-- File name -->\n                        <strong>{@render getLabel(segment)}</strong>\n                      {:else}\n                        <!-- Folder name -->\n                        {@render getLabel(segment)}/\n                      {/if}\n                    {/each}\n                  </TruncatedText>\n                  {#if viewType === 'list' && unsaved}\n                    <div role=\"none\" class=\"unsaved\">{$_('assets_dialog.unsaved')}</div>\n                  {/if}\n                </span>\n              {/if}\n            </Option>\n          {/await}\n        {/snippet}\n      </InfiniteScroll>\n    </SimpleImageGrid>\n  </div>\n{:else}\n  <EmptyState>\n    <span role=\"none\">{$_('no_files_found')}</span>\n  </EmptyState>\n{/if}\n\n<style lang=\"scss\">\n  .grid-wrapper {\n    overflow-y: auto;\n    height: 100%;\n\n    :global {\n      [role='listbox'] {\n        background-color: transparent;\n\n        &.grid {\n          [role='option'] {\n            position: relative;\n          }\n\n          .unsaved {\n            position: absolute;\n            inset: 4px 4px auto auto;\n            z-index: 1;\n          }\n        }\n\n        &.list {\n          .name {\n            display: flex;\n            gap: 8px;\n            align-items: center;\n            justify-content: space-between;\n          }\n        }\n      }\n    }\n  }\n\n  .unsaved {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    border-color: var(--sui-info-border-color);\n    border-radius: 4px;\n    padding: 2px 6px;\n    color: var(--sui-info-foreground-color);\n    background-color: var(--sui-info-background-color);\n    font-size: var(--sui-font-size-small);\n  }\n\n  .name {\n    color: var(--sui-tertiary-foreground-color);\n\n    strong {\n      color: var(--sui-primary-foreground-color);\n      font-weight: var(--sui-font-weight-normal);\n    }\n  }\n</style>\n","<script>\n  import AssetPreview from '$lib/components/assets/shared/asset-preview.svelte';\n\n  /**\n   * @import { Asset } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {'lazy' | 'eager'} [loading] Loading method.\n   * @property {Asset} [asset] Asset.\n   * @property {string} [src] Source URL.\n   * @property {'tile' | 'icon'} [variant] Style variant.\n   * @property {boolean} [blurBackground] Whether to show a blurred background (like Slack’s media\n   * overlay).\n   * @property {boolean} [cover] Whether to use `object-fit: cover`.\n   * @property {boolean} [checkerboard] Whether to show a checkerboard background below a\n   * transparent image.\n   * @property {string} [alt] Alt text for the image.\n   */\n\n  /** @type {Props & Record<string, any>} */\n  let {\n    /* eslint-disable prefer-const */\n    loading = 'lazy',\n    asset = undefined,\n    src = undefined,\n    variant = undefined,\n    blurBackground = false,\n    cover = false,\n    checkerboard = false,\n    alt = '',\n    ...rest\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<AssetPreview\n  kind=\"image\"\n  {loading}\n  {asset}\n  {src}\n  {variant}\n  {blurBackground}\n  {cover}\n  {checkerboard}\n  {alt}\n  {...rest}\n/>\n","<script>\n  import { Button, Icon, TruncatedText } from '@sveltia/ui';\n  import { getPathInfo } from '@sveltia/utils/file';\n  import { sleep } from '@sveltia/utils/misc';\n  import { _, locale as appLocale } from 'svelte-i18n';\n\n  import Image from '$lib/components/assets/shared/image.svelte';\n  import { formatSize } from '$lib/services/utils/file';\n  import { SUPPORTED_IMAGE_TYPES } from '$lib/services/utils/media/image';\n\n  /**\n   * @typedef {object} Props\n   * @property {File[]} files File list.\n   * @property {WeakMap<File, File>} [transformedFileMap] Mapping of transformed files and the\n   * originals.\n   * @property {boolean} [removable] Whether to show the Remove button on each row.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    files = $bindable([]),\n    transformedFileMap = undefined,\n    removable = true,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div role=\"list\" class=\"files\">\n  {#each files as file, index}\n    {#await sleep() then}\n      {@const { name, type, size } = file}\n      {@const originalFile = transformedFileMap?.get(file)}\n      <div role=\"listitem\" class=\"file\">\n        {#if SUPPORTED_IMAGE_TYPES.includes(type)}\n          <Image src={URL.createObjectURL(file)} variant=\"icon\" checkerboard={true} />\n        {:else}\n          <span role=\"none\" class=\"image\">\n            <Icon name=\"draft\" />\n          </span>\n        {/if}\n        <div role=\"none\" class=\"info\">\n          <div role=\"none\" class=\"name\">\n            <TruncatedText>\n              {name.normalize()}\n            </TruncatedText>\n          </div>\n          <div role=\"none\" class=\"meta\">\n            {#key $appLocale}\n              {$_('file_meta', {\n                values: {\n                  type: $_(`file_type_labels.${file.type.split('/')[1]}`, {\n                    default: getPathInfo(name).extension?.toUpperCase(),\n                  }),\n                  size: formatSize(size),\n                },\n              })}\n            {/key}\n            {#if originalFile && originalFile.type !== file.type}\n              {$_('file_meta_converted_from_x', {\n                values: {\n                  type: $_(`file_type_labels.${originalFile.type.split('/')[1]}`, {\n                    default: getPathInfo(originalFile.name).extension?.toUpperCase(),\n                  }),\n                },\n              })}\n            {/if}\n          </div>\n        </div>\n        <Button\n          variant=\"ghost\"\n          iconic\n          aria-label={$_('remove')}\n          hidden={!removable || files.length === 1}\n          onclick={(event) => {\n            event.stopPropagation();\n            files.splice(index, 1);\n          }}\n        >\n          <Icon name=\"close\" />\n        </Button>\n      </div>\n    {/await}\n  {/each}\n</div>\n\n<style lang=\"scss\">\n  .files {\n    display: flex;\n    flex-direction: column;\n    gap: 16px;\n    margin: 0 8px;\n  }\n\n  .file {\n    display: flex;\n    align-items: center;\n    gap: 16px;\n    overflow: hidden;\n\n    :global(.preview) {\n      flex: none;\n    }\n\n    .image {\n      flex: none;\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      width: 40px;\n      height: 40px;\n      aspect-ratio: 1 / 1;\n      object-fit: cover;\n      border-radius: var(--sui-control-medium-border-radius);\n      background-color: var(--sui-tertiary-background-color);\n    }\n\n    .info {\n      flex: auto;\n      display: flex;\n      flex-direction: column;\n      gap: 4px;\n      overflow: hidden;\n      text-align: left;\n\n      .meta {\n        font-size: var(--sui-font-size-small);\n        color: var(--sui-secondary-foreground-color);\n      }\n    }\n  }\n</style>\n","<script>\n  import { AlertDialog, Button, FilePicker, Icon } from '@sveltia/ui';\n  import { scanFiles } from '@sveltia/utils/file';\n  import { onMount } from 'svelte';\n  import { _, locale as appLocale } from 'svelte-i18n';\n\n  import UploadAssetsPreview from '$lib/components/assets/shared/upload-assets-preview.svelte';\n  import { getListFormatter } from '$lib/services/contents/i18n';\n  import { hasMouse } from '$lib/services/user/env';\n  import { SUPPORTED_IMAGE_TYPES } from '$lib/services/utils/media/image';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [accept] The `accept` attribute for the `<input type=\"file\">`.\n   * @property {boolean} [disabled] Whether to disable new file selection.\n   * @property {boolean} [multiple] Whether to accept multiple files.\n   * @property {boolean} [showUploadButton] Whether to show the upload button.\n   * @property {boolean} [showFilePreview] Whether to show file preview after files are selected.\n   * @property {(detail: { files: File[] }) => void} [onDrop] Custom `Drop` event handler.\n   * @property {Snippet} [children] Slot content.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    accept = undefined,\n    disabled = false,\n    multiple = false,\n    showUploadButton = false,\n    showFilePreview = false,\n    onDrop = undefined,\n    children = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {HTMLElement | undefined} */\n  let dropTarget = $state();\n  let dragging = $state(false);\n  let typeMismatch = $state(false);\n  let showTypeMismatchAlertDialog = $state(false);\n  /** @type {FilePicker | undefined} */\n  let filePicker = $state();\n  /** @type {File[]}  */\n  let files = $state([]);\n\n  const showDefaultContent = $derived(showUploadButton || (showFilePreview && files.length));\n\n  /**\n   * Open the file picker to let the user choose file(s).\n   */\n  export const openFilePicker = () => {\n    filePicker?.open();\n  };\n\n  /**\n   * Reset the file list.\n   */\n  export const reset = () => {\n    files = [];\n    onDrop?.({ files });\n  };\n\n  /**\n   * Cache the selected files, and notify the list.\n   * @param {File[]} allFiles Files.\n   */\n  const updateFileList = (allFiles) => {\n    files = multiple ? allFiles : allFiles.slice(0, 1);\n    onDrop?.({ files });\n  };\n\n  onMount(() => {\n    dropTarget?.addEventListener('Select', (event) => {\n      onDrop?.({ files: /** @type {CustomEvent} */ (event).detail.files });\n    });\n  });\n\n  $effect(() => {\n    if (!showDefaultContent && typeMismatch) {\n      showTypeMismatchAlertDialog = true;\n    }\n  });\n</script>\n\n{#snippet typeMismatchAlert()}\n  {#if accept === SUPPORTED_IMAGE_TYPES.join(',')}\n    {$_('dropped_image_type_mismatch')}\n  {:else}\n    {$_('dropped_file_type_mismatch', {\n      values: {\n        type: getListFormatter(/** @type {string} */ ($appLocale), {\n          type: 'disjunction',\n        }).format(/** @type {string} */ (accept).split(/,\\s*/)),\n      },\n    })}\n  {/if}\n{/snippet}\n\n<div\n  bind:this={dropTarget}\n  role=\"none\"\n  class=\"drop-target\"\n  ondragover={(event) => {\n    event.preventDefault();\n\n    if (disabled || !event.dataTransfer) {\n      return;\n    }\n\n    event.dataTransfer.dropEffect = 'copy';\n    dragging = true;\n    typeMismatch = false;\n  }}\n  ondragleave={(event) => {\n    event.preventDefault();\n\n    if (disabled) {\n      return;\n    }\n\n    dragging = false;\n  }}\n  ondragend={(event) => {\n    event.preventDefault();\n\n    if (disabled) {\n      return;\n    }\n\n    dragging = false;\n  }}\n  ondrop={async (event) => {\n    event.preventDefault();\n\n    if (disabled || !event.dataTransfer) {\n      return;\n    }\n\n    dragging = false;\n\n    const filteredFileList = await scanFiles(event.dataTransfer, { accept });\n\n    if (filteredFileList.length) {\n      updateFileList(filteredFileList);\n    } else {\n      typeMismatch = true;\n    }\n  }}\n>\n  <!--\n    File(s) can be selected when `openFilePicker()` is called from outside the component, typically\n    with an external upload button. In that case, the file preview, if enabled, should replace the\n    default slot content.\n  -->\n  {#if showDefaultContent}\n    <div role=\"none\" class=\"content\">\n      {#if showUploadButton}\n        <div role=\"none\">\n          {#if $hasMouse}\n            {$_(multiple ? 'drop_files_or_click_to_browse' : 'drop_file_or_click_to_browse')}\n          {:else}\n            {$_('tap_to_browse')}\n          {/if}\n        </div>\n        <div role=\"none\">\n          <Button\n            variant=\"primary\"\n            label={$_(multiple ? 'choose_files' : 'choose_file')}\n            {disabled}\n            onclick={() => {\n              openFilePicker();\n            }}\n          >\n            {#snippet startIcon()}\n              <Icon name=\"cloud_upload\" />\n            {/snippet}\n          </Button>\n        </div>\n        {#if typeMismatch}\n          <div role=\"alert\">\n            {@render typeMismatchAlert()}\n          </div>\n        {/if}\n      {/if}\n      {#if showFilePreview && files.length}\n        <UploadAssetsPreview bind:files />\n      {/if}\n    </div>\n  {:else}\n    {@render children?.()}\n  {/if}\n  {#if dragging}\n    <div role=\"none\" class=\"drop-indicator\">\n      <div role=\"none\">\n        <Icon name=\"download\" />\n        <span role=\"none\">{$_(multiple ? 'drop_files_here' : 'drop_file_here')}</span>\n      </div>\n    </div>\n  {/if}\n</div>\n\n<FilePicker\n  {accept}\n  {multiple}\n  bind:this={filePicker}\n  onSelect={({ files: _files }) => {\n    updateFileList(_files);\n  }}\n/>\n\n{#if !showDefaultContent}\n  <AlertDialog bind:open={showTypeMismatchAlertDialog} title={$_('unsupported_file_type')}>\n    {@render typeMismatchAlert()}\n  </AlertDialog>\n{/if}\n\n<style lang=\"scss\">\n  .drop-target {\n    display: flex;\n    flex-direction: column;\n    position: relative;\n    overflow: hidden;\n    height: 100%;\n    pointer-events: auto;\n\n    :global {\n      & > .group {\n        overflow-y: auto;\n        padding: 16px;\n        width: 100%;\n        height: 100%;\n      }\n\n      button:not(:disabled) {\n        pointer-events: auto;\n      }\n    }\n  }\n\n  .drop-indicator {\n    position: absolute;\n    inset: 0;\n    z-index: 10;\n    border-radius: var(--sui-control-large-border-radius);\n    background-color: hsl(var(--sui-background-color-4-hsl) / 80%);\n    -webkit-backdrop-filter: blur(8px);\n    backdrop-filter: blur(8px);\n    text-align: center;\n    pointer-events: none;\n\n    div {\n      position: absolute;\n      inset: 0;\n      display: flex;\n      flex-direction: column;\n      justify-content: center;\n      align-items: center;\n      gap: 4px;\n      border: 4px dashed var(--sui-primary-accent-color);\n      border-radius: var(--sui-control-large-border-radius);\n      font-size: var(--sui-font-size-x-large);\n\n      :global(.icon) {\n        color: var(--sui-secondary-foreground-color);\n        font-size: 48px;\n      }\n    }\n  }\n\n  .content {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    gap: 16px;\n    overflow: auto;\n    height: 100%;\n    min-height: 320px;\n    text-align: center;\n  }\n</style>\n","<script>\n  import { untrack } from 'svelte';\n\n  import AssetsPanel from '$lib/components/assets/browser/assets-panel.svelte';\n  import DropZone from '$lib/components/assets/shared/drop-zone.svelte';\n  import { selectAssetsView } from '$lib/services/contents/editor';\n\n  /**\n   * @import { Asset, SelectedResource } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string | undefined} [accept] Accepted file type specifiers.\n   * @property {Asset[]} [assets] Asset list.\n   * @property {SelectedResource} [selectedResource] Selected resource.\n   * @property {string} [searchTerms] Search terms for filtering assets.\n   * @property {string} [basePath] Path to an asset folder, if any folder is selected.\n   * @property {(detail: { files: File[] }) => void} [onDrop] Custom `Drop` event handler.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    accept = undefined,\n    assets = [],\n    selectedResource = $bindable(),\n    searchTerms = '',\n    basePath = undefined,\n    onDrop,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {DropZone | undefined} */\n  let dropZone = $state();\n\n  $effect(() => {\n    if (!selectedResource) {\n      untrack(() => {\n        dropZone?.reset();\n      });\n    }\n  });\n</script>\n\n<DropZone bind:this={dropZone} {accept} {onDrop}>\n  <AssetsPanel\n    {assets}\n    bind:selectedResource\n    viewType={$selectAssetsView?.type}\n    {searchTerms}\n    {basePath}\n    gridId=\"select-assets-grid\"\n    checkerboard={true}\n  />\n</DropZone>\n","<script>\n  import { Button, Icon, SelectButton, SelectButtonGroup } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { isLargeScreen } from '$lib/services/user/env';\n\n  /**\n   * @import { Writable } from 'svelte/store';\n   * @import { AssetListView, EntryListView, SelectAssetsView } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} [disabled] Whether to disable the buttons.\n   * @property {Writable<EntryListView | AssetListView | SelectAssetsView>} currentView Current view\n   * details.\n   */\n\n  /** @type {Props & Record<string, any>} */\n  let {\n    /* eslint-disable prefer-const */\n    disabled = false,\n    currentView,\n    ...rest\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const isGridView = $derived($currentView.type === 'grid');\n</script>\n\n<div role=\"none\" class=\"wrapper\">\n  {#if $isLargeScreen}\n    <SelectButtonGroup {disabled} aria-label={$_('switch_view')} {...rest}>\n      <SelectButton\n        {disabled}\n        selected={!isGridView}\n        variant=\"ghost\"\n        iconic\n        aria-label={$_('list_view')}\n        onSelect={() => {\n          currentView.update((view) => ({ ...view, type: 'list' }));\n        }}\n      >\n        {#snippet startIcon()}\n          <Icon name=\"format_list_bulleted\" />\n        {/snippet}\n      </SelectButton>\n      <SelectButton\n        {disabled}\n        selected={isGridView}\n        variant=\"ghost\"\n        iconic\n        aria-label={$_('grid_view')}\n        onSelect={() => {\n          currentView.update((view) => ({ ...view, type: 'grid' }));\n        }}\n      >\n        {#snippet startIcon()}\n          <Icon name=\"grid_view\" />\n        {/snippet}\n      </SelectButton>\n    </SelectButtonGroup>\n  {:else}\n    <Button\n      {disabled}\n      variant=\"ghost\"\n      iconic\n      aria-label={$_(isGridView ? 'switch_to_list_view' : 'switch_to_grid_view')}\n      onclick={() => {\n        currentView.update((view) => ({ ...view, type: isGridView ? 'list' : 'grid' }));\n      }}\n    >\n      {#snippet startIcon()}\n        <Icon name={isGridView ? 'format_list_bulleted' : 'grid_view'} />\n      {/snippet}\n    </Button>\n  {/if}\n</div>\n\n<style lang=\"scss\">\n  .wrapper {\n    display: contents;\n\n    :global {\n      .select-button-group button {\n        border-radius: var(--sui-button-medium-border-radius) !important;\n      }\n    }\n  }\n</style>\n","import { isTextFileType } from '@sveltia/utils/file';\nimport mime from 'mime';\n\n/**\n * @import { Asset, AssetKind } from '$lib/types/private';\n */\n\n/**\n * List of media kinds.\n * @type {AssetKind[]}\n */\nexport const MEDIA_KINDS = ['image', 'video', 'audio'];\n\n/**\n * List of all asset kinds.\n * @type {AssetKind[]}\n */\nexport const ASSET_KINDS = [...MEDIA_KINDS, 'document', 'other'];\n\n/**\n * Regular expression that matches common document file extensions.\n * @type {RegExp}\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types\n */\nexport const DOC_EXTENSION_REGEX = /\\.(?:csv|docx?|odp|ods|odt|pdf|pptx?|rtf|xlsx?)$/i;\n\n/**\n * Check if the given asset kind is media.\n * @param {string} kind Kind, e.g. `image` or `video`.\n * @returns {boolean} Result.\n */\nexport const isMediaKind = (kind) => /** @type {string[]} */ (MEDIA_KINDS).includes(kind);\n\n/**\n * Whether the given asset is previewable.\n * @param {Asset} asset Asset.\n * @returns {boolean} Result.\n */\nexport const canPreviewAsset = (asset) => {\n  const type = mime.getType(asset.path);\n\n  return isMediaKind(asset.kind) || type === 'application/pdf' || (!!type && isTextFileType(type));\n};\n\n/**\n * Get the media type of the given blob or path.\n * @param {Blob | string} source Blob, blob URL, or asset path.\n * @returns {Promise<AssetKind | undefined>} Kind.\n */\nexport const getMediaKind = async (source) => {\n  let mimeType = '';\n\n  if (typeof source === 'string') {\n    if (source.startsWith('blob:')) {\n      try {\n        mimeType = (await (await fetch(source)).blob()).type;\n      } catch {\n        //\n      }\n    } else {\n      mimeType = mime.getType(source) ?? '';\n    }\n  } else if (source instanceof Blob) {\n    mimeType = source.type;\n  }\n\n  if (!mimeType) {\n    return undefined;\n  }\n\n  const [type, subType] = mimeType.split('/');\n\n  if (isMediaKind(type) && !subType.startsWith('x-')) {\n    return /** @type {AssetKind} */ (type);\n  }\n\n  return undefined;\n};\n\n/**\n * Whether the given asset is editable.\n * @param {Asset} asset Asset.\n * @returns {boolean} Result.\n * @todo Support image editing.\n */\nexport const canEditAsset = (asset) => {\n  const type = mime.getType(asset.path);\n\n  return !!type && isTextFileType(type);\n};\n\n/**\n * Determine the asset’s kind from the file extension.\n * @param {string} name File name or path.\n * @returns {AssetKind} One of {@link ASSET_KINDS}.\n */\nexport const getAssetKind = (name) =>\n  /** @type {AssetKind} */ (\n    mime.getType(name)?.match(/^(?<type>image|audio|video)\\//)?.groups?.type ??\n      (DOC_EXTENSION_REGEX.test(name) ? 'document' : 'other')\n  );\n","/**\n * @import { MediaLibraryService } from '$lib/types/private';\n */\n\n/**\n * List of all the supported cloud storage services.\n * @type {Record<string, MediaLibraryService>}\n */\nexport const allCloudStorageServices = {\n  //\n};\n","import { get } from 'svelte/store';\n\nimport { siteConfig } from '$lib/services/config';\n\n/**\n * @import { MediaField, MediaLibraryName } from '$lib/types/public';\n */\n\n/**\n * Get any media library options. Support both new and legacy options at the field level and global.\n * @param {object} [options] Options.\n * @param {MediaLibraryName} [options.libraryName] Library name.\n * @param {MediaField} [options.fieldConfig] Field configuration.\n * @returns {Record<string, any>} Options.\n */\nexport const getMediaLibraryOptions = ({ libraryName = 'default', fieldConfig } = {}) => {\n  const _siteConfig = get(siteConfig);\n\n  // Priority 1: fieldConfig.media_libraries\n  if (fieldConfig?.media_libraries?.[libraryName]) {\n    return fieldConfig.media_libraries[libraryName];\n  }\n\n  // Priority 2: fieldConfig.media_library (legacy)\n  if (fieldConfig?.media_library) {\n    const siteLibName = _siteConfig?.media_library?.name ?? 'default';\n    const fieldLib = fieldConfig.media_library;\n    const fieldLibName = fieldLib.name;\n\n    if (\n      siteLibName === libraryName &&\n      (fieldLibName === libraryName || fieldLibName === undefined)\n    ) {\n      return fieldLib;\n    }\n  }\n\n  // Priority 3: siteConfig.media_libraries\n  if (_siteConfig?.media_libraries?.[libraryName]) {\n    return _siteConfig.media_libraries[libraryName];\n  }\n\n  // Priority 4: siteConfig.media_library (legacy)\n  if (_siteConfig?.media_library?.name === libraryName) {\n    return _siteConfig.media_library;\n  }\n\n  return {};\n};\n","/* eslint-disable no-await-in-loop */\n\nimport { sleep } from '@sveltia/utils/misc';\nimport { get } from 'svelte/store';\nimport { locale as appLocale } from 'svelte-i18n';\n\n/**\n * @import { ExternalAsset, MediaLibraryService } from '$lib/types/private';\n */\n\n/**\n * @see https://www.pexels.com/api/documentation/#photos-search__parameters__locale\n */\nconst SUPPORTED_LOCALES = [\n  'en-US',\n  'pt-BR',\n  'es-ES',\n  'ca-ES',\n  'de-DE',\n  'it-IT',\n  'fr-FR',\n  'sv-SE',\n  'id-ID',\n  'pl-PL',\n  'ja-JP',\n  'zh-TW',\n  'zh-CN',\n  'ko-KR',\n  'th-TH',\n  'nl-NL',\n  'hu-HU',\n  'vi-VN',\n  'cs-CZ',\n  'da-DK',\n  'fi-FI',\n  'uk-UA',\n  'el-GR',\n  'ro-RO',\n  'nb-NO',\n  'sk-SK',\n  'tr-TR',\n  'ru-RU',\n];\n\nconst ENDPOINT = 'https://api.pexels.com/v1';\n\n/**\n * Search images or fetch curated pictures if no query is given.\n * @param {string} query Search query.\n * @param {object} options Options.\n * @param {string} options.apiKey API key.\n * @returns {Promise<ExternalAsset[]>} Assets.\n * @see https://www.pexels.com/api/documentation/\n * @todo Support video files.\n */\nconst search = async (query, { apiKey }) => {\n  const headers = { Authorization: apiKey };\n  const [locale] = /** @type {string} */ (get(appLocale)).toLowerCase().split('-');\n  /**\n   * @type {{\n   * id: number,\n   * url: string,\n   * alt: string,\n   * src: { large2x: string, medium: string },\n   * photographer: string\n   * }[]}\n   */\n  let results = [];\n\n  if (query) {\n    for (let page = 1; page <= 2; page += 1) {\n      const params = new URLSearchParams(\n        /** @type {Record<string, any>} */ ({\n          query,\n          locale: SUPPORTED_LOCALES.find((code) => code.split('-')[0] === locale) || 'en-US',\n          page,\n          per_page: 80,\n        }),\n      );\n\n      const response = await fetch(`${ENDPOINT}/search?${params.toString()}`, { headers });\n\n      if (!response.ok) {\n        return Promise.reject();\n      }\n\n      const { photos: pagedResults, next_page: nextPage } = await response.json();\n\n      results.push(...pagedResults);\n\n      if (!nextPage) {\n        break;\n      }\n\n      // Wait for a bit before requesting the next page\n      await sleep(50);\n    }\n  } else {\n    const params = new URLSearchParams(\n      /** @type {Record<string, any>} */ ({\n        per_page: 80,\n      }),\n    );\n\n    const response = await fetch(`${ENDPOINT}/curated?${params.toString()}`, { headers });\n\n    if (!response.ok) {\n      return Promise.reject();\n    }\n\n    results = (await response.json()).photos;\n  }\n\n  return results.map(({ id, url, alt, src: { large2x, medium }, photographer }) => ({\n    id: String(id),\n    description: url.match(/\\/photo\\/(?<alt>.+?)-\\d+\\/$/)?.groups?.alt.replace(/-/g, ' ') ?? alt,\n    previewURL: medium,\n    downloadURL: large2x,\n    fileName: `pexels-${photographer.split(/\\s+/).join('-').toLowerCase()}-${id}.jpg`,\n    kind: 'image',\n    credit: `<a href=\"${url}\">Photo by ${photographer} on Pexels</a>`,\n  }));\n};\n\n/**\n * @type {MediaLibraryService}\n */\nexport default {\n  serviceType: 'stock_assets',\n  serviceId: 'pexels',\n  serviceLabel: 'Pexels',\n  serviceURL: 'https://www.pexels.com/',\n  showServiceLink: true,\n  hotlinking: false,\n  authType: 'api_key',\n  developerURL: 'https://www.pexels.com/api/',\n  apiKeyURL: 'https://www.pexels.com/api/new/',\n  apiKeyPattern: /^[a-zA-Z\\d]{56}$/,\n  search,\n};\n","import { get } from 'svelte/store';\nimport { locale as appLocale } from 'svelte-i18n';\n\n/**\n * @import { ExternalAsset, MediaLibraryService } from '$lib/types/private';\n */\n\n/**\n * @see https://pixabay.com/api/docs/#api_search_images\n */\nconst SUPPORTED_LOCALES = [\n  'cs',\n  'da',\n  'de',\n  'en',\n  'es',\n  'fr',\n  'id',\n  'it',\n  'hu',\n  'nl',\n  'no',\n  'pl',\n  'pt',\n  'ro',\n  'sk',\n  'fi',\n  'sv',\n  'tr',\n  'vi',\n  'th',\n  'bg',\n  'ru',\n  'el',\n  'ja',\n  'ko',\n  'zh',\n];\n\nconst ENDPOINT = 'https://pixabay.com/api';\n\n/**\n * Search images or fetch curated pictures if no query is given.\n * @param {string} query Search query.\n * @param {object} options Options.\n * @param {string} options.apiKey API key.\n * @returns {Promise<ExternalAsset[]>} Assets.\n * @see https://pixabay.com/api/docs/\n * @todo Support video files.\n */\nconst search = async (query, { apiKey }) => {\n  const [locale] = /** @type {string} */ (get(appLocale)).toLowerCase().split('-');\n\n  const params = new URLSearchParams(\n    /** @type {Record<string, any>} */ ({\n      key: apiKey,\n      q: query,\n      lang: SUPPORTED_LOCALES.includes(locale) ? locale : 'en',\n      image_type: 'photo',\n      min_width: 1280,\n      editors_choice: !query,\n      safesearch: true,\n      per_page: 150,\n    }),\n  );\n\n  const response = await fetch(`${ENDPOINT}/?${params.toString()}`);\n\n  if (!response.ok) {\n    return Promise.reject();\n  }\n\n  /**\n   * @type {{\n   * id: number,\n   * webformatURL: string,\n   * previewURL: string,\n   * largeImageURL: string,\n   * imageWidth: number,\n   * imageHeight: number,\n   * pageURL: string,\n   * tags: string,\n   * user: string\n   * }[]}\n   */\n  const results = (await response.json()).hits;\n\n  return results.map(\n    ({\n      id,\n      webformatURL,\n      previewURL,\n      largeImageURL,\n      imageWidth,\n      imageHeight,\n      pageURL,\n      tags,\n      user,\n    }) => ({\n      id: String(id),\n      description: tags,\n      previewURL: webformatURL.replace('_640.', imageWidth > imageHeight ? '_180.' : '_340.'),\n      downloadURL: largeImageURL,\n      fileName: /** @type {string} */ (previewURL.split('/').pop()).replace('_150.', '_1280.'),\n      kind: 'image',\n      credit: `<a href=\"${pageURL}\">Photo by ${user} on Pixabay`,\n    }),\n  );\n};\n\n/**\n * @type {MediaLibraryService}\n */\nexport default {\n  serviceType: 'stock_assets',\n  serviceId: 'pixabay',\n  serviceLabel: 'Pixabay',\n  serviceURL: 'https://pixabay.com/',\n  showServiceLink: true,\n  hotlinking: false,\n  authType: 'api_key',\n  developerURL: 'https://pixabay.com/service/about/api/',\n  apiKeyURL: 'https://pixabay.com/api/docs/#api_key',\n  apiKeyPattern: /^\\d+-[a-f\\d]{25}$/,\n  search,\n};\n","/* eslint-disable no-await-in-loop */\n\nimport { sleep } from '@sveltia/utils/misc';\nimport { get } from 'svelte/store';\nimport { locale as appLocale } from 'svelte-i18n';\n\n/**\n * @import { ExternalAsset, MediaLibraryService } from '$lib/types/private';\n */\n\n/**\n * @see https://unsplash.com/documentation#supported-languages\n */\nconst SUPPORTED_LOCALES = [\n  'af',\n  'sq',\n  'am',\n  'ar',\n  'hy',\n  'as',\n  'az',\n  'bn',\n  'ba',\n  'eu',\n  'bs',\n  'bg',\n  'yue',\n  'ca',\n  'lzh',\n  'zh-Hans',\n  'zh-Hant',\n  'hr',\n  'cs',\n  'da',\n  'prs',\n  'dv',\n  'nl',\n  'en',\n  'et',\n  'fo',\n  'fj',\n  'fil',\n  'fi',\n  'fr',\n  'fr-ca',\n  'gl',\n  'ka',\n  'de',\n  'el',\n  'gu',\n  'ht',\n  'he',\n  'hi',\n  'mww',\n  'hu',\n  'is',\n  'id',\n  'ikt',\n  'iu',\n  'iu-Latn',\n  'ga',\n  'it',\n  'ja',\n  'kn',\n  'kk',\n  'km',\n  'ko',\n  'ku',\n  'kmr',\n  'ky',\n  'lo',\n  'lv',\n  'lt',\n  'mk',\n  'mg',\n  'ms',\n  'ml',\n  'mt',\n  'mi',\n  'mr',\n  'mn-Cyrl',\n  'mn-Mong',\n  'my',\n  'ne',\n  'nb',\n  'or',\n  'ps',\n  'fa',\n  'pl',\n  'pt',\n  'pt-pt',\n  'pa',\n  'otq',\n  'ro',\n  'ru',\n  'sm',\n  'sr-Cyrl',\n  'sr-Latn',\n  'sk',\n  'sl',\n  'so',\n  'es',\n  'sw',\n  'sv',\n  'ty',\n  'ta',\n  'tt',\n  'te',\n  'th',\n  'bo',\n  'ti',\n  'to',\n  'tr',\n  'tk',\n  'uk',\n  'hsb',\n  'ur',\n  'ug',\n  'uz',\n  'vi',\n  'cy',\n  'yua',\n  'zu',\n];\n\nconst ENDPOINT = 'https://api.unsplash.com';\nconst CREDIT_LINK_PARAMS = 'utm_source=sveltia-cms&utm_medium=referral';\n\n/**\n * Search images or fetch curated pictures if no query is given.\n * @param {string} query Search query.\n * @param {object} options Options.\n * @param {string} options.apiKey API key.\n * @returns {Promise<ExternalAsset[]>} Assets.\n * @see https://unsplash.com/documentation\n * @todo Support video files.\n */\nconst search = async (query, { apiKey }) => {\n  const headers = { Authorization: `Client-ID ${apiKey}` };\n  const [locale] = /** @type {string} */ (get(appLocale)).toLowerCase().split('-');\n  /**\n   * @type {{\n   * id: string,\n   * description: string,\n   * alt_description: string,\n   * urls: { regular: string, thumb: string },\n   * user: { username: string, name: string }\n   * }[]}}\n   */\n  let results = [];\n\n  if (query) {\n    for (let page = 1; page <= 5; page += 1) {\n      const params = new URLSearchParams(\n        /** @type {Record<string, any>} */ ({\n          query,\n          lang: SUPPORTED_LOCALES.includes(locale) ? locale : 'en',\n          page,\n          per_page: 30,\n        }),\n      );\n\n      const response = await fetch(`${ENDPOINT}/search/photos?${params.toString()}`, { headers });\n\n      if (!response.ok) {\n        return Promise.reject();\n      }\n\n      const { results: pagedResults, total_pages: totalPages } = await response.json();\n\n      results.push(...pagedResults);\n\n      if (totalPages === page) {\n        break;\n      }\n\n      // Wait for a bit before requesting the next page\n      await sleep(50);\n    }\n  } else {\n    const params = new URLSearchParams(\n      /** @type {Record<string, any>} */ ({\n        per_page: 30,\n      }),\n    );\n\n    const response = await fetch(`${ENDPOINT}/photos?${params.toString()}`, { headers });\n\n    if (!response.ok) {\n      return Promise.reject();\n    }\n\n    results = await response.json();\n  }\n\n  return results.map(\n    ({\n      id,\n      description,\n      alt_description: alt,\n      urls: { regular, thumb },\n      user: { username, name },\n    }) => ({\n      id: String(id),\n      description: [description, alt].filter(Boolean).join(' — '),\n      previewURL: thumb,\n      downloadURL: regular,\n      fileName: `${name.split(/\\s+/).join('-').toLowerCase()}-${id}-unsplash.jpg`,\n      kind: 'image',\n      credit:\n        `Photo by <a href=\"https://unsplash.com/@${username}?${CREDIT_LINK_PARAMS}\">${name}</a> on ` +\n        `<a href=\"https://unsplash.com/?${CREDIT_LINK_PARAMS}\">Unsplash</a>`,\n    }),\n  );\n};\n\n/**\n * @type {MediaLibraryService}\n */\nexport default {\n  serviceType: 'stock_assets',\n  serviceId: 'unsplash',\n  serviceLabel: 'Unsplash',\n  serviceURL: 'https://unsplash.com/',\n  showServiceLink: true,\n  hotlinking: true,\n  authType: 'api_key',\n  developerURL: 'https://unsplash.com/developers',\n  apiKeyURL: 'https://unsplash.com/oauth/applications',\n  apiKeyPattern: /^[a-zA-Z\\d-]{40,}$/,\n  search,\n};\n","import { getMediaLibraryOptions } from '$lib/services/integrations/media-libraries';\n\nimport pexels from './pexels';\nimport pixabay from './pixabay';\nimport unsplash from './unsplash';\n\n/**\n * @import { MediaLibraryService } from '$lib/types/private';\n * @import { MediaField, StockAssetMediaLibrary, StockAssetProviderName } from '$lib/types/public';\n */\n\n/**\n * List of all the supported stock asset providers.\n * @type {Record<StockAssetProviderName, MediaLibraryService>}\n */\nexport const allStockAssetProviders = {\n  pexels,\n  pixabay,\n  unsplash,\n};\n\n/**\n * Get normalized stock photo/video media library options.\n * @param {object} [options] Options.\n * @param {MediaField} [options.fieldConfig] Field configuration.\n * @returns {StockAssetMediaLibrary} Options.\n */\nexport const getStockAssetMediaLibraryOptions = ({ fieldConfig } = {}) => {\n  const options = getMediaLibraryOptions({ libraryName: 'stock_assets', fieldConfig });\n\n  const allProviderNames = /** @type {StockAssetProviderName[]} */ (\n    Object.keys(allStockAssetProviders)\n  );\n\n  const { providers } = options;\n\n  return {\n    providers: Array.isArray(providers) ? providers : allProviderNames,\n  };\n};\n","<script>\n  import {\n    Button,\n    Dialog,\n    EmptyState,\n    FilePicker,\n    Icon,\n    Listbox,\n    Option,\n    OptionGroup,\n    SearchBar,\n    Select,\n    TextInput,\n  } from '@sveltia/ui';\n  import { getHash } from '@sveltia/utils/crypto';\n  import { getPathInfo } from '@sveltia/utils/file';\n  import equal from 'fast-deep-equal';\n  import { _ } from 'svelte-i18n';\n\n  import ExternalAssetsPanel from '$lib/components/assets/browser/external-assets-panel.svelte';\n  import InternalAssetsPanel from '$lib/components/assets/browser/internal-assets-panel.svelte';\n  import ViewSwitcher from '$lib/components/common/page-toolbar/view-switcher.svelte';\n  import { allAssets } from '$lib/services/assets';\n  import { getAssetFolder, globalAssetFolder } from '$lib/services/assets/folders';\n  import { getAssetKind } from '$lib/services/assets/kinds';\n  import { selectAssetsView, showContentOverlay } from '$lib/services/contents/editor';\n  import { allCloudStorageServices } from '$lib/services/integrations/media-libraries/cloud';\n  import {\n    allStockAssetProviders,\n    getStockAssetMediaLibraryOptions,\n  } from '$lib/services/integrations/media-libraries/stock';\n  import { normalize } from '$lib/services/search/util';\n  import { isSmallScreen } from '$lib/services/user/env';\n  import { prefs } from '$lib/services/user/prefs';\n  import { getGitHash } from '$lib/services/utils/file';\n  import { SUPPORTED_IMAGE_TYPES } from '$lib/services/utils/media/image';\n\n  /**\n   * @import { Writable } from 'svelte/store';\n   * @import {\n   * Asset,\n   * AssetFolderInfo,\n   * AssetKind,\n   * EntryDraft,\n   * MediaLibraryService,\n   * SelectAssetsView,\n   * SelectedResource,\n   * } from '$lib/types/private';\n   * @import { MediaField, StockAssetProviderName } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} [open] Whether to open the dialog.\n   * @property {AssetKind | undefined} [kind] Asset kind.\n   * @property {string | undefined} [accept] Accepted file type specifiers.\n   * @property {boolean} [canEnterURL] Whether to allow entering a URL.\n   * @property {Writable<EntryDraft | null | undefined>} [entryDraft] Associated entry draft.\n   * @property {MediaField} [fieldConfig] Field configuration.\n   * @property {(resource: SelectedResource) => void} [onSelect] Custom `Select` event handler that\n   * will be called when the dialog is closed with the Insert button.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    open = $bindable(false),\n    kind,\n    accept = kind === 'image' ? SUPPORTED_IMAGE_TYPES.join(',') : undefined,\n    canEnterURL = true,\n    entryDraft,\n    fieldConfig,\n    onSelect = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const elementIdPrefix = $props.id();\n\n  /** @type {SelectedResource | undefined} */\n  let selectedResource = $state();\n  let enteredURL = $state('');\n  let rawSearchTerms = $state('');\n  let libraryName = $state('default-global');\n  /** @type {Asset[]} */\n  let droppedAssets = $state([]);\n  /** @type {Asset[]} */\n  let unsavedAssets = $state([]);\n  /** @type {FilePicker | undefined} */\n  let filePicker = $state();\n\n  const title = $derived(\n    kind === 'image' ? $_('assets_dialog.title.image') : $_('assets_dialog.title.file'),\n  );\n  const searchTerms = $derived(normalize(rawSearchTerms));\n  /** @type {Record<string, { folder: AssetFolderInfo | undefined, enabled: boolean }>} */\n  const allDefaultLibraryFolders = $derived.by(() => {\n    const collectionName = $entryDraft?.collectionName ?? '';\n    const fileName = $entryDraft?.fileName;\n    const fileAssetFolder = fileName ? getAssetFolder({ collectionName, fileName }) : undefined;\n    const collectionAssetFolder = getAssetFolder({ collectionName });\n    const entryAssetFolder = fileAssetFolder ?? collectionAssetFolder;\n\n    return {\n      entry: {\n        folder: entryAssetFolder,\n        enabled:\n          !!entryAssetFolder &&\n          (entryAssetFolder.entryRelative || entryAssetFolder.hasTemplateTags),\n      },\n      file: {\n        folder: fileAssetFolder,\n        enabled:\n          !!fileAssetFolder && !fileAssetFolder.entryRelative && !fileAssetFolder.hasTemplateTags,\n      },\n      collection: {\n        folder: collectionAssetFolder,\n        enabled:\n          !!collectionAssetFolder &&\n          !collectionAssetFolder.entryRelative &&\n          !collectionAssetFolder.hasTemplateTags,\n      },\n      global: {\n        folder: $globalAssetFolder,\n        enabled: true,\n      },\n    };\n  });\n  const isDefaultLibrary = $derived(libraryName.startsWith('default-'));\n  const selectedFolder = $derived(\n    isDefaultLibrary\n      ? allDefaultLibraryFolders[libraryName.replace('default-', '')].folder\n      : undefined,\n  );\n  const originalEntry = $derived($entryDraft?.originalEntry);\n  const targetFolderPath = $derived.by(() => {\n    if (selectedFolder?.entryRelative && originalEntry) {\n      // @todo FIXME: This only works with `media_folder: \"\"`\n      return getPathInfo(Object.values(originalEntry.locales)[0].path).dirname;\n    }\n\n    return selectedFolder?.internalPath;\n  });\n  const listedAssets = $derived(\n    [...$allAssets, ...unsavedAssets]\n      .filter((asset) => !kind || kind === asset.kind)\n      .sort((a, b) => a.name.localeCompare(b.name))\n      // Unsaved assets should go first\n      .sort((a, b) => Number(!!b.unsaved) - Number(!!a.unsaved)),\n  );\n  const enabledStockAssetProviderEntries = $derived.by(() => {\n    const { providers = [] } = getStockAssetMediaLibraryOptions({ fieldConfig });\n\n    return /** @type {[StockAssetProviderName, MediaLibraryService][]} */ (\n      Object.entries(allStockAssetProviders)\n    ).filter(([serviceId]) => providers.includes(serviceId));\n  });\n  const isEnabledMediaService = $derived(\n    (enabledStockAssetProviderEntries\n      .map(([serviceId]) => serviceId)\n      .includes(/** @type {StockAssetProviderName} */ (libraryName)) &&\n      $prefs?.apiKeys?.[libraryName]) ||\n      (Object.keys(allCloudStorageServices).includes(libraryName) && $prefs?.logins?.[libraryName]),\n  );\n  const enabledCloudServiceEntries = $derived(Object.entries(allCloudStorageServices));\n  const enabledExternalServiceEntries = $derived([\n    ...enabledStockAssetProviderEntries,\n    ...enabledCloudServiceEntries,\n  ]);\n  const Selector = $derived($isSmallScreen ? Select : Listbox);\n\n  /**\n   * Convert unsaved files to the `Asset` format so these can be browsed just like other assets.\n   * @param {object} args Arguments.\n   * @param {File} args.file Raw file.\n   * @param {string} [args.blobURL] Blob URL of the file.\n   * @param {AssetFolderInfo | undefined} args.folder Asset folder.\n   * @returns {Promise<Asset>} Asset.\n   */\n  const convertFileItemToAsset = async ({ file, blobURL, folder }) => {\n    const { name, size } = file;\n\n    return /** @type {Asset} */ ({\n      unsaved: true,\n      file,\n      blobURL: blobURL ?? URL.createObjectURL(file),\n      name,\n      path: `${targetFolderPath}/${name}`,\n      sha: await getGitHash(file),\n      size,\n      kind: getAssetKind(name),\n      folder,\n    });\n  };\n\n  /**\n   * Get all the unsaved assets, including already cached for the draft and dropped ones.\n   * @returns {Promise<Asset[]>} Assets.\n   */\n  const getUnsavedAssets = async () =>\n    Promise.all([\n      ...Object.entries($entryDraft?.files ?? {}).map(async ([blobURL, { file, folder }]) =>\n        convertFileItemToAsset({ file, blobURL, folder }),\n      ),\n      ...Object.values(droppedAssets),\n    ]);\n\n  /**\n   * Handle dropped files.\n   * @param {File[]} files File list.\n   */\n  const onDrop = (files) => {\n    files.forEach(async (file, index) => {\n      const hash = await getHash(file);\n      const folder = selectedFolder;\n      const asset = await convertFileItemToAsset({ file, folder });\n\n      const hasExistingResource = (\n        await Promise.all(\n          unsavedAssets.map(\n            async (a) => !!a.file && (await getHash(a.file)) === hash && equal(a.folder, folder),\n          ),\n        )\n      ).some(Boolean);\n\n      if (hasExistingResource) {\n        return;\n      }\n\n      droppedAssets.push(asset);\n\n      if (index === 0) {\n        selectedResource = { asset };\n      }\n    });\n  };\n\n  $effect.pre(() => {\n    // Select the first enabled folder\n    const id = Object.entries(allDefaultLibraryFolders).find(([, { enabled }]) => enabled)?.[0];\n\n    libraryName = `default-${id}`;\n  });\n\n  $effect(() => {\n    void $entryDraft?.files;\n    void droppedAssets;\n\n    (async () => {\n      unsavedAssets = await getUnsavedAssets();\n    })();\n  });\n\n  $effect(() => {\n    if (!$showContentOverlay) {\n      open = false;\n    }\n  });\n</script>\n\n{#snippet headerItems()}\n  {#if isDefaultLibrary || isEnabledMediaService}\n    {#if $selectAssetsView}\n      <ViewSwitcher\n        currentView={(() => /** @type {Writable<SelectAssetsView>} */ (selectAssetsView))()}\n        aria-controls=\"select-assets-grid\"\n      />\n    {/if}\n    <SearchBar\n      flex={$isSmallScreen}\n      bind:value={rawSearchTerms}\n      disabled={!!selectedResource?.file}\n      aria-label={$_(`assets_dialog.search_for_${kind ?? 'file'}`)}\n    />\n  {/if}\n  {#if isDefaultLibrary}\n    <Button\n      variant=\"primary\"\n      label={$_('upload')}\n      onclick={() => {\n        filePicker?.open();\n      }}\n    >\n      {#snippet startIcon()}\n        <Icon name=\"cloud_upload\" />\n      {/snippet}\n    </Button>\n  {/if}\n{/snippet}\n\n<Dialog\n  {title}\n  size={'x-large'}\n  okLabel={$_('insert')}\n  okDisabled={!selectedResource}\n  focusInput={false}\n  bind:open\n  onOk={() => {\n    if (selectedResource) {\n      const resource = $state.snapshot(selectedResource);\n      const { unsaved, file, folder } = resource.asset ?? {};\n\n      onSelect?.(unsaved ? { file, folder } : resource);\n    }\n  }}\n  onClose={() => {\n    // Reset values\n    enteredURL = '';\n    rawSearchTerms = '';\n    droppedAssets = [];\n  }}\n>\n  {#snippet headerExtra()}\n    {#if !$isSmallScreen}\n      {@render headerItems()}\n    {/if}\n  {/snippet}\n  {#snippet footerExtra()}\n    {#if isEnabledMediaService}\n      {@const { showServiceLink, serviceLabel, serviceURL } =\n        allStockAssetProviders[/** @type {StockAssetProviderName} */ (libraryName)] ?? {}}\n      {#if showServiceLink}\n        <a href={serviceURL}>\n          {$_('prefs.media.stock_photos.credit', { values: { service: serviceLabel } })}\n        </a>\n      {/if}\n    {/if}\n  {/snippet}\n  <div role=\"none\" class=\"wrapper\">\n    <div role=\"none\" class=\"nav\">\n      <Selector\n        class=\"tabs\"\n        aria-label={$_('assets_dialog.locations')}\n        aria-controls=\"{elementIdPrefix}-content-pane\"\n        filterThreshold={-1}\n        onChange={(event) => {\n          libraryName = event.detail.name;\n          selectedResource = undefined;\n        }}\n      >\n        <OptionGroup label={$_('asset_location.repository')}>\n          {#each Object.entries(allDefaultLibraryFolders) as [id, { enabled }] (id)}\n            {#if enabled}\n              {@const name = `default-${id}`}\n              <Option\n                {name}\n                label={$_(`assets_dialog.folder.${id}`)}\n                selected={libraryName === name}\n              />\n            {/if}\n          {/each}\n        </OptionGroup>\n        {#if canEnterURL || !!Object.keys(allCloudStorageServices).length}\n          <OptionGroup label={$_('asset_location.external')}>\n            {#if canEnterURL}\n              <Option name=\"enter-url\" label={$_('assets_dialog.enter_url')} />\n            {/if}\n            {#each Object.values(allCloudStorageServices) as service (service.serviceId)}\n              {@const { serviceId, serviceLabel } = service}\n              <Option name={serviceId} label={serviceLabel} />\n            {/each}\n          </OptionGroup>\n        {/if}\n        {#if enabledStockAssetProviderEntries.length}\n          <OptionGroup label={$_('asset_location.stock_photos')}>\n            {#each enabledStockAssetProviderEntries as [serviceId, { serviceLabel }] (serviceId)}\n              <Option name={serviceId} label={serviceLabel} />\n            {/each}\n          </OptionGroup>\n        {/if}\n      </Selector>\n      {#if $isSmallScreen}\n        <div role=\"none\" class=\"filter-tools\">\n          {@render headerItems()}\n        </div>\n      {/if}\n    </div>\n    <div role=\"none\" id=\"{elementIdPrefix}-content-pane\" class=\"content-pane\">\n      {#if isDefaultLibrary && selectedFolder}\n        <InternalAssetsPanel\n          {accept}\n          assets={listedAssets.filter(\n            (asset) =>\n              equal(asset.folder, selectedFolder) &&\n              (selectedFolder.entryRelative\n                ? getPathInfo(asset.path).dirname === targetFolderPath\n                : true),\n          )}\n          bind:selectedResource\n          {searchTerms}\n          basePath={selectedFolder.internalPath}\n          onDrop={({ files }) => {\n            onDrop(files);\n          }}\n        />\n      {/if}\n      {#if canEnterURL && libraryName === 'enter-url'}\n        <EmptyState>\n          <div role=\"none\">\n            {kind === 'image'\n              ? $_('assets_dialog.enter_image_url')\n              : $_('assets_dialog.enter_file_url')}\n          </div>\n          <TextInput\n            bind:value={enteredURL}\n            flex\n            oninput={() => {\n              const url = enteredURL.trim();\n\n              selectedResource = url ? { url } : undefined;\n            }}\n          />\n        </EmptyState>\n      {/if}\n      {#each enabledExternalServiceEntries as [serviceId, serviceProps] (serviceId)}\n        {#if libraryName === serviceId}\n          <ExternalAssetsPanel\n            {kind}\n            {searchTerms}\n            {serviceProps}\n            gridId=\"select-assets-grid\"\n            onSelect={(resource) => {\n              selectedResource = resource;\n            }}\n          />\n        {/if}\n      {/each}\n    </div>\n  </div>\n</Dialog>\n\n<FilePicker\n  bind:this={filePicker}\n  {accept}\n  onSelect={({ files }) => {\n    onDrop(files);\n  }}\n/>\n\n<style lang=\"scss\">\n  .wrapper {\n    display: flex;\n    gap: 16px;\n    height: 60dvh;\n\n    @media (width < 768px) {\n      flex-direction: column;\n      overflow: hidden;\n      height: 72dvh;\n    }\n\n    .nav {\n      display: flex;\n      gap: 4px;\n\n      @media (width < 768px) {\n        flex-direction: column;\n      }\n    }\n\n    :global(.listbox) {\n      flex: none;\n      background-color: transparent;\n    }\n\n    .content-pane {\n      overflow: auto;\n      flex: auto;\n    }\n  }\n\n  .filter-tools {\n    display: flex;\n    gap: 8px;\n  }\n</style>\n","import { isObject } from '@sveltia/utils/object';\n\nimport { getMediaLibraryOptions } from '$lib/services/integrations/media-libraries';\nimport {\n  RASTER_IMAGE_CONVERSION_FORMATS,\n  RASTER_IMAGE_EXTENSION_REGEX,\n  RASTER_IMAGE_FORMATS,\n} from '$lib/services/utils/media/image';\nimport { optimizeSVG, transformImage } from '$lib/services/utils/media/image/transform';\n\n/**\n * @import {\n * DefaultMediaLibraryConfig,\n * FileTransformations,\n * MediaField,\n * RasterImageTransformationOptions,\n * } from '$lib/types/public';\n */\n\n/**\n * Get normalized default media library options.\n * @param {object} [options] Options.\n * @param {MediaField} [options.fieldConfig] Field configuration.\n * @returns {{ config: DefaultMediaLibraryConfig }} Options.\n */\nexport const getDefaultMediaLibraryOptions = ({ fieldConfig } = {}) => {\n  const options = getMediaLibraryOptions({ fieldConfig });\n\n  /** @type {DefaultMediaLibraryConfig} */\n  const {\n    max_file_size: maxSize,\n    slugify_filename: slugify,\n    transformations,\n  } = typeof options === 'boolean' ? {} : (options?.config ?? {});\n\n  return {\n    config: {\n      max_file_size: typeof maxSize === 'number' && Number.isInteger(maxSize) ? maxSize : Infinity,\n      slugify_filename: typeof slugify === 'boolean' ? slugify : false,\n      transformations: isObject(transformations) ? transformations : undefined,\n    },\n  };\n};\n\n/**\n * Process the given file by applying a transformation if available.\n * @param {File} file Original file.\n * @param {FileTransformations} transformations File transformation options.\n * @returns {Promise<File>} Transformed file, or the original file if no transformation is applied.\n * @todo Move the `transformation` option validation to config parser.\n */\nexport const transformFile = async (file, transformations) => {\n  const [type, subType] = file.type.split('/');\n\n  // Process raster image\n  if (type === 'image' && subType !== 'svg+xml') {\n    /** @type {RasterImageTransformationOptions | undefined} */\n    let transformation;\n\n    if (subType in transformations) {\n      transformation = /** @type {Record<string, any>} */ (transformations)[subType];\n    } else if (\n      'raster_image' in transformations &&\n      /** @type {string[]} */ (RASTER_IMAGE_FORMATS).includes(subType)\n    ) {\n      transformation = transformations.raster_image;\n    }\n\n    if (transformation) {\n      const { format, quality, width, height } = transformation;\n\n      const newFormat =\n        format && RASTER_IMAGE_CONVERSION_FORMATS.includes(format) ? format : 'webp';\n\n      const blob = await transformImage(file, {\n        format: newFormat,\n        quality: quality && Number.isSafeInteger(quality) ? quality : 85,\n        width: width && Number.isSafeInteger(width) ? width : undefined,\n        height: height && Number.isSafeInteger(height) ? height : undefined,\n      });\n\n      const newFileName =\n        blob.type === `image/${newFormat}`\n          ? RASTER_IMAGE_EXTENSION_REGEX.test(file.name)\n            ? file.name.replace(RASTER_IMAGE_EXTENSION_REGEX, newFormat)\n            : file.name.concat(newFormat)\n          : // Failed to transform\n            file.name;\n\n      return new File([blob], newFileName, { type: blob.type });\n    }\n  }\n\n  // Process SVG image\n  if (type === 'image' && subType === 'svg+xml' && transformations.svg?.optimize) {\n    return new File([await optimizeSVG(file)], file.name, { type: file.type });\n  }\n\n  return file;\n};\n","<!--\n  @component\n  Implement the editor for the File and Image widgets.\n  @see https://decapcms.org/docs/widgets/#file\n  @see https://decapcms.org/docs/widgets/#image\n-->\n<script>\n  import { AlertDialog, Button, ConfirmationDialog, Icon, TextArea } from '@sveltia/ui';\n  import { getHash } from '@sveltia/utils/crypto';\n  import equal from 'fast-deep-equal';\n  import DOMPurify from 'isomorphic-dompurify';\n  import { flushSync, getContext } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import SelectAssetsDialog from '$lib/components/assets/browser/select-assets-dialog.svelte';\n  import AssetPreview from '$lib/components/assets/shared/asset-preview.svelte';\n  import DropZone from '$lib/components/assets/shared/drop-zone.svelte';\n  import { allAssets, getAssetByPath } from '$lib/services/assets';\n  import { getAssetFolder, globalAssetFolder } from '$lib/services/assets/folders';\n  import { getAssetPublicURL, getMediaFieldURL } from '$lib/services/assets/info';\n  import { getMediaKind } from '$lib/services/assets/kinds';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import {\n    getDefaultMediaLibraryOptions,\n    transformFile,\n  } from '$lib/services/integrations/media-libraries/default';\n  import { hasMouse } from '$lib/services/user/env';\n  import { createPath, formatSize, getGitHash } from '$lib/services/utils/file';\n  import { SUPPORTED_IMAGE_TYPES } from '$lib/services/utils/media/image';\n\n  /**\n   * @import {\n   * Asset,\n   * AssetKind,\n   * EntryDraft,\n   * FieldEditorContext,\n   * SelectedResource,\n   * WidgetEditorProps,\n   * } from '$lib/types/private';\n   * @import { MediaField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {MediaField} fieldConfig Field configuration.\n   * @property {string | undefined} currentValue Field value.\n   */\n\n  /** @type {FieldEditorContext} */\n  const { widgetContext = undefined } = getContext('field-editor') ?? {};\n\n  /** @type {WidgetEditorProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    fieldId,\n    fieldConfig,\n    currentValue = $bindable(),\n    required = true,\n    readonly = false,\n    invalid = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {string | undefined} */\n  let url;\n  /** @type {string | undefined} */\n  let credit;\n\n  /** @type {Asset | undefined} */\n  let asset = $state();\n  /** @type {File | undefined} */\n  let file = $state();\n  /** @type {AssetKind | undefined} */\n  let kind = $state();\n  /** @type {string | undefined} */\n  let src = $state();\n  let showSelectAssetsDialog = $state(false);\n  let showSizeLimitDialog = $state(false);\n  let showPhotoCreditDialog = $state(false);\n  let photoCredit = $state('');\n  /** @type {DropZone | undefined} */\n  let dropZone = $state();\n  let processing = $state(false);\n\n  const {\n    widget: widgetName,\n    accept,\n    // Widget-specific options\n    choose_url: canEnterURL = true,\n  } = $derived(fieldConfig);\n  const isImageWidget = $derived(widgetName === 'image');\n  const {\n    config: { max_file_size: maxSize, transformations },\n  } = $derived(getDefaultMediaLibraryOptions({ fieldConfig }));\n  const entry = $derived($entryDraft?.originalEntry);\n  const collectionName = $derived($entryDraft?.collectionName ?? '');\n  const fileName = $derived($entryDraft?.fileName);\n  const showRemoveButton = $derived(\n    !required &&\n      (!widgetContext ||\n        !['markdown-editor-component', 'single-field-list-widget'].includes(widgetContext)),\n  );\n\n  /**\n   * Get the path to display for the asset or file. For an unsaved file, this will be the same as\n   * the final path in most cases, but it could be different if a file with the same name already\n   * exists in the assets folder, and the new file is renamed to avoid conflicts.\n   * @type {string} The path to display. If the folder could not be determined, it will only be the\n   * file name.\n   * @todo Handle template tags and relative paths if possible.\n   */\n  const fileDisplayPath = $derived.by(() => {\n    if (!currentValue) {\n      return '';\n    }\n\n    if (file) {\n      const { publicPath, entryRelative, hasTemplateTags } =\n        $entryDraft?.files[currentValue].folder ?? {};\n\n      const _folder = entryRelative || hasTemplateTags ? '' : publicPath || '';\n\n      return createPath([_folder, decodeURI(file.name.normalize())]);\n    }\n\n    if (!currentValue.startsWith('blob:')) {\n      return decodeURI(currentValue);\n    }\n\n    return '';\n  });\n\n  /**\n   * Get the blob URL of an unsaved file that matches the given file.\n   * @param {File} _file File to be searched.\n   * @returns {Promise<string | undefined>} Blob URL.\n   */\n  const getExistingBlobURL = async (_file) => {\n    const hash = await getHash(_file);\n    /** @type {string | undefined} */\n    let foundURL = undefined;\n\n    await Promise.all(\n      Object.entries($entryDraft?.files ?? {}).map(async ([blobURL, f]) => {\n        if (!foundURL && (await getHash(f.file)) === hash) {\n          foundURL = blobURL;\n        }\n      }),\n    );\n\n    return foundURL;\n  };\n\n  /**\n   * Reset the current selection.\n   */\n  const resetSelection = () => {\n    dropZone?.reset();\n\n    // This will reset `file`, `asset`, `kind` and `src` via `updateProps`\n    currentValue = '';\n\n    // Force running `updateProps` first, otherwise `file`, `asset`, etc. will be  `undefined` while\n    // `await`ing a Promise in `onResourceSelect`\n    flushSync();\n  };\n\n  /**\n   * Handle selected resource.\n   * @param {SelectedResource} selectedResource Selected resource.\n   */\n  const onResourceSelect = async (selectedResource) => {\n    processing = true;\n    resetSelection();\n\n    ({ asset, file, url, credit } = selectedResource);\n\n    if (file) {\n      const existingBlobURL = await getExistingBlobURL(file);\n\n      if (existingBlobURL) {\n        currentValue = existingBlobURL;\n      } else {\n        if (transformations) {\n          file = await transformFile(file, transformations);\n        }\n\n        const sha = await getGitHash(file);\n        const { folder } = selectedResource;\n        const existingAsset = $allAssets.find((a) => a.sha === sha && equal(a.folder, folder));\n\n        if (existingAsset) {\n          // If the selected file has already been uploaded, use the existing asset instead of\n          // uploading the same file twice\n          asset = existingAsset;\n          file = undefined;\n        } else if (file.size > /** @type {number} */ (maxSize)) {\n          showSizeLimitDialog = true;\n          file = undefined;\n        } else {\n          // Set a temporary blob URL, which will be later replaced with the actual file path\n          currentValue = URL.createObjectURL(file);\n          // Cache the file itself for later upload\n          /** @type {EntryDraft} */ ($entryDraft).files[currentValue] = { file, folder };\n        }\n      }\n    }\n\n    if (asset) {\n      if (!asset.unsaved) {\n        currentValue = getAssetPublicURL(asset, { pathOnly: true, allowSpecial: true, entry });\n      } else if (asset.file) {\n        currentValue = await getExistingBlobURL(asset.file);\n      }\n    }\n\n    if (url) {\n      currentValue = url;\n    }\n\n    if (credit) {\n      photoCredit = DOMPurify.sanitize(credit, { ALLOWED_TAGS: ['a'], ALLOWED_ATTR: ['href'] });\n      showPhotoCreditDialog = true;\n    }\n\n    processing = false;\n  };\n\n  /**\n   * Update a couple of properties when {@link currentValue} is updated.\n   */\n  const updateProps = async () => {\n    // Restore `file` after a draft backup is restored\n    if (currentValue?.startsWith('blob:') && $entryDraft) {\n      file = $entryDraft.files[currentValue]?.file;\n    }\n\n    if (currentValue) {\n      const getURLArgs = { value: currentValue, entry, collectionName, fileName };\n\n      // Update the `src` when an asset is selected\n      if (currentValue.startsWith('blob:')) {\n        asset = undefined;\n        kind = currentValue ? await getMediaKind(currentValue) : undefined;\n        src =\n          currentValue && kind\n            ? await getMediaFieldURL({ ...getURLArgs, thumbnail: true })\n            : undefined;\n      } else if (isImageWidget && /^https?:/.test(currentValue)) {\n        asset = undefined;\n        kind = 'image';\n        src = currentValue;\n      } else {\n        asset = getAssetByPath({ ...getURLArgs });\n        kind = undefined;\n        src = undefined;\n      }\n    } else {\n      // Remove `file` after the value is removed\n      asset = undefined;\n      file = undefined;\n      kind = undefined;\n      src = undefined;\n    }\n  };\n\n  $effect(() => {\n    void [currentValue];\n    updateProps();\n  });\n</script>\n\n<DropZone\n  bind:this={dropZone}\n  disabled={readonly}\n  accept={accept ?? (isImageWidget ? SUPPORTED_IMAGE_TYPES.join(',') : undefined)}\n  onDrop={({ files }) => {\n    if (files.length) {\n      onResourceSelect({\n        file: files[0],\n        folder:\n          getAssetFolder({ collectionName, fileName }) ??\n          getAssetFolder({ collectionName }) ??\n          $globalAssetFolder,\n      });\n    }\n  }}\n>\n  {#if currentValue && !processing}\n    <div role=\"none\" class=\"filled\">\n      {#if kind && src}\n        <AssetPreview {kind} {src} variant=\"tile\" checkerboard={true} />\n      {:else if asset}\n        <AssetPreview kind={asset.kind} {asset} variant=\"tile\" checkerboard={true} />\n      {:else}\n        <span role=\"none\" class=\"preview no-thumbnail\">\n          <Icon name=\"draft\" />\n        </span>\n      {/if}\n      <div role=\"none\">\n        {#if typeof currentValue === 'string'}\n          <div\n            role=\"textbox\"\n            id=\"{fieldId}-value\"\n            tabindex=\"0\"\n            class=\"filename\"\n            aria-readonly={readonly}\n            aria-invalid={invalid}\n            aria-required={required}\n            aria-labelledby=\"{fieldId}-label\"\n            aria-errormessage=\"{fieldId}-error\"\n          >\n            {fileDisplayPath}\n          </div>\n        {/if}\n        <div role=\"none\">\n          <Button\n            disabled={readonly}\n            variant=\"tertiary\"\n            label={$_('replace')}\n            aria-label={$_(`replace_${widgetName}`)}\n            aria-controls=\"{fieldId}-value\"\n            onclick={() => {\n              showSelectAssetsDialog = true;\n            }}\n          />\n          {#if showRemoveButton}\n            <Button\n              disabled={readonly}\n              variant=\"tertiary\"\n              label={$_('remove')}\n              aria-label={$_(`remove_${widgetName}`)}\n              aria-controls=\"{fieldId}-value\"\n              onclick={() => {\n                resetSelection();\n              }}\n            />\n          {/if}\n        </div>\n      </div>\n    </div>\n  {:else}\n    <div role=\"none\" class=\"empty\" class:invalid class:processing>\n      <Button\n        flex\n        role=\"button\"\n        variant=\"tertiary\"\n        disabled={readonly || processing}\n        tabindex=\"0\"\n        onclick={() => {\n          if (!readonly) {\n            showSelectAssetsDialog = true;\n          }\n        }}\n      >\n        <Icon name=\"cloud_upload\" />\n        <div role=\"none\">\n          {#if processing}\n            <div role=\"status\">\n              {$_('processing_file')}\n            </div>\n          {:else if isImageWidget}\n            {$_($hasMouse ? 'drop_image_file_or_click_to_browse' : 'tap_to_browse')}\n          {:else}\n            {$_($hasMouse ? 'drop_file_or_click_to_browse' : 'tap_to_browse')}\n          {/if}\n        </div>\n      </Button>\n    </div>\n  {/if}\n</DropZone>\n\n<SelectAssetsDialog\n  kind={isImageWidget ? 'image' : undefined}\n  {accept}\n  {canEnterURL}\n  {entryDraft}\n  {fieldConfig}\n  bind:open={showSelectAssetsDialog}\n  onSelect={onResourceSelect}\n/>\n\n<AlertDialog bind:open={showSizeLimitDialog} title={$_('assets_dialog.large_file.title')}>\n  {$_('warning_oversized_file', { values: { size: formatSize(/** @type {number} */ (maxSize)) } })}\n</AlertDialog>\n\n<ConfirmationDialog\n  bind:open={showPhotoCreditDialog}\n  title={$_('assets_dialog.photo_credit.title')}\n  okLabel={$_('copy')}\n  onOk={() => {\n    navigator.clipboard.writeText(photoCredit);\n  }}\n>\n  <div role=\"none\">{$_('assets_dialog.photo_credit.description')}</div>\n  <div role=\"none\">\n    <TextArea\n      flex\n      readonly\n      value={photoCredit}\n      onclick={(event) => {\n        /** @type {HTMLTextAreaElement} */ (event.target).focus();\n        /** @type {HTMLTextAreaElement} */ (event.target).select();\n      }}\n    />\n  </div>\n</ConfirmationDialog>\n\n<style lang=\"scss\">\n  .filled {\n    display: flex !important;\n    align-items: center;\n    gap: 16px;\n    margin: var(--sui-focus-ring-width);\n\n    :global {\n      .preview {\n        flex: none;\n        width: 120px !important;\n        height: 120px !important;\n        border-color: var(--sui-control-border-color) !important;\n        border-radius: var(--sui-control-medium-border-radius);\n        padding: 8px !important;\n\n        &.no-thumbnail {\n          display: flex;\n          align-items: center;\n          justify-content: center;\n          background-color: var(--sui-secondary-background-color);\n\n          .icon {\n            font-size: 64px;\n          }\n        }\n      }\n    }\n\n    & > div {\n      flex: auto;\n      overflow: hidden;\n\n      .filename {\n        margin: var(--sui-focus-ring-width);\n        padding: 4px;\n        word-break: break-all;\n\n        &:empty {\n          margin: 0;\n          padding: 0;\n        }\n      }\n    }\n  }\n\n  .empty {\n    :global {\n      button {\n        flex-direction: column;\n        justify-content: center;\n        height: 120px;\n        font-size: var(--sui-font-size-small);\n\n        .icon {\n          color: var(--sui-secondary-foreground-color);\n          font-size: 48px;\n        }\n\n        &:disabled {\n          pointer-events: none !important;\n\n          * {\n            opacity: 0.5;\n          }\n        }\n      }\n    }\n\n    &.invalid {\n      :global {\n        button {\n          border-color: var(--sui-error-border-color);\n        }\n      }\n    }\n  }\n</style>\n","<!--\n  @component\n  Implement the preview for the File and Image widgets.\n  @see https://decapcms.org/docs/widgets/#file\n  @see https://decapcms.org/docs/widgets/#image\n-->\n<script>\n  import AssetPreview from '$lib/components/assets/shared/asset-preview.svelte';\n  import { getMediaFieldURL } from '$lib/services/assets/info';\n  import { getMediaKind } from '$lib/services/assets/kinds';\n  import { entryDraft } from '$lib/services/contents/draft';\n\n  /**\n   * @import { AssetKind, WidgetPreviewProps } from '$lib/types/private';\n   * @import { FileField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {FileField} fieldConfig Field configuration.\n   * @property {string | undefined} currentValue Field value.\n   */\n\n  /** @type {WidgetPreviewProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    currentValue,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {AssetKind | undefined} */\n  let kind = $state();\n  /** @type {string | undefined} */\n  let src = $state();\n\n  const entry = $derived($entryDraft?.originalEntry);\n  const collectionName = $derived($entryDraft?.collectionName ?? '');\n  const fileName = $derived($entryDraft?.fileName);\n\n  /**\n   * Update a couple of properties when {@link currentValue} is updated.\n   */\n  const updateProps = async () => {\n    kind = currentValue ? await getMediaKind(currentValue) : undefined;\n    src =\n      currentValue && kind\n        ? await getMediaFieldURL({ value: currentValue, entry, collectionName, fileName })\n        : undefined;\n  };\n\n  $effect(() => {\n    void [currentValue];\n    updateProps();\n  });\n</script>\n\n{#if kind && src}\n  <p>\n    <AssetPreview {kind} {src} controls={['audio', 'video'].includes(kind)} />\n  </p>\n{:else if typeof currentValue === 'string' && currentValue.trim() && !currentValue.startsWith('blob:')}\n  <p>{currentValue}</p>\n{/if}\n","import { get } from 'svelte/store';\n\nimport { i18nAutoDupEnabled } from '$lib/services/contents/draft';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import { DraftValueStoreKey, EntryDraft, InternalLocaleCode } from '$lib/types/private';\n * @import { FieldKeyPath, KeyValueField } from '$lib/types/public';\n */\n\n/**\n * Get key-value pairs from the draft store.\n * @param {object} args Arguments.\n * @param {Writable<EntryDraft>} args.entryDraft Draft store.\n * @param {DraftValueStoreKey} [args.valueStoreKey] Key to store the values in {@link EntryDraft}.\n * @param {FieldKeyPath} args.keyPath Field key path.\n * @param {InternalLocaleCode} args.locale Current pane’s locale.\n * @returns {[string, string][]} Key-value pairs.\n */\nexport const getPairs = ({ entryDraft, valueStoreKey = 'currentValues', keyPath, locale }) =>\n  Object.entries(get(entryDraft)[valueStoreKey][locale] ?? {})\n    .filter(([_keyPath]) => _keyPath.startsWith(`${keyPath}.`))\n    .map(([_keyPath, value]) => [_keyPath.replace(`${keyPath}.`, ''), value]);\n\n/**\n * Validate the given key-value pairs.\n * @param {object} args Arguments.\n * @param {[string, string][]} args.pairs Key-value pairs.\n * @param {boolean[]} args.edited Whether each pair’s key is edited.\n * @returns {('empty' | 'duplicate' | undefined)[]} Result.\n */\nexport const validatePairs = ({ pairs, edited }) =>\n  pairs.map(([key], index, arr) => {\n    if (!key.trim() && edited[index]) {\n      return 'empty';\n    }\n\n    if (key.trim() && arr.findIndex((i) => i[0] === key) !== index) {\n      return 'duplicate';\n    }\n\n    return undefined;\n  });\n\n/**\n * Save the key-value pairs to the draft store.\n * @param {object} args Arguments.\n * @param {Writable<EntryDraft>} args.entryDraft Draft store.\n * @param {KeyValueField} args.fieldConfig Field configuration.\n * @param {FieldKeyPath} args.keyPath Field key path.\n * @param {InternalLocaleCode} args.locale Current pane’s locale.\n * @param {[string, string][]} args.pairs Key-value pairs.\n */\nexport const savePairs = ({ entryDraft, keyPath, locale, fieldConfig, pairs }) => {\n  const { i18n } = fieldConfig;\n\n  i18nAutoDupEnabled.set(false);\n\n  entryDraft.update((draft) => {\n    if (draft) {\n      Object.entries(draft.currentValues).forEach(([_locale, content]) => {\n        if (_locale === locale || i18n === 'duplicate') {\n          // Clear pairs first\n          Object.entries(content).forEach(([_keyPath]) => {\n            if (_keyPath.startsWith(`${keyPath}.`)) {\n              delete content[_keyPath];\n            }\n          });\n\n          pairs.forEach(([key, value]) => {\n            content[`${keyPath}.${key}`] = value;\n          });\n        }\n      });\n    }\n\n    return draft;\n  });\n\n  i18nAutoDupEnabled.set(true);\n};\n","<!--\n  @component\n  Implement the editor for the KeyValue widget compatible with Static CMS.\n  @see https://staticjscms.netlify.app/docs/widget-keyvalue\n-->\n<script>\n  import { Button, Icon, TextInput } from '@sveltia/ui';\n  import equal from 'fast-deep-equal';\n  import { getContext, untrack } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import ValidationError from '$lib/components/contents/details/editor/validation-error.svelte';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import {\n    getPairs,\n    savePairs,\n    validatePairs,\n  } from '$lib/services/contents/widgets/key-value/helper';\n\n  /**\n   * @import { Writable } from 'svelte/store';\n   * @import { EntryDraft, FieldEditorContext, WidgetEditorProps } from '$lib/types/private';\n   * @import { KeyValueField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {KeyValueField} fieldConfig Field configuration.\n   * @property {Record<string, string> | undefined} currentValue Field value.\n   */\n\n  /** @type {FieldEditorContext} */\n  const { valueStoreKey = 'currentValues' } = getContext('field-editor') ?? {};\n\n  /** @type {WidgetEditorProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    keyPath,\n    fieldId,\n    fieldConfig,\n    readonly = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const {\n    i18n = false,\n    // Widget-specific options\n    key_label: _keyLabel,\n    value_label: _valueLabel,\n    max = Infinity,\n  } = $derived(fieldConfig);\n  const keyLabel = $derived(_keyLabel || $_('key_value.key'));\n  const valueLabel = $derived(_valueLabel || $_('key_value.value'));\n\n  /** @type {[string, string][]} */\n  let pairs = $state([]);\n  /** @type {HTMLTableRowElement[]} */\n  const rowElements = $state([]);\n  /** @type {boolean[]} */\n  let edited = $state([]);\n  /** @type {('empty' | 'duplicate' | undefined)[]} */\n  let validations = $state([]);\n\n  /**\n   * Update the {@link pairs} whenever the current values are changed.\n   */\n  const updatePairs = () => {\n    if (!$entryDraft) {\n      return;\n    }\n\n    const _entryDraft = /** @type {Writable<EntryDraft>} */ (entryDraft);\n    const updatedPairs = getPairs({ entryDraft: _entryDraft, valueStoreKey, keyPath, locale });\n\n    if (!equal(pairs, updatedPairs)) {\n      pairs = [...updatedPairs];\n      edited = updatedPairs.map(() => false);\n    }\n\n    if (!pairs.length && $entryDraft[valueStoreKey][locale][keyPath] !== null) {\n      // Enable validation\n      $entryDraft[valueStoreKey][locale][keyPath] = null;\n    }\n  };\n\n  /**\n   * Add an empty pair to the {@link pairs} array.\n   */\n  const addPair = () => {\n    if (!$entryDraft) {\n      return;\n    }\n\n    Object.entries($entryDraft[valueStoreKey]).forEach(([_locale, content]) => {\n      if (_locale === locale || i18n === 'duplicate') {\n        // Remove `null` added for validation\n        delete content[keyPath];\n      }\n    });\n\n    pairs.push(['', '']);\n    edited.push(false);\n\n    window.requestAnimationFrame(() => {\n      /** @type {HTMLInputElement} */ (\n        rowElements[pairs.length - 1].querySelector('input')\n      ).focus();\n    });\n  };\n\n  /**\n   * Remove a pair from {@link pairs}.\n   * @param {number} index Index in the {@link pairs} array.\n   */\n  const removePair = (index) => {\n    pairs.splice(index, 1);\n    edited.splice(index, 1);\n  };\n\n  /**\n   * Update the draft store whenever the {@link pairs} is updated.\n   */\n  const updateStore = () => {\n    validations = validatePairs({ pairs, edited });\n\n    if (!$entryDraft || validations.some(Boolean) || pairs.some(([key]) => !key.trim())) {\n      return;\n    }\n\n    const _entryDraft = /** @type {Writable<EntryDraft>} */ (entryDraft);\n\n    savePairs({ entryDraft: _entryDraft, fieldConfig, keyPath, locale, pairs });\n  };\n\n  $effect(() => {\n    void [$state.snapshot($entryDraft?.[valueStoreKey][locale])];\n\n    untrack(() => {\n      updatePairs();\n    });\n  });\n\n  $effect(() => {\n    void [$state.snapshot(pairs)];\n\n    untrack(() => {\n      updateStore();\n    });\n  });\n</script>\n\n{#if pairs.length}\n  <table>\n    <thead>\n      <tr>\n        <th scope=\"col\" class=\"key\">{keyLabel}</th>\n        <th scope=\"col\" class=\"value\">{valueLabel}</th>\n        {#if !readonly}\n          <th scope=\"col\" class=\"action\" aria-label={$_('key_value.action')}></th>\n        {/if}\n      </tr>\n    </thead>\n    <tbody>\n      {#each pairs as pair, index}\n        <tr bind:this={rowElements[index]}>\n          <td class=\"key\">\n            <TextInput\n              {readonly}\n              flex\n              bind:value={pair[0]}\n              invalid={!!validations[index]}\n              aria-label={keyLabel}\n              aria-errormessage={validations[index] ? `${fieldId}-kv-error` : undefined}\n              oninput={() => {\n                edited[index] = true;\n              }}\n              onkeydown={(event) => {\n                // Move focus with Enter key\n                if (event.key === 'Enter' && !event.isComposing) {\n                  /** @type {HTMLInputElement} */ (\n                    rowElements[index].querySelector('td.value input')\n                  ).focus();\n                }\n              }}\n            />\n          </td>\n          <td class=\"value\">\n            <TextInput\n              {readonly}\n              flex\n              bind:value={pair[1]}\n              aria-label={valueLabel}\n              onkeydown={(event) => {\n                // Move focus or add a new pair with Enter key\n                if (event.key === 'Enter' && !event.isComposing) {\n                  if (index < pairs.length - 1) {\n                    /** @type {HTMLInputElement} */ (\n                      rowElements[index + 1].querySelector('input')\n                    ).focus();\n                  } else if (pairs.length < max) {\n                    addPair();\n                  }\n                }\n              }}\n            />\n          </td>\n          {#if !readonly}\n            <td class=\"action\">\n              <Button\n                variant=\"ghost\"\n                size=\"small\"\n                iconic\n                aria-label={$_('remove')}\n                onclick={() => {\n                  removePair(index);\n                }}\n              >\n                {#snippet startIcon()}\n                  <Icon name=\"close\" />\n                {/snippet}\n              </Button>\n            </td>\n          {/if}\n        </tr>\n      {/each}\n    </tbody>\n  </table>\n{/if}\n\n{#if validations.some(Boolean)}\n  <ValidationError id=\"{fieldId}-kv-error\">\n    {#if validations.includes('empty')}\n      {$_('key_value.empty_key')}\n    {/if}\n    {#if validations.includes('duplicate')}\n      {$_('key_value.duplicate_key')}\n    {/if}\n  </ValidationError>\n{/if}\n\n<div role=\"none\">\n  <Button\n    label={$_('add')}\n    variant=\"tertiary\"\n    disabled={readonly || pairs.length >= max}\n    onclick={() => {\n      addPair();\n    }}\n  />\n</div>\n\n<style lang=\"scss\">\n  table {\n    width: -moz-available;\n    width: -webkit-fill-available;\n    width: stretch;\n  }\n\n  th,\n  td {\n    border-width: 0;\n  }\n\n  th {\n    padding-block: 4px;\n    color: var(--sui-tertiary-foreground-color);\n    font-size: var(--sui-font-size-small);\n    font-weight: var(--sui-font-weight-normal);\n    text-align: left;\n\n    &.key,\n    &.value {\n      width: 50%;\n    }\n  }\n\n  td {\n    padding: 0;\n    vertical-align: middle;\n  }\n</style>\n","<!--\n  @component\n  Implement the preview for the KeyValue widget compatible with Static CMS.\n  @see https://staticjscms.netlify.app/docs/widget-keyvalue\n-->\n<script>\n  import equal from 'fast-deep-equal';\n  import { untrack } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { getPairs } from '$lib/services/contents/widgets/key-value/helper';\n\n  /**\n   * @import { Writable } from 'svelte/store';\n   * @import { EntryDraft, WidgetPreviewProps } from '$lib/types/private';\n   * @import { KeyValueField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {KeyValueField} fieldConfig Field configuration.\n   * @property {Record<string, string> | undefined} currentValue Field value.\n   */\n\n  /** @type {WidgetPreviewProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    keyPath,\n    fieldConfig,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const {\n    // Widget-specific options\n    key_label: _keyLabel,\n    value_label: _valueLabel,\n  } = $derived(fieldConfig);\n  const keyLabel = $derived(_keyLabel || $_('key_value.key'));\n  const valueLabel = $derived(_valueLabel || $_('key_value.value'));\n\n  /** @type {[string, string][]}  */\n  let pairs = $state([]);\n\n  /**\n   * Update the key-value {@link pairs} whenever the draft store is updated.\n   */\n  const updatePairs = () => {\n    const _entryDraft = /** @type {Writable<EntryDraft>} */ (entryDraft);\n    const updatedPairs = getPairs({ entryDraft: _entryDraft, keyPath, locale });\n\n    if (!equal(pairs, updatedPairs)) {\n      pairs = updatedPairs;\n    }\n  };\n\n  $effect(() => {\n    if ($entryDraft) {\n      void [$state.snapshot($entryDraft.currentValues[locale])];\n\n      untrack(() => {\n        updatePairs();\n      });\n    }\n  });\n</script>\n\n{#if pairs.length}\n  <table>\n    <thead>\n      <tr>\n        <th scope=\"col\">{keyLabel}</th>\n        <th scope=\"col\">{valueLabel}</th>\n      </tr>\n    </thead>\n    <tbody>\n      {#each pairs as [key, value]}\n        <tr>\n          <td>{key}</td>\n          <td>{value}</td>\n        </tr>\n      {/each}\n    </tbody>\n  </table>\n{/if}\n\n<style lang=\"scss\">\n  table {\n    width: -moz-available;\n    width: -webkit-fill-available;\n    width: stretch;\n  }\n\n  th {\n    padding-block: 4px;\n    width: 50%;\n    color: var(--sui-tertiary-foreground-color);\n    background-color: var(--sui-tertiary-background-color);\n    font-size: var(--sui-font-size-small);\n    font-weight: var(--sui-font-weight-normal);\n    text-align: left;\n  }\n\n  td {\n    &:empty::after {\n      content: '\\00a0'; // nbsp\n    }\n  }\n</style>\n","<script>\n  import { Button, Icon, Menu, MenuButton, MenuItem } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  /**\n   * @import { ListField, ObjectField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} [disabled] Whether to disable the button.\n   * @property {ListField | ObjectField} fieldConfig Field configuration.\n   * @property {object[]} [items] List items. `<ListEditor>` only.\n   * @property {(args?: { type?: string }) => void} [addItem] Function to add a new item.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    disabled = false,\n    fieldConfig,\n    items = [],\n    addItem = () => undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const {\n    widget: widgetType,\n    name: fieldName,\n    label: labelPlural,\n    // Widget-specific options\n    types,\n  } = $derived(fieldConfig);\n  const listField = $derived(\n    widgetType === 'list' ? /** @type {ListField} */ (fieldConfig) : undefined,\n  );\n  const labelSingular = $derived(listField?.label_singular ?? '');\n  const max = $derived(listField?.max ?? undefined);\n  const label = $derived(\n    $_('add_x', { values: { name: labelSingular || labelPlural || fieldName } }),\n  );\n  const _disabled = $derived(disabled || (typeof max === 'number' && items.length === max));\n</script>\n\n{#if Array.isArray(types)}\n  <MenuButton variant=\"tertiary\" {label} disabled={_disabled}>\n    {#snippet startIcon()}\n      <Icon name=\"add\" />\n    {/snippet}\n    {#snippet endIcon()}{/snippet}\n    {#snippet popup()}\n      <Menu aria-label={$_('select_list_type')}>\n        {#each types as { name, label: itemLabel } (name)}\n          <MenuItem label={itemLabel || name} onclick={() => addItem({ type: name })} />\n        {/each}\n      </Menu>\n    {/snippet}\n  </MenuButton>\n{:else}\n  <Button variant=\"tertiary\" {label} disabled={_disabled} onclick={() => addItem()}>\n    {#snippet startIcon()}\n      <Icon name=\"add\" />\n    {/snippet}\n  </Button>\n{/if}\n","<script>\n  import { Button, Icon } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [label] Item label.\n   * @property {string} controlId `aria-controls` ID.\n   * @property {boolean} expanded Whether the item is expanded.\n   * @property {() => void} [toggleExpanded] Function to toggle the item.\n   * @property {Snippet | undefined} [centerContent] Center slot content.\n   * @property {Snippet | undefined} [endContent] End slot content.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    label = '',\n    controlId,\n    expanded,\n    toggleExpanded,\n    centerContent = undefined,\n    endContent = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div role=\"none\" class=\"header\">\n  <div role=\"none\">\n    <Button\n      size=\"small\"\n      disabled={!toggleExpanded}\n      aria-label={expanded ? $_('collapse') : $_('expand')}\n      aria-expanded={expanded}\n      aria-controls={controlId}\n      onclick={() => {\n        toggleExpanded?.();\n      }}\n    >\n      {#snippet startIcon()}\n        <Icon name={expanded ? 'expand_more' : 'chevron_right'} />\n      {/snippet}\n      {#if label}\n        <span role=\"none\" class=\"type\">\n          {label}\n        </span>\n      {/if}\n    </Button>\n  </div>\n  <div role=\"none\">\n    {@render centerContent?.()}\n  </div>\n  <div role=\"none\">\n    {@render endContent?.()}\n  </div>\n</div>\n\n<style lang=\"scss\">\n  .header {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    background-color: var(--sui-secondary-border-color);\n\n    & > div {\n      display: flex;\n      align-items: center;\n\n      &:first-child {\n        justify-content: flex-start;\n        width: 40%;\n      }\n\n      &:nth-child(2) {\n        width: 20%;\n        justify-content: center;\n      }\n\n      &:last-child {\n        width: 40%;\n        justify-content: flex-end;\n      }\n    }\n\n    :global(button) {\n      padding: 0;\n      height: 16px;\n    }\n\n    .type {\n      font-size: var(--sui-font-size-small);\n      font-weight: var(--sui-font-weight-bold);\n      color: var(--sui-secondary-foreground-color);\n    }\n  }\n</style>\n","/**\n * @import { BooleanField, FieldKeyPath } from '$lib/types/public';\n * @import { GetDefaultValueMapFuncArgs } from '$lib/types/private';\n */\n\n/**\n * Get the default value for a Boolean field.\n * @param {GetDefaultValueMapFuncArgs} args Arguments.\n * @returns {boolean} Default value.\n */\nconst getDefaultValue = ({ fieldConfig, dynamicValue }) => {\n  if (dynamicValue !== undefined) {\n    return dynamicValue === 'true';\n  }\n\n  const { default: defaultValue } = /** @type {BooleanField} */ (fieldConfig);\n\n  if (typeof defaultValue === 'boolean') {\n    return defaultValue;\n  }\n\n  return false;\n};\n\n/**\n * Get the default value map for a Boolean field.\n * @param {GetDefaultValueMapFuncArgs} args Arguments.\n * @returns {Record<FieldKeyPath, boolean>} Default value map.\n */\nexport const getDefaultValueMap = (args) => ({ [args.keyPath]: getDefaultValue(args) });\n","import { isObject } from '@sveltia/utils/object';\n\n/**\n * @import { CodeField, FieldKeyPath } from '$lib/types/public';\n * @import { GetDefaultValueMapFuncArgs } from '$lib/types/private';\n */\n\n/**\n * Get the default value map for a Code field.\n * @param {GetDefaultValueMapFuncArgs} args Arguments.\n * @returns {Record<FieldKeyPath, any>} Default value map.\n */\nexport const getDefaultValueMap = ({ fieldConfig, keyPath, dynamicValue }) => {\n  const {\n    default: defaultValue,\n    output_code_only: outputCodeOnly = false,\n    keys: outputKeys = { code: 'code', lang: 'lang' },\n  } = /** @type {CodeField} */ (fieldConfig);\n\n  const value = dynamicValue !== undefined ? dynamicValue : defaultValue;\n\n  if (outputCodeOnly) {\n    return { [keyPath]: typeof value === 'string' ? value : '' };\n  }\n\n  const obj = isObject(value) ? /** @type {Record<string, any>} */ (value) : undefined;\n  const code = obj?.[outputKeys.code] ?? value;\n  const lang = obj?.[outputKeys.lang] ?? '';\n\n  return {\n    [keyPath]: {},\n    [`${keyPath}.${outputKeys.code}`]: typeof code === 'string' ? code : '',\n    [`${keyPath}.${outputKeys.lang}`]: typeof lang === 'string' ? lang : '',\n  };\n};\n","import {\n  getCurrentDateTime,\n  getCurrentValue,\n} from '$lib/services/contents/widgets/date-time/helper';\n\n/**\n * @import { GetDefaultValueMapFuncArgs } from '$lib/types/private';\n * @import { DateTimeField, FieldKeyPath } from '$lib/types/public';\n */\n\n/**\n * Get the default value for a DateTime field.\n * @param {GetDefaultValueMapFuncArgs} args Arguments.\n * @returns {string} Default value.\n */\nconst getDefaultValue = ({ fieldConfig, dynamicValue }) => {\n  const config = /** @type {DateTimeField} */ (fieldConfig);\n  const defaultValue = config.default;\n  const value = dynamicValue ?? defaultValue;\n\n  if (typeof value !== 'string') {\n    return '';\n  }\n\n  // Decap CMS 3.3.0 changed the default value from the current date/time to blank, requiring\n  // `{{now}}` to use the current date/time.\n  // @see https://github.com/decaporg/decap-cms/releases/tag/decap-cms%403.3.0\n  // @see https://github.com/decaporg/decap-website/commit/01e54d8392e368e5d7b9fec307f50af584b12c91\n  if (value === '{{now}}') {\n    return /** @type {string} */ (getCurrentValue(getCurrentDateTime(config), '', config));\n  }\n\n  return value;\n};\n\n/**\n * Get the default value map for a DateTime field.\n * @param {GetDefaultValueMapFuncArgs} args Arguments.\n * @returns {Record<FieldKeyPath, string>} Default value map.\n */\nexport const getDefaultValueMap = (args) => ({ [args.keyPath]: getDefaultValue(args) });\n","import { generateUUID } from '@sveltia/utils/crypto';\n\n/**\n * @import { GetDefaultValueMapFuncArgs } from '$lib/types/private';\n * @import { FieldKeyPath, HiddenField } from '$lib/types/public';\n */\n\n/**\n * Get the default value for a Hidden field.\n * @param {GetDefaultValueMapFuncArgs} args Arguments.\n * @returns {any} Default value.\n */\nconst getDefaultValue = ({ fieldConfig, locale, dynamicValue }) => {\n  const { default: defaultValue } = /** @type {HiddenField} */ (fieldConfig);\n  const value = dynamicValue ?? defaultValue;\n\n  if (typeof value !== 'string') {\n    return value;\n  }\n\n  return value.replaceAll(/{{(.+?)}}/g, (_match, tag) => {\n    if (tag === 'locale') {\n      return locale;\n    }\n\n    if (tag === 'datetime') {\n      return new Date().toJSON().replace(/\\d+\\.\\d+Z$/, '00.000Z');\n    }\n\n    if (tag === 'uuid') {\n      return generateUUID();\n    }\n\n    if (tag === 'uuid_short') {\n      return generateUUID('short');\n    }\n\n    if (tag === 'uuid_shorter') {\n      return generateUUID('shorter');\n    }\n\n    return '';\n  });\n};\n\n/**\n * Get the default value map for a Hidden field.\n * @param {GetDefaultValueMapFuncArgs} args Arguments.\n * @returns {Record<FieldKeyPath, any>} Default value map.\n */\nexport const getDefaultValueMap = (args) => ({ [args.keyPath]: getDefaultValue(args) });\n","import { isObject } from '@sveltia/utils/object';\n\nimport { isFieldRequired } from '$lib/services/contents/entry/fields';\n\n/**\n * @import { GetDefaultValueMapFuncArgs } from '$lib/types/private';\n * @import { FieldKeyPath, KeyValueField } from '$lib/types/public';\n */\n\n/**\n * Get the default value for a KeyValue field.\n * @param {GetDefaultValueMapFuncArgs} args Arguments.\n * @returns {Record<string, any>} Default value.\n */\nconst getDefaultValue = ({ fieldConfig, locale }) => {\n  const { default: defaultValue } = /** @type {KeyValueField} */ (fieldConfig);\n  const required = isFieldRequired({ fieldConfig, locale });\n\n  if (defaultValue && isObject(defaultValue)) {\n    return defaultValue;\n  }\n\n  if (required) {\n    return { '': '' };\n  }\n\n  return {};\n};\n\n/**\n * Get the default value map for a KeyValue field.\n * @param {GetDefaultValueMapFuncArgs} args Arguments.\n * @returns {Record<FieldKeyPath, string>} Default value map.\n */\nexport const getDefaultValueMap = (args) => {\n  const { keyPath, dynamicValue } = args;\n  /** @type {Record<string, any> | undefined} */\n  let valueMap;\n\n  if (dynamicValue !== undefined) {\n    try {\n      const jsonValue = JSON.parse(dynamicValue);\n\n      if (isObject(jsonValue)) {\n        // Valid JSON object, use it (even if empty)\n        valueMap = /** @type {Record<string, any>} */ (jsonValue);\n      }\n    } catch {\n      // Invalid JSON\n    }\n  }\n\n  valueMap ??= getDefaultValue(args);\n\n  return Object.fromEntries(\n    Object.entries(valueMap)\n      .filter(([, val]) => typeof val === 'string')\n      .map(([key, val]) => [`${keyPath}.${key}`, val]),\n  );\n};\n","import { isObject } from '@sveltia/utils/object';\nimport { flatten } from 'flat';\n\n/**\n * @import { GetDefaultValueMapFuncArgs } from '$lib/types/private';\n * @import { FieldKeyPath, ListField } from '$lib/types/public';\n */\n\n/**\n * Get the default value map for a List field.\n * @param {GetDefaultValueMapFuncArgs} args Arguments.\n * @returns {Record<FieldKeyPath, any>} Default value map.\n */\nexport const getDefaultValueMap = ({ fieldConfig, keyPath, dynamicValue }) => {\n  const { default: defaultValue, fields, types } = /** @type {ListField} */ (fieldConfig);\n  /** @type {any[]} */\n  let value;\n\n  if (dynamicValue !== undefined) {\n    // Filter out empty strings (this handles the case where `dynamicValue` is '')\n    value = dynamicValue\n      .split(/,\\s*/)\n      .map((val) => val.trim())\n      .filter((val) => val !== '');\n  } else {\n    value = Array.isArray(defaultValue) ? defaultValue : [];\n  }\n\n  const isArray = Array.isArray(value) && !!value.length;\n\n  // Always return the main array, even if empty\n  if (!isArray) {\n    return { [keyPath]: [] };\n  }\n\n  /** @type {Record<string, any>}  */\n  const content = { [keyPath]: value };\n\n  if (fields || types) {\n    value.forEach((item, index) => {\n      if (isObject(item)) {\n        // Flatten the object and prefix keys with the key path and index\n        Object.entries(flatten(item)).forEach(([key, val]) => {\n          content[`${keyPath}.${index}.${key}`] = val;\n        });\n      } else {\n        // For simple string values in object-based lists, add indexed items\n        content[`${keyPath}.${index}`] = item;\n      }\n    });\n  } else {\n    value.forEach((val, index) => {\n      if (!isObject(val)) {\n        content[`${keyPath}.${index}`] = val;\n      }\n    });\n  }\n\n  return content;\n};\n","import { stripTags } from '@sveltia/utils/string';\n\n/**\n * @import { MarkdownField } from '$lib/types/public';\n * @import { GetDefaultValueMapFuncArgs } from '$lib/types/private';\n */\n\n/**\n * Get the default value map for a Markdown field.\n * @param {GetDefaultValueMapFuncArgs} args Arguments.\n * @returns {Record<string, string>} Default value map.\n */\nexport const getDefaultValueMap = ({ fieldConfig, keyPath, dynamicValue }) => {\n  const { default: defaultValue } = /** @type {MarkdownField} */ (fieldConfig);\n  /** @type {string} */\n  let value;\n\n  if (dynamicValue !== undefined) {\n    try {\n      // Sanitize the given value to prevent XSS attacks as the preview may not be sanitized\n      value = stripTags(dynamicValue);\n    } catch {\n      // Fallback for environments where DOMParser is not available (e.g., Node.js tests)\n      // Use a simple regex to remove HTML tags as a basic sanitization measure\n      value = dynamicValue.replace(/<[^>]*>/g, '');\n    }\n  } else {\n    value = defaultValue || '';\n  }\n\n  return { [keyPath]: value };\n};\n","/**\n * @import { FieldKeyPath, NumberField } from '$lib/types/public';\n * @import { GetDefaultValueMapFuncArgs } from '$lib/types/private';\n */\n\n/**\n * Get the default value map for a Number field.\n * @param {GetDefaultValueMapFuncArgs} args Arguments.\n * @returns {Record<FieldKeyPath, number | string | null>} Default value map.\n */\nexport const getDefaultValueMap = ({ fieldConfig, keyPath, dynamicValue }) => {\n  const { default: defaultValue, value_type: valueType = 'int' } = /** @type {NumberField} */ (\n    fieldConfig\n  );\n\n  const value = dynamicValue ?? defaultValue;\n  const isString = typeof value === 'string';\n\n  if (value === undefined) {\n    if (valueType === 'int' || valueType === 'float') {\n      return { [keyPath]: null };\n    }\n\n    return { [keyPath]: '' };\n  }\n\n  if (valueType === 'int') {\n    const parsedValue = isString ? Number.parseInt(value, 10) : value;\n\n    return Number.isInteger(parsedValue) ? { [keyPath]: parsedValue } : {};\n  }\n\n  if (valueType === 'float') {\n    const parsedValue = isString ? Number.parseFloat(value) : value;\n\n    return Number.isFinite(parsedValue) ? { [keyPath]: parsedValue } : {};\n  }\n\n  // For custom value_type (not 'int' or 'float'), return string as-is\n  if (isString) {\n    return { [keyPath]: value };\n  }\n\n  return {};\n};\n","import { isObject } from '@sveltia/utils/object';\nimport { flatten } from 'flat';\n\nimport { populateDefaultValue } from '$lib/services/contents/draft/defaults';\nimport { isFieldRequired } from '$lib/services/contents/entry/fields';\n\n/**\n * @import { FlattenedEntryContent, GetDefaultValueMapFuncArgs } from '$lib/types/private';\n * @import { FieldKeyPath, ObjectField } from '$lib/types/public';\n */\n\n/**\n * Get the default value map for an Object field.\n * @param {GetDefaultValueMapFuncArgs} args Arguments. Note that `dynamicValue` is not used here, as\n * Object fields do not support dynamic values.\n * @returns {Record<FieldKeyPath, any>} Default value map.\n */\nexport const getDefaultValueMap = ({ fieldConfig, keyPath, locale }) => {\n  const {\n    default: defaultValue,\n    fields: subFields,\n    types,\n  } = /** @type {ObjectField} */ (fieldConfig);\n\n  const required = isFieldRequired({ fieldConfig, locale });\n  /** @type {FlattenedEntryContent} */\n  const content = {};\n\n  // If the default value is a valid object, flatten it and prefix keys\n  if (isObject(defaultValue)) {\n    // Flatten the object and prefix keys with the key path and index\n    Object.entries(flatten(defaultValue)).forEach(([key, val]) => {\n      content[`${keyPath}.${key}`] = val;\n    });\n\n    return content;\n  }\n\n  if (!required || Array.isArray(types)) {\n    // Enable validation - for optional fields or fields with variable types\n    content[keyPath] = null;\n\n    return content;\n  }\n\n  // For required fields without object-level default values and without types,\n  // populate default values from subfields if they exist and have defaults\n  if (subFields && subFields.length > 0) {\n    subFields.forEach((_subField) => {\n      populateDefaultValue({\n        content,\n        keyPath: [keyPath, _subField.name].join('.'),\n        fieldConfig: _subField,\n        locale,\n        dynamicValues: {},\n      });\n    });\n  }\n\n  return content;\n};\n","/**\n * @import { GetDefaultValueMapFuncArgs } from '$lib/types/private';\n * @import { FieldKeyPath, RelationField, SelectField } from '$lib/types/public';\n */\n\n/**\n * Get the default value map for a Relation/Select field.\n * @param {GetDefaultValueMapFuncArgs} args Arguments.\n * @returns {Record<FieldKeyPath, any>} Default value map.\n */\nexport const getDefaultValueMap = ({ fieldConfig, keyPath, dynamicValue }) => {\n  const config = /** @type {RelationField | SelectField} */ (fieldConfig);\n  const { default: defaultValue, multiple = false } = config;\n\n  const value =\n    dynamicValue !== undefined ? dynamicValue.split(/,\\s*/).map((val) => val.trim()) : defaultValue;\n\n  const isArray = Array.isArray(value) && !!value.length;\n\n  if (!multiple) {\n    if (dynamicValue !== undefined) {\n      // For single select with dynamicValue, take the first item from split\n      const splitValue = dynamicValue.split(/,\\s*/).map((val) => val.trim());\n\n      return { [keyPath]: splitValue[0] || '' };\n    }\n\n    return { [keyPath]: value !== undefined ? value : '' };\n  }\n\n  if (isArray) {\n    return Object.fromEntries(value.map((val, index) => [`${keyPath}.${index}`, val]));\n  }\n\n  return { [keyPath]: [] };\n};\n","import { getDefaultValueMap as getBooleanFieldDefaultValueMap } from '$lib/services/contents/widgets/boolean/defaults';\nimport { getDefaultValueMap as getCodeFieldDefaultValueMap } from '$lib/services/contents/widgets/code/defaults';\nimport { getDefaultValueMap as getDateTimeFieldDefaultValueMap } from '$lib/services/contents/widgets/date-time/defaults';\nimport { getDefaultValueMap as getHiddenFieldDefaultValueMap } from '$lib/services/contents/widgets/hidden/defaults';\nimport { getDefaultValueMap as getKeyValueFieldDefaultValueMap } from '$lib/services/contents/widgets/key-value/defaults';\nimport { getDefaultValueMap as getListFieldDefaultValueMap } from '$lib/services/contents/widgets/list/defaults';\nimport { getDefaultValueMap as getMarkdownFieldDefaultValueMap } from '$lib/services/contents/widgets/markdown/defaults';\nimport { getDefaultValueMap as getNumberFieldDefaultValueMap } from '$lib/services/contents/widgets/number/defaults';\nimport { getDefaultValueMap as getObjectFieldDefaultValueMap } from '$lib/services/contents/widgets/object/defaults';\nimport { getDefaultValueMap as getSelectFieldDefaultValueMap } from '$lib/services/contents/widgets/select/defaults';\n\n/**\n * @import {\n * FlattenedEntryContent,\n * GetDefaultValueMapFuncArgs,\n * InternalLocaleCode,\n * } from '$lib/types/private';\n * @import { Field, FieldKeyPath } from '$lib/types/public';\n */\n\n/**\n * Map of functions to get default values for different field types.\n * @type {Record<string, (args: GetDefaultValueMapFuncArgs) => Record<FieldKeyPath, any>>}\n */\nconst GET_DEFAULT_VALUE_MAP_FUNCTIONS = {\n  boolean: getBooleanFieldDefaultValueMap,\n  code: getCodeFieldDefaultValueMap,\n  datetime: getDateTimeFieldDefaultValueMap,\n  hidden: getHiddenFieldDefaultValueMap,\n  keyvalue: getKeyValueFieldDefaultValueMap,\n  list: getListFieldDefaultValueMap,\n  markdown: getMarkdownFieldDefaultValueMap,\n  number: getNumberFieldDefaultValueMap,\n  object: getObjectFieldDefaultValueMap,\n  relation: getSelectFieldDefaultValueMap, // alias\n  select: getSelectFieldDefaultValueMap,\n};\n\n/**\n * Populate the default value for the given field. Check if a dynamic default value is specified,\n * then look for the field configuration’s `default` property.\n * @param {object} args Arguments.\n * @param {FlattenedEntryContent} args.content An object holding a new content key-value map.\n * @param {FieldKeyPath} args.keyPath Field key path, e.g. `author.name`.\n * @param {Field} args.fieldConfig Field configuration.\n * @param {InternalLocaleCode} args.locale Locale.\n * @param {Record<string, string>} args.dynamicValues Dynamic default values.\n * @returns {void} The `content` object is modified in place.\n */\nexport const populateDefaultValue = ({ content, keyPath, fieldConfig, locale, dynamicValues }) => {\n  const { widget: widgetName = 'string', default: defaultValue } = fieldConfig;\n\n  // The `compute` widget doesn’t have the `default` option, so we just set an empty string,\n  // otherwise the field won’t work properly\n  if (widgetName === 'compute') {\n    content[keyPath] = '';\n\n    return;\n  }\n\n  const dynamicValue =\n    // Ignore the dynamic value if the key path looks like an array item, e.g. `tags.0` or\n    // `tags.0.name`, because lists are complicated to handle\n    keyPath in dynamicValues && !/\\.\\d+(?:\\.|$)/.test(keyPath)\n      ? dynamicValues[keyPath].trim() || undefined\n      : undefined;\n\n  if (widgetName in GET_DEFAULT_VALUE_MAP_FUNCTIONS) {\n    Object.assign(\n      content,\n      GET_DEFAULT_VALUE_MAP_FUNCTIONS[widgetName]({ fieldConfig, keyPath, locale, dynamicValue }),\n    );\n\n    return;\n  }\n\n  // Handle simple string-type fields, including the built-in `color`, `uuid`, `string` and `text`\n  // widgets as well as custom widgets\n  content[keyPath] = dynamicValue || defaultValue || '';\n};\n\n/**\n * Get the default values for the given fields. If dynamic default values are given, these values\n * take precedence over static default values defined with the site configuration.\n * @param {Field[]} fields Field list of a collection.\n * @param {InternalLocaleCode} locale Locale.\n * @param {Record<string, string>} [dynamicValues] Dynamic default values.\n * @returns {FlattenedEntryContent} Flattened entry content for creating a new draft content or\n * adding a new list item.\n */\nexport const getDefaultValues = (fields, locale, dynamicValues = {}) => {\n  /** @type {FlattenedEntryContent} */\n  const content = {};\n\n  fields.forEach((fieldConfig) => {\n    populateDefaultValue({\n      content,\n      keyPath: fieldConfig.name,\n      fieldConfig,\n      locale,\n      dynamicValues,\n    });\n  });\n\n  return content;\n};\n","import { escapeRegExp } from '@sveltia/utils/string';\nimport { flatten, unflatten } from 'flat';\nimport { get } from 'svelte/store';\n\nimport { entryDraft, i18nAutoDupEnabled } from '$lib/services/contents/draft';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import { DraftValueStoreKey, EntryDraft, InternalLocaleCode } from '$lib/types/private';\n * @import { FieldKeyPath } from '$lib/types/public';\n */\n\n/**\n * Update a flatten object with new properties by adding, updating and deleting properties.\n * @param {Record<string, any>} obj Original object.\n * @param {Record<string, any>} newProps New properties.\n */\nconst updateObject = (obj, newProps) => {\n  Object.entries(newProps).forEach(([key, value]) => {\n    if (obj[key] !== value) {\n      obj[key] = value;\n    }\n  });\n\n  Object.keys(obj).forEach((key) => {\n    if (!(key in newProps)) {\n      delete obj[key];\n    }\n  });\n};\n\n/**\n * Traverse the given object by decoding dot-notated key path.\n * @param {Record<string, any>} obj Original object.\n * @param {FieldKeyPath} keyPath Dot-notated field name.\n * @returns {[values: any, remainder: any]} Unflatten values and flatten remainder.\n */\nconst getItemList = (obj, keyPath) => {\n  const regex = new RegExp(`^${escapeRegExp(keyPath)}\\\\b(?!#)`);\n\n  const filtered = Object.entries(obj)\n    .filter(([k]) => regex.test(k))\n    .map(([k, v]) => [k.replace(regex, '_'), v])\n    .sort();\n\n  return [\n    unflatten(Object.fromEntries(filtered))._ ?? [],\n    Object.fromEntries(Object.entries(obj).filter(([k]) => !regex.test(k))),\n  ];\n};\n\n/**\n * Update the value in a list field.\n * @param {object} args Arguments.\n * @param {InternalLocaleCode} args.locale Target locale.\n * @param {DraftValueStoreKey} [args.valueStoreKey] Key to store the values in {@link EntryDraft}.\n * @param {FieldKeyPath} args.keyPath Dot-notated field name.\n * @param {(arg: { valueList: any[], expanderStateList: boolean[] }) => void } args.manipulate A\n * function to manipulate the list, which takes one object argument containing the value list, file\n * list and view state list. The typical usage is `list.splice()`.\n */\nexport const updateListField = ({\n  locale,\n  valueStoreKey = 'currentValues',\n  keyPath,\n  manipulate,\n}) => {\n  const draft = /** @type {EntryDraft} */ (get(entryDraft));\n  const { collection, collectionFile } = draft;\n  const { defaultLocale } = (collectionFile ?? collection)._i18n;\n  const [valueList, valueListRemainder] = getItemList(draft[valueStoreKey][locale], keyPath);\n\n  const [expanderStateList, expanderStateListRemainder] =\n    // Manipulation should only happen once with the default locale\n    locale === defaultLocale ? getItemList(draft.expanderStates._, keyPath) : [[], []];\n\n  manipulate({ valueList, expanderStateList });\n\n  i18nAutoDupEnabled.set(false);\n\n  /** @type {Writable<EntryDraft>} */ (entryDraft).update((_draft) => {\n    updateObject(_draft[valueStoreKey][locale], {\n      ...flatten({ [keyPath]: valueList }),\n      ...valueListRemainder,\n    });\n\n    if (locale === defaultLocale) {\n      updateObject(_draft.expanderStates._, {\n        ...flatten({ [keyPath]: expanderStateList }),\n        ...expanderStateListRemainder,\n      });\n    }\n\n    return _draft;\n  });\n\n  i18nAutoDupEnabled.set(true);\n};\n","import { escapeRegExp } from '@sveltia/utils/string';\nimport { get } from 'svelte/store';\n\nimport { entryDraft } from '$lib/services/contents/draft';\nimport { getField } from '$lib/services/contents/entry/fields';\n\n/**\n * @import {\n * EntryDraft,\n * FlattenedEntryContent,\n * InternalLocaleCode,\n * LocaleContentMap,\n * } from '$lib/types/private';\n * @import { FieldKeyPath, ObjectField, ListField } from '$lib/types/public';\n */\n\n/**\n * Get the initial object/list expander state based on the `collapsed` option. If `collapsed` is set\n * to `auto`, it checks if there are any values in the object. Otherwise, it uses the `collapsed`\n * option directly, which defaults to `false` (expanded).\n * @param {object} args Arguments.\n * @param {string} args.key Key path of the item. For the List widget, it’s a key path of the list\n * item, e.g. `authors.0`. For the Object widget, it’s a key path of the object with the `#` suffix,\n * e.g. `details#`.\n * @param {InternalLocaleCode} args.locale Locale code.\n * @param {boolean | 'auto'} [args.collapsed] The `collapsed` option value.\n * @returns {boolean} Whether th expander should be expanded.\n */\nexport const getInitialExpanderState = ({ key, locale, collapsed = false }) => {\n  const _draft = get(entryDraft);\n  const currentState = _draft?.expanderStates?._[key];\n\n  if (currentState !== undefined) {\n    return currentState;\n  }\n\n  if (collapsed === 'auto') {\n    const valueMap = _draft?.currentValues?.[locale] ?? {};\n    // Regular expression to match any non-nested subfields, with the `#` key suffix removed\n    const regex = new RegExp(`^${escapeRegExp(key.replace(/#$/, ''))}\\\\.[^\\\\.]+$`);\n\n    return !Object.entries(valueMap).some(([keyPath, value]) => regex.test(keyPath) && !!value);\n  }\n\n  return !collapsed;\n};\n\n/**\n * Sync the field object/list expander states between locales.\n * @param {Record<FieldKeyPath, boolean>} stateMap Map of key path and state.\n */\nexport const syncExpanderStates = (stateMap) => {\n  entryDraft.update((_draft) => {\n    if (_draft) {\n      Object.entries(stateMap).forEach(([keyPath, expanded]) => {\n        if (_draft.expanderStates._[keyPath] !== expanded) {\n          _draft.expanderStates._[keyPath] = expanded;\n        }\n      });\n    }\n\n    return _draft;\n  });\n};\n\n/**\n * Get a list of keys for the expander states, given the key path. The returned keys could include\n * nested lists and objects.\n * @param {object} args Partial arguments for {@link getField}.\n * @param {string} args.collectionName Collection name.\n * @param {string} [args.fileName] Collection file name. File/singleton collection only.\n * @param {FlattenedEntryContent} args.valueMap Object holding current entry values.\n * @param {FieldKeyPath} args.keyPath Key path, e.g. `testimonials.0.authors.2.foo`.\n * @param {boolean} [args.isIndexFile] Whether the corresponding entry is the collection’s special\n * index file used specifically in Hugo.\n * @returns {string[]} Keys, e.g. `['testimonials', 'testimonials.0', 'testimonials.0.authors',\n * 'testimonials.0.authors.2', 'testimonials.0.authors.2.foo']`.\n */\nexport const getExpanderKeys = ({\n  collectionName,\n  fileName,\n  valueMap,\n  keyPath,\n  isIndexFile = false,\n}) => {\n  const keys = new Set();\n  const getFieldArgs = { collectionName, fileName, valueMap, isIndexFile };\n\n  keyPath.split('.').forEach((_keyPart, index, arr) => {\n    const _keyPath = arr.slice(0, index + 1).join('.');\n    const config = getField({ ...getFieldArgs, keyPath: _keyPath });\n    const endingWithNumber = /\\.\\d+$/.test(_keyPath);\n\n    if (config?.widget === 'object') {\n      if (endingWithNumber) {\n        keys.add(_keyPath);\n      }\n\n      keys.add(`${_keyPath}#`);\n    } else if (config?.widget === 'list') {\n      keys.add(endingWithNumber ? _keyPath : `${_keyPath}#`);\n    } else if (index > 0) {\n      const parentKeyPath = arr.slice(0, index).join('.');\n      const parentConfig = getField({ ...getFieldArgs, keyPath: parentKeyPath });\n\n      if (parentConfig?.widget === 'object' && /** @type {ObjectField} */ (parentConfig).fields) {\n        keys.add(`${parentKeyPath}.${parentConfig.name}#`);\n      }\n\n      if (parentConfig?.widget === 'list' && /** @type {ListField} */ (parentConfig).field) {\n        keys.add(_keyPath);\n      }\n    }\n  });\n\n  return [...keys];\n};\n\n/**\n * Expand any invalid fields, including the parent list/object(s).\n * @param {object} args Partial arguments for {@link getField}.\n * @param {string} args.collectionName Collection name.\n * @param {string} [args.fileName] Collection file name. File/singleton collection only.\n * @param {LocaleContentMap} args.currentValues Field values.\n */\nexport const expandInvalidFields = ({ collectionName, fileName, currentValues }) => {\n  const { validities, isIndexFile } = /** @type {EntryDraft} */ (get(entryDraft));\n  /** @type {Record<FieldKeyPath, boolean>} */\n  const stateMap = {};\n\n  Object.entries(validities ?? {}).forEach(([locale, validityMap]) => {\n    Object.entries(validityMap).forEach(([keyPath, { valid }]) => {\n      if (!valid) {\n        getExpanderKeys({\n          collectionName,\n          fileName,\n          valueMap: currentValues[locale],\n          keyPath,\n          isIndexFile,\n        }).forEach((key) => {\n          stateMap[key] = true;\n        });\n      }\n    });\n  });\n\n  syncExpanderStates(stateMap);\n};\n","import { isObject } from '@sveltia/utils/object';\nimport { get } from 'svelte/store';\n\nimport { siteConfig } from '$lib/services/config';\nimport { isSingletonCollection } from '$lib/services/contents/collection';\n\n/**\n * @import {\n * I18nFileStructureMap,\n * InternalI18nOptions,\n * InternalSiteConfig,\n * } from '$lib/types/private';\n * @import { Collection, CollectionFile, I18nFileStructure, I18nOptions } from '$lib/types/public';\n */\n\n/**\n * I18n structure types.\n * @type {Record<string, I18nFileStructure>}\n */\nconst I18N_STRUCTURES = {\n  SINGLE_FILE: 'single_file',\n  MULTIPLE_FILES: 'multiple_files',\n  MULTIPLE_FOLDERS: 'multiple_folders',\n  MULTIPLE_FOLDERS_I18N_ROOT: 'multiple_folders_i18n_root',\n};\n\n/**\n * Default locale identifier.\n */\nconst DEFAULT_LOCALE_KEY = '_default';\n\n/**\n * Default canonical slug configuration.\n */\nconst DEFAULT_CANONICAL_SLUG = {\n  key: 'translationKey',\n  value: '{{slug}}',\n};\n\n/**\n * The default, normalized i18n configuration with no locales defined.\n * @type {InternalI18nOptions}\n */\nexport const DEFAULT_I18N_CONFIG = {\n  i18nEnabled: false,\n  saveAllLocales: true,\n  allLocales: [DEFAULT_LOCALE_KEY],\n  initialLocales: [DEFAULT_LOCALE_KEY],\n  defaultLocale: DEFAULT_LOCALE_KEY,\n  structure: I18N_STRUCTURES.SINGLE_FILE,\n  structureMap: {\n    i18nSingleFile: false,\n    i18nMultiFile: false,\n    i18nMultiFolder: false,\n    i18nRootMultiFolder: false,\n  },\n  canonicalSlug: { ...DEFAULT_CANONICAL_SLUG },\n  omitDefaultLocaleFromFileName: false,\n};\n\n/**\n * Merges i18n configuration from site, collection, and file levels.\n * @param {Collection} collection The collection configuration.\n * @param {CollectionFile} [file] The collection file configuration.\n * @returns {I18nOptions | undefined} Merged configuration or undefined if i18n is not enabled.\n */\nconst mergeI18nConfigs = (collection, file) => {\n  const siteConfigValue = /** @type {InternalSiteConfig} */ (get(siteConfig));\n\n  if (!isObject(siteConfigValue.i18n)) {\n    return undefined;\n  }\n\n  const config = /** @type {I18nOptions} */ ({ ...siteConfigValue.i18n });\n  const hasCollectionI18n = collection.i18n || isSingletonCollection(collection);\n\n  // Check if the collection has its own i18n configuration. The singleton collection doesn’t have\n  // its own i18n configuration, so it will inherit the global one if defined.\n  if (hasCollectionI18n) {\n    if (isObject(collection.i18n)) {\n      Object.assign(config, collection.i18n);\n    }\n\n    if (file) {\n      if (file.i18n) {\n        if (isObject(file.i18n)) {\n          Object.assign(config, file.i18n);\n        }\n      } else {\n        return undefined;\n      }\n    }\n  } else {\n    return undefined;\n  }\n\n  return config;\n};\n\n/**\n * Determines the appropriate structure based on file configuration.\n * @param {I18nFileStructure} defaultStructure The default structure from config.\n * @param {CollectionFile} [file] The collection file configuration.\n * @returns {I18nFileStructure} The determined structure.\n */\nconst determineStructure = (defaultStructure, file) => {\n  if (!file) {\n    return defaultStructure;\n  }\n\n  return file.file.includes('{{locale}}')\n    ? I18N_STRUCTURES.MULTIPLE_FILES\n    : I18N_STRUCTURES.SINGLE_FILE;\n};\n\n/**\n * Creates the structure map based on i18n status and structure.\n * @param {boolean} i18nEnabled Whether i18n is enabled.\n * @param {string} structure The current structure.\n * @returns {I18nFileStructureMap} The structure map.\n */\nconst createStructureMap = (i18nEnabled, structure) => ({\n  i18nSingleFile: i18nEnabled && structure === I18N_STRUCTURES.SINGLE_FILE,\n  i18nMultiFile: i18nEnabled && structure === I18N_STRUCTURES.MULTIPLE_FILES,\n  i18nMultiFolder: i18nEnabled && structure === I18N_STRUCTURES.MULTIPLE_FOLDERS,\n  i18nRootMultiFolder: i18nEnabled && structure === I18N_STRUCTURES.MULTIPLE_FOLDERS_I18N_ROOT,\n});\n\n/**\n * Determines the default locale from the available locales.\n * @param {boolean} i18nEnabled Whether i18n is enabled.\n * @param {string[]} allLocales All available locales.\n * @param {string} [specifiedDefault] The specified default locale.\n * @returns {string} The default locale.\n */\nconst determineDefaultLocale = (i18nEnabled, allLocales, specifiedDefault) => {\n  if (!i18nEnabled) {\n    return DEFAULT_LOCALE_KEY;\n  }\n\n  return specifiedDefault && allLocales.includes(specifiedDefault)\n    ? specifiedDefault\n    : allLocales[0];\n};\n\n/**\n * Determines the initial locales based on configuration.\n * @param {string | string[] | undefined} initialLocalesConfig The initial locales configuration.\n * @param {string[]} allLocales All available locales.\n * @param {string} defaultLocale The default locale.\n * @returns {string[]} The initial locales.\n */\nconst determineInitialLocales = (initialLocalesConfig, allLocales, defaultLocale) => {\n  if (initialLocalesConfig === 'all') {\n    return allLocales;\n  }\n\n  if (initialLocalesConfig === 'default') {\n    return [defaultLocale];\n  }\n\n  return allLocales.filter(\n    (locale) =>\n      // Default locale cannot be disabled\n      locale === defaultLocale ||\n      (Array.isArray(initialLocalesConfig) ? initialLocalesConfig.includes(locale) : true),\n  );\n};\n\n/**\n * Get the normalized i18n configuration for the given collection or collection file.\n * @param {Collection} collection Developer-defined collection.\n * @param {CollectionFile} [file] Developer-defined collection file.\n * @returns {InternalI18nOptions} Config.\n * @see https://decapcms.org/docs/i18n/\n */\nexport const normalizeI18nConfig = (collection, file) => {\n  const config = mergeI18nConfigs(collection, file);\n\n  const {\n    structure: defaultStructure = I18N_STRUCTURES.SINGLE_FILE,\n    locales = [],\n    default_locale: specifiedDefaultLocale,\n    initial_locales: initialLocalesConfig,\n    save_all_locales: saveAllLocalesConfig = true,\n    canonical_slug: canonicalSlugConfig = { key: undefined, value: undefined },\n    omit_default_locale_from_filename: omitDefaultConfig = false,\n  } = config ?? {};\n\n  const {\n    key: canonicalSlugKey = DEFAULT_CANONICAL_SLUG.key,\n    value: canonicalSlugTemplate = DEFAULT_CANONICAL_SLUG.value,\n  } = canonicalSlugConfig;\n\n  const i18nEnabled = locales.length > 0;\n  const allLocales = i18nEnabled ? locales : [DEFAULT_LOCALE_KEY];\n  const defaultLocale = determineDefaultLocale(i18nEnabled, allLocales, specifiedDefaultLocale);\n  const structure = determineStructure(defaultStructure, file);\n  const structureMap = createStructureMap(i18nEnabled, structure);\n\n  const saveAllLocales = i18nEnabled\n    ? saveAllLocalesConfig === true && initialLocalesConfig === undefined\n    : true;\n\n  const initialLocales = determineInitialLocales(initialLocalesConfig, allLocales, defaultLocale);\n\n  const omitDefaultLocaleFromFileName =\n    omitDefaultConfig &&\n    (file ? /\\.{{locale}}\\.[a-zA-Z0-9]+$/.test(file.file) : structureMap.i18nMultiFile);\n\n  return {\n    i18nEnabled,\n    saveAllLocales,\n    allLocales,\n    defaultLocale,\n    initialLocales,\n    structure,\n    structureMap,\n    canonicalSlug: {\n      key: canonicalSlugKey,\n      value: canonicalSlugTemplate,\n    },\n    omitDefaultLocaleFromFileName,\n  };\n};\n","import { escapeRegExp } from '@sveltia/utils/string';\n\nimport {\n  getField,\n  getFieldDisplayValue,\n  getVisibleFieldDisplayValue,\n} from '$lib/services/contents/entry/fields';\n\n/**\n * @import { FlattenedEntryContent, GetFieldArgs, InternalLocaleCode } from '$lib/types/private';\n * @import { Field, FieldKeyPath, ListField } from '$lib/types/public';\n */\n\n/**\n * @typedef {object} ListFieldInfo\n * @property {boolean} hasSingleSubField Whether the List field has the `field` (singular) option.\n * @property {boolean} hasMultiSubFields Whether the List field has the `fields` (plural) option.\n * @property {boolean} hasVariableTypes Whether the List field has the variable `types` option.\n * @property {boolean} hasSubFields Whether the List field has sub-fields.\n */\n\n/**\n * Get information about the List field type.\n * @param {ListField} field Field.\n * @returns {ListFieldInfo} Field type information.\n */\nexport const getListFieldInfo = ({ field, fields, types }) => {\n  const hasSingleSubField = !!field;\n  const hasMultiSubFields = !!fields;\n  const hasVariableTypes = !!types;\n\n  return {\n    hasSingleSubField,\n    hasMultiSubFields,\n    hasVariableTypes,\n    hasSubFields: hasSingleSubField || hasMultiSubFields || hasVariableTypes,\n  };\n};\n\n/**\n * Check if the given fields contain a single List widget with the `root` option enabled.\n * @param {Field[]} fields Field list.\n * @returns {boolean} Result.\n */\nexport const hasRootListField = (fields) =>\n  fields.length === 1 &&\n  fields[0].widget === 'list' &&\n  /** @type {ListField} */ (fields[0]).root === true;\n\n/**\n * Format the summary template of a List field.\n * @param {object} args Arguments.\n * @param {string} args.collectionName Collection name.\n * @param {string} [args.fileName] Collection file name. File/singleton collection only.\n * @param {FieldKeyPath} args.keyPath Field key path.\n * @param {FlattenedEntryContent} args.valueMap Entry content.\n * @param {boolean} [args.isIndexFile] Whether the corresponding entry is the collection’s special\n * index file used specifically in Hugo.\n * @param {InternalLocaleCode} args.locale Locale code.\n * @param {string} [args.summaryTemplate] Summary template, e.g. `{{fields.slug}}`.\n * @param {boolean} args.hasSingleSubField Whether the field has a single `field` instead of\n * multiple `fields`.\n * @param {number} args.index List index.\n * @returns {string} Formatted summary.\n */\nexport const formatSummary = ({\n  collectionName,\n  fileName,\n  keyPath,\n  valueMap,\n  isIndexFile = false,\n  locale,\n  summaryTemplate,\n  hasSingleSubField,\n  index,\n}) => {\n  /** @type {GetFieldArgs} */\n  const getFieldArgs = { collectionName, fileName, keyPath: '', valueMap, isIndexFile };\n  const keyPathWithIndex = `${keyPath}.${index}`;\n\n  if (!summaryTemplate) {\n    if (hasSingleSubField) {\n      return valueMap[keyPathWithIndex];\n    }\n\n    return getVisibleFieldDisplayValue({\n      valueMap,\n      locale,\n      keyPath: keyPathWithIndex,\n      keyPathRegex: new RegExp(`^${escapeRegExp(keyPath)}\\\\.${index}[\\\\b\\\\.]`),\n      getFieldArgs,\n    });\n  }\n\n  return summaryTemplate.replaceAll(/{{(.+?)}}/g, (_match, /** @type {string} */ placeholder) => {\n    const [tag, ...transformations] = placeholder.split(/\\s*\\|\\s*/);\n    const fieldName = tag.replace(/^fields\\./, '');\n    const _keyPath = `${keyPathWithIndex}.${fieldName}`;\n\n    if (hasSingleSubField) {\n      // For single-field lists, check if the requested field name matches the actual field name\n      const listFieldConfig = /** @type {ListField} */ (getField({ ...getFieldArgs, keyPath }));\n      const singleFieldConfig = listFieldConfig?.field;\n\n      if (!singleFieldConfig || singleFieldConfig.name !== fieldName) {\n        return '';\n      }\n    }\n\n    return getFieldDisplayValue({\n      ...getFieldArgs,\n      keyPath: hasSingleSubField ? keyPathWithIndex : _keyPath,\n      locale,\n      transformations,\n    });\n  });\n};\n","<!--\n  @component\n  Implement the editor for the List widget with subfield(s).\n  @see https://decapcms.org/docs/widgets/#list\n-->\n<script>\n  import { Button, Icon, Menu, MenuButton, MenuItem, Spacer, TruncatedText } from '@sveltia/ui';\n  import { escapeRegExp } from '@sveltia/utils/string';\n  import { unflatten } from 'flat';\n  import { getContext, onMount } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import VisibilityObserver from '$lib/components/common/visibility-observer.svelte';\n  import FieldEditor from '$lib/components/contents/details/editor/field-editor.svelte';\n  import AddItemButton from '$lib/components/contents/details/widgets/object/add-item-button.svelte';\n  import ObjectHeader from '$lib/components/contents/details/widgets/object/object-header.svelte';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { getDefaultValues } from '$lib/services/contents/draft/defaults';\n  import { updateListField } from '$lib/services/contents/draft/update/list';\n  import {\n    getInitialExpanderState,\n    syncExpanderStates,\n  } from '$lib/services/contents/editor/expanders';\n  import { DEFAULT_I18N_CONFIG } from '$lib/services/contents/i18n/config';\n  import { formatSummary, getListFieldInfo } from '$lib/services/contents/widgets/list/helper';\n  import { isSmallScreen } from '$lib/services/user/env';\n\n  /**\n   * @import { FieldEditorContext, WidgetEditorProps } from '$lib/types/private';\n   * @import { ListField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {ListField} fieldConfig Field configuration.\n   * @property {string[]} currentValue Field value.\n   */\n\n  /** @type {FieldEditorContext} */\n  const { valueStoreKey = 'currentValues' } = getContext('field-editor') ?? {};\n\n  /** @type {WidgetEditorProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    keyPath,\n    fieldConfig,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const widgetId = $props.id();\n\n  const {\n    name: fieldName,\n    label,\n    i18n,\n    // Widget-specific options\n    allow_add: allowAdd = true,\n    allow_remove: allowRemove = true,\n    allow_reorder: allowReorder = true,\n    collapsed,\n    summary,\n    minimize_collapsed: minimizeCollapsed = false,\n    label_singular: labelSingular,\n    field,\n    fields,\n    max = Infinity,\n    add_to_top: addToTop = false,\n    types,\n    typeKey = 'type',\n  } = $derived(fieldConfig);\n  const { hasSingleSubField, hasVariableTypes } = $derived(getListFieldInfo(fieldConfig));\n  const keyPathRegex = $derived(new RegExp(`^${escapeRegExp(keyPath)}\\\\.(\\\\d+)(.*)?`));\n  const isIndexFile = $derived($entryDraft?.isIndexFile ?? false);\n  const collection = $derived($entryDraft?.collection);\n  const collectionName = $derived($entryDraft?.collectionName ?? '');\n  const collectionFile = $derived($entryDraft?.collectionFile);\n  const fileName = $derived($entryDraft?.fileName);\n  const { defaultLocale } = $derived((collectionFile ?? collection)?._i18n ?? DEFAULT_I18N_CONFIG);\n  const isDuplicateField = $derived(locale !== defaultLocale && i18n === 'duplicate');\n  const valueMap = $derived($state.snapshot($entryDraft?.[valueStoreKey][locale]) ?? {});\n  const parentExpandedKeyPath = $derived(`${keyPath}#`);\n  const parentExpanded = $derived($entryDraft?.expanderStates?._[parentExpandedKeyPath] ?? true);\n  /** @type {Record<string, any>[]} */\n  const items = $derived(\n    unflatten(\n      Object.fromEntries(\n        Object.entries(valueMap)\n          .filter(([_keyPath]) => keyPathRegex.test(_keyPath))\n          .map(([_keyPath, value]) => [\n            _keyPath.replace(new RegExp(`^${escapeRegExp(keyPath)}`), fieldName),\n            value,\n          ]),\n      ),\n    )[fieldName] ?? [],\n  );\n  const itemExpanderStates = $derived(\n    items.map((_item, index) => {\n      const key = `${keyPath}.${index}`;\n\n      return [key, $entryDraft?.expanderStates?._[key] ?? true];\n    }),\n  );\n  const hasMaxItems = $derived(items.length >= max);\n\n  /**\n   * Initialize the expander state.\n   */\n  const initializeExpanderState = () => {\n    syncExpanderStates({\n      [parentExpandedKeyPath]: minimizeCollapsed === 'auto' ? !items.length : !minimizeCollapsed,\n      ...Object.fromEntries(\n        items.map((__, index) => {\n          const key = `${keyPath}.${index}`;\n\n          return [key, getInitialExpanderState({ key, locale, collapsed })];\n        }),\n      ),\n    });\n  };\n\n  /**\n   * Update the value for the List widget with subfield(s).\n   * @param {(arg: { valueList: any[], expanderStateList: boolean[] }) => void} manipulate\n   * See {@link updateListField}.\n   */\n  const updateComplexList = (manipulate) => {\n    Object.keys($entryDraft?.[valueStoreKey] ?? {}).forEach((_locale) => {\n      if (!(i18n !== 'duplicate' && _locale !== locale)) {\n        updateListField({ locale: _locale, valueStoreKey, keyPath, manipulate });\n      }\n    });\n  };\n\n  /**\n   * Add a new subfield to the list.\n   * @param {object} [args] Arguments.\n   * @param {number} [args.index] List index where a new item will be inserted.\n   * @param {number} [args.dupIndex] List index of an item to be duplicated.\n   * @param {string} [args.type] Variable type name. If the field doesn’t have variable types, it\n   * will be `undefined`.\n   * @see https://decapcms.org/docs/variable-type-widgets/\n   */\n  const addItem = ({ index = addToTop ? 0 : items.length, dupIndex, type } = {}) => {\n    updateComplexList(({ valueList, expanderStateList }) => {\n      const subFields = type\n        ? (types?.find(({ name }) => name === type)?.fields ?? [])\n        : (fields ?? (field ? [field] : []));\n\n      const newItem = (() => {\n        if (typeof dupIndex === 'number') {\n          return structuredClone(valueList[dupIndex]);\n        }\n\n        const item = unflatten(getDefaultValues(subFields, locale));\n\n        return hasSingleSubField && field ? item[field.name] : item;\n      })();\n\n      if (type) {\n        newItem[typeKey] = type;\n      }\n\n      if (!hasSingleSubField) {\n        // Add a random ID to the new item to ensure it is unique. This is necessary for the `key`\n        // attribute in the `each` block.\n        newItem.__sc_item_id = crypto.randomUUID();\n      }\n\n      valueList.splice(index, 0, newItem);\n      expanderStateList.splice(index, 0, true);\n    });\n\n    // Expand the parent if it is collapsed to show the newly added item\n    syncExpanderStates({ [parentExpandedKeyPath]: true });\n  };\n\n  /**\n   * Remove a subfield.\n   * @param {number} index Target index.\n   */\n  const removeItem = (index) => {\n    updateComplexList(({ valueList, expanderStateList }) => {\n      valueList.splice(index, 1);\n      expanderStateList.splice(index, 1);\n    });\n  };\n\n  /**\n   * Swap a subfield with the next one.\n   * @param {number} index Target index.\n   */\n  const moveDownItem = (index) => {\n    updateComplexList(({ valueList, expanderStateList }) => {\n      if (!hasSingleSubField) {\n        // Ensure the IDs are unique before swapping\n        valueList[index].__sc_item_id ??= crypto.randomUUID();\n        valueList[index + 1].__sc_item_id ??= crypto.randomUUID();\n      }\n\n      [valueList[index], valueList[index + 1]] = [valueList[index + 1], valueList[index]];\n      [expanderStateList[index], expanderStateList[index + 1]] = [\n        expanderStateList[index + 1],\n        expanderStateList[index],\n      ];\n    });\n  };\n\n  /**\n   * Format the summary template.\n   * @param {number} index List index.\n   * @param {string} [summaryTemplate] Summary template, e.g. `{{fields.slug}}`.\n   * @returns {string} Formatted summary.\n   */\n  const _formatSummary = (index, summaryTemplate) =>\n    formatSummary({\n      collectionName,\n      fileName,\n      keyPath,\n      valueMap,\n      locale,\n      summaryTemplate,\n      hasSingleSubField,\n      index,\n      isIndexFile,\n    });\n\n  onMount(() => {\n    initializeExpanderState();\n  });\n</script>\n\n<div role=\"none\" class=\"toolbar top\">\n  <Button\n    iconic\n    disabled={!items.length}\n    aria-label={parentExpanded ? $_('collapse') : $_('expand')}\n    aria-expanded={parentExpanded}\n    aria-controls=\"list-{widgetId}-item-list\"\n    onclick={() => {\n      syncExpanderStates({ [parentExpandedKeyPath]: !parentExpanded });\n    }}\n  >\n    {#snippet startIcon()}\n      <Icon name={parentExpanded ? 'expand_more' : 'chevron_right'} />\n    {/snippet}\n  </Button>\n  <div role=\"none\" class=\"summary\" id=\"object-{widgetId}-summary\">\n    {items.length}\n    {(items.length === 1 ? labelSingular : undefined) || label || fieldName}\n  </div>\n  <Spacer flex />\n  {#if parentExpanded && items.length > 1}\n    <Button\n      variant=\"tertiary\"\n      size=\"small\"\n      label={$_('expand_all')}\n      disabled={itemExpanderStates.every(([, value]) => value)}\n      onclick={() => {\n        syncExpanderStates(Object.fromEntries(itemExpanderStates.map(([key]) => [key, true])));\n      }}\n    />\n    <Button\n      variant=\"tertiary\"\n      size=\"small\"\n      label={$_('collapse_all')}\n      disabled={itemExpanderStates.every(([, value]) => !value)}\n      onclick={() => {\n        syncExpanderStates(Object.fromEntries(itemExpanderStates.map(([key]) => [key, false])));\n      }}\n    />\n  {/if}\n</div>\n{#if allowAdd && (addToTop || !items.length)}\n  <div role=\"none\" class=\"toolbar top\">\n    <AddItemButton disabled={isDuplicateField} {fieldConfig} {items} {addItem} />\n  </div>\n{/if}\n<div role=\"none\" id=\"list-{widgetId}-item-list\" class=\"item-list\" class:collapsed={!parentExpanded}>\n  {#each items as item, index (item.__sc_item_id ?? index)}\n    <VisibilityObserver>\n      {@const expandedKeyPath = `${keyPath}.${index}`}\n      {@const expanded = $entryDraft?.expanderStates?._[expandedKeyPath] ?? true}\n      {@const typeConfig = hasVariableTypes\n        ? types?.find(({ name }) => name === item[typeKey])\n        : undefined}\n      {@const subFields = hasVariableTypes\n        ? (typeConfig?.fields ?? [])\n        : (fields ?? (field ? [field] : []))}\n      {@const summaryTemplate = hasVariableTypes ? typeConfig?.summary || summary : summary}\n      <!-- @todo Support drag sorting. -->\n      <div role=\"none\" class=\"item\">\n        <ObjectHeader\n          label={hasVariableTypes ? typeConfig?.label || typeConfig?.name : ''}\n          controlId=\"list-{widgetId}-item-{index}-body\"\n          {expanded}\n          toggleExpanded={subFields.length\n            ? () => syncExpanderStates({ [expandedKeyPath]: !expanded })\n            : undefined}\n        >\n          {#snippet centerContent()}\n            {#if allowReorder}\n              <Button\n                size=\"small\"\n                iconic\n                disabled={isDuplicateField || index === 0}\n                aria-label={$_('move_up')}\n                onclick={() => moveDownItem(index - 1)}\n              >\n                {#snippet startIcon()}\n                  <Icon name=\"arrow_upward\" />\n                {/snippet}\n              </Button>\n              <Spacer />\n              <Button\n                iconic\n                size=\"small\"\n                disabled={isDuplicateField || index === items.length - 1}\n                aria-label={$_('move_down')}\n                onclick={() => moveDownItem(index)}\n              >\n                {#snippet startIcon()}\n                  <Icon name=\"arrow_downward\" />\n                {/snippet}\n              </Button>\n            {/if}\n          {/snippet}\n          {#snippet endContent()}\n            {#if allowAdd}\n              <MenuButton\n                variant=\"ghost\"\n                size=\"small\"\n                iconic\n                popupPosition=\"bottom-right\"\n                aria-label={$_('list_item_options')}\n                disabled={isDuplicateField}\n              >\n                {#snippet popup()}\n                  <Menu aria-label={$_('translation_options')}>\n                    <MenuItem\n                      label={$_('duplicate')}\n                      disabled={hasMaxItems}\n                      onclick={() => addItem({ index: index + 1, dupIndex: index })}\n                    />\n                    {#if hasVariableTypes}\n                      <MenuItem label={$_('add_item_above')} disabled={hasMaxItems}>\n                        <!-- eslint-disable-next-line no-shadow -->\n                        {#snippet items()}\n                          {#each types ?? [] as { name, label: itemLabel } (name)}\n                            <MenuItem\n                              label={itemLabel || name}\n                              onclick={() => addItem({ index, type: name })}\n                            />\n                          {/each}\n                        {/snippet}\n                      </MenuItem>\n                      <MenuItem label={$_('add_item_below')} disabled={hasMaxItems}>\n                        <!-- eslint-disable-next-line no-shadow -->\n                        {#snippet items()}\n                          {#each types ?? [] as { name, label: itemLabel } (name)}\n                            <MenuItem\n                              label={itemLabel || name}\n                              onclick={() => addItem({ index: index + 1, type: name })}\n                            />\n                          {/each}\n                        {/snippet}\n                      </MenuItem>\n                    {:else}\n                      <MenuItem\n                        label={$_('add_item_above')}\n                        disabled={hasMaxItems}\n                        onclick={() => addItem({ index })}\n                      />\n                      <MenuItem\n                        label={$_('add_item_below')}\n                        disabled={hasMaxItems}\n                        onclick={() => addItem({ index: index + 1 })}\n                      />\n                    {/if}\n                  </Menu>\n                {/snippet}\n              </MenuButton>\n            {/if}\n            {#if allowRemove}\n              <Button\n                variant=\"ghost\"\n                size=\"small\"\n                iconic\n                aria-label={$_('remove')}\n                onclick={() => removeItem(index)}\n              >\n                {#snippet startIcon()}\n                  <Icon name=\"close\" />\n                {/snippet}\n              </Button>\n            {/if}\n          {/snippet}\n        </ObjectHeader>\n        <div role=\"none\" class=\"item-body\" id=\"list-{widgetId}-item-{index}-body\">\n          {#if expanded}\n            {#each subFields as subField (subField.name)}\n              <VisibilityObserver>\n                <FieldEditor\n                  keyPath={hasSingleSubField\n                    ? `${keyPath}.${index}`\n                    : `${keyPath}.${index}.${subField.name}`}\n                  {locale}\n                  fieldConfig={subField}\n                  context={hasSingleSubField ? 'single-field-list-widget' : undefined}\n                />\n              </VisibilityObserver>\n            {/each}\n          {:else}\n            <div role=\"none\" class=\"summary\">\n              <TruncatedText lines={$isSmallScreen ? 2 : 1}>\n                {_formatSummary(index, summaryTemplate)}\n              </TruncatedText>\n            </div>\n          {/if}\n        </div>\n      </div>\n    </VisibilityObserver>\n  {/each}\n</div>\n{#if allowAdd && !addToTop && items.length}\n  <div role=\"none\" class=\"toolbar bottom\">\n    <AddItemButton disabled={isDuplicateField} {fieldConfig} {items} {addItem} />\n    <Spacer flex />\n  </div>\n{/if}\n\n<style lang=\"scss\">\n  .toolbar {\n    display: flex;\n    align-items: center;\n  }\n\n  .item-list {\n    &.collapsed {\n      display: none;\n    }\n  }\n\n  .item {\n    margin: 16px 0;\n    border-width: 2px;\n    border-color: var(--sui-secondary-border-color);\n    border-radius: var(--sui-control-medium-border-radius);\n\n    .summary {\n      padding: 8px;\n\n      &:empty {\n        display: none;\n      }\n    }\n  }\n</style>\n","<!--\n  @component\n  Implement the editor for the List widget without subfield(s).\n  @see https://decapcms.org/docs/widgets/#list\n-->\n<script>\n  import { TextArea } from '@sveltia/ui';\n  import { escapeRegExp } from '@sveltia/utils/string';\n  import { getContext, onMount, untrack } from 'svelte';\n\n  import { entryDraft } from '$lib/services/contents/draft';\n\n  /**\n   * @import { EntryDraft, FieldEditorContext, WidgetEditorProps } from '$lib/types/private';\n   * @import { ListField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {ListField} fieldConfig Field configuration.\n   * @property {string[]} currentValue Field value.\n   */\n\n  /** @type {FieldEditorContext} */\n  const { valueStoreKey = 'currentValues' } = getContext('field-editor') ?? {};\n\n  /** @type {WidgetEditorProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    keyPath,\n    fieldId,\n    fieldConfig,\n    currentValue,\n    required = true,\n    readonly = false,\n    invalid = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  let mounted = $state(false);\n  let inputValue = $state('');\n\n  const { i18n } = $derived(fieldConfig);\n\n  /**\n   * Update {@link inputValue} when {@link currentValue} is updated.\n   */\n  const setInputValue = () => {\n    inputValue = currentValue?.join('\\n') ?? '';\n  };\n\n  /**\n   * Update the value for the List widget w/o subfield(s). This has to be called from the `input`\n   * event handler on `<TextArea>`, not a `inputValue` reaction, because it causes an infinite loop\n   * due to {@link setInputValue}.\n   */\n  const updateSimpleList = () => {\n    const normalizedValue = inputValue.split(/\\n/g);\n\n    Object.keys($entryDraft?.[valueStoreKey] ?? {}).forEach((_locale) => {\n      if (i18n !== 'duplicate' && _locale !== locale) {\n        return;\n      }\n\n      Object.keys($entryDraft?.[valueStoreKey][_locale] ?? {}).forEach((_keyPath) => {\n        if (_keyPath.match(`^${escapeRegExp(keyPath)}\\\\.\\\\d+$`)) {\n          delete $entryDraft?.[valueStoreKey][_locale][_keyPath];\n        }\n      });\n\n      normalizedValue.forEach((val, index) => {\n        /** @type {EntryDraft} */ ($entryDraft)[valueStoreKey][_locale][`${keyPath}.${index}`] =\n          val;\n      });\n    });\n  };\n\n  onMount(() => {\n    mounted = true;\n  });\n\n  $effect(() => {\n    if (mounted) {\n      void [currentValue];\n\n      untrack(() => {\n        setInputValue();\n      });\n    }\n  });\n</script>\n\n<TextArea\n  bind:value={inputValue}\n  autoResize={true}\n  flex\n  {readonly}\n  {required}\n  {invalid}\n  aria-errormessage=\"{fieldId}-error\"\n  oninput={() => {\n    updateSimpleList();\n  }}\n/>\n","<!--\n  @component\n  Implement the editor for the List widget.\n  @see https://decapcms.org/docs/widgets/#list\n-->\n<script>\n  import { Group } from '@sveltia/ui';\n\n  import ListEditorComplex from '$lib/components/contents/details/widgets/list/list-editor-complex.svelte';\n  import ListEditorSimple from '$lib/components/contents/details/widgets/list/list-editor-simple.svelte';\n  import { getListFieldInfo } from '$lib/services/contents/widgets/list/helper';\n\n  /**\n   * @import { WidgetEditorProps } from '$lib/types/private';\n   * @import { ListField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {ListField} fieldConfig Field configuration.\n   * @property {string[]} currentValue Field value.\n   */\n\n  /** @type {WidgetEditorProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    ...allProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const widgetId = $props.id();\n\n  const { hasSubFields } = $derived(getListFieldInfo(allProps.fieldConfig));\n  const Component = $derived(hasSubFields ? ListEditorComplex : ListEditorSimple);\n</script>\n\n<Group aria-labelledby=\"list-{widgetId}-summary\">\n  <Component {...allProps} />\n</Group>\n","<script>\n  import { escapeRegExp } from '@sveltia/utils/string';\n\n  import { previews } from '$lib/components/contents/details/widgets';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { getExpanderKeys, syncExpanderStates } from '$lib/services/contents/editor/expanders';\n  import { DEFAULT_I18N_CONFIG } from '$lib/services/contents/i18n/config';\n  import { MULTI_VALUE_WIDGETS } from '$lib/services/contents/widgets';\n\n  /**\n   * @import { InternalLocaleCode } from '$lib/types/private';\n   * @import { Field, FieldKeyPath, MultiValueField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {InternalLocaleCode} locale Current pane’s locale.\n   * @property {FieldKeyPath} keyPath Field key path.\n   * @property {Field} fieldConfig Field configuration.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    keyPath,\n    fieldConfig,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const {\n    name: fieldName,\n    label = '',\n    widget: widgetName = 'string',\n    preview = true,\n    i18n = false,\n  } = $derived(fieldConfig);\n  const { multiple = false } = $derived(\n    /** @type {MultiValueField} */ (MULTI_VALUE_WIDGETS.includes(widgetName) ? fieldConfig : {}),\n  );\n  const isList = $derived(widgetName === 'list' || multiple);\n  const isIndexFile = $derived($entryDraft?.isIndexFile ?? false);\n  const collection = $derived($entryDraft?.collection);\n  const collectionName = $derived($entryDraft?.collectionName ?? '');\n  const collectionFile = $derived($entryDraft?.collectionFile);\n  const fileName = $derived($entryDraft?.fileName);\n  const valueMap = $derived($state.snapshot($entryDraft?.currentValues[locale] ?? {}));\n  const expanderKeys = $derived(\n    getExpanderKeys({ collectionName, fileName, valueMap, keyPath, isIndexFile }),\n  );\n  const { i18nEnabled, defaultLocale } = $derived(\n    (collectionFile ?? collection)?._i18n ?? DEFAULT_I18N_CONFIG,\n  );\n  const canTranslate = $derived(i18nEnabled && (i18n === true || i18n === 'translate'));\n  const canDuplicate = $derived(i18nEnabled && i18n === 'duplicate');\n  const keyPathRegex = $derived(new RegExp(`^${escapeRegExp(keyPath)}\\\\.\\\\d+$`));\n  // Multiple values are flattened in the value map object\n  const currentValue = $derived(\n    isList\n      ? Object.entries(valueMap)\n          .filter(([_keyPath]) => keyPathRegex.test(_keyPath))\n          .map(([, val]) => val)\n          .filter((val) => val !== undefined)\n      : valueMap[keyPath],\n  );\n\n  /**\n   * Called whenever the preview field is clicked. Highlight the corresponding editor field by\n   * expanding the parent list/object(s), moving the element into the viewport, and focus any\n   * control within the field, such as a text input or button.\n   */\n  const highlightEditorField = () => {\n    syncExpanderStates(Object.fromEntries(expanderKeys.map((key) => [key, true])));\n\n    window.requestAnimationFrame(() => {\n      const targetField = document.querySelector(\n        `.content-editor .pane[data-mode=\"edit\"] .field[data-key-path=\"${CSS.escape(keyPath)}\"]`,\n      );\n\n      if (targetField) {\n        if (typeof targetField.scrollIntoViewIfNeeded === 'function') {\n          targetField.scrollIntoViewIfNeeded();\n        } else {\n          targetField.scrollIntoView();\n        }\n\n        const widgetWrapper = targetField.querySelector('.widget-wrapper');\n\n        /** @type {HTMLElement | null} */ (\n          widgetWrapper?.querySelector('[contenteditable=\"true\"], [tabindex=\"0\"]') ??\n            widgetWrapper?.querySelector('input, textarea, button')\n        )?.focus();\n      }\n    });\n  };\n</script>\n\n{#if widgetName !== 'hidden' && preview && (locale === defaultLocale || canTranslate || canDuplicate)}\n  <!-- svelte-ignore a11y_no_noninteractive_tabindex -->\n  <!-- svelte-ignore a11y_no_noninteractive_element_interactions -->\n  <section\n    role=\"group\"\n    data-widget={widgetName}\n    data-key-path={keyPath}\n    tabindex=\"0\"\n    onkeydown={(event) => {\n      if (event.key === 'Enter') {\n        event.stopPropagation();\n        highlightEditorField();\n      }\n    }}\n    onclick={(event) => {\n      event.stopPropagation();\n      highlightEditorField();\n    }}\n  >\n    <h4>{label || fieldName}</h4>\n    {#if widgetName in previews}\n      {@const Preview = previews[widgetName]}\n      <Preview {keyPath} {locale} {fieldConfig} {currentValue} />\n    {/if}\n  </section>\n{/if}\n\n<style lang=\"scss\">\n  :global([role='document']) section {\n    overflow: hidden;\n    margin: 8px 0;\n    padding: 8px 0;\n\n    h4 {\n      color: var(--sui-secondary-foreground-color);\n      font-size: var(--sui-font-size-small);\n\n      &:not(:last-child) {\n        margin-bottom: 8px;\n      }\n    }\n\n    :global {\n      & > * {\n        margin-inline: auto;\n        max-width: 768px;\n      }\n\n      p {\n        margin: 8px auto 0;\n        -webkit-user-select: text;\n        user-select: text;\n      }\n\n      img {\n        max-height: 800px !important;\n      }\n    }\n  }\n</style>\n","<script>\n  import { waitForVisibility } from '@sveltia/utils/element';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [label] Subsection label.\n   * @property {Snippet} children Slot content.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    label,\n    children,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const sectionId = $props.id();\n  const headerId = `${sectionId}-header`;\n  /** @type {HTMLElement | undefined} */\n  let wrapper = $state();\n</script>\n\n<div\n  role=\"group\"\n  class=\"subsection\"\n  aria-labelledby={label ? headerId : undefined}\n  bind:this={wrapper}\n>\n  {#if label}\n    <div role=\"none\" id={headerId} class=\"header\">\n      {label}\n    </div>\n  {/if}\n  <div role=\"none\" class=\"items\">\n    {#await waitForVisibility(wrapper) then}\n      {@render children?.()}\n    {/await}\n  </div>\n</div>\n\n<style lang=\"scss\">\n  .subsection {\n    margin: 16px auto;\n    border: 2px solid var(--sui-secondary-border-color);\n    border-radius: var(--sui-control-medium-border-radius);\n\n    :global(.title) {\n      font-size: inherit;\n      font-weight: var(--sui-font-weight-normal);\n    }\n  }\n\n  .header {\n    display: flex;\n    align-items: center;\n    height: 24px;\n    padding-inline: 8px;\n    color: var(--sui-secondary-foreground-color);\n    background-color: var(--sui-secondary-border-color);\n    font-size: var(--sui-font-size-small);\n    font-weight: var(--sui-font-weight-bold);\n  }\n\n  .items {\n    padding: 8px 16px;\n\n    &:empty {\n      display: none;\n    }\n  }\n</style>\n","<!--\n  @component\n  Implement the preview for the List widget with subfield(s).\n  @see https://decapcms.org/docs/widgets/#list\n-->\n<script>\n  import { escapeRegExp } from '@sveltia/utils/string';\n  import { unflatten } from 'flat';\n\n  import VisibilityObserver from '$lib/components/common/visibility-observer.svelte';\n  import FieldPreview from '$lib/components/contents/details/preview/field-preview.svelte';\n  import Subsection from '$lib/components/contents/details/widgets/object/subsection.svelte';\n  import { entryDraft } from '$lib/services/contents/draft';\n\n  /**\n   * @import { WidgetPreviewProps } from '$lib/types/private';\n   * @import { ListField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {ListField} fieldConfig Field configuration.\n   * @property {string[] | undefined} currentValue Field value.\n   */\n\n  /** @type {WidgetPreviewProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    keyPath,\n    fieldConfig,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const {\n    name: fieldName,\n    // Widget-specific options\n    field,\n    fields,\n    types,\n    typeKey = 'type',\n  } = $derived(fieldConfig);\n  const keyPathRegex = $derived(new RegExp(`^${escapeRegExp(keyPath)}\\\\.\\\\d+`));\n  const items = $derived(\n    unflatten(\n      Object.fromEntries(\n        Object.entries($state.snapshot($entryDraft?.currentValues[locale]) ?? {})\n          .filter(([_keyPath]) => keyPathRegex.test(_keyPath))\n          .map(([_keyPath, value]) => [\n            _keyPath.replace(new RegExp(`^${escapeRegExp(keyPath)}`), fieldName),\n            value,\n          ]),\n      ),\n    )[fieldName] ?? [],\n  );\n</script>\n\n{#each items as item, index (item.__sc_item_id ?? index)}\n  <VisibilityObserver>\n    {@const subFieldName = Array.isArray(types)\n      ? $entryDraft?.currentValues[locale][`${keyPath}.${index}.${typeKey}`]\n      : undefined}\n    {@const typeConfig = types?.find(({ name }) => name === subFieldName)}\n    {@const label = typeConfig ? typeConfig.label || typeConfig.name : undefined}\n    {@const subFields = subFieldName\n      ? (typeConfig?.fields ?? [])\n      : (fields ?? (field ? [field] : []))}\n    <Subsection {label}>\n      {#each subFields as subField (subField.name)}\n        <VisibilityObserver>\n          <FieldPreview\n            keyPath={field ? `${keyPath}.${index}` : `${keyPath}.${index}.${subField.name}`}\n            {locale}\n            fieldConfig={subField}\n          />\n        </VisibilityObserver>\n      {/each}\n    </Subsection>\n  </VisibilityObserver>\n{/each}\n","<!--\n  @component\n  Implement the preview for the List widget without subfield(s).\n  @see https://decapcms.org/docs/widgets/#list\n-->\n<script>\n  /**\n   * @import { WidgetPreviewProps } from '$lib/types/private';\n   * @import { ListField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {ListField} fieldConfig Field configuration.\n   * @property {string[] | undefined} currentValue Field value.\n   */\n\n  /** @type {WidgetPreviewProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    currentValue,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n{#if Array.isArray(currentValue) && currentValue.length}\n  <ul lang={locale} dir=\"auto\">\n    {#each currentValue as item}\n      <li>{item}</li>\n    {/each}\n  </ul>\n{/if}\n","<!--\n  @component\n  Implement the preview for the List widget.\n  @see https://decapcms.org/docs/widgets/#list\n-->\n<script>\n  import ListPreviewComplex from '$lib/components/contents/details/widgets/list/list-preview-complex.svelte';\n  import ListPreviewSimple from '$lib/components/contents/details/widgets/list/list-preview-simple.svelte';\n  import { getListFieldInfo } from '$lib/services/contents/widgets/list/helper';\n\n  /**\n   * @import { WidgetPreviewProps } from '$lib/types/private';\n   * @import { ListField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {ListField} fieldConfig Field configuration.\n   * @property {string[] | undefined} currentValue Field value.\n   */\n\n  /** @type {WidgetPreviewProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    ...allProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const { hasSubFields } = $derived(getListFieldInfo(allProps.fieldConfig));\n  const Component = $derived(hasSubFields ? ListPreviewComplex : ListPreviewSimple);\n</script>\n\n<Component {...allProps} />\n","import { isObject } from '@sveltia/utils/object';\n\n/**\n * @import { AuthTokens } from '$lib/types/private';\n */\n\n/**\n * A `fetch` wrapper to send an HTTP request to an API endpoint, parse the response as JSON or other\n * specified format, and handle errors gracefully.\n * @param {string} url URL.\n * @param {RequestInit} [init] Request options.\n * @param {object} [options] Options.\n * @param {'json' | 'text' | 'blob' | 'raw'} [options.responseType] Response parser type. The\n * default is `json`. Use `raw` to return a `Response` object as is.\n * @param {() => Promise<AuthTokens>} [options.refreshAccessToken] A function to refresh the OAuth\n * access token when the request fails with a 401 Unauthorized status. If this function is provided,\n * the request will be retried with the new token.\n * @returns {Promise<object | string | Blob | Response>} Response data or `Response` itself,\n * depending on the `responseType` option.\n * @throws {Error} When there was an error in the request or response.\n */\nexport const sendRequest = async (\n  url,\n  init = {},\n  { responseType = 'json', refreshAccessToken = undefined } = {},\n) => {\n  /** @type {Response} */\n  let response;\n\n  init.cache = 'no-cache';\n  init.headers = new Headers(init.headers);\n\n  if (responseType === 'json') {\n    init.headers.set('Accept', 'application/json');\n  }\n\n  if (init.method === 'POST' && isObject(init.body)) {\n    init.headers.set('Content-Type', 'application/json');\n    init.body = JSON.stringify(init.body);\n  }\n\n  try {\n    response = await fetch(url, init);\n  } catch (ex) {\n    throw new Error('Failed to send the request', { cause: ex });\n  }\n\n  if (responseType === 'raw') {\n    return response;\n  }\n\n  const { ok, status } = response;\n  /** @type {any} */\n  let result;\n\n  try {\n    if (ok && responseType === 'blob') {\n      return response.blob();\n    }\n\n    if (ok && responseType === 'text') {\n      return response.text();\n    }\n\n    result = await response.json();\n  } catch (ex) {\n    throw new Error('Failed to parse the response', { cause: ex });\n  }\n\n  // Return the parsed result for a successful response, but a GraphQL error is typically returned\n  // with 200 OK so we need to check the content for the `errors` key\n  if (ok && !(url.endsWith('/graphql') && isObject(result) && result.errors)) {\n    return result;\n  }\n\n  if (status === 401 && refreshAccessToken) {\n    const [scheme] = init.headers.get('Authorization')?.split(' ') ?? ['token'];\n    const { token } = await refreshAccessToken();\n\n    init.headers.set('Authorization', `${scheme} ${token}`);\n\n    // Retry the request with the new token. Omit `refreshAccessToken` to avoid infinite loops.\n    return sendRequest(url, init, { responseType });\n  }\n\n  if (!isObject(result)) {\n    throw new Error('Server responded with an error', { cause: { status } });\n  }\n\n  let message = '';\n\n  if (typeof result.error === 'string') {\n    message = result.error;\n  }\n\n  // Typical REST\n  if (typeof result.message === 'string') {\n    message = result.message;\n  }\n\n  if (Array.isArray(result.errors)) {\n    if (typeof result.errors[0] === 'string') {\n      message = result.errors.join(', ');\n    }\n\n    // Typical GraphQL\n    if (isObject(result.errors[0]) && typeof result.errors[0].message === 'string') {\n      message = /** @type {any[]} */ (result.errors).map((e) => e.message).join(', ');\n    }\n  }\n\n  throw new Error('Server responded with an error', { cause: { status, message } });\n};\n","<!--\n  @component\n  Implement the editor for the Map widget.\n  @see https://decapcms.org/docs/widgets/#map\n  @see https://leafletjs.com/\n  @see https://github.com/JamesLMilner/terra-draw\n-->\n<script>\n  // cSpell:ignore Nominatim jsonv2\n\n  import { AlertDialog, Button, Icon, Listbox, Option, SearchBar } from '@sveltia/ui';\n  import { isObject } from '@sveltia/utils/object';\n  import { onMount, untrack } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import { loadModule } from '$lib/services/app/dependencies';\n  import { sendRequest } from '$lib/services/utils/networking';\n  import { toFixed } from '$lib/services/utils/number';\n\n  /**\n   * @import { GeoJSONStoreGeometries, TerraDraw } from 'terra-draw';\n   * @import { GeoCoordinates, WidgetEditorProps } from '$lib/types/private';\n   * @import { MapField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {MapField} fieldConfig Field configuration.\n   * @property {string | undefined} currentValue Field value. Stringified GeoJSON geometry object.\n   */\n\n  /**\n   * @typedef {object} SearchResult\n   * @property {string} place_id Unique identifier of the search result.\n   * @property {string} display_name Display name of the search result.\n   * @property {string} lat Latitude of the search result.\n   * @property {string} lon Longitude of the search result.\n   * @see https://nominatim.org/release-docs/develop/api/Search/\n   */\n\n  /** @type {WidgetEditorProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    fieldConfig,\n    currentValue = $bindable(),\n    // required = true,\n    readonly = false,\n    invalid = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const { required = true, decimals = 7, type: geometryType = 'Point' } = $derived(fieldConfig);\n  const drawMode = $derived(geometryType.toLowerCase());\n\n  /** @type {HTMLElement | undefined} */\n  let mapElement = $state();\n  /** @type {TerraDraw | undefined} */\n  let draw = $state(undefined);\n  /** @type {string} */\n  let inputValue = $state('');\n  /** @type {string} */\n  let searchQuery = $state('');\n  /** @type {SearchResult[] | undefined} */\n  let searchResults = $state(undefined);\n  /** @type {boolean} */\n  let searching = $state(false);\n  /** @type {boolean} */\n  let showAlertDialog = $state(false);\n  /** @type {string} */\n  let errorMessage = $state('');\n\n  /** @type {number} */\n  let searchInputTimeout = 0;\n  /** @type {import('leaflet').Map | undefined} */\n  let map = undefined;\n\n  /**\n   * Load the Leaflet and Terra Draw libraries and initialize the map. We don’t bundle the libraries\n   * because of the bundle size: the Map widget may not be used often and multiple services/adapters\n   * may be supported in the future.\n   */\n  const init = async () => {\n    if (!mapElement) {\n      return;\n    }\n\n    /** @type {import('leaflet')} */\n    const leaflet = await loadModule('leaflet', 'dist/leaflet-src.esm.js');\n\n    /** @type {import('terra-draw')} */\n    const { TerraDraw, TerraDrawLineStringMode, TerraDrawPointMode, TerraDrawPolygonMode } =\n      await loadModule('terra-draw', 'dist/terra-draw.module.js');\n\n    /** @type {import('terra-draw-leaflet-adapter')} */\n    const { TerraDrawLeafletAdapter } = await loadModule(\n      'terra-draw-leaflet-adapter',\n      'dist/terra-draw-leaflet-adapter.module.js?module',\n    );\n\n    map = leaflet.map(mapElement, { center: [0, 0], zoom: 2 });\n\n    leaflet\n      .tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {\n        attribution:\n          '&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors',\n      })\n      .addTo(map);\n\n    new ResizeObserver(() => {\n      map?.invalidateSize();\n    }).observe(mapElement);\n\n    const _draw = new TerraDraw({\n      adapter: new TerraDrawLeafletAdapter({ lib: leaflet, map }),\n      modes: [new TerraDrawPointMode(), new TerraDrawLineStringMode(), new TerraDrawPolygonMode()],\n    });\n\n    _draw.start();\n    _draw.setMode(drawMode);\n\n    _draw.on('change', (_ids, changeType) => {\n      // eslint-disable-next-line no-use-before-define\n      onDrawChange(changeType);\n    });\n\n    draw = _draw;\n  };\n\n  /**\n   * Handle the change event of the Terra Draw instance. Update the input value based on the drawn\n   * feature. This function is called when a feature is created, modified, or deleted.\n   * @param {string} changeType Type of change that occurred in the draw instance.\n   */\n  const onDrawChange = (changeType) => {\n    if (!draw) {\n      return;\n    }\n\n    if (changeType === 'create') {\n      const snapshot = draw.getSnapshot();\n      const feature = snapshot.findLast((f) => f.geometry.type === geometryType);\n\n      if (!feature) {\n        return;\n      }\n\n      const { type, coordinates } = feature.geometry;\n\n      inputValue = JSON.stringify({\n        type,\n        coordinates: coordinates.map((coords) =>\n          Array.isArray(coords)\n            ? coords.map((c) =>\n                Array.isArray(c) ? c.map((cc) => toFixed(cc, decimals)) : toFixed(c, decimals),\n              )\n            : toFixed(coords, decimals),\n        ),\n      });\n\n      // Allow to have only one feature\n      if (geometryType === 'Point') {\n        draw.removeFeatures(\n          /** @type {string[]} */ (snapshot.filter((f) => f.id !== feature.id).map((f) => f.id)),\n        );\n      }\n    }\n  };\n\n  /**\n   * Update {@link inputValue} based on {@link currentValue}.\n   */\n  const setInputValue = () => {\n    if (!draw) {\n      return;\n    }\n\n    let newValue = currentValue ?? '';\n    /** @type {GeoJSONStoreGeometries | undefined} */\n    let geometry = undefined;\n\n    // Validate the value\n    try {\n      if (newValue !== undefined) {\n        geometry = JSON.parse(newValue);\n\n        if (\n          !geometry ||\n          !isObject(geometry) ||\n          geometry.type !== geometryType ||\n          !Array.isArray(geometry.coordinates)\n        ) {\n          throw new Error('Invalid object');\n        }\n      }\n    } catch {\n      newValue = '';\n      geometry = undefined;\n    }\n\n    if (inputValue === newValue) {\n      return;\n    }\n\n    inputValue = newValue;\n\n    draw.clear();\n\n    if (geometry) {\n      draw.addFeatures([{ type: 'Feature', geometry, properties: { mode: drawMode } }]);\n\n      if (geometry.coordinates.every((c) => typeof c === 'number')) {\n        const [longitude, latitude] = geometry.coordinates;\n\n        map?.setView([latitude, longitude], 15);\n      }\n    }\n  };\n\n  /**\n   * Update {@link currentValue} based on {@link inputValue}.\n   */\n  const setCurrentValue = () => {\n    if (!draw) {\n      return;\n    }\n\n    const newValue = inputValue;\n\n    // Avoid a cycle dependency & infinite loop\n    if (currentValue !== newValue) {\n      currentValue = newValue;\n    }\n  };\n\n  /**\n   * Search for locations using the Nominatim API.\n   * @see https://nominatim.org/release-docs/develop/api/Search/\n   */\n  const searchLocation = () => {\n    window.clearTimeout(searchInputTimeout);\n\n    searchInputTimeout = window.setTimeout(async () => {\n      const q = searchQuery.trim();\n\n      if (!q) {\n        return;\n      }\n\n      searching = true;\n\n      const params = new URLSearchParams({ q, format: 'jsonv2' });\n      const url = `https://nominatim.openstreetmap.org/search?${params}`;\n\n      try {\n        searchResults = /** @type {SearchResult[]} */ (await sendRequest(url));\n      } catch {\n        searchResults = [];\n      }\n\n      searching = false;\n    }, 500);\n  };\n\n  /**\n   * Set the location on the map editor.\n   * @param {GeoCoordinates} coordinates GeoCoordinates of the location to set.\n   */\n  const setLocation = ({ latitude, longitude }) => {\n    if (!draw) {\n      return;\n    }\n\n    latitude = toFixed(latitude, decimals);\n    longitude = toFixed(longitude, decimals);\n\n    /** @type {GeoJSONStoreGeometries} */\n    const feature = { type: 'Point', coordinates: [longitude, latitude] };\n\n    draw.clear();\n    draw.addFeatures([{ type: 'Feature', geometry: feature, properties: { mode: 'point' } }]);\n    map?.setView([latitude, longitude], 15);\n\n    inputValue = JSON.stringify(feature);\n  };\n\n  /**\n   * Handle the selection of a search result. Move the map to the selected location and add a point\n   * feature to the map.\n   * @param {SearchResult} result Selected search result.\n   */\n  const onSearchResultSelect = ({ lat, lon }) => {\n    setLocation({ latitude: parseFloat(lat), longitude: parseFloat(lon) });\n  };\n\n  /**\n   * Use the browser’s geolocation API to get the current location of the user and set it as the\n   * value of the map editor. This function is called when the Use Current Location button is\n   * clicked. It retrieves the user’s current position and updates the map with a point feature at\n   * the user’s location.\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/Geolocation_API\n   */\n  const useCurrentLocation = () => {\n    if (!navigator.geolocation) {\n      showAlertDialog = true;\n      errorMessage = $_('geolocation_unsupported');\n\n      return;\n    }\n\n    navigator.geolocation.getCurrentPosition(\n      ({ coords: { latitude, longitude } }) => {\n        setLocation({ latitude, longitude });\n      },\n      (error) => {\n        showAlertDialog = true;\n        errorMessage = $_('geolocation_error_body');\n        // eslint-disable-next-line no-console\n        console.error('Error getting current location:', error);\n      },\n    );\n  };\n\n  /**\n   * Clear the current value of the map editor. This is called when the Clear button is clicked.\n   * It sets the `currentValue` to an empty string, effectively clearing the map.\n   */\n  const clearValue = () => {\n    currentValue = '';\n  };\n\n  onMount(() => {\n    init();\n  });\n\n  $effect(() => {\n    void draw;\n    void currentValue;\n\n    untrack(() => {\n      setInputValue();\n    });\n  });\n\n  $effect(() => {\n    void inputValue;\n\n    untrack(() => {\n      setCurrentValue();\n    });\n  });\n\n  $effect(() => {\n    void searchQuery;\n\n    untrack(() => {\n      searchLocation();\n    });\n  });\n</script>\n\n<!-- @todo Support LineString and Polygon types -->\n{#if geometryType === 'Point'}\n  <div role=\"none\" class=\"toolbar\">\n    <!-- @todo Replace this with `<Combobox>` -->\n    <SearchBar bind:value={searchQuery} {readonly} flex placeholder={$_('find_place')} />\n    <!-- @todo Replace `title` with a native tooltip -->\n    <Button\n      variant=\"tertiary\"\n      iconic\n      title={$_('use_your_location')}\n      aria-label={$_('use_your_location')}\n      disabled={readonly}\n      onclick={() => {\n        useCurrentLocation();\n      }}\n    >\n      {#snippet startIcon()}\n        <Icon name=\"near_me\" />\n      {/snippet}\n    </Button>\n    {#if !required}\n      <Button\n        variant=\"tertiary\"\n        label={$_('clear')}\n        disabled={readonly || !currentValue}\n        onclick={() => {\n          clearValue();\n        }}\n      />\n    {/if}\n  </div>\n\n  {#if searching}\n    <div role=\"alert\" class=\"search-result searching\">{$_('searching')}</div>\n  {:else if searchQuery}\n    {#if searchResults}\n      {#if searchResults.length}\n        <Listbox aria-label={$_('search_results')}>\n          {#each searchResults as result (result.place_id)}\n            <Option\n              label={result.display_name}\n              onSelect={() => {\n                onSearchResultSelect(result);\n              }}\n            />\n          {/each}\n        </Listbox>\n      {:else}\n        <div role=\"alert\" class=\"search-result no-result\">{$_('no_results')}</div>\n      {/if}\n    {/if}\n  {/if}\n\n  <div role=\"application\" class=\"map\" inert={readonly} class:invalid bind:this={mapElement}></div>\n{:else}\n  The {geometryType} type is not yet supported.\n{/if}\n\n<AlertDialog bind:open={showAlertDialog} title={$_('geolocation_error_title')}>\n  {errorMessage}\n</AlertDialog>\n\n<style lang=\"scss\">\n  // @todo Copy minimal styles from Leaflet to avoid loading the whole CSS file\n  @import 'node_modules/leaflet/dist/leaflet.css';\n\n  .toolbar {\n    display: flex;\n    align-items: center;\n    margin-bottom: var(--sui-spacing-2x);\n  }\n\n  .search-result {\n    padding: 12px;\n    color: var(--sui-secondary-foreground-color);\n  }\n\n  .map {\n    margin: var(--sui-focus-ring-width);\n    border: 1px solid var(--sui-textbox-border-color);\n    border-radius: var(--sui-textbox-border-radius);\n    overflow: hidden;\n    height: 400px;\n    background-clip: text;\n\n    &.invalid {\n      border-color: var(--sui-error-border-color);\n    }\n  }\n\n  :global(.leaflet-container) {\n    font-family: inherit !important;\n    font-size: var(--sui-font-size-small) !important;\n  }\n\n  :global(.leaflet-container a) {\n    color: var(--sui-primary-accent-color-text) !important;\n    text-decoration: none !important;\n  }\n\n  :global(.leaflet-bar a) {\n    border-color: var(--sui-button-border-color) !important;\n    color: var(--sui-secondary-foreground-color) !important;\n    background-color: var(--sui-button-background-color) !important;\n  }\n\n  :global(.leaflet-control) {\n    color: var(--sui-secondary-foreground-color) !important;\n    background-color: var(--sui-secondary-background-color-translucent) !important;\n  }\n\n  :global(.leaflet-control-attribution) {\n    padding: 4px 8px;\n  }\n\n  // Dark theme: https://stackoverflow.com/q/59819792\n  :global(:root[data-theme='dark'] .leaflet-layer) {\n    filter: invert(100%) hue-rotate(180deg);\n  }\n</style>\n","<!--\n  @component\n  Implement the preview for the Map widget.\n  @see https://decapcms.org/docs/widgets/#map\n-->\n<script>\n  /**\n   * @import { WidgetPreviewProps } from '$lib/types/private';\n   * @import { MapField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {MapField} fieldConfig Field configuration.\n   * @property {string | undefined} currentValue Field value. Stringified GeoJSON geometry object.\n   */\n\n  /** @type {WidgetPreviewProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    currentValue,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n{#if currentValue}\n  <pre>{currentValue}</pre>\n{/if}\n\n<style lang=\"scss\">\n  pre {\n    white-space: pre-wrap;\n  }\n</style>\n","/**\n * @import { TextEditorBlockType, TextEditorInlineType, TextEditorMode } from '@sveltia/ui';\n * @import {\n * EditorComponentDefinition,\n * RichTextEditorButtonName,\n * RichTextEditorComponentName,\n * RichTextEditorMode,\n * } from '$lib/types/public';\n */\n\n/**\n * Regular expression to match the component name prefix in the key path, e.g. `body:c12:image:`.\n * @type {RegExp}\n */\nexport const COMPONENT_NAME_PREFIX_REGEX = /^.+?:\\w+:/;\n\n/**\n * The default `modes` property options.\n * @type {RichTextEditorMode[]}\n */\nexport const DEFAULT_MODES = ['rich_text', 'raw'];\n\n/**\n * Key is a name used in Netlify/Decap CMS, value is a name used in Sveltia UI.\n * @type {Record<RichTextEditorMode, TextEditorMode>}\n */\nexport const NODE_NAME_MAP = {\n  rich_text: 'rich-text',\n  raw: 'plain-text',\n};\n\n/**\n * The default `buttons` property options.\n * @type {RichTextEditorButtonName[]}\n */\nexport const DEFAULT_BUTTONS = [\n  'bold',\n  'italic',\n  'code',\n  'link',\n  'heading-one',\n  'heading-two',\n  'heading-three',\n  'heading-four',\n  'heading-five',\n  'heading-six',\n  'bulleted-list',\n  'numbered-list',\n  'quote',\n];\n\n/**\n * Key is a name used in Netlify/Decap CMS, value is a name used in Sveltia UI.\n * @type {Record<RichTextEditorButtonName | 'code-block', TextEditorInlineType |\n * TextEditorBlockType>}\n */\nexport const BUTTON_NAME_MAP = {\n  bold: 'bold',\n  italic: 'italic',\n  code: 'code',\n  link: 'link',\n  'heading-one': 'heading-1',\n  'heading-two': 'heading-2',\n  'heading-three': 'heading-3',\n  'heading-four': 'heading-4',\n  'heading-five': 'heading-5',\n  'heading-six': 'heading-6',\n  'bulleted-list': 'bulleted-list',\n  'numbered-list': 'numbered-list',\n  quote: 'blockquote',\n  'code-block': 'code-block',\n};\n\n/**\n * Built-in editor component names. `code-block` is a button in Sveltia CMS, but it’s included here\n * for consistency with the Netlify/Decap CMS API.\n * @type {RichTextEditorComponentName[]}\n */\nexport const BUILTIN_COMPONENTS = ['code-block', 'image'];\n\n/**\n * Custom components registered using `CMS.registerEditorComponent`.\n * @type {Record<string, EditorComponentDefinition>}\n */\nexport const customComponents = {};\n","<!--\n  @component\n  Implement the editor for the Markdown widget.\n  @see https://decapcms.org/docs/widgets/#markdown\n-->\n<script>\n  import { TextEditor } from '@sveltia/ui';\n  import { getDateTimeParts } from '@sveltia/utils/datetime';\n  import { sleep } from '@sveltia/utils/misc';\n  import {\n    $createParagraphNode as createParagraphNode,\n    getNearestEditorFromDOMNode,\n    $insertNodes as insertNodes,\n  } from 'lexical';\n  import { untrack } from 'svelte';\n\n  import { entryDraft } from '$lib/services/contents/draft';\n  import {\n    BUILTIN_COMPONENTS,\n    BUTTON_NAME_MAP,\n    COMPONENT_NAME_PREFIX_REGEX,\n    customComponents,\n    DEFAULT_BUTTONS,\n    DEFAULT_MODES,\n    NODE_NAME_MAP,\n  } from '$lib/services/contents/widgets/markdown';\n  import {\n    EditorComponent,\n    getComponentDef,\n  } from '$lib/services/contents/widgets/markdown/component';\n  import {\n    RASTER_IMAGE_EXTENSION_REGEX,\n    SUPPORTED_IMAGE_TYPES,\n    VECTOR_IMAGE_EXTENSION_REGEX,\n  } from '$lib/services/utils/media/image';\n\n  /**\n   * @import { EntryDraft, WidgetEditorProps } from '$lib/types/private';\n   * @import { MarkdownField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {{ file?: File, src?: string, alt?: string }} ImageEntry\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {MarkdownField} fieldConfig Field configuration.\n   * @property {string | undefined} currentValue Field value.\n   */\n\n  /** @type {WidgetEditorProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    fieldId,\n    fieldConfig,\n    currentValue = $bindable(),\n    required = true,\n    readonly = false,\n    invalid = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {HTMLElement | undefined} */\n  let wrapper = $state();\n  let inputValue = $state('');\n\n  const {\n    // Widget-specific options\n    modes: _modes = [...DEFAULT_MODES],\n    buttons: _buttons = [...DEFAULT_BUTTONS],\n    editor_components:\n      // Include all built-in and custom components by default\n      _editorComponents = [...BUILTIN_COMPONENTS, ...Object.keys(customComponents)],\n    linked_images: linkedImagesEnabled = true,\n    minimal = false,\n  } = $derived(fieldConfig);\n  const modes = $derived(_modes.map((name) => NODE_NAME_MAP[name]).filter(Boolean));\n  const buttons = $derived(\n    [\n      ..._buttons,\n      // Include `code-block` implemented as a block type\n      ...(_editorComponents.includes('code-block') ? ['code-block'] : []),\n    ]\n      // @ts-ignore\n      .map((name) => BUTTON_NAME_MAP[name])\n      .filter(Boolean),\n  );\n  const components = $derived(\n    _editorComponents\n      .map((name) =>\n        getComponentDef(name === 'image' && linkedImagesEnabled ? 'linked-image' : name),\n      )\n      .filter((def) => !!def)\n      .map(\n        (def) =>\n          /** @type {import('@sveltia/ui').TextEditorComponent} */ (new EditorComponent(def)),\n      ),\n  );\n  const imageComponent = $derived(components.find(({ id }) => id === 'image'));\n\n  /**\n   * Insert images to the editor content.\n   * @param {object} args Arguments.\n   * @param {EventTarget | null} args.target Event target.\n   * @param {ImageEntry[]} args.images Image list.\n   */\n  const insertImages = ({ target, images }) => {\n    const outer = /** @type {HTMLElement} */ (target)?.closest('div');\n    const editor = getNearestEditorFromDOMNode(outer);\n\n    if (!imageComponent || !outer?.matches('.lexical-root') || !editor) {\n      return;\n    }\n\n    images.forEach(({ file, src, alt = '' }) => {\n      if (file) {\n        src = URL.createObjectURL(file);\n      }\n\n      editor.update(\n        () => {\n          insertNodes([imageComponent.createNode({ src, alt }), createParagraphNode()]);\n        },\n        {\n          // eslint-disable-next-line jsdoc/require-jsdoc\n          onUpdate: async () => {\n            if (!file) {\n              return;\n            }\n\n            await sleep(250);\n\n            const dropTarget = outer.querySelector(`img[src=\"${src}\"]`)?.closest('.drop-target');\n\n            // Dispatch `Select` event so the file is processed in `FileEditor`\n            dropTarget?.dispatchEvent(new CustomEvent('Select', { detail: { files: [file] } }));\n          },\n        },\n      );\n    });\n  };\n\n  /**\n   * Handle pasted file. If it’s an image, insert it to the editor content.\n   * @param {ClipboardEvent} event `paste` event.\n   */\n  const onPaste = async (event) => {\n    const { target, clipboardData } = event;\n    const pastedItems = clipboardData?.items;\n\n    if (!pastedItems) {\n      return;\n    }\n\n    /** @type {ImageEntry[]} */\n    let images = [];\n\n    const fileIndex = [...pastedItems].findIndex(\n      ({ kind, type }) => kind === 'file' && SUPPORTED_IMAGE_TYPES.includes(type),\n    );\n\n    const htmlIndex = [...pastedItems].findIndex(\n      ({ kind, type }) => kind === 'string' && type === 'text/html',\n    );\n\n    if (fileIndex > -1 && htmlIndex > -1) {\n      // Handle pasted remote files: When a remote image is copied within the browser, both file and\n      // HTML with `<img>` are added to the clipboard. Scrape the filename and alt text from the\n      // HTML content\n      const file = fileIndex > -1 ? pastedItems[fileIndex].getAsFile() : undefined;\n\n      if (!file) {\n        return;\n      }\n\n      // Clear the clipboard to prevent Lexical from pasting the HTML\n      pastedItems.clear();\n      event.stopPropagation();\n\n      let alt = '';\n      let fileName = file.name;\n\n      /** @type {?HTMLImageElement} */\n      const img = await new Promise((resolve) => {\n        pastedItems[htmlIndex].getAsString((str) => {\n          resolve(new DOMParser().parseFromString(str, 'text/html').querySelector('img'));\n        });\n      });\n\n      if (img) {\n        alt = img.alt;\n\n        if (/^https?:/.test(img.src)) {\n          const name = new URL(img.src).pathname.split('/').pop() ?? '';\n\n          if (RASTER_IMAGE_EXTENSION_REGEX.test(name) || VECTOR_IMAGE_EXTENSION_REGEX.test(name)) {\n            fileName = name;\n          }\n        }\n      }\n\n      images = [{ file: new File([file], fileName, { type: file.type }), alt }];\n    } else {\n      // Handle pasted local files\n      images = [...clipboardData.files]\n        .filter(({ type }) => SUPPORTED_IMAGE_TYPES.includes(type))\n        .map((file) => ({ file }));\n    }\n\n    if (images.length) {\n      images = images.map(({ file, alt }, index) => {\n        // Rename pasted file with generic name\n        if (file?.name === 'image.png') {\n          const { year, month, day, hour, minute, second } = getDateTimeParts();\n          const suffix = images.length > 1 ? `-${index + 1}` : '';\n          const fileName = `${year}${month}${day}-${hour}${minute}${second}${suffix}.png`;\n\n          file = new File([file], fileName, { type: file.type });\n        }\n\n        return { file, alt };\n      });\n\n      insertImages({ target, images });\n    }\n  };\n\n  /**\n   * Handle dropped file(s). If it’s an image, insert it to the editor content.\n   * @param {DragEvent} event `drop` event.\n   */\n  const onDrop = async (event) => {\n    const { target, dataTransfer } = event;\n    const droppedFiles = dataTransfer?.files;\n    /** @type {ImageEntry[]} */\n    let images = [];\n\n    if (droppedFiles?.length) {\n      // Handle dropped local files\n      images = [...droppedFiles]\n        .filter(({ type }) => SUPPORTED_IMAGE_TYPES.includes(type))\n        .map((file) => ({ file }));\n    } else {\n      // Handle dropped remote files: The clipboard doesn’t contain the file itself but the HTML may\n      // contain `<img>`; use the `src` and `alt` attributes to insert a new image. We don’t fetch\n      // the file unless a data URL is given, because it’s likely to fail due to the external site’s\n      // CORS policy\n      const html = event.dataTransfer?.getData('text/html');\n\n      if (html) {\n        const img = new DOMParser().parseFromString(html, 'text/html').querySelector('img');\n\n        if (img) {\n          const { src, alt } = img;\n          const dataMatcher = src.match(/^data:(?<type>image\\/.+?);base64,.+/);\n          /** @type {File | undefined} */\n          let file = undefined;\n\n          if (dataMatcher) {\n            const type = dataMatcher.groups?.type ?? '';\n\n            if (SUPPORTED_IMAGE_TYPES.includes(type)) {\n              try {\n                const blob = await (await fetch(src)).blob();\n                const { year, month, day, hour, minute, second } = getDateTimeParts();\n                const extension = type.split('/')[1];\n                const fileName = `${year}${month}${day}-${hour}${minute}${second}.${extension}`;\n\n                file = new File([blob], fileName, { type });\n              } catch {\n                return;\n              }\n            }\n          }\n\n          images = [{ file, src, alt }];\n        }\n      }\n    }\n\n    if (images.length) {\n      insertImages({ target, images });\n    }\n  };\n\n  /**\n   * Update {@link inputValue} based on {@link currentValue} while avoiding a cycle dependency.\n   */\n  const setInputValue = async () => {\n    const newValue = typeof currentValue === 'string' ? currentValue : '';\n\n    if (inputValue !== newValue) {\n      inputValue = newValue;\n    }\n\n    await sleep(500);\n\n    // Remove values that are not present in the editor anymore. Otherwise, they will trigger\n    // validation errors when the entry is saved.\n    Object.keys(/** @type {EntryDraft} */ ($entryDraft).extraValues[locale] ?? {}).forEach(\n      (key) => {\n        const [prefix] = key.match(COMPONENT_NAME_PREFIX_REGEX) ?? [];\n\n        if (prefix && !wrapper?.querySelector(`[data-key-path^=\"${prefix}\"]`)) {\n          delete (/** @type {EntryDraft} */ ($entryDraft).extraValues[locale][key]);\n        }\n      },\n    );\n  };\n\n  /**\n   * Update {@link currentValue} based on {@link inputValue} while avoiding a cycle dependency.\n   */\n  const setCurrentValue = () => {\n    const newValue = inputValue;\n\n    if (currentValue !== newValue) {\n      currentValue = newValue;\n    }\n  };\n\n  $effect(() => {\n    void [currentValue];\n\n    untrack(() => {\n      setInputValue();\n    });\n  });\n\n  $effect(() => {\n    void [inputValue];\n\n    untrack(() => {\n      setCurrentValue();\n    });\n  });\n</script>\n\n<div role=\"none\" class=\"wrapper\" class:minimal bind:this={wrapper}>\n  {#await sleep() then}\n    <!--\n      Reset the editor when the configuration changes. It happens when fields are reordered or\n      removed in a variable type list field. @see https://github.com/sveltia/sveltia-cms/issues/480\n    -->\n    {#key JSON.stringify(fieldConfig)}\n      <TextEditor\n        lang={locale}\n        {modes}\n        {buttons}\n        {components}\n        bind:value={inputValue}\n        flex\n        {readonly}\n        {required}\n        {invalid}\n        aria-labelledby=\"{fieldId}-label\"\n        aria-errormessage=\"{fieldId}-error\"\n        autoResize={true}\n        onpastecapture={(/** @type {ClipboardEvent} */ event) => {\n          // Use `capture` to handle the event before Lexical does\n          onPaste(event);\n        }}\n        ondrop={(/** @type {DragEvent} */ event) => {\n          onDrop(event);\n        }}\n      />\n    {/key}\n  {/await}\n</div>\n\n<style lang=\"scss\">\n  .wrapper {\n    display: contents;\n\n    &.minimal {\n      :global {\n        :is([role='textbox'], textarea) {\n          overflow: auto;\n          max-height: 240px;\n        }\n      }\n    }\n\n    :global {\n      @media (width < 768px) {\n        .sui.text-editor {\n          // Remove the section padding\n          margin: 0 calc(var(--field-editor-padding) * -1) calc(var(--field-editor-padding) * -1);\n          width: 100dvw;\n        }\n\n        :is(.sui.toolbar, .lexical-root, textarea) {\n          border: 0;\n          border-radius: 0;\n        }\n      }\n    }\n  }\n</style>\n","import { marked } from 'marked';\n\nexport default function() {\n  return {\n    useNewRenderer: true,\n    renderer: {\n      heading(...args) {\n        const html = marked.Renderer.prototype.heading.call(this, ...args);\n        return html.replace(/^<(h\\d)/, '<$1 dir=\"auto\"');\n      },\n\n      list(...args) {\n        const html = marked.Renderer.prototype.list.call(this, ...args);\n        return html.replace(/^<(ol|ul)/, '<$1 dir=\"auto\"');\n      },\n\n      paragraph(...args) {\n        const html = marked.Renderer.prototype.paragraph.call(this, ...args);\n        return html.replace(/^<p/, '<p dir=\"auto\"');\n      },\n    },\n  };\n}\n","<!--\n  @component\n  Implement the preview for the Markdown widget.\n  @see https://decapcms.org/docs/widgets/#markdown\n-->\n<script>\n  import DOMPurify from 'isomorphic-dompurify';\n  import { marked } from 'marked';\n  import markedBidi from 'marked-bidi';\n\n  import { getMediaFieldURL } from '$lib/services/assets/info';\n  import { entryDraft } from '$lib/services/contents/draft';\n\n  /**\n   * @import { WidgetPreviewProps } from '$lib/types/private';\n   * @import { MarkdownField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {MarkdownField} fieldConfig Field configuration.\n   * @property {string | undefined} currentValue Field value.\n   */\n\n  /** @type {WidgetPreviewProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    fieldConfig,\n    currentValue,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  let rawHTML = $state('');\n\n  const entry = $derived($entryDraft?.originalEntry);\n  const collectionName = $derived($entryDraft?.collectionName ?? '');\n  const fileName = $derived($entryDraft?.fileName);\n  const { sanitize_preview: sanitize = false } = $derived(fieldConfig);\n\n  /** @type {import(\"marked\").MarkedOptions} */\n  const markedOptions = {\n    breaks: true,\n    async: true,\n    // eslint-disable-next-line jsdoc/require-jsdoc\n    walkTokens: async (token) => {\n      if (token.type === 'image') {\n        const url = await getMediaFieldURL({ value: token.href, entry, collectionName, fileName });\n\n        if (url) {\n          token.href = url;\n        }\n      }\n    },\n  };\n\n  marked.use(markedBidi());\n\n  $effect(() => {\n    (async () => {\n      rawHTML = await marked.parse(currentValue ?? '', markedOptions);\n    })();\n  });\n</script>\n\n<div role=\"none\">\n  {#if typeof currentValue === 'string' && currentValue.trim()}\n    {@html sanitize ? DOMPurify.sanitize(rawHTML) : rawHTML}\n  {/if}\n</div>\n\n<style lang=\"scss\">\n  :global([role='document']) div {\n    :global {\n      :is(h1, h2, h3, h4, h5, h6, p, ul, ol) {\n        margin: 1em 0 0;\n      }\n\n      :is(video, img) {\n        max-width: 100%;\n        max-height: 100%;\n      }\n\n      :is(a:has(img)) {\n        display: inline-block;\n\n        img {\n          pointer-events: none;\n        }\n      }\n    }\n  }\n</style>\n","<!--\n  @component\n  Implement the editor for the Number widget.\n  @see https://decapcms.org/docs/widgets/#number\n-->\n<script>\n  import { NumberInput, TextInput } from '@sveltia/ui';\n  import { untrack } from 'svelte';\n\n  /**\n   * @import { WidgetEditorProps } from '$lib/types/private';\n   * @import { NumberField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {NumberField} fieldConfig Field configuration.\n   * @property {string | number | null | undefined} currentValue Field value.\n   */\n\n  /** @type {WidgetEditorProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    fieldId,\n    fieldConfig,\n    currentValue = $bindable(),\n    required = true,\n    readonly = false,\n    invalid = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {number | undefined} */\n  let numInputValue = $state();\n  let strInputValue = $state('');\n\n  const { value_type: valueType = 'int', min, max, step = 1 } = $derived(fieldConfig);\n  const isNumeric = $derived(valueType === 'int' || valueType === 'float');\n\n  /**\n   * Update {@link numInputValue} or {@link strInputValue} based on {@link currentValue}.\n   */\n  const setInputValue = () => {\n    // Avoid a cycle dependency & infinite loop\n    if (currentValue !== undefined) {\n      if (isNumeric && numInputValue !== currentValue) {\n        if (typeof currentValue === 'number') {\n          numInputValue = currentValue;\n        } else if (typeof currentValue === 'string') {\n          const value = currentValue.trim() ? Number(currentValue) : NaN;\n\n          numInputValue = !Number.isNaN(value) ? value : undefined;\n        } else {\n          numInputValue = undefined;\n        }\n      }\n\n      if (!isNumeric && strInputValue !== currentValue) {\n        strInputValue = String(currentValue);\n      }\n    }\n  };\n\n  /**\n   * Update {@link currentValue} based on {@link numInputValue} or {@link strInputValue}. Cast the\n   * value according to the `value_type` configuration.\n   */\n  const setCurrentValue = () => {\n    let newValue;\n\n    if (isNumeric) {\n      if (numInputValue === undefined) {\n        newValue = NaN;\n      } else if (valueType === 'int') {\n        newValue = Number.parseInt(isNumeric ? String(numInputValue) : strInputValue, 10);\n      } else {\n        newValue = Number.parseFloat(isNumeric ? String(numInputValue) : strInputValue);\n      }\n    } else {\n      newValue = strInputValue;\n    }\n\n    if (isNumeric && Number.isNaN(newValue)) {\n      newValue = null;\n    }\n\n    // Avoid a cycle dependency & infinite loop\n    if (currentValue !== newValue) {\n      currentValue = newValue;\n    }\n  };\n\n  $effect(() => {\n    void [currentValue];\n\n    untrack(() => {\n      setInputValue();\n    });\n  });\n\n  $effect(() => {\n    void [strInputValue];\n\n    untrack(() => {\n      setCurrentValue();\n    });\n  });\n\n  $effect(() => {\n    void [numInputValue];\n\n    untrack(() => {\n      setCurrentValue();\n    });\n  });\n</script>\n\n{#if isNumeric}\n  <NumberInput\n    bind:value={numInputValue}\n    {min}\n    {max}\n    {step}\n    {readonly}\n    {required}\n    {invalid}\n    aria-labelledby=\"{fieldId}-label\"\n    aria-errormessage=\"{fieldId}-error\"\n  />\n{:else}\n  <TextInput\n    bind:value={strInputValue}\n    {readonly}\n    {required}\n    {invalid}\n    aria-labelledby=\"{fieldId}-label\"\n    aria-errormessage=\"{fieldId}-error\"\n  />\n{/if}\n","<!--\n  @component\n  Implement the preview for the Number widget.\n  @see https://decapcms.org/docs/widgets/#number\n-->\n<script>\n  import { getCanonicalLocale } from '$lib/services/contents/i18n';\n\n  /**\n   * @import { WidgetPreviewProps } from '$lib/types/private';\n   * @import { NumberField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {NumberField} fieldConfig Field configuration.\n   * @property {string | number | null | undefined} currentValue Field value.\n   */\n\n  /** @type {WidgetPreviewProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    fieldConfig,\n    currentValue,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const { value_type: valueType = 'int' } = $derived(fieldConfig);\n  const canonicalLocale = $derived(getCanonicalLocale(locale));\n  const numberFormatter = $derived(Intl.NumberFormat(canonicalLocale));\n</script>\n\n{#if currentValue !== undefined && currentValue !== null && currentValue !== ''}\n  <p lang={locale} dir=\"auto\">\n    {#if valueType === 'int' || valueType === 'float'}\n      {numberFormatter.format(Number(currentValue))}\n    {:else}\n      {currentValue}\n    {/if}\n  </p>\n{/if}\n","import { get } from 'svelte/store';\n\nimport { getCollection } from '$lib/services/contents/collection';\nimport { getCollectionFile } from '$lib/services/contents/collection/files';\nimport { entryDraft, i18nAutoDupEnabled } from '$lib/services/contents/draft';\nimport { getField, isFieldRequired } from '$lib/services/contents/entry/fields';\n\n/**\n * @import { EntryDraft, FlattenedEntryContent, GetFieldArgs } from '$lib/types/private';\n * @import { Field, FieldKeyPath, LocaleCode, RelationField } from '$lib/types/public';\n */\n\n/**\n * Copy the default locale value to other locales if the field’s i18n strategy is `duplicate`.\n * @param {object} args Arguments.\n * @param {GetFieldArgs} args.getFieldArgs Arguments for the `getField` function.\n * @param {Field} args.fieldConfig Field configuration.\n * @param {LocaleCode} args.sourceLocale Source locale.\n * @param {any} args.value Value to copy to other locales.\n */\nconst copyDefaultLocaleValue = ({ getFieldArgs, fieldConfig, sourceLocale, value }) => {\n  const { keyPath } = getFieldArgs;\n\n  Object.entries(/** @type {EntryDraft} */ (get(entryDraft)).currentValues).forEach(\n    ([targetLocale, content]) => {\n      // Don’t duplicate the value if the parent object doesn’t exist\n      if (keyPath.includes('.')) {\n        const { path: parentKeyPath } = keyPath.match(/(?<path>.+?)\\.[^.]*$/)?.groups ?? {};\n\n        if (\n          !Object.keys(content).some((_keyPath) => _keyPath.startsWith(`${parentKeyPath}.`)) &&\n          !getField({ ...getFieldArgs, keyPath: parentKeyPath })\n        ) {\n          return;\n        }\n      }\n\n      // Support special case for the Relation field: if the `value_field` option is something\n      // like `{{locale}}/{{slug}}`, replace the source locale in the value with target locale\n      if (fieldConfig.widget === 'relation') {\n        const { value_field: valueField = '{{slug}}' } = /** @type {RelationField} */ (fieldConfig);\n\n        if (valueField.startsWith('{{locale}}/')) {\n          value = value.replace(new RegExp(`^${sourceLocale}/`), `${targetLocale}/`);\n        }\n      }\n\n      if (targetLocale !== sourceLocale && content[keyPath] !== value) {\n        content[keyPath] = value;\n      }\n    },\n  );\n};\n\n/**\n * Create a Proxy that automatically copies a field value to other locale if the field’s i18n\n * strategy is “duplicate.”.\n * @param {object} args Arguments.\n * @param {EntryDraft | any} args.draft Entry draft.\n * @param {string} args.locale Source locale.\n * @param {object} [args.target] Target object.\n * @param {() => FlattenedEntryContent} [args.getValueMap] Optional function to get an object\n * holding the current entry values. It will be used for the `valueMap` argument of\n * {@link getField}. If omitted, the proxy target will be used instead.\n * @returns {any} Created proxy.\n */\nexport const createProxy = ({\n  draft: { collectionName, fileName, isIndexFile },\n  locale: sourceLocale,\n  target = {},\n  getValueMap = undefined,\n}) => {\n  const collection = getCollection(collectionName);\n\n  const collectionFile =\n    collection && fileName ? getCollectionFile(collection, fileName) : undefined;\n\n  if (!collection || (fileName && !collectionFile)) {\n    return undefined;\n  }\n\n  const {\n    defaultLocale,\n    canonicalSlug: { key: canonicalSlugKey },\n  } = (collectionFile ?? collection)._i18n;\n\n  return new Proxy(/** @type {any} */ (target), {\n    // eslint-disable-next-line jsdoc/require-jsdoc\n    set: (obj, /** @type {FieldKeyPath} */ keyPath, value) => {\n      if (obj[keyPath] !== value) {\n        obj[keyPath] = value;\n      }\n\n      // Skip the rest in some cases\n      if ([canonicalSlugKey].includes(keyPath)) {\n        return true;\n      }\n\n      const valueMap = typeof getValueMap === 'function' ? getValueMap() : obj;\n      /** @type {GetFieldArgs} */\n      const getFieldArgs = { collectionName, fileName, keyPath, valueMap, isIndexFile };\n      const fieldConfig = getField({ ...getFieldArgs });\n\n      if (!fieldConfig) {\n        return true;\n      }\n\n      const validity = get(entryDraft)?.validities?.[sourceLocale]?.[keyPath];\n\n      // Update validity in real time if validation has already been performed\n      if (validity) {\n        // @todo Perform all the field validations, not just `valueMissing` for string fields\n        if (typeof value === 'string' && isFieldRequired({ fieldConfig, locale: sourceLocale })) {\n          validity.valueMissing = !value;\n        }\n      }\n\n      // Copy value to other locales\n      if (\n        get(i18nAutoDupEnabled) &&\n        fieldConfig.i18n === 'duplicate' &&\n        sourceLocale === defaultLocale\n      ) {\n        copyDefaultLocaleValue({ getFieldArgs, fieldConfig, sourceLocale, value });\n      }\n\n      return true;\n    },\n  });\n};\n","import { toRaw } from '@sveltia/utils/object';\nimport { escapeRegExp } from '@sveltia/utils/string';\nimport { get } from 'svelte/store';\n\nimport { entryDraft } from '$lib/services/contents/draft';\nimport { createProxy } from '$lib/services/contents/draft/create/proxy';\nimport { getDefaultValues } from '$lib/services/contents/draft/defaults';\nimport { getField } from '$lib/services/contents/entry/fields';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import { EntryDraft, FlattenedEntryContent, InternalLocaleCode } from '$lib/types/private';\n */\n\n/**\n * Populate the given localized content with values from the default locale.\n * @param {FlattenedEntryContent} content Original content for the current locale.\n * @returns {FlattenedEntryContent} Updated content.\n */\nexport const copyDefaultLocaleValues = (content) => {\n  const { collectionName, fileName, collection, collectionFile, currentValues, isIndexFile } =\n    /** @type {EntryDraft} */ (get(entryDraft));\n\n  const { defaultLocale } = (collectionFile ?? collection)._i18n;\n  /** @type {FlattenedEntryContent} */\n  const newContent = { ...toRaw(content), ...toRaw(currentValues[defaultLocale]) };\n  const getFieldArgs = { collectionName, fileName, valueMap: newContent, isIndexFile };\n  /** @type {string[]} */\n  const noI18nFieldKeys = [];\n\n  // Process the merged content\n  Object.keys(newContent).forEach((keyPath) => {\n    const field = getField({ ...getFieldArgs, keyPath });\n\n    if (!field) {\n      return;\n    }\n\n    const { widget = 'text', i18n = false } = field;\n\n    // Reset the field value to the default value or an empty string if the field is a text-like\n    // widget and i18n is enabled, because the content would likely be translated by the user.\n    // Otherwise, the content would be copied from the default locale.\n    if (['text', 'string', 'markdown'].includes(widget) && [true, 'translate'].includes(i18n)) {\n      newContent[keyPath] = content[keyPath] ?? '';\n    }\n\n    // Remove the field if i18n is disabled\n    if (\n      [false, 'none'].includes(i18n) ||\n      noI18nFieldKeys.some((key) => new RegExp(`^${escapeRegExp(key)}\\\\b`).test(keyPath))\n    ) {\n      delete newContent[keyPath];\n      noI18nFieldKeys.push(keyPath);\n    }\n  });\n\n  return newContent;\n};\n\n/**\n * Enable or disable the given locale’s content output for the current entry draft.\n * @param {InternalLocaleCode} locale Locale.\n */\nexport const toggleLocale = (locale) => {\n  /** @type {Writable<EntryDraft>} */ (entryDraft).update((_draft) => {\n    const { fields, currentLocales, currentValues, validities } = _draft;\n    const enabled = !currentLocales[locale];\n\n    // Initialize the content for the locale\n    if (enabled && !currentValues[locale]) {\n      const { collectionName, fileName, originalValues } = _draft;\n      const newContent = getDefaultValues(fields, locale);\n\n      return {\n        ..._draft,\n        currentLocales: { ...currentLocales, [locale]: enabled },\n        originalValues: { ...originalValues, [locale]: newContent },\n        currentValues: {\n          ...currentValues,\n          [locale]: createProxy({\n            draft: { collectionName, fileName },\n            locale,\n            target: copyDefaultLocaleValues(newContent),\n          }),\n        },\n      };\n    }\n\n    return {\n      ..._draft,\n      currentLocales: { ...currentLocales, [locale]: enabled },\n      validities: { ...validities, [locale]: {} },\n    };\n  });\n};\n","import { escapeRegExp } from '@sveltia/utils/string';\n\nimport {\n  getFieldDisplayValue,\n  getVisibleFieldDisplayValue,\n} from '$lib/services/contents/entry/fields';\n\n/**\n * @import { FlattenedEntryContent, GetFieldArgs, InternalLocaleCode } from '$lib/types/private';\n * @import { FieldKeyPath } from '$lib/types/public';\n */\n\n/**\n * Format the summary template of an Object field.\n * @param {object} args Arguments.\n * @param {string} args.collectionName Collection name.\n * @param {string} [args.fileName] Collection file name. File/singleton collection only.\n * @param {FieldKeyPath} args.keyPath Field key path.\n * @param {FlattenedEntryContent} args.valueMap Entry content.\n * @param {boolean} [args.isIndexFile] Whether the corresponding entry is the collection’s special\n * index file used specifically in Hugo.\n * @param {InternalLocaleCode} args.locale Locale code.\n * @param {string} [args.summaryTemplate] Summary template, e.g. `{{fields.slug}}`.\n * @returns {string} Formatted summary.\n */\nexport const formatSummary = ({\n  collectionName,\n  fileName,\n  keyPath,\n  valueMap,\n  isIndexFile = false,\n  locale,\n  summaryTemplate,\n}) => {\n  /** @type {GetFieldArgs} */\n  const getFieldArgs = { collectionName, fileName, keyPath: '', valueMap, isIndexFile };\n\n  if (!summaryTemplate) {\n    return getVisibleFieldDisplayValue({\n      valueMap,\n      locale,\n      keyPath,\n      keyPathRegex: new RegExp(`^${escapeRegExp(keyPath)}\\\\.`),\n      getFieldArgs,\n    });\n  }\n\n  return summaryTemplate.replaceAll(/{{(.+?)}}/g, (_match, /** @type {string} */ placeholder) => {\n    const [tag, ...transformations] = placeholder.split(/\\s*\\|\\s*/);\n\n    return getFieldDisplayValue({\n      ...getFieldArgs,\n      keyPath: `${keyPath}.${tag.replace(/^fields\\./, '')}`,\n      locale,\n      transformations,\n    });\n  });\n};\n","<!--\n  @component\n  Implement the editor for the Object widget.\n  @see https://decapcms.org/docs/widgets/#object\n-->\n<script>\n  import { Button, Checkbox, Icon, TruncatedText } from '@sveltia/ui';\n  import { waitForVisibility } from '@sveltia/utils/element';\n  import { toRaw } from '@sveltia/utils/object';\n  import { getContext, onMount, tick } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import VisibilityObserver from '$lib/components/common/visibility-observer.svelte';\n  import FieldEditor from '$lib/components/contents/details/editor/field-editor.svelte';\n  import AddItemButton from '$lib/components/contents/details/widgets/object/add-item-button.svelte';\n  import ObjectHeader from '$lib/components/contents/details/widgets/object/object-header.svelte';\n  import { entryDraft, i18nAutoDupEnabled } from '$lib/services/contents/draft';\n  import { getDefaultValues } from '$lib/services/contents/draft/defaults';\n  import { copyDefaultLocaleValues } from '$lib/services/contents/draft/update/locale';\n  import {\n    getInitialExpanderState,\n    syncExpanderStates,\n  } from '$lib/services/contents/editor/expanders';\n  import { getField } from '$lib/services/contents/entry/fields';\n  import { DEFAULT_I18N_CONFIG } from '$lib/services/contents/i18n/config';\n  import { formatSummary } from '$lib/services/contents/widgets/object/helper';\n  import { isSmallScreen } from '$lib/services/user/env';\n\n  /**\n   * @import { EntryDraft, FieldEditorContext, WidgetEditorProps } from '$lib/types/private';\n   * @import { ObjectField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {ObjectField} fieldConfig Field configuration.\n   * @property {object | undefined} currentValue Field value.\n   */\n\n  /** @type {FieldEditorContext} */\n  const { widgetContext, valueStoreKey = 'currentValues' } = getContext('field-editor') ?? {};\n\n  /** @type {WidgetEditorProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    keyPath,\n    fieldLabel,\n    fieldConfig,\n    required = true,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const widgetId = $props.id();\n\n  /** @type {HTMLElement | undefined} */\n  let wrapper = $state();\n\n  const {\n    name: fieldName,\n    i18n = false,\n    // Widget-specific options\n    collapsed,\n    summary,\n    fields,\n    types,\n    typeKey = 'type',\n  } = $derived(fieldConfig);\n  const isIndexFile = $derived($entryDraft?.isIndexFile ?? false);\n  const collection = $derived($entryDraft?.collection);\n  const collectionName = $derived($entryDraft?.collectionName ?? '');\n  const collectionFile = $derived($entryDraft?.collectionFile);\n  const fileName = $derived($entryDraft?.fileName);\n  const { defaultLocale } = $derived((collectionFile ?? collection)?._i18n ?? DEFAULT_I18N_CONFIG);\n  const valueMap = $derived($state.snapshot($entryDraft?.[valueStoreKey][locale]) ?? {});\n  const getFieldArgs = $derived({ collectionName, fileName, valueMap, isIndexFile });\n  const hasValues = $derived(\n    Object.entries(valueMap).some(\n      ([_keyPath, value]) =>\n        !!_keyPath.startsWith(`${keyPath}.`) &&\n        (value !== null || getField({ ...getFieldArgs, keyPath: _keyPath })?.widget === 'object'),\n    ),\n  );\n  const canEdit = $derived(\n    widgetContext === 'markdown-editor-component' || locale === defaultLocale || i18n !== false,\n  );\n  const parentExpandedKeyPath = $derived(`${keyPath}#`);\n  const parentExpanded = $derived($entryDraft?.expanderStates?._[parentExpandedKeyPath] ?? true);\n  const hasVariableTypes = $derived(Array.isArray(types));\n  const typeKeyPath = $derived(`${keyPath}.${typeKey}`);\n  const typeConfig = $derived(\n    hasVariableTypes ? types?.find(({ name }) => name === valueMap[typeKeyPath]) : undefined,\n  );\n  const subFields = $derived((hasVariableTypes ? typeConfig?.fields : fields) ?? []);\n  const summaryTemplate = $derived(hasVariableTypes ? typeConfig?.summary || summary : summary);\n  const addButtonDisabled = $derived(locale !== defaultLocale && i18n === 'duplicate');\n\n  /**\n   * Initialize the expander state.\n   */\n  const initializeExpanderState = () => {\n    const key = parentExpandedKeyPath;\n\n    syncExpanderStates({ [key]: getInitialExpanderState({ key, locale, collapsed }) });\n  };\n\n  /**\n   * Add the object’s subfields to the entry draft with the default values populated.\n   * @param {object} [args] Arguments.\n   * @param {string} [args.type] Variable type name. If the field doesn’t have variable types, it\n   * will be `undefined`.\n   */\n  const addFields = async ({ type } = {}) => {\n    // Avoid triggering the Proxy’s i18n duplication strategy for descendant fields\n    $i18nAutoDupEnabled = false;\n\n    if (type) {\n      Object.keys($entryDraft?.[valueStoreKey] ?? {}).forEach((_locale) => {\n        if (_locale === locale || i18n === 'duplicate') {\n          /** @type {EntryDraft} */ ($entryDraft)[valueStoreKey][_locale][typeKeyPath] = type;\n        }\n      });\n\n      // Wait until `subFields` is updated\n      await tick();\n    }\n\n    const newContent = Object.fromEntries(\n      Object.entries(getDefaultValues(subFields, locale)) //\n        .map(([_keyPath, value]) => [`${keyPath}.${_keyPath}`, value]),\n    );\n\n    const newValueMap = locale === defaultLocale ? newContent : copyDefaultLocaleValues(newContent);\n\n    Object.entries($entryDraft?.[valueStoreKey] ?? {}).forEach(([_locale, _valueMap]) => {\n      if (_locale === locale || i18n === 'duplicate') {\n        // Apply the new values while keeping the Proxy\n        /** @type {EntryDraft} */ ($entryDraft)[valueStoreKey][_locale] = Object.assign(\n          _valueMap,\n          toRaw({ ...newValueMap, ..._valueMap }),\n        );\n\n        // Disable validation\n        delete (/** @type {EntryDraft} */ ($entryDraft)[valueStoreKey][_locale][keyPath]);\n      }\n    });\n\n    $i18nAutoDupEnabled = true;\n  };\n\n  /**\n   * Remove the object’s subfields from the entry draft.\n   */\n  const removeFields = () => {\n    $i18nAutoDupEnabled = false;\n\n    Object.entries($entryDraft?.[valueStoreKey] ?? {}).forEach(([_locale, _valueMap]) => {\n      if (_locale === locale || i18n === 'duplicate') {\n        Object.keys(_valueMap).forEach((_keyPath) => {\n          if (_keyPath.startsWith(`${keyPath}.`)) {\n            /** @type {EntryDraft} */ ($entryDraft)[valueStoreKey][_locale][_keyPath] = null;\n            delete $entryDraft?.[valueStoreKey][_locale][_keyPath];\n          }\n        });\n\n        // Enable validation\n        /** @type {EntryDraft} */ ($entryDraft)[valueStoreKey][_locale][keyPath] = null;\n      }\n    });\n\n    $i18nAutoDupEnabled = true;\n  };\n\n  /**\n   * Format the summary template.\n   * @returns {string} Formatted summary.\n   */\n  const _formatSummary = () => formatSummary({ ...getFieldArgs, keyPath, locale, summaryTemplate });\n\n  onMount(() => {\n    initializeExpanderState();\n  });\n</script>\n\n{#if !hasVariableTypes && !required}\n  <Checkbox\n    label={$_('add_x', { values: { name: fieldLabel || fieldName } })}\n    checked={hasValues}\n    disabled={addButtonDisabled}\n    onChange={({ detail: { checked } }) => {\n      if (checked) {\n        addFields();\n      } else {\n        removeFields();\n      }\n    }}\n  />\n{/if}\n\n{#if hasVariableTypes && !hasValues}\n  <AddItemButton disabled={addButtonDisabled} {fieldConfig} addItem={addFields} />\n{/if}\n\n{#if (!(!required || hasVariableTypes) || hasValues) && canEdit}\n  <div\n    role=\"group\"\n    class=\"wrapper\"\n    aria-labelledby={parentExpanded ? undefined : `object-${widgetId}-summary`}\n  >\n    <ObjectHeader\n      label={hasVariableTypes ? typeConfig?.label || typeConfig?.name : ''}\n      controlId=\"object-{widgetId}-item-list\"\n      expanded={parentExpanded}\n      toggleExpanded={subFields.length\n        ? () => syncExpanderStates({ [parentExpandedKeyPath]: !parentExpanded })\n        : undefined}\n    >\n      {#snippet endContent()}\n        {#if hasVariableTypes}\n          <Button\n            size=\"small\"\n            iconic\n            disabled={addButtonDisabled}\n            aria-label={$_('remove')}\n            onclick={() => {\n              removeFields();\n            }}\n          >\n            {#snippet startIcon()}\n              <Icon name=\"close\" />\n            {/snippet}\n          </Button>\n        {/if}\n      {/snippet}\n    </ObjectHeader>\n    <div role=\"none\" class=\"item-list\" id=\"object-{widgetId}-item-list\" bind:this={wrapper}>\n      {#await waitForVisibility(wrapper) then}\n        {#if parentExpanded}\n          {#each subFields as subField (subField.name)}\n            <VisibilityObserver>\n              <FieldEditor\n                keyPath={[keyPath, subField.name].join('.')}\n                {locale}\n                fieldConfig={subField}\n              />\n            </VisibilityObserver>\n          {/each}\n        {:else}\n          {@const formattedSummary = _formatSummary()}\n          {#if formattedSummary}\n            <div role=\"none\" class=\"summary\" id=\"object-{widgetId}-summary\">\n              <TruncatedText lines={$isSmallScreen ? 2 : 1}>\n                {formattedSummary}\n              </TruncatedText>\n            </div>\n          {/if}\n        {/if}\n      {/await}\n    </div>\n  </div>\n{/if}\n\n<style lang=\"scss\">\n  .wrapper {\n    border-width: 2px;\n    border-color: var(--sui-secondary-border-color);\n    border-radius: var(--sui-control-medium-border-radius);\n\n    :global(.sui.checkbox) + & {\n      & > :global(.group) {\n        margin-top: 8px;\n      }\n    }\n  }\n\n  .summary {\n    padding: 8px;\n  }\n</style>\n","<!--\n  @component\n  Implement the preview for the Object widget.\n  @see https://decapcms.org/docs/widgets/#object\n-->\n<script>\n  import VisibilityObserver from '$lib/components/common/visibility-observer.svelte';\n  import FieldPreview from '$lib/components/contents/details/preview/field-preview.svelte';\n  import Subsection from '$lib/components/contents/details/widgets/object/subsection.svelte';\n  import { entryDraft } from '$lib/services/contents/draft';\n\n  /**\n   * @import { WidgetPreviewProps } from '$lib/types/private';\n   * @import { ObjectField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {ObjectField} fieldConfig Field configuration.\n   * @property {object | undefined} currentValue Field value.\n   */\n\n  /** @type {WidgetPreviewProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    keyPath,\n    fieldConfig,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const {\n    // Widget-specific options\n    fields,\n    types,\n    typeKey = 'type',\n  } = $derived(fieldConfig);\n  const valueMap = $derived($state.snapshot($entryDraft?.currentValues[locale]) ?? {});\n  const hasValues = $derived(\n    Object.entries(valueMap).some(\n      ([_keyPath, value]) => !!_keyPath.startsWith(`${keyPath}.`) && !!value,\n    ),\n  );\n  const hasVariableTypes = $derived(Array.isArray(types));\n  const typeKeyPath = $derived(`${keyPath}.${typeKey}`);\n  const typeConfig = $derived(\n    hasVariableTypes ? types?.find(({ name }) => name === valueMap[typeKeyPath]) : undefined,\n  );\n  const label = $derived(typeConfig ? typeConfig.label || typeConfig.name : undefined);\n  const subFields = $derived((hasVariableTypes ? typeConfig?.fields : fields) ?? []);\n</script>\n\n{#if hasValues}\n  <Subsection {label}>\n    {#each subFields as subField (subField.name)}\n      <VisibilityObserver>\n        <FieldPreview\n          keyPath={[keyPath, subField.name].join('.')}\n          {locale}\n          fieldConfig={subField}\n        />\n      </VisibilityObserver>\n    {/each}\n  </Subsection>\n{/if}\n","<script>\n  import { Checkbox, CheckboxGroup, SelectTags } from '@sveltia/ui';\n  import { getContext } from 'svelte';\n\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { updateListField } from '$lib/services/contents/draft/update/list';\n\n  /**\n   * @import { FieldEditorContext, SelectFieldSelectorProps } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string[]} currentValue Field value.\n   */\n\n  /** @type {FieldEditorContext} */\n  const { valueStoreKey = 'currentValues' } = getContext('field-editor') ?? {};\n\n  /** @type {SelectFieldSelectorProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    keyPath,\n    fieldId,\n    fieldConfig,\n    currentValue,\n    required = true,\n    readonly = false,\n    invalid = false,\n    options,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const { i18n, max, dropdown_threshold: dropdownThreshold = 5 } = $derived(fieldConfig);\n\n  /**\n   * Update the value for the list.\n   * @param {(arg: { valueList: any[], expanderStateList: any[] }) => void} manipulate See\n   * {@link updateListField}.\n   */\n  const updateList = (manipulate) => {\n    // Avoid an error while navigating pages\n    if ($entryDraft) {\n      Object.keys($state.snapshot($entryDraft[valueStoreKey]) ?? {}).forEach((_locale) => {\n        if (!(i18n !== 'duplicate' && _locale !== locale)) {\n          updateListField({ locale: _locale, valueStoreKey, keyPath, manipulate });\n        }\n      });\n    }\n  };\n\n  /**\n   * Add a value to the list.\n   * @param {string} value Value to be added.\n   */\n  const addValue = (value) => {\n    updateList(({ valueList }) => {\n      valueList.push(value);\n    });\n  };\n\n  /**\n   * Remove a value from the list.\n   * @param {string} value Value to be removed.\n   */\n  const removeValue = (value) => {\n    updateList(({ valueList }) => {\n      valueList.splice(valueList.indexOf(value), 1);\n    });\n  };\n</script>\n\n{#if options.length > dropdownThreshold}\n  <SelectTags\n    disabled={readonly}\n    {readonly}\n    {required}\n    {invalid}\n    {options}\n    values={currentValue}\n    {max}\n    aria-labelledby=\"{fieldId}-label\"\n    aria-errormessage=\"{fieldId}-error\"\n    onAddValue={({ detail: { value } }) => {\n      addValue(value);\n    }}\n    onRemoveValue={({ detail: { value } }) => {\n      removeValue(value);\n    }}\n  />\n{:else}\n  <CheckboxGroup aria-labelledby=\"{fieldId}-label\">\n    {#each options as { label, value } (value)}\n      <Checkbox\n        {label}\n        {value}\n        {readonly}\n        {required}\n        {invalid}\n        checked={currentValue.includes(value)}\n        aria-errormessage=\"{fieldId}-error\"\n        onChange={({ detail: { checked } }) => {\n          if (checked) {\n            addValue(value);\n          } else {\n            removeValue(value);\n          }\n        }}\n      />\n    {/each}\n  </CheckboxGroup>\n{/if}\n","<script>\n  import { Option, Radio, RadioGroup, Select } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  /**\n   * @import { SelectFieldSelectorProps } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} currentValue Field value.\n   */\n\n  /** @type {SelectFieldSelectorProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    fieldId,\n    fieldConfig,\n    currentValue = $bindable(),\n    required = true,\n    readonly = false,\n    invalid = false,\n    options,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const { dropdown_threshold: dropdownThreshold = 5 } = $derived(fieldConfig);\n  /** @type {string | undefined} */\n  let valueType = $state(undefined);\n\n  $effect(() => {\n    if (!valueType) {\n      valueType = options[0]?.value !== undefined ? typeof options[0]?.value : 'string';\n    }\n  });\n\n  $effect(() => {\n    // Allow to deselect an option if the field is optional\n    if (!required && !options.some(({ value }) => !value)) {\n      options = [\n        {\n          label: $_('unselected_option'),\n          value: valueType === 'number' ? null : '',\n          searchValue: '',\n        },\n        ...options,\n      ];\n    }\n  });\n</script>\n\n{#if options.length > dropdownThreshold}\n  <Select\n    bind:value={currentValue}\n    {readonly}\n    {required}\n    {invalid}\n    aria-labelledby=\"{fieldId}-label\"\n    aria-errormessage=\"{fieldId}-error\"\n  >\n    {#each options as { label, value, searchValue } (value)}\n      <Option {label} {value} {valueType} {searchValue} selected={value === currentValue} wrap />\n    {/each}\n  </Select>\n{:else}\n  <RadioGroup\n    {readonly}\n    {required}\n    {invalid}\n    aria-labelledby=\"{fieldId}-label\"\n    aria-errormessage=\"{fieldId}-error\"\n    onChange={({ detail: { value } }) => {\n      currentValue = value;\n    }}\n  >\n    {#each options as { label, value } (value)}\n      <Radio {label} {value} {valueType} checked={value === currentValue} />\n    {/each}\n  </RadioGroup>\n{/if}\n","<!--\n  @component\n  Implement the editor for the Select widget.\n  @see https://decapcms.org/docs/widgets/#select\n-->\n<script>\n  import { isObject } from '@sveltia/utils/object';\n  import { compare } from '@sveltia/utils/string';\n\n  import SelectMultiple from '$lib/components/contents/details/widgets/select/select-multiple.svelte';\n  import SelectSingle from '$lib/components/contents/details/widgets/select/select-single.svelte';\n\n  /**\n   * @import { SelectFieldSelectorOption, WidgetEditorProps } from '$lib/types/private';\n   * @import { SelectField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {SelectField} fieldConfig Field configuration.\n   * @property {any} currentValue Field value.\n   * @property {boolean} [sortOptions] Whether to sort the options by label.\n   */\n\n  /** @type {WidgetEditorProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    keyPath,\n    fieldId,\n    fieldConfig,\n    currentValue = $bindable(),\n    required = true,\n    readonly = false,\n    invalid = false,\n    sortOptions = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const {\n    // Widget-specific options\n    options: fieldOptions,\n    multiple,\n  } = $derived(fieldConfig);\n  const Select = $derived(multiple ? SelectMultiple : SelectSingle);\n  const options = $derived.by(() => {\n    const _options = fieldOptions.map(\n      (option) =>\n        /** @type {SelectFieldSelectorOption} */ (\n          isObject(option)\n            ? /** @type {{ label: string, value: string }} */ (option)\n            : { label: option, value: option }\n        ),\n    );\n\n    if (sortOptions) {\n      _options.sort((a, b) => compare(a.label, b.label));\n    }\n\n    return _options;\n  });\n</script>\n\n{#key JSON.stringify(options)}\n  <Select\n    {locale}\n    {keyPath}\n    {fieldId}\n    {fieldConfig}\n    bind:currentValue\n    {readonly}\n    {required}\n    {invalid}\n    {options}\n  />\n{/key}\n","/**\n * List of legacy HTML named character references that don’t need a trailing semicolon.\n *\n * @type {Array<string>}\n */\nexport const characterEntitiesLegacy = [\n  'AElig',\n  'AMP',\n  'Aacute',\n  'Acirc',\n  'Agrave',\n  'Aring',\n  'Atilde',\n  'Auml',\n  'COPY',\n  'Ccedil',\n  'ETH',\n  'Eacute',\n  'Ecirc',\n  'Egrave',\n  'Euml',\n  'GT',\n  'Iacute',\n  'Icirc',\n  'Igrave',\n  'Iuml',\n  'LT',\n  'Ntilde',\n  'Oacute',\n  'Ocirc',\n  'Ograve',\n  'Oslash',\n  'Otilde',\n  'Ouml',\n  'QUOT',\n  'REG',\n  'THORN',\n  'Uacute',\n  'Ucirc',\n  'Ugrave',\n  'Uuml',\n  'Yacute',\n  'aacute',\n  'acirc',\n  'acute',\n  'aelig',\n  'agrave',\n  'amp',\n  'aring',\n  'atilde',\n  'auml',\n  'brvbar',\n  'ccedil',\n  'cedil',\n  'cent',\n  'copy',\n  'curren',\n  'deg',\n  'divide',\n  'eacute',\n  'ecirc',\n  'egrave',\n  'eth',\n  'euml',\n  'frac12',\n  'frac14',\n  'frac34',\n  'gt',\n  'iacute',\n  'icirc',\n  'iexcl',\n  'igrave',\n  'iquest',\n  'iuml',\n  'laquo',\n  'lt',\n  'macr',\n  'micro',\n  'middot',\n  'nbsp',\n  'not',\n  'ntilde',\n  'oacute',\n  'ocirc',\n  'ograve',\n  'ordf',\n  'ordm',\n  'oslash',\n  'otilde',\n  'ouml',\n  'para',\n  'plusmn',\n  'pound',\n  'quot',\n  'raquo',\n  'reg',\n  'sect',\n  'shy',\n  'sup1',\n  'sup2',\n  'sup3',\n  'szlig',\n  'thorn',\n  'times',\n  'uacute',\n  'ucirc',\n  'ugrave',\n  'uml',\n  'uuml',\n  'yacute',\n  'yen',\n  'yuml'\n]\n","/**\n * Map of invalid numeric character references to their replacements, according to HTML.\n *\n * @type {Record<number, string>}\n */\nexport const characterReferenceInvalid = {\n  0: '�',\n  128: '€',\n  130: '‚',\n  131: 'ƒ',\n  132: '„',\n  133: '…',\n  134: '†',\n  135: '‡',\n  136: 'ˆ',\n  137: '‰',\n  138: 'Š',\n  139: '‹',\n  140: 'Œ',\n  142: 'Ž',\n  145: '‘',\n  146: '’',\n  147: '“',\n  148: '”',\n  149: '•',\n  150: '–',\n  151: '—',\n  152: '˜',\n  153: '™',\n  154: 'š',\n  155: '›',\n  156: 'œ',\n  158: 'ž',\n  159: 'Ÿ'\n}\n","/**\n * Check if the given character code, or the character code at the first\n * character, is decimal.\n *\n * @param {string|number} character\n * @returns {boolean} Whether `character` is a decimal\n */\nexport function isDecimal(character) {\n  const code =\n    typeof character === 'string' ? character.charCodeAt(0) : character\n\n  return code >= 48 && code <= 57 /* 0-9 */\n}\n","/**\n * Check if the given character code, or the character code at the first\n * character, is hexadecimal.\n *\n * @param {string|number} character\n * @returns {boolean} Whether `character` is hexadecimal\n */\nexport function isHexadecimal(character) {\n  const code =\n    typeof character === 'string' ? character.charCodeAt(0) : character\n\n  return (\n    (code >= 97 /* a */ && code <= 102) /* z */ ||\n    (code >= 65 /* A */ && code <= 70) /* Z */ ||\n    (code >= 48 /* A */ && code <= 57) /* Z */\n  )\n}\n","/**\n * Check if the given character code, or the character code at the first\n * character, is alphabetical.\n *\n * @param {string|number} character\n * @returns {boolean} Whether `character` is alphabetical.\n */\nexport function isAlphabetical(character) {\n  const code =\n    typeof character === 'string' ? character.charCodeAt(0) : character\n\n  return (\n    (code >= 97 && code <= 122) /* a-z */ ||\n    (code >= 65 && code <= 90) /* A-Z */\n  )\n}\n","import {isAlphabetical} from 'is-alphabetical'\nimport {isDecimal} from 'is-decimal'\n\n/**\n * Check if the given character code, or the character code at the first\n * character, is alphanumerical.\n *\n * @param {string|number} character\n * @returns {boolean} Whether `character` is alphanumerical.\n */\nexport function isAlphanumerical(character) {\n  return isAlphabetical(character) || isDecimal(character)\n}\n","/// <reference lib=\"dom\" />\n\n/* global document */\n\nconst element = document.createElement('i')\n\n/**\n * @param {string} value\n * @returns {string | false}\n */\nexport function decodeNamedCharacterReference(value) {\n  const characterReference = '&' + value + ';'\n  element.innerHTML = characterReference\n  const character = element.textContent\n\n  // Some named character references do not require the closing semicolon\n  // (`&not`, for instance), which leads to situations where parsing the assumed\n  // named reference of `&notit;` will result in the string `¬it;`.\n  // When we encounter a trailing semicolon after parsing, and the character\n  // reference to decode was not a semicolon (`&semi;`), we can assume that the\n  // matching was not complete.\n  if (\n    // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n    // yield `null`.\n    character.charCodeAt(character.length - 1) === 59 /* `;` */ &&\n    value !== 'semi'\n  ) {\n    return false\n  }\n\n  // If the decoded string is equal to the input, the character reference was\n  // not valid.\n  // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n  // yield `null`.\n  return character === characterReference ? false : character\n}\n","/**\n * @import {Point} from 'unist'\n * @import {Options} from '../index.js'\n */\n\nimport {characterEntitiesLegacy} from 'character-entities-legacy'\nimport {characterReferenceInvalid} from 'character-reference-invalid'\nimport {isDecimal} from 'is-decimal'\nimport {isHexadecimal} from 'is-hexadecimal'\nimport {isAlphanumerical} from 'is-alphanumerical'\nimport {decodeNamedCharacterReference} from 'decode-named-character-reference'\n\n// Warning messages.\nconst messages = [\n  '',\n  /* 1: Non terminated (named) */\n  'Named character references must be terminated by a semicolon',\n  /* 2: Non terminated (numeric) */\n  'Numeric character references must be terminated by a semicolon',\n  /* 3: Empty (named) */\n  'Named character references cannot be empty',\n  /* 4: Empty (numeric) */\n  'Numeric character references cannot be empty',\n  /* 5: Unknown (named) */\n  'Named character references must be known',\n  /* 6: Disallowed (numeric) */\n  'Numeric character references cannot be disallowed',\n  /* 7: Prohibited (numeric) */\n  'Numeric character references cannot be outside the permissible Unicode range'\n]\n\n/**\n * Parse HTML character references.\n *\n * @param {string} value\n * @param {Readonly<Options> | null | undefined} [options]\n */\nexport function parseEntities(value, options) {\n  const settings = options || {}\n  const additional =\n    typeof settings.additional === 'string'\n      ? settings.additional.charCodeAt(0)\n      : settings.additional\n  /** @type {Array<string>} */\n  const result = []\n  let index = 0\n  let lines = -1\n  let queue = ''\n  /** @type {Point | undefined} */\n  let point\n  /** @type {Array<number>|undefined} */\n  let indent\n\n  if (settings.position) {\n    if ('start' in settings.position || 'indent' in settings.position) {\n      // @ts-expect-error: points don’t have indent.\n      indent = settings.position.indent\n      // @ts-expect-error: points don’t have indent.\n      point = settings.position.start\n    } else {\n      point = settings.position\n    }\n  }\n\n  let line = (point ? point.line : 0) || 1\n  let column = (point ? point.column : 0) || 1\n\n  // Cache the current point.\n  let previous = now()\n  /** @type {number|undefined} */\n  let character\n\n  // Ensure the algorithm walks over the first character (inclusive).\n  index--\n\n  while (++index <= value.length) {\n    // If the previous character was a newline.\n    if (character === 10 /* `\\n` */) {\n      column = (indent ? indent[lines] : 0) || 1\n    }\n\n    character = value.charCodeAt(index)\n\n    if (character === 38 /* `&` */) {\n      const following = value.charCodeAt(index + 1)\n\n      // The behavior depends on the identity of the next character.\n      if (\n        following === 9 /* `\\t` */ ||\n        following === 10 /* `\\n` */ ||\n        following === 12 /* `\\f` */ ||\n        following === 32 /* ` ` */ ||\n        following === 38 /* `&` */ ||\n        following === 60 /* `<` */ ||\n        Number.isNaN(following) ||\n        (additional && following === additional)\n      ) {\n        // Not a character reference.\n        // No characters are consumed, and nothing is returned.\n        // This is not an error, either.\n        queue += String.fromCharCode(character)\n        column++\n        continue\n      }\n\n      const start = index + 1\n      let begin = start\n      let end = start\n      /** @type {string} */\n      let type\n\n      if (following === 35 /* `#` */) {\n        // Numerical reference.\n        end = ++begin\n\n        // The behavior further depends on the next character.\n        const following = value.charCodeAt(end)\n\n        if (following === 88 /* `X` */ || following === 120 /* `x` */) {\n          // ASCII hexadecimal digits.\n          type = 'hexadecimal'\n          end = ++begin\n        } else {\n          // ASCII decimal digits.\n          type = 'decimal'\n        }\n      } else {\n        // Named reference.\n        type = 'named'\n      }\n\n      let characterReferenceCharacters = ''\n      let characterReference = ''\n      let characters = ''\n      // Each type of character reference accepts different characters.\n      // This test is used to detect whether a reference has ended (as the semicolon\n      // is not strictly needed).\n      const test =\n        type === 'named'\n          ? isAlphanumerical\n          : type === 'decimal'\n            ? isDecimal\n            : isHexadecimal\n\n      end--\n\n      while (++end <= value.length) {\n        const following = value.charCodeAt(end)\n\n        if (!test(following)) {\n          break\n        }\n\n        characters += String.fromCharCode(following)\n\n        // Check if we can match a legacy named reference.\n        // If so, we cache that as the last viable named reference.\n        // This ensures we do not need to walk backwards later.\n        if (type === 'named' && characterEntitiesLegacy.includes(characters)) {\n          characterReferenceCharacters = characters\n          // @ts-expect-error: always able to decode.\n          characterReference = decodeNamedCharacterReference(characters)\n        }\n      }\n\n      let terminated = value.charCodeAt(end) === 59 /* `;` */\n\n      if (terminated) {\n        end++\n\n        const namedReference =\n          type === 'named' ? decodeNamedCharacterReference(characters) : false\n\n        if (namedReference) {\n          characterReferenceCharacters = characters\n          characterReference = namedReference\n        }\n      }\n\n      let diff = 1 + end - start\n      let reference = ''\n\n      if (!terminated && settings.nonTerminated === false) {\n        // Empty.\n      } else if (!characters) {\n        // An empty (possible) reference is valid, unless it’s numeric (thus an\n        // ampersand followed by an octothorp).\n        if (type !== 'named') {\n          warning(4 /* Empty (numeric) */, diff)\n        }\n      } else if (type === 'named') {\n        // An ampersand followed by anything unknown, and not terminated, is\n        // invalid.\n        if (terminated && !characterReference) {\n          warning(5 /* Unknown (named) */, 1)\n        } else {\n          // If there’s something after an named reference which is not known,\n          // cap the reference.\n          if (characterReferenceCharacters !== characters) {\n            end = begin + characterReferenceCharacters.length\n            diff = 1 + end - begin\n            terminated = false\n          }\n\n          // If the reference is not terminated, warn.\n          if (!terminated) {\n            const reason = characterReferenceCharacters\n              ? 1 /* Non terminated (named) */\n              : 3 /* Empty (named) */\n\n            if (settings.attribute) {\n              const following = value.charCodeAt(end)\n\n              if (following === 61 /* `=` */) {\n                warning(reason, diff)\n                characterReference = ''\n              } else if (isAlphanumerical(following)) {\n                characterReference = ''\n              } else {\n                warning(reason, diff)\n              }\n            } else {\n              warning(reason, diff)\n            }\n          }\n        }\n\n        reference = characterReference\n      } else {\n        if (!terminated) {\n          // All nonterminated numeric references are not rendered, and emit a\n          // warning.\n          warning(2 /* Non terminated (numeric) */, diff)\n        }\n\n        // When terminated and numerical, parse as either hexadecimal or\n        // decimal.\n        let referenceCode = Number.parseInt(\n          characters,\n          type === 'hexadecimal' ? 16 : 10\n        )\n\n        // Emit a warning when the parsed number is prohibited, and replace with\n        // replacement character.\n        if (prohibited(referenceCode)) {\n          warning(7 /* Prohibited (numeric) */, diff)\n          reference = String.fromCharCode(65533 /* `�` */)\n        } else if (referenceCode in characterReferenceInvalid) {\n          // Emit a warning when the parsed number is disallowed, and replace by\n          // an alternative.\n          warning(6 /* Disallowed (numeric) */, diff)\n          reference = characterReferenceInvalid[referenceCode]\n        } else {\n          // Parse the number.\n          let output = ''\n\n          // Emit a warning when the parsed number should not be used.\n          if (disallowed(referenceCode)) {\n            warning(6 /* Disallowed (numeric) */, diff)\n          }\n\n          // Serialize the number.\n          if (referenceCode > 0xffff) {\n            referenceCode -= 0x10000\n            output += String.fromCharCode(\n              (referenceCode >>> (10 & 0x3ff)) | 0xd800\n            )\n            referenceCode = 0xdc00 | (referenceCode & 0x3ff)\n          }\n\n          reference = output + String.fromCharCode(referenceCode)\n        }\n      }\n\n      // Found it!\n      // First eat the queued characters as normal text, then eat a reference.\n      if (reference) {\n        flush()\n\n        previous = now()\n        index = end - 1\n        column += end - start + 1\n        result.push(reference)\n        const next = now()\n        next.offset++\n\n        if (settings.reference) {\n          settings.reference.call(\n            settings.referenceContext || undefined,\n            reference,\n            {start: previous, end: next},\n            value.slice(start - 1, end)\n          )\n        }\n\n        previous = next\n      } else {\n        // If we could not find a reference, queue the checked characters (as\n        // normal characters), and move the pointer to their end.\n        // This is possible because we can be certain neither newlines nor\n        // ampersands are included.\n        characters = value.slice(start - 1, end)\n        queue += characters\n        column += characters.length\n        index = end - 1\n      }\n    } else {\n      // Handle anything other than an ampersand, including newlines and EOF.\n      if (character === 10 /* `\\n` */) {\n        line++\n        lines++\n        column = 0\n      }\n\n      if (Number.isNaN(character)) {\n        flush()\n      } else {\n        queue += String.fromCharCode(character)\n        column++\n      }\n    }\n  }\n\n  // Return the reduced nodes.\n  return result.join('')\n\n  // Get current position.\n  function now() {\n    return {\n      line,\n      column,\n      offset: index + ((point ? point.offset : 0) || 0)\n    }\n  }\n\n  /**\n   * Handle the warning.\n   *\n   * @param {1|2|3|4|5|6|7} code\n   * @param {number} offset\n   */\n  function warning(code, offset) {\n    /** @type {ReturnType<now>} */\n    let position\n\n    if (settings.warning) {\n      position = now()\n      position.column += offset\n      position.offset += offset\n\n      settings.warning.call(\n        settings.warningContext || undefined,\n        messages[code],\n        position,\n        code\n      )\n    }\n  }\n\n  /**\n   * Flush `queue` (normal text).\n   * Macro invoked before each reference and at the end of `value`.\n   * Does nothing when `queue` is empty.\n   */\n  function flush() {\n    if (queue) {\n      result.push(queue)\n\n      if (settings.text) {\n        settings.text.call(settings.textContext || undefined, queue, {\n          start: previous,\n          end: now()\n        })\n      }\n\n      queue = ''\n    }\n  }\n}\n\n/**\n * Check if `character` is outside the permissible unicode range.\n *\n * @param {number} code\n * @returns {boolean}\n */\nfunction prohibited(code) {\n  return (code >= 0xd800 && code <= 0xdfff) || code > 0x10ffff\n}\n\n/**\n * Check if `character` is disallowed.\n *\n * @param {number} code\n * @returns {boolean}\n */\nfunction disallowed(code) {\n  return (\n    (code >= 0x0001 && code <= 0x0008) ||\n    code === 0x000b ||\n    (code >= 0x000d && code <= 0x001f) ||\n    (code >= 0x007f && code <= 0x009f) ||\n    (code >= 0xfdd0 && code <= 0xfdef) ||\n    (code & 0xffff) === 0xffff ||\n    (code & 0xffff) === 0xfffe\n  )\n}\n","import { getDateTimeParts } from '@sveltia/utils/datetime';\nimport { stripSlashes } from '@sveltia/utils/string';\nimport { sanitize } from 'isomorphic-dompurify';\nimport { parseInline } from 'marked';\nimport { parseEntities } from 'parse-entities';\n\nimport {\n  applyTransformations,\n  DATE_TRANSFORMATION_REGEX,\n  TERNARY_TRANSFORMATION_REGEX,\n} from '$lib/services/common/transformations';\nimport { getIndexFile, isCollectionIndexFile } from '$lib/services/contents/collection/index-file';\nimport { getField, getFieldDisplayValue } from '$lib/services/contents/entry/fields';\n\n/**\n * @import {\n * CommitAuthor,\n * Entry,\n * EntryCollection,\n * FlattenedEntryContent,\n * InternalCollection,\n * InternalLocaleCode,\n * RawEntryContent,\n * } from '$lib/types/private';\n */\n\n/**\n * @typedef {object} ReplacerSubContext\n * @property {string} slug Entry slug.\n * @property {string} entryPath Entry path.\n * @property {string | undefined} basePath Base path for the entry.\n * @property {Date | undefined} commitDate Commit date.\n * @property {CommitAuthor | undefined} commitAuthor Commit author.\n */\n\n/**\n * @typedef {object} ReplaceContext\n * @property {FlattenedEntryContent} content Entry content.\n * @property {string} collectionName Collection name.\n * @property {ReplacerSubContext} replaceSubContext Context for the `replaceSub` function.\n * @property {InternalLocaleCode} defaultLocale Default locale.\n */\n\n/**\n * Parse the given entry summary as Markdown and sanitize HTML with a few exceptions if the Markdown\n * option is enabled. Also, parse HTML character references (entities).\n * @param {string} str Original string.\n * @param {object} [options] Options.\n * @param {boolean} [options.allowMarkdown] Whether to allow Markdown and return HTML string.\n * @returns {string} Parsed string.\n */\nexport const sanitizeEntrySummary = (str, { allowMarkdown = false } = {}) => {\n  str = /** @type {string} */ (parseInline(str));\n  str = sanitize(str, { ALLOWED_TAGS: allowMarkdown ? ['strong', 'em', 'code'] : [] });\n  str = parseEntities(str);\n\n  return str.trim();\n};\n\n/**\n * Determine an entry summary from the given content. Fields other than `title` should be defined\n * with the `identifier_field` collection option as per the Netlify/Decap CMS document. We also look\n * for the `name` and `label` properties as well as a header in the Markdown `body` as a fallback.\n * @param {FlattenedEntryContent | RawEntryContent} content Content.\n * @param {object} options Options.\n * @param {string} [options.identifierField] Field name to identify the title.\n * @param {boolean} [options.useBody] Whether to fall back to a header in the Markdown `body`.\n * @returns {string} Entry summary. Can be an empty string if it cannot be determined.\n * @see https://decapcms.org/docs/configuration-options/#identifier_field\n */\nexport const getEntrySummaryFromContent = (\n  content,\n  { identifierField = 'title', useBody = true } = {},\n) => {\n  const idField = [identifierField, 'title', 'name', 'label'].find(\n    (fieldName) => typeof content[fieldName] === 'string' && !!content[fieldName].trim(),\n  );\n\n  if (idField) {\n    return content[idField].trim();\n  }\n\n  // Find a header in Markdown, excluding an anchor suffix\n  // https://vitepress.dev/guide/markdown#custom-anchors\n  if (useBody && typeof content.body === 'string') {\n    return content.body.match(/^#+\\s+(?<header>.+?)(?:\\s+\\{#.+?\\})?\\s*$/m)?.groups?.header ?? '';\n  }\n\n  return '';\n};\n\n/**\n * Replacer subroutine.\n * @param {string} tag Field name or one of special tags.\n * @param {ReplacerSubContext} context Context.\n * @returns {string | Date | undefined} Replaced value or `undefined` if the tag is not recognized.\n */\nexport const replaceSub = (tag, context) => {\n  const { slug, entryPath, basePath, commitDate, commitAuthor } = context;\n\n  if (tag === 'slug') {\n    return slug;\n  }\n\n  if (tag === 'dirname') {\n    return stripSlashes(entryPath.replace(/[^/]+$/, '').replace(basePath ?? '', ''));\n  }\n\n  if (tag === 'filename') {\n    return /** @type {string} */ (entryPath.split('/').pop()).split('.').shift();\n  }\n\n  if (tag === 'extension') {\n    return /** @type {string} */ (entryPath.split('/').pop()).split('.').pop();\n  }\n\n  if (tag === 'commit_date') {\n    return commitDate ?? '';\n  }\n\n  if (tag === 'commit_author') {\n    return commitAuthor?.name || commitAuthor?.login || commitAuthor?.email;\n  }\n\n  return undefined;\n};\n\n/**\n * Replacer.\n * @param {string} placeholder Field name or one of special tags. May contain transformations.\n * @param {ReplaceContext} context Context.\n * @returns {string} Replaced string.\n */\nexport const replace = (placeholder, context) => {\n  const { content: valueMap, collectionName, replaceSubContext, defaultLocale } = context;\n  const [tag, ...transformations] = placeholder.split(/\\s*\\|\\s*/);\n  const keyPath = tag.replace(/^fields\\./, '');\n  const getFieldArgs = { collectionName, valueMap, keyPath };\n  let value = replaceSub(tag, replaceSubContext);\n\n  if (value === undefined) {\n    // If the `date` transformation is defined, e.g. `{{publish_date | date('YYYY-MM')}}`, use the\n    // raw field value from the entry content. Otherwise, use the field display value. This is to\n    // avoid applying the transformation to the display value, which leads to unexpected results.\n    // Also use raw value for ternary transformations to preserve boolean truthiness.\n    value = transformations.some(\n      (t) => DATE_TRANSFORMATION_REGEX.test(t) || TERNARY_TRANSFORMATION_REGEX.test(t),\n    )\n      ? valueMap[keyPath]\n      : getFieldDisplayValue({ ...getFieldArgs, locale: defaultLocale });\n  }\n\n  if (value === undefined) {\n    return '';\n  }\n\n  if (value instanceof Date && !transformations.length) {\n    const { year, month, day } = getDateTimeParts({ date: value });\n\n    return `${year}-${month}-${day}`;\n  }\n\n  if (transformations.length) {\n    value = applyTransformations({\n      fieldConfig: getField({ ...getFieldArgs }),\n      value,\n      transformations,\n    });\n  }\n\n  return String(value);\n};\n\n/**\n * Get the given entry’s summary that can be displayed in the entry list and other places. Format it\n * with the summary template if necessary, or simply use the `title` or similar field in the entry.\n * @param {InternalCollection} collection Entry’s collection.\n * @param {Entry} entry Entry.\n * @param {object} [options] Options.\n * @param {InternalLocaleCode} [options.locale] Target locale. The default locale is used if\n * omitted.\n * @param {boolean} [options.useTemplate] Whether to use the collection’s `summary` template if\n * available.\n * @param {boolean} [options.allowMarkdown] Whether to allow Markdown and return HTML string.\n * @returns {string} Formatted entry summary.\n * @see https://decapcms.org/docs/configuration-options/#summary\n */\nexport const getEntrySummary = (\n  collection,\n  entry,\n  { locale, useTemplate = false, allowMarkdown = false } = {},\n) => {\n  if (isCollectionIndexFile(collection, entry)) {\n    return /** @type {string} */ (getIndexFile(collection)?.label);\n  }\n\n  const {\n    name: collectionName,\n    identifier_field: identifierField = 'title',\n    summary: summaryTemplate,\n    _i18n: { defaultLocale },\n  } = collection;\n\n  const basePath =\n    collection._type === 'entry'\n      ? /** @type {EntryCollection} */ (collection)._file.basePath\n      : undefined;\n\n  const { locales, slug, commitDate, commitAuthor } = entry;\n\n  const { content = {}, path: entryPath = '' } =\n    locales[locale ?? defaultLocale] ?? Object.values(locales)[0] ?? {};\n\n  if (!useTemplate || !summaryTemplate) {\n    return sanitizeEntrySummary(\n      getEntrySummaryFromContent(content, { identifierField }) || slug.replaceAll('-', ' '),\n      { allowMarkdown },\n    );\n  }\n\n  /** @type {ReplaceContext} */\n  const replaceContext = {\n    content,\n    collectionName,\n    replaceSubContext: { slug, entryPath, commitDate, commitAuthor, basePath },\n    defaultLocale,\n  };\n\n  return sanitizeEntrySummary(\n    summaryTemplate.replace(/{{(.+?)}}/g, (_match, placeholder) =>\n      replace(placeholder, replaceContext),\n    ),\n    { allowMarkdown },\n  );\n};\n","import { unique } from '@sveltia/utils/array';\nimport { compare, escapeRegExp } from '@sveltia/utils/string';\n\nimport { getCollection } from '$lib/services/contents/collection';\nimport { getEntriesByCollection } from '$lib/services/contents/collection/entries';\nimport { isCollectionIndexFile } from '$lib/services/contents/collection/index-file';\nimport { getField, getFieldDisplayValue } from '$lib/services/contents/entry/fields';\nimport { getEntrySummaryFromContent } from '$lib/services/contents/entry/summary';\n\n/**\n * @import {\n * Entry,\n * FlattenedEntryContent,\n * GetFieldArgs,\n * InternalCollection,\n * InternalLocaleCode,\n * } from '$lib/types/private';\n * @import {\n * Field,\n * FieldKeyPath,\n * ListField,\n * RelationField,\n * RelationFieldFilterOptions,\n * } from '$lib/types/public';\n */\n\n/**\n * @typedef {{ label: string, value: any, searchValue: string }} RelationOption\n */\n\n/**\n * @typedef {object} ReplacementContext\n * @property {string} slug The slug of the entry.\n * @property {InternalLocaleCode} locale The current locale.\n * @property {(keyPath: FieldKeyPath, _locale?: InternalLocaleCode) => string} getDisplayValue\n * Function to get the display value of a field.\n */\n\n/**\n * @typedef {object} FallbackContext\n * @property {FlattenedEntryContent} content Content of the entry.\n * @property {Record<InternalLocaleCode, FlattenedEntryContent>} locales Locales of the entry.\n * @property {InternalLocaleCode} defaultLocale Default locale of the entry.\n * @property {FieldKeyPath} identifierField Identifier field for the entry.\n */\n\n/**\n * @typedef {object} TemplateStrings\n * @property {string} _valueField Normalized value field template.\n * @property {string} _displayField Normalized display field template.\n * @property {string} _searchField Normalized search field template.\n * @property {string[]} allFieldNames All field names extracted from templates.\n * @property {boolean} hasListFields Whether any field names include a list wildcard (*).\n */\n\n/**\n * @type {Map<string, RelationOption[]>}\n */\nexport const optionCacheMap = new Map();\n\n/**\n * Enclose the given field name in brackets if it doesn’t contain any brackets.\n * @param {string} fieldName Field name e.g. `{{name.first}}` or `name.first`.\n * @returns {string} Bracketed field name, e.g. `{{name.first}}`.\n */\nconst normalizeFieldName = (fieldName) => {\n  if (/{{.+?}}/.test(fieldName)) {\n    return fieldName;\n  }\n\n  if (fieldName === 'slug') {\n    // Avoid confusion with `{{slug}}`, which is the entry slug, not the `slug` field\n    return '{{fields.slug}}';\n  }\n\n  return `{{${fieldName}}}`;\n};\n\n/**\n * Determine the type of list field based on the field configuration.\n * @param {Field | undefined} fieldConfig Field configuration object.\n * @returns {{ isSimpleListField: boolean, isSingleSubfieldListField: boolean }} Object with boolean\n * flags for different list field types.\n */\nconst getListFieldTypes = (fieldConfig) => {\n  if (!fieldConfig) {\n    return {\n      isSimpleListField: false,\n      isSingleSubfieldListField: false,\n    };\n  }\n\n  const isListWidget = fieldConfig.widget === 'list';\n  const hasField = isListWidget ? !!(/** @type {ListField} */ (fieldConfig).field) : false;\n  const hasFields = isListWidget ? !!(/** @type {ListField} */ (fieldConfig).fields) : false;\n  const hasTypes = isListWidget ? !!(/** @type {ListField} */ (fieldConfig).types) : false;\n\n  return {\n    isSimpleListField: isListWidget && !hasField && !hasFields && !hasTypes,\n    isSingleSubfieldListField: isListWidget && hasField && !hasFields && !hasTypes,\n  };\n};\n\n/**\n * Get the replacement value for a field name based on standard field types.\n * @param {string} fieldName The field name to get replacement for.\n * @param {ReplacementContext} context Context object containing `slug`, `locale`, and\n * `getDisplayValue` function.\n * @param {FallbackContext} fallbackContext Fallback context for additional content.\n * @returns {string} The replacement value.\n */\nconst getFieldReplacement = (fieldName, context, fallbackContext) => {\n  const { slug, locale, getDisplayValue } = context;\n  const { content, locales, defaultLocale, identifierField } = fallbackContext;\n\n  if (fieldName === 'slug') {\n    return slug;\n  }\n\n  if (fieldName === 'locale') {\n    return locale;\n  }\n\n  const keyPath = fieldName.replace(/^fields\\./, '');\n\n  return (\n    getDisplayValue(keyPath) ||\n    getDisplayValue(keyPath, defaultLocale) ||\n    getEntrySummaryFromContent(content, { identifierField }) ||\n    getEntrySummaryFromContent(locales[defaultLocale]?.content || {}, {\n      identifierField,\n    }) ||\n    slug\n  );\n};\n\n/**\n * Replace all template tags in the given strings with actual values.\n * @param {RelationOption} templates Object containing `label`, `value`, and `searchValue`\n * templates.\n * @param {string[]} fieldNames Array of field names to replace.\n * @param {ReplacementContext} context Context object for replacements.\n * @param {FallbackContext} fallbackContext Fallback context for additional content.\n * @returns {RelationOption} Object with replaced `label`, `value`, and `searchValue`.\n */\nconst replaceTemplateFields = (templates, fieldNames, context, fallbackContext) => {\n  let { label, value, searchValue } = templates;\n\n  fieldNames.forEach((fieldName) => {\n    const replacement = getFieldReplacement(fieldName, context, fallbackContext);\n\n    label = label.replaceAll(`{{${fieldName}}}`, replacement);\n    value = value.replaceAll(`{{${fieldName}}}`, replacement);\n    searchValue = searchValue?.replaceAll(`{{${fieldName}}}`, replacement) ?? '';\n  });\n\n  return { label, value, searchValue };\n};\n\n/**\n * Extract field names from template strings.\n * @param {string} template Template string with field names in {{}} brackets.\n * @returns {string[]} Array of field names.\n */\nconst extractFieldNames = (template) => [...template.matchAll(/{{(.+?)}}/g)].map((m) => m[1]);\n\n/**\n * Normalize and prepare field templates for processing.\n * @param {RelationField} fieldConfig Field configuration.\n * @param {string} identifierField Default identifier field.\n * @returns {TemplateStrings} Normalized field templates.\n */\nconst prepareFieldTemplates = (fieldConfig, identifierField) => {\n  /**\n   * @example 'userId'\n   * @example 'name.first'\n   * @example 'cities.*.id'\n   * @example '{{cities.*.id}}'\n   * @example 'slug' (`slug` field)\n   * @example '{{slug}}' (entry slug)\n   * @example '{{locale}}/{{slug}}'\n   * @example '{{fields.slug}}' (not mentioned in the Netlify/Decap CMS doc but Sveltia CMS supports\n   * the `fields.` prefix for compatibility with other config options)\n   */\n  const valueField = fieldConfig.value_field;\n  /**\n   * @example ['userId']\n   * @example ['name.first'] (nested)\n   * @example ['cities.*.id', 'cities.*.name'] (with wildcard, multiple)\n   * @example ['{{twitterHandle}} - {{followerCount}}'] (template)\n   */\n  const displayFields = fieldConfig.display_fields ?? [valueField ?? `{{${identifierField}}}`];\n  /**\n   * The format is the same as {@link displayFields}.\n   */\n  const searchFields = fieldConfig.search_fields ?? displayFields;\n  /**\n   * Canonical, templatized value field.\n   * @example '{{name.first}}'\n   * @example '{{route}}#{{sections.*.name}}'\n   */\n  const _valueField = normalizeFieldName(valueField ?? '{{slug}}');\n  /**\n   * Canonical, templatized display field.\n   * @example '{{twitterHandle}} {{followerCount}}'\n   * @example '{{sections.*.name}}'\n   * @example '{{route}}: {{sections.*.name}} ({{sections.*.id}})'\n   */\n  const _displayField = displayFields.map(normalizeFieldName).join(' ');\n  /**\n   * Canonical, templatized search field.\n   */\n  const _searchField = searchFields.map(normalizeFieldName).join(' ');\n\n  const allFieldNames = unique([\n    ...extractFieldNames(_displayField),\n    ...extractFieldNames(_valueField),\n    ...extractFieldNames(_searchField),\n  ]);\n\n  return {\n    _valueField,\n    _displayField,\n    _searchField,\n    allFieldNames,\n    hasListFields: allFieldNames.some((name) => name.includes('*')),\n  };\n};\n\n/**\n * Filter entries based on file name and entry filters.\n * @param {Entry[]} refEntries Reference entries.\n * @param {InternalLocaleCode} locale Current locale.\n * @param {string} [fileName] File name to filter by.\n * @param {RelationFieldFilterOptions[]} [entryFilters] Entry filters to apply.\n * @returns {{ refEntry: Entry, content: FlattenedEntryContent }[]} Filtered entries with content.\n */\nconst filterAndPrepareEntries = (refEntries, locale, fileName = undefined, entryFilters = []) =>\n  refEntries\n    .filter((refEntry) => !fileName || fileName === refEntry.slug)\n    .map((refEntry) => {\n      // Fall back to the default locale if needed\n      const { content } = refEntry.locales[locale] ?? refEntry.locales._default ?? {};\n\n      return {\n        refEntry,\n        hasContent: !!content && Object.keys(content).length > 0,\n        content: content ?? {},\n      };\n    })\n    .filter(\n      ({ hasContent, content }) =>\n        hasContent && entryFilters.every(({ field, values }) => values.includes(content[field])),\n    );\n\n/**\n * Create a single relation option for non-list fields.\n * @param {object} params Parameters.\n * @param {TemplateStrings} params.templates Template strings.\n * @param {string[]} params.allFieldNames All field names to replace.\n * @param {ReplacementContext} params.context Replacement context.\n * @param {FallbackContext} params.fallbackContext Fallback context.\n * @returns {RelationOption} Single relation option.\n */\nconst createSimpleOption = ({ templates, allFieldNames, context, fallbackContext }) => {\n  const { slug } = context;\n  const { _displayField, _valueField, _searchField } = templates;\n  const { content, locales, defaultLocale, identifierField } = fallbackContext;\n\n  const replacers = Object.fromEntries(\n    allFieldNames.map((fieldName) => [\n      fieldName,\n      getFieldReplacement(fieldName, context, fallbackContext),\n    ]),\n  );\n\n  let label = _displayField;\n  let value = _valueField;\n  let searchValue = _searchField;\n\n  Object.entries(replacers).forEach(([key, val]) => {\n    label = label.replaceAll(`{{${key}}}`, val);\n    value = value.replaceAll(`{{${key}}}`, val);\n    searchValue = searchValue.replaceAll(`{{${key}}}`, val);\n  });\n\n  // Handle empty label fallback\n  if (!label || label.trim() === '') {\n    label =\n      getEntrySummaryFromContent(content, { identifierField }) ||\n      getEntrySummaryFromContent(locales[defaultLocale]?.content || {}, { identifierField }) ||\n      slug;\n  }\n\n  return {\n    label: label || '',\n    value: value || slug,\n    searchValue: searchValue || label || '',\n  };\n};\n\n/**\n * Analyze list field configurations and group them by base field name.\n * @param {string[]} allFieldNames All field names.\n * @param {GetFieldArgs} getFieldArgs Arguments for getField function.\n * @returns {Map<string, [string, any][]>} Grouped list field configurations.\n */\nconst analyzeListFields = (allFieldNames, getFieldArgs) => {\n  const listFieldConfigs = new Map();\n  const baseFieldGroups = new Map();\n\n  // Analyze all list fields and get their configurations\n  allFieldNames\n    .filter((fieldName) => fieldName.includes('*'))\n    .forEach((fieldName) => {\n      const baseFieldName = fieldName.replace(/\\.\\*.*$/, '');\n      const fieldConfigForList = getField({ ...getFieldArgs, keyPath: baseFieldName });\n\n      listFieldConfigs.set(fieldName, {\n        baseFieldName,\n        fieldConfig: fieldConfigForList,\n        ...getListFieldTypes(fieldConfigForList),\n      });\n    });\n\n  // Group entries by base field name\n  [...listFieldConfigs.entries()].forEach(([fieldName, config]) => {\n    const { baseFieldName } = config;\n\n    if (!baseFieldGroups.has(baseFieldName)) {\n      baseFieldGroups.set(baseFieldName, []);\n    }\n\n    baseFieldGroups.get(baseFieldName).push([fieldName, config]);\n  });\n\n  return baseFieldGroups;\n};\n\n/**\n * Process single subfield list fields (e.g., `skills.*`).\n * @param {object} params Parameters.\n * @param {string} params.baseFieldName Base field name.\n * @param {[string, any][]} params.groupEntries Group entries.\n * @param {FlattenedEntryContent} params.content Entry content.\n * @param {TemplateStrings} params.templates Template strings.\n * @param {string[]} params.allFieldNames All field names.\n * @param {ReplacementContext} params.context Replacement context.\n * @param {FallbackContext} params.fallbackContext Fallback context.\n * @returns {RelationOption} Single option with joined values.\n */\nconst processSingleSubfieldList = ({\n  baseFieldName,\n  groupEntries,\n  content,\n  templates,\n  allFieldNames,\n  context,\n  fallbackContext,\n}) => {\n  const { _displayField, _valueField, _searchField } = templates;\n  const regex = new RegExp(`^${escapeRegExp(baseFieldName)}\\\\.\\\\d+$`);\n\n  const values = Object.entries(content)\n    .filter(([k]) => regex.test(k))\n    .map(([, v]) => v);\n\n  const joinedValue = values.join(' ');\n\n  // Replace all wildcards for this base field\n  const processedTemplates = {\n    label: _displayField,\n    value: _valueField,\n    searchValue: _searchField,\n  };\n\n  groupEntries.forEach(([fieldName]) => {\n    processedTemplates.label = processedTemplates.label.replaceAll(`{{${fieldName}}}`, joinedValue);\n    processedTemplates.value = processedTemplates.value.replaceAll(`{{${fieldName}}}`, joinedValue);\n    processedTemplates.searchValue = processedTemplates.searchValue.replaceAll(\n      `{{${fieldName}}}`,\n      joinedValue,\n    );\n  });\n\n  const { label, value, searchValue } = replaceTemplateFields(\n    processedTemplates,\n    allFieldNames.filter((name) => !name.includes('*')),\n    context,\n    fallbackContext,\n  );\n\n  return {\n    label: label || '',\n    value: value || context.slug,\n    searchValue: searchValue || label || '',\n  };\n};\n\n/**\n * Process complex list fields (e.g., `cities.*.name`).\n * @param {object} params Parameters.\n * @param {[string, any][]} params.groupEntries Group entries.\n * @param {FlattenedEntryContent} params.content Entry content.\n * @param {TemplateStrings} params.templates Template strings.\n * @param {string[]} params.allFieldNames All field names.\n * @param {ReplacementContext} params.context Replacement context.\n * @param {FallbackContext} params.fallbackContext Fallback context.\n * @returns {RelationOption[]} Array of options, one for each list item.\n */\nconst processComplexListField = ({\n  groupEntries,\n  content,\n  templates,\n  allFieldNames,\n  context,\n  fallbackContext,\n}) => {\n  const { _displayField, _valueField, _searchField } = templates;\n  /** @type {RelationOption[]} */\n  const results = [];\n\n  // Find a field that has the pattern we can use to extract the list\n  const complexField = groupEntries.find(([fieldName]) =>\n    fieldName.match(/^([^.]+)\\.\\*\\.([^.]+)$/),\n  );\n\n  if (!complexField) {\n    return [];\n  }\n\n  const [fieldName] = complexField;\n  const subFieldMatch = fieldName.match(/^([^.]+)\\.\\*\\.([^.]+)$/);\n\n  if (!subFieldMatch) {\n    return [];\n  }\n\n  const [, baseFieldNameForList, subKey] = subFieldMatch;\n\n  const regex = new RegExp(\n    `^${escapeRegExp(baseFieldNameForList)}\\\\.\\\\d+\\\\.${escapeRegExp(subKey)}$`,\n  );\n\n  const listValues = Object.entries(content)\n    .filter(([k]) => regex.test(k))\n    .map(([k, v]) => {\n      const escapedBase = escapeRegExp(baseFieldNameForList);\n      const escapedSub = escapeRegExp(subKey);\n      const pattern = `^${escapedBase}\\\\.([0-9]+)\\\\.${escapedSub}$`;\n      const indexRegex = new RegExp(pattern);\n      const indexMatch = k.match(indexRegex);\n\n      return { index: parseInt(indexMatch?.[1] || '0', 10), value: v };\n    })\n    .sort((a, b) => a.index - b.index);\n\n  listValues.forEach(({ index }) => {\n    // Replace all wildcards for this base field with the current list item\n    const processedTemplates = {\n      label: _displayField,\n      value: _valueField,\n      searchValue: _searchField,\n    };\n\n    groupEntries.forEach(([wildcardFieldName]) => {\n      const wildcardMatch = wildcardFieldName.match(/^([^.]+)\\.\\*\\.([^.]+)$/);\n\n      if (wildcardMatch) {\n        const [, , subFieldKey] = wildcardMatch;\n        const currentItemValue = content[`${baseFieldNameForList}.${index}.${subFieldKey}`] || '';\n\n        processedTemplates.label = processedTemplates.label.replaceAll(\n          `{{${wildcardFieldName}}}`,\n          currentItemValue,\n        );\n        processedTemplates.value = processedTemplates.value.replaceAll(\n          `{{${wildcardFieldName}}}`,\n          currentItemValue,\n        );\n        processedTemplates.searchValue = processedTemplates.searchValue.replaceAll(\n          `{{${wildcardFieldName}}}`,\n          currentItemValue,\n        );\n      }\n    });\n\n    const { label, value, searchValue } = replaceTemplateFields(\n      processedTemplates,\n      allFieldNames.filter((name) => !name.includes('*')),\n      context,\n      fallbackContext,\n    );\n\n    results.push({\n      label: label || '',\n      value: value || context.slug,\n      searchValue: searchValue || label || '',\n    });\n  });\n\n  return results;\n};\n\n/**\n * Process all list fields for an entry.\n * @param {object} params Parameters.\n * @param {Map<string, [string, any][]>} params.baseFieldGroups Grouped configs.\n * @param {FlattenedEntryContent} params.content Entry content.\n * @param {TemplateStrings} params.templates Template strings.\n * @param {string[]} params.allFieldNames All field names.\n * @param {ReplacementContext} params.context Replacement context.\n * @param {FallbackContext} params.fallbackContext Fallback context.\n * @returns {{ results: RelationOption[], hasProcessedListFields: boolean }} Results.\n */\nconst processListFields = ({\n  baseFieldGroups,\n  content,\n  templates,\n  allFieldNames,\n  context,\n  fallbackContext,\n}) => {\n  /** @type {RelationOption[]} */\n  const results = [];\n  let hasProcessedListFields = false;\n\n  baseFieldGroups.forEach((groupEntries, baseFieldName) => {\n    if (groupEntries.length === 0) {\n      return;\n    }\n\n    const [, firstConfig] = groupEntries[0];\n\n    if (firstConfig.isSingleSubfieldListField) {\n      const option = processSingleSubfieldList({\n        baseFieldName,\n        groupEntries,\n        content,\n        templates,\n        allFieldNames,\n        context,\n        fallbackContext,\n      });\n\n      results.push(option);\n      hasProcessedListFields = true;\n    } else {\n      const options = processComplexListField({\n        groupEntries,\n        content,\n        templates,\n        allFieldNames,\n        context,\n        fallbackContext,\n      });\n\n      results.push(...options);\n      hasProcessedListFields = true;\n    }\n  });\n\n  return { results, hasProcessedListFields };\n};\n\n/**\n * Process a single entry to generate relation options.\n * @param {object} params Parameters.\n * @param {Entry} params.refEntry Reference entry.\n * @param {FlattenedEntryContent} params.content Entry content.\n * @param {InternalCollection} params.collection Collection configuration.\n * @param {TemplateStrings} params.templates Template strings.\n * @param {string[]} params.allFieldNames All field names.\n * @param {boolean} params.hasListFields Whether entry has list fields.\n * @param {string} params.collectionName Collection name.\n * @param {string} [params.fileName] File name.\n * @param {InternalLocaleCode} params.locale Current locale.\n * @param {string} params.identifierField Identifier field.\n * @param {InternalLocaleCode} params.defaultLocale Default locale.\n * @returns {RelationOption[]} Array of relation options.\n */\nconst processEntry = ({\n  refEntry,\n  content,\n  collection,\n  templates,\n  allFieldNames,\n  hasListFields,\n  collectionName,\n  fileName,\n  locale,\n  identifierField,\n  defaultLocale,\n}) => {\n  const { slug, locales } = refEntry;\n  const isIndexFile = isCollectionIndexFile(collection, refEntry);\n  /** @type {GetFieldArgs} */\n  const getFieldArgs = { collectionName, fileName, isIndexFile, keyPath: '' };\n\n  /**\n   * Wrapper for {@link getFieldDisplayValue}.\n   * @param {FieldKeyPath} keyPath Field key path.\n   * @param {InternalLocaleCode} [_locale] Target locale.\n   * @returns {string} Display value.\n   */\n  const getDisplayValue = (keyPath, _locale) =>\n    getFieldDisplayValue({\n      ...getFieldArgs,\n      keyPath,\n      valueMap: _locale ? locales[_locale].content : content,\n      locale: _locale ?? locale,\n    });\n\n  const context = { slug, locale, getDisplayValue };\n  const fallbackContext = { content, locales, defaultLocale, identifierField };\n\n  if (!hasListFields) {\n    return [createSimpleOption({ templates, allFieldNames, context, fallbackContext })];\n  }\n\n  // Handle list fields\n  const baseFieldGroups = analyzeListFields(allFieldNames, getFieldArgs);\n\n  const { results, hasProcessedListFields } = processListFields({\n    baseFieldGroups,\n    content,\n    templates,\n    allFieldNames,\n    context,\n    fallbackContext,\n  });\n\n  if (hasProcessedListFields) {\n    return results;\n  }\n\n  const { _displayField, _valueField, _searchField } = templates;\n\n  // Fallback for complex multi-list scenarios or unhandled cases\n  const processedTemplates = {\n    label: _displayField,\n    value: _valueField,\n    searchValue: _searchField,\n  };\n\n  const { label, value, searchValue } = replaceTemplateFields(\n    processedTemplates,\n    allFieldNames,\n    context,\n    fallbackContext,\n  );\n\n  return [\n    {\n      label: label || '',\n      value: value || slug,\n      searchValue: searchValue || label || '',\n    },\n  ];\n};\n\n/**\n * Get options for a Relation field.\n * @param {InternalLocaleCode} locale Current locale.\n * @param {RelationField} fieldConfig Field configuration.\n * @param {Entry[]} refEntries Referenced entries.\n * @returns {RelationOption[]} Options.\n */\nexport const getOptions = (locale, fieldConfig, refEntries) => {\n  const cacheKey = JSON.stringify({ locale, fieldConfig, refEntries });\n  const cache = optionCacheMap.get(cacheKey);\n\n  if (cache) {\n    return cache;\n  }\n\n  const { collection: collectionName, file: fileName, filters } = fieldConfig;\n  const collection = getCollection(collectionName);\n\n  if (!collection) {\n    optionCacheMap.set(cacheKey, []);\n    return [];\n  }\n\n  const {\n    identifier_field: identifierField = 'title',\n    _i18n: { defaultLocale },\n  } = collection;\n\n  const entryFilters = filters ?? [];\n  const templates = prepareFieldTemplates(fieldConfig, identifierField);\n  const { allFieldNames, hasListFields } = templates;\n  const filteredEntries = filterAndPrepareEntries(refEntries, locale, fileName, entryFilters);\n\n  const options = filteredEntries\n    .map(({ refEntry, content }) =>\n      processEntry({\n        refEntry,\n        content,\n        collection,\n        templates,\n        allFieldNames,\n        hasListFields,\n        collectionName,\n        fileName,\n        locale,\n        identifierField,\n        defaultLocale,\n      }),\n    )\n    .flat(1)\n    .sort((a, b) => compare(a.label, b.label));\n\n  optionCacheMap.set(cacheKey, options);\n\n  return options;\n};\n\n/**\n * Resolve the display value(s) for a relation field.\n * @param {object} args Arguments.\n * @param {RelationField} args.fieldConfig Field configuration.\n * @param {FlattenedEntryContent} args.valueMap Object holding current entry values.\n * @param {FieldKeyPath} args.keyPath Field key path, e.g. `author.name`.\n * @param {InternalLocaleCode} args.locale Locale.\n * @returns {any | any[]} Resolved field value(s).\n */\nexport const getReferencedOptionLabel = ({ fieldConfig, valueMap, keyPath, locale }) => {\n  const { multiple, collection } = fieldConfig;\n  const refEntries = getEntriesByCollection(collection);\n  const refOptions = getOptions(locale, fieldConfig, refEntries);\n  /**\n   * Get the label by value.\n   * @param {any} _value Stored value.\n   * @returns {string} Label.\n   */\n  const getLabel = (_value) => refOptions.find((o) => o.value === _value)?.label || _value;\n\n  if (multiple) {\n    const values = Object.entries(valueMap)\n      .filter(([key]) => key.match(`^${escapeRegExp(keyPath)}\\\\.\\\\d+$`))\n      .map(([, _value]) => _value);\n\n    return values.map(getLabel);\n  }\n\n  return getLabel(valueMap[keyPath]);\n};\n","<!--\n  @component\n  Implement the editor for the Relation widget.\n  @see https://decapcms.org/docs/widgets/#relation\n-->\n<script>\n  import SelectEditor from '$lib/components/contents/details/widgets/select/select-editor.svelte';\n  import { getEntriesByCollection } from '$lib/services/contents/collection/entries';\n  import { getCollectionFileEntry } from '$lib/services/contents/collection/files';\n  import { getOptions } from '$lib/services/contents/widgets/relation/helper';\n\n  /**\n   * @import { WidgetEditorProps } from '$lib/types/private';\n   * @import { RelationField, SelectField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {RelationField} fieldConfig Field configuration.\n   * @property {string | string[] | undefined} currentValue Field value.\n   */\n\n  /** @type {WidgetEditorProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    keyPath,\n    fieldId,\n    fieldLabel,\n    fieldConfig,\n    currentValue = $bindable(),\n    required = true,\n    readonly = false,\n    invalid = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const {\n    // Widget-specific options\n    collection: collectionName,\n    file: fileName,\n  } = $derived(fieldConfig);\n  const refEntries = $derived(\n    fileName\n      ? [getCollectionFileEntry(collectionName, fileName)].filter((entry) => !!entry)\n      : getEntriesByCollection(collectionName),\n  );\n  /** @type {SelectField} */\n  const selectFieldConfig = $derived({\n    ...fieldConfig,\n    widget: 'select',\n    options: getOptions(locale, fieldConfig, refEntries),\n  });\n</script>\n\n<div role=\"none\" class=\"wrapper\">\n  <SelectEditor\n    {locale}\n    {keyPath}\n    {fieldId}\n    {fieldLabel}\n    fieldConfig={selectFieldConfig}\n    bind:currentValue\n    {readonly}\n    {required}\n    {invalid}\n    sortOptions={true}\n  />\n</div>\n","<!--\n  @component\n  Implement the preview for the Relation widget.\n  @see https://decapcms.org/docs/widgets/#relation\n-->\n<script>\n  import { getEntriesByCollection } from '$lib/services/contents/collection/entries';\n  import { getCollectionFileEntry } from '$lib/services/contents/collection/files';\n  import { getListFormatter } from '$lib/services/contents/i18n';\n  import { getOptions } from '$lib/services/contents/widgets/relation/helper';\n\n  /**\n   * @import { WidgetPreviewProps } from '$lib/types/private';\n   * @import { RelationField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {RelationField} fieldConfig Field configuration.\n   * @property {string | string[] | undefined} currentValue Field value.\n   */\n\n  /** @type {WidgetPreviewProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    fieldConfig,\n    currentValue,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const {\n    // Widget-specific options\n    collection: collectionName,\n    file: fileName,\n    multiple = false,\n    value_field: valueField = '{{slug}}',\n  } = $derived(fieldConfig);\n  const listFormatter = $derived(getListFormatter(locale));\n  const refEntries = $derived(\n    fileName\n      ? [getCollectionFileEntry(collectionName, fileName)].filter((entry) => !!entry)\n      : getEntriesByCollection(collectionName),\n  );\n  const options = $derived(getOptions(locale, fieldConfig, refEntries));\n  const refValues = $derived(\n    (multiple ? /** @type {string[]} */ (currentValue) : /** @type {string[]} */ ([currentValue]))\n      .filter((value) => value !== undefined)\n      .map((value) => {\n        const label = options.find((option) => option.value === value)?.label;\n\n        if (label && label !== value) {\n          if (['slug', '{{slug}}', '{{fields.slug}}'].includes(valueField)) {\n            return label;\n          }\n\n          return `${label} (${value})`;\n        }\n\n        return value;\n      }),\n  );\n</script>\n\n{#if refValues.length}\n  <p lang={locale} dir=\"auto\">{listFormatter.format(refValues)}</p>\n{/if}\n","<!--\n  @component\n  Implement the preview for the Select widget.\n  @see https://decapcms.org/docs/widgets/#select\n-->\n<script>\n  import { isObjectArray } from '@sveltia/utils/array';\n\n  import { getListFormatter } from '$lib/services/contents/i18n';\n\n  /**\n   * @import { WidgetPreviewProps } from '$lib/types/private';\n   * @import { SelectField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {SelectField} fieldConfig Field configuration.\n   * @property {string | string[] | undefined} currentValue Field value.\n   */\n\n  /** @type {WidgetPreviewProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    fieldConfig,\n    currentValue,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const { options, multiple } = $derived(fieldConfig);\n  const hasLabels = $derived(isObjectArray(options));\n  const listFormatter = $derived(getListFormatter(locale));\n\n  /**\n   * Get the display label by value.\n   * @param {string | string[]} value Value.\n   * @returns {string} Label.\n   */\n  const getLabel = (value) =>\n    hasLabels\n      ? /** @type {{ label: string, value: string }[]} */ (options).find((o) => o.value === value)\n          ?.label || String(value)\n      : String(value);\n</script>\n\n{#if multiple && Array.isArray(currentValue) && currentValue.length}\n  <p lang={locale} dir=\"auto\">{listFormatter.format(currentValue.map(getLabel).sort())}</p>\n{:else if currentValue !== undefined}\n  <p lang={locale} dir=\"auto\">{getLabel(currentValue)}</p>\n{/if}\n","/**\n * @import { StringField, TextField } from '$lib/types/public';\n */\n\n/**\n * Validate a String/Text field value against the field configuration.\n * @param {object} args Arguments.\n * @param {StringField | TextField} args.fieldConfig Field configuration.\n * @param {string | undefined} args.value Current value.\n * @returns {{ count: number, hasMin: boolean, hasMax: boolean, tooShort: boolean, tooLong: boolean,\n * invalid: boolean }} Result.\n */\nexport const validateStringField = ({ fieldConfig, value }) => {\n  const { minlength, maxlength } = fieldConfig;\n\n  const hasMin =\n    Number.isInteger(minlength) && /** @type {number} */ (minlength) <= (maxlength ?? Infinity);\n\n  const hasMax =\n    Number.isInteger(maxlength) && (minlength ?? 0) <= /** @type {number} */ (maxlength);\n\n  const count = value ? [...value.trim()].length : 0;\n  const tooShort = hasMin && count < /** @type {number} */ (minlength);\n  const tooLong = hasMax && count > /** @type {number} */ (maxlength);\n  const invalid = tooShort || tooLong;\n\n  return { count, hasMin, hasMax, tooShort, tooLong, invalid };\n};\n","<script>\n  import { _ } from 'svelte-i18n';\n\n  import { validateStringField } from '$lib/services/contents/widgets/string/validate';\n\n  /**\n   * @import { StringField, TextField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {StringField | TextField} fieldConfig Field configuration.\n   * @property {string | undefined} currentValue Field value.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    fieldConfig,\n    currentValue,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const { minlength, maxlength } = $derived(fieldConfig);\n  const { count, hasMin, hasMax, invalid } = $derived(\n    validateStringField({ fieldConfig, value: currentValue }),\n  );\n</script>\n\n{#if hasMin || hasMax}\n  <div\n    class=\"wrapper\"\n    aria-label={$_(\n      hasMin && hasMax\n        ? count === 1\n          ? 'character_counter.min_max.one'\n          : 'character_counter.min_max.many'\n        : hasMin\n          ? count === 1\n            ? 'character_counter.min.one'\n            : 'character_counter.min.many'\n          : count === 1\n            ? 'character_counter.max.one'\n            : 'character_counter.max.many',\n      { values: { count, min: minlength, max: maxlength } },\n    )}\n  >\n    {#if hasMin}\n      {minlength}\n      {' / '}\n    {/if}\n    <span role=\"none\" class=\"count\" class:invalid>{count}</span>\n    {#if hasMax}\n      {' / '}\n      {maxlength}\n    {/if}\n  </div>\n{/if}\n\n<style lang=\"scss\">\n  .wrapper {\n    flex: none;\n    color: var(--sui-tertiary-foreground-color) !important;\n    font-size: var(--sui-font-size-small);\n    line-height: var(--sui-line-height-compact);\n    text-align: right;\n  }\n\n  .count {\n    &.invalid {\n      color: var(--sui-error-foreground-color);\n    }\n\n    &:not(.invalid) {\n      color: var(--sui-success-foreground-color);\n    }\n  }\n</style>\n","<!--\n  @component\n  Implement the editor for the String widget.\n  @see https://decapcms.org/docs/widgets/#string\n-->\n<script>\n  import { TextInput } from '@sveltia/ui';\n  import { getContext, untrack } from 'svelte';\n\n  import CharacterCounter from '$lib/components/contents/details/widgets/string/character-counter.svelte';\n\n  /**\n   * @import { FieldEditorContext, WidgetEditorProps } from '$lib/types/private';\n   * @import { StringField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {StringField} fieldConfig Field configuration.\n   * @property {string | undefined} currentValue Field value.\n   */\n\n  /** @type {WidgetEditorProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    fieldId,\n    fieldConfig,\n    currentValue = $bindable(),\n    required = true,\n    readonly = false,\n    invalid = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {FieldEditorContext} */\n  const { extraHint } = getContext('field-editor') ?? {};\n\n  let inputValue = $state('');\n\n  const { type = 'text', prefix = '', suffix = '' } = $derived(fieldConfig);\n\n  /**\n   * Update {@link inputValue} based on {@link currentValue}. Remove the suffix/prefix if needed.\n   */\n  const setInputValue = () => {\n    let newValue = typeof currentValue === 'string' ? currentValue : '';\n\n    if (prefix && newValue.startsWith(prefix)) {\n      newValue = newValue.slice(prefix.length);\n    }\n\n    if (suffix && newValue.endsWith(suffix)) {\n      newValue = newValue.slice(0, -suffix.length);\n    }\n\n    // Avoid a cycle dependency & infinite loop\n    if (inputValue !== newValue) {\n      inputValue = newValue;\n    }\n  };\n\n  /**\n   * Update {@link currentValue} based on {@link inputValue}. Add the suffix/prefix if needed.\n   */\n  const setCurrentValue = () => {\n    let newValue = inputValue.trim();\n\n    // Add affixes only if value is not empty\n    if (newValue && (prefix || suffix)) {\n      newValue = `${prefix}${newValue}${suffix}`;\n    }\n\n    // Avoid a cycle dependency & infinite loop\n    if (currentValue !== newValue) {\n      currentValue = newValue;\n    }\n  };\n\n  $effect(() => {\n    void [currentValue];\n\n    untrack(() => {\n      setInputValue();\n    });\n  });\n\n  $effect(() => {\n    void [inputValue];\n\n    untrack(() => {\n      setCurrentValue();\n    });\n  });\n\n  $effect(() => {\n    if (extraHint) {\n      $extraHint = CharacterCounter;\n    }\n  });\n</script>\n\n<TextInput\n  lang={locale}\n  bind:value={inputValue}\n  {type}\n  inputmode={type}\n  flex\n  {readonly}\n  {required}\n  {invalid}\n  aria-labelledby=\"{fieldId}-label\"\n  aria-errormessage=\"{fieldId}-error\"\n/>\n","import { isURL } from '@sveltia/utils/string';\n\n/**\n * Check if the given string is a YouTube video URL.\n * @param {string} string URL-like string.\n * @returns {boolean} Result.\n */\nexport const isYouTubeVideoURL = (string) => {\n  if (!isURL(string)) {\n    return false;\n  }\n\n  const { origin, pathname, searchParams } = new URL(string);\n\n  if (\n    (origin === 'https://www.youtube.com' || origin === 'https://www.youtube-nocookie.com') &&\n    ((pathname === '/watch' && searchParams.has('v')) ||\n      (pathname === '/playlist' && searchParams.has('list')) ||\n      pathname.startsWith('/embed/'))\n  ) {\n    return true;\n  }\n\n  if (origin === 'https://youtu.be' && !!pathname) {\n    return true;\n  }\n\n  return false;\n};\n\n/**\n * Get an embeddable YouTube video URL from the given string.\n * @param {string} string URL-like string.\n * @returns {string} URL with privacy-enhanced mode enabled.\n */\nexport const getYouTubeEmbedURL = (string) => {\n  const origin = 'https://www.youtube-nocookie.com';\n  const { pathname, search, searchParams } = new URL(string);\n\n  if (pathname === '/watch') {\n    const params = new URLSearchParams(searchParams);\n    let src = `${origin}/embed/${params.get('v')}`;\n\n    if (params.get('list')) {\n      params.delete('v');\n      params.set('listType', 'playlist');\n      src += `?${params.toString()}`;\n    }\n\n    return src;\n  }\n\n  if (pathname === '/playlist') {\n    return `${origin}/embed/videoseries${search}`;\n  }\n\n  if (pathname.startsWith('/embed/')) {\n    return `${origin}${pathname}${search}`;\n  }\n\n  // https://youtu.be\n  return `${origin}/embed${pathname}${search}`;\n};\n","<script>\n  import { waitForVisibility } from '@sveltia/utils/element';\n  import { onMount } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import { getYouTubeEmbedURL } from '$lib/services/utils/media/video/youtube';\n\n  /**\n   * @typedef {object} Props\n   * @property {string} url Video URL.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    url,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {HTMLElement | undefined} */\n  let wrapper = $state();\n  let embeddable = $state(true);\n\n  const embedURL = $derived(getYouTubeEmbedURL(url));\n\n  onMount(() => {\n    // Hide the iframe if CSP is violated\n    window.addEventListener('securitypolicyviolation', ({ blockedURI, violatedDirective }) => {\n      if (blockedURI === new URL(embedURL).origin && violatedDirective === 'frame-src') {\n        embeddable = false;\n      }\n    });\n  });\n</script>\n\n<div role=\"none\" bind:this={wrapper}>\n  {#if embeddable}\n    {#await waitForVisibility(wrapper) then}\n      <iframe\n        src={encodeURI(embedURL)}\n        title={$_('youtube_video_player')}\n        frameborder=\"0\"\n        allow=\"autoplay; encrypted-media; picture-in-picture\"\n        referrerpolicy=\"strict-origin-when-cross-origin\"\n        allowfullscreen\n      ></iframe>\n    {/await}\n  {:else}\n    <a href={encodeURI(url)}>{url}</a>\n  {/if}\n</div>\n\n<style lang=\"scss\">\n  iframe {\n    display: block;\n    margin: 0 auto;\n    width: 100%;\n    height: auto;\n    aspect-ratio: 16 / 9;\n  }\n</style>\n","<!--\n  @component\n  Implement the preview for the String widget.\n  @see https://decapcms.org/docs/widgets/#string\n-->\n<script>\n  import { isURL } from '@sveltia/utils/string';\n\n  import YouTubeEmbed from '$lib/components/contents/details/widgets/string/youtube-embed.svelte';\n  import { isYouTubeVideoURL } from '$lib/services/utils/media/video/youtube';\n\n  /**\n   * @import { WidgetPreviewProps } from '$lib/types/private';\n   * @import { StringField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {StringField} fieldConfig Field configuration.\n   * @property {string | undefined} currentValue Field value.\n   */\n\n  /** @type {WidgetPreviewProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    fieldConfig,\n    currentValue,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const { name: fieldName, type = 'text' } = $derived(fieldConfig);\n</script>\n\n{#if typeof currentValue === 'string' && currentValue.trim()}\n  <p lang={locale} dir=\"auto\" class:title={fieldName === 'title'}>\n    {#if type === 'url' || isURL(currentValue)}\n      {#if isYouTubeVideoURL(currentValue)}\n        <YouTubeEmbed url={currentValue} />\n      {:else}\n        <a href={encodeURI(currentValue)}>{currentValue}</a>\n      {/if}\n    {:else if type === 'email'}\n      <a href=\"mailto:{encodeURI(currentValue)}\">{currentValue}</a>\n    {:else}\n      {currentValue}\n    {/if}\n  </p>\n{/if}\n\n<style lang=\"scss\">\n  .title {\n    font-size: var(--sui-font-size-xxx-large);\n    font-weight: var(--sui-font-weight-bold);\n  }\n</style>\n","<!--\n  @component\n  Implement the editor for the Text widget.\n  @see https://decapcms.org/docs/widgets/#text\n-->\n<script>\n  import { TextArea } from '@sveltia/ui';\n  import { getContext, untrack } from 'svelte';\n\n  import CharacterCounter from '$lib/components/contents/details/widgets/string/character-counter.svelte';\n\n  /**\n   * @import { FieldEditorContext, WidgetEditorProps } from '$lib/types/private';\n   * @import { TextField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {TextField} fieldConfig Field configuration.\n   * @property {string | undefined} currentValue Field value.\n   */\n\n  /** @type {FieldEditorContext} */\n  const { extraHint } = getContext('field-editor') ?? {};\n\n  /** @type {WidgetEditorProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    fieldId,\n    currentValue = $bindable(),\n    required = true,\n    readonly = false,\n    invalid = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  let inputValue = $state('');\n\n  /**\n   * Update {@link inputValue} based on {@link currentValue} while avoiding a cycle dependency.\n   */\n  const setInputValue = () => {\n    const newValue = typeof currentValue === 'string' ? currentValue : '';\n\n    if (inputValue !== newValue) {\n      inputValue = newValue;\n    }\n  };\n\n  /**\n   * Update {@link currentValue} based on {@link inputValue} while avoiding a cycle dependency.\n   */\n  const setCurrentValue = () => {\n    const newValue = inputValue;\n\n    if (currentValue !== newValue) {\n      currentValue = newValue;\n    }\n  };\n\n  $effect(() => {\n    void [currentValue];\n\n    untrack(() => {\n      setInputValue();\n    });\n  });\n\n  $effect(() => {\n    void [inputValue];\n\n    untrack(() => {\n      setCurrentValue();\n    });\n  });\n\n  $effect(() => {\n    if (extraHint) {\n      $extraHint = CharacterCounter;\n    }\n  });\n</script>\n\n<TextArea\n  lang={locale}\n  bind:value={inputValue}\n  flex\n  {readonly}\n  {required}\n  {invalid}\n  aria-labelledby=\"{fieldId}-label\"\n  aria-errormessage=\"{fieldId}-error\"\n  autoResize={true}\n/>\n","<!--\n  @component\n  Implement the preview for the Text widget.\n  @see https://decapcms.org/docs/widgets/#text\n-->\n<script>\n  /**\n   * @import { WidgetPreviewProps } from '$lib/types/private';\n   * @import { TextField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {TextField} fieldConfig Field configuration.\n   * @property {string | undefined} currentValue Field value.\n   */\n\n  /** @type {WidgetPreviewProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    currentValue,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n{#if typeof currentValue === 'string' && currentValue.trim()}\n  <p lang={locale} dir=\"auto\">{currentValue}</p>\n{/if}\n\n<style lang=\"scss\">\n  p {\n    white-space: pre-wrap;\n  }\n</style>\n","import { generateRandomId, generateUUID } from '@sveltia/utils/crypto';\n\n/**\n * @import { UuidField } from '$lib/types/public';\n */\n\n/**\n * Get the initial value for a UUID field.\n * @param {UuidField} fieldConfig Field configuration.\n * @returns {string} Initial value, either a UUID or a prefixed random ID.\n */\nexport const getInitialValue = (fieldConfig) => {\n  const { prefix, use_b32_encoding: useEncoding } = fieldConfig;\n  const value = useEncoding ? generateRandomId() : generateUUID();\n\n  return prefix ? `${prefix}${value}` : value;\n};\n","<!--\n  @component\n  Implement the editor for the UUID widget.\n  @see https://decapcms.org/docs/widgets/#uuid\n-->\n<script>\n  import { TextInput } from '@sveltia/ui';\n  import { onMount } from 'svelte';\n\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { DEFAULT_I18N_CONFIG } from '$lib/services/contents/i18n/config';\n  import { getInitialValue } from '$lib/services/contents/widgets/uuid/helper';\n\n  /**\n   * @import { WidgetEditorProps } from '$lib/types/private';\n   * @import { UuidField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {UuidField} fieldConfig Field configuration.\n   * @property {string | undefined} currentValue Field value.\n   */\n\n  /** @type {WidgetEditorProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    fieldId,\n    fieldConfig,\n    currentValue = $bindable(),\n    required = true,\n    readonly = false,\n    invalid = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const collection = $derived($entryDraft?.collection);\n  const collectionFile = $derived($entryDraft?.collectionFile);\n  const { defaultLocale } = $derived((collectionFile ?? collection)?._i18n ?? DEFAULT_I18N_CONFIG);\n\n  // Generate the default value here instead of in `create.js` because `getDefaultValues()` doesn’t\n  // i18n-duplicate the value\n  onMount(() => {\n    if (!currentValue) {\n      if (locale === defaultLocale || [true, 'translate'].includes(fieldConfig?.i18n ?? false)) {\n        currentValue = getInitialValue(fieldConfig);\n      }\n    }\n  });\n</script>\n\n<TextInput\n  bind:value={currentValue}\n  flex\n  readonly={readonly || fieldConfig.read_only !== false}\n  {required}\n  {invalid}\n  aria-labelledby=\"{fieldId}-label\"\n  aria-errormessage=\"{fieldId}-error\"\n/>\n","<!--\n  @component\n  Implement the preview for the UUID widget.\n  @see https://decapcms.org/docs/widgets/#uuid\n-->\n<script>\n  /**\n   * @import { WidgetPreviewProps } from '$lib/types/private';\n   * @import { UuidField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {UuidField} fieldConfig Field configuration.\n   * @property {string | undefined} currentValue Field value.\n   */\n\n  /** @type {WidgetPreviewProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    currentValue,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n{#if typeof currentValue === 'string' && currentValue.trim()}\n  <p>{currentValue}</p>\n{/if}\n\n<style lang=\"scss\">\n  p {\n    font-family: var(--sui-font-family-monospace);\n  }\n</style>\n","import BooleanEditor from '$lib/components/contents/details/widgets/boolean/boolean-editor.svelte';\nimport BooleanPreview from '$lib/components/contents/details/widgets/boolean/boolean-preview.svelte';\nimport CodeEditor from '$lib/components/contents/details/widgets/code/code-editor.svelte';\nimport CodePreview from '$lib/components/contents/details/widgets/code/code-preview.svelte';\nimport ColorEditor from '$lib/components/contents/details/widgets/color/color-editor.svelte';\nimport ColorPreview from '$lib/components/contents/details/widgets/color/color-preview.svelte';\nimport ComputeEditor from '$lib/components/contents/details/widgets/compute/compute-editor.svelte';\nimport ComputePreview from '$lib/components/contents/details/widgets/compute/compute-preview.svelte';\nimport DateTimeEditor from '$lib/components/contents/details/widgets/date-time/date-time-editor.svelte';\nimport DateTimePreview from '$lib/components/contents/details/widgets/date-time/date-time-preview.svelte';\nimport FileEditor from '$lib/components/contents/details/widgets/file/file-editor.svelte';\nimport FilePreview from '$lib/components/contents/details/widgets/file/file-preview.svelte';\nimport KeyValueEditor from '$lib/components/contents/details/widgets/key-value/key-value-editor.svelte';\nimport KeyValuePreview from '$lib/components/contents/details/widgets/key-value/key-value-preview.svelte';\nimport ListEditor from '$lib/components/contents/details/widgets/list/list-editor.svelte';\nimport ListPreview from '$lib/components/contents/details/widgets/list/list-preview.svelte';\nimport MapEditor from '$lib/components/contents/details/widgets/map/map-editor.svelte';\nimport MapPreview from '$lib/components/contents/details/widgets/map/map-preview.svelte';\nimport MarkdownEditor from '$lib/components/contents/details/widgets/markdown/markdown-editor.svelte';\nimport MarkdownPreview from '$lib/components/contents/details/widgets/markdown/markdown-preview.svelte';\nimport NumberEditor from '$lib/components/contents/details/widgets/number/number-editor.svelte';\nimport NumberPreview from '$lib/components/contents/details/widgets/number/number-preview.svelte';\nimport ObjectEditor from '$lib/components/contents/details/widgets/object/object-editor.svelte';\nimport ObjectPreview from '$lib/components/contents/details/widgets/object/object-preview.svelte';\nimport RelationEditor from '$lib/components/contents/details/widgets/relation/relation-editor.svelte';\nimport RelationPreview from '$lib/components/contents/details/widgets/relation/relation-preview.svelte';\nimport SelectEditor from '$lib/components/contents/details/widgets/select/select-editor.svelte';\nimport SelectPreview from '$lib/components/contents/details/widgets/select/select-preview.svelte';\nimport StringEditor from '$lib/components/contents/details/widgets/string/string-editor.svelte';\nimport StringPreview from '$lib/components/contents/details/widgets/string/string-preview.svelte';\nimport TextEditor from '$lib/components/contents/details/widgets/text/text-editor.svelte';\nimport TextPreview from '$lib/components/contents/details/widgets/text/text-preview.svelte';\nimport UuidEditor from '$lib/components/contents/details/widgets/uuid/uuid-editor.svelte';\nimport UuidPreview from '$lib/components/contents/details/widgets/uuid/uuid-preview.svelte';\n\n/**\n * @import { Component } from 'svelte';\n */\n\n/**\n * @type {Record<string, Component>}\n */\nexport const editors = {\n  boolean: BooleanEditor,\n  code: CodeEditor,\n  color: ColorEditor,\n  compute: ComputeEditor,\n  datetime: DateTimeEditor,\n  file: FileEditor,\n  image: FileEditor, // alias\n  keyvalue: KeyValueEditor,\n  list: ListEditor,\n  map: MapEditor,\n  markdown: MarkdownEditor,\n  number: NumberEditor,\n  object: ObjectEditor,\n  relation: RelationEditor,\n  select: SelectEditor,\n  string: StringEditor,\n  text: TextEditor,\n  uuid: UuidEditor,\n};\n/**\n * @type {Record<string, Component>}\n */\nexport const previews = {\n  boolean: BooleanPreview,\n  code: CodePreview,\n  color: ColorPreview,\n  compute: ComputePreview,\n  datetime: DateTimePreview,\n  file: FilePreview,\n  image: FilePreview, // alias\n  keyvalue: KeyValuePreview,\n  list: ListPreview,\n  map: MapPreview,\n  markdown: MarkdownPreview,\n  number: NumberPreview,\n  object: ObjectPreview,\n  relation: RelationPreview,\n  select: SelectPreview,\n  string: StringPreview,\n  text: TextPreview,\n  uuid: UuidPreview,\n};\n","import { get } from 'svelte/store';\n\nimport { entryDraft } from '$lib/services/contents/draft';\nimport { getField } from '$lib/services/contents/entry/fields';\n\n/**\n * @import {\n * EntryDraft,\n * GetFieldArgs,\n * InternalLocaleCode,\n * LocaleContentMap,\n * } from '$lib/types/private';\n * @import { FieldKeyPath } from '$lib/types/public';\n */\n\n/**\n * Revert the changes made to the given field or all the fields to the default value(s).\n * @param {object} args Arguments.\n * @param {FieldKeyPath} args.keyPath Field key path to revert. If empty, all the fields will be\n * reverted.\n * @param {InternalLocaleCode} args.locale Iterating locale.\n * @param {boolean} args.isDefaultLocale Whether the locale is the default locale.\n * @param {GetFieldArgs} args.getFieldArgs Arguments for the {@link getField} function.\n * @param {LocaleContentMap} args.currentValues Current values to revert. This will be modified.\n * @param {boolean} [args.reset] Whether ro remove the current value.\n */\nconst revertFields = ({\n  locale,\n  isDefaultLocale,\n  keyPath,\n  getFieldArgs,\n  currentValues,\n  reset = false,\n}) => {\n  const { valueMap = {} } = getFieldArgs;\n\n  Object.entries(valueMap).forEach(([_keyPath, value]) => {\n    if (!keyPath || _keyPath.startsWith(keyPath)) {\n      const fieldConfig = getField({ ...getFieldArgs, keyPath: _keyPath });\n\n      if (isDefaultLocale || [true, 'translate'].includes(fieldConfig?.i18n ?? false)) {\n        if (reset) {\n          delete currentValues[locale][_keyPath];\n        } else {\n          currentValues[locale][_keyPath] = value;\n        }\n      }\n    }\n  });\n};\n\n/**\n * Revert the changes made to the given locale.\n * @param {object} args Arguments.\n * @param {EntryDraft} args.draft Entry draft.\n * @param {FieldKeyPath} args.keyPath Field key path to revert. If empty, all the fields will be\n * reverted.\n * @param {InternalLocaleCode} args.locale Locale code.\n */\nconst revertLocale = ({ draft, keyPath, locale }) => {\n  const {\n    collection,\n    collectionName,\n    collectionFile,\n    fileName,\n    currentValues,\n    originalValues,\n    isIndexFile,\n  } = draft;\n\n  const { defaultLocale } = (collectionFile ?? collection)._i18n;\n  const isDefaultLocale = locale === defaultLocale;\n  const revertArgs = { keyPath, locale, isDefaultLocale, currentValues };\n  /** @type {GetFieldArgs} */\n  const getFieldArgs = { collectionName, fileName, keyPath: '', isIndexFile };\n\n  // Remove all the current values except for i18n-duplicate ones\n  revertFields({\n    ...revertArgs,\n    getFieldArgs: { ...getFieldArgs, valueMap: currentValues[locale] },\n    reset: true,\n  });\n\n  // Restore the original values\n  revertFields({\n    ...revertArgs,\n    getFieldArgs: { ...getFieldArgs, valueMap: originalValues[locale] },\n  });\n};\n\n/**\n * Revert the changes made to the given field or all the fields to the default value(s).\n * @param {object} [args] Arguments.\n * @param {InternalLocaleCode} [args.locale] Target locale, e.g. `ja`. Can be empty if reverting\n * everything.\n * @param {FieldKeyPath} [args.keyPath] Flattened (dot-notated) object keys that will be used for\n * searching the source values. Omit this if copying all the fields. If the triggered widget is List\n * or Object, this will likely match multiple fields.\n */\nexport const revertChanges = ({ locale: targetLocale = '', keyPath = '' } = {}) => {\n  const draft = /** @type {EntryDraft} */ (get(entryDraft));\n  const { collection, collectionFile, currentValues } = draft;\n  const { allLocales } = (collectionFile ?? collection)._i18n;\n  const locales = targetLocale ? [targetLocale] : allLocales;\n\n  locales.forEach((locale) => {\n    revertLocale({ draft, keyPath, locale });\n  });\n\n  entryDraft.update(() => ({ ...draft, currentValues }));\n};\n","<script>\n  import { Menu, MenuButton, MenuItem, Spacer } from '@sveltia/ui';\n  import { escapeRegExp } from '@sveltia/utils/string';\n  import equal from 'fast-deep-equal';\n  import DOMPurify from 'isomorphic-dompurify';\n  import { marked } from 'marked';\n  import { getContext, setContext } from 'svelte';\n  import { writable } from 'svelte/store';\n  import { _ } from 'svelte-i18n';\n\n  import CopyMenuItems from '$lib/components/contents/details/editor/copy-menu-items.svelte';\n  import TranslateButton from '$lib/components/contents/details/editor/translate-button.svelte';\n  import ValidationError from '$lib/components/contents/details/editor/validation-error.svelte';\n  import { editors } from '$lib/components/contents/details/widgets';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { revertChanges } from '$lib/services/contents/draft/update/revert';\n  import { isFieldRequired } from '$lib/services/contents/entry/fields';\n  import { DEFAULT_I18N_CONFIG } from '$lib/services/contents/i18n/config';\n  import { MIN_MAX_VALUE_WIDGETS, MULTI_VALUE_WIDGETS } from '$lib/services/contents/widgets';\n  import { getListFieldInfo } from '$lib/services/contents/widgets/list/helper';\n\n  /**\n   * @import { Component } from 'svelte';\n   * @import { Writable } from 'svelte/store';\n   * @import {\n   * DraftValueStoreKey,\n   * EntryDraft,\n   * FieldEditorContext,\n   * InternalLocaleCode,\n   * WidgetContext,\n   * } from '$lib/types/private';\n   * @import {\n   * BooleanField,\n   * Field,\n   * FieldKeyPath,\n   * ListField,\n   * MinMaxValueField,\n   * MultiValueField,\n   * NumberField,\n   * StringField,\n   * TextField,\n   * } from '$lib/types/public';\n   */\n\n  /** @type {FieldEditorContext} */\n  const parent = getContext('field-editor') ?? {};\n\n  /**\n   * @typedef {object} Props\n   * @property {InternalLocaleCode} locale Current pane’s locale.\n   * @property {FieldKeyPath} keyPath Field key path.\n   * @property {Field} fieldConfig Field configuration.\n   * @property {WidgetContext} [context] Where the widget is rendered.\n   * @property {DraftValueStoreKey} [valueStoreKey] Key to store the values in {@link EntryDraft}.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    keyPath,\n    fieldConfig,\n    context: widgetContext = parent.widgetContext ?? undefined,\n    valueStoreKey = parent.valueStoreKey ?? 'currentValues',\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const fieldId = $props.id();\n\n  /**\n   * Parse the given string as Markdown and sanitize the result to only allow certain tags.\n   * @param {string} str Original string.\n   * @returns {string} Sanitized string.\n   */\n  const sanitize = (str) =>\n    DOMPurify.sanitize(/** @type {string} */ (marked.parseInline(str.replaceAll('\\\\n', '<br>'))), {\n      ALLOWED_TAGS: ['strong', 'em', 'del', 'code', 'a', 'br'],\n      ALLOWED_ATTR: ['href'],\n    });\n\n  /** @type {Writable<Component>} */\n  const extraHint = writable();\n\n  setContext(\n    'field-editor',\n    /** @type {FieldEditorContext} */ ({ widgetContext, extraHint, valueStoreKey }),\n  );\n\n  const inEditorComponent = $derived(widgetContext === 'markdown-editor-component');\n  const {\n    name: fieldName,\n    label = '',\n    comment = '',\n    hint = '',\n    widget: widgetName = 'string',\n    i18n = false,\n    pattern = /** @type {string[]} */ ([]),\n    readonly: readonlyOption = false,\n  } = $derived(fieldConfig);\n  const required = $derived(isFieldRequired({ fieldConfig, locale }));\n  const { hasSubFields } = $derived(\n    widgetName === 'list'\n      ? getListFieldInfo(/** @type {ListField} */ (fieldConfig))\n      : { hasSubFields: false },\n  );\n  const { multiple = false } = $derived(\n    /** @type {MultiValueField} */ (MULTI_VALUE_WIDGETS.includes(widgetName) ? fieldConfig : {}),\n  );\n  const { min = 0, max = Infinity } = $derived(\n    /** @type {MinMaxValueField} */ (MIN_MAX_VALUE_WIDGETS.includes(widgetName) ? fieldConfig : {}),\n  );\n  const type = $derived(\n    // prettier-ignore\n    widgetName === 'string'\n      ? /** @type {StringField} */ (fieldConfig).type ?? 'text'\n      : widgetName === 'number'\n        ? 'number'\n        : undefined,\n  );\n  const allowPrefix = $derived(['string'].includes(widgetName));\n  const prefix = $derived(\n    allowPrefix ? /** @type {StringField} */ (fieldConfig).prefix : undefined,\n  );\n  const suffix = $derived(\n    allowPrefix ? /** @type {StringField} */ (fieldConfig).suffix : undefined,\n  );\n  const allowExtraLabels = $derived(['boolean', 'number', 'string'].includes(widgetName));\n  const beforeInputLabel = $derived(\n    allowExtraLabels\n      ? /** @type {BooleanField | NumberField | StringField} */ (fieldConfig).before_input\n      : undefined,\n  );\n  const afterInputLabel = $derived(\n    allowExtraLabels\n      ? /** @type {BooleanField | NumberField | StringField} */ (fieldConfig).after_input\n      : undefined,\n  );\n  const hasExtraLabels = $derived(!!(prefix || suffix || beforeInputLabel || afterInputLabel));\n  const canAddMultiValue = $derived(\n    (widgetName === 'list' && hasSubFields) || multiple || widgetName === 'keyvalue',\n  );\n  const isList = $derived(widgetName === 'list' || multiple);\n  const collection = $derived($entryDraft?.collection);\n  const collectionFile = $derived($entryDraft?.collectionFile);\n  const originalValues = $derived($entryDraft?.originalValues);\n  const { i18nEnabled, allLocales, defaultLocale } = $derived(\n    (collectionFile ?? collection)?._i18n ?? DEFAULT_I18N_CONFIG,\n  );\n  const otherLocales = $derived(i18nEnabled ? allLocales.filter((l) => l !== locale) : []);\n  const canTranslate = $derived(i18nEnabled && (i18n === true || i18n === 'translate'));\n  const canDuplicate = $derived(i18nEnabled && i18n === 'duplicate');\n  const canEdit = $derived(\n    inEditorComponent || locale === defaultLocale || canTranslate || canDuplicate,\n  );\n  const canCopy = $derived(!inEditorComponent && canTranslate && otherLocales.length);\n  const canRevert = $derived(!inEditorComponent && !(canDuplicate && locale !== defaultLocale));\n  const keyPathRegex = $derived(new RegExp(`^${escapeRegExp(keyPath)}\\\\.\\\\d+$`));\n  // Multiple values are flattened in the value map object\n  const currentValue = $derived(\n    isList\n      ? Object.entries($state.snapshot($entryDraft?.[valueStoreKey][locale] ?? {}))\n          .filter(([_keyPath]) => keyPathRegex.test(_keyPath))\n          .map(([, val]) => val)\n          .filter((val) => val !== undefined)\n      : $state.snapshot($entryDraft?.[valueStoreKey][locale])?.[keyPath],\n  );\n  const originalValue = $derived(\n    isList\n      ? Object.entries(originalValues?.[locale] ?? {})\n          .filter(([_keyPath]) => keyPathRegex.test(_keyPath))\n          .map(([, val]) => val)\n          .filter((val) => val !== undefined)\n      : originalValues?.[locale]?.[keyPath],\n  );\n  const validity = $derived($entryDraft?.validities[locale][keyPath]);\n  const fieldLabel = $derived(label || fieldName);\n  const readonly = $derived(\n    readonlyOption ||\n      (i18n === 'duplicate' && locale !== defaultLocale) ||\n      widgetName === 'compute',\n  );\n  const invalid = $derived(validity?.valid === false);\n</script>\n\n{#if $entryDraft && canEdit && widgetName !== 'hidden'}\n  <section\n    role=\"group\"\n    class=\"field\"\n    aria-label={$_('x_field', { values: { field: fieldLabel } })}\n    data-widget={widgetName}\n    data-key-path={keyPath}\n    hidden={widgetName === 'compute'}\n  >\n    <header role=\"none\">\n      <h4 role=\"none\" id=\"{fieldId}-label\">{fieldLabel}</h4>\n      {#if !readonly && required}\n        <div class=\"required\" aria-label={$_('required')}>*</div>\n      {/if}\n      <Spacer flex />\n      {#if canCopy && ['markdown', 'string', 'text', 'list', 'object'].includes(widgetName)}\n        <TranslateButton size=\"small\" {locale} {otherLocales} {keyPath} />\n      {/if}\n      {#if canCopy || canRevert}\n        <MenuButton\n          variant=\"ghost\"\n          size=\"small\"\n          iconic\n          popupPosition=\"bottom-right\"\n          aria-label={$_('show_field_options')}\n        >\n          {#snippet popup()}\n            <Menu aria-label={$_('field_options')}>\n              {#if canCopy}\n                <CopyMenuItems {locale} {otherLocales} {keyPath} />\n              {/if}\n              {#if canRevert}\n                <MenuItem\n                  label={$_('revert_changes')}\n                  disabled={equal(currentValue, originalValue) ||\n                    // Disable reversion in list items until we figure out how to handle reordering\n                    /\\.\\d+\\./.test(keyPath)}\n                  onclick={() => {\n                    revertChanges({ locale, keyPath });\n                  }}\n                />\n              {/if}\n            </Menu>\n          {/snippet}\n        </MenuButton>\n      {/if}\n    </header>\n    {#if !readonly && comment}\n      <p class=\"comment\">{@html sanitize(comment)}</p>\n    {/if}\n    {#if validity?.valid === false}\n      <ValidationError id=\"{fieldId}-error\">\n        {#if validity.valueMissing}\n          {$_('validation.value_missing')}\n        {/if}\n        {#if validity.tooShort}\n          {@const { minlength } = (() => /** @type {StringField | TextField} */ (fieldConfig))()}\n          {$_(minlength === 1 ? 'validation.too_short.one' : 'validation.too_short.many', {\n            values: { min: minlength },\n          })}\n        {/if}\n        {#if validity.tooLong}\n          {@const { maxlength } = (() => /** @type {StringField | TextField} */ (fieldConfig))()}\n          {$_(maxlength === 1 ? 'validation.too_long.one' : 'validation.too_long.many', {\n            values: { max: maxlength },\n          })}\n        {/if}\n        {#if validity.rangeUnderflow}\n          {@const quantity = min === 1 ? 'one' : 'many'}\n          {#if widgetName === 'number'}\n            {$_('validation.range_underflow.number', { values: { min } })}\n          {:else if canAddMultiValue}\n            {$_(`validation.range_underflow.add_${quantity}`, { values: { min } })}\n          {:else}\n            {$_(`validation.range_underflow.select_${quantity}`, { values: { min } })}\n          {/if}\n        {/if}\n        {#if validity.rangeOverflow}\n          {@const quantity = max === 1 ? 'one' : 'many'}\n          {#if widgetName === 'number'}\n            {$_('validation.range_overflow.number', { values: { max } })}\n          {:else if canAddMultiValue}\n            {$_(`validation.range_overflow.add_${quantity}`, { values: { max } })}\n          {:else}\n            {$_(`validation.range_overflow.select_${quantity}`, { values: { max } })}\n          {/if}\n        {/if}\n        {#if validity.patternMismatch}\n          {pattern[1]}\n        {/if}\n        {#if validity.typeMismatch}\n          {$_(`validation.type_mismatch.${type}`)}\n        {/if}\n      </ValidationError>\n    {/if}\n    <div role=\"none\" class=\"widget-wrapper\" class:has-extra-labels={hasExtraLabels}>\n      {#if !(widgetName in editors)}\n        <div role=\"none\">{$_('unsupported_widget_x', { values: { name: widgetName } })}</div>\n      {:else if isList}\n        {@const Editor = editors[widgetName]}\n        <Editor\n          {locale}\n          {keyPath}\n          {fieldId}\n          {fieldLabel}\n          {fieldConfig}\n          {currentValue}\n          {readonly}\n          {required}\n          {invalid}\n        />\n      {:else}\n        {#if beforeInputLabel}\n          <div role=\"none\" class=\"before-input\">{@html sanitize(beforeInputLabel)}</div>\n        {/if}\n        {#if prefix}\n          <div role=\"none\" class=\"prefix\">{prefix}</div>\n        {/if}\n        {@const Editor = editors[widgetName]}\n        <Editor\n          {locale}\n          {keyPath}\n          {fieldId}\n          {fieldLabel}\n          {fieldConfig}\n          bind:currentValue={$entryDraft[valueStoreKey][locale][keyPath]}\n          {readonly}\n          {required}\n          {invalid}\n        />\n        {#if suffix}\n          <div role=\"none\" class=\"suffix\">{suffix}</div>\n        {/if}\n        {#if afterInputLabel}\n          <div role=\"none\" class=\"after-input\">{@html sanitize(afterInputLabel)}</div>\n        {/if}\n      {/if}\n    </div>\n    {#if !readonly && (hint || $extraHint)}\n      {@const ExtraHint = $extraHint}\n      <div role=\"none\" class=\"footer\">\n        {#if hint}\n          <p class=\"hint\">{@html sanitize(hint)}</p>\n        {/if}\n        <ExtraHint {fieldConfig} {currentValue} />\n      </div>\n    {/if}\n  </section>\n{/if}\n\n<style lang=\"scss\">\n  section {\n    padding: var(--field-editor-padding);\n\n    &:not(:last-child) {\n      border-width: 0 0 1px;\n      border-color: var(--sui-secondary-border-color);\n    }\n\n    & > :global(*) {\n      margin-inline: auto !important;\n      max-width: 768px;\n    }\n  }\n\n  header {\n    display: flex;\n    align-items: center;\n    margin: 0 -8px 8px;\n    height: var(--sui-button-small-height);\n\n    h4 {\n      margin-inline: 8px 0;\n      font-size: var(--sui-font-size-small);\n      font-weight: var(--sui-font-weight-bold);\n      color: var(--sui-secondary-foreground-color);\n    }\n\n    .required {\n      margin: 2px 0 0 2px;\n      color: var(--sui-error-foreground-color);\n      font-size: var(--sui-font-size-large);\n    }\n  }\n\n  .widget-wrapper {\n    &.has-extra-labels {\n      display: flex;\n      align-items: center;\n      justify-content: flex-start;\n      gap: 4px;\n    }\n\n    :global {\n      :is(input[type='text'], textarea) {\n        width: 100%;\n      }\n\n      input:is([type='color'], [type='number']) {\n        outline: 0;\n        border-width: 1px;\n        border-color: var(--sui-primary-border-color);\n        border-radius: var(--sui-control-medium-border-radius);\n        height: var(--sui-button-medium-height);\n        color: inherit;\n        background-color: var(--sui-textbox-background-color);\n      }\n\n      input:is([type='file'], [type='checkbox']) {\n        color: inherit;\n      }\n\n      & > div {\n        color: inherit;\n      }\n\n      input:is([type='date'], [type='datetime-local'], [type='time']) {\n        outline: 0;\n        margin: var(--sui-focus-ring-width);\n        border-width: var(--sui-textbox-border-width, 1px);\n        border-color: var(--sui-primary-border-color);\n        border-radius: var(--sui-control-medium-border-radius);\n        padding: var(--sui-textbox-singleline-padding);\n        width: auto;\n        height: var(--sui-textbox-height);\n        color: var(--sui-textbox-foreground-color);\n        background-color: var(--sui-textbox-background-color);\n        font-family: var(--sui-textbox-font-family);\n        font-size: var(--sui-textbox-font-size);\n        text-transform: uppercase;\n\n        &:disabled {\n          opacity: 0.4;\n        }\n      }\n\n      input[aria-invalid='true']:is(\n          [type='color'],\n          [type='date'],\n          [type='datetime-local'],\n          [type='time']\n        ) {\n        border-color: var(--sui-error-border-color);\n      }\n\n      input:read-only {\n        // Make readonly inputs selectable\n        -webkit-user-select: text;\n        user-select: text;\n        pointer-events: auto;\n      }\n    }\n  }\n\n  .before-input,\n  .after-input,\n  .prefix,\n  .suffix {\n    color: var(--sui-secondary-foreground-color);\n    white-space: nowrap;\n  }\n\n  .comment {\n    margin-block: 4px;\n    line-height: var(--sui-line-height-compact);\n  }\n\n  .footer {\n    display: flex;\n    gap: 16px;\n    justify-content: flex-end;\n    margin-top: 4px;\n  }\n\n  .hint {\n    flex: auto;\n    margin: 0;\n    font-size: var(--sui-font-size-small);\n    line-height: var(--sui-line-height-compact);\n    opacity: 0.75;\n  }\n</style>\n","<script>\n  import { Button, Icon } from '@sveltia/ui';\n  import equal from 'fast-deep-equal';\n  import { flatten, unflatten } from 'flat';\n  import { onMount, untrack } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import VisibilityObserver from '$lib/components/common/visibility-observer.svelte';\n  import FieldEditor from '$lib/components/contents/details/editor/field-editor.svelte';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { getDefaultValues } from '$lib/services/contents/draft/defaults';\n\n  /**\n   * @import { DraftValueStoreKey, InternalLocaleCode, RawEntryContent } from '$lib/types/private';\n   * @import { Field, FieldKeyPath } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} componentName Markdown editor component name.\n   * @property {string} label Field label.\n   * @property {Field[]} fields Subfield definitions.\n   * @property {Record<string, any> | undefined} values Value map.\n   * @property {(event: CustomEvent) => void} [onChange] Custom `change` event handler.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    componentName,\n    label,\n    fields,\n    values,\n    onChange = () => undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const randomId = $props.id();\n\n  /** @type {HTMLElement | undefined} */\n  let wrapper = $state();\n  /** @type {InternalLocaleCode} */\n  let locale = $state('');\n  /** @type {FieldKeyPath} */\n  let keyPath = $state('');\n\n  const keyPathPrefix = $derived(!keyPath ? '' : `${keyPath}:${randomId}:`);\n\n  /**\n   * Get the wrapper element.\n   * @returns {HTMLElement | undefined} Wrapper.\n   */\n  export const getElement = () => wrapper;\n\n  /**\n   * Key to store the current values in the {@link entryDraft}. Usually `currentValues`, but we use\n   * `extraValues` here to store additional values for a Markdown editor component.\n   * @type {DraftValueStoreKey}\n   */\n  const valueStoreKey = 'extraValues';\n\n  /**\n   * Current values for the editor component. These Values are stored in the {@link entryDraft}\n   * under the `extraValues` key, with the key path prefixed with the parent field’s key path, e.g.\n   * `body:c12:image`.\n   * @type {RawEntryContent | undefined}\n   */\n  const currentValues = $derived.by(() => {\n    if (!($entryDraft && locale && keyPath)) {\n      return undefined;\n    }\n\n    return unflatten(\n      Object.fromEntries(\n        Object.entries($state.snapshot($entryDraft[valueStoreKey][locale] ?? {}))\n          .filter(([key]) => key.startsWith(keyPathPrefix))\n          .map(([key, value]) => [key.replace(keyPathPrefix, ''), value]),\n      ),\n    );\n  });\n\n  onMount(() => {\n    window.requestAnimationFrame(() => {\n      locale = /** @type {string} */ (\n        /** @type {HTMLElement} */ (wrapper?.closest('[data-locale]'))?.dataset.locale\n      );\n      keyPath = /** @type {string} */ (\n        /** @type {HTMLElement} */ (wrapper?.closest('[data-key-path]'))?.dataset.keyPath\n      );\n    });\n\n    return () => {\n      // Remove the values from the draft when the component is unmounted\n      if ($entryDraft && valueStoreKey === 'extraValues') {\n        Object.keys($entryDraft[valueStoreKey][locale] ?? {}).forEach((key) => {\n          if (key.startsWith(keyPathPrefix)) {\n            delete $entryDraft[valueStoreKey][locale][key];\n          }\n        });\n      }\n    };\n  });\n\n  $effect(() => {\n    void [values, locale, keyPath];\n\n    untrack(() => {\n      if ($entryDraft && locale && keyPath) {\n        values ??= unflatten(getDefaultValues(fields, locale)) ?? {};\n        values.__sc_component_name = componentName;\n\n        if (!equal(values, currentValues)) {\n          Object.assign(\n            $entryDraft[valueStoreKey][locale],\n            Object.fromEntries(\n              Object.entries(flatten(values)).map(([key, value]) => [\n                `${keyPathPrefix}${key}`,\n                value,\n              ]),\n            ),\n          );\n        }\n      }\n    });\n  });\n\n  $effect(() => {\n    onChange(new CustomEvent('update', { detail: currentValues }));\n  });\n</script>\n\n<!-- svelte-ignore a11y_no_noninteractive_tabindex -->\n<div\n  role=\"group\"\n  class=\"wrapper\"\n  bind:this={wrapper}\n  contenteditable=\"false\"\n  tabindex=\"0\"\n  aria-label={label}\n  data-component-name={componentName}\n  onkeydowncapture={(event) => {\n    // Allow to select all in any `TextInput` within the component below using Ctrl+A\n    event.stopPropagation();\n  }}\n  onkeydown={(event) => {\n    if (\n      !(/** @type {HTMLElement} */ (event.target).matches('button, input, textarea')) &&\n      event.key !== 'Tab'\n    ) {\n      event.preventDefault();\n    }\n\n    if (event.target === wrapper && event.key === 'Backspace') {\n      onChange(new CustomEvent('remove'));\n    }\n  }}\n>\n  <header role=\"none\">\n    <h3 role=\"none\">{label}</h3>\n    <Button\n      size=\"small\"\n      iconic\n      aria-label={$_('remove')}\n      onclick={() => {\n        onChange(new CustomEvent('remove'));\n      }}\n    >\n      {#snippet startIcon()}\n        <Icon name=\"close\" />\n      {/snippet}\n    </Button>\n  </header>\n  {#if locale && keyPath}\n    {#each fields as fieldConfig (fieldConfig.name)}\n      <VisibilityObserver>\n        <FieldEditor\n          {locale}\n          keyPath=\"{keyPathPrefix}{fieldConfig.name}\"\n          {fieldConfig}\n          context=\"markdown-editor-component\"\n          {valueStoreKey}\n        />\n      </VisibilityObserver>\n    {/each}\n  {/if}\n</div>\n\n<style lang=\"scss\">\n  .wrapper {\n    display: inline-block; // Cancel underline if the component is within a link\n    border: 1px solid var(--sui-secondary-border-color);\n    border-radius: 4px;\n    width: 100%;\n    color: var(--sui-secondary-foreground-color); // Reset color within a link\n    background-color: var(--sui-primary-background-color);\n    white-space: normal;\n    -webkit-user-select: none;\n    user-select: none;\n\n    &:focus {\n      outline-color: var(--sui-primary-accent-color-translucent);\n    }\n\n    & > header {\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      color: var(--sui-secondary-foreground-color);\n      background-color: var(--sui-selected-background-color);\n\n      h3 {\n        padding: 0 8px;\n        font-size: var(--sui-font-size-small);\n        font-weight: 600;\n      }\n\n      :global(button) {\n        padding: 0;\n        height: 16px;\n      }\n    }\n\n    // Make the input fields compact within the built-in image component\n    &:is([data-component-name='image'], [data-component-name='linked-image']) {\n      :global {\n        @media (768px <= width) {\n          [data-widget] {\n            border-width: 0;\n          }\n\n          [data-widget='string'] {\n            display: flex;\n            align-items: center;\n            gap: 8px;\n            padding-block: 0 16px;\n\n            h4 {\n              margin-bottom: 0 !important;\n            }\n\n            .widget-wrapper {\n              flex: auto;\n            }\n          }\n        }\n      }\n    }\n  }\n</style>\n","/* eslint-disable max-classes-per-file */\n\nimport { DecoratorNode, getNearestEditorFromDOMNode } from 'lexical';\nimport { flushSync, mount, tick, unmount } from 'svelte';\nimport { get } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport Component from '$lib/components/contents/details/widgets/markdown/component.svelte';\nimport { customComponents } from '$lib/services/contents/widgets/markdown';\n\n/**\n * @import {\n * DOMConversion,\n * DOMConversionMap,\n * DOMConversionOutput,\n * DOMExportOutput,\n * LexicalEditor,\n * LexicalNode,\n * NodeKey,\n * SerializedLexicalNode,\n * } from 'lexical';\n * @import { TextMatchTransformer, Transformer } from '@lexical/markdown';\n * @import { EditorComponentDefinition } from '$lib/types/public';\n */\n\n/**\n * @typedef {object} CustomNodeFeatures\n * @property {any} node Lexical node class implementation.\n * @property {(props?: Record<string, any>) => LexicalNode} createNode Function to create a new node\n * instance.\n * @property {Transformer} transformer Node transformer.\n */\n\n/**\n * Escape some Markdown characters in the given object’s property values.\n * @param {Record<string, any> | null} props Object containing original strings.\n * @returns {Record<string, string>} Object containing escaped strings.\n */\nconst escapeAllChars = (props) => {\n  if (!props) {\n    return {};\n  }\n\n  return Object.fromEntries(\n    Object.entries(props).map(([key, val]) => [\n      key,\n      typeof val === 'string' ? val.trim().replace(/[\"()[[\\]]/g, '\\\\$&') : '',\n    ]),\n  );\n};\n\n/**\n * Get a component definition. This has to be a function due to localized labels.\n * @param {string} name Component name.\n * @returns {EditorComponentDefinition | undefined} Definition.\n */\nexport const getComponentDef = (name) => {\n  if (name in customComponents) {\n    return customComponents[name];\n  }\n\n  const imageProps = {\n    icon: 'image',\n    label: get(_)('editor_components.image'),\n    fields: [\n      { name: 'src', label: get(_)('editor_components.src'), widget: 'image' },\n      { name: 'alt', label: get(_)('editor_components.alt'), required: false },\n      { name: 'title', label: get(_)('editor_components.title'), required: false },\n    ],\n  };\n\n  /* eslint-disable jsdoc/require-jsdoc */\n  /** @type {Record<string, EditorComponentDefinition>} */\n  const definitions = {\n    image: {\n      ...imageProps,\n      id: 'image',\n      pattern: /!\\[(?<alt>.*?)\\]\\((?<src>.*?)(?: \"(?<title>.*?)\")?\\)/,\n      toBlock: (props) => {\n        const { src, alt, title } = escapeAllChars(props);\n\n        return src ? `![${alt}](${src}${title ? ` \"${title}\"` : ''})` : '';\n      },\n      toPreview: (props) => {\n        const { src, alt, title } = escapeAllChars(props);\n\n        // Return `<img>` even if `src` is empty to make sure the `tagName` below works\n        return `<img src=\"${src}\" alt=\"${alt}\" title=\"${title}\">`;\n      },\n    },\n    'linked-image': {\n      ...imageProps,\n      id: 'linked-image',\n      fields: [\n        ...imageProps.fields,\n        { name: 'link', label: get(_)('editor_components.link'), required: false },\n      ],\n      pattern: /\\[?!\\[(?<alt>.*?)\\]\\((?<src>.*?)(?: \"(?<title>.*?)\")?\\)(?:\\]\\((?<link>.*?)\\))?/,\n      toBlock: (props) => {\n        const { src, alt, title, link } = escapeAllChars(props);\n        const img = src ? `![${alt}](${src}${title ? ` \"${title}\"` : ''})` : '';\n\n        return img && link ? `[${img}](${link})` : img;\n      },\n      toPreview: (props) => {\n        const { src, alt, title, link } = escapeAllChars(props);\n        const img = `<img src=\"${src}\" alt=\"${alt}\" title=\"${title}\">`;\n\n        // Return `<img>` even if `src` is empty to make sure the `tagName` below works\n        return link ? `<a href=\"${link}\">${img}</a>` : img;\n      },\n    },\n    /* eslint-enable jsdoc/require-jsdoc */\n  };\n\n  return definitions[name];\n};\n\n/**\n * Get the {@link CustomNode} class and related features for Lexical.\n * @param {EditorComponentDefinition} componentDef Component definition.\n * @returns {CustomNodeFeatures} The {@link CustomNode} class, a method to create a new node, and\n * the transformer definition.\n */\nconst getCustomNodeFeatures = ({\n  id: componentName,\n  label,\n  fields,\n  pattern,\n  fromBlock,\n  toBlock,\n  toPreview,\n}) => {\n  const preview = toPreview({});\n\n  const tagName =\n    typeof preview === 'string'\n      ? preview.trim().match(/^<(?<tagName>[a-z]+)/i)?.groups?.tagName\n      : undefined;\n\n  /**\n   * Genetic custom node.\n   * @augments {DecoratorNode<any>}\n   * @see https://github.com/facebook/lexical/blob/main/packages/lexical-playground/src/nodes/ImageNode.tsx\n   */\n  class CustomNode extends DecoratorNode {\n    /**\n     * Field properties.\n     * @type {Record<string, any> | undefined}\n     */\n    __props;\n\n    /**\n     * Create a new {@link CustomNode} instance.\n     * @param {Record<string, any>} [props] Field properties.\n     * @param {NodeKey} [key] Node key.\n     */\n    constructor(props, key) {\n      super(key);\n      this.__props = props;\n    }\n\n    /**\n     * Get the node type.\n     * @returns {string} Type.\n     */\n    static getType() {\n      return componentName;\n    }\n\n    /**\n     * Whether the node is an inline node.\n     * @returns {boolean} Result.\n     */\n    isInline() {\n      return true;\n    }\n\n    /**\n     * Clone the given node.\n     * @param {CustomNode} node Node.\n     * @returns {CustomNode} New node.\n     */\n    static clone(node) {\n      return new CustomNode(node.__props, node.__key);\n    }\n\n    /**\n     * Import JSON.\n     * @param {SerializedLexicalNode} serializedNode Input.\n     * @returns {CustomNode} New node.\n     */\n    static importJSON(serializedNode) {\n      // eslint-disable-next-line no-use-before-define\n      return createNode().updateFromJSON(serializedNode);\n    }\n\n    /**\n     * Export the node as JSON.\n     * @returns {SerializedLexicalNode} Output.\n     */\n    exportJSON() {\n      return {\n        ...this.__props,\n        type: componentName,\n        version: 1,\n      };\n    }\n\n    /**\n     * Create a DOM node.\n     * @returns {HTMLElement} New element.\n     */\n    createDOM() {\n      /** @type {HTMLElement} */\n      let wrapper;\n      /** @type {LexicalEditor | null} */\n      let editor = null;\n      /** @type {Component} */\n      let component;\n\n      /**\n       * Custom `Change` event handler.\n       * @param {CustomEvent} event `Change` event.\n       */\n      const onChange = async ({ type, detail }) => {\n        await tick();\n\n        editor ??= getNearestEditorFromDOMNode(wrapper);\n\n        editor?.update(() => {\n          if (type === 'update') {\n            try {\n              this.getWritable().__props = detail;\n            } catch {\n              //\n            }\n          }\n\n          if (type === 'remove') {\n            unmount(component);\n            this.remove();\n          }\n        });\n      };\n\n      component = mount(Component, {\n        target: document.createElement('div'),\n        props: {\n          componentName,\n          label,\n          fields,\n          values: this.__props,\n          onChange,\n        },\n      });\n\n      // Wait for the component to be mounted\n      // @see https://svelte.dev/docs/svelte/v5-migration-guide#Components-are-no-longer-classes\n      flushSync();\n\n      wrapper = /** @type {HTMLElement} */ (component.getElement());\n\n      window.requestAnimationFrame(() => {\n        wrapper.focus();\n      });\n\n      return wrapper;\n    }\n\n    /**\n     * Export the node as a DOM node.\n     * @returns {DOMExportOutput} Output.\n     */\n    exportDOM() {\n      return { element: this.createDOM() };\n    }\n\n    /**\n     * Import a DOM node.\n     * @returns {DOMConversionMap} Conversion map.\n     */\n    static importDOM() {\n      /** @type {DOMConversionMap} */\n      const conversionMap = {};\n\n      if (tagName) {\n        /**\n         * Conversion map item.\n         * @returns {DOMConversion} Conversion.\n         */\n        conversionMap[tagName] = () => ({\n          /**\n           * Conversion.\n           * @param {HTMLElement} element Element.\n           * @returns {DOMConversionOutput} Output.\n           */\n          conversion: (element) => ({\n            // eslint-disable-next-line no-use-before-define\n            node: createNode(\n              Object.fromEntries(\n                fields.map(({ name }) => [\n                  name,\n                  /** @type {Record<string, any>} */ (element)[name] ?? '',\n                ]),\n              ),\n            ),\n          }),\n          priority: 3,\n        });\n      }\n\n      if (componentName === 'linked-image') {\n        // Add extra conversion for the built-in image component to support linked images\n        Object.assign(conversionMap, {\n          /**\n           * Conversion map item.\n           * @param {Node} node Target node.\n           * @returns {DOMConversion | null} Conversion.\n           */\n          a: (node) => {\n            if (node.firstChild?.nodeName.toLowerCase() === 'img') {\n              const { href: link } = /** @type {HTMLAnchorElement} */ (node);\n              const { src, alt, title } = /** @type {HTMLImageElement} */ (node.firstChild);\n\n              return {\n                /**\n                 * Conversion.\n                 * @returns {DOMConversionOutput} Output.\n                 */\n                conversion: () => ({\n                  // eslint-disable-next-line no-use-before-define\n                  node: createNode({ src, alt, title, link }),\n                  // eslint-disable-next-line jsdoc/require-jsdoc\n                  after: () => [],\n                }),\n                priority: 4,\n              };\n            }\n\n            return null;\n          },\n        });\n      }\n\n      return conversionMap;\n    }\n\n    /**\n     * Update the DOM.\n     * @returns {boolean} Result.\n     */\n    updateDOM() {\n      return false;\n    }\n\n    /**\n     * Decorator.\n     * @returns {null} Unused.\n     */\n    decorate() {\n      return null;\n    }\n  }\n\n  /**\n   * Create a new {@link CustomNode} instance.\n   * @param {Record<string, any>} [props] Component properties.\n   * @returns {CustomNode} New node.\n   */\n  const createNode = (props) => new CustomNode(props);\n  /**\n   * Whether the given node is an instance of {@link CustomNode}.\n   * @param {import(\"lexical\").LexicalNode | null | undefined} node Node.\n   * @returns {boolean} Result.\n   */\n  const isCustomNode = (node) => node instanceof CustomNode && node.getType() === componentName;\n\n  /**\n   * Implement a Markdown transformer for {@link CustomNode}.\n   * @type {TextMatchTransformer}\n   * @see https://github.com/facebook/lexical/blob/main/packages/lexical-playground/src/plugins/MarkdownTransformers/index.ts#L75-L97\n   */\n  const transformer = {\n    dependencies: [CustomNode],\n    /**\n     * Convert the given node to Markdown.\n     * @param {import(\"lexical\").LexicalNode} node Node.\n     * @returns {string | null} Markdown string.\n     */\n    export: (node) => {\n      if (isCustomNode(node)) {\n        return toBlock(/** @type {CustomNode} */ (node).__props ?? {});\n      }\n\n      return null;\n    },\n    importRegExp: pattern,\n    regExp: pattern,\n    /**\n     * Replace the current text node with a new {@link CustomNode}.\n     * @param {import(\"lexical\").TextNode} textNode Parent node.\n     * @param {string[]} match Matching result.\n     */\n    replace: (textNode, match) => {\n      const matchArray = /** @type {RegExpMatchArray} */ (match);\n      const props = fromBlock?.(matchArray) ?? matchArray.groups ?? {};\n\n      textNode.replace(createNode(props));\n    },\n    type: 'text-match',\n  };\n\n  return { node: CustomNode, createNode, transformer };\n};\n\n/**\n * Cache the class and related features to avoid a Lexical error saying “Type ... In node CustomNode\n * does not match registered node CustomNode with the same type”.\n * @type {Map<string, CustomNodeFeatures>}\n */\nconst featureCacheMap = new Map();\n\n/**\n * Text editor component implementation.\n */\nexport class EditorComponent {\n  /**\n   * Create an `EditorComponent` instance.\n   * @param {EditorComponentDefinition} componentDef Component definition.\n   */\n  constructor(componentDef) {\n    const { id } = componentDef;\n    const cache = featureCacheMap.get(id);\n    const features = cache ?? getCustomNodeFeatures(componentDef);\n\n    if (!cache) {\n      featureCacheMap.set(id, features);\n    }\n\n    Object.assign(this, { ...componentDef, ...features });\n  }\n}\n","import { isObjectArray } from '@sveltia/utils/array';\nimport { escapeRegExp } from '@sveltia/utils/string';\n\n/**\n * @import { FlattenedEntryContent } from '$lib/types/private';\n * @import { FieldKeyPath, SelectField } from '$lib/types/public';\n */\n\n/**\n * @type {Map<string, any | any[]>}\n */\nconst labelCacheMap = new Map();\n\n/**\n * Get the display value for an option.\n * @param {object} args Arguments.\n * @param {SelectField} args.fieldConfig Field configuration.\n * @param {FlattenedEntryContent} args.valueMap Object holding current entry values.\n * @param {FieldKeyPath} args.keyPath Field key path, e.g. `author.name`.\n * @returns {any | any[]} Resolved field value(s).\n */\nexport const getOptionLabel = ({ fieldConfig, valueMap, keyPath }) => {\n  const cacheKey = JSON.stringify({ fieldConfig, valueMap, keyPath });\n  const cache = labelCacheMap.get(cacheKey);\n\n  if (cache) {\n    return cache;\n  }\n\n  const { multiple, options } = fieldConfig;\n  const hasLabels = isObjectArray(options);\n\n  /**\n   * Get the label by value.\n   * @param {any} _value Stored value.\n   * @returns {string} Label.\n   */\n  const getLabel = (_value) =>\n    /** @type {{ label: string, value: string }[]} */ (options).find((o) => o.value === _value)\n      ?.label || _value;\n\n  if (multiple) {\n    const values = Object.entries(valueMap)\n      .filter(([key]) => key.match(`^${escapeRegExp(keyPath)}\\\\.\\\\d+$`))\n      .map(([, _value]) => _value);\n\n    const labels = hasLabels ? values.map(getLabel) : values;\n\n    labelCacheMap.set(cacheKey, labels);\n\n    return labels;\n  }\n\n  const value = valueMap[keyPath];\n  const label = hasLabels ? getLabel(value) : value;\n\n  labelCacheMap.set(cacheKey, label);\n\n  return label;\n};\n","import { escapeRegExp } from '@sveltia/utils/string';\n\nimport {\n  applyTransformations,\n  DATE_TRANSFORMATION_REGEX,\n} from '$lib/services/common/transformations';\nimport { getCollection } from '$lib/services/contents/collection';\nimport { getCollectionFile } from '$lib/services/contents/collection/files';\nimport { getIndexFile, isCollectionIndexFile } from '$lib/services/contents/collection/index-file';\nimport { getCanonicalLocale, getListFormatter } from '$lib/services/contents/i18n';\nimport { MULTI_VALUE_WIDGETS } from '$lib/services/contents/widgets';\nimport { getDateTimeFieldDisplayValue } from '$lib/services/contents/widgets/date-time/helper';\nimport { getComponentDef } from '$lib/services/contents/widgets/markdown/component';\nimport { getReferencedOptionLabel } from '$lib/services/contents/widgets/relation/helper';\nimport { getOptionLabel } from '$lib/services/contents/widgets/select/helper';\n\n/**\n * @import {\n * Entry,\n * FlattenedEntryContent,\n * GetFieldArgs,\n * InternalLocaleCode,\n * } from '$lib/types/private';\n * @import {\n * DateTimeField,\n * Field,\n * FieldKeyPath,\n * ListField,\n * MultiValueField,\n * NumberField,\n * RelationField,\n * SelectField,\n * } from '$lib/types/public';\n */\n\n/**\n * @type {Map<string, Field | undefined>}\n */\nexport const fieldConfigCacheMap = new Map();\n\n/**\n * Get a field’s config object that matches the given field name (key path).\n * @param {GetFieldArgs} args Arguments.\n * @returns {Field | undefined} Field configuration.\n */\nexport const getField = (args) => {\n  const cacheKey = JSON.stringify(args);\n\n  if (fieldConfigCacheMap.has(cacheKey)) {\n    return fieldConfigCacheMap.get(cacheKey);\n  }\n\n  const {\n    collectionName,\n    fileName = undefined,\n    componentName = undefined,\n    valueMap = {},\n    keyPath,\n    isIndexFile = false,\n  } = args;\n\n  const collection = getCollection(collectionName);\n\n  const collectionFile =\n    collection && fileName ? getCollectionFile(collection, fileName) : undefined;\n\n  // For entry collections, `fileName` is ignored and `collectionFile` will be `undefined`\n  // Only fail if we explicitly need a file/singleton collection but can’t find the file\n  if (!collection || (fileName && collection?._type !== 'entry' && !collectionFile)) {\n    fieldConfigCacheMap.set(cacheKey, undefined);\n\n    return undefined;\n  }\n\n  const { fields: regularFields = [] } = collectionFile ?? collection;\n  const indexFile = isIndexFile ? getIndexFile(collection) : undefined;\n\n  const fields = componentName\n    ? (getComponentDef(componentName)?.fields ?? [])\n    : (indexFile?.fields ?? regularFields);\n\n  const keyPathArray = keyPath.split('.');\n  /** @type {Field | undefined} */\n  let field;\n\n  keyPathArray.forEach((key, index) => {\n    if (index === 0) {\n      field = fields.find(({ name }) => name === key);\n\n      // If using index file and field not found, try regular fields as fallback\n      if (!field && indexFile?.fields) {\n        field = regularFields.find(({ name }) => name === key);\n      }\n    } else if (field) {\n      const isNumericKey = /^\\d+$/.test(key);\n      const keyPathArraySub = keyPathArray.slice(0, index);\n      const { widget = 'text' } = field;\n\n      // Handle multi-value widgets with numeric keys, e.g. `authors.0`\n      if (isNumericKey && MULTI_VALUE_WIDGETS.includes(widget)) {\n        // For single value field, numeric access is not allowed\n        if (!(/** @type {MultiValueField} */ (field).multiple)) {\n          field = undefined;\n        }\n\n        return;\n      }\n\n      // Handle all other widgets (List, Object, etc.)\n      const {\n        field: subField,\n        fields: subFields,\n        types,\n        typeKey = 'type',\n      } = /** @type {ListField} */ (field);\n\n      if (subField) {\n        const subFieldName = isNumericKey ? keyPathArray[index + 1] : undefined;\n\n        // It’s possible to get a single-subfield List field with or without a subfield name (e.g.\n        // `image.0` or `image.0.src`), but when a subfield name is specified, check if it’s valid\n        field = !subFieldName || subField.name === subFieldName ? subField : undefined;\n      } else if (subFields && isNumericKey) {\n        // For list widgets with multiple fields, numeric keys (like \"0\") should be skipped\n        // Keep the current field (the list widget) and continue to the next part of the path field\n        // remains unchanged\n      } else if (subFields && !isNumericKey) {\n        field = subFields.find(({ name }) => name === key);\n      } else if (types && isNumericKey) {\n        // List widget variable types\n        // @ts-ignore\n        field = types.find(\n          ({ name }) => name === valueMap[[...keyPathArraySub, key, typeKey].join('.')],\n        );\n      } else if (types && key !== typeKey) {\n        // Object widget variable types\n        field = types\n          .find(({ name }) => name === valueMap[[...keyPathArraySub, typeKey].join('.')])\n          ?.fields?.find(({ name }) => name === key);\n      } else {\n        // If we reach here, the list field is malformed (no `field`, `fields`, or `types`) and\n        // we’re trying to access a nested path, so return undefined\n        field = undefined;\n      }\n    }\n  });\n\n  fieldConfigCacheMap.set(cacheKey, field);\n\n  return field;\n};\n\n/**\n * Check if the field requires data input (and data output if the `omit_empty_optional_fields`\n * option is `true`).\n * @param {object} args Arguments.\n * @param {Field} args.fieldConfig Field configuration.\n * @param {InternalLocaleCode} args.locale Current pane’s locale.\n * @returns {boolean} Result.\n */\nexport const isFieldRequired = ({ fieldConfig: { required = true }, locale }) =>\n  Array.isArray(required) ? required.includes(locale) : !!required;\n\n/**\n * Get a field’s display value that matches the given field name (key path).\n * @param {object} args Arguments.\n * @param {string} args.collectionName Collection name.\n * @param {string} [args.fileName] Collection file name. File/singleton collection only.\n * @param {FlattenedEntryContent} [args.valueMap] Object holding current entry values.\n * @param {FieldKeyPath} args.keyPath Key path, e.g. `author.name`.\n * @param {InternalLocaleCode} args.locale Locale.\n * @param {string[]} [args.transformations] String transformations.\n * @param {boolean} [args.isIndexFile] Whether the corresponding entry is the collection’s special\n * index file used specifically in Hugo.\n * @returns {string} Resolved display value.\n */\nexport const getFieldDisplayValue = ({\n  collectionName,\n  fileName,\n  valueMap = {},\n  keyPath,\n  locale,\n  transformations,\n  isIndexFile = false,\n}) => {\n  const fieldConfig = getField({ collectionName, fileName, valueMap, keyPath, isIndexFile });\n  let value = valueMap[keyPath];\n\n  // If the field doesn’t exist in `valueMap` and transformations are applied, return empty string\n  if (value === undefined && transformations?.length) {\n    return '';\n  }\n\n  if (fieldConfig?.widget === 'datetime') {\n    // If the `date` transformation is provided, do nothing; it should be used instead of the field\n    // `format` option, so the keep the original value for `applyTransformations()`\n    if (!transformations?.some((tf) => DATE_TRANSFORMATION_REGEX.test(tf))) {\n      value = getDateTimeFieldDisplayValue({\n        locale,\n        // eslint-disable-next-line object-shorthand\n        fieldConfig: /** @type {DateTimeField} */ (fieldConfig),\n        currentValue: value,\n      });\n    }\n  }\n\n  if (fieldConfig?.widget === 'relation') {\n    value = getReferencedOptionLabel({\n      // eslint-disable-next-line object-shorthand\n      fieldConfig: /** @type {RelationField} */ (fieldConfig),\n      valueMap,\n      keyPath,\n      locale,\n    });\n  }\n\n  if (fieldConfig?.widget === 'select') {\n    value = getOptionLabel({\n      // eslint-disable-next-line object-shorthand\n      fieldConfig: /** @type {SelectField} */ (fieldConfig),\n      valueMap,\n      keyPath,\n    });\n  }\n\n  if (fieldConfig?.widget === 'list') {\n    const { fields, types } = /** @type {ListField} */ (fieldConfig);\n\n    if (fields || types) {\n      // Ignore\n    } else {\n      // Concat values of single field list or simple list\n      value = getListFormatter(locale).format(\n        Object.entries(valueMap)\n          .filter(\n            ([key, val]) =>\n              key.match(`^${escapeRegExp(keyPath)}\\\\.\\\\d+$`) && typeof val === 'string' && !!val,\n          )\n          .map(([, val]) => val),\n      );\n    }\n  }\n\n  if (fieldConfig?.widget === 'number') {\n    const { value_type: valueType = 'int' } = /** @type {NumberField} */ (fieldConfig);\n\n    if (valueType === 'int' || valueType === 'float') {\n      value = Intl.NumberFormat(getCanonicalLocale(locale)).format(Number(value));\n    }\n  }\n\n  if (Array.isArray(value)) {\n    value = getListFormatter(locale).format(value);\n  }\n\n  if (transformations?.length) {\n    value = applyTransformations({ fieldConfig, value, transformations });\n  }\n\n  // Return an empty string if the value is null or undefined\n  return String(value ?? '');\n};\n\n/**\n * Get the display value of the first visible field that has a non-empty value.\n * @param {object} args Arguments.\n * @param {FlattenedEntryContent} args.valueMap Entry content.\n * @param {InternalLocaleCode} args.locale Locale code.\n * @param {FieldKeyPath} args.keyPath Field key path.\n * @param {GetFieldArgs} args.getFieldArgs Arguments for `getField`.\n * @param {RegExp} args.keyPathRegex Regular expression to match the key path prefix.\n * @returns {string} Display value of the first visible field that has a non-empty value. If no such\n * field is found, returns an empty string.\n */\nexport const getVisibleFieldDisplayValue = ({\n  valueMap,\n  locale,\n  keyPath,\n  keyPathRegex,\n  getFieldArgs,\n}) => {\n  // Find the first visible item key path that has a non-empty value\n  const visibleItemKeyPath = [`${keyPath}.title`, `${keyPath}.name`, ...Object.keys(valueMap)].find(\n    (_keyPath) => {\n      const value = valueMap[_keyPath];\n\n      if (\n        !keyPathRegex.test(_keyPath) ||\n        !(\n          (typeof value === 'string' && value.trim()) ||\n          (typeof value === 'number' && !Number.isNaN(value))\n        )\n      ) {\n        return false;\n      }\n\n      const fieldConfig = getField({ ...getFieldArgs, keyPath: _keyPath });\n\n      return !!fieldConfig && fieldConfig.widget !== 'hidden';\n    },\n  );\n\n  if (visibleItemKeyPath) {\n    return getFieldDisplayValue({ ...getFieldArgs, keyPath: visibleItemKeyPath, locale });\n  }\n\n  return '';\n};\n\n/**\n * Get an entry’s field value by locale and key.\n * @param {object} args Arguments.\n * @param {Entry} args.entry Entry.\n * @param {InternalLocaleCode} args.locale Locale code.\n * @param {string} args.collectionName Name of a collection that the entry belongs to.\n * @param {FieldKeyPath | string} args.key Field key path or one of other entry metadata property\n * keys: `slug`, `commit_author` and `commit_date`.\n * @param {boolean} [args.resolveRef] Whether to resolve the referenced value if the target field is\n * a relation field.\n * @returns {any} Value.\n */\nexport const getPropertyValue = ({ entry, locale, collectionName, key, resolveRef = true }) => {\n  const { slug, locales, commitAuthor: { name, login, email } = {}, commitDate } = entry;\n\n  if (key === 'slug') {\n    return slug;\n  }\n\n  if (key === 'commit_author') {\n    return name || login || email;\n  }\n\n  if (key === 'commit_date') {\n    return commitDate;\n  }\n\n  const { content } = locales[locale] ?? {};\n\n  if (content === undefined) {\n    return undefined;\n  }\n\n  const collection = getCollection(collectionName);\n\n  if (!collection) {\n    return undefined;\n  }\n\n  if (resolveRef) {\n    const isIndexFile = isCollectionIndexFile(collection, entry);\n    const fieldConfig = getField({ collectionName, keyPath: key, isIndexFile });\n\n    // Resolve the displayed value for a relation field\n    if (fieldConfig?.widget === 'relation') {\n      return getReferencedOptionLabel({\n        // eslint-disable-next-line object-shorthand\n        fieldConfig: /** @type {RelationField} */ (fieldConfig),\n        valueMap: content,\n        keyPath: key,\n        locale,\n      });\n    }\n  }\n\n  return content[key];\n};\n","// cspell:disable-next-line\nconst FULL_REGEX_PATTERN = /^\\/?(?<pattern>.+?)(?:\\/(?<flags>[dgimsuy]*))?$/;\n\n/**\n * Return a RegExp object based on the provided pattern. If the pattern is already a RegExp, it\n * returns it as is. If the pattern is a string, it converts it to a RegExp. If the pattern is\n * neither, it returns undefined.\n * @param {any} input Input pattern which can be a string or RegExp.\n * @returns {RegExp | undefined} The RegExp object or undefined if the pattern is invalid.\n */\nexport const getRegex = (input) => {\n  if (input instanceof RegExp) {\n    return input;\n  }\n\n  if (typeof input === 'string') {\n    // Parse the regex to support simple pattern, e.g `.{12,}`, and complete expression, e.g.\n    // `/^.{0,280}$/s`\n    const { pattern, flags } = input.match(FULL_REGEX_PATTERN)?.groups ?? {};\n\n    if (pattern) {\n      try {\n        return new RegExp(pattern, flags);\n      } catch {\n        // Ignore invalid regex\n      }\n    }\n  }\n\n  return undefined;\n};\n","import { get, writable } from 'svelte/store';\n\nimport { getMediaFieldURL } from '$lib/services/assets/info';\nimport { siteConfig } from '$lib/services/config';\nimport { allEntries } from '$lib/services/contents';\nimport { getCollection } from '$lib/services/contents/collection';\nimport { getCollectionFilesByEntry } from '$lib/services/contents/collection/files';\nimport { isCollectionIndexFile } from '$lib/services/contents/collection/index-file';\nimport { getAssociatedCollections } from '$lib/services/contents/entry';\nimport { getField, getPropertyValue } from '$lib/services/contents/entry/fields';\nimport { getRegex } from '$lib/services/utils/misc';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import {\n * Entry,\n * FlattenedEntryContent,\n * InternalCollection,\n * InternalCollectionFile,\n * } from '$lib/types/private';\n * @import { FieldKeyPath } from '$lib/types/public';\n */\n\n/**\n * Regular expression to match `![alt](src \"title\")`.\n */\nexport const MARKDOWN_IMAGE_REGEX = /!\\[.*?\\]\\((.+?)(?:\\s+\".*?\")?\\)/g;\n\n/**\n * @type {Writable<Entry[]>}\n */\nexport const selectedEntries = writable([]);\n\n/**\n * Get entries by the given collection name, while applying a filer if needed.\n * @param {string} collectionName Collection name.\n * @returns {Entry[]} Entries.\n * @see https://decapcms.org/docs/collection-folder/#filtered-folder-collections\n */\nexport const getEntriesByCollection = (collectionName) => {\n  const collection = getCollection(collectionName);\n\n  if (!collection) {\n    return [];\n  }\n\n  const {\n    filter,\n    _i18n: { defaultLocale: locale },\n  } = collection;\n\n  const filterField = filter?.field;\n  const filterPattern = getRegex(filter?.pattern);\n\n  const filterValues =\n    filter?.value === undefined ? [] : Array.isArray(filter.value) ? filter.value : [filter.value];\n\n  return get(allEntries).filter((entry) => {\n    if (!getAssociatedCollections(entry).some(({ name }) => name === collectionName)) {\n      return false;\n    }\n\n    if (!filterField) {\n      return true;\n    }\n\n    const value = getPropertyValue({ entry, locale, collectionName, key: filterField }) ?? null;\n\n    if (filterPattern) {\n      return filterPattern.test(value);\n    }\n\n    return filterValues.includes(value);\n  });\n};\n\n/**\n * Check if entry creation is allowed in the collection.\n * @param {InternalCollection | undefined} collection Collection.\n * @returns {boolean} Result.\n */\nexport const canCreateEntry = (collection) => {\n  if (!collection) {\n    return false;\n  }\n\n  const { _type, create = false, limit = Infinity } = collection;\n\n  if (_type !== 'entry') {\n    return true;\n  }\n\n  return create && getEntriesByCollection(collection.name).length < limit;\n};\n\n/**\n * Check if the field contains the asset.\n * @param {object} args Arguments.\n * @param {string} args.assetURL Asset’s public or blob URL.\n * @param {string} [args.newURL] New URL to replace the found URL.\n * @param {string} args.collectionName Collection name.\n * @param {Entry} args.entry Entry.\n * @param {FlattenedEntryContent} args.content Value map for the collection. This will be modified\n * if the URL is replaced.\n * @param {FieldKeyPath} args.keyPath Key path of the value in the collection.\n * @param {string} args.value Value of the field.\n * @param {boolean} args.isIndexFile Whether the corresponding entry is the collection’s special\n * index file used specifically in Hugo.\n * @param {InternalCollectionFile} [args.collectionFile] Collection file. File collection only.\n * @returns {Promise<boolean>} Result.\n */\nexport const hasAsset = async ({\n  assetURL,\n  newURL,\n  collectionName,\n  entry,\n  content,\n  keyPath,\n  value,\n  isIndexFile,\n  collectionFile,\n}) => {\n  const fileName = collectionFile?.name;\n  const field = getField({ collectionName, fileName, valueMap: content, keyPath, isIndexFile });\n\n  if (!field) {\n    return false;\n  }\n\n  const isBlobURL = assetURL.startsWith('blob:');\n  const getURLArgs = { entry, collectionName, fileName };\n  const { widget: widgetName = 'string' } = field;\n\n  if (['image', 'file'].includes(widgetName)) {\n    const match = isBlobURL\n      ? (await getMediaFieldURL({ ...getURLArgs, value })) === assetURL\n      : value === assetURL;\n\n    if (match && newURL) {\n      content[keyPath] = newURL;\n    }\n\n    return match;\n  }\n\n  // Search images in markdown body\n  if (widgetName === 'markdown') {\n    const matches = [...value.matchAll(MARKDOWN_IMAGE_REGEX)];\n\n    if (matches.length) {\n      return (\n        await Promise.all(\n          matches.map(async ([, src]) => {\n            const match =\n              (isBlobURL ? await getMediaFieldURL({ ...getURLArgs, value: src }) : src) ===\n              assetURL;\n\n            if (match && newURL) {\n              content[keyPath] = content[keyPath].replace(src, newURL);\n            }\n\n            return match;\n          }),\n        )\n      ).some(Boolean);\n    }\n  }\n\n  return false;\n};\n\n/**\n * Find entries by an asset URL, and replace the URL if needed.\n * @param {string} url Asset’s public or blob URL.\n * @param {object} [options] Options.\n * @param {Entry[]} [options.entries] Entries to be searched.\n * @param {string} [options.newURL] New URL to replace the found URL.\n * @returns {Promise<Entry[]>} Found (and replaced) entries.\n */\nexport const getEntriesByAssetURL = async (\n  url,\n  { entries = get(allEntries), newURL = '' } = {},\n) => {\n  const baseURL = get(siteConfig)?._baseURL;\n  const assetURL = baseURL && !url.startsWith('blob:') ? url.replace(baseURL, '') : url;\n\n  const results = await Promise.all(\n    entries.map(async (entry) => {\n      const { locales } = entry;\n      const collections = getAssociatedCollections(entry);\n\n      const _results = await Promise.all(\n        Object.values(locales).map(async ({ content }) => {\n          const __results = await Promise.all(\n            Object.entries(content).map(async ([keyPath, value]) => {\n              if (typeof value !== 'string' || !value) {\n                return false;\n              }\n\n              const ___results = await Promise.all(\n                collections.map(async (collection) => {\n                  const hasAssetArgs = {\n                    assetURL,\n                    newURL,\n                    collectionName: collection.name,\n                    entry,\n                    content,\n                    keyPath,\n                    value,\n                    isIndexFile: isCollectionIndexFile(collection, entry),\n                  };\n\n                  const collectionFiles = getCollectionFilesByEntry(collection, entry);\n\n                  if (collectionFiles.length) {\n                    return (\n                      await Promise.all(\n                        collectionFiles.map((collectionFile) =>\n                          hasAsset({ ...hasAssetArgs, collectionFile }),\n                        ),\n                      )\n                    ).includes(true);\n                  }\n\n                  return hasAsset({ ...hasAssetArgs });\n                }),\n              );\n\n              return ___results.includes(true);\n            }),\n          );\n\n          return __results.includes(true);\n        }),\n      );\n\n      return _results.includes(true);\n    }),\n  );\n\n  return entries.filter((_entry, index) => results[index]);\n};\n","import { generateUUID } from '@sveltia/utils/crypto';\nimport { getDateTimeParts } from '@sveltia/utils/datetime';\nimport { truncate } from '@sveltia/utils/string';\n\nimport { slugify } from '$lib/services/common/slug';\nimport {\n  applyTransformations,\n  DEFAULT_TRANSFORMATION_REGEX,\n} from '$lib/services/common/transformations';\nimport { getEntriesByCollection } from '$lib/services/contents/collection/entries';\nimport { getField } from '$lib/services/contents/entry/fields';\nimport { getEntrySummaryFromContent } from '$lib/services/contents/entry/summary';\nimport { renameIfNeeded } from '$lib/services/utils/file';\n\n/**\n * @import { EntryCollection, FillTemplateOptions, GetFieldArgs } from '$lib/types/private';\n */\n\n/**\n * @typedef {object} ReplaceSubContext\n * @property {string} identifierField Field name to identify the title.\n * @property {string | undefined} basePath Base path for the entry file.\n */\n\n/**\n * @typedef {object} ReplaceContext\n * @property {FillTemplateOptions & ReplaceSubContext} replaceSubContext Context for `replaceSub`.\n * @property {GetFieldArgs} getFieldArgs Arguments for `getField`.\n */\n\nconst DATE_TIME_FIELDS = ['year', 'month', 'day', 'hour', 'minute', 'second'];\nconst TEMPLATE_REGEX = /{{(.+?)}}(?!'\\))/g;\n\n/**\n * UUID generator functions mapped by tag name.\n */\nconst UUID_TYPES = {\n  // eslint-disable-next-line jsdoc/require-jsdoc\n  uuid: () => generateUUID(),\n  // eslint-disable-next-line jsdoc/require-jsdoc\n  uuid_short: () => generateUUID('short'),\n  // eslint-disable-next-line jsdoc/require-jsdoc\n  uuid_shorter: () => generateUUID('shorter'),\n};\n\n/**\n * Handles date-time related template tags.\n * @param {string} tag The template tag.\n * @param {Record<string, string>} dateTimeParts Date-time parts object.\n * @returns {string | undefined} The date-time value or undefined if not a date-time tag.\n */\nconst handleDateTimeTag = (tag, dateTimeParts) =>\n  DATE_TIME_FIELDS.includes(tag) ? dateTimeParts[tag] : undefined;\n\n/**\n * Handles UUID-related template tags.\n * @param {string} tag The template tag.\n * @returns {string | undefined} The UUID value or undefined if not a UUID tag.\n */\nconst handleUuidTag = (tag) => {\n  const uuidGenerator = UUID_TYPES[/** @type {keyof typeof UUID_TYPES} */ (tag)];\n\n  return uuidGenerator ? uuidGenerator() : undefined;\n};\n\n/**\n * Handles slug-related template tags.\n * @param {string} tag The template tag.\n * @param {string | undefined} currentSlug Current slug value.\n * @param {string} type Template type.\n * @param {boolean} isIndexFile Whether this is an index file.\n * @returns {string | undefined} The slug value or undefined if not a slug tag.\n */\nconst handleSlugTag = (tag, currentSlug, type, isIndexFile) => {\n  if (tag !== 'slug' || !currentSlug) {\n    return undefined;\n  }\n\n  // Return an empty string instead of `_index` when generating the preview path for an index file\n  // @see https://github.com/sveltia/sveltia-cms/issues/468\n  if (type === 'preview_path' && isIndexFile) {\n    return '';\n  }\n\n  return currentSlug;\n};\n\n/**\n * Handles file path related template tags.\n * @param {string} tag The template tag.\n * @param {string | undefined} entryFilePath Entry file path.\n * @param {string | undefined} basePath Base path.\n * @returns {string | undefined} The file path value or undefined if not a file path tag.\n */\nconst handleFilePathTag = (tag, entryFilePath, basePath) => {\n  if (!entryFilePath) {\n    return '';\n  }\n\n  switch (tag) {\n    case 'dirname': {\n      const pathAfterBase = entryFilePath.replace(basePath ?? '', '');\n      const lastSlashIndex = pathAfterBase.lastIndexOf('/');\n\n      return lastSlashIndex > 0 ? pathAfterBase.substring(0, lastSlashIndex) : '';\n    }\n\n    case 'filename': {\n      const fileName = /** @type {string} */ (entryFilePath.split('/').pop());\n\n      return fileName.split('.').shift();\n    }\n\n    case 'extension': {\n      const fileName = /** @type {string} */ (entryFilePath.split('/').pop());\n\n      return fileName.split('.').pop();\n    }\n\n    default:\n      return undefined;\n  }\n};\n\n/**\n * Gets field value from the value map.\n * @param {string} tag The template tag.\n * @param {Record<string, any>} valueMap Value map object.\n * @param {string} identifierField Identifier field name.\n * @returns {any} The field value.\n */\nconst getFieldValue = (tag, valueMap, identifierField) => {\n  if (tag.startsWith('fields.')) {\n    return valueMap[tag.replace(/^fields\\./, '')];\n  }\n\n  if (tag === 'slug') {\n    return getEntrySummaryFromContent(valueMap, { identifierField });\n  }\n\n  return valueMap[tag];\n};\n\n/**\n * Template tag replacer subroutine.\n * @param {string} tag Field name or one of special tags.\n * @param {FillTemplateOptions & ReplaceSubContext} context Context for replacement.\n * @returns {any} Replaced value.\n */\nconst replaceTemplateTag = (tag, context) => {\n  const {\n    type,\n    content: valueMap,\n    currentSlug,\n    entryFilePath,\n    locale,\n    dateTimeParts = getDateTimeParts({ timeZone: 'UTC' }),\n    identifierField,\n    basePath,\n    isIndexFile = false,\n  } = context;\n\n  // Handle date-time fields\n  const dateTimeValue = handleDateTimeTag(tag, dateTimeParts);\n\n  if (dateTimeValue !== undefined) {\n    return dateTimeValue;\n  }\n\n  // Handle slug tag\n  const slugValue = handleSlugTag(tag, currentSlug, type ?? '', isIndexFile);\n\n  if (slugValue !== undefined) {\n    return slugValue;\n  }\n\n  // Handle UUID tags\n  const uuidValue = handleUuidTag(tag);\n\n  if (uuidValue !== undefined) {\n    return uuidValue;\n  }\n\n  // Handle locale tag for preview path\n  if (type === 'preview_path' && tag === 'locale') {\n    return locale;\n  }\n\n  // Handle file path related tags\n  if (type === 'preview_path' || type === 'media_folder') {\n    const filePathValue = handleFilePathTag(tag, entryFilePath, basePath);\n\n    if (filePathValue !== undefined) {\n      return filePathValue;\n    }\n  }\n\n  // Handle field values\n  return getFieldValue(tag, valueMap, identifierField);\n};\n\n/**\n * Processes transformations for a template placeholder.\n * @param {string[]} transformations Array of transformation strings.\n * @param {FillTemplateOptions & ReplaceSubContext} replaceSubContext Context for replacement.\n * @returns {{ transformations: string[], hasDefaultTransformation: boolean }} Processed result.\n */\nconst processTransformations = (transformations, replaceSubContext) => {\n  let hasDefaultTransformation = false;\n\n  transformations.forEach((tf, index) => {\n    const { defaultValue } = tf.match(DEFAULT_TRANSFORMATION_REGEX)?.groups ?? {};\n\n    if (defaultValue !== undefined) {\n      hasDefaultTransformation = true;\n\n      // Support a template tag for the `default` transformation like\n      // `{{fields.slug | default('{{fields.title}}')}}`\n      const { innerTag } = defaultValue.match(/^{{(?<innerTag>.+?)}}$/)?.groups ?? {};\n\n      if (innerTag !== undefined) {\n        transformations[index] =\n          `default('${replaceTemplateTag(innerTag, replaceSubContext) ?? ''}')`;\n      }\n    }\n  });\n\n  return { transformations, hasDefaultTransformation };\n};\n\n/**\n * Template placeholder replacer.\n * @param {string} placeholder Field name or one of special tags. May contain transformations.\n * @param {ReplaceContext} context Context for replacement.\n * @returns {string} Replaced string.\n */\nconst replaceTemplatePlaceholder = (placeholder, { replaceSubContext, getFieldArgs }) => {\n  const [tag, ...rawTransformations] = placeholder.split(/\\s*\\|\\s*/);\n  let value = replaceTemplateTag(tag, replaceSubContext);\n\n  const { transformations, hasDefaultTransformation } = processTransformations(\n    rawTransformations,\n    replaceSubContext,\n  );\n\n  // Fall back with a random ID unless the `default` transformation is defined\n  if (value === undefined && !hasDefaultTransformation) {\n    return generateUUID('short');\n  }\n\n  if (transformations.length) {\n    value = applyTransformations({\n      fieldConfig: getField({ ...getFieldArgs, keyPath: tag }),\n      value,\n      transformations,\n    });\n  }\n\n  // Return the value as is when generating the preview path or media folder path\n  if (replaceSubContext.type) {\n    return String(value);\n  }\n\n  // Slugify the value for a slug or filename\n  return slugify(String(value));\n};\n\n/**\n * Creates existing slugs list for uniqueness validation.\n * @param {string} collectionName Collection name.\n * @param {string | undefined} locale Locale string.\n * @returns {string[]} List of existing slugs.\n */\nconst getExistingSlugs = (collectionName, locale) =>\n  getEntriesByCollection(collectionName)\n    .map((e) => (locale ? e.locales[locale]?.slug : e.slug))\n    .filter(Boolean);\n\n/**\n * Fills a template string with values from the given options.\n * @param {string} template Template string literal containing tags like `{{title}}`.\n * @param {FillTemplateOptions} options Options.\n * @returns {string} Filled template that can be used for an entry slug, path, etc.\n * @see https://decapcms.org/docs/configuration-options/#slug-type\n * @see https://decapcms.org/docs/configuration-options/#slug\n * @see https://decapcms.org/docs/collection-folder/#media-and-public-folder\n */\nexport const fillTemplate = (template, options) => {\n  const { collection, content: valueMap, currentSlug, locale, isIndexFile = false } = options;\n\n  const {\n    name: collectionName,\n    identifier_field: identifierField = 'title',\n    slug_length: slugMaxLength = undefined,\n  } = collection;\n\n  const basePath =\n    collection._type === 'entry'\n      ? /** @type {EntryCollection} */ (collection)._file.basePath\n      : undefined;\n\n  /** @type {ReplaceContext} */\n  const context = {\n    replaceSubContext: { ...options, identifierField, basePath },\n    getFieldArgs: { collectionName, keyPath: '', valueMap, isIndexFile },\n  };\n\n  // Use a negative lookahead assertion to support a template tag for the `default` transformation\n  // like `{{fields.slug | default('{{fields.title}}')}}`\n  let slug = template\n    .replace(TEMPLATE_REGEX, (_match, tag) => replaceTemplatePlaceholder(tag, context))\n    .trim();\n\n  // Truncate a long slug if needed\n  if (typeof slugMaxLength === 'number') {\n    slug = truncate(slug, slugMaxLength, { ellipsis: '' }).replace(/-$/, '');\n  }\n\n  // We don’t have to rename it when creating a path with a slug given\n  if (currentSlug) {\n    return slug;\n  }\n\n  return renameIfNeeded(slug, getExistingSlugs(collectionName, locale));\n};\n","import { getPathInfo } from '@sveltia/utils/file';\nimport { stripSlashes } from '@sveltia/utils/string';\nimport equal from 'fast-deep-equal';\nimport { flatten } from 'flat';\nimport { derived, get, writable } from 'svelte/store';\n\nimport {\n  allAssetFolders,\n  getAssetFolder,\n  globalAssetFolder,\n  selectedAssetFolder,\n} from '$lib/services/assets/folders';\nimport { fillTemplate } from '$lib/services/common/template';\nimport { getCollection } from '$lib/services/contents/collection';\nimport { getCollectionFilesByEntry } from '$lib/services/contents/collection/files';\nimport { isCollectionIndexFile } from '$lib/services/contents/collection/index-file';\nimport { getAssociatedCollections } from '$lib/services/contents/entry';\nimport {\n  getDefaultMediaLibraryOptions,\n  transformFile,\n} from '$lib/services/integrations/media-libraries/default';\nimport { createPath, decodeFilePath, resolvePath } from '$lib/services/utils/file';\n\n/**\n * @import { Readable, Writable } from 'svelte/store';\n * @import {\n * Asset,\n * AssetFolderInfo,\n * Entry,\n * InternalI18nOptions,\n * ProcessedAssets,\n * UploadingAssets,\n * } from '$lib/types/private';\n */\n\n/**\n * List of all assets.\n * @type {Writable<Asset[]>}\n */\nexport const allAssets = writable([]);\n\n/**\n * Selected assets.\n * @type {Writable<Asset[]>}\n */\nexport const selectedAssets = writable([]);\n\n/**\n * Asset currently focused in the UI.\n * @type {Writable<Asset | undefined>}\n */\nexport const focusedAsset = writable();\n\n/**\n * Asset to be displayed in `<AssetDetailsOverlay>`.\n * @type {Writable<Asset | undefined>}\n */\nexport const overlaidAsset = writable();\n\n/**\n * Assets currently being uploaded.\n * @type {Writable<UploadingAssets>}\n */\nexport const uploadingAssets = writable({ folder: undefined, files: [] });\n\n/**\n * Asset currently being edited.\n * @type {Writable<Asset | undefined>}\n */\nexport const editingAsset = writable();\n\n/**\n * Asset currently being renamed.\n * @type {Writable<Asset | undefined>}\n */\nexport const renamingAsset = writable();\n\n/**\n * Asset currently being processed.\n * @type {Readable<ProcessedAssets>}\n */\nexport const processedAssets = derived([uploadingAssets], ([_uploadingAssets], set, update) => {\n  set({\n    processing: false,\n    undersizedFiles: [],\n    oversizedFiles: [],\n    transformedFileMap: new WeakMap(),\n  });\n\n  const originalFiles = _uploadingAssets.files;\n  const transformedFileMap = new WeakMap();\n  const { max_file_size: maxSize, transformations } = getDefaultMediaLibraryOptions().config;\n  /** @type {File[]} */\n  let files = [];\n\n  (async () => {\n    if (originalFiles.length && transformations) {\n      update((state) => ({ ...state, processing: true }));\n\n      files = await Promise.all(\n        originalFiles.map(async (file) => {\n          const newFile = await transformFile(file, transformations);\n\n          if (newFile !== file) {\n            transformedFileMap.set(newFile, file);\n          }\n\n          return newFile;\n        }),\n      );\n    } else {\n      files = [...originalFiles];\n    }\n\n    update(() => ({\n      processing: false,\n      undersizedFiles: files.filter(({ size }) => size <= /** @type {number} */ (maxSize)),\n      oversizedFiles: files.filter(({ size }) => size > /** @type {number} */ (maxSize)),\n      transformedFileMap,\n    }));\n  })();\n});\n\n/**\n * Find an asset.\n * @param {object} context Context.\n * @param {string} context.path Saved relative path.\n * @param {Entry} context.entry Associated entry to be used to help locate an asset from a relative\n * path. Can be `undefined` when editing a new draft.\n * @param {InternalI18nOptions} context._i18n I18n options for the collection or collection file.\n * @returns {Asset | undefined} Found asset.\n */\nexport const getAsset = ({ path, entry, _i18n }) => {\n  const { locales } = entry;\n  const { defaultLocale } = _i18n;\n  const locale = defaultLocale in locales ? defaultLocale : Object.keys(locales)[0];\n  const { path: entryFilePath, content: entryContent } = locales[locale];\n\n  if (!entryFilePath || !entryContent) {\n    return undefined;\n  }\n\n  const { entryFolder } = entryFilePath.match(/(?<entryFolder>.+?)(?:\\/[^/]+)?$/)?.groups ?? {};\n  const resolvedPath = resolvePath(`${entryFolder}/${path}`);\n\n  return get(allAssets).find((asset) => asset.path === resolvedPath);\n};\n\n/**\n * Get an asset by a relative public path typically stored as an image field value.\n * @param {object} args Arguments.\n * @param {string} args.path Saved relative path.\n * @param {Entry} [args.entry] Associated entry to be used to help locate an asset from a relative\n * path. Can be `undefined` when editing a new draft.\n * @returns {Asset | undefined} Corresponding asset.\n */\nexport const getAssetByRelativePath = ({ path, entry }) => {\n  if (!entry) {\n    return undefined;\n  }\n\n  const assets = getAssociatedCollections(entry).map((_collection) => {\n    const collectionFiles = getCollectionFilesByEntry(_collection, entry);\n\n    if (collectionFiles.length) {\n      return collectionFiles.map((file) => getAsset({ path, entry, _i18n: file._i18n }));\n    }\n\n    return getAsset({ path, entry, _i18n: _collection._i18n });\n  });\n\n  return (\n    assets.flat(1).filter(Boolean)[0] ??\n    // Fall back to exact match at the root folder\n    get(allAssets).find((asset) => asset.path === path)\n  );\n};\n\n/**\n * Get an asset by an absolute public path typically stored as an image field value.\n * @param {object} args Arguments.\n * @param {string} args.path Saved absolute path.\n * @param {Entry} [args.entry] Associated entry to be used to help locate an asset from a relative\n * path. Can be `undefined` when editing a new draft.\n * @param {string} args.collectionName Collection name.\n * @param {string} [args.fileName] Collection file name. File/singleton collection only.\n * @returns {Asset | undefined} Corresponding asset.\n */\nexport const getAssetByAbsolutePath = ({ path, entry, collectionName, fileName }) => {\n  const exactMatch = get(allAssets).find((asset) => asset.path === stripSlashes(path));\n\n  if (exactMatch) {\n    return exactMatch;\n  }\n\n  const { dirname: dirName = '', basename: baseName } = getPathInfo(path);\n  /** @type {Asset | undefined} */\n  let foundAsset = undefined;\n\n  const scanningFolders = [\n    getAssetFolder({ collectionName, fileName }),\n    getAssetFolder({ collectionName }),\n    get(globalAssetFolder),\n    get(allAssetFolders).findLast((folder) =>\n      dirName.match(`^${(folder.publicPath ?? '').replace(/{{.+?}}/g, '.+?')}\\\\b`),\n    ),\n  ].filter((folder) => !!folder);\n\n  // Use `find` to stop scanning folders as soon as the asset is found\n  scanningFolders.find((folder) => {\n    let { internalPath } = folder;\n\n    // Deal with template tags like `/assets/images/{{slug}}`\n    if (internalPath !== undefined && /{{.+?}}/.test(internalPath)) {\n      const { collectionName: _collectionName } = folder;\n\n      const collection = _collectionName\n        ? getCollection(_collectionName)\n        : entry\n          ? getAssociatedCollections(entry)?.[0]\n          : undefined;\n\n      if (!(entry && collection)) {\n        // Cannot resolve the path\n        return false;\n      }\n\n      const { content, path: entryFilePath } = entry.locales[collection._i18n.defaultLocale];\n\n      internalPath = fillTemplate(internalPath, {\n        type: 'media_folder',\n        collection,\n        content: flatten(content),\n        currentSlug: entry.slug,\n        entryFilePath,\n        isIndexFile: isCollectionIndexFile(collection, entry),\n      });\n    }\n\n    const fullPath = createPath([internalPath, baseName]);\n    const found = get(allAssets).find((asset) => asset.path === fullPath);\n\n    if (found) {\n      foundAsset = found;\n    }\n\n    return !!found;\n  });\n\n  return foundAsset;\n};\n\n/**\n * Get an asset by a public path typically stored as an image field value.\n * @param {object} args Arguments.\n * @param {string} args.value Saved absolute path or relative path.\n * @param {Entry} [args.entry] Associated entry to be used to help locate an asset from a relative\n * path. Can be `undefined` when editing a new draft.\n * @param {string} args.collectionName Collection name.\n * @param {string} [args.fileName] Collection file name. File/singleton collection only.\n * @returns {Asset | undefined} Corresponding asset.\n */\nexport const getAssetByPath = ({ value, entry, collectionName, fileName }) => {\n  const path = decodeFilePath(value);\n\n  // Handle a relative path. A path starting with `@`, like `@assets/images/...` is a special case,\n  // considered as an absolute path.\n  if (!/^[/@]/.test(path)) {\n    return getAssetByRelativePath({ path, entry });\n  }\n\n  return getAssetByAbsolutePath({ path, entry, collectionName, fileName });\n};\n\n/**\n * Get a list of assets stored in the given collection defined folder.\n * @param {AssetFolderInfo} folder Folder info.\n * @returns {Asset[]} Assets.\n */\nexport const getAssetsByFolder = (folder) => get(allAssets).filter((a) => equal(a.folder, folder));\n\n/**\n * Get a list of assets stored in the given internal directory.\n * @param {string} dirname Directory path.\n * @returns {Asset[]} Assets.\n */\nexport const getAssetsByDirName = (dirname) =>\n  get(allAssets).filter((a) => getPathInfo(a.path).dirname === dirname);\n\n// Reset the asset selection when a different folder is selected\nselectedAssetFolder.subscribe(() => {\n  focusedAsset.set(undefined);\n});\n","import { getAssetKind } from '$lib/services/assets/kinds';\n\n/**\n * @import { Asset, BaseAssetListItem } from '$lib/types/private';\n */\n\n/**\n * Parse the given asset files to create a complete, serialized asset list.\n * @param {BaseAssetListItem[]} assetFiles Asset file list.\n * @returns {Asset[]} Asset list.\n */\nexport const parseAssetFiles = (assetFiles) =>\n  assetFiles.map((assetInfo) => {\n    const { file, path, name, sha, size, text = undefined, meta = {}, folder } = assetInfo;\n\n    return /** @type {Asset} */ ({\n      file,\n      blobURL: undefined,\n      path,\n      name,\n      sha,\n      size,\n      kind: getAssetKind(path),\n      text,\n      folder,\n      ...meta,\n    });\n  });\n","import { derived, writable } from 'svelte/store';\n\n/**\n * @import { Readable, Writable } from 'svelte/store';\n * @import { BaseConfigListItem } from '$lib/types/private';\n */\n\n/**\n * Regular expression to match Git configuration files.\n * @type {RegExp}\n */\nexport const GIT_CONFIG_FILE_REGEX = /^(?:.+\\/)?(\\.git(?:attributes|ignore|keep))$/;\n\n/**\n * List of Git configuration files in the repository that we need, such as `.gitattributes`,\n * `.gitkeep`, etc. `.gitkeep` is not technically a config file, but it’s used to keep an empty\n * directory in the repository, which is needed to create a new asset folder in the CMS.\n * @type {Writable<BaseConfigListItem[]>}\n */\nexport const gitConfigFiles = writable([]);\n\n/**\n * File extensions that are tracked by Git LFS. This is derived from the `.gitattributes` file in\n * the repository, if it exists.\n * @type {Readable<string[]>}\n */\nexport const lfsFileExtensions = derived(\n  gitConfigFiles,\n  (files) =>\n    files\n      .find(({ path }) => path === '.gitattributes')\n      ?.text?.replace(/\\r\\n?/g, '\\n')\n      .split('\\n')\n      .map((line) =>\n        line.startsWith('*.') && line.includes('filter=lfs')\n          ? line.split(' ')[0].slice(2).toLowerCase()\n          : '',\n      )\n      .filter(Boolean) ?? [],\n);\n","/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n *    may be used to endorse or promote products derived from this software without\n *    specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nfunction getLineColFromPtr(string, ptr) {\n    let lines = string.slice(0, ptr).split(/\\r\\n|\\n|\\r/g);\n    return [lines.length, lines.pop().length + 1];\n}\nfunction makeCodeBlock(string, line, column) {\n    let lines = string.split(/\\r\\n|\\n|\\r/g);\n    let codeblock = '';\n    let numberLen = (Math.log10(line + 1) | 0) + 1;\n    for (let i = line - 1; i <= line + 1; i++) {\n        let l = lines[i - 1];\n        if (!l)\n            continue;\n        codeblock += i.toString().padEnd(numberLen, ' ');\n        codeblock += ':  ';\n        codeblock += l;\n        codeblock += '\\n';\n        if (i === line) {\n            codeblock += ' '.repeat(numberLen + column + 2);\n            codeblock += '^\\n';\n        }\n    }\n    return codeblock;\n}\nexport class TomlError extends Error {\n    line;\n    column;\n    codeblock;\n    constructor(message, options) {\n        const [line, column] = getLineColFromPtr(options.toml, options.ptr);\n        const codeblock = makeCodeBlock(options.toml, line, column);\n        super(`Invalid TOML document: ${message}\\n\\n${codeblock}`, options);\n        this.line = line;\n        this.column = column;\n        this.codeblock = codeblock;\n    }\n}\n","/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n *    may be used to endorse or promote products derived from this software without\n *    specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nimport { TomlError } from './error.js';\nfunction isEscaped(str, ptr) {\n    let i = 0;\n    while (str[ptr - ++i] === '\\\\')\n        ;\n    return --i && (i % 2);\n}\nexport function indexOfNewline(str, start = 0, end = str.length) {\n    let idx = str.indexOf('\\n', start);\n    if (str[idx - 1] === '\\r')\n        idx--;\n    return idx <= end ? idx : -1;\n}\nexport function skipComment(str, ptr) {\n    for (let i = ptr; i < str.length; i++) {\n        let c = str[i];\n        if (c === '\\n')\n            return i;\n        if (c === '\\r' && str[i + 1] === '\\n')\n            return i + 1;\n        if ((c < '\\x20' && c !== '\\t') || c === '\\x7f') {\n            throw new TomlError('control characters are not allowed in comments', {\n                toml: str,\n                ptr: ptr,\n            });\n        }\n    }\n    return str.length;\n}\nexport function skipVoid(str, ptr, banNewLines, banComments) {\n    let c;\n    while ((c = str[ptr]) === ' ' || c === '\\t' || (!banNewLines && (c === '\\n' || c === '\\r' && str[ptr + 1] === '\\n')))\n        ptr++;\n    return banComments || c !== '#'\n        ? ptr\n        : skipVoid(str, skipComment(str, ptr), banNewLines);\n}\nexport function skipUntil(str, ptr, sep, end, banNewLines = false) {\n    if (!end) {\n        ptr = indexOfNewline(str, ptr);\n        return ptr < 0 ? str.length : ptr;\n    }\n    for (let i = ptr; i < str.length; i++) {\n        let c = str[i];\n        if (c === '#') {\n            i = indexOfNewline(str, i);\n        }\n        else if (c === sep) {\n            return i + 1;\n        }\n        else if (c === end || (banNewLines && (c === '\\n' || (c === '\\r' && str[i + 1] === '\\n')))) {\n            return i;\n        }\n    }\n    throw new TomlError('cannot find end of structure', {\n        toml: str,\n        ptr: ptr\n    });\n}\nexport function getStringEnd(str, seek) {\n    let first = str[seek];\n    let target = first === str[seek + 1] && str[seek + 1] === str[seek + 2]\n        ? str.slice(seek, seek + 3)\n        : first;\n    seek += target.length - 1;\n    do\n        seek = str.indexOf(target, ++seek);\n    while (seek > -1 && first !== \"'\" && isEscaped(str, seek));\n    if (seek > -1) {\n        seek += target.length;\n        if (target.length > 1) {\n            if (str[seek] === first)\n                seek++;\n            if (str[seek] === first)\n                seek++;\n        }\n    }\n    return seek;\n}\n","/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n *    may be used to endorse or promote products derived from this software without\n *    specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nlet DATE_TIME_RE = /^(\\d{4}-\\d{2}-\\d{2})?[T ]?(?:(\\d{2}):\\d{2}:\\d{2}(?:\\.\\d+)?)?(Z|[-+]\\d{2}:\\d{2})?$/i;\nexport class TomlDate extends Date {\n    #hasDate = false;\n    #hasTime = false;\n    #offset = null;\n    constructor(date) {\n        let hasDate = true;\n        let hasTime = true;\n        let offset = 'Z';\n        if (typeof date === 'string') {\n            let match = date.match(DATE_TIME_RE);\n            if (match) {\n                if (!match[1]) {\n                    hasDate = false;\n                    date = `0000-01-01T${date}`;\n                }\n                hasTime = !!match[2];\n                // Make sure to use T instead of a space. Breaks in case of extreme values otherwise.\n                hasTime && date[10] === ' ' && (date = date.replace(' ', 'T'));\n                // Do not allow rollover hours.\n                if (match[2] && +match[2] > 23) {\n                    date = '';\n                }\n                else {\n                    offset = match[3] || null;\n                    date = date.toUpperCase();\n                    if (!offset && hasTime)\n                        date += 'Z';\n                }\n            }\n            else {\n                date = '';\n            }\n        }\n        super(date);\n        if (!isNaN(this.getTime())) {\n            this.#hasDate = hasDate;\n            this.#hasTime = hasTime;\n            this.#offset = offset;\n        }\n    }\n    isDateTime() {\n        return this.#hasDate && this.#hasTime;\n    }\n    isLocal() {\n        return !this.#hasDate || !this.#hasTime || !this.#offset;\n    }\n    isDate() {\n        return this.#hasDate && !this.#hasTime;\n    }\n    isTime() {\n        return this.#hasTime && !this.#hasDate;\n    }\n    isValid() {\n        return this.#hasDate || this.#hasTime;\n    }\n    toISOString() {\n        let iso = super.toISOString();\n        // Local Date\n        if (this.isDate())\n            return iso.slice(0, 10);\n        // Local Time\n        if (this.isTime())\n            return iso.slice(11, 23);\n        // Local DateTime\n        if (this.#offset === null)\n            return iso.slice(0, -1);\n        // Offset DateTime\n        if (this.#offset === 'Z')\n            return iso;\n        // This part is quite annoying: JS strips the original timezone from the ISO string representation\n        // Instead of using a \"modified\" date and \"Z\", we restore the representation \"as authored\"\n        let offset = (+(this.#offset.slice(1, 3)) * 60) + +(this.#offset.slice(4, 6));\n        offset = this.#offset[0] === '-' ? offset : -offset;\n        let offsetDate = new Date(this.getTime() - (offset * 60e3));\n        return offsetDate.toISOString().slice(0, -1) + this.#offset;\n    }\n    static wrapAsOffsetDateTime(jsDate, offset = 'Z') {\n        let date = new TomlDate(jsDate);\n        date.#offset = offset;\n        return date;\n    }\n    static wrapAsLocalDateTime(jsDate) {\n        let date = new TomlDate(jsDate);\n        date.#offset = null;\n        return date;\n    }\n    static wrapAsLocalDate(jsDate) {\n        let date = new TomlDate(jsDate);\n        date.#hasTime = false;\n        date.#offset = null;\n        return date;\n    }\n    static wrapAsLocalTime(jsDate) {\n        let date = new TomlDate(jsDate);\n        date.#hasDate = false;\n        date.#offset = null;\n        return date;\n    }\n}\n","/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n *    may be used to endorse or promote products derived from this software without\n *    specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nimport { skipVoid } from './util.js';\nimport { TomlDate } from './date.js';\nimport { TomlError } from './error.js';\nlet INT_REGEX = /^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\\d(_?\\d)*))$/;\nlet FLOAT_REGEX = /^[+-]?\\d(_?\\d)*(\\.\\d(_?\\d)*)?([eE][+-]?\\d(_?\\d)*)?$/;\nlet LEADING_ZERO = /^[+-]?0[0-9_]/;\nlet ESCAPE_REGEX = /^[0-9a-f]{4,8}$/i;\nlet ESC_MAP = {\n    b: '\\b',\n    t: '\\t',\n    n: '\\n',\n    f: '\\f',\n    r: '\\r',\n    '\"': '\"',\n    '\\\\': '\\\\',\n};\nexport function parseString(str, ptr = 0, endPtr = str.length) {\n    let isLiteral = str[ptr] === '\\'';\n    let isMultiline = str[ptr++] === str[ptr] && str[ptr] === str[ptr + 1];\n    if (isMultiline) {\n        endPtr -= 2;\n        if (str[ptr += 2] === '\\r')\n            ptr++;\n        if (str[ptr] === '\\n')\n            ptr++;\n    }\n    let tmp = 0;\n    let isEscape;\n    let parsed = '';\n    let sliceStart = ptr;\n    while (ptr < endPtr - 1) {\n        let c = str[ptr++];\n        if (c === '\\n' || (c === '\\r' && str[ptr] === '\\n')) {\n            if (!isMultiline) {\n                throw new TomlError('newlines are not allowed in strings', {\n                    toml: str,\n                    ptr: ptr - 1,\n                });\n            }\n        }\n        else if ((c < '\\x20' && c !== '\\t') || c === '\\x7f') {\n            throw new TomlError('control characters are not allowed in strings', {\n                toml: str,\n                ptr: ptr - 1,\n            });\n        }\n        if (isEscape) {\n            isEscape = false;\n            if (c === 'u' || c === 'U') {\n                // Unicode escape\n                let code = str.slice(ptr, (ptr += (c === 'u' ? 4 : 8)));\n                if (!ESCAPE_REGEX.test(code)) {\n                    throw new TomlError('invalid unicode escape', {\n                        toml: str,\n                        ptr: tmp,\n                    });\n                }\n                try {\n                    parsed += String.fromCodePoint(parseInt(code, 16));\n                }\n                catch {\n                    throw new TomlError('invalid unicode escape', {\n                        toml: str,\n                        ptr: tmp,\n                    });\n                }\n            }\n            else if (isMultiline && (c === '\\n' || c === ' ' || c === '\\t' || c === '\\r')) {\n                // Multiline escape\n                ptr = skipVoid(str, ptr - 1, true);\n                if (str[ptr] !== '\\n' && str[ptr] !== '\\r') {\n                    throw new TomlError('invalid escape: only line-ending whitespace may be escaped', {\n                        toml: str,\n                        ptr: tmp,\n                    });\n                }\n                ptr = skipVoid(str, ptr);\n            }\n            else if (c in ESC_MAP) {\n                // Classic escape\n                parsed += ESC_MAP[c];\n            }\n            else {\n                throw new TomlError('unrecognized escape sequence', {\n                    toml: str,\n                    ptr: tmp,\n                });\n            }\n            sliceStart = ptr;\n        }\n        else if (!isLiteral && c === '\\\\') {\n            tmp = ptr - 1;\n            isEscape = true;\n            parsed += str.slice(sliceStart, tmp);\n        }\n    }\n    return parsed + str.slice(sliceStart, endPtr - 1);\n}\nexport function parseValue(value, toml, ptr, integersAsBigInt) {\n    // Constant values\n    if (value === 'true')\n        return true;\n    if (value === 'false')\n        return false;\n    if (value === '-inf')\n        return -Infinity;\n    if (value === 'inf' || value === '+inf')\n        return Infinity;\n    if (value === 'nan' || value === '+nan' || value === '-nan')\n        return NaN;\n    // Avoid FP representation of -0\n    if (value === '-0')\n        return integersAsBigInt ? 0n : 0;\n    // Numbers\n    let isInt = INT_REGEX.test(value);\n    if (isInt || FLOAT_REGEX.test(value)) {\n        if (LEADING_ZERO.test(value)) {\n            throw new TomlError('leading zeroes are not allowed', {\n                toml: toml,\n                ptr: ptr,\n            });\n        }\n        value = value.replace(/_/g, '');\n        let numeric = +value;\n        if (isNaN(numeric)) {\n            throw new TomlError('invalid number', {\n                toml: toml,\n                ptr: ptr,\n            });\n        }\n        if (isInt) {\n            if ((isInt = !Number.isSafeInteger(numeric)) && !integersAsBigInt) {\n                throw new TomlError('integer value cannot be represented losslessly', {\n                    toml: toml,\n                    ptr: ptr,\n                });\n            }\n            if (isInt || integersAsBigInt === true)\n                numeric = BigInt(value);\n        }\n        return numeric;\n    }\n    const date = new TomlDate(value);\n    if (!date.isValid()) {\n        throw new TomlError('invalid value', {\n            toml: toml,\n            ptr: ptr,\n        });\n    }\n    return date;\n}\n","/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n *    may be used to endorse or promote products derived from this software without\n *    specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nimport { parseString, parseValue } from './primitive.js';\nimport { parseArray, parseInlineTable } from './struct.js';\nimport { indexOfNewline, skipVoid, skipUntil, skipComment, getStringEnd } from './util.js';\nimport { TomlError } from './error.js';\nfunction sliceAndTrimEndOf(str, startPtr, endPtr, allowNewLines) {\n    let value = str.slice(startPtr, endPtr);\n    let commentIdx = value.indexOf('#');\n    if (commentIdx > -1) {\n        // The call to skipComment allows to \"validate\" the comment\n        // (absence of control characters)\n        skipComment(str, commentIdx);\n        value = value.slice(0, commentIdx);\n    }\n    let trimmed = value.trimEnd();\n    if (!allowNewLines) {\n        let newlineIdx = value.indexOf('\\n', trimmed.length);\n        if (newlineIdx > -1) {\n            throw new TomlError('newlines are not allowed in inline tables', {\n                toml: str,\n                ptr: startPtr + newlineIdx\n            });\n        }\n    }\n    return [trimmed, commentIdx];\n}\nexport function extractValue(str, ptr, end, depth, integersAsBigInt) {\n    if (depth === 0) {\n        throw new TomlError('document contains excessively nested structures. aborting.', {\n            toml: str,\n            ptr: ptr\n        });\n    }\n    let c = str[ptr];\n    if (c === '[' || c === '{') {\n        let [value, endPtr] = c === '['\n            ? parseArray(str, ptr, depth, integersAsBigInt)\n            : parseInlineTable(str, ptr, depth, integersAsBigInt);\n        let newPtr = end ? skipUntil(str, endPtr, ',', end) : endPtr;\n        if (endPtr - newPtr && end === '}') {\n            let nextNewLine = indexOfNewline(str, endPtr, newPtr);\n            if (nextNewLine > -1) {\n                throw new TomlError('newlines are not allowed in inline tables', {\n                    toml: str,\n                    ptr: nextNewLine\n                });\n            }\n        }\n        return [value, newPtr];\n    }\n    let endPtr;\n    if (c === '\"' || c === \"'\") {\n        endPtr = getStringEnd(str, ptr);\n        let parsed = parseString(str, ptr, endPtr);\n        if (end) {\n            endPtr = skipVoid(str, endPtr, end !== ']');\n            if (str[endPtr] && str[endPtr] !== ',' && str[endPtr] !== end && str[endPtr] !== '\\n' && str[endPtr] !== '\\r') {\n                throw new TomlError('unexpected character encountered', {\n                    toml: str,\n                    ptr: endPtr,\n                });\n            }\n            endPtr += (+(str[endPtr] === ','));\n        }\n        return [parsed, endPtr];\n    }\n    endPtr = skipUntil(str, ptr, ',', end);\n    let slice = sliceAndTrimEndOf(str, ptr, endPtr - (+(str[endPtr - 1] === ',')), end === ']');\n    if (!slice[0]) {\n        throw new TomlError('incomplete key-value declaration: no value specified', {\n            toml: str,\n            ptr: ptr\n        });\n    }\n    if (end && slice[1] > -1) {\n        endPtr = skipVoid(str, ptr + slice[1]);\n        endPtr += +(str[endPtr] === ',');\n    }\n    return [\n        parseValue(slice[0], str, ptr, integersAsBigInt),\n        endPtr,\n    ];\n}\n","/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n *    may be used to endorse or promote products derived from this software without\n *    specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nimport { parseString } from './primitive.js';\nimport { extractValue } from './extract.js';\nimport { getStringEnd, indexOfNewline, skipComment, skipVoid } from './util.js';\nimport { TomlError } from './error.js';\nlet KEY_PART_RE = /^[a-zA-Z0-9-_]+[ \\t]*$/;\nexport function parseKey(str, ptr, end = '=') {\n    let dot = ptr - 1;\n    let parsed = [];\n    let endPtr = str.indexOf(end, ptr);\n    if (endPtr < 0) {\n        throw new TomlError('incomplete key-value: cannot find end of key', {\n            toml: str,\n            ptr: ptr,\n        });\n    }\n    do {\n        let c = str[ptr = ++dot];\n        // If it's whitespace, ignore\n        if (c !== ' ' && c !== '\\t') {\n            // If it's a string\n            if (c === '\"' || c === '\\'') {\n                if (c === str[ptr + 1] && c === str[ptr + 2]) {\n                    throw new TomlError('multiline strings are not allowed in keys', {\n                        toml: str,\n                        ptr: ptr,\n                    });\n                }\n                let eos = getStringEnd(str, ptr);\n                if (eos < 0) {\n                    throw new TomlError('unfinished string encountered', {\n                        toml: str,\n                        ptr: ptr,\n                    });\n                }\n                dot = str.indexOf('.', eos);\n                let strEnd = str.slice(eos, dot < 0 || dot > endPtr ? endPtr : dot);\n                let newLine = indexOfNewline(strEnd);\n                if (newLine > -1) {\n                    throw new TomlError('newlines are not allowed in keys', {\n                        toml: str,\n                        ptr: ptr + dot + newLine,\n                    });\n                }\n                if (strEnd.trimStart()) {\n                    throw new TomlError('found extra tokens after the string part', {\n                        toml: str,\n                        ptr: eos,\n                    });\n                }\n                if (endPtr < eos) {\n                    endPtr = str.indexOf(end, eos);\n                    if (endPtr < 0) {\n                        throw new TomlError('incomplete key-value: cannot find end of key', {\n                            toml: str,\n                            ptr: ptr,\n                        });\n                    }\n                }\n                parsed.push(parseString(str, ptr, eos));\n            }\n            else {\n                // Normal raw key part consumption and validation\n                dot = str.indexOf('.', ptr);\n                let part = str.slice(ptr, dot < 0 || dot > endPtr ? endPtr : dot);\n                if (!KEY_PART_RE.test(part)) {\n                    throw new TomlError('only letter, numbers, dashes and underscores are allowed in keys', {\n                        toml: str,\n                        ptr: ptr,\n                    });\n                }\n                parsed.push(part.trimEnd());\n            }\n        }\n        // Until there's no more dot\n    } while (dot + 1 && dot < endPtr);\n    return [parsed, skipVoid(str, endPtr + 1, true, true)];\n}\nexport function parseInlineTable(str, ptr, depth, integersAsBigInt) {\n    let res = {};\n    let seen = new Set();\n    let c;\n    let comma = 0;\n    ptr++;\n    while ((c = str[ptr++]) !== '}' && c) {\n        let err = { toml: str, ptr: ptr - 1 };\n        if (c === '\\n') {\n            throw new TomlError('newlines are not allowed in inline tables', err);\n        }\n        else if (c === '#') {\n            throw new TomlError('inline tables cannot contain comments', err);\n        }\n        else if (c === ',') {\n            throw new TomlError('expected key-value, found comma', err);\n        }\n        else if (c !== ' ' && c !== '\\t') {\n            let k;\n            let t = res;\n            let hasOwn = false;\n            let [key, keyEndPtr] = parseKey(str, ptr - 1);\n            for (let i = 0; i < key.length; i++) {\n                if (i)\n                    t = hasOwn ? t[k] : (t[k] = {});\n                k = key[i];\n                if ((hasOwn = Object.hasOwn(t, k)) && (typeof t[k] !== 'object' || seen.has(t[k]))) {\n                    throw new TomlError('trying to redefine an already defined value', {\n                        toml: str,\n                        ptr: ptr,\n                    });\n                }\n                if (!hasOwn && k === '__proto__') {\n                    Object.defineProperty(t, k, { enumerable: true, configurable: true, writable: true });\n                }\n            }\n            if (hasOwn) {\n                throw new TomlError('trying to redefine an already defined value', {\n                    toml: str,\n                    ptr: ptr,\n                });\n            }\n            let [value, valueEndPtr] = extractValue(str, keyEndPtr, '}', depth - 1, integersAsBigInt);\n            seen.add(value);\n            t[k] = value;\n            ptr = valueEndPtr;\n            comma = str[ptr - 1] === ',' ? ptr - 1 : 0;\n        }\n    }\n    if (comma) {\n        throw new TomlError('trailing commas are not allowed in inline tables', {\n            toml: str,\n            ptr: comma,\n        });\n    }\n    if (!c) {\n        throw new TomlError('unfinished table encountered', {\n            toml: str,\n            ptr: ptr,\n        });\n    }\n    return [res, ptr];\n}\nexport function parseArray(str, ptr, depth, integersAsBigInt) {\n    let res = [];\n    let c;\n    ptr++;\n    while ((c = str[ptr++]) !== ']' && c) {\n        if (c === ',') {\n            throw new TomlError('expected value, found comma', {\n                toml: str,\n                ptr: ptr - 1,\n            });\n        }\n        else if (c === '#')\n            ptr = skipComment(str, ptr);\n        else if (c !== ' ' && c !== '\\t' && c !== '\\n' && c !== '\\r') {\n            let e = extractValue(str, ptr - 1, ']', depth - 1, integersAsBigInt);\n            res.push(e[0]);\n            ptr = e[1];\n        }\n    }\n    if (!c) {\n        throw new TomlError('unfinished array encountered', {\n            toml: str,\n            ptr: ptr,\n        });\n    }\n    return [res, ptr];\n}\n","/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n *    may be used to endorse or promote products derived from this software without\n *    specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nimport { parseKey } from './struct.js';\nimport { extractValue } from './extract.js';\nimport { skipVoid } from './util.js';\nimport { TomlError } from './error.js';\nfunction peekTable(key, table, meta, type) {\n    let t = table;\n    let m = meta;\n    let k;\n    let hasOwn = false;\n    let state;\n    for (let i = 0; i < key.length; i++) {\n        if (i) {\n            t = hasOwn ? t[k] : (t[k] = {});\n            m = (state = m[k]).c;\n            if (type === 0 /* Type.DOTTED */ && (state.t === 1 /* Type.EXPLICIT */ || state.t === 2 /* Type.ARRAY */)) {\n                return null;\n            }\n            if (state.t === 2 /* Type.ARRAY */) {\n                let l = t.length - 1;\n                t = t[l];\n                m = m[l].c;\n            }\n        }\n        k = key[i];\n        if ((hasOwn = Object.hasOwn(t, k)) && m[k]?.t === 0 /* Type.DOTTED */ && m[k]?.d) {\n            return null;\n        }\n        if (!hasOwn) {\n            if (k === '__proto__') {\n                Object.defineProperty(t, k, { enumerable: true, configurable: true, writable: true });\n                Object.defineProperty(m, k, { enumerable: true, configurable: true, writable: true });\n            }\n            m[k] = {\n                t: i < key.length - 1 && type === 2 /* Type.ARRAY */\n                    ? 3 /* Type.ARRAY_DOTTED */\n                    : type,\n                d: false,\n                i: 0,\n                c: {},\n            };\n        }\n    }\n    state = m[k];\n    if (state.t !== type && !(type === 1 /* Type.EXPLICIT */ && state.t === 3 /* Type.ARRAY_DOTTED */)) {\n        // Bad key type!\n        return null;\n    }\n    if (type === 2 /* Type.ARRAY */) {\n        if (!state.d) {\n            state.d = true;\n            t[k] = [];\n        }\n        t[k].push(t = {});\n        state.c[state.i++] = (state = { t: 1 /* Type.EXPLICIT */, d: false, i: 0, c: {} });\n    }\n    if (state.d) {\n        // Redefining a table!\n        return null;\n    }\n    state.d = true;\n    if (type === 1 /* Type.EXPLICIT */) {\n        t = hasOwn ? t[k] : (t[k] = {});\n    }\n    else if (type === 0 /* Type.DOTTED */ && hasOwn) {\n        return null;\n    }\n    return [k, t, state.c];\n}\nexport function parse(toml, { maxDepth = 1000, integersAsBigInt } = {}) {\n    let res = {};\n    let meta = {};\n    let tbl = res;\n    let m = meta;\n    for (let ptr = skipVoid(toml, 0); ptr < toml.length;) {\n        if (toml[ptr] === '[') {\n            let isTableArray = toml[++ptr] === '[';\n            let k = parseKey(toml, ptr += +isTableArray, ']');\n            if (isTableArray) {\n                if (toml[k[1] - 1] !== ']') {\n                    throw new TomlError('expected end of table declaration', {\n                        toml: toml,\n                        ptr: k[1] - 1,\n                    });\n                }\n                k[1]++;\n            }\n            let p = peekTable(k[0], res, meta, isTableArray ? 2 /* Type.ARRAY */ : 1 /* Type.EXPLICIT */);\n            if (!p) {\n                throw new TomlError('trying to redefine an already defined table or value', {\n                    toml: toml,\n                    ptr: ptr,\n                });\n            }\n            m = p[2];\n            tbl = p[1];\n            ptr = k[1];\n        }\n        else {\n            let k = parseKey(toml, ptr);\n            let p = peekTable(k[0], tbl, m, 0 /* Type.DOTTED */);\n            if (!p) {\n                throw new TomlError('trying to redefine an already defined table or value', {\n                    toml: toml,\n                    ptr: ptr,\n                });\n            }\n            let v = extractValue(toml, k[1], void 0, maxDepth, integersAsBigInt);\n            p[1][p[0]] = v[0];\n            ptr = v[1];\n        }\n        ptr = skipVoid(toml, ptr, true);\n        if (toml[ptr] && toml[ptr] !== '\\n' && toml[ptr] !== '\\r') {\n            throw new TomlError('each key-value declaration must be followed by an end-of-line', {\n                toml: toml,\n                ptr: ptr\n            });\n        }\n        ptr = skipVoid(toml, ptr);\n    }\n    return res;\n}\n","/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n *    may be used to endorse or promote products derived from this software without\n *    specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nlet BARE_KEY = /^[a-z0-9-_]+$/i;\nfunction extendedTypeOf(obj) {\n    let type = typeof obj;\n    if (type === 'object') {\n        if (Array.isArray(obj))\n            return 'array';\n        if (obj instanceof Date)\n            return 'date';\n    }\n    return type;\n}\nfunction isArrayOfTables(obj) {\n    for (let i = 0; i < obj.length; i++) {\n        if (extendedTypeOf(obj[i]) !== 'object')\n            return false;\n    }\n    return obj.length != 0;\n}\nfunction formatString(s) {\n    return JSON.stringify(s).replace(/\\x7f/g, '\\\\u007f');\n}\nfunction stringifyValue(val, type, depth, numberAsFloat) {\n    if (depth === 0) {\n        throw new Error('Could not stringify the object: maximum object depth exceeded');\n    }\n    if (type === 'number') {\n        if (isNaN(val))\n            return 'nan';\n        if (val === Infinity)\n            return 'inf';\n        if (val === -Infinity)\n            return '-inf';\n        if (numberAsFloat && Number.isInteger(val))\n            return val.toFixed(1);\n        return val.toString();\n    }\n    if (type === 'bigint' || type === 'boolean') {\n        return val.toString();\n    }\n    if (type === 'string') {\n        return formatString(val);\n    }\n    if (type === 'date') {\n        if (isNaN(val.getTime())) {\n            throw new TypeError('cannot serialize invalid date');\n        }\n        return val.toISOString();\n    }\n    if (type === 'object') {\n        return stringifyInlineTable(val, depth, numberAsFloat);\n    }\n    if (type === 'array') {\n        return stringifyArray(val, depth, numberAsFloat);\n    }\n}\nfunction stringifyInlineTable(obj, depth, numberAsFloat) {\n    let keys = Object.keys(obj);\n    if (keys.length === 0)\n        return '{}';\n    let res = '{ ';\n    for (let i = 0; i < keys.length; i++) {\n        let k = keys[i];\n        if (i)\n            res += ', ';\n        res += BARE_KEY.test(k) ? k : formatString(k);\n        res += ' = ';\n        res += stringifyValue(obj[k], extendedTypeOf(obj[k]), depth - 1, numberAsFloat);\n    }\n    return res + ' }';\n}\nfunction stringifyArray(array, depth, numberAsFloat) {\n    if (array.length === 0)\n        return '[]';\n    let res = '[ ';\n    for (let i = 0; i < array.length; i++) {\n        if (i)\n            res += ', ';\n        if (array[i] === null || array[i] === void 0) {\n            throw new TypeError('arrays cannot contain null or undefined values');\n        }\n        res += stringifyValue(array[i], extendedTypeOf(array[i]), depth - 1, numberAsFloat);\n    }\n    return res + ' ]';\n}\nfunction stringifyArrayTable(array, key, depth, numberAsFloat) {\n    if (depth === 0) {\n        throw new Error('Could not stringify the object: maximum object depth exceeded');\n    }\n    let res = '';\n    for (let i = 0; i < array.length; i++) {\n        res += `[[${key}]]\\n`;\n        res += stringifyTable(array[i], key, depth, numberAsFloat);\n        res += '\\n\\n';\n    }\n    return res;\n}\nfunction stringifyTable(obj, prefix, depth, numberAsFloat) {\n    if (depth === 0) {\n        throw new Error('Could not stringify the object: maximum object depth exceeded');\n    }\n    let preamble = '';\n    let tables = '';\n    let keys = Object.keys(obj);\n    for (let i = 0; i < keys.length; i++) {\n        let k = keys[i];\n        if (obj[k] !== null && obj[k] !== void 0) {\n            let type = extendedTypeOf(obj[k]);\n            if (type === 'symbol' || type === 'function') {\n                throw new TypeError(`cannot serialize values of type '${type}'`);\n            }\n            let key = BARE_KEY.test(k) ? k : formatString(k);\n            if (type === 'array' && isArrayOfTables(obj[k])) {\n                tables += stringifyArrayTable(obj[k], prefix ? `${prefix}.${key}` : key, depth - 1, numberAsFloat);\n            }\n            else if (type === 'object') {\n                let tblKey = prefix ? `${prefix}.${key}` : key;\n                tables += `[${tblKey}]\\n`;\n                tables += stringifyTable(obj[k], tblKey, depth - 1, numberAsFloat);\n                tables += '\\n\\n';\n            }\n            else {\n                preamble += key;\n                preamble += ' = ';\n                preamble += stringifyValue(obj[k], type, depth, numberAsFloat);\n                preamble += '\\n';\n            }\n        }\n    }\n    return `${preamble}\\n${tables}`.trim();\n}\nexport function stringify(obj, { maxDepth = 1000, numbersAsFloat = false } = {}) {\n    if (extendedTypeOf(obj) !== 'object') {\n        throw new TypeError('stringify can only be called with an object');\n    }\n    return stringifyTable(obj, '', maxDepth, numbersAsFloat);\n}\n","import { toRaw } from '@sveltia/utils/object';\nimport { escapeRegExp } from '@sveltia/utils/string';\nimport * as TOML from 'smol-toml';\nimport YAML from 'yaml';\n\nimport { getCollection } from '$lib/services/contents/collection';\nimport { getCollectionFile } from '$lib/services/contents/collection/files';\nimport { customFileFormats, getFrontMatterDelimiters } from '$lib/services/contents/file/config';\n\n/**\n * @import {\n * BaseEntryListItem,\n * EntryCollection,\n * InternalCollection,\n * InternalCollectionFile\n * } from '$lib/types/private';\n * @import { FrontMatterFormat } from '$lib/types/public';\n */\n\n/**\n * Parse a JSON document using the built-in method.\n * @param {string} str JSON document.\n * @returns {any} Parsed object.\n */\nexport const parseJSON = (str) => JSON.parse(str);\n\n/**\n * Parse a TOML document using a library. The TOML parser returns date fields as `Date` objects, but\n * we need strings to match the JSON and YAML parsers, so we have to parse twice.\n * @param {string} str TOML document.\n * @returns {any} Parsed object.\n */\nexport const parseTOML = (str) => toRaw(TOML.parse(str));\n\n/**\n * Parse a YAML document using a library.\n * @param {string} str YAML document.\n * @returns {any} Parsed object.\n */\nexport const parseYAML = (str) => YAML.parse(str);\n\n/**\n * Detect the Markdown front matter serialization format by checking a delimiter in the content.\n * @param {string} text File content.\n * @returns {FrontMatterFormat} Determined format.\n */\nexport const detectFrontMatterFormat = (text) => {\n  if (text.startsWith('+++')) {\n    return 'toml-frontmatter';\n  }\n\n  if (text.startsWith('{')) {\n    return 'json-frontmatter';\n  }\n\n  return 'yaml-frontmatter';\n};\n\n/**\n * Parse front matter from a Markdown file.\n * @param {object} args Arguments.\n * @param {InternalCollection} args.collection Collection.\n * @param {InternalCollectionFile} [args.collectionFile] Collection file. File/singleton collection\n * only.\n * @param {FrontMatterFormat} args.format Front matter format.\n * @param {string} args.text File content.\n * @returns {Record<string, any>} Parsed front matter and body.\n * @throws {Error} When the front matter block could not be parsed.\n */\nexport const parseFrontMatter = ({ collection, collectionFile, format, text }) => {\n  const {\n    _file: { format: _format, fmDelimiters },\n  } = collectionFile ?? /** @type {EntryCollection} */ (collection);\n\n  const [startDelimiter, endDelimiter] = (_format === 'frontmatter'\n    ? getFrontMatterDelimiters({ format, delimiter: fmDelimiters })\n    : fmDelimiters) ?? ['---', '---'];\n\n  const sd = escapeRegExp(startDelimiter);\n  const ed = escapeRegExp(endDelimiter);\n  // Front matter matching: allow an empty head\n  const regex = new RegExp(`^${sd}\\\\n(?:(?<head>.*?)\\\\n)?${ed}$(?:\\\\n(?<body>.+))?`, 'ms');\n  const { head, body } = text.match(regex)?.groups ?? {};\n\n  if (!head && !body) {\n    // Support Markdown without a front matter block, particularly for VitePress\n    // The text can be an empty string, but it’s okay to return an empty body\n    return { body: text };\n  }\n\n  let parsedHead = {};\n\n  if (format === 'yaml-frontmatter') {\n    parsedHead = parseYAML(head);\n  }\n\n  if (format === 'toml-frontmatter') {\n    parsedHead = parseTOML(head);\n  }\n\n  if (format === 'json-frontmatter') {\n    // For JSON front matter, we need to add the braces back since the regex strips them\n    parsedHead = parseJSON(`{${head}}`);\n  }\n\n  return { ...parsedHead, body };\n};\n\n/**\n * Parse raw content with given file details.\n * @param {BaseEntryListItem} entry Entry file list item.\n * @returns {Promise<any>} Parsed content.\n * @throws {Error} When the content could not be parsed.\n */\nexport const parseEntryFile = async ({ text = '', path, folder: { collectionName, fileName } }) => {\n  const collection = getCollection(collectionName);\n\n  const collectionFile =\n    collection && fileName ? getCollectionFile(collection, fileName) : undefined;\n\n  if (!collection) {\n    throw new Error('Collection not found');\n  }\n\n  if (fileName && !collectionFile) {\n    throw new Error('Collection file not found');\n  }\n\n  // Normalize line breaks\n  text = text.trim().replace(/\\r\\n?/g, '\\n');\n\n  let {\n    _file: { format },\n  } = collectionFile ?? /** @type {EntryCollection} */ (collection);\n\n  const customParser = customFileFormats[format]?.parser;\n\n  if (customParser) {\n    return customParser(text);\n  }\n\n  try {\n    if (format === 'yaml' || format === 'yml') {\n      return parseYAML(text);\n    }\n\n    if (format === 'toml') {\n      return parseTOML(text);\n    }\n\n    if (format === 'json') {\n      return parseJSON(text);\n    }\n\n    if (format === 'frontmatter') {\n      format = detectFrontMatterFormat(text);\n    }\n\n    if (/^(?:yaml|toml|json)-frontmatter$/.test(format)) {\n      return parseFrontMatter({ collection, collectionFile, format, text });\n    }\n  } catch (/** @type {any} */ ex) {\n    throw new Error(`${path} could not be parsed due to ${ex.name}: ${ex.message}`);\n  }\n\n  throw new Error(`${path} could not be parsed due to an unknown format: ${format}`);\n};\n","import { generateUUID } from '@sveltia/utils/crypto';\nimport { isObject } from '@sveltia/utils/object';\nimport { escapeRegExp } from '@sveltia/utils/string';\nimport { flatten } from 'flat';\n\nimport { getCollection } from '$lib/services/contents/collection';\nimport { getCollectionFile } from '$lib/services/contents/collection/files';\nimport { getIndexFile } from '$lib/services/contents/collection/index-file';\nimport { parseEntryFile } from '$lib/services/contents/file/parse';\nimport { hasRootListField } from '$lib/services/contents/widgets/list/helper';\n\n/**\n * @import {\n * BaseEntryListItem,\n * Entry,\n * EntryCollection,\n * InternalCollection,\n * InternalLocaleCode,\n * RawEntryContent,\n * } from '$lib/types/private';\n * @import { Field } from '$lib/types/public';\n */\n\n/**\n * Check if the given file path is Hugo’s special index file: `_index.md` or `_index.{{locale}}.md`.\n * @param {string} path File path to be tested.\n * @returns {boolean} Result.\n */\nexport const isIndexFile = (path) => /\\/_index(?:\\.[\\w-]+)?\\.md$/.test(path);\n\n/**\n * Determine the slug for the given entry content.\n * @param {object} args Arguments.\n * @param {string} args.subPath File path without the collection folder, locale and extension. It’s\n * a slug in most cases, but it may be a path containing slash(es) when the Folder Collections Path\n * is configured.\n * @param {string | undefined} args.subPathTemplate Collection’s `subPath` configuration.\n * @returns {string} Slug.\n * @see https://decapcms.org/docs/configuration-options/#slug\n * @see https://decapcms.org/docs/collection-folder/#folder-collections-path\n */\nexport const getSlug = ({ subPath, subPathTemplate }) => {\n  if (subPathTemplate?.includes('{{slug}}')) {\n    // Build regex by replacing placeholders with patterns\n    let regexPattern = '';\n    let remaining = subPathTemplate;\n\n    // Process template character by character, handling placeholders specially\n    while (remaining.length > 0) {\n      const nextPlaceholder = remaining.indexOf('{{');\n\n      if (nextPlaceholder === -1) {\n        // No more placeholders, escape remaining literal text\n        regexPattern += escapeRegExp(remaining);\n        break;\n      }\n\n      // Add escaped literal text before placeholder\n      if (nextPlaceholder > 0) {\n        regexPattern += escapeRegExp(remaining.substring(0, nextPlaceholder));\n      }\n\n      // Find end of placeholder\n      const placeholderEnd = remaining.indexOf('}}', nextPlaceholder);\n\n      if (placeholderEnd === -1) {\n        // Malformed template, treat as literal\n        regexPattern += escapeRegExp(remaining);\n        break;\n      }\n\n      const placeholder = remaining.substring(nextPlaceholder, placeholderEnd + 2);\n\n      if (placeholder === '{{slug}}') {\n        regexPattern += '(.+)';\n      } else {\n        regexPattern += '[^/]+';\n      }\n\n      remaining = remaining.substring(placeholderEnd + 2);\n    }\n\n    const [, slug] = subPath.match(new RegExp(`^${regexPattern}$`)) ?? [];\n\n    if (slug) {\n      return slug;\n    }\n  }\n\n  return subPath;\n};\n\n/**\n * Parse the raw content from the file and handle any errors.\n * @param {BaseEntryListItem} file Entry file list item.\n * @param {Error[]} errors List of parse errors.\n * @returns {Promise<RawEntryContent | undefined>} Parsed content or undefined if parsing failed.\n */\nexport const parseFileContent = async (file, errors) => {\n  try {\n    return await parseEntryFile(file);\n  } catch (/** @type {any} */ ex) {\n    // eslint-disable-next-line no-console\n    console.error(ex);\n    errors.push(ex);\n    return undefined;\n  }\n};\n\n/**\n * Transform raw content to handle special cases like root list fields.\n * @param {RawEntryContent} rawContent Raw content from the file.\n * @param {Field[]} fields Collection fields.\n * @param {boolean} i18nSingleFile Whether i18n single file structure is used.\n * @returns {RawEntryContent | undefined} Transformed content or undefined if invalid.\n */\nexport const transformRawContent = (rawContent, fields, i18nSingleFile) => {\n  // Handle a special case: top-level list field\n  if (hasRootListField(fields)) {\n    const fieldName = fields[0].name;\n\n    if (i18nSingleFile) {\n      if (!isObject(rawContent) || !Object.values(rawContent).every(Array.isArray)) {\n        return undefined;\n      }\n\n      return Object.fromEntries(\n        Object.entries(rawContent).map(([locale, content]) => [locale, { [fieldName]: content }]),\n      );\n    }\n\n    if (!Array.isArray(rawContent)) {\n      return undefined;\n    }\n\n    return { [fieldName]: rawContent };\n  }\n\n  return isObject(rawContent) ? rawContent : undefined;\n};\n\n/**\n * Check if the file should be skipped based on Hugo index file rules.\n * @param {string} path File path.\n * @param {string | undefined} fileName Collection file name.\n * @param {InternalCollection} collection Collection configuration.\n * @param {string | undefined} subPathTemplate Sub path template.\n * @param {string} extension File extension.\n * @returns {boolean} True if the file should be skipped.\n */\nexport const shouldSkipIndexFile = (path, fileName, collection, subPathTemplate, extension) => {\n  // Special constraint: if template ends with _index and file follows _index pattern,\n  // only .md files are allowed (Hugo constraint)\n  if (\n    subPathTemplate?.split('/').pop() === '_index' &&\n    /\\/_index(?:\\.[\\w-]+)?\\.[\\w]+$/.test(path) &&\n    extension !== 'md'\n  ) {\n    return true;\n  }\n\n  if (!isIndexFile(path)) {\n    return false;\n  }\n\n  // Skip Hugo’s special `_index.md` file that shouldn’t appear in a collection. Localized index\n  // files like `_index.en.md` are also excluded by default. Exceptions:\n  // 1. The collection is a file/singleton collection\n  // 2. The collection is an entry collection and index file inclusion is enabled\n  // 3. The collection is an entry collection and the `path` option value ends with `_index` and\n  // the extension is `md`\n  return !(\n    !!fileName ||\n    getIndexFile(collection)?.name === '_index' ||\n    (subPathTemplate?.split('/').pop() === '_index' && extension === 'md')\n  );\n};\n\n/**\n * Extract subPath and locale information from the file path.\n * @param {BaseEntryListItem} file Entry file list item.\n * @param {string | undefined} fileName Collection file name.\n * @param {RegExp | undefined} fullPathRegEx Full path regex for parsing.\n * @param {InternalLocaleCode} defaultLocale Default locale.\n * @param {boolean} isMultiFileStructure Whether using multi-file i18n structure.\n * @returns {{ subPath: string | undefined, locale: InternalLocaleCode | undefined }} Path info.\n */\nexport const extractPathInfo = (\n  file,\n  fileName,\n  fullPathRegEx,\n  defaultLocale,\n  isMultiFileStructure,\n) => {\n  const {\n    path,\n    folder: { filePathMap },\n  } = file;\n\n  if (fileName) {\n    if (isMultiFileStructure) {\n      const [locale, subPath] =\n        Object.entries(filePathMap ?? {}).find(([, locPath]) => locPath === path) ?? [];\n\n      return { subPath, locale };\n    }\n\n    return { subPath: path, locale: undefined };\n  }\n\n  if (!fullPathRegEx) {\n    return { subPath: undefined, locale: undefined };\n  }\n\n  // If the `omit_default_locale_from_filename` i18n option is enabled, the matching comes with\n  // the `locale` group being `undefined` for the default locale, so we need a fallback for it\n  const match = path.match(fullPathRegEx);\n\n  if (!match?.groups) {\n    return { subPath: undefined, locale: undefined };\n  }\n\n  const { subPath, locale = defaultLocale } = match.groups;\n\n  return { subPath, locale };\n};\n\n/**\n * Process entry for non-i18n collections.\n * @param {Entry} entry Entry object to populate.\n * @param {RawEntryContent} rawContent Raw content.\n * @param {string} path File path.\n * @param {string | undefined} fileName Collection file name.\n * @param {string} subPath Sub path.\n * @param {string | undefined} subPathTemplate Sub path template.\n */\nexport const processNonI18nEntry = (\n  entry,\n  rawContent,\n  path,\n  fileName,\n  subPath,\n  subPathTemplate,\n) => {\n  const slug = fileName || getSlug({ subPath, subPathTemplate });\n\n  entry.slug = slug;\n  entry.locales._default = { slug, path, content: flatten(rawContent) };\n};\n\n/**\n * Process entry for single-file i18n structure.\n * @param {Entry} entry Entry object to populate.\n * @param {RawEntryContent} rawContent Raw content.\n * @param {string} path File path.\n * @param {string | undefined} fileName Collection file name.\n * @param {string} subPath Sub path.\n * @param {string | undefined} subPathTemplate Sub path template.\n * @param {InternalLocaleCode[]} allLocales All available locales.\n */\nexport const processI18nSingleFileEntry = (\n  entry,\n  rawContent,\n  path,\n  fileName,\n  subPath,\n  subPathTemplate,\n  allLocales,\n) => {\n  const slug = fileName || getSlug({ subPath, subPathTemplate });\n\n  entry.slug = slug;\n  entry.locales = Object.fromEntries(\n    allLocales\n      .filter((_locale) => _locale in rawContent)\n      .map((_locale) => [_locale, { slug, path, content: flatten(rawContent[_locale]) }]),\n  );\n};\n\n/**\n * Process entry for multi-file i18n structure.\n * @param {Entry} entry Entry object to populate.\n * @param {RawEntryContent} rawContent Raw content.\n * @param {string} path File path.\n * @param {string | undefined} fileName Collection file name.\n * @param {string} subPath Sub path.\n * @param {string | undefined} subPathTemplate Sub path template.\n * @param {InternalLocaleCode} locale Current locale.\n * @param {InternalLocaleCode} defaultLocale Default locale.\n * @param {string} collectionName Collection name.\n * @param {string | undefined} canonicalSlugKey Canonical slug key.\n * @param {Entry[]} entries Existing entries array.\n * @returns {boolean} True if entry was added to existing entry, false if new entry should be added.\n */\nexport const processI18nMultiFileEntry = (\n  entry,\n  rawContent,\n  path,\n  fileName,\n  subPath,\n  subPathTemplate,\n  locale,\n  defaultLocale,\n  collectionName,\n  canonicalSlugKey,\n  entries,\n) => {\n  // Support a canonical slug to link localized files\n  const canonicalSlug =\n    canonicalSlugKey && typeof rawContent[canonicalSlugKey] === 'string'\n      ? rawContent[canonicalSlugKey]\n      : undefined;\n\n  const slug = fileName || getSlug({ subPath, subPathTemplate });\n  const localizedEntry = { slug, path, content: flatten(rawContent) };\n  // Use a temporary ID to locate all the localized files for the entry\n  const tempId = `${collectionName}/${canonicalSlug ?? slug}`;\n  // Check if the entry has already been added for another locale\n  const existingEntry = entries.find((e) => e.id === tempId);\n\n  // If found, add a new locale to the existing entry; don’t add another entry\n  if (existingEntry) {\n    existingEntry.locales[locale] = localizedEntry;\n\n    if (locale === defaultLocale) {\n      existingEntry.slug = slug;\n      existingEntry.subPath = subPath;\n    }\n\n    return true; // Entry was merged with existing\n  }\n\n  entry.id = tempId;\n  entry.locales[locale] = localizedEntry;\n\n  if (locale === defaultLocale) {\n    entry.slug = slug;\n  }\n\n  return false; // New entry should be added\n};\n\n/**\n * Prepare a new entry by processing the given file info and raw content.\n * @param {object} args Arguments.\n * @param {BaseEntryListItem} args.file Entry file list item.\n * @param {Entry[]} args.entries List of prepared entries.\n * @param {Error[]} args.errors List of parse errors.\n */\nexport const prepareEntry = async ({ file, entries, errors }) => {\n  const rawContent = await parseFileContent(file, errors);\n\n  if (!rawContent) {\n    return;\n  }\n\n  const {\n    path,\n    meta = {},\n    folder: { collectionName, fileName },\n  } = file;\n\n  const collection = getCollection(collectionName);\n\n  const collectionFile =\n    collection && fileName ? getCollectionFile(collection, fileName) : undefined;\n\n  if (!collection || (fileName && !collectionFile)) {\n    return;\n  }\n\n  const {\n    fields = [],\n    _file: { fullPathRegEx, subPath: subPathTemplate, extension },\n    _i18n: {\n      i18nEnabled,\n      allLocales,\n      defaultLocale,\n      structureMap: { i18nSingleFile, i18nMultiFile, i18nMultiFolder, i18nRootMultiFolder },\n      canonicalSlug: { key: canonicalSlugKey },\n    },\n  } = collectionFile ?? /** @type {EntryCollection} */ (collection);\n\n  const transformedContent = transformRawContent(rawContent, fields, i18nSingleFile);\n\n  if (!transformedContent) {\n    return;\n  }\n\n  if (shouldSkipIndexFile(path, fileName, collection, subPathTemplate, extension)) {\n    return;\n  }\n\n  const isMultiFileStructure = i18nMultiFile || i18nMultiFolder || i18nRootMultiFolder;\n\n  const { subPath, locale } = extractPathInfo(\n    file,\n    fileName,\n    fullPathRegEx,\n    defaultLocale,\n    isMultiFileStructure,\n  );\n\n  if (!subPath) {\n    return;\n  }\n\n  if (isMultiFileStructure && !locale) {\n    return;\n  }\n\n  /** @type {Entry} */\n  const entry = {\n    id: '',\n    slug: '',\n    subPath,\n    locales: {},\n    ...meta,\n  };\n\n  if (!i18nEnabled) {\n    processNonI18nEntry(entry, transformedContent, path, fileName, subPath, subPathTemplate);\n  } else if (i18nSingleFile) {\n    processI18nSingleFileEntry(\n      entry,\n      transformedContent,\n      path,\n      fileName,\n      subPath,\n      subPathTemplate,\n      allLocales,\n    );\n  } else if (isMultiFileStructure && locale) {\n    const wasMerged = processI18nMultiFileEntry(\n      entry,\n      transformedContent,\n      path,\n      fileName,\n      subPath,\n      subPathTemplate,\n      locale,\n      defaultLocale,\n      collectionName,\n      canonicalSlugKey,\n      entries,\n    );\n\n    if (wasMerged) {\n      return; // Entry was merged with existing, don’t add to entries array\n    }\n  }\n\n  entries.push(entry);\n};\n\n/**\n * Parse the given entry files to create a complete, serialized entry list.\n * @param {BaseEntryListItem[]} entryFiles Entry file list.\n * @returns {Promise<{ entries: Entry[], errors: Error[] }>} Entry list and error list.\n */\nexport const prepareEntries = async (entryFiles) => {\n  /** @type {Entry[]} */\n  const entries = [];\n  /** @type {Error[]} */\n  const errors = [];\n\n  await Promise.all(entryFiles.map((file) => prepareEntry({ file, entries, errors })));\n\n  return {\n    entries: entries.filter((entry) => {\n      // Override a temporary ID\n      entry.id = generateUUID();\n\n      return !!entry.slug && !!Object.keys(entry.locales).length;\n    }),\n    errors,\n  };\n};\n","import { getAssetFoldersByPath } from '$lib/services/assets/folders';\nimport { GIT_CONFIG_FILE_REGEX } from '$lib/services/backends/git/shared/config';\nimport { getEntryFoldersByPath } from '$lib/services/contents';\nimport { isIndexFile } from '$lib/services/contents/file/process';\n\n/**\n * @import {\n * BaseAssetListItem,\n * BaseConfigListItem,\n * BaseEntryListItem,\n * BaseFileList,\n * BaseFileListItemProps,\n * } from '$lib/types/private';\n */\n\n/**\n * Parse a list of all files on the repository/filesystem to create entry and asset lists, with the\n * relevant collection/file configuration added.\n * @param {BaseFileListItemProps[]} files Unfiltered file list.\n * @returns {BaseFileList} File list, including both entries and assets.\n */\nexport const createFileList = (files) => {\n  /** @type {BaseEntryListItem[]} */\n  const entryFiles = [];\n  /** @type {BaseAssetListItem[]} */\n  const assetFiles = [];\n  /** @type {BaseConfigListItem[]} */\n  const configFiles = [];\n\n  files.forEach((fileInfo) => {\n    const { path, name } = fileInfo;\n\n    if (name.startsWith('.')) {\n      // Correct Git config files that we need, such as `.gitattributes` and `.gitkeep`, to enable\n      // some features like Git LFS tracking and assets folder creation\n      if (GIT_CONFIG_FILE_REGEX.test(name)) {\n        configFiles.push({ ...fileInfo, type: 'config' });\n      }\n    } else {\n      const [entryFolder] = getEntryFoldersByPath(path);\n      const [assetFolder] = getAssetFoldersByPath(path);\n\n      // Correct entry files\n      if (entryFolder) {\n        entryFiles.push({ ...fileInfo, type: 'entry', folder: entryFolder });\n      }\n\n      // Correct asset files while excluding files already listed as entries. These files can appear\n      // in the file list when a relative media path is configured for a collection. Also exclude\n      // Hugo’s special index files.\n      if (assetFolder && !entryFiles.find((e) => e.path === path) && !isIndexFile(path)) {\n        assetFiles.push({ ...fileInfo, type: 'asset', folder: assetFolder });\n      }\n    }\n  });\n\n  const allFiles = [...entryFiles, ...assetFiles, ...configFiles];\n\n  return { entryFiles, assetFiles, configFiles, allFiles, count: allFiles.length };\n};\n","/* eslint-disable no-await-in-loop */\n/* eslint-disable no-continue */\n/* eslint-disable no-restricted-syntax */\n\nimport { unique } from '@sveltia/utils/array';\nimport { getPathInfo, readAsText } from '@sveltia/utils/file';\nimport { stripSlashes } from '@sveltia/utils/string';\nimport { get } from 'svelte/store';\n\nimport { allAssets } from '$lib/services/assets';\nimport { allAssetFolders } from '$lib/services/assets/folders';\nimport { parseAssetFiles } from '$lib/services/assets/parser';\nimport { GIT_CONFIG_FILE_REGEX, gitConfigFiles } from '$lib/services/backends/git/shared/config';\nimport { createFileList } from '$lib/services/backends/process';\nimport { allEntries, allEntryFolders, dataLoaded, entryParseErrors } from '$lib/services/contents';\nimport { prepareEntries } from '$lib/services/contents/file/process';\nimport { createPathRegEx, getBlob, getGitHash } from '$lib/services/utils/file';\n\n/**\n * @import {\n * BaseFileListItem,\n * BaseFileListItemProps,\n * CommitResults,\n * FileChange,\n * } from '$lib/types/private';\n */\n\n/**\n * @typedef {{ file: File, path: string }} FileListItem\n */\n\n/**\n * Get a file or directory handle at the given path.\n * @param {FileSystemDirectoryHandle} rootDirHandle Root directory handle.\n * @param {string} path Path to the file/directory.\n * @param {'file' | 'directory'} [type] Type of the handle to retrieve.\n * @returns {Promise<FileSystemFileHandle | FileSystemDirectoryHandle>} Handle.\n * @throws {Error} If the path is empty and the type is `file`.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryHandle/getFileHandle\n * @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryHandle/getDirectoryHandle\n */\nconst getHandleByPath = async (rootDirHandle, path, type = 'file') => {\n  const normalizedPath = stripSlashes(path ?? '');\n  /** @type {FileSystemFileHandle | FileSystemDirectoryHandle} */\n  let handle = rootDirHandle;\n\n  if (!normalizedPath) {\n    if (type === 'directory') {\n      return handle;\n    }\n\n    throw new Error('Path is required for file handle retrieval');\n  }\n\n  const pathParts = normalizedPath.split('/');\n  const lastIndex = pathParts.length - 1;\n  const create = true;\n\n  for await (const [index, name] of pathParts.entries()) {\n    // If the part is the last one and the type is `file`, we need to ensure that we get a file\n    // handle. Otherwise, we can get a directory handle.\n    handle = await (index === lastIndex && type === 'file'\n      ? /** @type {FileSystemDirectoryHandle} */ (handle).getFileHandle(name, { create })\n      : /** @type {FileSystemDirectoryHandle} */ (handle).getDirectoryHandle(name, { create }));\n  }\n\n  return handle;\n};\n\n/**\n * Get a file handle at the given path. This function is used to retrieve a file handle for reading\n * or writing a file. If the file does not exist, it will be created.\n * @param {FileSystemDirectoryHandle} rootDirHandle Root directory handle.\n * @param {string} path Path to the file.\n * @returns {Promise<FileSystemFileHandle>} Handle.\n * @throws {Error} If the path is empty.\n */\nexport const getFileHandle = (rootDirHandle, path) =>\n  /** @type {Promise<FileSystemFileHandle>} */ (getHandleByPath(rootDirHandle, path, 'file'));\n\n/**\n * Get a directory handle at the given path. This function is used to retrieve a directory handle\n * for reading or writing files within a directory. If the directory does not exist, it will be\n * created.\n * @param {FileSystemDirectoryHandle} rootDirHandle Root directory handle.\n * @param {string} path Path to the directory.\n * @returns {Promise<FileSystemDirectoryHandle>} Handle.\n */\nexport const getDirectoryHandle = (rootDirHandle, path) =>\n  /** @type {Promise<FileSystemDirectoryHandle>} */ (\n    getHandleByPath(rootDirHandle, path, 'directory')\n  );\n\n/**\n * Create a regular expression that matches the given path, taking template tags into account.\n * @param {string} path Path.\n * @returns {RegExp} RegEx.\n */\nconst getPathRegex = (path) =>\n  createPathRegEx(path, (segment) => segment.replace(/{{.+?}}/, '.+?'));\n\n/**\n * Retrieve all the files under the given directory recursively.\n * @param {FileSystemDirectoryHandle | any} dirHandle Directory handle.\n * @param {object} context Context object.\n * @param {FileSystemDirectoryHandle} context.rootDirHandle Root directory handle.\n * @param {string[]} context.scanningPaths Scanning paths.\n * @param {RegExp[]} context.scanningPathsRegEx Regular expressions for scanning paths.\n * @param {FileListItem[]} context.fileList List of available files.\n */\nconst scanDir = async (dirHandle, context) => {\n  const { rootDirHandle, scanningPaths, scanningPathsRegEx, fileList } = context;\n\n  for await (const [name, handle] of dirHandle.entries()) {\n    // Skip hidden files and directories, except for Git configuration files\n    if (name.startsWith('.') && !GIT_CONFIG_FILE_REGEX.test(name)) {\n      continue;\n    }\n\n    const path = (await rootDirHandle.resolve(handle))?.join('/') ?? '';\n    const hasMatchingPath = scanningPathsRegEx.some((regex) => regex.test(path));\n\n    if (handle.kind === 'file') {\n      if (!hasMatchingPath) {\n        continue;\n      }\n\n      try {\n        /** @type {File} */\n        let file = await handle.getFile();\n        const { type, lastModified } = file;\n\n        // Clone the file immediately to avoid potential permission problems\n        file = new File([file], file.name, { type, lastModified });\n\n        fileList.push({ file, path });\n      } catch (ex) {\n        // eslint-disable-next-line no-console\n        console.error(ex);\n      }\n    }\n\n    if (handle.kind === 'directory') {\n      const regex = getPathRegex(path);\n\n      if (!hasMatchingPath && !scanningPaths.some((p) => regex.test(p))) {\n        continue;\n      }\n\n      await scanDir(handle, context);\n    }\n  }\n};\n\n/**\n * Normalize a file list item to ensure it has the required properties. This function also computes\n * the SHA-1 hash of the file. The file path and name must be normalized, as certain non-ASCII\n * characters (e.g. Japanese) can be problematic particularly on macOS.\n * @param {FileListItem} fileListItem File list item.\n * @returns {Promise<BaseFileListItemProps>} Normalized file list item.\n */\nconst normalizeFileListItem = async ({ file, path }) => ({\n  file,\n  path: path.normalize(),\n  name: file.name.normalize(),\n  size: file.size,\n  sha: await getGitHash(file),\n});\n\n/**\n * Retrieve all files under the static directory.\n * @param {FileSystemDirectoryHandle} rootDirHandle Root directory handle.\n * @returns {Promise<BaseFileListItemProps[]>} File list.\n */\nconst getAllFiles = async (rootDirHandle) => {\n  /** @type {FileListItem[]} */\n  const fileList = [];\n\n  /** @type {string[]} */\n  const scanningPaths = unique(\n    [\n      ...get(allEntryFolders)\n        .map(({ filePathMap, folderPathMap }) =>\n          filePathMap ? Object.values(filePathMap) : Object.values(folderPathMap ?? {}),\n        )\n        .flat(1),\n      ...get(allAssetFolders)\n        .filter(({ internalPath }) => internalPath !== undefined)\n        .map(({ internalPath }) => internalPath),\n    ].map((path) => stripSlashes(path ?? '')),\n  );\n\n  await scanDir(rootDirHandle, {\n    rootDirHandle,\n    scanningPaths,\n    scanningPathsRegEx: scanningPaths.map(getPathRegex),\n    fileList,\n  });\n\n  return Promise.all(fileList.map(normalizeFileListItem));\n};\n\n/**\n * Read text content from a file and store it in the entry file object.\n * @param {BaseFileListItem} entryFile Entry file object to read text from.\n */\nconst readTextFile = async (entryFile) => {\n  const { name, file } = entryFile;\n\n  // Skip `.gitkeep` file, as we don’t need to read its content\n  if (name === '.gitkeep') {\n    return;\n  }\n\n  try {\n    entryFile.text = await readAsText(/** @type {File} */ (file));\n  } catch (ex) {\n    entryFile.text = '';\n    // eslint-disable-next-line no-console\n    console.error(ex);\n  }\n};\n\n/**\n * Load file list and all the entry files from the file system, then cache them in the\n * {@link allEntries} and {@link allAssets} stores.\n * @param {FileSystemDirectoryHandle} rootDirHandle Root directory handle.\n */\nexport const loadFiles = async (rootDirHandle) => {\n  const { entryFiles, assetFiles, configFiles } = createFileList(await getAllFiles(rootDirHandle));\n\n  await Promise.all([...entryFiles, ...configFiles].map(readTextFile));\n\n  const { entries, errors } = await prepareEntries(entryFiles);\n\n  allEntries.set(entries);\n  allAssets.set(parseAssetFiles(assetFiles));\n  gitConfigFiles.set(configFiles);\n  entryParseErrors.set(errors);\n  dataLoaded.set(true);\n};\n\n/**\n * Move a file from a previous path to a new path within the file system.\n * @param {object} args Arguments.\n * @param {FileSystemDirectoryHandle} args.rootDirHandle Root directory handle.\n * @param {string} args.previousPath The current path of the file to move.\n * @param {string} args.path The new path where the file should be moved.\n * @returns {Promise<FileSystemFileHandle>} Moved file handle.\n */\nconst moveFile = async ({ rootDirHandle, previousPath, path }) => {\n  const { dirname, basename } = getPathInfo(path);\n  const fileHandle = await getFileHandle(rootDirHandle, previousPath);\n\n  if (dirname && dirname !== getPathInfo(previousPath).dirname) {\n    await fileHandle.move(await getDirectoryHandle(rootDirHandle, dirname), basename);\n  } else {\n    await fileHandle.move(basename);\n  }\n\n  return fileHandle;\n};\n\n/**\n * Write data to a file at the specified path.\n * @param {object} args Arguments.\n * @param {FileSystemDirectoryHandle} args.rootDirHandle Root directory handle.\n * @param {FileSystemFileHandle} [args.fileHandle] File handle to write to. Provided if the file has\n * been moved.\n * @param {string} args.path The relative path to the file within the root directory.\n * @param {string | File} args.data The data to write to the file.\n * @returns {Promise<File>} Written file.\n */\nconst writeFile = async ({ rootDirHandle, fileHandle, path, data }) => {\n  fileHandle ??= await getFileHandle(rootDirHandle, path);\n\n  // The `createWritable` method is not yet supported by Safari\n  // @see https://bugs.webkit.org/show_bug.cgi?id=254726\n  const writer = await fileHandle.createWritable?.();\n\n  try {\n    await writer?.write(data);\n  } catch {\n    // Can throw if the file has just been moved/renamed without any change, and then the `data` is\n    // no longer available\n  } finally {\n    try {\n      await writer?.close();\n    } catch {\n      //\n    }\n  }\n\n  return fileHandle.getFile();\n};\n\n/**\n * Recursively delete empty parent directories.\n * @param {FileSystemDirectoryHandle} rootDirHandle Root directory handle.\n * @param {string[]} pathSegments Array of directory path segments.\n */\nconst deleteEmptyParentDirs = async (rootDirHandle, pathSegments) => {\n  let dirHandle = await getDirectoryHandle(rootDirHandle, pathSegments.join('/'));\n\n  for (;;) {\n    /** @type {string[]} */\n    const keys = [];\n\n    for await (const key of dirHandle.keys()) {\n      keys.push(key);\n    }\n\n    if (keys.length > 1 || !pathSegments.length) {\n      break;\n    }\n\n    const dirName = /** @type {string} */ (pathSegments.pop());\n\n    // Get the parent directory handle\n    dirHandle = await getDirectoryHandle(rootDirHandle, pathSegments.join('/'));\n\n    await dirHandle.removeEntry(dirName);\n  }\n};\n\n/**\n * Delete a file at the specified path within the file system.\n * @param {object} args Arguments.\n * @param {FileSystemDirectoryHandle} args.rootDirHandle Root directory handle.\n * @param {string} args.path The path to the file to be deleted.\n */\nconst deleteFile = async ({ rootDirHandle, path }) => {\n  const { dirname: dirPath = '', basename: fileName } = getPathInfo(stripSlashes(path));\n  const dirHandle = await getDirectoryHandle(rootDirHandle, dirPath);\n\n  await dirHandle.removeEntry(fileName);\n\n  if (dirPath) {\n    await deleteEmptyParentDirs(rootDirHandle, dirPath.split('/'));\n  }\n};\n\n/**\n * Save a file to the file system based on the provided change options.\n * @param {FileSystemDirectoryHandle} rootDirHandle Root directory handle.\n * @param {FileChange} change File change options.\n * @returns {Promise<?File>} Created or updated file, if available.\n * @throws {Error} If an error occurs while saving the file.\n */\nconst saveChange = async (rootDirHandle, { action, path, previousPath, data }) => {\n  /** @type {FileSystemFileHandle | undefined} */\n  let fileHandle;\n\n  if (action === 'move' && previousPath) {\n    fileHandle = await moveFile({ rootDirHandle, previousPath, path });\n  }\n\n  if (['create', 'update', 'move'].includes(action) && data) {\n    // We don’t need to write the file is it’s just been renamed with no change, but the `data` is\n    // always provided for the compatibility with Git backends, so we cannot distinguish between the\n    // two cases\n    return writeFile({ rootDirHandle, fileHandle, path, data });\n  }\n\n  if (action === 'delete') {\n    await deleteFile({ rootDirHandle, path });\n  }\n\n  return null;\n};\n\n/**\n * Save entries or assets in the file system.\n * @param {FileSystemDirectoryHandle | undefined} rootDirHandle Root directory handle. This can be\n * `undefined` if the directory handle could not be acquired earlier for security reasons. If the\n * handle is not available, the changes will not be saved, but the user can still continue using the\n * app without an error thanks to the in-memory cache.\n * @param {FileChange[]} changes File changes to be saved.\n * @returns {Promise<CommitResults>} Commit results, including a pseudo commit SHA, saved files, and\n * their blob SHAs.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemWritableFileStream/write\n * @see https://developer.mozilla.org/en-US/docs/Web/API/FileSystemDirectoryHandle/removeEntry\n */\nexport const saveChanges = async (rootDirHandle, changes) => {\n  const entries = await Promise.all(\n    changes.map(async (change) => {\n      const { path, data } = change;\n      /** @type {Blob | null} */\n      let file = null;\n\n      if (rootDirHandle) {\n        try {\n          file = await saveChange(rootDirHandle, change);\n        } catch (ex) {\n          // eslint-disable-next-line no-console\n          console.error(ex);\n        }\n      }\n\n      if (!file) {\n        if (data !== undefined) {\n          file = getBlob(data);\n        } else {\n          return null;\n        }\n      }\n\n      return [path, { file, sha: await getGitHash(file) }];\n    }),\n  );\n\n  return {\n    // Use a hash of the current date as a pseudo SHA\n    sha: await getGitHash(new Date().toJSON()),\n    files: Object.fromEntries(entries.filter((entry) => !!entry)),\n  };\n};\n","import { IndexedDB } from '@sveltia/utils/storage';\nimport { get } from 'svelte/store';\n\nimport { allBackendServices } from '$lib/services/backends';\nimport { loadFiles, saveChanges } from '$lib/services/backends/fs/shared/files';\nimport { siteConfig } from '$lib/services/config';\n\n/**\n * @import {\n * BackendService,\n * CommitResults,\n * FileChange,\n * InternalSiteConfig,\n * RepositoryInfo,\n * SignInOptions,\n * User,\n * } from '$lib/types/private';\n */\n\nconst backendName = 'local';\nconst label = 'Local Repository';\n/**\n * @type {RepositoryInfo | undefined}\n */\nlet remoteRepository = undefined;\n/**\n * @type {RepositoryInfo}\n */\nconst repositoryProps = { service: '', label: '', owner: '', repo: '', branch: '' };\n\n/**\n * @type {RepositoryInfo}\n */\nconst repository = new Proxy(/** @type {any} */ ({}), {\n  /**\n   * Define the getter.\n   * @param {Record<string, any>} _obj Object itself.\n   * @param {string} key Property name.\n   * @returns {any} Property value.\n   */\n  // @ts-ignore\n  get: (_obj, key) => (remoteRepository ?? repositoryProps)[key],\n});\n\nconst ROOT_DIR_HANDLE_KEY = 'root_dir_handle';\n/**\n * @type {IndexedDB | null | undefined}\n */\nlet rootDirHandleDB = undefined;\n/**\n * @type {FileSystemDirectoryHandle | undefined}\n */\nlet rootDirHandle = undefined;\n\n/**\n * Get the project’s root directory handle so the app can read all the files under the directory.\n * The handle will be cached in IndexedDB for later use.\n * @param {object} [options] Options.\n * @param {boolean} [options.forceReload] Whether to force getting the handle.\n * @param {boolean} [options.showPicker] Whether to show the directory picker.\n * @returns {Promise<FileSystemDirectoryHandle | null>} Directory handle.\n * @throws {Error | AbortError | NotFoundError} When the File System Access API is not supported by\n * the user’s browser, when the directory picker was dismissed, or when the selected directory is\n * not a project root directory. There might be other reasons to throw.\n * @see https://developer.chrome.com/articles/file-system-access/#stored-file-or-directory-handles-and-permissions\n */\nconst getRootDirHandle = async ({ forceReload = false, showPicker = true } = {}) => {\n  if (!('showDirectoryPicker' in window)) {\n    throw new Error('unsupported');\n  }\n\n  /** @type {FileSystemDirectoryHandle | null} */\n  let handle = forceReload ? null : ((await rootDirHandleDB?.get(ROOT_DIR_HANDLE_KEY)) ?? null);\n\n  if (handle) {\n    if ((await handle.requestPermission({ mode: 'readwrite' })) !== 'granted') {\n      handle = null;\n    } else {\n      try {\n        await handle.entries().next();\n      } catch (ex) {\n        // The directory may have been (re)moved. Let the user pick the directory again\n        handle = null;\n        // eslint-disable-next-line no-console\n        console.error(ex);\n      }\n    }\n  }\n\n  if (!handle && showPicker) {\n    // This will throw `AbortError` when the user dismissed the picker\n    handle = await window.showDirectoryPicker();\n\n    if (handle) {\n      // This will throw `NotFoundError` when it’s not a project root directory\n      await handle.getDirectoryHandle('.git');\n      // If it looks fine, cache the directory handle\n      await rootDirHandleDB?.set(ROOT_DIR_HANDLE_KEY, handle);\n    }\n  }\n\n  return /** @type {FileSystemDirectoryHandle | null} */ (handle);\n};\n\n/**\n * Initialize the local backend.\n * @returns {RepositoryInfo | undefined} Repository info.\n */\nconst init = () => {\n  const { name: service } = /** @type {InternalSiteConfig} */ (get(siteConfig)).backend;\n\n  remoteRepository = allBackendServices[service]?.init?.();\n\n  const { databaseName } = remoteRepository ?? {};\n\n  rootDirHandleDB = databaseName ? new IndexedDB(databaseName, 'file-system-handles') : null;\n\n  return repository;\n};\n\n/**\n * Sign in with the local Git repository. There is no actual sign-in; just show the directory picker\n * to get the handle, so we can read/write files.\n * @param {SignInOptions} options Options.\n * @returns {Promise<User>} User info. Since we don’t have any details for the local user, just\n * return the backend name.\n * @throws {Error} When the directory handle could not be acquired.\n */\nconst signIn = async ({ auto = false }) => {\n  const handle = await getRootDirHandle({ showPicker: !auto });\n\n  if (handle) {\n    rootDirHandle = handle;\n  } else {\n    throw new Error('Directory handle could not be acquired');\n  }\n\n  return { backendName };\n};\n\n/**\n * Sign out from the local Git repository. There is no actual sign-out; just discard the cached root\n * directory handle.\n */\nconst signOut = async () => {\n  await rootDirHandleDB?.delete(ROOT_DIR_HANDLE_KEY);\n};\n\n/**\n * Load file list and all the entry files from the file system, then cache them in the\n * {@link allEntries} and {@link allAssets} stores.\n */\nconst fetchFiles = async () => {\n  await loadFiles(/** @type {FileSystemDirectoryHandle} */ (rootDirHandle));\n};\n\n/**\n * Save entries or assets locally.\n * @param {FileChange[]} changes File changes to be saved.\n * @returns {Promise<CommitResults>} Commit results, including a pseudo commit SHA, saved files, and\n * their blob SHAs.\n */\nconst commitChanges = async (changes) => saveChanges(rootDirHandle, changes);\n\n/**\n * @type {BackendService}\n */\nexport default {\n  isGit: false,\n  name: backendName,\n  label,\n  repository,\n  init,\n  signIn,\n  signOut,\n  fetchFiles,\n  commitChanges,\n};\n","import { getDirectoryHandle, loadFiles, saveChanges } from '$lib/services/backends/fs/shared/files';\nimport { dataLoaded } from '$lib/services/contents';\n\n/**\n * @import { BackendService, CommitResults, FileChange, User } from '$lib/types/private';\n */\n\nconst ROOT_DIR_NAME = 'sveltia-cms-test';\nconst backendName = 'test-repo';\nconst label = 'Test';\n/**\n * @type {FileSystemDirectoryHandle | undefined}\n */\nlet rootDirHandle = undefined;\n/**\n * Initialize the test backend. There is nothing to do here.\n * @returns {undefined}\n */\nconst init = () => undefined;\n\n/**\n * Sign in with the test backend. There is no actual sign-in; just get the root directory handle in\n * the origin private file system (OPFS), so we can read/write files.\n * @returns {Promise<User>} User info. Since we don’t have any details for the local user, just\n * return the backend name.\n * @see https://web.dev/articles/origin-private-file-system\n * @todo Preload entry files on the demo site.\n */\nconst signIn = async () => {\n  try {\n    rootDirHandle = await getDirectoryHandle(await navigator.storage.getDirectory(), ROOT_DIR_NAME);\n  } catch {\n    // Directory handle could not be acquired for security reasons, but we can ignore the error\n  }\n\n  return { backendName };\n};\n\n/**\n * Sign out from the test backend. There is nothing to do here.\n */\nconst signOut = async () => {};\n\n/**\n * Load file list and all the entry files from the file system, then cache them in the\n * {@link allEntries} and {@link allAssets} stores. If the root directory handle is not available,\n * simply pretend that the data is loaded.\n */\nconst fetchFiles = async () => {\n  if (rootDirHandle) {\n    await loadFiles(rootDirHandle);\n  } else {\n    dataLoaded.set(true);\n  }\n};\n\n/**\n * Save entries or assets in the OPFS using the root directory handle acquired during sign-in. If\n * the handle is not available, do nothing; the data will still be stored in the in-memory cache,\n * allowing the user to continue using the app without an error.\n * @param {FileChange[]} changes File changes to be saved.\n * @returns {Promise<CommitResults>} Commit results, including a pseudo commit SHA, saved files, and\n * their blob SHAs.\n */\nconst commitChanges = async (changes) => saveChanges(rootDirHandle, changes);\n\n/**\n * @type {BackendService}\n */\nexport default {\n  isGit: false,\n  name: backendName,\n  label,\n  init,\n  signIn,\n  signOut,\n  fetchFiles,\n  commitChanges,\n};\n","export const BACKEND_NAME = 'gitea';\nexport const BACKEND_LABEL = 'Gitea / Forgejo';\n\nexport const DEFAULT_API_ROOT = 'https://gitea.com/api/v1';\nexport const DEFAULT_AUTH_ROOT = 'https://gitea.com';\nexport const DEFAULT_AUTH_PATH = 'login/oauth/authorize';\n\n/**\n * Minimum supported Gitea version. We require at least 1.24 to use the new `file-contents` API\n * endpoint.\n * @see https://github.com/go-gitea/gitea/pull/34139\n */\nexport const MIN_GITEA_VERSION = 1.24;\n\n/**\n * Minimum supported Forgejo version. We require at least 12.0 to use the new `git/blobs` API\n * endpoint.\n * @see https://codeberg.org/forgejo/forgejo/pulls/8139\n */\nexport const MIN_FORGEJO_VERSION = 12;\n","import { LocalStorage } from '@sveltia/utils/storage';\nimport { writable } from 'svelte/store';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import { User } from '$lib/types/private';\n */\n\n/**\n * @type {Writable<User | null | undefined>}\n */\nexport const user = writable();\n\nuser.subscribe((_user) => {\n  (async () => {\n    try {\n      if (_user) {\n        await LocalStorage.set('sveltia-cms.user', _user);\n      } else if (_user === null) {\n        await LocalStorage.delete('sveltia-cms.user');\n      }\n    } catch {\n      //\n    }\n  })();\n});\n","import { get } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { user } from '$lib/services/user';\nimport { sendRequest } from '$lib/services/utils/networking';\n\n/**\n * @import { ApiEndpointConfig, AuthTokens, FetchApiOptions } from '$lib/types/private';\n */\n\n/**\n * Placeholder for API configuration information.\n * @type {ApiEndpointConfig}\n */\nconst API_CONFIG_INFO_PLACEHOLDER = {\n  clientId: '',\n  authURL: '',\n  tokenURL: '',\n  authScheme: 'token',\n  restBaseURL: '',\n  graphqlBaseURL: '',\n};\n\n/**\n * Configuration for API endpoints.\n * @type {ApiEndpointConfig}\n */\nexport const apiConfig = { ...API_CONFIG_INFO_PLACEHOLDER };\n\n/**\n * Variables to be used in GraphQL queries.\n * @type {Record<string, any>}\n */\nexport const graphqlVars = {};\n\n/**\n * Refresh the OAuth access token using the refresh token.\n * @param {object} args Arguments.\n * @param {string} args.clientId OAuth application ID.\n * @param {string} args.tokenURL OAuth token request URL.\n * @param {string} args.refreshToken OAuth refresh token.\n * @returns {Promise<AuthTokens>} New access token and refresh token.\n */\nexport const refreshAccessToken = async ({ clientId, tokenURL, refreshToken }) => {\n  let response;\n  let token = '';\n\n  try {\n    response = await fetch(tokenURL, {\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        grant_type: 'refresh_token',\n        client_id: clientId,\n        refresh_token: refreshToken,\n      }),\n    });\n  } catch {\n    //\n  }\n\n  if (!response?.ok) {\n    throw new Error(get(_)('sign_in_error.TOKEN_REFRESH_FAILED'));\n  }\n\n  ({ access_token: token, refresh_token: refreshToken } = await response.json());\n\n  // Update the user store with the new token and refresh token\n  user.update((_user) => (_user ? { ..._user, token, refreshToken } : _user));\n\n  return { token, refreshToken };\n};\n\n/**\n * Send a request to the REST or GraphQL API of a Git-based service with authentication. This\n * function is a wrapper around {@link sendRequest} that automatically adds the `Authorization`\n * header with the OAuth access token. It also handles the case where the access token needs to be\n * refreshed when the request fails with a 401 Unauthorized status.\n * @param {string} path API endpoint path.\n * @param {FetchApiOptions} [options] Fetch options.\n * @returns {Promise<object | string | Blob | Response>} Response data or `Response` itself,\n * depending on the `responseType` option.\n * @throws {Error} When there was an error in the API request, e.g. OAuth app access restrictions.\n * @see https://docs.github.com/en/rest\n * @see https://docs.gitlab.com/api/rest/\n * @see https://gitea.com/api/swagger\n * @see https://codeberg.org/api/swagger\n */\nexport const fetchAPI = async (\n  path,\n  {\n    method = 'GET',\n    headers = {},\n    body = null,\n    isGraphQL = false,\n    responseType = 'json',\n    token = undefined,\n    refreshToken = undefined,\n  } = {},\n) => {\n  const { clientId, tokenURL, restBaseURL, graphqlBaseURL, authScheme = 'token' } = apiConfig;\n  const _user = get(user);\n  const baseURL = isGraphQL ? graphqlBaseURL : restBaseURL;\n\n  token ??= _user?.token;\n  refreshToken ??= _user?.refreshToken;\n  headers.Authorization = `${authScheme} ${token}`;\n\n  return sendRequest(\n    `${baseURL}${path}`,\n    { method, headers, body },\n    {\n      responseType,\n      refreshAccessToken: refreshToken\n        ? () => refreshAccessToken({ clientId, tokenURL, refreshToken })\n        : undefined,\n    },\n  );\n};\n\n/**\n * Send a request to the GraphQL API of a Git-based service. This function is a wrapper around\n * {@link fetchAPI} and automatically applies the common variables defined in {@link graphqlVars} to\n * the query. Variables can also be passed as an argument to override the defaults.\n * @param {string} query Query string.\n * @param {Record<string, any>} [variables] Any variable to be applied.\n * @returns {Promise<Record<string, any>>} Response data.\n * @see https://docs.github.com/en/graphql\n * @see https://docs.gitlab.com/api/graphql/\n */\nexport const fetchGraphQL = async (query, variables = {}) => {\n  // Normalize the query by removing line breaks and subsequent space characters. We must be careful\n  // as file paths may contain spaces.\n  query = query.replace(/\\n\\s*/g, ' ');\n\n  // Apply common variables defined in `graphqlVars` to the query\n  Object.entries(graphqlVars).forEach(([key, value]) => {\n    if (query.includes(`$${key}`)) {\n      variables[key] ??= value;\n    }\n  });\n\n  // Extract `data` from the response\n  const { data } = await /** @type {Promise<{ data: Record<string, any> }>} */ (\n    fetchAPI('', { method: 'POST', body: { query, variables }, isGraphQL: true })\n  );\n\n  return data;\n};\n","import { get } from 'svelte/store';\n\nimport { BACKEND_NAME } from '$lib/services/backends/git/gitea/constants';\nimport { fetchAPI } from '$lib/services/backends/git/shared/api';\nimport { user } from '$lib/services/user';\n\n/**\n * @import { AuthTokens, User } from '$lib/types/private';\n */\n\n/**\n * @typedef {object} UserProfileResponse\n * @property {number} id User ID.\n * @property {string} full_name User’s full name.\n * @property {string} login User’s login name.\n * @property {string} email User’s email address.\n * @property {string} avatar_url URL to the user’s avatar image.\n * @property {string} html_url URL to the user’s profile page.\n */\n\n/**\n * Retrieve the authenticated user’s profile information.\n * @param {AuthTokens} tokens Authentication tokens.\n * @returns {Promise<User>} User information.\n * @see https://docs.gitea.com/api/next/#tag/user/operation/userGetCurrent\n */\nexport const getUserProfile = async ({ token, refreshToken }) => {\n  const {\n    id,\n    full_name: name,\n    login,\n    email,\n    avatar_url: avatarURL,\n    html_url: profileURL,\n  } = /** @type {UserProfileResponse} */ (await fetchAPI('/user', { token, refreshToken }));\n\n  const _user = get(user);\n\n  // Update the tokens because these may have been renewed in `refreshAccessToken` while fetching\n  // the user info\n  if (_user?.token && _user.token !== token) {\n    token = _user.token;\n    refreshToken = _user.refreshToken;\n  }\n\n  return {\n    backendName: BACKEND_NAME,\n    id,\n    name,\n    login,\n    email,\n    avatarURL,\n    profileURL,\n    token,\n    refreshToken,\n  };\n};\n","import { generateRandomId, generateUUID, getHash } from '@sveltia/utils/crypto';\nimport { isObject } from '@sveltia/utils/object';\nimport { LocalStorage } from '@sveltia/utils/storage';\nimport { get, writable } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\n/**\n * @import { AuthTokens } from '$lib/types/private';\n */\n\nexport const inAuthPopup = writable(false);\n\n/**\n * Open a popup window for authentication.\n * @param {object} args Arguments.\n * @param {string} args.authURL Authentication site URL.\n * @returns {Window | null} Popup window object or `null` if the popup could not be opened.\n */\nexport const openPopup = ({ authURL }) => {\n  const width = 600;\n  const height = 800;\n  const { availHeight, availWidth } = window.screen;\n  const top = availHeight / 2 - height / 2;\n  const left = availWidth / 2 - width / 2;\n\n  return window.open(authURL, 'auth', `width=${width},height=${height},top=${top},left=${left}`);\n};\n\n/**\n * Authenticate with a Git service provider through Netlify Identity or other 3rd party OAuth client\n * specified with the configuration file.\n * @param {object} args Arguments.\n * @param {string} args.backendName Backend name, e.g. `github`.\n * @param {string} args.authURL Authentication site URL.\n * @returns {Promise<AuthTokens>} Auth access token and refresh token.\n * @throws {Error} When authentication failed or the popup window is closed before the auth process\n * is complete.\n * @see https://decapcms.org/docs/backends-overview/\n */\nexport const authorize = async ({ backendName, authURL }) => {\n  const popup = openPopup({ authURL });\n\n  return new Promise((resolve, reject) => {\n    /**\n     * Timer to check if the popup is closed. This doesn’t work with GitLab; `window.closed` will\n     * always be `true`.\n     */\n    const timer =\n      backendName === 'github'\n        ? setInterval(() => {\n            if (popup?.closed) {\n              clearInterval(timer);\n              reject(Object.assign(new Error('Authentication aborted'), { name: 'AbortError' }));\n            }\n          }, 1000)\n        : 0;\n\n    /**\n     * Message event handler.\n     * @param {object} args Arguments.\n     * @param {string} args.origin Origin URL.\n     * @param {string} args.data Passed data.\n     */\n    const handler = ({ origin, data }) => {\n      if (origin !== new URL(authURL).origin || typeof data !== 'string') {\n        return;\n      }\n\n      const provider = backendName;\n\n      // First message\n      if (data === `authorizing:${provider}`) {\n        popup?.postMessage(data, origin);\n\n        return;\n      }\n\n      // Second message\n      const { result: resultStr } =\n        data.match(`^authorization:${provider}:(success|error):(?<result>.+)`)?.groups ?? {};\n\n      /**\n       * @type {{ token: string, refreshToken?: string } | { error: string, errorCode?: string }}\n       */\n      let result;\n\n      try {\n        result = resultStr ? JSON.parse(resultStr) : { error: 'No data' };\n\n        if (!isObject(result)) {\n          result = { error: 'Malformed data' };\n        }\n      } catch {\n        result = { error: 'Malformed data' };\n      }\n\n      if ('token' in result) {\n        resolve(result);\n      } else {\n        reject(\n          new Error('Authentication failed', {\n            cause: new Error(\n              result.errorCode\n                ? get(_)(`sign_in_error.${result.errorCode}`, { default: result.error })\n                : result.error,\n            ),\n          }),\n        );\n      }\n\n      window.removeEventListener('message', handler);\n      clearInterval(timer);\n      popup?.close();\n    };\n\n    window.addEventListener('message', handler);\n  });\n};\n\n/**\n * Initialize the server-side Authorization Code Flow.\n * @param {object} args Arguments.\n * @param {string} args.backendName Backend name, e.g. `github`.\n * @param {string | undefined} args.siteDomain Domain of the site hosting the CMS. Could be\n * `undefined` if the `site_domain` option is not specified in the backend configuration.\n * @param {string} args.authURL Authorization site URL.\n * @param {string} args.scope Authorization scope.\n * @returns {Promise<AuthTokens>} Auth access token and refresh token.\n */\nexport const initServerSideAuth = async ({ backendName, siteDomain, authURL, scope }) => {\n  const { hostname } = window.location;\n\n  // If the site domain is not specified, use the current hostname. If the hostname is `localhost`,\n  // use `cms.netlify.com` as the default site domain.\n  // @see https://decapcms.org/docs/backends-overview/\n  siteDomain ??= hostname === 'localhost' ? 'cms.netlify.com' : hostname;\n\n  try {\n    // `siteDomain` may contain non-ASCII characters. When authenticating with Netlify, such\n    // internationalized domain names (IDNs) must be written in Punycode. Use `URL` for conversion,\n    // e.g `日本語.jp` -> `xn--wgv71a119e.jp`\n    if (new URL(authURL).origin === 'https://api.netlify.com') {\n      siteDomain = new URL(`https://${siteDomain}`).hostname;\n    }\n  } catch {\n    //\n  }\n\n  const params = new URLSearchParams({\n    provider: backendName,\n    site_id: siteDomain,\n    scope,\n  });\n\n  return authorize({\n    backendName,\n    authURL: `${authURL}?${params.toString()}`,\n  });\n};\n\n/**\n * Create a code verifier and challenge for PKCE auth along with a CSRF token.\n * @returns {Promise<{ csrfToken: string, codeVerifier: string, codeChallenge: string}>} Secrets.\n * @see https://stackoverflow.com/questions/63309409/creating-a-code-verifier-and-challenge-for-pkce-auth-on-spotify-api-in-reactjs\n */\nexport const createAuthSecrets = async () => {\n  const codeVerifier = `${generateRandomId()}${generateRandomId()}`;\n\n  const codeChallenge = btoa(\n    await getHash(codeVerifier, { algorithm: 'SHA-256', format: 'binary' }),\n  )\n    .replace(/\\+/g, '-')\n    .replace(/\\//g, '_')\n    .replace(/=+$/, '');\n\n  return {\n    csrfToken: generateUUID().replaceAll('-', ''),\n    codeVerifier,\n    codeChallenge,\n  };\n};\n\n/**\n * Initialize the client-side Authorization Code Flow with PKCE.\n * @param {object} args Arguments.\n * @param {string} args.backendName Backend name, e.g. `gitlab`.\n * @param {string} args.clientId OAuth application ID.\n * @param {string} args.authURL Authorization site URL.\n * @param {string} args.scope Authorization scope.\n * @returns {Promise<AuthTokens>} Auth access token and refresh token.\n * @see https://docs.gitlab.com/ee/api/oauth2.html#authorization-code-with-proof-key-for-code-exchange-pkce\n */\nexport const initClientSideAuth = async ({ backendName, clientId, authURL, scope }) => {\n  const { csrfToken, codeVerifier, codeChallenge } = await createAuthSecrets();\n  const { origin, pathname } = window.location;\n  const redirectURL = `${origin}${pathname}`;\n\n  const params = new URLSearchParams({\n    client_id: clientId,\n    redirect_uri: redirectURL,\n    response_type: 'code',\n    state: csrfToken,\n    scope,\n    code_challenge: codeChallenge,\n    code_challenge_method: 'S256',\n  });\n\n  // Store the temporary secret and real auth URL\n  await LocalStorage.set('sveltia-cms.auth', {\n    csrfToken,\n    codeVerifier,\n    realAuthURL: `${authURL}?${params.toString()}`,\n  });\n\n  // Store the user info only with the backend name, so the automatic sign-in flow that triggers\n  // `finishClientSideAuth` below will work\n  await LocalStorage.set('sveltia-cms.user', { backendName });\n\n  return authorize({\n    backendName,\n    authURL: redirectURL,\n  });\n};\n\n/**\n * Communicate with the window opener as part of {@link finishClientSideAuth}.\n * @param {object} args Options.\n * @param {string} [args.provider] Backend name, e,g. `github`.\n * @param {string} [args.token] OAuth access token.\n * @param {string} [args.refreshToken] OAuth refresh token.\n * @param {string} [args.error] Error message when an OAuth token is not available.\n * @param {string} [args.errorCode] Error code to be used to localize the error message in Sveltia\n * CMS.\n */\nexport const sendMessage = ({ provider = 'unknown', token, refreshToken, error, errorCode }) => {\n  const _state = error ? 'error' : 'success';\n  const content = error ? { provider, error, errorCode } : { provider, token, refreshToken };\n\n  window.addEventListener('message', ({ data, origin }) => {\n    if (data === `authorizing:${provider}`) {\n      window.opener?.postMessage(\n        `authorization:${provider}:${_state}:${JSON.stringify(content)}`,\n        origin,\n      );\n    }\n  });\n\n  window.opener?.postMessage(`authorizing:${provider}`, '*');\n};\n\n/**\n * Complete the client-side Authorization Code Flow with PKCE by retrieving an access token and\n * passing it to the window opener. This code is to be called within the auth popup window and\n * basically does the same thing as the callback handler of Sveltia CMS Authenticator.\n * @param {object} args Arguments.\n * @param {string} args.backendName Backend name, e.g. `gitlab`.\n * @param {string} args.clientId OAuth application ID.\n * @param {string} args.tokenURL OAuth token request URL.\n * @param {string} args.code Authorization code.\n * @param {string} args.state Authorization state, which is a CSRF token previously set.\n * @returns {Promise<void>} None.\n * @see https://docs.gitlab.com/ee/api/oauth2.html#authorization-code-with-proof-key-for-code-exchange-pkce\n * @see https://github.com/sveltia/sveltia-cms-auth/blob/main/src/index.js\n */\nexport const finishClientSideAuth = async ({ backendName, clientId, tokenURL, code, state }) => {\n  const { origin, pathname } = new URL(window.location.href);\n  const { csrfToken, codeVerifier } = (await LocalStorage.get('sveltia-cms.auth')) ?? {};\n  const provider = backendName;\n  const redirectURL = `${origin}${pathname}`;\n\n  // Remove the temporary secret\n  await LocalStorage.delete('sveltia-cms.auth');\n\n  if (!csrfToken || !codeVerifier || state !== csrfToken) {\n    return sendMessage({\n      provider,\n      error: get(_)('sign_in_error.CSRF_DETECTED'),\n      errorCode: 'CSRF_DETECTED',\n    });\n  }\n\n  let response;\n  let token = '';\n  let refreshToken = '';\n  let error = '';\n\n  try {\n    response = await fetch(tokenURL, {\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        grant_type: 'authorization_code',\n        client_id: clientId,\n        code,\n        redirect_uri: redirectURL,\n        code_verifier: codeVerifier,\n      }),\n    });\n  } catch {\n    //\n  }\n\n  if (!response) {\n    return sendMessage({\n      provider,\n      error: get(_)('sign_in_error.TOKEN_REQUEST_FAILED'),\n      errorCode: 'TOKEN_REQUEST_FAILED',\n    });\n  }\n\n  try {\n    ({ access_token: token, refresh_token: refreshToken, error } = await response.json());\n  } catch {\n    return sendMessage({\n      provider,\n      error: get(_)('sign_in_error.MALFORMED_RESPONSE'),\n      errorCode: 'MALFORMED_RESPONSE',\n    });\n  }\n\n  return sendMessage({ provider, token, refreshToken, error });\n};\n\n/**\n * Handle the client-side Authorization Code Flow with PKCE within the auth popup window. Redirect\n * to the authorization site or finish the flow after being redirected from the auth site.\n * @param {object} args Arguments.\n * @param {string} args.backendName Backend name, e.g. `gitlab`.\n * @param {string} args.clientId OAuth application ID.\n * @param {string} args.tokenURL OAuth token request URL.\n */\nexport const handleClientSideAuthPopup = async ({ backendName, clientId, tokenURL }) => {\n  inAuthPopup.set(true);\n\n  const { search } = window.location;\n  const { code, state } = Object.fromEntries(new URLSearchParams(search));\n\n  if (code && state) {\n    await finishClientSideAuth({ backendName, clientId, tokenURL, code, state });\n  } else {\n    const { realAuthURL } = (await LocalStorage.get('sveltia-cms.auth')) ?? {};\n\n    if (realAuthURL) {\n      window.location.href = realAuthURL;\n    }\n  }\n};\n","import { BACKEND_NAME } from '$lib/services/backends/git/gitea/constants';\nimport { getUserProfile } from '$lib/services/backends/git/gitea/user';\nimport { apiConfig } from '$lib/services/backends/git/shared/api';\nimport {\n  handleClientSideAuthPopup,\n  initClientSideAuth,\n} from '$lib/services/backends/git/shared/auth';\n\n/**\n * @import { SignInOptions, User } from '$lib/types/private';\n */\n\n/**\n * Retrieve the repository configuration and sign in with the Gitea/Forgejo REST API.\n * @param {SignInOptions} options Options.\n * @returns {Promise<User | void>} User info, or nothing when finishing PKCE auth flow in a popup or\n * the sign-in flow cannot be started.\n * @throws {Error} When there was an authentication error.\n */\nexport const signIn = async ({ token, refreshToken, auto = false }) => {\n  if (!token) {\n    const { origin } = window.location;\n    const { clientId, authURL, tokenURL } = apiConfig;\n    const scope = 'read:repository,write:repository,read:user';\n    const inPopup = window.opener?.origin === origin && window.name === 'auth';\n\n    if (inPopup) {\n      // We are in the auth popup window; let’s get the OAuth flow done\n      await handleClientSideAuthPopup({ backendName: BACKEND_NAME, clientId, tokenURL });\n    }\n\n    if (inPopup || auto) {\n      return undefined;\n    }\n\n    ({ token, refreshToken } = await initClientSideAuth({\n      backendName: BACKEND_NAME,\n      clientId,\n      authURL,\n      scope,\n    }));\n  }\n\n  return getUserProfile({ token, refreshToken });\n};\n\n/**\n * Sign out from the backend. Nothing to do here.\n * @returns {Promise<void>}\n */\nexport const signOut = async () => undefined;\n","/**\n * @import { RepositoryInfo } from '$lib/types/private';\n */\n\n/**\n * @type {RepositoryInfo}\n */\nexport const REPOSITORY_INFO_PLACEHOLDER = {\n  service: '',\n  label: '',\n  owner: '',\n  repo: '',\n  branch: '',\n  repoURL: '',\n  treeBaseURL: '',\n  blobBaseURL: '',\n  isSelfHosted: false,\n  databaseName: '',\n};\n\n/**\n * Get the base URL for the repository from the REST API root URL.\n * @param {string} restApiRoot REST API root URL. It can be `https://api.github.com`,\n * `https://github.example.com`, `https://gitlab.com/api/v3`, `https://example.com/gitea/api/v1`,\n * etc.\n * @param {string} repoPath Repository path, e.g., `owner/repo`.\n * @returns {string} Base URL for the repository.\n */\nexport const getRepoURL = (restApiRoot, repoPath) => {\n  const baseURL =\n    restApiRoot === 'https://api.github.com'\n      ? 'https://github.com'\n      : restApiRoot.replace(/\\/api(?:\\/v\\d+)?(?:\\/.*)?/, '');\n\n  return `${baseURL}/${repoPath}`;\n};\n","import { get } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { fetchAPI } from '$lib/services/backends/git/shared/api';\nimport { REPOSITORY_INFO_PLACEHOLDER } from '$lib/services/backends/git/shared/repository';\n\n/**\n * @import { RepositoryInfo } from '$lib/types/private';\n */\n\n/**\n * Placeholder for repository information.\n * @type {RepositoryInfo}\n */\nexport const repository = { ...REPOSITORY_INFO_PLACEHOLDER };\n\n/**\n * Cache for repository information to avoid multiple API calls.\n * @type {Record<string, any> | null}\n */\nlet repositoryInfoCache = null;\n\n/**\n * Reset the repository info cache. Used for testing.\n */\nexport const resetRepositoryInfoCache = () => {\n  repositoryInfoCache = null;\n};\n\n/**\n * Generate base URLs for accessing the repository’s resources.\n * @param {string} repoURL The base URL of the repository.\n * @param {string} [branch] The branch name. Could be `undefined` if the branch is not specified in\n * the site configuration.\n * @returns {{ treeBaseURL: string, blobBaseURL: string }} An object containing the tree base URL\n * for browsing files, and the blob base URL for accessing file contents.\n */\nexport const getBaseURLs = (repoURL, branch) => ({\n  treeBaseURL: branch ? `${repoURL}/src/branch/${branch}` : repoURL,\n  blobBaseURL: branch ? `${repoURL}/src/branch/${branch}` : '',\n});\n\n/**\n * Get the repository information.\n * @returns {Promise<Record<string, any>>} Repository information.\n * @see https://docs.gitea.com/api/next/#tag/repository/operation/repoGet\n */\nexport const getRepositoryInfo = async () => {\n  const { owner, repo } = repository;\n\n  repositoryInfoCache ??= await /** @type {Promise<Record<string, any>>} */ (\n    fetchAPI(`/repos/${owner}/${repo}`)\n  );\n\n  return repositoryInfoCache;\n};\n\n/**\n * Check if the user has access to the current repository.\n * @throws {Error} If the user is not a collaborator of the repository.\n * @see https://docs.gitea.com/api/next/#tag/repository/operation/repoGet\n */\nexport const checkRepositoryAccess = async () => {\n  const { repo } = repository;\n\n  try {\n    const { permissions } = await getRepositoryInfo();\n\n    if (!permissions?.pull) {\n      throw new Error('Not a collaborator of the repository', {\n        cause: new Error(get(_)('repository_no_access', { values: { repo } })),\n      });\n    }\n  } catch (error) {\n    if (error instanceof Error && error.message.includes('Not a collaborator')) {\n      throw error;\n    }\n\n    throw new Error('Failed to check repository access', {\n      cause: new Error(get(_)('repository_not_found', { values: { repo } })),\n    });\n  }\n};\n\n/**\n * Fetch the repository’s default branch name, which is typically `master` or `main`.\n * @returns {Promise<string>} Branch name.\n * @throws {Error} When the repository could not be found, or when the repository is empty.\n * @see https://docs.gitea.com/api/next/#tag/repository/operation/repoGet\n */\nexport const fetchDefaultBranchName = async () => {\n  const { repo, repoURL = '' } = repository;\n\n  try {\n    const { default_branch: branch } = await getRepositoryInfo();\n\n    if (!branch) {\n      throw new Error('Failed to retrieve the default branch name.', {\n        cause: new Error(get(_)('repository_empty', { values: { repo } })),\n      });\n    }\n\n    Object.assign(repository, { branch }, getBaseURLs(repoURL, branch));\n\n    return branch;\n  } catch {\n    throw new Error('Failed to retrieve the default branch name.', {\n      cause: new Error(get(_)('repository_not_found', { values: { repo } })),\n    });\n  }\n};\n","import { get } from 'svelte/store';\n\nimport { siteConfig } from '$lib/services/config';\nimport { getCollectionLabel } from '$lib/services/contents/collection';\nimport { user } from '$lib/services/user';\n\n/**\n * @import {\n * CommitOptions,\n * FileChange,\n * InternalSiteConfig,\n * User,\n * } from '$lib/types/private';\n */\n\n/**\n * Default commit message templates.\n * @see https://decapcms.org/docs/configuration-options/#commit-message-templates\n */\nconst DEFAULT_COMMIT_MESSAGES = {\n  create: 'Create {{collection}} “{{slug}}”',\n  update: 'Update {{collection}} “{{slug}}”',\n  delete: 'Delete {{collection}} “{{slug}}”',\n  uploadMedia: 'Upload “{{path}}”',\n  deleteMedia: 'Delete “{{path}}”',\n  openAuthoring: '{{message}}',\n};\n\n/**\n * Create a Git commit message.\n * @param {FileChange[]} changes File changes to be saved.\n * @param {CommitOptions} options Commit options.\n * @returns {string} Formatted message.\n */\nexport const createCommitMessage = (\n  changes,\n  { commitType = 'update', collection, skipCI = undefined },\n) => {\n  const {\n    backend: {\n      commit_messages: customCommitMessages = {},\n      automatic_deployments: autoDeployEnabled,\n    },\n  } = /** @type {InternalSiteConfig} */ (get(siteConfig));\n\n  const { login = '', name = '' } = /** @type {User} */ (get(user));\n  const [firstSlug = ''] = changes.map((item) => item.slug).filter(Boolean);\n  const [firstPath, ...remainingPaths] = changes.map(({ path }) => path);\n  const collectionLabel = collection ? getCollectionLabel(collection, { useSingular: true }) : '';\n  // @ts-ignore\n  let message = customCommitMessages[commitType] || DEFAULT_COMMIT_MESSAGES[commitType] || '';\n\n  if (['create', 'update', 'delete'].includes(commitType)) {\n    message = message\n      .replaceAll('{{slug}}', firstSlug)\n      .replaceAll('{{collection}}', collectionLabel)\n      .replaceAll('{{path}}', firstPath)\n      .replaceAll('{{author-login}}', login)\n      .replaceAll('{{author-name}}', name);\n  }\n\n  if (['uploadMedia', 'deleteMedia'].includes(commitType)) {\n    message = message\n      .replaceAll('{{path}}', firstPath)\n      .replaceAll('{{author-login}}', login)\n      .replaceAll('{{author-name}}', name);\n\n    if (remainingPaths.length) {\n      message += ` +${remainingPaths.length}`;\n    }\n  }\n\n  if (['openAuthoring'].includes(commitType)) {\n    message = message\n      .replaceAll('{{message}}', commitType)\n      .replaceAll('{{author-login}}', login)\n      .replaceAll('{{author-name}}', name);\n  }\n\n  // If requested, disable automatic deployments by using the standard `[skip ci]` prefix supported\n  // by major CI/CD providers, including GitHub Actions and Cloudflare Pages. To avoid unexpected\n  // data retention, deployments for deletion commits are not skipped.\n  // https://docs.github.com/en/actions/managing-workflow-runs/skipping-workflow-runs\n  // https://docs.gitlab.com/ee/ci/pipelines/#skip-a-pipeline\n  // https://developers.cloudflare.com/pages/platform/branch-build-controls/#skip-builds\n  if (\n    !['delete', 'deleteMedia'].includes(commitType) &&\n    (skipCI === undefined ? autoDeployEnabled === false : skipCI === true)\n  ) {\n    message = `[skip ci] ${message}`;\n  }\n\n  return message;\n};\n","import { encodeBase64 } from '@sveltia/utils/file';\nimport { get } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { repository } from '$lib/services/backends/git/gitea/repository';\nimport { fetchAPI } from '$lib/services/backends/git/shared/api';\nimport { createCommitMessage } from '$lib/services/backends/git/shared/commits';\nimport { user } from '$lib/services/user';\n\n/**\n * @import { CommitOptions, CommitResults, FileChange, User } from '$lib/types/private';\n */\n\n/**\n * @typedef {object} CommitResponse\n * @property {object} commit Commit information, including the commit SHA and creation date.\n * @property {string} commit.sha Commit SHA.\n * @property {string} commit.created Commit creation date in ISO format.\n * @property {{ path: string, sha: string }[]} files List of saved files, each with its path and\n * SHA.\n */\n\n/**\n * Fetch the last commit on the repository.\n * @returns {Promise<{ hash: string, message: string }>} Commit’s SHA-1 hash and message.\n * @throws {Error} When the branch could not be found.\n * @see https://docs.gitea.com/api/next/#tag/repository/operation/repoGetSingleCommit\n */\nexport const fetchLastCommit = async () => {\n  const { owner, repo, branch } = repository;\n\n  try {\n    const {\n      commit: { id: hash, message },\n    } = /** @type {{ commit: { id: string, message: string }}} */ (\n      await fetchAPI(`/repos/${owner}/${repo}/branches/${branch}`)\n    );\n\n    return { hash, message };\n  } catch {\n    throw new Error('Failed to retrieve the last commit hash.', {\n      cause: new Error(get(_)('branch_not_found', { values: { repo, branch } })),\n    });\n  }\n};\n\n/**\n * Save entries or assets remotely.\n * @param {FileChange[]} changes File changes to be saved.\n * @param {CommitOptions} options Commit options.\n * @returns {Promise<CommitResults>} Commit results, including the commit SHA and updated file SHAs.\n * @see https://docs.gitea.com/api/next/#tag/repository/operation/repoChangeFiles\n */\nexport const commitChanges = async (changes, options) => {\n  const { owner, repo, branch } = repository;\n  const commitMessage = createCommitMessage(changes, options);\n  const { name, email } = /** @type {User} */ (get(user));\n  const date = new Date().toJSON();\n\n  const files = await Promise.all(\n    changes.map(async ({ action, path, previousPath, previousSha, data = '' }) => ({\n      operation: action === 'move' ? 'update' : action,\n      path,\n      content: await encodeBase64(data),\n      from_path: previousPath,\n      sha: previousSha,\n    })),\n  );\n\n  const { commit, files: savedFiles } = /** @type {CommitResponse} */ (\n    await fetchAPI(`/repos/${owner}/${repo}/contents`, {\n      method: 'POST',\n      body: {\n        branch,\n        author: { name, email },\n        committer: { name, email },\n        dates: { author: date, committer: date },\n        message: commitMessage,\n        files,\n      },\n    })\n  );\n\n  return {\n    sha: commit.sha,\n    date: new Date(commit.created),\n    files: Object.fromEntries(savedFiles.map(({ path, sha }) => [path, { sha }])),\n  };\n};\n","import { get } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { MIN_FORGEJO_VERSION, MIN_GITEA_VERSION } from '$lib/services/backends/git/gitea/constants';\nimport { repository } from '$lib/services/backends/git/gitea/repository';\nimport { fetchAPI } from '$lib/services/backends/git/shared/api';\n\n/**\n * Flag to indicate if the backend is Forgejo. This is used to determine which API endpoints to use,\n * as Gitea and Forgejo have different endpoints for fetching file contents.\n * @type {{ isForgejo: boolean }}\n */\nexport const instance = { isForgejo: false };\n\n/**\n * Check if the version of the user’s Gitea/Forgejo instance is supported. The API endpoint requires\n * authentication, meaning the user must be signed in before calling this function.\n * @throws {Error} When the detected version is unsupported.\n * @see https://docs.gitea.com/api/next/#tag/miscellaneous/operation/getVersion\n */\nexport const checkInstanceVersion = async () => {\n  const { version } = /** @type {{ version: string }} */ (await fetchAPI('/version'));\n  // Check if the instance is Forgejo by looking for the `+gitea-` fork indicator in the version\n  // string. Forgejo versions look like `11.0.1-87-5e379c9+gitea-1.22.0`.\n  const isForgejo = version.includes('+gitea-');\n  const name = isForgejo ? 'Forgejo' : 'Gitea';\n  const minVersion = isForgejo ? MIN_FORGEJO_VERSION : MIN_GITEA_VERSION;\n\n  Object.assign(instance, { isForgejo });\n  Object.assign(repository, { label: name });\n\n  if (Number.parseFloat(version) < minVersion) {\n    throw new Error(`Unsupported ${name} version`, {\n      cause: new Error(\n        get(_)('backend_unsupported_version', {\n          values: { name, version: minVersion },\n        }),\n      ),\n    });\n  }\n};\n","import { getPathInfo } from '@sveltia/utils/file';\nimport { IndexedDB } from '@sveltia/utils/storage';\n\nimport { allAssets } from '$lib/services/assets';\nimport { parseAssetFiles } from '$lib/services/assets/parser';\nimport { isLastCommitPublished } from '$lib/services/backends';\nimport { gitConfigFiles } from '$lib/services/backends/git/shared/config';\nimport { createFileList } from '$lib/services/backends/process';\nimport { allEntries, dataLoaded, entryParseErrors } from '$lib/services/contents';\nimport { prepareEntries } from '$lib/services/contents/file/process';\n\n/**\n * @import {\n * Asset,\n * BaseAssetListItem,\n * BaseConfigListItem,\n * BaseEntryListItem,\n * BaseFileList,\n * BaseFileListItem,\n * BaseFileListItemProps,\n * Entry,\n * RepositoryContentsMap,\n * RepositoryInfo,\n * } from '$lib/types/private';\n */\n\n/**\n * @typedef {(lastHash: string) => Promise<BaseFileListItemProps[]>} FetchFileListFunction\n */\n\n/**\n * Get the file list from the meta database or fetch it if not cached.\n * @param {object} args Arguments.\n * @param {IndexedDB} args.metaDB The meta database instance.\n * @param {string} args.lastHash The latest commit hash.\n * @param {[string, any][]} args.cachedFileEntries Cached file entries.\n * @param {FetchFileListFunction} args.fetchFileList Function to fetch the repository’s complete\n * file list.\n * @returns {Promise<BaseFileList>} The file list.\n */\nexport const getFileList = async ({ metaDB, lastHash, cachedFileEntries, fetchFileList }) => {\n  const cachedHash = await metaDB.get('last_commit_hash');\n  const gitConfigFetched = await metaDB.get('git_config_fetched');\n\n  // Skip fetching the file list if the cached hash matches the latest. But don’t skip if the file\n  // cache is empty; something probably went wrong the last time the files were fetched.\n  if (cachedHash && cachedHash === lastHash && gitConfigFetched && cachedFileEntries.length) {\n    return createFileList(\n      cachedFileEntries.map(([path, data]) => ({\n        path,\n        name: getPathInfo(path).basename,\n        ...data,\n      })),\n    );\n  }\n\n  // Get a complete file list first, and filter what’s managed in CMS\n  const fileList = createFileList(await fetchFileList(lastHash));\n\n  metaDB.set('last_commit_hash', lastHash);\n  metaDB.set('git_config_fetched', true);\n\n  return fileList;\n};\n\n/**\n * Restore cached text and commit info to `allFiles` array.\n * @param {object} args Arguments.\n * @param {BaseFileListItem[]} args.allFiles The list of all files.\n * @param {RepositoryContentsMap} args.cachedFiles Cached files object.\n */\nexport const restoreCachedFileData = ({ allFiles, cachedFiles }) => {\n  allFiles.forEach(({ sha, path }, index) => {\n    if (cachedFiles[path]?.sha === sha) {\n      Object.assign(allFiles[index], cachedFiles[path]);\n    }\n  });\n};\n\n/**\n * Parse a file and add additional metadata, such as name, size, and text content.\n * @param {object} args Arguments.\n * @param {BaseFileListItem} args.file File to parse.\n * @param {RepositoryContentsMap} args.fetchedFileMap Map of fetched file metadata and content.\n * @returns {BaseFileListItem} Parsed file with additional metadata.\n */\nexport const parseFile = ({ file, fetchedFileMap }) => {\n  // The `size` and `text` are only available in the 2nd request (`fetchFileContents`) for the\n  // GitLab backend, so we need to set them here if they are not already defined\n  const { meta, size, text } = fetchedFileMap[file.path] ?? {};\n\n  return {\n    ...file,\n    size: file.size ?? size,\n    text: file.text ?? text,\n    meta: file.meta ?? meta,\n  };\n};\n\n/**\n * Update the stores with the latest entries, assets, config files, and errors.\n * @param {object} args Arguments.\n * @param {Entry[]} args.entries List of entry files.\n * @param {Asset[]} args.assets List of asset files.\n * @param {BaseConfigListItem[]} args.configFiles List of Git config files.\n * @param {Error[]} [args.errors] List of errors encountered while parsing entries.\n */\nexport const updateStores = ({ entries, assets, configFiles, errors = [] }) => {\n  allEntries.set(entries);\n  allAssets.set(assets);\n  gitConfigFiles.set(configFiles);\n  entryParseErrors.set(errors);\n  dataLoaded.set(true);\n};\n\n/**\n * Update the file cache by saving new entries and deleting unused ones.\n * @param {object} args Arguments.\n * @param {IndexedDB} args.cacheDB The cache database instance.\n * @param {BaseFileListItem[]} args.allFiles List of all files in the repository.\n * @param {RepositoryContentsMap} args.cachedFiles Cached files object.\n * @param {BaseFileListItem[]} args.fetchingFiles List of files being fetched.\n * @param {RepositoryContentsMap} args.fetchedFileMap Map of newly fetched file data.\n */\nexport const updateCache = async ({\n  cacheDB,\n  allFiles,\n  cachedFiles,\n  fetchingFiles,\n  fetchedFileMap,\n}) => {\n  const usedPaths = allFiles.map(({ path }) => path);\n  const unusedPaths = Object.keys(cachedFiles).filter((path) => !usedPaths.includes(path));\n\n  // Save new entry caches\n  if (fetchingFiles.length) {\n    await cacheDB.saveEntries(Object.entries(fetchedFileMap));\n  }\n\n  // Delete old entry caches; we don’t need `await` for the deletion to finish, as it’s not critical\n  if (unusedPaths.length) {\n    cacheDB.deleteEntries(unusedPaths);\n  }\n};\n\n/**\n * Fetch file list from a backend service, download/parse all the entry files, then cache them in\n * the {@link allEntries} and {@link allAssets} stores.\n * @param {object} args Arguments.\n * @param {RepositoryInfo} args.repository Repository info.\n * @param {() => Promise<string>} args.fetchDefaultBranchName Function to fetch the repository’s\n * default branch name.\n * @param {() => Promise<{ hash: string, message: string }>} args.fetchLastCommit Function to fetch\n * the last commit’s SHA-1 hash and message.\n * @param {FetchFileListFunction} args.fetchFileList Function to fetch the repository’s complete\n * file list.\n * @param {(fetchingFiles: BaseFileListItem[]) => Promise<RepositoryContentsMap>\n * } args.fetchFileContents Function to fetch the metadata of entry/asset files as well as text file\n * contents.\n */\nexport const fetchAndParseFiles = async ({\n  repository,\n  fetchDefaultBranchName,\n  fetchLastCommit,\n  fetchFileList,\n  fetchFileContents,\n}) => {\n  const { databaseName, branch: branchName } = repository;\n  const metaDB = new IndexedDB(/** @type {string} */ (databaseName), 'meta');\n  const cacheDB = new IndexedDB(/** @type {string} */ (databaseName), 'file-cache');\n  const cachedFileEntries = await cacheDB.entries();\n  let branch = branchName;\n\n  if (!branch) {\n    branch = await fetchDefaultBranchName();\n    repository.branch = branch;\n  }\n\n  // This has to be done after the branch is determined\n  const { hash: lastHash, message } = await fetchLastCommit();\n  const fileList = await getFileList({ metaDB, lastHash, cachedFileEntries, fetchFileList });\n\n  // @todo Check if the commit has a workflow run that trigged deployment\n  isLastCommitPublished.set(!message.startsWith('[skip ci]'));\n\n  // Skip fetching files if no files found\n  if (!fileList.count) {\n    updateStores({ entries: [], assets: [], configFiles: [] });\n\n    return;\n  }\n\n  const { entryFiles, assetFiles, configFiles, allFiles } = fileList;\n  /** @type {RepositoryContentsMap} */\n  const cachedFiles = Object.fromEntries(cachedFileEntries);\n\n  restoreCachedFileData({ allFiles, cachedFiles });\n\n  const fetchingFiles = allFiles.filter(({ meta }) => !meta);\n  const fetchedFileMap = fetchingFiles.length ? await fetchFileContents(fetchingFiles) : {};\n\n  const { entries, errors } = await prepareEntries(\n    entryFiles.map(\n      (file) => /** @type {BaseEntryListItem} */ (parseFile({ file, fetchedFileMap })),\n    ),\n  );\n\n  updateStores({\n    entries,\n    assets: parseAssetFiles(\n      assetFiles.map(\n        (file) => /** @type {BaseAssetListItem} */ (parseFile({ file, fetchedFileMap })),\n      ),\n    ),\n    configFiles: configFiles.map(\n      (file) => /** @type {BaseConfigListItem} */ (parseFile({ file, fetchedFileMap })),\n    ),\n    errors,\n  });\n\n  await updateCache({ cacheDB, allFiles, cachedFiles, fetchingFiles, fetchedFileMap });\n};\n","/* eslint-disable no-await-in-loop */\n\nimport { decodeBase64, getPathInfo } from '@sveltia/utils/file';\n\nimport { fetchLastCommit } from '$lib/services/backends/git/gitea/commits';\nimport { checkInstanceVersion, instance } from '$lib/services/backends/git/gitea/instance';\nimport {\n  checkRepositoryAccess,\n  fetchDefaultBranchName,\n  repository,\n} from '$lib/services/backends/git/gitea/repository';\nimport { fetchAPI } from '$lib/services/backends/git/shared/api';\nimport { fetchAndParseFiles } from '$lib/services/backends/git/shared/fetch';\nimport { dataLoadedProgress } from '$lib/services/contents';\n\n/**\n * @import {\n * Asset,\n * BaseFileListItem,\n * BaseFileListItemProps,\n * RepositoryContentsMap,\n * } from '$lib/types/private';\n */\n\n/**\n * @typedef {{ type: string, path: string, sha: string, size: number }} PartialGitEntry\n */\n\n/**\n * @typedef {{ content: string | null, encoding: 'base64' | null } | null} PartialContentsListItem\n */\n\n/**\n * Fetch the repository’s complete file list, and return it in the canonical format.\n * @param {string} [lastHash] The last commit’s SHA-1 hash.\n * @returns {Promise<BaseFileListItemProps[]>} File list.\n * @see https://docs.gitea.com/api/next/#tag/repository/operation/GetTree\n */\nexport const fetchFileList = async (lastHash) => {\n  const { owner, repo, branch } = repository;\n  const requestPath = `/repos/${owner}/${repo}/git/trees/${lastHash ?? branch}?recursive=1`;\n  /** @type {PartialGitEntry[]} */\n  const gitEntries = [];\n  let page = 1;\n\n  for (;;) {\n    // 1000 items per page\n    const { tree, truncated } = /** @type {{ tree: PartialGitEntry[], truncated: boolean }} */ (\n      await fetchAPI(`${requestPath}&page=${page}`)\n    );\n\n    if (tree) {\n      gitEntries.push(...tree);\n    }\n\n    if (tree && truncated) {\n      page += 1;\n    } else {\n      break;\n    }\n  }\n\n  return gitEntries\n    .filter(({ type }) => type === 'blob')\n    .map(({ path, sha, size }) => ({ path, sha, size, name: getPathInfo(path).basename }));\n};\n\n/**\n * Parse the file contents from the API response.\n * @param {BaseFileListItem[]} fetchingFiles Base file list.\n * @param {PartialContentsListItem[]} results Results from the API.\n * @returns {Promise<RepositoryContentsMap>} Parsed file contents map.\n */\nexport const parseFileContents = async (fetchingFiles, results) => {\n  const entries = await Promise.all(\n    fetchingFiles\n      .map(async ({ path, sha, size }, index) => {\n        const fileData = results[index];\n\n        const data = {\n          sha,\n          size: size ?? 0,\n          text:\n            fileData?.content && fileData.encoding === 'base64'\n              ? await decodeBase64(fileData.content)\n              : '',\n          // Omit commit author/data because it’s costly to fetch commit data for each file\n          meta: {},\n        };\n\n        return [path, data];\n      })\n      .filter((file) => !!file),\n  );\n\n  return Object.fromEntries(entries);\n};\n\n/**\n * Fetch the metadata of entry/asset files as well as text file contents. Gitea and Forgejo have\n * different API endpoints for this, so we handle both cases here.\n * @param {BaseFileListItem[]} fetchingFiles Base file list.\n * @returns {Promise<RepositoryContentsMap>} Fetched contents map.\n * @see https://github.com/go-gitea/gitea/pull/34139\n * @see https://codeberg.org/forgejo/forgejo/pulls/8139\n */\nexport const fetchFileContents = async (fetchingFiles) => {\n  const { owner, repo, branch } = repository;\n  const { isForgejo } = instance;\n\n  const requestPath = isForgejo\n    ? `/repos/${owner}/${repo}/git/blobs`\n    : `/repos/${owner}/${repo}/file-contents?ref=${branch}`;\n\n  // Forgejo uses `sha` as the identifier for files, while Gitea uses `path`\n  const idField = isForgejo ? 'sha' : 'path';\n\n  const allIds = fetchingFiles\n    .filter(({ type }) => type !== 'asset')\n    .map(({ [idField]: id }) => id);\n\n  if (!allIds.length) {\n    return {};\n  }\n\n  /** @type {PartialContentsListItem[]} */\n  const results = [];\n  const remainingIds = [...allIds];\n\n  dataLoadedProgress.set(0);\n\n  // Check how many files we can fetch at once (default is 30)\n  const { default_paging_num: perPage = 30 } = /** @type {{ default_paging_num: number }} */ (\n    await fetchAPI('/settings/api')\n  );\n\n  // Use the new bulk API endpoint to fetch multiple files at once\n  for (;;) {\n    const slicedIds = remainingIds.splice(0, perPage);\n\n    const result = /** @type {PartialContentsListItem[]} */ (\n      await (isForgejo\n        ? fetchAPI(`${requestPath}?shas=${slicedIds.join(',')}`)\n        : fetchAPI(requestPath, { method: 'POST', body: { files: slicedIds } }))\n    );\n\n    results.push(...result);\n    dataLoadedProgress.set(\n      Math.ceil(((allIds.length - remainingIds.length) / allIds.length) * 100),\n    );\n\n    if (!remainingIds.length) {\n      break;\n    }\n  }\n\n  dataLoadedProgress.set(undefined);\n\n  return parseFileContents(fetchingFiles, results);\n};\n\n/**\n * Fetch file list from the backend service, download/parse all the entry files, then cache them in\n * the {@link allEntries} and {@link allAssets} stores.\n */\nexport const fetchFiles = async () => {\n  await checkInstanceVersion();\n  await checkRepositoryAccess();\n\n  await fetchAndParseFiles({\n    repository,\n    fetchDefaultBranchName,\n    fetchLastCommit,\n    fetchFileList,\n    fetchFileContents,\n  });\n};\n\n/**\n * Fetch an asset as a Blob via the API.\n * @param {Asset} asset Asset to retrieve the file content.\n * @returns {Promise<Blob>} Blob data.\n * @see https://docs.gitea.com/api/next/#tag/repository/operation/repoGetRawFileOrLFS\n */\nexport const fetchBlob = async (asset) => {\n  const { owner, repo, branch } = repository;\n  const { path } = asset;\n\n  return /** @type {Promise<Blob>} */ (\n    // Use `encodeURI` instead of `encodeURIComponent` because slashes in the path should not be\n    // encoded but spaces and other characters should be.\n    fetchAPI(`/repos/${owner}/${repo}/media/${branch}/${encodeURI(path)}`, {\n      responseType: 'blob',\n    })\n  );\n};\n","import { stripSlashes } from '@sveltia/utils/string';\nimport { get } from 'svelte/store';\n\nimport { signIn, signOut } from '$lib/services/backends/git/gitea/auth';\nimport { commitChanges } from '$lib/services/backends/git/gitea/commits';\nimport {\n  BACKEND_LABEL,\n  BACKEND_NAME,\n  DEFAULT_API_ROOT,\n  DEFAULT_AUTH_PATH,\n  DEFAULT_AUTH_ROOT,\n} from '$lib/services/backends/git/gitea/constants';\nimport { fetchBlob, fetchFiles } from '$lib/services/backends/git/gitea/files';\nimport { getBaseURLs, repository } from '$lib/services/backends/git/gitea/repository';\nimport { apiConfig } from '$lib/services/backends/git/shared/api';\nimport { getRepoURL } from '$lib/services/backends/git/shared/repository';\nimport { siteConfig } from '$lib/services/config';\nimport { prefs } from '$lib/services/user/prefs';\n\n/**\n * @import { ApiEndpointConfig, BackendService, RepositoryInfo } from '$lib/types/private';\n */\n\n/**\n * Initialize the Gitea/Forgejo backend.\n * @returns {RepositoryInfo | undefined} Repository info, or nothing when the configured backend is\n * not Gitea/Forgejo.\n */\nexport const init = () => {\n  const { backend } = get(siteConfig) ?? {};\n\n  if (backend?.name !== BACKEND_NAME) {\n    return undefined;\n  }\n\n  const {\n    repo: projectPath,\n    branch,\n    base_url: authRoot = DEFAULT_AUTH_ROOT,\n    auth_endpoint: authPath = DEFAULT_AUTH_PATH,\n    app_id: clientId = '',\n    // https://HOSTNAME/api/v1 or https://HOSTNAME/PATH/api/v1\n    api_root: restApiRoot = DEFAULT_API_ROOT,\n  } = backend;\n\n  const [owner, repo] = /** @type {string} */ (projectPath).split('/');\n  const repoPath = `${owner}/${repo}`;\n  const authURL = `${stripSlashes(authRoot)}/${stripSlashes(authPath)}`;\n  const repoURL = getRepoURL(restApiRoot, repoPath);\n\n  Object.assign(\n    repository,\n    /** @type {RepositoryInfo} */ ({\n      service: BACKEND_NAME,\n      label: BACKEND_LABEL,\n      owner,\n      repo,\n      branch,\n      repoURL,\n      databaseName: `${BACKEND_NAME}:${repoPath}`,\n      isSelfHosted: restApiRoot !== DEFAULT_API_ROOT,\n    }),\n    getBaseURLs(repoURL, branch),\n  );\n\n  Object.assign(\n    apiConfig,\n    /** @type {ApiEndpointConfig} */ ({\n      clientId,\n      authURL,\n      tokenURL: authURL.replace('/authorize', '/access_token'),\n      restBaseURL: stripSlashes(restApiRoot),\n    }),\n  );\n\n  if (get(prefs).devModeEnabled) {\n    // eslint-disable-next-line no-console\n    console.info('repositoryInfo', repository);\n  }\n\n  return repository;\n};\n\n/**\n * @type {BackendService}\n */\nexport default {\n  isGit: true,\n  name: BACKEND_NAME,\n  label: BACKEND_LABEL,\n  repository,\n  init,\n  signIn,\n  signOut,\n  fetchFiles,\n  fetchBlob,\n  commitChanges,\n};\n","export const BACKEND_NAME = 'github';\nexport const BACKEND_LABEL = 'GitHub';\n\nexport const DEFAULT_API_ROOT = 'https://api.github.com';\nexport const DEFAULT_AUTH_ROOT = 'https://api.netlify.com';\nexport const DEFAULT_AUTH_PATH = 'auth';\n","import { stripSlashes } from '@sveltia/utils/string';\n\nimport { DEFAULT_API_ROOT } from '$lib/services/backends/git/github/constants';\n\n/**\n * Normalize the REST API base URL. Ensures it ends with `/api/v3` for GitHub Enterprise Server.\n * Otherwise, just use the default API root. This is required because, unlike other backends, the\n * default `api_root` for GitHub does not end with `/api/v3`, which may lead to misconfigured URLs.\n * @param {string} url The base URL to normalize.\n * @returns {string} Normalized REST API base URL.\n * @see https://docs.github.com/en/enterprise-server@3.17/rest/quickstart?tool=javascript\n */\nexport const normalizeRestBaseURL = (url) => {\n  url = stripSlashes(url);\n\n  if (url === DEFAULT_API_ROOT) {\n    // Default API root for GitHub is https://api.github.com\n    return url;\n  }\n\n  if (url.endsWith('/api/v3')) {\n    // Already normalized\n    return url;\n  }\n\n  if (url.endsWith('/api')) {\n    return `${url}/v3`;\n  }\n\n  return `${url}/api/v3`;\n};\n\n/**\n * Normalize the GraphQL API base URL. Ensures it ends with `/api/graphql` for GitHub Enterprise\n * Server. Otherwise, just use the default API root followed by `/graphql`.\n * @param {string} url The base URL to normalize.\n * @returns {string} Normalized GraphQL API base URL.\n * @see https://docs.github.com/en/enterprise-server@3.17/graphql/guides/forming-calls-with-graphql#the-graphql-endpoint\n */\nexport const normalizeGraphQLBaseURL = (url) => {\n  url = stripSlashes(url);\n\n  if (url === DEFAULT_API_ROOT) {\n    // Default GraphQL API root for GitHub is https://api.github.com/graphql\n    return `${url}/graphql`;\n  }\n\n  if (url.endsWith('/graphql')) {\n    // Already normalized\n    return url;\n  }\n\n  if (url.endsWith('/api/v3')) {\n    // Replace the REST API v3 endpoint with the GraphQL endpoint\n    return url.replace('/api/v3', '/graphql');\n  }\n\n  if (url.endsWith('/api')) {\n    return `${url}/graphql`;\n  }\n\n  return `${url}/api/graphql`;\n};\n","import { BACKEND_NAME } from '$lib/services/backends/git/github/constants';\nimport { fetchAPI } from '$lib/services/backends/git/shared/api';\n\n/**\n * @import { AuthTokens, User } from '$lib/types/private';\n */\n\n/**\n * @typedef {object} UserProfileResponse\n * @property {number} id User ID.\n * @property {string} name User’s full name.\n * @property {string} login User’s login name.\n * @property {string} email User’s email address.\n * @property {string} avatar_url URL to the user’s avatar image.\n * @property {string} html_url URL to the user’s profile page.\n */\n\n/**\n * Retrieve the authenticated user’s profile information from GitHub REST API.\n * @param {AuthTokens} tokens Authentication tokens.\n * @returns {Promise<User>} User information.\n * @see https://docs.github.com/en/rest/users/users#get-the-authenticated-user\n */\nexport const getUserProfile = async ({ token }) => {\n  const {\n    id,\n    name,\n    login,\n    email,\n    avatar_url: avatarURL,\n    html_url: profileURL,\n  } = /** @type {UserProfileResponse} */ (await fetchAPI('/user', { token }));\n\n  return {\n    backendName: BACKEND_NAME,\n    id,\n    name,\n    login,\n    email,\n    avatarURL,\n    profileURL,\n    token,\n  };\n};\n","import { get } from 'svelte/store';\n\nimport { BACKEND_NAME } from '$lib/services/backends/git/github/constants';\nimport { getUserProfile } from '$lib/services/backends/git/github/user';\nimport { apiConfig } from '$lib/services/backends/git/shared/api';\nimport { initServerSideAuth } from '$lib/services/backends/git/shared/auth';\nimport { siteConfig } from '$lib/services/config';\n\n/**\n * @import { SignInOptions, User } from '$lib/types/private';\n */\n\n/**\n * Retrieve the repository configuration and sign in with GitHub REST API.\n * @param {SignInOptions} options Options.\n * @returns {Promise<User | void>} User info, or nothing when the sign-in flow cannot be started.\n * @throws {Error} When there was an authentication error.\n * @todo Add `refreshToken` support.\n */\nexport const signIn = async ({ token, auto = false }) => {\n  if (auto && !token) {\n    return undefined;\n  }\n\n  if (!token) {\n    const { site_domain: siteDomain } = get(siteConfig)?.backend ?? {};\n    const { authURL } = apiConfig;\n\n    ({ token } = await initServerSideAuth({\n      backendName: BACKEND_NAME,\n      siteDomain,\n      authURL,\n      scope: 'repo,user',\n    }));\n  }\n\n  return getUserProfile({ token });\n};\n\n/**\n * Sign out from GitHub. Nothing to do here.\n * @returns {Promise<void>}\n */\nexport const signOut = async () => undefined;\n","import { get } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { fetchAPI, fetchGraphQL, graphqlVars } from '$lib/services/backends/git/shared/api';\nimport { REPOSITORY_INFO_PLACEHOLDER } from '$lib/services/backends/git/shared/repository';\nimport { user } from '$lib/services/user';\n\n/**\n * @import { RepositoryInfo } from '$lib/types/private';\n */\n\n/**\n * Placeholder for repository information.\n * @type {RepositoryInfo}\n */\nexport const repository = { ...REPOSITORY_INFO_PLACEHOLDER };\n\n/**\n * Generate base URLs for accessing the repository’s resources.\n * @param {string} repoURL The base URL of the repository.\n * @param {string} [branch] The branch name. Could be `undefined` if the branch is not specified in\n * the site configuration.\n * @returns {{ treeBaseURL: string, blobBaseURL: string }} An object containing the tree base URL\n * for browsing files, and the blob base URL for accessing file contents.\n */\nexport const getBaseURLs = (repoURL, branch) => ({\n  treeBaseURL: branch ? `${repoURL}/tree/${branch}` : repoURL,\n  blobBaseURL: branch ? `${repoURL}/blob/${branch}` : '',\n});\n\n/**\n * Check if the user has access to the current repository.\n * @throws {Error} If the user is not a collaborator of the repository.\n * @see https://docs.github.com/en/rest/collaborators/collaborators#check-if-a-user-is-a-repository-collaborator\n */\nexport const checkRepositoryAccess = async () => {\n  const { owner, repo } = repository;\n  const userName = /** @type {string} */ (get(user)?.login);\n\n  const { ok } = /** @type {Response} */ (\n    await fetchAPI(`/repos/${owner}/${repo}/collaborators/${encodeURIComponent(userName)}`, {\n      headers: { Accept: 'application/json' },\n      responseType: 'raw',\n    })\n  );\n\n  if (!ok) {\n    throw new Error('Not a collaborator of the repository', {\n      cause: new Error(get(_)('repository_no_access', { values: { repo } })),\n    });\n  }\n};\n\nconst FETCH_DEFAULT_BRANCH_NAME_QUERY = `\n  query($owner: String!, $repo: String!) {\n    repository(owner: $owner, name: $repo) {\n      defaultBranchRef {\n        name\n      }\n    }\n  }\n`;\n\n/**\n * Fetch the repository’s default branch name, which is typically `master` or `main`.\n * @returns {Promise<string>} Branch name.\n * @throws {Error} When the repository could not be found, or when the repository is empty.\n */\nexport const fetchDefaultBranchName = async () => {\n  const { repo, repoURL = '' } = repository;\n\n  const result = /** @type {{ repository: { defaultBranchRef?: { name: string } } }} */ (\n    await fetchGraphQL(FETCH_DEFAULT_BRANCH_NAME_QUERY)\n  );\n\n  if (!result.repository) {\n    throw new Error('Failed to retrieve the default branch name.', {\n      cause: new Error(get(_)('repository_not_found', { values: { repo } })),\n    });\n  }\n\n  const { name: branch } = result.repository.defaultBranchRef ?? {};\n\n  if (!branch) {\n    throw new Error('Failed to retrieve the default branch name.', {\n      cause: new Error(get(_)('repository_empty', { values: { repo } })),\n    });\n  }\n\n  Object.assign(repository, { branch }, getBaseURLs(repoURL, branch));\n  Object.assign(graphqlVars, { branch });\n\n  return branch;\n};\n","import { encodeBase64 } from '@sveltia/utils/file';\nimport { get } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { repository } from '$lib/services/backends/git/github/repository';\nimport { fetchGraphQL } from '$lib/services/backends/git/shared/api';\nimport { createCommitMessage } from '$lib/services/backends/git/shared/commits';\n\n/**\n * @import { CommitOptions, CommitResults, FileChange } from '$lib/types/private';\n */\n\n/**\n * @typedef {object} LastCommitResponse\n * @property {object} repository Repository information.\n * @property {object} repository.ref Reference information.\n * @property {object} repository.ref.target Target commit.\n * @property {object} repository.ref.target.history Commit history.\n * @property {{ oid: string, message: string }[]} repository.ref.target.history.nodes Nodes in the\n * commit history, containing the commit SHA-1 hash and message.\n */\n\nconst FETCH_LAST_COMMIT_QUERY = `\n  query($owner: String!, $repo: String!, $branch: String!) {\n    repository(owner: $owner, name: $repo) {\n      ref(qualifiedName: $branch) {\n        target {\n          ... on Commit {\n            history(first: 1) {\n              nodes {\n                oid\n                message\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n`;\n\n/**\n * Fetch the last commit on the repository.\n * @returns {Promise<{ hash: string, message: string }>} Commit’s SHA-1 hash and message.\n * @throws {Error} When the branch could not be found.\n */\nexport const fetchLastCommit = async () => {\n  const { repo, branch } = repository;\n  const result = /** @type {LastCommitResponse} */ (await fetchGraphQL(FETCH_LAST_COMMIT_QUERY));\n\n  if (!result.repository) {\n    throw new Error('Failed to retrieve the last commit hash.', {\n      cause: new Error(get(_)('repository_not_found', { values: { repo } })),\n    });\n  }\n\n  if (!result.repository.ref) {\n    throw new Error('Failed to retrieve the last commit hash.', {\n      cause: new Error(get(_)('branch_not_found', { values: { repo, branch } })),\n    });\n  }\n\n  const { oid: hash, message } = result.repository.ref.target.history.nodes[0];\n\n  return { hash, message };\n};\n\n/**\n * Save entries or assets remotely.\n * @param {FileChange[]} changes File changes to be saved.\n * @param {CommitOptions} options Commit options.\n * @returns {Promise<CommitResults>} Commit results, including the commit SHA and updated file SHAs.\n * @see https://github.blog/changelog/2021-09-13-a-simpler-api-for-authoring-commits/\n * @see https://docs.github.com/en/graphql/reference/mutations#createcommitonbranch\n */\nexport const commitChanges = async (changes, options) => {\n  const { owner, repo, branch } = repository;\n\n  const additions = await Promise.all(\n    changes\n      .filter(({ action }) => ['create', 'update', 'move'].includes(action))\n      .map(async ({ path, data }) => ({\n        path,\n        contents: await encodeBase64(data ?? ''),\n      })),\n  );\n\n  const deletions = changes\n    .filter(({ action }) => ['move', 'delete'].includes(action))\n    .map(({ previousPath, path }) => ({ path: previousPath ?? path }));\n\n  // Part of the query to fetch new file SHAs\n  const fileShaQuery = additions\n    .map(({ path }, index) => `file_${index}: file(path: ${JSON.stringify(path)}) { oid }`)\n    .join(' ');\n\n  const query = `\n    mutation($input: CreateCommitOnBranchInput!) {\n      createCommitOnBranch(input: $input) {\n        commit {\n          oid\n          committedDate\n          ${fileShaQuery}\n        }\n      }\n    }\n  `;\n\n  const input = {\n    branch: {\n      repositoryNameWithOwner: `${owner}/${repo}`,\n      branchName: branch,\n    },\n    expectedHeadOid: (await fetchLastCommit()).hash,\n    fileChanges: { additions, deletions },\n    message: { headline: createCommitMessage(changes, options) },\n  };\n\n  const {\n    createCommitOnBranch: { commit },\n  } = /** @type {{ createCommitOnBranch: { commit: Record<string, any> }}} */ (\n    await fetchGraphQL(query, { input })\n  );\n\n  return {\n    sha: commit.oid,\n    date: new Date(commit.committedDate),\n    files: Object.fromEntries(\n      additions.map(({ path }, index) => [path, { sha: commit[`file_${index}`]?.oid }]),\n    ),\n  };\n};\n","import { repository } from '$lib/services/backends/git/github/repository';\nimport { fetchAPI } from '$lib/services/backends/git/shared/api';\n\n/**\n * Manually trigger a deployment with GitHub Actions by dispatching the `repository_dispatch` event.\n * @returns {Promise<Response>} Response.\n * @see https://docs.github.com/en/rest/repos/repos#create-a-repository-dispatch-event\n */\nexport const triggerDeployment = async () => {\n  const { owner, repo } = repository;\n\n  return /** @type {Promise<Response>} */ (\n    fetchAPI(`/repos/${owner}/${repo}/dispatches`, {\n      method: 'POST',\n      body: { event_type: 'sveltia-cms-publish' },\n      responseType: 'raw',\n    })\n  );\n};\n","import { getPathInfo } from '@sveltia/utils/file';\nimport { sleep } from '@sveltia/utils/misc';\nimport mime from 'mime';\n\nimport { fetchLastCommit } from '$lib/services/backends/git/github/commits';\nimport {\n  checkRepositoryAccess,\n  fetchDefaultBranchName,\n  repository,\n} from '$lib/services/backends/git/github/repository';\nimport { fetchAPI, fetchGraphQL } from '$lib/services/backends/git/shared/api';\nimport { fetchAndParseFiles } from '$lib/services/backends/git/shared/fetch';\nimport { dataLoadedProgress } from '$lib/services/contents';\n\n/**\n * @import {\n * Asset,\n * BaseFileListItem,\n * BaseFileListItemProps,\n * RepositoryContentsMap,\n * } from '$lib/types/private';\n */\n\n/**\n * Fetch the repository’s complete file list, and return it in the canonical format.\n * @param {string} [lastHash] The last commit’s SHA-1 hash.\n * @returns {Promise<BaseFileListItemProps[]>} File list.\n */\nexport const fetchFileList = async (lastHash) => {\n  const { owner, repo, branch } = repository;\n\n  const result =\n    /** @type {{ tree: { type: string, path: string, sha: string, size: number }[] }} */ (\n      await fetchAPI(`/repos/${owner}/${repo}/git/trees/${lastHash ?? branch}?recursive=1`)\n    );\n\n  return result.tree\n    .filter(({ type }) => type === 'blob')\n    .map(({ path, sha, size }) => ({ path, sha, size, name: getPathInfo(path).basename }));\n};\n\n/**\n * Get a query string for fetching file contents and metadata from the repository.\n * @param {any[]} chunk Sliced `fetchingFileList`.\n * @param {number} startIndex Start index.\n * @returns {string} Query string.\n */\nexport const getFileContentsQuery = (chunk, startIndex) => {\n  const innerQuery = chunk\n    .map(({ type, path, sha }, i) => {\n      const str = [];\n      const index = startIndex + i;\n\n      if (type !== 'asset') {\n        str.push(`\n          content_${index}: object(oid: ${JSON.stringify(sha)}) {\n            ... on Blob { text }\n          }\n        `);\n      }\n\n      str.push(`\n        commit_${index}: ref(qualifiedName: $branch) {\n          target {\n            ... on Commit {\n              history(first: 1, path: ${JSON.stringify(path)}) {\n                nodes {\n                  author {\n                    name\n                    email\n                    user {\n                      id: databaseId\n                      login\n                    }\n                  }\n                  committedDate\n                }\n              }\n            }\n          }\n        }\n      `);\n\n      return str.join('');\n    })\n    .join('');\n\n  return `\n    query($owner: String!, $repo: String!, $branch: String!) {\n      repository(owner: $owner, name: $repo) {\n        ${innerQuery}\n      }\n    }\n  `;\n};\n\n/**\n * Parse the file contents from the API response.\n * @param {BaseFileListItem[]} fetchingFiles Base file list.\n * @param {Record<string, any>} results Results from the API.\n * @returns {Promise<RepositoryContentsMap>} Parsed file contents map.\n */\nexport const parseFileContents = async (fetchingFiles, results) => {\n  const entries = fetchingFiles.map(({ path, sha, size }, index) => {\n    const {\n      author: { name, email, user: _user },\n      committedDate,\n    } = results[`commit_${index}`].target.history.nodes[0];\n\n    const data = {\n      sha,\n      // eslint-disable-next-line object-shorthand\n      size: /** @type {number} */ (size),\n      text: results[`content_${index}`]?.text,\n      meta: {\n        commitAuthor: {\n          name,\n          email,\n          id: _user?.id,\n          login: _user?.login,\n        },\n        commitDate: new Date(committedDate),\n      },\n    };\n\n    return [path, data];\n  });\n\n  return Object.fromEntries(entries);\n};\n\n/**\n * Fetch the metadata of entry/asset files as well as text file contents.\n * @param {BaseFileListItem[]} fetchingFiles Base file list.\n * @returns {Promise<RepositoryContentsMap>} Fetched contents map.\n */\nexport const fetchFileContents = async (fetchingFiles) => {\n  const fetchingFileList = structuredClone(fetchingFiles);\n  /** @type {any[][]} */\n  const chunks = [];\n  const chunkSize = 250;\n  /** @type {Record<string, any>} */\n  const results = {};\n\n  dataLoadedProgress.set(0);\n\n  // Show a fake progressbar because the request waiting time is long\n  const dataLoadedProgressInterval = window.setInterval(() => {\n    dataLoadedProgress.update((progress = 0) => progress + 1);\n  }, fetchingFileList.length / 10);\n\n  for (let i = 0; i < fetchingFileList.length; i += chunkSize) {\n    chunks.push(fetchingFileList.slice(i, i + chunkSize));\n  }\n\n  // Split the file list into chunks and repeat requests to avoid API timeout\n  await Promise.all(\n    chunks.map(async (chunk, index) => {\n      // Add a short delay to avoid Too Many Requests error\n      await sleep(index * 500);\n\n      const result = /** @type {{ repository: Record<string, any> }} */ (\n        await fetchGraphQL(getFileContentsQuery(chunk, index * chunkSize))\n      );\n\n      Object.assign(results, result.repository);\n    }),\n  );\n\n  window.clearInterval(dataLoadedProgressInterval);\n  dataLoadedProgress.set(undefined);\n\n  return parseFileContents(fetchingFileList, results);\n};\n\n/**\n * Fetch file list from the backend service, download/parse all the entry files, then cache them in\n * the {@link allEntries} and {@link allAssets} stores.\n */\nexport const fetchFiles = async () => {\n  await checkRepositoryAccess();\n\n  await fetchAndParseFiles({\n    repository,\n    fetchDefaultBranchName,\n    fetchLastCommit,\n    fetchFileList,\n    fetchFileContents,\n  });\n};\n\n/**\n * Fetch an asset as a Blob via the API.\n * @param {Asset} asset Asset to retrieve the file content.\n * @returns {Promise<Blob>} Blob data.\n * @see https://docs.github.com/en/rest/git/blobs#get-a-blob\n */\nexport const fetchBlob = async (asset) => {\n  const { owner, repo } = repository;\n  const { sha, path } = asset;\n\n  const response = /** @type {Response} */ (\n    await fetchAPI(`/repos/${owner}/${repo}/git/blobs/${sha}`, {\n      headers: { Accept: 'application/vnd.github.raw' },\n      responseType: 'raw',\n    })\n  );\n\n  // Handle SVG and other non-binary files\n  if (response.headers.get('Content-Type') !== 'application/octet-stream') {\n    return new Blob([await response.text()], { type: mime.getType(path) ?? 'text/plain' });\n  }\n\n  return response.blob();\n};\n","import { sendRequest } from '$lib/services/utils/networking';\n\n/**\n * @import { BackendServiceStatus } from '$lib/types/private';\n */\n\n/**\n * The URL of the GitHub status dashboard.\n */\nexport const STATUS_DASHBOARD_URL = 'https://www.githubstatus.com/';\n\n/**\n * The URL to check the GitHub service status.\n */\nconst STATUS_CHECK_URL = 'https://www.githubstatus.com/api/v2/status.json';\n\n/**\n * Check the GitHub service status.\n * @returns {Promise<BackendServiceStatus>} Current status.\n * @see https://www.githubstatus.com/api\n */\nexport const checkStatus = async () => {\n  try {\n    const {\n      status: { indicator },\n    } = /** @type {{ status: { indicator: string }}} */ (await sendRequest(STATUS_CHECK_URL));\n\n    if (indicator === 'none') {\n      return 'none';\n    }\n\n    if (indicator === 'minor') {\n      return 'minor';\n    }\n\n    if (indicator === 'major' || indicator === 'critical') {\n      return 'major';\n    }\n  } catch {\n    //\n  }\n\n  return 'unknown';\n};\n","import { stripSlashes } from '@sveltia/utils/string';\nimport { get } from 'svelte/store';\n\nimport {\n  normalizeGraphQLBaseURL,\n  normalizeRestBaseURL,\n} from '$lib/services/backends/git/github/api';\nimport { signIn, signOut } from '$lib/services/backends/git/github/auth';\nimport { commitChanges } from '$lib/services/backends/git/github/commits';\nimport {\n  BACKEND_LABEL,\n  BACKEND_NAME,\n  DEFAULT_API_ROOT,\n  DEFAULT_AUTH_PATH,\n  DEFAULT_AUTH_ROOT,\n} from '$lib/services/backends/git/github/constants';\nimport { triggerDeployment } from '$lib/services/backends/git/github/deployment';\nimport { fetchBlob, fetchFiles } from '$lib/services/backends/git/github/files';\nimport { getBaseURLs, repository } from '$lib/services/backends/git/github/repository';\nimport { checkStatus, STATUS_DASHBOARD_URL } from '$lib/services/backends/git/github/status';\nimport { apiConfig, graphqlVars } from '$lib/services/backends/git/shared/api';\nimport { getRepoURL } from '$lib/services/backends/git/shared/repository';\nimport { siteConfig } from '$lib/services/config';\nimport { prefs } from '$lib/services/user/prefs';\n\n/**\n * @import { ApiEndpointConfig, BackendService, RepositoryInfo } from '$lib/types/private';\n */\n\n/**\n * Initialize the GitHub backend.\n * @returns {RepositoryInfo | undefined} Repository info, or nothing when the configured backend is\n * not GitHub.\n */\nexport const init = () => {\n  const { backend } = get(siteConfig) ?? {};\n\n  if (backend?.name !== BACKEND_NAME) {\n    return undefined;\n  }\n\n  const {\n    repo: projectPath,\n    branch,\n    base_url: authRoot = DEFAULT_AUTH_ROOT,\n    auth_endpoint: authPath = DEFAULT_AUTH_PATH,\n    // GitHub Enterprise Server: https://HOSTNAME/api/v3\n    api_root: restApiRoot = DEFAULT_API_ROOT,\n    // GitHub Enterprise Server: https://HOSTNAME/api/graphql\n    graphql_api_root: graphqlApiRoot = restApiRoot,\n  } = backend;\n\n  const [owner, repo] = /** @type {string} */ (projectPath).split('/');\n  const repoPath = `${owner}/${repo}`;\n  const authURL = `${stripSlashes(authRoot)}/${stripSlashes(authPath)}`;\n  const repoURL = getRepoURL(restApiRoot, repoPath);\n\n  Object.assign(\n    repository,\n    /** @type {RepositoryInfo} */ ({\n      service: BACKEND_NAME,\n      label: BACKEND_LABEL,\n      owner,\n      repo,\n      branch,\n      repoURL,\n      databaseName: `${BACKEND_NAME}:${repoPath}`,\n      isSelfHosted: restApiRoot !== DEFAULT_API_ROOT,\n    }),\n    getBaseURLs(repoURL, branch),\n  );\n\n  Object.assign(\n    apiConfig,\n    /** @type {ApiEndpointConfig} */ ({\n      clientId: '', // @todo Implement OAuth token renewal\n      authURL,\n      tokenURL: authURL.replace('/authorize', '/access_token'),\n      restBaseURL: normalizeRestBaseURL(restApiRoot),\n      graphqlBaseURL: normalizeGraphQLBaseURL(graphqlApiRoot),\n    }),\n  );\n\n  Object.assign(graphqlVars, { owner, repo, branch });\n\n  if (get(prefs).devModeEnabled) {\n    // eslint-disable-next-line no-console\n    console.info('repositoryInfo', repository);\n  }\n\n  return repository;\n};\n\n/**\n * @type {BackendService}\n */\nexport default {\n  isGit: true,\n  name: BACKEND_NAME,\n  label: BACKEND_LABEL,\n  repository,\n  statusDashboardURL: STATUS_DASHBOARD_URL,\n  checkStatus,\n  init,\n  signIn,\n  signOut,\n  fetchFiles,\n  fetchBlob,\n  commitChanges,\n  triggerDeployment,\n};\n","export const BACKEND_NAME = 'gitlab';\nexport const BACKEND_LABEL = 'GitLab';\n\nexport const DEFAULT_API_ROOT = 'https://gitlab.com/api/v4';\nexport const DEFAULT_AUTH_ROOT = 'https://gitlab.com';\nexport const DEFAULT_AUTH_PATH = 'oauth/authorize';\n","import { get } from 'svelte/store';\n\nimport { BACKEND_NAME } from '$lib/services/backends/git/gitlab/constants';\nimport { fetchAPI } from '$lib/services/backends/git/shared/api';\nimport { user } from '$lib/services/user';\n\n/**\n * @import { AuthTokens, User } from '$lib/types/private';\n */\n\n/**\n * @typedef {object} UserProfileResponse\n * @property {number} id User ID.\n * @property {string} name User’s full name.\n * @property {string} username User’s login name.\n * @property {string} email User’s email address.\n * @property {string} avatar_url URL to the user’s avatar image.\n * @property {string} web_url URL to the user’s profile page.\n */\n\n/**\n * Retrieve the authenticated user’s profile information from GitLab REST API.\n * @param {AuthTokens} tokens Authentication tokens.\n * @returns {Promise<User>} User information.\n * @see https://docs.gitlab.com/api/users.html#list-current-user\n */\nexport const getUserProfile = async ({ token, refreshToken }) => {\n  const {\n    id,\n    name,\n    username: login,\n    email,\n    avatar_url: avatarURL,\n    web_url: profileURL,\n  } = /** @type {UserProfileResponse} */ (await fetchAPI('/user', { token, refreshToken }));\n\n  const _user = get(user);\n\n  // Update the tokens because these may have been renewed in `refreshAccessToken` while fetching\n  // the user info\n  if (_user?.token && _user.token !== token) {\n    token = _user.token;\n    refreshToken = _user.refreshToken;\n  }\n\n  return {\n    backendName: BACKEND_NAME,\n    id,\n    name,\n    login,\n    email,\n    avatarURL,\n    profileURL,\n    token,\n    refreshToken,\n  };\n};\n","import { get } from 'svelte/store';\n\nimport { BACKEND_NAME } from '$lib/services/backends/git/gitlab/constants';\nimport { getUserProfile } from '$lib/services/backends/git/gitlab/user';\nimport { apiConfig } from '$lib/services/backends/git/shared/api';\nimport {\n  handleClientSideAuthPopup,\n  initClientSideAuth,\n  initServerSideAuth,\n} from '$lib/services/backends/git/shared/auth';\nimport { siteConfig } from '$lib/services/config';\n\n/**\n * @import { SignInOptions, User } from '$lib/types/private';\n */\n\n/**\n * Retrieve the repository configuration and sign in with GitLab REST API.\n * @param {SignInOptions} options Options.\n * @returns {Promise<User | void>} User info, or nothing when finishing PKCE auth flow in a popup or\n * the sign-in flow cannot be started.\n * @throws {Error} When there was an authentication error.\n */\nexport const signIn = async ({ token, refreshToken, auto = false }) => {\n  if (!token) {\n    const { site_domain: siteDomain, auth_type: authType } = get(siteConfig)?.backend ?? {};\n    const { clientId, authURL, tokenURL } = apiConfig;\n    const authArgs = { backendName: BACKEND_NAME, authURL, scope: 'api' };\n\n    if (authType === 'pkce') {\n      const inPopup = window.opener?.origin === window.location.origin && window.name === 'auth';\n\n      if (inPopup) {\n        // We are in the auth popup window; let’s get the OAuth flow done\n        await handleClientSideAuthPopup({ backendName: BACKEND_NAME, clientId, tokenURL });\n      }\n\n      if (inPopup || auto) {\n        return undefined;\n      }\n\n      ({ token, refreshToken } = await initClientSideAuth({ ...authArgs, clientId }));\n    } else {\n      if (auto) {\n        return undefined;\n      }\n\n      // @todo Add `refreshToken` support\n      ({ token } = await initServerSideAuth({ ...authArgs, siteDomain }));\n    }\n  }\n\n  return getUserProfile({ token, refreshToken });\n};\n\n/**\n * Sign out from GitLab. Nothing to do here.\n * @returns {Promise<void>}\n */\nexport const signOut = async () => undefined;\n","import { get } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { fetchAPI, fetchGraphQL, graphqlVars } from '$lib/services/backends/git/shared/api';\nimport { REPOSITORY_INFO_PLACEHOLDER } from '$lib/services/backends/git/shared/repository';\nimport { user } from '$lib/services/user';\n\n/**\n * @import { RepositoryInfo } from '$lib/types/private';\n */\n\n/** @type {RepositoryInfo} */\nexport const repository = { ...REPOSITORY_INFO_PLACEHOLDER };\n\n/**\n * Generate base URLs for accessing the repository’s resources.\n * @param {string} repoURL The base URL of the repository.\n * @param {string} [branch] The branch name. Could be `undefined` if the branch is not specified in\n * the site configuration.\n * @returns {{ treeBaseURL: string, blobBaseURL: string }} An object containing the tree base URL\n * for browsing files, and the blob base URL for accessing file contents.\n */\nexport const getBaseURLs = (repoURL, branch) => ({\n  treeBaseURL: branch ? `${repoURL}/-/tree/${branch}` : repoURL,\n  blobBaseURL: branch ? `${repoURL}/-/blob/${branch}` : '',\n});\n\n/**\n * Check if the user has access to the current repository.\n * @throws {Error} If the user is not a collaborator of the repository.\n * @see https://docs.gitlab.com/api/members.html#get-a-member-of-a-group-or-project-including-inherited-and-invited-members\n */\nexport const checkRepositoryAccess = async () => {\n  const { owner, repo } = repository;\n  const userId = /** @type {number} */ (get(user)?.id);\n\n  const { ok } = /** @type {Response} */ (\n    await fetchAPI(`/projects/${encodeURIComponent(`${owner}/${repo}`)}/members/all/${userId}`, {\n      headers: { Accept: 'application/json' },\n      responseType: 'raw',\n    })\n  );\n\n  if (!ok) {\n    throw new Error('Not a collaborator of the repository', {\n      cause: new Error(get(_)('repository_no_access', { values: { repo } })),\n    });\n  }\n};\n\nconst FETCH_DEFAULT_BRANCH_NAME_QUERY = `\n  query($fullPath: ID!) {\n    project(fullPath: $fullPath) {\n      repository {\n        rootRef\n      }\n    }\n  }\n`;\n\n/**\n * Fetch the repository’s default branch name, which is typically `master` or `main`.\n * @returns {Promise<string>} Branch name.\n * @throws {Error} When the repository could not be found, or when the repository is empty.\n * @see https://docs.gitlab.com/api/graphql/reference/#repository\n */\nexport const fetchDefaultBranchName = async () => {\n  const { repo, repoURL = '' } = repository;\n\n  const result = /** @type {{ project: { repository?: { rootRef: string } } }} */ (\n    await fetchGraphQL(FETCH_DEFAULT_BRANCH_NAME_QUERY)\n  );\n\n  if (!result.project) {\n    throw new Error('Failed to retrieve the default branch name.', {\n      cause: new Error(get(_)('repository_not_found', { values: { repo } })),\n    });\n  }\n\n  const { rootRef: branch } = result.project.repository ?? {};\n\n  if (!branch) {\n    throw new Error('Failed to retrieve the default branch name.', {\n      cause: new Error(get(_)('repository_empty', { values: { repo } })),\n    });\n  }\n\n  Object.assign(repository, { branch }, getBaseURLs(repoURL, branch));\n  Object.assign(graphqlVars, { branch });\n\n  return branch;\n};\n","import { encodeBase64 } from '@sveltia/utils/file';\nimport { get } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { repository } from '$lib/services/backends/git/gitlab/repository';\nimport { fetchAPI, fetchGraphQL } from '$lib/services/backends/git/shared/api';\nimport { createCommitMessage } from '$lib/services/backends/git/shared/commits';\nimport { getGitHash } from '$lib/services/utils/file';\n\n/**\n * @import { CommitOptions, CommitResults, FileChange } from '$lib/types/private';\n */\n\n/**\n * @typedef {object} FetchLastCommitResponse\n * @property {object} project Project information.\n * @property {object} project.repository Repository information.\n * @property {object} project.repository.tree Tree information.\n * @property {object} project.repository.tree.lastCommit Last commit information.\n * @property {string} project.repository.tree.lastCommit.sha Commit SHA-1 hash.\n * @property {string} project.repository.tree.lastCommit.message Commit message.\n */\n\n/**\n * @typedef {object} CommitResponse\n * @property {string} id Commit SHA-1 hash.\n * @property {string} committed_date Commit date in ISO 8601 format.\n */\n\nconst FETCH_LAST_COMMIT_QUERY = `\n  query($fullPath: ID!, $branch: String!) {\n    project(fullPath: $fullPath) {\n      repository {\n        tree(ref: $branch) {\n          lastCommit {\n            sha\n            message\n          }\n        }\n      }\n    }\n  }\n`;\n\n/**\n * Fetch the last commit on the repository.\n * @returns {Promise<{ hash: string, message: string }>} Commit’s SHA-1 hash and message.\n * @throws {Error} When the branch could not be found.\n * @see https://docs.gitlab.com/api/graphql/reference/#tree\n */\nexport const fetchLastCommit = async () => {\n  const { repo, branch } = repository;\n\n  const result = /** @type {FetchLastCommitResponse} */ (\n    await fetchGraphQL(FETCH_LAST_COMMIT_QUERY)\n  );\n\n  if (!result.project) {\n    throw new Error('Failed to retrieve the last commit hash.', {\n      cause: new Error(get(_)('repository_not_found', { values: { repo } })),\n    });\n  }\n\n  const { lastCommit } = result.project.repository.tree ?? {};\n\n  if (!lastCommit) {\n    throw new Error('Failed to retrieve the last commit hash.', {\n      cause: new Error(get(_)('branch_not_found', { values: { repo, branch } })),\n    });\n  }\n\n  const { sha: hash, message } = lastCommit;\n\n  return { hash, message };\n};\n\n/**\n * Save entries or assets remotely. Note that the `commitCreate` GraphQL mutation is broken and\n * images cannot be uploaded properly, so we use the REST API instead.\n * @param {FileChange[]} changes File changes to be saved.\n * @param {CommitOptions} options Commit options.\n * @returns {Promise<CommitResults>} Commit results, including the commit SHA and updated file SHAs.\n * @see https://docs.gitlab.com/api/commits.html#create-a-commit-with-multiple-files-and-actions\n * @see https://gitlab.com/gitlab-org/gitlab/-/merge_requests/31102\n * @see https://docs.gitlab.com/api/graphql/reference/#mutationcommitcreate\n * @see https://forum.gitlab.com/t/how-to-commit-a-image-via-gitlab-commit-api/26632/4\n */\nexport const commitChanges = async (changes, options) => {\n  const { owner, repo, branch } = repository;\n\n  const actions = await Promise.all(\n    changes.map(async ({ action, path, previousPath, data = '' }) => ({\n      action,\n      content: typeof data === 'string' ? data : await encodeBase64(data),\n      encoding: typeof data === 'string' ? 'text' : 'base64',\n      file_path: path,\n      previous_path: previousPath,\n    })),\n  );\n\n  const { id: sha, committed_date: committedDate } = /** @type {CommitResponse} */ (\n    await fetchAPI(`/projects/${encodeURIComponent(`${owner}/${repo}`)}/repository/commits`, {\n      method: 'POST',\n      body: {\n        branch,\n        commit_message: createCommitMessage(changes, options),\n        actions,\n      },\n    })\n  );\n\n  // Calculate the SHA-1 hash for each file because the GitLab REST API does not return file SHAs\n  const entries = await Promise.all(\n    changes.map(async ({ path, data }) =>\n      data === undefined ? null : [path, { sha: await getGitHash(data) }],\n    ),\n  );\n\n  return {\n    sha,\n    date: new Date(committedDate),\n    files: Object.fromEntries(entries.filter((entry) => !!entry)),\n  };\n};\n","/* eslint-disable no-await-in-loop */\n\nimport { getPathInfo } from '@sveltia/utils/file';\n\nimport { fetchLastCommit } from '$lib/services/backends/git/gitlab/commits';\nimport {\n  checkRepositoryAccess,\n  fetchDefaultBranchName,\n  repository,\n} from '$lib/services/backends/git/gitlab/repository';\nimport { fetchAPI, fetchGraphQL } from '$lib/services/backends/git/shared/api';\nimport { fetchAndParseFiles } from '$lib/services/backends/git/shared/fetch';\nimport { dataLoadedProgress } from '$lib/services/contents';\n\n/**\n * @import {\n * Asset,\n * BaseFileListItem,\n * BaseFileListItemProps,\n * RepositoryContentsMap,\n * } from '$lib/types/private';\n */\n\n/**\n * @typedef {object} GitLabUserInfo\n * @property {string} [id] GitLab user ID.\n * @property {string} [username] GitLab user username.\n */\n\n/**\n * @typedef {object} GitLabCommit\n * @property {GitLabUserInfo | null} author Commit author’s GitLab user info.\n * @property {string} authorName Commit author’s full name.\n * @property {string} authorEmail Commit author’s email.\n * @property {string} committedDate Committed date.\n */\n\n/**\n * @typedef {object} FetchFileListResponse\n * @property {object} project Project information.\n * @property {object} project.repository Repository information.\n * @property {object} project.repository.tree Tree information.\n * @property {object} project.repository.tree.blobs Blobs information.\n * @property {{ type: string, path: string, sha: string }[]} project.repository.tree.blobs.nodes\n * List of file blobs.\n * @property {object} project.repository.tree.blobs.pageInfo Pagination information.\n * @property {string} project.repository.tree.blobs.pageInfo.endCursor Cursor for the next page.\n * @property {boolean} project.repository.tree.blobs.pageInfo.hasNextPage Whether there are more\n * pages to fetch.\n */\n\n/**\n * @typedef {object} BlobItem\n * @property {string} size Size of the blob in bytes.\n * @property {string} rawTextBlob Raw text content of the blob.\n */\n\n/**\n * @typedef {object} FetchBlobsResponse\n * @property {object} project Project information.\n * @property {object} project.repository Repository information.\n * @property {object} project.repository.blobs Blobs information.\n * @property {BlobItem[]} project.repository.blobs.nodes List of file blobs with their sizes and raw\n * text contents.\n */\n\n/**\n * @typedef {object} FetchCommitsResponse\n * @property {object} project Project information.\n * @property {Record<string, { lastCommit: GitLabCommit }>} project.repository Mapping of file paths\n * to their last commit information.\n */\n\nconst FETCH_FILE_LIST_QUERY = `\n  query($fullPath: ID!, $branch: String!, $cursor: String!) {\n    project(fullPath: $fullPath) {\n      repository {\n        tree(ref: $branch, recursive: true) {\n          blobs(after: $cursor) {\n            nodes {\n              type\n              path\n              sha\n            }\n            pageInfo {\n              endCursor\n              hasNextPage\n            }\n          }\n        }\n      }\n    }\n  }\n`;\n\n/**\n * Fetch the repository’s complete file list, and return it in the canonical format.\n * @returns {Promise<BaseFileListItemProps[]>} File list.\n * @see https://docs.gitlab.com/api/graphql/reference/index.html#repositorytree\n * @see https://stackoverflow.com/questions/18952935/how-to-get-subfolders-and-files-using-gitlab-api\n */\nexport const fetchFileList = async () => {\n  /** @type {{ type: string, path: string, sha: string }[]} */\n  const blobs = [];\n  let cursor = '';\n\n  // Since GitLab has a limit of 100 records per query, use pagination to fetch all the files\n  for (;;) {\n    const result = /** @type {FetchFileListResponse} */ (\n      await fetchGraphQL(FETCH_FILE_LIST_QUERY, { cursor })\n    );\n\n    const {\n      nodes,\n      pageInfo: { endCursor, hasNextPage },\n    } = result.project.repository.tree.blobs;\n\n    blobs.push(...nodes);\n    cursor = endCursor;\n\n    if (!hasNextPage) {\n      break;\n    }\n  }\n\n  // The `size` is not available here; it will be retrieved in `fetchFileContents` below\n  return blobs\n    .filter(({ type }) => type === 'blob')\n    .map(({ path, sha }) => ({ path, sha, size: 0, name: getPathInfo(path).basename }));\n};\n\nconst FETCH_BLOBS_QUERY = `\n  query($fullPath: ID!, $branch: String!, $paths: [String!]!) {\n    project(fullPath: $fullPath) {\n      repository {\n        blobs(ref: $branch, paths: $paths) {\n          nodes {\n            size\n            rawTextBlob\n          }\n        }\n      }\n    }\n  }\n`;\n\n/**\n * Fetch the blobs for the given file paths. This function retrieves the raw text contents of files\n * in the repository using the GitLab GraphQL API. It handles pagination by fetching a fixed number\n * of paths at a time, ensuring that the complexity score of the query does not exceed the limit. It\n * also updates the `dataLoadedProgress` store to reflect the progress of data loading.\n * @param {string[]} allPaths List of all file paths to fetch.\n * @returns {Promise<BlobItem[]>} Fetched blobs with their sizes and raw text contents.\n * @see https://docs.gitlab.com/api/graphql/reference/#repositoryblob\n * @see https://docs.gitlab.com/api/graphql/reference/#tree\n * @see https://forum.gitlab.com/t/graphql-api-read-raw-file/35389\n * @see https://docs.gitlab.com/api/graphql/#limits\n */\nexport const fetchBlobs = async (allPaths) => {\n  const paths = [...allPaths];\n  /** @type {BlobItem[]} */\n  const blobs = [];\n\n  dataLoadedProgress.set(0);\n\n  // Fetch all the text contents with the GraphQL API. Pagination would fail if `paths` becomes too\n  // long, so we just use a fixed number of paths to iterate. The complexity score of this query is\n  // 15 + (2 * node size) so 100 paths = 215 complexity, where the max number of records is 100 and\n  // max complexity is 250 or 300\n  for (;;) {\n    const currentPaths = paths.splice(0, 100);\n\n    const result = /** @type {FetchBlobsResponse} */ (\n      await fetchGraphQL(FETCH_BLOBS_QUERY, { paths: currentPaths })\n    );\n\n    blobs.push(...result.project.repository.blobs.nodes);\n    dataLoadedProgress.set(Math.ceil(((allPaths.length - paths.length) / allPaths.length) * 100));\n\n    if (!paths.length) {\n      break;\n    }\n  }\n\n  dataLoadedProgress.set(undefined);\n\n  return blobs;\n};\n\n/**\n * Generate the inner GraphQL query for fetching the last commit information of a file at the\n * specified path.\n * @param {string} path File path.\n * @param {number} index Index of the path in the current batch.\n * @returns {string} GraphQL query string for fetching the last commit information of the file at\n * the specified path.\n */\nconst getFetchCommitsInnerQuery = (path, index) => `\n  tree_${index}: tree(ref: $branch, path: ${JSON.stringify(path)}) {\n    lastCommit {\n      author {\n        id\n        username\n      }\n      authorName\n      authorEmail\n      committedDate\n    }\n  }\n`;\n\n/**\n * Fetch commit information for each file in the repository. This function retrieves the last commit\n * information for each file path using the GitLab GraphQL API. It handles pagination by fetching a\n * fixed number of paths at a time, ensuring that the complexity score of the query does not exceed\n * the limit. The commit information includes the author’s GitLab user info, name, email, and\n * committed date.\n * @param {string[]} allPaths List of all file paths to fetch.\n * @returns {Promise<GitLabCommit[]>} Fetched commit information for each file.\n */\nexport const fetchCommits = async (allPaths) => {\n  const paths = [...allPaths];\n  /** @type {GitLabCommit[]} */\n  const commits = [];\n\n  // The complexity score of this query is 5 + (18 * node size) so 13 paths = 239 complexity\n  for (;;) {\n    const currentPaths = paths.splice(0, 13);\n\n    const query = `\n      query($fullPath: ID!, $branch: String!) {\n        project(fullPath: $fullPath) {\n          repository {\n            ${currentPaths.map(getFetchCommitsInnerQuery).join('')}\n          }\n        }\n      }\n    `;\n\n    const result = /** @type {FetchCommitsResponse} */ (await fetchGraphQL(query));\n\n    commits.push(...Object.values(result.project.repository).map(({ lastCommit }) => lastCommit));\n\n    if (!paths.length) {\n      break;\n    }\n  }\n\n  return commits;\n};\n\n/**\n * Parse the file contents from the API response.\n * @param {BaseFileListItem[]} fetchingFiles Base file list.\n * @param {BlobItem[]} blobs File sizes and raw text blobs.\n * @param {GitLabCommit[]} commits Commit information for each file.\n * @returns {Promise<RepositoryContentsMap>} Parsed file contents map.\n */\nexport const parseFileContents = async (fetchingFiles, blobs, commits) => {\n  const entries = fetchingFiles.map(({ path, sha }, index) => {\n    const { size, rawTextBlob } = blobs[index];\n    const commit = commits[index];\n\n    const data = {\n      sha,\n      size: Number(size),\n      text: rawTextBlob,\n      meta: {},\n    };\n\n    if (commit) {\n      const { author, authorName, authorEmail, committedDate } = commit;\n      const { id, username } = author ?? {};\n      const idMatcher = id?.match(/\\d+/);\n\n      data.meta = {\n        commitAuthor: {\n          name: authorName,\n          email: authorEmail,\n          id: idMatcher ? Number(idMatcher[0]) : undefined,\n          login: username,\n        },\n        committedDate: new Date(committedDate),\n      };\n    }\n\n    return [path, data];\n  });\n\n  return Object.fromEntries(entries);\n};\n\n/**\n * Fetch the metadata of entry/asset files as well as text file contents.\n * @param {BaseFileListItem[]} fetchingFiles Base file list.\n * @returns {Promise<RepositoryContentsMap>} Fetched contents map.\n */\nexport const fetchFileContents = async (fetchingFiles) => {\n  const allPaths = fetchingFiles.map(({ path }) => path);\n  const blobs = await fetchBlobs(allPaths);\n  // Fetch commit info only when there aren’t many files, because it’s costly\n  const commits = allPaths.length < 100 ? await fetchCommits(allPaths) : [];\n\n  return parseFileContents(fetchingFiles, blobs, commits);\n};\n\n/**\n * Fetch file list from the backend service, download/parse all the entry files, then cache them in\n * the {@link allEntries} and {@link allAssets} stores.\n */\nexport const fetchFiles = async () => {\n  await checkRepositoryAccess();\n\n  await fetchAndParseFiles({\n    repository,\n    fetchDefaultBranchName,\n    fetchLastCommit,\n    fetchFileList,\n    fetchFileContents,\n  });\n};\n\n/**\n * Fetch an asset as a Blob via the API. We use the `lfs` query parameter to ensure that GitLab\n * returns the file content even if it’s tracked by Git LFS.\n * @param {Asset} asset Asset to retrieve the file content.\n * @returns {Promise<Blob>} Blob data.\n * @see https://docs.gitlab.com/api/repository_files/#get-raw-file-from-repository\n */\nexport const fetchBlob = async (asset) => {\n  const { owner, repo, branch = '' } = repository;\n  const { path } = asset;\n\n  return /** @type {Promise<Blob>} */ (\n    fetchAPI(\n      `/projects/${encodeURIComponent(`${owner}/${repo}`)}/repository/files` +\n        `/${encodeURIComponent(path)}/raw?lfs=true&ref=${encodeURIComponent(branch)}`,\n      { responseType: 'blob' },\n    )\n  );\n};\n","import { sendRequest } from '$lib/services/utils/networking';\n\n/**\n * @import { BackendServiceStatus } from '$lib/types/private';\n */\n\n/**\n * The URL of the GitLab status dashboard.\n */\nexport const STATUS_DASHBOARD_URL = 'https://status.gitlab.com/';\n\n/**\n * The URL to check the GitLab service status.\n */\nconst STATUS_CHECK_URL = 'https://status-api.hostedstatus.com/1.0/status/5b36dc6502d06804c08349f7';\n\n/**\n * Check the GitLab service status.\n * @returns {Promise<BackendServiceStatus>} Current status.\n * @see https://kb.status.io/developers/public-status-api/\n */\nexport const checkStatus = async () => {\n  try {\n    const {\n      result: {\n        status_overall: { status_code: status },\n      },\n    } = /** @type {{ result: { status_overall: { status_code: number } } }} */ (\n      await sendRequest(STATUS_CHECK_URL)\n    );\n\n    if (status === 100) {\n      return 'none';\n    }\n\n    if ([200, 300, 400].includes(status)) {\n      return 'minor';\n    }\n\n    if ([500, 600].includes(status)) {\n      return 'major';\n    }\n  } catch {\n    //\n  }\n\n  return 'unknown';\n};\n","import { stripSlashes } from '@sveltia/utils/string';\nimport { get } from 'svelte/store';\n\nimport { signIn, signOut } from '$lib/services/backends/git/gitlab/auth';\nimport { commitChanges } from '$lib/services/backends/git/gitlab/commits';\nimport {\n  BACKEND_LABEL,\n  BACKEND_NAME,\n  DEFAULT_API_ROOT,\n  DEFAULT_AUTH_PATH,\n  DEFAULT_AUTH_ROOT,\n} from '$lib/services/backends/git/gitlab/constants';\nimport { fetchBlob, fetchFiles } from '$lib/services/backends/git/gitlab/files';\nimport { getBaseURLs, repository } from '$lib/services/backends/git/gitlab/repository';\nimport { checkStatus, STATUS_DASHBOARD_URL } from '$lib/services/backends/git/gitlab/status';\nimport { apiConfig, graphqlVars } from '$lib/services/backends/git/shared/api';\nimport { getRepoURL } from '$lib/services/backends/git/shared/repository';\nimport { siteConfig } from '$lib/services/config';\nimport { prefs } from '$lib/services/user/prefs';\n\n/**\n * @import { ApiEndpointConfig, BackendService, RepositoryInfo } from '$lib/types/private';\n */\n\n/**\n * Initialize the GitLab backend.\n * @returns {RepositoryInfo | undefined} Repository info, or nothing when the configured backend is\n * not GitLab.\n */\nexport const init = () => {\n  const { backend } = get(siteConfig) ?? {};\n\n  if (backend?.name !== BACKEND_NAME) {\n    return undefined;\n  }\n\n  const {\n    repo: projectPath,\n    branch,\n    base_url: authRoot = DEFAULT_AUTH_ROOT,\n    auth_endpoint: authPath = DEFAULT_AUTH_PATH,\n    app_id: clientId = '',\n    // https://HOSTNAME/api/v1 or https://HOSTNAME/PATH/api/v1\n    api_root: restApiRoot = DEFAULT_API_ROOT,\n    // https://HOSTNAME/api/graphql or https://HOSTNAME/PATH/api/graphql\n    graphql_api_root: graphqlApiRoot = restApiRoot.replace(/\\/api\\/.+$/, '/api/graphql'),\n  } = backend;\n\n  /**\n   * In GitLab terminology, an owner is called a namespace, and a repository is called a project. A\n   * namespace can contain a group and a subgroup concatenated with a `/` so we cannot simply use\n   * `split('/')` here. A project name should not contain a `/`.\n   * @see https://docs.gitlab.com/user/namespace/\n   * @see https://gitlab.com/gitlab-org/gitlab/-/merge_requests/80055\n   */\n  const { owner, repo } =\n    /** @type {string} */ (projectPath).match(/(?<owner>.+)\\/(?<repo>[^/]+)$/)?.groups ?? {};\n\n  const repoPath = `${owner}/${repo}`;\n  const authURL = `${stripSlashes(authRoot)}/${stripSlashes(authPath)}`;\n  const repoURL = getRepoURL(restApiRoot, repoPath);\n\n  Object.assign(\n    repository,\n    /** @type {RepositoryInfo} */ ({\n      service: BACKEND_NAME,\n      label: BACKEND_LABEL,\n      owner,\n      repo,\n      branch,\n      repoURL,\n      databaseName: `${BACKEND_NAME}:${repoPath}`,\n      isSelfHosted: restApiRoot !== DEFAULT_API_ROOT,\n    }),\n    getBaseURLs(repoURL, branch),\n  );\n\n  Object.assign(\n    apiConfig,\n    /** @type {ApiEndpointConfig} */ ({\n      clientId,\n      authURL,\n      tokenURL: authURL.replace('/authorize', '/token'),\n      authScheme: 'Bearer',\n      restBaseURL: stripSlashes(restApiRoot),\n      graphqlBaseURL: stripSlashes(graphqlApiRoot),\n    }),\n  );\n\n  Object.assign(graphqlVars, {\n    fullPath: repoPath,\n    branch,\n  });\n\n  if (get(prefs).devModeEnabled) {\n    // eslint-disable-next-line no-console\n    console.info('repositoryInfo', repository);\n  }\n\n  return repository;\n};\n\n/**\n * @type {BackendService}\n */\nexport default {\n  isGit: true,\n  name: BACKEND_NAME,\n  label: BACKEND_LABEL,\n  repository,\n  statusDashboardURL: STATUS_DASHBOARD_URL,\n  checkStatus,\n  init,\n  signIn,\n  signOut,\n  fetchFiles,\n  fetchBlob,\n  commitChanges,\n};\n","import { derived, writable } from 'svelte/store';\n\nimport local from '$lib/services/backends/fs/local';\nimport test from '$lib/services/backends/fs/test';\nimport gitea from '$lib/services/backends/git/gitea';\nimport github from '$lib/services/backends/git/github';\nimport gitlab from '$lib/services/backends/git/gitlab';\n\n/**\n * @import { Readable, Writable } from 'svelte/store';\n * @import { BackendService } from '$lib/types/private';\n * @import { BackendName } from '$lib/types/public';\n */\n\n/**\n * List of all the supported backend services.\n * @type {Record<string, BackendService>}\n * @see https://decapcms.org/docs/backends-overview/\n */\nexport const allBackendServices = {\n  github,\n  gitlab,\n  gitea,\n  local,\n  'test-repo': test,\n};\n\n/**\n * List of valid backend service names. This is used to validate the backend name in the site\n * configuration. Note that the `local` backend is not included here, as it’s a special case that\n * requires a Git backend service to be configured.\n * @type {BackendName[]}\n */\nexport const validBackendNames = /** @type {BackendName[]} */ (\n  Object.keys(allBackendServices).filter((name) => name !== 'local')\n);\n\n/**\n * List of all the Git backend services.\n * @type {Record<string, BackendService>}\n */\nexport const gitBackendServices = Object.fromEntries(\n  Object.entries(allBackendServices).filter(([, service]) => service.isGit),\n);\n\n/**\n * Currently selected backend service name.\n * @type {Writable<string | undefined>}\n */\nexport const backendName = writable();\n\n/**\n * Currently selected backend service.\n * @type {Readable<BackendService | undefined>}\n */\nexport const backend = derived([backendName], ([name], _set, update) => {\n  update((currentService) => {\n    const newService = name ? allBackendServices[name] : undefined;\n\n    if (newService && newService !== currentService) {\n      newService.init();\n    }\n\n    return newService;\n  });\n});\n\n/**\n * Whether the last commit was published. This is used to determine if the last commit was published\n * to the remote backend. If the last commit was not published, the user will be prompted to publish\n * it.\n * @type {Writable<boolean>}\n */\nexport const isLastCommitPublished = writable(true);\n","import { getPathInfo } from '@sveltia/utils/file';\nimport { compare, stripSlashes } from '@sveltia/utils/string';\n\nimport { getValidCollections } from '$lib/services/contents/collection';\nimport { getValidCollectionFiles } from '$lib/services/contents/collection/files';\n\n/**\n * @import { AssetFolderInfo, InternalSiteConfig } from '$lib/types/private';\n * @import { CollectionDivider, CollectionFile } from '$lib/types/public';\n */\n\n/**\n * @typedef {object} NormalizeAssetFolderArgs\n * @property {string} collectionName Collection name.\n * @property {string} [fileName] Collection file name. File/singleton collection only.\n * @property {string} mediaFolder Raw `media_folder` option of the collection or collection file.\n * @property {string | undefined} publicFolder Raw `public_folder` option of the collection or\n * collection file.\n * @property {string | undefined} baseFolder `folder` option for the collection or base directory of\n * the collection file.\n * @property {GlobalFolders} globalFolders Global folders information.\n */\n\n/**\n * @typedef {object} GlobalFolders\n * @property {string} globalMediaFolder Normalized global `media_folder` option.\n * @property {string} globalPublicFolder Normalized global `public_folder` option.\n */\n\n/**\n * Collection-level and file-level asset folders.\n * @type {AssetFolderInfo[]}\n * @see https://decapcms.org/docs/collection-folder/#media-and-public-folder\n */\nconst assetFolders = [];\n\n/**\n * Replace `{{media_folder}}` and `{{public_folder}}` template tags.\n * @param {string} folder Original folder path.\n * @param {object} context Context for replacement.\n * @param {string} context.globalMediaFolder Normalized global `media_folder` option.\n * @param {string} context.globalPublicFolder Normalized global `public_folder` option.\n * @returns {string} Replaced folder path with a leading slash so it won’t be treated as relative.\n */\nexport const replaceTags = (folder, { globalMediaFolder, globalPublicFolder }) =>\n  folder\n    .trim()\n    .replace('{{media_folder}}', `/${globalMediaFolder}`)\n    .replace('{{public_folder}}', `/${globalPublicFolder}`)\n    .replace('//', '/');\n\n/**\n * Get a normalized asset folder information given the arguments.\n * @param {NormalizeAssetFolderArgs} args Arguments.\n * @returns {AssetFolderInfo} Normalized asset folder information.\n */\nexport const normalizeAssetFolder = ({\n  collectionName,\n  fileName,\n  mediaFolder,\n  publicFolder,\n  baseFolder,\n  globalFolders,\n}) => {\n  mediaFolder = replaceTags(mediaFolder, globalFolders);\n  publicFolder =\n    publicFolder !== undefined ? replaceTags(publicFolder, globalFolders) : mediaFolder;\n\n  const entryRelative = !mediaFolder.startsWith('/');\n\n  return {\n    collectionName,\n    fileName,\n    internalPath: stripSlashes(entryRelative ? (baseFolder ?? '') : mediaFolder),\n    publicPath:\n      // Prefix the public path with `/` unless it’s empty or starting with `.` (entry-relative\n      // setting) or starting with `@` (framework-specific)\n      publicFolder === '' || /^[.@]/.test(publicFolder)\n        ? publicFolder\n        : `/${stripSlashes(publicFolder)}`,\n    entryRelative,\n    hasTemplateTags: /{{.+?}}/.test(mediaFolder),\n  };\n};\n\n/**\n * Add an asset folder for a collection or collection file if it’s not the same as the global\n * asset folder.\n * @param {NormalizeAssetFolderArgs} args Arguments for {@link normalizeAssetFolder}.\n */\nexport const addFolderIfNeeded = (args) => {\n  if (args.mediaFolder === undefined) {\n    return;\n  }\n\n  const folder = normalizeAssetFolder(args);\n  const { globalMediaFolder, globalPublicFolder } = args.globalFolders;\n\n  if (\n    !folder.entryRelative &&\n    folder.internalPath === globalMediaFolder &&\n    folder.publicPath === globalPublicFolder\n  ) {\n    return;\n  }\n\n  assetFolders.push(folder);\n};\n\n/**\n * Iterate through files in a file/singleton collection and add their folders.\n * @param {object} args Arguments.\n * @param {string} args.collectionName Collection name.\n * @param {(CollectionFile | CollectionDivider)[]} args.files Collection files. May include\n * dividers.\n * @param {GlobalFolders} args.globalFolders Global folders information.\n */\nexport const iterateFiles = ({ collectionName, files, globalFolders }) => {\n  getValidCollectionFiles(files).forEach((file) => {\n    const {\n      name: fileName,\n      file: filePath,\n      media_folder: fileMediaFolder,\n      public_folder: filePublicFolder,\n    } = file;\n\n    addFolderIfNeeded({\n      collectionName,\n      fileName,\n      // @ts-ignore\n      mediaFolder: fileMediaFolder,\n      publicFolder: filePublicFolder,\n      baseFolder: getPathInfo(filePath).dirname,\n      globalFolders,\n    });\n  });\n};\n\n/**\n * Get all asset folders.\n * @param {InternalSiteConfig} config Site configuration.\n * @returns {AssetFolderInfo[]} Asset folders.\n */\nexport const getAllAssetFolders = (config) => {\n  // Clear any previous results\n  assetFolders.length = 0;\n\n  const {\n    media_folder: _globalMediaFolder,\n    public_folder: _globalPublicFolder,\n    collections,\n    singletons,\n  } = config;\n\n  // Normalize the media folder: an empty string, `/` and `.` are all considered as the root folder\n  const globalMediaFolder = stripSlashes(_globalMediaFolder).replace(/^\\.$/, '');\n\n  // Some frameworks expect asset paths starting with `@`, like `@assets/images/...`. Remove an\n  // extra leading slash in that case. A trailing slash should always be removed internally.\n  const globalPublicFolder = _globalPublicFolder\n    ? `/${stripSlashes(_globalPublicFolder)}`.replace(/^\\/@/, '@')\n    : `/${globalMediaFolder}`;\n\n  /** @type {AssetFolderInfo} */\n  const allAssetsFolder = {\n    collectionName: undefined,\n    internalPath: undefined,\n    publicPath: undefined,\n    entryRelative: false,\n    hasTemplateTags: false,\n  };\n\n  /** @type {AssetFolderInfo} */\n  const globalAssetFolder = {\n    collectionName: undefined,\n    internalPath: globalMediaFolder,\n    publicPath: globalPublicFolder,\n    entryRelative: false,\n    hasTemplateTags: false,\n  };\n\n  const globalFolders = { globalMediaFolder, globalPublicFolder };\n\n  getValidCollections({ collections }).forEach((collection) => {\n    const {\n      name: collectionName,\n      files: collectionFiles,\n      // e.g. `content/posts`\n      folder: baseFolder,\n      // e.g. `{{slug}}/index`\n      path: entryPath,\n      // relative path, e.g. `` (an empty string), `./` (same as an empty string),\n      // `{{media_folder}}/posts`, etc. or absolute path, e.g. `/static/images/posts`, etc.\n      media_folder: _mediaFolder,\n      // `undefined`, `` (an empty string), `{{public_folder}}`, etc. or relative/absolute path\n      public_folder: publicFolder,\n    } = collection;\n\n    // When specifying a `path` on an entry collection, `media_folder` defaults to an empty string\n    const mediaFolder = _mediaFolder === undefined && entryPath !== undefined ? '' : _mediaFolder;\n\n    addFolderIfNeeded({\n      collectionName,\n      // @ts-ignore\n      mediaFolder,\n      publicFolder,\n      baseFolder,\n      globalFolders,\n    });\n\n    if (collectionFiles?.length) {\n      iterateFiles({ collectionName, files: collectionFiles, globalFolders });\n    }\n  });\n\n  if (singletons?.length) {\n    // Singleton collection is always at the end\n    iterateFiles({ collectionName: '_singletons', files: singletons, globalFolders });\n  }\n\n  assetFolders.sort((a, b) => compare(a.internalPath ?? '', b.internalPath ?? ''));\n\n  return [allAssetsFolder, globalAssetFolder, ...assetFolders];\n};\n","import { compare, stripSlashes } from '@sveltia/utils/string';\n\nimport { getValidCollections } from '$lib/services/contents/collection';\nimport {\n  getValidCollectionFiles,\n  isValidCollectionFile,\n} from '$lib/services/contents/collection/files';\nimport { getLocalePath } from '$lib/services/contents/i18n';\nimport { normalizeI18nConfig } from '$lib/services/contents/i18n/config';\n\n/**\n * @import { EntryFolderInfo, InternalLocaleCode, InternalSiteConfig } from '$lib/types/private';\n * @import { Collection, CollectionFile } from '$lib/types/public';\n */\n\n/**\n * Get a map of file paths for the given collection and file.\n * @param {object} args Arguments.\n * @param {Collection} args.collection Collection.\n * @param {CollectionFile} args.file Collection file.\n * @returns {Record<InternalLocaleCode, string>} Map of file paths for each locale.\n */\nexport const getFilePathMap = ({ collection, file }) => {\n  const path = stripSlashes(file.file);\n\n  if (!path.includes('{{locale}}')) {\n    return { _default: path };\n  }\n\n  const _i18n = normalizeI18nConfig(collection, file);\n\n  return Object.fromEntries(\n    _i18n.allLocales.map((locale) => [locale, getLocalePath({ _i18n, locale, path })]),\n  );\n};\n\n/**\n * Get a collection file folder information.\n * @param {Collection} collection Collection.\n * @param {CollectionFile} file Collection file.\n * @returns {EntryFolderInfo | undefined} Collection file folder information.\n */\nexport const getCollectionFileFolder = (collection, file) => {\n  if (!isValidCollectionFile(file)) {\n    return undefined;\n  }\n\n  return {\n    collectionName: collection.name,\n    fileName: file.name,\n    filePathMap: getFilePathMap({ collection, file }),\n  };\n};\n\n/**\n * Compare two entry folders by their file paths. This is used to sort entry folders.\n * @param {EntryFolderInfo} a One entry folder.\n * @param {EntryFolderInfo} b Another entry folder.\n * @returns {number} Comparison result.\n */\nexport const compareFilePath = (a, b) =>\n  compare(Object.values(a.filePathMap ?? {})[0], Object.values(b.filePathMap ?? {})[0]);\n\n/**\n * Get entry collection folders.\n * @param {InternalSiteConfig} config Site configuration.\n * @returns {EntryFolderInfo[]} Entry folders.\n */\nexport const getEntryCollectionFolders = ({ collections }) =>\n  getValidCollections({ collections, type: 'entry', visible: true })\n    .map((collection) => {\n      const { name: collectionName, folder } = collection;\n      const folderPath = stripSlashes(/** @type {string} */ (folder));\n\n      const {\n        allLocales,\n        structureMap: { i18nRootMultiFolder },\n      } = normalizeI18nConfig(collection);\n\n      return {\n        collectionName,\n        folderPath,\n        folderPathMap: Object.fromEntries(\n          allLocales.map((locale) => [\n            locale,\n            i18nRootMultiFolder ? `${locale}/${folderPath}` : folderPath,\n          ]),\n        ),\n      };\n    })\n    .sort((a, b) => compare(a.folderPath ?? '', b.folderPath ?? ''));\n\n/**\n * Get file collection folders.\n * @param {InternalSiteConfig} config Site configuration.\n * @returns {EntryFolderInfo[]} Entry folders.\n */\nexport const getFileCollectionFolders = ({ collections }) =>\n  getValidCollections({ collections, type: 'file', visible: true })\n    .map((collection) =>\n      (collection.files ?? []).map((file) => getCollectionFileFolder(collection, file)),\n    )\n    .flat(1)\n    .filter((file) => !!file)\n    .sort(compareFilePath);\n\n/**\n * Get singleton collection folders.\n * @param {InternalSiteConfig} config Site configuration.\n * @returns {EntryFolderInfo[]} Entry folders.\n */\nexport const getSingletonCollectionFolders = ({ singletons }) => {\n  const files = Array.isArray(singletons) ? getValidCollectionFiles(singletons) : [];\n\n  if (!files.length) {\n    return [];\n  }\n\n  const singletonCollection = { name: '_singletons', files };\n\n  return files\n    .map((file) => getCollectionFileFolder(singletonCollection, file))\n    .filter((file) => !!file)\n    .sort(compareFilePath);\n};\n\n/**\n * Get all entry folders.\n * @param {InternalSiteConfig} config Site configuration.\n * @returns {EntryFolderInfo[]} Entry folders.\n */\nexport const getAllEntryFolders = (config) => [\n  ...getEntryCollectionFolders(config),\n  ...getFileCollectionFolders(config),\n  ...getSingletonCollectionFolders(config),\n];\n","import { isObject } from '@sveltia/utils/object';\nimport merge from 'deepmerge';\nimport { get } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\nimport YAML from 'yaml';\n\nconst SUPPORTED_TYPES = ['text/yaml', 'application/yaml', 'application/json'];\n\n/**\n * Fetch a single configuration file.\n * @param {object} link Link attributes.\n * @param {string} link.href File path.\n * @param {string} [link.type] MIME type.\n * @returns {Promise<object>} Configuration.\n * @throws {Error} When fetching or parsing has failed.\n */\nconst fetchFile = async ({ href, type = 'application/yaml' }) => {\n  /** @type {Response} */\n  let response;\n\n  if (!SUPPORTED_TYPES.includes(type)) {\n    throw new Error(get(_)('config.error.parse_failed'), {\n      cause: new Error(get(_)('config.error.parse_failed_unsupported_type')),\n    });\n  }\n\n  try {\n    response = await fetch(href);\n  } catch (ex) {\n    throw new Error(get(_)('config.error.fetch_failed'), { cause: ex });\n  }\n\n  const { ok, status } = response;\n\n  if (!ok) {\n    throw new Error(get(_)('config.error.fetch_failed'), {\n      cause: new Error(get(_)('config.error.fetch_failed_not_ok', { values: { status } })),\n    });\n  }\n\n  /** @type {object} */\n  let result;\n\n  try {\n    if (type === 'application/json') {\n      result = response.json();\n    } else {\n      result = YAML.parse(await response.text(), { merge: true });\n    }\n  } catch (ex) {\n    throw new Error(get(_)('config.error.parse_failed'), { cause: ex });\n  }\n\n  if (!isObject(result)) {\n    throw new Error(get(_)('config.error.parse_failed'), {\n      cause: new Error(get(_)('config.error.parse_failed_invalid_object')),\n    });\n  }\n\n  return result;\n};\n\n/**\n * Get the path to the configuration file. Depending on the server or framework configuration, a\n * trailing slash may be removed from the CMS `/admin/` URL. In that case, we need to determine the\n * correct path to the configuration file.\n * @param {string} path Current `location.pathname` starting with a slash, like `/admin/`, `/admin`,\n * or `/admin/index.html`.\n * @returns {string} Path to the configuration file.\n */\nexport const getConfigPath = (path) => {\n  // If the path ends with a slash, like `/admin/`, we can safely assume it is a directory and\n  // append `config.yml`.\n  if (path.endsWith('/')) {\n    return `${path}config.yml`;\n  }\n\n  const parts = path.split('/');\n  const lastPart = parts.pop();\n\n  // If the last part of the path contains a dot, like `/admin/index.html`, we assume it is a file\n  // and append `config.yml` to the directory part of the path. For example, `/admin/index.html`\n  // becomes `/admin/config.yml`.\n  if (lastPart?.includes('.')) {\n    return `${parts.join('/')}/config.yml`;\n  }\n\n  // If the last part does not contain a dot, we assume it is a directory and append `config.yml`.\n  // For example, `/admin` becomes `/admin/config.yml`.\n  return `${path}/config.yml`;\n};\n\n/**\n * Fetch the YAML/JSON site configuration file(s) and return a parsed, merged object.\n * @returns {Promise<object>} Configuration.\n * @throws {Error} When fetching or parsing has failed.\n */\nexport const fetchSiteConfig = async () => {\n  const links = /** @type {HTMLLinkElement[]} */ ([\n    ...document.querySelectorAll('link[rel=\"cms-config-url\"]'),\n  ]).map(({ href, type }) => /** @type {{ href: string, type?: string }} */ ({ href, type }));\n\n  if (!links.length) {\n    links.push({ href: getConfigPath(window.location.pathname) });\n  }\n\n  const objects = await Promise.all(links.map((link) => fetchFile(link)));\n\n  if (objects.length === 1) {\n    return objects[0];\n  }\n\n  return merge.all(objects);\n};\n","import { getHash } from '@sveltia/utils/crypto';\nimport { isObject } from '@sveltia/utils/object';\nimport { isURL } from '@sveltia/utils/string';\nimport merge from 'deepmerge';\nimport { get, writable } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\nimport YAML from 'yaml';\n\nimport { allAssetFolders } from '$lib/services/assets/folders';\nimport { gitBackendServices, validBackendNames } from '$lib/services/backends';\nimport { getAllAssetFolders } from '$lib/services/config/folders/assets';\nimport { getAllEntryFolders } from '$lib/services/config/folders/entries';\nimport { fetchSiteConfig } from '$lib/services/config/loader';\nimport { allEntryFolders } from '$lib/services/contents';\nimport { prefs } from '$lib/services/user/prefs';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import { SiteConfig } from '$lib/types/public'\n * @import { InternalSiteConfig } from '$lib/types/private';\n */\n\nconst { DEV, VITE_SITE_URL } = import.meta.env;\n\n/**\n * The local live site URL. Local development can be done by loading a CMS config file from a\n * separate dev server. By default, this assumes a local SvelteKit site is running on port 5174\n * along with Sveltia CMS on port 5173. The site URL can be specified with the `VITE_SITE_URL`\n * environment variable. For example, run `VITE_SITE_URL=http://localhost:3000 pnpm dev` for\n * Next.js. You probably need to define the `Access-Control-Allow-Origin: *` HTTP response header\n * with the dev server’s middleware, or loading the CMS config file may fail due to a CORS error.\n */\nexport const DEV_SITE_URL = DEV ? VITE_SITE_URL || 'http://localhost:5174' : undefined;\n/**\n * @type {Partial<SiteConfig>}\n */\nexport const rawSiteConfig = {};\n/**\n * @type {Writable<InternalSiteConfig | undefined>}\n */\nexport const siteConfig = writable();\n/**\n * @type {Writable<string | undefined>}\n */\nexport const siteConfigVersion = writable();\n/**\n * @type {Writable<{ message: string } | undefined>}\n */\nexport const siteConfigError = writable();\n\n/**\n * Validate the site configuration file.\n * @param {SiteConfig} config Raw config object.\n * @throws {Error} If there is an error in the config.\n * @see https://decapcms.org/docs/configuration-options/\n * @todo Add more validations.\n */\nexport const validate = (config) => {\n  if (!Array.isArray(config.collections) && !Array.isArray(config.singletons)) {\n    throw new Error(get(_)('config.error.no_collection'));\n  }\n\n  if (!config.backend) {\n    throw new Error(get(_)('config.error.missing_backend'));\n  }\n\n  if (!config.backend.name) {\n    throw new Error(get(_)('config.error.missing_backend_name'));\n  }\n\n  if (!validBackendNames.includes(config.backend.name)) {\n    throw new Error(\n      get(_)('config.error.unsupported_backend', { values: { name: config.backend.name } }),\n    );\n  }\n\n  if (Object.keys(gitBackendServices).includes(config.backend.name)) {\n    if (config.backend.repo === undefined) {\n      throw new Error(get(_)('config.error.missing_repository'));\n    }\n\n    if (typeof config.backend.repo !== 'string' || !/(.+)\\/([^/]+)$/.test(config.backend.repo)) {\n      throw new Error(get(_)('config.error.invalid_repository'));\n    }\n  }\n\n  if (config.backend.auth_type === 'implicit') {\n    throw new Error(get(_)('config.error.oauth_implicit_flow'));\n  }\n\n  if (config.backend.auth_type === 'pkce' && !config.backend.app_id) {\n    throw new Error(get(_)('config.error.oauth_no_app_id'));\n  }\n\n  if (config.media_folder === undefined) {\n    throw new Error(get(_)('config.error.missing_media_folder'));\n  }\n\n  if (typeof config.media_folder !== 'string') {\n    throw new Error(get(_)('config.error.invalid_media_folder'));\n  }\n\n  if (config.public_folder !== undefined) {\n    if (typeof config.public_folder !== 'string') {\n      throw new Error(get(_)('config.error.invalid_public_folder'));\n    }\n\n    if (/^\\.{1,2}\\//.test(config.public_folder)) {\n      throw new Error(get(_)('config.error.public_folder_relative_path'));\n    }\n\n    if (/^https?:/.test(config.public_folder)) {\n      throw new Error(get(_)('config.error.public_folder_absolute_url'));\n    }\n  }\n};\n\n/**\n * Initialize the site configuration state by loading the YAML file and optionally merge the object\n * with one specified with `CMS.init()`.\n * @param {SiteConfig} [manualConfig] Raw configuration specified with manual initialization.\n * @todo Normalize configuration object.\n */\nexport const initSiteConfig = async (manualConfig) => {\n  siteConfig.set(undefined);\n  siteConfigError.set(undefined);\n\n  try {\n    // Not a config error but `getHash` below and some other features require a secure context\n    if (!window.isSecureContext) {\n      throw new Error(get(_)('config.error.no_secure_context'));\n    }\n\n    /** @type {any} */\n    let rawConfig;\n\n    if (manualConfig) {\n      if (!isObject(manualConfig)) {\n        throw new Error(get(_)('config.error.parse_failed'));\n      }\n\n      rawConfig = manualConfig;\n\n      if (rawConfig.load_config_file !== false) {\n        rawConfig = merge(await fetchSiteConfig(), rawConfig);\n      }\n    } else {\n      rawConfig = await fetchSiteConfig();\n    }\n\n    // Store the raw config so it can be used in the parser and config viewer\n    Object.assign(rawSiteConfig, rawConfig);\n\n    validate(rawConfig);\n\n    /** @type {InternalSiteConfig} */\n    const config = structuredClone(rawConfig);\n\n    // Set the site URL for development or production. See also `/src/lib/components/app.svelte`\n    config._siteURL = config.site_url?.trim() || (DEV ? DEV_SITE_URL : window.location.origin);\n    config._baseURL = isURL(config._siteURL) ? new URL(config._siteURL).origin : '';\n\n    // Handle root collection folder variants, particularly for VitePress\n    config.collections?.forEach((collection) => {\n      if ('folder' in collection && (collection.folder === '.' || collection.folder === '/')) {\n        collection.folder = '';\n      }\n    });\n\n    siteConfig.set(config);\n    siteConfigVersion.set(await getHash(YAML.stringify(config)));\n  } catch (/** @type {any} */ ex) {\n    siteConfigError.set({\n      message: ex.name === 'Error' ? ex.message : get(_)('config.error.unexpected'),\n    });\n\n    // eslint-disable-next-line no-console\n    console.error(ex, ex.cause);\n  }\n};\n\nsiteConfig.subscribe((config) => {\n  if (get(prefs).devModeEnabled) {\n    // eslint-disable-next-line no-console\n    console.info('siteConfig', config);\n  }\n\n  if (!config) {\n    return;\n  }\n\n  const _allEntryFolders = getAllEntryFolders(config);\n  const _allAssetFolders = getAllAssetFolders(config);\n\n  // `getCollection` depends on `allAssetFolders`\n  allEntryFolders.set(_allEntryFolders);\n  allAssetFolders.set(_allAssetFolders);\n\n  if (get(prefs).devModeEnabled) {\n    // eslint-disable-next-line no-console\n    console.info('allEntryFolders', _allEntryFolders);\n    // eslint-disable-next-line no-console\n    console.info('allAssetFolders', _allAssetFolders);\n  }\n});\n","import { stripSlashes } from '@sveltia/utils/string';\nimport { get, writable } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { siteConfig } from '$lib/services/config';\nimport {\n  getValidCollectionFiles,\n  isValidCollectionFile,\n} from '$lib/services/contents/collection/files';\nimport { getFileConfig } from '$lib/services/contents/file/config';\nimport { normalizeI18nConfig } from '$lib/services/contents/i18n/config';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import {\n * CollectionType,\n * EntryCollection,\n * FileCollection,\n * InternalCollection,\n * InternalI18nOptions,\n * } from '$lib/types/private';\n * @import { Collection, CollectionDivider, CollectionFile, FieldKeyPath } from '$lib/types/public';\n */\n\n/**\n * @type {Writable<InternalCollection | undefined>}\n */\nexport const selectedCollection = writable();\n\n/**\n * @type {Map<string, InternalCollection | undefined>}\n */\nexport const collectionCacheMap = new Map();\n\n/**\n * Check if the given collection is an entry collection. An entry collection is defined as one that\n * has the `folder` property that is a string and does not have the `files` property.\n * @param {Collection} collection Collection definition.\n * @returns {boolean} Whether the collection is an entry collection.\n */\nexport const isEntryCollection = (collection) =>\n  typeof collection.folder === 'string' && !Array.isArray(collection.files);\n\n/**\n * Check if the given collection is a file collection. A file collection is defined as one that has\n * the `files` property that is an array and does not have the `folder` property.\n * @param {Collection} collection Collection definition.\n * @returns {boolean} Whether the collection is a file collection.\n */\nexport const isFileCollection = (collection) =>\n  collection.folder === undefined && Array.isArray(collection.files);\n\n/**\n * Check if the given collection is a singleton collection. A singleton collection is a special type\n * of file collection that has the name `_singletons`.\n * @param {Collection} collection Collection definition.\n * @returns {boolean} Whether the collection is a singleton collection.\n */\nexport const isSingletonCollection = (collection) =>\n  isFileCollection(collection) && collection.name === '_singletons';\n\n/**\n * Check if the given collection is a valid entry or file collection. A valid collection must have a\n * `folder` property for entry collections or a `files` property for file collections. It must not\n * be a divider.\n * @param {Collection | CollectionDivider} collection Collection definition or divider.\n * @param {object} [options] Filter options.\n * @param {boolean} [options.visible] Whether to filter out hidden collections. Defaults to `false`.\n * @param {CollectionType} [options.type] Type of collections to filter by. If provided, only\n * collections of this type will be returned.\n * @returns {boolean} Whether the collection is valid.\n */\nexport const isValidCollection = (collection, { visible = undefined, type = undefined } = {}) => {\n  if ('divider' in collection) {\n    return false;\n  }\n\n  if (visible && collection.hide) {\n    return false;\n  }\n\n  if (type === 'entry') {\n    return isEntryCollection(collection);\n  }\n\n  if (type === 'file') {\n    return isFileCollection(collection);\n  }\n\n  if (type === 'singleton') {\n    return isSingletonCollection(collection);\n  }\n\n  return isEntryCollection(collection) || isFileCollection(collection);\n};\n\n/**\n * Get a list of valid collections from the given collection definitions. This filters out dividers\n * and invalid collections that do not have a `folder` property for entry collections or a `files`\n * property for file collections.\n * @param {object} [options] Options.\n * @param {(Collection | CollectionDivider)[]} [options.collections] Collection definitions. May\n * include dividers. Defaults to the collections defined in the site configuration.\n * @param {boolean} [options.visible] Whether to filter out hidden collections. Defaults to `false`.\n * @param {CollectionType} [options.type] Type of collections to filter by. If provided, only\n * collections of this type will be returned.\n * @returns {Collection[]} List of valid collections.\n */\nexport const getValidCollections = ({\n  collections = get(siteConfig)?.collections ?? [],\n  visible,\n  type,\n} = {}) =>\n  /** @type {Collection[]} */ (\n    collections.filter((collection) => isValidCollection(collection, { visible, type }))\n  );\n\n/**\n * Get the first visible entry collection or file collection in the collection list.\n * @returns {Collection | undefined} Found collection.\n */\nexport const getFirstCollection = () => getValidCollections({ visible: true })[0];\n\n/**\n * Get a list of field key paths to be used to find an entry thumbnail.\n * @param {Collection} rawCollection Raw collection definition.\n * @returns {FieldKeyPath[]} Key path list.\n */\nexport const getThumbnailFieldNames = (rawCollection) => {\n  const { folder, fields, thumbnail } = rawCollection;\n\n  if (!folder) {\n    return [];\n  }\n\n  if (typeof thumbnail === 'string') {\n    return [thumbnail];\n  }\n\n  // Support multiple field names\n  if (Array.isArray(thumbnail)) {\n    return thumbnail;\n  }\n\n  // Collect the names of all non-nested Image/File fields for inference\n  if (fields?.length) {\n    return fields\n      .filter(({ widget = 'string' }) => ['image', 'file'].includes(widget))\n      .map(({ name }) => name);\n  }\n\n  return [];\n};\n\n/**\n * Parse an entry collection and add additional properties.\n * @param {Collection} rawCollection Raw collection definition.\n * @param {InternalI18nOptions} _i18n I18n options of the collection.\n * @returns {EntryCollection} Parsed entry collection with additional properties.\n */\nexport const parseEntryCollection = (rawCollection, _i18n) => ({\n  ...rawCollection,\n  _i18n,\n  _type: 'entry',\n  _file: getFileConfig({ rawCollection, _i18n }),\n  _thumbnailFieldNames: getThumbnailFieldNames(rawCollection),\n});\n\n/**\n * Parse a file/singleton collection and add additional properties.\n * @param {Collection} rawCollection Raw collection definition.\n * @param {InternalI18nOptions} _i18n I18n options of the collection.\n * @param {CollectionFile[]} files List of files in the collection.\n * @returns {FileCollection} Parsed file/singleton collection with additional properties.\n */\nexport const parseFileCollection = (rawCollection, _i18n, files) => ({\n  ...rawCollection,\n  _i18n,\n  _type: isSingletonCollection(rawCollection) ? 'singleton' : 'file',\n  _fileMap: Object.fromEntries(\n    files.filter(isValidCollectionFile).map((file) => {\n      const __i18n = normalizeI18nConfig(rawCollection, file);\n      const __file = getFileConfig({ rawCollection, file, _i18n: __i18n });\n\n      return [file.name, { ...file, _file: __file, _i18n: __i18n }];\n    }),\n  ),\n});\n\n/**\n * Get the pseudo singleton file collection. This is a collection that contains all singleton files\n * defined in the site configuration. It is used to handle singletons as a collection, allowing for\n * easier access and management.\n * @returns {InternalCollection | undefined} Singleton collection, or `undefined` if no singletons\n * are defined.\n */\nexport const getSingletonCollection = () => {\n  const singletons = get(siteConfig)?.singletons;\n\n  if (!Array.isArray(singletons)) {\n    return undefined;\n  }\n\n  const files = getValidCollectionFiles(singletons) //\n    .map((file) => ({ ...file, file: stripSlashes(file.file) }));\n\n  if (!files.length) {\n    return undefined;\n  }\n\n  /** @type {Collection} */\n  const rawCollection = { name: '_singletons', files };\n  const _i18n = normalizeI18nConfig(rawCollection);\n\n  return parseFileCollection(rawCollection, _i18n, files);\n};\n\n/**\n * Get a collection by name.\n * @param {string} name Collection name.\n * @returns {InternalCollection | undefined} Collection, including some extra, normalized\n * properties.\n */\nexport const getCollection = (name) => {\n  const cache = collectionCacheMap.get(name);\n\n  if (cache) {\n    return cache;\n  }\n\n  if (name === '_singletons') {\n    const collection = getSingletonCollection();\n\n    collectionCacheMap.set(name, collection);\n\n    return collection;\n  }\n\n  const rawCollection = getValidCollections().find((c) => c.name === name);\n  const _isEntryCollection = rawCollection ? isEntryCollection(rawCollection) : false;\n  const _isFileCollection = rawCollection ? isFileCollection(rawCollection) : false;\n\n  // Ignore invalid collection\n  if (!rawCollection || (!_isEntryCollection && !_isFileCollection)) {\n    collectionCacheMap.set(name, undefined);\n\n    return undefined;\n  }\n\n  const { folder, files = [] } = rawCollection;\n\n  // Normalize folder/file paths by removing leading/trailing slashes\n  if (_isEntryCollection) {\n    rawCollection.folder = stripSlashes(/** @type {string} */ (folder));\n  } else {\n    files.forEach((f) => {\n      if (f.file) {\n        f.file = stripSlashes(f.file);\n      }\n    });\n  }\n\n  const _i18n = normalizeI18nConfig(rawCollection);\n\n  const collection = _isEntryCollection\n    ? parseEntryCollection(rawCollection, _i18n)\n    : parseFileCollection(rawCollection, _i18n, files);\n\n  collectionCacheMap.set(name, collection);\n\n  return collection;\n};\n\n/**\n * Get the label for a collection. If the collection is a singleton, it returns a localized label\n * for files. Otherwise, it returns the collection’s label or name.\n * @param {InternalCollection} collection Collection object.\n * @param {object} [options] Options for label formatting.\n * @param {boolean} [options.useSingular] Whether to use a singular form of the label.\n * @returns {string} Human-readable label for the collection.\n */\nexport const getCollectionLabel = (collection, { useSingular = false } = {}) => {\n  const { _type, name, label, label_singular: singularLabel } = collection;\n\n  if (_type === 'singleton') {\n    return get(_)('files');\n  }\n\n  if (useSingular && singularLabel) {\n    return singularLabel;\n  }\n\n  return label || name;\n};\n\n/**\n * Get the index of a collection with the given name.\n * @param {string | undefined} collectionName Collection name.\n * @returns {number} Index.\n */\nexport const getCollectionIndex = (collectionName) => {\n  if (!collectionName) {\n    return -1;\n  }\n\n  // Singleton collection is always at the end\n  if (collectionName === '_singletons') {\n    return 9999999;\n  }\n\n  return get(siteConfig)?.collections?.findIndex(({ name }) => name === collectionName) ?? -1;\n};\n","import { getPathInfo } from '@sveltia/utils/file';\nimport { escapeRegExp, stripSlashes } from '@sveltia/utils/string';\n\nimport { isEntryCollection } from '$lib/services/contents/collection';\nimport { getIndexFile } from '$lib/services/contents/collection/index-file';\nimport { getLocalePath } from '$lib/services/contents/i18n';\n\n/**\n * @import { CustomFileFormat, FileConfig, InternalI18nOptions } from '$lib/types/private';\n * @import { Collection, CollectionFile, FileExtension, FileFormat } from '$lib/types/public';\n */\n\n/**\n * @type {Record<string, CustomFileFormat>}\n */\nexport const customFileFormats = {};\n\n/**\n * Detect a file extension from the given entry file configuration.\n * @param {object} args Arguments.\n * @param {FileExtension} [args.extension] Developer-defined file extension.\n * @param {FileFormat} [args.format] Developer-defined file format.\n * @returns {FileExtension} Determined extension.\n * @see https://decapcms.org/docs/configuration-options/#extension-and-format\n */\nexport const detectFileExtension = ({ extension, format }) => {\n  const customExtension = format ? customFileFormats[format]?.extension : undefined;\n\n  if (customExtension) {\n    return customExtension;\n  }\n\n  if (extension) {\n    return extension;\n  }\n\n  if (format === 'yaml' || format === 'yml') {\n    return 'yml';\n  }\n\n  if (format === 'toml') {\n    return 'toml';\n  }\n\n  if (format === 'json') {\n    return 'json';\n  }\n\n  return 'md';\n};\n\n/**\n * Detect a file format from the given entry file configuration.\n * @param {object} args Arguments.\n * @param {FileExtension} args.extension File extension.\n * @param {FileFormat} [args.format] Developer-defined file format.\n * @returns {FileFormat} Determined format.\n * @see https://decapcms.org/docs/configuration-options/#extension-and-format\n */\nexport const detectFileFormat = ({ extension, format }) => {\n  if (format) {\n    return format; // supported or custom format\n  }\n\n  if (extension === 'yaml' || extension === 'yml') {\n    return 'yaml';\n  }\n\n  if (extension === 'toml') {\n    return 'toml';\n  }\n\n  if (extension === 'json') {\n    return 'json';\n  }\n\n  if (['md', 'mkd', 'mkdn', 'mdwn', 'mdown', 'markdown'].includes(extension)) {\n    return 'frontmatter'; // auto detect\n  }\n\n  return 'yaml-frontmatter';\n};\n\n/**\n * Get a regular expression that matches the entry paths of the given entry collection, taking the\n * i18n structure into account.\n * @param {object} args Arguments.\n * @param {FileExtension} args.extension File extension.\n * @param {FileFormat} args.format File format.\n * @param {string} args.basePath Normalized `folder` collection option.\n * @param {string} [args.subPath] Normalized `path` collection option.\n * @param {string} [args.indexFileName] File name for index file inclusion. Typically `_index`.\n * @param {InternalI18nOptions} args._i18n I18n configuration.\n * @returns {RegExp} Regular expression.\n */\nexport const getEntryPathRegEx = ({\n  extension,\n  format,\n  basePath,\n  subPath,\n  indexFileName,\n  _i18n,\n}) => {\n  const {\n    allLocales,\n    defaultLocale,\n    omitDefaultLocaleFromFileName,\n    structureMap: { i18nMultiFile, i18nMultiFolder, i18nRootMultiFolder },\n  } = _i18n;\n\n  /**\n   * The path pattern in the middle, which should match the filename (without extension),\n   * possibly with the parent directory. If the collection’s `path` is configured, use it to\n   * generate a pattern, so that unrelated files are excluded.\n   * @see https://decapcms.org/docs/collection-folder/#folder-collections-path\n   */\n  const filePathMatcher = subPath\n    ? `(?<subPath>${subPath\n        .replace(/\\//g, '\\\\/')\n        .replace(/{{.+?}}/g, '[^/]+?')}${indexFileName ? `|${indexFileName}` : ''})`\n    : '(?<subPath>[^/]+?)';\n\n  const localeMatcher = `(?<locale>${allLocales.join('|')})`;\n\n  const pattern = [\n    '^',\n    i18nRootMultiFolder ? `${localeMatcher}\\\\/` : '',\n    basePath ? `${escapeRegExp(basePath)}\\\\/` : '',\n    i18nMultiFolder ? `${localeMatcher}\\\\/` : '',\n    filePathMatcher,\n    i18nMultiFile\n      ? omitDefaultLocaleFromFileName\n        ? `(?:\\\\.(?<locale>${allLocales.filter((locale) => locale !== defaultLocale).join('|')}))?`\n        : `\\\\.${localeMatcher}`\n      : '',\n    '\\\\.',\n    detectFileExtension({ format, extension }),\n    '$',\n  ].join('');\n\n  return new RegExp(pattern);\n};\n\n/**\n * Detect the front matter format’s delimiters from the given entry file configuration.\n * @param {object} args Arguments.\n * @param {FileFormat} args.format File format.\n * @param {string | string[]} [args.delimiter] Configured delimiter.\n * @returns {[string, string] | undefined} Start and end delimiters. If `undefined`, the parser\n * automatically detects the delimiters, while the formatter uses the YAML delimiters.\n * @see https://decapcms.org/docs/configuration-options/#frontmatter_delimiter\n */\nexport const getFrontMatterDelimiters = ({ format, delimiter }) => {\n  if (typeof delimiter === 'string' && delimiter.trim()) {\n    return [delimiter, delimiter];\n  }\n\n  if (Array.isArray(delimiter) && delimiter.length === 2) {\n    return /** @type {[string, string]} */ (delimiter);\n  }\n\n  if (format === 'json-frontmatter') {\n    return ['{', '}'];\n  }\n\n  if (format === 'toml-frontmatter') {\n    return ['+++', '+++'];\n  }\n\n  if (format === 'yaml-frontmatter') {\n    return ['---', '---'];\n  }\n\n  return undefined;\n};\n\n/**\n * Whether the deprecated `yaml_quote` collection option is warned.\n * @todo Remove the option prior to the 1.0 release.\n */\nlet yamlQuoteWarnedOnce = false;\n\n/**\n * Get the normalized entry file configuration for the given collection or collection file.\n * @param {object} args Arguments.\n * @param {Collection} args.rawCollection Developer-defined collection.\n * @param {CollectionFile} [args.file] Developer-defined collection file.\n * @param {InternalI18nOptions} args._i18n I18n configuration.\n * @returns {FileConfig} Entry file configuration.\n */\nexport const getFileConfig = ({ rawCollection, file, _i18n }) => {\n  const {\n    folder,\n    path: subPath,\n    extension: _extension,\n    format: _format,\n    frontmatter_delimiter: _delimiter,\n    yaml_quote: yamlQuote,\n  } = rawCollection;\n\n  const _isEntryCollection = isEntryCollection(rawCollection);\n  const filePath = file?.file ? stripSlashes(file.file) : undefined;\n  const __extension = filePath ? getPathInfo(filePath).extension : _extension;\n  const __format = file?.format ?? _format;\n  const extension = detectFileExtension({ format: __format, extension: __extension });\n  const format = detectFileFormat({ format: __format, extension });\n  const delimiter = file?.frontmatter_delimiter ?? _delimiter;\n  const basePath = _isEntryCollection ? stripSlashes(/** @type {string} */ (folder)) : undefined;\n  const indexFileName = _isEntryCollection ? getIndexFile(rawCollection)?.name : undefined;\n\n  if (yamlQuote !== undefined && !yamlQuoteWarnedOnce && !import.meta.env.VITEST) {\n    yamlQuoteWarnedOnce = true;\n    // eslint-disable-next-line no-console\n    console.warn(\n      'The yaml_quote collection option is deprecated and will be removed in Sveltia CMS 1.0. ' +\n        'Use the global output.yaml.quote option instead. ' +\n        'https://github.com/sveltia/sveltia-cms#controlling-data-output',\n    );\n  }\n\n  return {\n    extension,\n    format,\n    basePath,\n    subPath: _isEntryCollection ? subPath : undefined,\n    fullPathRegEx:\n      basePath !== undefined\n        ? getEntryPathRegEx({ extension, format, basePath, subPath, indexFileName, _i18n })\n        : undefined,\n    fullPath: filePath\n      ? getLocalePath({ _i18n, locale: _i18n.defaultLocale, path: filePath })\n      : undefined,\n    fmDelimiters: getFrontMatterDelimiters({ format, delimiter }),\n    yamlQuote: !!yamlQuote,\n  };\n};\n","export default \"<svg viewBox=\\\"0 0 800 800\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"><linearGradient id=\\\"a\\\" gradientUnits=\\\"userSpaceOnUse\\\" x1=\\\"400\\\" x2=\\\"400\\\" y1=\\\"0\\\" y2=\\\"800\\\"><stop offset=\\\"0\\\" stop-color=\\\"#f0980b\\\"/><stop offset=\\\"1\\\" stop-color=\\\"#ff1d00\\\"/></linearGradient><clipPath id=\\\"b\\\"><rect height=\\\"800\\\" rx=\\\"80\\\" width=\\\"800\\\"/></clipPath><rect fill=\\\"url(#a)\\\" height=\\\"800\\\" rx=\\\"80\\\" width=\\\"800\\\"/><g style=\\\"clip-path:url(#b);fill:none;stroke:#fff;stroke-linecap:round;stroke-linejoin:round;stroke-width:180\\\"><path d=\\\"m320-80-200 320 200 320-200 320\\\"/><path d=\\\"m400 240 200 320 200-320\\\"/></g></svg>\"","import { getAssetKind } from '$lib/services/assets/kinds';\nimport { getRegex } from '$lib/services/utils/misc';\n\n/**\n * @import { Asset, FilteringConditions } from '$lib/types/private';\n */\n\n/**\n * Filter the given assets.\n * @param {Asset[]} assets Asset list.\n * @param {FilteringConditions} [conditions] Filtering conditions.\n * @returns {Asset[]} Filtered asset list.\n */\nexport const filterAssets = (assets, { field, pattern } = { field: '', pattern: '' }) => {\n  if (!field) {\n    return assets;\n  }\n\n  if (field === 'fileType') {\n    return assets.filter(({ path }) => getAssetKind(path) === pattern);\n  }\n\n  const regex = getRegex(pattern);\n\n  return assets.filter((asset) => {\n    const value = /** @type {Record<string, any>} */ (asset)[field];\n\n    if (regex) {\n      return regex.test(String(value ?? ''));\n    }\n\n    return value === pattern;\n  });\n};\n","import { compare } from '@sveltia/utils/string';\nimport { get } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { getRegex } from '$lib/services/utils/misc';\n\n/**\n * @import { Asset, GroupingConditions } from '$lib/types/private';\n */\n\n/**\n * Group the given assets.\n * @param {Asset[]} assets Asset list.\n * @param {GroupingConditions} [conditions] Grouping conditions.\n * @returns {Record<string, Asset[]>} Grouped assets, where key is a group label and value is an\n * asset list.\n */\nexport const groupAssets = (assets, { field, pattern } = { field: '', pattern: undefined }) => {\n  if (!field) {\n    return assets.length ? { '*': assets } : {};\n  }\n\n  const regex = getRegex(pattern);\n  /** @type {Record<string, Asset[]>} */\n  const groups = {};\n  const otherKey = get(_)('other');\n\n  assets.forEach((asset) => {\n    const value = /** @type {Record<string, any>} */ (asset)[field];\n    /** @type {string} */\n    let key;\n\n    if (regex) {\n      [key = otherKey] = String(value ?? '').match(regex) ?? [];\n    } else {\n      key = value;\n    }\n\n    if (!(key in groups)) {\n      groups[key] = [];\n    }\n\n    groups[key].push(asset);\n  });\n\n  // Sort groups by key\n  return Object.fromEntries(Object.entries(groups).sort(([aKey], [bKey]) => compare(aKey, bKey)));\n};\n","import { compare } from '@sveltia/utils/string';\n\n/**\n * @import { Asset, SortingConditions } from '$lib/types/private';\n */\n\n/**\n * Get an asset’s property value.\n * @param {Asset} asset Asset.\n * @param {string} key Sorting key. A field name of the asset or a special key like `commit_author`,\n * `commit_date`, or `name`.\n * @returns {any} Value.\n */\nexport const getValue = (asset, key) => {\n  const { commitAuthor: { name, login, email } = {}, commitDate } = asset;\n\n  if (key === 'commit_author') {\n    return name || login || email;\n  }\n\n  if (key === 'commit_date') {\n    return commitDate;\n  }\n\n  // Exclude the file extension when sorting by name to sort numbered files properly, e.g.\n  // `hero.png`, `hero-1.png`, `hero-2.png` instead of `hero-1.png`, `hero-2.png`, `hero.png`\n  if (key === 'name') {\n    return asset.name.split('.')[0];\n  }\n\n  return /** @type {Record<string, any>} */ (asset)[key] ?? '';\n};\n\n/**\n * Sort the given assets.\n * @param {Asset[]} assets Asset list.\n * @param {SortingConditions} [conditions] Sorting conditions.\n * @returns {Asset[]} Sorted asset list.\n */\nexport const sortAssets = (assets, { key, order } = {}) => {\n  if (!key || !order) {\n    return assets;\n  }\n\n  const _assets = [...assets];\n\n  const type =\n    { commit_author: String, commit_date: Date }[key] ||\n    /** @type {Record<string, any>} */ (_assets[0])?.[key]?.constructor ||\n    String;\n\n  _assets.sort((a, b) => {\n    const aValue = getValue(a, key);\n    const bValue = getValue(b, key);\n\n    if (type === String) {\n      return compare(aValue, bValue);\n    }\n\n    if (type === Date) {\n      return Number(aValue) - Number(bValue);\n    }\n\n    return aValue - bValue;\n  });\n\n  if (order === 'descending') {\n    _assets.reverse();\n  }\n\n  return _assets;\n};\n","import equal from 'fast-deep-equal';\nimport { derived, get, writable } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { allAssets, selectedAssets, uploadingAssets } from '$lib/services/assets';\nimport { selectedAssetFolder } from '$lib/services/assets/folders';\nimport { filterAssets } from '$lib/services/assets/view/filter';\nimport { groupAssets } from '$lib/services/assets/view/group';\nimport { sortAssets } from '$lib/services/assets/view/sort';\nimport { getCollection, getCollectionLabel } from '$lib/services/contents/collection';\nimport { getCollectionFile, getCollectionFileLabel } from '$lib/services/contents/collection/files';\nimport { prefs } from '$lib/services/user/prefs';\n\n/**\n * @import { Readable, Writable } from 'svelte/store';\n * @import { Asset, AssetFolderInfo, AssetListView } from '$lib/types/private';\n */\n\n/**\n * Whether the asset details overlay is shown.\n * @type {Writable<boolean>}\n */\nexport const showAssetOverlay = writable(false);\n\n/**\n * Whether to show the Upload Assets dialog.\n */\nexport const showUploadAssetsDialog = writable(false);\n\n/**\n * @type {Readable<boolean>}\n */\nexport const showUploadAssetsConfirmDialog = derived(\n  [uploadingAssets],\n  ([_uploadingAssets], set) => {\n    set(!!_uploadingAssets.files.length);\n  },\n);\n\n/**\n * Get the label for the given collection. It can be a category name if the folder is a\n * collection-specific asset folder.\n * @param {AssetFolderInfo} folder Folder info.\n * @returns {string} Human-readable label.\n * @see https://decapcms.org/docs/collection-folder/#media-and-public-folder\n */\nexport const getFolderLabelByCollection = ({ collectionName, fileName, internalPath }) => {\n  if (collectionName === undefined) {\n    return get(_)(internalPath === undefined ? 'all_assets' : 'global_assets');\n  }\n\n  const collection = getCollection(collectionName);\n  const collectionLabel = collection ? getCollectionLabel(collection) : collectionName;\n\n  if (!fileName) {\n    return collectionLabel;\n  }\n\n  const file = collection ? getCollectionFile(collection, fileName) : undefined;\n  const fileLabel = file ? getCollectionFileLabel(file) : fileName;\n\n  return `${collectionLabel} › ${fileLabel}`;\n};\n\n/**\n * Default view settings for the selected asset collection.\n * @type {AssetListView}\n */\nexport const defaultView = {\n  type: 'grid',\n  showInfo: true,\n  sort: {\n    key: 'name',\n    order: 'ascending',\n  },\n};\n\n/**\n * View settings for the selected asset collection.\n * @type {Writable<AssetListView>}\n */\nexport const currentView = writable({ type: 'grid', showInfo: true });\n/**\n * List of all the assets for the selected asset collection.\n * @type {Readable<Asset[]>}\n */\nexport const listedAssets = derived(\n  [allAssets, selectedAssetFolder],\n  ([_allAssets, _selectedAssetFolder], set) => {\n    if (_allAssets && _selectedAssetFolder && _selectedAssetFolder.internalPath !== undefined) {\n      set(_allAssets.filter(({ folder }) => equal(folder, _selectedAssetFolder)));\n    } else {\n      set(_allAssets ? [..._allAssets] : []);\n    }\n  },\n);\n/**\n * Sorted, filtered and grouped assets for the selected asset collection.\n * @type {Readable<Record<string, Asset[]>>}\n */\nexport const assetGroups = derived(\n  [listedAssets, currentView],\n  ([_listedAssets, _currentView], set) => {\n    /** @type {Asset[]} */\n    let assets = [..._listedAssets];\n\n    assets = sortAssets(assets, _currentView.sort);\n    assets = filterAssets(assets, _currentView.filter);\n\n    const groups = groupAssets(assets, _currentView.group);\n\n    if (!equal(get(assetGroups), groups)) {\n      set(groups);\n    }\n  },\n);\n\nlistedAssets.subscribe((assets) => {\n  selectedAssets.set([]);\n\n  if (get(prefs).devModeEnabled) {\n    // eslint-disable-next-line no-console\n    console.info('listedAssets', assets);\n  }\n});\n","import { sleep } from '@sveltia/utils/misc';\nimport { flushSync } from 'svelte';\nimport { derived, get, writable } from 'svelte/store';\n\nimport { showAssetOverlay } from '$lib/services/assets/view';\nimport { siteConfig } from '$lib/services/config';\nimport { showContentOverlay } from '$lib/services/contents/editor';\nimport { isSmallScreen } from '$lib/services/user/env';\n\n/**\n * @import { Readable, Writable } from 'svelte/store';\n * @import { InternalSiteConfig } from '$lib/types/private';\n */\n\n/**\n * @typedef {'forwards' | 'backwards' | 'unknown'} ViewTransitionType\n */\n\n/**\n * @typedef {object} GoToMethodOptions\n * @property {object} [state] History state to be included.\n * @property {boolean} [replaceState] Whether to replace the history state.\n * @property {boolean} [notifyChange] Whether to dispatch a `hashchange` event.\n * @property {ViewTransitionType} [transitionType] View transition type.\n */\n\n/**\n * Whether the app has an overlay. Some elements have to be `inert` while an overlay is displayed.\n * We cannot use the `<Modal>` component for these overlays because it will make everything inert,\n * including the toast notifications and announced page title.\n * @type {Readable<boolean>}\n */\nexport const hasOverlay = derived(\n  [showContentOverlay, showAssetOverlay],\n  ([_showContentOverlay, _showAssetOverlay]) => _showContentOverlay || _showAssetOverlay,\n);\n/**\n * @type {Writable<string>}\n */\nexport const selectedPageName = writable('');\n/**\n * Page status to be announced by screen readers.\n * @type {Writable<string>}\n */\nexport const announcedPageStatus = writable('');\n\n/**\n * Parse the URL and return the decoded result.\n * @param {string} [href] URL. Omit this to use the current URL.\n * @returns {{ path: string, params: Record<string, string> }} Path and search params.\n */\nexport const parseLocation = (href = window.location.href) => {\n  const { origin, hash } = new URL(href);\n  const { pathname, searchParams } = new URL(`${origin}${hash.substring(1)}`);\n\n  return {\n    path: decodeURIComponent(pathname),\n    params: Object.fromEntries(searchParams),\n  };\n};\n\n/**\n * Start page transition, if possible, after updating the content.\n * @param {ViewTransitionType} transitionType View transition type.\n * @param {() => void} updateContent Function to trigger a content update.\n * @see https://developer.chrome.com/docs/web-platform/view-transitions/same-document\n */\nconst startViewTransition = (transitionType, updateContent) => {\n  if (!get(isSmallScreen) || !document.startViewTransition) {\n    updateContent();\n    return;\n  }\n\n  document.startViewTransition({\n    // @ts-ignore\n    types: [transitionType],\n    // eslint-disable-next-line jsdoc/require-jsdoc\n    update: async () => {\n      updateContent();\n      await sleep(50);\n      await new Promise((resolve) => {\n        flushSync(() => {\n          resolve(undefined);\n        });\n      });\n    },\n  });\n};\n\n/**\n * Update the content when the `hashchange` event is triggered. This function aims to support page\n * transition via the browser’s back/forward navigation.\n * @param {HashChangeEvent} event `hashchange` event.\n * @param {() => void} updateContent Function to trigger a content update.\n * @param {RegExp} routeRegex Regex to match a specific route.\n * @todo Develop a robust way to handle transition using the Navigation API.\n */\nexport const updateContentFromHashChange = (event, updateContent, routeRegex) => {\n  const { isTrusted, oldURL, newURL } = event;\n\n  // If `isTrusted` is `true`, it’s the browser’s back/forward navigation, so we need to start\n  // transitioning. If `false`, the event is trigged by the `goto` method below and transition has\n  // already started; in that case, just finish updating the content.\n  if (!isTrusted) {\n    updateContent();\n    return;\n  }\n\n  const oldPath = parseLocation(oldURL).path;\n  const newPath = parseLocation(newURL).path;\n  // Compare paths to see if it’s a navigation within the same section, e.g. `/collections` to\n  // `/collections/posts`.\n  const inSameSection = routeRegex.test(oldPath) && routeRegex.test(newPath);\n  // Count the number of path segments; navigating from `/collections` to `/collections/posts` and\n  // `/collections/posts` to `/collections/posts/new` is forwards, while `/assets/-/all` to\n  // `/assets` is backwards\n  const oldPathSegmentCount = oldPath.split('/').length;\n  const newPathSegmentCount = newPath.split('/').length;\n\n  const transitionType =\n    inSameSection && oldPathSegmentCount > newPathSegmentCount\n      ? 'backwards'\n      : inSameSection && oldPathSegmentCount < newPathSegmentCount\n        ? 'forwards'\n        : 'unknown';\n\n  startViewTransition(transitionType, () => updateContent());\n};\n\n/**\n * Navigate to a different URL or replace the current URL. This is similar to SvelteKit’s `goto`\n * method but assumes hash-based SPA routing.\n * @param {string} path URL path. It will appear in th URL hash but omit the leading `#` sign here.\n * @param {GoToMethodOptions} [options] Options.\n */\nexport const goto = async (\n  path,\n  { state = {}, replaceState = false, notifyChange = true, transitionType = 'unknown' } = {},\n) => {\n  const { origin, pathname, hash } = window.location;\n  const oldURL = `${origin}${pathname}${hash}`;\n  const newURL = `${origin}${pathname}#${path}`;\n  /** @type {[any, string, string]} */\n  const args = [{ ...state, from: oldURL }, '', newURL];\n\n  if (replaceState) {\n    window.history.replaceState(...args);\n  } else {\n    window.history.pushState(...args);\n  }\n\n  if (notifyChange) {\n    startViewTransition(transitionType, () => {\n      window.dispatchEvent(new HashChangeEvent('hashchange', { oldURL, newURL }));\n    });\n  }\n};\n\n/**\n * Go back to the previous page if possible, or navigate to the given fallback URL.\n * @param {string} path Fallback URL path.\n * @param {GoToMethodOptions} [options] Options to be passed to {@link goto}.\n */\nexport const goBack = (path, options = {}) => {\n  const transitionType = 'backwards';\n\n  if (window.history.state?.from) {\n    startViewTransition(transitionType, () => {\n      window.history.back();\n    });\n  } else {\n    goto(path, { ...options, transitionType });\n  }\n};\n\n/**\n * Open the production site in a new browser tab.\n */\nexport const openProductionSite = () => {\n  const { display_url: displayURL, _siteURL: siteURL } = /** @type {InternalSiteConfig} */ (\n    get(siteConfig)\n  );\n\n  window.open(displayURL || siteURL || '/', '_blank');\n};\n","import { isObject } from '@sveltia/utils/object';\nimport { LocalStorage } from '@sveltia/utils/storage';\nimport { get, writable } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { goto, parseLocation } from '$lib/services/app/navigation';\nimport { backend, backendName } from '$lib/services/backends';\nimport { siteConfig } from '$lib/services/config';\nimport { dataLoaded } from '$lib/services/contents';\nimport { user } from '$lib/services/user';\nimport { prefs } from '$lib/services/user/prefs';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import { InternalSiteConfig } from '$lib/types/private';\n */\n\n/**\n * Context of the sign-in error.\n * @typedef {'authentication' | 'dataFetch'} SignInErrorContext\n */\n\n/**\n * Sign-in error store.\n * @type {Writable<{ message: string, context: SignInErrorContext }>}\n */\nexport const signInError = writable({ message: '', context: 'authentication' });\n\n/**\n * @type {Writable<boolean>}\n */\nexport const unauthenticated = writable(true);\n\n/**\n * @type {Writable<boolean>}\n */\nexport const signingIn = writable(false);\n\n/**\n * Reset the sign-in error store.\n */\nexport const resetError = () => {\n  signInError.set({ message: '', context: 'authentication' });\n};\n\n/**\n * Log an authentication error on the UI and in the browser console.\n * @param {Error} ex Exception.\n * @param {SignInErrorContext} [context] Context of the error.\n */\nexport const logError = (ex, context = 'authentication') => {\n  let message =\n    /** @type {{ message: string }} */ (ex.cause)?.message || get(_)('unexpected_error');\n\n  if (ex.name === 'NotFoundError') {\n    message = get(_)('sign_in_error.not_project_root');\n  }\n\n  if (ex.name === 'AbortError') {\n    message = get(_)(\n      get(backendName) === 'local'\n        ? 'sign_in_error.picker_dismissed'\n        : 'sign_in_error.authentication_aborted',\n    );\n  }\n\n  signInError.set({ message, context });\n  // eslint-disable-next-line no-console\n  console.error(ex.name, ex.message, ex.cause);\n};\n\n/**\n * Check if the user info is cached, set the backend, and automatically start loading files if the\n * backend is Git-based and user’s auth token is found.\n */\nexport const signInAutomatically = async () => {\n  resetError();\n\n  // Find cached user info, including a compatible Netlify/Decap CMS user object\n  const userCache =\n    (await LocalStorage.get('sveltia-cms.user')) ||\n    (await LocalStorage.get('decap-cms-user')) ||\n    (await LocalStorage.get('netlify-cms-user'));\n\n  const hasUserCache = isObject(userCache);\n\n  // If the user has been signed out, the user cache is an empty object. In that case, we should not\n  // proceed with the sign-in process even if the Decap CMS or Netlify CMS user cache is found. This\n  // is to prevent the user from being signed in again automatically immediately after signing out.\n  if (hasUserCache && !Object.keys(userCache).length) {\n    return;\n  }\n\n  let _user = hasUserCache && userCache.backendName ? userCache : undefined;\n\n  // Determine the backend name based on the user cache or site config. Use the local backend if the\n  // user cache is found and the backend name is `local`, which is used by Sveltia CMS, or `proxy`,\n  // which is used by Netlify/Decap CMS when running the local proxy server. Otherwise, simply use\n  // the backend name from the site config. This is to ensure that the user is signed in with the\n  // correct backend, especially when the user cache is from a different backend than the current\n  // site config.\n  const _backendName =\n    _user?.backendName === 'local' || _user?.backendName === 'proxy'\n      ? 'local'\n      : /** @type {InternalSiteConfig} */ (get(siteConfig)).backend.name;\n\n  backendName.set(_backendName);\n\n  const _backend = get(backend);\n  const { path } = parseLocation();\n  /** @type {Record<string, any> | undefined} */\n  let copiedPrefs = undefined;\n\n  // Support QR code authentication\n  if (!_user && _backend) {\n    const { encodedData } = path.match(/^\\/signin\\/(?<encodedData>.+)/)?.groups ?? {};\n\n    if (encodedData) {\n      goto('', { replaceState: true }); // Remove token from the URL\n\n      try {\n        const data = JSON.parse(atob(encodedData));\n\n        if (isObject(data) && typeof data.token === 'string') {\n          _user = { token: data.token };\n\n          if (isObject(data.prefs)) {\n            copiedPrefs = data.prefs;\n          }\n        }\n      } catch {\n        //\n      }\n    }\n  }\n\n  if (_user && _backend) {\n    // Temporarily populate the `user` store with the cache, otherwise it’s not updated in\n    // `refreshAccessToken`\n    user.set(_user);\n\n    const { token, refreshToken } = _user;\n\n    signingIn.set(true);\n\n    try {\n      _user = await _backend.signIn({ token, refreshToken, auto: true });\n    } catch {\n      // The local backend may throw if the file handle permission is not given\n      _user = undefined;\n      user.set(undefined);\n    }\n  }\n\n  signingIn.set(false);\n  unauthenticated.set(!_user);\n\n  if (!_user || !_backend) {\n    return;\n  }\n\n  // Use the cached user to start fetching files\n  user.set(_user);\n\n  // Copy user preferences passed with QR code\n  if (copiedPrefs) {\n    prefs.update((currentPrefs) => ({ ...currentPrefs, ...copiedPrefs }));\n  }\n\n  try {\n    await _backend.fetchFiles();\n  } catch (/** @type {any} */ ex) {\n    // The API request may fail if the cached token has been expired or revoked. Then let the user\n    // sign in again. 404 Not Found is also considered an authentication error.\n    // https://docs.github.com/en/rest/overview/troubleshooting-the-rest-api#404-not-found-for-an-existing-resource\n    if ([401, 403, 404].includes(ex.cause?.status)) {\n      unauthenticated.set(true);\n    } else {\n      logError(ex, 'dataFetch');\n    }\n  }\n};\n\n/**\n * Sign in with the given backend.\n * @param {string} _backendName Backend name to be used.\n * @param {string} [token] Personal Access Token (PAT) to be used for authentication.\n */\nexport const signInManually = async (_backendName, token) => {\n  resetError();\n  backendName.set(_backendName);\n\n  const _backend = get(backend);\n\n  if (!_backend) {\n    return;\n  }\n\n  let _user;\n\n  signingIn.set(true);\n\n  try {\n    _user = await _backend.signIn({ token, auto: false });\n  } catch (/** @type {any} */ ex) {\n    signingIn.set(false);\n    unauthenticated.set(true);\n\n    if (!!token && ex.cause?.status === 401) {\n      // If the user is signing in using a personal access token (PAT) and the token is invalid,\n      // display a specific error message.\n      logError(\n        new Error('Invalid token', { cause: { message: get(_)('sign_in_error.invalid_token') } }),\n      );\n    } else {\n      logError(ex);\n    }\n\n    return;\n  }\n\n  signingIn.set(false);\n  unauthenticated.set(!_user);\n\n  if (!_user) {\n    return;\n  }\n\n  user.set(_user);\n\n  try {\n    await _backend.fetchFiles();\n  } catch (/** @type {any} */ ex) {\n    logError(ex, 'dataFetch');\n  }\n};\n\n/**\n * Sign out from the current backend.\n */\nexport const signOut = async () => {\n  await get(backend)?.signOut();\n\n  // Leave an empty user object in the local storage to prevent the user from being signed in\n  // again automatically in `signInAutomatically`.\n  await LocalStorage.set('sveltia-cms.user', {});\n\n  backendName.set(undefined);\n  user.set(undefined);\n  unauthenticated.set(true);\n  dataLoaded.set(false);\n};\n","<script>\n  import { Button, Icon, Menu, MenuItem, PromptDialog, SplitButton } from '@sveltia/ui';\n  import DOMPurify from 'isomorphic-dompurify';\n  import { onMount } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import { allBackendServices } from '$lib/services/backends';\n  import { siteConfig } from '$lib/services/config';\n  import {\n    signInAutomatically,\n    signInError,\n    signingIn,\n    signInManually,\n  } from '$lib/services/user/auth';\n\n  let isLocalHost = $state(false);\n  let isLocalBackendSupported = $state(false);\n  let isBrave = $state(false);\n  let showTokenDialog = $state(false);\n  let token = $state('');\n\n  const configuredBackendName = $derived(/** @type {string} */ ($siteConfig?.backend?.name));\n  const configuredBackend = $derived(\n    configuredBackendName ? allBackendServices[configuredBackendName] : null,\n  );\n  const repositoryName = $derived($siteConfig?.backend?.repo?.split('/')?.[1]);\n  const isTestRepo = $derived(configuredBackendName === 'test-repo');\n\n  /**\n   * Show sign-in options for Git-based backends or a single button for the Test backend.\n   */\n  const ButtonComponent = $derived(isTestRepo ? Button : SplitButton);\n\n  onMount(() => {\n    const { hostname } = window.location;\n\n    // Local editing needs a secure context, either `http://localhost` or `http://*.localhost`\n    // https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts\n    isLocalHost =\n      hostname === '127.0.0.1' || hostname === 'localhost' || hostname.endsWith('.localhost');\n    isLocalBackendSupported = 'showDirectoryPicker' in window;\n    isBrave = navigator.userAgentData?.brands.some(({ brand }) => brand === 'Brave') ?? false;\n\n    signInAutomatically();\n  });\n</script>\n\n<div role=\"none\" class=\"buttons\">\n  {#if $signingIn}\n    <div role=\"alert\" class=\"message\">{$_('signing_in')}</div>\n  {:else if !configuredBackend}\n    <div role=\"alert\">\n      {$_('config.error.unsupported_backend', { values: { name: configuredBackendName } })}\n    </div>\n  {:else}\n    <ButtonComponent\n      variant=\"primary\"\n      popupPosition=\"bottom-right\"\n      label={isTestRepo\n        ? $_('work_with_test_repo')\n        : $_('sign_in_with_x', { values: { service: configuredBackend.label } })}\n      onclick={async () => {\n        await signInManually(configuredBackendName);\n      }}\n    >\n      {#snippet popup()}\n        <Menu>\n          <MenuItem\n            label={$_('use_regular_authentication_flow')}\n            onclick={async () => {\n              await signInManually(configuredBackendName);\n            }}\n          />\n          <MenuItem\n            label={$_('use_personal_access_token')}\n            onclick={async () => {\n              showTokenDialog = true;\n            }}\n          />\n        </Menu>\n      {/snippet}\n    </ButtonComponent>\n    {#if isLocalHost && !isTestRepo}\n      <Button\n        variant=\"primary\"\n        label={$_('work_with_local_repo')}\n        disabled={!isLocalBackendSupported}\n        onclick={async () => {\n          await signInManually('local');\n        }}\n      />\n      {#if !isLocalBackendSupported}\n        <div role=\"alert\">\n          {#if isBrave}\n            {@html DOMPurify.sanitize(\n              $_('local_backend.disabled').replace(\n                '<a>',\n                '<a href=\"https://github.com/sveltia/sveltia-cms#enabling-local-development-in-brave\" target=\"_blank\">',\n              ),\n              { ALLOWED_TAGS: ['a'], ALLOWED_ATTR: ['href', 'target'] },\n            )}\n          {:else}\n            {$_('local_backend.unsupported_browser')}\n          {/if}\n        </div>\n      {:else if !$signInError.message}\n        <div role=\"none\">\n          {#if repositoryName}\n            {$_('work_with_local_repo_description', { values: { repo: repositoryName } })}\n          {:else}\n            {$_('work_with_local_repo_description_no_repo')}\n          {/if}\n        </div>\n      {/if}\n    {/if}\n  {/if}\n  {#if $signInError.message && $signInError.context === 'authentication'}\n    <div role=\"alert\" class=\"error\">\n      <Icon name=\"error\" />\n      {$signInError.message}\n    </div>\n  {/if}\n</div>\n\n<PromptDialog\n  bind:open={showTokenDialog}\n  bind:value={token}\n  title={$_('sign_in_using_pat_title')}\n  textboxAttrs={{ spellcheck: false, 'aria-label': $_('personal_access_token') }}\n  okLabel={$_('sign_in')}\n  okDisabled={!token.trim()}\n  onOk={async () => {\n    await signInManually(configuredBackendName, token.trim());\n  }}\n>\n  {$_('sign_in_using_pat_description')}\n</PromptDialog>\n\n<style lang=\"scss\">\n  .buttons {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    gap: 16px;\n\n    :global {\n      .button {\n        width: 240px;\n      }\n\n      .split-button {\n        width: 240px;\n\n        button {\n          width: auto;\n        }\n\n        & > .button:first-child {\n          flex: auto;\n        }\n      }\n    }\n  }\n\n  [role='alert'] {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n\n    &.error {\n      color: var(--sui-error-foreground-color);\n    }\n  }\n</style>\n","<script>\n  import { Progressbar } from '@sveltia/ui';\n  import DOMPurify from 'isomorphic-dompurify';\n  import { marked } from 'marked';\n  import { _ } from 'svelte-i18n';\n\n  import SveltiaLogo from '$lib/assets/sveltia-logo.svg?raw&inline';\n  import SignIn from '$lib/components/entrance/sign-in.svelte';\n  import { announcedPageStatus } from '$lib/services/app/navigation';\n  import { inAuthPopup } from '$lib/services/backends/git/shared/auth';\n  import { siteConfig, siteConfigError } from '$lib/services/config';\n  import { dataLoaded, dataLoadedProgress } from '$lib/services/contents';\n  import { user } from '$lib/services/user';\n  import { signInError, unauthenticated } from '$lib/services/user/auth';\n  import { prefs, prefsError } from '$lib/services/user/prefs';\n\n  $effect(() => {\n    $announcedPageStatus = $_('welcome_to_sveltia_cms');\n  });\n</script>\n\n<div role=\"none\" class=\"container\" inert={$user && $dataLoaded}>\n  <div role=\"none\" class=\"inner\">\n    {#if $siteConfig || $siteConfigError}\n      {@const logoURL = $siteConfig?.logo_url}\n      <img src={logoURL || `data:image/svg+xml;base64,${btoa(SveltiaLogo)}`} alt=\"\" class=\"logo\" />\n    {/if}\n    <h1>Sveltia CMS</h1>\n    {#if $siteConfigError}\n      <div role=\"alert\" class=\"message\">\n        {$siteConfigError.message}\n        {$_('config.error.try_again')}\n      </div>\n    {:else if $prefsError}\n      <div role=\"alert\" class=\"message\">\n        {$_(`prefs.error.${$prefsError.type}`)}\n      </div>\n    {:else if !$siteConfig || !$prefs}\n      <div role=\"alert\" class=\"message\">{$_('loading_site_config')}</div>\n    {:else if $signInError.message && $signInError.context === 'dataFetch'}\n      <div role=\"alert\">\n        <div role=\"none\" class=\"message\">{$_('loading_site_data_error')}</div>\n        <div role=\"none\" class=\"error\">\n          {@html DOMPurify.sanitize(\n            /** @type {string} */ (marked.parseInline($signInError.message)),\n            { ALLOWED_TAGS: ['a', 'code'], ALLOWED_ATTR: ['href'] },\n          )}\n        </div>\n      </div>\n    {:else if $inAuthPopup}\n      <div role=\"alert\" class=\"message\">{$_('authorizing')}</div>\n    {:else if !$user || $unauthenticated}\n      <SignIn />\n    {:else if !$dataLoaded}\n      <div role=\"alert\" class=\"message\">{$_('loading_site_data')}</div>\n      {#if $dataLoadedProgress !== undefined}\n        <Progressbar now={$dataLoadedProgress} />\n      {/if}\n    {/if}\n  </div>\n</div>\n\n<style lang=\"scss\">\n  .container {\n    position: absolute;\n    inset: 0;\n    z-index: 101;\n    flex: auto;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    gap: 16px;\n    padding: 32px;\n    transition: filter 250ms;\n\n    &[inert] {\n      filter: opacity(0);\n    }\n\n    .inner {\n      display: flex;\n      flex-direction: column;\n      align-items: center;\n      gap: 32px;\n      min-width: 240px;\n      max-width: 800px;\n      min-height: 240px;\n    }\n\n    .logo {\n      max-width: 160px;\n      height: auto;\n\n      @media (width < 768px) {\n        max-width: 120px;\n      }\n    }\n\n    h1 {\n      font-size: 48px;\n    }\n\n    .logo ~ h1 {\n      font-size: var(--sui-font-size-xxx-large);\n    }\n\n    .error {\n      border-radius: var(--sui-control-medium-border-radius);\n      padding: 12px;\n      background-color: var(--sui-secondary-background-color);\n      font-size: var(--sui-font-size-default);\n      line-height: 1.5;\n      text-align: center;\n    }\n\n    :global {\n      // `<SignIn>` also has `.message`\n      .message {\n        margin: 0 0 16px;\n        font-size: var(--sui-font-size-large);\n        font-weight: var(--sui-font-weight-normal);\n        text-align: center;\n      }\n    }\n  }\n</style>\n","<script>\n  import { Button, Infobar } from '@sveltia/ui';\n  import { onMount } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import { backend } from '$lib/services/backends';\n  import { siteConfig } from '$lib/services/config';\n\n  /**\n   * @import { BackendServiceStatus } from '$lib/types/private';\n   */\n\n  const interval = 5 * 60 * 1000; // 5 minutes\n  let timer = 0;\n\n  let mounted = $state(false);\n  /** @type {BackendServiceStatus} */\n  let status = $state('none');\n\n  /**\n   * Check if an update is available.\n   */\n  const checkStatus = async () => {\n    if (!$backend?.checkStatus) {\n      return;\n    }\n\n    status = await $backend.checkStatus();\n  };\n\n  /**\n   * Start checking the status.\n   */\n  const startChecking = () => {\n    checkStatus();\n\n    timer = window.setInterval(() => {\n      checkStatus();\n    }, interval);\n  };\n\n  /**\n   * Stop checking the status.\n   */\n  const stopChecking = () => {\n    window.clearInterval(timer);\n    status = 'none';\n  };\n\n  /**\n   * Initialize the status checker.\n   */\n  const init = () => {\n    if (mounted) {\n      // Cannot get the status of the local backend or a self-hosted Git instance\n      if ($backend?.checkStatus && !$backend.repository?.isSelfHosted) {\n        startChecking();\n      } else {\n        stopChecking();\n      }\n    }\n  };\n\n  onMount(() => {\n    mounted = true;\n\n    // onUnmount\n    return () => {\n      stopChecking();\n    };\n  });\n\n  $effect(() => {\n    void [mounted, $backend, $siteConfig];\n    init();\n  });\n</script>\n\n{#if ['minor', 'major'].includes(status)}\n  <Infobar\n    status={status === 'major' ? 'error' : 'warning'}\n    --sui-infobar-message-justify-content=\"center\"\n  >\n    {$_(`backend_status.${status}_incident`, { values: { service: $backend?.label } })}\n    <Button\n      variant=\"link\"\n      label={$_('details')}\n      onclick={() => {\n        window.open($backend?.statusDashboardURL, '_blank');\n      }}\n    />\n  </Infobar>\n{/if}\n","<script>\n  import { Button, Infobar } from '@sveltia/ui';\n  import { onMount } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import { version as userVersion } from '$lib/services/app';\n\n  const checkInterval = 60 * 60 * 1000; // 1 hour\n  const cacheTimeout = 10 * 60 * 1000; // 10 min\n  let interval = 0;\n  let timeout = 0;\n\n  let updateAvailable = $state(false);\n\n  /**\n   * Check for a new version of the application. If an update is available, wait 10 minutes before\n   * displaying the update notification, as redirects are cached by the UNPKG CDN. Otherwise, an\n   * older script may still be served when the user reloads the page, and then the notification will\n   * persist.\n   * @see https://unpkg.com/#cache-behavior\n   */\n  const checkForUpdates = async () => {\n    try {\n      const response = await fetch('https://unpkg.com/@sveltia/cms/package.json');\n\n      if (!response.ok) {\n        return;\n      }\n\n      const { version: latestVersion } = await response.json();\n\n      if (latestVersion && latestVersion !== userVersion) {\n        timeout = window.setTimeout(() => {\n          updateAvailable = true;\n        }, cacheTimeout);\n      }\n    } catch {\n      //\n    }\n  };\n\n  onMount(() => {\n    // Enable update checking only if the script is installed on the site via UNPKG\n    if (\n      import.meta.env.DEV ||\n      !document.querySelector('script[src^=\"https://unpkg.com/@sveltia/cms\"]')\n    ) {\n      return undefined;\n    }\n\n    checkForUpdates();\n\n    interval = window.setInterval(() => {\n      checkForUpdates();\n    }, checkInterval);\n\n    // onUnmount\n    return () => {\n      window.clearInterval(interval);\n      window.clearTimeout(timeout);\n    };\n  });\n</script>\n\n{#if updateAvailable}\n  <Infobar --sui-infobar-message-justify-content=\"center\">\n    {$_('update_available')}\n    <Button\n      variant=\"link\"\n      label={$_('update_now')}\n      onclick={() => {\n        window.location.reload();\n      }}\n    />\n  </Infobar>\n{/if}\n","<script>\n  import { Alert, Menu, MenuButton, MenuItem, Toast } from '@sveltia/ui';\n  import { isTextFileType } from '@sveltia/utils/file';\n  import { _ } from 'svelte-i18n';\n\n  import { getAssetBlob, getAssetDetails } from '$lib/services/assets/info';\n  import { SUPPORTED_IMAGE_TYPES } from '$lib/services/utils/media/image';\n  import { transformImage } from '$lib/services/utils/media/image/transform';\n\n  /**\n   * @import { Asset, AssetDetails } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Asset[]} [assets] Selected assets.\n   * @property {boolean} [useButton] Whether to use the Button component.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    assets = [],\n    useButton = true,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {AssetDetails[]} */\n  let assetsDetailList = $state([]);\n  let canCopyFileData = $state(false);\n  /** @type {{ show: boolean, text: string, status: 'success' | 'error' }} */\n  const toast = $state({ show: false, text: '', status: 'success' });\n\n  const singleAsset = $derived(assets.length === 1);\n  const publicURLs = $derived(\n    assetsDetailList.filter(({ publicURL }) => !!publicURL).map(({ publicURL }) => publicURL),\n  );\n\n  /** @type {Blob | undefined} */\n  let assetBlob = undefined;\n\n  /**\n   * Check if the file data can be copied to clipboard. Since OSes usually support only one item,\n   * enable the menu only when one file is selected. Also check if the file type is plaintext or\n   * image and if the copy method is supported in the browser.\n   * @returns {Promise<boolean>} Result.\n   */\n  const checkCanCopyFileData = async () => {\n    assetBlob = undefined;\n\n    if (!singleAsset) {\n      return false;\n    }\n\n    const blob = await getAssetBlob(assets[0]);\n    const { type } = blob;\n\n    assetBlob = blob;\n\n    if (isTextFileType(type)) {\n      return true;\n    }\n\n    if (SUPPORTED_IMAGE_TYPES.includes(type)) {\n      return typeof navigator.clipboard.write === 'function';\n    }\n\n    return false;\n  };\n\n  /**\n   * Copy the asset public URL(s) to clipboard.\n   */\n  const copyPublicURLs = async () => {\n    await navigator.clipboard.writeText(publicURLs.join('\\n'));\n  };\n\n  /**\n   * Copy the asset file path(s) to clipboard.\n   */\n  const copyFilePaths = async () => {\n    await navigator.clipboard.writeText(assets.map(({ path }) => `/${path}`).join('\\n'));\n  };\n\n  /**\n   * Copy the file data to clipboard. Given that browsers typically support only plaintext and PNG\n   * image, convert the file if necessary.\n   */\n  const copyFileData = async () => {\n    let blob = /** @type {Blob} */ (assetBlob);\n    const { type } = blob;\n\n    if (isTextFileType(type)) {\n      await navigator.clipboard.writeText(await blob.text());\n\n      return;\n    }\n\n    if (!SUPPORTED_IMAGE_TYPES.includes(type)) {\n      throw new Error('Unsupported type');\n    }\n\n    if (type !== 'image/png') {\n      blob = await transformImage(blob);\n    }\n\n    await navigator.clipboard.write([new ClipboardItem({ 'image/png': blob })]);\n  };\n\n  /**\n   * Execute a copy action.\n   * @param {Function} func Copy function.\n   * @param {string} toastSingular Singular toast label.\n   * @param {string} toastPlural Plural toast label.\n   */\n  const doCopyAction = async (func, toastSingular, toastPlural) => {\n    try {\n      await func();\n      toast.status = 'success';\n      toast.text = singleAsset ? toastSingular : toastPlural;\n    } catch {\n      toast.status = 'error';\n      toast.text = $_('clipboard_error');\n    } finally {\n      toast.show = true;\n    }\n  };\n\n  $effect(() => {\n    (async () => {\n      assetsDetailList = await Promise.all(assets.map(getAssetDetails));\n      canCopyFileData = await checkCanCopyFileData();\n    })();\n  });\n</script>\n\n{#snippet menuItems()}\n  <MenuItem\n    label={singleAsset ? $_('public_url') : $_('public_urls')}\n    disabled={!publicURLs.length}\n    onclick={() => {\n      doCopyAction(copyPublicURLs, $_('asset_url_copied'), $_('asset_urls_copied'));\n    }}\n  />\n  <MenuItem\n    label={singleAsset ? $_('file_path') : $_('file_paths')}\n    onclick={() => {\n      doCopyAction(copyFilePaths, $_('asset_path_copied'), $_('asset_paths_copied'));\n    }}\n  />\n  <MenuItem\n    label={$_('file_data')}\n    disabled={!canCopyFileData}\n    onclick={() => {\n      doCopyAction(copyFileData, $_('asset_data_copied'), $_('asset_data_copied'));\n    }}\n  />\n{/snippet}\n\n{#if useButton}\n  <MenuButton\n    variant=\"ghost\"\n    disabled={!assets.length}\n    label={$_('copy')}\n    popupPosition=\"bottom-right\"\n  >\n    {#snippet popup()}\n      <Menu aria-label={$_('copy_options')}>\n        {@render menuItems()}\n      </Menu>\n    {/snippet}\n  </MenuButton>\n{:else}\n  <MenuItem disabled={!assets.length} label={$_('copy')} popupPosition=\"left-top\">\n    {#snippet items()}\n      {@render menuItems()}\n    {/snippet}\n  </MenuItem>\n{/if}\n\n<Toast bind:show={toast.show}>\n  <Alert status={toast.status}>{toast.text}</Alert>\n</Toast>\n","import { writable } from 'svelte/store';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import { UpdateToastState } from '$lib/types/private';\n */\n\n/**\n * @type {UpdateToastState}\n */\nexport const UPDATE_TOAST_DEFAULT_STATE = {\n  saved: false,\n  moved: false,\n  renamed: false,\n  deleted: false,\n  published: false,\n  count: 1,\n};\n\n/**\n * @type {Writable<UpdateToastState>}\n */\nexport const contentUpdatesToast = writable({ ...UPDATE_TOAST_DEFAULT_STATE });\n","import { writable } from 'svelte/store';\n\nimport { UPDATE_TOAST_DEFAULT_STATE } from '$lib/services/contents/collection/data';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import { UpdateToastState } from '$lib/types/private';\n */\n\n/**\n * A writable store to manage the state of the asset updates toast notification.\n * @type {Writable<UpdateToastState>}\n */\nexport const assetUpdatesToast = writable({ ...UPDATE_TOAST_DEFAULT_STATE });\n","import { IndexedDB } from '@sveltia/utils/storage';\nimport { get } from 'svelte/store';\n\nimport { allAssets } from '$lib/services/assets';\nimport { backend } from '$lib/services/backends';\nimport { allEntries } from '$lib/services/contents';\nimport { user } from '$lib/services/user';\nimport { prefs } from '$lib/services/user/prefs';\nimport { getBlob } from '$lib/services/utils/file';\n\n/**\n * @import {\n * Asset,\n * BackendService,\n * ChangeResults,\n * CommitAuthor,\n * CommitOptions,\n * CommitResults,\n * Entry,\n * FileChange,\n * RepositoryFileInfo,\n * User,\n * } from '$lib/types/private';\n */\n\n/**\n * Get the commit author information from the user store.\n * @returns {CommitAuthor | undefined} Commit author information including `name`, `email`, `id`,\n * and `login`. `undefined` for the local and test-repo backends.\n */\nexport const getCommitAuthor = () => {\n  const userData = /** @type {User} */ (get(user));\n\n  if (!userData) {\n    return undefined;\n  }\n\n  const { name, email, id, login } = userData;\n\n  if (!name || !email) {\n    return undefined;\n  }\n\n  return { name, email, id, login };\n};\n\n/**\n * Update the file cache with the given changes. This will update the file cache with the latest\n * file content and metadata, such as SHA and size, for Git-based backends.\n * @param {object} args Arguments.\n * @param {FileChange[]} args.changes Committed changes.\n * @param {CommitResults} args.commit Commit results.\n */\nexport const updateCache = async ({ changes, commit }) => {\n  const { databaseName } = get(backend)?.repository ?? {};\n\n  if (!databaseName) {\n    return;\n  }\n\n  const cacheDB = new IndexedDB(databaseName, 'file-cache');\n  const { files, author: commitAuthor, date: commitDate } = commit;\n  const meta = { commitAuthor, commitDate };\n\n  await Promise.all(\n    changes.map(async (change) => {\n      const { action, slug, path, previousPath, data } = change;\n\n      // Skip if the change is made to an asset; we only handle entries\n      if (typeof data !== 'string' || !slug) {\n        return;\n      }\n\n      // Delete the file from the cache if the action is `delete`\n      if (action === 'delete') {\n        await cacheDB.delete(path);\n        return;\n      }\n\n      // Delete the previous file from the cache if the action is `move`\n      if (action === 'move') {\n        await cacheDB.delete(previousPath);\n      }\n\n      /** @type {RepositoryFileInfo} */\n      const fileInfo = {\n        sha: files[path]?.sha,\n        size: getBlob(data).size,\n        text: data,\n        meta,\n      };\n\n      // Update the file cache with the new file content and metadata\n      await cacheDB.set(path, fileInfo);\n    }),\n  );\n};\n\n/**\n * Update the entry and asset stores with the results of the commit changes.\n * @param {object} args Arguments.\n * @param {FileChange[]} args.changes Committed changes.\n * @param {Entry[]} args.savedEntries Entries that have been saved.\n * @param {Asset[]} args.savedAssets Assets that have been saved.\n */\nexport const updateStores = ({ changes, savedEntries, savedAssets }) => {\n  const savedEntryIds = savedEntries.map((e) => e.id);\n\n  allEntries.update((entries) => [\n    ...entries.filter((e) => !savedEntryIds.includes(e.id)),\n    ...savedEntries,\n  ]);\n\n  const savedAssetsPaths = savedAssets.map((a) => a.path);\n  const movedAssetPaths = changes.filter((c) => c.action === 'move').map((c) => c.previousPath);\n  const deletedAssetPaths = changes.filter((c) => c.action === 'delete').map((c) => c.path);\n  const excludingPaths = [...savedAssetsPaths, ...movedAssetPaths, ...deletedAssetPaths];\n\n  allAssets.update((assets) => [\n    ...assets.filter((a) => !excludingPaths.includes(a.path)),\n    ...savedAssets,\n  ]);\n};\n\n/**\n * Save changes to the backend and update the file cache and stores with the results.\n * @param {object} args Arguments.\n * @param {FileChange[]} args.changes Changes to be committed.\n * @param {Entry[]} [args.savingEntries] Entries to be saved.\n * @param {Asset[]} [args.savingAssets] Assets to be saved.\n * @param {CommitOptions} args.options Options for committing changes, such as commit type.\n * @returns {Promise<ChangeResults>} Change results containing the commit information, saved\n * entries, and saved assets.\n */\nexport const saveChanges = async ({ changes, savingEntries = [], savingAssets = [], options }) => {\n  const { commitChanges } = /** @type {BackendService} */ (get(backend));\n\n  /** @type {CommitResults} */\n  const commit = {\n    ...(await commitChanges(changes, options)),\n    author: getCommitAuthor(),\n  };\n\n  if (get(prefs).devModeEnabled) {\n    // eslint-disable-next-line no-console\n    console.debug('Commit changes:', changes);\n    // eslint-disable-next-line no-console\n    console.debug('Commit results:', commit);\n  }\n\n  const { files, author: commitAuthor, date: commitDate } = commit;\n\n  const savedEntries = savingEntries.map(\n    (entry) => /** @type {Entry} */ ({ ...entry, commitAuthor, commitDate }),\n  );\n\n  const savedAssets = savingAssets.map((asset) => {\n    const { sha, file } = files[asset.path] ?? {};\n    const blobURL = file ? URL.createObjectURL(file) : undefined;\n\n    return /** @type {Asset} */ ({ ...asset, sha, blobURL, commitAuthor, commitDate });\n  });\n\n  await updateCache({ changes, commit });\n  updateStores({ changes, savedEntries, savedAssets });\n\n  return { commit, savedEntries, savedAssets };\n};\n","import { focusedAsset } from '$lib/services/assets';\nimport { assetUpdatesToast } from '$lib/services/assets/data';\nimport { saveChanges } from '$lib/services/backends/save';\nimport { UPDATE_TOAST_DEFAULT_STATE } from '$lib/services/contents/collection/data';\n\n/**\n * @import { Asset } from '$lib/types/private';\n */\n\n/**\n * Update the asset stores after deleting assets.\n * @param {object} args Arguments.\n * @param {Asset[]} args.assets List of assets that have been deleted.\n */\nexport const updateStores = ({ assets }) => {\n  // Clear asset info in the sidebar\n  focusedAsset.update((_focusedAsset) =>\n    assets.some(({ path }) => _focusedAsset?.path === path) ? undefined : _focusedAsset,\n  );\n\n  assetUpdatesToast.set({\n    ...UPDATE_TOAST_DEFAULT_STATE,\n    deleted: true,\n    count: assets.length,\n  });\n};\n\n/**\n * Delete the given assets from the backend and update the asset stores.\n * @param {Asset[]} assets List of assets to be deleted.\n * @todo Update entries to remove these asset paths. If an asset is used for a required field, show\n * an error message and abort the operation.\n * @todo Validate entry field constraints, such as required fields, before deleting the assets.\n */\nexport const deleteAssets = async (assets) => {\n  await saveChanges({\n    changes: assets.map(({ path, sha }) => ({ action: 'delete', path, previousSha: sha })),\n    options: { commitType: 'deleteMedia' },\n  });\n\n  updateStores({ assets });\n};\n","<script>\n  import { Button, ConfirmationDialog, MenuItem } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { deleteAssets } from '$lib/services/assets/data/delete';\n\n  /**\n   * @import { Asset } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Asset[]} [assets] Selected assets.\n   * @property {string} [buttonDescription] The `aria-label` attribute on the button.\n   * @property {string} [dialogDescription] Description to be displayed on the dialog.\n   * @property {(() => void) | undefined} [onDelete] Custom `delete` event handler.\n   * @property {boolean} [useButton] Whether to use the Button component.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    assets = [],\n    buttonDescription = '',\n    dialogDescription = '',\n    onDelete = undefined,\n    useButton = true,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  let showDialog = $state(false);\n\n  const Component = $derived(useButton ? Button : MenuItem);\n</script>\n\n<Component\n  variant=\"ghost\"\n  disabled={!assets.length}\n  label={$_('delete')}\n  aria-label={buttonDescription}\n  onclick={() => {\n    showDialog = true;\n  }}\n/>\n\n<ConfirmationDialog\n  bind:open={showDialog}\n  title={assets.length === 1 ? $_('delete_asset') : $_('delete_assets')}\n  okLabel={$_('delete')}\n  onOk={() => {\n    deleteAssets(assets);\n    onDelete?.();\n  }}\n>\n  {dialogDescription}\n</ConfirmationDialog>\n","<script>\n  import { Alert, Button, MenuItem, Toast } from '@sveltia/ui';\n  import { saveFile } from '@sveltia/utils/file';\n  import { sleep } from '@sveltia/utils/misc';\n  import { _ } from 'svelte-i18n';\n\n  import { getAssetBlob } from '$lib/services/assets/info';\n\n  /**\n   * @import { Asset } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Asset[]} [assets] Selected assets.\n   * @property {boolean} [useButton] Whether to use the Button component.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    assets = [],\n    useButton = true,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  let showToast = $state(false);\n\n  const Component = $derived(useButton ? Button : MenuItem);\n\n  /**\n   * Download the assets.\n   */\n  const downloadFiles = async () => {\n    // eslint-disable-next-line no-restricted-syntax\n    for (const asset of assets) {\n      // eslint-disable-next-line no-await-in-loop\n      saveFile(await getAssetBlob(asset), asset.name);\n      // eslint-disable-next-line no-await-in-loop\n      await sleep(300);\n    }\n\n    showToast = true;\n  };\n</script>\n\n<Component\n  variant=\"ghost\"\n  disabled={!assets.length}\n  label={$_('download')}\n  onclick={() => {\n    downloadFiles();\n  }}\n/>\n\n<Toast bind:show={showToast}>\n  <Alert status=\"success\">\n    {assets.length === 1 ? $_('asset_downloaded') : $_('assets_downloaded')}\n  </Alert>\n</Toast>\n","<script>\n  import { Divider, Menu, MenuButton, MenuItem } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { editingAsset, renamingAsset, uploadingAssets } from '$lib/services/assets';\n  import { defaultAssetDetails, getAssetDetails } from '$lib/services/assets/info';\n  import { canEditAsset } from '$lib/services/assets/kinds';\n  import { showUploadAssetsDialog } from '$lib/services/assets/view';\n  import { backend } from '$lib/services/backends';\n  import { prefs } from '$lib/services/user/prefs';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import { Asset, AssetDetails } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Asset} [asset] Selected asset.\n   * @property {Snippet} [extraItems] Slot content.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    asset,\n    extraItems = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {AssetDetails} */\n  let details = $state({ ...defaultAssetDetails });\n\n  const { publicURL, repoBlobURL } = $derived(details);\n\n  /**\n   * Update the properties above.\n   */\n  const updateProps = async () => {\n    details = asset ? await getAssetDetails(asset) : { ...defaultAssetDetails };\n  };\n\n  $effect(() => {\n    void [asset];\n    updateProps();\n  });\n</script>\n\n<MenuButton\n  variant=\"ghost\"\n  iconic\n  popupPosition=\"bottom-right\"\n  aria-label={$_('show_edit_options')}\n>\n  {#snippet popup()}\n    <Menu aria-label={$_('edit_options')}>\n      {@render extraItems?.()}\n      <MenuItem\n        variant=\"ghost\"\n        label={$_('edit')}\n        aria-label={$_('edit_asset')}\n        disabled={!asset || !canEditAsset(asset)}\n        onclick={() => {\n          $editingAsset = asset;\n        }}\n      />\n      <MenuItem\n        variant=\"ghost\"\n        label={$_('rename')}\n        aria-label={$_('rename_asset')}\n        disabled={!asset}\n        onclick={() => {\n          $renamingAsset = asset;\n        }}\n      />\n      <MenuItem\n        variant=\"ghost\"\n        label={$_('replace')}\n        aria-label={$_('replace_asset')}\n        disabled={!asset}\n        onclick={() => {\n          $uploadingAssets = { folder: undefined, files: [], originalAsset: asset };\n          $showUploadAssetsDialog = true;\n        }}\n      />\n      <Divider />\n      <MenuItem\n        label={$_('view_on_live_site')}\n        disabled={!publicURL}\n        onclick={() => {\n          window.open(publicURL);\n        }}\n      />\n      {#if $prefs.devModeEnabled}\n        <MenuItem\n          disabled={!$backend?.repository || !repoBlobURL}\n          label={$_('view_on_x', {\n            values: { service: $backend?.repository?.label },\n            default: $_('view_in_repository'),\n          })}\n          onclick={() => {\n            window.open(`${repoBlobURL}?plain=1`);\n          }}\n        />\n      {/if}\n    </Menu>\n  {/snippet}\n</MenuButton>\n","<script>\n  import { Button, Icon } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [aria-label] `aria-label` property on the button.\n   * @property {boolean} [useShortcut] Whether to enable Escape keyboard shortcut. Default: `false`.\n   * @property {(event: MouseEvent) => void} [onclick] `click` event handler.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    'aria-label': ariaLabel,\n    useShortcut = false,\n    onclick = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<Button\n  variant=\"ghost\"\n  iconic\n  aria-label={ariaLabel ?? $_('back')}\n  keyShortcuts={useShortcut ? 'Escape' : undefined}\n  class=\"back\"\n  {onclick}\n>\n  {#snippet startIcon()}\n    <Icon name=\"arrow_back\" />\n  {/snippet}\n</Button>\n","<script>\n  import { Toolbar, TruncatedText } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import CopyAssetsButton from '$lib/components/assets/toolbar/copy-assets-button.svelte';\n  import DeleteAssetsButton from '$lib/components/assets/toolbar/delete-assets-button.svelte';\n  import DownloadAssetsButton from '$lib/components/assets/toolbar/download-assets-button.svelte';\n  import EditOptionsButton from '$lib/components/assets/toolbar/edit-options-button.svelte';\n  import BackButton from '$lib/components/common/page-toolbar/back-button.svelte';\n  import { goBack } from '$lib/services/app/navigation';\n  import { overlaidAsset } from '$lib/services/assets';\n  import { selectedAssetFolder } from '$lib/services/assets/folders';\n  import { isSmallScreen } from '$lib/services/user/env';\n\n  const assets = $derived($overlaidAsset ? [$overlaidAsset] : []);\n  const useButton = $derived(!$isSmallScreen);\n</script>\n\n{#snippet overflowButtons()}\n  <CopyAssetsButton {assets} {useButton} />\n  <DownloadAssetsButton {assets} {useButton} />\n  <DeleteAssetsButton\n    {assets}\n    buttonDescription={$_('delete_asset')}\n    dialogDescription={$_('confirm_deleting_this_asset')}\n    onDelete={() => {\n      goBack(`/assets/${$selectedAssetFolder?.internalPath ?? '-/all'}`);\n    }}\n    {useButton}\n  />\n{/snippet}\n\n<Toolbar variant=\"primary\" aria-label={$_('primary')}>\n  <BackButton\n    aria-label={$_('cancel_editing')}\n    useShortcut={true}\n    onclick={() => {\n      goBack(`/assets/${$selectedAssetFolder?.internalPath ?? '-/all'}`);\n    }}\n  />\n  <h2 role=\"none\">\n    <TruncatedText>\n      {$overlaidAsset?.name}\n    </TruncatedText>\n  </h2>\n  {#if !$isSmallScreen}\n    {@render overflowButtons()}\n  {/if}\n  <EditOptionsButton asset={$overlaidAsset}>\n    {#snippet extraItems()}\n      {#if $isSmallScreen}\n        {@render overflowButtons()}\n      {/if}\n    {/snippet}\n  </EditOptionsButton>\n</Toolbar>\n","<!--\n  @component\n  Implement a static map using Leaflet, showing a marker at the specified coordinates.\n  @see https://leafletjs.com/\n-->\n<script>\n  import { onMount } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import { getUnpkgURL, loadModule } from '$lib/services/app/dependencies';\n\n  /**\n   * @import { GeoCoordinates } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {GeoCoordinates} coordinates GeoCoordinates of the location to show on the map.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    coordinates,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {HTMLElement | undefined} */\n  let mapElement = $state();\n\n  /** @type {import('leaflet').Map | undefined} */\n  let map = undefined;\n\n  /**\n   * Load the Leaflet library and initialize the map. We don’t bundle the library because of the\n   * bundle size. The component may not be used often, and multiple map services, including Google\n   * Maps and Here Maps, may be supported in the future.\n   */\n  const init = async () => {\n    if (!mapElement) {\n      return;\n    }\n\n    /** @type {import('leaflet')} */\n    const leaflet = await loadModule('leaflet', 'dist/leaflet-src.esm.js');\n    const iconUrl = `${getUnpkgURL('leaflet')}/dist/images/marker-icon-2x.png`;\n\n    map = leaflet.map(mapElement, { center: [0, 0], zoom: 2 });\n\n    leaflet\n      .tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {\n        attribution:\n          '&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors',\n      })\n      .addTo(map);\n\n    const { latitude, longitude } = coordinates;\n    const icon = leaflet.icon({ iconUrl, iconSize: [25, 41] });\n\n    leaflet.marker([latitude, longitude], { icon }).addTo(map);\n    map.setView([latitude, longitude], 12);\n\n    new ResizeObserver(() => {\n      map?.invalidateSize();\n    }).observe(mapElement);\n  };\n\n  onMount(() => {\n    init();\n  });\n</script>\n\n<div\n  role=\"application\"\n  class=\"map\"\n  bind:this={mapElement}\n  aria-label={$_('map_lat_lng', { values: coordinates })}\n></div>\n\n<style lang=\"scss\">\n  // @todo Copy minimal styles from Leaflet to avoid loading the whole CSS file\n  @import 'node_modules/leaflet/dist/leaflet.css';\n\n  .map {\n    margin: var(--sui-focus-ring-width);\n    border: 1px solid var(--sui-textbox-border-color);\n    border-radius: var(--sui-textbox-border-radius);\n    overflow: hidden;\n    aspect-ratio: 1 / 1;\n    background-clip: text;\n  }\n\n  :global(.leaflet-container) {\n    font-family: inherit !important;\n    font-size: var(--sui-font-size-small) !important;\n  }\n\n  :global(.leaflet-container a) {\n    color: var(--sui-primary-accent-color-text) !important;\n    text-decoration: none !important;\n  }\n\n  :global(.leaflet-bar a) {\n    border-color: var(--sui-button-border-color) !important;\n    color: var(--sui-secondary-foreground-color) !important;\n    background-color: var(--sui-button-background-color) !important;\n  }\n\n  :global(.leaflet-control) {\n    color: var(--sui-secondary-foreground-color) !important;\n    background-color: var(--sui-secondary-background-color-translucent) !important;\n  }\n\n  :global(.leaflet-control-attribution) {\n    padding: 4px 8px;\n  }\n\n  // Dark theme: https://stackoverflow.com/q/59819792\n  :global(:root[data-theme='dark'] .leaflet-layer) {\n    filter: invert(100%) hue-rotate(180deg);\n  }\n</style>\n","/**\n * Format the given duration in the `hh:mm:ss` format. Note that it assumes the duration is less\n * than 24 hours.\n * @param {number} duration Duration in seconds.\n * @returns {string} Formatted duration.\n */\nexport const formatDuration = (duration) => new Date(duration * 1000).toISOString().substr(11, 8);\n","<script>\n  import { Button } from '@sveltia/ui';\n  import { getPathInfo } from '@sveltia/utils/file';\n  import { sleep } from '@sveltia/utils/misc';\n  import mime from 'mime';\n  import { _, locale as appLocale } from 'svelte-i18n';\n\n  import AssetPreview from '$lib/components/assets/shared/asset-preview.svelte';\n  import StaticMap from '$lib/components/common/static-map.svelte';\n  import { goto } from '$lib/services/app/navigation';\n  import { defaultAssetDetails, getAssetDetails } from '$lib/services/assets/info';\n  import { isMediaKind } from '$lib/services/assets/kinds';\n  import { getCollectionLabel } from '$lib/services/contents/collection';\n  import {\n    getCollectionFileLabel,\n    getCollectionFilesByEntry,\n  } from '$lib/services/contents/collection/files';\n  import { getAssociatedCollections } from '$lib/services/contents/entry';\n  import { getEntrySummary } from '$lib/services/contents/entry/summary';\n  import { DATE_TIME_FORMAT_OPTIONS } from '$lib/services/utils/date';\n  import { formatSize } from '$lib/services/utils/file';\n  import { formatDuration } from '$lib/services/utils/media/video';\n\n  /**\n   * @import { Asset, AssetDetails } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Asset} asset Asset.\n   * @property {boolean} [showPreview] Whether to show the media preview.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    asset,\n    showPreview = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {AssetDetails} */\n  let details = $state({ ...defaultAssetDetails });\n\n  const { path, size, kind, commitAuthor, commitDate } = $derived(asset);\n  const { publicURL, repoBlobURL, dimensions, duration, createdDate, coordinates, usedEntries } =\n    $derived(details);\n  const { extension = '' } = $derived(getPathInfo(path));\n  const canPreview = $derived(isMediaKind(kind) || path.endsWith('.pdf'));\n\n  /**\n   * Format the date to a localized string.\n   * @param {Date} date Date to format.\n   * @returns {string} Formatted date string.\n   */\n  const formatDate = (date) =>\n    date.toLocaleString($appLocale ?? undefined, DATE_TIME_FORMAT_OPTIONS);\n\n  /**\n   * Update the properties above.\n   */\n  const updateProps = async () => {\n    details = asset ? await getAssetDetails(asset) : { ...defaultAssetDetails };\n  };\n\n  $effect(() => {\n    void [asset];\n    updateProps();\n  });\n</script>\n\n{#snippet usedEntryLink(\n  /** @type {Record<string, string>} */ { link, collectionLabel, entryLabel },\n)}\n  <p>\n    <Button role=\"link\" variant=\"link\" onclick={() => goto(link, { transitionType: 'forwards' })}>\n      <span role=\"none\">{collectionLabel} › {entryLabel}</span>\n    </Button>\n  </p>\n{/snippet}\n\n<div role=\"none\" class=\"detail\">\n  {#if showPreview && canPreview}\n    <div role=\"none\" class=\"preview\">\n      <AssetPreview\n        {kind}\n        {asset}\n        variant=\"tile\"\n        checkerboard={kind === 'image'}\n        controls={['audio', 'video'].includes(kind)}\n      />\n    </div>\n  {/if}\n  <section>\n    <h4>{$_('kind')}</h4>\n    <p>\n      {$_(`file_type_labels.${extension}`, {\n        default: mime.getType(path) ?? extension.toUpperCase(),\n      })}\n    </p>\n  </section>\n  <section>\n    <h4>{$_('size')}</h4>\n    <p>\n      {#key $appLocale}\n        {formatSize(size)}\n      {/key}\n    </p>\n  </section>\n  {#if canPreview}\n    <section>\n      <h4>{$_('dimensions')}</h4>\n      <p>{dimensions ? `${dimensions.width}×${dimensions.height}` : '–'}</p>\n    </section>\n  {/if}\n  {#if ['audio', 'video'].includes(kind)}\n    <section>\n      <h4>{$_('duration')}</h4>\n      <p>{duration ? formatDuration(duration) : '–'}</p>\n    </section>\n  {/if}\n  <section>\n    <h4>{$_('public_url')}</h4>\n    <p>\n      {#if publicURL}\n        <a href={publicURL} target=\"_blank\">{publicURL}</a>\n      {:else}\n        –\n      {/if}\n    </p>\n  </section>\n  <section>\n    <h4>{$_('file_path')}</h4>\n    <p>\n      {#if repoBlobURL}\n        <a href={repoBlobURL}>/{path}</a>\n      {:else}\n        /{path}\n      {/if}\n    </p>\n  </section>\n  <section>\n    <h4>{$_('used_in')}</h4>\n    {#each usedEntries as entry (entry.id)}\n      {#await sleep() then}\n        {#each getAssociatedCollections(entry) as collection (collection.name)}\n          {#key $appLocale}\n            {@const collectionLabel = getCollectionLabel(collection)}\n            {#each getCollectionFilesByEntry(collection, entry) as file (file.name)}\n              {@render usedEntryLink({\n                link: `/collections/${collection.name}/entries/${file.name}`,\n                collectionLabel,\n                entryLabel: getCollectionFileLabel(file),\n              })}\n            {:else}\n              {@render usedEntryLink({\n                link: `/collections/${collection.name}/entries/${entry.subPath}`,\n                collectionLabel,\n                entryLabel: getEntrySummary(collection, entry, { useTemplate: true }),\n              })}\n            {/each}\n          {/key}\n        {/each}\n      {/await}\n    {:else}\n      <p>{$_('sort_keys.none')}</p>\n    {/each}\n  </section>\n  {#if commitAuthor}\n    <section>\n      <h4>{$_('sort_keys.commit_author')}</h4>\n      <p>{commitAuthor.name || commitAuthor.login || commitAuthor.email}</p>\n    </section>\n  {/if}\n  {#if commitDate}\n    <section>\n      <h4>{$_('sort_keys.commit_date')}</h4>\n      <p>{formatDate(commitDate)}</p>\n    </section>\n  {/if}\n  {#if createdDate}\n    <section>\n      <h4>{$_('created_date')}</h4>\n      <p>{formatDate(createdDate)}</p>\n    </section>\n  {/if}\n  {#if coordinates}\n    <section>\n      <h4>{$_('location')}</h4>\n      <StaticMap {coordinates} />\n    </section>\n  {/if}\n</div>\n\n<style lang=\"scss\">\n  .detail {\n    flex: none;\n    overflow-x: hidden;\n    overflow-y: auto;\n    padding: 16px;\n    width: 320px;\n\n    .preview {\n      overflow: hidden;\n      margin: 0 0 16px;\n      border-radius: var(--sui-control-large-border-radius);\n      background-color: var(--sui-content-background-color);\n      aspect-ratio: 1 / 1;\n    }\n\n    section {\n      &:not(:last-child) {\n        margin: 0 0 16px;\n      }\n\n      & > :global(*) {\n        margin: 0 0 4px;\n        word-break: break-all;\n      }\n    }\n\n    h4 {\n      font-size: var(--sui-font-size-small);\n      font-weight: var(--sui-font-weight-bold);\n      color: var(--sui-secondary-foreground-color);\n    }\n  }\n</style>\n","<script>\n  import { EmptyState } from '@sveltia/ui';\n  import { isTextFileType } from '@sveltia/utils/file';\n  import DOMPurify from 'isomorphic-dompurify';\n  import { marked } from 'marked';\n  import { tick } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import Toolbar from '$lib/components/assets/details/toolbar.svelte';\n  import AssetPreview from '$lib/components/assets/shared/asset-preview.svelte';\n  import InfoPanel from '$lib/components/assets/shared/info-panel.svelte';\n  import { overlaidAsset } from '$lib/services/assets';\n  import { getAssetBlob } from '$lib/services/assets/info';\n  import { isMediaKind } from '$lib/services/assets/kinds';\n  import { showAssetOverlay } from '$lib/services/assets/view';\n\n  /** @type {HTMLElement | undefined} */\n  let wrapper = $state();\n  let hidden = $state(true);\n  /** @type {Blob | undefined} */\n  let blob = $state();\n\n  const kind = $derived($overlaidAsset?.kind);\n  const blobURL = $derived($overlaidAsset?.blobURL);\n  const name = $derived($overlaidAsset?.name);\n\n  /**\n   * Move focus to the wrapper once the overlay is loaded.\n   */\n  const moveFocus = async () => {\n    // Wait until `inert` is updated\n    await tick();\n\n    if (wrapper) {\n      wrapper.tabIndex = 0;\n      wrapper.focus();\n    }\n  };\n\n  $effect(() => {\n    if ($overlaidAsset) {\n      (async () => {\n        blob = await getAssetBlob($overlaidAsset);\n      })();\n    }\n  });\n\n  $effect(() => {\n    wrapper?.addEventListener('transitionend', () => {\n      if (!$showAssetOverlay) {\n        hidden = true;\n      }\n    });\n  });\n\n  $effect(() => {\n    if (wrapper) {\n      if ($showAssetOverlay) {\n        hidden = false;\n        moveFocus();\n      }\n    }\n  });\n</script>\n\n<div\n  role=\"group\"\n  class=\"wrapper\"\n  {hidden}\n  inert={!$showAssetOverlay}\n  aria-label={$_('asset_editor')}\n  bind:this={wrapper}\n>\n  {#key $overlaidAsset?.sha}\n    <Toolbar />\n    <div role=\"none\" class=\"row\">\n      <div role=\"none\" class=\"preview\">\n        {#if kind && isMediaKind(kind)}\n          <AssetPreview\n            {kind}\n            asset={$overlaidAsset}\n            blurBackground={['image', 'video'].includes(kind)}\n            checkerboard={kind === 'image'}\n            alt={kind === 'image' ? name : undefined}\n            controls={['audio', 'video'].includes(kind)}\n          />\n        {:else if blob?.type === 'application/pdf'}\n          <iframe src={blobURL} title={name}></iframe>\n        {:else if blob?.type && isTextFileType(blob.type)}\n          {#await $overlaidAsset?.text ?? blob.text() then text}\n            {#if name?.endsWith('.md')}\n              {#await marked.parse(text, { breaks: true, async: true }) then rawHTML}\n                <div role=\"figure\" class=\"markdown\">\n                  {@html DOMPurify.sanitize(rawHTML)}\n                </div>\n              {:catch}\n                <pre role=\"figure\">{text}</pre>\n              {/await}\n            {:else}\n              <pre role=\"figure\">{text}</pre>\n            {/if}\n          {/await}\n        {:else}\n          <EmptyState>\n            <span role=\"alert\">{$_('preview_unavailable')}</span>\n          </EmptyState>\n        {/if}\n      </div>\n      {#if $overlaidAsset}\n        <InfoPanel asset={$overlaidAsset} />\n      {/if}\n    </div>\n  {/key}\n</div>\n\n<style lang=\"scss\">\n  .wrapper {\n    position: fixed;\n    inset: 0;\n    z-index: 100;\n    display: flex;\n    flex-direction: column;\n    background-color: var(--sui-secondary-background-color);\n    transition: filter 250ms;\n\n    &[hidden] {\n      display: none;\n    }\n\n    &[inert] {\n      filter: opacity(0);\n    }\n\n    .row {\n      flex: auto;\n      display: flex;\n      overflow: hidden;\n\n      @media (width < 768px) {\n        flex-direction: column;\n\n        .preview {\n          flex: none !important;\n          aspect-ratio: 1 / 1;\n        }\n\n        :global {\n          .detail {\n            flex: auto;\n            width: auto;\n          }\n        }\n      }\n\n      .preview {\n        flex: auto;\n        overflow: hidden;\n\n        iframe,\n        pre,\n        .markdown {\n          display: block;\n          width: 100%;\n          height: 100%;\n        }\n\n        pre,\n        .markdown {\n          margin: 0;\n          padding: 16px;\n          overflow: auto;\n        }\n\n        pre {\n          white-space: pre-wrap;\n        }\n      }\n\n      :global {\n        .detail {\n          background-color: var(--sui-primary-background-color);\n        }\n      }\n    }\n  }\n</style>\n","import { get } from 'svelte/store';\n\nimport { allAssets, focusedAsset, getAssetsByDirName, overlaidAsset } from '$lib/services/assets';\nimport { assetUpdatesToast } from '$lib/services/assets/data';\nimport { getAssetKind } from '$lib/services/assets/kinds';\nimport { backend } from '$lib/services/backends';\nimport { saveChanges } from '$lib/services/backends/save';\nimport { siteConfig } from '$lib/services/config';\nimport { UPDATE_TOAST_DEFAULT_STATE } from '$lib/services/contents/collection/data';\nimport { getDefaultMediaLibraryOptions } from '$lib/services/integrations/media-libraries/default';\nimport { formatFileName } from '$lib/services/utils/file';\n\n/**\n * @import { Asset, CommitAction, CommitOptions, UploadingAssets } from '$lib/types/private';\n */\n\n/**\n * Create a list of file objects to be uploaded, ensuring that names are unique and sanitized.\n * @param {UploadingAssets} uploadingAssets Assets to be uploaded.\n * @returns {{ action: CommitAction, name: string, path: string, file: File }[]} An array of objects\n * representing the files to be uploaded, each containing the action type, name, path, and file\n * object.\n */\nexport const createFileList = (uploadingAssets) => {\n  const { files, folder, originalAsset } = uploadingAssets;\n  const { slugify_filename: slugificationEnabled = false } = getDefaultMediaLibraryOptions().config;\n\n  const assetNamesInSameFolder =\n    folder?.internalPath !== undefined\n      ? getAssetsByDirName(folder.internalPath).map((a) => a.name.normalize())\n      : [];\n\n  return files.map((file) => {\n    const fileName =\n      originalAsset?.name ??\n      formatFileName(file.name, { slugificationEnabled, assetNamesInSameFolder });\n\n    if (!assetNamesInSameFolder.includes(fileName)) {\n      assetNamesInSameFolder.push(fileName);\n    }\n\n    return {\n      action: /** @type {CommitAction} */ (originalAsset ? 'update' : 'create'),\n      name: fileName,\n      path: originalAsset?.path ?? [folder?.internalPath, fileName].join('/'),\n      file,\n    };\n  });\n};\n\n/**\n * Update the asset stores with new assets, ensuring that focused and overlaid assets are refreshed,\n * and displays a toast notification about the asset updates.\n * @param {object} args Arguments.\n * @param {number} args.count The number of files that were updated.\n */\nexport const updatedStores = ({ count }) => {\n  const _focusedAsset = get(focusedAsset);\n  const _overlaidAsset = get(overlaidAsset);\n\n  // Replace the existing asset\n  if (_focusedAsset) {\n    focusedAsset.set(get(allAssets).find((a) => a.path === _focusedAsset.path));\n  }\n\n  // Replace the existing asset\n  if (_overlaidAsset) {\n    overlaidAsset.set(get(allAssets).find((a) => a.path === _overlaidAsset.path));\n  }\n\n  const autoDeployEnabled = get(siteConfig)?.backend.automatic_deployments;\n\n  assetUpdatesToast.set({\n    ...UPDATE_TOAST_DEFAULT_STATE,\n    saved: true,\n    published: !!get(backend)?.isGit && autoDeployEnabled === true,\n    count,\n  });\n};\n\n/**\n * Upload/save the given assets to the backend.\n * @param {UploadingAssets} uploadingAssets Assets to be uploaded.\n * @param {CommitOptions} options Options for the backend handler.\n */\nexport const saveAssets = async (uploadingAssets, options) => {\n  const { files, folder } = uploadingAssets;\n  const savingFileList = createFileList(uploadingAssets);\n\n  const savingAssets = savingFileList.map(\n    ({ name, path, file }) =>\n      /** @type {Asset} */ ({\n        name,\n        path,\n        size: file.size,\n        kind: getAssetKind(name),\n        folder,\n      }),\n  );\n\n  await saveChanges({\n    changes: savingFileList.map(({ action, path, file }) => ({ action, path, data: file })),\n    savingAssets,\n    options,\n  });\n\n  updatedStores({ count: files.length });\n};\n","<script>\n  import { Dialog, Switch, TextArea } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { editingAsset } from '$lib/services/assets';\n  import { saveAssets } from '$lib/services/assets/data/create';\n  import { getAssetBlob } from '$lib/services/assets/info';\n  import { showAssetOverlay } from '$lib/services/assets/view';\n\n  /**\n   * @import { Asset } from '$lib/types/private';\n   */\n\n  const asset = $derived($editingAsset);\n  let open = $state(false);\n  /** @type {Blob | undefined} */\n  let blob = $state();\n  /** @type {string | undefined} */\n  let originalValue = $state();\n  /** @type {string | undefined} */\n  let currentValue = $state();\n  /** @type {boolean | 'mixed'} */\n  let wrap = $state(false);\n\n  /**\n   * Initialize the state.\n   */\n  const initState = async () => {\n    blob = await getAssetBlob(/** @type {Asset} */ (asset));\n    originalValue = await blob.text();\n    currentValue = originalValue;\n    open = true;\n  };\n\n  /**\n   * Reset the state.\n   */\n  const resetState = () => {\n    $editingAsset = undefined;\n    blob = undefined;\n    originalValue = undefined;\n    currentValue = undefined;\n  };\n\n  /**\n   * Save the edited asset.\n   */\n  const saveAsset = async () => {\n    if (asset && blob && typeof currentValue === 'string') {\n      await saveAssets(\n        {\n          folder: asset.folder,\n          files: [new File([currentValue], asset.name, { type: blob.type })],\n          originalAsset: asset,\n        },\n        { commitType: 'uploadMedia' },\n      );\n    }\n  };\n\n  $effect(() => {\n    if (asset && blob === undefined) {\n      initState();\n    }\n  });\n\n  $effect(() => {\n    if (!$showAssetOverlay) {\n      open = false;\n    }\n  });\n</script>\n\n<Dialog\n  size=\"x-large\"\n  title={$_('edit_x', { values: { name: asset?.name } })}\n  bind:open\n  okLabel={$_('save')}\n  okDisabled={currentValue === originalValue}\n  okShortcuts=\"Accel+S\"\n  onOk={() => {\n    saveAsset();\n  }}\n  onClose={() => {\n    resetState();\n  }}\n>\n  <div role=\"none\" class=\"wrapper\" class:wrap>\n    <TextArea bind:value={currentValue} flex />\n  </div>\n  {#snippet footerExtra()}\n    <Switch label={$_('wrap_long_lines')} bind:checked={wrap} />\n  {/snippet}\n</Dialog>\n\n<style lang=\"scss\">\n  .wrapper {\n    display: contents;\n\n    :global {\n      textarea {\n        min-height: 40dvh;\n        max-height: 80dvh;\n        font-family: var(--sui-font-family-monospace);\n        font-size: var(--sui-font-size-monospace);\n        text-wrap: nowrap;\n        resize: vertical;\n      }\n\n      &.wrap textarea {\n        text-wrap: wrap;\n      }\n    }\n  }\n</style>\n","import { stripSlashes } from '@sveltia/utils/string';\n\nimport { fillTemplate } from '$lib/services/common/template';\nimport { getIndexFile } from '$lib/services/contents/collection/index-file';\nimport { getLocalePath } from '$lib/services/contents/i18n';\n\n/**\n * @import { EntryCollection, EntryDraft, InternalLocaleCode } from '$lib/types/private';\n */\n\n/**\n * Determine the file path for the given entry draft depending on the collection type, i18n config\n * and folder collections path.\n * @param {object} args Arguments.\n * @param {EntryDraft} args.draft Entry draft.\n * @param {InternalLocaleCode} args.locale Locale code.\n * @param {string} args.slug Entry slug.\n * @returns {string} Complete path, including the folder, slug, extension and possibly locale.\n * @see https://decapcms.org/docs/i18n/\n */\nexport const createEntryPath = ({ draft, locale, slug }) => {\n  const { collection, collectionFile, originalEntry, currentValues, isIndexFile } = draft;\n\n  const {\n    _i18n: { defaultLocale, structure, omitDefaultLocaleFromFileName },\n  } = collectionFile ?? collection;\n\n  if (collectionFile) {\n    const { _i18n, file } = collectionFile;\n\n    return getLocalePath({ _i18n, locale, path: stripSlashes(file) });\n  }\n\n  if (originalEntry?.locales[locale]?.slug === slug) {\n    return originalEntry.locales[locale].path;\n  }\n\n  const entryCollection = /** @type {EntryCollection} */ (collection);\n\n  const {\n    _file: { basePath, subPath, extension },\n  } = entryCollection;\n\n  /**\n   * Support folder collections path.\n   * @see https://decapcms.org/docs/collection-folder/#folder-collections-path\n   */\n  const path = isIndexFile\n    ? /** @type {string} */ (getIndexFile(entryCollection)?.name)\n    : subPath\n      ? fillTemplate(subPath, {\n          collection: entryCollection,\n          locale,\n          content: currentValues[defaultLocale],\n          currentSlug: slug,\n        })\n      : slug;\n\n  const pathOptions = {\n    multiple_folders: `${basePath}/${locale}/${path}.${extension}`,\n    multiple_folders_i18n_root: `${locale}/${basePath}/${path}.${extension}`,\n    multiple_files:\n      omitDefaultLocaleFromFileName && locale === defaultLocale\n        ? `${basePath}/${path}.${extension}`\n        : `${basePath}/${path}.${locale}.${extension}`,\n    single_file: `${basePath}/${path}.${extension}`,\n  };\n\n  return pathOptions[structure] ?? pathOptions.single_file;\n};\n","import { fillTemplate } from '$lib/services/common/template';\nimport { getIndexFile } from '$lib/services/contents/collection/index-file';\n\n/**\n * @import {\n * EntryCollection,\n * EntryDraft,\n * EntrySlugVariants,\n * FillTemplateOptions,\n * LocaleSlugMap,\n * } from '$lib/types/private';\n */\n\n/**\n * Get base options for {@link fillTemplate}.\n * @param {object} args Arguments.\n * @param {EntryDraft} args.draft Entry draft.\n * @returns {FillTemplateOptions} Options.\n */\nexport const getFillSlugOptions = ({ draft }) => {\n  const { collection, collectionFile, currentValues, isIndexFile } = draft;\n\n  const {\n    _i18n: { defaultLocale },\n  } = collectionFile ?? collection;\n\n  return {\n    // eslint-disable-next-line object-shorthand\n    collection: /** @type {EntryCollection} */ (collection),\n    content: currentValues[defaultLocale],\n    isIndexFile,\n  };\n};\n\n/**\n * Get the localized slug for the given locale.\n * @param {object} args Arguments.\n * @param {EntryDraft} args.draft Entry draft.\n * @param {string} args.locale Locale.\n * @param {string[]} args.localizingKeyPaths List of key paths that the value will be localized.\n * @returns {string} Localized slug.\n */\nconst getLocalizedSlug = ({ draft, locale, localizingKeyPaths }) => {\n  const { collection, collectionFile, currentSlugs, currentValues, isIndexFile } = draft;\n\n  const {\n    identifier_field: identifierField = 'title',\n    slug: slugTemplate = `{{${identifierField}}}`,\n  } = collection;\n\n  const {\n    _i18n: { defaultLocale },\n  } = collectionFile ?? collection;\n\n  return (\n    currentSlugs?.[locale] ??\n    currentSlugs?._ ??\n    fillTemplate(slugTemplate, {\n      collection,\n      locale,\n      content: {\n        // Merge the default locale content and localized content\n        ...currentValues[defaultLocale],\n        ...Object.fromEntries(\n          localizingKeyPaths.map((keyPath) => [keyPath, currentValues[locale]?.[keyPath]]),\n        ),\n      },\n      isIndexFile,\n    })\n  );\n};\n\n/**\n * Get the localized slug map. This only applies when the i18n structure is multiple files or\n * folders, and the slug template contains the `localize` flag, e.g. `{{title | localize}}`.\n * @param {object} args Arguments.\n * @param {EntryDraft} args.draft Entry draft.\n * @param {string} args.defaultLocaleSlug Default locale’s entry slug.\n * @returns {LocaleSlugMap | undefined} Localized slug map.\n */\nconst getLocalizedSlugs = ({ draft, defaultLocaleSlug }) => {\n  const { collection, collectionFile, currentLocales } = draft;\n\n  const {\n    identifier_field: identifierField = 'title',\n    slug: slugTemplate = `{{${identifierField}}}`,\n  } = collection;\n\n  const {\n    _i18n: {\n      defaultLocale,\n      structureMap: { i18nSingleFile },\n    },\n  } = collectionFile ?? collection;\n\n  /**\n   * List of key paths that the value will be localized.\n   */\n  const localizingKeyPaths = [...slugTemplate.matchAll(/{{(?:fields\\.)?(.+?)( \\| localize)?}}/g)]\n    .filter(([, , localize]) => !!localize)\n    .map(([, keyPath]) => keyPath);\n\n  if (i18nSingleFile || !localizingKeyPaths.length) {\n    return undefined;\n  }\n\n  return Object.fromEntries(\n    Object.entries(currentLocales).map(([locale]) => {\n      const slug =\n        locale === defaultLocale\n          ? defaultLocaleSlug\n          : getLocalizedSlug({ draft, locale, localizingKeyPaths });\n\n      return [locale, slug];\n    }),\n  );\n};\n\n/**\n * Get the canonical slug to be added to the content of each file when the slug is localized. It\n * helps Sveltia CMS and some frameworks to link localized files. The default property name is\n * `translationKey` used in Hugo’s multilingual support, and the default value is the default\n * locale’s slug.\n * @param {object} args Arguments.\n * @param {EntryDraft} args.draft Entry draft.\n * @param {string} args.defaultLocaleSlug Default locale’s entry slug.\n * @param {LocaleSlugMap | undefined} args.localizedSlugs Localized slug map.\n * @param {FillTemplateOptions} args.fillSlugOptions Arguments for {@link fillTemplate}.\n * @returns {string | undefined} Canonical slug.\n * @see https://github.com/sveltia/sveltia-cms#localizing-entry-slugs\n * @see https://gohugo.io/content-management/multilingual/#bypassing-default-linking\n */\nconst getCanonicalSlug = ({ draft, defaultLocaleSlug, localizedSlugs, fillSlugOptions }) => {\n  if (!localizedSlugs) {\n    return undefined;\n  }\n\n  const { collection, collectionFile } = draft;\n\n  const {\n    _i18n: {\n      canonicalSlug: { value: canonicalSlugTemplate },\n    },\n  } = collectionFile ?? collection;\n\n  if (canonicalSlugTemplate === '{{slug}}') {\n    return defaultLocaleSlug;\n  }\n\n  return fillTemplate(canonicalSlugTemplate, {\n    ...fillSlugOptions,\n    currentSlug: defaultLocaleSlug,\n  });\n};\n\n/**\n * Determine entry slugs.\n * @param {object} args Arguments.\n * @param {EntryDraft} args.draft Entry draft.\n * @returns {EntrySlugVariants} Slugs.\n */\nexport const getSlugs = ({ draft }) => {\n  const { collection, collectionFile, fileName, currentSlugs, isIndexFile } = draft;\n\n  const {\n    identifier_field: identifierField = 'title',\n    slug: slugTemplate = `{{${identifierField}}}`,\n  } = collection;\n\n  if (isIndexFile) {\n    return {\n      defaultLocaleSlug: /** @type {string} */ (getIndexFile(collection)?.name),\n      localizedSlugs: undefined,\n      canonicalSlug: undefined,\n    };\n  }\n\n  const {\n    _i18n: { defaultLocale },\n  } = collectionFile ?? collection;\n\n  const fillSlugOptions = getFillSlugOptions({ draft });\n\n  const defaultLocaleSlug =\n    fileName ??\n    currentSlugs?.[defaultLocale] ??\n    currentSlugs?._ ??\n    fillTemplate(slugTemplate, fillSlugOptions);\n\n  const localizedSlugs = getLocalizedSlugs({ draft, defaultLocaleSlug });\n\n  const canonicalSlug = getCanonicalSlug({\n    draft,\n    defaultLocaleSlug,\n    localizedSlugs,\n    fillSlugOptions,\n  });\n\n  return { defaultLocaleSlug, localizedSlugs, canonicalSlug };\n};\n","import { getAssetsByDirName } from '$lib/services/assets';\nimport { getAssetKind } from '$lib/services/assets/kinds';\nimport { fillTemplate } from '$lib/services/common/template';\nimport { createEntryPath } from '$lib/services/contents/draft/save/entry-path';\nimport { getFillSlugOptions } from '$lib/services/contents/draft/slugs';\nimport {\n  createPath,\n  encodeFilePath,\n  formatFileName,\n  getGitHash,\n  resolvePath,\n} from '$lib/services/utils/file';\n\n/**\n * @import {\n * Asset,\n * AssetFolderInfo,\n * EntryCollection,\n * EntryDraft,\n * FileChange,\n * FillTemplateOptions,\n * FlattenedEntryContent,\n * } from '$lib/types/private';\n * @import { FieldKeyPath } from '$lib/types/public';\n */\n\n/**\n * Resolved paths for entry assets.\n * @typedef {object} ResolvedAssetFolderPaths\n * @property {string} resolvedInternalPath Resolved `internalPath` with any template tags replaced.\n * May contain a sub path when assets are entry-relative.\n * @property {string} resolvedPublicPath Resolved `publicPath` with any template tags replaced.\n */\n\n/**\n * Properties for a saving asset.\n * @typedef {object} SavingAsset\n * @property {string} collectionName Collection name.\n * @property {string} [text] Raw text for a plaintext file, like HTML or Markdown.\n * @property {AssetFolderInfo} folder Folder info.\n */\n\n/**\n * Get the internal/public asset path configuration for the entry assets.\n * @param {object} args Arguments.\n * @param {AssetFolderInfo} args.folder Asset folder associated with a new file.\n * @param {FillTemplateOptions} args.fillSlugOptions Arguments for {@link fillTemplate}.\n * @returns {ResolvedAssetFolderPaths} Determined paths.\n */\nexport const resolveAssetFolderPaths = ({ folder, fillSlugOptions }) => {\n  const { entryRelative, internalPath, publicPath } = folder;\n\n  if (internalPath === undefined || publicPath === undefined) {\n    // This shouldn’t happen, but avoids type errors in the following code\n    return { resolvedInternalPath: '', resolvedPublicPath: '' };\n  }\n\n  if (!entryRelative) {\n    return {\n      resolvedInternalPath: fillTemplate(internalPath, fillSlugOptions),\n      resolvedPublicPath: fillTemplate(publicPath, fillSlugOptions),\n    };\n  }\n\n  const { collection } = fillSlugOptions;\n\n  const isMultiFolders = ['multiple_folders', 'multiple_folders_i18n_root'].includes(\n    collection._i18n.structure,\n  );\n\n  const subPath =\n    collection._type === 'entry'\n      ? /** @type {EntryCollection} */ (collection)._file.subPath\n      : undefined;\n\n  const subPathFirstPart = subPath?.match(/(?<path>.+?)(?:\\/[^/]+)?$/)?.groups?.path ?? '';\n\n  const resolvedInternalPath = resolvePath(\n    fillTemplate(\n      createPath([\n        internalPath,\n        isMultiFolders || subPath?.includes('/') ? subPathFirstPart : undefined,\n      ]),\n      fillSlugOptions,\n    ),\n  );\n\n  const resolvedPublicPath =\n    !isMultiFolders && /^\\.?$/.test(publicPath)\n      ? // Dot-only public path is a special case; the final path stored as the field value will\n        // be `./image.png` rather than `image.png`\n        publicPath\n      : resolvePath(\n          fillTemplate(\n            isMultiFolders\n              ? // When multiple folders are used for i18n, the file structure would look like\n                // `{collection}/{locale}/{slug}.md` or `{collection}/{locale}/{slug}/index.md`\n                // and the asset path would be `{collection}/{slug}/{file}.jpg`\n                createPath([\n                  ...Array((subPath?.match(/\\//g) ?? []).length + 1).fill('..'),\n                  publicPath,\n                  subPathFirstPart,\n                ])\n              : publicPath,\n            fillSlugOptions,\n          ),\n        );\n\n  return { resolvedInternalPath, resolvedPublicPath };\n};\n\n/**\n * Get the information required to save an asset.\n * @param {object} args Arguments.\n * @param {EntryDraft} args.draft Entry draft.\n * @param {string} args.defaultLocaleSlug Default locale’s entry slug.\n * @param {AssetFolderInfo} args.folder Asset folder associated with a new file.\n * @returns {{ assetFolderPaths: ResolvedAssetFolderPaths, assetNamesInSameFolder: string[],\n * savingAssetProps: SavingAsset }} Arguments.\n */\nconst getAssetSavingInfo = ({ draft, defaultLocaleSlug, folder }) => {\n  const { collection, collectionName, collectionFile, isIndexFile } = draft;\n\n  const {\n    _i18n: { defaultLocale },\n  } = collectionFile ?? collection;\n\n  const assetFolderPaths = resolveAssetFolderPaths({\n    folder,\n    fillSlugOptions: {\n      ...getFillSlugOptions({ draft }),\n      type: 'media_folder',\n      currentSlug: defaultLocaleSlug,\n      entryFilePath: createEntryPath({ draft, locale: defaultLocale, slug: defaultLocaleSlug }),\n      isIndexFile,\n    },\n  });\n\n  const { resolvedInternalPath } = assetFolderPaths;\n\n  return {\n    assetFolderPaths,\n    assetNamesInSameFolder: getAssetsByDirName(resolvedInternalPath).map((a) => a.name.normalize()),\n    savingAssetProps: { collectionName, folder },\n  };\n};\n\n/**\n * Replace a blob URL with the final path, and add the file to the changeset.\n * @param {object} args Arguments.\n * @param {File} args.file Raw file.\n * @param {AssetFolderInfo} args.folder Asset folder associated with the new file.\n * @param {string} args.blobURL Blob URL of the file.\n * @param {EntryDraft} args.draft Entry draft.\n * @param {string} args.defaultLocaleSlug Default locale’s entry slug.\n * @param {FieldKeyPath} args.keyPath Field key path.\n * @param {FlattenedEntryContent} args.content Localized content.\n * @param {FileChange[]} args.changes Changeset.\n * @param {Asset[]} args.savingAssets List of assets to be saved.\n * @param {boolean} args.slugificationEnabled Whether the file name slugification is enabled.\n * @param {boolean} args.encodingEnabled Whether the file path encoding is enabled.\n */\nexport const replaceBlobURL = async ({\n  file,\n  folder,\n  blobURL,\n  draft,\n  defaultLocaleSlug,\n  keyPath,\n  content,\n  changes,\n  savingAssets,\n  slugificationEnabled,\n  encodingEnabled,\n}) => {\n  const sha = await getGitHash(file);\n  const dupFile = savingAssets.find((f) => f.sha === sha);\n\n  const {\n    savingAssetProps,\n    assetNamesInSameFolder,\n    assetFolderPaths: { resolvedInternalPath, resolvedPublicPath },\n  } = getAssetSavingInfo({ draft, defaultLocaleSlug, folder });\n\n  let fileName = '';\n\n  // Check if the file has already been added for other field or locale\n  if (dupFile) {\n    fileName = dupFile.name;\n  } else {\n    fileName = formatFileName(file.name, { slugificationEnabled, assetNamesInSameFolder });\n\n    const assetPath = resolvedInternalPath ? `${resolvedInternalPath}/${fileName}` : fileName;\n\n    assetNamesInSameFolder.push(fileName);\n    changes.push({ action: 'create', path: assetPath, data: file });\n\n    savingAssets.push({\n      ...savingAssetProps,\n      blobURL,\n      name: fileName,\n      path: assetPath,\n      sha,\n      size: file.size,\n      kind: getAssetKind(fileName),\n    });\n  }\n\n  let publicURL = resolvedPublicPath\n    ? `${resolvedPublicPath === '/' ? '' : resolvedPublicPath}/${fileName}`\n    : fileName;\n\n  if (encodingEnabled) {\n    publicURL = encodeFilePath(publicURL);\n  }\n\n  content[keyPath] = /** @type {string} */ (content[keyPath]).replaceAll(blobURL, publicURL);\n};\n","import { MULTI_VALUE_WIDGETS } from '$lib/services/contents/widgets';\n\n/**\n * @import {\n * Field,\n * FieldKeyPath,\n * ListField,\n * MultiValueField,\n * ObjectField,\n * } from '$lib/types/public';\n */\n\n/**\n * Parse a field to generate a sorted key path list.\n * @param {object} args Arguments.\n * @param {Field} args.field Single field.\n * @param {FieldKeyPath} args.keyPath Key path of the field.\n * @param {FieldKeyPath[]} args.keyPathList Key path list.\n */\nconst parseField = ({ field, keyPath, keyPathList }) => {\n  const { widget } = field;\n  const isList = widget === 'list';\n\n  keyPathList.push(keyPath);\n\n  if (isList || widget === 'object') {\n    const {\n      fields: subFields,\n      types,\n      typeKey = 'type',\n    } = /** @type {ListField | ObjectField} */ (field);\n\n    if (subFields) {\n      subFields.forEach((subField) => {\n        parseField({\n          field: subField,\n          keyPath: isList ? `${keyPath}.*.${subField.name}` : `${keyPath}.${subField.name}`,\n          keyPathList,\n        });\n      });\n    } else if (types) {\n      keyPathList.push(isList ? `${keyPath}.*.${typeKey}` : `${keyPath}.${typeKey}`);\n\n      types.forEach((type) => {\n        type.fields?.forEach((subField) => {\n          parseField({\n            field: subField,\n            keyPath: isList ? `${keyPath}.*.${subField.name}` : `${keyPath}.${subField.name}`,\n            keyPathList,\n          });\n        });\n      });\n    } else if (isList) {\n      const { field: subField } = /** @type {ListField} */ (field);\n\n      if (subField) {\n        parseField({\n          field: subField,\n          keyPath: `${keyPath}.*`,\n          keyPathList,\n        });\n      } else {\n        keyPathList.push(`${keyPath}.*`);\n      }\n    }\n  }\n\n  if (widget && MULTI_VALUE_WIDGETS.includes(widget)) {\n    const { multiple = false } = /** @type {MultiValueField} */ (field);\n\n    keyPathList.push(multiple ? `${keyPath}.*` : keyPath);\n  }\n};\n\n/**\n * Create a list of field names (flattened key path list) from the configured collection fields.\n * @param {Field[]} fields Field list of a collection or a file.\n * @returns {FieldKeyPath[]} Sorted key path list. List items are with `*`.\n * @example [`author.name`, `books.*.title`, `books.*.summary`, `publishDate`, `body`]\n */\nexport const createKeyPathList = (fields) => {\n  /** @type {FieldKeyPath[]} */\n  const keyPathList = [];\n\n  // Iterate over the top-level fields first\n  fields.forEach((field) => {\n    parseField({\n      field,\n      keyPath: field.name,\n      keyPathList,\n    });\n  });\n\n  return keyPathList;\n};\n","import { isObject, toRaw } from '@sveltia/utils/object';\nimport { compare, escapeRegExp } from '@sveltia/utils/string';\nimport { unflatten } from 'flat';\nimport { TomlDate } from 'smol-toml';\nimport { get } from 'svelte/store';\n\nimport { siteConfig } from '$lib/services/config';\nimport { createKeyPathList } from '$lib/services/contents/draft/save/key-path';\nimport { getField, isFieldRequired } from '$lib/services/contents/entry/fields';\nimport { parseDateTimeConfig } from '$lib/services/contents/widgets/date-time/helper';\nimport { hasRootListField } from '$lib/services/contents/widgets/list/helper';\nimport { FULL_DATE_TIME_REGEX } from '$lib/services/utils/date';\n\n/**\n * @import {\n * EntryCollection,\n * EntryDraft,\n * FlattenedEntryContent,\n * InternalLocaleCode,\n * RawEntryContent,\n * } from '$lib/types/private';\n * @import { DateTimeField, Field } from '$lib/types/public';\n */\n\n/**\n * Move a property name/value from a unsorted property map to a sorted property map.\n * @param {object} args Arguments.\n * @param {string} args.key Property name.\n * @param {Field} [args.field] Associated field.\n * @param {InternalLocaleCode} args.locale Locale code.\n * @param {FlattenedEntryContent} args.unsortedMap Unsorted property map.\n * @param {FlattenedEntryContent} args.sortedMap Sorted property map.\n * @param {boolean} args.isTomlOutput Whether the output it TOML format.\n * @param {boolean} args.omitEmptyOptionalFields Whether to prevent fields with `required: false`\n * and an empty value from being included in the data output.\n */\nexport const copyProperty = ({\n  key,\n  field,\n  locale,\n  unsortedMap,\n  sortedMap,\n  isTomlOutput,\n  omitEmptyOptionalFields,\n}) => {\n  // Skip internal UUIDs added to list items\n  if (key.endsWith('.__sc_item_id')) {\n    delete unsortedMap[key];\n    return;\n  }\n\n  let value = unsortedMap[key];\n\n  // Use native date for TOML if a custom format is not defined\n  // @see https://github.com/squirrelchat/smol-toml?tab=readme-ov-file#dates\n  // @see https://toml.io/en/v1.0.0#offset-date-time\n  if (\n    isTomlOutput &&\n    typeof value === 'string' &&\n    FULL_DATE_TIME_REGEX.test(value) &&\n    field?.widget === 'datetime' &&\n    !parseDateTimeConfig(/** @type {DateTimeField} */ (field)).format\n  ) {\n    try {\n      value = new TomlDate(value);\n    } catch {\n      //\n    }\n  }\n\n  if (\n    omitEmptyOptionalFields &&\n    field &&\n    !isFieldRequired({ fieldConfig: field, locale }) &&\n    !Object.keys(unsortedMap).some((_key) => _key.startsWith(`${key}.`)) &&\n    (!value ||\n      (Array.isArray(value) && !value.length) ||\n      (isObject(value) && !Object.keys(value).length))\n  ) {\n    // Omit the empty value\n  } else {\n    sortedMap[key] = value;\n  }\n\n  delete unsortedMap[key];\n};\n\n/**\n * Finalize the content by sorting the entry draft content’s object properties by the order of the\n * configured collection fields. The result can be formatted as expected with `JSON.stringify()`, as\n * the built-in method uses insertion order for string key ordering.\n * @param {object} args Arguments.\n * @param {string} args.collectionName Collection name.\n * @param {string} [args.fileName] Collection file name. File/singleton collection only.\n * @param {Field[]} args.fields Field list of a collection or a file.\n * @param {InternalLocaleCode} args.locale Locale code.\n * @param {FlattenedEntryContent} args.valueMap Flattened entry content.\n * @param {string} [args.canonicalSlugKey] Property name of a canonical slug.\n * @param {boolean} [args.isIndexFile] Whether the corresponding entry is the collection’s special\n * index file used specifically in Hugo.\n * @param {boolean} [args.isTomlOutput] Whether the output it TOML format.\n * @returns {RawEntryContent} Unflattened entry content sorted by fields.\n */\nconst finalizeContent = ({\n  collectionName,\n  fileName,\n  fields,\n  locale,\n  valueMap,\n  canonicalSlugKey,\n  isIndexFile = false,\n  isTomlOutput = false,\n}) => {\n  /** @type {FlattenedEntryContent} */\n  const unsortedMap = toRaw(valueMap);\n  /** @type {FlattenedEntryContent} */\n  const sortedMap = {};\n\n  const { omit_empty_optional_fields: omitEmptyOptionalFields = false } =\n    get(siteConfig)?.output ?? {};\n\n  const getFieldArgs = { collectionName, fileName, valueMap, isIndexFile };\n  const copyArgs = { locale, unsortedMap, sortedMap, isTomlOutput, omitEmptyOptionalFields };\n\n  // Add the slug first\n  if (canonicalSlugKey && canonicalSlugKey in unsortedMap) {\n    copyProperty({ ...copyArgs, key: canonicalSlugKey });\n  }\n\n  // Move the listed properties to a new object\n  createKeyPathList(fields).forEach((keyPath) => {\n    const field = getField({ ...getFieldArgs, keyPath });\n\n    if (keyPath in unsortedMap) {\n      copyProperty({ ...copyArgs, key: keyPath, field });\n    } else if (field?.widget === 'keyvalue') {\n      // Work around a bug in the flat library where numeric property keys used for KeyValue fields\n      // trigger a wrong conversion to an array instead of an object\n      // @see https://github.com/hughsk/flat/issues/103\n      sortedMap[keyPath] = {};\n\n      // Copy key-value pairs\n      Object.entries(unsortedMap)\n        .filter(([_keyPath]) => _keyPath.startsWith(`${keyPath}.`))\n        .forEach(([_keyPath]) => {\n          copyProperty({ ...copyArgs, key: _keyPath, field });\n        });\n    } else {\n      const regex = new RegExp(\n        `^${escapeRegExp(keyPath.replaceAll('*', '\\\\d+')).replaceAll('\\\\\\\\d\\\\+', '\\\\d+')}$`,\n      );\n\n      Object.keys(unsortedMap)\n        .filter((_keyPath) => regex.test(_keyPath))\n        .sort(([a, b]) => compare(a, b))\n        .forEach((_keyPath) => {\n          copyProperty({ ...copyArgs, key: _keyPath, field });\n        });\n    }\n  });\n\n  // Move the remainder, if any, to a new object\n  Object.keys(unsortedMap)\n    .sort(([a, b]) => compare(a, b))\n    .forEach((key) => {\n      copyProperty({ ...copyArgs, key });\n    });\n\n  return unflatten(sortedMap);\n};\n\n/**\n * Serialize the content for the output.\n * @param {object} args Arguments.\n * @param {EntryDraft} args.draft Entry draft.\n * @param {InternalLocaleCode} args.locale Locale code.\n * @param {FlattenedEntryContent} args.valueMap Original content.\n * @returns {RawEntryContent} Modified and unflattened content.\n */\nexport const serializeContent = ({ draft, locale, valueMap }) => {\n  const { collection, collectionName, collectionFile, fields, isIndexFile } = draft;\n\n  const {\n    _file,\n    _i18n: {\n      canonicalSlug: { key: canonicalSlugKey },\n    },\n  } = collectionFile ?? /** @type {EntryCollection} */ (collection);\n\n  const content = finalizeContent({\n    collectionName,\n    fileName: collectionFile?.name,\n    fields,\n    locale,\n    valueMap,\n    canonicalSlugKey,\n    isIndexFile,\n    isTomlOutput: ['toml', 'toml-frontmatter'].includes(_file.format),\n  });\n\n  // Handle a special case: top-level list field\n  if (hasRootListField(fields)) {\n    return content[fields[0].name] ?? [];\n  }\n\n  return content;\n};\n","import * as TOML from 'smol-toml';\nimport { get } from 'svelte/store';\nimport YAML from 'yaml';\n\nimport { siteConfig } from '$lib/services/config';\nimport { customFileFormats } from '$lib/services/contents/file/config';\n\n/**\n * @import { FileConfig, InternalLocaleCode, RawEntryContent } from '$lib/types/private';\n * @import { JsonFormatOptions, YamlFormatOptions } from '$lib/types/public';\n */\n\n/**\n * Format the given object as a JSON document using the built-in method.\n * @param {Record<string, any>} obj Object to be formatted.\n * @param {JsonFormatOptions} [options] Options.\n * @returns {string} Formatted document.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify\n */\nexport const formatJSON = (obj, options = get(siteConfig)?.output?.json ?? {}) => {\n  const {\n    indent_style: indentStyle = 'space',\n    indent_size: indentSize = indentStyle === 'tab' ? 1 : 2,\n  } = options;\n\n  return JSON.stringify(\n    obj,\n    null,\n    indentStyle === 'tab' ? '\\t'.repeat(indentSize) : indentSize,\n  ).trim();\n};\n\n/**\n * Format the given object as a TOML document using a library.\n * @param {Record<string, any>} obj Object to be formatted.\n * @returns {string} Formatted document.\n * @see https://github.com/squirrelchat/smol-toml\n */\nexport const formatTOML = (obj) => TOML.stringify(obj).trim();\n\n/**\n * Format the given object as a YAML document using a library.\n * @param {Record<string, any>} obj Object to be formatted.\n * @param {YamlFormatOptions} [options] Options.\n * @param {object} [legacyOptions] Deprecated collection-level options.\n * @param {boolean} [legacyOptions.quote] Quote option.\n * @returns {string} Formatted document.\n * @see https://eemeli.org/yaml/#tostring-options\n * @todo Remove `legacyOptions` prior to the 1.0 release.\n */\nexport const formatYAML = (\n  obj,\n  options = get(siteConfig)?.output?.yaml ?? {},\n  legacyOptions = {},\n) => {\n  const { indent_size: indent = 2, quote = 'none' } = options;\n  const { quote: legacyQuote = false } = legacyOptions;\n\n  return YAML.stringify(obj, null, {\n    indent,\n    lineWidth: 0,\n    defaultKeyType: 'PLAIN',\n    defaultStringType:\n      legacyQuote || quote === 'double'\n        ? 'QUOTE_DOUBLE'\n        : quote === 'single'\n          ? 'QUOTE_SINGLE'\n          : 'PLAIN',\n    singleQuote: !(legacyQuote || quote === 'double'),\n  }).trim();\n};\n\n/**\n * Format front matter for the given entry content.\n * @param {object} args Arguments.\n * @param {RawEntryContent} args.content Entry content.\n * @param {FileConfig} args._file File configuration.\n * @returns {string} Formatted front matter.\n */\nexport const formatFrontMatter = ({ content, _file }) => {\n  const { format, fmDelimiters, yamlQuote = false } = _file;\n  const [sd, ed] = fmDelimiters ?? ['---', '---'];\n  const body = typeof content.body === 'string' ? content.body : '';\n\n  delete content.body;\n\n  // Support Markdown without a front matter block, particularly for VitePress\n  if (!Object.keys(content).length) {\n    return `${body}\\n`;\n  }\n\n  try {\n    if (format === 'frontmatter' || format === 'yaml-frontmatter') {\n      return `${sd}\\n${formatYAML(content, undefined, { quote: yamlQuote })}\\n${ed}\\n${body}\\n`;\n    }\n\n    if (format === 'toml-frontmatter') {\n      return `${sd}\\n${formatTOML(content)}\\n${ed}\\n${body}\\n`;\n    }\n\n    if (format === 'json-frontmatter') {\n      return `${sd}\\n${formatJSON(content)}\\n${ed}\\n${body}\\n`;\n    }\n  } catch (ex) {\n    // eslint-disable-next-line no-console\n    console.error(ex);\n  }\n\n  return '';\n};\n\n/**\n * Format raw entry content.\n * @param {object} entry File entry.\n * @param {RawEntryContent | Record<InternalLocaleCode, RawEntryContent>} entry.content Content\n * object. Note that this method may modify the `content` (the `body` property will be removed if\n * exists) so it shouldn’t be a reference to an existing object.\n * @param {FileConfig} entry._file Entry file configuration.\n * @returns {Promise<string>} Formatted string.\n */\nexport const formatEntryFile = async ({ content, _file }) => {\n  const { format, yamlQuote = false } = _file;\n  const customFormatter = customFileFormats[format]?.formatter;\n\n  if (customFormatter) {\n    return `${(await customFormatter(content)).trim()}\\n`;\n  }\n\n  try {\n    if (/^ya?ml$/.test(format)) {\n      return `${formatYAML(content, undefined, { quote: yamlQuote })}\\n`;\n    }\n\n    if (format === 'toml') {\n      return `${formatTOML(content)}\\n`;\n    }\n\n    if (format === 'json') {\n      return `${formatJSON(content)}\\n`;\n    }\n  } catch (ex) {\n    // eslint-disable-next-line no-console\n    console.error(ex);\n\n    return '';\n  }\n\n  if (/^(?:(?:yaml|toml|json)-)?frontmatter$/.test(format)) {\n    return formatFrontMatter({ content, _file });\n  }\n\n  return '';\n};\n","import { generateUUID } from '@sveltia/utils/crypto';\nimport { getBlobRegex } from '@sveltia/utils/file';\nimport { toRaw } from '@sveltia/utils/object';\nimport { IndexedDB } from '@sveltia/utils/storage';\nimport { get } from 'svelte/store';\n\nimport { globalAssetFolder } from '$lib/services/assets/folders';\nimport { backend } from '$lib/services/backends';\nimport { siteConfig } from '$lib/services/config';\nimport { replaceBlobURL } from '$lib/services/contents/draft/save/assets';\nimport { createEntryPath } from '$lib/services/contents/draft/save/entry-path';\nimport { serializeContent } from '$lib/services/contents/draft/save/serialize';\nimport { formatEntryFile } from '$lib/services/contents/file/format';\nimport { getDefaultMediaLibraryOptions } from '$lib/services/integrations/media-libraries/default';\n\n/**\n * @import {\n * Asset,\n * Entry,\n * EntryCollection,\n * EntryDraft,\n * EntrySlugVariants,\n * FileChange,\n * InternalLocaleCode,\n * LocalizedEntryMap,\n * RepositoryFileInfo,\n * } from '$lib/types/private';\n */\n\n/**\n * Create base saving entry data.\n * @param {object} args Arguments.\n * @param {EntryDraft} args.draft Entry draft.\n * @param {EntrySlugVariants} args.slugs Entry slugs.\n * @returns {Promise<{ localizedEntryMap: LocalizedEntryMap, changes: FileChange[], savingAssets:\n * Asset[] }>} Localized entry map, file changeset and asset list.\n */\nconst createBaseSavingEntryData = async ({\n  draft,\n  slugs: { defaultLocaleSlug, canonicalSlug, localizedSlugs },\n}) => {\n  const _globalAssetFolder = get(globalAssetFolder);\n  const { collection, currentLocales, collectionFile, currentValues, files } = draft;\n\n  const {\n    _i18n: {\n      canonicalSlug: { key: canonicalSlugKey },\n    },\n  } = collectionFile ?? collection;\n\n  /** @type {FileChange[]} */\n  const changes = [];\n  /** @type {Asset[]} */\n  const savingAssets = [];\n  const { slugify_filename: slugificationEnabled = false } = getDefaultMediaLibraryOptions().config;\n  const { encode_file_path: encodingEnabled = false } = get(siteConfig)?.output ?? {};\n\n  const replaceBlobBaseArgs = {\n    draft,\n    defaultLocaleSlug,\n    changes,\n    savingAssets,\n    slugificationEnabled,\n    encodingEnabled,\n  };\n\n  const localizedEntryMap = Object.fromEntries(\n    await Promise.all(\n      Object.entries(currentValues).map(async ([locale, content]) => {\n        const localizedSlug = localizedSlugs?.[locale];\n        const slug = localizedSlug ?? defaultLocaleSlug;\n        const path = createEntryPath({ draft, locale, slug });\n\n        if (!currentLocales[locale]) {\n          return [locale, { path }];\n        }\n\n        // Add the canonical slug\n        content[canonicalSlugKey] = canonicalSlug;\n\n        // Normalize data\n        await Promise.all(\n          Object.entries(content).map(async ([keyPath, value]) => {\n            if (value === undefined) {\n              delete content[keyPath];\n\n              return;\n            }\n\n            if (typeof value !== 'string') {\n              return;\n            }\n\n            // Remove leading & trailing whitespace\n            content[keyPath] = value.trim();\n\n            const matches = [...value.matchAll(getBlobRegex('g'))];\n\n            if (!matches.length) {\n              return;\n            }\n\n            const replaceBlobArgs = { ...replaceBlobBaseArgs, keyPath, content };\n\n            // Replace blob URLs in File/Image fields with asset paths\n            await Promise.all(\n              matches.map(async ([blobURL]) => {\n                const { file, folder = _globalAssetFolder } = files[blobURL] ?? {};\n\n                if (file) {\n                  await replaceBlobURL({ ...replaceBlobArgs, file, folder, blobURL });\n                }\n              }),\n            );\n          }),\n        );\n\n        return [locale, { slug, path, content: toRaw(content) }];\n      }),\n    ),\n  );\n\n  return { localizedEntryMap, changes, savingAssets };\n};\n\n/**\n * Get the previous SHA of the file from the cache database.\n * @param {object} args Arguments.\n * @param {string | undefined} args.previousPath Previous file path.\n * @param {IndexedDB | undefined} args.cacheDB Cache database for file info.\n * @returns {Promise<string | undefined>} Previous SHA or `undefined` if not found.\n */\nconst getPreviousSha = async ({ previousPath, cacheDB }) => {\n  if (!previousPath) {\n    return undefined;\n  }\n\n  const cache = /** @type {RepositoryFileInfo | undefined} */ (await cacheDB?.get(previousPath));\n\n  return cache?.sha;\n};\n\n/**\n * Get file change information for the entry draft, specifically for a single-file entry.\n * @param {object} args Arguments.\n * @param {EntryDraft} args.draft Entry draft.\n * @param {Entry} args.savingEntry Entry to be saved.\n * @param {IndexedDB | undefined} args.cacheDB Cache database for file info.\n * @returns {Promise<FileChange>} File change information.\n */\nconst getSingleFileChange = async ({ draft, savingEntry, cacheDB }) => {\n  const { collection, isNew, originalSlugs, originalEntry, collectionFile } = draft;\n\n  const {\n    _file,\n    _i18n: { i18nEnabled, defaultLocale },\n  } = collectionFile ?? /** @type {EntryCollection} */ (collection);\n\n  const { slug, path, content } = savingEntry.locales[defaultLocale];\n  const renamed = !isNew && (originalSlugs?.[defaultLocale] ?? originalSlugs?._) !== slug;\n  const previousPath = originalEntry?.locales[defaultLocale]?.path;\n\n  return {\n    action: isNew ? 'create' : renamed ? 'move' : 'update',\n    slug,\n    path,\n    previousPath: renamed ? previousPath : undefined,\n    previousSha: await getPreviousSha({ cacheDB, previousPath }),\n    data: await formatEntryFile({\n      content: i18nEnabled\n        ? Object.fromEntries(\n            Object.entries(savingEntry.locales)\n              .filter(([, le]) => !!le.content)\n              .map(([locale, le]) => [\n                locale,\n                serializeContent({ draft, locale, valueMap: le.content }),\n              ]),\n          )\n        : serializeContent({ draft, locale: '_default', valueMap: content }),\n      _file,\n    }),\n  };\n};\n\n/**\n * Get file change information for the entry draft, specifically for a multi-file entry.\n * @param {object} args Arguments.\n * @param {EntryDraft} args.draft Entry draft.\n * @param {Entry} args.savingEntry Entry to be saved.\n * @param {IndexedDB | undefined} args.cacheDB Cache database for file info.\n * @param {InternalLocaleCode} args.locale Locale code.\n * @returns {Promise<FileChange | undefined>} File change information.\n */\nconst getMultiFileChange = async ({ draft, savingEntry, cacheDB, locale }) => {\n  const {\n    collection,\n    isNew,\n    originalLocales,\n    currentLocales,\n    originalSlugs,\n    originalEntry,\n    collectionFile,\n  } = draft;\n\n  const { _file } = collectionFile ?? /** @type {EntryCollection} */ (collection);\n  const { slug, path, content } = savingEntry.locales[locale] ?? {};\n  const previousPath = originalEntry?.locales[locale]?.path;\n  const previousSha = await getPreviousSha({ cacheDB, previousPath });\n\n  if (currentLocales[locale]) {\n    const renamed =\n      !isNew && originalLocales[locale] && (originalSlugs?.[locale] ?? originalSlugs?._) !== slug;\n\n    return {\n      action: isNew || !originalLocales[locale] ? 'create' : renamed ? 'move' : 'update',\n      slug,\n      path,\n      previousPath: renamed ? previousPath : undefined,\n      previousSha,\n      data: await formatEntryFile({\n        content: serializeContent({ draft, locale, valueMap: content }),\n        _file,\n      }),\n    };\n  }\n\n  if (!isNew && originalLocales[locale]) {\n    return {\n      action: 'delete',\n      slug,\n      path,\n      previousSha,\n    };\n  }\n\n  return undefined;\n};\n\n/**\n * Create saving entry data.\n * @param {object} args Arguments.\n * @param {EntryDraft} args.draft Entry draft.\n * @param {EntrySlugVariants} args.slugs Entry slugs.\n * @returns {Promise<{ savingEntry: Entry, savingAssets: Asset[], changes: FileChange[] }>} Saving\n * entry, assets and file changes.\n */\nexport const createSavingEntryData = async ({ draft, slugs }) => {\n  const { collection, originalEntry, collectionFile } = draft;\n  const { defaultLocaleSlug } = slugs;\n\n  const {\n    _file,\n    _i18n: {\n      i18nEnabled,\n      allLocales,\n      defaultLocale,\n      structureMap: { i18nSingleFile },\n    },\n  } = collectionFile ?? /** @type {EntryCollection} */ (collection);\n\n  const { localizedEntryMap, changes, savingAssets } = await createBaseSavingEntryData({\n    draft,\n    slugs,\n  });\n\n  /** @type {Entry} */\n  const savingEntry = {\n    id: originalEntry?.id ?? generateUUID(),\n    slug: defaultLocaleSlug,\n    subPath: _file.fullPathRegEx\n      ? (localizedEntryMap[defaultLocale].path.match(_file.fullPathRegEx)?.groups?.subPath ??\n        defaultLocaleSlug)\n      : defaultLocaleSlug,\n    locales: Object.fromEntries(Object.entries(localizedEntryMap)),\n  };\n\n  const databaseName = get(backend)?.repository?.databaseName;\n  const cacheDB = databaseName ? new IndexedDB(databaseName, 'file-cache') : undefined;\n  const getFileChangeArgs = { draft, savingEntry, cacheDB };\n\n  if (!i18nEnabled || i18nSingleFile) {\n    changes.push(await getSingleFileChange({ ...getFileChangeArgs }));\n  } else {\n    await Promise.all(\n      allLocales.map(async (locale) => {\n        const change = await getMultiFileChange({ ...getFileChangeArgs, locale });\n\n        if (change) {\n          changes.push(change);\n        }\n      }),\n    );\n  }\n\n  return { savingEntry, savingAssets, changes };\n};\n","import { getPathInfo } from '@sveltia/utils/file';\nimport { get } from 'svelte/store';\n\nimport { allAssets, focusedAsset, overlaidAsset } from '$lib/services/assets';\nimport { assetUpdatesToast } from '$lib/services/assets/data';\nimport { getAssetFoldersByPath, globalAssetFolder } from '$lib/services/assets/folders';\nimport { getAssetBlob, getAssetPublicURL } from '$lib/services/assets/info';\nimport { saveChanges } from '$lib/services/backends/save';\nimport { siteConfig } from '$lib/services/config';\nimport { UPDATE_TOAST_DEFAULT_STATE } from '$lib/services/contents/collection/data';\nimport { getEntriesByAssetURL } from '$lib/services/contents/collection/entries';\nimport { getCollectionFilesByEntry } from '$lib/services/contents/collection/files';\nimport { getIndexFile, isCollectionIndexFile } from '$lib/services/contents/collection/index-file';\nimport { createSavingEntryData } from '$lib/services/contents/draft/save/changes';\nimport { getSlugs } from '$lib/services/contents/draft/slugs';\nimport { getAssociatedCollections } from '$lib/services/contents/entry';\n\n/**\n * @import {\n * Asset,\n * AssetFolderInfo,\n * Entry,\n * EntryDraft,\n * FileChange,\n * InternalSiteConfig,\n * MovingAsset,\n * } from '$lib/types/private';\n * @import { CollectionIndexFile } from '$lib/types/public';\n */\n\n/**\n * Get base properties for the entry draft.\n * @param {object} args Arguments.\n * @param {Entry} args.entry Entry to get base properties for.\n * @returns {Partial<EntryDraft>} Base properties for the entry draft.\n */\nexport const getDraftBaseProps = ({ entry }) => {\n  const { locales } = entry;\n\n  const originalLocales = Object.fromEntries(\n    Object.entries(locales).map(([locale]) => [locale, true]),\n  );\n\n  const originalSlugs = Object.fromEntries(\n    Object.entries(locales).map(([locale, { slug }]) => [locale, slug]),\n  );\n\n  const originalValues = Object.fromEntries(\n    Object.entries(locales).map(([locale, { content }]) => [locale, content]),\n  );\n\n  return {\n    createdAt: Date.now(),\n    isNew: false,\n    originalEntry: entry,\n    originalLocales,\n    currentLocales: structuredClone(originalLocales),\n    originalSlugs,\n    currentSlugs: structuredClone(originalSlugs),\n    originalValues,\n    currentValues: structuredClone(originalValues),\n    files: {},\n    validities: {},\n    expanderStates: {},\n  };\n};\n\n/**\n * Add saving entry data to the stack.\n * @param {object} args Arguments.\n * @param {Record<string, any>} args.draftProps Entry draft properties.\n * @param {CollectionIndexFile} [args.indexFile] Index file of the collection.\n * @param {Entry[]} args.savingEntries Entries to be saved. This will be modified.\n * @param {FileChange[]} args.changes File changes to be saved. This will be modified.\n */\nexport const addSavingEntryData = async ({ draftProps, indexFile, savingEntries, changes }) => {\n  const { collection, collectionFile } = draftProps;\n  const { fields: regularFields = [] } = collectionFile ?? collection;\n\n  const draft = /** @type {EntryDraft} */ ({\n    ...draftProps,\n    fields: indexFile?.fields ?? regularFields,\n  });\n\n  const { savingEntry, changes: _changes } = await createSavingEntryData({\n    draft,\n    slugs: getSlugs({ draft }),\n  });\n\n  savingEntries.push(savingEntry);\n  changes.push(..._changes);\n};\n\n/**\n * Collect changes for the given entry.\n * @param {object} args Arguments.\n * @param {InternalSiteConfig} args._siteConfig Site configuration.\n * @param {Entry} args.entry Entry to collect changes for.\n * @param {Entry[]} args.savingEntries Entries to be saved. This will be modified.\n * @param {FileChange[]} args.changes File changes to be saved. This will be modified.\n */\nexport const collectEntryChanges = async ({ _siteConfig, entry, savingEntries, changes }) => {\n  const draftBaseProps = getDraftBaseProps({ entry });\n\n  await Promise.all(\n    getAssociatedCollections(entry).map(async (collection) => {\n      const { name: collectionName, editor } = collection;\n      const isIndexFile = isCollectionIndexFile(collection, entry);\n      const indexFile = isIndexFile ? getIndexFile(collection) : undefined;\n\n      const canPreview =\n        indexFile?.editor?.preview ?? editor?.preview ?? _siteConfig?.editor?.preview ?? true;\n\n      const collectionFiles = getCollectionFilesByEntry(collection, entry);\n      const addDataProps = { indexFile, savingEntries, changes };\n      /** @type {Partial<EntryDraft>} */\n      const draftProps = { ...draftBaseProps, collection, collectionName, isIndexFile, canPreview };\n\n      if (collectionFiles.length) {\n        await Promise.all(\n          collectionFiles.map((collectionFile) =>\n            addSavingEntryData({\n              ...addDataProps,\n              draftProps: { ...draftProps, collectionFile, fileName: collectionFile.name },\n            }),\n          ),\n        );\n      } else {\n        await addSavingEntryData({ ...addDataProps, draftProps });\n      }\n    }),\n  );\n};\n\n/**\n * Collect changes for the given asset and update the entries that use it.\n * @param {object} args Arguments.\n * @param {InternalSiteConfig} args._siteConfig Site configuration.\n * @param {AssetFolderInfo} args._globalAssetFolder Global asset folder.\n * @param {string} args.newPath New path for the asset.\n * @param {Asset} args.asset Asset to collect changes for.\n * @param {Entry[]} args.savingEntries Entries to be saved. This will be modified.\n * @param {FileChange[]} args.changes File changes to be saved. This will be modified.\n */\nexport const collectEntryChangesFromAsset = async ({\n  _siteConfig,\n  _globalAssetFolder,\n  newPath,\n  asset,\n  savingEntries,\n  changes,\n}) => {\n  const assetURL = getAssetPublicURL(asset) ?? asset.blobURL;\n  const usedEntries = assetURL ? await getEntriesByAssetURL(assetURL) : [];\n\n  if (!assetURL || !usedEntries.length) {\n    return;\n  }\n\n  const { publicPath } =\n    getAssetFoldersByPath(asset.path).find(({ collectionName }) => collectionName !== undefined) ??\n    _globalAssetFolder;\n\n  const updatingEntries = await getEntriesByAssetURL(assetURL, {\n    entries: structuredClone(usedEntries),\n    newURL: newPath.replace(asset.folder.internalPath ?? '', publicPath ?? ''),\n  });\n\n  if (!updatingEntries.length) {\n    return;\n  }\n\n  await Promise.all(\n    updatingEntries.map(async (entry) =>\n      collectEntryChanges({ _siteConfig, entry, savingEntries, changes }),\n    ),\n  );\n};\n\n/**\n * Update the asset and entry stores after moving or renaming assets.\n * @param {object} args Arguments.\n * @param {'move' | 'rename'} args.action The action performed, either 'move' or 'rename'.\n * @param {MovingAsset[]} args.movedAssets The assets that have been moved or renamed.\n */\nexport const updateStores = ({ action, movedAssets }) => {\n  const _allAssets = get(allAssets);\n  const focusedAssetPath = get(focusedAsset)?.path;\n  const _focusedAsset = movedAssets.find((a) => a.asset.path === focusedAssetPath);\n  const overlaidAssetPath = get(overlaidAsset)?.path;\n  const _overlaidAsset = movedAssets.find((a) => a.asset.path === overlaidAssetPath);\n\n  // Replace the existing asset\n  if (_focusedAsset) {\n    focusedAsset.set(_allAssets.find((a) => a.path === _focusedAsset.path));\n  }\n\n  // Replace the existing asset\n  if (_overlaidAsset) {\n    overlaidAsset.set(_allAssets.find((a) => a.path === _overlaidAsset.path));\n  }\n\n  assetUpdatesToast.set({\n    ...UPDATE_TOAST_DEFAULT_STATE,\n    moved: action === 'move',\n    renamed: action === 'rename',\n    count: movedAssets.length,\n  });\n};\n\n/**\n * Move or rename assets while updating links in the entries.\n * @param {'move' | 'rename'} action Action type.\n * @param {MovingAsset[]} movingAssets Assets to be moved/renamed.\n */\nexport const moveAssets = async (action, movingAssets) => {\n  const _siteConfig = /** @type {InternalSiteConfig} */ (get(siteConfig));\n  const _globalAssetFolder = get(globalAssetFolder);\n  /** @type {FileChange[]} */\n  const changes = [];\n  /** @type {Entry[]} */\n  const savingEntries = [];\n  /** @type {Asset[]} */\n  const savingAssets = [];\n\n  await Promise.all(\n    movingAssets.map(async ({ asset, path }) => {\n      const newPath = path;\n      const newName = getPathInfo(newPath).basename;\n\n      savingAssets.push({ ...asset, path: newPath, name: newName });\n\n      changes.push({\n        action: 'move',\n        path: newPath,\n        previousPath: asset.path,\n        previousSha: asset.sha,\n        data: new File([asset.file ?? (await getAssetBlob(asset))], newName),\n      });\n\n      await collectEntryChangesFromAsset({\n        _siteConfig,\n        _globalAssetFolder,\n        newPath,\n        asset,\n        savingEntries,\n        changes,\n      });\n    }),\n  );\n\n  await saveChanges({\n    changes,\n    savingEntries,\n    savingAssets,\n    options: { commitType: 'uploadMedia' },\n  });\n\n  updateStores({ action, movedAssets: movingAssets });\n};\n","<script>\n  import { Dialog, TextInput } from '@sveltia/ui';\n  import { getPathInfo } from '@sveltia/utils/file';\n  import { _ } from 'svelte-i18n';\n\n  import { goto, parseLocation } from '$lib/services/app/navigation';\n  import { getAssetsByDirName, renamingAsset } from '$lib/services/assets';\n  import { moveAssets } from '$lib/services/assets/data/move';\n  import { getAssetDetails } from '$lib/services/assets/info';\n  import { showAssetOverlay } from '$lib/services/assets/view';\n\n  /**\n   * @import { Entry } from '$lib/types/private';\n   */\n\n  const componentId = $props.id();\n\n  let open = $state(false);\n  /** @type {{ dirname?: string, filename: string, extension?: string }} */\n  let pathInfo = $state({ filename: '' });\n  let newName = $state('');\n  /** @type {string[]} */\n  let otherNames = $state([]);\n  /** @type {Entry[]} */\n  let usedEntries = $state([]);\n\n  const asset = $derived($renamingAsset);\n  const { dirname, filename, extension } = $derived(pathInfo);\n\n  const error = $derived.by(() => {\n    if (!newName.trim()) return 'empty';\n    if (newName.includes('/')) return 'character';\n    if (otherNames.includes(`${newName}${extension ? `.${extension}` : ''}`)) return 'duplicate';\n    return undefined;\n  });\n\n  const invalid = $derived(!!error);\n\n  /**\n   * Initialize the state.\n   */\n  const initState = async () => {\n    if (asset) {\n      pathInfo = getPathInfo(asset.path);\n      newName = filename;\n      otherNames = getAssetsByDirName(/** @type {string} */ (dirname))\n        .map((a) => a.name)\n        .filter((n) => n !== asset.name);\n      ({ usedEntries } = await getAssetDetails(asset));\n      open = true;\n    }\n  };\n\n  /**\n   * Rename the asset by moving it to a new path. Also, update the URL hash silently to reflect the\n   * new asset name if the rename dialog was opened in the asset details view.\n   */\n  const renameAsset = async () => {\n    if (!asset) {\n      return;\n    }\n\n    const oldPath = asset.path;\n    const newPath = `${dirname}/${newName}${extension ? `.${extension}` : ''}`;\n\n    await moveAssets('rename', [{ asset, path: newPath }]);\n\n    if (parseLocation().path === `/assets/${oldPath}`) {\n      await goto(`/assets/${newPath}`, { replaceState: true, notifyChange: false });\n    }\n  };\n\n  $effect(() => {\n    if (asset) {\n      initState();\n    }\n  });\n\n  $effect(() => {\n    if (!$showAssetOverlay) {\n      open = false;\n      $renamingAsset = undefined;\n    }\n  });\n</script>\n\n<Dialog\n  title={$_('rename_x', { values: { name: asset?.name } })}\n  bind:open\n  okLabel={$_('rename')}\n  okDisabled={newName === filename || invalid}\n  onOk={() => {\n    renameAsset();\n  }}\n  onClose={() => {\n    $renamingAsset = undefined;\n  }}\n>\n  <p>\n    {$_(\n      usedEntries.length === 0\n        ? 'enter_new_name_for_asset'\n        : usedEntries.length === 1\n          ? 'enter_new_name_for_asset_with_one_entry'\n          : 'enter_new_name_for_asset_with_many_entries',\n      { values: { count: usedEntries.length } },\n    )}\n  </p>\n  <div role=\"none\">\n    <TextInput bind:value={newName} flex {invalid} aria-errormessage=\"{componentId}-error\" />\n    {#if extension}\n      <span role=\"none\">.{extension}</span>\n    {/if}\n  </div>\n  <div role=\"none\" class=\"error\" id=\"{componentId}-error\">\n    {#if invalid}\n      {$_(`enter_new_name_for_asset_error.${error}`)}\n    {/if}\n  </div>\n</Dialog>\n\n<style lang=\"scss\">\n  p {\n    margin: 0 0 8px;\n  }\n\n  div {\n    display: flex;\n    align-items: center;\n    gap: 4px;\n  }\n\n  .error {\n    margin: 0;\n    color: var(--sui-error-foreground-color);\n    font-size: var(--sui-font-size-small);\n  }\n</style>\n","<script>\n  import { Checkbox, GridCell, GridRow, TruncatedText } from '@sveltia/ui';\n\n  import AssetPreview from '$lib/components/assets/shared/asset-preview.svelte';\n  import { goto } from '$lib/services/app/navigation';\n  import { focusedAsset, selectedAssets } from '$lib/services/assets';\n  import { canPreviewAsset } from '$lib/services/assets/kinds';\n  import { listedAssets } from '$lib/services/assets/view';\n  import { isMediumScreen, isSmallScreen } from '$lib/services/user/env';\n\n  /**\n   * @import { Asset, ViewType } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Asset} asset Asset.\n   * @property {ViewType} viewType View type.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    asset,\n    viewType,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const { name, kind } = $derived(asset);\n\n  /**\n   * Update the asset selection.\n   * @param {boolean} selected Whether the current asset item is selected.\n   */\n  const updateSelection = (selected) => {\n    selectedAssets.update((assets) => {\n      const index = assets.indexOf(asset);\n\n      if (selected && index === -1) {\n        assets.push(asset);\n      }\n\n      if (!selected && index > -1) {\n        assets.splice(index, 1);\n      }\n\n      return assets;\n    });\n  };\n</script>\n\n<!-- @todo Add support for drag to move. -->\n\n<GridRow\n  aria-rowindex={$listedAssets.indexOf(asset)}\n  onChange={(event) => {\n    updateSelection(event.detail.selected);\n  }}\n  onfocus={() => {\n    $focusedAsset = asset;\n  }}\n  onclick={() => {\n    if (($isSmallScreen || $isMediumScreen) && $focusedAsset && canPreviewAsset($focusedAsset)) {\n      goto(`/assets/${$focusedAsset.path}`, { transitionType: 'forwards' });\n    }\n  }}\n  ondblclick={() => {\n    if ($focusedAsset && canPreviewAsset($focusedAsset)) {\n      goto(`/assets/${$focusedAsset.path}`, { transitionType: 'forwards' });\n    }\n  }}\n>\n  {#if !($isSmallScreen || $isMediumScreen)}\n    <GridCell class=\"checkbox\">\n      <Checkbox\n        role=\"none\"\n        tabindex=\"-1\"\n        checked={$selectedAssets.includes(asset)}\n        onChange={({ detail: { checked } }) => {\n          updateSelection(checked);\n        }}\n      />\n    </GridCell>\n  {/if}\n  <GridCell class=\"image\">\n    <AssetPreview\n      {kind}\n      {asset}\n      variant={viewType === 'list' ? 'icon' : 'tile'}\n      cover={$isSmallScreen}\n      checkerboard={kind === 'image'}\n    />\n  </GridCell>\n  {#if !$isSmallScreen || viewType === 'list'}\n    <GridCell class=\"title\">\n      <div role=\"none\" class=\"label\">\n        <TruncatedText lines={2}>\n          {name}\n        </TruncatedText>\n      </div>\n    </GridCell>\n  {/if}\n</GridRow>\n\n<style lang=\"scss\">\n  .label {\n    word-break: break-all;\n  }\n</style>\n","<script>\n  import { Button, Icon } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { canCreateAsset, targetAssetFolder } from '$lib/services/assets/folders';\n  import { showUploadAssetsDialog } from '$lib/services/assets/view';\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [label] Button label. If `undefined`, the button will be iconic.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    label = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const disabled = $derived(!canCreateAsset($targetAssetFolder));\n</script>\n\n<Button\n  variant=\"primary\"\n  iconic={!label}\n  {disabled}\n  {label}\n  aria-label={$_('upload_assets')}\n  onclick={() => {\n    $showUploadAssetsDialog = true;\n  }}\n>\n  {#snippet startIcon()}\n    <Icon name=\"cloud_upload\" />\n  {/snippet}\n</Button>\n","<!--\n  @component A container for the entry list or asset list.\n-->\n<script>\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Snippet} [children] Slot content.\n   */\n\n  /** @type {Props & Record<string, any>} */\n  let {\n    /* eslint-disable prefer-const */\n    children = undefined,\n    ...rest\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div role=\"group\" class=\"list-container\" {...rest}>\n  {@render children?.()}\n</div>\n\n<style lang=\"scss\">\n  .list-container {\n    --icon-size: 36px;\n\n    flex: auto;\n    position: relative;\n    height: 100%;\n    overflow-x: hidden;\n    overflow-y: auto;\n    overscroll-behavior-y: contain;\n  }\n</style>\n","<!--\n  @component A wrapper of the `Grid` component that can display a list of entries, files or assets\n  in a simple table or grid.\n-->\n<script>\n  import { Grid } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import { ViewType } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {ViewType} viewType View type.\n   * @property {Snippet} [children] Slot content.\n   */\n\n  /** @type {Props & Record<string, any>} */\n  let {\n    /* eslint-disable prefer-const */\n    viewType,\n    children = undefined,\n    ...rest\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div role=\"none\" class=\"{viewType}-view\">\n  {#await sleep() then}\n    <Grid multiple clickToSelect={false} {...rest}>\n      {@render children?.()}\n    </Grid>\n  {/await}\n</div>\n\n<style lang=\"scss\">\n  :is(.grid-view, .list-view) {\n    display: block;\n    padding: 0 16px 16px;\n    height: 100%;\n    overflow-y: auto;\n  }\n\n  .grid-view {\n    @media (width < 768px) {\n      padding: 4px;\n    }\n\n    :global {\n      .row-group-caption {\n        display: block;\n        grid-column: 1 / -1; // span the entire row\n\n        th {\n          display: block;\n        }\n      }\n\n      .row-group:not(:first-child) .row-group-caption {\n        margin-top: 16px;\n      }\n\n      .grid-body {\n        display: grid;\n        grid-template-columns: repeat(auto-fill, minmax(var(--grid-size, 200px), 1fr));\n        gap: 16px;\n        border-width: 0;\n\n        @media (width < 768px) {\n          grid-template-columns: repeat(auto-fill, minmax(var(--grid-size, 160px), 1fr));\n          gap: 8px;\n        }\n      }\n\n      .grid-row {\n        display: block;\n        position: relative;\n        overflow: hidden;\n        height: auto;\n        text-align: left;\n\n        .grid-cell {\n          display: block;\n\n          &.image:empty {\n            aspect-ratio: 1 / 1;\n          }\n        }\n\n        .checkbox {\n          position: absolute;\n          inset: 4px auto auto 4px;\n          z-index: 2;\n        }\n\n        .title {\n          .label {\n            overflow: hidden;\n            margin: 12px;\n            height: 40px;\n            line-height: 1.5;\n          }\n        }\n\n        &[tabindex] {\n          border-radius: var(--sui-control-large-border-radius);\n          background-color: var(--sui-secondary-background-color);\n          cursor: pointer;\n          transition: background-color 200ms;\n\n          &:is(:hover, :focus, :active) {\n            background-color: var(--sui-hover-background-color);\n          }\n        }\n      }\n    }\n  }\n\n  .list-view {\n    @media (width < 768px) {\n      padding: 0;\n    }\n\n    :global {\n      [role='grid'] {\n        @media (width < 768px) {\n          width: 100%;\n          --sui-focus-ring-width: 0;\n        }\n\n        .row-group {\n          .row-group-caption + .grid-row {\n            .grid-cell {\n              border-top-width: 0 !important;\n            }\n          }\n\n          .row-group-caption ~ .grid-row:last-child {\n            .grid-cell {\n              border-bottom-width: 0 !important;\n            }\n          }\n        }\n\n        .grid-row {\n          transition-property: background-color, outline-color;\n          transition-duration: 200ms;\n\n          &[tabindex] {\n            cursor: pointer;\n          }\n\n          &:hover {\n            background-color: var(--sui-hover-background-color);\n          }\n\n          &:last-child .grid-cell {\n            border-width: 1px 0;\n          }\n        }\n\n        .grid-cell {\n          overflow: hidden;\n          border-width: 1px 0 0;\n          border-color: var(--sui-secondary-border-color);\n          padding: 0 16px 0 0;\n          height: 40px;\n          max-width: 100%;\n          color: var(--sui-secondary-foreground-color);\n          white-space: nowrap;\n          vertical-align: middle;\n\n          @media (width < 768px) {\n            border-width: 0 !important;\n            height: 64px;\n          }\n\n          &.checkbox {\n            padding-left: 8px !important;\n            width: 44px;\n          }\n\n          &.title {\n            width: 100%; /* flex: auto */\n            color: var(--sui-primary-foreground-color);\n          }\n\n          &:first-child {\n            padding-left: 16px;\n          }\n\n          .label {\n            overflow: hidden;\n\n            @media (width < 768px) {\n              white-space: normal;\n              line-height: var(--sui-line-height-compact);\n            }\n          }\n\n          &.image {\n            width: 48px;\n\n            &:empty::before {\n              display: block;\n              border-radius: var(--sui-control-medium-border-radius);\n              width: var(--icon-size);\n              height: var(--icon-size);\n              background-color: var(--sui-secondary-background-color);\n              content: '';\n            }\n          }\n        }\n      }\n    }\n  }\n</style>\n","<script>\n  import { EmptyState, GridBody, InfiniteScroll } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import { _ } from 'svelte-i18n';\n\n  import AssetListItem from '$lib/components/assets/list/asset-list-item.svelte';\n  import DropZone from '$lib/components/assets/shared/drop-zone.svelte';\n  import UploadAssetsButton from '$lib/components/assets/toolbar/upload-assets-button.svelte';\n  import ListContainer from '$lib/components/common/list-container.svelte';\n  import ListingGrid from '$lib/components/common/listing-grid.svelte';\n  import { uploadingAssets } from '$lib/services/assets';\n  import { canCreateAsset, targetAssetFolder } from '$lib/services/assets/folders';\n  import { assetGroups, currentView, listedAssets } from '$lib/services/assets/view';\n\n  /**\n   * @import { Asset } from '$lib/types/private';\n   */\n\n  const viewType = $derived($currentView.type);\n  const folder = $derived($targetAssetFolder);\n  const uploadDisabled = $derived(!canCreateAsset(folder));\n</script>\n\n<ListContainer aria-label={$_('asset_list')}>\n  <DropZone\n    disabled={uploadDisabled}\n    multiple={true}\n    onDrop={({ files }) => {\n      $uploadingAssets = { folder, files };\n    }}\n  >\n    {#if Object.values($assetGroups).flat(1).length}\n      <ListingGrid\n        id=\"asset-list\"\n        {viewType}\n        aria-label={$_('assets')}\n        aria-rowcount={$listedAssets.length}\n      >\n        {#each Object.entries($assetGroups) as [name, assets] (name)}\n          {#await sleep() then}\n            <GridBody label={name !== '*' ? name : undefined}>\n              <InfiniteScroll items={assets} itemKey=\"path\">\n                {#snippet renderItem(/** @type {Asset} */ asset)}\n                  {#key asset.sha}\n                    {#await sleep() then}\n                      <AssetListItem {asset} {viewType} />\n                    {/await}\n                  {/key}\n                {/snippet}\n              </InfiniteScroll>\n            </GridBody>\n          {/await}\n        {/each}\n      </ListingGrid>\n    {:else}\n      <EmptyState>\n        <span role=\"none\">{$_('no_files_found')}</span>\n        {#if !uploadDisabled}\n          <UploadAssetsButton label={$_('upload_assets')} />\n        {/if}\n      </EmptyState>\n    {/if}\n  </DropZone>\n</ListContainer>\n","import { writable } from 'svelte/store';\n\n/**\n * @import { Writable } from 'svelte/store';\n */\n\n/**\n * @type {Writable<'entries' | 'assets' | null>}\n */\nexport const searchMode = writable(null);\n\n/**\n * @type {Writable<string>}\n */\nexport const searchTerms = writable('');\n","<script>\n  import { SearchBar } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { goBack, goto, parseLocation } from '$lib/services/app/navigation';\n  import { searchMode, searchTerms } from '$lib/services/search';\n\n  /**\n   * @typedef {object} Props\n   * @property {(event: MouseEvent) => void} [onclick] `click` event handler.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    onclick = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /**\n   * Navigate to the search results page if search terms are given, or go back the previous page.\n   * @param {string} terms New search terms.\n   */\n  const navigate = (terms) => {\n    const hadTerms = !!$searchTerms;\n    const { path } = parseLocation();\n    const searching = path.startsWith('/search/');\n\n    $searchTerms = terms;\n\n    if (terms) {\n      goto(`/search/${terms}`, { replaceState: searching });\n    } else if (hadTerms && searching) {\n      goBack('/collections');\n    }\n  };\n\n  /** @type {any | undefined} */\n  let searchBar = $state();\n\n  $effect(() => {\n    // Restore search terms when the page is reloaded\n    if (searchBar && $searchTerms !== searchBar?.value) {\n      searchBar.value = $searchTerms;\n    }\n  });\n</script>\n\n<div role=\"none\" class=\"wrapper\">\n  {#if $searchMode}\n    <SearchBar\n      bind:this={searchBar}\n      keyShortcuts=\"Accel+F\"\n      placeholder={$_(`search_placeholder_${$searchMode}`)}\n      --sui-textbox-placeholder-text-align=\"center\"\n      {onclick}\n      oninput={({ target }) => {\n        // @todo Implement quick search dropdown.\n        navigate(/** @type {HTMLInputElement} */ (target).value.trim());\n      }}\n    />\n  {/if}\n</div>\n\n<style lang=\"scss\">\n  .wrapper {\n    display: contents;\n    --sui-textbox-border-width: 0;\n  }\n</style>\n","<script>\n  import { Icon, Listbox, Option, OptionGroup } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import equal from 'fast-deep-equal';\n  import { _, locale as appLocale } from 'svelte-i18n';\n\n  import QuickSearchBar from '$lib/components/global/toolbar/items/quick-search-bar.svelte';\n  import { goto } from '$lib/services/app/navigation';\n  import { allAssets, getAssetsByFolder } from '$lib/services/assets';\n  import { allAssetFolders, selectedAssetFolder } from '$lib/services/assets/folders';\n  import { getFolderLabelByCollection } from '$lib/services/assets/view';\n  import { getCollection, getCollectionIndex } from '$lib/services/contents/collection';\n  import {\n    getCollectionFile,\n    getCollectionFileIndex,\n  } from '$lib/services/contents/collection/files';\n  import { isSmallScreen } from '$lib/services/user/env';\n\n  const numberFormatter = $derived(Intl.NumberFormat($appLocale ?? undefined));\n\n  const folders = $derived([\n    // All Assets, Global Assets, then collection-level, file-level folders, sorted by appearance\n    // order in the config\n    ...$allAssetFolders\n      .sort(\n        (a, b) =>\n          getCollectionFileIndex(a.collectionName, a.fileName) -\n          getCollectionFileIndex(b.collectionName, b.fileName),\n      )\n      .sort((a, b) => getCollectionIndex(a.collectionName) - getCollectionIndex(b.collectionName)),\n  ]);\n</script>\n\n<div role=\"none\" class=\"primary-sidebar\">\n  {#if $isSmallScreen}\n    <h2>{$_('assets')}</h2>\n    <QuickSearchBar\n      onclick={(event) => {\n        event.preventDefault();\n        goto('/search');\n      }}\n    />\n  {/if}\n  <Listbox aria-label={$_('asset_folder_list')} aria-controls=\"assets-container\">\n    <OptionGroup label={$_('asset_location.repository')}>\n      {#each folders as folder ([folder.collectionName, folder.fileName, folder.internalPath].join(':'))}\n        {#await sleep() then}\n          {@const { collectionName, fileName, internalPath, entryRelative, hasTemplateTags } =\n            folder}\n          {@const collection = collectionName ? getCollection(collectionName) : undefined}\n          {@const collectionFile =\n            collection && fileName ? getCollectionFile(collection, fileName) : undefined}\n          <!-- Can’t upload assets if collection assets are saved at entry-relative paths -->\n          {@const uploadDisabled = entryRelative || hasTemplateTags}\n          {@const selected = equal($selectedAssetFolder, folder)}\n          <Option\n            selected={$isSmallScreen ? false : selected}\n            label={$appLocale ? getFolderLabelByCollection(folder) : ''}\n            onSelect={() => {\n              goto(`/assets/${internalPath ?? '-/all'}`, {\n                transitionType: 'forwards',\n                // An internal path can be shared by multiple collections, files and fields. Pass\n                // the folder info as history state so we can distinguish these different asset\n                // folders while keeping the URL clean.\n                state: { folder },\n              });\n            }}\n            ondragover={(event) => {\n              event.preventDefault();\n\n              if (uploadDisabled) {\n                return;\n              }\n\n              if (internalPath === undefined || selected) {\n                /** @type {DataTransfer} */ (event.dataTransfer).dropEffect = 'none';\n              } else {\n                /** @type {DataTransfer} */ (event.dataTransfer).dropEffect = 'move';\n                /** @type {HTMLElement} */ (event.target).classList.add('dragover');\n              }\n            }}\n            ondragleave={(event) => {\n              event.preventDefault();\n\n              if (uploadDisabled) {\n                return;\n              }\n\n              /** @type {HTMLElement} */ (event.target).classList.remove('dragover');\n            }}\n            ondragend={(event) => {\n              event.preventDefault();\n\n              if (uploadDisabled) {\n                return;\n              }\n\n              /** @type {HTMLElement} */ (event.target).classList.remove('dragover');\n            }}\n            ondrop={(event) => {\n              event.preventDefault();\n\n              if (uploadDisabled) {\n                return;\n              }\n\n              /** @type {HTMLElement} */ (event.target).classList.remove('dragover');\n              // @todo Move the assets while updating entries using the files, after showing a\n              // confirmation dialog.\n            }}\n          >\n            {#snippet startIcon()}\n              <Icon name={collectionFile?.icon || collection?.icon || 'folder'} />\n            {/snippet}\n            {#snippet endIcon()}\n              {#key $allAssets}\n                {#await sleep() then}\n                  {@const count = (\n                    internalPath !== undefined ? getAssetsByFolder(folder) : $allAssets\n                  ).length}\n                  <span\n                    class=\"count\"\n                    aria-label=\"({$_(\n                      count > 1 ? 'many_assets' : count === 1 ? 'one_asset' : 'no_assets',\n                      { values: { count } },\n                    )})\"\n                  >\n                    {numberFormatter.format(count)}\n                  </span>\n                {/await}\n              {/key}\n            {/snippet}\n          </Option>\n        {/await}\n      {/each}\n    </OptionGroup>\n    <!-- @todo Add external locations, including Cloudinary and Uploadcare -->\n  </Listbox>\n</div>\n","<script>\n  import { Button } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { goto } from '$lib/services/app/navigation';\n  import { canPreviewAsset } from '$lib/services/assets/kinds';\n\n  /**\n   * @import { Asset } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Asset} [asset] Selected asset.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    asset,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<Button\n  variant=\"ghost\"\n  disabled={!asset || !canPreviewAsset(asset)}\n  label={$_('preview')}\n  aria-label={$_('show_preview')}\n  onclick={() => {\n    goto(`/assets/${asset?.path}`, { transitionType: 'forwards' });\n  }}\n/>\n","<script>\n  import { FloatingActionButtonWrapper, Toolbar } from '@sveltia/ui';\n  import { _, locale as appLocale } from 'svelte-i18n';\n\n  import CopyAssetsButton from '$lib/components/assets/toolbar/copy-assets-button.svelte';\n  import DeleteAssetsButton from '$lib/components/assets/toolbar/delete-assets-button.svelte';\n  import DownloadAssetsButton from '$lib/components/assets/toolbar/download-assets-button.svelte';\n  import EditOptionsButton from '$lib/components/assets/toolbar/edit-options-button.svelte';\n  import PreviewAssetButton from '$lib/components/assets/toolbar/preview-asset-button.svelte';\n  import UploadAssetsButton from '$lib/components/assets/toolbar/upload-assets-button.svelte';\n  import BackButton from '$lib/components/common/page-toolbar/back-button.svelte';\n  import { goBack } from '$lib/services/app/navigation';\n  import { focusedAsset, selectedAssets } from '$lib/services/assets';\n  import {\n    canCreateAsset,\n    selectedAssetFolder,\n    targetAssetFolder,\n  } from '$lib/services/assets/folders';\n  import { getFolderLabelByCollection, listedAssets } from '$lib/services/assets/view';\n  import { isMediumScreen, isSmallScreen } from '$lib/services/user/env';\n\n  const assets = $derived.by(() => {\n    if ($selectedAssets.length) return $selectedAssets;\n    if ($focusedAsset) return [$focusedAsset];\n    return [];\n  });\n\n  const uploadDisabled = $derived(!canCreateAsset($targetAssetFolder));\n</script>\n\n<Toolbar variant=\"primary\" aria-label={$_('folder')}>\n  {#if $isSmallScreen}\n    <BackButton\n      aria-label={$_('back_to_asset_folder_list')}\n      onclick={() => {\n        goBack('/assets');\n      }}\n    />\n  {/if}\n  <h2 role=\"none\">\n    {#key $appLocale}\n      {$selectedAssetFolder ? getFolderLabelByCollection($selectedAssetFolder) : ''}\n    {/key}\n    {#if !$isSmallScreen && $selectedAssetFolder?.internalPath !== undefined}\n      <span role=\"none\">/{$selectedAssetFolder.internalPath}</span>\n    {/if}\n  </h2>\n  {#if !($isSmallScreen || $isMediumScreen)}\n    <PreviewAssetButton asset={$focusedAsset} />\n    <CopyAssetsButton assets={$focusedAsset ? [$focusedAsset] : []} />\n    <DownloadAssetsButton {assets} />\n    <DeleteAssetsButton\n      {assets}\n      buttonDescription={$_(\n        assets.length === 1 ? 'delete_selected_asset' : 'delete_selected_assets',\n      )}\n      dialogDescription={$_(\n        assets.length === 1\n          ? 'confirm_deleting_selected_asset'\n          : assets.length === $listedAssets.length\n            ? 'confirm_deleting_all_assets'\n            : 'confirm_deleting_selected_assets',\n        { values: { count: assets.length } },\n      )}\n    />\n    <EditOptionsButton asset={$focusedAsset} />\n  {/if}\n  <FloatingActionButtonWrapper>\n    {#if !$isSmallScreen || ($listedAssets.length && !uploadDisabled)}\n      <UploadAssetsButton label={$isSmallScreen ? undefined : $_('upload')} />\n    {/if}\n  </FloatingActionButtonWrapper>\n</Toolbar>\n","<script>\n  import { EmptyState, Group } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import InfoPanel from '$lib/components/assets/shared/info-panel.svelte';\n  import { focusedAsset } from '$lib/services/assets';\n  import { currentView } from '$lib/services/assets/view';\n  import { isLargeScreen } from '$lib/services/user/env';\n</script>\n\n{#if $isLargeScreen && $currentView.showInfo}\n  <Group id=\"asset-info\" class=\"secondary-sidebar\" aria-label={$_('asset_info')}>\n    {#if $focusedAsset}\n      <InfoPanel asset={$focusedAsset} showPreview={true} />\n    {:else}\n      <EmptyState>\n        <span role=\"none\">{$_('select_asset_show_info')}</span>\n      </EmptyState>\n    {/if}\n  </Group>\n{/if}\n","<script>\n  import { Menu, MenuButton, MenuItemCheckbox, MenuItemRadio } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  /**\n   * @import { Writable } from 'svelte/store';\n   * @import { AssetListView, EntryListView } from '$lib/types/private';\n   * @import { ViewFilter } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Writable<EntryListView | AssetListView>} currentView Current view details.\n   * @property {string} aria-controls The `aria-controls` attribute for the menu.\n   * @property {string} [label] Menu button label.\n   * @property {boolean} [disabled] Whether to disable the button.\n   * @property {boolean} [multiple] Whether to allow selecting multiple filter conditions.\n   * @property {string} [noneLabel] Label to be displayed on the None item.\n   * @property {ViewFilter[]} [filters] Filter conditions.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    currentView,\n    'aria-controls': ariaControls,\n    label = '',\n    disabled = false,\n    multiple = false,\n    noneLabel = '',\n    filters = [],\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<MenuButton variant=\"ghost\" label={label || $_('filter')} {disabled} popupPosition=\"bottom-right\">\n  {#snippet popup()}\n    <Menu aria-label={$_('filtering_options')} aria-controls={ariaControls}>\n      {#if multiple}\n        {#each filters as { label: _label, field, pattern }}\n          {@const index = ($currentView.filters || []).findIndex(\n            (f) => f.field === field && String(f.pattern) === String(pattern),\n          )}\n          <MenuItemCheckbox\n            label={_label}\n            checked={index > -1}\n            onChange={() => {\n              currentView.update((view) => {\n                const updatedFilters = view.filters ? [...view.filters] : [];\n\n                if (index > -1) {\n                  updatedFilters.splice(index, 1);\n                } else {\n                  updatedFilters.push({ field, pattern });\n                }\n\n                return { ...view, filters: updatedFilters };\n              });\n            }}\n          />\n        {/each}\n      {:else}\n        <MenuItemRadio\n          label={noneLabel || $_('sort_keys.none')}\n          checked={!$currentView.filter}\n          onSelect={() => {\n            currentView.update((view) => ({\n              ...view,\n              filter: undefined,\n            }));\n          }}\n        />\n        {#each filters as { label: _label, field, pattern }}\n          <MenuItemRadio\n            label={_label}\n            checked={$currentView.filter?.field === field &&\n              String($currentView.filter.pattern) === String(pattern)}\n            onSelect={() => {\n              currentView.update((view) => ({\n                ...view,\n                filter: { field, pattern },\n              }));\n            }}\n          />\n        {/each}\n      {/if}\n    </Menu>\n  {/snippet}\n</MenuButton>\n","<script>\n  import { Checkbox } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  /**\n   * @import { Writable } from 'svelte/store';\n   * @import { Asset, Entry } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {(Entry | Asset)[]} allItems All available items.\n   * @property {Writable<(Entry | Asset)[]>} selectedItems Selected items.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    allItems,\n    selectedItems,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const totalCount = $derived(allItems.length);\n  const selectedCount = $derived($selectedItems.length);\n  const anySelected = $derived(!!selectedCount);\n  const allSelected = $derived(anySelected && selectedCount === totalCount);\n</script>\n\n<div role=\"none\" class=\"wrapper\">\n  <Checkbox\n    disabled={!totalCount}\n    aria-label={$_('select_all')}\n    checked={anySelected && !allSelected ? 'mixed' : anySelected}\n    onChange={() => {\n      // Use `set` because assignment doesn’t work with Runes\n      selectedItems.set(allSelected ? [] : [...allItems]);\n    }}\n  />\n  {#if anySelected}\n    <span role=\"none\">\n      {$_('x_of_x_selected', { values: { total: totalCount, selected: selectedCount } })}\n    </span>\n  {/if}\n</div>\n\n<style lang=\"scss\">\n  .wrapper {\n    display: flex;\n    align-items: center;\n    gap: 4px;\n    margin-inline: 20px;\n  }\n\n  span {\n    color: var(--sui-secondary-foreground-color);\n    font-size: var(--sui-font-size-small);\n  }\n</style>\n","<script>\n  import { Menu, MenuButton, MenuItemRadio } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { getField } from '$lib/services/contents/entry/fields';\n\n  /**\n   * @import { Writable } from 'svelte/store';\n   * @import { AssetListView, EntryListView, SortOrder } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Writable<EntryListView | AssetListView>} currentView Current view details.\n   * @property {string} aria-controls The `aria-controls` attribute for the menu.\n   * @property {string} [label] Menu button label.\n   * @property {boolean} [disabled] Whether to disable the button.\n   * @property {{ label: string, key: string }[]} [sortKeys] Sort keys to display in the menu.\n   * @property {string | undefined} [collectionName] Current collection name.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    currentView,\n    'aria-controls': ariaControls,\n    label = '',\n    disabled = false,\n    sortKeys = [],\n    collectionName = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {SortOrder[]} */\n  const sortOrders = ['ascending', 'descending'];\n  const dateFields = ['date', 'commit_date'];\n</script>\n\n<MenuButton variant=\"ghost\" label={label || $_('sort')} {disabled} popupPosition=\"bottom-right\">\n  {#snippet popup()}\n    <Menu aria-label={$_('sorting_options')} aria-controls={ariaControls}>\n      {#each sortKeys as { key, label: _label } (key)}\n        {#each sortOrders as order (order)}\n          <MenuItemRadio\n            label={$_(\n              dateFields.includes(key) ||\n                (!!collectionName &&\n                  getField({ collectionName, keyPath: key })?.widget === 'datetime')\n                ? `${order}_date`\n                : order,\n              { values: { label: _label } },\n            )}\n            checked={$currentView.sort?.key === key && $currentView.sort.order === order}\n            onSelect={() => {\n              currentView.update((view) => ({ ...view, sort: { key, order } }));\n            }}\n          />\n        {/each}\n      {/each}\n    </Menu>\n  {/snippet}\n</MenuButton>\n","import { derived, get } from 'svelte/store';\nimport { _, locale as appLocale } from 'svelte-i18n';\n\nimport { allAssets } from '$lib/services/assets';\n\n/**\n * @import { Readable } from 'svelte/store';\n */\n\n/**\n * List of available sort keys for the selected asset collection.\n * @type {Readable<{ key: string, label: string }[]>}\n */\nexport const sortKeys = derived(\n  // Include `appLocale` as a dependency because it returns a localized label\n  [allAssets, appLocale],\n  ([_allAssets], set) => {\n    const _sortFields = ['name'];\n\n    if (_allAssets.every((asset) => !!asset.commitAuthor)) {\n      _sortFields.push('commit_author');\n    }\n\n    if (_allAssets.every((asset) => !!asset.commitDate)) {\n      _sortFields.push('commit_date');\n    }\n\n    set(_sortFields.map((key) => ({ key, label: get(_)(`sort_keys.${key}`) })));\n  },\n);\n","<script>\n  import { Button, Divider, Icon, Spacer, Toolbar } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import FilterMenu from '$lib/components/common/page-toolbar/filter-menu.svelte';\n  import ItemSelector from '$lib/components/common/page-toolbar/item-selector.svelte';\n  import SortMenu from '$lib/components/common/page-toolbar/sort-menu.svelte';\n  import ViewSwitcher from '$lib/components/common/page-toolbar/view-switcher.svelte';\n  import { selectedAssets } from '$lib/services/assets';\n  import { ASSET_KINDS } from '$lib/services/assets/kinds';\n  import { assetGroups, currentView, listedAssets } from '$lib/services/assets/view';\n  import { sortKeys } from '$lib/services/assets/view/sort-keys';\n  import { isMediumScreen, isSmallScreen } from '$lib/services/user/env';\n\n  const hasListedAssets = $derived(!!$listedAssets.length);\n  const hasMultipleAssets = $derived($listedAssets.length > 1);\n</script>\n\n<Toolbar variant=\"secondary\" aria-label={$_('asset_list')}>\n  {#if !($isSmallScreen || $isMediumScreen)}\n    <ItemSelector allItems={Object.values($assetGroups).flat(1)} selectedItems={selectedAssets} />\n  {/if}\n  <Spacer flex />\n  <SortMenu\n    disabled={!hasMultipleAssets}\n    {currentView}\n    sortKeys={$sortKeys}\n    aria-controls=\"asset-list\"\n  />\n  <FilterMenu\n    label={$_('type')}\n    disabled={!hasMultipleAssets}\n    {currentView}\n    noneLabel={$_('all')}\n    filters={ASSET_KINDS.map((type) => ({ label: $_(type), field: 'fileType', pattern: type }))}\n    aria-controls=\"asset-list\"\n  />\n  <ViewSwitcher disabled={!hasListedAssets} {currentView} aria-controls=\"asset-list\" />\n  {#if !($isSmallScreen || $isMediumScreen)}\n    <Divider orientation=\"vertical\" />\n    <Button\n      variant=\"ghost\"\n      iconic\n      disabled={!hasListedAssets}\n      pressed={!!$currentView.showInfo}\n      aria-controls=\"asset-info\"\n      aria-expanded={!!$currentView.showInfo}\n      aria-label={$_($currentView.showInfo ? 'hide_info' : 'show_info')}\n      onclick={() => {\n        currentView.update((view) => ({\n          ...view,\n          showInfo: !$currentView.showInfo,\n        }));\n      }}\n    >\n      {#snippet startIcon()}\n        <Icon name=\"info\" />\n      {/snippet}\n    </Button>\n  {/if}\n</Toolbar>\n","<script>\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Snippet} [primaryToolbar] Primary toolbar content.\n   * @property {Snippet} [secondaryToolbar] Secondary toolbar content.\n   * @property {Snippet} [mainContent] Main content.\n   * @property {Snippet} [secondarySidebar] Secondary sidebar content.\n   */\n\n  /** @type {Props & Record<string, any>} */\n  let {\n    /* eslint-disable prefer-const */\n    primaryToolbar = undefined,\n    secondaryToolbar = undefined,\n    mainContent = undefined,\n    secondarySidebar = undefined,\n    ...rest\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div role=\"group\" class=\"wrapper\" {...rest}>\n  {@render primaryToolbar?.()}\n  <div role=\"none\" class=\"main-inner\">\n    <div role=\"none\" class=\"main-inner-main\">\n      {@render secondaryToolbar?.()}\n      {@render mainContent?.()}\n    </div>\n    {@render secondarySidebar?.()}\n  </div>\n</div>\n\n<style lang=\"scss\">\n  .wrapper {\n    flex: auto;\n    display: flex;\n    flex-direction: column;\n    overflow: hidden;\n    background-color: var(--sui-primary-background-color);\n\n    &:not(:first-child) {\n      border-top-left-radius: 16px;\n    }\n\n    :global {\n      .sui.toolbar.primary {\n        justify-content: center;\n\n        @media (width < 768px) {\n          background-color: var(--sui-secondary-background-color);\n        }\n      }\n    }\n  }\n\n  .main-inner {\n    flex: auto;\n    display: flex;\n    overflow: hidden;\n\n    .main-inner-main {\n      flex: auto;\n      display: flex;\n      flex-direction: column;\n      overflow: hidden;\n    }\n\n    :global {\n      .secondary-sidebar {\n        flex: none;\n        overflow: auto;\n        box-sizing: content-box;\n        width: 320px;\n        background-color: var(--sui-secondary-background-color);\n\n        @media (768px <= width) {\n          border-top-left-radius: 16px;\n        }\n\n        [role='listbox'] {\n          padding: 12px;\n        }\n      }\n    }\n  }\n</style>\n","<script>\n  import { hasOverlay } from '$lib/services/app/navigation';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] CSS class name on the button.\n   * @property {Snippet} [primarySidebar] Primary sidebar content.\n   * @property {Snippet} [main] Main content.\n   */\n\n  /** @type {Props & Record<string, any>} */\n  let {\n    /* eslint-disable prefer-const */\n    class: className = '',\n    primarySidebar = undefined,\n    main = undefined,\n    ...rest\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div role=\"group\" id=\"page-container\" class=\"outer {className}\" inert={$hasOverlay} {...rest}>\n  {@render primarySidebar?.()}\n  {@render main?.()}\n</div>\n\n<style lang=\"scss\">\n  .outer {\n    flex: auto;\n    display: flex;\n    overflow: hidden;\n\n    &[inert] {\n      display: none;\n    }\n\n    :global {\n      .primary-sidebar {\n        display: flex;\n        flex-direction: column;\n        flex: none;\n        width: 240px;\n        overflow-y: auto;\n\n        @media (width < 768px) {\n          flex: auto;\n          width: auto;\n          background-color: var(--sui-primary-background-color);\n        }\n\n        h2 {\n          display: flex;\n          align-items: center;\n          padding: 0 20px;\n          height: var(--sui-primary-toolbar-size);\n          font-size: var(--sui-font-size-x-large);\n        }\n\n        .sui.search-bar {\n          margin-inline: 12px;\n          --sui-textbox-background-color: var(--sui-tertiary-background-color);\n        }\n\n        [role='radiogroup'] {\n          width: 100%;\n        }\n\n        [role='listbox'] {\n          margin: 8px;\n          border-width: 0;\n          background-color: transparent;\n\n          button {\n            display: flex;\n            justify-content: flex-start;\n            border-radius: var(--sui-control-medium-border-radius);\n            width: 100%;\n            text-align: left;\n\n            &:not(:first-child) {\n              margin-top: 4px;\n            }\n\n            &:not(:focus) {\n              border-color: transparent;\n            }\n\n            span {\n              flex: none;\n            }\n\n            .label {\n              flex: auto;\n              overflow: hidden;\n            }\n\n            .icon {\n              transition: color 200ms;\n            }\n\n            .icon.check {\n              display: none;\n            }\n\n            .count {\n              padding: 2px;\n              color: var(--sui-tertiary-foreground-color);\n              font-size: var(--sui-font-size-small);\n              transition: color 200ms;\n            }\n          }\n\n          [role='option'][aria-selected='true'] {\n            color: var(--sui-highlight-foreground-color);\n            background-color: var(--sui-selected-background-color);\n\n            .count {\n              color: var(--sui-highlighted-foreground-color);\n            }\n          }\n\n          [role='option'].dragover {\n            color: var(--sui-primary-accent-color-inverted) !important;\n            background-color: var(--sui-primary-accent-color) !important;\n          }\n        }\n\n        .sui.divider {\n          margin: 8px 0;\n        }\n      }\n    }\n  }\n</style>\n","<script>\n  import { Alert, Toast } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import equal from 'fast-deep-equal';\n  import { onMount } from 'svelte';\n  import { _, locale as appLocale } from 'svelte-i18n';\n\n  import AssetDetailsOverlay from '$lib/components/assets/details/asset-details-overlay.svelte';\n  import EditAssetDialog from '$lib/components/assets/details/edit-asset-dialog.svelte';\n  import RenameAssetDialog from '$lib/components/assets/details/rename-asset-dialog.svelte';\n  import AssetList from '$lib/components/assets/list/asset-list.svelte';\n  import PrimarySidebar from '$lib/components/assets/list/primary-sidebar.svelte';\n  import PrimaryToolbar from '$lib/components/assets/list/primary-toolbar.svelte';\n  import SecondarySidebar from '$lib/components/assets/list/secondary-sidebar.svelte';\n  import SecondaryToolbar from '$lib/components/assets/list/secondary-toolbar.svelte';\n  import PageContainerMainArea from '$lib/components/common/page-container-main-area.svelte';\n  import PageContainer from '$lib/components/common/page-container.svelte';\n  import {\n    announcedPageStatus,\n    goto,\n    parseLocation,\n    updateContentFromHashChange,\n  } from '$lib/services/app/navigation';\n  import { allAssets, overlaidAsset } from '$lib/services/assets';\n  import { assetUpdatesToast } from '$lib/services/assets/data';\n  import { allAssetFolders, selectedAssetFolder } from '$lib/services/assets/folders';\n  import {\n    getFolderLabelByCollection,\n    listedAssets,\n    showAssetOverlay,\n  } from '$lib/services/assets/view';\n  import { isSmallScreen } from '$lib/services/user/env';\n\n  const ROUTE_REGEX = /^\\/assets(?:\\/(?<folderPath>.+?)(?:\\/(?<fileName>[^/]+\\.[A-Za-z0-9]+))?)?$/;\n\n  let isIndexPage = $state(false);\n\n  const selectedAssetFolderLabel = $derived(\n    // `$appLocale` is a key, because `getFolderLabelByCollection` can return a localized label\n    $appLocale && $selectedAssetFolder ? getFolderLabelByCollection($selectedAssetFolder) : '',\n  );\n\n  /**\n   * Navigate to the asset list or asset details page given the URL hash.\n   * @todo Show Not Found page.\n   */\n  const navigate = async () => {\n    const { path } = parseLocation();\n    const match = path.match(ROUTE_REGEX);\n\n    isIndexPage = false;\n\n    if (!match?.groups) {\n      return; // Different page\n    }\n\n    const { folderPath, fileName } = match.groups;\n\n    if (!folderPath) {\n      if ($isSmallScreen) {\n        // Show the asset folder list only\n        $selectedAssetFolder = undefined;\n        $announcedPageStatus = $_('viewing_asset_folder_list');\n        isIndexPage = true;\n      } else {\n        // Redirect to All Assets\n        goto('/assets/-/all');\n      }\n\n      return;\n    }\n\n    const folder =\n      window.history.state?.folder ??\n      $allAssetFolders.find(({ internalPath, collectionName }) =>\n        folderPath === '-/all'\n          ? internalPath === undefined && collectionName === undefined\n          : internalPath === folderPath,\n      );\n\n    if (!folder) {\n      // Not found\n      $selectedAssetFolder = undefined;\n    } else if (!equal($selectedAssetFolder, folder)) {\n      $selectedAssetFolder = folder;\n    }\n\n    if (!fileName) {\n      const count = $listedAssets.length;\n\n      // Wait for `selectedAssetFolderLabel` to be updated\n      await sleep(100);\n\n      $announcedPageStatus = $_(\n        count > 1\n          ? 'viewing_x_asset_folder_many_assets'\n          : count === 1\n            ? 'viewing_x_asset_folder_one_asset'\n            : 'viewing_x_asset_folder_no_assets',\n        { values: { folder: selectedAssetFolderLabel, count } },\n      );\n\n      return;\n    }\n\n    $overlaidAsset = fileName\n      ? $allAssets.find((asset) => asset.path === `${folderPath}/${fileName}`)\n      : undefined;\n    $announcedPageStatus = $overlaidAsset\n      ? $_('viewing_x_asset_details', { values: { name: $overlaidAsset.name } })\n      : $_('file_not_found');\n    $showAssetOverlay = true;\n  };\n\n  onMount(() => {\n    navigate();\n  });\n</script>\n\n<svelte:window\n  onhashchange={(event) => {\n    updateContentFromHashChange(event, navigate, ROUTE_REGEX);\n  }}\n/>\n\n<PageContainer aria-label={$_('asset_library')}>\n  {#snippet primarySidebar()}\n    {#if !$isSmallScreen || isIndexPage}\n      <PrimarySidebar />\n    {/if}\n  {/snippet}\n  {#snippet main()}\n    {#if !$isSmallScreen || !isIndexPage}\n      <PageContainerMainArea\n        id=\"assets-container\"\n        aria-label={$_('x_asset_folder', { values: { folder: selectedAssetFolderLabel } })}\n      >\n        {#snippet primaryToolbar()}\n          <PrimaryToolbar />\n        {/snippet}\n        {#snippet secondaryToolbar()}\n          {#if $listedAssets.length}\n            <SecondaryToolbar />\n          {/if}\n        {/snippet}\n        {#snippet mainContent()}\n          <AssetList />\n        {/snippet}\n        {#snippet secondarySidebar()}\n          <SecondarySidebar />\n        {/snippet}\n      </PageContainerMainArea>\n    {/if}\n  {/snippet}\n</PageContainer>\n\n<AssetDetailsOverlay />\n<EditAssetDialog />\n<RenameAssetDialog />\n\n<Toast bind:show={$assetUpdatesToast.saved}>\n  <Alert status=\"success\">\n    {$_(\n      $assetUpdatesToast.published\n        ? $assetUpdatesToast.count === 1\n          ? 'asset_saved_and_published'\n          : 'assets_saved_and_published'\n        : $assetUpdatesToast.count === 1\n          ? 'asset_saved'\n          : 'assets_saved',\n      {\n        values: { count: $assetUpdatesToast.count },\n      },\n    )}\n  </Alert>\n</Toast>\n\n<Toast bind:show={$assetUpdatesToast.moved}>\n  <Alert status=\"success\">\n    {$_($assetUpdatesToast.count === 1 ? 'asset_moved' : 'assets_moved', {\n      values: { count: $assetUpdatesToast.count },\n    })}\n  </Alert>\n</Toast>\n\n<Toast bind:show={$assetUpdatesToast.renamed}>\n  <Alert status=\"success\">\n    {$_($assetUpdatesToast.count === 1 ? 'asset_renamed' : 'assets_renamed', {\n      values: { count: $assetUpdatesToast.count },\n    })}\n  </Alert>\n</Toast>\n\n<Toast bind:show={$assetUpdatesToast.deleted}>\n  <Alert status=\"success\">\n    {$_($assetUpdatesToast.count === 1 ? 'asset_deleted' : 'assets_deleted', {\n      values: { count: $assetUpdatesToast.count },\n    })}\n  </Alert>\n</Toast>\n","<script>\n  import { Alert, ConfirmationDialog } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import UploadAssetsPreview from '$lib/components/assets/shared/upload-assets-preview.svelte';\n  import { processedAssets, uploadingAssets } from '$lib/services/assets';\n  import { saveAssets } from '$lib/services/assets/data/create';\n  import { showAssetOverlay, showUploadAssetsConfirmDialog } from '$lib/services/assets/view';\n  import { getDefaultMediaLibraryOptions } from '$lib/services/integrations/media-libraries/default';\n  import { formatSize } from '$lib/services/utils/file';\n\n  /** @type {File[]} */\n  let files = $state([]);\n\n  const { files: originalFiles, folder, originalAsset } = $derived($uploadingAssets);\n  const { processing, undersizedFiles, oversizedFiles, transformedFileMap } =\n    $derived($processedAssets);\n  const { max_file_size: maxSize } = $derived(getDefaultMediaLibraryOptions().config);\n\n  $effect(() => {\n    files = [...undersizedFiles];\n  });\n\n  $effect(() => {\n    if (!$showAssetOverlay) {\n      // Close the dialog\n      $uploadingAssets = { folder: undefined, files: [] };\n    }\n  });\n</script>\n\n<!-- @todo Confirm to replace an old image if a file with the same same exists. -->\n\n<ConfirmationDialog\n  open={$showUploadAssetsConfirmDialog}\n  title={$_(originalAsset ? 'replace_asset' : 'upload_assets')}\n  okLabel={$_(originalAsset ? 'replace' : 'upload')}\n  okDisabled={!files.length}\n  onOk={async () => {\n    await saveAssets({ files, folder, originalAsset }, { commitType: 'uploadMedia' });\n    $uploadingAssets = { folder: undefined, files: [] };\n  }}\n  onCancel={() => {\n    $uploadingAssets = { folder: undefined, files: [] };\n  }}\n>\n  {#if processing}\n    <div role=\"status\">\n      {$_(originalFiles.length === 1 ? 'processing_file' : 'processing_files')}\n    </div>\n  {/if}\n  {#if files.length}\n    <div role=\"group\" class=\"section uploading\" aria-label={$_('uploading_files')}>\n      <div role=\"none\">\n        {#if originalAsset}\n          {$_('confirm_replacing_file', {\n            values: { name: originalAsset.name },\n          })}\n        {:else}\n          {$_(files.length === 1 ? 'confirm_uploading_file' : 'confirm_uploading_files', {\n            values: { count: files.length, folder: `/${folder?.internalPath}` },\n          })}\n        {/if}\n      </div>\n      <UploadAssetsPreview bind:files {transformedFileMap} />\n    </div>\n  {/if}\n  {#if oversizedFiles.length}\n    <div role=\"group\" class=\"section oversized\" aria-label={$_('oversized_files')}>\n      <Alert status=\"warning\">\n        {$_(oversizedFiles.length === 1 ? 'warning_oversized_file' : 'warning_oversized_files', {\n          values: { size: formatSize(/** @type {number} */ (maxSize)) },\n        })}\n      </Alert>\n      <UploadAssetsPreview files={oversizedFiles} {transformedFileMap} removable={false} />\n    </div>\n  {/if}\n</ConfirmationDialog>\n\n<style lang=\"scss\">\n  .section {\n    display: flex;\n    flex-direction: column;\n    gap: 16px;\n\n    &:not(:first-child) {\n      margin-top: 16px;\n    }\n\n    & > :global(*) {\n      flex: none;\n    }\n\n    &.oversized :global(.files) {\n      opacity: 0.5;\n    }\n  }\n</style>\n","<script>\n  import { Dialog, FilePicker } from '@sveltia/ui';\n  import mime from 'mime';\n  import { _ } from 'svelte-i18n';\n\n  import DropZone from '$lib/components/assets/shared/drop-zone.svelte';\n  import { uploadingAssets } from '$lib/services/assets';\n  import { targetAssetFolder } from '$lib/services/assets/folders';\n  import { showAssetOverlay, showUploadAssetsDialog } from '$lib/services/assets/view';\n  import { hasMouse } from '$lib/services/user/env';\n\n  /** @type {FilePicker | undefined} */\n  let filePicker = $state();\n\n  const { originalAsset } = $derived($uploadingAssets);\n  const multiple = $derived(!originalAsset);\n  const accept = $derived(\n    originalAsset ? (mime.getType(originalAsset.name) ?? undefined) : undefined,\n  );\n\n  /**\n   * Update the asset list, which will show the confirmation dialog.\n   * @param {File[]} files Selected files.\n   */\n  const onSelect = (files) => {\n    if (!files.length) {\n      return;\n    }\n\n    $uploadingAssets = {\n      folder: originalAsset ? originalAsset.folder : $targetAssetFolder,\n      files,\n      originalAsset,\n    };\n    $showUploadAssetsDialog = false;\n  };\n\n  $effect(() => {\n    // Open the file picker directly if drag & drop is not supported (on mobile)\n    if (!$hasMouse && $showUploadAssetsDialog) {\n      filePicker?.open();\n    }\n  });\n\n  $effect(() => {\n    if (!$showAssetOverlay) {\n      $showUploadAssetsDialog = false;\n    }\n  });\n</script>\n\n{#if $hasMouse}\n  <Dialog\n    title={originalAsset\n      ? $_('replace_x', { values: { name: originalAsset.name } })\n      : $_('upload_assets')}\n    bind:open={$showUploadAssetsDialog}\n    showOk={false}\n  >\n    <DropZone\n      showUploadButton={true}\n      {accept}\n      {multiple}\n      onDrop={({ files }) => {\n        onSelect(files);\n      }}\n    />\n  </Dialog>\n{:else}\n  <FilePicker\n    bind:this={filePicker}\n    {accept}\n    {multiple}\n    onSelect={({ files }) => {\n      onSelect(files);\n    }}\n    onCancel={() => {\n      $showUploadAssetsDialog = false;\n    }}\n  />\n{/if}\n","<script>\n  import { _ } from 'svelte-i18n';\n  import YAML from 'yaml';\n\n  import PageContainer from '$lib/components/common/page-container.svelte';\n  import { rawSiteConfig } from '$lib/services/config';\n</script>\n\n<PageContainer aria-label={$_('site_configuration_editor')}>\n  {#snippet main()}\n    <div role=\"blockquote\" aria-label={$_('site_config')}>\n      <pre>{YAML.stringify(rawSiteConfig)}</pre>\n    </div>\n  {/snippet}\n</PageContainer>\n\n<style lang=\"scss\">\n  div {\n    flex: auto;\n    overflow: auto;\n  }\n\n  pre {\n    margin: 0;\n    padding: 16px;\n    width: 100%;\n    min-width: fit-content;\n    background-color: var(--sui-primary-background-color);\n  }\n</style>\n","import { getBlobRegex } from '@sveltia/utils/file';\nimport { toRaw } from '@sveltia/utils/object';\nimport { IndexedDB } from '@sveltia/utils/storage';\nimport { get, writable } from 'svelte/store';\n\nimport { backend } from '$lib/services/backends';\nimport { siteConfigVersion } from '$lib/services/config';\nimport { entryDraft, entryDraftModified, i18nAutoDupEnabled } from '$lib/services/contents/draft';\nimport { createProxy } from '$lib/services/contents/draft/create/proxy';\nimport { prefs } from '$lib/services/user/prefs';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import {\n * EntryDraft,\n * EntryDraftBackup,\n * LocaleContentMap,\n * LocaleSlugMap,\n * } from '$lib/types/private';\n */\n\n/**\n * @type {number | NodeJS.Timeout}\n */\nlet backupTimeout = 0;\n/**\n * @type {IndexedDB | null | undefined}\n */\nlet backupDB = undefined;\n\n/**\n * Default for {@link backupToastState}.\n */\nconst BACKUP_TOAST_DEFAULT_STATE = {\n  saved: false,\n  restored: false,\n  deleted: false,\n};\n\n/**\n * @type {Writable<{ show: boolean, timestamp?: Date, resolve?: Function }>}\n */\nexport const restoreDialogState = writable({ show: false });\n/**\n * @type {Writable<{ saved: boolean, restored: boolean, deleted: boolean }>}\n */\nexport const backupToastState = writable({ ...BACKUP_TOAST_DEFAULT_STATE });\n\n/**\n * Delete a draft stored in IndexedDB.\n * @param {string} collectionName Collection name.\n * @param {string} [slug] Entry slug. Existing entry only.\n * @returns {Promise<void>} Result.\n */\nexport const deleteBackup = async (collectionName, slug = '') => {\n  await backupDB?.delete([collectionName, slug]);\n};\n\n/**\n * Get a draft backup stored in IndexedDB.\n * @param {string} collectionName Collection name.\n * @param {string} [slug] Entry slug. Existing entry only.\n * @returns {Promise<EntryDraftBackup | null>} Backup.\n */\nexport const getBackup = async (collectionName, slug = '') => {\n  /** @type {EntryDraftBackup | undefined} */\n  const backup = await backupDB?.get([collectionName, slug]);\n\n  if (!backup) {\n    return null;\n  }\n\n  if (backup.siteConfigVersion === get(siteConfigVersion)) {\n    return backup;\n  }\n\n  // Discard the backup if the site configuration has been changed since the backup was created,\n  // because there is a risk of data corruption\n  await deleteBackup(collectionName, slug);\n\n  return null;\n};\n\n/**\n * Backup the entry draft to IndexedDB.\n * @param {EntryDraft} draft Draft.\n */\nexport const saveBackup = async (draft) => {\n  if (!(get(prefs).useDraftBackup ?? true)) {\n    return;\n  }\n\n  const {\n    collectionName,\n    fileName,\n    originalEntry,\n    currentLocales = {},\n    currentSlugs = {},\n    currentValues = {},\n    files,\n  } = draft;\n\n  const slug = fileName ?? originalEntry?.slug ?? '';\n\n  if (get(entryDraftModified)) {\n    /** @type {EntryDraftBackup} */\n    const backup = {\n      timestamp: new Date(),\n      siteConfigVersion: /** @type {string} */ (get(siteConfigVersion)),\n      collectionName,\n      slug,\n      currentLocales,\n      currentSlugs: /** @type {LocaleSlugMap} */ (toRaw(currentSlugs)),\n      currentValues: /** @type {LocaleContentMap} */ (toRaw(currentValues)),\n      files,\n    };\n\n    await backupDB?.put(backup);\n  } else {\n    const backup = await getBackup(collectionName, slug);\n\n    if (backup) {\n      await deleteBackup(collectionName, slug);\n    }\n  }\n};\n\n/**\n * Restore a draft backup to the current entry draft.\n * @param {object} args Arguments.\n * @param {EntryDraftBackup} args.backup Backup to restore.\n * @param {string} args.collectionName Collection name.\n * @param {string} [args.fileName] Collection file name. File/singleton collection only.\n */\nconst restoreBackup = ({ backup, collectionName, fileName }) => {\n  const { currentLocales, currentSlugs, currentValues, files } = backup;\n\n  i18nAutoDupEnabled.set(false);\n\n  entryDraft.update((draft) => {\n    if (draft) {\n      draft.currentLocales = currentLocales;\n      draft.currentSlugs = currentSlugs;\n\n      Object.entries(currentValues).forEach(([locale, valueMap]) => {\n        Object.entries(valueMap).forEach(([keyPath, value]) => {\n          if (typeof value === 'string') {\n            [...value.matchAll(getBlobRegex('g'))].forEach(([blobURL]) => {\n              let cache = files[blobURL];\n\n              // Support `LegacyEntryFileMap`\n              // @todo Remove this before the 1.0 release\n              if (cache instanceof File) {\n                cache = { file: cache, folder: undefined };\n              }\n\n              if (cache) {\n                // Regenerate a blob URL\n                const newURL = URL.createObjectURL(cache.file);\n\n                valueMap[keyPath] = value.replaceAll(blobURL, newURL);\n                draft.files[newURL] = cache;\n              }\n            });\n          }\n        });\n\n        if (draft.currentValues[locale]) {\n          Object.assign(draft.currentValues[locale], valueMap);\n        } else {\n          draft.currentValues[locale] = createProxy({\n            draft: { collectionName, fileName },\n            locale,\n            target: structuredClone(valueMap),\n          });\n        }\n\n        if (!draft.originalValues[locale]) {\n          draft.originalValues[locale] = {};\n        }\n      });\n    }\n\n    return draft;\n  });\n\n  i18nAutoDupEnabled.set(true);\n};\n\n/**\n * Check if a draft backup is available, and restore it if requested by the user.\n * @param {object} args Arguments.\n * @param {string} args.collectionName Collection name.\n * @param {string} [args.fileName] Collection file name. File/singleton collection only.\n * @param {string} [args.slug] Entry slug. Existing entry only.\n */\nexport const restoreBackupIfNeeded = async ({ collectionName, fileName, slug = '' }) => {\n  if (!(get(prefs).useDraftBackup ?? true)) {\n    return;\n  }\n\n  const backup = await getBackup(collectionName, slug);\n\n  if (!backup) {\n    return;\n  }\n\n  const { timestamp } = backup;\n\n  /** @type {boolean | undefined} */\n  const doRestore = await new Promise((resolve) => {\n    // The promise will be resolved once the Restore or Discard button is clicked on the dialog\n    restoreDialogState.set({ show: true, timestamp, resolve });\n  });\n\n  if (doRestore === undefined) {\n    return;\n  }\n\n  if (doRestore) {\n    restoreBackup({ backup, collectionName, fileName });\n  } else {\n    await deleteBackup(collectionName, slug);\n  }\n\n  backupToastState.set({ restored: doRestore, deleted: !doRestore, saved: false });\n};\n\n/**\n * Check if the current entry’s draft backup has been saved, and if so, show a toast notification.\n */\nexport const showBackupToastIfNeeded = async () => {\n  if (!(get(prefs).useDraftBackup ?? true)) {\n    return;\n  }\n\n  const draft = get(entryDraft);\n\n  if (!draft || get(backupToastState).saved) {\n    return;\n  }\n\n  const { collectionName, originalEntry } = draft;\n  const backup = await getBackup(collectionName, originalEntry?.slug);\n\n  if (backup) {\n    backupToastState.set({ restored: false, deleted: false, saved: true });\n  }\n};\n\n/**\n * Reset {@link backupToastState}.\n */\nexport const resetBackupToastState = () => {\n  backupToastState.set({ ...BACKUP_TOAST_DEFAULT_STATE });\n};\n\nbackend.subscribe((_backend) => {\n  if (_backend && !backupDB) {\n    const { databaseName } = _backend.repository ?? {};\n\n    if (databaseName) {\n      backupDB = new IndexedDB(databaseName, 'draft-backups', {\n        keyPath: ['collectionName', 'slug'], // Composite key\n      });\n\n      return;\n    }\n  }\n\n  backupDB = null;\n});\n\n// Automatically backup the draft; use a timer to avoid typing lag\nentryDraft.subscribe((draft) => {\n  globalThis.clearTimeout(backupTimeout);\n\n  if (draft && backupDB) {\n    backupTimeout = globalThis.setTimeout(() => {\n      saveBackup(draft);\n    }, 500);\n  }\n});\n","<script>\n  import { Alert, ConfirmationDialog, Toast } from '@sveltia/ui';\n  import { _, locale as appLocale } from 'svelte-i18n';\n\n  import { backupToastState, restoreDialogState } from '$lib/services/contents/draft/backup';\n  import { showContentOverlay } from '$lib/services/contents/editor';\n\n  const now = $derived(new Date());\n  const { resolve, timestamp } = $derived($restoreDialogState);\n  const sameYear = $derived(now.getUTCFullYear() === timestamp?.getUTCFullYear());\n  const sameMonth = $derived(sameYear && now.getUTCMonth() === timestamp?.getUTCMonth());\n  const sameDay = $derived(sameMonth && now.getUTCDate() === timestamp?.getUTCDate());\n  const datetime = $derived(\n    timestamp?.toLocaleString($appLocale ?? undefined, {\n      year: sameYear ? undefined : 'numeric',\n      month: sameDay ? undefined : 'short',\n      day: sameDay ? undefined : 'numeric',\n      hour: 'numeric',\n      minute: 'numeric',\n    }),\n  );\n\n  $effect(() => {\n    if (!$showContentOverlay && $restoreDialogState.show) {\n      // Close the dialog when the Content Editor is closed\n      $restoreDialogState.show = false;\n      resolve?.();\n    }\n  });\n</script>\n\n<ConfirmationDialog\n  bind:open={$restoreDialogState.show}\n  title={$_('restore_backup_title')}\n  okLabel={$_('restore')}\n  cancelLabel={$_('discard')}\n  onOk={() => {\n    resolve?.(true);\n  }}\n  onCancel={() => {\n    resolve?.(false);\n  }}\n>\n  {$_('restore_backup_description', { values: { datetime } })}\n</ConfirmationDialog>\n\n<Toast bind:show={$backupToastState.saved}>\n  <Alert status=\"info\">\n    {$_('draft_backup_saved')}\n  </Alert>\n</Toast>\n\n<Toast bind:show={$backupToastState.restored}>\n  <Alert status=\"success\">\n    {$_('draft_backup_restored')}\n  </Alert>\n</Toast>\n\n<Toast bind:show={$backupToastState.deleted}>\n  <Alert status=\"info\">\n    {$_('draft_backup_deleted')}\n  </Alert>\n</Toast>\n","<script>\n  import VisibilityObserver from '$lib/components/common/visibility-observer.svelte';\n  import FieldEditor from '$lib/components/contents/details/editor/field-editor.svelte';\n  import { entryDraft } from '$lib/services/contents/draft';\n\n  /**\n   * @import { InternalLocaleCode } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {InternalLocaleCode} locale Current pane’s locale.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const fields = $derived($entryDraft?.fields ?? []);\n</script>\n\n<VisibilityObserver>\n  {#each fields as fieldConfig (fieldConfig.name)}\n    <VisibilityObserver>\n      <FieldEditor keyPath={fieldConfig.name} {locale} {fieldConfig} />\n    </VisibilityObserver>\n  {/each}\n</VisibilityObserver>\n","<!--\n  @component An empty component that serves as a placeholder.\n-->\n<script>\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Snippet} [children] Slot content.\n   */\n\n  /** @type {Props & Record<string, any>} */\n  let {\n    /* eslint-disable prefer-const */\n    children = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n{@render children?.()}\n","<!--\n  @component Implement iframe for custom preview styles.\n  @see https://decapcms.org/docs/customization/\n-->\n<script>\n  import { sanitize } from 'isomorphic-dompurify';\n  import { mount } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import Placeholder from '$lib/components/common/placeholder.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import { InternalLocaleCode } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {InternalLocaleCode} locale Current pane’s locale.\n   * @property {string} styleURL URL of the custom stylesheet to apply in the iframe.\n   * @property {Snippet} children Preview content to render inside the iframe.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    styleURL,\n    children,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /**\n   * Reference to the iframe element used for custom preview.\n   * @type {HTMLIFrameElement | undefined}\n   */\n  let iframe = $state();\n\n  /**\n   * Generate the HTML content for the iframe.\n   * @returns {string} The HTML string.\n   */\n  const generateHTML = () => `\n    <!DOCTYPE html>\n    <html lang=\"${sanitize(locale)}\">\n    <head>\n      <meta charset=\"UTF-8\">\n      <link rel=\"stylesheet\" href=\"${sanitize(styleURL)}\">\n    </head>\n    <body></body>\n    </html>\n  `;\n\n  /**\n   * Mount the Svelte placeholder component into the iframe’s body. This way, the iframe content\n   * becomes reactive and can be updated when the fields change.\n   */\n  const mountPlaceholder = () => {\n    const target = iframe?.contentDocument?.body;\n\n    if (target) {\n      mount(Placeholder, { target, props: { children } });\n    }\n  };\n\n  /**\n   * Initialize the iframe with a custom stylesheet.\n   */\n  const initializeIframe = () => {\n    if (iframe) {\n      iframe.addEventListener('load', mountPlaceholder, { once: true });\n      iframe.src = URL.createObjectURL(new Blob([generateHTML()], { type: 'text/html' }));\n    }\n  };\n\n  $effect(() => {\n    if (iframe) {\n      initializeIframe();\n    }\n  });\n</script>\n\n<iframe class=\"preview\" title={$_('content_preview')} bind:this={iframe}></iframe>\n\n<style lang=\"scss\">\n  iframe {\n    display: block;\n    border: none;\n    width: 100%;\n    height: 100%;\n  }\n</style>\n","<script>\n  import { _ } from 'svelte-i18n';\n\n  import VisibilityObserver from '$lib/components/common/visibility-observer.svelte';\n  import EntryPreviewIframe from '$lib/components/contents/details/preview/entry-preview-iframe.svelte';\n  import FieldPreview from '$lib/components/contents/details/preview/field-preview.svelte';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { customPreviewStyle } from '$lib/services/contents/editor';\n\n  /**\n   * @import { InternalLocaleCode } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {InternalLocaleCode} locale Current pane’s locale.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const fields = $derived($entryDraft?.fields ?? []);\n\n  /**\n   * Custom stylesheet URL registered with the `CMS.registerPreviewStyle()` API.\n   * @type {string | undefined}\n   * @see https://decapcms.org/docs/customization/\n   */\n  const styleURL = customPreviewStyle.href;\n</script>\n\n{#snippet children()}\n  {#each fields as fieldConfig (fieldConfig.name)}\n    <VisibilityObserver>\n      <FieldPreview keyPath={fieldConfig.name} {locale} {fieldConfig} />\n    </VisibilityObserver>\n  {/each}\n{/snippet}\n\n<VisibilityObserver>\n  {#if styleURL}\n    <EntryPreviewIframe {locale} {styleURL} {children} />\n  {:else}\n    <div role=\"document\" aria-label={$_('content_preview')}>\n      {@render children()}\n    </div>\n  {/if}\n</VisibilityObserver>\n\n<style lang=\"scss\">\n  div {\n    padding: 8px 16px;\n  }\n</style>\n","import { IndexedDB } from '@sveltia/utils/storage';\nimport equal from 'fast-deep-equal';\nimport { get, writable } from 'svelte/store';\n\nimport { backend } from '$lib/services/backends';\nimport { selectAssetsView } from '$lib/services/contents/editor';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import { BackendService, EntryEditorView } from '$lib/types/private';\n */\n\n/**\n * @type {Writable<EntryEditorView | undefined>}\n */\nexport const entryEditorSettings = writable();\n\n/**\n * Initialize {@link entryEditorSettings}, {@link selectAssetsView} and relevant subscribers.\n * @param {BackendService} _backend Backend service.\n */\nexport const initSettings = async ({ repository }) => {\n  const { databaseName } = repository ?? {};\n  const settingsDB = databaseName ? new IndexedDB(databaseName, 'ui-settings') : null;\n  const storageKey = 'entry-view';\n\n  const settings = {\n    showPreview: true,\n    syncScrolling: true,\n    selectAssetsView: { type: 'grid' },\n    ...(await settingsDB?.get(storageKey)),\n  };\n\n  entryEditorSettings.set(settings);\n  selectAssetsView.set(settings.selectAssetsView);\n\n  entryEditorSettings.subscribe((_settings) => {\n    (async () => {\n      try {\n        if (!equal(_settings, await settingsDB?.get(storageKey))) {\n          await settingsDB?.set(storageKey, _settings);\n        }\n      } catch {\n        //\n      }\n    })();\n  });\n\n  selectAssetsView.subscribe((view) => {\n    if (!view || !Object.keys(view).length) {\n      return;\n    }\n\n    const savedView = get(entryEditorSettings)?.selectAssetsView ?? {};\n\n    if (!equal(view, savedView)) {\n      entryEditorSettings.update((_settings) => ({ ..._settings, selectAssetsView: view }));\n    }\n  });\n};\n\nbackend.subscribe((_backend) => {\n  if (_backend && !get(entryEditorSettings)) {\n    initSettings(_backend);\n  }\n});\n","<script>\n  import { Button, EmptyState } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import { _ } from 'svelte-i18n';\n\n  import EntryEditor from '$lib/components/contents/details/editor/entry-editor.svelte';\n  import EntryPreview from '$lib/components/contents/details/preview/entry-preview.svelte';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { toggleLocale } from '$lib/services/contents/draft/update/locale';\n  import { entryEditorSettings } from '$lib/services/contents/editor/settings';\n  import { getLocaleLabel } from '$lib/services/contents/i18n';\n\n  /**\n   * @import { Writable } from 'svelte/store';\n   * @import { EntryEditorPane } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} id The wrapper element’s `id` attribute.\n   * @property {Writable<?EntryEditorPane>} thisPane This pane’s mode and locale.\n   * @property {HTMLElement} [thisPaneContentArea] This pane’s content area.\n   * @property {HTMLElement} [thatPaneContentArea] Another pane’s content area.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    id,\n    thisPane,\n    thisPaneContentArea = $bindable(),\n    thatPaneContentArea = $bindable(),\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const { syncScrolling } = $derived($entryEditorSettings ?? {});\n  const locale = $derived($thisPane?.locale);\n  const mode = $derived($thisPane?.mode);\n  const hasContent = $derived(!!locale && !!$state.snapshot($entryDraft?.currentValues[locale]));\n  const labelOptions = $derived({ values: { locale: locale ? getLocaleLabel(locale) : '' } });\n  const MainContent = $derived(mode === 'preview' ? EntryPreview : EntryEditor);\n\n  /** @type {HTMLElement | undefined} */\n  let contentArea = $state();\n\n  /**\n   * Sync the scroll position with the other edit/preview pane.\n   */\n  const syncScrollPosition = () => {\n    window.requestAnimationFrame(() => {\n      if (!syncScrolling || !contentArea || !thisPaneContentArea || !thatPaneContentArea) {\n        return;\n      }\n\n      const isIframe = thisPaneContentArea !== contentArea;\n      const { x, y } = isIframe ? { x: 0, y: 0 } : thisPaneContentArea.getBoundingClientRect();\n      const { ownerDocument, scrollTop, scrollHeight, clientHeight } = thisPaneContentArea;\n      const scrollTopMax = scrollHeight - clientHeight;\n      const scrollRatio = scrollTop / scrollTopMax;\n\n      // Find a field section at the top left corner of the content area\n      const thisElement = /** @type {HTMLElement | undefined} */ (\n        ownerDocument.elementsFromPoint(x + 80, y).find((e) => e.matches('[data-key-path]'))\n      );\n\n      if (!thisElement) {\n        // Calculate the scroll position based on the current scroll position of the this pane\n        thatPaneContentArea.scrollTop = thatPaneContentArea.scrollHeight * scrollRatio;\n\n        return;\n      }\n\n      const { keyPath } = thisElement.dataset;\n      const { top, height } = thisElement.getBoundingClientRect();\n      const ratio = (y - top) / height;\n\n      const thatElement = /** @type {HTMLElement | undefined} */ (\n        thatPaneContentArea.querySelector(`[data-key-path=\"${CSS.escape(keyPath ?? '')}\"]`)\n      );\n\n      if (ratio < 0 || ratio > 1 || !thatElement) {\n        return;\n      }\n\n      // Scroll the other pane to the corresponding element, adjusting for the current scroll\n      // position and the ratio of the scroll position within the element.\n      thatPaneContentArea.scrollTop = thatElement.offsetTop - y + thatElement.clientHeight * ratio;\n    });\n  };\n\n  /** @type {AddEventListenerOptions} */\n  const eventOptions = { capture: true, passive: true };\n\n  /**\n   * Initialize the scroll synchronization by setting up event listeners and ensuring the content\n   * area is ready. The content area is either the main content area or the iframe’s content area.\n   * An iframe is used only when a custom preview stylesheet is provided.\n   */\n  const initializeScrollSync = async () => {\n    if (!contentArea) {\n      return;\n    }\n\n    if (thisPaneContentArea) {\n      // Remove previous event listeners if they exist\n      thisPaneContentArea.removeEventListener('wheel', syncScrollPosition, eventOptions);\n      thisPaneContentArea.removeEventListener('touchmove', syncScrollPosition, eventOptions);\n    }\n\n    // Check if the preview iframe is used in the preview mode\n    const iframe = /** @type {HTMLIFrameElement | null} */ (\n      contentArea.querySelector('iframe.preview')\n    );\n\n    if (iframe) {\n      // Wait for the content to be loaded in the iframe\n      await sleep(250);\n      thisPaneContentArea = /** @type {HTMLElement} */ (iframe?.contentDocument?.firstElementChild);\n    } else {\n      thisPaneContentArea = contentArea;\n    }\n\n    if (thisPaneContentArea) {\n      thisPaneContentArea.scrollTop = 0;\n      // Add event listeners manually to use passive mode\n      thisPaneContentArea.addEventListener('wheel', syncScrollPosition, eventOptions);\n      thisPaneContentArea.addEventListener('touchmove', syncScrollPosition, eventOptions);\n    }\n  };\n\n  $effect(() => {\n    // Initialize the scroll synchronization when the content area is ready. The pane mode is also a\n    // dependency because the edit mode always uses the main content area, while the preview mode\n    // may use an iframe if a custom preview stylesheet is provided.\n    void [$thisPane?.mode, contentArea];\n    initializeScrollSync();\n  });\n</script>\n\n<div role=\"none\" {id} class=\"wrapper\">\n  {#if locale && $entryDraft?.currentLocales[locale]}\n    <div role=\"none\" class=\"content\" bind:this={contentArea}>\n      <MainContent {locale} />\n    </div>\n  {:else if mode === 'edit'}\n    <EmptyState>\n      <span role=\"alert\">\n        {$_(hasContent ? 'locale_x_now_disabled' : 'locale_x_has_been_disabled', labelOptions)}\n      </span>\n      <Button\n        variant=\"tertiary\"\n        label={$_(hasContent ? 'reenable_x_locale' : 'enable_x_locale', labelOptions)}\n        onclick={() => {\n          if (locale) {\n            toggleLocale(locale);\n          }\n        }}\n      />\n    </EmptyState>\n  {/if}\n</div>\n\n<style lang=\"scss\">\n  .wrapper {\n    display: contents;\n  }\n\n  .content {\n    --field-editor-padding: 16px;\n    flex: auto;\n    overflow-y: auto;\n    scroll-behavior: auto; /* Don’t use smooth scroll for syncing */\n    overscroll-behavior-y: contain;\n\n    @media (width < 768px) {\n      --field-editor-padding: 12px;\n    }\n  }\n</style>\n","<script>\n  import { Icon, Option, Select, SelectButton, SelectButtonGroup } from '@sveltia/ui';\n  import { writable } from 'svelte/store';\n  import { _ } from 'svelte-i18n';\n\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { entryEditorSettings } from '$lib/services/contents/editor/settings';\n  import { getLocaleLabel } from '$lib/services/contents/i18n';\n  import { DEFAULT_I18N_CONFIG } from '$lib/services/contents/i18n/config';\n  import { isMediumScreen, isSmallScreen } from '$lib/services/user/env';\n\n  /**\n   * @import { Writable } from 'svelte/store';\n   * @import { EntryEditorPane } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} id The wrapper element’s `id` attribute.\n   * @property {Writable<?EntryEditorPane>} thisPane This pane’s mode and locale.\n   * @property {Writable<?EntryEditorPane>} [thatPane] Another pane’s mode and locale.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    id,\n    thisPane,\n    thatPane = writable(null),\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const collection = $derived($entryDraft?.collection);\n  const collectionFile = $derived($entryDraft?.collectionFile);\n  const { allLocales } = $derived((collectionFile ?? collection)?._i18n ?? DEFAULT_I18N_CONFIG);\n  const listedLocales = $derived(\n    $isSmallScreen || $isMediumScreen\n      ? [...allLocales]\n      : allLocales.filter((locale) => !($thatPane?.mode === 'edit' && $thatPane.locale === locale)),\n  );\n  const hasAnyError = $derived(\n    Object.entries($entryDraft?.validities ?? {}).some(\n      ([locale, validityMap]) =>\n        listedLocales.includes(locale) &&\n        Object.values(validityMap ?? {}).some(({ valid }) => !valid),\n    ),\n  );\n  const canPreview = $derived($entryDraft?.canPreview ?? true);\n  const useDropDown = $derived($isSmallScreen || $isMediumScreen || allLocales.length >= 5);\n  const SelectComponent = $derived(useDropDown ? Select : SelectButtonGroup);\n  const OptionComponent = $derived(useDropDown ? Option : SelectButton);\n  const variant = $derived(useDropDown ? undefined : 'tertiary');\n  const size = $derived(useDropDown ? undefined : 'small');\n</script>\n\n<div role=\"none\" class=\"wrapper\">\n  <SelectComponent\n    class={hasAnyError && useDropDown ? 'error' : undefined}\n    aria-label={$_('switch_locale')}\n    aria-controls={id.replace('-header', '-body')}\n  >\n    <!-- Need an inner to style elements inside the <dialog> -->\n    <div role=\"none\" class=\"inner\">\n      {#each listedLocales as locale}\n        {@const label = getLocaleLabel(locale)}\n        {@const disabled = !$entryDraft?.currentLocales[locale]}\n        {@const hasError = Object.values($entryDraft?.validities[locale] ?? {}).some(\n          ({ valid }) => !valid,\n        )}\n        <OptionComponent\n          {variant}\n          {size}\n          {label}\n          aria-label=\"{label} {disabled\n            ? $_('locale_content_disabled_short')\n            : hasError\n              ? $_('locale_content_error_short')\n              : ''}\"\n          selected={$thisPane?.mode === 'edit' && $thisPane.locale === locale}\n          class={hasError ? 'error' : ''}\n          data-mode=\"edit\"\n          onSelect={() => {\n            $thisPane = { mode: 'edit', locale };\n\n            if ($thatPane?.mode === 'preview') {\n              $thatPane = { mode: 'preview', locale };\n            }\n          }}\n        >\n          {#snippet startIcon()}\n            {#if disabled}\n              <Icon name=\"edit_off\" />\n            {:else if hasError}\n              <Icon name=\"error\" />\n            {/if}\n          {/snippet}\n        </OptionComponent>\n      {/each}\n      {#if $thatPane?.mode === 'edit' && canPreview && $entryEditorSettings?.showPreview}\n        <OptionComponent\n          {variant}\n          {size}\n          label={$_('preview')}\n          selected={$thisPane?.mode === 'preview'}\n          data-mode=\"preview\"\n          onSelect={() => {\n            $thisPane = { mode: 'preview', locale: $thatPane?.locale ?? '' };\n          }}\n        />\n      {/if}\n    </div>\n  </SelectComponent>\n</div>\n\n<style lang=\"scss\">\n  .wrapper {\n    display: contents;\n\n    :global {\n      .combobox {\n        @media (width < 1024px) {\n          min-width: 128px;\n          --sui-textbox-height: 32px;\n          --sui-button-medium-height: 32px;\n        }\n\n        &.error [role='combobox'] {\n          border-color: var(--sui-error-border-color);\n        }\n      }\n    }\n  }\n\n  .inner {\n    display: contents;\n\n    :global {\n      :is(.error, .error button[data-mode='edit']) {\n        color: var(--sui-error-foreground-color) !important;\n      }\n    }\n  }\n</style>\n","<script>\n  import { Button, Icon } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  /**\n   * @import { Writable } from 'svelte/store';\n   * @import { EntryEditorPane } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Writable<?EntryEditorPane>} thisPane This pane’s mode and locale.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    thisPane,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<Button\n  variant=\"ghost\"\n  iconic\n  aria-label={$_('preview')}\n  pressed={$thisPane?.mode === 'preview'}\n  onclick={() => {\n    $thisPane = {\n      mode: $thisPane?.mode === 'preview' ? 'edit' : 'preview',\n      locale: $thisPane?.locale ?? '',\n    };\n  }}\n>\n  {#snippet startIcon()}\n    <Icon name=\"visibility\" />\n  {/snippet}\n</Button>\n","<script>\n  import { Divider, Menu, MenuButton, MenuItem, Spacer, Toolbar } from '@sveltia/ui';\n  import equal from 'fast-deep-equal';\n  import { writable } from 'svelte/store';\n  import { _ } from 'svelte-i18n';\n\n  import CopyMenuItems from '$lib/components/contents/details/editor/copy-menu-items.svelte';\n  import TranslateButton from '$lib/components/contents/details/editor/translate-button.svelte';\n  import LocaleSwitcher from '$lib/components/contents/details/locale-switcher.svelte';\n  import PreviewButton from '$lib/components/contents/details/preview-button.svelte';\n  import { backend } from '$lib/services/backends';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { toggleLocale } from '$lib/services/contents/draft/update/locale';\n  import { revertChanges } from '$lib/services/contents/draft/update/revert';\n  import { getEntryPreviewURL, getEntryRepoBlobURL } from '$lib/services/contents/entry';\n  import { getLocaleLabel } from '$lib/services/contents/i18n';\n  import { DEFAULT_I18N_CONFIG } from '$lib/services/contents/i18n/config';\n  import { isMediumScreen, isSmallScreen } from '$lib/services/user/env';\n  import { prefs } from '$lib/services/user/prefs';\n\n  /**\n   * @import { Writable } from 'svelte/store';\n   * @import { EntryEditorPane } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} id The wrapper element’s `id` attribute.\n   * @property {Writable<?EntryEditorPane>} thisPane This pane’s mode and locale.\n   * @property {Writable<?EntryEditorPane>} [thatPane] Another pane’s mode and locale.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    id,\n    thisPane,\n    thatPane = writable(null),\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const collection = $derived($entryDraft?.collection);\n  const collectionFile = $derived($entryDraft?.collectionFile);\n  const originalEntry = $derived($entryDraft?.originalEntry);\n  const originalValues = $derived($entryDraft?.originalValues ?? {});\n  const { i18nEnabled, saveAllLocales, allLocales, defaultLocale } = $derived(\n    (collectionFile ?? collection)?._i18n ?? DEFAULT_I18N_CONFIG,\n  );\n  const isLocaleEnabled = $derived($entryDraft?.currentLocales[$thisPane?.locale ?? '']);\n  const isOnlyLocale = $derived(\n    Object.values($entryDraft?.currentLocales ?? {}).filter((enabled) => enabled).length === 1,\n  );\n  const otherLocales = $derived(\n    i18nEnabled ? allLocales.filter((l) => l !== $thisPane?.locale) : [],\n  );\n  const canCopy = $derived(!!otherLocales.length);\n  const canRevert = $derived(\n    $thisPane?.locale &&\n      !equal(\n        $state.snapshot($entryDraft?.currentValues[$thisPane.locale]),\n        originalValues[$thisPane.locale],\n      ),\n  );\n  const canPreview = $derived($entryDraft?.canPreview ?? true);\n  const previewURL = $derived(\n    collection && originalEntry && $thisPane?.locale\n      ? getEntryPreviewURL(originalEntry, $thisPane.locale, collection, collectionFile)\n      : undefined,\n  );\n</script>\n\n<div role=\"none\" {id} class=\"header\">\n  <Toolbar variant=\"secondary\" aria-label={$_('secondary')}>\n    {#if i18nEnabled && allLocales.length > 1}\n      <LocaleSwitcher {id} {thisPane} {thatPane} />\n      {#if ($isSmallScreen || $isMediumScreen) && canPreview}\n        <PreviewButton {thisPane} />\n      {/if}\n    {:else if !($isSmallScreen || $isMediumScreen)}\n      <h3 role=\"none\">{$thisPane?.mode === 'preview' ? $_('preview') : $_('edit')}</h3>\n    {:else if canPreview}\n      <PreviewButton {thisPane} />\n    {/if}\n    <Spacer flex />\n    {#if $thisPane?.mode === 'edit'}\n      {@const localeLabel = getLocaleLabel($thisPane.locale)}\n      {#if canCopy}\n        <TranslateButton locale={$thisPane.locale} {otherLocales} />\n      {/if}\n      <MenuButton\n        variant=\"ghost\"\n        iconic\n        popupPosition=\"bottom-right\"\n        aria-label={$_('show_content_options_x_locale', { values: { locale: localeLabel } })}\n      >\n        {#snippet popup()}\n          <Menu aria-label={$_('content_options_x_locale', { values: { locale: localeLabel } })}>\n            {#if canCopy && $thisPane?.locale}\n              <CopyMenuItems locale={$thisPane.locale} {otherLocales} />\n            {/if}\n            <MenuItem\n              label={$_('revert_changes')}\n              disabled={!canRevert}\n              onclick={() => {\n                revertChanges({ locale: $thisPane?.locale });\n              }}\n            />\n            {#if !saveAllLocales && $thisPane?.locale}\n              <Divider />\n              <MenuItem\n                label={$_(\n                  isLocaleEnabled\n                    ? 'disable_x_locale'\n                    : $state.snapshot($entryDraft?.currentValues[$thisPane.locale])\n                      ? 'reenable_x_locale'\n                      : 'enable_x_locale',\n                  { values: { locale: localeLabel } },\n                )}\n                disabled={$thisPane.locale === defaultLocale || (isLocaleEnabled && isOnlyLocale)}\n                onclick={() => {\n                  toggleLocale($thisPane?.locale ?? '');\n                }}\n              />\n            {/if}\n            {#if originalEntry && (previewURL || $prefs.devModeEnabled)}\n              <Divider />\n              {#if previewURL}\n                <MenuItem\n                  label={$_('view_on_live_site')}\n                  onclick={() => {\n                    window.open(previewURL);\n                  }}\n                />\n              {/if}\n              {#if $prefs.devModeEnabled}\n                <MenuItem\n                  disabled={!$backend?.repository?.blobBaseURL}\n                  label={$_('view_on_x', {\n                    values: { service: $backend?.repository?.label },\n                    default: $_('view_in_repository'),\n                  })}\n                  onclick={() => {\n                    if (originalEntry && $thisPane) {\n                      window.open(getEntryRepoBlobURL(originalEntry, $thisPane.locale));\n                    }\n                  }}\n                />\n              {/if}\n            {/if}\n          </Menu>\n        {/snippet}\n      </MenuButton>\n    {/if}\n  </Toolbar>\n</div>\n\n<style lang=\"scss\">\n  .header {\n    flex: none !important;\n\n    :global {\n      & > .sui.toolbar {\n        margin-right: auto;\n        margin-left: auto;\n        max-width: 800px;\n\n        @media (width < 768px) {\n          padding: 0;\n        }\n\n        h3 {\n          margin: 0 8px;\n          font-size: var(--sui-font-size-default);\n        }\n      }\n    }\n  }\n</style>\n","<script>\n  import { Alert, Dialog, TextInput } from '@sveltia/ui';\n  import equal from 'fast-deep-equal';\n  import { _ } from 'svelte-i18n';\n\n  import { getEntriesByCollection } from '$lib/services/contents/collection/entries';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { getLocaleLabel } from '$lib/services/contents/i18n';\n\n  /**\n   * @import { EntryDraft, InternalLocaleCode } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} [open] Whether the dialog is open.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    open = $bindable(false),\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const collectionName = $derived($entryDraft?.collectionName ?? '');\n  const currentSlugs = $derived($entryDraft?.currentSlugs ?? {});\n\n  /** @type {string[]} */\n  let otherSlugs = $state([]);\n  /** @type {Record<InternalLocaleCode, string>} */\n  const updatedSlugs = $state({});\n  /** @type {Record<InternalLocaleCode, false | 'empty' | 'duplicate'>} */\n  const validations = $state({});\n\n  const componentId = $props.id();\n\n  /**\n   * Initialize the properties.\n   */\n  const init = () => {\n    otherSlugs = getEntriesByCollection(collectionName)\n      .map((entry) => Object.values(entry.locales).map(({ slug }) => slug))\n      .flat(1)\n      .filter((slug) => !Object.values(currentSlugs).includes(slug));\n    Object.assign(updatedSlugs, currentSlugs);\n    Object.assign(\n      validations,\n      Object.fromEntries(Object.keys(currentSlugs).map((locale) => [locale, false])),\n    );\n  };\n\n  $effect(() => {\n    if (open) {\n      init();\n    }\n  });\n</script>\n\n<Dialog\n  bind:open\n  title={$_('edit_slug')}\n  okLabel={$_('update')}\n  okDisabled={equal(currentSlugs, updatedSlugs) ||\n    Object.values(validations).some((invalid) => invalid !== false)}\n  onOk={() => {\n    /** @type {EntryDraft} */ ($entryDraft).currentSlugs = updatedSlugs;\n  }}\n>\n  <Alert status=\"warning\" --font-size=\"var(--sui-font-size-small)\">\n    {$_('edit_slug_warning')}\n  </Alert>\n  <div role=\"none\" class=\"locales\">\n    {#each Object.keys(updatedSlugs) as locale}\n      <section>\n        {#if !['_', '_default'].includes(locale)}\n          <div role=\"none\">\n            <h3>{getLocaleLabel(locale)}</h3>\n          </div>\n        {/if}\n        <div role=\"none\">\n          <TextInput\n            flex\n            bind:value={updatedSlugs[locale]}\n            oninput={() => {\n              validations[locale] = !updatedSlugs[locale].trim()\n                ? 'empty'\n                : otherSlugs.includes(updatedSlugs[locale])\n                  ? 'duplicate'\n                  : false;\n            }}\n            invalid={validations[locale] !== false}\n            aria-errormessage=\"{componentId}-{locale}-error\"\n          />\n          <p id=\"{componentId}-{locale}-error\" class=\"error\">\n            {#if validations[locale] === 'empty'}\n              {$_('edit_slug_error.empty')}\n            {/if}\n            {#if validations[locale] === 'duplicate'}\n              {$_('edit_slug_error.duplicate')}\n            {/if}\n          </p>\n        </div>\n      </section>\n    {/each}\n  </div>\n</Dialog>\n\n<style lang=\"scss\">\n  p:not(:empty) {\n    margin-top: 0;\n  }\n\n  .locales {\n    display: table;\n    margin: 16px 0 0;\n    width: 100%;\n\n    section {\n      display: table-row;\n\n      div {\n        display: table-cell;\n        vertical-align: middle;\n        white-space: nowrap;\n\n        &:last-child {\n          width: 90%;\n        }\n      }\n\n      h3 {\n        margin-right: 8px;\n        font-size: inherit;\n      }\n\n      p.error {\n        margin: 0;\n        color: var(--sui-error-foreground-color);\n        font-size: var(--sui-font-size-small);\n      }\n    }\n  }\n</style>\n","import { get } from 'svelte/store';\n\nimport { allAssets } from '$lib/services/assets';\nimport { saveChanges } from '$lib/services/backends/save';\nimport { allEntries } from '$lib/services/contents';\nimport { selectedCollection } from '$lib/services/contents/collection';\nimport {\n  contentUpdatesToast,\n  UPDATE_TOAST_DEFAULT_STATE,\n} from '$lib/services/contents/collection/data';\n\n/**\n * @import { FileChange } from '$lib/types/private';\n */\n\n/**\n * Update the stores after deleting entries.\n * @param {object} args Arguments.\n * @param {string[]} args.ids List of entry IDs.\n * @param {string[]} args.assetPaths List of associated asset paths.\n */\nexport const updateStores = ({ ids, assetPaths }) => {\n  const _allEntries = get(allEntries);\n\n  allEntries.set(_allEntries.filter((file) => !ids.includes(file.id)));\n\n  contentUpdatesToast.set({\n    ...UPDATE_TOAST_DEFAULT_STATE,\n    deleted: true,\n    count: ids.length,\n  });\n\n  if (assetPaths.length) {\n    allAssets.update((assets) => assets.filter((asset) => !assetPaths.includes(asset.path)));\n  }\n};\n\n/**\n * Delete entries by slugs.\n * @param {string[]} ids List of entry IDs.\n * @param {string[]} [assetPaths] List of associated asset paths.\n */\nexport const deleteEntries = async (ids, assetPaths = []) => {\n  const _allEntries = get(allEntries);\n\n  const changes = /** @type {FileChange[]} */ (\n    ids\n      .map((id) => {\n        const { locales, slug } = _allEntries.find((e) => e.id === id) ?? {};\n\n        if (locales) {\n          return Object.values(locales).map(\n            ({ path }) => /** @type {FileChange} */ ({ action: 'delete', slug, path }),\n          );\n        }\n\n        return undefined;\n      })\n      .flat(1)\n      // Remove duplicate paths for single file i18n\n      .filter((item, index, arr) => item && arr.findIndex((i) => i?.path === item.path) === index)\n  );\n\n  if (assetPaths.length) {\n    changes.push(\n      ...assetPaths.map((path) => /** @type {FileChange} */ ({ action: 'delete', path })),\n    );\n  }\n\n  await saveChanges({\n    changes,\n    options: {\n      commitType: 'delete',\n      collection: get(selectedCollection),\n    },\n  });\n\n  updateStores({ ids, assetPaths });\n};\n","import { get } from 'svelte/store';\n\nimport { siteConfig } from '$lib/services/config';\nimport { getIndexFile, isCollectionIndexFile } from '$lib/services/contents/collection/index-file';\nimport { entryDraft } from '$lib/services/contents/draft';\nimport { restoreBackupIfNeeded } from '$lib/services/contents/draft/backup';\nimport { createProxy } from '$lib/services/contents/draft/create/proxy';\nimport { getDefaultValues } from '$lib/services/contents/draft/defaults';\n\n/**\n * @import {\n * InternalCollection,\n * InternalCollectionFile,\n * LocaleContentMap,\n * LocaleExpanderMap,\n * } from '$lib/types/private';\n */\n\n/**\n * Create an entry draft.\n * @param {object} args Arguments.\n * @param {InternalCollection} args.collection Collection that the entry belongs to.\n * @param {InternalCollectionFile} [args.collectionFile] Collection file. File/singleton collection\n * only.\n * @param {any} [args.originalEntry] Entry to be edited, or a partial {@link Entry} object.\n * @param {Record<string, string>} [args.dynamicValues] Dynamic default values for a new entry\n * passed through URL parameters.\n * @param {LocaleExpanderMap} [args.expanderStates] Expander UI state. Can be set when resetting an\n * entry draft.\n * @param {boolean} [args.isIndexFile] Whether to edit the collection’s index file.\n */\nexport const createDraft = ({\n  collection,\n  collectionFile,\n  originalEntry = {},\n  dynamicValues,\n  expanderStates,\n  isIndexFile = isCollectionIndexFile(collection, originalEntry),\n}) => {\n  const { name: collectionName, editor } = collection;\n  const fileName = collectionFile?.name;\n  const { id, slug, locales } = originalEntry;\n  const isNew = id === undefined;\n  const { fields: regularFields = [], _i18n } = collectionFile ?? collection;\n  const indexFile = isIndexFile ? getIndexFile(collection) : undefined;\n  const fields = indexFile?.fields ?? regularFields;\n\n  const canPreview =\n    indexFile?.editor?.preview ?? editor?.preview ?? get(siteConfig)?.editor?.preview ?? true;\n\n  const {\n    allLocales,\n    initialLocales,\n    defaultLocale,\n    canonicalSlug: { key: canonicalSlugKey = 'translationKey' },\n  } = _i18n;\n\n  const enabledLocales = isNew\n    ? initialLocales\n    : allLocales.filter((locale) => !!locales?.[locale]?.content);\n\n  const originalLocales = Object.fromEntries(\n    allLocales.map((locale) => [locale, enabledLocales.includes(locale)]),\n  );\n\n  const originalSlugs = isNew\n    ? {}\n    : canonicalSlugKey in (locales?.[defaultLocale]?.content ?? {})\n      ? Object.fromEntries(allLocales.map((locale) => [locale, locales?.[locale]?.slug]))\n      : { _: locales?.[defaultLocale].slug };\n\n  /** @type {LocaleContentMap} */\n  const originalValues = Object.fromEntries(\n    enabledLocales.map((locale) =>\n      isNew\n        ? [locale, getDefaultValues(fields, locale, dynamicValues)]\n        : [locale, structuredClone(locales?.[locale]?.content)],\n    ),\n  );\n\n  entryDraft.set({\n    createdAt: Date.now(),\n    isNew,\n    isIndexFile,\n    canPreview,\n    collectionName,\n    collection,\n    fileName,\n    collectionFile,\n    fields,\n    originalEntry: isNew ? undefined : originalEntry,\n    originalLocales,\n    currentLocales: structuredClone(originalLocales),\n    originalSlugs,\n    currentSlugs: structuredClone(originalSlugs),\n    originalValues,\n    currentValues: Object.fromEntries(\n      enabledLocales.map((locale) => [\n        locale,\n        createProxy({\n          draft: { collectionName, fileName, isIndexFile },\n          locale,\n          target: structuredClone(originalValues[locale]),\n        }),\n      ]),\n    ),\n    files: {},\n    extraValues: Object.fromEntries(allLocales.map((locale) => [locale, {}])),\n    validities: Object.fromEntries(allLocales.map((locale) => [locale, {}])),\n    // Any locale-agnostic view states will be put under the `_` key\n    expanderStates: expanderStates ?? { _: {} },\n  });\n\n  restoreBackupIfNeeded({ collectionName, fileName, slug });\n};\n","import { get } from 'svelte/store';\n\nimport { entryDraft } from '$lib/services/contents/draft';\nimport { showDuplicateToast } from '$lib/services/contents/editor';\nimport { getField } from '$lib/services/contents/entry/fields';\nimport { getDefaultValueMap as getHiddenFieldDefaultValueMap } from '$lib/services/contents/widgets/hidden/defaults';\nimport { getInitialValue as getInitialUuidValue } from '$lib/services/contents/widgets/uuid/helper';\n\n/**\n * @import { EntryDraft } from '$lib/types/private';\n * @import { HiddenField, UuidField } from '$lib/types/public';\n */\n\n/**\n * Duplicate the current entry draft.\n */\nexport const duplicateDraft = () => {\n  const draft = /** @type {EntryDraft} */ (get(entryDraft));\n\n  const {\n    collectionName,\n    fileName,\n    collection,\n    collectionFile,\n    currentValues,\n    validities,\n    isIndexFile,\n  } = draft;\n\n  const {\n    defaultLocale,\n    canonicalSlug: { key: canonicalSlugKey },\n  } = (collectionFile ?? collection)._i18n;\n\n  Object.entries(currentValues).forEach(([locale, valueMap]) => {\n    // Remove the canonical slug\n    delete valueMap[canonicalSlugKey];\n\n    const getFieldArgs = { collectionName, fileName, valueMap, isIndexFile };\n\n    // Reset some unique values\n    Object.keys(valueMap).forEach((keyPath) => {\n      const fieldConfig = getField({ ...getFieldArgs, keyPath });\n\n      if (fieldConfig?.widget === 'uuid') {\n        if (locale === defaultLocale || [true, 'translate'].includes(fieldConfig?.i18n ?? false)) {\n          valueMap[keyPath] = getInitialUuidValue(/** @type {UuidField} */ (fieldConfig));\n        }\n      }\n\n      if (fieldConfig?.widget === 'hidden') {\n        // The value could be array; normalize the key path, e.g. `tags.0` -> `tags`\n        if (Array.isArray(fieldConfig.default) && keyPath.match(/\\.\\d+$/)) {\n          delete valueMap[keyPath];\n          keyPath = keyPath.replace(/\\.\\d+$/, '');\n\n          if (keyPath in valueMap) {\n            return;\n          }\n        }\n\n        if (locale === defaultLocale || [true, 'translate'].includes(fieldConfig?.i18n ?? false)) {\n          Object.assign(\n            valueMap,\n            getHiddenFieldDefaultValueMap({\n              // eslint-disable-next-line object-shorthand\n              fieldConfig: /** @type {HiddenField} */ (fieldConfig),\n              keyPath,\n              locale,\n            }),\n          );\n        }\n      }\n    });\n  });\n\n  // Reset the validities\n  Object.keys(validities).forEach((locale) => {\n    validities[locale] = {};\n  });\n\n  entryDraft.set({\n    ...draft,\n    isNew: true,\n    originalEntry: undefined,\n    originalSlugs: {},\n    currentSlugs: {},\n  });\n\n  showDuplicateToast.set(true);\n};\n","import { escapeRegExp } from '@sveltia/utils/string';\nimport { get } from 'svelte/store';\n\nimport { entryDraft } from '$lib/services/contents/draft';\nimport { getField, isFieldRequired } from '$lib/services/contents/entry/fields';\nimport {\n  MEDIA_WIDGETS,\n  MIN_MAX_VALUE_WIDGETS,\n  MULTI_VALUE_WIDGETS,\n} from '$lib/services/contents/widgets';\nimport { getPairs } from '$lib/services/contents/widgets/key-value/helper';\nimport { getListFieldInfo } from '$lib/services/contents/widgets/list/helper';\nimport { COMPONENT_NAME_PREFIX_REGEX } from '$lib/services/contents/widgets/markdown';\nimport { validateStringField } from '$lib/services/contents/widgets/string/validate';\nimport { getRegex } from '$lib/services/utils/misc';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import {\n * DraftValueStoreKey,\n * EntryDraft,\n * EntryValidityState,\n * FlattenedEntryContent,\n * GetFieldArgs,\n * LocaleValidityMap,\n * } from '$lib/types/private';\n * @import {\n * CodeField,\n * Field,\n * ListField,\n * LocaleCode,\n * MinMaxValueField,\n * MultiValueField,\n * NumberField,\n * StringField,\n * TextField,\n * } from '$lib/types/public';\n */\n\n/**\n * @typedef {object} ValidateFieldArgs\n * @property {EntryDraft} draft Entry draft.\n * @property {LocaleValidityMap} validities Validity state.\n * @property {LocaleCode} locale Current locale.\n * @property {string} keyPath Field key path.\n * @property {FlattenedEntryContent} valueMap Entry values.\n * @property {any} value Field value.\n * @property {string} [componentName] Markdown editor component name.\n */\n\n/**\n * Regular expression to match the list key path, e.g. `field.0`, `field.1`, etc.\n * @type {RegExp}\n */\nconst LIST_KEY_PATH_REGEX = /\\.\\d+$/;\n\n/**\n * Default validity state for a field.\n * @type {EntryValidityState}\n */\nconst DEFAULT_VALIDITY = {\n  valueMissing: false,\n  tooShort: false,\n  tooLong: false,\n  rangeUnderflow: false,\n  rangeOverflow: false,\n  patternMismatch: false,\n  typeMismatch: false,\n};\n\nconst validityProxyHandler = {\n  /**\n   * Proxy getter.\n   * @param {EntryValidityState} obj Object itself.\n   * @param {string} prop Property name.\n   * @returns {boolean | undefined} Property value.\n   */\n  get: (obj, prop) => (prop === 'valid' ? !Object.values(obj).some(Boolean) : obj[prop]),\n};\n\n/**\n * Validate each field.\n * @param {object} args Arguments.\n * @param {EntryDraft} args.draft Entry draft.\n * @param {LocaleCode} args.locale Current locale.\n * @param {FlattenedEntryContent} args.valueMap Entry values.\n * @param {string} args.keyPath Field key path.\n * @param {any} args.value Field value.\n * @param {string} [args.componentName] Markdown editor component name.\n * @returns {EntryValidityState | undefined} Field validity.\n * @todo Refactor this function to reduce complexity and improve readability.\n */\nconst validateAnyField = ({ draft, locale, valueMap, keyPath, value, componentName }) => {\n  const { collection, collectionName, fileName, collectionFile, files, validities, isIndexFile } =\n    draft;\n\n  /** @type {GetFieldArgs} */\n  const getFieldArgs = {\n    collectionName,\n    fileName,\n    componentName,\n    valueMap,\n    keyPath: keyPath.replace(COMPONENT_NAME_PREFIX_REGEX, ''), // Remove component name prefix\n    isIndexFile,\n  };\n\n  const fieldConfig = getField({ ...getFieldArgs });\n\n  if (!fieldConfig) {\n    return undefined;\n  }\n\n  const { widget: widgetName = 'string', i18n = false, pattern: validation } = fieldConfig;\n\n  const { multiple = false } = /** @type {MultiValueField} */ (\n    MULTI_VALUE_WIDGETS.includes(widgetName) ? fieldConfig : {}\n  );\n\n  const { min = 0, max = Infinity } = /** @type {MinMaxValueField} */ (\n    MIN_MAX_VALUE_WIDGETS.includes(widgetName) ? fieldConfig : {}\n  );\n\n  const { i18nEnabled, defaultLocale } = (collectionFile ?? collection)._i18n;\n\n  // Skip validation on non-editable fields\n  if (\n    !componentName && // Don’t skip validation if the field is within a Markdown editor component\n    locale !== defaultLocale &&\n    (!i18nEnabled || i18n === false || i18n === 'none' || i18n === 'duplicate')\n  ) {\n    return undefined;\n  }\n\n  const valueEntries = Object.entries(valueMap);\n  const required = isFieldRequired({ fieldConfig, locale });\n  /** @type {EntryValidityState} */\n  const validity = { ...DEFAULT_VALIDITY };\n\n  if (widgetName === 'list' || multiple) {\n    // Given that values for an array field are flatten into `field.0`, `field.1` ... `field.N`,\n    // we should validate only once against all these values\n    if (keyPath in validities[locale]) {\n      return undefined;\n    }\n\n    const keyPathRegex = new RegExp(`^${escapeRegExp(keyPath)}\\\\.\\\\d+`);\n\n    // We need to check both the list itself and the items in the list because the list can be empty\n    // but still have items in the list, depending on the flattening condition. It means the data\n    // usually looks like `{ field.0: 'foo', field.1: 'bar' }`, but it can contain an empty list\n    // like `{ field: [], field.0: 'foo', field.1: 'bar' }` in some cases. Or it can be a simple\n    // list field like `{ field: ['foo', 'bar'] }` without the subfields.\n    const size =\n      Array.isArray(value) && !!value.length\n        ? value.length\n        : new Set(valueEntries.map(([key]) => key.match(keyPathRegex)?.[0]).filter(Boolean)).size;\n\n    if (required && !size) {\n      validity.valueMissing = true;\n    } else if (typeof min === 'number' && size < min) {\n      validity.rangeUnderflow = true;\n    } else if (typeof max === 'number' && size > max) {\n      validity.rangeOverflow = true;\n    }\n  }\n\n  if (widgetName === 'object') {\n    if (required && !value) {\n      validity.valueMissing = true;\n    }\n  }\n\n  if (widgetName === 'keyvalue') {\n    // Given that values for a KeyValue field are flatten into `field.key1`, `field.key2` ...\n    // `field.keyN`, we should validate only once against all these values. The key can be\n    // empty, so use `.*` in the regex instead of `.+`\n    const _keyPath = /** @type {string} */ (keyPath.match(/(.+?)(?:\\.[^.]*)?$/)?.[1]);\n\n    const parentFieldConfig = getField({\n      ...getFieldArgs,\n      keyPath: _keyPath.replace(COMPONENT_NAME_PREFIX_REGEX, ''), // Remove component name prefix\n    });\n\n    if (_keyPath in validities[locale] || parentFieldConfig?.widget !== 'keyvalue') {\n      return undefined;\n    }\n\n    keyPath = _keyPath;\n\n    const _entryDraft = /** @type {Writable<EntryDraft>} */ (entryDraft);\n    const pairs = getPairs({ entryDraft: _entryDraft, keyPath: _keyPath, locale });\n\n    if (required && !pairs.length) {\n      validity.valueMissing = true;\n    } else if (typeof min === 'number' && pairs.length < min) {\n      validity.rangeUnderflow = true;\n    } else if (typeof max === 'number' && pairs.length > max) {\n      validity.rangeOverflow = true;\n    }\n  }\n\n  if (widgetName === 'code') {\n    const {\n      output_code_only: outputCodeOnly = false,\n      keys: outputKeys = { code: 'code', lang: 'lang' },\n    } = /** @type {CodeField} */ (fieldConfig);\n\n    const _keyPath = keyPath.match(`(.+)\\\\.(?:${outputKeys.code}|${outputKeys.lang})$`)?.[1] ?? '';\n\n    if (_keyPath) {\n      keyPath = _keyPath;\n    }\n\n    if (keyPath in validities[locale]) {\n      return undefined;\n    }\n\n    if (!outputCodeOnly) {\n      value = valueMap[`${keyPath}.${outputKeys.code}`];\n    }\n  }\n\n  if (\n    MEDIA_WIDGETS.includes(widgetName) &&\n    typeof value === 'string' &&\n    value.startsWith('blob:')\n  ) {\n    // The stored `value` is a blob URL; get the original file name\n    value = files[value]?.file?.name;\n  }\n\n  if (!(['object', 'list', 'hidden', 'compute', 'keyvalue'].includes(widgetName) || multiple)) {\n    if (typeof value === 'string') {\n      value = value.trim();\n    }\n\n    if (\n      required &&\n      (value === undefined || value === null || value === '' || (multiple && !value.length))\n    ) {\n      validity.valueMissing = true;\n    }\n\n    if (Array.isArray(validation)) {\n      const regex = getRegex(validation[0]);\n\n      if (regex && !regex.test(String(value))) {\n        validity.patternMismatch = true;\n      }\n    }\n  }\n\n  // Check the number of characters\n  if (['string', 'text'].includes(widgetName)) {\n    const result = validateStringField({\n      // eslint-disable-next-line object-shorthand\n      fieldConfig: /** @type {StringField | TextField} */ (fieldConfig),\n      value,\n    });\n\n    validity.tooShort = result.tooShort;\n    validity.tooLong = result.tooLong;\n  }\n\n  // Check the URL or email with native form validation\n  if (widgetName === 'string' && value) {\n    const { type = 'text' } = /** @type {StringField} */ (fieldConfig);\n\n    if (type !== 'text') {\n      const inputElement = Object.assign(document.createElement('input'), { type, value });\n\n      validity.typeMismatch = inputElement.validity.typeMismatch;\n    }\n\n    // Check if the email’s domain part contains a dot, because native validation marks\n    // `me@example` valid but it’s not valid in the real world\n    if (type === 'email' && !validity.typeMismatch && !value.split('@')[1]?.includes('.')) {\n      validity.typeMismatch = true;\n    }\n  }\n\n  if (widgetName === 'number') {\n    const { value_type: valueType = 'int' } = /** @type {NumberField} */ (fieldConfig);\n\n    if (typeof min === 'number' && value !== null && Number(value) < min) {\n      validity.rangeUnderflow = true;\n    } else if (typeof max === 'number' && value !== null && Number(value) > max) {\n      validity.rangeOverflow = true;\n    }\n\n    if (valueType === 'int' || valueType === 'float') {\n      if (required && value === null) {\n        validity.typeMismatch = true;\n      }\n    }\n  }\n\n  return new Proxy(validity, validityProxyHandler);\n};\n\n/**\n * Validate a single field and update the validity state.\n * @param {ValidateFieldArgs} args Arguments.\n * @returns {boolean} Whether the field is valid.\n */\nconst validateField = (args) => {\n  const { validities, locale, keyPath } = args;\n  const validity = validateAnyField(args);\n  let valid = true;\n\n  if (validity) {\n    validities[locale][keyPath] = validity;\n\n    if (!validity.valid) {\n      valid = false;\n    }\n  }\n\n  return valid;\n};\n\n/**\n * Validate an array-type field.\n * @param {object} args Arguments.\n * @param {Field} args.fieldConfig Field configuration.\n * @param {ValidateFieldArgs} args.validateArgs Arguments for field validation.\n * @returns {{ valid: boolean, validateItems: boolean }} Validation result.\n */\nconst validateList = ({ fieldConfig, validateArgs }) => {\n  const { validities, locale, keyPath } = validateArgs;\n  let valid = true;\n\n  if (!(keyPath in validities[locale])) {\n    valid = validateField(validateArgs);\n  }\n\n  const { widget: widgetName = 'string' } = fieldConfig;\n\n  if (widgetName === 'list') {\n    if (!getListFieldInfo(/** @type {ListField} */ (fieldConfig)).hasSubFields) {\n      // Simple list field, so we don’t need to validate items\n      return { valid, validateItems: false };\n    }\n  }\n\n  const { multiple = false } = /** @type {MultiValueField} */ (\n    MULTI_VALUE_WIDGETS.includes(widgetName) ? fieldConfig : {}\n  );\n\n  if (multiple) {\n    // Same as a simple list field, so we don’t need to validate items\n    return { valid, validateItems: false };\n  }\n\n  return { valid, validateItems: true };\n};\n\n/**\n * Validate the field values and return the results. Mimic the native `ValidityState` API.\n * @param {DraftValueStoreKey} valueStoreKey Key to store the values in {@link EntryDraft}.\n * @returns {{ valid: boolean, validities: LocaleValidityMap }} Validation results.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/ValidityState\n */\nexport const validateFields = (valueStoreKey) => {\n  const draft = /** @type {EntryDraft} */ (get(entryDraft));\n  const { collectionName, fileName, isIndexFile, currentLocales } = draft;\n  /** @type {LocaleValidityMap} */\n  const validities = {};\n  /** @type {GetFieldArgs} */\n  const getFieldArgs = { collectionName, fileName, isIndexFile, keyPath: '', valueMap: {} };\n  let valid = true;\n\n  Object.entries(draft[valueStoreKey]).forEach(([locale, valueMap]) => {\n    const valueEntries = Object.entries(valueMap);\n\n    // If the locale is disabled, skip the validation and mark all fields valid\n    if (!currentLocales[locale]) {\n      validities[locale] = Object.fromEntries(\n        valueEntries.map(([keyPath]) => [keyPath, { valid: true }]),\n      );\n\n      return;\n    }\n\n    const validateArgs = { draft, locale, valueMap, validities };\n\n    // Reset the state first\n    validities[locale] = {};\n\n    valueEntries.forEach(([keyPath, value]) => {\n      const [prefix] = keyPath.match(COMPONENT_NAME_PREFIX_REGEX) ?? [];\n      const componentName = prefix ? valueMap[`${prefix}__sc_component_name`] : undefined;\n\n      const fieldConfig = getField({\n        ...getFieldArgs,\n        keyPath: keyPath.replace(COMPONENT_NAME_PREFIX_REGEX, ''), // Remove component name prefix\n        valueMap,\n        componentName,\n      });\n\n      if (!fieldConfig) {\n        return;\n      }\n\n      // Validate a list itself before the items\n      if (LIST_KEY_PATH_REGEX.test(keyPath)) {\n        const { valid: listValid, validateItems } = validateList({\n          fieldConfig,\n          validateArgs: {\n            ...validateArgs,\n            keyPath: keyPath.replace(LIST_KEY_PATH_REGEX, ''),\n            value: '',\n            componentName,\n          },\n        });\n\n        if (!listValid) {\n          valid = false;\n        }\n\n        if (!validateItems) {\n          return;\n        }\n      }\n\n      if (!validateField({ ...validateArgs, keyPath, value, componentName })) {\n        valid = false;\n      }\n    });\n  });\n\n  return { valid, validities };\n};\n\n/**\n * Validate the field values, update the validity for all the fields, and return the final results\n * as a boolean.\n * @returns {boolean} Whether the entry draft is valid.\n */\nexport const validateEntry = () => {\n  const { valid: currentValuesValid, validities: currentValuesValidities } =\n    validateFields('currentValues');\n\n  const { valid: extraValuesValid, validities: extraValuesValidities } =\n    validateFields('extraValues');\n\n  /** @type {Writable<EntryDraft>} */ (entryDraft).update((_draft) => ({\n    ..._draft,\n    validities: Object.fromEntries(\n      Object.keys(currentValuesValidities).map((locale) => [\n        locale,\n        { ...currentValuesValidities[locale], ...extraValuesValidities[locale] },\n      ]),\n    ),\n  }));\n\n  return currentValuesValid && extraValuesValid;\n};\n","import { get } from 'svelte/store';\n\nimport { backend, isLastCommitPublished } from '$lib/services/backends';\nimport { saveChanges } from '$lib/services/backends/save';\nimport { siteConfig } from '$lib/services/config';\nimport {\n  contentUpdatesToast,\n  UPDATE_TOAST_DEFAULT_STATE,\n} from '$lib/services/contents/collection/data';\nimport { entryDraft } from '$lib/services/contents/draft';\nimport { deleteBackup } from '$lib/services/contents/draft/backup';\nimport { createSavingEntryData } from '$lib/services/contents/draft/save/changes';\nimport { getSlugs } from '$lib/services/contents/draft/slugs';\nimport { validateEntry } from '$lib/services/contents/draft/validate';\nimport { expandInvalidFields } from '$lib/services/contents/editor/expanders';\n\n/**\n * @import { ChangeResults, Entry, EntryDraft } from '$lib/types/private';\n */\n\n/**\n * Update the application stores with deployment settings.\n * @param {object} args Arguments.\n * @param {boolean | undefined} args.skipCI Whether to disable automatic deployments for the change.\n */\nconst updateStores = ({ skipCI }) => {\n  const autoDeployEnabled = get(siteConfig)?.backend.automatic_deployments;\n\n  const published =\n    !!get(backend)?.isGit && (skipCI === undefined ? autoDeployEnabled === true : skipCI === false);\n\n  contentUpdatesToast.set({\n    ...UPDATE_TOAST_DEFAULT_STATE,\n    saved: true,\n    published,\n    count: 1,\n  });\n\n  isLastCommitPublished.set(published);\n};\n\n/**\n * Save the entry draft.\n * @param {object} [options] Options.\n * @param {boolean} [options.skipCI] Whether to disable automatic deployments for the change.\n * @returns {Promise<Entry>} Saved entry.\n * @throws {Error} When the entry could not be validated or saved.\n */\nexport const saveEntry = async ({ skipCI = undefined } = {}) => {\n  const draft = /** @type {EntryDraft} */ (get(entryDraft));\n  const { collection, isNew, collectionName, fileName, currentValues } = draft;\n\n  if (!validateEntry()) {\n    expandInvalidFields({ collectionName, fileName, currentValues });\n\n    throw new Error('validation_failed');\n  }\n\n  const slugs = getSlugs({ draft });\n  const { defaultLocaleSlug } = slugs;\n  const { savingEntry, changes, savingAssets } = await createSavingEntryData({ draft, slugs });\n  /** @type {ChangeResults} */\n  let results;\n\n  try {\n    results = await saveChanges({\n      changes,\n      savingEntries: [savingEntry],\n      savingAssets,\n      options: {\n        commitType: isNew ? 'create' : 'update',\n        collection,\n        skipCI,\n      },\n    });\n  } catch (/** @type {any} */ ex) {\n    // eslint-disable-next-line no-console\n    console.error(ex.cause ?? ex);\n\n    throw new Error('saving_failed', { cause: ex.cause ?? ex });\n  }\n\n  updateStores({ skipCI });\n  deleteBackup(collectionName, isNew ? '' : defaultLocaleSlug);\n\n  return results.savedEntries[0];\n};\n","import { getPathInfo } from '@sveltia/utils/file';\nimport { escapeRegExp } from '@sveltia/utils/string';\nimport { get } from 'svelte/store';\n\nimport { allAssets, getAssetByPath } from '$lib/services/assets';\nimport { getAssetFolder, getAssetFoldersByPath } from '$lib/services/assets/folders';\nimport { getMediaFieldURL } from '$lib/services/assets/info';\nimport { getCollection } from '$lib/services/contents/collection';\nimport { isCollectionIndexFile } from '$lib/services/contents/collection/index-file';\nimport { getField } from '$lib/services/contents/entry/fields';\n\n/**\n * @import { Asset, Entry, EntryCollection } from '$lib/types/private';\n * @import { FieldKeyPath } from '$lib/types/public';\n */\n\n/**\n * Get the given entry’s thumbnail URL.\n * @param {EntryCollection} collection Entry’s collection.\n * @param {Entry} entry Entry.\n * @returns {Promise<string | undefined>} URL.\n */\nexport const getEntryThumbnail = async (collection, entry) => {\n  const {\n    name: collectionName,\n    _i18n: { defaultLocale },\n    _thumbnailFieldNames,\n  } = collection;\n\n  const { locales } = entry;\n  const { content } = locales[defaultLocale] ?? Object.values(locales)[0] ?? {};\n\n  if (!content) {\n    return undefined;\n  }\n\n  /** @type {FieldKeyPath[]} */\n  const keyPathList = _thumbnailFieldNames\n    .map((name) => {\n      // Support a wildcard in the key path, e.g. `images.*.src`\n      if (name.includes('*')) {\n        const regex = new RegExp(`^${escapeRegExp(name).replace('\\\\*', '.+')}$`);\n\n        return Object.keys(content).filter((keyPath) => regex.test(keyPath));\n      }\n\n      return name;\n    })\n    .flat(1);\n\n  // Cannot use `Promise.all` or `Promise.any` here because we need the first available URL\n  // eslint-disable-next-line no-restricted-syntax\n  for (const keyPath of keyPathList) {\n    const url = content[keyPath]\n      ? // eslint-disable-next-line no-await-in-loop\n        await getMediaFieldURL({ value: content[keyPath], entry, collectionName, thumbnail: true })\n      : undefined;\n\n    if (url) {\n      return url;\n    }\n  }\n\n  return undefined;\n};\n\n/**\n * Get a list of assets associated with the given entry.\n * @param {object} args Arguments.\n * @param {Entry} args.entry Entry.\n * @param {string} args.collectionName Name of a collection that the entry belongs to.\n * @param {string} [args.fileName] Collection file name. File/singleton collection only.\n * @param {boolean} [args.relative] Whether to only collect assets stored at a relative path.\n * @returns {Asset[]} Assets.\n */\nexport const getAssociatedAssets = ({ entry, collectionName, fileName, relative = false }) => {\n  const { locales } = entry;\n  const collection = getCollection(collectionName);\n\n  if (!collection) {\n    return [];\n  }\n\n  const isIndexFile = isCollectionIndexFile(collection, entry);\n\n  const assets = /** @type {Asset[]} */ (\n    Object.values(locales)\n      .map(({ content }) =>\n        Object.entries(content).map(([keyPath, value]) => {\n          if (\n            typeof value === 'string' &&\n            (relative ? !/^[/@]/.test(value) : true) &&\n            ['image', 'file'].includes(\n              getField({ collectionName, keyPath, isIndexFile })?.widget ?? 'string',\n            )\n          ) {\n            const asset = getAssetByPath({ value, entry, collectionName, fileName });\n\n            if (\n              asset &&\n              getAssetFoldersByPath(asset.path).some(\n                (f) =>\n                  f.collectionName === collectionName &&\n                  f.fileName === fileName &&\n                  (relative ? f.entryRelative : true),\n              )\n            ) {\n              return asset;\n            }\n          }\n\n          return undefined;\n        }),\n      )\n      .flat(1)\n      .filter((value, index, array) => !!value && array.indexOf(value) === index)\n  );\n\n  // Add orphaned/unused entry-relative assets\n  if (relative && getAssetFolder({ collectionName, fileName })?.entryRelative) {\n    const entryDirName = getPathInfo(Object.values(entry.locales)[0].path).dirname;\n\n    get(allAssets).forEach((asset) => {\n      if (\n        getPathInfo(asset.path).dirname === entryDirName &&\n        !assets.find(({ path }) => path === asset.path)\n      ) {\n        assets.push(asset);\n      }\n    });\n  }\n\n  return assets;\n};\n","<script>\n  import {\n    Alert,\n    AlertDialog,\n    Button,\n    ConfirmationDialog,\n    Divider,\n    Menu,\n    MenuButton,\n    MenuItem,\n    MenuItemCheckbox,\n    SplitButton,\n    Toast,\n    Toolbar,\n    TruncatedText,\n  } from '@sveltia/ui';\n  import { _, locale as appLocale } from 'svelte-i18n';\n\n  import BackButton from '$lib/components/common/page-toolbar/back-button.svelte';\n  import EditSlugDialog from '$lib/components/contents/details/edit-slug-dialog.svelte';\n  import { goBack, goto } from '$lib/services/app/navigation';\n  import { getAssetFolder } from '$lib/services/assets/folders';\n  import { backend } from '$lib/services/backends';\n  import { siteConfig } from '$lib/services/config';\n  import { getCollectionLabel } from '$lib/services/contents/collection';\n  import { deleteEntries } from '$lib/services/contents/collection/data/delete';\n  import { canCreateEntry } from '$lib/services/contents/collection/entries';\n  import { getCollectionFileLabel } from '$lib/services/contents/collection/files';\n  import { entryDraft, entryDraftModified } from '$lib/services/contents/draft';\n  import { createDraft } from '$lib/services/contents/draft/create';\n  import { duplicateDraft } from '$lib/services/contents/draft/create/duplicate';\n  import { saveEntry } from '$lib/services/contents/draft/save';\n  import { revertChanges } from '$lib/services/contents/draft/update/revert';\n  import { copyFromLocaleToast } from '$lib/services/contents/editor';\n  import { entryEditorSettings } from '$lib/services/contents/editor/settings';\n  import { getEntryPreviewURL } from '$lib/services/contents/entry';\n  import { getAssociatedAssets } from '$lib/services/contents/entry/assets';\n  import { getEntrySummary } from '$lib/services/contents/entry/summary';\n  import { getLocaleLabel } from '$lib/services/contents/i18n';\n  import { DEFAULT_I18N_CONFIG } from '$lib/services/contents/i18n/config';\n  import { isMediumScreen, isSmallScreen } from '$lib/services/user/env';\n  import { prefs } from '$lib/services/user/prefs';\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} [disabled] Whether to disable controls other than the Back button.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    disabled = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  let showValidationToast = $state(false);\n  let showEditSlugDialog = $state(false);\n  let showDeleteDialog = $state(false);\n  let showErrorDialog = $state(false);\n  let errorMessage = $state('');\n  let saving = $state(false);\n  /** @type {MenuButton | undefined} */\n  let menuButton = $state();\n\n  const isNew = $derived($entryDraft?.isNew ?? true);\n  const isIndexFile = $derived($entryDraft?.isIndexFile ?? false);\n  const collection = $derived($entryDraft?.collection);\n  const collectionFile = $derived($entryDraft?.collectionFile);\n  const originalEntry = $derived($entryDraft?.originalEntry);\n  const autoDeployEnabled = $derived($siteConfig?.backend.automatic_deployments);\n  const showSaveOptions = $derived(!!$backend?.isGit && typeof autoDeployEnabled === 'boolean');\n  const { defaultLocale } = $derived((collectionFile ?? collection)?._i18n ?? DEFAULT_I18N_CONFIG);\n  const collectionName = $derived(collection?.name);\n  const fileName = $derived(collectionFile?.name);\n  const collectionLabel = $derived(\n    // `$appLocale` is a key, because `getCollectionLabel` can return a localized label\n    $appLocale && collection ? getCollectionLabel(collection) : '',\n  );\n  const collectionLabelSingular = $derived(\n    // `$appLocale` is a key, because `getCollectionLabel` can return a localized label\n    $appLocale && collection ? getCollectionLabel(collection, { useSingular: true }) : '',\n  );\n  const canPreview = $derived($entryDraft?.canPreview ?? true);\n  const modified = $derived(isNew || $entryDraftModified);\n  const errorCount = $derived(\n    Object.values($entryDraft?.validities ?? {})\n      .map((validity) => Object.values(validity).map(({ valid }) => !valid))\n      .flat(1)\n      .filter(Boolean).length,\n  );\n  const associatedAssets = $derived(\n    collectionName && originalEntry && getAssetFolder({ collectionName, fileName })?.entryRelative\n      ? getAssociatedAssets({ entry: originalEntry, collectionName, fileName, relative: true })\n      : [],\n  );\n  const previewURL = $derived(\n    collection && originalEntry\n      ? getEntryPreviewURL(originalEntry, defaultLocale, collection, collectionFile)\n      : undefined,\n  );\n\n  /**\n   * Go back to the previous page. If the entry is a singleton file, go to the collections list.\n   * Otherwise, go to the collection entries list.\n   */\n  const _goBack = () => {\n    goBack(collectionName === '_singletons' ? '/collections' : `/collections/${collectionName}`);\n  };\n\n  /**\n   * Save the entry draft.\n   * @param {object} [options] Options.\n   * @param {boolean} [options.skipCI] Whether to disable automatic deployments for the change.\n   */\n  const save = async ({ skipCI = undefined } = {}) => {\n    saving = true;\n\n    if (!collection) {\n      return;\n    }\n\n    try {\n      const savedEntry = await saveEntry({ skipCI });\n\n      if ($prefs?.closeOnSave ?? true) {\n        _goBack();\n        $entryDraft = null;\n      } else {\n        if (isNew) {\n          // Update the URL\n          goto(`/collections/${collectionName}/entries/${savedEntry.subPath}`, {\n            replaceState: true,\n            notifyChange: false,\n            transitionType: 'backwards',\n          });\n        }\n\n        // Reset the draft\n        createDraft({\n          collection,\n          collectionFile,\n          originalEntry: savedEntry,\n          expanderStates: $entryDraft?.expanderStates,\n        });\n      }\n    } catch (/** @type {any} */ ex) {\n      if (ex.message === 'validation_failed') {\n        showValidationToast = true;\n      } else if (ex.message === 'saving_failed') {\n        showErrorDialog = true;\n        errorMessage = ex.cause?.message ?? ex.message ?? $_('unexpected_error');\n      } else {\n        showErrorDialog = true;\n        errorMessage = '';\n        // eslint-disable-next-line no-console\n        console.error(ex);\n      }\n    } finally {\n      saving = false;\n    }\n  };\n</script>\n\n{#snippet overflowButtons()}\n  {@const Component = $isSmallScreen ? MenuItem : Button}\n  <Component\n    variant=\"ghost\"\n    label={$_('duplicate')}\n    aria-label={$_('duplicate_entry')}\n    disabled={isIndexFile || collection?.create === false || !canCreateEntry(collection)}\n    onclick={() => {\n      goto(`/collections/${collectionName}/new`, {\n        replaceState: true,\n        notifyChange: false,\n        transitionType: 'forwards',\n      });\n      duplicateDraft();\n    }}\n  />\n  <Component\n    variant=\"ghost\"\n    label={$_('delete')}\n    aria-label={$_('delete_entry')}\n    disabled={collection?.delete === false}\n    onclick={() => {\n      showDeleteDialog = true;\n    }}\n  />\n{/snippet}\n\n<Toolbar variant=\"primary\" aria-label={$_('primary')}>\n  <BackButton\n    aria-label={$_('cancel_editing')}\n    useShortcut={$prefs.closeWithEscape}\n    onclick={() => {\n      _goBack();\n    }}\n  />\n  <h2 role=\"none\">\n    <TruncatedText>\n      {#if isNew}\n        {$_('create_entry_title', { values: { name: collectionLabelSingular } })}\n      {:else}\n        {@const entrySummary = collectionFile\n          ? getCollectionFileLabel(collectionFile)\n          : collection && originalEntry && $appLocale\n            ? getEntrySummary(collection, originalEntry)\n            : ''}\n        {#if $isSmallScreen}\n          {entrySummary}\n        {:else}\n          {$_('edit_entry_title', {\n            values: { collection: collectionLabel, entry: entrySummary },\n          })}\n        {/if}\n      {/if}\n    </TruncatedText>\n  </h2>\n  {#if !disabled && previewURL}\n    <Button\n      variant=\"tertiary\"\n      label={$_('view_on_live_site')}\n      onclick={() => {\n        window.open(previewURL);\n      }}\n    />\n  {/if}\n  {#if !$isSmallScreen && !disabled && !collectionFile && !isNew}\n    {@render overflowButtons()}\n  {/if}\n  <MenuButton\n    {disabled}\n    variant=\"ghost\"\n    iconic\n    popupPosition=\"bottom-right\"\n    aria-label={$_('show_editor_options')}\n    bind:this={menuButton}\n  >\n    {#snippet popup()}\n      <Menu aria-label={$_('editor_options')}>\n        {#if $isSmallScreen && !disabled && !collectionFile && !isNew}\n          {@render overflowButtons()}\n        {/if}\n        <MenuItem\n          label={$_('edit_slug')}\n          disabled={!!collectionFile || isNew || isIndexFile || collection?.delete === false}\n          onclick={() => {\n            showEditSlugDialog = true;\n          }}\n        />\n        <MenuItem\n          label={$_('revert_all_changes')}\n          disabled={!modified}\n          onclick={() => {\n            revertChanges();\n          }}\n        />\n        {#if !($isSmallScreen || $isMediumScreen)}\n          <Divider />\n          <MenuItemCheckbox\n            label={$_('show_preview')}\n            checked={$entryEditorSettings?.showPreview}\n            disabled={!canPreview}\n            onChange={() => {\n              entryEditorSettings.update((view = {}) => ({\n                ...view,\n                showPreview: !view.showPreview,\n              }));\n            }}\n          />\n          <MenuItemCheckbox\n            label={$_('sync_scrolling')}\n            checked={$entryEditorSettings?.syncScrolling}\n            disabled={!canPreview && Object.keys($entryDraft?.currentValues ?? {}).length === 1}\n            onChange={() => {\n              entryEditorSettings.update((view = {}) => ({\n                ...view,\n                syncScrolling: !view.syncScrolling,\n              }));\n            }}\n          />\n        {/if}\n      </Menu>\n    {/snippet}\n  </MenuButton>\n  {#if showSaveOptions}\n    <SplitButton\n      variant=\"primary\"\n      label={$_(saving ? 'saving' : 'save')}\n      disabled={disabled || !modified || saving}\n      keyShortcuts=\"Accel+S\"\n      onclick={() => {\n        save();\n      }}\n    >\n      {#snippet popup()}\n        <!-- Show the opposite option: if automatic deployments are enabled, allow to disable it -->\n        <Menu>\n          <MenuItem\n            label={$_(autoDeployEnabled ? 'save_without_publishing' : 'save_and_publish')}\n            onclick={() => {\n              save({ skipCI: autoDeployEnabled });\n            }}\n          />\n        </Menu>\n      {/snippet}\n    </SplitButton>\n  {:else}\n    <Button\n      variant=\"primary\"\n      label={$_(saving ? 'saving' : 'save')}\n      disabled={disabled || !modified || saving}\n      keyShortcuts=\"Accel+S\"\n      onclick={() => {\n        save();\n      }}\n    />\n  {/if}\n</Toolbar>\n\n<Toast bind:show={showValidationToast}>\n  <Alert status=\"error\">\n    {$_(errorCount === 1 ? 'entry_validation_error' : 'entry_validation_errors', {\n      values: { count: errorCount },\n    })}\n  </Alert>\n</Toast>\n\n<Toast id={$copyFromLocaleToast.id} bind:show={$copyFromLocaleToast.show}>\n  {@const { status, message, count, sourceLocale } = $copyFromLocaleToast}\n  <Alert {status}>\n    {$_(`editor.${message}`, {\n      values: { count, source: sourceLocale ? getLocaleLabel(sourceLocale) : '' },\n    })}\n  </Alert>\n</Toast>\n\n<EditSlugDialog bind:open={showEditSlugDialog} />\n\n<ConfirmationDialog\n  bind:open={showDeleteDialog}\n  title={$_('delete_entry')}\n  okLabel={$_('delete')}\n  onOk={async () => {\n    if (originalEntry) {\n      await deleteEntries(\n        [originalEntry.id],\n        associatedAssets.map(({ path }) => path),\n      );\n    }\n\n    _goBack();\n  }}\n  onClose={() => {\n    menuButton?.focus();\n  }}\n>\n  {$_(\n    associatedAssets.length\n      ? 'confirm_deleting_this_entry_with_assets'\n      : 'confirm_deleting_this_entry',\n  )}\n</ConfirmationDialog>\n\n<!-- @todo make the error message more informative -->\n<AlertDialog\n  bind:open={showErrorDialog}\n  title={$_('saving_entry.error.title')}\n  onClose={() => {\n    menuButton?.focus();\n  }}\n>\n  {$_('saving_entry.error.description')}\n  {#if errorMessage}\n    <div role=\"none\" class=\"error\">\n      {errorMessage}\n    </div>\n  {/if}\n</AlertDialog>\n\n<style lang=\"scss\">\n  .error {\n    margin-top: 8px;\n    border-radius: var(--sui-control-medium-border-radius);\n    padding: 12px;\n    background-color: var(--sui-secondary-background-color);\n    font-size: var(--sui-font-size-default);\n    line-height: 1.5;\n  }\n</style>\n","<script>\n  import { Alert, Button, EmptyState, Group, Toast } from '@sveltia/ui';\n  import { onMount, tick, untrack } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import BackupFeedback from '$lib/components/contents/details/backup-feedback.svelte';\n  import PaneBody from '$lib/components/contents/details/pane-body.svelte';\n  import PaneHeader from '$lib/components/contents/details/pane-header.svelte';\n  import Toolbar from '$lib/components/contents/details/toolbar.svelte';\n  import { goto } from '$lib/services/app/navigation';\n  import { canCreateEntry } from '$lib/services/contents/collection/entries';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import {\n    resetBackupToastState,\n    showBackupToastIfNeeded,\n  } from '$lib/services/contents/draft/backup';\n  import {\n    editorLeftPane,\n    editorRightPane,\n    showContentOverlay,\n    showDuplicateToast,\n  } from '$lib/services/contents/editor';\n  import { entryEditorSettings } from '$lib/services/contents/editor/settings';\n  import { getLocaleLabel } from '$lib/services/contents/i18n';\n  import { DEFAULT_I18N_CONFIG } from '$lib/services/contents/i18n/config';\n  import { isMediumScreen, isSmallScreen } from '$lib/services/user/env';\n\n  let restoring = false;\n\n  let hidden = $state(true);\n  /** @type {HTMLElement | undefined} */\n  let wrapper = $state();\n  /** @type {HTMLElement | undefined} */\n  let leftPaneContentArea = $state();\n  /** @type {HTMLElement | undefined} */\n  let rightPaneContentArea = $state();\n\n  const isNew = $derived($entryDraft?.isNew ?? true);\n  const collection = $derived($entryDraft?.collection);\n  const collectionFile = $derived($entryDraft?.collectionFile);\n  const { showPreview } = $derived($entryEditorSettings ?? {});\n  const { i18nEnabled, allLocales, defaultLocale } = $derived(\n    (collectionFile ?? collection)?._i18n ?? DEFAULT_I18N_CONFIG,\n  );\n  const canPreview = $derived($entryDraft?.canPreview ?? true);\n  const paneStateKey = $derived(\n    collectionFile?.name ? [collection?.name, collectionFile.name].join('|') : collection?.name,\n  );\n  const canCreate = $derived(collection?.create ?? false);\n  const limit = $derived(collection?.limit ?? Infinity);\n  const createDisabled = $derived(!canCreateEntry(collection));\n\n  /**\n   * Restore the pane state from IndexedDB.\n   * @returns {Promise<boolean>} Whether the panes are restored.\n   */\n  const restorePanes = async () => {\n    const [_editorLeftPane, _editorRightPane] =\n      $entryEditorSettings?.paneStates?.[paneStateKey ?? ''] ?? [];\n\n    if (\n      restoring ||\n      !_editorLeftPane ||\n      !_editorRightPane ||\n      (!!_editorLeftPane.locale && !allLocales.includes(_editorLeftPane.locale)) ||\n      (!!_editorRightPane.locale && !allLocales.includes(_editorRightPane.locale)) ||\n      ((!showPreview || !canPreview) &&\n        (_editorLeftPane.mode === 'preview' || _editorRightPane.mode === 'preview'))\n    ) {\n      return false;\n    }\n\n    restoring = true;\n    await tick();\n    $editorLeftPane = _editorLeftPane;\n    $editorRightPane = _editorRightPane;\n    await tick();\n    restoring = false;\n\n    if ($isSmallScreen || $isMediumScreen) {\n      $editorRightPane = null;\n    }\n\n    return true;\n  };\n\n  /**\n   * Hide the preview pane if it’s disabled by the user or the collection/file.\n   */\n  const switchPanes = async () => {\n    if (!$entryDraft) {\n      return;\n    }\n\n    if (await restorePanes()) {\n      return;\n    }\n\n    $editorLeftPane = { mode: 'edit', locale: $editorLeftPane?.locale ?? defaultLocale };\n\n    if ($isSmallScreen || $isMediumScreen) {\n      $editorRightPane = null;\n    } else if (!showPreview || !canPreview) {\n      const otherLocales = i18nEnabled\n        ? allLocales.filter((l) => l !== $editorLeftPane?.locale)\n        : [];\n\n      $editorRightPane = otherLocales.length ? { mode: 'edit', locale: otherLocales[0] } : null;\n    } else {\n      $editorRightPane = { mode: 'preview', locale: $editorLeftPane.locale };\n    }\n  };\n\n  /**\n   * Save the pane state to IndexedDB.\n   */\n  const savePanes = () => {\n    if (!collection || restoring || !$editorLeftPane || !$editorRightPane || !paneStateKey) {\n      return;\n    }\n\n    entryEditorSettings.update((view = {}) => ({\n      ...view,\n      paneStates: {\n        ...view.paneStates,\n        [paneStateKey]: [$editorLeftPane, $editorRightPane],\n      },\n    }));\n  };\n\n  /**\n   * Move focus to the wrapper once the overlay is loaded.\n   */\n  const moveFocus = async () => {\n    // Wait until `inert` is updated\n    await tick();\n\n    if (wrapper) {\n      wrapper.tabIndex = 0;\n      wrapper.focus();\n    }\n  };\n\n  onMount(() => {\n    wrapper?.addEventListener('transitionend', () => {\n      if (!$showContentOverlay) {\n        hidden = true;\n        $entryDraft = null;\n      }\n    });\n  });\n\n  $effect(() => {\n    if (paneStateKey) {\n      // Reset the editor panes\n      $editorLeftPane = null;\n      $editorRightPane = null;\n    }\n  });\n\n  $effect(() => {\n    void [showPreview, canPreview, $isSmallScreen, $isMediumScreen];\n\n    untrack(() => {\n      switchPanes();\n    });\n  });\n\n  $effect(() => {\n    void [$editorLeftPane, $editorRightPane];\n    savePanes();\n  });\n\n  $effect(() => {\n    if (wrapper) {\n      if (!$showContentOverlay) {\n        showBackupToastIfNeeded();\n      } else if (hidden) {\n        hidden = false;\n        switchPanes();\n        moveFocus();\n        resetBackupToastState();\n      }\n    }\n  });\n</script>\n\n<div\n  role=\"group\"\n  class=\"wrapper content-editor\"\n  {hidden}\n  inert={!$showContentOverlay}\n  aria-label={$_('content_editor')}\n  bind:this={wrapper}\n>\n  {#key $entryDraft?.createdAt}\n    <Toolbar disabled={isNew && createDisabled} />\n    {#if !$entryDraft}\n      <!-- Hide the content after saving a draft -->\n    {:else if isNew && createDisabled}\n      <EmptyState>\n        <div role=\"none\">\n          {#if !canCreate}\n            {$_('creating_entries_disabled_by_admin')}\n          {:else}\n            {$_('creating_entries_disabled_by_limit', { values: { limit } })}\n          {/if}\n        </div>\n        <div role=\"none\">\n          <Button\n            variant=\"primary\"\n            onclick={() => {\n              goto(`/collection/${collection?.name}`, {\n                replaceState: true,\n                transitionType: 'backwards',\n              });\n            }}\n          >\n            {$_('back_to_collection')}\n          </Button>\n        </div>\n      </EmptyState>\n    {:else}\n      <div role=\"none\" class=\"cols\">\n        {#if collection}\n          {#if $editorLeftPane}\n            {@const { locale, mode } = $editorLeftPane}\n            <Group\n              class=\"pane\"\n              aria-label={$_(mode === 'edit' ? 'edit_x_locale' : 'preview_x_locale', {\n                values: { locale: getLocaleLabel(locale) },\n              })}\n              data-locale={locale}\n              data-mode={mode}\n            >\n              <PaneHeader\n                id=\"left-pane-header\"\n                thisPane={editorLeftPane}\n                thatPane={editorRightPane}\n              />\n              <PaneBody\n                id=\"left-pane-body\"\n                thisPane={editorLeftPane}\n                bind:thisPaneContentArea={leftPaneContentArea}\n                bind:thatPaneContentArea={rightPaneContentArea}\n              />\n            </Group>\n          {/if}\n          {#if $editorRightPane}\n            {@const { locale, mode } = $editorRightPane}\n            <Group\n              aria-label={$_(mode === 'edit' ? 'edit_x_locale' : 'preview_x_locale', {\n                values: { locale: getLocaleLabel(locale) },\n              })}\n              data-locale={locale}\n              data-mode={mode}\n            >\n              <PaneHeader\n                id=\"right-pane-header\"\n                thisPane={editorRightPane}\n                thatPane={editorLeftPane}\n              />\n              <PaneBody\n                id=\"right-pane-body\"\n                thisPane={editorRightPane}\n                bind:thisPaneContentArea={rightPaneContentArea}\n                bind:thatPaneContentArea={leftPaneContentArea}\n              />\n            </Group>\n          {/if}\n        {/if}\n      </div>\n    {/if}\n  {/key}\n</div>\n\n<BackupFeedback />\n\n<Toast bind:show={$showDuplicateToast}>\n  <Alert status=\"success\">\n    {$_('entry_duplicated')}\n  </Alert>\n</Toast>\n\n<style lang=\"scss\">\n  .wrapper {\n    position: fixed;\n    inset: 0;\n    z-index: 100;\n    display: flex;\n    flex-direction: column;\n    background-color: var(--sui-secondary-background-color);\n    transition: filter 250ms;\n\n    &[hidden] {\n      display: none;\n    }\n\n    &[inert] {\n      filter: opacity(0);\n    }\n\n    .cols {\n      flex: auto;\n      overflow: hidden;\n      display: flex;\n      gap: 4px;\n      background-color: var(--sui-secondary-background-color); // same as toolbar\n\n      :global {\n        & > div {\n          display: flex;\n          flex-direction: column;\n          min-width: 480px;\n          background-color: var(--sui-primary-background-color);\n          transition: all 500ms;\n\n          &[data-mode='edit'] {\n            flex: 1 1;\n          }\n\n          &[data-mode='preview'] {\n            flex: 2 1;\n          }\n\n          @media (width < 768px) {\n            min-width: auto;\n          }\n        }\n      }\n    }\n  }\n</style>\n","import { isObject } from '@sveltia/utils/object';\nimport { derived } from 'svelte/store';\n\nimport { selectedCollection } from '$lib/services/contents/collection';\nimport { currentView } from '$lib/services/contents/collection/view';\nimport { getPropertyValue } from '$lib/services/contents/entry/fields';\nimport { getRegex } from '$lib/services/utils/misc';\n\n/**\n * @import { Entry, FilteringConditions, InternalCollection } from '$lib/types/private';\n * @import { ViewFilter, ViewFilters } from '$lib/types/public';\n */\n\n/**\n * Parse view filters configuration. This supports both an array, which is compatible with\n * Netlify/Decap CMS, and an object, which is compatible with Static CMS.\n * @param {ViewFilter[] | ViewFilters | undefined} filters View filters configuration.\n * @returns {{ options: ViewFilter[], default?: FilteringConditions }} Parsed view filters.\n * @see https://decapcms.org/docs/configuration-options/#view_filters\n * @see https://staticjscms.netlify.app/docs/collection-overview#view-filters\n */\nexport const parseFilterConfig = (filters) => {\n  if (Array.isArray(filters)) {\n    return { options: filters };\n  }\n\n  if (isObject(filters)) {\n    const { filters: options, default: defaultFilterName } = /** @type {ViewFilters} */ (filters);\n\n    if (Array.isArray(options)) {\n      const defaultFilter = defaultFilterName\n        ? options.find(({ name }) => name === defaultFilterName)\n        : undefined;\n\n      return {\n        options,\n        default: defaultFilter\n          ? { field: defaultFilter.field, pattern: defaultFilter.pattern }\n          : undefined,\n      };\n    }\n  }\n\n  return { options: [] };\n};\n\n/**\n * Filter the given entries.\n * @param {Entry[]} entries Entry list.\n * @param {InternalCollection} collection Collection that the entries belong to.\n * @param {FilteringConditions[]} filters One or more filtering conditions.\n * @returns {Entry[]} Filtered entry list.\n * @see https://decapcms.org/docs/configuration-options/#view_filters\n */\nexport const filterEntries = (entries, collection, filters) => {\n  const {\n    name: collectionName,\n    view_filters: configuredFilters = [],\n    _i18n: { defaultLocale: locale },\n  } = collection;\n\n  const { options } = parseFilterConfig(configuredFilters);\n\n  // Ignore invalid filters\n  const validFilters = filters.filter(\n    ({ field, pattern }) =>\n      field !== undefined &&\n      pattern !== undefined &&\n      options.some((f) => f.field === field && String(f.pattern) === String(pattern)),\n  );\n\n  return entries.filter((entry) =>\n    validFilters.every(({ field, pattern }) => {\n      // Check both the raw value and referenced value\n      const args = { entry, locale, collectionName, key: field };\n      const rawValue = getPropertyValue({ ...args, resolveRef: false });\n      const refValue = getPropertyValue({ ...args });\n      const regex = getRegex(pattern);\n\n      if (rawValue === undefined || refValue === undefined) {\n        return false;\n      }\n\n      if (regex) {\n        return regex.test(String(rawValue)) || regex.test(String(refValue));\n      }\n\n      return rawValue === pattern || refValue === pattern;\n    }),\n  );\n};\n\n/**\n * View filters for the selected entry collection.\n * @type {import('svelte/store').Readable<ViewFilter[]>}\n */\nexport const viewFilters = derived([selectedCollection], ([_collection], set) => {\n  // Disable sorting for file/singleton collection\n  if (!_collection?.folder) {\n    set([]);\n\n    return;\n  }\n\n  const { options, default: defaultFilter } = parseFilterConfig(_collection.view_filters);\n\n  set(options);\n\n  currentView.update((_view) => ({\n    ..._view,\n    filters: _view.filters ?? (defaultFilter ? [defaultFilter] : undefined),\n  }));\n});\n","import { isObject } from '@sveltia/utils/object';\nimport { compare } from '@sveltia/utils/string';\nimport { derived, get } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { selectedCollection } from '$lib/services/contents/collection';\nimport { currentView } from '$lib/services/contents/collection/view';\nimport { getPropertyValue } from '$lib/services/contents/entry/fields';\nimport { getRegex } from '$lib/services/utils/misc';\n\n/**\n * @import { Entry, GroupingConditions, InternalCollection } from '$lib/types/private';\n * @import { ViewGroup, ViewGroups } from '$lib/types/public';\n */\n\n/**\n * Parse view groups configuration. This supports both an array, which is compatible with\n * Netlify/Decap CMS, and an object, which is compatible with Static CMS.\n * @param {ViewGroup[] | ViewGroups | undefined} filters View groups configuration.\n * @returns {{ options: ViewGroup[], default?: GroupingConditions }} Parsed view groups.\n * @see https://decapcms.org/docs/configuration-options/#view_groups\n * @see https://staticjscms.netlify.app/docs/collection-overview#view-groups\n */\nexport const parseGroupConfig = (filters) => {\n  if (Array.isArray(filters)) {\n    return { options: filters };\n  }\n\n  if (isObject(filters)) {\n    const { groups: options, default: defaultGroupName } = /** @type {ViewGroups} */ (filters);\n\n    if (Array.isArray(options)) {\n      const defaultGroup = defaultGroupName\n        ? options.find(({ name }) => name === defaultGroupName)\n        : undefined;\n\n      return {\n        options,\n        default: defaultGroup\n          ? { field: defaultGroup.field, pattern: defaultGroup.pattern }\n          : undefined,\n      };\n    }\n  }\n\n  return { options: [] };\n};\n\n/**\n * Group the given entries.\n * @param {Entry[]} entries Entry list.\n * @param {InternalCollection} collection Collection that the entries belong to.\n * @param {GroupingConditions | null | undefined} conditions Grouping conditions.\n * @returns {{ name: string, entries: Entry[] }[]} Grouped entries, where each group object contains\n * a name and an entry list. When ungrouped, there will still be one group object named `*`.\n * @see https://decapcms.org/docs/configuration-options/#view_groups\n */\nexport const groupEntries = (entries, collection, conditions) => {\n  const { field, pattern } = conditions ?? { field: '', pattern: undefined };\n\n  if (!field) {\n    return entries.length ? [{ name: '*', entries }] : [];\n  }\n\n  const {\n    name: collectionName,\n    _i18n: { defaultLocale: locale },\n  } = collection;\n\n  const sortCondition = get(currentView).sort;\n  const regex = getRegex(pattern);\n  /** @type {Record<string, Entry[]>} */\n  const groups = {};\n  const otherKey = get(_)('other');\n\n  entries.forEach((entry) => {\n    const value = getPropertyValue({ entry, locale, collectionName, key: field });\n\n    const key =\n      value === undefined\n        ? otherKey\n        : regex\n          ? (String(value).match(regex)?.[0] ?? otherKey)\n          : String(value);\n\n    if (!(key in groups)) {\n      groups[key] = [];\n    }\n\n    groups[key].push(entry);\n  });\n\n  // Sort groups by key\n  const sortedGroups = Object.entries(groups)\n    .map(([name, _entries]) => ({ name, entries: _entries }))\n    .sort(({ name: aKey }, { name: bKey }) => compare(aKey, bKey));\n\n  // Keep the descending order if already sorted, especially on the date field\n  if (sortCondition?.key === field && sortCondition.order === 'descending') {\n    sortedGroups.reverse();\n  }\n\n  return sortedGroups;\n};\n\n/**\n * View groups for the selected entry collection.\n * @type {import('svelte/store').Readable<ViewGroup[]>}\n */\nexport const viewGroups = derived([selectedCollection], ([_collection], set) => {\n  // Disable sorting for file/singleton collection\n  if (!_collection?.folder) {\n    set([]);\n\n    return;\n  }\n\n  const { options, default: defaultGroup } = parseGroupConfig(_collection.view_groups);\n\n  set(options);\n\n  currentView.update((_view) => ({\n    ..._view,\n    group: _view.group === undefined ? defaultGroup : _view.group,\n  }));\n});\n","import { IndexedDB } from '@sveltia/utils/storage';\nimport equal from 'fast-deep-equal';\nimport { get, writable } from 'svelte/store';\n\nimport { backend } from '$lib/services/backends';\nimport { selectedCollection } from '$lib/services/contents/collection';\nimport { currentView } from '$lib/services/contents/collection/view';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import { BackendService, EntryListView } from '$lib/types/private';\n */\n\n/**\n * View settings for all the folder collections.\n * @type {Writable<Record<string, EntryListView> | undefined>}\n */\nexport const entryListSettings = writable();\n\n/**\n * Initialize {@link entryListSettings} and relevant subscribers.\n * @param {BackendService} _backend Backend service.\n */\nexport const initSettings = async ({ repository }) => {\n  const { databaseName } = repository ?? {};\n  const settingsDB = databaseName ? new IndexedDB(databaseName, 'ui-settings') : null;\n  const storageKey = 'contents-view';\n\n  entryListSettings.set((await settingsDB?.get(storageKey)) ?? {});\n\n  entryListSettings.subscribe((_settings) => {\n    (async () => {\n      try {\n        if (!equal(_settings, await settingsDB?.get(storageKey))) {\n          await settingsDB?.set(storageKey, _settings);\n        }\n      } catch {\n        //\n      }\n    })();\n  });\n\n  currentView.subscribe((view) => {\n    const { name } = get(selectedCollection) ?? {};\n    const savedView = get(entryListSettings)?.[name ?? ''] ?? {};\n\n    if (name && !equal(view, savedView)) {\n      entryListSettings.update((_settings) => ({ ..._settings, [name]: view }));\n    }\n  });\n};\n\nbackend.subscribe((_backend) => {\n  if (_backend && !get(entryListSettings)) {\n    initSettings(_backend);\n  }\n});\n","import { unique } from '@sveltia/utils/array';\nimport { isObject } from '@sveltia/utils/object';\nimport equal from 'fast-deep-equal';\nimport { derived, get } from 'svelte/store';\nimport { _, locale as appLocale } from 'svelte-i18n';\n\nimport { allEntries } from '$lib/services/contents';\nimport { selectedCollection } from '$lib/services/contents/collection';\nimport { currentView } from '$lib/services/contents/collection/view';\nimport { entryListSettings } from '$lib/services/contents/collection/view/settings';\nimport { getField } from '$lib/services/contents/entry/fields';\n\n/**\n * @import { Readable } from 'svelte/store';\n * @import { EntryCollection, SortingConditions, SortOrder } from '$lib/types/private';\n * @import { Field, FieldKeyPath, NumberField, SortableFields } from '$lib/types/public';\n */\n\n/**\n * Default sort keys for the entry collection. In addition to the `title`, `date`, `author` and\n * `description` fields supported by Netlify/Decap CMS, it also includes `name` for the entry name\n * field, which is used by Sveltia CMS to infer the entry title.\n * @see https://decapcms.org/docs/configuration-options/#sortable_fields\n */\nexport const DEFAULT_SORT_KEYS = ['title', 'name', 'date', 'author', 'description'];\n\n/**\n * Map of special sort keys and their types.\n * @type {Record<string, StringConstructor | DateConstructor>}\n */\nexport const SPECIAL_SORT_KEY_TYPES = {\n  slug: String,\n  commit_author: String,\n  commit_date: Date,\n};\n\n/**\n * List of special sort keys.\n * @type {string[]}\n */\nexport const SPECIAL_SORT_KEYS = Object.keys(SPECIAL_SORT_KEY_TYPES);\n\n/**\n * Check if the given value is a valid array of strings.\n * @param {unknown} arr Value to check.\n * @returns {boolean} Whether the value is a valid array of strings.\n */\nexport const isValidArray = (arr) =>\n  Array.isArray(arr) && arr.every((item) => typeof item === 'string');\n\n/**\n * Parse custom sortable fields configuration.\n * @param {string[] | SortableFields} customSortableFields Custom sortable fields configuration.\n * @returns {{ keys: string[], defaultKey?: string, defaultOrder?: SortOrder }} Parsed sortable\n * fields configuration.\n */\nexport const parseCustomSortableFields = (customSortableFields) => {\n  // Netlify/Decap CMS compatibility: if `sortable_fields` is an array, it should be treated as a\n  // list of field keys\n  if (isValidArray(customSortableFields)) {\n    return { keys: /** @type {string[]} */ (customSortableFields) };\n  }\n\n  // Static CMS compatibility: if `sortable_fields` is an object, it should be treated as a\n  // definition object with `fields` and `default` properties\n  if (isObject(customSortableFields)) {\n    const { fields: keys, default: settings } = /** @type {SortableFields} */ (\n      customSortableFields\n    );\n\n    if (!isValidArray(keys)) {\n      return { keys: [] };\n    }\n\n    if (!settings || !isObject(settings)) {\n      return { keys };\n    }\n\n    return {\n      keys,\n      defaultKey: settings.field,\n      defaultOrder:\n        // Allow title case for Static CMS compatibility\n        ['descending', 'Descending'].includes(settings.direction ?? '')\n          ? 'descending'\n          : 'ascending',\n    };\n  }\n\n  // Invalid configuration\n  return { keys: [] };\n};\n\n/**\n * Get default sort keys for the entry collection.\n * @param {FieldKeyPath | undefined} customIdField Custom ID field key path.\n * @returns {{ keys: string[], defaultKey?: string, defaultOrder?: SortOrder }} Parsed sortable\n * fields configuration.\n */\nexport const getDefaultSortKeys = (customIdField) => {\n  if (customIdField) {\n    // Filter out the custom ID field from DEFAULT_SORT_KEYS to avoid duplicates\n    const filteredDefaultKeys = DEFAULT_SORT_KEYS.filter((key) => key !== customIdField);\n\n    return {\n      keys: [customIdField, ...filteredDefaultKeys],\n      defaultKey: customIdField,\n    };\n  }\n\n  return { keys: [...DEFAULT_SORT_KEYS] };\n};\n\n/**\n * Get sort configuration for the given collection.\n * @param {object} args Arguments.\n * @param {EntryCollection} args.collection Collection.\n * @param {boolean} args.isCommitAuthorAvailable Whether the entries in the collection have a commit\n * author. Available for some Git-based backends.\n * @param {boolean} args.isCommitDateAvailable Whether the entries in the collection have a commit\n * date. Available for some Git-based backends.\n * @returns {{ keys: string[], default: SortingConditions }} A list of sortable fields and default\n * sort conditions.\n */\nexport const getSortConfig = ({ collection, isCommitAuthorAvailable, isCommitDateAvailable }) => {\n  const {\n    name: collectionName,\n    identifier_field: customIdField,\n    sortable_fields: customSortableFields,\n  } = collection;\n\n  let { keys, defaultKey, defaultOrder } = customSortableFields\n    ? parseCustomSortableFields(customSortableFields)\n    : getDefaultSortKeys(customIdField);\n\n  const hasCommitAuthorKey = keys.includes('commit_author');\n  const hasCommitDateKey = keys.includes('commit_date');\n\n  if (isCommitAuthorAvailable) {\n    if (!keys.includes('author') && !hasCommitAuthorKey) {\n      keys.push('commit_author');\n    }\n  } else if (hasCommitAuthorKey) {\n    keys = keys.filter((key) => key !== 'commit_author');\n  }\n\n  if (isCommitDateAvailable) {\n    if (!keys.includes('date') && !hasCommitDateKey) {\n      keys.push('commit_date');\n    }\n  } else if (hasCommitDateKey) {\n    keys = keys.filter((key) => key !== 'commit_date');\n  }\n\n  // Make sure the keys are valid field keys or special keys\n  keys = unique(keys).filter(\n    (key) =>\n      !!key && (SPECIAL_SORT_KEYS.includes(key) || !!getField({ collectionName, keyPath: key })),\n  );\n\n  defaultKey = defaultKey && keys.includes(defaultKey) ? defaultKey : keys[0];\n  defaultOrder ??= defaultKey ? 'ascending' : undefined;\n\n  return {\n    keys,\n    default: {\n      key: defaultKey,\n      order: defaultOrder,\n    },\n  };\n};\n\n/**\n * Get the type of the given key, which can be a field key path or one of the entry metadata keys.\n * @param {object} args Arguments.\n * @param {string} args.key Key.\n * @param {Field | undefined} args.fieldConfig Field configuration object.\n * @returns {StringConstructor | BooleanConstructor | NumberConstructor | DateConstructor} Type of\n * the key.\n */\nexport const getSortKeyType = ({ key, fieldConfig }) => {\n  if (key in SPECIAL_SORT_KEY_TYPES) {\n    return SPECIAL_SORT_KEY_TYPES[key];\n  }\n\n  if (fieldConfig?.widget === 'boolean') {\n    return Boolean;\n  }\n\n  if (fieldConfig?.widget === 'number') {\n    const { value_type: valueType = 'int' } = /** @type {NumberField} */ (fieldConfig);\n\n    if (valueType === 'int' || valueType === 'float') {\n      return Number;\n    }\n  }\n\n  return String;\n};\n\n/**\n * Get a field’s label by key.\n * @param {object} args Arguments.\n * @param {EntryCollection} args.collection Collection.\n * @param {FieldKeyPath | string} args.key Field key path or one of other entry metadata property\n * keys: `slug`, `commit_author` and `commit_date`.\n * @returns {string} Label. For a nested field, it would be something like `Name – English`.\n */\nexport const getSortKeyLabel = ({ collection, key }) => {\n  if ([...SPECIAL_SORT_KEYS, 'name'].includes(key)) {\n    return get(_)(`sort_keys.${key}`);\n  }\n\n  if (key.includes('.')) {\n    return key\n      .split('.')\n      .map((_key, index, arr) => {\n        if (/^\\d+$/.test(_key)) {\n          return undefined;\n        }\n\n        const keyPath = arr.slice(0, index + 1).join('.');\n\n        return getField({ collectionName: collection.name, keyPath })?.label || _key;\n      })\n      .filter(Boolean)\n      .join(' – ');\n  }\n\n  return collection.fields?.find(({ name }) => name === key)?.label || key;\n};\n\n/**\n * List of available sort keys for the selected entry collection.\n * @type {Readable<{ key: string, label: string }[]>}\n */\nexport const sortKeys = derived(\n  // Include `appLocale` as a dependency because `getSortKeyLabel()` may return a localized label\n  [selectedCollection, allEntries, appLocale],\n  ([_collection, _allEntries], set) => {\n    // Disable sorting for file/singleton collection\n    if (!_collection?.folder) {\n      set([]);\n\n      return;\n    }\n\n    const collection = /** @type {EntryCollection} */ (_collection);\n    const view = get(entryListSettings)?.[collection.name] ?? { type: 'list' };\n\n    const { keys, default: defaultSort } = getSortConfig({\n      collection,\n      isCommitAuthorAvailable: _allEntries.some((entry) => !!entry.commitAuthor),\n      isCommitDateAvailable: _allEntries.some((entry) => !!entry.commitDate),\n    });\n\n    view.sort ??= defaultSort;\n\n    set(keys.map((key) => ({ key, label: getSortKeyLabel({ collection, key }) })));\n\n    if (!equal(view, get(currentView))) {\n      currentView.set(view);\n    }\n  },\n);\n","/**\n * Remove some inline Markdown syntax from the given string. This covers bold, italic, strikethrough\n * and code. This function does not remove single characters like the `_` prefix in `_redirects`.\n * @param {string} str Original string.\n * @returns {string} Modified string.\n */\nexport const removeMarkdownSyntax = (str) => {\n  let result = str;\n  let changed = true;\n\n  // Keep processing until no more changes are made to handle nested cases\n  while (changed) {\n    const before = result;\n\n    // Process from innermost to outermost by trying single character patterns first\n    result = result.replaceAll(/([_*`~])([^_*`~]+)\\1/g, '$2');\n\n    // Then handle multi-character patterns (like ** or __ or ~~)\n    result = result.replaceAll(/([_*`~]{2,})(.+?)\\1/g, '$2');\n\n    changed = result !== before;\n  }\n\n  return result;\n};\n","import { compare } from '@sveltia/utils/string';\n\nimport { getIndexFile } from '$lib/services/contents/collection/index-file';\nimport { getSortKeyType } from '$lib/services/contents/collection/view/sort-keys';\nimport { getField, getPropertyValue } from '$lib/services/contents/entry/fields';\nimport { getEntrySummary } from '$lib/services/contents/entry/summary';\nimport { getDate } from '$lib/services/contents/widgets/date-time/helper';\nimport { removeMarkdownSyntax } from '$lib/services/utils/markdown';\n\n/**\n * @import { Entry, InternalCollection, SortingConditions } from '$lib/types/private';\n * @import { DateTimeField } from '$lib/types/public';\n */\n\n/**\n * List of fields that may contain Markdown syntax and should be stripped before sorting. This\n * includes `title`, `summary`, and `description`, which are commonly used in entry collections.\n * @type {string[]}\n */\nexport const markdownFieldKeys = ['title', 'summary', 'description'];\n\n/**\n * Sort the given entries.\n * @param {Entry[]} entries Entry list.\n * @param {InternalCollection} collection Collection that the entries belong to.\n * @param {SortingConditions} [conditions] Sorting conditions.\n * @returns {Entry[]} Sorted entry list.\n * @see https://decapcms.org/docs/configuration-options/#sortable_fields\n */\nexport const sortEntries = (entries, collection, { key, order } = {}) => {\n  const _entries = [...entries];\n\n  const {\n    name: collectionName,\n    _i18n: { defaultLocale: locale },\n  } = collection;\n\n  if (key === undefined) {\n    const options = { useTemplate: true, allowMarkdown: true };\n\n    return _entries.sort((a, b) =>\n      getEntrySummary(collection, a, options).localeCompare(\n        getEntrySummary(collection, b, options),\n      ),\n    );\n  }\n\n  const fieldConfig = getField({ collectionName, keyPath: key });\n  const type = getSortKeyType({ key, fieldConfig });\n\n  const valueMap = Object.fromEntries(\n    _entries.map((entry) => [entry.slug, getPropertyValue({ entry, locale, collectionName, key })]),\n  );\n\n  const dateFieldConfig =\n    fieldConfig?.widget === 'datetime' ? /** @type {DateTimeField} */ (fieldConfig) : undefined;\n\n  // Check if the field is a Markdown field: we use both the field config and a hardcoded key list\n  // to determine this, as some fields may be text fields that contain Markdown syntax.\n  const isMarkdownField = fieldConfig?.widget === 'markdown' || markdownFieldKeys.includes(key);\n\n  _entries.sort((a, b) => {\n    const aValue = valueMap[a.slug];\n    const bValue = valueMap[b.slug];\n\n    if (dateFieldConfig) {\n      const aDate = aValue ? getDate(aValue, dateFieldConfig) : undefined;\n      const bDate = bValue ? getDate(bValue, dateFieldConfig) : undefined;\n\n      return Number(aDate ?? 0) - Number(bDate ?? 0);\n    }\n\n    if (type === String) {\n      const aValueStr = aValue ? String(aValue) : '';\n      const bValueStr = bValue ? String(bValue) : '';\n\n      // Strip Markdown syntax from the values in case of some text fields\n      if (isMarkdownField) {\n        return compare(removeMarkdownSyntax(aValueStr), removeMarkdownSyntax(bValueStr));\n      }\n\n      return compare(aValueStr, bValueStr);\n    }\n\n    return Number(aValue ?? 0) - Number(bValue ?? 0);\n  });\n\n  if (order === 'descending') {\n    _entries.reverse();\n  }\n\n  const indexFileName = getIndexFile(collection)?.name;\n\n  // Index file should always be at the top\n  if (indexFileName) {\n    const index = _entries.findIndex((entry) => entry.slug === indexFileName);\n\n    if (index > -1) {\n      _entries.unshift(_entries.splice(index, 1)[0]);\n    }\n  }\n\n  return _entries;\n};\n","import equal from 'fast-deep-equal';\nimport { derived, get, writable } from 'svelte/store';\nimport { locale as appLocale } from 'svelte-i18n';\n\nimport { allEntries } from '$lib/services/contents';\nimport { selectedCollection } from '$lib/services/contents/collection';\nimport { getEntriesByCollection, selectedEntries } from '$lib/services/contents/collection/entries';\nimport { getCollectionFilesByEntry } from '$lib/services/contents/collection/files';\nimport { filterEntries } from '$lib/services/contents/collection/view/filter';\nimport { groupEntries } from '$lib/services/contents/collection/view/group';\nimport { sortEntries } from '$lib/services/contents/collection/view/sort';\nimport { prefs } from '$lib/services/user/prefs';\n\n/**\n * @import { Readable, Writable } from 'svelte/store';\n * @import { Entry, EntryListView, InternalCollection } from '$lib/types/private';\n */\n\n/**\n * View settings for the selected entry collection.\n * @type {Writable<EntryListView>}\n */\nexport const currentView = writable({ type: 'list' });\n\n/**\n * List of all the entries for the selected entry collection.\n * @type {Readable<Entry[]>}\n */\nexport const listedEntries = derived(\n  [allEntries, selectedCollection],\n  ([_allEntries, _collection], set) => {\n    if (_allEntries && _collection) {\n      set(getEntriesByCollection(_collection.name));\n    } else {\n      set([]);\n    }\n  },\n);\n\n/**\n * Sorted, filtered and grouped entries for the selected entry collection.\n * @type {Readable<{ name: string, entries: Entry[] }[]>}\n */\nexport const entryGroups = derived(\n  // Include `appLocale` as a dependency because `sortEntries()` and `groupEntries()` may return\n  // localized labels\n  [listedEntries, currentView, appLocale],\n  ([_listedEntries, _currentView], set) => {\n    const collection = /** @type {InternalCollection} */ (get(selectedCollection));\n    /** @type {Entry[]} */\n    let entries = [..._listedEntries];\n\n    // Reset the groups if the current collection is empty or a file/singleton collection\n    if (!entries.length || !!getCollectionFilesByEntry(collection, entries[0]).length) {\n      set([]);\n    } else {\n      entries = sortEntries(entries, collection, _currentView.sort);\n\n      if (_currentView.filters) {\n        entries = filterEntries(entries, collection, _currentView.filters);\n      }\n\n      const groups = groupEntries(entries, collection, _currentView.group);\n\n      if (!equal(get(entryGroups), groups)) {\n        set(groups);\n      }\n    }\n  },\n);\n\nlistedEntries.subscribe((entries) => {\n  selectedEntries.set([]);\n\n  if (get(prefs).devModeEnabled) {\n    // eslint-disable-next-line no-console\n    console.info('listedEntries', entries);\n  }\n});\n\nselectedCollection.subscribe((collection) => {\n  if (collection && get(prefs).devModeEnabled) {\n    // eslint-disable-next-line no-console\n    console.info('selectedCollection', collection);\n  }\n});\n","<script>\n  import { Checkbox, GridCell, GridRow, Icon, TruncatedText } from '@sveltia/ui';\n  import { locale as appLocale } from 'svelte-i18n';\n\n  import Image from '$lib/components/assets/shared/image.svelte';\n  import { goto } from '$lib/services/app/navigation';\n  import { selectedEntries } from '$lib/services/contents/collection/entries';\n  import {\n    getIndexFile,\n    isCollectionIndexFile,\n  } from '$lib/services/contents/collection/index-file';\n  import { listedEntries } from '$lib/services/contents/collection/view';\n  import { getEntryThumbnail } from '$lib/services/contents/entry/assets';\n  import { getEntrySummary } from '$lib/services/contents/entry/summary';\n  import { isMediumScreen, isSmallScreen } from '$lib/services/user/env';\n\n  /**\n   * @import { Entry, EntryCollection, ViewType } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {EntryCollection} collection Selected collection.\n   * @property {Entry} entry Entry.\n   * @property {ViewType} viewType View type.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    collection,\n    entry,\n    viewType,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /**\n   * Update the entry selection.\n   * @param {boolean} selected Whether the current entry item is selected.\n   */\n  const updateSelection = (selected) => {\n    selectedEntries.update((entries) => {\n      const index = entries.indexOf(entry);\n\n      if (selected && index === -1) {\n        entries.push(entry);\n      }\n\n      if (!selected && index > -1) {\n        entries.splice(index, 1);\n      }\n\n      return entries;\n    });\n  };\n</script>\n\n<GridRow\n  aria-rowindex={$listedEntries.indexOf(entry)}\n  onChange={(event) => {\n    updateSelection(event.detail.selected);\n  }}\n  onclick={() => {\n    goto(`/collections/${collection.name}/entries/${entry.subPath}`, {\n      transitionType: 'forwards',\n    });\n  }}\n>\n  {#if !($isSmallScreen || $isMediumScreen)}\n    <GridCell class=\"checkbox\">\n      <Checkbox\n        role=\"none\"\n        tabindex=\"-1\"\n        checked={$selectedEntries.includes(entry)}\n        onChange={({ detail: { checked } }) => {\n          updateSelection(checked);\n        }}\n      />\n    </GridCell>\n  {/if}\n  {#if collection._thumbnailFieldNames.length}\n    <GridCell class=\"image\">\n      {#await getEntryThumbnail(collection, entry) then src}\n        {#if src}\n          <Image {src} variant={viewType === 'list' ? 'icon' : 'tile'} cover />\n        {/if}\n      {/await}\n    </GridCell>\n  {/if}\n  <GridCell class=\"title\">\n    <div role=\"none\" class=\"label\">\n      <TruncatedText lines={2}>\n        {#key $appLocale}\n          {@html getEntrySummary(collection, entry, { useTemplate: true, allowMarkdown: true })}\n        {/key}\n        {#if isCollectionIndexFile(collection, entry)}\n          <Icon name={getIndexFile(collection)?.icon} class=\"home\" />\n        {/if}\n      </TruncatedText>\n    </div>\n  </GridCell>\n</GridRow>\n\n<style lang=\"scss\">\n  .label {\n    :global {\n      .icon.home {\n        opacity: 0.5;\n        font-size: 20px;\n        vertical-align: -4px;\n      }\n    }\n  }\n</style>\n","<script>\n  import { Button, Icon, Menu, MenuItem, SplitButton } from '@sveltia/ui';\n  import { _, locale as appLocale } from 'svelte-i18n';\n\n  import { goto } from '$lib/services/app/navigation';\n  import { allEntries } from '$lib/services/contents';\n  import { selectedCollection } from '$lib/services/contents/collection';\n  import { canCreateEntry } from '$lib/services/contents/collection/entries';\n  import { canCreateIndexFile, getIndexFile } from '$lib/services/contents/collection/index-file';\n\n  /**\n   * @typedef {object} Props\n   * @property {string} collectionName Collection name.\n   * @property {string} [label] Button label. If `undefined`, the button will be iconic.\n   * @property {string} [keyShortcuts] Keyboard shortcuts.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    collectionName,\n    label = undefined,\n    keyShortcuts = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const disabled = $derived(!canCreateEntry($selectedCollection));\n  const hasOptions = $derived(\n    // Use `$allEntries` as a trigger to update the state when a new entry is created\n    $allEntries && $selectedCollection ? canCreateIndexFile($selectedCollection) : false,\n  );\n  const indexFileLabel = $derived(\n    // `$appLocale` is a key, because `getIndexFile` can return a localized label\n    $appLocale && $selectedCollection ? getIndexFile($selectedCollection)?.label : '',\n  );\n  const ButtonComponent = $derived(hasOptions ? SplitButton : Button);\n\n  /**\n   * Open the content editor.\n   * @param {boolean} [index] Whether to create the index file instead of a regular entry.\n   */\n  const openEditor = (index = false) => {\n    goto(`/collections/${collectionName}/new`, { state: { index }, transitionType: 'forwards' });\n  };\n</script>\n\n<ButtonComponent\n  variant=\"primary\"\n  iconic={!label}\n  {disabled}\n  {label}\n  aria-label={$_('create_new_entry')}\n  {keyShortcuts}\n  onclick={() => openEditor()}\n>\n  {#snippet startIcon()}\n    <Icon name=\"edit\" />\n  {/snippet}\n  {#snippet popup()}\n    {#if hasOptions}\n      <Menu>\n        <MenuItem label={$_('entry')} onclick={() => openEditor()} />\n        <MenuItem label={indexFileLabel} onclick={() => openEditor(true)} />\n      </Menu>\n    {/if}\n  {/snippet}\n</ButtonComponent>\n","<script>\n  import { EmptyState, GridBody, InfiniteScroll } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import { _ } from 'svelte-i18n';\n\n  import ListContainer from '$lib/components/common/list-container.svelte';\n  import ListingGrid from '$lib/components/common/listing-grid.svelte';\n  import EntryListItem from '$lib/components/contents/list/entry-list-item.svelte';\n  import CreateEntryButton from '$lib/components/contents/toolbar/create-entry-button.svelte';\n  import { selectedCollection } from '$lib/services/contents/collection';\n  import { currentView, entryGroups, listedEntries } from '$lib/services/contents/collection/view';\n\n  /**\n   * @import { Entry, EntryCollection } from '$lib/types/private';\n   */\n\n  const collection = $derived(/** @type {EntryCollection | undefined} */ ($selectedCollection));\n  const viewType = $derived($currentView.type);\n  const allEntries = $derived($entryGroups.map(({ entries }) => entries).flat(1));\n</script>\n\n<ListContainer aria-label={collection?.files ? $_('file_list') : $_('entry_list')}>\n  {#if collection}\n    {#if allEntries.length}\n      {@const { defaultLocale } = collection._i18n}\n      <ListingGrid\n        {viewType}\n        id=\"entry-list\"\n        aria-label={$_('entries')}\n        aria-rowcount={$listedEntries.length}\n      >\n        {#each $entryGroups as { name, entries } (name)}\n          {#await sleep() then}\n            <!-- @todo Implement custom table column option that can replace summary template -->\n            <GridBody label={name !== '*' ? name : undefined}>\n              <InfiniteScroll\n                items={entries.filter(\n                  ({ locales }) => !!(locales[defaultLocale] ?? Object.values(locales)[0])?.content,\n                )}\n                itemKey=\"id\"\n              >\n                {#snippet renderItem(/** @type {Entry} */ entry)}\n                  {#await sleep() then}\n                    <EntryListItem {collection} {entry} {viewType} />\n                  {/await}\n                {/snippet}\n              </InfiniteScroll>\n            </GridBody>\n          {/await}\n        {/each}\n      </ListingGrid>\n    {:else if $listedEntries.length}\n      <EmptyState>\n        <span role=\"none\">{$_('no_entries_found')}</span>\n      </EmptyState>\n    {:else}\n      <EmptyState>\n        <span role=\"none\">{$_('no_entries_created')}</span>\n        <CreateEntryButton collectionName={collection.name} label={$_('create_new_entry')} />\n      </EmptyState>\n    {/if}\n  {:else}\n    <EmptyState>\n      <span role=\"none\">{$_('collection_not_found')}</span>\n    </EmptyState>\n  {/if}\n</ListContainer>\n","<script>\n  import { EmptyState, GridCell, GridRow, Icon, InfiniteScroll, TruncatedText } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import { _ } from 'svelte-i18n';\n\n  import ListContainer from '$lib/components/common/list-container.svelte';\n  import ListingGrid from '$lib/components/common/listing-grid.svelte';\n  import { goto } from '$lib/services/app/navigation';\n  import { selectedCollection } from '$lib/services/contents/collection';\n  import { isValidCollectionFile } from '$lib/services/contents/collection/files';\n\n  /**\n   * @import { CollectionFile } from '$lib/types/public';\n   */\n\n  const files = $derived($selectedCollection?.files?.filter(isValidCollectionFile) ?? []);\n</script>\n\n<ListContainer aria-label={$_('file_list')}>\n  {#if files?.length}\n    <ListingGrid viewType=\"list\" aria-label={$_('files')} aria-rowcount={files.length}>\n      <InfiniteScroll items={files} itemKey=\"name\">\n        {#snippet renderItem(/** @type {CollectionFile} */ { name, label, icon })}\n          {#await sleep() then}\n            <GridRow\n              onclick={() => {\n                goto(`/collections/${$selectedCollection?.name}/entries/${name}`, {\n                  transitionType: 'forwards',\n                });\n              }}\n            >\n              <GridCell class=\"title\">\n                <div role=\"none\" class=\"label\">\n                  {#if icon}\n                    <Icon name={icon} />\n                  {/if}\n                  <TruncatedText lines={2}>\n                    {label || name}\n                  </TruncatedText>\n                </div>\n              </GridCell>\n            </GridRow>\n          {/await}\n        {/snippet}\n      </InfiniteScroll>\n    </ListingGrid>\n  {:else}\n    <EmptyState>\n      <span role=\"none\">{$_('no_files_in_collection')}</span>\n    </EmptyState>\n  {/if}\n</ListContainer>\n\n<style lang=\"scss\">\n  .label {\n    display: flex;\n    align-items: center;\n    gap: 16px;\n\n    :global(.icon) {\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      border-radius: var(--sui-control-medium-border-radius);\n      width: var(--icon-size);\n      height: var(--icon-size);\n      background-color: var(--sui-secondary-background-color);\n    }\n  }\n</style>\n","<script>\n  import { Icon, Option } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { announcedPageStatus, goto } from '$lib/services/app/navigation';\n\n  /**\n   * @import { CollectionFile } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {CollectionFile} file The singleton file to display.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    file,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const { name, label, icon } = $derived(file);\n\n  /** @type {boolean} */\n  let selected = $state(false);\n  /** @type {HTMLElement | undefined} */\n  let wrapper = $state();\n</script>\n\n<div class=\"wrapper\" bind:this={wrapper}>\n  <Option\n    bind:selected\n    label={label || name}\n    onSelect={() => {\n      // Announce the selected singleton file. The Content Editor will not open until\n      // the user presses Enter.\n      $announcedPageStatus = $_('singleton_selected_announcement', {\n        values: { file: label || name },\n      });\n    }}\n    onclick={() => {\n      goto(`/collections/_singletons/entries/${name}`, { transitionType: 'forwards' });\n      // Reset the selected state and remove the focused class from the option\n      // @todo Handle this in Sveltia UI\n      selected = false;\n      wrapper?.querySelector('[role=\"option\"]')?.classList.remove('focused');\n    }}\n  >\n    {#snippet startIcon()}\n      <Icon name={icon || 'edit_document'} />\n    {/snippet}\n  </Option>\n</div>\n\n<style lang=\"scss\">\n  .wrapper {\n    display: contents;\n  }\n</style>\n","<script>\n  import { Divider, Icon, Listbox, Option, OptionGroup } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import { _, locale as appLocale } from 'svelte-i18n';\n\n  import SingletonOption from '$lib/components/contents/list/singleton-option.svelte';\n  import QuickSearchBar from '$lib/components/global/toolbar/items/quick-search-bar.svelte';\n  import { goto } from '$lib/services/app/navigation';\n  import { siteConfig } from '$lib/services/config';\n  import { allEntries } from '$lib/services/contents';\n  import { selectedCollection } from '$lib/services/contents/collection';\n  import { getEntriesByCollection } from '$lib/services/contents/collection/entries';\n  import { isSmallScreen } from '$lib/services/user/env';\n\n  const numberFormatter = $derived(Intl.NumberFormat($appLocale ?? undefined));\n  // @ts-ignore Dividers can be included in the collection list\n  const collections = $derived($siteConfig?.collections?.filter(({ hide }) => !hide) ?? []);\n  const singletons = $derived($siteConfig?.singletons ?? []);\n</script>\n\n<div role=\"none\" class=\"primary-sidebar\">\n  {#if $isSmallScreen}\n    <h2>{$_('contents')}</h2>\n    <QuickSearchBar\n      onclick={(event) => {\n        event.preventDefault();\n        goto('/search');\n      }}\n    />\n  {/if}\n  <Listbox aria-label={$_('collection_list')} aria-controls=\"collection-container\">\n    {#if collections.length}\n      <OptionGroup label={$_('collections')}>\n        {#each collections as collection, index (collection.name ?? index)}\n          {#await sleep() then}\n            {#if !('divider' in collection)}\n              {@const { name, label, icon, files } = collection}\n              <Option\n                label={label || name}\n                selected={$isSmallScreen ? false : $selectedCollection?.name === name}\n                onSelect={() => {\n                  goto(`/collections/${name}`, { transitionType: 'forwards' });\n                }}\n              >\n                {#snippet startIcon()}\n                  <Icon name={icon || 'bookmark_manager'} />\n                {/snippet}\n                {#snippet endIcon()}\n                  {#key $allEntries}\n                    {@const count = (files ?? getEntriesByCollection(name)).length}\n                    <span\n                      class=\"count\"\n                      aria-label=\"({$_(\n                        count > 1 ? 'many_entries' : count === 1 ? 'one_entry' : 'no_entries',\n                        { values: { count } },\n                      )})\"\n                    >\n                      {numberFormatter.format(count)}\n                    </span>\n                  {/key}\n                {/snippet}\n              </Option>\n            {:else if collection.divider}\n              <Divider />\n            {/if}\n          {/await}\n        {/each}\n      </OptionGroup>\n    {/if}\n    {#if singletons.length}\n      {#if $isSmallScreen || collections.length}\n        <!-- Use the user-friendly “Files” label instead of “Singletons” -->\n        <OptionGroup label={$_('files')}>\n          {#each singletons as file, index (file.name ?? index)}\n            {#await sleep() then}\n              {#if !('divider' in file)}\n                <SingletonOption {file} />\n              {:else if file.divider}\n                <Divider />\n              {/if}\n            {/await}\n          {/each}\n        </OptionGroup>\n      {:else}\n        <!-- Show the singletons just like a file collection -->\n        {@const count = singletons.length}\n        <OptionGroup label={$_('collections')}>\n          <Option\n            label={$_('files')}\n            selected={$selectedCollection?.name === '_singletons'}\n            onSelect={() => {\n              goto('/collections/_singletons', { transitionType: 'forwards' });\n            }}\n          >\n            {#snippet startIcon()}\n              <Icon name={'bookmark_manager'} />\n            {/snippet}\n            {#snippet endIcon()}\n              <span\n                class=\"count\"\n                aria-label=\"({$_(\n                  count > 1 ? 'many_entries' : count === 1 ? 'one_entry' : 'no_entries',\n                  { values: { count } },\n                )})\"\n              >\n                {numberFormatter.format(count)}\n              </span>\n            {/snippet}\n          </Option>\n        </OptionGroup>\n      {/if}\n    {/if}\n  </Listbox>\n</div>\n","<script>\n  import { ConfirmationDialog } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { getAssetFolder } from '$lib/services/assets/folders';\n  import { selectedCollection } from '$lib/services/contents/collection';\n  import { deleteEntries } from '$lib/services/contents/collection/data/delete';\n  import { selectedEntries } from '$lib/services/contents/collection/entries';\n  import { listedEntries } from '$lib/services/contents/collection/view';\n  import { getAssociatedAssets } from '$lib/services/contents/entry/assets';\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} [open] Whether the dialog is open.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    open = $bindable(false),\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const associatedAssets = $derived.by(() => {\n    const collectionName = $selectedCollection?.name;\n\n    if (\n      $selectedEntries.length &&\n      collectionName &&\n      getAssetFolder({ collectionName })?.entryRelative\n    ) {\n      return $selectedEntries\n        .map((entry) => getAssociatedAssets({ entry, collectionName, relative: true }))\n        .flat(1);\n    }\n\n    return [];\n  });\n</script>\n\n<ConfirmationDialog\n  bind:open\n  title={$selectedEntries.length === 1 ? $_('delete_entry') : $_('delete_entries')}\n  okLabel={$_('delete')}\n  onOk={() => {\n    deleteEntries(\n      $selectedEntries.map(({ id }) => id),\n      associatedAssets.map(({ path }) => path),\n    );\n  }}\n>\n  {#if $selectedEntries.length === 1}\n    {$_(\n      associatedAssets.length\n        ? 'confirm_deleting_selected_entry_with_assets'\n        : 'confirm_deleting_selected_entry',\n    )}\n  {:else if $selectedEntries.length === $listedEntries.length}\n    {$_(\n      associatedAssets.length\n        ? 'confirm_deleting_all_entries_with_assets'\n        : 'confirm_deleting_all_entries',\n    )}\n  {:else}\n    {$_(\n      associatedAssets.length\n        ? 'confirm_deleting_selected_entries_with_assets'\n        : 'confirm_deleting_selected_entries',\n      { values: { count: $selectedEntries.length } },\n    )}\n  {/if}\n</ConfirmationDialog>\n","<script>\n  import {\n    Button,\n    FloatingActionButtonWrapper,\n    Infobar,\n    Spacer,\n    Toolbar,\n    TruncatedText,\n  } from '@sveltia/ui';\n  import DOMPurify from 'isomorphic-dompurify';\n  import { marked } from 'marked';\n  import { _, locale as appLocale } from 'svelte-i18n';\n\n  import BackButton from '$lib/components/common/page-toolbar/back-button.svelte';\n  import DeleteEntriesDialog from '$lib/components/contents/shared/delete-entries-dialog.svelte';\n  import CreateEntryButton from '$lib/components/contents/toolbar/create-entry-button.svelte';\n  import { goBack } from '$lib/services/app/navigation';\n  import { getCollectionLabel, selectedCollection } from '$lib/services/contents/collection';\n  import { canCreateEntry, selectedEntries } from '$lib/services/contents/collection/entries';\n  import { listedEntries } from '$lib/services/contents/collection/view';\n  import { isSmallScreen } from '$lib/services/user/env';\n\n  let showDeleteDialog = $state(false);\n\n  /**\n   * Parse the given string as Markdown and sanitize the result to only allow certain tags.\n   * @param {string} str Original string.\n   * @returns {string} Sanitized string.\n   */\n  const sanitize = (str) =>\n    DOMPurify.sanitize(/** @type {string} */ (marked.parseInline(str)), {\n      ALLOWED_TAGS: ['strong', 'em', 'del', 'code', 'a'],\n      ALLOWED_ATTR: ['href'],\n    });\n\n  const name = $derived($selectedCollection?.name ?? '');\n  const description = $derived($selectedCollection?.description);\n  const isEntryCollection = $derived($selectedCollection?._type === 'entry');\n  const canCreate = $derived($selectedCollection?.create ?? false);\n  const canDelete = $derived($selectedCollection?.delete ?? true);\n  const limit = $derived($selectedCollection?.limit ?? Infinity);\n  const createDisabled = $derived(!canCreateEntry($selectedCollection));\n  const collectionLabel = $derived(\n    // `$appLocale` is a key, because `getCollectionLabel` can return a localized label\n    $appLocale && $selectedCollection ? getCollectionLabel($selectedCollection) : name,\n  );\n</script>\n\n{#if $selectedCollection}\n  <Toolbar variant=\"primary\" aria-label={$_('collection')}>\n    {#if $isSmallScreen}\n      <BackButton\n        aria-label={$_('back_to_collection_list')}\n        onclick={() => {\n          goBack('/collections');\n        }}\n      />\n    {/if}\n    <h2 role=\"none\">{collectionLabel}</h2>\n    {#if $isSmallScreen}\n      <Spacer flex />\n    {:else}\n      <div role=\"none\" class=\"description\">\n        <TruncatedText>\n          {@html sanitize(description || '')}\n        </TruncatedText>\n      </div>\n    {/if}\n    {#if isEntryCollection}\n      {#if !$isSmallScreen}\n        <Button\n          variant=\"ghost\"\n          label={$_('delete')}\n          aria-label={$selectedEntries.length === 1\n            ? $_('delete_selected_entry')\n            : $_('delete_selected_entries')}\n          disabled={!$selectedEntries.length || !canDelete}\n          onclick={() => {\n            showDeleteDialog = true;\n          }}\n        />\n      {/if}\n      <FloatingActionButtonWrapper>\n        {#if !$isSmallScreen || ($listedEntries.length && !createDisabled)}\n          <CreateEntryButton\n            collectionName={name}\n            label={$isSmallScreen ? undefined : $_('create')}\n            keyShortcuts=\"Accel+E\"\n          />\n        {/if}\n      </FloatingActionButtonWrapper>\n    {/if}\n  </Toolbar>\n  {#if isEntryCollection && createDisabled}\n    <Infobar\n      dismissible={false}\n      --sui-infobar-border-width=\"1px 0\"\n      --sui-infobar-message-justify-content=\"center\"\n    >\n      {#if !canCreate}\n        {$_('creating_entries_disabled_by_admin')}\n      {:else}\n        {$_('creating_entries_disabled_by_limit', { values: { limit } })}\n      {/if}\n    </Infobar>\n  {/if}\n{/if}\n\n<DeleteEntriesDialog bind:open={showDeleteDialog} />\n\n<style lang=\"scss\">\n  h2 {\n    flex: none !important;\n  }\n\n  .description {\n    flex: auto;\n    font-size: var(--sui-font-size-small);\n    opacity: 0.8;\n  }\n</style>\n","<script>\n  import { Group } from '@sveltia/ui';\n  import equal from 'fast-deep-equal';\n  import { _ } from 'svelte-i18n';\n\n  import AssetsPanel from '$lib/components/assets/browser/assets-panel.svelte';\n  import DropZone from '$lib/components/assets/shared/drop-zone.svelte';\n  import { goto } from '$lib/services/app/navigation';\n  import { allAssets, uploadingAssets } from '$lib/services/assets';\n  import { getAssetFolder } from '$lib/services/assets/folders';\n  import { selectedCollection } from '$lib/services/contents/collection';\n  import { currentView } from '$lib/services/contents/collection/view';\n  import { isLargeScreen } from '$lib/services/user/env';\n\n  const folder = $derived(getAssetFolder({ collectionName: $selectedCollection?.name }));\n  const { internalPath, entryRelative, hasTemplateTags } = $derived(\n    folder ?? { internalPath: undefined, entryRelative: false, hasTemplateTags: false },\n  );\n  // Can’t upload assets if collection assets are saved at entry-relative paths\n  const uploadDisabled = $derived(entryRelative || hasTemplateTags);\n</script>\n\n{#if internalPath !== undefined && $isLargeScreen && $currentView.showMedia}\n  <Group id=\"collection-assets\" class=\"secondary-sidebar\" aria-label={$_('collection_assets')}>\n    <DropZone\n      disabled={uploadDisabled}\n      multiple={true}\n      onDrop={({ files }) => {\n        $uploadingAssets = { folder, files };\n      }}\n    >\n      <AssetsPanel\n        assets={$allAssets.filter((asset) => equal(asset.folder, folder))}\n        onSelect={({ asset }) => {\n          goto(`/assets/${asset.path}`, { transitionType: 'forwards' });\n        }}\n      />\n    </DropZone>\n  </Group>\n{/if}\n","<script>\n  import { Menu, MenuButton, MenuItemRadio } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  /**\n   * @import { Writable } from 'svelte/store';\n   * @import { AssetListView, EntryListView } from '$lib/types/private';\n   * @import { ViewGroup } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Writable<EntryListView | AssetListView>} currentView Current view details.\n   * @property {string} aria-controls The `aria-controls` attribute for the menu.\n   * @property {string} [label] Menu button label.\n   * @property {boolean} [disabled] Whether to disable the button.\n   * @property {string} [noneLabel] Label to be displayed on the None item.\n   * @property {ViewGroup[]} [groups] Group conditions.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    currentView,\n    'aria-controls': ariaControls,\n    label = '',\n    disabled = false,\n    noneLabel = '',\n    groups = [],\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<MenuButton variant=\"ghost\" label={label || $_('group')} {disabled} popupPosition=\"bottom-right\">\n  {#snippet popup()}\n    <Menu aria-label={$_('grouping_options')} aria-controls={ariaControls}>\n      <MenuItemRadio\n        label={noneLabel || $_('sort_keys.none')}\n        checked={!$currentView.group}\n        onSelect={() => {\n          currentView.update((view) => ({\n            ...view,\n            group: null,\n          }));\n        }}\n      />\n      {#each groups as { label: _label, field, pattern }}\n        <MenuItemRadio\n          label={_label}\n          checked={$currentView.group?.field === field &&\n            String($currentView.group.pattern) === String(pattern)}\n          onSelect={() => {\n            currentView.update((view) => ({\n              ...view,\n              group: { field, pattern },\n            }));\n          }}\n        />\n      {/each}\n    </Menu>\n  {/snippet}\n</MenuButton>\n","<script>\n  import { Button, Divider, Icon, Spacer, Toolbar } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import FilterMenu from '$lib/components/common/page-toolbar/filter-menu.svelte';\n  import GroupMenu from '$lib/components/common/page-toolbar/group-menu.svelte';\n  import ItemSelector from '$lib/components/common/page-toolbar/item-selector.svelte';\n  import SortMenu from '$lib/components/common/page-toolbar/sort-menu.svelte';\n  import ViewSwitcher from '$lib/components/common/page-toolbar/view-switcher.svelte';\n  import { getAssetFolder } from '$lib/services/assets/folders';\n  import { selectedCollection } from '$lib/services/contents/collection';\n  import { selectedEntries } from '$lib/services/contents/collection/entries';\n  import { currentView, entryGroups, listedEntries } from '$lib/services/contents/collection/view';\n  import { viewFilters } from '$lib/services/contents/collection/view/filter';\n  import { viewGroups } from '$lib/services/contents/collection/view/group';\n  import { sortKeys } from '$lib/services/contents/collection/view/sort-keys';\n  import { isMediumScreen, isSmallScreen } from '$lib/services/user/env';\n\n  /**\n   * @import { EntryCollection } from '$lib/types/private';\n   */\n\n  const entryCollection = $derived(\n    $selectedCollection?._type === 'entry'\n      ? /** @type {EntryCollection} */ ($selectedCollection)\n      : undefined,\n  );\n  const collectionName = $derived(entryCollection?.name);\n  const thumbnailFieldNames = $derived(entryCollection?._thumbnailFieldNames ?? []);\n  const hasListedEntries = $derived(!!$listedEntries.length);\n  const hasMultipleEntries = $derived($listedEntries.length > 1);\n</script>\n\n{#if entryCollection}\n  <Toolbar variant=\"secondary\" aria-label={$_('entry_list')}>\n    {#if !($isSmallScreen || $isMediumScreen)}\n      <ItemSelector\n        allItems={$entryGroups.map(({ entries }) => entries).flat(1)}\n        selectedItems={selectedEntries}\n      />\n    {/if}\n    <Spacer flex />\n    <SortMenu\n      disabled={!hasMultipleEntries || !$sortKeys.length}\n      {currentView}\n      sortKeys={$sortKeys}\n      {collectionName}\n      aria-controls=\"entry-list\"\n    />\n    {#if $viewFilters?.length}\n      <FilterMenu\n        disabled={!hasMultipleEntries}\n        {currentView}\n        filters={$viewFilters}\n        multiple={true}\n        aria-controls=\"entry-list\"\n      />\n    {/if}\n    {#if $viewGroups?.length}\n      <GroupMenu\n        disabled={!hasMultipleEntries}\n        {currentView}\n        groups={$viewGroups}\n        aria-controls=\"entry-list\"\n      />\n    {/if}\n    {#if thumbnailFieldNames.length}\n      <ViewSwitcher disabled={!hasListedEntries} {currentView} aria-controls=\"entry-list\" />\n    {/if}\n    {#if !($isSmallScreen || $isMediumScreen)}\n      <Divider orientation=\"vertical\" />\n      <Button\n        variant=\"ghost\"\n        iconic\n        disabled={!hasListedEntries || !getAssetFolder({ collectionName })}\n        pressed={!!$currentView.showMedia}\n        aria-controls=\"collection-assets\"\n        aria-expanded={$currentView.showMedia}\n        aria-label={$_($currentView.showMedia ? 'hide_assets' : 'show_assets')}\n        onclick={() => {\n          currentView.update((view) => ({\n            ...view,\n            showMedia: !$currentView.showMedia,\n          }));\n        }}\n      >\n        {#snippet startIcon()}\n          <Icon name=\"photo_library\" />\n        {/snippet}\n      </Button>\n    {/if}\n  </Toolbar>\n{/if}\n","<script>\n  import { Alert, Toast } from '@sveltia/ui';\n  import { onMount } from 'svelte';\n  import { _, locale as appLocale } from 'svelte-i18n';\n\n  import PageContainerMainArea from '$lib/components/common/page-container-main-area.svelte';\n  import PageContainer from '$lib/components/common/page-container.svelte';\n  import ContentDetailsOverlay from '$lib/components/contents/details/content-details-overlay.svelte';\n  import EntryList from '$lib/components/contents/list/entry-list.svelte';\n  import FileList from '$lib/components/contents/list/file-list.svelte';\n  import PrimarySidebar from '$lib/components/contents/list/primary-sidebar.svelte';\n  import PrimaryToolbar from '$lib/components/contents/list/primary-toolbar.svelte';\n  import SecondarySidebar from '$lib/components/contents/list/secondary-sidebar.svelte';\n  import SecondaryToolbar from '$lib/components/contents/list/secondary-toolbar.svelte';\n  import {\n    announcedPageStatus,\n    goto,\n    parseLocation,\n    updateContentFromHashChange,\n  } from '$lib/services/app/navigation';\n  import {\n    getCollection,\n    getCollectionLabel,\n    getFirstCollection,\n    getSingletonCollection,\n    getValidCollections,\n    selectedCollection,\n  } from '$lib/services/contents/collection';\n  import { contentUpdatesToast } from '$lib/services/contents/collection/data';\n  import {\n    getCollectionFileEntry,\n    getCollectionFileLabel,\n  } from '$lib/services/contents/collection/files';\n  import { listedEntries } from '$lib/services/contents/collection/view';\n  import { createDraft } from '$lib/services/contents/draft/create';\n  import { showContentOverlay } from '$lib/services/contents/editor';\n  import { getEntrySummary } from '$lib/services/contents/entry/summary';\n  import { isSmallScreen } from '$lib/services/user/env';\n\n  /**\n   * @import { FileCollection, InternalCollection } from '$lib/types/private';\n   */\n\n  const routeRegex =\n    /^\\/collections(?:\\/(?<_collectionName>[^/]+)(?:\\/(?<routeType>new|entries))?(?:\\/(?<subPath>.+?))?)?$/;\n\n  let isIndexPage = $state(false);\n\n  const MainContent = $derived($selectedCollection?.files ? FileList : EntryList);\n\n  /**\n   * Navigate to the content list or content details page given the URL hash.\n   * @todo Show Not Found page.\n   */\n  const navigate = () => {\n    const { path, params } = parseLocation();\n    const match = path.match(routeRegex);\n\n    isIndexPage = false;\n\n    // `/collections/_singletons` should not be used unless there is only the singleton collection\n    if ($selectedCollection?.name === '_singletons' && getValidCollections().length) {\n      $selectedCollection = undefined;\n    }\n\n    if (!match?.groups) {\n      return; // Different page\n    }\n\n    const { _collectionName, routeType, subPath } = match.groups;\n\n    if (!_collectionName) {\n      if ($isSmallScreen) {\n        // Show the collection list only\n        $selectedCollection = undefined;\n        $announcedPageStatus = $_('viewing_collection_list');\n        isIndexPage = true;\n      } else {\n        // Redirect to the selected, first or singleton collection\n        const collection = $selectedCollection || getFirstCollection() || getSingletonCollection();\n\n        goto(`/collections/${collection?.name}`, { replaceState: true });\n      }\n\n      return;\n    }\n\n    /** @type {InternalCollection | undefined} */\n    const collection = getCollection(_collectionName);\n\n    if (!collection || collection.hide) {\n      $selectedCollection = undefined;\n    } else if ($selectedCollection?.name !== collection.name) {\n      $selectedCollection = collection;\n    }\n\n    if (!collection || !$selectedCollection) {\n      $announcedPageStatus = $_('collection_not_found');\n\n      return; // Not Found\n    }\n\n    const { name: collectionName, files } = $selectedCollection;\n    const collectionLabel = getCollectionLabel($selectedCollection);\n\n    const _fileMap = files\n      ? /** @type {FileCollection} */ ($selectedCollection)._fileMap\n      : undefined;\n\n    if (!routeType) {\n      const count = $listedEntries.length;\n\n      $announcedPageStatus = $_(\n        count > 1\n          ? 'viewing_x_collection_many_entries'\n          : count === 1\n            ? 'viewing_x_collection_one_entry'\n            : 'viewing_x_collection_no_entries',\n        { values: { collection: collectionLabel, count } },\n      );\n\n      return;\n    }\n\n    $showContentOverlay = true;\n\n    if (_fileMap) {\n      // File/singleton collection\n      if (routeType === 'entries' && subPath) {\n        const originalEntry = getCollectionFileEntry(collectionName, subPath);\n        const collectionFile = _fileMap[subPath];\n\n        if (originalEntry) {\n          createDraft({ collection, collectionFile, originalEntry });\n        } else {\n          // File is not yet created\n          createDraft({\n            collection,\n            collectionFile,\n            originalEntry: {\n              slug: collectionFile.name,\n              locales: Object.fromEntries(\n                collectionFile._i18n.initialLocales.map((_locale) => [_locale, {}]),\n              ),\n            },\n          });\n        }\n\n        $announcedPageStatus = $_(`edit_${collection._type}_announcement`, {\n          values: {\n            collection: collectionLabel,\n            file: getCollectionFileLabel(collectionFile),\n          },\n        });\n      }\n    } else {\n      // Folder collection\n      if (routeType === 'new' && !subPath) {\n        createDraft({\n          collection,\n          dynamicValues: params,\n          isIndexFile: !!window.history.state?.index,\n        });\n\n        $announcedPageStatus = $_('create_entry_announcement', {\n          values: {\n            collection: collectionLabel,\n          },\n        });\n      }\n\n      if (routeType === 'entries' && subPath) {\n        const originalEntry = $listedEntries.find((entry) => entry.subPath === subPath);\n\n        if (originalEntry && $appLocale) {\n          createDraft({ collection, originalEntry });\n\n          $announcedPageStatus = $_('edit_entry_announcement', {\n            values: {\n              collection: collectionLabel,\n              entry: getEntrySummary($selectedCollection, originalEntry),\n            },\n          });\n        }\n      }\n    }\n  };\n\n  onMount(() => {\n    navigate();\n  });\n</script>\n\n<svelte:window\n  onhashchange={(event) => {\n    updateContentFromHashChange(event, navigate, routeRegex);\n  }}\n/>\n\n<PageContainer aria-label={$_('content_library')}>\n  {#snippet primarySidebar()}\n    {#if !$isSmallScreen || isIndexPage}\n      <PrimarySidebar />\n    {/if}\n  {/snippet}\n  {#snippet main()}\n    {#if !$isSmallScreen || !isIndexPage}\n      <PageContainerMainArea\n        aria-label={$_('x_collection', {\n          values: {\n            collection:\n              // `$appLocale` is a key, because `getCollectionLabel` can return a localized label\n              $appLocale && $selectedCollection ? getCollectionLabel($selectedCollection) : '',\n          },\n        })}\n        aria-description={$selectedCollection?.description}\n      >\n        {#snippet primaryToolbar()}\n          <PrimaryToolbar />\n        {/snippet}\n        {#snippet secondaryToolbar()}\n          {#if $selectedCollection?._type === 'entry' && $listedEntries.length}\n            <SecondaryToolbar />\n          {/if}\n        {/snippet}\n        {#snippet mainContent()}\n          <MainContent />\n        {/snippet}\n        {#snippet secondarySidebar()}\n          <SecondarySidebar />\n        {/snippet}\n      </PageContainerMainArea>\n    {/if}\n  {/snippet}\n</PageContainer>\n\n<ContentDetailsOverlay />\n\n<Toast bind:show={$contentUpdatesToast.saved}>\n  <Alert status=\"success\">\n    {$_($contentUpdatesToast.published ? 'entry_saved_and_published' : 'entry_saved')}\n  </Alert>\n</Toast>\n\n<Toast bind:show={$contentUpdatesToast.deleted}>\n  <Alert status=\"success\">\n    {$_($contentUpdatesToast.count === 1 ? 'entry_deleted' : 'entries_deleted', {\n      values: { count: $contentUpdatesToast.count },\n    })}\n  </Alert>\n</Toast>\n","<script>\n  import { Option, Select } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { allTranslationServices } from '$lib/services/integrations/translators';\n  import { prefs } from '$lib/services/user/prefs';\n</script>\n\n<Select\n  aria-label={$_('prefs.i18n.default_translator.select_service')}\n  value={$prefs.defaultTranslationService}\n  onChange={(event) => {\n    $prefs = { ...$prefs, defaultTranslationService: event.detail.value };\n  }}\n>\n  {#each Object.entries(allTranslationServices) as [key, { serviceLabel: label }] (key)}\n    <Option {label} value={key} selected={key === $prefs.defaultTranslationService} />\n  {/each}\n</Select>\n","<script>\n  import { PromptDialog, Spacer } from '@sveltia/ui';\n  import DOMPurify from 'isomorphic-dompurify';\n  import { _ } from 'svelte-i18n';\n\n  import TranslatorSelector from '$lib/components/settings/controls/translator-selector.svelte';\n  import { showContentOverlay, translatorApiKeyDialogState } from '$lib/services/contents/editor';\n  import { translator } from '$lib/services/integrations/translators';\n  import { prefs } from '$lib/services/user/prefs';\n\n  const { serviceId, apiLabel, developerURL, apiKeyURL, apiKeyPattern } = $derived($translator);\n\n  $effect(() => {\n    if (!$showContentOverlay && $translatorApiKeyDialogState.show) {\n      // Close the dialog when the Content Editor is closed\n      $translatorApiKeyDialogState.show = false;\n      $translatorApiKeyDialogState.resolve?.();\n    }\n  });\n</script>\n\n<PromptDialog\n  bind:open={$translatorApiKeyDialogState.show}\n  title={$_($translatorApiKeyDialogState.multiple ? 'translate_fields' : 'translate_field')}\n  showOk={false}\n  textboxAttrs={{ spellcheck: false, 'aria-label': $_('api_key') }}\n  oninput={(event) => {\n    const _value = /** @type {HTMLInputElement} */ (event.target).value.trim();\n\n    if (apiKeyPattern?.test(_value)) {\n      $prefs.apiKeys ??= {};\n      $prefs.apiKeys[serviceId] = _value;\n      $translatorApiKeyDialogState.show = false;\n      $translatorApiKeyDialogState.resolve?.(_value);\n    }\n  }}\n  onCancel={() => {\n    $translatorApiKeyDialogState.resolve?.();\n  }}\n>\n  <TranslatorSelector />\n  <Spacer />\n  {@html DOMPurify.sanitize(\n    $_('prefs.i18n.translator.description', {\n      values: {\n        service: apiLabel,\n        homeHref: `href=\"${developerURL}\"`,\n        apiKeyHref: `href=\"${apiKeyURL}\"`,\n      },\n    }),\n    { ALLOWED_TAGS: ['a'], ALLOWED_ATTR: ['href', 'target', 'rel'] },\n  )}\n</PromptDialog>\n","<script>\n  import { Alert, Toast } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { entryParseErrors } from '$lib/services/contents';\n\n  let showParseErrorToast = $state(!!$entryParseErrors.length);\n</script>\n\n<Toast bind:show={showParseErrorToast}>\n  <Alert status=\"error\">\n    {$_($entryParseErrors.length === 1 ? 'entry_parse_error' : 'entry_parse_errors')}\n  </Alert>\n</Toast>\n","import { derived, writable } from 'svelte/store';\n\nimport { backend } from '$lib/services/backends';\nimport { user } from '$lib/services/user';\nimport { hasMouse, isLargeScreen } from '$lib/services/user/env';\n\nexport const canShowMobileSignInDialog = derived(\n  [isLargeScreen, hasMouse, backend, user],\n  ([_isLargeScreen, _hasMouse, _backend, _user]) =>\n    _isLargeScreen && _hasMouse && !!_backend?.isGit && !!_user?.token,\n);\n\nexport const showMobileSignInDialog = writable(false);\n","<script>\n  import { Button, Infobar } from '@sveltia/ui';\n  import { IndexedDB } from '@sveltia/utils/storage';\n  import { _ } from 'svelte-i18n';\n\n  import { showMobileSignInDialog } from '$lib/services/app/onboarding';\n  import { backend } from '$lib/services/backends';\n\n  /** @type {IndexedDB | undefined} */\n  let uiSettingsDB;\n  let showInfobar = $state(false);\n\n  $effect(() => {\n    const { databaseName } = $backend?.repository ?? {};\n\n    if (databaseName) {\n      uiSettingsDB = new IndexedDB(databaseName, 'ui-settings');\n\n      (async () => {\n        const onboardingState = (await uiSettingsDB.get('onboarding')) ?? {};\n\n        if (!onboardingState.mobileCta) {\n          showInfobar = true;\n        }\n\n        await uiSettingsDB.set('onboarding', { ...onboardingState, mobileCta: true });\n      })();\n    }\n  });\n</script>\n\n<Infobar show={showInfobar} dismissible={false} --sui-infobar-message-justify-content=\"center\">\n  {$_('mobile_promo_title')}\n  <Button\n    variant=\"link\"\n    label={$_('mobile_promo_button')}\n    onclick={() => {\n      showInfobar = false;\n      $showMobileSignInDialog = true;\n    }}\n  />\n  <Button\n    variant=\"link\"\n    label={$_('later')}\n    onclick={() => {\n      showInfobar = false;\n    }}\n  />\n</Infobar>\n","<script>\n  import { Icon, SelectButton, SelectButtonGroup } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { goto, selectedPageName } from '$lib/services/app/navigation';\n  import { selectedAssetFolder } from '$lib/services/assets/folders';\n  import { isSmallScreen } from '$lib/services/user/env';\n\n  const pages = $derived([\n    {\n      key: 'collections',\n      label: $_('contents'),\n      icon: 'library_books',\n      link: '/collections',\n    },\n    {\n      key: 'assets',\n      label: $_('assets'),\n      icon: 'photo_library',\n      link: $isSmallScreen ? '/assets' : `/assets/${$selectedAssetFolder?.internalPath ?? '-/all'}`,\n    },\n    // {\n    //   key: 'workflow',\n    //   label: $_('editorial_workflow'),\n    //   icon: 'rebase_edit',\n    //   link: '/workflow',\n    // },\n    // {\n    //   key: 'config',\n    //   label: $_('site_config'),\n    //   icon: 'settings',\n    //   link: '/config',\n    // },\n    ...($isSmallScreen\n      ? [\n          {\n            key: 'menu',\n            label: $_('menu'),\n            icon: 'menu',\n            link: '/menu',\n          },\n        ]\n      : []),\n  ]);\n</script>\n\n<div role=\"none\" class=\"wrapper\">\n  <SelectButtonGroup aria-label={$_('switch_page')} aria-controls=\"page-container\">\n    {#each pages as { key, label, icon, link }, index (key)}\n      <SelectButton\n        variant=\"ghost\"\n        iconic\n        selected={$selectedPageName === key}\n        aria-label={label}\n        keyShortcuts=\"Alt+{index + 1}\"\n        onclick={() => {\n          goto(link);\n        }}\n      >\n        {#snippet startIcon()}\n          <Icon name={icon} />\n        {/snippet}\n      </SelectButton>\n    {/each}\n  </SelectButtonGroup>\n</div>\n\n<style lang=\"scss\">\n  .wrapper {\n    display: contents;\n\n    :global {\n      .sui.select-button-group {\n        gap: 4px;\n\n        @media (width < 768px) {\n          justify-content: space-evenly;\n          width: 100%;\n        }\n      }\n\n      .sui.button {\n        border-radius: var(--sui-button-medium-border-radius) !important;\n      }\n    }\n  }\n</style>\n","<script>\n  import { BottomNavigation, Toolbar } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import PageSwitcher from '$lib/components/global/toolbar/items/page-switcher.svelte';\n  import { hasOverlay } from '$lib/services/app/navigation';\n</script>\n\n<BottomNavigation inert={$hasOverlay}>\n  <Toolbar variant=\"primary\" aria-label={$_('global')}>\n    <div role=\"none\" class=\"buttons\">\n      <PageSwitcher />\n    </div>\n  </Toolbar>\n</BottomNavigation>\n","<script>\n  import { MenuItem } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { version } from '$lib/services/app';\n  import { prefs } from '$lib/services/user/prefs';\n</script>\n\n<MenuItem\n  label={$_('release_notes')}\n  onclick={() => {\n    window.open('https://github.com/sveltia/sveltia-cms/releases', '_blank');\n  }}\n>\n  {#snippet endIcon()}\n    {#if $prefs.devModeEnabled}\n      <span class=\"version\" aria-label=\"({$_('version_x', { values: { version } })})\">\n        v{version}\n      </span>\n    {/if}\n  {/snippet}\n</MenuItem>\n\n<style lang=\"scss\">\n  .version {\n    border-radius: 4px;\n    padding: 0 6px;\n    color: var(--sui-secondary-foreground-color);\n    background-color: var(--sui-selected-background-color);\n    font-size: var(--sui-font-size-small);\n  }\n</style>\n","<script>\n  import { Dialog, Table, TableCell, TableRow } from '@sveltia/ui';\n  import { onMount } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} [open] Whether to open the dialog.\n   * @property {() => void} [onClose] Custom `close` event handler.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    open = $bindable(false),\n    onClose = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const shortcuts = [\n    { feature: 'view_content_library', keys: 'Alt+1' },\n    { feature: 'view_asset_library', keys: 'Alt+2' },\n    { feature: 'search', keys: 'Accel+F' },\n    { feature: 'create_entry', keys: 'Accel+E' },\n    { feature: 'save_entry', keys: 'Accel+S' },\n    { feature: 'cancel_editing', keys: 'Escape' },\n  ];\n\n  let accel = $state('Ctrl');\n\n  onMount(() => {\n    if (navigator.userAgentData?.platform === 'macOS' || navigator.platform.startsWith('Mac')) {\n      accel = '⌘'; // Command\n    }\n  });\n</script>\n\n<Dialog\n  title={$_('keyboard_shortcuts')}\n  size=\"small\"\n  bind:open\n  showOk={false}\n  showCancel={false}\n  showClose={true}\n  style=\"--sui-dialog-small-content-max-height:auto\"\n  onClose={() => {\n    onClose?.();\n  }}\n>\n  <div role=\"none\" class=\"wrapper\">\n    <Table aria-label={$_('keyboard_shortcuts')}>\n      {#each shortcuts as { feature, keys } (keys)}\n        <TableRow>\n          <TableCell class=\"feature\">{$_(`keyboard_shortcuts_.${feature}`)}</TableCell>\n          <TableCell class=\"keys\">\n            {#each keys.split('+') as key}\n              <kbd>{key.replace('Accel', accel)}</kbd>\n            {/each}\n          </TableCell>\n        </TableRow>\n      {/each}\n    </Table>\n  </div>\n</Dialog>\n\n<style lang=\"scss\">\n  .wrapper {\n    display: contents;\n\n    :global {\n      .table-row {\n        display: flex;\n        align-items: center;\n        gap: 16px;\n        padding: 8px 0;\n        border-top: 1px solid var(--sui-secondary-border-color);\n\n        &:last-child {\n          border-bottom: 1px solid var(--sui-secondary-border-color);\n        }\n\n        .feature {\n          flex: auto;\n        }\n\n        .keys {\n          display: flex;\n          gap: 8px;\n        }\n      }\n    }\n  }\n\n  kbd {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    box-sizing: border-box;\n    border-color: var(--sui-primary-accent-color);\n    border-radius: 4px;\n    padding: 0 8px;\n    height: 32px;\n    min-width: 32px;\n    background-color: var(--sui-tertiary-background-color);\n    font-family: var(--sui-control-font-family);\n    font-size: var(--sui-control-font-size);\n    line-height: var(--sui-control-line-height);\n  }\n</style>\n","<script>\n  import { MenuItem } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import ShortcutsDialog from '$lib/components/help/shortcuts-dialog.svelte';\n  import { hasMouse } from '$lib/services/user/env';\n\n  /**\n   * @typedef {object} Props\n   * @property {import('@sveltia/ui').MenuButton} [menuButton] Menu button.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    menuButton,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  let showDialog = $state(false);\n</script>\n\n<!-- Assume the user has a physical keyboard if the pointer is mouse (on desktop) -->\n{#if $hasMouse}\n  <MenuItem\n    label={$_('keyboard_shortcuts')}\n    onclick={() => {\n      showDialog = true;\n    }}\n  />\n{/if}\n\n<ShortcutsDialog\n  bind:open={showDialog}\n  onClose={() => {\n    menuButton?.focus();\n  }}\n/>\n","<script>\n  import { Switch } from '@sveltia/ui';\n\n  import { prefs } from '$lib/services/user/prefs';\n\n  /**\n   * @typedef {object} Props\n   * @property {string} key Preference key.\n   * @property {string} label UI label on the switch.\n   * @property {boolean} [defaultValue] Default value.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    key,\n    label,\n    defaultValue = true,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  let checked = $state(true);\n\n  $effect(() => {\n    checked = Boolean(/** @type {Record<string, any>} */ ($prefs)[key] ?? defaultValue);\n  });\n\n  $effect(() => {\n    if (/** @type {Record<string, any>} */ ($prefs)[key] !== checked) {\n      /** @type {Record<string, any>} */ ($prefs)[key] = checked;\n    }\n  });\n</script>\n\n<Switch bind:checked {label} />\n","<script>\n  import { _ } from 'svelte-i18n';\n\n  import PrefSwitch from '$lib/components/settings/controls/pref-switch.svelte';\n\n  /**\n   * @typedef {object} Props\n   * @property {(detail: { message: string }) => void} [onChange] Custom `change` event handler.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const, no-unused-vars */\n    onChange = undefined,\n    /* eslint-enable prefer-const, no-unused-vars */\n  } = $props();\n</script>\n\n<section>\n  <h4>\n    {$_('prefs.accessibility.underline_links.title')}\n  </h4>\n  <p>\n    {$_('prefs.accessibility.underline_links.description')}\n  </p>\n  <div role=\"none\">\n    <PrefSwitch\n      key=\"underlineLinks\"\n      label={$_('prefs.accessibility.underline_links.switch_label')}\n    />\n  </div>\n</section>\n","<script>\n  import { TextInput } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import PrefSwitch from '$lib/components/settings/controls/pref-switch.svelte';\n  import { siteConfig } from '$lib/services/config';\n  import { prefs } from '$lib/services/user/prefs';\n\n  /**\n   * @typedef {object} Props\n   * @property {(detail: { message: string }) => void} [onChange] Custom `change` event handler.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    onChange = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const autoDeployEnabled = $derived($siteConfig?.backend.automatic_deployments);\n</script>\n\n<section>\n  <h4>\n    {$_('prefs.advanced.beta.title')}\n  </h4>\n  <p>\n    {$_('prefs.advanced.beta.description')}\n  </p>\n  <div role=\"none\">\n    <PrefSwitch key=\"beta\" label={$_('prefs.advanced.beta.switch_label')} defaultValue={false} />\n  </div>\n</section>\n<section>\n  <h4>\n    {$_('prefs.advanced.developer_mode.title')}\n  </h4>\n  <p>\n    {$_('prefs.advanced.developer_mode.description')}\n  </p>\n  <div role=\"none\">\n    <PrefSwitch\n      key=\"devModeEnabled\"\n      label={$_('prefs.advanced.developer_mode.switch_label')}\n      defaultValue={false}\n    />\n  </div>\n</section>\n{#if typeof autoDeployEnabled === 'boolean'}\n  <section>\n    <h4>\n      {$_('prefs.advanced.deploy_hook.title')}\n    </h4>\n    <p>\n      {$_('prefs.advanced.deploy_hook.description')}\n    </p>\n    <div role=\"none\">\n      <TextInput\n        bind:value={$prefs.deployHookURL}\n        flex\n        label={$_('prefs.advanced.deploy_hook.field_label')}\n        onchange={() => {\n          onChange?.({\n            message: $_(\n              $prefs.deployHookURL\n                ? 'prefs.advanced.deploy_hook.url_saved'\n                : 'prefs.advanced.deploy_hook.url_removed',\n            ),\n          });\n        }}\n      />\n    </div>\n  </section>\n{/if}\n","<script>\n  import { SelectButton, SelectButtonGroup } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { prefs } from '$lib/services/user/prefs';\n\n  /**\n   * @typedef {object} Props\n   * @property {(detail: { message: string }) => void} [onChange] Custom `change` event handler.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const, no-unused-vars */\n    onChange = undefined,\n    /* eslint-enable prefer-const, no-unused-vars */\n  } = $props();\n</script>\n\n<section>\n  <h4>{$_('prefs.appearance.theme')}</h4>\n  <div role=\"none\">\n    <SelectButtonGroup\n      aria-label={$_('prefs.appearance.select_theme')}\n      onChange={(event) => {\n        $prefs = { ...$prefs, theme: event.detail.value };\n      }}\n    >\n      {#each ['auto', 'dark', 'light'] as value}\n        <SelectButton\n          variant=\"tertiary\"\n          label={$_(`prefs.theme.${value}`)}\n          {value}\n          selected={(!$prefs.theme && value === 'auto') || $prefs.theme === value}\n        />\n      {/each}\n    </SelectButtonGroup>\n  </div>\n</section>\n","<script>\n  import { _ } from 'svelte-i18n';\n\n  import PrefSwitch from '$lib/components/settings/controls/pref-switch.svelte';\n\n  /**\n   * @typedef {object} Props\n   * @property {(detail: { message: string }) => void} [onChange] Custom `change` event handler.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const, no-unused-vars */\n    onChange = undefined,\n    /* eslint-enable prefer-const, no-unused-vars */\n  } = $props();\n</script>\n\n<section>\n  <h4>{$_('prefs.contents.editor.title')}</h4>\n  <div role=\"none\">\n    <PrefSwitch\n      key=\"useDraftBackup\"\n      label={$_('prefs.contents.editor.use_draft_backup.switch_label')}\n    />\n  </div>\n  <div role=\"none\">\n    <PrefSwitch key=\"closeOnSave\" label={$_('prefs.contents.editor.close_on_save.switch_label')} />\n  </div>\n  <div role=\"none\">\n    <PrefSwitch\n      key=\"closeWithEscape\"\n      label={$_('prefs.contents.editor.close_with_escape.switch_label')}\n    />\n  </div>\n</section>\n","<script>\n  import { TextInput } from '@sveltia/ui';\n  import DOMPurify from 'isomorphic-dompurify';\n  import { _ } from 'svelte-i18n';\n\n  import TranslatorSelector from '$lib/components/settings/controls/translator-selector.svelte';\n  import { allTranslationServices } from '$lib/services/integrations/translators';\n  import { prefs } from '$lib/services/user/prefs';\n\n  /**\n   * @typedef {object} Props\n   * @property {(detail: { message: string }) => void} [onChange] Custom `change` event handler.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const, no-unused-vars */\n    onChange = undefined,\n    /* eslint-enable prefer-const, no-unused-vars */\n  } = $props();\n</script>\n\n<section>\n  <h4>{$_('prefs.i18n.default_translator.title')}</h4>\n  <div role=\"none\">\n    <TranslatorSelector />\n  </div>\n</section>\n\n{#each Object.entries(allTranslationServices) as [serviceId, service] (serviceId)}\n  {@const { serviceLabel, apiLabel, developerURL, apiKeyURL } = service}\n  <section>\n    <h4>{serviceLabel}</h4>\n    <p>\n      {@html DOMPurify.sanitize(\n        $_('prefs.i18n.translator.description', {\n          values: {\n            service: apiLabel,\n            homeHref: `href=\"${developerURL}\"`,\n            apiKeyHref: `href=\"${apiKeyURL}\"`,\n          },\n        }),\n        { ALLOWED_TAGS: ['a'], ALLOWED_ATTR: ['href', 'target', 'rel'] },\n      )}\n    </p>\n    <div role=\"none\">\n      {#if $prefs.apiKeys}\n        <TextInput\n          bind:value={$prefs.apiKeys[serviceId]}\n          flex\n          spellcheck=\"false\"\n          aria-label={$_('prefs.i18n.translator.field_label', {\n            values: { service: serviceLabel },\n          })}\n          onchange={() => {\n            onChange?.({\n              message: $_(\n                $prefs.apiKeys?.[serviceId]\n                  ? 'prefs.changes.api_key_saved'\n                  : 'prefs.changes.api_key_removed',\n              ),\n            });\n          }}\n        />\n      {/if}\n    </div>\n  </section>\n{/each}\n","<script>\n  import { Option, Select } from '@sveltia/ui';\n  import { _, locale as appLocale, locales as appLocales } from 'svelte-i18n';\n\n  import { getLocaleLabel } from '$lib/services/contents/i18n';\n  import { prefs } from '$lib/services/user/prefs';\n\n  /**\n   * @typedef {object} Props\n   * @property {(detail: { message: string }) => void} [onChange] Custom `change` event handler.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const, no-unused-vars */\n    onChange = undefined,\n    /* eslint-enable prefer-const, no-unused-vars */\n  } = $props();\n</script>\n\n<section>\n  <h4>{$_('prefs.language.ui_language.title')}</h4>\n  <div role=\"none\">\n    {#key $appLocale}\n      <Select\n        aria-label={$_('prefs.language.ui_language.select_language')}\n        value={$appLocale ?? undefined}\n        onChange={(event) => {\n          $prefs = { ...$prefs, locale: event.detail.value };\n        }}\n      >\n        {#each $appLocales as locale}\n          <Option label={getLocaleLabel(locale)} value={locale} selected={locale === $appLocale} />\n        {/each}\n      </Select>\n    {/key}\n  </div>\n</section>\n","<script>\n  import { TextInput } from '@sveltia/ui';\n  import DOMPurify from 'isomorphic-dompurify';\n  import { _ } from 'svelte-i18n';\n\n  import {\n    allStockAssetProviders,\n    getStockAssetMediaLibraryOptions,\n  } from '$lib/services/integrations/media-libraries/stock';\n  import { prefs } from '$lib/services/user/prefs';\n\n  /**\n   * @import { MediaLibraryService } from '$lib/types/private';\n   * @import { StockAssetProviderName } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {(detail: { message: string }) => void} [onChange] Custom `change` event handler.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const, no-unused-vars */\n    onChange = undefined,\n    /* eslint-enable prefer-const, no-unused-vars */\n  } = $props();\n\n  const enabledStockAssetProviderEntries = $derived.by(() => {\n    const { providers = [] } = getStockAssetMediaLibraryOptions();\n\n    return /** @type {[StockAssetProviderName, MediaLibraryService][]} */ (\n      Object.entries(allStockAssetProviders)\n    ).filter(([serviceId]) => providers.includes(serviceId));\n  });\n</script>\n\n{#each enabledStockAssetProviderEntries as [serviceId, service] (serviceId)}\n  {@const { serviceLabel, developerURL, apiKeyURL } = service}\n  <section>\n    <h4>\n      {$_('prefs.media.stock_photos.title', { values: { service: serviceLabel } })}\n    </h4>\n    <p>\n      {@html DOMPurify.sanitize(\n        $_('prefs.media.stock_photos.description', {\n          values: {\n            service: serviceLabel,\n            homeHref: `href=\"${developerURL}\"`,\n            apiKeyHref: `href=\"${apiKeyURL}\"`,\n          },\n        }),\n        { ALLOWED_TAGS: ['a'], ALLOWED_ATTR: ['href', 'target', 'rel'] },\n      )}\n    </p>\n    <div role=\"none\">\n      {#if $prefs.apiKeys}\n        <TextInput\n          bind:value={$prefs.apiKeys[serviceId]}\n          flex\n          spellcheck=\"false\"\n          aria-label={$_('prefs.media.stock_photos.field_label', {\n            values: { service: serviceLabel },\n          })}\n          onchange={() => {\n            onChange?.({\n              message: $_(\n                $prefs.apiKeys?.[serviceId]\n                  ? 'prefs.changes.api_key_saved'\n                  : 'prefs.changes.api_key_removed',\n              ),\n            });\n          }}\n        />\n      {/if}\n    </div>\n  </section>\n{:else}\n  {$_('prefs.media.stock_photos.providers_disabled')}\n{/each}\n","import { derived } from 'svelte/store';\n\nimport AccessibilityPanel from '$lib/components/settings/panels/accessibility-panel.svelte';\nimport AdvancedPanel from '$lib/components/settings/panels/advanced-panel.svelte';\nimport AppearancePanel from '$lib/components/settings/panels/appearance-panel.svelte';\nimport ContentsPanel from '$lib/components/settings/panels/contents-panel.svelte';\nimport I18nPanel from '$lib/components/settings/panels/i18n-panel.svelte';\nimport LanguagePanel from '$lib/components/settings/panels/language-panel.svelte';\nimport MediaPanel from '$lib/components/settings/panels/media-panel.svelte';\nimport { siteConfig } from '$lib/services/config';\n\n/**\n * @import { Component } from 'svelte';\n */\n\n/**\n * @type {import('svelte/store').Readable<{ key: string, icon: string, component: Component,\n * enabled?: boolean }[]>}\n */\nexport const panels = derived([siteConfig], ([_siteConfig]) => [\n  { key: 'appearance', icon: 'palette', component: AppearancePanel },\n  { key: 'language', icon: 'language', component: LanguagePanel },\n  { key: 'contents', icon: 'library_books', component: ContentsPanel },\n  {\n    key: 'i18n',\n    icon: 'translate',\n    component: I18nPanel,\n    enabled: (_siteConfig?.i18n?.locales?.length ?? 0) > 1,\n  },\n  { key: 'media', icon: 'photo_library', component: MediaPanel },\n  { key: 'accessibility', icon: 'accessibility_new', component: AccessibilityPanel },\n  { key: 'advanced', icon: 'build', component: AdvancedPanel },\n]);\n","<script>\n  import { Alert, Dialog, Icon, Tab, TabList, TabPanel, Toast } from '@sveltia/ui';\n  import { get } from 'svelte/store';\n  import { _ } from 'svelte-i18n';\n\n  import { panels } from '$lib/components/settings';\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} [open] Whether to open the dialog.\n   * @property {(() => void) | undefined} [onClose] Custom `close` event handler.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    open = $bindable(false),\n    onClose = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  let selectedPanel = $state('appearance');\n  let toastMessage = $state('');\n  let showToast = $state(false);\n</script>\n\n<Dialog\n  title={$_('settings')}\n  size=\"large\"\n  bind:open\n  showOk={false}\n  showCancel={false}\n  showClose={true}\n  onClose={() => {\n    onClose?.();\n  }}\n>\n  <div role=\"none\" class=\"wrapper\">\n    <TabList orientation=\"vertical\" aria-label={$_('categories')}>\n      {#each get(panels) as { key, icon, enabled = true } (key)}\n        {#if enabled}\n          <Tab\n            label={$_(`prefs.${key}.title`)}\n            selected={key === selectedPanel}\n            aria-controls=\"prefs-tab-{key}\"\n            onSelect={() => {\n              selectedPanel = key;\n            }}\n          >\n            {#snippet startIcon()}\n              <Icon name={icon} />\n            {/snippet}\n          </Tab>\n        {/if}\n      {/each}\n    </TabList>\n    {#each get(panels) as { key, component: Content } (key)}\n      <TabPanel id=\"prefs-tab-{key}\">\n        <Content\n          onChange={(/** @type {{ message: string }} */ { message }) => {\n            toastMessage = message;\n            showToast = true;\n          }}\n        />\n      </TabPanel>\n    {/each}\n  </div>\n</Dialog>\n\n<Toast bind:show={showToast}>\n  <Alert status=\"success\">{toastMessage}</Alert>\n</Toast>\n\n<style lang=\"scss\">\n  .wrapper {\n    display: flex;\n\n    :global {\n      .sui.tab-list {\n        flex: none;\n      }\n\n      .sui.tab-panel {\n        flex: auto;\n        border-width: 0;\n\n        section:not(:first-child) {\n          margin: 16px 0 0;\n        }\n\n        p {\n          margin-top: 0;\n        }\n\n        h4 {\n          font-size: inherit;\n\n          & ~ div {\n            margin: 8px 0 0;\n          }\n\n          & ~ p {\n            margin: 8px 0 0;\n            color: var(--sui-secondary-foreground-color);\n            font-size: var(--sui-font-size-small);\n          }\n        }\n      }\n    }\n  }\n</style>\n","<script>\n  import { Divider, Menu, MenuItem } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import ReleaseNotesMenuItem from '$lib/components/help/release-notes-menu-item.svelte';\n  import ShortcutsMenuItem from '$lib/components/help/shortcuts-menu-item.svelte';\n  import SettingsDialog from '$lib/components/settings/settings-dialog.svelte';\n  import { goto, openProductionSite } from '$lib/services/app/navigation';\n  import { canShowMobileSignInDialog, showMobileSignInDialog } from '$lib/services/app/onboarding';\n  import { backend, backendName } from '$lib/services/backends';\n  import { user } from '$lib/services/user';\n  import { signOut } from '$lib/services/user/auth';\n  import { isSmallScreen } from '$lib/services/user/env';\n  import { prefs } from '$lib/services/user/prefs';\n\n  /**\n   * @typedef {object} Props\n   * @property {import('@sveltia/ui').MenuButton} [menuButton] Menu button.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    menuButton,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  let showPrefsDialog = $state(false);\n\n  const isLocalRepo = $derived($backendName === 'local');\n  const isTestRepo = $derived($backendName === 'test-repo');\n</script>\n\n<Menu aria-label={$_('account')}>\n  <MenuItem\n    label={isLocalRepo\n      ? $_('working_with_local_repo')\n      : isTestRepo\n        ? $_('working_with_test_repo')\n        : $_('signed_in_as_x', { values: { name: $user?.login } })}\n    disabled={isLocalRepo || isTestRepo}\n    onclick={() => {\n      window.open($user?.profileURL, '_blank');\n    }}\n  />\n  <Divider />\n  <MenuItem\n    label={$_('live_site')}\n    onclick={() => {\n      openProductionSite();\n    }}\n  />\n  {#if $prefs.devModeEnabled}\n    <MenuItem\n      label={$_('git_repository')}\n      disabled={!$backend?.repository?.treeBaseURL}\n      onclick={() => {\n        window.open($backend?.repository?.treeBaseURL);\n      }}\n    />\n    <MenuItem\n      label={$_('site_config')}\n      onclick={() => {\n        goto('/config', { transitionType: 'forwards' });\n      }}\n    />\n  {/if}\n  <Divider />\n  <MenuItem\n    label={$_('settings')}\n    onclick={() => {\n      if ($isSmallScreen) {\n        goto('/settings', { transitionType: 'forwards' });\n      } else {\n        showPrefsDialog = true;\n      }\n    }}\n  />\n  <!-- @todo Remove the following 2 items when the Help menu is enabled -->\n  <ShortcutsMenuItem {menuButton} />\n  {#if $prefs.devModeEnabled}\n    <ReleaseNotesMenuItem />\n  {/if}\n  {#if $canShowMobileSignInDialog}\n    <MenuItem\n      label={$_('sign_in_with_mobile')}\n      onclick={() => {\n        $showMobileSignInDialog = true;\n      }}\n    />\n  {/if}\n  <Divider />\n  <MenuItem\n    label={$_('sign_out')}\n    onclick={async () => {\n      // Wait a bit before the menu is closed\n      window.requestAnimationFrame(() => {\n        signOut();\n      });\n    }}\n  />\n</Menu>\n\n<SettingsDialog\n  bind:open={showPrefsDialog}\n  onClose={() => {\n    menuButton?.focus();\n  }}\n/>\n","<script>\n  import { Icon, MenuButton } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import AccountMenu from '$lib/components/global/toolbar/items/account-menu.svelte';\n  import { user } from '$lib/services/user';\n\n  /** @type {MenuButton | undefined} */\n  let menuButton = $state();\n\n  const hasAvatar = $derived(!!$user?.avatarURL);\n</script>\n\n<div role=\"none\" class=\"wrapper\">\n  <MenuButton\n    variant=\"ghost\"\n    iconic\n    class={hasAvatar ? 'avatar' : ''}\n    popupPosition=\"bottom-right\"\n    aria-label={$_('show_account_menu')}\n    bind:this={menuButton}\n  >\n    {#snippet endIcon()}\n      {#if hasAvatar}\n        <img class=\"avatar\" loading=\"lazy\" src={$user?.avatarURL} alt=\"\" />\n      {:else}\n        <Icon name={'account_circle'} />\n      {/if}\n    {/snippet}\n    {#snippet popup()}\n      <AccountMenu {menuButton} />\n    {/snippet}\n  </MenuButton>\n</div>\n\n<style lang=\"scss\">\n  .wrapper {\n    display: contents;\n\n    :global {\n      button.avatar {\n        border-width: 0;\n        background-color: transparent;\n      }\n    }\n  }\n\n  .avatar {\n    width: 32px;\n    height: 32px;\n    border-radius: 32px;\n    object-fit: cover;\n  }\n</style>\n","<script>\n  import { Divider, Icon, Menu, MenuButton, MenuItem } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import { _ } from 'svelte-i18n';\n\n  import { goto } from '$lib/services/app/navigation';\n  import { showUploadAssetsDialog } from '$lib/services/assets/view';\n  import { getValidCollections } from '$lib/services/contents/collection';\n  import { getEntriesByCollection } from '$lib/services/contents/collection/entries';\n\n  const entryCollections = $derived(getValidCollections({ visible: true, type: 'entry' }));\n</script>\n\n<MenuButton\n  variant=\"ghost\"\n  iconic\n  popupPosition=\"bottom-right\"\n  aria-label={$_('create_entry_or_assets')}\n>\n  {#snippet endIcon()}\n    <Icon name=\"add\" />\n  {/snippet}\n  {#snippet popup()}\n    <Menu aria-label={$_('create_entry_or_assets')}>\n      {#if entryCollections.length}\n        {#each entryCollections as collection (collection.name)}\n          {@const {\n            name,\n            label,\n            label_singular: labelSingular,\n            create = false,\n            limit = Infinity,\n          } = collection}\n          <MenuItem\n            label={labelSingular || label || name}\n            disabled={!create || getEntriesByCollection(name).length >= limit}\n            onclick={() => {\n              goto(`/collections/${name}/new`, { transitionType: 'forwards' });\n            }}\n          />\n        {/each}\n        <Divider />\n      {/if}\n      <MenuItem\n        label={$_('assets')}\n        onclick={async () => {\n          goto('/assets', { transitionType: 'forwards' });\n          await sleep(100);\n          $showUploadAssetsDialog = true;\n        }}\n      />\n    </Menu>\n  {/snippet}\n</MenuButton>\n","<script>\n  import { Button, Icon } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n</script>\n\n<Button\n  variant=\"ghost\"\n  iconic\n  hidden\n  aria-label={$_('show_notifications')}\n  onclick={() => {\n    // @todo Implement this!\n  }}\n>\n  {#snippet startIcon()}\n    <Icon name=\"notifications\" />\n  {/snippet}\n</Button>\n","<script>\n  import { Alert, Button, Toast } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { backend, isLastCommitPublished } from '$lib/services/backends';\n  import { siteConfig } from '$lib/services/config';\n  import { prefs } from '$lib/services/user/prefs';\n\n  const autoDeployEnabled = $derived($siteConfig?.backend.automatic_deployments);\n  const { deployHookURL } = $derived($prefs);\n  const triggerDeployment = $derived($backend?.triggerDeployment);\n  const showButton = $derived(!!$backend?.isGit && typeof autoDeployEnabled === 'boolean');\n  const canPublish = $derived(\n    (!!deployHookURL || typeof triggerDeployment === 'function') && !$isLastCommitPublished,\n  );\n\n  /** @type {'info' | 'error'} */\n  let toastStatus = $state('info');\n  /** @type {boolean} */\n  let showToast = $state(false);\n\n  /**\n   * Trigger a manual deployment on the CI/CD provider.\n   */\n  const publish = async () => {\n    toastStatus = 'info';\n    showToast = true;\n\n    try {\n      const { ok, status } = deployHookURL\n        ? await fetch(deployHookURL, { method: 'POST', mode: 'no-cors' })\n        : ((await triggerDeployment?.()) ?? {});\n\n      // If the `mode` is `no-cors`, the regular response status will be `0`\n      if (!ok && status !== 0) {\n        throw new Error(`Webhook returned ${status} error`);\n      }\n\n      $isLastCommitPublished = true;\n    } catch (ex) {\n      toastStatus = 'error';\n      showToast = true;\n      // eslint-disable-next-line no-console\n      console.error(ex);\n    }\n  };\n</script>\n\n{#if showButton}\n  <Button\n    variant=\"secondary\"\n    label={$_('publish_changes')}\n    disabled={!canPublish}\n    onclick={() => publish()}\n  />\n  <Toast bind:show={showToast}>\n    <Alert status={toastStatus}>\n      {$_(toastStatus === 'error' ? 'publishing_changes_failed' : 'publishing_changes')}\n    </Alert>\n  </Toast>\n{/if}\n","<script>\n  import { Button } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { openProductionSite } from '$lib/services/app/navigation';\n  import { siteConfig } from '$lib/services/config';\n</script>\n\n{#if $siteConfig?.logo_url}\n  <Button\n    variant=\"ghost\"\n    iconic\n    aria-label={$_('visit_live_site')}\n    onclick={() => {\n      openProductionSite();\n    }}\n  >\n    <img loading=\"lazy\" src={$siteConfig.logo_url} alt=\"\" class=\"logo\" />\n  </Button>\n{/if}\n\n<style lang=\"scss\">\n  img {\n    width: 24px;\n    height: 24px;\n    object-fit: contain;\n  }\n</style>\n","<script>\n  import { Toolbar } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import AccountButton from '$lib/components/global/toolbar/items/account-button.svelte';\n  import CreateButton from '$lib/components/global/toolbar/items/create-button.svelte';\n  import HelpButton from '$lib/components/global/toolbar/items/help-button.svelte';\n  import NotificationsButton from '$lib/components/global/toolbar/items/notifications-button.svelte';\n  import PageSwitcher from '$lib/components/global/toolbar/items/page-switcher.svelte';\n  import PublishButton from '$lib/components/global/toolbar/items/publish-button.svelte';\n  import QuickSearchBar from '$lib/components/global/toolbar/items/quick-search-bar.svelte';\n  import SiteLogo from '$lib/components/global/toolbar/items/site-logo.svelte';\n  import { hasOverlay } from '$lib/services/app/navigation';\n</script>\n\n<div role=\"none\" class=\"toolbar-wrapper\" inert={$hasOverlay}>\n  <Toolbar variant=\"primary\" aria-label={$_('global')}>\n    <div role=\"none\" class=\"buttons\">\n      <SiteLogo />\n      <PageSwitcher />\n    </div>\n    <QuickSearchBar />\n    <div role=\"none\" class=\"buttons\">\n      <PublishButton />\n      <CreateButton />\n      <NotificationsButton />\n      <!-- @todo Show the Help menu when end user resources are prepared -->\n      {#if 0}\n        <HelpButton />\n      {/if}\n      <AccountButton />\n    </div>\n  </Toolbar>\n</div>\n\n<style lang=\"scss\">\n  .toolbar-wrapper {\n    display: contents;\n\n    &[inert] {\n      // Disable the keyboard shortcut for the search bar\n      display: none;\n    }\n\n    :global {\n      & > .sui.toolbar {\n        @media (width < 768px) {\n          padding: 0 4px;\n        }\n\n        .buttons {\n          flex: auto;\n          display: flex;\n          align-items: center;\n          width: 50%;\n\n          &:last-child {\n            justify-content: flex-end;\n          }\n        }\n\n        .sui.search-bar {\n          flex: none;\n          width: 640px;\n          max-width: 50%;\n\n          @media (width < 768px) {\n            flex: auto;\n            width: -moz-available;\n            width: -webkit-fill-available;\n            width: stretch;\n            max-width: none;\n          }\n        }\n      }\n    }\n  }\n</style>\n","<script>\n  import { Spacer, Toolbar } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import PageContainerMainArea from '$lib/components/common/page-container-main-area.svelte';\n  import PageContainer from '$lib/components/common/page-container.svelte';\n  import AccountMenu from '$lib/components/global/toolbar/items/account-menu.svelte';\n  import HelpMenu from '$lib/components/global/toolbar/items/help-menu.svelte';\n</script>\n\n<PageContainer aria-label={$_('menu')}>\n  {#snippet main()}\n    <PageContainerMainArea>\n      {#snippet primaryToolbar()}\n        <Toolbar variant=\"primary\">\n          <h2 role=\"none\">{$_('menu')}</h2>\n          <Spacer flex />\n        </Toolbar>\n      {/snippet}\n      {#snippet mainContent()}\n        <div role=\"none\" class=\"wrapper\">\n          <section>\n            <h3>{$_('account')}</h3>\n            <AccountMenu />\n          </section>\n          <!-- @todo Show the Help menu when end user resources are prepared -->\n          {#if 0}\n            <section>\n              <h3>{$_('help')}</h3>\n              <HelpMenu />\n            </section>\n          {/if}\n        </div>\n      {/snippet}\n    </PageContainerMainArea>\n  {/snippet}\n</PageContainer>\n\n<style lang=\"scss\">\n  .wrapper {\n    overflow-y: auto;\n    height: 100%;\n    --sui-menu-border-width: 0;\n    --sui-menu-border-radius: 0;\n    --sui-menu-padding: 8px 0;\n  }\n\n  h3 {\n    padding: 8px 16px;\n    background-color: var(--sui-tertiary-background-color);\n    color: var(--sui-secondary-foreground-color);\n    font-size: var(--sui-font-size-normal);\n  }\n</style>\n","// can-promise has a crash in some versions of react native that dont have\n// standard global objects\n// https://github.com/soldair/node-qrcode/issues/157\n\nmodule.exports = function () {\n  return typeof Promise === 'function' && Promise.prototype && Promise.prototype.then\n}\n","let toSJISFunction\nconst CODEWORDS_COUNT = [\n  0, // Not used\n  26, 44, 70, 100, 134, 172, 196, 242, 292, 346,\n  404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,\n  1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185,\n  2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706\n]\n\n/**\n * Returns the QR Code size for the specified version\n *\n * @param  {Number} version QR Code version\n * @return {Number}         size of QR code\n */\nexports.getSymbolSize = function getSymbolSize (version) {\n  if (!version) throw new Error('\"version\" cannot be null or undefined')\n  if (version < 1 || version > 40) throw new Error('\"version\" should be in range from 1 to 40')\n  return version * 4 + 17\n}\n\n/**\n * Returns the total number of codewords used to store data and EC information.\n *\n * @param  {Number} version QR Code version\n * @return {Number}         Data length in bits\n */\nexports.getSymbolTotalCodewords = function getSymbolTotalCodewords (version) {\n  return CODEWORDS_COUNT[version]\n}\n\n/**\n * Encode data with Bose-Chaudhuri-Hocquenghem\n *\n * @param  {Number} data Value to encode\n * @return {Number}      Encoded value\n */\nexports.getBCHDigit = function (data) {\n  let digit = 0\n\n  while (data !== 0) {\n    digit++\n    data >>>= 1\n  }\n\n  return digit\n}\n\nexports.setToSJISFunction = function setToSJISFunction (f) {\n  if (typeof f !== 'function') {\n    throw new Error('\"toSJISFunc\" is not a valid function.')\n  }\n\n  toSJISFunction = f\n}\n\nexports.isKanjiModeEnabled = function () {\n  return typeof toSJISFunction !== 'undefined'\n}\n\nexports.toSJIS = function toSJIS (kanji) {\n  return toSJISFunction(kanji)\n}\n","exports.L = { bit: 1 }\nexports.M = { bit: 0 }\nexports.Q = { bit: 3 }\nexports.H = { bit: 2 }\n\nfunction fromString (string) {\n  if (typeof string !== 'string') {\n    throw new Error('Param is not a string')\n  }\n\n  const lcStr = string.toLowerCase()\n\n  switch (lcStr) {\n    case 'l':\n    case 'low':\n      return exports.L\n\n    case 'm':\n    case 'medium':\n      return exports.M\n\n    case 'q':\n    case 'quartile':\n      return exports.Q\n\n    case 'h':\n    case 'high':\n      return exports.H\n\n    default:\n      throw new Error('Unknown EC Level: ' + string)\n  }\n}\n\nexports.isValid = function isValid (level) {\n  return level && typeof level.bit !== 'undefined' &&\n    level.bit >= 0 && level.bit < 4\n}\n\nexports.from = function from (value, defaultValue) {\n  if (exports.isValid(value)) {\n    return value\n  }\n\n  try {\n    return fromString(value)\n  } catch (e) {\n    return defaultValue\n  }\n}\n","function BitBuffer () {\n  this.buffer = []\n  this.length = 0\n}\n\nBitBuffer.prototype = {\n\n  get: function (index) {\n    const bufIndex = Math.floor(index / 8)\n    return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) === 1\n  },\n\n  put: function (num, length) {\n    for (let i = 0; i < length; i++) {\n      this.putBit(((num >>> (length - i - 1)) & 1) === 1)\n    }\n  },\n\n  getLengthInBits: function () {\n    return this.length\n  },\n\n  putBit: function (bit) {\n    const bufIndex = Math.floor(this.length / 8)\n    if (this.buffer.length <= bufIndex) {\n      this.buffer.push(0)\n    }\n\n    if (bit) {\n      this.buffer[bufIndex] |= (0x80 >>> (this.length % 8))\n    }\n\n    this.length++\n  }\n}\n\nmodule.exports = BitBuffer\n","/**\n * Helper class to handle QR Code symbol modules\n *\n * @param {Number} size Symbol size\n */\nfunction BitMatrix (size) {\n  if (!size || size < 1) {\n    throw new Error('BitMatrix size must be defined and greater than 0')\n  }\n\n  this.size = size\n  this.data = new Uint8Array(size * size)\n  this.reservedBit = new Uint8Array(size * size)\n}\n\n/**\n * Set bit value at specified location\n * If reserved flag is set, this bit will be ignored during masking process\n *\n * @param {Number}  row\n * @param {Number}  col\n * @param {Boolean} value\n * @param {Boolean} reserved\n */\nBitMatrix.prototype.set = function (row, col, value, reserved) {\n  const index = row * this.size + col\n  this.data[index] = value\n  if (reserved) this.reservedBit[index] = true\n}\n\n/**\n * Returns bit value at specified location\n *\n * @param  {Number}  row\n * @param  {Number}  col\n * @return {Boolean}\n */\nBitMatrix.prototype.get = function (row, col) {\n  return this.data[row * this.size + col]\n}\n\n/**\n * Applies xor operator at specified location\n * (used during masking process)\n *\n * @param {Number}  row\n * @param {Number}  col\n * @param {Boolean} value\n */\nBitMatrix.prototype.xor = function (row, col, value) {\n  this.data[row * this.size + col] ^= value\n}\n\n/**\n * Check if bit at specified location is reserved\n *\n * @param {Number}   row\n * @param {Number}   col\n * @return {Boolean}\n */\nBitMatrix.prototype.isReserved = function (row, col) {\n  return this.reservedBit[row * this.size + col]\n}\n\nmodule.exports = BitMatrix\n","/**\n * Alignment pattern are fixed reference pattern in defined positions\n * in a matrix symbology, which enables the decode software to re-synchronise\n * the coordinate mapping of the image modules in the event of moderate amounts\n * of distortion of the image.\n *\n * Alignment patterns are present only in QR Code symbols of version 2 or larger\n * and their number depends on the symbol version.\n */\n\nconst getSymbolSize = require('./utils').getSymbolSize\n\n/**\n * Calculate the row/column coordinates of the center module of each alignment pattern\n * for the specified QR Code version.\n *\n * The alignment patterns are positioned symmetrically on either side of the diagonal\n * running from the top left corner of the symbol to the bottom right corner.\n *\n * Since positions are simmetrical only half of the coordinates are returned.\n * Each item of the array will represent in turn the x and y coordinate.\n * @see {@link getPositions}\n *\n * @param  {Number} version QR Code version\n * @return {Array}          Array of coordinate\n */\nexports.getRowColCoords = function getRowColCoords (version) {\n  if (version === 1) return []\n\n  const posCount = Math.floor(version / 7) + 2\n  const size = getSymbolSize(version)\n  const intervals = size === 145 ? 26 : Math.ceil((size - 13) / (2 * posCount - 2)) * 2\n  const positions = [size - 7] // Last coord is always (size - 7)\n\n  for (let i = 1; i < posCount - 1; i++) {\n    positions[i] = positions[i - 1] - intervals\n  }\n\n  positions.push(6) // First coord is always 6\n\n  return positions.reverse()\n}\n\n/**\n * Returns an array containing the positions of each alignment pattern.\n * Each array's element represent the center point of the pattern as (x, y) coordinates\n *\n * Coordinates are calculated expanding the row/column coordinates returned by {@link getRowColCoords}\n * and filtering out the items that overlaps with finder pattern\n *\n * @example\n * For a Version 7 symbol {@link getRowColCoords} returns values 6, 22 and 38.\n * The alignment patterns, therefore, are to be centered on (row, column)\n * positions (6,22), (22,6), (22,22), (22,38), (38,22), (38,38).\n * Note that the coordinates (6,6), (6,38), (38,6) are occupied by finder patterns\n * and are not therefore used for alignment patterns.\n *\n * let pos = getPositions(7)\n * // [[6,22], [22,6], [22,22], [22,38], [38,22], [38,38]]\n *\n * @param  {Number} version QR Code version\n * @return {Array}          Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n  const coords = []\n  const pos = exports.getRowColCoords(version)\n  const posLength = pos.length\n\n  for (let i = 0; i < posLength; i++) {\n    for (let j = 0; j < posLength; j++) {\n      // Skip if position is occupied by finder patterns\n      if ((i === 0 && j === 0) || // top-left\n          (i === 0 && j === posLength - 1) || // bottom-left\n          (i === posLength - 1 && j === 0)) { // top-right\n        continue\n      }\n\n      coords.push([pos[i], pos[j]])\n    }\n  }\n\n  return coords\n}\n","const getSymbolSize = require('./utils').getSymbolSize\nconst FINDER_PATTERN_SIZE = 7\n\n/**\n * Returns an array containing the positions of each finder pattern.\n * Each array's element represent the top-left point of the pattern as (x, y) coordinates\n *\n * @param  {Number} version QR Code version\n * @return {Array}          Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n  const size = getSymbolSize(version)\n\n  return [\n    // top-left\n    [0, 0],\n    // top-right\n    [size - FINDER_PATTERN_SIZE, 0],\n    // bottom-left\n    [0, size - FINDER_PATTERN_SIZE]\n  ]\n}\n","/**\n * Data mask pattern reference\n * @type {Object}\n */\nexports.Patterns = {\n  PATTERN000: 0,\n  PATTERN001: 1,\n  PATTERN010: 2,\n  PATTERN011: 3,\n  PATTERN100: 4,\n  PATTERN101: 5,\n  PATTERN110: 6,\n  PATTERN111: 7\n}\n\n/**\n * Weighted penalty scores for the undesirable features\n * @type {Object}\n */\nconst PenaltyScores = {\n  N1: 3,\n  N2: 3,\n  N3: 40,\n  N4: 10\n}\n\n/**\n * Check if mask pattern value is valid\n *\n * @param  {Number}  mask    Mask pattern\n * @return {Boolean}         true if valid, false otherwise\n */\nexports.isValid = function isValid (mask) {\n  return mask != null && mask !== '' && !isNaN(mask) && mask >= 0 && mask <= 7\n}\n\n/**\n * Returns mask pattern from a value.\n * If value is not valid, returns undefined\n *\n * @param  {Number|String} value        Mask pattern value\n * @return {Number}                     Valid mask pattern or undefined\n */\nexports.from = function from (value) {\n  return exports.isValid(value) ? parseInt(value, 10) : undefined\n}\n\n/**\n* Find adjacent modules in row/column with the same color\n* and assign a penalty value.\n*\n* Points: N1 + i\n* i is the amount by which the number of adjacent modules of the same color exceeds 5\n*/\nexports.getPenaltyN1 = function getPenaltyN1 (data) {\n  const size = data.size\n  let points = 0\n  let sameCountCol = 0\n  let sameCountRow = 0\n  let lastCol = null\n  let lastRow = null\n\n  for (let row = 0; row < size; row++) {\n    sameCountCol = sameCountRow = 0\n    lastCol = lastRow = null\n\n    for (let col = 0; col < size; col++) {\n      let module = data.get(row, col)\n      if (module === lastCol) {\n        sameCountCol++\n      } else {\n        if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n        lastCol = module\n        sameCountCol = 1\n      }\n\n      module = data.get(col, row)\n      if (module === lastRow) {\n        sameCountRow++\n      } else {\n        if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n        lastRow = module\n        sameCountRow = 1\n      }\n    }\n\n    if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n    if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n  }\n\n  return points\n}\n\n/**\n * Find 2x2 blocks with the same color and assign a penalty value\n *\n * Points: N2 * (m - 1) * (n - 1)\n */\nexports.getPenaltyN2 = function getPenaltyN2 (data) {\n  const size = data.size\n  let points = 0\n\n  for (let row = 0; row < size - 1; row++) {\n    for (let col = 0; col < size - 1; col++) {\n      const last = data.get(row, col) +\n        data.get(row, col + 1) +\n        data.get(row + 1, col) +\n        data.get(row + 1, col + 1)\n\n      if (last === 4 || last === 0) points++\n    }\n  }\n\n  return points * PenaltyScores.N2\n}\n\n/**\n * Find 1:1:3:1:1 ratio (dark:light:dark:light:dark) pattern in row/column,\n * preceded or followed by light area 4 modules wide\n *\n * Points: N3 * number of pattern found\n */\nexports.getPenaltyN3 = function getPenaltyN3 (data) {\n  const size = data.size\n  let points = 0\n  let bitsCol = 0\n  let bitsRow = 0\n\n  for (let row = 0; row < size; row++) {\n    bitsCol = bitsRow = 0\n    for (let col = 0; col < size; col++) {\n      bitsCol = ((bitsCol << 1) & 0x7FF) | data.get(row, col)\n      if (col >= 10 && (bitsCol === 0x5D0 || bitsCol === 0x05D)) points++\n\n      bitsRow = ((bitsRow << 1) & 0x7FF) | data.get(col, row)\n      if (col >= 10 && (bitsRow === 0x5D0 || bitsRow === 0x05D)) points++\n    }\n  }\n\n  return points * PenaltyScores.N3\n}\n\n/**\n * Calculate proportion of dark modules in entire symbol\n *\n * Points: N4 * k\n *\n * k is the rating of the deviation of the proportion of dark modules\n * in the symbol from 50% in steps of 5%\n */\nexports.getPenaltyN4 = function getPenaltyN4 (data) {\n  let darkCount = 0\n  const modulesCount = data.data.length\n\n  for (let i = 0; i < modulesCount; i++) darkCount += data.data[i]\n\n  const k = Math.abs(Math.ceil((darkCount * 100 / modulesCount) / 5) - 10)\n\n  return k * PenaltyScores.N4\n}\n\n/**\n * Return mask value at given position\n *\n * @param  {Number} maskPattern Pattern reference value\n * @param  {Number} i           Row\n * @param  {Number} j           Column\n * @return {Boolean}            Mask value\n */\nfunction getMaskAt (maskPattern, i, j) {\n  switch (maskPattern) {\n    case exports.Patterns.PATTERN000: return (i + j) % 2 === 0\n    case exports.Patterns.PATTERN001: return i % 2 === 0\n    case exports.Patterns.PATTERN010: return j % 3 === 0\n    case exports.Patterns.PATTERN011: return (i + j) % 3 === 0\n    case exports.Patterns.PATTERN100: return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 === 0\n    case exports.Patterns.PATTERN101: return (i * j) % 2 + (i * j) % 3 === 0\n    case exports.Patterns.PATTERN110: return ((i * j) % 2 + (i * j) % 3) % 2 === 0\n    case exports.Patterns.PATTERN111: return ((i * j) % 3 + (i + j) % 2) % 2 === 0\n\n    default: throw new Error('bad maskPattern:' + maskPattern)\n  }\n}\n\n/**\n * Apply a mask pattern to a BitMatrix\n *\n * @param  {Number}    pattern Pattern reference number\n * @param  {BitMatrix} data    BitMatrix data\n */\nexports.applyMask = function applyMask (pattern, data) {\n  const size = data.size\n\n  for (let col = 0; col < size; col++) {\n    for (let row = 0; row < size; row++) {\n      if (data.isReserved(row, col)) continue\n      data.xor(row, col, getMaskAt(pattern, row, col))\n    }\n  }\n}\n\n/**\n * Returns the best mask pattern for data\n *\n * @param  {BitMatrix} data\n * @return {Number} Mask pattern reference number\n */\nexports.getBestMask = function getBestMask (data, setupFormatFunc) {\n  const numPatterns = Object.keys(exports.Patterns).length\n  let bestPattern = 0\n  let lowerPenalty = Infinity\n\n  for (let p = 0; p < numPatterns; p++) {\n    setupFormatFunc(p)\n    exports.applyMask(p, data)\n\n    // Calculate penalty\n    const penalty =\n      exports.getPenaltyN1(data) +\n      exports.getPenaltyN2(data) +\n      exports.getPenaltyN3(data) +\n      exports.getPenaltyN4(data)\n\n    // Undo previously applied mask\n    exports.applyMask(p, data)\n\n    if (penalty < lowerPenalty) {\n      lowerPenalty = penalty\n      bestPattern = p\n    }\n  }\n\n  return bestPattern\n}\n","const ECLevel = require('./error-correction-level')\r\n\r\nconst EC_BLOCKS_TABLE = [\r\n// L  M  Q  H\r\n  1, 1, 1, 1,\r\n  1, 1, 1, 1,\r\n  1, 1, 2, 2,\r\n  1, 2, 2, 4,\r\n  1, 2, 4, 4,\r\n  2, 4, 4, 4,\r\n  2, 4, 6, 5,\r\n  2, 4, 6, 6,\r\n  2, 5, 8, 8,\r\n  4, 5, 8, 8,\r\n  4, 5, 8, 11,\r\n  4, 8, 10, 11,\r\n  4, 9, 12, 16,\r\n  4, 9, 16, 16,\r\n  6, 10, 12, 18,\r\n  6, 10, 17, 16,\r\n  6, 11, 16, 19,\r\n  6, 13, 18, 21,\r\n  7, 14, 21, 25,\r\n  8, 16, 20, 25,\r\n  8, 17, 23, 25,\r\n  9, 17, 23, 34,\r\n  9, 18, 25, 30,\r\n  10, 20, 27, 32,\r\n  12, 21, 29, 35,\r\n  12, 23, 34, 37,\r\n  12, 25, 34, 40,\r\n  13, 26, 35, 42,\r\n  14, 28, 38, 45,\r\n  15, 29, 40, 48,\r\n  16, 31, 43, 51,\r\n  17, 33, 45, 54,\r\n  18, 35, 48, 57,\r\n  19, 37, 51, 60,\r\n  19, 38, 53, 63,\r\n  20, 40, 56, 66,\r\n  21, 43, 59, 70,\r\n  22, 45, 62, 74,\r\n  24, 47, 65, 77,\r\n  25, 49, 68, 81\r\n]\r\n\r\nconst EC_CODEWORDS_TABLE = [\r\n// L  M  Q  H\r\n  7, 10, 13, 17,\r\n  10, 16, 22, 28,\r\n  15, 26, 36, 44,\r\n  20, 36, 52, 64,\r\n  26, 48, 72, 88,\r\n  36, 64, 96, 112,\r\n  40, 72, 108, 130,\r\n  48, 88, 132, 156,\r\n  60, 110, 160, 192,\r\n  72, 130, 192, 224,\r\n  80, 150, 224, 264,\r\n  96, 176, 260, 308,\r\n  104, 198, 288, 352,\r\n  120, 216, 320, 384,\r\n  132, 240, 360, 432,\r\n  144, 280, 408, 480,\r\n  168, 308, 448, 532,\r\n  180, 338, 504, 588,\r\n  196, 364, 546, 650,\r\n  224, 416, 600, 700,\r\n  224, 442, 644, 750,\r\n  252, 476, 690, 816,\r\n  270, 504, 750, 900,\r\n  300, 560, 810, 960,\r\n  312, 588, 870, 1050,\r\n  336, 644, 952, 1110,\r\n  360, 700, 1020, 1200,\r\n  390, 728, 1050, 1260,\r\n  420, 784, 1140, 1350,\r\n  450, 812, 1200, 1440,\r\n  480, 868, 1290, 1530,\r\n  510, 924, 1350, 1620,\r\n  540, 980, 1440, 1710,\r\n  570, 1036, 1530, 1800,\r\n  570, 1064, 1590, 1890,\r\n  600, 1120, 1680, 1980,\r\n  630, 1204, 1770, 2100,\r\n  660, 1260, 1860, 2220,\r\n  720, 1316, 1950, 2310,\r\n  750, 1372, 2040, 2430\r\n]\r\n\r\n/**\r\n * Returns the number of error correction block that the QR Code should contain\r\n * for the specified version and error correction level.\r\n *\r\n * @param  {Number} version              QR Code version\r\n * @param  {Number} errorCorrectionLevel Error correction level\r\n * @return {Number}                      Number of error correction blocks\r\n */\r\nexports.getBlocksCount = function getBlocksCount (version, errorCorrectionLevel) {\r\n  switch (errorCorrectionLevel) {\r\n    case ECLevel.L:\r\n      return EC_BLOCKS_TABLE[(version - 1) * 4 + 0]\r\n    case ECLevel.M:\r\n      return EC_BLOCKS_TABLE[(version - 1) * 4 + 1]\r\n    case ECLevel.Q:\r\n      return EC_BLOCKS_TABLE[(version - 1) * 4 + 2]\r\n    case ECLevel.H:\r\n      return EC_BLOCKS_TABLE[(version - 1) * 4 + 3]\r\n    default:\r\n      return undefined\r\n  }\r\n}\r\n\r\n/**\r\n * Returns the number of error correction codewords to use for the specified\r\n * version and error correction level.\r\n *\r\n * @param  {Number} version              QR Code version\r\n * @param  {Number} errorCorrectionLevel Error correction level\r\n * @return {Number}                      Number of error correction codewords\r\n */\r\nexports.getTotalCodewordsCount = function getTotalCodewordsCount (version, errorCorrectionLevel) {\r\n  switch (errorCorrectionLevel) {\r\n    case ECLevel.L:\r\n      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 0]\r\n    case ECLevel.M:\r\n      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 1]\r\n    case ECLevel.Q:\r\n      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 2]\r\n    case ECLevel.H:\r\n      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 3]\r\n    default:\r\n      return undefined\r\n  }\r\n}\r\n","const EXP_TABLE = new Uint8Array(512)\nconst LOG_TABLE = new Uint8Array(256)\n/**\n * Precompute the log and anti-log tables for faster computation later\n *\n * For each possible value in the galois field 2^8, we will pre-compute\n * the logarithm and anti-logarithm (exponential) of this value\n *\n * ref {@link https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Introduction_to_mathematical_fields}\n */\n;(function initTables () {\n  let x = 1\n  for (let i = 0; i < 255; i++) {\n    EXP_TABLE[i] = x\n    LOG_TABLE[x] = i\n\n    x <<= 1 // multiply by 2\n\n    // The QR code specification says to use byte-wise modulo 100011101 arithmetic.\n    // This means that when a number is 256 or larger, it should be XORed with 0x11D.\n    if (x & 0x100) { // similar to x >= 256, but a lot faster (because 0x100 == 256)\n      x ^= 0x11D\n    }\n  }\n\n  // Optimization: double the size of the anti-log table so that we don't need to mod 255 to\n  // stay inside the bounds (because we will mainly use this table for the multiplication of\n  // two GF numbers, no more).\n  // @see {@link mul}\n  for (let i = 255; i < 512; i++) {\n    EXP_TABLE[i] = EXP_TABLE[i - 255]\n  }\n}())\n\n/**\n * Returns log value of n inside Galois Field\n *\n * @param  {Number} n\n * @return {Number}\n */\nexports.log = function log (n) {\n  if (n < 1) throw new Error('log(' + n + ')')\n  return LOG_TABLE[n]\n}\n\n/**\n * Returns anti-log value of n inside Galois Field\n *\n * @param  {Number} n\n * @return {Number}\n */\nexports.exp = function exp (n) {\n  return EXP_TABLE[n]\n}\n\n/**\n * Multiplies two number inside Galois Field\n *\n * @param  {Number} x\n * @param  {Number} y\n * @return {Number}\n */\nexports.mul = function mul (x, y) {\n  if (x === 0 || y === 0) return 0\n\n  // should be EXP_TABLE[(LOG_TABLE[x] + LOG_TABLE[y]) % 255] if EXP_TABLE wasn't oversized\n  // @see {@link initTables}\n  return EXP_TABLE[LOG_TABLE[x] + LOG_TABLE[y]]\n}\n","const GF = require('./galois-field')\n\n/**\n * Multiplies two polynomials inside Galois Field\n *\n * @param  {Uint8Array} p1 Polynomial\n * @param  {Uint8Array} p2 Polynomial\n * @return {Uint8Array}    Product of p1 and p2\n */\nexports.mul = function mul (p1, p2) {\n  const coeff = new Uint8Array(p1.length + p2.length - 1)\n\n  for (let i = 0; i < p1.length; i++) {\n    for (let j = 0; j < p2.length; j++) {\n      coeff[i + j] ^= GF.mul(p1[i], p2[j])\n    }\n  }\n\n  return coeff\n}\n\n/**\n * Calculate the remainder of polynomials division\n *\n * @param  {Uint8Array} divident Polynomial\n * @param  {Uint8Array} divisor  Polynomial\n * @return {Uint8Array}          Remainder\n */\nexports.mod = function mod (divident, divisor) {\n  let result = new Uint8Array(divident)\n\n  while ((result.length - divisor.length) >= 0) {\n    const coeff = result[0]\n\n    for (let i = 0; i < divisor.length; i++) {\n      result[i] ^= GF.mul(divisor[i], coeff)\n    }\n\n    // remove all zeros from buffer head\n    let offset = 0\n    while (offset < result.length && result[offset] === 0) offset++\n    result = result.slice(offset)\n  }\n\n  return result\n}\n\n/**\n * Generate an irreducible generator polynomial of specified degree\n * (used by Reed-Solomon encoder)\n *\n * @param  {Number} degree Degree of the generator polynomial\n * @return {Uint8Array}    Buffer containing polynomial coefficients\n */\nexports.generateECPolynomial = function generateECPolynomial (degree) {\n  let poly = new Uint8Array([1])\n  for (let i = 0; i < degree; i++) {\n    poly = exports.mul(poly, new Uint8Array([1, GF.exp(i)]))\n  }\n\n  return poly\n}\n","const Polynomial = require('./polynomial')\n\nfunction ReedSolomonEncoder (degree) {\n  this.genPoly = undefined\n  this.degree = degree\n\n  if (this.degree) this.initialize(this.degree)\n}\n\n/**\n * Initialize the encoder.\n * The input param should correspond to the number of error correction codewords.\n *\n * @param  {Number} degree\n */\nReedSolomonEncoder.prototype.initialize = function initialize (degree) {\n  // create an irreducible generator polynomial\n  this.degree = degree\n  this.genPoly = Polynomial.generateECPolynomial(this.degree)\n}\n\n/**\n * Encodes a chunk of data\n *\n * @param  {Uint8Array} data Buffer containing input data\n * @return {Uint8Array}      Buffer containing encoded data\n */\nReedSolomonEncoder.prototype.encode = function encode (data) {\n  if (!this.genPoly) {\n    throw new Error('Encoder not initialized')\n  }\n\n  // Calculate EC for this data block\n  // extends data size to data+genPoly size\n  const paddedData = new Uint8Array(data.length + this.degree)\n  paddedData.set(data)\n\n  // The error correction codewords are the remainder after dividing the data codewords\n  // by a generator polynomial\n  const remainder = Polynomial.mod(paddedData, this.genPoly)\n\n  // return EC data blocks (last n byte, where n is the degree of genPoly)\n  // If coefficients number in remainder are less than genPoly degree,\n  // pad with 0s to the left to reach the needed number of coefficients\n  const start = this.degree - remainder.length\n  if (start > 0) {\n    const buff = new Uint8Array(this.degree)\n    buff.set(remainder, start)\n\n    return buff\n  }\n\n  return remainder\n}\n\nmodule.exports = ReedSolomonEncoder\n","/**\n * Check if QR Code version is valid\n *\n * @param  {Number}  version QR Code version\n * @return {Boolean}         true if valid version, false otherwise\n */\nexports.isValid = function isValid (version) {\n  return !isNaN(version) && version >= 1 && version <= 40\n}\n","const numeric = '[0-9]+'\nconst alphanumeric = '[A-Z $%*+\\\\-./:]+'\nlet kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' +\n  '[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|' +\n  '[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|' +\n  '[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+'\nkanji = kanji.replace(/u/g, '\\\\u')\n\nconst byte = '(?:(?![A-Z0-9 $%*+\\\\-./:]|' + kanji + ')(?:.|[\\r\\n]))+'\n\nexports.KANJI = new RegExp(kanji, 'g')\nexports.BYTE_KANJI = new RegExp('[^A-Z0-9 $%*+\\\\-./:]+', 'g')\nexports.BYTE = new RegExp(byte, 'g')\nexports.NUMERIC = new RegExp(numeric, 'g')\nexports.ALPHANUMERIC = new RegExp(alphanumeric, 'g')\n\nconst TEST_KANJI = new RegExp('^' + kanji + '$')\nconst TEST_NUMERIC = new RegExp('^' + numeric + '$')\nconst TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\\\-./:]+$')\n\nexports.testKanji = function testKanji (str) {\n  return TEST_KANJI.test(str)\n}\n\nexports.testNumeric = function testNumeric (str) {\n  return TEST_NUMERIC.test(str)\n}\n\nexports.testAlphanumeric = function testAlphanumeric (str) {\n  return TEST_ALPHANUMERIC.test(str)\n}\n","const VersionCheck = require('./version-check')\nconst Regex = require('./regex')\n\n/**\n * Numeric mode encodes data from the decimal digit set (0 - 9)\n * (byte values 30HEX to 39HEX).\n * Normally, 3 data characters are represented by 10 bits.\n *\n * @type {Object}\n */\nexports.NUMERIC = {\n  id: 'Numeric',\n  bit: 1 << 0,\n  ccBits: [10, 12, 14]\n}\n\n/**\n * Alphanumeric mode encodes data from a set of 45 characters,\n * i.e. 10 numeric digits (0 - 9),\n *      26 alphabetic characters (A - Z),\n *   and 9 symbols (SP, $, %, *, +, -, ., /, :).\n * Normally, two input characters are represented by 11 bits.\n *\n * @type {Object}\n */\nexports.ALPHANUMERIC = {\n  id: 'Alphanumeric',\n  bit: 1 << 1,\n  ccBits: [9, 11, 13]\n}\n\n/**\n * In byte mode, data is encoded at 8 bits per character.\n *\n * @type {Object}\n */\nexports.BYTE = {\n  id: 'Byte',\n  bit: 1 << 2,\n  ccBits: [8, 16, 16]\n}\n\n/**\n * The Kanji mode efficiently encodes Kanji characters in accordance with\n * the Shift JIS system based on JIS X 0208.\n * The Shift JIS values are shifted from the JIS X 0208 values.\n * JIS X 0208 gives details of the shift coded representation.\n * Each two-byte character value is compacted to a 13-bit binary codeword.\n *\n * @type {Object}\n */\nexports.KANJI = {\n  id: 'Kanji',\n  bit: 1 << 3,\n  ccBits: [8, 10, 12]\n}\n\n/**\n * Mixed mode will contain a sequences of data in a combination of any of\n * the modes described above\n *\n * @type {Object}\n */\nexports.MIXED = {\n  bit: -1\n}\n\n/**\n * Returns the number of bits needed to store the data length\n * according to QR Code specifications.\n *\n * @param  {Mode}   mode    Data mode\n * @param  {Number} version QR Code version\n * @return {Number}         Number of bits\n */\nexports.getCharCountIndicator = function getCharCountIndicator (mode, version) {\n  if (!mode.ccBits) throw new Error('Invalid mode: ' + mode)\n\n  if (!VersionCheck.isValid(version)) {\n    throw new Error('Invalid version: ' + version)\n  }\n\n  if (version >= 1 && version < 10) return mode.ccBits[0]\n  else if (version < 27) return mode.ccBits[1]\n  return mode.ccBits[2]\n}\n\n/**\n * Returns the most efficient mode to store the specified data\n *\n * @param  {String} dataStr Input data string\n * @return {Mode}           Best mode\n */\nexports.getBestModeForData = function getBestModeForData (dataStr) {\n  if (Regex.testNumeric(dataStr)) return exports.NUMERIC\n  else if (Regex.testAlphanumeric(dataStr)) return exports.ALPHANUMERIC\n  else if (Regex.testKanji(dataStr)) return exports.KANJI\n  else return exports.BYTE\n}\n\n/**\n * Return mode name as string\n *\n * @param {Mode} mode Mode object\n * @returns {String}  Mode name\n */\nexports.toString = function toString (mode) {\n  if (mode && mode.id) return mode.id\n  throw new Error('Invalid mode')\n}\n\n/**\n * Check if input param is a valid mode object\n *\n * @param   {Mode}    mode Mode object\n * @returns {Boolean} True if valid mode, false otherwise\n */\nexports.isValid = function isValid (mode) {\n  return mode && mode.bit && mode.ccBits\n}\n\n/**\n * Get mode object from its name\n *\n * @param   {String} string Mode name\n * @returns {Mode}          Mode object\n */\nfunction fromString (string) {\n  if (typeof string !== 'string') {\n    throw new Error('Param is not a string')\n  }\n\n  const lcStr = string.toLowerCase()\n\n  switch (lcStr) {\n    case 'numeric':\n      return exports.NUMERIC\n    case 'alphanumeric':\n      return exports.ALPHANUMERIC\n    case 'kanji':\n      return exports.KANJI\n    case 'byte':\n      return exports.BYTE\n    default:\n      throw new Error('Unknown mode: ' + string)\n  }\n}\n\n/**\n * Returns mode from a value.\n * If value is not a valid mode, returns defaultValue\n *\n * @param  {Mode|String} value        Encoding mode\n * @param  {Mode}        defaultValue Fallback value\n * @return {Mode}                     Encoding mode\n */\nexports.from = function from (value, defaultValue) {\n  if (exports.isValid(value)) {\n    return value\n  }\n\n  try {\n    return fromString(value)\n  } catch (e) {\n    return defaultValue\n  }\n}\n","const Utils = require('./utils')\nconst ECCode = require('./error-correction-code')\nconst ECLevel = require('./error-correction-level')\nconst Mode = require('./mode')\nconst VersionCheck = require('./version-check')\n\n// Generator polynomial used to encode version information\nconst G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0)\nconst G18_BCH = Utils.getBCHDigit(G18)\n\nfunction getBestVersionForDataLength (mode, length, errorCorrectionLevel) {\n  for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n    if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, mode)) {\n      return currentVersion\n    }\n  }\n\n  return undefined\n}\n\nfunction getReservedBitsCount (mode, version) {\n  // Character count indicator + mode indicator bits\n  return Mode.getCharCountIndicator(mode, version) + 4\n}\n\nfunction getTotalBitsFromDataArray (segments, version) {\n  let totalBits = 0\n\n  segments.forEach(function (data) {\n    const reservedBits = getReservedBitsCount(data.mode, version)\n    totalBits += reservedBits + data.getBitsLength()\n  })\n\n  return totalBits\n}\n\nfunction getBestVersionForMixedData (segments, errorCorrectionLevel) {\n  for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n    const length = getTotalBitsFromDataArray(segments, currentVersion)\n    if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, Mode.MIXED)) {\n      return currentVersion\n    }\n  }\n\n  return undefined\n}\n\n/**\n * Returns version number from a value.\n * If value is not a valid version, returns defaultValue\n *\n * @param  {Number|String} value        QR Code version\n * @param  {Number}        defaultValue Fallback value\n * @return {Number}                     QR Code version number\n */\nexports.from = function from (value, defaultValue) {\n  if (VersionCheck.isValid(value)) {\n    return parseInt(value, 10)\n  }\n\n  return defaultValue\n}\n\n/**\n * Returns how much data can be stored with the specified QR code version\n * and error correction level\n *\n * @param  {Number} version              QR Code version (1-40)\n * @param  {Number} errorCorrectionLevel Error correction level\n * @param  {Mode}   mode                 Data mode\n * @return {Number}                      Quantity of storable data\n */\nexports.getCapacity = function getCapacity (version, errorCorrectionLevel, mode) {\n  if (!VersionCheck.isValid(version)) {\n    throw new Error('Invalid QR Code version')\n  }\n\n  // Use Byte mode as default\n  if (typeof mode === 'undefined') mode = Mode.BYTE\n\n  // Total codewords for this QR code version (Data + Error correction)\n  const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n  // Total number of error correction codewords\n  const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n  // Total number of data codewords\n  const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n  if (mode === Mode.MIXED) return dataTotalCodewordsBits\n\n  const usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode, version)\n\n  // Return max number of storable codewords\n  switch (mode) {\n    case Mode.NUMERIC:\n      return Math.floor((usableBits / 10) * 3)\n\n    case Mode.ALPHANUMERIC:\n      return Math.floor((usableBits / 11) * 2)\n\n    case Mode.KANJI:\n      return Math.floor(usableBits / 13)\n\n    case Mode.BYTE:\n    default:\n      return Math.floor(usableBits / 8)\n  }\n}\n\n/**\n * Returns the minimum version needed to contain the amount of data\n *\n * @param  {Segment} data                    Segment of data\n * @param  {Number} [errorCorrectionLevel=H] Error correction level\n * @param  {Mode} mode                       Data mode\n * @return {Number}                          QR Code version\n */\nexports.getBestVersionForData = function getBestVersionForData (data, errorCorrectionLevel) {\n  let seg\n\n  const ecl = ECLevel.from(errorCorrectionLevel, ECLevel.M)\n\n  if (Array.isArray(data)) {\n    if (data.length > 1) {\n      return getBestVersionForMixedData(data, ecl)\n    }\n\n    if (data.length === 0) {\n      return 1\n    }\n\n    seg = data[0]\n  } else {\n    seg = data\n  }\n\n  return getBestVersionForDataLength(seg.mode, seg.getLength(), ecl)\n}\n\n/**\n * Returns version information with relative error correction bits\n *\n * The version information is included in QR Code symbols of version 7 or larger.\n * It consists of an 18-bit sequence containing 6 data bits,\n * with 12 error correction bits calculated using the (18, 6) Golay code.\n *\n * @param  {Number} version QR Code version\n * @return {Number}         Encoded version info bits\n */\nexports.getEncodedBits = function getEncodedBits (version) {\n  if (!VersionCheck.isValid(version) || version < 7) {\n    throw new Error('Invalid QR Code version')\n  }\n\n  let d = version << 12\n\n  while (Utils.getBCHDigit(d) - G18_BCH >= 0) {\n    d ^= (G18 << (Utils.getBCHDigit(d) - G18_BCH))\n  }\n\n  return (version << 12) | d\n}\n","const Utils = require('./utils')\n\nconst G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0)\nconst G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1)\nconst G15_BCH = Utils.getBCHDigit(G15)\n\n/**\n * Returns format information with relative error correction bits\n *\n * The format information is a 15-bit sequence containing 5 data bits,\n * with 10 error correction bits calculated using the (15, 5) BCH code.\n *\n * @param  {Number} errorCorrectionLevel Error correction level\n * @param  {Number} mask                 Mask pattern\n * @return {Number}                      Encoded format information bits\n */\nexports.getEncodedBits = function getEncodedBits (errorCorrectionLevel, mask) {\n  const data = ((errorCorrectionLevel.bit << 3) | mask)\n  let d = data << 10\n\n  while (Utils.getBCHDigit(d) - G15_BCH >= 0) {\n    d ^= (G15 << (Utils.getBCHDigit(d) - G15_BCH))\n  }\n\n  // xor final data with mask pattern in order to ensure that\n  // no combination of Error Correction Level and data mask pattern\n  // will result in an all-zero data string\n  return ((data << 10) | d) ^ G15_MASK\n}\n","const Mode = require('./mode')\n\nfunction NumericData (data) {\n  this.mode = Mode.NUMERIC\n  this.data = data.toString()\n}\n\nNumericData.getBitsLength = function getBitsLength (length) {\n  return 10 * Math.floor(length / 3) + ((length % 3) ? ((length % 3) * 3 + 1) : 0)\n}\n\nNumericData.prototype.getLength = function getLength () {\n  return this.data.length\n}\n\nNumericData.prototype.getBitsLength = function getBitsLength () {\n  return NumericData.getBitsLength(this.data.length)\n}\n\nNumericData.prototype.write = function write (bitBuffer) {\n  let i, group, value\n\n  // The input data string is divided into groups of three digits,\n  // and each group is converted to its 10-bit binary equivalent.\n  for (i = 0; i + 3 <= this.data.length; i += 3) {\n    group = this.data.substr(i, 3)\n    value = parseInt(group, 10)\n\n    bitBuffer.put(value, 10)\n  }\n\n  // If the number of input digits is not an exact multiple of three,\n  // the final one or two digits are converted to 4 or 7 bits respectively.\n  const remainingNum = this.data.length - i\n  if (remainingNum > 0) {\n    group = this.data.substr(i)\n    value = parseInt(group, 10)\n\n    bitBuffer.put(value, remainingNum * 3 + 1)\n  }\n}\n\nmodule.exports = NumericData\n","const Mode = require('./mode')\n\n/**\n * Array of characters available in alphanumeric mode\n *\n * As per QR Code specification, to each character\n * is assigned a value from 0 to 44 which in this case coincides\n * with the array index\n *\n * @type {Array}\n */\nconst ALPHA_NUM_CHARS = [\n  '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\n  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',\n  ' ', '$', '%', '*', '+', '-', '.', '/', ':'\n]\n\nfunction AlphanumericData (data) {\n  this.mode = Mode.ALPHANUMERIC\n  this.data = data\n}\n\nAlphanumericData.getBitsLength = function getBitsLength (length) {\n  return 11 * Math.floor(length / 2) + 6 * (length % 2)\n}\n\nAlphanumericData.prototype.getLength = function getLength () {\n  return this.data.length\n}\n\nAlphanumericData.prototype.getBitsLength = function getBitsLength () {\n  return AlphanumericData.getBitsLength(this.data.length)\n}\n\nAlphanumericData.prototype.write = function write (bitBuffer) {\n  let i\n\n  // Input data characters are divided into groups of two characters\n  // and encoded as 11-bit binary codes.\n  for (i = 0; i + 2 <= this.data.length; i += 2) {\n    // The character value of the first character is multiplied by 45\n    let value = ALPHA_NUM_CHARS.indexOf(this.data[i]) * 45\n\n    // The character value of the second digit is added to the product\n    value += ALPHA_NUM_CHARS.indexOf(this.data[i + 1])\n\n    // The sum is then stored as 11-bit binary number\n    bitBuffer.put(value, 11)\n  }\n\n  // If the number of input data characters is not a multiple of two,\n  // the character value of the final character is encoded as a 6-bit binary number.\n  if (this.data.length % 2) {\n    bitBuffer.put(ALPHA_NUM_CHARS.indexOf(this.data[i]), 6)\n  }\n}\n\nmodule.exports = AlphanumericData\n","const Mode = require('./mode')\n\nfunction ByteData (data) {\n  this.mode = Mode.BYTE\n  if (typeof (data) === 'string') {\n    this.data = new TextEncoder().encode(data)\n  } else {\n    this.data = new Uint8Array(data)\n  }\n}\n\nByteData.getBitsLength = function getBitsLength (length) {\n  return length * 8\n}\n\nByteData.prototype.getLength = function getLength () {\n  return this.data.length\n}\n\nByteData.prototype.getBitsLength = function getBitsLength () {\n  return ByteData.getBitsLength(this.data.length)\n}\n\nByteData.prototype.write = function (bitBuffer) {\n  for (let i = 0, l = this.data.length; i < l; i++) {\n    bitBuffer.put(this.data[i], 8)\n  }\n}\n\nmodule.exports = ByteData\n","const Mode = require('./mode')\nconst Utils = require('./utils')\n\nfunction KanjiData (data) {\n  this.mode = Mode.KANJI\n  this.data = data\n}\n\nKanjiData.getBitsLength = function getBitsLength (length) {\n  return length * 13\n}\n\nKanjiData.prototype.getLength = function getLength () {\n  return this.data.length\n}\n\nKanjiData.prototype.getBitsLength = function getBitsLength () {\n  return KanjiData.getBitsLength(this.data.length)\n}\n\nKanjiData.prototype.write = function (bitBuffer) {\n  let i\n\n  // In the Shift JIS system, Kanji characters are represented by a two byte combination.\n  // These byte values are shifted from the JIS X 0208 values.\n  // JIS X 0208 gives details of the shift coded representation.\n  for (i = 0; i < this.data.length; i++) {\n    let value = Utils.toSJIS(this.data[i])\n\n    // For characters with Shift JIS values from 0x8140 to 0x9FFC:\n    if (value >= 0x8140 && value <= 0x9FFC) {\n      // Subtract 0x8140 from Shift JIS value\n      value -= 0x8140\n\n    // For characters with Shift JIS values from 0xE040 to 0xEBBF\n    } else if (value >= 0xE040 && value <= 0xEBBF) {\n      // Subtract 0xC140 from Shift JIS value\n      value -= 0xC140\n    } else {\n      throw new Error(\n        'Invalid SJIS character: ' + this.data[i] + '\\n' +\n        'Make sure your charset is UTF-8')\n    }\n\n    // Multiply most significant byte of result by 0xC0\n    // and add least significant byte to product\n    value = (((value >>> 8) & 0xff) * 0xC0) + (value & 0xff)\n\n    // Convert result to a 13-bit binary string\n    bitBuffer.put(value, 13)\n  }\n}\n\nmodule.exports = KanjiData\n","'use strict';\n\n/******************************************************************************\n * Created 2008-08-19.\n *\n * Dijkstra path-finding functions. Adapted from the Dijkstar Python project.\n *\n * Copyright (C) 2008\n *   Wyatt Baldwin <self@wyattbaldwin.com>\n *   All rights reserved\n *\n * Licensed under the MIT license.\n *\n *   http://www.opensource.org/licenses/mit-license.php\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *****************************************************************************/\nvar dijkstra = {\n  single_source_shortest_paths: function(graph, s, d) {\n    // Predecessor map for each node that has been encountered.\n    // node ID => predecessor node ID\n    var predecessors = {};\n\n    // Costs of shortest paths from s to all nodes encountered.\n    // node ID => cost\n    var costs = {};\n    costs[s] = 0;\n\n    // Costs of shortest paths from s to all nodes encountered; differs from\n    // `costs` in that it provides easy access to the node that currently has\n    // the known shortest path from s.\n    // XXX: Do we actually need both `costs` and `open`?\n    var open = dijkstra.PriorityQueue.make();\n    open.push(s, 0);\n\n    var closest,\n        u, v,\n        cost_of_s_to_u,\n        adjacent_nodes,\n        cost_of_e,\n        cost_of_s_to_u_plus_cost_of_e,\n        cost_of_s_to_v,\n        first_visit;\n    while (!open.empty()) {\n      // In the nodes remaining in graph that have a known cost from s,\n      // find the node, u, that currently has the shortest path from s.\n      closest = open.pop();\n      u = closest.value;\n      cost_of_s_to_u = closest.cost;\n\n      // Get nodes adjacent to u...\n      adjacent_nodes = graph[u] || {};\n\n      // ...and explore the edges that connect u to those nodes, updating\n      // the cost of the shortest paths to any or all of those nodes as\n      // necessary. v is the node across the current edge from u.\n      for (v in adjacent_nodes) {\n        if (adjacent_nodes.hasOwnProperty(v)) {\n          // Get the cost of the edge running from u to v.\n          cost_of_e = adjacent_nodes[v];\n\n          // Cost of s to u plus the cost of u to v across e--this is *a*\n          // cost from s to v that may or may not be less than the current\n          // known cost to v.\n          cost_of_s_to_u_plus_cost_of_e = cost_of_s_to_u + cost_of_e;\n\n          // If we haven't visited v yet OR if the current known cost from s to\n          // v is greater than the new cost we just found (cost of s to u plus\n          // cost of u to v across e), update v's cost in the cost list and\n          // update v's predecessor in the predecessor list (it's now u).\n          cost_of_s_to_v = costs[v];\n          first_visit = (typeof costs[v] === 'undefined');\n          if (first_visit || cost_of_s_to_v > cost_of_s_to_u_plus_cost_of_e) {\n            costs[v] = cost_of_s_to_u_plus_cost_of_e;\n            open.push(v, cost_of_s_to_u_plus_cost_of_e);\n            predecessors[v] = u;\n          }\n        }\n      }\n    }\n\n    if (typeof d !== 'undefined' && typeof costs[d] === 'undefined') {\n      var msg = ['Could not find a path from ', s, ' to ', d, '.'].join('');\n      throw new Error(msg);\n    }\n\n    return predecessors;\n  },\n\n  extract_shortest_path_from_predecessor_list: function(predecessors, d) {\n    var nodes = [];\n    var u = d;\n    var predecessor;\n    while (u) {\n      nodes.push(u);\n      predecessor = predecessors[u];\n      u = predecessors[u];\n    }\n    nodes.reverse();\n    return nodes;\n  },\n\n  find_path: function(graph, s, d) {\n    var predecessors = dijkstra.single_source_shortest_paths(graph, s, d);\n    return dijkstra.extract_shortest_path_from_predecessor_list(\n      predecessors, d);\n  },\n\n  /**\n   * A very naive priority queue implementation.\n   */\n  PriorityQueue: {\n    make: function (opts) {\n      var T = dijkstra.PriorityQueue,\n          t = {},\n          key;\n      opts = opts || {};\n      for (key in T) {\n        if (T.hasOwnProperty(key)) {\n          t[key] = T[key];\n        }\n      }\n      t.queue = [];\n      t.sorter = opts.sorter || T.default_sorter;\n      return t;\n    },\n\n    default_sorter: function (a, b) {\n      return a.cost - b.cost;\n    },\n\n    /**\n     * Add a new item to the queue and ensure the highest priority element\n     * is at the front of the queue.\n     */\n    push: function (value, cost) {\n      var item = {value: value, cost: cost};\n      this.queue.push(item);\n      this.queue.sort(this.sorter);\n    },\n\n    /**\n     * Return the highest priority element in the queue.\n     */\n    pop: function () {\n      return this.queue.shift();\n    },\n\n    empty: function () {\n      return this.queue.length === 0;\n    }\n  }\n};\n\n\n// node.js module exports\nif (typeof module !== 'undefined') {\n  module.exports = dijkstra;\n}\n","const Mode = require('./mode')\nconst NumericData = require('./numeric-data')\nconst AlphanumericData = require('./alphanumeric-data')\nconst ByteData = require('./byte-data')\nconst KanjiData = require('./kanji-data')\nconst Regex = require('./regex')\nconst Utils = require('./utils')\nconst dijkstra = require('dijkstrajs')\n\n/**\n * Returns UTF8 byte length\n *\n * @param  {String} str Input string\n * @return {Number}     Number of byte\n */\nfunction getStringByteLength (str) {\n  return unescape(encodeURIComponent(str)).length\n}\n\n/**\n * Get a list of segments of the specified mode\n * from a string\n *\n * @param  {Mode}   mode Segment mode\n * @param  {String} str  String to process\n * @return {Array}       Array of object with segments data\n */\nfunction getSegments (regex, mode, str) {\n  const segments = []\n  let result\n\n  while ((result = regex.exec(str)) !== null) {\n    segments.push({\n      data: result[0],\n      index: result.index,\n      mode: mode,\n      length: result[0].length\n    })\n  }\n\n  return segments\n}\n\n/**\n * Extracts a series of segments with the appropriate\n * modes from a string\n *\n * @param  {String} dataStr Input string\n * @return {Array}          Array of object with segments data\n */\nfunction getSegmentsFromString (dataStr) {\n  const numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr)\n  const alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr)\n  let byteSegs\n  let kanjiSegs\n\n  if (Utils.isKanjiModeEnabled()) {\n    byteSegs = getSegments(Regex.BYTE, Mode.BYTE, dataStr)\n    kanjiSegs = getSegments(Regex.KANJI, Mode.KANJI, dataStr)\n  } else {\n    byteSegs = getSegments(Regex.BYTE_KANJI, Mode.BYTE, dataStr)\n    kanjiSegs = []\n  }\n\n  const segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs)\n\n  return segs\n    .sort(function (s1, s2) {\n      return s1.index - s2.index\n    })\n    .map(function (obj) {\n      return {\n        data: obj.data,\n        mode: obj.mode,\n        length: obj.length\n      }\n    })\n}\n\n/**\n * Returns how many bits are needed to encode a string of\n * specified length with the specified mode\n *\n * @param  {Number} length String length\n * @param  {Mode} mode     Segment mode\n * @return {Number}        Bit length\n */\nfunction getSegmentBitsLength (length, mode) {\n  switch (mode) {\n    case Mode.NUMERIC:\n      return NumericData.getBitsLength(length)\n    case Mode.ALPHANUMERIC:\n      return AlphanumericData.getBitsLength(length)\n    case Mode.KANJI:\n      return KanjiData.getBitsLength(length)\n    case Mode.BYTE:\n      return ByteData.getBitsLength(length)\n  }\n}\n\n/**\n * Merges adjacent segments which have the same mode\n *\n * @param  {Array} segs Array of object with segments data\n * @return {Array}      Array of object with segments data\n */\nfunction mergeSegments (segs) {\n  return segs.reduce(function (acc, curr) {\n    const prevSeg = acc.length - 1 >= 0 ? acc[acc.length - 1] : null\n    if (prevSeg && prevSeg.mode === curr.mode) {\n      acc[acc.length - 1].data += curr.data\n      return acc\n    }\n\n    acc.push(curr)\n    return acc\n  }, [])\n}\n\n/**\n * Generates a list of all possible nodes combination which\n * will be used to build a segments graph.\n *\n * Nodes are divided by groups. Each group will contain a list of all the modes\n * in which is possible to encode the given text.\n *\n * For example the text '12345' can be encoded as Numeric, Alphanumeric or Byte.\n * The group for '12345' will contain then 3 objects, one for each\n * possible encoding mode.\n *\n * Each node represents a possible segment.\n *\n * @param  {Array} segs Array of object with segments data\n * @return {Array}      Array of object with segments data\n */\nfunction buildNodes (segs) {\n  const nodes = []\n  for (let i = 0; i < segs.length; i++) {\n    const seg = segs[i]\n\n    switch (seg.mode) {\n      case Mode.NUMERIC:\n        nodes.push([seg,\n          { data: seg.data, mode: Mode.ALPHANUMERIC, length: seg.length },\n          { data: seg.data, mode: Mode.BYTE, length: seg.length }\n        ])\n        break\n      case Mode.ALPHANUMERIC:\n        nodes.push([seg,\n          { data: seg.data, mode: Mode.BYTE, length: seg.length }\n        ])\n        break\n      case Mode.KANJI:\n        nodes.push([seg,\n          { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n        ])\n        break\n      case Mode.BYTE:\n        nodes.push([\n          { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n        ])\n    }\n  }\n\n  return nodes\n}\n\n/**\n * Builds a graph from a list of nodes.\n * All segments in each node group will be connected with all the segments of\n * the next group and so on.\n *\n * At each connection will be assigned a weight depending on the\n * segment's byte length.\n *\n * @param  {Array} nodes    Array of object with segments data\n * @param  {Number} version QR Code version\n * @return {Object}         Graph of all possible segments\n */\nfunction buildGraph (nodes, version) {\n  const table = {}\n  const graph = { start: {} }\n  let prevNodeIds = ['start']\n\n  for (let i = 0; i < nodes.length; i++) {\n    const nodeGroup = nodes[i]\n    const currentNodeIds = []\n\n    for (let j = 0; j < nodeGroup.length; j++) {\n      const node = nodeGroup[j]\n      const key = '' + i + j\n\n      currentNodeIds.push(key)\n      table[key] = { node: node, lastCount: 0 }\n      graph[key] = {}\n\n      for (let n = 0; n < prevNodeIds.length; n++) {\n        const prevNodeId = prevNodeIds[n]\n\n        if (table[prevNodeId] && table[prevNodeId].node.mode === node.mode) {\n          graph[prevNodeId][key] =\n            getSegmentBitsLength(table[prevNodeId].lastCount + node.length, node.mode) -\n            getSegmentBitsLength(table[prevNodeId].lastCount, node.mode)\n\n          table[prevNodeId].lastCount += node.length\n        } else {\n          if (table[prevNodeId]) table[prevNodeId].lastCount = node.length\n\n          graph[prevNodeId][key] = getSegmentBitsLength(node.length, node.mode) +\n            4 + Mode.getCharCountIndicator(node.mode, version) // switch cost\n        }\n      }\n    }\n\n    prevNodeIds = currentNodeIds\n  }\n\n  for (let n = 0; n < prevNodeIds.length; n++) {\n    graph[prevNodeIds[n]].end = 0\n  }\n\n  return { map: graph, table: table }\n}\n\n/**\n * Builds a segment from a specified data and mode.\n * If a mode is not specified, the more suitable will be used.\n *\n * @param  {String} data             Input data\n * @param  {Mode | String} modesHint Data mode\n * @return {Segment}                 Segment\n */\nfunction buildSingleSegment (data, modesHint) {\n  let mode\n  const bestMode = Mode.getBestModeForData(data)\n\n  mode = Mode.from(modesHint, bestMode)\n\n  // Make sure data can be encoded\n  if (mode !== Mode.BYTE && mode.bit < bestMode.bit) {\n    throw new Error('\"' + data + '\"' +\n      ' cannot be encoded with mode ' + Mode.toString(mode) +\n      '.\\n Suggested mode is: ' + Mode.toString(bestMode))\n  }\n\n  // Use Mode.BYTE if Kanji support is disabled\n  if (mode === Mode.KANJI && !Utils.isKanjiModeEnabled()) {\n    mode = Mode.BYTE\n  }\n\n  switch (mode) {\n    case Mode.NUMERIC:\n      return new NumericData(data)\n\n    case Mode.ALPHANUMERIC:\n      return new AlphanumericData(data)\n\n    case Mode.KANJI:\n      return new KanjiData(data)\n\n    case Mode.BYTE:\n      return new ByteData(data)\n  }\n}\n\n/**\n * Builds a list of segments from an array.\n * Array can contain Strings or Objects with segment's info.\n *\n * For each item which is a string, will be generated a segment with the given\n * string and the more appropriate encoding mode.\n *\n * For each item which is an object, will be generated a segment with the given\n * data and mode.\n * Objects must contain at least the property \"data\".\n * If property \"mode\" is not present, the more suitable mode will be used.\n *\n * @param  {Array} array Array of objects with segments data\n * @return {Array}       Array of Segments\n */\nexports.fromArray = function fromArray (array) {\n  return array.reduce(function (acc, seg) {\n    if (typeof seg === 'string') {\n      acc.push(buildSingleSegment(seg, null))\n    } else if (seg.data) {\n      acc.push(buildSingleSegment(seg.data, seg.mode))\n    }\n\n    return acc\n  }, [])\n}\n\n/**\n * Builds an optimized sequence of segments from a string,\n * which will produce the shortest possible bitstream.\n *\n * @param  {String} data    Input string\n * @param  {Number} version QR Code version\n * @return {Array}          Array of segments\n */\nexports.fromString = function fromString (data, version) {\n  const segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n\n  const nodes = buildNodes(segs)\n  const graph = buildGraph(nodes, version)\n  const path = dijkstra.find_path(graph.map, 'start', 'end')\n\n  const optimizedSegs = []\n  for (let i = 1; i < path.length - 1; i++) {\n    optimizedSegs.push(graph.table[path[i]].node)\n  }\n\n  return exports.fromArray(mergeSegments(optimizedSegs))\n}\n\n/**\n * Splits a string in various segments with the modes which\n * best represent their content.\n * The produced segments are far from being optimized.\n * The output of this function is only used to estimate a QR Code version\n * which may contain the data.\n *\n * @param  {string} data Input string\n * @return {Array}       Array of segments\n */\nexports.rawSplit = function rawSplit (data) {\n  return exports.fromArray(\n    getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n  )\n}\n","const Utils = require('./utils')\nconst ECLevel = require('./error-correction-level')\nconst BitBuffer = require('./bit-buffer')\nconst BitMatrix = require('./bit-matrix')\nconst AlignmentPattern = require('./alignment-pattern')\nconst FinderPattern = require('./finder-pattern')\nconst MaskPattern = require('./mask-pattern')\nconst ECCode = require('./error-correction-code')\nconst ReedSolomonEncoder = require('./reed-solomon-encoder')\nconst Version = require('./version')\nconst FormatInfo = require('./format-info')\nconst Mode = require('./mode')\nconst Segments = require('./segments')\n\n/**\n * QRCode for JavaScript\n *\n * modified by Ryan Day for nodejs support\n * Copyright (c) 2011 Ryan Day\n *\n * Licensed under the MIT license:\n *   http://www.opensource.org/licenses/mit-license.php\n *\n//---------------------------------------------------------------------\n// QRCode for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n//   http://www.opensource.org/licenses/mit-license.php\n//\n// The word \"QR Code\" is registered trademark of\n// DENSO WAVE INCORPORATED\n//   http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n*/\n\n/**\n * Add finder patterns bits to matrix\n *\n * @param  {BitMatrix} matrix  Modules matrix\n * @param  {Number}    version QR Code version\n */\nfunction setupFinderPattern (matrix, version) {\n  const size = matrix.size\n  const pos = FinderPattern.getPositions(version)\n\n  for (let i = 0; i < pos.length; i++) {\n    const row = pos[i][0]\n    const col = pos[i][1]\n\n    for (let r = -1; r <= 7; r++) {\n      if (row + r <= -1 || size <= row + r) continue\n\n      for (let c = -1; c <= 7; c++) {\n        if (col + c <= -1 || size <= col + c) continue\n\n        if ((r >= 0 && r <= 6 && (c === 0 || c === 6)) ||\n          (c >= 0 && c <= 6 && (r === 0 || r === 6)) ||\n          (r >= 2 && r <= 4 && c >= 2 && c <= 4)) {\n          matrix.set(row + r, col + c, true, true)\n        } else {\n          matrix.set(row + r, col + c, false, true)\n        }\n      }\n    }\n  }\n}\n\n/**\n * Add timing pattern bits to matrix\n *\n * Note: this function must be called before {@link setupAlignmentPattern}\n *\n * @param  {BitMatrix} matrix Modules matrix\n */\nfunction setupTimingPattern (matrix) {\n  const size = matrix.size\n\n  for (let r = 8; r < size - 8; r++) {\n    const value = r % 2 === 0\n    matrix.set(r, 6, value, true)\n    matrix.set(6, r, value, true)\n  }\n}\n\n/**\n * Add alignment patterns bits to matrix\n *\n * Note: this function must be called after {@link setupTimingPattern}\n *\n * @param  {BitMatrix} matrix  Modules matrix\n * @param  {Number}    version QR Code version\n */\nfunction setupAlignmentPattern (matrix, version) {\n  const pos = AlignmentPattern.getPositions(version)\n\n  for (let i = 0; i < pos.length; i++) {\n    const row = pos[i][0]\n    const col = pos[i][1]\n\n    for (let r = -2; r <= 2; r++) {\n      for (let c = -2; c <= 2; c++) {\n        if (r === -2 || r === 2 || c === -2 || c === 2 ||\n          (r === 0 && c === 0)) {\n          matrix.set(row + r, col + c, true, true)\n        } else {\n          matrix.set(row + r, col + c, false, true)\n        }\n      }\n    }\n  }\n}\n\n/**\n * Add version info bits to matrix\n *\n * @param  {BitMatrix} matrix  Modules matrix\n * @param  {Number}    version QR Code version\n */\nfunction setupVersionInfo (matrix, version) {\n  const size = matrix.size\n  const bits = Version.getEncodedBits(version)\n  let row, col, mod\n\n  for (let i = 0; i < 18; i++) {\n    row = Math.floor(i / 3)\n    col = i % 3 + size - 8 - 3\n    mod = ((bits >> i) & 1) === 1\n\n    matrix.set(row, col, mod, true)\n    matrix.set(col, row, mod, true)\n  }\n}\n\n/**\n * Add format info bits to matrix\n *\n * @param  {BitMatrix} matrix               Modules matrix\n * @param  {ErrorCorrectionLevel}    errorCorrectionLevel Error correction level\n * @param  {Number}    maskPattern          Mask pattern reference value\n */\nfunction setupFormatInfo (matrix, errorCorrectionLevel, maskPattern) {\n  const size = matrix.size\n  const bits = FormatInfo.getEncodedBits(errorCorrectionLevel, maskPattern)\n  let i, mod\n\n  for (i = 0; i < 15; i++) {\n    mod = ((bits >> i) & 1) === 1\n\n    // vertical\n    if (i < 6) {\n      matrix.set(i, 8, mod, true)\n    } else if (i < 8) {\n      matrix.set(i + 1, 8, mod, true)\n    } else {\n      matrix.set(size - 15 + i, 8, mod, true)\n    }\n\n    // horizontal\n    if (i < 8) {\n      matrix.set(8, size - i - 1, mod, true)\n    } else if (i < 9) {\n      matrix.set(8, 15 - i - 1 + 1, mod, true)\n    } else {\n      matrix.set(8, 15 - i - 1, mod, true)\n    }\n  }\n\n  // fixed module\n  matrix.set(size - 8, 8, 1, true)\n}\n\n/**\n * Add encoded data bits to matrix\n *\n * @param  {BitMatrix}  matrix Modules matrix\n * @param  {Uint8Array} data   Data codewords\n */\nfunction setupData (matrix, data) {\n  const size = matrix.size\n  let inc = -1\n  let row = size - 1\n  let bitIndex = 7\n  let byteIndex = 0\n\n  for (let col = size - 1; col > 0; col -= 2) {\n    if (col === 6) col--\n\n    while (true) {\n      for (let c = 0; c < 2; c++) {\n        if (!matrix.isReserved(row, col - c)) {\n          let dark = false\n\n          if (byteIndex < data.length) {\n            dark = (((data[byteIndex] >>> bitIndex) & 1) === 1)\n          }\n\n          matrix.set(row, col - c, dark)\n          bitIndex--\n\n          if (bitIndex === -1) {\n            byteIndex++\n            bitIndex = 7\n          }\n        }\n      }\n\n      row += inc\n\n      if (row < 0 || size <= row) {\n        row -= inc\n        inc = -inc\n        break\n      }\n    }\n  }\n}\n\n/**\n * Create encoded codewords from data input\n *\n * @param  {Number}   version              QR Code version\n * @param  {ErrorCorrectionLevel}   errorCorrectionLevel Error correction level\n * @param  {ByteData} data                 Data input\n * @return {Uint8Array}                    Buffer containing encoded codewords\n */\nfunction createData (version, errorCorrectionLevel, segments) {\n  // Prepare data buffer\n  const buffer = new BitBuffer()\n\n  segments.forEach(function (data) {\n    // prefix data with mode indicator (4 bits)\n    buffer.put(data.mode.bit, 4)\n\n    // Prefix data with character count indicator.\n    // The character count indicator is a string of bits that represents the\n    // number of characters that are being encoded.\n    // The character count indicator must be placed after the mode indicator\n    // and must be a certain number of bits long, depending on the QR version\n    // and data mode\n    // @see {@link Mode.getCharCountIndicator}.\n    buffer.put(data.getLength(), Mode.getCharCountIndicator(data.mode, version))\n\n    // add binary data sequence to buffer\n    data.write(buffer)\n  })\n\n  // Calculate required number of bits\n  const totalCodewords = Utils.getSymbolTotalCodewords(version)\n  const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n  const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n  // Add a terminator.\n  // If the bit string is shorter than the total number of required bits,\n  // a terminator of up to four 0s must be added to the right side of the string.\n  // If the bit string is more than four bits shorter than the required number of bits,\n  // add four 0s to the end.\n  if (buffer.getLengthInBits() + 4 <= dataTotalCodewordsBits) {\n    buffer.put(0, 4)\n  }\n\n  // If the bit string is fewer than four bits shorter, add only the number of 0s that\n  // are needed to reach the required number of bits.\n\n  // After adding the terminator, if the number of bits in the string is not a multiple of 8,\n  // pad the string on the right with 0s to make the string's length a multiple of 8.\n  while (buffer.getLengthInBits() % 8 !== 0) {\n    buffer.putBit(0)\n  }\n\n  // Add pad bytes if the string is still shorter than the total number of required bits.\n  // Extend the buffer to fill the data capacity of the symbol corresponding to\n  // the Version and Error Correction Level by adding the Pad Codewords 11101100 (0xEC)\n  // and 00010001 (0x11) alternately.\n  const remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8\n  for (let i = 0; i < remainingByte; i++) {\n    buffer.put(i % 2 ? 0x11 : 0xEC, 8)\n  }\n\n  return createCodewords(buffer, version, errorCorrectionLevel)\n}\n\n/**\n * Encode input data with Reed-Solomon and return codewords with\n * relative error correction bits\n *\n * @param  {BitBuffer} bitBuffer            Data to encode\n * @param  {Number}    version              QR Code version\n * @param  {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @return {Uint8Array}                     Buffer containing encoded codewords\n */\nfunction createCodewords (bitBuffer, version, errorCorrectionLevel) {\n  // Total codewords for this QR code version (Data + Error correction)\n  const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n  // Total number of error correction codewords\n  const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n  // Total number of data codewords\n  const dataTotalCodewords = totalCodewords - ecTotalCodewords\n\n  // Total number of blocks\n  const ecTotalBlocks = ECCode.getBlocksCount(version, errorCorrectionLevel)\n\n  // Calculate how many blocks each group should contain\n  const blocksInGroup2 = totalCodewords % ecTotalBlocks\n  const blocksInGroup1 = ecTotalBlocks - blocksInGroup2\n\n  const totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks)\n\n  const dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks)\n  const dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1\n\n  // Number of EC codewords is the same for both groups\n  const ecCount = totalCodewordsInGroup1 - dataCodewordsInGroup1\n\n  // Initialize a Reed-Solomon encoder with a generator polynomial of degree ecCount\n  const rs = new ReedSolomonEncoder(ecCount)\n\n  let offset = 0\n  const dcData = new Array(ecTotalBlocks)\n  const ecData = new Array(ecTotalBlocks)\n  let maxDataSize = 0\n  const buffer = new Uint8Array(bitBuffer.buffer)\n\n  // Divide the buffer into the required number of blocks\n  for (let b = 0; b < ecTotalBlocks; b++) {\n    const dataSize = b < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2\n\n    // extract a block of data from buffer\n    dcData[b] = buffer.slice(offset, offset + dataSize)\n\n    // Calculate EC codewords for this data block\n    ecData[b] = rs.encode(dcData[b])\n\n    offset += dataSize\n    maxDataSize = Math.max(maxDataSize, dataSize)\n  }\n\n  // Create final data\n  // Interleave the data and error correction codewords from each block\n  const data = new Uint8Array(totalCodewords)\n  let index = 0\n  let i, r\n\n  // Add data codewords\n  for (i = 0; i < maxDataSize; i++) {\n    for (r = 0; r < ecTotalBlocks; r++) {\n      if (i < dcData[r].length) {\n        data[index++] = dcData[r][i]\n      }\n    }\n  }\n\n  // Apped EC codewords\n  for (i = 0; i < ecCount; i++) {\n    for (r = 0; r < ecTotalBlocks; r++) {\n      data[index++] = ecData[r][i]\n    }\n  }\n\n  return data\n}\n\n/**\n * Build QR Code symbol\n *\n * @param  {String} data                 Input string\n * @param  {Number} version              QR Code version\n * @param  {ErrorCorretionLevel} errorCorrectionLevel Error level\n * @param  {MaskPattern} maskPattern     Mask pattern\n * @return {Object}                      Object containing symbol data\n */\nfunction createSymbol (data, version, errorCorrectionLevel, maskPattern) {\n  let segments\n\n  if (Array.isArray(data)) {\n    segments = Segments.fromArray(data)\n  } else if (typeof data === 'string') {\n    let estimatedVersion = version\n\n    if (!estimatedVersion) {\n      const rawSegments = Segments.rawSplit(data)\n\n      // Estimate best version that can contain raw splitted segments\n      estimatedVersion = Version.getBestVersionForData(rawSegments, errorCorrectionLevel)\n    }\n\n    // Build optimized segments\n    // If estimated version is undefined, try with the highest version\n    segments = Segments.fromString(data, estimatedVersion || 40)\n  } else {\n    throw new Error('Invalid data')\n  }\n\n  // Get the min version that can contain data\n  const bestVersion = Version.getBestVersionForData(segments, errorCorrectionLevel)\n\n  // If no version is found, data cannot be stored\n  if (!bestVersion) {\n    throw new Error('The amount of data is too big to be stored in a QR Code')\n  }\n\n  // If not specified, use min version as default\n  if (!version) {\n    version = bestVersion\n\n  // Check if the specified version can contain the data\n  } else if (version < bestVersion) {\n    throw new Error('\\n' +\n      'The chosen QR Code version cannot contain this amount of data.\\n' +\n      'Minimum version required to store current data is: ' + bestVersion + '.\\n'\n    )\n  }\n\n  const dataBits = createData(version, errorCorrectionLevel, segments)\n\n  // Allocate matrix buffer\n  const moduleCount = Utils.getSymbolSize(version)\n  const modules = new BitMatrix(moduleCount)\n\n  // Add function modules\n  setupFinderPattern(modules, version)\n  setupTimingPattern(modules)\n  setupAlignmentPattern(modules, version)\n\n  // Add temporary dummy bits for format info just to set them as reserved.\n  // This is needed to prevent these bits from being masked by {@link MaskPattern.applyMask}\n  // since the masking operation must be performed only on the encoding region.\n  // These blocks will be replaced with correct values later in code.\n  setupFormatInfo(modules, errorCorrectionLevel, 0)\n\n  if (version >= 7) {\n    setupVersionInfo(modules, version)\n  }\n\n  // Add data codewords\n  setupData(modules, dataBits)\n\n  if (isNaN(maskPattern)) {\n    // Find best mask pattern\n    maskPattern = MaskPattern.getBestMask(modules,\n      setupFormatInfo.bind(null, modules, errorCorrectionLevel))\n  }\n\n  // Apply mask pattern\n  MaskPattern.applyMask(maskPattern, modules)\n\n  // Replace format info bits with correct values\n  setupFormatInfo(modules, errorCorrectionLevel, maskPattern)\n\n  return {\n    modules: modules,\n    version: version,\n    errorCorrectionLevel: errorCorrectionLevel,\n    maskPattern: maskPattern,\n    segments: segments\n  }\n}\n\n/**\n * QR Code\n *\n * @param {String | Array} data                 Input data\n * @param {Object} options                      Optional configurations\n * @param {Number} options.version              QR Code version\n * @param {String} options.errorCorrectionLevel Error correction level\n * @param {Function} options.toSJISFunc         Helper func to convert utf8 to sjis\n */\nexports.create = function create (data, options) {\n  if (typeof data === 'undefined' || data === '') {\n    throw new Error('No input text')\n  }\n\n  let errorCorrectionLevel = ECLevel.M\n  let version\n  let mask\n\n  if (typeof options !== 'undefined') {\n    // Use higher error correction level as default\n    errorCorrectionLevel = ECLevel.from(options.errorCorrectionLevel, ECLevel.M)\n    version = Version.from(options.version)\n    mask = MaskPattern.from(options.maskPattern)\n\n    if (options.toSJISFunc) {\n      Utils.setToSJISFunction(options.toSJISFunc)\n    }\n  }\n\n  return createSymbol(data, version, errorCorrectionLevel, mask)\n}\n","function hex2rgba (hex) {\n  if (typeof hex === 'number') {\n    hex = hex.toString()\n  }\n\n  if (typeof hex !== 'string') {\n    throw new Error('Color should be defined as hex string')\n  }\n\n  let hexCode = hex.slice().replace('#', '').split('')\n  if (hexCode.length < 3 || hexCode.length === 5 || hexCode.length > 8) {\n    throw new Error('Invalid hex color: ' + hex)\n  }\n\n  // Convert from short to long form (fff -> ffffff)\n  if (hexCode.length === 3 || hexCode.length === 4) {\n    hexCode = Array.prototype.concat.apply([], hexCode.map(function (c) {\n      return [c, c]\n    }))\n  }\n\n  // Add default alpha value\n  if (hexCode.length === 6) hexCode.push('F', 'F')\n\n  const hexValue = parseInt(hexCode.join(''), 16)\n\n  return {\n    r: (hexValue >> 24) & 255,\n    g: (hexValue >> 16) & 255,\n    b: (hexValue >> 8) & 255,\n    a: hexValue & 255,\n    hex: '#' + hexCode.slice(0, 6).join('')\n  }\n}\n\nexports.getOptions = function getOptions (options) {\n  if (!options) options = {}\n  if (!options.color) options.color = {}\n\n  const margin = typeof options.margin === 'undefined' ||\n    options.margin === null ||\n    options.margin < 0\n    ? 4\n    : options.margin\n\n  const width = options.width && options.width >= 21 ? options.width : undefined\n  const scale = options.scale || 4\n\n  return {\n    width: width,\n    scale: width ? 4 : scale,\n    margin: margin,\n    color: {\n      dark: hex2rgba(options.color.dark || '#000000ff'),\n      light: hex2rgba(options.color.light || '#ffffffff')\n    },\n    type: options.type,\n    rendererOpts: options.rendererOpts || {}\n  }\n}\n\nexports.getScale = function getScale (qrSize, opts) {\n  return opts.width && opts.width >= qrSize + opts.margin * 2\n    ? opts.width / (qrSize + opts.margin * 2)\n    : opts.scale\n}\n\nexports.getImageWidth = function getImageWidth (qrSize, opts) {\n  const scale = exports.getScale(qrSize, opts)\n  return Math.floor((qrSize + opts.margin * 2) * scale)\n}\n\nexports.qrToImageData = function qrToImageData (imgData, qr, opts) {\n  const size = qr.modules.size\n  const data = qr.modules.data\n  const scale = exports.getScale(size, opts)\n  const symbolSize = Math.floor((size + opts.margin * 2) * scale)\n  const scaledMargin = opts.margin * scale\n  const palette = [opts.color.light, opts.color.dark]\n\n  for (let i = 0; i < symbolSize; i++) {\n    for (let j = 0; j < symbolSize; j++) {\n      let posDst = (i * symbolSize + j) * 4\n      let pxColor = opts.color.light\n\n      if (i >= scaledMargin && j >= scaledMargin &&\n        i < symbolSize - scaledMargin && j < symbolSize - scaledMargin) {\n        const iSrc = Math.floor((i - scaledMargin) / scale)\n        const jSrc = Math.floor((j - scaledMargin) / scale)\n        pxColor = palette[data[iSrc * size + jSrc] ? 1 : 0]\n      }\n\n      imgData[posDst++] = pxColor.r\n      imgData[posDst++] = pxColor.g\n      imgData[posDst++] = pxColor.b\n      imgData[posDst] = pxColor.a\n    }\n  }\n}\n","const Utils = require('./utils')\n\nfunction clearCanvas (ctx, canvas, size) {\n  ctx.clearRect(0, 0, canvas.width, canvas.height)\n\n  if (!canvas.style) canvas.style = {}\n  canvas.height = size\n  canvas.width = size\n  canvas.style.height = size + 'px'\n  canvas.style.width = size + 'px'\n}\n\nfunction getCanvasElement () {\n  try {\n    return document.createElement('canvas')\n  } catch (e) {\n    throw new Error('You need to specify a canvas element')\n  }\n}\n\nexports.render = function render (qrData, canvas, options) {\n  let opts = options\n  let canvasEl = canvas\n\n  if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n    opts = canvas\n    canvas = undefined\n  }\n\n  if (!canvas) {\n    canvasEl = getCanvasElement()\n  }\n\n  opts = Utils.getOptions(opts)\n  const size = Utils.getImageWidth(qrData.modules.size, opts)\n\n  const ctx = canvasEl.getContext('2d')\n  const image = ctx.createImageData(size, size)\n  Utils.qrToImageData(image.data, qrData, opts)\n\n  clearCanvas(ctx, canvasEl, size)\n  ctx.putImageData(image, 0, 0)\n\n  return canvasEl\n}\n\nexports.renderToDataURL = function renderToDataURL (qrData, canvas, options) {\n  let opts = options\n\n  if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n    opts = canvas\n    canvas = undefined\n  }\n\n  if (!opts) opts = {}\n\n  const canvasEl = exports.render(qrData, canvas, opts)\n\n  const type = opts.type || 'image/png'\n  const rendererOpts = opts.rendererOpts || {}\n\n  return canvasEl.toDataURL(type, rendererOpts.quality)\n}\n","const Utils = require('./utils')\n\nfunction getColorAttrib (color, attrib) {\n  const alpha = color.a / 255\n  const str = attrib + '=\"' + color.hex + '\"'\n\n  return alpha < 1\n    ? str + ' ' + attrib + '-opacity=\"' + alpha.toFixed(2).slice(1) + '\"'\n    : str\n}\n\nfunction svgCmd (cmd, x, y) {\n  let str = cmd + x\n  if (typeof y !== 'undefined') str += ' ' + y\n\n  return str\n}\n\nfunction qrToPath (data, size, margin) {\n  let path = ''\n  let moveBy = 0\n  let newRow = false\n  let lineLength = 0\n\n  for (let i = 0; i < data.length; i++) {\n    const col = Math.floor(i % size)\n    const row = Math.floor(i / size)\n\n    if (!col && !newRow) newRow = true\n\n    if (data[i]) {\n      lineLength++\n\n      if (!(i > 0 && col > 0 && data[i - 1])) {\n        path += newRow\n          ? svgCmd('M', col + margin, 0.5 + row + margin)\n          : svgCmd('m', moveBy, 0)\n\n        moveBy = 0\n        newRow = false\n      }\n\n      if (!(col + 1 < size && data[i + 1])) {\n        path += svgCmd('h', lineLength)\n        lineLength = 0\n      }\n    } else {\n      moveBy++\n    }\n  }\n\n  return path\n}\n\nexports.render = function render (qrData, options, cb) {\n  const opts = Utils.getOptions(options)\n  const size = qrData.modules.size\n  const data = qrData.modules.data\n  const qrcodesize = size + opts.margin * 2\n\n  const bg = !opts.color.light.a\n    ? ''\n    : '<path ' + getColorAttrib(opts.color.light, 'fill') +\n      ' d=\"M0 0h' + qrcodesize + 'v' + qrcodesize + 'H0z\"/>'\n\n  const path =\n    '<path ' + getColorAttrib(opts.color.dark, 'stroke') +\n    ' d=\"' + qrToPath(data, size, opts.margin) + '\"/>'\n\n  const viewBox = 'viewBox=\"' + '0 0 ' + qrcodesize + ' ' + qrcodesize + '\"'\n\n  const width = !opts.width ? '' : 'width=\"' + opts.width + '\" height=\"' + opts.width + '\" '\n\n  const svgTag = '<svg xmlns=\"http://www.w3.org/2000/svg\" ' + width + viewBox + ' shape-rendering=\"crispEdges\">' + bg + path + '</svg>\\n'\n\n  if (typeof cb === 'function') {\n    cb(null, svgTag)\n  }\n\n  return svgTag\n}\n","\nconst canPromise = require('./can-promise')\n\nconst QRCode = require('./core/qrcode')\nconst CanvasRenderer = require('./renderer/canvas')\nconst SvgRenderer = require('./renderer/svg-tag.js')\n\nfunction renderCanvas (renderFunc, canvas, text, opts, cb) {\n  const args = [].slice.call(arguments, 1)\n  const argsNum = args.length\n  const isLastArgCb = typeof args[argsNum - 1] === 'function'\n\n  if (!isLastArgCb && !canPromise()) {\n    throw new Error('Callback required as last argument')\n  }\n\n  if (isLastArgCb) {\n    if (argsNum < 2) {\n      throw new Error('Too few arguments provided')\n    }\n\n    if (argsNum === 2) {\n      cb = text\n      text = canvas\n      canvas = opts = undefined\n    } else if (argsNum === 3) {\n      if (canvas.getContext && typeof cb === 'undefined') {\n        cb = opts\n        opts = undefined\n      } else {\n        cb = opts\n        opts = text\n        text = canvas\n        canvas = undefined\n      }\n    }\n  } else {\n    if (argsNum < 1) {\n      throw new Error('Too few arguments provided')\n    }\n\n    if (argsNum === 1) {\n      text = canvas\n      canvas = opts = undefined\n    } else if (argsNum === 2 && !canvas.getContext) {\n      opts = text\n      text = canvas\n      canvas = undefined\n    }\n\n    return new Promise(function (resolve, reject) {\n      try {\n        const data = QRCode.create(text, opts)\n        resolve(renderFunc(data, canvas, opts))\n      } catch (e) {\n        reject(e)\n      }\n    })\n  }\n\n  try {\n    const data = QRCode.create(text, opts)\n    cb(null, renderFunc(data, canvas, opts))\n  } catch (e) {\n    cb(e)\n  }\n}\n\nexports.create = QRCode.create\nexports.toCanvas = renderCanvas.bind(null, CanvasRenderer.render)\nexports.toDataURL = renderCanvas.bind(null, CanvasRenderer.renderToDataURL)\n\n// only svg for now.\nexports.toString = renderCanvas.bind(null, function (data, _, opts) {\n  return SvgRenderer.render(data, opts)\n})\n","<script>\n  import { Dialog } from '@sveltia/ui';\n  import QRCode from 'qrcode';\n  import { _ } from 'svelte-i18n';\n\n  import { showMobileSignInDialog } from '$lib/services/app/onboarding';\n  import { user } from '$lib/services/user';\n  import { prefs } from '$lib/services/user/prefs';\n\n  /** @type {HTMLCanvasElement | undefined} */\n  let canvas = $state();\n\n  $effect(() => {\n    if (canvas && $showMobileSignInDialog) {\n      const { origin, pathname } = window.location;\n      const encodedData = btoa(JSON.stringify({ token: $user?.token, prefs: $prefs }));\n\n      QRCode.toCanvas(canvas, `${origin}${pathname}#/signin/${encodedData}`);\n    }\n  });\n</script>\n\n<Dialog\n  bind:open={$showMobileSignInDialog}\n  title={$_('sign_in_with_mobile')}\n  size=\"small\"\n  showOk={false}\n  showCancel={false}\n  showClose={true}\n  style=\"--sui-dialog-small-content-max-height:auto\"\n>\n  <div>{$_('sign_in_with_mobile_instruction')}</div>\n  <canvas bind:this={canvas}></canvas>\n</Dialog>\n\n<style lang=\"scss\">\n  canvas {\n    display: block;\n    margin: 32px auto 16px;\n    width: 200px !important;\n    height: 200px !important;\n  }\n</style>\n","<script>\n  import { GridCell, GridRow, TruncatedText } from '@sveltia/ui';\n  import { locale as appLocale } from 'svelte-i18n';\n\n  import AssetPreview from '$lib/components/assets/shared/asset-preview.svelte';\n  import { goto } from '$lib/services/app/navigation';\n  import { getFolderLabelByCollection } from '$lib/services/assets/view';\n\n  /**\n   * @import { Asset } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Asset} asset Single asset.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    asset,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const { path, name, folder, kind } = $derived(asset);\n</script>\n\n<GridRow\n  onclick={() => {\n    goto(`/assets/${path}`, { transitionType: 'forwards' });\n  }}\n>\n  <GridCell class=\"image\">\n    <AssetPreview {kind} {asset} variant=\"icon\" cover />\n  </GridCell>\n  <GridCell class=\"collection\">\n    {#key $appLocale}\n      {getFolderLabelByCollection(folder)}\n    {/key}\n  </GridCell>\n  <GridCell class=\"title\">\n    <div role=\"none\" class=\"label\">\n      <TruncatedText lines={2}>\n        {name}\n      </TruncatedText>\n    </div>\n  </GridCell>\n</GridRow>\n","import { derived } from 'svelte/store';\n\nimport { allAssets } from '$lib/services/assets';\nimport { searchTerms } from '$lib/services/search';\nimport { hasMatch, normalize } from '$lib/services/search/util';\n\n/**\n * @import { Readable } from 'svelte/store';\n * @import { Asset } from '$lib/types/private';\n */\n\n/**\n * Search assets based on the given search terms.\n * @param {object} args Arguments.\n * @param {Asset[]} args.assets All assets to search in.\n * @param {string} args.terms Search terms.\n * @returns {Asset[]} Search results.\n */\nexport const searchAssets = ({ assets, terms }) => {\n  terms = normalize(terms);\n\n  if (!assets.length || !terms) {\n    return [];\n  }\n\n  return assets.filter((asset) => hasMatch({ value: asset.name, terms }));\n};\n\n/**\n * Hold asset search results for the current search terms.\n * @type {Readable<Asset[]>}\n */\nexport const assetSearchResults = derived([allAssets, searchTerms], ([assets, terms]) =>\n  searchAssets({ assets, terms }),\n);\n","<script>\n  import { EmptyState, Group, InfiniteScroll } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import { _ } from 'svelte-i18n';\n\n  import ListingGrid from '$lib/components/common/listing-grid.svelte';\n  import AssetResultItem from '$lib/components/search/asset-result-item.svelte';\n  import { announcedPageStatus } from '$lib/services/app/navigation';\n  import { searchTerms } from '$lib/services/search';\n  import { assetSearchResults } from '$lib/services/search/assets';\n\n  /**\n   * @import { Asset } from '$lib/types/private';\n   */\n\n  $effect(() => {\n    const assetCount = $assetSearchResults.length;\n\n    $announcedPageStatus = $_('viewing_asset_search_results', {\n      values: {\n        terms: $searchTerms,\n        assets:\n          assetCount > 1\n            ? $_('many_assets', { values: { count: assetCount } })\n            : assetCount === 1\n              ? $_('one_asset')\n              : $_('no_assets'),\n      },\n    });\n  });\n</script>\n\n<Group aria-labelledby=\"search-results-assets\">\n  <h3 role=\"none\" id=\"search-results-assets\">{$_('assets')}</h3>\n  <div role=\"none\">\n    {#if $assetSearchResults.length}\n      <ListingGrid\n        viewType=\"list\"\n        aria-label={$_('assets')}\n        aria-rowcount={$assetSearchResults.length}\n      >\n        {#key $searchTerms}\n          <InfiniteScroll items={$assetSearchResults} itemKey=\"path\">\n            {#snippet renderItem(/** @type {Asset} */ asset)}\n              {#await sleep() then}\n                <AssetResultItem {asset} />\n              {/await}\n            {/snippet}\n          </InfiniteScroll>\n        {/key}\n      </ListingGrid>\n    {:else if $searchTerms}\n      <EmptyState>\n        <span role=\"none\">{$_('no_files_found')}</span>\n      </EmptyState>\n    {/if}\n  </div>\n</Group>\n","<script>\n  import { GridCell, GridRow, TruncatedText } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import { locale as appLocale } from 'svelte-i18n';\n\n  import Image from '$lib/components/assets/shared/image.svelte';\n  import { goto } from '$lib/services/app/navigation';\n  import { getCollectionLabel } from '$lib/services/contents/collection';\n  import {\n    getCollectionFileLabel,\n    getCollectionFilesByEntry,\n  } from '$lib/services/contents/collection/files';\n  import { getAssociatedCollections } from '$lib/services/contents/entry';\n  import { getEntryThumbnail } from '$lib/services/contents/entry/assets';\n  import { getEntrySummary } from '$lib/services/contents/entry/summary';\n  import { DEFAULT_I18N_CONFIG } from '$lib/services/contents/i18n/config';\n\n  /**\n   * @import {\n   * Entry,\n   * EntryCollection,\n   * InternalCollection,\n   * InternalCollectionFile,\n   * } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} RowArgs\n   * @property {InternalCollection} collection Collection.\n   * @property {InternalCollectionFile} [collectionFile] Collection file. File/singleton collection\n   * only.\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Entry} entry Single entry.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    entry,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const { locales, subPath } = $derived(entry);\n</script>\n\n{#snippet resultRow(/** @type {RowArgs} */ { collection, collectionFile })}\n  {@const { defaultLocale } = (collectionFile ?? collection)._i18n ?? DEFAULT_I18N_CONFIG}\n  {@const { content } = locales[defaultLocale] ?? Object.values(locales)[0] ?? {}}\n  {#if content}\n    <GridRow\n      onclick={() => {\n        goto(`/collections/${collection.name}/entries/${collectionFile?.name || subPath}`, {\n          transitionType: 'forwards',\n        });\n      }}\n    >\n      <GridCell class=\"image\">\n        {#if collection._type === 'entry'}\n          {#await getEntryThumbnail(/** @type {EntryCollection} */ (collection), entry) then src}\n            {#if src}\n              <Image {src} variant=\"icon\" cover />\n            {/if}\n          {/await}\n        {/if}\n      </GridCell>\n      <GridCell class=\"collection\">\n        {#key $appLocale}\n          {getCollectionLabel(collection)}\n        {/key}\n      </GridCell>\n      <GridCell class=\"title\">\n        <div role=\"none\" class=\"label\">\n          <TruncatedText lines={2}>\n            {#if collectionFile}\n              {getCollectionFileLabel(collectionFile)}\n            {:else}\n              {#key $appLocale}\n                {@html getEntrySummary(collection, entry, {\n                  useTemplate: true,\n                  allowMarkdown: true,\n                })}\n              {/key}\n            {/if}\n          </TruncatedText>\n        </div>\n      </GridCell>\n    </GridRow>\n  {/if}\n{/snippet}\n\n{#each getAssociatedCollections(entry) as collection (collection.name)}\n  {#await sleep() then}\n    {#each getCollectionFilesByEntry(collection, entry) as collectionFile (collectionFile.name)}\n      {#await sleep() then}\n        {@render resultRow({ collection, collectionFile })}\n      {/await}\n    {:else}\n      {@render resultRow({ collection })}\n    {/each}\n  {/await}\n{/each}\n","import { derived } from 'svelte/store';\nimport { locale as appLocale } from 'svelte-i18n';\n\nimport { allEntries } from '$lib/services/contents';\nimport { getCollectionFilesByEntry } from '$lib/services/contents/collection/files';\nimport { getAssociatedCollections } from '$lib/services/contents/entry';\nimport { getEntrySummary } from '$lib/services/contents/entry/summary';\nimport { searchTerms } from '$lib/services/search';\nimport { hasMatch, normalize } from '$lib/services/search/util';\n\n/**\n * @import { Readable } from 'svelte/store';\n * @import { Entry } from '$lib/types/private';\n */\n\n/**\n * Scan an entry for matches against the search terms.\n * @param {object} args Arguments.\n * @param {Entry} args.entry Entry to scan.\n * @param {string} args.terms Search terms.\n * @returns {number} Points scored for the entry based on matches.\n */\nexport const scanEntry = ({ entry, terms }) => {\n  // Count the number of matches, weighting the collection name and title\n  let points = 0;\n  const collections = getAssociatedCollections(entry);\n\n  if (collections.length) {\n    collections.forEach((collection) => {\n      // Check if the collection label or name matches\n      if (hasMatch({ value: collection.label || collection.name, terms })) {\n        points += 10;\n      }\n\n      // Check if the file labels or names match\n      points += getCollectionFilesByEntry(collection, entry).filter((file) =>\n        hasMatch({ value: file.label || file.name, terms }),\n      ).length;\n    });\n\n    const [collection] = collections;\n    const summary = getEntrySummary(collection, entry, { useTemplate: true, allowMarkdown: true });\n\n    // Check if the entry summary matches\n    if (hasMatch({ value: summary, terms })) {\n      points += 10;\n    }\n  }\n\n  // Check if the entry content matches\n  Object.values(entry.locales).forEach(({ content }) => {\n    points += Object.values(content).filter(\n      (value) =>\n        (typeof value === 'string' && !!value && hasMatch({ value, terms })) ||\n        (typeof value === 'number' && hasMatch({ value: String(value), terms })),\n    ).length;\n  });\n\n  return points;\n};\n\n/**\n * Search entries based on the given search terms.\n * @param {object} args Arguments.\n * @param {Entry[]} args.entries All entries to search in.\n * @param {string} args.terms Search terms.\n * @returns {Entry[]} Search results sorted by relevance.\n */\nexport const searchEntries = ({ entries, terms }) => {\n  terms = normalize(terms);\n\n  if (!entries.length || !terms) {\n    return [];\n  }\n\n  return entries\n    .map((entry) => ({ entry, points: scanEntry({ entry, terms }) }))\n    .filter(({ points }) => points > 0)\n    .sort((a, b) => b.points - a.points)\n    .map(({ entry }) => entry);\n};\n\n/**\n * Hold entry search results for the current search terms.\n * @type {Readable<Entry[]>}\n * @todo Search relation fields.\n */\nexport const entrySearchResults = derived(\n  // Include `appLocale` as a dependency because `getEntrySummary()` may return a localized label\n  [allEntries, searchTerms, appLocale],\n  ([entries, terms]) => searchEntries({ entries, terms }),\n);\n","<script>\n  import { EmptyState, Group, InfiniteScroll } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import { _ } from 'svelte-i18n';\n\n  import ListingGrid from '$lib/components/common/listing-grid.svelte';\n  import EntryResultItem from '$lib/components/search/entry-result-item.svelte';\n  import { announcedPageStatus } from '$lib/services/app/navigation';\n  import { searchTerms } from '$lib/services/search';\n  import { entrySearchResults } from '$lib/services/search/entries';\n\n  /**\n   * @import { Entry } from '$lib/types/private';\n   */\n\n  $effect(() => {\n    const entryCount = $entrySearchResults.length;\n\n    $announcedPageStatus = $_('viewing_entry_search_results', {\n      values: {\n        terms: $searchTerms,\n        entries:\n          entryCount > 1\n            ? $_('many_entries', { values: { count: entryCount } })\n            : entryCount === 1\n              ? $_('one_entry')\n              : $_('no_entries'),\n      },\n    });\n  });\n</script>\n\n<Group aria-labelledby=\"search-results-entries\">\n  <h3 role=\"none\" id=\"search-results-entries\">{$_('entries')}</h3>\n  <div role=\"none\">\n    {#if $entrySearchResults.length}\n      <ListingGrid\n        viewType=\"list\"\n        aria-label={$_('entries')}\n        aria-rowcount={$entrySearchResults.length}\n      >\n        {#key $searchTerms}\n          <InfiniteScroll items={$entrySearchResults} itemKey=\"id\">\n            {#snippet renderItem(/** @type {Entry} */ entry)}\n              {#await sleep() then}\n                <EntryResultItem {entry} />\n              {/await}\n            {/snippet}\n          </InfiniteScroll>\n        {/key}\n      </ListingGrid>\n    {:else if $searchTerms}\n      <EmptyState>\n        <span role=\"none\">{$_('no_entries_found')}</span>\n      </EmptyState>\n    {/if}\n  </div>\n</Group>\n","<script>\n  import { _ } from 'svelte-i18n';\n\n  import AssetResults from '$lib/components/search/asset-results.svelte';\n  import EntryResults from '$lib/components/search/entry-results.svelte';\n  import { searchMode } from '$lib/services/search';\n  import { isSmallScreen } from '$lib/services/user/env';\n</script>\n\n<div role=\"none\" class=\"wrapper\">\n  {#if !$isSmallScreen}\n    <header role=\"none\">\n      <h2 role=\"none\">{$_('search_results')}</h2>\n    </header>\n  {/if}\n  <div role=\"none\" class=\"results\">\n    {#if $searchMode === 'entries'}\n      <EntryResults />\n    {/if}\n    {#if $searchMode === 'assets'}\n      <AssetResults />\n    {/if}\n  </div>\n</div>\n\n<style lang=\"scss\">\n  .wrapper {\n    display: flex;\n    flex-direction: column;\n    overflow: hidden;\n    width: 100%;\n    background-color: var(--sui-primary-background-color);\n  }\n\n  header {\n    flex: none;\n    display: flex;\n    align-items: center;\n    padding: 0 16px;\n    height: 40px;\n    background-color: var(--sui-tertiary-background-color);\n\n    h2 {\n      font-size: var(--sui-font-size-x-large);\n    }\n  }\n\n  .results {\n    flex: auto;\n    display: flex;\n    gap: 16px;\n    overflow: hidden;\n    height: 100%;\n\n    :global {\n      & > .sui.group {\n        flex: auto;\n        display: flex;\n        flex-direction: column;\n        overflow: hidden;\n        width: 50%;\n        height: 100%;\n      }\n\n      h3 {\n        flex: none;\n        margin: 16px;\n        color: var(--sui-secondary-foreground-color);\n        font-size: var(--sui-font-size-large);\n\n        & + div {\n          overflow: auto;\n          flex: auto;\n        }\n\n        @media (width < 768px) {\n          display: none;\n        }\n      }\n    }\n  }\n</style>\n","<script>\n  import { Toolbar } from '@sveltia/ui';\n  import { onMount } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import PageContainerMainArea from '$lib/components/common/page-container-main-area.svelte';\n  import PageContainer from '$lib/components/common/page-container.svelte';\n  import BackButton from '$lib/components/common/page-toolbar/back-button.svelte';\n  import QuickSearchBar from '$lib/components/global/toolbar/items/quick-search-bar.svelte';\n  import SearchResults from '$lib/components/search/search-results.svelte';\n  import { goto, parseLocation } from '$lib/services/app/navigation';\n  import { searchMode, searchTerms } from '$lib/services/search';\n  import { isSmallScreen } from '$lib/services/user/env';\n\n  const ROUTE_REGEX = /^\\/search\\/(?<terms>.+)$/;\n\n  /**\n   * Navigate to the search page given the URL hash.\n   */\n  const navigate = () => {\n    const { path } = parseLocation();\n    const { terms } = path.match(ROUTE_REGEX)?.groups ?? {};\n\n    if (terms && terms !== $searchTerms) {\n      $searchTerms = terms;\n    }\n\n    $searchMode ??= 'entries';\n  };\n\n  onMount(() => {\n    navigate();\n\n    /** @type {HTMLInputElement} */ (document.querySelector('.sui.search-bar input'))?.focus();\n  });\n</script>\n\n<svelte:window\n  onhashchange={() => {\n    navigate();\n  }}\n/>\n\n<PageContainer aria-label={$_('search_results_for_x', { values: { terms: $searchTerms } })}>\n  {#snippet main()}\n    <PageContainerMainArea>\n      {#snippet primaryToolbar()}\n        {#if $isSmallScreen}\n          <Toolbar variant=\"primary\">\n            <BackButton\n              aria-label={$_(\n                $searchMode === 'assets' ? 'back_to_asset_folder_list' : 'back_to_collection_list',\n              )}\n              onclick={() => {\n                $searchTerms = '';\n                goto($searchMode === 'assets' ? '/assets' : '/collections', {\n                  transitionType: 'backwards',\n                });\n              }}\n            />\n            <div role=\"search\">\n              <QuickSearchBar />\n            </div>\n          </Toolbar>\n        {/if}\n      {/snippet}\n      {#snippet mainContent()}\n        <SearchResults />\n      {/snippet}\n    </PageContainerMainArea>\n  {/snippet}\n</PageContainer>\n\n<style lang=\"scss\">\n  [role='search'] {\n    display: contents;\n\n    :global {\n      .sui.search-bar {\n        flex: auto;\n      }\n    }\n  }\n</style>\n","<script>\n  import { Alert, Icon, Menu, MenuItem, Spacer, Toast, Toolbar } from '@sveltia/ui';\n  import { onMount } from 'svelte';\n  import { get } from 'svelte/store';\n  import { _ } from 'svelte-i18n';\n\n  import PageContainerMainArea from '$lib/components/common/page-container-main-area.svelte';\n  import PageContainer from '$lib/components/common/page-container.svelte';\n  import BackButton from '$lib/components/common/page-toolbar/back-button.svelte';\n  import { panels } from '$lib/components/settings';\n  import {\n    goBack,\n    goto,\n    parseLocation,\n    updateContentFromHashChange,\n  } from '$lib/services/app/navigation';\n\n  const ROUTE_REGEX = /^\\/settings(?:\\/(?<panelKey>.+))?$/;\n\n  /** @type {{ key: string, icon: string, component: import('svelte').Component } | undefined} */\n  let selectedPanel = $state(undefined);\n  let toastMessage = $state('');\n  let showToast = $state(false);\n\n  /**\n   * Navigate to the index page or a specific page given the URL hash.\n   * @todo Show Not Found page.\n   */\n  const navigate = () => {\n    const { path } = parseLocation();\n    const match = path.match(ROUTE_REGEX);\n\n    if (!match?.groups) {\n      return; // Different page\n    }\n\n    const { panelKey } = match.groups;\n\n    selectedPanel = panelKey ? get(panels).find((panel) => panel.key === panelKey) : undefined;\n  };\n\n  onMount(() => {\n    navigate();\n  });\n</script>\n\n<svelte:window\n  onhashchange={(event) => {\n    updateContentFromHashChange(event, navigate, ROUTE_REGEX);\n  }}\n/>\n\n<PageContainer aria-label={$_('settings')}>\n  {#snippet main()}\n    <PageContainerMainArea>\n      {#snippet primaryToolbar()}\n        <Toolbar variant=\"primary\">\n          {#if selectedPanel}\n            <BackButton onclick={() => goBack('/settings')} />\n            <h2 role=\"none\">{$_(`prefs.${selectedPanel.key}.title`)}</h2>\n          {:else}\n            <BackButton onclick={() => goBack('/menu')} />\n            <h2 role=\"none\">{$_('settings')}</h2>\n          {/if}\n          <Spacer flex />\n        </Toolbar>\n      {/snippet}\n      {#snippet mainContent()}\n        <div role=\"none\" class=\"wrapper\">\n          {#if selectedPanel}\n            {@const Content = selectedPanel.component}\n            <div role=\"none\" class=\"inner\">\n              <Content\n                onChange={(/** @type {{ message: string }} */ { message }) => {\n                  toastMessage = message;\n                  showToast = true;\n                }}\n              />\n            </div>\n          {:else}\n            <Menu aria-label={$_('settings')}>\n              {#each get(panels) as { key, icon } (key)}\n                <MenuItem\n                  label={$_(`prefs.${key}.title`)}\n                  onclick={() => goto(`/settings/${key}`, { transitionType: 'forwards' })}\n                >\n                  {#snippet startIcon()}\n                    <Icon name={icon} />\n                  {/snippet}\n                </MenuItem>\n              {/each}\n            </Menu>\n          {/if}\n        </div>\n      {/snippet}\n    </PageContainerMainArea>\n  {/snippet}\n</PageContainer>\n\n<Toast bind:show={showToast}>\n  <Alert status=\"success\">{toastMessage}</Alert>\n</Toast>\n\n<style lang=\"scss\">\n  .wrapper {\n    overflow-y: auto;\n    height: 100%;\n    --sui-menu-border-width: 0;\n    --sui-menu-border-radius: 0;\n    --sui-menu-padding: 8px 0;\n\n    .inner {\n      padding: 16px;\n\n      :global {\n        section:not(:first-child) {\n          margin: 16px 0 0;\n        }\n\n        p {\n          margin-top: 0;\n        }\n\n        h4 {\n          font-size: inherit;\n\n          & ~ div {\n            margin: 8px 0 0;\n          }\n\n          & ~ p {\n            margin: 8px 0 0;\n            color: var(--sui-secondary-foreground-color);\n            font-size: var(--sui-font-size-small);\n          }\n        }\n      }\n    }\n  }\n</style>\n","<script>\n  import { Group } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import PageContainer from '$lib/components/common/page-container.svelte';\n</script>\n\n<PageContainer aria-label={$_('editorial_workflow')}>\n  {#snippet main()}\n    <div role=\"none\" class=\"columns\">\n      <Group class=\"column\" aria-labelledby=\"draft-column-title\">\n        <header role=\"none\">\n          <h3 role=\"none\" id=\"draft-column-title\">{$_('status.drafts')}</h3>\n        </header>\n      </Group>\n      <Group class=\"column\" aria-labelledby=\"review-column-title\">\n        <header role=\"none\">\n          <h3 role=\"none\" id=\"review-column-title\">{$_('status.in_review')}</h3>\n        </header>\n      </Group>\n      <Group class=\"column\" aria-labelledby=\"ready-column-title\">\n        <header role=\"none\">\n          <h3 role=\"none\" id=\"ready-column-title\">{$_('status.ready')}</h3>\n        </header>\n      </Group>\n    </div>\n  {/snippet}\n</PageContainer>\n\n<style lang=\"scss\">\n  .columns {\n    flex: auto;\n    display: flex;\n    gap: 4px;\n    background-color: var(--sui-secondary-background-color); // same as toolbar\n\n    @media (width < 768px) {\n      flex-direction: column;\n      gap: 0;\n    }\n\n    :global {\n      .column {\n        flex: auto;\n        width: calc(100% / 3);\n        background-color: var(--sui-primary-background-color);\n\n        @media (width < 768px) {\n          width: 100%;\n          height: calc(100% / 3);\n        }\n      }\n    }\n\n    header {\n      display: flex;\n      align-items: center;\n      padding: 0 16px;\n      height: 40px;\n      background-color: var(--sui-tertiary-background-color);\n\n      h3 {\n        font-size: var(--sui-font-size-x-large);\n      }\n    }\n  }\n</style>\n","<script>\n  import { onMount } from 'svelte';\n\n  import AssetsPage from '$lib/components/assets/assets-page.svelte';\n  import UploadAssetsConfirmDialog from '$lib/components/assets/shared/upload-assets-confirm-dialog.svelte';\n  import UploadAssetsDialog from '$lib/components/assets/shared/upload-assets-dialog.svelte';\n  import ConfigPage from '$lib/components/config/config-page.svelte';\n  import ContentsPage from '$lib/components/contents/contents-page.svelte';\n  import TranslatorApiKeyDialog from '$lib/components/contents/details/editor/translator-api-key-dialog.svelte';\n  import EntryParseErrorsToast from '$lib/components/contents/shared/entry-parse-errors-toast.svelte';\n  import MobilePromoInfobar from '$lib/components/global/infobars/mobile-promo-infobar.svelte';\n  import BottomNavigation from '$lib/components/global/toolbar/bottom-navigation.svelte';\n  import GlobalToolbar from '$lib/components/global/toolbar/global-toolbar.svelte';\n  import MenuPage from '$lib/components/menu/menu-page.svelte';\n  import MobileSignInDialog from '$lib/components/menu/mobile-sign-in-dialog.svelte';\n  import SearchPage from '$lib/components/search/search-page.svelte';\n  import SettingsPage from '$lib/components/settings/settings-page.svelte';\n  import WorkflowPage from '$lib/components/workflow/workflow-page.svelte';\n  import { parseLocation, selectedPageName } from '$lib/services/app/navigation';\n  import { canShowMobileSignInDialog } from '$lib/services/app/onboarding';\n  import { showAssetOverlay } from '$lib/services/assets/view';\n  import { showContentOverlay } from '$lib/services/contents/editor';\n  import { searchMode } from '$lib/services/search';\n  import { isSmallScreen } from '$lib/services/user/env';\n\n  /** @type {Record<string, any>} */\n  export const pages = {\n    collections: ContentsPage,\n    assets: AssetsPage,\n    search: SearchPage,\n    workflow: WorkflowPage,\n    config: ConfigPage,\n    // For small screens\n    menu: MenuPage,\n    settings: SettingsPage,\n  };\n\n  const SelectedPage = $derived(pages[$selectedPageName]);\n\n  /**\n   * Select one of the pages given the URL path.\n   * @todo Show Not Found page.\n   */\n  export const selectPage = () => {\n    $showContentOverlay = false;\n    $showAssetOverlay = false;\n\n    const { path } = parseLocation();\n\n    const { pageName } =\n      path.match(`^\\\\/(?<pageName>${Object.keys(pages).join('|')})\\\\b`)?.groups ?? {};\n\n    if (!pageName) {\n      // Redirect any invalid page to the contents page\n      window.location.replace('#/collections');\n    } else if ($selectedPageName !== pageName) {\n      $selectedPageName = pageName;\n    }\n\n    if (pageName === 'collections') {\n      $searchMode = 'entries';\n    } else if (pageName === 'assets') {\n      $searchMode = 'assets';\n    } else if (pageName !== 'search') {\n      $searchMode = null;\n    }\n  };\n\n  onMount(() => {\n    selectPage();\n  });\n</script>\n\n<svelte:window\n  onhashchange={() => {\n    selectPage();\n  }}\n/>\n\n{#if $canShowMobileSignInDialog}\n  <MobilePromoInfobar />\n  <MobileSignInDialog />\n{/if}\n\n{#if !$isSmallScreen}\n  <GlobalToolbar />\n{/if}\n\n<div role=\"none\" class=\"page-root\">\n  <SelectedPage />\n</div>\n\n{#if $isSmallScreen}\n  <BottomNavigation />\n{/if}\n\n<UploadAssetsDialog />\n<UploadAssetsConfirmDialog />\n<TranslatorApiKeyDialog />\n<EntryParseErrorsToast />\n\n<style lang=\"scss\">\n  .page-root {\n    position: relative;\n    flex: auto;\n    display: flex;\n    flex-direction: column;\n    overflow: hidden;\n    view-transition-name: page-root;\n  }\n</style>\n","/**\n * IMPORTANT: These strings are not ready for localization. DO NOT TRANSLATE THIS FILE.\n * @see https://github.com/sveltia/sveltia-cms/blob/main/src/lib/locales/README.md\n */\nexport const strings = {\n  // Pages & Navigation\n  collections: 'Collections',\n  contents: 'Contents',\n  entries: 'Entries',\n  files: 'Files',\n  assets: 'Assets',\n  media: 'Media',\n  workflow: 'Workflow',\n  editorial_workflow: 'Editorial Workflow',\n  menu: 'Menu',\n\n  // Account\n  user_name: 'User Name',\n  password: 'Password',\n  sign_in: 'Sign In',\n  sign_in_with_mobile: 'Sign In with Mobile',\n  sign_in_with_mobile_instruction:\n    'Scan the QR code below with your phone or tablet for passwordless sign-in. Your settings will be automatically copied.',\n  signed_in_as_x: 'Signed In as {name}',\n  working_with_local_repo: 'Working with Local Repository',\n  working_with_test_repo: 'Working with Test Repository',\n  sign_out: 'Sign Out',\n\n  // Common terms\n  create: 'New',\n  select: 'Select',\n  select_all: 'Select All',\n  upload: 'Upload',\n  copy: 'Copy',\n  download: 'Download',\n  duplicate: 'Duplicate',\n  delete: 'Delete',\n  save: 'Save',\n  saving: 'Saving…',\n  rename: 'Rename',\n  update: 'Update',\n  replace: 'Replace',\n  add: 'Add',\n  remove: 'Remove',\n  remove_x: 'Remove {name}',\n  clear: 'Clear',\n  expand: 'Expand',\n  expand_all: 'Expand All',\n  collapse: 'Collapse',\n  collapse_all: 'Collapse All',\n  insert: 'Insert',\n  restore: 'Restore',\n  discard: 'Discard',\n  searching: 'Searching…',\n  no_results: 'No results found.',\n  global: 'Global',\n  primary: 'Primary',\n  secondary: 'Secondary',\n  collection: 'Collection',\n  folder: 'Folder',\n  api_key: 'API Key',\n  details: 'Details',\n  back: 'Back',\n  loading: 'Loading…',\n  later: 'Later',\n\n  // Common errors\n  clipboard_error: 'There was an error while copying data.',\n\n  // Entrance\n  welcome_to_sveltia_cms: 'Welcome to Sveltia CMS',\n  loading_site_config: 'Loading Site Configuration…',\n  loading_site_data: 'Loading Site Data…',\n  loading_site_data_error: 'There was an error while loading site data.',\n  sign_in_with_x: 'Sign In with {service}',\n  use_regular_authentication_flow: 'Use Regular Authentication Flow',\n  use_personal_access_token: 'Use Personal Access Token',\n  sign_in_using_pat_title: 'Sign In Using Personal Access Token',\n  sign_in_using_pat_description:\n    'Enter your token below. It must have read/write access to the repository content.',\n  personal_access_token: 'Personal Access Token',\n  authorizing: 'Authorizing…',\n  signing_in: 'Signing in…',\n  work_with_local_repo: 'Work with Local Repository',\n  work_with_local_repo_description:\n    'Click the button to select the root directory of the “{repo}” repository.',\n  work_with_local_repo_description_no_repo:\n    'Click the button to select the root directory of your Git repository.',\n  work_with_test_repo: 'Work with Test Repository',\n  sign_in_error: {\n    not_project_root:\n      'The folder you have selected is not a repository root directory. Please try again.',\n    picker_dismissed: 'A repository root directory could not be selected. Please try again.',\n    authentication_aborted: 'Authentication aborted. Please try again.',\n    invalid_token: 'The provided token is invalid. Please check and try again.',\n    // Errors defined in Sveltia CMS Authenticator\n    // https://github.com/sveltia/sveltia-cms-auth/blob/main/src/index.js\n    UNSUPPORTED_BACKEND: 'Your Git backend is not supported by the authenticator.',\n    UNSUPPORTED_DOMAIN: 'Your domain is not allowed to use the authenticator.',\n    MISCONFIGURED_CLIENT: 'OAuth app client ID or secret is not configured.',\n    AUTH_CODE_REQUEST_FAILED: 'Failed to receive an authorization code. Please try again later.',\n    CSRF_DETECTED: 'Potential CSRF attack detected. Authentication flow aborted.',\n    TOKEN_REQUEST_FAILED: 'Failed to request an access token. Please try again later.',\n    TOKEN_REFRESH_FAILED: 'Failed to refresh the access token. Please try again later.',\n    MALFORMED_RESPONSE: 'Server responded with malformed data. Please try again later.',\n  },\n  backend_unsupported_version: 'The {name} backend requires {name} {version} or later.',\n  repository_no_access: 'You don’t have access to the “{repo}” repository.',\n  repository_not_found: 'The “{repo}” repository doesn’t exist.',\n  repository_empty: 'The “{repo}” repository has no branches.',\n  branch_not_found: 'The “{repo}” repository doesn’t have the “{branch}” branch.',\n  unexpected_error: 'Unexpected Error',\n\n  // Parser errors\n  entry_parse_error:\n    'There was an error while parsing an entry file. Check the browser console for details.',\n  entry_parse_errors:\n    'There were errors while parsing entry files. Check the browser console for details.',\n\n  // Onboarding\n  mobile_promo_title: 'Sveltia CMS is now available on mobile!',\n  mobile_promo_button: 'Give it a try',\n\n  // Global toolbar\n  visit_live_site: 'Visit Live Site',\n  switch_page: 'Switch Page',\n  search_placeholder_entries: 'Search for entries…',\n  search_placeholder_assets: 'Search for assets…',\n  search_placeholder_all: 'Search for entries and assets…',\n  create_entry_or_assets: 'Create Entry or Assets',\n  publish_changes: 'Publish Changes',\n  publishing_changes: 'Publishing Changes…',\n  publishing_changes_failed: 'Changes could not be published. Please try again later.',\n  show_notifications: 'Show Notifications',\n  notifications: 'Notifications',\n  show_account_menu: 'Show Account Menu',\n  account: 'Account',\n  live_site: 'Live Site',\n  git_repository: 'Git Repository',\n  settings: 'Settings',\n  site_config: 'Site Configuration',\n  show_help_menu: 'Show Help Menu',\n  help: 'Help',\n  keyboard_shortcuts: 'Keyboard Shortcuts',\n  documentation: 'Documentation',\n  release_notes: 'Release Notes',\n  version_x: 'Version {version}',\n  report_issue: 'Report Issue',\n  share_feedback: 'Share Feedback',\n  get_help: 'Get Help',\n  join_discord: 'Join Us on Discord',\n\n  // Update notification\n  update_available: 'The latest version of Sveltia CMS is available.',\n  update_now: 'Update Now',\n\n  // Backend status indicator\n  backend_status: {\n    minor_incident:\n      '{service} is experiencing a minor incident. Your workflow may be potentially affected.',\n    major_incident:\n      '{service} is experiencing a major incident. You may want to wait until the situation has improved.',\n  },\n\n  // Library\n  content_library: 'Content Library',\n  asset_library: 'Asset Library',\n  asset_location: {\n    repository: 'Your Site',\n    external: 'External Locations',\n    stock_photos: 'Stock Photos',\n  },\n  collection_assets: 'Collection Assets',\n  entry_list: 'Entry List',\n  file_list: 'File List',\n  asset_list: 'Asset List',\n  x_collection: '“{collection}” Collection',\n  x_asset_folder: '“{folder}” Asset Folder',\n  viewing_collection_list: 'You’re now viewing the collection list.',\n  viewing_asset_folder_list: 'You’re now viewing the asset folder list.',\n  viewing_x_collection_many_entries:\n    'You’re now viewing the “{collection}” collection, which has {count} entries.',\n  viewing_x_collection_one_entry:\n    'You’re now viewing the “{collection}” collection, which has one entry.',\n  viewing_x_collection_no_entries:\n    'You’re now viewing the “{collection}” collection, which has no entries yet.',\n  viewing_x_asset_folder_many_assets:\n    'You’re now viewing the “{folder}” asset folder, which has {count} assets.',\n  viewing_x_asset_folder_one_asset:\n    'You’re now viewing the “{folder}” asset folder, which has one asset.',\n  viewing_x_asset_folder_no_assets:\n    'You’re now viewing the “{folder}” asset folder, which has no assets yet.',\n  singleton_selected_announcement: 'Press Enter to edit the “{file}” file.',\n  collection_not_found: 'Collection not found',\n  file_not_found: 'File not found.',\n  x_of_x_selected: '{selected} of {total} selected',\n  switch_view: 'Switch View',\n  list_view: 'List View',\n  grid_view: 'Grid View',\n  switch_to_list_view: 'Switch to List View',\n  switch_to_grid_view: 'Switch to Grid View',\n  sort: 'Sort',\n  sorting_options: 'Sorting Options',\n  sort_keys: {\n    none: 'None',\n    name: 'Name',\n    slug: 'Slug',\n    commit_author: 'Updated by',\n    commit_date: 'Updated on',\n  },\n  ascending: '{label}, A to Z',\n  ascending_date: '{label}, old to new',\n  descending: '{label}, Z to A',\n  descending_date: '{label}, new to old',\n  filter: 'Filter',\n  filtering_options: 'Filtering Options',\n  group: 'Group', // Verb\n  grouping_options: 'Grouping Options',\n  type: 'Type',\n  all: 'All',\n  image: 'Image',\n  video: 'Video',\n  audio: 'Audio',\n  document: 'Document',\n  other: 'Other',\n  show_assets: 'Show Assets',\n  hide_assets: 'Hide Assets',\n  show_info: 'Show Info',\n  hide_info: 'Hide Info',\n  all_assets: 'All Assets',\n  global_assets: 'Global Assets',\n  creating_entries_disabled_by_admin:\n    'Creating new entries in this collection is disabled by the administrator.',\n  creating_entries_disabled_by_limit:\n    'You cannot add new entries to this collection because it has reached its limit of {limit} entries.',\n  back_to_collection: 'Back to Collection',\n  collection_list: 'Collection List',\n  back_to_collection_list: 'Back to Collection List',\n  asset_folder_list: 'Asset Folder List',\n  back_to_asset_folder_list: 'Back to Asset Folder List',\n  search_results: 'Search Results',\n  search_results_for_x: 'Search Results for “{terms}”',\n  viewing_entry_search_results:\n    'You’re now viewing search results for “{terms}”. We’ve found {entries}.',\n  viewing_asset_search_results:\n    'You’re now viewing search results for “{terms}”. We’ve found {assets}.',\n  many_entries: '{count} entries',\n  one_entry: 'one entry',\n  no_entries: 'no entries',\n  many_assets: '{count} assets',\n  one_asset: 'one asset',\n  no_assets: 'no assets',\n  no_files_found: 'No files found.',\n  no_entries_found: 'No entries found.',\n  upload_assets: 'Upload New Assets',\n  edit_options: 'Edit Options',\n  show_edit_options: 'Show Edit Options',\n  edit_asset: 'Edit Asset',\n  edit_x: 'Edit {name}',\n  wrap_long_lines: 'Wrap Long Lines',\n  rename_asset: 'Rename Asset',\n  rename_x: 'Rename {name}',\n  enter_new_name_for_asset: 'Enter a new name below.',\n  enter_new_name_for_asset_with_one_entry:\n    'Enter a new name below. An entry using the asset will also be updated.',\n  enter_new_name_for_asset_with_many_entries:\n    'Enter a new name below. {count} entries using the asset will also be updated.',\n  enter_new_name_for_asset_error: {\n    empty: 'File name cannot be empty.',\n    character: 'File name cannot contain special characters.',\n    duplicate: 'This file name is used for another asset.',\n  },\n  replace_asset: 'Replace Asset',\n  replace_x: 'Replace {name}',\n  tap_to_browse: 'Tap to browse…',\n  drop_file_or_click_to_browse: 'Drop a file here or click to browse…',\n  drop_files_or_click_to_browse: 'Drop files here or click to browse…',\n  drop_image_file_or_click_to_browse: 'Drop an image file here or click to browse…',\n  drop_image_files_or_click_to_browse: 'Drop image files here or click to browse…',\n  drop_file_here: 'Drop a file here',\n  drop_files_here: 'Drop files here',\n  unsupported_file_type: 'Unsupported File Type',\n  dropped_file_type_mismatch: 'The dropped file is not the {type} type. Please try again.',\n  dropped_image_type_mismatch:\n    'The dropped file is not supported. Only an AVIF, GIF, JPEG, PNG, WebP or SVG image is accepted. Please try again.',\n  choose_file: 'Choose File',\n  choose_files: 'Choose Files',\n  delete_asset: 'Delete Asset',\n  delete_assets: 'Delete Assets',\n  delete_selected_asset: 'Delete Selected Asset',\n  delete_selected_assets: 'Delete Selected Assets',\n  confirm_deleting_this_asset: 'Are you sure to delete this asset?',\n  confirm_deleting_selected_asset: 'Are you sure to delete the selected asset?',\n  confirm_deleting_selected_assets: 'Are you sure to delete the selected {count} assets?',\n  confirm_deleting_all_assets: 'Are you sure to delete all the assets?',\n  delete_entry: 'Delete Entry',\n  delete_entries: 'Delete Entries',\n  delete_selected_entry: 'Delete Selected Entry',\n  delete_selected_entries: 'Delete Selected Entries',\n  confirm_deleting_this_entry: 'Are you sure to delete this entry?',\n  confirm_deleting_this_entry_with_assets:\n    'Are you sure to delete this entry and associated assets?',\n  confirm_deleting_selected_entry: 'Are you sure to delete the selected entry?',\n  confirm_deleting_selected_entry_with_assets:\n    'Are you sure to delete the selected entry and associated assets?',\n  confirm_deleting_selected_entries: 'Are you sure to delete the selected {count} entries?',\n  confirm_deleting_selected_entries_with_assets:\n    'Are you sure to delete the selected {count} entries and associated assets?',\n  confirm_deleting_all_entries: 'Are you sure to delete all the entries?',\n  confirm_deleting_all_entries_with_assets:\n    'Are you sure to delete all the entries and associated assets?',\n  processing_file: 'Processing a file. This may take a while.',\n  processing_files: 'Processing files. This may take a while.',\n  uploading_files: 'Uploading Files',\n  confirm_replacing_file: 'Are you sure to replace “{name}” with the following file?',\n  confirm_uploading_file: 'Are you sure to save the following file to the “{folder}” folder?',\n  confirm_uploading_files:\n    'Are you sure to save the following {count} files to the “{folder}” folder?',\n  oversized_files: 'Oversized Files',\n  warning_oversized_file:\n    'This file cannot be uploaded because it exceeds the maximum size of {size}. Please reduce the size or select a different file.',\n  warning_oversized_files:\n    'These files cannot be uploaded because they exceed the maximum size of {size}. Please reduce the sizes or select different files.',\n  file_meta: '{type} · {size}',\n  file_meta_converted_from_x: '(converted from {type})',\n  no_entries_created: 'This collection has no entries yet.',\n  create_new_entry: 'Create New Entry',\n  entry: 'Entry',\n  index_file: 'Index File',\n  no_files_in_collection: 'No files available in this collection.',\n  asset_info: 'Asset Info',\n  select_asset_show_info: 'Select an asset to show the info.',\n  duplicate_entry: 'Duplicate Entry',\n  entry_duplicated: 'Entry has been duplicated. It’s now a new draft.',\n  entry_validation_error: 'One field has an error. Please correct it to save the entry.',\n  entry_validation_errors: '{count} fields have an error. Please correct them to save the entry.',\n  entry_saved: 'Entry has been saved.',\n  entry_saved_and_published: 'Entry has been saved and published.',\n  entry_deleted: 'Entry has been deleted.',\n  entries_deleted: '{count} entries have been deleted.',\n  asset_saved: 'Asset has been saved.',\n  asset_saved_and_published: 'Asset has been saved and published.',\n  assets_saved: '{count} assets have been saved.',\n  assets_saved_and_published: '{count} assets have been saved and published.',\n  asset_url_copied: 'Asset URL has been copied to clipboard.',\n  asset_urls_copied: 'Asset URLs have been copied to clipboard.',\n  asset_path_copied: 'Asset file path has been copied to clipboard.',\n  asset_paths_copied: 'Asset file paths have been copied to clipboard.',\n  asset_data_copied: 'Asset file has been copied to clipboard.',\n  asset_downloaded: 'Asset file has been downloaded.',\n  assets_downloaded: 'Asset files have been downloaded.',\n  asset_moved: 'Asset has been moved.',\n  assets_moved: '{count} assets have been moved.',\n  asset_renamed: 'Asset has been renamed.',\n  assets_renamed: '{count} assets have been renamed.',\n  asset_deleted: 'Asset has been deleted.',\n  assets_deleted: '{count} assets have been deleted.',\n\n  // Content editor\n  content_editor: 'Content Editor',\n  restore_backup_title: 'Restore Draft',\n  restore_backup_description:\n    'This entry has a backup from {datetime}. Do you want to restore the edited draft?',\n  draft_backup_saved: 'Draft backup has been saved.',\n  draft_backup_restored: 'Draft backup has been restored.',\n  draft_backup_deleted: 'Draft backup has been deleted.',\n  cancel_editing: 'Cancel Editing',\n  create_entry_title: 'Creating {name}',\n  create_entry_announcement: 'You’re now creating a new entry in the “{collection}” collection.',\n  edit_entry_title: '{collection} › {entry}',\n  edit_entry_announcement:\n    'You’re now editing the “{entry}” entry in the “{collection}” collection.',\n  edit_file_announcement: 'You’re now editing the “{file}” file in the “{collection}” collection.',\n  edit_singleton_announcement: 'You’re now editing the “{file}” file.',\n  save_and_publish: 'Save and Publish',\n  save_without_publishing: 'Save without Publishing',\n  show_editor_options: 'Show Editor Options',\n  editor_options: 'Editor Options',\n  show_preview: 'Show Preview',\n  sync_scrolling: 'Sync Scrolling',\n  switch_locale: 'Switch Locale',\n  locale_content_disabled_short: '(disabled)',\n  locale_content_error_short: '(error)',\n  edit: 'Edit',\n  preview: 'Preview',\n  edit_x_locale: 'Edit {locale} Content',\n  preview_x_locale: 'Preview {locale} Content',\n  content_preview: 'Content Preview',\n  show_content_options_x_locale: 'Show {locale} Content Options',\n  content_options_x_locale: '{locale} Content Options',\n  x_field: '“{field}” Field',\n  show_field_options: 'Show Field Options',\n  field_options: 'Field Options',\n  unsupported_widget_x: 'Unsupported widget: {name}',\n  enable_x_locale: 'Enable {locale}',\n  reenable_x_locale: 'Reenable {locale}',\n  disable_x_locale: 'Disable {locale}',\n  locale_x_has_been_disabled: 'The {locale} content has been disabled.',\n  locale_x_now_disabled:\n    'The {locale} content is now disabled. It will be deleted when you save the entry.',\n  view_in_repository: 'View in Repository',\n  view_on_x: 'View on {service}',\n  view_on_live_site: 'View on Live Site',\n  copy_from: 'Copy from…',\n  copy_from_x: 'Copy from {locale}',\n  translation_options: 'Translation Options',\n  translate: 'Translate',\n  translate_field: 'Translate Field',\n  translate_fields: 'Translate Fields',\n  translate_from: 'Translate from…',\n  translate_from_x: 'Translate from {locale}',\n  revert_changes: 'Revert Changes',\n  revert_all_changes: 'Revert All Changes',\n  edit_slug: 'Edit Slug',\n  edit_slug_warning:\n    'Changing the slug may break internal and external links to the entry. Currently, Sveltia CMS does not update references created with the Relation widget, so you’ll need to manually update such references along with other links.',\n  edit_slug_error: {\n    empty: 'The slug cannot be empty.',\n    duplicate: 'This slug is used for another entry.',\n  },\n  required: 'Required',\n  editor: {\n    translation: {\n      none: 'Nothing has been translated.',\n      started: 'Translating…',\n      error: 'There was an error while translating.',\n      complete: {\n        one: 'Translated the field from {source}.',\n        many: 'Translated {count} fields from {source}.',\n      },\n    },\n    copy: {\n      none: 'Nothing has been copied.',\n      complete: {\n        one: 'Copied the field from {source}.',\n        many: 'Copied {count} fields from {source}.',\n      },\n    },\n  },\n  validation: {\n    value_missing: 'This field is required.',\n    range_underflow: {\n      number: 'Value must be greater than or equal to {min}.',\n      select_many: 'You have to select at least {min} items.',\n      select_one: 'You have to select at least {min} item.',\n      add_many: 'You have to add at least {min} items.',\n      add_one: 'You have to add at least {min} item.',\n    },\n    range_overflow: {\n      number: 'Value must be less than or equal to {max}.',\n      select_many: 'You cannot select more than {max} items.',\n      select_one: 'You cannot select more than {max} item.',\n      add_many: 'You cannot add more than {max} items.',\n      add_one: 'You cannot add more than {max} item.',\n    },\n    too_short: {\n      one: 'You must enter at least {min} character.',\n      many: 'You must enter at least {min} characters.',\n    },\n    too_long: {\n      one: 'You cannot enter more than {max} character.',\n      many: 'You cannot enter more than {max} characters.',\n    },\n    type_mismatch: {\n      number: 'Please enter a number.',\n      email: 'Please enter a valid email.',\n      url: 'Please enter a valid URL.',\n    },\n  },\n  saving_entry: {\n    error: {\n      title: 'Error',\n      description: 'There was an error while saving the entry. Please try again later.',\n    },\n  },\n\n  // Media details\n  viewing_x_asset_details: 'You’re viewing the details of the “{name}” asset.',\n  asset_editor: 'Asset Editor',\n  preview_unavailable: 'Preview Unavailable.',\n  public_url: 'Public URL',\n  public_urls: 'Public URLs',\n  file_path: 'File Path',\n  file_paths: 'File Paths',\n  file_data: 'File Data',\n  kind: 'Kind',\n  size: 'Size',\n  dimensions: 'Dimensions',\n  duration: 'Duration',\n  used_in: 'Used in',\n  created_date: 'Created Date',\n  location: 'Location',\n  map_lat_lng: 'Map showing latitude {latitude}, longitude {longitude}',\n\n  // Widgets\n  select_file: 'Select File',\n  select_image: 'Select Image',\n  replace_file: 'Replace File',\n  replace_image: 'Replace Image',\n  remove_file: 'Remove File',\n  remove_image: 'Remove Image',\n  remove_this_item: 'Remove This Item',\n  move_up: 'Move Up',\n  move_down: 'Move Down',\n  add_x: 'Add {name}',\n  add_item_above: 'Add Item Above',\n  add_item_below: 'Add Item Below',\n  select_list_type: 'Select List Type',\n  opacity: 'Opacity',\n  unselected_option: '(None)',\n  assets_dialog: {\n    title: {\n      file: 'Select File',\n      image: 'Select Image',\n    },\n    search_for_file: 'Search for Files',\n    search_for_image: 'Search for Images',\n    locations: 'Locations',\n    folder: {\n      field: 'Field Assets',\n      entry: 'Entry Assets',\n      file: 'File Assets',\n      collection: 'Collection Assets',\n      global: 'Global Assets',\n    },\n    error: {\n      invalid_key: 'Your API Key is invalid or expired. Please double check and try again.',\n      search_fetch_failed: 'There was an error while searching assets. Please try again later.',\n      image_fetch_failed:\n        'There was an error while downloading the selected asset. Please try again later.',\n    },\n    available_images: 'Available Images',\n    enter_url: 'Enter URL',\n    enter_file_url: 'Enter URL of the file:',\n    enter_image_url: 'Enter URL of the image:',\n    large_file: {\n      title: 'Large File',\n    },\n    photo_credit: {\n      title: 'Photo Credit',\n      description: 'Use the following credit if possible:',\n    },\n    unsaved: 'Unsaved',\n  },\n  character_counter: {\n    min_max: {\n      one: '{count} character entered. Minimum: {min}. Maximum: {max}.',\n      many: '{count} characters entered. Minimum: {min}. Maximum: {max}.',\n    },\n    min: {\n      one: '{count} character entered. Minimum: {min}.',\n      many: '{count} characters entered. Minimum: {min}.',\n    },\n    max: {\n      one: '{count} character entered. Maximum: {max}.',\n      many: '{count} characters entered. Maximum: {max}.',\n    },\n  },\n  youtube_video_player: 'YouTube video player',\n  today: 'Today',\n  now: 'Now',\n  editor_components: {\n    image: 'Image',\n    src: 'Source',\n    alt: 'Alt Text',\n    title: 'Title',\n    link: 'Link',\n  },\n  key_value: {\n    key: 'Key',\n    value: 'Value',\n    action: 'Action',\n    empty_key: 'Key is required.',\n    duplicate_key: 'Key must be unique.',\n  },\n  find_place: 'Find a Place',\n  use_your_location: 'Use Your Location',\n  geolocation_error_title: 'Geolocation Error',\n  geolocation_error_body: 'There was an error while retrieving your location.',\n  geolocation_unsupported: 'Geolocation API is not supported by this browser.',\n\n  // Content preview\n  boolean: {\n    true: 'Yes',\n    false: 'No',\n  },\n\n  // Integrations\n  cloud_storage: {\n    invalid: 'The service is not configured properly.',\n    auth: {\n      initial: 'Sign into {service} to insert media on the storage to entry fields.',\n      requested: 'Signing in…',\n      error: 'User name or password is incorrect. Please double check and try again.',\n    },\n  },\n\n  // Configuration\n  config: {\n    error: {\n      no_secure_context: 'Sveltia CMS only works with HTTPS or localhost URLs.',\n      fetch_failed: 'The configuration file could not be retrieved.',\n      fetch_failed_not_ok: 'HTTP response returned with status {status}.',\n      parse_failed: 'The configuration file could not be parsed.',\n      parse_failed_invalid_object: 'The configuration file is not a valid JavaScript object.',\n      parse_failed_unsupported_type:\n        'The configuration file is not a valid file type. Only YAML and JSON are supported.',\n      no_collection: 'Collections are not defined in the configuration file.',\n      missing_backend: 'The backend is not defined in the configuration file.',\n      missing_backend_name: 'The backend name is not defined in the configuration file.',\n      unsupported_backend: 'The configured “{name}” backend is not supported.',\n      missing_repository: 'The repository is not defined in the configuration file.',\n      invalid_repository:\n        'The configured repository is invalid. It must be in “owner/repo” format.',\n      oauth_implicit_flow: 'The configured authentication method (implicit flow) is not supported.',\n      oauth_no_app_id: 'OAuth application ID is not defined in the configuration file.',\n      missing_media_folder: 'The media folder is not defined in the configuration file.',\n      invalid_media_folder: 'The configured media folder is invalid. It must be a string.',\n      invalid_public_folder: 'The configured public folder is invalid. It must be a string.',\n      public_folder_relative_path:\n        'The configured public folder is invalid. It must be an absolute path starting with “/”.',\n      public_folder_absolute_url: 'An absolute URL for the public folder option is not supported.',\n      unexpected: 'There was an unexpected error while validating the configuration file.',\n      try_again: 'Please solve the issue and try again.',\n    },\n  },\n\n  // Backends\n  local_backend: {\n    unsupported_browser:\n      'Local development is not supported in your browser. Please use Chrome or Edge instead.',\n    disabled: 'Local development is disabled in your browser. <a>Here’s how to enable it</a>.',\n  },\n\n  // Editorial Workflow\n  status: {\n    drafts: 'Drafts',\n    in_review: 'In Review',\n    ready: 'Ready',\n  },\n\n  // Settings\n  categories: 'Categories',\n  prefs: {\n    changes: {\n      api_key_saved: 'API key has been saved.',\n      api_key_removed: 'API key has been removed.',\n    },\n    error: {\n      permission_denied:\n        'Browser storage (Cookie) access has been denied. Please check the permission and try again.',\n    },\n    appearance: {\n      title: 'Appearance',\n      theme: 'Theme',\n      select_theme: 'Select Theme',\n    },\n    theme: {\n      auto: 'Auto',\n      dark: 'Dark',\n      light: 'Light',\n    },\n    language: {\n      title: 'Language',\n      ui_language: {\n        title: 'User Interface Language',\n        select_language: 'Select Language',\n      },\n    },\n    contents: {\n      title: 'Contents',\n      editor: {\n        title: 'Editor',\n        use_draft_backup: {\n          switch_label: 'Automatically back up entry drafts',\n        },\n        close_on_save: {\n          switch_label: 'Close the editor after saving a draft',\n        },\n        close_with_escape: {\n          switch_label: 'Close the editor with the Escape key',\n        },\n      },\n    },\n    i18n: {\n      title: 'Internationalization',\n      default_translator: {\n        title: 'Default Translation Service',\n        select_service: 'Select Service',\n      },\n      translator: {\n        field_label: '{service} Key',\n        description:\n          'Sign up for <a {homeHref}>{service}</a> and enter <a {apiKeyHref}>your API Key</a> here to enable quick translation of text entry fields.',\n      },\n    },\n    media: {\n      title: 'Media',\n      stock_photos: {\n        title: '{service} Free Images',\n        field_label: '{service} API Key',\n        description:\n          'Sign up for <a {homeHref}>{service} API</a> and enter <a {apiKeyHref}>your API Key</a> here to insert free stock photos to image entry fields.',\n        credit: 'Photos provided by {service}',\n        providers_disabled: 'Stock asset providers are disabled by the administrator.',\n      },\n    },\n    accessibility: {\n      title: 'Accessibility',\n      underline_links: {\n        title: 'Underline Links',\n        description: 'Show underline for links in the entry preview and user interface labels.',\n        switch_label: 'Always Underline Links',\n      },\n    },\n    advanced: {\n      title: 'Advanced',\n      beta: {\n        title: 'Beta Features',\n        description: 'Enable some beta features that may be unstable or unlocalized.',\n        switch_label: 'Join Beta Program',\n      },\n      developer_mode: {\n        title: 'Developer Mode',\n        description:\n          'Enable some developer-oriented features, including detailed console logs and native context menus.',\n        switch_label: 'Enable Developer Mode',\n      },\n      deploy_hook: {\n        title: 'Deploy Hook',\n        description:\n          'Enter a webhook URL to be called when you manually trigger a deployment by selecting Publish Changes. This can be left blank if you’re using GitHub Actions.',\n        field_label: 'Deploy Hook URL',\n        url_saved: 'Webhook URL has been saved.',\n        url_removed: 'Webhook URL has been removed.',\n      },\n    },\n  },\n\n  // Keyboard shortcuts\n  keyboard_shortcuts_: {\n    view_content_library: 'View Content Library',\n    view_asset_library: 'View Asset Library',\n    search: 'Search for entries and assets',\n    create_entry: 'Create a new entry',\n    save_entry: 'Save an entry',\n    cancel_editing: 'Cancel entry editing',\n  },\n\n  // File types\n  file_type_labels: {\n    avif: 'AVIF image',\n    bmp: 'Bitmap image',\n    gif: 'GIF image',\n    ico: 'Icon',\n    jpeg: 'JPEG image',\n    jpg: 'JPEG image',\n    png: 'PNG image',\n    svg: 'SVG image',\n    tif: 'TIFF image',\n    tiff: 'TIFF image',\n    webp: 'WebP image',\n    avi: 'AVI video',\n    m4v: 'MP4 video',\n    mov: 'QuickTime video',\n    mp4: 'MP4 video',\n    mpeg: 'MPEG video',\n    mpg: 'MPEG video',\n    ogg: 'Ogg video',\n    ogv: 'Ogg video',\n    ts: 'MPEG video',\n    webm: 'WebM video',\n    '3gp': '3GPP video',\n    '3g2': '3GPP2 video',\n    aac: 'AAC audio',\n    mid: 'MIDI',\n    midi: 'MIDI',\n    m4a: 'MP4 audio',\n    mp3: 'MP3 audio',\n    oga: 'Ogg audio',\n    opus: 'OPUS audio',\n    wav: 'WAV audio',\n    weba: 'WebM audio',\n    csv: 'CSV spreadsheet',\n    doc: 'Word document',\n    docx: 'Word document',\n    odp: 'OpenDocument presentation',\n    ods: 'OpenDocument spreadsheet',\n    odt: 'OpenDocument text',\n    pdf: 'PDF document',\n    ppt: 'PowerPoint presentation',\n    pptx: 'PowerPoint presentation',\n    rtf: 'Rich text document',\n    xls: 'Excel spreadsheet',\n    xlsx: 'Excel spreadsheet',\n    html: 'HTML text',\n    js: 'JavaScript',\n    json: 'JSON text',\n    md: 'Markdown text',\n    toml: 'TOML text',\n    yaml: 'YAML text',\n    yml: 'YAML text',\n  },\n\n  // file size units\n  file_size_units: {\n    b: '{size} bytes',\n    kb: '{size} KB',\n    mb: '{size} MB',\n    gb: '{size} GB',\n    tb: '{size} TB',\n  },\n};\n","/**\n * IMPORTANT: These strings are not ready for localization. DO NOT TRANSLATE THIS FILE.\n * @see https://github.com/sveltia/sveltia-cms/blob/main/src/lib/locales/README.md\n */\nexport const strings = {\n  // Pages & Navigation\n  collections: 'コレクション',\n  contents: 'コンテンツ',\n  entries: 'エントリー',\n  files: 'ファイル',\n  assets: 'アセット',\n  media: 'メディア',\n  workflow: 'ワークフロー',\n  editorial_workflow: '編集ワークフロー',\n  menu: 'メニュー',\n\n  // Account\n  user_name: 'ユーザー名',\n  password: 'パスワード',\n  sign_in: 'ログイン',\n  sign_in_with_mobile: 'モバイルでログイン',\n  sign_in_with_mobile_instruction:\n    '以下の QR コードを携帯電話かタブレットでスキャンすると、パスワードなしでログインできます。ユーザー設定は自動的にコピーされます。',\n  signed_in_as_x: '{name} としてログイン中',\n  working_with_local_repo: 'ローカルレポジトリで作業中',\n  working_with_test_repo: 'テストレポジトリで作業中',\n  sign_out: 'ログアウト',\n\n  // Common terms\n  create: '新規作成',\n  select: '選択',\n  select_all: 'すべて選択',\n  upload: 'アップロード',\n  copy: 'コピー',\n  download: 'ダウンロード',\n  duplicate: '複製',\n  delete: '削除',\n  save: '保存',\n  saving: '保存中…',\n  rename: '名前を変更',\n  update: '更新',\n  replace: '差し替え',\n  add: '追加',\n  remove: '削除',\n  remove_x: '{name} を削除',\n  clear: 'クリア',\n  expand: '広げる',\n  expand_all: 'すべて広げる',\n  collapse: '折り畳む',\n  collapse_all: 'すべて折り畳む',\n  insert: '挿入',\n  restore: '復元',\n  discard: '破棄',\n  searching: '検索中…',\n  no_results: '結果が見つかりませんでした。',\n  global: 'グローバル',\n  primary: 'プライマリー',\n  secondary: 'セカンダリー',\n  collection: 'コレクション',\n  folder: 'フォルダー',\n  api_key: 'API キー',\n  details: '詳細',\n  back: '戻る',\n  loading: '読み込み中…',\n  later: '後で',\n\n  // Common errors\n  clipboard_error: 'データのコピー中に問題が発生しました。',\n\n  // Entrance\n  welcome_to_sveltia_cms: 'Sveltia CMS へようこそ',\n  loading_site_config: 'サイト設定を読み込んでいます…',\n  loading_site_data: 'サイトデータを読み込んでいます…',\n  loading_site_data_error: 'サイトデータの読み込み中にエラーが発生しました。',\n  sign_in_with_x: '{service} でログイン',\n  use_regular_authentication_flow: '通常の認証フローを使用',\n  use_personal_access_token: '個人用アクセストークンを使用',\n  sign_in_using_pat_title: '個人用アクセストークンでログイン',\n  sign_in_using_pat_description:\n    '以下にトークンを入力してください。レポジトリコンテンツへの読み取り・書き込みアクセスが必要です。',\n  personal_access_token: '個人用アクセストークン',\n  authorizing: '認証中…',\n  signing_in: 'ログイン中…',\n  work_with_local_repo: 'ローカルレポジトリで作業',\n  work_with_local_repo_description:\n    'ボタンをクリックして「{repo}」レポジトリのルートディレクトリを選択してください。',\n  work_with_local_repo_description_no_repo:\n    'ボタンをクリックして Git レポジトリのルートディレクトリを選択してください。',\n  work_with_test_repo: 'テストレポジトリで作業',\n  sign_in_error: {\n    not_project_root:\n      '選択されたフォルダーはレポジトリのルートディレクトリではありません。再度お試しください。',\n    picker_dismissed: 'レポジトリのルートディレクトリを選択できませんでした。再度お試しください。',\n    authentication_aborted: '認証が中断されました。再度お試しください。',\n    invalid_token: '入力されたトークンが無効です。確認して再度お試しください。',\n    // Errors defined in Sveltia CMS Authenticator\n    // https://github.com/sveltia/sveltia-cms-auth/blob/main/src/index.js\n    UNSUPPORTED_BACKEND: 'この認証アプリはお使いの Git バックエンドに対応していません。',\n    UNSUPPORTED_DOMAIN: 'この認証アプリではお使いのドメインの使用は許可されていません。',\n    MISCONFIGURED_CLIENT: 'OAuth アプリのクライアント ID またはシークレットが設定されていません。',\n    AUTH_CODE_REQUEST_FAILED: '認証コードを取得できませんでした。後で再度お試しください。',\n    CSRF_DETECTED: 'CSRF 攻撃の可能性が検出されたため、認証フローは中断されました。',\n    TOKEN_REQUEST_FAILED: 'アクセストークンを要求できませんでした。後で再度お試しください。',\n    TOKEN_REFRESH_FAILED: 'アクセストークンの更新に失敗しました。後で再度お試しください。',\n    MALFORMED_RESPONSE: 'サーバーから不正なデータが返されました。後で再度お試しください。',\n  },\n  backend_unsupported_version:\n    '{name} バックエンドには {name} {version} 以降のバージョンが必要です。',\n  repository_no_access: 'あなたには「{repo}」レポジトリへのアクセス権がありません。',\n  repository_not_found: '「{repo}」レポジトリは存在しません。',\n  repository_empty: '「{repo}」レポジトリにはブランチがありません。',\n  branch_not_found: '「{repo}」レポジトリに「{branch}」ブランチは存在しません。',\n  unexpected_error: '予期せぬエラー',\n\n  // Parser errors\n  entry_parse_error:\n    'エントリーファイルの読み込み中にエラーが発生しました。詳しくはブラウザーのコンソールを確認してください。',\n  entry_parse_errors:\n    'エントリーファイルの読み込み中にエラーが発生しました。詳しくはブラウザーのコンソールを確認してください。',\n\n  // Global toolbar\n  visit_live_site: '管理対象サイトを開く',\n  switch_page: 'ページを切り替え',\n  search_placeholder_entries: 'エントリーを検索…',\n  search_placeholder_assets: 'アセットを検索…',\n  search_placeholder_all: 'エントリーとアセットを検索…',\n  create_entry_or_assets: 'エントリーまたはアセットを作成',\n  publish_changes: '変更を公開',\n  publishing_changes: '変更を公開しています…',\n  publishing_changes_failed: '変更を公開できませんでした。後で再度お試しください。',\n  show_notifications: '通知を表示',\n  notifications: '通知',\n  show_account_menu: 'アカウントメニューを表示',\n  account: 'アカウント',\n  live_site: '管理対象サイト',\n  git_repository: 'Git レポジトリ',\n  settings: '設定',\n  site_config: 'サイト設定',\n  show_help_menu: 'ヘルプメニューを表示',\n  help: 'ヘルプ',\n  keyboard_shortcuts: 'キーボードショートカット',\n  documentation: 'ドキュメンテーション',\n  release_notes: 'リリースノート',\n  version_x: 'バージョン {version}',\n  report_issue: '問題を報告',\n  share_feedback: 'フィードバックを共有',\n  get_help: 'サポート',\n  join_discord: 'Discord チャンネルに参加',\n\n  // Onboarding\n  mobile_promo_title: 'Sveltia CMS がモバイルに対応しました！',\n  mobile_promo_button: '試してみる',\n\n  // Update notification\n  update_available: 'Sveltia CMS の最新版が利用可能です。',\n  update_now: '今すぐ更新',\n\n  // Backend status indicator\n  backend_status: {\n    minor_incident:\n      '{service} で軽微な障害が発生しています。ワークフローに潜在的な影響が及ぶ可能性があります。',\n    major_incident:\n      '{service} で重大な障害が発生しています。状況が改善されるまで待った方が良いかもしれません。',\n  },\n\n  // Library\n  content_library: 'コンテンツライブラリ',\n  asset_library: 'アセットライブラリ',\n  asset_location: {\n    repository: 'あなたのサイト',\n    external: '外部の場所',\n    stock_photos: 'ストックフォト',\n  },\n  collection_assets: 'コレクションアセット',\n  entry_list: 'エントリーリスト',\n  file_list: 'ファイルリスト',\n  asset_list: 'アセットリスト',\n  x_collection: '「{collection}」コレクション',\n  x_asset_folder: '「{folder}」アセットフォルダー',\n  viewing_collection_list: 'コレクションリストを表示しています。',\n  viewing_asset_folder_list: 'アセットフォルダーリストを表示しています。',\n  viewing_x_collection_many_entries:\n    '「{collection}」コレクションを表示しています。ここには {count} 個のエントリーがあります。',\n  viewing_x_collection_one_entry:\n    '「{collection}」コレクションを表示しています。ここにはひとつのエントリーがあります。',\n  viewing_x_collection_no_entries:\n    '「{collection}」コレクションを表示しています。ここにはまだエントリーがありません。',\n  viewing_x_asset_folder_many_assets:\n    '「{folder}」アセットフォルダーを表示しています。ここには {count} 個のアセットがあります。',\n  viewing_x_asset_folder_one_asset:\n    '「{folder}」アセットフォルダーを表示しています。ここにはひとつのアセットがあります。',\n  viewing_x_asset_folder_no_assets:\n    '「{folder}」アセットフォルダーを表示しています。ここにはまだアセットがありません。',\n  singleton_selected_announcement: '「{file}」ファイルを編集するには Enter キーを押してください。',\n  collection_not_found: 'コレクションが見つかりませんでした',\n  file_not_found: 'ファイルが見つかりませんでした',\n  x_of_x_selected: '{total} 個のうち {selected} 個を選択中',\n  switch_view: 'ビューを切り替え',\n  list_view: 'リストビュー',\n  grid_view: 'グリッドビュー',\n  switch_to_list_view: 'リストビューに切り替え',\n  switch_to_grid_view: 'グリッドビューに切り替え',\n  sort: '並び替え',\n  sorting_options: '並べ替えオプション',\n  sort_keys: {\n    none: 'なし',\n    name: '名前',\n    slug: 'スラッグ',\n    commit_author: '更新者',\n    commit_date: '更新日時',\n  },\n  ascending: '{label} (A–Z)',\n  ascending_date: '{label} (古い順)',\n  descending: '{label} (Z–A)',\n  descending_date: '{label} (新しい順)',\n  filter: '絞り込み',\n  filtering_options: '絞り込みオプション',\n  group: 'グループ化', // Verb\n  grouping_options: 'グループ化オプション',\n  type: '種類',\n  all: 'すべて',\n  image: '画像',\n  video: '動画',\n  audio: '音声',\n  document: '書類',\n  other: 'その他',\n  show_assets: 'アセットを表示',\n  hide_assets: 'アセットを隠す',\n  show_info: '情報を表示',\n  hide_info: '情報を隠す',\n  all_assets: 'すべてのアセット',\n  global_assets: 'グローバルアセット',\n  creating_entries_disabled_by_admin:\n    'このコレクションへの新しいエントリーの作成は、管理者によって無効化されています。',\n  creating_entries_disabled_by_limit:\n    'このコレクションは最大の {limit} エントリーに達したため、新しいエントリーを作成することはできません。',\n  back_to_collection: 'コレクションへ戻る',\n  collection_list: 'コレクションリスト',\n  back_to_collection_list: 'コレクションリストへ戻る',\n  asset_folder_list: 'アセットフォルダーリスト',\n  back_to_asset_folder_list: 'アセットフォルダーリストへ戻る',\n  search_results: '検索結果',\n  search_results_for_x: '「{terms}」の検索結果',\n  viewing_entry_search_results:\n    '「{terms}」の検索結果を表示しています。{entries} が見つかりました。',\n  viewing_asset_search_results:\n    '「{terms}」の検索結果を表示しています。{assets} が見つかりました。',\n  many_entries: '{count} 個のエントリー',\n  one_entry: '1 個のエントリー',\n  no_entries: '0 個のエントリー',\n  many_assets: '{count} 個のアセット',\n  one_asset: '1 個のアセット',\n  no_assets: '0 個のアセット',\n  no_files_found: 'ファイルは見つかりませんでした。',\n  no_entries_found: 'エントリーは見つかりませんでした。',\n  upload_assets: '新しいアセットをアップロード',\n  edit_options: '編集オプション',\n  show_edit_options: '編集オプションを表示',\n  edit_asset: 'アセットを編集',\n  edit_x: '{name} を編集',\n  wrap_long_lines: '長い行を折り返す',\n  rename_asset: 'アセットの名前を変更',\n  rename_x: '{name} の名前を変更',\n  enter_new_name_for_asset: '新しい名前を以下に入力してください。',\n  enter_new_name_for_asset_with_one_entry:\n    '新しい名前を以下に入力してください。このアセットを使用している 1 個のエントリーも更新されます。',\n  enter_new_name_for_asset_with_many_entries:\n    '新しい名前を以下に入力してください。このアセットを使用している {count} 個のエントリーも更新されます。',\n  enter_new_name_for_asset_error: {\n    empty: 'ファイル名を空白にすることはできません。',\n    character: 'ファイル名に特別な文字を含めることはできません。',\n    duplicate: 'このファイル名は他のアセットに使われています。',\n  },\n  replace_asset: 'アセットを差し替え',\n  replace_x: '{name} を差し替え',\n  tap_to_browse: 'タップして参照…',\n  drop_file_or_click_to_browse: 'ここにファイルをドロップするかクリックして参照…',\n  drop_files_or_click_to_browse: 'ここにファイルをドロップするかクリックして参照…',\n  drop_image_file_or_click_to_browse: 'ここに画像ファイルをドロップするかクリックして参照…',\n  drop_image_files_or_click_to_browse: 'ここに画像ファイルをドロップするかクリックして参照…',\n  drop_file_here: 'ここにファイルをドロップ',\n  drop_files_here: 'ここにファイルをドロップ',\n  unsupported_file_type: '非対応ファイル形式',\n  dropped_file_type_mismatch:\n    'ドロップされたファイルは {type} 形式ではありません。再度お試しください。',\n  dropped_image_type_mismatch:\n    'ドロップされたファイルはサポートされていません。AVIF、GIF、JPEG、PNG、WebP または SVG 形式の画像のみが受け入れられます。再度お試しください。',\n  choose_file: 'ファイルを選択',\n  choose_files: 'ファイルを選択',\n  delete_asset: 'アセットを削除',\n  delete_assets: 'アセットを削除',\n  delete_selected_asset: '選択されたアセットを削除',\n  delete_selected_assets: '選択されたアセットを削除',\n  confirm_deleting_this_asset: 'このアセットを削除してもよろしいですか？',\n  confirm_deleting_selected_asset: '選択されたファイルを削除してもよろしいですか？',\n  confirm_deleting_selected_assets: '選択された {count} 個のファイルを削除してもよろしいですか？',\n  confirm_deleting_all_assets: 'すべてのアセットを削除してもよろしいですか？',\n  delete_entry: 'エントリーを削除',\n  delete_entries: 'エントリーを削除',\n  delete_selected_entry: '選択されたエントリーを削除',\n  delete_selected_entries: '選択されたエントリーを削除',\n  confirm_deleting_this_entry: 'このエントリーを削除してもよろしいですか？',\n  confirm_deleting_this_entry_with_assets:\n    'このエントリーと関連アセットを削除してもよろしいですか？',\n  confirm_deleting_selected_entry: '選択されたエントリーを削除してもよろしいですか？',\n  confirm_deleting_selected_entry_with_assets:\n    '選択されたエントリーと関連アセットを削除してもよろしいですか？',\n  confirm_deleting_selected_entries:\n    '選択された {count} 個のエントリーを削除してもよろしいですか？',\n  confirm_deleting_selected_entries_with_assets:\n    '選択された {count} 個のエントリーと関連アセットを削除してもよろしいですか？',\n  confirm_deleting_all_entries: 'すべてのエントリーを削除してもよろしいですか？',\n  confirm_deleting_all_entries_with_assets:\n    'すべてのエントリーと関連アセットを削除してもよろしいですか？',\n  processing_file: 'ファイルを処理しています。これには時間がかかる場合があります。',\n  processing_files: 'ファイルを処理しています。これには時間がかかる場合があります。',\n  uploading_files: 'アップロード対象ファイル',\n  confirm_replacing_file: '「{name}」を以下のファイルと差し替えてもよろしいですか？',\n  confirm_uploading_file: '以下のファイルを「{folder}」フォルダーに保存してもよろしいですか？',\n  confirm_uploading_files:\n    '以下の {count} 個のファイルを「{folder}」フォルダーに保存してもよろしいですか？',\n  oversized_files: 'サイズ超過ファイル',\n  warning_oversized_file:\n    'このファイルは最大サイズ {size} を超えているため、アップロードできません。サイズを縮小するか、他のファイルを選んでください。',\n  warning_oversized_files:\n    'これらのファイルは最大サイズ {size} を超えているため、アップロードできません。サイズを縮小するか、他のファイルを選んでください',\n  file_meta: '{type} · {size}',\n  file_meta_converted_from_x: '({type} から変換)',\n  no_entries_created: 'このコレクションにはまだエントリーがありません。',\n  create_new_entry: '新しいエントリーを作成',\n  entry: 'エントリー',\n  index_file: 'インデックスファイル',\n  no_files_in_collection: 'このコレクションにはファイルがありません。',\n  asset_info: 'アセット情報',\n  select_asset_show_info: 'アセットを選択すると情報が表示されます。',\n  duplicate_entry: 'エントリーを複製',\n  entry_duplicated: 'エントリーが複製され、新しい下書きとなりました。',\n  entry_validation_error:\n    'ひとつのフィールドにエラーがあります。エントリーを保存するには問題を修正してください。',\n  entry_validation_errors:\n    '{count} 個のフィールドにエラーがあります。エントリーを保存するには問題を修正してください。',\n  entry_saved: 'エントリーが保存されました。',\n  entry_saved_and_published: 'エントリーが保存、公開されました。',\n  entry_deleted: 'エントリーが削除されました。',\n  entries_deleted: '{count} 個のエントリーが削除されました。',\n  asset_saved: 'アセットが保存されました。',\n  asset_saved_and_published: 'アセットが保存、公開されました。',\n  assets_saved: '{count} 個のアセットが保存されました。',\n  assets_saved_and_published: '{count} 個のアセットが保存、公開されました。',\n  asset_url_copied: 'アセット URL がクリップボードにコピーされました。',\n  asset_urls_copied: 'アセット URL がクリップボードにコピーされました。',\n  asset_path_copied: 'アセットファイルパスがクリップボードにコピーされました。',\n  asset_paths_copied: 'アセットファイルパスがクリップボードにコピーされました。',\n  asset_data_copied: 'アセットファイルがクリップボードにコピーされました。',\n  asset_downloaded: 'アセットファイルがダウンロードされました。',\n  assets_downloaded: 'アセットファイルがダウンロードされました。',\n  asset_moved: 'アセットが移動されました。',\n  assets_moved: '{count} 個のアセットが移動されました。',\n  asset_renamed: 'アセットの名前が変更されました。',\n  assets_renamed: '{count} 個のアセットの名前が変更されました。',\n  asset_deleted: 'アセットが削除されました。',\n  assets_deleted: '{count} 個のアセットが削除されました。',\n\n  // Content editor\n  content_editor: 'コンテンツエディター',\n  restore_backup_title: '下書きを復元',\n  restore_backup_description:\n    'このエントリーには {datetime} に保存されたバックアップがあります。その編集済みの下書きを復元しますか？',\n  draft_backup_saved: '下書きのバックアップが保存されました。',\n  draft_backup_restored: '下書きのバックアップが復元されました。',\n  draft_backup_deleted: '下書きのバックアップが削除されました。',\n  cancel_editing: '編集をキャンセル',\n  create_entry_title: '{name} を作成',\n  create_entry_announcement: '「{collection}」コレクションの新しいエントリーを作成しています。',\n  edit_entry_title: '{collection} › {entry}',\n  edit_entry_announcement: '「{collection}」コレクションの「{entry}」エントリーを編集しています。',\n  edit_file_announcement: '「{collection}」コレクションの「{file}」ファイルを編集しています。',\n  edit_singleton_announcement: '「{file}」ファイルを編集しています。',\n  save_and_publish: '保存して公開',\n  save_without_publishing: '公開せずに保存',\n  show_editor_options: 'エディターオプションを表示',\n  editor_options: 'エディターオプション',\n  show_preview: 'プレビューを表示',\n  sync_scrolling: 'スクロールを同期',\n  switch_locale: 'ロケールを切り替え',\n  locale_content_disabled_short: '(無効)',\n  locale_content_error_short: '(エラー)',\n  edit: '編集',\n  preview: 'プレビュー',\n  edit_x_locale: '{locale} コンテンツを編集',\n  preview_x_locale: '{locale} コンテンツをプレビュー',\n  content_preview: 'コンテンツプレビュー',\n  show_content_options_x_locale: '{locale} コンテンツのオプションを表示',\n  content_options_x_locale: '{locale} コンテンツのオプション',\n  x_field: '「{field}」フィールド',\n  show_field_options: 'フィールドオプションを表示',\n  field_options: 'フィールドオプション',\n  unsupported_widget_x: '非対応ウィジェット: {name}',\n  enable_x_locale: '{locale} を有効化',\n  reenable_x_locale: '{locale} を再度有効化',\n  disable_x_locale: '{locale} を無効化',\n  locale_x_has_been_disabled: '{locale} コンテンツは無効化されています。',\n  locale_x_now_disabled:\n    '{locale} コンテンツは無効化されました。エントリーを保存する際に削除されます。',\n  view_in_repository: 'レポジトリ内で見る',\n  view_on_x: '{service} で見る',\n  view_on_live_site: '管理対象サイトで見る',\n  copy_from: '他の言語からコピー…',\n  copy_from_x: '{locale} からコピー',\n  translation_options: '翻訳オプション',\n  translate: '翻訳',\n  translate_field: 'フィールドを翻訳',\n  translate_fields: 'フィールドを翻訳',\n  translate_from: '他の言語から翻訳…',\n  translate_from_x: '{locale} から翻訳',\n  revert_changes: '変更を取り消す',\n  revert_all_changes: 'すべての変更を取り消す',\n  edit_slug: 'スラッグを編集',\n  edit_slug_warning:\n    'スラッグを変更すると、エントリーへの内部・外部リンクが壊れる可能性があります。現在のところ、Sveltia CMS は Relation ウィジェットで作成された参照を更新しないため、そのような参照は他のリンクとともに手動で更新する必要があります。',\n  edit_slug_error: {\n    empty: 'スラッグは空白にはできません。',\n    duplicate: 'このスラッグは他のエントリーに使われています。',\n  },\n  required: '必須',\n  editor: {\n    translation: {\n      none: '翻訳されたフィールドはありません。',\n      started: '翻訳中…',\n      error: '翻訳中に問題が発生しました。',\n      complete: {\n        one: '{source} からフィールドを翻訳しました。',\n        many: '{source} から {count} 個のフィールドを翻訳しました。',\n      },\n    },\n    copy: {\n      none: 'コピーされたフィールドはありません。',\n      complete: {\n        one: '{source} からフィールドをコピーしました。',\n        many: '{source} から {count} 個のフィールドをコピーしました。',\n      },\n    },\n  },\n  validation: {\n    value_missing: 'この項目は必須です。',\n    range_underflow: {\n      select_many: '少なくとも {min} 個の項目を選択してください。',\n      select_one: '少なくとも {min} 個の項目を選択してください。',\n      add_many: '少なくとも {min} 個の項目を追加してください。',\n      add_one: '少なくとも {min} 個の項目を追加してください。',\n    },\n    range_overflow: {\n      select_many: '選択できるのは最大で {max} 項目です。',\n      select_one: '選択できるのは最大で {max} 項目です。',\n      add_many: '追加できるのは最大で {max} 項目です。',\n      add_one: '追加できるのは最大で {max} 項目です。',\n    },\n    too_short: {\n      one: '少なくとも {min} 文字は入力してください。',\n      many: '少なくとも {min} 文字は入力してください。',\n    },\n    too_long: {\n      one: '{max} 文字を超える入力はできません。',\n      many: '{max} 文字を超える入力はできません。',\n    },\n    type_mismatch: {\n      email: '正しいメールアドレスを入力してください。',\n      url: '正しい URL を入力してください。',\n    },\n  },\n  saving_entry: {\n    error: {\n      title: 'エラー',\n      description: 'エントリーを保存中に問題が発生しました。後で再度お試しください。',\n    },\n  },\n  find_place: '場所を検索',\n  use_your_location: '現在地を使用',\n  geolocation_error_title: '位置情報エラー',\n  geolocation_error_body: 'あなたの現在地を取得できませんでした。',\n  geolocation_unsupported: 'お使いのブラウザーは位置情報 API をサポートしていません。',\n\n  // Media details\n  viewing_x_asset_details: '「{name}」アセットの詳細を表示しています。',\n  asset_editor: 'アセットエディター',\n  preview_unavailable: 'プレビューは表示できません',\n  public_url: '公開 URL',\n  public_urls: '公開 URL',\n  file_path: 'ファイルパス',\n  file_paths: 'ファイルパス',\n  file_data: 'ファイルデータ',\n  kind: '種類',\n  size: 'サイズ',\n  dimensions: '大きさ',\n  duration: '再生時間',\n  used_in: '使われているエントリー',\n  created_date: '作成日時',\n  location: '場所',\n  map_lat_lng: '緯度 {latitude}、経度 {longitude} の地図',\n\n  // Widgets\n  select_file: 'ファイルを選択',\n  select_image: '画像を選択',\n  replace_file: 'ファイルを差し替え',\n  replace_image: '画像を差し替え',\n  remove_file: 'ファイルを削除',\n  remove_image: '画像を削除',\n  remove_this_item: 'このアイテムを削除',\n  move_up: '上へ移動',\n  move_down: '下へ移動',\n  add_x: '{name} を追加',\n  add_item_above: '上にアイテムを追加',\n  add_item_below: '下にアイテムを追加',\n  select_list_type: 'リストタイプを選択',\n  opacity: '透明度',\n  unselected_option: '(なし)',\n  assets_dialog: {\n    title: {\n      file: 'ファイルを選択',\n      image: '画像を選択',\n    },\n    search_for_file: 'ファイルを検索',\n    search_for_image: '画像を検索',\n    locations: '場所',\n    folder: {\n      field: 'フィールドアセット',\n      entry: 'エントリーアセット',\n      file: 'ファイルアセット',\n      collection: 'コレクションアセット',\n      global: 'グローバルアセット',\n    },\n    error: {\n      invalid_key: 'あなたの API キーは正しくないか期限切れです。確認の上、再度お試しください。',\n      search_fetch_failed: 'アセットを検索中に問題が発生しました。後で再度お試しください。',\n      image_fetch_failed:\n        '選択されたアセットをダウンロード中に問題が発生しました。後で再度お試しください。',\n    },\n    available_images: '利用可能な画像',\n    enter_url: 'URL を入力',\n    enter_file_url: 'ファイルの URL を入力:',\n    enter_image_url: '画像の URL を入力:',\n    large_file: {\n      title: '大きなファイル',\n    },\n    photo_credit: {\n      title: '写真クレジット',\n      description: '可能であれば以下のクレジットを使ってください:',\n    },\n    unsaved: '未保存',\n  },\n  character_counter: {\n    min_max: {\n      one: '{count} 文字入力されています。最小: {min}。最大 {max}。',\n      many: '{count} 文字入力されています。最小: {min}。最大 {max}。',\n    },\n    min: {\n      one: '{count} 文字入力されています。最小: {min}。',\n      many: '{count} 文字入力されています。最小: {min}。',\n    },\n    max: {\n      one: '{count} 文字入力されています。最大: {max}。',\n      many: '{count} 文字入力されています。最大: {max}。',\n    },\n  },\n  youtube_video_player: 'YouTube 動画プレーヤー',\n  today: '今日',\n  now: '現在時刻',\n  editor_components: {\n    image: '画像',\n    src: 'ソース',\n    alt: '代替テキスト',\n    title: 'タイトル',\n    link: 'リンク',\n  },\n  key_value: {\n    key: 'キー',\n    value: '値',\n    action: 'アクション',\n    empty_key: 'キーは必須です。',\n    duplicate_key: 'キーが重複しています。',\n  },\n\n  // Content preview\n  boolean: {\n    true: 'はい',\n    false: 'いいえ',\n  },\n\n  // Integrations\n  cloud_storage: {\n    invalid: 'このサービスは正しく設定されていません。',\n    auth: {\n      initial: '{service} へログインすると、ストレージ上のメディアをエントリー項目へ挿入できます。',\n      requested: 'ログイン中…',\n      error: 'ユーザー名またはパスワードが間違っています。確認の上、再度お試しください。',\n    },\n  },\n\n  // Configuration\n  config: {\n    error: {\n      no_secure_context: 'Sveltia CMS は HTTPS またはローカルホスト URL でのみ動作します。',\n      fetch_failed: '設定ファイルを読み込めませんでした。',\n      fetch_failed_not_ok: 'HTTP レスポンスがステータス {status} で返されました。',\n      parse_failed: '設定ファイルを解析できませんでした。',\n      parse_failed_invalid_object: '設定ファイルが有効な JavaScript オブジェクトではありません。',\n      parse_failed_unsupported_type:\n        '設定ファイルが有効なファイル形式ではありません。サポートされているのは YAML と JSON のみです。',\n      no_collection: '設定ファイル内でコレクションが定義されていません。',\n      missing_backend: '設定ファイル内でバックエンドが定義されていません。',\n      missing_backend_name: '設定ファイル内でバックエンド名が定義されていません。',\n      unsupported_backend: '設定されている「{name}」バックエンドは非対応です。',\n      missing_repository: '設定ファイル内でレポジトリが定義されていません。',\n      invalid_repository:\n        '設定されているレポジトリが正しくありません。この設定は「owner/repo」形式でなければなりません。',\n      oauth_implicit_flow: '設定されている認証方式 (暗黙的フロー) は非対応です。',\n      oauth_no_app_id: '設定ファイル内で OAuth アプリケーション ID が定義されていません。',\n      missing_media_folder: '設定ファイル内でメディアフォルダーが定義されていません。',\n      invalid_media_folder:\n        '設定されているメディアフォルダーが正しくありません。この設定は文字列でなければなりません。',\n      invalid_public_folder:\n        '設定されているパブリックフォルダーが正しくありません。この設定は文字列でなければなりません。',\n      public_folder_relative_path:\n        '設定されているパブリックフォルダーが正しくありません。この設定は「/」で始まる絶対パスでなければなりません。',\n      public_folder_absolute_url: 'パブリックフォルダーオプションの絶対 URL は非対応です。',\n      unexpected: '設定ファイルを検証中に予期せぬ問題が発生しました。',\n      try_again: '問題を解決してから再度お試しください。',\n    },\n  },\n\n  // Backends\n  local_backend: {\n    unsupported_browser:\n      'お使いのブラウザーはローカル開発に対応していません。代わりに Chrome か Edge を使ってください。',\n    disabled:\n      'お使いのブラウザーではローカル開発が無効化されています。<a>有効化する方法はこちら</a>。',\n  },\n\n  // Editorial Workflow\n  status: {\n    drafts: '下書き',\n    in_review: 'レビュー中',\n    ready: '公開可',\n  },\n\n  // Settings\n  categories: 'カテゴリ',\n  prefs: {\n    changes: {\n      api_key_saved: 'API キーが保存されました。',\n      api_key_removed: 'API キーが削除されました。',\n    },\n    error: {\n      permission_denied:\n        'ブラウザーストレージ (Cookie) アクセスが拒否されました。許可設定を確認の上、再度お試しください。',\n    },\n    appearance: {\n      title: 'アピアランス',\n      theme: 'テーマ',\n      select_theme: 'テーマを選択',\n    },\n    theme: {\n      auto: '自動',\n      dark: 'ダーク',\n      light: 'ライト',\n    },\n    language: {\n      title: '言語',\n      ui_language: {\n        title: 'ユーザーインターフェース言語',\n        select_language: '言語を選択',\n      },\n    },\n    contents: {\n      title: 'コンテンツ',\n      editor: {\n        title: 'エディター',\n        use_draft_backup: {\n          switch_label: 'エントリーの下書きを自動的にバックアップする',\n        },\n        close_on_save: {\n          switch_label: '下書き保存後にエディターを閉じる',\n        },\n        close_with_escape: {\n          switch_label: 'Escape キーでエディターを閉じる',\n        },\n      },\n    },\n    i18n: {\n      title: '国際化',\n      default_translator: {\n        title: 'デフォルト翻訳サービス',\n        select_service: 'サービスを選択',\n      },\n      translator: {\n        field_label: '{service} キー',\n        description:\n          '<a {homeHref}>{service}</a> にユーザー登録して、<a {apiKeyHref}>発行されたキー</a> をここに入力すると、テキストエントリー項目の素早い翻訳が可能となります。',\n      },\n    },\n    media: {\n      title: 'メディア',\n      stock_photos: {\n        title: '{service} 無料画像素材',\n        field_label: '{service} API キー',\n        description:\n          '<a {homeHref}>{service} API</a> にユーザー登録して、<a {apiKeyHref}>発行された API キー</a> をここに入力すると、画像エントリー項目に無料のストックフォトを挿入できます。',\n        credit: '写真提供: {service}',\n        providers_disabled: 'ストックアセットプロバイダーは管理者によって無効化されています。',\n      },\n    },\n    accessibility: {\n      title: 'アクセシビリティ',\n      underline_links: {\n        title: 'リンクに下線を付ける',\n        description:\n          'エントリープレビューやユーザーインターフェイスラベル内のリンクに下線を表示します。',\n        switch_label: '常に下線を付ける',\n      },\n    },\n    advanced: {\n      title: '詳細',\n      beta: {\n        title: 'ベータ機能',\n        description:\n          '不安定あるいは未ローカライズの可能性がある、いくつかのベータ機能を有効化します。',\n        switch_label: 'ベータプログラムに参加する',\n      },\n      developer_mode: {\n        title: '開発者モード',\n        description:\n          '詳細なコンソールログやネイティブコンテキストメニューなど、いくつかの開発者向け機能を有効化します。',\n        switch_label: '開発者モードを有効にする',\n      },\n      deploy_hook: {\n        title: 'デプロイフック',\n        description:\n          '「変更を公開」を選択して手動でデプロイを実行する際に呼び出すウェブフック URL を入力してください。GitHub Actions を使用する場合は空欄のままで構いません。',\n        field_label: 'デプロイフック URL',\n        url_saved: 'ウェブフック URL が保存されました。',\n        url_removed: 'ウェブフック URL が削除されました。',\n      },\n    },\n  },\n\n  // Keyboard shortcuts\n  keyboard_shortcuts_: {\n    view_content_library: 'コンテンツライブラリを表示',\n    view_asset_library: 'アセットライブラリを表示',\n    search: 'エントリーとアセットを検索',\n    create_entry: '新しいエントリーを作成',\n    save_entry: 'エントリーを保存',\n    cancel_editing: 'エントリーの編集をキャンセル',\n  },\n\n  // File types\n  file_type_labels: {\n    avif: 'AVIF 画像',\n    bmp: 'Bitmap 画像',\n    gif: 'GIF 画像',\n    ico: 'アイコン',\n    jpeg: 'JPEG 画像',\n    jpg: 'JPEG 画像',\n    png: 'PNG 画像',\n    svg: 'SVG 画像',\n    tif: 'TIFF 画像',\n    tiff: 'TIFF 画像',\n    webp: 'WebP 画像',\n    avi: 'AVI 動画',\n    m4v: 'MP4 動画',\n    mov: 'QuickTime 動画',\n    mp4: 'MP4 動画',\n    mpeg: 'MPEG 動画',\n    mpg: 'MPEG 動画',\n    ogg: 'Ogg 動画',\n    ogv: 'Ogg 動画',\n    ts: 'MPEG 動画',\n    webm: 'WebM 動画',\n    '3gp': '3GPP 動画',\n    '3g2': '3GPP2 動画',\n    aac: 'AAC 音声',\n    mid: 'MIDI',\n    midi: 'MIDI',\n    m4a: 'MP4 音声',\n    mp3: 'MP3 音声',\n    oga: 'Ogg 音声',\n    opus: 'OPUS 音声',\n    wav: 'WAV 音声',\n    weba: 'WebM 音声',\n    csv: 'CSV スプレッドシート',\n    doc: 'Word ドキュメント',\n    docx: 'Word ドキュメント',\n    odp: 'OpenDocument プレゼンテーション',\n    ods: 'OpenDocument スプレッドシート',\n    odt: 'OpenDocument テキスト',\n    pdf: 'PDF ドキュメント',\n    ppt: 'PowerPoint プレゼンテーション',\n    pptx: 'PowerPoint プレゼンテーション',\n    rtf: 'リッチテキストドキュメント',\n    xls: 'Excel スプレッドシート',\n    xlsx: 'Excel スプレッドシート',\n    html: 'HTML テキスト',\n    js: 'JavaScript',\n    json: 'JSON テキスト',\n    md: 'Markdown テキスト',\n    toml: 'TOML テキスト',\n    yaml: 'YAML テキスト',\n    yml: 'YAML テキスト',\n  },\n\n  // file size units\n  file_size_units: {\n    b: '{size} バイト',\n    kb: '{size} KB',\n    mb: '{size} MB',\n    gb: '{size} GB',\n    tb: '{size} TB',\n  },\n};\n","import { initLocales } from '@sveltia/ui';\nimport { getPathInfo } from '@sveltia/utils/file';\nimport { get } from 'svelte/store';\nimport { addMessages, getLocaleFromNavigator } from 'svelte-i18n';\n\nimport { prefs } from '$lib/services/user/prefs';\n\n/**\n * Load strings and initialize the locales.\n * @see https://github.com/kaisermann/svelte-i18n/blob/main/docs/Getting%20Started.md\n * @see https://vitejs.dev/guide/features.html#glob-import\n */\nexport const initAppLocale = () => {\n  /** @type {Record<string, { strings: Record<string, string> }>} */\n  const modules = import.meta.glob('$lib/locales/*.js', { eager: true });\n\n  Object.entries(modules).forEach(([path, { strings }]) => {\n    const locale = getPathInfo(path).filename;\n\n    addMessages(locale, strings);\n  });\n\n  initLocales({\n    fallbackLocale: 'en',\n    initialLocale: get(prefs).locale || (getLocaleFromNavigator() ?? '').split('-')[0] || 'en',\n  });\n};\n","<script>\n  import { AppShell } from '@sveltia/ui';\n  import mime from 'mime';\n  import { onMount } from 'svelte';\n  import { isLoading } from 'svelte-i18n';\n\n  import SveltiaLogo from '$lib/assets/sveltia-logo.svg?raw&inline';\n  import EntrancePage from '$lib/components/entrance/entrance-page.svelte';\n  import BackendStatusIndicator from '$lib/components/global/infobars/backend-status-indicator.svelte';\n  import UpdateNotification from '$lib/components/global/infobars/update-notification.svelte';\n  import MainRouter from '$lib/components/global/main-router.svelte';\n  import { initAppLocale } from '$lib/services/app/i18n';\n  import { announcedPageStatus } from '$lib/services/app/navigation';\n  import { backend } from '$lib/services/backends';\n  import { DEV_SITE_URL, initSiteConfig, siteConfig } from '$lib/services/config';\n  import { dataLoaded } from '$lib/services/contents';\n  import { user } from '$lib/services/user';\n  import { initUserEnvDetection } from '$lib/services/user/env';\n\n  /**\n   * @import { SiteConfig } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {SiteConfig} [config] Configuration specified with manual initialization.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    config,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  onMount(() => {\n    initAppLocale();\n  });\n\n  onMount(() => {\n    initSiteConfig(config);\n  });\n\n  onMount(() => {\n    initUserEnvDetection();\n  });\n\n  // Fix the position of the custom mount element if needed\n  // @see https://decapcms.org/docs/custom-mounting/\n  onMount(() => {\n    const ncRoot = /** @type {HTMLElement | null} */ (document.querySelector('#nc-root'));\n\n    if (!!ncRoot && window.getComputedStyle(ncRoot).position === 'static') {\n      // Wait for the next frame to ensure the element is rendered before calculating its position\n      window.requestAnimationFrame(() => {\n        const { top, height } = ncRoot.getBoundingClientRect();\n\n        if (height) {\n          ncRoot.style.position = 'relative';\n        } else {\n          // Make sure the CMS UI won’t overlap with a header\n          ncRoot.style.position = 'fixed';\n          ncRoot.style.inset = `${top}px 0 0 0`;\n        }\n      });\n    }\n  });\n</script>\n\n<svelte:head>\n  <meta name=\"referrer\" content=\"same-origin\" />\n  <meta name=\"robots\" content=\"noindex\" />\n  {#if $siteConfig}\n    {@const logoURL = $siteConfig.logo_url}\n    <link\n      rel=\"icon\"\n      href={logoURL || `data:image/svg+xml;base64,${btoa(SveltiaLogo)}`}\n      type={logoURL ? (mime.getType(logoURL) ?? undefined) : 'image/svg+xml'}\n    />\n  {/if}\n  {#if DEV_SITE_URL}\n    <link href=\"{DEV_SITE_URL}/admin/config.yml\" type=\"application/yaml\" rel=\"cms-config-url\" />\n  {/if}\n</svelte:head>\n\n<svelte:body\n  onmousedown={(event) => {\n    if (/** @type {HTMLElement | null} */ (event.target)?.matches('a')) {\n      const link = /** @type {HTMLAnchorElement} */ (event.target);\n      const { origin, pathname } = link;\n\n      // Open external links and links to different paths in a new tab\n      if (origin !== window.location.origin || pathname !== window.location.pathname) {\n        link.target = '_blank';\n      }\n    }\n  }}\n/>\n\n<AppShell>\n  {#if !$isLoading}\n    <div role=\"none\" class=\"outer\">\n      <UpdateNotification />\n      {#if $backend}\n        <BackendStatusIndicator />\n      {/if}\n      <div role=\"none\" class=\"main\">\n        <EntrancePage />\n        {#if $user && $dataLoaded}\n          <MainRouter />\n        {/if}\n      </div>\n    </div>\n  {/if}\n  <div role=\"status\">{$announcedPageStatus}</div>\n</AppShell>\n\n<style lang=\"scss\">\n  @view-transition {\n    navigation: auto;\n  }\n\n  @keyframes slide-out-to-left {\n    from {\n      transform: translateX(0);\n      filter: brightness(1);\n    }\n\n    to {\n      transform: translateX(-20%);\n      filter: brightness(0.5);\n    }\n  }\n\n  @keyframes slide-out-to-right {\n    from {\n      transform: translateX(0);\n    }\n\n    to {\n      transform: translateX(100%);\n    }\n  }\n\n  @keyframes slide-in-from-right {\n    from {\n      transform: translateX(100%);\n    }\n\n    to {\n      transform: translateX(0);\n    }\n  }\n\n  @keyframes slide-in-from-left {\n    from {\n      transform: translateX(-20%);\n      filter: brightness(0.5);\n    }\n\n    to {\n      transform: translateX(0);\n      filter: brightness(1);\n    }\n  }\n\n  :global {\n    html:active-view-transition-type(forwards) {\n      &::view-transition-old(page-root) {\n        z-index: 999;\n        animation: 100ms ease-out both slide-out-to-left;\n\n        @media (prefers-reduced-motion) {\n          animation: none;\n        }\n      }\n\n      &::view-transition-new(page-root) {\n        z-index: 1000;\n        animation: 100ms ease-out both slide-in-from-right;\n\n        @media (prefers-reduced-motion) {\n          animation: none;\n        }\n      }\n    }\n\n    html:active-view-transition-type(backwards) {\n      &::view-transition-old(page-root) {\n        z-index: 1000;\n        animation: 100ms ease-out both slide-out-to-right;\n\n        @media (prefers-reduced-motion) {\n          animation: none;\n        }\n      }\n\n      &::view-transition-new(page-root) {\n        z-index: 999;\n        animation: 100ms ease-out both slide-in-from-left;\n\n        @media (prefers-reduced-motion) {\n          animation: none;\n        }\n      }\n    }\n\n    html:active-view-transition-type(unknown) {\n      &::view-transition-old(page-root) {\n        animation: none;\n      }\n\n      &::view-transition-new(page-root) {\n        animation: none;\n      }\n    }\n\n    body:not(:has(#nc-root)) {\n      overflow: hidden;\n    }\n\n    #nc-root > .sui.app-shell {\n      position: absolute;\n    }\n  }\n\n  .outer {\n    display: flex;\n    flex-direction: column;\n    position: absolute;\n    inset: 0;\n    overflow: hidden;\n  }\n\n  .main {\n    position: relative;\n    flex: auto;\n    display: flex;\n    flex-direction: column;\n    overflow: hidden;\n    background-color: var(--sui-secondary-background-color);\n  }\n\n  [role='status'] {\n    position: absolute;\n    z-index: -1;\n    opacity: 0;\n    pointer-events: none;\n    -webkit-user-select: none;\n    user-select: none;\n  }\n</style>\n","import { mount } from 'svelte';\n\nimport { customPreviewStyle } from '$lib/services/contents/editor';\nimport { customFileFormats } from '$lib/services/contents/file/config';\nimport { customComponents } from '$lib/services/contents/widgets/markdown';\n\nimport App from './components/app.svelte';\n\n/**\n * @import { ComponentType } from 'react';\n * @import {\n * AppEventListener,\n * CustomPreviewTemplateProps,\n * CustomWidgetControlProps,\n * CustomWidgetPreviewProps,\n * CustomWidgetSchema,\n * EditorComponentDefinition,\n * FileFormatter,\n * FileParser,\n * SiteConfig,\n * } from './types/public';\n * // Don’t use `$lib` in `from` above, or type declarations will not be exported\n */\n\nconst unsupportedFuncNames = [\n  'getBackend',\n  'getCustomFormats',\n  'getCustomFormatsExtensions',\n  'getCustomFormatsFormatters',\n  'getEditorComponents',\n  'getEventListeners',\n  'getLocale',\n  'getMediaLibrary',\n  'getPreviewStyles',\n  'getPreviewTemplate',\n  'getRemarkPlugins',\n  'getWidget',\n  'getWidgetValueSerializer',\n  'getWidgets',\n  'invokeEvent',\n  'moment',\n  'registerBackend',\n  'registerLocale',\n  'registerMediaLibrary',\n  'registerRemarkPlugin',\n  'registerWidgetValueSerializer',\n  'removeEventListener',\n  'resolveWidget',\n];\n\nconst COMPATIBILITY_URL = 'https://github.com/sveltia/sveltia-cms#compatibility';\nlet initialized = false;\n\n/**\n * Initialize the CMS, optionally with the given site configuration.\n * @param {object} [options] Options.\n * @param {SiteConfig} [options.config] Configuration to be merged with `config.yml`. Include\n * `load_config_file: false` to prevent the configuration file from being loaded.\n * @see https://decapcms.org/docs/manual-initialization/\n */\nconst init = async ({ config } = {}) => {\n  if (initialized) {\n    return;\n  }\n\n  initialized = true;\n\n  if (document.readyState === 'loading' && !document.querySelector('#nc-root')) {\n    // A custom mount element (`<div id=\"nc-root\">`) could appear after the CMS `<script>`, so just\n    // wait until the page content is loaded. https://decapcms.org/docs/custom-mounting/\n    await new Promise((resolve) => {\n      window.addEventListener('DOMContentLoaded', () => resolve(undefined), { once: true });\n    });\n  }\n\n  mount(App, {\n    target: document.querySelector('#nc-root') ?? document.body,\n    props: { config },\n  });\n};\n\n/**\n * Register a custom entry file format.\n * @param {string} name Format name. This should match the `format` option of a collection where the\n * custom format will be used..\n * @param {string} extension File extension.\n * @param {{ fromFile?: FileParser, toFile?: FileFormatter }} methods Parser and/or formatter\n * methods. Async functions can be used.\n * @see https://decapcms.org/docs/custom-formatters/\n */\nconst registerCustomFormat = (name, extension, { fromFile, toFile }) => {\n  customFileFormats[name] = { extension, parser: fromFile, formatter: toFile };\n};\n\n/**\n * Register a custom component.\n * @param {EditorComponentDefinition} definition Component definition.\n * @see https://decapcms.org/docs/custom-widgets/#registereditorcomponent\n */\nconst registerEditorComponent = (definition) => {\n  customComponents[definition.id] = definition;\n};\n\n/**\n * Register an event listener.\n * @param {AppEventListener} eventListener Event listener.\n * @see https://decapcms.org/docs/registering-events/\n */\nconst registerEventListener = (eventListener) => {\n  // eslint-disable-next-line no-console\n  console.error('Event hooks are not yet supported in Sveltia CMS.');\n  void [eventListener];\n};\n\n/**\n * Register a custom preview stylesheet.\n * @param {string} style URL, file path or raw CSS string.\n * @param {object} [options] Options.\n * @param {boolean} [options.raw] Whether to use a CSS string.\n * @throws {TypeError} If `style` is not a string, or `raw` is not a boolean.\n * @see https://decapcms.org/docs/customization/#registerpreviewstyle\n */\nconst registerPreviewStyle = (style, { raw = false } = {}) => {\n  if (typeof style !== 'string') {\n    throw new TypeError('The `style` option for `CMS.registerPreviewStyle()` must be a string');\n  }\n\n  if (typeof raw !== 'boolean') {\n    throw new TypeError('The `raw` option for `CMS.registerPreviewStyle()` must be a boolean');\n  }\n\n  customPreviewStyle.href = raw\n    ? URL.createObjectURL(new Blob([style], { type: 'text/css' }))\n    : style;\n};\n\n/**\n * Register a custom preview template.\n * @param {string} name Template name.\n * @param {ComponentType<CustomPreviewTemplateProps>} component React component.\n * @see https://decapcms.org/docs/customization/#registerpreviewtemplate\n */\nconst registerPreviewTemplate = (name, component) => {\n  // eslint-disable-next-line no-console\n  console.error('Custom preview templates are not yet supported in Sveltia CMS.');\n  void [name, component];\n};\n\n/**\n * Register a custom widget.\n * @param {string} name Widget name.\n * @param {ComponentType<CustomWidgetControlProps> | string} control Component for the edit pane.\n * @param {ComponentType<CustomWidgetPreviewProps>} [preview] Component for the preview pane.\n * @param {CustomWidgetSchema} [schema] Field schema.\n * @see https://decapcms.org/docs/custom-widgets/\n */\nconst registerWidget = (name, control, preview, schema) => {\n  // eslint-disable-next-line no-console\n  console.error('Custom widgets are not yet supported in Sveltia CMS.');\n  void [name, control, preview, schema];\n};\n\nconst CMS = new Proxy(\n  {\n    init,\n    registerCustomFormat,\n    registerEditorComponent,\n    registerEventListener,\n    registerPreviewStyle,\n    registerPreviewTemplate,\n    registerWidget,\n  },\n  {\n    // eslint-disable-next-line jsdoc/require-jsdoc\n    get: (obj, /** @type {string} */ key) => {\n      if (key in obj) {\n        // @ts-ignore\n        return obj[key];\n      }\n\n      let message = '';\n\n      if (unsupportedFuncNames.includes(key)) {\n        message =\n          'CMS.%s() is not supported in Sveltia CMS, and we don’t have any plans to implement it.';\n      }\n\n      if (message) {\n        // eslint-disable-next-line no-console\n        console.error(`${message} See %s for compatibility information.`, key, COMPATIBILITY_URL);\n\n        // eslint-disable-next-line jsdoc/require-description\n        /** @returns {void} */\n        return () => undefined;\n      }\n\n      return undefined;\n    },\n  },\n);\n\nexport default CMS;\nexport { init };\n\nwindow.CMS = CMS;\nwindow.initCMS = init;\n\n// Automatically initialize the CMS if manual initialization is not requested AND the script is NOT\n// a module; We can’t just use `document.currentScript` for module detection because the earlier\n// versions of Sveltia CMS were built and shipped as modules\nif (\n  !window.CMS_MANUAL_INIT &&\n  (!!document.currentScript ||\n    !!document.querySelector('script[src$=\"/sveltia-cms.js\"]') ||\n    import.meta.env.DEV)\n) {\n  init();\n}\n"],"file":"sveltia-cms.mjs"}