{"version":3,"mappings":"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C,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,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,IAAI,EACV,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,GAAG,EACT,CAAC,IAAK,IAAI,EACV,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,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,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,CAA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C,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,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,CAA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AC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,EACV,CAAC,KAAM,GAAG,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,CAAC,IAAK,KAAK,EACX,CAAC,IAAK,KAAK,EACX,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,CA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,EACA,EACA,EACA,CACF,EACA,MACF,IAAK,IACH,MACF,IAAK,IACH,EAAyB,EAAa,UACtC,EAAK,EAAa,UACT,EAAa,gBAAtB,KASI,EAAuB,YAAc,EACnC,GACE,EACA,EACA,EACA,CACF,GACE,EAAuB,aAAe,EACxC,GACE,EACA,EACA,EACA,GACO,EAAa,aAAe,QAAnC,GAA6C,CAAC,CAChD,GAtBF,EAAuB,YAAc,EACnC,GACE,EACA,EACA,EACA,CACF,EACA,GAAwC,EAAc,CAAY,EAgBxE,EAAQ,MAAQ,GAAmC,EAAI,CAAY,EACnE,MACF,IAAK,IACH,GACE,EACA,EACA,EACA,CACF,EACA,EAAQ,MACN,GAA8B,EAAa,UAAW,CAAY,EACpE,MACF,QACE,GACE,EACA,EACA,EACA,CACF,CACJ,CACF,CACA,SAAS,GACP,EACA,EACA,EACA,EACA,EACA,CAIA,IAHA,KAEU,EAAY,aAAe,QAAlC,GAA4C,CAAC,EAC3C,EAAc,EAAY,MAAgB,IAAT,MAAwB,CAC5D,IAAI,EAAe,EACjB,EAAe,EACf,EAAiB,EACjB,EAAuB,EACvB,EAAQ,EAAa,MACvB,OAAQ,EAAa,IAArB,CACE,IAAK,GACL,IAAK,IACL,IAAK,IACH,GACE,EACA,EACA,EACA,EACA,CACF,EACA,GAA0B,EAAG,CAAY,EACzC,MACF,IAAK,IACH,MACF,IAAK,IACH,IAAI,EAAW,EAAa,UACnB,EAAa,gBAAtB,MAaM,EAAS,aAAe,EAC1B,GACE,EACA,EACA,EACA,EACA,CACF,GAnBA,EAAS,YAAc,EACrB,GACE,EACA,EACA,EACA,EACA,CACF,EACA,GACE,EACA,CACF,EASN,GACE,EAAQ,MACR,GACE,EAAa,UACb,CACF,EACF,MACF,IAAK,IACH,GACE,EACA,EACA,EACA,EACA,CACF,EACA,GACE,EAAQ,MACR,GAA8B,EAAa,UAAW,CAAY,EACpE,MACF,QACE,GACE,EACA,EACA,EACA,EACA,CACF,CACJ,CACA,EAAc,EAAY,OAC5B,CACF,CACA,SAAS,GACP,EACA,EACA,CACA,GAAI,EAAY,aAAe,MAC7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ACzB,UACA,EAHF,EAIV,GAAU,IAAN,EAAgC,CAClC,EAAQ,EACR,EAAG,CACD,IAAI,EAAO,EACX,EAAa,GACb,IAAI,EAAoB,EAAK,QAAQ,cAAc,aAQnD,GAPA,IACG,GAAkB,EAAM,CAAwB,EAAE,OAAS,KAC9D,EAA2B,GACzB,EACA,EACA,CAAC,CACH,EACU,IAAN,EAAgC,CAClC,GACE,IACA,CAAC,EACD,CACA,EAAK,4BAA8B,EACnC,IACE,EACF,EAAa,EACb,MAAM,CACR,CACA,EAAsB,GACtB,GAAsC,EAC7B,IAAT,OACY,KAAT,KACI,GAAsC,EACvC,GAAoC,KAAK,MACvC,GACA,CACF,EACR,CACA,EAAa,CACf,CAEA,GADA,EAAsB,CAAC,EACb,IAAN,EAAkB,QACxB,CACF,CACA,GAAU,IAAN,EAAkB,CACpB,GAAkB,EAAe,CAAC,EAClC,GAAkB,EAAe,EAAO,EAAG,CAAC,CAAC,EAC7C,KACF,CACA,EAAG,CAGD,OAFA,EAAkB,EAClB,EAAsB,EACd,EAAR,CACE,IAAK,GACL,IAAK,GACH,MAAM,MAAM,EAAuB,GAAG,CAAC,EACzC,IAAK,GACH,IAAK,EAAQ,WAAa,EAAO,MACnC,IAAK,GACH,GACE,EACA,EACA,GACA,CAAC,EACH,EACA,MAAM,EACR,IAAK,GACH,GAAsC,KACtC,MACF,IAAK,GACL,IAAK,GACH,MACF,QACE,MAAM,MAAM,EAAuB,GAAG,CAAC,CAC3C,CACA,IACG,EAAQ,YAAc,IACrB,EAAa,GAA+B,IAAM,GAAI,EACxD,GAAK,GACL,CAOA,GANA,GACE,EACA,EACA,GACA,CAAC,EACH,EACU,GAAa,EAAiB,EAAG,CAAC,CAAC,IAAzC,EAA4C,MAAM,EACtD,GAAsB,EACtB,EAAgB,cAAgB,GAC9B,GAAoB,KAClB,KACA,EACA,EACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,EACA,YACA,GACA,CACF,EACA,CACF,EACA,MAAM,CACR,CACA,GACE,EACA,EACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,EACA,KACA,GACA,CACF,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,GAAiC,CAAC,EAClC,GACE,sPAAsP,MACpP,GACF,EACJ,SAAS,GAAuB,EAAc,EAAa,CACzD,OAAQ,EAAR,CACE,IAAK,UACL,IAAK,WACH,GAAc,KACd,MACF,IAAK,YACL,IAAK,YACH,GAAa,KACb,MACF,IAAK,YACL,IAAK,WACH,GAAc,KACd,MACF,IAAK,cACL,IAAK,aACH,GAAe,OAAO,EAAY,SAAS,EAC3C,MACF,IAAK,oBACL,IAAK,qBACH,GAAsB,OAAO,EAAY,SAAS,CACtD,CACF,CACA,SAAS,GACP,EACA,EACA,EACA,EACA,EACA,EACA,CAuBA,OArBW,IAAT,MACA,EAAoB,cAAgB,GAGjC,EAAsB,CACV,YACG,eACI,mBACL,cACb,iBAAkB,CAAC,CAAe,CACpC,EACS,IAAT,OACI,EAAY,GAAoB,CAAS,EAClC,IAAT,MAAsB,GAA2B,CAAS,GAC5D,IAEJ,EAAoB,kBAAoB,EACxC,EAAY,EAAoB,iBACvB,IAAT,MACS,EAAU,QAAQ,CAAe,IAAxC,IACA,EAAU,KAAK,CAAe,EACzB,EACT,CACA,SAAS,GACP,EACA,EACA,EACA,EACA,EACA,CACA,OAAQ,EAAR,CACE,IAAK,UACH,MACG,IAAc,GACb,GACA,EACA,EACA,EACA,EACA,CACF,EACA,CAAC,EAEL,IAAK,YACH,MACG,IAAa,GACZ,GACA,EACA,EACA,EACA,EACA,CACF,EACA,CAAC,EAEL,IAAK,YACH,MACG,IAAc,GACb,GACA,EACA,EACA,EACA,EACA,CACF,EACA,CAAC,EAEL,IAAK,cACH,IAAI,EAAY,EAAY,UAY5B,OAXA,GAAe,IACb,EACA,GACE,GAAe,IAAI,CAAS,GAAK,KACjC,EACA,EACA,EACA,EACA,CACF,CACF,EACO,CAAC,EACV,IAAK,oBACH,MACG,GAAY,EAAY,UACzB,GAAsB,IACpB,EACA,GACE,GAAsB,IAAI,CAAS,GAAK,KACxC,EACA,EACA,EACA,EACA,CACF,CACF,EACA,CAAC,CAEP,CACA,MAAO,CAAC,CACV,CACA,SAAS,GAA+B,EAAc,CACpD,IAAI,EAAa,GAA2B,EAAa,MA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","names":["fallback","next","clone","derived","get","get_store","source","#effect_pending","#local_pending_count","#anchor","#props","#children","#effect","#hydrate_open","#hydrate_failed_content","#hydrate_pending_content","#hydrate_resolved_content","#render","#main_effect","#failed_effect","#pending_effect","#offscreen_fragment","#run","#pending_count","#resolve","#dirty_effects","#maybe_dirty_effects","#update_pending_count","#pending_count_update_queued","#effect_pending_subscriber","#handle_error","flatten","#next","#prev","#blocking_pending","#skipped_branches","#unskipped_branches","#started","#unlink","#roots","#traverse","#is_deferred","#defer_effects","#process","#find_earlier_batch","#merge","#commit_callbacks","#deferred","#pending","#commit","#discard_callbacks","#new_effects","#decrement_queued","set","is","on","text","#transition","#batches","#onscreen","#outroing","#offscreen","#discard","link","html","element","append_styles","r","clsx","_clsx","w.select_multiple_invalid_value","init_select","isCollection","resolveEnd","isSeq","hashString","Map","Collection","validateEntry","merge$1","isMap","has","remove","reduce","toJS","Range","Set","saveFile","bidiChars","name","ws","visit","string","#ctx","#source","#litKeys","getValue","#bidiIsolation","#localeMatcher","#locales","#dir","#message","#functions","#createContext","#size","#update_version","#sources","#version","#read_all","NODE_TYPE","SCALAR","REMOVE","BREAK","SKIP","stringify","merge","floatNaN","floatExp","float","intStringify","intIdentify","intResolve","intOct","int","intHex","schema","schema$2","isBlock","parse","stringifyValue","sanitize","DOMPurify","M","N","E","d","m","O","ge","V","Y","$","ee","fe","me","xe","st","g","z","T","_","Te","Oe","we","ye","B","Pe","j","oe","ae","Se","F","$e","U","Le","_e","H","K","ze","le","W","se","Ee","Ie","Ae","Ce","ue","Be","Z","X","De","pe","qe","ve","He","ce","Ze","Ge","he","Ne","Qe","je","Fe","Ke","We","Xe","Je","Ve","v","Ye","ke","de","et","ie","J","tt","Q","nt","D","A","rt","w","x","y","L","b","P","q","Kt","Xt","Jt","dayjsCustomParseFormat","dayjsLocalizedFormat","dayjsUTC","dayjs","appLocale","locale","parseEntryCollection","dayjsTimeZone","#database","#databaseName","#storeName","#storeOptions","#indexes","#openDatabase","#getDatabase","#query","#databasePromise","#search","types","standardTypes","otherTypes","mime","#hasDate","#hasTime","#offset","libParseTOML","libParseYAML","createFileList","parseAssetFileInfo","saveChanges","backendName","label","repository","rootDirHandle","init","signIn","signOut","fetchFiles","commitChanges","BACKEND_NAME","BACKEND_LABEL","DEFAULT_API_ROOT","DEFAULT_AUTH_ROOT","DEFAULT_AUTH_PATH","getUserProfile","getTokenPageURL","getBaseURLs","checkRepositoryAccess","fetchDefaultBranchName","fetchLastCommit","fetchFileCommits","updateStores","updateCache","fetchFileList","parseFileContents","fetchFileContents","fetchBlob","FETCH_DEFAULT_BRANCH_NAME_QUERY","FETCH_LAST_COMMIT_QUERY","STATUS_DASHBOARD_URL","STATUS_CHECK_URL","checkStatus","test","getLibraryOptions","optionCacheMap","isEnabled","getS3LibraryOptions","getConfig","list","search","upload","getEndpoint","parseResults","awsS3","cloudflareR2","digitaloceanSpaces","scaleway","supabase","pkg","parseInline","_dateTimeParts","UNSUPPORTED_OPTIONS","G","lt","ct","at","ut","ft","ot","dt","ht","_t","gt","pt","mt","vt","xt","Ct","St","kt","Tt","bt","Nt","wt","Et","Ot","Mt","At","Dt","Ft","Gt","Qt","Zt","Pt","It","jt","Wt","$t","Ut","Vt","Bt","Ht","zt","ne","Rt","re","Lt","te","qt","Yt","Kn","s","Tn","Bn","Rn","Ln","zn","$n","Wn","Jn","jn","kn","Un","wn","Vn","Hn","Nn","Sn","bn","Dn","Re","Yn","Xn","Pn","qn","Gn","Qn","Fn","In","Ue","tn","dn","un","fn","xn","Zn","En","On","it","eo","R","Me","be","en","nn","rn","sn","ln","cn","an","hn","gn","_n","pn","yn","mn","Cn","vn","Mn","An","t","k","n","i","c","f","p","h","S","yt","o","e","C","I","l","u","a","HorizontalRuleNode","isHorizontalRuleNode","createHorizontalRuleNode","isTableRowNode","createTableCellNode","TableCellHeaderStates","TRANSFORMERS","TableNode","TableRowNode","TableCellNode","isTableNode","isTableCellNode","convertToMarkdownString","isParagraphNode","isTextNode","createTableNode","createTableRowNode","HeadingNode","QuoteNode","LinkNode","ListNode","ListItemNode","CodeNode","CodeHighlightNode","getSelection","isRangeSelection","ElementNode","getNearestNodeOfType","isLinkNode","isListItemNode","isHeadingNode","isListNode","isQuoteNode","isCodeNode","isCodeHighlightNode","createEditor","registerRichText","registerDragonSupport","registerHistory","createEmptyHistoryState","registerCodeHighlighting","PrismTokenizer","TOGGLE_LINK_COMMAND","INSERT_UNORDERED_LIST_COMMAND","INSERT_ORDERED_LIST_COMMAND","INSERT_PARAGRAPH_COMMAND","handleListInsertParagraph","getRoot","createCodeNode","OUTDENT_CONTENT_COMMAND","INDENT_CONTENT_COMMAND","prismComponents","initSettings","currentView","SveltiaLogo","FOLDER_PATH_REGEX","stringifyTOML","stringifyYAML","sortKeys","root","Node","process","formatSummary","apiEndpoint","apiLabel","developerURL","apiKeyURL","apiKeyPattern","complete","normalizeLanguage","availability","serviceId","serviceLabel","model","googleAi","google","SUPPORTED_LOCALES","ENDPOINT","SEARCH_PARAMS","getLocale","getDefaultValue","getDefaultValueMap","config","getBooleanFieldDefaultValueMap","getCodeFieldDefaultValueMap","getDateTimeFieldDefaultValueMap","getFileFieldDefaultValueMap","getHiddenFieldDefaultValueMap","getKeyValueFieldDefaultValueMap","getListFieldDefaultValueMap","getRichTextFieldDefaultValueMap","getNumberFieldDefaultValueMap","getObjectFieldDefaultValueMap","getSelectFieldDefaultValueMap","_entryDraft","DecoratorNode","EditorComponent","getNearestEditorFromDOMNode","marked","BooleanEditor","CodeEditor","ColorEditor","ComputeEditor","DateTimeEditor","FileEditor","KeyValueEditor","ListEditor","MapEditor","RichTextEditor","NumberEditor","ObjectEditor","RelationEditor","SelectEditor","StringEditor","TextEditor","UuidEditor","BooleanPreview","CodePreview","ColorPreview","ComputePreview","DateTimePreview","FilePreview","KeyValuePreview","ListPreview","MapPreview","RichTextPreview","NumberPreview","ObjectPreview","RelationPreview","SelectPreview","StringPreview","TextPreview","UuidPreview","getInitialUuidValue","AppearancePanel","LanguagePanel","ContentsPanel","I18nPanel","MediaPanel","AccessibilityPanel","AdvancedPanel","module","createClass","createElement"],"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,54,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,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,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,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,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,258,262,263,264,265,266,267,268,269,270,273,274,275,276,277,278,279,280,281,286,287,288,289,309,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,621,731,732,733,734,735,736,737,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855],"sources":["../../node_modules/.pnpm/@sveltia+utils@0.10.7/node_modules/@sveltia/utils/dist/object.js","../../node_modules/.pnpm/react@19.2.7/node_modules/react/cjs/react.production.js","../../node_modules/.pnpm/react@19.2.7/node_modules/react/index.js","../../node_modules/.pnpm/object-assign@4.1.1/node_modules/object-assign/index.js","../../node_modules/.pnpm/create-react-class@15.7.0/node_modules/create-react-class/factory.js","../../node_modules/.pnpm/create-react-class@15.7.0/node_modules/create-react-class/index.js","../../node_modules/.pnpm/esm-env@1.2.2/node_modules/esm-env/index.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/shared/utils.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/constants.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/shared/errors.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/errors.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/constants.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/warnings.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/hydration.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/reactivity/equality.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/flags/index.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/shared/warnings.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/shared/clone.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dev/tracing.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/shared/dev.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/context.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/task.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/error-handling.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/reactivity/status.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/reactivity/utils.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/store/utils.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/store/shared/index.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/reactivity/store.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dev/debug.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/reactivity/create-subscriber.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/blocks/boundary.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/reactivity/async.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/reactivity/deriveds.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/reactivity/batch.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/reactivity/sources.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/proxy.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dev/equality.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/operations.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/elements/misc.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/elements/bindings/shared.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/reactivity/effects.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/legacy.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/runtime.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/attachments/index.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/utils.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dev/assign.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dev/elements.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/elements/events.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/reconciler.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/template.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/render.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dev/hmr.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dev/ownership.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dev/legacy.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dev/inspect.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/blocks/async.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dev/validation.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/blocks/branches.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/blocks/await.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/blocks/if.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/blocks/key.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/blocks/css-props.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/blocks/each.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/blocks/html.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/blocks/slot.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/shared/validate.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/blocks/snippet.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/blocks/svelte-component.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/timing.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/loop.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/elements/transitions.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/blocks/svelte-element.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/blocks/svelte-head.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/css.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/elements/actions.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/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.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/shared/attributes.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/elements/class.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/elements/style.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/elements/bindings/select.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/elements/attributes.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/elements/customizable-select.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/elements/bindings/document.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/elements/bindings/input.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/elements/bindings/media.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/elements/bindings/navigator.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/elements/bindings/props.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/elements/bindings/size.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/elements/bindings/this.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/elements/bindings/universal.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/elements/bindings/window.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/legacy/event-modifiers.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/legacy/lifecycle.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/legacy/misc.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/reactivity/props.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/validate.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/legacy/legacy-client.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dom/elements/custom-element.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/dev/console-log.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/index.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/client/hydratable.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/index-client.js","../../node_modules/.pnpm/flat@6.0.1/node_modules/flat/index.js","../../node_modules/.pnpm/immutable@5.1.7/node_modules/immutable/dist/immutable.es.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.10.7/node_modules/@sveltia/utils/dist/crypto.js","../../node_modules/.pnpm/@sveltia+utils@0.10.7/node_modules/@sveltia/utils/dist/string.js","../../node_modules/.pnpm/@sveltia+utils@0.10.7/node_modules/@sveltia/utils/dist/file.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/store/index-client.js","../../src/lib/services/common/template/constants.js","../../src/lib/services/assets/folders.js","../../node_modules/.pnpm/messageformat@4.0.0/node_modules/messageformat/lib/cst/names.js","../../node_modules/.pnpm/messageformat@4.0.0/node_modules/messageformat/lib/data-model/from-cst.js","../../node_modules/.pnpm/messageformat@4.0.0/node_modules/messageformat/lib/errors.js","../../node_modules/.pnpm/messageformat@4.0.0/node_modules/messageformat/lib/data-model/parse.js","../../node_modules/.pnpm/messageformat@4.0.0/node_modules/messageformat/lib/data-model/visit.js","../../node_modules/.pnpm/messageformat@4.0.0/node_modules/messageformat/lib/data-model/validate.js","../../node_modules/.pnpm/messageformat@4.0.0/node_modules/messageformat/lib/dir-utils.js","../../node_modules/.pnpm/messageformat@4.0.0/node_modules/messageformat/lib/functions/utils.js","../../node_modules/.pnpm/messageformat@4.0.0/node_modules/messageformat/lib/functions/number.js","../../node_modules/.pnpm/messageformat@4.0.0/node_modules/messageformat/lib/functions/currency.js","../../node_modules/.pnpm/messageformat@4.0.0/node_modules/messageformat/lib/functions/datetime.js","../../node_modules/.pnpm/messageformat@4.0.0/node_modules/messageformat/lib/functions/offset.js","../../node_modules/.pnpm/messageformat@4.0.0/node_modules/messageformat/lib/functions/percent.js","../../node_modules/.pnpm/messageformat@4.0.0/node_modules/messageformat/lib/functions/string.js","../../node_modules/.pnpm/messageformat@4.0.0/node_modules/messageformat/lib/functions/unit.js","../../node_modules/.pnpm/messageformat@4.0.0/node_modules/messageformat/lib/functions/index.js","../../node_modules/.pnpm/messageformat@4.0.0/node_modules/messageformat/lib/message-value.js","../../node_modules/.pnpm/messageformat@4.0.0/node_modules/messageformat/lib/functions/fallback.js","../../node_modules/.pnpm/messageformat@4.0.0/node_modules/messageformat/lib/functions/unknown.js","../../node_modules/.pnpm/messageformat@4.0.0/node_modules/messageformat/lib/resolve/function-context.js","../../node_modules/.pnpm/messageformat@4.0.0/node_modules/messageformat/lib/resolve/resolve-function-ref.js","../../node_modules/.pnpm/messageformat@4.0.0/node_modules/messageformat/lib/resolve/resolve-expression.js","../../node_modules/.pnpm/messageformat@4.0.0/node_modules/messageformat/lib/resolve/resolve-variable.js","../../node_modules/.pnpm/messageformat@4.0.0/node_modules/messageformat/lib/resolve/resolve-value.js","../../node_modules/.pnpm/messageformat@4.0.0/node_modules/messageformat/lib/resolve/format-markup.js","../../node_modules/.pnpm/messageformat@4.0.0/node_modules/messageformat/lib/select-pattern.js","../../node_modules/.pnpm/messageformat@4.0.0/node_modules/messageformat/lib/messageformat.js","../../node_modules/.pnpm/messageformat@4.0.0/node_modules/messageformat/lib/index.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/reactivity/date.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/reactivity/set.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/reactivity/map.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/reactivity/url-search-params.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/reactivity/url.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/events/index.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/reactivity/reactive-value.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/reactivity/media-query.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/reactivity/index-client.js","../../node_modules/.pnpm/@sveltia+i18n@1.1.2_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/i18n/dist/index.svelte.js","../../node_modules/.pnpm/deepmerge@4.3.1/node_modules/deepmerge/dist/cjs.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/identity.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/visit.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/doc/directives.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/doc/anchors.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/doc/applyReviver.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/toJS.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/Node.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/Alias.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/Scalar.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/doc/createNode.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/Collection.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/stringifyComment.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/foldFlowLines.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/stringifyString.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/stringify.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/stringifyPair.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/log.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/Pair.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/stringifyCollection.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/YAMLMap.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/common/map.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/nodes/YAMLSeq.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/common/seq.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/common/string.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/common/null.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/core/bool.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/stringifyNumber.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/core/float.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/core/int.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/core/schema.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/json/schema.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/tags.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/schema/Schema.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/stringify/stringifyDocument.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/doc/Document.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/errors.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/resolve-props.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/util-contains-newline.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/util-map-includes.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/resolve-block-map.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/resolve-block-seq.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/resolve-end.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/compose-collection.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/compose-scalar.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/compose-node.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/compose-doc.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/compose/composer.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/parse/cst-scalar.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/parse/cst-visit.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/parse/cst.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/parse/lexer.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/parse/line-counter.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/parse/parser.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/public-api.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/dist/index.js","../../node_modules/.pnpm/yaml@2.9.0/node_modules/yaml/browser/index.js","../../node_modules/.pnpm/@sveltia+utils@0.10.7/node_modules/@sveltia/utils/dist/datetime.js","../../node_modules/.pnpm/@sindresorhus+transliterate@2.3.1/node_modules/@sindresorhus/transliterate/replacements.js","../../node_modules/.pnpm/@sindresorhus+transliterate@2.3.1/node_modules/@sindresorhus/transliterate/locale-replacements.js","../../node_modules/.pnpm/@sindresorhus+transliterate@2.3.1/node_modules/@sindresorhus/transliterate/index.js","../../src/lib/services/utils/cache.js","../../src/lib/services/common/slug.js","../../node_modules/.pnpm/dompurify@3.4.11/node_modules/dompurify/dist/purify.es.mjs","../../node_modules/.pnpm/isomorphic-dompurify@3.18.0/node_modules/isomorphic-dompurify/dist/browser.mjs","../../node_modules/.pnpm/marked@18.0.5/node_modules/marked/lib/marked.esm.js","../../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.3.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","../../node_modules/.pnpm/parse-entities@4.0.2/node_modules/parse-entities/index.js","../../node_modules/.pnpm/dayjs@1.11.21/node_modules/dayjs/dayjs.min.js","../../node_modules/.pnpm/dayjs@1.11.21/node_modules/dayjs/plugin/customParseFormat.js","../../node_modules/.pnpm/dayjs@1.11.21/node_modules/dayjs/plugin/localizedFormat.js","../../node_modules/.pnpm/dayjs@1.11.21/node_modules/dayjs/plugin/utc.js","../../src/lib/services/contents/fields/date-time/config.js","../../src/lib/services/common/transformations.js","../../src/lib/services/contents/index.js","../../src/lib/services/contents/collection/files/index.js","../../src/lib/services/config/deprecations.js","../../src/lib/services/contents/file/index.js","../../src/lib/services/contents/i18n/index.js","../../src/lib/services/contents/file/config.js","../../src/lib/services/contents/i18n/config.js","../../src/lib/services/contents/collection/index.js","../../src/lib/services/contents/collection/entries/index-file.js","../../src/lib/services/contents/fields/index.js","../../node_modules/.pnpm/dayjs@1.11.21/node_modules/dayjs/plugin/timezone.js","../../src/lib/services/utils/date.js","../../src/lib/services/contents/fields/date-time/timezone.js","../../src/lib/services/contents/fields/date-time/helper.js","../../node_modules/.pnpm/@sveltia+utils@0.10.7/node_modules/@sveltia/utils/dist/misc.js","../../node_modules/.pnpm/@sveltia+utils@0.10.7/node_modules/@sveltia/utils/dist/storage/indexed-db.js","../../node_modules/.pnpm/@sveltia+utils@0.10.7/node_modules/@sveltia/utils/dist/storage/local-storage.js","../../node_modules/.pnpm/@sveltia+utils@0.10.7/node_modules/@sveltia/utils/dist/storage/index.js","../../node_modules/.pnpm/mime@4.1.0/node_modules/mime/dist/types/other.js","../../node_modules/.pnpm/mime@4.1.0/node_modules/mime/dist/types/standard.js","../../node_modules/.pnpm/mime@4.1.0/node_modules/mime/dist/src/Mime.js","../../node_modules/.pnpm/mime@4.1.0/node_modules/mime/dist/src/index.js","../../node_modules/.pnpm/@sveltia+utils@0.10.7/node_modules/@sveltia/utils/dist/array.js","../../src/lib/services/assets/kinds.js","../../src/lib/services/backends/git/shared/config.js","../../node_modules/.pnpm/smol-toml@1.7.0/node_modules/smol-toml/dist/date.js","../../node_modules/.pnpm/smol-toml@1.7.0/node_modules/smol-toml/dist/error.js","../../node_modules/.pnpm/smol-toml@1.7.0/node_modules/smol-toml/dist/primitive.js","../../node_modules/.pnpm/smol-toml@1.7.0/node_modules/smol-toml/dist/util.js","../../node_modules/.pnpm/smol-toml@1.7.0/node_modules/smol-toml/dist/extract.js","../../node_modules/.pnpm/smol-toml@1.7.0/node_modules/smol-toml/dist/struct.js","../../node_modules/.pnpm/smol-toml@1.7.0/node_modules/smol-toml/dist/parse.js","../../node_modules/.pnpm/smol-toml@1.7.0/node_modules/smol-toml/dist/stringify.js","../../node_modules/.pnpm/smol-toml@1.7.0/node_modules/smol-toml/dist/index.js","../../src/lib/services/contents/file/parse.js","../../src/lib/services/contents/file/process.js","../../src/lib/services/backends/process.js","../../src/lib/services/user/env.svelte.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.4/node_modules/sanitize-filename/index.js","../../src/lib/services/utils/file.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/account.svelte.js","../../src/lib/services/utils/networking.js","../../src/lib/services/backends/git/shared/api.js","../../src/lib/services/backends/git/shared/user.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","../../node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js","../../src/lib/services/user/prefs.svelte.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/integrations/media-libraries/cloud/cloudinary.js","../../src/lib/services/integrations/media-libraries/cloud/s3/core.js","../../src/lib/services/integrations/media-libraries/cloud/s3/aws-s3.js","../../src/lib/services/integrations/media-libraries/cloud/s3/cloudflare-r2.js","../../src/lib/services/integrations/media-libraries/cloud/s3/digitalocean-spaces.js","../../src/lib/services/integrations/media-libraries/cloud/s3/scaleway.js","../../src/lib/services/integrations/media-libraries/cloud/s3/supabase.js","../../src/lib/services/integrations/media-libraries/cloud/uploadcare.js","../../src/lib/services/integrations/media-libraries/cloud/index.js","../../src/lib/services/app/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/entry/index.js","../../src/lib/services/utils/regex.js","../../src/lib/services/contents/collection/entries/index.js","../../src/lib/services/contents/fields/relation/helper/cache.js","../../src/lib/services/contents/fields/relation/helper/field-names.js","../../src/lib/services/contents/fields/relation/helper/templates.js","../../src/lib/services/contents/fields/relation/helper/list-fields.js","../../src/lib/services/contents/fields/relation/helper/options.js","../../src/lib/services/contents/fields/relation/helper/entries.js","../../src/lib/services/contents/fields/relation/helper/filters.js","../../src/lib/services/contents/fields/relation/helper/index.js","../../src/lib/services/contents/fields/rich-text/components/utils.js","../../src/lib/services/contents/fields/rich-text/constants.js","../../src/lib/services/utils/string.js","../../src/lib/services/contents/fields/rich-text/components/definitions.js","../../src/lib/services/utils/number.js","../../src/lib/services/contents/fields/select/helper.js","../../src/lib/services/integrations/media-libraries/shared.js","../../src/lib/services/contents/entry/fields.js","../../src/lib/services/contents/entry/summary.js","../../src/lib/services/common/template/handlers.js","../../src/lib/services/common/template/transformations.js","../../src/lib/services/common/template/replacers.js","../../src/lib/services/common/template/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/parser/utils/validator.js","../../src/lib/services/config/parser/backend.js","../../src/lib/services/config/parser/collections/format.js","../../src/lib/services/config/parser/fields/datetime.js","../../src/lib/services/config/parser/fields/file.js","../../src/lib/services/config/parser/fields/list.js","../../src/lib/services/config/parser/fields/number.js","../../src/lib/services/config/parser/fields/object.js","../../src/lib/services/config/parser/fields/relation.js","../../src/lib/services/config/parser/fields/rich-text.js","../../src/lib/services/config/parser/fields/index.js","../../src/lib/services/config/parser/collection-files/index.js","../../src/lib/services/config/parser/collections/index.js","../../src/lib/services/config/parser/media.js","../../src/lib/services/config/parser/index.js","../../src/lib/services/config/index.js","../../src/lib/services/integrations/media-libraries/index.js","../../src/lib/services/integrations/media-libraries/default/index.js","../../src/lib/services/assets/process.js","../../src/lib/services/assets/index.js","../../src/lib/services/contents/entry/assets.js","../../src/lib/services/contents/draft/events.js","../../src/lib/services/contents/editor/index.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/internal/disclose-version.js","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/locales/en.yaml?raw","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/locales/ja.yaml?raw","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/services/i18n.js","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/icon/icon.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/alert/alert.svelte","../../node_modules/.pnpm/@sveltia+utils@0.10.7/node_modules/@sveltia/utils/dist/events.js","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/typography/truncated-text.svelte","../../node_modules/.pnpm/@sveltia+utils@0.10.7/node_modules/@sveltia/utils/dist/element.js","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/services/popup.svelte.js","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/util/placeholder.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/util/modal.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/util/popup.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/button/button.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/alert/infobar.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/bottom-navigation/bottom-navigation.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/button/button-group.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/button/floating-action-button-wrapper.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/services/select.svelte.js","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/services/group.svelte.js","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/button/select-button-group.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/button/select-button.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/menu/menu-button.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/button/split-button.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/divider/divider.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/divider/spacer.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/checkbox/checkbox-group.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/checkbox/checkbox.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/dialog/dialog.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/dialog/alert-dialog.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/dialog/confirmation-dialog.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/text-field/text-input.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/dialog/prompt-dialog.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/file/file-picker.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/grid/grid-body.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/grid/grid-cell.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/grid/grid-row.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/grid/grid.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/listbox/listbox.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/listbox/option-group.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/listbox/option.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/menu/menu.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/menu/menu-item.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/menu/menu-item-checkbox.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/menu/menu-item-radio.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/progressbar/progressbar.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/radio/radio-group.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/radio/radio.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/resizable-pane/resizable-handle.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/resizable-pane/resizable-pane-group.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/resizable-pane/resizable-pane.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/scroll/infinite-scroll.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/text-field/search-bar.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/select/combobox.svelte","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/easing/index.js","../../node_modules/.pnpm/svelte@5.56.4_@typescript-eslint+types@8.62.0/node_modules/svelte/src/animate/index.js","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/select/select.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/select/select-tags.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/slider/slider.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/switch/switch.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/table/table-cell.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/table/table-row.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/table/table.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/tabs/tab-list.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/tabs/tab-panel.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/tabs/tab.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/toast/toast.svelte","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/prism.js","../../node_modules/.pnpm/lexical@0.45.0/node_modules/lexical/dist/Lexical.prod.mjs","../../node_modules/.pnpm/@lexical+selection@0.45.0/node_modules/@lexical/selection/dist/LexicalSelection.prod.mjs","../../node_modules/.pnpm/@lexical+utils@0.45.0/node_modules/@lexical/utils/dist/LexicalUtils.prod.mjs","../../node_modules/.pnpm/@lexical+extension@0.45.0/node_modules/@lexical/extension/dist/LexicalExtension.prod.mjs","../../node_modules/.pnpm/@lexical+html@0.45.0/node_modules/@lexical/html/dist/LexicalHtml.prod.mjs","../../node_modules/.pnpm/@lexical+code-core@0.45.0/node_modules/@lexical/code-core/dist/LexicalCodeCore.prod.mjs","../../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-prism@0.45.0/node_modules/@lexical/code-prism/dist/LexicalCodePrism.prod.mjs","../../node_modules/.pnpm/@lexical+code@0.45.0/node_modules/@lexical/code/dist/LexicalCode.prod.mjs","../../node_modules/.pnpm/@lexical+dragon@0.45.0/node_modules/@lexical/dragon/dist/LexicalDragon.prod.mjs","../../node_modules/.pnpm/@lexical+history@0.45.0/node_modules/@lexical/history/dist/LexicalHistory.prod.mjs","../../node_modules/.pnpm/@lexical+link@0.45.0/node_modules/@lexical/link/dist/LexicalLink.prod.mjs","../../node_modules/.pnpm/@lexical+list@0.45.0/node_modules/@lexical/list/dist/LexicalList.prod.mjs","../../node_modules/.pnpm/@lexical+clipboard@0.45.0/node_modules/@lexical/clipboard/dist/LexicalClipboard.prod.mjs","../../node_modules/.pnpm/@lexical+rich-text@0.45.0/node_modules/@lexical/rich-text/dist/LexicalRichText.prod.mjs","../../node_modules/.pnpm/@lexical+markdown@0.45.0/node_modules/@lexical/markdown/dist/LexicalMarkdown.prod.mjs","../../node_modules/.pnpm/@lexical+table@0.45.0/node_modules/@lexical/table/dist/LexicalTable.prod.mjs","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components.js","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/text-editor/constants.js","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/text-editor/markdown.js","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/text-editor/transformers/hr.js","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/text-editor/transformers/table.js","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/text-editor/core.js","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/text-editor/lexical-root.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/text-editor/store.svelte.js","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/text-editor/toolbar/code-language-switcher.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/toolbar/toolbar.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/text-editor/toolbar/toolbar-wrapper.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/text-editor/toolbar/code-editor-toolbar.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/text-editor/code-editor.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/text-field/text-area.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/text-editor/toolbar/format-text-button.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/text-editor/toolbar/insert-image-button.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/text-editor/toolbar/insert-link-button.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/text-editor/toolbar/insert-menu-button.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/text-editor/toolbar/toggle-block-menu-item.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/text-editor/toolbar/text-editor-toolbar.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/text-editor/text-editor.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/text-field/number-input.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/text-field/secret-input.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/util/app-shell.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/util/empty-state.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/components/util/group.svelte","../../node_modules/.pnpm/@sveltia+ui@0.40.5_svelte@5.56.4_@typescript-eslint+types@8.62.0_/node_modules/@sveltia/ui/dist/index.js","../../src/lib/services/common/view.js","../../src/lib/services/assets/view/filter.js","../../src/lib/services/assets/view/group.js","../../src/lib/services/assets/view/settings.js","../../src/lib/services/assets/view/sort.js","../../src/lib/services/assets/view/index.js","../../src/lib/services/utils/window.js","../../src/lib/services/app/navigation.js","../../src/lib/services/user/auth.svelte.js","../../src/lib/components/entrance/sign-in.svelte","../../src/lib/services/app/branding.js","../../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/services/utils/media/image/exif.js","../../src/lib/services/utils/media/index.js","../../src/lib/services/assets/details.js","../../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/assets/shared/asset-preview.svelte","../../src/lib/components/common/leaflet-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/backends/git/shared/integration.js","../../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/file/format.js","../../src/lib/services/contents/collection/entries/reorder.js","../../src/lib/services/contents/draft/index.js","../../src/lib/services/contents/draft/save/key-path.js","../../src/lib/services/contents/draft/save/serialize.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/shared/image.svelte","../../src/lib/components/assets/shared/upload-assets-preview.svelte","../../src/lib/components/assets/shared/drop-zone.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/locales/en.yaml","../../src/lib/locales/ja.yaml","../../src/lib/services/app/i18n.js","../../src/lib/services/contents/collection/view/utils.js","../../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/utils/markdown.js","../../src/lib/services/contents/collection/view/sort.js","../../src/lib/services/contents/collection/view/index.js","../../src/lib/services/contents/collection/view/sort-keys.js","../../src/lib/components/common/page-toolbar/sort-menu.svelte","../../src/lib/components/common/page-toolbar/view-switcher.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/search/asset-result-item.svelte","../../src/lib/services/search/util.js","../../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-main-area.svelte","../../src/lib/services/search/navigation.js","../../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/create/proxy.js","../../src/lib/services/contents/draft/backup.js","../../src/lib/components/contents/details/backup-feedback.svelte","../../src/lib/components/common/visibility-observer.svelte","../../node_modules/.pnpm/turndown@7.2.4/node_modules/turndown/lib/turndown.browser.es.js","../../src/lib/services/contents/fields/list/helper.js","../../src/lib/services/integrations/ai/anthropic.js","../../src/lib/services/integrations/translators/shared.js","../../src/lib/services/integrations/translators/anthropic.js","../../src/lib/services/integrations/ai/deepseek.js","../../src/lib/services/integrations/translators/deepseek.js","../../src/lib/services/integrations/translators/google.js","../../src/lib/services/integrations/ai/google.js","../../src/lib/services/integrations/translators/google-ai.js","../../src/lib/services/integrations/ai/mistral.js","../../src/lib/services/integrations/translators/mistral.js","../../src/lib/services/integrations/ai/openai.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/field-editor-group.svelte","../../src/lib/components/contents/details/editor/translate-button.svelte","../../src/lib/components/contents/details/editor/validation-error.svelte","../../src/lib/components/contents/details/fields/boolean/boolean-editor.svelte","../../src/lib/components/contents/details/fields/boolean/boolean-preview.svelte","../../src/lib/components/contents/details/fields/code/code-editor.svelte","../../src/lib/components/contents/details/fields/code/code-preview.svelte","../../src/lib/components/contents/details/fields/color/color-editor.svelte","../../src/lib/components/contents/details/fields/color/color-preview.svelte","../../src/lib/components/contents/details/fields/compute/compute-editor.svelte","../../src/lib/components/contents/details/fields/compute/compute-preview.svelte","../../src/lib/components/contents/details/fields/date-time/date-time-editor.svelte","../../src/lib/components/contents/details/fields/date-time/date-time-preview.svelte","../../src/lib/components/assets/browser/cloudinary-panel.svelte","../../src/lib/components/assets/browser/asset-path.svelte","../../src/lib/components/assets/browser/simple-image-grid-item.svelte","../../src/lib/components/assets/browser/simple-image-grid.svelte","../../src/lib/components/assets/shared/oversize-alert-dialog.svelte","../../src/lib/components/assets/browser/external-assets-panel.svelte","../../src/lib/components/assets/browser/assets-panel.svelte","../../src/lib/components/assets/browser/internal-assets-panel.svelte","../../src/lib/services/contents/fields/file/duplicates.svelte.js","../../src/lib/services/contents/fields/file/helper.js","../../src/lib/services/contents/fields/file/process.js","../../src/lib/services/integrations/media-libraries/stock/pexels.js","../../src/lib/services/integrations/media-libraries/stock/picsum.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/components/assets/shared/conflict-resolution-dialog.svelte","../../src/lib/components/contents/details/fields/file/file-editor-item.svelte","../../src/lib/components/contents/details/fields/file/upload-button.svelte","../../src/lib/components/contents/details/fields/file/file-editor.svelte","../../src/lib/components/contents/details/fields/file/file-preview-item.svelte","../../src/lib/components/contents/details/fields/file/file-preview.svelte","../../src/lib/services/contents/fields/key-value/helper.js","../../src/lib/components/contents/details/fields/key-value/key-value-editor.svelte","../../src/lib/components/contents/details/fields/key-value/key-value-preview.svelte","../../src/lib/components/common/expand-icon.svelte","../../src/lib/components/contents/details/fields/object/add-item-button.svelte","../../src/lib/components/contents/details/fields/object/object-header.svelte","../../src/lib/services/contents/fields/boolean/defaults.js","../../src/lib/services/contents/fields/code/defaults.js","../../src/lib/services/contents/fields/date-time/defaults.js","../../src/lib/services/contents/fields/file/defaults.js","../../src/lib/services/contents/fields/hidden/defaults.js","../../src/lib/services/contents/fields/key-value/defaults.js","../../src/lib/services/contents/fields/list/defaults.js","../../src/lib/services/contents/fields/number/defaults.js","../../src/lib/services/contents/fields/object/defaults.js","../../src/lib/services/contents/fields/rich-text/defaults.js","../../src/lib/services/contents/fields/select/defaults.js","../../src/lib/services/contents/fields/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/components/contents/details/fields/list/list-editor-complex.svelte","../../src/lib/components/contents/details/fields/list/list-editor-simple.svelte","../../src/lib/components/contents/details/fields/list/list-editor.svelte","../../src/lib/components/contents/details/fields/object/subsection.svelte","../../src/lib/components/contents/details/preview/field-preview.svelte","../../src/lib/components/contents/details/fields/list/list-preview-complex.svelte","../../src/lib/components/contents/details/fields/list/list-preview-simple.svelte","../../src/lib/components/contents/details/fields/list/list-preview.svelte","../../src/lib/services/contents/fields/map/helper.js","../../src/lib/components/contents/details/fields/map/map-editor.svelte","../../src/lib/components/contents/details/fields/map/map-preview.svelte","../../src/lib/components/contents/details/fields/number/number-editor.svelte","../../src/lib/components/contents/details/fields/number/number-preview.svelte","../../src/lib/services/contents/draft/update/locale.js","../../src/lib/services/contents/fields/object/helper.js","../../src/lib/components/contents/details/fields/object/object-editor.svelte","../../src/lib/components/contents/details/fields/object/object-preview.svelte","../../src/lib/components/contents/details/fields/select/select-multiple.svelte","../../src/lib/components/contents/details/fields/select/select-single.svelte","../../src/lib/components/contents/details/fields/select/select-editor.svelte","../../src/lib/components/contents/details/fields/relation/relation-editor.svelte","../../src/lib/components/contents/details/fields/relation/relation-preview.svelte","../../src/lib/services/contents/fields/rich-text/index.js","../../src/lib/services/contents/fields/date-time/validate.js","../../src/lib/services/contents/draft/validate/messages.js","../../src/lib/services/contents/fields/code/validate.js","../../src/lib/services/contents/fields/key-value/validate.js","../../src/lib/services/contents/fields/list/validate.js","../../src/lib/services/contents/fields/number/validate.js","../../src/lib/services/contents/fields/string/validate.js","../../src/lib/services/contents/draft/validate/fields.js","../../src/lib/components/contents/details/fields/rich-text/editor-component.svelte","../../src/lib/services/contents/fields/rich-text/components/custom-node.js","../../src/lib/services/contents/fields/rich-text/components/transformers.js","../../src/lib/services/contents/fields/rich-text/components/index.js","../../src/lib/components/contents/details/fields/rich-text/rich-text-editor.svelte","../../node_modules/.pnpm/marked-bidi@1.0.15_marked@18.0.5/node_modules/marked-bidi/src/index.js","../../node_modules/.pnpm/scheduler@0.27.0/node_modules/scheduler/cjs/scheduler.production.js","../../node_modules/.pnpm/scheduler@0.27.0/node_modules/scheduler/index.js","../../node_modules/.pnpm/react-dom@19.2.7_react@19.2.7/node_modules/react-dom/cjs/react-dom.production.js","../../node_modules/.pnpm/react-dom@19.2.7_react@19.2.7/node_modules/react-dom/index.js","../../node_modules/.pnpm/react-dom@19.2.7_react@19.2.7/node_modules/react-dom/cjs/react-dom-client.production.js","../../node_modules/.pnpm/react-dom@19.2.7_react@19.2.7/node_modules/react-dom/client.js","../../src/lib/services/contents/fields/rich-text/helper.js","../../src/lib/components/contents/details/fields/rich-text/rich-text-preview.svelte","../../src/lib/components/contents/details/fields/select/select-preview.svelte","../../src/lib/components/contents/details/fields/string/character-counter.svelte","../../src/lib/components/contents/details/fields/string/string-editor.svelte","../../src/lib/services/utils/media/video/youtube.js","../../src/lib/components/contents/details/fields/string/youtube-embed.svelte","../../src/lib/components/contents/details/fields/string/string-preview.svelte","../../src/lib/components/contents/details/fields/text/text-editor.svelte","../../src/lib/components/contents/details/fields/text/text-preview.svelte","../../src/lib/services/contents/fields/uuid/helper.js","../../src/lib/components/contents/details/fields/uuid/uuid-editor.svelte","../../src/lib/components/contents/details/fields/uuid/uuid-preview.svelte","../../src/lib/components/contents/details/fields/index.js","../../src/lib/services/contents/draft/update/revert.js","../../src/lib/components/contents/details/editor/field-editor.svelte","../../src/lib/components/contents/details/editor/slug-editor.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/sidebar/panels/panel-container.svelte","../../src/lib/services/contents/entry/backlinks.js","../../src/lib/components/contents/details/sidebar/panels/backlinks-panel.svelte","../../src/lib/services/contents/entry/history.js","../../src/lib/components/contents/details/sidebar/panels/history-panel.svelte","../../src/lib/components/contents/details/sidebar/panels/validation-panel.svelte","../../src/lib/components/contents/details/sidebar/sidebar.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/slugs.js","../../src/lib/services/contents/draft/validate/index.js","../../src/lib/services/contents/draft/save/index.js","../../src/lib/components/contents/details/toolbar.svelte","../../src/lib/components/contents/details/content-details-overlay.svelte","../../src/lib/components/contents/list/entry-list-item-cells.svelte","../../src/lib/components/contents/list/entry-list-item.svelte","../../src/lib/components/contents/list/entry-reorder-list-item.svelte","../../src/lib/components/contents/list/entry-reorder-list.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/global/toolbar/items/publish-button.svelte","../../src/lib/components/contents/list/primary-sidebar.svelte","../../src/lib/components/contents/list/reorder-controls.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/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/controls/api-key-input.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/panel-container.svelte","../../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/help/release-notes-menu-item.svelte","../../src/lib/components/global/toolbar/items/help-menu.svelte","../../src/lib/components/global/toolbar/items/help-button.svelte","../../src/lib/components/global/toolbar/items/notifications-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/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/components/app.svelte","../../src/lib/main.js"],"sourcesContent":["/**\n * Check if the given input is a simple object.\n * @param {any} input Input, probably an object.\n * @returns {input is Record<string, any>} 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 in some environments, so this can be used instead. The name of `toRaw` is derived from the\n * equivalent in Vue.\n * Note: this is JSON-based, so the following values are lost or transformed:\n * - `Date` → ISO string\n * - `Map`/`Set` → `{}`\n * - `undefined`, functions, symbols → dropped\n * - `BigInt` → throws\n * - circular references → throws\n * For richer cloning of plain objects, prefer `structuredClone()` directly.\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","/**\n * @license React\n * react.production.js\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\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n  REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n  REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n  MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n  if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n  maybeIterable =\n    (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n    maybeIterable[\"@@iterator\"];\n  return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar ReactNoopUpdateQueue = {\n    isMounted: function () {\n      return !1;\n    },\n    enqueueForceUpdate: function () {},\n    enqueueReplaceState: function () {},\n    enqueueSetState: function () {}\n  },\n  assign = Object.assign,\n  emptyObject = {};\nfunction Component(props, context, updater) {\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  this.updater = updater || ReactNoopUpdateQueue;\n}\nComponent.prototype.isReactComponent = {};\nComponent.prototype.setState = function (partialState, callback) {\n  if (\n    \"object\" !== typeof partialState &&\n    \"function\" !== typeof partialState &&\n    null != partialState\n  )\n    throw Error(\n      \"takes an object of state variables to update or a function which returns an object of state variables.\"\n    );\n  this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n};\nComponent.prototype.forceUpdate = function (callback) {\n  this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n};\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\nfunction PureComponent(props, context, updater) {\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  this.updater = updater || ReactNoopUpdateQueue;\n}\nvar pureComponentPrototype = (PureComponent.prototype = new ComponentDummy());\npureComponentPrototype.constructor = PureComponent;\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = !0;\nvar isArrayImpl = Array.isArray;\nfunction noop() {}\nvar ReactSharedInternals = { H: null, A: null, T: null, S: null },\n  hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction ReactElement(type, key, props) {\n  var refProp = props.ref;\n  return {\n    $$typeof: REACT_ELEMENT_TYPE,\n    type: type,\n    key: key,\n    ref: void 0 !== refProp ? refProp : null,\n    props: props\n  };\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n  return ReactElement(oldElement.type, newKey, oldElement.props);\n}\nfunction isValidElement(object) {\n  return (\n    \"object\" === typeof object &&\n    null !== object &&\n    object.$$typeof === REACT_ELEMENT_TYPE\n  );\n}\nfunction escape(key) {\n  var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n  return (\n    \"$\" +\n    key.replace(/[=:]/g, function (match) {\n      return escaperLookup[match];\n    })\n  );\n}\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction getElementKey(element, index) {\n  return \"object\" === typeof element && null !== element && null != element.key\n    ? escape(\"\" + element.key)\n    : index.toString(36);\n}\nfunction resolveThenable(thenable) {\n  switch (thenable.status) {\n    case \"fulfilled\":\n      return thenable.value;\n    case \"rejected\":\n      throw thenable.reason;\n    default:\n      switch (\n        (\"string\" === typeof thenable.status\n          ? thenable.then(noop, noop)\n          : ((thenable.status = \"pending\"),\n            thenable.then(\n              function (fulfilledValue) {\n                \"pending\" === thenable.status &&\n                  ((thenable.status = \"fulfilled\"),\n                  (thenable.value = fulfilledValue));\n              },\n              function (error) {\n                \"pending\" === thenable.status &&\n                  ((thenable.status = \"rejected\"), (thenable.reason = error));\n              }\n            )),\n        thenable.status)\n      ) {\n        case \"fulfilled\":\n          return thenable.value;\n        case \"rejected\":\n          throw thenable.reason;\n      }\n  }\n  throw thenable;\n}\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n  var type = typeof children;\n  if (\"undefined\" === type || \"boolean\" === type) children = null;\n  var invokeCallback = !1;\n  if (null === children) invokeCallback = !0;\n  else\n    switch (type) {\n      case \"bigint\":\n      case \"string\":\n      case \"number\":\n        invokeCallback = !0;\n        break;\n      case \"object\":\n        switch (children.$$typeof) {\n          case REACT_ELEMENT_TYPE:\n          case REACT_PORTAL_TYPE:\n            invokeCallback = !0;\n            break;\n          case REACT_LAZY_TYPE:\n            return (\n              (invokeCallback = children._init),\n              mapIntoArray(\n                invokeCallback(children._payload),\n                array,\n                escapedPrefix,\n                nameSoFar,\n                callback\n              )\n            );\n        }\n    }\n  if (invokeCallback)\n    return (\n      (callback = callback(children)),\n      (invokeCallback =\n        \"\" === nameSoFar ? \".\" + getElementKey(children, 0) : nameSoFar),\n      isArrayImpl(callback)\n        ? ((escapedPrefix = \"\"),\n          null != invokeCallback &&\n            (escapedPrefix =\n              invokeCallback.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n          mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n            return c;\n          }))\n        : null != callback &&\n          (isValidElement(callback) &&\n            (callback = cloneAndReplaceKey(\n              callback,\n              escapedPrefix +\n                (null == callback.key ||\n                (children && children.key === callback.key)\n                  ? \"\"\n                  : (\"\" + callback.key).replace(\n                      userProvidedKeyEscapeRegex,\n                      \"$&/\"\n                    ) + \"/\") +\n                invokeCallback\n            )),\n          array.push(callback)),\n      1\n    );\n  invokeCallback = 0;\n  var nextNamePrefix = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n  if (isArrayImpl(children))\n    for (var i = 0; i < children.length; i++)\n      (nameSoFar = children[i]),\n        (type = nextNamePrefix + getElementKey(nameSoFar, i)),\n        (invokeCallback += mapIntoArray(\n          nameSoFar,\n          array,\n          escapedPrefix,\n          type,\n          callback\n        ));\n  else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n    for (\n      children = i.call(children), i = 0;\n      !(nameSoFar = children.next()).done;\n\n    )\n      (nameSoFar = nameSoFar.value),\n        (type = nextNamePrefix + getElementKey(nameSoFar, i++)),\n        (invokeCallback += mapIntoArray(\n          nameSoFar,\n          array,\n          escapedPrefix,\n          type,\n          callback\n        ));\n  else if (\"object\" === type) {\n    if (\"function\" === typeof children.then)\n      return mapIntoArray(\n        resolveThenable(children),\n        array,\n        escapedPrefix,\n        nameSoFar,\n        callback\n      );\n    array = String(children);\n    throw Error(\n      \"Objects are not valid as a React child (found: \" +\n        (\"[object Object]\" === array\n          ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n          : array) +\n        \"). If you meant to render a collection of children, use an array instead.\"\n    );\n  }\n  return invokeCallback;\n}\nfunction mapChildren(children, func, context) {\n  if (null == children) return children;\n  var result = [],\n    count = 0;\n  mapIntoArray(children, result, \"\", \"\", function (child) {\n    return func.call(context, child, count++);\n  });\n  return result;\n}\nfunction lazyInitializer(payload) {\n  if (-1 === payload._status) {\n    var ctor = payload._result;\n    ctor = ctor();\n    ctor.then(\n      function (moduleObject) {\n        if (0 === payload._status || -1 === payload._status)\n          (payload._status = 1), (payload._result = moduleObject);\n      },\n      function (error) {\n        if (0 === payload._status || -1 === payload._status)\n          (payload._status = 2), (payload._result = error);\n      }\n    );\n    -1 === payload._status && ((payload._status = 0), (payload._result = ctor));\n  }\n  if (1 === payload._status) return payload._result.default;\n  throw payload._result;\n}\nvar reportGlobalError =\n    \"function\" === typeof reportError\n      ? reportError\n      : function (error) {\n          if (\n            \"object\" === typeof window &&\n            \"function\" === typeof window.ErrorEvent\n          ) {\n            var event = new window.ErrorEvent(\"error\", {\n              bubbles: !0,\n              cancelable: !0,\n              message:\n                \"object\" === typeof error &&\n                null !== error &&\n                \"string\" === typeof error.message\n                  ? String(error.message)\n                  : String(error),\n              error: error\n            });\n            if (!window.dispatchEvent(event)) return;\n          } else if (\n            \"object\" === typeof process &&\n            \"function\" === typeof process.emit\n          ) {\n            process.emit(\"uncaughtException\", error);\n            return;\n          }\n          console.error(error);\n        },\n  Children = {\n    map: mapChildren,\n    forEach: function (children, forEachFunc, forEachContext) {\n      mapChildren(\n        children,\n        function () {\n          forEachFunc.apply(this, arguments);\n        },\n        forEachContext\n      );\n    },\n    count: function (children) {\n      var n = 0;\n      mapChildren(children, function () {\n        n++;\n      });\n      return n;\n    },\n    toArray: function (children) {\n      return (\n        mapChildren(children, function (child) {\n          return child;\n        }) || []\n      );\n    },\n    only: function (children) {\n      if (!isValidElement(children))\n        throw Error(\n          \"React.Children.only expected to receive a single React element child.\"\n        );\n      return children;\n    }\n  };\nexports.Activity = REACT_ACTIVITY_TYPE;\nexports.Children = Children;\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n  ReactSharedInternals;\nexports.__COMPILER_RUNTIME = {\n  __proto__: null,\n  c: function (size) {\n    return ReactSharedInternals.H.useMemoCache(size);\n  }\n};\nexports.cache = function (fn) {\n  return function () {\n    return fn.apply(null, arguments);\n  };\n};\nexports.cacheSignal = function () {\n  return null;\n};\nexports.cloneElement = function (element, config, children) {\n  if (null === element || void 0 === element)\n    throw Error(\n      \"The argument must be a React element, but you passed \" + element + \".\"\n    );\n  var props = assign({}, element.props),\n    key = element.key;\n  if (null != config)\n    for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n      !hasOwnProperty.call(config, propName) ||\n        \"key\" === propName ||\n        \"__self\" === propName ||\n        \"__source\" === propName ||\n        (\"ref\" === propName && void 0 === config.ref) ||\n        (props[propName] = config[propName]);\n  var propName = arguments.length - 2;\n  if (1 === propName) props.children = children;\n  else if (1 < propName) {\n    for (var childArray = Array(propName), i = 0; i < propName; i++)\n      childArray[i] = arguments[i + 2];\n    props.children = childArray;\n  }\n  return ReactElement(element.type, key, props);\n};\nexports.createContext = function (defaultValue) {\n  defaultValue = {\n    $$typeof: REACT_CONTEXT_TYPE,\n    _currentValue: defaultValue,\n    _currentValue2: defaultValue,\n    _threadCount: 0,\n    Provider: null,\n    Consumer: null\n  };\n  defaultValue.Provider = defaultValue;\n  defaultValue.Consumer = {\n    $$typeof: REACT_CONSUMER_TYPE,\n    _context: defaultValue\n  };\n  return defaultValue;\n};\nexports.createElement = function (type, config, children) {\n  var propName,\n    props = {},\n    key = null;\n  if (null != config)\n    for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n      hasOwnProperty.call(config, propName) &&\n        \"key\" !== propName &&\n        \"__self\" !== propName &&\n        \"__source\" !== propName &&\n        (props[propName] = config[propName]);\n  var childrenLength = arguments.length - 2;\n  if (1 === childrenLength) props.children = children;\n  else if (1 < childrenLength) {\n    for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)\n      childArray[i] = arguments[i + 2];\n    props.children = childArray;\n  }\n  if (type && type.defaultProps)\n    for (propName in ((childrenLength = type.defaultProps), childrenLength))\n      void 0 === props[propName] &&\n        (props[propName] = childrenLength[propName]);\n  return ReactElement(type, key, props);\n};\nexports.createRef = function () {\n  return { current: null };\n};\nexports.forwardRef = function (render) {\n  return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };\n};\nexports.isValidElement = isValidElement;\nexports.lazy = function (ctor) {\n  return {\n    $$typeof: REACT_LAZY_TYPE,\n    _payload: { _status: -1, _result: ctor },\n    _init: lazyInitializer\n  };\n};\nexports.memo = function (type, compare) {\n  return {\n    $$typeof: REACT_MEMO_TYPE,\n    type: type,\n    compare: void 0 === compare ? null : compare\n  };\n};\nexports.startTransition = function (scope) {\n  var prevTransition = ReactSharedInternals.T,\n    currentTransition = {};\n  ReactSharedInternals.T = currentTransition;\n  try {\n    var returnValue = scope(),\n      onStartTransitionFinish = ReactSharedInternals.S;\n    null !== onStartTransitionFinish &&\n      onStartTransitionFinish(currentTransition, returnValue);\n    \"object\" === typeof returnValue &&\n      null !== returnValue &&\n      \"function\" === typeof returnValue.then &&\n      returnValue.then(noop, reportGlobalError);\n  } catch (error) {\n    reportGlobalError(error);\n  } finally {\n    null !== prevTransition &&\n      null !== currentTransition.types &&\n      (prevTransition.types = currentTransition.types),\n      (ReactSharedInternals.T = prevTransition);\n  }\n};\nexports.unstable_useCacheRefresh = function () {\n  return ReactSharedInternals.H.useCacheRefresh();\n};\nexports.use = function (usable) {\n  return ReactSharedInternals.H.use(usable);\n};\nexports.useActionState = function (action, initialState, permalink) {\n  return ReactSharedInternals.H.useActionState(action, initialState, permalink);\n};\nexports.useCallback = function (callback, deps) {\n  return ReactSharedInternals.H.useCallback(callback, deps);\n};\nexports.useContext = function (Context) {\n  return ReactSharedInternals.H.useContext(Context);\n};\nexports.useDebugValue = function () {};\nexports.useDeferredValue = function (value, initialValue) {\n  return ReactSharedInternals.H.useDeferredValue(value, initialValue);\n};\nexports.useEffect = function (create, deps) {\n  return ReactSharedInternals.H.useEffect(create, deps);\n};\nexports.useEffectEvent = function (callback) {\n  return ReactSharedInternals.H.useEffectEvent(callback);\n};\nexports.useId = function () {\n  return ReactSharedInternals.H.useId();\n};\nexports.useImperativeHandle = function (ref, create, deps) {\n  return ReactSharedInternals.H.useImperativeHandle(ref, create, deps);\n};\nexports.useInsertionEffect = function (create, deps) {\n  return ReactSharedInternals.H.useInsertionEffect(create, deps);\n};\nexports.useLayoutEffect = function (create, deps) {\n  return ReactSharedInternals.H.useLayoutEffect(create, deps);\n};\nexports.useMemo = function (create, deps) {\n  return ReactSharedInternals.H.useMemo(create, deps);\n};\nexports.useOptimistic = function (passthrough, reducer) {\n  return ReactSharedInternals.H.useOptimistic(passthrough, reducer);\n};\nexports.useReducer = function (reducer, initialArg, init) {\n  return ReactSharedInternals.H.useReducer(reducer, initialArg, init);\n};\nexports.useRef = function (initialValue) {\n  return ReactSharedInternals.H.useRef(initialValue);\n};\nexports.useState = function (initialState) {\n  return ReactSharedInternals.H.useState(initialState);\n};\nexports.useSyncExternalStore = function (\n  subscribe,\n  getSnapshot,\n  getServerSnapshot\n) {\n  return ReactSharedInternals.H.useSyncExternalStore(\n    subscribe,\n    getSnapshot,\n    getServerSnapshot\n  );\n};\nexports.useTransition = function () {\n  return ReactSharedInternals.H.useTransition();\n};\nexports.version = \"19.2.7\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react.production.js');\n} else {\n  module.exports = require('./cjs/react.development.js');\n}\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc');  // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\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\n'use strict';\n\nvar _assign = require('object-assign');\n\n// -- Inlined from fbjs --\n\nvar emptyObject = {};\n\nif (process.env.NODE_ENV !== 'production') {\n  Object.freeze(emptyObject);\n}\n\nvar validateFormat = function validateFormat(format) {};\n\nif (process.env.NODE_ENV !== 'production') {\n  validateFormat = function validateFormat(format) {\n    if (format === undefined) {\n      throw new Error('invariant requires an error message argument');\n    }\n  };\n}\n\nfunction _invariant(condition, format, a, b, c, d, e, f) {\n  validateFormat(format);\n\n  if (!condition) {\n    var error;\n    if (format === undefined) {\n      error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n    } else {\n      var args = [a, b, c, d, e, f];\n      var argIndex = 0;\n      error = new Error(format.replace(/%s/g, function () {\n        return args[argIndex++];\n      }));\n      error.name = 'Invariant Violation';\n    }\n\n    error.framesToPop = 1; // we don't care about invariant's own frame\n    throw error;\n  }\n}\n\nvar warning = function(){};\n\nif (process.env.NODE_ENV !== 'production') {\n  var printWarning = function printWarning(format) {\n    for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    var argIndex = 0;\n    var message = 'Warning: ' + format.replace(/%s/g, function () {\n      return args[argIndex++];\n    });\n    if (typeof console !== 'undefined') {\n      console.error(message);\n    }\n    try {\n      // --- Welcome to debugging React ---\n      // This error was thrown as a convenience so that you can use this stack\n      // to find the callsite that caused this warning to fire.\n      throw new Error(message);\n    } catch (x) {}\n  };\n\n  warning = function warning(condition, format) {\n    if (format === undefined) {\n      throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n    }\n\n    if (format.indexOf('Failed Composite propType: ') === 0) {\n      return; // Ignore CompositeComponent proptype check.\n    }\n\n    if (!condition) {\n      for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n        args[_key2 - 2] = arguments[_key2];\n      }\n\n      printWarning.apply(undefined, [format].concat(args));\n    }\n  };\n}\n\n// /-- Inlined from fbjs --\n\nvar MIXINS_KEY = 'mixins';\n\n// Helper function to allow the creation of anonymous functions which do not\n// have .name set to the name of the variable being assigned to.\nfunction identity(fn) {\n  return fn;\n}\n\nvar ReactPropTypeLocationNames;\nif (process.env.NODE_ENV !== 'production') {\n  ReactPropTypeLocationNames = {\n    prop: 'prop',\n    context: 'context',\n    childContext: 'child context'\n  };\n} else {\n  ReactPropTypeLocationNames = {};\n}\n\nfunction factory(ReactComponent, isValidElement, ReactNoopUpdateQueue) {\n  /**\n   * Policies that describe methods in `ReactClassInterface`.\n   */\n\n  var injectedMixins = [];\n\n  /**\n   * Composite components are higher-level components that compose other composite\n   * or host components.\n   *\n   * To create a new type of `ReactClass`, pass a specification of\n   * your new class to `React.createClass`. The only requirement of your class\n   * specification is that you implement a `render` method.\n   *\n   *   var MyComponent = React.createClass({\n   *     render: function() {\n   *       return <div>Hello World</div>;\n   *     }\n   *   });\n   *\n   * The class specification supports a specific protocol of methods that have\n   * special meaning (e.g. `render`). See `ReactClassInterface` for\n   * more the comprehensive protocol. Any other properties and methods in the\n   * class specification will be available on the prototype.\n   *\n   * @interface ReactClassInterface\n   * @internal\n   */\n  var ReactClassInterface = {\n    /**\n     * An array of Mixin objects to include when defining your component.\n     *\n     * @type {array}\n     * @optional\n     */\n    mixins: 'DEFINE_MANY',\n\n    /**\n     * An object containing properties and methods that should be defined on\n     * the component's constructor instead of its prototype (static methods).\n     *\n     * @type {object}\n     * @optional\n     */\n    statics: 'DEFINE_MANY',\n\n    /**\n     * Definition of prop types for this component.\n     *\n     * @type {object}\n     * @optional\n     */\n    propTypes: 'DEFINE_MANY',\n\n    /**\n     * Definition of context types for this component.\n     *\n     * @type {object}\n     * @optional\n     */\n    contextTypes: 'DEFINE_MANY',\n\n    /**\n     * Definition of context types this component sets for its children.\n     *\n     * @type {object}\n     * @optional\n     */\n    childContextTypes: 'DEFINE_MANY',\n\n    // ==== Definition methods ====\n\n    /**\n     * Invoked when the component is mounted. Values in the mapping will be set on\n     * `this.props` if that prop is not specified (i.e. using an `in` check).\n     *\n     * This method is invoked before `getInitialState` and therefore cannot rely\n     * on `this.state` or use `this.setState`.\n     *\n     * @return {object}\n     * @optional\n     */\n    getDefaultProps: 'DEFINE_MANY_MERGED',\n\n    /**\n     * Invoked once before the component is mounted. The return value will be used\n     * as the initial value of `this.state`.\n     *\n     *   getInitialState: function() {\n     *     return {\n     *       isOn: false,\n     *       fooBaz: new BazFoo()\n     *     }\n     *   }\n     *\n     * @return {object}\n     * @optional\n     */\n    getInitialState: 'DEFINE_MANY_MERGED',\n\n    /**\n     * @return {object}\n     * @optional\n     */\n    getChildContext: 'DEFINE_MANY_MERGED',\n\n    /**\n     * Uses props from `this.props` and state from `this.state` to render the\n     * structure of the component.\n     *\n     * No guarantees are made about when or how often this method is invoked, so\n     * it must not have side effects.\n     *\n     *   render: function() {\n     *     var name = this.props.name;\n     *     return <div>Hello, {name}!</div>;\n     *   }\n     *\n     * @return {ReactComponent}\n     * @required\n     */\n    render: 'DEFINE_ONCE',\n\n    // ==== Delegate methods ====\n\n    /**\n     * Invoked when the component is initially created and about to be mounted.\n     * This may have side effects, but any external subscriptions or data created\n     * by this method must be cleaned up in `componentWillUnmount`.\n     *\n     * @optional\n     */\n    componentWillMount: 'DEFINE_MANY',\n\n    /**\n     * Invoked when the component has been mounted and has a DOM representation.\n     * However, there is no guarantee that the DOM node is in the document.\n     *\n     * Use this as an opportunity to operate on the DOM when the component has\n     * been mounted (initialized and rendered) for the first time.\n     *\n     * @param {DOMElement} rootNode DOM element representing the component.\n     * @optional\n     */\n    componentDidMount: 'DEFINE_MANY',\n\n    /**\n     * Invoked before the component receives new props.\n     *\n     * Use this as an opportunity to react to a prop transition by updating the\n     * state using `this.setState`. Current props are accessed via `this.props`.\n     *\n     *   componentWillReceiveProps: function(nextProps, nextContext) {\n     *     this.setState({\n     *       likesIncreasing: nextProps.likeCount > this.props.likeCount\n     *     });\n     *   }\n     *\n     * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop\n     * transition may cause a state change, but the opposite is not true. If you\n     * need it, you are probably looking for `componentWillUpdate`.\n     *\n     * @param {object} nextProps\n     * @optional\n     */\n    componentWillReceiveProps: 'DEFINE_MANY',\n\n    /**\n     * Invoked while deciding if the component should be updated as a result of\n     * receiving new props, state and/or context.\n     *\n     * Use this as an opportunity to `return false` when you're certain that the\n     * transition to the new props/state/context will not require a component\n     * update.\n     *\n     *   shouldComponentUpdate: function(nextProps, nextState, nextContext) {\n     *     return !equal(nextProps, this.props) ||\n     *       !equal(nextState, this.state) ||\n     *       !equal(nextContext, this.context);\n     *   }\n     *\n     * @param {object} nextProps\n     * @param {?object} nextState\n     * @param {?object} nextContext\n     * @return {boolean} True if the component should update.\n     * @optional\n     */\n    shouldComponentUpdate: 'DEFINE_ONCE',\n\n    /**\n     * Invoked when the component is about to update due to a transition from\n     * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`\n     * and `nextContext`.\n     *\n     * Use this as an opportunity to perform preparation before an update occurs.\n     *\n     * NOTE: You **cannot** use `this.setState()` in this method.\n     *\n     * @param {object} nextProps\n     * @param {?object} nextState\n     * @param {?object} nextContext\n     * @param {ReactReconcileTransaction} transaction\n     * @optional\n     */\n    componentWillUpdate: 'DEFINE_MANY',\n\n    /**\n     * Invoked when the component's DOM representation has been updated.\n     *\n     * Use this as an opportunity to operate on the DOM when the component has\n     * been updated.\n     *\n     * @param {object} prevProps\n     * @param {?object} prevState\n     * @param {?object} prevContext\n     * @param {DOMElement} rootNode DOM element representing the component.\n     * @optional\n     */\n    componentDidUpdate: 'DEFINE_MANY',\n\n    /**\n     * Invoked when the component is about to be removed from its parent and have\n     * its DOM representation destroyed.\n     *\n     * Use this as an opportunity to deallocate any external resources.\n     *\n     * NOTE: There is no `componentDidUnmount` since your component will have been\n     * destroyed by that point.\n     *\n     * @optional\n     */\n    componentWillUnmount: 'DEFINE_MANY',\n\n    /**\n     * Replacement for (deprecated) `componentWillMount`.\n     *\n     * @optional\n     */\n    UNSAFE_componentWillMount: 'DEFINE_MANY',\n\n    /**\n     * Replacement for (deprecated) `componentWillReceiveProps`.\n     *\n     * @optional\n     */\n    UNSAFE_componentWillReceiveProps: 'DEFINE_MANY',\n\n    /**\n     * Replacement for (deprecated) `componentWillUpdate`.\n     *\n     * @optional\n     */\n    UNSAFE_componentWillUpdate: 'DEFINE_MANY',\n\n    // ==== Advanced methods ====\n\n    /**\n     * Updates the component's currently mounted DOM representation.\n     *\n     * By default, this implements React's rendering and reconciliation algorithm.\n     * Sophisticated clients may wish to override this.\n     *\n     * @param {ReactReconcileTransaction} transaction\n     * @internal\n     * @overridable\n     */\n    updateComponent: 'OVERRIDE_BASE'\n  };\n\n  /**\n   * Similar to ReactClassInterface but for static methods.\n   */\n  var ReactClassStaticInterface = {\n    /**\n     * This method is invoked after a component is instantiated and when it\n     * receives new props. Return an object to update state in response to\n     * prop changes. Return null to indicate no change to state.\n     *\n     * If an object is returned, its keys will be merged into the existing state.\n     *\n     * @return {object || null}\n     * @optional\n     */\n    getDerivedStateFromProps: 'DEFINE_MANY_MERGED'\n  };\n\n  /**\n   * Mapping from class specification keys to special processing functions.\n   *\n   * Although these are declared like instance properties in the specification\n   * when defining classes using `React.createClass`, they are actually static\n   * and are accessible on the constructor instead of the prototype. Despite\n   * being static, they must be defined outside of the \"statics\" key under\n   * which all other static methods are defined.\n   */\n  var RESERVED_SPEC_KEYS = {\n    displayName: function(Constructor, displayName) {\n      Constructor.displayName = displayName;\n    },\n    mixins: function(Constructor, mixins) {\n      if (mixins) {\n        for (var i = 0; i < mixins.length; i++) {\n          mixSpecIntoComponent(Constructor, mixins[i]);\n        }\n      }\n    },\n    childContextTypes: function(Constructor, childContextTypes) {\n      if (process.env.NODE_ENV !== 'production') {\n        validateTypeDef(Constructor, childContextTypes, 'childContext');\n      }\n      Constructor.childContextTypes = _assign(\n        {},\n        Constructor.childContextTypes,\n        childContextTypes\n      );\n    },\n    contextTypes: function(Constructor, contextTypes) {\n      if (process.env.NODE_ENV !== 'production') {\n        validateTypeDef(Constructor, contextTypes, 'context');\n      }\n      Constructor.contextTypes = _assign(\n        {},\n        Constructor.contextTypes,\n        contextTypes\n      );\n    },\n    /**\n     * Special case getDefaultProps which should move into statics but requires\n     * automatic merging.\n     */\n    getDefaultProps: function(Constructor, getDefaultProps) {\n      if (Constructor.getDefaultProps) {\n        Constructor.getDefaultProps = createMergedResultFunction(\n          Constructor.getDefaultProps,\n          getDefaultProps\n        );\n      } else {\n        Constructor.getDefaultProps = getDefaultProps;\n      }\n    },\n    propTypes: function(Constructor, propTypes) {\n      if (process.env.NODE_ENV !== 'production') {\n        validateTypeDef(Constructor, propTypes, 'prop');\n      }\n      Constructor.propTypes = _assign({}, Constructor.propTypes, propTypes);\n    },\n    statics: function(Constructor, statics) {\n      mixStaticSpecIntoComponent(Constructor, statics);\n    },\n    autobind: function() {}\n  };\n\n  function validateTypeDef(Constructor, typeDef, location) {\n    for (var propName in typeDef) {\n      if (typeDef.hasOwnProperty(propName)) {\n        // use a warning instead of an _invariant so components\n        // don't show up in prod but only in __DEV__\n        if (process.env.NODE_ENV !== 'production') {\n          warning(\n            typeof typeDef[propName] === 'function',\n            '%s: %s type `%s` is invalid; it must be a function, usually from ' +\n              'React.PropTypes.',\n            Constructor.displayName || 'ReactClass',\n            ReactPropTypeLocationNames[location],\n            propName\n          );\n        }\n      }\n    }\n  }\n\n  function validateMethodOverride(isAlreadyDefined, name) {\n    var specPolicy = ReactClassInterface.hasOwnProperty(name)\n      ? ReactClassInterface[name]\n      : null;\n\n    // Disallow overriding of base class methods unless explicitly allowed.\n    if (ReactClassMixin.hasOwnProperty(name)) {\n      _invariant(\n        specPolicy === 'OVERRIDE_BASE',\n        'ReactClassInterface: You are attempting to override ' +\n          '`%s` from your class specification. Ensure that your method names ' +\n          'do not overlap with React methods.',\n        name\n      );\n    }\n\n    // Disallow defining methods more than once unless explicitly allowed.\n    if (isAlreadyDefined) {\n      _invariant(\n        specPolicy === 'DEFINE_MANY' || specPolicy === 'DEFINE_MANY_MERGED',\n        'ReactClassInterface: You are attempting to define ' +\n          '`%s` on your component more than once. This conflict may be due ' +\n          'to a mixin.',\n        name\n      );\n    }\n  }\n\n  /**\n   * Mixin helper which handles policy validation and reserved\n   * specification keys when building React classes.\n   */\n  function mixSpecIntoComponent(Constructor, spec) {\n    if (!spec) {\n      if (process.env.NODE_ENV !== 'production') {\n        var typeofSpec = typeof spec;\n        var isMixinValid = typeofSpec === 'object' && spec !== null;\n\n        if (process.env.NODE_ENV !== 'production') {\n          warning(\n            isMixinValid,\n            \"%s: You're attempting to include a mixin that is either null \" +\n              'or not an object. Check the mixins included by the component, ' +\n              'as well as any mixins they include themselves. ' +\n              'Expected object but got %s.',\n            Constructor.displayName || 'ReactClass',\n            spec === null ? null : typeofSpec\n          );\n        }\n      }\n\n      return;\n    }\n\n    _invariant(\n      typeof spec !== 'function',\n      \"ReactClass: You're attempting to \" +\n        'use a component class or function as a mixin. Instead, just use a ' +\n        'regular object.'\n    );\n    _invariant(\n      !isValidElement(spec),\n      \"ReactClass: You're attempting to \" +\n        'use a component as a mixin. Instead, just use a regular object.'\n    );\n\n    var proto = Constructor.prototype;\n    var autoBindPairs = proto.__reactAutoBindPairs;\n\n    // By handling mixins before any other properties, we ensure the same\n    // chaining order is applied to methods with DEFINE_MANY policy, whether\n    // mixins are listed before or after these methods in the spec.\n    if (spec.hasOwnProperty(MIXINS_KEY)) {\n      RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);\n    }\n\n    for (var name in spec) {\n      if (!spec.hasOwnProperty(name)) {\n        continue;\n      }\n\n      if (name === MIXINS_KEY) {\n        // We have already handled mixins in a special case above.\n        continue;\n      }\n\n      var property = spec[name];\n      var isAlreadyDefined = proto.hasOwnProperty(name);\n      validateMethodOverride(isAlreadyDefined, name);\n\n      if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {\n        RESERVED_SPEC_KEYS[name](Constructor, property);\n      } else {\n        // Setup methods on prototype:\n        // The following member methods should not be automatically bound:\n        // 1. Expected ReactClass methods (in the \"interface\").\n        // 2. Overridden methods (that were mixed in).\n        var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);\n        var isFunction = typeof property === 'function';\n        var shouldAutoBind =\n          isFunction &&\n          !isReactClassMethod &&\n          !isAlreadyDefined &&\n          spec.autobind !== false;\n\n        if (shouldAutoBind) {\n          autoBindPairs.push(name, property);\n          proto[name] = property;\n        } else {\n          if (isAlreadyDefined) {\n            var specPolicy = ReactClassInterface[name];\n\n            // These cases should already be caught by validateMethodOverride.\n            _invariant(\n              isReactClassMethod &&\n                (specPolicy === 'DEFINE_MANY_MERGED' ||\n                  specPolicy === 'DEFINE_MANY'),\n              'ReactClass: Unexpected spec policy %s for key %s ' +\n                'when mixing in component specs.',\n              specPolicy,\n              name\n            );\n\n            // For methods which are defined more than once, call the existing\n            // methods before calling the new property, merging if appropriate.\n            if (specPolicy === 'DEFINE_MANY_MERGED') {\n              proto[name] = createMergedResultFunction(proto[name], property);\n            } else if (specPolicy === 'DEFINE_MANY') {\n              proto[name] = createChainedFunction(proto[name], property);\n            }\n          } else {\n            proto[name] = property;\n            if (process.env.NODE_ENV !== 'production') {\n              // Add verbose displayName to the function, which helps when looking\n              // at profiling tools.\n              if (typeof property === 'function' && spec.displayName) {\n                proto[name].displayName = spec.displayName + '_' + name;\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n\n  function mixStaticSpecIntoComponent(Constructor, statics) {\n    if (!statics) {\n      return;\n    }\n\n    for (var name in statics) {\n      var property = statics[name];\n      if (!statics.hasOwnProperty(name)) {\n        continue;\n      }\n\n      var isReserved = name in RESERVED_SPEC_KEYS;\n      _invariant(\n        !isReserved,\n        'ReactClass: You are attempting to define a reserved ' +\n          'property, `%s`, that shouldn\\'t be on the \"statics\" key. Define it ' +\n          'as an instance property instead; it will still be accessible on the ' +\n          'constructor.',\n        name\n      );\n\n      var isAlreadyDefined = name in Constructor;\n      if (isAlreadyDefined) {\n        var specPolicy = ReactClassStaticInterface.hasOwnProperty(name)\n          ? ReactClassStaticInterface[name]\n          : null;\n\n        _invariant(\n          specPolicy === 'DEFINE_MANY_MERGED',\n          'ReactClass: You are attempting to define ' +\n            '`%s` on your component more than once. This conflict may be ' +\n            'due to a mixin.',\n          name\n        );\n\n        Constructor[name] = createMergedResultFunction(Constructor[name], property);\n\n        return;\n      }\n\n      Constructor[name] = property;\n    }\n  }\n\n  /**\n   * Merge two objects, but throw if both contain the same key.\n   *\n   * @param {object} one The first object, which is mutated.\n   * @param {object} two The second object\n   * @return {object} one after it has been mutated to contain everything in two.\n   */\n  function mergeIntoWithNoDuplicateKeys(one, two) {\n    _invariant(\n      one && two && typeof one === 'object' && typeof two === 'object',\n      'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.'\n    );\n\n    for (var key in two) {\n      if (two.hasOwnProperty(key)) {\n        _invariant(\n          one[key] === undefined,\n          'mergeIntoWithNoDuplicateKeys(): ' +\n            'Tried to merge two objects with the same key: `%s`. This conflict ' +\n            'may be due to a mixin; in particular, this may be caused by two ' +\n            'getInitialState() or getDefaultProps() methods returning objects ' +\n            'with clashing keys.',\n          key\n        );\n        one[key] = two[key];\n      }\n    }\n    return one;\n  }\n\n  /**\n   * Creates a function that invokes two functions and merges their return values.\n   *\n   * @param {function} one Function to invoke first.\n   * @param {function} two Function to invoke second.\n   * @return {function} Function that invokes the two argument functions.\n   * @private\n   */\n  function createMergedResultFunction(one, two) {\n    return function mergedResult() {\n      var a = one.apply(this, arguments);\n      var b = two.apply(this, arguments);\n      if (a == null) {\n        return b;\n      } else if (b == null) {\n        return a;\n      }\n      var c = {};\n      mergeIntoWithNoDuplicateKeys(c, a);\n      mergeIntoWithNoDuplicateKeys(c, b);\n      return c;\n    };\n  }\n\n  /**\n   * Creates a function that invokes two functions and ignores their return vales.\n   *\n   * @param {function} one Function to invoke first.\n   * @param {function} two Function to invoke second.\n   * @return {function} Function that invokes the two argument functions.\n   * @private\n   */\n  function createChainedFunction(one, two) {\n    return function chainedFunction() {\n      one.apply(this, arguments);\n      two.apply(this, arguments);\n    };\n  }\n\n  /**\n   * Binds a method to the component.\n   *\n   * @param {object} component Component whose method is going to be bound.\n   * @param {function} method Method to be bound.\n   * @return {function} The bound method.\n   */\n  function bindAutoBindMethod(component, method) {\n    var boundMethod = method.bind(component);\n    if (process.env.NODE_ENV !== 'production') {\n      boundMethod.__reactBoundContext = component;\n      boundMethod.__reactBoundMethod = method;\n      boundMethod.__reactBoundArguments = null;\n      var componentName = component.constructor.displayName;\n      var _bind = boundMethod.bind;\n      boundMethod.bind = function(newThis) {\n        for (\n          var _len = arguments.length,\n            args = Array(_len > 1 ? _len - 1 : 0),\n            _key = 1;\n          _key < _len;\n          _key++\n        ) {\n          args[_key - 1] = arguments[_key];\n        }\n\n        // User is trying to bind() an autobound method; we effectively will\n        // ignore the value of \"this\" that the user is trying to use, so\n        // let's warn.\n        if (newThis !== component && newThis !== null) {\n          if (process.env.NODE_ENV !== 'production') {\n            warning(\n              false,\n              'bind(): React component methods may only be bound to the ' +\n                'component instance. See %s',\n              componentName\n            );\n          }\n        } else if (!args.length) {\n          if (process.env.NODE_ENV !== 'production') {\n            warning(\n              false,\n              'bind(): You are binding a component method to the component. ' +\n                'React does this for you automatically in a high-performance ' +\n                'way, so you can safely remove this call. See %s',\n              componentName\n            );\n          }\n          return boundMethod;\n        }\n        var reboundMethod = _bind.apply(boundMethod, arguments);\n        reboundMethod.__reactBoundContext = component;\n        reboundMethod.__reactBoundMethod = method;\n        reboundMethod.__reactBoundArguments = args;\n        return reboundMethod;\n      };\n    }\n    return boundMethod;\n  }\n\n  /**\n   * Binds all auto-bound methods in a component.\n   *\n   * @param {object} component Component whose method is going to be bound.\n   */\n  function bindAutoBindMethods(component) {\n    var pairs = component.__reactAutoBindPairs;\n    for (var i = 0; i < pairs.length; i += 2) {\n      var autoBindKey = pairs[i];\n      var method = pairs[i + 1];\n      component[autoBindKey] = bindAutoBindMethod(component, method);\n    }\n  }\n\n  var IsMountedPreMixin = {\n    componentDidMount: function() {\n      this.__isMounted = true;\n    }\n  };\n\n  var IsMountedPostMixin = {\n    componentWillUnmount: function() {\n      this.__isMounted = false;\n    }\n  };\n\n  /**\n   * Add more to the ReactClass base class. These are all legacy features and\n   * therefore not already part of the modern ReactComponent.\n   */\n  var ReactClassMixin = {\n    /**\n     * TODO: This will be deprecated because state should always keep a consistent\n     * type signature and the only use case for this, is to avoid that.\n     */\n    replaceState: function(newState, callback) {\n      this.updater.enqueueReplaceState(this, newState, callback);\n    },\n\n    /**\n     * Checks whether or not this composite component is mounted.\n     * @return {boolean} True if mounted, false otherwise.\n     * @protected\n     * @final\n     */\n    isMounted: function() {\n      if (process.env.NODE_ENV !== 'production') {\n        warning(\n          this.__didWarnIsMounted,\n          '%s: isMounted is deprecated. Instead, make sure to clean up ' +\n            'subscriptions and pending requests in componentWillUnmount to ' +\n            'prevent memory leaks.',\n          (this.constructor && this.constructor.displayName) ||\n            this.name ||\n            'Component'\n        );\n        this.__didWarnIsMounted = true;\n      }\n      return !!this.__isMounted;\n    }\n  };\n\n  var ReactClassComponent = function() {};\n  _assign(\n    ReactClassComponent.prototype,\n    ReactComponent.prototype,\n    ReactClassMixin\n  );\n\n  /**\n   * Creates a composite component class given a class specification.\n   * See https://facebook.github.io/react/docs/top-level-api.html#react.createclass\n   *\n   * @param {object} spec Class specification (which must define `render`).\n   * @return {function} Component constructor function.\n   * @public\n   */\n  function createClass(spec) {\n    // To keep our warnings more understandable, we'll use a little hack here to\n    // ensure that Constructor.name !== 'Constructor'. This makes sure we don't\n    // unnecessarily identify a class without displayName as 'Constructor'.\n    var Constructor = identity(function(props, context, updater) {\n      // This constructor gets overridden by mocks. The argument is used\n      // by mocks to assert on what gets mounted.\n\n      if (process.env.NODE_ENV !== 'production') {\n        warning(\n          this instanceof Constructor,\n          'Something is calling a React component directly. Use a factory or ' +\n            'JSX instead. See: https://fb.me/react-legacyfactory'\n        );\n      }\n\n      // Wire up auto-binding\n      if (this.__reactAutoBindPairs.length) {\n        bindAutoBindMethods(this);\n      }\n\n      this.props = props;\n      this.context = context;\n      this.refs = emptyObject;\n      this.updater = updater || ReactNoopUpdateQueue;\n\n      this.state = null;\n\n      // ReactClasses doesn't have constructors. Instead, they use the\n      // getInitialState and componentWillMount methods for initialization.\n\n      var initialState = this.getInitialState ? this.getInitialState() : null;\n      if (process.env.NODE_ENV !== 'production') {\n        // We allow auto-mocks to proceed as if they're returning null.\n        if (\n          initialState === undefined &&\n          this.getInitialState._isMockFunction\n        ) {\n          // This is probably bad practice. Consider warning here and\n          // deprecating this convenience.\n          initialState = null;\n        }\n      }\n      _invariant(\n        typeof initialState === 'object' && !Array.isArray(initialState),\n        '%s.getInitialState(): must return an object or null',\n        Constructor.displayName || 'ReactCompositeComponent'\n      );\n\n      this.state = initialState;\n    });\n    Constructor.prototype = new ReactClassComponent();\n    Constructor.prototype.constructor = Constructor;\n    Constructor.prototype.__reactAutoBindPairs = [];\n\n    injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));\n\n    mixSpecIntoComponent(Constructor, IsMountedPreMixin);\n    mixSpecIntoComponent(Constructor, spec);\n    mixSpecIntoComponent(Constructor, IsMountedPostMixin);\n\n    // Initialize the defaultProps property after all mixins have been merged.\n    if (Constructor.getDefaultProps) {\n      Constructor.defaultProps = Constructor.getDefaultProps();\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      // This is a tag to indicate that the use of these method names is ok,\n      // since it's used with createClass. If it's not, then it's likely a\n      // mistake so we'll warn you to use the static property, property\n      // initializer or constructor respectively.\n      if (Constructor.getDefaultProps) {\n        Constructor.getDefaultProps.isReactClassApproved = {};\n      }\n      if (Constructor.prototype.getInitialState) {\n        Constructor.prototype.getInitialState.isReactClassApproved = {};\n      }\n    }\n\n    _invariant(\n      Constructor.prototype.render,\n      'createClass(...): Class specification must implement a `render` method.'\n    );\n\n    if (process.env.NODE_ENV !== 'production') {\n      warning(\n        !Constructor.prototype.componentShouldUpdate,\n        '%s has a method called ' +\n          'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' +\n          'The name is phrased as a question because the function is ' +\n          'expected to return a value.',\n        spec.displayName || 'A component'\n      );\n      warning(\n        !Constructor.prototype.componentWillRecieveProps,\n        '%s has a method called ' +\n          'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?',\n        spec.displayName || 'A component'\n      );\n      warning(\n        !Constructor.prototype.UNSAFE_componentWillRecieveProps,\n        '%s has a method called UNSAFE_componentWillRecieveProps(). ' +\n          'Did you mean UNSAFE_componentWillReceiveProps()?',\n        spec.displayName || 'A component'\n      );\n    }\n\n    // Reduce time spent doing lookups by setting these on the prototype.\n    for (var methodName in ReactClassInterface) {\n      if (!Constructor.prototype[methodName]) {\n        Constructor.prototype[methodName] = null;\n      }\n    }\n\n    return Constructor;\n  }\n\n  return createClass;\n}\n\nmodule.exports = factory;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\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\n'use strict';\n\nvar React = require('react');\nvar factory = require('./factory');\n\nif (typeof React === 'undefined') {\n  throw Error(\n    'create-react-class could not find the React object. If you are using script tags, ' +\n      'make sure that React is being loaded before create-react-class.'\n  );\n}\n\n// Hack to grab NoopUpdateQueue from isomorphic React\nvar ReactNoopUpdateQueue = new React.Component().updater;\n\nmodule.exports = factory(\n  React.Component,\n  React.isValidElement,\n  ReactNoopUpdateQueue\n);\n","export { default as BROWSER } from 'esm-env/browser';\nexport { default as DEV } from 'esm-env/development';\nexport { default as NODE } from 'esm-env/node';\n","// 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 includes = Array.prototype.includes;\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;\nexport var has_own_property = Object.prototype.hasOwnProperty;\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=void]\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\n/**\n * @param {Record<string | symbol, unknown>} obj\n * @param {Array<string | symbol>} keys\n * @returns {Record<string | symbol, unknown>}\n */\nexport function exclude_from_object(obj, keys) {\n\t/** @type {Record<string | symbol, 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\tfor (var symbol of Object.getOwnPropertySymbols(obj)) {\n\t\tif (Object.propertyIsEnumerable.call(obj, symbol) && !keys.includes(symbol)) {\n\t\t\tresult[symbol] = obj[symbol];\n\t\t}\n\t}\n\n\treturn result;\n}\n","// General flags\nexport const DERIVED = 1 << 1;\nexport const EFFECT = 1 << 2;\nexport const RENDER_EFFECT = 1 << 3;\n/**\n * An effect that does not destroy its child effects when it reruns.\n * Runs as part of render effects, i.e. not eagerly as part of tree traversal or effect flushing.\n */\nexport const MANAGED_EFFECT = 1 << 24;\n/**\n * An effect that does not destroy its child effects when it reruns (like MANAGED_EFFECT).\n * Runs eagerly as part of tree traversal or effect flushing.\n */\nexport const BLOCK_EFFECT = 1 << 4;\nexport const BRANCH_EFFECT = 1 << 5;\nexport const ROOT_EFFECT = 1 << 6;\nexport const BOUNDARY_EFFECT = 1 << 7;\n/**\n * Indicates that a reaction is connected to an effect root — either it is an effect,\n * or it is a derived that is depended on by at least one effect. If a derived has\n * no dependents, we can disconnect it from the graph, allowing it to either be\n * GC'd or reconnected later if an effect comes to depend on it again\n */\nexport const CONNECTED = 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;\n/** Set once a reaction has run for the first time */\nexport const REACTION_RAN = 1 << 15;\n/** Effect is in the process of getting destroyed. Can be observed in child teardown functions */\nexport const DESTROYING = 1 << 25;\n\n// Flags exclusive to effects\n/**\n * 'Transparent' effects do not create a transition boundary.\n * This is on a block effect 99% of the time but may also be on a branch effect if its parent block effect was pruned\n */\nexport const EFFECT_TRANSPARENT = 1 << 16;\nexport const EAGER_EFFECT = 1 << 17;\nexport const HEAD_EFFECT = 1 << 18;\nexport const EFFECT_PRESERVED = 1 << 19;\nexport const USER_EFFECT = 1 << 20;\nexport const EFFECT_OFFSCREEN = 1 << 25;\n\n// Flags exclusive to deriveds\n/**\n * Tells that we marked this derived and its reactions as visited during the \"mark as (maybe) dirty\"-phase.\n * Will be lifted during execution of the derived and during checking its dirty state (both are necessary\n * because a derived might be checked but not executed). This is a pure performance optimization flag and\n * should not be used for any other purpose!\n */\nexport const WAS_MARKED = 1 << 16;\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');\nexport const ATTRIBUTES_CACHE = Symbol('attributes');\nexport const CLASS_CACHE = Symbol('class');\nexport const STYLE_CACHE = Symbol('style');\nexport const TEXT_CACHE = Symbol('text');\nexport const FORM_RESET_HANDLER = Symbol('form reset');\n/** An anchor might change, via this symbol on the original anchor we can tell HMR about the updated anchor */\nexport const HMR_ANCHOR = Symbol('hmr anchor');\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 IS_XHTML =\n\t// We gotta write it like this because after downleveling the pure comment may end up in the wrong location\n\t!!globalThis.document?.contentType &&\n\t/* @__PURE__ */ globalThis.document.contentType.includes('xml');\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 use `%name%(...)` unless the `experimental.async` compiler option is `true`\n * @param {string} name\n * @returns {never}\n */\nexport function experimental_async_required(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`experimental_async_required\\nCannot use \\`${name}(...)\\` unless the \\`experimental.async\\` compiler option is \\`true\\`\\nhttps://svelte.dev/e/experimental_async_required`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/experimental_async_required`);\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 * An invariant violation occurred, meaning Svelte's internal assumptions were flawed. This is a bug in Svelte, not your app — please open an issue at https://github.com/sveltejs/svelte, citing the following message: \"%message%\"\n * @param {string} message\n * @returns {never}\n */\nexport function invariant_violation(message) {\n\tif (DEV) {\n\t\tconst error = new Error(`invariant_violation\\nAn invariant violation occurred, meaning Svelte's internal assumptions were flawed. This is a bug in Svelte, not your app — please open an issue at https://github.com/sveltejs/svelte, citing the following message: \"${message}\"\\nhttps://svelte.dev/e/invariant_violation`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/invariant_violation`);\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 * Context was not set in a parent component\n * @returns {never}\n */\nexport function missing_context() {\n\tif (DEV) {\n\t\tconst error = new Error(`missing_context\\nContext was not set in a parent component\\nhttps://svelte.dev/e/missing_context`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/missing_context`);\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 * Keyed each block has key that is not idempotent — the key for item at index %index% was `%a%` but is now `%b%`. Keys must be the same each time for a given item\n * @param {string} index\n * @param {string} a\n * @param {string} b\n * @returns {never}\n */\nexport function each_key_volatile(index, a, b) {\n\tif (DEV) {\n\t\tconst error = new Error(`each_key_volatile\\nKeyed each block has key that is not idempotent — the key for item at index ${index} was \\`${a}\\` but is now \\`${b}\\`. Keys must be the same each time for a given item\\nhttps://svelte.dev/e/each_key_volatile`);\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_volatile`);\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 * Cannot commit a fork that was already discarded\n * @returns {never}\n */\nexport function fork_discarded() {\n\tif (DEV) {\n\t\tconst error = new Error(`fork_discarded\\nCannot commit a fork that was already discarded\\nhttps://svelte.dev/e/fork_discarded`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/fork_discarded`);\n\t}\n}\n\n/**\n * Cannot create a fork inside an effect or when state changes are pending\n * @returns {never}\n */\nexport function fork_timing() {\n\tif (DEV) {\n\t\tconst error = new Error(`fork_timing\\nCannot create a fork inside an effect or when state changes are pending\\nhttps://svelte.dev/e/fork_timing`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/fork_timing`);\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 * Expected to find a hydratable with key `%key%` during hydration, but did not.\n * @param {string} key\n * @returns {never}\n */\nexport function hydratable_missing_but_required(key) {\n\tif (DEV) {\n\t\tconst error = new Error(`hydratable_missing_but_required\\nExpected to find a hydratable with key \\`${key}\\` during hydration, but did not.\\nhttps://svelte.dev/e/hydratable_missing_but_required`);\n\n\t\terror.name = 'Svelte error';\n\n\t\tthrow error;\n\t} else {\n\t\tthrow new Error(`https://svelte.dev/e/hydratable_missing_but_required`);\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 = '[!';\n/** used to indicate that a boundary's `failed` snippet was rendered on the server */\nexport const HYDRATION_START_FAILED = '[?';\nexport const HYDRATION_END = ']';\nexport const HYDRATION_ERROR = {};\n\nexport const ELEMENT_IS_NAMESPACED = 1;\nexport const ELEMENT_PRESERVE_ATTRIBUTE_CASE = 1 << 1;\nexport const ELEMENT_IS_INPUT = 1 << 2;\n\nexport const UNINITIALIZED = Symbol('uninitialized');\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 * Reading a derived belonging to a now-destroyed effect may result in stale values\n */\nexport function derived_inert() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] derived_inert\\n%cReading a derived belonging to a now-destroyed effect may result in stale values\\nhttps://svelte.dev/e/derived_inert`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/derived_inert`);\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 * Expected to find a hydratable with key `%key%` during hydration, but did not.\n * @param {string} key\n */\nexport function hydratable_missing_but_expected(key) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] hydratable_missing_but_expected\\n%cExpected to find a hydratable with key \\`${key}\\` during hydration, but did not.\\nhttps://svelte.dev/e/hydratable_missing_but_expected`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/hydratable_missing_but_expected`);\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 * Tried to unmount a state proxy, rather than a component\n */\nexport function state_proxy_unmount() {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] state_proxy_unmount\\n%cTried to unmount a state proxy, rather than a component\\nhttps://svelte.dev/e/state_proxy_unmount`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/state_proxy_unmount`);\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 | null} 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(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 * Skips or removes (depending on {@link remove}) all nodes starting at `hydrate_node` up until the next hydration end comment\n * @param {boolean} remove\n */\nexport function skip_nodes(remove = true) {\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 (\n\t\t\t\tdata === HYDRATION_START ||\n\t\t\t\tdata === HYDRATION_START_ELSE ||\n\t\t\t\t// \"[1\", \"[2\", etc. for if blocks\n\t\t\t\t(data[0] === '[' && !isNaN(Number(data.slice(1))))\n\t\t\t) {\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\tif (remove) node.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","/** True if experimental.async=true */\nexport let async_mode_flag = false;\n/** True if we're not certain that we only have Svelte 5 code in the compilation */\nexport let legacy_mode_flag = false;\n/** True if $inspect.trace is used */\nexport let tracing_mode_flag = false;\n\nexport function enable_async_mode_flag() {\n\tasync_mode_flag = true;\n}\n\n/** ONLY USE THIS DURING TESTING */\nexport function disable_async_mode_flag() {\n\tasync_mode_flag = false;\n}\n\nexport function enable_legacy_mode_flag() {\n\tlegacy_mode_flag = true;\n}\n\nexport function enable_tracing_mode_flag() {\n\ttracing_mode_flag = true;\n}\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 * `<svelte:element this=\"%tag%\">` is a void element — it cannot have content\n * @param {string} tag\n */\nexport function dynamic_void_element_content(tag) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] dynamic_void_element_content\\n%c\\`<svelte:element this=\"${tag}\">\\` is a void element — it cannot have content\\nhttps://svelte.dev/e/dynamic_void_element_content`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/dynamic_void_element_content`);\n\t}\n}\n\n/**\n * The following properties cannot be cloned with `$state.snapshot` — the return value contains the originals:\n * \n * %properties%\n * @param {string | undefined | null} [properties]\n */\nexport function state_snapshot_uncloneable(properties) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] state_snapshot_uncloneable\\n%c${properties\n\t\t\t\t? `The following properties cannot be cloned with \\`$state.snapshot\\` — the return value contains the originals:\n\n${properties}`\n\t\t\t\t: 'Value cannot be cloned with `$state.snapshot` — the original value was returned'}\\nhttps://svelte.dev/e/state_snapshot_uncloneable`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/state_snapshot_uncloneable`);\n\t}\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 * @param {boolean} [no_tojson]\n * @returns {Snapshot<T>}\n */\nexport function snapshot(value, skip_warning = false, no_tojson = 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, null, no_tojson);\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, null, no_tojson);\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 * @param {boolean} [no_tojson]\n * @returns {Snapshot<T>}\n */\nfunction clone(value, cloned, path, paths, original = null, no_tojson = false) {\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, null, no_tojson);\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 of Object.keys(value)) {\n\t\t\t\tcopy[key] = clone(\n\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\tvalue[key],\n\t\t\t\t\tcloned,\n\t\t\t\t\tDEV ? `${path}.${key}` : path,\n\t\t\t\t\tpaths,\n\t\t\t\t\tnull,\n\t\t\t\t\tno_tojson\n\t\t\t\t);\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' && !no_tojson) {\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 { Derived, Reaction, Value } from '#client' */\nimport { UNINITIALIZED } from '../../../constants.js';\nimport { snapshot } from '../../shared/clone.js';\nimport { DERIVED, ASYNC, PROXY_PATH_SYMBOL, STATE_SYMBOL } from '#client/constants';\nimport { effect_tracking } from '../reactivity/effects.js';\nimport { active_reaction, untrack } from '../runtime.js';\n\n/**\n * @typedef {{\n *   traces: Error[];\n * }} TraceEntry\n */\n\n/** @type {{ reaction: Reaction | null, entries: Map<Value, TraceEntry> } | null} */\nexport let tracing_expressions = null;\n\n/**\n * @param {Value} signal\n * @param {TraceEntry} [entry]\n */\nfunction log_entry(signal, entry) {\n\tconst value = signal.v;\n\n\tif (value === UNINITIALIZED) {\n\t\treturn;\n\t}\n\n\tconst type = get_type(signal);\n\tconst current_reaction = /** @type {Reaction} */ (active_reaction);\n\tconst dirty = signal.wv > current_reaction.wv || current_reaction.wv === 0;\n\tconst style = dirty\n\t\t? 'color: CornflowerBlue; font-weight: bold'\n\t\t: 'color: grey; font-weight: normal';\n\n\t// eslint-disable-next-line no-console\n\tconsole.groupCollapsed(\n\t\tsignal.label ? `%c${type}%c ${signal.label}` : `%c${type}%c`,\n\t\tstyle,\n\t\tdirty ? 'font-weight: normal' : style,\n\t\ttypeof value === 'object' && value !== null && STATE_SYMBOL in value\n\t\t\t? snapshot(value, true)\n\t\t\t: value\n\t);\n\n\tif (type === '$derived') {\n\t\tconst deps = new Set(/** @type {Derived} */ (signal).deps);\n\t\tfor (const dep of deps) {\n\t\t\tlog_entry(dep);\n\t\t}\n\t}\n\n\tif (signal.created) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log(signal.created);\n\t}\n\n\tif (dirty && signal.updated) {\n\t\tfor (const updated of signal.updated.values()) {\n\t\t\tif (updated.error) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.log(updated.error);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (entry) {\n\t\tfor (var trace of entry.traces) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log(trace);\n\t\t}\n\t}\n\n\t// eslint-disable-next-line no-console\n\tconsole.groupEnd();\n}\n\n/**\n * @param {Value} signal\n * @returns {'$state' | '$derived' | 'store'}\n */\nfunction get_type(signal) {\n\tif ((signal.f & (DERIVED | ASYNC)) !== 0) return '$derived';\n\treturn signal.label?.startsWith('$') ? 'store' : '$state';\n}\n\n/**\n * @template T\n * @param {() => string} label\n * @param {() => T} fn\n */\nexport function trace(label, fn) {\n\tvar previously_tracing_expressions = tracing_expressions;\n\n\ttry {\n\t\ttracing_expressions = { entries: new Map(), reaction: active_reaction };\n\n\t\tvar start = performance.now();\n\t\tvar value = fn();\n\t\tvar time = (performance.now() - start).toFixed(2);\n\n\t\tvar prefix = untrack(label);\n\n\t\tif (!effect_tracking()) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log(`${prefix} %cran outside of an effect (${time}ms)`, 'color: grey');\n\t\t} else if (tracing_expressions.entries.size === 0) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log(`${prefix} %cno reactive dependencies (${time}ms)`, 'color: grey');\n\t\t} else {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.group(`${prefix} %c(${time}ms)`, 'color: grey');\n\n\t\t\tvar entries = tracing_expressions.entries;\n\n\t\t\tuntrack(() => {\n\t\t\t\tfor (const [signal, traces] of entries) {\n\t\t\t\t\tlog_entry(signal, traces);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\ttracing_expressions = null;\n\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.groupEnd();\n\t\t}\n\n\t\treturn value;\n\t} finally {\n\t\ttracing_expressions = previously_tracing_expressions;\n\t}\n}\n\n/**\n * @param {Value} source\n * @param {string} label\n */\nexport function tag(source, label) {\n\tsource.label = label;\n\ttag_proxy(source.v, label);\n\n\treturn source;\n}\n\n/**\n * @param {unknown} value\n * @param {string} label\n */\nexport function tag_proxy(value, label) {\n\t// @ts-expect-error\n\tvalue?.[PROXY_PATH_SYMBOL]?.(label);\n\treturn value;\n}\n\n/**\n * @param {unknown} value\n */\nexport function label(value) {\n\tif (typeof value === 'symbol') return `Symbol(${value.description})`;\n\tif (typeof value === 'function') return '<function>';\n\tif (typeof value === 'object' && value) return '<object>';\n\treturn String(value);\n}\n","import { DEV } from 'esm-env';\nimport { define_property } from './utils.js';\nimport * as e from './errors.js';\n\n/**\n * @param {string} label\n * @returns {Error & { stack: string } | null}\n */\nexport function get_error(label) {\n\tconst error = new Error();\n\tconst stack = get_stack();\n\n\tif (stack.length === 0) {\n\t\treturn null;\n\t}\n\n\tstack.unshift('\\n');\n\n\tdefine_property(error, 'stack', {\n\t\tvalue: stack.join('\\n')\n\t});\n\n\tdefine_property(error, 'name', {\n\t\tvalue: label\n\t});\n\n\treturn /** @type {Error & { stack: string }} */ (error);\n}\n\n/**\n * @returns {string[]}\n */\nexport function get_stack() {\n\t// @ts-ignore - doesn't exist everywhere\n\tconst limit = Error.stackTraceLimit;\n\t// @ts-ignore - doesn't exist everywhere\n\tError.stackTraceLimit = Infinity;\n\tconst stack = new Error().stack;\n\t// @ts-ignore - doesn't exist everywhere\n\tError.stackTraceLimit = limit;\n\n\tif (!stack) return [];\n\n\tconst lines = stack.split('\\n');\n\tconst new_lines = [];\n\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tconst line = lines[i];\n\t\tconst posixified = line.replaceAll('\\\\', '/');\n\n\t\tif (line.trim() === 'Error') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (line.includes('validate_each_keys')) {\n\t\t\treturn [];\n\t\t}\n\n\t\tif (posixified.includes('svelte/src/internal') || posixified.includes('node_modules/.vite')) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tnew_lines.push(line);\n\t}\n\n\treturn new_lines;\n}\n\n/**\n * @param {boolean} condition\n * @param {string} message\n */\nexport function invariant(condition, message) {\n\tif (!DEV) {\n\t\tthrow new Error('invariant(...) was not guarded by if (DEV)');\n\t}\n\n\tif (!condition) e.invariant_violation(message);\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 } 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 * Returns a `[get, set]` pair of functions for working with context in a type-safe way.\n *\n * `get` will throw an error if no parent component called `set`.\n *\n * @template T\n * @returns {[() => T, (context: T) => T]}\n * @since 5.40.0\n */\nexport function createContext() {\n\tconst key = {};\n\n\treturn [\n\t\t() => {\n\t\t\tif (!hasContext(key)) {\n\t\t\t\te.missing_context();\n\t\t\t}\n\n\t\t\treturn getContext(key);\n\t\t},\n\t\t(context) => setContext(key, context)\n\t];\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 * [`createContext`](https://svelte.dev/docs/svelte/svelte#createContext) is a type-safe alternative.\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 * [`createContext`](https://svelte.dev/docs/svelte/svelte#createContext) is a type-safe alternative.\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 =\n\t\t\t!active_reaction &&\n\t\t\t(flags & BRANCH_EFFECT) !== 0 &&\n\t\t\t// pop() runs synchronously, so this indicates we're setting context after an await\n\t\t\t!(/** @type {ComponentContext} */ (component_context).i);\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\ti: false,\n\t\tc: null,\n\t\te: null,\n\t\ts: props,\n\t\tx: null,\n\t\tr: /** @type {Effect} */ (active_effect),\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\tcontext.i = true;\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 { run_all } from '../../shared/utils.js';\nimport { is_flushing_sync } from '../reactivity/batch.js';\n\n/** @type {Array<() => void>} */\nlet micro_tasks = [];\n\nfunction run_micro_tasks() {\n\tvar tasks = micro_tasks;\n\tmicro_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 && !is_flushing_sync) {\n\t\tvar tasks = micro_tasks;\n\t\tqueueMicrotask(() => {\n\t\t\t// If this is false, a flushSync happened in the meantime. Do _not_ run new scheduled microtasks in that case\n\t\t\t// as the ordering of microtasks would be broken at that point - consider this case:\n\t\t\t// - queue_micro_task schedules microtask A to flush task X\n\t\t\t// - synchronously after, flushSync runs, processing task X\n\t\t\t// - synchronously after, some other microtask B is scheduled, but not through queue_micro_task but for example a Promise.resolve() in user code\n\t\t\t// - synchronously after, queue_micro_task schedules microtask C to flush task Y\n\t\t\t// - one tick later, microtask A now resolves, flushing task Y before microtask B, which is incorrect\n\t\t\t// This if check prevents that race condition (that realistically will only happen in tests)\n\t\t\tif (tasks === micro_tasks) run_micro_tasks();\n\t\t});\n\t}\n\n\tmicro_tasks.push(fn);\n}\n\n/**\n * Synchronously run any queued tasks.\n */\nexport function flush_tasks() {\n\twhile (micro_tasks.length > 0) {\n\t\trun_micro_tasks();\n\t}\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, REACTION_RAN, EFFECT, DESTROYED } 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\t// if the error occurred while creating this subtree, we let it\n\t// bubble up until it hits a boundary that can handle it, unless\n\t// it's an $effect in which case it doesn't run immediately\n\tif ((effect.f & REACTION_RAN) === 0 && (effect.f & EFFECT) === 0) {\n\t\tif (DEV && !effect.parent && error instanceof Error) {\n\t\t\tapply_adjustments(error);\n\t\t}\n\n\t\tthrow error;\n\t}\n\n\t// otherwise we bubble up the effect tree ourselves\n\tinvoke_error_boundary(error, effect);\n}\n\n/**\n * @param {unknown} error\n * @param {Effect | null} effect\n */\nexport function invoke_error_boundary(error, effect) {\n\tif (effect !== null && (effect.f & DESTROYED) !== 0) {\n\t\treturn;\n\t}\n\n\twhile (effect !== null) {\n\t\tif ((effect.f & BOUNDARY_EFFECT) !== 0) {\n\t\t\tif ((effect.f & REACTION_RAN) === 0) {\n\t\t\t\t// we are still creating the boundary effect\n\t\t\t\tthrow error;\n\t\t\t}\n\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 (DEV && 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 { Derived, Signal } from '#client' */\nimport { CLEAN, CONNECTED, DIRTY, MAYBE_DIRTY } from '#client/constants';\n\nconst STATUS_MASK = ~(DIRTY | MAYBE_DIRTY | CLEAN);\n\n/**\n * @param {Signal} signal\n * @param {number} status\n */\nexport function set_signal_status(signal, status) {\n\tsignal.f = (signal.f & STATUS_MASK) | status;\n}\n\n/**\n * Set a derived's status to CLEAN or MAYBE_DIRTY based on its connection state.\n * @param {Derived} derived\n */\nexport function update_derived_status(derived) {\n\t// Only mark as MAYBE_DIRTY if disconnected and has dependencies.\n\tif ((derived.f & CONNECTED) !== 0 || derived.deps === null) {\n\t\tset_signal_status(derived, CLEAN);\n\t} else {\n\t\tset_signal_status(derived, MAYBE_DIRTY);\n\t}\n}\n","/** @import { Derived, Effect, Value } from '#client' */\nimport { CLEAN, DERIVED, DIRTY, MAYBE_DIRTY, WAS_MARKED } from '#client/constants';\nimport { set_signal_status } from './status.js';\n\n/**\n * @param {Value[] | null} deps\n */\nfunction clear_marked(deps) {\n\tif (deps === null) return;\n\n\tfor (const dep of deps) {\n\t\tif ((dep.f & DERIVED) === 0 || (dep.f & WAS_MARKED) === 0) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdep.f ^= WAS_MARKED;\n\n\t\tclear_marked(/** @type {Derived} */ (dep).deps);\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {Set<Effect>} dirty_effects\n * @param {Set<Effect>} maybe_dirty_effects\n */\nexport function defer_effect(effect, dirty_effects, maybe_dirty_effects) {\n\tif ((effect.f & DIRTY) !== 0) {\n\t\tdirty_effects.add(effect);\n\t} else if ((effect.f & MAYBE_DIRTY) !== 0) {\n\t\tmaybe_dirty_effects.add(effect);\n\t}\n\n\t// Since we're not executing these effects now, we need to clear any WAS_MARKED flags\n\t// so that other batches can correctly reach these effects during their own traversal\n\tclear_marked(effect.deps);\n\n\t// mark as clean so they get scheduled if they depend on pending async state\n\tset_signal_status(effect, CLEAN);\n}\n","/** @import { Readable } from './public' */\nimport { untrack } from '../internal/client/runtime.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 * We set this to `true` when updating a store so that we correctly\n * schedule effects if the update takes place inside a `$:` effect\n */\nexport let legacy_is_updating_store = false;\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('unmounted');\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\tupdate_with_flag(store, 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 * @param {Store<V>} store\n * @param {V} value\n * @template V\n */\nfunction update_with_flag(store, value) {\n\tlegacy_is_updating_store = true;\n\n\ttry {\n\t\tstore.set(value);\n\t} finally {\n\t\tlegacy_is_updating_store = false;\n\t}\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\tupdate_with_flag(store, 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\tupdate_with_flag(store, 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\tupdate_with_flag(store, 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 { Derived, Effect, Value } from '#client' */\n\nimport {\n\tBLOCK_EFFECT,\n\tBOUNDARY_EFFECT,\n\tBRANCH_EFFECT,\n\tCLEAN,\n\tCONNECTED,\n\tDERIVED,\n\tDIRTY,\n\tEFFECT,\n\tASYNC,\n\tDESTROYED,\n\tINERT,\n\tMAYBE_DIRTY,\n\tRENDER_EFFECT,\n\tROOT_EFFECT,\n\tWAS_MARKED,\n\tMANAGED_EFFECT\n} from '#client/constants';\nimport { snapshot } from '../../shared/clone.js';\nimport { untrack } from '../runtime.js';\n\n/**\n *\n * @param {Effect} effect\n */\nexport function root(effect) {\n\twhile (effect.parent !== null) {\n\t\teffect = effect.parent;\n\t}\n\n\treturn effect;\n}\n\n/**\n *\n * @param {Effect} effect\n * @param {boolean} append_effect\n * @returns {string}\n */\nfunction effect_label(effect, append_effect = false) {\n\tconst flags = effect.f;\n\n\tlet label = `(unknown ${append_effect ? 'effect' : ''})`;\n\n\tif ((flags & ROOT_EFFECT) !== 0) {\n\t\tlabel = 'root';\n\t} else if ((flags & BOUNDARY_EFFECT) !== 0) {\n\t\tlabel = 'boundary';\n\t} else if ((flags & BLOCK_EFFECT) !== 0) {\n\t\tlabel = 'block';\n\t} else if ((flags & MANAGED_EFFECT) !== 0) {\n\t\tlabel = 'managed';\n\t} else if ((flags & ASYNC) !== 0) {\n\t\tlabel = 'async';\n\t} else if ((flags & BRANCH_EFFECT) !== 0) {\n\t\tlabel = 'branch';\n\t} else if ((flags & RENDER_EFFECT) !== 0) {\n\t\tlabel = 'render effect';\n\t} else if ((flags & EFFECT) !== 0) {\n\t\tlabel = 'effect';\n\t}\n\n\tif (append_effect && !label.endsWith('effect')) {\n\t\tlabel += ' effect';\n\t}\n\n\treturn label;\n}\n\n/**\n * @param {Effect} effect\n * @param {Effect[]} highlighted\n */\nexport function log_effect_tree(effect, highlighted = [], depth = 0, is_reachable = true) {\n\tconst flags = effect.f;\n\tlet label = effect_label(effect);\n\n\tlet status =\n\t\t(flags & CLEAN) !== 0 ? 'clean' : (flags & MAYBE_DIRTY) !== 0 ? 'maybe dirty' : 'dirty';\n\n\tlet styles = [`font-weight: ${status === 'clean' ? 'normal' : 'bold'}`];\n\n\tif (status !== 'clean' && !is_reachable) {\n\t\tlabel = `⚠️ ${label}`;\n\t\tstyles.push(`color: red`);\n\t}\n\n\tif ((flags & INERT) !== 0) {\n\t\tstyles.push('font-style: italic');\n\t}\n\n\tif (highlighted.includes(effect)) {\n\t\tstyles.push('background-color: yellow');\n\t}\n\n\t// eslint-disable-next-line no-console\n\tconsole.group(`%c${label} (${status})`, styles.join('; '));\n\n\tif (depth === 0) {\n\t\tconst callsite = new Error().stack\n\t\t\t?.split('\\n')[2]\n\t\t\t.replace(/\\s+at (?: \\w+\\(?)?(.+)\\)?/, (m, $1) => $1.replace(/\\?[^:]+/, ''));\n\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log(callsite);\n\t} else {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.groupCollapsed(`%cfn`, `font-weight: normal`);\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log(effect.fn);\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.groupEnd();\n\t}\n\n\tif (effect.deps !== null) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.groupCollapsed('%cdeps', 'font-weight: normal');\n\n\t\tfor (const dep of effect.deps) {\n\t\t\tlog_dep(dep);\n\t\t}\n\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.groupEnd();\n\t}\n\n\tif (effect.nodes) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log(effect.nodes.start);\n\n\t\tif (effect.nodes.start !== effect.nodes.end) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log(effect.nodes.end);\n\t\t}\n\t}\n\n\tvar child_is_reachable = is_reachable && ((flags & BRANCH_EFFECT) === 0 || (flags & CLEAN) === 0);\n\n\tlet child = effect.first;\n\twhile (child !== null) {\n\t\tlog_effect_tree(child, highlighted, depth + 1, child_is_reachable);\n\t\tchild = child.next;\n\t}\n\n\t// eslint-disable-next-line no-console\n\tconsole.groupEnd();\n}\n\n/**\n *\n * @param {Value} dep\n */\nfunction log_dep(dep) {\n\tif ((dep.f & DERIVED) !== 0) {\n\t\tconst derived = /** @type {Derived} */ (dep);\n\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.groupCollapsed(\n\t\t\t`%c$derived %c${dep.label ?? '<unknown>'}`,\n\t\t\t'font-weight: bold; color: CornflowerBlue',\n\t\t\t'font-weight: normal',\n\t\t\tuntrack(() => snapshot(derived.v))\n\t\t);\n\n\t\tif (derived.deps) {\n\t\t\tfor (const d of derived.deps) {\n\t\t\t\tlog_dep(d);\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.groupEnd();\n\t} else {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log(\n\t\t\t`%c$state %c${dep.label ?? '<unknown>'}`,\n\t\t\t'font-weight: bold; color: CornflowerBlue',\n\t\t\t'font-weight: normal',\n\t\t\tuntrack(() => snapshot(dep.v))\n\t\t);\n\t}\n}\n\n/**\n * Logs all reactions of a source or derived transitively\n * @param {Derived | Value} signal\n */\nexport function log_reactions(signal) {\n\t/** @type {Set<Derived | Value>} */\n\tconst visited = new Set();\n\n\t/**\n\t * Returns an array of flag names that are set on the given flags bitmask\n\t * @param {number} flags\n\t * @returns {string[]}\n\t */\n\tfunction get_derived_flag_names(flags) {\n\t\t/** @type {string[]} */\n\t\tconst names = [];\n\n\t\tif ((flags & CLEAN) !== 0) names.push('CLEAN');\n\t\tif ((flags & DIRTY) !== 0) names.push('DIRTY');\n\t\tif ((flags & MAYBE_DIRTY) !== 0) names.push('MAYBE_DIRTY');\n\t\tif ((flags & CONNECTED) !== 0) names.push('CONNECTED');\n\t\tif ((flags & WAS_MARKED) !== 0) names.push('WAS_MARKED');\n\t\tif ((flags & INERT) !== 0) names.push('INERT');\n\t\tif ((flags & DESTROYED) !== 0) names.push('DESTROYED');\n\n\t\treturn names;\n\t}\n\n\t/**\n\t * @param {Derived | Value} d\n\t * @param {number} depth\n\t */\n\tfunction log_derived(d, depth) {\n\t\tconst flags = d.f;\n\t\tconst flag_names = get_derived_flag_names(flags);\n\t\tconst flags_str = flag_names.length > 0 ? `(${flag_names.join(', ')})` : '(no flags)';\n\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.group(\n\t\t\t`%c${flags & DERIVED ? '$derived' : '$state'} %c${d.label ?? '<unknown>'} %c${flags_str}`,\n\t\t\t'font-weight: bold; color: CornflowerBlue',\n\t\t\t'font-weight: normal; color: inherit',\n\t\t\t'font-weight: normal; color: gray'\n\t\t);\n\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log(untrack(() => snapshot(d.v)));\n\n\t\tif ('fn' in d) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log('%cfn:', 'font-weight: bold', d.fn);\n\t\t}\n\n\t\tif (d.reactions !== null && d.reactions.length > 0) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.group('%creactions', 'font-weight: bold');\n\n\t\t\tfor (const reaction of d.reactions) {\n\t\t\t\tif ((reaction.f & DERIVED) !== 0) {\n\t\t\t\t\tconst derived_reaction = /** @type {Derived} */ (reaction);\n\n\t\t\t\t\tif (visited.has(derived_reaction)) {\n\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t`%c$derived %c${derived_reaction.label ?? '<unknown>'} %c(already seen)`,\n\t\t\t\t\t\t\t'font-weight: bold; color: CornflowerBlue',\n\t\t\t\t\t\t\t'font-weight: normal; color: inherit',\n\t\t\t\t\t\t\t'font-weight: bold; color: orange'\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvisited.add(derived_reaction);\n\t\t\t\t\t\tlog_derived(derived_reaction, depth + 1);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// It's an effect\n\t\t\t\t\tconst label = effect_label(/** @type {Effect} */ (reaction), true);\n\t\t\t\t\tconst status = (flags & MAYBE_DIRTY) !== 0 ? 'maybe dirty' : 'dirty';\n\n\t\t\t\t\t// Collect parent statuses\n\t\t\t\t\t/** @type {string[]} */\n\t\t\t\t\tconst parent_statuses = [];\n\t\t\t\t\tlet show = false;\n\t\t\t\t\tlet current = /** @type {Effect} */ (reaction).parent;\n\t\t\t\t\twhile (current !== null) {\n\t\t\t\t\t\tconst parent_flags = current.f;\n\t\t\t\t\t\tif ((parent_flags & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) {\n\t\t\t\t\t\t\tconst parent_status = (parent_flags & CLEAN) !== 0 ? 'clean' : 'not clean';\n\t\t\t\t\t\t\tif (parent_status === 'clean' && parent_statuses.includes('not clean')) show = true;\n\t\t\t\t\t\t\tparent_statuses.push(parent_status);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!current.parent) break;\n\t\t\t\t\t\tcurrent = current.parent;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check if reaction is reachable from root\n\t\t\t\t\tconst seen_effects = new Set();\n\t\t\t\t\tlet reachable = false;\n\t\t\t\t\t/**\n\t\t\t\t\t * @param {Effect | null} effect\n\t\t\t\t\t */\n\t\t\t\t\tfunction check_reachable(effect) {\n\t\t\t\t\t\tif (effect === null || reachable) return;\n\t\t\t\t\t\tif (effect === reaction) {\n\t\t\t\t\t\t\treachable = true;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (effect.f & DESTROYED) return;\n\t\t\t\t\t\tif (seen_effects.has(effect)) {\n\t\t\t\t\t\t\tthrow new Error('');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tseen_effects.add(effect);\n\t\t\t\t\t\tlet child = effect.first;\n\t\t\t\t\t\twhile (child !== null) {\n\t\t\t\t\t\t\tcheck_reachable(child);\n\t\t\t\t\t\t\tchild = child.next;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (current) check_reachable(current);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t`%c⚠️ Circular reference detected in effect tree`,\n\t\t\t\t\t\t\t'font-weight: bold; color: red',\n\t\t\t\t\t\t\tseen_effects\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!reachable) {\n\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t`%c⚠️ Effect is NOT reachable from its parent chain`,\n\t\t\t\t\t\t\t'font-weight: bold; color: red'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst parent_status_str = show ? ` (${parent_statuses.join(', ')})` : '';\n\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t`%c${label} (${status})${parent_status_str}`,\n\t\t\t\t\t\t`font-weight: bold; color: ${parent_status_str ? 'red' : 'green'}`,\n\t\t\t\t\t\treaction\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.groupEnd();\n\t\t} else {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log('%cno reactions', 'font-style: italic; color: gray');\n\t\t}\n\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.groupEnd();\n\t}\n\n\t// eslint-disable-next-line no-console\n\tconsole.group(`%cDerived Reactions Graph`, 'font-weight: bold; color: purple');\n\n\tvisited.add(signal);\n\tlog_derived(signal, 0);\n\n\t// eslint-disable-next-line no-console\n\tconsole.groupEnd();\n}\n\n/**\n * Traverses an effect tree and logs branches where a non-clean branch exists below a clean branch\n * @param {Effect} effect\n */\nexport function log_inconsistent_branches(effect) {\n\tconst root_effect = root(effect);\n\n\t/**\n\t * @typedef {{\n\t *   effect: Effect,\n\t *   status: 'clean' | 'maybe dirty' | 'dirty',\n\t *   parent_clean: boolean,\n\t *   children: BranchInfo[]\n\t * }} BranchInfo\n\t */\n\n\t/**\n\t * Collects branch effects from the tree\n\t * @param {Effect} eff\n\t * @param {boolean} parent_clean - whether any ancestor branch is clean\n\t * @returns {BranchInfo[]}\n\t */\n\tfunction collect_branches(eff, parent_clean) {\n\t\t/** @type {BranchInfo[]} */\n\t\tconst branches = [];\n\t\tconst flags = eff.f;\n\t\tconst is_branch = (flags & BRANCH_EFFECT) !== 0;\n\n\t\tif (is_branch) {\n\t\t\tconst status =\n\t\t\t\t(flags & CLEAN) !== 0 ? 'clean' : (flags & MAYBE_DIRTY) !== 0 ? 'maybe dirty' : 'dirty';\n\n\t\t\t/** @type {BranchInfo[]} */\n\t\t\tconst child_branches = [];\n\n\t\t\tlet child = eff.first;\n\t\t\twhile (child !== null) {\n\t\t\t\tchild_branches.push(...collect_branches(child, status === 'clean'));\n\t\t\t\tchild = child.next;\n\t\t\t}\n\n\t\t\tbranches.push({\n\t\t\t\teffect: eff,\n\t\t\t\tstatus,\n\t\t\t\tparent_clean,\n\t\t\t\tchildren: child_branches\n\t\t\t});\n\t\t} else {\n\t\t\t// Not a branch, continue traversing\n\t\t\tlet child = eff.first;\n\t\t\twhile (child !== null) {\n\t\t\t\tbranches.push(...collect_branches(child, parent_clean));\n\t\t\t\tchild = child.next;\n\t\t\t}\n\t\t}\n\n\t\treturn branches;\n\t}\n\n\t/**\n\t * Checks if a branch tree contains any inconsistencies (non-clean below clean)\n\t * @param {BranchInfo} branch\n\t * @param {boolean} ancestor_clean\n\t * @returns {boolean}\n\t */\n\tfunction has_inconsistency(branch, ancestor_clean) {\n\t\tconst is_inconsistent = ancestor_clean && branch.status !== 'clean';\n\t\tif (is_inconsistent) return true;\n\n\t\tconst new_ancestor_clean = ancestor_clean || branch.status === 'clean';\n\t\tfor (const child of branch.children) {\n\t\t\tif (has_inconsistency(child, new_ancestor_clean)) return true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Logs a branch and its children, but only if there are inconsistencies\n\t * @param {BranchInfo} branch\n\t * @param {boolean} ancestor_clean\n\t * @param {number} depth\n\t */\n\tfunction log_branch(branch, ancestor_clean, depth) {\n\t\tconst is_inconsistent = ancestor_clean && branch.status !== 'clean';\n\t\tconst new_ancestor_clean = ancestor_clean || branch.status === 'clean';\n\n\t\t// Only log if this branch or any descendant has an inconsistency\n\t\tif (!has_inconsistency(branch, ancestor_clean) && !is_inconsistent) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst style = is_inconsistent\n\t\t\t? 'font-weight: bold; color: red'\n\t\t\t: branch.status === 'clean'\n\t\t\t\t? 'font-weight: normal; color: green'\n\t\t\t\t: 'font-weight: bold; color: orange';\n\n\t\tconst warning = is_inconsistent ? ' ⚠️ INCONSISTENT' : '';\n\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.group(`%cbranch (${branch.status})${warning}`, style);\n\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log('%ceffect:', 'font-weight: bold', branch.effect);\n\n\t\tif (branch.effect.fn) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log('%cfn:', 'font-weight: bold', branch.effect.fn);\n\t\t}\n\n\t\tif (branch.effect.deps !== null) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.groupCollapsed('%cdeps', 'font-weight: normal');\n\t\t\tfor (const dep of branch.effect.deps) {\n\t\t\t\tlog_dep(dep);\n\t\t\t}\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.groupEnd();\n\t\t}\n\n\t\tif (is_inconsistent) {\n\t\t\tlog_effect_tree(branch.effect);\n\t\t} else if (branch.children.length > 0) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.group('%cchild branches', 'font-weight: bold');\n\t\t\tfor (const child of branch.children) {\n\t\t\t\tlog_branch(child, new_ancestor_clean, depth + 1);\n\t\t\t}\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.groupEnd();\n\t\t}\n\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.groupEnd();\n\t}\n\n\tconst branches = collect_branches(root_effect, false);\n\n\t// Check if there are any inconsistencies at all\n\tlet has_any_inconsistency = false;\n\tfor (const branch of branches) {\n\t\tif (has_inconsistency(branch, false)) {\n\t\t\thas_any_inconsistency = true;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (!has_any_inconsistency) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log('%cNo inconsistent branches found', 'font-weight: bold; color: green');\n\t\treturn;\n\t}\n\n\t// eslint-disable-next-line no-console\n\tconsole.group(`%cInconsistent Branches (non-clean below clean)`, 'font-weight: bold; color: red');\n\n\tfor (const branch of branches) {\n\t\tlog_branch(branch, false, 0);\n\t}\n\n\t// eslint-disable-next-line no-console\n\tconsole.groupEnd();\n\n\treturn true;\n}\n","import { get, tick, untrack } from '../internal/client/runtime.js';\nimport { effect_tracking, render_effect } from '../internal/client/reactivity/effects.js';\nimport { source, increment } from '../internal/client/reactivity/sources.js';\nimport { tag } from '../internal/client/dev/tracing.js';\nimport { DEV } from 'esm-env';\nimport { queue_micro_task } from '../internal/client/dom/task.js';\n\n/**\n * Returns a `subscribe` function that integrates external event-based systems with Svelte's reactivity.\n * It's particularly useful for integrating with web APIs like `MediaQuery`, `IntersectionObserver`, or `WebSocket`.\n *\n * If `subscribe` is called inside an effect (including indirectly, for example inside a getter),\n * the `start` callback will be called with an `update` function. Whenever `update` is called, the effect re-runs.\n *\n * If `start` returns a cleanup function, it will be called when the effect is destroyed.\n *\n * If `subscribe` is called in multiple effects, `start` will only be called once as long as the effects\n * are active, and the returned teardown function will only be called when all effects are destroyed.\n *\n * It's best understood with an example. Here's an implementation of [`MediaQuery`](https://svelte.dev/docs/svelte/svelte-reactivity#MediaQuery):\n *\n * ```js\n * import { createSubscriber } from 'svelte/reactivity';\n * import { on } from 'svelte/events';\n *\n * export class MediaQuery {\n * \t#query;\n * \t#subscribe;\n *\n * \tconstructor(query) {\n * \t\tthis.#query = window.matchMedia(`(${query})`);\n *\n * \t\tthis.#subscribe = createSubscriber((update) => {\n * \t\t\t// when the `change` event occurs, re-run any effects that read `this.current`\n * \t\t\tconst off = on(this.#query, 'change', update);\n *\n * \t\t\t// stop listening when all the effects are destroyed\n * \t\t\treturn () => off();\n * \t\t});\n * \t}\n *\n * \tget current() {\n * \t\t// This makes the getter reactive, if read in an effect\n * \t\tthis.#subscribe();\n *\n * \t\t// Return the current state of the query, whether or not we're in an effect\n * \t\treturn this.#query.matches;\n * \t}\n * }\n * ```\n * @param {(update: () => void) => (() => void) | void} start\n * @since 5.7.0\n */\nexport function createSubscriber(start) {\n\tlet subscribers = 0;\n\tlet version = source(0);\n\t/** @type {(() => void) | void} */\n\tlet stop;\n\n\tif (DEV) {\n\t\ttag(version, 'createSubscriber version');\n\t}\n\n\treturn () => {\n\t\tif (effect_tracking()) {\n\t\t\tget(version);\n\n\t\t\trender_effect(() => {\n\t\t\t\tif (subscribers === 0) {\n\t\t\t\t\tstop = untrack(() => start(() => increment(version)));\n\t\t\t\t}\n\n\t\t\t\tsubscribers += 1;\n\n\t\t\t\treturn () => {\n\t\t\t\t\tqueue_micro_task(() => {\n\t\t\t\t\t\t// Only count down after a microtask, else we would reach 0 before our own render effect reruns,\n\t\t\t\t\t\t// but reach 1 again when the tick callback of the prior teardown runs. That would mean we\n\t\t\t\t\t\t// re-subcribe unnecessarily and create a memory leak because the old subscription is never cleaned up.\n\t\t\t\t\t\tsubscribers -= 1;\n\n\t\t\t\t\t\tif (subscribers === 0) {\n\t\t\t\t\t\t\tstop?.();\n\t\t\t\t\t\t\tstop = undefined;\n\t\t\t\t\t\t\t// Increment the version to ensure any dependent deriveds are marked dirty when the subscription is picked up again later.\n\t\t\t\t\t\t\t// If we didn't do this then the comparison of write versions would determine that the derived has a later version than\n\t\t\t\t\t\t\t// the subscriber, and it would not be re-run.\n\t\t\t\t\t\t\tincrement(version);\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","/** @import { Effect, Source, TemplateNode, } from '#client' */\nimport {\n\tBOUNDARY_EFFECT,\n\tDIRTY,\n\tEFFECT_PRESERVED,\n\tEFFECT_TRANSPARENT,\n\tMAYBE_DIRTY\n} from '#client/constants';\nimport { HYDRATION_START_ELSE, HYDRATION_START_FAILED } from '../../../../constants.js';\nimport { component_context, set_component_context } from '../../context.js';\nimport { handle_error, invoke_error_boundary } from '../../error-handling.js';\nimport {\n\tblock,\n\tbranch,\n\tdestroy_effect,\n\tmove_effect,\n\tpause_effect\n} 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\tskip_nodes,\n\tset_hydrate_node\n} from '../hydration.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, current_batch } 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';\nimport { create_text } from '../operations.js';\nimport { defer_effect } from '../../reactivity/utils.js';\n\n/**\n * @typedef {{\n * \t onerror?: ((error: unknown, reset: () => void) => void) | null;\n *   failed?: ((anchor: Node, error: () => unknown, reset: () => () => void) => void) | null;\n *   pending?: ((anchor: Node) => void) | null;\n * }} BoundaryProps\n */\n\nvar flags = EFFECT_TRANSPARENT | EFFECT_PRESERVED;\n\n/**\n * @param {TemplateNode} node\n * @param {BoundaryProps} props\n * @param {((anchor: Node) => void)} children\n * @param {((error: unknown) => unknown) | undefined} [transform_error]\n * @returns {void}\n */\nexport function boundary(node, props, children, transform_error) {\n\tnew Boundary(node, props, children, transform_error);\n}\n\nexport class Boundary {\n\t/** @type {Boundary | null} */\n\tparent;\n\n\tis_pending = false;\n\n\t/**\n\t * API-level transformError transform function. Transforms errors before they reach the `failed` snippet.\n\t * Inherited from parent boundary, or defaults to identity.\n\t * @type {(error: unknown) => unknown}\n\t */\n\ttransform_error;\n\n\t/** @type {TemplateNode} */\n\t#anchor;\n\n\t/** @type {TemplateNode | null} */\n\t#hydrate_open = hydrating ? hydrate_node : null;\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#local_pending_count = 0;\n\t#pending_count = 0;\n\t#pending_count_update_queued = false;\n\n\t/** @type {Set<Effect>} */\n\t#dirty_effects = new Set();\n\n\t/** @type {Set<Effect>} */\n\t#maybe_dirty_effects = new Set();\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_subscriber = createSubscriber(() => {\n\t\tthis.#effect_pending = source(this.#local_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 * @param {((error: unknown) => unknown) | undefined} [transform_error]\n\t */\n\tconstructor(node, props, children, transform_error) {\n\t\tthis.#anchor = node;\n\t\tthis.#props = props;\n\n\t\tthis.#children = (anchor) => {\n\t\t\tvar effect = /** @type {Effect} */ (active_effect);\n\n\t\t\teffect.b = this;\n\t\t\teffect.f |= BOUNDARY_EFFECT;\n\n\t\t\tchildren(anchor);\n\t\t};\n\n\t\tthis.parent = /** @type {Effect} */ (active_effect).b;\n\n\t\t// Inherit transform_error from parent boundary, or use the provided one, or default to identity\n\t\tthis.transform_error = transform_error ?? this.parent?.transform_error ?? ((e) => e);\n\n\t\tthis.#effect = block(() => {\n\t\t\tif (hydrating) {\n\t\t\t\tconst comment = /** @type {Comment} */ (this.#hydrate_open);\n\t\t\t\thydrate_next();\n\n\t\t\t\tconst server_rendered_pending = comment.data === HYDRATION_START_ELSE;\n\t\t\t\tconst server_rendered_failed = comment.data.startsWith(HYDRATION_START_FAILED);\n\n\t\t\t\tif (server_rendered_failed) {\n\t\t\t\t\t// Server rendered the failed snippet - hydrate it.\n\t\t\t\t\t// The serialized error is embedded in the comment: <!--[?<json>-->\n\t\t\t\t\tconst serialized_error = JSON.parse(comment.data.slice(HYDRATION_START_FAILED.length));\n\t\t\t\t\tthis.#hydrate_failed_content(serialized_error);\n\t\t\t\t} else if (server_rendered_pending) {\n\t\t\t\t\tthis.#hydrate_pending_content();\n\t\t\t\t} else {\n\t\t\t\t\tthis.#hydrate_resolved_content();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.#render();\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\t#hydrate_resolved_content() {\n\t\ttry {\n\t\t\tthis.#main_effect = branch(() => this.#children(this.#anchor));\n\t\t} catch (error) {\n\t\t\tthis.error(error);\n\t\t}\n\t}\n\n\t/**\n\t * @param {unknown} error The deserialized error from the server's hydration comment\n\t */\n\t#hydrate_failed_content(error) {\n\t\tconst failed = this.#props.failed;\n\t\tif (!failed) return;\n\n\t\tthis.#failed_effect = branch(() => {\n\t\t\tfailed(\n\t\t\t\tthis.#anchor,\n\t\t\t\t() => error,\n\t\t\t\t() => () => {}\n\t\t\t);\n\t\t});\n\t}\n\n\t#hydrate_pending_content() {\n\t\tconst pending = this.#props.pending;\n\t\tif (!pending) return;\n\n\t\tthis.is_pending = true;\n\t\tthis.#pending_effect = branch(() => pending(this.#anchor));\n\n\t\tqueue_micro_task(() => {\n\t\t\tvar fragment = (this.#offscreen_fragment = document.createDocumentFragment());\n\t\t\tvar anchor = create_text();\n\n\t\t\tfragment.append(anchor);\n\n\t\t\tthis.#main_effect = this.#run(() => {\n\t\t\t\treturn branch(() => this.#children(anchor));\n\t\t\t});\n\n\t\t\tif (this.#pending_count === 0) {\n\t\t\t\tthis.#anchor.before(fragment);\n\t\t\t\tthis.#offscreen_fragment = null;\n\n\t\t\t\tpause_effect(/** @type {Effect} */ (this.#pending_effect), () => {\n\t\t\t\t\tthis.#pending_effect = null;\n\t\t\t\t});\n\n\t\t\t\tthis.#resolve(/** @type {Batch} */ (current_batch));\n\t\t\t}\n\t\t});\n\t}\n\n\t#render() {\n\t\ttry {\n\t\t\tthis.is_pending = this.has_pending_snippet();\n\t\t\tthis.#pending_count = 0;\n\t\t\tthis.#local_pending_count = 0;\n\n\t\t\tthis.#main_effect = branch(() => {\n\t\t\t\tthis.#children(this.#anchor);\n\t\t\t});\n\n\t\t\tif (this.#pending_count > 0) {\n\t\t\t\tvar fragment = (this.#offscreen_fragment = document.createDocumentFragment());\n\t\t\t\tmove_effect(this.#main_effect, fragment);\n\n\t\t\t\tconst pending = /** @type {(anchor: Node) => void} */ (this.#props.pending);\n\t\t\t\tthis.#pending_effect = branch(() => pending(this.#anchor));\n\t\t\t} else {\n\t\t\t\tthis.#resolve(/** @type {Batch} */ (current_batch));\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.error(error);\n\t\t}\n\t}\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\t#resolve(batch) {\n\t\tthis.is_pending = false;\n\n\t\t// any effects that were previously deferred should be transferred\n\t\t// to the batch, which will flush in the next microtask\n\t\tbatch.transfer_effects(this.#dirty_effects, this.#maybe_dirty_effects);\n\t}\n\n\t/**\n\t * Defer an effect inside a pending boundary until the boundary resolves\n\t * @param {Effect} effect\n\t */\n\tdefer_effect(effect) {\n\t\tdefer_effect(effect, this.#dirty_effects, this.#maybe_dirty_effects);\n\t}\n\n\t/**\n\t * Returns `false` if the effect exists inside a boundary whose pending snippet is shown\n\t * @returns {boolean}\n\t */\n\tis_rendered() {\n\t\treturn !this.is_pending && (!this.parent || this.parent.is_rendered());\n\t}\n\n\thas_pending_snippet() {\n\t\treturn !!this.#props.pending;\n\t}\n\n\t/**\n\t * @template T\n\t * @param {() => T} 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\tBatch.ensure();\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/**\n\t * Updates the pending count associated with the currently visible pending snippet,\n\t * if any, such that we can replace the snippet with content once work is done\n\t * @param {1 | -1} d\n\t * @param {Batch} batch\n\t */\n\t#update_pending_count(d, batch) {\n\t\tif (!this.has_pending_snippet()) {\n\t\t\tif (this.parent) {\n\t\t\t\tthis.parent.#update_pending_count(d, batch);\n\t\t\t}\n\n\t\t\t// if there's no parent, we're in a scope with no pending snippet\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#pending_count += d;\n\n\t\tif (this.#pending_count === 0) {\n\t\t\tthis.#resolve(batch);\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/**\n\t * Update the source that powers `$effect.pending()` inside this boundary,\n\t * and controls when the current `pending` snippet (if any) is removed.\n\t * Do not call from inside the class\n\t * @param {1 | -1} d\n\t * @param {Batch} batch\n\t */\n\tupdate_pending_count(d, batch) {\n\t\tthis.#update_pending_count(d, batch);\n\n\t\tthis.#local_pending_count += d;\n\n\t\tif (!this.#effect_pending || this.#pending_count_update_queued) return;\n\t\tthis.#pending_count_update_queued = true;\n\n\t\tqueue_micro_task(() => {\n\t\t\tthis.#pending_count_update_queued = false;\n\t\t\tif (this.#effect_pending) {\n\t\t\t\tinternal_set(this.#effect_pending, this.#local_pending_count);\n\t\t\t}\n\t\t});\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\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.#props.onerror && !this.#props.failed) {\n\t\t\tthrow error;\n\t\t}\n\n\t\tif (current_batch?.is_fork) {\n\t\t\tif (this.#main_effect) current_batch.skip_effect(this.#main_effect);\n\t\t\tif (this.#pending_effect) current_batch.skip_effect(this.#pending_effect);\n\t\t\tif (this.#failed_effect) current_batch.skip_effect(this.#failed_effect);\n\n\t\t\tcurrent_batch.oncommit(() => {\n\t\t\t\tthis.#handle_error(error);\n\t\t\t});\n\t\t} else {\n\t\t\tthis.#handle_error(error);\n\t\t}\n\t}\n\n\t/**\n\t * @param {unknown} error\n\t */\n\t#handle_error(error) {\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(/** @type {TemplateNode} */ (this.#hydrate_open));\n\t\t\tnext();\n\t\t\tset_hydrate_node(skip_nodes());\n\t\t}\n\n\t\tvar onerror = this.#props.onerror;\n\t\tlet failed = this.#props.failed;\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\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.#run(() => {\n\t\t\t\tthis.#render();\n\t\t\t});\n\t\t};\n\n\t\t/** @param {unknown} transformed_error */\n\t\tconst handle_error_result = (transformed_error) => {\n\t\t\ttry {\n\t\t\t\tcalling_on_error = true;\n\t\t\t\tonerror?.(transformed_error, reset);\n\t\t\t\tcalling_on_error = false;\n\t\t\t} catch (error) {\n\t\t\t\tinvoke_error_boundary(error, this.#effect && this.#effect.parent);\n\t\t\t}\n\n\t\t\tif (failed) {\n\t\t\t\tthis.#failed_effect = this.#run(() => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn branch(() => {\n\t\t\t\t\t\t\t// errors in `failed` snippets cause the boundary to error again\n\t\t\t\t\t\t\t// TODO Svelte 6: revisit this decision, most likely better to go to parent boundary instead\n\t\t\t\t\t\t\tvar effect = /** @type {Effect} */ (active_effect);\n\n\t\t\t\t\t\t\teffect.b = this;\n\t\t\t\t\t\t\teffect.f |= BOUNDARY_EFFECT;\n\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() => transformed_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}\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tqueue_micro_task(() => {\n\t\t\t// Run the error through the API-level transformError transform (e.g. SvelteKit's handleError)\n\t\t\t/** @type {unknown} */\n\t\t\tvar result;\n\t\t\ttry {\n\t\t\t\tresult = this.transform_error(error);\n\t\t\t} catch (e) {\n\t\t\t\tinvoke_error_boundary(e, this.#effect && this.#effect.parent);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tresult !== null &&\n\t\t\t\ttypeof result === 'object' &&\n\t\t\t\ttypeof (/** @type {any} */ (result).then) === 'function'\n\t\t\t) {\n\t\t\t\t// transformError returned a Promise — wait for it\n\t\t\t\t/** @type {any} */ (result).then(\n\t\t\t\t\thandle_error_result,\n\t\t\t\t\t/** @param {unknown} e */\n\t\t\t\t\t(e) => invoke_error_boundary(e, this.#effect && this.#effect.parent)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// Synchronous result — handle immediately\n\t\t\t\thandle_error_result(result);\n\t\t\t}\n\t\t});\n\t}\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 { Blocker, Effect, Source, Value } from '#client' */\nimport { DESTROYED, STALE_REACTION } from '#client/constants';\nimport { DEV } from 'esm-env';\nimport {\n\tcomponent_context,\n\tdev_stack,\n\tis_runes,\n\tset_component_context,\n\tset_dev_stack\n} from '../context.js';\nimport { 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 { Batch, current_batch } from './batch.js';\nimport {\n\tasync_derived,\n\treactivity_loss_tracker,\n\tderived,\n\tderived_safe_equal,\n\tset_reactivity_loss_tracker\n} from './deriveds.js';\nimport { aborted } from './effects.js';\nimport { queue_micro_task } from '../dom/task.js';\n\n/**\n * @param {Blocker[]} blockers\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {(values: Value[]) => any} fn\n */\nexport function flatten(blockers, sync, async, fn) {\n\tconst d = is_runes() ? derived : derived_safe_equal;\n\n\t// Filter out already-settled blockers - no need to wait for them\n\tvar pending = blockers.filter((b) => !b.settled);\n\n\tvar deriveds = sync.map(d);\n\n\tif (DEV) {\n\t\tderiveds.forEach((d, i) => {\n\t\t\t// TODO this is kinda useful for debugging but a lousy implementation —\n\t\t\t// maybe the compiler could pass through the template string\n\t\t\td.label = sync[i]\n\t\t\t\t.toString()\n\t\t\t\t.replace('() => ', '')\n\t\t\t\t.replaceAll('$.eager(() => ', '$state.eager(')\n\t\t\t\t.replace(/\\$\\.get\\((.+?)\\)/g, (_, id) => id);\n\t\t});\n\t}\n\n\tif (async.length === 0 && pending.length === 0) {\n\t\tfn(deriveds);\n\t\treturn;\n\t}\n\n\tvar parent = /** @type {Effect} */ (active_effect);\n\n\tvar restore = capture();\n\tvar blocker_promise =\n\t\tpending.length === 1\n\t\t\t? pending[0].promise\n\t\t\t: pending.length > 1\n\t\t\t\t? Promise.all(pending.map((b) => b.promise))\n\t\t\t\t: null;\n\n\t/**\n\t * @param {Source[]} async\n\t */\n\tfunction finish(async) {\n\t\tif ((parent.f & DESTROYED) !== 0) {\n\t\t\treturn;\n\t\t}\n\n\t\trestore();\n\n\t\ttry {\n\t\t\tfn([...deriveds, ...async]);\n\t\t} catch (error) {\n\t\t\tinvoke_error_boundary(error, parent);\n\t\t}\n\n\t\tunset_context();\n\t}\n\n\tvar decrement_pending = increment_pending();\n\n\t// Fast path: blockers but no async expressions\n\tif (async.length === 0) {\n\t\t/** @type {Promise<any>} */ (blocker_promise).then(() => finish([])).finally(decrement_pending);\n\t\treturn;\n\t}\n\n\t// Full path: has async expressions\n\tfunction run() {\n\t\tPromise.all(async.map((expression) => async_derived(expression)))\n\t\t\t.then(finish)\n\t\t\t.catch((error) => invoke_error_boundary(error, parent))\n\t\t\t.finally(decrement_pending);\n\t}\n\n\tif (blocker_promise) {\n\t\tblocker_promise.then(() => {\n\t\t\trestore();\n\t\t\trun();\n\t\t\tunset_context();\n\t\t});\n\t} else {\n\t\trun();\n\t}\n}\n\n/**\n * @param {Blocker[]} blockers\n * @param {(values: Value[]) => any} fn\n */\nexport function run_after_blockers(blockers, fn) {\n\tflatten(blockers, [], [], fn);\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 */\nexport function capture() {\n\tvar previous_effect = /** @type {Effect} */ (active_effect);\n\tvar previous_reaction = active_reaction;\n\tvar previous_component_context = component_context;\n\tvar previous_batch = /** @type {Batch} */ (current_batch);\n\n\tif (DEV) {\n\t\tvar previous_dev_stack = dev_stack;\n\t}\n\n\treturn function restore(activate_batch = true) {\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 (activate_batch && (previous_effect.f & DESTROYED) === 0) {\n\t\t\t// TODO we only need optional chaining here because `{#await ...}` blocks\n\t\t\t// are anomalous. Once we retire them we can get rid of it\n\t\t\tprevious_batch?.activate();\n\t\t\tprevious_batch?.apply();\n\t\t}\n\n\t\tif (DEV) {\n\t\t\tset_reactivity_loss_tracker(null);\n\t\t\tset_dev_stack(previous_dev_stack);\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\tqueue_micro_task(unset_context);\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_reactivity_loss_tracker = reactivity_loss_tracker;\n\t// Ensure that unrelated reads after an async operation is kicked off don't cause false positives\n\tqueueMicrotask(() => {\n\t\tif (reactivity_loss_tracker === previous_reactivity_loss_tracker) {\n\t\t\tset_reactivity_loss_tracker(null);\n\t\t}\n\t});\n\n\tvar value = await promise;\n\n\treturn () => {\n\t\tset_reactivity_loss_tracker(previous_reactivity_loss_tracker);\n\t\t// While this can result in false negatives it also guards against the more important\n\t\t// false positives that would occur if this is the last in a chain of async operations,\n\t\t// and the reactivity_loss_tracker would then stay around until the next async operation happens.\n\t\tqueueMicrotask(() => {\n\t\t\tif (reactivity_loss_tracker === previous_reactivity_loss_tracker) {\n\t\t\t\tset_reactivity_loss_tracker(null);\n\t\t\t}\n\t\t});\n\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// eslint-disable-next-line no-useless-assignment\n\tlet invoke_return = true;\n\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\tinvoke_return = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tvar prev = reactivity_loss_tracker;\n\t\t\ttry {\n\t\t\t\tyield value;\n\t\t\t} catch (e) {\n\t\t\t\tset_reactivity_loss_tracker(prev);\n\t\t\t\t// If the yield throws, we need to call `return` but not return its value, instead rethrow\n\t\t\t\tif (iterator.return !== undefined) {\n\t\t\t\t\t(await track_reactivity_loss(iterator.return()))();\n\t\t\t\t}\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t\tset_reactivity_loss_tracker(prev);\n\t\t}\n\t} catch (error) {\n\t\tinvoke_return = false;\n\t\tthrow error;\n\t} finally {\n\t\t// If the iterator had an abrupt completion (break) and `return` is defined on the iterator, call it and return the value\n\t\tif (invoke_return && 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(deactivate_batch = true) {\n\tset_active_effect(null);\n\tset_active_reaction(null);\n\tset_component_context(null);\n\tif (deactivate_batch) current_batch?.deactivate();\n\n\tif (DEV) {\n\t\tset_reactivity_loss_tracker(null);\n\t\tset_dev_stack(null);\n\t}\n}\n\n/**\n * @param {Array<() => void | Promise<void>>} thunks\n */\nexport function run(thunks) {\n\tconst restore = capture();\n\n\tconst decrement_pending = increment_pending();\n\n\tvar active = /** @type {Effect} */ (active_effect);\n\n\t/** @type {null | { error: any }} */\n\tvar errored = null;\n\n\t/** @param {any} error */\n\tconst handle_error = (error) => {\n\t\terrored = { error }; // wrap in object in case a promise rejects with a falsy value\n\n\t\tif (!aborted(active)) {\n\t\t\tinvoke_error_boundary(error, active);\n\t\t}\n\t};\n\n\tvar promise = Promise.resolve(thunks[0]()).catch(handle_error);\n\n\t/** @type {Blocker} */\n\tvar blocker = { promise, settled: false };\n\tvar blockers = [blocker];\n\n\tpromise.finally(() => {\n\t\tblocker.settled = true;\n\t\tunset_context();\n\t});\n\n\tfor (const fn of thunks.slice(1)) {\n\t\tpromise = promise\n\t\t\t.then(() => {\n\t\t\t\trestore();\n\n\t\t\t\ttry {\n\t\t\t\t\tif (errored) {\n\t\t\t\t\t\tthrow errored.error;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (aborted(active)) {\n\t\t\t\t\t\tthrow STALE_REACTION;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn fn();\n\t\t\t\t} finally {\n\t\t\t\t\t// We gotta unset context directly in case the function returns a promise, in which case\n\t\t\t\t\t// unset_context in .finally() would be too late ...\n\t\t\t\t\tunset_context();\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(handle_error);\n\n\t\tconst blocker = { promise, settled: false };\n\t\tblockers.push(blocker);\n\n\t\tpromise.finally(() => {\n\t\t\tblocker.settled = true;\n\t\t\t// ... but we also need it after such a promise has resolved in case it restores our context\n\t\t\tunset_context();\n\t\t});\n\t}\n\n\tpromise\n\t\t// wait one more tick, so that template effects are\n\t\t// guaranteed to run before `$effect(...)`\n\t\t.then(() => Promise.resolve())\n\t\t.finally(decrement_pending);\n\n\treturn blockers;\n}\n\n/**\n * @param {Blocker[]} blockers\n */\nexport function wait(blockers) {\n\treturn Promise.all(blockers.map((b) => b.promise));\n}\n\n/**\n * @returns {(skip?: boolean) => void}\n */\nexport function increment_pending() {\n\tvar effect = /** @type {Effect} */ (active_effect);\n\tvar boundary = effect.b; // undefined if called outside the render tree, e.g. a standalone $effect.root\n\tvar batch = /** @type {Batch} */ (current_batch);\n\tvar blocking = !!boundary?.is_rendered();\n\n\tboundary?.update_pending_count(1, batch);\n\tbatch.increment(blocking, effect);\n\n\treturn () => {\n\t\tboundary?.update_pending_count(-1, batch);\n\t\tbatch.decrement(blocking, effect);\n\t};\n}\n","/** @import { Derived, Effect, Reaction, Source, Value } from '#client' */\n/** @import { Batch } from './batch.js'; */\n/** @import { Boundary } from '../dom/blocks/boundary.js'; */\nimport { DEV } from 'esm-env';\nimport {\n\tERROR_VALUE,\n\tDERIVED,\n\tDIRTY,\n\tEFFECT_PRESERVED,\n\tSTALE_REACTION,\n\tASYNC,\n\tWAS_MARKED,\n\tDESTROYED,\n\tCLEAN,\n\tREACTION_RAN,\n\tINERT\n} from '#client/constants';\nimport {\n\tactive_reaction,\n\tactive_effect,\n\tupdate_reaction,\n\tincrement_write_version,\n\tset_active_effect,\n\tpush_reaction_value,\n\tis_destroying_effect,\n\tupdate_effect,\n\tremove_reactions,\n\tskipped_deps,\n\tnew_deps\n} from '../runtime.js';\nimport { equals, safe_equals } from './equality.js';\nimport * as e from '../errors.js';\nimport * as w from '../warnings.js';\nimport {\n\tasync_effect,\n\tdestroy_effect,\n\tdestroy_effect_children,\n\teffect_tracking,\n\tteardown\n} from './effects.js';\nimport { eager_effects, internal_set, set_eager_effects, source } from './sources.js';\nimport { get_error } from '../../shared/dev.js';\nimport { async_mode_flag, tracing_mode_flag } from '../../flags/index.js';\nimport { component_context } from '../context.js';\nimport { UNINITIALIZED } from '../../../constants.js';\nimport { batch_values, current_batch, previous_batch } from './batch.js';\nimport { increment_pending, unset_context } from './async.js';\nimport { deferred, includes, noop } from '../../shared/utils.js';\nimport { set_signal_status, update_derived_status } from './status.js';\n\n/**\n * This allows us to track 'reactivity loss' that occurs when signals\n * are read after a non-context-restoring `await`. Dev-only\n * @type {{ effect: Effect, effect_deps: Set<Value>, warned: boolean } | null}\n */\nexport let reactivity_loss_tracker = null;\n\n/** @param {{ effect: Effect, effect_deps: Set<Value>, warned: boolean } | null} v */\nexport function set_reactivity_loss_tracker(v) {\n\treactivity_loss_tracker = 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\n\tif (active_effect !== null) {\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: active_effect,\n\t\tac: null\n\t};\n\n\tif (DEV && tracing_mode_flag) {\n\t\tsignal.created = get_error('created at');\n\t}\n\n\treturn signal;\n}\n\nexport const OBSOLETE = Symbol('obsolete');\n\n/**\n * @template V\n * @param {() => V | Promise<V>} fn\n * @param {string} [label]\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, label, 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 promise = /** @type {Promise<V>} */ (/** @type {unknown} */ (undefined));\n\tvar signal = source(/** @type {V} */ (UNINITIALIZED));\n\n\tif (DEV) signal.label = label ?? fn.toString();\n\n\t// only suspend in async deriveds created on initialisation\n\tvar should_suspend = !active_reaction;\n\n\t/** @type {Set<ReturnType<typeof deferred<V>>>} */\n\tvar deferreds = new Set();\n\n\tasync_effect(() => {\n\t\tvar effect = /** @type {Effect} */ (active_effect);\n\n\t\tif (DEV) {\n\t\t\treactivity_loss_tracker = { effect, effect_deps: new Set(), warned: false };\n\t\t}\n\n\t\t/** @type {ReturnType<typeof deferred<V>>} */\n\t\tvar d = deferred();\n\t\tpromise = d.promise;\n\n\t\ttry {\n\t\t\t// If this code is changed at some point, make sure to still access the then property\n\t\t\t// of fn() to read any signals it might access, so that we track them as dependencies.\n\t\t\t// We call `unset_context` to undo any `save` calls that happen inside `fn()`\n\t\t\tPromise.resolve(fn())\n\t\t\t\t.then(d.resolve, (e) => {\n\t\t\t\t\t// if the promise was rejected by the user, via `getAbortSignal`, then\n\t\t\t\t\t// wait for a subsequent resolution instead of flushing the batch\n\t\t\t\t\tif (e !== STALE_REACTION) d.reject(e);\n\t\t\t\t})\n\t\t\t\t.finally(unset_context);\n\t\t} catch (error) {\n\t\t\td.reject(error);\n\t\t\tunset_context();\n\t\t}\n\n\t\tif (DEV) {\n\t\t\tif (reactivity_loss_tracker) {\n\t\t\t\t// Reused deps from previous run (indices 0 to skipped_deps-1)\n\t\t\t\t// We deliberately only track direct dependencies of the async expression to encourage\n\t\t\t\t// dependencies being directly visible at the point of the expression\n\t\t\t\tif (effect.deps !== null) {\n\t\t\t\t\tfor (let i = 0; i < skipped_deps; i += 1) {\n\t\t\t\t\t\treactivity_loss_tracker.effect_deps.add(effect.deps[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// New deps discovered this run\n\t\t\t\tif (new_deps !== null) {\n\t\t\t\t\tfor (let i = 0; i < new_deps.length; i += 1) {\n\t\t\t\t\t\treactivity_loss_tracker.effect_deps.add(new_deps[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treactivity_loss_tracker = null;\n\t\t}\n\n\t\tvar batch = /** @type {Batch} */ (current_batch);\n\n\t\tif (should_suspend) {\n\t\t\t// we only increment the batch's pending state for updates, not creation, otherwise\n\t\t\t// we will decrement to zero before the work that depends on this promise (e.g. a\n\t\t\t// template effect) has initialized, causing the batch to resolve prematurely\n\t\t\tif ((effect.f & REACTION_RAN) !== 0) {\n\t\t\t\tvar decrement_pending = increment_pending();\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t// boundary can be null if the async derived is inside an $effect.root not connected to the component render tree\n\t\t\t\tparent.b?.is_rendered()\n\t\t\t) {\n\t\t\t\tbatch.async_deriveds.get(effect)?.reject(OBSOLETE);\n\t\t\t} else {\n\t\t\t\t// While the boundary is still showing pending, a new run supersedes all older in-flight runs\n\t\t\t\t// for this async expression. Cancel eagerly so resolution cannot commit stale values.\n\t\t\t\tfor (const d of deferreds.values()) {\n\t\t\t\t\td.reject(OBSOLETE);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdeferreds.add(d);\n\t\t\tbatch.async_deriveds.set(effect, d);\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\tif (DEV) {\n\t\t\t\treactivity_loss_tracker = null;\n\t\t\t}\n\n\t\t\tdecrement_pending?.();\n\t\t\tdeferreds.delete(d);\n\n\t\t\tif (error === OBSOLETE) return;\n\n\t\t\tbatch.activate();\n\n\t\t\tif (error) {\n\t\t\t\tsignal.f |= ERROR_VALUE;\n\n\t\t\t\t// @ts-expect-error the error is the wrong type, but we don't care\n\t\t\t\tinternal_set(signal, error);\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\tif (DEV && location !== undefined && !signal.equals(value)) {\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) && (effect.f & DESTROYED) === 0) {\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\n\t\t\t\tinternal_set(signal, value);\n\t\t\t}\n\n\t\t\tbatch.deactivate();\n\t\t};\n\n\t\td.promise.then(handler, (e) => handler(null, e || 'unknown'));\n\t});\n\n\tteardown(() => {\n\t\tfor (const d of deferreds) {\n\t\t\td.reject(OBSOLETE);\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\tif (!async_mode_flag) push_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 * @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\tvar parent = derived.parent;\n\n\tif (\n\t\t!is_destroying_effect &&\n\t\tparent !== null &&\n\t\tderived.v !== UNINITIALIZED && // if it was never evaluated before, it's guaranteed to fail downstream, so we try to execute instead\n\t\t(parent.f & (DESTROYED | INERT)) !== 0\n\t) {\n\t\tw.derived_inert();\n\n\t\treturn derived.v;\n\t}\n\n\tset_active_effect(parent);\n\n\tif (DEV) {\n\t\tlet prev_eager_effects = eager_effects;\n\t\tset_eager_effects(new Set());\n\t\ttry {\n\t\t\tif (includes.call(stack, derived)) {\n\t\t\t\te.derived_references_self();\n\t\t\t}\n\n\t\t\tstack.push(derived);\n\n\t\t\tderived.f &= ~WAS_MARKED;\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_eager_effects(prev_eager_effects);\n\t\t\tstack.pop();\n\t\t}\n\t} else {\n\t\ttry {\n\t\t\tderived.f &= ~WAS_MARKED;\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.wv = increment_write_version();\n\n\t\t// in a fork, we don't update the underlying value, just `batch_values`.\n\t\t// the underlying value will be updated when the fork is committed.\n\t\t// otherwise, the next time we get here after a 'real world' state\n\t\t// change, `derived.equals` may incorrectly return `true`\n\t\tif (!current_batch?.is_fork || derived.deps === null) {\n\t\t\tif (current_batch !== null) {\n\t\t\t\t// We also write to previous_batch because if it exists, it is a sign that we're\n\t\t\t\t// currently in the process of flushing effects. These updates to deriveds may belong\n\t\t\t\t// to the previous batch, not the new one (which can already exist if an earlier\n\t\t\t\t// effect wrote to a source). This can cause bugs when running batch.#commit() later,\n\t\t\t\t// but not adding it to current_batch can, too, so we add it to both.\n\t\t\t\t// See https://github.com/sveltejs/svelte/pull/18117 for more details.\n\t\t\t\tcurrent_batch.capture(derived, value, true);\n\t\t\t\tprevious_batch?.capture(derived, value, true);\n\t\t\t} else {\n\t\t\t\tderived.v = value;\n\t\t\t}\n\n\t\t\t// deriveds without dependencies should never be recomputed\n\t\t\tif (derived.deps === null) {\n\t\t\t\tset_signal_status(derived, CLEAN);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\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\t// During time traveling we don't want to reset the status so that\n\t// traversal of the graph in the other batches still happens\n\tif (batch_values !== null) {\n\t\t// only cache the value if we're in a tracking context, otherwise we won't\n\t\t// clear the cache in `mark_reactions` when dependencies are updated\n\t\tif (effect_tracking() || current_batch?.is_fork) {\n\t\t\tbatch_values.set(derived, value);\n\t\t}\n\t} else {\n\t\tupdate_derived_status(derived);\n\t}\n}\n\n/**\n * @param {Derived} derived\n */\nexport function freeze_derived_effects(derived) {\n\tif (derived.effects === null) return;\n\n\tfor (const e of derived.effects) {\n\t\t// if the effect has a teardown function or abort signal, call it\n\t\tif (e.teardown || e.ac) {\n\t\t\te.teardown?.();\n\t\t\te.ac?.abort(STALE_REACTION);\n\n\t\t\t// make it a noop so it doesn't get called again if the derived\n\t\t\t// is unfrozen. we don't set it to `null`, because the existence\n\t\t\t// of a teardown function is what determines whether the\n\t\t\t// effect runs again during unfreezing (but not for teardown-only effects)\n\t\t\tif (e.fn !== null) e.teardown = noop;\n\t\t\te.ac = null;\n\n\t\t\tremove_reactions(e, 0);\n\t\t\tdestroy_effect_children(e);\n\t\t}\n\t}\n}\n\n/**\n * @param {Derived} derived\n */\nexport function unfreeze_derived_effects(derived) {\n\tif (derived.effects === null) return;\n\n\tfor (const e of derived.effects) {\n\t\t// if the effect was previously frozen — indicated by the presence\n\t\t// of a teardown function — unfreeze it\n\t\tif (e.teardown && e.fn !== null) {\n\t\t\tupdate_effect(e);\n\t\t}\n\t}\n}\n","/** @import { Fork } from 'svelte' */\n/** @import { Derived, Effect, Reaction, Source, Value } 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\tMAYBE_DIRTY,\n\tDERIVED,\n\tEAGER_EFFECT,\n\tERROR_VALUE,\n\tMANAGED_EFFECT,\n\tREACTION_RAN,\n\tDESTROYING\n} from '#client/constants';\nimport { async_mode_flag } from '../../flags/index.js';\nimport { deferred, define_property, includes } from '../../shared/utils.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tget,\n\tincrement_write_version,\n\tis_dirty,\n\tupdate_effect\n} from '../runtime.js';\nimport * as e from '../errors.js';\nimport { flush_tasks, queue_micro_task } from '../dom/task.js';\nimport { DEV } from 'esm-env';\nimport { invoke_error_boundary } from '../error-handling.js';\nimport { flush_eager_effects, old_values, set_eager_effects, source, update } from './sources.js';\nimport { eager_effect, teardown, unlink_effect } from './effects.js';\nimport { defer_effect } from './utils.js';\nimport { UNINITIALIZED } from '../../../constants.js';\nimport { set_signal_status } from './status.js';\nimport { legacy_is_updating_store } from './store.js';\nimport { invariant } from '../../shared/dev.js';\nimport { log_effect_tree } from '../dev/debug.js';\nimport { OBSOLETE } from './deriveds.js';\n\n/** @type {Batch | null} */\nlet first_batch = null;\n\n/** @type {Batch | null} */\nlet last_batch = null;\n\n/** @type {Batch | null} */\nexport let current_batch = null;\n\n/**\n * This is needed to avoid overwriting inputs\n * @type {Batch | null}\n */\nexport let previous_batch = null;\n\n/**\n * When time travelling (i.e. working in one batch, while other batches\n * still have ongoing work), we ignore the real values of affected\n * signals in favour of their values within the batch\n * @type {Map<Value, any> | null}\n */\nexport let batch_values = null;\n\n/** @type {Effect | null} */\nlet last_scheduled_effect = null;\n\nexport let is_flushing_sync = false;\nlet is_processing = false;\n\n/**\n * During traversal, this is an array. Newly created effects are (if not immediately\n * executed) pushed to this array, rather than going through the scheduling\n * rigamarole that would cause another turn of the flush loop.\n * @type {Effect[] | null}\n */\nexport let collected_effects = null;\n\n/**\n * An array of effects that are marked during traversal as a result of a `set`\n * (not `internal_set`) call. These will be added to the next batch and\n * trigger another `batch.process()`\n * @type {Effect[] | null}\n * @deprecated when we get rid of legacy mode and stores, we can get rid of this\n */\nexport let legacy_updates = null;\n\nvar flush_count = 0;\n\n/** @type {Set<Value>} */\nvar source_stacks = new Set();\n\nlet uid = 1;\n\nexport class Batch {\n\tid = uid++;\n\n\t/** True as soon as `#process` was called */\n\t#started = false;\n\n\tlinked = true;\n\n\t/** @type {Batch | null} */\n\t#prev = null;\n\n\t/** @type {Batch | null} */\n\t#next = null;\n\n\t/** @type {Map<Effect, ReturnType<typeof deferred<any>>>} */\n\tasync_deriveds = new Map();\n\n\t/**\n\t * The current values of any signals that are updated in this batch.\n\t * Tuple format: [value, is_derived] (note: is_derived is false for deriveds, too, if they were overridden via assignment)\n\t * They keys of this map are identical to `this.#previous`\n\t * @type {Map<Value, [any, boolean]>}\n\t */\n\tcurrent = new Map();\n\n\t/**\n\t * The values of any signals (sources and deriveds) 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<Value, any>}\n\t */\n\tprevious = 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<(batch: Batch) => void>}\n\t */\n\t#commit_callbacks = new Set();\n\n\t/**\n\t * If a fork is discarded, we need to destroy any effects that are no longer needed\n\t * @type {Set<(batch: Batch) => void>}\n\t */\n\t#discard_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 * Async effects that are currently in flight, _not_ inside a pending boundary\n\t * @type {Map<Effect, number>}\n\t */\n\t#blocking_pending = new Map();\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 * The root effects that need to be flushed\n\t * @type {Effect[]}\n\t */\n\t#roots = [];\n\n\t/**\n\t * Effects created while this batch was active.\n\t * @type {Effect[]}\n\t */\n\t#new_effects = [];\n\n\t/**\n\t * Deferred effects (which run after async work has completed) that are DIRTY\n\t * @type {Set<Effect>}\n\t */\n\t#dirty_effects = new Set();\n\n\t/**\n\t * Deferred effects that are MAYBE_DIRTY\n\t * @type {Set<Effect>}\n\t */\n\t#maybe_dirty_effects = new Set();\n\n\t/**\n\t * A map of branches that still exist, but will be destroyed when this batch\n\t * is committed — we skip over these during `process`.\n\t * The value contains child effects that were dirty/maybe_dirty before being reset,\n\t * so they can be rescheduled if the branch survives.\n\t * @type {Map<Effect, { d: Effect[], m: Effect[] }>}\n\t */\n\t#skipped_branches = new Map();\n\n\t/**\n\t * Inverse of #skipped_branches which we need to tell prior batches to unskip them when committing\n\t * @type {Set<Effect>}\n\t */\n\t#unskipped_branches = new Set();\n\n\tis_fork = false;\n\n\t#decrement_queued = false;\n\n\tconstructor() {\n\t\t// link batch\n\t\tif (last_batch === null) {\n\t\t\tfirst_batch = last_batch = this;\n\t\t} else {\n\t\t\tlast_batch.#next = this;\n\t\t\tthis.#prev = last_batch;\n\t\t}\n\n\t\tlast_batch = this;\n\t}\n\n\t#is_deferred() {\n\t\tif (this.is_fork) return true;\n\n\t\tfor (const effect of this.#blocking_pending.keys()) {\n\t\t\tvar e = effect;\n\t\t\tvar skipped = false;\n\n\t\t\twhile (e.parent !== null) {\n\t\t\t\tif (this.#skipped_branches.has(e)) {\n\t\t\t\t\tskipped = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\te = e.parent;\n\t\t\t}\n\n\t\t\tif (!skipped) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Add an effect to the #skipped_branches map and reset its children\n\t * @param {Effect} effect\n\t */\n\tskip_effect(effect) {\n\t\tif (!this.#skipped_branches.has(effect)) {\n\t\t\tthis.#skipped_branches.set(effect, { d: [], m: [] });\n\t\t}\n\t\tthis.#unskipped_branches.delete(effect);\n\t}\n\n\t/**\n\t * Remove an effect from the #skipped_branches map and reschedule\n\t * any tracked dirty/maybe_dirty child effects\n\t * @param {Effect} effect\n\t * @param {(e: Effect) => void} callback\n\t */\n\tunskip_effect(effect, callback = (e) => this.schedule(e)) {\n\t\tvar tracked = this.#skipped_branches.get(effect);\n\t\tif (tracked) {\n\t\t\tthis.#skipped_branches.delete(effect);\n\n\t\t\tfor (var e of tracked.d) {\n\t\t\t\tset_signal_status(e, DIRTY);\n\t\t\t\tcallback(e);\n\t\t\t}\n\n\t\t\tfor (e of tracked.m) {\n\t\t\t\tset_signal_status(e, MAYBE_DIRTY);\n\t\t\t\tcallback(e);\n\t\t\t}\n\t\t}\n\t\tthis.#unskipped_branches.add(effect);\n\t}\n\n\t#process() {\n\t\tthis.#started = true;\n\n\t\tif (flush_count++ > 1000) {\n\t\t\tthis.#unlink();\n\t\t\tinfinite_loop_guard();\n\t\t}\n\n\t\tif (DEV) {\n\t\t\t// track all the values that were updated during this flush,\n\t\t\t// so that they can be reset afterwards\n\t\t\tfor (const value of this.current.keys()) {\n\t\t\t\tsource_stacks.add(value);\n\t\t\t}\n\t\t}\n\n\t\t// We always reschedule previously-deferred effects, not just when\n\t\t// #is_deferred() is true, because traversing the tree could make\n\t\t// an if block that contains the last blocking pending effect falsy,\n\t\t// causing the block to no longer be deferred.\n\t\tfor (const e of this.#dirty_effects) {\n\t\t\tthis.#maybe_dirty_effects.delete(e);\n\t\t\tset_signal_status(e, DIRTY);\n\t\t\tthis.schedule(e);\n\t\t}\n\n\t\tfor (const e of this.#maybe_dirty_effects) {\n\t\t\tset_signal_status(e, MAYBE_DIRTY);\n\t\t\tthis.schedule(e);\n\t\t}\n\n\t\tconst roots = this.#roots;\n\t\tthis.#roots = [];\n\n\t\tthis.apply();\n\n\t\t/** @type {Effect[]} */\n\t\tvar effects = (collected_effects = []);\n\n\t\t/** @type {Effect[]} */\n\t\tvar render_effects = [];\n\n\t\t/**\n\t\t * @type {Effect[]}\n\t\t * @deprecated when we get rid of legacy mode and stores, we can get rid of this\n\t\t */\n\t\tvar updates = (legacy_updates = []);\n\n\t\tfor (const root of roots) {\n\t\t\ttry {\n\t\t\t\tthis.#traverse(root, effects, render_effects);\n\t\t\t} catch (e) {\n\t\t\t\treset_all(root);\n\t\t\t\t// If there's no async work left, this branch is now dead and needs\n\t\t\t\t// to be discarded to not become a zombie that is never cleaned up.\n\t\t\t\t// See https://github.com/sveltejs/svelte/issues/18221#issuecomment-4497918414\n\t\t\t\t// for a (non-minimal) reproduction that demonstrates a case where this is necessary\n\t\t\t\t// to not get follow-up false-positives via \"batch has scheduled roots\" invariant errors.\n\t\t\t\tif (!this.#is_deferred()) this.discard();\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\n\t\t// any writes should take effect in a subsequent batch\n\t\tcurrent_batch = null;\n\n\t\tif (updates.length > 0) {\n\t\t\tvar batch = Batch.ensure();\n\t\t\tfor (const e of updates) {\n\t\t\t\tbatch.schedule(e);\n\t\t\t}\n\t\t}\n\n\t\tcollected_effects = null;\n\t\tlegacy_updates = null;\n\n\t\t// if the batch has outstanding pending work, stash effects and bail\n\t\tif (this.#is_deferred()) {\n\t\t\tthis.#defer_effects(render_effects);\n\t\t\tthis.#defer_effects(effects);\n\n\t\t\tfor (const [e, t] of this.#skipped_branches) {\n\t\t\t\treset_branch(e, t);\n\t\t\t}\n\n\t\t\tif (updates.length > 0) {\n\t\t\t\t/** @type {Batch} */ (/** @type {unknown} */ (current_batch)).#process();\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst earlier_batch = this.#find_earlier_batch();\n\n\t\tif (earlier_batch) {\n\t\t\t// If this batch collected deferred effects during traversal, they still need\n\t\t\t// to run after being merged into the earlier batch.\n\t\t\tthis.#defer_effects(render_effects);\n\t\t\tthis.#defer_effects(effects);\n\t\t\tearlier_batch.#merge(this);\n\t\t\treturn;\n\t\t}\n\n\t\t// clear effects. Those that are still needed will be rescheduled through unskipping the skipped branches.\n\t\tthis.#dirty_effects.clear();\n\t\tthis.#maybe_dirty_effects.clear();\n\n\t\t// append/remove branches\n\t\tfor (const fn of this.#commit_callbacks) fn(this);\n\t\tthis.#commit_callbacks.clear();\n\n\t\tprevious_batch = this;\n\t\tflush_queued_effects(render_effects);\n\t\tflush_queued_effects(effects);\n\t\tprevious_batch = null;\n\n\t\tthis.#deferred?.resolve();\n\n\t\tvar next_batch = /** @type {Batch | null} */ (/** @type {unknown} */ (current_batch));\n\n\t\tif (this.#pending === 0 && (this.#roots.length === 0 || next_batch !== null)) {\n\t\t\tthis.#unlink();\n\n\t\t\t// Order matters here - we need to commit and THEN continue flushing new batches, not the other way around,\n\t\t\t// else we could start flushing a new batch and then, if it has pending work, rebase it right afterwards, which is wrong.\n\t\t\t// In sync mode flushSync can cause #commit to wrongfully think that there needs to be a rebase, so we only do it in async mode\n\t\t\t// TODO fix the underlying cause, otherwise this will likely regress when non-async mode is removed\n\t\t\tif (async_mode_flag) {\n\t\t\t\tthis.#commit();\n\t\t\t\t// Rebases can activate other batches or null it out, therefore restore the new one here\n\t\t\t\tcurrent_batch = next_batch;\n\t\t\t}\n\t\t}\n\n\t\t// Edge case: During traversal new branches might create effects that run immediately and set state,\n\t\t// causing an effect and therefore a root to be scheduled again. We need to traverse the current batch\n\t\t// once more in that case - most of the time this will just clean up dirty branches.\n\t\tif (this.#roots.length > 0) {\n\t\t\tif (next_batch !== null) {\n\t\t\t\tconst batch = next_batch;\n\t\t\t\tbatch.#roots.push(...this.#roots.filter((r) => !batch.#roots.includes(r)));\n\t\t\t} else {\n\t\t\t\tnext_batch = this;\n\t\t\t}\n\t\t}\n\n\t\tif (next_batch !== null) {\n\t\t\tnext_batch.#process();\n\t\t}\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 * @param {Effect[]} effects\n\t * @param {Effect[]} render_effects\n\t */\n\t#traverse(root, effects, render_effects) {\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_branches.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 & EFFECT) !== 0) {\n\t\t\t\t\teffects.push(effect);\n\t\t\t\t} else if (async_mode_flag && (flags & (RENDER_EFFECT | MANAGED_EFFECT)) !== 0) {\n\t\t\t\t\trender_effects.push(effect);\n\t\t\t\t} else if (is_dirty(effect)) {\n\t\t\t\t\tif ((flags & BLOCK_EFFECT) !== 0) this.#maybe_dirty_effects.add(effect);\n\t\t\t\t\tupdate_effect(effect);\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\twhile (effect !== null) {\n\t\t\t\tvar next = effect.next;\n\n\t\t\t\tif (next !== null) {\n\t\t\t\t\teffect = next;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\teffect = effect.parent;\n\t\t\t}\n\t\t}\n\t}\n\n\t#find_earlier_batch() {\n\t\tvar batch = this.#prev;\n\n\t\twhile (batch !== null) {\n\t\t\tif (!batch.is_fork) {\n\t\t\t\t// if the batches are connected, break\n\t\t\t\tfor (const [value, [, is_derived]] of this.current) {\n\t\t\t\t\tif (batch.current.has(value) && !is_derived) {\n\t\t\t\t\t\treturn batch;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbatch = batch.#prev;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\t#merge(batch) {\n\t\tfor (const [source, value] of batch.current) {\n\t\t\tif (!this.previous.has(source) && batch.previous.has(source)) {\n\t\t\t\tthis.previous.set(source, batch.previous.get(source));\n\t\t\t}\n\n\t\t\tthis.current.set(source, value);\n\t\t}\n\n\t\tfor (const [effect, deferred] of batch.async_deriveds) {\n\t\t\tconst d = this.async_deriveds.get(effect);\n\t\t\tif (d) deferred.promise.then(d.resolve).catch(d.reject);\n\t\t}\n\n\t\t// Clear them or else those that are still pending might get rejected on discard (after merged-into batch is done).\n\t\t// This can happen when batch Y merged into X and Y has a pending boundary and therefore still-pending async deriveds inside.\n\t\tbatch.async_deriveds.clear();\n\n\t\t// Mark is not guaranteed not touch these, so we transfer them\n\t\tthis.transfer_effects(batch.#dirty_effects, batch.#maybe_dirty_effects);\n\n\t\t/**\n\t\t * mark all effects that depend on `batch.current`, except the\n\t\t * async effects that we just resolved (TODO unless they depend\n\t\t * on values in this batch that are NOT in the later batch?).\n\t\t * Through this we also will populate the correct #skipped_branches,\n\t\t * oncommit callbacks etc, so we don't need to merge them separately.\n\t\t * @param {Value} value\n\t\t */\n\t\tconst mark = (value) => {\n\t\t\tvar reactions = value.reactions;\n\t\t\tif (reactions === null) return;\n\n\t\t\tfor (const reaction of reactions) {\n\t\t\t\tvar flags = reaction.f;\n\n\t\t\t\tif ((flags & DERIVED) !== 0) {\n\t\t\t\t\tmark(/** @type {Derived} */ (reaction));\n\t\t\t\t} else {\n\t\t\t\t\tvar effect = /** @type {Effect} */ (reaction);\n\n\t\t\t\t\tif (flags & (ASYNC | BLOCK_EFFECT) && !this.async_deriveds.has(effect)) {\n\t\t\t\t\t\tthis.#maybe_dirty_effects.delete(effect);\n\t\t\t\t\t\tset_signal_status(effect, DIRTY);\n\t\t\t\t\t\tthis.schedule(effect);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tfor (const source of this.current.keys()) {\n\t\t\tmark(source);\n\t\t}\n\n\t\tthis.oncommit(() => batch.discard());\n\t\tbatch.#unlink();\n\n\t\tcurrent_batch = this;\n\t\tthis.#process();\n\t}\n\n\t/**\n\t * @param {Effect[]} effects\n\t */\n\t#defer_effects(effects) {\n\t\tfor (var i = 0; i < effects.length; i += 1) {\n\t\t\tdefer_effect(effects[i], this.#dirty_effects, this.#maybe_dirty_effects);\n\t\t}\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 {Value} source\n\t * @param {any} value\n\t * @param {boolean} [is_derived]\n\t */\n\tcapture(source, value, is_derived = false) {\n\t\tif (source.v !== UNINITIALIZED && !this.previous.has(source)) {\n\t\t\tthis.previous.set(source, source.v);\n\t\t}\n\n\t\t// Don't save errors in `batch_values`, or they won't be thrown in `runtime.js#get`\n\t\tif ((source.f & ERROR_VALUE) === 0) {\n\t\t\tthis.current.set(source, [value, is_derived]);\n\t\t\tbatch_values?.set(source, value);\n\t\t}\n\n\t\tif (!this.is_fork) {\n\t\t\tsource.v = value;\n\t\t}\n\t}\n\n\tactivate() {\n\t\tcurrent_batch = this;\n\t}\n\n\tdeactivate() {\n\t\tcurrent_batch = null;\n\t\tbatch_values = null;\n\t}\n\n\tflush() {\n\t\ttry {\n\t\t\tif (DEV) {\n\t\t\t\tsource_stacks.clear();\n\t\t\t}\n\n\t\t\tis_processing = true;\n\t\t\tcurrent_batch = this;\n\n\t\t\tthis.#process();\n\t\t} finally {\n\t\t\tflush_count = 0;\n\t\t\tlast_scheduled_effect = null;\n\t\t\tcollected_effects = null;\n\t\t\tlegacy_updates = null;\n\t\t\tis_processing = false;\n\n\t\t\tcurrent_batch = null;\n\t\t\tbatch_values = null;\n\n\t\t\told_values.clear();\n\n\t\t\tif (DEV) {\n\t\t\t\tfor (const source of source_stacks) {\n\t\t\t\t\tsource.updated = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tdiscard() {\n\t\tfor (const fn of this.#discard_callbacks) fn(this);\n\t\tthis.#discard_callbacks.clear();\n\n\t\tfor (const deferred of this.async_deriveds.values()) {\n\t\t\tdeferred.reject(OBSOLETE);\n\t\t}\n\n\t\tthis.#unlink();\n\t\tthis.#deferred?.resolve();\n\t}\n\n\t/**\n\t * @param {Effect} effect\n\t */\n\tregister_created_effect(effect) {\n\t\tthis.#new_effects.push(effect);\n\t}\n\n\t#commit() {\n\t\t// If there are other pending batches, they now need to be 'rebased' —\n\t\t// in other words, we re-run block/async effects with the newly\n\t\t// committed state, unless the batch in question has a more\n\t\t// recent value for a given source\n\t\tfor (let batch = first_batch; batch !== null; batch = batch.#next) {\n\t\t\tvar is_earlier = batch.id < this.id;\n\n\t\t\t/** @type {Source[]} */\n\t\t\tvar sources = [];\n\n\t\t\tfor (const [source, [value, is_derived]] of this.current) {\n\t\t\t\tif (batch.current.has(source)) {\n\t\t\t\t\tvar batch_value = /** @type {[any, boolean]} */ (batch.current.get(source))[0]; // faster than destructuring\n\n\t\t\t\t\tif (is_earlier && value !== batch_value) {\n\t\t\t\t\t\t// bring the value up to date\n\t\t\t\t\t\tbatch.current.set(source, [value, is_derived]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// same value or later batch has more recent value,\n\t\t\t\t\t\t// no need to re-run these effects\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tsources.push(source);\n\t\t\t}\n\n\t\t\tif (is_earlier) {\n\t\t\t\t// TODO do we need to restart these in some cases, instead of\n\t\t\t\t// immediately resolving them? Likely not because of how this.apply() works.\n\t\t\t\tfor (const [effect, deferred] of this.async_deriveds) {\n\t\t\t\t\tconst d = batch.async_deriveds.get(effect);\n\t\t\t\t\tif (d) deferred.promise.then(d.resolve).catch(d.reject);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar current = [...batch.current.keys()].filter(\n\t\t\t\t(source) => !(/** @type {[any, boolean]} */ (batch.current.get(source))[1])\n\t\t\t);\n\n\t\t\t// If not started yet or no sources to update (which is e.g. possible for the very first batch) then bail\n\t\t\tif (!batch.#started || current.length === 0) continue;\n\n\t\t\t// Re-run async/block effects that depend on distinct values changed in both batches (ignoring deriveds)\n\t\t\tvar others = current.filter((source) => !this.current.has(source));\n\n\t\t\tif (others.length === 0) {\n\t\t\t\tif (is_earlier) {\n\t\t\t\t\t// this batch is now obsolete and can be discarded\n\t\t\t\t\tbatch.discard();\n\t\t\t\t}\n\t\t\t} else if (sources.length > 0) {\n\t\t\t\t// The microtask queue can contain the batch already scheduled to run right\n\t\t\t\t// after this one is finished, so throwing the invariant would be wrong here.\n\t\t\t\tif (DEV && !batch.#decrement_queued) {\n\t\t\t\t\tinvariant(batch.#roots.length === 0, 'Batch has scheduled roots');\n\t\t\t\t}\n\n\t\t\t\t// A batch was unskipped in a later batch -> tell prior batches to unskip it, too\n\t\t\t\tif (is_earlier) {\n\t\t\t\t\tfor (const unskipped of this.#unskipped_branches) {\n\t\t\t\t\t\tbatch.unskip_effect(unskipped, (e) => {\n\t\t\t\t\t\t\tif ((e.f & (BLOCK_EFFECT | ASYNC)) !== 0) {\n\t\t\t\t\t\t\t\tbatch.schedule(e);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbatch.#defer_effects([e]);\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\n\t\t\t\tbatch.activate();\n\n\t\t\t\t/** @type {Set<Value>} */\n\t\t\t\tvar marked = new Set();\n\n\t\t\t\t/** @type {Map<Reaction, boolean>} */\n\t\t\t\tvar checked = new Map();\n\n\t\t\t\tfor (var source of sources) {\n\t\t\t\t\tmark_effects(source, others, marked, checked);\n\t\t\t\t}\n\n\t\t\t\tchecked = new Map();\n\t\t\t\tvar current_unequal = [...batch.current]\n\t\t\t\t\t.filter(([c, v1]) => {\n\t\t\t\t\t\tconst v2 = this.current.get(c);\n\t\t\t\t\t\tif (!v2) return true;\n\t\t\t\t\t\t// Either their values are different or one is a derived but not the other\n\t\t\t\t\t\treturn v2[0] !== v1[0] || v2[1] !== v1[1];\n\t\t\t\t\t})\n\t\t\t\t\t.map(([c]) => c);\n\n\t\t\t\tif (current_unequal.length > 0) {\n\t\t\t\t\tfor (const effect of this.#new_effects) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t(effect.f & (DESTROYED | INERT | EAGER_EFFECT)) === 0 &&\n\t\t\t\t\t\t\tdepends_on(effect, current_unequal, checked)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tif ((effect.f & (ASYNC | BLOCK_EFFECT)) !== 0) {\n\t\t\t\t\t\t\t\tset_signal_status(effect, DIRTY);\n\t\t\t\t\t\t\t\tbatch.schedule(effect);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbatch.#dirty_effects.add(effect);\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\n\t\t\t\t// Only apply and traverse when we know we triggered async work with marking the effects\n\t\t\t\t// and know this won't run anyway right afterwards\n\t\t\t\tif (batch.#roots.length > 0 && !batch.#decrement_queued) {\n\t\t\t\t\tbatch.apply();\n\n\t\t\t\t\tfor (var root of batch.#roots) {\n\t\t\t\t\t\tbatch.#traverse(root, [], []);\n\t\t\t\t\t}\n\n\t\t\t\t\tbatch.#roots = [];\n\t\t\t\t}\n\n\t\t\t\tbatch.deactivate();\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {boolean} blocking\n\t * @param {Effect} effect\n\t */\n\tincrement(blocking, effect) {\n\t\tthis.#pending += 1;\n\n\t\tif (blocking) {\n\t\t\tlet blocking_pending_count = this.#blocking_pending.get(effect) ?? 0;\n\t\t\tthis.#blocking_pending.set(effect, blocking_pending_count + 1);\n\t\t}\n\t}\n\n\t/**\n\t * @param {boolean} blocking\n\t * @param {Effect} effect\n\t */\n\tdecrement(blocking, effect) {\n\t\tthis.#pending -= 1;\n\n\t\tif (blocking) {\n\t\t\tlet blocking_pending_count = this.#blocking_pending.get(effect) ?? 0;\n\n\t\t\tif (blocking_pending_count === 1) {\n\t\t\t\tthis.#blocking_pending.delete(effect);\n\t\t\t} else {\n\t\t\t\tthis.#blocking_pending.set(effect, blocking_pending_count - 1);\n\t\t\t}\n\t\t}\n\n\t\tif (this.#decrement_queued) return;\n\t\tthis.#decrement_queued = true;\n\n\t\tqueue_micro_task(() => {\n\t\t\tthis.#decrement_queued = false;\n\n\t\t\tif (this.linked) {\n\t\t\t\tthis.flush();\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * @param {Set<Effect>} dirty_effects\n\t * @param {Set<Effect>} maybe_dirty_effects\n\t */\n\ttransfer_effects(dirty_effects, maybe_dirty_effects) {\n\t\tfor (const e of dirty_effects) {\n\t\t\tthis.#dirty_effects.add(e);\n\t\t}\n\n\t\tfor (const e of maybe_dirty_effects) {\n\t\t\tthis.#maybe_dirty_effects.add(e);\n\t\t}\n\n\t\tdirty_effects.clear();\n\t\tmaybe_dirty_effects.clear();\n\t}\n\n\t/** @param {(batch: Batch) => void} fn */\n\toncommit(fn) {\n\t\tthis.#commit_callbacks.add(fn);\n\t}\n\n\t/** @param {(batch: Batch) => void} fn */\n\tondiscard(fn) {\n\t\tthis.#discard_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\n\t\t\tif (!is_processing && !is_flushing_sync) {\n\t\t\t\tqueue_micro_task(() => {\n\t\t\t\t\tif (!batch.#started) {\n\t\t\t\t\t\tbatch.flush();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn current_batch;\n\t}\n\n\tapply() {\n\t\tif (!async_mode_flag || (!this.is_fork && this.#prev === null && this.#next === null)) {\n\t\t\tbatch_values = null;\n\t\t\treturn;\n\t\t}\n\n\t\t// if there are multiple batches, we are 'time travelling' —\n\t\t// we need to override values with the ones in this batch...\n\t\tbatch_values = new Map();\n\t\tfor (const [source, [value]] of this.current) {\n\t\t\tbatch_values.set(source, value);\n\t\t}\n\n\t\t// ...and undo changes belonging to other batches unless they intersect\n\t\tfor (let batch = first_batch; batch !== null; batch = batch.#next) {\n\t\t\tif (batch === this || batch.is_fork) continue;\n\n\t\t\t// If two batches intersect, the latter batch will be merged into the earlier batch,\n\t\t\t// and we should treat them as a single set of changes\n\t\t\tvar intersects = false;\n\n\t\t\tif (batch.id < this.id) {\n\t\t\t\tfor (const [source, [, is_derived]] of batch.current) {\n\t\t\t\t\t// Derived values don't partake in the intersection mechanism, because a derived could\n\t\t\t\t\t// be triggered in one batch already but not the other one yet, causing a false-positive\n\t\t\t\t\tif (is_derived) continue;\n\n\t\t\t\t\tif (this.current.has(source)) {\n\t\t\t\t\t\tintersects = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Since the latter batch merges into the earlier (if it resolves before the earlier one),\n\t\t\t// we treat the earlier values as \"already applied\". This way we don't need to rerun async\n\t\t\t// effects of the earlier batch in case they are merged.\n\t\t\t// As a result you can think of batch_values as having the latest values of all intersecting\n\t\t\t// batches up until this batch.\n\t\t\tif (!intersects) {\n\t\t\t\tfor (const [source, previous] of batch.previous) {\n\t\t\t\t\tif (!batch_values.has(source)) {\n\t\t\t\t\t\tbatch_values.set(source, previous);\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 *\n\t * @param {Effect} effect\n\t */\n\tschedule(effect) {\n\t\tlast_scheduled_effect = effect;\n\n\t\t// defer render effects inside a pending boundary\n\t\t// TODO the `REACTION_RAN` check is only necessary because of legacy `$:` effects AFAICT — we can remove later\n\t\tif (\n\t\t\teffect.b?.is_pending &&\n\t\t\t(effect.f & (EFFECT | RENDER_EFFECT | MANAGED_EFFECT)) !== 0 &&\n\t\t\t(effect.f & REACTION_RAN) === 0\n\t\t) {\n\t\t\teffect.b.defer_effect(effect);\n\t\t\treturn;\n\t\t}\n\n\t\tvar e = effect;\n\n\t\twhile (e.parent !== null) {\n\t\t\te = e.parent;\n\t\t\tvar flags = e.f;\n\n\t\t\t// if the effect is being scheduled because a parent (each/await/etc) block\n\t\t\t// updated an internal source, or because a branch is being unskipped,\n\t\t\t// bail out or we'll cause a second flush\n\t\t\tif (collected_effects !== null && e === active_effect) {\n\t\t\t\tif (async_mode_flag) return;\n\n\t\t\t\t// in sync mode, render effects run during traversal. in an extreme edge case\n\t\t\t\t// — namely that we're setting a value inside a derived read during traversal —\n\t\t\t\t// they can be made dirty after they have already been visited, in which\n\t\t\t\t// case we shouldn't bail out. we also shouldn't bail out if we're\n\t\t\t\t// updating a store inside a `$:`, since this might invalidate\n\t\t\t\t// effects that were already visited\n\t\t\t\tif (\n\t\t\t\t\t(active_reaction === null || (active_reaction.f & DERIVED) === 0) &&\n\t\t\t\t\t!legacy_is_updating_store\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ((flags & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) {\n\t\t\t\tif ((flags & CLEAN) === 0) {\n\t\t\t\t\t// branch is already dirty, bail\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\te.f ^= CLEAN;\n\t\t\t}\n\t\t}\n\n\t\tthis.#roots.push(e);\n\t}\n\n\t#unlink() {\n\t\t// #merge calls #unlink, discard later on does it again - prevent\n\t\t// running it multiple times to not corrupt the linked list\n\t\tif (!this.linked) return;\n\n\t\tvar prev = this.#prev;\n\t\tvar next = this.#next;\n\n\t\tif (prev === null) {\n\t\t\tfirst_batch = next;\n\t\t} else {\n\t\t\tprev.#next = next;\n\t\t}\n\n\t\tif (next === null) {\n\t\t\tlast_batch = prev;\n\t\t} else {\n\t\t\tnext.#prev = prev;\n\t\t}\n\n\t\tthis.linked = false;\n\t}\n}\n\n// TODO Svelte@6 think about removing the callback argument.\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\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\tif (current_batch !== null && !current_batch.is_fork) {\n\t\t\t\tcurrent_batch.flush();\n\t\t\t}\n\n\t\t\tresult = fn();\n\t\t}\n\n\t\twhile (true) {\n\t\t\tflush_tasks();\n\n\t\t\tif (current_batch === null) {\n\t\t\t\treturn /** @type {T} */ (result);\n\t\t\t}\n\n\t\t\tcurrent_batch.flush();\n\t\t}\n\t} finally {\n\t\tis_flushing_sync = was_flushing_sync;\n\t}\n}\n\nfunction infinite_loop_guard() {\n\tif (DEV) {\n\t\tvar updates = new Map();\n\n\t\tfor (const source of /** @type {Batch} */ (current_batch).current.keys()) {\n\t\t\tfor (const [stack, update] of source.updated ?? []) {\n\t\t\t\tvar entry = updates.get(stack);\n\n\t\t\t\tif (!entry) {\n\t\t\t\t\tentry = { error: update.error, count: 0 };\n\t\t\t\t\tupdates.set(stack, entry);\n\t\t\t\t}\n\n\t\t\t\tentry.count += update.count;\n\t\t\t}\n\t\t}\n\n\t\tfor (const update of updates.values()) {\n\t\t\tif (update.error) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error(update.error);\n\t\t\t}\n\t\t}\n\t}\n\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/** @type {Set<Effect> | null} */\nexport let eager_block_effects = null;\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\teager_block_effects = new Set();\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 (\n\t\t\t\teffect.deps === null &&\n\t\t\t\teffect.first === null &&\n\t\t\t\teffect.nodes === null &&\n\t\t\t\teffect.teardown === null &&\n\t\t\t\teffect.ac === null\n\t\t\t) {\n\t\t\t\t// remove this effect from the graph\n\t\t\t\tunlink_effect(effect);\n\t\t\t}\n\n\t\t\t// If update_effect() has a flushSync() in it, we may have flushed another flush_queued_effects(),\n\t\t\t// which already handled this logic and did set eager_block_effects to null.\n\t\t\tif (eager_block_effects?.size > 0) {\n\t\t\t\told_values.clear();\n\n\t\t\t\tfor (const e of eager_block_effects) {\n\t\t\t\t\t// Skip eager effects that have already been unmounted\n\t\t\t\t\tif ((e.f & (DESTROYED | INERT)) !== 0) continue;\n\n\t\t\t\t\t// Run effects in order from ancestor to descendant, else we could run into nullpointers\n\t\t\t\t\t/** @type {Effect[]} */\n\t\t\t\t\tconst ordered_effects = [e];\n\t\t\t\t\tlet ancestor = e.parent;\n\t\t\t\t\twhile (ancestor !== null) {\n\t\t\t\t\t\tif (eager_block_effects.has(ancestor)) {\n\t\t\t\t\t\t\teager_block_effects.delete(ancestor);\n\t\t\t\t\t\t\tordered_effects.push(ancestor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tancestor = ancestor.parent;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (let j = ordered_effects.length - 1; j >= 0; j--) {\n\t\t\t\t\t\tconst e = ordered_effects[j];\n\t\t\t\t\t\t// Skip eager effects that have already been unmounted\n\t\t\t\t\t\tif ((e.f & (DESTROYED | INERT)) !== 0) continue;\n\t\t\t\t\t\tupdate_effect(e);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\teager_block_effects.clear();\n\t\t\t}\n\t\t}\n\t}\n\n\teager_block_effects = null;\n}\n\n/**\n * This is similar to `mark_reactions`, but it only marks async/block effects\n * depending on `value` and at least one of the other `sources`, so that\n * these effects can re-run after another batch has been committed\n * @param {Value} value\n * @param {Source[]} sources\n * @param {Set<Value>} marked\n * @param {Map<Reaction, boolean>} checked\n */\nfunction mark_effects(value, sources, marked, checked) {\n\tif (marked.has(value)) return;\n\tmarked.add(value);\n\n\tif (value.reactions !== null) {\n\t\tfor (const reaction of value.reactions) {\n\t\t\tconst flags = reaction.f;\n\n\t\t\tif ((flags & DERIVED) !== 0) {\n\t\t\t\tmark_effects(/** @type {Derived} */ (reaction), sources, marked, checked);\n\t\t\t} else if (\n\t\t\t\t(flags & (ASYNC | BLOCK_EFFECT)) !== 0 &&\n\t\t\t\t(flags & DIRTY) === 0 &&\n\t\t\t\tdepends_on(reaction, sources, checked)\n\t\t\t) {\n\t\t\t\tset_signal_status(reaction, DIRTY);\n\t\t\t\tschedule_effect(/** @type {Effect} */ (reaction));\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * When committing a fork, we need to trigger eager effects so that\n * any `$state.eager(...)` expressions update immediately. This\n * function allows us to discover them\n * @param {Value} value\n * @param {Set<Effect>} effects\n */\nfunction mark_eager_effects(value, effects) {\n\tif (value.reactions === null) return;\n\n\tfor (const reaction of value.reactions) {\n\t\tconst flags = reaction.f;\n\n\t\tif ((flags & DERIVED) !== 0) {\n\t\t\tmark_eager_effects(/** @type {Derived} */ (reaction), effects);\n\t\t} else if ((flags & EAGER_EFFECT) !== 0) {\n\t\t\tset_signal_status(reaction, DIRTY);\n\t\t\teffects.add(/** @type {Effect} */ (reaction));\n\t\t}\n\t}\n}\n\n/**\n * @param {Reaction} reaction\n * @param {Source[]} sources\n * @param {Map<Reaction, boolean>} checked\n */\nfunction depends_on(reaction, sources, checked) {\n\tconst depends = checked.get(reaction);\n\tif (depends !== undefined) return depends;\n\n\tif (reaction.deps !== null) {\n\t\tfor (const dep of reaction.deps) {\n\t\t\tif (includes.call(sources, dep)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif ((dep.f & DERIVED) !== 0 && depends_on(/** @type {Derived} */ (dep), sources, checked)) {\n\t\t\t\tchecked.set(/** @type {Derived} */ (dep), true);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\n\tchecked.set(reaction, false);\n\n\treturn false;\n}\n\n/**\n * @param {Effect} effect\n * @returns {void}\n */\nexport function schedule_effect(effect) {\n\t/** @type {Batch} */ (current_batch).schedule(effect);\n}\n\n/** @type {Source<number>[]} */\nlet eager_versions = [];\n\nfunction eager_flush() {\n\tflushSync(() => {\n\t\tconst eager = eager_versions;\n\t\teager_versions = [];\n\t\tfor (const version of eager) {\n\t\t\tupdate(version);\n\t\t}\n\t});\n}\n\n/** @type {Map<Reaction, Source<number>>} */\nvar version_map = new Map();\n\n/**\n * Implementation of `$state.eager(fn())`\n * @template T\n * @param {() => T} fn\n * @returns {T}\n */\nexport function eager(fn) {\n\tvar initial = true;\n\tvar value = /** @type {T} */ (undefined);\n\n\tif (active_reaction === null) {\n\t\treturn fn();\n\t}\n\n\tlet parent = active_reaction;\n\n\tlet version = version_map.get(parent) ?? source(0);\n\tversion_map.set(parent, version);\n\n\tteardown(() => {\n\t\tif (parent.f & DESTROYING) version_map.delete(parent);\n\t});\n\n\tget(version);\n\n\teager_effect(() => {\n\t\tif (initial) {\n\t\t\t// the first time this runs, we create an eager effect\n\t\t\t// that will run eagerly whenever the expression changes\n\t\t\tvar previous_batch_values = batch_values;\n\n\t\t\ttry {\n\t\t\t\tbatch_values = null;\n\t\t\t\tvalue = fn();\n\t\t\t} finally {\n\t\t\t\tbatch_values = previous_batch_values;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\t// the second time this effect runs, it's to schedule a\n\t\t// `version` update. since this will recreate the effect,\n\t\t// we don't need to evaluate the expression here\n\t\tif (eager_versions.length === 0) {\n\t\t\tqueue_micro_task(eager_flush);\n\t\t}\n\n\t\teager_versions.push(version);\n\t});\n\n\tinitial = false;\n\n\treturn value;\n}\n\n/**\n * Mark all the effects inside a skipped branch CLEAN, so that\n * they can be correctly rescheduled later. Tracks dirty and maybe_dirty\n * effects so they can be rescheduled if the branch survives.\n * @param {Effect} effect\n * @param {{ d: Effect[], m: Effect[] }} tracked\n */\nfunction reset_branch(effect, tracked) {\n\t// clean branch = nothing dirty inside, no need to traverse further\n\tif ((effect.f & BRANCH_EFFECT) !== 0 && (effect.f & CLEAN) !== 0) {\n\t\treturn;\n\t}\n\n\tif ((effect.f & DIRTY) !== 0) {\n\t\ttracked.d.push(effect);\n\t} else if ((effect.f & MAYBE_DIRTY) !== 0) {\n\t\ttracked.m.push(effect);\n\t}\n\n\tset_signal_status(effect, CLEAN);\n\n\tvar e = effect.first;\n\twhile (e !== null) {\n\t\treset_branch(e, tracked);\n\t\te = e.next;\n\t}\n}\n\n/**\n * Mark an entire effect tree clean following an error\n * @param {Effect} effect\n */\nfunction reset_all(effect) {\n\tset_signal_status(effect, CLEAN);\n\n\tvar e = effect.first;\n\twhile (e !== null) {\n\t\treset_all(e);\n\t\te = e.next;\n\t}\n}\n\n/**\n * Creates a 'fork', in which state changes are evaluated but not applied to the DOM.\n * This is useful for speculatively loading data (for example) when you suspect that\n * the user is about to take some action.\n *\n * Frameworks like SvelteKit can use this to preload data when the user touches or\n * hovers over a link, making any subsequent navigation feel instantaneous.\n *\n * The `fn` parameter is a synchronous function that modifies some state. The\n * state changes will be reverted after the fork is initialised, then reapplied\n * if and when the fork is eventually committed.\n *\n * When it becomes clear that a fork will _not_ be committed (e.g. because the\n * user navigated elsewhere), it must be discarded to avoid leaking memory.\n *\n * @param {() => void} fn\n * @returns {Fork}\n * @since 5.42\n */\nexport function fork(fn) {\n\tif (!async_mode_flag) {\n\t\te.experimental_async_required('fork');\n\t}\n\n\tif (current_batch !== null) {\n\t\te.fork_timing();\n\t}\n\n\tvar batch = Batch.ensure();\n\tbatch.is_fork = true;\n\tbatch_values = new Map();\n\n\tvar committed = false;\n\tvar settled = batch.settled();\n\n\tflushSync(fn);\n\n\treturn {\n\t\tcommit: async () => {\n\t\t\tif (committed) {\n\t\t\t\tawait settled;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!batch.linked) {\n\t\t\t\te.fork_discarded();\n\t\t\t}\n\n\t\t\tcommitted = true;\n\n\t\t\tbatch.is_fork = false;\n\n\t\t\t// apply changes and update write versions so deriveds see the change\n\t\t\tfor (var [source, [value]] of batch.current) {\n\t\t\t\tsource.v = value;\n\t\t\t\tsource.wv = increment_write_version();\n\t\t\t}\n\n\t\t\t// trigger any `$state.eager(...)` expressions with the new state.\n\t\t\t// eager effects don't get scheduled like other effects, so we\n\t\t\t// can't just encounter them during traversal, we need to\n\t\t\t// proactively flush them\n\t\t\t// TODO maybe there's a better implementation?\n\t\t\tflushSync(() => {\n\t\t\t\t/** @type {Set<Effect>} */\n\t\t\t\tvar eager_effects = new Set();\n\n\t\t\t\tfor (var source of batch.current.keys()) {\n\t\t\t\t\tmark_eager_effects(source, eager_effects);\n\t\t\t\t}\n\n\t\t\t\tset_eager_effects(eager_effects);\n\t\t\t\tflush_eager_effects();\n\t\t\t});\n\n\t\t\tbatch.flush();\n\t\t\tawait settled;\n\t\t},\n\t\tdiscard: () => {\n\t\t\t// cause any MAYBE_DIRTY deriveds to update\n\t\t\t// if they depend on things thath changed\n\t\t\t// inside the discarded fork\n\t\t\tfor (var source of batch.current.keys()) {\n\t\t\t\tsource.wv = increment_write_version();\n\t\t\t}\n\n\t\t\tif (!committed && batch.linked) {\n\t\t\t\tbatch.discard();\n\t\t\t}\n\t\t}\n\t};\n}\n\n/**\n * Forcibly remove all current batches, to prevent cross-talk between tests\n */\nexport function clear() {\n\tfirst_batch = last_batch = null;\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\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\tEAGER_EFFECT,\n\tMAYBE_DIRTY,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tASYNC,\n\tWAS_MARKED,\n\tCONNECTED,\n\tREACTION_IS_UPDATING\n} from '#client/constants';\nimport * as e from '../errors.js';\nimport { legacy_mode_flag, tracing_mode_flag } from '../../flags/index.js';\nimport { tag_proxy } from '../dev/tracing.js';\nimport { get_error } from '../../shared/dev.js';\nimport { component_context, is_runes } from '../context.js';\nimport {\n\tBatch,\n\tbatch_values,\n\teager_block_effects,\n\tschedule_effect,\n\tlegacy_updates\n} from './batch.js';\nimport { proxy } from '../proxy.js';\nimport { execute_derived } from './deriveds.js';\nimport { set_signal_status, update_derived_status } from './status.js';\n\n/** @type {Set<Effect>} */\nexport let eager_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_eager_effects(v) {\n\teager_effects = v;\n}\n\nlet eager_effects_deferred = false;\n\nexport function set_eager_effects_deferred() {\n\teager_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_error('created at');\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 & EAGER_EFFECT) !== 0) &&\n\t\tis_runes() &&\n\t\t(active_reaction.f & (DERIVED | BLOCK_EFFECT | ASYNC | EAGER_EFFECT)) !== 0 &&\n\t\t(current_sources === null || !current_sources.has(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, legacy_updates);\n}\n\n/**\n * @template V\n * @param {Source<V>} source\n * @param {V} value\n * @param {Effect[] | null} [updated_during_traversal]\n * @returns {V}\n */\nexport function internal_set(source, value, updated_during_traversal = null) {\n\tif (!source.equals(value)) {\n\t\told_values.set(source, is_destroying_effect ? value : source.v);\n\n\t\tvar batch = Batch.ensure();\n\t\tbatch.capture(source, value);\n\n\t\tif (DEV) {\n\t\t\tif (tracing_mode_flag || active_effect !== null) {\n\t\t\t\tsource.updated ??= new Map();\n\n\t\t\t\t// For performance reasons, when not using $inspect.trace, we only start collecting stack traces\n\t\t\t\t// after the same source has been updated more than 5 times in the same flush cycle.\n\t\t\t\tconst count = (source.updated.get('')?.count ?? 0) + 1;\n\t\t\t\tsource.updated.set('', { error: /** @type {any} */ (null), count });\n\n\t\t\t\tif (tracing_mode_flag || count > 5) {\n\t\t\t\t\tconst error = get_error('updated at');\n\n\t\t\t\t\tif (error !== null) {\n\t\t\t\t\t\tlet entry = source.updated.get(error.stack);\n\n\t\t\t\t\t\tif (!entry) {\n\t\t\t\t\t\t\tentry = { error, count: 0 };\n\t\t\t\t\t\t\tsource.updated.set(error.stack, entry);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tentry.count++;\n\t\t\t\t\t}\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\tconst derived = /** @type {Derived} */ (source);\n\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(derived);\n\t\t\t}\n\n\t\t\t// During time traveling we don't want to reset the status so that\n\t\t\t// traversal of the graph in the other batches still happens\n\t\t\tif (batch_values === null) {\n\t\t\t\tupdate_derived_status(derived);\n\t\t\t}\n\t\t}\n\n\t\tsource.wv = increment_write_version();\n\n\t\t// For debugging, in case you want to know which reactions are being scheduled:\n\t\t// log_reactions(source);\n\t\tmark_reactions(source, DIRTY, updated_during_traversal);\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 (!batch.is_fork && eager_effects.size > 0 && !eager_effects_deferred) {\n\t\t\tflush_eager_effects();\n\t\t}\n\t}\n\n\treturn value;\n}\n\nexport function flush_eager_effects() {\n\teager_effects_deferred = false;\n\n\tfor (const effect of eager_effects) {\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\tlet dirty;\n\n\t\ttry {\n\t\t\tdirty = is_dirty(effect);\n\t\t} catch {\n\t\t\t// Dirty-checking can evaluate derived dependencies and throw in cases where\n\t\t\t// parent effects are about to destroy this eager effect. Run the effect so\n\t\t\t// its own error handling can deal with transient failures.\n\t\t\tdirty = true;\n\t\t}\n\n\t\tif (dirty) {\n\t\t\tupdate_effect(effect);\n\t\t}\n\t}\n\n\teager_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\t// eslint-disable-next-line no-useless-assignment -- `++`/`--` used for return value, not side effect on `value`\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 * @param {Effect[] | null} updated_during_traversal\n * @returns {void}\n */\nfunction mark_reactions(signal, status, updated_during_traversal) {\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\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 & EAGER_EFFECT) !== 0) {\n\t\t\t// Eager effects need to run immediately:\n\t\t\t// - for $inspect so that the stack trace makes sense\n\t\t\t// - for $state.eager because they might be without an effect parent\n\t\t\teager_effects.add(/** @type {Effect} */ (reaction));\n\t\t} else if ((flags & DERIVED) !== 0) {\n\t\t\tvar derived = /** @type {Derived} */ (reaction);\n\n\t\t\tbatch_values?.delete(derived);\n\n\t\t\tif ((flags & WAS_MARKED) === 0) {\n\t\t\t\t// Only connected deriveds being executed outside the update cycle can be reliably unmarked right away\n\t\t\t\tif (\n\t\t\t\t\tflags & CONNECTED &&\n\t\t\t\t\t(active_effect === null || (active_effect.f & REACTION_IS_UPDATING) === 0)\n\t\t\t\t) {\n\t\t\t\t\treaction.f |= WAS_MARKED;\n\t\t\t\t}\n\n\t\t\t\tmark_reactions(derived, MAYBE_DIRTY, updated_during_traversal);\n\t\t\t}\n\t\t} else if (not_dirty) {\n\t\t\tvar effect = /** @type {Effect} */ (reaction);\n\n\t\t\tif ((flags & BLOCK_EFFECT) !== 0 && eager_block_effects !== null) {\n\t\t\t\teager_block_effects.add(effect);\n\t\t\t}\n\n\t\t\tif (updated_during_traversal !== null) {\n\t\t\t\tupdated_during_traversal.push(effect);\n\t\t\t} else {\n\t\t\t\tschedule_effect(effect);\n\t\t\t}\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_eager_effects,\n\tset_eager_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 { tag } from './dev/tracing.js';\nimport { get_error } from '../shared/dev.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_error('created at') : 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\tlet updating = false;\n\t/** @param {string} new_path */\n\tfunction update_path(new_path) {\n\t\tif (updating) return;\n\t\tupdating = true;\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\tupdating = false;\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\twith_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 an 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\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\tset(s, proxy(value));\n\n\t\t\t\t\tsources.set(prop, s);\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_eager_effects_deferred();\n\t\t\t\tvar result = value.apply(this, args);\n\t\t\t\tflush_eager_effects();\n\t\t\t\treturn result;\n\t\t\t};\n\t\t}\n\t});\n}\n","import * as w from '../warnings.js';\nimport { get_proxied_value } from '../proxy.js';\n\nexport function init_array_prototype_warnings() {\n\tconst array_prototype = Array.prototype;\n\t// The REPL ends up here over and over, and this prevents it from adding more and more patches\n\t// of the same kind to the prototype, which would slow down everything over time.\n\t// @ts-expect-error\n\tconst cleanup = Array.__svelte_cleanup;\n\tif (cleanup) {\n\t\tcleanup();\n\t}\n\n\tconst { indexOf, lastIndexOf, includes } = array_prototype;\n\n\tarray_prototype.indexOf = function (item, from_index) {\n\t\tconst index = indexOf.call(this, item, from_index);\n\n\t\tif (index === -1) {\n\t\t\tfor (let i = from_index ?? 0; i < this.length; i += 1) {\n\t\t\t\tif (get_proxied_value(this[i]) === item) {\n\t\t\t\t\tw.state_proxy_equality_mismatch('array.indexOf(...)');\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn index;\n\t};\n\n\tarray_prototype.lastIndexOf = function (item, from_index) {\n\t\t// we need to specify this.length - 1 because it's probably using something like\n\t\t// `arguments` inside so passing undefined is different from not passing anything\n\t\tconst index = lastIndexOf.call(this, item, from_index ?? this.length - 1);\n\n\t\tif (index === -1) {\n\t\t\tfor (let i = 0; i <= (from_index ?? this.length - 1); i += 1) {\n\t\t\t\tif (get_proxied_value(this[i]) === item) {\n\t\t\t\t\tw.state_proxy_equality_mismatch('array.lastIndexOf(...)');\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn index;\n\t};\n\n\tarray_prototype.includes = function (item, from_index) {\n\t\tconst has = includes.call(this, item, from_index);\n\n\t\tif (!has) {\n\t\t\tfor (let i = 0; i < this.length; i += 1) {\n\t\t\t\tif (get_proxied_value(this[i]) === item) {\n\t\t\t\t\tw.state_proxy_equality_mismatch('array.includes(...)');\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn has;\n\t};\n\n\t// @ts-expect-error\n\tArray.__svelte_cleanup = () => {\n\t\tarray_prototype.indexOf = indexOf;\n\t\tarray_prototype.lastIndexOf = lastIndexOf;\n\t\tarray_prototype.includes = includes;\n\t};\n}\n\n/**\n * @param {any} a\n * @param {any} b\n * @param {boolean} equal\n * @returns {boolean}\n */\nexport function strict_equals(a, b, equal = true) {\n\t// try-catch needed because this tries to read properties of `a` and `b`,\n\t// which could be disallowed for example in a secure context\n\ttry {\n\t\tif ((a === b) !== (get_proxied_value(a) === get_proxied_value(b))) {\n\t\t\tw.state_proxy_equality_mismatch(equal ? '===' : '!==');\n\t\t}\n\t} catch {}\n\n\treturn (a === b) === equal;\n}\n\n/**\n * @param {any} a\n * @param {any} b\n * @param {boolean} equal\n * @returns {boolean}\n */\nexport function equals(a, b, equal = true) {\n\tif ((a == b) !== (get_proxied_value(a) == get_proxied_value(b))) {\n\t\tw.state_proxy_equality_mismatch(equal ? '==' : '!=');\n\t}\n\n\treturn (a == b) === equal;\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 {\n\tATTRIBUTES_CACHE,\n\tCLASS_CACHE,\n\tREACTION_RAN,\n\tSTYLE_CACHE,\n\tTEXT_CACHE,\n\tTEXT_NODE\n} from '#client/constants';\nimport { eager_block_effects } from '../reactivity/batch.js';\nimport { NAMESPACE_HTML } from '../../../constants.js';\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/** @type {any} */ (element_prototype)[CLASS_CACHE] = undefined;\n\t\t/** @type {any} */ (element_prototype)[ATTRIBUTES_CACHE] = null;\n\t\t/** @type {any} */ (element_prototype)[STYLE_CACHE] = 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/** @type {any} */ (text_prototype)[TEXT_CACHE] = 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 */\n/*@__NO_SIDE_EFFECTS__*/\nexport function get_first_child(node) {\n\treturn /** @type {TemplateNode | null} */ (first_child_getter.call(node));\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function get_next_sibling(node) {\n\treturn /** @type {TemplateNode | null} */ (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 {TemplateNode | null}\n */\nexport function child(node, is_text) {\n\tif (!hydrating) {\n\t\treturn get_first_child(node);\n\t}\n\n\tvar child = 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\tif (is_text) {\n\t\tmerge_text_nodes(/** @type {Text} */ (child));\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 {TemplateNode} node\n * @param {boolean} [is_text]\n * @returns {TemplateNode | null}\n */\nexport function first_child(node, is_text = false) {\n\tif (!hydrating) {\n\t\tvar first = get_first_child(node);\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\tif (is_text) {\n\t\t// if an {expression} is empty during SSR, there might be no\n\t\t// text node to hydrate — we must therefore create one\n\t\tif (hydrate_node?.nodeType !== TEXT_NODE) {\n\t\t\tvar text = create_text();\n\n\t\t\thydrate_node?.before(text);\n\t\t\tset_hydrate_node(text);\n\t\t\treturn text;\n\t\t}\n\n\t\tmerge_text_nodes(/** @type {Text} */ (hydrate_node));\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 {TemplateNode | 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\tif (is_text) {\n\t\t// if a sibling {expression} is empty during SSR, there might be no\n\t\t// text node to hydrate — we must therefore create one\n\t\tif (next_sibling?.nodeType !== TEXT_NODE) {\n\t\t\tvar text = create_text();\n\t\t\t// If the next sibling is `null` and we're handling text then it's because\n\t\t\t// the SSR content was empty for the text, so we need to generate a new text\n\t\t\t// node and insert it after the last sibling\n\t\t\tif (next_sibling === null) {\n\t\t\t\tlast_sibling?.after(text);\n\t\t\t} else {\n\t\t\t\tnext_sibling.before(text);\n\t\t\t}\n\t\t\tset_hydrate_node(text);\n\t\t\treturn text;\n\t\t}\n\n\t\tmerge_text_nodes(/** @type {Text} */ (next_sibling));\n\t}\n\n\tset_hydrate_node(next_sibling);\n\treturn 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\tif (eager_block_effects !== null) return false;\n\n\tvar flags = /** @type {Effect} */ (active_effect).f;\n\treturn (flags & REACTION_RAN) !== 0;\n}\n\n/**\n * Branching here is intentional and load-bearing for perf. `createElement(tag)`\n * hits a fast path in Blink that `createElementNS(NAMESPACE_HTML, tag)` doesn't,\n * and passing an explicit `undefined` as the trailing options arg measurably\n * slows both APIs. Funnelling every case through a single `createElementNS(ns,\n * tag, options)` call would be smaller but slower on the HTML path.\n *\n * @template {keyof HTMLElementTagNameMap | string} T\n * @param {T} tag\n * @param {string} [namespace]\n * @param {string} [is]\n * @returns {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element}\n */\nexport function create_element(tag, namespace, is) {\n\tif (namespace == null || namespace === NAMESPACE_HTML) {\n\t\treturn /** @type {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element} */ (\n\t\t\tis ? document.createElement(tag, { is }) : document.createElement(tag)\n\t\t);\n\t}\n\treturn /** @type {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element} */ (\n\t\tis ? document.createElementNS(namespace, tag, { is }) : document.createElementNS(namespace, tag)\n\t);\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\n/**\n * Browsers split text nodes larger than 65536 bytes when parsing.\n * For hydration to succeed, we need to stitch them back together\n * @param {Text} text\n */\nexport function merge_text_nodes(text) {\n\tif (/** @type {string} */ (text.nodeValue).length < 65536) {\n\t\treturn;\n\t}\n\n\tlet next = text.nextSibling;\n\n\twhile (next !== null && next.nodeType === TEXT_NODE) {\n\t\tnext.remove();\n\n\t\t/** @type {string} */ (text.nodeValue) += /** @type {string} */ (next.nodeValue);\n\n\t\tnext = text.nextSibling;\n\t}\n}\n","import { hydrating } from '../hydration.js';\nimport { clear_text_content, get_first_child } from '../operations.js';\nimport { queue_micro_task } from '../task.js';\nimport { FORM_RESET_HANDLER } from '../../constants.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/** @type {any} */ (e)[FORM_RESET_HANDLER]?.();\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 possibility 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 { FORM_RESET_HANDLER } from '../../../constants.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\tconst prev = /** @type {any} */ (element)[FORM_RESET_HANDLER];\n\tif (prev) {\n\t\t// special case for checkbox that can have multiple binds (group & checked)\n\t\t/** @type {any} */ (element)[FORM_RESET_HANDLER] = () => {\n\t\t\tprev();\n\t\t\ton_reset(true);\n\t\t};\n\t} else {\n\t\t/** @type {any} */ (element)[FORM_RESET_HANDLER] = () => on_reset(true);\n\t}\n\n\tadd_form_reset_listener();\n}\n","/** @import { Blocker, 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\tuntrack,\n\tuntracking,\n\tset_active_effect\n} from '../runtime.js';\nimport {\n\tDIRTY,\n\tBRANCH_EFFECT,\n\tRENDER_EFFECT,\n\tEFFECT,\n\tDESTROYED,\n\tINERT,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tEFFECT_TRANSPARENT,\n\tDERIVED,\n\tCLEAN,\n\tEAGER_EFFECT,\n\tHEAD_EFFECT,\n\tMAYBE_DIRTY,\n\tEFFECT_PRESERVED,\n\tSTALE_REACTION,\n\tUSER_EFFECT,\n\tASYNC,\n\tCONNECTED,\n\tMANAGED_EFFECT,\n\tDESTROYING\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, collected_effects, current_batch } from './batch.js';\nimport { flatten } from './async.js';\nimport { without_reactive_context } from '../dom/elements/bindings/shared.js';\nimport { set_signal_status } from './status.js';\n\n/**\n * @param {'$effect' | '$effect.pre' | '$inspect'} rune\n */\nexport function validate_effect(rune) {\n\tif (active_effect === null) {\n\t\tif (active_reaction === null) {\n\t\t\te.effect_orphan(rune);\n\t\t}\n\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 * @returns {Effect}\n */\nfunction create_effect(type, fn) {\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 & EAGER_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: null,\n\t\tf: type | DIRTY | CONNECTED,\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\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\tcurrent_batch?.register_created_effect(effect);\n\n\t/** @type {Effect | null} */\n\tvar e = effect;\n\n\tif ((type & EFFECT) !== 0) {\n\t\tif (collected_effects !== null) {\n\t\t\t// created during traversal — collect and run afterwards\n\t\t\tcollected_effects.push(effect);\n\t\t} else {\n\t\t\t// schedule for later\n\t\t\tBatch.ensure().schedule(effect);\n\t\t}\n\t} else if (fn !== null) {\n\t\ttry {\n\t\t\tupdate_effect(effect);\n\t\t} catch (e) {\n\t\t\tdestroy_effect(effect);\n\t\t\tthrow e;\n\t\t}\n\n\t\t// if an effect doesn't need to be kept in the tree (because it\n\t\t// won't re-run, has no DOM, and has no teardown etc)\n\t\t// then we skip it and go to its child (if any)\n\t\tif (\n\t\t\te.deps === null &&\n\t\t\te.teardown === null &&\n\t\t\te.nodes === null &&\n\t\t\te.first === e.last && // either `null`, or a singular child\n\t\t\t(e.f & EFFECT_PRESERVED) === 0\n\t\t) {\n\t\t\te = e.first;\n\t\t\tif ((type & BLOCK_EFFECT) !== 0 && (type & EFFECT_TRANSPARENT) !== 0 && e !== null) {\n\t\t\t\te.f |= EFFECT_TRANSPARENT;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (e !== null) {\n\t\te.parent = parent;\n\n\t\tif (parent !== null) {\n\t\t\tpush_effect(e, 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(e);\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);\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 =\n\t\t!active_reaction &&\n\t\t(flags & BRANCH_EFFECT) !== 0 &&\n\t\tcomponent_context !== null &&\n\t\t!component_context.i;\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);\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);\n}\n\n/** @param {() => void | (() => void)} fn */\nexport function eager_effect(fn) {\n\treturn create_effect(EAGER_EFFECT, fn);\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 | EFFECT_PRESERVED, fn);\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 | EFFECT_PRESERVED, fn);\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);\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\n\t\tvar effect = /** @type {Effect} */ (active_effect);\n\n\t\t// here, we lie: by setting `active_effect` to be the parent branch, any writes\n\t\t// that happen inside `fn` will _not_ cause an unnecessary reschedule, because\n\t\t// the affected effects will be children of `active_effect`. this is safe\n\t\t// because these effects are known to run in the correct order\n\t\ttry {\n\t\t\tset_active_effect(effect.parent);\n\t\t\tuntrack(fn);\n\t\t} finally {\n\t\t\tset_active_effect(effect);\n\t\t}\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 && effect.deps !== null) {\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);\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);\n}\n\n/**\n * @param {(...expressions: any) => void | (() => void)} fn\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {Blocker[]} blockers\n */\nexport function template_effect(fn, sync = [], async = [], blockers = []) {\n\tflatten(blockers, sync, async, (values) => {\n\t\tcreate_effect(RENDER_EFFECT, () => {\n\t\t\tfn(...values.map(get));\n\t\t});\n\t});\n}\n\n/**\n * Like `template_effect`, but with an effect which is deferred until the batch commits\n * @param {(...expressions: any) => void | (() => void)} fn\n * @param {Array<() => any>} sync\n * @param {Array<() => Promise<any>>} async\n * @param {Blocker[]} blockers\n */\nexport function deferred_template_effect(fn, sync = [], async = [], blockers = []) {\n\tflatten(blockers, sync, async, (values) => {\n\t\tcreate_effect(EFFECT, () => fn(...values.map(get)));\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);\n\tif (DEV) {\n\t\teffect.dev_stack = dev_stack;\n\t}\n\treturn effect;\n}\n\n/**\n * @param {(() => void)} fn\n * @param {number} flags\n */\nexport function managed(fn, flags = 0) {\n\tvar effect = create_effect(MANAGED_EFFECT | flags, fn);\n\tif (DEV) {\n\t\teffect.dev_stack = dev_stack;\n\t}\n\treturn effect;\n}\n\n/**\n * @param {(() => void)} fn\n */\nexport function branch(fn) {\n\treturn create_effect(BRANCH_EFFECT | EFFECT_PRESERVED, fn);\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 !== 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\teffect.f |= DESTROYING;\n\tdestroy_effect_children(effect, remove_dom && !removed);\n\tremove_reactions(effect, 0);\n\n\tvar transitions = effect.nodes && effect.nodes.t;\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\teffect.f ^= DESTROYING;\n\teffect.f |= DESTROYED;\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 =\n\t\teffect.ac =\n\t\teffect.b =\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 : 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 * @param {boolean} [destroy]\n */\nexport function pause_effect(effect, callback, destroy = true) {\n\t/** @type {TransitionManager[]} */\n\tvar transitions = [];\n\n\tpause_children(effect, transitions, true);\n\n\tvar fn = () => {\n\t\tif (destroy) destroy_effect(effect);\n\t\tif (callback) callback();\n\t};\n\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 */\nfunction pause_children(effect, transitions, local) {\n\tif ((effect.f & INERT) !== 0) return;\n\teffect.f ^= INERT;\n\n\tvar t = effect.nodes && effect.nodes.t;\n\n\tif (t !== null) {\n\t\tfor (const transition of t) {\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\n\t\t// If this child is a root effect, then it will become an independent root when its parent\n\t\t// is destroyed, it should therefore not become inert nor partake in transitions.\n\t\tif ((child.f & ROOT_EFFECT) === 0) {\n\t\t\tvar transparent =\n\t\t\t\t(child.f & EFFECT_TRANSPARENT) !== 0 ||\n\t\t\t\t// If this is a branch effect without a block effect parent,\n\t\t\t\t// it means the parent block effect was pruned. In that case,\n\t\t\t\t// transparency information was transferred to the branch effect.\n\t\t\t\t((child.f & BRANCH_EFFECT) !== 0 && (effect.f & BLOCK_EFFECT) !== 0);\n\t\t\t// TODO we don't need to call pause_children recursively with a linked list in place\n\t\t\t// it's slightly more involved though as we have to account for `transparent` changing\n\t\t\t// through the tree.\n\t\t\tpause_children(child, transitions, transparent ? local : false);\n\t\t}\n\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\tBatch.ensure().schedule(effect); // Assumption: This happens during the commit phase of the batch, causing another flush, but it's safe\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\tvar t = effect.nodes && effect.nodes.t;\n\n\tif (t !== null) {\n\t\tfor (const transition of t) {\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(effect = /** @type {Effect} */ (active_effect)) {\n\treturn (effect.f & DESTROYED) !== 0;\n}\n\n/**\n * @param {Effect} effect\n * @param {DocumentFragment} fragment\n */\nexport function move_effect(effect, fragment) {\n\tif (!effect.nodes) return;\n\n\t/** @type {TemplateNode | null} */\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 : get_next_sibling(node);\n\n\t\tfragment.append(node);\n\t\tnode = next;\n\t}\n}\n","/** @import { Value } from '#client' */\nimport { internal_set } from './reactivity/sources.js';\nimport { untrack } from './runtime.js';\n\n/**\n * @type {Set<Value> | null}\n * @deprecated\n */\nexport let captured_signals = null;\n\n/**\n * Capture an array of all the signals that are read when `fn` is called\n * @template T\n * @param {() => T} fn\n */\nfunction capture_signals(fn) {\n\tvar previous_captured_signals = captured_signals;\n\n\ttry {\n\t\tcaptured_signals = new Set();\n\n\t\tuntrack(fn);\n\n\t\tif (previous_captured_signals !== null) {\n\t\t\tfor (var signal of captured_signals) {\n\t\t\t\tprevious_captured_signals.add(signal);\n\t\t\t}\n\t\t}\n\n\t\treturn captured_signals;\n\t} finally {\n\t\tcaptured_signals = previous_captured_signals;\n\t}\n}\n\n/**\n * Invokes a function and captures all signals that are read during the invocation,\n * then invalidates them.\n * @param {() => any} fn\n * @deprecated\n */\nexport function invalidate_inner_signals(fn) {\n\tfor (var signal of capture_signals(fn)) {\n\t\tinternal_set(signal, signal.v);\n\t}\n}\n","/** @import { Derived, Effect, Reaction, Source, Value } from '#client' */\nimport { DEV } from 'esm-env';\nimport { get_descriptors, get_prototype_of, includes, index_of } from '../shared/utils.js';\nimport {\n\tdestroy_block_effect_children,\n\tdestroy_effect_children,\n\teffect_tracking,\n\texecute_effect_teardown\n} from './reactivity/effects.js';\nimport {\n\tDIRTY,\n\tMAYBE_DIRTY,\n\tCLEAN,\n\tDERIVED,\n\tDESTROYED,\n\tBRANCH_EFFECT,\n\tSTATE_SYMBOL,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tCONNECTED,\n\tREACTION_IS_UPDATING,\n\tSTALE_REACTION,\n\tERROR_VALUE,\n\tWAS_MARKED,\n\tMANAGED_EFFECT,\n\tREACTION_RAN\n} from './constants.js';\nimport { old_values } from './reactivity/sources.js';\nimport {\n\treactivity_loss_tracker,\n\texecute_derived,\n\tfreeze_derived_effects,\n\trecent_async_deriveds,\n\tunfreeze_derived_effects,\n\tupdate_derived\n} from './reactivity/deriveds.js';\nimport { async_mode_flag, tracing_mode_flag } from '../flags/index.js';\nimport { tracing_expressions } from './dev/tracing.js';\nimport { get_error } from '../shared/dev.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 {\n\tBatch,\n\tbatch_values,\n\tcurrent_batch,\n\tflushSync,\n\tprevious_batch,\n\tschedule_effect\n} 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';\nimport { set_signal_status, update_derived_status } from './reactivity/status.js';\nimport * as w from './warnings.js';\n\nlet is_updating_effect = false;\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 | Set<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\t(current_sources ??= new Set()).add(value);\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 */\nexport let new_deps = null;\n\nexport let 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\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 & DERIVED) {\n\t\treaction.f &= ~WAS_MARKED;\n\t}\n\n\tif ((flags & MAYBE_DIRTY) !== 0) {\n\t\tvar dependencies = /** @type {Value[]} */ (reaction.deps);\n\t\tvar length = dependencies.length;\n\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tvar dependency = dependencies[i];\n\n\t\t\tif (is_dirty(/** @type {Derived} */ (dependency))) {\n\t\t\t\tupdate_derived(/** @type {Derived} */ (dependency));\n\t\t\t}\n\n\t\t\tif (dependency.wv > reaction.wv) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\t(flags & CONNECTED) !== 0 &&\n\t\t\t// During time traveling we don't want to reset the status so that\n\t\t\t// traversal of the graph in the other batches still happens\n\t\t\tbatch_values === null\n\t\t) {\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 !== null && current_sources.has(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_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\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\treaction.f |= REACTION_RAN;\n\t\tvar deps = reaction.deps;\n\n\t\t// Don't remove reactions during fork;\n\t\t// they must remain for when fork is discarded\n\t\tvar is_fork = current_batch?.is_fork;\n\n\t\tif (new_deps !== null) {\n\t\t\tvar i;\n\n\t\t\tif (!is_fork) {\n\t\t\t\tremove_reactions(reaction, skipped_deps);\n\t\t\t}\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 (effect_tracking() && (reaction.f & CONNECTED) !== 0) {\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 (!is_fork && 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\t// update the `rv` of the previous reaction's deps — both existing and new —\n\t\t\t// so that they are not added again\n\t\t\tif (previous_reaction.deps !== null) {\n\t\t\t\tfor (let i = 0; i < previous_skipped_deps; i += 1) {\n\t\t\t\t\tprevious_reaction.deps[i].rv = read_version;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (previous_deps !== null) {\n\t\t\t\tfor (const dep of previous_deps) {\n\t\t\t\t\tdep.rv = read_version;\n\t\t\t\t}\n\t\t\t}\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\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 || !includes.call(new_deps, dependency))\n\t) {\n\t\tvar derived = /** @type {Derived} */ (dependency);\n\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 and remove the mark flag, as it cannot be reliably removed otherwise\n\t\tif ((derived.f & CONNECTED) !== 0) {\n\t\t\tderived.f ^= CONNECTED;\n\t\t\tderived.f &= ~WAS_MARKED;\n\t\t}\n\n\t\t// In a fork it's possible that a derived is executed and gets reactions, then commits, but is\n\t\t// never re-executed. This is possible when the derived is only executed once in the context\n\t\t// of a new branch which happens before fork.commit() runs. In this case, the derived still has\n\t\t// UNINITIALIZED as its value, and then when it's loosing its reactions we need to ensure it stays\n\t\t// DIRTY so it is reexecuted once someone wants its value again.\n\t\tif (derived.v !== UNINITIALIZED) {\n\t\t\tupdate_derived_status(derived);\n\t\t}\n\n\t\t// freeze any effects inside this derived\n\t\tfreeze_derived_effects(derived);\n\n\t\t// Disconnect any reactions owned by this reaction\n\t\tremove_reactions(derived, 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 | MANAGED_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) => {\n\t\t\t// Race them against each other - in almost all cases requestAnimationFrame will fire first,\n\t\t\t// but e.g. in case the window is not focused or a view transition happens, requestAnimationFrame\n\t\t\t// will be delayed and setTimeout helps us resolve fast enough in that case\n\t\t\trequestAnimationFrame(() => f());\n\t\t\tsetTimeout(() => f());\n\t\t});\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 === null || !current_sources.has(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 {\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 (i.e. after an `await`).\n\t\t\t\t// We have to deduplicate deps/reactions in this case or remove_reactions could\n\t\t\t\t// disconnect deps/reactions that are actually still in use (if skip_deps says\n\t\t\t\t// \"disconnect all after this index\" and some of the signals are also present in\n\t\t\t\t// list prior to the cutoff index, i.e. that should be kept).\n\t\t\t\tactive_reaction.deps ??= [];\n\t\t\t\tif (!includes.call(active_reaction.deps, signal)) {\n\t\t\t\t\tactive_reaction.deps.push(signal);\n\t\t\t\t}\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 (!includes.call(reactions, 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}\n\n\tif (DEV) {\n\t\tif (\n\t\t\t!untracking &&\n\t\t\treactivity_loss_tracker &&\n\t\t\t// By checking that current/previous batch are null we filter out false positives.\n\t\t\t// reactivity_loss_tracker is only reset after a microtask, so if a flush happens\n\t\t\t// before that, we get warnings for things we shouldn't warn on.\n\t\t\tcurrent_batch === null &&\n\t\t\tprevious_batch === null &&\n\t\t\t!reactivity_loss_tracker.warned &&\n\t\t\t(reactivity_loss_tracker.effect.f & REACTION_IS_UPDATING) === 0 &&\n\t\t\t!reactivity_loss_tracker.effect_deps.has(signal)\n\t\t) {\n\t\t\treactivity_loss_tracker.warned = true;\n\n\t\t\tw.await_reactivity_loss(/** @type {string} */ (signal.label));\n\n\t\t\tvar trace = get_error('traced at');\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tif (trace) console.warn(trace);\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_error('traced at');\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 && old_values.has(signal)) {\n\t\treturn old_values.get(signal);\n\t}\n\n\tif (is_derived) {\n\t\tvar derived = /** @type {Derived} */ (signal);\n\n\t\tif (is_destroying_effect) {\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\n\t\t// connect disconnected deriveds if we are reading them inside an effect,\n\t\t// or inside another derived that is already connected\n\t\tvar should_connect =\n\t\t\t(derived.f & CONNECTED) === 0 &&\n\t\t\t!untracking &&\n\t\t\tactive_reaction !== null &&\n\t\t\t(is_updating_effect || (active_reaction.f & CONNECTED) !== 0);\n\n\t\tvar is_new = (derived.f & REACTION_RAN) === 0;\n\n\t\tif (is_dirty(derived)) {\n\t\t\tif (should_connect) {\n\t\t\t\t// set the flag before `update_derived`, so that the derived\n\t\t\t\t// is added as a reaction to its dependencies\n\t\t\t\tderived.f |= CONNECTED;\n\t\t\t}\n\n\t\t\tupdate_derived(derived);\n\t\t}\n\n\t\tif (should_connect && !is_new) {\n\t\t\tunfreeze_derived_effects(derived);\n\t\t\treconnect(derived);\n\t\t}\n\t}\n\n\tif (batch_values?.has(signal)) {\n\t\treturn batch_values.get(signal);\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/**\n * (Re)connect a disconnected derived, so that it is notified\n * of changes in `mark_reactions`\n * @param {Derived} derived\n */\nfunction reconnect(derived) {\n\tderived.f |= CONNECTED;\n\n\tif (derived.deps === null) return;\n\n\tfor (const dep of derived.deps) {\n\t\t(dep.reactions ??= []).push(derived);\n\n\t\tif ((dep.f & DERIVED) !== 0 && (dep.f & CONNECTED) === 0) {\n\t\t\tunfreeze_derived_effects(/** @type {Derived} */ (dep));\n\t\t\treconnect(/** @type {Derived} */ (dep));\n\t\t}\n\t}\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\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","/** @import { Action, ActionReturn } from '../action/public' */\n/** @import { Attachment } from './public' */\nimport { noop, render_effect } from 'svelte/internal/client';\nimport { ATTACHMENT_KEY } from '../constants.js';\nimport { untrack } from '../index-client.js';\nimport { teardown } from '../internal/client/reactivity/effects.js';\n\n/**\n * Creates an object key that will be recognised as an attachment when the object is spread onto an element,\n * as a programmatic alternative to using `{@attach ...}`. This can be useful for library authors, though\n * is generally not needed when building an app.\n *\n * ```svelte\n * <script>\n * \timport { createAttachmentKey } from 'svelte/attachments';\n *\n * \tconst props = {\n * \t\tclass: 'cool',\n * \t\tonclick: () => alert('clicked'),\n * \t\t[createAttachmentKey()]: (node) => {\n * \t\t\tnode.textContent = 'attached!';\n * \t\t}\n * \t};\n * </script>\n *\n * <button {...props}>click me</button>\n * ```\n * @since 5.29\n */\nexport function createAttachmentKey() {\n\treturn Symbol(ATTACHMENT_KEY);\n}\n\n/**\n * Converts an [action](https://svelte.dev/docs/svelte/use) into an [attachment](https://svelte.dev/docs/svelte/@attach) keeping the same behavior.\n * It's useful if you want to start using attachments on components but you have actions provided by a library.\n *\n * Note that the second argument, if provided, must be a function that _returns_ the argument to the\n * action function, not the argument itself.\n *\n * ```svelte\n * <!-- with an action -->\n * <div use:foo={bar}>...</div>\n *\n * <!-- with an attachment -->\n * <div {@attach fromAction(foo, () => bar)}>...</div>\n * ```\n * @template {EventTarget} E\n * @template {unknown} T\n * @overload\n * @param {Action<E, T> | ((element: E, arg: T) => void | ActionReturn<T>)} action The action function\n * @param {() => T} fn A function that returns the argument for the action\n * @returns {Attachment<E>}\n */\n/**\n * Converts an [action](https://svelte.dev/docs/svelte/use) into an [attachment](https://svelte.dev/docs/svelte/@attach) keeping the same behavior.\n * It's useful if you want to start using attachments on components but you have actions provided by a library.\n *\n * Note that the second argument, if provided, must be a function that _returns_ the argument to the\n * action function, not the argument itself.\n *\n * ```svelte\n * <!-- with an action -->\n * <div use:foo={bar}>...</div>\n *\n * <!-- with an attachment -->\n * <div {@attach fromAction(foo, () => bar)}>...</div>\n * ```\n * @template {EventTarget} E\n * @overload\n * @param {Action<E, void> | ((element: E) => void | ActionReturn<void>)} action The action function\n * @returns {Attachment<E>}\n */\n/**\n * Converts an [action](https://svelte.dev/docs/svelte/use) into an [attachment](https://svelte.dev/docs/svelte/@attach) keeping the same behavior.\n * It's useful if you want to start using attachments on components but you have actions provided by a library.\n *\n * Note that the second argument, if provided, must be a function that _returns_ the argument to the\n * action function, not the argument itself.\n *\n * ```svelte\n * <!-- with an action -->\n * <div use:foo={bar}>...</div>\n *\n * <!-- with an attachment -->\n * <div {@attach fromAction(foo, () => bar)}>...</div>\n * ```\n *\n * @template {EventTarget} E\n * @template {unknown} T\n * @param {Action<E, T> | ((element: E, arg: T) => void | ActionReturn<T>)} action The action function\n * @param {() => T} fn A function that returns the argument for the action\n * @returns {Attachment<E>}\n * @since 5.32\n */\nexport function fromAction(action, fn = /** @type {() => T} */ (noop)) {\n\treturn (element) => {\n\t\tconst { update, destroy } = untrack(() => action(element, fn()) ?? {});\n\n\t\tif (update) {\n\t\t\tvar ran = false;\n\t\t\trender_effect(() => {\n\t\t\t\tconst arg = fn();\n\t\t\t\tif (ran) update(arg);\n\t\t\t});\n\t\t\tran = true;\n\t\t}\n\n\t\tif (destroy) {\n\t\t\tteardown(destroy);\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 can_delegate_event(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'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\nexport const RUNES = /** @type {const} */ ([\n\t...STATE_CREATION_RUNES,\n\t'$state.eager',\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// Matches valid HTML/SVG/MathML element names and custom element names.\n// https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\n//\n// Standard elements: ASCII alpha start, followed by ASCII alphanumerics.\n// Custom elements: ASCII alpha start, followed by any mix of PCENChar (which\n// includes ASCII alphanumerics, `-`, `.`, `_`, and specified Unicode ranges),\n// with at least one hyphen required somewhere after the first character.\n//\n// Rejects strings containing whitespace, quotes, angle brackets, slashes, equals,\n// or other characters that could break out of a tag-name token and enable markup injection.\nexport const REGEX_VALID_TAG_NAME =\n\t/^[a-zA-Z][a-zA-Z0-9]*(-[a-zA-Z0-9.\\-_\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u{10000}-\\u{EFFFF}]*)?$/u;\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 { STATE_SYMBOL } from '#client/constants';\nimport { sanitize_location } from '../../../utils.js';\nimport { untrack } from '../runtime.js';\nimport * as w from '../warnings.js';\n\n/**\n *\n * @param {any} a\n * @param {any} b\n * @param {string} property\n * @param {string} location\n */\nfunction compare(a, b, property, location) {\n\tif (a !== b && typeof b === 'object' && STATE_SYMBOL in b) {\n\t\tw.assignment_value_stale(property, /** @type {string} */ (sanitize_location(location)));\n\t}\n\n\treturn a;\n}\n\n/**\n * @param {any} object\n * @param {string} property\n * @param {string} operator\n * @param {any} rhs\n * @param {string} location\n */\nexport function assign(object, property, operator, rhs, location) {\n\treturn compare(\n\t\toperator === '='\n\t\t\t? (object[property] = rhs)\n\t\t\t: operator === '&&='\n\t\t\t\t? (object[property] &&= rhs())\n\t\t\t\t: operator === '||='\n\t\t\t\t\t? (object[property] ||= rhs())\n\t\t\t\t\t: operator === '??='\n\t\t\t\t\t\t? (object[property] ??= rhs())\n\t\t\t\t\t\t: null,\n\t\tuntrack(() => object[property]),\n\t\tproperty,\n\t\tlocation\n\t);\n}\n\n/**\n * @param {any} object\n * @param {string} property\n * @param {string} operator\n * @param {any} rhs\n * @param {string} location\n */\nexport async function assign_async(object, property, operator, rhs, location) {\n\treturn compare(\n\t\toperator === '='\n\t\t\t? (object[property] = await rhs)\n\t\t\t: operator === '&&='\n\t\t\t\t? (object[property] &&= await rhs())\n\t\t\t\t: operator === '||='\n\t\t\t\t\t? (object[property] ||= await rhs())\n\t\t\t\t\t: operator === '??='\n\t\t\t\t\t\t? (object[property] ??= await rhs())\n\t\t\t\t\t\t: null,\n\t\tuntrack(() => object[property]),\n\t\tproperty,\n\t\tlocation\n\t);\n}\n","/** @import { SourceLocation } from '#client' */\nimport { COMMENT_NODE, DOCUMENT_FRAGMENT_NODE, ELEMENT_NODE } from '#client/constants';\nimport { HYDRATION_END, HYDRATION_START } from '../../../constants.js';\nimport { hydrating } from '../dom/hydration.js';\nimport { dev_stack } from '../context.js';\n\n/**\n * @param {any} fn\n * @param {string} filename\n * @param {SourceLocation[]} locations\n * @returns {any}\n */\nexport function add_locations(fn, filename, locations) {\n\treturn (/** @type {any[]} */ ...args) => {\n\t\tconst dom = fn(...args);\n\n\t\tvar node = hydrating ? dom : dom.nodeType === DOCUMENT_FRAGMENT_NODE ? dom.firstChild : dom;\n\t\tassign_locations(node, filename, locations);\n\n\t\treturn dom;\n\t};\n}\n\n/**\n * @param {Element} element\n * @param {string} filename\n * @param {SourceLocation} location\n */\nfunction assign_location(element, filename, location) {\n\t// @ts-expect-error\n\telement.__svelte_meta = {\n\t\tparent: dev_stack,\n\t\tloc: { file: filename, line: location[0], column: location[1] }\n\t};\n\n\tif (location[2]) {\n\t\tassign_locations(element.firstChild, filename, location[2]);\n\t}\n}\n\n/**\n * @param {Node | null} node\n * @param {string} filename\n * @param {SourceLocation[]} locations\n */\nfunction assign_locations(node, filename, locations) {\n\tvar i = 0;\n\tvar depth = 0;\n\n\twhile (node && i < locations.length) {\n\t\tif (hydrating && node.nodeType === COMMENT_NODE) {\n\t\t\tvar comment = /** @type {Comment} */ (node);\n\t\t\tif (comment.data[0] === HYDRATION_START) depth += 1;\n\t\t\telse if (comment.data[0] === HYDRATION_END) depth -= 1;\n\t\t}\n\n\t\tif (depth === 0 && node.nodeType === ELEMENT_NODE) {\n\t\t\tassign_location(/** @type {Element} */ (node), filename, locations[i++]);\n\t\t}\n\n\t\tnode = node.nextSibling;\n\t}\n}\n","import { teardown } from '../../reactivity/effects.js';\nimport { define_property } 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/**\n * Used on elements, as a map of event type -> event handler,\n * and on events themselves to track which element handled an event\n */\nexport const event_symbol = Symbol('events');\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 {string} event_name\n * @param {Element} element\n * @param {EventListener} [handler]\n * @returns {void}\n */\nexport function delegated(event_name, element, handler) {\n\t// @ts-expect-error\n\t(element[event_symbol] ??= {})[event_name] = handler;\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 `event_symbol` to skip all nodes below it in case this is a\n\t// parent of the `event_symbol` 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[event_symbol];\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[event_symbol] = 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 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 events 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\tif (current_target === handler_element) break;\n\n\t\t\ttry {\n\t\t\t\t// @ts-expect-error\n\t\t\t\tvar delegated = current_target[event_symbol]?.[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\tdelegated.call(current_target, event);\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) break;\n\n\t\t\tpath_idx++;\n\t\t\tcurrent_target = path_idx < path.length ? /** @type {Element} */ (path[path_idx]) : null;\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[event_symbol] = 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 { create_element } from './operations.js';\n\nconst policy =\n\t// We gotta write it like this because after downleveling the pure comment may end up in the wrong location\n\tglobalThis?.window?.trustedTypes &&\n\t/* @__PURE__ */ globalThis.window.trustedTypes.createPolicy('svelte-trusted-html', {\n\t\t/** @param {string} html */\n\t\tcreateHTML: (html) => {\n\t\t\treturn html;\n\t\t}\n\t});\n\n/** @param {string} html */\nexport function create_trusted_html(html) {\n\treturn /** @type {string} */ (policy?.createHTML(html) ?? html);\n}\n\n/**\n * @param {string} html\n */\nexport function create_fragment_from_html(html) {\n\tvar elem = create_element('template');\n\telem.innerHTML = create_trusted_html(html.replaceAll('<!>', '<!---->')); // XHTML compliance\n\treturn elem.content;\n}\n","/** @import { Effect, EffectNodes, 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\tget_next_sibling,\n\tis_firefox,\n\tcreate_element,\n\tcreate_fragment,\n\tcreate_comment,\n\tset_attribute,\n\tmerge_text_nodes\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 {\n\tCOMMENT_NODE,\n\tDOCUMENT_FRAGMENT_NODE,\n\tIS_XHTML,\n\tREACTION_RAN,\n\tTEXT_NODE\n} from '#client/constants';\n\nconst TEMPLATE_TAG = IS_XHTML ? 'template' : 'TEMPLATE';\nconst SCRIPT_TAG = IS_XHTML ? 'script' : 'SCRIPT';\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 === null) {\n\t\teffect.nodes = { start, end, a: null, t: null };\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 {TemplateNode} */ (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 {TemplateNode} */ (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.nodeName === TEMPLATE_TAG\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.nodeName === '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 {TemplateNode} */ (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).nodeName === SCRIPT_TAG\n\t\t\t? [/** @type {HTMLScriptElement} */ (node)]\n\t\t\t: node.querySelectorAll('script');\n\n\tconst effect = /** @type {Effect & { nodes: EffectNodes }} */ (active_effect);\n\n\tfor (const script of scripts) {\n\t\tconst clone = create_element('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} else {\n\t\tmerge_text_nodes(/** @type {Text} */ (node));\n\t}\n\n\tassign_nodes(node, node);\n\treturn node;\n}\n\n/**\n * @returns {TemplateNode | DocumentFragment}\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\tvar effect = /** @type {Effect & { nodes: EffectNodes }} */ (active_effect);\n\n\t\t// When hydrating and outer component and an inner component is async, i.e. blocked on a promise,\n\t\t// then by the time the inner resolves we have already advanced to the end of the hydrated nodes\n\t\t// of the parent component. Check for defined for that reason to avoid rewinding the parent's end marker.\n\t\tif ((effect.f & REACTION_RAN) === 0 || effect.nodes.end === null) {\n\t\t\teffect.nodes.end = hydrate_node;\n\t\t}\n\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, EffectNodes, 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 } from './reactivity/effects.js';\nimport { hydrate_node, hydrating, set_hydrate_node, set_hydrating } 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 * 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, STATE_SYMBOL, TEXT_CACHE } from './constants.js';\nimport { boundary } from './dom/blocks/boundary.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// prettier-ignore\n\tif (str !== (/** @type {any} */ (text)[TEXT_CACHE] ??= text.nodeValue)) {\n\t\t/** @type {any} */ (text)[TEXT_CACHE] = 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\ttransformError?: (error: unknown) => unknown;\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\ttransformError?: (error: unknown) => unknown;\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 = get_first_child(target);\n\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 = 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\n\t\tconst instance = _mount(component, { ...options, anchor });\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 occurred 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}\n}\n\n/** @type {Map<EventTarget, Map<string, number>>} */\nconst 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(\n\tComponent,\n\t{ target, anchor, props = {}, events, context, intro = true, transformError }\n) {\n\tinit_operations();\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\tboundary(\n\t\t\t/** @type {TemplateNode} */ (anchor_node),\n\t\t\t{\n\t\t\t\tpending: () => {}\n\t\t\t},\n\t\t\t(anchor_node) => {\n\t\t\t\tpush({});\n\t\t\t\tvar ctx = /** @type {ComponentContext} */ (component_context);\n\t\t\t\tif (context) ctx.c = context;\n\n\t\t\t\tif (events) {\n\t\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\t/** @type {any} */ (props).$$events = events;\n\t\t\t\t}\n\n\t\t\t\tif (hydrating) {\n\t\t\t\t\tassign_nodes(/** @type {TemplateNode} */ (anchor_node), null);\n\t\t\t\t}\n\n\t\t\t\tshould_intro = intro;\n\t\t\t\t// @ts-expect-error the public typings are not what the actual function looks like\n\t\t\t\tcomponent = Component(anchor_node, props) || {};\n\t\t\t\tshould_intro = true;\n\n\t\t\t\tif (hydrating) {\n\t\t\t\t\t/** @type {Effect & { nodes: EffectNodes }} */ (active_effect).nodes.end = hydrate_node;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\thydrate_node === null ||\n\t\t\t\t\t\thydrate_node.nodeType !== COMMENT_NODE ||\n\t\t\t\t\t\t/** @type {Comment} */ (hydrate_node).data !== HYDRATION_END\n\t\t\t\t\t) {\n\t\t\t\t\t\tw.hydration_mismatch();\n\t\t\t\t\t\tthrow HYDRATION_ERROR;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tpop();\n\t\t\t},\n\t\t\ttransformError\n\t\t);\n\n\t\t// Setup event delegation _after_ component is mounted - if an error would happen during mount, it would otherwise not be cleaned up\n\t\t/** @type {Set<string>} */\n\t\tvar registered_events = new Set();\n\n\t\t/** @param {Array<string>} events */\n\t\tvar event_handle = (events) => {\n\t\t\tfor (var i = 0; i < events.length; i++) {\n\t\t\t\tvar event_name = events[i];\n\n\t\t\t\tif (registered_events.has(event_name)) continue;\n\t\t\t\tregistered_events.add(event_name);\n\n\t\t\t\tvar passive = is_passive_event(event_name);\n\n\t\t\t\t// Add the event listener to both the container and the document.\n\t\t\t\t// The container listener ensures we catch events from within in case\n\t\t\t\t// the outer content stops propagation of the event.\n\t\t\t\t//\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\tfor (const node of [target, document]) {\n\t\t\t\t\tvar counts = listeners.get(node);\n\n\t\t\t\t\tif (counts === undefined) {\n\t\t\t\t\t\tcounts = new Map();\n\t\t\t\t\t\tlisteners.set(node, counts);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar count = counts.get(event_name);\n\n\t\t\t\t\tif (count === undefined) {\n\t\t\t\t\t\tnode.addEventListener(event_name, handle_event_propagation, { passive });\n\t\t\t\t\t\tcounts.set(event_name, 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcounts.set(event_name, count + 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tevent_handle(array_from(all_registered_events));\n\t\troot_event_handles.add(event_handle);\n\n\t\treturn () => {\n\t\t\tfor (var event_name of registered_events) {\n\t\t\t\tfor (const node of [target, document]) {\n\t\t\t\t\tvar counts = /** @type {Map<string, number>} */ (listeners.get(node));\n\t\t\t\t\tvar count = /** @type {number} */ (counts.get(event_name));\n\n\t\t\t\t\tif (--count == 0) {\n\t\t\t\t\t\tnode.removeEventListener(event_name, handle_event_propagation);\n\t\t\t\t\t\tcounts.delete(event_name);\n\n\t\t\t\t\t\tif (counts.size === 0) {\n\t\t\t\t\t\t\tlisteners.delete(node);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcounts.set(event_name, count);\n\t\t\t\t\t}\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\tif (STATE_SYMBOL in component) {\n\t\t\tw.state_proxy_unmount();\n\t\t} else {\n\t\t\tw.lifecycle_double_unmount();\n\t\t}\n\t}\n\n\treturn Promise.resolve();\n}\n","/** @import { Effect, TemplateNode } from '#client' */\nimport { FILENAME, HMR } from '../../../constants.js';\nimport { EFFECT_TRANSPARENT, HMR_ANCHOR } from '#client/constants';\nimport { hydrate_node, hydrating } from '../dom/hydration.js';\nimport { block, branch, destroy_effect } from '../reactivity/effects.js';\nimport { set, source } from '../reactivity/sources.js';\nimport { set_should_intro } from '../render.js';\nimport { active_effect, get } from '../runtime.js';\n\n/**\n * @template {(anchor: Comment, props: any) => any} Component\n * @param {Component} fn\n */\nexport function hmr(fn) {\n\tconst current = source(fn);\n\n\t/**\n\t * @param {TemplateNode} initial_anchor\n\t * @param {any} props\n\t */\n\tfunction wrapper(initial_anchor, props) {\n\t\tlet component = {};\n\t\tlet instance = {};\n\n\t\t/** @type {Effect} */\n\t\tlet effect;\n\n\t\tlet ran = false;\n\t\tlet anchor = initial_anchor;\n\n\t\tblock(() => {\n\t\t\tif (component === (component = get(current))) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (effect) {\n\t\t\t\t// @ts-ignore\n\t\t\t\tfor (var k in instance) delete instance[k];\n\t\t\t\tdestroy_effect(effect);\n\t\t\t}\n\n\t\t\teffect = branch(() => {\n\t\t\t\tanchor = /** @type {any} */ (anchor)[HMR_ANCHOR] ?? anchor;\n\n\t\t\t\t// when the component is invalidated, replace it without transitions\n\t\t\t\tif (ran) set_should_intro(false);\n\n\t\t\t\t// preserve getters/setters\n\t\t\t\tvar result =\n\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\tnew.target ? new component(anchor, props) : component(anchor, props);\n\t\t\t\t// a component is not guaranteed to return something and we can't invoke getOwnPropertyDescriptors on undefined\n\t\t\t\tif (result) {\n\t\t\t\t\tObject.defineProperties(instance, Object.getOwnPropertyDescriptors(result));\n\t\t\t\t}\n\n\t\t\t\tif (ran) set_should_intro(true);\n\t\t\t});\n\n\t\t\t// Forward the nodes from the inner effect to the outer active effect which would\n\t\t\t// get them if the HMR wrapper wasn't there. Do this inside the block not outside\n\t\t\t// so that HMR updates to the component will also update the nodes on the active effect.\n\t\t\t/** @type {Effect} */ (active_effect).nodes = effect.nodes;\n\t\t}, EFFECT_TRANSPARENT);\n\n\t\tran = true;\n\n\t\tif (hydrating) {\n\t\t\tanchor = hydrate_node;\n\t\t}\n\n\t\treturn instance;\n\t}\n\n\t// @ts-expect-error\n\twrapper[FILENAME] = fn[FILENAME];\n\n\t// @ts-ignore\n\twrapper[HMR] = {\n\t\tfn,\n\t\tcurrent,\n\t\tupdate: (/** @type {any} */ incoming) => {\n\t\t\t// This logic ensures that the first version of the component is the one\n\t\t\t// whose update function and therefore block effect is preserved across updates.\n\t\t\t// If we don't do this dance and instead just use `incoming` as the new component\n\t\t\t// and then update, we'll create an ever-growing stack of block effects.\n\n\t\t\t// Trigger the original block effect\n\t\t\tset(wrapper[HMR].current, incoming[HMR].fn);\n\n\t\t\t// Replace the incoming source with the original one\n\t\t\tincoming[HMR].current = wrapper[HMR].current;\n\t\t}\n\t};\n\n\treturn wrapper;\n}\n","/** @typedef {{ file: string, line: number, column: number }} Location */\n\nimport { get_descriptor } from '../../shared/utils.js';\nimport { LEGACY_PROPS, STATE_SYMBOL } from '#client/constants';\nimport { FILENAME } from '../../../constants.js';\nimport { component_context } from '../context.js';\nimport * as w from '../warnings.js';\nimport { sanitize_location } from '../../../utils.js';\n\n/**\n * Sets up a validator that\n * - traverses the path of a prop to find out if it is allowed to be mutated\n * - checks that the binding chain is not interrupted\n * @param {Record<string, any>} props\n */\nexport function create_ownership_validator(props) {\n\tconst component = component_context?.function;\n\tconst parent = component_context?.p?.function;\n\n\treturn {\n\t\t/**\n\t\t * @param {string} prop\n\t\t * @param {any[]} path\n\t\t * @param {any} result\n\t\t * @param {number} line\n\t\t * @param {number} column\n\t\t */\n\t\tmutation: (prop, path, result, line, column) => {\n\t\t\tconst name = path[0];\n\t\t\tif (is_bound_or_unset(props, name) || !parent) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\t/** @type {any} */\n\t\t\tlet value = props;\n\n\t\t\tfor (let i = 0; i < path.length - 1; i++) {\n\t\t\t\tvalue = value[path[i]];\n\t\t\t\tif (!value?.[STATE_SYMBOL]) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst location = sanitize_location(`${component[FILENAME]}:${line}:${column}`);\n\n\t\t\tw.ownership_invalid_mutation(name, location, prop, parent[FILENAME]);\n\n\t\t\treturn result;\n\t\t},\n\t\t/**\n\t\t * @param {any} key\n\t\t * @param {any} child_component\n\t\t * @param {() => any} value\n\t\t */\n\t\tbinding: (key, child_component, value) => {\n\t\t\tif (!is_bound_or_unset(props, key) && parent && value()?.[STATE_SYMBOL]) {\n\t\t\t\tw.ownership_invalid_binding(\n\t\t\t\t\tcomponent[FILENAME],\n\t\t\t\t\tkey,\n\t\t\t\t\tchild_component[FILENAME],\n\t\t\t\t\tparent[FILENAME]\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t};\n}\n\n/**\n * @param {Record<string, any>} props\n * @param {string} prop_name\n */\nfunction is_bound_or_unset(props, prop_name) {\n\t// Can be the case when someone does `mount(Component, props)` with `let props = $state({...})`\n\t// or `createClassComponent(Component, props)`\n\tconst is_entry_props = STATE_SYMBOL in props || LEGACY_PROPS in props;\n\treturn (\n\t\t!!get_descriptor(props, prop_name)?.set ||\n\t\t(is_entry_props && prop_name in props) ||\n\t\t!(prop_name in props)\n\t);\n}\n","import * as e from '../errors.js';\nimport { component_context } from '../context.js';\nimport { FILENAME } from '../../../constants.js';\n\n/** @param {Function & { [FILENAME]: string }} target */\nexport function check_target(target) {\n\tif (target) {\n\t\te.component_api_invalid_new(target[FILENAME] ?? 'a component', target.name);\n\t}\n}\n\nexport function legacy_api() {\n\tconst component = component_context?.function;\n\n\t/** @param {string} method */\n\tfunction error(method) {\n\t\te.component_api_changed(method, component[FILENAME]);\n\t}\n\n\treturn {\n\t\t$destroy: () => error('$destroy()'),\n\t\t$on: () => error('$on(...)'),\n\t\t$set: () => error('$set(...)')\n\t};\n}\n","import { UNINITIALIZED } from '../../../constants.js';\nimport { snapshot } from '../../shared/clone.js';\nimport { eager_effect, render_effect, validate_effect } from '../reactivity/effects.js';\nimport { untrack } from '../runtime.js';\nimport { get_error } from '../../shared/dev.js';\n\n/**\n * @param {() => any[]} get_value\n * @param {Function} inspector\n * @param {boolean} show_stack\n */\nexport function inspect(get_value, inspector, show_stack = false) {\n\tvalidate_effect('$inspect');\n\n\tlet initial = true;\n\tlet error = /** @type {any} */ (UNINITIALIZED);\n\n\t// Inspect effects runs synchronously so that we can capture useful\n\t// stack traces. As a consequence, reading the value might result\n\t// in an error (an `$inspect(object.property)` will run before the\n\t// `{#if object}...{/if}` that contains it)\n\teager_effect(() => {\n\t\terror = UNINITIALIZED;\n\n\t\ttry {\n\t\t\tvar value = get_value();\n\t\t} catch (e) {\n\t\t\terror = e;\n\t\t\treturn;\n\t\t}\n\n\t\tvar snap = snapshot(value, true, true);\n\t\tuntrack(() => {\n\t\t\tif (show_stack) {\n\t\t\t\tinspector(...snap);\n\n\t\t\t\tif (!initial) {\n\t\t\t\t\tconst stack = get_error('$inspect(...)');\n\t\t\t\t\tif (stack) {\n\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\tconsole.groupCollapsed('stack trace');\n\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\tconsole.log(stack);\n\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\tconsole.groupEnd();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tinspector(initial ? 'init' : 'update', ...snap);\n\t\t\t}\n\t\t});\n\n\t\tinitial = false;\n\t});\n\n\t// If an error occurs, we store it (along with its stack trace).\n\t// If the render effect subsequently runs, we log the error,\n\t// but if it doesn't run it's because the `$inspect` was\n\t// destroyed, meaning we don't need to bother\n\trender_effect(() => {\n\t\ttry {\n\t\t\t// call `get_value` so that this runs alongside the inspect effect\n\t\t\tget_value();\n\t\t} catch {\n\t\t\t// ignore\n\t\t}\n\n\t\tif (error !== UNINITIALIZED) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(error);\n\t\t\terror = UNINITIALIZED;\n\t\t}\n\t});\n}\n","/** @import { Blocker, TemplateNode, Value } from '#client' */\nimport { flatten } from '../../reactivity/async.js';\nimport { get } from '../../runtime.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tset_hydrate_node,\n\tset_hydrating,\n\tskip_nodes\n} from '../hydration.js';\nimport { assign_nodes } from '../template.js';\n\n/**\n * @param {TemplateNode} node\n * @param {Blocker[]} blockers\n * @param {Array<() => Promise<any>>} expressions\n * @param {(anchor: TemplateNode, ...deriveds: Value[]) => void} fn\n */\nexport function async(node, blockers = [], expressions = [], fn) {\n\tvar was_hydrating = hydrating;\n\tvar end = null;\n\n\tif (was_hydrating) {\n\t\thydrate_next();\n\t\tend = skip_nodes(false);\n\t\tassign_nodes(node, end); // Necessary if this wraps the sole child of a block, else end marker can be wrong\n\t}\n\n\tif (expressions.length === 0 && blockers.every((b) => b.settled)) {\n\t\tfn(node);\n\n\t\t// This is necessary because it is not guaranteed that the render function will\n\t\t// advance the hydration node to $.async's end marker: it may stop at an inner\n\t\t// block's end marker (in case of an inner if block for example), but it also may\n\t\t// stop at the correct $.async end marker (in case of component child) - hence\n\t\t// we can't just use hydrate_next()\n\t\t// TODO this feels indicative of a bug elsewhere; ideally we wouldn't need\n\t\t// to double-traverse in the already-resolved case\n\t\tif (was_hydrating) {\n\t\t\tset_hydrate_node(end);\n\t\t}\n\n\t\treturn;\n\t}\n\n\tif (was_hydrating) {\n\t\tvar previous_hydrate_node = hydrate_node;\n\t\tset_hydrate_node(end);\n\t}\n\n\tflatten(blockers, [], expressions, (values) => {\n\t\tif (was_hydrating) {\n\t\t\tset_hydrating(true);\n\t\t\tset_hydrate_node(previous_hydrate_node);\n\t\t}\n\n\t\ttry {\n\t\t\t// get values eagerly to avoid creating blocks if they reject\n\t\t\tfor (const d of values) get(d);\n\n\t\t\tfn(node, ...values);\n\t\t} finally {\n\t\t\tif (was_hydrating) {\n\t\t\t\tset_hydrating(false);\n\t\t\t}\n\t\t}\n\t});\n}\n","import * as e from '../errors.js';\n/**\n * @param {Node} anchor\n * @param {...(()=>any)[]} args\n */\nexport function validate_snippet_args(anchor, ...args) {\n\tif (typeof anchor !== 'object' || !(anchor instanceof Node)) {\n\t\te.invalid_snippet_arguments();\n\t}\n\n\tfor (let arg of args) {\n\t\tif (typeof arg !== 'function') {\n\t\t\te.invalid_snippet_arguments();\n\t\t}\n\t}\n}\n","/** @import { Effect, TemplateNode } from '#client' */\nimport { Batch, current_batch } from '../../reactivity/batch.js';\nimport {\n\tbranch,\n\tdestroy_effect,\n\tmove_effect,\n\tpause_effect,\n\tresume_effect\n} from '../../reactivity/effects.js';\nimport { HMR_ANCHOR } from '../../constants.js';\nimport { hydrate_node, hydrating } from '../hydration.js';\nimport { create_text, should_defer_append } from '../operations.js';\nimport { DEV } from 'esm-env';\n\n/**\n * @typedef {{ effect: Effect, fragment: DocumentFragment }} Branch\n */\n\n/**\n * @template Key\n */\nexport class BranchManager {\n\t/** @type {TemplateNode} */\n\tanchor;\n\n\t/** @type {Map<Batch, Key>} */\n\t#batches = new Map();\n\n\t/**\n\t * Map of keys to effects that are currently rendered in the DOM.\n\t * These effects are visible and actively part of the document tree.\n\t * Example:\n\t * ```\n\t * {#if condition}\n\t * \tfoo\n\t * {:else}\n\t * \tbar\n\t * {/if}\n\t * ```\n\t * Can result in the entries `true->Effect` and `false->Effect`\n\t * @type {Map<Key, Effect>}\n\t */\n\t#onscreen = new Map();\n\n\t/**\n\t * Similar to #onscreen with respect to the keys, but contains branches that are not yet\n\t * in the DOM, because their insertion is deferred.\n\t * @type {Map<Key, Branch>}\n\t */\n\t#offscreen = new Map();\n\n\t/**\n\t * Keys of effects that are currently outroing\n\t * @type {Set<Key>}\n\t */\n\t#outroing = new Set();\n\n\t/**\n\t * Whether to pause (i.e. outro) on change, or destroy immediately.\n\t * This is necessary for `<svelte:element>`\n\t */\n\t#transition = true;\n\n\t/**\n\t * @param {TemplateNode} anchor\n\t * @param {boolean} transition\n\t */\n\tconstructor(anchor, transition = true) {\n\t\tthis.anchor = anchor;\n\t\tthis.#transition = transition;\n\t}\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\t#commit = (batch) => {\n\t\t// if this batch was made obsolete, bail\n\t\tif (!this.#batches.has(batch)) return;\n\n\t\tvar key = /** @type {Key} */ (this.#batches.get(batch));\n\n\t\tvar onscreen = this.#onscreen.get(key);\n\n\t\tif (onscreen) {\n\t\t\t// effect is already in the DOM — abort any current outro\n\t\t\tresume_effect(onscreen);\n\t\t\tthis.#outroing.delete(key);\n\t\t} else {\n\t\t\t// effect is currently offscreen. put it in the DOM\n\t\t\tvar offscreen = this.#offscreen.get(key);\n\n\t\t\tif (offscreen) {\n\t\t\t\t// effect could have been outro'ed before through a prior batch — resume if necessary\n\t\t\t\tresume_effect(offscreen.effect);\n\t\t\t\tthis.#onscreen.set(key, offscreen.effect);\n\t\t\t\tthis.#offscreen.delete(key);\n\n\t\t\t\tif (DEV) {\n\t\t\t\t\t// Tell hmr.js about the anchor it should use for updates,\n\t\t\t\t\t// since the initial one will be removed\n\t\t\t\t\t/** @type {any} */ (offscreen.fragment.lastChild)[HMR_ANCHOR] = this.anchor;\n\t\t\t\t}\n\n\t\t\t\t// remove the anchor...\n\t\t\t\t/** @type {TemplateNode} */ (offscreen.fragment.lastChild).remove();\n\n\t\t\t\t// ...and append the fragment\n\t\t\t\tthis.anchor.before(offscreen.fragment);\n\t\t\t\tonscreen = offscreen.effect;\n\t\t\t}\n\t\t}\n\n\t\tfor (const [b, k] of this.#batches) {\n\t\t\tthis.#batches.delete(b);\n\n\t\t\tif (b === batch) {\n\t\t\t\t// keep values for newer batches\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst offscreen = this.#offscreen.get(k);\n\n\t\t\tif (offscreen) {\n\t\t\t\t// for older batches, destroy offscreen effects\n\t\t\t\t// as they will never be committed\n\t\t\t\tdestroy_effect(offscreen.effect);\n\t\t\t\tthis.#offscreen.delete(k);\n\t\t\t}\n\t\t}\n\n\t\t// outro/destroy all onscreen effects...\n\t\tfor (const [k, effect] of this.#onscreen) {\n\t\t\t// ...except the one that was just committed\n\t\t\t//    or those that are already outroing (else the transition is aborted and the effect destroyed right away)\n\t\t\tif (k === key || this.#outroing.has(k)) continue;\n\n\t\t\tconst on_destroy = () => {\n\t\t\t\tconst keys = Array.from(this.#batches.values());\n\n\t\t\t\tif (keys.includes(k)) {\n\t\t\t\t\t// keep the effect offscreen, as another batch will need it\n\t\t\t\t\tvar fragment = document.createDocumentFragment();\n\t\t\t\t\tmove_effect(effect, fragment);\n\n\t\t\t\t\tfragment.append(create_text()); // TODO can we avoid this?\n\n\t\t\t\t\tthis.#offscreen.set(k, { effect, fragment });\n\t\t\t\t} else {\n\t\t\t\t\tdestroy_effect(effect);\n\t\t\t\t}\n\n\t\t\t\tthis.#outroing.delete(k);\n\t\t\t\tthis.#onscreen.delete(k);\n\t\t\t};\n\n\t\t\tif (this.#transition || !onscreen) {\n\t\t\t\tthis.#outroing.add(k);\n\t\t\t\tpause_effect(effect, on_destroy, false);\n\t\t\t} else {\n\t\t\t\ton_destroy();\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\t#discard = (batch) => {\n\t\tthis.#batches.delete(batch);\n\n\t\tconst keys = Array.from(this.#batches.values());\n\n\t\tfor (const [k, branch] of this.#offscreen) {\n\t\t\tif (!keys.includes(k)) {\n\t\t\t\tdestroy_effect(branch.effect);\n\t\t\t\tthis.#offscreen.delete(k);\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t *\n\t * @param {any} key\n\t * @param {null | ((target: TemplateNode) => void)} fn\n\t */\n\tensure(key, fn) {\n\t\tvar batch = /** @type {Batch} */ (current_batch);\n\t\tvar defer = should_defer_append();\n\n\t\tif (fn && !this.#onscreen.has(key) && !this.#offscreen.has(key)) {\n\t\t\tif (defer) {\n\t\t\t\tvar fragment = document.createDocumentFragment();\n\t\t\t\tvar target = create_text();\n\n\t\t\t\tfragment.append(target);\n\n\t\t\t\tthis.#offscreen.set(key, {\n\t\t\t\t\teffect: branch(() => fn(target)),\n\t\t\t\t\tfragment\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.#onscreen.set(\n\t\t\t\t\tkey,\n\t\t\t\t\tbranch(() => fn(this.anchor))\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis.#batches.set(batch, key);\n\n\t\tif (defer) {\n\t\t\tfor (const [k, effect] of this.#onscreen) {\n\t\t\t\tif (k === key) {\n\t\t\t\t\tbatch.unskip_effect(effect);\n\t\t\t\t} else {\n\t\t\t\t\tbatch.skip_effect(effect);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const [k, branch] of this.#offscreen) {\n\t\t\t\tif (k === key) {\n\t\t\t\t\tbatch.unskip_effect(branch.effect);\n\t\t\t\t} else {\n\t\t\t\t\tbatch.skip_effect(branch.effect);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbatch.oncommit(this.#commit);\n\t\t\tbatch.ondiscard(this.#discard);\n\t\t} else {\n\t\t\tif (hydrating) {\n\t\t\t\tthis.anchor = hydrate_node;\n\t\t\t}\n\n\t\t\tthis.#commit(batch);\n\t\t}\n\t}\n}\n","/** @import { Source, TemplateNode } from '#client' */\nimport { is_promise } from '../../../shared/utils.js';\nimport { block } from '../../reactivity/effects.js';\nimport { internal_set, mutable_source, source } from '../../reactivity/sources.js';\nimport {\n\thydrate_next,\n\thydrating,\n\tskip_nodes,\n\tset_hydrate_node,\n\tset_hydrating,\n\thydrate_node\n} from '../hydration.js';\nimport { queue_micro_task } from '../task.js';\nimport { HYDRATION_START_ELSE, UNINITIALIZED } from '../../../../constants.js';\nimport { is_runes } from '../../context.js';\nimport { Batch, current_batch, flushSync, is_flushing_sync } from '../../reactivity/batch.js';\nimport { BranchManager } from './branches.js';\nimport { capture, unset_context } from '../../reactivity/async.js';\nimport { DEV } from 'esm-env';\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 {(() => any)} 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 runes = is_runes();\n\n\tvar v = /** @type {V} */ (UNINITIALIZED);\n\tvar value = runes ? source(v) : mutable_source(v, false, false);\n\tvar error = runes ? source(v) : mutable_source(v, false, false);\n\n\tif (DEV) {\n\t\tvalue.label = '{#await ...} value';\n\t\terror.label = '{#await ...} error';\n\t}\n\n\tvar branches = new BranchManager(node);\n\n\tblock(() => {\n\t\tvar batch = /** @type {Batch} */ (current_batch);\n\t\tvar input = get_input();\n\n\t\tvar destroyed = false;\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 `node` to a `Comment` causes TypeScript and Prettier to fight\n\t\tlet mismatch = hydrating && is_promise(input) === (node.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\tset_hydrate_node(skip_nodes());\n\t\t\tset_hydrating(false);\n\t\t}\n\n\t\tif (is_promise(input)) {\n\t\t\tvar restore = capture();\n\t\t\tvar resolved = false;\n\n\t\t\t/**\n\t\t\t * @param {() => void} fn\n\t\t\t */\n\t\t\tconst resolve = (fn) => {\n\t\t\t\tif (destroyed) return;\n\n\t\t\t\tresolved = true;\n\t\t\t\t// We don't want to restore the previous batch here; {#await} blocks don't follow the async logic\n\t\t\t\t// we have elsewhere, instead pending/resolve/fail states are each their own batch so to speak.\n\t\t\t\trestore(false);\n\t\t\t\t// ...but it might still be set here. That means a `save(...)` has restored it — but that batch will\n\t\t\t\t// likely already have been committed by the time it resolves, and this resolve should be processed\n\t\t\t\t// in a separate batch. We're not using batch.deactivate()/activate() above because get_input()\n\t\t\t\t// could write to sources, which would then incorrectly create a new batch or could mess with\n\t\t\t\t// async_derived expecting a current_batch to exist.\n\t\t\t\tif (current_batch === batch) {\n\t\t\t\t\tbatch.deactivate();\n\t\t\t\t}\n\t\t\t\t// Make sure we have a batch, since the branch manager expects one to exist\n\t\t\t\tBatch.ensure();\n\n\t\t\t\ttry {\n\t\t\t\t\tfn();\n\t\t\t\t} finally {\n\t\t\t\t\tunset_context(false);\n\n\t\t\t\t\t// without this, the DOM does not update until two ticks after the promise\n\t\t\t\t\t// resolves, which is unexpected behaviour (and somewhat irksome to test)\n\t\t\t\t\tif (!is_flushing_sync) flushSync();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tinput.then(\n\t\t\t\t(v) => {\n\t\t\t\t\tresolve(() => {\n\t\t\t\t\t\tinternal_set(value, v);\n\t\t\t\t\t\tbranches.ensure(THEN, then_fn && ((target) => then_fn(target, value)));\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t(e) => {\n\t\t\t\t\tresolve(() => {\n\t\t\t\t\t\tinternal_set(error, e);\n\t\t\t\t\t\tbranches.ensure(CATCH, catch_fn && ((target) => catch_fn(target, error)));\n\n\t\t\t\t\t\tif (!catch_fn) {\n\t\t\t\t\t\t\t// Rethrow the error if no catch block exists\n\t\t\t\t\t\t\tthrow error.v;\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 (hydrating) {\n\t\t\t\tbranches.ensure(PENDING, pending_fn);\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 then\n\t\t\t\tqueue_micro_task(() => {\n\t\t\t\t\tif (!resolved) {\n\t\t\t\t\t\tresolve(() => {\n\t\t\t\t\t\t\tbranches.ensure(PENDING, pending_fn);\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} else {\n\t\t\tinternal_set(value, input);\n\t\t\tbranches.ensure(THEN, then_fn && ((target) => then_fn(target, value)));\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\treturn () => {\n\t\t\tdestroyed = true;\n\t\t};\n\t});\n}\n","/** @import { TemplateNode } from '#client' */\nimport { EFFECT_TRANSPARENT } from '#client/constants';\nimport {\n\thydrate_next,\n\thydrating,\n\tread_hydration_instruction,\n\tskip_nodes,\n\tset_hydrate_node,\n\tset_hydrating,\n\thydrate_node\n} from '../hydration.js';\nimport { block } from '../../reactivity/effects.js';\nimport { BranchManager } from './branches.js';\n\n/**\n * @param {TemplateNode} node\n * @param {(branch: (fn: (anchor: Node) => void, key?: number | false) => 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\t/** @type {TemplateNode | undefined} */\n\tvar marker;\n\tif (hydrating) {\n\t\tmarker = hydrate_node;\n\t\thydrate_next();\n\t}\n\n\tvar branches = new BranchManager(node);\n\tvar flags = elseif ? EFFECT_TRANSPARENT : 0;\n\n\t/**\n\t * @param {number | false} key\n\t * @param {null | ((anchor: Node) => void)} fn\n\t */\n\tfunction update_branch(key, fn) {\n\t\tif (hydrating) {\n\t\t\tvar data = read_hydration_instruction(/** @type {TemplateNode} */ (marker));\n\n\t\t\t// \"[n\" = branch n, \"[-1\" = else\n\t\t\tif (key !== parseInt(data.substring(1))) {\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\tvar anchor = skip_nodes();\n\n\t\t\t\tset_hydrate_node(anchor);\n\t\t\t\tbranches.anchor = anchor;\n\n\t\t\t\tset_hydrating(false);\n\t\t\t\tbranches.ensure(key, fn);\n\t\t\t\tset_hydrating(true);\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tbranches.ensure(key, fn);\n\t}\n\n\tblock(() => {\n\t\tvar has_branch = false;\n\n\t\tfn((fn, key = 0) => {\n\t\t\thas_branch = true;\n\t\t\tupdate_branch(key, fn);\n\t\t});\n\n\t\tif (!has_branch) {\n\t\t\tupdate_branch(-1, null);\n\t\t}\n\t}, flags);\n}\n","/** @import { TemplateNode } from '#client' */\nimport { is_runes } from '../../context.js';\nimport { block } from '../../reactivity/effects.js';\nimport { hydrate_next, hydrating } from '../hydration.js';\nimport { BranchManager } from './branches.js';\n\nconst NAN = Symbol('NaN');\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 branches = new BranchManager(node);\n\n\tvar legacy = !is_runes();\n\n\tblock(() => {\n\t\tvar key = get_key();\n\n\t\t// NaN !== NaN, hence we do this workaround to not trigger remounts unnecessarily\n\t\tif (key !== key) {\n\t\t\tkey = /** @type {any} */ (NAN);\n\t\t}\n\n\t\t// key blocks in Svelte <5 had stupid semantics\n\t\tif (legacy && key !== null && typeof key === 'object') {\n\t\t\tkey = /** @type {V} */ ({});\n\t\t}\n\n\t\tbranches.ensure(key, render_fn);\n\t});\n}\n","import { render_effect } 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(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, EachOutroGroup, EachState, Effect, EffectNodes, 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\tskip_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\tmove_effect,\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 { BRANCH_EFFECT, COMMENT_NODE, DESTROYED, EFFECT_OFFSCREEN, INERT } from '#client/constants';\nimport { queue_micro_task } from '../task.js';\nimport { get } from '../../runtime.js';\nimport { DEV } from 'esm-env';\nimport { derived_safe_equal } from '../../reactivity/deriveds.js';\nimport { current_batch } from '../../reactivity/batch.js';\nimport * as e from '../../errors.js';\nimport { tag } from '../../dev/tracing.js';\n\n// When making substantive changes to this file, validate them with the each block stress test:\n// https://svelte.dev/playground/1972b2cf46564476ad8c8c6405b23b7b\n// This test also exists in this repo, as `packages/svelte/tests/manual/each-stress-test`\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 {Effect[]} to_destroy\n * @param {null | Node} controlled_anchor\n */\nfunction pause_effects(state, to_destroy, controlled_anchor) {\n\t/** @type {TransitionManager[]} */\n\tvar transitions = [];\n\tvar length = to_destroy.length;\n\n\t/** @type {EachOutroGroup} */\n\tvar group;\n\tvar remaining = to_destroy.length;\n\n\tfor (var i = 0; i < length; i++) {\n\t\tlet effect = to_destroy[i];\n\n\t\tpause_effect(\n\t\t\teffect,\n\t\t\t() => {\n\t\t\t\tif (group) {\n\t\t\t\t\tgroup.pending.delete(effect);\n\t\t\t\t\tgroup.done.add(effect);\n\n\t\t\t\t\tif (group.pending.size === 0) {\n\t\t\t\t\t\tvar groups = /** @type {Set<EachOutroGroup>} */ (state.outrogroups);\n\n\t\t\t\t\t\tdestroy_effects(state, array_from(group.done));\n\t\t\t\t\t\tgroups.delete(group);\n\n\t\t\t\t\t\tif (groups.size === 0) {\n\t\t\t\t\t\t\tstate.outrogroups = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tremaining -= 1;\n\t\t\t\t}\n\t\t\t},\n\t\t\tfalse\n\t\t);\n\t}\n\n\tif (remaining === 0) {\n\t\t// If we're in a controlled each block (i.e. the block is the only child of an\n\t\t// element), and we are removing all items, _and_ there are no out transitions,\n\t\t// we can use the fast path — emptying the element and replacing the anchor\n\t\tvar fast_path = transitions.length === 0 && controlled_anchor !== null;\n\n\t\tif (fast_path) {\n\t\t\tvar anchor = /** @type {Element} */ (controlled_anchor);\n\t\t\tvar parent_node = /** @type {Element} */ (anchor.parentNode);\n\n\t\t\tclear_text_content(parent_node);\n\t\t\tparent_node.append(anchor);\n\n\t\t\tstate.items.clear();\n\t\t}\n\n\t\tdestroy_effects(state, to_destroy, !fast_path);\n\t} else {\n\t\tgroup = {\n\t\t\tpending: new Set(to_destroy),\n\t\t\tdone: new Set()\n\t\t};\n\n\t\t(state.outrogroups ??= new Set()).add(group);\n\t}\n}\n\n/**\n * @param {EachState} state\n * @param {Effect[]} to_destroy\n * @param {boolean} remove_dom\n */\nfunction destroy_effects(state, to_destroy, remove_dom = true) {\n\t/** @type {Set<Effect> | undefined} */\n\tvar preserved_effects;\n\n\t// The loop-in-a-loop isn't ideal, but we should only hit this in relatively rare cases\n\tif (state.pending.size > 0) {\n\t\tpreserved_effects = new Set();\n\n\t\tfor (const keys of state.pending.values()) {\n\t\t\tfor (const key of keys) {\n\t\t\t\tpreserved_effects.add(/** @type {EachItem} */ (state.items.get(key)).e);\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (var i = 0; i < to_destroy.length; i++) {\n\t\tvar e = to_destroy[i];\n\n\t\tif (preserved_effects?.has(e)) {\n\t\t\te.f |= EFFECT_OFFSCREEN;\n\n\t\t\tconst fragment = document.createDocumentFragment();\n\t\t\tmove_effect(e, fragment);\n\t\t} else {\n\t\t\tdestroy_effect(to_destroy[i], remove_dom);\n\t\t}\n\t}\n}\n\n/** @type {TemplateNode} */\nvar offscreen_anchor;\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 {Map<any, EachItem>} */\n\tvar items = new Map();\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(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\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 /** @type {V[]} */ (\n\t\t\tis_array(collection) ? collection : collection == null ? [] : array_from(collection)\n\t\t);\n\t});\n\n\tif (DEV) {\n\t\ttag(each_array, '{#each ...}');\n\t}\n\n\t/** @type {V[]} */\n\tvar array;\n\n\t/** @type {Map<Batch, Set<any>>} */\n\tvar pending = new Map();\n\n\tvar first_run = true;\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\tfunction commit(batch) {\n\t\tif ((state.effect.f & DESTROYED) !== 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tstate.pending.delete(batch);\n\n\t\tstate.fallback = fallback;\n\t\treconcile(state, array, anchor, flags, get_key);\n\n\t\tif (fallback !== null) {\n\t\t\tif (array.length === 0) {\n\t\t\t\tif ((fallback.f & EFFECT_OFFSCREEN) === 0) {\n\t\t\t\t\tresume_effect(fallback);\n\t\t\t\t} else {\n\t\t\t\t\tfallback.f ^= EFFECT_OFFSCREEN;\n\t\t\t\t\tmove(fallback, null, anchor);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tpause_effect(fallback, () => {\n\t\t\t\t\t// TODO only null out if no pending batch needs it,\n\t\t\t\t\t// otherwise re-add `fallback.fragment` and move the\n\t\t\t\t\t// effect into it\n\t\t\t\t\tfallback = null;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {Batch} batch\n\t */\n\tfunction discard(batch) {\n\t\tstate.pending.delete(batch);\n\t}\n\n\tvar effect = block(() => {\n\t\tarray = /** @type {V[]} */ (get(each_array));\n\t\tvar length = array.length;\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 = skip_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 keys = new Set();\n\t\tvar batch = /** @type {Batch} */ (current_batch);\n\t\tvar defer = should_defer_append();\n\n\t\tfor (var index = 0; index < length; index += 1) {\n\t\t\tif (\n\t\t\t\thydrating &&\n\t\t\t\thydrate_node.nodeType === COMMENT_NODE &&\n\t\t\t\t/** @type {Comment} */ (hydrate_node).data === HYDRATION_END\n\t\t\t) {\n\t\t\t\t// The server rendered fewer items than expected,\n\t\t\t\t// so break out and continue appending non-hydrated items\n\t\t\t\tanchor = /** @type {Comment} */ (hydrate_node);\n\t\t\t\tmismatch = true;\n\t\t\t\tset_hydrating(false);\n\t\t\t}\n\n\t\t\tvar value = array[index];\n\t\t\tvar key = get_key(value, index);\n\n\t\t\tif (DEV) {\n\t\t\t\t// Check that the key function is idempotent (returns the same value when called twice)\n\t\t\t\tvar key_again = get_key(value, index);\n\t\t\t\tif (key !== key_again) {\n\t\t\t\t\te.each_key_volatile(String(index), String(key), String(key_again));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar item = first_run ? null : items.get(key);\n\n\t\t\tif (item) {\n\t\t\t\t// update before reconciliation, to trigger any async updates\n\t\t\t\tif (item.v) internal_set(item.v, value);\n\t\t\t\tif (item.i) internal_set(item.i, index);\n\n\t\t\t\tif (defer) {\n\t\t\t\t\tbatch.unskip_effect(item.e);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\titem = create_item(\n\t\t\t\t\titems,\n\t\t\t\t\tfirst_run ? anchor : (offscreen_anchor ??= create_text()),\n\t\t\t\t\tvalue,\n\t\t\t\t\tkey,\n\t\t\t\t\tindex,\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\n\t\t\t\tif (!first_run) {\n\t\t\t\t\titem.e.f |= EFFECT_OFFSCREEN;\n\t\t\t\t}\n\n\t\t\t\titems.set(key, item);\n\t\t\t}\n\n\t\t\tkeys.add(key);\n\t\t}\n\n\t\tif (length === 0 && fallback_fn && !fallback) {\n\t\t\tif (first_run) {\n\t\t\t\tfallback = branch(() => fallback_fn(anchor));\n\t\t\t} else {\n\t\t\t\tfallback = branch(() => fallback_fn((offscreen_anchor ??= create_text())));\n\t\t\t\tfallback.f |= EFFECT_OFFSCREEN;\n\t\t\t}\n\t\t}\n\n\t\tif (length > keys.size) {\n\t\t\tif (DEV) {\n\t\t\t\tvalidate_each_keys(array, get_key);\n\t\t\t} else {\n\t\t\t\t// in prod, the additional information isn't printed, so don't bother computing it\n\t\t\t\te.each_key_duplicate('', '', '');\n\t\t\t}\n\t\t}\n\n\t\t// remove excess nodes\n\t\tif (hydrating && length > 0) {\n\t\t\tset_hydrate_node(skip_nodes());\n\t\t}\n\n\t\tif (!first_run) {\n\t\t\tpending.set(batch, keys);\n\n\t\t\tif (defer) {\n\t\t\t\tfor (const [key, item] of items) {\n\t\t\t\t\tif (!keys.has(key)) {\n\t\t\t\t\t\tbatch.skip_effect(item.e);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbatch.oncommit(commit);\n\t\t\t\tbatch.ondiscard(discard);\n\t\t\t} else {\n\t\t\t\tcommit(batch);\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\t/** @type {EachState} */\n\tvar state = { effect, flags, items, pending, outrogroups: null, fallback };\n\n\tfirst_run = false;\n\n\tif (hydrating) {\n\t\tanchor = hydrate_node;\n\t}\n}\n\n/**\n * Skip past any non-branch effects (which could be created with `createSubscriber`, for example) to find the next branch effect\n * @param {Effect | null} effect\n * @returns {Effect | null}\n */\nfunction skip_to_branch(effect) {\n\twhile (effect !== null && (effect.f & BRANCH_EFFECT) === 0) {\n\t\teffect = effect.next;\n\t}\n\treturn effect;\n}\n\n/**\n * Add, remove, or reorder items output by an each block as its input changes\n * @template V\n * @param {EachState} state\n * @param {Array<V>} array\n * @param {Element | Comment | Text} anchor\n * @param {number} flags\n * @param {(value: V, index: number) => any} get_key\n * @returns {void}\n */\nfunction reconcile(state, array, anchor, flags, get_key) {\n\tvar is_animated = (flags & EACH_IS_ANIMATED) !== 0;\n\n\tvar length = array.length;\n\tvar items = state.items;\n\tvar current = skip_to_branch(state.effect.first);\n\n\t/** @type {undefined | Set<Effect>} */\n\tvar seen;\n\n\t/** @type {Effect | null} */\n\tvar prev = null;\n\n\t/** @type {undefined | Set<Effect>} */\n\tvar to_animate;\n\n\t/** @type {Effect[]} */\n\tvar matched = [];\n\n\t/** @type {Effect[]} */\n\tvar stashed = [];\n\n\t/** @type {V} */\n\tvar value;\n\n\t/** @type {any} */\n\tvar key;\n\n\t/** @type {Effect | undefined} */\n\tvar effect;\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\teffect = /** @type {EachItem} */ (items.get(key)).e;\n\n\t\t\t// offscreen == coming in now, no animation in that case,\n\t\t\t// else this would happen https://github.com/sveltejs/svelte/issues/17181\n\t\t\tif ((effect.f & EFFECT_OFFSCREEN) === 0) {\n\t\t\t\teffect.nodes?.a?.measure();\n\t\t\t\t(to_animate ??= new Set()).add(effect);\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\teffect = /** @type {EachItem} */ (items.get(key)).e;\n\n\t\tif (state.outrogroups !== null) {\n\t\t\tfor (const group of state.outrogroups) {\n\t\t\t\tgroup.pending.delete(effect);\n\t\t\t\tgroup.done.delete(effect);\n\t\t\t}\n\t\t}\n\n\t\tif ((effect.f & INERT) !== 0) {\n\t\t\tresume_effect(effect);\n\t\t\tif (is_animated) {\n\t\t\t\teffect.nodes?.a?.unfix();\n\t\t\t\t(to_animate ??= new Set()).delete(effect);\n\t\t\t}\n\t\t}\n\n\t\tif ((effect.f & EFFECT_OFFSCREEN) !== 0) {\n\t\t\teffect.f ^= EFFECT_OFFSCREEN;\n\n\t\t\tif (effect === current) {\n\t\t\t\tmove(effect, null, anchor);\n\t\t\t} else {\n\t\t\t\tvar next = prev ? prev.next : current;\n\n\t\t\t\tif (effect === state.effect.last) {\n\t\t\t\t\tstate.effect.last = effect.prev;\n\t\t\t\t}\n\n\t\t\t\tif (effect.prev) effect.prev.next = effect.next;\n\t\t\t\tif (effect.next) effect.next.prev = effect.prev;\n\t\t\t\tlink(state, prev, effect);\n\t\t\t\tlink(state, effect, next);\n\n\t\t\t\tmove(effect, next, anchor);\n\t\t\t\tprev = effect;\n\n\t\t\t\tmatched = [];\n\t\t\t\tstashed = [];\n\n\t\t\t\tcurrent = skip_to_branch(prev.next);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tif (effect !== current) {\n\t\t\tif (seen !== undefined && seen.has(effect)) {\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(effect);\n\t\t\t\t\tmove(effect, current, anchor);\n\n\t\t\t\t\tlink(state, effect.prev, effect.next);\n\t\t\t\t\tlink(state, effect, prev === null ? state.effect.first : prev.next);\n\t\t\t\t\tlink(state, prev, effect);\n\n\t\t\t\t\tprev = effect;\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 !== effect) {\n\t\t\t\t(seen ??= new Set()).add(current);\n\t\t\t\tstashed.push(current);\n\t\t\t\tcurrent = skip_to_branch(current.next);\n\t\t\t}\n\n\t\t\tif (current === null) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tif ((effect.f & EFFECT_OFFSCREEN) === 0) {\n\t\t\tmatched.push(effect);\n\t\t}\n\n\t\tprev = effect;\n\t\tcurrent = skip_to_branch(effect.next);\n\t}\n\n\tif (state.outrogroups !== null) {\n\t\tfor (const group of state.outrogroups) {\n\t\t\tif (group.pending.size === 0) {\n\t\t\t\tdestroy_effects(state, array_from(group.done));\n\t\t\t\tstate.outrogroups?.delete(group);\n\t\t\t}\n\t\t}\n\n\t\tif (state.outrogroups.size === 0) {\n\t\t\tstate.outrogroups = null;\n\t\t}\n\t}\n\n\tif (current !== null || seen !== undefined) {\n\t\t/** @type {Effect[]} */\n\t\tvar to_destroy = [];\n\n\t\tif (seen !== undefined) {\n\t\t\tfor (effect of seen) {\n\t\t\t\tif ((effect.f & INERT) === 0) {\n\t\t\t\t\tto_destroy.push(effect);\n\t\t\t\t}\n\t\t\t}\n\t\t}\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.f & INERT) === 0 && current !== state.fallback) {\n\t\t\t\tto_destroy.push(current);\n\t\t\t}\n\n\t\t\tcurrent = skip_to_branch(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].nodes?.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].nodes?.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 (effect of to_animate) {\n\t\t\t\teffect.nodes?.a?.apply();\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * @template V\n * @param {Map<any, EachItem>} items\n * @param {Node} anchor\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 * @returns {EachItem}\n */\nfunction create_item(items, anchor, value, key, index, render_fn, flags, get_collection) {\n\tvar v =\n\t\t(flags & EACH_ITEM_REACTIVE) !== 0\n\t\t\t? (flags & EACH_ITEM_IMMUTABLE) === 0\n\t\t\t\t? mutable_source(value, false, false)\n\t\t\t\t: source(value)\n\t\t\t: null;\n\n\tvar i = (flags & EACH_INDEX_REACTIVE) !== 0 ? source(index) : null;\n\n\tif (DEV && v) {\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\tv.trace = () => {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unused-expressions\n\t\t\tget_collection()[i?.v ?? index];\n\t\t};\n\t}\n\n\treturn {\n\t\tv,\n\t\ti,\n\t\te: branch(() => {\n\t\t\trender_fn(anchor, v ?? value, i ?? index, get_collection);\n\n\t\t\treturn () => {\n\t\t\t\titems.delete(key);\n\t\t\t};\n\t\t})\n\t};\n}\n\n/**\n * @param {Effect} effect\n * @param {Effect | null} next\n * @param {Text | Element | Comment} anchor\n */\nfunction move(effect, next, anchor) {\n\tif (!effect.nodes) return;\n\n\tvar node = effect.nodes.start;\n\tvar end = effect.nodes.end;\n\n\tvar dest =\n\t\tnext && (next.f & EFFECT_OFFSCREEN) === 0\n\t\t\t? /** @type {EffectNodes} */ (next.nodes).start\n\t\t\t: anchor;\n\n\twhile (node !== null) {\n\t\tvar next_node = /** @type {TemplateNode} */ (get_next_sibling(node));\n\t\tdest.before(node);\n\n\t\tif (node === end) {\n\t\t\treturn;\n\t\t}\n\n\t\tnode = next_node;\n\t}\n}\n\n/**\n * @param {EachState} state\n * @param {Effect | null} prev\n * @param {Effect | null} next\n */\nfunction link(state, prev, next) {\n\tif (prev === null) {\n\t\tstate.effect.first = next;\n\t} else {\n\t\tprev.next = next;\n\t}\n\n\tif (next === null) {\n\t\tstate.effect.last = prev;\n\t} else {\n\t\tnext.prev = prev;\n\t}\n}\n\n/**\n * @param {Array<any>} array\n * @param {(item: any, index: number) => string} key_fn\n * @returns {void}\n */\nfunction validate_each_keys(array, key_fn) {\n\tconst keys = new Map();\n\tconst length = array.length;\n\n\tfor (let i = 0; i < length; i++) {\n\t\tconst key = key_fn(array[i], i);\n\n\t\tif (keys.has(key)) {\n\t\t\tconst a = String(keys.get(key));\n\t\t\tconst b = String(i);\n\n\t\t\t/** @type {string | null} */\n\t\t\tlet k = String(key);\n\t\t\tif (k.startsWith('[object ')) k = null;\n\n\t\t\te.each_key_duplicate(a, b, k);\n\t\t}\n\n\t\tkeys.set(key, i);\n\t}\n}\n","/** @import { Effect, TemplateNode } from '#client' */\n/** @import {} from 'trusted-types' */\nimport {\n\tFILENAME,\n\tHYDRATION_ERROR,\n\tNAMESPACE_SVG,\n\tNAMESPACE_MATHML\n} 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';\n\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 { create_element, 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 | TrustedHTML} 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 | TrustedHTML} get_value\n * @param {boolean} [is_controlled]\n * @param {boolean} [svg]\n * @param {boolean} [mathml]\n * @param {boolean} [skip_warning]\n * @returns {void}\n */\nexport function html(\n\tnode,\n\tget_value,\n\tis_controlled = false,\n\tsvg = false,\n\tmathml = false,\n\tskip_warning = false\n) {\n\tvar anchor = node;\n\n\t/** @type {string | TrustedHTML} */\n\tvar value = '';\n\n\tif (is_controlled) {\n\t\tvar parent_node = /** @type {Element} */ (node);\n\n\t\tif (hydrating) {\n\t\t\tanchor = set_hydrate_node(get_first_child(parent_node));\n\t\t}\n\t}\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 (is_controlled && !hydrating) {\n\t\t\t// When @html is the only child, use innerHTML directly.\n\t\t\t// This also handles contenteditable, where the user may delete the anchor comment.\n\t\t\teffect.nodes = null;\n\t\t\tparent_node.innerHTML = /** @type {string} */ (value);\n\n\t\t\tif (value !== '') {\n\t\t\t\tassign_nodes(\n\t\t\t\t\t/** @type {TemplateNode} */ (get_first_child(parent_node)),\n\t\t\t\t\t/** @type {TemplateNode} */ (parent_node.lastChild)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (effect.nodes !== null) {\n\t\t\tremove_effect_dom(effect.nodes.start, /** @type {TemplateNode} */ (effect.nodes.end));\n\t\t\teffect.nodes = 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\n\t\t\t/** @type {TemplateNode | null} */\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 = 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\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// Use a <template>, <svg>, or <math> wrapper depending on context. If value is a TrustedHTML object,\n\t\t// it will be assigned directly to innerHTML without coercion — this allows {@html policy.createHTML(...)} to work.\n\t\tvar ns = svg ? NAMESPACE_SVG : mathml ? NAMESPACE_MATHML : undefined;\n\t\tvar wrapper = /** @type {HTMLTemplateElement | SVGElement | MathMLElement} */ (\n\t\t\tcreate_element(svg ? 'svg' : mathml ? 'math' : 'template', ns)\n\t\t);\n\t\twrapper.innerHTML = /** @type {any} */ (value);\n\n\t\t/** @type {DocumentFragment | Element} */\n\t\tvar node = svg || mathml ? wrapper : /** @type {HTMLTemplateElement} */ (wrapper).content;\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 {TemplateNode} */ (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 { hydrate_next, hydrating } from '../hydration.js';\n\n/**\n * @param {Comment} anchor\n * @param {Record<string, any>} $$props\n * @param {string} name\n * @param {Record<string, unknown>} slot_props\n * @param {null | ((anchor: Comment) => void)} fallback_fn\n */\nexport function slot(anchor, $$props, name, slot_props, fallback_fn) {\n\tif (hydrating) {\n\t\thydrate_next();\n\t}\n\n\tvar slot_fn = $$props.$$slots?.[name];\n\t// Interop: Can use snippets to fill slots\n\tvar is_interop = false;\n\tif (slot_fn === true) {\n\t\tslot_fn = $$props[name === 'default' ? 'children' : name];\n\t\tis_interop = true;\n\t}\n\n\tif (slot_fn === undefined) {\n\t\tif (fallback_fn !== null) {\n\t\t\tfallback_fn(anchor);\n\t\t}\n\t} else {\n\t\tslot_fn(anchor, is_interop ? () => slot_props : slot_props);\n\t}\n}\n\n/**\n * @param {Record<string, any>} props\n * @returns {Record<string, boolean>}\n */\nexport function sanitize_slots(props) {\n\t/** @type {Record<string, boolean>} */\n\tconst sanitized = {};\n\tif (props.children) sanitized.default = true;\n\tfor (const key in props.$$slots) {\n\t\tsanitized[key] = true;\n\t}\n\treturn sanitized;\n}\n","import { is_void } from '../../utils.js';\nimport * as w from './warnings.js';\nimport * as e from './errors.js';\n\nexport { invalid_default_snippet } from './errors.js';\n\n/**\n * @param {() => string} tag_fn\n * @returns {void}\n */\nexport function validate_void_dynamic_element(tag_fn) {\n\tconst tag = tag_fn();\n\tif (tag && is_void(tag)) {\n\t\tw.dynamic_void_element_content(tag);\n\t}\n}\n\n/** @param {() => unknown} tag_fn */\nexport function validate_dynamic_element_tag(tag_fn) {\n\tconst tag = tag_fn();\n\tconst is_string = typeof tag === 'string';\n\tif (tag && !is_string) {\n\t\te.svelte_element_invalid_this_value();\n\t}\n}\n\n/**\n * @param {any} store\n * @param {string} name\n */\nexport function validate_store(store, name) {\n\tif (store != null && typeof store.subscribe !== 'function') {\n\t\te.store_invalid_shape(name);\n\t}\n}\n\n/**\n * @template {(...args: any[]) => unknown} T\n * @param {T} fn\n */\nexport function prevent_snippet_stringification(fn) {\n\tfn.toString = () => {\n\t\te.snippet_without_render_tag();\n\t\treturn '';\n\t};\n\treturn fn;\n}\n","/** @import { Snippet } from 'svelte' */\n/** @import { TemplateNode } from '#client' */\n/** @import { Getters } from '#shared' */\nimport { EFFECT_TRANSPARENT, ELEMENT_NODE } from '#client/constants';\nimport { block, 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 { prevent_snippet_stringification } from '../../../shared/validate.js';\nimport { BranchManager } from './branches.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 branches = new BranchManager(node);\n\n\tblock(() => {\n\t\tconst snippet = get_snippet() ?? null;\n\n\t\tif (DEV && snippet == null) {\n\t\t\te.invalid_snippet();\n\t\t}\n\n\t\tbranches.ensure(snippet, snippet && ((anchor) => snippet(anchor, ...args)));\n\t}, EFFECT_TRANSPARENT);\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 } from '#client' */\nimport { EFFECT_TRANSPARENT } from '#client/constants';\nimport { block } from '../../reactivity/effects.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tread_hydration_instruction,\n\tset_hydrate_node,\n\tset_hydrating,\n\tskip_nodes\n} from '../hydration.js';\nimport { BranchManager } from './branches.js';\nimport { HYDRATION_START, HYDRATION_START_ELSE } from '../../../../constants.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\t/** @type {TemplateNode | undefined} */\n\tvar hydration_start_node;\n\n\tif (hydrating) {\n\t\thydration_start_node = hydrate_node;\n\t\thydrate_next();\n\t}\n\n\tvar branches = new BranchManager(node);\n\n\tblock(() => {\n\t\tvar component = get_component() ?? null;\n\n\t\tif (hydrating) {\n\t\t\tvar data = read_hydration_instruction(/** @type {TemplateNode} */ (hydration_start_node));\n\n\t\t\tvar server_had_component = data === HYDRATION_START;\n\t\t\tvar client_has_component = component !== null;\n\n\t\t\tif (server_had_component !== client_has_component) {\n\t\t\t\t// Hydration mismatch: skip the server-rendered nodes and render fresh\n\t\t\t\tvar anchor = skip_nodes();\n\n\t\t\t\tset_hydrate_node(anchor);\n\t\t\t\tbranches.anchor = anchor;\n\n\t\t\t\tset_hydrating(false);\n\t\t\t\tbranches.ensure(component, component && ((target) => render_fn(target, component)));\n\t\t\t\tset_hydrating(true);\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tbranches.ensure(component, component && ((target) => render_fn(target, component)));\n\t}, EFFECT_TRANSPARENT);\n}\n","/** @import { Raf } from '#client' */\nimport { noop } from '../shared/utils.js';\n\nimport { BROWSER } from 'esm-env';\n\nconst now = BROWSER ? () => performance.now() : () => Date.now();\n\n/** @type {Raf} */\nexport const raf = {\n\t// don't access requestAnimationFrame eagerly outside method\n\t// this allows basic testing of user code without JSDOM\n\t// bunder will eval and remove ternary when the user's app is built\n\ttick: /** @param {any} _ */ (_) => (BROWSER ? requestAnimationFrame : noop)(_),\n\tnow: () => now(),\n\ttasks: new Set()\n};\n","/** @import { TaskCallback, Task, TaskEntry } from '#client' */\nimport { raf } from './timing.js';\n\n// TODO move this into timing.js where it probably belongs\n\n/**\n * @returns {void}\n */\nfunction run_tasks() {\n\t// use `raf.now()` instead of the `requestAnimationFrame` callback argument, because\n\t// otherwise things can get wonky https://github.com/sveltejs/svelte/pull/14541\n\tconst now = raf.now();\n\n\traf.tasks.forEach((task) => {\n\t\tif (!task.c(now)) {\n\t\t\traf.tasks.delete(task);\n\t\t\ttask.f();\n\t\t}\n\t});\n\n\tif (raf.tasks.size !== 0) {\n\t\traf.tick(run_tasks);\n\t}\n}\n\n/**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n * @param {TaskCallback} callback\n * @returns {Task}\n */\nexport function loop(callback) {\n\t/** @type {TaskEntry} */\n\tlet task;\n\n\tif (raf.tasks.size === 0) {\n\t\traf.tick(run_tasks);\n\t}\n\n\treturn {\n\t\tpromise: new Promise((fulfill) => {\n\t\t\traf.tasks.add((task = { c: callback, f: fulfill }));\n\t\t}),\n\t\tabort() {\n\t\t\traf.tasks.delete(task);\n\t\t}\n\t};\n}\n","/** @import { AnimateFn, Animation, AnimationConfig, EachItem, Effect, EffectNodes, TransitionFn, TransitionManager } from '#client' */\nimport { noop, is_function } from '../../../shared/utils.js';\nimport { effect } from '../../reactivity/effects.js';\nimport { active_effect, untrack } from '../../runtime.js';\nimport { loop } from '../../loop.js';\nimport { should_intro } from '../../render.js';\nimport { TRANSITION_GLOBAL, TRANSITION_IN, TRANSITION_OUT } from '../../../../constants.js';\nimport { BLOCK_EFFECT, REACTION_RAN, EFFECT_TRANSPARENT } from '#client/constants';\nimport { queue_micro_task } from '../task.js';\nimport { without_reactive_context } from './bindings/shared.js';\n\n/**\n * @param {Element} element\n * @param {'introstart' | 'introend' | 'outrostart' | 'outroend'} type\n * @returns {void}\n */\nfunction dispatch_event(element, type) {\n\twithout_reactive_context(() => {\n\t\telement.dispatchEvent(new CustomEvent(type));\n\t});\n}\n\n/**\n * Converts a property to the camel-case format expected by Element.animate(), KeyframeEffect(), and KeyframeEffect.setKeyframes().\n * @param {string} style\n * @returns {string}\n */\nfunction css_property_to_camelcase(style) {\n\t// in compliance with spec\n\tif (style === 'float') return 'cssFloat';\n\tif (style === 'offset') return 'cssOffset';\n\n\t// do not rename custom @properties\n\tif (style.startsWith('--')) return style;\n\n\tconst parts = style.split('-');\n\tif (parts.length === 1) return parts[0];\n\treturn (\n\t\tparts[0] +\n\t\tparts\n\t\t\t.slice(1)\n\t\t\t.map(/** @param {any} word */ (word) => word[0].toUpperCase() + word.slice(1))\n\t\t\t.join('')\n\t);\n}\n\n/**\n * @param {string} css\n * @returns {Keyframe}\n */\nfunction css_to_keyframe(css) {\n\t/** @type {Keyframe} */\n\tconst keyframe = {};\n\tconst parts = css.split(';');\n\tfor (const part of parts) {\n\t\tconst [property, value] = part.split(':');\n\t\tif (!property || value === undefined) break;\n\n\t\tconst formatted_property = css_property_to_camelcase(property.trim());\n\t\tkeyframe[formatted_property] = value.trim();\n\t}\n\treturn keyframe;\n}\n\n/** @param {number} t */\nconst linear = (t) => t;\n\n/** @type {Effect | null} */\nlet animation_effect_override = null;\n\n/** @param {Effect | null} v */\nexport function set_animation_effect_override(v) {\n\tanimation_effect_override = v;\n}\n\n/**\n * Called inside keyed `{#each ...}` blocks (as `$.animation(...)`). This creates an animation manager\n * and attaches it to the block, so that moves can be animated following reconciliation.\n * @template P\n * @param {Element} element\n * @param {() => AnimateFn<P | undefined>} get_fn\n * @param {(() => P) | null} get_params\n */\nexport function animation(element, get_fn, get_params) {\n\tvar effect = animation_effect_override ?? /** @type {Effect} */ (active_effect);\n\tvar nodes = /** @type {EffectNodes} */ (effect.nodes);\n\n\t/** @type {DOMRect} */\n\tvar from;\n\n\t/** @type {DOMRect} */\n\tvar to;\n\n\t/** @type {Animation | undefined} */\n\tvar animation;\n\n\t/** @type {null | { position: string, width: string, height: string, transform: string }} */\n\tvar original_styles = null;\n\n\tnodes.a ??= {\n\t\telement,\n\t\tmeasure() {\n\t\t\tfrom = this.element.getBoundingClientRect();\n\t\t},\n\t\tapply() {\n\t\t\tanimation?.abort();\n\n\t\t\tto = this.element.getBoundingClientRect();\n\n\t\t\tif (\n\t\t\t\tfrom.left !== to.left ||\n\t\t\t\tfrom.right !== to.right ||\n\t\t\t\tfrom.top !== to.top ||\n\t\t\t\tfrom.bottom !== to.bottom\n\t\t\t) {\n\t\t\t\tconst options = get_fn()(this.element, { from, to }, get_params?.());\n\n\t\t\t\tanimation = animate(\n\t\t\t\t\tthis.element,\n\t\t\t\t\toptions,\n\t\t\t\t\tundefined,\n\t\t\t\t\t1,\n\t\t\t\t\t() => {},\n\t\t\t\t\t() => {\n\t\t\t\t\t\tanimation?.abort();\n\t\t\t\t\t\tanimation = undefined;\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\tfix() {\n\t\t\t// If an animation is already running, transforming the element is likely to fail,\n\t\t\t// because the styles applied by the animation take precedence. In the case of crossfade,\n\t\t\t// that means the `translate(...)` of the crossfade transition overrules the `translate(...)`\n\t\t\t// we would apply below, leading to the element jumping somewhere to the top left.\n\t\t\tif (element.getAnimations().length) return;\n\n\t\t\t// It's important to destructure these to get fixed values - the object itself has getters,\n\t\t\t// and changing the style to 'absolute' can for example influence the width.\n\t\t\tvar { position, width, height } = getComputedStyle(element);\n\n\t\t\tif (position !== 'absolute' && position !== 'fixed') {\n\t\t\t\tvar style = /** @type {HTMLElement | SVGElement} */ (element).style;\n\n\t\t\t\toriginal_styles = {\n\t\t\t\t\tposition: style.position,\n\t\t\t\t\twidth: style.width,\n\t\t\t\t\theight: style.height,\n\t\t\t\t\ttransform: style.transform\n\t\t\t\t};\n\n\t\t\t\tstyle.position = 'absolute';\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.height = height;\n\t\t\t\tvar to = element.getBoundingClientRect();\n\n\t\t\t\tif (from.left !== to.left || from.top !== to.top) {\n\t\t\t\t\tvar transform = `translate(${from.left - to.left}px, ${from.top - to.top}px)`;\n\t\t\t\t\tstyle.transform = style.transform ? `${style.transform} ${transform}` : transform;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tunfix() {\n\t\t\tif (original_styles) {\n\t\t\t\tvar style = /** @type {HTMLElement | SVGElement} */ (element).style;\n\n\t\t\t\tstyle.position = original_styles.position;\n\t\t\t\tstyle.width = original_styles.width;\n\t\t\t\tstyle.height = original_styles.height;\n\t\t\t\tstyle.transform = original_styles.transform;\n\t\t\t}\n\t\t}\n\t};\n\n\t// in the case of a `<svelte:element>`, it's possible for `$.animation(...)` to be called\n\t// when an animation manager already exists, if the tag changes. in that case, we need to\n\t// swap out the element rather than creating a new manager, in case it happened at the same\n\t// moment as a reconciliation\n\tnodes.a.element = element;\n}\n\n/**\n * Called inside block effects as `$.transition(...)`. This creates a transition manager and\n * attaches it to the current effect — later, inside `pause_effect` and `resume_effect`, we\n * use this to create `intro` and `outro` transitions.\n * @template P\n * @param {number} flags\n * @param {HTMLElement} element\n * @param {() => TransitionFn<P | undefined>} get_fn\n * @param {(() => P) | null} get_params\n * @returns {void}\n */\nexport function transition(flags, element, get_fn, get_params) {\n\tvar is_intro = (flags & TRANSITION_IN) !== 0;\n\tvar is_outro = (flags & TRANSITION_OUT) !== 0;\n\tvar is_both = is_intro && is_outro;\n\tvar is_global = (flags & TRANSITION_GLOBAL) !== 0;\n\n\t/** @type {'in' | 'out' | 'both'} */\n\tvar direction = is_both ? 'both' : is_intro ? 'in' : 'out';\n\n\t/** @type {AnimationConfig | ((opts: { direction: 'in' | 'out' }) => AnimationConfig) | undefined} */\n\tvar current_options;\n\n\tvar inert = element.inert;\n\n\t/**\n\t * The default overflow style, stashed so we can revert changes during the transition\n\t * that are necessary to work around a Safari <18 bug\n\t * TODO 6.0 remove this, if older versions of Safari have died out enough\n\t */\n\tvar overflow = element.style.overflow;\n\n\t/** @type {Animation | undefined} */\n\tvar intro;\n\n\t/** @type {Animation | undefined} */\n\tvar outro;\n\n\tfunction get_options() {\n\t\treturn without_reactive_context(() => {\n\t\t\t// If a transition is still ongoing, we use the existing options rather than generating\n\t\t\t// new ones. This ensures that reversible transitions reverse smoothly, rather than\n\t\t\t// jumping to a new spot because (for example) a different `duration` was used\n\t\t\treturn (current_options ??= get_fn()(element, get_params?.() ?? /** @type {P} */ ({}), {\n\t\t\t\tdirection\n\t\t\t}));\n\t\t});\n\t}\n\n\t/** @type {TransitionManager} */\n\tvar transition = {\n\t\tis_global,\n\t\tin() {\n\t\t\telement.inert = inert;\n\n\t\t\tif (!is_intro) {\n\t\t\t\toutro?.abort();\n\t\t\t\toutro?.reset?.();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!is_outro) {\n\t\t\t\t// if we intro then outro then intro again, we want to abort the first intro,\n\t\t\t\t// if it's not a bidirectional transition\n\t\t\t\tintro?.abort();\n\t\t\t}\n\n\t\t\tintro = animate(\n\t\t\t\telement,\n\t\t\t\tget_options(),\n\t\t\t\toutro,\n\t\t\t\t1,\n\t\t\t\t() => {\n\t\t\t\t\tdispatch_event(element, 'introstart');\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdispatch_event(element, 'introend');\n\n\t\t\t\t\t// Ensure we cancel the animation to prevent leaking\n\t\t\t\t\tintro?.abort();\n\t\t\t\t\tintro = current_options = undefined;\n\n\t\t\t\t\telement.style.overflow = overflow;\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\tout(fn) {\n\t\t\tif (!is_outro) {\n\t\t\t\tfn?.();\n\t\t\t\tcurrent_options = undefined;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\telement.inert = true;\n\n\t\t\toutro = animate(\n\t\t\t\telement,\n\t\t\t\tget_options(),\n\t\t\t\tintro,\n\t\t\t\t0,\n\t\t\t\t() => {\n\t\t\t\t\tdispatch_event(element, 'outrostart');\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdispatch_event(element, 'outroend');\n\t\t\t\t\tfn?.();\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\tstop: () => {\n\t\t\tintro?.abort();\n\t\t\toutro?.abort();\n\t\t}\n\t};\n\n\tvar e = /** @type {Effect & { nodes: EffectNodes }} */ (active_effect);\n\n\t(e.nodes.t ??= []).push(transition);\n\n\t// if this is a local transition, we only want to run it if the parent (branch) effect's\n\t// parent (block) effect is where the state change happened. we can determine that by\n\t// looking at whether the block effect is currently initializing\n\tif (is_intro && should_intro) {\n\t\tvar run = is_global;\n\n\t\tif (!run) {\n\t\t\tvar block = /** @type {Effect | null} */ (e.parent);\n\n\t\t\t// skip over transparent blocks (e.g. snippets, else-if blocks)\n\t\t\twhile (block && (block.f & EFFECT_TRANSPARENT) !== 0) {\n\t\t\t\twhile ((block = block.parent)) {\n\t\t\t\t\tif ((block.f & BLOCK_EFFECT) !== 0) break;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\trun = !block || (block.f & REACTION_RAN) !== 0;\n\t\t}\n\n\t\tif (run) {\n\t\t\teffect(() => {\n\t\t\t\tuntrack(() => transition.in());\n\t\t\t});\n\t\t}\n\t}\n}\n\n/**\n * Animates an element, according to the provided configuration\n * @param {Element} element\n * @param {AnimationConfig | ((opts: { direction: 'in' | 'out' }) => AnimationConfig)} options\n * @param {Animation | undefined} counterpart The corresponding intro/outro to this outro/intro\n * @param {number} t2 The target `t` value — `1` for intro, `0` for outro\n * @param {(() => void)} on_begin Called just before beginning the animation\n * @param {(() => void)} on_finish Called after successfully completing the animation\n * @returns {Animation}\n */\nfunction animate(element, options, counterpart, t2, on_begin, on_finish) {\n\tvar is_intro = t2 === 1;\n\n\tif (is_function(options)) {\n\t\t// In the case of a deferred transition (such as `crossfade`), `option` will be\n\t\t// a function rather than an `AnimationConfig`. We need to call this function\n\t\t// once the DOM has been updated...\n\t\t/** @type {Animation} */\n\t\tvar a;\n\t\tvar aborted = false;\n\n\t\tqueue_micro_task(() => {\n\t\t\tif (aborted) return;\n\t\t\tvar o = options({ direction: is_intro ? 'in' : 'out' });\n\t\t\ta = animate(element, o, counterpart, t2, on_begin, on_finish);\n\t\t});\n\n\t\t// ...but we want to do so without using `async`/`await` everywhere, so\n\t\t// we return a facade that allows everything to remain synchronous\n\t\treturn {\n\t\t\tabort: () => {\n\t\t\t\taborted = true;\n\t\t\t\ta?.abort();\n\t\t\t},\n\t\t\tdeactivate: () => a.deactivate(),\n\t\t\treset: () => a.reset(),\n\t\t\tt: () => a.t()\n\t\t};\n\t}\n\n\tcounterpart?.deactivate();\n\n\tif (!options?.duration && !options?.delay) {\n\t\ton_begin();\n\t\ton_finish();\n\n\t\treturn {\n\t\t\tabort: noop,\n\t\t\tdeactivate: noop,\n\t\t\treset: noop,\n\t\t\tt: () => t2\n\t\t};\n\t}\n\n\tconst { delay = 0, css, tick, easing = linear } = options;\n\n\tvar keyframes = [];\n\n\tif (is_intro && counterpart === undefined) {\n\t\tif (tick) {\n\t\t\ttick(0, 1); // TODO put in nested effect, to avoid interleaved reads/writes?\n\t\t}\n\n\t\tif (css) {\n\t\t\tvar styles = css_to_keyframe(css(0, 1));\n\t\t\tkeyframes.push(styles, styles);\n\t\t}\n\t}\n\n\tvar get_t = () => 1 - t2;\n\n\t// create a dummy animation that lasts as long as the delay (but with whatever devtools\n\t// multiplier is in effect). in the common case that it is `0`, we keep it anyway so that\n\t// the CSS keyframes aren't created until the DOM is updated\n\t//\n\t// fill forwards to prevent the element from rendering without styles applied\n\t// see https://github.com/sveltejs/svelte/issues/14732\n\tvar animation = element.animate(keyframes, { duration: delay, fill: 'forwards' });\n\n\tanimation.onfinish = () => {\n\t\t// remove dummy animation from the stack to prevent conflict with main animation\n\t\tanimation.cancel();\n\n\t\ton_begin();\n\n\t\t// for bidirectional transitions, we start from the current position,\n\t\t// rather than doing a full intro/outro\n\t\tvar t1 = counterpart?.t() ?? 1 - t2;\n\t\tcounterpart?.abort();\n\n\t\tvar delta = t2 - t1;\n\t\tvar duration = /** @type {number} */ (options.duration) * Math.abs(delta);\n\t\tvar keyframes = [];\n\n\t\tif (duration > 0) {\n\t\t\t/**\n\t\t\t * Whether or not the CSS includes `overflow: hidden`, in which case we need to\n\t\t\t * add it as an inline style to work around a Safari <18 bug\n\t\t\t * TODO 6.0 remove this, if possible\n\t\t\t */\n\t\t\tvar needs_overflow_hidden = false;\n\n\t\t\tif (css) {\n\t\t\t\tvar n = Math.ceil(duration / (1000 / 60)); // `n` must be an integer, or we risk missing the `t2` value\n\n\t\t\t\tfor (var i = 0; i <= n; i += 1) {\n\t\t\t\t\tvar t = t1 + delta * easing(i / n);\n\t\t\t\t\tvar styles = css_to_keyframe(css(t, 1 - t));\n\t\t\t\t\tkeyframes.push(styles);\n\n\t\t\t\t\tneeds_overflow_hidden ||= styles.overflow === 'hidden';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (needs_overflow_hidden) {\n\t\t\t\t/** @type {HTMLElement} */ (element).style.overflow = 'hidden';\n\t\t\t}\n\n\t\t\tget_t = () => {\n\t\t\t\tvar time = /** @type {number} */ (\n\t\t\t\t\t/** @type {globalThis.Animation} */ (animation).currentTime\n\t\t\t\t);\n\n\t\t\t\treturn t1 + delta * easing(time / duration);\n\t\t\t};\n\n\t\t\tif (tick) {\n\t\t\t\tloop(() => {\n\t\t\t\t\tif (animation.playState !== 'running') return false;\n\n\t\t\t\t\tvar t = get_t();\n\t\t\t\t\ttick(t, 1 - t);\n\n\t\t\t\t\treturn true;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tanimation = element.animate(keyframes, { duration, fill: 'forwards' });\n\n\t\tanimation.onfinish = () => {\n\t\t\tget_t = () => t2;\n\t\t\ttick?.(t2, 1 - t2);\n\t\t\ton_finish();\n\t\t};\n\t};\n\n\treturn {\n\t\tabort: () => {\n\t\t\tif (animation) {\n\t\t\t\tanimation.cancel();\n\t\t\t\t// This prevents memory leaks in Chromium\n\t\t\t\tanimation.effect = null;\n\t\t\t\t// This prevents onfinish to be launched after cancel(),\n\t\t\t\t// which can happen in some rare cases\n\t\t\t\t// see https://github.com/sveltejs/svelte/issues/13681\n\t\t\t\tanimation.onfinish = noop;\n\t\t\t}\n\t\t},\n\t\tdeactivate: () => {\n\t\t\ton_finish = noop;\n\t\t},\n\t\treset: () => {\n\t\t\tif (t2 === 0) {\n\t\t\t\ttick?.(1, 0);\n\t\t\t}\n\t\t},\n\t\tt: () => get_t()\n\t};\n}\n","/** @import { Effect, EffectNodes, 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_element, create_text, get_first_child } from '../operations.js';\nimport { block, teardown } from '../../reactivity/effects.js';\nimport { set_should_intro } from '../../render.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';\nimport { BranchManager } from './branches.js';\nimport { set_animation_effect_override } from '../elements/transitions.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 {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/**\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 parent_effect = /** @type {Effect} */ (active_effect);\n\n\tvar branches = new BranchManager(anchor, false);\n\n\tblock(() => {\n\t\tconst next_tag = get_tag() || null;\n\t\tvar ns = get_namespace\n\t\t\t? get_namespace()\n\t\t\t: is_svg || next_tag === 'svg'\n\t\t\t\t? NAMESPACE_SVG\n\t\t\t\t: undefined;\n\n\t\tif (next_tag === null) {\n\t\t\tbranches.ensure(null, null);\n\t\t\tset_should_intro(true);\n\t\t\treturn;\n\t\t}\n\n\t\tbranches.ensure(next_tag, (anchor) => {\n\t\t\tif (next_tag) {\n\t\t\t\telement = hydrating ? /** @type {Element} */ (element) : create_element(next_tag, ns);\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\tvar tmp_comment = null;\n\n\t\t\t\t\tif (hydrating && is_raw_text_element(next_tag)) {\n\t\t\t\t\t\t// prevent hydration glitches (code just below expects an anchor)\n\t\t\t\t\t\telement.append((tmp_comment = 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 = hydrating\n\t\t\t\t\t\t? get_first_child(element)\n\t\t\t\t\t\t: element.appendChild(create_text());\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\tset_animation_effect_override(parent_effect);\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\ttmp_comment?.remove();\n\t\t\t\t\tset_animation_effect_override(null);\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 & { nodes: EffectNodes }} */ (active_effect).nodes.end = element;\n\n\t\t\t\tanchor.before(element);\n\t\t\t}\n\n\t\t\tif (hydrating) {\n\t\t\t\tset_hydrate_node(anchor);\n\t\t\t}\n\t\t});\n\n\t\t// revert to the default state after the effect has been created\n\t\tset_should_intro(true);\n\n\t\treturn () => {\n\t\t\tif (next_tag) {\n\t\t\t\t// if we're in this callback because we're re-running the effect,\n\t\t\t\t// disable intros (unless no element is currently displayed)\n\t\t\t\tset_should_intro(false);\n\t\t\t}\n\t\t};\n\t}, EFFECT_TRANSPARENT);\n\n\tteardown(() => {\n\t\tset_should_intro(true);\n\t});\n\n\tif (was_hydrating) {\n\t\tset_hydrating(true);\n\t\tset_hydrate_node(anchor);\n\t}\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, branch } from '../../reactivity/effects.js';\nimport { COMMENT_NODE, HEAD_EFFECT } from '#client/constants';\n\n/**\n * @param {string} hash\n * @param {(anchor: Node) => void} render_fn\n * @returns {void}\n */\nexport function head(hash, 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\tvar head_anchor = get_first_child(document.head);\n\n\t\t// There might be multiple head blocks in our app, and they could have been\n\t\t// rendered in an arbitrary order — find one corresponding to this component\n\t\twhile (\n\t\t\thead_anchor !== null &&\n\t\t\t(head_anchor.nodeType !== COMMENT_NODE || /** @type {Comment} */ (head_anchor).data !== hash)\n\t\t) {\n\t\t\thead_anchor = 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\tvar start = /** @type {TemplateNode} */ (get_next_sibling(head_anchor));\n\t\t\thead_anchor.remove(); // in case this component is repeated\n\n\t\t\tset_hydrate_node(start);\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(() => {\n\t\t\tvar e = branch(() => render_fn(anchor));\n\t\t\te.f |= HEAD_EFFECT;\n\t\t});\n\t} finally {\n\t\tif (was_hydrating) {\n\t\t\tset_hydrating(true);\n\t\t\tset_hydrate_node(/** @type {TemplateNode} */ (previous_hydrate_node));\n\t\t}\n\t}\n}\n","import { DEV } from 'esm-env';\nimport { register_style } from '../dev/css.js';\nimport { effect } from '../reactivity/effects.js';\nimport { create_element } from './operations.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 = create_element('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 { branch, effect, destroy_effect, managed } 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\tmanaged(() => {\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';\nimport { has_own_property } from './utils.js';\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\t// attribute hidden for values other than \"until-found\" behaves like a boolean attribute\n\tif (name === 'hidden' && value !== 'until-found') {\n\t\tis_boolean = true;\n\t}\n\tif (value == null || (!value && is_boolean)) return '';\n\tconst normalized =\n\t\t(has_own_property.call(replacements, name) && 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 of Object.keys(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 of Object.keys(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 { CLASS_CACHE } from '../../constants.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\tvar prev = /** @type {any} */ (dom)[CLASS_CACHE];\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/** @type {any} */ (dom)[CLASS_CACHE] = 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 { STYLE_CACHE } from '../../constants.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\tvar prev = /** @type {any} */ (dom)[STYLE_CACHE];\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/** @type {any} */ (dom)[STYLE_CACHE] = 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';\nimport { Batch, current_batch, previous_batch } from '../../../reactivity/batch.js';\nimport { async_mode_flag } from '../../../../flags/index.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 batches = new WeakSet();\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\n\t\t// @ts-ignore\n\t\tselect.__value = value;\n\n\t\tif (current_batch !== null) {\n\t\t\tbatches.add(current_batch);\n\t\t}\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\n\t\tif (select === document.activeElement) {\n\t\t\t// In sync mode render effects are executed during tree traversal -> needs current_batch\n\t\t\t// In async mode render effects are flushed once batch resolved, at which point current_batch is null -> needs previous_batch\n\t\t\tvar batch = /** @type {Batch} */ (async_mode_flag ? previous_batch : current_batch);\n\n\t\t\t// Don't update the <select> if it is focused. We can get here if, for example,\n\t\t\t// an update is deferred because of async work depending on the select:\n\t\t\t//\n\t\t\t// <select bind:value={selected}>...</select>\n\t\t\t// <p>{await find(selected)}</p>\n\t\t\tif (batches.has(batch)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\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 { Blocker, 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, delegated, event, event_symbol } from './events.js';\nimport { add_form_reset_listener, autofocus } from './misc.js';\nimport * as w from '../../warnings.js';\nimport {\n\tATTRIBUTES_CACHE,\n\tFORM_RESET_HANDLER,\n\tIS_XHTML,\n\tLOADING_ATTR_SYMBOL\n} from '#client/constants';\nimport { queue_micro_task } from '../task.js';\nimport { is_capture_event, can_delegate_event, 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 { branch, destroy_effect, effect, managed } 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\nconst LINK_TAG = IS_XHTML ? 'link' : 'LINK';\nconst INPUT_TAG = IS_XHTML ? 'input' : 'INPUT';\nconst OPTION_TAG = IS_XHTML ? 'option' : 'OPTION';\nconst SELECT_TAG = IS_XHTML ? 'select' : 'SELECT';\nconst PROGRESS_TAG = IS_XHTML ? 'progress' : 'PROGRESS';\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/** @type {any} */ (input)[FORM_RESET_HANDLER] = remove_defaults;\n\tqueue_micro_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_TAG))\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_TAG)\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.getAttribute('is') || 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.getAttribute('is') || node.nodeName.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} [should_remove_defaults]\n * @param {boolean} [skip_warning]\n * @returns {Record<string, any>}\n */\nfunction set_attributes(\n\telement,\n\tprev,\n\tnext,\n\tcss_hash,\n\tshould_remove_defaults = false,\n\tskip_warning = false\n) {\n\tif (hydrating && should_remove_defaults && element.nodeName === INPUT_TAG) {\n\t\tvar input = /** @type {HTMLInputElement} */ (element);\n\t\tvar attribute = input.type === 'checkbox' ? 'defaultChecked' : 'defaultValue';\n\n\t\tif (!(attribute in next)) {\n\t\t\tremove_input_defaults(input);\n\t\t}\n\t}\n\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.nodeName === OPTION_TAG;\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\tif (element.nodeName === INPUT_TAG && 'type' in next && ('value' in next || '__value' in next)) {\n\t\tvar type = next.type;\n\n\t\tif (type !== current.type || (type === undefined && element.hasAttribute('type'))) {\n\t\t\tcurrent.type = type;\n\t\t\tset_attribute(element, 'type', type, skip_warning);\n\t\t}\n\t}\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 is_delegated = can_delegate_event(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 (!is_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 (is_delegated) {\n\t\t\t\tdelegated(event_name, element, value);\n\t\t\t\tdelegate([event_name]);\n\t\t\t} else if (value != null) {\n\t\t\t\t/**\n\t\t\t\t * @this {any}\n\t\t\t\t * @param {Event} evt\n\t\t\t\t */\n\t\t\t\tfunction handle(evt) {\n\t\t\t\t\tcurrent[key].call(this, evt);\n\t\t\t\t}\n\n\t\t\t\tcurrent[event_handle_key] = create_event(event_name, element, handle, opts);\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 {Blocker[]} blockers\n * @param {string} [css_hash]\n * @param {boolean} [should_remove_defaults]\n * @param {boolean} [skip_warning]\n */\nexport function attribute_effect(\n\telement,\n\tfn,\n\tsync = [],\n\tasync = [],\n\tblockers = [],\n\tcss_hash,\n\tshould_remove_defaults = false,\n\tskip_warning = false\n) {\n\tflatten(blockers, 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_TAG;\n\t\tvar inited = false;\n\n\t\tmanaged(() => {\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(\n\t\t\t\telement,\n\t\t\t\tprev,\n\t\t\t\tnext,\n\t\t\t\tcss_hash,\n\t\t\t\tshould_remove_defaults,\n\t\t\t\tskip_warning\n\t\t\t);\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/** @type {any} */ (element)[ATTRIBUTES_CACHE] ??= {\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 cache_key = element.getAttribute('is') || element.nodeName;\n\tvar setters = setters_cache.get(cache_key);\n\tif (setters) return setters;\n\tsetters_cache.set(cache_key, (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 (and dangerous, like innerHTML) setters we're not interested in\n\t// Do not use constructor.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 (\n\t\t\t\tdescriptors[key].set &&\n\t\t\t\t// better safe than sorry, we don't want spread attributes to mess with HTML content\n\t\t\t\tkey !== 'innerHTML' &&\n\t\t\t\tkey !== 'textContent' &&\n\t\t\t\tkey !== 'innerText'\n\t\t\t) {\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 { hydrating, reset, set_hydrate_node, set_hydrating } from '../hydration.js';\nimport { create_comment, create_element } from '../operations.js';\nimport { create_trusted_html } from '../reconciler.js';\nimport { attach } from './attachments.js';\n\n/** @type {boolean | null} */\nlet supported = null;\n\n/**\n * Checks if the browser supports rich HTML content inside `<option>` elements.\n * Modern browsers preserve HTML elements inside options, while older browsers\n * strip them during parsing, leaving only text content.\n * @returns {boolean}\n */\nfunction is_supported() {\n\tif (supported === null) {\n\t\tvar select = create_element('select');\n\t\tselect.innerHTML = create_trusted_html('<option><span>t</span></option>');\n\t\tsupported = /** @type {Element} */ (select.firstChild)?.firstChild?.nodeType === 1;\n\t}\n\n\treturn supported;\n}\n\n/**\n *\n * @param {HTMLElement} element\n * @param {(new_element: HTMLElement) => void} update_element\n */\nexport function selectedcontent(element, update_element) {\n\t// if it's not supported no need for special logic\n\tif (!is_supported()) return;\n\n\t// we use the attach function directly just to make sure is executed when is mounted to the dom\n\tattach(element, () => () => {\n\t\tconst select = element.closest('select');\n\t\tif (!select) return;\n\n\t\tconst observer = new MutationObserver((entries) => {\n\t\t\tvar selected = false;\n\n\t\t\tfor (const entry of entries) {\n\t\t\t\tif (entry.target === element) {\n\t\t\t\t\t// the `<selectedcontent>` already changed, no need to replace it\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// if the changes doesn't include the selected `<option>` we don't need to do anything\n\t\t\t\tselected ||= !!entry.target.parentElement?.closest('option')?.selected;\n\t\t\t}\n\n\t\t\tif (selected) {\n\t\t\t\t// replace the `<selectedcontent>` with a clone\n\t\t\t\telement.replaceWith((element = /** @type {HTMLElement} */ (element.cloneNode(true))));\n\t\t\t\tupdate_element(element);\n\t\t\t}\n\t\t});\n\n\t\tobserver.observe(select, {\n\t\t\tchildList: true,\n\t\t\tcharacterData: true,\n\t\t\tsubtree: true\n\t\t});\n\n\t\treturn () => {\n\t\t\tobserver.disconnect();\n\t\t};\n\t});\n}\n\n/**\n * Handles rich HTML content inside `<option>`, `<optgroup>`, or `<select>` elements with browser-specific branching.\n * Modern browsers preserve HTML inside options, while older browsers strip it to text only.\n *\n * @param {HTMLOptionElement | HTMLOptGroupElement | HTMLSelectElement} element The element to process\n * @param {() => void} rich_fn Function to process rich HTML content (modern browsers)\n */\nexport function customizable_select(element, rich_fn) {\n\tvar was_hydrating = hydrating;\n\n\tif (!is_supported()) {\n\t\tset_hydrating(false);\n\t\telement.textContent = '';\n\t\telement.append(create_comment(''));\n\t}\n\n\ttry {\n\t\trich_fn();\n\t} finally {\n\t\tif (was_hydrating) {\n\t\t\tif (hydrating) {\n\t\t\t\treset(element);\n\t\t\t} else {\n\t\t\t\tset_hydrating(true);\n\t\t\t\tset_hydrate_node(element);\n\t\t\t}\n\t\t}\n\t}\n}\n","import { listen } from './shared.js';\n\n/**\n * @param {(activeElement: Element | null) => void} update\n * @returns {void}\n */\nexport function bind_active_element(update) {\n\tlisten(document, ['focusin', 'focusout'], (event) => {\n\t\tif (event && event.type === 'focusout' && /** @type {FocusEvent} */ (event).relatedTarget) {\n\t\t\t// The tests still pass if we remove this, because of JSDOM limitations, but it is necessary\n\t\t\t// to avoid temporarily resetting to `document.body`\n\t\t\treturn;\n\t\t}\n\n\t\tupdate(document.activeElement);\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 { tick, untrack } from '../../../runtime.js';\nimport { current_batch, previous_batch } from '../../../reactivity/batch.js';\nimport { async_mode_flag } from '../../../../flags/index.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 batches = new WeakSet();\n\n\tlisten_to_event_and_reset_event(input, 'input', async (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// Because `{#each ...}` blocks work by updating sources inside the flush,\n\t\t// we need to wait a tick before checking to see if we should forcibly\n\t\t// update the input and reset the selection state\n\t\tawait tick();\n\n\t\t// Respect any validation in accessors\n\t\tif (value !== (value = get())) {\n\t\t\tvar start = input.selectionStart;\n\t\t\tvar end = input.selectionEnd;\n\t\t\tvar length = input.value.length;\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\tvar new_length = input.value.length;\n\t\t\t\t// If cursor was at end and new input is longer, move cursor to new end\n\t\t\t\tif (start === end && end === length && new_length > length) {\n\t\t\t\t\tinput.selectionStart = new_length;\n\t\t\t\t\tinput.selectionEnd = new_length;\n\t\t\t\t} else {\n\t\t\t\t\tinput.selectionStart = start;\n\t\t\t\t\tinput.selectionEnd = Math.min(end, new_length);\n\t\t\t\t}\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// In sync mode render effects are executed during tree traversal -> needs current_batch\n\t\t\t// In async mode render effects are flushed once batch resolved, at which point current_batch is null -> needs previous_batch\n\t\t\tvar batch = /** @type {Batch} */ (async_mode_flag ? 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 { render_effect, effect, teardown } from '../../../reactivity/effects.js';\nimport { listen } from './shared.js';\n\n/** @param {TimeRanges} ranges */\nfunction time_ranges_to_array(ranges) {\n\tvar array = [];\n\n\tfor (var i = 0; i < ranges.length; i += 1) {\n\t\tarray.push({ start: ranges.start(i), end: ranges.end(i) });\n\t}\n\n\treturn array;\n}\n\n/**\n * @param {HTMLVideoElement | HTMLAudioElement} media\n * @param {() => number | undefined} get\n * @param {(value: number) => void} set\n * @returns {void}\n */\nexport function bind_current_time(media, get, set = get) {\n\t/** @type {number} */\n\tvar raf_id;\n\t/** @type {number} */\n\tvar value;\n\n\t// Ideally, listening to timeupdate would be enough, but it fires too infrequently for the currentTime\n\t// binding, which is why we use a raf loop, too. We additionally still listen to timeupdate because\n\t// the user could be scrubbing through the video using the native controls when the media is paused.\n\tvar callback = () => {\n\t\tcancelAnimationFrame(raf_id);\n\n\t\tif (!media.paused) {\n\t\t\traf_id = requestAnimationFrame(callback);\n\t\t}\n\n\t\tvar next_value = media.currentTime;\n\t\tif (value !== next_value) {\n\t\t\tset((value = next_value));\n\t\t}\n\t};\n\n\traf_id = requestAnimationFrame(callback);\n\tmedia.addEventListener('timeupdate', callback);\n\n\trender_effect(() => {\n\t\tvar next_value = Number(get());\n\n\t\tif (value !== next_value && !isNaN(/** @type {any} */ (next_value))) {\n\t\t\tmedia.currentTime = value = next_value;\n\t\t}\n\t});\n\n\tteardown(() => {\n\t\tcancelAnimationFrame(raf_id);\n\t\tmedia.removeEventListener('timeupdate', callback);\n\t});\n}\n\n/**\n * @param {HTMLVideoElement | HTMLAudioElement} media\n * @param {(array: Array<{ start: number; end: number }>) => void} set\n */\nexport function bind_buffered(media, set) {\n\t/** @type {{ start: number; end: number; }[]} */\n\tvar current;\n\n\t// `buffered` can update without emitting any event, so we check it on various events.\n\t// By specs, `buffered` always returns a new object, so we have to compare deeply.\n\tlisten(media, ['loadedmetadata', 'progress', 'timeupdate', 'seeking'], () => {\n\t\tvar ranges = media.buffered;\n\n\t\tif (\n\t\t\t!current ||\n\t\t\tcurrent.length !== ranges.length ||\n\t\t\tcurrent.some((range, i) => ranges.start(i) !== range.start || ranges.end(i) !== range.end)\n\t\t) {\n\t\t\tcurrent = time_ranges_to_array(ranges);\n\t\t\tset(current);\n\t\t}\n\t});\n}\n\n/**\n * @param {HTMLVideoElement | HTMLAudioElement} media\n * @param {(array: Array<{ start: number; end: number }>) => void} set\n */\nexport function bind_seekable(media, set) {\n\tlisten(media, ['loadedmetadata'], () => set(time_ranges_to_array(media.seekable)));\n}\n\n/**\n * @param {HTMLVideoElement | HTMLAudioElement} media\n * @param {(array: Array<{ start: number; end: number }>) => void} set\n */\nexport function bind_played(media, set) {\n\tlisten(media, ['timeupdate'], () => set(time_ranges_to_array(media.played)));\n}\n\n/**\n * @param {HTMLVideoElement | HTMLAudioElement} media\n * @param {(seeking: boolean) => void} set\n */\nexport function bind_seeking(media, set) {\n\tlisten(media, ['seeking', 'seeked'], () => set(media.seeking));\n}\n\n/**\n * @param {HTMLVideoElement | HTMLAudioElement} media\n * @param {(seeking: boolean) => void} set\n */\nexport function bind_ended(media, set) {\n\tlisten(media, ['timeupdate', 'ended'], () => set(media.ended));\n}\n\n/**\n * @param {HTMLVideoElement | HTMLAudioElement} media\n * @param {(ready_state: number) => void} set\n */\nexport function bind_ready_state(media, set) {\n\tlisten(\n\t\tmedia,\n\t\t['loadedmetadata', 'loadeddata', 'canplay', 'canplaythrough', 'playing', 'waiting', 'emptied'],\n\t\t() => set(media.readyState)\n\t);\n}\n\n/**\n * @param {HTMLVideoElement | HTMLAudioElement} media\n * @param {() => number | undefined} get\n * @param {(playback_rate: number) => void} set\n */\nexport function bind_playback_rate(media, get, set = get) {\n\t// Needs to happen after element is inserted into the dom (which is guaranteed by using effect),\n\t// else playback will be set back to 1 by the browser\n\teffect(() => {\n\t\tvar value = Number(get());\n\n\t\tif (value !== media.playbackRate && !isNaN(value)) {\n\t\t\tmedia.playbackRate = value;\n\t\t}\n\t});\n\n\t// Start listening to ratechange events after the element is inserted into the dom,\n\t// else playback will be set to 1 by the browser\n\teffect(() => {\n\t\tlisten(media, ['ratechange'], () => {\n\t\t\tset(media.playbackRate);\n\t\t});\n\t});\n}\n\n/**\n * @param {HTMLVideoElement | HTMLAudioElement} media\n * @param {() => boolean | undefined} get\n * @param {(paused: boolean) => void} set\n */\nexport function bind_paused(media, get, set = get) {\n\tvar paused = get();\n\n\tvar update = () => {\n\t\tif (paused !== media.paused) {\n\t\t\tset((paused = media.paused));\n\t\t}\n\t};\n\n\t// If someone switches the src while media is playing, the player will pause.\n\t// Listen to the canplay event to get notified of this situation.\n\tlisten(media, ['play', 'pause', 'canplay'], update, paused == null);\n\n\t// Needs to be an effect to ensure media element is mounted: else, if paused is `false` (i.e. should play right away)\n\t// a \"The play() request was interrupted by a new load request\" error would be thrown because the resource isn't loaded yet.\n\teffect(() => {\n\t\tif ((paused = !!get()) !== media.paused) {\n\t\t\tif (paused) {\n\t\t\t\tmedia.pause();\n\t\t\t} else {\n\t\t\t\tmedia.play().catch((error) => {\n\t\t\t\t\tset((paused = true));\n\t\t\t\t\tthrow error;\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n}\n\n/**\n * @param {HTMLVideoElement | HTMLAudioElement} media\n * @param {() => number | undefined} get\n * @param {(volume: number) => void} set\n */\nexport function bind_volume(media, get, set = get) {\n\tvar callback = () => {\n\t\tset(media.volume);\n\t};\n\n\tif (get() == null) {\n\t\tcallback();\n\t}\n\n\tlisten(media, ['volumechange'], callback, false);\n\n\trender_effect(() => {\n\t\tvar value = Number(get());\n\n\t\tif (value !== media.volume && !isNaN(value)) {\n\t\t\tmedia.volume = value;\n\t\t}\n\t});\n}\n\n/**\n * @param {HTMLVideoElement | HTMLAudioElement} media\n * @param {() => boolean | undefined} get\n * @param {(muted: boolean) => void} set\n */\nexport function bind_muted(media, get, set = get) {\n\tvar callback = () => {\n\t\tset(media.muted);\n\t};\n\n\tif (get() == null) {\n\t\tcallback();\n\t}\n\n\tlisten(media, ['volumechange'], callback, false);\n\n\trender_effect(() => {\n\t\tvar value = !!get();\n\n\t\tif (media.muted !== value) media.muted = value;\n\t});\n}\n","import { listen } from './shared.js';\n\n/**\n * @param {(online: boolean) => void} update\n * @returns {void}\n */\nexport function bind_online(update) {\n\tlisten(window, ['online', 'offline'], () => {\n\t\tupdate(navigator.onLine);\n\t});\n}\n","import { teardown } from '../../../reactivity/effects.js';\nimport { get_descriptor } from '../../../../shared/utils.js';\n\n/**\n * Makes an `export`ed (non-prop) variable available on the `$$props` object\n * so that consumers can do `bind:x` on the component.\n * @template V\n * @param {Record<string, unknown>} props\n * @param {string} prop\n * @param {V} value\n * @returns {void}\n */\nexport function bind_prop(props, prop, value) {\n\tvar desc = get_descriptor(props, prop);\n\n\tif (desc && desc.set) {\n\t\tprops[prop] = value;\n\t\tteardown(() => {\n\t\t\tprops[prop] = null;\n\t\t});\n\t}\n}\n","import { effect, teardown } from '../../../reactivity/effects.js';\nimport { untrack } from '../../../runtime.js';\n\n/**\n * We create one listener for all elements\n * @see {@link https://groups.google.com/a/chromium.org/g/blink-dev/c/z6ienONUb5A/m/F5-VcUZtBAAJ Explanation}\n */\nclass ResizeObserverSingleton {\n\t/** */\n\t#listeners = new WeakMap();\n\n\t/** @type {ResizeObserver | undefined} */\n\t#observer;\n\n\t/** @type {ResizeObserverOptions} */\n\t#options;\n\n\t/** @static */\n\tstatic entries = new WeakMap();\n\n\t/** @param {ResizeObserverOptions} options */\n\tconstructor(options) {\n\t\tthis.#options = options;\n\t}\n\n\t/**\n\t * @param {Element} element\n\t * @param {(entry: ResizeObserverEntry) => any} listener\n\t */\n\tobserve(element, listener) {\n\t\tvar listeners = this.#listeners.get(element) || new Set();\n\t\tlisteners.add(listener);\n\n\t\tthis.#listeners.set(element, listeners);\n\t\tthis.#getObserver().observe(element, this.#options);\n\n\t\treturn () => {\n\t\t\tvar listeners = this.#listeners.get(element);\n\t\t\tlisteners.delete(listener);\n\n\t\t\tif (listeners.size === 0) {\n\t\t\t\tthis.#listeners.delete(element);\n\t\t\t\t/** @type {ResizeObserver} */ (this.#observer).unobserve(element);\n\t\t\t}\n\t\t};\n\t}\n\n\t#getObserver() {\n\t\treturn (\n\t\t\tthis.#observer ??\n\t\t\t(this.#observer = new ResizeObserver(\n\t\t\t\t/** @param {any} entries */ (entries) => {\n\t\t\t\t\tfor (var entry of entries) {\n\t\t\t\t\t\tResizeObserverSingleton.entries.set(entry.target, entry);\n\t\t\t\t\t\tfor (var listener of this.#listeners.get(entry.target) || []) {\n\t\t\t\t\t\t\tlistener(entry);\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\nvar resize_observer_content_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'content-box'\n});\n\nvar resize_observer_border_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'border-box'\n});\n\nvar resize_observer_device_pixel_content_box = /* @__PURE__ */ new ResizeObserverSingleton({\n\tbox: 'device-pixel-content-box'\n});\n\n/**\n * @param {Element} element\n * @param {'contentRect' | 'contentBoxSize' | 'borderBoxSize' | 'devicePixelContentBoxSize'} type\n * @param {(entry: keyof ResizeObserverEntry) => void} set\n */\nexport function bind_resize_observer(element, type, set) {\n\tvar observer =\n\t\ttype === 'contentRect' || type === 'contentBoxSize'\n\t\t\t? resize_observer_content_box\n\t\t\t: type === 'borderBoxSize'\n\t\t\t\t? resize_observer_border_box\n\t\t\t\t: resize_observer_device_pixel_content_box;\n\n\tvar unsub = observer.observe(element, /** @param {any} entry */ (entry) => set(entry[type]));\n\tteardown(unsub);\n}\n\n/**\n * @param {HTMLElement} element\n * @param {'clientWidth' | 'clientHeight' | 'offsetWidth' | 'offsetHeight'} type\n * @param {(size: number) => void} set\n */\nexport function bind_element_size(element, type, set) {\n\tvar unsub = resize_observer_border_box.observe(element, () => set(element[type]));\n\n\teffect(() => {\n\t\t// The update could contain reads which should be ignored\n\t\tuntrack(() => set(element[type]));\n\t\treturn unsub;\n\t});\n}\n","/** @import { ComponentContext, Effect } from '#client' */\nimport { DESTROYING, STATE_SYMBOL } from '#client/constants';\nimport { component_context } from '../../../context.js';\nimport { effect, render_effect } from '../../../reactivity/effects.js';\nimport { active_effect, untrack } from '../../../runtime.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\tvar component_effect = /** @type {ComponentContext} */ (component_context).r;\n\tvar parent = /** @type {Effect} */ (active_effect);\n\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 (!is_bound_this(get_value(...parts), element_or_component)) {\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 nullify 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// When the bind:this effect is destroyed, we go up the effect parent chain until we find the last parent effect that is destroyed,\n\t\t\t// or the effect containing the component bind:this is in (whichever comes first). That way we can time the nulling of the binding\n\t\t\t// as close to user/developer expectation as possible.\n\t\t\t// TODO Svelte 6: Decide if we want to keep this logic or just always null the binding in the component effect's teardown\n\t\t\t// (which would be simpler, but less intuitive in some cases, and breaks the `ondestroy-before-cleanup` test)\n\t\t\tlet p = parent;\n\t\t\twhile (p !== component_effect && p.parent !== null && p.parent.f & DESTROYING) {\n\t\t\t\tp = p.parent;\n\t\t\t}\n\t\t\tconst teardown = () => {\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\tconst original_teardown = p.teardown;\n\t\t\tp.teardown = () => {\n\t\t\t\tteardown();\n\t\t\t\toriginal_teardown?.();\n\t\t\t};\n\t\t};\n\t});\n\n\treturn element_or_component;\n}\n","import { render_effect, teardown } from '../../../reactivity/effects.js';\nimport { listen } from './shared.js';\n\n/**\n * @param {'innerHTML' | 'textContent' | 'innerText'} property\n * @param {HTMLElement} element\n * @param {() => unknown} get\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_content_editable(property, element, get, set = get) {\n\telement.addEventListener('input', () => {\n\t\t// @ts-ignore\n\t\tset(element[property]);\n\t});\n\n\trender_effect(() => {\n\t\tvar value = get();\n\n\t\tif (element[property] !== value) {\n\t\t\tif (value == null) {\n\t\t\t\t// @ts-ignore\n\t\t\t\tvar non_null_value = element[property];\n\t\t\t\tset(non_null_value);\n\t\t\t} else {\n\t\t\t\t// @ts-ignore\n\t\t\t\telement[property] = value + '';\n\t\t\t}\n\t\t}\n\t});\n}\n\n/**\n * @param {string} property\n * @param {string} event_name\n * @param {Element} element\n * @param {(value: unknown) => void} set\n * @param {() => unknown} [get]\n * @returns {void}\n */\nexport function bind_property(property, event_name, element, set, get) {\n\tvar handler = () => {\n\t\t// @ts-ignore\n\t\tset(element[property]);\n\t};\n\n\telement.addEventListener(event_name, handler);\n\n\tif (get) {\n\t\trender_effect(() => {\n\t\t\t// @ts-ignore\n\t\t\telement[property] = get();\n\t\t});\n\t} else {\n\t\thandler();\n\t}\n\n\t// @ts-ignore\n\tif (element === document.body || element === window || element === document) {\n\t\tteardown(() => {\n\t\t\telement.removeEventListener(event_name, handler);\n\t\t});\n\t}\n}\n\n/**\n * @param {HTMLElement} element\n * @param {(value: unknown) => void} set\n * @returns {void}\n */\nexport function bind_focused(element, set) {\n\tlisten(element, ['focus', 'blur'], () => {\n\t\tset(element === document.activeElement);\n\t});\n}\n","import { effect, render_effect, teardown } from '../../../reactivity/effects.js';\nimport { listen, without_reactive_context } from './shared.js';\n\n/**\n * @param {'x' | 'y'} type\n * @param {() => number} get\n * @param {(value: number) => void} set\n * @returns {void}\n */\nexport function bind_window_scroll(type, get, set = get) {\n\tvar is_scrolling_x = type === 'x';\n\n\tvar target_handler = () =>\n\t\twithout_reactive_context(() => {\n\t\t\tscrolling = true;\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = setTimeout(clear, 100); // TODO use scrollend event if supported (or when supported everywhere?)\n\n\t\t\tset(window[is_scrolling_x ? 'scrollX' : 'scrollY']);\n\t\t});\n\n\taddEventListener('scroll', target_handler, {\n\t\tpassive: true\n\t});\n\n\tvar scrolling = false;\n\n\t/** @type {ReturnType<typeof setTimeout>} */\n\tvar timeout;\n\tvar clear = () => {\n\t\tscrolling = false;\n\t};\n\tvar first = true;\n\n\trender_effect(() => {\n\t\tvar latest_value = get();\n\t\t// Don't scroll to the initial value for accessibility reasons\n\t\tif (first) {\n\t\t\tfirst = false;\n\t\t} else if (!scrolling && latest_value != null) {\n\t\t\tscrolling = true;\n\t\t\tclearTimeout(timeout);\n\t\t\tif (is_scrolling_x) {\n\t\t\t\tscrollTo(latest_value, window.scrollY);\n\t\t\t} else {\n\t\t\t\tscrollTo(window.scrollX, latest_value);\n\t\t\t}\n\t\t\ttimeout = setTimeout(clear, 100);\n\t\t}\n\t});\n\n\t// Browsers don't fire the scroll event for the initial scroll position when scroll style isn't set to smooth\n\teffect(target_handler);\n\n\tteardown(() => {\n\t\tremoveEventListener('scroll', target_handler);\n\t});\n}\n\n/**\n * @param {'innerWidth' | 'innerHeight' | 'outerWidth' | 'outerHeight'} type\n * @param {(size: number) => void} set\n */\nexport function bind_window_size(type, set) {\n\tlisten(window, ['resize'], () => without_reactive_context(() => set(window[type])));\n}\n","import { noop } from '../../../shared/utils.js';\nimport { user_pre_effect } from '../../reactivity/effects.js';\nimport { on } from '../elements/events.js';\n\n/**\n * Substitute for the `trusted` event modifier\n * @deprecated\n * @param {(event: Event, ...args: Array<unknown>) => void} fn\n * @returns {(event: Event, ...args: unknown[]) => void}\n */\nexport function trusted(fn) {\n\treturn function (...args) {\n\t\tvar event = /** @type {Event} */ (args[0]);\n\t\tif (event.isTrusted) {\n\t\t\t// @ts-ignore\n\t\t\tfn?.apply(this, args);\n\t\t}\n\t};\n}\n\n/**\n * Substitute for the `self` event modifier\n * @deprecated\n * @param {(event: Event, ...args: Array<unknown>) => void} fn\n * @returns {(event: Event, ...args: unknown[]) => void}\n */\nexport function self(fn) {\n\treturn function (...args) {\n\t\tvar event = /** @type {Event} */ (args[0]);\n\t\t// @ts-ignore\n\t\tif (event.target === this) {\n\t\t\t// @ts-ignore\n\t\t\tfn?.apply(this, args);\n\t\t}\n\t};\n}\n\n/**\n * Substitute for the `stopPropagation` event modifier\n * @deprecated\n * @param {(event: Event, ...args: Array<unknown>) => void} fn\n * @returns {(event: Event, ...args: unknown[]) => void}\n */\nexport function stopPropagation(fn) {\n\treturn function (...args) {\n\t\tvar event = /** @type {Event} */ (args[0]);\n\t\tevent.stopPropagation();\n\t\t// @ts-ignore\n\t\treturn fn?.apply(this, args);\n\t};\n}\n\n/**\n * Substitute for the `once` event modifier\n * @deprecated\n * @param {(event: Event, ...args: Array<unknown>) => void} fn\n * @returns {(event: Event, ...args: unknown[]) => void}\n */\nexport function once(fn) {\n\tvar ran = false;\n\n\treturn function (...args) {\n\t\tif (ran) return;\n\t\tran = true;\n\n\t\t// @ts-ignore\n\t\treturn fn?.apply(this, args);\n\t};\n}\n\n/**\n * Substitute for the `stopImmediatePropagation` event modifier\n * @deprecated\n * @param {(event: Event, ...args: Array<unknown>) => void} fn\n * @returns {(event: Event, ...args: unknown[]) => void}\n */\nexport function stopImmediatePropagation(fn) {\n\treturn function (...args) {\n\t\tvar event = /** @type {Event} */ (args[0]);\n\t\tevent.stopImmediatePropagation();\n\t\t// @ts-ignore\n\t\treturn fn?.apply(this, args);\n\t};\n}\n\n/**\n * Substitute for the `preventDefault` event modifier\n * @deprecated\n * @param {(event: Event, ...args: Array<unknown>) => void} fn\n * @returns {(event: Event, ...args: unknown[]) => void}\n */\nexport function preventDefault(fn) {\n\treturn function (...args) {\n\t\tvar event = /** @type {Event} */ (args[0]);\n\t\tevent.preventDefault();\n\t\t// @ts-ignore\n\t\treturn fn?.apply(this, args);\n\t};\n}\n\n/**\n * Substitute for the `passive` event modifier, implemented as an action\n * @deprecated\n * @param {HTMLElement} node\n * @param {[event: string, handler: () => EventListener]} options\n */\nexport function passive(node, [event, handler]) {\n\tuser_pre_effect(() => {\n\t\treturn on(node, event, handler() ?? noop, {\n\t\t\tpassive: true\n\t\t});\n\t});\n}\n\n/**\n * Substitute for the `nonpassive` event modifier, implemented as an action\n * @deprecated\n * @param {HTMLElement} node\n * @param {[event: string, handler: () => EventListener]} options\n */\nexport function nonpassive(node, [event, handler]) {\n\tuser_pre_effect(() => {\n\t\treturn on(node, event, handler() ?? noop, {\n\t\t\tpassive: false\n\t\t});\n\t});\n}\n","/** @import { ComponentContextLegacy } from '#client' */\nimport { run, run_all } from '../../../shared/utils.js';\nimport { component_context } from '../../context.js';\nimport { derived } from '../../reactivity/deriveds.js';\nimport { user_pre_effect, user_effect } from '../../reactivity/effects.js';\nimport { deep_read_state, get, untrack } from '../../runtime.js';\n\n/**\n * Legacy-mode only: Call `onMount` callbacks and set up `beforeUpdate`/`afterUpdate` effects\n * @param {boolean} [immutable]\n */\nexport function init(immutable = false) {\n\tconst context = /** @type {ComponentContextLegacy} */ (component_context);\n\n\tconst callbacks = context.l.u;\n\tif (!callbacks) return;\n\n\tlet props = () => deep_read_state(context.s);\n\n\tif (immutable) {\n\t\tlet version = 0;\n\t\tlet prev = /** @type {Record<string, any>} */ ({});\n\n\t\t// In legacy immutable mode, before/afterUpdate only fire if the object identity of a prop changes\n\t\tconst d = derived(() => {\n\t\t\tlet changed = false;\n\t\t\tconst props = context.s;\n\t\t\tfor (const key in props) {\n\t\t\t\tif (props[key] !== prev[key]) {\n\t\t\t\t\tprev[key] = props[key];\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (changed) version++;\n\t\t\treturn version;\n\t\t});\n\n\t\tprops = () => get(d);\n\t}\n\n\t// beforeUpdate\n\tif (callbacks.b.length) {\n\t\tuser_pre_effect(() => {\n\t\t\tobserve_all(context, props);\n\t\t\trun_all(callbacks.b);\n\t\t});\n\t}\n\n\t// onMount (must run before afterUpdate)\n\tuser_effect(() => {\n\t\tconst fns = untrack(() => callbacks.m.map(run));\n\t\treturn () => {\n\t\t\tfor (const fn of fns) {\n\t\t\t\tif (typeof fn === 'function') {\n\t\t\t\t\tfn();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t});\n\n\t// afterUpdate\n\tif (callbacks.a.length) {\n\t\tuser_effect(() => {\n\t\t\tobserve_all(context, props);\n\t\t\trun_all(callbacks.a);\n\t\t});\n\t}\n}\n\n/**\n * Invoke the getter of all signals associated with a component\n * so they can be registered to the effect this function is called in.\n * @param {ComponentContextLegacy} context\n * @param {(() => void)} props\n */\nfunction observe_all(context, props) {\n\tif (context.l.s) {\n\t\tfor (const signal of context.l.s) get(signal);\n\t}\n\n\tprops();\n}\n","import { set, source } from '../../reactivity/sources.js';\nimport { get } from '../../runtime.js';\nimport { is_array } from '../../../shared/utils.js';\n\n/**\n * Under some circumstances, imports may be reactive in legacy mode. In that case,\n * they should be using `reactive_import` as part of the transformation\n * @param {() => any} fn\n */\nexport function reactive_import(fn) {\n\tvar s = source(0);\n\n\treturn function () {\n\t\tif (arguments.length === 1) {\n\t\t\tset(s, get(s) + 1);\n\t\t\treturn arguments[0];\n\t\t} else {\n\t\t\tget(s);\n\t\t\treturn fn();\n\t\t}\n\t};\n}\n\n/**\n * @this {any}\n * @param {Record<string, unknown>} $$props\n * @param {Event} event\n * @returns {void}\n */\nexport function bubble_event($$props, event) {\n\tvar events = /** @type {Record<string, Function[] | Function>} */ ($$props.$$events)?.[\n\t\tevent.type\n\t];\n\n\tvar callbacks = is_array(events) ? events.slice() : events == null ? [] : [events];\n\n\tfor (var fn of callbacks) {\n\t\t// Preserve \"this\" context\n\t\tfn.call(this, event);\n\t}\n}\n\n/**\n * Used to simulate `$on` on a component instance when `compatibility.componentApi === 4`\n * @param {Record<string, any>} $$props\n * @param {string} event_name\n * @param {Function} event_callback\n */\nexport function add_legacy_event_listener($$props, event_name, event_callback) {\n\t$$props.$$events ||= {};\n\t$$props.$$events[event_name] ||= [];\n\t$$props.$$events[event_name].push(event_callback);\n}\n\n/**\n * Used to simulate `$set` on a component instance when `compatibility.componentApi === 4`.\n * Needs component accessors so that it can call the setter of the prop. Therefore doesn't\n * work for updating props in `$$props` or `$$restProps`.\n * @this {Record<string, any>}\n * @param {Record<string, any>} $$new_props\n */\nexport function update_legacy_props($$new_props) {\n\tfor (var key in $$new_props) {\n\t\tif (key in this) {\n\t\t\tthis[key] = $$new_props[key];\n\t\t}\n\t}\n}\n","/** @import { Derived, 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';\nimport { effect, render_effect } from './effects.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: Set<string | symbol>, name?: string }>}}\n */\nconst rest_props_handler = {\n\tget(target, key) {\n\t\tif (target.exclude.has(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.has(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.has(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.has(key));\n\t}\n};\n\n/**\n * @param {Record<string, unknown>} props\n * @param {Set<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\tvar fallback_signal = /** @type {Derived<V> | undefined} */ (undefined);\n\n\tvar get_fallback = () => {\n\t\tif (lazy && runes) {\n\t\t\tfallback_signal ??= derived(/** @type {() => V} */ (fallback));\n\t\t\treturn get(fallback_signal);\n\t\t}\n\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\tlet 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\t/** @type {V} */\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 (people could access props in a timeout)\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 { Blocker } from '#client' */\nimport { dev_current_component_function } from './context.js';\nimport { FILENAME } from '../../constants.js';\nimport { render_effect } from './reactivity/effects.js';\nimport * as w from './warnings.js';\nimport { capture_store_binding } from './reactivity/store.js';\nimport { run_after_blockers } from './reactivity/async.js';\n\n/**\n * @param {string} binding\n * @param {Blocker[]} blockers\n * @param {() => Record<string, any>} get_object\n * @param {() => string} get_property\n * @param {number} line\n * @param {number} column\n */\nexport function validate_binding(binding, blockers, get_object, get_property, line, column) {\n\trun_after_blockers(blockers, () => {\n\t\tvar warned = false;\n\n\t\tvar filename = dev_current_component_function?.[FILENAME];\n\n\t\trender_effect(() => {\n\t\t\tif (warned) return;\n\n\t\t\tvar [object, is_store_sub] = capture_store_binding(get_object);\n\n\t\t\tif (is_store_sub) return;\n\n\t\t\tvar property = get_property();\n\n\t\t\tvar ran = false;\n\n\t\t\t// by making the (possibly false, but it would be an extreme edge case) assumption\n\t\t\t// that a getter has a corresponding setter, we can determine if a property is\n\t\t\t// reactive by seeing if this effect has dependencies\n\t\t\tvar effect = render_effect(() => {\n\t\t\t\tif (ran) return;\n\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unused-expressions\n\t\t\t\tobject[property];\n\t\t\t});\n\n\t\t\tran = true;\n\n\t\t\tif (effect.deps === null) {\n\t\t\t\tvar location = `${filename}:${line}:${column}`;\n\t\t\t\tw.binding_property_non_reactive(binding, location);\n\n\t\t\t\twarned = true;\n\t\t\t}\n\t\t});\n\t});\n}\n","/** @import { ComponentConstructorOptions, ComponentType, SvelteComponent, Component } from 'svelte' */\nimport { DIRTY, LEGACY_PROPS, MAYBE_DIRTY } from '../internal/client/constants.js';\nimport { user_pre_effect } from '../internal/client/reactivity/effects.js';\nimport { mutable_source, set } from '../internal/client/reactivity/sources.js';\nimport { hydrate, mount, unmount } from '../internal/client/render.js';\nimport { active_effect, get } from '../internal/client/runtime.js';\nimport { flushSync } from '../internal/client/reactivity/batch.js';\nimport { define_property, is_array } from '../internal/shared/utils.js';\nimport * as e from '../internal/client/errors.js';\nimport * as w from '../internal/client/warnings.js';\nimport { DEV } from 'esm-env';\nimport { FILENAME } from '../constants.js';\nimport { component_context, dev_current_component_function } from '../internal/client/context.js';\nimport { async_mode_flag } from '../internal/flags/index.js';\nimport { set_signal_status } from '../internal/client/reactivity/status.js';\n\n/**\n * Takes the same options as a Svelte 4 component and the component function and returns a Svelte 4 compatible component.\n *\n * @deprecated Use this only as a temporary solution to migrate your imperative component code to Svelte 5.\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @template {Record<string, any>} Events\n * @template {Record<string, any>} Slots\n *\n * @param {ComponentConstructorOptions<Props> & {\n * \tcomponent: ComponentType<SvelteComponent<Props, Events, Slots>> | Component<Props>;\n * }} options\n * @returns {SvelteComponent<Props, Events, Slots> & Exports}\n */\nexport function createClassComponent(options) {\n\t// @ts-expect-error $$prop_def etc are not actually defined\n\treturn new Svelte4Component(options);\n}\n\n/**\n * Takes the component function and returns a Svelte 4 compatible component constructor.\n *\n * @deprecated Use this only as a temporary solution to migrate your imperative component code to Svelte 5.\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @template {Record<string, any>} Events\n * @template {Record<string, any>} Slots\n *\n * @param {SvelteComponent<Props, Events, Slots> | Component<Props>} component\n * @returns {ComponentType<SvelteComponent<Props, Events, Slots> & Exports>}\n */\nexport function asClassComponent(component) {\n\t// @ts-expect-error $$prop_def etc are not actually defined\n\treturn class extends Svelte4Component {\n\t\t/** @param {any} options */\n\t\tconstructor(options) {\n\t\t\tsuper({\n\t\t\t\tcomponent,\n\t\t\t\t...options\n\t\t\t});\n\t\t}\n\t};\n}\n\n/**\n * Support using the component as both a class and function during the transition period\n * @typedef  {{new (o: ComponentConstructorOptions): SvelteComponent;(...args: Parameters<Component<Record<string, any>>>): ReturnType<Component<Record<string, any>, Record<string, any>>>;}} LegacyComponentType\n */\n\nclass Svelte4Component {\n\t/** @type {any} */\n\t#events;\n\n\t/** @type {Record<string, any>} */\n\t#instance;\n\n\t/**\n\t * @param {ComponentConstructorOptions & {\n\t *  component: any;\n\t * }} options\n\t */\n\tconstructor(options) {\n\t\tvar sources = new Map();\n\n\t\t/**\n\t\t * @param {string | symbol} key\n\t\t * @param {unknown} value\n\t\t */\n\t\tvar add_source = (key, value) => {\n\t\t\tvar s = mutable_source(value, false, false);\n\t\t\tsources.set(key, s);\n\t\t\treturn s;\n\t\t};\n\n\t\t// Replicate coarse-grained props through a proxy that has a version source for\n\t\t// each property, which is incremented on updates to the property itself. Do not\n\t\t// use our $state proxy because that one has fine-grained reactivity.\n\t\tconst props = new Proxy(\n\t\t\t{ ...(options.props || {}), $$events: {} },\n\t\t\t{\n\t\t\t\tget(target, prop) {\n\t\t\t\t\treturn get(sources.get(prop) ?? add_source(prop, Reflect.get(target, prop)));\n\t\t\t\t},\n\t\t\t\thas(target, prop) {\n\t\t\t\t\t// Necessary to not throw \"invalid binding\" validation errors on the component side\n\t\t\t\t\tif (prop === LEGACY_PROPS) return true;\n\n\t\t\t\t\tget(sources.get(prop) ?? add_source(prop, Reflect.get(target, prop)));\n\t\t\t\t\treturn Reflect.has(target, prop);\n\t\t\t\t},\n\t\t\t\tset(target, prop, value) {\n\t\t\t\t\tset(sources.get(prop) ?? add_source(prop, value), value);\n\t\t\t\t\treturn Reflect.set(target, prop, value);\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\tthis.#instance = (options.hydrate ? hydrate : mount)(options.component, {\n\t\t\ttarget: options.target,\n\t\t\tanchor: options.anchor,\n\t\t\tprops,\n\t\t\tcontext: options.context,\n\t\t\tintro: options.intro ?? false,\n\t\t\trecover: options.recover,\n\t\t\ttransformError: options.transformError\n\t\t});\n\n\t\t// We don't flushSync for custom element wrappers or if the user doesn't want it,\n\t\t// or if we're in async mode since `flushSync()` will fail\n\t\tif (!async_mode_flag && (!options?.props?.$$host || options.sync === false)) {\n\t\t\tflushSync();\n\t\t}\n\n\t\tthis.#events = props.$$events;\n\n\t\tfor (const key of Object.keys(this.#instance)) {\n\t\t\tif (key === '$set' || key === '$destroy' || key === '$on') continue;\n\t\t\tdefine_property(this, key, {\n\t\t\t\tget() {\n\t\t\t\t\treturn this.#instance[key];\n\t\t\t\t},\n\t\t\t\t/** @param {any} value */\n\t\t\t\tset(value) {\n\t\t\t\t\tthis.#instance[key] = value;\n\t\t\t\t},\n\t\t\t\tenumerable: true\n\t\t\t});\n\t\t}\n\n\t\tthis.#instance.$set = /** @param {Record<string, any>} next */ (next) => {\n\t\t\tObject.assign(props, next);\n\t\t};\n\n\t\tthis.#instance.$destroy = () => {\n\t\t\tunmount(this.#instance);\n\t\t};\n\t}\n\n\t/** @param {Record<string, any>} props */\n\t$set(props) {\n\t\tthis.#instance.$set(props);\n\t}\n\n\t/**\n\t * @param {string} event\n\t * @param {(...args: any[]) => any} callback\n\t * @returns {any}\n\t */\n\t$on(event, callback) {\n\t\tthis.#events[event] = this.#events[event] || [];\n\n\t\t/** @param {any[]} args */\n\t\tconst cb = (...args) => callback.call(this, ...args);\n\t\tthis.#events[event].push(cb);\n\t\treturn () => {\n\t\t\tthis.#events[event] = this.#events[event].filter(/** @param {any} fn */ (fn) => fn !== cb);\n\t\t};\n\t}\n\n\t$destroy() {\n\t\tthis.#instance.$destroy();\n\t}\n}\n\n/**\n * Runs the given function once immediately on the server, and works like `$effect.pre` on the client.\n *\n * @deprecated Use this only as a temporary solution to migrate your component code to Svelte 5.\n * @param {() => void | (() => void)} fn\n * @returns {void}\n */\nexport function run(fn) {\n\tuser_pre_effect(() => {\n\t\tfn();\n\t\tvar effect = /** @type {import('#client').Effect} */ (active_effect);\n\t\t// If the effect is immediately made dirty again, mark it as maybe dirty to emulate legacy behaviour\n\t\tif ((effect.f & DIRTY) !== 0) {\n\t\t\tlet filename = \"a file (we can't know which one)\";\n\t\t\tif (DEV) {\n\t\t\t\t// @ts-ignore\n\t\t\t\tfilename = dev_current_component_function?.[FILENAME] ?? filename;\n\t\t\t}\n\t\t\tw.legacy_recursive_reactive_block(filename);\n\t\t\tset_signal_status(effect, MAYBE_DIRTY);\n\t\t}\n\t});\n}\n\n/**\n * Function to mimic the multiple listeners available in svelte 4\n * @deprecated\n * @param {EventListener[]} handlers\n * @returns {EventListener}\n */\nexport function handlers(...handlers) {\n\treturn function (event) {\n\t\tconst { stopImmediatePropagation } = event;\n\t\tlet stopped = false;\n\n\t\tevent.stopImmediatePropagation = () => {\n\t\t\tstopped = true;\n\t\t\tstopImmediatePropagation.call(event);\n\t\t};\n\n\t\tconst errors = [];\n\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\t// @ts-expect-error `this` is not typed\n\t\t\t\thandler?.call(this, event);\n\t\t\t} catch (e) {\n\t\t\t\terrors.push(e);\n\t\t\t}\n\n\t\t\tif (stopped) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfor (let error of errors) {\n\t\t\tqueueMicrotask(() => {\n\t\t\t\tthrow error;\n\t\t\t});\n\t\t}\n\t};\n}\n\n/**\n * Function to create a `bubble` function that mimic the behavior of `on:click` without handler available in svelte 4.\n * @deprecated Use this only as a temporary solution to migrate your automatically delegated events in Svelte 5.\n */\nexport function createBubbler() {\n\tconst active_component_context = component_context;\n\tif (active_component_context === null) {\n\t\te.lifecycle_outside_component('createBubbler');\n\t}\n\n\treturn (/**@type {string}*/ type) => (/**@type {Event}*/ event) => {\n\t\tconst events = /** @type {Record<string, Function | Function[]>} */ (\n\t\t\tactive_component_context.s.$$events\n\t\t)?.[/** @type {any} */ (type)];\n\n\t\tif (events) {\n\t\t\tconst callbacks = is_array(events) ? events.slice() : [events];\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\t\treturn true;\n\t};\n}\n\nexport {\n\tonce,\n\tpreventDefault,\n\tself,\n\tstopImmediatePropagation,\n\tstopPropagation,\n\ttrusted,\n\tpassive,\n\tnonpassive\n} from '../internal/client/dom/legacy/event-modifiers.js';\n","import { createClassComponent } from '../../../../legacy/legacy-client.js';\nimport { effect_root, render_effect } from '../../reactivity/effects.js';\nimport { append } from '../template.js';\nimport { define_property, get_descriptor, object_keys } from '../../../shared/utils.js';\nimport { create_element } from '../operations.js';\n\n/**\n * @typedef {Object} CustomElementPropDefinition\n * @property {string} [attribute]\n * @property {boolean} [reflect]\n * @property {'String'|'Boolean'|'Number'|'Array'|'Object'} [type]\n */\n\n/** @type {any} */\nlet SvelteElement;\n\nif (typeof HTMLElement === 'function') {\n\tSvelteElement = class extends HTMLElement {\n\t\t/** The Svelte component constructor */\n\t\t$$ctor;\n\t\t/** Slots */\n\t\t$$s;\n\t\t/** @type {any} The Svelte component instance */\n\t\t$$c;\n\t\t/** Whether or not the custom element is connected */\n\t\t$$cn = false;\n\t\t/** @type {Record<string, any>} Component props data */\n\t\t$$d = {};\n\t\t/** `true` if currently in the process of reflecting component props back to attributes */\n\t\t$$r = false;\n\t\t/** @type {Record<string, CustomElementPropDefinition>} Props definition (name, reflected, type etc) */\n\t\t$$p_d = {};\n\t\t/** @type {Record<string, EventListenerOrEventListenerObject[]>} Event listeners */\n\t\t$$l = {};\n\t\t/** @type {Map<EventListenerOrEventListenerObject, Function>} Event listener unsubscribe functions */\n\t\t$$l_u = new Map();\n\t\t/** @type {any} The managed render effect for reflecting attributes */\n\t\t$$me;\n\t\t/** @type {ShadowRoot | null} The ShadowRoot of the custom element */\n\t\t$$shadowRoot = null;\n\n\t\t/**\n\t\t * @param {*} $$componentCtor\n\t\t * @param {*} $$slots\n\t\t * @param {ShadowRootInit | undefined} shadow_root_init\n\t\t */\n\t\tconstructor($$componentCtor, $$slots, shadow_root_init) {\n\t\t\tsuper();\n\t\t\tthis.$$ctor = $$componentCtor;\n\t\t\tthis.$$s = $$slots;\n\n\t\t\tif (shadow_root_init) {\n\t\t\t\t// We need to store the reference to shadow root, because `closed` shadow root cannot be\n\t\t\t\t// accessed with `this.shadowRoot`.\n\t\t\t\tthis.$$shadowRoot = this.attachShadow(shadow_root_init);\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @param {string} type\n\t\t * @param {EventListenerOrEventListenerObject} listener\n\t\t * @param {boolean | AddEventListenerOptions} [options]\n\t\t */\n\t\taddEventListener(type, listener, options) {\n\t\t\t// We can't determine upfront if the event is a custom event or not, so we have to\n\t\t\t// listen to both. If someone uses a custom event with the same name as a regular\n\t\t\t// browser event, this fires twice - we can't avoid that.\n\t\t\tthis.$$l[type] = this.$$l[type] || [];\n\t\t\tthis.$$l[type].push(listener);\n\t\t\tif (this.$$c) {\n\t\t\t\tconst unsub = this.$$c.$on(type, listener);\n\t\t\t\tthis.$$l_u.set(listener, unsub);\n\t\t\t}\n\t\t\tsuper.addEventListener(type, listener, options);\n\t\t}\n\n\t\t/**\n\t\t * @param {string} type\n\t\t * @param {EventListenerOrEventListenerObject} listener\n\t\t * @param {boolean | AddEventListenerOptions} [options]\n\t\t */\n\t\tremoveEventListener(type, listener, options) {\n\t\t\tsuper.removeEventListener(type, listener, options);\n\t\t\tif (this.$$c) {\n\t\t\t\tconst unsub = this.$$l_u.get(listener);\n\t\t\t\tif (unsub) {\n\t\t\t\t\tunsub();\n\t\t\t\t\tthis.$$l_u.delete(listener);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tasync connectedCallback() {\n\t\t\tthis.$$cn = true;\n\t\t\tif (!this.$$c) {\n\t\t\t\t// We wait one tick to let possible child slot elements be created/mounted\n\t\t\t\tawait Promise.resolve();\n\t\t\t\tif (!this.$$cn || this.$$c) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t/** @param {string} name */\n\t\t\t\tfunction create_slot(name) {\n\t\t\t\t\t/**\n\t\t\t\t\t * @param {Element} anchor\n\t\t\t\t\t */\n\t\t\t\t\treturn (anchor) => {\n\t\t\t\t\t\tconst slot = create_element('slot');\n\t\t\t\t\t\tif (name !== 'default') slot.name = name;\n\n\t\t\t\t\t\tappend(anchor, slot);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\t/** @type {Record<string, any>} */\n\t\t\t\tconst $$slots = {};\n\t\t\t\tconst existing_slots = get_custom_elements_slots(this);\n\t\t\t\tfor (const name of this.$$s) {\n\t\t\t\t\tif (name in existing_slots) {\n\t\t\t\t\t\tif (name === 'default' && !this.$$d.children) {\n\t\t\t\t\t\t\tthis.$$d.children = create_slot(name);\n\t\t\t\t\t\t\t$$slots.default = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$$slots[name] = create_slot(name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const attribute of this.attributes) {\n\t\t\t\t\t// this.$$data takes precedence over this.attributes\n\t\t\t\t\tconst name = this.$$g_p(attribute.name);\n\t\t\t\t\tif (!(name in this.$$d)) {\n\t\t\t\t\t\tthis.$$d[name] = get_custom_element_value(name, attribute.value, this.$$p_d, 'toProp');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Port over props that were set programmatically before ce was initialized\n\t\t\t\tfor (const key in this.$$p_d) {\n\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\tif (!(key in this.$$d) && this[key] !== undefined) {\n\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\tthis.$$d[key] = this[key]; // don't transform, these were set through JavaScript\n\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\tdelete this[key]; // remove the property that shadows the getter/setter\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.$$c = createClassComponent({\n\t\t\t\t\tcomponent: this.$$ctor,\n\t\t\t\t\ttarget: this.$$shadowRoot || this,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\t...this.$$d,\n\t\t\t\t\t\t$$slots,\n\t\t\t\t\t\t$$host: this\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// Reflect component props as attributes\n\t\t\t\tthis.$$me = effect_root(() => {\n\t\t\t\t\trender_effect(() => {\n\t\t\t\t\t\tthis.$$r = true;\n\t\t\t\t\t\tfor (const key of object_keys(this.$$c)) {\n\t\t\t\t\t\t\tif (!this.$$p_d[key]?.reflect) continue;\n\t\t\t\t\t\t\tthis.$$d[key] = this.$$c[key];\n\t\t\t\t\t\t\tconst attribute_value = get_custom_element_value(\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tthis.$$d[key],\n\t\t\t\t\t\t\t\tthis.$$p_d,\n\t\t\t\t\t\t\t\t'toAttribute'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (attribute_value == null) {\n\t\t\t\t\t\t\t\tthis.removeAttribute(this.$$p_d[key].attribute || key);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.setAttribute(this.$$p_d[key].attribute || key, attribute_value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.$$r = false;\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\tfor (const type in this.$$l) {\n\t\t\t\t\tfor (const listener of this.$$l[type]) {\n\t\t\t\t\t\tconst unsub = this.$$c.$on(type, listener);\n\t\t\t\t\t\tthis.$$l_u.set(listener, unsub);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.$$l = {};\n\t\t\t}\n\t\t}\n\n\t\t// We don't need this when working within Svelte code, but for compatibility of people using this outside of Svelte\n\t\t// and setting attributes through setAttribute etc, this is helpful\n\n\t\t/**\n\t\t * @param {string} attr\n\t\t * @param {string} _oldValue\n\t\t * @param {string} newValue\n\t\t */\n\t\tattributeChangedCallback(attr, _oldValue, newValue) {\n\t\t\tif (this.$$r) return;\n\t\t\tattr = this.$$g_p(attr);\n\t\t\tthis.$$d[attr] = get_custom_element_value(attr, newValue, this.$$p_d, 'toProp');\n\t\t\tthis.$$c?.$set({ [attr]: this.$$d[attr] });\n\t\t}\n\n\t\tdisconnectedCallback() {\n\t\t\tthis.$$cn = false;\n\t\t\t// In a microtask, because this could be a move within the DOM\n\t\t\tPromise.resolve().then(() => {\n\t\t\t\tif (!this.$$cn && this.$$c) {\n\t\t\t\t\tthis.$$c.$destroy();\n\t\t\t\t\tthis.$$me();\n\t\t\t\t\tthis.$$c = undefined;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * @param {string} attribute_name\n\t\t */\n\t\t$$g_p(attribute_name) {\n\t\t\treturn (\n\t\t\t\tobject_keys(this.$$p_d).find(\n\t\t\t\t\t(key) =>\n\t\t\t\t\t\tthis.$$p_d[key].attribute === attribute_name ||\n\t\t\t\t\t\t(!this.$$p_d[key].attribute && key.toLowerCase() === attribute_name)\n\t\t\t\t) || attribute_name\n\t\t\t);\n\t\t}\n\t};\n}\n\n/**\n * @param {string} prop\n * @param {any} value\n * @param {Record<string, CustomElementPropDefinition>} props_definition\n * @param {'toAttribute' | 'toProp'} [transform]\n */\nfunction get_custom_element_value(prop, value, props_definition, transform) {\n\tconst type = props_definition[prop]?.type;\n\tvalue = type === 'Boolean' && typeof value !== 'boolean' ? value != null : value;\n\tif (!transform || !props_definition[prop]) {\n\t\treturn value;\n\t} else if (transform === 'toAttribute') {\n\t\tswitch (type) {\n\t\t\tcase 'Object':\n\t\t\tcase 'Array':\n\t\t\t\treturn value == null ? null : JSON.stringify(value);\n\t\t\tcase 'Boolean':\n\t\t\t\treturn value ? '' : null;\n\t\t\tcase 'Number':\n\t\t\t\treturn value == null ? null : value;\n\t\t\tdefault:\n\t\t\t\treturn value;\n\t\t}\n\t} else {\n\t\tswitch (type) {\n\t\t\tcase 'Object':\n\t\t\tcase 'Array':\n\t\t\t\treturn value && JSON.parse(value);\n\t\t\tcase 'Boolean':\n\t\t\t\treturn value; // conversion already handled above\n\t\t\tcase 'Number':\n\t\t\t\treturn value != null ? +value : value;\n\t\t\tdefault:\n\t\t\t\treturn value;\n\t\t}\n\t}\n}\n\n/**\n * @param {HTMLElement} element\n */\nfunction get_custom_elements_slots(element) {\n\t/** @type {Record<string, true>} */\n\tconst result = {};\n\telement.childNodes.forEach((node) => {\n\t\tresult[/** @type {Element} node */ (node).slot || 'default'] = true;\n\t});\n\treturn result;\n}\n\n/**\n * @internal\n *\n * Turn a Svelte component into a custom element.\n * @param {any} Component  A Svelte component function\n * @param {Record<string, CustomElementPropDefinition>} props_definition  The props to observe\n * @param {string[]} slots  The slots to create\n * @param {string[]} exports  Explicitly exported values, other than props\n * @param {ShadowRootInit | undefined} shadow_root_init  Options passed to shadow DOM constructor\n * @param {(ce: new () => HTMLElement) => new () => HTMLElement} [extend]\n */\nexport function create_custom_element(\n\tComponent,\n\tprops_definition,\n\tslots,\n\texports,\n\tshadow_root_init,\n\textend\n) {\n\tlet Class = class extends SvelteElement {\n\t\tconstructor() {\n\t\t\tsuper(Component, slots, shadow_root_init);\n\t\t\tthis.$$p_d = props_definition;\n\t\t}\n\t\tstatic get observedAttributes() {\n\t\t\treturn object_keys(props_definition).map((key) =>\n\t\t\t\t(props_definition[key].attribute || key).toLowerCase()\n\t\t\t);\n\t\t}\n\t};\n\tobject_keys(props_definition).forEach((prop) => {\n\t\tdefine_property(Class.prototype, prop, {\n\t\t\tget() {\n\t\t\t\treturn this.$$c && prop in this.$$c ? this.$$c[prop] : this.$$d[prop];\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\tvalue = get_custom_element_value(prop, value, props_definition);\n\t\t\t\tthis.$$d[prop] = value;\n\t\t\t\tvar component = this.$$c;\n\n\t\t\t\tif (component) {\n\t\t\t\t\t// // If the instance has an accessor, use that instead\n\t\t\t\t\tvar setter = get_descriptor(component, prop)?.get;\n\n\t\t\t\t\tif (setter) {\n\t\t\t\t\t\tcomponent[prop] = value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcomponent.$set({ [prop]: value });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n\texports.forEach((property) => {\n\t\tdefine_property(Class.prototype, property, {\n\t\t\tget() {\n\t\t\t\treturn this.$$c?.[property];\n\t\t\t}\n\t\t});\n\t});\n\tif (extend) {\n\t\t// @ts-expect-error - assigning here is fine\n\t\tClass = extend(Class);\n\t}\n\tComponent.element = /** @type {any} */ Class;\n\treturn Class;\n}\n","import { STATE_SYMBOL } from '#client/constants';\nimport { snapshot } from '../../shared/clone.js';\nimport * as w from '../warnings.js';\nimport { untrack } from '../runtime.js';\n\n/**\n * @param {string} method\n * @param  {...any} objects\n */\nexport function log_if_contains_state(method, ...objects) {\n\tuntrack(() => {\n\t\ttry {\n\t\t\tlet has_state = false;\n\t\t\tconst transformed = [];\n\n\t\t\tfor (const obj of objects) {\n\t\t\t\tif (obj && typeof obj === 'object' && STATE_SYMBOL in obj) {\n\t\t\t\t\ttransformed.push(snapshot(obj, true));\n\t\t\t\t\thas_state = true;\n\t\t\t\t} else {\n\t\t\t\t\ttransformed.push(obj);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (has_state) {\n\t\t\t\tw.console_log_state(method);\n\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.log('%c[snapshot]', 'color: grey', ...transformed);\n\t\t\t}\n\t\t} catch {\n\t\t\t// Errors can occur when trying to snapshot objects with getters that throw or non-enumerable properties.\n\t\t}\n\t});\n\n\treturn objects;\n}\n","export { createAttachmentKey as attachment } from '../../attachments/index.js';\nexport { FILENAME, HMR, NAMESPACE_SVG } from '../../constants.js';\nexport { push, pop, add_svelte_meta } from './context.js';\nexport { assign, assign_async } from './dev/assign.js';\nexport { cleanup_styles } from './dev/css.js';\nexport { add_locations } from './dev/elements.js';\nexport { hmr } from './dev/hmr.js';\nexport { create_ownership_validator } from './dev/ownership.js';\nexport { check_target, legacy_api } from './dev/legacy.js';\nexport { trace, tag, tag_proxy } from './dev/tracing.js';\nexport { inspect } from './dev/inspect.js';\nexport { async } from './dom/blocks/async.js';\nexport { validate_snippet_args } from './dev/validation.js';\nexport { await_block as await } from './dom/blocks/await.js';\nexport { if_block as if } from './dom/blocks/if.js';\nexport { key } from './dom/blocks/key.js';\nexport { css_props } from './dom/blocks/css-props.js';\nexport { index, each } from './dom/blocks/each.js';\nexport { html } from './dom/blocks/html.js';\nexport { sanitize_slots, slot } from './dom/blocks/slot.js';\nexport { snippet, wrap_snippet } from './dom/blocks/snippet.js';\nexport { component } from './dom/blocks/svelte-component.js';\nexport { element } from './dom/blocks/svelte-element.js';\nexport { head } from './dom/blocks/svelte-head.js';\nexport { append_styles } from './dom/css.js';\nexport { action } from './dom/elements/actions.js';\nexport { attach } from './dom/elements/attachments.js';\nexport {\n\tremove_input_defaults,\n\tset_attribute,\n\tattribute_effect,\n\tset_custom_element_data,\n\tset_xlink_attribute,\n\tset_value,\n\tset_checked,\n\tset_selected,\n\tset_default_checked,\n\tset_default_value,\n\tCLASS,\n\tSTYLE\n} from './dom/elements/attributes.js';\nexport { set_class } from './dom/elements/class.js';\nexport { apply, event, delegated, delegate, replay_events } from './dom/elements/events.js';\nexport { autofocus, remove_textarea_child } from './dom/elements/misc.js';\nexport { customizable_select, selectedcontent } from './dom/elements/customizable-select.js';\nexport { set_style } from './dom/elements/style.js';\nexport { animation, transition } from './dom/elements/transitions.js';\nexport { bind_active_element } from './dom/elements/bindings/document.js';\nexport { bind_checked, bind_files, bind_group, bind_value } from './dom/elements/bindings/input.js';\nexport {\n\tbind_buffered,\n\tbind_current_time,\n\tbind_ended,\n\tbind_muted,\n\tbind_paused,\n\tbind_playback_rate,\n\tbind_played,\n\tbind_ready_state,\n\tbind_seekable,\n\tbind_seeking,\n\tbind_volume\n} from './dom/elements/bindings/media.js';\nexport { bind_online } from './dom/elements/bindings/navigator.js';\nexport { bind_prop } from './dom/elements/bindings/props.js';\nexport { bind_select_value, init_select, select_option } from './dom/elements/bindings/select.js';\nexport { bind_element_size, bind_resize_observer } from './dom/elements/bindings/size.js';\nexport { bind_this } from './dom/elements/bindings/this.js';\nexport {\n\tbind_content_editable,\n\tbind_property,\n\tbind_focused\n} from './dom/elements/bindings/universal.js';\nexport { bind_window_scroll, bind_window_size } from './dom/elements/bindings/window.js';\nexport { hydrate_template, next, reset } from './dom/hydration.js';\nexport {\n\tonce,\n\tpreventDefault,\n\tself,\n\tstopImmediatePropagation,\n\tstopPropagation,\n\ttrusted\n} from './dom/legacy/event-modifiers.js';\nexport { init } from './dom/legacy/lifecycle.js';\nexport {\n\tadd_legacy_event_listener,\n\tbubble_event,\n\treactive_import,\n\tupdate_legacy_props\n} from './dom/legacy/misc.js';\nexport {\n\tappend,\n\tcomment,\n\tfrom_html,\n\tfrom_mathml,\n\tfrom_svg,\n\tfrom_tree,\n\ttext,\n\tprops_id,\n\twith_script\n} from './dom/template.js';\nexport {\n\tfor_await_track_reactivity_loss,\n\trun,\n\tsave,\n\ttrack_reactivity_loss,\n\trun_after_blockers,\n\twait\n} from './reactivity/async.js';\nexport { eager, flushSync as flush } from './reactivity/batch.js';\nexport {\n\tasync_derived,\n\tuser_derived as derived,\n\tderived_safe_equal\n} from './reactivity/deriveds.js';\nexport {\n\taborted,\n\teffect_tracking,\n\teffect_root,\n\tlegacy_pre_effect,\n\tlegacy_pre_effect_reset,\n\trender_effect,\n\ttemplate_effect,\n\tdeferred_template_effect,\n\teffect,\n\tuser_effect,\n\tuser_pre_effect\n} from './reactivity/effects.js';\nexport { mutable_source, mutate, set, state, update, update_pre } from './reactivity/sources.js';\nexport {\n\tprop,\n\trest_props,\n\tlegacy_rest_props,\n\tspread_props,\n\tupdate_pre_prop,\n\tupdate_prop\n} from './reactivity/props.js';\nexport {\n\tinvalidate_store,\n\tstore_mutate,\n\tsetup_stores,\n\tstore_get,\n\tstore_set,\n\tstore_unsub,\n\tupdate_pre_store,\n\tupdate_store,\n\tmark_store_binding\n} from './reactivity/store.js';\nexport { boundary, pending } from './dom/blocks/boundary.js';\nexport { invalidate_inner_signals } from './legacy.js';\nexport { set_text } from './render.js';\nexport {\n\tget,\n\tsafe_get,\n\ttick,\n\tuntrack,\n\tdeep_read,\n\tdeep_read_state,\n\tactive_effect\n} from './runtime.js';\nexport { validate_binding } from './validate.js';\nexport { raf } from './timing.js';\nexport { proxy } from './proxy.js';\nexport { create_custom_element } from './dom/elements/custom-element.js';\nexport {\n\tchild,\n\tfirst_child,\n\tsibling,\n\t$window as window,\n\t$document as document\n} from './dom/operations.js';\nexport { attr, clsx } from '../shared/attributes.js';\nexport { snapshot } from '../shared/clone.js';\nexport { noop, fallback, to_array, exclude_from_object } from '../shared/utils.js';\nexport {\n\tinvalid_default_snippet,\n\tvalidate_dynamic_element_tag,\n\tvalidate_store,\n\tvalidate_void_dynamic_element,\n\tprevent_snippet_stringification\n} from '../shared/validate.js';\nexport { strict_equals, equals } from './dev/equality.js';\nexport { log_if_contains_state } from './dev/console-log.js';\n","import { async_mode_flag } from '../flags/index.js';\nimport { hydrating } from './dom/hydration.js';\nimport * as w from './warnings.js';\nimport * as e from './errors.js';\nimport { DEV } from 'esm-env';\n\n/**\n * @template T\n * @param {string} key\n * @param {() => T} fn\n * @returns {T}\n */\nexport function hydratable(key, fn) {\n\tif (!async_mode_flag) {\n\t\te.experimental_async_required('hydratable');\n\t}\n\n\tif (hydrating) {\n\t\tconst store = window.__svelte?.h;\n\n\t\tif (store?.has(key)) {\n\t\t\treturn /** @type {T} */ (store.get(key));\n\t\t}\n\n\t\tif (DEV) {\n\t\t\te.hydratable_missing_but_required(key);\n\t\t} else {\n\t\t\tw.hydratable_missing_but_expected(key);\n\t\t}\n\t}\n\n\treturn fn();\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, fork } from './internal/client/reactivity/batch.js';\nexport {\n\tcreateContext,\n\tgetContext,\n\tgetAllContexts,\n\thasContext,\n\tsetContext\n} from './internal/client/context.js';\nexport { hydratable } from './internal/client/hydratable.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","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 * @license\n * MIT License\n * \n * Copyright (c) 2014-present, Lee Byron and other contributors.\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 all\n * 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 THE\n * SOFTWARE.\n */\nvar IS_INDEXED_SYMBOL = '@@__IMMUTABLE_INDEXED__@@';\n/**\n * True if `maybeIndexed` is a Collection.Indexed, or any of its subclasses.\n *\n * ```js\n * import { isIndexed, Map, List, Stack, Set } from 'immutable';\n *\n * isIndexed([]); // false\n * isIndexed({}); // false\n * isIndexed(Map()); // false\n * isIndexed(List()); // true\n * isIndexed(Stack()); // true\n * isIndexed(Set()); // false\n * ```\n */\nfunction isIndexed(maybeIndexed) {\n    return Boolean(maybeIndexed &&\n        // @ts-expect-error: maybeIndexed is typed as `{}`, need to change in 6.0 to `maybeIndexed && typeof maybeIndexed === 'object' && IS_INDEXED_SYMBOL in maybeIndexed`\n        maybeIndexed[IS_INDEXED_SYMBOL]);\n}\n\nvar IS_KEYED_SYMBOL = '@@__IMMUTABLE_KEYED__@@';\n/**\n * True if `maybeKeyed` is a Collection.Keyed, or any of its subclasses.\n *\n * ```js\n * import { isKeyed, Map, List, Stack } from 'immutable';\n *\n * isKeyed([]); // false\n * isKeyed({}); // false\n * isKeyed(Map()); // true\n * isKeyed(List()); // false\n * isKeyed(Stack()); // false\n * ```\n */\nfunction isKeyed(maybeKeyed) {\n    return Boolean(maybeKeyed &&\n        // @ts-expect-error: maybeKeyed is typed as `{}`, need to change in 6.0 to `maybeKeyed && typeof maybeKeyed === 'object' && IS_KEYED_SYMBOL in maybeKeyed`\n        maybeKeyed[IS_KEYED_SYMBOL]);\n}\n\n/**\n * True if `maybeAssociative` is either a Keyed or Indexed Collection.\n *\n * ```js\n * import { isAssociative, Map, List, Stack, Set } from 'immutable';\n *\n * isAssociative([]); // false\n * isAssociative({}); // false\n * isAssociative(Map()); // true\n * isAssociative(List()); // true\n * isAssociative(Stack()); // true\n * isAssociative(Set()); // false\n * ```\n */\nfunction isAssociative(maybeAssociative) {\n    return isKeyed(maybeAssociative) || isIndexed(maybeAssociative);\n}\n\n// Note: value is unchanged to not break immutable-devtools.\nvar IS_COLLECTION_SYMBOL = '@@__IMMUTABLE_ITERABLE__@@';\n/**\n * True if `maybeCollection` is a Collection, or any of its subclasses.\n *\n * ```js\n * import { isCollection, Map, List, Stack } from 'immutable';\n *\n * isCollection([]); // false\n * isCollection({}); // false\n * isCollection(Map()); // true\n * isCollection(List()); // true\n * isCollection(Stack()); // true\n * ```\n */\nfunction isCollection(maybeCollection) {\n    return Boolean(maybeCollection &&\n        // @ts-expect-error: maybeCollection is typed as `{}`, need to change in 6.0 to `maybeCollection && typeof maybeCollection === 'object' && IS_COLLECTION_SYMBOL in maybeCollection`\n        maybeCollection[IS_COLLECTION_SYMBOL]);\n}\n\nvar Collection = function Collection(value) {\n  // eslint-disable-next-line no-constructor-return\n  return isCollection(value) ? value : Seq(value);\n};\n\nvar KeyedCollection = /*@__PURE__*/(function (Collection) {\n  function KeyedCollection(value) {\n    // eslint-disable-next-line no-constructor-return\n    return isKeyed(value) ? value : KeyedSeq(value);\n  }\n\n  if ( Collection ) KeyedCollection.__proto__ = Collection;\n  KeyedCollection.prototype = Object.create( Collection && Collection.prototype );\n  KeyedCollection.prototype.constructor = KeyedCollection;\n\n  return KeyedCollection;\n}(Collection));\n\nvar IndexedCollection = /*@__PURE__*/(function (Collection) {\n  function IndexedCollection(value) {\n    // eslint-disable-next-line no-constructor-return\n    return isIndexed(value) ? value : IndexedSeq(value);\n  }\n\n  if ( Collection ) IndexedCollection.__proto__ = Collection;\n  IndexedCollection.prototype = Object.create( Collection && Collection.prototype );\n  IndexedCollection.prototype.constructor = IndexedCollection;\n\n  return IndexedCollection;\n}(Collection));\n\nvar SetCollection = /*@__PURE__*/(function (Collection) {\n  function SetCollection(value) {\n    // eslint-disable-next-line no-constructor-return\n    return isCollection(value) && !isAssociative(value) ? value : SetSeq(value);\n  }\n\n  if ( Collection ) SetCollection.__proto__ = Collection;\n  SetCollection.prototype = Object.create( Collection && Collection.prototype );\n  SetCollection.prototype.constructor = SetCollection;\n\n  return SetCollection;\n}(Collection));\n\nCollection.Keyed = KeyedCollection;\nCollection.Indexed = IndexedCollection;\nCollection.Set = SetCollection;\n\nvar ITERATE_KEYS = 0;\nvar ITERATE_VALUES = 1;\nvar ITERATE_ENTRIES = 2;\n// TODO Symbol is widely available in modern JavaScript environments, clean this\nvar REAL_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nvar ITERATOR_SYMBOL = REAL_ITERATOR_SYMBOL || FAUX_ITERATOR_SYMBOL;\n// @ts-expect-error: properties are not supported in buble\nvar Iterator = function Iterator(next) {\n    // @ts-expect-error: properties are not supported in buble\n    this.next = next;\n};\nIterator.prototype.toString = function toString () {\n    return '[Iterator]';\n};\n// @ts-expect-error: static properties are not supported in buble\nIterator.KEYS = ITERATE_KEYS;\n// @ts-expect-error: static properties are not supported in buble\nIterator.VALUES = ITERATE_VALUES;\n// @ts-expect-error: static properties are not supported in buble\nIterator.ENTRIES = ITERATE_ENTRIES;\n// @ts-expect-error: properties are not supported in buble\nIterator.prototype.inspect = Iterator.prototype.toSource = function () {\n    return this.toString();\n};\n// @ts-expect-error don't know how to type this\nIterator.prototype[ITERATOR_SYMBOL] = function () {\n    return this;\n};\nfunction iteratorValue(type, k, v, iteratorResult) {\n    var value = type === ITERATE_KEYS ? k : type === ITERATE_VALUES ? v : [k, v];\n    // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here\n    iteratorResult\n        ? (iteratorResult.value = value)\n        : (iteratorResult = {\n            // @ts-expect-error ensure value is not undefined\n            value: value,\n            done: false,\n        });\n    return iteratorResult;\n}\nfunction iteratorDone() {\n    return { value: undefined, done: true };\n}\nfunction hasIterator(maybeIterable) {\n    if (Array.isArray(maybeIterable)) {\n        // IE11 trick as it does not support `Symbol.iterator`\n        return true;\n    }\n    return !!getIteratorFn(maybeIterable);\n}\nfunction isIterator(maybeIterator) {\n    return !!(maybeIterator &&\n        // @ts-expect-error: maybeIterator is typed as `{}`\n        typeof maybeIterator.next === 'function');\n}\nfunction getIterator(iterable) {\n    var iteratorFn = getIteratorFn(iterable);\n    return iteratorFn && iteratorFn.call(iterable);\n}\nfunction getIteratorFn(iterable) {\n    var iteratorFn = iterable &&\n        // @ts-expect-error: maybeIterator is typed as `{}`\n        ((REAL_ITERATOR_SYMBOL && iterable[REAL_ITERATOR_SYMBOL]) ||\n            // @ts-expect-error: maybeIterator is typed as `{}`\n            iterable[FAUX_ITERATOR_SYMBOL]);\n    if (typeof iteratorFn === 'function') {\n        return iteratorFn;\n    }\n}\nfunction isEntriesIterable(maybeIterable) {\n    var iteratorFn = getIteratorFn(maybeIterable);\n    // @ts-expect-error: maybeIterator is typed as `{}`\n    return iteratorFn && iteratorFn === maybeIterable.entries;\n}\nfunction isKeysIterable(maybeIterable) {\n    var iteratorFn = getIteratorFn(maybeIterable);\n    // @ts-expect-error: maybeIterator is typed as `{}`\n    return iteratorFn && iteratorFn === maybeIterable.keys;\n}\n\n// Used for setting prototype methods that IE8 chokes on.\nvar DELETE = 'delete';\n// Constants describing the size of trie nodes.\nvar SHIFT = 5; // Resulted in best performance after ______?\nvar SIZE = 1 << SHIFT;\nvar MASK = SIZE - 1;\n// A consistent shared value representing \"not set\" which equals nothing other\n// than itself, and nothing that could be provided externally.\nvar NOT_SET = {};\n// Boolean references, Rough equivalent of `bool &`.\nfunction MakeRef() {\n    return { value: false };\n}\nfunction SetRef(ref) {\n    if (ref) {\n        ref.value = true;\n    }\n}\n// A function which returns a value representing an \"owner\" for transient writes\n// to tries. The return value will only ever equal itself, and will not equal\n// the return of any subsequent call of this function.\nfunction OwnerID() { }\nfunction ensureSize(iter) {\n    // @ts-expect-error size should exists on Collection\n    if (iter.size === undefined) {\n        // @ts-expect-error size should exists on Collection, __iterate does exist on Collection\n        iter.size = iter.__iterate(returnTrue);\n    }\n    // @ts-expect-error size should exists on Collection\n    return iter.size;\n}\nfunction wrapIndex(iter, index) {\n    // This implements \"is array index\" which the ECMAString spec defines as:\n    //\n    //     A String property name P is an array index if and only if\n    //     ToString(ToUint32(P)) is equal to P and ToUint32(P) is not equal\n    //     to 2^32−1.\n    //\n    // http://www.ecma-international.org/ecma-262/6.0/#sec-array-exotic-objects\n    if (typeof index !== 'number') {\n        var uint32Index = index >>> 0; // N >>> 0 is shorthand for ToUint32\n        if ('' + uint32Index !== index || uint32Index === 4294967295) {\n            return NaN;\n        }\n        index = uint32Index;\n    }\n    return index < 0 ? ensureSize(iter) + index : index;\n}\nfunction returnTrue() {\n    return true;\n}\nfunction wholeSlice(begin, end, size) {\n    return (((begin === 0 && !isNeg(begin)) ||\n        (size !== undefined && begin <= -size)) &&\n        (end === undefined || (size !== undefined && end >= size)));\n}\nfunction resolveBegin(begin, size) {\n    return resolveIndex(begin, size, 0);\n}\nfunction resolveEnd(end, size) {\n    return resolveIndex(end, size, size);\n}\nfunction resolveIndex(index, size, defaultIndex) {\n    // Sanitize indices using this shorthand for ToInt32(argument)\n    // http://www.ecma-international.org/ecma-262/6.0/#sec-toint32\n    return index === undefined\n        ? defaultIndex\n        : isNeg(index)\n            ? size === Infinity\n                ? size\n                : Math.max(0, size + index) | 0\n            : size === undefined || size === index\n                ? index\n                : Math.min(size, index) | 0;\n}\nfunction isNeg(value) {\n    // Account for -0 which is negative, but not less than 0.\n    return value < 0 || (value === 0 && 1 / value === -Infinity);\n}\n\nvar IS_RECORD_SYMBOL = '@@__IMMUTABLE_RECORD__@@';\n/**\n * True if `maybeRecord` is a Record.\n */\nfunction isRecord(maybeRecord) {\n    return Boolean(maybeRecord &&\n        // @ts-expect-error: maybeRecord is typed as `{}`, need to change in 6.0 to `maybeRecord && typeof maybeRecord === 'object' && IS_RECORD_SYMBOL in maybeRecord`\n        maybeRecord[IS_RECORD_SYMBOL]);\n}\n\n/**\n * True if `maybeImmutable` is an Immutable Collection or Record.\n *\n * Note: Still returns true even if the collections is within a `withMutations()`.\n *\n * ```js\n * import { isImmutable, Map, List, Stack } from 'immutable';\n * isImmutable([]); // false\n * isImmutable({}); // false\n * isImmutable(Map()); // true\n * isImmutable(List()); // true\n * isImmutable(Stack()); // true\n * isImmutable(Map().asMutable()); // true\n * ```\n */\nfunction isImmutable(maybeImmutable) {\n    return isCollection(maybeImmutable) || isRecord(maybeImmutable);\n}\n\nvar IS_ORDERED_SYMBOL = '@@__IMMUTABLE_ORDERED__@@';\nfunction isOrdered(maybeOrdered) {\n    return Boolean(maybeOrdered &&\n        // @ts-expect-error: maybeOrdered is typed as `{}`, need to change in 6.0 to `maybeOrdered && typeof maybeOrdered === 'object' && IS_ORDERED_SYMBOL in maybeOrdered`\n        maybeOrdered[IS_ORDERED_SYMBOL]);\n}\n\nvar IS_SEQ_SYMBOL = '@@__IMMUTABLE_SEQ__@@';\n/**\n * True if `maybeSeq` is a Seq.\n */\nfunction isSeq(maybeSeq) {\n    return Boolean(maybeSeq &&\n        // @ts-expect-error: maybeSeq is typed as `{}`, need to change in 6.0 to `maybeSeq && typeof maybeSeq === 'object' && MAYBE_SEQ_SYMBOL in maybeSeq`\n        maybeSeq[IS_SEQ_SYMBOL]);\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction isArrayLike(value) {\n    if (Array.isArray(value) || typeof value === 'string') {\n        return true;\n    }\n    // @ts-expect-error \"Type 'unknown' is not assignable to type 'boolean'\" : convert to Boolean\n    return (value &&\n        typeof value === 'object' &&\n        // @ts-expect-error check that `'length' in value &&`\n        Number.isInteger(value.length) &&\n        // @ts-expect-error check that `'length' in value &&`\n        value.length >= 0 &&\n        // @ts-expect-error check that `'length' in value &&`\n        (value.length === 0\n            ? // Only {length: 0} is considered Array-like.\n                Object.keys(value).length === 1\n            : // An object is only Array-like if it has a property where the last value\n                // in the array-like may be found (which could be undefined).\n                // @ts-expect-error check that `'length' in value &&`\n                value.hasOwnProperty(value.length - 1)));\n}\n\nvar Seq = /*@__PURE__*/(function (Collection) {\n  function Seq(value) {\n    // eslint-disable-next-line no-constructor-return\n    return value === undefined || value === null\n      ? emptySequence()\n      : isImmutable(value)\n        ? value.toSeq()\n        : seqFromValue(value);\n  }\n\n  if ( Collection ) Seq.__proto__ = Collection;\n  Seq.prototype = Object.create( Collection && Collection.prototype );\n  Seq.prototype.constructor = Seq;\n\n  Seq.prototype.toSeq = function toSeq () {\n    return this;\n  };\n\n  Seq.prototype.toString = function toString () {\n    return this.__toString('Seq {', '}');\n  };\n\n  Seq.prototype.cacheResult = function cacheResult () {\n    if (!this._cache && this.__iterateUncached) {\n      this._cache = this.entrySeq().toArray();\n      this.size = this._cache.length;\n    }\n    return this;\n  };\n\n  // abstract __iterateUncached(fn, reverse)\n\n  Seq.prototype.__iterate = function __iterate (fn, reverse) {\n    var cache = this._cache;\n    if (cache) {\n      var size = cache.length;\n      var i = 0;\n      while (i !== size) {\n        var entry = cache[reverse ? size - ++i : i++];\n        if (fn(entry[1], entry[0], this) === false) {\n          break;\n        }\n      }\n      return i;\n    }\n    return this.__iterateUncached(fn, reverse);\n  };\n\n  // abstract __iteratorUncached(type, reverse)\n\n  Seq.prototype.__iterator = function __iterator (type, reverse) {\n    var cache = this._cache;\n    if (cache) {\n      var size = cache.length;\n      var i = 0;\n      return new Iterator(function () {\n        if (i === size) {\n          return iteratorDone();\n        }\n        var entry = cache[reverse ? size - ++i : i++];\n        return iteratorValue(type, entry[0], entry[1]);\n      });\n    }\n    return this.__iteratorUncached(type, reverse);\n  };\n\n  return Seq;\n}(Collection));\n\nvar KeyedSeq = /*@__PURE__*/(function (Seq) {\n  function KeyedSeq(value) {\n    // eslint-disable-next-line no-constructor-return\n    return value === undefined || value === null\n      ? emptySequence().toKeyedSeq()\n      : isCollection(value)\n        ? isKeyed(value)\n          ? value.toSeq()\n          : value.fromEntrySeq()\n        : isRecord(value)\n          ? value.toSeq()\n          : keyedSeqFromValue(value);\n  }\n\n  if ( Seq ) KeyedSeq.__proto__ = Seq;\n  KeyedSeq.prototype = Object.create( Seq && Seq.prototype );\n  KeyedSeq.prototype.constructor = KeyedSeq;\n\n  KeyedSeq.prototype.toKeyedSeq = function toKeyedSeq () {\n    return this;\n  };\n\n  return KeyedSeq;\n}(Seq));\n\nvar IndexedSeq = /*@__PURE__*/(function (Seq) {\n  function IndexedSeq(value) {\n    // eslint-disable-next-line no-constructor-return\n    return value === undefined || value === null\n      ? emptySequence()\n      : isCollection(value)\n        ? isKeyed(value)\n          ? value.entrySeq()\n          : value.toIndexedSeq()\n        : isRecord(value)\n          ? value.toSeq().entrySeq()\n          : indexedSeqFromValue(value);\n  }\n\n  if ( Seq ) IndexedSeq.__proto__ = Seq;\n  IndexedSeq.prototype = Object.create( Seq && Seq.prototype );\n  IndexedSeq.prototype.constructor = IndexedSeq;\n\n  IndexedSeq.of = function of (/*...values*/) {\n    return IndexedSeq(arguments);\n  };\n\n  IndexedSeq.prototype.toIndexedSeq = function toIndexedSeq () {\n    return this;\n  };\n\n  IndexedSeq.prototype.toString = function toString () {\n    return this.__toString('Seq [', ']');\n  };\n\n  return IndexedSeq;\n}(Seq));\n\nvar SetSeq = /*@__PURE__*/(function (Seq) {\n  function SetSeq(value) {\n    // eslint-disable-next-line no-constructor-return\n    return (\n      isCollection(value) && !isAssociative(value) ? value : IndexedSeq(value)\n    ).toSetSeq();\n  }\n\n  if ( Seq ) SetSeq.__proto__ = Seq;\n  SetSeq.prototype = Object.create( Seq && Seq.prototype );\n  SetSeq.prototype.constructor = SetSeq;\n\n  SetSeq.of = function of (/*...values*/) {\n    return SetSeq(arguments);\n  };\n\n  SetSeq.prototype.toSetSeq = function toSetSeq () {\n    return this;\n  };\n\n  return SetSeq;\n}(Seq));\n\nSeq.isSeq = isSeq;\nSeq.Keyed = KeyedSeq;\nSeq.Set = SetSeq;\nSeq.Indexed = IndexedSeq;\n\nSeq.prototype[IS_SEQ_SYMBOL] = true;\n\n// #pragma Root Sequences\n\nvar ArraySeq = /*@__PURE__*/(function (IndexedSeq) {\n  function ArraySeq(array) {\n    this._array = array;\n    this.size = array.length;\n  }\n\n  if ( IndexedSeq ) ArraySeq.__proto__ = IndexedSeq;\n  ArraySeq.prototype = Object.create( IndexedSeq && IndexedSeq.prototype );\n  ArraySeq.prototype.constructor = ArraySeq;\n\n  ArraySeq.prototype.get = function get (index, notSetValue) {\n    return this.has(index) ? this._array[wrapIndex(this, index)] : notSetValue;\n  };\n\n  ArraySeq.prototype.__iterate = function __iterate (fn, reverse) {\n    var array = this._array;\n    var size = array.length;\n    var i = 0;\n    while (i !== size) {\n      var ii = reverse ? size - ++i : i++;\n      if (fn(array[ii], ii, this) === false) {\n        break;\n      }\n    }\n    return i;\n  };\n\n  ArraySeq.prototype.__iterator = function __iterator (type, reverse) {\n    var array = this._array;\n    var size = array.length;\n    var i = 0;\n    return new Iterator(function () {\n      if (i === size) {\n        return iteratorDone();\n      }\n      var ii = reverse ? size - ++i : i++;\n      return iteratorValue(type, ii, array[ii]);\n    });\n  };\n\n  return ArraySeq;\n}(IndexedSeq));\n\nvar ObjectSeq = /*@__PURE__*/(function (KeyedSeq) {\n  function ObjectSeq(object) {\n    var keys = Object.keys(object).concat(\n      Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols(object) : []\n    );\n    this._object = object;\n    this._keys = keys;\n    this.size = keys.length;\n  }\n\n  if ( KeyedSeq ) ObjectSeq.__proto__ = KeyedSeq;\n  ObjectSeq.prototype = Object.create( KeyedSeq && KeyedSeq.prototype );\n  ObjectSeq.prototype.constructor = ObjectSeq;\n\n  ObjectSeq.prototype.get = function get (key, notSetValue) {\n    if (notSetValue !== undefined && !this.has(key)) {\n      return notSetValue;\n    }\n    return this._object[key];\n  };\n\n  ObjectSeq.prototype.has = function has (key) {\n    return hasOwnProperty.call(this._object, key);\n  };\n\n  ObjectSeq.prototype.__iterate = function __iterate (fn, reverse) {\n    var object = this._object;\n    var keys = this._keys;\n    var size = keys.length;\n    var i = 0;\n    while (i !== size) {\n      var key = keys[reverse ? size - ++i : i++];\n      if (fn(object[key], key, this) === false) {\n        break;\n      }\n    }\n    return i;\n  };\n\n  ObjectSeq.prototype.__iterator = function __iterator (type, reverse) {\n    var object = this._object;\n    var keys = this._keys;\n    var size = keys.length;\n    var i = 0;\n    return new Iterator(function () {\n      if (i === size) {\n        return iteratorDone();\n      }\n      var key = keys[reverse ? size - ++i : i++];\n      return iteratorValue(type, key, object[key]);\n    });\n  };\n\n  return ObjectSeq;\n}(KeyedSeq));\nObjectSeq.prototype[IS_ORDERED_SYMBOL] = true;\n\nvar CollectionSeq = /*@__PURE__*/(function (IndexedSeq) {\n  function CollectionSeq(collection) {\n    this._collection = collection;\n    this.size = collection.length || collection.size;\n  }\n\n  if ( IndexedSeq ) CollectionSeq.__proto__ = IndexedSeq;\n  CollectionSeq.prototype = Object.create( IndexedSeq && IndexedSeq.prototype );\n  CollectionSeq.prototype.constructor = CollectionSeq;\n\n  CollectionSeq.prototype.__iterateUncached = function __iterateUncached (fn, reverse) {\n    if (reverse) {\n      return this.cacheResult().__iterate(fn, reverse);\n    }\n    var collection = this._collection;\n    var iterator = getIterator(collection);\n    var iterations = 0;\n    if (isIterator(iterator)) {\n      var step;\n      while (!(step = iterator.next()).done) {\n        if (fn(step.value, iterations++, this) === false) {\n          break;\n        }\n      }\n    }\n    return iterations;\n  };\n\n  CollectionSeq.prototype.__iteratorUncached = function __iteratorUncached (type, reverse) {\n    if (reverse) {\n      return this.cacheResult().__iterator(type, reverse);\n    }\n    var collection = this._collection;\n    var iterator = getIterator(collection);\n    if (!isIterator(iterator)) {\n      return new Iterator(iteratorDone);\n    }\n    var iterations = 0;\n    return new Iterator(function () {\n      var step = iterator.next();\n      return step.done ? step : iteratorValue(type, iterations++, step.value);\n    });\n  };\n\n  return CollectionSeq;\n}(IndexedSeq));\n\n// # pragma Helper functions\n\nvar EMPTY_SEQ;\n\nfunction emptySequence() {\n  return EMPTY_SEQ || (EMPTY_SEQ = new ArraySeq([]));\n}\n\nfunction keyedSeqFromValue(value) {\n  var seq = maybeIndexedSeqFromValue(value);\n  if (seq) {\n    return seq.fromEntrySeq();\n  }\n  if (typeof value === 'object') {\n    return new ObjectSeq(value);\n  }\n  throw new TypeError(\n    'Expected Array or collection object of [k, v] entries, or keyed object: ' +\n      value\n  );\n}\n\nfunction indexedSeqFromValue(value) {\n  var seq = maybeIndexedSeqFromValue(value);\n  if (seq) {\n    return seq;\n  }\n  throw new TypeError(\n    'Expected Array or collection object of values: ' + value\n  );\n}\n\nfunction seqFromValue(value) {\n  var seq = maybeIndexedSeqFromValue(value);\n  if (seq) {\n    return isEntriesIterable(value)\n      ? seq.fromEntrySeq()\n      : isKeysIterable(value)\n        ? seq.toSetSeq()\n        : seq;\n  }\n  if (typeof value === 'object') {\n    return new ObjectSeq(value);\n  }\n  throw new TypeError(\n    'Expected Array or collection object of values, or keyed object: ' + value\n  );\n}\n\nfunction maybeIndexedSeqFromValue(value) {\n  return isArrayLike(value)\n    ? new ArraySeq(value)\n    : hasIterator(value)\n      ? new CollectionSeq(value)\n      : undefined;\n}\n\nfunction asImmutable() {\n  return this.__ensureOwner();\n}\n\nfunction asMutable() {\n  return this.__ownerID ? this : this.__ensureOwner(new OwnerID());\n}\n\n// TODO remove in v6 as Math.imul is widely available now: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul\nvar imul = typeof Math.imul === 'function' && Math.imul(0xffffffff, 2) === -2\n    ? Math.imul\n    : function imul(a, b) {\n        a |= 0; // int\n        b |= 0; // int\n        var c = a & 0xffff;\n        var d = b & 0xffff;\n        // Shift by 0 fixes the sign on the high part.\n        return (c * d + ((((a >>> 16) * d + c * (b >>> 16)) << 16) >>> 0)) | 0; // int\n    };\n// v8 has an optimization for storing 31-bit signed numbers.\n// Values which have either 00 or 11 as the high order bits qualify.\n// This function drops the highest order bit in a signed number, maintaining\n// the sign bit.\nfunction smi(i32) {\n    return ((i32 >>> 1) & 0x40000000) | (i32 & 0xbfffffff);\n}\n\nvar defaultValueOf = Object.prototype.valueOf;\nfunction hash(o) {\n    // eslint-disable-next-line eqeqeq\n    if (o == null) {\n        return hashNullish(o);\n    }\n    // @ts-expect-error don't care about object beeing typed as `{}` here\n    if (typeof o.hashCode === 'function') {\n        // Drop any high bits from accidentally long hash codes.\n        // @ts-expect-error don't care about object beeing typed as `{}` here\n        return smi(o.hashCode(o));\n    }\n    var v = valueOf(o);\n    // eslint-disable-next-line eqeqeq\n    if (v == null) {\n        return hashNullish(v);\n    }\n    switch (typeof v) {\n        case 'boolean':\n            // The hash values for built-in constants are a 1 value for each 5-byte\n            // shift region expect for the first, which encodes the value. This\n            // reduces the odds of a hash collision for these common values.\n            return v ? 0x42108421 : 0x42108420;\n        case 'number':\n            return hashNumber(v);\n        case 'string':\n            return v.length > STRING_HASH_CACHE_MIN_STRLEN\n                ? cachedHashString(v)\n                : hashString(v);\n        case 'object':\n        case 'function':\n            return hashJSObj(v);\n        case 'symbol':\n            return hashSymbol(v);\n        default:\n            if (typeof v.toString === 'function') {\n                return hashString(v.toString());\n            }\n            throw new Error('Value type ' + typeof v + ' cannot be hashed.');\n    }\n}\nfunction hashNullish(nullish) {\n    return nullish === null ? 0x42108422 : /* undefined */ 0x42108423;\n}\n// Compress arbitrarily large numbers into smi hashes.\nfunction hashNumber(n) {\n    if (n !== n || n === Infinity) {\n        return 0;\n    }\n    var hash = n | 0;\n    if (hash !== n) {\n        hash ^= n * 0xffffffff;\n    }\n    while (n > 0xffffffff) {\n        n /= 0xffffffff;\n        hash ^= n;\n    }\n    return smi(hash);\n}\nfunction cachedHashString(string) {\n    var hashed = stringHashCache[string];\n    if (hashed === undefined) {\n        hashed = hashString(string);\n        if (STRING_HASH_CACHE_SIZE === STRING_HASH_CACHE_MAX_SIZE) {\n            STRING_HASH_CACHE_SIZE = 0;\n            stringHashCache = {};\n        }\n        STRING_HASH_CACHE_SIZE++;\n        stringHashCache[string] = hashed;\n    }\n    return hashed;\n}\n// http://jsperf.com/hashing-strings\nfunction hashString(string) {\n    // This is the hash from JVM\n    // The hash code for a string is computed as\n    // s[0] * 31 ^ (n - 1) + s[1] * 31 ^ (n - 2) + ... + s[n - 1],\n    // where s[i] is the ith character of the string and n is the length of\n    // the string. We \"mod\" the result to make it between 0 (inclusive) and 2^31\n    // (exclusive) by dropping high bits.\n    var hashed = 0;\n    for (var ii = 0; ii < string.length; ii++) {\n        hashed = (31 * hashed + string.charCodeAt(ii)) | 0;\n    }\n    return smi(hashed);\n}\nfunction hashSymbol(sym) {\n    var hashed = symbolMap[sym];\n    if (hashed !== undefined) {\n        return hashed;\n    }\n    hashed = nextHash();\n    symbolMap[sym] = hashed;\n    return hashed;\n}\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nfunction hashJSObj(obj) {\n    var hashed;\n    if (usingWeakMap) {\n        // @ts-expect-error weakMap is defined\n        hashed = weakMap.get(obj);\n        if (hashed !== undefined) {\n            return hashed;\n        }\n    }\n    // @ts-expect-error used for old code, will be removed\n    hashed = obj[UID_HASH_KEY];\n    if (hashed !== undefined) {\n        return hashed;\n    }\n    if (!canDefineProperty) {\n        // @ts-expect-error used for old code, will be removed\n        hashed = obj.propertyIsEnumerable && obj.propertyIsEnumerable[UID_HASH_KEY];\n        if (hashed !== undefined) {\n            return hashed;\n        }\n        hashed = getIENodeHash(obj);\n        if (hashed !== undefined) {\n            return hashed;\n        }\n    }\n    hashed = nextHash();\n    if (usingWeakMap) {\n        // @ts-expect-error weakMap is defined\n        weakMap.set(obj, hashed);\n    }\n    else if (isExtensible !== undefined && isExtensible(obj) === false) {\n        throw new Error('Non-extensible objects are not allowed as keys.');\n    }\n    else if (canDefineProperty) {\n        Object.defineProperty(obj, UID_HASH_KEY, {\n            enumerable: false,\n            configurable: false,\n            writable: false,\n            value: hashed,\n        });\n    }\n    else if (obj.propertyIsEnumerable !== undefined &&\n        obj.propertyIsEnumerable === obj.constructor.prototype.propertyIsEnumerable) {\n        // Since we can't define a non-enumerable property on the object\n        // we'll hijack one of the less-used non-enumerable properties to\n        // save our hash on it. Since this is a function it will not show up in\n        // `JSON.stringify` which is what we want.\n        obj.propertyIsEnumerable = function () {\n            return this.constructor.prototype.propertyIsEnumerable.apply(this, \n            // eslint-disable-next-line prefer-rest-params\n            arguments);\n        };\n        // @ts-expect-error used for old code, will be removed\n        obj.propertyIsEnumerable[UID_HASH_KEY] = hashed;\n        // @ts-expect-error used for old code, will be removed\n    }\n    else if (obj.nodeType !== undefined) {\n        // At this point we couldn't get the IE `uniqueID` to use as a hash\n        // and we couldn't use a non-enumerable property to exploit the\n        // dontEnum bug so we simply add the `UID_HASH_KEY` on the node\n        // itself.\n        // @ts-expect-error used for old code, will be removed\n        obj[UID_HASH_KEY] = hashed;\n    }\n    else {\n        throw new Error('Unable to set a non-enumerable property on object.');\n    }\n    return hashed;\n}\n// Get references to ES5 object methods.\nvar isExtensible = Object.isExtensible;\n// True if Object.defineProperty works as expected. IE8 fails this test.\n// TODO remove this as widely available https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty\nvar canDefineProperty = (function () {\n    try {\n        Object.defineProperty({}, '@', {});\n        return true;\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    }\n    catch (e) {\n        return false;\n    }\n})();\n// IE has a `uniqueID` property on DOM nodes. We can construct the hash from it\n// and avoid memory leaks from the IE cloneNode bug.\n// TODO remove this method as only used if `canDefineProperty` is false\nfunction getIENodeHash(node) {\n    // @ts-expect-error don't care\n    if (node && node.nodeType > 0) {\n        // @ts-expect-error don't care\n        switch (node.nodeType) {\n            case 1: // Element\n                // @ts-expect-error don't care\n                return node.uniqueID;\n            case 9: // Document\n                // @ts-expect-error don't care\n                return node.documentElement && node.documentElement.uniqueID;\n        }\n    }\n}\nfunction valueOf(obj) {\n    return obj.valueOf !== defaultValueOf && typeof obj.valueOf === 'function'\n        ? // @ts-expect-error weird the \"obj\" parameter as `valueOf` should not have a parameter\n            obj.valueOf(obj)\n        : obj;\n}\nfunction nextHash() {\n    var nextHash = ++_objHashUID;\n    if (_objHashUID & 0x40000000) {\n        _objHashUID = 0;\n    }\n    return nextHash;\n}\n// If possible, use a WeakMap.\n// TODO using WeakMap should be true everywhere now that WeakMap is widely supported: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap\nvar usingWeakMap = typeof WeakMap === 'function';\nvar weakMap;\nif (usingWeakMap) {\n    weakMap = new WeakMap();\n}\nvar symbolMap = Object.create(null);\nvar _objHashUID = 0;\n// TODO remove string as Symbol is now widely supported: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol\nvar UID_HASH_KEY = '__immutablehash__';\nif (typeof Symbol === 'function') {\n    UID_HASH_KEY = Symbol(UID_HASH_KEY);\n}\nvar STRING_HASH_CACHE_MIN_STRLEN = 16;\nvar STRING_HASH_CACHE_MAX_SIZE = 255;\nvar STRING_HASH_CACHE_SIZE = 0;\nvar stringHashCache = {};\n\nvar ToKeyedSequence = /*@__PURE__*/(function (KeyedSeq) {\n  function ToKeyedSequence(indexed, useKeys) {\n    this._iter = indexed;\n    this._useKeys = useKeys;\n    this.size = indexed.size;\n  }\n\n  if ( KeyedSeq ) ToKeyedSequence.__proto__ = KeyedSeq;\n  ToKeyedSequence.prototype = Object.create( KeyedSeq && KeyedSeq.prototype );\n  ToKeyedSequence.prototype.constructor = ToKeyedSequence;\n\n  ToKeyedSequence.prototype.get = function get (key, notSetValue) {\n    return this._iter.get(key, notSetValue);\n  };\n\n  ToKeyedSequence.prototype.has = function has (key) {\n    return this._iter.has(key);\n  };\n\n  ToKeyedSequence.prototype.valueSeq = function valueSeq () {\n    return this._iter.valueSeq();\n  };\n\n  ToKeyedSequence.prototype.reverse = function reverse () {\n    var this$1$1 = this;\n\n    var reversedSequence = reverseFactory(this, true);\n    if (!this._useKeys) {\n      reversedSequence.valueSeq = function () { return this$1$1._iter.toSeq().reverse(); };\n    }\n    return reversedSequence;\n  };\n\n  ToKeyedSequence.prototype.map = function map (mapper, context) {\n    var this$1$1 = this;\n\n    var mappedSequence = mapFactory(this, mapper, context);\n    if (!this._useKeys) {\n      mappedSequence.valueSeq = function () { return this$1$1._iter.toSeq().map(mapper, context); };\n    }\n    return mappedSequence;\n  };\n\n  ToKeyedSequence.prototype.__iterate = function __iterate (fn, reverse) {\n    var this$1$1 = this;\n\n    return this._iter.__iterate(function (v, k) { return fn(v, k, this$1$1); }, reverse);\n  };\n\n  ToKeyedSequence.prototype.__iterator = function __iterator (type, reverse) {\n    return this._iter.__iterator(type, reverse);\n  };\n\n  return ToKeyedSequence;\n}(KeyedSeq));\nToKeyedSequence.prototype[IS_ORDERED_SYMBOL] = true;\n\nvar ToIndexedSequence = /*@__PURE__*/(function (IndexedSeq) {\n  function ToIndexedSequence(iter) {\n    this._iter = iter;\n    this.size = iter.size;\n  }\n\n  if ( IndexedSeq ) ToIndexedSequence.__proto__ = IndexedSeq;\n  ToIndexedSequence.prototype = Object.create( IndexedSeq && IndexedSeq.prototype );\n  ToIndexedSequence.prototype.constructor = ToIndexedSequence;\n\n  ToIndexedSequence.prototype.includes = function includes (value) {\n    return this._iter.includes(value);\n  };\n\n  ToIndexedSequence.prototype.__iterate = function __iterate (fn, reverse) {\n    var this$1$1 = this;\n\n    var i = 0;\n    // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here\n    reverse && ensureSize(this);\n    return this._iter.__iterate(\n      function (v) { return fn(v, reverse ? this$1$1.size - ++i : i++, this$1$1); },\n      reverse\n    );\n  };\n\n  ToIndexedSequence.prototype.__iterator = function __iterator (type, reverse) {\n    var this$1$1 = this;\n\n    var iterator = this._iter.__iterator(ITERATE_VALUES, reverse);\n    var i = 0;\n    // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here\n    reverse && ensureSize(this);\n    return new Iterator(function () {\n      var step = iterator.next();\n      return step.done\n        ? step\n        : iteratorValue(\n            type,\n            reverse ? this$1$1.size - ++i : i++,\n            step.value,\n            step\n          );\n    });\n  };\n\n  return ToIndexedSequence;\n}(IndexedSeq));\n\nvar ToSetSequence = /*@__PURE__*/(function (SetSeq) {\n  function ToSetSequence(iter) {\n    this._iter = iter;\n    this.size = iter.size;\n  }\n\n  if ( SetSeq ) ToSetSequence.__proto__ = SetSeq;\n  ToSetSequence.prototype = Object.create( SetSeq && SetSeq.prototype );\n  ToSetSequence.prototype.constructor = ToSetSequence;\n\n  ToSetSequence.prototype.has = function has (key) {\n    return this._iter.includes(key);\n  };\n\n  ToSetSequence.prototype.__iterate = function __iterate (fn, reverse) {\n    var this$1$1 = this;\n\n    return this._iter.__iterate(function (v) { return fn(v, v, this$1$1); }, reverse);\n  };\n\n  ToSetSequence.prototype.__iterator = function __iterator (type, reverse) {\n    var iterator = this._iter.__iterator(ITERATE_VALUES, reverse);\n    return new Iterator(function () {\n      var step = iterator.next();\n      return step.done\n        ? step\n        : iteratorValue(type, step.value, step.value, step);\n    });\n  };\n\n  return ToSetSequence;\n}(SetSeq));\n\nvar FromEntriesSequence = /*@__PURE__*/(function (KeyedSeq) {\n  function FromEntriesSequence(entries) {\n    this._iter = entries;\n    this.size = entries.size;\n  }\n\n  if ( KeyedSeq ) FromEntriesSequence.__proto__ = KeyedSeq;\n  FromEntriesSequence.prototype = Object.create( KeyedSeq && KeyedSeq.prototype );\n  FromEntriesSequence.prototype.constructor = FromEntriesSequence;\n\n  FromEntriesSequence.prototype.entrySeq = function entrySeq () {\n    return this._iter.toSeq();\n  };\n\n  FromEntriesSequence.prototype.__iterate = function __iterate (fn, reverse) {\n    var this$1$1 = this;\n\n    return this._iter.__iterate(function (entry) {\n      // Check if entry exists first so array access doesn't throw for holes\n      // in the parent iteration.\n      if (entry) {\n        validateEntry(entry);\n        var indexedCollection = isCollection(entry);\n        return fn(\n          indexedCollection ? entry.get(1) : entry[1],\n          indexedCollection ? entry.get(0) : entry[0],\n          this$1$1\n        );\n      }\n    }, reverse);\n  };\n\n  FromEntriesSequence.prototype.__iterator = function __iterator (type, reverse) {\n    var iterator = this._iter.__iterator(ITERATE_VALUES, reverse);\n    return new Iterator(function () {\n      while (true) {\n        var step = iterator.next();\n        if (step.done) {\n          return step;\n        }\n        var entry = step.value;\n        // Check if entry exists first so array access doesn't throw for holes\n        // in the parent iteration.\n        if (entry) {\n          validateEntry(entry);\n          var indexedCollection = isCollection(entry);\n          return iteratorValue(\n            type,\n            indexedCollection ? entry.get(0) : entry[0],\n            indexedCollection ? entry.get(1) : entry[1],\n            step\n          );\n        }\n      }\n    });\n  };\n\n  return FromEntriesSequence;\n}(KeyedSeq));\n\nToIndexedSequence.prototype.cacheResult =\n  ToKeyedSequence.prototype.cacheResult =\n  ToSetSequence.prototype.cacheResult =\n  FromEntriesSequence.prototype.cacheResult =\n    cacheResultThrough;\n\nfunction flipFactory(collection) {\n  var flipSequence = makeSequence(collection);\n  flipSequence._iter = collection;\n  flipSequence.size = collection.size;\n  flipSequence.flip = function () { return collection; };\n  flipSequence.reverse = function () {\n    var reversedSequence = collection.reverse.apply(this); // super.reverse()\n    reversedSequence.flip = function () { return collection.reverse(); };\n    return reversedSequence;\n  };\n  flipSequence.has = function (key) { return collection.includes(key); };\n  flipSequence.includes = function (key) { return collection.has(key); };\n  flipSequence.cacheResult = cacheResultThrough;\n  flipSequence.__iterateUncached = function (fn, reverse) {\n    var this$1$1 = this;\n\n    return collection.__iterate(function (v, k) { return fn(k, v, this$1$1) !== false; }, reverse);\n  };\n  flipSequence.__iteratorUncached = function (type, reverse) {\n    if (type === ITERATE_ENTRIES) {\n      var iterator = collection.__iterator(type, reverse);\n      return new Iterator(function () {\n        var step = iterator.next();\n        if (!step.done) {\n          var k = step.value[0];\n          step.value[0] = step.value[1];\n          step.value[1] = k;\n        }\n        return step;\n      });\n    }\n    return collection.__iterator(\n      type === ITERATE_VALUES ? ITERATE_KEYS : ITERATE_VALUES,\n      reverse\n    );\n  };\n  return flipSequence;\n}\n\nfunction mapFactory(collection, mapper, context) {\n  var mappedSequence = makeSequence(collection);\n  mappedSequence.size = collection.size;\n  mappedSequence.has = function (key) { return collection.has(key); };\n  mappedSequence.get = function (key, notSetValue) {\n    var v = collection.get(key, NOT_SET);\n    return v === NOT_SET\n      ? notSetValue\n      : mapper.call(context, v, key, collection);\n  };\n  mappedSequence.__iterateUncached = function (fn, reverse) {\n    var this$1$1 = this;\n\n    return collection.__iterate(\n      function (v, k, c) { return fn(mapper.call(context, v, k, c), k, this$1$1) !== false; },\n      reverse\n    );\n  };\n  mappedSequence.__iteratorUncached = function (type, reverse) {\n    var iterator = collection.__iterator(ITERATE_ENTRIES, reverse);\n    return new Iterator(function () {\n      var step = iterator.next();\n      if (step.done) {\n        return step;\n      }\n      var entry = step.value;\n      var key = entry[0];\n      return iteratorValue(\n        type,\n        key,\n        mapper.call(context, entry[1], key, collection),\n        step\n      );\n    });\n  };\n  return mappedSequence;\n}\n\nfunction reverseFactory(collection, useKeys) {\n  var reversedSequence = makeSequence(collection);\n  reversedSequence._iter = collection;\n  reversedSequence.size = collection.size;\n  reversedSequence.reverse = function () { return collection; };\n  if (collection.flip) {\n    reversedSequence.flip = function () {\n      var flipSequence = flipFactory(collection);\n      flipSequence.reverse = function () { return collection.flip(); };\n      return flipSequence;\n    };\n  }\n  reversedSequence.get = function (key, notSetValue) { return collection.get(useKeys ? key : -1 - key, notSetValue); };\n  reversedSequence.has = function (key) { return collection.has(useKeys ? key : -1 - key); };\n  reversedSequence.includes = function (value) { return collection.includes(value); };\n  reversedSequence.cacheResult = cacheResultThrough;\n  reversedSequence.__iterate = function (fn, reverse) {\n    var this$1$1 = this;\n\n    var i = 0;\n    // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here\n    reverse && ensureSize(collection);\n    return collection.__iterate(\n      function (v, k) { return fn(v, useKeys ? k : reverse ? this$1$1.size - ++i : i++, this$1$1); },\n      !reverse\n    );\n  };\n  reversedSequence.__iterator = function (type, reverse) {\n    var i = 0;\n    // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here\n    reverse && ensureSize(collection);\n    var iterator = collection.__iterator(ITERATE_ENTRIES, !reverse);\n    return new Iterator(function () {\n      var step = iterator.next();\n      if (step.done) {\n        return step;\n      }\n      var entry = step.value;\n      return iteratorValue(\n        type,\n        // `__iterator` is an arrow function, so `this` is not the reversed\n        // sequence here — read `reversedSequence.size` explicitly.\n        useKeys ? entry[0] : reverse ? reversedSequence.size - ++i : i++,\n        entry[1],\n        step\n      );\n    });\n  };\n  return reversedSequence;\n}\n\nfunction filterFactory(collection, predicate, context, useKeys) {\n  var filterSequence = makeSequence(collection);\n  if (useKeys) {\n    filterSequence.has = function (key) {\n      var v = collection.get(key, NOT_SET);\n      return v !== NOT_SET && !!predicate.call(context, v, key, collection);\n    };\n    filterSequence.get = function (key, notSetValue) {\n      var v = collection.get(key, NOT_SET);\n      return v !== NOT_SET && predicate.call(context, v, key, collection)\n        ? v\n        : notSetValue;\n    };\n  }\n  filterSequence.__iterateUncached = function (fn, reverse) {\n    var this$1$1 = this;\n\n    var iterations = 0;\n    collection.__iterate(function (v, k, c) {\n      if (predicate.call(context, v, k, c)) {\n        iterations++;\n        return fn(v, useKeys ? k : iterations - 1, this$1$1);\n      }\n    }, reverse);\n    return iterations;\n  };\n  filterSequence.__iteratorUncached = function (type, reverse) {\n    var iterator = collection.__iterator(ITERATE_ENTRIES, reverse);\n    var iterations = 0;\n    return new Iterator(function () {\n      while (true) {\n        var step = iterator.next();\n        if (step.done) {\n          return step;\n        }\n        var entry = step.value;\n        var key = entry[0];\n        var value = entry[1];\n        if (predicate.call(context, value, key, collection)) {\n          return iteratorValue(type, useKeys ? key : iterations++, value, step);\n        }\n      }\n    });\n  };\n  return filterSequence;\n}\n\nfunction countByFactory(collection, grouper, context) {\n  var groups = Map().asMutable();\n  collection.__iterate(function (v, k) {\n    groups.update(grouper.call(context, v, k, collection), 0, function (a) { return a + 1; });\n  });\n  return groups.asImmutable();\n}\n\nfunction groupByFactory(collection, grouper, context) {\n  var isKeyedIter = isKeyed(collection);\n  var groups = (isOrdered(collection) ? OrderedMap() : Map()).asMutable();\n  collection.__iterate(function (v, k) {\n    groups.update(\n      grouper.call(context, v, k, collection),\n      function (a) { return ((a = a || []), a.push(isKeyedIter ? [k, v] : v), a); }\n    );\n  });\n  var coerce = collectionClass(collection);\n  return groups.map(function (arr) { return reify(collection, coerce(arr)); }).asImmutable();\n}\n\nfunction partitionFactory(collection, predicate, context) {\n  var isKeyedIter = isKeyed(collection);\n  var groups = [[], []];\n  collection.__iterate(function (v, k) {\n    groups[predicate.call(context, v, k, collection) ? 1 : 0].push(\n      isKeyedIter ? [k, v] : v\n    );\n  });\n  var coerce = collectionClass(collection);\n  return groups.map(function (arr) { return reify(collection, coerce(arr)); });\n}\n\nfunction sliceFactory(collection, begin, end, useKeys) {\n  var originalSize = collection.size;\n\n  if (wholeSlice(begin, end, originalSize)) {\n    return collection;\n  }\n\n  // begin or end can not be resolved if they were provided as negative numbers and\n  // this collection's size is unknown. In that case, cache first so there is\n  // a known size and these do not resolve to NaN.\n  if (typeof originalSize === 'undefined' && (begin < 0 || end < 0)) {\n    return sliceFactory(collection.toSeq().cacheResult(), begin, end, useKeys);\n  }\n\n  var resolvedBegin = resolveBegin(begin, originalSize);\n  var resolvedEnd = resolveEnd(end, originalSize);\n\n  // Note: resolvedEnd is undefined when the original sequence's length is\n  // unknown and this slice did not supply an end and should contain all\n  // elements after resolvedBegin.\n  // In that case, resolvedSize will be NaN and sliceSize will remain undefined.\n  var resolvedSize = resolvedEnd - resolvedBegin;\n  var sliceSize;\n  if (resolvedSize === resolvedSize) {\n    sliceSize = resolvedSize < 0 ? 0 : resolvedSize;\n  }\n\n  var sliceSeq = makeSequence(collection);\n\n  // If collection.size is undefined, the size of the realized sliceSeq is\n  // unknown at this point unless the number of items to slice is 0\n  sliceSeq.size =\n    sliceSize === 0 ? sliceSize : (collection.size && sliceSize) || undefined;\n\n  if (!useKeys && isSeq(collection) && sliceSize >= 0) {\n    sliceSeq.get = function (index, notSetValue) {\n      index = wrapIndex(this, index);\n      return index >= 0 && index < sliceSize\n        ? collection.get(index + resolvedBegin, notSetValue)\n        : notSetValue;\n    };\n  }\n\n  sliceSeq.__iterateUncached = function (fn, reverse) {\n    var this$1$1 = this;\n\n    if (sliceSize === 0) {\n      return 0;\n    }\n    if (reverse) {\n      return this.cacheResult().__iterate(fn, reverse);\n    }\n    var skipped = 0;\n    var isSkipping = true;\n    var iterations = 0;\n    collection.__iterate(function (v, k) {\n      if (!(isSkipping && (isSkipping = skipped++ < resolvedBegin))) {\n        iterations++;\n        return (\n          fn(v, useKeys ? k : iterations - 1, this$1$1) !== false &&\n          iterations !== sliceSize\n        );\n      }\n    });\n    return iterations;\n  };\n\n  sliceSeq.__iteratorUncached = function (type, reverse) {\n    if (sliceSize !== 0 && reverse) {\n      return this.cacheResult().__iterator(type, reverse);\n    }\n    // Don't bother instantiating parent iterator if taking 0.\n    if (sliceSize === 0) {\n      return new Iterator(iteratorDone);\n    }\n    var iterator = collection.__iterator(type, reverse);\n    var skipped = 0;\n    var iterations = 0;\n    return new Iterator(function () {\n      while (skipped++ < resolvedBegin) {\n        iterator.next();\n      }\n      if (++iterations > sliceSize) {\n        return iteratorDone();\n      }\n      var step = iterator.next();\n      if (useKeys || type === ITERATE_VALUES || step.done) {\n        return step;\n      }\n      if (type === ITERATE_KEYS) {\n        return iteratorValue(type, iterations - 1, undefined, step);\n      }\n      return iteratorValue(type, iterations - 1, step.value[1], step);\n    });\n  };\n\n  return sliceSeq;\n}\n\nfunction takeWhileFactory(collection, predicate, context) {\n  var takeSequence = makeSequence(collection);\n  takeSequence.__iterateUncached = function (fn, reverse) {\n    var this$1$1 = this;\n\n    if (reverse) {\n      return this.cacheResult().__iterate(fn, reverse);\n    }\n    var iterations = 0;\n    collection.__iterate(\n      function (v, k, c) { return predicate.call(context, v, k, c) && ++iterations && fn(v, k, this$1$1); }\n    );\n    return iterations;\n  };\n  takeSequence.__iteratorUncached = function (type, reverse) {\n    var this$1$1 = this;\n\n    if (reverse) {\n      return this.cacheResult().__iterator(type, reverse);\n    }\n    var iterator = collection.__iterator(ITERATE_ENTRIES, reverse);\n    var iterating = true;\n    return new Iterator(function () {\n      if (!iterating) {\n        return iteratorDone();\n      }\n      var step = iterator.next();\n      if (step.done) {\n        return step;\n      }\n      var entry = step.value;\n      var k = entry[0];\n      var v = entry[1];\n      if (!predicate.call(context, v, k, this$1$1)) {\n        iterating = false;\n        return iteratorDone();\n      }\n      return type === ITERATE_ENTRIES ? step : iteratorValue(type, k, v, step);\n    });\n  };\n  return takeSequence;\n}\n\nfunction skipWhileFactory(collection, predicate, context, useKeys) {\n  var skipSequence = makeSequence(collection);\n  skipSequence.__iterateUncached = function (fn, reverse) {\n    var this$1$1 = this;\n\n    if (reverse) {\n      return this.cacheResult().__iterate(fn, reverse);\n    }\n    var isSkipping = true;\n    var iterations = 0;\n    collection.__iterate(function (v, k, c) {\n      if (!(isSkipping && (isSkipping = predicate.call(context, v, k, c)))) {\n        iterations++;\n        return fn(v, useKeys ? k : iterations - 1, this$1$1);\n      }\n    });\n    return iterations;\n  };\n  skipSequence.__iteratorUncached = function (type, reverse) {\n    var this$1$1 = this;\n\n    if (reverse) {\n      return this.cacheResult().__iterator(type, reverse);\n    }\n    var iterator = collection.__iterator(ITERATE_ENTRIES, reverse);\n    var skipping = true;\n    var iterations = 0;\n    return new Iterator(function () {\n      var step;\n      var k;\n      var v;\n      do {\n        step = iterator.next();\n        if (step.done) {\n          if (useKeys || type === ITERATE_VALUES) {\n            return step;\n          }\n          if (type === ITERATE_KEYS) {\n            return iteratorValue(type, iterations++, undefined, step);\n          }\n          return iteratorValue(type, iterations++, step.value[1], step);\n        }\n        var entry = step.value;\n        k = entry[0];\n        v = entry[1];\n        // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here\n        skipping && (skipping = predicate.call(context, v, k, this$1$1));\n      } while (skipping);\n      return type === ITERATE_ENTRIES ? step : iteratorValue(type, k, v, step);\n    });\n  };\n  return skipSequence;\n}\n\nvar ConcatSeq = /*@__PURE__*/(function (Seq) {\n  function ConcatSeq(iterables) {\n    this._wrappedIterables = iterables.flatMap(function (iterable) {\n      if (iterable._wrappedIterables) {\n        return iterable._wrappedIterables;\n      }\n      return [iterable];\n    });\n    this.size = this._wrappedIterables.reduce(function (sum, iterable) {\n      if (sum !== undefined) {\n        var size = iterable.size;\n        if (size !== undefined) {\n          return sum + size;\n        }\n      }\n    }, 0);\n    this[IS_KEYED_SYMBOL] = this._wrappedIterables[0][IS_KEYED_SYMBOL];\n    this[IS_INDEXED_SYMBOL] = this._wrappedIterables[0][IS_INDEXED_SYMBOL];\n    this[IS_ORDERED_SYMBOL] = this._wrappedIterables[0][IS_ORDERED_SYMBOL];\n  }\n\n  if ( Seq ) ConcatSeq.__proto__ = Seq;\n  ConcatSeq.prototype = Object.create( Seq && Seq.prototype );\n  ConcatSeq.prototype.constructor = ConcatSeq;\n\n  ConcatSeq.prototype.__iterateUncached = function __iterateUncached (fn, reverse) {\n    if (this._wrappedIterables.length === 0) {\n      return;\n    }\n\n    if (reverse) {\n      return this.cacheResult().__iterate(fn, reverse);\n    }\n\n    var iterableIndex = 0;\n    var useKeys = isKeyed(this);\n    var iteratorType = useKeys ? ITERATE_ENTRIES : ITERATE_VALUES;\n    var currentIterator = this._wrappedIterables[iterableIndex].__iterator(\n      iteratorType,\n      reverse\n    );\n\n    var keepGoing = true;\n    var index = 0;\n    while (keepGoing) {\n      var next = currentIterator.next();\n      while (next.done) {\n        iterableIndex++;\n        if (iterableIndex === this._wrappedIterables.length) {\n          return index;\n        }\n        currentIterator = this._wrappedIterables[iterableIndex].__iterator(\n          iteratorType,\n          reverse\n        );\n        next = currentIterator.next();\n      }\n      var fnResult = useKeys\n        ? fn(next.value[1], next.value[0], this)\n        : fn(next.value, index, this);\n      keepGoing = fnResult !== false;\n      index++;\n    }\n    return index;\n  };\n\n  ConcatSeq.prototype.__iteratorUncached = function __iteratorUncached (type, reverse) {\n    var this$1$1 = this;\n\n    if (this._wrappedIterables.length === 0) {\n      return new Iterator(iteratorDone);\n    }\n\n    if (reverse) {\n      return this.cacheResult().__iterator(type, reverse);\n    }\n\n    var iterableIndex = 0;\n    var currentIterator = this._wrappedIterables[iterableIndex].__iterator(\n      type,\n      reverse\n    );\n    return new Iterator(function () {\n      var next = currentIterator.next();\n      while (next.done) {\n        iterableIndex++;\n        if (iterableIndex === this$1$1._wrappedIterables.length) {\n          return next;\n        }\n        currentIterator = this$1$1._wrappedIterables[iterableIndex].__iterator(\n          type,\n          reverse\n        );\n        next = currentIterator.next();\n      }\n      return next;\n    });\n  };\n\n  return ConcatSeq;\n}(Seq));\n\nfunction concatFactory(collection, values) {\n  var isKeyedCollection = isKeyed(collection);\n  var iters = [collection]\n    .concat(values)\n    .map(function (v) {\n      if (!isCollection(v)) {\n        v = isKeyedCollection\n          ? keyedSeqFromValue(v)\n          : indexedSeqFromValue(Array.isArray(v) ? v : [v]);\n      } else if (isKeyedCollection) {\n        v = KeyedCollection(v);\n      }\n      return v;\n    })\n    .filter(function (v) { return v.size !== 0; });\n\n  if (iters.length === 0) {\n    return collection;\n  }\n\n  if (iters.length === 1) {\n    var singleton = iters[0];\n    if (\n      singleton === collection ||\n      (isKeyedCollection && isKeyed(singleton)) ||\n      (isIndexed(collection) && isIndexed(singleton))\n    ) {\n      return singleton;\n    }\n  }\n\n  return new ConcatSeq(iters);\n}\n\nfunction flattenFactory(collection, depth, useKeys) {\n  var flatSequence = makeSequence(collection);\n  flatSequence.__iterateUncached = function (fn, reverse) {\n    if (reverse) {\n      return this.cacheResult().__iterate(fn, reverse);\n    }\n    var iterations = 0;\n    var stopped = false;\n    function flatDeep(iter, currentDepth) {\n      iter.__iterate(function (v, k) {\n        if ((!depth || currentDepth < depth) && isCollection(v)) {\n          flatDeep(v, currentDepth + 1);\n        } else {\n          iterations++;\n          if (fn(v, useKeys ? k : iterations - 1, flatSequence) === false) {\n            stopped = true;\n          }\n        }\n        return !stopped;\n      }, reverse);\n    }\n    flatDeep(collection, 0);\n    return iterations;\n  };\n  flatSequence.__iteratorUncached = function (type, reverse) {\n    if (reverse) {\n      return this.cacheResult().__iterator(type, reverse);\n    }\n    var iterator = collection.__iterator(type, reverse);\n    var stack = [];\n    var iterations = 0;\n    return new Iterator(function () {\n      while (iterator) {\n        var step = iterator.next();\n        if (step.done !== false) {\n          iterator = stack.pop();\n          continue;\n        }\n        var v = step.value;\n        if (type === ITERATE_ENTRIES) {\n          v = v[1];\n        }\n        if ((!depth || stack.length < depth) && isCollection(v)) {\n          stack.push(iterator);\n          iterator = v.__iterator(type, reverse);\n        } else {\n          return useKeys ? step : iteratorValue(type, iterations++, v, step);\n        }\n      }\n      return iteratorDone();\n    });\n  };\n  return flatSequence;\n}\n\nfunction flatMapFactory(collection, mapper, context) {\n  var coerce = collectionClass(collection);\n  return collection\n    .toSeq()\n    .map(function (v, k) { return coerce(mapper.call(context, v, k, collection)); })\n    .flatten(true);\n}\n\nfunction interposeFactory(collection, separator) {\n  var interposedSequence = makeSequence(collection);\n  interposedSequence.size = collection.size && collection.size * 2 - 1;\n  interposedSequence.__iterateUncached = function (fn, reverse) {\n    var this$1$1 = this;\n\n    var iterations = 0;\n    collection.__iterate(\n      function (v) { return (!iterations || fn(separator, iterations++, this$1$1) !== false) &&\n        fn(v, iterations++, this$1$1) !== false; },\n      reverse\n    );\n    return iterations;\n  };\n  interposedSequence.__iteratorUncached = function (type, reverse) {\n    var iterator = collection.__iterator(ITERATE_VALUES, reverse);\n    var iterations = 0;\n    var step;\n    return new Iterator(function () {\n      if (!step || iterations % 2) {\n        step = iterator.next();\n        if (step.done) {\n          return step;\n        }\n      }\n      return iterations % 2\n        ? iteratorValue(type, iterations++, separator)\n        : iteratorValue(type, iterations++, step.value, step);\n    });\n  };\n  return interposedSequence;\n}\n\nfunction sortFactory(collection, comparator, mapper) {\n  if (!comparator) {\n    comparator = defaultComparator;\n  }\n  var isKeyedCollection = isKeyed(collection);\n  var index = 0;\n  var entries = collection\n    .toSeq()\n    .map(function (v, k) { return [k, v, index++, mapper ? mapper(v, k, collection) : v]; })\n    .valueSeq()\n    .toArray();\n  entries\n    .sort(function (a, b) { return comparator(a[3], b[3]) || a[2] - b[2]; })\n    .forEach(\n      isKeyedCollection\n        ? function (v, i) {\n            entries[i].length = 2;\n          }\n        : function (v, i) {\n            entries[i] = v[1];\n          }\n    );\n  return isKeyedCollection\n    ? KeyedSeq(entries)\n    : isIndexed(collection)\n      ? IndexedSeq(entries)\n      : SetSeq(entries);\n}\n\nfunction maxFactory(collection, comparator, mapper) {\n  if (!comparator) {\n    comparator = defaultComparator;\n  }\n  if (mapper) {\n    var entry = collection\n      .toSeq()\n      .map(function (v, k) { return [v, mapper(v, k, collection)]; })\n      .reduce(function (a, b) { return (maxCompare(comparator, a[1], b[1]) ? b : a); });\n    return entry && entry[0];\n  }\n  return collection.reduce(function (a, b) { return (maxCompare(comparator, a, b) ? b : a); });\n}\n\nfunction maxCompare(comparator, a, b) {\n  var comp = comparator(b, a);\n  // b is considered the new max if the comparator declares them equal, but\n  // they are not equal and b is in fact a nullish value.\n  return (\n    (comp === 0 && b !== a && (b === undefined || b === null || b !== b)) ||\n    comp > 0\n  );\n}\n\nfunction zipWithFactory(keyIter, zipper, iters, zipAll) {\n  var zipSequence = makeSequence(keyIter);\n  var sizes = new ArraySeq(iters).map(function (i) { return i.size; });\n  zipSequence.size = zipAll ? sizes.max() : sizes.min();\n  // Note: this a generic base implementation of __iterate in terms of\n  // __iterator which may be more generically useful in the future.\n  zipSequence.__iterate = function (fn, reverse) {\n    /* generic:\n    var iterator = this.__iterator(ITERATE_ENTRIES, reverse);\n    var step;\n    var iterations = 0;\n    while (!(step = iterator.next()).done) {\n      iterations++;\n      if (fn(step.value[1], step.value[0], this) === false) {\n        break;\n      }\n    }\n    return iterations;\n    */\n    // indexed:\n    var iterator = this.__iterator(ITERATE_VALUES, reverse);\n    var step;\n    var iterations = 0;\n    while (!(step = iterator.next()).done) {\n      if (fn(step.value, iterations++, this) === false) {\n        break;\n      }\n    }\n    return iterations;\n  };\n  zipSequence.__iteratorUncached = function (type, reverse) {\n    var iterators = iters.map(\n      function (i) { return ((i = Collection(i)), getIterator(reverse ? i.reverse() : i)); }\n    );\n    var iterations = 0;\n    var isDone = false;\n    return new Iterator(function () {\n      var steps;\n      if (!isDone) {\n        steps = iterators.map(function (i) { return i.next(); });\n        isDone = zipAll\n          ? steps.every(function (s) { return s.done; })\n          : steps.some(function (s) { return s.done; });\n      }\n      if (isDone) {\n        return iteratorDone();\n      }\n      return iteratorValue(\n        type,\n        iterations++,\n        zipper.apply(\n          null,\n          steps.map(function (s) { return s.value; })\n        )\n      );\n    });\n  };\n  return zipSequence;\n}\n\n// #pragma Helper Functions\n\nfunction reify(iter, seq) {\n  return iter === seq ? iter : isSeq(iter) ? seq : iter.constructor(seq);\n}\n\nfunction validateEntry(entry) {\n  if (entry !== Object(entry)) {\n    throw new TypeError('Expected [K, V] tuple: ' + entry);\n  }\n}\n\nfunction collectionClass(collection) {\n  return isKeyed(collection)\n    ? KeyedCollection\n    : isIndexed(collection)\n      ? IndexedCollection\n      : SetCollection;\n}\n\nfunction makeSequence(collection) {\n  return Object.create(\n    (isKeyed(collection)\n      ? KeyedSeq\n      : isIndexed(collection)\n        ? IndexedSeq\n        : SetSeq\n    ).prototype\n  );\n}\n\nfunction cacheResultThrough() {\n  if (this._iter.cacheResult) {\n    this._iter.cacheResult();\n    this.size = this._iter.size;\n    return this;\n  }\n  return Seq.prototype.cacheResult.call(this);\n}\n\nfunction defaultComparator(a, b) {\n  if (a === undefined && b === undefined) {\n    return 0;\n  }\n\n  if (a === undefined) {\n    return 1;\n  }\n\n  if (b === undefined) {\n    return -1;\n  }\n\n  return a > b ? 1 : a < b ? -1 : 0;\n}\n\n/**\n * True if `maybeValue` is a JavaScript Object which has *both* `equals()`\n * and `hashCode()` methods.\n *\n * Any two instances of *value objects* can be compared for value equality with\n * `Immutable.is()` and can be used as keys in a `Map` or members in a `Set`.\n */\nfunction isValueObject(maybeValue) {\n    return Boolean(maybeValue &&\n        // @ts-expect-error: maybeValue is typed as `{}`\n        typeof maybeValue.equals === 'function' &&\n        // @ts-expect-error: maybeValue is typed as `{}`\n        typeof maybeValue.hashCode === 'function');\n}\n\n/**\n * An extension of the \"same-value\" algorithm as [described for use by ES6 Map\n * and Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#Key_equality)\n *\n * NaN is considered the same as NaN, however -0 and 0 are considered the same\n * value, which is different from the algorithm described by\n * [`Object.is`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is).\n *\n * This is extended further to allow Objects to describe the values they\n * represent, by way of `valueOf` or `equals` (and `hashCode`).\n *\n * Note: because of this extension, the key equality of Immutable.Map and the\n * value equality of Immutable.Set will differ from ES6 Map and Set.\n *\n * ### Defining custom values\n *\n * The easiest way to describe the value an object represents is by implementing\n * `valueOf`. For example, `Date` represents a value by returning a unix\n * timestamp for `valueOf`:\n *\n *     var date1 = new Date(1234567890000); // Fri Feb 13 2009 ...\n *     var date2 = new Date(1234567890000);\n *     date1.valueOf(); // 1234567890000\n *     assert( date1 !== date2 );\n *     assert( Immutable.is( date1, date2 ) );\n *\n * Note: overriding `valueOf` may have other implications if you use this object\n * where JavaScript expects a primitive, such as implicit string coercion.\n *\n * For more complex types, especially collections, implementing `valueOf` may\n * not be performant. An alternative is to implement `equals` and `hashCode`.\n *\n * `equals` takes another object, presumably of similar type, and returns true\n * if it is equal. Equality is symmetrical, so the same result should be\n * returned if this and the argument are flipped.\n *\n *     assert( a.equals(b) === b.equals(a) );\n *\n * `hashCode` returns a 32bit integer number representing the object which will\n * be used to determine how to store the value object in a Map or Set. You must\n * provide both or neither methods, one must not exist without the other.\n *\n * Also, an important relationship between these methods must be upheld: if two\n * values are equal, they *must* return the same hashCode. If the values are not\n * equal, they might have the same hashCode; this is called a hash collision,\n * and while undesirable for performance reasons, it is acceptable.\n *\n *     if (a.equals(b)) {\n *       assert( a.hashCode() === b.hashCode() );\n *     }\n *\n * All Immutable collections are Value Objects: they implement `equals()`\n * and `hashCode()`.\n */\nfunction is(valueA, valueB) {\n    if (valueA === valueB || (valueA !== valueA && valueB !== valueB)) {\n        return true;\n    }\n    if (!valueA || !valueB) {\n        return false;\n    }\n    if (typeof valueA.valueOf === 'function' &&\n        typeof valueB.valueOf === 'function') {\n        valueA = valueA.valueOf();\n        valueB = valueB.valueOf();\n        if (valueA === valueB || (valueA !== valueA && valueB !== valueB)) {\n            return true;\n        }\n        if (!valueA || !valueB) {\n            return false;\n        }\n    }\n    return !!(isValueObject(valueA) &&\n        isValueObject(valueB) &&\n        valueA.equals(valueB));\n}\n\nfunction update$1(collection, key, notSetValue, updater) {\n    return updateIn(\n    // @ts-expect-error Index signature for type string is missing in type V[]\n    collection, [key], notSetValue, updater);\n}\n\nfunction merge$1() {\n  var iters = [], len = arguments.length;\n  while ( len-- ) iters[ len ] = arguments[ len ];\n\n  return mergeIntoKeyedWith(this, iters);\n}\n\nfunction mergeWith$1(merger) {\n  var iters = [], len = arguments.length - 1;\n  while ( len-- > 0 ) iters[ len ] = arguments[ len + 1 ];\n\n  if (typeof merger !== 'function') {\n    throw new TypeError('Invalid merger function: ' + merger);\n  }\n  return mergeIntoKeyedWith(this, iters, merger);\n}\n\nfunction mergeIntoKeyedWith(collection, collections, merger) {\n  var iters = [];\n  for (var ii = 0; ii < collections.length; ii++) {\n    var collection$1 = KeyedCollection(collections[ii]);\n    if (collection$1.size !== 0) {\n      iters.push(collection$1);\n    }\n  }\n  if (iters.length === 0) {\n    return collection;\n  }\n  if (\n    collection.toSeq().size === 0 &&\n    !collection.__ownerID &&\n    iters.length === 1\n  ) {\n    return isRecord(collection)\n      ? collection // Record is empty and will not be updated: return the same instance\n      : collection.constructor(iters[0]);\n  }\n  return collection.withMutations(function (collection) {\n    var mergeIntoCollection = merger\n      ? function (value, key) {\n          update$1(collection, key, NOT_SET, function (oldVal) { return oldVal === NOT_SET ? value : merger(oldVal, value, key); }\n          );\n        }\n      : function (value, key) {\n          collection.set(key, value);\n        };\n    for (var ii = 0; ii < iters.length; ii++) {\n      iters[ii].forEach(mergeIntoCollection);\n    }\n  });\n}\n\nvar toString = Object.prototype.toString;\nfunction isPlainObject(value) {\n    // The base prototype's toString deals with Argument objects and native namespaces like Math\n    if (!value ||\n        typeof value !== 'object' ||\n        toString.call(value) !== '[object Object]') {\n        return false;\n    }\n    var proto = Object.getPrototypeOf(value);\n    if (proto === null) {\n        return true;\n    }\n    // Iteratively going up the prototype chain is needed for cross-realm environments (differing contexts, iframes, etc)\n    var parentProto = proto;\n    var nextProto = Object.getPrototypeOf(proto);\n    while (nextProto !== null) {\n        parentProto = nextProto;\n        nextProto = Object.getPrototypeOf(parentProto);\n    }\n    return parentProto === proto;\n}\n\n/**\n * Returns true if the value is a potentially-persistent data structure, either\n * provided by Immutable.js or a plain Array or Object.\n */\nfunction isDataStructure(value) {\n    return (typeof value === 'object' &&\n        (isImmutable(value) || Array.isArray(value) || isPlainObject(value)));\n}\n\nfunction isProtoKey(key) {\n    return (typeof key === 'string' && (key === '__proto__' || key === 'constructor'));\n}\n\n// http://jsperf.com/copy-array-inline\nfunction arrCopy(arr, offset) {\n    offset = offset || 0;\n    var len = Math.max(0, arr.length - offset);\n    var newArr = new Array(len);\n    for (var ii = 0; ii < len; ii++) {\n        // @ts-expect-error We may want to guard for undefined values with `if (arr[ii + offset] !== undefined`, but ths should not happen by design\n        newArr[ii] = arr[ii + offset];\n    }\n    return newArr;\n}\n\nfunction shallowCopy(from) {\n    if (Array.isArray(from)) {\n        return arrCopy(from);\n    }\n    var to = {};\n    for (var key in from) {\n        if (isProtoKey(key)) {\n            continue;\n        }\n        if (hasOwnProperty.call(from, key)) {\n            to[key] = from[key];\n        }\n    }\n    return to;\n}\n\nfunction merge(collection) {\n  var sources = [], len = arguments.length - 1;\n  while ( len-- > 0 ) sources[ len ] = arguments[ len + 1 ];\n\n  return mergeWithSources(collection, sources);\n}\n\nfunction mergeWith(merger, collection) {\n  var sources = [], len = arguments.length - 2;\n  while ( len-- > 0 ) sources[ len ] = arguments[ len + 2 ];\n\n  return mergeWithSources(collection, sources, merger);\n}\n\nfunction mergeDeep$1(collection) {\n  var sources = [], len = arguments.length - 1;\n  while ( len-- > 0 ) sources[ len ] = arguments[ len + 1 ];\n\n  return mergeDeepWithSources(collection, sources);\n}\n\nfunction mergeDeepWith$1(merger, collection) {\n  var sources = [], len = arguments.length - 2;\n  while ( len-- > 0 ) sources[ len ] = arguments[ len + 2 ];\n\n  return mergeDeepWithSources(collection, sources, merger);\n}\n\nfunction mergeDeepWithSources(collection, sources, merger) {\n  return mergeWithSources(collection, sources, deepMergerWith(merger));\n}\n\nfunction mergeWithSources(collection, sources, merger) {\n  if (!isDataStructure(collection)) {\n    throw new TypeError(\n      'Cannot merge into non-data-structure value: ' + collection\n    );\n  }\n  if (isImmutable(collection)) {\n    return typeof merger === 'function' && collection.mergeWith\n      ? collection.mergeWith.apply(collection, [ merger ].concat( sources ))\n      : collection.merge\n        ? collection.merge.apply(collection, sources)\n        : collection.concat.apply(collection, sources);\n  }\n  var isArray = Array.isArray(collection);\n  var merged = collection;\n  var Collection = isArray ? IndexedCollection : KeyedCollection;\n  var mergeItem = isArray\n    ? function (value) {\n        // Copy on write\n        if (merged === collection) {\n          merged = shallowCopy(merged);\n        }\n        merged.push(value);\n      }\n    : function (value, key) {\n        if (isProtoKey(key)) {\n          return;\n        }\n\n        var hasVal = hasOwnProperty.call(merged, key);\n        var nextVal =\n          hasVal && merger ? merger(merged[key], value, key) : value;\n        if (!hasVal || nextVal !== merged[key]) {\n          // Copy on write\n          if (merged === collection) {\n            merged = shallowCopy(merged);\n          }\n          merged[key] = nextVal;\n        }\n      };\n  for (var i = 0; i < sources.length; i++) {\n    Collection(sources[i]).forEach(mergeItem);\n  }\n  return merged;\n}\n\nfunction deepMergerWith(merger) {\n  function deepMerger(oldValue, newValue, key) {\n    return isDataStructure(oldValue) &&\n      isDataStructure(newValue) &&\n      areMergeable(oldValue, newValue)\n      ? mergeWithSources(oldValue, [newValue], deepMerger)\n      : merger\n        ? merger(oldValue, newValue, key)\n        : newValue;\n  }\n  return deepMerger;\n}\n\n/**\n * It's unclear what the desired behavior is for merging two collections that\n * fall into separate categories between keyed, indexed, or set-like, so we only\n * consider them mergeable if they fall into the same category.\n */\nfunction areMergeable(oldDataStructure, newDataStructure) {\n  var oldSeq = Seq(oldDataStructure);\n  var newSeq = Seq(newDataStructure);\n  // This logic assumes that a sequence can only fall into one of the three\n  // categories mentioned above (since there's no `isSetLike()` method).\n  return (\n    isIndexed(oldSeq) === isIndexed(newSeq) &&\n    isKeyed(oldSeq) === isKeyed(newSeq)\n  );\n}\n\nfunction mergeDeep() {\n  var iters = [], len = arguments.length;\n  while ( len-- ) iters[ len ] = arguments[ len ];\n\n  return mergeDeepWithSources(this, iters);\n}\n\nfunction mergeDeepWith(merger) {\n  var iters = [], len = arguments.length - 1;\n  while ( len-- > 0 ) iters[ len ] = arguments[ len + 1 ];\n\n  return mergeDeepWithSources(this, iters, merger);\n}\n\nfunction mergeDeepIn(keyPath) {\n  var iters = [], len = arguments.length - 1;\n  while ( len-- > 0 ) iters[ len ] = arguments[ len + 1 ];\n\n  return updateIn(this, keyPath, emptyMap(), function (m) { return mergeDeepWithSources(m, iters); }\n  );\n}\n\nfunction mergeIn(keyPath) {\n  var iters = [], len = arguments.length - 1;\n  while ( len-- > 0 ) iters[ len ] = arguments[ len + 1 ];\n\n  return updateIn(this, keyPath, emptyMap(), function (m) { return mergeWithSources(m, iters); });\n}\n\n/**\n * Returns a copy of the collection with the value at the key path set to the\n * provided value.\n *\n * A functional alternative to `collection.setIn(keypath)` which will also\n * work with plain Objects and Arrays.\n */\nfunction setIn$1(collection, keyPath, value) {\n    return updateIn(collection, keyPath, NOT_SET, function () { return value; });\n}\n\nfunction setIn(keyPath, v) {\n  return setIn$1(this, keyPath, v);\n}\n\nfunction update(key, notSetValue, updater) {\n  return arguments.length === 1\n    ? key(this)\n    : update$1(this, key, notSetValue, updater);\n}\n\nfunction updateIn$1(keyPath, notSetValue, updater) {\n  return updateIn(this, keyPath, notSetValue, updater);\n}\n\nfunction wasAltered() {\n  return this.__altered;\n}\n\nfunction withMutations(fn) {\n  var mutable = this.asMutable();\n  fn(mutable);\n  return mutable.wasAltered() ? mutable.__ensureOwner(this.__ownerID) : this;\n}\n\nvar IS_MAP_SYMBOL = '@@__IMMUTABLE_MAP__@@';\n/**\n * True if `maybeMap` is a Map.\n *\n * Also true for OrderedMaps.\n */\nfunction isMap(maybeMap) {\n    return Boolean(maybeMap &&\n        // @ts-expect-error: maybeMap is typed as `{}`, need to change in 6.0 to `maybeMap && typeof maybeMap === 'object' && IS_MAP_SYMBOL in maybeMap`\n        maybeMap[IS_MAP_SYMBOL]);\n}\n\nfunction invariant(condition, error) {\n    if (!condition)\n        { throw new Error(error); }\n}\n\nfunction assertNotInfinite(size) {\n    invariant(size !== Infinity, 'Cannot perform this action with an infinite size.');\n}\n\nvar Map = /*@__PURE__*/(function (KeyedCollection) {\n  function Map(value) {\n    // eslint-disable-next-line no-constructor-return\n    return value === undefined || value === null\n      ? emptyMap()\n      : isMap(value) && !isOrdered(value)\n        ? value\n        : emptyMap().withMutations(function (map) {\n            var iter = KeyedCollection(value);\n            assertNotInfinite(iter.size);\n            iter.forEach(function (v, k) { return map.set(k, v); });\n          });\n  }\n\n  if ( KeyedCollection ) Map.__proto__ = KeyedCollection;\n  Map.prototype = Object.create( KeyedCollection && KeyedCollection.prototype );\n  Map.prototype.constructor = Map;\n\n  Map.prototype.toString = function toString () {\n    return this.__toString('Map {', '}');\n  };\n\n  // @pragma Access\n\n  Map.prototype.get = function get (k, notSetValue) {\n    return this._root\n      ? this._root.get(0, undefined, k, notSetValue)\n      : notSetValue;\n  };\n\n  // @pragma Modification\n\n  Map.prototype.set = function set (k, v) {\n    return updateMap(this, k, v);\n  };\n\n  Map.prototype.remove = function remove (k) {\n    return updateMap(this, k, NOT_SET);\n  };\n\n  Map.prototype.deleteAll = function deleteAll (keys) {\n    var collection = Collection(keys);\n\n    if (collection.size === 0) {\n      return this;\n    }\n\n    return this.withMutations(function (map) {\n      collection.forEach(function (key) { return map.remove(key); });\n    });\n  };\n\n  Map.prototype.clear = function clear () {\n    if (this.size === 0) {\n      return this;\n    }\n    if (this.__ownerID) {\n      this.size = 0;\n      this._root = null;\n      this.__hash = undefined;\n      this.__altered = true;\n      return this;\n    }\n    return emptyMap();\n  };\n\n  // @pragma Composition\n\n  Map.prototype.sort = function sort (comparator) {\n    // Late binding\n    return OrderedMap(sortFactory(this, comparator));\n  };\n\n  Map.prototype.sortBy = function sortBy (mapper, comparator) {\n    // Late binding\n    return OrderedMap(sortFactory(this, comparator, mapper));\n  };\n\n  Map.prototype.map = function map (mapper, context) {\n    var this$1$1 = this;\n\n    return this.withMutations(function (map) {\n      map.forEach(function (value, key) {\n        map.set(key, mapper.call(context, value, key, this$1$1));\n      });\n    });\n  };\n\n  // @pragma Mutability\n\n  Map.prototype.__iterator = function __iterator (type, reverse) {\n    return new MapIterator(this, type, reverse);\n  };\n\n  Map.prototype.__iterate = function __iterate (fn, reverse) {\n    var this$1$1 = this;\n\n    var iterations = 0;\n    // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here\n    this._root &&\n      this._root.iterate(function (entry) {\n        iterations++;\n        return fn(entry[1], entry[0], this$1$1);\n      }, reverse);\n    return iterations;\n  };\n\n  Map.prototype.__ensureOwner = function __ensureOwner (ownerID) {\n    if (ownerID === this.__ownerID) {\n      return this;\n    }\n    if (!ownerID) {\n      if (this.size === 0) {\n        return emptyMap();\n      }\n      this.__ownerID = ownerID;\n      this.__altered = false;\n      return this;\n    }\n    return makeMap(this.size, this._root, ownerID, this.__hash);\n  };\n\n  return Map;\n}(KeyedCollection));\n\nMap.isMap = isMap;\n\nvar MapPrototype = Map.prototype;\nMapPrototype[IS_MAP_SYMBOL] = true;\nMapPrototype[DELETE] = MapPrototype.remove;\nMapPrototype.removeAll = MapPrototype.deleteAll;\nMapPrototype.setIn = setIn;\nMapPrototype.removeIn = MapPrototype.deleteIn = deleteIn;\nMapPrototype.update = update;\nMapPrototype.updateIn = updateIn$1;\nMapPrototype.merge = MapPrototype.concat = merge$1;\nMapPrototype.mergeWith = mergeWith$1;\nMapPrototype.mergeDeep = mergeDeep;\nMapPrototype.mergeDeepWith = mergeDeepWith;\nMapPrototype.mergeIn = mergeIn;\nMapPrototype.mergeDeepIn = mergeDeepIn;\nMapPrototype.withMutations = withMutations;\nMapPrototype.wasAltered = wasAltered;\nMapPrototype.asImmutable = asImmutable;\nMapPrototype['@@transducer/init'] = MapPrototype.asMutable = asMutable;\nMapPrototype['@@transducer/step'] = function (result, arr) {\n  return result.set(arr[0], arr[1]);\n};\nMapPrototype['@@transducer/result'] = function (obj) {\n  return obj.asImmutable();\n};\n\n// #pragma Trie Nodes\n\nvar ArrayMapNode = function ArrayMapNode(ownerID, entries) {\n  this.ownerID = ownerID;\n  this.entries = entries;\n};\n\nArrayMapNode.prototype.get = function get (shift, keyHash, key, notSetValue) {\n  var entries = this.entries;\n  for (var ii = 0, len = entries.length; ii < len; ii++) {\n    if (is(key, entries[ii][0])) {\n      return entries[ii][1];\n    }\n  }\n  return notSetValue;\n};\n\nArrayMapNode.prototype.update = function update (ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n  var removed = value === NOT_SET;\n\n  var entries = this.entries;\n  var idx = 0;\n  var len = entries.length;\n  for (; idx < len; idx++) {\n    if (is(key, entries[idx][0])) {\n      break;\n    }\n  }\n  var exists = idx < len;\n\n  if (exists ? entries[idx][1] === value : removed) {\n    return this;\n  }\n\n  SetRef(didAlter);\n  // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here\n  (removed || !exists) && SetRef(didChangeSize);\n\n  if (removed && entries.length === 1) {\n    return; // undefined\n  }\n\n  if (!exists && !removed && entries.length >= MAX_ARRAY_MAP_SIZE) {\n    return createNodes(ownerID, entries, key, value);\n  }\n\n  var isEditable = ownerID && ownerID === this.ownerID;\n  var newEntries = isEditable ? entries : arrCopy(entries);\n\n  if (exists) {\n    if (removed) {\n      // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here\n      idx === len - 1\n        ? newEntries.pop()\n        : (newEntries[idx] = newEntries.pop());\n    } else {\n      newEntries[idx] = [key, value];\n    }\n  } else {\n    newEntries.push([key, value]);\n  }\n\n  if (isEditable) {\n    this.entries = newEntries;\n    return this;\n  }\n\n  return new ArrayMapNode(ownerID, newEntries);\n};\n\nvar BitmapIndexedNode = function BitmapIndexedNode(ownerID, bitmap, nodes) {\n  this.ownerID = ownerID;\n  this.bitmap = bitmap;\n  this.nodes = nodes;\n};\n\nBitmapIndexedNode.prototype.get = function get (shift, keyHash, key, notSetValue) {\n  if (keyHash === undefined) {\n    keyHash = hash(key);\n  }\n  var bit = 1 << ((shift === 0 ? keyHash : keyHash >>> shift) & MASK);\n  var bitmap = this.bitmap;\n  return (bitmap & bit) === 0\n    ? notSetValue\n    : this.nodes[popCount(bitmap & (bit - 1))].get(\n        shift + SHIFT,\n        keyHash,\n        key,\n        notSetValue\n      );\n};\n\nBitmapIndexedNode.prototype.update = function update (ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n  if (keyHash === undefined) {\n    keyHash = hash(key);\n  }\n  var keyHashFrag = (shift === 0 ? keyHash : keyHash >>> shift) & MASK;\n  var bit = 1 << keyHashFrag;\n  var bitmap = this.bitmap;\n  var exists = (bitmap & bit) !== 0;\n\n  if (!exists && value === NOT_SET) {\n    return this;\n  }\n\n  var idx = popCount(bitmap & (bit - 1));\n  var nodes = this.nodes;\n  var node = exists ? nodes[idx] : undefined;\n  var newNode = updateNode(\n    node,\n    ownerID,\n    shift + SHIFT,\n    keyHash,\n    key,\n    value,\n    didChangeSize,\n    didAlter\n  );\n\n  if (newNode === node) {\n    return this;\n  }\n\n  if (!exists && newNode && nodes.length >= MAX_BITMAP_INDEXED_SIZE) {\n    return expandNodes(ownerID, nodes, bitmap, keyHashFrag, newNode);\n  }\n\n  if (\n    exists &&\n    !newNode &&\n    nodes.length === 2 &&\n    isLeafNode(nodes[idx ^ 1])\n  ) {\n    return nodes[idx ^ 1];\n  }\n\n  if (exists && newNode && nodes.length === 1 && isLeafNode(newNode)) {\n    return newNode;\n  }\n\n  var isEditable = ownerID && ownerID === this.ownerID;\n  var newBitmap = exists ? (newNode ? bitmap : bitmap ^ bit) : bitmap | bit;\n  var newNodes = exists\n    ? newNode\n      ? setAt(nodes, idx, newNode, isEditable)\n      : spliceOut(nodes, idx, isEditable)\n    : spliceIn(nodes, idx, newNode, isEditable);\n\n  if (isEditable) {\n    this.bitmap = newBitmap;\n    this.nodes = newNodes;\n    return this;\n  }\n\n  return new BitmapIndexedNode(ownerID, newBitmap, newNodes);\n};\n\nvar HashArrayMapNode = function HashArrayMapNode(ownerID, count, nodes) {\n  this.ownerID = ownerID;\n  this.count = count;\n  this.nodes = nodes;\n};\n\nHashArrayMapNode.prototype.get = function get (shift, keyHash, key, notSetValue) {\n  if (keyHash === undefined) {\n    keyHash = hash(key);\n  }\n  var idx = (shift === 0 ? keyHash : keyHash >>> shift) & MASK;\n  var node = this.nodes[idx];\n  return node\n    ? node.get(shift + SHIFT, keyHash, key, notSetValue)\n    : notSetValue;\n};\n\nHashArrayMapNode.prototype.update = function update (ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n  if (keyHash === undefined) {\n    keyHash = hash(key);\n  }\n  var idx = (shift === 0 ? keyHash : keyHash >>> shift) & MASK;\n  var removed = value === NOT_SET;\n  var nodes = this.nodes;\n  var node = nodes[idx];\n\n  if (removed && !node) {\n    return this;\n  }\n\n  var newNode = updateNode(\n    node,\n    ownerID,\n    shift + SHIFT,\n    keyHash,\n    key,\n    value,\n    didChangeSize,\n    didAlter\n  );\n  if (newNode === node) {\n    return this;\n  }\n\n  var newCount = this.count;\n  if (!node) {\n    newCount++;\n  } else if (!newNode) {\n    newCount--;\n    if (newCount < MIN_HASH_ARRAY_MAP_SIZE) {\n      return packNodes(ownerID, nodes, newCount, idx);\n    }\n  }\n\n  var isEditable = ownerID && ownerID === this.ownerID;\n  var newNodes = setAt(nodes, idx, newNode, isEditable);\n\n  if (isEditable) {\n    this.count = newCount;\n    this.nodes = newNodes;\n    return this;\n  }\n\n  return new HashArrayMapNode(ownerID, newCount, newNodes);\n};\n\nvar HashCollisionNode = function HashCollisionNode(ownerID, keyHash, entries) {\n  this.ownerID = ownerID;\n  this.keyHash = keyHash;\n  this.entries = entries;\n};\n\nHashCollisionNode.prototype.get = function get (shift, keyHash, key, notSetValue) {\n  var entries = this.entries;\n  for (var ii = 0, len = entries.length; ii < len; ii++) {\n    if (is(key, entries[ii][0])) {\n      return entries[ii][1];\n    }\n  }\n  return notSetValue;\n};\n\nHashCollisionNode.prototype.update = function update (ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n  if (keyHash === undefined) {\n    keyHash = hash(key);\n  }\n\n  var removed = value === NOT_SET;\n\n  if (keyHash !== this.keyHash) {\n    if (removed) {\n      return this;\n    }\n    SetRef(didAlter);\n    SetRef(didChangeSize);\n    return mergeIntoNode(this, ownerID, shift, keyHash, [key, value]);\n  }\n\n  var entries = this.entries;\n  var idx = 0;\n  var len = entries.length;\n  for (; idx < len; idx++) {\n    if (is(key, entries[idx][0])) {\n      break;\n    }\n  }\n  var exists = idx < len;\n\n  if (exists ? entries[idx][1] === value : removed) {\n    return this;\n  }\n\n  SetRef(didAlter);\n  // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here\n  (removed || !exists) && SetRef(didChangeSize);\n\n  if (removed && len === 2) {\n    return new ValueNode(ownerID, this.keyHash, entries[idx ^ 1]);\n  }\n\n  var isEditable = ownerID && ownerID === this.ownerID;\n  var newEntries = isEditable ? entries : arrCopy(entries);\n\n  if (exists) {\n    if (removed) {\n      // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here\n      idx === len - 1\n        ? newEntries.pop()\n        : (newEntries[idx] = newEntries.pop());\n    } else {\n      newEntries[idx] = [key, value];\n    }\n  } else {\n    newEntries.push([key, value]);\n  }\n\n  if (isEditable) {\n    this.entries = newEntries;\n    return this;\n  }\n\n  return new HashCollisionNode(ownerID, this.keyHash, newEntries);\n};\n\nvar ValueNode = function ValueNode(ownerID, keyHash, entry) {\n  this.ownerID = ownerID;\n  this.keyHash = keyHash;\n  this.entry = entry;\n};\n\nValueNode.prototype.get = function get (shift, keyHash, key, notSetValue) {\n  return is(key, this.entry[0]) ? this.entry[1] : notSetValue;\n};\n\nValueNode.prototype.update = function update (ownerID, shift, keyHash, key, value, didChangeSize, didAlter) {\n  var removed = value === NOT_SET;\n  var keyMatch = is(key, this.entry[0]);\n  if (keyMatch ? value === this.entry[1] : removed) {\n    return this;\n  }\n\n  SetRef(didAlter);\n\n  if (removed) {\n    SetRef(didChangeSize);\n    return; // undefined\n  }\n\n  if (keyMatch) {\n    if (ownerID && ownerID === this.ownerID) {\n      this.entry[1] = value;\n      return this;\n    }\n    return new ValueNode(ownerID, this.keyHash, [key, value]);\n  }\n\n  SetRef(didChangeSize);\n  return mergeIntoNode(this, ownerID, shift, hash(key), [key, value]);\n};\n\n// #pragma Iterators\n\nArrayMapNode.prototype.iterate = HashCollisionNode.prototype.iterate =\n  function (fn, reverse) {\n    var entries = this.entries;\n    for (var ii = 0, maxIndex = entries.length - 1; ii <= maxIndex; ii++) {\n      if (fn(entries[reverse ? maxIndex - ii : ii]) === false) {\n        return false;\n      }\n    }\n  };\n\nBitmapIndexedNode.prototype.iterate = HashArrayMapNode.prototype.iterate =\n  function (fn, reverse) {\n    var nodes = this.nodes;\n    for (var ii = 0, maxIndex = nodes.length - 1; ii <= maxIndex; ii++) {\n      var node = nodes[reverse ? maxIndex - ii : ii];\n      if (node && node.iterate(fn, reverse) === false) {\n        return false;\n      }\n    }\n  };\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nValueNode.prototype.iterate = function (fn, reverse) {\n  return fn(this.entry);\n};\n\nvar MapIterator = /*@__PURE__*/(function (Iterator) {\n  function MapIterator(map, type, reverse) {\n    this._type = type;\n    this._reverse = reverse;\n    this._stack = map._root && mapIteratorFrame(map._root);\n  }\n\n  if ( Iterator ) MapIterator.__proto__ = Iterator;\n  MapIterator.prototype = Object.create( Iterator && Iterator.prototype );\n  MapIterator.prototype.constructor = MapIterator;\n\n  MapIterator.prototype.next = function next () {\n    var type = this._type;\n    var stack = this._stack;\n    while (stack) {\n      var node = stack.node;\n      var index = stack.index++;\n      var maxIndex = (void 0);\n      if (node.entry) {\n        if (index === 0) {\n          return mapIteratorValue(type, node.entry);\n        }\n      } else if (node.entries) {\n        maxIndex = node.entries.length - 1;\n        if (index <= maxIndex) {\n          return mapIteratorValue(\n            type,\n            node.entries[this._reverse ? maxIndex - index : index]\n          );\n        }\n      } else {\n        maxIndex = node.nodes.length - 1;\n        if (index <= maxIndex) {\n          var subNode = node.nodes[this._reverse ? maxIndex - index : index];\n          if (subNode) {\n            if (subNode.entry) {\n              return mapIteratorValue(type, subNode.entry);\n            }\n            stack = this._stack = mapIteratorFrame(subNode, stack);\n          }\n          continue;\n        }\n      }\n      stack = this._stack = this._stack.__prev;\n    }\n    return iteratorDone();\n  };\n\n  return MapIterator;\n}(Iterator));\n\nfunction mapIteratorValue(type, entry) {\n  return iteratorValue(type, entry[0], entry[1]);\n}\n\nfunction mapIteratorFrame(node, prev) {\n  return {\n    node: node,\n    index: 0,\n    __prev: prev,\n  };\n}\n\nfunction makeMap(size, root, ownerID, hash) {\n  var map = Object.create(MapPrototype);\n  map.size = size;\n  map._root = root;\n  map.__ownerID = ownerID;\n  map.__hash = hash;\n  map.__altered = false;\n  return map;\n}\n\nvar EMPTY_MAP;\nfunction emptyMap() {\n  return EMPTY_MAP || (EMPTY_MAP = makeMap(0));\n}\n\nfunction updateMap(map, k, v) {\n  var newRoot;\n  var newSize;\n  if (!map._root) {\n    if (v === NOT_SET) {\n      return map;\n    }\n    newSize = 1;\n    newRoot = new ArrayMapNode(map.__ownerID, [[k, v]]);\n  } else {\n    var didChangeSize = MakeRef();\n    var didAlter = MakeRef();\n    newRoot = updateNode(\n      map._root,\n      map.__ownerID,\n      0,\n      undefined,\n      k,\n      v,\n      didChangeSize,\n      didAlter\n    );\n    if (!didAlter.value) {\n      return map;\n    }\n    newSize = map.size + (didChangeSize.value ? (v === NOT_SET ? -1 : 1) : 0);\n  }\n  if (map.__ownerID) {\n    map.size = newSize;\n    map._root = newRoot;\n    map.__hash = undefined;\n    map.__altered = true;\n    return map;\n  }\n  return newRoot ? makeMap(newSize, newRoot) : emptyMap();\n}\n\nfunction updateNode(\n  node,\n  ownerID,\n  shift,\n  keyHash,\n  key,\n  value,\n  didChangeSize,\n  didAlter\n) {\n  if (!node) {\n    if (value === NOT_SET) {\n      return node;\n    }\n    SetRef(didAlter);\n    SetRef(didChangeSize);\n    return new ValueNode(ownerID, keyHash, [key, value]);\n  }\n  return node.update(\n    ownerID,\n    shift,\n    keyHash,\n    key,\n    value,\n    didChangeSize,\n    didAlter\n  );\n}\n\nfunction isLeafNode(node) {\n  return (\n    node.constructor === ValueNode || node.constructor === HashCollisionNode\n  );\n}\n\nfunction mergeIntoNode(node, ownerID, shift, keyHash, entry) {\n  if (node.keyHash === keyHash) {\n    return new HashCollisionNode(ownerID, keyHash, [node.entry, entry]);\n  }\n\n  var idx1 = (shift === 0 ? node.keyHash : node.keyHash >>> shift) & MASK;\n  var idx2 = (shift === 0 ? keyHash : keyHash >>> shift) & MASK;\n\n  var newNode;\n  var nodes =\n    idx1 === idx2\n      ? [mergeIntoNode(node, ownerID, shift + SHIFT, keyHash, entry)]\n      : ((newNode = new ValueNode(ownerID, keyHash, entry)),\n        idx1 < idx2 ? [node, newNode] : [newNode, node]);\n\n  return new BitmapIndexedNode(ownerID, (1 << idx1) | (1 << idx2), nodes);\n}\n\nfunction createNodes(ownerID, entries, key, value) {\n  if (!ownerID) {\n    ownerID = new OwnerID();\n  }\n  var node = new ValueNode(ownerID, hash(key), [key, value]);\n  for (var ii = 0; ii < entries.length; ii++) {\n    var entry = entries[ii];\n    node = node.update(ownerID, 0, undefined, entry[0], entry[1]);\n  }\n  return node;\n}\n\nfunction packNodes(ownerID, nodes, count, excluding) {\n  var bitmap = 0;\n  var packedII = 0;\n  var packedNodes = new Array(count);\n  for (var ii = 0, bit = 1, len = nodes.length; ii < len; ii++, bit <<= 1) {\n    var node = nodes[ii];\n    if (node !== undefined && ii !== excluding) {\n      bitmap |= bit;\n      packedNodes[packedII++] = node;\n    }\n  }\n  return new BitmapIndexedNode(ownerID, bitmap, packedNodes);\n}\n\nfunction expandNodes(ownerID, nodes, bitmap, including, node) {\n  var count = 0;\n  var expandedNodes = new Array(SIZE);\n  for (var ii = 0; bitmap !== 0; ii++, bitmap >>>= 1) {\n    expandedNodes[ii] = bitmap & 1 ? nodes[count++] : undefined;\n  }\n  expandedNodes[including] = node;\n  return new HashArrayMapNode(ownerID, count + 1, expandedNodes);\n}\n\nfunction popCount(x) {\n  x -= (x >> 1) & 0x55555555;\n  x = (x & 0x33333333) + ((x >> 2) & 0x33333333);\n  x = (x + (x >> 4)) & 0x0f0f0f0f;\n  x += x >> 8;\n  x += x >> 16;\n  return x & 0x7f;\n}\n\nfunction setAt(array, idx, val, canEdit) {\n  var newArray = canEdit ? array : arrCopy(array);\n  newArray[idx] = val;\n  return newArray;\n}\n\nfunction spliceIn(array, idx, val, canEdit) {\n  var newLen = array.length + 1;\n  if (canEdit && idx + 1 === newLen) {\n    array[idx] = val;\n    return array;\n  }\n  var newArray = new Array(newLen);\n  var after = 0;\n  for (var ii = 0; ii < newLen; ii++) {\n    if (ii === idx) {\n      newArray[ii] = val;\n      after = -1;\n    } else {\n      newArray[ii] = array[ii + after];\n    }\n  }\n  return newArray;\n}\n\nfunction spliceOut(array, idx, canEdit) {\n  var newLen = array.length - 1;\n  if (canEdit && idx === newLen) {\n    array.pop();\n    return array;\n  }\n  var newArray = new Array(newLen);\n  var after = 0;\n  for (var ii = 0; ii < newLen; ii++) {\n    if (ii === idx) {\n      after = 1;\n    }\n    newArray[ii] = array[ii + after];\n  }\n  return newArray;\n}\n\nvar MAX_ARRAY_MAP_SIZE = SIZE / 4;\nvar MAX_BITMAP_INDEXED_SIZE = SIZE / 2;\nvar MIN_HASH_ARRAY_MAP_SIZE = SIZE / 4;\n\nfunction coerceKeyPath(keyPath) {\n    if (isArrayLike(keyPath) && typeof keyPath !== 'string') {\n        return keyPath;\n    }\n    if (isOrdered(keyPath)) {\n        return keyPath.toArray();\n    }\n    throw new TypeError('Invalid keyPath: expected Ordered Collection or Array: ' + keyPath);\n}\n\n/**\n * Converts a value to a string, adding quotes if a string was provided.\n */\nfunction quoteString(value) {\n    try {\n        return typeof value === 'string' ? JSON.stringify(value) : String(value);\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    }\n    catch (_ignoreError) {\n        return JSON.stringify(value);\n    }\n}\n\n/**\n * Returns true if the key is defined in the provided collection.\n *\n * A functional alternative to `collection.has(key)` which will also work with\n * plain Objects and Arrays as an alternative for\n * `collection.hasOwnProperty(key)`.\n */\nfunction has(collection, key) {\n    return isImmutable(collection)\n        ? // @ts-expect-error key might be a number or symbol, which is not handled be Record key type\n            collection.has(key)\n        : // @ts-expect-error key might be anything else than PropertyKey, and will return false in that case but runtime is OK\n            isDataStructure(collection) && hasOwnProperty.call(collection, key);\n}\n\nfunction get(collection, key, notSetValue) {\n    return isImmutable(collection)\n        ? collection.get(key, notSetValue)\n        : !has(collection, key)\n            ? notSetValue\n            : // @ts-expect-error weird \"get\" here,\n                typeof collection.get === 'function'\n                    ? // @ts-expect-error weird \"get\" here,\n                        collection.get(key)\n                    : // @ts-expect-error key is unknown here,\n                        collection[key];\n}\n\nfunction remove(collection, key) {\n    if (!isDataStructure(collection)) {\n        throw new TypeError('Cannot update non-data-structure value: ' + collection);\n    }\n    if (isImmutable(collection)) {\n        // @ts-expect-error weird \"remove\" here,\n        if (!collection.remove) {\n            throw new TypeError('Cannot update immutable value without .remove() method: ' + collection);\n        }\n        // @ts-expect-error weird \"remove\" here,\n        return collection.remove(key);\n    }\n    // @ts-expect-error assert that key is a string, a number or a symbol here\n    if (!hasOwnProperty.call(collection, key)) {\n        return collection;\n    }\n    var collectionCopy = shallowCopy(collection);\n    if (Array.isArray(collectionCopy)) {\n        // @ts-expect-error assert that key is a number here\n        collectionCopy.splice(key, 1);\n    }\n    else {\n        // @ts-expect-error assert that key is a string, a number or a symbol here\n        delete collectionCopy[key];\n    }\n    return collectionCopy;\n}\n\nfunction set(collection, key, value) {\n    if (isProtoKey(key)) {\n        return collection;\n    }\n    if (!isDataStructure(collection)) {\n        throw new TypeError('Cannot update non-data-structure value: ' + collection);\n    }\n    if (isImmutable(collection)) {\n        // @ts-expect-error weird \"set\" here,\n        if (!collection.set) {\n            throw new TypeError('Cannot update immutable value without .set() method: ' + collection);\n        }\n        // @ts-expect-error weird \"set\" here,\n        return collection.set(key, value);\n    }\n    // @ts-expect-error mix of key and string here. Probably need a more fine type here\n    if (hasOwnProperty.call(collection, key) && value === collection[key]) {\n        return collection;\n    }\n    var collectionCopy = shallowCopy(collection);\n    // @ts-expect-error mix of key and string here. Probably need a more fine type here\n    collectionCopy[key] = value;\n    return collectionCopy;\n}\n\nfunction updateIn(collection, keyPath, notSetValue, updater) {\n    if (!updater) {\n        // handle the fact that `notSetValue` is optional here, in that case `updater` is the updater function\n        // @ts-expect-error updater is a function here\n        updater = notSetValue;\n        notSetValue = undefined;\n    }\n    var updatedValue = updateInDeeply(isImmutable(collection), \n    // @ts-expect-error type issues with Record and mixed types\n    collection, coerceKeyPath(keyPath), 0, notSetValue, updater);\n    // @ts-expect-error mixed return type\n    return updatedValue === NOT_SET ? notSetValue : updatedValue;\n}\nfunction updateInDeeply(inImmutable, existing, keyPath, i, notSetValue, updater) {\n    var wasNotSet = existing === NOT_SET;\n    if (i === keyPath.length) {\n        var existingValue = wasNotSet ? notSetValue : existing;\n        // @ts-expect-error mixed type with optional value\n        var newValue = updater(existingValue);\n        // @ts-expect-error mixed type\n        return newValue === existingValue ? existing : newValue;\n    }\n    if (!wasNotSet && !isDataStructure(existing)) {\n        throw new TypeError('Cannot update within non-data-structure value in path [' +\n            Array.from(keyPath).slice(0, i).map(quoteString) +\n            ']: ' +\n            existing);\n    }\n    var key = keyPath[i];\n    var nextExisting = wasNotSet ? NOT_SET : get(existing, key, NOT_SET);\n    var nextUpdated = updateInDeeply(nextExisting === NOT_SET ? inImmutable : isImmutable(nextExisting), \n    // @ts-expect-error mixed type\n    nextExisting, keyPath, i + 1, notSetValue, updater);\n    return nextUpdated === nextExisting\n        ? existing\n        : nextUpdated === NOT_SET\n            ? remove(existing, key)\n            : set(wasNotSet ? (inImmutable ? emptyMap() : {}) : existing, key, nextUpdated);\n}\n\n/**\n * Returns a copy of the collection with the value at the key path removed.\n *\n * A functional alternative to `collection.removeIn(keypath)` which will also\n * work with plain Objects and Arrays.\n */\nfunction removeIn(collection, keyPath) {\n    return updateIn(collection, keyPath, function () { return NOT_SET; });\n}\n\nfunction deleteIn(keyPath) {\n  return removeIn(this, keyPath);\n}\n\nvar IS_LIST_SYMBOL = '@@__IMMUTABLE_LIST__@@';\n/**\n * True if `maybeList` is a List.\n */\nfunction isList(maybeList) {\n    return Boolean(maybeList &&\n        // @ts-expect-error: maybeList is typed as `{}`, need to change in 6.0 to `maybeList && typeof maybeList === 'object' && IS_LIST_SYMBOL in maybeList`\n        maybeList[IS_LIST_SYMBOL]);\n}\n\nvar List = /*@__PURE__*/(function (IndexedCollection) {\n  function List(value) {\n    var empty = emptyList();\n    if (value === undefined || value === null) {\n      // eslint-disable-next-line no-constructor-return\n      return empty;\n    }\n    if (isList(value)) {\n      // eslint-disable-next-line no-constructor-return\n      return value;\n    }\n    var iter = IndexedCollection(value);\n    var size = iter.size;\n    if (size === 0) {\n      // eslint-disable-next-line no-constructor-return\n      return empty;\n    }\n    assertNotInfinite(size);\n    if (size > 0 && size < SIZE) {\n      // eslint-disable-next-line no-constructor-return\n      return makeList(0, size, SHIFT, null, new VNode(iter.toArray()));\n    }\n    // eslint-disable-next-line no-constructor-return\n    return empty.withMutations(function (list) {\n      list.setSize(size);\n      iter.forEach(function (v, i) { return list.set(i, v); });\n    });\n  }\n\n  if ( IndexedCollection ) List.__proto__ = IndexedCollection;\n  List.prototype = Object.create( IndexedCollection && IndexedCollection.prototype );\n  List.prototype.constructor = List;\n\n  List.of = function of (/*...values*/) {\n    return this(arguments);\n  };\n\n  List.prototype.toString = function toString () {\n    return this.__toString('List [', ']');\n  };\n\n  // @pragma Access\n\n  List.prototype.get = function get (index, notSetValue) {\n    index = wrapIndex(this, index);\n    if (index >= 0 && index < this.size) {\n      index += this._origin;\n      var node = listNodeFor(this, index);\n      return node && node.array[index & MASK];\n    }\n    return notSetValue;\n  };\n\n  // @pragma Modification\n\n  List.prototype.set = function set (index, value) {\n    return updateList(this, index, value);\n  };\n\n  List.prototype.remove = function remove (index) {\n    return !this.has(index)\n      ? this\n      : index === 0\n        ? this.shift()\n        : index === this.size - 1\n          ? this.pop()\n          : this.splice(index, 1);\n  };\n\n  List.prototype.insert = function insert (index, value) {\n    return this.splice(index, 0, value);\n  };\n\n  List.prototype.clear = function clear () {\n    if (this.size === 0) {\n      return this;\n    }\n    if (this.__ownerID) {\n      this.size = this._origin = this._capacity = 0;\n      this._level = SHIFT;\n      this._root = this._tail = this.__hash = undefined;\n      this.__altered = true;\n      return this;\n    }\n    return emptyList();\n  };\n\n  List.prototype.push = function push (/*...values*/) {\n    var values = arguments;\n    var oldSize = this.size;\n    return this.withMutations(function (list) {\n      setListBounds(list, 0, oldSize + values.length);\n      for (var ii = 0; ii < values.length; ii++) {\n        list.set(oldSize + ii, values[ii]);\n      }\n    });\n  };\n\n  List.prototype.pop = function pop () {\n    return setListBounds(this, 0, -1);\n  };\n\n  List.prototype.unshift = function unshift (/*...values*/) {\n    var values = arguments;\n    return this.withMutations(function (list) {\n      setListBounds(list, -values.length);\n      for (var ii = 0; ii < values.length; ii++) {\n        list.set(ii, values[ii]);\n      }\n    });\n  };\n\n  List.prototype.shift = function shift () {\n    return setListBounds(this, 1);\n  };\n\n  List.prototype.shuffle = function shuffle (random) {\n    if ( random === void 0 ) random = Math.random;\n\n    return this.withMutations(function (mutable) {\n      // implementation of the Fisher-Yates shuffle: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle\n      var current = mutable.size;\n      var destination;\n      var tmp;\n\n      while (current) {\n        destination = Math.floor(random() * current--);\n\n        tmp = mutable.get(destination);\n        mutable.set(destination, mutable.get(current));\n        mutable.set(current, tmp);\n      }\n    });\n  };\n\n  // @pragma Composition\n\n  List.prototype.concat = function concat (/*...collections*/) {\n    var arguments$1 = arguments;\n\n    var seqs = [];\n    for (var i = 0; i < arguments.length; i++) {\n      var argument = arguments$1[i];\n      var seq = IndexedCollection(\n        typeof argument !== 'string' && hasIterator(argument)\n          ? argument\n          : [argument]\n      );\n      if (seq.size !== 0) {\n        seqs.push(seq);\n      }\n    }\n    if (seqs.length === 0) {\n      return this;\n    }\n    if (this.size === 0 && !this.__ownerID && seqs.length === 1) {\n      return this.constructor(seqs[0]);\n    }\n    return this.withMutations(function (list) {\n      seqs.forEach(function (seq) { return seq.forEach(function (value) { return list.push(value); }); });\n    });\n  };\n\n  List.prototype.setSize = function setSize (size) {\n    return setListBounds(this, 0, size);\n  };\n\n  List.prototype.map = function map (mapper, context) {\n    var this$1$1 = this;\n\n    return this.withMutations(function (list) {\n      for (var i = 0; i < this$1$1.size; i++) {\n        list.set(i, mapper.call(context, list.get(i), i, this$1$1));\n      }\n    });\n  };\n\n  // @pragma Iteration\n\n  List.prototype.slice = function slice (begin, end) {\n    var size = this.size;\n    if (wholeSlice(begin, end, size)) {\n      return this;\n    }\n    return setListBounds(\n      this,\n      resolveBegin(begin, size),\n      resolveEnd(end, size)\n    );\n  };\n\n  List.prototype.__iterator = function __iterator (type, reverse) {\n    var index = reverse ? this.size : 0;\n    var values = iterateList(this, reverse);\n    return new Iterator(function () {\n      var value = values();\n      return value === DONE\n        ? iteratorDone()\n        : iteratorValue(type, reverse ? --index : index++, value);\n    });\n  };\n\n  List.prototype.__iterate = function __iterate (fn, reverse) {\n    var index = reverse ? this.size : 0;\n    var values = iterateList(this, reverse);\n    var value;\n    while ((value = values()) !== DONE) {\n      if (fn(value, reverse ? --index : index++, this) === false) {\n        break;\n      }\n    }\n    return index;\n  };\n\n  List.prototype.__ensureOwner = function __ensureOwner (ownerID) {\n    if (ownerID === this.__ownerID) {\n      return this;\n    }\n    if (!ownerID) {\n      if (this.size === 0) {\n        return emptyList();\n      }\n      this.__ownerID = ownerID;\n      this.__altered = false;\n      return this;\n    }\n    return makeList(\n      this._origin,\n      this._capacity,\n      this._level,\n      this._root,\n      this._tail,\n      ownerID,\n      this.__hash\n    );\n  };\n\n  return List;\n}(IndexedCollection));\n\nList.isList = isList;\n\nvar ListPrototype = List.prototype;\nListPrototype[IS_LIST_SYMBOL] = true;\nListPrototype[DELETE] = ListPrototype.remove;\nListPrototype.merge = ListPrototype.concat;\nListPrototype.setIn = setIn;\nListPrototype.deleteIn = ListPrototype.removeIn = deleteIn;\nListPrototype.update = update;\nListPrototype.updateIn = updateIn$1;\nListPrototype.mergeIn = mergeIn;\nListPrototype.mergeDeepIn = mergeDeepIn;\nListPrototype.withMutations = withMutations;\nListPrototype.wasAltered = wasAltered;\nListPrototype.asImmutable = asImmutable;\nListPrototype['@@transducer/init'] = ListPrototype.asMutable = asMutable;\nListPrototype['@@transducer/step'] = function (result, arr) {\n  return result.push(arr);\n};\nListPrototype['@@transducer/result'] = function (obj) {\n  return obj.asImmutable();\n};\n\nvar VNode = function VNode(array, ownerID) {\n  this.array = array;\n  this.ownerID = ownerID;\n};\n\n// TODO: seems like these methods are very similar\n\nVNode.prototype.removeBefore = function removeBefore (ownerID, level, index) {\n  if (\n    (index & ((1 << (level + SHIFT)) - 1)) === 0 ||\n    this.array.length === 0\n  ) {\n    return this;\n  }\n  var originIndex = (index >>> level) & MASK;\n  if (originIndex >= this.array.length) {\n    return new VNode([], ownerID);\n  }\n  var removingFirst = originIndex === 0;\n  var newChild;\n  if (level > 0) {\n    var oldChild = this.array[originIndex];\n    newChild =\n      oldChild && oldChild.removeBefore(ownerID, level - SHIFT, index);\n    if (newChild === oldChild && removingFirst) {\n      return this;\n    }\n  }\n  if (removingFirst && !newChild) {\n    return this;\n  }\n  var editable = editableVNode(this, ownerID);\n  if (!removingFirst) {\n    for (var ii = 0; ii < originIndex; ii++) {\n      editable.array[ii] = undefined;\n    }\n  }\n  if (newChild) {\n    editable.array[originIndex] = newChild;\n  }\n  return editable;\n};\n\nVNode.prototype.removeAfter = function removeAfter (ownerID, level, index) {\n  if (\n    index === (level ? 1 << (level + SHIFT) : SIZE) ||\n    this.array.length === 0\n  ) {\n    return this;\n  }\n  var sizeIndex = ((index - 1) >>> level) & MASK;\n  if (sizeIndex >= this.array.length) {\n    return this;\n  }\n\n  var newChild;\n  if (level > 0) {\n    var oldChild = this.array[sizeIndex];\n    newChild =\n      oldChild && oldChild.removeAfter(ownerID, level - SHIFT, index);\n    if (newChild === oldChild && sizeIndex === this.array.length - 1) {\n      return this;\n    }\n  }\n\n  var editable = editableVNode(this, ownerID);\n  editable.array.splice(sizeIndex + 1);\n  if (newChild) {\n    editable.array[sizeIndex] = newChild;\n  }\n  return editable;\n};\n\nvar DONE = {};\n\nfunction iterateList(list, reverse) {\n  var left = list._origin;\n  var right = list._capacity;\n  var tailPos = getTailOffset(right);\n  var tail = list._tail;\n\n  return iterateNodeOrLeaf(list._root, list._level, 0);\n\n  function iterateNodeOrLeaf(node, level, offset) {\n    return level === 0\n      ? iterateLeaf(node, offset)\n      : iterateNode(node, level, offset);\n  }\n\n  function iterateLeaf(node, offset) {\n    var array = offset === tailPos ? tail && tail.array : node && node.array;\n    var from = offset > left ? 0 : left - offset;\n    var to = right - offset;\n    if (to > SIZE) {\n      to = SIZE;\n    }\n    return function () {\n      if (from === to) {\n        return DONE;\n      }\n      var idx = reverse ? --to : from++;\n      return array && array[idx];\n    };\n  }\n\n  function iterateNode(node, level, offset) {\n    var values;\n    var array = node && node.array;\n    var from = offset > left ? 0 : (left - offset) >> level;\n    var to = ((right - offset) >> level) + 1;\n    if (to > SIZE) {\n      to = SIZE;\n    }\n    return function () {\n      while (true) {\n        if (values) {\n          var value = values();\n          if (value !== DONE) {\n            return value;\n          }\n          values = null;\n        }\n        if (from === to) {\n          return DONE;\n        }\n        var idx = reverse ? --to : from++;\n        values = iterateNodeOrLeaf(\n          array && array[idx],\n          level - SHIFT,\n          offset + (idx << level)\n        );\n      }\n    };\n  }\n}\n\nfunction makeList(origin, capacity, level, root, tail, ownerID, hash) {\n  var list = Object.create(ListPrototype);\n  list.size = capacity - origin;\n  list._origin = origin;\n  list._capacity = capacity;\n  list._level = level;\n  list._root = root;\n  list._tail = tail;\n  list.__ownerID = ownerID;\n  list.__hash = hash;\n  list.__altered = false;\n  return list;\n}\n\nfunction emptyList() {\n  return makeList(0, 0, SHIFT);\n}\n\nfunction updateList(list, index, value) {\n  index = wrapIndex(list, index);\n\n  if (index !== index) {\n    return list;\n  }\n\n  if (index >= list.size || index < 0) {\n    return list.withMutations(function (list) {\n      // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here\n      index < 0\n        ? setListBounds(list, index).set(0, value)\n        : setListBounds(list, 0, index + 1).set(index, value);\n    });\n  }\n\n  index += list._origin;\n\n  var newTail = list._tail;\n  var newRoot = list._root;\n  var didAlter = MakeRef();\n  if (index >= getTailOffset(list._capacity)) {\n    newTail = updateVNode(newTail, list.__ownerID, 0, index, value, didAlter);\n  } else {\n    newRoot = updateVNode(\n      newRoot,\n      list.__ownerID,\n      list._level,\n      index,\n      value,\n      didAlter\n    );\n  }\n\n  if (!didAlter.value) {\n    return list;\n  }\n\n  if (list.__ownerID) {\n    list._root = newRoot;\n    list._tail = newTail;\n    list.__hash = undefined;\n    list.__altered = true;\n    return list;\n  }\n  return makeList(list._origin, list._capacity, list._level, newRoot, newTail);\n}\n\nfunction updateVNode(node, ownerID, level, index, value, didAlter) {\n  var idx = (index >>> level) & MASK;\n  var nodeHas = node && idx < node.array.length;\n  if (!nodeHas && value === undefined) {\n    return node;\n  }\n\n  var newNode;\n\n  if (level > 0) {\n    var lowerNode = node && node.array[idx];\n    var newLowerNode = updateVNode(\n      lowerNode,\n      ownerID,\n      level - SHIFT,\n      index,\n      value,\n      didAlter\n    );\n    if (newLowerNode === lowerNode) {\n      return node;\n    }\n    newNode = editableVNode(node, ownerID);\n    newNode.array[idx] = newLowerNode;\n    return newNode;\n  }\n\n  if (nodeHas && node.array[idx] === value) {\n    return node;\n  }\n\n  if (didAlter) {\n    SetRef(didAlter);\n  }\n\n  newNode = editableVNode(node, ownerID);\n  if (value === undefined && idx === newNode.array.length - 1) {\n    newNode.array.pop();\n  } else {\n    newNode.array[idx] = value;\n  }\n  return newNode;\n}\n\nfunction editableVNode(node, ownerID) {\n  if (ownerID && node && ownerID === node.ownerID) {\n    return node;\n  }\n  return new VNode(node ? node.array.slice() : [], ownerID);\n}\n\nfunction listNodeFor(list, rawIndex) {\n  if (rawIndex >= getTailOffset(list._capacity)) {\n    return list._tail;\n  }\n  if (rawIndex < 1 << (list._level + SHIFT)) {\n    var node = list._root;\n    var level = list._level;\n    while (node && level > 0) {\n      node = node.array[(rawIndex >>> level) & MASK];\n      level -= SHIFT;\n    }\n    return node;\n  }\n}\n\nfunction setListBounds(list, begin, end) {\n  // Sanitize begin & end using this shorthand for ToInt32(argument)\n  // http://www.ecma-international.org/ecma-262/6.0/#sec-toint32\n  if (begin !== undefined) {\n    begin |= 0;\n  }\n  if (end !== undefined) {\n    end |= 0;\n  }\n  var owner = list.__ownerID || new OwnerID();\n  var oldOrigin = list._origin;\n  var oldCapacity = list._capacity;\n  var newOrigin = oldOrigin + begin;\n  var newCapacity =\n    end === undefined\n      ? oldCapacity\n      : end < 0\n        ? oldCapacity + end\n        : oldOrigin + end;\n  if (newOrigin === oldOrigin && newCapacity === oldCapacity) {\n    return list;\n  }\n\n  // If it's going to end after it starts, it's empty.\n  if (newOrigin >= newCapacity) {\n    return list.clear();\n  }\n\n  var newLevel = list._level;\n  var newRoot = list._root;\n\n  // New origin might need creating a higher root.\n  var offsetShift = 0;\n  while (newOrigin + offsetShift < 0) {\n    newRoot = new VNode(\n      newRoot && newRoot.array.length ? [undefined, newRoot] : [],\n      owner\n    );\n    newLevel += SHIFT;\n    offsetShift += 1 << newLevel;\n  }\n  if (offsetShift) {\n    newOrigin += offsetShift;\n    oldOrigin += offsetShift;\n    newCapacity += offsetShift;\n    oldCapacity += offsetShift;\n  }\n\n  var oldTailOffset = getTailOffset(oldCapacity);\n  var newTailOffset = getTailOffset(newCapacity);\n\n  // New size might need creating a higher root.\n  while (newTailOffset >= 1 << (newLevel + SHIFT)) {\n    newRoot = new VNode(\n      newRoot && newRoot.array.length ? [newRoot] : [],\n      owner\n    );\n    newLevel += SHIFT;\n  }\n\n  // Locate or create the new tail.\n  var oldTail = list._tail;\n  var newTail =\n    newTailOffset < oldTailOffset\n      ? listNodeFor(list, newCapacity - 1)\n      : newTailOffset > oldTailOffset\n        ? new VNode([], owner)\n        : oldTail;\n\n  // Merge Tail into tree.\n  if (\n    oldTail &&\n    newTailOffset > oldTailOffset &&\n    newOrigin < oldCapacity &&\n    oldTail.array.length\n  ) {\n    newRoot = editableVNode(newRoot, owner);\n    var node = newRoot;\n    for (var level = newLevel; level > SHIFT; level -= SHIFT) {\n      var idx = (oldTailOffset >>> level) & MASK;\n      node = node.array[idx] = editableVNode(node.array[idx], owner);\n    }\n    node.array[(oldTailOffset >>> SHIFT) & MASK] = oldTail;\n  }\n\n  // If the size has been reduced, there's a chance the tail needs to be trimmed.\n  if (newCapacity < oldCapacity) {\n    newTail = newTail && newTail.removeAfter(owner, 0, newCapacity);\n  }\n\n  // If the new origin is within the tail, then we do not need a root.\n  if (newOrigin >= newTailOffset) {\n    newOrigin -= newTailOffset;\n    newCapacity -= newTailOffset;\n    newLevel = SHIFT;\n    newRoot = null;\n    newTail = newTail && newTail.removeBefore(owner, 0, newOrigin);\n\n    // Otherwise, if the root has been trimmed, garbage collect.\n  } else if (newOrigin > oldOrigin || newTailOffset < oldTailOffset) {\n    offsetShift = 0;\n\n    // Identify the new top root node of the subtree of the old root.\n    while (newRoot) {\n      var beginIndex = (newOrigin >>> newLevel) & MASK;\n      if ((beginIndex !== newTailOffset >>> newLevel) & MASK) {\n        break;\n      }\n      if (beginIndex) {\n        offsetShift += (1 << newLevel) * beginIndex;\n      }\n      newLevel -= SHIFT;\n      newRoot = newRoot.array[beginIndex];\n    }\n\n    // Trim the new sides of the new root.\n    if (newRoot && newOrigin > oldOrigin) {\n      newRoot = newRoot.removeBefore(owner, newLevel, newOrigin - offsetShift);\n    }\n    if (newRoot && newTailOffset < oldTailOffset) {\n      newRoot = newRoot.removeAfter(\n        owner,\n        newLevel,\n        newTailOffset - offsetShift\n      );\n    }\n    if (offsetShift) {\n      newOrigin -= offsetShift;\n      newCapacity -= offsetShift;\n    }\n  }\n\n  if (list.__ownerID) {\n    list.size = newCapacity - newOrigin;\n    list._origin = newOrigin;\n    list._capacity = newCapacity;\n    list._level = newLevel;\n    list._root = newRoot;\n    list._tail = newTail;\n    list.__hash = undefined;\n    list.__altered = true;\n    return list;\n  }\n  return makeList(newOrigin, newCapacity, newLevel, newRoot, newTail);\n}\n\nfunction getTailOffset(size) {\n  return size < SIZE ? 0 : ((size - 1) >>> SHIFT) << SHIFT;\n}\n\n/**\n * True if `maybeOrderedMap` is an OrderedMap.\n */\nfunction isOrderedMap(maybeOrderedMap) {\n    return isMap(maybeOrderedMap) && isOrdered(maybeOrderedMap);\n}\n\nvar OrderedMap = /*@__PURE__*/(function (Map) {\n  function OrderedMap(value) {\n    // eslint-disable-next-line no-constructor-return\n    return value === undefined || value === null\n      ? emptyOrderedMap()\n      : isOrderedMap(value)\n        ? value\n        : emptyOrderedMap().withMutations(function (map) {\n            var iter = KeyedCollection(value);\n            assertNotInfinite(iter.size);\n            iter.forEach(function (v, k) { return map.set(k, v); });\n          });\n  }\n\n  if ( Map ) OrderedMap.__proto__ = Map;\n  OrderedMap.prototype = Object.create( Map && Map.prototype );\n  OrderedMap.prototype.constructor = OrderedMap;\n\n  OrderedMap.of = function of (/*...values*/) {\n    return this(arguments);\n  };\n\n  OrderedMap.prototype.toString = function toString () {\n    return this.__toString('OrderedMap {', '}');\n  };\n\n  // @pragma Access\n\n  OrderedMap.prototype.get = function get (k, notSetValue) {\n    var index = this._map.get(k);\n    return index !== undefined ? this._list.get(index)[1] : notSetValue;\n  };\n\n  // @pragma Modification\n\n  OrderedMap.prototype.clear = function clear () {\n    if (this.size === 0) {\n      return this;\n    }\n    if (this.__ownerID) {\n      this.size = 0;\n      this._map.clear();\n      this._list.clear();\n      this.__altered = true;\n      return this;\n    }\n    return emptyOrderedMap();\n  };\n\n  OrderedMap.prototype.set = function set (k, v) {\n    return updateOrderedMap(this, k, v);\n  };\n\n  OrderedMap.prototype.remove = function remove (k) {\n    return updateOrderedMap(this, k, NOT_SET);\n  };\n\n  OrderedMap.prototype.__iterate = function __iterate (fn, reverse) {\n    var this$1$1 = this;\n\n    return this._list.__iterate(\n      function (entry) { return entry && fn(entry[1], entry[0], this$1$1); },\n      reverse\n    );\n  };\n\n  OrderedMap.prototype.__iterator = function __iterator (type, reverse) {\n    return this._list.fromEntrySeq().__iterator(type, reverse);\n  };\n\n  OrderedMap.prototype.__ensureOwner = function __ensureOwner (ownerID) {\n    if (ownerID === this.__ownerID) {\n      return this;\n    }\n    var newMap = this._map.__ensureOwner(ownerID);\n    var newList = this._list.__ensureOwner(ownerID);\n    if (!ownerID) {\n      if (this.size === 0) {\n        return emptyOrderedMap();\n      }\n      this.__ownerID = ownerID;\n      this.__altered = false;\n      this._map = newMap;\n      this._list = newList;\n      return this;\n    }\n    return makeOrderedMap(newMap, newList, ownerID, this.__hash);\n  };\n\n  return OrderedMap;\n}(Map));\n\nOrderedMap.isOrderedMap = isOrderedMap;\n\nOrderedMap.prototype[IS_ORDERED_SYMBOL] = true;\nOrderedMap.prototype[DELETE] = OrderedMap.prototype.remove;\n\nfunction makeOrderedMap(map, list, ownerID, hash) {\n  var omap = Object.create(OrderedMap.prototype);\n  omap.size = map ? map.size : 0;\n  omap._map = map;\n  omap._list = list;\n  omap.__ownerID = ownerID;\n  omap.__hash = hash;\n  omap.__altered = false;\n  return omap;\n}\n\nvar EMPTY_ORDERED_MAP;\nfunction emptyOrderedMap() {\n  return (\n    EMPTY_ORDERED_MAP ||\n    (EMPTY_ORDERED_MAP = makeOrderedMap(emptyMap(), emptyList()))\n  );\n}\n\nfunction updateOrderedMap(omap, k, v) {\n  var map = omap._map;\n  var list = omap._list;\n  var i = map.get(k);\n  var has = i !== undefined;\n  var newMap;\n  var newList;\n  if (v === NOT_SET) {\n    // removed\n    if (!has) {\n      return omap;\n    }\n    if (list.size >= SIZE && list.size >= map.size * 2) {\n      newList = list.filter(function (entry, idx) { return entry !== undefined && i !== idx; });\n      newMap = newList\n        .toKeyedSeq()\n        .map(function (entry) { return entry[0]; })\n        .flip()\n        .toMap();\n      if (omap.__ownerID) {\n        newMap.__ownerID = newList.__ownerID = omap.__ownerID;\n      }\n    } else {\n      newMap = map.remove(k);\n      newList = i === list.size - 1 ? list.pop() : list.set(i, undefined);\n    }\n  } else if (has) {\n    if (v === list.get(i)[1]) {\n      return omap;\n    }\n    newMap = map;\n    newList = list.set(i, [k, v]);\n  } else {\n    newMap = map.set(k, list.size);\n    newList = list.set(list.size, [k, v]);\n  }\n  if (omap.__ownerID) {\n    omap.size = newMap.size;\n    omap._map = newMap;\n    omap._list = newList;\n    omap.__hash = undefined;\n    omap.__altered = true;\n    return omap;\n  }\n  return makeOrderedMap(newMap, newList);\n}\n\nvar IS_STACK_SYMBOL = '@@__IMMUTABLE_STACK__@@';\n/**\n * True if `maybeStack` is a Stack.\n */\nfunction isStack(maybeStack) {\n    return Boolean(maybeStack &&\n        // @ts-expect-error: maybeStack is typed as `{}`, need to change in 6.0 to `maybeStack && typeof maybeStack === 'object' && MAYBE_STACK_SYMBOL in maybeStack`\n        maybeStack[IS_STACK_SYMBOL]);\n}\n\nvar Stack = /*@__PURE__*/(function (IndexedCollection) {\n  function Stack(value) {\n    // eslint-disable-next-line no-constructor-return\n    return value === undefined || value === null\n      ? emptyStack()\n      : isStack(value)\n        ? value\n        : emptyStack().pushAll(value);\n  }\n\n  if ( IndexedCollection ) Stack.__proto__ = IndexedCollection;\n  Stack.prototype = Object.create( IndexedCollection && IndexedCollection.prototype );\n  Stack.prototype.constructor = Stack;\n\n  Stack.of = function of (/*...values*/) {\n    return this(arguments);\n  };\n\n  Stack.prototype.toString = function toString () {\n    return this.__toString('Stack [', ']');\n  };\n\n  // @pragma Access\n\n  Stack.prototype.get = function get (index, notSetValue) {\n    var head = this._head;\n    index = wrapIndex(this, index);\n    while (head && index--) {\n      head = head.next;\n    }\n    return head ? head.value : notSetValue;\n  };\n\n  Stack.prototype.peek = function peek () {\n    return this._head && this._head.value;\n  };\n\n  // @pragma Modification\n\n  Stack.prototype.push = function push (/*...values*/) {\n    var arguments$1 = arguments;\n\n    if (arguments.length === 0) {\n      return this;\n    }\n    var newSize = this.size + arguments.length;\n    var head = this._head;\n    for (var ii = arguments.length - 1; ii >= 0; ii--) {\n      head = {\n        value: arguments$1[ii],\n        next: head,\n      };\n    }\n    if (this.__ownerID) {\n      this.size = newSize;\n      this._head = head;\n      this.__hash = undefined;\n      this.__altered = true;\n      return this;\n    }\n    return makeStack(newSize, head);\n  };\n\n  Stack.prototype.pushAll = function pushAll (iter) {\n    iter = IndexedCollection(iter);\n    if (iter.size === 0) {\n      return this;\n    }\n    if (this.size === 0 && isStack(iter)) {\n      return iter;\n    }\n    assertNotInfinite(iter.size);\n    var newSize = this.size;\n    var head = this._head;\n    iter.__iterate(function (value) {\n      newSize++;\n      head = {\n        value: value,\n        next: head,\n      };\n    }, /* reverse */ true);\n    if (this.__ownerID) {\n      this.size = newSize;\n      this._head = head;\n      this.__hash = undefined;\n      this.__altered = true;\n      return this;\n    }\n    return makeStack(newSize, head);\n  };\n\n  Stack.prototype.pop = function pop () {\n    return this.slice(1);\n  };\n\n  Stack.prototype.clear = function clear () {\n    if (this.size === 0) {\n      return this;\n    }\n    if (this.__ownerID) {\n      this.size = 0;\n      this._head = undefined;\n      this.__hash = undefined;\n      this.__altered = true;\n      return this;\n    }\n    return emptyStack();\n  };\n\n  Stack.prototype.slice = function slice (begin, end) {\n    if (wholeSlice(begin, end, this.size)) {\n      return this;\n    }\n    var resolvedBegin = resolveBegin(begin, this.size);\n    var resolvedEnd = resolveEnd(end, this.size);\n    if (resolvedEnd !== this.size) {\n      // super.slice(begin, end);\n      return IndexedCollection.prototype.slice.call(this, begin, end);\n    }\n    var newSize = this.size - resolvedBegin;\n    var head = this._head;\n    while (resolvedBegin--) {\n      head = head.next;\n    }\n    if (this.__ownerID) {\n      this.size = newSize;\n      this._head = head;\n      this.__hash = undefined;\n      this.__altered = true;\n      return this;\n    }\n    return makeStack(newSize, head);\n  };\n\n  // @pragma Mutability\n\n  Stack.prototype.__ensureOwner = function __ensureOwner (ownerID) {\n    if (ownerID === this.__ownerID) {\n      return this;\n    }\n    if (!ownerID) {\n      if (this.size === 0) {\n        return emptyStack();\n      }\n      this.__ownerID = ownerID;\n      this.__altered = false;\n      return this;\n    }\n    return makeStack(this.size, this._head, ownerID, this.__hash);\n  };\n\n  // @pragma Iteration\n\n  Stack.prototype.__iterate = function __iterate (fn, reverse) {\n    var this$1$1 = this;\n\n    if (reverse) {\n      return new ArraySeq(this.toArray()).__iterate(\n        function (v, k) { return fn(v, k, this$1$1); },\n        reverse\n      );\n    }\n    var iterations = 0;\n    var node = this._head;\n    while (node) {\n      if (fn(node.value, iterations++, this) === false) {\n        break;\n      }\n      node = node.next;\n    }\n    return iterations;\n  };\n\n  Stack.prototype.__iterator = function __iterator (type, reverse) {\n    if (reverse) {\n      return new ArraySeq(this.toArray()).__iterator(type, reverse);\n    }\n    var iterations = 0;\n    var node = this._head;\n    return new Iterator(function () {\n      if (node) {\n        var value = node.value;\n        node = node.next;\n        return iteratorValue(type, iterations++, value);\n      }\n      return iteratorDone();\n    });\n  };\n\n  return Stack;\n}(IndexedCollection));\n\nStack.isStack = isStack;\n\nvar StackPrototype = Stack.prototype;\nStackPrototype[IS_STACK_SYMBOL] = true;\nStackPrototype.shift = StackPrototype.pop;\nStackPrototype.unshift = StackPrototype.push;\nStackPrototype.unshiftAll = StackPrototype.pushAll;\nStackPrototype.withMutations = withMutations;\nStackPrototype.wasAltered = wasAltered;\nStackPrototype.asImmutable = asImmutable;\nStackPrototype['@@transducer/init'] = StackPrototype.asMutable = asMutable;\nStackPrototype['@@transducer/step'] = function (result, arr) {\n  return result.unshift(arr);\n};\nStackPrototype['@@transducer/result'] = function (obj) {\n  return obj.asImmutable();\n};\n\nfunction makeStack(size, head, ownerID, hash) {\n  var map = Object.create(StackPrototype);\n  map.size = size;\n  map._head = head;\n  map.__ownerID = ownerID;\n  map.__hash = hash;\n  map.__altered = false;\n  return map;\n}\n\nvar EMPTY_STACK;\nfunction emptyStack() {\n  return EMPTY_STACK || (EMPTY_STACK = makeStack(0));\n}\n\nfunction reduce(collection, reducer, reduction, context, useFirst, reverse) {\n    // @ts-expect-error Migrate to CollectionImpl in v6\n    assertNotInfinite(collection.size);\n    // @ts-expect-error Migrate to CollectionImpl in v6\n    collection.__iterate(function (v, k, c) {\n        if (useFirst) {\n            useFirst = false;\n            reduction = v;\n        }\n        else {\n            // `reduction` has already been seeded here (either with the provided\n            // initial value or with the first iterated value), so it is never the\n            // `undefined` placeholder — only a `V` or a `R`.\n            reduction = reducer.call(context, reduction, v, k, c);\n        }\n    }, reverse);\n    return reduction;\n}\nfunction keyMapper(v, k) {\n    return k;\n}\nfunction entryMapper(v, k) {\n    return [k, v];\n}\nfunction not(predicate) {\n    return function () {\n        var args = [], len = arguments.length;\n        while ( len-- ) args[ len ] = arguments[ len ];\n\n        return !predicate.apply(this, args);\n    };\n}\nfunction neg(predicate) {\n    return function () {\n        var args = [], len = arguments.length;\n        while ( len-- ) args[ len ] = arguments[ len ];\n\n        return -predicate.apply(this, args);\n    };\n}\nfunction defaultNegComparator(a, b) {\n    return a < b ? 1 : a > b ? -1 : 0;\n}\n\nfunction deepEqual(a, b) {\n    if (a === b) {\n        return true;\n    }\n    if (!isCollection(b) ||\n        // @ts-expect-error size should exists on Collection\n        (a.size !== undefined && b.size !== undefined && a.size !== b.size) ||\n        // @ts-expect-error __hash exists on Collection\n        (a.__hash !== undefined &&\n            // @ts-expect-error __hash exists on Collection\n            b.__hash !== undefined &&\n            // @ts-expect-error __hash exists on Collection\n            a.__hash !== b.__hash) ||\n        isKeyed(a) !== isKeyed(b) ||\n        isIndexed(a) !== isIndexed(b) ||\n        // @ts-expect-error Range extends Collection, which implements [Symbol.iterator], so it is valid\n        isOrdered(a) !== isOrdered(b)) {\n        return false;\n    }\n    // @ts-expect-error size should exists on Collection\n    if (a.size === 0 && b.size === 0) {\n        return true;\n    }\n    var notAssociative = !isAssociative(a);\n    // @ts-expect-error Range extends Collection, which implements [Symbol.iterator], so it is valid\n    if (isOrdered(a)) {\n        var entries = a.entries();\n        // @ts-expect-error need to cast as boolean\n        return (b.every(function (v, k) {\n            var entry = entries.next().value;\n            return entry && is(entry[1], v) && (notAssociative || is(entry[0], k));\n        }) && entries.next().done);\n    }\n    var flipped = false;\n    if (a.size === undefined) {\n        // @ts-expect-error size should exists on Collection\n        if (b.size === undefined) {\n            if (typeof a.cacheResult === 'function') {\n                a.cacheResult();\n            }\n        }\n        else {\n            flipped = true;\n            var _ = a;\n            a = b;\n            b = _;\n        }\n    }\n    var allEqual = true;\n    var bSize = \n    // @ts-expect-error b is Range | Repeat | Collection<unknown, unknown> as it may have been flipped, and __iterate is valid\n    b.__iterate(function (v, k) {\n        if (notAssociative\n            ? // @ts-expect-error has exists on Collection\n                !a.has(v)\n            : flipped\n                ? // @ts-expect-error type of `get` does not \"catch\" the version with `notSetValue`\n                    !is(v, a.get(k, NOT_SET))\n                : // @ts-expect-error type of `get` does not \"catch\" the version with `notSetValue`\n                    !is(a.get(k, NOT_SET), v)) {\n            allEqual = false;\n            return false;\n        }\n    });\n    return (allEqual &&\n        // @ts-expect-error size should exists on Collection\n        a.size === bSize);\n}\n\n/**\n * Returns a lazy seq of nums from start (inclusive) to end\n * (exclusive), by step, where start defaults to 0, step to 1, and end to\n * infinity. When start is equal to end, returns empty list.\n */\nvar Range = /*@__PURE__*/(function (IndexedSeq) {\n  function Range(start, end, step) {\n    if ( step === void 0 ) step = 1;\n\n    if (!(this instanceof Range)) {\n      // eslint-disable-next-line no-constructor-return\n      return new Range(start, end, step);\n    }\n    invariant(step !== 0, 'Cannot step a Range by 0');\n    invariant(\n      start !== undefined,\n      'You must define a start value when using Range'\n    );\n    invariant(\n      end !== undefined,\n      'You must define an end value when using Range'\n    );\n\n    step = Math.abs(step);\n    if (end < start) {\n      step = -step;\n    }\n    this._start = start;\n    this._end = end;\n    this._step = step;\n    this.size = Math.max(0, Math.ceil((end - start) / step - 1) + 1);\n    if (this.size === 0) {\n      if (EMPTY_RANGE) {\n        // eslint-disable-next-line no-constructor-return\n        return EMPTY_RANGE;\n      }\n      // eslint-disable-next-line @typescript-eslint/no-this-alias\n      EMPTY_RANGE = this;\n    }\n  }\n\n  if ( IndexedSeq ) Range.__proto__ = IndexedSeq;\n  Range.prototype = Object.create( IndexedSeq && IndexedSeq.prototype );\n  Range.prototype.constructor = Range;\n\n  Range.prototype.toString = function toString () {\n    return this.size === 0\n      ? 'Range []'\n      : (\"Range [ \" + (this._start) + \"...\" + (this._end) + (this._step !== 1 ? ' by ' + this._step : '') + \" ]\");\n  };\n\n  Range.prototype.get = function get (index, notSetValue) {\n    return this.has(index)\n      ? this._start + wrapIndex(this, index) * this._step\n      : notSetValue;\n  };\n\n  Range.prototype.includes = function includes (searchValue) {\n    var possibleIndex = (searchValue - this._start) / this._step;\n    return (\n      possibleIndex >= 0 &&\n      possibleIndex < this.size &&\n      possibleIndex === Math.floor(possibleIndex)\n    );\n  };\n\n  Range.prototype.slice = function slice (begin, end) {\n    if (wholeSlice(begin, end, this.size)) {\n      return this;\n    }\n    begin = resolveBegin(begin, this.size);\n    end = resolveEnd(end, this.size);\n    if (end <= begin) {\n      return new Range(0, 0);\n    }\n    return new Range(\n      this.get(begin, this._end),\n      this.get(end, this._end),\n      this._step\n    );\n  };\n\n  Range.prototype.indexOf = function indexOf (searchValue) {\n    var offsetValue = searchValue - this._start;\n    if (offsetValue % this._step === 0) {\n      var index = offsetValue / this._step;\n      if (index >= 0 && index < this.size) {\n        return index;\n      }\n    }\n    return -1;\n  };\n\n  Range.prototype.lastIndexOf = function lastIndexOf (searchValue) {\n    return this.indexOf(searchValue);\n  };\n\n  Range.prototype.__iterate = function __iterate (fn, reverse) {\n    var size = this.size;\n    var step = this._step;\n    var value = reverse ? this._start + (size - 1) * step : this._start;\n    var i = 0;\n    while (i !== size) {\n      if (fn(value, reverse ? size - ++i : i++, this) === false) {\n        break;\n      }\n      value += reverse ? -step : step;\n    }\n    return i;\n  };\n\n  Range.prototype.__iterator = function __iterator (type, reverse) {\n    var size = this.size;\n    var step = this._step;\n    var value = reverse ? this._start + (size - 1) * step : this._start;\n    var i = 0;\n    return new Iterator(function () {\n      if (i === size) {\n        return iteratorDone();\n      }\n      var v = value;\n      value += reverse ? -step : step;\n      return iteratorValue(type, reverse ? size - ++i : i++, v);\n    });\n  };\n\n  Range.prototype.equals = function equals (other) {\n    return other instanceof Range\n      ? this._start === other._start &&\n          this._end === other._end &&\n          this._step === other._step\n      : deepEqual(this, other);\n  };\n\n  return Range;\n}(IndexedSeq));\n\nvar EMPTY_RANGE;\n\nvar IS_SET_SYMBOL = '@@__IMMUTABLE_SET__@@';\n/**\n * True if `maybeSet` is a Set.\n *\n * Also true for OrderedSets.\n */\nfunction isSet(maybeSet) {\n    return Boolean(maybeSet &&\n        // @ts-expect-error: maybeSet is typed as `{}`,  need to change in 6.0 to `maybeSeq && typeof maybeSet === 'object' && MAYBE_SET_SYMBOL in maybeSet`\n        maybeSet[IS_SET_SYMBOL]);\n}\n\nvar Set = /*@__PURE__*/(function (SetCollection) {\n  function Set(value) {\n    // eslint-disable-next-line no-constructor-return\n    return value === undefined || value === null\n      ? emptySet()\n      : isSet(value) && !isOrdered(value)\n        ? value\n        : emptySet().withMutations(function (set) {\n            var iter = SetCollection(value);\n            assertNotInfinite(iter.size);\n            iter.forEach(function (v) { return set.add(v); });\n          });\n  }\n\n  if ( SetCollection ) Set.__proto__ = SetCollection;\n  Set.prototype = Object.create( SetCollection && SetCollection.prototype );\n  Set.prototype.constructor = Set;\n\n  Set.of = function of (/*...values*/) {\n    return this(arguments);\n  };\n\n  Set.fromKeys = function fromKeys (value) {\n    return this(KeyedCollection(value).keySeq());\n  };\n\n  Set.intersect = function intersect (sets) {\n    sets = Collection(sets).toArray();\n    return sets.length\n      ? SetPrototype.intersect.apply(Set(sets.pop()), sets)\n      : emptySet();\n  };\n\n  Set.union = function union (sets) {\n    sets = Collection(sets).toArray();\n    return sets.length\n      ? SetPrototype.union.apply(Set(sets.pop()), sets)\n      : emptySet();\n  };\n\n  Set.prototype.toString = function toString () {\n    return this.__toString('Set {', '}');\n  };\n\n  // @pragma Access\n\n  Set.prototype.has = function has (value) {\n    return this._map.has(value);\n  };\n\n  // @pragma Modification\n\n  Set.prototype.add = function add (value) {\n    return updateSet(this, this._map.set(value, value));\n  };\n\n  Set.prototype.remove = function remove (value) {\n    return updateSet(this, this._map.remove(value));\n  };\n\n  Set.prototype.clear = function clear () {\n    return updateSet(this, this._map.clear());\n  };\n\n  // @pragma Composition\n\n  Set.prototype.map = function map (mapper, context) {\n    var this$1$1 = this;\n\n    // keep track if the set is altered by the map function\n    var didChanges = false;\n\n    var newMap = updateSet(\n      this,\n      this._map.mapEntries(function (ref) {\n        var v = ref[1];\n\n        var mapped = mapper.call(context, v, v, this$1$1);\n\n        if (mapped !== v) {\n          didChanges = true;\n        }\n\n        return [mapped, mapped];\n      }, context)\n    );\n\n    return didChanges ? newMap : this;\n  };\n\n  Set.prototype.union = function union () {\n    var iters = [], len = arguments.length;\n    while ( len-- ) iters[ len ] = arguments[ len ];\n\n    iters = iters.filter(function (x) { return x.size !== 0; });\n    if (iters.length === 0) {\n      return this;\n    }\n    if (this.size === 0 && !this.__ownerID && iters.length === 1) {\n      return this.constructor(iters[0]);\n    }\n    return this.withMutations(function (set) {\n      for (var ii = 0; ii < iters.length; ii++) {\n        if (typeof iters[ii] === 'string') {\n          set.add(iters[ii]);\n        } else {\n          SetCollection(iters[ii]).forEach(function (value) { return set.add(value); });\n        }\n      }\n    });\n  };\n\n  Set.prototype.intersect = function intersect () {\n    var iters = [], len = arguments.length;\n    while ( len-- ) iters[ len ] = arguments[ len ];\n\n    if (iters.length === 0) {\n      return this;\n    }\n    iters = iters.map(function (iter) { return SetCollection(iter); });\n    var toRemove = [];\n    this.forEach(function (value) {\n      if (!iters.every(function (iter) { return iter.includes(value); })) {\n        toRemove.push(value);\n      }\n    });\n    return this.withMutations(function (set) {\n      toRemove.forEach(function (value) {\n        set.remove(value);\n      });\n    });\n  };\n\n  Set.prototype.subtract = function subtract () {\n    var iters = [], len = arguments.length;\n    while ( len-- ) iters[ len ] = arguments[ len ];\n\n    if (iters.length === 0) {\n      return this;\n    }\n    iters = iters.map(function (iter) { return SetCollection(iter); });\n    var toRemove = [];\n    this.forEach(function (value) {\n      if (iters.some(function (iter) { return iter.includes(value); })) {\n        toRemove.push(value);\n      }\n    });\n    return this.withMutations(function (set) {\n      toRemove.forEach(function (value) {\n        set.remove(value);\n      });\n    });\n  };\n\n  Set.prototype.sort = function sort (comparator) {\n    // Late binding\n    return OrderedSet(sortFactory(this, comparator));\n  };\n\n  Set.prototype.sortBy = function sortBy (mapper, comparator) {\n    // Late binding\n    return OrderedSet(sortFactory(this, comparator, mapper));\n  };\n\n  Set.prototype.wasAltered = function wasAltered () {\n    return this._map.wasAltered();\n  };\n\n  Set.prototype.__iterate = function __iterate (fn, reverse) {\n    var this$1$1 = this;\n\n    return this._map.__iterate(function (k) { return fn(k, k, this$1$1); }, reverse);\n  };\n\n  Set.prototype.__iterator = function __iterator (type, reverse) {\n    return this._map.__iterator(type, reverse);\n  };\n\n  Set.prototype.__ensureOwner = function __ensureOwner (ownerID) {\n    if (ownerID === this.__ownerID) {\n      return this;\n    }\n    var newMap = this._map.__ensureOwner(ownerID);\n    if (!ownerID) {\n      if (this.size === 0) {\n        return this.__empty();\n      }\n      this.__ownerID = ownerID;\n      this._map = newMap;\n      return this;\n    }\n    return this.__make(newMap, ownerID);\n  };\n\n  return Set;\n}(SetCollection));\n\nSet.isSet = isSet;\n\nvar SetPrototype = Set.prototype;\nSetPrototype[IS_SET_SYMBOL] = true;\nSetPrototype[DELETE] = SetPrototype.remove;\nSetPrototype.merge = SetPrototype.concat = SetPrototype.union;\nSetPrototype.withMutations = withMutations;\nSetPrototype.asImmutable = asImmutable;\nSetPrototype['@@transducer/init'] = SetPrototype.asMutable = asMutable;\nSetPrototype['@@transducer/step'] = function (result, arr) {\n  return result.add(arr);\n};\nSetPrototype['@@transducer/result'] = function (obj) {\n  return obj.asImmutable();\n};\n\nSetPrototype.__empty = emptySet;\nSetPrototype.__make = makeSet;\n\nfunction updateSet(set, newMap) {\n  if (set.__ownerID) {\n    set.size = newMap.size;\n    set._map = newMap;\n    return set;\n  }\n  return newMap === set._map\n    ? set\n    : newMap.size === 0\n      ? set.__empty()\n      : set.__make(newMap);\n}\n\nfunction makeSet(map, ownerID) {\n  var set = Object.create(SetPrototype);\n  set.size = map ? map.size : 0;\n  set._map = map;\n  set.__ownerID = ownerID;\n  return set;\n}\n\nvar EMPTY_SET;\nfunction emptySet() {\n  return EMPTY_SET || (EMPTY_SET = makeSet(emptyMap()));\n}\n\n/**\n * Returns the value at the provided key path starting at the provided\n * collection, or notSetValue if the key path is not defined.\n *\n * A functional alternative to `collection.getIn(keypath)` which will also\n * work with plain Objects and Arrays.\n */\nfunction getIn$1(collection, searchKeyPath, notSetValue) {\n    var keyPath = coerceKeyPath(searchKeyPath);\n    var i = 0;\n    while (i !== keyPath.length) {\n        // @ts-expect-error keyPath[i++] can not be undefined by design\n        collection = get(collection, keyPath[i++], NOT_SET);\n        if (collection === NOT_SET) {\n            return notSetValue;\n        }\n    }\n    return collection;\n}\n\nfunction getIn(searchKeyPath, notSetValue) {\n  return getIn$1(this, searchKeyPath, notSetValue);\n}\n\n/**\n * Returns true if the key path is defined in the provided collection.\n *\n * A functional alternative to `collection.hasIn(keypath)` which will also\n * work with plain Objects and Arrays.\n */\nfunction hasIn$1(collection, keyPath) {\n    return getIn$1(collection, keyPath, NOT_SET) !== NOT_SET;\n}\n\nfunction hasIn(searchKeyPath) {\n  return hasIn$1(this, searchKeyPath);\n}\n\nfunction toObject() {\n  assertNotInfinite(this.size);\n  var object = {};\n  this.__iterate(function (v, k) {\n    if (isProtoKey(k)) {\n      return;\n    }\n\n    object[k] = v;\n  });\n  return object;\n}\n\nfunction toJS(value) {\n    if (!value || typeof value !== 'object') {\n        return value;\n    }\n    if (!isCollection(value)) {\n        if (!isDataStructure(value)) {\n            return value;\n        }\n        // @ts-expect-error until Seq has been migrated to TypeScript\n        value = Seq(value);\n    }\n    if (isKeyed(value)) {\n        var result$1 = {};\n        // @ts-expect-error `__iterate` exists on all Keyed collections but method is not defined in the type\n        value.__iterate(function (v, k) {\n            if (isProtoKey(k)) {\n                return;\n            }\n            result$1[k] = toJS(v);\n        });\n        return result$1;\n    }\n    var result = [];\n    // @ts-expect-error value \"should\" be a non-keyed collection, but we may need to assert for stricter types\n    value.__iterate(function (v) {\n        result.push(toJS(v));\n    });\n    return result;\n}\n\nfunction hashCollection(collection) {\n    // @ts-expect-error Migrate to CollectionImpl in v6\n    if (collection.size === Infinity) {\n        return 0;\n    }\n    var ordered = isOrdered(collection);\n    var keyed = isKeyed(collection);\n    var h = ordered ? 1 : 0;\n    // @ts-expect-error Migrate to CollectionImpl in v6\n    collection.__iterate(keyed\n        ? ordered\n            ? function (v, k) {\n                h = (31 * h + hashMerge(hash(v), hash(k))) | 0;\n            }\n            : function (v, k) {\n                h = (h + hashMerge(hash(v), hash(k))) | 0;\n            }\n        : ordered\n            ? function (v) {\n                h = (31 * h + hash(v)) | 0;\n            }\n            : function (v) {\n                h = (h + hash(v)) | 0;\n            });\n    // @ts-expect-error Migrate to CollectionImpl in v6\n    return murmurHashOfSize(collection.size, h);\n}\nfunction murmurHashOfSize(size, h) {\n    h = imul(h, 0xcc9e2d51);\n    h = imul((h << 15) | (h >>> -15), 0x1b873593);\n    h = imul((h << 13) | (h >>> -13), 5);\n    h = ((h + 0xe6546b64) | 0) ^ size;\n    h = imul(h ^ (h >>> 16), 0x85ebca6b);\n    h = imul(h ^ (h >>> 13), 0xc2b2ae35);\n    h = smi(h ^ (h >>> 16));\n    return h;\n}\nfunction hashMerge(a, b) {\n    return (a ^ (b + 0x9e3779b9 + (a << 6) + (a >> 2))) | 0; // int\n}\n\n/**\n * Contributes additional methods to a constructor\n */\nfunction mixin(ctor, \n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nmethods) {\n    var keyCopier = function (key) {\n        // @ts-expect-error how to handle symbol ?\n        ctor.prototype[key] = methods[key];\n    };\n    Object.keys(methods).forEach(keyCopier);\n    // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here\n    Object.getOwnPropertySymbols &&\n        Object.getOwnPropertySymbols(methods).forEach(keyCopier);\n    return ctor;\n}\n\nCollection.Iterator = Iterator;\n\nmixin(Collection, {\n  // ### Conversion to other types\n\n  toArray: function toArray() {\n    assertNotInfinite(this.size);\n    var array = new Array(this.size || 0);\n    var useTuples = isKeyed(this);\n    var i = 0;\n    this.__iterate(function (v, k) {\n      // Keyed collections produce an array of tuples.\n      array[i++] = useTuples ? [k, v] : v;\n    });\n    return array;\n  },\n\n  toIndexedSeq: function toIndexedSeq() {\n    return new ToIndexedSequence(this);\n  },\n\n  toJS: function toJS$1() {\n    return toJS(this);\n  },\n\n  toKeyedSeq: function toKeyedSeq() {\n    return new ToKeyedSequence(this, true);\n  },\n\n  toMap: function toMap() {\n    // Use Late Binding here to solve the circular dependency.\n    return Map(this.toKeyedSeq());\n  },\n\n  toObject: toObject,\n\n  toOrderedMap: function toOrderedMap() {\n    // Use Late Binding here to solve the circular dependency.\n    return OrderedMap(this.toKeyedSeq());\n  },\n\n  toOrderedSet: function toOrderedSet() {\n    // Use Late Binding here to solve the circular dependency.\n    return OrderedSet(isKeyed(this) ? this.valueSeq() : this);\n  },\n\n  toSet: function toSet() {\n    // Use Late Binding here to solve the circular dependency.\n    return Set(isKeyed(this) ? this.valueSeq() : this);\n  },\n\n  toSetSeq: function toSetSeq() {\n    return new ToSetSequence(this);\n  },\n\n  toSeq: function toSeq() {\n    return isIndexed(this)\n      ? this.toIndexedSeq()\n      : isKeyed(this)\n        ? this.toKeyedSeq()\n        : this.toSetSeq();\n  },\n\n  toStack: function toStack() {\n    // Use Late Binding here to solve the circular dependency.\n    return Stack(isKeyed(this) ? this.valueSeq() : this);\n  },\n\n  toList: function toList() {\n    // Use Late Binding here to solve the circular dependency.\n    return List(isKeyed(this) ? this.valueSeq() : this);\n  },\n\n  // ### Common JavaScript methods and properties\n\n  toString: function toString() {\n    return '[Collection]';\n  },\n\n  __toString: function __toString(head, tail) {\n    if (this.size === 0) {\n      return head + tail;\n    }\n    return (\n      head +\n      ' ' +\n      this.toSeq().map(this.__toStringMapper).join(', ') +\n      ' ' +\n      tail\n    );\n  },\n\n  // ### ES6 Collection methods (ES6 Array and Map)\n\n  concat: function concat() {\n    var values = [], len = arguments.length;\n    while ( len-- ) values[ len ] = arguments[ len ];\n\n    return reify(this, concatFactory(this, values));\n  },\n\n  includes: function includes(searchValue) {\n    return this.some(function (value) { return is(value, searchValue); });\n  },\n\n  entries: function entries() {\n    return this.__iterator(ITERATE_ENTRIES);\n  },\n\n  every: function every(predicate, context) {\n    assertNotInfinite(this.size);\n    var returnValue = true;\n    this.__iterate(function (v, k, c) {\n      if (!predicate.call(context, v, k, c)) {\n        returnValue = false;\n        return false;\n      }\n    });\n    return returnValue;\n  },\n\n  filter: function filter(predicate, context) {\n    return reify(this, filterFactory(this, predicate, context, true));\n  },\n\n  partition: function partition(predicate, context) {\n    return partitionFactory(this, predicate, context);\n  },\n\n  find: function find(predicate, context, notSetValue) {\n    var entry = this.findEntry(predicate, context);\n    return entry ? entry[1] : notSetValue;\n  },\n\n  forEach: function forEach(sideEffect, context) {\n    assertNotInfinite(this.size);\n    return this.__iterate(context ? sideEffect.bind(context) : sideEffect);\n  },\n\n  join: function join(separator) {\n    assertNotInfinite(this.size);\n    separator = separator !== undefined ? '' + separator : ',';\n    var joined = '';\n    var isFirst = true;\n    this.__iterate(function (v) {\n      // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here\n      isFirst ? (isFirst = false) : (joined += separator);\n      joined += v !== null && v !== undefined ? v.toString() : '';\n    });\n    return joined;\n  },\n\n  keys: function keys() {\n    return this.__iterator(ITERATE_KEYS);\n  },\n\n  map: function map(mapper, context) {\n    return reify(this, mapFactory(this, mapper, context));\n  },\n\n  reduce: function reduce$1(reducer, initialReduction, context) {\n    return reduce(\n      this,\n      reducer,\n      initialReduction,\n      context,\n      arguments.length < 2,\n      false\n    );\n  },\n\n  reduceRight: function reduceRight(reducer, initialReduction, context) {\n    return reduce(\n      this,\n      reducer,\n      initialReduction,\n      context,\n      arguments.length < 2,\n      true\n    );\n  },\n\n  reverse: function reverse() {\n    return reify(this, reverseFactory(this, true));\n  },\n\n  slice: function slice(begin, end) {\n    return reify(this, sliceFactory(this, begin, end, true));\n  },\n\n  some: function some(predicate, context) {\n    assertNotInfinite(this.size);\n    var returnValue = false;\n    this.__iterate(function (v, k, c) {\n      if (predicate.call(context, v, k, c)) {\n        returnValue = true;\n        return false;\n      }\n    });\n    return returnValue;\n  },\n\n  sort: function sort(comparator) {\n    return reify(this, sortFactory(this, comparator));\n  },\n\n  values: function values() {\n    return this.__iterator(ITERATE_VALUES);\n  },\n\n  // ### More sequential methods\n\n  butLast: function butLast() {\n    return this.slice(0, -1);\n  },\n\n  isEmpty: function isEmpty() {\n    return this.size !== undefined ? this.size === 0 : !this.some(function () { return true; });\n  },\n\n  count: function count(predicate, context) {\n    return ensureSize(\n      predicate ? this.toSeq().filter(predicate, context) : this\n    );\n  },\n\n  countBy: function countBy(grouper, context) {\n    return countByFactory(this, grouper, context);\n  },\n\n  equals: function equals(other) {\n    return deepEqual(this, other);\n  },\n\n  entrySeq: function entrySeq() {\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    var collection = this;\n    if (collection._cache) {\n      // We cache as an entries array, so we can just return the cache!\n      return new ArraySeq(collection._cache);\n    }\n    var entriesSequence = collection.toSeq().map(entryMapper).toIndexedSeq();\n    entriesSequence.fromEntrySeq = function () { return collection.toSeq(); };\n    return entriesSequence;\n  },\n\n  filterNot: function filterNot(predicate, context) {\n    return this.filter(not(predicate), context);\n  },\n\n  findEntry: function findEntry(predicate, context, notSetValue) {\n    var found = notSetValue;\n    this.__iterate(function (v, k, c) {\n      if (predicate.call(context, v, k, c)) {\n        found = [k, v];\n        return false;\n      }\n    });\n    return found;\n  },\n\n  findKey: function findKey(predicate, context) {\n    var entry = this.findEntry(predicate, context);\n    return entry && entry[0];\n  },\n\n  findLast: function findLast(predicate, context, notSetValue) {\n    return this.toKeyedSeq().reverse().find(predicate, context, notSetValue);\n  },\n\n  findLastEntry: function findLastEntry(predicate, context, notSetValue) {\n    return this.toKeyedSeq()\n      .reverse()\n      .findEntry(predicate, context, notSetValue);\n  },\n\n  findLastKey: function findLastKey(predicate, context) {\n    return this.toKeyedSeq().reverse().findKey(predicate, context);\n  },\n\n  first: function first(notSetValue) {\n    return this.find(returnTrue, null, notSetValue);\n  },\n\n  flatMap: function flatMap(mapper, context) {\n    return reify(this, flatMapFactory(this, mapper, context));\n  },\n\n  flatten: function flatten(depth) {\n    return reify(this, flattenFactory(this, depth, true));\n  },\n\n  fromEntrySeq: function fromEntrySeq() {\n    return new FromEntriesSequence(this);\n  },\n\n  get: function get(searchKey, notSetValue) {\n    return this.find(function (_, key) { return is(key, searchKey); }, undefined, notSetValue);\n  },\n\n  getIn: getIn,\n\n  groupBy: function groupBy(grouper, context) {\n    return groupByFactory(this, grouper, context);\n  },\n\n  has: function has(searchKey) {\n    return this.get(searchKey, NOT_SET) !== NOT_SET;\n  },\n\n  hasIn: hasIn,\n\n  isSubset: function isSubset(iter) {\n    iter = typeof iter.includes === 'function' ? iter : Collection(iter);\n    return this.every(function (value) { return iter.includes(value); });\n  },\n\n  isSuperset: function isSuperset(iter) {\n    iter = typeof iter.isSubset === 'function' ? iter : Collection(iter);\n    return iter.isSubset(this);\n  },\n\n  keyOf: function keyOf(searchValue) {\n    return this.findKey(function (value) { return is(value, searchValue); });\n  },\n\n  keySeq: function keySeq() {\n    return this.toSeq().map(keyMapper).toIndexedSeq();\n  },\n\n  last: function last(notSetValue) {\n    return this.toSeq().reverse().first(notSetValue);\n  },\n\n  lastKeyOf: function lastKeyOf(searchValue) {\n    return this.toKeyedSeq().reverse().keyOf(searchValue);\n  },\n\n  max: function max(comparator) {\n    return maxFactory(this, comparator);\n  },\n\n  maxBy: function maxBy(mapper, comparator) {\n    return maxFactory(this, comparator, mapper);\n  },\n\n  min: function min(comparator) {\n    return maxFactory(\n      this,\n      comparator ? neg(comparator) : defaultNegComparator\n    );\n  },\n\n  minBy: function minBy(mapper, comparator) {\n    return maxFactory(\n      this,\n      comparator ? neg(comparator) : defaultNegComparator,\n      mapper\n    );\n  },\n\n  rest: function rest() {\n    return this.slice(1);\n  },\n\n  skip: function skip(amount) {\n    return amount === 0 ? this : this.slice(Math.max(0, amount));\n  },\n\n  skipLast: function skipLast(amount) {\n    return amount === 0 ? this : this.slice(0, -Math.max(0, amount));\n  },\n\n  skipWhile: function skipWhile(predicate, context) {\n    return reify(this, skipWhileFactory(this, predicate, context, true));\n  },\n\n  skipUntil: function skipUntil(predicate, context) {\n    return this.skipWhile(not(predicate), context);\n  },\n\n  sortBy: function sortBy(mapper, comparator) {\n    return reify(this, sortFactory(this, comparator, mapper));\n  },\n\n  take: function take(amount) {\n    return this.slice(0, Math.max(0, amount));\n  },\n\n  takeLast: function takeLast(amount) {\n    return this.slice(-Math.max(0, amount));\n  },\n\n  takeWhile: function takeWhile(predicate, context) {\n    return reify(this, takeWhileFactory(this, predicate, context));\n  },\n\n  takeUntil: function takeUntil(predicate, context) {\n    return this.takeWhile(not(predicate), context);\n  },\n\n  update: function update(fn) {\n    return fn(this);\n  },\n\n  valueSeq: function valueSeq() {\n    return this.toIndexedSeq();\n  },\n\n  // ### Hashable Object\n\n  hashCode: function hashCode() {\n    return this.__hash || (this.__hash = hashCollection(this));\n  },\n\n  // ### Internal\n\n  // abstract __iterate(fn, reverse)\n\n  // abstract __iterator(type, reverse)\n});\n\nvar CollectionPrototype = Collection.prototype;\nCollectionPrototype[IS_COLLECTION_SYMBOL] = true;\nCollectionPrototype[ITERATOR_SYMBOL] = CollectionPrototype.values;\nCollectionPrototype.toJSON = CollectionPrototype.toArray;\nCollectionPrototype.__toStringMapper = quoteString;\nCollectionPrototype.inspect = CollectionPrototype.toSource = function () {\n  return this.toString();\n};\nCollectionPrototype.chain = CollectionPrototype.flatMap;\nCollectionPrototype.contains = CollectionPrototype.includes;\n\nmixin(KeyedCollection, {\n  // ### More sequential methods\n\n  flip: function flip() {\n    return reify(this, flipFactory(this));\n  },\n\n  mapEntries: function mapEntries(mapper, context) {\n    var this$1$1 = this;\n\n    var iterations = 0;\n    return reify(\n      this,\n      this.toSeq()\n        .map(function (v, k) { return mapper.call(context, [k, v], iterations++, this$1$1); })\n        .fromEntrySeq()\n    );\n  },\n\n  mapKeys: function mapKeys(mapper, context) {\n    var this$1$1 = this;\n\n    return reify(\n      this,\n      this.toSeq()\n        .flip()\n        .map(function (k, v) { return mapper.call(context, k, v, this$1$1); })\n        .flip()\n    );\n  },\n});\n\nvar KeyedCollectionPrototype = KeyedCollection.prototype;\nKeyedCollectionPrototype[IS_KEYED_SYMBOL] = true;\nKeyedCollectionPrototype[ITERATOR_SYMBOL] = CollectionPrototype.entries;\nKeyedCollectionPrototype.toJSON = toObject;\nKeyedCollectionPrototype.__toStringMapper = function (v, k) { return quoteString(k) + ': ' + quoteString(v); };\n\nmixin(IndexedCollection, {\n  // ### Conversion to other types\n\n  toKeyedSeq: function toKeyedSeq() {\n    return new ToKeyedSequence(this, false);\n  },\n\n  // ### ES6 Collection methods (ES6 Array and Map)\n\n  filter: function filter(predicate, context) {\n    return reify(this, filterFactory(this, predicate, context, false));\n  },\n\n  findIndex: function findIndex(predicate, context) {\n    var entry = this.findEntry(predicate, context);\n    return entry ? entry[0] : -1;\n  },\n\n  indexOf: function indexOf(searchValue) {\n    var key = this.keyOf(searchValue);\n    return key === undefined ? -1 : key;\n  },\n\n  lastIndexOf: function lastIndexOf(searchValue) {\n    var key = this.lastKeyOf(searchValue);\n    return key === undefined ? -1 : key;\n  },\n\n  reverse: function reverse() {\n    return reify(this, reverseFactory(this, false));\n  },\n\n  slice: function slice(begin, end) {\n    return reify(this, sliceFactory(this, begin, end, false));\n  },\n\n  splice: function splice(index, removeNum /*, ...values*/) {\n    var numArgs = arguments.length;\n    removeNum = Math.max(removeNum || 0, 0);\n    if (numArgs === 0 || (numArgs === 2 && !removeNum)) {\n      return this;\n    }\n    // If index is negative, it should resolve relative to the size of the\n    // collection. However size may be expensive to compute if not cached, so\n    // only call count() if the number is in fact negative.\n    index = resolveBegin(index, index < 0 ? this.count() : this.size);\n    var spliced = this.slice(0, index);\n    return reify(\n      this,\n      numArgs === 1\n        ? spliced\n        : spliced.concat(arrCopy(arguments, 2), this.slice(index + removeNum))\n    );\n  },\n\n  // ### More collection methods\n\n  findLastIndex: function findLastIndex(predicate, context) {\n    var entry = this.findLastEntry(predicate, context);\n    return entry ? entry[0] : -1;\n  },\n\n  first: function first(notSetValue) {\n    return this.get(0, notSetValue);\n  },\n\n  flatten: function flatten(depth) {\n    return reify(this, flattenFactory(this, depth, false));\n  },\n\n  get: function get(index, notSetValue) {\n    index = wrapIndex(this, index);\n    return index < 0 ||\n      this.size === Infinity ||\n      (this.size !== undefined && index > this.size)\n      ? notSetValue\n      : this.find(function (_, key) { return key === index; }, undefined, notSetValue);\n  },\n\n  has: function has(index) {\n    index = wrapIndex(this, index);\n\n    return (\n      index >= 0 &&\n      (this.size !== undefined\n        ? this.size === Infinity || index < this.size\n        : this.find(function (_, key) { return key === index; }, undefined, NOT_SET) !== NOT_SET)\n    );\n  },\n\n  interpose: function interpose(separator) {\n    return reify(this, interposeFactory(this, separator));\n  },\n\n  interleave: function interleave(/*...collections*/) {\n    var collections = [this].concat(arrCopy(arguments));\n    var zipped = zipWithFactory(this.toSeq(), IndexedSeq.of, collections);\n    var interleaved = zipped.flatten(true);\n    if (zipped.size) {\n      interleaved.size = zipped.size * collections.length;\n    }\n    return reify(this, interleaved);\n  },\n\n  keySeq: function keySeq() {\n    return Range(0, this.size);\n  },\n\n  last: function last(notSetValue) {\n    return this.get(-1, notSetValue);\n  },\n\n  skipWhile: function skipWhile(predicate, context) {\n    return reify(this, skipWhileFactory(this, predicate, context, false));\n  },\n\n  zip: function zip(/*, ...collections */) {\n    var collections = [this].concat(arrCopy(arguments));\n    return reify(this, zipWithFactory(this, defaultZipper, collections));\n  },\n\n  zipAll: function zipAll(/*, ...collections */) {\n    var collections = [this].concat(arrCopy(arguments));\n    return reify(this, zipWithFactory(this, defaultZipper, collections, true));\n  },\n\n  zipWith: function zipWith(zipper /*, ...collections */) {\n    var collections = arrCopy(arguments);\n    collections[0] = this;\n    return reify(this, zipWithFactory(this, zipper, collections));\n  },\n});\n\nvar IndexedCollectionPrototype = IndexedCollection.prototype;\nIndexedCollectionPrototype[IS_INDEXED_SYMBOL] = true;\nIndexedCollectionPrototype[IS_ORDERED_SYMBOL] = true;\n\nmixin(SetCollection, {\n  // ### ES6 Collection methods (ES6 Array and Map)\n\n  get: function get(value, notSetValue) {\n    return this.has(value) ? value : notSetValue;\n  },\n\n  includes: function includes(value) {\n    return this.has(value);\n  },\n\n  // ### More sequential methods\n\n  keySeq: function keySeq() {\n    return this.valueSeq();\n  },\n});\n\nvar SetCollectionPrototype = SetCollection.prototype;\nSetCollectionPrototype.has = CollectionPrototype.includes;\nSetCollectionPrototype.contains = SetCollectionPrototype.includes;\nSetCollectionPrototype.keys = SetCollectionPrototype.values;\n\n// Mixin subclasses\n\nmixin(KeyedSeq, KeyedCollectionPrototype);\nmixin(IndexedSeq, IndexedCollectionPrototype);\nmixin(SetSeq, SetCollectionPrototype);\n\n// #pragma Helper functions\n\nfunction defaultZipper() {\n  return arrCopy(arguments);\n}\n\n/**\n * True if `maybeOrderedSet` is an OrderedSet.\n */\nfunction isOrderedSet(maybeOrderedSet) {\n    return isSet(maybeOrderedSet) && isOrdered(maybeOrderedSet);\n}\n\nvar OrderedSet = /*@__PURE__*/(function (Set) {\n  function OrderedSet(value) {\n    // eslint-disable-next-line no-constructor-return\n    return value === undefined || value === null\n      ? emptyOrderedSet()\n      : isOrderedSet(value)\n        ? value\n        : emptyOrderedSet().withMutations(function (set) {\n            var iter = SetCollection(value);\n            assertNotInfinite(iter.size);\n            iter.forEach(function (v) { return set.add(v); });\n          });\n  }\n\n  if ( Set ) OrderedSet.__proto__ = Set;\n  OrderedSet.prototype = Object.create( Set && Set.prototype );\n  OrderedSet.prototype.constructor = OrderedSet;\n\n  OrderedSet.of = function of (/*...values*/) {\n    return this(arguments);\n  };\n\n  OrderedSet.fromKeys = function fromKeys (value) {\n    return this(KeyedCollection(value).keySeq());\n  };\n\n  OrderedSet.prototype.toString = function toString () {\n    return this.__toString('OrderedSet {', '}');\n  };\n\n  return OrderedSet;\n}(Set));\n\nOrderedSet.isOrderedSet = isOrderedSet;\n\nvar OrderedSetPrototype = OrderedSet.prototype;\nOrderedSetPrototype[IS_ORDERED_SYMBOL] = true;\nOrderedSetPrototype.zip = IndexedCollectionPrototype.zip;\nOrderedSetPrototype.zipWith = IndexedCollectionPrototype.zipWith;\nOrderedSetPrototype.zipAll = IndexedCollectionPrototype.zipAll;\n\nOrderedSetPrototype.__empty = emptyOrderedSet;\nOrderedSetPrototype.__make = makeOrderedSet;\n\nfunction makeOrderedSet(map, ownerID) {\n  var set = Object.create(OrderedSetPrototype);\n  set.size = map ? map.size : 0;\n  set._map = map;\n  set.__ownerID = ownerID;\n  return set;\n}\n\nvar EMPTY_ORDERED_SET;\nfunction emptyOrderedSet() {\n  return (\n    EMPTY_ORDERED_SET || (EMPTY_ORDERED_SET = makeOrderedSet(emptyOrderedMap()))\n  );\n}\n\n/**\n * Describes which item in a pair should be placed first when sorting\n */\nvar PairSorting = {\n    LeftThenRight: -1,\n    RightThenLeft: 1,\n};\n\nfunction throwOnInvalidDefaultValues(defaultValues) {\n  if (isRecord(defaultValues)) {\n    throw new Error(\n      'Can not call `Record` with an immutable Record as default values. Use a plain javascript object instead.'\n    );\n  }\n\n  if (isImmutable(defaultValues)) {\n    throw new Error(\n      'Can not call `Record` with an immutable Collection as default values. Use a plain javascript object instead.'\n    );\n  }\n\n  if (defaultValues === null || typeof defaultValues !== 'object') {\n    throw new Error(\n      'Can not call `Record` with a non-object as default values. Use a plain javascript object instead.'\n    );\n  }\n}\n\nvar Record = function Record(defaultValues, name) {\n  var hasInitialized;\n\n  throwOnInvalidDefaultValues(defaultValues);\n\n  var RecordType = function Record(values) {\n    var this$1$1 = this;\n\n    if (values instanceof RecordType) {\n      return values;\n    }\n    if (!(this instanceof RecordType)) {\n      return new RecordType(values);\n    }\n    if (!hasInitialized) {\n      hasInitialized = true;\n      var keys = Object.keys(defaultValues);\n      var indices = (RecordTypePrototype._indices = {});\n      // Deprecated: left to attempt not to break any external code which\n      // relies on a ._name property existing on record instances.\n      // Use Record.getDescriptiveName() instead\n      RecordTypePrototype._name = name;\n      RecordTypePrototype._keys = keys;\n      RecordTypePrototype._defaultValues = defaultValues;\n      for (var i = 0; i < keys.length; i++) {\n        var propName = keys[i];\n        indices[propName] = i;\n        if (RecordTypePrototype[propName]) {\n          /* eslint-disable no-console */\n          // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here\n          typeof console === 'object' &&\n            console.warn &&\n            console.warn(\n              'Cannot define ' +\n                recordName(this) +\n                ' with property \"' +\n                propName +\n                '\" since that property name is part of the Record API.'\n            );\n          /* eslint-enable no-console */\n        } else {\n          setProp(RecordTypePrototype, propName);\n        }\n      }\n    }\n    this.__ownerID = undefined;\n    this._values = List().withMutations(function (l) {\n      l.setSize(this$1$1._keys.length);\n      KeyedCollection(values).forEach(function (v, k) {\n        l.set(this$1$1._indices[k], v === this$1$1._defaultValues[k] ? undefined : v);\n      });\n    });\n    return this;\n  };\n\n  var RecordTypePrototype = (RecordType.prototype =\n    Object.create(RecordPrototype));\n  RecordTypePrototype.constructor = RecordType;\n\n  if (name) {\n    RecordType.displayName = name;\n  }\n\n  // eslint-disable-next-line no-constructor-return\n  return RecordType;\n};\n\nRecord.prototype.toString = function toString () {\n  var str = recordName(this) + ' { ';\n  var keys = this._keys;\n  var k;\n  for (var i = 0, l = keys.length; i !== l; i++) {\n    k = keys[i];\n    str += (i ? ', ' : '') + k + ': ' + quoteString(this.get(k));\n  }\n  return str + ' }';\n};\n\nRecord.prototype.equals = function equals (other) {\n  return (\n    this === other ||\n    (isRecord(other) && recordSeq(this).equals(recordSeq(other)))\n  );\n};\n\nRecord.prototype.hashCode = function hashCode () {\n  return recordSeq(this).hashCode();\n};\n\n// @pragma Access\n\nRecord.prototype.has = function has (k) {\n  return this._indices.hasOwnProperty(k);\n};\n\nRecord.prototype.get = function get (k, notSetValue) {\n  if (!this.has(k)) {\n    return notSetValue;\n  }\n  var index = this._indices[k];\n  var value = this._values.get(index);\n  return value === undefined ? this._defaultValues[k] : value;\n};\n\n// @pragma Modification\n\nRecord.prototype.set = function set (k, v) {\n  if (this.has(k)) {\n    var newValues = this._values.set(\n      this._indices[k],\n      v === this._defaultValues[k] ? undefined : v\n    );\n    if (newValues !== this._values && !this.__ownerID) {\n      return makeRecord(this, newValues);\n    }\n  }\n  return this;\n};\n\nRecord.prototype.remove = function remove (k) {\n  return this.set(k);\n};\n\nRecord.prototype.clear = function clear () {\n  var newValues = this._values.clear().setSize(this._keys.length);\n\n  return this.__ownerID ? this : makeRecord(this, newValues);\n};\n\nRecord.prototype.wasAltered = function wasAltered () {\n  return this._values.wasAltered();\n};\n\nRecord.prototype.toSeq = function toSeq () {\n  return recordSeq(this);\n};\n\nRecord.prototype.toJS = function toJS$1 () {\n  return toJS(this);\n};\n\nRecord.prototype.entries = function entries () {\n  return this.__iterator(ITERATE_ENTRIES);\n};\n\nRecord.prototype.__iterator = function __iterator (type, reverse) {\n  return recordSeq(this).__iterator(type, reverse);\n};\n\nRecord.prototype.__iterate = function __iterate (fn, reverse) {\n  return recordSeq(this).__iterate(fn, reverse);\n};\n\nRecord.prototype.__ensureOwner = function __ensureOwner (ownerID) {\n  if (ownerID === this.__ownerID) {\n    return this;\n  }\n  var newValues = this._values.__ensureOwner(ownerID);\n  if (!ownerID) {\n    this.__ownerID = ownerID;\n    this._values = newValues;\n    return this;\n  }\n  return makeRecord(this, newValues, ownerID);\n};\n\nRecord.isRecord = isRecord;\nRecord.getDescriptiveName = recordName;\nvar RecordPrototype = Record.prototype;\nRecordPrototype[IS_RECORD_SYMBOL] = true;\nRecordPrototype[DELETE] = RecordPrototype.remove;\nRecordPrototype.deleteIn = RecordPrototype.removeIn = deleteIn;\nRecordPrototype.getIn = getIn;\nRecordPrototype.hasIn = CollectionPrototype.hasIn;\nRecordPrototype.merge = merge$1;\nRecordPrototype.mergeWith = mergeWith$1;\nRecordPrototype.mergeIn = mergeIn;\nRecordPrototype.mergeDeep = mergeDeep;\nRecordPrototype.mergeDeepWith = mergeDeepWith;\nRecordPrototype.mergeDeepIn = mergeDeepIn;\nRecordPrototype.setIn = setIn;\nRecordPrototype.update = update;\nRecordPrototype.updateIn = updateIn$1;\nRecordPrototype.withMutations = withMutations;\nRecordPrototype.asMutable = asMutable;\nRecordPrototype.asImmutable = asImmutable;\nRecordPrototype[ITERATOR_SYMBOL] = RecordPrototype.entries;\nRecordPrototype.toJSON = RecordPrototype.toObject =\n  CollectionPrototype.toObject;\nRecordPrototype.inspect = RecordPrototype.toSource = function () {\n  return this.toString();\n};\n\nfunction makeRecord(likeRecord, values, ownerID) {\n  var record = Object.create(Object.getPrototypeOf(likeRecord));\n  record._values = values;\n  record.__ownerID = ownerID;\n  return record;\n}\n\nfunction recordName(record) {\n  return record.constructor.displayName || record.constructor.name || 'Record';\n}\n\nfunction recordSeq(record) {\n  return keyedSeqFromValue(record._keys.map(function (k) { return [k, record.get(k)]; }));\n}\n\nfunction setProp(prototype, name) {\n  try {\n    Object.defineProperty(prototype, name, {\n      get: function () {\n        return this.get(name);\n      },\n      set: function (value) {\n        invariant(this.__ownerID, 'Cannot set on an immutable record.');\n        this.set(name, value);\n      },\n    });\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars -- TODO enable eslint here\n  } catch (error) {\n    // Object.defineProperty failed. Probably IE8.\n  }\n}\n\n/**\n * Returns a lazy Seq of `value` repeated `times` times. When `times` is\n * undefined, returns an infinite sequence of `value`.\n */\nvar Repeat = /*@__PURE__*/(function (IndexedSeq) {\n  function Repeat(value, times) {\n    if (!(this instanceof Repeat)) {\n      // eslint-disable-next-line no-constructor-return\n      return new Repeat(value, times);\n    }\n    this._value = value;\n    this.size = times === undefined ? Infinity : Math.max(0, times);\n    if (this.size === 0) {\n      if (EMPTY_REPEAT) {\n        // eslint-disable-next-line no-constructor-return\n        return EMPTY_REPEAT;\n      }\n      // eslint-disable-next-line @typescript-eslint/no-this-alias\n      EMPTY_REPEAT = this;\n    }\n  }\n\n  if ( IndexedSeq ) Repeat.__proto__ = IndexedSeq;\n  Repeat.prototype = Object.create( IndexedSeq && IndexedSeq.prototype );\n  Repeat.prototype.constructor = Repeat;\n\n  Repeat.prototype.toString = function toString () {\n    if (this.size === 0) {\n      return 'Repeat []';\n    }\n    return 'Repeat [ ' + this._value + ' ' + this.size + ' times ]';\n  };\n\n  Repeat.prototype.get = function get (index, notSetValue) {\n    return this.has(index) ? this._value : notSetValue;\n  };\n\n  Repeat.prototype.includes = function includes (searchValue) {\n    return is(this._value, searchValue);\n  };\n\n  Repeat.prototype.slice = function slice (begin, end) {\n    var size = this.size;\n    return wholeSlice(begin, end, size)\n      ? this\n      : new Repeat(\n          this._value,\n          resolveEnd(end, size) - resolveBegin(begin, size)\n        );\n  };\n\n  Repeat.prototype.reverse = function reverse () {\n    return this;\n  };\n\n  Repeat.prototype.indexOf = function indexOf (searchValue) {\n    if (this.size !== 0 && is(this._value, searchValue)) {\n      return 0;\n    }\n    return -1;\n  };\n\n  Repeat.prototype.lastIndexOf = function lastIndexOf (searchValue) {\n    if (this.size !== 0 && is(this._value, searchValue)) {\n      return this.size - 1;\n    }\n    return -1;\n  };\n\n  Repeat.prototype.__iterate = function __iterate (fn, reverse) {\n    var size = this.size;\n    var i = 0;\n    while (i !== size) {\n      if (fn(this._value, reverse ? size - ++i : i++, this) === false) {\n        break;\n      }\n    }\n    return i;\n  };\n\n  Repeat.prototype.__iterator = function __iterator (type, reverse) {\n    var this$1$1 = this;\n\n    var size = this.size;\n    var i = 0;\n    return new Iterator(function () { return i === size\n        ? iteratorDone()\n        : iteratorValue(type, reverse ? size - ++i : i++, this$1$1._value); }\n    );\n  };\n\n  Repeat.prototype.equals = function equals (other) {\n    return other instanceof Repeat\n      ? is(this._value, other._value)\n      : deepEqual(this, other);\n  };\n\n  return Repeat;\n}(IndexedSeq));\n\nvar EMPTY_REPEAT;\n\nfunction fromJS(value, converter) {\n  return fromJSWith(\n    [],\n    converter || defaultConverter,\n    value,\n    '',\n    converter && converter.length > 2 ? [] : undefined,\n    { '': value }\n  );\n}\n\nfunction fromJSWith(stack, converter, value, key, keyPath, parentValue) {\n  if (\n    typeof value !== 'string' &&\n    !isImmutable(value) &&\n    (isArrayLike(value) || hasIterator(value) || isPlainObject(value))\n  ) {\n    if (~stack.indexOf(value)) {\n      throw new TypeError('Cannot convert circular structure to Immutable');\n    }\n    stack.push(value);\n    // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here\n    keyPath && key !== '' && keyPath.push(key);\n    var converted = converter.call(\n      parentValue,\n      key,\n      Seq(value).map(function (v, k) { return fromJSWith(stack, converter, v, k, keyPath, value); }\n      ),\n      keyPath && keyPath.slice()\n    );\n    stack.pop();\n    // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- TODO enable eslint here\n    keyPath && keyPath.pop();\n    return converted;\n  }\n  return value;\n}\n\nfunction defaultConverter(k, v) {\n  // Effectively the opposite of \"Collection.toSeq()\"\n  return isIndexed(v) ? v.toList() : isKeyed(v) ? v.toMap() : v.toSet();\n}\n\nvar version = \"5.1.7\";\n\n/* eslint-disable import/order */\n\n// Note: Iterable is deprecated\nvar Iterable = Collection;\n\nexport { Collection, Iterable, List, Map, OrderedMap, OrderedSet, PairSorting, Range, Record, Repeat, Seq, Set, Stack, fromJS, get, getIn$1 as getIn, has, hasIn$1 as hasIn, hash, is, isAssociative, isCollection, isImmutable, isIndexed, isKeyed, isList, isMap, isOrdered, isOrderedMap, isOrderedSet, isPlainObject, isRecord, isSeq, isSet, isStack, isValueObject, merge, mergeDeep$1 as mergeDeep, mergeDeepWith$1 as mergeDeepWith, mergeWith, remove, removeIn, set, setIn$1 as setIn, update$1 as update, updateIn, version };\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 = 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\n  const { buffer } = new Uint8Array(\n    /** @type {RegExpMatchArray} */ (hex.match(/../g)).map((h) => parseInt(h, 16)),\n  );\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 | ArrayBuffer | ArrayBufferView | 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 instanceof ArrayBuffer) {\n    data = input;\n  } else if (ArrayBuffer.isView(input)) {\n    // TypedArray or DataView\n    const view = /** @type {ArrayBufferView} */ (input);\n\n    data = view.buffer.slice(view.byteOffset, view.byteOffset + view.byteLength);\n  } else if (input && typeof (/** @type {any} */ (input).arrayBuffer) === 'function') {\n    // Blob or File\n    data = await /** @type {Blob} */ (input).arrayBuffer();\n  } else {\n    throw new Error('Unsupported input type for getHash');\n  }\n\n  const digest = await globalThis.crypto.subtle.digest(\n    algorithm,\n    /** @type {ArrayBuffer} */ (data),\n  );\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, returning only the text content.\n * Security note: the returned value is plain text, not HTML. It is safe to insert via\n * `textContent`, but if you re-inject it via `innerHTML` you must re-escape it first to avoid XSS.\n * @param {string} string Original string that may include tags, e.g. `<div>Hello</div>`.\n * @returns {string} Text content, e.g. `Hello`.\n */\nconst stripTags = (string) =>\n  /** @type {string} */ (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.js';\nimport { escapeRegExp } from './string.js';\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    specifier = specifier.toLowerCase();\n\n    if (specifier.startsWith('.')) {\n      return file.name.toLowerCase().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 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          /* v8 ignore next */\n          () => {\n            resolve(null);\n          },\n        );\n      } else {\n        const reader = /** @type {FileSystemDirectoryEntry} */ (entry).createReader();\n        /** @type {FileSystemEntry[]} */\n        const allEntries = [];\n\n        /**\n         * Read all entries from the directory by repeatedly calling `readEntries` until empty.\n         */\n        const readAll = () => {\n          reader.readEntries((entries) => {\n            if (entries.length) {\n              allEntries.push(...entries);\n              readAll();\n            } else {\n              resolve(/** @type {Promise<File[]>} */ (Promise.all(allEntries.map(readEntry))));\n            }\n          });\n        };\n\n        readAll();\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(Infinity)\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, and some\n * legacy files use lone CR. Convert any CRLF/CR 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, reject) => {\n    /**\n     * Return the result once the content is read.\n     */\n    reader.onload = () => {\n      resolve(/** @type {string} */ (reader.result));\n    };\n\n    /**\n     * Reject the promise when the file read fails.\n     */\n    reader.onerror = () => {\n      reject(reader.error);\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 = Uint8Array.fromBase64(base64);\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  // Revoke asynchronously so the browser has time to initiate the download. Revoking synchronously\n  // can cancel the download in some browsers (e.g. Firefox/Safari).\n  globalThis.setTimeout(() => {\n    URL.revokeObjectURL(blobURL);\n  }, 0);\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","/** @import { Readable, Writable } from './public.js' */\nimport {\n\teffect_root,\n\teffect_tracking,\n\trender_effect\n} from '../internal/client/reactivity/effects.js';\nimport { get, writable } from './shared/index.js';\nimport { createSubscriber } from '../reactivity/create-subscriber.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../internal/client/runtime.js';\n\nexport { derived, get, readable, readonly, writable } from './shared/index.js';\n\n/**\n * @template V\n * @overload\n * @param {() => V} get\n * @param {(v: V) => void} set\n * @returns {Writable<V>}\n */\n/**\n * @template V\n * @overload\n * @param {() => V} get\n * @returns {Readable<V>}\n */\n/**\n * Create a store from a function that returns state, and (to make a writable store), an\n * optional second function that sets state.\n *\n * ```ts\n * import { toStore } from 'svelte/store';\n *\n * let count = $state(0);\n *\n * const store = toStore(() => count, (v) => (count = v));\n * ```\n * @template V\n * @param {() => V} get\n * @param {(v: V) => void} [set]\n * @returns {Writable<V> | Readable<V>}\n */\nexport function toStore(get, set) {\n\tvar effect = active_effect;\n\tvar reaction = active_reaction;\n\tvar init_value = get();\n\n\tconst store = writable(init_value, (set) => {\n\t\t// If the value has changed before we call subscribe, then\n\t\t// we need to treat the value as already having run\n\t\tvar ran = init_value !== get();\n\n\t\t// TODO do we need a different implementation on the server?\n\t\tvar teardown;\n\t\t// Apply the reaction and effect at the time of toStore being called\n\t\tvar previous_reaction = active_reaction;\n\t\tvar previous_effect = active_effect;\n\t\tset_active_reaction(reaction);\n\t\tset_active_effect(effect);\n\n\t\ttry {\n\t\t\tteardown = effect_root(() => {\n\t\t\t\trender_effect(() => {\n\t\t\t\t\tconst value = get();\n\t\t\t\t\tif (ran) set(value);\n\t\t\t\t});\n\t\t\t});\n\t\t} finally {\n\t\t\tset_active_reaction(previous_reaction);\n\t\t\tset_active_effect(previous_effect);\n\t\t}\n\n\t\tran = true;\n\n\t\treturn teardown;\n\t});\n\n\tif (set) {\n\t\treturn {\n\t\t\tset,\n\t\t\tupdate: (fn) => set(fn(get())),\n\t\t\tsubscribe: store.subscribe\n\t\t};\n\t}\n\n\treturn {\n\t\tsubscribe: store.subscribe\n\t};\n}\n\n/**\n * @template V\n * @overload\n * @param {Writable<V>} store\n * @returns {{ current: V }}\n */\n/**\n * @template V\n * @overload\n * @param {Readable<V>} store\n * @returns {{ readonly current: V }}\n */\n/**\n * Convert a store to an object with a reactive `current` property. If `store`\n * is a readable store, `current` will be a readonly property.\n *\n * ```ts\n * import { fromStore, get, writable } from 'svelte/store';\n *\n * const store = writable(0);\n *\n * const count = fromStore(store);\n *\n * count.current; // 0;\n * store.set(1);\n * count.current; // 1\n *\n * count.current += 1;\n * get(store); // 2\n * ```\n * @template V\n * @param {Writable<V> | Readable<V>} store\n */\nexport function fromStore(store) {\n\tlet value = /** @type {V} */ (undefined);\n\n\tconst subscribe = createSubscriber((update) => {\n\t\tlet ran = false;\n\n\t\tconst unsubscribe = store.subscribe((v) => {\n\t\t\tvalue = v;\n\t\t\tif (ran) update();\n\t\t});\n\n\t\tran = true;\n\n\t\treturn unsubscribe;\n\t});\n\n\tfunction current() {\n\t\tif (effect_tracking()) {\n\t\t\tsubscribe();\n\t\t\treturn value;\n\t\t}\n\n\t\treturn get(store);\n\t}\n\n\tif ('set' in store) {\n\t\treturn {\n\t\t\tget current() {\n\t\t\t\treturn current();\n\t\t\t},\n\t\t\tset current(v) {\n\t\t\t\tstore.set(v);\n\t\t\t}\n\t\t};\n\t}\n\n\treturn {\n\t\tget current() {\n\t\t\treturn current();\n\t\t}\n\t};\n}\n","/**\n * Simple regex to check if a string contains template tags. This can be used for a quick check\n * before performing more expensive operations like regex replacement. The `g` flag should not be\n * used here because we only need to know if at least one match exists, and using `test()` with a\n * global regex can lead to unexpected results due to the internal state of the regex engine.\n */\nexport const TEMPLATE_TAG_REGEX = /{{.+?}}/;\n\n/**\n * Regex to match and replace template tags like {{slug}}. The negative lookahead (?!'\\)) ensures\n * that we do not match template tags that are immediately followed by a closing parenthesis and a\n * single quote, which is a common pattern in some templating languages to denote the end of a\n * template expression.\n */\nexport const TEMPLATE_TAG_REPLACE_REGEX = /{{(.+?)}}(?!'\\))/g;\n\n/**\n * Regex to match escaped `{{variable}}` placeholders.\n */\nexport const ESCAPED_PLACEHOLDER_REGEX = /\\\\\\{\\\\\\{.+?\\\\\\}\\\\\\}/g;\n\n/**\n * Date-time field names that are supported as template tags.\n */\nexport const DATE_TIME_FIELDS = ['year', 'month', 'day', 'hour', 'minute', 'second'];\n\n/**\n * Regex to match inner tags within transformation values.\n */\nexport const INNER_TAG_REGEX = /^{{(?<innerTag>.+?)}}$/;\n\n/**\n * UUID generator functions mapped by tag name.\n * Note: Functions are called dynamically to generate UUIDs on demand.\n */\nexport const UUID_TYPES = {\n  uuid: 'uuid',\n  uuid_short: 'uuid_short',\n  uuid_shorter: 'uuid_shorter',\n};\n","import { getPathInfo } from '@sveltia/utils/file';\nimport { escapeRegExp } from '@sveltia/utils/string';\nimport { derived, get, writable } from 'svelte/store';\n\nimport { ESCAPED_PLACEHOLDER_REGEX } from '$lib/services/common/template/constants';\n\n/**\n * @import { Readable, Writable } from 'svelte/store';\n * @import { AssetFolderInfo, TypedFieldKeyPath } from '$lib/types/private';\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 conditions.\n * @param {object} cond Conditions.\n * @param {string | undefined} cond.collectionName Collection name.\n * @param {string} [cond.fileName] Collection file name. File/singleton collection only.\n * @param {TypedFieldKeyPath} [cond.typedKeyPath] Field key path. Required for field-level media\n * folders.\n * @param {boolean} [cond.isIndexFile] Whether the asset folder is for the special index file used\n * specifically in Hugo. It works only for field-level media folders in an entry collection.\n * @returns {AssetFolderInfo | undefined} Asset folder information if found.\n */\nexport const getAssetFolder = (cond) =>\n  get(allAssetFolders).find(\n    (folder) =>\n      folder.collectionName === cond.collectionName &&\n      folder.fileName === cond.fileName &&\n      ('typedKeyPath' in cond ? folder.typedKeyPath === cond.typedKeyPath : !folder.typedKeyPath) &&\n      ('isIndexFile' in cond ? folder.isIndexFile === cond.isIndexFile : !folder.isIndexFile),\n  );\n\n/**\n * Cache for {@link getAssetFoldersByPath} to avoid recreating regexes on every call.\n * `items`: non-entry-relative folders with both regex variants pre-compiled.\n * `entryRelative`: folders whose paths are relative to their parent entry.\n */\nconst assetFoldersByPathCache = {\n  source: /** @type {AssetFolderInfo[] | undefined} */ (undefined),\n  /** @type {Array<{ folder: AssetFolderInfo, regexSub: RegExp, regexExact: RegExp }>} */\n  items: [],\n  /** @type {AssetFolderInfo[]} */\n  entryRelative: [],\n};\n\n/**\n * Rebuild {@link assetFoldersByPathCache} when `allAssetFolders` changes.\n * @returns {typeof assetFoldersByPathCache} Cache object.\n */\nconst getAssetFolderPathCache = () => {\n  const _allAssetFolders = get(allAssetFolders);\n\n  if (_allAssetFolders === assetFoldersByPathCache.source) {\n    return assetFoldersByPathCache;\n  }\n\n  /** @type {Array<{ folder: AssetFolderInfo, regexSub: RegExp, regexExact: RegExp }>} */\n  const items = [];\n  /** @type {AssetFolderInfo[]} */\n  const entryRelative = [];\n\n  _allAssetFolders.forEach((folder) => {\n    const { internalPath, entryRelative: isRelative } = folder;\n\n    if (internalPath === undefined) {\n      return;\n    }\n\n    if (isRelative) {\n      entryRelative.push(folder);\n    } else {\n      // Pre-compile both regex variants so we don’t recreate them on every path lookup.\n      // The internal path can contain template tags like `{{slug}}`, which we normalize to `.+?`.\n      const normalizedPath = escapeRegExp(internalPath).replace(ESCAPED_PLACEHOLDER_REGEX, '.+?');\n\n      items.push({\n        folder,\n        // Match the end of the folder segment for sub-folder matching.\n        regexSub: new RegExp(`^${normalizedPath}${internalPath ? '(?=\\\\/|$)' : '$'}`),\n        regexExact: new RegExp(`^${normalizedPath}$`),\n      });\n    }\n  });\n\n  assetFoldersByPathCache.source = _allAssetFolders;\n  assetFoldersByPathCache.items = items;\n  assetFoldersByPathCache.entryRelative = entryRelative;\n\n  return assetFoldersByPathCache;\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, dirname } = 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  const { items, entryRelative } = getAssetFolderPathCache();\n  const dir = dirname ?? '';\n\n  const results = [\n    ...entryRelative.filter(({ internalPath }) => path.startsWith(`${internalPath}/`)),\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.\n    ...items\n      .filter(({ regexSub, regexExact }) => (matchSubFolders ? regexSub : regexExact).test(dir))\n      .map(({ folder }) => folder),\n  ];\n\n  // `internalPath` is always a string for items in results (entry-relative items are filtered to\n  // those with defined `internalPath`, and global-folder items always have `internalPath` set).\n  return results.sort((a, b) =>\n    /** @type {string} */ (b.internalPath).localeCompare(/** @type {string} */ (a.internalPath)),\n  );\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","const bidiChars = /^[\\u061c\\u200e\\u200f\\u2066-\\u2069]+/;\nconst nameChars = /^[-.+0-9A-Z_a-z\\u{a1}-\\u{61b}\\u{61d}-\\u{167f}\\u{1681}-\\u{1fff}\\u{200b}-\\u{200d}\\u{2010}-\\u{2027}\\u{2030}-\\u{205e}\\u{2060}-\\u{2065}\\u{206a}-\\u{2fff}\\u{3001}-\\u{d7ff}\\u{e000}-\\u{fdcf}\\u{fdf0}-\\u{fffd}\\u{10000}-\\u{1fffd}\\u{20000}-\\u{2fffd}\\u{30000}-\\u{3fffd}\\u{40000}-\\u{4fffd}\\u{50000}-\\u{5fffd}\\u{60000}-\\u{6fffd}\\u{70000}-\\u{7fffd}\\u{80000}-\\u{8fffd}\\u{90000}-\\u{9fffd}\\u{a0000}-\\u{afffd}\\u{b0000}-\\u{bfffd}\\u{c0000}-\\u{cfffd}\\u{d0000}-\\u{dfffd}\\u{e0000}-\\u{efffd}\\u{f0000}-\\u{ffffd}\\u{100000}-\\u{10fffd}]+/u;\nconst notNameStart = /^[-.0-9]/;\nexport function parseNameValue(source, start) {\n    let pos = start;\n    const startBidi = source.slice(pos).match(bidiChars);\n    if (startBidi)\n        pos += startBidi[0].length;\n    const match = source.slice(pos).match(nameChars);\n    if (!match)\n        return null;\n    const name = match[0];\n    if (notNameStart.test(name))\n        return null;\n    pos += name.length;\n    const endBidi = source.slice(pos).match(bidiChars);\n    if (endBidi)\n        pos += endBidi[0].length;\n    return { value: name.normalize(), end: pos };\n}\nexport function isValidUnquotedLiteral(str) {\n    const match = str.match(nameChars);\n    return !!match && match[0].length === str.length;\n}\nexport const parseUnquotedLiteralValue = (source, start) => source.slice(start).match(nameChars)?.[0] ?? '';\n","import { MessageSyntaxError } from \"../errors.js\";\n/**\n * Shared symbol used as a key on message data model nodes\n * to reference their CST source.\n *\n * Only set on message data model nodes when parsed by {@link messageFromCST}.\n */\nexport const cstKey = Symbol.for('CST');\n/**\n * Convert a CST message structure into its data model representation.\n *\n * In the returned {@link Model.Message},\n * all nodes include a reference to their source {@link CST} node\n * as a {@link cstKey} symbol-keyed property.\n */\nexport function messageFromCST(msg) {\n    for (const error of msg.errors)\n        throw error;\n    const declarations = msg.declarations\n        ? msg.declarations.map(asDeclaration)\n        : [];\n    if (msg.type === 'select') {\n        return {\n            type: 'select',\n            declarations,\n            selectors: msg.selectors.map(sel => asValue(sel)),\n            variants: msg.variants.map(variant => ({\n                keys: variant.keys.map(key => key.type === '*' ? { type: '*', [cstKey]: key } : asValue(key)),\n                value: asPattern(variant.value),\n                [cstKey]: variant\n            })),\n            [cstKey]: msg\n        };\n    }\n    else {\n        return {\n            type: 'message',\n            declarations,\n            pattern: asPattern(msg.pattern),\n            [cstKey]: msg\n        };\n    }\n}\nfunction asDeclaration(decl) {\n    switch (decl.type) {\n        case 'input': {\n            const value = asExpression(decl.value, false);\n            if (value.arg?.type !== 'variable') {\n                const { start, end } = decl.value;\n                throw new MessageSyntaxError('parse-error', start, end);\n            }\n            return {\n                type: 'input',\n                name: value.arg.name,\n                value: value,\n                [cstKey]: decl\n            };\n        }\n        case 'local':\n            return {\n                type: 'local',\n                name: asValue(decl.target).name,\n                value: asExpression(decl.value, false),\n                [cstKey]: decl\n            };\n        default:\n            throw new MessageSyntaxError('parse-error', decl.start, decl.end);\n    }\n}\nconst asPattern = (pattern) => pattern.body.map(el => el.type === 'text' ? el.value : asExpression(el, true));\nfunction asExpression(exp, allowMarkup) {\n    if (exp.type === 'expression') {\n        if (allowMarkup && exp.markup) {\n            const cm = exp.markup;\n            const name = asName(cm.name);\n            const kind = cm.open.value === '/' ? 'close' : cm.close ? 'standalone' : 'open';\n            const markup = { type: 'markup', kind, name };\n            if (cm.options.length)\n                markup.options = asOptions(cm.options);\n            if (exp.attributes.length) {\n                markup.attributes = asAttributes(exp.attributes);\n            }\n            markup[cstKey] = exp;\n            return markup;\n        }\n        const arg = exp.arg ? asValue(exp.arg) : undefined;\n        let functionRef;\n        const ca = exp.functionRef;\n        if (ca) {\n            if (ca.type === 'function') {\n                functionRef = { type: 'function', name: asName(ca.name) };\n                if (ca.options.length)\n                    functionRef.options = asOptions(ca.options);\n            }\n            else {\n                throw new MessageSyntaxError('parse-error', exp.start, exp.end);\n            }\n        }\n        let expression = arg\n            ? { type: 'expression', arg }\n            : undefined;\n        if (functionRef) {\n            functionRef[cstKey] = ca;\n            if (expression)\n                expression.functionRef = functionRef;\n            else\n                expression = { type: 'expression', functionRef: functionRef };\n        }\n        if (expression) {\n            if (exp.attributes.length) {\n                expression.attributes = asAttributes(exp.attributes);\n            }\n            expression[cstKey] = exp;\n            return expression;\n        }\n    }\n    throw new MessageSyntaxError('parse-error', exp.start, exp.end);\n}\nfunction asOptions(options) {\n    const map = {};\n    for (const opt of options) {\n        const name = asName(opt.name);\n        if (Object.hasOwn(map, name)) {\n            throw new MessageSyntaxError('duplicate-option-name', opt.start, opt.end);\n        }\n        map[name] = asValue(opt.value);\n    }\n    return map;\n}\nfunction asAttributes(attributes) {\n    const map = {};\n    for (const attr of attributes) {\n        const name = asName(attr.name);\n        if (Object.hasOwn(map, name)) {\n            throw new MessageSyntaxError('duplicate-attribute', attr.start, attr.end);\n        }\n        map[name] = attr.value ? asValue(attr.value) : true;\n    }\n    return map;\n}\nfunction asName(id) {\n    switch (id.length) {\n        case 1:\n            return id[0].value;\n        case 3:\n            return `${id[0].value}:${id[2].value}`;\n        default:\n            throw new MessageSyntaxError('parse-error', id[0]?.start ?? -1, id.at(-1)?.end ?? -1);\n    }\n}\nfunction asValue(value) {\n    switch (value.type) {\n        case 'literal':\n            return { type: 'literal', value: value.value, [cstKey]: value };\n        case 'variable':\n            return { type: 'variable', name: value.name, [cstKey]: value };\n        default:\n            throw new MessageSyntaxError('parse-error', value.start, value.end);\n    }\n}\n","import { cstKey } from \"./data-model/from-cst.js\";\n/**\n * Base error class used by MessageFormat\n *\n * @category Errors\n */\nexport class MessageError extends Error {\n    type;\n    constructor(type, message) {\n        super(message);\n        this.type = type;\n    }\n}\n/**\n * Errors in the message syntax.\n *\n * @category Errors\n */\nexport class MessageSyntaxError extends MessageError {\n    start;\n    end;\n    /** @private */\n    constructor(type, start, end, expected) {\n        let message = expected ? `Missing ${expected}` : type;\n        if (start >= 0)\n            message += ` at ${start}`;\n        super(type, message);\n        this.start = start;\n        this.end = end ?? start + 1;\n    }\n}\n/**\n * Errors in the message data model.\n *\n * @category Errors\n */\nexport class MessageDataModelError extends MessageSyntaxError {\n    /** @private */\n    constructor(type, node) {\n        const { start, end } = node[cstKey] ?? { start: -1, end: -1 };\n        super(type, start, end);\n    }\n}\n/**\n * Message runtime resolution errors\n *\n * @category Errors\n */\nexport class MessageResolutionError extends MessageError {\n    source;\n    cause;\n    constructor(type, message, source, cause) {\n        super(type, message);\n        this.source = source;\n        if (cause !== undefined)\n            this.cause = cause;\n    }\n}\n/**\n * Message runtime resolution errors\n *\n * @category Errors\n */\nexport class MessageFunctionError extends MessageError {\n    source;\n    cause;\n    constructor(type, message) {\n        super(type, message);\n        this.source = '�';\n    }\n}\n","import { parseNameValue, parseUnquotedLiteralValue } from \"../cst/names.js\";\nimport { MessageSyntaxError } from \"../errors.js\";\nconst bidiChars = new Set('\\u061C\\u200E\\u200F\\u2066\\u2067\\u2068\\u2069');\nconst whitespaceChars = new Set('\\t\\n\\r \\u3000');\n//// Parser State ////\nlet pos;\nlet source;\n//// Utilities & Error Wrappers ////\n// These indirections allow for the function names to be mangled,\n// while keeping the error class name intact.\nconst MissingSyntax = (pos, expected) => new MessageSyntaxError('missing-syntax', pos, pos + expected.length, expected);\nconst SyntaxError = (...args) => new MessageSyntaxError(...args);\nfunction expect(searchString, consume) {\n    if (source.startsWith(searchString, pos)) {\n        if (consume)\n            pos += searchString.length;\n    }\n    else {\n        throw MissingSyntax(pos, searchString);\n    }\n}\nexport function parseMessage(source_) {\n    pos = 0;\n    source = source_;\n    const decl = declarations();\n    if (source.startsWith('.match', pos))\n        return selectMessage(decl);\n    const quoted = decl.length > 0 || source.startsWith('{{', pos);\n    if (!quoted && pos > 0)\n        pos = 0;\n    const pattern_ = pattern(quoted);\n    if (quoted) {\n        ws();\n        if (pos < source.length) {\n            throw SyntaxError('extra-content', pos, source.length);\n        }\n    }\n    return { type: 'message', declarations: decl, pattern: pattern_ };\n}\nfunction selectMessage(declarations) {\n    pos += 6; // '.match'\n    ws(true);\n    const selectors = [];\n    while (source[pos] === '$') {\n        selectors.push(variable());\n        ws(true);\n    }\n    if (selectors.length === 0)\n        throw SyntaxError('empty-token', pos);\n    const variants = [];\n    while (pos < source.length) {\n        variants.push(variant());\n        ws();\n    }\n    return { type: 'select', declarations, selectors, variants };\n}\nfunction variant() {\n    const keys = [];\n    while (pos < source.length) {\n        ws(keys.length ? '{' : false);\n        const next = source[pos];\n        if (next === '{')\n            break;\n        if (next === '*') {\n            keys.push({ type: '*' });\n            pos += 1;\n        }\n        else {\n            const key = literal(true);\n            key.value = key.value.normalize();\n            keys.push(key);\n        }\n    }\n    return { keys, value: pattern(true) };\n}\nfunction pattern(quoted) {\n    if (quoted) {\n        if (source.startsWith('{{', pos))\n            pos += 2;\n        else\n            throw MissingSyntax(pos, '{{');\n    }\n    const pattern = [];\n    loop: while (pos < source.length) {\n        switch (source[pos]) {\n            case '{': {\n                pattern.push(expression(true));\n                break;\n            }\n            case '}':\n                if (!quoted)\n                    throw SyntaxError('parse-error', pos);\n                break loop;\n            default: {\n                pattern.push(text());\n            }\n        }\n    }\n    if (quoted) {\n        if (source.startsWith('}}', pos))\n            pos += 2;\n        else\n            throw MissingSyntax(pos, '}}');\n    }\n    return pattern;\n}\nfunction declarations() {\n    const declarations = [];\n    ws();\n    loop: while (source[pos] === '.') {\n        const keyword = source.substr(pos, 6);\n        switch (keyword) {\n            case '.input':\n                declarations.push(inputDeclaration());\n                break;\n            case '.local':\n                declarations.push(localDeclaration());\n                break;\n            case '.match':\n                break loop;\n            default:\n                throw SyntaxError('parse-error', pos);\n        }\n        ws();\n    }\n    return declarations;\n}\nfunction inputDeclaration() {\n    pos += 6; // '.input'\n    ws();\n    expect('{', false);\n    const valueStart = pos;\n    const value = expression(false);\n    if (value.type === 'expression' && value.arg?.type === 'variable') {\n        // @ts-expect-error TS isn't catching that value is Expression<VariableRef>\n        return { type: 'input', name: value.arg.name, value };\n    }\n    throw SyntaxError('bad-input-expression', valueStart, pos);\n}\nfunction localDeclaration() {\n    pos += 6; // '.local'\n    ws(true);\n    expect('$', true);\n    const name_ = name();\n    ws();\n    expect('=', true);\n    ws();\n    expect('{', false);\n    const value = expression(false);\n    return { type: 'local', name: name_, value };\n}\nfunction expression(allowMarkup) {\n    const start = pos;\n    pos += 1; // '{'\n    ws();\n    const arg = value(false);\n    if (arg)\n        ws('}');\n    const sigil = source[pos];\n    let functionRef;\n    let markup;\n    switch (sigil) {\n        case '@':\n        case '}':\n            break;\n        case ':': {\n            pos += 1; // ':'\n            functionRef = { type: 'function', name: identifier() };\n            const options_ = options();\n            if (options_)\n                functionRef.options = options_;\n            break;\n        }\n        case '#':\n        case '/': {\n            if (arg || !allowMarkup)\n                throw SyntaxError('parse-error', pos);\n            pos += 1; // '#' or '/'\n            const kind = sigil === '#' ? 'open' : 'close';\n            markup = { type: 'markup', kind, name: identifier() };\n            const options_ = options();\n            if (options_)\n                markup.options = options_;\n            break;\n        }\n        default:\n            throw SyntaxError('parse-error', pos);\n    }\n    const attributes_ = attributes();\n    if (markup?.kind === 'open' && source[pos] === '/') {\n        markup.kind = 'standalone';\n        pos += 1; // '/'\n    }\n    expect('}', true);\n    if (functionRef) {\n        const exp = arg\n            ? { type: 'expression', arg, functionRef: functionRef }\n            : { type: 'expression', functionRef: functionRef };\n        if (attributes_)\n            exp.attributes = attributes_;\n        return exp;\n    }\n    if (markup) {\n        if (attributes_)\n            markup.attributes = attributes_;\n        return markup;\n    }\n    if (!arg)\n        throw SyntaxError('empty-token', start, pos);\n    return attributes_\n        ? { type: 'expression', arg, attributes: attributes_ }\n        : { type: 'expression', arg };\n}\n/** Requires and consumes leading and trailing whitespace. */\nfunction options() {\n    ws('/}');\n    const options = {};\n    let isEmpty = true;\n    while (pos < source.length) {\n        const next = source[pos];\n        if (next === '@' || next === '/' || next === '}')\n            break;\n        const start = pos;\n        const name_ = identifier();\n        if (Object.hasOwn(options, name_)) {\n            throw SyntaxError('duplicate-option-name', start, pos);\n        }\n        ws();\n        expect('=', true);\n        ws();\n        options[name_] = value(true);\n        isEmpty = false;\n        ws('/}');\n    }\n    return isEmpty ? null : options;\n}\nfunction attributes() {\n    const attributes = {};\n    let isEmpty = true;\n    while (source[pos] === '@') {\n        const start = pos;\n        pos += 1; // '@'\n        const name_ = identifier();\n        if (Object.hasOwn(attributes, name_)) {\n            throw SyntaxError('duplicate-attribute', start, pos);\n        }\n        ws('=/}');\n        if (source[pos] === '=') {\n            pos += 1; // '='\n            ws();\n            attributes[name_] = literal(true);\n            ws('/}');\n        }\n        else {\n            attributes[name_] = true;\n        }\n        isEmpty = false;\n    }\n    return isEmpty ? null : attributes;\n}\nfunction text() {\n    let value = '';\n    let i = pos;\n    loop: for (; i < source.length; ++i) {\n        switch (source[i]) {\n            case '\\\\': {\n                const esc = source[i + 1];\n                if (!'\\\\{|}'.includes(esc))\n                    throw SyntaxError('bad-escape', i, i + 2);\n                value += source.substring(pos, i) + esc;\n                i += 1;\n                pos = i + 1;\n                break;\n            }\n            case '{':\n            case '}':\n                break loop;\n        }\n    }\n    value += source.substring(pos, i);\n    pos = i;\n    return value;\n}\nfunction value(required) {\n    return source[pos] === '$' ? variable() : literal(required);\n}\nfunction variable() {\n    pos += 1; // '$'\n    return { type: 'variable', name: name() };\n}\nfunction literal(required) {\n    if (source[pos] === '|')\n        return quotedLiteral();\n    const value = parseUnquotedLiteralValue(source, pos);\n    if (!value) {\n        if (required)\n            throw SyntaxError('empty-token', pos);\n        else\n            return undefined;\n    }\n    pos += value.length;\n    return { type: 'literal', value };\n}\nfunction quotedLiteral() {\n    pos += 1; // '|'\n    let value = '';\n    for (let i = pos; i < source.length; ++i) {\n        switch (source[i]) {\n            case '\\\\': {\n                const esc = source[i + 1];\n                if (!'\\\\{|}'.includes(esc))\n                    throw SyntaxError('bad-escape', i, i + 2);\n                value += source.substring(pos, i) + esc;\n                i += 1;\n                pos = i + 1;\n                break;\n            }\n            case '|':\n                value += source.substring(pos, i);\n                pos = i + 1;\n                return { type: 'literal', value };\n        }\n    }\n    throw MissingSyntax(source.length, '|');\n}\nfunction identifier() {\n    const name_ = name();\n    if (source[pos] === ':') {\n        pos += 1;\n        return name_ + ':' + name();\n    }\n    return name_;\n}\nfunction name() {\n    const name = parseNameValue(source, pos);\n    if (!name)\n        throw SyntaxError('empty-token', pos);\n    pos = name.end;\n    return name.value;\n}\nfunction ws(req = false) {\n    let next = source[pos];\n    let hasWS = false;\n    if (req) {\n        while (bidiChars.has(next))\n            next = source[++pos];\n        while (whitespaceChars.has(next)) {\n            next = source[++pos];\n            hasWS = true;\n        }\n    }\n    while (bidiChars.has(next) || whitespaceChars.has(next))\n        next = source[++pos];\n    if (req && !hasWS && (req === true || !req.includes(source[pos]))) {\n        throw MissingSyntax(pos, \"' '\");\n    }\n}\n","/**\n * Apply visitor functions to message nodes.\n *\n * The visitors are applied in source order, starting from the root.\n * Visitors for nodes that contain other nodes may return a callback function\n * that will be called with no arguments when exiting the node.\n *\n * If set, the `node` visitor is called for all {@link Node} values\n * for which an explicit visitor is not defined.\n *\n * Many visitors will be called with additional arguments\n * identifying some of the context for the visited node.\n *\n * @category Message Data Model\n */\nexport function visit(msg, visitors) {\n    const { node, pattern } = visitors;\n    const { functionRef = node, attributes = null, declaration = node, expression = node, key = node, markup = node, options = null, value = node, variant = node } = visitors;\n    const handleOptions = (options_, context) => {\n        if (options_) {\n            const end = options?.(options_, context);\n            if (value) {\n                for (const value_ of Object.values(options_)) {\n                    value(value_, context, 'option');\n                }\n            }\n            end?.();\n        }\n    };\n    const handleAttributes = (attributes_, context) => {\n        if (attributes_) {\n            const end = attributes?.(attributes_, context);\n            if (value) {\n                for (const value_ of Object.values(attributes_)) {\n                    if (value_ !== true)\n                        value(value_, context, 'attribute');\n                }\n            }\n            end?.();\n        }\n    };\n    const handleElement = (exp, context) => {\n        if (typeof exp === 'object') {\n            let end;\n            switch (exp.type) {\n                case 'expression': {\n                    end = expression?.(exp, context);\n                    if (exp.arg)\n                        value?.(exp.arg, context, 'arg');\n                    if (exp.functionRef) {\n                        const endA = functionRef?.(exp.functionRef, context, exp.arg);\n                        handleOptions(exp.functionRef.options, context);\n                        endA?.();\n                    }\n                    handleAttributes(exp.attributes, context);\n                    break;\n                }\n                case 'markup': {\n                    end = markup?.(exp, context);\n                    handleOptions(exp.options, context);\n                    handleAttributes(exp.attributes, context);\n                    break;\n                }\n            }\n            end?.();\n        }\n    };\n    const handlePattern = (pat) => {\n        const end = pattern?.(pat);\n        for (const el of pat)\n            handleElement(el, 'placeholder');\n        end?.();\n    };\n    for (const decl of msg.declarations) {\n        const end = declaration?.(decl);\n        if (decl.value)\n            handleElement(decl.value, 'declaration');\n        end?.();\n    }\n    if (msg.type === 'message') {\n        handlePattern(msg.pattern);\n    }\n    else {\n        if (value)\n            for (const sel of msg.selectors)\n                value(sel, 'selector', 'arg');\n        for (const vari of msg.variants) {\n            const end = variant?.(vari);\n            if (key)\n                vari.keys.forEach(key);\n            handlePattern(vari.value);\n            end?.();\n        }\n    }\n}\n","import { MessageDataModelError } from \"../errors.js\";\nimport { visit } from \"./visit.js\";\n/**\n * Ensure that the `msg` data model is _valid_, calling `onError` on errors.\n * If `onError` is not defined, a {@link MessageDataModelError} will be thrown on error.\n *\n * Detects the following errors:\n *\n * - `'key-mismatch'`: **Variant Key Mismatch**<br>\n *   The number of keys on a _variant_ does not equal the number of _selectors_.\n *\n * - `'missing-fallback'`: **Missing Fallback Variant**<br>\n *   The message does not include a _variant_ with only catch-all keys.\n *\n * - `'missing-selector-annotation'`: **Missing Selector Annotation**<br>\n *   A _selector_ does not contains a _variable_ that directly or indirectly\n *   reference a _declaration_ with a _function_.\n *\n * - `'duplicate-declaration'`: **Duplicate Declaration**<br>\n *   A _variable_ appears in two _declarations_.\n *\n * - `'duplicate-variant'`: **Duplicate Variant**<br>\n *   The same list of _keys_ is used for more than one _variant_.\n *\n * @category Message Data Model\n * @returns The sets of runtime `functions` and `variables` used by the message.\n */\nexport function validate(msg, onError = (type, node) => {\n    throw new MessageDataModelError(type, node);\n}) {\n    let selectorCount = 0;\n    let missingFallback = null;\n    /** Tracks directly & indirectly annotated variables for `missing-selector-annotation` */\n    const annotated = new Set();\n    /** Tracks declared variables for `duplicate-declaration` */\n    const declared = new Set();\n    const functions = new Set();\n    const localVars = new Set();\n    const variables = new Set();\n    const variants = new Set();\n    let setArgAsDeclared = true;\n    visit(msg, {\n        declaration(decl) {\n            // Skip all ReservedStatement\n            if (!decl.name)\n                return undefined;\n            if (decl.value.functionRef ||\n                (decl.type === 'local' &&\n                    decl.value.arg?.type === 'variable' &&\n                    annotated.has(decl.value.arg.name))) {\n                annotated.add(decl.name);\n            }\n            if (decl.type === 'local')\n                localVars.add(decl.name);\n            setArgAsDeclared = decl.type === 'local';\n            return () => {\n                if (declared.has(decl.name))\n                    onError('duplicate-declaration', decl);\n                else\n                    declared.add(decl.name);\n            };\n        },\n        expression({ functionRef }) {\n            if (functionRef)\n                functions.add(functionRef.name);\n        },\n        value(value, context, position) {\n            if (value.type !== 'variable')\n                return;\n            variables.add(value.name);\n            switch (context) {\n                case 'declaration':\n                    if (position !== 'arg' || setArgAsDeclared) {\n                        declared.add(value.name);\n                    }\n                    break;\n                case 'selector':\n                    selectorCount += 1;\n                    missingFallback = value;\n                    if (!annotated.has(value.name)) {\n                        onError('missing-selector-annotation', value);\n                    }\n            }\n        },\n        variant(variant) {\n            const { keys } = variant;\n            if (keys.length !== selectorCount)\n                onError('key-mismatch', variant);\n            const strKeys = JSON.stringify(keys.map(key => (key.type === 'literal' ? key.value : 0)));\n            if (variants.has(strKeys))\n                onError('duplicate-variant', variant);\n            else\n                variants.add(strKeys);\n            missingFallback &&= keys.every(key => key.type === '*') ? null : variant;\n        }\n    });\n    if (missingFallback)\n        onError('missing-fallback', missingFallback);\n    for (const lv of localVars)\n        variables.delete(lv);\n    return { functions, variables };\n}\n","export const LRI = '\\u2066';\nexport const RLI = '\\u2067';\nexport const FSI = '\\u2068';\nexport const PDI = '\\u2069';\n// Data source: RECOMMENDED and LIMITED_USE scripts from\n// https://github.com/unicode-org/cldr/blob/1a914d1/common/properties/scriptMetadata.txt\nconst RTL = 'Adlm,Arab,Hebr,Mand,Nkoo,Rohg,Syrc,Thaa';\n/** Get a default text direction for `locale`. */\nexport function getLocaleDir(locale) {\n    if (locale) {\n        try {\n            if (typeof locale === 'string')\n                locale = new Intl.Locale(locale);\n            // @ts-expect-error -- New feature, API changed during Stage 3\n            const info = locale.getTextInfo?.() ?? locale.textInfo;\n            if (info?.direction)\n                return info.direction;\n            const script = locale.maximize().script;\n            if (script)\n                return RTL.includes(script) ? 'rtl' : 'ltr';\n        }\n        catch {\n            // Use 'auto' on error\n        }\n    }\n    return 'auto';\n}\n","/**\n * Utility function for custom functions.\n * Cast a value as a Boolean,\n * unwrapping objects using their `valueOf()` methods.\n * Also accepts `'true'` and `'false'`.\n * Throws a `RangeError` for invalid inputs.\n */\nexport function asBoolean(value) {\n    if (value && typeof value === 'object')\n        value = value.valueOf();\n    if (typeof value === 'boolean')\n        return value;\n    if (value && typeof value === 'object')\n        value = String(value);\n    if (value === 'true')\n        return true;\n    if (value === 'false')\n        return false;\n    throw new RangeError('Not a boolean');\n}\n/**\n * Utility function for custom functions.\n * Cast a value as a non-negative integer,\n * unwrapping objects using their `valueOf()` methods.\n * Also accepts JSON string reprentations of integers.\n * Throws a `RangeError` for invalid inputs.\n *\n * The default functions use this to validate _digit size options_.\n */\nexport function asPositiveInteger(value) {\n    if (value && typeof value === 'object')\n        value = value.valueOf();\n    if (value && typeof value === 'object')\n        value = String(value);\n    if (typeof value === 'string' && /^(0|[1-9][0-9]*)$/.test(value)) {\n        value = Number(value);\n    }\n    if (typeof value === 'number' && value >= 0 && Number.isInteger(value)) {\n        return value;\n    }\n    throw new RangeError('Not a positive integer');\n}\n/**\n * Utility function for custom functions.\n * Cast a value as a string,\n * unwrapping objects using their `valueOf()` methods.\n * Throws a `RangeError` for invalid inputs.\n */\nexport function asString(value) {\n    if (value && typeof value === 'object')\n        value = value.valueOf();\n    if (typeof value === 'string')\n        return value;\n    if (value && typeof value === 'object')\n        return String(value);\n    throw new RangeError('Not a string');\n}\n","import { getLocaleDir } from \"../dir-utils.js\";\nimport { MessageFunctionError } from \"../errors.js\";\nimport { asPositiveInteger, asString } from \"./utils.js\";\nexport function readNumericOperand(value) {\n    let options = undefined;\n    if (typeof value === 'object') {\n        const valueOf = value?.valueOf;\n        if (typeof valueOf === 'function') {\n            options = value.options;\n            value = valueOf.call(value);\n        }\n    }\n    if (typeof value === 'string') {\n        try {\n            value = JSON.parse(value);\n        }\n        catch {\n            // handled below\n        }\n    }\n    if (typeof value !== 'bigint' && typeof value !== 'number') {\n        throw new MessageFunctionError('bad-operand', 'Input is not numeric');\n    }\n    return { value, options };\n}\nexport function getMessageNumber(ctx, value, options, canSelect) {\n    let { dir, locales } = ctx;\n    // @ts-expect-error We may have been a bit naughty earlier.\n    if (options.useGrouping === 'never')\n        options.useGrouping = false;\n    if (canSelect &&\n        'select' in options &&\n        !ctx.literalOptionKeys.has('select')) {\n        ctx.onError('bad-option', 'The option select may only be set by a literal value');\n        canSelect = false;\n    }\n    let locale;\n    let nf;\n    let cat;\n    let str;\n    return {\n        type: 'number',\n        get dir() {\n            if (dir == null) {\n                locale ??= Intl.NumberFormat.supportedLocalesOf(locales, options)[0];\n                dir = getLocaleDir(locale);\n            }\n            return dir;\n        },\n        get options() {\n            return { ...options };\n        },\n        selectKey: canSelect\n            ? keys => {\n                let numVal = value;\n                if (options.style === 'percent') {\n                    if (typeof numVal === 'bigint')\n                        numVal *= 100n;\n                    else\n                        numVal *= 100;\n                }\n                const str = String(numVal);\n                if (keys.has(str))\n                    return str;\n                if (options.select === 'exact')\n                    return null;\n                const pluralOpt = options.select\n                    ? { ...options, select: undefined, type: options.select }\n                    : options;\n                // Intl.PluralRules needs a number, not bigint\n                cat ??= new Intl.PluralRules(locales, pluralOpt).select(Number(numVal));\n                return keys.has(cat) ? cat : null;\n            }\n            : undefined,\n        toParts() {\n            nf ??= new Intl.NumberFormat(locales, options);\n            const parts = nf.formatToParts(value);\n            locale ??= nf.resolvedOptions().locale;\n            dir ??= getLocaleDir(locale);\n            return dir === 'ltr' || dir === 'rtl'\n                ? [{ type: 'number', dir, locale, parts }]\n                : [{ type: 'number', locale, parts }];\n        },\n        toString() {\n            nf ??= new Intl.NumberFormat(locales, options);\n            str ??= nf.format(value);\n            return str;\n        },\n        valueOf: () => value\n    };\n}\nexport function number(ctx, exprOpt, operand) {\n    const input = readNumericOperand(operand);\n    const value = input.value;\n    const options = Object.assign({}, input.options, {\n        localeMatcher: ctx.localeMatcher,\n        style: 'decimal'\n    });\n    for (const [name, optval] of Object.entries(exprOpt)) {\n        if (optval === undefined)\n            continue;\n        try {\n            switch (name) {\n                case 'minimumIntegerDigits':\n                case 'minimumFractionDigits':\n                case 'maximumFractionDigits':\n                case 'minimumSignificantDigits':\n                case 'maximumSignificantDigits':\n                case 'roundingIncrement':\n                    // @ts-expect-error TS types don't know about roundingIncrement\n                    options[name] = asPositiveInteger(optval);\n                    break;\n                case 'roundingMode':\n                case 'roundingPriority':\n                case 'select': // Called 'type' in Intl.PluralRules\n                case 'signDisplay':\n                case 'trailingZeroDisplay':\n                case 'useGrouping':\n                    // @ts-expect-error Let Intl.NumberFormat construction fail\n                    options[name] = asString(optval);\n            }\n        }\n        catch {\n            ctx.onError('bad-option', `Value ${optval} is not valid for :number option ${name}`);\n        }\n    }\n    return getMessageNumber(ctx, value, options, true);\n}\nexport function integer(ctx, exprOpt, operand) {\n    const input = readNumericOperand(operand);\n    const value = Number.isFinite(input.value)\n        ? Math.round(input.value)\n        : input.value;\n    const options = Object.assign({}, input.options, {\n        //localeMatcher: ctx.localeMatcher,\n        maximumFractionDigits: 0,\n        minimumFractionDigits: undefined,\n        minimumSignificantDigits: undefined,\n        style: 'decimal'\n    });\n    for (const [name, optval] of Object.entries(exprOpt)) {\n        if (optval === undefined)\n            continue;\n        try {\n            switch (name) {\n                case 'minimumIntegerDigits':\n                case 'maximumSignificantDigits':\n                    options[name] = asPositiveInteger(optval);\n                    break;\n                case 'select': // Called 'type' in Intl.PluralRules\n                case 'signDisplay':\n                case 'useGrouping':\n                    // @ts-expect-error Let Intl.NumberFormat construction fail\n                    options[name] = asString(optval);\n            }\n        }\n        catch {\n            ctx.onError('bad-option', `Value ${optval} is not valid for :integer option ${name}`);\n        }\n    }\n    return getMessageNumber(ctx, value, options, true);\n}\n","import { MessageFunctionError } from \"../errors.js\";\nimport { getMessageNumber, readNumericOperand } from \"./number.js\";\nimport { asPositiveInteger, asString } from \"./utils.js\";\n/**\n * `currency` accepts as input numerical values as well as\n * objects wrapping a numerical value that also include a `currency` property.\n *\n * @beta\n */\nexport function currency(ctx, exprOpt, operand) {\n    const input = readNumericOperand(operand);\n    const options = Object.assign({}, input.options, {\n        localeMatcher: ctx.localeMatcher,\n        style: 'currency'\n    });\n    for (const [name, optval] of Object.entries(exprOpt)) {\n        if (optval === undefined)\n            continue;\n        try {\n            switch (name) {\n                case 'currency':\n                case 'currencySign':\n                case 'roundingMode':\n                case 'roundingPriority':\n                case 'trailingZeroDisplay':\n                case 'useGrouping':\n                    // @ts-expect-error Let Intl.NumberFormat construction fail\n                    options[name] = asString(optval);\n                    break;\n                case 'minimumIntegerDigits':\n                case 'minimumSignificantDigits':\n                case 'maximumSignificantDigits':\n                case 'roundingIncrement':\n                    // @ts-expect-error TS types don't know about roundingIncrement\n                    options[name] = asPositiveInteger(optval);\n                    break;\n                case 'currencyDisplay': {\n                    const strval = asString(optval);\n                    if (strval === 'never') {\n                        ctx.onError('unsupported-operation', 'Currency display \"never\" is not yet supported');\n                    }\n                    else {\n                        // @ts-expect-error Let Intl.NumberFormat construction fail\n                        options[name] = strval;\n                    }\n                    break;\n                }\n                case 'fractionDigits': {\n                    const strval = asString(optval);\n                    if (strval === 'auto') {\n                        options.minimumFractionDigits = undefined;\n                        options.maximumFractionDigits = undefined;\n                    }\n                    else {\n                        const numval = asPositiveInteger(strval);\n                        options.minimumFractionDigits = numval;\n                        options.maximumFractionDigits = numval;\n                    }\n                    break;\n                }\n            }\n        }\n        catch {\n            ctx.onError('bad-option', `Value ${optval} is not valid for :currency option ${name}`);\n        }\n    }\n    if (!options.currency) {\n        throw new MessageFunctionError('bad-operand', 'A currency code is required for :currency');\n    }\n    return getMessageNumber(ctx, input.value, options, false);\n}\n","import { getLocaleDir } from \"../dir-utils.js\";\nimport { MessageFunctionError } from \"../errors.js\";\nimport { asBoolean, asString } from \"./utils.js\";\nconst dateFieldsValues = new Set([\n    'weekday',\n    'day-weekday',\n    'month-day',\n    'month-day-weekday',\n    'year-month-day',\n    'year-month-day-weekday'\n]);\nconst dateLengthValues = new Set(['long', 'medium', 'short']);\nconst timePrecisionValues = new Set(['hour', 'minute', 'second']);\nconst timeZoneStyleValues = new Set(['long', 'short']);\n/**\n * The function `:datetime` is used to format a date/time value.\n * Its formatted result will always include both the date and the time, and optionally a timezone.\n *\n * @beta\n */\nexport const datetime = (ctx, options, operand) => dateTimeImplementation('datetime', ctx, options, operand);\n/**\n * The function `:date` is used to format the date portion of date/time values.\n *\n * @beta\n */\nexport const date = (ctx, options, operand) => dateTimeImplementation('date', ctx, options, operand);\n/**\n * The function `:time` is used to format the time portion of date/time values.\n * Its formatted result will always include the time, and optionally a timezone.\n *\n * @beta\n */\nexport const time = (ctx, options, operand) => dateTimeImplementation('time', ctx, options, operand);\nfunction dateTimeImplementation(functionName, ctx, exprOpt, operand) {\n    const options = {\n        localeMatcher: ctx.localeMatcher\n    };\n    let value = operand;\n    if (typeof value === 'object' && value !== null) {\n        const opt = value.options;\n        if (opt) {\n            options.calendar = opt.calendar;\n            if (functionName !== 'date')\n                options.hour12 = opt.hour12;\n            options.timeZone = opt.timeZone;\n        }\n        if (typeof value.valueOf === 'function')\n            value = value.valueOf();\n    }\n    switch (typeof value) {\n        case 'number':\n        case 'string':\n            value = new Date(value);\n    }\n    if (!(value instanceof Date) || isNaN(value.getTime())) {\n        throw new MessageFunctionError('bad-operand', 'Input is not a valid date');\n    }\n    // Override options\n    if (exprOpt.calendar !== undefined) {\n        try {\n            options.calendar = asString(exprOpt.calendar);\n        }\n        catch {\n            ctx.onError('bad-option', `Invalid :${functionName} calendar option value`);\n        }\n    }\n    if (exprOpt.hour12 !== undefined && functionName !== 'date') {\n        try {\n            options.hour12 = asBoolean(exprOpt.hour12);\n        }\n        catch {\n            ctx.onError('bad-option', `Invalid :${functionName} hour12 option value`);\n        }\n    }\n    if (exprOpt.timeZone !== undefined) {\n        let tz;\n        try {\n            tz = asString(exprOpt.timeZone);\n        }\n        catch {\n            ctx.onError('bad-option', `Invalid :${functionName} timeZone option value`);\n        }\n        if (tz === 'input') {\n            if (options.timeZone === undefined) {\n                ctx.onError('bad-operand', `Missing input timeZone value for :${functionName}`);\n            }\n        }\n        else if (tz !== undefined) {\n            if (options.timeZone !== undefined && tz !== options.timeZone) {\n                // Use fallback value for expression\n                throw new MessageFunctionError('bad-option', 'Time zone conversion is not supported');\n            }\n            options.timeZone = tz;\n        }\n    }\n    // Date formatting options\n    if (functionName !== 'time') {\n        const dfName = functionName === 'date' ? 'fields' : 'dateFields';\n        const dlName = functionName === 'date' ? 'length' : 'dateLength';\n        const dateFieldsValue = readStringOption(ctx, exprOpt, dfName, dateFieldsValues) ??\n            'year-month-day';\n        const dateLength = readStringOption(ctx, exprOpt, dlName, dateLengthValues);\n        const dateFields = new Set(dateFieldsValue.split('-'));\n        if (dateFields.has('year'))\n            options.year = 'numeric';\n        if (dateFields.has('month')) {\n            options.month =\n                dateLength === 'long'\n                    ? 'long'\n                    : dateLength === 'short'\n                        ? 'numeric'\n                        : 'short';\n        }\n        if (dateFields.has('day'))\n            options.day = 'numeric';\n        if (dateFields.has('weekday')) {\n            options.weekday = dateLength === 'long' ? 'long' : 'short';\n        }\n    }\n    // Time formatting options\n    if (functionName !== 'date') {\n        const tpName = functionName === 'time' ? 'precision' : 'timePrecision';\n        switch (readStringOption(ctx, exprOpt, tpName, timePrecisionValues)) {\n            case 'hour':\n                options.hour = 'numeric';\n                break;\n            case 'second':\n                options.hour = 'numeric';\n                options.minute = 'numeric';\n                options.second = 'numeric';\n                break;\n            default:\n                options.hour = 'numeric';\n                options.minute = 'numeric';\n        }\n        options.timeZoneName = readStringOption(ctx, exprOpt, 'timeZoneStyle', timeZoneStyleValues);\n    }\n    // Resolved value\n    const dtf = new Intl.DateTimeFormat(ctx.locales, options);\n    let dir = ctx.dir;\n    let locale;\n    let str;\n    return {\n        type: 'datetime',\n        get dir() {\n            if (dir == null) {\n                locale ??= dtf.resolvedOptions().locale;\n                dir = getLocaleDir(locale);\n            }\n            return dir;\n        },\n        get options() {\n            return { ...options };\n        },\n        toParts() {\n            const parts = dtf.formatToParts(value);\n            locale ??= dtf.resolvedOptions().locale;\n            dir ??= getLocaleDir(locale);\n            return dir === 'ltr' || dir === 'rtl'\n                ? [{ type: 'datetime', dir, locale, parts }]\n                : [{ type: 'datetime', locale, parts }];\n        },\n        toString() {\n            str ??= dtf.format(value);\n            return str;\n        },\n        valueOf: () => value\n    };\n}\nfunction readStringOption(ctx, options, name, allowed) {\n    const value = options[name];\n    if (value !== undefined) {\n        try {\n            const str = asString(value);\n            if (allowed && !allowed.has(str))\n                throw Error();\n            return str;\n        }\n        catch {\n            ctx.onError('bad-option', `Invalid value for ${name} option`);\n        }\n    }\n    return undefined;\n}\n","import { MessageFunctionError } from \"../errors.js\";\nimport { number, readNumericOperand } from \"./number.js\";\nimport { asPositiveInteger } from \"./utils.js\";\n/**\n * `offset` accepts a numeric value as input and adds or subtracts an integer value from it\n *\n * @beta\n */\nexport function offset(ctx, exprOpt, operand) {\n    let { value, options } = readNumericOperand(operand);\n    let add;\n    try {\n        add = 'add' in exprOpt ? asPositiveInteger(exprOpt.add) : -1;\n    }\n    catch {\n        throw new MessageFunctionError('bad-option', `Value ${exprOpt.add} is not valid for :offset option add`);\n    }\n    let sub;\n    try {\n        sub = 'subtract' in exprOpt ? asPositiveInteger(exprOpt.subtract) : -1;\n    }\n    catch {\n        throw new MessageFunctionError('bad-option', `Value ${exprOpt.subtract} is not valid for :offset option subtract`);\n    }\n    if (add < 0 === sub < 0) {\n        const msg = 'Exactly one of \"add\" or \"subtract\" is required as an :offset option';\n        throw new MessageFunctionError('bad-option', msg);\n    }\n    const delta = add < 0 ? -sub : add;\n    if (typeof value === 'number')\n        value += delta;\n    else\n        value += BigInt(delta);\n    return number(ctx, {}, { valueOf: () => value, options });\n}\n","import { getMessageNumber, readNumericOperand } from \"./number.js\";\nimport { asPositiveInteger, asString } from \"./utils.js\";\n/**\n * The function `:percent` is a selector and formatter for percent values.\n *\n * @beta\n */\nexport function percent(ctx, exprOpt, operand) {\n    const input = readNumericOperand(operand);\n    const options = Object.assign({}, input.options, {\n        localeMatcher: ctx.localeMatcher,\n        style: 'percent'\n    });\n    for (const [name, optval] of Object.entries(exprOpt)) {\n        if (optval === undefined)\n            continue;\n        try {\n            switch (name) {\n                case 'roundingMode':\n                case 'roundingPriority':\n                case 'signDisplay':\n                case 'trailingZeroDisplay':\n                case 'useGrouping':\n                    // @ts-expect-error Let Intl.NumberFormat construction fail\n                    options[name] = asString(optval);\n                    break;\n                case 'minimumFractionDigits':\n                case 'maximumFractionDigits':\n                case 'minimumSignificantDigits':\n                case 'maximumSignificantDigits':\n                    options[name] = asPositiveInteger(optval);\n                    break;\n            }\n        }\n        catch {\n            ctx.onError('bad-option', `Value ${optval} is not valid for :percent option ${name}`);\n        }\n    }\n    return getMessageNumber(ctx, input.value, options, true);\n}\n","export function string(ctx, _options, operand) {\n    const str = operand === undefined ? '' : String(operand);\n    const selStr = str.normalize();\n    return {\n        type: 'string',\n        dir: ctx.dir ?? 'auto',\n        selectKey: keys => (keys.has(selStr) ? selStr : null),\n        toParts() {\n            const { dir } = ctx;\n            const locale = ctx.locales[0];\n            return dir === 'ltr' || dir === 'rtl'\n                ? [{ type: 'string', dir, locale, value: str }]\n                : [{ type: 'string', locale, value: str }];\n        },\n        toString: () => str,\n        valueOf: () => str\n    };\n}\n","import { MessageError, MessageFunctionError } from \"../errors.js\";\nimport { getMessageNumber, readNumericOperand } from \"./number.js\";\nimport { asPositiveInteger, asString } from \"./utils.js\";\n/**\n * `unit` accepts as input numerical values as well as\n * objects wrapping a numerical value that also include a `unit` property.\n *\n * @beta\n */\nexport function unit(ctx, exprOpt, operand) {\n    const input = readNumericOperand(operand);\n    const options = Object.assign({}, input.options, {\n        localeMatcher: ctx.localeMatcher,\n        style: 'unit'\n    });\n    for (const [name, optval] of Object.entries(exprOpt)) {\n        if (optval === undefined)\n            continue;\n        try {\n            switch (name) {\n                case 'signDisplay':\n                case 'roundingMode':\n                case 'roundingPriority':\n                case 'trailingZeroDisplay':\n                case 'unit':\n                case 'unitDisplay':\n                case 'useGrouping':\n                    // @ts-expect-error Let Intl.NumberFormat construction fail\n                    options[name] = asString(optval);\n                    break;\n                case 'minimumIntegerDigits':\n                case 'minimumFractionDigits':\n                case 'maximumFractionDigits':\n                case 'minimumSignificantDigits':\n                case 'maximumSignificantDigits':\n                case 'roundingIncrement':\n                    // @ts-expect-error TS types don't know about roundingIncrement\n                    options[name] = asPositiveInteger(optval);\n                    break;\n            }\n        }\n        catch (error) {\n            if (error instanceof MessageError) {\n                ctx.onError(error);\n            }\n            else {\n                ctx.onError('bad-option', `Value ${optval} is not valid for :currency option ${name}`);\n            }\n        }\n    }\n    if (!options.unit) {\n        throw new MessageFunctionError('bad-operand', 'A unit identifier is required for :unit');\n    }\n    return getMessageNumber(ctx, input.value, options, false);\n}\n","/**\n * Implementations for :number, :string, and other default functions,\n * along with some utilities for building custom function handlers.\n *\n * ```js\n * import { MessageFormat } from 'messageformat';\n * import { DraftFunctions } from 'messageformat/functions';\n *\n * const mf = new MessageFormat(locale, msgSrc, { functions: DraftFunctions });\n * ```\n *\n * @module\n */\nexport { getLocaleDir } from \"../dir-utils.js\";\nexport { asBoolean, asPositiveInteger, asString } from \"./utils.js\";\nimport { currency } from \"./currency.js\";\nimport { date, datetime, time } from \"./datetime.js\";\nimport { integer, number } from \"./number.js\";\nimport { offset } from \"./offset.js\";\nimport { percent } from \"./percent.js\";\nimport { string } from \"./string.js\";\nimport { unit } from \"./unit.js\";\n/**\n * Functions classified as REQUIRED by the\n * {@link https://www.unicode.org/reports/tr35/tr35-76/tr35-messageFormat.html#contents-of-part-9-messageformat | LDML 48 MessageFormat specification}.\n */\nexport let DefaultFunctions = {\n    /**\n     * Supports formatting and selection as defined in LDML 48 for the\n     * {@link https://www.unicode.org/reports/tr35/tr35-76/tr35-messageFormat.html#the-integer-function | :integer function}.\n     *\n     * The `operand` must be a number, BigInt, or string representing a JSON number,\n     * or an object wrapping such a value, with a `valueOf()` accessor and an optional `options` object.\n     */\n    integer,\n    /**\n     * Supports formatting and selection as defined in LDML 48 for the\n     * {@link https://www.unicode.org/reports/tr35/tr35-76/tr35-messageFormat.html#the-number-function | :number function}.\n     *\n     * The `operand` must be a number, BigInt, or string representing a JSON number,\n     * or an object wrapping such a value, with a `valueOf()` accessor and an optional `options` object.\n     */\n    number,\n    /**\n     * Supports formatting and selection as defined in LDML 48 for the\n     * {@link https://www.unicode.org/reports/tr35/tr35-76/tr35-messageFormat.html#the-offset-function | :offset function}.\n     *\n     * The `operand` must be a number, BigInt, or string representing a JSON number,\n     * or an object wrapping such a value, with a `valueOf()` accessor and an optional `options` object.\n     */\n    offset,\n    /**\n     * Supports formatting and selection as defined in LDML 48 for the\n     * {@link https://www.unicode.org/reports/tr35/tr35-76/tr35-messageFormat.html#the-string-function | :string function}.\n     *\n     * The `operand` must be a stringifiable value.\n     * An `undefined` value is resolved as an empty string.\n     */\n    string\n};\nDefaultFunctions = Object.freeze(Object.assign(Object.create(null), DefaultFunctions));\n/**\n * Functions classified as DRAFT by the\n * {@link https://www.unicode.org/reports/tr35/tr35-76/tr35-messageFormat.html#contents-of-part-9-messageformat | LDML 48 MessageFormat specification}.\n *\n * These are liable to change, and are **_not_** covered by any stability guarantee.\n *\n * ```js\n * import { MessageFormat } from 'messageformat';\n * import { DraftFunctions } from 'messageformat/functions';\n *\n * const mf = new MessageFormat(locale, msgsrc, { functions: DraftFunctions });\n * ```\n *\n * @beta\n */\nexport let DraftFunctions = {\n    /**\n     * Supports formatting as defined in LDML 48 for the\n     * {@link https://www.unicode.org/reports/tr35/tr35-76/tr35-messageFormat.html#the-currency-function | :currency function}.\n     *\n     * The `operand` must be a number, BigInt, or string representing a JSON number,\n     * or an object wrapping such a value, with a `valueOf()` accessor and an optional `options` object.\n     *\n     * The `currency` option must be provided by either the operand's `options` or the `exprOpt` expression options.\n     */\n    currency,\n    /**\n     * Supports formatting as defined in LDML 48 for the\n     * {@link https://www.unicode.org/reports/tr35/tr35-76/tr35-messageFormat.html#the-date-function | :date function}.\n     *\n     * The `operand` must be a Date, number, or string representing a date,\n     * or an object wrapping such a value, with a `valueOf()` accessor and an optional `options` object.\n     */\n    date,\n    /**\n     * Supports formatting as defined in LDML 48 for the\n     * {@link https://www.unicode.org/reports/tr35/tr35-76/tr35-messageFormat.html#the-datetime-function | :datetime function}.\n     *\n     * The `operand` must be a Date, number, or string representing a date,\n     * or an object wrapping such a value, with a `valueOf()` accessor and an optional `options` object.\n     */\n    datetime,\n    /**\n     * Supports formatting as defined in LDML 48 for the\n     * {@link https://www.unicode.org/reports/tr35/tr35-76/tr35-messageFormat.html#the-percent-function | :percent function}.\n     *\n     * The `operand` must be a number, BigInt, or string representing a JSON number,\n     * or an object wrapping such a value, with a `valueOf()` accessor and an optional `options` object.\n     */\n    percent,\n    /**\n     * Supports formatting as defined in LDML 48 for the\n     * {@link https://www.unicode.org/reports/tr35/tr35-76/tr35-messageFormat.html#the-time-function | :time function}.\n     *\n     * The `operand` must be a Date, number, or string representing a date,\n     * or an object wrapping such a value, with a `valueOf()` accessor and an optional `options` object.\n     */\n    time,\n    /**\n     * Supports formatting as defined in LDML 48 for the\n     * {@link https://www.unicode.org/reports/tr35/tr35-76/tr35-messageFormat.html#the-unit-function | :unit function}.\n     *\n     * The `operand` must be a number, BigInt, or string representing a JSON number,\n     * or an object wrapping such a value, with a `valueOf()` accessor and an optional `options` object.\n     *\n     * The `unit` option must be provided by either the operand's `options` or the `exprOpt` expression options.\n     */\n    unit\n};\nDraftFunctions = Object.freeze(Object.assign(Object.create(null), DraftFunctions));\n","export const BIDI_ISOLATE = Symbol('bidi-isolate');\n","export const fallback = (source = '�') => ({\n    type: 'fallback',\n    source,\n    toParts: () => [{ type: 'fallback', source }],\n    toString: () => `{${source}}`\n});\n","export const unknown = (source, input) => ({\n    type: 'unknown',\n    source,\n    dir: 'auto',\n    toParts: () => [{ type: 'unknown', value: input }],\n    toString: () => String(input),\n    valueOf: () => input\n});\n","import { MessageFunctionError } from \"../errors.js\";\nimport { getValueSource, resolveValue } from \"./resolve-value.js\";\nexport class MessageFunctionContext {\n    #ctx;\n    #litKeys;\n    #source;\n    dir;\n    id;\n    constructor(ctx, source, options) {\n        this.#ctx = ctx;\n        this.#source = source;\n        this.dir = undefined;\n        const dirOpt = options && Object.hasOwn(options, 'u:dir') ? options['u:dir'] : undefined;\n        if (dirOpt) {\n            const dir = String(resolveValue(ctx, dirOpt));\n            if (dir === 'ltr' || dir === 'rtl' || dir === 'auto') {\n                this.dir = dir;\n            }\n            else if (dir !== 'inherit') {\n                const error = new MessageFunctionError('bad-option', 'Unsupported value for u:dir option');\n                error.source = getValueSource(dirOpt);\n                ctx.onError(error);\n            }\n        }\n        const idOpt = options && Object.hasOwn(options, 'u:id') ? options['u:id'] : undefined;\n        this.id = idOpt ? String(resolveValue(ctx, idOpt)) : undefined;\n        if (options) {\n            this.#litKeys = new Set();\n            for (const [key, value] of Object.entries(options)) {\n                if (value.type === 'literal')\n                    this.#litKeys.add(key);\n            }\n        }\n    }\n    get literalOptionKeys() {\n        return new Set(this.#litKeys);\n    }\n    get localeMatcher() {\n        return this.#ctx.localeMatcher;\n    }\n    get locales() {\n        return this.#ctx.locales.map(String);\n    }\n    onError(error, message) {\n        let mfError;\n        if (error instanceof MessageFunctionError) {\n            mfError = error;\n        }\n        else if (typeof error === 'string' && typeof message === 'string') {\n            mfError = new MessageFunctionError(error, message);\n        }\n        else {\n            mfError = new MessageFunctionError('function-error', String(error));\n            mfError.cause = error;\n        }\n        mfError.source = this.#source;\n        this.#ctx.onError(mfError);\n    }\n}\n","import { MessageError, MessageResolutionError } from \"../errors.js\";\nimport { fallback } from \"../functions/fallback.js\";\nimport { BIDI_ISOLATE } from \"../message-value.js\";\nimport { MessageFunctionContext } from \"./function-context.js\";\nimport { getValueSource, resolveValue } from \"./resolve-value.js\";\nexport function resolveFunctionRef(ctx, operand, { name, options }) {\n    const fnSource = `:${name}`;\n    const source = getValueSource(operand) ?? fnSource;\n    try {\n        const fnInput = operand ? [resolveValue(ctx, operand)] : [];\n        const rf = ctx.functions[name];\n        if (!rf) {\n            throw new MessageResolutionError('unknown-function', `Unknown function ${fnSource}`, source);\n        }\n        const msgCtx = new MessageFunctionContext(ctx, source, options);\n        const opt = resolveOptions(ctx, options);\n        const res = rf(msgCtx, opt, ...fnInput);\n        if (res === null ||\n            typeof res !== 'object' ||\n            typeof res.type !== 'string') {\n            throw new MessageResolutionError('bad-function-result', `Function ${fnSource} did not return a MessageValue`, source);\n        }\n        const override = { source };\n        if (msgCtx.dir) {\n            override.dir = msgCtx.dir;\n            override[BIDI_ISOLATE] = true;\n        }\n        if (msgCtx.id && typeof res.toParts === 'function') {\n            override.toParts = () => {\n                const parts = res.toParts();\n                for (const part of parts)\n                    part.id = msgCtx.id;\n                return parts;\n            };\n        }\n        return { ...res, ...override };\n    }\n    catch (error) {\n        ctx.onError(error instanceof MessageError\n            ? error\n            : new MessageResolutionError('bad-function-result', String(error), source, error));\n        return fallback(source);\n    }\n}\nfunction resolveOptions(ctx, options) {\n    const opt = Object.create(null);\n    if (options) {\n        for (const [name, value] of Object.entries(options)) {\n            if (!name.startsWith('u:'))\n                opt[name] = resolveValue(ctx, value);\n        }\n    }\n    return opt;\n}\n","import { string } from \"../functions/string.js\";\nimport { MessageFunctionContext } from \"./function-context.js\";\nimport { resolveFunctionRef } from \"./resolve-function-ref.js\";\nimport { resolveVariableRef } from \"./resolve-variable.js\";\nexport function resolveExpression(ctx, { arg, functionRef }) {\n    if (functionRef) {\n        return resolveFunctionRef(ctx, arg, functionRef);\n    }\n    switch (arg?.type) {\n        case 'literal': {\n            const source = `|${arg.value}|`;\n            const msgCtx = new MessageFunctionContext(ctx, source);\n            const msgStr = string(msgCtx, {}, arg.value);\n            msgStr.source = source;\n            return msgStr;\n        }\n        case 'variable':\n            return resolveVariableRef(ctx, arg);\n        default:\n            // @ts-expect-error - should never happen\n            throw new Error(`Unsupported expression: ${arg?.type}`);\n    }\n}\n","import { MessageResolutionError } from \"../errors.js\";\nimport { fallback } from \"../functions/fallback.js\";\nimport { unknown } from \"../functions/unknown.js\";\nimport { MessageFunctionContext } from \"./function-context.js\";\nimport { resolveExpression } from \"./resolve-expression.js\";\n/**\n * Declarations aren't resolved until they're requierd,\n * and their resolution order matters for variable resolution.\n * This internal class is used to store any required data,\n * and to allow for `instanceof` detection.\n *\n * @internal\n */\nexport class UnresolvedExpression {\n    expression;\n    scope;\n    constructor(expression, scope) {\n        this.expression = expression;\n        this.scope = scope;\n    }\n}\nconst isScope = (scope) => scope !== null && (typeof scope === 'object' || typeof scope === 'function');\n/**\n * Looks for the longest matching `.` delimited starting substring of name.\n * @returns `undefined` if value not found\n */\nfunction getValue(scope, name) {\n    if (isScope(scope)) {\n        if (name in scope)\n            return scope[name];\n        const parts = name.split('.');\n        for (let i = parts.length - 1; i > 0; --i) {\n            const head = parts.slice(0, i).join('.');\n            if (head in scope) {\n                const tail = parts.slice(i).join('.');\n                return getValue(scope[head], tail);\n            }\n        }\n        for (const [key, value] of Object.entries(scope)) {\n            if (key.normalize() === name)\n                return value;\n        }\n    }\n    return undefined;\n}\n/**\n * Get the raw value of a variable.\n * Resolves declarations as necessary\n *\n * @internal\n * @returns `unknown` or `any` for input values;\n *   `MessageValue` for `.input` and `.local` declaration values.\n */\nexport function lookupVariableRef(ctx, { name }) {\n    const value = getValue(ctx.scope, name);\n    if (value === undefined) {\n        const source = '$' + name;\n        const msg = `Variable not available: ${source}`;\n        ctx.onError(new MessageResolutionError('unresolved-variable', msg, source));\n    }\n    else if (value instanceof UnresolvedExpression) {\n        const local = resolveExpression(value.scope ? { ...ctx, scope: value.scope } : ctx, value.expression);\n        ctx.scope[name] = local;\n        ctx.localVars.add(local);\n        return local;\n    }\n    return value;\n}\nexport function resolveVariableRef(ctx, ref) {\n    const source = '$' + ref.name;\n    const value = lookupVariableRef(ctx, ref);\n    if (value === undefined)\n        return fallback(source);\n    let type = typeof value;\n    if (type === 'object') {\n        const mv = value;\n        if (mv.type === 'fallback')\n            return fallback(source);\n        if (ctx.localVars.has(mv)) {\n            mv.source = source;\n            return mv;\n        }\n        if (value instanceof Number)\n            type = 'number';\n        else if (value instanceof String)\n            type = 'string';\n    }\n    let msgFn;\n    switch (type) {\n        case 'bigint':\n        case 'number':\n            msgFn = ctx.functions.number;\n            break;\n        case 'string':\n            msgFn = ctx.functions.string;\n            break;\n        default:\n            return unknown(source, value);\n    }\n    const msgCtx = new MessageFunctionContext(ctx, source);\n    const mv = msgFn(msgCtx, {}, value);\n    mv.source = source;\n    return mv;\n}\n","import { lookupVariableRef } from \"./resolve-variable.js\";\nexport function resolveValue(ctx, value) {\n    switch (value.type) {\n        case 'literal':\n            return value.value;\n        case 'variable':\n            return lookupVariableRef(ctx, value);\n        default:\n            // @ts-expect-error - should never happen\n            throw new Error(`Unsupported value: ${value.type}`);\n    }\n}\nexport function getValueSource(value) {\n    switch (value?.type) {\n        case 'literal':\n            return ('|' + value.value.replaceAll('\\\\', '\\\\\\\\').replaceAll('|', '\\\\|') + '|');\n        case 'variable':\n            return '$' + value.name;\n        default:\n            return undefined;\n    }\n}\n","import { MessageFunctionError } from \"../errors.js\";\nimport { getValueSource, resolveValue } from \"./resolve-value.js\";\nexport function formatMarkup(ctx, { kind, name, options }) {\n    const part = { type: 'markup', kind, name };\n    const entries = options ? Object.entries(options) : null;\n    if (entries?.length) {\n        part.options = {};\n        for (const [name, value] of entries) {\n            if (name === 'u:dir') {\n                const error = new MessageFunctionError('bad-option', `The option ${name} is not valid for markup`);\n                error.source = getValueSource(value);\n                ctx.onError(error);\n            }\n            else {\n                let rv = resolveValue(ctx, value);\n                if (typeof rv === 'object' && typeof rv?.valueOf === 'function') {\n                    rv = rv.valueOf();\n                }\n                if (name === 'u:id')\n                    part.id = String(rv);\n                else\n                    part.options[name] = rv;\n            }\n        }\n    }\n    return part;\n}\n","import { MessageResolutionError } from \"./errors.js\";\nimport { resolveVariableRef } from \"./resolve/resolve-variable.js\";\nexport function selectPattern(context, message) {\n    if (message.type === 'message')\n        return message.pattern;\n    // message.type === 'select'\n    const ctx = message.selectors.map(sel => {\n        const selector = resolveVariableRef(context, sel);\n        let selectKey;\n        if (typeof selector.selectKey === 'function') {\n            selectKey = selector.selectKey.bind(selector);\n        }\n        else {\n            const msg = 'Selector does not support selection';\n            context.onError(new MessageResolutionError('bad-selector', msg, selector.source));\n            selectKey = () => null;\n        }\n        return {\n            selectKey,\n            source: selector.source,\n            best: null,\n            keys: null\n        };\n    });\n    let candidates = message.variants;\n    loop: for (let i = 0; i < ctx.length; ++i) {\n        const sc = ctx[i];\n        if (!sc.keys) {\n            sc.keys = new Set();\n            for (const { keys } of candidates) {\n                const key = keys[i];\n                if (!key)\n                    break loop; // key-mismatch error\n                if (key.type !== '*')\n                    sc.keys.add(key.value);\n            }\n        }\n        try {\n            sc.best = sc.keys.size ? sc.selectKey(sc.keys) : null;\n        }\n        catch (error) {\n            const msg = 'Selection failed';\n            context.onError(new MessageResolutionError('bad-selector', msg, sc.source, error));\n            sc.selectKey = () => null;\n            sc.best = null;\n        }\n        // Leave out all candidate variants that aren't the best,\n        // or only the catchall ones, if nothing else matches.\n        candidates = candidates.filter(v => {\n            const k = v.keys[i];\n            if (k.type === '*')\n                return sc.best == null;\n            return sc.best === k.value;\n        });\n        // If we've run out of candidates,\n        // drop the previous best key of the preceding selector,\n        // reset all subsequent key sets,\n        // and restart the loop.\n        if (candidates.length === 0) {\n            if (i === 0)\n                break; // No match; should not happen\n            const prev = ctx[i - 1];\n            if (prev.best == null)\n                prev.keys?.clear();\n            else\n                prev.keys?.delete(prev.best);\n            for (let j = i; j < ctx.length; ++j)\n                ctx[j].keys = null;\n            candidates = message.variants;\n            i = -1;\n        }\n    }\n    const res = candidates[0];\n    if (!res) {\n        // This should not be possible with a valid message.\n        const msg = 'No variant was selected!?';\n        context.onError(new MessageResolutionError('no-match', msg, '.match'));\n        return [];\n    }\n    return res.value;\n}\n","import { parseMessage } from \"./data-model/parse.js\";\nimport { validate } from \"./data-model/validate.js\";\nimport { FSI, LRI, PDI, RLI, getLocaleDir } from \"./dir-utils.js\";\nimport { MessageFunctionError } from \"./errors.js\";\nimport { DefaultFunctions } from \"./functions/index.js\";\nimport { BIDI_ISOLATE } from \"./message-value.js\";\nimport { formatMarkup } from \"./resolve/format-markup.js\";\nimport { resolveExpression } from \"./resolve/resolve-expression.js\";\nimport { UnresolvedExpression } from \"./resolve/resolve-variable.js\";\nimport { selectPattern } from \"./select-pattern.js\";\n/**\n * A message formatter for that implements the\n * {@link https://www.unicode.org/reports/tr35/tr35-76/tr35-messageFormat.html#contents-of-part-9-messageformat | LDML 48 MessageFormat}\n * specification as well as the {@link https://github.com/tc39/proposal-intl-messageformat/ | TC39 Intl.MessageFormat proposal}.\n *\n * @category Formatting\n * @typeParam T - The `type` used by custom message functions, if any.\n *   These extend the {@link DefaultFunctions | default functions}.\n * @typeParam P - The formatted-parts `type` used by any custom message values.\n */\nexport class MessageFormat {\n    #bidiIsolation;\n    #dir;\n    #localeMatcher;\n    #locales;\n    #message;\n    #functions;\n    constructor(locales, source, options) {\n        this.#bidiIsolation = options?.bidiIsolation !== 'none';\n        this.#localeMatcher = options?.localeMatcher ?? 'best fit';\n        this.#locales = Array.isArray(locales)\n            ? locales.map(lc => new Intl.Locale(lc))\n            : locales\n                ? [new Intl.Locale(locales)]\n                : [];\n        this.#dir = options?.dir ?? getLocaleDir(this.#locales[0]);\n        this.#message = typeof source === 'string' ? parseMessage(source) : source;\n        validate(this.#message);\n        this.#functions = options?.functions\n            ? Object.assign(Object.create(null), DefaultFunctions, options.functions)\n            : DefaultFunctions;\n    }\n    /**\n     * Format a message to a string.\n     *\n     * ```js\n     * import { MessageFormat } from 'messageformat';\n     * import { DraftFunctions } from 'messageformat/functions';\n     *\n     * const msg = 'Hello {$user.name}, today is {$date :date style=long}';\n     * const mf = new MessageFormat('en', msg, { functions: DraftFunctions });\n     * mf.format({ user: { name: 'Kat' }, date: new Date('2025-03-01') });\n     * ```\n     *\n     * ```js\n     * 'Hello Kat, today is March 1, 2025'\n     * ```\n     *\n     * @param msgParams - Values that may be referenced by `$`-prefixed variable references.\n     *   To refer to an inner property of an object value,\n     *   use `.` as a separator; in case of conflict, the longest starting substring wins.\n     * @param onError - Called in case of error.\n     *   If not set, errors are by default logged as warnings.\n     */\n    format(msgParams, onError) {\n        const ctx = this.#createContext(msgParams, onError);\n        let res = '';\n        for (const elem of selectPattern(ctx, this.#message)) {\n            if (typeof elem === 'string') {\n                res += elem;\n            }\n            else if (elem.type === 'markup') {\n                // Handle errors, but discard results\n                formatMarkup(ctx, elem);\n            }\n            else {\n                let mv;\n                try {\n                    mv = resolveExpression(ctx, elem);\n                    if (typeof mv.toString === 'function') {\n                        if (this.#bidiIsolation &&\n                            (this.#dir !== 'ltr' || mv.dir !== 'ltr' || mv[BIDI_ISOLATE])) {\n                            const pre = mv.dir === 'ltr' ? LRI : mv.dir === 'rtl' ? RLI : FSI;\n                            res += pre + mv.toString() + PDI;\n                        }\n                        else {\n                            res += mv.toString();\n                        }\n                    }\n                    else {\n                        const error = new MessageFunctionError('not-formattable', 'Message part is not formattable');\n                        error.source = mv.source;\n                        throw error;\n                    }\n                }\n                catch (error) {\n                    ctx.onError(error);\n                    const errStr = `{${mv?.source ?? '�'}}`;\n                    res += this.#bidiIsolation ? FSI + errStr + PDI : errStr;\n                }\n            }\n        }\n        return res;\n    }\n    /**\n     * Format a message to a sequence of parts.\n     *\n     * ```js\n     * import { MessageFormat } from 'messageformat';\n     * import { DraftFunctions } from 'messageformat/functions';\n     *\n     * const msg = 'Hello {$user.name}, today is {$date :date style=long}';\n     * const mf = new MessageFormat('en', msg, { functions: DraftFunctions });\n     * mf.formatToParts({ user: { name: 'Kat' }, date: new Date('2025-03-01') });\n     * ```\n     *\n     * ```js\n     * [\n     *   { type: 'text', value: 'Hello ' },\n     *   { type: 'bidiIsolation', value: '\\u2068' },\n     *   { type: 'string', locale: 'en', value: 'Kat' },\n     *   { type: 'bidiIsolation', value: '\\u2069' },\n     *   { type: 'text', value: ', today is ' },\n     *   {\n     *     type: 'datetime',\n     *     dir: 'ltr',\n     *     locale: 'en',\n     *     parts: [\n     *       { type: 'month', value: 'March' },\n     *       { type: 'literal', value: ' ' },\n     *       { type: 'day', value: '1' },\n     *       { type: 'literal', value: ', ' },\n     *       { type: 'year', value: '2025' }\n     *     ]\n     *   }\n     * ]\n     * ```\n     *\n     * @param msgParams - Values that may be referenced by `$`-prefixed variable references.\n     *   To refer to an inner property of an object value,\n     *   use `.` as a separator; in case of conflict, the longest starting substring wins.\n     * @param onError - Called in case of error.\n     *   If not set, errors are by default logged as warnings.\n     */\n    formatToParts(msgParams, onError) {\n        const ctx = this.#createContext(msgParams, onError);\n        const parts = [];\n        for (const elem of selectPattern(ctx, this.#message)) {\n            if (typeof elem === 'string') {\n                parts.push({ type: 'text', value: elem });\n            }\n            else if (elem.type === 'markup') {\n                parts.push(formatMarkup(ctx, elem));\n            }\n            else {\n                let mv;\n                try {\n                    mv = resolveExpression(ctx, elem);\n                    if (typeof mv.toParts === 'function') {\n                        // Let's presume that parts that look like MessageNumberPart or MessageStringPart are such.\n                        const mp = mv.toParts();\n                        if (this.#bidiIsolation &&\n                            (this.#dir !== 'ltr' || mv.dir !== 'ltr' || mv[BIDI_ISOLATE])) {\n                            const pre = mv.dir === 'ltr' ? LRI : mv.dir === 'rtl' ? RLI : FSI;\n                            parts.push({ type: 'bidiIsolation', value: pre }, ...mp, {\n                                type: 'bidiIsolation',\n                                value: PDI\n                            });\n                        }\n                        else {\n                            parts.push(...mp);\n                        }\n                    }\n                    else {\n                        const error = new MessageFunctionError('not-formattable', 'Message part is not formattable');\n                        error.source = mv.source;\n                        throw error;\n                    }\n                }\n                catch (error) {\n                    ctx.onError(error);\n                    const fb = {\n                        type: 'fallback',\n                        source: mv?.source ?? '�'\n                    };\n                    if (this.#bidiIsolation) {\n                        parts.push({ type: 'bidiIsolation', value: FSI }, fb, {\n                            type: 'bidiIsolation',\n                            value: PDI\n                        });\n                    }\n                    else {\n                        parts.push(fb);\n                    }\n                }\n            }\n        }\n        return parts;\n    }\n    #createContext(msgParams, onError = (error) => {\n        // Emit warning for errors by default\n        try {\n            process.emitWarning(error);\n        }\n        catch {\n            console.warn(error);\n        }\n    }) {\n        const scope = { ...msgParams };\n        for (const decl of this.#message.declarations) {\n            scope[decl.name] = new UnresolvedExpression(decl.value, decl.type === 'input' ? (msgParams ?? {}) : undefined);\n        }\n        const ctx = {\n            onError,\n            localeMatcher: this.#localeMatcher,\n            locales: this.#locales,\n            localVars: new WeakSet(),\n            functions: this.#functions,\n            scope\n        };\n        return ctx;\n    }\n}\n","/**\n * @module\n * @showGroups\n * @showCategories\n */\nexport { parseMessage } from \"./data-model/parse.js\";\nexport { stringifyMessage } from \"./data-model/stringify.js\";\nexport { isCatchallKey, isExpression, isFunctionRef, isLiteral, isMarkup, isMessage, isPatternMessage, isSelectMessage, isVariableRef } from \"./data-model/type-guards.js\";\nexport { validate } from \"./data-model/validate.js\";\nexport { visit } from \"./data-model/visit.js\";\nexport { MessageDataModelError, MessageError, MessageFunctionError, MessageResolutionError, MessageSyntaxError } from \"./errors.js\";\nexport { MessageFormat } from \"./messageformat.js\";\n","/** @import { Source } from '#client' */\nimport { derived } from '../internal/client/index.js';\nimport { set, state } from '../internal/client/reactivity/sources.js';\nimport { tag } from '../internal/client/dev/tracing.js';\nimport { active_reaction, get, set_active_reaction } from '../internal/client/runtime.js';\nimport { DEV } from 'esm-env';\n\nvar inited = false;\n\n/**\n * A reactive version of the built-in [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) object.\n * Reading the date (whether with methods like `date.getTime()` or `date.toString()`, or via things like [`Intl.DateTimeFormat`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat))\n * in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)\n * will cause it to be re-evaluated when the value of the date changes.\n *\n * ```svelte\n * <script>\n * \timport { SvelteDate } from 'svelte/reactivity';\n *\n * \tconst date = new SvelteDate();\n *\n * \tconst formatter = new Intl.DateTimeFormat(undefined, {\n * \t  hour: 'numeric',\n * \t  minute: 'numeric',\n * \t  second: 'numeric'\n * \t});\n *\n * \t$effect(() => {\n * \t\tconst interval = setInterval(() => {\n * \t\t\tdate.setTime(Date.now());\n * \t\t}, 1000);\n *\n * \t\treturn () => {\n * \t\t\tclearInterval(interval);\n * \t\t};\n * \t});\n * </script>\n *\n * <p>The time is {formatter.format(date)}</p>\n * ```\n */\nexport class SvelteDate extends Date {\n\t#time = state(super.getTime());\n\n\t/** @type {Map<keyof Date, Source<unknown>>} */\n\t#deriveds = new Map();\n\n\t#reaction = active_reaction;\n\n\t/** @param {any[]} params */\n\tconstructor(...params) {\n\t\t// @ts-ignore\n\t\tsuper(...params);\n\n\t\tif (DEV) {\n\t\t\ttag(this.#time, 'SvelteDate.#time');\n\t\t}\n\n\t\tif (!inited) this.#init();\n\t}\n\n\t#init() {\n\t\tinited = true;\n\n\t\tvar proto = SvelteDate.prototype;\n\t\tvar date_proto = Date.prototype;\n\n\t\tvar methods = /** @type {Array<keyof Date & string>} */ (\n\t\t\tObject.getOwnPropertyNames(date_proto)\n\t\t);\n\n\t\tfor (const method of methods) {\n\t\t\tif (method.startsWith('get') || method.startsWith('to') || method === 'valueOf') {\n\t\t\t\t// @ts-ignore\n\t\t\t\tproto[method] = function (...args) {\n\t\t\t\t\t// don't memoize if there are arguments\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tif (args.length > 0) {\n\t\t\t\t\t\tget(this.#time);\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\treturn date_proto[method].apply(this, args);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar d = this.#deriveds.get(method);\n\n\t\t\t\t\tif (d === undefined) {\n\t\t\t\t\t\t// lazily create the derived, but as though it were being\n\t\t\t\t\t\t// created at the same time as the class instance\n\t\t\t\t\t\tconst reaction = active_reaction;\n\t\t\t\t\t\tset_active_reaction(this.#reaction);\n\n\t\t\t\t\t\td = derived(() => {\n\t\t\t\t\t\t\tget(this.#time);\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\treturn date_proto[method].apply(this, args);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\t\ttag(d, `SvelteDate.${method}()`);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis.#deriveds.set(method, d);\n\n\t\t\t\t\t\tset_active_reaction(reaction);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn get(d);\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (method.startsWith('set')) {\n\t\t\t\t// @ts-ignore\n\t\t\t\tproto[method] = function (...args) {\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tvar result = date_proto[method].apply(this, args);\n\t\t\t\t\tset(this.#time, date_proto.getTime.call(this));\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n}\n","/** @import { Source } from '#client' */\nimport { DEV } from 'esm-env';\nimport { source, set, state, increment } from '../internal/client/reactivity/sources.js';\nimport { label, tag } from '../internal/client/dev/tracing.js';\nimport { get, update_version } from '../internal/client/runtime.js';\n\nvar read_methods = ['forEach', 'isDisjointFrom', 'isSubsetOf', 'isSupersetOf'];\nvar set_like_methods = ['difference', 'intersection', 'symmetricDifference', 'union'];\n\nvar inited = false;\n\n/**\n * A reactive version of the built-in [`Set`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) object.\n * Reading contents of the set (by iterating, or by reading `set.size` or calling `set.has(...)` as in the [example](https://svelte.dev/playground/53438b51194b4882bcc18cddf9f96f15) below) in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)\n * will cause it to be re-evaluated as necessary when the set is updated.\n *\n * Note that values in a reactive set are _not_ made [deeply reactive](https://svelte.dev/docs/svelte/$state#Deep-state).\n *\n * ```svelte\n * <script>\n * \timport { SvelteSet } from 'svelte/reactivity';\n * \tlet monkeys = new SvelteSet();\n *\n * \tfunction toggle(monkey) {\n * \t\tif (monkeys.has(monkey)) {\n * \t\t\tmonkeys.delete(monkey);\n * \t\t} else {\n * \t\t\tmonkeys.add(monkey);\n * \t\t}\n * \t}\n * </script>\n *\n * {#each ['🙈', '🙉', '🙊'] as monkey}\n * \t<button onclick={() => toggle(monkey)}>{monkey}</button>\n * {/each}\n *\n * <button onclick={() => monkeys.clear()}>clear</button>\n *\n * {#if monkeys.has('🙈')}<p>see no evil</p>{/if}\n * {#if monkeys.has('🙉')}<p>hear no evil</p>{/if}\n * {#if monkeys.has('🙊')}<p>speak no evil</p>{/if}\n * ```\n *\n * @template T\n * @extends {Set<T>}\n */\nexport class SvelteSet extends Set {\n\t/** @type {Map<T, Source<boolean>>} */\n\t#sources = new Map();\n\t#version = state(0);\n\t#size = state(0);\n\t#update_version = update_version || -1;\n\n\t/**\n\t * @param {Iterable<T> | null | undefined} [value]\n\t */\n\tconstructor(value) {\n\t\tsuper();\n\n\t\tif (DEV) {\n\t\t\t// If the value is invalid then the native exception will fire here\n\t\t\tvalue = new Set(value);\n\n\t\t\ttag(this.#version, 'SvelteSet version');\n\t\t\ttag(this.#size, 'SvelteSet.size');\n\t\t}\n\n\t\tif (value) {\n\t\t\tfor (var element of value) {\n\t\t\t\tsuper.add(element);\n\t\t\t}\n\t\t\tthis.#size.v = super.size;\n\t\t}\n\n\t\tif (!inited) this.#init();\n\t}\n\n\t/**\n\t * If the source is being created inside the same reaction as the SvelteSet instance,\n\t * we use `state` so that it will not be a dependency of the reaction. Otherwise we\n\t * use `source` so it will be.\n\t *\n\t * @template T\n\t * @param {T} value\n\t * @returns {Source<T>}\n\t */\n\t#source(value) {\n\t\treturn update_version === this.#update_version ? state(value) : source(value);\n\t}\n\n\t// We init as part of the first instance so that we can treeshake this class\n\t#init() {\n\t\tinited = true;\n\n\t\tvar proto = SvelteSet.prototype;\n\t\tvar set_proto = Set.prototype;\n\n\t\tfor (const method of read_methods) {\n\t\t\t// @ts-ignore\n\t\t\tproto[method] = function (...v) {\n\t\t\t\tget(this.#version);\n\t\t\t\t// @ts-ignore\n\t\t\t\treturn set_proto[method].apply(this, v);\n\t\t\t};\n\t\t}\n\n\t\tfor (const method of set_like_methods) {\n\t\t\t// @ts-ignore\n\t\t\tproto[method] = function (...v) {\n\t\t\t\tget(this.#version);\n\t\t\t\t// @ts-ignore\n\t\t\t\tvar set = /** @type {Set<T>} */ (set_proto[method].apply(this, v));\n\t\t\t\treturn new SvelteSet(set);\n\t\t\t};\n\t\t}\n\t}\n\n\t/** @param {T} value */\n\thas(value) {\n\t\tvar has = super.has(value);\n\t\tvar sources = this.#sources;\n\t\tvar s = sources.get(value);\n\n\t\tif (s === undefined) {\n\t\t\tif (!has) {\n\t\t\t\t// If the value doesn't exist, track the version in case it's added later\n\t\t\t\t// but don't create sources willy-nilly to track all possible values\n\t\t\t\tget(this.#version);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\ts = this.#source(true);\n\n\t\t\tif (DEV) {\n\t\t\t\ttag(s, `SvelteSet has(${label(value)})`);\n\t\t\t}\n\n\t\t\tsources.set(value, s);\n\t\t}\n\n\t\tget(s);\n\t\treturn has;\n\t}\n\n\t/** @param {T} value */\n\tadd(value) {\n\t\tif (!super.has(value)) {\n\t\t\tsuper.add(value);\n\t\t\tset(this.#size, super.size);\n\t\t\tincrement(this.#version);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/** @param {T} value */\n\tdelete(value) {\n\t\tvar deleted = super.delete(value);\n\t\tvar sources = this.#sources;\n\t\tvar s = sources.get(value);\n\n\t\tif (s !== undefined) {\n\t\t\tsources.delete(value);\n\t\t\tset(s, false);\n\t\t}\n\n\t\tif (deleted) {\n\t\t\tset(this.#size, super.size);\n\t\t\tincrement(this.#version);\n\t\t}\n\n\t\treturn deleted;\n\t}\n\n\tclear() {\n\t\tif (super.size === 0) {\n\t\t\treturn;\n\t\t}\n\t\t// Clear first, so we get nice console.log outputs with $inspect\n\t\tsuper.clear();\n\t\tvar sources = this.#sources;\n\n\t\tfor (var s of sources.values()) {\n\t\t\tset(s, false);\n\t\t}\n\n\t\tsources.clear();\n\t\tset(this.#size, 0);\n\t\tincrement(this.#version);\n\t}\n\n\tkeys() {\n\t\treturn this.values();\n\t}\n\n\tvalues() {\n\t\tget(this.#version);\n\t\treturn super.values();\n\t}\n\n\tentries() {\n\t\tget(this.#version);\n\t\treturn super.entries();\n\t}\n\n\t[Symbol.iterator]() {\n\t\treturn this.keys();\n\t}\n\n\tget size() {\n\t\treturn get(this.#size);\n\t}\n}\n","/** @import { Source } from '#client' */\nimport { DEV } from 'esm-env';\nimport { set, source, state, increment } from '../internal/client/reactivity/sources.js';\nimport { label, tag } from '../internal/client/dev/tracing.js';\nimport { get, update_version } from '../internal/client/runtime.js';\n\n/**\n * A reactive version of the built-in [`Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) object.\n * Reading contents of the map (by iterating, or by reading `map.size` or calling `map.get(...)` or `map.has(...)` as in the [tic-tac-toe example](https://svelte.dev/playground/0b0ff4aa49c9443f9b47fe5203c78293) below) in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)\n * will cause it to be re-evaluated as necessary when the map is updated.\n *\n * Note that values in a reactive map are _not_ made [deeply reactive](https://svelte.dev/docs/svelte/$state#Deep-state).\n *\n * ```svelte\n * <script>\n * \timport { SvelteMap } from 'svelte/reactivity';\n * \timport { result } from './game.js';\n *\n * \tlet board = new SvelteMap();\n * \tlet player = $state('x');\n * \tlet winner = $derived(result(board));\n *\n * \tfunction reset() {\n * \t\tplayer = 'x';\n * \t\tboard.clear();\n * \t}\n * </script>\n *\n * <div class=\"board\">\n * \t{#each Array(9), i}\n * \t\t<button\n * \t\t\tdisabled={board.has(i) || winner}\n * \t\t\tonclick={() => {\n * \t\t\t\tboard.set(i, player);\n * \t\t\t\tplayer = player === 'x' ? 'o' : 'x';\n * \t\t\t}}\n * \t\t>{board.get(i)}</button>\n * \t{/each}\n * </div>\n *\n * {#if winner}\n * \t<p>{winner} wins!</p>\n * \t<button onclick={reset}>reset</button>\n * {:else}\n * \t<p>{player} is next</p>\n * {/if}\n * ```\n *\n * @template K\n * @template V\n * @extends {Map<K, V>}\n */\nexport class SvelteMap extends Map {\n\t/** @type {Map<K, Source<number>>} */\n\t#sources = new Map();\n\t#version = state(0);\n\t#size = state(0);\n\t#update_version = update_version || -1;\n\n\t/**\n\t * @param {Iterable<readonly [K, V]> | null | undefined} [value]\n\t */\n\tconstructor(value) {\n\t\tsuper();\n\n\t\tif (DEV) {\n\t\t\t// If the value is invalid then the native exception will fire here\n\t\t\tvalue = new Map(value);\n\n\t\t\ttag(this.#version, 'SvelteMap version');\n\t\t\ttag(this.#size, 'SvelteMap.size');\n\t\t}\n\n\t\tif (value) {\n\t\t\tfor (var [key, v] of value) {\n\t\t\t\tsuper.set(key, v);\n\t\t\t}\n\t\t\tthis.#size.v = super.size;\n\t\t}\n\t}\n\n\t/**\n\t * If the source is being created inside the same reaction as the SvelteMap instance,\n\t * we use `state` so that it will not be a dependency of the reaction. Otherwise we\n\t * use `source` so it will be.\n\t *\n\t * @template T\n\t * @param {T} value\n\t * @returns {Source<T>}\n\t */\n\t#source(value) {\n\t\treturn update_version === this.#update_version ? state(value) : source(value);\n\t}\n\n\t/** @param {K} key */\n\thas(key) {\n\t\tvar sources = this.#sources;\n\t\tvar s = sources.get(key);\n\n\t\tif (s === undefined) {\n\t\t\tif (super.has(key)) {\n\t\t\t\ts = this.#source(0);\n\n\t\t\t\tif (DEV) {\n\t\t\t\t\ttag(s, `SvelteMap get(${label(key)})`);\n\t\t\t\t}\n\n\t\t\t\tsources.set(key, s);\n\t\t\t} else {\n\t\t\t\t// We should always track the version in case\n\t\t\t\t// the Set ever gets this value in the future.\n\t\t\t\tget(this.#version);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tget(s);\n\t\treturn true;\n\t}\n\n\t/**\n\t * @param {(value: V, key: K, map: Map<K, V>) => void} callbackfn\n\t * @param {any} [this_arg]\n\t */\n\tforEach(callbackfn, this_arg) {\n\t\tthis.#read_all();\n\t\tsuper.forEach(callbackfn, this_arg);\n\t}\n\n\t/** @param {K} key */\n\tget(key) {\n\t\tvar sources = this.#sources;\n\t\tvar s = sources.get(key);\n\n\t\tif (s === undefined) {\n\t\t\tif (super.has(key)) {\n\t\t\t\ts = this.#source(0);\n\n\t\t\t\tif (DEV) {\n\t\t\t\t\ttag(s, `SvelteMap get(${label(key)})`);\n\t\t\t\t}\n\n\t\t\t\tsources.set(key, s);\n\t\t\t} else {\n\t\t\t\t// We should always track the version in case\n\t\t\t\t// the Set ever gets this value in the future.\n\t\t\t\tget(this.#version);\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t}\n\n\t\tget(s);\n\t\treturn super.get(key);\n\t}\n\n\t/**\n\t * @param {K} key\n\t * @param {V} value\n\t * */\n\tset(key, value) {\n\t\tvar sources = this.#sources;\n\t\tvar s = sources.get(key);\n\t\tvar prev_res = super.get(key);\n\t\tvar res = super.set(key, value);\n\t\tvar version = this.#version;\n\n\t\tif (s === undefined) {\n\t\t\ts = this.#source(0);\n\n\t\t\tif (DEV) {\n\t\t\t\ttag(s, `SvelteMap get(${label(key)})`);\n\t\t\t}\n\n\t\t\tsources.set(key, s);\n\t\t\tset(this.#size, super.size);\n\t\t\tincrement(version);\n\t\t} else if (prev_res !== value) {\n\t\t\tincrement(s);\n\n\t\t\t// if not every reaction of s is a reaction of version we need to also include version\n\t\t\tvar v_reactions = version.reactions === null ? null : new Set(version.reactions);\n\t\t\tvar needs_version_increase =\n\t\t\t\tv_reactions === null ||\n\t\t\t\t!s.reactions?.every((r) =>\n\t\t\t\t\t/** @type {NonNullable<typeof v_reactions>} */ (v_reactions).has(r)\n\t\t\t\t);\n\t\t\tif (needs_version_increase) {\n\t\t\t\tincrement(version);\n\t\t\t}\n\t\t}\n\n\t\treturn res;\n\t}\n\n\t/** @param {K} key */\n\tdelete(key) {\n\t\tvar sources = this.#sources;\n\t\tvar s = sources.get(key);\n\t\tvar res = super.delete(key);\n\n\t\tif (s !== undefined) {\n\t\t\tsources.delete(key);\n\t\t\tset(s, -1);\n\t\t}\n\n\t\tif (res) {\n\t\t\tset(this.#size, super.size);\n\t\t\tincrement(this.#version);\n\t\t}\n\n\t\treturn res;\n\t}\n\n\tclear() {\n\t\tif (super.size === 0) {\n\t\t\treturn;\n\t\t}\n\t\t// Clear first, so we get nice console.log outputs with $inspect\n\t\tsuper.clear();\n\t\tvar sources = this.#sources;\n\t\tset(this.#size, 0);\n\t\tfor (var s of sources.values()) {\n\t\t\tset(s, -1);\n\t\t}\n\t\tincrement(this.#version);\n\t\tsources.clear();\n\t}\n\n\t#read_all() {\n\t\tget(this.#version);\n\n\t\tvar sources = this.#sources;\n\t\tif (this.#size.v !== sources.size) {\n\t\t\tfor (var key of super.keys()) {\n\t\t\t\tif (!sources.has(key)) {\n\t\t\t\t\tvar s = this.#source(0);\n\t\t\t\t\tif (DEV) {\n\t\t\t\t\t\ttag(s, `SvelteMap get(${label(key)})`);\n\t\t\t\t\t}\n\n\t\t\t\t\tsources.set(key, s);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor ([, s] of this.#sources) {\n\t\t\tget(s);\n\t\t}\n\t}\n\n\tkeys() {\n\t\tget(this.#version);\n\t\treturn super.keys();\n\t}\n\n\tvalues() {\n\t\tthis.#read_all();\n\t\treturn super.values();\n\t}\n\n\tentries() {\n\t\tthis.#read_all();\n\t\treturn super.entries();\n\t}\n\n\t[Symbol.iterator]() {\n\t\treturn this.entries();\n\t}\n\n\tget size() {\n\t\tget(this.#size);\n\t\treturn super.size;\n\t}\n}\n","import { DEV } from 'esm-env';\nimport { state, increment } from '../internal/client/reactivity/sources.js';\nimport { tag } from '../internal/client/dev/tracing.js';\nimport { get } from '../internal/client/runtime.js';\nimport { get_current_url } from './url.js';\n\nexport const REPLACE = Symbol('replace');\n\n/**\n * A reactive version of the built-in [`URLSearchParams`](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams) object.\n * Reading its contents (by iterating, or by calling `params.get(...)` or `params.getAll(...)` as in the [example](https://svelte.dev/playground/b3926c86c5384bab9f2cf993bc08c1c8) below) in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)\n * will cause it to be re-evaluated as necessary when the params are updated.\n *\n * ```svelte\n * <script>\n * \timport { SvelteURLSearchParams } from 'svelte/reactivity';\n *\n * \tconst params = new SvelteURLSearchParams('message=hello');\n *\n * \tlet key = $state('key');\n * \tlet value = $state('value');\n * </script>\n *\n * <input bind:value={key} />\n * <input bind:value={value} />\n * <button onclick={() => params.append(key, value)}>append</button>\n *\n * <p>?{params.toString()}</p>\n *\n * {#each params as [key, value]}\n * \t<p>{key}: {value}</p>\n * {/each}\n * ```\n */\nexport class SvelteURLSearchParams extends URLSearchParams {\n\t#version = DEV ? tag(state(0), 'SvelteURLSearchParams version') : state(0);\n\t#url = get_current_url();\n\n\t#updating = false;\n\n\t#update_url() {\n\t\tif (!this.#url || this.#updating) return;\n\t\tthis.#updating = true;\n\n\t\tconst search = this.toString();\n\t\tthis.#url.search = search && `?${search}`;\n\n\t\tthis.#updating = false;\n\t}\n\n\t/**\n\t * @param {URLSearchParams} params\n\t * @internal\n\t */\n\t[REPLACE](params) {\n\t\tif (this.#updating) return;\n\n\t\t// the URL may have changed in a way that leaves the search string untouched —\n\t\t// don't rebuild the params or notify readers if nothing changed\n\t\tif (params.toString() === super.toString()) return;\n\n\t\tthis.#updating = true;\n\n\t\tfor (const key of [...super.keys()]) {\n\t\t\tsuper.delete(key);\n\t\t}\n\n\t\tfor (const [key, value] of params) {\n\t\t\tsuper.append(key, value);\n\t\t}\n\n\t\tincrement(this.#version);\n\t\tthis.#updating = false;\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @param {string} value\n\t * @returns {void}\n\t */\n\tappend(name, value) {\n\t\tsuper.append(name, value);\n\t\tthis.#update_url();\n\t\tincrement(this.#version);\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @param {string=} value\n\t * @returns {void}\n\t */\n\tdelete(name, value) {\n\t\tvar has_value = super.has(name, value);\n\t\tsuper.delete(name, value);\n\t\tif (has_value) {\n\t\t\tthis.#update_url();\n\t\t\tincrement(this.#version);\n\t\t}\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @returns {string|null}\n\t */\n\tget(name) {\n\t\tget(this.#version);\n\t\treturn super.get(name);\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @returns {string[]}\n\t */\n\tgetAll(name) {\n\t\tget(this.#version);\n\t\treturn super.getAll(name);\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @param {string=} value\n\t * @returns {boolean}\n\t */\n\thas(name, value) {\n\t\tget(this.#version);\n\t\treturn super.has(name, value);\n\t}\n\n\tkeys() {\n\t\tget(this.#version);\n\t\treturn super.keys();\n\t}\n\n\t/**\n\t * @param {(value: string, key: string, parent: URLSearchParams) => void} callback\n\t * @param {any} [this_arg]\n\t * @returns {void}\n\t */\n\tforEach(callback, this_arg) {\n\t\tget(this.#version);\n\t\tsuper.forEach(callback, this_arg);\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @param {string} value\n\t * @returns {void}\n\t */\n\tset(name, value) {\n\t\tvar previous = super.getAll(name);\n\t\tsuper.set(name, value);\n\t\t// can't use has(name, value), because for something like https://svelte.dev?foo=1&bar=2&foo=3\n\t\t// if you set `foo` to 1, then foo=3 gets deleted whilst `has(\"foo\", \"1\")` returns true\n\t\tvar current = super.getAll(name);\n\t\tif (previous.length !== current.length || previous.some((value, i) => value !== current[i])) {\n\t\t\tthis.#update_url();\n\t\t\tincrement(this.#version);\n\t\t}\n\t}\n\n\tsort() {\n\t\tsuper.sort();\n\t\tthis.#update_url();\n\t\tincrement(this.#version);\n\t}\n\n\ttoString() {\n\t\tget(this.#version);\n\t\treturn super.toString();\n\t}\n\n\tvalues() {\n\t\tget(this.#version);\n\t\treturn super.values();\n\t}\n\n\tentries() {\n\t\tget(this.#version);\n\t\treturn super.entries();\n\t}\n\n\t[Symbol.iterator]() {\n\t\treturn this.entries();\n\t}\n\n\tget size() {\n\t\tget(this.#version);\n\t\treturn super.size;\n\t}\n}\n","import { DEV } from 'esm-env';\nimport { set, state } from '../internal/client/reactivity/sources.js';\nimport { tag } from '../internal/client/dev/tracing.js';\nimport { get } from '../internal/client/runtime.js';\nimport { REPLACE, SvelteURLSearchParams } from './url-search-params.js';\n\n/** @type {SvelteURL | null} */\nlet current_url = null;\n\nexport function get_current_url() {\n\t// ideally we'd just export `current_url` directly, but it seems Vitest doesn't respect live bindings\n\treturn current_url;\n}\n\n/**\n * A reactive version of the built-in [`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL) object.\n * Reading properties of the URL (such as `url.href` or `url.pathname`) in an [effect](https://svelte.dev/docs/svelte/$effect) or [derived](https://svelte.dev/docs/svelte/$derived)\n * will cause it to be re-evaluated as necessary when the URL changes.\n *\n * The `searchParams` property is an instance of [SvelteURLSearchParams](https://svelte.dev/docs/svelte/svelte-reactivity#SvelteURLSearchParams).\n *\n * [Example](https://svelte.dev/playground/5a694758901b448c83dc40dc31c71f2a):\n *\n * ```svelte\n * <script>\n * \timport { SvelteURL } from 'svelte/reactivity';\n *\n * \tconst url = new SvelteURL('https://example.com/path');\n * </script>\n *\n * <!-- changes to these... -->\n * <input bind:value={url.protocol} />\n * <input bind:value={url.hostname} />\n * <input bind:value={url.pathname} />\n *\n * <hr />\n *\n * <!-- will update `href` and vice versa -->\n * <input bind:value={url.href} size=\"65\" />\n * ```\n */\nexport class SvelteURL extends URL {\n\t#protocol = state(super.protocol);\n\t#username = state(super.username);\n\t#password = state(super.password);\n\t#hostname = state(super.hostname);\n\t#port = state(super.port);\n\t#pathname = state(super.pathname);\n\t#hash = state(super.hash);\n\t#search = state(super.search);\n\t#searchParams;\n\n\t/**\n\t * @param {string | URL} url\n\t * @param {string | URL} [base]\n\t */\n\tconstructor(url, base) {\n\t\turl = new URL(url, base);\n\t\tsuper(url);\n\n\t\tif (DEV) {\n\t\t\ttag(this.#protocol, 'SvelteURL.protocol');\n\t\t\ttag(this.#username, 'SvelteURL.username');\n\t\t\ttag(this.#password, 'SvelteURL.password');\n\t\t\ttag(this.#hostname, 'SvelteURL.hostname');\n\t\t\ttag(this.#port, 'SvelteURL.port');\n\t\t\ttag(this.#pathname, 'SvelteURL.pathname');\n\t\t\ttag(this.#hash, 'SvelteURL.hash');\n\t\t\ttag(this.#search, 'SvelteURL.search');\n\t\t}\n\n\t\tcurrent_url = this;\n\t\tthis.#searchParams = new SvelteURLSearchParams(url.searchParams);\n\t\tcurrent_url = null;\n\t}\n\n\tget hash() {\n\t\treturn get(this.#hash);\n\t}\n\n\tset hash(value) {\n\t\tsuper.hash = value;\n\t\tset(this.#hash, super.hash);\n\t}\n\n\tget host() {\n\t\tget(this.#hostname);\n\t\tget(this.#port);\n\t\treturn super.host;\n\t}\n\n\tset host(value) {\n\t\tsuper.host = value;\n\t\tset(this.#hostname, super.hostname);\n\t\tset(this.#port, super.port);\n\t}\n\n\tget hostname() {\n\t\treturn get(this.#hostname);\n\t}\n\n\tset hostname(value) {\n\t\tsuper.hostname = value;\n\t\tset(this.#hostname, super.hostname);\n\t}\n\n\tget href() {\n\t\tget(this.#protocol);\n\t\tget(this.#username);\n\t\tget(this.#password);\n\t\tget(this.#hostname);\n\t\tget(this.#port);\n\t\tget(this.#pathname);\n\t\tget(this.#hash);\n\t\tget(this.#search);\n\t\treturn super.href;\n\t}\n\n\tset href(value) {\n\t\tsuper.href = value;\n\t\tset(this.#protocol, super.protocol);\n\t\tset(this.#username, super.username);\n\t\tset(this.#password, super.password);\n\t\tset(this.#hostname, super.hostname);\n\t\tset(this.#port, super.port);\n\t\tset(this.#pathname, super.pathname);\n\t\tset(this.#hash, super.hash);\n\t\tset(this.#search, super.search);\n\t\tthis.#searchParams[REPLACE](super.searchParams);\n\t}\n\n\tget password() {\n\t\treturn get(this.#password);\n\t}\n\n\tset password(value) {\n\t\tsuper.password = value;\n\t\tset(this.#password, super.password);\n\t}\n\n\tget pathname() {\n\t\treturn get(this.#pathname);\n\t}\n\n\tset pathname(value) {\n\t\tsuper.pathname = value;\n\t\tset(this.#pathname, super.pathname);\n\t}\n\n\tget port() {\n\t\treturn get(this.#port);\n\t}\n\n\tset port(value) {\n\t\tsuper.port = value;\n\t\tset(this.#port, super.port);\n\t}\n\n\tget protocol() {\n\t\treturn get(this.#protocol);\n\t}\n\n\tset protocol(value) {\n\t\tsuper.protocol = value;\n\t\tset(this.#protocol, super.protocol);\n\t}\n\n\tget search() {\n\t\treturn get(this.#search);\n\t}\n\n\tset search(value) {\n\t\tsuper.search = value;\n\t\tset(this.#search, super.search);\n\t\tthis.#searchParams[REPLACE](super.searchParams);\n\t}\n\n\tget username() {\n\t\treturn get(this.#username);\n\t}\n\n\tset username(value) {\n\t\tsuper.username = value;\n\t\tset(this.#username, super.username);\n\t}\n\n\tget origin() {\n\t\tget(this.#protocol);\n\t\tget(this.#hostname);\n\t\tget(this.#port);\n\t\treturn super.origin;\n\t}\n\n\tget searchParams() {\n\t\treturn this.#searchParams;\n\t}\n\n\ttoString() {\n\t\treturn this.href;\n\t}\n\n\ttoJSON() {\n\t\treturn this.href;\n\t}\n}\n","export { on } from '../internal/client/dom/elements/events.js';\n","import { createSubscriber } from './create-subscriber.js';\n\n/**\n * @template T\n */\nexport class ReactiveValue {\n\t#fn;\n\t#subscribe;\n\n\t/**\n\t *\n\t * @param {() => T} fn\n\t * @param {(update: () => void) => void} onsubscribe\n\t */\n\tconstructor(fn, onsubscribe) {\n\t\tthis.#fn = fn;\n\t\tthis.#subscribe = createSubscriber(onsubscribe);\n\t}\n\n\tget current() {\n\t\tthis.#subscribe();\n\t\treturn this.#fn();\n\t}\n}\n","import { on } from '../events/index.js';\nimport { ReactiveValue } from './reactive-value.js';\n\nconst parenthesis_regex = /\\(.+\\)/;\n\n// these keywords are valid media queries but they need to be without parenthesis\n//\n// eg: new MediaQuery('screen')\n//\n// however because of the auto-parenthesis logic in the constructor since there's no parenthesis\n// in the media query they'll be surrounded by parenthesis\n//\n// however we can check if the media query is only composed of these keywords\n// and skip the auto-parenthesis\n//\n// https://github.com/sveltejs/svelte/issues/15930\nconst non_parenthesized_keywords = new Set(['all', 'print', 'screen', 'and', 'or', 'not', 'only']);\n\n/**\n * Creates a media query and provides a `current` property that reflects whether or not it matches.\n *\n * Use it carefully — during server-side rendering, there is no way to know what the correct value should be, potentially causing content to change upon hydration.\n * If you can use the media query in CSS to achieve the same effect, do that.\n *\n * ```svelte\n * <script>\n * \timport { MediaQuery } from 'svelte/reactivity';\n *\n * \tconst large = new MediaQuery('min-width: 800px');\n * </script>\n *\n * <h1>{large.current ? 'large screen' : 'small screen'}</h1>\n * ```\n * @extends {ReactiveValue<boolean>}\n * @since 5.7.0\n */\nexport class MediaQuery extends ReactiveValue {\n\t/**\n\t * @param {string} query A media query string\n\t * @param {boolean} [fallback] Fallback value for the server\n\t */\n\tconstructor(query, fallback) {\n\t\tlet final_query =\n\t\t\tparenthesis_regex.test(query) ||\n\t\t\t// we need to use `some` here because technically this `window.matchMedia('random,screen')` still returns true\n\t\t\tquery.split(/[\\s,]+/).some((keyword) => non_parenthesized_keywords.has(keyword.trim()))\n\t\t\t\t? query\n\t\t\t\t: `(${query})`;\n\t\tconst q = window.matchMedia(final_query);\n\t\tsuper(\n\t\t\t() => q.matches,\n\t\t\t(update) => on(q, 'change', update)\n\t\t);\n\t}\n}\n","export { SvelteDate } from './date.js';\nexport { SvelteSet } from './set.js';\nexport { SvelteMap } from './map.js';\nexport { SvelteURL } from './url.js';\nexport { SvelteURLSearchParams } from './url-search-params.js';\nexport { MediaQuery } from './media-query.js';\nexport { createSubscriber } from './create-subscriber.js';\n","import { MessageFormat } from 'messageformat';\nimport { DraftFunctions } from 'messageformat/functions';\nimport { SvelteMap, SvelteURLSearchParams } from 'svelte/reactivity';\n\n// Polyfill\nIntl.MessageFormat ??= MessageFormat;\n\n/**\n * @typedef {object} Formats\n * @property {Record<string, Intl.NumberFormatOptions>} [number] Custom number format presets.\n * @property {Record<string, Intl.DateTimeFormatOptions>} [date] Custom date format presets.\n * @property {Record<string, Intl.DateTimeFormatOptions>} [time] Custom time format presets.\n */\n\n/**\n * @callback MissingKeyHandler\n * @param {string} key The missing message key.\n * @param {string} locale The active locale.\n * @param {string | undefined} defaultValue The default value passed to `format()`, if any.\n * @returns {string | void} A replacement string, or `undefined` to fall through to the default.\n */\n\n/**\n * @typedef {object} MessageObject\n * @property {string} id Message key.\n * @property {Record<string, any>} [values] Variables to interpolate into the message.\n * @property {string} [locale] Locale override for this call.\n * @property {string} [default] Fallback string if the key is not found.\n */\n\n/**\n * Date/time formatting options, extending `Intl.DateTimeFormatOptions` with `locale` and `format`\n * overrides.\n * @typedef {Intl.DateTimeFormatOptions & { locale?: string, format?: string }} DateFormatOptions\n */\n\n/**\n * Number formatting options, extending `Intl.NumberFormatOptions` with `locale` and `format`\n * overrides.\n * @typedef {Intl.NumberFormatOptions & { locale?: string, format?: string }} NumberFormatOptions\n */\n\n// --- State ---\n\n/** @type {string} */\nlet _locale = $state('');\n/**\n * All registered locales.\n * @type {string[]}\n */\nconst locales = $state([]);\n/**\n * All registered resources.\n * @type {Record<string, Record<string, Intl.MessageFormat>>}\n */\nconst dictionary = $state({});\n/**\n * Whether locale messages are currently being loaded. Returns `true` after a locale is set but\n * before its messages are available.\n * @returns {boolean} `true` if messages are pending for the current locale, `false` otherwise.\n */\nconst isLoading = () => !!_locale && !dictionary[_locale];\n\n// --- Configuration state ---\n\n/** Locale to fall back to when the active locale has no entry for a key. */\n// eslint-disable-next-line padding-line-between-statements\nlet fallbackLocale = '';\n/**\n * Negotiated fallback locale — pre-computed from `fallbackLocale` against the registered locales.\n * Cached to avoid repeated `Intl.Locale` construction on every `format()` call.\n */\nlet _resolvedFallback = '';\n/** @type {MissingKeyHandler | undefined} */\nlet missingMessageHandler;\n/** @type {Formats} */\nlet customFormats = {};\n\n// Languages written right-to-left; used as a fallback when Intl.Locale.textInfo is not available\n// (e.g. Firefox).\nconst RTL_LANGS = new Set([\n  'ar',\n  'arc',\n  'ckb',\n  'dv',\n  'fa',\n  'ha',\n  'he',\n  'khw',\n  'ks',\n  'ku',\n  'nqo',\n  'ps',\n  'sd',\n  'ug',\n  'ur',\n  'yi',\n]);\n\n/**\n * Return the text direction for a resolved `Intl.Locale` object. Uses `textInfo.direction` when\n * available (Chrome/Safari) and falls back to the `RTL_LANGS` set (Firefox).\n * @param {Intl.Locale} localeObj The locale object to inspect.\n * @returns {'ltr' | 'rtl'} The text direction of the locale.\n */\nconst getTextDirection = (localeObj) => {\n  /* v8 ignore next */\n  const dir = /** @type {any} */ (localeObj).textInfo?.direction;\n\n  /* v8 ignore next */\n  return dir ?? (RTL_LANGS.has(localeObj.language) ? 'rtl' : 'ltr');\n};\n\n/**\n * Whether the given locale (or the current locale if omitted) is written right-to-left. Reactive:\n * re-evaluates automatically whenever the locale changes.\n * @param {string} [localeCode] Locale to check. Defaults to the active locale.\n * @returns {boolean} `true` if the locale is RTL, `false` otherwise.\n */\nconst isRTL = (localeCode = _locale) => {\n  if (!localeCode) return false;\n\n  try {\n    return getTextDirection(new Intl.Locale(localeCode)) === 'rtl';\n  } catch {\n    return false;\n  }\n};\n\n// --- Messages ---\n\n/**\n * Negotiate the best available locale for a requested tag.\n * 1. Exact match  2. Same language subtag (e.g. En-CA → en-US)  3. Original value.\n * @param {string} requested The requested locale tag.\n * @param {string[]} available List of available locale codes.\n * @returns {string} The best-matching available locale, or `requested` if no match is found.\n */\nconst negotiateLocale = (requested, available) => {\n  if (!requested || !available.length) return requested;\n  if (available.includes(requested)) return requested;\n\n  try {\n    const lang = new Intl.Locale(requested).language;\n\n    return (\n      available.find((l) => {\n        try {\n          return new Intl.Locale(l).language === lang;\n        } catch {\n          return false;\n        }\n      }) ?? requested\n    );\n  } catch {\n    return requested;\n  }\n};\n\n/**\n * Recursively flatten a nested message map into dot-separated keys. `{ field: { name: 'Name' } }` →\n * `{ 'field.name': 'Name' }` Top-level keys that already contain dots are preserved as-is.\n * @param {Record<string, any>} map Nested or flat message map to flatten.\n * @param {string} [prefix] Key prefix for recursive calls.\n * @returns {Record<string, string>} Flat map with dot-separated keys.\n */\nconst flattenMessages = (map, prefix = '') =>\n  Object.entries(map).reduce((acc, [key, value]) => {\n    const flatKey = prefix ? `${prefix}.${key}` : key;\n\n    if (value !== null && typeof value === 'object' && !Array.isArray(value)) {\n      Object.assign(acc, flattenMessages(value, flatKey));\n    } else {\n      acc[flatKey] = value;\n    }\n\n    return acc;\n  }, /** @type {Record<string, string>} */ (Object.create(null)));\n\n/**\n * Register a locale code in `locales` (if not already present) and refresh `_resolvedFallback`.\n * Shared by {@link addMessages} and {@link register}.\n * @param {string} localeCode Locale code to register.\n */\nconst registerLocaleCode = (localeCode) => {\n  if (!locales.includes(localeCode)) {\n    locales.push(localeCode);\n    _resolvedFallback = negotiateLocale(fallbackLocale, locales);\n  }\n};\n\n/**\n * Add new messages for a locale. Accepts flat or nested maps; nested objects are flattened to\n * dot-separated keys (`field.name`). Multiple dicts can be passed and are merged in order, matching\n * svelte-i18n’s `addMessages(locale, ...dicts)` signature.\n * @param {string} localeCode Locale.\n * @param {...Record<string, any>} maps One or more message maps (flat or nested).\n * @throws {TypeError} If `localeCode` is not a non-empty string or any map is not a plain object.\n * @see https://messageformat.github.io/messageformat/api/messageformat.messageformat/\n */\nconst addMessages = (localeCode, ...maps) => {\n  if (typeof localeCode !== 'string' || !localeCode) {\n    throw new TypeError(\n      `addMessages: localeCode must be a non-empty string (got ${JSON.stringify(localeCode)})`,\n    );\n  }\n\n  maps.forEach((map, i) => {\n    if (map === null || typeof map !== 'object' || Array.isArray(map)) {\n      throw new TypeError(\n        `addMessages: maps[${i}] must be a plain object (got ${Array.isArray(map) ? 'array' : typeof map})`,\n      );\n    }\n  });\n\n  registerLocaleCode(localeCode);\n  dictionary[localeCode] ??= {};\n\n  maps.forEach((map) => {\n    Object.entries(flattenMessages(map)).forEach(([key, value]) => {\n      dictionary[localeCode][key] = new Intl.MessageFormat(localeCode, String(value), {\n        functions: DraftFunctions,\n      });\n    });\n  });\n\n  // Re-negotiate if locale.set() was called before any locales were registered.\n  if (_locale && !locales.includes(_locale)) {\n    // eslint-disable-next-line no-use-before-define\n    locale.set(_locale);\n  }\n};\n\n// --- Loader ---\n\n/** @type {SvelteMap<string, () => Promise<Record<string, string>>>} */\nconst loaderQueue = new SvelteMap();\n/** @type {SvelteMap<string, Promise<void>>} */\nconst loaderPromises = new SvelteMap();\n\n/**\n * Execute the registered loader for the given locale (or the current locale if omitted) and wait\n * until the messages are loaded. Subsequent calls for the same locale return the same promise.\n * @param {string} [localeCode] Defaults to `locale.current`.\n * @returns {Promise<void>}\n * @throws {TypeError} If `localeCode` is provided and is not a string.\n */\nconst waitLocale = (localeCode = _locale) => {\n  if (typeof localeCode !== 'string') {\n    throw new TypeError(`waitLocale: localeCode must be a string (got ${typeof localeCode})`);\n  }\n\n  if (!localeCode) return Promise.resolve();\n\n  if (!loaderPromises.has(localeCode)) {\n    const loader = loaderQueue.get(localeCode);\n\n    if (loader) {\n      const promise = Promise.resolve(loader()).then(\n        (map) => {\n          addMessages(localeCode, map);\n        },\n        () => {\n          loaderPromises.delete(localeCode);\n\n          // If the failed `locale` is still the active one and has no `dictionary` entry, fall back\n          // so that `isLoading()` does not remain `true` forever.\n          if (_locale === localeCode && !dictionary[localeCode] && _resolvedFallback) {\n            _locale = _resolvedFallback;\n          }\n        },\n      );\n\n      loaderPromises.set(localeCode, promise);\n    } else {\n      loaderPromises.set(localeCode, Promise.resolve());\n    }\n  }\n\n  /* v8 ignore next */\n  return loaderPromises.get(localeCode) ?? Promise.resolve();\n};\n\n// --- Locale ---\n\n/**\n * Current locale.\n */\nconst locale = {\n  /**\n   * Returns the current locale code.\n   * @returns {string} The active locale code.\n   */\n  get current() {\n    return _locale;\n  },\n  /**\n   * Set the current locale. Negotiates against registered locales (e.g. En-CA → en-US), updates\n   * `<html lang>` / `<html dir>`, and auto-triggers any registered loader.\n   * @param {string} value The locale to set.\n   * @returns {Promise<void>}\n   * @throws {TypeError} If `value` is not a string.\n   */\n  set(value) {\n    if (typeof value !== 'string') {\n      throw new TypeError(`locale.set: value must be a string (got ${typeof value})`);\n    }\n\n    let resolved = locales.length ? negotiateLocale(value, locales) : value;\n\n    // If no registered locale matched, fall back to `fallbackLocale` (only when it actually\n    // resolved to a registered locale; otherwise keep the original value).\n    if (\n      value &&\n      locales.length &&\n      !locales.includes(resolved) &&\n      _resolvedFallback &&\n      locales.includes(_resolvedFallback)\n    ) {\n      resolved = _resolvedFallback;\n    }\n\n    _locale = resolved;\n\n    if (typeof document !== 'undefined' && resolved) {\n      document.documentElement.lang = resolved;\n\n      try {\n        const localeObj = new Intl.Locale(resolved);\n\n        document.documentElement.dir = getTextDirection(localeObj);\n      } catch {\n        // resolved is not a valid BCP 47 tag; skip dir update\n      }\n    }\n\n    return waitLocale(resolved);\n  },\n};\n\n/**\n * Register an async loader for a locale. The loader is called the first time\n * `waitLocale(localeCode)` is invoked for that locale.\n * @param {string} localeCode Locale.\n * @param {() => Promise<Record<string, string>>} loader Function returning a message map.\n * @throws {TypeError} If `localeCode` is not a non-empty string or `loader` is not a function.\n */\nconst register = (localeCode, loader) => {\n  if (typeof localeCode !== 'string' || !localeCode) {\n    throw new TypeError(\n      `register: localeCode must be a non-empty string (got ${JSON.stringify(localeCode)})`,\n    );\n  }\n\n  if (typeof loader !== 'function') {\n    throw new TypeError(`register: loader must be a function (got ${typeof loader})`);\n  }\n\n  loaderQueue.set(localeCode, loader);\n  // Invalidate any cached promise so the new loader is picked up on next waitLocale call.\n  loaderPromises.delete(localeCode);\n\n  registerLocaleCode(localeCode);\n\n  // Re-negotiate if locale.set() was called before any locales were registered.\n  if (_locale && !locales.includes(_locale)) {\n    locale.set(_locale);\n  }\n};\n\n/**\n * Get the user’s preferred locale from the browser.\n * @returns {string | undefined} The first navigator language, or `undefined` in non-browser\n * environments.\n */\nconst getLocaleFromNavigator = () =>\n  typeof navigator === 'undefined' ? undefined : (navigator.languages?.[0] ?? navigator.language);\n\n/**\n * Get the locale from a pattern matched against `window.location.hostname`.\n * @param {RegExp} hostnamePattern Pattern with a capture group for the locale code.\n * @returns {string | undefined} The matched locale code, or `undefined` if not in a browser or no\n * match.\n * @throws {TypeError} If `hostnamePattern` is not a `RegExp`.\n */\nconst getLocaleFromHostname = (hostnamePattern) => {\n  if (!(hostnamePattern instanceof RegExp)) {\n    throw new TypeError(\n      `getLocaleFromHostname: hostnamePattern must be a RegExp (got ${typeof hostnamePattern})`,\n    );\n  }\n\n  return typeof window === 'undefined' || !window.location\n    ? undefined\n    : window.location.hostname.match(hostnamePattern)?.[1];\n};\n\n/**\n * Get the locale from a pattern matched against `window.location.pathname`.\n * @param {RegExp} pathnamePattern Pattern with a capture group for the locale code.\n * @returns {string | undefined} The matched locale code, or `undefined` if not in a browser or no\n * match.\n * @throws {TypeError} If `pathnamePattern` is not a `RegExp`.\n */\nconst getLocaleFromPathname = (pathnamePattern) => {\n  if (!(pathnamePattern instanceof RegExp)) {\n    throw new TypeError(\n      `getLocaleFromPathname: pathnamePattern must be a RegExp (got ${typeof pathnamePattern})`,\n    );\n  }\n\n  return typeof window === 'undefined' || !window.location\n    ? undefined\n    : window.location.pathname.match(pathnamePattern)?.[1];\n};\n\n/**\n * Get the locale from a URL query string parameter.\n * @param {string} queryKey The query string key to read.\n * @returns {string | undefined} The query parameter value, or `undefined` if not in a browser or\n * not found.\n * @throws {TypeError} If `queryKey` is not a non-empty string.\n */\nconst getLocaleFromQueryString = (queryKey) => {\n  if (typeof queryKey !== 'string' || !queryKey) {\n    throw new TypeError(\n      // eslint-disable-next-line max-len\n      `getLocaleFromQueryString: queryKey must be a non-empty string (got ${JSON.stringify(queryKey)})`,\n    );\n  }\n\n  return typeof window === 'undefined' || !window.location\n    ? undefined\n    : (new SvelteURLSearchParams(window.location.search).get(queryKey) ?? undefined);\n};\n\n/**\n * Get the locale from a `key=value` pair in `window.location.hash`.\n * @param {string} hashKey The key to look for in the hash.\n * @returns {string | undefined} The hash parameter value, or `undefined` if not in a browser or not\n * found.\n * @throws {TypeError} If `hashKey` is not a non-empty string.\n */\nconst getLocaleFromHash = (hashKey) => {\n  if (typeof hashKey !== 'string' || !hashKey) {\n    throw new TypeError(\n      `getLocaleFromHash: hashKey must be a non-empty string (got ${JSON.stringify(hashKey)})`,\n    );\n  }\n\n  if (typeof window === 'undefined' || !window.location) return undefined;\n\n  const params = new SvelteURLSearchParams(window.location.hash.replace(/^#/, ''));\n\n  return params.get(hashKey) ?? undefined;\n};\n\n// --- Configuration ---\n\n/**\n * Initialize the locales.\n * @param {object} args Arguments.\n * @param {string} args.fallbackLocale Locale to be used for fallback.\n * @param {string} [args.initialLocale] Locale to be used for the initial selection.\n * @param {Formats} [args.formats] Custom named formats.\n * @param {MissingKeyHandler} [args.handleMissingMessage] Called when a message key is not found.\n * May return a string to use as a fallback.\n * @throws {TypeError} If `args.fallbackLocale` is not a string, `args.initialLocale` is not a\n * string, or `args.handleMissingMessage` is not a function.\n */\nconst init = (args) => {\n  if (!args || typeof args.fallbackLocale !== 'string') {\n    throw new TypeError(\n      `init: fallbackLocale must be a string (got ${JSON.stringify(args?.fallbackLocale)})`,\n    );\n  }\n\n  if (args.initialLocale !== undefined && typeof args.initialLocale !== 'string') {\n    throw new TypeError(`init: initialLocale must be a string (got ${typeof args.initialLocale})`);\n  }\n\n  if (args.handleMissingMessage !== undefined && typeof args.handleMissingMessage !== 'function') {\n    throw new TypeError(\n      `init: handleMissingMessage must be a function (got ${typeof args.handleMissingMessage})`,\n    );\n  }\n\n  fallbackLocale = args.fallbackLocale;\n  _resolvedFallback = negotiateLocale(fallbackLocale, locales);\n  missingMessageHandler = args.handleMissingMessage;\n  customFormats = args.formats ?? {};\n  if (args.initialLocale) locale.set(args.initialLocale);\n};\n\n// --- Formatting ---\n\n/**\n * Format a message by key.\n *\n * Supports two call signatures (matching svelte-i18n):\n * - `format(id, options?)` — key as first argument\n * - `format({ id, values, locale, default })` — options object only.\n * @param {string | MessageObject} key Message key, or an object with `id` and options.\n * @param {{ values?: Record<string, any>, locale?: string, default?: string }} [options] Formatting\n * options when `key` is a string.\n * @returns {string} The formatted message string.\n * @throws {TypeError} If `key` is `null` or `undefined`.\n */\nconst format = (key, { values = {}, locale: localeOverride, default: defaultString } = {}) => {\n  if (key === null || key === undefined) {\n    throw new TypeError(\n      `format: key must be a string or message object (got ${JSON.stringify(key)})`,\n    );\n  }\n\n  if (typeof key === 'object') {\n    const { id, values: v = {}, locale: l, default: d } = key;\n\n    return format(id, { values: v, locale: l, default: d });\n  }\n\n  const active = localeOverride ?? _locale;\n  const fallback = _resolvedFallback;\n\n  const result =\n    dictionary[active]?.[key]?.format(values) ??\n    (active !== fallback ? dictionary[fallback]?.[key]?.format(values) : undefined);\n\n  if (result !== undefined) return result;\n\n  if (missingMessageHandler) {\n    const handled = missingMessageHandler(key, active, defaultString);\n\n    if (handled !== undefined) return handled;\n  }\n\n  return defaultString ?? key;\n};\n\n/**\n * Return a nested object of formatted strings for all keys under the given prefix. Equivalent to\n * svelte-i18n’s `$json()`. Useful for iterating over a group of messages.\n * @param {string} prefix Key prefix (e.g. `'nav'` matches `nav.home`, `nav.about`, …).\n * @param {{ locale?: string }} [options] Lookup options.\n * @returns {Record<string, string> | undefined} Object mapping suffix keys to formatted strings, or\n * `undefined` if no keys match the prefix.\n * @throws {TypeError} If `prefix` is not a non-empty string.\n */\nconst json = (prefix, { locale: localeOverride } = {}) => {\n  if (typeof prefix !== 'string' || !prefix) {\n    throw new TypeError(`json: prefix must be a non-empty string (got ${JSON.stringify(prefix)})`);\n  }\n\n  const active = localeOverride ?? _locale;\n  const fallback = _resolvedFallback;\n  const activeDict = dictionary[active] ?? {};\n  const fallbackDict = active !== fallback ? (dictionary[fallback] ?? {}) : {};\n  const pfx = `${prefix}.`;\n  const result = /** @type {Record<string, string>} */ ({});\n\n  // Start with fallback entries, then overlay active so per-key fallback works.\n  Object.entries(fallbackDict).forEach(([key, mf]) => {\n    if (key.startsWith(pfx)) {\n      result[key.slice(pfx.length)] = mf.format({});\n    }\n  });\n\n  Object.entries(activeDict).forEach(([key, mf]) => {\n    if (key.startsWith(pfx)) {\n      result[key.slice(pfx.length)] = mf.format({});\n    }\n  });\n\n  return Object.keys(result).length ? result : undefined;\n};\n\n// --- Date, time & number ---\n\n// Built-in named formats matching svelte-i18n defaults\n/** @type {Record<string, Intl.DateTimeFormatOptions>} */\nconst BUILT_IN_DATE_FORMATS = {\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\n/** @type {Record<string, Intl.DateTimeFormatOptions>} */\nconst BUILT_IN_TIME_FORMATS = {\n  short: { hour: 'numeric', minute: 'numeric' },\n  medium: { hour: 'numeric', minute: 'numeric', second: 'numeric' },\n  long: { hour: 'numeric', minute: 'numeric', second: 'numeric', timeZoneName: 'short' },\n  full: { hour: 'numeric', minute: 'numeric', second: 'numeric', timeZoneName: 'short' },\n};\n\n/** @type {Record<string, Intl.NumberFormatOptions>} */\nconst BUILT_IN_NUMBER_FORMATS = {\n  currency: { style: 'currency' },\n  percent: { style: 'percent' },\n  scientific: { notation: 'scientific' },\n  engineering: { notation: 'engineering' },\n  compactLong: { notation: 'compact', compactDisplay: 'long' },\n  compactShort: { notation: 'compact', compactDisplay: 'short' },\n};\n\n/**\n * Shared implementation for {@link date} and {@link time}.\n * @param {'date' | 'time'} kind `'date'` or `'time'`, selects the format table and error label.\n * @param {Date} value The date to format.\n * @param {DateFormatOptions} [options] Formatting options.\n * @returns {string} The formatted string.\n * @throws {TypeError} If `value` is not a `Date` instance.\n */\nconst formatDateTimeValue = (kind, value, options = {}) => {\n  const { locale: loc, format: fmt, ...rest } = options;\n\n  if (!(value instanceof Date)) {\n    throw new TypeError(`${kind}: value must be a Date instance (got ${typeof value})`);\n  }\n\n  const builtIn = kind === 'date' ? BUILT_IN_DATE_FORMATS : BUILT_IN_TIME_FORMATS;\n  const named = fmt ? (customFormats[kind]?.[fmt] ?? builtIn[fmt] ?? {}) : {};\n\n  return new Intl.DateTimeFormat(loc ?? _locale, { ...named, ...rest }).format(value);\n};\n\n/**\n * Format a date value as a localized date string.\n * @param {Date} value The date to format.\n * @param {DateFormatOptions} [options] Formatting options.\n * @returns {string} The formatted date string.\n * @throws {TypeError} If `value` is not a `Date` instance.\n */\nconst date = (value, options = {}) => formatDateTimeValue('date', value, options);\n/**\n * Format a date value as a localized time string.\n * @param {Date} value The date to format.\n * @param {DateFormatOptions} [options] Formatting options.\n * @returns {string} The formatted time string.\n * @throws {TypeError} If `value` is not a `Date` instance.\n */\nconst time = (value, options = {}) => formatDateTimeValue('time', value, options);\n\n/**\n * Format a number as a localized string.\n * @param {number | bigint} value The number to format.\n * @param {NumberFormatOptions} [options] Formatting options.\n * @returns {string} The formatted number string.\n * @throws {TypeError} If `value` is not a number or bigint.\n */\nconst number = (value, { locale: loc, format: fmt, ...rest } = {}) => {\n  if (typeof value !== 'number' && typeof value !== 'bigint') {\n    throw new TypeError(`number: value must be a number or bigint (got ${typeof value})`);\n  }\n\n  const named = fmt ? (customFormats.number?.[fmt] ?? BUILT_IN_NUMBER_FORMATS[fmt] ?? {}) : {};\n\n  return new Intl.NumberFormat(loc ?? _locale, { ...named, ...rest }).format(value);\n};\n\n/**\n * Reset all internal state. Intended **only** for use in tests.\n * @internal\n */\nconst _reset = () => {\n  _locale = '';\n  locales.splice(0);\n  Object.keys(dictionary).forEach((k) => delete dictionary[k]);\n  loaderQueue.clear();\n  loaderPromises.clear();\n  fallbackLocale = '';\n  _resolvedFallback = '';\n  missingMessageHandler = undefined;\n  customFormats = {};\n};\n\n// Export all public API as named exports, and also alias `format` as `_` and `t` for convenience.\n// We cannot use `export const` syntax for each symbol because the TypeScript conversion fails to\n// export the comments with the functions.\nexport {\n  format as _,\n  _reset,\n  addMessages,\n  date,\n  dictionary,\n  format,\n  getLocaleFromHash,\n  getLocaleFromHostname,\n  getLocaleFromNavigator,\n  getLocaleFromPathname,\n  getLocaleFromQueryString,\n  init,\n  isLoading,\n  isRTL,\n  json,\n  locale,\n  locales,\n  number,\n  register,\n  format as t,\n  time,\n  waitLocale,\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","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        if (ctx?.maxAliasCount === 0)\n            throw new ReferenceError('Alias resolution is disabled');\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?.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        trailingComma: false,\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' && valueComment)\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, isSeq, isAlias, 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    const source = resolveAliasValue(ctx, value);\n    if (isSeq(source))\n        for (const it of source.items)\n            mergeValue(ctx, map, it);\n    else if (Array.isArray(source))\n        for (const it of source)\n            mergeValue(ctx, map, it);\n    else\n        mergeValue(ctx, map, source);\n}\nfunction mergeValue(ctx, map, value) {\n    const source = resolveAliasValue(ctx, 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}\nfunction resolveAliasValue(ctx, value) {\n    return ctx && isAlias(value) ? value.resolve(ctx.doc, ctx) : value;\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        reqNewline || (reqNewline = lines.length > linesAtValue || str.includes('\\n'));\n        if (i < items.length - 1) {\n            str += ',';\n        }\n        else if (ctx.options.trailingComma) {\n            if (ctx.options.lineWidth > 0) {\n                reqNewline || (reqNewline = lines.reduce((sum, line) => sum + line.length + 2, 2) +\n                    (str.length + 2) >\n                    ctx.options.lineWidth);\n            }\n            if (reqNewline) {\n                str += ',';\n            }\n        }\n        if (comment)\n            str += lineComment(str, itemIndent, commentString(comment));\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 = Object.is(value, -0) ? '-0' : JSON.stringify(value);\n    if (!format &&\n        minFractionDigits &&\n        (!tag || tag === 'tag:yaml.org,2002:float') &&\n        /^-?\\d/.test(n) &&\n        !n.includes('e')) {\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?.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?.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?.[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?.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?.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 = next === 'x' ? 2 : next === 'u' ? 4 : 8;\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    try {\n        return String.fromCodePoint(code);\n    }\n    catch {\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}\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            try {\n                node = composeCollection(CN, ctx, token, props, onError);\n                if (anchor)\n                    node.anchor = anchor.source.substring(1);\n            }\n            catch (error) {\n                // Almost certainly here due to a stack overflow\n                const message = error instanceof Error ? error.message : String(error);\n                onError(token, 'RESOURCE_EXHAUSTION', message);\n            }\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            isSrcToken = false;\n        }\n    }\n    node ?? (node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError));\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            for (let i = 0; i < this.errors.length; ++i)\n                doc.errors.push(this.errors[i]);\n            for (let i = 0; i < this.warnings.length; ++i)\n                doc.warnings.push(this.warnings[i]);\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","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 'block-start';\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        let n = 0;\n        loop: while (true) {\n            switch (this.charAt(0)) {\n                case '!':\n                    n += yield* this.pushTag();\n                    n += yield* this.pushSpaces(true);\n                    continue loop;\n                case '&':\n                    n += yield* this.pushUntil(isNotAnchorChar);\n                    n += yield* this.pushSpaces(true);\n                    continue loop;\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                        n += yield* this.pushCount(1);\n                        n += yield* this.pushSpaces(true);\n                        continue loop;\n                    }\n                }\n            }\n            break loop;\n        }\n        return n;\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 arrayPushArray(target, source) {\n    // May exhaust call stack with large `source` array\n    if (source.length < 1e5)\n        Array.prototype.push.apply(target, source);\n    else\n        for (let i = 0; i < source.length; ++i)\n            target.push(source[i]);\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                        arrayPushArray(it.value.end, it.sep);\n                    else\n                        it.value.end = it.sep;\n                }\n                else\n                    arrayPushArray(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?.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                            arrayPushArray(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                            arrayPushArray(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?.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","export { Composer } from './compose/composer.js';\nexport { Document } from './doc/Document.js';\nexport { Schema } from './schema/Schema.js';\nexport { YAMLError, YAMLParseError, YAMLWarning } from './errors.js';\nexport { Alias } from './nodes/Alias.js';\nexport { isAlias, isCollection, isDocument, isMap, isNode, isPair, isScalar, isSeq } from './nodes/identity.js';\nexport { Pair } from './nodes/Pair.js';\nexport { Scalar } from './nodes/Scalar.js';\nexport { YAMLMap } from './nodes/YAMLMap.js';\nexport { YAMLSeq } from './nodes/YAMLSeq.js';\nimport * as cst from './parse/cst.js';\nexport { cst as CST };\nexport { Lexer } from './parse/lexer.js';\nexport { LineCounter } from './parse/line-counter.js';\nexport { Parser } from './parse/parser.js';\nexport { parse, parseAllDocuments, parseDocument, stringify } from './public-api.js';\nexport { visit, visitAsync } from './visit.js';\n","// `export * as default from ...` fails on Webpack v4\n// https://github.com/eemeli/yaml/issues/228\nimport * as YAML from './dist/index.js'\nexport default YAML\nexport * from './dist/index.js'\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","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['Ə', 'A'], // Azerbaijani schwa\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['Ø', 'O'],\n\t['Œ', 'OE'], // French ligature\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['ə', 'a'], // Azerbaijani schwa\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['ø', 'o'],\n\t['œ', 'oe'], // French ligature\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\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['إ', 'a'],\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// NOTE: Longer Armenian sequences must come before shorter ones\n\t['ու', 'u'],\n\t['ՈՒ', 'U'],\n\t['Ու', 'U'],\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['փ', '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['𝓀', 'k'],\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['𝕆', 'O'],\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['ⓒ', '(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// 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\t// Dashes not covered by Dash_Punctuation category\n\t['−', '-'], // U+2212 Minus Sign (Mathematical Operators category)\n\t['⁓', '-'], // U+2053 Swung Dash (Other_Punctuation category)\n];\n\nconst builtinReplacements = new Map(replacements);\n\nexport default builtinReplacements;\n","/**\nLanguage-specific replacement rules.\n\nKeys are BCP-47 language tags (or their prefixes).\n\nValues are arrays of [from, to] replacement pairs.\n\nThese replacements take precedence over the default replacements when a matching locale is specified.\n*/\n\n// Shared Danish/Norwegian replacements\nconst danishNorwegianReplacements = [\n\t['æ', 'ae'],\n\t['Æ', 'Ae'],\n\t['ø', 'oe'],\n\t['Ø', 'Oe'],\n\t['å', 'aa'],\n\t['Å', 'Aa'],\n];\n\nconst localeReplacements = {\n\t// Swedish\n\tsv: [\n\t\t['ä', 'a'],\n\t\t['Ä', 'A'],\n\t\t['ö', 'o'],\n\t\t['Ö', 'O'],\n\t\t['å', 'a'],\n\t\t['Å', 'A'],\n\t],\n\n\t// Danish\n\tda: danishNorwegianReplacements,\n\n\t// Norwegian Bokmål\n\tnb: danishNorwegianReplacements,\n\n\t// German\n\tde: [\n\t\t['ä', 'ae'],\n\t\t['Ä', 'Ae'],\n\t\t['ö', 'oe'],\n\t\t['Ö', 'Oe'],\n\t\t['ü', 'ue'],\n\t\t['Ü', 'Ue'],\n\t\t['ß', 'ss'],\n\t\t['ẞ', 'Ss'],\n\t],\n\n\t// Turkish\n\ttr: [\n\t\t['â', 'a'],\n\t\t['Â', 'A'],\n\t\t['ö', 'o'],\n\t\t['Ö', 'O'],\n\t\t['ü', 'u'],\n\t\t['Ü', 'U'],\n\t],\n\n\t// Hungarian\n\thu: [\n\t\t['ű', 'u'],\n\t\t['Ű', 'U'],\n\t\t['ö', 'o'],\n\t\t['Ö', 'O'],\n\t\t['ü', 'u'],\n\t\t['Ü', 'U'],\n\t\t['á', 'a'],\n\t\t['Á', 'A'],\n\t\t['é', 'e'],\n\t\t['É', 'E'],\n\t\t['í', 'i'],\n\t\t['Í', 'I'],\n\t\t['ó', 'o'],\n\t\t['Ó', 'O'],\n\t\t['ú', 'u'],\n\t\t['Ú', 'U'],\n\t],\n\n\t// Serbian\n\tsr: [\n\t\t['ђ', 'dj'],\n\t\t['Ђ', 'Dj'],\n\t\t['џ', 'dz'],\n\t\t['Џ', 'Dz'],\n\t\t['љ', 'lj'],\n\t\t['Љ', 'Lj'],\n\t\t['њ', 'nj'],\n\t\t['Њ', 'Nj'],\n\t\t['ћ', 'c'],\n\t\t['Ћ', 'C'],\n\t\t['ч', 'ch'],\n\t\t['Ч', 'Ch'],\n\t\t['ш', 'sh'],\n\t\t['Ш', 'Sh'],\n\t\t['ж', 'zh'],\n\t\t['Ж', 'Zh'],\n\t],\n};\n\n// Convert all locale replacements to Maps at module load time\nfor (const locale of Object.keys(localeReplacements)) {\n\tlocaleReplacements[locale] = new Map(localeReplacements[locale]);\n}\n\nexport default localeReplacements;\n","import builtinReplacements from './replacements.js';\nimport localeReplacements from './locale-replacements.js';\n\n// TODO: Use Regex.escape when targeting Node.js 24.\nconst escapeRegex = string => string.replaceAll(/[.*+?^${}()|[\\]\\\\]/g, String.raw`\\$&`);\n\nconst buildReplacementPattern = replacements => {\n\t// Sort by key length descending so longer patterns match first (e.g., 'ու' before 'ո')\n\tconst sortedKeys = [...replacements.keys()].sort((a, b) => b.length - a.length);\n\treturn new RegExp(sortedKeys.map(key => escapeRegex(key)).join('|'), 'gu');\n};\n\n// Pre-compile the default pattern for performance\nconst defaultPattern = buildReplacementPattern(builtinReplacements);\n\n// Pre-compile locale patterns\nconst localeCache = new Map();\n\nfor (const [locale, localeMap] of Object.entries(localeReplacements)) {\n\tconst replacements = new Map(builtinReplacements);\n\tfor (const [key, value] of localeMap) {\n\t\treplacements.set(key, value);\n\t}\n\n\tlocaleCache.set(locale, {\n\t\treplacements,\n\t\tpattern: buildReplacementPattern(replacements),\n\t});\n}\n\nconst normalizeLocale = locale => {\n\tif (!locale) {\n\t\treturn;\n\t}\n\n\tconst normalizedLocale = locale.toLowerCase()\n\t\t// Norwegian (no) is an alias for Norwegian Bokmål (nb)\n\t\t.replace(/^no(-|$)/, 'nb$1');\n\n\tif (Object.hasOwn(localeReplacements, normalizedLocale)) {\n\t\treturn normalizedLocale;\n\t}\n\n\tconst prefix = normalizedLocale.split('-')[0];\n\tif (Object.hasOwn(localeReplacements, prefix)) {\n\t\treturn prefix;\n\t}\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 normalizedLocale = normalizeLocale(options.locale);\n\tconst customReplacements = [...options.customReplacements];\n\n\tlet replacements = builtinReplacements;\n\tlet pattern = defaultPattern;\n\n\tif (normalizedLocale) {\n\t\t({replacements, pattern} = localeCache.get(normalizedLocale));\n\t}\n\n\tstring = string.normalize();\n\n\t// Apply customReplacements separately (avoids expensive regex compilation)\n\tif (customReplacements.length > 0) {\n\t\t// Sort by key length descending so longer patterns match first\n\t\tcustomReplacements.sort((a, b) => b[0].length - a[0].length);\n\t\tfor (const [key, value] of customReplacements) {\n\t\t\tstring = string.replaceAll(key, value);\n\t\t}\n\t}\n\n\tstring = string.replace(pattern, match => replacements.get(match) ?? match);\n\tstring = string.normalize('NFD').replaceAll(/\\p{Diacritic}/gu, '').normalize();\n\n\t// Normalize all dash types to hyphen-minus\n\tstring = string.replaceAll(/\\p{Dash_Punctuation}/gu, '-');\n\n\treturn string;\n}\n","/**\n * Get a value from a cache Map, creating and storing it if absent.\n * @template K, V\n * @param {Map<K, V>} cache The cache to look up.\n * @param {K} key Cache key.\n * @param {() => V} create Factory called once to produce the value when not cached.\n * @returns {V} Cached or newly created value.\n */\nexport const getOrCreate = (cache, key, create) => {\n  if (!cache.has(key)) {\n    cache.set(key, create());\n  }\n\n  return /** @type {V} */ (cache.get(key));\n};\n","import transliterate from '@sindresorhus/transliterate';\nimport { generateUUID } from '@sveltia/utils/crypto';\nimport { truncate } from '@sveltia/utils/string';\nimport { get } from 'svelte/store';\n\nimport { cmsConfig } from '$lib/services/config';\nimport { getOrCreate } from '$lib/services/utils/cache';\n\n/**\n * @import { InternalCmsConfig } from '$lib/types/private';\n */\n\n/**\n * Locales that are supported in the `locale` option of the transliteration library.\n * @see https://github.com/sindresorhus/transliterate/tree/main#locale\n */\nconst TRANSLITERATION_LOCALES = ['da', 'de', 'hu', 'nb', 'sr', 'sv', 'tr'];\n/**\n * @type {Map<string, { consecutivePattern: RegExp, trimPattern: RegExp }>}\n */\nconst slugReplacementRegexCache = new Map();\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 * @param {string} [options.locale] BCP 47 language tag passed to the transliterate library when\n * `clean_accents` is enabled.\n * @param {number} [options.maxLength] Maximum length of the slug.\n * @returns {string} Slug.\n * @see https://decapcms.org/docs/configuration-options/#slug-type\n * @see https://sveltiacms.app/en/docs/collections/entries#global-slug-options\n */\nexport const slugify = (\n  string,\n  { fallback = true, locale = undefined, maxLength: maxLengthParam = undefined } = {},\n) => {\n  const {\n    slug: {\n      encoding = 'unicode',\n      clean_accents: cleanAccents = false,\n      sanitize_replacement: sanitizeReplacement = '-',\n      maxlength: maxLengthOption = undefined,\n      trim: trimReplacement = true,\n      lowercase = true,\n    } = {},\n  } = /** @type {InternalCmsConfig} */ (get(cmsConfig)) ?? {};\n\n  const maxLength = maxLengthParam ?? maxLengthOption;\n  let slug = string;\n\n  if (cleanAccents) {\n    // Remove any accented characters by transliterating them to their ASCII equivalents\n    // @see https://www.npmjs.com/package/@sindresorhus/transliterate\n    slug = transliterate(slug.normalize('NFD'), {\n      locale: locale && TRANSLITERATION_LOCALES.includes(locale) ? locale : undefined,\n    });\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  // Replace all the spaces with replacers (hyphens by default)\n  slug = slug.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\n    const cachedSlugRegexes = getOrCreate(slugReplacementRegexCache, escapedReplacement, () => ({\n      consecutivePattern: new RegExp(`${escapedReplacement}+`, 'g'),\n      trimPattern: new RegExp(`^${escapedReplacement}+|${escapedReplacement}+$`, 'g'),\n    }));\n\n    slug = slug.replace(cachedSlugRegexes.consecutivePattern, sanitizeReplacement);\n\n    // Trim replacement characters from the beginning and end\n    if (trimReplacement) {\n      slug = slug.replace(cachedSlugRegexes.trimPattern, '');\n    }\n  }\n\n  if (!slug && fallback) {\n    slug = generateUUID('short');\n  }\n\n  if (typeof maxLength === 'number' && slug.length > maxLength) {\n    slug = truncate(slug, maxLength, { ellipsis: '' });\n  }\n\n  if (lowercase) {\n    slug = slug.toLocaleLowerCase();\n  }\n\n  return slug;\n};\n","/*! @license DOMPurify 3.4.11 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.11/LICENSE */\n\nfunction _arrayLikeToArray(r, a) {\n  (null == a || a > r.length) && (a = r.length);\n  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n  return n;\n}\nfunction _arrayWithHoles(r) {\n  if (Array.isArray(r)) return r;\n}\nfunction _iterableToArrayLimit(r, l) {\n  var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n  if (null != t) {\n    var e,\n      n,\n      i,\n      u,\n      a = [],\n      f = true,\n      o = false;\n    try {\n      if (i = (t = t.call(r)).next, 0 === l) ; else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n    } catch (r) {\n      o = true, n = r;\n    } finally {\n      try {\n        if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;\n      } finally {\n        if (o) throw n;\n      }\n    }\n    return a;\n  }\n}\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction _slicedToArray(r, e) {\n  return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();\n}\nfunction _unsupportedIterableToArray(r, a) {\n  if (r) {\n    if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n    var t = {}.toString.call(r).slice(8, -1);\n    return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n  }\n}\n\nconst entries = Object.entries,\n  setPrototypeOf = Object.setPrototypeOf,\n  isFrozen = Object.isFrozen,\n  getPrototypeOf = Object.getPrototypeOf,\n  getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nlet freeze = Object.freeze,\n  seal = Object.seal,\n  create = Object.create; // eslint-disable-line import/no-mutable-exports\nlet _ref = typeof Reflect !== 'undefined' && Reflect,\n  apply = _ref.apply,\n  construct = _ref.construct;\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(func, thisArg) {\n    for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n      args[_key - 2] = arguments[_key];\n    }\n    return func.apply(thisArg, args);\n  };\n}\nif (!construct) {\n  construct = function construct(Func) {\n    for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n      args[_key2 - 1] = arguments[_key2];\n    }\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 arrayIsArray = Array.isArray;\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 numberToString = unapply(Number.prototype.toString);\nconst booleanToString = unapply(Boolean.prototype.toString);\nconst bigintToString = typeof BigInt === 'undefined' ? null : unapply(BigInt.prototype.toString);\nconst symbolToString = typeof Symbol === 'undefined' ? null : unapply(Symbol.prototype.toString);\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst objectToString = unapply(Object.prototype.toString);\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 _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n      args[_key3 - 1] = arguments[_key3];\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 _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n      args[_key4] = arguments[_key4];\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  if (!arrayIsArray(array)) {\n    return set;\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 _ref2 of entries(object)) {\n    var _ref3 = _slicedToArray(_ref2, 2);\n    const property = _ref3[0];\n    const value = _ref3[1];\n    const isPropertyExist = objectHasOwnProperty(object, property);\n    if (isPropertyExist) {\n      if (arrayIsArray(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 * Convert non-node values into strings without depending on direct property access.\n *\n * @param value - The value to stringify.\n * @returns A string representation of the provided value.\n */\nfunction stringifyValue(value) {\n  switch (typeof value) {\n    case 'string':\n      {\n        return value;\n      }\n    case 'number':\n      {\n        return numberToString(value);\n      }\n    case 'boolean':\n      {\n        return booleanToString(value);\n      }\n    case 'bigint':\n      {\n        return bigintToString ? bigintToString(value) : '0';\n      }\n    case 'symbol':\n      {\n        return symbolToString ? symbolToString(value) : 'Symbol()';\n      }\n    case 'undefined':\n      {\n        return objectToString(value);\n      }\n    case 'function':\n    case 'object':\n      {\n        if (value === null) {\n          return objectToString(value);\n        }\n        const valueAsRecord = value;\n        const valueToString = lookupGetter(valueAsRecord, 'toString');\n        if (typeof valueToString === 'function') {\n          const stringified = valueToString(valueAsRecord);\n          return typeof stringified === 'string' ? stringified : objectToString(stringified);\n        }\n        return objectToString(value);\n      }\n    default:\n      {\n        return objectToString(value);\n      }\n  }\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}\nfunction isRegex(value) {\n  try {\n    regExpTest(value, '');\n    return true;\n  } catch (_unused) {\n    return false;\n  }\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', 'search', 'section', 'select', 'shadow', 'slot', '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', 'enterkeyhint', 'exportparts', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'inputmode', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'part', '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', 'command', 'commandfor', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'exportparts', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inert', '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', 'part', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'slot', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns']);\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', 'mask-type', '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', 'columnalign', 'columnlines', 'columnspacing', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lquote', 'lspace', '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\nconst MUSTACHE_EXPR = seal(/{{[\\w\\W]*|^[\\w\\W]*}}/g);\nconst ERB_EXPR = seal(/<%[\\w\\W]*|^[\\w\\W]*%>/g);\nconst TMPLIT_EXPR = seal(/\\${[\\w\\W]*/g);\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// Markup-significant character probes used by _sanitizeElements.\n// Shared module-level instances are safe despite the sticky /g flags:\n// unapply() resets lastIndex for RegExp receivers before every call.\nconst ELEMENT_MARKUP_PROBE = seal(/<[/\\w!]/g);\nconst COMMENT_MARKUP_PROBE = seal(/<[/\\w]/g);\nconst FALLBACK_TAG_CLOSE = seal(/<\\/no(script|embed|frames)/i);\nconst SELF_CLOSING_TAG = seal(/\\/>/i);\n\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  processingInstruction: 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};\n/**\n * Resolve a set-valued configuration option: a fresh set built from\n * cfg[key] when it is an own array property (seeded with a clone of\n * options.base when given, case-normalized via options.transform),\n * the fallback set otherwise.\n *\n * @param cfg the cloned, prototype-free configuration object\n * @param key the configuration property to read\n * @param fallback the set to use when the option is absent or not an array\n * @param options transform and optional base set to merge into\n * @returns the resolved set\n */\nconst _resolveSetOption = function _resolveSetOption(cfg, key, fallback, options) {\n  return objectHasOwnProperty(cfg, key) && arrayIsArray(cfg[key]) ? addToSet(options.base ? clone(options.base) : {}, cfg[key], options.transform) : fallback;\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.4.11';\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 document = window.document;\n  const originalDocument = document;\n  const currentScript = originalDocument.currentScript;\n  window.DocumentFragment;\n    const HTMLTemplateElement = window.HTMLTemplateElement,\n    Node = window.Node,\n    Element = window.Element,\n    NodeFilter = window.NodeFilter,\n    _window$NamedNodeMap = window.NamedNodeMap;\n    _window$NamedNodeMap === void 0 ? window.NamedNodeMap || window.MozNamedAttrMap : _window$NamedNodeMap;\n    window.HTMLFormElement;\n    const DOMParser = window.DOMParser,\n    trustedTypes = window.trustedTypes;\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  const getShadowRoot = lookupGetter(ElementPrototype, 'shadowRoot');\n  const getAttributes = lookupGetter(ElementPrototype, 'attributes');\n  const getNodeType = Node && Node.prototype ? lookupGetter(Node.prototype, 'nodeType') : null;\n  const getNodeName = Node && Node.prototype ? lookupGetter(Node.prototype, 'nodeName') : null;\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  // The instance's own internal Trusted Types policy. Unlike a caller-supplied\n  // `TRUSTED_TYPES_POLICY`, this is created at most once — Trusted Types throws\n  // on duplicate policy names — and is the only policy allowed to persist\n  // across configurations and survive `clearConfig()`.\n  let defaultTrustedTypesPolicy;\n  let defaultTrustedTypesPolicyResolved = false;\n  // Tracks whether we are already inside a call to the configured Trusted Types\n  // policy (`createHTML` or `createScriptURL`). If a supplied policy callback\n  // itself calls `DOMPurify.sanitize` (the cause of #1422), `sanitize` would\n  // re-enter the policy and recurse until the stack overflows. We detect that\n  // re-entry and throw a clear, actionable error instead. The guard is shared\n  // across both callbacks, because either one re-entering `sanitize` triggers\n  // the same unbounded recursion.\n  let IN_TRUSTED_TYPES_POLICY = 0;\n  const _assertNotInTrustedTypesPolicy = function _assertNotInTrustedTypesPolicy() {\n    if (IN_TRUSTED_TYPES_POLICY > 0) {\n      throw typeErrorCreate('A configured TRUSTED_TYPES_POLICY callback (createHTML or ' + 'createScriptURL) must not call DOMPurify.sanitize, as that causes ' + 'infinite recursion. Do not pass a policy whose callbacks wrap ' + 'DOMPurify as TRUSTED_TYPES_POLICY; see the \"DOMPurify and Trusted ' + 'Types\" section of the README.');\n    }\n  };\n  const _createTrustedHTML = function _createTrustedHTML(html) {\n    _assertNotInTrustedTypesPolicy();\n    IN_TRUSTED_TYPES_POLICY++;\n    try {\n      return trustedTypesPolicy.createHTML(html);\n    } finally {\n      IN_TRUSTED_TYPES_POLICY--;\n    }\n  };\n  const _createTrustedScriptURL = function _createTrustedScriptURL(scriptUrl) {\n    _assertNotInTrustedTypesPolicy();\n    IN_TRUSTED_TYPES_POLICY++;\n    try {\n      return trustedTypesPolicy.createScriptURL(scriptUrl);\n    } finally {\n      IN_TRUSTED_TYPES_POLICY--;\n    }\n  };\n  // Lazily resolve (and cache) the instance's internal default policy.\n  // Resolution is attempted at most once: a successful `createPolicy` cannot be\n  // repeated (Trusted Types throws on duplicate names), and a failed or\n  // unsupported attempt must not be retried on every parse.\n  const _getDefaultTrustedTypesPolicy = function _getDefaultTrustedTypesPolicy() {\n    if (!defaultTrustedTypesPolicyResolved) {\n      defaultTrustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n      defaultTrustedTypesPolicyResolved = true;\n    }\n    return defaultTrustedTypesPolicy;\n  };\n  const _document = document,\n    implementation = _document.implementation,\n    createNodeIterator = _document.createNodeIterator,\n    createDocumentFragment = _document.createDocumentFragment,\n    getElementsByTagName = _document.getElementsByTagName;\n  const importNode = originalDocument.importNode;\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 MUSTACHE_EXPR$1 = MUSTACHE_EXPR,\n    ERB_EXPR$1 = ERB_EXPR,\n    TMPLIT_EXPR$1 = TMPLIT_EXPR,\n    DATA_ATTR$1 = DATA_ATTR,\n    ARIA_ATTR$1 = ARIA_ATTR,\n    IS_SCRIPT_OR_DATA$1 = IS_SCRIPT_OR_DATA,\n    ATTR_WHITESPACE$1 = ATTR_WHITESPACE,\n    CUSTOM_ELEMENT$1 = CUSTOM_ELEMENT;\n  let IS_ALLOWED_URI$1 = IS_ALLOWED_URI;\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  /* Config object to store ADD_TAGS/ADD_ATTR functions (when used as functions) */\n  const EXTRA_ELEMENT_HANDLING = Object.seal(create(null, {\n    tagCheck: {\n      writable: true,\n      configurable: false,\n      enumerable: true,\n      value: null\n    },\n    attributeCheck: {\n      writable: true,\n      configurable: false,\n      enumerable: true,\n      value: null\n    }\n  }));\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  /* Pristine allowlist bindings captured at setConfig() time. On the\n   * persistent-config path sanitize() restores the sets from these before\n   * the per-walk hook clone-guard, so a hook's in-call widening cannot\n   * carry across calls. Null until setConfig() is called; reset by\n   * clearConfig(). */\n  let SET_CONFIG_ALLOWED_TAGS = null;\n  let SET_CONFIG_ALLOWED_ATTR = null;\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',\n  // <selectedcontent> mirrors the selected <option>'s subtree, cloned by\n  // the UA (customizable <select>) — including any on* handlers — and the\n  // engine re-mirrors synchronously whenever a removal changes which\n  // option/selectedcontent is current, even inside DOMPurify's inert\n  // DOMParser document. Hoisting its children on removal re-inserts a fresh\n  // mirror target ahead of the walk, which the engine refills, looping\n  // forever (DoS) and amplifying output. Dropping its content on removal\n  // (rather than hoisting) breaks that cascade; the content is a duplicate\n  // of the option, which is sanitized on its own. See campaign-3 F1/F6.\n  'selectedcontent', '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  const DEFAULT_MATHML_TEXT_INTEGRATION_POINTS = freeze(['mi', 'mo', 'mn', 'ms', 'mtext']);\n  let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, DEFAULT_MATHML_TEXT_INTEGRATION_POINTS);\n  const DEFAULT_HTML_INTEGRATION_POINTS = freeze(['annotation-xml']);\n  let HTML_INTEGRATION_POINTS = addToSet({}, DEFAULT_HTML_INTEGRATION_POINTS);\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 = _resolveSetOption(cfg, 'ALLOWED_TAGS', DEFAULT_ALLOWED_TAGS, {\n      transform: transformCaseFunc\n    });\n    ALLOWED_ATTR = _resolveSetOption(cfg, 'ALLOWED_ATTR', DEFAULT_ALLOWED_ATTR, {\n      transform: transformCaseFunc\n    });\n    ALLOWED_NAMESPACES = _resolveSetOption(cfg, 'ALLOWED_NAMESPACES', DEFAULT_ALLOWED_NAMESPACES, {\n      transform: stringToString\n    });\n    URI_SAFE_ATTRIBUTES = _resolveSetOption(cfg, 'ADD_URI_SAFE_ATTR', DEFAULT_URI_SAFE_ATTRIBUTES, {\n      transform: transformCaseFunc,\n      base: DEFAULT_URI_SAFE_ATTRIBUTES\n    });\n    DATA_URI_TAGS = _resolveSetOption(cfg, 'ADD_DATA_URI_TAGS', DEFAULT_DATA_URI_TAGS, {\n      transform: transformCaseFunc,\n      base: DEFAULT_DATA_URI_TAGS\n    });\n    FORBID_CONTENTS = _resolveSetOption(cfg, 'FORBID_CONTENTS', DEFAULT_FORBID_CONTENTS, {\n      transform: transformCaseFunc\n    });\n    FORBID_TAGS = _resolveSetOption(cfg, 'FORBID_TAGS', clone({}), {\n      transform: transformCaseFunc\n    });\n    FORBID_ATTR = _resolveSetOption(cfg, 'FORBID_ATTR', clone({}), {\n      transform: transformCaseFunc\n    });\n    USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES && typeof cfg.USE_PROFILES === 'object' ? clone(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 = isRegex(cfg.ALLOWED_URI_REGEXP) ? cfg.ALLOWED_URI_REGEXP : IS_ALLOWED_URI; // Default regexp\n    NAMESPACE = typeof cfg.NAMESPACE === 'string' ? cfg.NAMESPACE : HTML_NAMESPACE; // Default HTML namespace\n    MATHML_TEXT_INTEGRATION_POINTS = objectHasOwnProperty(cfg, 'MATHML_TEXT_INTEGRATION_POINTS') && cfg.MATHML_TEXT_INTEGRATION_POINTS && typeof cfg.MATHML_TEXT_INTEGRATION_POINTS === 'object' ? clone(cfg.MATHML_TEXT_INTEGRATION_POINTS) : addToSet({}, DEFAULT_MATHML_TEXT_INTEGRATION_POINTS); // Default built-in map\n    HTML_INTEGRATION_POINTS = objectHasOwnProperty(cfg, 'HTML_INTEGRATION_POINTS') && cfg.HTML_INTEGRATION_POINTS && typeof cfg.HTML_INTEGRATION_POINTS === 'object' ? clone(cfg.HTML_INTEGRATION_POINTS) : addToSet({}, DEFAULT_HTML_INTEGRATION_POINTS); // Default built-in map\n    const customElementHandling = objectHasOwnProperty(cfg, 'CUSTOM_ELEMENT_HANDLING') && cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING === 'object' ? clone(cfg.CUSTOM_ELEMENT_HANDLING) : create(null);\n    CUSTOM_ELEMENT_HANDLING = create(null);\n    if (objectHasOwnProperty(customElementHandling, 'tagNameCheck') && isRegexOrFunction(customElementHandling.tagNameCheck)) {\n      CUSTOM_ELEMENT_HANDLING.tagNameCheck = customElementHandling.tagNameCheck; // Default undefined\n    }\n    if (objectHasOwnProperty(customElementHandling, 'attributeNameCheck') && isRegexOrFunction(customElementHandling.attributeNameCheck)) {\n      CUSTOM_ELEMENT_HANDLING.attributeNameCheck = customElementHandling.attributeNameCheck; // Default undefined\n    }\n    if (objectHasOwnProperty(customElementHandling, 'allowCustomizedBuiltInElements') && typeof customElementHandling.allowCustomizedBuiltInElements === 'boolean') {\n      CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = customElementHandling.allowCustomizedBuiltInElements; // Default undefined\n    }\n    seal(CUSTOM_ELEMENT_HANDLING);\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 = create(null);\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    /* Always reset function-based ADD_TAGS / ADD_ATTR checks to prevent\n     * leaking across calls when switching from function to array config */\n    EXTRA_ELEMENT_HANDLING.tagCheck = null;\n    EXTRA_ELEMENT_HANDLING.attributeCheck = null;\n    /* Merge configuration parameters */\n    if (objectHasOwnProperty(cfg, 'ADD_TAGS')) {\n      if (typeof cfg.ADD_TAGS === 'function') {\n        EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;\n      } else if (arrayIsArray(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    }\n    if (objectHasOwnProperty(cfg, 'ADD_ATTR')) {\n      if (typeof cfg.ADD_ATTR === 'function') {\n        EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;\n      } else if (arrayIsArray(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    }\n    if (objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') && arrayIsArray(cfg.ADD_URI_SAFE_ATTR)) {\n      addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n    }\n    if (objectHasOwnProperty(cfg, 'FORBID_CONTENTS') && arrayIsArray(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    if (objectHasOwnProperty(cfg, 'ADD_FORBID_CONTENTS') && arrayIsArray(cfg.ADD_FORBID_CONTENTS)) {\n      if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n        FORBID_CONTENTS = clone(FORBID_CONTENTS);\n      }\n      addToSet(FORBID_CONTENTS, cfg.ADD_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    // Re-derive the active Trusted Types policy from this configuration on\n    // every parse. The active policy must never be sticky closure state that\n    // outlives the config that set it: a caller-supplied policy left in place\n    // after `clearConfig()` — or after a later call that supplied none, or\n    // `TRUSTED_TYPES_POLICY: null` — could sign a subsequent \"default\"\n    // `RETURN_TRUSTED_TYPE` result with a foreign, possibly unsafe policy.\n    // See GHSA-vxr8-fq34-vvx9.\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      // A caller-supplied policy applies to this configuration only.\n      const previousTrustedTypesPolicy = trustedTypesPolicy;\n      trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n      // Sign local variables required by `sanitize`. If the supplied policy's\n      // `createHTML` is circular (i.e. it calls `DOMPurify.sanitize`), this\n      // throws via the re-entrancy guard. Restore the previous policy first so\n      // the instance is not left in a poisoned state. See #1422.\n      try {\n        emptyHTML = _createTrustedHTML('');\n      } catch (error) {\n        trustedTypesPolicy = previousTrustedTypesPolicy;\n        throw error;\n      }\n    } else if (cfg.TRUSTED_TYPES_POLICY === null) {\n      // Explicit opt-out for this call: perform no Trusted Types signing and\n      // create nothing (so a strict `trusted-types` CSP that disallows a\n      // `dompurify` policy can still call `sanitize` from inside its own\n      // policy — see #1422). Resetting to `undefined` rather than a sticky\n      // `null` also drops any previously retained caller policy, so it cannot\n      // resurface on a later call, while still allowing the next config-less\n      // call to restore the internal default policy. See GHSA-vxr8-fq34-vvx9.\n      trustedTypesPolicy = undefined;\n      emptyHTML = '';\n    } else {\n      // No policy supplied: keep the currently active policy if one is set — a\n      // previously supplied policy is intentionally sticky across config-less\n      // calls — otherwise fall back to the instance's own internal policy,\n      // created at most once. (A policy supplied for a *single* call still\n      // lingers by design; what must not linger is a policy whose configuration\n      // has been torn down via `clearConfig()`, which restores the default.)\n      if (trustedTypesPolicy === undefined) {\n        trustedTypesPolicy = _getDefaultTrustedTypesPolicy();\n      }\n      // Sign internal variables only when a policy is active. A falsy policy\n      // (Trusted Types unsupported, creation failed, or an explicit opt-out)\n      // leaves `emptyHTML` as a plain string, so we never call `.createHTML` on\n      // a non-policy and throw. See #1422.\n      if (trustedTypesPolicy && typeof emptyHTML === 'string') {\n        emptyHTML = _createTrustedHTML('');\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   * Namespace rules for an element in the SVG namespace.\n   *\n   * @param tagName the element's lowercase tag name\n   * @param parent the (possibly simulated) parent node\n   * @param parentTagName the parent's lowercase tag name\n   * @returns true if a spec-compliant parser could produce this element\n   */\n  const _checkSvgNamespace = function _checkSvgNamespace(tagName, parent, parentTagName) {\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 <svg>\n    // if the parent is either <annotation-xml> or a MathML\n    // text integration point.\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  /**\n   * Namespace rules for an element in the MathML namespace.\n   *\n   * @param tagName the element's lowercase tag name\n   * @param parent the (possibly simulated) parent node\n   * @param parentTagName the parent's lowercase tag name\n   * @returns true if a spec-compliant parser could produce this element\n   */\n  const _checkMathMlNamespace = function _checkMathMlNamespace(tagName, parent, parentTagName) {\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  /**\n   * Namespace rules for an element in the HTML namespace.\n   *\n   * @param tagName the element's lowercase tag name\n   * @param parent the (possibly simulated) parent node\n   * @param parentTagName the parent's lowercase tag name\n   * @returns true if a spec-compliant parser could produce this element\n   */\n  const _checkHtmlNamespace = function _checkHtmlNamespace(tagName, parent, parentTagName) {\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  /**\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      return _checkSvgNamespace(tagName, parent, parentTagName);\n    }\n    if (element.namespaceURI === MATHML_NAMESPACE) {\n      return _checkMathMlNamespace(tagName, parent, parentTagName);\n    }\n    if (element.namespaceURI === HTML_NAMESPACE) {\n      return _checkHtmlNamespace(tagName, parent, parentTagName);\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      /* The normal detach failed — this is reached for a parentless node\n         (getParentNode() is null, so .removeChild throws). Element.prototype\n         .remove() is itself a spec no-op on a parentless node, so a recorded\n         \"removal\" would otherwise hand the caller back an intact,\n         payload-bearing node (e.g. a detached IN_PLACE root the mXSS canary or\n         the style-with-element-child rule decided to kill). Fail closed by\n         throwing — exactly as a clobbered root does at the IN_PLACE entry —\n         rather than trying to \"neutralize\" the node via its own methods.\n         Neutralizing would mean calling getAttributeNames()/removeAttribute()\n         on the node, both of which a <form> root can clobber via a named child\n         (and _isClobbered does not even probe getAttributeNames), so the\n         neutralize step could itself be silently defeated, leaving the payload\n         intact. A throw touches only the cached, clobber-safe remove() and\n         getParentNode(). Generalizes GHSA-r47g-fvhr-h676 (clobbered-form root)\n         to every root-kill reason. REPORT-3.\n                This lives inside the catch, so it never fires for a normally-removed\n         in-tree node: those have a parent, removeChild() succeeds, and the\n         catch is not entered. Only a kept (parentless) root reaches here. */\n      remove(node);\n      if (!getParentNode(node)) {\n        throw typeErrorCreate('a node selected for removal could not be detached from its tree ' + 'and cannot be safely returned; refusing to sanitize in place');\n      }\n    }\n  };\n  /**\n   * _neutralizeRoot\n   *\n   * Fail-closed teardown of an in-place root after the sanitize walk aborts\n   * (campaign-3 F2). An internal throw mid-walk — e.g. a page-registered\n   * custom element's reaction detaches a node so `_forceRemove`'s deliberate\n   * parentless guard throws, or any other re-entrant engine mutation — would\n   * otherwise leave the caller's *live* tree half-sanitized, with everything\n   * after the abort point still carrying its handlers. There is no safe way\n   * to resume the walk (the tree mutated under us), so we strip the root bare:\n   * remove every child and every attribute, then let the caller's catch see\n   * the original error. Clobber-safe (cached `remove`/`childNodes`/`attributes`\n   * getters; the root was already clobber-pre-flighted at the IN_PLACE entry).\n   *\n   * @param root the in-place root to empty\n   */\n  const _neutralizeRoot = function _neutralizeRoot(root) {\n    const childNodes = getChildNodes(root);\n    if (childNodes) {\n      const snapshot = [];\n      arrayForEach(childNodes, child => {\n        arrayPush(snapshot, child);\n      });\n      arrayForEach(snapshot, child => {\n        try {\n          remove(child);\n        } catch (_) {\n          /* Best-effort teardown; a still-attached child is handled below */\n        }\n      });\n    }\n    const attributes = getAttributes(root);\n    if (attributes) {\n      for (let i = attributes.length - 1; i >= 0; --i) {\n        const attribute = attributes[i];\n        const name = attribute && attribute.name;\n        if (typeof name === 'string') {\n          try {\n            root.removeAttribute(name);\n          } catch (_) {\n            /* Clobbered removeAttribute — ignore (fail-closed best effort) */\n          }\n        }\n      }\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   * _stripDisallowedAttributes\n   *\n   * Removes every attribute the active configuration does not allow from a\n   * single element, using the same allowlist as the main attribute pass (so\n   * `on*` handlers go, but no `/^on/` blocklist is introduced). Used only to\n   * neutralise nodes that are being discarded from an in-place tree.\n   *\n   * @param element the element to strip\n   */\n  const _stripDisallowedAttributes = function _stripDisallowedAttributes(element) {\n    const attributes = getAttributes(element);\n    if (!attributes) {\n      return;\n    }\n    for (let i = attributes.length - 1; i >= 0; --i) {\n      const attribute = attributes[i];\n      const name = attribute && attribute.name;\n      if (typeof name !== 'string' || ALLOWED_ATTR[transformCaseFunc(name)]) {\n        continue;\n      }\n      try {\n        element.removeAttribute(name);\n      } catch (_) {\n        /* Clobbered removeAttribute on a doomed node — ignore */\n      }\n    }\n  };\n  /**\n   * _neutralizeSubtree\n   *\n   * Completes the audit-5 F1 fix across every removal path. The KEEP_CONTENT\n   * move-hoist neutralises only disallowed-tag removals; clobber, mXSS-canary,\n   * namespace, comment, processing-instruction and KEEP_CONTENT:false removals\n   * all drop their subtree wholesale via `_forceRemove`. On the IN_PLACE path\n   * those dropped nodes are detached from the caller's LIVE tree but a\n   * handler-bearing original among them (an `<img onerror>`/`<video>` that was\n   * loading) keeps its queued resource event, which fires in page scope after\n   * sanitize returns. This walks a removed subtree and strips every attribute\n   * the active configuration does not allow — so `on*` handlers are cancelled\n   * through the SAME allowlist that governs kept nodes, not a separate `/^on/`\n   * blocklist. Run synchronously before sanitize returns, i.e. before any\n   * queued event can fire. Hook-free by design: these nodes leave the output,\n   * so firing attribute hooks for them would be surprising. Clobber-safe reads;\n   * a doomed clobbered node may shadow `removeAttribute` (its own attributes are\n   * irrelevant — it is discarded — while its non-clobbered descendants, e.g.\n   * the `<img>`, are reached and scrubbed).\n   *\n   * @param root the root of a removed subtree to neutralise\n   */\n  const _neutralizeSubtree = function _neutralizeSubtree(root) {\n    const stack = [root];\n    while (stack.length > 0) {\n      const node = stack.pop();\n      const nodeType = getNodeType ? getNodeType(node) : node.nodeType;\n      if (nodeType === NODE_TYPE.element) {\n        _stripDisallowedAttributes(node);\n      }\n      const childNodes = getChildNodes(node);\n      if (childNodes) {\n        for (let i = childNodes.length - 1; i >= 0; --i) {\n          stack.push(childNodes[i]);\n        }\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 ? _createTrustedHTML(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   * Replace template expression syntax (mustache, ERB, template\n   * literal) with a space; shared by all SAFE_FOR_TEMPLATES scrub\n   * sites. Order matters: mustache, then ERB, then template literal.\n   *\n   * @param value the string to scrub\n   * @returns the scrubbed string\n   */\n  const _stripTemplateExpressions = function _stripTemplateExpressions(value) {\n    value = stringReplace(value, MUSTACHE_EXPR$1, ' ');\n    value = stringReplace(value, ERB_EXPR$1, ' ');\n    value = stringReplace(value, TMPLIT_EXPR$1, ' ');\n    return value;\n  };\n  /**\n   * Strip template-engine expressions ({{...}}, ${...}, <%...%>) from the\n   * character data of an element subtree. Used as the final safety net for\n   * SAFE_FOR_TEMPLATES on every DOM-returning code path so that expressions\n   * which only form after text-node normalization (e.g. fragments split across\n   * stripped elements) cannot survive into a template-evaluating framework.\n   *\n   * Walks text/comment/CDATA/processing-instruction nodes and mutates `.data`\n   * in place rather than round-tripping through innerHTML. This preserves\n   * descendant node references (important for IN_PLACE callers), avoids a\n   * serialize/reparse cycle, and reads literal character data — which means\n   * `<%...%>` in text content matches the ERB regex against its real bytes\n   * instead of the HTML-entity-escaped form innerHTML would produce.\n   *\n   * Attribute values are not visited here; SAFE_FOR_TEMPLATES handling for\n   * attributes is performed during the per-node `_sanitizeAttributes` pass.\n   *\n   * @param node The root element whose character data should be scrubbed.\n   */\n  const _scrubTemplateExpressions2 = function _scrubTemplateExpressions(node) {\n    var _node$querySelectorAl;\n    node.normalize();\n    const walker = createNodeIterator.call(node.ownerDocument || node, node,\n    // eslint-disable-next-line no-bitwise\n    NodeFilter.SHOW_TEXT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_CDATA_SECTION | NodeFilter.SHOW_PROCESSING_INSTRUCTION, null);\n    let currentNode = walker.nextNode();\n    while (currentNode) {\n      currentNode.data = _stripTemplateExpressions(currentNode.data);\n      currentNode = walker.nextNode();\n    }\n    // NodeIterator does not descend into <template>.content per the DOM spec,\n    // so we must explicitly recurse into each template's content fragment,\n    // mirroring the approach used by _sanitizeShadowDOM.\n    const templates = (_node$querySelectorAl = node.querySelectorAll) === null || _node$querySelectorAl === void 0 ? void 0 : _node$querySelectorAl.call(node, 'template');\n    if (templates) {\n      arrayForEach(templates, tmpl => {\n        if (_isDocumentFragment(tmpl.content)) {\n          _scrubTemplateExpressions2(tmpl.content);\n        }\n      });\n    }\n  };\n  /**\n   * _isClobbered\n   *\n   * Detect DOM-clobbering on HTMLFormElement nodes. Form is the only HTML\n   * interface with [LegacyOverrideBuiltIns]; a descendant element with a\n   * `name` attribute matching a prototype property shadows that property\n   * on direct reads. We use this check at the IN_PLACE entry-point and\n   * during attribute sanitization to refuse clobbered forms.\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    // Realm-independent tag-name probe. If we can't determine the tag\n    // name at all, we can't reason about clobbering — return false\n    // (the caller's other defences still apply).\n    const realTagName = getNodeName ? getNodeName(element) : null;\n    if (typeof realTagName !== 'string') {\n      return false;\n    }\n    if (transformCaseFunc(realTagName) !== 'form') {\n      return false;\n    }\n    return typeof element.nodeName !== 'string' || typeof element.textContent !== 'string' || typeof element.removeChild !== 'function' ||\n    // Realm-safe NamedNodeMap detection: equality against the cached\n    // prototype getter. Clobbered .attributes (e.g. <input name=\"attributes\">)\n    // makes the direct read diverge from the cached read; a clean form\n    // (same-realm OR foreign-realm) has both reads pointing at the same\n    // canonical NamedNodeMap.\n    element.attributes !== getAttributes(element) || typeof element.removeAttribute !== 'function' || typeof element.setAttribute !== 'function' || typeof element.namespaceURI !== 'string' || typeof element.insertBefore !== 'function' || typeof element.hasChildNodes !== 'function' ||\n    // NodeType clobbering probe. Cached Node.prototype.nodeType getter\n    // returns the integer 1 for any Element regardless of realm; direct\n    // read on a clobbered form (e.g. <input name=\"nodeType\">) returns\n    // the named child element. Cheap addition — nodeType is read from\n    // an internal slot, no serialization cost — and removes a residual\n    // clobbering surface used by several mXSS / PI / comment branches\n    // in _sanitizeElements that compare currentNode.nodeType directly.\n    element.nodeType !== getNodeType(element) ||\n    // HTMLFormElement has [LegacyOverrideBuiltIns]: a descendant named\n    // \"childNodes\" shadows the prototype getter. Direct reads of\n    // form.childNodes from a clobbered form return the named child\n    // instead of the real NodeList, so any walk that reads it directly\n    // skips the form's real children. Compare the direct read to the\n    // cached Node.prototype getter — when the form's named-property\n    // getter intercepts the read, the two values differ and we flag\n    // the form. This catches every clobbering child type (input,\n    // select, etc.) regardless of whether the named child happens to\n    // carry a numeric .length, which a typeof-based probe would miss\n    // (e.g. HTMLSelectElement.length is a defined unsigned-long).\n    element.childNodes !== getChildNodes(element);\n  };\n  /**\n   * Checks whether the given value is a DocumentFragment from any realm.\n   *\n   * The realm-independent replacement reads `nodeType` through the cached\n   * Node.prototype getter and compares to the DOCUMENT_FRAGMENT_NODE\n   * constant (11). nodeType is a numeric value resolved from the node's\n   * internal slot, identical across realms for the same kind of node.\n   *\n   * @param value object to check\n   * @return true if value is a DocumentFragment-shaped node from any realm\n   */\n  const _isDocumentFragment = function _isDocumentFragment(value) {\n    if (!getNodeType || typeof value !== 'object' || value === null) {\n      return false;\n    }\n    try {\n      return getNodeType(value) === NODE_TYPE.documentFragment;\n    } catch (_) {\n      return false;\n    }\n  };\n  /**\n   * Checks whether the given object is a DOM node, including nodes that\n   * originate from a different window/realm (e.g. an iframe's\n   * contentDocument). The previous `value instanceof Node` check was\n   * realm-bound: nodes from a different window failed it, causing\n   * sanitize() to silently stringify them and reset IN_PLACE to false,\n   * returning the original node unsanitized. See GHSA-4w3q-35jp-p934.\n   *\n   * @param value object to check whether it's a DOM node\n   * @return true if value is a DOM node from any realm\n   */\n  const _isNode = function _isNode(value) {\n    if (!getNodeType || typeof value !== 'object' || value === null) {\n      return false;\n    }\n    try {\n      return typeof getNodeType(value) === 'number';\n    } catch (_) {\n      return false;\n    }\n  };\n  function _executeHooks(hooks, currentNode, data) {\n    if (hooks.length === 0) {\n      return;\n    }\n    arrayForEach(hooks, hook => {\n      hook.call(DOMPurify, currentNode, data, CONFIG);\n    });\n  }\n  /**\n   * Structural-threat checks that condemn a node regardless of the\n   * allowlists: mXSS via namespace confusion, risky CSS construction,\n   * processing instructions, markup-bearing comments. Pure predicate;\n   * the caller removes. Check order is load-bearing.\n   *\n   * @param currentNode the node to inspect\n   * @param tagName the node's transformCaseFunc'd tag name\n   * @return true if the node must be removed\n   */\n  const _isUnsafeNode = function _isUnsafeNode(currentNode, tagName) {\n    /* Detect mXSS attempts abusing namespace confusion */\n    if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(ELEMENT_MARKUP_PROBE, currentNode.textContent) && regExpTest(ELEMENT_MARKUP_PROBE, currentNode.innerHTML)) {\n      return true;\n    }\n    /* Remove risky CSS construction leading to mXSS */\n    if (SAFE_FOR_XML && currentNode.namespaceURI === HTML_NAMESPACE && tagName === 'style' && _isNode(currentNode.firstElementChild)) {\n      return true;\n    }\n    /* Remove any occurrence of processing instructions */\n    if (currentNode.nodeType === NODE_TYPE.processingInstruction) {\n      return true;\n    }\n    /* Remove any kind of possibly harmful comments */\n    if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(COMMENT_MARKUP_PROBE, currentNode.data)) {\n      return true;\n    }\n    return false;\n  };\n  /**\n   * Handle a node whose tag is forbidden or not allowlisted: keep\n   * allowed custom elements (false return exits _sanitizeElements\n   * early - namespace/fallback checks and the afterSanitizeElements\n   * hook are intentionally skipped for kept custom elements), else\n   * hoist content per KEEP_CONTENT and remove.\n   *\n   * @param currentNode the disallowed node\n   * @param tagName the node's transformCaseFunc'd tag name\n   * @return true if the node was removed, false if kept\n   */\n  const _sanitizeDisallowedNode = function _sanitizeDisallowedNode(currentNode, 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         Use the cached prototype getters exclusively — the previous code\n         had `|| currentNode.parentNode` / `|| currentNode.childNodes`\n         fallbacks, but the cached getters always return the canonical\n         value (or null for a real parent-less node), so the fallback\n         path was dead in safe cases and a clobbering surface in unsafe\n         ones. Falsy cached results stay falsy; the `if (childNodes &&\n         parentNode)` check already gates correctly. */\n    if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n      const parentNode = getParentNode(currentNode);\n      const childNodes = getChildNodes(currentNode);\n      if (childNodes && parentNode) {\n        const childCount = childNodes.length;\n        /* In-place: hoist the *original* children so the iterator visits\n             and sanitises them through the same allowlist pass as every other\n             node. The caller built the tree in the live document, so the\n             originals carry already-queued resource events (`<img onerror>`,\n             `<video>`/`<audio>` error, lazy/`onload`, …); cloning would leave\n             those originals detached but still armed, firing in page scope\n             while the returned tree looked clean. Moving is safe in-place: the\n             root is pre-validated as an allowed tag and so is never the node\n             being removed, which keeps `parentNode` inside the iterator root\n             and the relocated child inside the serialised tree.\n                      Otherwise (string / DOM-copy paths): clone. The iterator is rooted\n             at — and the result serialised from — `body`, so a restrictive\n             ALLOWED_TAGS that removes `body` itself must leave its content in\n             place, which only cloning does; and those paths parse into an\n             inert document, so their discarded originals never had a queued\n             event to neutralise.\n                      `childNodes` is live; a tail-to-head walk keeps `childNodes[i]`\n             valid whether we move (drops the trailing entry) or clone (leaves\n             the list intact). */\n        for (let i = childCount - 1; i >= 0; --i) {\n          const hoisted = IN_PLACE ? childNodes[i] : cloneNode(childNodes[i], true);\n          parentNode.insertBefore(hoisted, getNextSibling(currentNode));\n        }\n      }\n    }\n    _forceRemove(currentNode);\n    return true;\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    /* 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(getNodeName ? getNodeName(currentNode) : currentNode.nodeName);\n    /* Execute a hook if present */\n    _executeHooks(hooks.uponSanitizeElement, currentNode, {\n      tagName,\n      allowedTags: ALLOWED_TAGS\n    });\n    /* Remove mXSS vectors, processing instructions and risky comments */\n    if (_isUnsafeNode(currentNode, tagName)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Remove element if anything forbids its presence */\n    if (FORBID_TAGS[tagName] || !(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function && EXTRA_ELEMENT_HANDLING.tagCheck(tagName)) && !ALLOWED_TAGS[tagName]) {\n      return _sanitizeDisallowedNode(currentNode, tagName);\n    }\n    /* Check whether element has a valid namespace.\n       Realm-safe check (GHSA-hpcv-96wg-7vj8): use the cached Node.prototype\n       nodeType getter rather than `instanceof Element`, which is realm-\n       bound and short-circuits to false for any node minted in a different\n       realm — letting a foreign-realm element with a forbidden namespace\n       slip past the namespace check entirely. */\n    const nt = getNodeType ? getNodeType(currentNode) : currentNode.nodeType;\n    if (nt === NODE_TYPE.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(FALLBACK_TAG_CLOSE, 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      const content = _stripTemplateExpressions(currentNode.textContent);\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    /* FORBID_ATTR must always win, even if ADD_ATTR predicate would allow it */\n    if (FORBID_ATTR[lcName]) {\n      return false;\n    }\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    const nameIsPermitted = ALLOWED_ATTR[lcName] || EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function && EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag);\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 && regExpTest(DATA_ATTR$1, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR$1, lcName)) ; else if (!nameIsPermitted) {\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, lcTag)) ||\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$1, ''))) ; 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$1, stringReplace(value, ATTR_WHITESPACE$1, ''))) ; else if (value) {\n      return false;\n    } else ;\n    return true;\n  };\n  /* Names the HTML spec reserves from valid-custom-element-name; these must\n   * never be treated as basic custom elements even when a permissive\n   * CUSTOM_ELEMENT_HANDLING.tagNameCheck is configured. */\n  const RESERVED_CUSTOM_ELEMENT_NAMES = addToSet({}, ['annotation-xml', 'color-profile', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'missing-glyph']);\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 !RESERVED_CUSTOM_ELEMENT_NAMES[stringToLowerCase(tagName)] && regExpTest(CUSTOM_ELEMENT$1, tagName);\n  };\n  /**\n   * Wrap an attribute value in the matching Trusted Types object when\n   * the active policy requires it. Namespaced attributes pass through\n   * unchanged (no TT support yet, see\n   * https://bugs.chromium.org/p/chromium/issues/detail?id=1305293).\n   *\n   * @param lcTag lowercase tag name of the containing element\n   * @param lcName lowercase attribute name\n   * @param namespaceURI the attribute's namespace, if any\n   * @param value the attribute value to wrap\n   * @return the value, wrapped when Trusted Types demand it\n   */\n  const _applyTrustedTypesToAttribute = function _applyTrustedTypesToAttribute(lcTag, lcName, namespaceURI, value) {\n    if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function' && !namespaceURI) {\n      switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n        case 'TrustedHTML':\n          {\n            return _createTrustedHTML(value);\n          }\n        case 'TrustedScriptURL':\n          {\n            return _createTrustedScriptURL(value);\n          }\n      }\n    }\n    return value;\n  };\n  /**\n   * Write a modified attribute value back onto the element. On\n   * success, re-probe for clobbering introduced by the new value and\n   * remove the element when found; otherwise pop the removal entry\n   * recorded by the earlier _removeAttribute (long-standing pairing\n   * with the SANITIZE_NAMED_PROPS path - do not \"fix\" casually). On\n   * failure, remove the attribute instead.\n   *\n   * @param currentNode the element carrying the attribute\n   * @param name the attribute name as present on the element\n   * @param namespaceURI the attribute's namespace, if any\n   * @param value the new attribute value\n   */\n  const _setAttributeValue = function _setAttributeValue(currentNode, name, namespaceURI, value) {\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   * _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 attributes = currentNode.attributes;\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    const lcTag = transformCaseFunc(currentNode.nodeName);\n    /* Go backwards over all attributes; safely remove bad ones */\n    while (l--) {\n      const attr = attributes[l];\n      const name = attr.name,\n        namespaceURI = attr.namespaceURI,\n        attrValue = attr.value;\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') && stringIndexOf(value, SANITIZE_NAMED_PROPS_PREFIX) !== 0) {\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      // Else: already prefixed, leave the attribute alone — the prefix is\n      // itself the clobbering protection, and re-applying it is incorrect.\n      /* Work around a security issue with comments inside attributes */\n      if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n      /* Make sure we cannot easily use animated hrefs, even if animations are allowed */\n      if (lcName === 'attributename' && stringMatch(value, 'href')) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n      /* Did the hooks force-keep 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(SELF_CLOSING_TAG, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n      /* Sanitize attribute content to be template-safe */\n      if (SAFE_FOR_TEMPLATES) {\n        value = _stripTemplateExpressions(value);\n      }\n      /* Is `value` valid for this attribute? */\n      if (!_isValidAttribute(lcTag, lcName, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n      /* Handle attributes that require Trusted Types */\n      value = _applyTrustedTypesToAttribute(lcTag, lcName, namespaceURI, value);\n      /* Handle invalid data-* attribute set by try-catching it */\n      if (value !== initValue) {\n        _setAttributeValue(currentNode, name, namespaceURI, value);\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 _sanitizeShadowDOM2 = 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         Realm-safe check (GHSA-hpcv-96wg-7vj8): use nodeType against the\n         DOCUMENT_FRAGMENT_NODE constant rather than instanceof, so we\n         recurse into <template>.content from foreign realms too. */\n      if (_isDocumentFragment(shadowNode.content)) {\n        _sanitizeShadowDOM2(shadowNode.content);\n      }\n      /* An element iterated here may itself host an attached\n         shadow root. The default NodeIterator does not enter shadow\n         trees, so a shadow root nested inside template.content was\n         previously reached by no walk at all (the pre-pass at\n         _sanitizeAttachedShadowRoots descends via childNodes, which\n         doesn't enter template.content; the template-content recursion\n         above iterates the content but never inspected shadowRoot).\n         Walk it explicitly. The nodeType guard avoids reading\n         shadowRoot off text / comment / CDATA / PI nodes that the\n         iterator also surfaces. */\n      const shadowNodeType = getNodeType ? getNodeType(shadowNode) : shadowNode.nodeType;\n      if (shadowNodeType === NODE_TYPE.element) {\n        const innerSr = getShadowRoot(shadowNode);\n        if (_isDocumentFragment(innerSr)) {\n          _sanitizeAttachedShadowRoots(innerSr);\n          _sanitizeShadowDOM2(innerSr);\n        }\n      }\n    }\n    /* Execute a hook if present */\n    _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n  };\n  /**\n   * _sanitizeAttachedShadowRoots\n   *\n   * Walks `root` and feeds every attached shadow root we encounter into\n   * the existing _sanitizeShadowDOM pipeline. The default node iterator\n   * does not descend into shadow trees, so nodes inside an attached\n   * shadow root would otherwise be skipped entirely.\n   *\n   * Two real input paths put attached shadow roots in front of us:\n   *   1. IN_PLACE on a DOM node that already has shadow roots attached.\n   *   2. DOM-node input where importNode(dirty, true) deep-clones the\n   *      shadow root because it was created with `clonable: true`.\n   *\n   * This pass runs once, up front, so the main iteration loop (and the\n   * existing _sanitizeShadowDOM template-content recursion) stay\n   * untouched — string-input paths are not affected.\n   *\n   * @param root the subtree root to walk for attached shadow roots\n   */\n  const _sanitizeAttachedShadowRoots = function _sanitizeAttachedShadowRoots(root) {\n    /* Iterative (explicit stack) rather than per-child recursion. DOM APIs\n       impose no depth cap, so an attacker-shaped tree (JSON/CRDT/editor data\n       built straight into the DOM — the IN_PLACE surface) deeper than the JS\n       call-stack budget would otherwise overflow native recursion here and\n       throw at the IN_PLACE entry pre-pass, before a single node is\n       sanitized, leaving the caller's live tree untouched (fail-open). See\n       campaign-3 F4. A heap stack keeps depth off the call stack.\n            Each work item is either a node to descend into, or a deferred\n       `_sanitizeShadowDOM` for an already-walked shadow root. The deferred\n       form preserves the original post-order discipline: a shadow root's\n       nested shadow roots are discovered before the outer shadow is\n       sanitized (which may remove hosts). Pushes are in reverse of the\n       desired processing order (LIFO): template content, then children, then\n       the shadow-sanitize, then the shadow walk — so the order matches the\n       previous recursion exactly. */\n    const stack = [{\n      node: root,\n      shadow: null\n    }];\n    while (stack.length > 0) {\n      const item = stack.pop();\n      /* Deferred shadow-DOM sanitisation: runs after its subtree was walked. */\n      if (item.shadow) {\n        _sanitizeShadowDOM2(item.shadow);\n        continue;\n      }\n      const node = item.node;\n      const nodeType = getNodeType ? getNodeType(node) : node.nodeType;\n      const isElement = nodeType === NODE_TYPE.element;\n      /* (pushed last → processed first) Children, snapshotted in reverse so\n         the first child is processed first. Snapshotting matters because a\n         hook may detach siblings mid-walk. */\n      const childNodes = getChildNodes(node);\n      if (childNodes) {\n        for (let i = childNodes.length - 1; i >= 0; --i) {\n          stack.push({\n            node: childNodes[i],\n            shadow: null\n          });\n        }\n      }\n      /* (pushed before children → processed after them, matching the old\n         \"template content last\" order) When the node is a <template>,\n         descend into its content. */\n      if (isElement) {\n        const rootName = getNodeName ? getNodeName(node) : null;\n        if (typeof rootName === 'string' && transformCaseFunc(rootName) === 'template') {\n          const content = node.content;\n          if (_isDocumentFragment(content)) {\n            stack.push({\n              node: content,\n              shadow: null\n            });\n          }\n        }\n      }\n      /* Shadow root (processed first): walk its subtree, then sanitise it.\n         Realm-safe check (GHSA-hpcv-96wg-7vj8): nodeType-based detection\n         rather than `instanceof DocumentFragment`, which is realm-bound and\n         silently skipped foreign-realm shadow roots (e.g.\n         iframe.contentDocument attachShadow). */\n      if (isElement) {\n        const sr = getShadowRoot(node);\n        if (_isDocumentFragment(sr)) {\n          /* Push the deferred sanitise first so it pops after the shadow\n             walk we push next, i.e. nested shadow roots are discovered\n             before this one is sanitised. */\n          stack.push({\n            node: null,\n            shadow: sr\n          }, {\n            node: sr,\n            shadow: null\n          });\n        }\n      }\n    }\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      dirty = stringifyValue(dirty);\n      if (typeof dirty !== 'string') {\n        throw typeErrorCreate('dirty is not a string, aborting');\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      /* Persistent setConfig() path: _parseConfig is skipped, so the sets are\n       * not re-derived per call. Restore them from the pristine bindings\n       * captured at setConfig() time so a previous call's hook clone (mutated\n       * below) does not carry over. */\n      ALLOWED_TAGS = SET_CONFIG_ALLOWED_TAGS;\n      ALLOWED_ATTR = SET_CONFIG_ALLOWED_ATTR;\n    } else {\n      _parseConfig(cfg);\n    }\n    /* Clone the hook-mutable allowlists before the walk whenever an\n     * uponSanitize* hook is registered. The hook event exposes ALLOWED_TAGS\n     * and ALLOWED_ATTR by reference (as allowedTags / allowedAttributes), so\n     * a hook that widens them would otherwise mutate the shared set\n     * permanently: across later calls and across every element. Cloning per\n     * walk keeps documented in-call widening working while scoping it to the\n     * call. A single guard for both config paths - the per-call path rebinds\n     * the sets in _parseConfig each call, the persistent path restores them\n     * from the captured bindings just above - so the two cannot diverge. */\n    if (hooks.uponSanitizeElement.length > 0 || hooks.uponSanitizeAttribute.length > 0) {\n      ALLOWED_TAGS = clone(ALLOWED_TAGS);\n    }\n    if (hooks.uponSanitizeAttribute.length > 0) {\n      ALLOWED_ATTR = clone(ALLOWED_ATTR);\n    }\n    /* Clean up removed elements */\n    DOMPurify.removed = [];\n    /* Resolve IN_PLACE for this call without mutating persistent config.\n       Writing the IN_PLACE closure variable here leaks under setConfig(),\n       where _parseConfig is skipped on later calls: a single string call would\n       disable in-place mode for every subsequent node call, returning a\n       sanitized copy while leaving the caller's node — which in-place callers\n       keep using and whose return value they ignore — unsanitized. REPORT-2. */\n    const inPlace = IN_PLACE && typeof dirty !== 'string' && _isNode(dirty);\n    if (inPlace) {\n      /* Do some early pre-sanitization to avoid unsafe root nodes.\n         Read nodeName through the cached prototype getter — a clobbering\n         child named \"nodeName\" on the form root would otherwise shadow\n         the property and let this check skip the root-allowlist\n         validation entirely. */\n      const nn = getNodeName ? getNodeName(dirty) : dirty.nodeName;\n      if (typeof nn === 'string') {\n        const tagName = transformCaseFunc(nn);\n        if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n          throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n        }\n      }\n      /* Pre-flight the root through _isClobbered. The iterator-driven\n         removal path can not detach a parent-less root: _forceRemove\n         falls through to Element.prototype.remove(), which per spec\n         is a no-op on a node with no parent. A clobbered root would\n         then survive the main loop with its attributes uninspected,\n         because _sanitizeAttributes early-returns on _isClobbered. The\n         result would be an attacker-controlled form, complete with any\n         event-handler attributes the caller passed in, handed back to\n         the application unsanitized. Refuse to sanitize such a root\n         the same way we refuse a forbidden tag. GHSA-r47g-fvhr-h676. */\n      if (_isClobbered(dirty)) {\n        throw typeErrorCreate('root node is clobbered and cannot be sanitized in-place');\n      }\n      /* Sanitize attached shadow roots before the main iterator runs.\n         The iterator does not descend into shadow trees. Same fail-closed\n         barrier as the main walk (campaign-3 F2): a custom-element reaction\n         inside a shadow root could abort this pre-pass before the walk runs,\n         which would otherwise leave the entire live tree unsanitized. */\n      try {\n        _sanitizeAttachedShadowRoots(dirty);\n      } catch (error) {\n        _neutralizeRoot(dirty);\n        throw error;\n      }\n    } else if (_isNode(dirty)) {\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      /* Clonable shadow roots are deep-cloned by importNode(); sanitize\n         them before the main iterator runs, since the iterator does not\n         descend into shadow trees. The walk routes every read through a\n         cached prototype getter so clobbering descendants on a form root\n         cannot hide a shadow host from this pass. */\n      _sanitizeAttachedShadowRoots(importedNode);\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 ? _createTrustedHTML(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(inPlace ? dirty : body);\n    /* Now start iterating over the created document.\n       The walk runs inside an exception barrier (campaign-3 F2): a re-entrant\n       engine/custom-element mutation can detach a node mid-walk so\n       `_forceRemove`'s parentless guard throws, aborting the loop. Without the\n       barrier the caller's in-place tree would be left half-sanitized with the\n       unvisited tail still armed. On any throw we fail closed — strip the\n       in-place root bare — then rethrow so the existing throw contract is\n       preserved. (String/DOM-copy paths never return the partial body, so the\n       propagating throw is already fail-closed there.) */\n    try {\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           Realm-safe check (GHSA-hpcv-96wg-7vj8): nodeType-based detection\n           instead of instanceof, so foreign-realm <template>.content is\n           walked correctly. */\n        if (_isDocumentFragment(currentNode.content)) {\n          _sanitizeShadowDOM2(currentNode.content);\n        }\n      }\n    } catch (error) {\n      if (inPlace) {\n        _neutralizeRoot(dirty);\n      }\n      throw error;\n    }\n    /* If we sanitized `dirty` in-place, return it. */\n    if (inPlace) {\n      /* Fail-closed completion of the audit-5 F1 fix: every node removed from\n         the caller's live tree is detached but may still hold a queued\n         resource-event handler that fires in page scope after we return. The\n         move-hoist covers only disallowed-tag KEEP_CONTENT removals; strip the\n         non-allow-listed attributes off every other removed subtree (clobber,\n         mXSS, namespace, comments, KEEP_CONTENT:false, …) so those handlers are\n         cancelled before any event can fire. Runs synchronously, pre-return. */\n      arrayForEach(DOMPurify.removed, entry => {\n        if (entry.element) {\n          _neutralizeSubtree(entry.element);\n        }\n      });\n      if (SAFE_FOR_TEMPLATES) {\n        _scrubTemplateExpressions2(dirty);\n      }\n      return dirty;\n    }\n    /* Return sanitized string or DOM */\n    if (RETURN_DOM) {\n      if (SAFE_FOR_TEMPLATES) {\n        _scrubTemplateExpressions2(body);\n      }\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      serializedHTML = _stripTemplateExpressions(serializedHTML);\n    }\n    return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? _createTrustedHTML(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    SET_CONFIG_ALLOWED_TAGS = ALLOWED_TAGS;\n    SET_CONFIG_ALLOWED_ATTR = ALLOWED_ATTR;\n  };\n  DOMPurify.clearConfig = function () {\n    CONFIG = null;\n    SET_CONFIG = false;\n    SET_CONFIG_ALLOWED_TAGS = null;\n    SET_CONFIG_ALLOWED_ATTR = null;\n    // Drop any caller-supplied Trusted Types policy so it cannot poison later\n    // `RETURN_TRUSTED_TYPE` output. The internal default policy (cached, and\n    // never recreated — Trusted Types throws on duplicate names) is restored by\n    // the next `_parseConfig`. See GHSA-vxr8-fq34-vvx9.\n    trustedTypesPolicy = defaultTrustedTypesPolicy;\n    emptyHTML = '';\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    /* Reject unknown entry points. Without this, a non-hook key (e.g.\n     * '__proto__') indexes off the prototype chain rather than a real\n     * hook array, and arrayPush then writes to Object.prototype. Guard\n     * with an own-property check against the known hook names. */\n    if (!objectHasOwnProperty(hooks, entryPoint)) {\n      return;\n    }\n    arrayPush(hooks[entryPoint], hookFunction);\n  };\n  DOMPurify.removeHook = function (entryPoint, hookFunction) {\n    if (!objectHasOwnProperty(hooks, entryPoint)) {\n      return undefined;\n    }\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    if (!objectHasOwnProperty(hooks, entryPoint)) {\n      return;\n    }\n    hooks[entryPoint] = [];\n  };\n  DOMPurify.removeAllHooks = function () {\n    hooks = _createHooksMap();\n  };\n  return DOMPurify;\n}\nvar purify = createDOMPurify();\n\nexport { purify as default };\n//# sourceMappingURL=purify.es.mjs.map\n","// src/browser.ts\nimport DOMPurify from \"dompurify\";\nvar browser_default = DOMPurify;\nvar sanitize = DOMPurify.sanitize.bind(DOMPurify);\nvar isSupported = DOMPurify.isSupported;\nvar addHook = DOMPurify.addHook.bind(DOMPurify);\nvar removeHook = DOMPurify.removeHook.bind(DOMPurify);\nvar removeHooks = DOMPurify.removeHooks.bind(DOMPurify);\nvar removeAllHooks = DOMPurify.removeAllHooks.bind(DOMPurify);\nvar setConfig = DOMPurify.setConfig.bind(DOMPurify);\nvar clearConfig = DOMPurify.clearConfig.bind(DOMPurify);\nvar isValidAttribute = DOMPurify.isValidAttribute.bind(DOMPurify);\nvar version = DOMPurify.version;\nvar removed = DOMPurify.removed;\nfunction clearWindow() {\n}\nexport {\n  addHook,\n  clearConfig,\n  clearWindow,\n  browser_default as default,\n  isSupported,\n  isValidAttribute,\n  removeAllHooks,\n  removeHook,\n  removeHooks,\n  removed,\n  sanitize,\n  setConfig,\n  version\n};\n","/**\n * marked v18.0.5 - a markdown parser\n * Copyright (c) 2018-2026, MarkedJS. (MIT License)\n * Copyright (c) 2011-2018, Christopher Jeffrey. (MIT License)\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 M(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var T=M();function N(l){T=l}var _={exec:()=>null};function E(l){let e=[];return t=>{let n=Math.max(0,Math.min(3,t-1)),s=e[n];return s||(s=l(n),e[n]=s),s}}function d(l,e=\"\"){let t=typeof l==\"string\"?l:l.source,n={replace:(s,r)=>{let i=typeof r==\"string\"?r:r.source;return i=i.replace(m.caret,\"$1\"),t=t.replace(s,i),n},getRegex:()=>new RegExp(t,e)};return n}var Te=((l=\"\")=>{try{return!!new RegExp(\"(?<=1)(?<!1)\"+l)}catch{return!1}})(),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,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\\[[ xX]\\] +\\S/,listReplaceTask:/^\\[[ xX]\\] +/,listTaskCheckbox:/\\[[ 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,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:E(l=>new RegExp(`^ {0,${l}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \t][^\\\\n]*)?(?:\\\\n|$))`)),hrRegex:E(l=>new RegExp(`^ {0,${l}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`)),fencesBeginRegex:E(l=>new RegExp(`^ {0,${l}}(?:\\`\\`\\`|~~~)`)),headingBeginRegex:E(l=>new RegExp(`^ {0,${l}}#`)),htmlBeginRegex:E(l=>new RegExp(`^ {0,${l}}<(?:[a-z].*>|!--)`,\"i\")),blockquoteBeginRegex:E(l=>new RegExp(`^ {0,${l}}>`))},Oe=/^(?:[ \\t]*(?:\\n|$))+/,we=/^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/,ye=/^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,B=/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,Pe=/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,j=/ {0,3}(?:[*+-]|\\d{1,9}[.)])/,oe=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,ae=d(oe).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(),Se=d(oe).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]+)*)/,$e=/^[^\\n]+/,U=/(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/,Le=d(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace(\"label\",U).replace(\"title\",/(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/).getRegex(),_e=d(/^(bull)([ \\t][^\\n]*?)?(?:\\n|$)/).replace(/bull/g,j).getRegex(),H=\"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\",K=/<!--(?:-?>|[\\s\\S]*?(?:-->|$))/,ze=d(\"^ {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\",K).replace(\"tag\",H).replace(\"attribute\",/ +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex(),le=d(F).replace(\"hr\",B).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[.)])[ \\\\t]+[^ \\\\t\\\\n]\").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",H).getRegex(),Me=d(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace(\"paragraph\",le).getRegex(),W={blockquote:Me,code:we,def:Le,fences:ye,heading:Pe,hr:B,html:ze,lheading:ae,list:_e,newline:Oe,paragraph:le,table:_,text:$e},se=d(\"^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\").replace(\"hr\",B).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[.)])[ \\\\t]\").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",H).getRegex(),Ee={...W,lheading:Se,table:se,paragraph:d(F).replace(\"hr\",B).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"table\",se).replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)])[ \\\\t]+[^ \\\\t\\\\n]\").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",H).getRegex()},Ie={...W,html:d(`^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\\\s[^'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`).replace(\"comment\",K).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:_,lheading:/^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,paragraph:d(F).replace(\"hr\",B).replace(\"heading\",` *#{1,6} *[^\n]`).replace(\"lheading\",ae).replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"|fences\",\"\").replace(\"|list\",\"\").replace(\"|html\",\"\").replace(\"|tag\",\"\").getRegex()},Ae=/^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,Ce=/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,ue=/^( {2,}|\\\\)\\n(?!\\s*$)/,Be=/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,I=/[\\p{P}\\p{S}]/u,Z=/[\\s\\p{P}\\p{S}]/u,X=/[^\\s\\p{P}\\p{S}]/u,De=d(/^((?![*_])punctSpace)/,\"u\").replace(/punctSpace/g,Z).getRegex(),pe=/(?!~)[\\p{P}\\p{S}]/u,qe=/(?!~)[\\s\\p{P}\\p{S}]/u,ve=/(?:[^\\s\\p{P}\\p{S}]|~)/u,He=d(/link|precode-code|html/,\"g\").replace(\"link\",/\\[(?:[^\\[\\]`]|(?<a>`+)[^`]+\\k<a>(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)/).replace(\"precode-\",Te?\"(?<!`)()\":\"(^^|[^`])\").replace(\"code\",/(?<b>`+)[^`]+\\k<b>(?!`)/).replace(\"html\",/<(?! )[^<>]*?>/).getRegex(),ce=/^(?:\\*+(?:((?!\\*)punct)|([^\\s*]))?)|^_+(?:((?!_)punct)|([^\\s_]))?/,Ze=d(ce,\"u\").replace(/punct/g,I).getRegex(),Ge=d(ce,\"u\").replace(/punct/g,pe).getRegex(),he=\"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)\",Ne=d(he,\"gu\").replace(/notPunctSpace/g,X).replace(/punctSpace/g,Z).replace(/punct/g,I).getRegex(),Qe=d(he,\"gu\").replace(/notPunctSpace/g,ve).replace(/punctSpace/g,qe).replace(/punct/g,pe).getRegex(),je=d(\"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)\",\"gu\").replace(/notPunctSpace/g,X).replace(/punctSpace/g,Z).replace(/punct/g,I).getRegex(),Fe=d(/^~~?(?:((?!~)punct)|[^\\s~])/,\"u\").replace(/punct/g,I).getRegex(),Ue=\"^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)\",Ke=d(Ue,\"gu\").replace(/notPunctSpace/g,X).replace(/punctSpace/g,Z).replace(/punct/g,I).getRegex(),We=d(/\\\\(punct)/,\"gu\").replace(/punct/g,I).getRegex(),Xe=d(/^<(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=d(K).replace(\"(?:-->|$)\",\"-->\").getRegex(),Ve=d(\"^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(),v=/(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\\])|[^\\[\\]\\\\`])*?/,Ye=d(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]+(?:\\n[ \\t]*)?|\\n[ \\t]*)(title))?\\s*\\)/).replace(\"label\",v).replace(\"href\",/<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/).replace(\"title\",/\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex(),ke=d(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\",v).replace(\"ref\",U).getRegex(),de=d(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\",U).getRegex(),et=d(\"reflink|nolink(?!\\\\()\",\"g\").replace(\"reflink\",ke).replace(\"nolink\",de).getRegex(),ie=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,J={_backpedal:_,anyPunctuation:We,autolink:Xe,blockSkip:He,br:ue,code:Ce,del:_,delLDelim:_,delRDelim:_,emStrongLDelim:Ze,emStrongRDelimAst:Ne,emStrongRDelimUnd:je,escape:Ae,link:Ye,nolink:de,punctuation:De,reflink:ke,reflinkSearch:et,tag:Ve,text:Be,url:_},tt={...J,link:d(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\",v).getRegex(),reflink:d(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\",v).getRegex()},Q={...J,emStrongRDelimAst:Qe,emStrongLDelim:Ge,delLDelim:Fe,delRDelim:Ke,url:d(/^((?:protocol):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/).replace(\"protocol\",ie).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\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,text:d(/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|protocol:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/).replace(\"protocol\",ie).getRegex()},nt={...Q,br:d(ue).replace(\"{2,}\",\"*\").getRegex(),text:d(Q.text).replace(\"\\\\b_\",\"\\\\b_| {2,}\\\\n\").replace(/\\{2,\\}/g,\"*\").getRegex()},D={normal:W,gfm:Ee,pedantic:Ie},A={normal:J,gfm:Q,breaks:nt,pedantic:tt};var rt={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"},ge=l=>rt[l];function O(l,e){if(e){if(m.escapeTest.test(l))return l.replace(m.escapeReplace,ge)}else if(m.escapeTestNoEncode.test(l))return l.replace(m.escapeReplaceNoEncode,ge);return l}function V(l){try{l=encodeURI(l).replace(m.percentDecode,\"%\")}catch{return null}return l}function Y(l,e){let t=l.replace(m.findPipe,(r,i,o)=>{let u=!1,a=i;for(;--a>=0&&o[a]===\"\\\\\";)u=!u;return u?\"|\":\" |\"}),n=t.split(m.splitPipe),s=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(;s<n.length;s++)n[s]=n[s].trim().replace(m.slashPipe,\"|\");return n}function $(l,e,t){let n=l.length;if(n===0)return\"\";let s=0;for(;s<n;){let r=l.charAt(n-s-1);if(r===e&&!t)s++;else if(r!==e&&t)s++;else break}return l.slice(0,n-s)}function ee(l){let e=l.split(`\n`),t=e.length-1;for(;t>=0&&m.blankLine.test(e[t]);)t--;return e.length-t<=2?l:e.slice(0,t+1).join(`\n`)}function fe(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 me(l,e=0){let t=e,n=\"\";for(let s of l)if(s===\"\t\"){let r=4-t%4;n+=\" \".repeat(r),t+=r}else n+=s,t++;return n}function xe(l,e,t,n,s){let r=e.href,i=e.title||null,o=l[1].replace(s.other.outputLinkReplace,\"$1\");n.state.inLink=!0;let u={type:l[0].charAt(0)===\"!\"?\"image\":\"link\",raw:t,href:r,title:i,text:o,tokens:n.inlineTokens(o)};return n.state.inLink=!1,u}function st(l,e,t){let n=l.match(t.other.indentCodeCompensation);if(n===null)return e;let s=n[1];return e.split(`\n`).map(r=>{let i=r.match(t.other.beginningSpace);if(i===null)return r;let[o]=i;return o.length>=s.length?r.slice(s.length):r}).join(`\n`)}var w=class{options;rules;lexer;constructor(e){this.options=e||T}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=this.options.pedantic?t[0]:ee(t[0]),s=n.replace(this.rules.other.codeRemoveIndent,\"\");return{type:\"code\",raw:n,codeBlockStyle:\"indented\",text:s}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],s=st(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:s}}}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 s=$(n,\"#\");(this.options.pedantic||!s||this.rules.other.endingSpaceChar.test(s))&&(n=s.trim())}return{type:\"heading\",raw:$(t[0],`\n`),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:$(t[0],`\n`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=$(t[0],`\n`).split(`\n`),s=\"\",r=\"\",i=[];for(;n.length>0;){let o=!1,u=[],a;for(a=0;a<n.length;a++)if(this.rules.other.blockquoteStart.test(n[a]))u.push(n[a]),o=!0;else if(!o)u.push(n[a]);else break;n=n.slice(a);let c=u.join(`\n`),p=c.replace(this.rules.other.blockquoteSetextReplace,`\n    $1`).replace(this.rules.other.blockquoteSetextReplace2,\"\");s=s?`${s}\n${c}`:c,r=r?`${r}\n${p}`:p;let k=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(p,i,!0),this.lexer.state.top=k,n.length===0)break;let h=i.at(-1);if(h?.type===\"code\")break;if(h?.type===\"blockquote\"){let R=h,f=R.raw+`\n`+n.join(`\n`),S=this.blockquote(f);i[i.length-1]=S,s=s.substring(0,s.length-R.raw.length)+S.raw,r=r.substring(0,r.length-R.text.length)+S.text;break}else if(h?.type===\"list\"){let R=h,f=R.raw+`\n`+n.join(`\n`),S=this.list(f);i[i.length-1]=S,s=s.substring(0,s.length-h.raw.length)+S.raw,r=r.substring(0,r.length-R.raw.length)+S.raw,n=f.substring(i.at(-1).raw.length).split(`\n`);continue}}return{type:\"blockquote\",raw:s,tokens:i,text:r}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),s=n.length>1,r={type:\"list\",raw:\"\",ordered:s,start:s?+n.slice(0,-1):\"\",loose:!1,items:[]};n=s?`\\\\d{1,9}\\\\${n.slice(-1)}`:`\\\\${n}`,this.options.pedantic&&(n=s?n:\"[*+-]\");let i=this.rules.other.listItemRegex(n),o=!1;for(;e;){let a=!1,c=\"\",p=\"\";if(!(t=i.exec(e))||this.rules.block.hr.test(e))break;c=t[0],e=e.substring(c.length);let k=me(t[2].split(`\n`,1)[0],t[1].length),h=e.split(`\n`,1)[0],R=!k.trim(),f=0;if(this.options.pedantic?(f=2,p=k.trimStart()):R?f=t[1].length+1:(f=k.search(this.rules.other.nonSpaceChar),f=f>4?1:f,p=k.slice(f),f+=t[1].length),R&&this.rules.other.blankLine.test(h)&&(c+=h+`\n`,e=e.substring(h.length+1),a=!0),!a){let S=this.rules.other.nextBulletRegex(f),te=this.rules.other.hrRegex(f),ne=this.rules.other.fencesBeginRegex(f),re=this.rules.other.headingBeginRegex(f),be=this.rules.other.htmlBeginRegex(f),Re=this.rules.other.blockquoteBeginRegex(f);for(;e;){let G=e.split(`\n`,1)[0],C;if(h=G,this.options.pedantic?(h=h.replace(this.rules.other.listReplaceNesting,\"  \"),C=h):C=h.replace(this.rules.other.tabCharGlobal,\"    \"),ne.test(h)||re.test(h)||be.test(h)||Re.test(h)||S.test(h)||te.test(h))break;if(C.search(this.rules.other.nonSpaceChar)>=f||!h.trim())p+=`\n`+C.slice(f);else{if(R||k.replace(this.rules.other.tabCharGlobal,\"    \").search(this.rules.other.nonSpaceChar)>=4||ne.test(k)||re.test(k)||te.test(k))break;p+=`\n`+h}R=!h.trim(),c+=G+`\n`,e=e.substring(G.length+1),k=C.slice(f)}}r.loose||(o?r.loose=!0:this.rules.other.doubleBlankLine.test(c)&&(o=!0)),r.items.push({type:\"list_item\",raw:c,task:!!this.options.gfm&&this.rules.other.listIsTask.test(p),loose:!1,text:p,tokens:[]}),r.raw+=c}let u=r.items.at(-1);if(u)u.raw=u.raw.trimEnd(),u.text=u.text.trimEnd();else return;r.raw=r.raw.trimEnd();for(let a of r.items){this.lexer.state.top=!1,a.tokens=this.lexer.blockTokens(a.text,[]);let c=a.tokens[0];if(a.task&&(c?.type===\"text\"||c?.type===\"paragraph\")){a.text=a.text.replace(this.rules.other.listReplaceTask,\"\"),c.raw=c.raw.replace(this.rules.other.listReplaceTask,\"\"),c.text=c.text.replace(this.rules.other.listReplaceTask,\"\");for(let k=this.lexer.inlineQueue.length-1;k>=0;k--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[k].src)){this.lexer.inlineQueue[k].src=this.lexer.inlineQueue[k].src.replace(this.rules.other.listReplaceTask,\"\");break}let p=this.rules.other.listTaskCheckbox.exec(a.raw);if(p){let k={type:\"checkbox\",raw:p[0]+\" \",checked:p[0]!==\"[ ]\"};a.checked=k.checked,r.loose?a.tokens[0]&&[\"paragraph\",\"text\"].includes(a.tokens[0].type)&&\"tokens\"in a.tokens[0]&&a.tokens[0].tokens?(a.tokens[0].raw=k.raw+a.tokens[0].raw,a.tokens[0].text=k.raw+a.tokens[0].text,a.tokens[0].tokens.unshift(k)):a.tokens.unshift({type:\"paragraph\",raw:k.raw,text:k.raw,tokens:[k]}):a.tokens.unshift(k)}}else a.task&&(a.task=!1);if(!r.loose){let p=a.tokens.filter(h=>h.type===\"space\"),k=p.length>0&&p.some(h=>this.rules.other.anyLine.test(h.raw));r.loose=k}}if(r.loose)for(let a of r.items){a.loose=!0;for(let c of a.tokens)c.type===\"text\"&&(c.type=\"paragraph\")}return r}}html(e){let t=this.rules.block.html.exec(e);if(t){let n=ee(t[0]);return{type:\"html\",block:!0,raw:n,pre:t[1]===\"pre\"||t[1]===\"script\"||t[1]===\"style\",text:n}}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal,\" \"),s=t[2]?t[2].replace(this.rules.other.hrefBrackets,\"$1\").replace(this.rules.inline.anyPunctuation,\"$1\"):\"\",r=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],`\n`),href:s,title:r}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=Y(t[1]),s=t[2].replace(this.rules.other.tableAlignChars,\"\").split(\"|\"),r=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,\"\").split(`\n`):[],i={type:\"table\",raw:$(t[0],`\n`),header:[],align:[],rows:[]};if(n.length===s.length){for(let o of s)this.rules.other.tableAlignRight.test(o)?i.align.push(\"right\"):this.rules.other.tableAlignCenter.test(o)?i.align.push(\"center\"):this.rules.other.tableAlignLeft.test(o)?i.align.push(\"left\"):i.align.push(null);for(let o=0;o<n.length;o++)i.header.push({text:n[o],tokens:this.lexer.inline(n[o]),header:!0,align:i.align[o]});for(let o of r)i.rows.push(Y(o,i.header.length).map((u,a)=>({text:u,tokens:this.lexer.inline(u),header:!1,align:i.align[a]})));return i}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t){let n=t[1].trim();return{type:\"heading\",raw:$(t[0],`\n`),depth:t[2].charAt(0)===\"=\"?1:2,text:n,tokens:this.lexer.inline(n)}}}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 i=$(n.slice(0,-1),\"\\\\\");if((n.length-i.length)%2===0)return}else{let i=fe(t[2],\"()\");if(i===-2)return;if(i>-1){let u=(t[0].indexOf(\"!\")===0?5:4)+t[1].length+i;t[2]=t[2].substring(0,i),t[0]=t[0].substring(0,u).trim(),t[3]=\"\"}}let s=t[2],r=\"\";if(this.options.pedantic){let i=this.rules.other.pedanticHrefTitle.exec(s);i&&(s=i[1],r=i[3])}else r=t[3]?t[3].slice(1,-1):\"\";return s=s.trim(),this.rules.other.startAngleBracket.test(s)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?s=s.slice(1):s=s.slice(1,-1)),xe(t,{href:s&&s.replace(this.rules.inline.anyPunctuation,\"$1\"),title:r&&r.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 s=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal,\" \"),r=t[s.toLowerCase()];if(!r){let i=n[0].charAt(0);return{type:\"text\",raw:i,text:i}}return xe(n,r,n[0],this.lexer,this.rules)}}emStrong(e,t,n=\"\"){let s=this.rules.inline.emStrongLDelim.exec(e);if(!s||!s[1]&&!s[2]&&!s[3]&&!s[4]||s[4]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(s[1]||s[3]||\"\")||!n||this.rules.inline.punctuation.exec(n)){let i=[...s[0]].length-1,o,u,a=i,c=0,p=s[0][0]===\"*\"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(p.lastIndex=0,t=t.slice(-1*e.length+i);(s=p.exec(t))!==null;){if(o=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!o)continue;if(u=[...o].length,s[3]||s[4]){a+=u;continue}else if((s[5]||s[6])&&i%3&&!((i+u)%3)){c+=u;continue}if(a-=u,a>0)continue;u=Math.min(u,u+a+c);let k=[...s[0]][0].length,h=e.slice(0,i+s.index+k+u);if(Math.min(i,u)%2){let f=h.slice(1,-1);return{type:\"em\",raw:h,text:f,tokens:this.lexer.inlineTokens(f)}}let R=h.slice(2,-2);return{type:\"strong\",raw:h,text:R,tokens:this.lexer.inlineTokens(R)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal,\" \"),s=this.rules.other.nonSpaceChar.test(n),r=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return s&&r&&(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,t,n=\"\"){let s=this.rules.inline.delLDelim.exec(e);if(!s)return;if(!(s[1]||\"\")||!n||this.rules.inline.punctuation.exec(n)){let i=[...s[0]].length-1,o,u,a=i,c=this.rules.inline.delRDelim;for(c.lastIndex=0,t=t.slice(-1*e.length+i);(s=c.exec(t))!==null;){if(o=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!o||(u=[...o].length,u!==i))continue;if(s[3]||s[4]){a+=u;continue}if(a-=u,a>0)continue;u=Math.min(u,u+a);let p=[...s[0]][0].length,k=e.slice(0,i+s.index+p+u),h=k.slice(i,-i);return{type:\"del\",raw:k,text:h,tokens:this.lexer.inlineTokens(h)}}}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,s;return t[2]===\"@\"?(n=t[1],s=\"mailto:\"+n):(n=t[1],s=n),{type:\"link\",raw:t[0],text:n,href:s,tokens:[{type:\"text\",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,s;if(t[2]===\"@\")n=t[0],s=\"mailto:\"+n;else{let r;do r=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??\"\";while(r!==t[0]);n=t[0],t[1]===\"www.\"?s=\"http://\"+t[0]:s=t[0]}return{type:\"link\",raw:t[0],text:n,href:s,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 x=class l{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||T,this.options.tokenizer=this.options.tokenizer||new w,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:D.normal,inline:A.normal};this.options.pedantic?(t.block=D.pedantic,t.inline=A.pedantic):this.options.gfm&&(t.block=D.gfm,this.options.breaks?t.inline=A.breaks:t.inline=A.gfm),this.tokenizer.rules=t}static get rules(){return{block:D,inline:A}}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){this.tokenizer.lexer=this,this.options.pedantic&&(e=e.replace(m.tabCharGlobal,\"    \").replace(m.spaceLine,\"\"));let s=1/0;for(;e;){if(e.length<s)s=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}let r;if(this.options.extensions?.block?.some(o=>(r=o.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 o=t.at(-1);r.raw.length===1&&o!==void 0?o.raw+=`\n`:t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let o=t.at(-1);o?.type===\"paragraph\"||o?.type===\"text\"?(o.raw+=(o.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,o.text+=`\n`+r.text,this.inlineQueue.at(-1).src=o.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 o=t.at(-1);o?.type===\"paragraph\"||o?.type===\"text\"?(o.raw+=(o.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,o.text+=`\n`+r.raw,this.inlineQueue.at(-1).src=o.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title},t.push(r));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 o=1/0,u=e.slice(1),a;this.options.extensions.startBlock.forEach(c=>{a=c.call({lexer:this},u),typeof a==\"number\"&&a>=0&&(o=Math.min(o,a))}),o<1/0&&o>=0&&(i=e.substring(0,o+1))}if(this.state.top&&(r=this.tokenizer.paragraph(i))){let o=t.at(-1);n&&o?.type===\"paragraph\"?(o.raw+=(o.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,o.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=o.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 o=t.at(-1);o?.type===\"text\"?(o.raw+=(o.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,o.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=o.text):t.push(r);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){this.tokenizer.lexer=this;let n=e,s=null;if(this.tokens.links){let a=Object.keys(this.tokens.links);if(a.length>0)for(;(s=this.tokenizer.rules.inline.reflinkSearch.exec(n))!==null;)a.includes(s[0].slice(s[0].lastIndexOf(\"[\")+1,-1))&&(n=n.slice(0,s.index)+\"[\"+\"a\".repeat(s[0].length-2)+\"]\"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(s=this.tokenizer.rules.inline.anyPunctuation.exec(n))!==null;)n=n.slice(0,s.index)+\"++\"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let r;for(;(s=this.tokenizer.rules.inline.blockSkip.exec(n))!==null;)r=s[2]?s[2].length:0,n=n.slice(0,s.index+r)+\"[\"+\"a\".repeat(s[0].length-r-2)+\"]\"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let i=!1,o=\"\",u=1/0;for(;e;){if(e.length<u)u=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}i||(o=\"\"),i=!1;let a;if(this.options.extensions?.inline?.some(p=>(a=p.call({lexer:this},e,t))?(e=e.substring(a.raw.length),t.push(a),!0):!1))continue;if(a=this.tokenizer.escape(e)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.tag(e)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.link(e)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(a.raw.length);let p=t.at(-1);a.type===\"text\"&&p?.type===\"text\"?(p.raw+=a.raw,p.text+=a.text):t.push(a);continue}if(a=this.tokenizer.emStrong(e,n,o)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.codespan(e)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.br(e)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.del(e,n,o)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.autolink(e)){e=e.substring(a.raw.length),t.push(a);continue}if(!this.state.inLink&&(a=this.tokenizer.url(e))){e=e.substring(a.raw.length),t.push(a);continue}let c=e;if(this.options.extensions?.startInline){let p=1/0,k=e.slice(1),h;this.options.extensions.startInline.forEach(R=>{h=R.call({lexer:this},k),typeof h==\"number\"&&h>=0&&(p=Math.min(p,h))}),p<1/0&&p>=0&&(c=e.substring(0,p+1))}if(a=this.tokenizer.inlineText(c)){e=e.substring(a.raw.length),a.raw.slice(-1)!==\"_\"&&(o=a.raw.slice(-1)),i=!0;let p=t.at(-1);p?.type===\"text\"?(p.raw+=a.raw,p.text+=a.text):t.push(a);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return t}infiniteLoopError(e){let t=\"Infinite loop on byte: \"+e;if(this.options.silent)console.error(t);else throw new Error(t)}};var y=class{options;parser;constructor(e){this.options=e||T}space(e){return\"\"}code({text:e,lang:t,escaped:n}){let s=(t||\"\").match(m.notSpaceStart)?.[0],r=e.replace(m.endingNewline,\"\")+`\n`;return s?'<pre><code class=\"language-'+O(s)+'\">'+(n?r:O(r,!0))+`</code></pre>\n`:\"<pre><code>\"+(n?r:O(r,!0))+`</code></pre>\n`}blockquote({tokens:e}){return`<blockquote>\n${this.parser.parse(e)}</blockquote>\n`}html({text:e}){return e}def(e){return\"\"}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,s=\"\";for(let o=0;o<e.items.length;o++){let u=e.items[o];s+=this.listitem(u)}let r=t?\"ol\":\"ul\",i=t&&n!==1?' start=\"'+n+'\"':\"\";return\"<\"+r+i+`>\n`+s+\"</\"+r+`>\n`}listitem(e){return`<li>${this.parser.parse(e.tokens)}</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 r=0;r<e.header.length;r++)n+=this.tablecell(e.header[r]);t+=this.tablerow({text:n});let s=\"\";for(let r=0;r<e.rows.length;r++){let i=e.rows[r];n=\"\";for(let o=0;o<i.length;o++)n+=this.tablecell(i[o]);s+=this.tablerow({text:n})}return s&&(s=`<tbody>${s}</tbody>`),`<table>\n<thead>\n`+t+`</thead>\n`+s+`</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>${O(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 s=this.parser.parseInline(n),r=V(e);if(r===null)return s;e=r;let i='<a href=\"'+e+'\"';return t&&(i+=' title=\"'+O(t)+'\"'),i+=\">\"+s+\"</a>\",i}image({href:e,title:t,text:n,tokens:s}){s&&(n=this.parser.parseInline(s,this.parser.textRenderer));let r=V(e);if(r===null)return O(n);e=r;let i=`<img src=\"${e}\" alt=\"${O(n)}\"`;return t&&(i+=` title=\"${O(t)}\"`),i+=\">\",i}text(e){return\"tokens\"in e&&e.tokens?this.parser.parseInline(e.tokens):\"escaped\"in e&&e.escaped?e.text:O(e.text)}};var L=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\"\"}checkbox({raw:e}){return e}};var b=class l{options;renderer;textRenderer;constructor(e){this.options=e||T,this.options.renderer=this.options.renderer||new y,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new L}static parse(e,t){return new l(t).parse(e)}static parseInline(e,t){return new l(t).parseInline(e)}parse(e){this.renderer.parser=this;let t=\"\";for(let n=0;n<e.length;n++){let s=e[n];if(this.options.extensions?.renderers?.[s.type]){let i=s,o=this.options.extensions.renderers[i.type].call({parser:this},i);if(o!==!1||![\"space\",\"hr\",\"heading\",\"code\",\"table\",\"blockquote\",\"list\",\"html\",\"def\",\"paragraph\",\"text\"].includes(i.type)){t+=o||\"\";continue}}let r=s;switch(r.type){case\"space\":{t+=this.renderer.space(r);break}case\"hr\":{t+=this.renderer.hr(r);break}case\"heading\":{t+=this.renderer.heading(r);break}case\"code\":{t+=this.renderer.code(r);break}case\"table\":{t+=this.renderer.table(r);break}case\"blockquote\":{t+=this.renderer.blockquote(r);break}case\"list\":{t+=this.renderer.list(r);break}case\"checkbox\":{t+=this.renderer.checkbox(r);break}case\"html\":{t+=this.renderer.html(r);break}case\"def\":{t+=this.renderer.def(r);break}case\"paragraph\":{t+=this.renderer.paragraph(r);break}case\"text\":{t+=this.renderer.text(r);break}default:{let i='Token with \"'+r.type+'\" type was not found.';if(this.options.silent)return console.error(i),\"\";throw new Error(i)}}}return t}parseInline(e,t=this.renderer){this.renderer.parser=this;let n=\"\";for(let s=0;s<e.length;s++){let r=e[s];if(this.options.extensions?.renderers?.[r.type]){let o=this.options.extensions.renderers[r.type].call({parser:this},r);if(o!==!1||![\"escape\",\"html\",\"link\",\"image\",\"strong\",\"em\",\"codespan\",\"br\",\"del\",\"text\"].includes(r.type)){n+=o||\"\";continue}}let i=r;switch(i.type){case\"escape\":{n+=t.text(i);break}case\"html\":{n+=t.html(i);break}case\"link\":{n+=t.link(i);break}case\"image\":{n+=t.image(i);break}case\"checkbox\":{n+=t.checkbox(i);break}case\"strong\":{n+=t.strong(i);break}case\"em\":{n+=t.em(i);break}case\"codespan\":{n+=t.codespan(i);break}case\"br\":{n+=t.br(i);break}case\"del\":{n+=t.del(i);break}case\"text\":{n+=t.text(i);break}default:{let o='Token with \"'+i.type+'\" type was not found.';if(this.options.silent)return console.error(o),\"\";throw new Error(o)}}}return n}};var P=class{options;block;constructor(e){this.options=e||T}static passThroughHooks=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\",\"emStrongMask\"]);static passThroughHooksRespectAsync=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(e=this.block){return e?x.lex:x.lexInline}provideParser(e=this.block){return e?b.parse:b.parseInline}};var q=class{defaults=M();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=b;Renderer=y;TextRenderer=L;Lexer=x;Tokenizer=w;Hooks=P;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let s of e)switch(n=n.concat(t.call(this,s)),s.type){case\"table\":{let r=s;for(let i of r.header)n=n.concat(this.walkTokens(i.tokens,t));for(let i of r.rows)for(let o of i)n=n.concat(this.walkTokens(o.tokens,t));break}case\"list\":{let r=s;n=n.concat(this.walkTokens(r.items,t));break}default:{let r=s;this.defaults.extensions?.childTokens?.[r.type]?this.defaults.extensions.childTokens[r.type].forEach(i=>{let o=r[i].flat(1/0);n=n.concat(this.walkTokens(o,t))}):r.tokens&&(n=n.concat(this.walkTokens(r.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let s={...n};if(s.async=this.defaults.async||s.async||!1,n.extensions&&(n.extensions.forEach(r=>{if(!r.name)throw new Error(\"extension name required\");if(\"renderer\"in r){let i=t.renderers[r.name];i?t.renderers[r.name]=function(...o){let u=r.renderer.apply(this,o);return u===!1&&(u=i.apply(this,o)),u}:t.renderers[r.name]=r.renderer}if(\"tokenizer\"in r){if(!r.level||r.level!==\"block\"&&r.level!==\"inline\")throw new Error(\"extension level must be 'block' or 'inline'\");let i=t[r.level];i?i.unshift(r.tokenizer):t[r.level]=[r.tokenizer],r.start&&(r.level===\"block\"?t.startBlock?t.startBlock.push(r.start):t.startBlock=[r.start]:r.level===\"inline\"&&(t.startInline?t.startInline.push(r.start):t.startInline=[r.start]))}\"childTokens\"in r&&r.childTokens&&(t.childTokens[r.name]=r.childTokens)}),s.extensions=t),n.renderer){let r=this.defaults.renderer||new y(this.defaults);for(let i in n.renderer){if(!(i in r))throw new Error(`renderer '${i}' does not exist`);if([\"options\",\"parser\"].includes(i))continue;let o=i,u=n.renderer[o],a=r[o];r[o]=(...c)=>{let p=u.apply(r,c);return p===!1&&(p=a.apply(r,c)),p||\"\"}}s.renderer=r}if(n.tokenizer){let r=this.defaults.tokenizer||new w(this.defaults);for(let i in n.tokenizer){if(!(i in r))throw new Error(`tokenizer '${i}' does not exist`);if([\"options\",\"rules\",\"lexer\"].includes(i))continue;let o=i,u=n.tokenizer[o],a=r[o];r[o]=(...c)=>{let p=u.apply(r,c);return p===!1&&(p=a.apply(r,c)),p}}s.tokenizer=r}if(n.hooks){let r=this.defaults.hooks||new P;for(let i in n.hooks){if(!(i in r))throw new Error(`hook '${i}' does not exist`);if([\"options\",\"block\"].includes(i))continue;let o=i,u=n.hooks[o],a=r[o];P.passThroughHooks.has(i)?r[o]=c=>{if(this.defaults.async&&P.passThroughHooksRespectAsync.has(i))return(async()=>{let k=await u.call(r,c);return a.call(r,k)})();let p=u.call(r,c);return a.call(r,p)}:r[o]=(...c)=>{if(this.defaults.async)return(async()=>{let k=await u.apply(r,c);return k===!1&&(k=await a.apply(r,c)),k})();let p=u.apply(r,c);return p===!1&&(p=a.apply(r,c)),p}}s.hooks=r}if(n.walkTokens){let r=this.defaults.walkTokens,i=n.walkTokens;s.walkTokens=function(o){let u=[];return u.push(i.call(this,o)),r&&(u=u.concat(r.call(this,o))),u}}this.defaults={...this.defaults,...s}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return x.lex(e,t??this.defaults)}parser(e,t){return b.parse(e,t??this.defaults)}parseMarkdown(e){return(n,s)=>{let r={...s},i={...this.defaults,...r},o=this.onError(!!i.silent,!!i.async);if(this.defaults.async===!0&&r.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\"));if(i.hooks&&(i.hooks.options=i,i.hooks.block=e),i.async)return(async()=>{let u=i.hooks?await i.hooks.preprocess(n):n,c=await(i.hooks?await i.hooks.provideLexer(e):e?x.lex:x.lexInline)(u,i),p=i.hooks?await i.hooks.processAllTokens(c):c;i.walkTokens&&await Promise.all(this.walkTokens(p,i.walkTokens));let h=await(i.hooks?await i.hooks.provideParser(e):e?b.parse:b.parseInline)(p,i);return i.hooks?await i.hooks.postprocess(h):h})().catch(o);try{i.hooks&&(n=i.hooks.preprocess(n));let a=(i.hooks?i.hooks.provideLexer(e):e?x.lex:x.lexInline)(n,i);i.hooks&&(a=i.hooks.processAllTokens(a)),i.walkTokens&&this.walkTokens(a,i.walkTokens);let p=(i.hooks?i.hooks.provideParser(e):e?b.parse:b.parseInline)(a,i);return i.hooks&&(p=i.hooks.postprocess(p)),p}catch(u){return o(u)}}}onError(e,t){return n=>{if(n.message+=`\nPlease report this to https://github.com/markedjs/marked.`,e){let s=\"<p>An error occurred:</p><pre>\"+O(n.message+\"\",!0)+\"</pre>\";return t?Promise.resolve(s):s}if(t)return Promise.reject(n);throw n}}};var z=new q;function g(l,e){return z.parse(l,e)}g.options=g.setOptions=function(l){return z.setOptions(l),g.defaults=z.defaults,N(g.defaults),g};g.getDefaults=M;g.defaults=T;g.use=function(...l){return z.use(...l),g.defaults=z.defaults,N(g.defaults),g};g.walkTokens=function(l,e){return z.walkTokens(l,e)};g.parseInline=z.parseInline;g.Parser=b;g.parser=b.parse;g.Renderer=y;g.TextRenderer=L;g.Lexer=x;g.lexer=x.lex;g.Tokenizer=w;g.Hooks=P;g.parse=g;var Ft=g.options,Ut=g.setOptions,Kt=g.use,Wt=g.walkTokens,Xt=g.parseInline,Jt=g,Vt=b.parse,Yt=x.lex;export{P as Hooks,x as Lexer,q as Marked,b as Parser,y as Renderer,L as TextRenderer,w as Tokenizer,T as defaults,M as getDefaults,Yt as lexer,g as marked,Ft as options,Jt as parse,Xt as parseInline,Vt as parser,Ut as setOptions,Kt as use,Wt as walkTokens};\n//# sourceMappingURL=marked.esm.js.map\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    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  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","// Note: more types exposed from `index.d.ts`.\n// To do: refactor to include type parameters in JS.\nexport {parseEntities} from './lib/index.js'\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|YYYY|YY|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),Y=_.prototype;return O.prototype=Y,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){Y[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_customParseFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},t=/(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\\d/,r=/\\d\\d/,i=/\\d\\d?/,o=/\\d*[^-_:/,()\\s\\d]+/,s={},a=function(e){return(e=+e)+(e>68?1900:2e3)};var f=function(e){return function(t){this[e]=+t}},h=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:\"+\"===t[0]?-n:n}(e)}],u=function(e){var t=s[e];return t&&(t.indexOf?t:t.s.concat(t.f))},d=function(e,t){var n,r=s.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?\"pm\":\"PM\");return n},c={A:[o,function(e){this.afternoon=d(e,!1)}],a:[o,function(e){this.afternoon=d(e,!0)}],Q:[n,function(e){this.month=3*(e-1)+1}],S:[n,function(e){this.milliseconds=100*+e}],SS:[r,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[i,f(\"seconds\")],ss:[i,f(\"seconds\")],m:[i,f(\"minutes\")],mm:[i,f(\"minutes\")],H:[i,f(\"hours\")],h:[i,f(\"hours\")],HH:[i,f(\"hours\")],hh:[i,f(\"hours\")],D:[i,f(\"day\")],DD:[r,f(\"day\")],Do:[o,function(e){var t=s.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,\"\")===e&&(this.day=r)}],w:[i,f(\"week\")],ww:[r,f(\"week\")],M:[i,f(\"month\")],MM:[r,f(\"month\")],MMM:[o,function(e){var t=u(\"months\"),n=(u(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[o,function(e){var t=u(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,f(\"year\")],YY:[r,function(e){this.year=a(e)}],YYYY:[/\\d{4}/,f(\"year\")],Z:h,ZZ:h};function l(n){var r,i;r=n,i=s&&s.formats;for(var o=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=o.length,f=0;f<a;f+=1){var h=o[f],u=c[h],d=u&&u[0],l=u&&u[1];o[f]=l?{regex:d,parser:l}:h.replace(/^\\[|\\]$/g,\"\")}return function(e){for(var t={},n=0,r=0;n<a;n+=1){var i=o[n];if(\"string\"==typeof i)r+=i.length;else{var s=i.regex,f=i.parser,h=e.slice(r),u=s.exec(h)[0];f.call(t,u),e=e.replace(u,\"\")}}return function(e){var t=e.afternoon;if(void 0!==t){var n=e.hours;t?n<12&&(e.hours+=12):12===n&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,n){n.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(a=e.parseTwoDigitYear);var r=t.prototype,i=r.parse;r.parse=function(e){var t=e.date,r=e.utc,o=e.args;this.$u=r;var a=o[1];if(\"string\"==typeof a){var f=!0===o[2],h=!0===o[3],u=f||h,d=o[2];h&&(d=o[2]),s=this.$locale(),!f&&d&&(s=n.Ls[d]),this.$d=function(e,t,n,r){try{if([\"x\",\"X\"].indexOf(t)>-1)return new Date((\"X\"===t?1e3:1)*e);var i=l(t)(e),o=i.year,s=i.month,a=i.day,f=i.hours,h=i.minutes,u=i.seconds,d=i.milliseconds,c=i.zone,m=i.week,M=new Date,Y=a||(o||s?1:M.getDate()),p=o||M.getFullYear(),v=0;o&&!s||(v=s>0?s-1:M.getMonth());var D,w=f||0,g=h||0,y=u||0,L=d||0;return c?new Date(Date.UTC(p,v,Y,w,g,y,L+60*c.offset*1e3)):n?new Date(Date.UTC(p,v,Y,w,g,y,L)):(D=new Date(p,v,Y,w,g,y,L),m&&(D=r(D).week(m).toDate()),D)}catch(e){return new Date(\"\")}}(t,a,r,n),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date(\"\")),s={}}else if(a instanceof Array)for(var c=a.length,m=1;m<=c;m+=1){o[1]=a[m-1];var M=n.apply(this,o);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===c&&(this.$d=new Date(\"\"))}else i.call(this,e)}}}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_localizedFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"};return function(t,o,n){var r=o.prototype,i=r.format;n.en.formats=e,r.format=function(t){void 0===t&&(t=\"YYYY-MM-DDTHH:mm:ssZ\");var o=this.$locale().formats,n=function(t,o){return t.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var i=r&&r.toUpperCase();return n||o[r]||e[r]||o[i].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,o){return t||o.slice(1)}))}))}(t,void 0===o?{}:o);return i.call(this,n)}}}));","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_utc=i()}(this,(function(){\"use strict\";var t=\"minute\",i=/[+-]\\d\\d(?::?\\d\\d)?/g,e=/([+-]|\\d\\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var r=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),r.call(this,t)};var o=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else o.call(this)};var a=u.utcOffset;u.utcOffset=function(s,f){var n=this.$utils().u;if(n(s))return this.$u?0:n(this.$offset)?a.call(this):this.$offset;if(\"string\"==typeof s&&(s=function(t){void 0===t&&(t=\"\");var s=t.match(i);if(!s)return null;var f=(\"\"+s[0]).match(e)||[\"-\",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:\"+\"===n?u:-u}(s),null===s))return this;var u=Math.abs(s)<=16?60*s:s;if(0===u)return this.utc(f);var r=this.clone();if(f)return r.$offset=u,r.$u=!1,r;var o=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();return(r=this.local().add(u+o,t)).$offset=u,r.$x.$localOffset=o,r};var h=u.format;u.format=function(t){var i=t||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return\"s\"===t&&this.$offset?n(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)}}}));","/**\n * @import { DateTimeFieldNormalizedProps } from '$lib/types/private';\n * @import { DateTimeField } from '$lib/types/public';\n */\n\nconst TIMEZONE_ENUM = new Set(['local', 'utc']);\n/**\n * Cache normalized date-time field configurations by field config reference.\n * @type {WeakMap<DateTimeField, DateTimeFieldNormalizedProps>}\n */\nconst configCacheMap = new WeakMap();\n\n/**\n * Check if a timezone string is a custom IANA timezone (not a special value). No need to validate\n * the timezone here because that’s handled by `validateTimeZone` in the field parser, and this\n * function is only used to determine if the timezone should be passed to Day.js for\n * parsing/formatting.\n * @param {any} timeZone Timezone string to check.\n * @returns {timeZone is string} True if custom IANA timezone, false otherwise.\n */\nexport const isCustomTimeZone = (timeZone) =>\n  typeof timeZone === 'string' && !TIMEZONE_ENUM.has(timeZone);\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 cache = configCacheMap.get(fieldConfig);\n\n  if (cache) {\n    return cache;\n  }\n\n  const {\n    type = 'datetime-local',\n    min = undefined,\n    max = undefined,\n    step = undefined,\n    format,\n    date_format: dateFormat = undefined,\n    time_format: timeFormat = undefined,\n    picker_utc: pickerUTC = false,\n    input_timezone: inputTimeZone = 'local',\n    output_utc: outputUTC = false,\n  } = fieldConfig;\n\n  const normalizedInputTimeZone =\n    typeof inputTimeZone === 'string' && inputTimeZone !== 'any' ? inputTimeZone : 'local';\n\n  const dateFormatStr = typeof dateFormat === 'string' ? dateFormat : '';\n  const timeFormatStr = typeof timeFormat === 'string' ? timeFormat : '';\n  const dateOnly = type === 'date' || timeFormat === false;\n  const timeOnly = type === 'time' || dateFormat === false;\n  const defaultMax = dateOnly ? '9999-12-31' : timeOnly ? undefined : '9999-12-31T23:59';\n\n  const _inputTimeZone =\n    fieldConfig.input_timezone !== undefined\n      ? normalizedInputTimeZone\n      : pickerUTC\n        ? 'utc'\n        : 'local';\n\n  const normalizedConfig = /** @type {DateTimeFieldNormalizedProps} */ ({\n    type: dateOnly ? 'date' : timeOnly ? 'time' : 'datetime-local',\n    min: typeof min === 'string' && min ? min : undefined,\n    max: typeof max === 'string' && max ? max : defaultMax,\n    step:\n      (typeof step === 'number' && Number.isInteger(step) && step > 0) || step === 'any'\n        ? step\n        : undefined,\n    format: format || [dateFormatStr, timeFormatStr].join(' ').trim() || undefined,\n    dateOnly,\n    timeOnly,\n    inputTimeZone: _inputTimeZone,\n    outputUTC: fieldConfig.output_utc !== undefined ? outputUTC : pickerUTC,\n    utc: _inputTimeZone === 'utc',\n    singleCustomTimeZone: isCustomTimeZone(_inputTimeZone) ? _inputTimeZone : undefined,\n  });\n\n  configCacheMap.set(fieldConfig, normalizedConfig);\n\n  return normalizedConfig;\n};\n","import { truncate } from '@sveltia/utils/string';\nimport dayjs from 'dayjs';\nimport dayjsCustomParseFormat from 'dayjs/plugin/customParseFormat';\nimport dayjsLocalizedFormat from 'dayjs/plugin/localizedFormat';\nimport dayjsUTC from 'dayjs/plugin/utc';\n\nimport { slugify } from '$lib/services/common/slug';\nimport { parseDateTimeConfig } from '$lib/services/contents/fields/date-time/config';\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\ndayjs.extend(dayjsCustomParseFormat);\ndayjs.extend(dayjsLocalizedFormat);\ndayjs.extend(dayjsUTC);\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>.+?)')?\\)$/;\nexport const TRANSFORMATION_SPLIT_REGEX = /\\s*\\|\\s*/;\n\nconst DATE_ONLY_REGEX = /^\\d{4}-[01]\\d-[0-3]\\d$/;\nconst DATE_PART_REGEX = /T\\d{2}:\\d{2}(?::\\d{2})?(?:\\.\\d+)?Z$/;\n\n/**\n * Transform the input value to its uppercase string representation.\n * @internal\n * @param {any} value The value to be transformed to uppercase.\n * @returns {string} The uppercase string representation of the input value.\n */\nexport const applyUpperCaseTransformation = (value) => String(value).toUpperCase();\n\n/**\n * Transform the input value to a string and returns it in lowercase.\n * @internal\n * @param {any} value The value to be transformed to lowercase.\n * @returns {string} The lowercase string representation of the input value.\n */\nexport const 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 * @internal\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 */\nexport const 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(DATE_ONLY_REGEX)) ||\n    (dateOnly && !!sValue.match(DATE_PART_REGEX));\n\n  const date = (useUTC ? dayjs.utc : dayjs)(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 * @internal\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 */\nexport const 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 * @internal\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 */\nexport const 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 * @internal\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 */\nexport const 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 * @internal\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 * @param {string} [args.locale] BCP 47 language tag passed to the `slugify` transformation.\n * @returns {string} Transformed value.\n * @see https://decapcms.org/docs/summary-strings/\n * @see https://sveltiacms.app/en/docs/string-transformations\n */\nexport const applyTransformation = ({ fieldConfig, value, transformation, locale }) => {\n  if (transformation === 'upper') {\n    return applyUpperCaseTransformation(value);\n  }\n\n  if (transformation === 'lower') {\n    return applyLowerCaseTransformation(value);\n  }\n\n  if (transformation === 'slugify') {\n    return slugify(String(value), { locale });\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 * @param {string} [args.locale] BCP 47 language tag passed to the `slugify` transformation.\n * @returns {string} Transformed value.\n */\nexport const applyTransformations = ({ fieldConfig, value, transformations, locale }) => {\n  transformations.forEach((transformation) => {\n    value = applyTransformation({ fieldConfig, value, transformation, locale });\n  });\n\n  return value;\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, EntryFolderInfo, InternalEntryCollection } from '$lib/types/private';\n */\n\n/**\n * @type {Writable<boolean>}\n */\nexport const dataLoaded = writable(false);\n\n/**\n * @type {Writable<number | undefined>}\n */\nexport const dataLoadedProgress = writable();\n\n/**\n * @type {Writable<EntryFolderInfo[]>}\n */\nexport const allEntryFolders = writable([]);\n\n/**\n * @type {Writable<Entry[]>}\n */\nexport const allEntries = writable([]);\n\n/**\n * @type {Writable<Error[]>}\n */\nexport const entryParseErrors = writable([]);\n\n/**\n * Cache for {@link getEntryFoldersByPath} to avoid rescanning `allEntryFolders` on every call.\n * `fileMap`: maps each locale-specific file path to the matching `EntryFolderInfo` objects\n * (file/singleton collections). Provides O(1) lookup instead of O(n×m) linear scan.\n * `regexFolders`: entry collections that use `fullPathRegEx`; regex is pre-fetched once.\n */\nconst entryFoldersByPathCache = {\n  source: /** @type {EntryFolderInfo[] | undefined} */ (undefined),\n  /** @type {Map<string, EntryFolderInfo[]>} */\n  fileMap: new Map(),\n  /** @type {Array<[EntryFolderInfo, RegExp | undefined]>} */\n  regexFolders: [],\n};\n\n/**\n * Rebuild {@link entryFoldersByPathCache} when `allEntryFolders` changes.\n * @returns {typeof entryFoldersByPathCache} Cache object.\n */\nconst getEntryFolderCache = () => {\n  const _allEntryFolders = get(allEntryFolders);\n\n  if (_allEntryFolders === entryFoldersByPathCache.source) {\n    return entryFoldersByPathCache;\n  }\n\n  /** @type {Map<string, EntryFolderInfo[]>} */\n  const fileMap = new Map();\n  /** @type {Array<[EntryFolderInfo, RegExp | undefined]>} */\n  const regexFolders = [];\n\n  _allEntryFolders.forEach((folder) => {\n    if (folder.filePathMap) {\n      // Pre-index every locale-specific path so lookups are O(1).\n      // Deduplicate paths first: multiple locales can share the same physical file path, and\n      // we only want the folder to appear once per path in the results.\n      [...new Set(Object.values(folder.filePathMap))].forEach((filePath) => {\n        const arr = fileMap.get(filePath);\n\n        if (arr) {\n          arr.push(folder);\n        } else {\n          fileMap.set(filePath, [folder]);\n        }\n      });\n    } else {\n      // Pre-fetch the regex so we avoid calling getCollection() per path per call\n      regexFolders.push([\n        folder,\n        /** @type {InternalEntryCollection} */ (getCollection(folder.collectionName))?._file\n          ?.fullPathRegEx,\n      ]);\n    }\n  });\n\n  entryFoldersByPathCache.source = _allEntryFolders;\n  entryFoldersByPathCache.fileMap = fileMap;\n  entryFoldersByPathCache.regexFolders = regexFolders;\n\n  return entryFoldersByPathCache;\n};\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  const { fileMap, regexFolders } = getEntryFolderCache();\n\n  const results = [\n    ...(fileMap.get(path) ?? []),\n    ...regexFolders.filter(([, regex]) => regex?.test(path)).map(([folder]) => folder),\n  ];\n\n  return results.sort((a, b) => (b.folderPath ?? '').localeCompare(a.folderPath ?? ''));\n};\n","import { get } from 'svelte/store';\n\nimport { cmsConfig } from '$lib/services/config';\nimport { allEntries, allEntryFolders } from '$lib/services/contents';\nimport { getCollection, getValidCollections } from '$lib/services/contents/collection';\n\n/**\n * @import {\n * Entry,\n * InternalCmsConfig,\n * InternalCollection,\n * InternalCollectionFile,\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 * @see https://sveltiacms.app/en/docs/collections/files\n */\nexport const getCollectionFileEntry = (collectionName, fileName) => {\n  // Pre-find the valid file paths from `allEntryFolders` to avoid calling\n  // `getAssociatedCollections()` per entry, which iterates `allEntryFolders` internally for each\n  // entry.\n  const folderInfo = get(allEntryFolders).find(\n    ({ collectionName: cn, fileName: fn }) => cn === collectionName && fn === fileName,\n  );\n\n  if (!folderInfo?.filePathMap) {\n    return undefined;\n  }\n\n  const validPaths = new Set(Object.values(folderInfo.filePathMap));\n\n  return get(allEntries).find((entry) =>\n    Object.values(entry.locales).some(({ path }) => validPaths.has(path)),\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 {InternalCmsConfig} */ (get(cmsConfig));\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    const collection = getValidCollections({ collections }).find(\n      ({ name }) => name === collectionName,\n    );\n\n    if (collection && 'files' in collection) {\n      return collection.files.findIndex(({ name }) => name === fileName);\n    }\n  }\n\n  return -1;\n};\n","/**\n * Mapping of deprecation warnings that have been issued once. This prevents flooding the console\n * with repeated warnings.\n * @type {Record<string, boolean>}\n * @internal\n */\nexport const warnedOnceMap = {\n  slug_length: false,\n  yaml_quote: false,\n  uuid_read_only: false,\n  save_all_locales: false,\n  automatic_deployments: false,\n  multiple_folders_i18n_root: false,\n  omit_default_locale_from_filename: false,\n};\n\n/**\n * Deprecation warning messages.\n * @type {Record<string, string>}\n * @internal\n */\nexport const warningMessages = {\n  slug_length:\n    'The `slug_length` collection option is deprecated and will be removed in Sveltia CMS 1.0. ' +\n    'Use the global `slug.maxlength` option instead. ',\n  yaml_quote:\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. `yaml_quote: true` is equivalent to ' +\n    '`quote: double`. https://sveltiacms.app/en/docs/data-output#controlling-data-output',\n  uuid_read_only:\n    'The `read_only` option for the UUID field type is deprecated and will be removed in Sveltia ' +\n    'CMS 1.0. Use the `readonly` option instead.',\n  save_all_locales:\n    'The `save_all_locales` i18n option is deprecated and will be removed in Sveltia CMS 1.0. ' +\n    'Use the `initial_locales` option instead. `save_all_locales: false` is equivalent to ' +\n    '`initial_locales: all`. ' +\n    'https://sveltiacms.app/en/docs/i18n#disabling-non-default-locale-content',\n  automatic_deployments:\n    'The `automatic_deployments` backend option is deprecated and will be removed in Sveltia CMS ' +\n    '1.0. Use the `skip_ci` option instead. `automatic_deployments: false` is equivalent to ' +\n    '`skip_ci: true`, and `automatic_deployments: true` is equivalent to `skip_ci: false`. ' +\n    'https://sveltiacms.app/en/docs/deployments#disabling-automatic-deployments',\n  multiple_folders_i18n_root:\n    'The `multiple_folders_i18n_root` i18n structure is deprecated and will be removed in ' +\n    'Sveltia CMS 1.0. Use the `multiple_root_folders` structure instead. ' +\n    'https://sveltiacms.app/en/docs/i18n#multiple-root-folders',\n  omit_default_locale_from_filename:\n    'The `omit_default_locale_from_filename` i18n option is deprecated and will be removed in ' +\n    'Sveltia CMS 1.0. Use the `omit_default_locale_from_file_path` option instead. ' +\n    'https://sveltiacms.app/en/docs/i18n#managing-content-structure',\n};\n\n/**\n * Issue a deprecation warning if it hasn’t been issued yet.\n * @param {string} key Key of the warning to issue.\n * @param {string} [message] Custom message to display instead of the default one.\n */\nexport const warnDeprecation = (key, message) => {\n  // Skip during tests\n  if (import.meta.env.VITEST) {\n    return;\n  }\n\n  if (!warnedOnceMap[key]) {\n    // eslint-disable-next-line no-console\n    console.warn(message ?? warningMessages[key]);\n    warnedOnceMap[key] = true;\n  }\n};\n","/**\n * @import { FileExtension, FileFormat, FrontMatterFormat } from '$lib/types/public';\n */\n\n/**\n * Markdown file extensions that support front matter formats.\n * @type {string[]}\n */\nexport const MARKDOWN_EXTENSIONS = [\n  'markdown',\n  'md',\n  'mdown',\n  'mdwn',\n  'mdx',\n  'mkd',\n  'mkdn',\n  'html.md',\n];\n\n/**\n * Template engine extensions that support any front matter format.\n * @type {string[]}\n */\nexport const TEMPLATE_ENGINE_EXTENSIONS = ['astro', 'njk'];\n\n/**\n * Allowed extensions for the `frontmatter` auto-detect format.\n * @type {string[]}\n */\nexport const ALLOWED_FRONTMATTER_EXTENSIONS = [\n  ...MARKDOWN_EXTENSIONS,\n  ...TEMPLATE_ENGINE_EXTENSIONS,\n];\n\n/**\n * Map of supported file formats to their default extensions.\n * @type {Record<string, FileExtension>}\n */\nexport const FORMAT_EXTENSION_MAP = {\n  raw: 'txt',\n  yaml: 'yml',\n  yml: 'yml',\n  toml: 'toml',\n  json: 'json',\n};\n\n/**\n * Map of file extensions to their corresponding file formats for auto-detection.\n * @type {Record<string, FileFormat>}\n */\nexport const EXTENSION_FORMAT_MAP = {\n  yaml: 'yaml',\n  yml: 'yaml',\n  toml: 'toml',\n  json: 'json',\n};\n\n/**\n * Map of front matter formats to their default delimiters.\n * @type {Record<string, [string, string]>}\n */\nexport const FRONTMATTER_DELIMITER_MAP = {\n  'json-frontmatter': ['{', '}'],\n  'toml-frontmatter': ['+++', '+++'],\n  'yaml-frontmatter': ['---', '---'],\n};\n\n/**\n * File formats that use front matter syntax, excluding the `frontmatter` auto-detect format.\n * @type {FrontMatterFormat[]}\n */\nexport const FRONTMATTER_FORMATS = ['yaml-frontmatter', 'toml-frontmatter', 'json-frontmatter'];\n\n/**\n * List of file formats that use TOML syntax and thus require special handling, such as native date\n * objects instead of strings for date/datetime fields.\n * @type {FileFormat[]}\n */\nexport const TOML_FORMATS = ['toml', 'toml-frontmatter'];\n","import { locale as appLocale, isRTL } from '@sveltia/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 * Get the text direction for the given locale.\n * @param {InternalLocaleCode} locale Locale.\n * @returns {'ltr' | 'rtl' | 'auto'} Text direction. Returns `auto` if i18n is disabled (i.e.\n * `locale` is `_default`), `rtl` if the locale is a right-to-left language, and `ltr` otherwise.\n */\nexport const getDirection = (locale) =>\n  locale === '_default' ? 'auto' : isRTL(locale) ? 'rtl' : 'ltr';\n\n/**\n * Cache of {@link Intl.DisplayNames} instances, keyed by `displayLocale`.\n * @type {Map<string, Intl.DisplayNames>}\n */\nconst displayNamesCache = new Map();\n\n/**\n * Translate the given locale code in the application UI locale.\n * @param {InternalLocaleCode} locale Locale code like `en`.\n * @param {object} [options] Options.\n * @param {InternalLocaleCode} [options.displayLocale] Locale code to display the locale name. If\n * not given, use the current application locale. Default is `en`.\n * @returns {string | undefined} Locale label like `English`. If the locale is not valid, returns\n * `undefined`.\n */\nexport const getLocaleLabel = (\n  locale,\n  { displayLocale = getCanonicalLocale(appLocale.current ?? 'en') } = {},\n) => {\n  const canonicalLocale = getCanonicalLocale(locale);\n\n  if (!canonicalLocale) {\n    return undefined;\n  }\n\n  let formatter;\n\n  if (displayLocale) {\n    formatter = displayNamesCache.get(displayLocale);\n\n    if (!formatter) {\n      formatter = new Intl.DisplayNames(displayLocale, { type: 'language' });\n      displayNamesCache.set(displayLocale, formatter);\n    }\n  } else {\n    formatter = new Intl.DisplayNames(undefined, { type: 'language' });\n  }\n\n  try {\n    return formatter.of(canonicalLocale);\n  } catch (/** @type {any} */ ex) {\n    // eslint-disable-next-line no-console\n    console.error(ex);\n\n    return undefined;\n  }\n};\n\n/**\n * Cache of {@link Intl.ListFormat} instances, keyed by `\"${locale}|${serializedOptions}\"`.\n * @type {Map<string, Intl.ListFormat>}\n */\nconst listFormatterCache = new Map();\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  const effectiveOptions = /** @type {Intl.ListFormatOptions} */ ({\n    style: 'narrow',\n    type: 'conjunction',\n    ...options,\n  });\n\n  const cacheKey = `${locale}|${effectiveOptions.style}|${effectiveOptions.type}`;\n  let formatter = listFormatterCache.get(cacheKey);\n\n  if (!formatter) {\n    formatter = new Intl.ListFormat(getCanonicalLocale(locale), effectiveOptions);\n    listFormatterCache.set(cacheKey, formatter);\n  }\n\n  return formatter;\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, omitDefaultLocaleFromFilePath } = _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 (omitDefaultLocaleFromFilePath && locale === defaultLocale) {\n    path = path.replace(/{{locale}}[./]/, '');\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","import { getPathInfo } from '@sveltia/utils/file';\nimport { escapeRegExp, stripSlashes } from '@sveltia/utils/string';\n\nimport { ESCAPED_PLACEHOLDER_REGEX } from '$lib/services/common/template/constants';\nimport { warnDeprecation } from '$lib/services/config/deprecations';\nimport { isEntryCollection } from '$lib/services/contents/collection';\nimport { getIndexFile } from '$lib/services/contents/collection/entries/index-file';\nimport {\n  EXTENSION_FORMAT_MAP,\n  FORMAT_EXTENSION_MAP,\n  FRONTMATTER_DELIMITER_MAP,\n  MARKDOWN_EXTENSIONS,\n} from '$lib/services/contents/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 {Map<string, CustomFileFormat>}\n */\nexport const customFileFormatRegistry = new Map();\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 * @see https://sveltiacms.app/en/docs/collections/entries#file-format-and-extension\n */\nexport const detectFileExtension = ({ extension, format }) => {\n  const customExtension = format ? customFileFormatRegistry.get(format)?.extension : undefined;\n\n  if (customExtension) {\n    return customExtension;\n  }\n\n  if (extension) {\n    return extension;\n  }\n\n  if (format) {\n    return FORMAT_EXTENSION_MAP[format] ?? 'md';\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 * @see https://sveltiacms.app/en/docs/collections/entries#file-format-and-extension\n */\nexport const detectFileFormat = ({ extension, format }) => {\n  if (format) {\n    return format; // supported or custom format\n  }\n\n  if (MARKDOWN_EXTENSIONS.includes(extension)) {\n    return 'frontmatter'; // auto detect\n  }\n\n  return EXTENSION_FORMAT_MAP[extension] ?? 'yaml-frontmatter';\n};\n\n/**\n * Get the file path matcher pattern for the regex. The path pattern in the middle should match the\n * filename (without extension), possibly with the parent directory. If the collection’s `path` is\n * configured, use it to generate a pattern, so that unrelated files are excluded. Note that the\n * `path` may contain `{{variable}}` placeholders, which should be replaced with a non-greedy\n * wildcard that excludes slashes. It may also contain brackets, like `app/(pages)`, which are used\n * for route groups in frameworks like SvelteKit or Next.js, and should be matched literally.\n * @param {string} [subPath] Normalized `path` collection option.\n * @param {string} [indexFileName] File name for index file inclusion. Typically `_index`.\n * @returns {string} File path matcher pattern.\n * @see https://decapcms.org/docs/collection-folder/#folder-collections-path\n * @see https://sveltiacms.app/en/docs/collections/entries#managing-entry-file-paths\n */\nconst getFilePathMatcher = (subPath, indexFileName) => {\n  if (!subPath) {\n    return '(?<subPath>[^/]+?)';\n  }\n\n  const escapedSubPath = escapeRegExp(subPath).replace(ESCAPED_PLACEHOLDER_REGEX, '[^/]+?');\n  const indexFileAlternative = indexFileName ? `|${indexFileName}` : '';\n\n  return `(?<subPath>${escapedSubPath}${indexFileAlternative})`;\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    omitDefaultLocaleFromFilePath,\n    structureMap: { i18nMultiFile, i18nMultiFolder, i18nMultiRootFolder },\n  } = _i18n;\n\n  const localeMatcher = `(?<locale>${allLocales.join('|')})`;\n  const joinedNonDefaultLocales = allLocales.filter((locale) => locale !== defaultLocale).join('|');\n\n  const localeFolderMatcher = omitDefaultLocaleFromFilePath\n    ? `(?:(?<locale>${joinedNonDefaultLocales})\\\\/)?`\n    : `${localeMatcher}\\\\/`;\n\n  const localeFileMatcher = omitDefaultLocaleFromFilePath\n    ? `(?:\\\\.(?<locale>${joinedNonDefaultLocales}))?`\n    : `\\\\.${localeMatcher}`;\n\n  const pattern = [\n    '^',\n    i18nMultiRootFolder ? localeFolderMatcher : '',\n    basePath ? `${escapeRegExp(basePath)}\\\\/` : '',\n    i18nMultiFolder ? localeFolderMatcher : '',\n    getFilePathMatcher(subPath, indexFileName),\n    i18nMultiFile ? localeFileMatcher : '',\n    '\\\\.',\n    escapeRegExp(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 * @see https://sveltiacms.app/en/docs/collections/entries#front-matter-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  return FRONTMATTER_DELIMITER_MAP[format] ?? undefined;\n};\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    // @ts-ignore\n    folder,\n    // @ts-ignore\n    path: subPath,\n    // @ts-ignore\n    extension: _extension,\n    format: _format,\n    frontmatter_delimiter: _delimiter,\n    body_field: bodyField,\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  // @todo Remove the option prior to the 1.0 release.\n  if (yamlQuote !== undefined) {\n    warnDeprecation('yaml_quote');\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    bodyField: file?.body_field ?? bodyField,\n    yamlQuote: !!yamlQuote,\n  };\n};\n","import { isObject } from '@sveltia/utils/object';\nimport { get } from 'svelte/store';\n\nimport { cmsConfig } from '$lib/services/config';\nimport { warnDeprecation } from '$lib/services/config/deprecations';\nimport { isSingletonCollection } from '$lib/services/contents/collection';\n\n/**\n * @import {\n * I18nFileStructureMap,\n * InternalCmsConfig,\n * InternalI18nOptions,\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 * @internal\n * @todo Remove the legacy `MULTIPLE_FOLDERS_I18N_ROOT` structure prior to the 1.0 release.\n */\nexport const I18N_STRUCTURES = {\n  SINGLE_FILE: 'single_file',\n  SINGLE_FILE_DEFAULT_ROOT: 'single_file_default_root',\n  MULTIPLE_FILES: 'multiple_files',\n  MULTIPLE_FOLDERS: 'multiple_folders',\n  MULTIPLE_FOLDERS_I18N_ROOT: 'multiple_folders_i18n_root', // deprecated\n  MULTIPLE_ROOT_FOLDERS: 'multiple_root_folders', // new name\n};\n\n/**\n * Default locale identifier.\n * @internal\n */\nexport const DEFAULT_LOCALE_KEY = '_default';\n\n/**\n * Default canonical slug configuration.\n * @internal\n */\nexport const 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    i18nSingleFileDefaultRoot: false,\n    i18nMultiFile: false,\n    i18nMultiFolder: false,\n    i18nMultiRootFolder: false,\n  },\n  canonicalSlug: { ...DEFAULT_CANONICAL_SLUG },\n  omitDefaultLocaleFromFilePath: false,\n  omitDefaultLocaleFromPreviewPath: false,\n};\n\n/**\n * Merges i18n configuration from site, collection, and file levels.\n * @internal\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 */\nexport const mergeI18nConfigs = (collection, file) => {\n  const cmsConfigValue = /** @type {InternalCmsConfig} */ (get(cmsConfig));\n\n  if (!isObject(cmsConfigValue.i18n)) {\n    return undefined;\n  }\n\n  const config = structuredClone(cmsConfigValue.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 * @internal\n * @param {I18nFileStructure} defaultStructure The default structure from config.\n * @param {CollectionFile} [file] The collection file configuration.\n * @returns {I18nFileStructure} The determined structure.\n */\nexport const determineStructure = (defaultStructure, file) => {\n  if (!file) {\n    return defaultStructure;\n  }\n\n  if (file.file.includes('{{locale}}')) {\n    return I18N_STRUCTURES.MULTIPLE_FILES;\n  }\n\n  // For file collections without `{{locale}}`, preserve `single_file_default_root` if set;\n  // otherwise fall back to `single_file`.\n  if (defaultStructure === I18N_STRUCTURES.SINGLE_FILE_DEFAULT_ROOT) {\n    return I18N_STRUCTURES.SINGLE_FILE_DEFAULT_ROOT;\n  }\n\n  return I18N_STRUCTURES.SINGLE_FILE;\n};\n\n/**\n * Creates the structure map based on i18n status and structure.\n * @internal\n * @param {boolean} i18nEnabled Whether i18n is enabled.\n * @param {string} structure The current structure.\n * @returns {I18nFileStructureMap} The structure map.\n */\nexport const createStructureMap = (i18nEnabled, structure) => ({\n  i18nSingleFile: i18nEnabled && structure === I18N_STRUCTURES.SINGLE_FILE,\n  i18nSingleFileDefaultRoot: i18nEnabled && structure === I18N_STRUCTURES.SINGLE_FILE_DEFAULT_ROOT,\n  i18nMultiFile: i18nEnabled && structure === I18N_STRUCTURES.MULTIPLE_FILES,\n  i18nMultiFolder: i18nEnabled && structure === I18N_STRUCTURES.MULTIPLE_FOLDERS,\n  i18nMultiRootFolder:\n    i18nEnabled &&\n    (structure === I18N_STRUCTURES.MULTIPLE_FOLDERS_I18N_ROOT || // deprecated\n      structure === I18N_STRUCTURES.MULTIPLE_ROOT_FOLDERS), // new name\n});\n\n/**\n * Determines the default locale from the available locales.\n * @internal\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 */\nexport const 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 * @internal\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 */\nexport const 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 * Determines whether the default locale should be omitted from the file path.\n * @internal\n * @param {boolean} omitDefaultLocale The raw `omit_default_locale_from_file_path` config value.\n * @param {I18nFileStructureMap} structureMap The structure map.\n * @param {CollectionFile} [file] The collection file configuration.\n * @returns {boolean} Whether to omit the default locale from the file path.\n */\nexport const determineOmitDefaultLocale = (omitDefaultLocale, structureMap, file) => {\n  if (!omitDefaultLocale) {\n    return false;\n  }\n\n  if (file) {\n    return /{{locale}}[./]/.test(file.file);\n  }\n\n  return (\n    structureMap.i18nMultiFile || structureMap.i18nMultiFolder || structureMap.i18nMultiRootFolder\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 * @see https://sveltiacms.app/en/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: omitDefaultLocaleLegacy,\n    omit_default_locale_from_file_path: omitDefaultLocale = omitDefaultLocaleLegacy ?? false,\n    omit_default_locale_from_preview_path: omitDefaultLocaleFromPreviewPath = false,\n  } = config ?? {};\n\n  // @todo Remove the option prior to the 1.0 release.\n  if (config?.save_all_locales !== undefined) {\n    warnDeprecation('save_all_locales');\n  }\n\n  if (omitDefaultLocaleLegacy !== undefined) {\n    warnDeprecation('omit_default_locale_from_filename');\n  }\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 omitDefaultLocaleFromFilePath = determineOmitDefaultLocale(\n    omitDefaultLocale,\n    structureMap,\n    file,\n  );\n\n  if (structure === 'multiple_folders_i18n_root') {\n    warnDeprecation('multiple_folders_i18n_root');\n  }\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    omitDefaultLocaleFromFilePath,\n    omitDefaultLocaleFromPreviewPath,\n  };\n};\n","import { _ } from '@sveltia/i18n';\nimport { stripSlashes } from '@sveltia/utils/string';\nimport { get, writable } from 'svelte/store';\n\nimport { cmsConfig } 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 * InternalCollection,\n * InternalEntryCollection,\n * InternalFileCollection,\n * InternalI18nOptions,\n * } from '$lib/types/private';\n * @import {\n * Collection,\n * CollectionDivider,\n * CollectionFile,\n * EntryCollection,\n * FieldKeyPath,\n * FileCollection,\n * } 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 {collection is EntryCollection} Whether the collection is an entry collection.\n */\nexport const isEntryCollection = (collection) =>\n  // @ts-ignore\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 {collection is FileCollection} Whether the collection is a file collection.\n */\nexport const isFileCollection = (collection) =>\n  // @ts-ignore\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 {collection is FileCollection} 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 {collection is Collection} 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 CMS 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  /* v8 ignore next */\n  collections = get(cmsConfig)?.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  if (!('folder' in rawCollection)) {\n    return [];\n  }\n\n  const { fields, thumbnail = true } = rawCollection;\n\n  // Disable thumbnails\n  if (thumbnail === false) {\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: fieldType = 'string' }) => ['image', 'file'].includes(fieldType))\n      .map(({ name }) => name);\n  }\n\n  return [];\n};\n\n/**\n * Parse an entry collection and add additional properties.\n * @param {EntryCollection} rawCollection Raw collection definition.\n * @param {InternalI18nOptions} _i18n I18n options of the collection.\n * @returns {InternalEntryCollection} 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 {FileCollection} 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 {InternalFileCollection} 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 CMS 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(cmsConfig)?.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\n  // Ignore invalid collection\n  if (!rawCollection) {\n    collectionCacheMap.set(name, undefined);\n\n    return undefined;\n  }\n\n  const entryCollection = isEntryCollection(rawCollection) ? rawCollection : undefined;\n  const fileCollection = isFileCollection(rawCollection) ? rawCollection : undefined;\n\n  /* v8 ignore next 4 */\n  if (!entryCollection && !fileCollection) {\n    collectionCacheMap.set(name, undefined);\n\n    return undefined;\n  }\n\n  // Normalize folder/file paths by removing leading/trailing slashes\n  if (entryCollection) {\n    entryCollection.folder = stripSlashes(entryCollection.folder);\n  } else {\n    fileCollection?.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 = entryCollection\n    ? parseEntryCollection(entryCollection, _i18n)\n    : parseFileCollection(\n        /** @type {FileCollection} */ (fileCollection),\n        _i18n,\n        /** @type {FileCollection} */ (fileCollection).files,\n      );\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 _('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(cmsConfig)?.collections?.findIndex(({ name }) => name === collectionName) ?? -1;\n};\n","import { _ } from '@sveltia/i18n';\n\nimport { isEntryCollection } from '$lib/services/contents/collection';\n\n/**\n * @import { Entry, InternalCollection } from '$lib/types/private';\n * @import { Collection, CollectionIndexFile } from '$lib/types/public';\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://sveltiacms.app/en/docs/collections/entries#managing-hugo-s-special-index-file\n */\nexport const getIndexFile = (collection) => {\n  if (!isEntryCollection(collection)) {\n    return undefined;\n  }\n\n  const { index_file: indexFile } = collection;\n\n  if (!indexFile) {\n    return undefined;\n  }\n\n  const file = indexFile === true ? {} : indexFile;\n\n  return {\n    name: file.name ?? '_index',\n    label: file.label ?? _('index_file'),\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 * @import { BuiltInFieldType } from '$lib/types/public';\n */\n\n/**\n * List of built-in field types.\n * @type {BuiltInFieldType[]}\n */\nexport const BUILTIN_FIELD_TYPES = [\n  'boolean',\n  'code',\n  'color',\n  'compute',\n  'datetime',\n  'file',\n  'hidden',\n  'image',\n  'keyvalue',\n  'list',\n  'map',\n  'markdown',\n  'number',\n  'object',\n  'relation',\n  'richtext',\n  'select',\n  'string',\n  'text',\n  'uuid',\n];\n\n/**\n * List of field types that support a simple value: boolean, number or string.\n * @type {string[]}\n */\nexport const SIMPLE_VALUE_FIELD_TYPES = [\n  'boolean',\n  'color',\n  'compute',\n  'datetime',\n  'map',\n  'markdown',\n  'number',\n  'richtext',\n  'string',\n  'text',\n  'uuid',\n];\n\n/**\n * List of field types that support media files.\n * @type {string[]}\n */\nexport const MEDIA_FIELD_TYPES = ['file', 'image'];\n\n/**\n * List of field types that support the `multiple` option.\n * @type {string[]}\n */\nexport const MULTI_VALUE_FIELD_TYPES = [...MEDIA_FIELD_TYPES, 'relation', 'select'];\n\n/**\n * List of field types that support the `min` and `max` options.\n * @type {string[]}\n */\nexport const MIN_MAX_VALUE_FIELD_TYPES = [\n  ...MULTI_VALUE_FIELD_TYPES,\n  'datetime',\n  'keyvalue',\n  'list',\n  'number',\n];\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_timezone=e()}(this,(function(){\"use strict\";var t={year:0,month:1,day:2,hour:3,minute:4,second:5},e={};return function(n,i,o){var r,a=function(t,n,i){void 0===i&&(i={});var o=new Date(t),r=function(t,n){void 0===n&&(n={});var i=n.timeZoneName||\"short\",o=t+\"|\"+i,r=e[o];return r||(r=new Intl.DateTimeFormat(\"en-US\",{hour12:!1,timeZone:t,year:\"numeric\",month:\"2-digit\",day:\"2-digit\",hour:\"2-digit\",minute:\"2-digit\",second:\"2-digit\",timeZoneName:i}),e[o]=r),r}(n,i);return r.formatToParts(o)},u=function(e,n){for(var i=a(e,n),r=[],u=0;u<i.length;u+=1){var f=i[u],s=f.type,m=f.value,c=t[s];c>=0&&(r[c]=parseInt(m,10))}var d=r[3],l=24===d?0:d,h=r[0]+\"-\"+r[1]+\"-\"+r[2]+\" \"+l+\":\"+r[4]+\":\"+r[5]+\":000\",v=+e;return(o.utc(h).valueOf()-(v-=v%1e3))/6e4},f=i.prototype;f.tz=function(t,e){void 0===t&&(t=r);var n,i=this.utcOffset(),a=this.toDate(),u=a.toLocaleString(\"en-US\",{timeZone:t}),f=Math.round((a-new Date(u))/1e3/60),s=15*-Math.round(a.getTimezoneOffset()/15)-f;if(!Number(s))n=this.utcOffset(0,e);else if(n=o(u,{locale:this.$L}).$set(\"millisecond\",this.$ms).utcOffset(s,!0),e){var m=n.utcOffset();n=n.add(i-m,\"minute\")}return n.$x.$timezone=t,n},f.offsetName=function(t){var e=this.$x.$timezone||o.tz.guess(),n=a(this.valueOf(),e,{timeZoneName:t}).find((function(t){return\"timezonename\"===t.type.toLowerCase()}));return n&&n.value};var s=f.startOf;f.startOf=function(t,e){if(!this.$x||!this.$x.$timezone)return s.call(this,t,e);var n=o(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\"),{locale:this.$L});return s.call(n,t,e).tz(this.$x.$timezone,!0)},o.tz=function(t,e,n){var i=n&&e,a=n||e||r,f=u(+o(),a);if(\"string\"!=typeof t)return o(t).tz(a);var s=function(t,e,n){var i=t-60*e*1e3,o=u(i,n);if(e===o)return[i,e];var r=u(i-=60*(o-e)*1e3,n);return o===r?[i,o]:[t-60*Math.min(o,r)*1e3,Math.max(o,r)]}(o.utc(t,i).valueOf(),f,a),m=s[0],c=s[1],d=o(m).utcOffset(c);return d.$x.$timezone=a,d},o.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},o.tz.setDefault=function(t){r=t}}}));","/**\n * @import { LocaleCode } from '$lib/types/public';\n */\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\n/**\n * Format the date to a localized string.\n * @param {Date} date Date to format.\n * @param {LocaleCode | null} [locale] Optional locale to use for formatting.\n * @returns {string} Formatted date string.\n */\nexport const formatDate = (date, locale) =>\n  date.toLocaleString(locale ?? undefined, DATE_TIME_FORMAT_OPTIONS);\n","import { parseDateTimeConfig } from './config.js';\n\n/**\n * @import { DateTimeField } from '$lib/types/public';\n */\n\nconst TIMEZONE_OFFSET_REGEX =\n  /(?<hours>[+-]\\d{2})(?::?(?<minutes>\\d{2}))?(?::?(?<seconds>\\d{2}))?(?:\\.\\d+)?$|Z$/;\n\n/**\n * Format a string representing a number with leading zeros.\n * @param {string | undefined} str String to format.\n * @returns {string} Formatted string.\n */\nconst formatPart = (str) => String(Math.abs(Number(str))).padStart(2, '0');\n\n/**\n * Find the configured IANA timezone whose offset matches the stored value’s explicit offset. This\n * is used to restore the most appropriate timezone when the field allows multiple choices.\n * @param {string | undefined} currentValue Stored value.\n * @param {DateTimeField} fieldConfig Field config.\n * @returns {string | undefined} Matching timezone name, if any.\n */\nexport const getTimeZoneForStoredValue = (currentValue, fieldConfig) => {\n  if (typeof currentValue !== 'string' || !currentValue.trim()) {\n    return undefined;\n  }\n\n  const { inputTimeZone } = parseDateTimeConfig(fieldConfig);\n\n  if (inputTimeZone === 'local' || inputTimeZone === 'utc') {\n    return undefined;\n  }\n\n  const date = new Date(currentValue);\n\n  if (Number.isNaN(date.getTime())) {\n    return undefined;\n  }\n\n  const offsetMatch = currentValue.match(TIMEZONE_OFFSET_REGEX);\n\n  if (!offsetMatch?.groups) {\n    return undefined;\n  }\n\n  const { hours, minutes = '0' } = offsetMatch.groups;\n\n  const storedOffset =\n    offsetMatch[0] === 'Z'\n      ? '+00:00'\n      : `${hours.startsWith('-') ? '-' : '+'}${formatPart(hours)}:${formatPart(minutes)}`;\n\n  const offset =\n    new Intl.DateTimeFormat('en-US', { timeZone: inputTimeZone, timeZoneName: 'longOffset' })\n      .formatToParts(date)\n      .find((part) => part.type === 'timeZoneName')?.value ?? '';\n\n  return offset.replace('GMT', '') === storedOffset ? inputTimeZone : undefined;\n};\n\n/**\n * Resolve the initial timezone for the editor.\n * @param {string | undefined} currentValue Stored value.\n * @param {DateTimeField} fieldConfig Field configuration.\n * @returns {string | undefined} Initial timezone, if any.\n */\nexport const getInitialTimeZone = (currentValue, fieldConfig) => {\n  const storedTimeZone = getTimeZoneForStoredValue(currentValue, fieldConfig);\n\n  if (storedTimeZone) {\n    return storedTimeZone;\n  }\n\n  const { inputTimeZone, singleCustomTimeZone } = parseDateTimeConfig(fieldConfig);\n\n  if (singleCustomTimeZone) {\n    return singleCustomTimeZone;\n  }\n\n  try {\n    const browserTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n    if (inputTimeZone === 'local') {\n      return browserTimeZone;\n    }\n  } catch {\n    return inputTimeZone === 'local' ? '' : undefined;\n  }\n\n  return undefined;\n};\n\n/**\n * Get a formatted timezone label for display.\n * @param {string} timeZone IANA timezone identifier.\n * @param {Date} [date] Date to calculate offset from. Defaults to current date.\n * @returns {string} Formatted label like `(−05:00) New York`.\n */\nexport const getTimeZoneLabel = (timeZone, date = new Date()) => {\n  try {\n    const offset =\n      new Intl.DateTimeFormat('en-US', { timeZone, timeZoneName: 'longOffset' })\n        .formatToParts(date)\n        .find((part) => part.type === 'timeZoneName')?.value ?? '';\n\n    const cityName = timeZone.split('/').pop()?.replaceAll('_', ' ') ?? timeZone;\n\n    return `(${offset.replace('GMT', '')}) ${cityName}`;\n  } catch {\n    return timeZone;\n  }\n};\n","import { getDateTimeParts } from '@sveltia/utils/datetime';\nimport dayjs from 'dayjs';\nimport dayjsCustomParseFormat from 'dayjs/plugin/customParseFormat';\nimport dayjsLocalizedFormat from 'dayjs/plugin/localizedFormat';\nimport dayjsTimeZone from 'dayjs/plugin/timezone';\nimport dayjsUTC from 'dayjs/plugin/utc';\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\nimport { parseDateTimeConfig } from './config.js';\nimport { getTimeZoneForStoredValue } from './timezone.js';\n\n/**\n * @import { DateTimeFieldNormalizedProps, InternalLocaleCode } from '$lib/types/private';\n * @import { DateTimeField } from '$lib/types/public';\n */\n\ndayjs.extend(dayjsCustomParseFormat);\ndayjs.extend(dayjsLocalizedFormat);\ndayjs.extend(dayjsUTC);\ndayjs.extend(dayjsTimeZone);\n\nconst DATE_ONLY_MATCH_REGEX = /^(?<date>\\d{4}-[01]\\d-[0-3]\\d)\\b/;\nconst TIME_SUFFIX_MATCH_REGEX = /(?:^|T)(?<time>[0-2]\\d:[0-5]\\d)\\b/;\n\n/**\n * Check if the given value is a valid `Date` object.\n * @param {any} input Value to check.\n * @returns {input is Date} `true` if valid `Date`, `false` otherwise.\n */\nexport const isValidDate = (input) => input instanceof Date && !Number.isNaN(input.getTime());\n\n/**\n * Get the Day.js parser based on UTC setting.\n * @param {boolean} utc UTC flag.\n * @returns {dayjs.utc | dayjs} Day.js parser.\n */\nexport const getParser = (utc) => (utc ? dayjs.utc : dayjs);\n\n/**\n * Parse a value with Day.js, falling back to the default parser when the supplied format fails.\n * @param {object} args Arguments.\n * @param {string} args.value Value to parse.\n * @param {string} args.format Format string.\n * @param {boolean} args.parseAsUTC Whether to parse as UTC.\n * @returns {dayjs.Dayjs} Parsed dayjs instance.\n */\nconst parseWithFormatFallback = ({ value, format, parseAsUTC }) => {\n  const parse = getParser(parseAsUTC);\n  const parsed = parse(value, format);\n\n  return parsed.isValid() ? parsed : parse(value);\n};\n\n/**\n * Build the display-ready date/time strings from the current parts.\n * @param {object} args Arguments.\n * @param {Date} [args.date] Date to derive parts from.\n * @param {string} [args.timeZone] IANA timezone name.\n * @param {DateTimeFieldNormalizedProps['inputTimeZone']} [args.inputTimeZone] Input timezone\n * setting.\n * @param {boolean} [args.dateOnly] Whether the field is date-only.\n * @param {boolean} [args.timeOnly] Whether the field is time-only.\n * @param {boolean} [args.includeUTCSeconds] Whether to append UTC seconds/milliseconds.\n * @returns {string} Formatted display string.\n */\nconst formatDateTimeValue = ({\n  date,\n  timeZone,\n  inputTimeZone,\n  dateOnly,\n  timeOnly,\n  includeUTCSeconds = false,\n}) => {\n  const tz = timeZone || (inputTimeZone === 'utc' ? 'UTC' : undefined);\n  const { year, month, day, hour, minute } = getDateTimeParts({ date, timeZone: tz });\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 (includeUTCSeconds && tz === 'UTC') {\n    return `${dateStr}T${timeStr}:00.000Z`;\n  }\n\n  return `${dateStr}T${timeStr}`;\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 or `undefined` if invalid.\n */\nexport const getDate = (currentValue, fieldConfig) => {\n  const { format, timeOnly, utc, outputUTC } = parseDateTimeConfig(fieldConfig);\n  // Parse the stored value as UTC when: `input_timezone` is 'utc', OR `output_utc` is `true`. With\n  // a custom format, the stored string carries no timezone info, so we must specify UTC explicitly\n  // — otherwise the browser’s local offset is applied and the epoch is wrong.\n  const parseAsUTC = utc || outputUTC;\n\n  if (!currentValue) {\n    return undefined;\n  }\n\n  /** @type {Date | undefined} */\n  let date;\n\n  // If a format is specified, use Day.js to parse\n  if (format) {\n    const parsed = parseWithFormatFallback({ value: currentValue, format, parseAsUTC });\n\n    if (parsed.isValid()) {\n      return parsed.toDate();\n    }\n\n    // eslint-disable-next-line no-console\n    console.error('Invalid Date', currentValue);\n\n    return undefined;\n  }\n\n  if (timeOnly) {\n    // Use the current date\n    date = new Date(`${new Date().toJSON().split('T')[0]}T${currentValue}`);\n  } else {\n    date = new Date(currentValue);\n  }\n\n  if (isValidDate(date)) {\n    return date;\n  }\n\n  // eslint-disable-next-line no-console\n  console.error('Invalid Date', currentValue);\n\n  return undefined;\n};\n\n/**\n * Get the current date/time.\n * @param {DateTimeField} fieldConfig Field configuration.\n * @param {string} [timeZone] IANA timezone name.\n * @returns {string} Current date/time in the ISO 8601 format.\n */\nexport const getCurrentDateTime = (fieldConfig, timeZone) => {\n  const { dateOnly, timeOnly, inputTimeZone } = parseDateTimeConfig(fieldConfig);\n\n  return formatDateTimeValue({\n    timeZone,\n    inputTimeZone,\n    dateOnly,\n    timeOnly,\n    includeUTCSeconds: true,\n  });\n};\n\n/**\n * Get the final storable value from the input value.\n * @param {object} args Arguments.\n * @param {string | undefined} args.inputValue Raw value from the input field.\n * @param {string | undefined} args.currentValue Current value in the entry.\n * @param {DateTimeField} args.fieldConfig Field configuration.\n * @param {string | undefined} [args.timeZone] IANA timezone name.\n * @param {boolean} [args.outputUTC] Whether to output UTC time.\n * @returns {string | undefined} The final value.\n */\nexport const getCurrentValue = ({ inputValue, currentValue, fieldConfig, timeZone, outputUTC }) => {\n  const {\n    format,\n    dateOnly,\n    timeOnly,\n    inputTimeZone,\n    outputUTC: configOutputUTC,\n  } = parseDateTimeConfig(fieldConfig);\n\n  const _outputUTC = outputUTC ?? configOutputUTC;\n  const inputFormat = dateOnly ? 'YYYY-MM-DD' : timeOnly ? 'HH:mm' : 'YYYY-MM-DDTHH:mm';\n\n  const effectiveTimeZone =\n    inputTimeZone === 'utc'\n      ? 'UTC'\n      : inputTimeZone === 'local'\n        ? _outputUTC\n          ? timeZone\n          : undefined\n        : timeZone || inputTimeZone;\n\n  if (inputValue === '') {\n    return '';\n  }\n\n  if (!inputValue) {\n    return undefined;\n  }\n\n  if (format) {\n    // When the input is in UTC, parse as UTC; otherwise parse as local (timezone conversion happens\n    // below via `.tz()` or `.utc()`)\n    const parse = getParser(inputTimeZone === 'utc');\n    let parsed = parse(inputValue, inputFormat);\n\n    if (!parsed.isValid()) {\n      parsed = parse(inputValue);\n    }\n\n    // Return empty string for invalid dates to avoid storing 'Invalid Date'\n    if (!parsed.isValid()) {\n      return '';\n    }\n\n    // Apply IANA timezone context first, then optionally convert to UTC\n    if (effectiveTimeZone) {\n      parsed = parsed.tz(effectiveTimeZone, true);\n    }\n\n    if (_outputUTC && inputTimeZone !== 'utc') {\n      parsed = parsed.utc();\n    }\n\n    return parsed.format(format);\n  }\n\n  if (dateOnly) {\n    return inputValue;\n  }\n\n  const hasSeconds = /:\\d{2}$/.test(inputValue);\n  // Append seconds (and milliseconds) for data format & framework compatibility\n  const timeSuffix = currentValue ? `:00${currentValue.endsWith('.000') ? '.000' : ''}` : ':00';\n\n  if (timeOnly) {\n    return hasSeconds ? inputValue : `${inputValue}${timeSuffix}`;\n  }\n\n  if (inputTimeZone === 'utc') {\n    // Input is already in UTC; store with `Z` suffix (no conversion needed)\n    return dayjs.utc(inputValue).format();\n  }\n\n  if (_outputUTC) {\n    // Convert the local/custom-timezone input to UTC for storage.\n    const dt = timeZone ? dayjs.tz(inputValue, timeZone) : dayjs(inputValue);\n\n    return dt.utc().format();\n  }\n\n  if (timeZone && inputTimeZone !== 'local') {\n    // Preserve the configured custom timezone offset when output_utc is false.\n    return dayjs.tz(inputValue, timeZone).format('YYYY-MM-DDTHH:mm:ssZ');\n  }\n\n  return hasSeconds ? inputValue : `${inputValue}${timeSuffix}`;\n};\n\n/**\n * Get the input value given the current value.\n * @param {object} args Arguments.\n * @param {string | undefined} args.currentValue Value in the entry draft datastore.\n * @param {DateTimeField} args.fieldConfig Field configuration.\n * @param {string} [args.timeZone] IANA timezone name.\n * @returns {string | undefined} New value.\n */\nexport const getInputValue = ({ currentValue, fieldConfig, timeZone }) => {\n  const { dateOnly, timeOnly, inputTimeZone, format, outputUTC } = parseDateTimeConfig(fieldConfig);\n  const displayTimeZone = getTimeZoneForStoredValue(currentValue, fieldConfig) ?? timeZone;\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_ONLY_MATCH_REGEX)?.groups?.date\n    : timeOnly\n      ? // Match both `YYYY-MM-DDTHH:mm(:ss)` and `HH:mm(:ss)` formats\n        currentValue.match(TIME_SUFFIX_MATCH_REGEX)?.groups?.time\n      : undefined;\n\n  if (value) {\n    return value;\n  }\n\n  // `currentValue` is always truthy here (the empty-string guard above returned early). When a\n  // custom timezone is active with a format and `output_utc` is `false`, `getDate()` would parse\n  // the stored value as browser-local time (wrong epoch when local ≠ input timezone). Interpret it\n  // as being in the selected timezone using `.tz(tz, true)` instead. Note: the `output_utc: true`\n  // case is handled correctly by `getDate()` via `parseAsUTC`.\n  let dateForParts;\n\n  if (displayTimeZone && format && !outputUTC) {\n    try {\n      const parsed = dayjs(currentValue, format).tz(displayTimeZone, true);\n\n      // `.tz()` returns invalid (without throwing) in rare edge cases; fall through to `??=` below\n      dateForParts = parsed.isValid() ? parsed.toDate() : undefined;\n    } catch {\n      // `.tz()` can throw a RangeError for invalid dates in some dayjs versions\n    }\n\n    dateForParts ??= getDate(currentValue, fieldConfig);\n  } else {\n    dateForParts = getDate(currentValue, fieldConfig);\n  }\n\n  // If `getDate` returned `undefined` (parsing failed), return empty string\n  if (!dateForParts) {\n    return '';\n  }\n\n  return formatDateTimeValue({\n    date: dateForParts,\n    timeZone: displayTimeZone,\n    inputTimeZone,\n    dateOnly,\n    timeOnly,\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, singleCustomTimeZone } =\n    parseDateTimeConfig(fieldConfig);\n\n  const displayTimeZone = utc ? 'UTC' : singleCustomTimeZone;\n\n  if (typeof currentValue !== 'string' || !currentValue.trim()) {\n    return '';\n  }\n\n  if (format) {\n    const parsed = parseWithFormatFallback({ value: currentValue, format, parseAsUTC: utc });\n\n    if (parsed.isValid()) {\n      return parsed.format(format);\n    }\n\n    // eslint-disable-next-line no-console\n    console.error('Invalid Date', currentValue);\n\n    return '';\n  }\n\n  const date = getDate(currentValue, fieldConfig);\n  const canonicalLocale = getCanonicalLocale(locale);\n\n  if (!isValidDate(date)) {\n    return '';\n  }\n\n  if (timeOnly) {\n    return date.toLocaleTimeString(canonicalLocale, {\n      ...TIME_FORMAT_OPTIONS,\n      timeZone: displayTimeZone,\n    });\n  }\n\n  if (dateOnly) {\n    return date.toLocaleDateString(canonicalLocale, {\n      ...DATE_FORMAT_OPTIONS,\n      timeZone:\n        displayTimeZone ||\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: displayTimeZone,\n    timeZoneName: undefined,\n  });\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","/* 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   * In-flight promise that resolves to the opened database. Used to prevent concurrent callers from\n   * opening (and potentially version-bumping) the database in parallel.\n   * @type {Promise<IDBDatabase> | undefined}\n   */\n  #databasePromise;\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 `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, reject) => {\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          ? /** @type {IDBTransaction} */ (request.transaction).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      request.onerror = () => {\n        reject(request.error);\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   * @param {object} [options] Options.\n   * @param {IDBTransactionMode} [options.mode] Transaction mode. Default: `readonly`.\n   * @returns {Promise<any | void>} Result.\n   */\n  async #query(getRequest, { mode = 'readonly' } = {}) {\n    if (!this.#database) {\n      // Cache the in-flight promise so concurrent callers share a single DB open.\n      this.#databasePromise ??= this.#getDatabase();\n      this.#database = await this.#databasePromise;\n      this.#databasePromise = undefined;\n    }\n\n    const database = /** @type {IDBDatabase} */ (this.#database);\n    const storeName = this.#storeName;\n    const transaction = database.transaction(storeName, mode);\n    const request = getRequest(transaction.objectStore(storeName));\n\n    return new Promise((resolve, reject) => {\n      transaction.onerror = () => {\n        reject(transaction.error);\n      };\n\n      transaction.onabort = () => {\n        reject(transaction.error);\n      };\n\n      if (mode === 'readwrite') {\n        // For writes, resolve on transaction commit (not on request success) so the caller is only\n        // notified once the data is durably persisted.\n        /** @type {any} */\n        let result;\n\n        if (request) {\n          request.onsuccess = () => {\n            result = request.result;\n          };\n        }\n\n        transaction.oncomplete = () => {\n          resolve(result);\n        };\n      } else if (request) {\n        request.onsuccess = () => {\n          resolve(request.result);\n        };\n      } else {\n        /* v8 ignore next */\n        transaction.oncomplete = () => {\n          resolve(undefined);\n        };\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), { mode: 'readwrite' });\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), { mode: 'readwrite' });\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(\n      (store) => {\n        records.forEach(([key, value]) => {\n          store.put(value, key);\n        });\n      },\n      { mode: 'readwrite' },\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    return new Promise((resolve, reject) => {\n      this.#query((store) => {\n        const request = store.openCursor();\n        /** @type {[any, any][]} */\n        const entries = [];\n\n        request.onsuccess = () => {\n          const cursor = request.result;\n\n          if (cursor) {\n            entries.push([cursor.key, cursor.value]);\n            cursor.continue();\n          } else {\n            resolve(entries);\n          }\n        };\n      }).catch(reject);\n    });\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, reject) => {\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      }).catch(reject);\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), { mode: 'readwrite' });\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(\n      (store) => {\n        keys.forEach((key) => {\n          store.delete(key);\n        });\n      },\n      { mode: 'readwrite' },\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(), { mode: 'readwrite' });\n  }\n}\n","/**\n * Safely parse a JSON string returning `null` on failure, so a single corrupt or foreign-written\n * entry doesn’t break iteration over the whole storage.\n * @param {string} raw Raw stored value.\n * @returns {any} Parsed value, or `null` on failure.\n */\nconst safeParse = (raw) => {\n  try {\n    return JSON.parse(raw);\n  } catch {\n    return null;\n  }\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    // `JSON.stringify(undefined)` returns `undefined`, which would be coerced to the literal string\n    // \"undefined\" and later throw on parse. Treat `undefined` as a delete.\n    if (value === undefined) {\n      globalThis.localStorage.removeItem(key);\n\n      return;\n    }\n\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 ? safeParse(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. Entries with invalid JSON are returned as `null` instead of\n   * throwing, so third-party/foreign entries on the same origin don’t break iteration.\n   * @returns {Promise<*[]>} Values.\n   * @throws {DOMException} When storage access is denied.\n   */\n  static async values() {\n    return Object.values(globalThis.localStorage).map(safeParse);\n  }\n\n  /**\n   * Get a list of storage entries. Entries with invalid JSON are returned with a `null` value\n   * instead of throwing.\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, safeParse(value)]);\n  }\n}\n","export { default as IndexedDB } from './indexed-db.js';\nexport { default as LocalStorage } from './local-storage.js';\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.blockfact.facti': ['facti'],\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","import { isObject } from './object.js';\n\n/**\n * Check if the given input is an array of objects.\n * @param {any} input Input, probably an array.\n * @returns {input is Record<string, any>[]} 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","import { isTextFileType } from '@sveltia/utils/file';\nimport { isURL } from '@sveltia/utils/string';\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 media kinds that support thumbnails.\n * @type {AssetKind[]}\n */\nexport const THUMBNAIL_KINDS = ['image', 'video'];\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\nconst MEDIA_TYPE_REGEX = /^(?<type>image|video|audio)\\//;\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      if (isURL(source)) {\n        const { hostname, pathname } = new URL(source);\n\n        // Handle common image CDN hostnames, e.g. images.unsplash.com\n        if (hostname.startsWith('images.')) {\n          return 'image';\n        }\n\n        // Remove query string and hash\n        source = pathname;\n      }\n\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(MEDIA_TYPE_REGEX)?.groups?.type ??\n      (DOC_EXTENSION_REGEX.test(name) ? 'document' : 'other')\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 */\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//# sourceMappingURL=date.js.map","/*!\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//# sourceMappingURL=error.js.map","/*!\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 { TomlDate } from './date.js';\nimport { TomlError } from './error.js';\n// let CTRL_REGEX = /[\\x00-\\x08\\x0f-\\x1f\\x7f]/\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_]/;\nexport function parseString(str, ptr) {\n    let c = str[ptr++];\n    let first = c;\n    let isLiteral = c === \"'\";\n    let isMultiline = c === str[ptr] && c === str[ptr + 1];\n    if (isMultiline) {\n        // Trim initial newline\n        if (str[ptr += 2] === '\\n')\n            ptr++;\n        else if (str[ptr] === '\\r' && str[ptr + 1] === '\\n')\n            ptr += 2;\n    }\n    /*\n    The fast path does not seem to bring significant performance gains, so it's commented out.\n    Kept for reference and/or future fafoing.\n\n    Without: spec  5.08 µs/iter    3.88 ipc (99.44% cache)   23.90 branch misses   28.61k cycles    111.01k instructions\n             5MB   115.73 ms/iter  2.51 ipc (98.36% cache)   3.12M branch misses   619.30M cycles   1.56G instructions\n\n    With:    spec  5.09 µs/iter    3.90 ipc (99.46% cache)   24.42 branch misses   28.57k cycles    111.49k instructions\n             5MB   113.89 ms/iter  2.47 ipc (98.38% cache)   3.12M branch misses   611.94M cycles   1.51G instructions\n\n    if (c === \"'\") {\n        // Literal strings fast path - no transform needs to occur; just grab the str and that's it\n        let endPtr = str.indexOf(isMultiline ? \"'''\" : \"'\", ptr)\n        if (endPtr < 0) {\n            throw new TomlError(\"unfinished string literal\", { toml: str, ptr })\n        }\n\n        if (isMultiline) {\n            // If the string ends with 4-5 quotes, then the first 1-2 are part of the string\n            if (str[endPtr + 3] === \"'\") endPtr++\n            if (str[endPtr + 3] === \"'\") endPtr++\n        }\n\n        let string = str.slice(ptr, endPtr)\n        if (CTRL_REGEX.test(string)) {\n            let match = string.match(CTRL_REGEX)!\n            throw new TomlError('control characters are not allowed in strings', { toml: str, ptr: ptr + (match.index ?? 0) })\n        }\n        return [string, endPtr + (isMultiline ? 3 : 1)]\n    }\n    */\n    let parsed = '';\n    let sliceStart = ptr;\n    // states:\n    //   0 - decoding\n    //   1 - decoding escape\n    //   2 - whitespace escape (no newline encountered yet, must fail on non-whitespace)\n    //   3 - whitespace escape (newline encountered, allowed to transition back to normal decode)\n    let state = 0;\n    for (let i = ptr; i < str.length; i++) {\n        c = str[i];\n        // Deal with newlines first, since that simplifies control character checking and handling across all states\n        if (isMultiline && (c === '\\n' || (c === '\\r' && str[i + 1] === '\\n'))) {\n            state = state && 3;\n        }\n        // Control characters are banned in TOML, so we throw an error if we encounter them\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: i,\n            });\n        }\n        // The string might terminate while we're parsing through a newline escape.\n        // It must have encountered a newline; otherwise, it'll simply fail in another branch.\n        else if ((!state || state === 3) && c === first && (!isMultiline || (str[i + 1] === first && str[i + 2] === first))) {\n            if (isMultiline) {\n                // If the string ends with 4-5 quotes, then the first 1-2 are part of the string\n                if (str[i + 3] === first)\n                    i++;\n                if (str[i + 3] === first)\n                    i++;\n            }\n            return [\n                // If we're in a newline escape still, then there's nothing to add.\n                // Also try to avoid concat if there's nothing to add to parsed, or nothing has been added to parsed.\n                state ? parsed : parsed + str.slice(sliceStart, i),\n                i + (isMultiline ? 3 : 1),\n            ];\n        }\n        else if (!state) {\n            if (!isLiteral && c === '\\\\') {\n                parsed += str.slice(sliceStart, (sliceStart = i));\n                state = 1;\n            }\n        }\n        else if (state === 1) {\n            if (c === 'x' || c === 'u' || c === 'U') { // Unicode escape\n                let value = 0;\n                let len = c === 'x' ? 2 : c === 'u' ? 4 : 8;\n                for (let j = 0; j < len; j++, i++) {\n                    let hex = str.charCodeAt(i + 1);\n                    let digit = \n                    /* 0-9 */ hex >= 0x30 && hex <= 0x39 ? hex - 0x30 :\n                        /* A-F */ hex >= 0x41 && hex <= 0x46 ? hex - 0x41 + 10 :\n                            /* a-f */ hex >= 0x61 && hex <= 0x66 ? hex - 0x61 + 10 : -1;\n                    if (digit < 0)\n                        throw new TomlError('invalid non-hex character in unicode escape', { toml: str, ptr: i + 1 });\n                    value = (value << 4) | digit;\n                }\n                // Because JS does bitwise on signed 32bit integers, all 0xfzzzzzzz values are actually seen as negative\n                if (value < 0 || value > 0x10ffff || (value >= 0xd800 && value <= 0xdfff)) {\n                    throw new TomlError('invalid unicode escape', { toml: str, ptr: i });\n                }\n                parsed += String.fromCodePoint(value);\n                sliceStart = i + 1;\n                state = 0;\n            }\n            else if (c === ' ' || c === '\\t') { // If it was a newline, it'd have been handled earlier\n                state = 2;\n            }\n            else {\n                if (c === 'b')\n                    parsed += '\\b';\n                else if (c === 't')\n                    parsed += '\\t';\n                else if (c === 'n')\n                    parsed += '\\n';\n                else if (c === 'f')\n                    parsed += '\\f';\n                else if (c === 'r')\n                    parsed += '\\r';\n                else if (c === 'e')\n                    parsed += '\\x1b';\n                else if (c === '\"')\n                    parsed += '\"';\n                else if (c === '\\\\')\n                    parsed += '\\\\';\n                else\n                    throw new TomlError('unrecognized escape sequence', { toml: str, ptr: i });\n                sliceStart = i + 1;\n                state = 0;\n            }\n        }\n        else if (c !== ' ' && c !== '\\t') {\n            if (state === 2) {\n                throw new TomlError('invalid escape: only line-ending whitespace may be escaped', {\n                    toml: str,\n                    ptr: sliceStart,\n                });\n            }\n            // State cannot be zero, or we'd have branched earlier already.\n            // If it's a backslash, immediately transition to the escape state so it can be processed.\n            state = !isLiteral && c === '\\\\' ? 1 : 0;\n            sliceStart = i;\n        }\n    }\n    throw new TomlError('unfinished string', { toml: str, ptr });\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//# sourceMappingURL=primitive.js.map","/*!\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';\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 (1) {\n        while ((c = str[ptr]) === ' ' || c === '\\t' || (!banNewLines && (c === '\\n' || (c === '\\r' && str[ptr + 1] === '\\n'))))\n            ptr++;\n        // Tucking the return statement here would save 5 characters >:)\n        // But TypeScript fails to detect there is no way to exit the loop so it complains about the lack of final return\n        if (banComments || c !== '#')\n            break;\n        ptr = skipComment(str, ptr);\n    }\n    return ptr;\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}\n//# sourceMappingURL=util.js.map","/*!\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 { skipVoid, skipUntil, skipComment } from './util.js';\nimport { TomlError } from './error.js';\nfunction sliceAndTrimEndOf(str, startPtr, endPtr) {\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    return [value.trimEnd(), 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        if (end) {\n            endPtr = skipVoid(str, endPtr);\n            if (str[endPtr] === ',')\n                endPtr++;\n            else if (str[endPtr] !== end) {\n                throw new TomlError('expected comma or end of structure', {\n                    toml: str,\n                    ptr: endPtr,\n                });\n            }\n        }\n        return [value, endPtr];\n    }\n    if (c === '\"' || c === \"'\") {\n        let [parsed, endPtr] = parseString(str, ptr);\n        if (end) {\n            endPtr = skipVoid(str, endPtr);\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            if (str[endPtr] === ',')\n                endPtr++;\n        }\n        return [parsed, endPtr];\n    }\n    let endPtr = skipUntil(str, ptr, ',', end);\n    let slice = sliceAndTrimEndOf(str, ptr, endPtr - (str[endPtr - 1] === ',' ? 1 : 0));\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        if (str[endPtr] === ',')\n            endPtr++;\n    }\n    return [\n        parseValue(slice[0], str, ptr, integersAsBigInt),\n        endPtr,\n    ];\n}\n//# sourceMappingURL=extract.js.map","/*!\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 { 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 [part, eos] = parseString(str, ptr);\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(part);\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    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 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        }\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//# sourceMappingURL=struct.js.map","/*!\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 */ : 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//# sourceMappingURL=parse.js.map","/*!\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 (Number.isInteger(val) && (numberAsFloat || !Number.isSafeInteger(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 += `${res && '\\n'}[[${key}]]\\n`;\n        res += stringifyTable(0, array[i], key, depth, numberAsFloat);\n    }\n    return res;\n}\nfunction stringifyTable(tableKey, 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 += (tables && '\\n') + 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 += (tables && '\\n') + stringifyTable(tblKey, obj[k], tblKey, depth - 1, numberAsFloat);\n            }\n            else {\n                preamble += key;\n                preamble += ' = ';\n                preamble += stringifyValue(obj[k], type, depth, numberAsFloat);\n                preamble += '\\n';\n            }\n        }\n    }\n    if (tableKey && (preamble || !tables)) // Create table only if necessary\n        preamble = preamble ? `[${tableKey}]\\n${preamble}` : `[${tableKey}]`;\n    return preamble && tables\n        ? `${preamble}\\n${tables}`\n        : preamble || tables;\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    let str = stringifyTable(0, obj, '', maxDepth, numbersAsFloat);\n    if (str[str.length - 1] !== '\\n')\n        return str + '\\n';\n    return str;\n}\n//# sourceMappingURL=stringify.js.map","/*!\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 { parse } from './parse.js';\nimport { stringify } from './stringify.js';\nimport { TomlDate } from './date.js';\nimport { TomlError } from './error.js';\nexport default { parse, stringify, TomlDate, TomlError };\nexport { parse, stringify, TomlDate, TomlError };\n//# sourceMappingURL=index.js.map","import { toRaw } from '@sveltia/utils/object';\nimport { escapeRegExp } from '@sveltia/utils/string';\nimport { parse as libParseTOML } from 'smol-toml';\nimport { parse as libParseYAML } from 'yaml';\n\nimport { getCollection } from '$lib/services/contents/collection';\nimport { getCollectionFile } from '$lib/services/contents/collection/files';\nimport { FRONTMATTER_FORMATS } from '$lib/services/contents/file';\nimport {\n  customFileFormatRegistry,\n  getFrontMatterDelimiters,\n} from '$lib/services/contents/file/config';\nimport { getOrCreate } from '$lib/services/utils/cache';\n\n/**\n * @import {\n * BaseEntryListItem,\n * InternalCollection,\n * InternalCollectionFile,\n * InternalEntryCollection,\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(libParseTOML(str));\n\n/**\n * Parse a YAML document using a library.\n * @param {string} str YAML document.\n * @param {object} [options] Parsing options.\n * @returns {any} Parsed object.\n */\nexport const parseYAML = (str, options) => libParseYAML(str, options);\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 * Cache for front matter regexes, keyed by `${sd}|${ed}` (escaped delimiter pair). Avoids\n * rebuilding the same regex for every entry in a collection (all entries share identical\n * delimiters).\n * @type {Map<string, RegExp>}\n */\nconst frontMatterRegexCache = new Map();\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    format: _format,\n    fmDelimiters,\n    bodyField: { key: bodyKey = 'body', inline: bodyInline = false } = {},\n  } = (collectionFile ?? /** @type {InternalEntryCollection} */ (collection))._file;\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  const cacheKey = `${sd}|${ed}`;\n\n  // Front matter matching: allow an empty head\n  const regex = getOrCreate(\n    frontMatterRegexCache,\n    cacheKey,\n    () => new RegExp(`^${sd}\\\\n(?:(?<head>.*?)\\\\n)?${ed}$(?:\\\\n(?<body>.+))?`, 'ms'),\n  );\n\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 { [bodyKey]: 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 {\n    ...parsedHead,\n    ...(!bodyInline && !(parsedHead && bodyKey in parsedHead) ? { [bodyKey]: body } : {}),\n  };\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 {InternalEntryCollection} */ (collection);\n\n  const customParser = customFileFormatRegistry.get(format)?.parser;\n\n  if (customParser) {\n    return customParser(text);\n  }\n\n  // Raw format: return the content as-is\n  if (format === 'raw') {\n    return { body: 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 (FRONTMATTER_FORMATS.includes(/** @type {any} */ (format))) {\n      return parseFrontMatter({\n        collection,\n        collectionFile,\n        format: /** @type {FrontMatterFormat} */ (format),\n        text,\n      });\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 { getIndexFile } from '$lib/services/contents/collection/entries/index-file';\nimport { getCollectionFile } from '$lib/services/contents/collection/files';\nimport { hasRootField } from '$lib/services/contents/entry/fields';\nimport { parseEntryFile } from '$lib/services/contents/file/parse';\nimport { getOrCreate } from '$lib/services/utils/cache';\n\n/**\n * @import {\n * BaseEntryListItem,\n * Entry,\n * InternalCollection,\n * InternalEntryCollection,\n * InternalLocaleCode,\n * } from '$lib/types/private';\n * @import { Field, RawEntryContent } 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/** @type {Map<string, RegExp>} */\nconst slugRegexCache = new Map();\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 entry collection’s\n * subpath 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 * @see https://sveltiacms.app/en/docs/collections/entries\n */\nexport const getSlug = ({ subPath, subPathTemplate }) => {\n  if (subPathTemplate?.includes('{{slug}}')) {\n    const regex = getOrCreate(slugRegexCache, subPathTemplate, () => {\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        regexPattern += placeholder === '{{slug}}' ? '([^/]+)' : '[^/]+?';\n        remaining = remaining.substring(placeholderEnd + 2);\n      }\n\n      return new RegExp(`^${regexPattern}$`);\n    });\n\n    const [, slug] = subPath.match(regex) ?? [];\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 root field content.\n * @param {object} args Arguments.\n * @param {RawEntryContent} args.rawContent Raw content from the file.\n * @param {Field[]} args.fields Collection fields.\n * @param {boolean} args.i18nSingleFile Whether i18n single file structure is used.\n * @param {(value: any) => boolean} args.validate Function to validate content items.\n * @returns {RawEntryContent | undefined} Transformed content.\n */\nexport const transformRoot = ({ rawContent, fields, i18nSingleFile, validate }) => {\n  const fieldName = fields[0].name;\n\n  if (i18nSingleFile) {\n    if (!isObject(rawContent) || !Object.values(rawContent).every(validate)) {\n      return undefined;\n    }\n\n    return Object.fromEntries(\n      Object.entries(rawContent).map(([locale, content]) => [locale, { [fieldName]: content }]),\n    );\n  }\n\n  if (!validate(rawContent)) {\n    return undefined;\n  }\n\n  return { [fieldName]: rawContent };\n};\n\n/**\n * Normalize `single_file_default_root` content into the standard locale-keyed format used by the\n * `single_file` structure. Root-level entries (excluding non-default locale keys) become the\n * default locale’s content, and each non-default locale key becomes that locale’s content.\n * @param {RawEntryContent} rawContent Raw content from the file.\n * @param {InternalLocaleCode[]} allLocales All available locales.\n * @param {InternalLocaleCode} defaultLocale The default locale.\n * @returns {RawEntryContent | undefined} Normalized locale-keyed content or undefined if invalid.\n */\nexport const normalizeDefaultRootContent = (rawContent, allLocales, defaultLocale) => {\n  if (!isObject(rawContent)) {\n    return undefined;\n  }\n\n  const nonDefaultLocales = allLocales.filter((locale) => locale !== defaultLocale);\n\n  // Root-level entries excluding non-default locale keys = default locale content\n  const defaultContent = Object.fromEntries(\n    Object.entries(rawContent).filter(([key]) => !nonDefaultLocales.includes(key)),\n  );\n\n  /** @type {RawEntryContent} */\n  const result = { [defaultLocale]: defaultContent };\n\n  nonDefaultLocales.forEach((locale) => {\n    if (isObject(rawContent[locale])) {\n      result[locale] = rawContent[locale];\n    }\n  });\n\n  return result;\n};\n\n/**\n * Transform raw content to handle special cases like root List and root KeyValue 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  const args = { rawContent, fields, i18nSingleFile };\n\n  // Handle a special case: top-level List field\n  if (hasRootField(fields, 'list')) {\n    return transformRoot({ ...args, validate: Array.isArray });\n  }\n\n  // Handle a special case: top-level KeyValue field\n  if (hasRootField(fields, 'keyvalue')) {\n    return transformRoot({\n      ...args,\n      // Check if the key-value pairs are in an object format and each value is a string\n      // eslint-disable-next-line jsdoc/require-jsdoc\n      validate: (value) =>\n        isObject(value) && Object.values(value).every((val) => typeof val === 'string'),\n    });\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_file_path` 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: {\n        i18nSingleFile,\n        i18nSingleFileDefaultRoot,\n        i18nMultiFile,\n        i18nMultiFolder,\n        i18nMultiRootFolder,\n      },\n      canonicalSlug: { key: canonicalSlugKey },\n    },\n  } = collectionFile ?? /** @type {InternalEntryCollection} */ (collection);\n\n  // Normalize `single_file_default_root` content into the standard locale-keyed format so that the\n  // rest of the processing pipeline can treat it identically to `single_file`.\n  const effectiveRawContent = i18nSingleFileDefaultRoot\n    ? normalizeDefaultRootContent(rawContent, allLocales, defaultLocale)\n    : rawContent;\n\n  if (!effectiveRawContent) {\n    return;\n  }\n\n  const isI18nSingleFile = i18nSingleFile || i18nSingleFileDefaultRoot;\n  const transformedContent = transformRawContent(effectiveRawContent, fields, isI18nSingleFile);\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 || i18nMultiRootFolder;\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 || i18nSingleFileDefaultRoot) {\n    processI18nSingleFileEntry(\n      entry,\n      transformedContent,\n      path,\n      fileName,\n      subPath,\n      subPathTemplate,\n      allLocales,\n    );\n  } else {\n    // `isMultiFileStructure` is always true here (the only non-`i18nSingleFile` path), and `locale`\n    // is always set (the guard above returned early if it wasn’t).\n    const wasMerged = processI18nMultiFileEntry(\n      entry,\n      transformedContent,\n      path,\n      fileName,\n      subPath,\n      subPathTemplate,\n      /** @type {InternalLocaleCode} */ (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","/**\n * Reactive environment detection state for the CMS.\n */\nexport const env = $state({\n  /** Whether the app is running on localhost. */\n  isLocalHost: false,\n  /** Whether the local backend is supported. */\n  isLocalBackendSupported: false,\n  /** Whether the browser is Brave. */\n  isBrave: false,\n  /** Whether the operating system is macOS. */\n  isMacOS: false,\n  /** Whether the app is displayed on a small screen (mobile). */\n  isSmallScreen: false,\n  /** Whether the app is displayed on a medium screen (tablet). */\n  isMediumScreen: false,\n  /** Whether the app is displayed on a large screen (desktop). */\n  isLargeScreen: false,\n  /** Whether the user has a mouse. */\n  hasMouse: true,\n});\n\n/**\n * Initialize the screen size detection. This should be called within `onMount()` due to the access\n * to the DOM APIs.\n */\nexport const initUserEnvDetection = () => {\n  const {\n    location: { hostname },\n    navigator: { userAgentData, platform },\n    matchMedia,\n  } = globalThis;\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  env.isLocalHost = hostname === '127.0.0.1' || /^(.+\\.)?localhost$/.test(hostname);\n  env.isLocalBackendSupported = 'showDirectoryPicker' in globalThis;\n  env.isBrave = userAgentData?.brands.some(({ brand }) => brand === 'Brave') ?? false;\n  env.isMacOS = userAgentData?.platform === 'macOS' || platform.startsWith('Mac');\n\n  const mqlSmall = matchMedia('(width < 768px)');\n  const mqlMedium = matchMedia('(768px <= width < 1024px)');\n  const mqlLarge = matchMedia('(1024px <= width)');\n  const mqlPointer = matchMedia('(pointer: fine)');\n\n  /* eslint-disable jsdoc/require-jsdoc */\n  const isSmallScreenSetter = () => {\n    env.isSmallScreen = mqlSmall.matches;\n  };\n\n  const isMediumScreenSetter = () => {\n    env.isMediumScreen = mqlMedium.matches;\n  };\n\n  const isLargeScreenSetter = () => {\n    env.isLargeScreen = mqlLarge.matches;\n  };\n\n  const hasMouseSetter = () => {\n    env.hasMouse = mqlPointer.matches;\n  };\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","'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;\n\n/**\n * Strip trailing spaces and dots, which are not allowed on some Windows file\n * systems. Does not use a regex to avoid a quadratic ReDoS vulnerability\n * (CWE-1333).\n */\nfunction replaceTrailingDotsAndSpaces(str, replacement) {\n  var end = str.length;\n  while (end > 0 && (str[end - 1] === '.' || str[end - 1] === ' ')) end--;\n  return end < str.length ? str.slice(0, end) + replacement : str;\n}\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  sanitized = replaceTrailingDotsAndSpaces(sanitized, 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 { _, locale as appLocale } from '@sveltia/i18n';\nimport { getHash } from '@sveltia/utils/crypto';\nimport { getPathInfo } from '@sveltia/utils/file';\nimport { compare, escapeRegExp } from '@sveltia/utils/string';\nimport sanitize from 'sanitize-filename';\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('\\\\/')}(?=\\\\/|$)`);\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 * @type {Map<string, Intl.NumberFormat>}\n */\nconst fileSizeFormatterCache = new Map();\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 locale = appLocale.current;\n  let formatter = fileSizeFormatterCache.get(locale);\n\n  if (!formatter) {\n    formatter = new Intl.NumberFormat(locale, { maximumFractionDigits: 1 });\n    fileSizeFormatterCache.set(locale, formatter);\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 _('file_size_units.b', { values: { size: formatter.format(size) } });\n  }\n\n  if (size < mb) {\n    return _('file_size_units.kb', { values: { size: formatter.format(size / kb) } });\n  }\n\n  if (size < gb) {\n    return _('file_size_units.mb', { values: { size: formatter.format(size / mb) } });\n  }\n\n  if (size < tb) {\n    return _('file_size_units.gb', { values: { size: formatter.format(size / gb) } });\n  }\n\n  return _('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  // Normalize the name to NFC format (composed characters), then replace all whitespace characters\n  // (including non-breaking spaces, tabs, newlines, etc.) with regular spaces before sanitizing.\n  // Consecutive whitespace characters are collapsed into a single space.\n  let fileName = sanitize(originalName.normalize().replace(/[\\s\\u00A0\\u202F]+/g, ' '));\n\n  if (slugificationEnabled) {\n    const { filename, extension } = getPathInfo(fileName);\n    const slug = slugify(filename);\n\n    // Lowercase the extension to match the slug’s lowercase behavior, ensuring consistent file\n    // references (e.g., `.JPG` → `.jpg`, `.MOV` → `.mov`)\n    fileName = `${slug}${extension ? `.${extension.toLowerCase()}` : ''}`;\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","/* 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 { escapeRegExp, 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 { getAssetKind } from '$lib/services/assets/kinds';\nimport { GIT_CONFIG_FILE_REGEX, gitConfigFiles } from '$lib/services/backends/git/shared/config';\nimport { createFileList } from '$lib/services/backends/process';\nimport { ESCAPED_PLACEHOLDER_REGEX } from '$lib/services/common/template/constants';\nimport { allEntries, allEntryFolders, dataLoaded, entryParseErrors } from '$lib/services/contents';\nimport { prepareEntries } from '$lib/services/contents/file/process';\nimport { env } from '$lib/services/user/env.svelte';\nimport { createPathRegEx, getBlob, getGitHash } from '$lib/services/utils/file';\n\n/**\n * @import {\n * Asset,\n * BaseAssetListItem,\n * BaseConfigListItem,\n * BaseEntryListItem,\n * BaseFileListItem,\n * BaseFileListItemProps,\n * CommitResults,\n * FileChange,\n * } from '$lib/types/private';\n */\n\n/**\n * File handle item containing metadata and handle reference.\n * @typedef {object} FileHandleItem\n * @property {FileSystemFileHandle} handle File system handle.\n * @property {string} path Path to the file.\n */\n\n/**\n * Maximum file size in bytes to read content from. (10 MB).\n */\nconst MAX_FILE_SIZE = 10 * 1024 * 1024;\n/**\n * Batch size for processing files to balance performance with memory safety.\n * @see https://github.com/sveltia/sveltia-cms/issues/224\n */\nconst FILE_PROCESS_BATCH_SIZE = 10;\n\n/**\n * Get a file or directory handle at the given path.\n * @internal\n * @param {FileSystemDirectoryHandle} rootDirHandle Root directory handle.\n * @param {string | undefined} 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 */\nexport const 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 | undefined} 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 * @internal\n * @param {string} path Path.\n * @returns {RegExp} RegEx.\n */\nexport const getPathRegex = (path) => {\n  // Handle empty path (root folder) - match any file\n  if (!path) {\n    return /^.+$/;\n  }\n\n  return createPathRegEx(path, (segment) =>\n    escapeRegExp(segment).replace(ESCAPED_PLACEHOLDER_REGEX, '.+?'),\n  );\n};\n\n/**\n * Retrieve all the files under the given directory recursively.\n * @internal\n * @param {FileSystemDirectoryHandle} 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 {FileHandleItem[]} context.fileHandles List of available file handles.\n * @param {Map<string, RegExp>} context.pathRegexCache Cache for path regexes.\n * @param {string} [currentPath] Current directory path (for recursion).\n */\nexport const scanDir = async (dirHandle, context, currentPath = '') => {\n  const { scanningPaths, scanningPathsRegEx, fileHandles, pathRegexCache } = 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 = currentPath ? `${currentPath}/${name}` : name;\n    const hasMatchingPath = scanningPathsRegEx.some((regex) => regex.test(path));\n\n    if (handle.kind === 'file' && hasMatchingPath) {\n      // Store only the handle and path. Metadata will be extracted later when needed, avoiding\n      // memory leaks from holding multiple file references during directory scanning.\n      fileHandles.push({\n        handle: /** @type {FileSystemFileHandle} */ (handle),\n        path,\n      });\n    }\n\n    if (handle.kind === 'directory') {\n      // Cache regex creation to avoid recreating for the same path\n      let regex = pathRegexCache.get(path);\n\n      if (!regex) {\n        regex = getPathRegex(path);\n        pathRegexCache.set(path, regex);\n      }\n\n      if (hasMatchingPath || scanningPaths.some((p) => regex.test(p))) {\n        await scanDir(/** @type {FileSystemDirectoryHandle} */ (handle), context, path);\n      }\n    }\n  }\n};\n\n/**\n * Collect all scanning paths from entry and asset folders.\n * @internal\n * @returns {string[]} Unique list of normalized scanning paths.\n */\nexport const collectScanningPaths = () => {\n  const entryPaths = get(allEntryFolders).flatMap(({ filePathMap, folderPathMap }) =>\n    filePathMap ? Object.values(filePathMap) : Object.values(folderPathMap ?? {}),\n  );\n\n  const assetPaths = get(allAssetFolders)\n    .filter(({ internalPath }) => internalPath !== undefined)\n    .map(({ internalPath }) => internalPath);\n\n  return unique(\n    /* v8 ignore next */\n    [...entryPaths, ...assetPaths].map((path) => stripSlashes(path ?? '')),\n  );\n};\n\n/**\n * Retrieve all files under the static directory.\n * @internal\n * @param {FileSystemDirectoryHandle} rootDirHandle Root directory handle.\n * @returns {Promise<BaseFileListItemProps[]>} File list.\n */\nexport const getAllFiles = async (rootDirHandle) => {\n  /** @type {FileHandleItem[]} */\n  const fileHandles = [];\n  const scanningPaths = collectScanningPaths();\n\n  await scanDir(rootDirHandle, {\n    rootDirHandle,\n    scanningPaths,\n    scanningPathsRegEx: scanningPaths.map(getPathRegex),\n    fileHandles,\n    pathRegexCache: new Map(),\n  });\n\n  return fileHandles.map(({ handle, path }) => ({\n    handle,\n    path: path.normalize(),\n    name: handle.name.normalize(),\n    size: 0, // Will be populated later\n    sha: '', // Will be populated later\n  }));\n};\n\n/**\n * Parse text file info to create a complete entry or config file object.\n * @internal\n * @param {BaseFileListItem} fileInfo Entry or config file info.\n * @returns {Promise<BaseFileListItem>} Entry or config file with text content. We don’t populate\n * `size` and `sha` for entries and config files, as they are not needed.\n */\nexport const parseTextFileInfo = async (fileInfo) => {\n  const { name, handle } = fileInfo;\n\n  // Skip `.gitkeep` file, as we don’t need to read its content\n  if (name === '.gitkeep') {\n    return fileInfo;\n  }\n\n  try {\n    const file = await /** @type {FileSystemFileHandle} */ (handle).getFile();\n\n    if (file.size > MAX_FILE_SIZE) {\n      // eslint-disable-next-line no-console\n      console.warn(`File ${name} is too large (${file.size} bytes), skipping content read`);\n\n      return { ...fileInfo, text: '' };\n    }\n\n    const text = await readAsText(file);\n\n    return { ...fileInfo, text };\n  } catch (ex) {\n    // eslint-disable-next-line no-console\n    console.error(ex);\n\n    return { ...fileInfo, text: '' };\n  }\n};\n\n/**\n * Parse asset file info to create a complete asset object.\n * @internal\n * @param {BaseAssetListItem} fileInfo Asset file info.\n * @returns {Promise<Asset>} Asset object.\n */\nexport const parseAssetFileInfo = async (fileInfo) => {\n  const { name, handle } = fileInfo;\n  const kind = getAssetKind(name);\n\n  try {\n    const file = await /** @type {FileSystemFileHandle} */ (handle).getFile();\n    const { size } = file;\n    const sha = await getGitHash(file);\n\n    return { ...fileInfo, kind, size, sha };\n  } catch (ex) {\n    // eslint-disable-next-line no-console\n    console.error(ex);\n\n    return { ...fileInfo, kind };\n  }\n};\n\n/**\n * Load file list and all the entry files from the file system, then cache them in the stores.\n * @param {FileSystemDirectoryHandle} rootDirHandle Root directory handle.\n */\nexport const loadFiles = async (rootDirHandle) => {\n  const { entryFiles, assetFiles, configFiles } = createFileList(await getAllFiles(rootDirHandle));\n  /** @type {BaseEntryListItem[]} */\n  const entryFileItems = [];\n  /** @type {BaseConfigListItem[]} */\n  const configFileItems = [];\n\n  // Process files in batches to balance performance with memory safety\n  for (let i = 0; i < entryFiles.length; i += FILE_PROCESS_BATCH_SIZE) {\n    const batch = entryFiles.slice(i, i + FILE_PROCESS_BATCH_SIZE);\n    const results = await Promise.all(batch.map((fileInfo) => parseTextFileInfo(fileInfo)));\n\n    entryFileItems.push(.../** @type {BaseEntryListItem[]} */ (results));\n  }\n\n  for (let i = 0; i < configFiles.length; i += FILE_PROCESS_BATCH_SIZE) {\n    const batch = configFiles.slice(i, i + FILE_PROCESS_BATCH_SIZE);\n    const results = await Promise.all(batch.map((fileInfo) => parseTextFileInfo(fileInfo)));\n\n    configFileItems.push(.../** @type {BaseConfigListItem[]} */ (results));\n  }\n\n  const { entries, errors } = await prepareEntries(entryFileItems);\n  /** @type {Asset[]} */\n  const assets = [];\n\n  for (let i = 0; i < assetFiles.length; i += FILE_PROCESS_BATCH_SIZE) {\n    const batch = assetFiles.slice(i, i + FILE_PROCESS_BATCH_SIZE);\n    const results = await Promise.all(batch.map((fileInfo) => parseAssetFileInfo(fileInfo)));\n\n    assets.push(...results);\n  }\n\n  allEntries.set(entries);\n  allAssets.set(assets);\n  gitConfigFiles.set(configFileItems);\n  entryParseErrors.set(errors);\n  dataLoaded.set(true);\n};\n\n/**\n * Check if the `move` method is supported by the current browser. The `move` method is not\n * implemented in older browsers, and Brave supports the `move` method but throws an error for some\n * reason, so we need to check it by actually trying to use it.\n * @internal\n * @returns {boolean} `true` if the `move` method is supported, `false` otherwise.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/File_System_API#browser_compatibility\n * @see https://github.com/sveltia/sveltia-cms/discussions/676\n */\nexport const canMoveFile = () => 'move' in FileSystemFileHandle.prototype && !env.isBrave;\n\n/**\n * Write data to a file using the provided file handle. This function is used to write data to a\n * file when we already have a file handle reference, such as when moving a file without changes. It\n * handles the case where the `createWritable` method is not supported by older versions of Safari.\n * @internal\n * @param {FileSystemFileHandle} fileHandle File handle to write to.\n * @param {FileSystemWriteChunkType} data Data to write to the file.\n */\nexport const writeFile = async (fileHandle, data) => {\n  // The `createWritable` method is not supported by older versions of Safari\n  const writer = await fileHandle.createWritable?.();\n\n  try {\n    // Can throw if the file has just been moved/renamed without any change, and then the `data` is\n    // no longer available\n    await writer?.write(data);\n  } finally {\n    try {\n      await writer?.close();\n    } catch {\n      //\n    }\n  }\n};\n\n/**\n * Move a file from a previous path to a new path within the file system.\n * @internal\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 */\nexport const moveFile = async ({ rootDirHandle, previousPath, path }) => {\n  const { dirname: newDirname, basename: newBasename } = getPathInfo(path);\n  const { dirname: oldDirname, basename: oldBasename } = getPathInfo(previousPath);\n  const fileHandle = await getFileHandle(rootDirHandle, previousPath);\n\n  // Use the native `move` method if supported, as it’s more efficient and preserves file metadata.\n  // If not, fall back to copying the file to the new location and deleting the old file.\n  if (canMoveFile()) {\n    // @ts-ignore\n    await fileHandle.move(await getDirectoryHandle(rootDirHandle, newDirname), newBasename);\n\n    return fileHandle;\n  }\n\n  const newFileHandle = await getFileHandle(rootDirHandle, path);\n  const oldDirHandle = await getDirectoryHandle(rootDirHandle, oldDirname);\n\n  await writeFile(newFileHandle, await fileHandle.getFile());\n  await oldDirHandle.removeEntry(oldBasename);\n\n  return newFileHandle;\n};\n\n/**\n * Save data to a file at the specified path.\n * @internal\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 */\nexport const saveFile = async ({ rootDirHandle, fileHandle, path, data }) => {\n  // When no handle is provided (create/update), write to a temp file first, then rename it to the\n  // final path. This avoids race conditions with file watchers (e.g., Astro dev server) that may\n  // read the new file before its content is fully written.\n  // @see https://github.com/sveltia/sveltia-cms/issues/675\n  /** @type {{ dirname: string | undefined, basename: string } | undefined} */\n  let pendingRename;\n\n  if (!fileHandle) {\n    // Check if the `move` method is supported before deciding whether to write to a temp file, as\n    // writing to a temp file and then renaming it is only necessary if the `move` method is not\n    // supported. If the `move` method is supported, we have to write directly to the final path.\n    if (canMoveFile()) {\n      const { dirname, basename } = getPathInfo(stripSlashes(path));\n      const tempPath = `${dirname ? `${dirname}/` : ''}.sveltia-tmp-${crypto.randomUUID()}`;\n\n      fileHandle = await getFileHandle(rootDirHandle, tempPath);\n      pendingRename = { dirname, basename };\n    } else {\n      fileHandle = await getFileHandle(rootDirHandle, path);\n    }\n  }\n\n  await writeFile(fileHandle, data);\n\n  if (pendingRename) {\n    const { dirname, basename } = pendingRename;\n\n    // @ts-ignore\n    await fileHandle.move(await getDirectoryHandle(rootDirHandle, dirname), basename);\n  }\n\n  return fileHandle.getFile();\n};\n\n/**\n * Recursively delete empty parent directories.\n * @internal\n * @param {FileSystemDirectoryHandle} rootDirHandle Root directory handle.\n * @param {string[]} pathSegments Array of directory path segments.\n */\nexport const deleteEmptyParentDirs = async (rootDirHandle, pathSegments) => {\n  // Start from the deepest directory\n  for (let i = pathSegments.length; i > 0; i -= 1) {\n    const dirName = pathSegments[i - 1];\n    const parentPath = pathSegments.slice(0, i - 1).join('/');\n    const parentHandle = await getDirectoryHandle(rootDirHandle, parentPath);\n    const dirHandle = await parentHandle.getDirectoryHandle(dirName);\n\n    // Use for...of to check if directory is empty with early exit on first entry found\n    // eslint-disable-next-line no-unreachable-loop\n    for await (const _entry of dirHandle.entries()) {\n      // Directory is not empty, stop cleanup\n      return;\n    }\n\n    // Directory is empty, remove it\n    await parentHandle.removeEntry(dirName);\n  }\n};\n\n/**\n * Delete a file at the specified path within the file system.\n * @internal\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 */\nexport const 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 * @internal\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 */\nexport const 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 saveFile({ 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          return null;\n        }\n\n        file = getBlob(data);\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 { cmsConfig } from '$lib/services/config';\n\n/**\n * @import {\n * BackendService,\n * CommitResults,\n * FileChange,\n * InternalCmsConfig,\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 REPOSITORY_PROPS = { 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 ?? REPOSITORY_PROPS)[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 * @internal\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 */\nexport const 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      // Verify this is a project root by checking for `.git`. In a standard repository, `.git` is\n      // a directory. In a git worktree, `.git` is a file containing a `gitdir:` pointer to the\n      // main repository. Both are valid repository roots.\n      try {\n        await handle.getDirectoryHandle('.git');\n      } catch (/** @type {any} */ ex) {\n        if (ex.name === 'TypeMismatchError') {\n          // `.git` exists but is a file (git worktree), which is still a valid repo root\n          await handle.getFileHandle('.git');\n        } else {\n          throw ex;\n        }\n      }\n\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 {InternalCmsConfig} */ (get(cmsConfig)).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';\n\n/**\n * @import { User } from '$lib/types/private';\n */\n\n/**\n * @type {{ account: User | null | undefined }}\n */\nexport const user = $state({ account: undefined });\n\n$effect.root(() => {\n  $effect(() => {\n    const _user = user.account;\n\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});\n","import { sleep } from '@sveltia/utils/misc';\nimport { isObject } from '@sveltia/utils/object';\n\n/**\n * @import { AuthTokens } from '$lib/types/private';\n */\n\n/**\n * Check if a URL can be requested without exposing credentials over an insecure transport.\n * @param {string} url URL to check.\n * @param {string} [baseURL] Base URL for relative URLs.\n * @returns {boolean} Whether the URL uses HTTPS or local HTTP.\n */\nexport const isSecureURL = (\n  url,\n  baseURL = globalThis.window?.location?.origin ??\n    globalThis.location?.origin ??\n    'https://localhost',\n) => {\n  try {\n    const { hostname, protocol } = new URL(url, baseURL);\n\n    return protocol === 'https:' || ['localhost', '127.0.0.1', '[::1]'].includes(hostname);\n  } catch {\n    return false;\n  }\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 * @param {number} [options.retries] Number of remaining retries for transient server errors (5xx).\n * Defaults to `1`. Used internally for recursive retries.\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, retries = 1 } = {},\n) => {\n  /** @type {Response} */\n  let response;\n\n  init.cache = 'no-cache';\n  init.headers = new Headers(init.headers);\n\n  if (init.headers.has('Authorization') && !isSecureURL(url)) {\n    throw new Error('Refusing to send credentials over an insecure connection');\n  }\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  // Retry the request if the server responded with 502 Bad Gateway, which is a transient error that\n  // may succeed on retry. This is especially relevant for the GitHub GraphQL API, which is known to\n  // occasionally return 502 errors.\n  // @see https://github.com/sveltia/sveltia-cms/issues/695\n  if (status === 502 && retries > 0) {\n    await sleep(1000);\n\n    return sendRequest(url, init, { responseType, refreshAccessToken, retries: retries - 1 });\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","import { _ } from '@sveltia/i18n';\n\nimport { user } from '$lib/services/user/account.svelte';\nimport { isSecureURL, 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  authScope: '',\n  authURL: '',\n  tokenURL: '',\n  authScheme: 'token',\n  restBaseURL: '',\n  graphqlBaseURL: '',\n  includeCredentials: false,\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  if (!isSecureURL(tokenURL)) {\n    throw new Error(_('sign_in_error.TOKEN_REFRESH_FAILED'));\n  }\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      ...(apiConfig.includeCredentials && { credentials: 'include' }),\n    });\n  } catch {\n    //\n  }\n\n  if (!response?.ok) {\n    throw new Error(_('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.account = user.account ? { ...user.account, token, refreshToken } : user.account;\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 {\n    clientId,\n    tokenURL,\n    restBaseURL,\n    graphqlBaseURL,\n    authScheme = 'token',\n    includeCredentials,\n  } = apiConfig;\n\n  const _user = user.account;\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    {\n      method,\n      headers,\n      body,\n      ...(includeCredentials && { credentials: 'include' }),\n    },\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 { fetchAPI } from '$lib/services/backends/git/shared/api';\nimport { user } from '$lib/services/user/account.svelte';\n\n/**\n * @import { AuthTokens, User } from '$lib/types/private';\n * @import { BackendName } from '$lib/types/public';\n */\n\n/**\n * @typedef {object} UserFieldMap\n * @property {string} name Response field name for the user’s full name.\n * @property {string} login Response field name for the user’s login name.\n * @property {string} profileURL Response field name for the user’s profile page URL.\n */\n\n/**\n * Retrieve the authenticated user’s profile information from the `/user` REST API endpoint.\n * @param {AuthTokens} tokens Authentication tokens.\n * @param {BackendName | 'local'} backendName Backend name, e.g. `github`.\n * @param {UserFieldMap} fieldMap Mapping of normalized field names to provider-specific response\n * field names.\n * @returns {Promise<User>} User information.\n */\nexport const fetchUserProfile = async ({ token, refreshToken }, backendName, fieldMap) => {\n  const response = /** @type {Record<string, any>} */ (\n    await fetchAPI('/user', { token, refreshToken })\n  );\n\n  const _user = user.account;\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,\n    id: response.id,\n    name: response[fieldMap.name],\n    login: response[fieldMap.login],\n    email: response.email,\n    avatarURL: response.avatar_url,\n    profileURL: response[fieldMap.profileURL],\n    bot: response.bot ?? false,\n    token,\n    refreshToken,\n  };\n};\n","import { BACKEND_NAME } from '$lib/services/backends/git/gitea/constants';\nimport { fetchUserProfile } from '$lib/services/backends/git/shared/user';\n\n/**\n * @import { AuthTokens, User } from '$lib/types/private';\n */\n\n/**\n * Retrieve the authenticated user’s profile information from Gitea/Forgejo REST API.\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 = (tokens) =>\n  fetchUserProfile(tokens, BACKEND_NAME, {\n    name: 'full_name',\n    login: 'login',\n    profileURL: 'html_url',\n  });\n","import { _ } from '@sveltia/i18n';\nimport { 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';\n\nimport { cmsConfig } from '$lib/services/config';\nimport { isSecureURL } from '$lib/services/utils/networking';\n\n/**\n * @import {\n * ApiEndpointConfig,\n * AuthTokens,\n * InternalCmsConfig,\n * SignInOptions,\n * } from '$lib/types/private';\n * @import { GitBackend } from '$lib/types/public';\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 * @see https://sveltiacms.app/en/docs/backends\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                ? _(`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}`,\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}`,\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  /**\n   * Listener for messages from the window opener.\n   * @param {MessageEvent} event Event.\n   */\n  const onMessage = ({ data, origin }) => {\n    if (data === `authorizing:${provider}`) {\n      window.opener?.postMessage(\n        `authorization:${provider}:${_state}:${JSON.stringify(content)}`,\n        origin,\n      );\n      // The handshake is complete; remove the listener so repeated auth flows don’t accumulate.\n      window.removeEventListener('message', onMessage);\n    }\n  };\n\n  window.addEventListener('message', onMessage);\n  window.opener?.postMessage(`authorizing:${provider}`, window.location.origin);\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 {ApiEndpointConfig} args.apiConfig API endpoint configuration.\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, apiConfig, code, state }) => {\n  const { clientId, tokenURL, includeCredentials = false } = apiConfig;\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: _('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  if (!isSecureURL(tokenURL)) {\n    return sendMessage({\n      provider,\n      error: _('sign_in_error.TOKEN_REQUEST_FAILED'),\n      errorCode: 'TOKEN_REQUEST_FAILED',\n    });\n  }\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      ...(includeCredentials && { credentials: 'include' }),\n    });\n  } catch {\n    //\n  }\n\n  if (!response) {\n    return sendMessage({\n      provider,\n      error: _('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: _('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 {ApiEndpointConfig} args.apiConfig API endpoint configuration.\n */\nexport const handleClientSideAuthPopup = async ({ backendName, apiConfig }) => {\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, apiConfig, 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\n/**\n * Handle the authentication flow for a Git service provider. This function decides whether to\n * initiate a client-side or server-side authentication flow based on the configured backend name\n * and authentication type.\n * @internal\n * @param {object} args Arguments.\n * @param {boolean} args.auto Whether the sign-in process is automatic.\n * @param {ApiEndpointConfig} args.apiConfig API endpoint configuration.\n * @returns {Promise<AuthTokens | undefined>} Auth access token and refresh token, or `undefined` if\n * the sign-in process is automatic or the flow is being done in a popup window.\n */\nexport const handleAuthFlow = async ({ auto, apiConfig }) => {\n  const { backend } = /** @type {InternalCmsConfig} */ (get(cmsConfig));\n\n  const {\n    name: backendName,\n    site_domain: siteDomain,\n    // @ts-ignore Gitea backend doesn’t have the property\n    auth_type: authType,\n  } = /** @type {GitBackend} */ (backend);\n\n  const { clientId, authScope, authURL } = apiConfig;\n  const authArgs = { backendName, authURL, scope: authScope };\n\n  // Gitea/Forgejo backend only supports PKCE at this time\n  if (backendName === 'gitea' || 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, apiConfig });\n    }\n\n    if (inPopup || auto) {\n      return undefined;\n    }\n\n    return initClientSideAuth({ ...authArgs, clientId });\n  }\n\n  if (auto) {\n    return undefined;\n  }\n\n  return initServerSideAuth({ ...authArgs, siteDomain });\n};\n\n/**\n * Get OAuth tokens by handling the authentication flow if necessary.\n * @param {object} args Arguments.\n * @param {SignInOptions} args.options Options.\n * @param {ApiEndpointConfig} args.apiConfig API endpoint configuration.\n * @returns {Promise<AuthTokens | undefined>} Auth access token and refresh token, or `undefined` if\n * the sign-in process is automatic or the flow is being done in a popup window.\n */\nexport const getTokens = async ({ options: { token, refreshToken, auto = false }, apiConfig }) => {\n  if (!token) {\n    const result = await handleAuthFlow({ auto, apiConfig });\n\n    if (!result) {\n      return undefined;\n    }\n\n    ({ token, refreshToken } = result);\n  }\n\n  return { token, refreshToken };\n};\n","import { getUserProfile } from '$lib/services/backends/git/gitea/user';\nimport { apiConfig } from '$lib/services/backends/git/shared/api';\nimport { getTokens } from '$lib/services/backends/git/shared/auth';\n\n/**\n * @import { SignInOptions, User } from '$lib/types/private';\n */\n\n/**\n * Get the URL of the page for creating a new Personal Access Token (PAT) on Gitea/Forgejo.\n * @param {string} repoURL Repository URL, e.g. `https://gitea.com/owner/repo`.\n * @returns {string} URL to create a new PAT.\n */\nexport const getTokenPageURL = (repoURL) => {\n  const { origin } = new URL(repoURL);\n\n  return `${origin}/user/settings/applications`;\n};\n\n/**\n * 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 (options) => {\n  const { token, refreshToken } = (await getTokens({ options, apiConfig })) ?? {};\n\n  if (!token) {\n    return undefined;\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 { _ } from '@sveltia/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 { RepositoryBaseURLs, 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 CMS configuration.\n * @returns {RepositoryBaseURLs} An object containing the tree base URL for browsing files, and the\n * 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  commitBaseURL: `${repoURL}/commit`,\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(_('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(_('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(_('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(_('repository_not_found', { values: { repo } })),\n    });\n  }\n};\n","import { get } from 'svelte/store';\n\nimport { cmsConfig } from '$lib/services/config';\nimport { getCollectionLabel } from '$lib/services/contents/collection';\nimport { user } from '$lib/services/user/account.svelte';\n\n/**\n * @import { CommitOptions, FileChange, User } from '$lib/types/private';\n * @import { GitBackend } from '$lib/types/public';\n */\n\n/**\n * Default commit message templates.\n * @see https://decapcms.org/docs/configuration-options/#commit-message-templates\n * @see https://sveltiacms.app/en/docs/backends#commit-messages\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    commit_messages: customCommitMessages = {},\n    skip_ci: skipCIEnabled,\n    automatic_deployments: autoDeploy,\n  } = /** @type {GitBackend} */ (get(cmsConfig)?.backend ?? {});\n\n  const { email = '', login = '', name = '' } = /** @type {User} */ (user.account);\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-email}}', email)\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-email}}', email)\n      .replaceAll('{{author-login}}', login)\n      .replaceAll('{{author-name}}', name);\n  }\n\n  if (['openAuthoring'].includes(commitType)) {\n    message = message\n      .replaceAll('{{message}}', commitType)\n      .replaceAll('{{author-email}}', email)\n      .replaceAll('{{author-login}}', login)\n      .replaceAll('{{author-name}}', name);\n  }\n\n  if (remainingPaths.length) {\n    message += ` +${remainingPaths.length}`;\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    // Cannot use the `skipCIEnabled` store here because it leads to an uninitialized store error\n    (skipCI ?? (skipCIEnabled === true || autoDeploy === false))\n  ) {\n    message = `[skip ci] ${message}`;\n  }\n\n  return message;\n};\n","import { _ } from '@sveltia/i18n';\nimport { encodeBase64 } from '@sveltia/utils/file';\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/account.svelte';\n\n/**\n * @import { CommitOptions, CommitResults, FileChange, FileCommit, 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 } | null)[]} files List of saved files, each with its\n * path and SHA. It can be `null` if the file was deleted.\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(_('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} */ (user.account);\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(\n      savedFiles.map((file, index) => [\n        file?.path ?? changes[index].path,\n        { sha: file?.sha ?? '' },\n      ]),\n    ),\n  };\n};\n\n/**\n * Fetch commit history for the given file paths.\n * @param {string[]} paths File paths to fetch commit history for.\n * @returns {Promise<FileCommit[]>} Deduplicated and sorted list of commits.\n * @see https://docs.gitea.com/api/next/#tag/repository/operation/repoGetAllCommits\n */\nexport const fetchFileCommits = async (paths) => {\n  const { owner, repo, branch } = repository;\n\n  const results = await Promise.all(\n    paths.map(\n      (path) =>\n        /** @type {Promise<any[]>} */ (\n          fetchAPI(\n            `/repos/${owner}/${repo}/commits` +\n              `?sha=${encodeURIComponent(branch ?? '')}` +\n              `&path=${encodeURIComponent(path)}&limit=100`,\n          )\n        ),\n    ),\n  );\n\n  /** @type {Map<string, FileCommit>} */\n  const commitMap = new Map();\n\n  results.flat().forEach((commit) => {\n    if (!commitMap.has(commit.sha)) {\n      commitMap.set(commit.sha, {\n        sha: commit.sha,\n        authorName: commit.commit?.author?.name ?? '',\n        authorEmail: commit.commit?.author?.email,\n        authorAvatarURL: commit.author?.avatar_url,\n        authorLogin: commit.author?.login,\n        date: new Date(commit.commit?.author?.date ?? commit.created),\n      });\n    }\n  });\n\n  return [...commitMap.values()].sort((a, b) => b.date.getTime() - a.date.getTime());\n};\n","import { _ } from '@sveltia/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: versionStr } = /** @type {{ version: string }} */ (await fetchAPI('/version'));\n  const version = Number.parseFloat(versionStr);\n  // Forgejo version strings typically look like `13.0.3+gitea-1.22.0`. However, depending on the\n  // installation, the fork indicator may not be included (I’ve got `13.0.3` with Homebrew) so we\n  // just check the numeric major version number. Forgejo is now 1x.x.x while Gitea remains 1.x.x so\n  // it’s safe to assume anything above version 10 is Forgejo.\n  // @see https://blog.gitea.com/tags/release\n  // @see https://forgejo.org/releases/\n  const isForgejo = version > 10;\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 (version < minVersion) {\n    throw new Error(`Unsupported ${name} version`, {\n      cause: new Error(\n        _('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 { getAssetKind } from '$lib/services/assets/kinds';\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 file info and add additional metadata, such as name, size, and text content.\n * @internal\n * @param {object} args Arguments.\n * @param {BaseFileListItem} args.fileInfo File info.\n * @param {RepositoryContentsMap} args.fetchedFileMap Map of fetched file metadata and content.\n * @returns {BaseFileListItem} Parsed file with additional metadata.\n */\nexport const parseFileInfo = ({ fileInfo, 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[fileInfo.path] ?? {};\n\n  return {\n    ...fileInfo,\n    size: fileInfo.size ?? size,\n    text: fileInfo.text ?? text,\n    meta: fileInfo.meta ?? meta,\n  };\n};\n\n/**\n * Parse a single asset file to create a complete, serialized asset.\n * @internal\n * @param {BaseAssetListItem} fileInfo Asset file info.\n * @returns {Asset} Parsed asset.\n */\nexport const parseAssetFileInfo = (fileInfo) => {\n  const { name, meta = {}, ...rest } = fileInfo;\n  const kind = getAssetKind(name);\n\n  return { ...rest, ...meta, name, kind };\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 = new Set(allFiles.map(({ path }) => path));\n  const unusedPaths = Object.keys(cachedFiles).filter((path) => !usedPaths.has(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      (fileInfo) => /** @type {BaseEntryListItem} */ (parseFileInfo({ fileInfo, fetchedFileMap })),\n    ),\n  );\n\n  const assets = assetFiles.map((fileInfo) =>\n    parseAssetFileInfo(\n      /** @type {BaseAssetListItem} */ (parseFileInfo({ fileInfo, fetchedFileMap })),\n    ),\n  );\n\n  const configFileItems = configFiles.map(\n    (fileInfo) => /** @type {BaseConfigListItem} */ (parseFileInfo({ fileInfo, fetchedFileMap })),\n  );\n\n  updateStores({ entries, assets, configFiles: configFileItems, errors });\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","'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","import { locale as appLocale, locales as appLocales } from '@sveltia/i18n';\nimport { LocalStorage } from '@sveltia/utils/storage';\nimport equal from 'fast-deep-equal';\n\n/**\n * @import { Preferences } from '$lib/types/private';\n */\n\nconst STORAGE_KEY = 'sveltia-cms.prefs';\n\n/**\n * @type {{ current: { type: string } | undefined }}\n */\nexport const prefsError = $state({ current: undefined });\n\n/**\n * Current user preferences as reactive state.\n * @type {Preferences}\n */\nexport const prefs = $state({});\n\n$effect.root(() => {\n  (async () => {\n    prefsError.current = undefined;\n\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      Object.assign(prefs, _prefs);\n    } catch {\n      prefsError.current = { type: 'permission_denied' };\n    }\n  })();\n\n  $effect(() => {\n    if (!Object.keys(prefs).length) {\n      return;\n    }\n\n    const snapshot = $state.snapshot(prefs);\n\n    (async () => {\n      try {\n        if (!equal(snapshot, await LocalStorage.get(STORAGE_KEY))) {\n          await LocalStorage.set(STORAGE_KEY, snapshot);\n        }\n      } catch {\n        //\n      }\n    })();\n\n    const {\n      locale,\n      theme,\n      underlineLinks = true,\n      beta = false,\n      devModeEnabled: devMode = false,\n    } = prefs;\n\n    if (locale && 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});\n","import { stripSlashes } from '@sveltia/utils/string';\nimport { get } from 'svelte/store';\n\nimport { getTokenPageURL, signIn, signOut } from '$lib/services/backends/git/gitea/auth';\nimport { commitChanges, fetchFileCommits } 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 { cmsConfig } from '$lib/services/config';\nimport { prefs } from '$lib/services/user/prefs.svelte';\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(cmsConfig) ?? {};\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    include_credentials: includeCredentials = false,\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      tokenPageURL: getTokenPageURL(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      authScope: 'read:repository,write:repository,read:user',\n      authURL,\n      tokenURL: authURL.replace('/authorize', '/access_token'),\n      restBaseURL: stripSlashes(restApiRoot),\n      includeCredentials,\n    }),\n  );\n\n  if (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  fetchFileCommits,\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';\nexport const DEFAULT_PKCE_AUTH_ROOT = 'https://github.com';\nexport const DEFAULT_PKCE_AUTH_PATH = 'login/oauth/authorize';\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 { fetchUserProfile } from '$lib/services/backends/git/shared/user';\n\n/**\n * @import { AuthTokens, User } from '$lib/types/private';\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 = (tokens) =>\n  fetchUserProfile(tokens, BACKEND_NAME, {\n    name: 'name',\n    login: 'login',\n    profileURL: 'html_url',\n  });\n","import { getUserProfile } from '$lib/services/backends/git/github/user';\nimport { apiConfig } from '$lib/services/backends/git/shared/api';\nimport { getTokens } from '$lib/services/backends/git/shared/auth';\n\n/**\n * @import { SignInOptions, User } from '$lib/types/private';\n */\n\n/**\n * Get the URL of the page for creating a new Personal Access Token (PAT) on GitHub.\n * @param {string} repoURL Repository URL, e.g. `https://github.com/owner/repo`.\n * @returns {string} URL to create a new PAT.\n * @see https://github.blog/changelog/2025-08-26-template-urls-for-fine-grained-pats-and-updated-permissions-ui/\n * @see https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens\n */\nexport const getTokenPageURL = (repoURL) => {\n  const { origin } = new URL(repoURL);\n\n  const params = new URLSearchParams({\n    name: 'Sveltia CMS',\n    contents: 'write',\n  });\n\n  return `${origin}/settings/personal-access-tokens/new?${params}`;\n};\n\n/**\n * Sign in with GitHub 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 (options) => {\n  const { token, refreshToken } = (await getTokens({ options, apiConfig })) ?? {};\n\n  if (!token) {\n    return undefined;\n  }\n\n  return getUserProfile({ token, refreshToken });\n};\n\n/**\n * Sign out from GitHub. Nothing to do here.\n * @returns {Promise<void>}\n */\nexport const signOut = async () => undefined;\n","import { _ } from '@sveltia/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/account.svelte';\n\n/**\n * @import { RepositoryBaseURLs, 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 CMS configuration.\n * @returns {RepositoryBaseURLs} An object containing the tree base URL for browsing files, and the\n * 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  commitBaseURL: `${repoURL}/commit`,\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} */ (user.account?.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(_('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(_('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(_('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 { _ } from '@sveltia/i18n';\nimport { encodeBase64 } from '@sveltia/utils/file';\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, FileCommit } 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(_('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(_('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 * GitHub’s GraphQL API cannot resolve blob OIDs for files over this size (10 MB).\n * @see https://github.com/sveltia/sveltia-cms/issues/692\n */\nconst MAX_GRAPHQL_BLOB_SIZE = 10 * 1024 * 1024;\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 additionChanges = changes.filter(({ action }) =>\n    ['create', 'update', 'move'].includes(action),\n  );\n\n  const additions = await Promise.all(\n    additionChanges.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; skip files over 10 MB to avoid a GitHub GraphQL\n  // limitation where large blob OIDs cannot be resolved\n  // @see https://github.com/sveltia/sveltia-cms/issues/692\n  const fileShaQuery = additions\n    .map(({ path }, index) => {\n      const { data } = additionChanges[index];\n      const size = data instanceof Blob ? data.size : new Blob([data ?? '']).size;\n\n      return size <= MAX_GRAPHQL_BLOB_SIZE\n        ? `file_${index}: file(path: ${JSON.stringify(path)}) { oid }`\n        : '';\n    })\n    .filter(Boolean)\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) => {\n        const { data } = additionChanges[index];\n\n        return [\n          path,\n          {\n            sha: commit[`file_${index}`]?.oid,\n            // Preserve the original file for large uploads so the UI can create a blob URL\n            ...(data instanceof Blob && data.size > MAX_GRAPHQL_BLOB_SIZE ? { file: data } : {}),\n          },\n        ];\n      }),\n    ),\n  };\n};\n\n/**\n * Fetch commit history for the given file paths.\n * @param {string[]} paths File paths to fetch commit history for.\n * @returns {Promise<FileCommit[]>} Deduplicated and sorted list of commits.\n * @see https://docs.github.com/en/graphql/reference/objects#commit\n */\nexport const fetchFileCommits = async (paths) => {\n  const innerQuery = paths\n    .map(\n      (path, i) => `\n        history_${i}: ref(qualifiedName: $branch) {\n          target {\n            ... on Commit {\n              history(first: 100, path: ${JSON.stringify(path)}) {\n                nodes {\n                  oid\n                  author {\n                    name\n                    email\n                    avatarUrl\n                    user { login }\n                  }\n                  committedDate\n                }\n              }\n            }\n          }\n        }\n      `,\n    )\n    .join('');\n\n  const query = `\n    query($owner: String!, $repo: String!, $branch: String!) {\n      repository(owner: $owner, name: $repo) {\n        ${innerQuery}\n      }\n    }\n  `;\n\n  const data = /** @type {{ repository: Record<string, any> }} */ (await fetchGraphQL(query));\n  /** @type {Map<string, FileCommit>} */\n  const commitMap = new Map();\n\n  paths.forEach((_path, i) => {\n    const nodes = data.repository[`history_${i}`]?.target?.history?.nodes ?? [];\n\n    nodes.forEach((/** @type {any} */ node) => {\n      if (!commitMap.has(node.oid)) {\n        commitMap.set(node.oid, {\n          sha: node.oid,\n          authorName: node.author.name,\n          authorEmail: node.author.email,\n          authorAvatarURL: node.author.avatarUrl,\n          authorLogin: node.author.user?.login,\n          date: new Date(node.committedDate),\n        });\n      }\n    });\n  });\n\n  return [...commitMap.values()].sort((a, b) => b.date.getTime() - a.date.getTime());\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      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 { getTokenPageURL, signIn, signOut } from '$lib/services/backends/git/github/auth';\nimport { commitChanges, fetchFileCommits } 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  DEFAULT_PKCE_AUTH_PATH,\n  DEFAULT_PKCE_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 { cmsConfig } from '$lib/services/config';\nimport { prefs } from '$lib/services/user/prefs.svelte';\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(cmsConfig) ?? {};\n\n  if (backend?.name !== BACKEND_NAME) {\n    return undefined;\n  }\n\n  const {\n    repo: projectPath,\n    branch,\n    auth_type: authType = '',\n    // @ts-ignore PKCE is not yet supported\n    base_url: authRoot = authType === 'pkce' ? DEFAULT_PKCE_AUTH_ROOT : DEFAULT_AUTH_ROOT,\n    // @ts-ignore PKCE is not yet supported\n    auth_endpoint: authPath = authType === 'pkce' ? DEFAULT_PKCE_AUTH_PATH : DEFAULT_AUTH_PATH,\n    app_id: clientId = '',\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    include_credentials: includeCredentials = false,\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      tokenPageURL: getTokenPageURL(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      authScope: 'repo,user',\n      authURL,\n      tokenURL: authURL.replace('/authorize', '/access_token'),\n      restBaseURL: normalizeRestBaseURL(restApiRoot),\n      graphqlBaseURL: normalizeGraphQLBaseURL(graphqlApiRoot),\n      includeCredentials,\n    }),\n  );\n\n  Object.assign(graphqlVars, { owner, repo, branch });\n\n  if (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  fetchFileCommits,\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 { BACKEND_NAME } from '$lib/services/backends/git/gitlab/constants';\nimport { fetchUserProfile } from '$lib/services/backends/git/shared/user';\n\n/**\n * @import { AuthTokens, User } from '$lib/types/private';\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 = (tokens) =>\n  fetchUserProfile(tokens, BACKEND_NAME, {\n    name: 'name',\n    login: 'username',\n    profileURL: 'web_url',\n  });\n","import { getUserProfile } from '$lib/services/backends/git/gitlab/user';\nimport { apiConfig } from '$lib/services/backends/git/shared/api';\nimport { getTokens } from '$lib/services/backends/git/shared/auth';\n\n/**\n * @import { SignInOptions, User } from '$lib/types/private';\n */\n\n/**\n * Get the URL of the page for creating a new Personal Access Token (PAT) on GitLab.\n * @param {string} repoURL Repository URL, e.g. `https://gitlab.com/owner/repo`.\n * @returns {string} URL to create a new PAT.\n * @see https://docs.gitlab.com/user/profile/personal_access_tokens/\n */\nexport const getTokenPageURL = (repoURL) => {\n  const { origin } = new URL(repoURL);\n\n  const params = new URLSearchParams({\n    name: 'Sveltia CMS',\n    scopes: 'api,read_user',\n  });\n\n  return `${origin}/-/user_settings/personal_access_tokens?${params}`;\n};\n\n/**\n * 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 (options) => {\n  const { token, refreshToken } = (await getTokens({ options, apiConfig })) ?? {};\n\n  if (!token) {\n    return undefined;\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 { _ } from '@sveltia/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/account.svelte';\n\n/**\n * @import { RepositoryBaseURLs, RepositoryInfo, User } 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 CMS configuration.\n * @returns {RepositoryBaseURLs} An object containing the tree base URL for browsing files, and the\n * 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  commitBaseURL: `${repoURL}/-/commit`,\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/projects/#list-all-members-of-a-project\n * @see https://docs.gitlab.com/api/service_accounts/#list-all-project-service-accounts\n */\nexport const checkRepositoryAccess = async () => {\n  const { owner, repo } = repository;\n  const { id, login, bot } = /** @type {User} */ (user.account);\n  const baseURL = `/projects/${encodeURIComponent(`${owner}/${repo}`)}`;\n  const url = bot ? `${baseURL}/service_accounts` : `${baseURL}/users?search=${login}`;\n\n  const response = /** @type {Response} */ (\n    await fetchAPI(url, {\n      headers: { Accept: 'application/json' },\n      responseType: 'raw',\n    })\n  );\n\n  const users = response.ok ? /** @type {{ id: number }[]} */ (await response.json()) : [];\n\n  if (!users.some((u) => u.id === id)) {\n    throw new Error('Not a collaborator of the repository', {\n      cause: new Error(_('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(_('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(_('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 { _ } from '@sveltia/i18n';\nimport { encodeBase64 } from '@sveltia/utils/file';\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, FileCommit } 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(_('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(_('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\n/**\n * Fetch the avatar URL for a given email address.\n * @param {string} email Email address.\n * @returns {Promise<string | undefined>} Avatar URL, or `undefined` if not available.\n * @see https://docs.gitlab.com/api/avatar/\n */\nconst fetchAvatarURL = async (email) => {\n  try {\n    const { avatar_url: avatarURL } = /** @type {{ avatar_url: string }} */ (\n      await fetchAPI(`/avatar?email=${encodeURIComponent(email)}&size=48`)\n    );\n\n    return avatarURL || undefined;\n  } catch {\n    return undefined;\n  }\n};\n\n/**\n * Fetch commit history for the given file paths.\n * @param {string[]} paths File paths to fetch commit history for.\n * @returns {Promise<FileCommit[]>} Deduplicated and sorted list of commits.\n * @see https://docs.gitlab.com/api/commits/#list-repository-commits\n */\nexport const fetchFileCommits = async (paths) => {\n  const { owner, repo, branch } = repository;\n  const projectId = encodeURIComponent(`${owner}/${repo}`);\n\n  const results = await Promise.all(\n    paths.map(\n      (path) =>\n        /** @type {Promise<any[]>} */ (\n          fetchAPI(\n            `/projects/${projectId}/repository/commits` +\n              `?ref_name=${encodeURIComponent(branch ?? '')}` +\n              `&path=${encodeURIComponent(path)}&per_page=100`,\n          )\n        ),\n    ),\n  );\n\n  /** @type {Map<string, FileCommit>} */\n  const commitMap = new Map();\n\n  results.flat().forEach((commit) => {\n    if (!commitMap.has(commit.id)) {\n      commitMap.set(commit.id, {\n        sha: commit.id,\n        authorName: commit.author_name,\n        authorEmail: commit.author_email,\n        authorAvatarURL: undefined,\n        date: new Date(commit.committed_date),\n      });\n    }\n  });\n\n  // Resolve avatar URLs for unique author emails via the GitLab Avatar API\n  /** @type {string[]} */\n  const uniqueEmails = /** @type {string[]} */ (\n    [...new Set([...commitMap.values()].map((c) => c.authorEmail))].filter((e) => !!e)\n  );\n\n  /** @type {Map<string, string | undefined>} */\n  const avatarMap = new Map(\n    await Promise.all(\n      uniqueEmails.map(\n        async (email) => /** @type {const} */ ([email, await fetchAvatarURL(email)]),\n      ),\n    ),\n  );\n\n  const commitList = [...commitMap.values()].sort((a, b) => b.date.getTime() - a.date.getTime());\n\n  commitList.forEach((commit) => {\n    commit.authorAvatarURL = avatarMap.get(/** @type {string} */ (commit.authorEmail));\n  });\n\n  return commitList;\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            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.\n * @param {string[]} paths List of file paths to fetch.\n * @param {string} query GraphQL query string.\n * @returns {Promise<Record<string, BlobItem>>} Fetched blobs mapped by file path.\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 (paths, query) => {\n  if (!paths.length) {\n    return {};\n  }\n\n  const { isSelfHosted = false } = repository;\n  const batchSize = isSelfHosted ? 20 : 100;\n  const fetchingPaths = [...paths];\n  /** @type {BlobItem[]} */\n  const blobs = [];\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, giving the following conditions:\n  // 1. The max number of records is 100\n  // 2. The max query complexity is 250 or 300\n  // 3. The total blob size must be under 20 MB (since GitLab 18.4.5)\n  // @see https://github.com/sveltia/sveltia-cms/issues/525\n  // @see https://gitlab.com/gitlab-org/gitlab/-/issues/576497\n  // The batch size is reduced to 20 for self-hosted instances because they typically run on less\n  // powerful hardware, which may lead to timeout issues.\n  for (;;) {\n    const currentPaths = fetchingPaths.splice(0, batchSize);\n\n    const result = /** @type {FetchBlobsResponse} */ (\n      await fetchGraphQL(query, { paths: currentPaths })\n    );\n\n    blobs.push(...result.project.repository.blobs.nodes);\n\n    if (!fetchingPaths.length) {\n      break;\n    }\n  }\n\n  // Map the blobs back to their respective file paths\n  return Object.fromEntries(paths.map((path, index) => [path, blobs[index]]));\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 * This function is unused at the moment due to performance concerns but may be used in the future.\n * @param {string[]} paths List of file paths to fetch.\n * @returns {Promise<Record<string, GitLabCommit>>} Fetched commit information for each file.\n */\nexport const fetchCommits = async (paths) => {\n  const fetchingPaths = [...paths];\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 = fetchingPaths.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 (!fetchingPaths.length) {\n      break;\n    }\n  }\n\n  // Map the commits back to their respective file paths\n  return Object.fromEntries(paths.map((path, index) => [path, commits[index]]));\n};\n\n/**\n * Parse the file contents from the API response.\n * @param {object} args Arguments.\n * @param {BaseFileListItem[]} args.fetchingFiles Base file list.\n * @param {Record<string, BlobItem>} args.blobs Raw text blobs.\n * @param {Record<string, BlobItem>} [args.sizes] File sizes.\n * @param {Record<string, GitLabCommit>} [args.commits] Commit information for each file.\n * @returns {Promise<RepositoryContentsMap>} Parsed file contents map.\n */\nexport const parseFileContents = async ({ fetchingFiles, blobs, sizes = {}, commits = {} }) => {\n  const entries = fetchingFiles.map(({ path, sha }) => {\n    const commit = commits[path];\n\n    const data = {\n      sha,\n      size: Number(sizes[path]?.size ?? 0),\n      text: blobs[path]?.rawTextBlob ?? undefined,\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  dataLoadedProgress.set(0);\n\n  // Show a fake progressbar because the request waiting time is long\n  const dataLoadedProgressInterval = window.setInterval(() => {\n    /* v8 ignore next */\n    dataLoadedProgress.update((progress = 0) => progress + 1);\n  }, fetchingFiles.length / 10);\n\n  // Fetch blobs for entry/config files only\n  const textPaths = fetchingFiles.filter(({ type }) => type !== 'asset').map(({ path }) => path);\n  const blobs = await fetchBlobs(textPaths, FETCH_BLOBS_QUERY);\n\n  window.clearInterval(dataLoadedProgressInterval);\n  dataLoadedProgress.set(undefined);\n\n  return parseFileContents({ fetchingFiles, blobs });\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 { getTokenPageURL, signIn, signOut } from '$lib/services/backends/git/gitlab/auth';\nimport { commitChanges, fetchFileCommits } 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 { cmsConfig } from '$lib/services/config';\nimport { prefs } from '$lib/services/user/prefs.svelte';\n\n/**\n * @import { ApiEndpointConfig, BackendService, RepositoryInfo } from '$lib/types/private';\n */\n\nconst REPO_PATH_REGEX = /(?<owner>.+)\\/(?<repo>[^/]+)$/;\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(cmsConfig) ?? {};\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    include_credentials: includeCredentials = false,\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 } = /** @type {string} */ (projectPath).match(REPO_PATH_REGEX)?.groups ?? {};\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      tokenPageURL: getTokenPageURL(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      authScope: 'api',\n      authURL,\n      tokenURL: authURL.replace('/authorize', '/token'),\n      authScheme: 'Bearer',\n      restBaseURL: stripSlashes(restApiRoot),\n      graphqlBaseURL: stripSlashes(graphqlApiRoot),\n      includeCredentials,\n    }),\n  );\n\n  Object.assign(graphqlVars, {\n    fullPath: repoPath,\n    branch,\n  });\n\n  if (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  fetchFileCommits,\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 * @see https://sveltiacms.app/en/docs/backends\n */\nexport const allBackendServices = {\n  github,\n  gitlab,\n  gitea,\n  local,\n  'test-repo': test,\n};\n\n/**\n * List of backend services that are implemented in Netlify/Decap CMS but are not supported in\n * Sveltia CMS for performance and/or deprecation reasons.\n * @type {Record<string, { label: string, deprecated?: boolean }>}\n * @see https://sveltiacms.app/en/docs/migration/netlify-decap-cms#features-not-to-be-implemented\n */\nexport const unsupportedBackends = {\n  azure: { label: 'Azure DevOps' },\n  bitbucket: { label: 'Bitbucket' },\n  'git-gateway': { label: 'Git Gateway', deprecated: true },\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","/* eslint-disable no-await-in-loop */\n\nimport { sleep } from '@sveltia/utils/misc';\nimport { isObject } from '@sveltia/utils/object';\nimport { get } from 'svelte/store';\n\nimport { cmsConfig } from '$lib/services/config';\n\n/**\n * @import {\n * ExternalAsset,\n * MediaLibraryFetchOptions,\n * MediaLibraryService,\n * } from '$lib/types/private';\n * @import { CloudinaryMediaLibrary, CmsConfig, MediaField } from '$lib/types/public';\n */\n\n/**\n * @typedef {object} CloudinaryResource\n * @property {string} asset_id Asset ID.\n * @property {string} filename Filename without extension.\n * @property {string} format File format/extension.\n * @property {string} resource_type Resource type (image, video, raw).\n * @property {string} type Upload type.\n * @property {string} secure_url Secure URL.\n * @property {number} bytes File size in bytes.\n * @property {string} created_at Creation timestamp.\n * @property {number} [width] Image width in pixels.\n * @property {number} [height] Image height in pixels.\n */\n\n/**\n * @typedef {object} CloudinaryListResponse\n * @property {CloudinaryResource[]} resources List of resources.\n * @property {string} [next_cursor] Next page cursor.\n */\n\n/**\n * Cloudinary Media Library console URL. Used for the popup and iframe src.\n */\nexport const CONSOLE_BASE_URL = 'https://console.cloudinary.com/console/media_library';\n\n/**\n * Cloudinary Media Library iframe origin.\n */\nexport const FRAME_ORIGIN = new URL(CONSOLE_BASE_URL).origin;\n\n/**\n * Cloudinary Media Library iframe’s `src` search parameters.\n */\nexport const FRAME_SRC_PARAMS = [\n  'cloud_name',\n  'api_key',\n  'username',\n  'timestamp',\n  'signature',\n  'integration',\n  'use_saml',\n  'saml_iframe_support',\n];\n\n/**\n * Cloudinary Media Library configuration properties.\n */\nexport const CONFIG_PROPS = [\n  'integration',\n  'inline_container',\n  'z_index',\n  'multiple',\n  'max_files',\n  'default_transformations',\n  'insert_caption',\n  'remove_header',\n  'folder',\n  'search',\n  'collection',\n  'asset',\n  'transformation',\n  'sandboxNotAllowedAttributes',\n  'theme',\n];\n\n/**\n * Get Cloudinary library options from site config.\n * @internal\n * @param {CmsConfig | MediaField} [config] CMS configuration or field configuration.\n * @returns {CloudinaryMediaLibrary | false | undefined} Configuration object, or `false` if\n * explicitly disabled.\n */\nexport const getLibraryOptions = (config) => {\n  const _cmsConfig = get(cmsConfig);\n\n  config ??= _cmsConfig;\n\n  // Check for explicit media_libraries.cloudinary config (preferred)\n  if (config?.media_libraries && 'cloudinary' in config.media_libraries) {\n    return config.media_libraries.cloudinary;\n  }\n\n  // Fall back to legacy media_library config\n  if (!config?.media_library) {\n    return undefined;\n  }\n\n  const isExplicitlyCloudinary = config.media_library.name === 'cloudinary';\n\n  const isImplicitlyCloudinary =\n    !config.media_library.name && _cmsConfig?.media_library?.name === 'cloudinary';\n\n  if (isExplicitlyCloudinary || isImplicitlyCloudinary) {\n    return /** @type {CloudinaryMediaLibrary} */ (config.media_library);\n  }\n\n  return undefined;\n};\n\n/**\n * @type {Map<string, CloudinaryMediaLibrary>}\n */\nexport const optionCacheMap = new Map();\n\n/**\n * Get merged Cloudinary library options from site and field config.\n * Field config options override site config options.\n * @param {MediaField} [fieldConfig] Field configuration.\n * @returns {CloudinaryMediaLibrary} Merged configuration object.\n */\nexport const getMergedLibraryOptions = (fieldConfig) => {\n  const cacheKey = fieldConfig ? JSON.stringify(fieldConfig) : 'global';\n  const cache = optionCacheMap.get(cacheKey);\n\n  if (cache) {\n    return cache;\n  }\n\n  const siteOptions = getLibraryOptions() || { config: {} };\n  const fieldOptions = getLibraryOptions(fieldConfig) || { config: {} };\n\n  const options = {\n    ...siteOptions,\n    ...fieldOptions,\n    config: {\n      ...siteOptions.config,\n      ...fieldOptions.config,\n    },\n  };\n\n  optionCacheMap.set(cacheKey, options);\n\n  return options;\n};\n\n/**\n * Get Cloudinary configuration from site config.\n * @internal\n * @returns {{ cloudName?: string; apiKey?: string }} Cloudinary configuration.\n */\nexport const getCloudConfig = () => {\n  const options = getLibraryOptions();\n  const { cloud_name: cloudName, api_key: apiKey } = (options ? options.config : undefined) ?? {};\n\n  return { cloudName, apiKey };\n};\n\n/**\n * Check if Cloudinary integration is enabled.\n * @param {MediaField} [fieldConfig] Field configuration.\n * @returns {boolean} True if enabled, false otherwise.\n */\nexport const isEnabled = (fieldConfig) => {\n  const options = getLibraryOptions(fieldConfig) ?? getLibraryOptions();\n  const { cloud_name: cloudName, api_key: apiKey } = (options ? options.config : undefined) ?? {};\n\n  return !!(cloudName && apiKey);\n};\n\n/**\n * Convert transformation object to Cloudinary transformation string.\n * @internal\n * @param {Record<string, any>} transformation Transformation object. E.g. `{ width: 400, crop:\n * 'scale' }`.\n * @returns {string} Transformation string. E.g. `w_400,c_scale`.\n * @see https://cloudinary.com/documentation/transformation_reference\n * @see https://decapcms.org/docs/cloudinary/#image-transformations\n * @see https://sveltiacms.app/en/docs/media/cloudinary#image-transformations\n */\nexport const transformationToString = (transformation) => {\n  // Mapping from full parameter names to Cloudinary URL abbreviations\n  /** @type {Record<string, string>} */\n  const parameterMap = {\n    angle: 'a',\n    audio_codec: 'ac',\n    audio_frequency: 'af',\n    aspect_ratio: 'ar',\n    background: 'b',\n    border: 'bo',\n    color: 'co',\n    crop: 'c',\n    default_image: 'd',\n    delay: 'dl',\n    density: 'dn',\n    dpr: 'dpr',\n    duration: 'du',\n    effect: 'e',\n    end_offset: 'eo',\n    fetch_format: 'f',\n    flags: 'fl',\n    fps: 'fps',\n    gravity: 'g',\n    height: 'h',\n    overlay: 'l',\n    opacity: 'o',\n    page: 'pg',\n    quality: 'q',\n    radius: 'r',\n    start_offset: 'so',\n    streaming_profile: 'sp',\n    transformation: 't',\n    underlay: 'u',\n    video_codec: 'vc',\n    video_sampling: 'vs',\n    width: 'w',\n    x: 'x',\n    y: 'y',\n    zoom: 'z',\n  };\n\n  /** @type {string[]} */\n  const parts = [];\n\n  // Process each key in the transformation object\n  Object.keys(transformation).forEach((key) => {\n    const value = transformation[key];\n    const abbreviation = parameterMap[key] || key;\n\n    // Skip undefined/null values\n    if (value === undefined || value === null) {\n      return;\n    }\n\n    // Handle different value types\n    if (typeof value === 'boolean') {\n      // For boolean flags, only include if true\n      if (value) {\n        parts.push(abbreviation);\n      }\n    } else if (Array.isArray(value)) {\n      // For arrays, join with dots (e.g., for flags)\n      parts.push(`${abbreviation}_${value.join('.')}`);\n    } else {\n      // For all other values, use key_value format\n      parts.push(`${abbreviation}_${value}`);\n    }\n  });\n\n  // Join all parts with commas\n  return parts.join(',');\n};\n\n/**\n * Parse API results into ExternalAsset format.\n * @internal\n * @param {CloudinaryResource[]} results API results.\n * @param {object} [options] Additional options.\n * @param {MediaField} [options.fieldConfig] Field configuration for custom handling.\n * @returns {ExternalAsset[]} Assets.\n * @see https://decapcms.org/docs/cloudinary/#decap-cms-configuration-options\n * @see https://sveltiacms.app/en/docs/media/cloudinary#configuration\n */\nexport const parseResults = (results, { fieldConfig } = {}) => {\n  const {\n    output_filename_only: fileNameOnly = false,\n    use_transformations: useTransformations = true,\n    config: { default_transformations: defaultTransformations = [] } = {},\n  } = (getLibraryOptions(fieldConfig) ?? getLibraryOptions()) || {};\n\n  const transformation = /** @type {Record<string, any>[][]} */ (defaultTransformations)?.[0]?.[0];\n  const hasTransformation = useTransformations && isObject(transformation);\n\n  return results.map((result) => {\n    const {\n      asset_id: assetId,\n      resource_type: resourceType,\n      secure_url: url,\n      created_at: timestamp,\n      bytes: size,\n    } = result;\n\n    const fileName = /** @type {string} */ (url.split('/').pop());\n\n    return {\n      id: assetId,\n      description: fileName,\n      previewURL: url.replace('/upload/', '/upload/w_400,c_limit/'),\n      downloadURL: fileNameOnly\n        ? fileName\n        : hasTransformation\n          ? url.replace('/upload/', `/upload/${transformationToString(transformation)}/`)\n          : url,\n      fileName,\n      lastModified: new Date(timestamp),\n      size,\n      kind: resourceType === 'image' ? 'image' : resourceType === 'video' ? 'video' : 'other',\n    };\n  });\n};\n\n/**\n * Generate Basic Auth header for Cloudinary API.\n * @internal\n * @param {string} apiKey API key.\n * @param {string} apiSecret API secret.\n * @returns {string} Basic Auth header value.\n */\nexport const generateAuthHeader = (apiKey, apiSecret) => {\n  const credentials = `${apiKey}:${apiSecret}`;\n  const encoded = btoa(credentials);\n\n  return `Basic ${encoded}`;\n};\n\n/**\n * Fetch resources from Cloudinary API with pagination.\n * @internal\n * @param {MediaLibraryFetchOptions} options Options containing the API secret (apiKey).\n * @param {object} [config] Additional configuration.\n * @param {number} [config.maxPages] Maximum number of pages to fetch. Default: 10.\n * @param {string} [config.expression] Search expression for filtering.\n * @returns {Promise<ExternalAsset[]>} Assets.\n * @see https://cloudinary.com/documentation/admin_api#search_for_resources\n */\nexport const fetchResources = async (options, { maxPages = 10, expression } = {}) => {\n  const { cloudName, apiKey } = getCloudConfig();\n\n  if (!cloudName) {\n    return Promise.reject(new Error('Cloudinary cloud name is not configured'));\n  }\n\n  if (!apiKey) {\n    return Promise.reject(new Error('Cloudinary API key is not configured'));\n  }\n\n  const { kind, fieldConfig, apiKey: apiSecret } = options;\n\n  if (!apiSecret) {\n    return Promise.reject(new Error('Cloudinary API secret is not provided'));\n  }\n\n  const authHeader = generateAuthHeader(apiKey, apiSecret);\n  const endpoint = `https://api.cloudinary.com/v1_1/${cloudName}/resources/search`;\n\n  const headers = {\n    'Content-Type': 'application/json',\n    Authorization: authHeader,\n  };\n\n  /** @type {CloudinaryResource[]} */\n  const allResources = [];\n  /** @type {string | undefined} */\n  let nextCursor;\n\n  // Fetch up to maxPages pages\n  for (let page = 0; page < maxPages; page += 1) {\n    // Build expression with kind filter if specified\n    let filterExpression = expression;\n\n    if (kind === 'image' && !expression) {\n      filterExpression = 'resource_type:image';\n    } else if (kind === 'image' && expression) {\n      filterExpression = `(${expression}) AND resource_type:image`;\n    }\n\n    const params = new URLSearchParams({\n      max_results: '100',\n      ...(filterExpression && { expression: filterExpression }),\n      ...(nextCursor && { next_cursor: nextCursor }),\n    });\n\n    const response = await fetch(`${endpoint}?${params}`, { headers });\n\n    if (!response.ok) {\n      const errorText = await response.text();\n\n      return Promise.reject(new Error(`Failed to fetch resources: ${errorText}`));\n    }\n\n    /** @type {CloudinaryListResponse} */\n    const data = await response.json();\n\n    allResources.push(...data.resources);\n    nextCursor = data.next_cursor;\n\n    if (!nextCursor) {\n      break;\n    }\n\n    // Wait for a bit before requesting the next page\n    await sleep(50);\n  }\n\n  return parseResults(allResources, { fieldConfig });\n};\n\n/**\n * List resources from Cloudinary.\n * @param {MediaLibraryFetchOptions} options Options containing the API secret (apiKey).\n * @returns {Promise<ExternalAsset[]>} Assets.\n */\nexport const list = async (options) => fetchResources(options);\n\n/**\n * Search resources in Cloudinary using the Search API.\n * @param {string} query Search query.\n * @param {MediaLibraryFetchOptions} options Options containing the API secret (apiKey).\n * @returns {Promise<ExternalAsset[]>} Assets.\n */\nexport const search = async (query, options) => {\n  // Build a search expression that searches in public_id and filename\n  const expression = `public_id:*${query}* OR filename:*${query}*`;\n\n  return fetchResources(options, { expression });\n};\n\n/**\n * Generate signature for Cloudinary upload.\n * @internal\n * @param {Record<string, string | number>} params Parameters to sign.\n * @param {string} apiSecret API secret.\n * @returns {Promise<string>} Signature.\n * @see https://cloudinary.com/documentation/upload_images#generating_authentication_signatures\n */\nexport const generateSignature = async (params, apiSecret) => {\n  // Sort parameters alphabetically and create string to sign\n  const sortedParams = Object.keys(params)\n    .sort()\n    .map((key) => `${key}=${params[key]}`)\n    .join('&');\n\n  const stringToSign = `${sortedParams}${apiSecret}`;\n  const encoder = new TextEncoder();\n  const data = encoder.encode(stringToSign);\n  const hashBuffer = await crypto.subtle.digest('SHA-256', data);\n  const hashArray = Array.from(new Uint8Array(hashBuffer));\n\n  return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');\n};\n\n/**\n * Upload files to Cloudinary.\n * @param {File[]} files Files to upload.\n * @param {MediaLibraryFetchOptions} options Options containing the API secret (apiKey).\n * @returns {Promise<ExternalAsset[]>} Uploaded assets.\n * @see https://cloudinary.com/documentation/image_upload_api_reference\n */\nexport const upload = async (files, options) => {\n  if (files.length === 0) {\n    return [];\n  }\n\n  const { cloudName, apiKey } = getCloudConfig();\n\n  if (!cloudName) {\n    return Promise.reject(new Error('Cloudinary cloud name is not configured'));\n  }\n\n  if (!apiKey) {\n    return Promise.reject(new Error('Cloudinary API key is not configured'));\n  }\n\n  const { fieldConfig, apiKey: apiSecret } = options;\n\n  if (!apiSecret) {\n    return Promise.reject(new Error('Cloudinary API secret is not provided'));\n  }\n\n  const endpoint = `https://api.cloudinary.com/v1_1/${cloudName}/auto/upload`;\n  const timestamp = Math.floor(Date.now() / 1000);\n  /** @type {CloudinaryResource[]} */\n  const uploadedResources = [];\n\n  // Upload files one by one (Cloudinary doesn’t support batch uploads in the same way)\n  // eslint-disable-next-line no-restricted-syntax\n  for (const file of files) {\n    const params = {\n      timestamp,\n    };\n\n    const signature = await generateSignature(params, apiSecret);\n    const formData = new FormData();\n\n    formData.append('file', file);\n    formData.append('api_key', apiKey);\n    formData.append('timestamp', String(timestamp));\n    formData.append('signature', signature);\n\n    const response = await fetch(endpoint, {\n      method: 'POST',\n      body: formData,\n    });\n\n    if (!response.ok) {\n      const errorText = await response.text();\n\n      throw new Error(`Failed to upload file ${file.name}: ${errorText}`);\n    }\n\n    /** @type {CloudinaryResource} */\n    const data = await response.json();\n\n    uploadedResources.push(data);\n\n    // Wait a bit between uploads to avoid rate limiting\n    if (files.length > 1) {\n      await sleep(50);\n    }\n  }\n\n  return parseResults(uploadedResources, { fieldConfig });\n};\n\n/**\n * Cloudinary media library service integration. The `list`, `search`, and `upload` methods are not\n * used at this time because Cloudinary has a CORS restriction that prevents direct API access from\n * the browser. Instead, the Cloudinary Media Library widget is used for authentication and file\n * selection/uploading.\n * @type {MediaLibraryService}\n */\nexport default {\n  serviceType: 'cloud_storage',\n  serviceId: 'cloudinary',\n  serviceLabel: 'Cloudinary',\n  serviceURL: 'https://cloudinary.com/',\n  showServiceLink: true,\n  hotlinking: true,\n  authType: 'widget',\n  developerURL: 'https://cloudinary.com/documentation/',\n  apiKeyURL: 'https://console.cloudinary.com/settings/api-keys',\n  apiKeyPattern: /^[A-Za-z0-9_-]{15,}$/,\n  isEnabled,\n};\n","/* eslint-disable no-await-in-loop */\n\nimport { sleep } from '@sveltia/utils/misc';\nimport { get } from 'svelte/store';\n\nimport { getAssetKind } from '$lib/services/assets/kinds';\nimport { cmsConfig } from '$lib/services/config';\n\n/**\n * @import { ExternalAsset, MediaLibraryFetchOptions, S3Config } from '$lib/types/private';\n * @import { CmsConfig, MediaField, MediaLibraries, S3MediaLibrary } from '$lib/types/public';\n */\n\n/**\n * Get S3-compatible library options from site config for the given service.\n * @param {keyof MediaLibraries} serviceId Service identifier matching the `media_libraries` key.\n * @param {CmsConfig | MediaField} [config] CMS configuration or field configuration.\n * @returns {S3MediaLibrary | false | undefined} Configuration object, or `false` if explicitly\n * disabled.\n */\nexport const getLibraryOptions = (serviceId, config = get(cmsConfig)) =>\n  /** @type {S3MediaLibrary | false | undefined} */ (config?.media_libraries?.[serviceId]) ??\n  (config?.media_library?.name === serviceId\n    ? /** @type {S3MediaLibrary} */ (config?.media_library)\n    : undefined);\n\n/**\n * @typedef {object} S3Object\n * @property {string} Key Object key (file path).\n * @property {string} LastModified Last modified timestamp.\n * @property {string} ETag ETag.\n * @property {number} Size File size in bytes.\n * @property {string} [ContentType] Content type.\n */\n\n/**\n * @typedef {object} S3ListResponse\n * @property {S3Object[]} Contents List of objects.\n * @property {boolean} IsTruncated Whether more results are available.\n * @property {string} [NextContinuationToken] Token for next page.\n */\n\n/**\n * Create HMAC signature.\n * @param {string | Uint8Array} key Key.\n * @param {string} data Data to sign.\n * @returns {Promise<Uint8Array>} Signature.\n */\nconst hmac = async (key, data) => {\n  const encoder = new TextEncoder();\n\n  const cryptoKey = await crypto.subtle.importKey(\n    'raw',\n    /** @type {BufferSource} */ (typeof key === 'string' ? encoder.encode(key) : key),\n    { name: 'HMAC', hash: 'SHA-256' },\n    false,\n    ['sign'],\n  );\n\n  const signature = await crypto.subtle.sign('HMAC', cryptoKey, encoder.encode(data));\n\n  return new Uint8Array(signature);\n};\n\n/**\n * Create SHA-256 hash.\n * @param {string | ArrayBuffer} data Data to hash.\n * @returns {Promise<string>} Hash.\n */\nconst sha256 = async (data) => {\n  const bytes = typeof data === 'string' ? new TextEncoder().encode(data) : data;\n  const hashBuffer = await crypto.subtle.digest('SHA-256', bytes);\n  const hashArray = Array.from(new Uint8Array(hashBuffer));\n\n  return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');\n};\n\n/**\n * Generate AWS Signature Version 4.\n * @param {object} params Parameters.\n * @param {string} params.method HTTP method.\n * @param {string} params.url Request URL.\n * @param {Record<string, string>} params.headers Request headers.\n * @param {string} params.payloadHash SHA-256 hash of the request payload.\n * @param {string} params.accessKeyId AWS access key ID.\n * @param {string} params.secretAccessKey AWS secret access key.\n * @param {string} params.region AWS region.\n * @param {string} params.service AWS service name (e.g., 's3').\n * @param {Date} params.date Request date.\n * @returns {Promise<string>} Authorization header value.\n * @see https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html\n */\nexport const generateAwsSignature = async ({\n  method,\n  url,\n  headers,\n  payloadHash,\n  accessKeyId,\n  secretAccessKey,\n  region,\n  service,\n  date,\n}) => {\n  const urlObj = new URL(url);\n  const amzDate = date.toISOString().replace(/[:-]|\\.\\d{3}/g, '');\n  const dateStamp = amzDate.slice(0, 8);\n  // Create canonical request\n  const canonicalUri = urlObj.pathname;\n\n  const canonicalQueryString = [...urlObj.searchParams.entries()]\n    .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))\n    .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)\n    .join('&');\n\n  const canonicalHeaders = Object.entries(headers)\n    .map(([key, value]) => `${key.toLowerCase()}:${value.trim()}`)\n    .sort()\n    .join('\\n');\n\n  const signedHeaders = Object.keys(headers)\n    .map((key) => key.toLowerCase())\n    .sort()\n    .join(';');\n\n  const canonicalRequest = [\n    method,\n    canonicalUri,\n    canonicalQueryString,\n    `${canonicalHeaders}\\n`,\n    signedHeaders,\n    payloadHash,\n  ].join('\\n');\n\n  // Create string to sign\n  const algorithm = 'AWS4-HMAC-SHA256';\n  const credentialScope = `${dateStamp}/${region}/${service}/aws4_request`;\n  const canonicalRequestHash = await sha256(canonicalRequest);\n  const stringToSign = [algorithm, amzDate, credentialScope, canonicalRequestHash].join('\\n');\n  // Calculate signature\n  const kDate = await hmac(`AWS4${secretAccessKey}`, dateStamp);\n  const kRegion = await hmac(kDate, region);\n  const kService = await hmac(kRegion, service);\n  const kSigning = await hmac(kService, 'aws4_request');\n  const signature = await hmac(kSigning, stringToSign);\n\n  const signatureHex = Array.from(signature)\n    .map((b) => b.toString(16).padStart(2, '0'))\n    .join('');\n\n  return [\n    `${algorithm} Credential=${accessKeyId}/${credentialScope},`,\n    `SignedHeaders=${signedHeaders}, Signature=${signatureHex}`,\n  ].join(' ');\n};\n\n/**\n * Make a signed S3 API request.\n * @param {object} params Parameters.\n * @param {string} params.method HTTP method.\n * @param {string} params.url Request URL.\n * @param {S3Config} params.config S3 configuration.\n * @param {string} params.secretAccessKey AWS secret access key.\n * @param {string | ArrayBuffer} [params.body] Request body.\n * @param {Record<string, string>} [params.extraHeaders] Additional headers.\n * @returns {Promise<Response>} Response.\n */\nexport const signedRequest = async ({\n  method,\n  url,\n  config,\n  secretAccessKey,\n  body = '',\n  extraHeaders = {},\n}) => {\n  const { access_key_id: accessKeyId, region = 'us-east-1' } = config;\n  const date = new Date();\n  const urlObj = new URL(url);\n  const payloadHash = await sha256(body);\n\n  const headers = {\n    Host: urlObj.host,\n    'x-amz-date': date.toISOString().replace(/[:-]|\\.\\d{3}/g, ''),\n    'x-amz-content-sha256': payloadHash,\n    ...extraHeaders,\n  };\n\n  const authorization = await generateAwsSignature({\n    method,\n    url,\n    headers,\n    payloadHash,\n    accessKeyId,\n    secretAccessKey,\n    region,\n    service: 's3',\n    date,\n  });\n\n  return fetch(url, {\n    method,\n    headers: { ...headers, Authorization: authorization },\n    ...(body && { body }),\n  });\n};\n\n/**\n * Parse XML response to JSON.\n * @param {string} xml XML string.\n * @returns {any} Parsed object.\n */\nexport const parseXml = (xml) => {\n  const parser = new DOMParser();\n  const doc = parser.parseFromString(xml, 'text/xml');\n\n  /**\n   * Convert XML node to object.\n   * @param {Element} node XML node.\n   * @returns {any} Object.\n   */\n  const nodeToObject = (node) => {\n    if (node.children.length === 0) {\n      return node.textContent;\n    }\n\n    /** @type {Record<string, any>} */\n    const obj = {};\n\n    Array.from(node.children).forEach((child) => {\n      const key = child.tagName;\n      const value = nodeToObject(child);\n\n      if (obj[key]) {\n        if (Array.isArray(obj[key])) {\n          obj[key].push(value);\n        } else {\n          obj[key] = [obj[key], value];\n        }\n      } else {\n        obj[key] = value;\n      }\n    });\n\n    return obj;\n  };\n\n  return nodeToObject(doc.documentElement);\n};\n\n/**\n * Build base URL for S3 object.\n * @param {object} params Parameters.\n * @param {string} params.bucket Bucket name.\n * @param {string} params.key Object key.\n * @param {string} [params.endpoint] Custom endpoint.\n * @param {string} [params.region] AWS region.\n * @param {boolean} [params.forcePathStyle] Use path-style URLs.\n * @param {string} [params.publicUrl] Base URL for public access (overrides endpoint for asset\n * URLs). Used for Cloudflare R2 r2.dev or custom domain URLs.\n * @returns {string} Base URL.\n */\nexport const buildObjectUrl = ({ bucket, key, endpoint, region, forcePathStyle, publicUrl }) => {\n  if (publicUrl) {\n    return `${publicUrl}/${key}`;\n  }\n\n  if (endpoint) {\n    return `${endpoint}/${bucket}/${key}`;\n  }\n\n  if (forcePathStyle) {\n    return `https://s3.${region}.amazonaws.com/${bucket}/${key}`;\n  }\n\n  return `https://${bucket}.s3.${region}.amazonaws.com/${key}`;\n};\n\n/**\n * Parse S3 list response into ExternalAsset format.\n * @param {S3Object[]} objects S3 objects.\n * @param {S3Config} config S3 configuration.\n * @returns {ExternalAsset[]} Assets.\n */\nexport const parseS3Results = (objects, config) => {\n  const {\n    bucket,\n    region,\n    endpoint,\n    force_path_style: forcePathStyle,\n    prefix = '',\n    public_url: publicUrl,\n  } = config;\n\n  return objects.map((obj) => {\n    const key = obj.Key;\n    const fileName = key.split('/').pop() || key;\n    const displayKey = prefix && key.startsWith(prefix) ? key.slice(prefix.length) : key;\n    const baseUrl = buildObjectUrl({ bucket, key, endpoint, region, forcePathStyle, publicUrl });\n\n    return {\n      id: key,\n      description: displayKey,\n      previewURL: baseUrl,\n      downloadURL: baseUrl,\n      fileName,\n      lastModified: new Date(obj.LastModified),\n      size: Number(obj.Size),\n      kind: getAssetKind(key),\n    };\n  });\n};\n\n/**\n * List objects from S3-compatible storage.\n * @param {S3Config} config S3 configuration.\n * @param {MediaLibraryFetchOptions} options Fetch options (apiKey contains secret access key).\n * @param {object} [params] Additional parameters.\n * @param {number} [params.maxPages] Maximum number of pages to fetch. Default: 10.\n * @returns {Promise<ExternalAsset[]>} Assets.\n */\nexport const listS3Objects = async (config, options, { maxPages = 10 } = {}) => {\n  const { bucket, region, endpoint, force_path_style: forcePathStyle, prefix = '' } = config;\n  const { kind, apiKey: secretAccessKey } = options;\n\n  if (!secretAccessKey) {\n    return Promise.reject(new Error('S3 secret access key is required'));\n  }\n\n  /** @type {S3Object[]} */\n  const allObjects = [];\n  /** @type {string | undefined} */\n  let continuationToken;\n\n  // Fetch up to maxPages pages\n  for (let page = 0; page < maxPages; page += 1) {\n    const params = new URLSearchParams({\n      'list-type': '2',\n      'max-keys': '1000',\n      ...(prefix && { prefix }),\n      ...(continuationToken && { 'continuation-token': continuationToken }),\n    });\n\n    const url = endpoint\n      ? `${endpoint}/${bucket}?${params}`\n      : forcePathStyle\n        ? `https://s3.${region}.amazonaws.com/${bucket}?${params}`\n        : `https://${bucket}.s3.${region}.amazonaws.com/?${params}`;\n\n    const response = await signedRequest({ method: 'GET', url, config, secretAccessKey });\n\n    if (!response.ok) {\n      const errorText = await response.text();\n\n      return Promise.reject(new Error(`Failed to list objects: ${errorText}`));\n    }\n\n    const xml = await response.text();\n    /** @type {any} */\n    const data = parseXml(xml);\n\n    const contents = data.Contents\n      ? Array.isArray(data.Contents)\n        ? data.Contents\n        : [data.Contents]\n      : [];\n\n    // Filter out directories (keys ending with /)\n    const files = contents.filter((/** @type {S3Object} */ obj) => !obj.Key.endsWith('/'));\n\n    allObjects.push(...files);\n\n    continuationToken = data.NextContinuationToken;\n\n    if (data.IsTruncated !== 'true' || !continuationToken) {\n      break;\n    }\n\n    // Wait for a bit before requesting the next page\n    await sleep(50);\n  }\n\n  // Filter by kind if specified\n  const filteredObjects = kind\n    ? allObjects.filter((obj) => getAssetKind(obj.Key) === kind)\n    : allObjects;\n\n  return parseS3Results(filteredObjects, config);\n};\n\n/**\n * Search objects in S3-compatible storage.\n * @param {string} query Search query.\n * @param {S3Config} config S3 configuration.\n * @param {MediaLibraryFetchOptions} options Fetch options (apiKey contains secret access key).\n * @returns {Promise<ExternalAsset[]>} Assets.\n */\nexport const searchS3Objects = async (query, config, options) => {\n  // S3 doesn’t have native search, so we list all objects and filter client-side\n  const allAssets = await listS3Objects(config, options, { maxPages: 5 });\n  const lowerQuery = query.toLowerCase();\n\n  return allAssets.filter(\n    (asset) =>\n      asset.fileName.toLowerCase().includes(lowerQuery) ||\n      asset.description.toLowerCase().includes(lowerQuery),\n  );\n};\n\n/**\n * Upload files to S3-compatible storage.\n * @param {File[]} files Files to upload.\n * @param {S3Config} config S3 configuration.\n * @param {MediaLibraryFetchOptions} options Fetch options (apiKey contains secret access key).\n * @returns {Promise<ExternalAsset[]>} Uploaded assets.\n */\nexport const uploadToS3 = async (files, config, options) => {\n  if (files.length === 0) {\n    return [];\n  }\n\n  const { bucket, region, endpoint, force_path_style: forcePathStyle, prefix = '' } = config;\n  const { apiKey: secretAccessKey } = options;\n\n  if (!secretAccessKey) {\n    return Promise.reject(new Error('S3 secret access key is required'));\n  }\n\n  /** @type {S3Object[]} */\n  const uploadedObjects = [];\n\n  // Upload files one by one\n  // eslint-disable-next-line no-restricted-syntax\n  for (const file of files) {\n    // Extract only the filename to prevent path traversal via crafted File objects\n    const sanitizedName = file.name.split(/[/\\\\]/).filter(Boolean).at(-1) ?? file.name;\n    const key = prefix ? `${prefix}${sanitizedName}` : sanitizedName;\n\n    const url = endpoint\n      ? `${endpoint}/${bucket}/${key}`\n      : forcePathStyle\n        ? `https://s3.${region}.amazonaws.com/${bucket}/${key}`\n        : `https://${bucket}.s3.${region}.amazonaws.com/${key}`;\n\n    const fileContent = await file.arrayBuffer();\n\n    const response = await signedRequest({\n      method: 'PUT',\n      url,\n      config,\n      secretAccessKey,\n      body: fileContent,\n      extraHeaders: {\n        'Content-Type': file.type || 'application/octet-stream',\n        ...(config.acl !== false && { 'x-amz-acl': config.acl ?? 'public-read' }),\n      },\n    });\n\n    if (!response.ok) {\n      const errorText = await response.text();\n\n      throw new Error(`Failed to upload file ${file.name}: ${errorText}`);\n    }\n\n    uploadedObjects.push({\n      Key: key,\n      LastModified: new Date().toISOString(),\n      ETag: '',\n      Size: file.size,\n      ContentType: file.type,\n    });\n\n    // Wait a bit between uploads\n    if (files.length > 1) {\n      await sleep(50);\n    }\n  }\n\n  return parseS3Results(uploadedObjects, config);\n};\n","import {\n  getLibraryOptions as getS3LibraryOptions,\n  listS3Objects,\n  searchS3Objects,\n  uploadToS3,\n} from './core';\n\n/**\n * @import {\n * ExternalAsset,\n * MediaLibraryFetchOptions,\n * MediaLibraryService,\n * } from '$lib/types/private';\n * @import { CmsConfig, MediaField, S3MediaLibrary } from '$lib/types/public';\n */\n\n/**\n * Get Amazon S3 library options from site config.\n * @internal\n * @param {CmsConfig | MediaField} [config] CMS configuration or field configuration.\n * @returns {S3MediaLibrary | false | undefined} Configuration object, or `false` if explicitly\n * disabled.\n */\nexport const getLibraryOptions = (config) => getS3LibraryOptions('aws_s3', config);\n\n/**\n * Check if Amazon S3 integration is enabled.\n * @param {MediaField} [fieldConfig] Field configuration.\n * @returns {boolean} True if enabled, false otherwise.\n */\nexport const isEnabled = (fieldConfig) => {\n  const options = getLibraryOptions(fieldConfig) ?? getLibraryOptions();\n\n  return !!(options && options.access_key_id && options.bucket && options.region);\n};\n\n/**\n * Get the resolved library options for the given field or global S3 config.\n * @param {MediaLibraryFetchOptions} options Options containing the configuration.\n * @returns {S3MediaLibrary} Resolved config, or throws if unavailable.\n * @throws {Error} If the Amazon S3 configuration is not available.\n */\nconst getConfig = ({ fieldConfig }) => {\n  const libOptions = getLibraryOptions(fieldConfig) ?? getLibraryOptions();\n\n  if (!libOptions) {\n    throw new Error('Amazon S3 configuration is not available');\n  }\n\n  return libOptions;\n};\n\n/**\n * List files from Amazon S3.\n * @param {MediaLibraryFetchOptions} options Options containing the configuration.\n * @returns {Promise<ExternalAsset[]>} Assets.\n */\nexport const list = async (options) => listS3Objects(getConfig(options), options);\n\n/**\n * Search files in Amazon S3.\n * @param {string} query Search query.\n * @param {MediaLibraryFetchOptions} options Options containing the configuration.\n * @returns {Promise<ExternalAsset[]>} Assets.\n */\nexport const search = async (query, options) => searchS3Objects(query, getConfig(options), options);\n\n/**\n * Upload files to Amazon S3.\n * @param {File[]} files Files to upload.\n * @param {MediaLibraryFetchOptions} options Options containing the configuration.\n * @returns {Promise<ExternalAsset[]>} Uploaded assets.\n */\nexport const upload = async (files, options) => uploadToS3(files, getConfig(options), options);\n\n/**\n * Amazon S3 media library service integration.\n * @type {MediaLibraryService}\n */\nexport default {\n  serviceType: 'cloud_storage',\n  serviceId: 'aws_s3',\n  serviceLabel: 'Amazon S3',\n  serviceURL: 'https://aws.amazon.com/s3/',\n  showServiceLink: true,\n  hotlinking: true,\n  authType: 'api_key',\n  developerURL: 'https://docs.aws.amazon.com/s3/',\n  apiKeyURL: 'https://console.aws.amazon.com/iam/home#/security_credentials',\n  apiKeyPattern: /^[A-Za-z0-9/+=]{40}$/,\n  isEnabled,\n  list,\n  search,\n  upload,\n};\n","import {\n  getLibraryOptions as getS3LibraryOptions,\n  listS3Objects,\n  searchS3Objects,\n  uploadToS3,\n} from './core';\n\n/**\n * @import {\n * ExternalAsset,\n * MediaLibraryFetchOptions,\n * MediaLibraryService,\n * } from '$lib/types/private';\n * @import { CmsConfig, MediaField, S3MediaLibrary } from '$lib/types/public';\n */\n\n/**\n * Map of Cloudflare R2 jurisdiction identifiers to their endpoint infixes.\n * @type {Record<string, string>}\n * @see https://github.com/sveltia/sveltia-cms/issues/752\n * @see https://developers.cloudflare.com/r2/reference/data-location/#jurisdictional-restrictions\n */\nconst JURISDICTION_INFIXES = {\n  default: '',\n  eu: 'eu.',\n  fedramp: 'fedramp.',\n};\n\n/**\n * Build the Cloudflare R2 S3 API endpoint for the given account and jurisdiction.\n * @param {S3MediaLibrary} libOptions Library options.\n * @returns {string} Endpoint URL.\n */\nconst getEndpoint = ({ account_id: accountId, jurisdiction = 'default' }) => {\n  const infix = JURISDICTION_INFIXES[jurisdiction] ?? '';\n\n  return `https://${accountId}.${infix}r2.cloudflarestorage.com`;\n};\n\n/**\n * Get Cloudflare R2 library options from site config.\n * @internal\n * @param {CmsConfig | MediaField} [config] CMS configuration or field configuration.\n * @returns {S3MediaLibrary | false | undefined} Configuration object, or `false` if explicitly\n * disabled.\n */\nexport const getLibraryOptions = (config) => getS3LibraryOptions('cloudflare_r2', config);\n\n/**\n * Check if Cloudflare R2 integration is enabled.\n * @param {MediaField} [fieldConfig] Field configuration.\n * @returns {boolean} True if enabled, false otherwise.\n */\nexport const isEnabled = (fieldConfig) => {\n  const options = getLibraryOptions(fieldConfig) ?? getLibraryOptions();\n\n  return !!(options && options.access_key_id && options.bucket && options.account_id);\n};\n\n/**\n * Build the resolved S3 config for the given field or global R2 library options.\n * @param {MediaLibraryFetchOptions} options Options containing the configuration.\n * @returns {S3MediaLibrary} Resolved config, or throws if unavailable.\n * @throws {Error} If the Cloudflare R2 configuration is not available.\n */\nconst getConfig = ({ fieldConfig }) => {\n  const libOptions = getLibraryOptions(fieldConfig) ?? getLibraryOptions();\n\n  if (!libOptions) {\n    throw new Error('Cloudflare R2 configuration is not available');\n  }\n\n  // R2 uses auto region\n  return {\n    ...libOptions,\n    region: 'auto',\n    endpoint: getEndpoint(libOptions),\n  };\n};\n\n/**\n * List files from Cloudflare R2.\n * @param {MediaLibraryFetchOptions} options Options containing the configuration.\n * @returns {Promise<ExternalAsset[]>} Assets.\n */\nexport const list = async (options) => listS3Objects(getConfig(options), options);\n\n/**\n * Search files in Cloudflare R2.\n * @param {string} query Search query.\n * @param {MediaLibraryFetchOptions} options Options containing the configuration.\n * @returns {Promise<ExternalAsset[]>} Assets.\n */\nexport const search = async (query, options) => searchS3Objects(query, getConfig(options), options);\n\n/**\n * Upload files to Cloudflare R2.\n * @param {File[]} files Files to upload.\n * @param {MediaLibraryFetchOptions} options Options containing the configuration.\n * @returns {Promise<ExternalAsset[]>} Uploaded assets.\n */\nexport const upload = async (files, options) => uploadToS3(files, getConfig(options), options);\n\n/**\n * Cloudflare R2 media library service integration.\n * @type {MediaLibraryService}\n */\nexport default {\n  serviceType: 'cloud_storage',\n  serviceId: 'cloudflare_r2',\n  serviceLabel: 'Cloudflare R2',\n  serviceURL: 'https://www.cloudflare.com/developer-platform/r2/',\n  showServiceLink: true,\n  hotlinking: true,\n  authType: 'api_key',\n  developerURL: 'https://developers.cloudflare.com/r2/',\n  apiKeyURL: 'https://dash.cloudflare.com/?to=/:account/r2/api-tokens',\n  apiKeyPattern: /^[A-Za-z0-9/+=]{40,}$/,\n  isEnabled,\n  list,\n  search,\n  upload,\n};\n","import {\n  getLibraryOptions as getS3LibraryOptions,\n  listS3Objects,\n  searchS3Objects,\n  uploadToS3,\n} from './core';\n\n/**\n * @import {\n * ExternalAsset,\n * MediaLibraryFetchOptions,\n * MediaLibraryService,\n * } from '$lib/types/private';\n * @import { CmsConfig, MediaField, S3MediaLibrary } from '$lib/types/public';\n */\n\n/**\n * Get DigitalOcean Spaces library options from site config.\n * @internal\n * @param {CmsConfig | MediaField} [config] CMS configuration or field configuration.\n * @returns {S3MediaLibrary | false | undefined} Configuration object, or `false` if explicitly\n * disabled.\n */\nexport const getLibraryOptions = (config) => getS3LibraryOptions('digitalocean_spaces', config);\n\n/**\n * Check if DigitalOcean Spaces integration is enabled.\n * @param {MediaField} [fieldConfig] Field configuration.\n * @returns {boolean} True if enabled, false otherwise.\n */\nexport const isEnabled = (fieldConfig) => {\n  const options = getLibraryOptions(fieldConfig) ?? getLibraryOptions();\n\n  return !!(options && options.access_key_id && options.bucket && options.region);\n};\n\n/**\n * Build the resolved S3 config for the given field or global Spaces library options.\n * @param {MediaLibraryFetchOptions} options Options containing the configuration.\n * @returns {S3MediaLibrary} Resolved config, or throws if unavailable.\n * @throws {Error} If the DigitalOcean Spaces configuration is not available.\n */\nconst getConfig = ({ fieldConfig }) => {\n  const libOptions = getLibraryOptions(fieldConfig) ?? getLibraryOptions();\n\n  if (!libOptions) {\n    throw new Error('DigitalOcean Spaces configuration is not available');\n  }\n\n  // Spaces uses the region endpoint for API calls (path-style) and virtual-hosted-style for\n  // public asset URLs, unless the user has configured a custom CDN public_url.\n  return {\n    ...libOptions,\n    endpoint: `https://${libOptions.region}.digitaloceanspaces.com`,\n    public_url:\n      libOptions.public_url ??\n      `https://${libOptions.bucket}.${libOptions.region}.digitaloceanspaces.com`,\n  };\n};\n\n/**\n * List files from DigitalOcean Spaces.\n * @param {MediaLibraryFetchOptions} options Options containing the configuration.\n * @returns {Promise<ExternalAsset[]>} Assets.\n */\nexport const list = async (options) => listS3Objects(getConfig(options), options);\n\n/**\n * Search files in DigitalOcean Spaces.\n * @param {string} query Search query.\n * @param {MediaLibraryFetchOptions} options Options containing the configuration.\n * @returns {Promise<ExternalAsset[]>} Assets.\n */\nexport const search = async (query, options) => searchS3Objects(query, getConfig(options), options);\n\n/**\n * Upload files to DigitalOcean Spaces.\n * @param {File[]} files Files to upload.\n * @param {MediaLibraryFetchOptions} options Options containing the configuration.\n * @returns {Promise<ExternalAsset[]>} Uploaded assets.\n */\nexport const upload = async (files, options) => uploadToS3(files, getConfig(options), options);\n\n/**\n * DigitalOcean Spaces media library service integration.\n * @type {MediaLibraryService}\n */\nexport default {\n  serviceType: 'cloud_storage',\n  serviceId: 'digitalocean_spaces',\n  serviceLabel: 'DigitalOcean Spaces',\n  serviceURL: 'https://www.digitalocean.com/products/spaces',\n  showServiceLink: true,\n  hotlinking: true,\n  authType: 'api_key',\n  developerURL: 'https://docs.digitalocean.com/products/spaces/',\n  apiKeyURL: 'https://cloud.digitalocean.com/account/api/spaces',\n  apiKeyPattern: /^[A-Za-z0-9/+=]{43}$/,\n  isEnabled,\n  list,\n  search,\n  upload,\n};\n","import {\n  getLibraryOptions as getS3LibraryOptions,\n  listS3Objects,\n  searchS3Objects,\n  uploadToS3,\n} from './core';\n\n/**\n * @import {\n * ExternalAsset,\n * MediaLibraryFetchOptions,\n * MediaLibraryService,\n * } from '$lib/types/private';\n * @import { CmsConfig, MediaField, S3MediaLibrary } from '$lib/types/public';\n */\n\n/**\n * Get Scaleway Object Storage library options from site config.\n * @internal\n * @param {CmsConfig | MediaField} [config] CMS configuration or field configuration.\n * @returns {S3MediaLibrary | false | undefined} Configuration object, or `false` if explicitly\n * disabled.\n */\nexport const getLibraryOptions = (config) => getS3LibraryOptions('scaleway_object_storage', config);\n\n/**\n * Check if Scaleway Object Storage integration is enabled.\n * @param {MediaField} [fieldConfig] Field configuration.\n * @returns {boolean} True if enabled, false otherwise.\n */\nexport const isEnabled = (fieldConfig) => {\n  const options = getLibraryOptions(fieldConfig) ?? getLibraryOptions();\n\n  return !!(options && options.access_key_id && options.bucket && options.region);\n};\n\n/**\n * Build the resolved S3 config for the given field or global Scaleway library options.\n * @param {MediaLibraryFetchOptions} options Options containing the configuration.\n * @returns {S3MediaLibrary} Resolved config.\n * @throws {Error} If the Scaleway Object Storage configuration is not available.\n */\nconst getConfig = ({ fieldConfig }) => {\n  const libOptions = getLibraryOptions(fieldConfig) ?? getLibraryOptions();\n\n  if (!libOptions) {\n    throw new Error('Scaleway Object Storage configuration is not available');\n  }\n\n  // Scaleway uses the region endpoint for API calls (path-style) and virtual-hosted-style for\n  // public asset URLs, unless the user has configured a custom CDN public_url.\n  return {\n    ...libOptions,\n    endpoint: `https://s3.${libOptions.region}.scw.cloud`,\n    public_url:\n      libOptions.public_url ?? `https://${libOptions.bucket}.s3.${libOptions.region}.scw.cloud`,\n  };\n};\n\n/**\n * List files from Scaleway Object Storage.\n * @param {MediaLibraryFetchOptions} options Options containing the configuration.\n * @returns {Promise<ExternalAsset[]>} Assets.\n */\nexport const list = async (options) => listS3Objects(getConfig(options), options);\n\n/**\n * Search files in Scaleway Object Storage.\n * @param {string} query Search query.\n * @param {MediaLibraryFetchOptions} options Options containing the configuration.\n * @returns {Promise<ExternalAsset[]>} Assets.\n */\nexport const search = async (query, options) => searchS3Objects(query, getConfig(options), options);\n\n/**\n * Upload files to Scaleway Object Storage.\n * @param {File[]} files Files to upload.\n * @param {MediaLibraryFetchOptions} options Options containing the configuration.\n * @returns {Promise<ExternalAsset[]>} Uploaded assets.\n */\nexport const upload = async (files, options) => uploadToS3(files, getConfig(options), options);\n\n/**\n * Scaleway Object Storage media library service integration.\n * @type {MediaLibraryService}\n */\nexport default {\n  serviceType: 'cloud_storage',\n  serviceId: 'scaleway_object_storage',\n  serviceLabel: 'Scaleway Object Storage',\n  serviceURL: 'https://www.scaleway.com/en/object-storage/',\n  showServiceLink: true,\n  hotlinking: true,\n  authType: 'api_key',\n  developerURL: 'https://www.scaleway.com/en/docs/object-storage/',\n  apiKeyURL: 'https://console.scaleway.com/iam/api-keys',\n  apiKeyPattern: /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/,\n  isEnabled,\n  list,\n  search,\n  upload,\n};\n","import {\n  getLibraryOptions as getS3LibraryOptions,\n  listS3Objects,\n  searchS3Objects,\n  uploadToS3,\n} from './core';\n\n/**\n * @import {\n * ExternalAsset,\n * MediaLibraryFetchOptions,\n * MediaLibraryService,\n * } from '$lib/types/private';\n * @import { CmsConfig, MediaField, S3MediaLibrary } from '$lib/types/public';\n */\n\n/**\n * Build the Supabase Storage S3 API endpoint for the given project.\n * @param {S3MediaLibrary} libOptions Library options.\n * @returns {string} Endpoint URL.\n * @see https://supabase.com/docs/guides/storage/s3/authentication\n */\nconst getEndpoint = ({ project_id: projectId }) =>\n  `https://${projectId}.storage.supabase.co/storage/v1/s3`;\n\n/**\n * Build the Supabase Storage public base URL for the given project and bucket.\n * @param {S3MediaLibrary} libOptions Library options.\n * @returns {string} Public base URL (bucket included; key is appended by core).\n */\nconst getPublicUrl = ({ project_id: projectId, bucket }) =>\n  `https://${projectId}.supabase.co/storage/v1/object/public/${bucket}`;\n\n/**\n * Get Supabase Storage library options from site config.\n * @internal\n * @param {CmsConfig | MediaField} [config] CMS configuration or field configuration.\n * @returns {S3MediaLibrary | false | undefined} Configuration object, or `false` if explicitly\n * disabled.\n */\nexport const getLibraryOptions = (config) => getS3LibraryOptions('supabase_storage', config);\n\n/**\n * Check if Supabase Storage integration is enabled.\n * @param {MediaField} [fieldConfig] Field configuration.\n * @returns {boolean} True if enabled, false otherwise.\n */\nexport const isEnabled = (fieldConfig) => {\n  const options = getLibraryOptions(fieldConfig) ?? getLibraryOptions();\n\n  return !!(options && options.access_key_id && options.bucket && options.project_id);\n};\n\n/**\n * Build the resolved S3 config for the given field or global Supabase library options.\n * @param {MediaLibraryFetchOptions} options Options containing the configuration.\n * @returns {S3MediaLibrary} Resolved config.\n * @throws {Error} If the Supabase Storage configuration is not available.\n */\nconst getConfig = ({ fieldConfig }) => {\n  const libOptions = getLibraryOptions(fieldConfig) ?? getLibraryOptions();\n\n  if (!libOptions) {\n    throw new Error('Supabase Storage configuration is not available');\n  }\n\n  return {\n    ...libOptions,\n    endpoint: getEndpoint(libOptions),\n    public_url: libOptions.public_url ?? getPublicUrl(libOptions),\n  };\n};\n\n/**\n * List files from Supabase Storage.\n * @param {MediaLibraryFetchOptions} options Options containing the configuration.\n * @returns {Promise<ExternalAsset[]>} Assets.\n */\nexport const list = async (options) => listS3Objects(getConfig(options), options);\n\n/**\n * Search files in Supabase Storage.\n * @param {string} query Search query.\n * @param {MediaLibraryFetchOptions} options Options containing the configuration.\n * @returns {Promise<ExternalAsset[]>} Assets.\n */\nexport const search = async (query, options) => searchS3Objects(query, getConfig(options), options);\n\n/**\n * Upload files to Supabase Storage.\n * @param {File[]} files Files to upload.\n * @param {MediaLibraryFetchOptions} options Options containing the configuration.\n * @returns {Promise<ExternalAsset[]>} Uploaded assets.\n */\nexport const upload = async (files, options) => uploadToS3(files, getConfig(options), options);\n\n/**\n * Supabase Storage media library service integration.\n * @type {MediaLibraryService}\n */\nexport default {\n  serviceType: 'cloud_storage',\n  serviceId: 'supabase_storage',\n  serviceLabel: 'Supabase Storage',\n  serviceURL: 'https://supabase.com/storage',\n  showServiceLink: true,\n  hotlinking: true,\n  authType: 'api_key',\n  developerURL: 'https://supabase.com/docs/guides/storage',\n  apiKeyURL: 'https://supabase.com/dashboard/project/_/storage/settings',\n  apiKeyPattern: /^[A-Za-z0-9/+=]{40,}$/,\n  isEnabled,\n  list,\n  search,\n  upload,\n};\n","/* eslint-disable no-await-in-loop */\n\nimport { sleep } from '@sveltia/utils/misc';\nimport { get } from 'svelte/store';\n\nimport { cmsConfig } from '$lib/services/config';\nimport { formatFileName } from '$lib/services/utils/file';\n\n/**\n * @import {\n * ExternalAsset,\n * MediaLibraryFetchOptions,\n * MediaLibraryService,\n * } from '$lib/types/private';\n * @import { CmsConfig, MediaField, UploadcareMediaLibrary } from '$lib/types/public';\n */\n\n/**\n * @typedef {object} UploadcareResource\n * @property {string} uuid File UUID.\n * @property {string} original_filename Original file name.\n * @property {string} original_file_url Original file URL.\n * @property {number} size File size in bytes.\n * @property {string} mime_type MIME type.\n * @property {boolean} is_image Whether the file is an image.\n * @property {boolean} is_ready Whether the file is ready.\n * @property {object | null} content_info Content information with mime, image, video data.\n * @property {string} datetime_uploaded Upload timestamp.\n * @property {string | null} datetime_stored Storage timestamp.\n * @property {string | null} datetime_removed Removal timestamp.\n */\n\n/**\n * @typedef {object} UploadcareListResponse\n * @property {UploadcareResource[]} results List of files.\n * @property {string | null} next Next page URL.\n * @property {number} total Total number of files.\n */\n\n/**\n * Get Uploadcare library options from site config.\n * @internal\n * @param {CmsConfig | MediaField} [config] CMS configuration or field configuration.\n * @returns {UploadcareMediaLibrary | false | undefined} Configuration object, or `false` if\n * explicitly disabled.\n */\nexport const getLibraryOptions = (config = get(cmsConfig)) =>\n  config?.media_libraries?.uploadcare ??\n  (config?.media_library?.name === 'uploadcare'\n    ? /** @type {UploadcareMediaLibrary} */ (config?.media_library)\n    : undefined);\n\n/**\n * Get Uploadcare public key from library options.\n * @internal\n * @param {MediaField} [fieldConfig] Field configuration.\n * @returns {string | undefined} Public key.\n */\nexport const getPublicKey = (fieldConfig) => {\n  const options = getLibraryOptions(fieldConfig) ?? getLibraryOptions();\n\n  return options ? options.config?.publicKey : undefined;\n};\n/**\n * Check if Uploadcare integration is enabled.\n * @param {MediaField} [fieldConfig] Field configuration.\n * @returns {boolean} True if enabled, false otherwise.\n */\nexport const isEnabled = (fieldConfig) => !!getPublicKey(fieldConfig);\n\n/**\n * Parse API results into ExternalAsset format.\n * @internal\n * @param {UploadcareResource[]} results API results.\n * @param {object} [options] Additional options.\n * @param {MediaField} [options.fieldConfig] Field configuration for custom handling.\n * @returns {ExternalAsset[]} Assets.\n * @see https://decapcms.org/docs/uploadcare/#integration-settings\n * @see https://sveltiacms.app/en/docs/media/uploadcare\n */\nexport const parseResults = (results, { fieldConfig } = {}) => {\n  const libOptions = getLibraryOptions(fieldConfig) ?? getLibraryOptions();\n\n  const {\n    settings: { autoFilename = false, defaultOperations = undefined } = {},\n    config: { cdnBase = undefined } = {},\n  } = libOptions || {};\n\n  return results.map((result) => {\n    const {\n      uuid,\n      original_filename: fileName,\n      original_file_url: url,\n      mime_type: mimeType,\n      datetime_uploaded: timestamp,\n      size,\n    } = result;\n\n    const baseURL = `${new URL(cdnBase ?? url).origin}/${uuid}/`;\n    const isImage = mimeType.startsWith('image/');\n    const isVideo = mimeType.startsWith('video/');\n\n    return {\n      id: uuid,\n      description: fileName,\n      previewURL: `${baseURL}${isImage ? '-/preview/400x400/' : ''}`,\n      downloadURL:\n        `${baseURL}${isImage && defaultOperations ? `-${defaultOperations}` : ''}` +\n        `${autoFilename ? fileName : ''}`,\n      fileName,\n      lastModified: new Date(timestamp),\n      size,\n      kind: isImage ? 'image' : isVideo ? 'video' : 'other',\n    };\n  });\n};\n\n/**\n * Fetch files from Uploadcare API with pagination.\n * @internal\n * @param {MediaLibraryFetchOptions} options Options containing the secret key (apiKey) and kind.\n * @param {object} [config] Additional configuration.\n * @param {number} [config.maxPages] Maximum number of pages to fetch. Default: 10.\n * @param {(file: UploadcareResource) => boolean} [config.filter] Optional filter function.\n * @returns {Promise<ExternalAsset[]>} Assets.\n * @see https://uploadcare.com/api-refs/rest-api/v0.7.0/#tag/File/operation/filesList\n */\nexport const fetchFiles = async (options, { maxPages = 10, filter } = {}) => {\n  const { kind, fieldConfig, apiKey: secretKey } = options;\n  const publicKey = getPublicKey(fieldConfig);\n\n  if (!publicKey) {\n    return Promise.reject(new Error('Uploadcare public key is not configured'));\n  }\n\n  const headers = {\n    Accept: 'application/vnd.uploadcare-v0.7+json',\n    Authorization: `Uploadcare.Simple ${publicKey}:${secretKey}`,\n  };\n\n  const params = new URLSearchParams({\n    limit: '100',\n    ordering: '-datetime_uploaded',\n    stored: 'true',\n  });\n\n  /** @type {UploadcareResource[]} */\n  const allResults = [];\n  /** @type {string | null} */\n  let nextUrl = `https://api.uploadcare.com/files/?${params}`;\n\n  // Fetch up to maxPages pages\n  for (let page = 0; page < maxPages && nextUrl; page += 1) {\n    const response = await fetch(nextUrl, { headers });\n\n    if (!response.ok) {\n      return Promise.reject(new Error(`Failed to fetch files: ${response.statusText}`));\n    }\n\n    /** @type {UploadcareListResponse} */\n    const data = await response.json();\n    // Apply filters: first kind filter if specified, then custom filter if provided\n    let { results } = data;\n\n    if (kind === 'image') {\n      results = results.filter((file) => file.is_image);\n    }\n\n    if (filter) {\n      results = results.filter(filter);\n    }\n\n    allResults.push(...results);\n    nextUrl = data.next;\n\n    if (!nextUrl) {\n      break;\n    }\n\n    // Wait for a bit before requesting the next page\n    await sleep(50);\n  }\n\n  return parseResults(allResults, { fieldConfig });\n};\n\n/**\n * List files from Uploadcare.\n * @param {MediaLibraryFetchOptions} options Options containing the secret key (apiKey).\n * @returns {Promise<ExternalAsset[]>} Assets.\n */\nexport const list = async (options) => fetchFiles(options);\n\n/**\n * Search files in Uploadcare. Since Uploadcare doesn’t have a built-in search API,\n * this implementation fetches files and filters them client-side by filename.\n * @param {string} query Search query.\n * @param {MediaLibraryFetchOptions} options Options containing the secret key (apiKey).\n * @returns {Promise<ExternalAsset[]>} Assets.\n */\nexport const search = async (query, options) => {\n  const lowerQuery = query.toLowerCase();\n  /**\n   * Filter files by filename.\n   * @param {UploadcareResource} file File to check.\n   * @returns {boolean} Whether the file matches the query.\n   */\n  const filter = (file) => file.original_filename.toLowerCase().includes(lowerQuery);\n\n  return fetchFiles(options, { filter });\n};\n\n/**\n * Generate a secure signature for Uploadcare upload.\n * @internal\n * @param {string} secretKey Secret key.\n * @param {number} expire Expiration timestamp.\n * @returns {Promise<string>} Signature.\n * @see https://uploadcare.com/docs/security/secure-uploads/\n */\nexport const generateSignature = async (secretKey, expire) => {\n  const encoder = new TextEncoder();\n  const data = encoder.encode(String(expire));\n  const key = encoder.encode(secretKey);\n\n  const cryptoKey = await crypto.subtle.importKey(\n    'raw',\n    key,\n    { name: 'HMAC', hash: 'SHA-256' },\n    false,\n    ['sign'],\n  );\n\n  const signature = await crypto.subtle.sign('HMAC', cryptoKey, data);\n  const hashArray = Array.from(new Uint8Array(signature));\n\n  return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');\n};\n\n/**\n * Upload files to Uploadcare.\n * @param {File[]} files Files to upload.\n * @param {MediaLibraryFetchOptions} options Options containing the secret key (apiKey).\n * @returns {Promise<ExternalAsset[]>} Uploaded assets.\n * @see https://uploadcare.com/api-refs/upload-api/#tag/Upload/operation/baseUpload\n * @see https://uploadcare.com/docs/security/secure-uploads/\n */\nexport const upload = async (files, options) => {\n  if (files.length === 0) {\n    return [];\n  }\n\n  const { fieldConfig, apiKey: secretKey } = options;\n  const publicKey = getPublicKey(fieldConfig);\n\n  if (!publicKey) {\n    return Promise.reject(new Error('Uploadcare public key is not configured'));\n  }\n\n  if (!secretKey) {\n    return Promise.reject(new Error('Uploadcare secret key is not provided'));\n  }\n\n  // Generate signature for secure upload (expires in 30 minutes)\n  const expire = Math.floor(Date.now() / 1000) + 1800;\n  const signature = await generateSignature(secretKey, expire);\n  // Create a single FormData with all files\n  const formData = new FormData();\n\n  formData.append('UPLOADCARE_PUB_KEY', publicKey);\n  formData.append('UPLOADCARE_STORE', '1');\n  formData.append('signature', signature);\n  formData.append('expire', String(expire));\n\n  // Add all files to the same FormData\n  files.forEach((file) => {\n    formData.append(formatFileName(file.name), file);\n  });\n\n  const response = await fetch('https://upload.uploadcare.com/base/', {\n    method: 'POST',\n    body: formData,\n  });\n\n  if (!response.ok) {\n    throw new Error(`Failed to upload files: ${response.statusText}`);\n  }\n\n  const data = await response.json();\n\n  // Handle both single and multiple file responses\n  const uploadedFiles = Object.entries(data)\n    .filter(([key]) => !key.startsWith('UPLOADCARE_'))\n    .map(([fileName, uuid]) => {\n      const file = files.find((f) => f.name === fileName);\n      const mimeType = file?.type || 'application/octet-stream';\n      const isImage = mimeType.startsWith('image/');\n\n      return {\n        uuid,\n        original_filename: fileName,\n        original_file_url: `https://ucarecdn.com/${uuid}/${fileName}`,\n        size: file?.size || 0,\n        mime_type: mimeType,\n        is_image: isImage,\n        is_ready: true,\n        content_info: null,\n        datetime_uploaded: new Date().toISOString(),\n        datetime_stored: new Date().toISOString(),\n        datetime_removed: null,\n      };\n    });\n\n  return parseResults(uploadedFiles, { fieldConfig });\n};\n\n/**\n * @type {MediaLibraryService}\n */\nexport default {\n  serviceType: 'cloud_storage',\n  serviceId: 'uploadcare',\n  serviceLabel: 'Uploadcare',\n  serviceURL: 'https://uploadcare.com/',\n  showServiceLink: true,\n  hotlinking: true,\n  authType: 'api_key',\n  developerURL: 'https://uploadcare.com/docs/',\n  apiKeyURL: 'https://app.uploadcare.com/projects/-/api-keys/',\n  apiKeyPattern: /^[a-f0-9]{20}$/,\n  isEnabled,\n  list,\n  search,\n  upload,\n};\n","import cloudinary from './cloudinary';\nimport awsS3 from './s3/aws-s3';\nimport cloudflareR2 from './s3/cloudflare-r2';\nimport digitaloceanSpaces from './s3/digitalocean-spaces';\nimport scaleway from './s3/scaleway';\nimport supabase from './s3/supabase';\nimport uploadcare from './uploadcare';\n\n/**\n * @import { MediaLibraryService } from '$lib/types/private';\n * @import { CloudMediaLibraryName } from '$lib/types/public';\n */\n\n/**\n * List of all the supported cloud storage services.\n * @type {Record<string, MediaLibraryService>}\n */\nexport const allCloudStorageServices = {\n  aws_s3: awsS3,\n  cloudflare_r2: cloudflareR2, // S3-compatible\n  cloudinary,\n  digitalocean_spaces: digitaloceanSpaces, // S3-compatible\n  scaleway_object_storage: scaleway, // S3-compatible\n  supabase_storage: supabase, // S3-compatible\n  uploadcare,\n};\n\n/**\n * List of all supported cloud media library names.\n * @type {CloudMediaLibraryName[]}\n */\nexport const CLOUD_MEDIA_LIBRARY_NAMES = /** @type {any} */ (Object.keys(allCloudStorageServices));\n","import pkg from '../../../../package.json';\n\nexport const { dependencies, version } = pkg;\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 === targetWidth && originalHeight === targetHeight) {\n    return original;\n  }\n\n  const isSmaller = originalWidth <= targetWidth && 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    scale = Math.min(targetWidth / originalWidth, targetHeight / originalHeight);\n    newWidth = originalWidth * scale;\n    newHeight = originalHeight * scale;\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, isRelativePath } from '$lib/services/assets';\nimport { getAssetFoldersByPath, globalAssetFolder } from '$lib/services/assets/folders';\nimport { backend } from '$lib/services/backends';\nimport { cmsConfig } from '$lib/services/config';\nimport { allCloudStorageServices } from '$lib/services/integrations/media-libraries/cloud';\nimport { getMergedLibraryOptions } from '$lib/services/integrations/media-libraries/cloud/cloudinary';\nimport { createPath, createPathRegEx, encodeFilePath } from '$lib/services/utils/file';\nimport { transformImage } from '$lib/services/utils/media/image/transform';\nimport { renderPDF } from '$lib/services/utils/media/pdf';\n\n/**\n * @import {\n * Asset,\n * Entry,\n * InternalCmsConfig,\n * InternalImageTransformationOptions,\n * TypedFieldKeyPath,\n * } from '$lib/types/private';\n * @import { MediaField } from '$lib/types/public';\n */\n\nconst TAG_MATCH_REGEX = /{{(?<tag>.+?)}}/;\nconst TAG_REPLACE_REGEX = /{{(.+?)}}/g;\nconst URL_REGEX = /^(?:https?|data|blob):/;\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, handle, 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 if (handle) {\n    try {\n      blob = await handle.getFile();\n    } catch {\n      throw new Error('Failed to retrieve blob from file handle');\n    }\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/* v8 ignore next */\n/**\n * Reset the thumbnail database. This is used in tests to reset the state of the thumbnail database\n * between tests.\n * @internal\n */\nexport const _resetThumbnailDB = () => {\n  thumbnailDB = undefined;\n};\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  // Try to determine an entry-relative path if the asset is in the same folder as the entry, or a\n  // sub-folder of it\n  if (entryRelative) {\n    if (pathOnly) {\n      const assetFolderPath = getPathInfo(asset.path).dirname;\n\n      const entryFolderPath = entry\n        ? getPathInfo(Object.values(entry.locales)[0].path).dirname\n        : undefined;\n\n      if (assetFolderPath !== undefined && entryFolderPath !== undefined) {\n        // If the asset is in the same folder as the entry, return the file name only\n        if (assetFolderPath === entryFolderPath) {\n          return asset.name;\n        }\n\n        // Return the path relative to the entry’s folder, e.g. `images/photo.jpg`, or `undefined`\n        // if the path cannot be determined\n        const prefix = `${entryFolderPath}/`;\n\n        return asset.path.startsWith(prefix) ? asset.path.slice(prefix.length) : undefined;\n      }\n\n      const { internalPath, internalSubPath } = asset.folder;\n\n      // Resolve simple entry-relative paths like `images/photo.jpg` if the asset is in the same\n      // folder as the entry\n      if (asset.path === createPath([internalPath, internalSubPath, asset.name])) {\n        return asset.path.slice(/** @type {string} */ (internalPath).length + 1);\n      }\n    }\n\n    return undefined;\n  }\n\n  const { _baseURL: baseURL = '', output: { encode_file_path: encodingEnabled = false } = {} } =\n    /** @type {InternalCmsConfig} */ (get(cmsConfig));\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_MATCH_REGEX)?.groups?.tag;\n\n          return tag ? `(?<${tag}>[^/]+)` : escapeRegExp(segment);\n        }),\n        publicPath?.replaceAll(TAG_REPLACE_REGEX, '$<$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 base URL for assets stored in Cloudinary.\n * @param {MediaField} [fieldConfig] Field configuration.\n * @returns {string | undefined} Base URL or undefined if not applicable.\n */\nexport const getAssetBaseURL = (fieldConfig) => {\n  if (allCloudStorageServices.cloudinary?.isEnabled?.()) {\n    const options = getMergedLibraryOptions(fieldConfig);\n\n    if (options.output_filename_only && options.config?.cloud_name) {\n      return `https://res.cloudinary.com/${options.config.cloud_name}`;\n    }\n  }\n\n  return undefined;\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 {MediaField} [args.fieldConfig] Field configuration.\n * @param {TypedFieldKeyPath} [args.typedKeyPath] Field key path for field-level media folders.\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  fieldConfig,\n  typedKeyPath,\n  thumbnail = false,\n}) => {\n  if (!value) {\n    return undefined;\n  }\n\n  if (URL_REGEX.test(value)) {\n    return value;\n  }\n\n  // If the value is a relative path, try to get the asset base URL from the field config. This is a\n  // special case for Cloudinary assets.\n  if (isRelativePath(value)) {\n    const assetBaseURL = getAssetBaseURL(fieldConfig);\n\n    if (assetBaseURL) {\n      return `${assetBaseURL}/${value}`;\n    }\n  }\n\n  const asset = getAssetByPath({ value, entry, collectionName, fileName, typedKeyPath });\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","import { getDateTimeParts } from '@sveltia/utils/datetime';\nimport dayjs from 'dayjs';\nimport dayjsCustomParseFormat from 'dayjs/plugin/customParseFormat';\nimport dayjsLocalizedFormat from 'dayjs/plugin/localizedFormat';\nimport dayjsUTC from 'dayjs/plugin/utc';\nimport { get } from 'svelte/store';\n\nimport { backend } from '$lib/services/backends';\nimport { fillTemplate } from '$lib/services/common/template';\nimport { cmsConfig } from '$lib/services/config';\nimport { getEntryFoldersByPath } from '$lib/services/contents';\nimport { getCollection } from '$lib/services/contents/collection';\nimport {\n  getIndexFile,\n  isCollectionIndexFile,\n} from '$lib/services/contents/collection/entries/index-file';\nimport { parseDateTimeConfig } from '$lib/services/contents/fields/date-time/config';\nimport { getDate, isValidDate } from '$lib/services/contents/fields/date-time/helper';\n\n/**\n * @import {\n * Entry,\n * FlattenedEntryContent,\n * InternalCollection,\n * InternalCollectionFile,\n * InternalEntryCollection,\n * InternalLocaleCode,\n * } from '$lib/types/private';\n * @import { DateTimeField, Field } from '$lib/types/public';\n */\n\ndayjs.extend(dayjsCustomParseFormat);\ndayjs.extend(dayjsLocalizedFormat);\ndayjs.extend(dayjsUTC);\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 config = /** @type {DateTimeField} */ (fieldConfig);\n  const date = getDate(fieldValue, config);\n\n  if (!isValidDate(date)) {\n    return undefined;\n  }\n\n  const { utc, outputUTC } = parseDateTimeConfig(config);\n  const timeZone = utc || outputUTC ? 'UTC' : undefined;\n\n  return getDateTimeParts({ date, timeZone });\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(cmsConfig) ?? {};\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    _i18n: { defaultLocale, omitDefaultLocaleFromPreviewPath },\n  } = collectionFile ?? /** @type {InternalEntryCollection} */ (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  let template = pathTemplate;\n\n  // Handle the case where the default locale is omitted from the preview path, ensuring that the\n  // URL is correctly generated without the locale segment for the default locale.\n  if (locale === defaultLocale && omitDefaultLocaleFromPreviewPath) {\n    template = template.replace(/{{locale}}[./]/, '');\n  }\n\n  try {\n    const path = fillTemplate(template, {\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","// 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","/* eslint-disable no-continue */\n/* eslint-disable no-await-in-loop */\n/* eslint-disable no-restricted-syntax */\n\nimport { derived, get, writable } from 'svelte/store';\n\nimport { getMediaFieldURL } from '$lib/services/assets/info';\nimport { cmsConfig } from '$lib/services/config';\nimport { allEntries, allEntryFolders } from '$lib/services/contents';\nimport { getCollection } from '$lib/services/contents/collection';\nimport {\n  getIndexFile,\n  isCollectionIndexFile,\n} from '$lib/services/contents/collection/entries/index-file';\nimport { getCollectionFilesByEntry } from '$lib/services/contents/collection/files';\nimport { getAssociatedCollections } from '$lib/services/contents/entry';\nimport { getField, getPropertyValue } from '$lib/services/contents/entry/fields';\nimport { getRegex } from '$lib/services/utils/regex';\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 * Set of selected entry IDs, for O(1) membership checks in list items.\n * @type {import('svelte/store').Readable<Set<string>>}\n */\nexport const selectedEntryIdSet = derived(\n  selectedEntries,\n  ($selectedEntries) => new Set($selectedEntries.map((entry) => entry.id)),\n);\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 * @see https://sveltiacms.app/en/docs/collections/entries#filtering-entries\n */\nexport const getEntriesByCollection = (collectionName) => {\n  const collection = getCollection(collectionName);\n\n  if (!collection) {\n    return [];\n  }\n\n  const {\n    _type,\n    _i18n: { defaultLocale: locale },\n  } = collection;\n\n  const { filter } = _type === 'entry' ? collection : {};\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  // Pre-compute membership check to avoid calling getAssociatedCollections() per entry, which\n  // internally does get(allEntryFolders).filter().sort() for each entry.\n  let isMember;\n\n  if (_type === 'entry') {\n    const fullPathRegEx = collection._file?.fullPathRegEx;\n\n    isMember = fullPathRegEx\n      ? (/** @type {Entry} */ entry) =>\n          fullPathRegEx.test(Object.values(entry.locales)[0]?.path ?? '')\n      : (/** @type {Entry} */ entry) =>\n          getAssociatedCollections(entry).some(({ name }) => name === collectionName);\n  } else {\n    const validPaths = new Set(\n      get(allEntryFolders)\n        .filter(({ collectionName: name }) => name === collectionName)\n        .flatMap(({ filePathMap }) => (filePathMap ? Object.values(filePathMap) : [])),\n    );\n\n    // eslint-disable-next-line jsdoc/require-jsdoc\n    isMember = (/** @type {Entry} */ entry) => {\n      const entryPath = Object.values(entry.locales)[0]?.path;\n\n      return !!entryPath && validPaths.has(entryPath);\n    };\n  }\n\n  return get(allEntries).filter((entry) => {\n    if (!isMember(entry)) {\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 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: fieldType = 'string' } = field;\n\n  if (['image', 'file'].includes(fieldType)) {\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 (['richtext', 'markdown'].includes(fieldType)) {\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(cmsConfig)?._baseURL;\n  const assetURL = baseURL && !url.startsWith('blob:') ? url.replace(baseURL, '') : url;\n  const isBlobURL = assetURL.startsWith('blob:');\n  const isReplacing = !!newURL;\n\n  const results = await Promise.all(\n    entries.map(async (entry) => {\n      const { locales } = entry;\n      const collections = getAssociatedCollections(entry);\n      let found = false;\n\n      for (const { content } of Object.values(locales)) {\n        for (const [keyPath, value] of Object.entries(content)) {\n          if (typeof value !== 'string' || !value) continue;\n          // Pre-filter: skip values that can’t possibly contain the asset URL, avoiding the\n          // expensive getField() call for the vast majority of fields.\n          if (!isBlobURL && !value.includes(assetURL)) continue;\n\n          for (const collection of collections) {\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            let matched;\n\n            if (collectionFiles.length) {\n              matched = (\n                await Promise.all(\n                  collectionFiles.map((collectionFile) =>\n                    hasAsset({ ...hasAssetArgs, collectionFile }),\n                  ),\n                )\n              ).includes(true);\n            } else {\n              matched = await hasAsset({ ...hasAssetArgs });\n            }\n\n            if (matched) {\n              found = true;\n              if (!isReplacing) break;\n            }\n          }\n\n          if (found && !isReplacing) break;\n        }\n\n        if (found && !isReplacing) break;\n      }\n\n      return found;\n    }),\n  );\n\n  return entries.filter((_entry, index) => results[index]);\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","/**\n * @import { RelationOption } from '$lib/types/private';\n */\n\n/**\n * Cache indexed labels for each cached option array so multi-value relations don’t scan all\n * relation options for every stored value.\n * @type {WeakMap<RelationOption[], Map<any, string>>}\n */\nconst optionLabelMapCache = new WeakMap();\n\n/**\n * Create or retrieve a value-to-label index for the given relation options.\n * @param {RelationOption[]} options Relation options.\n * @returns {Map<any, string>} Option labels keyed by option value.\n */\nexport const getOptionLabelMap = (options) => {\n  const cachedLabelMap = optionLabelMapCache.get(options);\n\n  if (cachedLabelMap) {\n    return cachedLabelMap;\n  }\n\n  const labelMap = new Map();\n\n  options.forEach(({ value, label }) => {\n    if (!labelMap.has(value)) {\n      labelMap.set(value, label);\n    }\n  });\n\n  optionLabelMapCache.set(options, labelMap);\n\n  return labelMap;\n};\n\n/**\n * `WeakMap` used to assign stable numeric identities to objects for cheap cache key building,\n * avoiding the need to `JSON.stringify` large objects like `fieldConfig` or `refEntries` arrays.\n * @type {WeakMap<object, number>}\n */\nconst objectIdentityMap = new WeakMap();\nlet nextObjectId = 0;\n\n/**\n * Get a stable numeric identity for the given object (by reference).\n * @param {object} obj Object.\n * @returns {number} Numeric identity.\n */\nexport const getObjectId = (obj) => {\n  if (!objectIdentityMap.has(obj)) {\n    objectIdentityMap.set(obj, nextObjectId);\n    nextObjectId += 1;\n  }\n\n  return /** @type {number} */ (objectIdentityMap.get(obj));\n};\n","import { hasTemplateTags } from '$lib/services/common/template';\n\n/**\n * @import { Field, ListField } from '$lib/types/public';\n */\n\n/**\n * Enclose the given field name in brackets if it doesn’t contain any brackets.\n * @internal\n * @param {string} fieldName Field name e.g. `{{name.first}}` or `name.first`.\n * @returns {string} Bracketed field name, e.g. `{{name.first}}`.\n */\nexport const normalizeFieldName = (fieldName) => {\n  if (hasTemplateTags(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 * Check if the given field configuration is a complex list field with subfields (e.g.\n * `cities.*.name`) and not just a simple list field (e.g. `skills.*`).\n * @internal\n * @param {Field | undefined} fieldConfig Field configuration object.\n * @returns {boolean} Whether the field is a complex list field.\n */\nexport const isComplexListField = (fieldConfig) => {\n  if (!fieldConfig || fieldConfig.widget !== 'list') {\n    return false;\n  }\n\n  const hasFields = 'fields' in /** @type {ListField} */ (fieldConfig);\n  const hasTypes = 'types' in /** @type {ListField} */ (fieldConfig);\n\n  return hasFields || hasTypes;\n};\n","import { unique } from '@sveltia/utils/array';\n\nimport { TEMPLATE_TAG_REPLACE_REGEX } from '$lib/services/common/template/constants';\nimport { getEntrySummaryFromContent } from '$lib/services/contents/entry/summary';\nimport { normalizeFieldName } from '$lib/services/contents/fields/relation/helper/field-names';\n\n/**\n * @import { FlattenedEntryContent, InternalLocaleCode, RelationOption } from '$lib/types/private';\n * @import { FieldKeyPath, RelationField } from '$lib/types/public';\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 * Get the replacement value for a field name based on standard field types.\n * @internal\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 */\nexport const 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 * @internal\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 */\nexport const 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 * @internal\n * @param {string} template Template string with field names in {{}} brackets.\n * @returns {string[]} Array of field names.\n */\nexport const extractFieldNames = (template) =>\n  [...template.matchAll(TEMPLATE_TAG_REPLACE_REGEX)].map((m) => m[1]);\n\n/**\n * Normalize and prepare field templates for processing.\n * @internal\n * @param {RelationField} fieldConfig Field configuration.\n * @param {string} identifierField Default identifier field.\n * @returns {TemplateStrings} Normalized field templates.\n */\nexport const 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","import { escapeRegExp } from '@sveltia/utils/string';\n\nimport { getField } from '$lib/services/contents/entry/fields';\nimport { isComplexListField } from '$lib/services/contents/fields/relation/helper/field-names';\nimport { replaceTemplateFields } from '$lib/services/contents/fields/relation/helper/templates';\nimport { getOrCreate } from '$lib/services/utils/cache';\n\n/**\n * @import {\n * FlattenedEntryContent,\n * GetFieldArgs,\n * InternalLocaleCode,\n * RelationOption,\n * } from '$lib/types/private';\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: string, _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 {string} 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\nconst LIST_KEY_PATH_MATCH_REGEX = /\\.(\\d+)$/;\n\n/**\n * Analyze list field configurations and group them by base field name.\n * @internal\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 */\nexport const 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        isComplexListField: isComplexListField(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 * Cache of pre-compiled regexes for {@link processSingleSubfieldList}, keyed by base field name.\n * @type {Map<string, RegExp>}\n */\nconst singleSubfieldRegexCache = new Map();\n\n/**\n * Process single subfield list fields (e.g., `skills.*`).\n * @internal\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[]} One option per list item.\n */\nexport const processSingleSubfieldList = ({\n  baseFieldName,\n  groupEntries,\n  content,\n  templates,\n  allFieldNames,\n  context,\n  fallbackContext,\n}) => {\n  const { _displayField, _valueField, _searchField } = templates;\n\n  const regex = getOrCreate(\n    singleSubfieldRegexCache,\n    baseFieldName,\n    () => new RegExp(`^${escapeRegExp(baseFieldName)}.\\\\d+$`),\n  );\n\n  const items = Object.entries(content)\n    .filter(([k]) => regex.test(k))\n    .map(([k, v]) => {\n      // The filter above guarantees the regex matches, so `indexMatch` is always non-null\n      const indexMatch = /** @type {RegExpMatchArray} */ (k.match(LIST_KEY_PATH_MATCH_REGEX));\n\n      return { index: parseInt(indexMatch[1], 10), value: v };\n    })\n    .sort((a, b) => a.index - b.index);\n\n  return items.map(({ value: itemValue }) => {\n    // Replace all wildcards for this base field with the current item value\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}}}`, itemValue);\n      processedTemplates.value = processedTemplates.value.replaceAll(`{{${fieldName}}}`, itemValue);\n      processedTemplates.searchValue = processedTemplates.searchValue.replaceAll(\n        `{{${fieldName}}}`,\n        itemValue,\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/**\n * Regex to match complex list fields with subfields.\n * Examples: `cities.*.name` or `colors.customColors.*.colorName`.\n * @type {RegExp}\n */\nconst COMPLEX_LIST_FIELD_REGEX = /^(.+)\\.\\*\\.(.+)$/;\n/**\n * Cache of index-matching regexes for {@link processComplexListField}, keyed by\n * `\"${baseFieldName}:${subKey}\"`.\n * @type {Map<string, RegExp>}\n */\nconst complexListIndexRegexCache = new Map();\n\n/**\n * Get the subfield match from group entries.\n * @internal\n * @param {[string, any][]} groupEntries Group entries.\n * @returns {RegExpMatchArray | null} Subfield match.\n */\nexport const getSubFieldMatch = (groupEntries) => {\n  /** @type {RegExpMatchArray | null} */\n  let subFieldMatch = null;\n\n  groupEntries.some(([fieldName]) => {\n    subFieldMatch = fieldName.match(COMPLEX_LIST_FIELD_REGEX);\n\n    return !!subFieldMatch;\n  });\n\n  return subFieldMatch;\n};\n\n/**\n * Process complex list fields (e.g., `cities.*.name`).\n * @internal\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 */\nexport const processComplexListField = ({\n  groupEntries,\n  content,\n  templates,\n  allFieldNames,\n  context,\n  fallbackContext,\n}) => {\n  const [, baseFieldNameForList, subKey] = getSubFieldMatch(groupEntries) ?? [];\n\n  if (!baseFieldNameForList) {\n    return [];\n  }\n\n  const cacheKey = `${baseFieldNameForList}:${subKey}`;\n\n  const indexRegex = getOrCreate(complexListIndexRegexCache, cacheKey, () => {\n    const escapedBase = escapeRegExp(baseFieldNameForList);\n    const escapedSub = escapeRegExp(subKey);\n\n    // indexRegex subsumes the old filter-only `regex` (same semantics; `[0-9]+` ≡ `\\d+` in JS\n    // without the `u` flag), so one regex construction per call is saved.\n    return new RegExp(`^${escapedBase}.([0-9]+).${escapedSub}$`);\n  });\n\n  const listValues = Object.entries(content)\n    .filter(([k]) => indexRegex.test(k))\n    .map(([k, v]) => {\n      // The filter above guarantees `indexRegex` matches, so `indexMatch` is always non-null\n      const indexMatch = /** @type {RegExpMatchArray} */ (k.match(indexRegex));\n\n      return { index: parseInt(indexMatch[1], 10), value: v };\n    })\n    .sort((a, b) => a.index - b.index);\n\n  const { _displayField, _valueField, _searchField } = templates;\n\n  return listValues.map(({ 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(COMPLEX_LIST_FIELD_REGEX);\n\n      if (wildcardMatch) {\n        const [, baseFieldName, subFieldKey] = wildcardMatch;\n        const currentItemValue = content[`${baseFieldName}.${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    return {\n      label: label || '',\n      value: value || context.slug,\n      searchValue: searchValue || label || '',\n    };\n  });\n};\n\n/**\n * Process all list fields for an entry.\n * @internal\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 */\nexport const 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    const args = {\n      groupEntries,\n      content,\n      templates,\n      allFieldNames,\n      context,\n      fallbackContext,\n    };\n\n    const options = firstConfig.isComplexListField\n      ? processComplexListField({ ...args })\n      : processSingleSubfieldList({ ...args, baseFieldName });\n\n    results.push(...options);\n    hasProcessedListFields = true;\n  });\n\n  return { results, hasProcessedListFields };\n};\n","import { getEntrySummaryFromContent } from '$lib/services/contents/entry/summary';\nimport { getFieldReplacement } from '$lib/services/contents/fields/relation/helper/templates';\n\n/**\n * @import { FlattenedEntryContent, InternalLocaleCode, RelationOption } from '$lib/types/private';\n * @import { FieldKeyPath } from '$lib/types/public';\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 * Create a single relation option for non-list fields.\n * @internal\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 */\nexport const 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","import { isCollectionIndexFile } from '$lib/services/contents/collection/entries/index-file';\nimport { getFieldDisplayValue } from '$lib/services/contents/entry/fields';\nimport {\n  analyzeListFields,\n  processListFields,\n} from '$lib/services/contents/fields/relation/helper/list-fields';\nimport { createSimpleOption } from '$lib/services/contents/fields/relation/helper/options';\nimport { replaceTemplateFields } from '$lib/services/contents/fields/relation/helper/templates';\n\n/**\n * @import {\n * Entry,\n * FlattenedEntryContent,\n * GetFieldArgs,\n * InternalCollection,\n * InternalLocaleCode,\n * RelationOption,\n * } from '$lib/types/private';\n * @import { FieldKeyPath } from '$lib/types/public';\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 * Process a single entry to generate relation options.\n * @internal\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 */\nexport const 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.filter((name) => !name.includes('*')),\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 * @import { Entry, FlattenedEntryContent } from '$lib/types/private';\n * @import { RelationFieldFilterOptions } from '$lib/types/public';\n */\n\nconst FIELD_TEMPLATE_REGEX = /^{{fields\\.(.+?)}}$/;\n\n/**\n * Resolve `{{fields.fieldName}}` and `{{slug}}` template strings in filter values against the entry\n * currently being edited. Unresolvable templates are dropped from the values array so they do not\n * accidentally match `undefined` content fields.\n * @internal\n * @param {RelationFieldFilterOptions[]} filters Entry filters.\n * @param {FlattenedEntryContent | undefined} currentLocaleValues Current locale field values of the\n * entry being edited, or `undefined` when not available (e.g. backlink resolution).\n * @param {string | undefined} currentSlug Current slug of the entry being edited, or `undefined`\n * when not yet determined (e.g. new entry draft).\n * @returns {RelationFieldFilterOptions[]} Filters with template values resolved.\n */\nexport const resolveFilterValues = (filters, currentLocaleValues, currentSlug = undefined) =>\n  filters.map(({ field, values, exclude }) => ({\n    field,\n    exclude,\n    values: values.flatMap((v) => {\n      if (typeof v !== 'string') return [v];\n\n      if (v === '{{slug}}') {\n        // Drop if slug not yet determined (new entry draft)\n        return currentSlug ? [currentSlug] : [];\n      }\n\n      const match = v.match(FIELD_TEMPLATE_REGEX);\n\n      if (!match) return [v];\n\n      // Template found — resolve against current entry values\n      const resolved = currentLocaleValues?.[match[1]];\n\n      // Drop unresolvable templates to avoid false matches\n      return resolved !== undefined ? [resolved] : [];\n    }),\n  }));\n\n/**\n * Filter entries based on file name and entry filters.\n * @internal\n * @param {object} args Arguments.\n * @param {Entry[]} args.refEntries Reference entries.\n * @param {string} args.locale Current locale.\n * @param {string} [args.fileName] File name to filter by.\n * @param {RelationFieldFilterOptions[]} [args.entryFilters] Entry filters to apply.\n * @param {string} [args.defaultLocale] Default locale from collection’s i18n configuration.\n * @returns {{ refEntry: Entry, content: FlattenedEntryContent }[]} Filtered entries with content.\n */\nexport const filterAndPrepareEntries = ({\n  refEntries,\n  locale,\n  fileName = undefined,\n  entryFilters = [],\n  defaultLocale = undefined,\n}) =>\n  refEntries\n    .filter((refEntry) => !fileName || fileName === refEntry.slug)\n    .map((refEntry) => {\n      // Fall back to the collection’s default locale, then `_default` (no i18n) as a final fallback\n      const { content } =\n        refEntry.locales[locale] ??\n        (defaultLocale ? refEntry.locales[defaultLocale] : undefined) ??\n        refEntry.locales._default ??\n        {};\n\n      return {\n        refEntry,\n        hasContent: !!content && Object.keys(content).length > 0,\n        content: content ?? {},\n      };\n    })\n    .filter(\n      ({ hasContent, content, refEntry }) =>\n        hasContent &&\n        entryFilters.every(({ field, values, exclude = false }) => {\n          // An empty values array means no constraint — skip this filter\n          if (values.length === 0) return true;\n\n          // `slug` refers to the entry’s slug, not a regular content field.\n          // `fields.fieldName` strips the prefix so a field literally named `slug` can be\n          // targeted via `fields.slug` without ambiguity.\n          const isEntrySlug = field === 'slug';\n          const fieldKey = field.replace(/^fields\\./, '');\n          const fieldValue = isEntrySlug ? refEntry.slug : content[fieldKey];\n\n          return exclude ? !values.includes(fieldValue) : values.includes(fieldValue);\n        }),\n    );\n","import { compare, escapeRegExp } from '@sveltia/utils/string';\n\nimport { getCollection } from '$lib/services/contents/collection';\nimport { getEntriesByCollection } from '$lib/services/contents/collection/entries';\nimport {\n  getObjectId,\n  getOptionLabelMap,\n} from '$lib/services/contents/fields/relation/helper/cache';\nimport { processEntry } from '$lib/services/contents/fields/relation/helper/entries';\nimport {\n  filterAndPrepareEntries,\n  resolveFilterValues,\n} from '$lib/services/contents/fields/relation/helper/filters';\nimport { prepareFieldTemplates } from '$lib/services/contents/fields/relation/helper/templates';\n\n/**\n * @import {\n * Entry,\n * FlattenedEntryContent,\n * InternalLocaleCode,\n * RelationOption,\n * } from '$lib/types/private';\n * @import { FieldKeyPath, RelationField } from '$lib/types/public';\n */\n\n/**\n * @type {Map<string, RelationOption[]>}\n */\nexport const optionCacheMap = new Map();\n\n/**\n * Get options for a Relation field.\n * @param {object} args Arguments.\n * @param {InternalLocaleCode} args.locale Current locale.\n * @param {RelationField} args.fieldConfig Field configuration.\n * @param {Entry[]} args.refEntries Referenced entries.\n * @param {FlattenedEntryContent} [args.currentLocaleValues] Flattened field values of the entry\n * currently being edited. Required to resolve `{{fields.fieldName}}` template strings in filter\n * `values`. When omitted, those template strings are ignored.\n * @param {string} [args.currentSlug] Current slug of the entry being edited. Required to resolve\n * `{{slug}}` template strings in filter `values`. When omitted (e.g. new entry draft), `{{slug}}`\n * templates are ignored.\n * @returns {RelationOption[]} Options.\n */\nexport const getOptions = ({\n  locale,\n  fieldConfig,\n  refEntries,\n  currentLocaleValues = undefined,\n  currentSlug = undefined,\n}) => {\n  const { collection: collectionName, file: fileName, filters } = fieldConfig;\n  // Resolve template strings in filter values against the current entry’s locale content and slug.\n  // The resolved values are also baked into the cache key so stale options are not returned when\n  // the relevant field value changes while the user is editing.\n  const resolvedFilters = resolveFilterValues(filters ?? [], currentLocaleValues, currentSlug);\n  // Use object identity for `fieldConfig` and `refEntries` instead of `JSON.stringify`, which would\n  // serialize the entire entries array (potentially hundreds of entries × many fields). The\n  // resolved template values are included as a plain string so the cache is invalidated when the\n  // current entry’s relevant field value changes.\n  const resolvedKey = resolvedFilters.flatMap(({ values }) => values).join('\\x00');\n  const ids = `${getObjectId(fieldConfig)}|${getObjectId(refEntries)}`;\n  const cacheKey = `${locale}|${ids}|${resolvedKey}`;\n  const cache = optionCacheMap.get(cacheKey);\n\n  if (cache) {\n    return cache;\n  }\n\n  const collection = getCollection(collectionName);\n\n  if (!collection) {\n    optionCacheMap.set(cacheKey, []);\n    return [];\n  }\n\n  const {\n    _type,\n    _i18n: { defaultLocale },\n  } = collection;\n\n  const { identifier_field: identifierField = 'title' } = _type === 'entry' ? collection : {};\n  const templates = prepareFieldTemplates(fieldConfig, identifierField);\n  const { allFieldNames, hasListFields } = templates;\n\n  const filteredEntries = filterAndPrepareEntries({\n    refEntries,\n    locale,\n    fileName,\n    entryFilters: resolvedFilters,\n    defaultLocale,\n  });\n\n  const options = filteredEntries\n    .flatMap(({ 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    .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  const optionLabelMap = getOptionLabelMap(refOptions);\n  /**\n   * Get the label by value.\n   * @param {any} _value Stored value.\n   * @returns {string} Label.\n   */\n  const getLabel = (_value) => optionLabelMap.get(_value) || _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","import { flatten, unflatten } from 'flat';\n\n/**\n * Check if the given pattern is multiline.\n * @param {RegExp} pattern Pattern.\n * @returns {boolean} Result.\n */\nexport const isMultiLinePattern = ({ multiline, dotAll, source }) =>\n  multiline || dotAll || source.includes('[\\\\s\\\\S]') || source.includes('[\\\\S\\\\s]');\n\n/**\n * Normalize properties by removing internal properties.\n * @param {Record<string, any>} props Properties to normalize.\n * @returns {Record<string, any>} Properties excluding those starting with `__sc_`, which are used\n * for internal purposes.\n */\nexport const normalizeProps = (props) =>\n  unflatten(\n    Object.fromEntries(\n      Object.entries(flatten(props)).filter(([key]) => !key.split('.').pop()?.startsWith('__sc_')),\n    ),\n  );\n\n/**\n * Replace double quotes with single quotes to avoid breaking Markdown syntax.\n * @param {string} str String to escape.\n * @returns {string} Escaped string.\n */\nexport const replaceQuotes = (str) => str.replace(/\"/g, \"'\");\n","/**\n * Regular expression to match Markdown images, including those with spaces and brackets in the src,\n * e.g. `![alt text](image.jpg \"Image title\")`. It also matches images with empty alt text, e.g.\n * `![](image.jpg)`, images with parentheses in the filename, e.g. `![alt](image (1).jpg)`, and\n * supports escaped characters like `![alt](image\\(1\\).jpg)` and titles with escaped quotes.\n * @type {RegExp}\n */\nexport const IMAGE_REGEX =\n  /!\\[(?<alt>(?:[^\\]\\\\]|\\\\.)*)\\]\\((?<src>(?:[^\"()\\\\]|\\\\.|\\([^)]*\\)|\"[^\"]*\")*?)(?:\\s+\"(?<title>(?:[^\"\\\\]|\\\\.)*)\")?\\)/;\n\n/**\n * Global version of `IMAGE_REGEX` (with the `g` flag).\n * @type {RegExp}\n */\nexport const GLOBAL_IMAGE_REGEX = new RegExp(IMAGE_REGEX, 'g');\n\n/**\n * Regular expression to match Markdown linked images, including those with spaces and brackets in\n * the src, e.g. `[![alt text](image.jpg \"Image title\")](link)`. It also matches linked images with\n * parentheses in the filename, e.g. `[![alt](image (1).jpg)](https://example.com)`.\n * @type {RegExp}\n */\nexport const LINKED_IMAGE_REGEX =\n  /\\[!\\[(?<alt2>(?:[^\\]\\\\]|\\\\.)*)\\]\\((?<src2>(?:[^\"()\\\\]|\\\\.|\\([^)]*\\)|\"[^\"]*\")*?)(?:\\s+\"(?<title2>(?:[^\"\\\\]|\\\\.)*)\")?\\)\\](?:\\((?<link>[^)]*\\([^)]*\\)[^)]*|[^)]*)\\))/;\n\n/**\n * Regular expression to match either a Markdown image or a linked image.\n * @type {RegExp}\n */\nexport const IMAGE_OR_LINKED_IMAGE_REGEX = new RegExp(\n  `${IMAGE_REGEX.source}|${LINKED_IMAGE_REGEX.source}`,\n);\n","import { sanitize } from 'isomorphic-dompurify';\n\n/**\n * Escape a string for safe use as an HTML attribute value inside double quotes. Bare `&` characters\n * are encoded as `&amp;`, but pre-existing HTML entities (e.g. `&amp;`, `&quot;`) are left\n * untouched to avoid double-encoding.\n * @param {string} str Raw string.\n * @returns {string} Escaped string.\n */\nexport const escapeAttr = (str) =>\n  str.replace(/&(?![a-zA-Z0-9#]+;)/g, '&amp;').replaceAll('\"', '&quot;');\n\n/**\n * Sanitization options for anchor tag links.\n */\nconst LINK_SANITIZE_OPTIONS = {\n  ALLOWED_TAGS: ['a'],\n  ALLOWED_ATTR: ['href', 'target', 'rel'],\n};\n\n/**\n * Replace `<a>` tag in a localization string, and sanitize the result.\n * @param {string} str Localized string containing `<a>` tag.\n * @param {string} href URL to set as the `href` attribute of the `<a>` tag.\n * @returns {string} Linked and sanitized HTML string.\n */\nexport const makeLink = (str, href) =>\n  sanitize(\n    str.replace('<a>', `<a href=\"${escapeAttr(href)}\" target=\"_blank\" rel=\"noopener noreferrer\">`),\n    LINK_SANITIZE_OPTIONS,\n  );\n","import { _ } from '@sveltia/i18n';\n\nimport { replaceQuotes } from '$lib/services/contents/fields/rich-text/components/utils';\nimport {\n  IMAGE_OR_LINKED_IMAGE_REGEX,\n  IMAGE_REGEX,\n} from '$lib/services/contents/fields/rich-text/constants';\nimport { escapeAttr } from '$lib/services/utils/string';\n\n/**\n * @import { EditorComponentDefinition } from '$lib/types/public';\n */\n\n/**\n * Custom components registered using `CMS.registerEditorComponent`.\n * @type {Map<string, EditorComponentDefinition>}\n */\nexport const customComponentRegistry = new Map();\n\n/**\n * Built-in image component definition. The labels are localized in `getComponentDef()`.\n * @type {EditorComponentDefinition}\n * @see https://decapcms.org/docs/widgets/#Markdown\n * @see https://sveltiacms.app/en/docs/fields/richtext\n */\nexport const IMAGE_COMPONENT = {\n  /* eslint-disable jsdoc/require-jsdoc */\n  id: 'image',\n  label: 'Image',\n  fields: [\n    { name: 'src', label: 'Source', widget: 'image' },\n    { name: 'alt', label: 'Alt Text', required: false },\n    { name: 'title', label: 'Title', required: false },\n  ],\n  pattern: IMAGE_REGEX,\n  toBlock: (props) => {\n    const { src = '', alt = '', title = '' } = props;\n\n    return src ? `![${alt}](${src}${title ? ` \"${replaceQuotes(title)}\"` : ''})` : '';\n  },\n  toPreview: (props) => {\n    const { src = '', alt = '', title = '' } = props;\n\n    // Return `<img>` even if `src` is empty to make sure the `tagName` below works\n    return `<img src=\"${escapeAttr(src)}\" alt=\"${escapeAttr(alt)}\" title=\"${escapeAttr(title)}\">`;\n  },\n  /* eslint-enable jsdoc/require-jsdoc */\n};\n\n/**\n * Built-in linked image component definition. The labels are localized in `getComponentDef()`.\n * @type {EditorComponentDefinition}\n */\nexport const LINKED_IMAGE_COMPONENT = {\n  /* eslint-disable jsdoc/require-jsdoc */\n  id: 'linked-image',\n  label: 'Image',\n  fields: [...IMAGE_COMPONENT.fields, { name: 'link', label: 'Link', required: false }],\n  pattern: IMAGE_OR_LINKED_IMAGE_REGEX,\n  fromBlock: (match) => {\n    const { src, alt, title, src2, alt2, title2, link } = match.groups ?? {};\n\n    return {\n      src: (src || src2 || '').trim(),\n      alt: (alt || alt2 || '').trim(),\n      title: (title || title2 || '').trim(),\n      link: (link || '').trim(),\n    };\n  },\n  toBlock: (props) => {\n    const { src = '', alt = '', title = '', link = '' } = props;\n    const img = src ? `![${alt}](${src}${title ? ` \"${replaceQuotes(title)}\"` : ''})` : '';\n\n    return img && link ? `[${img}](${link})` : img;\n  },\n  toPreview: (props) => {\n    const { src = '', alt = '', title = '', link = '' } = props;\n    // eslint-disable-next-line @stylistic/max-len\n    const img = `<img src=\"${escapeAttr(src)}\" alt=\"${escapeAttr(alt)}\" title=\"${escapeAttr(title)}\">`;\n\n    // Return `<img>` even if `src` is empty to make sure the `tagName` below works\n    return link ? `<a href=\"${escapeAttr(link)}\">${img}</a>` : img;\n  },\n  /* eslint-enable jsdoc/require-jsdoc */\n};\n\n/**\n * Get all built-in component definitions with localized labels.\n * @returns {EditorComponentDefinition[]} Array of built-in component definitions.\n */\nexport const getBuiltInComponentDefs = () => {\n  // Common props with localized labels\n  const commonImageProps = {\n    icon: 'image',\n    label: _('editor_components.image'),\n    fields: [\n      { name: 'src', label: _('editor_components.src'), widget: 'image' },\n      { name: 'alt', label: _('editor_components.alt'), required: false },\n      { name: 'title', label: _('editor_components.title'), required: false },\n    ],\n  };\n\n  return [\n    {\n      ...IMAGE_COMPONENT,\n      // Override with localized labels\n      ...commonImageProps,\n    },\n    {\n      ...LINKED_IMAGE_COMPONENT,\n      // Override with localized labels\n      ...commonImageProps,\n      fields: [\n        ...commonImageProps.fields,\n        { name: 'link', label: _('editor_components.link'), required: false },\n      ],\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 (customComponentRegistry.has(name)) {\n    return customComponentRegistry.get(name);\n  }\n\n  // Common props with localized labels\n  const commonImageProps = {\n    icon: 'image',\n    label: _('editor_components.image'),\n    fields: [\n      { name: 'src', label: _('editor_components.src'), widget: 'image' },\n      { name: 'alt', label: _('editor_components.alt'), required: false },\n      { name: 'title', label: _('editor_components.title'), required: false },\n    ],\n  };\n\n  /** @type {Record<string, EditorComponentDefinition>} */\n  const definitions = {\n    image: {\n      ...IMAGE_COMPONENT,\n      // Override with localized labels\n      ...commonImageProps,\n    },\n    'linked-image': {\n      ...LINKED_IMAGE_COMPONENT,\n      // Override with localized labels\n      ...commonImageProps,\n      fields: [\n        ...commonImageProps.fields,\n        { name: 'link', label: _('editor_components.link'), required: false },\n      ],\n    },\n  };\n\n  return definitions[name];\n};\n","const NUMERIC_VALUE_REGEX = /^\\d+$/;\n\n/**\n * Check if the given value is a numeric string, consisting of one or more digits only.\n * @param {string} value Value to check.\n * @returns {boolean} True if the value is numeric, false otherwise.\n */\nexport const isNumeric = (value) => NUMERIC_VALUE_REGEX.test(value);\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 { isObjectArray } from '@sveltia/utils/array';\n\nimport { isNumeric } from '$lib/services/utils/number';\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 * Cache of stringified `options` arrays, keyed on the array reference itself so the expensive\n * serialization only runs once per field configuration.\n * @type {WeakMap<object[], string>}\n */\nconst optionsKeyCache = new WeakMap();\n\n/**\n * Get a stable cache key fragment for a field’s `options` array.\n * @param {any[]} options Field options.\n * @returns {string} Cache key.\n */\nconst getOptionsKey = (options) => {\n  let key = optionsKeyCache.get(options);\n\n  if (key === undefined) {\n    key = JSON.stringify(options);\n    optionsKeyCache.set(options, key);\n  }\n\n  return key;\n};\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 { multiple, options } = fieldConfig;\n  const hasLabels = isObjectArray(options);\n  // Extract only the values relevant to this field from `valueMap`, avoiding serialization of the\n  // entire entry content (which would cause cache misses on any unrelated field change).\n  let rawValues;\n\n  if (multiple) {\n    const prefix = `${keyPath}.`;\n\n    rawValues = Object.entries(valueMap)\n      .filter(([key]) => key.startsWith(prefix) && isNumeric(key.slice(prefix.length)))\n      .map(([, _value]) => _value);\n  }\n\n  const optionsKey = getOptionsKey(options);\n\n  const cacheKey = multiple\n    ? `${keyPath}|${optionsKey}|${JSON.stringify(rawValues)}`\n    : `${keyPath}|${optionsKey}|${String(valueMap[keyPath])}`;\n\n  const cache = labelCacheMap.get(cacheKey);\n\n  if (cache) {\n    return cache;\n  }\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 labels = hasLabels ? /** @type {any[]} */ (rawValues).map(getLabel) : rawValues;\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 { get } from 'svelte/store';\n\nimport { cmsConfig } from '$lib/services/config';\n\n/**\n * @import { MediaField, MediaLibraries, MediaLibrary } from '$lib/types/public';\n */\n\n/**\n * Helper to check `multiple` option in media libraries config.\n * @internal\n * @param {MediaLibraries | undefined} mediaLibraries Media libraries configuration.\n * @returns {boolean | undefined} Result of checking if any media library allows multiple files.\n */\nexport const hasMultipleInMediaLibraries = (mediaLibraries) => {\n  if (!mediaLibraries) {\n    return undefined;\n  }\n\n  const libs = Object.values(mediaLibraries);\n\n  // @ts-ignore\n  if (libs.some((lib) => lib.config?.multiple === true)) {\n    return true;\n  }\n\n  // @ts-ignore\n  if (libs.some((lib) => lib.config?.multiple === false)) {\n    return false;\n  }\n\n  return undefined;\n};\n\n/**\n * Helper to check `multiple` option in media library config.\n * @internal\n * @param {MediaLibrary | undefined} mediaLibrary Media library configuration.\n * @returns {boolean | undefined} Result of checking if any media library allows multiple files.\n */\nexport const hasMultipleInMediaLibrary = (mediaLibrary) => {\n  // @ts-ignore Stock Asset library doesn’t have `config` property\n  if (!mediaLibrary?.config) {\n    return undefined;\n  }\n\n  // @ts-ignore Stock Asset library doesn’t have `config` property\n  const { multiple } = mediaLibrary.config;\n\n  if (typeof multiple === 'boolean') {\n    return multiple;\n  }\n\n  return undefined;\n};\n\n/**\n * Check if the field configuration allows multiple files.\n * @param {MediaField} fieldConfig Field configuration to check.\n * @returns {boolean} `true` if the field allows multiple files, `false` otherwise.\n */\nexport const isMultiple = (fieldConfig) => {\n  const _cmsConfig = get(cmsConfig);\n\n  return (\n    fieldConfig.multiple ??\n    hasMultipleInMediaLibraries(fieldConfig.media_libraries) ??\n    hasMultipleInMediaLibrary(fieldConfig.media_library) ??\n    hasMultipleInMediaLibraries(_cmsConfig?.media_libraries) ??\n    hasMultipleInMediaLibrary(_cmsConfig?.media_library) ??\n    false\n  );\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 {\n  getIndexFile,\n  isCollectionIndexFile,\n} from '$lib/services/contents/collection/entries/index-file';\nimport { getCollectionFile } from '$lib/services/contents/collection/files';\nimport { MEDIA_FIELD_TYPES, MULTI_VALUE_FIELD_TYPES } from '$lib/services/contents/fields';\nimport { getDateTimeFieldDisplayValue } from '$lib/services/contents/fields/date-time/helper';\nimport { getReferencedOptionLabel } from '$lib/services/contents/fields/relation/helper';\nimport { getComponentDef } from '$lib/services/contents/fields/rich-text/components/definitions';\nimport { getOptionLabel } from '$lib/services/contents/fields/select/helper';\nimport { getCanonicalLocale, getListFormatter } from '$lib/services/contents/i18n';\nimport { isMultiple } from '$lib/services/integrations/media-libraries/shared';\nimport { getOrCreate } from '$lib/services/utils/cache';\nimport { isNumeric } from '$lib/services/utils/number';\n\n/**\n * @import {\n * Entry,\n * FlattenedEntryContent,\n * GetFieldArgs,\n * InternalEntryCollection,\n * InternalLocaleCode,\n * } from '$lib/types/private';\n * @import {\n * DateTimeField,\n * Field,\n * FieldKeyPath,\n * FieldWithSubFields,\n * FieldWithTypes,\n * ListFieldWithSubField,\n * ListFieldWithSubFields,\n * ListFieldWithTypes,\n * LocaleCode,\n * MediaField,\n * MultiValueField,\n * NumberField,\n * ObjectFieldWithSubFields,\n * RelationField,\n * SelectField,\n * } from '$lib/types/public';\n */\n\nconst TYPE_MATCH_REGEX = /^(.*?)<([^>]+)>(.*)$/;\nconst NUMERIC_INDEX_REGEX = /(?:^|\\.)(\\d+)(?:\\.|$)/;\n\n/**\n * Regular expression to match the list key path, e.g. `field.0`, `field.1`, etc.\n * @type {RegExp}\n * @internal\n */\nexport const LIST_KEY_PATH_REGEX = /\\.\\d+$/;\n\n/**\n * @type {Map<string, Field | undefined>}\n */\nexport const fieldConfigCacheMap = new Map();\n\n/**\n * Check if the given fields contain a single List or KeyValue field with the `root` option enabled.\n * @param {Field[]} fields Field list.\n * @param {'list' | 'keyvalue'} fieldType Field type to check.\n * @returns {boolean} Result.\n */\nexport const hasRootField = (fields, fieldType) => {\n  if (fields.length !== 1) {\n    return false;\n  }\n\n  const [field] = fields;\n\n  return field.widget === fieldType && 'root' in field && field.root === true;\n};\n\n/**\n * Check if multi selection is enabled for the given field configuration.\n * @param {Field} fieldConfig Field configuration.\n * @returns {boolean} Result.\n */\nexport const isFieldMultiple = (fieldConfig) => {\n  const fieldType = fieldConfig.widget ?? 'string';\n\n  if (MEDIA_FIELD_TYPES.includes(fieldType)) {\n    return isMultiple(/** @type {MediaField} */ (fieldConfig));\n  }\n\n  if (MULTI_VALUE_FIELD_TYPES.includes(fieldType)) {\n    return !!(/** @type {MultiValueField} */ (fieldConfig).multiple);\n  }\n\n  return false;\n};\n\n/**\n * Extract explicit type from a key segment with syntax like `<typeName>` or `*<typeName>`.\n * @param {string} key The key segment to parse.\n * @returns {{ cleanKey: string; typeName?: string }} Object with cleaned key and optional type.\n */\nconst parseExplicitType = (key) => {\n  // Match patterns like \"*<type>\", \"<type>\", or \"0<type>\" or \"fieldName<type>\"\n  const match = key.match(TYPE_MATCH_REGEX);\n\n  if (!match) {\n    return { cleanKey: key };\n  }\n\n  const [, prefix, typeName, suffix] = match;\n\n  // If there’s content after the closing bracket, it’s malformed\n  if (suffix) {\n    return { cleanKey: key };\n  }\n\n  // Return the prefix (which might be *, a number, or field name) and the type\n  return { cleanKey: prefix || '', typeName };\n};\n\n/**\n * Advance the field traversal by one key-path segment.\n * @param {object} args Arguments.\n * @param {Field} args.field The current (parent) field being traversed.\n * @param {string} args.key Raw key-path segment (may contain `<typeName>` syntax).\n * @param {string[]} args.keyPathArray Full split key path.\n * @param {number} args.segmentIndex Index of the current segment in {@link keyPathArray}.\n * @param {string | undefined} args.pendingExplicitType Accumulated explicit type from a prior\n * segment.\n * @param {FlattenedEntryContent} args.valueMap Entry values (for variable-type lookup).\n * @returns {{ field: Field | undefined, explicitType: string | undefined }} The resolved child\n * field and updated explicit type.\n */\nconst resolveNextSegment = ({\n  field,\n  key,\n  keyPathArray,\n  segmentIndex,\n  pendingExplicitType,\n  valueMap,\n}) => {\n  const { cleanKey, typeName } = parseExplicitType(key);\n  const { widget: fieldType = 'text' } = field;\n  const explicitType = typeName != null ? typeName : pendingExplicitType;\n  const isNumericKey = isNumeric(cleanKey);\n  const isWildcardKey = cleanKey === '*';\n\n  // Handle multi-value field types with numeric keys, e.g. `authors.0`\n  if ((isNumericKey || isWildcardKey) && MULTI_VALUE_FIELD_TYPES.includes(fieldType)) {\n    // For single value field, numeric access is not allowed\n    return { field: isFieldMultiple(field) ? field : undefined, explicitType };\n  }\n\n  const { field: subField } = /** @type {ListFieldWithSubField} */ (field);\n  const { fields: subFields } = /** @type {FieldWithSubFields} */ (field);\n  const { types, typeKey = 'type' } = /** @type {FieldWithTypes} */ (field);\n\n  if (subField) {\n    const subFieldName = isNumericKey || isWildcardKey ? keyPathArray[segmentIndex + 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    // The field could be nested (object inside object), so check recursively.\n    const validSubField =\n      !subFieldName ||\n      subField.name === subFieldName ||\n      (subField.widget === 'object' &&\n        'fields' in subField &&\n        /** @type {ObjectFieldWithSubFields} */ (subField).fields?.some(\n          (f) => f.name === subFieldName,\n        ));\n\n    return { field: validSubField ? subField : undefined, explicitType };\n  }\n\n  if (subFields && (isNumericKey || isWildcardKey)) {\n    // For list field types with multiple fields, numeric keys (like \"0\") should be skipped.\n    // Keep the current field (the list field type) and continue to the next part of the path.\n    return { field, explicitType };\n  }\n\n  if (subFields && !isNumericKey && cleanKey !== '') {\n    return { field: subFields.find(({ name }) => name === cleanKey), explicitType };\n  }\n\n  if (types && (isNumericKey || isWildcardKey)) {\n    // List field type variable types - check for explicit type first, then fall back to valueMap\n    const resolvedType =\n      explicitType ??\n      valueMap[[keyPathArray.slice(0, segmentIndex).join('.'), cleanKey, typeKey].join('.')];\n\n    const nextField = /** @type {Field | undefined} */ (\n      types.find(({ name }) => name === resolvedType)\n    );\n\n    // Clear explicit type after using it for wildcard\n    return { field: nextField, explicitType: isWildcardKey ? undefined : explicitType };\n  }\n\n  if (types && key !== typeKey && cleanKey !== typeKey && cleanKey !== '') {\n    // Object field variable types - check for explicit type first, then fall back to valueMap\n    const resolvedType =\n      explicitType ?? valueMap[[keyPathArray.slice(0, segmentIndex).join('.'), typeKey].join('.')];\n\n    const nextField = types\n      .find(({ name }) => name === resolvedType)\n      ?.fields?.find(({ name }) => name === cleanKey);\n\n    // Clear explicit type after using it\n    return { field: nextField, explicitType: undefined };\n  }\n\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  return { field: undefined, explicitType };\n};\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 {\n    collectionName,\n    fileName = undefined,\n    componentName = undefined,\n    valueMap = {},\n    keyPath,\n    isIndexFile = false,\n  } = args;\n\n  // `valueMap` is only consulted during traversal when a keyPath segment is a numeric index (to\n  // resolve variable-type list/object fields). Wildcard paths (e.g. `sections.*.type`) never match\n  // a real flat-entry key, so the lookup always returns `undefined` and the result is identical\n  // regardless of entry content — no need to serialize `valueMap` into the cache key.\n  const hasNumericIndex = NUMERIC_INDEX_REGEX.test(keyPath);\n\n  const cacheKey = hasNumericIndex\n    ? JSON.stringify(args)\n    : `${collectionName}|${fileName ?? ''}|${componentName ?? ''}|${keyPath}|${isIndexFile ? '1' : '0'}`;\n\n  if (fieldConfigCacheMap.has(cacheKey)) {\n    return fieldConfigCacheMap.get(cacheKey);\n  }\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 = [] } =\n    collectionFile ?? /** @type {InternalEntryCollection} */ (collection);\n\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  /** @type {string | undefined} - Track explicit type for current nesting level */\n  let currentExplicitType;\n\n  keyPathArray.forEach((key, index) => {\n    if (index === 0) {\n      // First, try to parse explicit type from the field name itself (for object fields like\n      // \"field<button>\")\n      const { cleanKey, typeName } = parseExplicitType(key);\n\n      field = fields.find(({ name }) => name === cleanKey);\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 === cleanKey);\n      }\n\n      // Store explicit type for later use\n      if (typeName) {\n        currentExplicitType = typeName;\n      }\n    } else if (field) {\n      const result = resolveNextSegment({\n        field,\n        key,\n        keyPathArray,\n        segmentIndex: index,\n        pendingExplicitType: currentExplicitType,\n        valueMap,\n      });\n\n      field = result.field;\n      currentExplicitType = result.explicitType;\n    }\n  });\n\n  // If we have an explicit type but haven’t applied it yet (e.g., for \"field<button>\" with no\n  // further navigation), apply it now\n  if (currentExplicitType && field && 'types' in field) {\n    const { types } = /** @type {FieldWithTypes} */ (field);\n\n    // @ts-ignore\n    field = types.find(({ name }) => name === currentExplicitType);\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 */\n// @ts-ignore Hidden field doesn’t have `required` property\nexport const isFieldRequired = ({ fieldConfig: { required = true }, locale }) =>\n  Array.isArray(required) ? required.includes(locale) : !!required;\n\n/**\n * Cache of pre-compiled list-item regexes for {@link getFieldDisplayValue}, keyed by field key\n * path.\n * @type {Map<FieldKeyPath, RegExp>}\n */\nconst listItemDisplayRegexCache = new Map();\n/**\n * Cache of {@link Intl.NumberFormat} instances for {@link getFieldDisplayValue}, keyed by canonical\n * locale.\n * @type {Map<LocaleCode | undefined, Intl.NumberFormat>}\n */\nconst numberFormatterCache = new Map();\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        fieldConfig: /** @type {DateTimeField} */ (fieldConfig),\n        currentValue: value,\n      });\n    }\n  }\n\n  if (fieldConfig?.widget === 'relation') {\n    value = getReferencedOptionLabel({\n      fieldConfig: /** @type {RelationField} */ (fieldConfig),\n      valueMap,\n      keyPath,\n      locale,\n    });\n  }\n\n  if (fieldConfig?.widget === 'select') {\n    value = getOptionLabel({\n      fieldConfig: /** @type {SelectField} */ (fieldConfig),\n      valueMap,\n      keyPath,\n    });\n  }\n\n  if (fieldConfig?.widget === 'list') {\n    const { fields } = /** @type {ListFieldWithSubFields} */ (fieldConfig);\n    const { types } = /** @type {ListFieldWithTypes} */ (fieldConfig);\n\n    if (fields || types) {\n      // Ignore\n    } else {\n      // Concat values of single field list or simple list\n      // Pre-compile and cache the regex — same key path is hit on every field render.\n      const listItemRegex = getOrCreate(\n        listItemDisplayRegexCache,\n        keyPath,\n        () => new RegExp(`^${escapeRegExp(keyPath)}${String.raw`\\.\\d+$`}`),\n      );\n\n      value = getListFormatter(locale).format(\n        Object.entries(valueMap)\n          .filter(([key, val]) => listItemRegex.test(key) && typeof val === 'string' && !!val)\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      const canonicalLocale = getCanonicalLocale(locale);\n      let numberFormatter = numberFormatterCache.get(canonicalLocale);\n\n      if (!numberFormatter) {\n        numberFormatter = Intl.NumberFormat(canonicalLocale);\n        numberFormatterCache.set(canonicalLocale, numberFormatter);\n      }\n\n      value = numberFormatter.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, locale });\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        fieldConfig: /** @type {RelationField} */ (fieldConfig),\n        valueMap: content,\n        keyPath: key,\n        locale,\n      });\n    }\n  }\n\n  return content[key];\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 { TEMPLATE_TAG_REPLACE_REGEX } from '$lib/services/common/template/constants';\nimport {\n  applyTransformations,\n  DATE_TRANSFORMATION_REGEX,\n  TERNARY_TRANSFORMATION_REGEX,\n  TRANSFORMATION_SPLIT_REGEX,\n} from '$lib/services/common/transformations';\nimport {\n  getIndexFile,\n  isCollectionIndexFile,\n} from '$lib/services/contents/collection/entries/index-file';\nimport { getField, getFieldDisplayValue } from '$lib/services/contents/entry/fields';\n\n/**\n * @import {\n * CommitAuthor,\n * Entry,\n * FlattenedEntryContent,\n * InternalCollection,\n * InternalLocaleCode,\n * } from '$lib/types/private';\n * @import { RawEntryContent } from '$lib/types/public';\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 {string[]} locales Enabled locales 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\nconst BODY_HEADER_REGEX = /^#+\\s+(?<header>.+?)(?:\\s+\\{#.+?\\})?\\s*$/m;\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\n  if (allowMarkdown) {\n    str = parseEntities(str);\n  }\n\n  str = sanitize(str, { ALLOWED_TAGS: allowMarkdown ? ['strong', 'em', 'code'] : [] });\n\n  if (!allowMarkdown) {\n    str = parseEntities(str);\n  }\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(BODY_HEADER_REGEX)?.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, locales, commitDate, commitAuthor } = context;\n\n  if (tag === 'slug') {\n    return slug;\n  }\n\n  if (tag === 'locales') {\n    return locales.sort((a, b) => a.localeCompare(b)).join(', ');\n  }\n\n  if (tag === 'dirname') {\n    let dirPath = entryPath.replace(/[^/]+$/, '');\n\n    if (basePath) {\n      // Remove basePath prefix with boundary awareness\n      const prefix = basePath.endsWith('/') ? basePath : `${basePath}/`;\n\n      if (dirPath.startsWith(prefix)) {\n        dirPath = dirPath.slice(prefix.length);\n      } else if (dirPath.startsWith(basePath)) {\n        dirPath = dirPath.slice(basePath.length);\n      }\n    }\n\n    return stripSlashes(dirPath);\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(TRANSFORMATION_SPLIT_REGEX);\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      locale: defaultLocale,\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 * @see https://sveltiacms.app/en/docs/collections/entries#summaries\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    _type,\n    name: collectionName,\n    _i18n: { defaultLocale },\n  } = collection;\n\n  const {\n    _file: { basePath } = {},\n    identifier_field: identifierField = 'title',\n    summary: summaryTemplate,\n  } = _type === 'entry' ? collection : {};\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: {\n      slug,\n      entryPath,\n      basePath,\n      locales: Object.keys(locales),\n      commitDate,\n      commitAuthor,\n    },\n    defaultLocale,\n  };\n\n  return sanitizeEntrySummary(\n    summaryTemplate.replace(TEMPLATE_TAG_REPLACE_REGEX, (_match, placeholder) =>\n      replace(placeholder, replaceContext),\n    ),\n    { allowMarkdown },\n  );\n};\n","import { generateUUID } from '@sveltia/utils/crypto';\n\nimport { DATE_TIME_FIELDS } from '$lib/services/common/template/constants';\nimport { getEntrySummaryFromContent } from '$lib/services/contents/entry/summary';\n\n/**\n * Handles date-time related template tags.\n * @internal\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 */\nexport const handleDateTimeTag = (tag, dateTimeParts) =>\n  DATE_TIME_FIELDS.includes(tag) ? dateTimeParts[tag] : undefined;\n\n/**\n * Handles UUID-related template tags.\n * @internal\n * @param {string} tag The template tag.\n * @returns {string | undefined} The UUID value or undefined if not a UUID tag.\n */\nexport const handleUuidTag = (tag) => {\n  switch (tag) {\n    case 'uuid':\n      return generateUUID();\n    case 'uuid_short':\n      return generateUUID('short');\n    case 'uuid_shorter':\n      return generateUUID('shorter');\n    default:\n      return undefined;\n  }\n};\n\n/**\n * Handles slug-related template tags.\n * @internal\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 */\nexport const 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 * @internal\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 */\nexport const 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 * @internal\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 */\nexport const 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","import { INNER_TAG_REGEX } from '$lib/services/common/template/constants';\nimport { DEFAULT_TRANSFORMATION_REGEX } from '$lib/services/common/transformations';\n\n/**\n * @import { ReplaceSubContext } from '$lib/services/common/template/replacers';\n */\n\n/**\n * Processes transformations for a template placeholder.\n * @internal\n * @param {string[]} transformations Array of transformation strings.\n * @param {ReplaceSubContext} replaceSubContext Context for replacement.\n * @param {(tag: string, context: ReplaceSubContext) => any} replaceTemplateTag Replaces tags.\n * @returns {{ transformations: string[], hasDefaultTransformation: boolean }} Result.\n */\nexport const processTransformations = (transformations, replaceSubContext, replaceTemplateTag) => {\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(INNER_TAG_REGEX)?.groups ?? {};\n\n      if (innerTag !== undefined) {\n        transformations[index] =\n          `default('${replaceTemplateTag(innerTag, replaceSubContext) ?? ''}')`;\n      }\n    }\n  });\n\n  return { transformations, hasDefaultTransformation };\n};\n","import { generateUUID } from '@sveltia/utils/crypto';\n\nimport { slugify } from '$lib/services/common/slug';\nimport {\n  getFieldValue,\n  handleDateTimeTag,\n  handleFilePathTag,\n  handleSlugTag,\n  handleUuidTag,\n} from '$lib/services/common/template/handlers';\nimport { processTransformations } from '$lib/services/common/template/transformations';\nimport {\n  applyTransformations,\n  TRANSFORMATION_SPLIT_REGEX,\n} from '$lib/services/common/transformations';\nimport { getField } from '$lib/services/contents/entry/fields';\n\n/**\n * @import { FillTemplateOptions, GetFieldArgs } from '$lib/types/private';\n */\n\n/**\n * @typedef {object} ReplaceSubContextBase\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 {FillTemplateOptions & ReplaceSubContextBase} ReplaceSubContext\n */\n\n/**\n * @typedef {object} ReplaceContext\n * @property {ReplaceSubContext} replaceSubContext Context for `replaceSub`.\n * @property {GetFieldArgs} getFieldArgs Arguments for `getField`.\n */\n\n/**\n * Template tag replacer subroutine.\n * @internal\n * @param {string} tag Field name or special tag.\n * @param {ReplaceSubContext} context Replacement context.\n * @returns {any} Replaced value.\n */\nexport const replaceTemplateTag = (tag, context) => {\n  const {\n    type,\n    content: valueMap,\n    currentSlug,\n    entryFilePath,\n    locale,\n    dateTimeParts,\n    identifierField,\n    basePath,\n    isIndexFile = false,\n  } = context;\n\n  // Handle date-time fields. Parts are pre-calculated in `fillTemplate` to avoid redundant\n  // calculations for multiple date-time tags in the same template.\n  const _dateTimeParts = /** @type {Record<string, string>} */ (dateTimeParts);\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 * Template placeholder replacer.\n * @internal\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 */\nexport const replaceTemplatePlaceholder = (placeholder, context) => {\n  const { replaceSubContext, getFieldArgs } = context;\n  const [tag, ...rawTransformations] = placeholder.split(TRANSFORMATION_SPLIT_REGEX);\n  let value = replaceTemplateTag(tag, replaceSubContext);\n\n  const { transformations, hasDefaultTransformation } = processTransformations(\n    rawTransformations,\n    replaceSubContext,\n    replaceTemplateTag,\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  const { type, locale } = replaceSubContext;\n\n  if (transformations.length) {\n    value = applyTransformations({\n      fieldConfig: getField({ ...getFieldArgs, keyPath: tag }),\n      value,\n      transformations,\n      locale,\n    });\n  }\n\n  // Return the value as is when generating the preview path or media folder path\n  if (type) {\n    return String(value);\n  }\n\n  // Slugify the value for a slug or filename. Don't limit the length here; it will be handled later\n  // in `fillTemplate`.\n  return slugify(String(value), { locale, maxLength: Infinity });\n};\n","import { getDateTimeParts } from '@sveltia/utils/datetime';\nimport { truncate } from '@sveltia/utils/string';\nimport { get } from 'svelte/store';\n\nimport {\n  TEMPLATE_TAG_REGEX,\n  TEMPLATE_TAG_REPLACE_REGEX,\n} from '$lib/services/common/template/constants';\nimport { replaceTemplatePlaceholder } from '$lib/services/common/template/replacers';\nimport { cmsConfig } from '$lib/services/config';\nimport { getEntriesByCollection } from '$lib/services/contents/collection/entries';\nimport { renameIfNeeded } from '$lib/services/utils/file';\n\n/**\n * @import { ReplaceContext } from '$lib/services/common/template/replacers';\n * @import { FillTemplateOptions } from '$lib/types/private';\n */\n\n/**\n * Checks if a string contains template tags.\n * @param {string} str The string to check.\n * @returns {boolean} True if the string contains template tags, false otherwise.\n */\nexport const hasTemplateTags = (str) => TEMPLATE_TAG_REGEX.test(str);\n\n/**\n * Creates existing slugs list for uniqueness validation.\n * @internal\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 * @see https://sveltiacms.app/en/docs/collections/entries#managing-entry-slugs\n * @see https://sveltiacms.app/en/docs/media/internal#using-placeholders\n */\nexport const fillTemplate = (template, options) => {\n  const {\n    collection,\n    content: valueMap,\n    currentSlug,\n    locale,\n    dateTimeParts,\n    isIndexFile = false,\n  } = options;\n\n  const { _type, name: collectionName } = collection;\n\n  const {\n    identifier_field: identifierField = 'title',\n    slug_length: legacySlugLength = undefined,\n    _file: { basePath } = {},\n  } = _type === 'entry' ? collection : {};\n\n  const slugOptions = get(cmsConfig)?.slug;\n  // @todo Remove the legacy option prior to the 1.0 release.\n  const maxlength = legacySlugLength ?? slugOptions?.maxlength;\n  const timeZone = slugOptions?.timezone === 'local' ? undefined : 'UTC';\n\n  /** @type {ReplaceContext} */\n  const context = {\n    replaceSubContext: {\n      ...options,\n      dateTimeParts: dateTimeParts ?? getDateTimeParts({ timeZone }),\n      identifierField,\n      basePath,\n    },\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_TAG_REPLACE_REGEX, (_match, tag) => replaceTemplatePlaceholder(tag, context))\n    .trim();\n\n  // We don't have to rename it when creating a path with a slug given. Skip truncation because the\n  // slug has already been truncated during its own generation, and truncating the entire filled\n  // path template (e.g. `{{slug}}/+page`) would break the non-slug parts of the path.\n  if (currentSlug) {\n    return slug;\n  }\n\n  // Truncate a long slug if needed\n  if (typeof maxlength === 'number') {\n    slug = truncate(slug, maxlength, { ellipsis: '' }).replace(/-$/, '');\n  }\n\n  return renameIfNeeded(slug, getExistingSlugs(collectionName, locale));\n};\n","import { getPathInfo } from '@sveltia/utils/file';\nimport { compare, stripSlashes } from '@sveltia/utils/string';\n\nimport { hasTemplateTags } from '$lib/services/common/template';\nimport { getValidCollections } from '$lib/services/contents/collection';\nimport { getValidCollectionFiles } from '$lib/services/contents/collection/files';\n\n/**\n * @import {\n * AssetFolderInfo,\n * CollectedMediaField,\n * InternalCmsConfig,\n * TypedFieldKeyPath,\n * } from '$lib/types/private';\n * @import {\n * AssetCollection,\n * Collection,\n * CollectionDivider,\n * CollectionFile,\n * } 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 {TypedFieldKeyPath} [typedKeyPath] Key path to the field.\n * @property {boolean} [isIndexFile] Whether the field is part of an index file entry.\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\n * of the collection file.\n * @property {GlobalFolders | undefined} globalFolders Global folders information.\n * @property {string} [label] Label for the asset folder. Asset collections only.\n * @property {string} [icon] Icon for the asset folder. Asset collections only.\n * @property {boolean} [isAssetCollection] Whether the asset folder is for an asset collection.\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 * @see https://sveltiacms.app/en/docs/media/internal\n */\nconst assetFolders = [];\n\n/**\n * Check if a folder string contains template tags.\n * @internal\n * @param {string} folder Folder string.\n * @returns {boolean} `true` if the folder contains template tags.\n */\nexport const hasTags = (folder) =>\n  folder.includes('{{media_folder}}') || folder.includes('{{public_folder}}');\n\n/**\n * Replace `{{media_folder}}` and `{{public_folder}}` template tags.\n * @internal\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 * @internal\n * @param {NormalizeAssetFolderArgs} args Arguments.\n * @returns {AssetFolderInfo | undefined} Normalized asset folder information or `undefined` if\n * template tags are used but global folder information is not available.\n */\nexport const normalizeAssetFolder = ({\n  collectionName,\n  fileName,\n  typedKeyPath,\n  isIndexFile = false,\n  mediaFolder,\n  publicFolder,\n  baseFolder,\n  globalFolders,\n  label,\n  icon,\n  isAssetCollection = false,\n}) => {\n  if (hasTags(mediaFolder)) {\n    // Cannot substitute tags without global folder info\n    if (!globalFolders) {\n      return undefined;\n    }\n\n    mediaFolder = replaceTags(mediaFolder, globalFolders);\n  }\n\n  if (publicFolder === undefined) {\n    publicFolder = mediaFolder;\n  } else if (hasTags(publicFolder)) {\n    // Cannot substitute tags without global folder info\n    if (!globalFolders) {\n      return undefined;\n    }\n\n    publicFolder = replaceTags(publicFolder, globalFolders);\n  }\n\n  // Normalize `./` prefix: `./images` → `images`, `./` → ``, `.` → ``\n  // This must happen after publicFolder defaulting so that `publicPath` preserves the `./` prefix\n  // needed to match stored values like `./images/photo.jpg`.\n  mediaFolder = mediaFolder.replace(/^\\.(?:\\/|$)/, '');\n\n  const entryRelative = !mediaFolder.startsWith('/');\n\n  return {\n    collectionName,\n    fileName,\n    typedKeyPath,\n    isIndexFile,\n    internalPath: stripSlashes(entryRelative ? (baseFolder ?? '') : mediaFolder),\n    internalSubPath: entryRelative ? stripSlashes(mediaFolder) : undefined,\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      /^($|[.@])/.test(publicFolder) ? publicFolder : `/${stripSlashes(publicFolder)}`,\n    entryRelative,\n    hasTemplateTags: hasTemplateTags(mediaFolder),\n    label,\n    icon,\n    isAssetCollection,\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 * @internal\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\n  if (!folder) {\n    return;\n  }\n\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 * @internal\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 | undefined} 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 * Handle field-level media folders and add them if needed.\n * @internal\n * @param {object} args Arguments.\n * @param {CollectedMediaField[]} args.fieldMediaFolders Collected field-level media folders.\n * @param {Collection[]} args.validCollections Valid collections.\n * @param {GlobalFolders | undefined} args.globalFolders Global folders information.\n */\nexport const handleFieldMediaFolders = ({ fieldMediaFolders, validCollections, globalFolders }) => {\n  fieldMediaFolders.forEach(({ fieldConfig, context }) => {\n    const _collection = /** @type {Collection} */ (context.collection);\n\n    const isValidCollection =\n      _collection.name === '_singletons' ||\n      validCollections.some((c) => c.name === _collection.name);\n\n    if (!isValidCollection) {\n      return;\n    }\n\n    addFolderIfNeeded({\n      collectionName: _collection.name,\n      fileName: context.collectionFile?.name,\n      mediaFolder: /** @type {string} */ (fieldConfig.media_folder),\n      publicFolder: fieldConfig.public_folder,\n      baseFolder: 'folder' in _collection ? _collection.folder : undefined,\n      typedKeyPath: /** @type {string} */ (context.typedKeyPath),\n      isIndexFile: /** @type {boolean} */ (context.isIndexFile),\n      globalFolders,\n    });\n  });\n};\n\n/**\n * Add asset folders for asset collections.\n * @param {object} args Arguments.\n * @param {AssetCollection[]} args.assetCollections Asset collections from the CMS configuration.\n * @param {GlobalFolders | undefined} args.globalFolders Global folders information.\n */\nconst addAssetCollections = ({ assetCollections, globalFolders }) => {\n  assetCollections.forEach((assetCollection) => {\n    const {\n      name,\n      label = name,\n      icon,\n      media_folder: _mediaFolder,\n      public_folder: _publicFolder,\n    } = assetCollection;\n\n    if (_mediaFolder === undefined) {\n      return;\n    }\n\n    addFolderIfNeeded({\n      collectionName: `assets:${name}`,\n      mediaFolder: `/${stripSlashes(_mediaFolder)}`,\n      publicFolder: _publicFolder,\n      globalFolders,\n      label,\n      icon,\n      isAssetCollection: true,\n    });\n  });\n};\n\n/**\n * Get all asset folders.\n * @param {InternalCmsConfig} config CMS configuration.\n * @param {CollectedMediaField[]} [fieldMediaFolders] Collected field-level media folders.\n * @returns {AssetFolderInfo[]} Asset folders.\n */\nexport const getAllAssetFolders = (config, fieldMediaFolders = []) => {\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    asset_collections: assetCollections,\n  } = config;\n\n  const isGlobalFolderConfigured = _globalMediaFolder !== undefined;\n\n  // Normalize the media folder: an empty string, `/` and `.` are all considered as the root folder\n  const globalMediaFolder = isGlobalFolderConfigured\n    ? stripSlashes(_globalMediaFolder).replace(/^\\.$/, '')\n    : '';\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 = isGlobalFolderConfigured\n    ? _globalPublicFolder\n      ? `/${stripSlashes(_globalPublicFolder)}`.replace(/^\\/@/, '@')\n      : `/${globalMediaFolder}`\n    : '';\n\n  /** @type {AssetFolderInfo} */\n  const allAssetsFolder = {\n    collectionName: undefined,\n    internalPath: undefined,\n    internalSubPath: undefined,\n    publicPath: undefined,\n    entryRelative: false,\n    hasTemplateTags: false,\n    label: undefined,\n    icon: undefined,\n    isAssetCollection: false,\n  };\n\n  /** @type {AssetFolderInfo | undefined} */\n  const globalAssetFolder = isGlobalFolderConfigured\n    ? { ...allAssetsFolder, internalPath: globalMediaFolder, publicPath: globalPublicFolder }\n    : undefined;\n\n  const globalFolders = isGlobalFolderConfigured\n    ? { globalMediaFolder, globalPublicFolder }\n    : undefined;\n\n  const validCollections = getValidCollections({ collections });\n\n  validCollections.forEach((collection) => {\n    const {\n      name: collectionName,\n      // @ts-ignore\n      files: collectionFiles,\n      // @ts-ignore\n      // e.g. `content/posts`\n      folder: baseFolder,\n      // @ts-ignore\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 =\n      isGlobalFolderConfigured && _mediaFolder === undefined && entryPath !== undefined\n        ? ''\n        : _mediaFolder;\n\n    addFolderIfNeeded({\n      collectionName,\n      // @ts-ignore\n      mediaFolder,\n      publicFolder,\n      baseFolder,\n      entryPath,\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  handleFieldMediaFolders({ fieldMediaFolders, validCollections, globalFolders });\n\n  // `internalPath` is always set to a string via `stripSlashes()` in the folder construction above.\n  assetFolders.sort((a, b) =>\n    compare(/** @type {string} */ (a.internalPath), /** @type {string} */ (b.internalPath)),\n  );\n\n  const allFolders = [];\n\n  if (globalAssetFolder) {\n    allFolders.push(globalAssetFolder);\n  }\n\n  if (assetCollections?.length) {\n    addAssetCollections({ assetCollections, globalFolders });\n  }\n\n  allFolders.push(...assetFolders);\n\n  if (allFolders.length) {\n    allFolders.unshift(allAssetsFolder);\n  }\n\n  return allFolders;\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, InternalCmsConfig, InternalLocaleCode } from '$lib/types/private';\n * @import { Collection, CollectionFile, EntryCollection, FileCollection } 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 {InternalCmsConfig} config CMS configuration.\n * @returns {EntryFolderInfo[]} Entry folders.\n */\nexport const getEntryCollectionFolders = ({ collections }) =>\n  getValidCollections({ collections, type: 'entry' })\n    .map((collection) => {\n      const { name: collectionName, folder } = /** @type {EntryCollection} */ (collection);\n      const folderPath = stripSlashes(/** @type {string} */ (folder));\n\n      const {\n        allLocales,\n        defaultLocale,\n        omitDefaultLocaleFromFilePath,\n        structureMap: { i18nMultiRootFolder },\n      } = normalizeI18nConfig(collection);\n\n      return {\n        collectionName,\n        folderPath,\n        folderPathMap: Object.fromEntries(\n          allLocales.map((locale) => [\n            locale,\n            i18nMultiRootFolder\n              ? omitDefaultLocaleFromFilePath && locale === defaultLocale\n                ? folderPath\n                : `${locale}/${folderPath}`\n              : folderPath,\n          ]),\n        ),\n      };\n    })\n    .sort((a, b) =>\n      compare(/** @type {string} */ (a.folderPath), /** @type {string} */ (b.folderPath)),\n    );\n\n/**\n * Get file collection folders.\n * @param {InternalCmsConfig} config CMS configuration.\n * @returns {EntryFolderInfo[]} Entry folders.\n */\nexport const getFileCollectionFolders = ({ collections }) =>\n  getValidCollections({ collections, type: 'file' })\n    .flatMap((collection) =>\n      // prettier-ignore\n      (/** @type {FileCollection} */ (collection).files ?? []).map((file) =>\n        getCollectionFileFolder(collection, file),\n      ),\n    )\n    .filter((file) => !!file)\n    .sort(compareFilePath);\n\n/**\n * Get singleton collection folders.\n * @param {InternalCmsConfig} config CMS 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 {InternalCmsConfig} config CMS configuration.\n * @returns {EntryFolderInfo[]} Entry folders.\n */\nexport const getAllEntryFolders = (config) => [\n  ...getEntryCollectionFolders(config),\n  ...getFileCollectionFolders(config),\n  ...getSingletonCollectionFolders(config),\n];\n","import { _ } from '@sveltia/i18n';\nimport { isObject } from '@sveltia/utils/object';\nimport merge from 'deepmerge';\n\nimport { parseTOML, parseYAML } from '$lib/services/contents/file/parse';\nimport { isSecureURL } from '$lib/services/utils/networking';\n\n/**\n * @typedef {object} ConfigLink\n * @property {string} href File path or URL.\n * @property {string} [type] MIME type.\n */\n\n/**\n * Supported MIME types for configuration files.\n */\nconst SUPPORTED_TYPES = [\n  'text/yaml', // legacy\n  'application/yaml', // default\n  'application/toml',\n  'application/json',\n];\n\n/**\n * Fetch a single configuration file.\n * @internal\n * @param {object} link Link attributes.\n * @param {string} link.href File path.\n * @param {string} [link.type] MIME type.\n * @param {object} [options] Options.\n * @param {boolean} [options.manualInit] Whether a manual config is provided. This can affect error\n * handling.\n * @returns {Promise<object>} Configuration.\n * @throws {Error} When fetching or parsing has failed.\n */\nexport const fetchFile = async (\n  { href, type = 'application/yaml' },\n  { manualInit = false } = {},\n) => {\n  /** @type {Response} */\n  let response;\n\n  if (!SUPPORTED_TYPES.includes(type)) {\n    throw new Error(_('config.error.parse_failed'), {\n      cause: new Error(_('config.error.parse_failed_unsupported_type')),\n    });\n  }\n\n  const fetchErrorKey = manualInit\n    ? 'config.error.fetch_failed_with_manual_init'\n    : 'config.error.fetch_failed';\n\n  try {\n    const url = new URL(href, window.location.href);\n\n    // Append a timestamp to the URL to prevent caching issues\n    url.searchParams.set('_', Date.now().toString());\n\n    response = await fetch(url);\n  } catch (ex) {\n    throw new Error(_(fetchErrorKey), { cause: ex });\n  }\n\n  const { ok, status } = response;\n\n  if (!ok) {\n    throw new Error(_(fetchErrorKey), {\n      cause: new Error(_('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 = await response.json();\n    } else {\n      const text = await response.text();\n\n      if (type === 'application/toml') {\n        result = parseTOML(text);\n      } else {\n        result = parseYAML(text, { merge: true, maxAliasCount: -1 });\n      }\n    }\n  } catch (ex) {\n    throw new Error(_('config.error.parse_failed'), { cause: ex });\n  }\n\n  if (!isObject(result)) {\n    throw new Error(_('config.error.parse_failed'), {\n      cause: new Error(_('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 * @internal\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 * Verify that all provided links are in a secure context. A secure context is defined as either an\n * HTTPS URL or a localhost address.\n * @internal\n * @param {ConfigLink[]} links Links to verify.\n * @returns {boolean} True if all links are secure, false otherwise.\n */\nexport const verifyLinksAreSecure = (links) => {\n  const { origin } = window.location;\n\n  return links.every(({ href }) => isSecureURL(href, origin));\n};\n\n/**\n * Fetch the YAML/JSON CMS configuration file(s) and return a parsed, merged object.\n * @param {object} [options] Options.\n * @param {boolean} [options.manualInit] Whether a manual config is provided. This can affect error\n * handling.\n * @returns {Promise<object>} Configuration.\n * @throws {Error} When fetching or parsing has failed.\n */\nexport const fetchCmsConfig = async ({ manualInit = false } = {}) => {\n  const links = /** @type {HTMLLinkElement[]} */ ([\n    ...document.querySelectorAll('link[rel=\"cms-config-url\"]'),\n  ]).map(({ href, type }) => /** @type {ConfigLink} */ ({ href, type }));\n\n  if (!links.length) {\n    links.push({ href: getConfigPath(window.location.pathname) });\n  }\n\n  if (!verifyLinksAreSecure(links)) {\n    throw new Error(_('config.error.insecure_urls', { values: { count: links.length } }));\n  }\n\n  const objects = await Promise.all(links.map((link) => fetchFile(link, { manualInit })));\n\n  if (objects.length === 1) {\n    return objects[0];\n  }\n\n  return merge.all(objects);\n};\n","import { _, locale as appLocale } from '@sveltia/i18n';\n\nimport { getListFormatter } from '$lib/services/contents/i18n';\n\n/**\n * @import {\n * ConfigParserContext,\n * ConfigParserCollectors,\n * UnsupportedOption,\n * } from '$lib/types/private';\n */\n\n/**\n * Add an error or warning message to the error collector with context information.\n * @param {object} args Arguments.\n * @param {'error' | 'warning'} [args.type] The type of the message.\n * @param {string} args.strKey The i18n string key for the message.\n * @param {Record<string, string | undefined>} [args.values] Values for the i18n string.\n * @param {string} [args.extraStrKey] An extra i18n string key to append to the message.\n * @param {ConfigParserContext} [args.context] The field parser context.\n * @param {ConfigParserCollectors} args.collectors The collectors.\n */\nexport const addMessage = ({\n  type = 'error',\n  strKey,\n  values = {},\n  extraStrKey,\n  context = {},\n  collectors,\n}) => {\n  const { collection, collectionFile, typedKeyPath } = context;\n  const { errors, warnings } = collectors;\n  const locators = [];\n\n  if (collection) {\n    locators.push(\n      _('config.error_locator.collection', {\n        values: { collection: collection.label_singular ?? collection.label ?? collection.name },\n      }),\n    );\n  }\n\n  if (collectionFile) {\n    locators.push(\n      _('config.error_locator.file', {\n        values: { file: collectionFile.label ?? collectionFile.name },\n      }),\n    );\n  }\n\n  if (typedKeyPath) {\n    locators.push(\n      _('config.error_locator.field', {\n        values: { field: typedKeyPath },\n      }),\n    );\n  }\n\n  const collector = type === 'error' ? errors : warnings;\n  const locale = appLocale.current;\n  const locatorStr = locators.length ? `${getListFormatter(locale).format(locators)}: ` : '';\n  const message = _(`config.${type}.${strKey}`, { values });\n\n  collector.add(`${locatorStr}${message}${extraStrKey ? ` ${_(`config.${extraStrKey}`)}` : ''}`);\n};\n\n/**\n * Check for unsupported deprecated options in a configuration and add messages if found.\n * @param {object} args Arguments.\n * @param {UnsupportedOption[]} args.UNSUPPORTED_OPTIONS Array of unsupported option mappings.\n * @param {Record<string, any>} args.config Configuration to check. Usually a field config.\n * @param {ConfigParserContext} args.context Context.\n * @param {ConfigParserCollectors} args.collectors Collectors.\n */\nexport const checkUnsupportedOptions = ({ UNSUPPORTED_OPTIONS, config, context, collectors }) => {\n  UNSUPPORTED_OPTIONS.forEach(\n    ({ type = 'error', prop, newProp, value, strKey = 'unsupported_deprecated_option' }) => {\n      if (prop in config && (value === undefined || config[prop] === value)) {\n        addMessage({\n          type,\n          strKey,\n          values: { prop, newProp },\n          extraStrKey: 'compatibility_link',\n          context,\n          collectors,\n        });\n      }\n    },\n  );\n};\n\n/**\n * Regular expression to validate names. A valid name is a non-empty string that does not contain\n * spaces, dots, asterisks, colons or angle brackets. Dots are used as separators in key paths,\n * asterisks are used for wildcard matching for relation fields, colons are used for editor\n * component identification, and angle brackets are used for variable type placeholders.\n */\nexport const VALID_NAME_REGEX = /^[^\\s.*:<>]+$/;\n\n/**\n * Checks if the given name is valid.\n * @param {string} name Name to check.\n * @returns {boolean} `true` if the name is valid, `false` otherwise.\n */\nexport const isValidName = (name) => VALID_NAME_REGEX.test(name);\n\n/**\n * Check if the given collection name, collection file name, field name or variable type name is\n * valid and not duplicated. Adds messages to the collectors if invalid or duplicated.\n * @param {object} args Arguments.\n * @param {any} args.name Name to check.\n * @param {number} args.index Index of the item in the array, used for error messages.\n * @param {Record<string, number>} args.nameCounts Record of name counts. The keys are the names and\n * the values are the counts.\n * @param {string} args.strKeyBase I18n string key for the name message, excluding \"missing_\" or\n * \"invalid_\".\n * @param {ConfigParserContext} args.context Context.\n * @param {ConfigParserCollectors} args.collectors Collectors.\n * @returns {boolean} `true` if the name is valid, `false` otherwise.\n */\nexport const checkName = ({ name, index, nameCounts, strKeyBase, context, collectors }) => {\n  if (!name || typeof name !== 'string') {\n    // Use count (1-based index) for user-facing messages\n    const count = String(index + 1);\n\n    addMessage({ strKey: `missing_${strKeyBase}`, context, values: { count }, collectors });\n\n    return false;\n  }\n\n  if (!isValidName(name)) {\n    addMessage({ strKey: `invalid_${strKeyBase}`, context, values: { name }, collectors });\n\n    return false;\n  }\n\n  // Check for duplicates, the second occurrence will be caught here\n  if (nameCounts[name] === 1) {\n    addMessage({ strKey: `duplicate_${strKeyBase}`, context, values: { name }, collectors });\n\n    return false;\n  }\n\n  nameCounts[name] = (nameCounts[name] ?? 0) + 1;\n\n  return true;\n};\n","import { _ } from '@sveltia/i18n';\nimport { isObject } from '@sveltia/utils/object';\n\nimport { gitBackendServices, unsupportedBackends, validBackendNames } from '$lib/services/backends';\nimport { warnDeprecation } from '$lib/services/config/deprecations';\nimport { checkUnsupportedOptions } from '$lib/services/config/parser/utils/validator';\n\n/**\n * @import { CmsConfig, GitBackend } from '$lib/types/public';\n * @import { ConfigParserCollectors, UnsupportedOption } from '$lib/types/private';\n */\n\n/**\n * Unsupported options for Relation fields.\n * @type {UnsupportedOption[]}\n */\nconst UNSUPPORTED_OPTIONS = [\n  // Sveltia CMS always uses GraphQL for Git backends, so this option is not applicable.\n  { type: 'warning', prop: 'use_graphql', strKey: 'unsupported_ignored_option' },\n  // @todo Remove this warning when Sveltia CMS adds support for open authoring.\n  { type: 'warning', prop: 'open_authoring', strKey: 'open_authoring_unsupported' },\n];\n\n/**\n * Parse and validate the backend configuration from the site config.\n * @param {CmsConfig} cmsConfig Raw CMS configuration.\n * @param {ConfigParserCollectors} collectors Collectors.\n * @throws {Error} If there is an error in the backend config.\n */\nexport const parseBackendConfig = (cmsConfig, collectors) => {\n  const { backend } = cmsConfig;\n  const { errors, warnings } = collectors;\n\n  if (!isObject(backend)) {\n    errors.add(_('config.error.missing_backend'));\n\n    return;\n  }\n\n  const { name } = backend;\n\n  if (!name) {\n    errors.add(_('config.error.missing_backend_name'));\n\n    return;\n  }\n\n  if (!validBackendNames.includes(name)) {\n    const _backend = unsupportedBackends[name];\n    const type = _backend ? (_backend.deprecated ? 'deprecated' : 'known') : 'custom';\n    const label = _backend?.label;\n    const message = _(`config.error.unsupported_${type}_backend`, { values: { name: label } });\n\n    errors.add(`${message} ${_('config.error.unsupported_backend_suggestion')}`);\n\n    return;\n  }\n\n  if (name in gitBackendServices) {\n    const {\n      repo,\n      automatic_deployments: autoDeploy,\n      auth_methods: authMethods,\n      // @ts-ignore GitHub/GitLab only\n      auth_type: authType,\n      // @ts-ignore GitLab/Gitea only\n      app_id: appId,\n    } = /** @type {GitBackend} */ (backend);\n\n    if (Array.isArray(authMethods) && !authMethods.length) {\n      errors.add(_('config.error.no_auth_methods'));\n    }\n\n    const allowTokenAuth = !authMethods || authMethods.includes('token');\n\n    if (repo === undefined) {\n      errors.add(_('config.error.missing_repository'));\n    }\n\n    if (typeof repo !== 'string' || !/^[^/:]+(?:\\/[^/:]+)+$/.test(repo)) {\n      errors.add(_('config.error.invalid_repository'));\n    }\n\n    if (authType === 'implicit') {\n      errors.add(_('config.error.oauth_implicit_flow').replace('BACKEND_NAME', name));\n    }\n\n    if (name === 'github' && authType === 'pkce') {\n      errors.add(_('config.error.github_pkce_unsupported'));\n    }\n\n    if (name === 'gitlab' && authType === 'pkce' && !appId) {\n      errors.add(_('config.error.oauth_no_app_id'));\n    }\n\n    // Gitea requires an app ID for OAuth authentication, but also supports token-based sign-in,\n    // which doesn’t require one. If no app ID is configured and token auth is allowed (the\n    // default), we issue a warning and disable the OAuth Sign In button in the UI — users can still\n    // sign in with a token. If token auth is explicitly disabled as well, we issue an error because\n    // there is no working sign-in method available.\n    // @see https://github.com/sveltia/sveltia-cms/issues/721\n    if (name === 'gitea' && !appId) {\n      if (allowTokenAuth) {\n        warnings.add(_('config.warning.oauth_no_app_id'));\n      } else {\n        errors.add(_('config.error.oauth_no_app_id'));\n      }\n    }\n\n    // @todo Remove the option prior to the 1.0 release.\n    if (autoDeploy !== undefined) {\n      warnDeprecation('automatic_deployments');\n    }\n\n    checkUnsupportedOptions({\n      UNSUPPORTED_OPTIONS,\n      config: backend,\n      context: { cmsConfig },\n      collectors,\n    });\n  }\n};\n","import {\n  ALLOWED_FRONTMATTER_EXTENSIONS,\n  MARKDOWN_EXTENSIONS,\n  TEMPLATE_ENGINE_EXTENSIONS,\n} from '$lib/services/contents/file';\n\n/**\n * @import { Field, FileExtension, FileFormat } from '$lib/types/public';\n */\n\n/**\n * Field types that can be used for the single `body` field special case.\n * @type {string[]}\n */\nconst BODY_FIELD_TYPES = ['code', 'markdown', 'richtext', 'text'];\n/**\n * Known file formats.\n * @type {FileFormat[]}\n */\nconst KNOWN_FORMATS = ['yaml', 'toml', 'json'];\n\n/**\n * Check if there is a mismatch between the file extension and format.\n * @param {FileExtension | undefined} extension File extension.\n * @param {FileFormat | undefined} format File format.\n * @param {Field[]} [fields] Fields.\n * @returns {boolean} Whether there is a mismatch between the file extension and format.\n * @see https://decapcms.org/docs/configuration-options/#extension-and-format\n * @see https://sveltiacms.app/en/docs/collections/entries#file-format-and-extension\n */\nexport const isFormatMismatch = (extension, format, fields = []) => {\n  // If either is undefined, there’s no mismatch\n  if (!extension || !format) {\n    return false;\n  }\n\n  // Raw format never mismatches\n  if (format === 'raw') {\n    return false;\n  }\n\n  const isFrontMatterFormat = format.endsWith('-frontmatter') || format === 'frontmatter';\n\n  // Special case: single `body` code or rich text field in a front-matter format. Treat as no\n  // mismatch to allow editing the raw file content directly, e.g. .json, .yaml, .toml files.\n  if (isFrontMatterFormat && fields.length === 1) {\n    const [{ name, widget = 'string' }] = fields;\n\n    if (name === 'body' && BODY_FIELD_TYPES.includes(widget)) {\n      return false;\n    }\n  }\n\n  // Normalize extensions (yml and yaml are interchangeable)\n  const normalizedExtension = extension === 'yml' ? 'yaml' : extension;\n  // Normalize formats (yml and yaml are interchangeable)\n  const normalizedFormat = format === 'yml' ? 'yaml' : format;\n\n  // For md/markdown/mdx extensions, only -frontmatter formats are valid\n  if (MARKDOWN_EXTENSIONS.includes(normalizedExtension)) {\n    // Valid formats: 'frontmatter' (auto-detect) or any *-frontmatter format\n    return !isFrontMatterFormat;\n  }\n\n  // Check for front-matter format mismatches with non-markdown extensions\n  if (normalizedFormat.endsWith('-frontmatter')) {\n    // Front-matter format: yaml-frontmatter, toml-frontmatter, json-frontmatter\n    const fmFormatType = normalizedFormat.replace('-frontmatter', '');\n\n    // Template engines (njk, astro) work with any front-matter format\n    if (TEMPLATE_ENGINE_EXTENSIONS.includes(normalizedExtension)) {\n      return false;\n    }\n\n    // For other extensions, front-matter only works with matching extension\n    return normalizedExtension !== fmFormatType;\n  }\n\n  // The 'frontmatter' auto-detect format works with markdown extensions and some template engines\n  // (already handled above), so reject it for other extensions\n  if (normalizedFormat === 'frontmatter') {\n    return !ALLOWED_FRONTMATTER_EXTENSIONS.includes(normalizedExtension);\n  }\n\n  // For known formats, ensure extension matches (yaml/toml/json)\n  // For custom extensions, only validate against known formats they explicitly don’t support\n  if (KNOWN_FORMATS.includes(normalizedFormat)) {\n    // If format is yaml/toml/json, extension should match or be custom\n    return KNOWN_FORMATS.includes(normalizedExtension) && normalizedExtension !== normalizedFormat;\n  }\n\n  // Unknown format - don’t enforce mismatch\n  return false;\n};\n","import { addMessage, checkUnsupportedOptions } from '$lib/services/config/parser/utils/validator';\nimport { isCustomTimeZone } from '$lib/services/contents/fields/date-time/config';\n\n/**\n * @import { FieldParserArgs, UnsupportedOption } from '$lib/types/private';\n * @import { DateTimeField } from '$lib/types/public';\n */\n\n/**\n * Unsupported options for DateTime fields.\n * @type {UnsupportedOption[]}\n */\nconst UNSUPPORTED_OPTIONS = [\n  // Deprecated camelCase options in Netlify/Decap CMS config, should be converted to snake_case.\n  { prop: 'dateFormat', newProp: 'date_format' },\n  { prop: 'timeFormat', newProp: 'time_format' },\n  { prop: 'pickerUtc', newProp: 'picker_utc' },\n];\n\n/**\n * Validate an IANA timezone identifier.\n * @param {string} timeZone IANA timezone identifier to validate.\n * @returns {boolean} True if valid, false otherwise.\n */\nconst validateTimeZone = (timeZone) => {\n  try {\n    // Attempt to use the timezone - will throw `RangeError` if invalid.\n    Intl.DateTimeFormat('en-US', { timeZone });\n\n    return true;\n  } catch {\n    return false;\n  }\n};\n\n/**\n * Validate timezone-related options in the DateTime field configuration.\n * @param {FieldParserArgs} args Arguments.\n */\nconst validateTimeZoneOptions = (args) => {\n  const { config, context, collectors } = args;\n\n  const {\n    picker_utc: pickerUTC,\n    input_timezone: inputTimeZone,\n    output_utc: outputUTC,\n  } = /** @type {DateTimeField} */ (config);\n\n  // Warn when both old and new options are present\n  if (pickerUTC !== undefined && (inputTimeZone !== undefined || outputUTC !== undefined)) {\n    addMessage({\n      type: 'warning',\n      strKey: 'conflicting_timezone_options',\n      context,\n      collectors,\n    });\n  }\n\n  if (isCustomTimeZone(inputTimeZone) && !validateTimeZone(inputTimeZone)) {\n    addMessage({\n      strKey: 'invalid_timezone',\n      values: { timeZone: inputTimeZone },\n      context,\n      collectors,\n    });\n  }\n};\n\n/**\n * Parse and validate a DateTime field configuration.\n * @param {FieldParserArgs} args Arguments.\n */\nexport const parseDateTimeFieldConfig = (args) => {\n  checkUnsupportedOptions({ ...args, UNSUPPORTED_OPTIONS });\n  validateTimeZoneOptions(args);\n};\n","/* eslint-disable camelcase */\n\nimport { checkUnsupportedOptions } from '$lib/services/config/parser/utils/validator';\n\n/**\n * @import { FileField } from '$lib/types/public';\n * @import { FieldParserArgs, UnsupportedOption } from '$lib/types/private';\n */\n\n/**\n * Unsupported options for Number fields.\n * @type {UnsupportedOption[]}\n */\nconst UNSUPPORTED_OPTIONS = [\n  // Sveltia CMS doesn’t support the confusing option.\n  { prop: 'allow_multiple', newProp: 'multiple', strKey: 'allow_multiple' },\n];\n\n/**\n * Parse and validate a File field configuration.\n * @param {FieldParserArgs} args Arguments.\n */\nexport const parseFileFieldConfig = (args) => {\n  const { config, context, collectors } = args;\n  const { media_folder } = /** @type {FileField} */ (config);\n\n  // Collect media folder information for later processing\n  if (media_folder !== undefined) {\n    collectors.mediaFields.add({\n      fieldConfig: /** @type {FileField} */ (config),\n      context,\n    });\n  }\n\n  checkUnsupportedOptions({ ...args, UNSUPPORTED_OPTIONS });\n};\n","import { parseFieldConfig, parseFields } from '$lib/services/config/parser/fields';\nimport { addMessage, checkName } from '$lib/services/config/parser/utils/validator';\n\n/**\n * @import {\n * ListFieldWithSubField,\n * ListFieldWithSubFields,\n * ListFieldWithTypes,\n * } from '$lib/types/public';\n * @import {\n * ConfigParserCollectors,\n * ConfigParserContext,\n * FieldParserArgs,\n * } from '$lib/types/private';\n */\n\n/**\n * Check if the field type is valid for a List field’s variable type.\n * @param {string} fieldType Field type.\n * @param {ConfigParserContext} context Context.\n * @param {ConfigParserCollectors} collectors Collectors.\n * @returns {boolean} Whether the field type is valid.\n */\nexport const checkFieldType = (fieldType, context, collectors) => {\n  if (fieldType !== 'object') {\n    addMessage({\n      strKey: 'invalid_list_variable_type',\n      context,\n      values: { widget: fieldType },\n      collectors,\n    });\n\n    return false;\n  }\n\n  return true;\n};\n\n/**\n * Parse and validate a List field configuration.\n * @param {FieldParserArgs} args Arguments.\n */\nexport const parseListFieldConfig = (args) => {\n  const { config, context, collectors } = args;\n  const { field: subfield } = /** @type {ListFieldWithSubField} */ (config);\n  const { fields: subfields } = /** @type {ListFieldWithSubFields} */ (config);\n  const { types } = /** @type {ListFieldWithTypes} */ (config);\n  const { typedKeyPath } = context;\n  const checkNameArgs = { nameCounts: {}, strKeyBase: 'variable_type', collectors };\n\n  // Validate mutually exclusive options\n  if ((subfield && subfields) || (subfield && types) || (subfields && types)) {\n    addMessage({\n      strKey: 'invalid_list_field',\n      context,\n      collectors,\n    });\n\n    return;\n  }\n\n  // Handle single subfield\n  if (subfield) {\n    parseFieldConfig({\n      config: subfield,\n      context: { ...context, typedKeyPath: `${typedKeyPath}.*` },\n      collectors,\n    });\n  }\n\n  // Handle subfields\n  if (subfields) {\n    parseFields(subfields, { ...context, typedKeyPath: `${typedKeyPath}.*` }, collectors);\n  }\n\n  // Handle variable types\n  types?.forEach(({ name, widget: fieldType = 'object', fields: typedFields }, index) => {\n    const newContext = { ...context, typedKeyPath: `${typedKeyPath}.*<${name}>` };\n\n    if (\n      checkName({ ...checkNameArgs, name, index, context: newContext }) &&\n      checkFieldType(fieldType, newContext, collectors) &&\n      typedFields\n    ) {\n      parseFields(typedFields, newContext, collectors);\n    }\n  });\n};\n","import { checkUnsupportedOptions } from '$lib/services/config/parser/utils/validator';\n\n/**\n * @import { FieldParserArgs, UnsupportedOption } from '$lib/types/private';\n */\n\n/**\n * Unsupported options for Number fields.\n * @type {UnsupportedOption[]}\n */\nconst UNSUPPORTED_OPTIONS = [\n  // Deprecated camelCase option in Netlify/Decap CMS config, should be converted to snake_case.\n  { prop: 'valueType', newProp: 'value_type' },\n];\n\n/**\n * Parse and validate a Number field configuration.\n * @param {FieldParserArgs} args Arguments.\n */\nexport const parseNumberFieldConfig = (args) => {\n  checkUnsupportedOptions({ ...args, UNSUPPORTED_OPTIONS });\n};\n","import { parseFields } from '$lib/services/config/parser/fields';\nimport { addMessage, checkName } from '$lib/services/config/parser/utils/validator';\n\n/**\n * @import { ObjectFieldWithSubFields, ObjectFieldWithTypes } from '$lib/types/public';\n * @import { FieldParserArgs } from '$lib/types/private';\n */\n\n/**\n * Parse and validate an Object field configuration.\n * @param {FieldParserArgs} args Arguments.\n */\nexport const parseObjectFieldConfig = (args) => {\n  const { config, context, collectors } = args;\n  const { fields: subfields } = /** @type {ObjectFieldWithSubFields} */ (config);\n  const { types } = /** @type {ObjectFieldWithTypes} */ (config);\n  const { typedKeyPath } = context;\n  const checkNameArgs = { nameCounts: {}, strKeyBase: 'variable_type', collectors };\n\n  // Validate mutually exclusive options\n  if (subfields && types) {\n    addMessage({\n      strKey: 'invalid_object_field',\n      context,\n      collectors,\n    });\n\n    return;\n  }\n\n  // Ensure at least one of `fields` or `types` is defined\n  if (!subfields && !types) {\n    addMessage({\n      strKey: 'object_field_missing_fields',\n      context,\n      collectors,\n    });\n\n    return;\n  }\n\n  // Handle subfields\n  if (subfields) {\n    parseFields(subfields, context, collectors);\n  }\n\n  // Handle variable types\n  types?.forEach(({ name, fields: typedFields }, index) => {\n    const newContext = { ...context, typedKeyPath: `${typedKeyPath}<${name}>` };\n\n    if (checkName({ ...checkNameArgs, name, index, context: newContext }) && typedFields) {\n      parseFields(typedFields, newContext, collectors);\n    }\n  });\n};\n","import { addMessage, checkUnsupportedOptions } from '$lib/services/config/parser/utils/validator';\n\n/**\n * @import { CollectionFile, RelationField } from '$lib/types/public';\n * @import {\n * FieldParserArgs,\n * InternalSingletonCollection,\n * UnsupportedOption,\n * } from '$lib/types/private';\n */\n\n/**\n * Unsupported options for Relation fields.\n * @type {UnsupportedOption[]}\n */\nconst UNSUPPORTED_OPTIONS = [\n  // Deprecated camelCase options in Netlify/Decap CMS config, should be converted to snake_case.\n  { prop: 'displayFields', newProp: 'display_fields' },\n  { prop: 'searchFields', newProp: 'search_fields' },\n  { prop: 'valueField', newProp: 'value_field' },\n  // Sveltia CMS doesn’t have performance issues with many related entries, so this option is not\n  // applicable.\n  { type: 'warning', prop: 'options_length', strKey: 'unsupported_ignored_option' },\n];\n\n/**\n * Parse and validate a Relation field configuration.\n * @param {FieldParserArgs} args Arguments.\n */\nexport const parseRelationFieldConfig = (args) => {\n  const { config, context, collectors } = args;\n  const fieldConfig = /** @type {RelationField} */ (config);\n  const { collection: collectionName, file: fileName, value_field: valueField } = fieldConfig;\n  const { cmsConfig } = context;\n\n  const collection =\n    collectionName === '_singletons'\n      ? /** @type {InternalSingletonCollection} */ ({ files: cmsConfig?.singletons })\n      : cmsConfig?.collections?.find((col) => col.name === collectionName);\n\n  /** @type {CollectionFile | undefined} */\n  let file = undefined;\n\n  // Check if the collection exists\n  if (collection) {\n    const hasFiles = 'files' in collection && Array.isArray(collection.files);\n\n    if (fileName) {\n      // Check if the file exists in the collection\n      if (hasFiles) {\n        file = /** @type {CollectionFile | undefined} */ (\n          collection.files.find((f) => 'file' in f && f.name === fileName)\n        );\n      }\n\n      if (!file) {\n        addMessage({\n          strKey: 'relation_field_invalid_collection_file',\n          context,\n          collectors,\n          values: { file: fileName },\n        });\n      }\n    } else if (hasFiles) {\n      addMessage({\n        strKey: 'relation_field_missing_file_name',\n        context,\n        collectors,\n        values: { collection: collectionName },\n      });\n    }\n  } else {\n    addMessage({\n      strKey: 'relation_field_invalid_collection',\n      context,\n      collectors,\n      values: { collection: collectionName },\n    });\n  }\n\n  // @todo Check if the `value_field` exists in the target collection/file\n  void valueField;\n\n  checkUnsupportedOptions({ ...args, UNSUPPORTED_OPTIONS });\n\n  // Collect relation information for later processing\n  collectors.relationFields.add({ fieldConfig, context });\n};\n","import { checkUnsupportedOptions } from '$lib/services/config/parser/utils/validator';\n\n/**\n * @import { FieldParserArgs, UnsupportedOption } from '$lib/types/private';\n */\n\n/**\n * Unsupported options for RichText fields.\n * @type {UnsupportedOption[]}\n */\nconst UNSUPPORTED_OPTIONS = [\n  // Deprecated camelCase option in Netlify/Decap CMS config, should be converted to snake_case.\n  { prop: 'editorComponents', newProp: 'editor_components' },\n];\n\n/**\n * Parse and validate a RichText field configuration.\n * @param {FieldParserArgs} args Arguments.\n */\nexport const parseRichTextFieldConfig = (args) => {\n  checkUnsupportedOptions({ ...args, UNSUPPORTED_OPTIONS });\n};\n","import { parseDateTimeFieldConfig } from '$lib/services/config/parser/fields/datetime';\nimport { parseFileFieldConfig } from '$lib/services/config/parser/fields/file';\nimport { parseListFieldConfig } from '$lib/services/config/parser/fields/list';\nimport { parseNumberFieldConfig } from '$lib/services/config/parser/fields/number';\nimport { parseObjectFieldConfig } from '$lib/services/config/parser/fields/object';\nimport { parseRelationFieldConfig } from '$lib/services/config/parser/fields/relation';\nimport { parseRichTextFieldConfig } from '$lib/services/config/parser/fields/rich-text';\nimport { addMessage, checkName } from '$lib/services/config/parser/utils/validator';\n\n/**\n * @import { Field } from '$lib/types/public';\n * @import {\n * ConfigParserCollectors,\n * ConfigParserContext,\n * FieldParserArgs,\n * } from '$lib/types/private';\n */\n\n/**\n * Parsers for each field type.\n * @type {Record<string, (args: FieldParserArgs) => void>}\n */\nconst parsers = {\n  datetime: parseDateTimeFieldConfig,\n  file: parseFileFieldConfig,\n  image: parseFileFieldConfig, // alias\n  list: parseListFieldConfig,\n  markdown: parseRichTextFieldConfig, // alias\n  number: parseNumberFieldConfig,\n  object: parseObjectFieldConfig,\n  relation: parseRelationFieldConfig,\n  richtext: parseRichTextFieldConfig,\n};\n\n/**\n * Parse and validate a single field configuration.\n * @param {FieldParserArgs} args Arguments.\n */\nexport const parseFieldConfig = (args) => {\n  const { config, context } = args;\n  const { name, widget: fieldType = 'string' } = config;\n  const { typedKeyPath } = context;\n\n  const newArgs = {\n    ...args,\n    context: {\n      ...context,\n      typedKeyPath: typedKeyPath ? `${typedKeyPath}.${name}` : name,\n    },\n  };\n\n  parsers[fieldType]?.(newArgs);\n\n  if (fieldType === 'date') {\n    addMessage({ ...newArgs, strKey: 'date_field_type' });\n  }\n};\n\n/**\n * Parse and validate multiple field configurations.\n * @param {Field[]} fields Array of field configs to parse.\n * @param {ConfigParserContext} context Context.\n * @param {ConfigParserCollectors} collectors Collectors.\n */\nexport const parseFields = (fields, context, collectors) => {\n  const checkNameArgs = { nameCounts: {}, strKeyBase: 'field_name', context, collectors };\n\n  fields?.forEach((config, index) => {\n    const { name } = config;\n\n    if (checkName({ ...checkNameArgs, name, index })) {\n      parseFieldConfig({ config, context, collectors });\n    }\n  });\n};\n","import { getPathInfo } from '@sveltia/utils/file';\n\nimport { isFormatMismatch } from '$lib/services/config/parser/collections/format';\nimport { parseFields } from '$lib/services/config/parser/fields';\nimport { addMessage, checkName } from '$lib/services/config/parser/utils/validator';\n\n/**\n * @import { CmsConfig, CollectionFile, FileCollection } from '$lib/types/public';\n * @import { ConfigParserCollectors, InternalSingletonCollection } from '$lib/types/private';\n */\n\n/**\n * Parse and validate a single collection file configuration.\n * @param {object} context Context.\n * @param {CmsConfig} context.cmsConfig Raw CMS configuration.\n * @param {FileCollection | InternalSingletonCollection} context.collection Collection config to\n * parse.\n * @param {CollectionFile} context.collectionFile File config to parse.\n * @param {ConfigParserCollectors} collectors Collectors.\n */\nexport const parseCollectionFile = (context, collectors) => {\n  const { collection, collectionFile } = context;\n  // @ts-ignore singleton files don’t have `format` property on their files\n  const { file, format = collection.format, fields, i18n } = collectionFile;\n  const { extension } = getPathInfo(file);\n\n  if (isFormatMismatch(extension, format, fields)) {\n    addMessage({\n      strKey: 'file_format_mismatch',\n      context,\n      values: { extension, format },\n      collectors,\n    });\n  }\n\n  if (!fields?.length) {\n    addMessage({ strKey: 'collection_file_no_fields', context, collectors });\n  }\n\n  if (file.includes('{{locale}}') && !i18n) {\n    // The `{{locale}}` placeholder in the `file` path is only valid if i18n is enabled for the\n    // collection file. Otherwise, it will be replaced with the internal `_default` locale code,\n    // which is likely not the intended behavior.\n    addMessage({ strKey: 'collection_file_i18n_required', context, collectors });\n  }\n\n  parseFields(fields, context, collectors);\n};\n\n/**\n * Parse and validate multiple collection file configurations.\n * @param {object} context Context.\n * @param {CmsConfig} context.cmsConfig Raw CMS configuration.\n * @param {FileCollection | InternalSingletonCollection} context.collection Collection config to\n * parse.\n * @param {ConfigParserCollectors} collectors Collectors.\n */\nexport const parseCollectionFiles = (context, collectors) => {\n  const { cmsConfig, collection } = context;\n  const { files } = collection;\n  const checkNameArgs = { nameCounts: {}, strKeyBase: 'collection_file_name', collectors };\n\n  files.forEach((collectionFile, index) => {\n    // Skip file dividers\n    if ('divider' in collectionFile) return;\n\n    const { name } = collectionFile;\n    const newContext = { cmsConfig, collection, collectionFile };\n\n    if (checkName({ ...checkNameArgs, name, index, context: newContext })) {\n      parseCollectionFile(newContext, collectors);\n    }\n  });\n};\n","/* eslint-disable camelcase */\n\nimport { _ } from '@sveltia/i18n';\n\nimport { warnDeprecation } from '$lib/services/config/deprecations';\nimport { parseCollectionFiles } from '$lib/services/config/parser/collection-files';\nimport { isFormatMismatch } from '$lib/services/config/parser/collections/format';\nimport { parseFields } from '$lib/services/config/parser/fields';\nimport {\n  addMessage,\n  checkName,\n  checkUnsupportedOptions,\n} from '$lib/services/config/parser/utils/validator';\n\n/**\n * @import { CmsConfig, Collection, CollectionDivider, EntryCollection } from '$lib/types/public';\n * @import {\n * ConfigParserCollectors,\n * InternalSingletonCollection,\n * UnsupportedOption,\n * } from '$lib/types/private';\n */\n\n/**\n * Unsupported options for Number fields.\n * @type {UnsupportedOption[]}\n */\nconst UNSUPPORTED_OPTIONS = [\n  // @todo Remove this warning when Sveltia CMS adds support for nested collections.\n  { type: 'warning', prop: 'nested', strKey: 'nested_collections_unsupported' },\n  // Deprecated camelCase option in Netlify/Decap CMS config, should be converted to snake_case.\n  { prop: 'sortableFields', newProp: 'sortable_fields' },\n];\n\n/**\n * Parse and validate a single entry collection configuration.\n * @internal\n * @param {object} context Context.\n * @param {CmsConfig} context.cmsConfig Raw CMS configuration.\n * @param {EntryCollection} context.collection Collection config to parse.\n * @param {ConfigParserCollectors} collectors Collectors.\n */\nexport const parseEntryCollection = (context, collectors) => {\n  const { cmsConfig, collection } = context;\n  const { extension, format, fields, index_file, slug, slug_length: legacySlugLength } = collection;\n\n  if (isFormatMismatch(extension, format)) {\n    addMessage({\n      strKey: 'file_format_mismatch',\n      values: { extension, format },\n      context,\n      collectors,\n    });\n  }\n\n  // @todo Remove the legacy option prior to the 1.0 release.\n  if (legacySlugLength !== undefined) {\n    warnDeprecation('slug_length');\n  }\n\n  checkUnsupportedOptions({ UNSUPPORTED_OPTIONS, config: collection, context, collectors });\n\n  if (!fields?.length) {\n    addMessage({ strKey: 'collection_no_fields', context, collectors });\n  }\n\n  parseFields(fields, context, collectors);\n\n  if (index_file) {\n    parseFields(\n      index_file === true ? fields : (index_file.fields ?? fields),\n      { cmsConfig, collection, isIndexFile: true },\n      collectors,\n    );\n  }\n\n  // Validate slug template: should not contain slashes to avoid confusion with `path` option.\n  // @see https://github.com/decaporg/decap-cms/issues/513\n  if (slug?.includes('/')) {\n    addMessage({\n      strKey: 'invalid_slug_slash',\n      values: { slug },\n      context,\n      collectors,\n    });\n  }\n};\n\n/**\n * Parse and validate a collection or divider configuration.\n * @internal\n * @param {object} context Context.\n * @param {CmsConfig} context.cmsConfig Raw CMS configuration.\n * @param {Collection | CollectionDivider} context.collection Collection config to parse.\n * @param {ConfigParserCollectors} collectors Collectors.\n */\nexport const parseCollection = ({ cmsConfig, collection }, collectors) => {\n  const hasDivider = 'divider' in collection;\n  const hasFiles = 'files' in collection;\n  const hasFolder = 'folder' in collection;\n\n  // Validate at least one option\n  if (!hasDivider && !hasFiles && !hasFolder) {\n    addMessage({\n      strKey: 'invalid_collection_no_options',\n      context: { cmsConfig, collection },\n      collectors,\n    });\n\n    return;\n  }\n\n  // Validate mutually exclusive options\n  if ((hasDivider && hasFiles) || (hasDivider && hasFolder) || (hasFiles && hasFolder)) {\n    addMessage({\n      strKey: 'invalid_collection_multiple_options',\n      // @ts-ignore\n      context: { cmsConfig, collection },\n      collectors,\n    });\n\n    return;\n  }\n\n  if (hasFiles) {\n    parseCollectionFiles({ cmsConfig, collection }, collectors);\n  } else if (hasFolder) {\n    parseEntryCollection({ cmsConfig, collection }, collectors);\n  }\n};\n\n/**\n * Parse and validate the collections configuration from the site config.\n * @param {CmsConfig} cmsConfig Raw CMS configuration.\n * @param {ConfigParserCollectors} collectors Collectors.\n * @throws {Error} If there is an error in the collections config.\n */\nexport const parseCollections = (cmsConfig, collectors) => {\n  const { collections, singletons } = cmsConfig;\n  const { errors } = collectors;\n\n  if (!Array.isArray(collections) && !Array.isArray(singletons)) {\n    errors.add(_('config.error.no_collection'));\n\n    return;\n  }\n\n  const checkNameArgs = { nameCounts: {}, strKeyBase: 'collection_name', collectors };\n\n  collections?.forEach((collection, index) => {\n    // Skip collection dividers\n    if ('divider' in collection) return;\n\n    const { name } = collection;\n    const newContext = { cmsConfig, collection };\n\n    if (checkName({ ...checkNameArgs, name, index, context: newContext })) {\n      parseCollection(newContext, collectors);\n    }\n  });\n\n  if (Array.isArray(singletons)) {\n    /** @type {InternalSingletonCollection} */\n    const collection = {\n      name: '_singletons',\n      label: _('singletons'),\n      label_singular: _('singleton'),\n      files: singletons,\n    };\n\n    parseCollectionFiles({ cmsConfig, collection }, collectors);\n  }\n};\n","/* eslint-disable camelcase */\n\nimport { _ } from '@sveltia/i18n';\n\nimport { checkName } from '$lib/services/config/parser/utils/validator';\nimport { CLOUD_MEDIA_LIBRARY_NAMES } from '$lib/services/integrations/media-libraries/cloud';\n\n/**\n * @import { CmsConfig } from '$lib/types/public';\n * @import { ConfigParserCollectors } from '$lib/types/private';\n */\n\n/**\n * Parse and validate media folder configuration.\n * @param {CmsConfig} cmsConfig Raw CMS configuration.\n * @param {ConfigParserCollectors} collectors Collectors.\n * @throws {Error} If there is an error in the media folder config.\n */\nexport const parseMediaConfig = (cmsConfig, collectors) => {\n  const { media_folder, public_folder, media_library, media_libraries, asset_collections } =\n    cmsConfig;\n\n  const { errors } = collectors;\n\n  if (media_folder === undefined) {\n    // Require `media_folder` unless a cloud media library is configured\n    if (\n      !CLOUD_MEDIA_LIBRARY_NAMES.includes(/** @type {any} */ (media_library?.name ?? '')) &&\n      !Object.keys(media_libraries || {}).some((name) =>\n        CLOUD_MEDIA_LIBRARY_NAMES.includes(/** @type {any} */ (name)),\n      )\n    ) {\n      errors.add(_('config.error.missing_media_folder'));\n    }\n  } else if (typeof media_folder !== 'string') {\n    errors.add(_('config.error.invalid_media_folder'));\n  }\n\n  if (public_folder !== undefined) {\n    if (typeof public_folder !== 'string') {\n      errors.add(_('config.error.invalid_public_folder'));\n    } else {\n      if (/^\\.{1,2}\\//.test(public_folder)) {\n        errors.add(_('config.error.public_folder_relative_path'));\n      }\n\n      if (/^https?:/.test(public_folder)) {\n        errors.add(_('config.error.public_folder_absolute_url'));\n      }\n    }\n  }\n\n  if (asset_collections !== undefined) {\n    if (!Array.isArray(asset_collections)) {\n      errors.add(_('config.error.invalid_asset_collections'));\n    } else {\n      const checkNameArgs = { nameCounts: {}, strKeyBase: 'asset_collection_name', collectors };\n\n      asset_collections.forEach((assetCollection, index) => {\n        const { name, media_folder: mediaFolder } = assetCollection;\n        const context = { cmsConfig };\n\n        if (checkName({ ...checkNameArgs, name, index, context })) {\n          // media_folder is required\n          if (typeof mediaFolder !== 'string') {\n            errors.add(\n              _('config.error.asset_collection_invalid_media_folder', { values: { name } }),\n            );\n          }\n        }\n      });\n    }\n  }\n};\n","import { parseBackendConfig } from '$lib/services/config/parser/backend';\nimport { parseCollections } from '$lib/services/config/parser/collections';\nimport { parseMediaConfig } from '$lib/services/config/parser/media';\nimport { checkUnsupportedOptions } from '$lib/services/config/parser/utils/validator';\n\n/**\n * @import { CmsConfig } from '$lib/types/public';\n * @import { ConfigParserCollectors, UnsupportedOption } from '$lib/types/private';\n */\n\n/**\n * Unsupported options.\n * @type {UnsupportedOption[]}\n */\nconst UNSUPPORTED_OPTIONS = [\n  // @todo Remove this warning when Sveltia CMS adds support for editorial workflow.\n  {\n    type: 'warning',\n    prop: 'publish_mode',\n    value: 'editorial_workflow',\n    strKey: 'editorial_workflow_unsupported',\n  },\n  // Sveltia CMS doesn’t use a proxy server for local workflow, so this option is not applicable.\n  { type: 'warning', prop: 'local_backend', strKey: 'unsupported_ignored_option' },\n  // Sveltia CMS detects user’s locale from the browser, so this option is not applicable.\n  { type: 'warning', prop: 'locale', strKey: 'unsupported_ignored_option' },\n  // Sveltia CMS doesn’t have performance issues with searching content, so this option is not\n  // applicable.\n  { type: 'warning', prop: 'search', strKey: 'unsupported_ignored_option' },\n];\n\n/**\n * Parse and validate the CMS configuration.\n * @param {CmsConfig} cmsConfig Raw CMS configuration.\n * @param {ConfigParserCollectors} collectors Collectors.\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 parseCmsConfig = (cmsConfig, collectors) => {\n  parseBackendConfig(cmsConfig, collectors);\n  parseMediaConfig(cmsConfig, collectors);\n  parseCollections(cmsConfig, collectors);\n\n  checkUnsupportedOptions({\n    UNSUPPORTED_OPTIONS,\n    config: cmsConfig,\n    context: { cmsConfig },\n    collectors,\n  });\n};\n","import { _ } from '@sveltia/i18n';\nimport { getHash } from '@sveltia/utils/crypto';\nimport { isObject } from '@sveltia/utils/object';\nimport { isURL } from '@sveltia/utils/string';\nimport merge from 'deepmerge';\nimport { derived, writable } from 'svelte/store';\nimport { stringify } from 'yaml';\n\nimport { allAssetFolders } from '$lib/services/assets/folders';\nimport { getAllAssetFolders } from '$lib/services/config/folders/assets';\nimport { getAllEntryFolders } from '$lib/services/config/folders/entries';\nimport { fetchCmsConfig } from '$lib/services/config/loader';\nimport { parseCmsConfig } from '$lib/services/config/parser';\nimport { allEntryFolders } from '$lib/services/contents';\nimport { prefs } from '$lib/services/user/prefs.svelte';\n\n/**\n * @import { Readable, Writable } from 'svelte/store';\n * @import { ConfigParserCollectors, InternalCmsConfig } from '$lib/types/private';\n * @import { CmsConfig } from '$lib/types/public';\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\n  ? VITE_SITE_URL || 'http://localhost:5174'\n  : /* v8 ignore next */ undefined;\n\n/**\n * @type {Partial<CmsConfig>}\n */\nexport const rawCmsConfig = {};\n\n/**\n * @type {Writable<InternalCmsConfig | undefined>}\n */\nexport const cmsConfig = writable();\n\n/**\n * @type {Writable<string | undefined>}\n */\nexport const cmsConfigVersion = writable();\n\n/**\n * @type {Writable<string[]>}\n */\nexport const cmsConfigErrors = writable([]);\n\n/**\n * Whether the CMS configuration has been loaded, regardless of whether it contains errors.\n * @type {Readable<boolean>}\n */\nexport const cmsConfigLoaded = derived(\n  [cmsConfig, cmsConfigErrors],\n  ([_cmsConfig, _cmsConfigErrors]) => !!_cmsConfig || !!_cmsConfigErrors.length,\n);\n\n/**\n * Collectors used during config parsing.\n * @type {ConfigParserCollectors}\n */\nexport const collectors = {\n  errors: new Set(),\n  warnings: new Set(),\n  mediaFields: new Set(),\n  relationFields: new Set(),\n};\n\n/**\n * Initialize the CMS configuration state by loading the YAML file and optionally merge the object\n * with one specified with `CMS.init()`.\n * @param {CmsConfig} [manualConfig] Raw configuration specified with manual initialization.\n * @todo Normalize configuration object.\n */\nexport const initCmsConfig = async (manualConfig) => {\n  cmsConfig.set(undefined);\n  cmsConfigErrors.set([]);\n\n  Object.assign(collectors, {\n    errors: new Set(),\n    warnings: new Set(),\n    mediaFields: new Set(),\n    relationFields: new Set(),\n  });\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(_('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(_('config.error.parse_failed'));\n      }\n\n      rawConfig = manualConfig;\n\n      if (rawConfig.load_config_file !== false) {\n        rawConfig = merge(await fetchCmsConfig({ manualInit: true }), rawConfig);\n      }\n    } else {\n      rawConfig = await fetchCmsConfig();\n    }\n\n    // Store the raw config so it can be used in the parser and config viewer\n    Object.assign(rawCmsConfig, rawConfig);\n\n    parseCmsConfig(rawConfig, collectors);\n\n    if (collectors.errors.size) {\n      collectors.errors.forEach((warning) => {\n        // eslint-disable-next-line no-console\n        console.error(warning);\n      });\n\n      throw new Error('Errors found in configuration');\n    }\n\n    if (collectors.warnings.size) {\n      collectors.warnings.forEach((warning) => {\n        // eslint-disable-next-line no-console\n        console.warn(warning);\n      });\n    }\n\n    /** @type {InternalCmsConfig} */\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 =\n      config.site_url?.trim() || (DEV ? DEV_SITE_URL : /* v8 ignore next */ 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    cmsConfig.set(config);\n    cmsConfigVersion.set(await getHash(stringify(config)));\n  } catch (/** @type {any} */ ex) {\n    cmsConfigErrors.set(\n      collectors.errors.size\n        ? [...collectors.errors]\n        : [ex.name === 'Error' ? ex.message : _('config.error.unexpected')],\n    );\n\n    // eslint-disable-next-line no-console\n    console.error(ex, ex.cause);\n  }\n};\n\ncmsConfig.subscribe((config) => {\n  if (prefs.devModeEnabled) {\n    // eslint-disable-next-line no-console\n    console.info('cmsConfig', config);\n    // eslint-disable-next-line no-console\n    console.info('collectors', collectors);\n  }\n\n  if (!config) {\n    return;\n  }\n\n  const _allEntryFolders = getAllEntryFolders(config);\n  const _allAssetFolders = getAllAssetFolders(config, [...collectors.mediaFields]);\n\n  // `getCollection` depends on `allAssetFolders`\n  allEntryFolders.set(_allEntryFolders);\n  allAssetFolders.set(_allAssetFolders);\n\n  if (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 { get } from 'svelte/store';\n\nimport { cmsConfig } 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> | false} Options, or `false` if the library is explicitly disabled.\n */\nexport const getMediaLibraryOptions = ({ libraryName = 'default', fieldConfig } = {}) => {\n  const _cmsConfig = get(cmsConfig);\n\n  // `all` provides shared defaults merged into the `default` library’s `config`. Other libraries\n  // (e.g. Cloudinary) pass `config` directly to their SDK, so we must not pollute it.\n  const sharedConfig =\n    libraryName === 'default'\n      ? { ..._cmsConfig?.media_libraries?.all, ...fieldConfig?.media_libraries?.all }\n      : undefined;\n\n  // Merge shared options into the library config’s `config` property (default library only).\n  /**\n   * Merge shared (`all`) options into library-specific options.\n   * @param {Record<string, any> | null | undefined} opts Library-specific options.\n   * @returns {Record<string, any>} Merged options.\n   */\n  const withShared = (opts) => ({\n    ...opts,\n    ...(sharedConfig &&\n      Object.keys(sharedConfig).length > 0 && {\n        config: { ...sharedConfig, ...opts?.config },\n      }),\n  });\n\n  // Priority 1: fieldConfig.media_libraries (including explicit `false` to disable)\n  if (fieldConfig?.media_libraries && libraryName in fieldConfig.media_libraries) {\n    const opts = fieldConfig.media_libraries[libraryName];\n\n    return opts === false ? false : withShared(opts);\n  }\n\n  // Priority 2: fieldConfig.media_library (legacy)\n  if (fieldConfig?.media_library) {\n    const siteLibName = _cmsConfig?.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 withShared(fieldLib);\n    }\n  }\n\n  // Priority 3: cmsConfig.media_libraries (including explicit `false` to disable)\n  if (_cmsConfig?.media_libraries && libraryName in _cmsConfig.media_libraries) {\n    const opts = _cmsConfig.media_libraries[libraryName];\n\n    return opts === false ? false : withShared(opts);\n  }\n\n  // Priority 4: cmsConfig.media_library (legacy)\n  if (_cmsConfig?.media_library?.name === libraryName) {\n    return withShared(_cmsConfig.media_library);\n  }\n\n  return withShared(null);\n};\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 {{ enabled: boolean, 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    multiple,\n    slugify_filename: slugify,\n    transformations,\n  } = typeof options === 'boolean' ? {} : (options?.config ?? {});\n\n  return {\n    enabled: options !== false,\n    config: {\n      max_file_size: typeof maxSize === 'number' && Number.isInteger(maxSize) ? maxSize : Infinity,\n      multiple: typeof multiple === 'boolean' ? multiple : false,\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 (/** @type {string[]} */ (RASTER_IMAGE_FORMATS).includes(subType)) {\n      if (subType in transformations) {\n        transformation = /** @type {Record<string, any>} */ (transformations)[subType];\n      } else if ('raster_image' in transformations) {\n        transformation = transformations.raster_image;\n      }\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","import { transformFile } from '$lib/services/integrations/media-libraries/default';\nimport { formatFileName } from '$lib/services/utils/file';\n\n/**\n * @import { SharedMediaLibraryOptions } from '$lib/types/public';\n */\n\n/**\n * @typedef {object} ProcessFileResult\n * @property {File} file Processed file.\n * @property {File | undefined} originalFile Pre-transformation file if a transformation was\n * applied.\n * @property {boolean} oversized Whether the file exceeds the maximum allowed size.\n */\n\n/**\n * Process a file by applying slugification, transformation, and size validation.\n * @param {File} file File to process.\n * @param {SharedMediaLibraryOptions} [options] Processing options.\n * @returns {Promise<ProcessFileResult>} Result of processing the file.\n */\nexport const processFile = async (\n  file,\n  {\n    slugify_filename: slugifyFilename = false,\n    transformations,\n    max_file_size: maxFileSize = Infinity,\n  } = {},\n) => {\n  if (slugifyFilename) {\n    const { name, type, lastModified } = file;\n    const newName = formatFileName(name, { slugificationEnabled: true });\n\n    file = new File([file], newName, { type, lastModified });\n  }\n\n  const preTransformFile = file;\n\n  if (transformations) {\n    file = await transformFile(file, transformations);\n  }\n\n  return {\n    file,\n    originalFile: file !== preTransformFile ? preTransformFile : undefined,\n    oversized: file.size > maxFileSize,\n  };\n};\n","import { getPathInfo } from '@sveltia/utils/file';\nimport { escapeRegExp, stripSlashes } from '@sveltia/utils/string';\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 { processFile } from '$lib/services/assets/process';\nimport { fillTemplate } from '$lib/services/common/template';\nimport {\n  ESCAPED_PLACEHOLDER_REGEX,\n  TEMPLATE_TAG_REGEX,\n} from '$lib/services/common/template/constants';\nimport { getCollection } from '$lib/services/contents/collection';\nimport { isCollectionIndexFile } from '$lib/services/contents/collection/entries/index-file';\nimport { getCollectionFilesByEntry } from '$lib/services/contents/collection/files';\nimport { getAssociatedCollections } from '$lib/services/contents/entry';\nimport { getDefaultMediaLibraryOptions } 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 * InternalCollection,\n * InternalCollectionFile,\n * ProcessedAssets,\n * TypedFieldKeyPath,\n * UploadingAssets,\n * } from '$lib/types/private';\n */\n\nconst ENTRY_FOLDER_REGEX = /^(?<entryFolder>.+?)(?:\\/[^/]+)?$/;\n\n/**\n * List of all assets.\n * @type {Writable<Asset[]>}\n */\nexport const allAssets = writable([]);\n\n/**\n * Lazily-rebuilt Map from asset path to Asset, used for O(1) path lookups. Rebuilt only when\n * `allAssets` changes reference.\n * @type {{ source: Asset[] | undefined, map: Map<string, Asset> }}\n */\nconst assetPathCache = { source: undefined, map: new Map() };\n\n/**\n * Get a Map from asset path to Asset, rebuilt only when `allAssets` changes.\n * @returns {Map<string, Asset>} Map.\n */\nconst getAssetPathMap = () => {\n  const _allAssets = get(allAssets);\n\n  if (_allAssets !== assetPathCache.source) {\n    assetPathCache.source = _allAssets;\n    assetPathCache.map = new Map(_allAssets.map((asset) => [asset.path, asset]));\n  }\n\n  return assetPathCache.map;\n};\n\n/**\n * Get an asset by its internal repository path.\n * @param {string} path Asset path.\n * @returns {Asset | undefined} Asset.\n */\nexport const getAssetByInternalPath = (path) => getAssetPathMap().get(path);\n\n/**\n * Selected assets.\n * @type {Writable<Asset[]>}\n */\nexport const selectedAssets = writable([]);\n\n/**\n * Set of selected asset paths, for O(1) membership checks in list items.\n * @type {import('svelte/store').Readable<Set<string>>}\n */\nexport const selectedAssetPathSet = derived(\n  selectedAssets,\n  ($selectedAssets) => new Set($selectedAssets.map((asset) => asset.path)),\n);\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 { config } = getDefaultMediaLibraryOptions();\n\n  (async () => {\n    if (originalFiles.length && config.transformations) {\n      update((state) => ({ ...state, processing: true }));\n    }\n\n    const results = await Promise.all(originalFiles.map((file) => processFile(file, config)));\n\n    update(() => ({\n      processing: false,\n      undersizedFiles: results.filter(({ oversized }) => !oversized).map(({ file }) => file),\n      oversizedFiles: results.filter(({ oversized }) => oversized).map(({ file }) => file),\n      transformedFileMap: new WeakMap(\n        results\n          .filter(({ originalFile }) => originalFile !== undefined)\n          .map(({ file, originalFile }) => [file, /** @type {File} */ (originalFile)]),\n      ),\n    }));\n  })();\n});\n\n/**\n * Find an asset by a relative path, using the associated entry and collection to help locate it.\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 {InternalCollection} context.collection Associated collection.\n * @param {InternalCollectionFile} [context.file] Associated collection file.\n * @param {TypedFieldKeyPath} [context.typedKeyPath] Field key path for field-level media folders.\n * @returns {Asset | undefined} Found asset.\n */\nexport const getAssetByRelativePathAndCollection = ({\n  path,\n  entry,\n  collection,\n  file,\n  typedKeyPath,\n}) => {\n  const { locales } = entry;\n\n  const {\n    _i18n: { defaultLocale },\n  } = file ?? collection;\n\n  // When a field-level key path is provided, look up the field-specific asset folder first so we\n  // use the correct `media_folder` (e.g. a field with `media_folder: images1` instead of the\n  // collection-level `/src/assets/images/blog`).\n  const fieldFolder = typedKeyPath\n    ? getAssetFolder({ collectionName: collection.name, fileName: file?.name, typedKeyPath })\n    : undefined;\n\n  const mediaFolder = fieldFolder?.entryRelative\n    ? (fieldFolder.internalSubPath ?? '')\n    : /** @type {string | undefined} */ ((file ?? collection).media_folder);\n\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  // The regex matches any non-empty string (`entryFilePath` is guaranteed non-empty above). Named\n  // capture groups always produce a `groups` object, so no optional chaining needed.\n  const { entryFolder } = /** @type {{ entryFolder: string }} */ (\n    /** @type {RegExpMatchArray} */ (entryFilePath.match(ENTRY_FOLDER_REGEX)).groups\n  );\n\n  // Strip the `media_folder` prefix from the stored path before joining with `mediaFolder`, to\n  // avoid duplication when the stored value already includes the media folder (e.g.\n  // `images/photo.jpg`). Also normalize `./` prefix since `./images/photo.jpg` and\n  // `images/photo.jpg` are equivalent relative paths.\n  const normalizedPath = path.replace(/^\\.\\//, '');\n\n  const localPath =\n    mediaFolder && normalizedPath.startsWith(`${mediaFolder}/`)\n      ? normalizedPath.slice(mediaFolder.length + 1)\n      : normalizedPath;\n\n  const resolvedPath = resolvePath(createPath([entryFolder, mediaFolder, localPath]));\n\n  return getAssetPathMap().get(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 * @param {string} [args.collectionName] Collection name, used when no entry is available.\n * @param {string} [args.fileName] Collection file name. File/singleton collection only.\n * @param {TypedFieldKeyPath} [args.typedKeyPath] Field key path for field-level media folders.\n * @returns {Asset | undefined} Corresponding asset.\n */\nexport const getAssetByRelativePath = ({ path, entry, collectionName, fileName, typedKeyPath }) => {\n  if (!entry) {\n    // Without an entry we use collectionName/fileName to scan configured folders. For\n    // entry-relative folders, internalPath + internalSubPath is used as a best-effort path.\n    const scanningFolders = /** @type {AssetFolderInfo[]} */ (\n      [\n        collectionName && typedKeyPath\n          ? getAssetFolder({ collectionName, fileName, typedKeyPath })\n          : undefined,\n        collectionName ? getAssetFolder({ collectionName, fileName }) : undefined,\n        collectionName ? getAssetFolder({ collectionName }) : undefined,\n        get(globalAssetFolder),\n      ].filter((folder) => !!folder && !folder.hasTemplateTags)\n    );\n\n    /** @type {Asset | undefined} */\n    let foundAsset;\n\n    scanningFolders.find((folder) => {\n      // Strip the publicPath prefix from the stored path to get the bare filename/subpath, so\n      // that e.g. `uploads/photo.jpg` with publicPath `/uploads` resolves to `uploads/photo.jpg`\n      // internally rather than `uploads/uploads/photo.jpg`.\n      const publicPathBase = folder.publicPath?.replace(/^\\//, '') ?? '';\n\n      const localPath =\n        publicPathBase && path.startsWith(`${publicPathBase}/`)\n          ? path.slice(publicPathBase.length + 1)\n          : path;\n\n      const found = getAssetPathMap().get(\n        createPath([folder.internalPath, folder.internalSubPath ?? '', localPath]),\n      );\n\n      if (found) {\n        foundAsset = found;\n      }\n\n      return !!found;\n    });\n\n    return foundAsset ?? getAssetPathMap().get(path);\n  }\n\n  const assets = getAssociatedCollections(entry).flatMap((collection) => {\n    const collectionFiles = getCollectionFilesByEntry(collection, entry);\n    const args = { path, entry, collection, typedKeyPath };\n\n    if (collectionFiles.length) {\n      return collectionFiles.map((file) => getAssetByRelativePathAndCollection({ ...args, file }));\n    }\n\n    return getAssetByRelativePathAndCollection({ ...args });\n  });\n\n  return (\n    assets.filter(Boolean)[0] ??\n    // Fall back to exact match at the root folder\n    getAssetPathMap().get(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 * @param {TypedFieldKeyPath} [args.typedKeyPath] Field key path for field-level media folders.\n * @returns {Asset | undefined} Corresponding asset.\n */\nexport const getAssetByAbsolutePath = ({ path, entry, collectionName, fileName, typedKeyPath }) => {\n  const exactMatch = getAssetPathMap().get(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    typedKeyPath ? getAssetFolder({ collectionName, fileName, typedKeyPath }) : undefined,\n    getAssetFolder({ collectionName, fileName }),\n    getAssetFolder({ collectionName }),\n    get(globalAssetFolder),\n    get(allAssetFolders).findLast((folder) => {\n      const publicPath = folder.publicPath ?? '';\n      const normalizedPath = escapeRegExp(publicPath).replace(ESCAPED_PLACEHOLDER_REGEX, '.+?');\n\n      return dirName.match(`^${normalizedPath}${publicPath ? '(?=\\\\/|$)' : '$'}`);\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    const { publicPath, collectionName: _collectionName } = folder;\n    let { internalPath } = folder;\n\n    // Deal with template tags like `/assets/images/{{slug}}`\n    if (internalPath !== undefined && TEMPLATE_TAG_REGEX.test(internalPath)) {\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    // Handle assets stored in a subfolder of the internal path\n    if (publicPath && internalPath && dirName) {\n      if (publicPath === '/') {\n        internalPath = `${internalPath}${dirName}`;\n      } else if (dirName.startsWith(`${publicPath}/`)) {\n        internalPath = dirName.replace(publicPath, internalPath);\n      }\n    }\n\n    const fullPath = createPath([internalPath, baseName]);\n    const found = getAssetPathMap().get(fullPath);\n\n    if (found) {\n      foundAsset = found;\n    }\n\n    return !!found;\n  });\n\n  return foundAsset;\n};\n\n/**\n * Check if a path is a relative path. A path starting with `@`, like `@assets/images/...` is a\n * special case, considered as an absolute path.\n * @param {string} path Path to check.\n * @returns {boolean} `true` if the path is relative.\n */\nexport const isRelativePath = (path) => !/^[/@]/.test(path);\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 * @param {TypedFieldKeyPath} [args.typedKeyPath] Field key path for field-level media folders.\n * @returns {Asset | undefined} Corresponding asset.\n */\nexport const getAssetByPath = ({ value, entry, collectionName, fileName, typedKeyPath }) => {\n  // Remove potential fragment before decoding\n  const path = decodeFilePath(value.split('#')[0]);\n\n  // Handle a relative path\n  if (isRelativePath(path)) {\n    return getAssetByRelativePath({ path, entry, collectionName, fileName, typedKeyPath });\n  }\n\n  return getAssetByAbsolutePath({ path, entry, collectionName, fileName, typedKeyPath });\n};\n\n/**\n * Check if an asset belongs to the given asset folder.\n * @param {Asset} asset Asset.\n * @param {AssetFolderInfo} folder Folder info.\n * @returns {boolean} Result.\n */\nexport const isAssetInFolder = ({ folder: assetFolder }, folder) =>\n  assetFolder === folder ||\n  (assetFolder.collectionName === folder.collectionName &&\n    assetFolder.fileName === folder.fileName &&\n    assetFolder.typedKeyPath === folder.typedKeyPath &&\n    assetFolder.isIndexFile === folder.isIndexFile &&\n    assetFolder.internalPath === folder.internalPath &&\n    assetFolder.internalSubPath === folder.internalSubPath &&\n    assetFolder.publicPath === folder.publicPath &&\n    assetFolder.entryRelative === folder.entryRelative &&\n    assetFolder.hasTemplateTags === folder.hasTemplateTags);\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) =>\n  get(allAssets).filter((asset) => isAssetInFolder(asset, 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\n/**\n * Get a list of duplicate files based on their names compared to existing assets.\n * @param {File[]} files The list of files to check for duplicates.\n * @param {Asset[]} assets The list of existing assets to compare against.\n * @returns {File[]} An array of files that have duplicate names in the existing assets.\n */\nexport const getDuplicateFiles = (files, assets) => {\n  if (!assets.length || !files.length) {\n    return [];\n  }\n\n  const existingNames = new Set(assets.map(({ name }) => name.normalize().toLowerCase()));\n\n  return files.filter((file) => existingNames.has(file.name.normalize().toLowerCase()));\n};\n","import { getPathInfo } from '@sveltia/utils/file';\nimport { escapeRegExp } from '@sveltia/utils/string';\nimport { get } from 'svelte/store';\n\nimport { allAssets, getAssetByPath, isRelativePath } 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/entries/index-file';\nimport { getField } from '$lib/services/contents/entry/fields';\n\n/**\n * @import { Asset, Entry, InternalEntryCollection } from '$lib/types/private';\n * @import { FieldKeyPath } from '$lib/types/public';\n */\n\n/**\n * Get the given entry’s thumbnail URL.\n * @param {InternalEntryCollection} 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  const contentKeys = _thumbnailFieldNames.some((name) => name.includes('*'))\n    ? Object.keys(content)\n    : undefined;\n\n  /** @type {FieldKeyPath[]} */\n  const keyPathList = _thumbnailFieldNames.flatMap((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 /** @type {string[]} */ (contentKeys).filter((keyPath) => regex.test(keyPath));\n    }\n\n    return name;\n  });\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({\n          value: content[keyPath],\n          entry,\n          collectionName,\n          typedKeyPath: keyPath,\n          thumbnail: true,\n        })\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  const seen = new Set();\n\n  const assets = /** @type {Asset[]} */ (\n    Object.values(locales)\n      .flatMap(({ content }) =>\n        Object.entries(content ?? {}).map(([keyPath, value]) => {\n          if (typeof value === 'string' && (relative ? isRelativePath(value) : true)) {\n            const widget = getField({ collectionName, keyPath, isIndexFile })?.widget ?? 'string';\n\n            if (widget !== 'image' && widget !== 'file') {\n              return undefined;\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      .filter((value) => !!value && !seen.has(value) && (seen.add(value), true))\n  );\n\n  // Add orphaned/unused entry-relative assets\n  if (relative && getAssetFolder({ collectionName, fileName })?.entryRelative) {\n    const entryFolderPath = getPathInfo(Object.values(entry.locales)[0].path).dirname;\n\n    if (entryFolderPath !== undefined) {\n      const existingPaths = new Set(assets.map(({ path }) => path));\n\n      get(allAssets).forEach((asset) => {\n        const assetFolderPath = getPathInfo(asset.path).dirname;\n\n        if (\n          assetFolderPath !== undefined &&\n          // Include assets in the entry folder and its subfolders\n          (assetFolderPath === entryFolderPath ||\n            assetFolderPath.startsWith(`${entryFolderPath}/`)) &&\n          !existingPaths.has(asset.path)\n        ) {\n          assets.push(asset);\n          existingPaths.add(asset.path);\n        }\n      });\n    }\n  }\n\n  return assets;\n};\n","import { isObject } from '@sveltia/utils/object';\nimport { flatten, unflatten } from 'flat';\nimport { fromJS, isMap } from 'immutable';\n\nimport { getAssociatedAssets } from '$lib/services/contents/entry/assets';\nimport { user } from '$lib/services/user/account.svelte';\n\n/**\n * @import { MapOf } from 'immutable';\n * @import { ApiEntry, AppEventListener, AppEventType } from '$lib/types/public';\n * @import { Asset, Entry, EntryDraft, User } from '$lib/types/private';\n */\n\n/**\n * Supported event hooks.\n * @type {AppEventType[]}\n */\nexport const SUPPORTED_EVENT_TYPES = [\n  'preSave',\n  'postSave',\n  'prePublish',\n  'postPublish',\n  'preUnpublish',\n  'postUnpublish',\n];\n\n/**\n * Event types that allow updating of the entry data.\n * @type {AppEventType[]}\n */\nexport const UPDATABLE_EVENT_TYPES = ['preSave', 'prePublish'];\n\n/**\n * @type {Set<AppEventListener>}\n */\nexport const eventHookRegistry = new Set();\n\n/**\n * Create an Immutable.js Map representing the entry data, compatible with Netlify/Decap CMS event\n * hook handlers.\n * @param {object} args Arguments.\n * @param {Record<string, any>} args.content Entry content for the default locale.\n * @param {string[]} args.otherLocales Other locale keys.\n * @param {Entry['locales']} args.locales All locale data keyed by locale.\n * @param {string} args.slug Entry slug.\n * @param {string} args.path Entry file path.\n * @param {boolean} args.isNew Whether the entry is new.\n * @param {string} args.collectionName Collection name.\n * @param {Asset[]} args.associatedAssets Assets associated with the entry.\n * @returns {MapOf<ApiEntry>} Immutable Map of the entry data.\n * @see https://immutable-js.com/docs/v5/Map/\n */\nexport const createEntryMap = ({\n  content,\n  otherLocales,\n  locales,\n  slug,\n  path,\n  isNew,\n  collectionName,\n  associatedAssets,\n}) =>\n  // @ts-ignore\n  fromJS({\n    // Entry data for the default locale\n    data: unflatten(content),\n    // Entry data for other locales\n    // @see https://github.com/decaporg/decap-cms/issues/4729\n    i18n: Object.fromEntries(\n      otherLocales.map((locale) => [locale, { data: unflatten(locales[locale].content) }]),\n    ),\n    // Other entry properties\n    slug,\n    path,\n    newRecord: isNew,\n    collection: collectionName,\n    mediaFiles: associatedAssets.map(({ sha, file, size, blobURL, ...asset }) => ({\n      id: sha,\n      name: asset.name,\n      path: asset.path,\n      file,\n      size,\n      url: blobURL,\n      displayURL: blobURL,\n    })),\n    // Additional properties included for compatibility with Netlify/Decap CMS\n    meta: { path },\n    isModification: null,\n    label: null,\n    partial: false,\n    author: '',\n    raw: '',\n    status: '',\n    updatedOn: '',\n  });\n\n/**\n * Call the registered event hooks.\n * @param {object} args Arguments.\n * @param {AppEventType} args.type Type of event.\n * @param {EntryDraft} args.draft Entry draft being saved.\n * @param {Entry} args.savingEntry Entry being saved. This object may be mutated by the hook.\n */\nexport const callEventHooks = async ({ type, draft, savingEntry }) => {\n  const { login = '', name = '' } = /** @type {User} */ (user.account);\n  const { collection, collectionFile, isNew, collectionName, fileName } = draft;\n\n  const {\n    _i18n: { defaultLocale },\n  } = collectionFile ?? collection;\n\n  const { slug, locales } = savingEntry;\n  const otherLocales = Object.keys(locales).filter((locale) => locale !== defaultLocale);\n  const { content, path } = locales[defaultLocale];\n  const associatedAssets = getAssociatedAssets({ entry: savingEntry, collectionName, fileName });\n\n  // We need to use a for loop here to call handlers sequentially\n  // eslint-disable-next-line no-restricted-syntax\n  for (const hook of eventHookRegistry) {\n    if (hook.name !== type) {\n      // eslint-disable-next-line no-continue\n      continue;\n    }\n\n    // eslint-disable-next-line no-await-in-loop\n    const updatedMap = await hook.handler({\n      author: { login, name },\n      // Create an Immutable.js Map representing the entry data with deep conversion\n      entry: createEntryMap({\n        content,\n        otherLocales,\n        locales,\n        slug,\n        path,\n        isNew,\n        collectionName,\n        associatedAssets,\n      }),\n    });\n\n    // If the hook returned an updated entry, merge its data back into the savingEntry\n    if (UPDATABLE_EVENT_TYPES.includes(type) && isMap(updatedMap)) {\n      const map = updatedMap.toJS();\n\n      if (isObject(map.data) && isObject(map.i18n)) {\n        locales[defaultLocale].content = flatten(map.data);\n\n        otherLocales.forEach((locale) => {\n          if (isObject(map.i18n[locale]?.data)) {\n            locales[locale].content = flatten(map.i18n[locale].data);\n          }\n        });\n      } else {\n        // `map` is always a plain object here (guaranteed by `isMap(updatedMap)` above)\n        locales[defaultLocale].content = flatten(map);\n      }\n    }\n  }\n};\n","import { writable } from 'svelte/store';\n\n/**\n * @import { ComponentType } from 'react';\n * @import { Writable } from 'svelte/store';\n * @import { EntryEditorPane, InternalLocaleCode, SelectAssetsView } from '$lib/types/private';\n * @import { CustomPreviewTemplateProps } from '$lib/types/public';\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} sourceLanguage Source locale for the copy.\n */\n\n/**\n * Minimum width for entry editor panes in percentage. This ensures that panes remain usable and\n * prevents them from being resized to an unusable width.\n * @constant {number}\n */\nexport const MIN_PANE_SIZE = 30;\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?: (value?: string) => void }>}\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  sourceLanguage: undefined,\n});\n\n/**\n * @type {Writable<?EntryEditorPane>}\n */\nexport const editorFirstPane = writable(null);\n\n/**\n * @type {Writable<?EntryEditorPane>}\n */\nexport const editorSecondPane = 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 URLs registered with the `CMS.registerPreviewStyle()` API.\n * @type {Set<string>}\n * @see https://decapcms.org/docs/customization/\n * @see https://sveltiacms.app/en/docs/api/preview-styles\n */\nexport const customPreviewStyleRegistry = new Set();\n\n/**\n * Custom entry preview templates registered with the `CMS.registerPreviewTemplate()` API.\n * @type {Map<string, ComponentType<CustomPreviewTemplateProps>>}\n * @see https://decapcms.org/docs/customization/#registerpreviewtemplate\n * @see https://sveltiacms.app/en/docs/api/preview-templates\n */\nexport const customPreviewTemplateRegistry = new Map();\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 default \"{\\\"ok\\\":\\\"OK\\\",\\\"cancel\\\":\\\"Cancel\\\",\\\"close\\\":\\\"Close\\\",\\\"clear\\\":\\\"Clear\\\",\\\"insert\\\":\\\"Insert\\\",\\\"update\\\":\\\"Update\\\",\\\"remove\\\":\\\"Remove\\\",\\\"collapse\\\":\\\"Collapse\\\",\\\"expand\\\":\\\"Expand\\\",\\\"dismiss\\\":\\\"Dismiss\\\",\\\"calendar\\\":{\\\"year\\\":\\\"Year\\\",\\\"previous_decade\\\":\\\"Previous Decade\\\",\\\"next_decade\\\":\\\"Next Decade\\\",\\\"month\\\":\\\"Month\\\",\\\"previous_month\\\":\\\"Previous Month\\\",\\\"next_month\\\":\\\"Next Month\\\",\\\"today\\\":\\\"Today\\\"},\\\"split_button\\\":{\\\"x_options\\\":\\\"{$name} Options\\\",\\\"more_options\\\":\\\"More Options\\\"},\\\"combobox\\\":{\\\"select_an_option\\\":\\\"Select an option…\\\",\\\"filter_options\\\":\\\"Filter Options\\\",\\\"no_matching_options\\\":\\\"No matching options found\\\"},\\\"number_input\\\":{\\\"decrease\\\":\\\"Decrease\\\",\\\"increase\\\":\\\"Increase\\\"},\\\"password_input\\\":{\\\"show_password\\\":\\\"Show Password\\\",\\\"hide_password\\\":\\\"Hide Password\\\"},\\\"secret_input\\\":{\\\"show_secret\\\":\\\"Show Secret\\\",\\\"hide_secret\\\":\\\"Hide Secret\\\"},\\\"select_tags\\\":{\\\"selected_options\\\":\\\"Selected options\\\",\\\"remove_x\\\":\\\"Remove {$name}\\\"},\\\"text_editor\\\":{\\\"text_editor\\\":\\\"Text Editor\\\",\\\"code_editor\\\":\\\"Code Editor\\\",\\\"text_style_options\\\":\\\"Text Style Options\\\",\\\"show_text_style_options\\\":\\\"Show Text Style Options\\\",\\\"paragraph\\\":\\\"Paragraph\\\",\\\"heading_1\\\":\\\"Heading 1\\\",\\\"heading_2\\\":\\\"Heading 2\\\",\\\"heading_3\\\":\\\"Heading 3\\\",\\\"heading_4\\\":\\\"Heading 4\\\",\\\"heading_5\\\":\\\"Heading 5\\\",\\\"heading_6\\\":\\\"Heading 6\\\",\\\"bulleted_list\\\":\\\"Bulleted List\\\",\\\"numbered_list\\\":\\\"Numbered List\\\",\\\"blockquote\\\":\\\"Block Quote\\\",\\\"code_block\\\":\\\"Code Block\\\",\\\"bold\\\":\\\"Bold\\\",\\\"italic\\\":\\\"Italic\\\",\\\"strikethrough\\\":\\\"Strikethrough\\\",\\\"code\\\":\\\"Code\\\",\\\"link\\\":\\\"Link\\\",\\\"insert_link\\\":\\\"Insert Link\\\",\\\"update_link\\\":\\\"Update Link\\\",\\\"text\\\":\\\"Text\\\",\\\"url\\\":\\\"URL\\\",\\\"edit_in_markdown\\\":\\\"Edit in Markdown\\\",\\\"converter_error\\\":\\\"There was an error while enabling rich text mode. Please use the plain text editor instead.\\\",\\\"language\\\":\\\"Language\\\",\\\"plain_text\\\":\\\"Plain Text\\\"}}\";","export default \"{\\\"ok\\\":\\\"OK\\\",\\\"cancel\\\":\\\"キャンセル\\\",\\\"close\\\":\\\"閉じる\\\",\\\"clear\\\":\\\"クリア\\\",\\\"insert\\\":\\\"挿入\\\",\\\"update\\\":\\\"更新\\\",\\\"remove\\\":\\\"削除\\\",\\\"collapse\\\":\\\"折り畳む\\\",\\\"expand\\\":\\\"広げる\\\",\\\"dismiss\\\":\\\"閉じる\\\",\\\"calendar\\\":{\\\"year\\\":\\\"年\\\",\\\"previous_decade\\\":\\\"前の 10 年\\\",\\\"next_decade\\\":\\\"次の 10 年\\\",\\\"month\\\":\\\"月\\\",\\\"previous_month\\\":\\\"前月\\\",\\\"next_month\\\":\\\"翌月\\\",\\\"today\\\":\\\"今日\\\"},\\\"split_button\\\":{\\\"x_options\\\":\\\"{$name} オプション\\\",\\\"more_options\\\":\\\"その他のオプション\\\"},\\\"combobox\\\":{\\\"select_an_option\\\":\\\"オプションを選択…\\\",\\\"filter_options\\\":\\\"オプションを絞り込み\\\",\\\"no_matching_options\\\":\\\"一致するオプションは見つかりませんでした\\\"},\\\"number_input\\\":{\\\"decrease\\\":\\\"減らす\\\",\\\"increase\\\":\\\"増やす\\\"},\\\"password_input\\\":{\\\"show_password\\\":\\\"パスワードを表示\\\",\\\"hide_password\\\":\\\"パスワードを隠す\\\"},\\\"secret_input\\\":{\\\"show_secret\\\":\\\"シークレットを表示\\\",\\\"hide_secret\\\":\\\"シークレットを隠す\\\"},\\\"select_tags\\\":{\\\"selected_options\\\":\\\"選択済みのオプション\\\",\\\"remove_x\\\":\\\"{$name} を削除\\\"},\\\"text_editor\\\":{\\\"text_editor\\\":\\\"テキストエディター\\\",\\\"code_editor\\\":\\\"コードエディター\\\",\\\"text_style_options\\\":\\\"テキストスタイルオプション\\\",\\\"show_text_style_options\\\":\\\"テキストスタイルオプションを表示\\\",\\\"paragraph\\\":\\\"段落\\\",\\\"heading_1\\\":\\\"見出し 1\\\",\\\"heading_2\\\":\\\"見出し 2\\\",\\\"heading_3\\\":\\\"見出し 3\\\",\\\"heading_4\\\":\\\"見出し 4\\\",\\\"heading_5\\\":\\\"見出し 5\\\",\\\"heading_6\\\":\\\"見出し 6\\\",\\\"bulleted_list\\\":\\\"番号なしリスト\\\",\\\"numbered_list\\\":\\\"番号付きリスト\\\",\\\"blockquote\\\":\\\"ブロック引用\\\",\\\"code_block\\\":\\\"コードブロック\\\",\\\"bold\\\":\\\"太字\\\",\\\"italic\\\":\\\"斜体\\\",\\\"strikethrough\\\":\\\"取り消し線\\\",\\\"code\\\":\\\"コード\\\",\\\"link\\\":\\\"リンク\\\",\\\"insert_link\\\":\\\"リンクを挿入\\\",\\\"update_link\\\":\\\"リンクを更新\\\",\\\"text\\\":\\\"テキスト\\\",\\\"url\\\":\\\"URL\\\",\\\"edit_in_markdown\\\":\\\"マークダウンで編集\\\",\\\"converter_error\\\":\\\"リッチテキストモードを有効化中に問題が発生しました。代わりにプレーンテキストエディターを使用してください。\\\",\\\"language\\\":\\\"言語\\\",\\\"plain_text\\\":\\\"プレーンテキスト\\\"}}\";","import { addMessages, init } from '@sveltia/i18n';\nimport { parse as parseYaml } from 'yaml';\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/sveltia/sveltia-i18n\n * @see https://vitejs.dev/guide/features.html#glob-import\n */\nexport const initLocales = ({ fallbackLocale = 'en', initialLocale = 'en' } = {}) => {\n  const resources = import.meta.glob('../locales/*.yaml', {\n    eager: true,\n    query: '?raw',\n    import: 'default',\n  });\n\n  Object.entries(resources).forEach(([path, resource]) => {\n    addMessages(\n      /** @type {string} */ (path.match(/.+\\/(?<locale>.+?)\\.yaml$/)?.groups?.locale),\n      // Add `_sui` suffix to avoid collision with app localization\n      { _sui: parseYaml(/** @type {string} */ (resource)) },\n    );\n  });\n\n  init({ fallbackLocale, initialLocale });\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 { Attachment } from 'svelte/attachments';\n */\n\n/** @type {boolean | undefined} */\nlet _isMac;\n\n/**\n * Check if the user agent is macOS.\n * @returns {boolean} Result.\n */\nconst isMac = () => {\n  _isMac ??=\n    /** @type {any} */ (navigator).userAgentData?.platform === 'macOS' ||\n    navigator.platform.startsWith('Mac');\n\n  return _isMac;\n};\n\nconst MODIFIER_KEYS = ['Ctrl', 'Meta', 'Alt', 'Shift'];\n\n/**\n * Shortcut tokens that correspond to a physical, layout- and modifier-stable `KeyboardEvent.code`\n * value. Matching against `code` (rather than `key`) for these avoids two problems:\n *\n * 1. `event.key` for the Space bar is a single space character (`' '`), which is awkward to write\n * in a shortcut string — the conventional token is `Space`.\n * 2. `event.key` changes when Shift (or Alt/Option on macOS) is held: `Shift+1` produces `'!'` on\n * US layout, `Alt+E` on macOS produces `'´'`, etc. Comparing against `code` keeps shortcuts like\n * `Ctrl+Shift+1` or `Alt+ArrowUp` working as authored.\n */\nconst PHYSICAL_TOKENS = new Set([\n  'Space',\n  'Enter',\n  'Escape',\n  'Tab',\n  'Backspace',\n  'Delete',\n  'Insert',\n  'Home',\n  'End',\n  'PageUp',\n  'PageDown',\n  'ArrowUp',\n  'ArrowDown',\n  'ArrowLeft',\n  'ArrowRight',\n  // Function keys F1–F24\n  ...Array.from({ length: 24 }, (_, i) => `F${i + 1}`),\n]);\n\n/**\n * Determine whether a single (non-modifier) shortcut token matches a `KeyboardEvent`.\n *\n * Letters are compared against `event.key` (layout-aware: a Dvorak user pressing the physical\n * QWERTY-`S` key produces `key: 'o'`, which should match `Ctrl+O`, not `Ctrl+S`). Named keys,\n * function keys, and bare digits are compared against `event.code` (layout- and modifier-stable, so\n * `Shift+1` matches even though `event.key` becomes `'!'`). Other characters fall back to\n * `event.key`.\n * @param {string} token A single key token from a shortcut string, e.g. `S`, `Space`, `1`, `/`.\n * @param {KeyboardEvent} event The keyboard event.\n * @returns {boolean} Whether the token matches the event.\n */\nconst tokenMatchesEvent = (token, event) => {\n  // Bare digit: match the physical digit row regardless of Shift (`Shift+1` vs `!`).\n  if (/^\\d$/.test(token)) {\n    return event.code === `Digit${token}`;\n  }\n\n  // Named keys (Space, Enter, arrows, F-keys, …): match the stable `code`.\n  if (PHYSICAL_TOKENS.has(token)) {\n    return event.code === token;\n  }\n\n  // Everything else (letters, punctuation): compare case-insensitively against `event.key` so\n  // the user's active keyboard layout is respected.\n  return token.toLowerCase() === event.key.toLowerCase();\n};\n\n/**\n * Whether the event matches the given keyboard shortcuts.\n *\n * Uses a hybrid of `KeyboardEvent.key` and `KeyboardEvent.code` so shortcuts work correctly on\n * non-QWERTY layouts (Dvorak, AZERTY, Colemak, …) *and* with modifiers like Shift or Alt that\n * otherwise change `event.key` (`Shift+1` → `'!'`, `Alt+E` on macOS → `'´'`, etc.). See\n * {@link tokenMatchesEvent} for the matching rules.\n * @param {KeyboardEvent} event `keydown` or `keypress` event.\n * @param {string} shortcuts Keyboard shortcuts like `A`, `Ctrl+S`, `Accel+Space`, `Shift+1`.\n * @returns {boolean} Result.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_key_values\n * @see https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_code_values\n * @see https://w3c.github.io/aria/#aria-keyshortcuts\n */\nconst matchesShortcuts = (event, shortcuts) => {\n  const { ctrlKey, metaKey, altKey, shiftKey, key, code } = event;\n\n  // Both `key` and `code` can be empty in edge cases (e.g. dead keys mid-composition).\n  if (!key && !code) {\n    return false;\n  }\n\n  const resolvedShortcuts = shortcuts.replace(/\\bAccel\\b/g, isMac() ? 'Meta' : 'Ctrl');\n\n  return resolvedShortcuts.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) => !MODIFIER_KEYS.includes(_key))\n      .every((_key) => tokenMatchesEvent(_key, event));\n  });\n};\n\n/**\n * Activate keyboard shortcuts.\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 {Attachment<HTMLInputElement | HTMLButtonElement>} Svelte attachment to deactivate the\n * shortcuts.\n */\nconst activateKeyShortcuts = (shortcuts = '') => {\n  const platformKeyShortcuts = shortcuts\n    ? shortcuts.replace(/\\bAccel\\b/g, isMac() ? 'Meta' : 'Ctrl')\n    : undefined;\n\n  if (!platformKeyShortcuts) {\n    // Return a no-op attachment so the return value always matches the `Attachment` shape (a\n    // function that takes an element and returns a cleanup function).\n    return () => () => {};\n  }\n\n  return (element) => {\n    /**\n     * Handle the event.\n     * @param {KeyboardEvent} event `keydown` event.\n     */\n    const handler = (event) => {\n      const { disabled } = element;\n\n      if (!element.getClientRects().length || !matchesShortcuts(event, platformKeyShortcuts)) {\n        return;\n      }\n\n      const { top, left } = element.getBoundingClientRect();\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      const isClickable = document.elementsFromPoint(left + 4, top + 4).includes(element);\n\n      if (disabled) {\n        element.style.removeProperty('pointer-events');\n      }\n\n      if (!isClickable) {\n        return;\n      }\n\n      event.preventDefault();\n\n      if (!disabled) {\n        element.focus();\n        element.click();\n      }\n    };\n\n    globalThis.addEventListener('keydown', handler, { capture: true });\n    element.setAttribute('aria-keyshortcuts', platformKeyShortcuts);\n\n    return () => {\n      globalThis.removeEventListener('keydown', handler, { capture: true });\n      element.removeAttribute('aria-keyshortcuts');\n    };\n  };\n};\n\nexport { activateKeyShortcuts, isMac, matchesShortcuts };\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.js';\n\n/** @type {Map<HTMLElement, () => void> | undefined} */\nlet visibilityResolvers;\n/** @type {IntersectionObserver | undefined} */\nlet sharedVisibilityObserver;\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 * Create or reuse a shared observer to avoid registering one IntersectionObserver per element. This\n * keeps large lists responsive because we only create a single observer for all visibility checks\n * instead of hundreds of short-lived observers.\n * @returns {IntersectionObserver | undefined} Shared observer instance.\n */\nconst getSharedVisibilityObserver = () => {\n  if (!('IntersectionObserver' in globalThis)) {\n    return undefined;\n  }\n\n  if (sharedVisibilityObserver) {\n    return sharedVisibilityObserver;\n  }\n\n  visibilityResolvers = new Map();\n\n  sharedVisibilityObserver = new IntersectionObserver((entries) => {\n    entries.forEach(({ isIntersecting, target }) => {\n      if (!isIntersecting || !(target instanceof HTMLElement)) {\n        return;\n      }\n\n      const resolve = visibilityResolvers?.get(target);\n\n      if (resolve) {\n        visibilityResolvers?.delete(target);\n        sharedVisibilityObserver?.unobserve(target);\n        resolve();\n      }\n    });\n  });\n\n  return sharedVisibilityObserver;\n};\n\n/**\n * Check whether the element is already visible in the viewport.\n * @param {HTMLElement} element Element to check.\n * @returns {boolean} Whether the element is visible.\n */\nconst isVisible = (element) => {\n  const { top, left, bottom, right } = element.getBoundingClientRect();\n  const { innerHeight, innerWidth } = globalThis;\n\n  return bottom > 0 && right > 0 && top < innerHeight && left < innerWidth;\n};\n\n/**\n * Schedule a callback to run on the next animation frame or a short timeout fallback.\n * @param {() => void} callback Callback to schedule.\n */\nconst scheduleVisibilityCheck = (callback) => {\n  if ('requestAnimationFrame' in globalThis) {\n    globalThis.requestAnimationFrame(callback);\n\n    return;\n  }\n\n  globalThis.setTimeout(callback, 16);\n};\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  const observer = getSharedVisibilityObserver();\n\n  if (!observer) {\n    return undefined;\n  }\n\n  if (isVisible(element)) {\n    return Promise.resolve(undefined);\n  }\n\n  return new Promise((resolve) => {\n    visibilityResolvers?.set(element, resolve);\n    scheduleVisibilityCheck(() => {\n      observer.observe(element);\n    });\n  });\n};\n\nexport { generateElementId, isVisible, waitForVisibility };\n","import { generateElementId } from '@sveltia/utils/element';\nimport { sleep } from '@sveltia/utils/misc';\nimport { on } from 'svelte/events';\n/**\n * @import { PopupPosition } from '../typedefs';\n */\n\n/**\n * Implement the popup handler.\n */\nclass Popup {\n  #open = $state(false);\n\n  /**\n   * Whether the popup is open.\n   * @returns {boolean} `true` if the popup is open.\n   */\n  get open() {\n    return this.#open;\n  }\n\n  /**\n   * Open or close the popup, running side effects synchronously.\n   * @param {boolean} value `true` to open, `false` to close.\n   */\n  set open(value) {\n    this.#open = value;\n\n    if (value) {\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(value));\n  }\n\n  style = $state(\n    /**\n     * @type {{ inset: string | undefined, zIndex: number | undefined, minWidth: string | undefined,\n     * maxWidth: string | undefined, height: string | undefined }}\n     */\n    ({\n      inset: undefined,\n      zIndex: undefined,\n      minWidth: undefined,\n      maxWidth: undefined,\n      height: undefined,\n    }),\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      // Normalize RTL-friendly positions to LTR for LTR documents\n      // @todo Rename `PopupPosition` enums to be direction-agnostic\n      if (document.dir === 'rtl') {\n        if (position.endsWith('-left')) {\n          position = /** @type {PopupPosition} */ (position.replace('-left', '-right'));\n        } else if (position.endsWith('-right')) {\n          position = /** @type {PopupPosition} */ (position.replace('-right', '-left'));\n        }\n\n        if (position.startsWith('left-')) {\n          position = /** @type {PopupPosition} */ (position.replace('left-', 'right-'));\n        } else if (position.startsWith('right-')) {\n          position = /** @type {PopupPosition} */ (position.replace('right-', 'left-'));\n        }\n      }\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      if (position.endsWith('-right')) {\n        if (intersectionRect.right - contentWidth < 8) {\n          position = /** @type {PopupPosition} */ (position.replace('-right', '-left'));\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 (\n        style.inset !== this.style.inset ||\n        style.zIndex !== this.style.zIndex ||\n        style.minWidth !== this.style.minWidth ||\n        style.maxWidth !== this.style.maxWidth ||\n        style.height !== this.style.height\n      ) {\n        this.style = 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    this.anchorElement.setAttribute('aria-expanded', 'false');\n\n    on(anchorElement, 'click', () => {\n      if (!this.isDisabled && !this.isReadOnly) {\n        this.open = !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 = !this.open;\n      }\n    });\n\n    on(anchorElement, 'transitionstart', () => {\n      if (this.anchorElement.closest('.hiding, .hidden, [hidden]')) {\n        this.hideImmediately();\n      }\n    });\n\n    this.intersectionObserver = new IntersectionObserver(([entry]) => {\n      if (!entry.isIntersecting && this.open) {\n        this.hideImmediately();\n      }\n    });\n    this.intersectionObserver.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        this.open &&\n        (target === this.popupElement || target.matches('[role^=\"menuitem\"], [role=\"option\"]'))\n      ) {\n        this.open = 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 = false;\n      }\n    });\n\n    // Update the popup width when the base element is resized\n    this.resizeObserver = new ResizeObserver(() => {\n      cancelAnimationFrame(this._rafId);\n      this._rafId = requestAnimationFrame(() => this.checkPosition());\n    });\n    this.resizeObserver.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 = false;\n    await sleep(50);\n    this.popupElement.hidden = false;\n  }\n\n  /**\n   * Dispose of the popup, disconnecting observers and canceling pending work.\n   */\n  destroy() {\n    this.intersectionObserver?.disconnect();\n    this.resizeObserver?.disconnect();\n    this.observer?.disconnect();\n\n    if (this._rafId) {\n      cancelAnimationFrame(this._rafId);\n    }\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   * Monotonically increasing counter used to detect stale async operations. Incremented at the\n   * start of each `openDialog`/`closeDialog` call; any suspended continuation that finds its\n   * captured value no longer matches the current counter knows it has been superseded and exits\n   * without mutating state.\n   * @type {number}\n   */\n  let generation = 0;\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    generation += 1;\n\n    const gen = generation;\n\n    onOpening?.(new CustomEvent('Opening'));\n    showContent = true;\n    dialog.showModal();\n    onOpen?.(new CustomEvent('Open'));\n    await sleep(0);\n    if (gen !== generation) return;\n    setOpenClass = true;\n    await waitForTransition();\n    if (gen !== generation) return;\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    generation += 1;\n\n    const gen = generation;\n    const wasOpen = setOpenClass;\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\n    // Only wait for the closing transition if the dialog was visually open (i.e. the `.open` CSS\n    // class was set). If the dialog was closed before the opening transition even started, there is\n    // no CSS transition in progress and `transitionend` will never fire.\n    if (wasOpen) {\n      await waitForTransition();\n    }\n\n    if (gen !== generation) return;\n\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 { activatePopup } from '../../services/popup.svelte.js';\n  import Modal from './modal.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\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   * @type {{ style: { inset: string | undefined, zIndex: number | undefined, minWidth: string |\n   * undefined, maxWidth: string | undefined, height: string | undefined }, open: boolean,\n   * checkPosition: () => void, destroy: () => void } | undefined}\n   */\n  let popupInstance = $state();\n  let hoveredTimeout = 0;\n\n  /**\n   * Initialize the popup.\n   */\n  const init = () => {\n    popupInstance = activatePopup(anchor, dialogElement, position, positionBaseElement);\n\n    contentType = anchor?.getAttribute('aria-haspopup') ?? undefined;\n    initialized = true;\n  };\n\n  $effect(() => {\n    if (popupInstance) {\n      open = popupInstance.open;\n    }\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    return () => {\n      popupInstance?.destroy?.();\n      globalThis.clearTimeout(hoveredTimeout);\n    };\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={popupInstance?.style.inset}\n    style:z-index={popupInstance?.style.zIndex}\n    style:min-width={popupInstance?.style.minWidth}\n    style:max-width={popupInstance?.style.maxWidth}\n    style:max-height={popupInstance?.style.height}\n    style:visibility={popupInstance?.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 '@sveltia/utils/events';\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    // svelte-ignore state_referenced_locally\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  {@attach 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:not([hidden]) {\n  display: inline-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 '@sveltia/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, start);\n  gap: var(--sui-infobar-message-gap, 6px);\n  padding: var(--sui-infobar-message-padding, 6px);\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-inline-end: 16px;\n    inset-block-end: 72px;\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","import { isRTL } from '@sveltia/i18n';\nimport { generateElementId } from '@sveltia/utils/element';\nimport { sleep } from '@sveltia/utils/misc';\nimport { getSelectedItemDetail } from './select.svelte.js';\n\n/**\n * @import { Attachment } from 'svelte/attachments';\n */\n\n/**\n * Diacritic characters regex for normalization. We use a regex instead of `Intl` APIs for better\n * performance, since `transliterate` is slow and we only need basic normalization.\n */\nconst DIACRITIC_RE = /\\p{Diacritic}/gu;\n\n/**\n * Normalize the given string for search value comparison. Since `transliterate` is slow, we only\n * apply basic normalization.\n * @internal\n * @param {string} value Original value.\n * @returns {string} Normalized value.\n * @todo Move this to `@sveltia/utils`.\n */\nexport const normalize = (value) => {\n  value = value.trim();\n\n  if (!value) {\n    return '';\n  }\n\n  return value.normalize('NFD').replace(DIACRITIC_RE, '').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 */\nexport class 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    // eslint-disable-next-line jsdoc/require-description\n    /** @type {(event: MouseEvent) => void} */\n    this._onClick = (event) => {\n      this.onClick(event);\n    };\n\n    // eslint-disable-next-line jsdoc/require-description\n    /** @type {(event: KeyboardEvent) => void} */\n    this._onKeyDown = (event) => {\n      this.onKeyDown(event);\n    };\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', this._onClick);\n    parent.addEventListener('keydown', this._onKeyDown);\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          if (event.type === 'keydown' && element.matches('[role=\"radio\"]')) {\n            element.click();\n          }\n\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      const _isRTL = isRTL();\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      // In RTL, ArrowLeft moves right (next), ArrowRight moves left (previous)\n      if (key === 'ArrowLeft' && index > 0) {\n        newTarget = allMembers[index + (_isRTL ? 1 : -1)];\n      }\n\n      if (key === 'ArrowRight' && index < allMembers.length - 1) {\n        newTarget = allMembers[index + (_isRTL ? -1 : 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      const _isRTL = isRTL();\n\n      // For horizontal orientation in RTL: ArrowLeft moves forward, ArrowRight moves backward\n      const prevKey =\n        this.orientation === 'horizontal' ? (_isRTL ? 'ArrowRight' : 'ArrowLeft') : 'ArrowUp';\n\n      const nextKey =\n        this.orientation === 'horizontal' ? (_isRTL ? 'ArrowLeft' : 'ArrowRight') : 'ArrowDown';\n\n      if (key === prevKey) {\n        if (index > 0) {\n          // Previous member\n          newTarget = activeMembers[index - 1];\n        }\n\n        if (index <= 0) {\n          // Last member (also handles the case when nothing is focused, index === -1)\n          newTarget = activeMembers[activeMembers.length - 1];\n        }\n      }\n\n      if (key === nextKey) {\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   * Clean up event listeners.\n   */\n  destroy() {\n    this.parent.removeEventListener('click', this._onClick);\n    this.parent.removeEventListener('keydown', this._onKeyDown);\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    const { allMembers, parent } = this;\n\n    const matched = allMembers\n      .map((member) => {\n        const searchValue = normalize(\n          member.dataset.searchValue ??\n            member.dataset.label ??\n            member.querySelector('.label')?.textContent ??\n            /** @type {string} */ (member.textContent),\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    parent.dispatchEvent(\n      new CustomEvent('Filter', { detail: { matched, total: allMembers.length } }),\n    );\n  }\n}\n\n/**\n * Activate a new group.\n * @param {object | (() => object)} [paramsOrGetter] Params object or a getter function for reactive\n * params.\n * @returns {Attachment} Attachment.\n */\nexport const activateGroup = (paramsOrGetter) => (parent) => {\n  const isGetter = typeof paramsOrGetter === 'function';\n  const initialParams = isGetter ? paramsOrGetter() : paramsOrGetter;\n  const group = new Group(/** @type {HTMLElement} */ (parent), initialParams);\n\n  if (isGetter) {\n    $effect(() => {\n      group.onUpdate(paramsOrGetter());\n    });\n  }\n\n  return () => {\n    group.destroy();\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.js';\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  {@attach 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-start-start-radius: 4px !important;\n  border-end-start-radius: 4px !important;\n}\n.select-button-group :global(button:not(:first-child)) {\n  border-inline-start-width: 0;\n}\n.select-button-group :global(button:last-child) {\n  border-start-end-radius: 4px !important;\n  border-end-end-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  <!-- eslint-disable-next-line svelte/no-useless-children-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 '@sveltia/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-inline-start-width: 0;\n  border-start-start-radius: 0;\n  border-end-start-radius: 0;\n  aspect-ratio: 3/4;\n}\n.split-button :global(button:not(.menu-button)) {\n  border-start-end-radius: 0;\n  border-end-end-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:not([hidden]) {\n  display: block;\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   * @property {string[]} [group] The two-way bound variable to manage the state of a group of\n   * checkboxes. It works in the same way as the [`<input\n   * bind:group>`](https://svelte.dev/docs/svelte/bind#input-bind:group) of Svelte.\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    group = $bindable(),\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\n  // Sync `checked` with `group` and `value`\n  $effect(() => {\n    if (Array.isArray(group)) {\n      if (group.includes(value)) {\n        if (checked !== true) {\n          checked = true;\n        }\n      } else if (checked !== false) {\n        checked = false;\n      }\n    }\n  });\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          return;\n        }\n\n        checked = indeterminate ? true : !checked;\n\n        if (Array.isArray(group)) {\n          if (checked) {\n            if (!group.includes(value)) {\n              group = [...group, value];\n            }\n          } else if (group.includes(value)) {\n            group = group.filter((v) => v !== value);\n          }\n        }\n\n        onChange?.(new CustomEvent('Change', { detail: { checked } }));\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 { _ } from '@sveltia/i18n';\n  import { sleep } from '@sveltia/utils/misc';\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      let cancelled = false;\n\n      (async () => {\n        await sleep(50);\n\n        if (cancelled) {\n          return;\n        }\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      return () => {\n        cancelled = true;\n      };\n    }\n\n    return undefined;\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 '@sveltia/utils/events';\n  import TruncatedText from '../typography/truncated-text.svelte';\n\n  /**\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    dir = undefined,\n    name = undefined,\n    showInlineLabel = false,\n    inputmode = 'text',\n    flex = false,\n    monospace = false,\n    debounce = 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    oninput,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const id = $props.id();\n  const timeout = $derived(typeof debounce === 'number' ? debounce : 300);\n\n  let debounceTimer = 0;\n\n  $effect(() => () => {\n    clearTimeout(debounceTimer);\n  });\n\n  /**\n   * Update the `value` and call the `oninput` callback.\n   * @param {InputEvent} event The `input` event object.\n   */\n  const fireInput = (event) => {\n    value = element?.value;\n    oninput?.(event);\n  };\n\n  /**\n   * Handle the `input` event. If `debounce` is `true`, the event will be debounced by 300ms. We use\n   * `oninputcapture` to ensure that the event is fired before any `oninput` handlers on parent\n   * elements, including the Lexical editor.\n   * @param {Event} event The `input` event object.\n   */\n  const handleInput = (event) => {\n    const inputEvent = /** @type {InputEvent} */ (event);\n\n    if (debounce) {\n      clearTimeout(debounceTimer);\n      debounceTimer = /** @type {number} */ (\n        /** @type {unknown} */ (\n          setTimeout(() => {\n            fireInput(inputEvent);\n          }, timeout)\n        )\n      );\n    } else {\n      fireInput(inputEvent);\n    }\n  };\n</script>\n\n<div\n  role=\"none\"\n  class=\"sui text-input {className}\"\n  class:flex\n  class:monospace\n  class:disabled\n  class:readonly\n  {hidden}\n>\n  <input\n    bind:this={element}\n    {...restProps}\n    {value}\n    type=\"text\"\n    {role}\n    {dir}\n    {name}\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    oninputcapture={handleInput}\n    {@attach 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:not([hidden]) {\n  display: inline-flex;\n  width: -moz-available;\n  width: -webkit-fill-available;\n  width: stretch;\n  min-width: 0;\n}\n.text-input.monospace {\n  --sui-textbox-font-family: var(--sui-font-family-monospace, monospace);\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-inline-start: -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-start-start-radius: 0;\n  border-start-end-radius: 4px;\n  border-end-end-radius: 4px;\n  border-end-start-radius: 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        dir=\"auto\"\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.js';\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  {@attach 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.js';\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  {@attach 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-block-start-width: 0;\n  border-block-end-width: 0;\n  border-inline-end-width: 1px;\n  border-inline-start-width: 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;\n  border-inline-end-width: 2px;\n  border-color: transparent;\n  padding: 0 12px;\n  border-start-end-radius: 0;\n  border-end-end-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    // svelte-ignore state_referenced_locally\n    value = label,\n    // svelte-ignore state_referenced_locally\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      if (hidden) 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.js';\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  {@attach 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 { isRTL } from '@sveltia/i18n';\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    <!-- eslint-disable-next-line svelte/no-useless-children-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={isRTL() ? 'chevron_left' : '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-block-start: 2px;\n  inset-block-end: auto;\n  inset-inline-start: calc(100% + 4px);\n  inset-inline-end: auto;\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  <!-- eslint-disable-next-line svelte/no-useless-children-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  <!-- eslint-disable-next-line svelte/no-useless-children-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.js';\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  {@attach 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 {string} [group] The two-way bound variable to manage the state of a group of radio\n   * buttons. It works in the same way as the [`<input\n   * bind:group>`](https://svelte.dev/docs/svelte/bind#input-bind:group) of Svelte.\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    group = $bindable(),\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\n  // Sync `checked` with `group` and `value`\n  $effect(() => {\n    if (typeof group === 'string') {\n      if (group === value) {\n        if (!checked) {\n          checked = true;\n        }\n      } else if (checked) {\n        checked = false;\n      }\n    }\n  });\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\n      if (disabled || checked) {\n        return;\n      }\n\n      checked = true;\n\n      if (typeof group === 'string') {\n        group = value;\n      }\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\n  A draggable handle for resizing adjacent panes within a `<ResizablePaneGroup>`.\n  @see https://w3c.github.io/aria/#separator\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/windowsplitter/\n-->\n<script>\n  import { isRTL } from '@sveltia/i18n';\n  import { getContext } from 'svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import { PaneGroupContext } from '../../typedefs.js';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} [disabled] Whether to disable the handle.\n   * @property {boolean} [showHandleBar] Whether to show the handle bar.\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {Snippet} [children] Custom handle content. If omitted, a default visual indicator is\n   * rendered.\n   * @property {() => void} [onResizeStart] Called when a resize interaction begins (pointer down or\n   * first keyboard step).\n   * @property {() => void} [onResizeEnd] Called when a resize interaction ends (pointer up/cancel\n   * or handle blur).\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    disabled = false,\n    showHandleBar = false,\n    class: className,\n    children,\n    onResizeStart,\n    onResizeEnd,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {PaneGroupContext} */\n  const ctx = getContext('paneGroup');\n\n  if (!ctx) {\n    throw new Error('<ResizableHandle> must be used inside a <ResizablePaneGroup>');\n  }\n\n  const handleIndex = ctx.registerHandle();\n  const isHorizontal = $derived(ctx.direction === 'horizontal');\n  const sizes = $derived(ctx.sizes);\n  // The value reported via aria-valuenow is the size of the pane immediately before this handle\n  const currentPaneSize = $derived(sizes[handleIndex] ?? 0);\n  const currentPaneConstraints = $derived(ctx.getPaneConstraints(handleIndex));\n  const currentPaneMin = $derived(\n    Math.max(\n      currentPaneConstraints.minSize,\n      100 -\n        ctx.paneDefs.reduce(\n          (sum, _pane, i) => sum + (i !== handleIndex ? ctx.getPaneConstraints(i).maxSize : 0),\n          0,\n        ),\n    ),\n  );\n  const currentPaneMax = $derived(\n    Math.min(\n      currentPaneConstraints.maxSize,\n      100 -\n        ctx.paneDefs.reduce(\n          (sum, _pane, i) => sum + (i !== handleIndex ? ctx.getPaneConstraints(i).minSize : 0),\n          0,\n        ),\n    ),\n  );\n\n  /**\n   * A reference to the handle element.\n   * @type {HTMLElement | undefined}\n   */\n  let element = $state();\n  let dragging = $state(false);\n  let startScreenPos = $state(0);\n  let targetPointerId = $state(0);\n  /**\n   * Whether the handle is being resized via keyboard (at least one step fired).\n   */\n  let keyResizing = $state(false);\n\n  /**\n   * Get the pane group container element's size in pixels for px→% conversion.\n   * @returns {number} Container size in pixels.\n   */\n  const getContainerSize = () => {\n    const container = element?.closest('.resizable-pane-group');\n\n    if (!container) return 0;\n\n    return isHorizontal ? container.clientWidth : container.clientHeight;\n  };\n\n  /**\n   * Handle pointer move events (attached to `document` while dragging).\n   * @param {PointerEvent} event `pointermove` event.\n   */\n  const onPointerMove = (event) => {\n    const { screenX, screenY, pointerId } = event;\n\n    if (disabled || !dragging || pointerId !== targetPointerId) return;\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    const screenPos = isHorizontal ? screenX : screenY;\n    const pixelDelta = screenPos - startScreenPos;\n    const containerSize = getContainerSize();\n\n    if (!containerSize) return;\n\n    let percentDelta = (pixelDelta / containerSize) * 100;\n\n    // In RTL with a horizontal layout, the visual direction is reversed\n    if (isHorizontal && isRTL()) {\n      percentDelta = -percentDelta;\n    }\n\n    startScreenPos = screenPos;\n    ctx.resize(handleIndex, percentDelta);\n  };\n\n  /**\n   * Handle pointer up/cancel events (attached to `document` while dragging).\n   * @param {PointerEvent} event `pointerup` or `pointercancel` event.\n   */\n  const onPointerUp = (event) => {\n    if (!dragging || event.pointerId !== targetPointerId) return;\n\n    dragging = false;\n    startScreenPos = 0;\n    targetPointerId = 0;\n\n    document.removeEventListener('pointermove', onPointerMove);\n    document.removeEventListener('pointerup', onPointerUp);\n    document.removeEventListener('pointercancel', onPointerUp);\n    onResizeEnd?.();\n  };\n\n  /**\n   * Handle pointer down events on the handle.\n   * @param {PointerEvent} event `pointerdown` event.\n   */\n  const onPointerDown = (event) => {\n    if (disabled) return;\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    dragging = true;\n    startScreenPos = isHorizontal ? event.screenX : event.screenY;\n    targetPointerId = event.pointerId;\n    onResizeStart?.();\n\n    document.addEventListener('pointermove', onPointerMove);\n    document.addEventListener('pointerup', onPointerUp);\n    document.addEventListener('pointercancel', onPointerUp);\n  };\n\n  /**\n   * Handle keyboard events for accessibility. Arrow keys move the handle by 1%; Shift+Arrow moves\n   * by 10%. Enter collapses/restores the primary pane. Home/End jump to min/max.\n   * @param {KeyboardEvent} event `keydown` event.\n   */\n  const onKeyDown = (event) => {\n    if (disabled) return;\n\n    const { key, shiftKey } = event;\n    const step = shiftKey ? 10 : 1;\n    let delta = 0;\n\n    if (key === 'Enter') {\n      event.preventDefault();\n      event.stopPropagation();\n      ctx.toggleCollapse(handleIndex);\n\n      return;\n    }\n\n    if (key === 'Home') {\n      event.preventDefault();\n      event.stopPropagation();\n      // Collapse to minimum — clamped internally\n      ctx.resize(handleIndex, -100);\n\n      return;\n    }\n\n    if (key === 'End') {\n      event.preventDefault();\n      event.stopPropagation();\n      // Expand to maximum — clamped internally\n      ctx.resize(handleIndex, 100);\n\n      return;\n    }\n\n    if (isHorizontal) {\n      const _isRTL = isRTL();\n\n      // In RTL, Left/Right directions are visually swapped\n      if (key === 'ArrowLeft') {\n        delta = _isRTL ? step : -step;\n      } else if (key === 'ArrowRight') {\n        delta = _isRTL ? -step : step;\n      } else {\n        return;\n      }\n    } else if (key === 'ArrowUp') {\n      delta = -step;\n    } else if (key === 'ArrowDown') {\n      delta = step;\n    } else {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (!keyResizing) {\n      keyResizing = true;\n      onResizeStart?.();\n    }\n\n    ctx.resize(handleIndex, delta);\n  };\n\n  /**\n   * Handle blur to signal keyboard resize end.\n   */\n  const onBlur = () => {\n    if (keyResizing) {\n      keyResizing = false;\n      onResizeEnd?.();\n    }\n  };\n</script>\n\n<!-- svelte-ignore a11y_no_noninteractive_tabindex -->\n<div\n  bind:this={element}\n  {...restProps}\n  role=\"separator\"\n  tabindex={disabled ? -1 : 0}\n  aria-orientation={isHorizontal ? 'vertical' : 'horizontal'}\n  aria-valuenow={Math.round(currentPaneSize)}\n  aria-valuemin={currentPaneMin}\n  aria-valuemax={currentPaneMax}\n  aria-controls={ctx.paneDefs[handleIndex]?.id}\n  aria-disabled={disabled || undefined}\n  class=\"sui resizable-handle {className ?? ''}\"\n  class:horizontal={isHorizontal}\n  class:vertical={!isHorizontal}\n  class:disabled\n  class:dragging\n  onpointerdown={onPointerDown}\n  onkeydown={onKeyDown}\n  onblur={onBlur}\n>\n  {#if children}\n    {@render children()}\n  {:else if showHandleBar}\n    <div role=\"none\" class=\"handle-bar\"></div>\n  {/if}\n</div>\n\n<style>.resizable-handle {\n  position: relative;\n  flex: 0 0 auto;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  touch-action: none;\n  outline-offset: 0;\n  background-color: transparent;\n  transition: background-color 200ms;\n}\n.resizable-handle:focus-visible, .resizable-handle:hover, .resizable-handle.dragging {\n  outline: none;\n  z-index: 1;\n  background-color: var(--sui-primary-accent-color-translucent);\n}\n.resizable-handle:focus-visible .handle-bar, .resizable-handle:hover .handle-bar, .resizable-handle.dragging .handle-bar {\n  background-color: var(--sui-primary-accent-color);\n}\n.resizable-handle.disabled {\n  pointer-events: none;\n  opacity: 0.4;\n}\n.resizable-handle.horizontal {\n  width: var(--sui-resizable-handle-size, 4px);\n  height: 100%;\n  cursor: col-resize;\n}\n.resizable-handle.horizontal .handle-bar {\n  width: 2px;\n  height: 40%;\n  min-height: 20px;\n}\n.resizable-handle.vertical {\n  width: 100%;\n  height: var(--sui-resizable-handle-size, 4px);\n  cursor: row-resize;\n}\n.resizable-handle.vertical .handle-bar {\n  height: 2px;\n  width: 40%;\n  min-width: 20px;\n}\n.resizable-handle .handle-bar {\n  border-radius: 1px;\n  background-color: hsl(var(--sui-border-color-1-hsl));\n  transition: background-color 200ms;\n}</style>\n","<!--\n  @component\n  Container for resizable panes. Panes must be separated by `<ResizableHandle>` components.\n  @see https://w3c.github.io/aria/#separator\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/windowsplitter/\n-->\n<script>\n  import { setContext } from 'svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import { PaneGroupContext } from '../../typedefs.js';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {'horizontal' | 'vertical'} [direction] Layout direction of the panes.\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {Snippet} [children] Primary slot content.\n   * @property {(detail: { sizes: number[] }) => void} [onResize] `resize` event handler, called\n   * whenever the pane sizes change.\n   */\n\n  /**\n   * @typedef {{\n   * id: string,\n   * defaultSize: number | string | undefined,\n   * minSize: number | string,\n   * maxSize: number | string,\n   * }} PaneDef\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    direction = 'horizontal',\n    class: className,\n    children,\n    onResize,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /**\n   * `ResizablePane` definitions in registration order, populated synchronously by child\n   * `<ResizablePane>` components.\n   * @type {PaneDef[]}\n   */\n  const _paneDefs = $state([]);\n\n  /** @type {HTMLDivElement | undefined} */\n  let element = $state();\n\n  /**\n   * Current pane sizes as percentages.\n   * @type {number[]}\n   */\n  const sizes = $state([]);\n\n  /**\n   * Per-handle saved sizes before collapse, for Enter key restore.\n   * @type {(number | undefined)[]}\n   */\n  const _savedSizes = $state([]);\n\n  let _handleCount = 0;\n\n  /**\n   * Get the pane group container element’s size in pixels for size conversion.\n   * @returns {number} Container size in pixels.\n   */\n  const getContainerSize = () => {\n    if (!element) return 0;\n\n    return direction === 'horizontal' ? element.clientWidth : element.clientHeight;\n  };\n\n  /**\n   * Resolve numeric or CSS string size values to percentage points.\n   * @param {number | string | undefined} value Size as percentage number or CSS size string.\n   * @param {number} fallback Fallback percentage when resolution fails.\n   * @returns {number} Size in percentage points.\n   */\n  const resolveToPercent = (value, fallback) => {\n    if (typeof value === 'number') {\n      return value;\n    }\n\n    if (!value || typeof value !== 'string') {\n      return fallback;\n    }\n\n    const trimmed = value.trim();\n    const matchedPercent = trimmed.match(/^(-?\\d+(?:\\.\\d+)?)%$/);\n\n    if (matchedPercent) {\n      return Number(matchedPercent[1]);\n    }\n\n    const containerSize = getContainerSize();\n\n    if (!containerSize) {\n      return fallback;\n    }\n\n    const matchedPx = trimmed.match(/^(-?\\d+(?:\\.\\d+)?)px$/i);\n\n    if (matchedPx) {\n      return (Number(matchedPx[1]) / containerSize) * 100;\n    }\n\n    const matchedViewport = trimmed.match(/^(-?\\d+(?:\\.\\d+)?)(dvw|vw|dvh|vh)$/i);\n\n    if (matchedViewport) {\n      const viewportValue = Number(matchedViewport[1]);\n      const unit = matchedViewport[2].toLowerCase();\n      const viewportSize = unit.endsWith('w') ? window.innerWidth : window.innerHeight;\n      const pixels = (viewportValue / 100) * viewportSize;\n\n      return (pixels / containerSize) * 100;\n    }\n\n    return fallback;\n  };\n\n  /**\n   * Get pane constraints converted to percentages for the current container size.\n   * @param {number} paneIndex Pane index.\n   * @returns {{ minSize: number, maxSize: number }} Min/max in percentages.\n   */\n  const getPaneConstraints = (paneIndex) => {\n    const paneDef = _paneDefs[paneIndex];\n\n    if (!paneDef) {\n      return { minSize: 0, maxSize: 100 };\n    }\n\n    const minSize = Math.max(0, resolveToPercent(paneDef.minSize, 0));\n    const maxSize = Math.min(100, resolveToPercent(paneDef.maxSize, 100));\n\n    return {\n      minSize,\n      maxSize: Math.max(minSize, maxSize),\n    };\n  };\n\n  /**\n   * Initialize pane sizes from `defaultSize` props. Called from `onMount` once all panes have\n   * registered. Panes without `defaultSize` share the remaining space equally.\n   */\n  const initSizes = () => {\n    if (!_paneDefs.length) return;\n\n    // Resolve each pane’s defaultSize to a percentage (NaN if unspecified or unresolvable).\n    // Resolving once ensures totalSpecified and newSizes use the same resolved value.\n    const resolvedDefaults = _paneDefs.map((p) => {\n      if (p.defaultSize === undefined) {\n        return NaN;\n      }\n\n      const resolved = resolveToPercent(p.defaultSize, NaN);\n\n      return resolved;\n    });\n\n    const totalSpecified = resolvedDefaults\n      .filter((v) => !Number.isNaN(v))\n      .reduce((sum, v) => sum + v, 0);\n\n    const unspecifiedCount = resolvedDefaults.filter((v) => Number.isNaN(v)).length;\n    const remaining = Math.max(0, 100 - totalSpecified);\n    const defaultSize = unspecifiedCount > 0 ? remaining / unspecifiedCount : 0;\n    const newSizes = resolvedDefaults.map((v) => (Number.isNaN(v) ? defaultSize : v));\n\n    sizes.splice(0, sizes.length, ...newSizes);\n  };\n\n  /**\n   * Resize panes around a handle by the given delta (percentage points).\n   * @param {number} handleIndex Index of the resize handle.\n   * @param {number} deltaPercent Size delta in percentage points.\n   */\n  const resize = (handleIndex, deltaPercent) => {\n    const beforeIdx = handleIndex;\n    const afterIdx = handleIndex + 1;\n\n    if (beforeIdx < 0 || afterIdx >= sizes.length) return;\n\n    const { minSize: minBefore, maxSize: maxBefore } = getPaneConstraints(beforeIdx);\n    const { minSize: minAfter, maxSize: maxAfter } = getPaneConstraints(afterIdx);\n    const prevBefore = sizes[beforeIdx];\n    const prevAfter = sizes[afterIdx];\n    // Clamp delta so neither pane exceeds its min/max constraints\n    const canGrow = Math.min(maxBefore - prevBefore, prevAfter - minAfter);\n    const canShrink = Math.min(prevBefore - minBefore, maxAfter - prevAfter);\n\n    const delta =\n      deltaPercent > 0 ? Math.min(deltaPercent, canGrow) : -Math.min(-deltaPercent, canShrink);\n\n    sizes[beforeIdx] = prevBefore + delta;\n    sizes[afterIdx] = prevAfter - delta;\n\n    onResize?.({ sizes: sizes.map((s) => Number(s.toFixed(1))) });\n  };\n\n  /**\n   * Toggle collapse of the primary pane (before the given handle). If the pane is above its minimum\n   * size it is collapsed to `minSize`; if already at `minSize` the previous size is restored.\n   * @param {number} handleIndex Index of the resize handle.\n   */\n  const toggleCollapse = (handleIndex) => {\n    const { minSize: minBefore } = getPaneConstraints(handleIndex);\n\n    if (_savedSizes[handleIndex] !== undefined) {\n      const delta = /** @type {number} */ (_savedSizes[handleIndex]) - sizes[handleIndex];\n\n      _savedSizes[handleIndex] = undefined;\n      resize(handleIndex, delta);\n    } else {\n      _savedSizes[handleIndex] = sizes[handleIndex];\n      resize(handleIndex, -(sizes[handleIndex] - minBefore));\n    }\n  };\n\n  setContext(\n    'paneGroup',\n    /* eslint-disable jsdoc/require-jsdoc */\n    /** @type {PaneGroupContext} */ ({\n      get direction() {\n        return direction;\n      },\n      sizes,\n      registerPane: ({ id, defaultSize, minSize, maxSize }) => {\n        const idx = _paneDefs.length;\n\n        _paneDefs.push({ id, defaultSize, minSize, maxSize });\n\n        return { index: idx };\n      },\n      registerHandle: () => {\n        const idx = _handleCount;\n\n        _handleCount += 1;\n\n        return idx;\n      },\n      resize,\n      toggleCollapse,\n      getPaneConstraints,\n      paneDefs: _paneDefs,\n    }),\n    /* eslint-enable jsdoc/require-jsdoc */\n  );\n\n  $effect(() => {\n    if (_paneDefs.length && !sizes.length) {\n      initSizes();\n    }\n  });\n</script>\n\n<div\n  bind:this={element}\n  {...restProps}\n  role=\"none\"\n  class=\"sui resizable-pane-group {direction} {className ?? ''}\"\n  data-direction={direction}\n>\n  {@render children?.()}\n</div>\n\n<style>.resizable-pane-group {\n  display: flex;\n  overflow: hidden;\n}\n.resizable-pane-group.horizontal {\n  flex-direction: row;\n  width: 100%;\n  height: 100%;\n}\n.resizable-pane-group.vertical {\n  flex-direction: column;\n  width: 100%;\n  height: 100%;\n}</style>\n","<!--\n  @component\n  A resizable pane within a `<ResizablePaneGroup>`. Must be a direct child of\n  `<ResizablePaneGroup>`.\n-->\n<script>\n  import { getContext, untrack } from 'svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import { PaneGroupContext } from '../../typedefs.js';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {number | string} [defaultSize] Default size. Numbers are percentages (0-100);\n   * strings can be any CSS length/percentage such as `240px`, `20%` or `20dvw`. Panes without\n   * `defaultSize` share the remaining space equally.\n   * @property {number | string} [minSize] Minimum size. Numbers are percentages, strings are CSS\n   * lengths. Defaults to `0`.\n   * @property {number | string} [maxSize] Maximum size. Numbers are percentages, strings are CSS\n   * lengths. Defaults to `100`.\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {Snippet} [children] Primary slot content.\n   * @property {(detail: { size: number }) => void} [onResize] Called whenever this pane’s size (in\n   * percent) changes.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    defaultSize = undefined,\n    minSize = 0,\n    maxSize = 100,\n    class: className,\n    children,\n    onResize,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const id = $props.id();\n\n  /** @type {PaneGroupContext} */\n  const ctx = getContext('paneGroup');\n\n  if (!ctx) {\n    throw new Error('<ResizablePane> must be used inside a <ResizablePaneGroup>');\n  }\n\n  // svelte-ignore state_referenced_locally\n  const { index: paneIndex } = ctx.registerPane({ id, defaultSize, minSize, maxSize });\n\n  const direction = $derived(ctx.direction);\n  const size = $derived(ctx.sizes[paneIndex]);\n  const sizeStyle = $derived.by(() => {\n    if (size !== undefined) {\n      return `${size}%`;\n    }\n\n    if (typeof defaultSize === 'number') {\n      return `${defaultSize}%`;\n    }\n\n    return defaultSize ?? '0%';\n  });\n\n  $effect(() => {\n    if (size !== undefined) {\n      untrack(() => onResize?.({ size: Number(size.toFixed(1)) }));\n    }\n  });\n</script>\n\n<div\n  {...restProps}\n  {id}\n  role=\"none\"\n  class=\"sui resizable-pane {className ?? ''}\"\n  style:flex-basis={sizeStyle}\n  style:flex-grow=\"0\"\n  style:flex-shrink=\"0\"\n  style:overflow-x={direction === 'horizontal' ? 'auto' : undefined}\n  style:overflow-y={direction === 'vertical' ? 'auto' : undefined}\n>\n  {@render children?.()}\n</div>\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  // svelte-ignore state_referenced_locally\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 '@sveltia/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   * @property {() => void} [onClear] Callback invoked when the clear button is clicked.\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    onClear,\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    dir=\"auto\"\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        onClear?.();\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:not([hidden]) {\n  display: inline-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-block: 0;\n  inset-inline-start: 0;\n  inset-inline-end: auto;\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-block: 0;\n  inset-inline-start: auto;\n  inset-inline-end: 0;\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 '@sveltia/i18n';\n  import { getSelectedItemDetail } from '../../services/select.svelte.js';\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   * Selector for the currently selected option in the popup. Used to update the selected option\n   * when the value is changed externally.\n   */\n  const SELECTED_SELECTOR = '[role=\"option\"][aria-selected=\"true\"]';\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  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 target = /** @type {HTMLButtonElement | null} */ (\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 (target.getAttribute('aria-selected') !== 'true') {\n        popupContent?.querySelector(SELECTED_SELECTOR)?.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(SELECTED_SELECTOR);\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      dir=\"auto\"\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-block: 0;\n  padding-inline-start: calc(var(--sui-textbox-height) / 4);\n  padding-inline-end: var(--sui-textbox-height);\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-block-start: 8px;\n  inset-inline-start: 8px;\n  z-index: 1;\n}\n.combobox > :global(button) {\n  position: absolute;\n  inset-block-start: 0;\n  inset-inline-end: 0;\n  z-index: 1;\n  margin: 0 !important;\n  border-start-start-radius: 0;\n  border-end-start-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-block: 0;\n  padding-inline: 8px 32px;\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","/*\nAdapted from https://github.com/mattdesl\nDistributed under MIT License https://github.com/mattdesl/eases/blob/master/LICENSE.md\n*/\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function linear(t) {\n\treturn t;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function backInOut(t) {\n\tconst s = 1.70158 * 1.525;\n\tif ((t *= 2) < 1) return 0.5 * (t * t * ((s + 1) * t - s));\n\treturn 0.5 * ((t -= 2) * t * ((s + 1) * t + s) + 2);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function backIn(t) {\n\tconst s = 1.70158;\n\treturn t * t * ((s + 1) * t - s);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function backOut(t) {\n\tconst s = 1.70158;\n\treturn --t * t * ((s + 1) * t + s) + 1;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function bounceOut(t) {\n\tconst a = 4.0 / 11.0;\n\tconst b = 8.0 / 11.0;\n\tconst c = 9.0 / 10.0;\n\tconst ca = 4356.0 / 361.0;\n\tconst cb = 35442.0 / 1805.0;\n\tconst cc = 16061.0 / 1805.0;\n\tconst t2 = t * t;\n\treturn t < a\n\t\t? 7.5625 * t2\n\t\t: t < b\n\t\t\t? 9.075 * t2 - 9.9 * t + 3.4\n\t\t\t: t < c\n\t\t\t\t? ca * t2 - cb * t + cc\n\t\t\t\t: 10.8 * t * t - 20.52 * t + 10.72;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function bounceInOut(t) {\n\treturn t < 0.5 ? 0.5 * (1.0 - bounceOut(1.0 - t * 2.0)) : 0.5 * bounceOut(t * 2.0 - 1.0) + 0.5;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function bounceIn(t) {\n\treturn 1.0 - bounceOut(1.0 - t);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function circInOut(t) {\n\tif ((t *= 2) < 1) return -0.5 * (Math.sqrt(1 - t * t) - 1);\n\treturn 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function circIn(t) {\n\treturn 1.0 - Math.sqrt(1.0 - t * t);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function circOut(t) {\n\treturn Math.sqrt(1 - --t * t);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function cubicInOut(t) {\n\treturn t < 0.5 ? 4.0 * t * t * t : 0.5 * Math.pow(2.0 * t - 2.0, 3.0) + 1.0;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function cubicIn(t) {\n\treturn t * t * t;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function cubicOut(t) {\n\tconst f = t - 1.0;\n\treturn f * f * f + 1.0;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function elasticInOut(t) {\n\treturn t < 0.5\n\t\t? 0.5 * Math.sin(((+13.0 * Math.PI) / 2) * 2.0 * t) * Math.pow(2.0, 10.0 * (2.0 * t - 1.0))\n\t\t: 0.5 *\n\t\t\t\tMath.sin(((-13.0 * Math.PI) / 2) * (2.0 * t - 1.0 + 1.0)) *\n\t\t\t\tMath.pow(2.0, -10.0 * (2.0 * t - 1.0)) +\n\t\t\t\t1.0;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function elasticIn(t) {\n\treturn Math.sin((13.0 * t * Math.PI) / 2) * Math.pow(2.0, 10.0 * (t - 1.0));\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function elasticOut(t) {\n\treturn Math.sin((-13.0 * (t + 1.0) * Math.PI) / 2) * Math.pow(2.0, -10.0 * t) + 1.0;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function expoInOut(t) {\n\treturn t === 0.0 || t === 1.0\n\t\t? t\n\t\t: t < 0.5\n\t\t\t? +0.5 * Math.pow(2.0, 20.0 * t - 10.0)\n\t\t\t: -0.5 * Math.pow(2.0, 10.0 - t * 20.0) + 1.0;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function expoIn(t) {\n\treturn t === 0.0 ? t : Math.pow(2.0, 10.0 * (t - 1.0));\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function expoOut(t) {\n\treturn t === 1.0 ? t : 1.0 - Math.pow(2.0, -10.0 * t);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function quadInOut(t) {\n\tt /= 0.5;\n\tif (t < 1) return 0.5 * t * t;\n\tt--;\n\treturn -0.5 * (t * (t - 2) - 1);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function quadIn(t) {\n\treturn t * t;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function quadOut(t) {\n\treturn -t * (t - 2.0);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function quartInOut(t) {\n\treturn t < 0.5 ? +8.0 * Math.pow(t, 4.0) : -8.0 * Math.pow(t - 1.0, 4.0) + 1.0;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function quartIn(t) {\n\treturn Math.pow(t, 4.0);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function quartOut(t) {\n\treturn Math.pow(t - 1.0, 3.0) * (1.0 - t) + 1.0;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function quintInOut(t) {\n\tif ((t *= 2) < 1) return 0.5 * t * t * t * t * t;\n\treturn 0.5 * ((t -= 2) * t * t * t * t + 2);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function quintIn(t) {\n\treturn t * t * t * t * t;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function quintOut(t) {\n\treturn --t * t * t * t * t + 1;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function sineInOut(t) {\n\treturn -0.5 * (Math.cos(Math.PI * t) - 1);\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function sineIn(t) {\n\tconst v = Math.cos(t * Math.PI * 0.5);\n\tif (Math.abs(v) < 1e-14) return 1;\n\telse return 1 - v;\n}\n\n/**\n * @param {number} t\n * @returns {number}\n */\nexport function sineOut(t) {\n\treturn Math.sin((t * Math.PI) / 2);\n}\n","/** @import { FlipParams, AnimationConfig } from './public.js' */\nimport { cubicOut } from '../easing/index.js';\n\n/**\n * The flip function calculates the start and end position of an element and animates between them, translating the x and y values.\n * `flip` stands for [First, Last, Invert, Play](https://aerotwist.com/blog/flip-your-animations/).\n *\n * @param {Element} node\n * @param {{ from: DOMRect; to: DOMRect }} fromTo\n * @param {FlipParams} params\n * @returns {AnimationConfig}\n */\nexport function flip(node, { from, to }, params = {}) {\n\tvar { delay = 0, duration = (d) => Math.sqrt(d) * 120, easing = cubicOut } = params;\n\n\tvar style = getComputedStyle(node);\n\n\t// find the transform origin, expressed as a pair of values between 0 and 1\n\tvar transform = style.transform === 'none' ? '' : style.transform;\n\tvar [ox, oy] = style.transformOrigin.split(' ').map(parseFloat);\n\tox /= node.clientWidth;\n\toy /= node.clientHeight;\n\n\t// calculate effect of parent transforms and zoom\n\tvar zoom = get_zoom(node); // https://drafts.csswg.org/css-viewport/#effective-zoom\n\tvar sx = node.clientWidth / to.width / zoom;\n\tvar sy = node.clientHeight / to.height / zoom;\n\n\t// find the starting position of the transform origin\n\tvar fx = from.left + from.width * ox;\n\tvar fy = from.top + from.height * oy;\n\n\t// find the ending position of the transform origin\n\tvar tx = to.left + to.width * ox;\n\tvar ty = to.top + to.height * oy;\n\n\t// find the translation at the start of the transform\n\tvar dx = (fx - tx) * sx;\n\tvar dy = (fy - ty) * sy;\n\n\t// find the relative scale at the start of the transform\n\tvar dsx = from.width / to.width;\n\tvar dsy = from.height / to.height;\n\n\treturn {\n\t\tdelay,\n\t\tduration: typeof duration === 'function' ? duration(Math.sqrt(dx * dx + dy * dy)) : duration,\n\t\teasing,\n\t\tcss: (t, u) => {\n\t\t\tvar x = u * dx;\n\t\t\tvar y = u * dy;\n\t\t\tvar sx = t + u * dsx;\n\t\t\tvar sy = t + u * dsy;\n\n\t\t\treturn `transform: ${transform} translate(${x}px, ${y}px) scale(${sx}, ${sy});`;\n\t\t}\n\t};\n}\n\n/**\n * @param {Element} element\n */\nfunction get_zoom(element) {\n\tif ('currentCSSZoom' in element) {\n\t\treturn /** @type {number} */ (element.currentCSSZoom);\n\t}\n\n\t/** @type {Element | null} */\n\tvar current = element;\n\tvar zoom = 1;\n\n\twhile (current !== null) {\n\t\tzoom *= +getComputedStyle(current).zoom;\n\t\tcurrent = /** @type {Element | null} */ (current.parentElement);\n\t}\n\n\treturn zoom;\n}\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 { _, isRTL } from '@sveltia/i18n';\n  import { tick } from 'svelte';\n  import { flip } from 'svelte/animate';\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<{ value: string }>) => void} [onAddValue] Custom `AddValue`\n   * event handler.\n   * @property {(event: CustomEvent<{ value: string }>) => void} [onRemoveValue] Custom\n   * `RemoveValue` event handler.\n   * @property {(event: CustomEvent<{ values: string[] }>) => void} [onReorder] Custom `Reorder`\n   * event handler fired when the order of selected values changes.\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    onReorder,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {Map<any, { label: string, value: any, searchValue?: string }>} */\n  const optionMap = $derived(new Map(options.map((o) => [o.value, o])));\n  const prevKey = $derived(isRTL() ? 'ArrowRight' : 'ArrowLeft');\n  const nextKey = $derived(isRTL() ? 'ArrowLeft' : 'ArrowRight');\n\n  /**\n   * Reference to the wrapper element.\n   * @type {HTMLElement | undefined}\n   */\n  let wrapperElement = $state();\n\n  /**\n   * @type {string | undefined}\n   */\n  let selectedValue = $state();\n\n  /**\n   * Index of the tag currently being dragged.\n   * @type {number | undefined}\n   */\n  let dragIndex = $state();\n\n  /**\n   * Insertion position during drag: the dragged item will be placed *before* this index (0 = before\n   * first, values.length = after last).\n   * @type {number | undefined}\n   */\n  let dropIndex = $state();\n\n  /**\n   * Move a selected value from one position to another and dispatch the `Reorder` event.\n   * @param {number} from Source index.\n   * @param {number} to Destination index.\n   */\n  const moveValue = (from, to) => {\n    if (from === to) return;\n\n    const newValues = [...values];\n    const [item] = newValues.splice(from, 1);\n\n    newValues.splice(to, 0, item);\n    values = newValues;\n    onReorder?.(new CustomEvent('Reorder', { detail: { values: newValues } }));\n  };\n\n  /**\n   * Move a value and focus the tag at the destination index.\n   * @param {number} from Source index.\n   * @param {number} to Destination index.\n   */\n  const moveAndFocus = async (from, to) => {\n    moveValue(from, to);\n    await tick();\n\n    /** @type {HTMLElement} */ (\n      wrapperElement?.querySelectorAll('.label[tabindex]')?.[to]\n    )?.focus();\n  };\n</script>\n\n<div\n  role=\"none\"\n  class=\"sui select-tags {className}\"\n  class:disabled={disabled || readonly}\n  {hidden}\n  bind:this={wrapperElement}\n>\n  <span\n    role=\"listbox\"\n    aria-multiselectable=\"true\"\n    aria-label={_('_sui.select_tags.selected_options')}\n  >\n    {#each values as value, index (value)}\n      {@const option = optionMap.get(value)}\n      {@const label = option?.label || option?.value || value}\n      <span\n        role=\"none\"\n        draggable={!disabled && !readonly}\n        class:drag-source={dragIndex === index}\n        class:drop-before={dropIndex === index && dragIndex !== index && dragIndex !== index - 1}\n        class:drop-after={dropIndex === values.length &&\n          index === values.length - 1 &&\n          dragIndex !== values.length - 1}\n        ondragstart={(event) => {\n          dragIndex = index;\n\n          if (event.dataTransfer) {\n            event.dataTransfer.setData('text/plain', label);\n            event.dataTransfer.effectAllowed = 'move';\n          }\n        }}\n        ondragover={(event) => {\n          event.preventDefault();\n\n          if (event.dataTransfer) {\n            event.dataTransfer.dropEffect = 'move';\n          }\n\n          const rect = event.currentTarget.getBoundingClientRect();\n          const inFirstHalf = event.clientX < rect.left + rect.width / 2;\n\n          dropIndex = inFirstHalf !== isRTL() ? index : index + 1;\n        }}\n        ondrop={async (event) => {\n          event.preventDefault();\n\n          const fromIndex = dragIndex;\n          const toIndex = dropIndex;\n\n          dragIndex = undefined;\n          dropIndex = undefined;\n\n          if (\n            fromIndex !== undefined &&\n            toIndex !== undefined &&\n            toIndex !== fromIndex &&\n            toIndex !== fromIndex + 1\n          ) {\n            await moveAndFocus(fromIndex, toIndex > fromIndex ? toIndex - 1 : toIndex);\n          }\n        }}\n        ondragend={() => {\n          dragIndex = undefined;\n          dropIndex = undefined;\n        }}\n        animate:flip={{ duration: 200 }}\n      >\n        <span\n          class=\"label\"\n          role=\"option\"\n          aria-selected=\"true\"\n          tabindex={disabled || readonly ? undefined : 0}\n          onkeydown={async (event) => {\n            const { key } = event;\n\n            const targetIndex =\n              key === prevKey && index > 0\n                ? index - 1\n                : key === nextKey && index < values.length - 1\n                  ? index + 1\n                  : key === 'Home' && index > 0\n                    ? 0\n                    : key === 'End' && index < values.length - 1\n                      ? values.length - 1\n                      : -1;\n\n            if (targetIndex === -1) return;\n\n            event.preventDefault();\n            await moveAndFocus(index, targetIndex);\n          }}\n        >\n          {label}\n        </span>\n        {#if option}\n          <Button\n            iconic\n            size=\"small\"\n            disabled={disabled || readonly}\n            aria-label={_('_sui.select_tags.remove_x', { values: { name: 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        {/if}\n      </span>\n    {/each}\n  </span>\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[role=listbox] {\n  display: contents;\n}\n.select-tags span[draggable] {\n  display: inline-flex;\n  align-items: center;\n  position: relative;\n  margin: var(--sui-focus-ring-width);\n  padding: 0;\n  padding-inline-start: 8px;\n  border-radius: var(--sui-control-medium-border-radius);\n  background-color: var(--sui-secondary-background-color);\n  cursor: grab;\n  outline: none;\n}\n.select-tags span[draggable]:focus-within {\n  outline: var(--sui-focus-ring-width) solid var(--sui-primary-accent-color-translucent);\n  outline-offset: 1px;\n}\n.select-tags span[draggable].drag-source {\n  opacity: 0.4;\n  cursor: grabbing;\n}\n.select-tags span[draggable].drop-before::before, .select-tags span[draggable].drop-after::after {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  margin-left: -1px;\n  border-radius: 1px;\n  width: 4px;\n  background-color: var(--sui-primary-accent-color);\n  pointer-events: none;\n}\n.select-tags span[draggable].drop-before::before {\n  inset-inline-start: calc(-1 * var(--sui-focus-ring-width) - 1px);\n}\n.select-tags span[draggable].drop-after::after {\n  inset-inline-end: calc(-1 * var(--sui-focus-ring-width) - 1px);\n}\n.select-tags span[draggable] .label {\n  outline: none;\n}\n.select-tags span[draggable] :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 { isRTL } from '@sveltia/i18n';\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} physicalX Physical X position in pixels from the left edge.\n   */\n  const moveThumb = (physicalX) => {\n    // Convert physical position to logical position (always LTR)\n    // In RTL, left side (physicalX=0) maps to max value (logicalX=barWidth)\n    // In LTR, left side (physicalX=0) maps to min value (logicalX=0)\n    const logicalX = isRTL() ? barWidth - physicalX : physicalX;\n\n    if (logicalX < 0 || logicalX > barWidth) {\n      return;\n    }\n\n    const fromIndex = positionList.findLastIndex((s) => s <= logicalX);\n    const toIndex = positionList.findIndex((s) => logicalX <= s);\n    const fromDiff = Math.abs(positionList[fromIndex] - logicalX);\n    const toDiff = Math.abs(positionList[toIndex] - logicalX);\n    const index = fromDiff < toDiff ? fromIndex : 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    const _isRTL = isRTL();\n    // In RTL, ArrowLeft increases value, ArrowRight decreases value\n    const decreaseKeys = _isRTL ? ['ArrowDown', 'ArrowRight'] : ['ArrowDown', 'ArrowLeft'];\n    const increaseKeys = _isRTL ? ['ArrowUp', 'ArrowLeft'] : ['ArrowUp', 'ArrowRight'];\n\n    if (decreaseKeys.includes(key)) {\n      if (_value > min) {\n        index = valueList.indexOf(_value) - 1;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n    }\n\n    if (increaseKeys.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    const screenDiff = screenX - startScreenX;\n    // Calculate new physical position from left edge\n    const physicalX = startX + screenDiff;\n\n    moveThumb(physicalX);\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      const rect = /** @type {HTMLElement} */ (base).getBoundingClientRect();\n      // Get physical X position from left edge\n      const physicalX = /** @type {any} */ (event).clientX - rect.left;\n\n      moveThumb(physicalX);\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\n    const rect = /** @type {HTMLElement} */ (base).getBoundingClientRect();\n\n    // Store physical X position from left edge (same in LTR and RTL)\n    startX = clientX - rect.left;\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    const emptyArray = Array.from({ length: stepCount });\n\n    valueList = emptyArray.map((_, index) => index * step + min, 10);\n    positionList = emptyArray.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:inset-inline-start=\"{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:inset-inline-start=\"{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:inset-inline-start=\"{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 (`${index}-${label}`)}\n        <span\n          role=\"none\"\n          class=\"label\"\n          style:inset-inline-start=\"{(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}\n[role=slider]:dir(ltr) {\n  transform: translate(calc((var(--sui-checkbox-height) / 2 - 1px) * -1), calc((var(--sui-checkbox-height) / 4 - 1px) * -1));\n}\n[role=slider]:dir(rtl) {\n  transform: translate(calc(var(--sui-checkbox-height) / 2 - 1px), 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  font-size: var(--sui-font-size-x-small);\n}\n.label:dir(ltr) {\n  transform: translateX(-50%);\n}\n.label:dir(rtl) {\n  transform: translateX(50%);\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  --translateX: 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}\nbutton[aria-checked=true] span:dir(ltr)::before {\n  transform: translateX(calc(var(--translateX)));\n}\nbutton[aria-checked=true] span:dir(rtl)::before {\n  transform: translateX(calc((var(--translateX)) * -1));\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.js';\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  {@attach 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-block: var(--sui-horizontal-tab-list-margin-block, 0 32px);\n  margin-inline: var(--sui-horizontal-tab-list-margin-inline, 0);\n  border-block-width: var(--sui-horizontal-tab-list-border-block-width, 0 1px);\n  border-inline-width: var(--sui-horizontal-tab-list-border-inline-width, 0 0);\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-block-width: var(--sui-horizontal-tab-list-indicator-border-block-width, 0 2px);\n  border-inline-width: var(--sui-horizontal-tab-list-indicator-border-inline-width, 0 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-block: var(--sui-vertical-tab-list-margin-block, 0);\n  margin-inline: var(--sui-vertical-tab-list-margin-inline, 0 32px);\n  border-block-width: var(--sui-vertical-tab-list-border-block-width, 0 0);\n  border-inline-width: var(--sui-vertical-tab-list-border-inline-width, 0 1px);\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-inline-end: 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-block-width: var(--sui-vertical-tab-list-indicator-border-block-width, 0 0);\n  border-inline-width: var(--sui-vertical-tab-list-indicator-border-inline-width, 0 2px);\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  <!-- eslint-disable-next-line svelte/no-useless-children-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      // eslint-disable-next-line svelte/no-dom-manipulating\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      // eslint-disable-next-line svelte/no-dom-manipulating\n      toast?.remove();\n    };\n  });\n\n  onMount(() => {\n    if (position !== 'auto') {\n      return undefined;\n    }\n\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    return () => {\n      mql.removeEventListener('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 = /** @type {number} */ (\n        /** @type {unknown} */ (\n          globalThis.setTimeout(() => {\n            show = false;\n          }, duration)\n        )\n      );\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-block-start: 0;\n  inset-block-end: auto;\n  inset-inline-start: 0;\n  inset-inline-end: auto;\n}\n.toast.top-center {\n  inset-block-start: 0;\n  inset-block-end: auto;\n  inset-inline-start: 50%;\n  inset-inline-end: auto;\n}\n.toast.top-center:dir(ltr) {\n  transform: translateX(-50%);\n}\n.toast.top-center:dir(rtl) {\n  transform: translateX(50%);\n}\n.toast.top-right {\n  inset-block-start: 0;\n  inset-block-end: auto;\n  inset-inline-start: auto;\n  inset-inline-end: 0;\n}\n.toast.bottom-left {\n  inset-block-start: auto;\n  inset-block-end: 0;\n  inset-inline-start: 0;\n  inset-inline-end: auto;\n}\n.toast.bottom-center {\n  inset-block-start: auto;\n  inset-block-end: 0;\n  inset-inline-start: 50%;\n  inset-inline-end: auto;\n}\n.toast.bottom-center:dir(ltr) {\n  transform: translateX(-50%);\n}\n.toast.bottom-center:dir(rtl) {\n  transform: translateX(50%);\n}\n.toast.bottom-right {\n  inset-block-start: auto;\n  inset-block-end: 0;\n  inset-inline-start: auto;\n  inset-inline-end: 0;\n}</style>\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","/**\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.`)}function e(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.`)}const n=\"undefined\"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement,r=n&&\"documentMode\"in document?document.documentMode:null,i=n&&/Mac|iPod|iPhone|iPad/.test(navigator.platform),o=n&&/^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent),s=!(!n||!(\"InputEvent\"in window)||r)&&\"getTargetRanges\"in new window.InputEvent(\"input\"),l=n&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,c=n&&/Android/.test(navigator.userAgent),a=n&&/Version\\/[\\d.]+.*Safari/.test(navigator.userAgent)&&!c,u=n&&/^(?=.*Chrome).*/i.test(navigator.userAgent),f=n&&c&&u,d=n&&/AppleWebKit\\/[\\d.]+/.test(navigator.userAgent)&&i&&!u,h=0,g=1,_=2,p=1,y=2,m=4,x=8,C=16,v=32,S=64,k=128,T=2047,b=1,N=2,w=3,E=4,O=5,M=6,A=a||l||d?\"\\xa0\":\"\\u200b\",D=\"\\n\\n\",P=o?\"\\xa0\":A,F=\"\\u0591-\\u07ff\\ufb1d-\\ufdfd\\ufe70-\\ufefc\",I=\"A-Za-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02b8\\u0300-\\u0590\\u0800-\\u1fff\\u200e\\u2c00-\\ufb1c\\ufe00-\\ufe6f\\ufefd-\\uffff\",L=new RegExp(\"^[^\"+I+\"]*[\"+F+\"]\"),z=new RegExp(\"^[^\"+F+\"]*[\"+I+\"]\"),K={bold:1,capitalize:1024,code:16,highlight:k,italic:2,lowercase:256,strikethrough:4,subscript:32,superscript:64,underline:8,uppercase:512},B={directionless:1,unmergeable:2},R={center:2,end:6,justify:4,left:1,right:3,start:5},W={[N]:\"center\",[M]:\"end\",[E]:\"justify\",[b]:\"left\",[w]:\"right\",[O]:\"start\"},$={normal:0,segmented:2,token:1},J={[h]:\"normal\",[_]:\"segmented\",[g]:\"token\"},j=\"$\",U=\"$config\";function V(){return Ol()._blockCursorElement}class H{element;before;after;constructor(t,e,n){this.element=t,this.before=e||null,this.after=n||null}withBefore(t){return new H(this.element,t,this.after)}withAfter(t){return new H(this.element,this.before,t)}withElement(t){return this.element===t?this:new H(t,this.before,this.after)}insertChild(e){const n=this.getInsertionAnchor();return null!==n&&n.parentElement!==this.element&&t(357),this.element.insertBefore(e,n),this}removeChild(e){return e.parentElement!==this.element&&t(358),this.element.removeChild(e),this}replaceChild(e,n){return n.parentElement!==this.element&&t(359),this.element.replaceChild(e,n),this}getFirstChild(){const t=this.getFirstChildAnchor(),e=t?t.nextSibling:this.element.firstChild;return e===this.getInsertionAnchor()?null:e}getFirstChildAnchor(){return this.after}resolveLeafPosition(t,e,n){if(this.element===t)return e===t&&0===n?\"before\":\"after\";const r=Y(t,this.element);if(null===r)return\"after\";const i=Array.prototype.indexOf.call(t.childNodes,r);if(i<0)return\"after\";if(e===t)return n<=i?\"before\":\"after\";const o=Y(t,e);if(null===o)return\"after\";const s=Array.prototype.indexOf.call(t.childNodes,o);return s>=0&&s<=i?\"before\":\"after\"}getInsertionAnchor(){return this.before}}function Y(t,e){let n=e;for(;null!==n&&n.parentNode!==t;)n=n.parentNode;return n}class q extends H{withBefore(t){return new q(this.element,t,this.after)}withAfter(t){return new q(this.element,this.before,t)}withElement(t){return this.element===t?this:new q(t,this.before,this.after)}getInsertionAnchor(){return super.getInsertionAnchor()||this.getManagedLineBreak()}getFirstChildAnchor(){const t=super.getFirstChildAnchor(),e=t?t.nextSibling:this.element.firstChild;return null!==e&&e===V()?e:t}getManagedLineBreak(){return this.element.__lexicalLineBreak||null}setManagedLineBreak(t){if(this.element.__lexicalLastChildKind=t,null===t)this.removeManagedLineBreak();else{const e=\"decorator\"===t&&(d||l||a);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.setProperty(\"display\",\"inline\",\"important\"),t.style.setProperty(\"border\",\"0px\",\"important\"),t.style.setProperty(\"margin\",\"0px\",\"important\"),t.alt=\"\",n.insertBefore(t,i),n.__lexicalLineBreak=t}else n.__lexicalLineBreak=i}getFirstChildOffset(){const t=this.getFirstChild(),e=this.getInsertionAnchor();let n=0;for(let r=this.element.firstChild;null!==r&&r!==t&&r!==e;r=r.nextSibling)n++;return n}resolveChildIndex(t,e,n,r){if(n===this.element){const e=this.getFirstChildOffset(),n=V(),i=this.element.childNodes,o=Math.min(r,i.length);let s=0;for(let t=e;t<o;t++)i[t]!==n&&s++;return[t,Math.min(s,t.getChildrenSize())]}const i=G(e,n);i.push(r);const o=G(e,this.element);let s=t.getIndexWithinParent();for(let t=0;t<o.length;t++){const e=i[t],n=o[t];if(void 0===e||e<n)break;if(e>n){s+=1;break}}return[t.getParentOrThrow(),s]}}function G(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()}let X;try{X=\"0.45.0+prod.esm\"}catch(t){}const Q=X??\"0.45.0+source\";class Z{_front=new Set;_back=new Set;_cache;get size(){return this._front.size+this._back.size}addBack(t){return delete this._cache,this._front.has(t)||this._back.add(t),this}addFront(t){return delete this._cache,this._back.has(t)||this._front.add(t),this}delete(t){return delete this._cache,this._front.delete(t)||this._back.delete(t)}toArray(){const t=Array.from(this._front).reverse();for(const e of this._back)t.push(e);return t}toReadonlyArray(){return this._cache=this._cache||this.toArray(),this._cache}[Symbol.iterator](){return this.toReadonlyArray()[Symbol.iterator]()}}const tt=null;function et(t,e=1e3){return t instanceof nt?t.clone():t.size<e?new Map(t):(new nt).init(new Map(t),void 0,t.size)}class nt{_mutable=!1;_old=void 0;_nursery=void 0;_size=0;clone(){return this._mutable=!1,(new nt).init(this._old,this._nursery,this._size)}init(t,e,n){return this._old=t,this._nursery=e,this._size=n,this}get size(){return this._size}has(t){return void 0!==this.get(t)}getWithTombstone(t){const e=this._nursery&&this._nursery.get(t);return void 0!==e?e:this._old&&this._old.get(t)}get(t){const e=this.getWithTombstone(t);return e===tt?void 0:e}shouldCompact(){return void 0!==this._nursery&&2*this._nursery.size>this._size}getNursery(){return this._mutable&&this._nursery||(this.compact(),this._nursery=new Map(this._nursery),this._mutable=!0),this._nursery}compact(t=!1){if(this._nursery&&this._nursery.size>0&&(t||this.shouldCompact())){const t=new Map(this._old);for(const[e,n]of this._nursery)n!==tt?t.set(e,n):t.delete(e);this._old=t,this._nursery=void 0}return this._mutable=!1,this}set(t,e){const n=this.getWithTombstone(t);if(n===e)return this;const r=this.getNursery();return n!==tt&&void 0!==n||(this._size++,n===tt&&r.delete(t)),r.set(t,e),this}delete(t){const e=this.has(t);return e&&(this.getNursery().set(t,tt),this._size--),e}getOrInsert(t,e){const n=this.get(t);return void 0!==n?n:(this.set(t,e),e)}getOrInsertComputed(t,e){const n=this.get(t);if(void 0!==n)return n;const r=e(t);return this.set(t,r),r}clear(){this._mutable=!1,this._old=void 0,this._nursery=void 0,this._size=0}*keys(){for(const t of this.entries())yield t[0]}*values(){for(const t of this.entries())yield t[1]}*entries(){const t=this._nursery,e=this._old;if(e)for(const n of e){const e=n[0],r=t?t.get(e):void 0;r!==tt&&(void 0!==r&&(n[1]=r),yield n)}if(t)for(const n of t)n[1]===tt||e&&e.has(n[0])||(yield n)}forEach(t,e){void 0!==e&&(t=t.bind(e));for(const[e,n]of this.entries())t(n,e,this)}get[Symbol.toStringTag](){return\"GenMap\"}[Symbol.iterator](){return this.entries()}}function rt(t,e,n,r,i,o){let s=t.getFirstChild();for(;null!==s;){const t=s.__key;s.__parent===e&&(_o(s)&&rt(s,t,n,r,i,o),n.has(t)||o.delete(t),i.push(t)),s=s.getNextSibling()}}let it=!1,ot=0;function st(t){ot=t.timeStamp}function lt(t,e,n){const r=\"BR\"===t.nodeName,i=e.__lexicalLineBreak;return i&&(t===i||r&&t.previousSibling===i)||r&&void 0!==Ss(t,n)}function ct(t,e,n){const r=_l(ol(n));let i=null,o=null;null!==r&&r.anchorNode===t&&(i=r.anchorOffset,o=r.focusOffset);const s=t.nodeValue;null!==s&&Is(e,s,i,o,!1)}function at(t,e,n){if(si(t)){const e=t.anchor.getNode();if(e.is(n)&&t.format!==e.getFormat())return!1}return us(e)&&n.isAttached()}function ut(t,e,n,r){for(let i=t;i&&!Jl(i);i=Qs(i)){const t=Ss(i,e);if(void 0!==t){const e=Cs(t,n);if(e)return mo(e)||!vl(i)?void 0:[i,e]}else if(i===r)return[r,ws(n)]}}function ft(t,e,n){it=!0;const r=performance.now()-ot>100;try{ho(t,()=>{const i=Ti()||function(t){return t.getEditorState().read(()=>{const t=Ti();return null!==t?t.clone():null})}(t),s=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,_=ut(g,t,c,l);if(!_)continue;const[p,y]=_;if(\"characterData\"===h)r&&Gr(y)&&us(g)&&at(i,g,y)&&ct(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],i=vs(r),s=r.parentNode;if(null!=s&&r!==a&&null===i&&!lt(r,s,t)&&!Jl(r)){if(o){const t=(vl(r)?r.innerText:null)||r.nodeValue;t&&(f+=t)}s.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];(lt(r,g,t)||a===r)&&(g.appendChild(r),e++)}r!==e&&s.set(p,y)}}}if(s.size>0)for(const[e,n]of s)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],o=n.parentNode;null==o||\"BR\"!==n.nodeName||lt(n,i,t)||o.removeChild(n)}}n.takeRecords()}null!==i&&(u&&Es(i),o&&qs(t)&&i.insertRawText(f))})}finally{it=!1}}function dt(t){const e=t._observer;if(null!==e){ft(t,e.takeRecords(),e)}}function ht(t){!function(t){0===ot&&ol(t).addEventListener(\"textInput\",st,!0)}(t),t._observer=new MutationObserver((e,n)=>{ft(t,e,n)})}class gt{key;parse;unparse;isEqual;defaultValue;resetOnCopyNode;constructor(t,e){this.key=t,this.parse=e.parse.bind(e),this.unparse=(e.unparse||Tt).bind(e),this.isEqual=(e.isEqual||Object.is).bind(e),this.defaultValue=this.parse(void 0),this.resetOnCopyNode=e.resetOnCopyNode||!1}}function _t(t,e){return new gt(t,e)}function pt(t,e,n=\"latest\"){const r=(\"latest\"===n?t.getLatest():t).__state;return r?r.getValue(e):e.defaultValue}function yt(t,e,n){const r=pt(t,n,\"direct\"),i=pt(e,n,\"direct\");return n.isEqual(r,i)?null:[r,i]}function mt(t,e,n){let r;if(Hi(),\"function\"==typeof n){const i=t.getLatest(),o=pt(i,e);if(r=n(o),e.isEqual(o,r))return i}else r=n;const i=t.getWritable();return vt(i).updateFromKnown(e,r),i}function xt(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}=Ul(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 Ct{node;knownState;unknownState;sharedNodeState;size;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:o}=this.sharedNodeState,s=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}(o,n,r);this.size=s}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 kt(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 Ct(t,e,function(t,e,n){let r;if(n)for(const[i,o]of Object.entries(n)){const n=t.get(i);n?e.has(n)||e.set(n,n.parse(o)):(r=r||{},r[i]=o)}return r}(e.sharedConfigMap,r,n),r,this.size)}resetOnCopyNode(){for(const t of this.knownState.keys())t.resetOnCopyNode&&this.knownState.set(t,t.defaultValue);return this}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=kt(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 vt(t){const e=t.getWritable(),n=e.__state?e.__state.getWritable(e):new Ct(e,St(e));return e.__state=n,n}function St(t){return t.__state?t.__state.sharedNodeState:Qo(Ol(),t.getType()).sharedNodeState}function kt(t){if(t)for(const e in t)return t}function Tt(t){return t}function bt(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 Nt(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 wt(t,e){const n=t.__state;return n&&n.node===t?n.getWritable(e):n}function Et(t,e){const n=t.__mode,r=t.__format,i=t.__style,o=e.__mode,s=e.__format,l=e.__style,c=t.__state,a=e.__state;return(null===n||n===o)&&(null===r||r===s)&&(null===i||i===l)&&(null===t.__state||c===a||function(t,e){if(t===e)return!0;const n=new Set;return!(t&&bt(n,t,e)||e&&bt(n,e,t)||t&&Nt(n,t,e)||e&&Nt(n,e,t))}(c,a))}function Ot(t,e){const n=t.mergeWithSibling(e),r=Gi()._normalizedNodes;return r.add(t.__key),r.add(e.__key),n}function Mt(t){let e,n,r=t;if(\"\"!==r.__text||!r.isSimpleText()||r.isUnmergeable()){for(;null!==(e=r.getPreviousSibling())&&Gr(e)&&e.isSimpleText()&&!e.isUnmergeable();){if(\"\"!==e.__text){if(Et(e,r)){r=Ot(e,r);break}break}e.remove()}for(;null!==(n=r.getNextSibling())&&Gr(n)&&n.isSimpleText()&&!n.isUnmergeable();){if(\"\"!==n.__text){if(Et(r,n)){r=Ot(r,n);break}break}n.remove()}}else r.remove()}function At(t){return Dt(t.anchor),Dt(t.focus),t}function Dt(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),Gr(r)){t.set(r.__key,i?r.getTextContentSize():0,\"text\",!0);break}if(!_o(r))break;t.set(r.__key,i?r.getChildrenSize():0,\"element\",!0)}}const Pt=Symbol.for(\"@lexical/CachedTextSize\");function Ft(e,n){return Xt.read(()=>{let r=0,i=e;for(let e=0;e<n&&null!==i;e++){const o=Gt.get(i);if(void 0===o&&t(345,i),_o(o)){const s=Qt.get(i);if(void 0!==s&&_o(s)&&s.__parent!==o.__parent)r+=o.getTextContentSize();else{const e=Zt.get(i),n=e&&e.__lexicalTextContent;\"string\"!=typeof n&&t(346,o.getType()),r+=n.length}e<n-1&&!o.isInline()&&(r+=2)}else{const e=o[Pt];void 0===e&&t(347,o.getType(),i),r+=e}i=o.__next}return r},{editor:Kt})}function It(t){_o(t)||void 0===t[Pt]&&(t[Pt]=Gr(t)?t.__text.length:t.getTextContentSize())}const Lt=4;let zt,Kt,Bt,Rt=\"\",Wt=null,$t=null,Jt=null;function jt(){return{firstTextKey:Jt,format:Wt,style:$t}}function Ut(t){null!==t.firstTextKey&&(Wt=t.format,$t=t.style,Jt=t.firstTextKey)}function Vt(e){if(null!==Jt)return;const n=e.__lexicalFirstTextKey;if(void 0===n&&t(348),null===n)return;const r=Qt.get(n);Gr(r)&&(Wt=r.getFormat(),$t=r.getStyle(),Jt=n)}let Ht,Yt,qt,Gt,Xt,Qt,Zt,te,ee,ne,re=!1,ie=!1;function oe(t,e){const n=Gt.get(t),r=Qt.has(t);if(null!==e){const n=Se(t);n.parentNode===e&&e.removeChild(n)}if(!r){if(Kt._keyToDOMMap.delete(t),_o(n)){const t=Yl(n,Gt);se(t,0,t.length-1,null)}void 0!==n&&Us(ee,Bt,Ht,n,\"destroyed\")}}function se(t,e,n,r){for(let i=e;i<=n;++i){const e=t[i];void 0!==e&&oe(e,r)}}function le(t,e){t.setProperty(\"text-align\",e)}const ce=\"40px\";function ae(t,e){const n=zt.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)}t.style.setProperty(\"padding-inline-start\",0===e?\"\":`calc(${e} * var(--lexical-indent-base-value, ${ce}))`)}function ue(t,e){const n=t.style;0===e?le(n,\"\"):1===e?le(n,\"left\"):2===e?le(n,\"center\"):3===e?le(n,\"right\"):4===e?le(n,\"justify\"):5===e?le(n,\"start\"):6===e&&le(n,\"end\")}function fe(t,e){const n=function(t){const e=t.__dir;if(null!==e)return e;if(Co(t))return null;const n=t.getParentOrThrow();return cl(n)&&null===n.__dir?\"auto\":null}(e);null!==n?t.dir=n:t.removeAttribute(\"dir\")}function de(e,n){const r=Qt.get(e);if(void 0===r&&t(60),null!==n){const t=Gt.get(e);if(void 0!==t&&t.__parent!==r.__parent){const t=Zt.get(e);if(void 0!==t)return n.insertChild(t),ye(e,n.element)}}const i=ne.$createDOM(r,Kt);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,Kt),Gr(r)?i.setAttribute(\"data-lexical-text\",\"true\"):mo(r)&&i.setAttribute(\"data-lexical-decorator\",\"true\"),_o(r)){const t=r.__indent,e=r.__size;if(fe(i,r),0!==t&&ae(i,t),0===e)i.__lexicalTextContent=\"\",i.__lexicalFirstTextKey=null;else{const t=e-1;he(Yl(r,Qt),r,0,t,Al(r,i,Kt))}const n=r.__format;0!==n&&ue(i,n),r.isInline()||ge(null,r,i)}else{const t=r.getTextContent();if(mo(r)){const t=r.decorate(Kt,zt);null!==t&&me(e,t),i.contentEditable=\"false\"}Rt+=t}return null!==n&&n.insertChild(i),ne.$decorateDOM(r,null,i,Kt),It(r),Us(ee,Bt,Ht,r,\"created\"),i}function he(e,n,r,i,o){const s=Rt,l=jt();Rt=\"\",Wt=null,$t=null,Jt=null;let c=r;for(;c<=i;++c){const t=jt();de(e[c],o);const n=Qt.get(e[c]);null!==n&&Gr(n)?null===Wt&&(Wt=n.getFormat(),$t=n.getStyle(),Jt=n.__key):_o(n)&&c<i&&!n.isInline()&&(Rt+=D),Ut(t)}const a=Kt._keyToDOMMap.get(n.__key);void 0===a&&t(349,n.__key),a.__lexicalTextContent=Rt,a.__lexicalFirstTextKey=Jt,Rt=s+Rt,Ut(l)}function ge(t,e,n){const r=Al(e,n,Kt),i=r.element.__lexicalLastChildKind??null,o=function(t,e){if(t){const n=t.__last;if(n){const t=e.get(n);if(t)return Dr(t)?\"line-break\":mo(t)&&t.isInline()?\"decorator\":null}return\"empty\"}return null}(e,Qt);i!==o&&r.setManagedLineBreak(o)}function _e(e,n,r){var i;Wt=null,$t=null,Jt=null,function(e,n,r){const i=Rt,o=e.__size,s=n.__size;Rt=\"\";const l=r.element,c=Kt._keyToDOMMap.get(n.__key);void 0===c&&t(351,n.__key);const a=s-o;if(!re&&Math.abs(a)<=1&&o>=Lt&&e.__first===n.__first&&(0!==a||!Kt._cloneNotNeeded.has(e.__key))){const o=c.__lexicalTextContent,u=te.get(e.__key);if(!re&&\"string\"==typeof o&&void 0!==u){const s=function(t,e){const n=e.size;if(0===n||n>=t.__size)return null;let r=t.__last,i=null,o=0;for(;null!==r&&o<n;){if(!e.has(r))return null;i=r;const t=Qt.get(r);if(void 0===t)return null;r=t.__prev,o++}if(o!==n)return null;if(null!==r&&e.has(r))return null;return i}(n,u);if(null!==s){const f=u.size;if(0===a){const e=Ft(s,f);let r=s,a=0;for(;null!==r&&a<f;){const t=Qt.get(r);if(void 0===t)break;const e=jt();ye(r,l),Gr(t)&&null===Wt&&(Wt=t.getFormat(),$t=t.getStyle(),Jt=t.__key),Ut(e),r=t.__next,a++}let d=\"\";for(r=s,a=0;null!==r&&a<f;){const e=Qt.get(r);if(void 0===e)break;let n;if(_o(e)){const i=Kt._keyToDOMMap.get(r),o=i&&i.__lexicalTextContent;\"string\"!=typeof o&&t(352,e.getType()),n=o}else n=e.getTextContent();d+=n,a<f-1&&_o(e)&&!e.isInline()&&(d+=D),r=e.__next,a++}const h=o.slice(0,o.length-e)+d;return c.__lexicalTextContent=h,Rt=i+h,void pe(n,c,u)}if(function(e,n,r,i,o,s,l,c){if(1!==c&&-1!==c)return!1;const a=1===c?2:1;if(l!==a)return!1;const u=l-c;let f=e.__last;for(let t=0;t<u-1;t++){if(null===f)return!1;const t=Gt.get(f);if(void 0===t)return!1;f=t.__prev}if(null===f)return!1;const d=Qt.get(s),h=Gt.get(f);if(void 0===d||void 0===h)return!1;if(d.__prev!==h.__prev)return!1;const g=[];let _=s;for(let t=0;t<l;t++){if(null===_)return!1;g.push(_);const t=Qt.get(_);_=t?t.__next:null}const p=[];_=f;for(let t=0;t<u;t++){if(null===_)return!1;p.push(_);const t=Gt.get(_);_=t?t.__next:null}const y=new Set(p),m=new Set(g),x=[];let C=0,v=0;for(;C<u&&v<l;)if(g[v]===p[C])x.push({key:g[v],kind:\"reconcile\"}),C++,v++;else if(m.has(p[C])){if(y.has(g[v]))return!1;x.push({key:g[v],kind:\"create\",nextIndex:v}),v++}else x.push({key:p[C],kind:\"destroy\"}),C++;for(;C<u;)x.push({key:p[C++],kind:\"destroy\"});for(;v<l;)x.push({key:g[v],kind:\"create\",nextIndex:v}),v++;const S=Ft(f,u);for(const t of x){const e=jt();if(\"reconcile\"===t.kind)ye(t.key,r.element);else if(\"destroy\"===t.kind)oe(t.key,r.element);else{let e=null;for(let n=t.nextIndex+1;n<l;n++){const t=Kt._keyToDOMMap.get(g[n]);if(void 0!==t){e=t;break}}de(t.key,r.withBefore(e??r.before))}if(\"destroy\"!==t.kind){const e=Qt.get(t.key);e&&Gr(e)&&null===Wt&&(Wt=e.getFormat(),$t=e.getStyle(),Jt=e.__key)}Ut(e)}let k=\"\";for(let e=0;e<l;e++){const n=Qt.get(g[e]);if(void 0===n)return!1;let r;if(_o(n)){const i=Kt._keyToDOMMap.get(g[e]),o=i&&i.__lexicalTextContent;\"string\"!=typeof o&&t(350,n.getType()),r=o}else r=n.getTextContent();k+=r,e<l-1&&_o(n)&&!n.isInline()&&(k+=D)}const T=o.slice(0,o.length-S)+k;return i.__lexicalTextContent=T,!0}(e,0,r,c,o,s,f,a)){const e=c.__lexicalTextContent;return\"string\"!=typeof e&&t(353),Rt=i+e,void pe(n,c,u)}}}if(0===a){let n=e.__first,r=0;for(;null!==n;){const e=Qt.get(n);if(void 0===e)break;const i=re||qt.has(n)||Yt.has(n),o=jt();if(i)ye(n,l);else{let r,i;if(_o(e)){i=Zt.get(n);const o=i&&i.__lexicalTextContent;\"string\"!=typeof o&&t(354,e.getType()),r=o}else r=e.getTextContent();Rt+=r,void 0!==i&&Vt(i)}Gr(e)?null===Wt&&(Wt=e.getFormat(),$t=e.getStyle(),Jt=e.__key):_o(e)&&r<s-1&&!e.isInline()&&(Rt+=D),Ut(o),n=e.__next,r++}return c.__lexicalTextContent=Rt,c.__lexicalFirstTextKey=Jt,void(Rt=i+Rt)}}if(1===o&&1===s){const t=e.__first,i=n.__first;if(t===i)ye(t,l);else{const e=Se(t),n=de(i,null);try{e.parentNode===l?l.replaceChild(n,e):r.insertChild(n)}catch(r){if(\"object\"==typeof r&&null!=r){const o=`${r.toString()} Parent: ${l.tagName}, new child: {tag: ${n.tagName} key: ${i}}, old child: {tag: ${e.tagName}, key: ${t}}.`;throw new Error(o)}throw r}oe(t,null)}const o=Qt.get(i);Gr(o)&&null===Wt&&(Wt=o.getFormat(),$t=o.getStyle(),Jt=o.__key)}else{const i=Yl(e,Gt),c=Yl(n,Qt);if(i.length!==o&&t(227),c.length!==s&&t(228),0===o)0!==s&&he(c,n,0,s-1,r);else if(0===s){if(0!==o){const t=null==r.after&&null==r.before&&null==r.element.__lexicalLineBreak;se(i,0,o-1,t?null:l),t&&(l.textContent=\"\")}}else!function(t,e,n,r,i,o){const s=r-1,l=i-1;let c,a,u=o.getFirstChild(),f=0,d=0;for(;f<=s&&d<=l;){const t=e[f],r=n[d],i=jt();if(t===r)u=xe(ye(r,o.element)),f++,d++;else{if(void 0===a&&(a=Ce(n,d)),void 0===c)c=Ce(e,f);else if(!c.has(t)){f++,Ut(i);continue}if(!a.has(t)){u=xe(Se(t)),oe(t,o.element),f++,c.delete(t),Ut(i);continue}if(c.has(r)){const t=Xs(Kt,r);t!==u&&o.withBefore(u??o.before).insertChild(t),u=xe(ye(r,o.element)),f++,d++}else de(r,o.withBefore(u??o.before)),d++}const s=Qt.get(r);null!==s&&Gr(s)?null===Wt&&(Wt=s.getFormat(),$t=s.getStyle(),Jt=s.__key):_o(s)&&d<=l&&!s.isInline()&&(Rt+=D),Ut(i)}const h=f>s,g=d>l;if(h&&!g){const e=n[l+1],r=void 0===e?null:Kt.getElementByKey(e);he(n,t,d,l,o.withBefore(r??o.before))}else g&&!h&&se(e,f,s,o.element)}(n,i,c,o,s,r)}c.__lexicalTextContent=Rt,c.__lexicalFirstTextKey=Jt,Rt=i+Rt}(e,n,Al(n,r,Kt)),cl(n)||(i=n,null==Wt||Wt===i.__textFormat||ie||i.setTextFormat(Wt),function(t){null==$t||$t===t.__textStyle||ie||t.setTextStyle($t)}(n))}function pe(t,e,n){const r=e.__lexicalFirstTextKey;if(null!=r){const e=t.__key;let i=r;for(;null!==i;){const t=Qt.get(i);if(void 0===t){i=null;break}if(t.__parent===e)break;i=t.__parent}if(null!==i&&!n.has(i)){const t=Qt.get(r);if(Gr(t))return Wt=t.getFormat(),void($t=t.getStyle())}}e.__lexicalFirstTextKey=Jt}function ye(e,n){const r=Gt.get(e);let i=Qt.get(e);void 0!==r&&void 0!==i||t(61);const o=re||qt.has(e)||Yt.has(e),s=Xs(Kt,e);if(r===i&&!o){let e;if(_o(r)){const n=s.__lexicalTextContent;\"string\"!=typeof n&&t(355,r.getType()),e=n,Vt(s)}else e=r.getTextContent();return Rt+=e,s}if(r!==i&&o&&Us(ee,Bt,Ht,i,\"updated\"),ne.$updateDOM(i,r,s,Kt)){const r=de(e,null);return null===n&&t(62),n.replaceChild(r,s),oe(e,null),r}if(_o(r)){_o(i)||t(334,e);const n=i.__indent;(re||n!==r.__indent)&&ae(s,n);const l=i.__format;if((re||l!==r.__format)&&ue(s,l),o)_e(r,i,s),Co(i)||i.isInline()||ge(0,i,s);else{const e=s.__lexicalTextContent;\"string\"!=typeof e&&t(356,r.getType()),Rt+=e,Vt(s)}if((re||i.__dir!==r.__dir||i.__parent!==r.__parent)&&(fe(s,i),Co(i)&&!re))for(const t of i.getChildren())if(_o(t)){fe(Xs(Kt,t.getKey()),t)}}else{const t=i.getTextContent();if(mo(i)){const t=i.decorate(Kt,zt);null!==t&&me(e,t)}Rt+=t}if(!ie&&Co(i)){const t=i.getLatest();if(t.__cachedText!==Rt){const e=t.getWritable();e.__cachedText=Rt,i=e}}return ne.$decorateDOM(i,r,s,Kt),It(i),s}function me(t,e){let n=Kt._pendingDecorators;const r=Kt._decorators;if(null===n){if(r[t]===e)return;n=Ts(Kt)}n[t]=e}function xe(t){let e=t.nextSibling;return null!==e&&e===Kt._blockCursorElement&&(e=e.nextSibling),e}function Ce(t,e){const n=new Set;for(let r=e;r<t.length;r++)n.add(t[r]);return n}function ve(t,e,n,r,i,o){Rt=\"\",Wt=null,$t=null,Jt=null,re=2===r,Kt=n,zt=n._config,ne=n._config.dom||Jo,Bt=n._nodes,Ht=Kt._listeners.mutation,Yt=i,qt=o,Gt=t._nodeMap,Xt=t,Qt=e._nodeMap,ie=e._readOnly,Zt=et(n._keyToDOMMap),te=function(){const t=new Map,e=e=>{for(const n of e){const e=Qt.get(n);if(void 0===e)continue;const r=e.__parent;if(null===r)continue;let i=t.get(r);void 0===i&&(i=new Set,t.set(r,i)),i.add(n)}};return e(Yt.keys()),e(qt),t}();const s=new Map;return ee=s,ye(\"root\",null),Kt=void 0,Bt=void 0,Yt=void 0,qt=void 0,Gt=void 0,Xt=void 0,Qt=void 0,zt=void 0,Zt=void 0,te=void 0,ee=void 0,ne=Jo,s}function Se(e){const n=Zt.get(e);return void 0===n&&t(75,e),n}function ke(t){return{type:t}}const Te=ke(\"SELECTION_CHANGE_COMMAND\"),be=ke(\"SELECTION_INSERT_CLIPBOARD_NODES_COMMAND\"),Ne=ke(\"CLICK_COMMAND\"),we=ke(\"BEFORE_INPUT_COMMAND\"),Ee=ke(\"INPUT_COMMAND\"),Oe=ke(\"COMPOSITION_START_COMMAND\"),Me=ke(\"COMPOSITION_END_COMMAND\"),Ae=ke(\"DELETE_CHARACTER_COMMAND\"),De=ke(\"INSERT_LINE_BREAK_COMMAND\"),Pe=ke(\"INSERT_PARAGRAPH_COMMAND\"),Fe=ke(\"CONTROLLED_TEXT_INSERTION_COMMAND\"),Ie=ke(\"PASTE_COMMAND\"),Le=ke(\"REMOVE_TEXT_COMMAND\"),ze=ke(\"DELETE_WORD_COMMAND\"),Ke=ke(\"DELETE_LINE_COMMAND\"),Be=ke(\"FORMAT_TEXT_COMMAND\"),Re=ke(\"UNDO_COMMAND\"),We=ke(\"REDO_COMMAND\"),$e=ke(\"KEYDOWN_COMMAND\"),Je=ke(\"KEY_ARROW_RIGHT_COMMAND\"),je=ke(\"MOVE_TO_END\"),Ue=ke(\"KEY_ARROW_LEFT_COMMAND\"),Ve=ke(\"MOVE_TO_START\"),He=ke(\"KEY_ARROW_UP_COMMAND\"),Ye=ke(\"KEY_ARROW_DOWN_COMMAND\"),qe=ke(\"KEY_ENTER_COMMAND\"),Ge=ke(\"KEY_SPACE_COMMAND\"),Xe=ke(\"KEY_BACKSPACE_COMMAND\"),Qe=ke(\"KEY_ESCAPE_COMMAND\"),Ze=ke(\"KEY_DELETE_COMMAND\"),tn=ke(\"KEY_TAB_COMMAND\"),en=ke(\"INSERT_TAB_COMMAND\"),nn=ke(\"INDENT_CONTENT_COMMAND\"),rn=ke(\"OUTDENT_CONTENT_COMMAND\"),on=ke(\"DROP_COMMAND\"),sn=ke(\"FORMAT_ELEMENT_COMMAND\"),ln=ke(\"DRAGSTART_COMMAND\"),cn=ke(\"DRAGOVER_COMMAND\"),an=ke(\"DRAGEND_COMMAND\"),un=ke(\"COPY_COMMAND\"),fn=ke(\"CUT_COMMAND\"),dn=ke(\"SELECT_ALL_COMMAND\"),hn=ke(\"CLEAR_EDITOR_COMMAND\"),gn=ke(\"CLEAR_HISTORY_COMMAND\"),_n=ke(\"CAN_REDO_COMMAND\"),pn=ke(\"CAN_UNDO_COMMAND\"),yn=ke(\"FOCUS_COMMAND\"),mn=ke(\"BLUR_COMMAND\"),xn=ke(\"KEY_MODIFIER_COMMAND\"),Cn=Object.freeze({}),vn=[[\"keydown\",function(t,e){Sn=t.timeStamp,kn=t.key,\"Backspace\"!==t.key&&Un();if(e.isComposing())return;Gs(e,$e,t)}],[\"pointerdown\",function(t,e){const n=t.target,r=t.pointerType;Sl(n)&&\"touch\"!==r&&\"pen\"!==r&&0===t.button&&ho(e,()=>{es(n)||(An=!0)})}],[\"compositionstart\",function(t,e){Gs(e,Oe,t)}],[\"compositionend\",function(t,e){o?Pn=!0:l||!a&&!d?Gs(e,Me,t):(Fn=!0,In=t.data)}],[\"input\",function(t,e){t.stopPropagation(),Un(),ho(e,()=>{e.dispatchCommand(Ee,t)},{event:t}),bn=null}],[\"click\",function(t,e){ho(e,()=>{const n=Ti(),r=_l(ol(e)),i=bi();if(r)if(si(n)){const t=n.anchor,e=t.getNode();\"element\"===t.type&&0===t.offset&&n.isCollapsed()&&!Co(e)&&1===Ns().getChildrenSize()&&e.getTopLevelElementOrThrow().isEmpty()&&null!==i&&n.is(i)&&(r.removeAllRanges(),n.dirty=!0)}else if(\"touch\"===t.pointerType||\"pen\"===t.pointerType){const n=r.anchorNode;if(vl(n)||us(n)){Es(ki(i,r,e,t))}}Gs(e,Ne,t)})}],[\"cut\",Cn],[\"copy\",Cn],[\"dragstart\",Cn],[\"dragover\",Cn],[\"dragend\",Cn],[\"paste\",Cn],[\"focus\",Cn],[\"blur\",Cn],[\"drop\",Cn]];s&&vn.push([\"beforeinput\",(t,e)=>function(t,e){const n=t.inputType;if(\"deleteCompositionText\"===n||o&&qs(e))return;if(\"insertCompositionText\"===n)return;Gs(e,we,t)}(t,e)]);let Sn=0,kn=null,Tn=0,bn=null,Nn=!1,wn=null;const En=new WeakMap,On=new WeakMap;let Mn=!1,An=!1,Dn=!1,Pn=!1,Fn=!1,In=\"\",Ln=null,zn=[0,\"\",0,\"root\",0];function Kn(t,e,n,r,i){const o=t.anchor,l=t.focus,c=o.getNode(),a=Gi(),u=_l(ol(a)),f=null!==u?u.anchorNode:null,d=o.key,h=a.getElementByKey(d),g=n.length;return d!==l.key||!Gr(c)||(!i&&(!s||Tn<r+50)||c.isDirty()&&g<2||Ms(n))&&o.offset!==l.offset&&!c.isComposing()||as(c)||c.isDirty()&&g>1||(i||!s)&&null!==h&&!c.isComposing()&&f!==Pl(c,h,a)||null!==u&&null!==e&&(!e.collapsed||e.startContainer!==u.anchorNode||e.startOffset!==u.anchorOffset)||!c.isComposing()&&(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=cs(e);return 0===n?!e.canInsertTextBefore()||!r.canInsertTextBefore()&&!e.isComposing()||i||function(t){const e=t.getPreviousSibling();return(Gr(e)||_o(e)&&e.isInline())&&!e.canInsertTextAfter()}(e):n===e.getTextContentSize()&&(!e.canInsertTextAfter()||!r.canInsertTextAfter()&&!e.isComposing()||i)}(t,c)}function Bn(t,e){return us(t)&&null!==t.nodeValue&&0!==e&&e!==t.nodeValue.length}function Rn(e,n,r){const{anchorNode:i,anchorOffset:o,focusNode:s,focusOffset:l}=e;Mn&&(Mn=!1,Bn(i,o)&&Bn(s,l)&&!Ln)||ho(n,()=>{if(!r)return void Es(null);if(!rs(n,i,s))return;let c=Ti();if(Ln&&si(c)&&c.isCollapsed()){const t=c.anchor,e=Ln.anchor;(t.key===e.key&&t.offset===e.offset+1||1===t.offset&&e.getNode().is(t.getNode().getPreviousSibling()))&&(c=Ln.clone(),Es(c))}if(Ln=null,si(c)){const r=c.anchor,i=r.getNode();if(c.isCollapsed()){\"Range\"===e.type&&e.anchorNode===e.focusNode&&(c.dirty=!0);const o=ol(n).event,s=o?o.timeStamp:performance.now(),[l,a,u,f,d]=zn,h=Ns(),g=!1===n.isComposing()&&\"\"===h.getTextContent();if(s<d+200&&r.offset===u&&r.key===f)Wn(c,l,a);else if(\"text\"===r.type)Gr(i)||t(141),$n(c,i);else if(\"element\"===r.type&&!g){_o(i)||t(259);const e=r.getNode();e.isEmpty()?function(t,e){const n=e.getTextFormat(),r=e.getTextStyle();Wn(t,n,r)}(c,e):Wn(c,c.format,\"\")}}else{const t=r.key,e=c.focus.key,n=c.getNodes(),i=n.length,s=c.isBackward(),a=s?l:o,u=s?o:l,f=s?e:t,d=s?t:e;let h=2047,g=!1;for(let t=0;t<i;t++){const e=n[t],r=e.getTextContentSize();if(Gr(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}}Gs(n,Te,void 0)})}function Wn(t,e,n){t.format===e&&t.style===n||(t.format=e,t.style=n,t.dirty=!0)}function $n(t,e){Wn(t,e.getFormat(),e.getStyle())}function Jn(t){if(!t.getTargetRanges)return null;const e=t.getTargetRanges();return 0===e.length?null:e[0]}function jn(t){if(null==t||t.length<=1||null==kn)return;const e=1===kn.length?kn:\"Enter\"===kn?\"\\n\":\"Tab\"===kn?\"\\t\":null;if(!e)return;const n=Ti();if(!si(n)||!n.isCollapsed())return;const r=n.anchor.getNode();if(!Gr(r))return;const{offset:i}=n.anchor;if(r.getTextContentSize()===i){const t=r.getNextSibling();if(\"\\n\"===e){if(Dr(t))t.selectEnd();else if(!t){const t=Hl(r,mi),e=t&&t.getNextSibling();_o(e)&&e.selectStart()}}else\"\\t\"===e?ti(t)&&t.selectEnd():Gr(t)&&t.getTextContent()[0]===e&&t.select(1,1)}else r.getTextContent()[i]===e&&r.select(i+1,i+1)}function Un(){Nn=!1,null!==wn&&(clearTimeout(wn),wn=null)}function Vn(){Un(),Nn=!0,wn=setTimeout(Un,0)}function Hn(e){const n=e.inputType,r=Jn(e),i=Gi(),o=Ti();if(\"insertText\"===n&&e.data&&Nn){if(Un(),e.preventDefault(),si(o)&&!o.isCollapsed()){const t=o.isBackward()?o.anchor:o.focus;o.anchor.set(t.key,t.offset,t.type),o.focus.set(t.key,t.offset,t.type)}return!0}if(\"deleteContentBackward\"===n){if(null===o){const t=bi();if(!si(t))return!0;Es(t.clone())}if(si(o)){const n=o.anchor.key===o.focus.key;if(s=e.timeStamp,\"MediaLast\"===kn&&s<Sn+30&&i.isComposing()&&n){if(ms(null),Sn=0,setTimeout(()=>{ho(i,()=>{ms(null)})},30),si(o)){const e=o.anchor.getNode();e.markDirty(),Gr(e)||t(142),$n(o,e)}}else{if(ms(null),l&&null!==r&&!r.collapsed&&(o.applyDOMRange(r),!o.isCollapsed()))return e.preventDefault(),o.removeText(),!0;e.preventDefault();const t=o.anchor.getNode(),s=t.getTextContent(),c=t.canInsertTextAfter(),a=0===o.anchor.offset&&o.focus.offset===s.length;let u=f&&n&&!a&&c;if(u&&o.isCollapsed()&&(u=!mo(Ys(o.anchor,!0))),!u){Gs(i,Ae,!0);const t=Ti();f&&si(t)&&t.isCollapsed()&&(Ln=t,setTimeout(()=>Ln=null))}}return!0}}var s;if(!si(o))return!0;const c=e.data;null!==bn&&Fs(!1,i,bn),o.dirty&&null===bn||!o.isCollapsed()||Co(o.anchor.getNode())||null===r||o.applyDOMRange(r),bn=null;const a=o.anchor,u=o.focus,d=a.getNode(),h=u.getNode();if(\"insertText\"===n||\"insertTranspose\"===n){if(\"\\n\"===c)e.preventDefault(),Gs(i,De,!1);else if(c===D)e.preventDefault(),Gs(i,Pe,void 0);else if(null==c&&e.dataTransfer){const t=e.dataTransfer.getData(\"text/plain\");e.preventDefault(),o.insertRawText(t)}else null!=c&&Kn(o,r,c,e.timeStamp,!0)?(e.preventDefault(),Gs(i,Fe,c),jn(c)):bn=c;return Tn=e.timeStamp,!0}switch(e.preventDefault(),n){case\"insertFromYank\":case\"insertFromDrop\":case\"insertReplacementText\":Gs(i,Fe,e);jn((e.dataTransfer?e.dataTransfer.getData(\"text/plain\"):null)??e.data);break;case\"insertFromComposition\":ms(null),Gs(i,Fe,e);break;case\"insertLineBreak\":ms(null),Gs(i,De,!1);break;case\"insertParagraph\":ms(null),Dn&&!l?(Dn=!1,Gs(i,De,!1)):Gs(i,Pe,void 0);break;case\"insertFromPaste\":case\"insertFromPasteAsQuotation\":Gs(i,Ie,e);break;case\"deleteByComposition\":(function(t,e){return t!==e||_o(t)||_o(e)||!cs(t)||!cs(e)})(d,h)&&Gs(i,Le,e);break;case\"deleteByDrag\":el(vr),Gs(i,Le,e);break;case\"deleteByCut\":Gs(i,Le,e);break;case\"deleteContent\":Gs(i,Ae,!1);break;case\"deleteWordBackward\":Gs(i,ze,!0);break;case\"deleteWordForward\":Gs(i,ze,!1);break;case\"deleteHardLineBackward\":case\"deleteSoftLineBackward\":Gs(i,Ke,!0);break;case\"deleteContentForward\":case\"deleteHardLineForward\":case\"deleteSoftLineForward\":Gs(i,Ke,!1);break;case\"formatStrikeThrough\":Gs(i,Be,\"strikethrough\");break;case\"formatBold\":Gs(i,Be,\"bold\");break;case\"formatItalic\":Gs(i,Be,\"italic\");break;case\"formatUnderline\":Gs(i,Be,\"underline\");break;case\"historyUndo\":Gs(i,Re,void 0);break;case\"historyRedo\":Gs(i,We,void 0)}return!0}function Yn(t){if(vl(t.target)&&es(t.target))return!0;const e=Gi(),n=Ti(),r=t.data,i=Jn(t);if(null!=r&&si(n)&&Kn(n,i,r,t.timeStamp,!1)){Pn&&(Xn(e,r),Pn=!1);const i=n.anchor.getNode(),l=_l(ol(e));if(null===l)return!0;const c=n.isBackward(),a=c?n.anchor.offset:n.focus.offset,u=c?n.focus.offset:n.anchor.offset;s&&!n.isCollapsed()&&Gr(i)&&null!==l.anchorNode&&i.getTextContent().slice(0,a)+r+i.getTextContent().slice(a+u)===Ps(l.anchorNode)||Gs(e,Fe,r);const d=r.length;o&&d>1&&\"insertCompositionText\"===t.inputType&&!e.isComposing()&&(n.anchor.offset-=d,n._cachedNodes=null,n._cachedIsBackward=null),f&&e.isComposing()&&(Sn=0,ms(null))}else{Fs(!1,e,null!==r?r:void 0),Pn&&(Xn(e,r||void 0),Pn=!1)}return function(){Hi();const t=Gi();dt(t)}(),!0}function qn(t){const e=Gi(),n=Ti();if(si(n)&&!e.isComposing()){const r=n.anchor,i=n.anchor.getNode();ms(r.key),el(Sr),(t.timeStamp<Sn+30||\"element\"===r.type||!n.isCollapsed()||i.getFormat()!==n.format||Gr(i)&&i.getStyle()!==n.style)&&Gs(e,Fe,P)}return!0}function Gn(t){return Xn(Gi(),t.data),el(kr),!0}function Xn(t,e){const n=t._compositionKey;if(ms(null),null!==n&&null!=e){if(\"\"===e){const e=Cs(n),r=t.getElementByKey(n),i=null!==r&&Gr(e)?Pl(e,r,t):null;if(null!==i&&null!==i.nodeValue&&Gr(e)){const n=_l(ol(t));let r=null,o=null;null!==n&&n.anchorNode===i&&(r=n.anchorOffset,o=n.focusOffset),Is(e,i.nodeValue,r,o,!0)}return}if(\"\\n\"===e[e.length-1]){const e=Ti();if(si(e)||ci(e)){if(si(e)){const t=e.focus;e.anchor.set(t.key,t.offset,t.type)}return void Gs(t,qe,null)}}}Fs(!0,t,e)}function Qn(t){const e=Gi();if(null==t.key)return!0;if(Fn){if($s(t))return ho(e,()=>{Xn(e,In)}),Fn=!1,In=\"\",!0;Fn=!1,In=\"\"}if(function(t){return Bs(t,\"ArrowRight\",{shiftKey:\"any\"})}(t))Gs(e,Je,t);else if(function(t){return Bs(t,\"ArrowRight\",{...Rs,shiftKey:\"any\"})}(t))Gs(e,je,t);else if(function(t){return Bs(t,\"ArrowLeft\",{shiftKey:\"any\"})}(t))Gs(e,Ue,t);else if(function(t){return Bs(t,\"ArrowLeft\",{...Rs,shiftKey:\"any\"})}(t))Gs(e,Ve,t);else if(function(t){return Bs(t,\"ArrowUp\",{altKey:\"any\",shiftKey:\"any\"})}(t))Gs(e,He,t);else if(function(t){return Bs(t,\"ArrowDown\",{altKey:\"any\",shiftKey:\"any\"})}(t))Gs(e,Ye,t);else if(function(t){return Bs(t,\"Enter\",{altKey:\"any\",ctrlKey:\"any\",metaKey:\"any\",shiftKey:!0})}(t))Dn=!0,Gs(e,qe,t);else if(function(t){return\" \"===t.key}(t))Gs(e,Ge,t);else if(function(t){return i&&Bs(t,\"o\",{ctrlKey:!0})}(t))t.preventDefault(),Dn=!0,Gs(e,De,!0);else if(function(t){return Bs(t,\"Enter\",{altKey:\"any\",ctrlKey:\"any\",metaKey:\"any\"})}(t))Dn=!1,Gs(e,qe,t);else if(function(t){return Bs(t,\"Backspace\",{shiftKey:\"any\"})||i&&Bs(t,\"h\",{ctrlKey:!0})}(t))$s(t)?Gs(e,Xe,t)&&Vn():(t.preventDefault(),Gs(e,Ae,!0));else if(function(t){return\"Escape\"===t.key}(t))Gs(e,Qe,t);else if(function(t){return Bs(t,\"Delete\",{})||i&&Bs(t,\"d\",{ctrlKey:!0})}(t))!function(t){return\"Delete\"===t.key}(t)?(t.preventDefault(),Gs(e,Ae,!1)):Gs(e,Ze,t);else if(function(t){return Bs(t,\"Backspace\",Ws)}(t))t.preventDefault(),Gs(e,ze,!0);else if(function(t){return Bs(t,\"Delete\",Ws)}(t))t.preventDefault(),Gs(e,ze,!1);else if(function(t){return i&&Bs(t,\"Backspace\",{metaKey:!0})}(t))t.preventDefault(),Gs(e,Ke,!0);else if(function(t){return i&&(Bs(t,\"Delete\",{metaKey:!0})||Bs(t,\"k\",{ctrlKey:!0}))}(t))t.preventDefault(),Gs(e,Ke,!1);else if(function(t){return Bs(t,\"b\",Rs)}(t))t.preventDefault(),Gs(e,Be,\"bold\");else if(function(t){return Bs(t,\"u\",Rs)}(t))t.preventDefault(),Gs(e,Be,\"underline\");else if(function(t){return Bs(t,\"i\",Rs)}(t))t.preventDefault(),Gs(e,Be,\"italic\");else if(function(t){return Bs(t,\"Tab\",{shiftKey:\"any\"})}(t))Gs(e,tn,t);else if(function(t){return Bs(t,\"z\",Rs)}(t))t.preventDefault(),Gs(e,Re,void 0);else if(function(t){if(i)return Bs(t,\"z\",{metaKey:!0,shiftKey:!0});return Bs(t,\"y\",{ctrlKey:!0})||Bs(t,\"z\",{ctrlKey:!0,shiftKey:!0})}(t))t.preventDefault(),Gs(e,We,void 0);else{const n=e._editorState._selection;!function(t){return Bs(t,\"a\",Rs)}(t)?null===n||si(n)||(!function(t){return Bs(t,\"c\",Rs)}(t)?function(t){return Bs(t,\"x\",Rs)}(t)&&(t.preventDefault(),Gs(e,fn,t)):(t.preventDefault(),Gs(e,un,t))):(t.preventDefault(),Gs(e,dn,t)&&Vn())}return function(t){return t.ctrlKey||t.shiftKey||t.altKey||t.metaKey}(t)&&e.dispatchCommand(xn,t),!0}function Zn(t){let e=t.__lexicalEventHandles;return void 0===e&&(e=[],t.__lexicalEventHandles=e),e}const tr=new Map;function er(t){const e=pl(t.target);if(null===e)return;const n=os(e.anchorNode);if(null===n)return;An&&(An=!1,ho(n,()=>{const r=bi(),i=e.anchorNode;if(vl(i)||us(i)){Es(ki(r,e,n,t))}}));const r=As(n),i=r[r.length-1],o=i._key,s=tr.get(o),l=s||i;l!==n&&Rn(e,l,!1),Rn(e,n,!0),n!==i?tr.set(o,n):s&&tr.delete(o)}function nr(t){t._lexicalHandled=!0}function rr(t){return!0===t._lexicalHandled}const ir=()=>{};function or(e){const n=En.get(e);if(void 0===n)return void ir();const r=On.get(n);if(void 0===r)return void ir();const i=r-1;i>=0||t(164),En.delete(e),On.set(n,i),0===i&&n.removeEventListener(\"selectionchange\",er);const o=ss(e);is(o)?(!function(t){if(null!==t._parentEditor){const e=As(t),n=e[e.length-1]._key;tr.get(n)===t&&tr.delete(n)}else tr.delete(t._key)}(o),e.__lexicalEditor=null):o&&t(198);const s=Zn(e);for(let t=0;t<s.length;t++)s[t]();e.__lexicalEventHandles=[]}function sr(t,e,n){Hi();const r=t.__key,i=t.getParent();if(null===i)return;const o=function(t){const e=Ti();if(!si(e)||!_o(t))return e;const{anchor:n,focus:r}=e,i=n.getNode(),o=r.getNode();rl(i,t)&&n.set(t.__key,0,\"element\");rl(o,t)&&r.set(t.__key,0,\"element\");return e}(t);let s=!1;if(si(o)&&e){const e=o.anchor,n=o.focus;e.key===r&&(Ei(e,t,i,t.getPreviousSibling(),t.getNextSibling()),s=!0),n.key===r&&(Ei(n,t,i,t.getPreviousSibling(),t.getNextSibling()),s=!0)}else ci(o)&&e&&t.isSelected()&&t.selectPrevious();if(si(o)&&e&&!s){const e=t.getIndexWithinParent();ps(t),Ni(o,i,e,-1)}else ps(t);n||cl(i)||i.canBeEmpty()||!i.isEmpty()||sr(i,e),e&&o&&Co(i)&&i.isEmpty()&&i.selectEnd()}function lr(t){return t}const cr=Symbol.for(\"ephemeral\");function ar(t){return t[cr]||!1}const ur={configurable:!0,enumerable:!1,value:void 0,writable:!0};class fr{__type;__key;__parent;__prev;__next;__state;[Pt];static getType(){const{ownNodeType:e}=Ul(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))}resetOnCopyNodeFrom(t){this.__state&&(this.__state=this.__state.getWritable(this).resetOnCopyNode())}static importDOM;constructor(t){this.__type=this.constructor.getType(),this.__parent=null,this.__prev=null,this.__next=null,Object.defineProperty(this,\"__state\",ur),Object.defineProperty(this,Pt,ur),_s(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=Cs(t);if(null===e)break;t=e.__parent}return!1}isSelected(t){const e=t||Ti();if(null==e)return!1;const n=e.getNodes().some(t=>t.__key===this.__key);if(Gr(this))return n;if(si(e)&&\"element\"===e.anchor.type&&\"element\"===e.focus.type){if(e.isCollapsed())return!1;const t=this.getParent();if(mo(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:Cs(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(cl(n))return _o(e)||e===this&&mo(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:Cs(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:Cs(t)}getNextSiblings(){const t=[];let e=this.getNextSibling();for(;null!==e;)t.push(e),e=e.getNextSibling();return t}getCommonAncestor(t){const e=_o(this)?this:this.getParent(),n=_o(t)?t:t.getParent(),r=e&&n?Ec(e,n):null;return r?r.commonAncestor:null}is(t){return null!=t&&this.__key===t.__key}isBefore(e){const n=Ec(this,e);return null!==n&&(\"descendant\"===n.type||(\"branch\"===n.type?-1===bc(n):(\"same\"!==n.type&&\"ancestor\"!==n.type&&t(279),!1)))}isParentOf(t){const e=Ec(this,t);return null!==e&&\"ancestor\"===e.type}getNodesBetween(e){const n=this.isBefore(e),r=[],i=new Set;let o=this;for(;null!==o;){const s=o.__key;if(i.has(s)||(i.add(s),r.push(o)),o===e)break;const l=_o(o)?n?o.getFirstChild():o.getLastChild():null;if(null!==l){o=l;continue}const c=n?o.getNextSibling():o.getPreviousSibling();if(null!==c){o=c;continue}const a=o.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);o=u}return n||r.reverse(),r}isDirty(){const t=Gi()._dirtyLeaves;return null!==t&&t.has(this.__key)}getLatest(){if(ar(this))return this;const e=Cs(this.__key);return null===e&&t(113),e}getWritable(){if(ar(this))return this;Hi();const t=qi(),e=Gi(),n=t._nodeMap,r=this.__key,i=this.getLatest(),o=e._cloneNotNeeded,s=Ti();if(null!==s&&s.setCachedNodes(null),o.has(r))return ys(i),i;const l=zl(i);return o.add(r),ys(l),n.set(r,l),l}getTextContent(){return\"\"}getTextContentSize(){return this.getTextContent().length}createDOM(e,n){t(70)}updateDOM(e,n,r){t(71)}getDOMSlot(t){return new H(t)}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 St(n).flatKeys)t in e&&(void 0!==i&&i!==r||(i={...r}),i[t]=e[t]);return(n.__state||i)&&vt(t).updateFromJSON(i),n}(this,t)}static transform(){return null}remove(t){sr(this,!0,t)}replace(e,n){Hi();let r=Ti();null!==r&&(r=r.clone()),fl(this,e);const i=this.getLatest(),o=this.__key,s=e.__key,l=e.getWritable(),c=this.getParentOrThrow().getWritable(),a=c.__size,u=l.getParent(),f=null!==u?l.getIndexWithinParent():-1;ps(l),null!==u&&si(r)&&Ni(r,u,f,-1);const d=i.getPreviousSibling(),h=i.getNextSibling(),g=i.__prev,_=i.__next,p=i.__parent;if(sr(i,!1,!0),null===d)c.__first=s;else{d.getWritable().__next=s}if(l.__prev=g,null===h)c.__last=s;else{h.getWritable().__prev=s}l.__next=_,l.__parent=p,c.__size=a;let y=0;if(n&&(_o(this)&&_o(l)||t(139),y=l.getChildrenSize(),l.splice(y,0,this.getChildren())),si(r)){Es(r);const t=r.anchor,e=r.focus;t.key===o&&(n&&\"element\"===t.type?t.set(l.__key,y+t.offset,\"element\"):ii(t,l)),e.key===o&&(n&&\"element\"===e.type?e.set(l.__key,y+e.offset,\"element\"):ii(e,l))}return xs()===o&&ms(s),l}insertAfter(t,e=!0){Hi(),fl(this,t);const n=this.getWritable(),r=t.getWritable(),i=r.getParent(),o=Ti();let s=!1,l=!1;if(null!==i){const n=t.getIndexWithinParent();if(si(o)){const t=i.__key,e=o.anchor,r=o.focus;s=\"element\"===e.type&&e.key===t&&e.offset===n+1,l=\"element\"===r.type&&r.key===t&&r.offset===n+1}ps(r),e&&si(o)&&Ni(o,i,n,-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&&si(o)){const t=this.getIndexWithinParent();Ni(o,a,t+1);const e=a.__key;s&&o.anchor.set(e,t+2,\"element\"),l&&o.focus.set(e,t+2,\"element\")}return t}insertBefore(t,e=!0){Hi(),fl(this,t);const n=this.getWritable(),r=t.getWritable(),i=r.__key,o=Ti(),s=r.getParent(),l=null!==s?r.getIndexWithinParent():-1;ps(r),null!==s&&e&&si(o)&&Ni(o,s,l,-1);const c=this.getPreviousSibling(),a=this.getParentOrThrow().getWritable(),u=n.__prev,f=this.getIndexWithinParent();if(null===c)a.__first=i;else{c.getWritable().__next=i}if(a.__size++,n.__prev=i,r.__prev=u,r.__next=n.__key,r.__parent=n.__parent,e&&si(o)){Ni(o,this.getParentOrThrow(),f)}return t}isParentRequired(){return!1}createParentElementNode(){return Oo()}selectStart(){return this.selectPrevious()}selectEnd(){return this.selectNext(0,0)}selectPrevious(t,e){Hi();const n=this.getPreviousSibling(),r=this.getParentOrThrow();if(null===n)return r.select(0,0);if(_o(n))return n.select();if(!Gr(n)){const t=n.getIndexWithinParent()+1;return r.select(t,t)}return n.select(t,e)}selectNext(t,e){Hi();const n=this.getNextSibling(),r=this.getParentOrThrow();if(null===n)return r.select();if(_o(n))return n.select(0,0);if(!Gr(n)){const t=n.getIndexWithinParent();return r.select(t,t)}return n.select(t,e)}markDirty(){this.getWritable()}reconcileObservedMutation(t,e){this.markDirty()}}function dr(t){return t instanceof fr}const hr=\"historic\",gr=\"history-push\",_r=\"history-merge\",pr=\"paste\",yr=\"collaboration\",mr=\"skip-collab\",xr=\"skip-scroll-into-view\",Cr=\"skip-dom-selection\",vr=\"skip-selection-focus\",Sr=\"composition-start\",kr=\"composition-end\",Tr=/\\s*!important\\s*$/i;function br(t){const e={};if(!t)return e;let n=\"\",r=\"\",i=null,o=!1,s=!1,l=!1,c=0;for(let a=0;a<t.length;a++){const u=t[a];if(o)\"*\"===u&&\"/\"===t[a+1]&&(o=!1,a++);else if(s)l?r+=u:n+=u,s=!1;else if(null===i)if(\"/\"!==u||\"*\"!==t[a+1])if('\"'!==u&&\"'\"!==u)if(\"(\"!==u)if(\")\"!==u)if(l||\":\"!==u||0!==c){if(\";\"===u&&0===c){const t=n.trim(),i=r.trim();\"\"!==t&&\"\"!==i&&(e[t]=i),n=\"\",r=\"\",l=!1;continue}l?r+=u:n+=u}else l=!0;else c=Math.max(0,c-1),l?r+=u:n+=u;else c++,l?r+=u:n+=u;else i=u,l?r+=u:n+=u;else o=!0,a++;else l?r+=u:n+=u,\"\\\\\"===u?s=!0:u===i&&(i=null)}const a=n.trim(),u=r.trim();return\"\"!==a&&\"\"!==u&&(e[a]=u),e}function Nr(t,e,n){const r=Tr.test(n)?\"important\":\"\",i=\"\"===r?n:n.replace(Tr,\"\").trim();t.setProperty(e,i,r)}function wr(t,e){for(const n in e){const r=e[n];null==r?t.removeProperty(n):Nr(t,n,r)}}function Er(t,e,n=\"\"){if(e===n)return;const r=br(n),i=br(e);for(const e in i)delete r[e],Nr(t,e,i[e]);for(const e in r)t.removeProperty(e)}class Or extends fr{static getType(){return\"linebreak\"}static clone(t){return new Or(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&&wl(e)){const n=e.firstChild;if(n===t||n.nextSibling===t&&Pr(n)){const n=e.lastChild;if(n===t||n.previousSibling===t&&Pr(n))return!0}}return!1}(t)||function(t){const e=t.parentElement;if(null!==e&&wl(e)){const n=e.firstChild;if(n===t||n.nextSibling===t&&Pr(n))return!1;const r=e.lastChild;if(r===t||r.previousSibling===t&&Pr(r))return!0}return!1}(t)?null:{conversion:Mr,priority:0}}}static importJSON(t){return Ar().updateFromJSON(t)}}function Mr(t){return{node:Ar()}}function Ar(){return ul(new Or)}function Dr(t){return t instanceof Or}function Pr(t){return us(t)&&/^( |\\t|\\r?\\n)+$/.test(t.textContent||\"\")}function Fr(t,e){return 16&e?\"code\":e&k?\"mark\":32&e?\"sub\":64&e?\"sup\":null}function Ir(t,e){return 1&e?\"strong\":2&e?\"em\":\"span\"}function Lr(t,e,n,r,i){const o=r.classList;let s=js(i,\"base\");void 0!==s&&o.add(...s),s=js(i,\"underlineStrikethrough\");let l=!1;const c=8&e&&4&e;void 0!==s&&(8&n&&4&n?(l=!0,c||o.add(...s)):c&&o.remove(...s));for(const t in K){const r=K[t];if(s=js(i,t),void 0!==s)if(n&r){if(l&&(\"underline\"===t||\"strikethrough\"===t)){e&r&&o.remove(...s);continue}(0===(e&r)||c&&\"underline\"===t||\"strikethrough\"===t)&&o.add(...s)}else e&r&&o.remove(...s)}}function zr(t,e,n){const r=n.isComposing(),i=t+(r?A:\"\"),s=Ol(),l=Ml(s).$getDOMSlot(n,e,s),c=l.getFirstChild();if(null===c||c.nodeType!==Node.TEXT_NODE)return void l.insertChild(document.createTextNode(i));const a=c,u=a.nodeValue;if(u!==i)if(r||o){const[t,e,n]=function(t,e){const n=t.length,r=e.length;let i=0,o=0;for(;i<n&&i<r&&t[i]===e[i];)i++;for(;o+i<n&&o+i<r&&t[n-o-1]===e[r-o-1];)o++;return[i,n-i-o,e.slice(i,r-o)]}(u,i);0!==e&&a.deleteData(t,e),a.insertData(t,n)}else a.nodeValue=i}function Kr(t,e,n,r,i,o){zr(i,t,e);const s=o.theme.text;void 0!==s&&Lr(0,0,r,t,s)}function Br(t,e){const n=document.createElement(e);return n.appendChild(t),n}class Rr extends fr{__text;__format;__style;__mode;__detail;static getType(){return\"text\"}static clone(t){return new Rr(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 J[t.__mode]}getStyle(){return this.getLatest().__style}isToken(){return 1===this.getLatest().__mode}isComposing(){return this.__key===xs()}isSegmented(){return 2===this.getLatest().__mode}isDirectionless(){return!!(1&this.getLatest().__detail)}isUnmergeable(){return!!(2&this.getLatest().__detail)}hasFormat(t){const e=K[t];return 0!==(this.getFormat()&e)}isSimpleText(){return\"text\"===this.__type&&0===this.__mode}getTextContent(){return this.getLatest().__text}getFormatFlags(t,e){return hs(this.getLatest().__format,t,e)}canHaveFormat(){return!0}isInline(){return!0}createDOM(t,e){const n=this.__format,r=Fr(0,n),i=Ir(0,n),o=null===r?i:r,s=document.createElement(o);let l=s;this.hasFormat(\"code\")&&s.setAttribute(\"spellcheck\",\"false\"),null!==r&&(l=document.createElement(i),s.appendChild(l));Kr(l,this,0,n,this.__text,t);const c=this.__style;return\"\"!==c&&Er(s.style,c),s}updateDOM(e,n,r){const i=this.__text,o=e.__format,s=this.__format,l=Fr(0,o),c=Fr(0,s),a=Ir(0,o),u=Ir(0,s);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 o=document.createElement(u);return Kr(o,this,0,s,i,r),n.replaceChild(o,e),!1}let f=n;null!==c&&null!==l&&(f=n.firstChild,null==f&&t(49)),zr(i,f,this);const d=r.theme.text;void 0!==d&&o!==s&&Lr(0,o,s,f,d);const h=e.__style,g=this.__style;return h!==g&&Er(n.style,g,h),!1}static importDOM(){return{\"#text\":()=>({conversion:Ur,priority:0}),b:()=>({conversion:$r,priority:0}),code:()=>({conversion:Yr,priority:0}),em:()=>({conversion:Yr,priority:0}),i:()=>({conversion:Yr,priority:0}),mark:()=>({conversion:Yr,priority:0}),s:()=>({conversion:Yr,priority:0}),span:()=>({conversion:Wr,priority:0}),strong:()=>({conversion:Yr,priority:0}),sub:()=>({conversion:Yr,priority:0}),sup:()=>({conversion:Yr,priority:0}),u:()=>({conversion:Yr,priority:0})}}static importJSON(t){return qr().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 vl(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=Br(n,\"b\")),this.hasFormat(\"italic\")&&(n=Br(n,\"i\")),this.hasFormat(\"strikethrough\")&&(n=Br(n,\"s\")),this.hasFormat(\"underline\")&&(n=Br(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?K[t]:t,e}setDetail(t){const e=this.getWritable();return e.__detail=\"string\"==typeof t?B[t]:t,e}setStyle(t){const e=this.getWritable();return e.__style=t,e}toggleFormat(t){const e=hs(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=$[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){Hi();let n=t,r=e;const i=Ti(),o=this.getTextContent(),s=this.__key;if(\"string\"==typeof o){const t=o.length;void 0===n&&(n=t),void 0===r&&(r=t)}else n=0,r=0;if(!si(i))return xi(s,n,s,r,\"text\",\"text\");{const t=xs();t!==i.anchor.key&&t!==i.focus.key||ms(s),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(),o=i.__text,s=n.length;let l=t;l<0&&(l=s+l,l<0&&(l=0));const c=Ti();if(r&&si(c)){const e=t+s;c.setTextNodeRange(i,e,i,e)}const a=o.slice(0,l)+n+o.slice(l+e);return i.__text=a,i}canInsertTextBefore(){return!0}canInsertTextAfter(){return!0}splitText(...t){Hi();const e=this.getLatest(),n=e.getTextContent();if(\"\"===n)return[];const r=e.__key,i=xs(),o=n.length;t.sort((t,e)=>t-e),t.push(o);const s=[],l=t.length;for(let e=0,r=0;e<o&&r<=l;r++){const i=t[r];i>e&&(s.push(n.slice(e,i)),e=i)}const c=s.length;if(1===c)return[e];const a=s[0],u=e.getParent();let f;const d=e.getFormat(),h=e.getStyle(),g=e.__detail;let _=!1,p=null,y=null;const m=Ti();if(si(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=qr(a),f.__format=d,f.__style=h,f.__detail=g,f.__state=wt(e,f),_=!0):f=e.setTextContent(a);const x=[f];for(let t=1;t<c;t++){const n=qr(s[t]);n.__format=d,n.__style=h,n.__detail=g,n.__state=wt(e,n);const o=n.__key;i===r&&ms(o),x.push(n)}const C=p?p.offset:null,v=y?y.offset:null;let S=0;for(const t of x){if(!p&&!y)break;const e=S+t.getTextContentSize();if(null!==p&&null!==C&&C<=e&&C>=S&&(p.set(t.getKey(),C-S,\"text\"),C<e&&(p=null)),null!==y&&null!==v&&v<=e&&v>=S){y.set(t.getKey(),v-S,\"text\");break}S=e}if(null!==u){!function(t){const e=t.getPreviousSibling(),n=t.getNextSibling();null!==e&&ys(e);null!==n&&ys(n)}(this);const t=u.getWritable(),e=this.getIndexWithinParent();_?(t.splice(e,0,x),this.remove()):t.splice(e,1,x),si(m)&&Ni(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,o=this.__text,s=o.length;xs()===i&&ms(r);const l=Ti();if(si(l)){const t=l.anchor,o=l.focus;null!==t&&t.key===i&&Oi(t,n,r,e,s),null!==o&&o.key===i&&Oi(o,n,r,e,s)}const c=e.__text,a=n?c+o:o+c;this.setTextContent(a);const u=this.getWritable();return e.remove(),u}isTextEntity(){return!1}}function Wr(t){return{forChild:Xr(t.style),node:null}}function $r(t){const e=t,n=\"normal\"===e.style.fontWeight;return{forChild:Xr(e.style,n?void 0:\"bold\"),node:null}}const Jr=new WeakMap;function jr(t){if(!vl(t))return!1;if(\"PRE\"===t.nodeName)return!0;const e=t.style.whiteSpace;return\"string\"==typeof e&&e.startsWith(\"pre\")}function Ur(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=Jr.get(n))&&!jr(n);)r.push(n),n=n.parentNode;const i=void 0===e?n:e;for(let t=0;t<r.length;t++)Jr.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(Ar()):\"\\t\"===n?e.push(Zr()):\"\"!==n&&e.push(qr(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=Vr(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=Vr(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:qr(r)}}function Vr(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,vl(n)){const t=n.style.display;if(\"\"===t&&!bl(n)||\"\"!==t&&!t.startsWith(\"inline\"))return null}let r=n;for(;null!==(r=e?n.firstChild:n.lastChild);)n=r;if(us(n))return n;if(\"BR\"===n.nodeName)return null}}const Hr={code:\"code\",em:\"italic\",i:\"italic\",mark:\"highlight\",s:\"strikethrough\",strong:\"bold\",sub:\"subscript\",sup:\"superscript\",u:\"underline\"};function Yr(t){const e=Hr[t.nodeName.toLowerCase()];return void 0===e?{node:null}:{forChild:Xr(t.style,e),node:null}}function qr(t=\"\"){return ul(new Rr(t))}function Gr(t){return t instanceof Rr}function Xr(t,e){const n=t.fontWeight,r=t.textDecoration.split(\" \"),i=\"700\"===n||\"bold\"===n,o=r.includes(\"line-through\"),s=\"italic\"===t.fontStyle,l=r.includes(\"underline\"),c=t.verticalAlign;return t=>Gr(t)?(i&&!t.hasFormat(\"bold\")&&t.toggleFormat(\"bold\"),o&&!t.hasFormat(\"strikethrough\")&&t.toggleFormat(\"strikethrough\"),s&&!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 Qr extends Rr{static getType(){return\"tab\"}static clone(t){return new Qr(t.__key)}constructor(t){super(\"\\t\",t),this.__detail=2}static importDOM(){return null}createDOM(t){const e=super.createDOM(t),n=js(t.theme,\"tab\");if(void 0!==n){e.classList.add(...n)}return e}static importJSON(t){return Zr().updateFromJSON(t)}setTextContent(t){return\"\\t\"!==t&&\"\"!==t&&e(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 Zr(){return ul(new Qr)}function ti(t){return t instanceof Qr}class ei{key;offset;type;_selection;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 Tc(Kc(Oc(this,\"next\")),Kc(Oc(t,\"next\")))<0}getNode(){const e=Cs(this.key);return null===e&&t(20),e}set(t,e,n,r){const i=this._selection,o=this.key;r&&this.key===t&&this.offset===e&&this.type===n||(this.key=t,this.offset=e,this.type=n,Vi()||(xs()===o&&ms(t),null!==i&&(i.setCachedNodes(null),si(i)&&(i._cachedIsBackward=null),i.dirty=!0)))}}function ni(t,e,n){return new ei(t,e,n)}function ri(t,e){let n=e.__key,r=t.offset,i=\"element\";if(Gr(e)){i=\"text\";const t=e.getTextContentSize();r>t&&(r=t)}else if(!_o(e)){const t=e.getNextSibling();if(Gr(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 ii(t,e){if(_o(e)){const n=e.getLastDescendant();_o(n)||Gr(n)?ri(t,n):ri(t,e)}else ri(t,e)}class oi{_nodes;_cachedNodes;dirty;constructor(t){this._cachedNodes=null,this._nodes=t,this.dirty=!1}getCachedNodes(){return this._cachedNodes}setCachedNodes(t){this._cachedNodes=t}is(t){if(!ci(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 oi(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(Gr(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=Cs(t);null!==e&&n.push(e)}return Vi()||(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((Ti()||bi())===this&&t[0]){const e=uc(t[0],\"next\");Ac(Sc(e,e))}for(const e of t)e.remove()}}function si(t){return t instanceof li}class li{format;style;anchor;focus;_cachedNodes;_cachedIsBackward;dirty;constructor(t,e,n,r){this.anchor=t,this.focus=e,t._selection=this,e._selection=this,this._cachedNodes=null,this._cachedIsBackward=null,this.format=n,this.style=r,this.dirty=!1}getCachedNodes(){return this._cachedNodes}setCachedNodes(t){this._cachedNodes=t}is(t){return!!si(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,o=new Set;for(const n of t)if(sc(n)){const{origin:t}=n;0===e.length?i.add(t):(o.add(t),e.push(t))}else{const{origin:t}=n;_o(t)&&o.has(t)||e.push(t)}r&&e.push(r.caret.origin);if(oc(t.focus)&&_o(t.focus.origin)&&null===t.focus.getNodeAtCaret())for(let n=gc(t.focus.origin,\"previous\");sc(n)&&i.has(n.origin)&&!n.origin.isEmpty()&&n.origin.is(e[e.length-1]);n=pc(n))i.delete(n.origin),e.pop();for(;e.length>1;){const t=e[e.length-1];if(!_o(t)||o.has(t)||t.isEmpty()||i.has(t))break;e.pop()}if(0===e.length&&t.isCollapsed()){const n=Kc(t.anchor),r=Kc(t.anchor.getFlipped()),i=t=>rc(t)?t.origin:t.getNodeAtCaret(),o=i(n)||i(r)||(t.anchor.getNodeAtCaret()?n.origin:r.origin);e.push(o)}return e}(Wc(Pc(this),\"next\"));return Vi()||(this._cachedNodes=e),e}setTextNodeRange(t,e,n,r){return this.anchor.set(t.__key,e,\"text\"),this.focus.set(n.__key,r,\"text\"),this}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,o=r.isBefore(i),[s,l]=ui(this);let c=\"\",a=!0;for(let u=0;u<t.length;u++){const f=t[u];if(_o(f)&&!f.isInline())a||(c+=\"\\n\"),a=!f.isEmpty();else if(a=!1,Gr(f)){let t=f.getTextContent();f===e?f===n?\"element\"===r.type&&\"element\"===i.type&&i.offset!==r.offset||(t=s<l?t.slice(s,l):t.slice(l,s)):t=o?t.slice(s):t.slice(l):f===n&&(t=o?t.slice(0,l):t.slice(0,s)),c+=t}else!mo(f)&&!Dr(f)||f===n&&this.isCollapsed()||(c+=f.getTextContent())}return c}applyDOMRange(t){const e=Gi(),n=e.getEditorState()._selection,r=yi(t.startContainer,t.startOffset,t.endContainer,t.endOffset,e,n);if(null===r)return;const[i,o,s]=r;this.anchor.set(i.key,i.offset,i.type,!0),this.focus.set(o.key,o.offset,o.type,!0),s&&(this.dirty=!0),At(this)}clone(){const t=this.anchor,e=this.focus;return new li(ni(t.key,t.offset,t.type),ni(e.key,e.offset,e.type),this.format,this.style)}toggleFormat(t){this.format=hs(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=K[t];return 0!==(this.format&e)}insertRawText(t){this.insertNodes(Ii(t))}insertText(e){const n=this.anchor,r=this.focus,i=this.format,o=this.style;let s=n,l=r;!this.isCollapsed()&&r.isBefore(n)&&(s=r,l=n),\"element\"===s.type&&function(t,e,n,r){const i=t.getNode(),o=i.getChildAtIndex(t.offset),s=qr();if(s.setFormat(n),s.setStyle(r),Mo(o))o.splice(0,0,[s]);else{const t=Co(i)?Oo().append(s):s;null===o?i.append(t):o.insertBefore(t)}t.is(e)&&e.set(s.__key,0,\"text\"),t.set(s.__key,0,\"text\")}(s,l,i,o),\"element\"===l.type&&Mc(l,Kc(Oc(l,\"next\")));const c=s.offset;let a=l.offset;const u=this.getNodes(),f=u.length;let d=u[0];Gr(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(s.key,a,\"text\")),this.isCollapsed()&&c===h&&(as(d)||!d.canInsertTextAfter()||!g.canInsertTextAfter()&&null===d.getNextSibling())){let t=d.getNextSibling();if(Gr(t)&&t.canInsertTextBefore()&&!as(t)||(t=qr(),t.setFormat(i),t.setStyle(o),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&&(as(d)||!d.canInsertTextBefore()||!g.canInsertTextBefore()&&null===d.getPreviousSibling())){let t=d.getPreviousSibling();if(Gr(t)&&!as(t)||(t=qr(),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=qr(d.getTextContent());t.setFormat(i),d.replace(t),d=t}else if(!this.isCollapsed()&&\"\"!==e){const t=_.getParent();if(!g.canInsertTextBefore()||!g.canInsertTextAfter()||_o(t)&&(!t.canInsertTextBefore()||!t.canInsertTextAfter()))return this.insertText(\"\"),pi(this.anchor,this.focus),void this.insertText(e)}if(1===f){if(cs(d)){const t=qr(e);return t.select(),void d.replace(t)}const t=d.getFormat(),n=d.getStyle();if(c!==a||t===i&&n===o){if(ti(d)){const t=qr(e);return t.setFormat(i),t.setStyle(o),t.select(),void d.replace(t)}}else{if(\"\"!==d.getTextContent()){const t=qr(e);if(t.setFormat(i),t.setStyle(o),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,this._cachedNodes=null,this._cachedIsBackward=null))}d.setFormat(i),d.setStyle(o)}const r=a-c;d=d.spliceText(c,r,e,!0),\"\"===d.getTextContent()?d.remove():\"text\"===this.anchor.type&&(this.format=t,this.style=n,d.isComposing()&&(this.anchor.offset-=e.length,this._cachedNodes=null,this._cachedIsBackward=null))}else{const t=new Set([...d.getParentKeys(),..._.getParentKeys()]),n=_o(d)?d:d.getParentOrThrow();let r=_o(_)?_:_.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(Gr(_)&&!cs(_)&&a!==_.getTextContentSize()){if(_.isSegmented()){const t=qr(_.getTextContent());_.replace(t),_=t}Co(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 o=r.getChildren(),s=new Set(u),g=n.is(r),p=n.isInline()&&null===d.getNextSibling()?n:d;for(let t=o.length-1;t>=0;t--){const e=o[t];if(e.is(d)||_o(e)&&e.isParentOf(d))break;e.isAttached()&&(!s.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(cs(d))if(c===h)d.select();else{const t=qr(e);t.select(),d.replace(t)}else d=d.spliceText(c,h-c,e,!0),\"\"===d.getTextContent()?d.remove():\"text\"===this.anchor.type&&(this.format=d.getFormat(),this.style=d.getStyle(),d.isComposing()&&(this.anchor.offset-=e.length,this._cachedNodes=null,this._cachedIsBackward=null));for(let e=1;e<f;e++){const n=u[e],r=n.__key;t.has(r)||n.remove()}}}removeText(){const t=Ti()===this;Dc(this,zc(Pc(this))),t&&Ti()!==this&&Es(this)}formatText(t,e=null){if(this.isCollapsed())return this.toggleFormat(t),void ms(null);const n=this.getNodes(),r=[];for(const t of n)Gr(t)&&r.push(t);const i=e=>{n.forEach(n=>{if(_o(n)){const r=n.getFormatFlags(t,e);n.setTextFormat(r)}})},o=r.length;if(0===o)return this.toggleFormat(t),ms(null),void i(e);const s=this.anchor,l=this.focus,c=this.isBackward(),a=c?l:s,u=c?s: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 _=o-1;let p=r[_];const y=\"text\"===u.type?u.offset:p.getTextContentSize();if(d.is(p)){if(h===y)return;if(as(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||as(d)||([,d]=d.splitText(h),h=0),d.setFormat(g);const m=p.getFormatFlags(t,g);y>0&&(y===p.getTextContentSize()||as(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=Ti();return si(n)||t(134),n.insertNodes(e)}const n=(this.isBackward()?this.focus:this.anchor).getNode(),r=Hl(n,El),i=e[e.length-1];if(_o(r)&&\"__language\"in r){if(\"__language\"in e[0])this.insertText(e[0].getTextContent());else{const t=zi(this);r.splice(t,0,e),i.selectEnd()}return}if(!e.some(t=>(_o(t)||mo(t))&&!t.isInline())){_o(r)||t(211,n.constructor.name,n.getType());const o=zi(this);return r.splice(o,0,e),void i.selectEnd()}const o=function(t){const e=Oo();let n=null;for(let r=0;r<t.length;r++){const i=t[r],o=Dr(i);if(o||mo(i)&&i.isInline()||_o(i)&&i.isInline()||Gr(i)||i.isParentRequired()){if(null===n&&(n=i.createParentElementNode(),e.append(n),o))continue;null!==n&&n.append(i)}else e.append(i),n=null}return e}(e),s=o.getLastDescendant(),l=o.getChildren(),c=!_o(r)||!r.isEmpty()?this.insertParagraph():null,a=l[l.length-1];let u=l[0];var f;_o(f=u)&&El(f)&&!f.isEmpty()&&_o(r)&&(!r.isEmpty()||r.canMergeWhenEmpty())&&(_o(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){const r=n.getParentOrThrow().getLastChild();let i=n;const o=[n];for(;i!==r;)i.getNextSibling()||t(140),i=i.getNextSibling(),o.push(i);let s=e;for(const t of o)s=s.insertAfter(t)}(r,u));const d=Hl(s,El);c&&_o(d)&&(c.canMergeWhenEmpty()||El(a))&&(d.append(...c.getChildren()),c.remove()),_o(r)&&r.isEmpty()&&r.remove(),s.selectEnd();const h=_o(r)?r.getLastChild():null;Dr(h)&&d!==r&&h.remove()}insertParagraph(){if(\"root\"===this.anchor.key){const t=Oo();return Ns().splice(this.anchor.offset,0,[t]),t.select(),t}const e=zi(this),n=Hl(this.anchor.getNode(),El);_o(n)||t(213);const r=n.getChildAtIndex(e),i=r?[r,...r.getNextSiblings()]:[],o=n.insertNewAfter(this,!1);return o?(o.append(...i),o.selectStart(),o):null}insertLineBreak(t){const e=Ar();if(this.insertNodes([e]),t){const t=e.getParentOrThrow(),n=e.getIndexWithinParent();t.select(n,n)}}extract(){const t=[...this.getNodes()],e=t.length;let n=t[0],r=t[e-1];const[i,o]=ui(this),s=this.isBackward(),[l,c]=s?[this.focus,this.anchor]:[this.anchor,this.focus],[a,u]=s?[o,i]:[i,o];if(0===e)return[];if(1===e){if(Gr(n)&&!this.isCollapsed()){const t=n.splitText(a,u),e=0===a?t[0]:t[1];return e?(l.set(e.getKey(),0,\"text\"),c.set(e.getKey(),e.getTextContentSize(),\"text\"),[e]):[]}return[n]}if(Gr(n)&&(a===n.getTextContentSize()?t.shift():0!==a&&([,n]=n.splitText(a),t[0]=n,l.set(n.getKey(),0,\"text\"))),Gr(r)){const e=r.getTextContent().length;0===u?t.pop():u!==e&&([r]=r.splitText(u),t[t.length-1]=r,c.set(r.getKey(),r.getTextContentSize(),\"text\"))}return t}modify(t,e,n){if(Bi(this,t,e,n))return;const r=\"move\"===t,i=Gi(),o=_l(ol(i));if(!o)return;const s=i._blockCursorElement,l=i._rootElement,c=this.focus.getNode();if(null===l||null===s||!_o(c)||c.isInline()||c.canBeEmpty()||gl(s,i,l),this.dirty){const t=Xs(i,this.anchor.key),e=Xs(i,this.focus.key);let n=t,r=e;if(\"text\"===this.anchor.type){const e=this.anchor.getNode();n=Gr(e)?Pl(e,t,i):null}if(\"text\"===this.focus.type){const t=this.focus.getNode();r=Gr(t)?Pl(t,e,i):null}n&&r&&Mi(o,n,this.anchor.offset,r,this.focus.offset)}if(function(t,e,n,r){t.modify(e,n,r)}(o,t,e?\"backward\":\"forward\",n),o.rangeCount>0){const t=o.getRangeAt(0),n=this.anchor.getNode(),i=Co(n)?n:ll(n);if(this.applyDOMRange(t),this.dirty=!0,!r){const n=this.getNodes(),r=[];let s=!1;for(let t=0;t<n.length;t++){const e=n[t];rl(e,i)?r.push(e):s=!0}if(s&&r.length>0)if(e){const t=r[0];_o(t)?t.selectStart():t.getParentOrThrow().selectStart()}else{const t=r[r.length-1];_o(t)?t.selectEnd():t.getParentOrThrow().selectEnd()}o.anchorNode===t.startContainer&&o.anchorOffset===t.startOffset||function(t){const e=t.focus,n=t.anchor,r=n.key,i=n.offset,o=n.type;n.set(e.key,e.offset,e.type,!0),e.set(r,i,o,!0)}(this)}}\"lineboundary\"===n&&Bi(this,t,e,n,\"decorators\")}forwardDeletion(t,e,n){if(!n&&(\"element\"===t.type&&_o(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(_o(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=Cc(Oc(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(sc(e))if(e.origin.isInline());else{if(e.origin.isShadowRoot()){if(\"merge-block\"===t.type)break;if(_o(r.anchor.origin)&&r.anchor.origin.isEmpty()){const t=Kc(e);Dc(this,Sc(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(oc(e)){if(_o(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(mo(e.origin)){if(e.origin.isIsolated());else if(\"merge-next-block\"===t.type&&(e.origin.isKeyboardSelectable()||!e.origin.isInline())&&_o(r.anchor.origin)&&r.anchor.origin.isEmpty()){r.anchor.origin.remove();const t=vi();t.add(e.origin.getKey()),Es(t)}else e.origin.remove();return}break}}if(\"merge-block\"===t.type){const{caret:e,block:n}=t;return e.origin.isEmpty()&&!n.isEmpty()&&e.origin.getParent()===n.getParent()?void e.origin.remove(!0):(Dc(this,Sc(!e.origin.isEmpty()&&n.isEmpty()?Fc(uc(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&&fi(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,o=r.getTextContentSize();if(r.is(n)||t&&e!==o||!t&&0!==e)return void hi(r,t,e)}else if(null!==n&&n.isSegmented()){const i=e.offset,o=n.getTextContentSize();if(n.is(r)||t&&0!==i||!t&&i!==o)return void hi(n,t,i)}!function(t,e){const n=t.anchor,r=t.focus,i=n.getNode(),o=r.getNode();if(i===o&&\"text\"===n.type&&\"text\"===r.type){const t=n.offset,o=r.offset,s=t<o,l=s?t:o,c=s?o:t,a=c-1;if(l!==a){(function(t){return!(Ms(t)||di(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()&&Co(t.getParent())&&null===t.getPreviousSibling()&&fi(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.isCollapsed()?this.deleteCharacter(t):this.removeText()}isBackward(){const t=this._cachedIsBackward;if(null!==t)return t;const e=this.focus.isBefore(this.anchor);return Vi()||(this._cachedIsBackward=e),e}getStartEndPoints(){return[this.anchor,this.focus]}}function ci(t){return t instanceof oi}function ai(t){const e=t.offset;if(\"text\"===t.type)return e;const n=t.getNode();return e===n.getChildrenSize()?n.getTextContent().length:0}function ui(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]:[ai(n),ai(r)]}function fi(t,e){for(let n=e;n;n=n.getParent()){if(_o(n)){if(n.collapseAtStart(t))return!0;if(cl(n))break}if(n.getPreviousSibling())break}return!1}const di=(()=>{try{const t=new RegExp(\"\\\\p{Emoji}\",\"u\"),e=t.test.bind(t);if(e(\"\\u2764\\ufe0f\")&&e(\"#\\ufe0f\\u20e3\")&&e(\"\\u{1f44d}\"))return e}catch(t){}return()=>!1})();function hi(t,e,n){const r=t,i=r.getTextContent().split(/(?=\\s)/g),o=i.length;let s=0,l=0;for(let t=0;t<o;t++){const r=t===o-1;if(l=s,s+=i[t].length,e&&s===n||s>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 gi(e,n,r,i){let o,s=n,l=!1;if(vl(e)){let c=!1;const a=e.childNodes,u=a.length,f=i._blockCursorElement;s===u&&u>0&&(c=!0,s=u-1),void 0!==Ss(e,i)||e===i.getRootElement()||es(e)||(l=!0);let d=a[s],h=!1;if(d===f)d=a[s+1],h=!0;else if(null!==f){const t=f.parentNode;if(e===t){n>Array.prototype.indexOf.call(t.children,f)&&s--}}if(o=Os(d),Gr(o))s=dc(o,c?\"next\":\"previous\");else{let a=Os(e);if(null===a)return null;if(_o(a)){const l=i.getElementByKey(a.getKey());null===l&&t(214);const u=Al(a,l,i);[a,s]=u.resolveChildIndex(a,l,e,n),_o(a)||t(215),c&&s>=a.getChildrenSize()&&(s=Math.max(0,a.getChildrenSize()-1));let f=a.getChildAtIndex(s);if(_o(f)&&function(t,e,n){const r=t.getParent();return null===n||null===r||!r.canBeEmpty()||r!==n.getNode()}(f,0,r)){const t=c?f.getLastDescendant():f.getFirstDescendant();null===t?a=f:(f=t,a=_o(f)?f:f.getParentOrThrow()),s=0}Gr(f)?(o=f,a=null,s=dc(f,c?\"next\":\"previous\")):f!==a&&c&&!h&&(_o(a)||t(216),s=Math.min(a.getChildrenSize(),s+1))}else{const t=a.getIndexWithinParent(),r=i.getElementByKey(a.getKey());let o=\"after\";if(null!==r&&Os(e)===a){const t=Al(a,r,i);t.element!==r?o=t.resolveLeafPosition(r,e,n):0===n&&mo(a)&&(o=\"before\")}s=\"before\"===o?t:t+1,a=a.getParentOrThrow()}if(_o(a))return[ni(a.__key,s,\"element\"),l]}}else o=Os(e);return Gr(o)?[ni(o.__key,dc(o,s,\"clamp\"),\"text\"),l]:null}function _i(t,e,n){const r=t.offset,i=t.getNode();if(0===r){const r=i.getPreviousSibling(),o=i.getParent();if(e){if((n||!e)&&null===r&&_o(o)&&o.isInline()){const e=o.getPreviousSibling();Gr(e)&&t.set(e.__key,e.getTextContent().length,\"text\")}}else _o(r)&&!n&&r.isInline()?t.set(r.__key,r.getChildrenSize(),\"element\"):Gr(r)&&t.set(r.__key,r.getTextContent().length,\"text\")}else if(r===i.getTextContent().length){const r=i.getNextSibling(),o=i.getParent();if(e&&_o(r)&&r.isInline())t.set(r.__key,0,\"element\");else if((n||e)&&null===r&&_o(o)&&o.isInline()&&!o.canInsertTextAfter()){const e=o.getNextSibling();Gr(e)&&t.set(e.__key,0,\"text\")}}}function pi(t,e,n){if(\"text\"===t.type&&\"text\"===e.type){const n=t.isBefore(e),r=t.is(e);_i(t,n,r),_i(e,!n,r),r&&e.set(t.key,t.offset,t.type)}}function yi(t,e,n,r,i,o){if(null===t||null===n||!rs(i,t,n))return null;const s=gi(t,e,si(o)?o.anchor:null,i);if(null===s)return null;const l=gi(n,r,si(o)?o.focus:null,i);if(null===l)return null;const[c,a]=s,[u,f]=l;if(\"element\"===c.type&&\"element\"===u.type){const e=Os(t),r=Os(n);if(mo(e)&&mo(r))return null}return pi(c,u),[c,u,a||f]}function mi(t){return _o(t)&&!t.isInline()}function xi(t,e,n,r,i,o){const s=qi(),l=new li(ni(t,e,i),ni(n,r,o),0,\"\");return l.dirty=!0,s._selection=l,l}function Ci(){const t=ni(\"root\",0,\"element\"),e=ni(\"root\",0,\"element\");return new li(t,e,0,\"\")}function vi(){return new oi(new Set)}function Si(t,e){return ki(null,t,e,null)}function ki(t,e,n,r){const i=n._window;if(null===i)return null;const o=r||i.event,s=o?o.type:void 0,l=\"selectionchange\"===s,c=!it&&(l||\"beforeinput\"===s||\"compositionstart\"===s||\"compositionend\"===s||\"click\"===s&&o&&3===o.detail||\"drop\"===s||void 0===s);let a,u,f,d;if(si(t)&&!c)return t.clone();if(null===e)return null;if(a=e.anchorNode,u=e.focusNode,f=e.anchorOffset,d=e.focusOffset,(l||void 0===s)&&si(t)&&!rs(n,a,u))return t.clone();const h=yi(a,f,u,d,n,t);if(null===h)return null;const[g,_,p]=h;let y=0,m=\"\";if(si(t)){const e=t.anchor;if(g.key===e.key)y=t.format,m=t.style;else{const t=g.getNode();Gr(t)?(y=t.getFormat(),m=t.getStyle()):_o(t)&&(y=t.getTextFormat(),m=t.getTextStyle())}}const x=new li(g,_,y,m);return p&&(x.dirty=!0),x}function Ti(){return qi()._selection}function bi(){return Gi()._editorState._selection}function Ni(t,e,n,r=1){const i=t.anchor,o=t.focus,s=i.getNode(),l=o.getNode();if(!e.is(s)&&!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\"),o.set(c,n,\"element\"),wi(t)}}else{const s=t.isBackward(),l=s?o:i,a=l.getNode(),u=s?i:o,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\")}}wi(t)}function wi(t){const e=t.anchor,n=e.offset,r=t.focus,i=r.offset,o=e.getNode(),s=r.getNode();if(t.isCollapsed()){if(!_o(o))return;const t=o.getChildrenSize(),i=n>=t,s=i?o.getChildAtIndex(t-1):o.getChildAtIndex(n);if(Gr(s)){let t=0;i&&(t=s.getTextContentSize()),e.set(s.__key,t,\"text\"),r.set(s.__key,t,\"text\")}return}if(_o(o)){const t=o.getChildrenSize(),r=n>=t,i=r?o.getChildAtIndex(t-1):o.getChildAtIndex(n);if(Gr(i)){let t=0;r&&(t=i.getTextContentSize()),e.set(i.__key,t,\"text\")}}if(_o(s)){const t=s.getChildrenSize(),e=i>=t,n=e?s.getChildAtIndex(t-1):s.getChildAtIndex(i);if(Gr(n)){let t=0;e&&(t=n.getTextContentSize()),r.set(n.__key,t,\"text\")}}}function Ei(t,e,n,r,i){let o=null,s=0,l=null;null!==r?(o=r.__key,Gr(r)?(s=r.getTextContentSize(),l=\"text\"):_o(r)&&(s=r.getChildrenSize(),l=\"element\")):null!==i&&(o=i.__key,Gr(i)?l=\"text\":_o(i)&&(l=\"element\")),null!==o&&null!==l?t.set(o,s,l):(s=e.getIndexWithinParent(),-1===s&&(s=n.getChildrenSize()),t.set(n.__key,s,\"element\"))}function Oi(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 Mi(t,e,n,r,i){try{t.setBaseAndExtent(e,n,r,i)}catch(t){}}function Ai(t,e,n){const r=Xs(t,e.getKey());if(_o(e)){const i=Al(e,r,t);return[i.element,n+i.getFirstChildOffset()]}return[r,n]}function Di(t,e,n,r,i,s){const l=document.activeElement;if(i.has(yr)&&l!==s||null!==l&&ns(l))return;if(!si(e))return void(null!==t&&rs(n,r.anchorNode,r.focusNode)&&r.removeAllRanges());const c=e.anchor,a=e.focus,u=c.getNode(),f=a.getNode(),[d,h]=Ai(n,u,c.offset),[g,_]=Ai(n,f,a.offset),p=e.format,y=e.style,m=e.isCollapsed();let x=d,C=g,v=!1;var S,k,T,b,N;if((\"text\"===c.type?(x=Gr(u)?Pl(u,d,n):null,v=u.getFormat()!==p||u.getStyle()!==y):si(t)&&\"text\"===t.anchor.type&&(v=!0),\"text\"===a.type&&(C=Gr(f)?Pl(f,g,n):null),null!==x&&null!==C)&&(m&&(null===t||v||si(t)&&(t.format!==p||t.style!==y))&&(S=p,k=y,T=h,b=c.key,N=performance.now(),zn=[S,k,T,b,N]),\"Range\"===r.type&&m||r.anchorOffset!==h||r.focusOffset!==_||r.anchorNode!==x||r.focusNode!==C||(null!==l&&s.contains(l)||i.has(vr)||s.focus({preventScroll:!0}),\"element\"===c.type))){if(Mi(r,x,h,C,_),!o||!e.isCollapsed()||null===s||i.has(vr)||null!==document.activeElement&&s.contains(document.activeElement)||s.focus({preventScroll:!0}),!i.has(xr)&&e.isCollapsed()&&null!==s&&s===document.activeElement){const t=si(e)&&\"element\"===e.anchor.type?x.childNodes[h]||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=Zs(n),i=il(r);if(null===r||null===i)return;let{top:o,bottom:s}=e,l=0,c=0,a=n;for(;null!==a;){const e=a===r.body;if(e){const e=i.visualViewport;if(e){const t=e.offsetTop;l=t,c=t+e.height}else l=0,c=ol(t).innerHeight;const n=i.getComputedStyle(r.documentElement),o=parseFloat(n.scrollPaddingTop),s=parseFloat(n.scrollPaddingBottom);isFinite(o)&&(l+=o),isFinite(s)&&(c-=s)}else{const t=a.getBoundingClientRect();l=t.top,c=t.bottom}let n=0;if(o<l?n=-(l-o):s>c&&(n=s-c),0!==n)if(e)i.scrollBy(0,n);else{const t=a.scrollTop;a.scrollTop+=n;const e=a.scrollTop-t;o-=e,s-=e}if(e)break;a=Qs(a)}}(n,e,s)}}Mn=!0}}function Pi(t){let e=Ti()||bi();null===e&&(e=Ns().selectEnd()),e.insertNodes(t)}function Fi(t,e){for(const n of t.split(/(\\r?\\n|\\t)/))\"\\n\"===n||\"\\r\\n\"===n?e.linebreak():\"\\t\"===n?e.tab():\"\"!==n&&e.text(n)}function Ii(t){const e=[];return Fi(t,{linebreak:()=>e.push(Ar()),tab:()=>e.push(Zr()),text:t=>e.push(qr(t))}),e}function Li(){const t=Ti();return null===t?\"\":t.getTextContent()}function zi(e){let n=e;e.isCollapsed()||n.removeText();const r=Ti();si(r)&&(n=r),si(n)||t(161);const i=n.anchor;let o=i.getNode(),s=i.offset;for(;!El(o);){const t=o;if([o,s]=Ki(o,s),t.is(o))break}return s}function Ki(t,e){const n=t.getParent();if(!n){const t=Oo();return Ns().append(t),t.select(),[Ns(),0]}if(Gr(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(!_o(t)||0===e)return[n,t.getIndexWithinParent()];const r=t.getChildAtIndex(e);if(r){const n=new li(ni(t.__key,e,\"element\"),ni(t.__key,e,\"element\"),0,\"\"),i=t.insertNewAfter(n);i&&i.append(r,...r.getNextSiblings())}return[n,t.getIndexWithinParent()+1]}function Bi(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 o=Oc(t.focus,n?\"previous\":\"next\"),s=\"lineboundary\"===r,l=\"move\"===e;let c=o,a=\"decorators-and-blocks\"===i;if(!Bc(c)){for(const t of c){a=!1;const{origin:e}=t;if(!mo(e)||e.isIsolated()||(c=t,!s||!e.isInline()))break}if(a)for(const t of Cc(o).iterNodeCarets(\"extend\"===e?\"shadowRoot\":\"root\")){if(sc(t))t.origin.isInline()||(c=t);else{if(_o(t.origin))continue;mo(t.origin)&&!t.origin.isInline()&&(c=t)}break}}if(c===o)return!1;if(l&&!s&&mo(c.origin)&&c.origin.isKeyboardSelectable()){const t=vi();return t.add(c.origin.getKey()),Es(t),!0}return c=Kc(c),l&&Mc(t.anchor,c),Mc(t.focus,c),a||!s}let Ri=null,Wi=null,$i=!1,Ji=!1,ji=0;const Ui={characterData:!0,childList:!0,subtree:!0};function Vi(){return $i||null!==Ri&&Ri._readOnly}function Hi(){$i&&t(13)}function Yi(){ji>99&&t(14)}function qi(){return null===Ri&&t(195,Qi()),Ri}function Gi(){return null===Wi&&t(337,Qi()),Wi}function Xi(){Gi()._dirtyType=2}function Qi(){let t=0;const e=new Set,n=Ho.version;if(\"undefined\"!=typeof window)for(const r of document.querySelectorAll(\"[contenteditable]\")){const i=ss(r);if(is(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 Zi(){return Wi}function to(t,e,n){const r=e.__type,i=Qo(t,r);let o=n.get(r);void 0===o&&(o=Array.from(i.transforms),n.set(r,o));const s=o.length;for(let t=0;t<s&&(o[t](e),e.isAttached());t++);}function eo(t,e){return void 0!==t&&t.__key!==e&&t.isAttached()}function no(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 ro(t){return io(t,Gi()._nodes)}function io(e,n){const r=e.type,i=n.get(r);void 0===i&&t(17,r);const o=i.klass;e.type!==o.getType()&&t(18,o.name);const s=o.importJSON(e),l=e.children;if(_o(s)&&Array.isArray(l))for(let t=0;t<l.length;t++){const e=io(l[t],n);s.append(e)}return s}function oo(t,e,n){const r=Ri,i=$i,o=Wi;Ri=e,$i=!0,Wi=t;try{return n()}finally{Ri=r,$i=i,Wi=o}}function so(e,n){const r=e._pendingEditorState,i=e._rootElement,o=e._headless||null===i;if(null===r)return void(e._deferred.length>0&&ao(e,e._deferred));const s=e._editorState,l=s._selection,c=r._selection,a=0!==e._dirtyType,u=Ri,f=$i,d=Wi,h=e._updating,g=e._observer;let _=null;if(e._pendingEditorState=null,e._editorState=r,!o&&a&&null!==g){Wi=e,Ri=r,$i=!1,e._updating=!0;try{const t=e._dirtyType,n=e._dirtyElements,i=e._dirtyLeaves;g.disconnect(),_=ve(s,r,e,t,n,i)}catch(t){if(t instanceof Error&&e._onError(t),Ji)throw t;return Wo(e,null,i,r),ht(e),e._dirtyType=2,Ji=!0,so(e,s),void(Ji=!1)}finally{g.observe(i,Ui),e._updating=h,Ri=u,$i=f,Wi=d}}r._readOnly||(r._readOnly=!0);const p=e._dirtyLeaves,y=e._dirtyElements,m=e._normalizedNodes,x=e._updateTags,C=e._deferred;a&&(e._dirtyType=0,e._cloneNotNeeded.clear(),e._dirtyLeaves=new Set,e._dirtyElements=new Map,e._normalizedNodes=new Set,e._updateTags=new Set),function(t,e){const n=t._decorators;let r=t._pendingDecorators||n;const i=e._nodeMap;let o;for(o in r)i.has(o)||(r===n&&(r=Ts(t)),delete r[o])}(e,r);const v=o?null:_l(ol(e));if(e._editable&&null!==v&&(a||null===c||c.dirty||!c.is(l))&&null!==i&&!x.has(Cr)){Wi=e,Ri=r;try{if(null!==g&&g.disconnect(),a||null===c||c.dirty){const t=e._blockCursorElement;null!==t&&gl(t,e,i),Di(l,c,e,v,x,i)}!function(t,e,n){let r=t._blockCursorElement;if(si(n)&&n.isCollapsed()&&\"element\"===n.anchor.type&&e.contains(document.activeElement)){const i=n.anchor,o=i.getNode(),s=i.offset;let l=!1,c=null;if(s===o.getChildrenSize()){hl(o.getChildAtIndex(s-1))&&(l=!0)}else{const e=o.getChildAtIndex(s);if(null!==e&&hl(e)){const n=e.getPreviousSibling();(null===n||hl(n))&&(l=!0,c=t.getElementByKey(e.__key))}}if(l){const n=Al(o,t.getElementByKey(o.__key),t).element;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=Qc(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&&gl(r,t,e)}(e,i,c)}finally{null!==g&&g.observe(i,Ui),Wi=d,Ri=u}}null!==_&&function(t,e,n,r,i){const o=Array.from(t._listeners.mutation),s=o.length;for(let t=0;t<s;t++){const[s,l]=o[t];for(const t of l){const o=e.get(t);void 0!==o&&s(o,{dirtyLeaves:r,prevEditorState:i,updateTags:n})}}}(e,_,x,p,s),si(c)||null===c||null!==l&&l.is(c)||e.dispatchCommand(Te,void 0);const S=e._pendingDecorators;null!==S&&(e._decorators=S,e._pendingDecorators=null,lo(\"decorator\",e,!0,S)),function(t,e,n){const r=bs(e),i=bs(n);r!==i&&lo(\"textcontent\",t,!0,i)}(e,n||s,r),lo(\"update\",e,!0,{dirtyElements:y,dirtyLeaves:p,editorState:r,mutatedNodes:_,normalizedNodes:m,prevEditorState:n||s,tags:x}),ao(e,C),function(e){const n=e._updates;if(0===n.length)return void(e._cascadeCount=0);if(e._cascadeCount++>99){e._updates=[],e._cascadeCount=0;try{t(343)}catch(t){t instanceof Error&&e._onError(t)}return}const r=n.shift();if(r){const[t,n]=r;fo(e,t,n)}}(e)}function lo(t,e,n,...r){const i=e._updating;e._updating=n;try{const n=e._listeners[t],i=Array.from(n);for(const[t,e]of i){e&&e();const i=t(...r);n.has(t)?n.set(t,i):i&&i()}}finally{e._updating=i}}function co(t,e,n,r){const i=As(t);let o;for(let t=4;t>=0;t--)for(let s=0;s<i.length;s++){const l=i[s];if(s>0&&l._updating){o=l;break}const c=l._commands.get(e);if(void 0!==c){const e=c[t];if(e.size>0){let t=!1;if(ho(l,()=>{for(const i of e)if(i(n,r))return void(t=!0)}),t)return t}}}return o&&o.update(()=>{co(o,e,n,r)}),!1}function ao(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}}}function uo(e,n){const r=e._updates;let i=n||!1;for(;0!==r.length;){const n=r.shift();if(n){const[r,o]=n,s=e._pendingEditorState;let l;void 0!==o&&(l=o.onUpdate,o.skipTransforms&&(i=!0),o.discrete&&(null===s&&t(191),s._flushSync=!0),l&&e._deferred.push(l),no(e,o.tag)),null==s?fo(e,r,o):r()}}return i}function fo(e,n,r){const i=e._updateTags;let o,s=!1,l=!1;void 0!==r&&(o=r.onUpdate,no(e,r.tag),s=r.skipTransforms||!1,l=r.discrete||!1),o&&e._deferred.push(o);const c=e._editorState;let a=e._pendingEditorState,u=!1;(null===a||a._readOnly)&&(a=e._pendingEditorState=vo(a||c),u=!0),a._flushSync=l;const f=Ri,d=$i,h=Wi,g=e._updating;Ri=a,$i=!1,e._updating=!0,Wi=e;const _=e._headless||null===e.getRootElement();qo(null);try{u&&(_?null!==c._selection&&(a._selection=c._selection.clone()):a._selection=function(t,e){const n=t.getEditorState()._selection,r=_l(ol(t));return si(n)||null==n?ki(n,r,t,e):n.clone()}(e,r&&r.event||null));const i=e._compositionKey;n(),s=uo(e,s),function(t,e){const n=e.getEditorState()._selection,r=t._selection;if(si(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),0!==e._dirtyType&&(s?function(t,e){const n=e._dirtyLeaves,r=t._nodeMap;for(const t of n){const e=r.get(t);Gr(e)&&e.isAttached()&&e.isSimpleText()&&!e.isUnmergeable()&&Mt(e)}}(a,e):function(t,e){const n=e._dirtyLeaves,r=e._dirtyElements,i=t._nodeMap,o=xs(),s=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);Gr(r)&&r.isAttached()&&r.isSimpleText()&&!r.isUnmergeable()&&Mt(r),void 0!==r&&eo(r,o)&&to(e,r,s),n.add(t)}if(l=e._dirtyLeaves,c=l.size,c>0){ji++;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&&eo(c,o)&&to(e,c,s)}l=e._dirtyLeaves,c=l.size,a=e._dirtyElements,u=a.size,ji++}e._dirtyLeaves=n,e._dirtyElements=r}(a,e),uo(e),function(t,e,n,r){const i=t._nodeMap,o=e._nodeMap,s=[];for(const[t]of r){const e=o.get(t);void 0!==e&&(e.isAttached()||(_o(e)&&rt(e,t,i,o,s,r),i.has(t)||r.delete(t),s.push(t)))}for(const t of s)o.delete(t);for(const t of n){const e=o.get(t);void 0===e||e.isAttached()||(i.has(t)||n.delete(t),o.delete(t))}}(c,a,e._dirtyLeaves,e._dirtyElements));i!==e._compositionKey&&(a._flushSync=!0);const o=a._selection;if(si(o)){const e=a._nodeMap,n=o.anchor.key,r=o.focus.key;void 0!==e.get(n)&&void 0!==e.get(r)||t(19)}else ci(o)&&0===o._nodes.size&&(a._selection=null)}catch(t){return t instanceof Error&&e._onError(t),e._pendingEditorState=c,e._dirtyType=2,e._cloneNotNeeded.clear(),e._dirtyLeaves=new Set,e._dirtyElements.clear(),void so(e)}finally{Ri=f,$i=d,Wi=h,e._updating=g,ji=0}const p=0!==e._dirtyType||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,so(e)):u&&ts(()=>{so(e)}):(a._flushSync=!1,u&&(i.clear(),e._deferred=[],e._pendingEditorState=null))}function ho(t,e,n){Wi===t&&void 0===n?e():fo(t,e,n)}class go extends fr{__first;__last;__size;__format;__style;__indent;__dir;__textFormat;__textStyle;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 W[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=Gi()._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(Gr(e)&&t.push(e),_o(e)){const n=e.getAllTextNodes();t.push(...n)}e=e.getNextSibling()}return t}getFirstDescendant(){let t=this.getFirstChild();for(;_o(t);){const e=t.getFirstChild();if(null===e)break;t=e}return t}getLastDescendant(){let t=this.getLastChild();for(;_o(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 _o(t)&&t.getLastDescendant()||t||null}const r=e[t];return _o(r)&&r.getFirstDescendant()||r||null}getFirstChild(){const t=this.getLatest().__first;return null===t?null:Cs(t)}getFirstChildOrThrow(){const e=this.getFirstChild();return null===e&&t(45,this.__key),e}getLastChild(){const t=this.getLatest().__last;return null===t?null:Cs(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(),_o(i)&&r!==n-1&&!i.isInline()&&(t+=D)}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(),_o(i)&&r!==n-1&&!i.isInline()&&(t+=2)}return t}getDirection(){return this.getLatest().__dir}getTextFormat(){return this.getLatest().__textFormat}hasFormat(t){if(\"\"!==t){const e=R[t];return 0!==(this.getFormat()&e)}return!1}hasTextFormat(t){const e=K[t];return 0!==(this.getTextFormat()&e)}getFormatFlags(t,e){return hs(this.getLatest().__textFormat,t,e)}getTextStyle(){return this.getLatest().__textStyle}select(t,e){Hi();const n=Ti();let r=t,i=e;const o=this.getChildrenSize();if(!this.canBeEmpty())if(0===t&&0===e){const t=this.getFirstChild();if(Gr(t)||_o(t))return t.select(0,0)}else if(!(void 0!==t&&t!==o||void 0!==e&&e!==o)){const t=this.getLastChild();if(Gr(t)||_o(t))return t.select()}void 0===r&&(r=o),void 0===i&&(i=o);const s=this.__key;return si(n)?(n.anchor.set(s,r,\"element\"),n.focus.set(s,i,\"element\"),n.dirty=!0,n):xi(s,r,s,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&&R[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){ar(this)&&t(324,this.__key,this.__type);const i=this.getChildrenSize(),o=this.getWritable();e+n<=i||t(226,String(e),String(n),String(i));const s=o.__key,l=[],c=[],a=this.getChildAtIndex(e+n);let u=null,f=i-n+r.length;if(0!==e)if(e===i)u=this.getLastChild();else{const t=this.getChildAtIndex(e);null!==t&&(u=t.getPreviousSibling())}if(n>0){let e=null===u?this.getFirstChild():u.getNextSibling();for(let r=0;r<n;r++){null===e&&t(100);const n=e.getNextSibling(),r=e.__key;ps(e.getWritable()),c.push(r),e=n}}let d=u;for(const e of r){null!==d&&e.is(d)&&(u=d=d.getPreviousSibling());const n=e.getWritable();n.__parent===s&&f--,ps(n);const r=e.__key;if(null===d)o.__first=r,n.__prev=null;else{const t=d.getWritable();t.__next=r,n.__prev=t.__key}e.__key===s&&t(76),n.__parent=s,l.push(r),d=e}if(e+n===i){if(null!==d){d.getWritable().__next=null,o.__last=d.__key}}else if(null!==a){const t=a.getWritable();if(null!==d){const e=d.getWritable();t.__prev=d.__key,e.__next=a.__key}else t.__prev=null}if(o.__size=f,c.length){const t=Ti();if(si(t)){const e=new Set(c),n=new Set(l),{anchor:r,focus:i}=t;po(r,e,n)&&Ei(r,r.getNode(),this,u,a),po(i,e,n)&&Ei(i,i.getNode(),this,u,a),0!==f||this.canBeEmpty()||cl(this)||this.remove()}}return o}getDOMSlot(t){return new q(t)}exportDOM(t){const{element:e}=super.exportDOM(t);if(vl(e)){const t=this.getIndent();t>0&&(e.style.paddingInlineStart=40*t+\"px\",e.setAttribute(\"data-lexical-indent\",String(t)));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&&\"\"===n||cl(this)||this.getChildren().some(Gr)||(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=Al(this,t,e);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 _o(t){return t instanceof go}function po(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 yo extends fr{decorate(t,e){return null}isIsolated(){return!1}isInline(){return!0}isKeyboardSelectable(){return!0}}function mo(t){return t instanceof yo}class xo extends go{__cachedText;static getType(){return\"root\"}static clone(){return new xo}constructor(){super(\"root\"),this.__cachedText=null}getTopLevelElementOrThrow(){t(51)}getTextContent(){const t=this.__cachedText;return null===t||!Vi()&&0!==Gi()._dirtyType?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)_o(e)||mo(e)||t(282);return super.splice(e,n,r)}static importJSON(t){return Ns().updateFromJSON(t)}collapseAtStart(){return!0}}function Co(t){return t instanceof xo}function vo(t){return new bo(et(t._nodeMap))}function So(){return new bo(new Map([[\"root\",new xo]]))}function ko(e){const n=e.exportJSON(),r=e.constructor;if(n.type!==r.getType()&&t(130,r.name),_o(e)){const i=n.children;Array.isArray(i)||t(59,r.name);const o=e.getChildren();for(let t=0;t<o.length;t++){const e=ko(o[t]);i.push(e)}}return n}function To(t){return t instanceof bo}class bo{_nodeMap;_selection;_flushSync;_readOnly;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 oo(e&&e.editor||null,this,t)}clone(t){const e=new bo(this._nodeMap,void 0===t?this._selection:t);return e._readOnly=!0,e}toJSON(){return oo(null,this,()=>({root:ko(Ns())}))}}class No extends go{static getType(){return\"artificial\"}createDOM(t){return document.createElement(\"div\")}}class wo extends go{static getType(){return\"paragraph\"}static clone(t){return new wo(t.__key)}createDOM(t){const e=document.createElement(\"p\"),n=js(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:Eo,priority:0})}}exportDOM(t){const{element:e}=super.exportDOM(t);if(vl(e)){this.isEmpty()&&e.append(document.createElement(\"br\"));const t=this.getFormatType();t&&(e.style.textAlign=t)}return{element:e}}static importJSON(t){return Oo().updateFromJSON(t)}exportJSON(){const t=super.exportJSON();if(void 0===t.textFormat||void 0===t.textStyle){const e=this.getChildren().find(Gr);e?(t.textFormat=e.getFormat(),t.textStyle=e.getStyle()):(t.textFormat=this.getTextFormat(),t.textStyle=this.getTextStyle())}return t}insertNewAfter(t,e){const n=Oo();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||Gr(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 Eo(t){const e=Oo();if(Wl(e,t),Bl(t,e),\"\"===e.getFormatType()){const n=t.getAttribute(\"align\");n&&n&&n in R&&e.setFormat(n)}return Rl(e,t),{node:e}}function Oo(){return ul(new wo)}function Mo(t){return t instanceof wo}const Ao=0,Do=1,Po=2,Fo=3,Io=4,Lo=-8,zo=-7,Ko=-6,Bo=-5,Ro=-4;function Wo(t,e,n,r,i){const o=t._keyToDOMMap;o.clear(),t._editorState=So(),t._pendingEditorState=r,t._compositionKey=null,t._dirtyType=0,t._cloneNotNeeded.clear(),t._dirtyLeaves=new Set,t._dirtyElements.clear(),t._normalizedNodes=new Set,i&&i.preserveUpdateQueue||(t._updateTags=new Set,t._updates=[],t._cascadeCount=0),t._blockCursorElement=null;const s=t._observer;null!==s&&(s.disconnect(),t._observer=null),null!==e&&(e.textContent=\"\"),null!==n&&(n.textContent=\"\",o.set(\"root\",n))}function $o(t){const e=new Set,n=new Set;let r=t;for(;r;){const{ownNodeConfig:t}=Ul(r),i=r.transform;if(!n.has(i)){n.add(i);const t=r.transform();t&&e.add(t)}if(t){const n=t.$transform;n&&e.add(n),r=t.extends}else{const t=Object.getPrototypeOf(r);r=t.prototype instanceof fr&&t!==fr?t:void 0}}return e}const Jo={$createDOM:(t,e)=>t.createDOM(e._config,e),$decorateDOM:(t,e,n,r)=>{},$exportDOM:(t,e)=>{const n=Zo(e,t.getType());return n&&void 0!==n.exportDOM?n.exportDOM(e,t):t.exportDOM(e)},$extractWithChild:(t,e,n,r,i)=>_o(t)&&t.extractWithChild(e,n,r),$getDOMSlot:(t,e,n)=>t.getDOMSlot(e),$shouldExclude:(t,e,n)=>_o(t)&&t.excludeFromCopy(\"html\"),$shouldInclude:(t,e,n)=>!e||t.isSelected(e),$updateDOM:(t,e,n,r)=>t.updateDOM(e,n,r._config)};function jo(t){const e=t||{},n=Zi(),r=e.theme||{},i=void 0===t?n:e.parentEditor||null,o=e.disableEvents||!1,s=So(),l=e.namespace||(null!==i?i._config.namespace:Ds()),c=e.editorState,a=[xo,Rr,Or,Qr,wo,No,...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}Ul(e);const i=e.getType(),o=$o(e);h.set(i,{exportDOM:f&&f.export?f.export.get(e):void 0,klass:e,replace:n,replaceWithKlass:r,sharedNodeState:xt(a[t]),transforms:o})}}const g=new Ho(s,i,h,{disableEvents:o,dom:{...Jo,...t&&t.dom},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=2),function(t){t.registerCommand(we,Hn,Ao),t.registerCommand(Ee,Yn,Ao),t.registerCommand(Oe,qn,Ao),t.registerCommand(Me,Gn,Ao),t.registerCommand($e,Qn,Ao)}(g),g}function Uo(t,e){const n=t.get(e);t.delete(e),n&&n()}function Vo(t,e,n){return t.set(e,n),Uo.bind(null,t,e)}class Ho{static version;_headless;_parentEditor;_rootElement;_editorState;_pendingEditorState;_compositionKey;_deferred;_keyToDOMMap;_updates;_updating;_cascadeCount;_listeners;_commands;_nodes;_decorators;_pendingDecorators;_config;_dirtyType;_cloneNotNeeded;_dirtyLeaves;_dirtyElements;_normalizedNodes;_updateTags;_observer;_key;_onError;_htmlConversions;_window;_editable;_blockCursorElement;_createEditorArgs;constructor(t,e,n,r,i,o,s,l){this._createEditorArgs=l,this._parentEditor=e,this._rootElement=null,this._editorState=t,this._pendingEditorState=null,this._compositionKey=null,this._deferred=[],this._keyToDOMMap=new nt,this._updates=[],this._updating=!1,this._cascadeCount=0,this._listeners={decorator:new Map,editable:new Map,mutation:new Map,root:new Map,textcontent:new Map,update:new Map},this._commands=new Map,this._config=r,this._nodes=n,this._decorators={},this._pendingDecorators=null,this._dirtyType=0,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=Ds(),this._onError=i,this._htmlConversions=o,this._editable=s,this._headless=null!==e&&e._headless,this._window=null,this._blockCursorElement=null}isComposing(){return null!=this._compositionKey}registerUpdateListener(t){return Vo(this._listeners.update,t)}registerEditableListener(t){return Vo(this._listeners.editable,t)}registerDecoratorListener(t){return Vo(this._listeners.decorator,t)}registerTextContentListener(t){return Vo(this._listeners.textcontent,t)}registerRootListener(t){const e=this._listeners.root;return ea(Vo(e,t,t(this._rootElement,null)||void 0),()=>function(t,e,n){const r=t.get(e);r&&r(),t.set(e,e(...n)||void 0)}(e,t,[null,this._rootElement]))}registerCommand(e,n,r){void 0===r&&t(35);const i=this._commands;i.has(e)||i.set(e,[new Z,new Z,new Z,new Z,new Z]);const o=i.get(e);void 0===o&&t(36,String(e));const s=function(t){return 7&t}(r),l=o[s];return s!==r?l.addFront(n):l.addBack(n),()=>{l.delete(n),o.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 o=i.get(e);void 0===o&&(o=new Set,i.set(e,o)),o.add(r);const s=n&&n.skipInitialization;return void 0!==s&&s||this.initializeMutationListener(e,r),()=>{o.delete(r),0===o.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=Ll(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=Ll(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=Cs(e);t&&t.markDirty()}},null===t._pendingEditorState?{tag:_r}: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 Gs(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=js(this._config.theme,\"root\"),r=this._pendingEditorState||this._editorState;if(this._rootElement=t,Wo(this,e,t,r,{preserveUpdateQueue:!0}),null!==e&&(this._config.disableEvents||or(e),null!=n&&e.classList.remove(...n)),null!==t){const e=il(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=2,ht(this),this._updateTags.add(_r),so(this),this._config.disableEvents||function(t,e){const n=t.ownerDocument;En.set(t,n);const r=On.get(n)??0;r<1&&n.addEventListener(\"selectionchange\",er),On.set(n,r+1),t.__lexicalEditor=e;const i=Zn(t);for(let n=0;n<vn.length;n++){const[r,o]=vn[n],s=\"function\"==typeof o?t=>{rr(t)||(nr(t),(e.isEditable()||\"click\"===r)&&o(t,e))}:t=>{if(rr(t))return;nr(t);const n=e.isEditable();switch(r){case\"cut\":return n&&Gs(e,fn,t);case\"copy\":return Gs(e,un,t);case\"paste\":return n&&Gs(e,Ie,t);case\"dragstart\":return n&&Gs(e,ln,t);case\"dragover\":return n&&Gs(e,cn,t);case\"dragend\":return n&&Gs(e,an,t);case\"focus\":return n&&Gs(e,yn,t);case\"blur\":return n&&Gs(e,mn,t);case\"drop\":return n&&Gs(e,on,t)}};t.addEventListener(r,s),i.push(()=>{t.removeEventListener(r,s)})}}(t,this),null!=n&&t.classList.add(...n)}else this._window=null,this._updateTags.add(_r),so(this);lo(\"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=vo(e),r._selection=e._selection?e._selection.clone():null),dt(this);const i=this._pendingEditorState,o=this._updateTags,s=void 0!==n?n.tag:null;null===i||i.isEmpty()||(null!=s&&o.add(s),so(this)),this._pendingEditorState=r,this._dirtyType=2,this._dirtyElements.set(\"root\",!1),this._compositionKey=null,null!=s&&o.add(s),this._updating||so(this)}parseEditorState(t,e){return function(t,e,n){const r=So(),i=Ri,o=$i,s=Wi,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,Ri=r,$i=!1,Wi=e,qo(null);try{const i=e._nodes;io(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,Ri=i,$i=o,Wi=s}return r}(\"string\"==typeof t?JSON.parse(t):t,this,e)}read(t){return so(this),this.getEditorState().read(t,{editor:this})}update(t,e){!function(t,e,n){t._updating?t._updates.push([e,n]):fo(t,e,n)}(this,t,e)}focus(t,e={}){const n=this._rootElement;null!==n&&(n.setAttribute(\"autocapitalize\",\"off\"),ho(this,()=>{const r=Ti(),i=Ns();null!==r?r.dirty||Es(r.clone()):0!==i.getChildrenSize()&&(\"rootStart\"===e.defaultSelection?i.selectStart():i.selectEnd()),el(\"focus\"),nl(()=>{n.removeAttribute(\"autocapitalize\"),t&&t()})}),null===this._pendingEditorState&&n.removeAttribute(\"autocapitalize\"))}blur(){const t=this._rootElement;null!==t&&t.blur();const e=_l(this._window);null!==e&&e.removeAllRanges()}isEditable(){return this._editable}setEditable(t){this._editable!==t&&(this._editable=t,lo(\"editable\",this,!0,t))}toJSON(){return{editorState:this._editorState.toJSON()}}}Ho.version=Q;let Yo=null;function qo(t){Yo=t}let Go=1;function Xo(){Go=1}function Qo(e,n){const r=Zo(e,n);return void 0===r&&t(30,n),r}function Zo(t,e){return t._nodes.get(e)}const ts=\"function\"==typeof queueMicrotask?queueMicrotask:t=>{Promise.resolve().then(t)};function es(t){return mo(ks(t))}function ns(t){const e=document.activeElement;if(!vl(e))return!1;const n=e.nodeName;return mo(ks(t))&&(\"INPUT\"===n||\"TEXTAREA\"===n||\"true\"===e.contentEditable&&null==ss(e))}function rs(t,e,n){const r=t.getRootElement();try{return null!==r&&r.contains(e)&&r.contains(n)&&null!==e&&!ns(e)&&os(e)===t}catch(t){return!1}}function is(t){return t instanceof Ho}function os(t){let e=t;for(;null!=e;){const t=ss(e);if(is(t))return t;e=Qs(e)}return null}function ss(t){return t?t.__lexicalEditor:null}function ls(t){return L.test(t)?\"rtl\":z.test(t)?\"ltr\":null}function cs(t){return ti(t)||t.isToken()}function as(t){return cs(t)||t.isSegmented()}function us(t){return Sl(t)&&3===t.nodeType}function fs(t){return Sl(t)&&9===t.nodeType}function ds(t){let e=t;for(;null!=e;){if(us(e))return e;e=e.firstChild}return null}function hs(t,e,n){const r=K[e];if(null!==n&&(t&r)===(n&r))return t;let i=t^r;return\"subscript\"===e?i&=~K.superscript:\"superscript\"===e?i&=~K.subscript:\"lowercase\"===e?(i&=~K.uppercase,i&=~K.capitalize):\"uppercase\"===e?(i&=~K.lowercase,i&=~K.capitalize):\"capitalize\"===e&&(i&=~K.lowercase,i&=~K.uppercase),i}function gs(t){return Gr(t)||Dr(t)||mo(t)}function _s(t,e){const n=function(){const t=Yo;return Yo=null,t}();if(null!=(e=e||n&&n.__key))return void(t.__key=e);Hi(),Yi();const r=Gi(),i=qi(),o=\"\"+Go++;i._nodeMap.set(o,t),_o(t)?r._dirtyElements.set(o,!0):r._dirtyLeaves.add(o),r._cloneNotNeeded.add(o),0===r._dirtyType&&(r._dirtyType=1),t.__key=o}function ps(t){const e=t.getParent();if(null!==e){const n=t.getWritable(),r=e.getWritable(),i=t.getPreviousSibling(),o=t.getNextSibling(),s=null!==o?o.__key:null,l=null!==i?i.__key:null,c=null!==i?i.getWritable():null,a=null!==o?o.getWritable():null;null===i&&(r.__first=s),null===o&&(r.__last=l),null!==c&&(c.__next=s),null!==a&&(a.__prev=l),n.__prev=null,n.__next=null,n.__parent=null,r.__size--}}function ys(e){Yi(),ar(e)&&t(323,e.__key,e.__type);const n=e.getLatest(),r=n.__parent,i=qi(),o=Gi(),s=i._nodeMap,l=o._dirtyElements;null!==r&&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}}(r,s,l);const c=n.__key;0===o._dirtyType&&(o._dirtyType=1),_o(e)?l.set(c,!0):o._dirtyLeaves.add(c)}function ms(t){Hi();const e=Gi(),n=e._compositionKey;if(t!==n){if(e._compositionKey=t,null!==n){const t=Cs(n);null!==t&&t.getWritable()}if(null!==t){const e=Cs(t);null!==e&&e.getWritable()}}}function xs(){if(Vi())return null;return Gi()._compositionKey}function Cs(t,e){const n=(e||qi())._nodeMap.get(t);return void 0===n?null:n}function vs(t,e){const n=Ss(t,Gi());return void 0!==n?Cs(n,e):null}function Ss(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=Qs(n)}return null}function Ts(t){const e=t._decorators,n=Object.assign({},e);return t._pendingDecorators=n,n}function bs(t){return t.read(()=>Ns().getTextContent())}function Ns(){return ws(qi())}function ws(t){return t._nodeMap.get(\"root\")}function Es(t){Hi();const e=qi();null!==t&&(t.dirty=!0,t.setCachedNodes(null)),e._selection=t}function Os(t){const e=Gi(),n=function(t,e){let n=t;for(;null!=n;){const t=Ss(n,e);if(void 0!==t)return t;n=Qs(n)}return null}(t,e);if(null===n){return t===e.getRootElement()?Cs(\"root\"):null}return Cs(n)}function Ms(t){return/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g.test(t)}function As(t){const e=[];for(let n=t;null!==n;n=n._parentEditor)e.push(n);return e}function Ds(){return Math.random().toString(36).replace(/[^a-z]+/g,\"\").substring(0,5)}function Ps(t){return us(t)?t.nodeValue:null}function Fs(t,e,n){const r=_l(ol(e));if(null===r)return;const i=r.anchorNode;let{anchorOffset:o,focusOffset:s}=r;if(null!==i){let e=Ps(i);const r=ks(i);if(null!==e&&Gr(r)){if((e===A||e===P)&&n){const t=n.length;e=n,o=t,s=t}null!==e&&Is(r,e,o,s,t)}}}function Is(t,e,n,r,i){let o=t;if(o.isAttached()&&(i||!o.isDirty())){const s=o.isComposing();let c=e;if((s||i)&&(e.endsWith(A)&&(c=e.slice(0,-A.length)),i)){const t=P;let e;for(;-1!==(e=c.indexOf(t));)c=c.slice(0,e)+c.slice(e+t.length),null!==n&&n>e&&(n=Math.max(e,n-t.length)),null!==r&&r>e&&(r=Math.max(e,r-t.length))}const u=o.getTextContent();if(i||c!==u){if(\"\"===c){if(ms(null),a||l||d)o.remove();else{const t=Gi();setTimeout(()=>{t.update(()=>{o.isAttached()&&o.remove()})},20)}return}const e=o.getParent(),i=bi(),u=o.getTextContentSize(),f=xs(),h=o.getKey();if(o.isToken()||null!==f&&h===f&&!s||si(i)&&(null!==e&&!e.canInsertTextBefore()&&0===i.anchor.offset||i.anchor.key===t.__key&&0===i.anchor.offset&&!o.canInsertTextBefore()&&!s||i.focus.key===t.__key&&i.focus.offset===u&&!o.canInsertTextAfter()&&!s))return void o.markDirty();const g=Ti();if(!si(g)||null===n||null===r)return void Ls(o,c,g);if(g.setTextNodeRange(o,n,o,r),o.isSegmented()){const t=qr(o.getTextContent());o.replace(t),o=t}Ls(o,c,g)}}}function Ls(t,e,n){if(t.setTextContent(e),si(n)){const e=t.getKey();let r=!1;for(const i of[\"anchor\",\"focus\"]){const o=n[i];\"text\"===o.type&&o.key===e&&(o.offset=dc(t,o.offset,\"clamp\"),r=!0)}r&&(n._cachedNodes=null,n._cachedIsBackward=null)}}function zs(t,e,n){const r=e[n]||!1;return\"any\"===r||r===t[n]}function Ks(t,e){return zs(t,e,\"altKey\")&&zs(t,e,\"ctrlKey\")&&zs(t,e,\"shiftKey\")&&zs(t,e,\"metaKey\")}function Bs(t,e,n){if(!Ks(t,n))return!1;if(t.key.toLowerCase()===e.toLowerCase())return!0;if(e.length>1)return!1;if(1===t.key.length&&t.key.charCodeAt(0)<=127)return!1;if(t.code.startsWith(\"Digit\")&&/^\\d$/.test(e))return t.code===`Digit${e}`;const r=\"Key\"+e.toUpperCase();return t.code===r}const Rs={ctrlKey:!i,metaKey:i},Ws={altKey:i,ctrlKey:!i};function $s(t){return\"Backspace\"===t.key}function Js(t){const e=Ns();if(si(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\"),At(t),t}{const t=e.select(0,e.getChildrenSize());return Es(At(t)),t}}function js(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=Qc(i);return n[e]=t,t}return i}function Us(e,n,r,i,o){if(0===r.size)return;const s=i.__type,l=i.__key,c=n.get(s);void 0===c&&t(33,s);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\"===o;(void 0===f||d)&&u.set(l,d?\"updated\":o)}function Vs(t){const e=t.getType(),n=qi();if(n._readOnly){const t=Ll(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 Hs(t,e,n){const r=t.getParent();let i=n,o=t;return null!==r&&(e&&0===n?(i=o.getIndexWithinParent(),o=r):e||n!==o.getChildrenSize()||(i=o.getIndexWithinParent()+1,o=r)),o.getChildAtIndex(e?i-1:i)}function Ys(t,e){const n=t.offset;if(\"element\"===t.type){return Hs(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?Hs(r.getParentOrThrow(),e,r.getIndexWithinParent()+(e?0:1)):t}}return null}function qs(t){const e=ol(t).event,n=e&&e.inputType;return\"insertFromPaste\"===n||\"insertFromPasteAsQuotation\"===n}function Gs(t,e,n){return co(t,e,n,t)}function Xs(e,n){const r=e._keyToDOMMap.get(n);return void 0===r&&t(75,n),r}function Qs(t){const e=t.assignedSlot||t.parentElement;return kl(e)?e.host:e}function Zs(t){return fs(t)?t:vl(t)?t.ownerDocument:null}function tl(t){return Gi()._updateTags.has(t)}function el(t){Hi();Gi()._updateTags.add(t)}function nl(t){Hi();Gi()._deferred.push(t)}function rl(t,e){let n=t.getParent();for(;null!==n;){if(n.is(e))return!0;n=n.getParent()}return!1}function il(t){const e=Zs(t);return e?e.defaultView:null}function ol(e){const n=e._window;return null===n&&t(78),n}function sl(t){return _o(t)&&t.isInline()||mo(t)&&t.isInline()}function ll(t){let e=t.getParentOrThrow();for(;null!==e;){if(cl(e))return e;e=e.getParentOrThrow()}return e}function cl(t){return Co(t)||_o(t)&&t.isShadowRoot()}function al(t,e=!1){const n=t.constructor.clone(t);return _s(n,null),n.afterCloneFrom(t),e||n.resetOnCopyNodeFrom(t),n}function ul(e){const n=Gi(),r=e.getType(),i=Zo(n,r);void 0===i&&t(200,e.constructor.name,r);const{replace:o,replaceWithKlass:s}=i;if(null!==o){const n=o(e),i=n.constructor;return null!==s?n instanceof s||t(201,s.name,s.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 fl(e,n){!Co(e.getParent())||_o(n)||mo(n)||t(99)}function dl(e){const n=Cs(e);return null===n&&t(63,e),n}function hl(t){return(mo(t)||_o(t)&&!t.canBeEmpty())&&!t.isInline()}function gl(t,e,n){n.style.removeProperty(\"caret-color\"),e._blockCursorElement=null;const r=t.parentElement;null!==r&&r.removeChild(t)}function _l(t){return n?(t||window).getSelection():null}function pl(t){const e=il(t);return e?e.getSelection():null}function yl(e,n){let r=e.getChildAtIndex(n);null==r&&(r=e),cl(e)&&t(102);const i=e=>{const n=e.getParentOrThrow(),o=cl(n),s=e!==r||o?al(e):e;if(o)return _o(e)&&_o(s)||t(133),e.insertAfter(s),[e,s,s];{const[t,r,o]=i(n),l=e.getNextSiblings();return o.append(s,...l),[t,r,s]}},[o,s]=i(r);return[o,s]}function ml(t){return vl(t)&&\"A\"===t.tagName}function xl(t){return vl(t)&&\"TR\"===t.tagName}function Cl(t){return vl(t)&&(\"TD\"===t.tagName||\"TH\"===t.tagName)}function vl(t){return Sl(t)&&1===t.nodeType}function Sl(t){return\"object\"==typeof t&&null!==t&&\"nodeType\"in t&&\"number\"==typeof t.nodeType}function kl(t){return Sl(t)&&11===t.nodeType}const Tl=/^(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;function bl(t){return!(!vl(t)||!t.style.display.startsWith(\"inline\"))||Tl.test(t.nodeName)}const Nl=/^(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;function wl(t){return(!vl(t)||!t.style.display.startsWith(\"inline\"))&&Nl.test(t.nodeName)}function El(t){if(mo(t)&&!t.isInline())return!0;if(!_o(t)||cl(t))return!1;const e=t.getFirstChild(),n=null===e||Dr(e)||Gr(e)||e.isInline();return!t.isInline()&&!1!==t.canBeEmpty()&&n}function Ol(){return Gi()}function Ml(t=Ol()){return t._config.dom||Jo}function Al(e,n,r=Ol()){const i=Ml(r).$getDOMSlot(e,n,r);return _o(e)&&(Dl(i)||t(344,e.getKey(),e.getType())),i}function Dl(t){return t instanceof q}function Pl(t,e,n=Ol()){return ds(Al(t,e,n).element)}const Fl=new WeakMap,Il=new Map;function Ll(e){if(!e._readOnly&&e.isEmpty())return Il;e._readOnly||t(192);let n=Fl.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),Fl.set(e,n)),n}function zl(t){const e=t.constructor.clone(t);return e.afterCloneFrom(t),e}function Kl(t){return(e=zl(t))[cr]=!0,e;var e}function Bl(t,e){const n=t.getAttribute(\"data-lexical-indent\");if(null!==n){const t=parseInt(n,10);if(Number.isFinite(t)&&t>=0)return void e.setIndent(t)}const r=parseInt(t.style.paddingInlineStart,10)||0,i=Math.round(r/40);e.setIndent(i)}function Rl(t,e){const n=e.getAttribute(\"dir\");return\"ltr\"===n||\"rtl\"===n?t.setDirection(n):t}function Wl(t,e){const n=e.style.textAlign;return n&&n in R?t.setFormat(n):t}function $l(t){t.__lexicalUnmanaged=!0}function Jl(t){return!0===t.__lexicalUnmanaged}function jl(t,e){return function(t,e){return Object.prototype.hasOwnProperty.call(t,e)}(t,e)&&t[e]!==fr[e]}function Ul(e){const n=U in e.prototype?e.prototype[U]():void 0,r=function(e){if(!(e===fr||e.prototype instanceof fr)){let n=\"<unknown>\",r=\"<unknown>\";try{n=e.getType()}catch(t){}try{Ho.version&&(r=JSON.parse(Ho.version))}catch(t){}t(290,e.name,n,r)}return e===yo||e===go||e===fr}(e),i=!r&&jl(e,\"getType\")?e.getType():void 0;let o,s=i;if(n)if(i)o=n[i];else for(const[t,e]of Object.entries(n))s=t,o=e;if(!r&&s&&(jl(e,\"getType\")||(e.getType=()=>s),jl(e,\"clone\")||(e.clone=t=>(qo(t),new e)),jl(e,\"importJSON\")||(e.importJSON=o&&o.$importJSON||(t=>(new e).updateFromJSON(t))),!jl(e,\"importDOM\")&&o)){const{importDOM:t}=o;t&&(e.importDOM=()=>t)}return{ownNodeConfig:o,ownNodeType:s}}function Vl(t){const e=Ol();Hi();return new(e.resolveRegisteredNodeAfterReplacements(e.getRegisteredNode(t)).klass)}const Hl=(t,e)=>{let n=t;for(;null!=n&&!Co(n);){if(e(n))return n;n=n.getParent()}return null};function Yl(e,n){const r=[];let i=e.__first;for(;null!==i;){const e=null===n?Cs(i):n.get(i);null==e&&t(174),r.push(i),i=e.__next}return r}const ql={next:\"previous\",previous:\"next\"};class Gl{origin;constructor(t){this.origin=t}[Symbol.iterator](){return kc({hasNext:oc,initial:this.getAdjacentCaret(),map:t=>t,step:t=>t.getAdjacentCaret()})}getAdjacentCaret(){return uc(this.getNodeAtCaret(),this.direction)}getSiblingCaret(){return uc(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 o=this;const s=this.getParentAtCaret(),l=new Map;for(let t=o.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=o.getNodeAtCaret();if(n)if(l.delete(n.getKey()),l.delete(e.getKey()),n.is(e)||o.origin.is(e));else{const t=e.getParent();t&&t.is(s)&&e.remove(),n.replace(e)}else null===n&&t(263,Array.from(l).join(\" \"))}else o.insert(e);o=uc(e,this.direction)}for(const t of l.values())t.remove();return this}}class Xl extends Gl{type=\"child\";getLatest(){const t=this.origin.getLatest();return t===this.origin?this:gc(t,this.direction)}getParentCaret(t=\"root\"){return uc(tc(this.getParentAtCaret(),t),this.direction)}getFlipped(){const t=Zl(this.direction);return uc(this.getNodeAtCaret(),t)||gc(this.origin,t)}getParentAtCaret(){return this.origin}getChildCaret(){return this}isSameNodeCaret(t){return t instanceof Xl&&this.direction===t.direction&&this.origin.is(t.origin)}isSamePointCaret(t){return this.isSameNodeCaret(t)}}const Ql={root:Co,shadowRoot:cl};function Zl(t){return ql[t]}function tc(t,e=\"root\"){return Ql[e](t)?null:t}class ec extends Gl{type=\"sibling\";getLatest(){const t=this.origin.getLatest();return t===this.origin?this:uc(t,this.direction)}getSiblingCaret(){return this}getParentAtCaret(){return this.origin.getParent()}getChildCaret(){return _o(this.origin)?gc(this.origin,this.direction):null}getParentCaret(t=\"root\"){return uc(tc(this.getParentAtCaret(),t),this.direction)}getFlipped(){const t=Zl(this.direction);return uc(this.getNodeAtCaret(),t)||gc(this.origin.getParentOrThrow(),t)}isSamePointCaret(t){return t instanceof ec&&this.direction===t.direction&&this.origin.is(t.origin)}isSameNodeCaret(t){return(t instanceof ec||t instanceof nc)&&this.direction===t.direction&&this.origin.is(t.origin)}}class nc extends Gl{type=\"text\";offset;constructor(t,e){super(t),this.offset=e}getLatest(){const t=this.origin.getLatest();return t===this.origin?this:fc(t,this.direction,this.offset)}getParentAtCaret(){return this.origin.getParent()}getChildCaret(){return null}getParentCaret(t=\"root\"){return uc(tc(this.getParentAtCaret(),t),this.direction)}getFlipped(){return fc(this.origin,Zl(this.direction),this.offset)}isSamePointCaret(t){return t instanceof nc&&this.direction===t.direction&&this.origin.is(t.origin)&&this.offset===t.offset}isSameNodeCaret(t){return(t instanceof ec||t instanceof nc)&&this.direction===t.direction&&this.origin.is(t.origin)}getSiblingCaret(){return uc(this.origin,this.direction)}}function rc(t){return t instanceof nc}function ic(t){return t instanceof Gl}function oc(t){return t instanceof ec}function sc(t){return t instanceof Xl}const lc={next:class extends nc{direction=\"next\";getNodeAtCaret(){return this.origin.getNextSibling()}insert(t){return this.origin.insertAfter(t),this}},previous:class extends nc{direction=\"previous\";getNodeAtCaret(){return this.origin.getPreviousSibling()}insert(t){return this.origin.insertBefore(t),this}}},cc={next:class extends ec{direction=\"next\";getNodeAtCaret(){return this.origin.getNextSibling()}insert(t){return this.origin.insertAfter(t),this}},previous:class extends ec{direction=\"previous\";getNodeAtCaret(){return this.origin.getPreviousSibling()}insert(t){return this.origin.insertBefore(t),this}}},ac={next:class extends Xl{direction=\"next\";getNodeAtCaret(){return this.origin.getFirstChild()}insert(t){return this.origin.splice(0,0,[t]),this}},previous:class extends Xl{direction=\"previous\";getNodeAtCaret(){return this.origin.getLastChild()}insert(t){return this.origin.splice(this.origin.getChildrenSize(),0,[t]),this}}};function uc(t,e){return t?new cc[e](t):null}function fc(t,e,n){return t?new lc[e](t,dc(t,n)):null}function dc(t,n,r=\"error\"){const i=t.getTextContentSize();let o=\"next\"===n?i:\"previous\"===n?0:n;return(o<0||o>i)&&(\"clamp\"!==r&&e(284,String(n),String(i),t.getKey()),o=o<0?0:i),o}function hc(t,e){return new mc(t,e)}function gc(t,e){return _o(t)?new ac[e](t):null}function _c(t){return t&&t.getChildCaret()||t}function pc(t){return t&&_c(t.getAdjacentCaret())}class yc{type=\"node-caret-range\";direction;anchor;focus;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 yc(t,e,this.direction)}isCollapsed(){return this.anchor.isSamePointCaret(this.focus)}getTextSlices(){const t=t=>{const e=this[t].getLatest();return rc(e)?function(t,e){const{direction:n,origin:r}=t,i=dc(r,\"focus\"===e?Zl(n):n);return hc(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[hc(t,r.offset-t.offset),null]}return[e,n]}iterNodeCarets(t=\"root\"){const e=rc(this.anchor)?this.anchor.getSiblingCaret():this.anchor.getLatest(),n=this.focus.getLatest(),r=rc(n),i=e=>e.isSameNodeCaret(n)?null:pc(e)||e.getParentCaret(t);return kc({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 mc{type=\"slice\";caret;distance;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 fc(t.setTextContent(i.slice(0,n)+i.slice(r)),e,n)}}function xc(t){return t instanceof mc}function Cc(t){return Sc(t,uc(Ns(),t.direction))}function vc(t){return Sc(t,t)}function Sc(e,n){return e.direction!==n.direction&&t(265),new yc(e,n,e.direction)}function kc(t){const{initial:e,hasNext:n,step:r,map:i}=t;let o=e;return{[Symbol.iterator](){return this},next(){if(!n(o))return{done:!0,value:void 0};const t={done:!1,value:i(o)};return o=r(o),t}}}function Tc(e,n){const r=Ec(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 bc(r)}}function bc(t){const{a:e,b:n}=t,r=e.__key,i=n.__key;let o=e,s=n;for(;o&&s;o=o.getNextSibling(),s=s.getNextSibling()){if(o.__key===i)return-1;if(s.__key===r)return 1}return null===o?1:-1}function Nc(t,e){return e.is(t)}function wc(t){return _o(t)?[t.getLatest(),null]:[t.getParent(),t.getLatest()]}function Ec(e,n){if(e.is(n))return{commonAncestor:e,type:\"same\"};const r=new Map;for(let[t,n]=wc(e);t;n=t,t=t.getParent())r.set(t,n);for(let[i,o]=wc(n);i;o=i,i=i.getParent()){const s=r.get(i);if(void 0!==s)return null===s?(Nc(e,i)||t(276),{commonAncestor:i,type:\"ancestor\"}):null===o?(Nc(n,i)||t(277),{commonAncestor:i,type:\"descendant\"}):((_o(s)||Nc(e,s))&&(_o(o)||Nc(n,o))&&i.is(s.getParent())&&i.is(o.getParent())||t(278),{a:s,b:o,commonAncestor:i,type:\"branch\"})}return null}function Oc(e,n){const{type:r,key:i,offset:o}=e,s=dl(e.key);return\"text\"===r?(Gr(s)||t(266,s.getType(),i),fc(s,n,o)):(_o(s)||t(267,s.getType(),i),$c(s,e.offset,n))}function Mc(e,n){const{origin:r,direction:i}=n,o=\"next\"===i;rc(n)?e.set(r.getKey(),n.offset,\"text\"):oc(n)?Gr(r)?e.set(r.getKey(),dc(r,i),\"text\"):e.set(r.getParentOrThrow().getKey(),r.getIndexWithinParent()+(o?1:0),\"element\"):(sc(n)&&_o(r)||t(268),e.set(r.getKey(),o?0:r.getChildrenSize(),\"element\"))}function Ac(t){const e=Ti(),n=si(e)?e:Ci();return Dc(n,t),Es(n),n}function Dc(t,e){Mc(t.anchor,e.anchor),Mc(t.focus,e.focus)}function Pc(t){const{anchor:e,focus:n}=t,r=Oc(e,\"next\"),i=Oc(n,\"next\"),o=Tc(r,i)<=0?\"next\":\"previous\";return Sc(Rc(r,o),Rc(i,o))}function Fc(t){const{direction:e,origin:n}=t,r=uc(n,Zl(e)).getNodeAtCaret();return r?uc(r,e):gc(n.getParentOrThrow(),e)}function Ic(t,e=\"root\"){const n=[t];for(let r=sc(t)?t.getParentCaret(e):t.getSiblingCaret();null!==r;r=r.getParentCaret(e))n.push(Fc(r));return n}function Lc(t){return!!t&&t.origin.isAttached()}function zc(e,n=\"removeEmptySlices\"){if(e.isCollapsed())return e;const r=\"root\",i=\"next\";let o=n;const s=Wc(e,i),l=Ic(s.anchor,r),c=Ic(s.focus.getFlipped(),r),a=new Set,u=[];for(const t of s.iterNodeCarets(r))if(sc(t))a.add(t.origin.getKey());else if(oc(t)){const{origin:e}=t;_o(e)&&!a.has(e.getKey())||u.push(e)}for(const t of u)t.remove();for(const t of s.getTextSlices()){if(!t)continue;const{origin:e}=t.caret,n=e.getTextContentSize(),r=Fc(uc(e,i)),s=e.getMode();if(Math.abs(t.distance)===n&&\"removeEmptySlices\"===o||\"token\"===s&&0!==t.distance)r.remove();else if(0!==t.distance){o=\"removeEmptySlices\";let e=t.removeTextSlice();const n=t.caret.origin;if(\"segmented\"===s){const t=e.origin,n=qr(t.getTextContent()).setStyle(t.getStyle()).setFormat(t.getFormat());r.replaceOrInsert(n),e=fc(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(Lc(t)){f=Kc(t);break}for(const t of c)if(Lc(t)){d=Kc(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 o=r.getParents().reverse();o.push(r);const s=i.getParents().reverse();s.push(i);const l=Math.min(o.length,s.length);let c;for(c=0;c<l&&o[c]===s[c];c++);const a=(t,e)=>{let n;for(let r=c;r<t.length;r++){const i=t[r];if(cl(i))return;!n&&e(i)&&(n=i)}return n},u=a(o,El),f=u&&a(s,t=>n.has(t.getKey())&&El(t));return u&&f?[u,f]:null}(f,d,a);if(h){const[t,e]=h;gc(t,\"previous\").splice(0,e.getChildren());let n=e.getParent();for(e.remove(!0);n&&n.isEmpty();){const t=n;n=n.getParent(),t.remove(!0)}}const g=[f,d,...l,...c].find(Lc);if(g){return vc(Rc(Kc(g),e.direction))}t(269,JSON.stringify(l.map(t=>t.origin.__key)))}function Kc(t){const e=function(t){let e=t;for(;sc(e);){const t=pc(e);if(!sc(t))break;e=t}return e}(t.getLatest()),{direction:n}=e;if(Gr(e.origin))return rc(e)?e:fc(e.origin,n,n);const r=e.getAdjacentCaret();return oc(r)&&Gr(r.origin)?fc(r.origin,n,Zl(n)):e}function Bc(t){return rc(t)&&t.offset!==dc(t.origin,t.direction)}function Rc(t,e){return t.direction===e?t:t.getFlipped()}function Wc(t,e){return t.direction===e?t:Sc(Rc(t.focus,e),Rc(t.anchor,e))}function $c(t,e,n){let r=gc(t,\"next\");for(let t=0;t<e;t++){const t=r.getAdjacentCaret();if(null===t)break;r=t}return Rc(r,n)}function Jc(t,e=\"root\"){let n=0,r=t,i=pc(r);for(;null===i;){if(n--,i=r.getParentCaret(e),!i)return null;r=i,i=pc(r)}return i&&[i,n]}function jc(e){const{origin:n,offset:r,direction:i}=e;if(r===dc(n,i))return e.getSiblingCaret();if(r===dc(n,Zl(i)))return Fc(e.getSiblingCaret());const[o]=n.splitText(r);return Gr(o)||t(281),Rc(uc(o,\"next\"),i)}function Uc(t,e){return!0}function Vc(t,{$copyElementNode:e=al,$splitTextPointCaretNext:n=jc,rootMode:r=\"shadowRoot\",$shouldSplit:i=Uc,removeEmptyDestination:o=!1}={}){if(rc(t))return n(t);const s=t.getParentCaret(r);if(s){const{origin:n}=s;if(sc(t)){const t=Fc(s);if(o&&n.isEmpty())return n.remove(),t;if(!n.canBeEmpty()||!i(n,\"first\"))return t}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||!o&&n.canBeEmpty()&&i(n,\"last\"))&&s.insert(e(n).splice(0,0,r))}return s}function Hc(t){return t}function Yc(...t){return t}function qc(t,e){return[t,e]}function Gc(t){return t}function Xc(t,e){if(!e||t===e)return t;for(const n in e)if(t[n]!==e[n])return{...t,...e};return t}function Qc(...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 Zc(t,...e){const n=Qc(...e);n.length>0&&t.classList.add(...n)}function ta(t,...e){const n=Qc(...e);n.length>0&&t.classList.remove(...n)}function ea(...t){return()=>{for(let e=t.length-1;e>=0;e--)t[e]();t.length=0}}export{el as $addUpdateTag,ul as $applyNodeReplacement,Oc as $caretFromPoint,Pc as $caretRangeFromSelection,zl as $cloneWithProperties,Kl as $cloneWithPropertiesEphemeral,Tc as $comparePointCaretNext,al as $copyNode,Vl as $create,Yl as $createChildrenArray,Ar as $createLineBreakNode,vi as $createNodeSelection,Oo as $createParagraphNode,ni as $createPoint,Ci as $createRangeSelection,Si as $createRangeSelectionFromDom,Zr as $createTabNode,qr as $createTextNode,Cc as $extendCaretToRange,Hl as $findMatchingParent,Xi as $fullReconcile,Ii as $generateNodesFromRawText,pc as $getAdjacentChildCaret,Ys as $getAdjacentNode,Jc as $getAdjacentSiblingOrParentSiblingCaret,Rc as $getCaretInDirection,Sc as $getCaretRange,Wc as $getCaretRangeInDirection,ui as $getCharacterOffsets,gc as $getChildCaret,$c as $getChildCaretAtIndex,_c as $getChildCaretOrSelf,vc as $getCollapsedCaretRange,Ec as $getCommonAncestor,bc as $getCommonAncestorResultBranchOrder,Al as $getDOMSlot,Pl as $getDOMTextNode,Ol as $getEditor,Ml as $getEditorDOMRenderConfig,ks as $getNearestNodeFromDOMNode,ll as $getNearestRootOrShadowRoot,Cs as $getNodeByKey,dl as $getNodeByKeyOrThrow,vs as $getNodeFromDOMNode,bi as $getPreviousSelection,Ns as $getRoot,Ti as $getSelection,uc as $getSiblingCaret,pt as $getState,yt as $getStateChange,Li as $getTextContent,dc as $getTextNodeOffset,fc as $getTextPointCaret,hc as $getTextPointCaretSlice,vt as $getWritableNodeState,rl as $hasAncestor,tl as $hasUpdateTag,Pi as $insertNodes,mi as $isBlockElementNode,sc as $isChildCaret,mo as $isDecoratorNode,To as $isEditorState,Dl as $isElementDOMSlot,_o as $isElementNode,Bc as $isExtendableTextPointCaret,sl as $isInlineElementOrDecoratorNode,gs as $isLeafNode,dr as $isLexicalNode,Dr as $isLineBreakNode,ic as $isNodeCaret,ci as $isNodeSelection,Mo as $isParagraphNode,si as $isRangeSelection,Co as $isRootNode,cl as $isRootOrShadowRoot,oc as $isSiblingCaret,ti as $isTabNode,Gr as $isTextNode,rc as $isTextPointCaret,xc as $isTextPointCaretSlice,as as $isTokenOrSegmented,cs as $isTokenOrTab,Vs as $nodesOfType,Kc as $normalizeCaret,At as $normalizeSelection__EXPERIMENTAL,nl as $onUpdate,ro as $parseSerializedNode,zc as $removeTextFromCaretRange,Fc as $rewindSiblingCaret,Js as $selectAll,ms as $setCompositionKey,Rl as $setDirectionFromDOM,Wl as $setFormatFromDOM,Mc as $setPointFromCaret,Es as $setSelection,Ac as $setSelectionFromCaretRange,mt as $setState,Vc as $splitAtPointCaretNext,yl as $splitNode,Di as $updateDOMSelection,Dc as $updateRangeSelectionFromCaretRange,No as ArtificialNode__DO_NOT_USE,we as BEFORE_INPUT_COMMAND,mn as BLUR_COMMAND,_n as CAN_REDO_COMMAND,pn as CAN_UNDO_COMMAND,s as CAN_USE_BEFORE_INPUT,n as CAN_USE_DOM,hn as CLEAR_EDITOR_COMMAND,gn as CLEAR_HISTORY_COMMAND,Ne as CLICK_COMMAND,yr as COLLABORATION_TAG,Ro as COMMAND_PRIORITY_BEFORE_CRITICAL,Lo as COMMAND_PRIORITY_BEFORE_EDITOR,Bo as COMMAND_PRIORITY_BEFORE_HIGH,zo as COMMAND_PRIORITY_BEFORE_LOW,Ko as COMMAND_PRIORITY_BEFORE_NORMAL,Io as COMMAND_PRIORITY_CRITICAL,Ao as COMMAND_PRIORITY_EDITOR,Fo as COMMAND_PRIORITY_HIGH,Do as COMMAND_PRIORITY_LOW,Po as COMMAND_PRIORITY_NORMAL,Me as COMPOSITION_END_COMMAND,kr as COMPOSITION_END_TAG,Oe as COMPOSITION_START_COMMAND,Sr as COMPOSITION_START_TAG,Fe as CONTROLLED_TEXT_INSERTION_COMMAND,un as COPY_COMMAND,fn as CUT_COMMAND,Jo as DEFAULT_EDITOR_DOM_CONFIG,Ae as DELETE_CHARACTER_COMMAND,Ke as DELETE_LINE_COMMAND,ze as DELETE_WORD_COMMAND,an as DRAGEND_COMMAND,cn as DRAGOVER_COMMAND,ln as DRAGSTART_COMMAND,on as DROP_COMMAND,yo as DecoratorNode,go as ElementNode,yn as FOCUS_COMMAND,sn as FORMAT_ELEMENT_COMMAND,Be as FORMAT_TEXT_COMMAND,hr as HISTORIC_TAG,_r as HISTORY_MERGE_TAG,gr as HISTORY_PUSH_TAG,nn as INDENT_CONTENT_COMMAND,Ee as INPUT_COMMAND,De as INSERT_LINE_BREAK_COMMAND,Pe as INSERT_PARAGRAPH_COMMAND,en as INSERT_TAB_COMMAND,El as INTERNAL_$isBlock,T as IS_ALL_FORMATTING,c as IS_ANDROID,f as IS_ANDROID_CHROME,i as IS_APPLE,d as IS_APPLE_WEBKIT,p as IS_BOLD,u as IS_CHROME,C as IS_CODE,o as IS_FIREFOX,k as IS_HIGHLIGHT,l as IS_IOS,y as IS_ITALIC,a as IS_SAFARI,m as IS_STRIKETHROUGH,v as IS_SUBSCRIPT,S as IS_SUPERSCRIPT,x as IS_UNDERLINE,Ye as KEY_ARROW_DOWN_COMMAND,Ue as KEY_ARROW_LEFT_COMMAND,Je as KEY_ARROW_RIGHT_COMMAND,He as KEY_ARROW_UP_COMMAND,Xe as KEY_BACKSPACE_COMMAND,Ze as KEY_DELETE_COMMAND,$e as KEY_DOWN_COMMAND,qe as KEY_ENTER_COMMAND,Qe as KEY_ESCAPE_COMMAND,xn as KEY_MODIFIER_COMMAND,Ge as KEY_SPACE_COMMAND,tn as KEY_TAB_COMMAND,Or as LineBreakNode,je as MOVE_TO_END,Ve as MOVE_TO_START,j as NODE_STATE_KEY,rn as OUTDENT_CONTENT_COMMAND,Ie as PASTE_COMMAND,pr as PASTE_TAG,wo as ParagraphNode,We as REDO_COMMAND,Le as REMOVE_TEXT_COMMAND,xo as RootNode,Te as SELECTION_CHANGE_COMMAND,be as SELECTION_INSERT_CLIPBOARD_NODES_COMMAND,dn as SELECT_ALL_COMMAND,mr as SKIP_COLLAB_TAG,Cr as SKIP_DOM_SELECTION_TAG,xr as SKIP_SCROLL_INTO_VIEW_TAG,vr as SKIP_SELECTION_FOCUS_TAG,K as TEXT_TYPE_TO_FORMAT,Qr as TabNode,Rr as TextNode,Re as UNDO_COMMAND,Zc as addClassNamesToElement,lr as buildImportMap,Yc as configExtension,ke as createCommand,jo as createEditor,xt as createSharedNodeState,_t as createState,qc as declarePeerDependency,Hc as defineExtension,Zl as flipDirection,Zs as getDOMOwnerDocument,_l as getDOMSelection,pl as getDOMSelectionFromTarget,ds as getDOMTextNode,ss as getEditorPropertyFromDOMNode,os as getNearestEditorFromDOMNode,Zo as getRegisteredNode,Qo as getRegisteredNodeOrThrow,Ul as getStaticNodeConfig,br as getStyleObjectFromCSS,ls as getTextDirection,$o as getTransformSetFromKlass,wl as isBlockDomNode,Vi as isCurrentlyReadOnlyMode,fs as isDOMDocumentNode,Sl as isDOMNode,us as isDOMTextNode,Jl as isDOMUnmanaged,kl as isDocumentFragment,Bs as isExactShortcutMatch,ml as isHTMLAnchorElement,vl as isHTMLElement,Cl as isHTMLTableCellElement,xl as isHTMLTableRowElement,bl as isInlineDomNode,is as isLexicalEditor,Ks as isModifierMatch,ns as isSelectionCapturedInDecoratorInput,rs as isSelectionWithinEditor,kc as makeStepwiseIterator,ea as mergeRegister,Qc as normalizeClassNames,ta as removeClassNamesFromElement,ps as removeFromParent,Xo as resetRandomKey,Gc as safeCast,Er as setDOMStyleFromCSS,wr as setDOMStyleObject,$l as setDOMUnmanaged,Bl as setNodeIndentFromDOM,Xc as shallowMergeConfig,nr as stopLexicalPropagation,hs as toggleTextFormatType,Fi as tokenizeRawText};\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,$getEditor as t,$isRootNode as n,$getSelection as o,$isRangeSelection as l,$caretRangeFromSelection as r,$isTokenOrSegmented as i,$isElementNode as s,$getCharacterOffsets as c,$cloneWithPropertiesEphemeral as f,$getNodeByKey as u,$getPreviousSelection as g,$createTextNode as d,getStyleObjectFromCSS as a,$findMatchingParent as p,INTERNAL_$isBlock as h,$caretFromPoint as y,$isExtendableTextPointCaret as m,$extendCaretToRange as S,$isChildCaret as x,$isDecoratorNode as N,$isRootOrShadowRoot as T,$hasAncestor as C,$isLeafNode as v,$setSelection as w}from\"lexical\";export{$cloneWithProperties,$selectAll}from\"lexical\";function P(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.`)}function K(e){let t=e;for(;null!=t;){if(t.nodeType===Node.TEXT_NODE)return t;t=t.firstChild}return null}function E(e){const t=e.parentNode;if(null==t)throw new Error(\"Should never happen\");return[t,Array.from(t.childNodes).indexOf(e)]}function I(t,n,o,l,r){const i=n.getKey(),s=l.getKey(),c=document.createRange();let f=t.getElementByKey(i),u=t.getElementByKey(s),g=o,d=r;if(e(n)&&(f=K(f)),e(l)&&(u=K(u)),void 0===n||void 0===l||null===f||null===u)return null;\"BR\"===f.nodeName&&([f,g]=E(f)),\"BR\"===u.nodeName&&([u,d]=E(u));const a=f.firstChild;f===u&&null!=a&&\"BR\"===a.nodeName&&0===g&&0===d&&(d=1);try{c.setStart(f,g),c.setEnd(u,d)}catch(e){return null}return!c.collapsed||g===d&&i===s||(c.setStart(u,d),c.setEnd(f,g)),c}function B(e,t){const n=e.getRootElement();if(null===n)return[];const o=n.getBoundingClientRect(),l=getComputedStyle(n),r=parseFloat(l.paddingLeft)+parseFloat(l.paddingRight),i=Array.from(t.getClientRects());let s,c=i.length;i.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=i[e],n=s&&s.top<=t.top&&s.top+s.height>t.top&&s.left+s.width>t.left,l=t.width+r===o.width;n||l?(i.splice(e--,1),c--):s=t}return i}function F(e){let t=\"\";for(const n in e)n&&(t+=`${n}: ${e[n]};`);return t}function b(e){const n=t().getElementByKey(e.getKey());if(null===n)return null;const o=n.ownerDocument.defaultView;return null===o?null:o.getComputedStyle(n)}function k(e){return b(n(e)?e:e.getParentOrThrow())}function z(e){const t=k(e);return null!==t&&\"rtl\"===t.direction}function O(e,t,n=\"self\"){const o=e.getStartEndPoints();if(t.isSelected(e)&&!i(t)&&null!==o){const[l,r]=o,i=e.isBackward(),s=l.getNode(),u=r.getNode(),g=t.is(s),d=t.is(u);if(g||d){const[o,l]=c(e),r=s.is(u),g=t.is(i?u:s),d=t.is(i?s:u);let a,p=0;if(r)p=o>l?l:o,a=o>l?o:l;else if(g){p=i?l:o,a=void 0}else if(d){p=0,a=i?o:l}const h=t.__text.slice(p,a);h!==t.__text&&(\"clone\"===n&&(t=f(t)),t.__text=h)}}return t}function R(e){if(\"text\"===e.type)return e.offset===e.getNode().getTextContentSize();const t=e.getNode();return s(t)||P(177),e.offset===t.getChildrenSize()}function A(t,o,r){let i=o.getNode(),c=r;if(s(i)){const e=i.getDescendantByIndex(o.offset);null!==e&&(i=e)}for(;c>0&&null!==i;){if(s(i)){const e=i.getLastDescendant();null!==e&&(i=e)}let r=i.getPreviousSibling(),f=0;if(null===r){let e=i.getParentOrThrow(),t=e.getPreviousSibling();for(;null===t;){if(e=e.getParent(),null===e){r=null;break}t=e.getPreviousSibling()}null!==e&&(f=e.isInline()?0:2,r=t)}let a=i.getTextContent();\"\"===a&&s(i)&&!i.isInline()&&(a=\"\\n\\n\");const p=a.length;if(!e(i)||c>=p){const e=i.getParent();i.remove(),null==e||0!==e.getChildrenSize()||n(e)||e.remove(),c-=p+f,i=r}else{const n=i.getKey(),r=t.getEditorState().read(()=>{const t=u(n);return e(t)&&t.isSimpleText()?t.getTextContent():null}),s=p-c,f=a.slice(0,s);if(null!==r&&r!==a){const e=g();let t=i;if(i.isSimpleText())i.setTextContent(r);else{const e=d(r);i.replace(e),t=e}if(l(e)&&e.isCollapsed()){const n=e.anchor.offset;t.select(n,n)}}else if(i.isSimpleText()){const e=o.key===n;let t=o.offset;t<c&&(t=p);const l=e?t-c:0,r=e?t:s;if(e&&0===l){const[e]=i.splitText(l,r);e.remove()}else{const[,e]=i.splitText(l,r);e.remove()}}else{const e=d(f);i.replace(e)}c=0}}}const _=()=>{};function L(t,n){(l(t)?t.isCollapsed():e(t)||s(t))||P(280);const o=a(l(t)?t.style:e(t)?t.getStyle():t.getTextStyle()),r=F(Object.entries(n).reduce((e,[n,l])=>(\"function\"==typeof l?e[n]=l(o[n],t):null===l?delete e[n]:e[n]=l,e),{...o}));l(t)||e(t)?t.setStyle(r):t.setTextStyle(r)}function M(e,t){if(l(e)&&e.isCollapsed()){L(e,t);const n=e.anchor.getNode();s(n)&&n.isEmpty()&&L(n,t)}$(e=>{L(e,t)});const n=e.getNodes();if(n.length>0){const e=new Set;for(const o of n){if(!s(o)||!o.canBeEmpty()||0!==o.getChildrenSize())continue;const n=o.getKey();e.has(n)||(e.add(n),L(o,t))}}}function $(t){const n=o();if(!n)return;const s=new Map,c=e=>s.get(e.getKey())||[0,e.getTextContentSize()];if(l(n))for(const e of r(n).getTextSlices())e&&s.set(e.caret.origin.getKey(),e.getSliceIndices());const f=n.getNodes();for(const n of f){if(!e(n)||!n.canHaveFormat())continue;const[o,l]=c(n);if(l!==o)if(i(n)||0===o&&l===n.getTextContentSize())t(n);else{t(n.splitText(o,l)[0===o?0:1])}}l(n)&&\"text\"===n.anchor.type&&\"text\"===n.focus.type&&n.anchor.key===n.focus.key&&D(n)}function D(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 j(e,t){const n=e.getFormatType(),o=e.getIndent();n!==t.getFormatType()&&t.setFormat(n),o!==t.getIndent()&&t.setIndent(o)}function U(e,t,n=j){if(!e)return;const o=e.getStartEndPoints();let l=!1,r=null;const i=new Map;if(o){const[e,t]=o,n=p(e.getNode(),h);r=p(t.getNode(),h),l=s(r)&&!r.is(n)&&function(e,t){if(0!==e.offset)return!1;let n=e.getNode();if(s(n)&&n.isEmpty())return!1;for(;!n.is(t);){if(null!==n.getPreviousSibling())return!1;const e=n.getParent();if(null===e)return!1;n=e}return!0}(t,r),s(n)&&i.set(n.getKey(),n),s(r)&&!l&&i.set(r.getKey(),r)}for(const t of e.getNodes())if(s(t)&&h(t)){if(l&&t.is(r))continue;i.set(t.getKey(),t)}else if(!o){const e=p(t,h);s(e)&&i.set(e.getKey(),e)}for(const e of i.values()){const o=t();n(e,o),e.replace(o,!0)}}function H(e){return e.getNode().isAttached()}function V(e){let t=e;for(;null!==t&&!T(t);){const e=t.getLatest(),n=t.getParent();0===e.getChildrenSize()&&t.remove(!0),t=n}}function W(e,t,n=null){const o=e.getStartEndPoints(),l=o?o[0]:null,r=e.getNodes(),i=r.length;if(null!==l&&(0===i||1===i&&\"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 s=null,c=[];for(let o=0;o<i;o++){const l=r[o];T(l)?(X(e,c,c.length,t,n),c=[],s=l):null===s||null!==s&&C(l,s)?c.push(l):(X(e,c,c.length,t,n),c=[l])}X(e,c,c.length,t,n)}function X(e,t,n,o,r=null){if(0===t.length)return;const i=t[0],c=new Map,f=[];let u=s(i)?i:i.getParentOrThrow();u.isInline()&&(u=u.getParentOrThrow());let d=!1;for(;null!==u;){const e=u.getPreviousSibling();if(null!==e){u=e,d=!0;break}if(u=u.getParentOrThrow(),T(u))break}const a=new Set;for(let e=0;e<n;e++){const n=t[e];s(n)&&0===n.getChildrenSize()&&a.add(n.getKey())}const p=new Set;for(let e=0;e<n;e++){const n=t[e];let l=n.getParent();if(null!==l&&l.isInline()&&(l=l.getParent()),null!==l&&v(n)&&!p.has(n.getKey())){const e=l.getKey();if(void 0===c.get(e)){const t=o();t.setFormat(l.getFormatType()),t.setIndent(l.getIndent()),f.push(t),c.set(e,t);const n=l.getChildren();t.splice(t.getChildrenSize(),0,n);for(const e of n)if(p.add(e.getKey()),s(e))for(const t of e.getChildrenKeys())p.add(t);V(l)}}else if(a.has(n.getKey())){s(n)||P(179);const e=o();e.setFormat(n.getFormatType()),e.setIndent(n.getIndent()),f.push(e),n.remove(!0)}}if(null!==r)for(let e=0;e<f.length;e++){const t=f[e];r.append(t)}let h=null;if(T(u))if(d)if(null!==r)u.insertAfter(r);else for(let e=f.length-1;e>=0;e--){const t=f[e];u.insertAfter(t)}else{const e=u.getFirstChild();if(s(e)&&(u=e),null===e)if(r)u.append(r);else for(let e=0;e<f.length;e++){const t=f[e];u.append(t),h=t}else if(null!==r)e.insertBefore(r);else for(let t=0;t<f.length;t++){const n=f[t];e.insertBefore(n),h=n}}else if(r)u.insertAfter(r);else for(let e=f.length-1;e>=0;e--){const t=f[e];u.insertAfter(t),h=t}const y=g();l(y)&&H(y.anchor)&&H(y.focus)?w(y.clone()):null!==h?h.selectEnd():e.dirty=!0}function q(e){const t=G(e);return null!==t&&\"vertical-rl\"===t.writingMode}function G(e){const t=e.anchor.getNode();return s(t)?b(t):k(t)}function J(e,t){let n=q(e)?!t:t;Y(e)&&(n=!n);const o=y(e.focus,n?\"previous\":\"next\");if(m(o))return!1;for(const e of S(o)){if(x(e))return!e.origin.isInline();if(!s(e.origin)){if(N(e.origin))return!0;break}}return!1}function Q(e,t,n,o){e.modify(t?\"extend\":\"move\",n,o)}function Y(e){const t=G(e);return null!==t&&\"rtl\"===t.direction}function Z(e,t,n){const o=Y(e);let l;l=q(e)||o?!n:n,Q(e,t,l,\"character\")}function ee(e,t,n){const o=e.getStyle(),l=a(o);return null!==l&&l[t]||n}function te(t,n,o=\"\"){let r=null;const i=t.getNodes();let s,c;if(l(t)){if(t.isCollapsed()&&\"\"!==t.style){const e=a(t.style);if(null!==e&&n in e)return e[n]}const{anchor:o,focus:l}=t,r=t.isBackward(),i=r?l.getNode():o.getNode(),f=r?o.getNode():l.getNode(),u=r?l.offset:o.offset,g=r?o.offset:l.offset;e(i)&&u===i.getTextContentSize()&&(s=i),0===g&&(c=f)}for(let t=0;t<i.length;t++){const l=i[t];if(e(l)&&!l.is(0===t?s:c)){const e=ee(l,n,o);if(null===r)r=e;else if(r!==e){r=\"\";break}}}return null===r?o:r}const ne=a,oe=A;export{_ as $addNodeStyle,j as $copyBlockFormatIndent,D as $ensureForwardRangeSelection,$ as $forEachSelectedTextNode,b as $getComputedStyleForElement,k as $getComputedStyleForParent,te as $getSelectionStyleValueForProperty,R as $isAtNodeEnd,Y as $isParentElementRTL,z as $isParentRTL,Q as $moveCaretSelection,Z as $moveCharacter,M as $patchStyleText,U as $setBlocksType,J as $shouldOverrideDefaultCharacterSelection,O as $sliceSelectedTextNodeContent,A as $trimTextContentFromAnchor,W as $wrapNodes,I as createDOMRange,B as createRectsFromDOMRange,F as getCSSFromStyleObject,ne as getStyleObjectFromCSS,oe 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,mergeRegister as e,$getSelection as n,$isRangeSelection as o,$isElementNode as r,$isTextNode as i,$getDOMTextNode as l,getDOMTextNode as s,$getDOMSlot as u,$getChildCaret as c,$findMatchingParent as f,$getChildCaretOrSelf as a,$getSiblingCaret as d,$getAdjacentSiblingOrParentSiblingCaret as g,$caretRangeFromSelection as p,$getCaretRangeInDirection as m,$removeTextFromCaretRange as h,$isTextPointCaret as y,$splitAtPointCaretNext as v,$setSelectionFromCaretRange as E,$getCaretRange as S,$getPreviousSelection as x,$caretFromPoint as C,$getRoot as N,$createParagraphNode as _,$getAdjacentChildCaret as w,$isChildCaret as A,$normalizeCaret as R,$getCollapsedCaretRange as I,$getCaretInDirection as L,$isSiblingCaret as b,$rewindSiblingCaret as P,$cloneWithProperties as O,$fullReconcile as T,$setSelection as B,makeStepwiseIterator as M,$getState as F,$setState as D,IS_FIREFOX as K,CAN_USE_DOM as H}from\"lexical\";export{$findMatchingParent,$getAdjacentSiblingOrParentSiblingCaret,$splitNode,CAN_USE_BEFORE_INPUT,CAN_USE_DOM,IS_ANDROID,IS_ANDROID_CHROME,IS_APPLE,IS_APPLE_WEBKIT,IS_CHROME,IS_FIREFOX,IS_IOS,IS_SAFARI,addClassNamesToElement,isBlockDomNode,isHTMLAnchorElement,isHTMLElement,isInlineDomNode,mergeRegister,removeClassNamesFromElement}from\"lexical\";import{createRectsFromDOMRange as $}from\"@lexical/selection\";function k(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 U(t){return`${t}px`}const j={attributes:!0,characterData:!0,childList:!0,subtree:!0};function z(e,n,o){let r=null,i=null,l=null,s=[];const u=document.createElement(\"div\");function c(){null===r&&k(182),null===i&&k(183);const{left:t,top:l}=i.getBoundingClientRect(),c=$(e,n);var f,a;u.isConnected||(a=u,(f=i).insertBefore(a,f.firstChild));let d=!1;for(let e=0;e<c.length;e++){const n=c[e],o=s[e]||document.createElement(\"div\"),r=o.style;\"absolute\"!==r.position&&(r.position=\"absolute\",d=!0);const i=U(n.left-t);r.left!==i&&(r.left=i,d=!0);const f=U(n.top-l);r.top!==f&&(o.style.top=f,d=!0);const a=U(n.width);r.width!==a&&(o.style.width=a,d=!0);const g=U(n.height);r.height!==g&&(o.style.height=g,d=!0),o.parentNode!==u&&(u.append(o),d=!0),s[e]=o}for(;s.length>c.length;)s.pop();d&&o(s)}function f(){i=null,r=null,null!==l&&l.disconnect(),l=null,u.remove();for(const t of s)t.remove();s=[]}u.style.position=\"relative\";const a=e.registerRootListener(function n(){const o=e.getRootElement();if(null===o)return f();const s=o.parentElement;if(!t(s))return f();f(),r=o,i=s,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(!u.contains(e.target))return c()}),l.observe(s,j),c()});return()=>{a(),f()}}function W(t,e,n,o){if(\"text\"!==e.type&&r(n)){const r=u(n,o,t);return[r.element,r.getFirstChildOffset()+e.offset]}return[(i(n)?l(n,o,t):s(o))||o,e.offset]}function G(t){for(const e of t){const t=e.style;\"Highlight\"!==t.background&&(t.background=\"Highlight\"),\"HighlightText\"!==t.color&&(t.color=\"HighlightText\"),t.marginTop!==U(-1.5)&&(t.marginTop=U(-1.5)),t.paddingTop!==U(4)&&(t.paddingTop=U(4)),t.paddingBottom!==U(0)&&(t.paddingBottom=U(0))}}function V(t,r=G){let i=null,l=null,s=null,u=null,c=null,f=null,a=()=>{};function d(e){e.read(()=>{const e=n();if(!o(e))return i=null,s=null,u=null,f=null,a(),void(a=()=>{});const[d,g]=function(t){const e=t.getStartEndPoints();return t.isBackward()?[e[1],e[0]]:e}(e),p=d.getNode(),m=p.getKey(),h=d.offset,y=g.getNode(),v=y.getKey(),E=g.offset,S=t.getElementByKey(m),x=t.getElementByKey(v),C=null===i||S!==l||h!==s||m!==i.getKey(),N=null===u||x!==c||E!==f||v!==u.getKey();if((C||N)&&null!==S&&null!==x){const e=function(t,e,n,o,r,i,l){const s=(t._window?t._window.document:document).createRange();return s.setStart(...W(t,e,n,o)),s.setEnd(...W(t,r,i,l)),s}(t,d,p,S,g,y,x);a(),a=z(t,e,r)}i=p,l=S,s=h,u=y,c=x,f=E},{editor:t})}return d(t.getEditorState()),e(t.registerUpdateListener(({editorState:t})=>d(t)),()=>{a()})}function X(t,e){let n=null;const o=()=>{const o=getSelection(),r=o&&o.anchorNode,i=t.getRootElement();null!==r&&null!==i&&i.contains(r)?null!==n&&(n(),n=null):null===n&&(n=V(t,e))};return t.registerRootListener(t=>{if(t){const e=t.ownerDocument;return e.addEventListener(\"selectionchange\",o),o(),()=>{null!==n&&n(),e.removeEventListener(\"selectionchange\",o)}}})}function q(t,e){for(const n of e)if(t.type.startsWith(n))return!0;return!1}function J(t,e){const n=t[Symbol.iterator]();return new Promise((t,o)=>{const r=[],i=()=>{const{done:l,value:s}=n.next();if(l)return t(r);const u=new FileReader;u.addEventListener(\"error\",o),u.addEventListener(\"load\",()=>{const t=u.result;\"string\"==typeof t&&r.push({file:s,result:t}),i()}),q(s,e)?u.readAsDataURL(s):i()};i()})}function Q(t,e){return Array.from(tt(t,e))}function Y(t){return t?t.getAdjacentCaret():null}function Z(t,e){return Array.from(lt(t,e))}function tt(t,e){return nt(\"next\",t,e)}function et(t,e){const n=g(d(t,e));return n&&n[0]}function nt(t,e,n){const o=N(),i=e||o,l=r(i)?c(i,t):d(i,t),s=rt(i),u=n?w(a(d(n,t)))||et(n,t):et(i,t);let f=s;return M({hasNext:t=>null!==t,initial:l,map:t=>({depth:f,node:t.origin}),step:t=>{if(t.isSameNodeCaret(u))return null;A(t)&&f++;const e=g(t);return!e||e[0].isSameNodeCaret(u)?null:(f+=e[1],e[0])}})}function ot(t){const e=g(d(t,\"next\"));return e&&[e[0].origin,e[1]]}function rt(t){let e=-1;for(let n=t;null!==n;n=n.getParent())e++;return e}function it(t){const e=a(d(t,\"previous\")),n=g(e,\"root\");return n&&n[0].origin}function lt(t,e){return nt(\"previous\",t,e)}function st(t,e){let n=t;for(;null!=n;){if(n instanceof e)return n;n=n.getParent()}return null}function ut(t){const e=f(t,t=>r(t)&&!t.isInline());return r(e)||k(4,t.__key),e}function ct(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 ft(t,e){const n=new Map,o=t._pendingEditorState;for(const[t,o]of e._nodeMap)n.set(t,O(o));o&&(o._nodeMap=n),T();const r=e._selection;B(null===r?null:r.clone())}function at(t){const e=n()||x();let r;if(o(e))r=C(e.focus,\"next\");else{if(null!=e){const t=e.getNodes(),n=t[t.length-1];n&&(r=d(n,\"next\"))}r=r||c(N(),\"previous\").getFlipped().insert(_())}const i=dt(t,r),l=w(i),s=A(l)?R(l):i;return E(I(s)),t.getLatest()}function dt(t,e,n){let o=L(e,\"next\");y(o)&&(0===o.offset?o=d(o.origin,\"previous\").getFlipped():o.offset===o.origin.getTextContentSize()&&(o=d(o.origin,\"next\"))),o.origin.is(t)&&(b(o)||k(342,t.getKey(),t.getType()),o=P(o)),(t.is(o.getNodeAtCaret())||t.is(o.getFlipped().getNodeAtCaret()))&&t.remove(!0);for(let t=o;t;t=v(t,n))o=t;return y(o)&&k(283),o.insert(t.isInline()?_().append(t):t),L(d(t.getLatest(),\"next\"),e.direction)}function gt(t){const e=n();if(!o(e))return void(e&&e.insertNodes([t]));const r=p(e);let i=m(h(r),\"next\").anchor;if(y(i)){const t=v(i);if(!t)return;i=t}const l=i.getFlipped();l.insert(t),E(S(l,l))}function pt(t,e){const n=e();return t.replace(n),n.append(t),n}function mt(t,e){return null!==t&&Object.getPrototypeOf(t).constructor.name===e.name}function ht(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 yt(t){const e=n();if(!o(e))return!1;const i=new Set,l=e.getNodes();for(let e=0;e<l.length;e++){const n=l[e],o=n.getKey();if(i.has(o))continue;const s=f(n,t=>r(t)&&!t.isInline());if(null===s)continue;const u=s.getKey();s.canIndent()&&!i.has(u)&&(i.add(u),t(s))}return i.size>0}function vt(t,e){c(t,\"next\").insert(e)}let Et=!(K||!H)&&void 0;function St(t,e=!1){let n=1;if(function(){if(void 0===Et){const t=document.createElement(\"div\");t.style.position=\"absolute\",t.style.opacity=\"0\",t.style.width=\"100px\",t.style.left=\"-1000px\",document.body.appendChild(t);const e=t.getBoundingClientRect();t.style.setProperty(\"zoom\",\"2\"),Et=t.getBoundingClientRect().width===e.width,document.body.removeChild(t)}return Et}()||e)for(;t;)n*=Number(window.getComputedStyle(t).getPropertyValue(\"zoom\")),t=t.parentElement;return n}function xt(t){return null!==t._parentEditor}function Ct(t,e){return Nt(t,e,null)}function Nt(t,e,n){let o=!1;for(const i of At(t))e(i)?null!==n&&n(i):(o=!0,r(i)&&Nt(i,e,n||(t=>i.insertAfter(t))),i.remove());return o}function _t(t,e){const n=[],o=Array.from(t).reverse();for(let t=o.pop();void 0!==t;t=o.pop())if(e(t))n.push(t);else if(r(t))for(const e of At(t))o.push(e);return n}function wt(t){return Rt(c(t,\"next\"))}function At(t){return Rt(c(t,\"previous\"))}function Rt(t){return M({hasNext:b,initial:t.getAdjacentCaret(),map:t=>t.origin.getLatest(),step:t=>t.getAdjacentCaret()})}function It(t){P(d(t,\"next\")).splice(1,t.getChildren())}function Lt(t){const e=e=>F(e,t),n=(e,n)=>D(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,Q as $dfs,tt as $dfsIterator,ht as $filter,wt as $firstToLastIterator,Y as $getAdjacentCaret,rt as $getDepth,ut as $getNearestBlockElementAncestorOrThrow,st as $getNearestNodeOfType,it as $getNextRightPreorderNode,ot as $getNextSiblingOrParentSibling,yt as $handleIndentAndOutdent,vt as $insertFirst,gt as $insertNodeIntoLeaf,at as $insertNodeToNearestRoot,dt as $insertNodeToNearestRootAtCaret,xt as $isEditorIsNestedEditor,At as $lastToFirstIterator,ft as $restoreEditorState,Z as $reverseDfs,lt as $reverseDfsIterator,Ct as $unwrapAndFilterDescendants,It as $unwrapNode,pt as $wrapNodeInElement,St as calculateZoomLevel,q as isMimeType,Lt as makeStateWrapper,V as markSelection,J as mediaFileReader,mt as objectKlassEquals,z as positionNodeOnRange,ct as registerNestedElementResolver,X as selectionAlwaysOnDisplay};\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{defineExtension as t,safeCast as e,CLEAR_EDITOR_COMMAND as n,COMMAND_PRIORITY_EDITOR as i,$getRoot as o,$getSelection as s,$createParagraphNode as r,$isRangeSelection as c,$isDecoratorNode as a,$isElementNode as d,stopLexicalPropagation as u,getStaticNodeConfig as l,FORMAT_TEXT_COMMAND as f,$isNodeSelection as h,COMMAND_PRIORITY_LOW as g,DecoratorNode as p,$getState as m,toggleTextFormatType as v,$setState as E,TEXT_TYPE_TO_FORMAT as x,createState as y,shallowMergeConfig as S,RootNode as b,TextNode as w,LineBreakNode as N,TabNode as O,ParagraphNode as C,$isEditorState as R,HISTORY_MERGE_TAG as D,createEditor as F,mergeRegister as I,$getEditor as M,$getNodeByKey as k,$create as _,CLICK_COMMAND as A,isDOMNode as P,$getNodeFromDOMNode as $,addClassNamesToElement as L,createCommand as j,$createNodeSelection as K,$setSelection as z,removeClassNamesFromElement as U,ElementNode as T,$getCaretRangeInDirection as B,$caretRangeFromSelection as V,$isTextPointCaret as W,$rewindSiblingCaret as G,$isSiblingCaret as Z,$isLineBreakNode as J,$isChildCaret as H,$getSiblingCaret as Y,$normalizeCaret as q,$getChildCaret as Q,$setSelectionFromCaretRange as X,$getCaretRange as tt,getDOMSelection as et,$updateDOMSelection as nt,$getPreviousSelection as it,SKIP_SELECTION_FOCUS_TAG as ot,SKIP_SCROLL_INTO_VIEW_TAG as st,SELECTION_CHANGE_COMMAND as rt,COMMAND_PRIORITY_BEFORE_CRITICAL as ct,KEY_TAB_COMMAND as at,OUTDENT_CONTENT_COMMAND as dt,INDENT_CONTENT_COMMAND as ut,INSERT_TAB_COMMAND as lt,COMMAND_PRIORITY_CRITICAL as ft,$isBlockElementNode as ht,$createRangeSelection as gt,$normalizeSelection__EXPERIMENTAL as pt}from\"lexical\";export{configExtension,declarePeerDependency,defineExtension,safeCast,shallowMergeConfig}from\"lexical\";import{$insertNodeToNearestRoot as mt,selectionAlwaysOnDisplay as vt,$handleIndentAndOutdent as Et,$getNearestBlockElementAncestorOrThrow as xt}from\"@lexical/utils\";const yt=Symbol.for(\"preact-signals\");function St(){if(Rt>1)return void Rt--;let t,e=!1;for(!function(){let t=Ct;for(Ct=void 0;void 0!==t;)t.S.v===t.v&&(t.S.i=t.i),t=t.o}();void 0!==Nt;){let n=Nt;for(Nt=void 0,Dt++;void 0!==n;){const i=n.u;if(n.u=void 0,n.f&=-3,!(8&n.f)&&Pt(n))try{n.c()}catch(n){e||(t=n,e=!0)}n=i}}if(Dt=0,Rt--,e)throw t}function bt(t){if(Rt>0)return t();It=++Ft,Rt++;try{return t()}finally{St()}}let wt,Nt;function Ot(t){const e=wt;wt=void 0;try{return t()}finally{wt=e}}let Ct,Rt=0,Dt=0,Ft=0,It=0,Mt=0;function kt(t){if(void 0===wt)return;let e=t.n;return void 0===e||e.t!==wt?(e={i:0,S:t,p:wt.s,n:void 0,t:wt,e:void 0,x:void 0,r:e},void 0!==wt.s&&(wt.s.n=e),wt.s=e,t.n=e,32&wt.f&&t.S(e),e):-1===e.i?(e.i=0,void 0!==e.n&&(e.n.p=e.p,void 0!==e.p&&(e.p.n=e.n),e.p=wt.s,e.n=void 0,wt.s.n=e,wt.s=e),e):void 0}function _t(t,e){this.v=t,this.i=0,this.n=void 0,this.t=void 0,this.l=0,this.W=null==e?void 0:e.watched,this.Z=null==e?void 0:e.unwatched,this.name=null==e?void 0:e.name}function At(t,e){return new _t(t,e)}function Pt(t){for(let e=t.s;void 0!==e;e=e.n)if(e.S.i!==e.i||!e.S.h()||e.S.i!==e.i)return!0;return!1}function $t(t){for(let e=t.s;void 0!==e;e=e.n){const n=e.S.n;if(void 0!==n&&(e.r=n),e.S.n=e,e.i=-1,void 0===e.n){t.s=e;break}}}function Lt(t){let e,n=t.s;for(;void 0!==n;){const t=n.p;-1===n.i?(n.S.U(n),void 0!==t&&(t.n=n.n),void 0!==n.n&&(n.n.p=t)):e=n,n.S.n=n.r,void 0!==n.r&&(n.r=void 0),n=t}t.s=e}function jt(t,e){_t.call(this,void 0),this.x=t,this.s=void 0,this.g=Mt-1,this.f=4,this.W=null==e?void 0:e.watched,this.Z=null==e?void 0:e.unwatched,this.name=null==e?void 0:e.name}function Kt(t,e){return new jt(t,e)}function zt(t){const e=t.m;if(t.m=void 0,\"function\"==typeof e){Rt++;const n=wt;wt=void 0;try{e()}catch(e){throw t.f&=-2,t.f|=8,Ut(t),e}finally{wt=n,St()}}}function Ut(t){for(let e=t.s;void 0!==e;e=e.n)e.S.U(e);t.x=void 0,t.s=void 0,zt(t)}function Tt(t){if(wt!==this)throw new Error(\"Out-of-order effect\");Lt(this),wt=t,this.f&=-2,8&this.f&&Ut(this),St()}function Bt(t,e){this.x=t,this.m=void 0,this.s=void 0,this.u=void 0,this.f=32,this.name=null==e?void 0:e.name}function Vt(t,e){const n=new Bt(t,e);try{n.c()}catch(t){throw n.d(),t}const i=n.d.bind(n);return i[Symbol.dispose]=i,i}function Wt(t,e={}){const n={};for(const i in t){const o=e[i],s=At(void 0===o?t[i]:o);n[i]=s}return n}_t.prototype.brand=yt,_t.prototype.h=function(){return!0},_t.prototype.S=function(t){const e=this.t;e!==t&&void 0===t.e&&(t.x=e,this.t=t,void 0!==e?e.e=t:Ot(()=>{var t;null==(t=this.W)||t.call(this)}))},_t.prototype.U=function(t){if(void 0!==this.t){const e=t.e,n=t.x;void 0!==e&&(e.x=n,t.e=void 0),void 0!==n&&(n.e=e,t.x=void 0),t===this.t&&(this.t=n,void 0===n&&Ot(()=>{var t;null==(t=this.Z)||t.call(this)}))}},_t.prototype.subscribe=function(t){return Vt(()=>{const e=this.value,n=wt;wt=void 0;try{t(e)}finally{wt=n}},{name:\"sub\"})},_t.prototype.valueOf=function(){return this.value},_t.prototype.toString=function(){return this.value+\"\"},_t.prototype.toJSON=function(){return this.value},_t.prototype.peek=function(){const t=wt;wt=void 0;try{return this.value}finally{wt=t}},Object.defineProperty(_t.prototype,\"value\",{get(){const t=kt(this);return void 0!==t&&(t.i=this.i),this.v},set(t){if(t!==this.v){if(Dt>100)throw new Error(\"Cycle detected\");!function(t){0!==Rt&&0===Dt&&t.l!==It&&(t.l=It,Ct={S:t,v:t.v,i:t.i,o:Ct})}(this),this.v=t,this.i++,Mt++,Rt++;try{for(let t=this.t;void 0!==t;t=t.x)t.t.N()}finally{St()}}}}),jt.prototype=new _t,jt.prototype.h=function(){if(this.f&=-3,1&this.f)return!1;if(32==(36&this.f))return!0;if(this.f&=-5,this.g===Mt)return!0;if(this.g=Mt,this.f|=1,this.i>0&&!Pt(this))return this.f&=-2,!0;const t=wt;try{$t(this),wt=this;const t=this.x();(16&this.f||this.v!==t||0===this.i)&&(this.v=t,this.f&=-17,this.i++)}catch(t){this.v=t,this.f|=16,this.i++}return wt=t,Lt(this),this.f&=-2,!0},jt.prototype.S=function(t){if(void 0===this.t){this.f|=36;for(let t=this.s;void 0!==t;t=t.n)t.S.S(t)}_t.prototype.S.call(this,t)},jt.prototype.U=function(t){if(void 0!==this.t&&(_t.prototype.U.call(this,t),void 0===this.t)){this.f&=-33;for(let t=this.s;void 0!==t;t=t.n)t.S.U(t)}},jt.prototype.N=function(){if(!(2&this.f)){this.f|=6;for(let t=this.t;void 0!==t;t=t.x)t.t.N()}},Object.defineProperty(jt.prototype,\"value\",{get(){if(1&this.f)throw new Error(\"Cycle detected\");const t=kt(this);if(this.h(),void 0!==t&&(t.i=this.i),16&this.f)throw this.v;return this.v}}),Bt.prototype.c=function(){const t=this.S();try{if(8&this.f)return;if(void 0===this.x)return;const t=this.x();\"function\"==typeof t&&(this.m=t)}finally{t()}},Bt.prototype.S=function(){if(1&this.f)throw new Error(\"Cycle detected\");this.f|=1,this.f&=-9,zt(this),$t(this),Rt++;const t=wt;return wt=this,Tt.bind(this,t)},Bt.prototype.N=function(){2&this.f||(this.f|=2,this.u=Nt,Nt=this)},Bt.prototype.d=function(){this.f|=8,1&this.f||Ut(this)},Bt.prototype.dispose=function(){this.d()};const Gt=t({build:(t,e,n)=>Wt(e),config:e({defaultSelection:\"rootEnd\",disabled:!1}),name:\"@lexical/extension/AutoFocus\",register(t,e,n){const i=n.getOutput();return Vt(()=>i.disabled.value?void 0:t.registerRootListener(e=>{t.focus(()=>{const t=document.activeElement;null===e||null!==t&&e.contains(t)||e.focus({preventScroll:!0})},{defaultSelection:i.defaultSelection.peek()})}))}});function Zt(){const t=o(),e=s(),n=r();t.clear(),t.append(n),null!==e&&n.select(),c(e)&&(e.format=0)}function Jt(t,e=Zt){return t.registerCommand(n,n=>(t.update(e),!0),i)}const Ht=t({build:(t,e,n)=>Wt(e),config:e({$onClear:Zt}),name:\"@lexical/extension/ClearEditor\",register(t,e,n){const{$onClear:i}=n.getOutput();return Vt(()=>Jt(t,i.value))}});function Yt(t){return!!a(t)||!(!d(t)||!t.isShadowRoot())}function qt(t,e,n,i){return!!t.isEditable()&&(n.target===e&&t.getEditorState().read(()=>{const e=o().getLastChild();if(null===e)return!1;const s=t.getElementByKey(e.getKey());return null!==s&&(!(n.clientY<=s.getBoundingClientRect().bottom)&&i(e))},{editor:t}))}const Qt=t({build:(t,e)=>Wt(e),config:e({$shouldInsertAfter:Yt,disabled:!1}),name:\"@lexical/ClickAfterLastBlock\",register:(t,e,n)=>Vt(()=>{const e=n.getOutput();if(!e.disabled.value)return t.registerRootListener(n=>{if(null===n)return;const i=i=>{qt(t,n,i,e.$shouldInsertAfter.peek())&&i.preventDefault()},s=i=>{qt(t,n,i,e.$shouldInsertAfter.peek())&&(i.preventDefault(),u(i),t.update(()=>{const t=o().getLastChild();if(null===t)return;if(!e.$shouldInsertAfter.peek()(t))return;const n=r();t.insertAfter(n),n.select()}))};return n.addEventListener(\"mousedown\",i,!0),n.addEventListener(\"click\",s,!0),()=>{n.removeEventListener(\"mousedown\",i,!0),n.removeEventListener(\"click\",s,!0)}})})});function Xt(t){const e=new Set,n=new Set;for(const i of te(t)){const t=\"function\"==typeof i?i:i.replace;l(t),e.add(t.getType()),n.add(t)}return{nodes:n,types:e}}function te(t){return(\"function\"==typeof t.nodes?t.nodes():t.nodes)||[]}const ee=y(\"format\",{parse:t=>\"number\"==typeof t?t:0});class ne extends p{$config(){return this.config(\"decorator-text\",{extends:p,stateConfigs:[{flat:!0,stateConfig:ee}]})}getFormat(){return m(this,ee)}getFormatFlags(t,e){return v(this.getFormat(),t,e)}hasFormat(t){const e=x[t];return 0!==(this.getFormat()&e)}setFormat(t){return E(this,ee,t)}toggleFormat(t){const e=this.getFormat(),n=v(e,t,null);return this.setFormat(n)}isInline(){return!0}createDOM(){return document.createElement(\"span\")}updateDOM(){return!1}}function ie(t){return t instanceof ne}function oe(t,e,n){const i=e.fontWeight,o=e.textDecoration.split(\" \"),s=\"700\"===i||\"bold\"===i,r=o.includes(\"line-through\"),c=\"italic\"===e.fontStyle,a=o.includes(\"underline\"),d=e.verticalAlign;return s&&!t.hasFormat(\"bold\")&&t.toggleFormat(\"bold\"),r&&!t.hasFormat(\"strikethrough\")&&t.toggleFormat(\"strikethrough\"),c&&!t.hasFormat(\"italic\")&&t.toggleFormat(\"italic\"),a&&!t.hasFormat(\"underline\")&&t.toggleFormat(\"underline\"),\"sub\"!==d||t.hasFormat(\"subscript\")||t.toggleFormat(\"subscript\"),\"super\"!==d||t.hasFormat(\"superscript\")||t.toggleFormat(\"superscript\"),n&&!t.hasFormat(n)&&t.toggleFormat(n),t}function se(t,e,n=ce){for(const[i,o]of Object.entries(n))t.hasFormat(o)&&(e=re(e,i));return e}function re(t,e){const n=document.createElement(e);return n.appendChild(t),n}const ce={b:\"bold\",code:\"code\",em:\"italic\",i:\"italic\",mark:\"highlight\",s:\"strikethrough\",strong:\"bold\",sub:\"subscript\",sup:\"superscript\",u:\"underline\"},ae=t({name:\"@lexical/extension/DecoratorText\",nodes:()=>[ne],register:(t,e,n)=>t.registerCommand(f,t=>{const e=s();if(h(e)||c(e))for(const n of e.getNodes())ie(n)&&n.toggleFormat(t);return!1},g)});function de(t,e){let n;return At(t(),{unwatched(){n&&(n(),n=void 0)},watched(){this.value=t(),n=e(this)}})}const ue=t({build:t=>de(()=>t.getEditorState(),e=>t.registerUpdateListener(t=>{e.value=t.editorState})),name:\"@lexical/extension/EditorState\"});function le(t,...e){const n=new URL(\"https://lexical.dev/docs/error\"),i=new URLSearchParams;i.append(\"code\",t);for(const t of e)i.append(\"v\",t);throw n.search=i.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.`)}let fe;try{fe=\"0.45.0+prod.esm\"}catch(t){}const he=fe??\"0.45.0+source\";function ge(t,e){if(t&&e&&!Array.isArray(e)&&\"object\"==typeof t&&\"object\"==typeof e){const n=t,i=e;for(const t in i)n[t]=ge(n[t],i[t]);return t}return e}const pe=0,me=1,ve=2,Ee=3,xe=4,ye=5,Se=6,be=7;function we(t){return t.id===pe}function Ne(t){return t.id===ve}function Oe(t){return function(t){return t.id===me}(t)||le(305,String(t.id),String(me)),Object.assign(t,{id:ve})}const Ce=new Set;class Re{builder;configs;_dependency;_peerNameSet;extension;state;_signal;constructor(t,e){this.builder=t,this.extension=e,this.configs=new Set,this.state={id:pe}}mergeConfigs(){let t=this.extension.config||{};const e=this.extension.mergeConfig?this.extension.mergeConfig.bind(this.extension):S;for(const n of this.configs)t=e(t,n);return t}init(t){const e=this.state;Ne(e)||le(306,String(e.id));const n={getDependency:this.getInitDependency.bind(this),getDirectDependentNames:this.getDirectDependentNames.bind(this),getPeer:this.getInitPeer.bind(this),getPeerNameSet:this.getPeerNameSet.bind(this)},i={...n,getDependency:this.getDependency.bind(this),getInitResult:this.getInitResult.bind(this),getPeer:this.getPeer.bind(this)},o=function(t,e,n){return Object.assign(t,{config:e,id:Ee,registerState:n})}(e,this.mergeConfigs(),n);let s;this.state=o,this.extension.init&&(s=this.extension.init(t,o.config,n)),this.state=function(t,e,n){return Object.assign(t,{id:xe,initResult:e,registerState:n})}(o,s,i)}build(t){const e=this.state;let n;e.id!==xe&&le(307,String(e.id),String(ye)),this.extension.build&&(n=this.extension.build(t,e.config,e.registerState));const i={...e.registerState,getOutput:()=>n,getSignal:this.getSignal.bind(this)};this.state=function(t,e,n){return Object.assign(t,{id:ye,output:e,registerState:n})}(e,n,i)}register(t,e){this._signal=e;const n=this.state;n.id!==ye&&le(308,String(n.id),String(ye));const i=this.extension.register&&this.extension.register(t,n.config,n.registerState);return this.state=function(t){return Object.assign(t,{id:Se})}(n),()=>{const t=this.state;t.id!==be&&le(309,String(n.id),String(be)),this.state=function(t){return Object.assign(t,{id:ye})}(t),i&&i()}}afterRegistration(t){const e=this.state;let n;return e.id!==Se&&le(310,String(e.id),String(Se)),this.extension.afterRegistration&&(n=this.extension.afterRegistration(t,e.config,e.registerState)),this.state=function(t){return Object.assign(t,{id:be})}(e),n}getSignal(){return void 0===this._signal&&le(311),this._signal}getInitResult(){void 0===this.extension.init&&le(312,this.extension.name);const t=this.state;return function(t){return t.id>=xe}(t)||le(313,String(t.id),String(xe)),t.initResult}getInitPeer(t){const e=this.builder.extensionNameMap.get(t);return e?e.getExtensionInitDependency():void 0}getExtensionInitDependency(){const t=this.state;return function(t){return t.id>=Ee}(t)||le(314,String(t.id),String(Ee)),{config:t.config}}getPeer(t){const e=this.builder.extensionNameMap.get(t);return e?e.getExtensionDependency():void 0}getInitDependency(t){const e=this.builder.getExtensionRep(t);return void 0===e&&le(315,this.extension.name,t.name),e.getExtensionInitDependency()}getDependency(t){const e=this.builder.getExtensionRep(t);return void 0===e&&le(315,this.extension.name,t.name),e.getExtensionDependency()}getState(){const t=this.state;return function(t){return t.id>=be}(t)||le(316,String(t.id),String(be)),t}getDirectDependentNames(){return this.builder.incomingEdges.get(this.extension.name)||Ce}getPeerNameSet(){let t=this._peerNameSet;return t||(t=new Set((this.extension.peerDependencies||[]).map(([t])=>t)),this._peerNameSet=t),t}getExtensionDependency(){if(!this._dependency){const t=this.state;(function(t){return t.id>=ye})(t)||le(317,this.extension.name),this._dependency={config:t.config,init:t.initResult,output:t.output}}return this._dependency}}const De={tag:D};function Fe(){const t=o();t.isEmpty()&&t.append(r())}const Ie=t({config:e({setOptions:De,updateOptions:De}),init:({$initialEditorState:t=Fe})=>({$initialEditorState:t,initialized:!1}),afterRegistration(t,{updateOptions:e,setOptions:n},i){const o=i.getInitResult();if(!o.initialized){o.initialized=!0;const{$initialEditorState:i}=o;if(R(i))t.setEditorState(i,n);else if(\"function\"==typeof i)t.update(()=>{i(t)},e);else if(i&&(\"string\"==typeof i||\"object\"==typeof i)){const e=t.parseEditorState(i);t.setEditorState(e,n)}}return()=>{}},name:\"@lexical/extension/InitialState\",nodes:[b,w,N,O,C]}),Me=Symbol.for(\"@lexical/extension/LexicalBuilder\");function ke(...t){return Le.fromExtensions(t).buildEditor()}function _e(){}function Ae(t){throw t}function Pe(t){return Array.isArray(t)?t:[t]}const $e=he;class Le{roots;extensionNameMap;outgoingConfigEdges;incomingEdges;conflicts;_sortedExtensionReps;PACKAGE_VERSION;constructor(t){this.outgoingConfigEdges=new Map,this.incomingEdges=new Map,this.extensionNameMap=new Map,this.conflicts=new Map,this.PACKAGE_VERSION=$e,this.roots=t;for(const e of t)this.addExtension(e)}static fromExtensions(t){const e=[Pe(Ie)];for(const n of t)e.push(Pe(n));return new Le(e)}static maybeFromEditor(t){const e=t[Me];return e&&(e.PACKAGE_VERSION!==$e&&le(292,e.PACKAGE_VERSION,$e),e instanceof Le||le(293)),e}static fromEditor(t){const e=Le.maybeFromEditor(t);return void 0===e&&le(294),e}constructEditor(){const{$initialEditorState:t,onError:e,...n}=this.buildCreateEditorArgs(),i=Object.assign(F({...n,...e?{onError:t=>{e(t,i)}}:{}}),{[Me]:this});for(const t of this.sortedExtensionReps())t.build(i);return i}buildEditor(){let t=_e;function e(){try{t()}finally{t=_e}}const n=Object.assign(this.constructEditor(),{dispose:e,[Symbol.dispose]:e});return t=I(this.registerEditor(n),()=>n.setRootElement(null)),n}hasExtensionByName(t){return this.extensionNameMap.has(t)}getExtensionRep(t){const e=this.extensionNameMap.get(t.name);if(e)return e.extension!==t&&le(295,t.name),e}addEdge(t,e,n){const i=this.outgoingConfigEdges.get(t);i?i.set(e,n):this.outgoingConfigEdges.set(t,new Map([[e,n]]));const o=this.incomingEdges.get(e);o?o.add(t):this.incomingEdges.set(e,new Set([t]))}addExtension(t){void 0!==this._sortedExtensionReps&&le(296);const e=Pe(t),[n]=e;\"string\"!=typeof n.name&&le(297,typeof n.name);let i=this.extensionNameMap.get(n.name);if(void 0!==i&&i.extension!==n&&le(298,n.name),!i){i=new Re(this,n),this.extensionNameMap.set(n.name,i);const t=this.conflicts.get(n.name);\"string\"==typeof t&&le(299,n.name,t);for(const t of n.conflictsWith||[])this.extensionNameMap.has(t)&&le(299,n.name,t),this.conflicts.set(t,n.name);for(const t of n.dependencies||[]){const e=Pe(t);this.addEdge(n.name,e[0].name,e.slice(1)),this.addExtension(e)}for(const[t,e]of n.peerDependencies||[])this.addEdge(n.name,t,e?[e]:[])}}sortedExtensionReps(){if(this._sortedExtensionReps)return this._sortedExtensionReps;const t=[],e=(n,i)=>{let o=n.state;if(Ne(o))return;const s=n.extension.name;var r;we(o)||le(300,s,i||\"[unknown]\"),we(r=o)||le(304,String(r.id),String(pe)),o=Object.assign(r,{id:me}),n.state=o;const c=this.outgoingConfigEdges.get(s);if(c)for(const t of c.keys()){const n=this.extensionNameMap.get(t);n&&e(n,s)}o=Oe(o),n.state=o,t.push(n)};for(const t of this.extensionNameMap.values())we(t.state)&&e(t);for(const e of t)for(const[t,n]of this.outgoingConfigEdges.get(e.extension.name)||[])if(n.length>0){const e=this.extensionNameMap.get(t);if(e)for(const t of n)e.configs.add(t)}for(const[t,...e]of this.roots)if(e.length>0){const n=this.extensionNameMap.get(t.name);void 0===n&&le(301,t.name);for(const t of e)n.configs.add(t)}return this._sortedExtensionReps=t,this._sortedExtensionReps}registerEditor(t){const e=this.sortedExtensionReps(),n=new AbortController,i=[()=>n.abort()],o=n.signal;for(const n of e){const e=n.register(t,o);e&&i.push(e)}for(const n of e){const e=n.afterRegistration(t);e&&i.push(e)}return I(...i)}buildCreateEditorArgs(){const t={},e=new Set,n=new Map,i=new Map,o={},s={},r=this.sortedExtensionReps();for(const c of r){const{extension:r}=c;if(void 0!==r.onError&&(t.onError=r.onError),void 0!==r.disableEvents&&(t.disableEvents=r.disableEvents),void 0!==r.parentEditor&&(t.parentEditor=r.parentEditor),void 0!==r.editable&&(t.editable=r.editable),void 0!==r.namespace&&(t.namespace=r.namespace),void 0!==r.$initialEditorState&&(t.$initialEditorState=r.$initialEditorState),r.nodes)for(const t of te(r)){if(\"function\"!=typeof t){const e=n.get(t.replace);e&&le(302,r.name,t.replace.name,e.extension.name),n.set(t.replace,c)}e.add(t)}if(r.html){if(r.html.export)for(const[t,e]of r.html.export.entries())i.set(t,e);r.html.import&&Object.assign(o,r.html.import)}r.theme&&ge(s,r.theme)}Object.keys(s).length>0&&(t.theme=s),e.size&&(t.nodes=[...e]);const c=Object.keys(o).length>0,a=i.size>0;(c||a)&&(t.html={},c&&(t.html.import=o),a&&(t.html.export=i));for(const e of r)e.init(t);return t.onError||(t.onError=Ae),t}}function je(t,e){const n=Le.fromEditor(t).getExtensionRep(e);return void 0===n&&le(303,e.name),n.getExtensionDependency()}function Ke(t,e){const n=Le.maybeFromEditor(t);if(!n)return;const i=n.extensionNameMap.get(e);return i?i.getExtensionDependency():void 0}function ze(t,e){const n=Ke(t,e);return void 0===n&&le(291,e),n}function Ue(t){return je(M(),t)}function Te(t){return Ue(t).output}function Be(t){return Ke(M(),t)}const Ve=new Set,We=t({build(t,e,n){const i=n.getDependency(ue).output,o=At({watchedNodeKeys:new Map}),r=de(()=>{},()=>Vt(()=>{const t=r.peek(),{watchedNodeKeys:e}=o.value;let n,c=!1;i.value.read(()=>{if(s())for(const[i,o]of e.entries()){if(0===o.size){e.delete(i);continue}const s=k(i),r=s&&s.isSelected()||!1;c=c||r!==(!!t&&t.has(i)),r&&(n=n||new Set,n.add(i))}}),!c&&n&&t&&n.size===t.size||(r.value=n)}));return{watchNodeKey:function(t){const e=Kt(()=>(r.value||Ve).has(t)),{watchedNodeKeys:n}=o.peek();let i=n.get(t);const s=void 0!==i;return i=i||new Set,i.add(e),s||(n.set(t,i),o.value={watchedNodeKeys:n}),e}}},dependencies:[ue],name:\"@lexical/extension/NodeSelection\"}),Ge=j(\"INSERT_HORIZONTAL_RULE_COMMAND\");class Ze extends p{static getType(){return\"horizontalrule\"}static clone(t){return new Ze(t.__key)}static importJSON(t){return He().updateFromJSON(t)}static importDOM(){return{hr:()=>({conversion:Je,priority:0})}}exportDOM(){return{element:document.createElement(\"hr\")}}createDOM(t){const e=document.createElement(\"hr\");return L(e,t.theme.hr),e}getTextContent(){return\"\\n\"}isInline(){return!1}updateDOM(){return!1}}function Je(){return{node:He()}}function He(){return _(Ze)}function Ye(t){return t instanceof Ze}const qe=t({dependencies:[ue,We],name:\"@lexical/extension/HorizontalRule\",nodes:()=>[Ze],register(t,e,n){const{watchNodeKey:o}=n.getDependency(We).output,r=At({nodeSelections:new Map}),a=t._config.theme.hrSelected??\"selected\";return I(t.registerCommand(Ge,t=>{const e=s();if(!c(e))return!1;if(null!==e.focus.getNode()){const t=He();mt(t)}return!0},i),t.registerCommand(A,t=>{if(P(t.target)){const e=$(t.target);if(Ye(e))return function(t,e=!1){const n=s(),i=t.isSelected(),o=t.getKey();let r;e&&h(n)?r=n:(r=K(),z(r)),i?r.delete(o):r.add(o)}(e,t.shiftKey),!0}return!1},g),t.registerMutationListener(Ze,(e,n)=>{bt(()=>{let n=!1;const{nodeSelections:i}=r.peek();for(const[s,r]of e.entries())if(\"destroyed\"===r)i.delete(s),n=!0;else{const e=i.get(s),r=t.getElementByKey(s);e?e.domNode.value=r:(n=!0,i.set(s,{domNode:At(r),selectedSignal:o(s)}))}n&&(r.value={nodeSelections:i})})}),Vt(()=>{const t=[];for(const{domNode:e,selectedSignal:n}of r.value.nodeSelections.values())t.push(Vt(()=>{const t=e.value;if(t){n.value?L(t,a):U(t,a)}}));return I(...t)}))}});const Qe=t({build:(t,e)=>Wt({inheritEditableFromParent:e.inheritEditableFromParent}),config:e({$getParentEditor:function(){const t=M();return Le.fromEditor(t),t},inheritEditableFromParent:!1}),init:(t,e,n)=>{const i=e.$getParentEditor();t.parentEditor=i,t.theme=t.theme||i._config.theme},name:\"@lexical/extension/NestedEditor\",register:(t,e,n)=>Vt(()=>{const e=t._parentEditor;if(e&&n.getOutput().inheritEditableFromParent.value)return t.setEditable(e.isEditable()),e.registerEditableListener(t.setEditable.bind(t))})});function Xe(t){d(t)&&t.isInline()&&t.isEmpty()&&t.remove()}const tn=t({build:(t,e,n)=>Wt(e),config:e({disabled:!1}),name:\"@lexical/NormalizeInlineElements\",register:(t,e,n)=>{const i=n.getOutput();return Vt(()=>{if(!i.disabled.value){const e=[];for(const{klass:n,transforms:i}of t._nodes.values())n.prototype instanceof T&&n.prototype.isInline!==T.prototype.isInline&&(i.add(Xe),e.push(()=>i.delete(Xe)));return()=>e.forEach(t=>t())}})}}),en=new Set([ot,st]);const nn=t({build:(t,e,n)=>Wt(e),config:e({$fixFocusOverselection:function(){const t=s();if(c(t)&&!t.isCollapsed()){const e=B(V(t),\"next\");let n=e.focus;for(W(n)&&e.anchor.origin!==n.origin&&0===n.offset&&(n=G(n.getSiblingCaret())),Z(n)&&e.anchor.origin!==n.origin&&J(n.origin)&&(n=G(n));H(n)&&e.anchor.origin!==n.origin;)n=G(Y(n.origin,\"next\"));if(Z(n)&&d(n.origin)&&(n=q(Q(n.origin,\"previous\")).getFlipped()),n=q(n),!n.isSamePointCaret(e.focus)){const t=X(tt(e.anchor,n)),i=M().getRootElement(),o=i&&et(i.ownerDocument.defaultView);o&&nt(it(),t,M(),o,en,i)}}},dateNow:Date.now,disabled:!1,thresholdMsec:100}),name:\"@lexical/NormalizeTripleClickSelection\",register:(t,e,n)=>Vt(()=>{const e=n.getOutput();if(!e.disabled.value)return t.registerRootListener(n=>{if(!n)return;let i=0;const o=t=>{if(t?3===t.detail:i>0){const n=e.dateNow.peek()();i=t&&\"mousedown\"===t.type||n-i<=e.thresholdMsec.peek()?n:0}return i};return I(t.registerCommand(rt,()=>(o(null)&&(i=0,e.$fixFocusOverselection.peek()()),!1),ct),(()=>{const t=[\"mouseup\",\"mousedown\"];return t.forEach(t=>n.addEventListener(t,o,!0)),()=>t.forEach(t=>n.removeEventListener(t,o,!0))})())})})}),on=t({build:(t,e,n)=>Wt(e),config:e({disabled:!1,onReposition:void 0}),name:\"@lexical/utils/SelectionAlwaysOnDisplay\",register:(t,e,n)=>{const i=n.getOutput();return Vt(()=>{if(!i.disabled.value)return vt(t,i.onReposition.value)})}});function sn(t){return t.canIndent()}function rn(t,e,n=sn){return I(t.registerCommand(at,e=>{const n=s();if(!c(n))return!1;e.preventDefault();const i=function(t){if(t.getNodes().filter(t=>ht(t)&&t.canIndent()).length>0)return!0;const e=t.anchor,n=t.focus,i=n.isBefore(e)?n:e,o=i.getNode(),s=xt(o);if(s.canIndent()){const t=s.getKey();let e=gt();if(e.anchor.set(t,0,\"element\"),e.focus.set(t,0,\"element\"),e=pt(e),e.anchor.is(i))return!0}return!1}(n)?e.shiftKey?dt:ut:lt;return t.dispatchCommand(i,void 0)},i),t.registerCommand(ut,()=>{const t=\"number\"==typeof e?e:e?e.peek():null,i=s();if(!c(i))return!1;const o=\"function\"==typeof n?n:n.peek();return Et(e=>{if(o(e)){const n=e.getIndent()+1;(!t||n<t)&&e.setIndent(n)}})},ft))}const cn=t({build:(t,e,n)=>Wt(e),config:e({$canIndent:sn,disabled:!1,maxIndent:null}),name:\"@lexical/extension/TabIndentation\",register(t,e,n){const{disabled:i,maxIndent:o,$canIndent:s}=n.getOutput();return Vt(()=>{if(!i.value)return rn(t,o,s)})}});export{He as $createHorizontalRuleNode,Yt as $defaultShouldInsertAfter,Ue as $getExtensionDependency,Te as $getExtensionOutput,Be as $getPeerDependency,ie as $isDecoratorTextNode,Ye as $isHorizontalRuleNode,Gt as AutoFocusExtension,Ht as ClearEditorExtension,Qt as ClickAfterLastBlockExtension,ae as DecoratorTextExtension,ne as DecoratorTextNode,ue as EditorStateExtension,qe as HorizontalRuleExtension,Ze as HorizontalRuleNode,Ge as INSERT_HORIZONTAL_RULE_COMMAND,Ie as InitialStateExtension,Le as LexicalBuilder,Qe as NestedEditorExtension,We as NodeSelectionExtension,tn as NormalizeInlineElementsExtension,nn as NormalizeTripleClickSelectionExtension,on as SelectionAlwaysOnDisplayExtension,cn as TabIndentationExtension,oe as applyFormatFromStyle,se as applyFormatToDom,bt as batch,ke as buildEditorFromExtensions,Kt as computed,Vt as effect,je as getExtensionDependencyFromEditor,Xt as getKnownTypesAndNodes,Ke as getPeerDependencyFromEditor,ze as getPeerDependencyFromEditorOrThrow,Wt as namedSignals,Jt as registerClearEditor,rn as registerTabIndentation,At as signal,Ot as untracked,de as watchedSignal};\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 t}from\"@lexical/selection\";import{$getEditor as e,createState as n,isDOMDocumentNode as o,isHTMLElement as r,$getEditorDOMRenderConfig as s,DEFAULT_EDITOR_DOM_CONFIG as i,$isLexicalNode as c,getStaticNodeConfig as l,$fullReconcile as u,defineExtension as f,shallowMergeConfig as a,RootNode as p,isDOMTextNode as d,isBlockDomNode as h,isInlineDomNode as g,IS_HIGHLIGHT as m,IS_CODE as y,$generateNodesFromRawText as x,$createTextNode as S,$createLineBreakNode as $,$createParagraphNode as v,$setFormatFromDOM as b,setNodeIndentFromDOM as C,$setDirectionFromDOM as k,$isTextNode as O,IS_BOLD as w,IS_ITALIC as D,IS_UNDERLINE as M,IS_STRIKETHROUGH as A,IS_SUBSCRIPT as N,IS_SUPERSCRIPT as I,$isElementNode as E,$isBlockElementNode as W,$isDecoratorNode as R,configExtension as j,$getRoot as T,isDocumentFragment as F,$isRootOrShadowRoot as P,ArtificialNode__DO_NOT_USE as z}from\"lexical\";import{objectKlassEquals as _}from\"@lexical/utils\";import{getPeerDependencyFromEditor as L,getKnownTypesAndNodes as U,$getExtensionOutput as B,HorizontalRuleExtension as V,$createHorizontalRuleNode as q}from\"@lexical/extension\";function G(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.`)}let H;function J(t,e){const{key:n}=e;return t&&n in t?t[n]:e.defaultValue}function Q(t){return H&&H.editor===t?H:void 0}function K(t,e){const n=Q(e);return n&&n[t]}function Y(t,e){if(\"cfg\"in e){const{cfg:n,updater:o}=e;return[n,o(J(t,n))]}return e}function Z(t,e){let n=e;for(const o of t){const[t,r]=Y(n,o),s=t.key;if(n===e&&J(n,t)===r)continue;const i=n===e||void 0===n?X(e):n;i[s]=r,n=i}return n}function X(t){return Object.create(t||null)}function tt(t,e){return[t,e]}function et(t,e){return{cfg:t,updater:e}}function nt(t,n,o,r=e()){const s=H,i=Q(r);try{return H={...i,editor:r,[t]:n},o()}finally{H=s}}function ot(t,n=()=>{}){return(o,r=e())=>e=>{const s=Q(r),i=s&&s[t],c=Z(o,i||n(r));return c&&c!==i?nt(t,c,e,r):e()}}function rt(t,e,o,r){return Object.assign(n(Symbol(e),{isEqual:r,parse:o}),{[t]:!0})}const st=(t,e,n)=>{it(t),n()};function it(t){if(!o(t))return;const e=t;if(null===e.querySelector(\"style\"))return;const n=new Map;function s(t){let e=n.get(t);if(void 0===e){e=new Set;for(let n=0;n<t.style.length;n++)e.add(t.style[n]);n.set(t,e)}return e}try{for(const t of Array.from(e.styleSheets)){let n;try{n=t.cssRules}catch(t){continue}for(const t of Array.from(n)){if(!_(t,CSSStyleRule))continue;let n;try{n=e.querySelectorAll(t.selectorText)}catch(t){continue}for(const e of Array.from(n)){if(!r(e))continue;const n=s(e);for(let o=0;o<t.style.length;o++){const r=t.style[o];n.has(r)||e.style.setProperty(r,t.style.getPropertyValue(r),t.style.getPropertyPriority(r))}}}}}catch(t){}}const ct=\"@lexical/html/DOM\",lt=Symbol.for(\"@lexical/html/DOMExportContext\"),ut=\"@lexical/html/DOMImport\",ft=Symbol.for(\"@lexical/html/DOMImportContext\"),at=()=>!0;function pt(t,e,n){return rt(lt,t,e,n)}const dt=pt(\"root\",Boolean),ht=pt(\"isExport\",Boolean);function gt(t){const e=L(t,ct);return e?e.output.defaults:void 0}function mt(t,n=e()){return J(function(t){return K(lt,t)||gt(t)}(n),t)}function yt(t){const e=L(t,ct);return e?e.output.runtime:void 0}function xt(t,n,o=e()){const r=yt(o);r&&r.setContextValue(t,n)}function St(t,n,o=e()){const r=yt(o);r&&r.setContextValue(t,n(J(r.editorContext,t)))}function $t(t=e()){const n=yt(t);return n?n.getSessionConfig():s(t)}const vt=ot(lt,gt);function bt(t,e,n){return{...e,...n,nodes:t}}function Ct(t){return e=>e instanceof t}function kt(t,{nodes:e}){if(\"*\"===e)return at;let n={};const o=[];for(const r of e)if(\"getType\"in r){const e=r.getType();if(n){const o=t[e];void 0===o&&G(339,r.name,e),n=Object.assign(n,o.types)}o.push(Ct(r))}else n=void 0,o.push(r);return n||(1===o.length?o[0]:t=>{for(const e of o)if(e(t))return!0;return!1})}function Ot(t){return(e,n,o)=>t(e,o)}function wt(t){return(e,n,o,r)=>t(e,n,r)}function Dt(t){return(e,n,o,r,s)=>t(e,n,o,s)}function Mt(t){return(e,n,o,r,s,i)=>t(e,n,o,r,i)}function At(t,e){return(n,o)=>{const r=()=>t(n,o),s=e(n);return s?s(n,r,o):r()}}function Nt(t,e){return(n,o,r)=>{const s=()=>t(n,o,r),i=e(n);return i?i(n,o,s,r):s()}}const It=Nt,Et=wt;function Wt(t,e){return(n,o,r,s)=>{const i=()=>t(n,o,r,s),c=e(n);return c?c(n,o,r,i,s):i()}}function Rt(t,e){return(n,o,r,s,i)=>{const c=()=>t(n,o,r,s,i),l=e(n);return l?l(n,o,r,s,c,i):c()}}function jt(t,e){return(n,o,r,s)=>{t(n,o,r,s);const i=e(n);i&&i(n,o,r,s)}}function Tt(t,e,n,o,r){let s=n[e];for(const n of t[e])if(\"function\"==typeof n[0]){const[t,e]=n;s=o(s,n=>t(n)&&e||void 0)}else{const t=n[1],e={};for(const n in t){const r=t[n];r&&(e[n]=r.reduce((t,e)=>o(t,()=>e),s))}s=o(s,t=>{const n=e[t.getType()];return n&&r(n)})}n[e]=s}function Ft(t,e,n,o){if(!o)return;const r=t[e];if(\"function\"==typeof n)r.push([n,o]);else{const t=r[r.length-1];let e;t&&\"types\"===t[0]?e=t[1]:(e={},r.push([\"types\",e]));for(const t in n){const n=e[t]||[];e[t]=n,n.push(o)}}}function Pt(t){return\"*\"===t.nodes}function zt(t,e){const n=function(t){const e={},{nodes:n}=U(t);for(const t of n)e[t.getType()]={klass:t,types:{}};for(const t of Object.values(e))if(t){const n=t.klass.getType();for(let{klass:o}=t;c(o.prototype);o=Object.getPrototypeOf(o)){const{ownNodeType:t}=l(o),r=t&&e[t];r&&(r.types[n]=!0)}}return e}(t),o={$createDOM:[],$decorateDOM:[],$exportDOM:[],$extractWithChild:[],$getDOMSlot:[],$shouldExclude:[],$shouldInclude:[],$updateDOM:[]};for(const t of function(t){const e=[],n=[],o=[];for(const r of t)if(Pt(r))e.push(r);else if(Array.isArray(r.nodes))for(const t of r.nodes)c(t.prototype)?o.push(1===r.nodes.length?r:{...r,nodes:[t]}):n.push(1===r.nodes.length?r:{...r,nodes:[t]});const r=new Map,s=t=>{let e=r.get(t);if(void 0===e){e=0;for(let n=t;c(n.prototype);n=Object.getPrototypeOf(n))e++;r.set(t,e)}return e};return o.sort((t,e)=>s(t.nodes[0])-s(e.nodes[0])),[...o,...n,...e]}(e)){const e=kt(n,t);for(const n in o){Ft(o,n,e,t[n])}}return o}function _t(t){return t}function Lt(t,{overrides:e}){const n=zt(t,e),o={...i,...t.dom};return Tt(n,\"$createDOM\",o,At,Ot),Tt(n,\"$exportDOM\",o,At,Ot),Tt(n,\"$extractWithChild\",o,Rt,Mt),Tt(n,\"$getDOMSlot\",o,It,Et),Tt(n,\"$shouldExclude\",o,Nt,wt),Tt(n,\"$shouldInclude\",o,Nt,wt),Tt(n,\"$updateDOM\",o,Wt,Dt),Tt(n,\"$decorateDOM\",o,jt,_t),o}function Ut(t){return{get:e=>J(t,e)}}function Bt(t){const e=Object.create(null);return Z(t,e)||e}function Vt(t,e){const n=Ut(e);return t.filter(t=>!(t.disabledForEditor&&t.disabledForEditor(n)))}function qt(t){if(\"*\"===t.nodes)return()=>!0;const e=t.nodes.map(t=>{const e=t;return c(e.prototype)?t=>t instanceof e:t});return t=>e.some(e=>e(t))}class Gt{editor;initialEditorConfig;overrides;editorContext;hasSessionGates;installed;sessionCache=new Map;constructor(t,e,n,o){this.editor=t,this.initialEditorConfig=e,this.overrides=n,this.editorContext=o,this.installed=Vt(n,o),this.hasSessionGates=n.some(t=>t.disabledForSession)}setContextValue(t,e){const n=this.installed;this.editorContext[t.key]=e;const o=Vt(this.overrides,this.editorContext);if(function(t,e){if(t.length!==e.length)return!1;for(let n=0;n<t.length;n++)if(t[n]!==e[n])return!1;return!0}(n,o))return;const r=function(t,e){const n=new Set(t),o=new Set(e),r=[];for(const e of t)o.has(e)||r.push(e);for(const t of e)n.has(t)||r.push(t);return r}(n,o);this.installed=o,this.sessionCache.clear();const s=Lt(this.initialEditorConfig,{overrides:o});this.editor._config.dom=s;const i=function(t){const e=[];for(const n of t)(n.$createDOM||n.$getDOMSlot||n.$decorateDOM)&&e.push(qt(n));return 0===e.length?null:t=>e.some(e=>e(t))}(r);if(!i)return;const c=s.$updateDOM;s.$updateDOM=(t,e,n,o)=>!!i(t)||c(t,e,n,o),this.editor.update(u,{discrete:!0}),s.$updateDOM=c}getSessionConfig(){const t=this.editor._config.dom||i;if(!this.hasSessionGates)return t;const e=Ut(K(lt,this.editor)||this.editorContext),n=[],o=[];if(this.installed.forEach((t,r)=>{t.disabledForSession&&t.disabledForSession(e)?n.push(String(r)):o.push(t)}),0===n.length)return t;const r=n.join(\",\");let s=this.sessionCache.get(r);return s||(s=Lt(this.initialEditorConfig,{overrides:o}),this.sessionCache.set(r,s)),s}}const Ht=f({build(t,e,n){const{initialEditorConfig:o}=n.getInitResult(),r=Bt(e.contextDefaults);return{defaults:r,runtime:new Gt(t,o,e.overrides,r)}},config:{contextDefaults:[],overrides:[]},html:{export:new Map([[p,()=>{const t=document.createElement(\"div\");return t.role=\"textbox\",{element:t}}]])},init(t,e){const n={dom:t.dom,nodes:t.nodes},o=Bt(e.contextDefaults),r=Vt(e.overrides,o);return t.dom=Lt(t,{overrides:r}),{initialEditorConfig:n}},mergeConfig(t,e){const n=a(t,e);for(const o of[\"overrides\",\"contextDefaults\"])e[o]&&(n[o]=[...t[o],...e[o]]);return n},name:ct}),Jt=Symbol.for(\"@lexical/html/SelectorImpl\");function Qt(t,e){const n={kind:\"element\",predicate:(o=e,0===o.length?r:1===o.length?o[0]:(t,e)=>{for(const n of o)if(!n(t,e))return!1;return!0}),tags:t};var o;const s=n=>Qt(t,[...e,n]);return{[Jt]:n,attr:(t,e,n)=>s(Zt(t,e,n)),classAll:(...t)=>s(Yt(t)),classAny:(...t)=>s(function(t){const e=Kt(t);if(0===e.length)return()=>!1;return t=>{if(!r(t))return!1;const n=t.classList;for(const t of e)if(n.contains(t))return!0;return!1}}(t)),styleAny:(t,e,n)=>s(function(t,e,n){if(\"string\"==typeof e)return n=>r(n)&&n.style.getPropertyValue(t)===e;if(e instanceof RegExp){const o=n&&n.capture,s=e;return(e,n)=>{if(!r(e))return!1;const i=e.style.getPropertyValue(t);if(!i)return!1;const c=i.match(s);return null!==c&&(void 0!==o&&(n[o]=c),!0)}}G(362,JSON.stringify(t))}(t,e,n))}}function Kt(t){const e=[];for(const n of t)n&&e.push(n);return e}function Yt(t){const e=Kt(t);return 0===e.length?()=>!0:t=>{if(!r(t))return!1;const n=t.classList;for(const t of e)if(!n.contains(t))return!1;return!0}}function Zt(t,e,n){if(!0===e)return e=>r(e)&&e.hasAttribute(t);if(\"string\"==typeof e)return n=>r(n)&&n.getAttribute(t)===e;if(e instanceof RegExp){const o=n&&n.capture,s=e;return(e,n)=>{if(!r(e))return!1;const i=e.getAttribute(t);if(null==i)return!1;const c=i.match(s);return null!==c&&(void 0!==o&&(n[o]=c),!0)}}G(361,JSON.stringify(t))}const Xt={kind:\"text\",predicate:d,tags:new Set},te={[Jt]:Xt},ee={kind:\"comment\",predicate:t=>8===t.nodeType,tags:new Set},ne={[Jt]:ee},oe={any:()=>Qt(new Set,[]),comment:()=>ne,tag(...t){t.length>0||G(363);const e=new Set;for(const n of t)e.add(n.toUpperCase());return Qt(e,[])},text:()=>te};function re(t,e){return r(t)&&t.nodeName===e.toUpperCase()}const se=/[A-Za-z0-9_-]/;class ie{constructor(t,e){this.source=t,this.pos=e}peek(t=0){return this.source[this.pos+t]||\"\"}consume(){return this.source[this.pos++]||\"\"}eof(){return this.pos>=this.source.length}skipWhitespace(){for(;!this.eof()&&/\\s/.test(this.peek());)this.pos++}readIdent(){const t=this.pos;for(;!this.eof()&&se.test(this.peek());)this.pos++;return this.source.slice(t,this.pos)}readQuoted(){const t=this.consume();this.assert('\"'===t||\"'\"===t,\"expected quote\");const e=this.pos;for(;!this.eof()&&this.peek()!==t;)\"\\\\\"===this.peek()?this.pos+=2:this.pos++;this.assert(!this.eof(),\"unterminated string\");const n=this.source.slice(e,this.pos);return this.pos++,n.replace(/\\\\(.)/g,\"$1\")}assert(t,e){t||G(364,String(this.pos+1),e,this.source)}}function ce(t){const e=new Set,n=[],o=[];if(t.skipWhitespace(),\"*\"===t.peek())t.consume();else if(se.test(t.peek())){const n=t.readIdent();n&&e.add(n.toUpperCase())}for(;!t.eof();){const e=t.peek();if(\".\"===e){t.consume();const e=t.readIdent();t.assert(\"\"!==e,'expected class name after \".\"'),o.push(e)}else if(\"#\"===e){t.consume();const e=t.readIdent();t.assert(\"\"!==e,'expected id after \"#\"'),n.push(Zt(\"id\",e))}else{if(\"[\"!==e)break;{t.consume(),t.skipWhitespace();const e=t.readIdent();t.assert(\"\"!==e,'expected attribute name after \"[\"'),t.skipWhitespace();let o=!0;if(\"=\"===t.peek()){t.consume(),t.skipWhitespace();const e=t.peek();'\"'===e||\"'\"===e?o=t.readQuoted():(o=t.readIdent(),t.assert(\"\"!==o,\"expected attribute value\")),t.skipWhitespace()}t.assert(\"]\"===t.peek(),'expected \"]\"'),t.consume(),n.push(Zt(e,o))}}}return o.length>0&&n.push(Yt(o)),{predicates:n,tags:e}}function le(t){const e=new ie(t,0),n=[];for(;;){const t=ce(e);if(n.push(t),e.skipWhitespace(),e.eof())break;e.assert(\",\"===e.peek(),'expected \",\" (selector lists are the only supported combinator)'),e.consume(),e.skipWhitespace()}if(1===n.length)return Qt(n[0].tags,n[0].predicates);const o=new Set;for(const t of n)for(const e of t.tags)o.add(e);return Qt(o,[(t,e)=>{for(const o of n){const n=t.nodeName;if(o.tags.size>0&&!o.tags.has(n))continue;let r=!0;for(const n of o.predicates)if(!n(t,e)){r=!1;break}if(r)return!0}return!1}])}function ue(t){return t}function fe(t,e,n){return rt(ft,t,e,n)}const ae=fe(\"importSource\",()=>\"unknown\"),pe=fe(\"importSourceDataTransfer\",()=>null),de=fe(\"textFormat\",()=>0),he=fe(\"textStyle\",()=>({}));function ge(t){if(!r(t))return!1;if(\"PRE\"===t.nodeName)return!0;const e=t.style.whiteSpace;return\"string\"==typeof e&&e.startsWith(\"pre\")}function me(t){if(d(t))return!0;if(!r(t))return!1;const e=t.style.display;return e?e.startsWith(\"inline\"):!h(t)&&g(t)}const ye=fe(\"whitespaceConfig\",()=>({isInline:me,preservesWhitespace:ge})),xe=fe(\"importOverlays\",()=>[]);class Se{constructor(t){this.record=t}get(t){return J(this.record,t)}set(t,e){this.record[t.key]=e}update(t,e){this.record[t.key]=e(J(this.record,t))}has(t){return Object.prototype.hasOwnProperty.call(this.record,t.key)}}function $e(t){const e=L(t,ut);return e?e.output.defaults:void 0}function ve(t,n=e()){return J(function(t){return K(ft,t)||$e(t)}(n),t)}const be=ot(ft,$e),Ce=oe,ke=new Set([\"center\",\"end\",\"justify\",\"left\",\"right\",\"start\"]);function Oe(t){return ke.has(t)}const we={B:{fontWeight:\"bold\"},EM:{fontStyle:\"italic\"},I:{fontStyle:\"italic\"},S:{textDecoration:\"line-through\"},STRONG:{fontWeight:\"bold\"},SUB:{verticalAlign:\"sub\"},SUP:{verticalAlign:\"super\"},U:{textDecoration:\"underline\"}},De={CODE:y,MARK:m};const Me=new Set([\"font-weight\",\"font-style\",\"text-decoration\",\"vertical-align\"]);const Ae={$import:(t,e)=>{const n=t.get(de),o=we[e.nodeName],r=function(t){return{fontStyle:t.style.fontStyle,fontWeight:t.style.fontWeight,textDecoration:t.style.textDecoration,verticalAlign:t.style.verticalAlign}}(e),s=o?(i=o,{fontStyle:(c=r).fontStyle||i.fontStyle,fontWeight:c.fontWeight||i.fontWeight,textDecoration:c.textDecoration||i.textDecoration,verticalAlign:c.verticalAlign||i.verticalAlign}):r;var i,c;let l=(u=n,f=function(t){let e=0,n=0;const{fontWeight:o,fontStyle:r,textDecoration:s,verticalAlign:i}=t;if(\"700\"===o||\"bold\"===o?e|=w:\"normal\"!==o&&\"400\"!==o||(n|=w),\"italic\"===r?e|=D:\"normal\"===r&&(n|=D),s){const t=s.split(\" \");t.includes(\"underline\")&&(e|=M),t.includes(\"line-through\")&&(e|=A),t.includes(\"none\")&&(n|=M|A)}return\"sub\"===i?(e|=N,n|=I):\"super\"===i?(e|=I,n|=N):\"baseline\"===i&&(n|=N|I),{clear:n,set:e}}(s),u&~f.clear|f.set);var u,f;const a=De[e.nodeName];return a&&(l|=a),l===n?t.$importChildren(e):t.$importChildren(e,{context:[tt(de,l)]})},match:Ce.tag(\"b\",\"strong\",\"em\",\"i\",\"code\",\"mark\",\"s\",\"sub\",\"sup\",\"u\",\"span\"),name:\"@lexical/html/inline-format\"};function Ne(t,e,n){let o=t;for(;;){let t=null;for(;null===(t=e?o.nextSibling:o.previousSibling);){const t=o.parentNode;if(null===t)return null;o=t}if(o=t,!n.isInline(o))return null;let r=o;for(;null!==(r=e?o.firstChild:o.lastChild);)o=r;if(d(o))return o;if(\"BR\"===o.nodeName)return null}}function Ie(t,e){return 0!==e&&O(t)?t.setFormat(e):t}function Ee(t,e){if(O(t)){const n=function(t){let e=\"\";for(const n in t)Me.has(n)||(e+=`${n}: ${t[n]}; `);return e.trimEnd()}(e);\"\"!==n&&t.setStyle(n)}return t}const We={$import:(t,e)=>{const n=t.get(de),o=t.get(he),r=t.get(ye);if(function(t,e){let n=t.parentNode;for(;null!==n;){if(e.preservesWhitespace(n))return!0;n=n.parentNode}return!1}(e,r)){const t=x(e.textContent||\"\");for(const e of t)Ie(e,n),Ee(e,o);return t}const s=function(t,e){let n=(t.textContent||\"\").replace(/\\r/g,\"\").replace(/[ \\t\\n]+/g,\" \");if(0===n.length)return\"\";if(\" \"===n[0]){let o=t,r=!0;for(;null!==o&&null!==(o=Ne(o,!1,e));){const t=o.textContent||\"\";if(t.length>0){/[ \\t\\n]$/.test(t)&&(n=n.slice(1)),r=!1;break}}r&&(n=n.slice(1))}if(n.length>0&&\" \"===n[n.length-1]){let o=t,r=!0;for(;null!==o&&null!==(o=Ne(o,!0,e));)if((o.textContent||\"\").replace(/^( |\\t|\\r?\\n)+/,\"\").length>0){r=!1;break}r&&(n=n.slice(0,-1))}return n}(e,r);if(\"\"===s)return[];const i=S(s);return Ie(i,n),Ee(i,o),[i]},match:Ce.text(),name:\"@lexical/html/#text\"},Re={$import:()=>[],match:Ce.tag(\"script\",\"style\"),name:\"@lexical/html/script-style-ignore\"},je={$import:()=>[$()],match:Ce.tag(\"br\"),name:\"@lexical/html/br\"},Te=[Re,{$import:(t,e)=>{const n=v();if(b(n,e),C(e,n),\"\"===n.getFormatType()){const t=e.getAttribute(\"align\");t&&Oe(t)&&n.setFormat(t)}return k(n,e),[n.splice(0,0,t.$importChildren(e))]},match:Ce.tag(\"p\"),name:\"@lexical/html/p\"},We,je,Ae];function Fe(t,e){const n=[];let o=0,r=0;for(;o<t.length&&r<e.length;)t[o]<=e[r]?n.push(t[o++]):n.push(e[r++]);for(;o<t.length;)n.push(t[o++]);for(;r<e.length;)n.push(e[r++]);return n}function Pe(t){const e=[],n=new Map,o=[],r=[],s=[],i=new Set;t.forEach((t,c)=>{const l=function(t){const e=t[Jt];return void 0===e&&G(360),e}(t.match),u=t.name||function(t,e){if(\"text\"===t.kind)return`#text@${e}`;if(\"comment\"===t.kind)return`#comment@${e}`;if(0===t.tags.size)return`*@${e}`;const n=Array.from(t.tags).join(\",\").toLowerCase();return`${n}@${e}`}(l,c);if(t.name&&i.add(t.name),e.push({$import:t.$import,name:u,predicate:l.predicate}),\"text\"===l.kind)r.push(c);else if(\"comment\"===l.kind)s.push(c);else if(0===l.tags.size)o.push(c);else for(const t of l.tags){let e=n.get(t);e||(e=[],n.set(t,e)),e.push(c)}});const c=new Map;if(0===o.length)for(const[t,e]of n)c.set(t,e);else for(const[t,e]of n)c.set(t,Fe(e,o));return{byTag:c,commentIndices:s,rules:e,textIndices:r,wildcardIndices:o}}function ze(t,e){return d(e)?t.textIndices:8===e.nodeType?t.commentIndices:r(e)?t.byTag.get(e.nodeName)||t.wildcardIndices:_e}const _e=Object.freeze([]);function Le(t){const e=[];for(const n of t)if(Ue(n))for(const t of n.rules)e.push(t);else e.push(n);return e}function Ue(t){return\"object\"==typeof t&&null!==t&&\"__type\"in t&&\"CompiledOverlayRules\"===t.__type}function Be(t){const e=Le(t);return{__type:\"CompiledOverlayRules\",dispatch:Pe(e),rules:e}}function Ve(t){return W(t)||R(t)&&!t.isInline()}function qe(t,e){const n=[];let o=[];const r=()=>{0!==o.length&&(n.push(e().splice(0,0,o)),o=[])};for(const s of t)if(Ve(s)){if(r(),E(s)){const t=qe(s.getChildren(),e);s.splice(0,s.getChildrenSize(),t)}n.push(s)}else o.push(s);return r(),n}function Ge(t,e,n){const o=v();if(r(n)){const t=n.style.textAlign;Oe(t)&&o.setFormat(t)}return[o.splice(0,0,t)]}const He={$accepts:Ve,$packageRun:Ge,name:\"BlockSchema\"},Je={$accepts:t=>!Ve(t),name:\"InlineSchema\"},Qe={$accepts:Ve,$packageRun:t=>t,name:\"NestedBlockSchema\"},Ke={$accepts:Ve,$packageRun:Ge,name:\"RootSchema\"},Ye=Object.freeze({});function Ze(t,e){const n={$importChildren:(e,n)=>function(t,e,n){const o=n&&n.rules?n.rules.dispatch:void 0;o&&t.overlays.push(o);try{const o=()=>Xe(t,e,n);return n&&n.context?be(n.context,t.editor)(o):o()}finally{o&&t.overlays.pop()}}(t,e,n),$importOne:(e,n)=>tn(t,e,n),captures:e,get:e=>ve(e,t.editor),session:t.session};return n}function Xe(t,e,n){const o=n&&n.$onChild,r=[];for(const n of Array.from(e.childNodes)){const e=tn(t,n,void 0);for(const t of e){const e=o?o(t):t;null!=e&&r.push(e)}}const s=n&&n.$after?n.$after(r):r,i=n&&n.schema;return i?function(t,e,n,o){const r=[];let s=null;const i=()=>{if(null===s)return;const e=s;if(s=null,t.$packageRun){const s=t.$packageRun(e,n,o);if(s.length>0){for(const t of s)r.push(t);return}}if(\"hoist\"===t.onReject)for(const t of e)r.push(t)};for(const o of e)t.$accepts(o,n)?(i(),r.push(o)):(null===s&&(s=[]),s.push(o));return i(),t.$finalize?t.$finalize(r,n):r}(i,s,null,e):s}function tn(t,e,n){const o=()=>function(t,e){const n=function(t,e){const n=[];for(let o=t.overlays.length-1;o>=0;o--){const r=t.overlays[o],s=ze(r,e);s.length>0&&n.push({dispatch:r,indices:s})}const o=ze(t.dispatch,e);o.length>0&&n.push({dispatch:t.dispatch,indices:o});return n}(t,e);if(0===n.length)return en(t,e);let o=0,r=0;const s=()=>{for(;o<n.length;){const{dispatch:i,indices:c}=n[o];for(;r<c.length;){const n=c[r++],o=i.rules[n],l={};if(o.predicate(e,l)){const n=Ze(t,0===Object.keys(l).length?Ye:l);try{return o.$import(n,e,s)}catch(t){throw t}}}o++,r=0}return en(t,e)};return s()}(t,e);return n&&n.context?be(n.context,t.editor)(o):o()}function en(t,e){if(0===e.childNodes.length)return[];const n=[];for(const o of Array.from(e.childNodes)){const e=tn(t,o,void 0);for(const t of e)n.push(t)}return n}const nn={$import:(t,e)=>t.$importChildren(e),match:oe.any(),name:\"@lexical/html/default-hoist\"},on=f({build(t,e){const n=Pe(Le(e.rules)),r=Z(e.contextDefaults,void 0),s=e.preprocess;return{$generateNodesFromDOM:(e,i)=>{const c=i&&i.context?Z(i.context,r):r,l=void 0!==c&&c!==r?c:Object.create(r||null),u=new Se(l),f={session:u};return function(t,e,n){let o=t.length-1;const r=()=>{for(;o>=0;)return void(0,t[o--])(e,n,r)};r()}(i&&i.preprocess?[...s,...i.preprocess]:s,e,f),nt(ft,l,()=>function(t,e,n,r){return Xe({dispatch:t,editor:e,overlays:r.get(xe).map(t=>t.dispatch),session:r},o(n)?n.body:n,{schema:Ke})}(n,t,e,u),t)},defaults:r}},config:{contextDefaults:[],preprocess:[st],rules:[nn]},mergeConfig:(t,e)=>a(t,{...e,...e.contextDefaults&&{contextDefaults:[...t.contextDefaults,...e.contextDefaults]},...e.preprocess&&{preprocess:[...t.preprocess,...e.preprocess]},...e.rules&&{rules:[...e.rules,...t.rules]}}),name:ut});function rn(t,e){return B(on).$generateNodesFromDOM(t,e)}const sn=f({dependencies:[j(on,{rules:Te})],name:\"@lexical/html/CoreImport\"}),cn=[{$import:()=>[q()],match:oe.tag(\"hr\"),name:\"@lexical/html/hr\"}],ln=f({dependencies:[sn,V,j(on,{rules:cn})],name:\"@lexical/html/HorizontalRuleImport\"}),un={any:oe.any,comment:oe.comment,css:le,tag:oe.tag,text:oe.text},fn=new Set([\"STYLE\",\"SCRIPT\"]);function an(t,e){it(e);const n=o(e)?e.body.childNodes:e.childNodes,r=[],s=[];for(const e of n)if(!fn.has(e.nodeName)){const n=mn(e,t,s,!1);if(null!==n)for(const t of n)r.push(t)}return function(t){for(const e of t)e.getParent()&&e.getNextSibling()instanceof z&&e.insertAfter($());for(const e of t){const t=e.getParent();t&&t.splice(e.getIndexWithinParent(),1,e.getChildren())}}(s),r}function pn(t,n=null,o=e()){return vt([tt(ht,!0)],o)(()=>{const e=T(),r=$t(o),s=t.append.bind(t);for(const t of e.getChildren())gn(o,t,s,n,r);return t})}function dn(t,n=T()){const o=e();return vt([tt(ht,!0),tt(dt,!0)],o)(()=>{const e=$t(o),r=t.append.bind(t);return gn(o,n,r,null,e),t})}function hn(t,e=null){return(\"undefined\"==typeof document||\"undefined\"==typeof window&&void 0===global.window)&&G(338),pn(document.createElement(\"div\"),e,t).innerHTML}function gn(e,n,o,i=null,c=s(e)){let l=c.$shouldInclude(n,i,e);const u=c.$shouldExclude(n,i,e);let f=n;null!==i&&O(n)&&(f=t(i,n,\"clone\"));const a=c.$exportDOM(f,e),{element:p,after:d,append:h,$getChildNodes:g}=a;if(!p)return!1;const m=document.createDocumentFragment(),y=g?g():E(f)?f.getChildren():[],x=m.append.bind(m);for(const t of y){const o=gn(e,t,x,i,c);!l&&o&&c.$extractWithChild(n,t,i,\"html\",e)&&(l=!0)}if(l&&!u){if((r(p)||F(p))&&(h?h(m):p.append(m)),o(p),d){const t=d.call(f,p);t&&(F(p)?p.replaceChildren(t):p.replaceWith(t))}}else o(m);return l}function mn(t,e,n,o,r=new Map,s){const i=[];if(fn.has(t.nodeName))return i;let c=null;const l=function(t,e){const{nodeName:n}=t,o=e._htmlConversions.get(n.toLowerCase());let r=null;if(void 0!==o)for(const e of o){const n=e(t);null!==n&&(null===r||(r.priority||0)<=(n.priority||0))&&(r=n)}return null!==r?r.conversion:null}(t,e),u=l?l(t):null;let f=null;if(null!==u){f=u.after;const e=u.node;if(c=Array.isArray(e)?e[e.length-1]:e,null!==c){for(const[,t]of r)if(c=t(c,s),!c)break;c&&i.push(...Array.isArray(e)?e:[c])}null!=u.forChild&&r.set(t.nodeName,u.forChild)}const a=t.childNodes;let p=[];const d=(null==c||!P(c))&&(null!=c&&W(c)||o);for(let t=0;t<a.length;t++)p.push(...mn(a[t],e,n,d,new Map(r),c));if(null!=f&&(p=f(p)),h(t)&&(p=yn(t,p,d?()=>{const t=new z;return n.push(t),t}:v)),null==c)if(p.length>0)for(const t of p)i.push(t);else h(t)&&function(t){if(null==t.nextSibling||null==t.previousSibling)return!1;return g(t.nextSibling)&&g(t.previousSibling)}(t)&&i.push($());else E(c)&&c.append(...p);return i}function yn(t,e,n){const o=t.style.textAlign,r=[];let s=[];for(let t=0;t<e.length;t++){const i=e[t];if(W(i))o&&!i.getFormat()&&i.setFormat(o),r.push(i);else if(s.push(i),t===e.length-1||t<e.length-1&&W(e[t+1])){const t=n();t.setFormat(o),t.append(...s),r.push(t),s=[]}}return r}export{qe as $distributeInlineWrapper,pn as $generateDOMFromNodes,dn as $generateDOMFromRoot,hn as $generateHtmlFromNodes,an as $generateNodesFromDOM,rn as $generateNodesFromDOMViaExtension,ve as $getImportContextValue,mt as $getRenderContextValue,$t as $getSessionDOMRenderConfig,st as $inlineStylesFromStyleSheets,Ve as $isBlockLevel,xt as $setRenderContextValue,St as $updateRenderContextValue,be as $withImportContext,vt as $withRenderContext,He as BlockSchema,sn as CoreImportExtension,Te as CoreImportRules,on as DOMImportExtension,Ht as DOMRenderExtension,ln as HorizontalRuleImportExtension,cn as HorizontalRuleImportRules,xe as ImportOverlays,ae as ImportSource,pe as ImportSourceDataTransfer,de as ImportTextFormat,he as ImportTextStyle,ye as ImportWhitespaceConfig,Je as InlineSchema,Qe as NestedBlockSchema,ht as RenderContextExport,dt as RenderContextRoot,Ke as RootSchema,et as contextUpdater,tt as contextValue,fe as createImportState,pt as createRenderState,me as defaultIsInline,ge as defaultPreservesWhitespace,ue as defineImportRule,Be as defineOverlayRules,bt as domOverride,re as isElementOfTag,le as parseSelector,un as sel};\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{getTextDirection as t,$isElementNode as e,$isTabNode as n,$isLineBreakNode as r,$createLineBreakNode as i,$createTabNode as o,$getSiblingCaret as s,$create as l,ElementNode as u,addClassNamesToElement as c,setDOMStyleFromCSS as a,$getEditor as g,$isTextNode as h,$createParagraphNode as f,isHTMLElement as p,$applyNodeReplacement as d,TextNode as m,removeClassNamesFromElement as x,defineExtension as _,KEY_ENTER_COMMAND as S,$getSelection as y,$isRangeSelection as b,COMMAND_PRIORITY_LOW as v,configExtension as C,isDOMDocumentNode as T,isDOMTextNode as N,$generateNodesFromRawText as A,safeCast as O,mergeRegister as P,KEY_TAB_COMMAND as w,INSERT_TAB_COMMAND as H,$insertNodes as D,INDENT_CONTENT_COMMAND as B,OUTDENT_CONTENT_COMMAND as E,KEY_ARROW_UP_COMMAND as L,KEY_ARROW_DOWN_COMMAND as $,MOVE_TO_START as k,MOVE_TO_END as F,$createPoint as M,$setSelectionFromCaretRange as J,$getCaretRangeInDirection as z,$getCaretRange as I,$getTextPointCaret as K,$normalizeCaret as j}from\"lexical\";import{getPeerDependencyFromEditor as R,effect as W,namedSignals as q}from\"@lexical/extension\";import{CoreImportExtension as U,DOMImportExtension as V,defineImportRule as G,sel as Q,ImportOverlays as X,defineOverlayRules as Y}from\"@lexical/html\";function Z(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 tt(t,e){let r=t;for(let i=s(t,e);i&&(Pt(i.origin)||n(i.origin));i=i.getAdjacentCaret())r=i.origin;return r}function et(t){return tt(t,\"previous\")}function nt(t){return tt(t,\"next\")}function rt(n){const r=et(n),i=nt(n);let o=r;for(;null!==o;){if(Pt(o)){const e=t(o.getTextContent());if(null!==e)return e}if(o===i)break;o=o.getNextSibling()}const s=r.getParent();if(e(s)){const t=s.getDirection();if(\"ltr\"===t||\"rtl\"===t)return t}return null}function it(t,e){let i=null,o=null,s=t,l=e,u=t.getTextContent();for(;;){if(0===l){if(s=s.getPreviousSibling(),null===s)break;if(Pt(s)||n(s)||r(s)||Z(167),r(s)){i={node:s,offset:1};break}l=Math.max(0,s.getTextContentSize()-1),u=s.getTextContent()}else l--;const t=u[l];Pt(s)&&\" \"!==t&&(o={node:s,offset:l})}if(null!==o)return o;let c=null;if(e<t.getTextContentSize())Pt(t)&&(c=t.getTextContent()[e]);else{const e=t.getNextSibling();Pt(e)&&(c=e.getTextContent()[0])}if(null!==c&&\" \"!==c)return i;{const n=function(t,e){let n=t,i=e,o=t.getTextContent(),s=t.getTextContentSize();for(;;){if(!Pt(n)||i===s){if(n=n.getNextSibling(),null===n||r(n))return null;Pt(n)&&(i=0,o=n.getTextContent(),s=n.getTextContentSize())}if(Pt(n)){if(\" \"!==o[i])return{node:n,offset:i};i++}}}(t,e);return null!==n?n:i}}function ot(t){const e=nt(t);return r(e)&&Z(168),e}function st(t){const e=[];return t.split(\"\\n\").forEach((t,n)=>{n>0&&e.push(i());t.split(\"\\t\").forEach((t,n)=>{n>0&&e.push(o()),t.length>0&&e.push(Ot(t))})}),e}function lt(t,e,n){if(!Number.isInteger(e)||e<=0)return!1;const r=t.getTextContent(),i=/^ +/.exec(r);if(!i)return!1;const o=Math.min(e,i[0].length),s=t.getKey(),l=n.anchor.key===s&&\"text\"===n.anchor.type?n.anchor.offset:null,u=n.focus.key===s&&\"text\"===n.focus.type?n.focus.offset:null;return t.spliceText(0,o,\"\"),null!==l&&n.anchor.set(s,Math.max(0,l-o),\"text\"),null!==u&&n.focus.set(s,Math.max(0,u-o),\"text\"),!0}const ut=\"javascript\",ct=()=>ut;function at(t,e){for(const n of t.childNodes){if(p(n)&&n.tagName===e)return!0;if(at(n,e))return!0}return!1}const gt=\"data-language\",ht=\"data-highlight-language\",ft=\"data-theme\",pt=()=>{};class dt extends u{__language;__theme;__isSyntaxHighlightSupported;static getType(){return\"code\"}static clone(t){return new dt(t.__language,t.__key)}constructor(t,e){super(e),this.__language=t||void 0,this.__isSyntaxHighlightSupported=!1,this.__theme=void 0}afterCloneFrom(t){super.afterCloneFrom(t),this.__language=t.__language,this.__theme=t.__theme,this.__isSyntaxHighlightSupported=t.__isSyntaxHighlightSupported}createDOM(t){const e=document.createElement(\"code\");c(e,t.theme.code),e.setAttribute(\"spellcheck\",\"false\");const n=this.getLanguage();n&&(e.setAttribute(gt,n),this.getIsSyntaxHighlightSupported()&&e.setAttribute(ht,n));const r=this.getTheme();r&&e.setAttribute(ft,r);const i=this.getStyle();return i&&a(e.style,i),e}updateDOM(t,e,n){const r=this.__language,i=t.__language;r?r!==i&&e.setAttribute(gt,r):i&&e.removeAttribute(gt);const o=this.__isSyntaxHighlightSupported;t.__isSyntaxHighlightSupported&&i?o&&r?r!==i&&e.setAttribute(ht,r):e.removeAttribute(ht):o&&r&&e.setAttribute(ht,r);const s=this.__theme,l=t.__theme;s?s!==l&&e.setAttribute(ft,s):l&&e.removeAttribute(ft);const u=this.__style,c=t.__style;return u!==c&&a(e.style,u,c),!1}exportDOM(t){const e=document.createElement(\"pre\");c(e,t._config.theme.code),e.setAttribute(\"spellcheck\",\"false\");const n=this.getLanguage();n&&(e.setAttribute(gt,n),this.getIsSyntaxHighlightSupported()&&e.setAttribute(ht,n));const r=this.getTheme();r&&e.setAttribute(ft,r);const i=this.getStyle();return i&&a(e.style,i),{element:e}}static importDOM(){return{code:t=>null!=t.textContent&&(/\\r?\\n/.test(t.textContent)||at(t,\"BR\"))?{conversion:_t,priority:1}:null,div:()=>({conversion:St,priority:1}),pre:()=>({conversion:_t,priority:0}),table:t=>Ct(t)?{conversion:yt,priority:3}:null,td:t=>{const e=t,n=e.closest(\"table\");return e.classList.contains(\"js-file-line\")||n&&Ct(n)?{conversion:bt,priority:3}:null},tr:t=>{const e=t.closest(\"table\");return e&&Ct(e)?{conversion:bt,priority:3}:null}}}static importJSON(t){return mt().updateFromJSON(t)}updateFromJSON(t){return super.updateFromJSON(t).setLanguage(t.language).setTheme(t.theme)}exportJSON(){return{...super.exportJSON(),language:this.getLanguage(),theme:this.getTheme()}}insertNewAfter(t,e=!0){if(!R(g(),\"@lexical/code\")){pt();const e=Tt(t);if(e)return e}const{anchor:r,focus:s}=t,l=(r.isBefore(s)?r:s).getNode();if(h(l)){let t=et(l);const e=[];for(;;)if(n(t))e.push(o()),t=t.getNextSibling();else{if(!Pt(t))break;{let n=0;const r=t.getTextContent(),i=t.getTextContentSize();for(;n<i&&\" \"===r[n];)n++;if(0!==n&&e.push(Ot(\" \".repeat(n))),n!==i)break;t=t.getNextSibling()}}const s=l.splitText(r.offset)[0],u=0===r.offset?0:1,c=s.getIndexWithinParent()+u,a=l.getParentOrThrow(),g=[i(),...e];a.splice(c,0,g);const h=e[e.length-1];h?h.select():0===r.offset?s.selectPrevious():s.getNextSibling().selectNext(0,0)}if(xt(l)){const{offset:e}=t.anchor;l.splice(e,0,[i()]),l.select(e+1,e+1)}return null}canIndent(){return!1}collapseAtStart(){const t=f();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}getLanguage(){return this.getLatest().__language}setIsSyntaxHighlightSupported(t){const e=this.getWritable();return e.__isSyntaxHighlightSupported=t,e}getIsSyntaxHighlightSupported(){return this.getLatest().__isSyntaxHighlightSupported}setTheme(t){const e=this.getWritable();return e.__theme=t||void 0,e}getTheme(){return this.getLatest().__theme}}function mt(t,e){return l(dt).setLanguage(t).setTheme(e)}function xt(t){return t instanceof dt}function _t(t){return{node:mt(t.getAttribute(gt))}}function St(t){const e=t,n=vt(e);return n||function(t){let e=t.parentElement;for(;null!==e;){if(vt(e))return!0;e=e.parentElement}return!1}(e)?{node:n?mt():null}:{node:null}}function yt(){return{node:mt()}}function bt(){return{node:null}}function vt(t){return null!==t.style.fontFamily.match(\"monospace\")}function Ct(t){return t.classList.contains(\"js-file-line-container\")}function Tt(t){const{anchor:e}=t;if(t.isCollapsed()&&\"element\"===e.type){const t=e.getNode();if(xt(t)){const n=t.getChildrenSize();if(n>=2&&e.offset===n){const e=t.getLastChild();if(r(e)&&r(e.getPreviousSibling())){const e=f();return t.splice(n-2,2,[]).insertAfter(e,!1),e.select(),e}}}}return null}class Nt extends m{__highlightType;constructor(t=\"\",e,n){super(t,n),this.__highlightType=e}static getType(){return\"code-highlight\"}static clone(t){return new Nt(t.__text,t.__highlightType||void 0,t.__key)}afterCloneFrom(t){super.afterCloneFrom(t),this.__highlightType=t.__highlightType}getHighlightType(){return this.getLatest().__highlightType}setHighlightType(t){const e=this.getWritable();return e.__highlightType=t||void 0,e}canHaveFormat(){return!1}createDOM(t){const e=super.createDOM(t),n=At(t.theme,this.__highlightType);return c(e,n),e}updateDOM(t,e,n){const r=super.updateDOM(t,e,n),i=At(n.theme,t.__highlightType),o=At(n.theme,this.__highlightType);return i!==o&&(i&&x(e,i),o&&c(e,o)),r}static importJSON(t){return Ot().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 mt()}}function At(t,e){return e&&t&&t.codeHighlight&&t.codeHighlight[e]}function Ot(t=\"\",e){return d(new Nt(t,e))}function Pt(t){return t instanceof Nt}const wt=_({name:\"@lexical/code\",nodes:()=>[dt,Nt],register:t=>t.registerCommand(S,t=>{const e=y();return!(!b(e)||!Tt(e))&&(t.preventDefault(),!0)},v)}),Ht=\"data-language\";function Dt(t){return null!==t.style.fontFamily.match(\"monospace\")}function Bt(t){let e=t.parentElement;for(;null!==e;){if(Dt(e))return!0;e=e.parentElement}return!1}const Et=Y([G({$import:(t,e)=>t.$importChildren(e),match:Q.tag(\"tr\",\"td\"),name:\"@lexical/code/github-code-table/unwrap\"})]),Lt=G({$import:(t,e)=>[mt(e.getAttribute(Ht)).splice(0,0,t.$importChildren(e))],match:Q.tag(\"pre\"),name:\"@lexical/code/pre\"}),$t=G({$import:(t,e,n)=>{const r=e.textContent||\"\";return/\\r?\\n/.test(r)||null!==e.querySelector(\"br\")?[mt(e.getAttribute(Ht)).splice(0,0,t.$importChildren(e))]:n()},match:Q.tag(\"code\"),name:\"@lexical/code/code-multiline\"});function kt(t){if(!p(t))return!1;const e=t.style.fontFamily,n=t.style.whiteSpace;return\"string\"==typeof e&&/monospace/i.test(e)&&\"string\"==typeof n&&n.startsWith(\"pre\")}function Ft(t){let e=!1;const n=[];let r=\"\",i=!1;const o=()=>{i&&(n.push(r),r=\"\",i=!1)};for(const s of Array.from(t.childNodes))if(p(s))\"DIV\"===s.tagName?(o(),n.push(s.textContent||\"\"),e=!0):\"BR\"===s.tagName?(o(),n.push(\"\"),e=!0):(r+=s.textContent||\"\",i=!0);else if(N(s)){const t=s.textContent||\"\";t.length>0&&(r+=t,i=!0)}return o(),e?n:null}function Mt(t){for(const e of Array.from(t.children)){if(p(e)&&kt(e)){if(null!==Ft(e))return!0;const t=e.nextElementSibling;if(t&&kt(t))return!0;continue}if(Mt(e))return!0}return!1}const Jt=Y([G({$import:(t,e,n)=>{if(!kt(e)||Bt(e))return n();const r=Ft(e);return null===r||0===r.length?n():[mt().splice(0,0,A(r.join(\"\\n\")))]},match:Q.tag(\"div\"),name:\"@lexical/code/vscode-wrapper\"}),G({$import:(t,e,n)=>{if(!kt(e)||Bt(e))return n();const r=e.previousElementSibling;if(r&&kt(r))return[];const i=[];let o=e;for(;o&&kt(o);)i.push(\"BR\"===o.tagName?\"\":o.textContent||\"\"),o=o.nextElementSibling;return i.length<2?n():[mt().splice(0,0,A(i.join(\"\\n\")))]},match:Q.tag(\"div\",\"br\"),name:\"@lexical/code/vscode-line-run\"})]),zt=G({$import:(t,e,n)=>Dt(e)?[mt().splice(0,0,t.$importChildren(e))]:Bt(e)?t.$importChildren(e):n(),match:Q.tag(\"div\"),name:\"@lexical/code/div\"}),It=[G({$import:(t,e)=>[mt().splice(0,0,t.$importChildren(e,{rules:Et}))],match:Q.tag(\"table\").classAll(\"js-file-line-container\"),name:\"@lexical/code/github-code-table\"}),G({$import:(t,e)=>t.$importChildren(e),match:Q.tag(\"td\").classAll(\"js-file-line\"),name:\"@lexical/code/github-code-cell-by-class\"}),$t,Lt,zt],Kt=_({dependencies:[U,wt,C(V,{preprocess:[(t,e,n)=>{Mt(T(t)?t.body:t)&&e.session.update(X,t=>[...t,Jt]),n()}],rules:It})],name:\"@lexical/code/Import\"});function jt(t){if(!b(t))return!1;const e=t.anchor.getNode(),n=xt(e)?e:e.getParent(),r=t.focus.getNode(),i=xt(r)?r:r.getParent();return xt(n)&&n.is(i)}function Rt(t){const e=t.getNodes(),i=[];if(1===e.length&&xt(e[0]))return i;let o=[];for(let t=0;t<e.length;t++){const s=e[t];Pt(s)||n(s)||r(s)||Z(169),r(s)?o.length>0&&(i.push(o),o=[]):o.push(s)}if(o.length>0){const e=t.isBackward()?t.anchor:t.focus,n=M(o[0].getKey(),0,\"text\");e.is(n)||i.push(o)}return i}function Wt(t,e){const r=y();if(!b(r)||!jt(r))return!1;const l=Rt(r),u=l.length;if(0===u&&r.isCollapsed())return t===B&&r.insertNodes([o()]),!0;if(0===u&&t===B&&\"\\n\"===r.getTextContent()){const t=o(),e=i(),n=r.isBackward()?\"previous\":\"next\";return r.insertNodes([t,e]),J(z(I(K(t,\"next\",0),j(s(e,\"next\"))),n)),!0}for(let i=0;i<u;i++){const s=l[i];if(s.length>0){let l=s[0];if(0===i&&(l=et(l)),t===B){const t=o();if(l.insertBefore(t),0===i){const e=r.isBackward()?\"focus\":\"anchor\",n=M(l.getKey(),0,\"text\");r[e].is(n)&&r[e].set(t.getKey(),0,\"text\")}}else n(l)?l.remove():void 0!==e&&Pt(l)&&lt(l,e,r)}}return!0}function qt(t,e){const i=y();if(!b(i))return!1;const{anchor:o,focus:s}=i,l=o.offset,u=s.offset,c=o.getNode(),a=s.getNode(),g=t===L;if(!jt(i)||!Pt(c)&&!n(c)||!Pt(a)&&!n(a))return!1;if(!e.altKey){if(i.isCollapsed()){const t=c.getParentOrThrow();if(g&&0===l&&null===c.getPreviousSibling()){if(null===t.getPreviousSibling())return t.selectPrevious(),e.preventDefault(),!0}else if(!g&&l===c.getTextContentSize()&&null===c.getNextSibling()){if(null===t.getNextSibling())return t.selectNext(),e.preventDefault(),!0}}return!1}let h,f;if(c.isBefore(a)?(h=et(c),f=nt(a)):(h=et(a),f=nt(c)),null==h||null==f)return!1;const p=h.getNodesBetween(f);for(let t=0;t<p.length;t++){const e=p[t];if(!Pt(e)&&!n(e)&&!r(e))return!1}e.preventDefault(),e.stopPropagation();const d=g?h.getPreviousSibling():f.getNextSibling();if(!r(d))return!0;const m=g?d.getPreviousSibling():d.getNextSibling();if(null==m)return!0;const x=Pt(m)||n(m)||r(m)?g?et(m):nt(m):null;let _=null!=x?x:m;return d.remove(),p.forEach(t=>t.remove()),t===L?(p.forEach(t=>_.insertBefore(t)),_.insertBefore(d)):(_.insertAfter(d),_=d,p.forEach(t=>{_.insertAfter(t),_=t})),i.setTextNodeRange(c,l,a,u),!0}function Ut(t,e){const i=y();if(!b(i))return!1;const{anchor:o,focus:s}=i,l=o.getNode(),u=s.getNode(),c=t===k;if(!jt(i)||!Pt(l)&&!n(l)||!Pt(u)&&!n(u))return!1;const a=u,g=\"rtl\"===rt(a)?!c:c,h=o.key,f=o.offset,p=o.type;if(g){const t=it(a,s.offset);if(null!==t){const{node:e,offset:n}=t;r(e)?e.selectNext(0,0):i.setTextNodeRange(e,n,e,n)}else a.getParentOrThrow().selectStart()}else{ot(a).select()}return e.shiftKey&&i.anchor.set(h,f,p),e.preventDefault(),e.stopPropagation(),!0}function Vt(t,e){return P(t.registerCommand(w,e=>{const n=function(t){const e=y();if(!b(e)||!jt(e))return null;const n=t?E:B,r=t?E:H,i=e.anchor,o=e.focus;if(i.is(o))return r;const s=Rt(e);if(1!==s.length)return n;const l=s[0];let u,c;0===l.length&&Z(285),e.isBackward()?(u=o,c=i):(u=i,c=o);const a=et(l[0]),g=nt(l[0]),h=M(a.getKey(),0,\"text\"),f=M(g.getKey(),g.getTextContentSize(),\"text\");return u.isBefore(h)||f.isBefore(c)?n:h.isBefore(u)||c.isBefore(f)?r:n}(e.shiftKey);return null!==n&&(e.preventDefault(),t.dispatchCommand(n,void 0),!0)},v),t.registerCommand(H,()=>!!jt(y())&&(D([o()]),!0),v),t.registerCommand(B,()=>Wt(B),v),t.registerCommand(E,()=>Wt(E,e),v),t.registerCommand(L,t=>{const e=y();if(!b(e))return!1;const{anchor:n}=e,r=n.getNode();return!!jt(e)&&(e.isCollapsed()&&0===n.offset&&null===r.getPreviousSibling()&&xt(r.getParentOrThrow())?(t.preventDefault(),!0):qt(L,t))},v),t.registerCommand($,t=>{const e=y();if(!b(e))return!1;const{anchor:n}=e,r=n.getNode();return!!jt(e)&&(e.isCollapsed()&&n.offset===r.getTextContentSize()&&null===r.getNextSibling()&&xt(r.getParentOrThrow())?(t.preventDefault(),!0):qt($,t))},v),t.registerCommand(k,t=>Ut(k,t),v),t.registerCommand(F,t=>Ut(F,t),v))}const Gt=_({build:(t,e)=>q(e),config:O({disabled:!1,tabSize:void 0}),dependencies:[wt],name:\"@lexical/code-indent\",register:(t,e,n)=>{const r=n.getOutput();return W(()=>{if(!r.disabled.value)return Vt(t,r.tabSize.value)})}});export{Ot as $createCodeHighlightNode,mt as $createCodeNode,rt as $getCodeLineDirection,ot as $getEndOfCodeInLine,et as $getFirstCodeNodeOfLine,nt as $getLastCodeNodeOfLine,it as $getStartOfCodeInLine,Pt as $isCodeHighlightNode,xt as $isCodeNode,lt as $outdentLeadingSpaces,st as $plainifyCodeContent,wt as CodeExtension,Nt as CodeHighlightNode,Kt as CodeImportExtension,It as CodeImportRules,Gt as CodeIndentExtension,dt as CodeNode,ut as DEFAULT_CODE_LANGUAGE,ct as getDefaultCodeLanguage,Vt as registerCodeIndentation};\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{$createCodeHighlightNode as t,DEFAULT_CODE_LANGUAGE as e,$plainifyCodeContent as n,$isCodeNode as s,$isCodeHighlightNode as r,CodeNode as i,CodeHighlightNode as o,registerCodeIndentation as c,CodeExtension as p,CodeIndentExtension as a}from\"@lexical/code-core\";import{effect as l,namedSignals as g}from\"@lexical/extension\";import{$createLineBreakNode as u,$createTabNode as f,$createTextNode as d,$isLineBreakNode as m,$onUpdate as h,$getNodeByKey as y,$getSelection as j,$isRangeSelection as x,$isTextNode as S,$isTabNode as k,TextNode as w,mergeRegister as v,defineExtension as C,safeCast as b}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(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 s=e[n],r=[];/^\\w+$/.test(n)||r.push(/\\w+/.exec(n)[0]),\"diff\"===n&&r.push(\"bold\"),t.languages.diff[n]={pattern:RegExp(\"^(?:[\"+s+\"].*(?:\\r\\n?|\\n|(?![\\\\s\\\\S])))+\",\"m\"),alias:r,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 T=globalThis.Prism||window.Prism,L={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\"},_={cpp:\"cpp\",java:\"java\",javascript:\"js\",md:\"markdown\",plaintext:\"plain\",python:\"py\",text:\"plain\",ts:\"typescript\"};function P(t){return _[t]||t}function A(t){const e=P(t);return L[e]||e}const z=()=>Object.keys(T.languages).filter(t=>\"function\"!=typeof T.languages[t]).sort();function H(){const t=[];for(const[e,n]of Object.entries(L))t.push([e,n]);return t}function I(){return[]}function E(t){const e=function(t){const e=/^diff-([\\w-]+)/i.exec(t);return e?e[1]:null}(t),n=e||t;try{return!!n&&T.languages.hasOwnProperty(n)}catch(t){return!1}}async function N(t,e,n){}function O(t){return\"string\"==typeof t?t:Array.isArray(t)?t.map(O).join(\"\"):O(t.content)}function $(t,e){const n=/^diff-([\\w-]+)/i.exec(e),s=t.getTextContent();let r=T.tokenize(s,T.languages[n?\"diff\":e]);return n&&(r=function(t,e){const n=e,s=T.languages[n],r={tokens:t},i=T.languages.diff.PREFIXES;for(const t of r.tokens){if(\"string\"==typeof t||!(t.type in i)||!Array.isArray(t.content))continue;const e=t.type;let n=0;const r=()=>(n++,new T.Token(\"prefix\",i[e],e.replace(/^(\\w+).*/,\"$1\"))),o=t.content.filter(t=>\"string\"==typeof t||\"prefix\"!==t.type),c=t.content.length-o.length,p=T.tokenize(O(o),s);p.unshift(r());const a=/\\r\\n|\\n/g,l=t=>{const e=[];a.lastIndex=0;let s,i=0;for(;n<c&&(s=a.exec(t));){const n=s.index+s[0].length;e.push(t.slice(i,n)),i=n,e.push(r())}if(0!==e.length)return i<t.length&&e.push(t.slice(i)),e},g=t=>{for(let e=0;e<t.length&&n<c;e++){const n=t[e];if(\"string\"==typeof n){const s=l(n);s&&(t.splice(e,1,...s),e+=s.length-1)}else if(\"string\"==typeof n.content){const t=l(n.content);t&&(n.content=t)}else Array.isArray(n.content)?g(n.content):g([n.content])}};g(p),n<c&&p.push(r()),t.content=p}return r.tokens}(r,n[1])),R(r)}function R(e,n){const s=[];for(const r of e)if(\"string\"==typeof r){const e=r.split(/(\\n|\\t)/),i=e.length;for(let r=0;r<i;r++){const i=e[r];\"\\n\"===i||\"\\r\\n\"===i?s.push(u()):\"\\t\"===i?s.push(f()):i.length>0&&s.push(t(i,n))}}else{const{content:t,alias:e}=r;\"string\"==typeof t?s.push(...R([t],\"prefix\"===r.type&&\"string\"==typeof e?e:r.type)):Array.isArray(t)&&s.push(...R(t,\"unchanged\"===r.type?void 0:r.type))}return s}const M={$tokenize(t,e){const s=e||this.defaultLanguage;return null===s?n(t.getTextContent()):$(t,s)},defaultLanguage:e,tokenize(t,e){const n=this.defaultLanguage;return T.tokenize(t,T.languages[e||\"\"]||(null===n?void 0:T.languages[n]))}};function F(t,e,n,i){const o=i.getParent();s(o)?X(t,e,n,o):r(i)&&i.replace(d(i.__text))}function K(t,e){const n=e.getElementByKey(t.getKey());if(null===n)return;const s=t.getChildren(),r=s.length;if(r===n.__cachedChildrenLength)return;n.__cachedChildrenLength=r;let i=\"1\",o=1;for(let t=0;t<r;t++)m(s[t])&&(i+=\"\\n\"+ ++o);n.setAttribute(\"data-gutter\",i)}function X(t,e,n,r){const{nodesCurrentlyHighlighting:i}=n,o=r.getKey();void 0===r.getLanguage()&&null!==e.defaultLanguage&&r.setLanguage(e.defaultLanguage);const c=r.getLanguage()||e.defaultLanguage;if(c){if(!E(c))return r.getIsSyntaxHighlightSupported()&&r.setIsSyntaxHighlightSupported(!1),void N();r.getIsSyntaxHighlightSupported()||r.setIsSyntaxHighlightSupported(!0)}else r.getIsSyntaxHighlightSupported()&&r.setIsSyntaxHighlightSupported(!1);i.has(o)||(i.add(o),n.didTransform||(n.didTransform=!0,h(()=>{n.didTransform=!1,i.clear()})),function(t,e){const n=y(t);if(!s(n)||!n.isAttached())return;const r=j();if(!x(r))return void e();const i=r.anchor,o=i.offset,c=\"element\"===i.type&&m(n.getChildAtIndex(i.offset-1));let p=0;if(!c){const t=i.getNode();p=o+t.getPreviousSiblings().reduce((t,e)=>t+e.getTextContentSize(),0)}if(!e())return;if(c)return void i.getNode().select(o,o);n.getChildren().some(t=>{const e=S(t);if(e||m(t)){const n=t.getTextContentSize();if(e&&n>=p)return t.select(p,p),!0;p-=n}return!1})}(o,()=>{const t=y(o);if(!s(t)||!t.isAttached())return!1;const n=t.getLanguage()||e.defaultLanguage,i=e.$tokenize(t,n??void 0),c=function(t,e){let n=0;for(;n<t.length&&q(t[n],e[n]);)n++;const s=t.length,r=e.length,i=Math.min(s,r)-n;let o=0;for(;o<i;)if(o++,!q(t[s-o],e[r-o])){o--;break}const c=n,p=s-o,a=e.slice(n,r-o);return{from:c,nodesForReplacement:a,to:p}}(t.getChildren(),i),{from:p,to:a,nodesForReplacement:l}=c;return!(p===a&&!l.length)&&(r.splice(p,a-p,l),!0)}))}function q(t,e){return r(t)&&r(e)&&t.__text===e.__text&&t.__highlightType===e.__highlightType||k(t)&&k(e)||m(t)&&m(e)}function J(t,e){const n=[];!0!==t._headless&&n.push(t.registerMutationListener(i,e=>{t.getEditorState().read(()=>{for(const[n,s]of e)if(\"destroyed\"!==s){const e=y(n);null!==e&&K(e,t)}})},{skipInitialization:!1}));const s={didTransform:!1,nodesCurrentlyHighlighting:new Set};return n.push(t.registerNodeTransform(i,X.bind(null,t,e,s)),t.registerNodeTransform(w,F.bind(null,t,e,s)),t.registerNodeTransform(o,F.bind(null,t,e,s))),v(...n)}function B(t,e=M){if(!t.hasNodes([i,o]))throw new Error(\"CodeHighlightPlugin: CodeNode or CodeHighlightNode not registered on editor\");return v(J(t,e),c(t))}const Q=C({build:(t,e)=>g(e),config:b({disabled:!1,tokenizer:M}),dependencies:[p,a],name:\"@lexical/code-prism\",register:(t,e,n)=>{const s=n.getOutput();return l(()=>{if(!s.disabled.value)return J(t,s.tokenizer.value)})}});export{L as CODE_LANGUAGE_FRIENDLY_NAME_MAP,_ as CODE_LANGUAGE_MAP,Q as CodePrismExtension,M as PrismTokenizer,H as getCodeLanguageOptions,z as getCodeLanguages,I as getCodeThemeOptions,A as getLanguageFriendlyName,E as isCodeLanguageLoaded,N as loadCodeLanguage,P as normalizeCodeLanguage,B 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*as e from\"@lexical/code-prism\";export{$createCodeHighlightNode,$createCodeNode,$getCodeLineDirection,$getEndOfCodeInLine,$getFirstCodeNodeOfLine,$getLastCodeNodeOfLine,$getStartOfCodeInLine,$isCodeHighlightNode,$isCodeNode,$outdentLeadingSpaces,CodeExtension,CodeHighlightNode,CodeIndentExtension,CodeNode,DEFAULT_CODE_LANGUAGE,getDefaultCodeLanguage}from\"@lexical/code-core\";const o=e.CODE_LANGUAGE_FRIENDLY_NAME_MAP,d=e.CODE_LANGUAGE_MAP,i=e.getCodeLanguageOptions,t=e.getCodeLanguages,g=e.getCodeThemeOptions,n=e.getLanguageFriendlyName,a=e.normalizeCodeLanguage,C=e.normalizeCodeLanguage,r=e.PrismTokenizer,L=e.registerCodeHighlighting;export{o as CODE_LANGUAGE_FRIENDLY_NAME_MAP,d as CODE_LANGUAGE_MAP,r as PrismTokenizer,i as getCodeLanguageOptions,t as getCodeLanguages,g as getCodeThemeOptions,n as getLanguageFriendlyName,a as normalizeCodeLang,C as normalizeCodeLanguage,L 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{effect as e,namedSignals as t}from\"@lexical/extension\";import{defineExtension as n,safeCast as o,$getSelection as i,$isRangeSelection as a,$isTextNode as r}from\"lexical\";function s(e){const t=window.location.origin,n=n=>{if(n.origin!==t)return;const o=e.getRootElement();if(document.activeElement!==o)return;const s=n.data;if(\"string\"==typeof s){let t;try{t=JSON.parse(s)}catch(e){return}if(t&&\"nuanria_messaging\"===t.protocol&&\"request\"===t.type){const o=t.payload;if(o&&\"makeChanges\"===o.functionId){const t=o.args;if(t){const[o,s,d,c,g]=t;e.update(()=>{const e=i();if(a(e)){const t=e.anchor;let i=t.getNode(),a=0,l=0;if(r(i)&&o>=0&&s>=0&&(a=o,l=o+s,e.setTextNodeRange(i,a,i,l)),a===l&&\"\"===d||(e.insertRawText(d),i=t.getNode()),r(i)){a=c,l=c+g;const t=i.getTextContentSize();a=a>t?t:a,l=l>t?t:l,e.setTextNodeRange(i,a,i,l)}n.stopImmediatePropagation()}})}}}}};return window.addEventListener(\"message\",n,!0),()=>{window.removeEventListener(\"message\",n,!0)}}const d=n({build:(e,n,o)=>t(n),config:o({disabled:\"undefined\"==typeof window}),name:\"@lexical/dragon\",register:(t,n,o)=>e(()=>o.getOutput().disabled.value?void 0:s(t))});export{d as DragonExtension,s 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{effect as t,signal as e,namedSignals as n,batch as o,getPeerDependencyFromEditor as r}from\"@lexical/extension\";import{mergeRegister as i}from\"@lexical/utils\";import{defineExtension as a,safeCast as l,configExtension as s,UNDO_COMMAND as u,COMMAND_PRIORITY_EDITOR as d,REDO_COMMAND as c,CLEAR_EDITOR_COMMAND as p,CLEAR_HISTORY_COMMAND as f,CAN_REDO_COMMAND as h,CAN_UNDO_COMMAND as m,COMPOSITION_START_TAG as g,HISTORIC_TAG as y,COMPOSITION_END_TAG as S,HISTORY_PUSH_TAG as _,HISTORY_MERGE_TAG as k,$isRangeSelection as x,$isTextNode as v,$isRootNode as b}from\"lexical\";function C(t,e,n,o,r){if(null===t||0===n.size&&0===o.size&&!r)return 0;const i=e._selection,a=t._selection;if(r)return 1;if(!(x(i)&&x(a)&&a.isCollapsed()&&i.isCollapsed()))return 0;const l=function(t,e,n){const o=t._nodeMap,r=[];for(const t of e){const e=o.get(t);void 0!==e&&r.push(e)}for(const[t,e]of n){if(!e)continue;const n=o.get(t);void 0===n||b(n)||r.push(n)}return r}(e,n,o);if(0===l.length)return 0;if(l.length>1){const n=e._nodeMap,o=n.get(i.anchor.key),r=n.get(a.anchor.key);return o&&r&&!t._nodeMap.has(o.__key)&&v(o)&&1===o.__text.length&&1===i.anchor.offset?2:0}const s=l[0],u=t._nodeMap.get(s.__key);if(!v(u)||!v(s)||u.__mode!==s.__mode)return 0;const d=u.__text,c=s.__text;if(d===c)return 0;const p=i.anchor,f=a.anchor;if(p.key!==f.key||\"text\"!==p.type)return 0;const h=p.offset,m=f.offset,g=c.length-d.length;return 1===g&&m===h-1?2:-1===g&&m===h+1?3:-1===g&&m===h?4:0}function w(t,e,n){let o=n(),r=0,i=o,a=0,l=null;return(s,u,d,c,p,f)=>{const h=n();if(f.has(g)&&(i=o,a=r,l=s),f.has(y))return r=0,o=h,2;f.has(S)&&l&&(o=i,r=a,s=l);const m=C(s,u,c,p,t.isComposing()),b=(()=>{const n=null===d||d.editor===t,i=f.has(_);if(!i&&n&&f.has(k))return 0;if(1===m)return 2;if(null===s)return 1;const a=u._selection;if(!(c.size>0||p.size>0))return null!==a?0:2;const l=\"number\"==typeof e?e:e.peek();if(!1===i&&0!==m&&m===r&&h<o+l&&n)return 0;if(1===c.size){if(function(t,e,n){const o=e._nodeMap.get(t),r=n._nodeMap.get(t),i=e._selection,a=n._selection;return!(x(i)&&x(a)&&\"element\"===i.anchor.type&&\"element\"===i.focus.type&&\"text\"===a.anchor.type&&\"text\"===a.focus.type||!v(o)||!v(r)||o.__parent!==r.__parent)&&JSON.stringify(e.read(()=>o.exportJSON()))===JSON.stringify(n.read(()=>r.exportJSON()))}(Array.from(c)[0],s,u))return 0}return 1})();return o=h,r=m,b}}function E(t,e){t.undoStack=[],t.redoStack=[],t.current=null,e&&e(t)}function D(t,e,n,o=Date.now,r,a=null){const l=w(t,n,o),s=()=>{r&&r(e)};return s(),i(t.registerCommand(u,()=>(function(t,e,n){const o=e.redoStack,r=e.undoStack;if(0!==r.length){const i=e.current,a=r.pop();null!==i&&(o.push(i),t.dispatchCommand(h,!0)),0===r.length&&t.dispatchCommand(m,!1),e.current=a||null,n&&n(e),a&&a.editor.setEditorState(a.editorState,{tag:y})}}(t,e,r),!0),d),t.registerCommand(c,()=>(function(t,e,n){const o=e.redoStack,r=e.undoStack;if(0!==o.length){const i=e.current;null!==i&&(r.push(i),t.dispatchCommand(m,!0));const a=o.pop();0===o.length&&t.dispatchCommand(h,!1),e.current=a||null,n&&n(e),a&&a.editor.setEditorState(a.editorState,{tag:y})}}(t,e,r),!0),d),t.registerCommand(p,()=>(E(e,r),!1),d),t.registerCommand(f,()=>(E(e,r),t.dispatchCommand(h,!1),t.dispatchCommand(m,!1),!0),d),t.registerUpdateListener(({editorState:n,prevEditorState:o,dirtyLeaves:r,dirtyElements:i,tags:u})=>{const d=e.current,c=e.redoStack,p=e.undoStack,f=null===d?null:d.editorState;if(null!==d&&n===f)return;const g=l(o,n,d,r,i,u);if(1===g){if(0!==c.length&&(e.redoStack=[],t.dispatchCommand(h,!1)),null!==d){p.push({...d});const e=\"number\"==typeof a||null===a?a:a.peek();null!==e&&p.length>e&&p.splice(0,p.length-e),t.dispatchCommand(m,!0)}}else if(2===g)return;e.current={editor:t,editorState:n},s()}))}function M(){return{current:null,redoStack:[],undoStack:[]}}const O=a({build:(t,{delay:e,createInitialHistoryState:o,disabled:r,maxDepth:i,now:a},l)=>({...n({delay:e,disabled:r,historyState:o(t),maxDepth:i,now:a}),...l.getInitResult()}),config:l({createInitialHistoryState:M,delay:300,disabled:\"undefined\"==typeof window,maxDepth:null,now:Date.now}),init:()=>({canRedo:e(!1),canUndo:e(!1)}),name:\"@lexical/history/History\",register:(e,n,r)=>{const{canUndo:i,canRedo:a}=r.getInitResult(),l=r.getOutput(),s=t=>o(()=>{i.value=null!=t&&t.undoStack.length>0,a.value=null!=t&&t.redoStack.length>0});return t(()=>{if(!l.disabled.value)return D(e,l.historyState.value,l.delay,()=>l.now.peek()(),s,l.maxDepth);s(null)})}});const z=a({build:(t,{disabled:e,parentEditor:o})=>n({disabled:e,parentEditor:o||t._parentEditor}),config:l({disabled:!1,parentEditor:null}),dependencies:[s(O,{disabled:!0})],name:\"@lexical/history/SharedHistory\",register:(e,n,i)=>t(()=>{const{disabled:t,parentEditor:e}=i.getOutput();if(!t.value){const{output:t}=i.getDependency(O),n=function(t){return t?r(t,O.name):null}(e.value);if(!n)return;const a=n.output;o(()=>{t.delay.value=a.delay.value,t.historyState.value=a.historyState.value,t.now.value=a.now.value,t.disabled.value=a.disabled.value})}})});export{O as HistoryExtension,z as SharedHistoryExtension,M as createEmptyHistoryState,D 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 n,$insertNodeToNearestRootAtCaret as r,mergeRegister as i,objectKlassEquals as l}from\"@lexical/utils\";import{ElementNode as s,$copyNode as o,$isRangeSelection as u,$applyNodeReplacement as a,createCommand as c,$getSelection as g,$isNodeSelection as f,$normalizeSelection__EXPERIMENTAL as d,$setSelection as h,$getChildCaret as p,$isElementNode as _,$rewindSiblingCaret as m,$caretFromPoint as x,$normalizeCaret as k,$isSiblingCaret as b,$setPointFromCaret as v,defineExtension as U,shallowMergeConfig as T,COMMAND_PRIORITY_EDITOR as C,PASTE_COMMAND as L,COMMAND_PRIORITY_LOW as S,safeCast as O,isDOMNode as P,getNearestEditorFromDOMNode as y,$getNearestNodeFromDOMNode as A,TextNode as N,$isTextNode as R,$isLineBreakNode as D,$createTextNode as I,configExtension as w}from\"lexical\";import{namedSignals as E,effect as M}from\"@lexical/extension\";import{CoreImportExtension as F,DOMImportExtension as W,defineImportRule as J,sel as K,$distributeInlineWrapper as $}from\"@lexical/html\";const B=new Set([\"http:\",\"https:\",\"mailto:\",\"sms:\",\"tel:\"]);class z extends s{__url;__target;__rel;__title;static getType(){return\"link\"}static clone(t){return new z(t.__url,{rel:t.__rel,target:t.__target,title:t.__title},t.__key)}constructor(t=\"\",e={},n){super(n);const{target:r=null,rel:i=null,title:l=null}=e;this.__url=t,this.__target=r,this.__rel=i,this.__title=l}afterCloneFrom(t){super.afterCloneFrom(t),this.__url=t.__url,this.__rel=t.__rel,this.__target=t.__target,this.__title=t.__title}createDOM(e){const n=document.createElement(\"a\");return this.updateLinkDOM(null,n,e),t(n,e.theme.link),n}updateLinkDOM(t,n,r){if(e(n)){t&&t.__url===this.__url||(n.href=this.sanitizeUrl(this.__url));for(const e of[\"target\",\"rel\",\"title\"]){const r=`__${e}`,i=this[r];t&&t[r]===i||(i?n[e]=i:n.removeAttribute(e))}}}updateDOM(t,e,n){return this.updateLinkDOM(t,e,n),!1}static importDOM(){return{a:t=>({conversion:Z,priority:1})}}static importJSON(t){return q().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=it(t);try{const e=new URL(it(t));if(!B.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 n=o(this);return this.insertAfter(n,e),n}canInsertTextBefore(){return!1}canInsertTextAfter(){return!1}canBeEmpty(){return!1}isInline(){return!0}extractWithChild(t,e,n){if(!u(e))return!1;const r=e.anchor.getNode(),i=e.focus.getNode();return this.isParentOf(r)&&this.isParentOf(i)&&e.getTextContent().length>0}isEmailURI(){return this.__url.startsWith(\"mailto:\")}isWebSiteURI(){return this.__url.startsWith(\"https://\")||this.__url.startsWith(\"http://\")}shouldMergeAdjacentLink(t){return this.getType()===t.getType()&&this.__url===t.__url&&this.__target===t.__target&&this.__rel===t.__rel&&this.__title===t.__title}}function j(t){const e=x(t,\"next\");return[e,e.getFlipped()]}function H(t,e){for(const n of e)if(n.origin.isAttached()){const e=k(n);return void v(t,e)}}function G(t){const e=g();let n=null,i=null;function l(){u(e)&&(H(e.anchor,n),H(e.focus,i),d(e))}u(e)&&(n=j(e.anchor),i=j(e.focus));let s=!1;for(const e of p(t,\"next\")){const n=e.origin;if(_(n)&&!n.isInline()){const i=n.getChildren();if(i.length>0){const e=o(t);e.append(...i),n.append(e),s=!0}r(n,m(e),{$shouldSplit:()=>!1})}}function a(t,e,n){const[r,i]=t,l=t=>b(t)&&t.origin.is(e);if(!l(r)&&!l(i))return t;const s=k(p(n,\"next\"));return[s,s.getFlipped()]}if(t.isAttached()){const e=t.getPreviousSibling();if(Q(e)&&e.shouldMergeAdjacentLink(t))return n&&(n=a(n,e,t)),i&&(i=a(i,e,t)),e.append(...t.getChildren()),t.remove(),void l();const r=t.getNextSibling();Q(r)&&t.shouldMergeAdjacentLink(r)&&(n&&(n=a(n,t,r)),i&&(i=a(i,t,r)),t.append(...r.getChildren()),r.remove(),s=!0)}if(s){if(!t.canBeEmpty()&&t.isEmpty()){const e=t.getParent();t.remove(),e&&e.isEmpty()&&e.remove()}l()}}function Z(t){let n=null;if(e(t)){const e=t.textContent;(null!==e&&\"\"!==e||t.children.length>0)&&(n=q(t.getAttribute(\"href\")||\"\",{rel:t.getAttribute(\"rel\"),target:t.getAttribute(\"target\"),title:t.getAttribute(\"title\")}))}return{node:n}}function q(t=\"\",e){return a(new z(t,e))}function Q(t){return t instanceof z}class V extends z{__isUnlinked;constructor(t=\"\",e={},n){super(t,e,n),this.__isUnlinked=void 0!==e.isUnlinked&&null!==e.isUnlinked&&e.isUnlinked}afterCloneFrom(t){super.afterCloneFrom(t),this.__isUnlinked=t.__isUnlinked}static getType(){return\"autolink\"}static clone(t){return new V(t.__url,{isUnlinked:t.__isUnlinked,rel:t.__rel,target:t.__target,title:t.__title},t.__key)}shouldMergeAdjacentLink(t){return!1}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,n){return super.updateDOM(t,e,n)||t.__isUnlinked!==this.__isUnlinked}static importJSON(t){return X().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 n=X(this.__url,{isUnlinked:this.__isUnlinked,rel:this.__rel,target:this.__target,title:this.__title});return this.insertAfter(n,e),n}}function X(t=\"\",e){return a(new V(t,e))}function Y(t){return t instanceof V}const tt=c(\"TOGGLE_LINK_COMMAND\");function et(t,e){if(\"element\"===t.type){const n=t.getNode();_(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);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.`)}(252);return n.getChildren()[t.offset+e]||null}return null}function nt(t,e={}){let r;if(t&&\"object\"==typeof t){const{url:n,...i}=t;r=n,e={...i,...e}}else r=t;const{target:i,title:l}=e,s=void 0===e.rel?\"noreferrer\":e.rel,a=g();if(null===a||!u(a)&&!f(a))return;if(f(a)){const t=a.getNodes();if(0===t.length)return;return void t.forEach(t=>{if(null===r){const e=n(t,t=>!Y(t)&&Q(t));e&&(e.insertBefore(t),0===e.getChildren().length&&e.remove())}else{const e=n(t,t=>!Y(t)&&Q(t));if(e)e.setURL(r),void 0!==i&&e.setTarget(i),void 0!==s&&e.setRel(s);else{const e=q(r,{rel:s,target:i});t.insertBefore(e),e.append(t)}}})}if(a.isCollapsed()&&null===r)for(const t of a.getNodes()){const e=n(t,t=>!Y(t)&&Q(t));return void(null!==e&&(e.getParentOrThrow().splice(e.getIndexWithinParent(),0,e.getChildren()),e.remove()))}const c=a.extract();if(null===r){const t=new Set;return void c.forEach(e=>{const r=n(e,t=>!Y(t)&&Q(t));if(null!==r){const e=r.getKey();if(t.has(e))return;!function(t,e){const n=new Set(e.filter(e=>t.isParentOf(e)).map(t=>t.getKey())),r=t.getChildren(),i=r=>n.has(r.getKey())||_(r)&&e.some(e=>t.isParentOf(e)&&r.isParentOf(e)),l=r.filter(i);if(l.length===r.length)return r.forEach(e=>t.insertBefore(e)),void t.remove();const s=r.findIndex(i),u=r.findLastIndex(i),a=0===s,c=u===r.length-1;if(a)l.forEach(e=>t.insertBefore(e));else if(c)for(let e=l.length-1;e>=0;e--)t.insertAfter(l[e]);else{for(let e=l.length-1;e>=0;e--)t.insertAfter(l[e]);const e=r.slice(u+1);if(e.length>0){const n=o(t);l[l.length-1].insertAfter(n),e.forEach(t=>n.append(t))}}}(r,c),t.add(e)}})}const p=new Set,m=t=>{p.has(t.getKey())||(p.add(t.getKey()),t.setURL(r),void 0!==i&&t.setTarget(i),void 0!==s&&t.setRel(s),void 0!==l&&t.setTitle(l))};if(1===c.length){const t=c[0],e=n(t,Q);if(null!==e)return m(e)}!function(t){const e=g();if(!u(e))return t();const n=d(e),r=n.isBackward(),i=et(n.anchor,r?-1:0),l=et(n.focus,r?0:-1),s=t();if(i||l){const t=g();if(u(t)){const e=t.clone();if(i){const t=i.getParent();t&&e.anchor.set(t.getKey(),i.getIndexWithinParent()+(r?1:0),\"element\")}if(l){const t=l.getParent();t&&e.focus.set(t.getKey(),l.getIndexWithinParent()+(r?0:1),\"element\")}h(d(e))}}}(()=>{let t=null;for(const e of c){if(!e.isAttached())continue;const o=n(e,Q);if(o){m(o);continue}if(_(e)){if(!e.isInline())continue;if(Q(e)){if(!(Y(e)||null!==t&&t.getParentOrThrow().isParentOf(e))){m(e),t=e;continue}for(const t of e.getChildren())e.insertBefore(t);e.remove();continue}}const u=e.getPreviousSibling();Q(u)&&u.is(t)?u.append(e):(t=q(r,{rel:s,target:i,title:l}),e.insertAfter(t),t.append(e))}})}const rt=/^\\+?[0-9\\s()-]{5,}$/;function it(t){return t.match(/^[a-z][a-z0-9+.-]*:/i)||t.match(/^[/#.]/)?t:t.includes(\"@\")?`mailto:${t}`:rt.test(t)?`tel:${t}`:`https://${t}`}function lt(t,e){return i(t.registerNodeTransform(z,G),t.registerCommand(tt,t=>{const n=e.validateUrl.peek(),r=e.attributes.peek();if(null===t)return nt(null),!0;if(\"string\"==typeof t)return!(void 0!==n&&!n(t))&&(nt(t,r),!0);{const{url:e,target:n,rel:i,title:l}=t;return nt(e,{...r,rel:i,target:n,title:l}),!0}},C),M(()=>{const n=e.validateUrl.value;if(!n)return;const r=e.attributes.value;return t.registerCommand(L,e=>{const i=g();if(!u(i)||i.isCollapsed()||!l(e,ClipboardEvent))return!1;if(null===e.clipboardData)return!1;const s=e.clipboardData.getData(\"text\");return!!n(s)&&(!i.getNodes().some(t=>_(t))&&(t.dispatchCommand(tt,{...r,url:s}),e.preventDefault(),!0))},S)}))}const st=U({build:(t,e,n)=>E(e),config:{attributes:void 0,validateUrl:void 0},mergeConfig(t,e){const n=T(t,e);return t.attributes&&(n.attributes=T(t.attributes,n.attributes)),n},name:\"@lexical/link/Link\",nodes:()=>[z],register:(t,e,n)=>lt(t,n.getOutput())});function ot(t,r,i={}){const l=i=>{const l=i.target;if(!P(l))return;const s=y(l);if(null===s)return;let o=null,a=null;if(s.update(()=>{const t=A(l);if(null!==t){const i=n(t,_);if(!r.disabled.peek())if(Q(i))o=i.sanitizeUrl(i.getURL()),a=i.getTarget();else{const t=function(t,e){let n=t;for(;null!=n;){if(e(n))return n;n=n.parentNode}return null}(l,e);null!==t&&(o=t.href,a=t.target)}}}),null===o||\"\"===o)return;const c=t.getEditorState().read(g,{editor:t});if(u(c)&&!c.isCollapsed())return void i.preventDefault();const f=\"auxclick\"===i.type&&1===i.button;window.open(o,r.newTab.peek()||f||i.metaKey||i.ctrlKey||\"_blank\"===a?\"_blank\":\"_self\"),i.preventDefault()},s=t=>{1===t.button&&l(t)};return t.registerRootListener(t=>{if(t)return t.addEventListener(\"click\",l,i),t.addEventListener(\"mouseup\",s,i),()=>{t.removeEventListener(\"click\",l),t.removeEventListener(\"mouseup\",s)}})}const ut=U({build:(t,e,n)=>E(e),config:O({disabled:!1,newTab:!1}),dependencies:[st],name:\"@lexical/link/ClickableLink\",register:(t,e,n)=>ot(t,n.getOutput())});function at(t,e=t=>t){return n=>{const r=t.exec(n);return null===r?null:{index:r.index,length:r[0].length,text:r[0],url:e(r[0])}}}function ct(t,e){for(let n=0;n<e.length;n++){const r=e[n](t);if(r)return r}return null}const gt=/[.,;\\s]/;function ft(t,e){return e.test(t)}function dt(t,e){return ft(t[t.length-1],e)}function ht(t,e){return ft(t[0],e)}function pt(t,e){let n=t.getPreviousSibling();return _(n)&&(n=n.getLastDescendant()),null===n||D(n)||R(n)&&dt(n.getTextContent(),e)}function _t(t,e){let n=t.getNextSibling();return _(n)&&(n=n.getFirstDescendant()),null===n||D(n)||R(n)&&ht(n.getTextContent(),e)}function mt(t,e,n,r,i){if(!(t>0?ft(r[t-1],n):pt(i[0],n)))return!1;return e<r.length?ft(r[e],n):_t(i[i.length-1],n)}function xt(t,e,n){const r=[],i=[],l=[];let s=0,o=0;const u=[...t];for(;u.length>0;){const t=u[0],a=t.getTextContent().length,c=o;o+a<=e?(r.push(t),s+=a):c>=n?l.push(t):i.push(t),o+=a,u.shift()}return[s,r,i,l]}function kt(t,e,n,r){const i=X(r.url,r.attributes);if(1===t.length){let l,s=t[0];0===e?[l,s]=s.splitText(n):[,l,s]=s.splitText(e,n);const o=I(r.text);return o.setFormat(l.getFormat()),o.setDetail(l.getDetail()),o.setStyle(l.getStyle()),i.append(o),l.replace(i),s}if(t.length>1){const r=t[0];let l,s=r.getTextContent().length;0===e?l=r:[,l]=r.splitText(e);const o=[];let a;for(let e=1;e<t.length;e++){const r=t[e],i=r.getTextContent().length,l=s;if(l<n)if(s+i<=n)o.push(r);else{const[t,e]=r.splitText(n-l);o.push(t),a=e}s+=i}const c=g(),d=c?c.getNodes().find(R):void 0,h=I(l.getTextContent());return h.setFormat(l.getFormat()),h.setDetail(l.getDetail()),h.setStyle(l.getStyle()),i.append(h,...o),d&&d===l&&(u(c)?h.select(c.anchor.offset,c.focus.offset):f(c)&&h.select(0,h.getTextContent().length)),l.replace(i),a}}function bt(t,e,n,r){const i=t.getChildren(),l=i.length;for(let e=0;e<l;e++){const r=i[e];if(!R(r)||!r.isSimpleText())return vt(t),void n(null,t.getURL())}const s=t.getTextContent(),o=ct(s,e);if(null===o||o.text!==s)return vt(t),void n(null,t.getURL());if(!pt(t,r)||!_t(t,r))return vt(t),void n(null,t.getURL());const u=t.getURL();if(u!==o.url&&(t.setURL(o.url),n(o.url,u)),o.attributes){const e=t.getRel();e!==o.attributes.rel&&(t.setRel(o.attributes.rel||null),n(o.attributes.rel||null,e));const r=t.getTarget();r!==o.attributes.target&&(t.setTarget(o.attributes.target||null),n(o.attributes.target||null,r))}}function vt(t){const e=t.getChildren();for(let n=e.length-1;n>=0;n--)t.insertAfter(e[n]);return t.remove(),e.map(t=>t.getLatest())}const Ut={changeHandlers:[],excludeParents:[],matchers:[],separatorRegex:gt};function Tt(t,e=Ut){const{matchers:n,changeHandlers:r,excludeParents:l,separatorRegex:s=gt}=e,o=(t,e)=>{for(const n of r)n(t,e)};return i(t.registerNodeTransform(N,t=>{const e=t.getParentOrThrow(),r=t.getPreviousSibling();if(Y(e))bt(e,n,o,s);else if(!Q(e)&&!l.some(t=>t(e))){if(t.isSimpleText()&&(ht(t.getTextContent(),s)||!Y(r))){const e=function(t){const e=[t];let n=t.getNextSibling();for(;null!==n&&R(n)&&n.isSimpleText()&&(e.push(n),!/[\\s]/.test(n.getTextContent()));)n=n.getNextSibling();return e}(t);!function(t,e,n,r){for(const e of t){const t=e.getParent();if(Y(t)&&!t.getIsUnlinked())return}let i=[...t];const l=i.map(t=>t.getTextContent()).join(\"\");let s,o=l,u=0;for(;(s=ct(o,e))&&null!==s;){const t=s.index,e=t+s.length;if(mt(u+t,u+e,r,l,i)){const[r,,l,a]=xt(i,u+t,u+e);let c=!1;for(const t of l){const e=t.getParent();if(Y(e)&&!e.getIsUnlinked()){c=!0;break}}if(c){u+=e,o=o.substring(e);continue}const g=kt(l,u+t-r,u+e-r,s);i=g?[g,...a]:a,n(s.url,null),u=0}else u+=e;o=o.substring(e)}}(e,n,o,s)}!function(t,e,n,r){const i=t.getParent(),l=t.getPreviousSibling(),s=t.getNextSibling(),o=t.getTextContent();if(!Y(i)||i.getIsUnlinked()){if(Y(l)&&!l.getIsUnlinked()&&l.is(t.getPreviousSibling())&&t.getParent()===l.getParent()){if(!ht(o,r))return vt(l),void n(null,l.getURL());if(u=o,l.isEmailURI()?/^\\.[a-zA-Z]{2,}/.test(u):/^\\.[a-zA-Z0-9]{1,}/.test(u)){const i=l.getTextContent()+o,s=ct(i,e);null!==s&&s.text===i&&(l.append(t),bt(l,e,n,r),n(null,l.getURL()))}}var u;!Y(s)||s.getIsUnlinked()||dt(o,r)||s.is(t.getNextSibling())&&t.getParent()===s.getParent()&&(vt(s),n(null,s.getURL()))}}(t,n,o,s)}}),t.registerCommand(tt,t=>{const e=g();if(null!==t||!u(e))return!1;return e.extract().forEach(t=>{const e=t.getParent();Y(e)&&(e.setIsUnlinked(!e.getIsUnlinked()),e.markDirty())}),!1},S))}const Ct=U({config:Ut,dependencies:[st],mergeConfig(t,e){const n=T(t,e);for(const r of[\"matchers\",\"changeHandlers\",\"excludeParents\"]){const i=e[r];Array.isArray(i)&&(n[r]=[...t[r],...i])}return n},name:\"@lexical/link/AutoLink\",nodes:[V],register:Tt}),Lt=[J({$import:(t,e)=>{if(!e.textContent&&0===e.children.length)return[];const n=e.getAttribute(\"href\")||\"\",r={rel:e.getAttribute(\"rel\"),target:e.getAttribute(\"target\"),title:e.getAttribute(\"title\")};return $(t.$importChildren(e),()=>q(n,r))},match:K.tag(\"a\"),name:\"@lexical/link/a\"})],St=U({dependencies:[F,st,w(W,{rules:Lt})],name:\"@lexical/link/Import\"}),Ot=nt;export{X as $createAutoLinkNode,q as $createLinkNode,Y as $isAutoLinkNode,Q as $isLinkNode,nt as $toggleLink,Ct as AutoLinkExtension,V as AutoLinkNode,ut as ClickableLinkExtension,st as LinkExtension,St as LinkImportExtension,Lt as LinkImportRules,z as LinkNode,tt as TOGGLE_LINK_COMMAND,at as createLinkMatcherWithRegExp,it as formatUrl,Tt as registerAutoLink,ot as registerClickableLink,lt as registerLink,Ot 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 e,$insertNodeToNearestRootAtCaret as t,removeClassNamesFromElement as n,addClassNamesToElement as r,isHTMLElement as i,mergeRegister as s,$findMatchingParent as o,calculateZoomLevel as l}from\"@lexical/utils\";import{$getSelection as c,$isRangeSelection as a,$isTextNode as u,$isRootOrShadowRoot as g,$createParagraphNode as h,$copyNode as d,$isElementNode as f,$isLeafNode as p,$setPointFromCaret as m,$normalizeCaret as _,$getChildCaret as y,$applyNodeReplacement as C,ElementNode as v,buildImportMap as k,$getSiblingCaret as T,$rewindSiblingCaret as b,setDOMStyleFromCSS as S,isHTMLElement as x,$isParagraphNode as L,$setFormatFromDOM as N,$setDirectionFromDOM as F,normalizeClassNames as P,getStyleObjectFromCSS as A,$createTextNode as E,createCommand as O,COMMAND_PRIORITY_LOW as I,KEY_ARROW_DOWN_COMMAND as w,KEY_ARROW_UP_COMMAND as D,KEY_ESCAPE_COMMAND as M,KEY_SPACE_COMMAND as $,$getNearestNodeFromDOMNode as R,KEY_ARROW_LEFT_COMMAND as K,getNearestEditorFromDOMNode as B,$addUpdateTag as W,SKIP_SELECTION_FOCUS_TAG as U,SKIP_DOM_SELECTION_TAG as J,$getNodeByKey as V,INSERT_PARAGRAPH_COMMAND as q,TextNode as z,defineExtension as H,safeCast as j,configExtension as X}from\"lexical\";import{namedSignals as G,effect as Q}from\"@lexical/extension\";import{CoreImportExtension as Y,DOMImportExtension as Z,defineImportRule as ee,sel as te,isElementOfTag as ne}from\"@lexical/html\";function re(e,...t){const n=new URL(\"https://lexical.dev/docs/error\"),r=new URLSearchParams;r.append(\"code\",e);for(const e of t)r.append(\"v\",e);throw n.search=r.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.`)}function ie(e){let t=1,n=e.getParent();for(;null!=n;){if(be(n)){const e=n.getParent();if(Pe(e)){t++,n=e.getParent();continue}re(40)}return t}return t}function se(e){let t=e.getParent();Pe(t)||re(40);let n=t;for(;null!==n;)n=n.getParent(),Pe(n)&&(t=n);return t}function oe(e){let t=[];const n=e.getChildren().filter(be);for(let e=0;e<n.length;e++){const r=n[e],i=r.getFirstChild();Pe(i)?t=t.concat(oe(i)):t.push(r)}return t}function le(e){return be(e)&&Pe(e.getFirstChild())}function ce(e,t){return be(e)&&(0===t.length||1===t.length&&e.is(t[0])&&0===e.getChildrenSize())}function ae(e){const t=c();if(null!==t){let n=t.getNodes();if(a(t)){const[r]=t.getStartEndPoints(),i=r.getNode(),s=i.getParent();if(g(i)){const e=i.getFirstChild();if(e)n=e.selectStart().getNodes();else{const e=h();i.append(e),n=e.select().getNodes()}}else if(ce(i,n)){const t=Fe(e);if(g(s)){i.replace(t);const e=Te();f(i)&&(e.setFormat(i.getFormatType()),e.setIndent(i.getIndent())),t.append(e)}else if(be(i)){const e=i.getParentOrThrow();ue(t,e.getChildren()),e.replace(t)}return}}const r=new Set;for(let t=0;t<n.length;t++){const i=n[t];if(f(i)&&i.isEmpty()&&!be(i)&&!r.has(i.getKey())){ge(i,e);continue}let s=p(i)?i.getParent():be(i)&&i.isEmpty()?i:null;for(;null!=s;){const t=s.getKey();if(Pe(s)){if(!r.has(t)){const n=Fe(e);ue(n,s.getChildren()),s.replace(n),r.add(t)}break}{const n=s.getParent();if(g(n)&&!r.has(t)){r.add(t),ge(s,e);break}s=n}}}}}function ue(e,t){e.splice(e.getChildrenSize(),0,t)}function ge(e,t){if(Pe(e))return e;const n=e.getPreviousSibling(),r=e.getNextSibling(),i=Te();let s;if(ue(i,e.getChildren()),Pe(n)&&t===n.getListType())n.append(i),Pe(r)&&t===r.getListType()&&(ue(n,r.getChildren()),r.remove()),s=n;else if(Pe(r)&&t===r.getListType())r.getFirstChildOrThrow().insertBefore(i),s=r;else{const n=Fe(t);n.append(i),e.replace(n),s=n}i.setFormat(e.getFormatType()),i.setIndent(e.getIndent());const o=c();return a(o)&&(s.getKey()===o.anchor.key&&o.anchor.set(i.getKey(),o.anchor.offset,\"element\"),s.getKey()===o.focus.key&&o.focus.set(i.getKey(),o.focus.offset,\"element\")),e.remove(),s}function he(e,t){const n=e.getLastChild(),r=t.getFirstChild();n&&r&&le(n)&&le(r)&&(he(n.getFirstChild(),r.getFirstChild()),r.remove());const i=t.getChildren();i.length>0&&e.append(...i),t.remove()}function de(){const t=c();if(a(t)){const n=new Set,r=t.getNodes(),i=t.anchor.getNode();if(ce(i,r))n.add(se(i));else for(let t=0;t<r.length;t++){const i=r[t];if(p(i)){const t=e(i,ye);null!=t&&n.add(se(t))}}for(const e of n){let n=e;const r=oe(e);for(const e of r){const r=h().setTextStyle(t.style).setTextFormat(t.format);ue(r,e.getChildren()),n.insertAfter(r),n=r,e.__key===t.anchor.key&&m(t.anchor,_(y(r,\"next\"))),e.__key===t.focus.key&&m(t.focus,_(y(r,\"next\"))),e.remove()}e.remove()}}}function fe(e){const t=\"check\"!==e.getListType();let n=e.getStart();for(const r of e.getChildren())be(r)&&(r.getValue()!==n&&r.setValue(n),t&&null!=r.getLatest().__checked&&r.setChecked(void 0),Pe(r.getFirstChild())||n++)}function pe(e){const t=new Set;if(le(e)||t.has(e.getKey()))return;const n=e.getParent(),r=e.getNextSibling(),i=e.getPreviousSibling();if(le(r)&&le(i)){const n=i.getFirstChild();if(Pe(n)){n.append(e);const i=r.getFirstChild();if(Pe(i)){ue(n,i.getChildren()),r.remove(),t.add(r.getKey())}}}else if(le(r)){const t=r.getFirstChild();if(Pe(t)){const n=t.getFirstChild();null!==n&&n.insertBefore(e)}}else if(le(i)){const t=i.getFirstChild();Pe(t)&&t.append(e)}else if(Pe(n)){const t=d(e),s=d(n);t.append(s),s.append(e),i?i.insertAfter(t):r?r.insertBefore(t):n.append(t)}}function me(e){if(le(e))return;const t=e.getParent(),n=t?t.getParent():void 0;if(Pe(n?n.getParent():void 0)&&be(n)&&Pe(t)){const r=t?t.getFirstChild():void 0,i=t?t.getLastChild():void 0;if(e.is(r))n.insertBefore(e),t.isEmpty()&&n.remove();else if(e.is(i))n.insertAfter(e),t.isEmpty()&&n.remove();else{const r=d(e),i=d(t);r.append(i),e.getPreviousSiblings().forEach(e=>i.append(e));const s=d(e),o=d(t);s.append(o),ue(o,e.getNextSiblings()),n.insertBefore(r),n.insertAfter(s),n.replace(e)}}}function _e(e=!1){const t=c();if(!a(t)||!t.isCollapsed())return!1;const n=t.anchor.getNode();let r=null;if(be(n)&&0===n.getChildrenSize())r=n;else if(u(n)){const e=n.getParent();be(e)&&e.getChildren().every(e=>u(e)&&\"\"===e.getTextContent().trim())&&(r=e)}if(null===r)return!1;const i=se(r),s=r.getParent();Pe(s)||re(40);const o=s.getParent();let l;if(g(o))l=h(),i.insertAfter(l);else{if(!be(o))return!1;l=d(o),o.insertAfter(l)}l.setTextStyle(t.style).setTextFormat(t.format).select();const f=r.getNextSiblings();if(f.length>0){const t=e?function(e,t){return e.getStart()+t.getIndexWithinParent()}(s,r):1,n=d(s).setStart(t);if(be(l)){const e=d(l);e.append(n),l.insertAfter(e)}else l.insertAfter(n);n.append(...f)}return function(e){let t=e;for(;null==t.getNextSibling()&&null==t.getPreviousSibling();){const e=t.getParent();if(null==e||!be(e)&&!Pe(e))break;t=e}t.remove()}(r),!0}class ye extends v{__value;__checked;$config(){return this.config(\"listitem\",{$transform:e=>{const n=e.getParent();if(Pe(n))\"check\"!==n.getListType()&&null!=e.getChecked()&&e.setChecked(void 0);else if(n){const r=e.createParentElementNode();Pe(r)||re(340);const i=[e];for(const t of[\"previous\",\"next\"]){i.reverse();for(const{origin:n}of T(e,t)){if(!be(n))break;i.push(n)}}e.insertBefore(r),r.splice(0,0,i),g(n)||(t(r,b(T(r,\"next\")),{$shouldSplit:()=>!1,removeEmptyDestination:!0}),n.isEmpty()&&n.isAttached()&&n.remove())}},extends:v,importDOM:k({li:()=>({conversion:Ce,priority:0})})})}constructor(e=1,t=void 0,n){super(n),this.__value=void 0===e?1:e,this.__checked=t}afterCloneFrom(e){super.afterCloneFrom(e),this.__value=e.__value,this.__checked=e.__checked}createDOM(e){const t=document.createElement(\"li\");return this.updateListItemDOM(null,t,e),t}updateListItemDOM(e,t,i){!function(e,t){const n=t.getParent();!Pe(n)||\"check\"!==n.getListType()||Pe(t.getFirstChild())?(e.removeAttribute(\"role\"),e.removeAttribute(\"tabIndex\"),e.removeAttribute(\"aria-checked\")):(e.setAttribute(\"role\",\"checkbox\"),e.setAttribute(\"tabIndex\",\"-1\"),e.setAttribute(\"aria-checked\",t.getChecked()?\"true\":\"false\"))}(t,this),t.value=this.__value,function(e,t,i){const s=t.list;if(!s)return;const o=s.listitem,l=s.nested&&s.nested.listitem,c=i.getParent(),a=Pe(c)&&\"check\"===c.getListType(),u=i.getChecked(),g=i.getChildren().some(e=>Pe(e)),h=[];void 0!==s.listitemChecked&&h.push(s.listitemChecked);void 0!==s.listitemUnchecked&&h.push(s.listitemUnchecked);void 0!==l&&h.push(...P(l));h.length>0&&n(e,...h);const d=[];void 0!==o&&d.push(...P(o));if(a){const e=u?s.listitemChecked:s.listitemUnchecked;void 0!==e&&d.push(e)}void 0!==l&&g&&d.push(...P(l));d.length>0&&r(e,...d)}(t,i.theme,this);const s=e?e.__style:\"\",o=this.__style;s!==o&&S(t.style,o,s),function(e,t,n){const r=t.__textStyle,i=n?n.__textStyle:\"\";if(null!==n&&i===r)return;const s=A(r);for(const t in s)e.style.setProperty(`--listitem-marker-${t}`,s[t]);if(\"\"!==i)for(const t in A(i))t in s||e.style.removeProperty(`--listitem-marker-${t}`)}(t,this,e)}updateDOM(e,t,n){const r=t;return this.updateListItemDOM(e,r,n),!1}updateFromJSON(e){return super.updateFromJSON(e).setValue(e.value).setChecked(e.checked)}exportDOM(e){const t=this.createDOM(e._config),n=this.getFormatType();n&&(t.style.textAlign=n);const r=this.getDirection();return r&&(t.dir=r),le(this)?{after(e){if(x(e)){const t=e.previousElementSibling;if(x(t)&&\"LI\"===t.nodeName){for(;e.firstChild;)t.append(e.firstChild);e.remove()}}return e},element:t}:{element:t}}exportJSON(){return{...super.exportJSON(),checked:this.getChecked(),value:this.getValue()}}append(...e){for(let t=0;t<e.length;t++){const n=e[t];if(f(n)&&this.canMergeWith(n)){const e=n.getChildren();this.append(...e),n.remove()}else super.append(n)}return this}replace(e,t){if(be(e))return super.replace(e);this.setIndent(0);const n=this.getParentOrThrow();if(!Pe(n))return e;if(n.__first===this.getKey())n.insertBefore(e);else if(n.__last===this.getKey())n.insertAfter(e);else{const t=d(n);let r=this.getNextSibling();for(;r;){const e=r;r=r.getNextSibling(),t.append(e)}n.insertAfter(e),e.insertAfter(t)}const r=this.__key;let i=0;if(t&&(f(e)||re(139),i=e.getChildrenSize(),e.splice(i,0,this.getChildren())),t&&f(e)){const t=c();if(a(t))for(const n of t.getStartEndPoints())n.key===r&&\"element\"===n.type&&n.set(e.getKey(),i+n.offset,\"element\")}return this.remove(),0===n.getChildrenSize()&&n.remove(),e}insertAfter(e,t=!0){const n=this.getParentOrThrow();if(Pe(n)||re(39),be(e))return super.insertAfter(e,t);const r=this.getNextSiblings();if(n.insertAfter(e,t),0!==r.length){const i=d(n);r.forEach(e=>i.append(e)),e.insertAfter(i,t)}return e}remove(e){const t=this.getPreviousSibling(),n=this.getNextSibling();super.remove(e),t&&n&&le(t)&&le(n)&&(he(t.getFirstChild(),n.getFirstChild()),n.remove())}resetOnCopyNodeFrom(e){super.resetOnCopyNodeFrom(e),e.getChecked()&&this.setChecked(!1)}insertNewAfter(e,t=!0){const n=d(this);return this.insertAfter(n,t),n}collapseAtStart(e){const t=h();this.getChildren().forEach(e=>t.append(e));const n=this.getParentOrThrow(),r=n.getParentOrThrow(),i=be(r);if(1===n.getChildrenSize())if(i)n.remove(),r.select();else{n.insertBefore(t),n.remove();const r=e.anchor,i=e.focus,s=t.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(t),this.remove();return!0}getValue(){return this.getLatest().__value}setValue(e){const t=this.getWritable();return t.__value=e,t}getChecked(){const e=this.getLatest();let t;const n=this.getParent();return Pe(n)&&(t=n.getListType()),\"check\"===t?Boolean(e.__checked):void 0}setChecked(e){const t=this.getWritable();return t.__checked=e,t}toggleChecked(){const e=this.getWritable();return e.setChecked(!e.__checked)}getIndent(){const e=this.getParent();if(null===e||!this.isAttached())return this.getLatest().__indent;let t=e.getParentOrThrow(),n=0;for(;be(t);)t=t.getParentOrThrow().getParentOrThrow(),n++;return n}setIndent(e){\"number\"!=typeof e&&re(117),(e=Math.floor(e))>=0||re(199);let t=this.getIndent();for(;t!==e;)t<e?(pe(this),t++):(me(this),t--);return this}canInsertAfter(e){return be(e)}canReplaceWith(e){return be(e)}canMergeWith(e){return be(e)||L(e)}extractWithChild(e,t){if(!a(t))return!1;const n=t.anchor.getNode(),r=t.focus.getNode();return this.isParentOf(n)&&this.isParentOf(r)&&this.getTextContent().length===t.getTextContent().length}isParentRequired(){return!0}createParentElementNode(){return Fe(\"bullet\")}canMergeWhenEmpty(){return!0}}function Ce(e){if(e.classList.contains(\"task-list-item\"))for(const t of e.children)if(\"INPUT\"===t.tagName)return ve(t);if(e.classList.contains(\"joplin-checkbox\"))for(const t of e.children)if(t.classList.contains(\"checkbox-wrapper\")&&t.children.length>0&&\"INPUT\"===t.children[0].tagName)return ve(t.children[0]);const t=e.getAttribute(\"aria-checked\"),n=Te(\"true\"===t||\"false\"!==t&&void 0);return N(n,e),{after:ke.bind(null,n),node:F(n,e)}}function ve(e){if(!(\"checkbox\"===e.getAttribute(\"type\")))return{node:null};const t=Te(e.hasAttribute(\"checked\"));return{after:ke.bind(null,t),node:t}}function ke(e,t){const n=t[0];return 1===t.length&&L(n)&&!e.getFormatType()&&n.getFormatType()?(e.setFormat(n.getFormatType()),n.getChildren()):t}function Te(e){return C(new ye(void 0,e))}function be(e){return e instanceof ye}class Se extends v{__tag;__start;__listType;$config(){return this.config(\"list\",{$transform:e=>{!function(e){const t=e.getNextSibling();Pe(t)&&e.getListType()===t.getListType()&&he(e,t)}(e),fe(e)},extends:v,importDOM:k({ol:()=>({conversion:Le,priority:0}),ul:()=>({conversion:Le,priority:0})})})}constructor(e=\"number\",t=1,n){super(n);const r=Ne[e]||e;this.__listType=r,this.__tag=\"number\"===r?\"ol\":\"ul\",this.__start=t}afterCloneFrom(e){super.afterCloneFrom(e),this.__listType=e.__listType,this.__tag=e.__tag,this.__start=e.__start}getTag(){return this.getLatest().__tag}setListType(e){const t=this.getWritable();return t.__listType=e,t.__tag=\"number\"===e?\"ol\":\"ul\",t}getListType(){return this.getLatest().__listType}getStart(){return this.getLatest().__start}setStart(e){const t=this.getWritable();return t.__start=e,t}createDOM(e,t){const n=this.__tag,r=document.createElement(n);return 1!==this.__start&&r.setAttribute(\"start\",String(this.__start)),r.__lexicalListType=this.__listType,xe(r,e.theme,this),r}updateDOM(e,t,n){return e.__tag!==this.__tag||e.__listType!==this.__listType||(xe(t,n.theme,this),e.__start!==this.__start&&t.setAttribute(\"start\",String(this.__start)),!1)}updateFromJSON(e){return super.updateFromJSON(e).setListType(e.listType).setStart(e.start)}exportDOM(e){const t=this.createDOM(e._config,e);return i(t)&&(1!==this.__start&&t.setAttribute(\"start\",String(this.__start)),\"check\"===this.__listType&&t.setAttribute(\"__lexicalListType\",\"check\")),{element:t}}exportJSON(){return{...super.exportJSON(),listType:this.getListType(),start:this.getStart(),tag:this.getTag()}}canBeEmpty(){return!1}canIndent(){return!1}splice(e,t,n){let r=n;for(let e=0;e<n.length;e++){const t=n[e];be(t)||(r===n&&(r=[...n]),r[e]=this.createListItemNode().append(!f(t)||Pe(t)||t.isInline()?t:E(t.getTextContent())))}return super.splice(e,t,r)}extractWithChild(e){return be(e)}createListItemNode(){return Te()}}function xe(e,t,i){const s=[],o=[],l=t.list;if(void 0!==l){const e=l[`${i.__tag}Depth`]||[],t=ie(i)-1,n=t%e.length,r=e[n],c=l[i.__tag];let a;const u=l.nested,g=l.checklist;if(void 0!==u&&u.list&&(a=u.list),void 0!==c&&s.push(c),void 0!==g&&\"check\"===i.__listType&&s.push(g),void 0!==r){s.push(...P(r));for(let t=0;t<e.length;t++)t!==n&&o.push(i.__tag+t)}if(void 0!==a){const e=P(a);t>1?s.push(...e):o.push(...e)}}o.length>0&&n(e,...o),s.length>0&&r(e,...s)}function Le(e){let t;if(function(e){return i(e)&&\"ol\"===e.nodeName.toLowerCase()}(e)){const n=e.start;t=Fe(\"number\",n)}else t=function(e){if(\"check\"===e.getAttribute(\"__lexicallisttype\")||e.classList.contains(\"contains-task-list\")||\"1\"===e.getAttribute(\"data-is-checklist\"))return!0;for(const t of e.childNodes)if(i(t)&&t.hasAttribute(\"aria-checked\"))return!0;return!1}(e)?Fe(\"check\"):Fe(\"bullet\");return F(t,e),{after:e=>function(e,t){const n=t.createListItemNode.bind(t),r=[];for(let t=0;t<e.length;t++){const i=e[t];if(be(i)){r.push(i);const e=i.getChildren();e.length>1&&e.forEach(e=>{Pe(e)&&r.push(n().append(e))})}else r.push(n().append(i))}return r}(e,t),node:t}}const Ne={ol:\"number\",ul:\"bullet\"};function Fe(e=\"number\",t=1){return C(new Se(e,t))}function Pe(e){return e instanceof Se}const Ae=O(\"INSERT_CHECK_LIST_COMMAND\");function Ee(e,t){const n=t&&t.disableTakeFocusOnClick||!1,r=\"boolean\"==typeof n?()=>n:n.peek.bind(n),l=e=>{const t=e.target;if(!i(t))return!1;const n=t.__lexicalCheckListLastHandled;return void 0!==n&&e.timeStamp-n<500},u=e=>{const t=e.target;i(t)&&(t.__lexicalCheckListLastHandled=e.timeStamp)},g=e=>{l(e)||(u(e),Ie(e,r()))},h=e=>{\"touch\"===e.pointerType&&(l(e)||(u(e),Ie(e,r())))},d=e=>{!function(e,t){Oe(e,()=>{e.preventDefault(),t&&e.stopPropagation()})}(e,r())};return s(e.registerCommand(Ae,()=>(ae(\"check\"),!0),I),e.registerCommand(w,t=>De(t,e,!1),I),e.registerCommand(D,t=>De(t,e,!0),I),e.registerCommand(M,()=>{if(null!=we()){const t=e.getRootElement();return null!=t&&t.focus(),!0}return!1},I),e.registerCommand($,t=>{const n=we();return!(null==n||!e.isEditable())&&(e.update(()=>{const e=R(n);be(e)&&(t.preventDefault(),e.toggleChecked())}),!0)},I),e.registerCommand(K,t=>e.getEditorState().read(()=>{const n=c();if(a(n)&&n.isCollapsed()){const{anchor:r}=n,i=\"element\"===r.type;if(i||0===r.offset){const n=r.getNode(),s=o(n,e=>f(e)&&!e.isInline());if(be(s)){const r=s.getParent();if(Pe(r)&&\"check\"===r.getListType()&&(i||s.getFirstDescendant()===n)){const n=e.getElementByKey(s.__key);if(null!=n&&document.activeElement!==n)return n.focus(),t.preventDefault(),!0}}}}return!1}),I),e.registerRootListener(e=>{if(null!==e)return e.addEventListener(\"click\",g),e.addEventListener(\"pointerup\",h),e.addEventListener(\"pointerdown\",d,{capture:!0}),e.addEventListener(\"mousedown\",d,{capture:!0}),e.addEventListener(\"touchstart\",d,{capture:!0,passive:!1}),()=>{e.removeEventListener(\"click\",g),e.removeEventListener(\"pointerup\",h),e.removeEventListener(\"pointerdown\",d,{capture:!0}),e.removeEventListener(\"mousedown\",d,{capture:!0}),e.removeEventListener(\"touchstart\",d,{capture:!0})}}))}function Oe(e,t){const n=e.target;if(!i(n))return;const r=n.firstChild;if(i(r)&&(\"UL\"===r.tagName||\"OL\"===r.tagName))return;const s=n.parentNode;if(!s||\"check\"!==s.__lexicalListType)return;let o=null,c=null;if(\"clientX\"in e)o=e.clientX;else if(\"touches\"in e){const t=e.touches;t.length>0&&(o=t[0].clientX,c=\"touch\")}if(null==o)return;const a=n.getBoundingClientRect(),u=o/l(n),g=window.getComputedStyle?window.getComputedStyle(n,\"::before\"):{width:\"0px\"},h=parseFloat(g.width),d=\"touch\"===c||\"pointerType\"in e&&\"touch\"===e.pointerType?32:0;(\"rtl\"===n.dir?u<a.right+d&&u>a.right-h-d:u>a.left-d&&u<a.left+h+d)&&t()}function Ie(e,t){Oe(e,()=>{if(i(e.target)){const n=e.target,r=B(n);null!=r&&r.isEditable()&&r.update(()=>{const e=R(n);be(e)&&(t?(W(U),W(J)):n.focus(),e.toggleChecked())})}})}function we(){const e=document.activeElement;return i(e)&&\"LI\"===e.tagName&&null!=e.parentNode&&\"check\"===e.parentNode.__lexicalListType?e:null}function De(e,t,n){const r=we();return null!=r&&t.update(()=>{const i=R(r);if(!be(i))return;const s=function(e,t){let n=t?e.getPreviousSibling():e.getNextSibling(),r=e;for(;null==n&&be(r);)r=r.getParentOrThrow().getParent(),null!=r&&(n=t?r.getPreviousSibling():r.getNextSibling());for(;be(n);){const e=t?n.getLastChild():n.getFirstChild();if(!Pe(e))return n;n=t?e.getLastChild():e.getFirstChild()}return null}(i,n);if(null!=s){s.selectStart();const n=t.getElementByKey(s.__key);null!=n&&(e.preventDefault(),setTimeout(()=>{n.focus()},0))}}),!1}const Me=O(\"UPDATE_LIST_START_COMMAND\"),$e=O(\"INSERT_UNORDERED_LIST_COMMAND\"),Re=O(\"INSERT_ORDERED_LIST_COMMAND\"),Ke=O(\"REMOVE_LIST_COMMAND\");function Be(e,t){return s(e.registerCommand(Re,()=>(ae(\"number\"),!0),I),e.registerCommand(Me,e=>{const{listNodeKey:t,newStart:n}=e,r=V(t);return!!Pe(r)&&(\"number\"===r.getListType()&&(r.setStart(n),fe(r)),!0)},I),e.registerCommand($e,()=>(ae(\"bullet\"),!0),I),e.registerCommand(Ke,()=>(de(),!0),I),e.registerCommand(q,()=>_e(!!(t&&t.restoreNumbering)),I),e.registerNodeTransform(ye,e=>{const t=e.getFirstChild();if(t){if(u(t)){const n=t.getStyle(),r=t.getFormat();e.getTextStyle()!==n&&e.setTextStyle(n),e.getTextFormat()!==r&&e.setTextFormat(r)}}else{const t=c();a(t)&&(t.style!==e.getTextStyle()||t.format!==e.getTextFormat())&&t.isCollapsed()&&e.is(t.anchor.getNode())&&e.setTextStyle(t.style).setTextFormat(t.format)}}),e.registerNodeTransform(z,e=>{const t=e.getParent();if(be(t)&&e.is(t.getFirstChild())){const n=e.getStyle(),r=e.getFormat();n===t.getTextStyle()&&r===t.getTextFormat()||t.setTextStyle(n).setTextFormat(r)}}))}function We(e){const t=e=>{const t=e.getParent();if(Pe(e.getFirstChild())||!Pe(t))return;const n=o(e,e=>be(e)&&Pe(e.getParent())&&be(e.getPreviousSibling()));if(null===n&&e.getIndent()>0)e.setIndent(0);else if(be(n)){const r=n.getPreviousSibling();if(be(r)){const n=function(e){let t=e,n=t.getFirstChild();for(;Pe(n);){const e=n.getLastChild();if(!be(e))break;t=e,n=t.getFirstChild()}return t}(r),i=n.getParent();if(Pe(i)){const n=ie(i);n+1<ie(t)&&e.setIndent(n)}}}};return e.registerNodeTransform(Se,e=>{const n=[e];for(;n.length>0;){const e=n.shift();if(Pe(e))for(const r of e.getChildren())if(be(r)){t(r);const e=r.getFirstChild();Pe(e)&&n.push(e)}}})}const Ue=H({build:(e,t,n)=>G(t),config:j({hasStrictIndent:!1,shouldPreserveNumbering:!1}),name:\"@lexical/list/List\",nodes:()=>[Se,ye],register(e,t,n){const r=n.getOutput();return s(Q(()=>Be(e,{restoreNumbering:r.shouldPreserveNumbering.value})),Q(()=>r.hasStrictIndent.value?We(e):void 0))}}),Je=H({build:(e,t)=>G(t),config:j({disableTakeFocusOnClick:!1}),dependencies:[Ue],name:\"@lexical/list/CheckList\",register:(e,t,n)=>Ee(e,n.getOutput())});function Ve(e){const t=[];for(const n of e)if(be(n)){t.push(n);const e=n.getChildren();if(e.length>1)for(const n of e)Pe(n)&&t.push(Te().append(n))}else t.push(Te().append(n));return t}const qe=ee({$import:(e,t)=>{let n;var r;return ne(t,\"ol\")?n=Fe(\"number\",t.start):n=(r=t).matches('[__lexicallisttype=\"check\"], .contains-task-list, [data-is-checklist=\"1\"]')||null!==r.querySelector(\":scope > [aria-checked]\")?Fe(\"check\"):Fe(\"bullet\"),F(n,t),[n.splice(0,0,Ve(e.$importChildren(t)))]},match:te.tag(\"ol\",\"ul\"),name:\"@lexical/list/list\"});function ze(e,t){if(1!==t.length)return t;const n=t[0];return L(n)&&!e.getFormatType()&&n.getFormatType()?(e.setFormat(n.getFormatType()),n.getChildren()):t}const He=ee({$import:(e,t)=>{const n=t.getAttribute(\"aria-checked\"),r=Te(\"true\"===n||\"false\"!==n&&void 0);return N(r,t),F(r,t),[r.splice(0,0,ze(r,e.$importChildren(t)))]},match:te.tag(\"li\"),name:\"@lexical/list/li\"});function je(e,t,n){const r=ne(n,\"input\")?n:n.querySelector('input[type=\"checkbox\"]');if(!r||\"checkbox\"!==r.getAttribute(\"type\"))return[];const i=Te(r.hasAttribute(\"checked\"));return N(i,t),F(i,t),[i.splice(0,0,ze(i,e.$importChildren(t)))]}const Xe={$accepts:e=>be(e)||Pe(e),$packageRun:e=>[Te().splice(0,0,e)],name:\"ListSchema\"},Ge=[ee({$import:(e,t,n)=>{const r=t.querySelector(':scope > input[type=\"checkbox\"]');return r?je(e,t,r):n()},match:te.tag(\"li\").classAll(\"task-list-item\"),name:\"@lexical/list/li-task-list-item\"}),ee({$import:(e,t,n)=>{const r=t.querySelector(\":scope > .checkbox-wrapper\");if(!r)return n();const i=r.querySelector(':scope > input[type=\"checkbox\"]');return i?je(e,t,i):n()},match:te.tag(\"li\").classAll(\"joplin-checkbox\"),name:\"@lexical/list/li-joplin-checkbox\"}),qe,He],Qe=H({dependencies:[Y,Ue,X(Z,{rules:Ge})],name:\"@lexical/list/Import\"});function Ye(e,t){e.update(()=>ae(t))}function Ze(e){e.update(()=>de())}export{Te as $createListItemNode,Fe as $createListNode,ie as $getListDepth,_e as $handleListInsertParagraph,ae as $insertList,be as $isListItemNode,Pe as $isListNode,de as $removeList,Je as CheckListExtension,Ae as INSERT_CHECK_LIST_COMMAND,Re as INSERT_ORDERED_LIST_COMMAND,$e as INSERT_UNORDERED_LIST_COMMAND,Ue as ListExtension,Qe as ListImportExtension,Ge as ListImportRules,ye as ListItemNode,Se as ListNode,Xe as ListSchema,Ke as REMOVE_LIST_COMMAND,Me as UPDATE_LIST_START_COMMAND,Ye as insertList,Ee as registerCheckList,Be as registerList,We as registerListStrictIndentTransform,Ze 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{configExtension as t,$getPeerDependency as e,getPeerDependencyFromEditor as n}from\"@lexical/extension\";import{$generateNodesFromDOMViaExtension as r,contextValue as o,ImportSource as i,ImportSourceDataTransfer as l,$generateNodesFromDOM as c,$generateHtmlFromNodes as s}from\"@lexical/html\";import{$sliceSelectedTextNodeContent as u}from\"@lexical/selection\";import{objectKlassEquals as a}from\"@lexical/utils\";import{defineExtension as f,$getEditor as p,shallowMergeConfig as d,safeCast as m,$isRangeSelection as y,tokenizeRawText as x,$getSelection as g,$createTabNode as h,$getRoot as T,$parseSerializedNode as v,SELECTION_INSERT_CLIPBOARD_NODES_COMMAND as w,getDOMSelection as M,COPY_COMMAND as b,COMMAND_PRIORITY_CRITICAL as $,$isElementNode as D,$isTextNode as C,$splitAtPointCaretNext as P,$setSelectionFromCaretRange as S,$getCollapsedCaretRange as N,$caretFromPoint as O,$isTextPointCaret as R,$getCaretRange as A,$getChildCaret as E,isSelectionWithinEditor as F,$getNearestNodeFromDOMNode as K,$getTextPointCaret as _,$getChildCaretAtIndex as j,$getCaretRangeInDirection as I,$caretRangeFromSelection as J,$comparePointCaretNext as L}from\"lexical\";function k(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}function H(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 U={\"application/x-lexical-editor\":0,\"text/html\":10,\"text/plain\":20,\"text/uri-list\":30};function W(t){if(window.trustedTypes&&window.trustedTypes.createPolicy){return window.trustedTypes.createPolicy(\"lexical\",{createHTML:t=>t}).createHTML(t)}return t}const q=(t,e)=>{if(!y(e))return e.insertRawText(t),!0;const n=t=>{const e=g();y(e)&&t(e)};return x(t,{linebreak:()=>n(t=>t.insertParagraph()),tab:()=>n(t=>t.insertNodes([h()])),text:t=>n(e=>e.insertText(t))}),!0},z={\"application/x-lexical-editor\":[(t,e,n)=>{try{const n=p(),r=JSON.parse(t);if(r&&r.namespace===n._config.namespace&&Array.isArray(r.nodes)){return ct(n,at(r.nodes),e),!0}}catch(t){console.error(t)}return n()}],\"text/html\":[(t,e,n)=>{try{const n=p(),r=(new DOMParser).parseFromString(W(t),\"text/html\");return ct(n,c(n,r),e),!0}catch(t){return console.error(t),n()}}],\"text/plain\":[q],\"text/uri-list\":[q]};function B(t,e,n,r){if(!t)return!1;const o=i=>!!t[i]&&t[i](e,n,o.bind(null,i-1),r);return o(t.length-1)}function G(t,e,n){const r=e.getData(\"text/plain\");for(const o of function(t){return Object.keys(t.$importMimeType).filter(e=>void 0!==t.$importMimeType[e]).sort((e,n)=>{const r=t.priority[e],o=t.priority[n];return void 0===r&&void 0===o?e<n?-1:e>n?1:0:void 0===r?1:void 0===o?-1:r-o})}(t)){const i=e.getData(o);if(i&&((\"text/html\"!==o||i!==r)&&B(t.$importMimeType[o],i,n,e)))return!0}return!1}const X={$importMimeType:z,$insertDataTransfer:(t,e)=>G({$importMimeType:z,priority:U},t,e),priority:U};const Y=f({build:(t,e)=>({$importMimeType:e.$importMimeType,$insertDataTransfer:(t,n)=>G(e,t,n),priority:e.priority}),config:m({$importMimeType:z,priority:U}),mergeConfig(t,e){const n=d(t,e);if(e.$importMimeType){const r={...t.$importMimeType};for(const[t,n]of Object.entries(e.$importMimeType))if(n){const e=r[t];r[t]=e?[...e,...n]:n}n.$importMimeType=r}return e.priority&&(n.priority={...t.priority,...e.priority}),n},name:\"@lexical/clipboard/Import\"}),Q=f({dependencies:[t(Y,{$importMimeType:{\"text/html\":[(t,e,n,c)=>{const s=(new DOMParser).parseFromString(W(t),\"text/html\"),u=r(s,{context:[o(i,\"paste\"),o(l,c)]});return ct(p(),u,e),!0}]}})],name:\"@lexical/clipboard/DOMImport\"});function V(t,e=g()){return null==e&&H(166),y(e)&&e.isCollapsed()||0===e.getNodes().length?\"\":s(t,e)}function Z(t,e=g()){return null==e&&H(166),y(e)&&e.isCollapsed()||0===e.getNodes().length?null:JSON.stringify(ut(t,e))}function tt(t,e){const n=t.getData(\"text/plain\")||t.getData(\"text/uri-list\");null!=n&&e.insertRawText(n)}function et(t,n,r){(function(){const t=e(Y.name);return t?t.output:X})().$insertDataTransfer(t,n)}const nt=\"application/x-lexical-drag\";function rt(t,e){const n={editorKey:e.getKey()};t.setData(nt,JSON.stringify(n))}function ot(t,e,n){const r=t.dataTransfer;if(null===r)return!1;const o=function(t){const e=t.getData(nt);if(!e)return null;let n;try{n=JSON.parse(e)}catch(t){return null}return null!==(r=n)&&\"object\"==typeof r&&\"editorKey\"in r&&\"string\"==typeof r.editorKey?n:null;var r}(r);if(null===o)return!1;const i=function(t){const e=k(t.clientX,t.clientY);if(null===e)return null;const n=K(e.node);if(null===n)return null;if(C(n))return _(n,\"next\",e.offset);if(D(n))return j(n,e.offset,\"next\");const r=n.getParent();return null===r?null:j(r,n.getIndexWithinParent()+1,\"next\")}(t);if(null===i)return!1;const l=P(i);if(null===l)return!1;const c=o.editorKey===e.getKey(),s=g();if(c){if(!y(s)||s.isCollapsed())return!1;if(function(t,e){const{anchor:n,focus:r}=I(J(e),\"next\");return L(n,t)<0&&L(t,r)<0}(i,s))return t.preventDefault(),!0;s.removeText()}if(!l.origin.isAttached())return t.preventDefault(),!0;if(n(r,S(N(l)),e),!c){const t=e.getRootElement(),n=t?t.ownerDocument:null,r=n?function(t,e){const n=e.querySelectorAll('[data-lexical-editor=\"true\"]');for(const e of Array.from(n)){const n=e.__lexicalEditor;if(n&&n.getKey()===t)return e}return null}(o.editorKey,n):null;null!==r&&r.dispatchEvent(new InputEvent(\"beforeinput\",{bubbles:!0,cancelable:!0,inputType:\"deleteByDrag\"}))}return t.preventDefault(),!0}function it(t,e){return ot(t,e,et)}function lt(t,e){return ot(t,e,(t,e)=>tt(t,e))}function ct(t,e,n){t.dispatchCommand(w,{nodes:e,selection:n})||(n.insertNodes(e),function(t){if(y(t)&&t.isCollapsed()){const e=t.anchor;let n=null;const r=O(e,\"previous\");if(r)if(R(r))n=r.origin;else{const t=A(r,E(T(),\"next\").getFlipped());for(const e of t){if(C(e.origin)){n=e.origin;break}if(D(e.origin)&&!e.origin.isInline())break}}if(n&&C(n)){const e=n.getFormat(),r=n.getStyle();t.format===e&&t.style===r||(t.format=e,t.style=r,t.dirty=!0)}}}(n))}function st(t,e,n,r=[]){let o=null===e||n.isSelected(e);const i=D(n)&&n.excludeFromCopy(\"html\");let l=n;null!==e&&C(l)&&(l=u(e,l,\"clone\"));const c=D(l)?l.getChildren():[],s=function(t){const e=t.exportJSON(),n=t.constructor;if(e.type!==n.getType()&&H(58,n.name),D(t)){const t=e.children;Array.isArray(t)||H(59,n.name)}return e}(l);C(l)&&0===l.getTextContentSize()&&(o=!1);for(let r=0;r<c.length;r++){const i=c[r],l=st(t,e,i,s.children);!o&&D(n)&&l&&n.extractWithChild(i,e,\"clone\")&&(o=!0)}if(o&&!i)r.push(s);else if(Array.isArray(s.children))for(let t=0;t<s.children.length;t++){const e=s.children[t];r.push(e)}return o}function ut(t,e){const n=[],r=T().getChildren();for(let o=0;o<r.length;o++){st(t,e,r[o],n)}return{namespace:t._config.namespace,nodes:n}}function at(t){const e=[];for(const n of t)e.push(v(n));return e}let ft=null;async function pt(t,e,n){if(null!==ft)return!1;if(null!==e)return new Promise((r,o)=>{t.update(()=>{r(dt(t,e,n))})});const r=t.getRootElement(),o=t._window||window,i=o.document,l=M(o);if(null===r||null===l)return!1;const c=i.createElement(\"span\");c.style.position=\"fixed\",c.style.top=\"-1000px\",c.append(i.createTextNode(\"#\")),r.append(c);const s=new Range;return s.setStart(c,0),s.setEnd(c,1),l.removeAllRanges(),l.addRange(s),new Promise((e,r)=>{const l=t.registerCommand(b,r=>(a(r,ClipboardEvent)&&(l(),null!==ft&&(o.clearTimeout(ft),ft=null),e(dt(t,r,n))),!0),$);ft=o.setTimeout(()=>{l(),ft=null,e(!1)},50),i.execCommand(\"copy\"),c.remove()})}function dt(t,e,n){if(void 0===n){const e=M(t._window),r=g();if(!r||r.isCollapsed())return!1;if(!e)return!1;const o=e.anchorNode,i=e.focusNode;if(null!==o&&null!==i&&!F(t,o,i))return!1;n=yt(r)}e.preventDefault();const r=e.clipboardData;return null!==r&&(xt(r,n),!0)}const mt=[[\"text/html\",V],[\"application/x-lexical-editor\",Z]];function yt(t=g()){return function(t,e){const n={\"text/plain\":\"\"};for(const[r,o]of Object.entries(t))if(o){const t=Tt(o,e);null!==t&&(n[r]=t)}return n}(gt(),t)}function xt(t,e){for(const[n]of mt)void 0===e[n]&&t.setData(n,\"\");for(const n in e){const r=e[n];void 0!==r&&t.setData(n,r)}}function gt(t=p()){const e=n(t,wt.name);return e?e.output:ht}const ht={\"application/x-lexical-editor\":[(t,e)=>t?Z(p(),t):e()],\"text/html\":[(t,e)=>t?V(p(),t):e()],\"text/plain\":[(t,e)=>t?t.getTextContent():e()]};function Tt(t,e){const n=r=>t[r]?t[r](e,n.bind(null,r-1)):null;return n(t.length-1)}function vt(t,e=g()){return Tt(gt()[t]||[],e)}const wt=f({build:(t,e,n)=>e.$exportMimeType,config:m({$exportMimeType:ht}),mergeConfig(t,e){const n=d(t,e);if(e.$exportMimeType){const r={...t.$exportMimeType};for(const[t,n]of Object.entries(e.$exportMimeType))if(n){const e=r[t];r[t]=e?[...e,...n]:n}n.$exportMimeType=r}return n},name:\"@lexical/clipboard/GetClipboardData\"});export{vt as $exportMimeTypeFromSelection,ut as $generateJSONFromSelectedNodes,at as $generateNodesFromSerializedNodes,yt as $getClipboardDataFromSelection,V as $getHtmlContent,Z as $getLexicalContent,lt as $handlePlainTextDrop,it as $handleRichTextDrop,tt as $insertDataTransferForPlainText,et as $insertDataTransferForRichText,ct as $insertGeneratedNodes,rt as $writeDragSourceToDataTransfer,Q as ClipboardDOMImportExtension,Y as ClipboardImportExtension,z as DEFAULT_IMPORT_MIME_TYPE,U as DEFAULT_IMPORT_MIME_TYPE_PRIORITY,wt as GetClipboardDataExtension,k as caretFromPoint,pt as copyToClipboard,xt 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 e,caretFromPoint as t,$handleRichTextDrop as n,setLexicalClipboardDataTransfer as r,$getClipboardDataFromSelection as o,$writeDragSourceToDataTransfer as s,copyToClipboard as i}from\"@lexical/clipboard\";import{NormalizeInlineElementsExtension as a,NormalizeTripleClickSelectionExtension as c,effect as l,namedSignals as u,signal as m}from\"@lexical/extension\";import{$isParentRTL as f,$shouldOverrideDefaultCharacterSelection as p,$moveCharacter as d}from\"@lexical/selection\";import{addClassNamesToElement as g,isHTMLElement as h,objectKlassEquals as C,mergeRegister as y,$findMatchingParent as x,$handleIndentAndOutdent as v,$getNearestBlockElementAncestorOrThrow as D}from\"@lexical/utils\";import{defineExtension as N,safeCast as b,shallowMergeConfig as T,configExtension as _,setNodeIndentFromDOM as F,$setFormatFromDOM as O,$setDirectionFromDOM as E,isHTMLElement as S,createCommand as k,$applyNodeReplacement as I,ElementNode as K,$createParagraphNode as w,CLICK_COMMAND as A,$getSelection as M,$isNodeSelection as P,$isRangeSelection as L,COMMAND_PRIORITY_EDITOR as z,DELETE_CHARACTER_COMMAND as J,DELETE_WORD_COMMAND as $,DELETE_LINE_COMMAND as q,CONTROLLED_TEXT_INSERTION_COMMAND as W,REMOVE_TEXT_COMMAND as R,FORMAT_TEXT_COMMAND as j,FORMAT_ELEMENT_COMMAND as B,$isElementNode as X,INSERT_LINE_BREAK_COMMAND as Y,INSERT_PARAGRAPH_COMMAND as G,INSERT_TAB_COMMAND as H,$createTabNode as Q,$insertNodes as U,INDENT_CONTENT_COMMAND as V,OUTDENT_CONTENT_COMMAND as Z,KEY_ARROW_UP_COMMAND as ee,$getAdjacentNode as te,$isDecoratorNode as ne,KEY_ARROW_DOWN_COMMAND as re,KEY_ARROW_LEFT_COMMAND as oe,KEY_ARROW_RIGHT_COMMAND as se,KEY_BACKSPACE_COMMAND as ie,IS_IOS as ae,KEY_DELETE_COMMAND as ce,KEY_ENTER_COMMAND as le,IS_SAFARI as ue,IS_APPLE_WEBKIT as me,CAN_USE_BEFORE_INPUT as fe,KEY_ESCAPE_COMMAND as pe,DROP_COMMAND as de,$getNearestNodeFromDOMNode as ge,$createRangeSelection as he,$isTextNode as Ce,$normalizeSelection__EXPERIMENTAL as ye,$setSelection as xe,DRAGSTART_COMMAND as ve,DRAGOVER_COMMAND as De,SELECT_ALL_COMMAND as Ne,$selectAll as be,COPY_COMMAND as Te,CUT_COMMAND as _e,PASTE_COMMAND as Fe,isDOMNode as Oe,isSelectionCapturedInDecoratorInput as Ee,KEY_SPACE_COMMAND as Se,KEY_TAB_COMMAND as ke,MOVE_TO_END as Ie,MOVE_TO_START as Ke,$getRoot as we,$isRootNode as Ae,PASTE_TAG as Me}from\"lexical\";import{DragonExtension as Pe}from\"@lexical/dragon\";import{CoreImportExtension as Le,DOMImportExtension as ze,defineImportRule as Je,sel as $e}from\"@lexical/html\";function qe(e,t){return e&&null!==t?T(e,t):t}const We=N({build:(e,t)=>u(t),config:b({escapeFormatTriggers:{capitalize:{enter:!0,space:!0,tab:!0},lowercase:{enter:!0,space:!0,tab:!0},uppercase:{enter:!0,space:!0,tab:!0}}}),conflictsWith:[\"@lexical/plain-text\"],dependencies:[Pe,a,c],mergeConfig:function(e,t){const n=T(e,t);return t.escapeFormatTriggers&&(n.escapeFormatTriggers=function(e,t){const n=T(e,t);for(const r of Object.keys(t))n[r]=qe(e[r],t[r]);return n}(e.escapeFormatTriggers,t.escapeFormatTriggers)),n},name:\"@lexical/rich-text\",nodes:()=>[He,Xe],register:(e,t,n)=>l(()=>st(e,n.getOutput().escapeFormatTriggers))});const Re=[Je({$import:(e,t)=>{const n=Ze(t.nodeName.toLowerCase());return F(t,n),O(n,t),E(n,t),[n.splice(0,0,e.$importChildren(t))]},match:$e.tag(\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"),name:\"@lexical/rich-text/heading\"}),Je({$import:(e,t)=>{const n=Ye();return O(n,t),F(t,n),E(n,t),[n.splice(0,0,e.$importChildren(t))]},match:$e.tag(\"blockquote\"),name:\"@lexical/rich-text/blockquote\"}),Je({$import:(e,t,n)=>{const r=t.firstChild;return r&&(S(o=r)&&\"SPAN\"===o.nodeName&&\"26pt\"===o.style.fontSize)?e.$importChildren(t):n();var o},match:$e.tag(\"p\"),name:\"@lexical/rich-text/google-docs-title-p\"}),Je({$import:(e,t,n)=>\"26pt\"!==t.style.fontSize?n():[Ze(\"h1\").splice(0,0,e.$importChildren(t))],match:$e.tag(\"span\"),name:\"@lexical/rich-text/google-docs-title-span\"})],je=N({dependencies:[Le,We,_(ze,{rules:Re})],name:\"@lexical/rich-text/Import\"}),Be=k(\"DRAG_DROP_PASTE_FILE\");class Xe extends K{static getType(){return\"quote\"}static clone(e){return new Xe(e.__key)}createDOM(e){const t=document.createElement(\"blockquote\");return g(t,e.theme.quote),t}updateDOM(e,t){return!1}static importDOM(){return{blockquote:e=>({conversion:Ve,priority:0})}}exportDOM(e){const{element:t}=super.exportDOM(e);if(h(t)){this.isEmpty()&&t.append(document.createElement(\"br\"));const e=this.getFormatType();e&&(t.style.textAlign=e);const n=this.getDirection();n&&(t.dir=n)}return{element:t}}static importJSON(e){return Ye().updateFromJSON(e)}insertNewAfter(e,t){const n=w(),r=this.getDirection();return n.setDirection(r),this.insertAfter(n,t),n}collapseAtStart(){const e=w();return this.getChildren().forEach(t=>e.append(t)),this.replace(e),!0}canMergeWhenEmpty(){return!0}}function Ye(){return I(new Xe)}function Ge(e){return e instanceof Xe}class He extends K{__tag;static getType(){return\"heading\"}static clone(e){return new He(e.__tag,e.__key)}afterCloneFrom(e){super.afterCloneFrom(e),this.__tag=e.__tag}constructor(e=\"h1\",t){super(t),this.__tag=e}getTag(){return this.getLatest().__tag}setTag(e){const t=this.getWritable();return t.__tag=e,t}createDOM(e){const t=this.__tag,n=document.createElement(t),r=e.theme.heading;if(void 0!==r){const e=r[t];g(n,e)}return n}updateDOM(e,t,n){return e.__tag!==this.__tag}static importDOM(){return{h1:e=>({conversion:Ue,priority:0}),h2:e=>({conversion:Ue,priority:0}),h3:e=>({conversion:Ue,priority:0}),h4:e=>({conversion:Ue,priority:0}),h5:e=>({conversion:Ue,priority:0}),h6:e=>({conversion:Ue,priority:0}),p:e=>{const t=e.firstChild;return null!==t&&Qe(t)?{conversion:()=>({node:null}),priority:3}:null},span:e=>Qe(e)?{conversion:e=>({node:Ze(\"h1\")}),priority:3}:null}}exportDOM(e){const{element:t}=super.exportDOM(e);if(h(t)){this.isEmpty()&&t.append(document.createElement(\"br\"));const e=this.getFormatType();e&&(t.style.textAlign=e);const n=this.getDirection();n&&(t.dir=n)}return{element:t}}static importJSON(e){return Ze(e.tag).updateFromJSON(e)}updateFromJSON(e){return super.updateFromJSON(e).setTag(e.tag)}exportJSON(){return{...super.exportJSON(),tag:this.getTag()}}insertNewAfter(e,t=!0){const n=e?e.anchor.offset:0,r=this.getLastDescendant(),o=!r||e&&e.anchor.key===r.getKey()&&n===r.getTextContentSize()||!e?w():Ze(this.getTag()),s=this.getDirection();if(o.setDirection(s),this.insertAfter(o,t),0===n&&!this.isEmpty()&&e){const e=w();e.select(),this.replace(e,!0)}return o}collapseAtStart(){if(this.isEmpty()){const e=w();this.getChildren().forEach(t=>e.append(t)),this.replace(e)}return!0}extractWithChild(){return!0}}function Qe(e){return\"span\"===e.nodeName.toLowerCase()&&\"26pt\"===e.style.fontSize}function Ue(e){const t=e.nodeName.toLowerCase();let n=null;return\"h1\"!==t&&\"h2\"!==t&&\"h3\"!==t&&\"h4\"!==t&&\"h5\"!==t&&\"h6\"!==t||(n=Ze(t),F(e,n),O(n,e),E(n,e)),{node:n}}function Ve(e){const t=Ye();return O(t,e),F(e,t),E(t,e),{node:t}}function Ze(e=\"h1\"){return I(new He(e))}function et(e){return e instanceof He}function tt(e){let t=null;if(C(e,DragEvent)?t=e.dataTransfer:C(e,ClipboardEvent)&&(t=e.clipboardData),null===t)return[!1,[],!1];const n=t.types,r=n.includes(\"Files\"),o=n.includes(\"text/html\")||n.includes(\"text/plain\");return[r,Array.from(t.files),o]}function nt(e){const t=ge(e);return ne(t)}function rt(e,t,n,r){let o=!1,s=null;if(e.isCollapsed()&&\"text\"===e.anchor.type){const t=e.anchor.getNode();if(Ce(t)){s=t;const r=e.anchor.offset,i=r===t.getTextContentSize()&&null===t.getNextSibling(),a=0===r&&null===t.getPreviousSibling();o=\"end\"===n&&i||\"start\"===n&&a||\"both\"===n&&(i||a)}}let i=!1;for(const[n,a]of Object.entries(r)){if(null==a||!a[t])continue;const r=n;if(a.onlyAtBoundary){if(!(o&&s&&Ce(s)&&s.hasFormat(r)))continue;i=!0}e.hasFormat(r)&&e.toggleFormat(r)}i&&e.setStyle(\"\")}const ot={capitalize:{enter:!0,space:!0,tab:!0},lowercase:{enter:!0,space:!0,tab:!0},uppercase:{enter:!0,space:!0,tab:!0}};function st(a,c=m(ot)){return y(a.registerCommand(A,()=>{const e=M();return P(e)?(e.clear(),!0):(L(e)&&rt(e,\"click\",\"both\",c.peek()),!1)},z),a.registerCommand(J,e=>{const t=M();return L(t)?(t.deleteCharacter(e),!0):!!P(t)&&(t.deleteNodes(),!0)},z),a.registerCommand($,e=>{const t=M();return!!L(t)&&(t.deleteWord(e),!0)},z),a.registerCommand(q,e=>{const t=M();return!!L(t)&&(t.deleteLine(e),!0)},z),a.registerCommand(W,t=>{const n=M();if(\"string\"==typeof t)null!==n&&n.insertText(t);else{if(null===n)return!1;const r=t.dataTransfer;if(null!=r)e(r,n,a);else if(L(n)){const e=t.data;return e&&n.insertText(e),!0}}return!0},z),a.registerCommand(R,()=>{const e=M();return!!L(e)&&(e.removeText(),!0)},z),a.registerCommand(j,e=>{const t=M();return!!L(t)&&(t.formatText(e),!0)},z),a.registerCommand(B,e=>{const t=M();if(!L(t)&&!P(t))return!1;const n=t.getNodes();for(const t of n){const n=x(t,e=>X(e)&&!e.isInline());null!==n&&n.setFormat(e)}return!0},z),a.registerCommand(Y,e=>{const t=M();return!!L(t)&&(t.insertLineBreak(e),!0)},z),a.registerCommand(G,()=>{const e=M();return!!L(e)&&(e.insertParagraph(),!0)},z),a.registerCommand(H,()=>{const e=Q(),t=M();return L(t)&&(e.setFormat(t.format),e.setStyle(t.style)),U([e]),!0},z),a.registerCommand(V,()=>v(e=>{const t=e.getIndent();e.setIndent(t+1)}),z),a.registerCommand(Z,()=>v(e=>{const t=e.getIndent();t>0&&e.setIndent(Math.max(0,t-1))}),z),a.registerCommand(ee,e=>{const t=M();if(P(t)){const n=t.getNodes();if(n.length>0)return e.preventDefault(),n[0].selectPrevious(),!0}else if(L(t)){const n=te(t.focus,!0);if(!e.shiftKey&&ne(n)&&!n.isIsolated()&&!n.isInline())return n.selectPrevious(),e.preventDefault(),!0}return!1},z),a.registerCommand(re,e=>{const t=M();if(P(t)){const n=t.getNodes();if(n.length>0)return e.preventDefault(),n[0].selectNext(0,0),!0}else if(L(t)){if(function(e){const t=e.focus;return\"root\"===t.key&&t.offset===we().getChildrenSize()}(t))return e.preventDefault(),!0;const n=te(t.focus,!1);if(!e.shiftKey&&ne(n)&&!n.isIsolated()&&!n.isInline())return n.selectNext(),e.preventDefault(),!0}return!1},z),a.registerCommand(oe,e=>{const t=M();if(P(t)){const n=t.getNodes();if(n.length>0)return e.preventDefault(),f(n[0])?n[0].selectNext(0,0):n[0].selectPrevious(),!0}if(!L(t))return!1;if(e.shiftKey||rt(t,\"arrow\",\"start\",c.peek()),p(t,!0)){const n=e.shiftKey;return e.preventDefault(),d(t,n,!0),!0}return!1},z),a.registerCommand(se,e=>{const t=M();if(P(t)){const n=t.getNodes();if(n.length>0)return e.preventDefault(),f(n[0])?n[0].selectPrevious():n[0].selectNext(0,0),!0}if(!L(t))return!1;if(e.shiftKey||rt(t,\"arrow\",\"end\",c.peek()),p(t,!1)){const n=e.shiftKey;return e.preventDefault(),d(t,n,!1),!0}return!1},z),a.registerCommand(ie,e=>{if(nt(e.target))return!1;const t=M();if(L(t)){if(function(e){if(!e.isCollapsed())return!1;const{anchor:t}=e;if(0!==t.offset)return!1;const n=t.getNode();if(Ae(n))return!1;const r=D(n);return r.getIndent()>0&&(r.is(n)||n.is(r.getFirstDescendant()))}(t))return e.preventDefault(),a.dispatchCommand(Z,void 0);if(ae&&\"ko-KR\"===navigator.language)return!1}else if(!P(t))return!1;return e.preventDefault(),a.dispatchCommand(J,!0)},z),a.registerCommand(ce,e=>{if(nt(e.target))return!1;const t=M();return!(!L(t)&&!P(t))&&(e.preventDefault(),a.dispatchCommand(J,!1))},z),a.registerCommand(le,e=>{let t=M();if(P(t)){const e=t.getNodes();1===e.length&&ne(e[0])&&!e[0].isInline()&&(t=e[0].selectNext())}if(!L(t))return!1;if(rt(t,\"enter\",\"both\",c.peek()),null!==e){if((ae||ue||me)&&fe)return!1;if(e.preventDefault(),e.shiftKey)return a.dispatchCommand(Y,!1)}return a.dispatchCommand(G,void 0)},z),a.registerCommand(pe,()=>{const e=M();return!!L(e)&&(a.blur(),!0)},z),a.registerCommand(de,e=>{const[,r]=tt(e);if(r.length>0){const n=e.clientX,o=e.clientY,s=t(n,o);if(null!==s){const{offset:e,node:t}=s,n=ge(t);if(null!==n){const t=he();if(Ce(n))t.anchor.set(n.getKey(),e,\"text\"),t.focus.set(n.getKey(),e,\"text\");else{const e=n.getParentOrThrow().getKey(),r=n.getIndexWithinParent()+1;t.anchor.set(e,r,\"element\"),t.focus.set(e,r,\"element\")}const r=ye(t);xe(r)}a.dispatchCommand(Be,r)}return e.preventDefault(),!0}return n(e,a)},z),a.registerCommand(ve,e=>{const[t]=tt(e),n=M();return!(t&&!L(n))&&(L(n)&&!n.isCollapsed()&&null!==e.dataTransfer&&(r(e.dataTransfer,o(n)),s(e.dataTransfer,a)),!0)},z),a.registerCommand(De,e=>{const[n]=tt(e),r=M();if(n&&!L(r))return!1;const o=e.clientX,s=e.clientY,i=t(o,s);if(null!==i){const t=ge(i.node);ne(t)&&e.preventDefault()}return!0},z),a.registerCommand(Ne,()=>(be(),!0),z),a.registerCommand(Te,e=>(i(a,C(e,ClipboardEvent)?e:null),!0),z),a.registerCommand(_e,e=>(async function(e,t){await i(t,C(e,ClipboardEvent)?e:null),t.update(()=>{const e=M();L(e)?e.removeText():P(e)&&e.getNodes().forEach(e=>e.remove())})}(e,a),!0),z),a.registerCommand(Fe,t=>{const[,n,r]=tt(t);if(n.length>0&&!r)return a.dispatchCommand(Be,n),!0;if(Oe(t.target)&&Ee(t.target))return!1;return null!==M()&&(function(t,n){t.preventDefault(),n.update(()=>{const r=M(),o=C(t,InputEvent)||C(t,KeyboardEvent)?null:t.clipboardData;null!=o&&null!==r&&e(o,r,n)},{tag:Me})}(t,a),!0)},z),a.registerCommand(Se,()=>{const e=M();return L(e)&&rt(e,\"space\",\"both\",c.peek()),!1},z),a.registerCommand(ke,()=>{const e=M();return L(e)&&rt(e,\"tab\",\"both\",c.peek()),!1},z),a.registerCommand(Ie,e=>{const t=M();if(!L(t))return!1;const{anchor:n}=t;if(\"element\"!==n.type||0!==n.offset)return!1;const r=n.getNode();if(!X(r))return!1;const o=r.getFirstChild();if(!ne(o)||!o.isInline())return!1;const s=r.getLastDescendant();if(null==s||ne(s))return!1;const i=r.getKey(),a=r.selectEnd();return e.shiftKey&&a.anchor.set(i,0,\"element\"),e.preventDefault(),e.stopPropagation(),!0},z),a.registerCommand(Ke,e=>{const t=M();if(!L(t))return!1;const{anchor:n,focus:r}=t,o=x(r.getNode(),e=>X(e)&&!e.isInline());if(null===o)return!1;const s=o.getFirstChild();if(!ne(s)||!s.isInline())return!1;const i=o.getLastDescendant();if(null==i||ne(i))return!1;if(x(n.getNode(),e=>X(e)&&!e.isInline())!==o)return!1;const a=o.getKey();return(\"element\"!==r.type||r.key!==a||0!==r.offset)&&(t.focus.set(a,0,\"element\"),e.shiftKey||t.anchor.set(a,0,\"element\"),e.preventDefault(),e.stopPropagation(),!0)},z))}export{Ze as $createHeadingNode,Ye as $createQuoteNode,et as $isHeadingNode,Ge as $isQuoteNode,Be as DRAG_DROP_PASTE,He as HeadingNode,Xe as QuoteNode,We as RichTextExtension,je as RichTextImportExtension,Re as RichTextImportRules,tt as eventFiles,st 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,createState as n,$setState as o,$createTextNode as r,$getState as i,$findMatchingParent as s,$createLineBreakNode as l,$isLineBreakNode as c,$getRoot as a,$isElementNode as f,$isDecoratorNode as u,$getSelection as d,$createParagraphNode as g,$createTabNode as p,mergeRegister as h,COLLABORATION_TAG as x,HISTORIC_TAG as m,COMPOSITION_END_TAG as C,$isRangeSelection as T,$addUpdateTag as E,HISTORY_PUSH_TAG as $,KEY_ENTER_COMMAND as v,COMMAND_PRIORITY_LOW as I,$isRootOrShadowRoot as y,$createRangeSelection as S,$setSelection as b}from\"lexical\";import{$sliceSelectedTextNodeContent as w}from\"@lexical/selection\";import{CodeNode as k,$createCodeNode as N,$isCodeNode as F}from\"@lexical/code-core\";import{LinkNode as L,$isLinkNode as O,$createLinkNode as M,$isAutoLinkNode as R}from\"@lexical/link\";import{ListNode as B,ListItemNode as _,$isListNode as j,$createListItemNode as A,$createListNode as P,$isListItemNode as z}from\"@lexical/list\";import{HeadingNode as W,QuoteNode as U,$isHeadingNode as D,$isQuoteNode as H,$createQuoteNode as K,$createHeadingNode as q}from\"@lexical/rich-text\";import{$findMatchingParent as G}from\"@lexical/utils\";function J(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 Q(t){const e=J(t,t=>t.type);return{element:e.element||[],multilineElement:e[\"multiline-element\"]||[],textFormat:e[\"text-format\"]||[],textMatch:e[\"text-match\"]||[]}}const V=/[!-/:-@[-`{-~\\s]/,X=/\\s/,Y=/[!\"#$%&'()*+,\\-./:;<=>?@[\\]^_`{|}~]/,Z=/^\\s{0,3}$/;function tt(n){if(!t(n))return!1;const o=n.getFirstChild();return null==o||1===n.getChildrenSize()&&e(o)&&Z.test(o.getTextContent())}function et(t){return t.replace(/\\\\([!-/:-@[-`{-~])/g,\"$1\").replace(/&#(\\d+);/g,(t,e)=>String.fromCodePoint(Number(e)))}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]*`{3,})([\\w-]+)?[ \\t]?/,ct=/^[ \\t]*`{3,}$/,at=/^[ \\t]*```[^`]+(?:(?:`{1,2}|`{4,})[^`]+)*```(?:[^`]|$)/,ft=/^(?:\\|)(.+)(?:\\|)\\s?$/,ut=/^(\\| ?:?-*:? ?)+\\|\\s?$/,dt=/^<[a-z_][\\w-]*(?:\\s[^<>]*)?\\/?>/i,gt=/^<\\/[a-z_][\\w-]*\\s*>/i,pt=t=>new RegExp(`(?:${t.source})$`,t.flags),ht=n(\"mdListMarker\",{parse:t=>\"string\"==typeof t&&/^[-*+]$/.test(t)?t:\"-\",resetOnCopyNode:!0}),xt=n(\"mdCodeFence\",{parse:t=>\"string\"==typeof t&&/^`{3,}$/.test(t)?t:\"```\",resetOnCopyNode:!0}),mt=n(\"mdHardLineBreak\",{parse:t=>\"string\"==typeof t&&/^(\\\\| {2,})$/.test(t)?t:\"\",resetOnCopyNode:!0});function Ct(t){if(t.endsWith(\"\\\\\"))return[t.slice(0,-1),\"\\\\\"];const e=t.match(/^(.*?\\S)( {2,})$/);return e?[e[1],e[2]]:null}function Tt(t){const n=t.getChildren(),o=n.length-1,r=n[o];if(!e(r))return null;const i=r.getTextContent(),s=Ct(i);if(null!==s){const[t,e]=s;return r.setTextContent(t),e}return/^ {2,}$/.test(i)&&function(t,e){for(let n=e-1;n>=0;n--){if(c(t[n]))return!1;if(/\\S/.test(t[n].getTextContent()))return!0}return!1}(n,o)?(r.setTextContent(\"\"),i):null}function Et(t){const e=l(),n=Tt(t);return null!==n&&o(e,mt,n),e}const $t=t=>(e,n,o,r)=>{const i=t(o);i.append(...n),e.replace(i),r||i.select(0,0)};const vt=t=>(e,n,r,i)=>{const s=e.getPreviousSibling(),l=e.getNextSibling(),c=A(\"check\"===t?\"x\"===r[3]:void 0),a=r[0].trim()[0],f=\"bullet\"!==t&&\"check\"!==t||a!==ht.parse(a)?void 0:a;if(j(l)&&l.getListType()===t){f&&o(l,ht,f);const t=l.getFirstChild();null!==t?t.insertBefore(c):l.append(c),e.remove()}else if(j(s)&&s.getListType()===t)f&&o(s,ht,f),s.append(c),e.remove();else{const n=P(t,\"number\"===t?Number(r[2]):void 0);f&&o(n,ht,f),n.append(c),e.replace(n)}c.append(...n),i||c.select(0,0);const u=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}(r[1]);u&&c.setIndent(u)},It=(t,e,n,o)=>{const r=[],s=t.getChildren();let l=0;for(const c of s)if(z(c)){if(1===c.getChildrenSize()){const t=c.getFirstChild();if(j(t)){const i=It(t,e,n+1,o);i&&r.push(i);continue}}if(o&&!c.getChildren().some(t=>t.isSelected(o)))continue;const s=\" \".repeat(4*n),a=t.getListType(),f=i(t,ht),u=\"number\"===a?`${t.getStart()+l}. `:\"check\"===a?`${f} [${c.getChecked()?\"x\":\" \"}] `:f+\" \";let d=e(c);\"number\"!==a&&(d=d.replace(/^(\\s{0,3}\\d+)(\\.\\s)/,\"$1\\\\$2\")),r.push(s+u+d),l++}return r.join(\"\\n\")},yt={dependencies:[W],export:(t,e)=>{if(!D(t))return null;const n=Number(t.getTag().slice(1));return\"#\".repeat(n)+\" \"+e(t)},regExp:it,replace:$t(t=>{const e=\"h\"+t[1].length;return q(e)}),triggerOnEnter:!0,type:\"element\"},St={dependencies:[U],export:(t,e)=>{if(!H(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(H(n))return n.splice(n.getChildrenSize(),0,[Et(n),...e]),void t.remove()}const r=K();r.append(...e),t.replace(r),o||r.select(0,0)},triggerOnEnter:!0,type:\"element\"},bt={dependencies:[k],export:t=>{if(!F(t))return null;const e=t.getTextContent();let n=i(t,xt);if(e.indexOf(n)>-1){const t=e.match(/`{3,}/g);if(t){const e=Math.max(...t.map(t=>t.length));n=\"`\".repeat(e+1)}}return n+(t.getLanguage()||\"\")+(e?\"\\n\"+e:\"\")+\"\\n\"+n},handleImportAfterStartMatch:({lines:t,rootNode:e,startLineIndex:n,startMatch:o})=>{const r=o[1],i=r.trim().length,s=t[n],l=o.index+r.length,c=s.slice(l),a=new RegExp(`\\`{${i},}$`);if(a.test(c)){const t=c.match(a),r=c.slice(0,c.lastIndexOf(t[0])),i=[...o];return i[2]=\"\",bt.replace(e,null,i,t,[r],!0),[!0,n]}const f=new RegExp(`^[ \\\\t]*\\`{${i},}$`);for(let r=n+1;r<t.length;r++){const i=t[r];if(f.test(i)){const l=i.match(f),c=t.slice(n+1,r),a=s.slice(o[0].length);return a.length>0&&c.unshift(a),bt.replace(e,null,o,l,c,!0),[!0,r]}}const u=t.slice(n+1),d=s.slice(o[0].length);return d.length>0&&u.unshift(d),bt.replace(e,null,o,null,u,!0),[!0,t.length-1]},regExpEnd:{optional:!0,regExp:ct},regExpStart:lt,replace:(t,e,n,i,s,l)=>{let c,a;const f=n[1]?n[1].trim():\"```\",u=n[2]||void 0;if(!e&&s){if(1===s.length)i?(c=N(u),a=s[0]):(c=N(u),a=s[0].startsWith(\" \")?s[0].slice(1):s[0]);else{for(c=N(u),s.length>0&&(0===s[0].trim().length?s.shift():s[0].startsWith(\" \")&&(s[0]=s[0].slice(1)));s.length>0&&!s[s.length-1].length;)s.pop();a=s.join(\"\\n\")}o(c,xt,f);const e=r(a);c.append(e),t.append(c)}else e&&$t(t=>N(t?t[2]:void 0))(t,e,n,l)},type:\"multiline-element\"},wt={dependencies:[B,_],export:(t,e,n)=>j(t)?It(t,e,0,n):null,regExp:ot,replace:vt(\"bullet\"),triggerOnEnter:!0,type:\"element\"},kt={dependencies:[B,_],export:(t,e,n)=>j(t)?It(t,e,0,n):null,regExp:rt,replace:vt(\"check\"),triggerOnEnter:!0,type:\"element\"},Nt={dependencies:[B,_],export:(t,e,n)=>j(t)?It(t,e,0,n):null,regExp:nt,replace:vt(\"number\"),triggerOnEnter:!0,type:\"element\"},Ft={format:[\"code\"],tag:\"`\",type:\"text-format\"},Lt={format:[\"highlight\"],tag:\"==\",type:\"text-format\"},Ot={format:[\"bold\",\"italic\"],tag:\"***\",type:\"text-format\"},Mt={format:[\"bold\",\"italic\"],intraword:!1,tag:\"___\",type:\"text-format\"},Rt={format:[\"bold\"],tag:\"**\",type:\"text-format\"},Bt={format:[\"bold\"],intraword:!1,tag:\"__\",type:\"text-format\"},_t={format:[\"strikethrough\"],tag:\"~~\",type:\"text-format\"},jt={format:[\"italic\"],tag:\"*\",type:\"text-format\"},At={format:[\"italic\"],intraword:!1,tag:\"_\",type:\"text-format\"},Pt={dependencies:[L],export:(t,e,n)=>{if(!O(t)||R(t))return null;const o=e(t);let r=t.getTitle();null!=r&&(r=r.replace(/([\\\\\"])/g,\"\\\\$1\"));return r?`[${o}](${t.getURL()} \"${r}\")`:`[${o}](${t.getURL()})`},importRegExp:/(?:\\[(.+?)\\])(?:\\((?:([^()\\s]+)(?:\\s\"((?:[^\"]*\\\\\")*[^\"]*)\"\\s*)?)\\))/,regExp:/(?:\\[([^[\\]]*(?:\\[[^[\\]]*\\][^[\\]]*)*)\\])(?:\\((?:([^()\\s]+)(?:\\s\"((?:[^\"]*\\\\\")*[^\"]*)\"\\s*)?)\\))$/,replace:(t,e)=>{if(s(t,O))return;const[,n,o,i]=e,l=null!=o?et(o):void 0,c=null!=i?et(i):void 0,a=M(l,{title:c}),f=n.split(\"[\").length-1,u=n.split(\"]\").length-1;let d=n,g=\"\";if(f<u)return;if(f>u){const t=n.split(\"[\");g=\"[\"+t[0],d=t.slice(1).join(\"[\")}const p=r(d);return p.setFormat(t.getFormat()),a.append(p),t.replace(a),g&&a.insertBefore(r(g)),p},trigger:\")\",type:\"text-match\"},zt=[yt,St,wt,Nt],Wt=[bt],Ut=[Ft,Ot,Mt,Rt,Bt,Lt,jt,At,_t],Dt=[Pt],Ht=[...zt,...Wt,...Ut,...Dt];function Kt(t,e,n,o,r,i){let s=t.isSelected(e);for(const l of n){if(!l.export)continue;const n=l.export(t,t=>qt(t,e,o,r,i).markdown,e);if(null!=n){if(!s&&f(t)){qt(t,e,o,r,i).shouldInclude&&(s=!0)}return{markdown:n,shouldInclude:s}}}if(f(t)){const n=qt(t,e,o,r,i);return{markdown:n.markdown,shouldInclude:s||n.shouldInclude}}return u(t)?{markdown:t.getTextContent(),shouldInclude:s}:{markdown:null,shouldInclude:s}}function qt(t,n,o,r,i,s,l){const a=[],d=t.getChildren();let g=!1;s||(s=[]),l||(l=[]);t:for(const t of d){let d=t.isSelected(n);for(const e of r){if(!e.export)continue;const c=e.export(t,t=>qt(t,n,o,r,i,s,[...l,...s]).markdown,(t,e)=>Vt(t,w(n,t,\"clone\").getTextContent(),o,s,l,i));if(null!=c){!d&&f(t)&&t.getChildren().some(t=>t.isSelected(n))&&t.extractWithChild(t,n,\"html\")&&(d=!0),d&&(a.push(c),g=!0);continue t}}if(c(t))d&&(a.push(Qt(t)),g=!0);else if(e(t)){if(d){const e=w(n,t,\"clone\");a.push(Vt(t,e.getTextContent(),o,s,l,i)),g=!0}}else if(f(t)){const e=qt(t,n,o,r,i,s,l);!d&&e.shouldInclude&&t.extractWithChild(t,n,\"html\")&&(d=!0),(d||e.shouldInclude)&&(a.push(e.markdown),g=!0)}else u(t)&&d&&(a.push(t.getTextContent()),g=!0)}return{markdown:a.join(\"\"),shouldInclude:g}}function Gt(t,e,n,o,r){for(const i of e){if(!i.export)continue;const e=i.export(t,t=>Jt(t,n,o,void 0,void 0,r));if(null!=e)return e}return f(t)?Jt(t,n,o,void 0,void 0,r):u(t)?t.getTextContent():null}function Jt(t,n,o,r,i,s=!1){const l=[],a=t.getChildren();r||(r=[]),i||(i=[]);t:for(const t of a){for(const e of o){if(!e.export)continue;const c=e.export(t,t=>Jt(t,n,o,r,[...i,...r],s),(t,e)=>Vt(t,e,n,r,i,s));if(null!=c){l.push(c);continue t}}c(t)?l.push(Qt(t)):e(t)?l.push(Vt(t,t.getTextContent(),n,r,i,s)):f(t)?l.push(Jt(t,n,o,r,i,s)):u(t)&&l.push(t.getTextContent())}return l.join(\"\")}function Qt(t){return i(t,mt)+\"\\n\"}function Vt(t,e,n,o,r,i=!1){let s=e;t.hasFormat(\"code\")||(s=i?s.replace(/([*_`~])/g,\"\\\\$1\"):s.replace(/([*_`~\\\\])/g,\"\\\\$1\"));const l=s.match(/^(\\s*)(.*?)(\\s*)$/s)||[\"\",\"\",s,\"\"],c=l[1],a=l[2],f=l[3],u=\"\"===a;let d=\"\",g=\"\",p=\"\";const h=Xt(t,!0),x=Xt(t,!1),m=new Set;for(const e of n){const n=e.format[0],r=e.tag;Zt(t,n)&&!m.has(n)&&(m.add(n),Zt(h,n)&&o.find(t=>t.tag===r)||(o.push({format:n,tag:r}),d+=r))}for(let e=0;e<o.length;e++){const n=Yt(t,o[e].format),i=Yt(x,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||(p+=t.tag):g+=t.tag),o.pop())}break}return u&&!t.hasFormat(\"code\")?g+s:g+c+d+a+p+f}function Xt(t,n){const o=n?t.getPreviousSibling():t.getNextSibling();return e(o)?o:null}function Yt(t,n){return e(t)&&t.hasFormat(n)}function Zt(t,e){return!!Yt(t,e)&&(\"code\"===e||(!t||!/^\\s*$/.test(t.getTextContent())))}function te(t,e){const n=t.getTextContent(),o=e.fullMatchRegExpByTag[\"`\"],r=e.transformersByTag[\"`\"],i=[];let s=null;if(o&&r){const t=new RegExp(o.source,\"g\"),e=Array.from(n.matchAll(t));for(const t of e){const e=t.index+t[1].length,n=t.index+t[0].length;s||(s={content:t[3],endIndex:n,startIndex:e,tag:\"`\"}),i.push({end:n,start:e})}}const l=function(t,e,n=[]){const o=[],r=new Set(Object.keys(e.transformersByTag).filter(t=>\"`\"!==t[0]).map(t=>t[0])),i=e=>{let n=0;for(let o=e-1;o>=0&&\"\\\\\"===t[o];o--)n++;return n%2==1},s=t=>n.some(e=>t>=e.start&&t<e.end);let l=0;for(;l<t.length;){const e=t[l];if(!r.has(e)||i(l)||s(l)){l++;continue}let n=1;for(;l+n<t.length&&t[l+n]===e;)n++;const c=ee(e,t,l,n,!0),a=ee(e,t,l,n,!1);(c||a)&&o.push({active:!0,canClose:a,canOpen:c,char:e,index:l,length:n,originalLength:n}),l+=n}return o}(n,e,i),c=l.length>0?function(t,e,n){const o={};let r=0,i=null;for(;r<e.length;){const s=e[r];if(!s.active||!s.canClose||0===s.length){r++;continue}const l=`${s.char}${s.canOpen}`,c=o[l]??-1;let a=!1;for(let o=r-1;o>c;o--){const l=e[o];if(!l.active||!l.canOpen||0===l.length||l.char!==s.char)continue;if(l.canClose||s.canOpen){if((l.originalLength+s.originalLength)%3==0&&l.originalLength%3!=0&&s.originalLength%3!=0)continue}const c=Math.min(l.length,s.length),f=Object.keys(n.transformersByTag).filter(t=>t[0]===l.char&&t.length<=c).sort((t,e)=>e.length-t.length)[0];if(!f)continue;a=!0;const u=f.length,d={content:t.slice(l.index+l.length,s.index),endIndex:s.index+u,startIndex:l.index+(l.length-u),tag:f};(!i||d.startIndex<i.startIndex||d.startIndex===i.startIndex&&d.endIndex>i.endIndex)&&(i=d);for(let t=o+1;t<r;t++)e[t].active=!1;l.length-=u,s.length-=u,l.active=l.length>0,s.length>0?s.index+=u:(s.active=!1,r++);break}a||(o[l]=r-1,s.canOpen||(s.active=!1),r++)}return i}(n,l,e):null;let a=null,f=null;if(s&&c?c.startIndex<=s.startIndex&&c.endIndex>=s.endIndex?(a=c,f=e.transformersByTag[c.tag]):(a=s,f=r):s?(a=s,f=r):c&&(a=c,f=e.transformersByTag[c.tag]),!a||!f)return null;const u=[n.slice(a.startIndex,a.endIndex),a.tag,a.content];return u.index=a.startIndex,u.input=n,{endIndex:a.endIndex,match:u,startIndex:a.startIndex,transformer:f}}function ee(t,e,n,o,r){if(!ne(e,n,o,r))return!1;if(\"*\"===t)return!0;if(\"_\"===t){if(!ne(e,n,o,!r))return!0;const t=r?e[n-1]:e[n+o];return void 0!==t&&Y.test(t)}return!0}function ne(t,e,n,o){const r=t[e-1],i=t[e+n],[s,l]=o?[i,r]:[r,i];return void 0!==s&&!X.test(s)&&(!Y.test(s)||(void 0===l||X.test(l)||Y.test(l)))}function oe(t){return e(t)&&!t.hasFormat(\"code\")}function re(t,e,n){let o=te(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||c<=o))&&(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.startIndex>o.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);oe(r.nodeAfter)&&re(r.nodeAfter,e,n),oe(r.nodeBefore)&&re(r.nodeBefore,e,n),oe(r.transformedNode)&&re(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;oe(o.nodeAfter)&&re(o.nodeAfter,e,n),oe(o.nodeBefore)&&re(o.nodeBefore,e,n),oe(o.transformedNode)&&re(o.transformedNode,e,n)}const i=et(t.getTextContent());t.setTextContent(i)}function ie(t,e=!1){const n=Q(t),o=function(t){const e={},n={},o=[];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]=\"`\"===t?new RegExp(\"(^|[^\\\\\\\\`])(`)((?:\\\\\\\\`|[^`])+?)(`)(?!`)\"):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(`(${o.join(\"|\")})`,\"g\"),transformersByTag:e}}(n.textFormat);return(t,r)=>{const i=t.split(\"\\n\"),s=i.length,l=r||a();l.clear();for(let t=0;t<s;t++){const r=i[t],[s,c]=se(i,t,n.multilineElement,l);s?t=c:le(r,l,n.element,o,n.textMatch,e)}const c=l.getChildren();for(const t of c)if(!e&&tt(t)&&l.getChildrenSize()>1)t.remove();else if(f(t))for(const e of t.getAllTextNodes())ce(e);null!==d()&&l.selectStart()}}function se(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 a=\"object\"==typeof i&&\"regExp\"in i?i.regExp:i,f=i&&\"object\"==typeof i&&\"optional\"in i?i.optional:!i;let u=e;const d=t.length;for(;u<d;){const n=a?t[u].match(a):null;if(!n&&(!f||f&&u<d-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 le(e,n,o,i,s,l){const c=r(e),a=g();a.append(c),n.append(a);for(const{regExp:t,replace:n}of o){const o=e.match(t);if(o&&(c.setTextContent(e.slice(o[0].length)),!1!==n(a,[c],o,!0)))break}if(re(c,i,s),a.isAttached()&&e.length>0){const e=a.getPreviousSibling();if(!l&&(t(e)||H(e)||j(e))){let t=e;if(j(e)){const n=e.getLastDescendant();t=null==n?null:G(n,z)}null!=t&&t.getTextContentSize()>0&&(t.splice(t.getChildrenSize(),0,[Et(t),...a.getChildren()]),a.remove())}}}function ce(t){const e=new Set,n=t.getTextContent();let o=n.indexOf(\"\\t\");for(;-1!==o;)e.add(o),e.add(o+1),o=n.indexOf(\"\\t\",o+1);t.splitText(...e).forEach(t=>{\"\\t\"===t.getTextContent()&&t.replace(p())})}function ae(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 fe(t,e,n,o,r){const i=t.getParent();if(!y(i)||t.getFirstChild()!==e)return!1;const s=e.getTextContent();if(!r&&\" \"!==s[n-1])return!1;for(const{regExp:i,replace:l}of o){const o=s.match(i),c=r||o&&o[0].endsWith(\" \")?n:n-1;if(o&&o[0].length===c){const r=e.getNextSiblings(),[i,s]=e.splitText(n);if(!1!==l(t,s?[s,...r]:r,o,!1))return i.remove(),!0}}return!1}function ue(t,e,n,o,r){const i=t.getParent();if(!y(i)||t.getFirstChild()!==e)return!1;const s=e.getTextContent();if(!r&&\" \"!==s[n-1])return!1;for(const{regExpStart:i,replace:l,regExpEnd:c}of o){if(c&&!(\"optional\"in c)||c&&\"optional\"in c&&!c.optional)continue;const o=s.match(i);if(o){const i=r||o[0].endsWith(\" \")?n:n-1;if(o[0].length!==i)continue;const s=e.getNextSiblings(),[c,a]=e.splitText(n);if(!1!==l(t,a?[a,...s]:s,o,null,null,!1))return c.remove(),!0}}return!1}function de(t,e){let n=0;const o=t.getTextContent();for(let t=0;t<e;t++)\"`\"===o[t]&&n++;return n%2!=0}function ge(t,e,n){const o=n.length;for(let r=e;r>=o;r--){const e=r-o;if(pe(t,e,n,0,o)&&\" \"!==t[e+o])return e}return-1}function pe(t,e,n,o,r){for(let i=0;i<r;i++)if(t[e+i]!==n[o+i])return!1;return!0}function he(t,n=Ht){const o=Q(n),r=o.element.filter(t=>t.triggerOnEnter),i=J(o.textFormat,({tag:t})=>t[t.length-1]),s=J(o.textMatch,({trigger:t})=>t),l=new Set([\" \"]);for(const t of o.textFormat)l.add(t.tag.slice(-1));for(const t of o.textMatch)void 0!==t.trigger&&l.add(t.trigger);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)||ae(173,e.getType())}}const a=(t,n,r)=>!!fe(t,n,r,o.element)||(!!ue(t,n,r,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,r,s)||!!function(t,n,o){const r=t.getTextContent(),i=n-1,s=r[i],l=o[s];if(!l)return!1;for(const n of l){const{tag:o}=n,l=o.length,a=i-l+1;if(l>1&&!pe(r,a,o,0,l))continue;if(\" \"===r[a-1])continue;const f=r[i+1];if(!1===n.intraword&&f&&!V.test(f))continue;const u=t;let g=u,p=ge(r,a,o),h=g;for(;p<0&&(h=h.getPreviousSibling())&&!c(h);)if(e(h)){if(h.hasFormat(\"code\"))continue;const t=h.getTextContent();g=h,p=ge(t,t.length,o)}if(p<0)continue;if(g===u&&p+l===a)continue;const x=g.getTextContent();if(p>0&&x[p-1]===s)continue;const m=x[p-1];if(!1===n.intraword&&m&&!V.test(m))continue;if(!n.format.includes(\"code\")&&de(g,p))continue;const C=u.getTextContent(),E=C.slice(0,a)+C.slice(i+1);u.setTextContent(E);const $=g===u?E:x;g.setTextContent($.slice(0,p)+$.slice(p+l));const v=d(),I=S();b(I);const y=i-l*(g===u?2:1)+1;I.anchor.set(g.__key,p,\"text\"),I.focus.set(u.__key,y,\"text\");for(const t of n.format)I.hasFormat(t)||I.formatText(t);I.anchor.set(I.focus.key,I.focus.offset,I.focus.type);for(const t of n.format)I.hasFormat(t)&&I.toggleFormat(t);return T(v)&&(I.format=v.format),!0}return!1}(n,r,i)));return h(t.registerUpdateListener(({tags:n,dirtyLeaves:o,editorState:r,prevEditorState:i})=>{if(n.has(x)||n.has(m))return;if(t.isComposing())return;const s=n.has(C),c=r.read(d),f=i.read(d);if(!T(f)||!T(c)||!c.isCollapsed()||c.is(f)&&!s)return;const u=c.anchor.key,g=c.anchor.offset,p=r._nodeMap.get(u);if(e(p)&&o.has(u)&&(s||1===g||!(g>f.anchor.offset+1))){if(s){const t=r.read(()=>p.getTextContent())[g-1];if(!l.has(t))return}t.update(()=>{if(!oe(p))return;const t=p.getParent();null===t||F(t)||a(t,p,c.anchor.offset)&&E($)})}}),t.registerCommand(v,t=>{if(null!==t&&t.shiftKey)return!1;const n=d();if(!T(n)||!n.isCollapsed())return!1;const i=n.anchor.offset,s=n.anchor.getNode();if(!e(s)||!oe(s))return!1;const l=s.getParent();if(null===l||F(l))return!1;return i===s.getTextContent().length&&(!(!ue(l,s,i,o.multilineElement,!0)&&!fe(l,s,i,r,!0))&&(null!==t&&t.preventDefault(),!0))},I))}function xe(t,e=Ht,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=i.trimEnd(),l=r[r.length-1],c=t<n.length-1?Ct(i):null,a=void 0!==l&&null!==Ct(l);at.test(s)?r.push(s):lt.test(s)||ct.test(s)?(o=!o,r.push(s)):o?r.push(i):\"\"===s||\"\"===l||!l||it.test(l)||it.test(s)||st.test(s)||nt.test(s)||ot.test(s)||rt.test(s)||ft.test(s)||ut.test(s)||a||!e||dt.test(s)||gt.test(s)||pt(gt).test(l)||pt(dt).test(l)||ct.test(l)?r.push(!e&&\"\"!==s||null!==c?i:s):r[r.length-1]=l+\" \"+(null===c?s:i).trimStart()}return r.join(\"\\n\")}(t,r);return ie(e,o)(i,n)}function me(t=Ht,e,n=!1){const o=function(t,e=!1){const n=Q(t),o=[...n.multilineElement,...n.element],r=!e,i=n.textFormat.filter(t=>1===t.format.length).sort((t,e)=>Number(t.format.includes(\"code\"))-Number(e.format.includes(\"code\")));return t=>{const s=[],l=(t||a()).getChildren();for(let t=0;t<l.length;t++){const c=l[t],a=Gt(c,o,i,n.textMatch,e);null!=a&&s.push(r&&t>0&&!tt(c)&&!tt(l[t-1])?\"\\n\".concat(a):a)}return s.join(\"\\n\")}}(t,n);return o(e)}function Ce(t=Ht,e,n=!1){if(!e||T(e)&&e.isCollapsed())return\"\";const o=function(t,e=!1){const n=Q(t),o=[...n.multilineElement,...n.element],r=!e,i=n.textFormat.filter(t=>1===t.format.length).sort((t,e)=>Number(t.format.includes(\"code\"))-Number(e.format.includes(\"code\")));return t=>{const s=[],l=a().getChildren();for(let c=0;c<l.length;c++){const a=l[c],{shouldInclude:f,markdown:u}=Kt(a,t,o,i,n.textMatch,e);f&&null!=u&&s.push(r&&c>0&&!tt(a)&&!tt(l[c-1])?\"\\n\".concat(u):u)}return s.join(\"\\n\")}}(t,n);return o(e)}export{xe as $convertFromMarkdownString,Ce as $convertSelectionToMarkdownString,me as $convertToMarkdownString,Ot as BOLD_ITALIC_STAR,Mt as BOLD_ITALIC_UNDERSCORE,Rt as BOLD_STAR,Bt as BOLD_UNDERSCORE,kt as CHECK_LIST,bt as CODE,zt as ELEMENT_TRANSFORMERS,yt as HEADING,Lt as HIGHLIGHT,Ft as INLINE_CODE,jt as ITALIC_STAR,At as ITALIC_UNDERSCORE,Pt as LINK,Wt as MULTILINE_ELEMENT_TRANSFORMERS,Nt as ORDERED_LIST,St as QUOTE,_t as STRIKETHROUGH,Ut as TEXT_FORMAT_TRANSFORMERS,Dt as TEXT_MATCH_TRANSFORMERS,Ht as TRANSFORMERS,wt as UNORDERED_LIST,he 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,$dfs as a,$unwrapAndFilterDescendants as u}from\"@lexical/utils\";import{ElementNode as h,isHTMLElement as d,$isInlineElementOrDecoratorNode as f,$isTextNode as g,$isLineBreakNode as m,$createParagraphNode as p,$applyNodeReplacement as C,createCommand as _,$createTextNode as S,$getSelection as b,$isRangeSelection as w,$isParagraphNode as y,$createPoint as N,$getNodeByKey as v,$isElementNode as x,$normalizeSelection__EXPERIMENTAL as T,isCurrentlyReadOnlyMode as F,TEXT_TYPE_TO_FORMAT as R,$getEditor as O,$setSelection as A,SELECTION_CHANGE_COMMAND as K,getDOMSelection as E,$createRangeSelection as k,$isRootNode as M,INSERT_PARAGRAPH_COMMAND as $,KEY_ARROW_DOWN_COMMAND as W,KEY_ARROW_UP_COMMAND as z,KEY_ARROW_LEFT_COMMAND as L,KEY_ARROW_RIGHT_COMMAND as H,COMMAND_PRIORITY_HIGH as B,KEY_ESCAPE_COMMAND as P,DELETE_WORD_COMMAND as D,DELETE_LINE_COMMAND as I,DELETE_CHARACTER_COMMAND as U,KEY_BACKSPACE_COMMAND as J,KEY_DELETE_COMMAND as X,CUT_COMMAND as Y,FORMAT_TEXT_COMMAND as q,FORMAT_ELEMENT_COMMAND as j,CONTROLLED_TEXT_INSERTION_COMMAND as V,KEY_TAB_COMMAND as G,FOCUS_COMMAND as Q,$getNearestNodeFromDOMNode as Z,isDOMNode as ee,$isRootOrShadowRoot as te,$getPreviousSelection as ne,$getNodeByKeyOrThrow as oe,$caretFromPoint as re,$isExtendableTextPointCaret as le,$extendCaretToRange as se,$isSiblingCaret as ie,$getSiblingCaret as ce,$setPointFromCaret as ae,$normalizeCaret as ue,$createRangeSelectionFromDom as he,$isChildCaret as de,$getChildCaret as fe,$getAdjacentChildCaret as ge,IS_FIREFOX as me,setDOMStyleFromCSS as pe,setDOMUnmanaged as Ce,COMMAND_PRIORITY_EDITOR as _e,SELECTION_INSERT_CLIPBOARD_NODES_COMMAND as Se,SELECT_ALL_COMMAND as be,COMMAND_PRIORITY_LOW as we,CLICK_COMMAND as ye,$getRoot as Ne,defineExtension as ve,$fullReconcile as xe,safeCast as Te,configExtension as Fe,isHTMLTableRowElement as Re,IS_BOLD as Oe,IS_ITALIC as Ae,IS_UNDERLINE as Ke,IS_STRIKETHROUGH as Ee}from\"lexical\";import{signal as ke,effect as Me,namedSignals as $e}from\"@lexical/extension\";import{copyToClipboard as We,$getClipboardDataFromSelection as ze}from\"@lexical/clipboard\";import{CoreImportExtension as Le,DOMImportExtension as He,defineImportRule as Be,sel as Pe,ImportTextFormat as De,ImportTextStyle as Ie,contextValue as Ue}from\"@lexical/html\";const Je=/^(\\d+(?:\\.\\d+)?)px$/,Xe={BOTH:3,COLUMN:2,NO_STATUS:0,ROW:1};class Ye extends h{__colSpan;__rowSpan;__headerState;__width;__backgroundColor;__verticalAlign;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,this.__colSpan=e.__colSpan,this.__headerState=e.__headerState,this.__width=e.__width}static importDOM(){return{td:e=>({conversion:je,priority:0}),th:e=>({conversion:je,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=Xe.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),qe(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(d(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(),...qe(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=Xe.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!==Xe.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 qe(e){return\"middle\"===e||\"bottom\"===e}function je(e){const t=e,n=e.nodeName.toLowerCase();let o;Je.test(t.style.width)&&(o=parseFloat(t.style.width));let r=Xe.NO_STATUS;if(\"th\"===n){const e=t.getAttribute(\"scope\");if(\"col\"===e)r=Xe.COLUMN;else if(\"row\"===e)r=Xe.ROW;else{const e=t.parentElement,n=d(e)&&\"tr\"===e.nodeName.toLowerCase()&&d(e.parentElement)&&(\"thead\"===e.parentElement.nodeName.toLowerCase()||0===e.rowIndex),o=0===t.cellIndex;n&&(r|=Xe.ROW),o&&(r|=Xe.COLUMN),r===Xe.NO_STATUS&&(r=Xe.ROW)}}const l=Ve(r,t.colSpan,o);l.__rowSpan=t.rowSpan;const s=t.style.backgroundColor;\"\"!==s&&(l.__backgroundColor=s);const i=t.style.verticalAlign;qe(i)&&(l.__verticalAlign=i);const c=t.style,a=(c&&c.textDecoration||\"\").split(\" \"),u=\"700\"===c.fontWeight||\"bold\"===c.fontWeight,h=a.includes(\"line-through\"),C=\"italic\"===c.fontStyle,_=a.includes(\"underline\"),S=c.color;return{after:e=>{const t=[];let n=null;const o=()=>{if(n){const e=n.getFirstChild();m(e)&&1===n.getChildrenSize()&&e.remove()}};for(const r of e)if(f(r)||g(r)||m(r)){if(g(r)&&(u&&r.toggleFormat(\"bold\"),h&&r.toggleFormat(\"strikethrough\"),C&&r.toggleFormat(\"italic\"),_&&r.toggleFormat(\"underline\"),S)){const e=r.getStyle();e.includes(\"color:\")||r.setStyle(e+`color: ${S};`)}n?n.append(r):(n=p().append(r),t.push(n))}else t.push(r),o(),n=null;return o(),0===t.length&&t.push(p()),t},node:l}}function Ve(e=Xe.NO_STATUS,t=1,n){return C(new Ye(e,t,n))}function Ge(e){return e instanceof Ye}const Qe=_(\"INSERT_TABLE_COMMAND\");function Ze(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 et extends h{__height;static getType(){return\"tablerow\"}static clone(e){return new et(e.__height,e.__key)}afterCloneFrom(e){super.afterCloneFrom(e),this.__height=e.__height}static importDOM(){return{tr:e=>({conversion:tt,priority:0})}}static importJSON(e){return nt().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 tt(e){const n=e;let o;return Je.test(n.style.height)&&(o=parseFloat(n.style.height)),{after:e=>t(e,Ge),node:nt(o)}}function nt(e){return C(new et(e))}function ot(e){return e instanceof et}function rt(e,t,n=!0){const o=Hn();for(let r=0;r<e;r++){const e=nt();for(let o=0;o<t;o++){let t=Xe.NO_STATUS;\"object\"==typeof n?(0===r&&n.rows&&(t|=Xe.ROW),0===o&&n.columns&&(t|=Xe.COLUMN)):n&&(0===r&&(t|=Xe.ROW),0===o&&(t|=Xe.COLUMN));const l=Ve(t),s=p();s.append(S()),l.append(s),e.append(l)}o.append(e)}return o}function lt(e){const t=n(e,e=>Ge(e));return Ge(t)?t:null}function st(e){const t=n(e,e=>ot(e));if(ot(t))return t;throw new Error(\"Expected table cell to be inside of table row.\")}function it(e){const t=n(e,e=>Bn(e));if(Bn(t))return t;throw new Error(\"Expected table cell to be inside of table.\")}function ct(e){const t=st(e);return it(t).getChildren().findIndex(e=>e.is(t))}function at(e){return st(e).getChildren().findIndex(t=>t.is(e))}function ut(e,t){const n=it(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 ht(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 dt(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(!ot(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=nt();for(let n=0;n<t;n++){const t=e[n];Ge(t)||Ze(12);const{above:l,below:s}=ut(t,r);let i=Xe.NO_STATUS;const c=l&&l.getWidth()||s&&s.getWidth()||void 0;(l&&l.hasHeaderState(Xe.COLUMN)||s&&s.hasHeaderState(Xe.COLUMN))&&(i|=Xe.COLUMN);const a=Ve(i,1,c);a.append(p()),o.append(a)}n?s.insertAfter(o):s.insertBefore(o)}return e}const ft=(e,t)=>e===Xe.BOTH||e===t?t:Xe.NO_STATUS;function gt(e=!0){const t=b();w(t)||Pt(t)||Ze(188);const n=t.anchor.getNode(),o=t.focus.getNode(),[r]=Mt(n),[l,,s]=Mt(o),[,i,c]=Et(s,l,r),{startRow:a}=c,{startRow:u}=i;return e?pt(a+r.__rowSpan>u+l.__rowSpan?r:l,!0):pt(u<a?l:r,!1)}const mt=gt;function pt(e,t=!0){const[,,n]=Mt(e),[o,r]=Et(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=nt();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=ft(t,Xe.COLUMN);c.append(Ve(n).append(p()))}else n.setRowSpan(n.__rowSpan+1)}const a=n.getChildAtIndex(t);ot(a)||Ze(256),a.insertAfter(c),i=c}else{const e=s,t=o[e],r=nt();for(let n=0;n<l;n++){const{cell:o,startRow:l}=t[n];if(l===e){const e=t[n].cell.__headerState,o=ft(e,Xe.COLUMN);r.append(Ve(o).append(p()))}else o.setRowSpan(o.__rowSpan+1)}const c=n.getChildAtIndex(e);ot(c)||Ze(257),c.insertBefore(r),i=r}return i}function Ct(e,t,n=!0,o,r){const l=e.getChildren(),s=[];for(let e=0;e<l.length;e++){const n=l[e];if(ot(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];Ge(o)||Ze(12);const{left:l,right:i}=ut(o,r);let c=Xe.NO_STATUS;(l&&l.hasHeaderState(Xe.ROW)||i&&i.hasHeaderState(Xe.ROW))&&(c|=Xe.ROW);const a=Ve(c);a.append(p()),s.push({newTableCell:a,targetCell:o})}}return s.forEach(({newTableCell:e,targetCell:t})=>{n?t.insertAfter(e):t.insertBefore(e)}),e}function _t(e=!0){const t=b();w(t)||Pt(t)||Ze(188);const n=t.anchor.getNode(),o=t.focus.getNode(),[r]=Mt(n),[l,,s]=Mt(o),[,i,c]=Et(s,l,r),{startColumn:a}=c,{startColumn:u}=i;return e?bt(a+r.__colSpan>u+l.__colSpan?r:l,!0):bt(u<a?l:r,!1)}const St=_t;function bt(e,t=!0,n=!0){const[,,o]=Mt(e),[r,l]=Et(o,e,e),s=r.length,{startColumn:i}=l,c=t?i+e.__colSpan-1:i-1,a=o.getFirstChild();ot(a)||Ze(120);let u=null;function h(e=Xe.NO_STATUS){const t=Ve(e).append(p());return null===u&&(u=t),t}let d=a;e:for(let e=0;e<s;e++){if(0!==e){const e=d.getNextSibling();ot(e)||Ze(121),d=e}const t=r[e],n=t[c<0?0:c].cell.__headerState,o=ft(n,Xe.ROW);if(c<0){Ft(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&&Tt(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 wt(e,t){const n=e.getChildren();for(let e=0;e<n.length;e++){const o=n[e];if(ot(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 yt(){const e=b();w(e)||Pt(e)||Ze(188);const[t,n]=e.isBackward()?[e.focus.getNode(),e.anchor.getNode()]:[e.anchor.getNode(),e.focus.getNode()],[o,,r]=Mt(t),[l]=Mt(n),[s,i,c]=Et(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&&Ze(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?Ft(g,n):o.insertAfter(n)}}}const t=r.getChildAtIndex(e);ot(t)||Ze(206,String(e)),t.remove()}if(void 0!==f){const{cell:e}=f[0];Tt(e)}else{const e=s[a-1],{cell:t}=e[0];Tt(t)}}const Nt=yt;function vt(){const e=b();w(e)||Pt(e)||Ze(188);const t=e.anchor.getNode(),n=e.focus.getNode(),[o,,r]=Mt(t),[l]=Mt(n),[s,i,c]=Et(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;Tt(e)}else{const e=h<a?p[h-1]:p[a-1],{cell:t}=e;Tt(t)}const _=r.getColWidths();if(_){const e=[..._];e.splice(d,g),r.setColWidths(e)}}const xt=vt;function Tt(e){const t=e.getFirstDescendant();null==t?e.selectStart():t.getParentOrThrow().selectStart()}function Ft(e,t){const n=e.getFirstChild();null!==n?n.insertBefore(t):e.append(t)}function Rt(e){if(0===e.length)return null;const t=it(e[0]),[n]=kt(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);Ot(r)||h.append(...r.getChildren()),r.remove()}}return 0===h.getChildrenSize()&&h.append(p()),h}function Ot(e){if(1!==e.getChildrenSize())return!1;const t=e.getFirstChildOrThrow();return!(!y(t)||!t.isEmpty())}function At(){const e=b();w(e)||Pt(e)||Ze(188);const t=e.anchor.getNode(),o=n(t,Ge);return Ge(o)||Ze(148),Kt(o)}function Kt(e){const[t,n,o]=Mt(e),r=t.__colSpan,l=t.__rowSpan;if(1===r&&1===l)return;const[s,i]=Et(o,t,t),{startColumn:c,startRow:a}=i,u=t.__headerState&Xe.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&Xe.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(p()));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(),ot(e)||Ze(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--)Ft(e,Ve(h[n]|f[t]).append(p()));else for(let e=r-1;e>=0;e--)i.insertAfter(Ve(h[e]|f[t]).append(p()))}t.setRowSpan(1)}}function Et(e,t,n){const[o,r,l]=kt(e,t,n);return null===r&&Ze(207),null===l&&Ze(208),[o,r,l]}function kt(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];ot(o)||Ze(209);const c=s(e);for(let a=o.getFirstChild(),u=0;null!=a;a=a.getNextSibling()){for(Ge(a)||Ze(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 Mt(e){let t;if(e instanceof Ye)t=e;else if(\"__type\"in e){const o=n(e,Ge);Ge(o)||Ze(148),t=o}else{const o=n(e.getNode(),Ge);Ge(o)||Ze(148),t=o}const o=t.getParent();ot(o)||Ze(149);const r=o.getParent();return Bn(r)||Ze(210),[t,o,r]}function $t(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 Wt(e){const t=e.getChildren();let n=null;for(const e of t){if(!ot(e))return!1;if(null===n&&(n=e.getChildrenSize()),e.getChildrenSize()!==n)return!1;const t=e.getChildren();for(const e of t)if(!Ge(e)||1!==e.getRowSpan()||1!==e.getColSpan())return!1}return(n||0)>0}function zt(e,t,n){if(t===n)return;const o=e.getColumnCount();if(t<0||t>=o||n<0||n>=o)return;if(!Wt(e))return;e.getChildren().filter(ot).forEach(e=>{const o=e.getChildren(),[r]=o.splice(t,1);o.splice(n,0,r),e.splice(0,o.length,o)});const r=e.getColWidths();if(r&&r.length===o){const o=[...r],[l]=o.splice(t,1);o.splice(n,0,l),e.setColWidths(o)}}function Lt(e){const[t,,n]=Mt(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 Ht(e){const[[t,o,r,l],[s,i,c,a]]=[\"anchor\",\"focus\"].map(t=>{const o=e[t].getNode(),r=n(o,Ge);Ge(r)||Ze(238,t,o.getKey(),o.getType());const l=r.getParent();ot(l)||Ze(239,t);const s=l.getParent();return Bn(s)||Ze(240,t),[o,r,l,s]});return l.is(a)||Ze(241),{anchorCell:o,anchorNode:t,anchorRow:r,anchorTable:l,focusCell:i,focusNode:s,focusRow:c,focusTable:a}}class Bt{tableKey;anchor;focus;_cachedNodes;dirty;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(){if(\"root\"===this.tableKey||\"root\"===this.anchor.key||\"element\"!==this.anchor.type||\"root\"===this.focus.key||\"element\"!==this.focus.type)return!1;const e=v(this.tableKey),t=v(this.anchor.key),n=v(this.focus.key);return null!==e&&null!==t&&null!==n}isBackward(){return this.focus.isBefore(this.anchor)}getCachedNodes(){return this._cachedNodes}setCachedNodes(e){this._cachedNodes=e}is(e){return Pt(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 Bt(this.tableKey,N(this.anchor.key,this.anchor.offset,this.anchor.type),N(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(Ge).forEach(e=>{const n=e.getFirstChild();y(n)&&(t|=n.getTextFormat())});const n=R[e];return 0!==(t&n)}insertNodes(e){const t=this.focus.getNode();x(t)||Ze(151);T(t.select(0,t.getChildrenSize())).insertNodes(e)}getShape(){const{anchorCell:e,focusCell:t}=Ht(this),n=Lt(e);null===n&&Ze(153);const o=Lt(t);null===o&&Ze(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}=Ht(this),r=o.getParents()[1];if(r!==t){if(t.isParentOf(o)){const e=r.getParent();null==e&&Ze(159),this.set(this.tableKey,o.getKey(),e.getKey())}else{const e=t.getParent();null==e&&Ze(158),this.set(this.tableKey,e.getKey(),o.getKey())}return this.getNodes()}const[l,s,i]=Et(t,n,o),{minColumn:c,maxColumn:a,minRow:u,maxRow:h}=$t(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();ot(o)||Ze(160),o!==f&&(d.set(o.getKey(),o),f=o),d.has(n.getKey())||Ut(n,e=>{d.set(e.getKey(),e)})}const g=Array.from(d.values());return F()||(this._cachedNodes=g),g}getTextContent(){const e=this.getNodes().filter(e=>Ge(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 Pt(e){return e instanceof Bt}function Dt(){const e=N(\"root\",0,\"element\"),t=N(\"root\",0,\"element\");return new Bt(\"root\",e,t)}function It(e,t,n){e.getKey(),t.getKey(),n.getKey();const o=b(),r=Pt(o)?o.clone():Dt();return r.set(e.getKey(),t.getKey(),n.getKey()),r}function Ut(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)&&x(o)&&n.push(o.getChildren())}}function Jt(e,t=O()){const n=v(e);Bn(n)||Ze(231,e);const o=Vt(n,t.getElementByKey(e));return null===o&&Ze(232,e),{tableElement:o,tableNode:n}}class Xt{observers;nextFocus;shouldCheckSelectionForTable;constructor(){this.observers=new Map,this.nextFocus=null,this.shouldCheckSelectionForTable=null}setNextFocus(e){this.nextFocus=e}getAndClearNextFocus(){const{nextFocus:e}=this;return null!==e&&(this.nextFocus=null),e}setShouldCheckSelectionForTable(e){this.shouldCheckSelectionForTable=e}getAndClearShouldCheckSelectionForTable(){const{shouldCheckSelectionForTable:e}=this;return e?(this.shouldCheckSelectionForTable=null,e):null}}class Yt{focusX;focusY;listenersToRemove;table;isHighlightingCells;anchorX;anchorY;tableNodeKey;anchorCell;focusCell;anchorCellNodeKey;focusCellNodeKey;editor;tableSelection;hasHijackedSelectionStyles;isSelecting;pointerType;abortController;listenerOptions;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.abortController=new AbortController,this.listenerOptions={signal:this.abortController.signal},this.trackTable()}getTable(){return this.table}removeListeners(){this.abortController.abort(\"removeListeners\"),Array.from(this.listenersToRemove).forEach(e=>e()),this.listenersToRemove.clear()}$lookup(){return Jt(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=un(n,o)},{editor:this.editor})});this.editor.getEditorState().read(()=>{const{tableNode:t,tableElement:n}=this.$lookup();this.table=un(t,n),e.observe(n,{attributes:!0,childList:!0,subtree:!0})},{editor:this.editor})}$clearHighlight(e=!0){const t=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:n,tableElement:o}=this.$lookup();hn(t,un(n,o),null),e&&null!==b()&&(A(null),t.dispatchCommand(K,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&&Ze(233,e.tableKey,this.tableNodeKey);const t=this.editor;this.tableSelection=e,this.isHighlightingCells=!0,this.$disableHighlightStyle(),this.updateDOMSelection(),hn(t,this.table,this.tableSelection)}else this.$clearHighlight()}updateDOMSelection(){if(null!==this.anchorCell&&null!==this.focusCell){const e=E(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){(t||this.anchorX!==r||this.anchorY!==l||null!=this.tableSelection&&null!=this.anchorCellNodeKey)&&(this.isHighlightingCells=!0,this.$disableHighlightStyle())}if(-1!==this.focusX&&-1!==this.focusY&&r===this.focusX&&l===this.focusY)return!1;if(this.focusX=r,this.focusY=l,this.isHighlightingCells){const s=An(o,e.elem);if(null!=this.tableSelection&&null!=this.anchorCellNodeKey){let e=s;if(null===e&&t&&(e=o.getCellNodeFromCords(r,l,this.table)),null!==e){const t=this.$getAnchorTableCellOrThrow();return this.focusCellNodeKey=e.getKey(),this.tableSelection=It(o,t,e),A(this.tableSelection),n.dispatchCommand(K,void 0),hn(n,this.table,this.tableSelection),!0}}}return!1}$getAnchorTableCell(){return this.anchorCellNodeKey?v(this.anchorCellNodeKey):null}$getAnchorTableCellOrThrow(){const e=this.$getAnchorTableCell();return null===e&&Ze(234),e}$getFocusTableCell(){return this.focusCellNodeKey?v(this.focusCellNodeKey):null}$getFocusTableCellOrThrow(){const e=this.$getFocusTableCell();return null===e&&Ze(235),e}$setAnchorCellForSelection(e){this.isHighlightingCells=!1,this.anchorCell=e,this.anchorX=e.x,this.anchorY=e.y,this.focusX=-1,this.focusY=-1,this.focusCell=null,this.focusCellNodeKey=null;const{tableNode:t}=this.$lookup(),n=An(t,e.elem);if(null!==n){const e=n.getKey();null!=this.tableSelection?(this.tableSelection=this.tableSelection.clone(),this.tableSelection.set(t.getKey(),e,e)):this.tableSelection=It(t,n,n),this.anchorCellNodeKey=e}}$formatCells(e){const t=b();Pt(t)||Ze(236);const n=k(),o=n.anchor,r=n.focus,l=t.getNodes().filter(Ge);l.length>0||Ze(237);const s=l[0].getFirstChild(),i=y(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)}),A(t),this.editor.dispatchCommand(K,void 0)}$clearText(){const{editor:e}=this,t=v(this.tableNodeKey);if(!Bn(t))throw new Error(\"Expected TableNode.\");const n=b();Pt(n)||Ze(253);const o=n.getNodes().filter(Ge),r=t.getFirstChild(),l=t.getLastChild();if(o.length>0&&null!==r&&null!==l&&ot(r)&&ot(l)&&o[0]===r.getFirstChild()&&o[o.length-1]===l.getLastChild()){t.selectPrevious();const n=t.getParent();return t.remove(),void(M(n)&&n.isEmpty()&&e.dispatchCommand($,void 0))}o.forEach(e=>{if(x(e)){const t=p(),n=S();t.append(n),e.append(t),e.getChildren().forEach(e=>{e!==t&&e.remove()})}}),hn(e,this.table,null),A(null),e.dispatchCommand(K,void 0)}}const qt=\"__lexicalTableSelection\";function jt(e){return d(e)&&\"TABLE\"===e.nodeName}function Vt(e,t){if(!t)return t;const n=jt(t)?t:t.querySelector(\"table\");return jt(n)||Ze(341,e.constructor.name,e.getType(),e.getKey(),t.nodeName),n}function Gt(e){return e._window}function Qt(e,t){for(let n=t,o=null;null!==n;n=n.getParent()){if(e.is(n))return o;Ge(n)&&(o=n)}return null}const Zt=[[W,\"down\"],[z,\"up\"],[L,\"backward\"],[H,\"forward\"]],en=[D,I,U],tn=[J,X];function nn(e,t){return e.registerRootListener(n=>{if(null===n)return;const o=e._window;if(null===o)return;const r=o=>{const r=o.target;if(0!==o.button||!ee(r)||!n.contains(r))return;const l=function(e){const t=cn(e);if(null===t)return null;let n=t.elem;for(;null!=n;){if(\"TABLE\"===n.nodeName&&qt in n&&n[qt])return{cellElement:t,tableElement:n,tableObserver:n[qt]};n=n.parentNode}return null}(r);e.update(()=>{if(Pt(b())){for(const[e]of t.observers.values())e.$clearHighlight(!1);A(null),e.dispatchCommand(K,void 0)}if(!l)return;const{tableObserver:n,tableElement:r,cellElement:s}=l;!function(e,t,n,o,r,l){const s=e._window;if(!s)return;const i=t=>{if(r.isSelecting)return;r.isSelecting=!0,null!==t&&null===r.anchorCell&&e.update(()=>{r.$setAnchorCellForSelection(t)});const n=()=>{r.isSelecting=!1,s.removeEventListener(\"pointerup\",n),s.removeEventListener(\"pointermove\",i)},i=t=>{if(!(e=>!(1&~e.buttons))(t)&&r.isSelecting)return r.isSelecting=!1,s.removeEventListener(\"pointerup\",n),void s.removeEventListener(\"pointermove\",i);if(!ee(t.target))return;let c=null;const a=!(me||o.contains(t.target));if(a)c=an(o,t.target);else for(const e of document.elementsFromPoint(t.clientX,t.clientY))if(c=an(o,e),c)break;if(c){const t=c;null===r.anchorCell&&e.update(()=>{r.$setAnchorCellForSelection(t)}),null!==r.focusCell&&c.elem===r.focusCell.elem||(l.setNextFocus({focusCell:c,override:a,tableKey:r.tableNodeKey}),e.dispatchCommand(K,void 0))}};s.addEventListener(\"pointerup\",n,r.listenerOptions),s.addEventListener(\"pointermove\",i,r.listenerOptions)};r.pointerType=t.pointerType;const c=oe(r.tableNodeKey),a=ne();if(me&&t.shiftKey&&_n(a,c)&&(w(a)||Pt(a))){const e=a.anchor.getNode(),o=Qt(c,a.anchor.getNode());if(o)r.$setAnchorCellForSelection(On(r,o)),r.$setFocusCellForSelection(n),Tn(t);else{(c.isBefore(e)?c.selectStart():c.selectEnd()).anchor.set(a.anchor.key,a.anchor.offset,a.anchor.type)}}else\"touch\"!==t.pointerType&&r.$setAnchorCellForSelection(n);i(n)}(e,o,s,r,n,t)})};return o.addEventListener(\"pointerdown\",r),()=>{o.removeEventListener(\"pointerdown\",r)}})}function on(e,t,o,l,s){const i=o.getRootElement(),c=Gt(o);null!==i&&null!==c||Ze(246);const a=new Yt(o,e.getKey()),u=Vt(e,t);!function(e,t){null!==sn(e)&&Ze(205);e[qt]=t}(u,a),a.listenersToRemove.add(()=>function(e,t){sn(e)===t&&delete e[qt]}(u,a));const h=e=>{if(e.detail>=3&&ee(e.target)){null!==cn(e.target)&&e.preventDefault()}};u.addEventListener(\"mousedown\",h,a.listenerOptions),a.listenersToRemove.add(()=>{u.removeEventListener(\"mousedown\",h)});for(const[t,n]of Zt)a.listenersToRemove.add(o.registerCommand(t,t=>xn(o,t,n,e,a,s),B));a.listenersToRemove.add(o.registerCommand(P,t=>{const n=b();if(Pt(n)){const o=Qt(e,n.focus.getNode());if(null!==o)return Tn(t),o.selectEnd(),!0}return!1},B));const d=t=>()=>{const o=b();if(!_n(o,e))return!1;if(Pt(o))return a.$clearText(),!0;if(w(o)){if(!Ge(Qt(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 a.$clearText(),!0;const c=n(o.anchor.getNode(),e=>x(e)),u=c&&n(c,e=>x(e)&&Ge(e.getParent()));if(!x(u)||!x(c))return!1;if(t===I&&null===u.getPreviousSibling())return!0}return!1};for(const e of en)a.listenersToRemove.add(o.registerCommand(e,d(e),B));const f=t=>{const n=b();if(!Pt(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!!_n(n,e)&&(!!Pt(n)&&(t&&(t.preventDefault(),t.stopPropagation()),a.$clearText(),!0))};for(const e of tn)a.listenersToRemove.add(o.registerCommand(e,f,B));return a.listenersToRemove.add(o.registerCommand(Y,e=>{const t=b();if(t){if(!Pt(t)&&!w(t))return!1;We(o,r(e,ClipboardEvent)?e:null,ze(t));const n=f(e);return w(t)?(t.removeText(),!0):n}return!1},B)),a.listenersToRemove.add(o.registerCommand(q,t=>{const o=b();if(!_n(o,e))return!1;if(Pt(o))return a.$formatCells(t),!0;if(w(o)){const e=n(o.anchor.getNode(),e=>Ge(e));if(!Ge(e))return!1}return!1},B)),a.listenersToRemove.add(o.registerCommand(j,t=>{const n=b();if(!Pt(n)||!_n(n,e))return!1;const o=n.anchor.getNode(),r=n.focus.getNode();if(!Ge(o)||!Ge(r))return!1;if(function(e,t){if(Pt(e)){const n=e.anchor.getNode(),o=e.focus.getNode();if(t&&n&&o){const[e]=Et(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]=Et(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];x(n)&&!n.isInline()&&n.setFormat(t)}}return!0},B)),a.listenersToRemove.add(o.registerCommand(V,t=>{const r=b();if(!_n(r,e))return!1;if(Pt(r))return a.$clearHighlight(),!1;if(w(r)){const l=n(r.anchor.getNode(),e=>Ge(e));if(!Ge(l))return!1;if(\"string\"==typeof t){const n=Rn(o,r,e);if(n)return Fn(n,e,[S(t)]),!0}}return!1},B)),l&&a.listenersToRemove.add(o.registerCommand(G,t=>{const o=b();if(!w(o)||!o.isCollapsed()||!_n(o,e))return!1;const r=yn(o.anchor.getNode());return!(null===r||!e.is(Nn(r)))&&(Tn(t),function(e,t){const o=\"next\"===t?\"getNextSibling\":\"getPreviousSibling\",r=\"next\"===t?\"getFirstChild\":\"getLastChild\",l=e[o]();if(x(l))return l.selectEnd();const s=n(e,ot);null===s&&Ze(247);for(let e=s[o]();ot(e);e=e[o]()){const t=e[r]();if(x(t))return t.selectEnd()}const i=n(s,Bn);null===i&&Ze(248);\"next\"===t?i.selectNext():i.selectPrevious()}(r,t.shiftKey?\"previous\":\"next\"),!0)},B)),a.listenersToRemove.add(o.registerCommand(Q,t=>e.isSelected(),B)),a.listenersToRemove.add(o.registerCommand($,()=>{const t=b();if(!w(t)||!t.isCollapsed()||!_n(t,e))return!1;const n=Rn(o,t,e);return!!n&&(Fn(n,e),!0)},B)),a}function rn(e,t){const o=b(),r=ne(),l=e.getAndClearNextFocus();if(null!==l){const{tableKey:t,focusCell:n}=l,r=e.observers.get(t);r||Ze(335,t);const[s]=r;if(Pt(o)&&o.tableKey===s.tableNodeKey)return(n.x!==s.focusX||n.y!==s.focusY)&&(s.$setFocusCellForSelection(n),!0);if(null!==s.anchorCell&&null!==s.anchorCellNodeKey&&n.elem!==s.anchorCell.elem&&null!==s.tableSelection)return s.$setFocusCellForSelection(n,!0),!0}const s=e.getAndClearShouldCheckSelectionForTable();if(s&&w(r)&&w(o)&&o.isCollapsed()){const e=oe(s),t=o.anchor.getNode(),r=e.getFirstChild(),l=yn(t);if(null!==l&&ot(r)){const t=r.getFirstChild();if(Ge(t)&&e.is(n(l,n=>n.is(e)||n.is(t))))return t.selectStart(),!0}}Pt(o)&&function(e,t){const n=Gt(e),o=ne();if(!t.is(o))return;const r=oe(t.tableKey),l=E(n);if(l&&l.anchorNode&&l.focusNode){const n=Z(l.focusNode),o=n&&!r.isParentOf(n),s=Z(l.anchorNode),i=s&&r.isParentOf(s);if(o&&i&&l.rangeCount>0){const n=he(l,e);n&&(n.anchor.set(r.getKey(),t.isBackward()?r.getChildrenSize():0,\"element\"),l.removeAllRanges(),A(n))}}}(t,o),w(o)&&function(e,t){const n=ne(),{anchor:o,focus:r}=e,l=o.getNode(),s=r.getNode(),i=yn(l),c=yn(s),a=i?Nn(i):null,u=c?Nn(c):null,h=e.isBackward(),d=i&&c&&a&&u&&a.is(u),f=u&&(!a||a.isParentOf(u)),g=a&&(!u||u.isParentOf(a));if(f){const t=e.clone(),[n]=Et(u,c,c),o=n[0][0].cell,r=n[n.length-1].at(-1).cell;t.focus.set(h?o.getKey():r.getKey(),h?0:r.getChildrenSize(),\"element\"),A(t)}else if(g){const t=e.clone(),[n]=Et(a,i,i),o=n[0][0].cell,r=n[n.length-1].at(-1).cell;t.anchor.set(h?r.getKey():o.getKey(),h?r.getChildrenSize():0,\"element\"),A(t)}else if(d){const o=t.observers.get(a.getKey());o||Ze(335,a.getKey());const[r]=o;if(i.is(c)||(r.$setAnchorCellForSelection(On(r,i)),r.$setFocusCellForSelection(On(r,c),!0)),\"touch\"===r.pointerType&&r.isSelecting&&e.isCollapsed()&&w(n)&&n.isCollapsed()){const e=yn(n.anchor.getNode());e&&!e.is(c)&&(r.$setAnchorCellForSelection(On(r,e)),r.$setFocusCellForSelection(On(r,c),!0),r.pointerType=null)}}}(o,e);const i=Array.from(e.observers.entries()).map(([e,[t]])=>({tableNode:oe(e),tableObserver:t}));for(const{tableNode:e,tableObserver:n}of i)ln(t,e,n);return!1}function ln(e,t,n){const o=b(),r=ne();o&&!o.is(r)&&(Pt(o)||Pt(r))&&n.tableSelection&&!n.tableSelection.is(r)&&(Pt(o)&&o.tableKey===n.tableNodeKey?n.$updateTableTableSelection(o):!Pt(o)&&Pt(r)&&r.tableKey===n.tableNodeKey&&n.$updateTableTableSelection(null)),n.hasHijackedSelectionStyles&&!t.isSelected()?function(e,t){t.$enableHighlightStyle(),dn(t.table,t=>{const n=t.elem;t.highlighted=!1,wn(e,t),n.getAttribute(\"style\")||n.removeAttribute(\"style\")})}(e,n):!n.hasHijackedSelectionStyles&&t.isSelected()&&function(e,t){t.$disableHighlightStyle(),dn(t.table,t=>{t.highlighted=!0,bn(e,t)})}(e,n)}function sn(e){return e[qt]||null}function cn(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 an(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 un(e,t){const n=[],o={columns:0,domRows:n,rows:0};let r=Vt(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 hn(e,t,n){const o=new Set(n?n.getNodes():[]);dn(t,(t,n)=>{const r=t.elem;o.has(n)?(t.highlighted=!0,bn(e,t)):(t.highlighted=!1,wn(e,t),r.getAttribute(\"style\")||r.removeAttribute(\"style\"))})}function dn(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=Z(r.elem);null!==l&&t(r,l,{x:n,y:e})}}}const fn=(e,t,n,o,r)=>{const l=\"forward\"===r;switch(r){case\"backward\":case\"forward\":return n!==(l?e.table.columns-1:0)?Sn(t.getCellNodeFromCordsOrThrow(n+(l?1:-1),o,e.table),l):o!==(l?e.table.rows-1:0)?Sn(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?Sn(t.getCellNodeFromCordsOrThrow(n,o-1,e.table),!1):t.selectPrevious(),!0;case\"down\":return o!==e.table.rows-1?Sn(t.getCellNodeFromCordsOrThrow(n,o+1,e.table),!0):t.selectNext(),!0;default:return!1}};function gn(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 mn([e,t]){return[\"minColumn\"===e?\"maxColumn\":\"minColumn\",\"minRow\"===t?\"maxRow\":\"minRow\"]}function pn(e,t,[n,o]){const r=t[o],l=e[r];void 0===l&&Ze(250,o,String(r));const s=t[n],i=l[s];return void 0===i&&Ze(250,n,String(s)),i}function Cn(e,t,n,o,r){const l=$t(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=gn(e,t);return null===n&&Ze(249,t.cell.getKey()),n}(l,n),[d,f]=mn(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=$t(e,t,n),r=gn(o,t);if(r)return[pn(e,o,r),pn(e,o,mn(r))];const l=gn(o,n);if(l)return[pn(e,o,mn(l)),pn(e,o,l)];const s=[\"minColumn\",\"minRow\"];return[pn(e,o,s),pn(e,o,mn(s))]}(t,n,C),b=On(e,_.cell),w=On(e,S.cell);return e.$setAnchorCellForSelection(b),e.$setFocusCellForSelection(w,!0),!0}function _n(e,t){if(w(e)||Pt(e)){const n=t.isParentOf(e.anchor.getNode()),o=t.isParentOf(e.focus.getNode());return n&&o}return!1}function Sn(e,t){t?e.selectStart():e.selectEnd()}function bn(t,n){const o=n.elem,r=t._config.theme;Ge(Z(o))||Ze(131),e(o,r.tableCellSelected)}function wn(e,t){const n=t.elem;Ge(Z(n))||Ze(131);const r=e._config.theme;o(n,r.tableCellSelected)}function yn(e){const t=n(e,Ge);return Ge(t)?t:null}function Nn(e){const t=n(e,Bn);return Bn(t)?t:null}function vn(e,t,o,r,l,s,i){const c=re(o.focus,l?\"previous\":\"next\");if(le(c))return!1;let a=c;for(const e of se(c).iterNodeCarets(\"shadowRoot\")){if(!ie(e)||!x(e.origin))return!1;a=e}const u=a.getParentAtCaret();if(!Ge(u))return!1;const h=u,d=function(e){for(const t of se(e).iterNodeCarets(\"root\")){const{origin:n}=t;if(Ge(n)){if(de(t))return fe(n,e.direction)}else if(!ot(n))break}return null}(ce(h,a.direction)),f=n(h,Bn);if(!f||!f.is(s))return!1;const g=e.getElementByKey(h.getKey()),m=cn(g);if(!g||!m)return!1;const p=zn(e,f);if(i.table=p,d)if(\"extend\"===r){const t=cn(e.getElementByKey(d.origin.getKey()));if(!t)return!1;i.$setAnchorCellForSelection(m),i.$setFocusCellForSelection(t,!0)}else{const e=ue(d);ae(o.anchor,e),ae(o.focus,e)}else if(\"extend\"===r)i.$setAnchorCellForSelection(m),i.$setFocusCellForSelection(m,!0);else{const e=function(e){const t=ge(e);return de(t)?ue(t):e}(ce(f,c.direction));ae(o.anchor,e),ae(o.focus,e)}return Tn(t),!0}function xn(e,t,o,r,l,s){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 i=b();if(!_n(i,r)){if(w(i)){if(\"backward\"===o){if(i.focus.offset>0)return!1;const e=function(e){for(let t=e,n=e;null!==n;t=n,n=n.getParent())if(x(n)){if(n!==t&&n.getFirstChild()!==t)return null;if(!n.isInline())return n}return null}(i.focus.getNode());if(!e)return!1;const n=e.getPreviousSibling();return!!Bn(n)&&(Tn(t),t.shiftKey?i.focus.set(n.getParentOrThrow().getKey(),n.getIndexWithinParent(),\"element\"):n.selectEnd(),!0)}if(t.shiftKey&&(\"up\"===o||\"down\"===o)){const e=i.focus.getNode();if(!i.isCollapsed()&&(\"up\"===o&&!i.isBackward()||\"down\"===o&&i.isBackward())){let l=n(e,e=>Bn(e));if(Ge(l)&&(l=n(l,Bn)),l!==r)return!1;if(!l)return!1;const s=\"down\"===o?l.getNextSibling():l.getPreviousSibling();if(!s)return!1;let c=0;\"up\"===o&&x(s)&&(c=s.getChildrenSize());let a=s;if(\"up\"===o&&x(s)){const e=s.getLastChild();a=e||s,c=g(a)?a.getTextContentSize():0}const u=i.clone();return u.focus.set(a.getKey(),c,g(a)?\"text\":\"element\"),A(u),Tn(t),!0}if(te(e)){const e=\"up\"===o?i.getNodes()[i.getNodes().length-1]:i.getNodes()[0];if(e){if(null!==Qt(r,e)){const e=r.getFirstDescendant(),t=r.getLastDescendant();if(!e||!t)return!1;const[n]=Mt(e),[o]=Mt(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=>x(e)&&!e.isInline());if(Ge(r)&&(r=n(r,Bn)),!r)return!1;const s=\"down\"===o?r.getNextSibling():r.getPreviousSibling();if(Bn(s)&&l.tableNodeKey===s.getKey()){const e=s.getFirstDescendant(),n=s.getLastDescendant();if(!e||!n)return!1;const[r]=Mt(e),[l]=Mt(n),c=i.clone();return c.focus.set((\"up\"===o?r:l).getKey(),\"up\"===o?0:l.getChildrenSize(),\"element\"),Tn(t),A(c),!0}}}}return\"down\"===o&&Mn(e)&&s.setShouldCheckSelectionForTable(r.getKey()),!1}if(w(i)){if(\"backward\"===o||\"forward\"===o){return vn(e,t,i,t.shiftKey?\"extend\":\"move\",\"backward\"===o,r,l)}if(i.isCollapsed()){const{anchor:c,focus:a}=i,u=n(c.getNode(),Ge),h=n(a.getNode(),Ge);if(!Ge(u)||!u.is(h))return!1;const d=Nn(u);if(d!==r&&null!=d){const n=Vt(d,e.getElementByKey(d.getKey()));if(null!=n)return l.table=un(d,n),xn(e,t,o,d,l,s)}const f=e.getElementByKey(u.__key),g=e.getElementByKey(c.key);if(null==g||null==f)return!1;let m;if(\"element\"===c.type)m=g.getBoundingClientRect();else{const t=E(Gt(e));if(null===t||0===t.rangeCount)return!1;m=t.getRangeAt(0).getBoundingClientRect()}const p=\"up\"===o?u.getFirstChild():u.getLastChild();if(null==p)return!1;const C=e.getElementByKey(p.__key);if(null==C)return!1;const _=C.getBoundingClientRect();if(\"up\"===o?_.top>m.top-m.height:m.bottom+m.height>_.bottom){Tn(t);const e=r.getCordsFromCellNode(u,l.table);if(!t.shiftKey)return fn(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(Pt(i)){const{anchor:s,focus:c,tableKey:a}=i;if(a!==r.getKey())return!1;const u=n(s.getNode(),Ge),h=n(c.getNode(),Ge),[d]=i.getNodes();Bn(d)||Ze(251);const f=Vt(d,e.getElementByKey(d.getKey()));if(!Ge(u)||!Ge(h)||!Bn(d)||null==f)return!1;l.$updateTableTableSelection(i);const g=un(d,f),m=r.getCordsFromCellNode(u,g),p=r.getDOMCellFromCordsOrThrow(m.x,m.y,g);if(l.$setAnchorCellForSelection(p),Tn(t),t.shiftKey){const[e,t,n]=Et(r,u,h);return Cn(l,e,t,n,o)}return h.selectEnd(),!0}return!1}function Tn(e){e.preventDefault(),e.stopImmediatePropagation(),e.stopPropagation()}function Fn(e,t,n){const o=p();\"first\"===e?t.insertBefore(o):t.insertAfter(o),o.append(...n||[]),o.selectEnd()}function Rn(e,t,o){const r=o.getParent();if(!r)return;const l=E(Gt(e));if(!l)return;const s=l.anchorNode,i=e.getElementByKey(r.getKey()),c=Vt(o,e.getElementByKey(o.getKey()));if(!s||!i||!c||!i.contains(s)||c.contains(s))return;const a=n(t.anchor.getNode(),e=>Ge(e));if(!a)return;const u=n(a,e=>Bn(e));if(!Bn(u)||!u.is(o))return;const[h,d]=Et(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 On(e,t){const{tableNode:n}=e.$lookup(),o=n.getCordsFromCellNode(t,e.table);return n.getDOMCellFromCordsOrThrow(o.x,o.y,e.table)}function An(e,t,n){return Qt(e,Z(t,n))}function Kn(e,t,n){const o=e.querySelector(\"colgroup\");if(!o)return;const r=[];for(let e=0;e<t;e++){const t=document.createElement(\"col\"),o=n&&n[e];o&&(t.style.width=`${o}px`),r.push(t)}o.replaceChildren(...r)}function En(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 kn=new WeakSet;function Mn(e=O()){return kn.has(e)}function $n(e,t){t?kn.add(e):kn.delete(e)}class Wn extends h{__rowStriping;__frozenColumnCount;__frozenRowCount;__colWidths;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 Wn(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:Ln,priority:1})}}static importJSON(e){return Hn().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,this.__colWidths=void 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=jt(e)?e:e.querySelector(\"table\");return jt(t)||Ze(229),super.getDOMSlot(e).withElement(t).withAfter(t.querySelector(\"colgroup\"))}createDOM(t,n){const o=document.createElement(\"table\");this.__style&&pe(o.style,this.__style);const r=document.createElement(\"colgroup\");if(o.appendChild(r),Ce(r),e(o,t.theme.table),this.updateTableElement(null,o,t),Mn(n)){const n=document.createElement(\"div\"),r=t.theme.tableScrollableWrapper;return r?e(n,r):n.style.overflowX=\"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:\"\")&&pe(n.style,this.__style,t?t.__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);const l=t?t.getColumnCount():0,s=t?t.__colWidths:void 0;this.getColumnCount()===l&&this.getColWidths()===s||Kn(n,this.getColumnCount(),this.getColWidths()),En(n,r,this.getFormatType())}updateDOM(e,t,n){const o=Vt(this,t);return t===o===Mn()||(l(r=t)&&\"DIV\"===r.nodeName&&this.updateTableWrapper(e,t,o,n),this.updateTableElement(e,o,n),!1);var r}scaleDOMColWidths(e,t){const n=this.getColWidths();if(!n)return;Kn(Vt(this,e),this.getColumnCount(),n.map(e=>e*t))}exportDOM(e){const t=super.exportDOM(e),{element:n}=t;return{after:n=>{if(t.after&&(n=t.after(n)),!jt(n)&&l(n)&&(n=n.querySelector(\"table\")),!jt(n))return null;En(n,e._config,this.getFormatType());const[o]=kt(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:!jt(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=An(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=Z(o.elem);return Ge(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=>{Ge(e)&&(t+=e.getColSpan())}),t}}function zn(e,t){const n=e.getElementByKey(t.getKey());return null===n&&Ze(230),un(t,n)}function Ln(e){const n=Hn();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(!Je.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,ot),node:n}}function Hn(){return C(new Wn)}function Bn(e){return e instanceof Wn}function Pn(e){ot(e.getParent())?e.isEmpty()&&e.append(p()):e.remove()}function Dn(e){Bn(e.getParent())?u(e,Ge):e.remove()}function In(e){u(e,ot);const[t]=kt(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;ot(r)||Ze(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(p()),r.append(e)}}const r=e.getColWidths(),l=e.getColumnCount();if(r&&r.length!==l){let t;if(l<r.length)t=r.slice(0,l);else if(r.length>0){const e=r[r.length-1];t=[...r,...Array(l-r.length).fill(e)]}e.setColWidths(t)}}function Un(e){if(e.detail<3||!ee(e.target))return!1;const t=Z(e.target);if(null===t)return!1;const o=n(t,e=>x(e)&&!e.isInline());if(null===o)return!1;return!!Ge(o.getParent())&&(o.select(0),!0)}function Jn(){const e=b();if(!w(e))return!1;const t=Nn(e.anchor.getNode());if(null===t)return!1;const n=Ne();if(!n.is(t.getParent())||1!==n.getChildrenSize())return!1;const[o]=kt(t,null,null);if(0===o.length||0===o[0].length)return!1;const r=o[0][0];if(!r||!r.cell)return!1;const l=o[o.length-1],s=l[l.length-1];if(!s||!s.cell)return!1;const i=It(t,r.cell,s.cell);return A(i),!0}function Xn(e){return e.registerNodeTransform(Ye,e=>{if(e.getColSpan()>1||e.getRowSpan()>1){const[,,t]=Mt(e),[n]=Et(t,e,e),o=n.length,r=n[0].length;let l=t.getFirstChild();ot(l)||Ze(175);const i=[];for(let e=0;e<o;e++){0!==e&&(l=l.getNextSibling(),ot(l)||Ze(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){Ge(c)||Ze(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 Yn(e,t=!0){const n=new Xt,o=(o,r,l)=>{const s=Vt(o,l),i=on(o,s,e,t,n);n.observers.set(r,[i,s])};return i(nn(e,n),e.registerCommand(K,()=>rn(n,e),B),e.registerMutationListener(Wn,t=>{e.getEditorState().read(()=>{for(const[e,r]of t){const t=n.observers.get(e);if(\"created\"===r||\"updated\"===r){const{tableNode:r,tableElement:l}=Jt(e);void 0===t?o(r,e,l):l!==t[1]&&(t[0].removeListeners(),n.observers.delete(e),o(r,e,l))}else\"destroyed\"===r&&void 0!==t&&(t[0].removeListeners(),n.observers.delete(e))}},{editor:e})},{skipInitialization:!1}),()=>{for(const[,[e]]of n.observers)e.removeListeners()})}function qn(e,t){e.hasNodes([Wn])||Ze(255);const{hasNestedTables:o=ke(!1)}=t??{};return i(e.registerCommand(Qe,e=>function({rows:e,columns:t,includeHeaders:n},o){const r=b()||ne();if(!r||!w(r))return!1;if(!o&&Nn(r.anchor.getNode()))return!1;const l=rt(Number(e),Number(t),n);c(l);const s=l.getFirstDescendant();return g(s)&&s.select(),!0}(e,o.peek()),_e),e.registerCommand(Se,(t,r)=>e===r&&function(e,t){const{nodes:o,selection:r}=e;if(!o.some(e=>Bn(e)||a(e).some(e=>Bn(e.node))))return!1;const l=Pt(r),s=w(r);if(!(s&&null!==n(r.anchor.getNode(),e=>Ge(e))&&null!==n(r.focus.getNode(),e=>Ge(e))||l))return!1;if(1===o.length&&Bn(o[0]))return function(e,t){const o=t.getStartEndPoints(),r=Pt(t);if(null===o)return!1;const[l,s]=o,[i,c,a]=Mt(l),u=n(s.getNode(),e=>Ge(e));if(!(Ge(i)&&Ge(u)&&ot(c)&&Bn(a)))return!1;const[h,d,f]=Et(a,i,u),[m]=kt(e,null,null),C=h.length,_=C>0?h[0].length:0;let S=d.startRow,b=d.startColumn,w=m.length,y=w>0?m[0].length:0;if(r){const e=$t(h,d,f),t=e.maxRow-e.minRow+1,n=e.maxColumn-e.minColumn+1;S=e.minRow,b=e.minColumn,w=Math.min(w,t),y=Math.min(y,n)}let N=!1;const v=Math.min(C,S+w)-1,x=Math.min(_,b+y)-1,T=new Set;for(let e=S;e<=v;e++)for(let t=b;t<=x;t++){const n=h[e][t];T.has(n.cell.getKey())||(1===n.cell.__rowSpan&&1===n.cell.__colSpan||(Kt(n.cell),T.add(n.cell.getKey()),N=!0))}let[F]=kt(a.getWritable(),null,null);const R=w-C+S;for(let e=0;e<R;e++){pt(F[C-1][0].cell)}const O=y-_+b;for(let e=0;e<O;e++){bt(F[0][_-1].cell,!0,!1)}[F]=kt(a.getWritable(),null,null);for(let e=S;e<S+w;e++)for(let t=b;t<b+y;t++){const n=e-S,o=t-b,r=m[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,S+w)-1,r=Math.min(t+l.__colSpan,b+y)-1;for(let l=e;l<=o;l++)for(let e=t;e<=r;e++){const t=F[l][e];n.push(t.cell)}Rt(n),N=!0}const{cell:s}=F[e][t],i=l.getBackgroundColor();null!=i&&s.setBackgroundColor(i);const c=s.getChildren();l.getChildren().forEach(e=>{if(g(e)){p().append(e),s.append(e)}else s.append(e)}),c.forEach(e=>e.remove())}if(r&&N){const[e]=kt(a.getWritable(),null,null);e[d.startRow][d.startColumn].cell.selectEnd()}return!0}(o[0],r);if(s&&t.peek()&&!function(e){if(Pt(e)&&!e.focus.getNode().is(e.anchor.getNode()))return!0;if(w(e)&&Ge(e.anchor.getNode())&&!e.anchor.getNode().is(e.focus.getNode()))return!0;return!1}(r))return!1;return!0}(t,o),_e),e.registerCommand(be,Jn,we),e.registerCommand(ye,Un,_e),e.registerNodeTransform(Wn,In),e.registerNodeTransform(et,Dn),e.registerNodeTransform(Ye,Pn))}const jn=ve({build:(e,t,n)=>$e(t),config:Te({hasCellBackgroundColor:!0,hasCellMerge:!0,hasHorizontalScroll:!0,hasNestedTables:!1,hasTabHandler:!0}),name:\"@lexical/table/Table\",nodes:()=>[Wn,et,Ye],register(e,t,n){const o=n.getOutput();return i(Me(()=>{const t=o.hasHorizontalScroll.value;Mn(e)!==t&&($n(e,t),e.update(xe))}),qn(e,o),Me(()=>Yn(e,o.hasTabHandler.value)),Me(()=>o.hasCellMerge.value?void 0:Xn(e)),Me(()=>o.hasCellBackgroundColor.value?void 0:e.registerNodeTransform(Ye,e=>{null!==e.getBackgroundColor()&&e.setBackgroundColor(null)})))}});function Vn(e){const t=[];let n=null;const o=()=>{if(null!==n){const e=n.getFirstChild();m(e)&&1===n.getChildrenSize()&&e.remove()}};for(const r of e)f(r)||g(r)||m(r)?null!==n?n.append(r):(n=p().append(r),t.push(n)):(o(),t.push(r),n=null);return o(),0===t.length&&t.push(p()),t}const Gn={$accepts:ot,$packageRun:e=>e.every(Ge)?[nt().splice(0,0,e)]:[],name:\"TableSchema\"},Qn={$accepts:Ge,name:\"TableRowSchema\"},Zn=[Be({$import:(e,n)=>{const o=Hn();n.hasAttribute(\"data-lexical-row-striping\")&&o.setRowStriping(!0),n.hasAttribute(\"data-lexical-frozen-column\")&&o.setFrozenColumns(1),n.hasAttribute(\"data-lexical-frozen-row\")&&o.setFrozenRows(1);const r=n.querySelector(\":scope > colgroup\");if(r){let e=[];for(const t of r.querySelectorAll(\":scope > col\")){let n=t.style.width||\"\";if(!Je.test(n)&&(n=t.getAttribute(\"width\")||\"\",!/^\\d+$/.test(n))){e=void 0;break}e.push(parseFloat(n))}e&&o.setColWidths(e)}return[o.splice(0,0,t(e.$importChildren(n),ot))]},match:Pe.tag(\"table\"),name:\"@lexical/table/table\"}),Be({$import:(e,n)=>[nt(Je.test(n.style.height)?parseFloat(n.style.height):void 0).splice(0,0,t(e.$importChildren(n),Ge))],match:Pe.tag(\"tr\"),name:\"@lexical/table/tr\"}),Be({$import:(e,t)=>{const n=\"TH\"===t.nodeName,o=Je.test(t.style.width)?parseFloat(t.style.width):void 0;let r=Xe.NO_STATUS;if(n){const e=t.getAttribute(\"scope\");if(\"col\"===e)r=Xe.COLUMN;else if(\"row\"===e)r=Xe.ROW;else{const e=t.parentElement,n=Re(e)&&(e.parentElement&&\"THEAD\"===e.parentElement.nodeName||0===e.rowIndex),o=0===t.cellIndex;n&&(r|=Xe.ROW),o&&(r|=Xe.COLUMN),r===Xe.NO_STATUS&&(r=Xe.ROW)}}const l=Ve(r,t.colSpan,o);l.__rowSpan=t.rowSpan;const s=t.style.backgroundColor;\"\"!==s&&(l.__backgroundColor=s);const i=t.style.verticalAlign;(function(e){return\"middle\"===e||\"bottom\"===e})(i)&&(l.__verticalAlign=i);const c=e.get(De),a=c|function(e){let t=0;const n=e.fontWeight;\"700\"!==n&&\"bold\"!==n||(t|=Oe),\"italic\"===e.fontStyle&&(t|=Ae);const o=(e.textDecoration||\"\").split(\" \");return o.includes(\"underline\")&&(t|=Ke),o.includes(\"line-through\")&&(t|=Ee),t}(t.style),u=e.get(Ie),h=t.style.color,d=h?{...u,color:h}:u,f=[];return a!==c&&f.push(Ue(De,a)),d!==u&&f.push(Ue(Ie,d)),[l.splice(0,0,Vn(e.$importChildren(t,{context:f})))]},match:Pe.tag(\"td\",\"th\"),name:\"@lexical/table/cell\"})],eo=ve({dependencies:[Le,jn,Fe(He,{rules:Zn})],name:\"@lexical/table/Import\"});export{Et as $computeTableMap,kt as $computeTableMapSkipCellCheck,Ve as $createTableCellNode,Hn as $createTableNode,rt as $createTableNodeWithDimensions,nt as $createTableRowNode,Dt as $createTableSelection,It as $createTableSelectionFrom,wt as $deleteTableColumn,vt as $deleteTableColumnAtSelection,xt as $deleteTableColumn__EXPERIMENTAL,yt as $deleteTableRowAtSelection,Nt as $deleteTableRow__EXPERIMENTAL,yn as $findCellNode,Nn as $findTableNode,zn as $getElementForTableNode,Mt as $getNodeTriplet,Jt as $getTableAndElementByKey,lt as $getTableCellNodeFromLexicalNode,Lt as $getTableCellNodeRect,at as $getTableColumnIndexFromTableCellNode,it as $getTableNodeFromLexicalNodeOrThrow,ct as $getTableRowIndexFromTableCellNode,st as $getTableRowNodeFromTableCellNodeOrThrow,Ct as $insertTableColumn,_t as $insertTableColumnAtSelection,St as $insertTableColumn__EXPERIMENTAL,dt as $insertTableRow,gt as $insertTableRowAtSelection,mt as $insertTableRow__EXPERIMENTAL,Mn as $isScrollableTablesActive,Wt as $isSimpleTable,Ge as $isTableCellNode,Bn as $isTableNode,ot as $isTableRowNode,Pt as $isTableSelection,Rt as $mergeCells,zt as $moveTableColumn,ht as $removeTableRowAtIndex,At as $unmergeCell,Qe as INSERT_TABLE_COMMAND,Xe as TableCellHeaderStates,Ye as TableCellNode,jn as TableExtension,eo as TableImportExtension,Zn as TableImportRules,Wn as TableNode,Yt as TableObserver,et as TableRowNode,Qn as TableRowSchema,Gn as TableSchema,on as applyTableHandlers,cn as getDOMCellFromTarget,Vt as getTableElement,sn as getTableObserverFromTableElement,Xn as registerTableCellUnmergeTransform,qn as registerTablePlugin,Yn as registerTableSelectionObserver,$n 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 AVAILABLE_BUTTONS = {\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  strikethrough: {\n    labelKey: 'strikethrough',\n    icon: 'strikethrough_s',\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/**\n * @type {TextEditorFormatType[]}\n */\nexport const TEXT_FORMAT_BUTTON_TYPES = ['bold', 'italic', 'strikethrough', 'code'];\n\n/**\n * @type {TextEditorInlineType[]}\n */\nexport const INLINE_BUTTON_TYPES = [...TEXT_FORMAT_BUTTON_TYPES, 'link'];\n\n/**\n * @type {TextEditorBlockType[]}\n */\nexport const BLOCK_BUTTON_TYPES = [\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\n/**\n * Image related components IDs. `linked-image` is used in Sveltia CMS.\n */\nexport const IMAGE_COMPONENT_IDS = ['image', 'linked-image'];\n","/**\n * Split multiline formatting into separate lines to prevent Markdown parsing issues.\n * @param {string} value Markdown string to process.\n * @returns {string} Processed Markdown string.\n * @see https://github.com/sveltia/sveltia-cms/issues/548\n */\nexport const splitMultilineFormatting = (value) =>\n  value\n    .replace(/(\\s+)_([^_\\n]+?)\\n([^_\\n]+?)_(\\s+)/gm, '$1_$2_\\n_$3_$4')\n    .replace(/(\\s+)\\*\\*([^*\\n]+?)\\n([^*\\n]+?)\\*\\*(\\s+)/gm, '$1**$2**\\n**$3**$4')\n    .replace(/(\\s+)~~([^~\\n]+?)\\n([^~\\n]+?)~~(\\s+)/gm, '$1~~$2~~\\n~~$3~~$4')\n    .replace(/(\\s+)`([^`\\n]+?)\\n([^`\\n]+?)`(\\s+)/gm, '$1`$2`\\n`$3`$4');\n\n/**\n * Increase list indentation levels to prevent Markdown parsing issues.\n * Slate uses 2 spaces per indentation level, whereas Lexical uses 4 spaces.\n * This function doubles the indentation to match Lexical's expectations.\n * @param {string} value Markdown string to process.\n * @returns {string} Processed Markdown string.\n * @see https://github.com/sveltia/sveltia-cms/issues/549\n */\nexport const increaseListIndentation = (value) => {\n  if (!value.match(/^\\s{2}(?:-|\\+|\\*|\\d+\\.)\\s/m)) {\n    return value;\n  }\n\n  return value.replace(\n    /^(\\s+)(-|\\+|\\*|\\d+\\.)/gm,\n    (_match, p1, p2) => `${' '.repeat(p1.length * 2)}${p2}`,\n  );\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\nimport {\n  $createHorizontalRuleNode as createHorizontalRuleNode,\n  HorizontalRuleNode,\n  $isHorizontalRuleNode as isHorizontalRuleNode,\n} from '@lexical/extension';\n\n/**\n * @import { ElementTransformer } from '@lexical/markdown';\n */\n\n/**\n * @type {ElementTransformer}\n */\nexport const HR = {\n  dependencies: [HorizontalRuleNode],\n  export: (node) => (isHorizontalRuleNode(node) ? '***' : null),\n  regExp: /^(---|\\*\\*\\*|___)\\s?$/,\n  replace: (parentNode, _1, _2, isImport) => {\n    const line = createHorizontalRuleNode();\n\n    if (isImport || parentNode.getNextSibling() !== null) {\n      parentNode.replace(line);\n    } else {\n      parentNode.insertBefore(line);\n    }\n\n    line.selectNext();\n  },\n  type: 'element',\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  $convertFromMarkdownString as convertFromMarkdownString,\n  $convertToMarkdownString as convertToMarkdownString,\n  TRANSFORMERS,\n} from '@lexical/markdown';\nimport {\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  TableCellHeaderStates,\n  TableCellNode,\n  TableNode,\n  TableRowNode,\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","// Work around the “Prism is not defined” error in consumers\n// @see https://github.com/remix-run/remix/discussions/8182\nimport 'prismjs';\n\nimport {\n  CodeHighlightNode,\n  CodeNode,\n  $createCodeNode as createCodeNode,\n  $isCodeHighlightNode as isCodeHighlightNode,\n  $isCodeNode as isCodeNode,\n} from '@lexical/code';\nimport { PrismTokenizer, registerCodeHighlighting } from '@lexical/code-prism';\nimport { registerDragonSupport } from '@lexical/dragon';\nimport { HorizontalRuleNode } from '@lexical/extension';\nimport { createEmptyHistoryState, registerHistory } from '@lexical/history';\nimport {\n  $isLinkNode as isLinkNode,\n  LinkNode,\n  TOGGLE_LINK_COMMAND,\n  $toggleLink as toggleLink,\n} from '@lexical/link';\nimport {\n  $handleListInsertParagraph as handleListInsertParagraph,\n  INSERT_ORDERED_LIST_COMMAND,\n  INSERT_UNORDERED_LIST_COMMAND,\n  $insertList as insertList,\n  $isListItemNode as isListItemNode,\n  $isListNode as isListNode,\n  ListItemNode,\n  ListNode,\n} from '@lexical/list';\nimport {\n  $convertFromMarkdownString as convertFromMarkdownString,\n  $convertToMarkdownString as convertToMarkdownString,\n  TRANSFORMERS,\n} from '@lexical/markdown';\nimport {\n  HeadingNode,\n  $isHeadingNode as isHeadingNode,\n  $isQuoteNode as isQuoteNode,\n  QuoteNode,\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  createEditor,\n  ElementNode,\n  $getRoot as getRoot,\n  $getSelection as getSelection,\n  INDENT_CONTENT_COMMAND,\n  INSERT_PARAGRAPH_COMMAND,\n  $isRangeSelection as isRangeSelection,\n  OUTDENT_CONTENT_COMMAND,\n} from 'lexical';\nimport prismComponents from 'prismjs/components';\nimport { BLOCK_BUTTON_TYPES, TEXT_FORMAT_BUTTON_TYPES } from './constants.js';\nimport { increaseListIndentation, splitMultilineFormatting } from './markdown.js';\nimport { HR } from './transformers/hr.js';\nimport { TABLE } from './transformers/table.js';\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, HR, 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    HorizontalRuleNode,\n    TableNode,\n    TableCellNode,\n    TableRowNode,\n  ],\n  theme: {\n    text: {\n      /**\n       * Enable bold+italic and strikethrough styling.\n       * @see https://github.com/facebook/lexical/discussions/4381\n       */\n      italic: 'italic',\n      strikethrough: 'strikethrough',\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 = TEXT_FORMAT_BUTTON_TYPES.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 (BLOCK_BUTTON_TYPES.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 backslash for underscore and backslash characters\n          // @see https://github.com/sveltia/sveltia-cms/issues/430\n          // @see https://github.com/sveltia/sveltia-cms/issues/512\n          .replace(/\\\\([_\\\\])/g, '$1')\n          // Replace encoded spaces with regular spaces. The HTML entity can appear with a\n          // combination of bold and italic text\n          // @see https://github.com/sveltia/sveltia-cms/issues/511\n          // @see https://github.com/sveltia/sveltia-cms/issues/534\n          .replace(/&#32;/g, ' '),\n        selection: getSelectionTypes(),\n      },\n    }),\n  );\n};\n\n/**\n * Initialize the Lexical editor.\n * @param {TextEditorConfig} config Editor configuration.\n * @returns {{ editor: LexicalEditor, dispose: () => void }} Editor instance and cleanup.\n */\nexport const initEditor = ({\n  components = [],\n  isCodeEditor = false,\n  defaultLanguage = 'plain',\n}) => {\n  components.forEach(({ node, transformer }) => {\n    /** @type {any[]} */ (editorConfig.nodes).unshift(node);\n    allTransformers.unshift(transformer);\n  });\n\n  const editor = createEditor(editorConfig);\n  /** @type {Array<() => void>} */\n  const unregisters = [];\n\n  /**\n   * Add a cleanup handler if it is defined.\n   * @param {(() => void) | undefined | null} unregister Cleanup handler.\n   */\n  const addUnregister = (unregister) => {\n    if (typeof unregister === 'function') {\n      unregisters.push(unregister);\n    }\n  };\n\n  addUnregister(registerRichText(editor));\n  addUnregister(registerDragonSupport(editor));\n  addUnregister(registerHistory(editor, createEmptyHistoryState(), 1000));\n\n  addUnregister(\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      $tokenize: PrismTokenizer.$tokenize,\n    }),\n  );\n\n  addUnregister(\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\n  addUnregister(\n    editor.registerCommand(\n      INSERT_UNORDERED_LIST_COMMAND,\n      () => {\n        insertList('bullet');\n\n        return true;\n      },\n      COMMAND_PRIORITY_NORMAL,\n    ),\n  );\n\n  addUnregister(\n    editor.registerCommand(\n      INSERT_ORDERED_LIST_COMMAND,\n      () => {\n        insertList('number');\n\n        return true;\n      },\n      COMMAND_PRIORITY_NORMAL,\n    ),\n  );\n\n  // https://github.com/facebook/lexical/blob/main/packages/lexical-react/src/shared/useList.ts\n  addUnregister(\n    editor.registerCommand(\n      INSERT_PARAGRAPH_COMMAND,\n      () => handleListInsertParagraph(),\n      COMMAND_PRIORITY_NORMAL,\n    ),\n  );\n\n  addUnregister(\n    editor.registerUpdateListener(() => {\n      if (editor?.isComposing()) {\n        return;\n      }\n\n      (async () => {\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  );\n\n  // `editor.registerCommand(KEY_TAB_COMMAND, listener, priority)` doesn’t work for some reason, so\n  // use another method\n  addUnregister(\n    editor.registerRootListener((root) => {\n      if (!root) {\n        return undefined;\n      }\n\n      /**\n       * Handle Tab indentation shortcuts.\n       * @param {KeyboardEvent} event Keydown event.\n       */\n      const onKeydown = (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      root.addEventListener('keydown', onKeydown);\n\n      return () => {\n        root.removeEventListener('keydown', onKeydown);\n      };\n    }),\n  );\n\n  return {\n    editor,\n    /**\n     * Remove all registered Lexical listeners.\n     */\n    dispose: () => {\n      unregisters.forEach((unregister) => unregister());\n    },\n  };\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 = 'plain' } = {} }) =>\n      loadCodeHighlighter(lang),\n    ),\n  );\n\n  // Split multiline formatting into separate lines to prevent Markdown parsing issues\n  value = splitMultilineFormatting(value);\n\n  // Increase list indentation levels to prevent Markdown parsing issues\n  value = increaseListIndentation(value);\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.js';\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    const { editor, dispose } = initEditor(editorStore.config);\n\n    editorStore.editor = editor;\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      dispose();\n      editor.setRootElement(null);\n      editorStore.initialized = false;\n      editorStore.editor = undefined;\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-start-start-radius: 0 !important;\n  border-start-end-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(.strikethrough) {\n  text-decoration: line-through;\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-block: 8px;\n  padding-inline-start: 56px;\n  padding-inline-end: 8px;\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-block: 0;\n  inset-inline-start: 0;\n  inset-inline-end: auto;\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: end;\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.lexical-root :global(hr) {\n  margin: var(--sui-paragraph-margin) 0;\n  border: none;\n  padding: 0;\n}\n.lexical-root :global(hr::after) {\n  display: block;\n  height: 2px;\n  background-color: var(--sui-control-border-color);\n  line-height: 2px;\n  content: \"\";\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.js';\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  // Work around the “Prism is not defined” error in consumers\n  // @see https://github.com/remix-run/remix/discussions/8182\n  import 'prismjs';\n\n  import { $isCodeNode as isCodeNode } from '@lexical/code';\n  import { _ } from '@sveltia/i18n';\n  import { $getNodeByKey as getNodeByKey, $getRoot as getRoot } from 'lexical';\n  import prismComponents from 'prismjs/components';\n  import { getContext } from 'svelte';\n  import Option from '../../listbox/option.svelte';\n  import Select from '../../select/select.svelte';\n  import { focusEditor, loadCodeHighlighter } from '../core.js';\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('plain');\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 ?? 'plain';\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=\"plain\" dir=\"ltr\" />\n  {#each codeLanguages as { key, label, aliases } (key)}\n    <Option\n      {label}\n      value={key}\n      selected={key === selectedLanguage || aliases.includes(selectedLanguage)}\n      dir=\"ltr\"\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('plain'),\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: 100;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 4px;\n  border-width: 1px 1px 0;\n  border-style: solid;\n  border-color: var(--sui-textbox-border-color);\n  border-start-start-radius: var(--sui-textbox-border-radius);\n  border-start-end-radius: var(--sui-textbox-border-radius);\n  border-end-start-radius: 0;\n  border-end-end-radius: 0;\n  padding: 0 4px;\n  height: auto;\n  min-height: 40px;\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 '@sveltia/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 { _ } from '@sveltia/i18n';\n  import { setContext, untrack } from 'svelte';\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.js';\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('plain'),\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 = 'plain', 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}\n.code-editor.flex:not([hidden]) {\n  display: block;\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 {'ltr' | 'rtl' | 'auto'} [dir] The `dir` attribute on the `<textarea>` element.\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    dir = undefined,\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    {dir}\n    {name}\n    bind:value\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\" {dir}>{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:not([hidden]) {\n  display: inline-grid;\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}\n\ntextarea,\n.clone {\n  white-space: pre-wrap;\n  word-break: break-all;\n}</style>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { FORMAT_TEXT_COMMAND } from 'lexical';\n  import { getContext } from 'svelte';\n  import Button from '../../button/button.svelte';\n  import Icon from '../../icon/icon.svelte';\n  import { AVAILABLE_BUTTONS } from '../constants.js';\n  import { focusEditor } from '../core.js';\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.${AVAILABLE_BUTTONS[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={AVAILABLE_BUTTONS[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 { _ } from '@sveltia/i18n';\n  import { isMac, matchesShortcuts } from '@sveltia/utils/events';\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 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 { AVAILABLE_BUTTONS } from '../constants.js';\n  import { focusEditor } from '../core.js';\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 (matchesShortcuts(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 (matchesShortcuts(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.${AVAILABLE_BUTTONS[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={AVAILABLE_BUTTONS[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      dir=\"ltr\"\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        dir=\"auto\"\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 { _ } from '@sveltia/i18n';\n  import { $insertNodes as insertNodes } from 'lexical';\n  import { getContext } from 'svelte';\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  // Work around the “Prism is not defined” error in consumers\n  // @see https://github.com/remix-run/remix/discussions/8182\n  import 'prismjs';\n\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 { _ } from '@sveltia/i18n';\n  import {\n    $createParagraphNode as createParagraphNode,\n    $getSelection as getSelection,\n  } from 'lexical';\n  import { getContext } from 'svelte';\n  import Icon from '../../icon/icon.svelte';\n  import MenuItemCheckbox from '../../menu/menu-item-checkbox.svelte';\n  import { AVAILABLE_BUTTONS } from '../constants.js';\n  import { focusEditor } from '../core.js';\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.${AVAILABLE_BUTTONS[type].labelKey}`)}\n    checked={selectionTypeMatches}\n    onclick={() => {\n      if (!selectionTypeMatches) {\n        changeBlockType();\n      }\n    }}\n  >\n    {#snippet startIcon()}\n      <Icon name={AVAILABLE_BUTTONS[type].icon} />\n    {/snippet}\n  </MenuItemCheckbox>\n{/key}\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { unique } from '@sveltia/utils/array';\n  import { getContext } from 'svelte';\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 {\n    AVAILABLE_BUTTONS,\n    BLOCK_BUTTON_TYPES,\n    IMAGE_COMPONENT_IDS,\n    INLINE_BUTTON_TYPES,\n  } from '../constants.js';\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(\n    editorStore.config.components.find(({ id }) => IMAGE_COMPONENT_IDS.includes(id)),\n  );\n  const otherComponents = $derived(\n    editorStore.config.components.filter(({ id }) => !IMAGE_COMPONENT_IDS.includes(id)),\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        BLOCK_BUTTON_TYPES.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        INLINE_BUTTON_TYPES.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={AVAILABLE_BUTTONS[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 { _ } from '@sveltia/i18n';\n  import { setContext, untrack } from 'svelte';\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 { BLOCK_BUTTON_TYPES, INLINE_BUTTON_TYPES } from './constants.js';\n  import LexicalRoot from './lexical-root.svelte';\n  import { createEditorStore } from './store.svelte.js';\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 {'ltr' | 'rtl' | 'auto'} [dir] The `dir` attribute on the `<textarea>` element.\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    dir = undefined,\n    modes = ['rich-text', 'plain-text'],\n    buttons = [...INLINE_BUTTON_TYPES, ...BLOCK_BUTTON_TYPES],\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  // svelte-ignore state_referenced_locally\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    {dir}\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.flex:not([hidden]) {\n  display: block;\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-start-start-radius: 0 !important;\n  border-start-end-radius: 0 !important;\n  border-end-start-radius: var(--sui-textbox-border-radius) !important;\n  border-end-end-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 { _ } from '@sveltia/i18n';\n  import { untrack } from 'svelte';\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    dir=\"ltr\"\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:not([hidden]) {\n  display: inline-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-start-start-radius: 0;\n  border-end-start-radius: 0;\n}\n.number-input :global(:not(:last-child)) :global(input) {\n  border-start-end-radius: 0;\n  border-end-end-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-block-start-width: 1px;\n  border-block-end-width: 0;\n  border-inline-end-width: 0;\n  border-inline-start-width: 1px;\n  border-start-end-radius: 0;\n  border-end-end-radius: 0;\n  border-end-start-radius: 0;\n}\n.buttons :global(button:last-of-type) {\n  border-block-start-width: 0;\n  border-block-end-width: 1px;\n  border-inline-end-width: 0;\n  border-inline-start-width: 1px;\n  border-start-start-radius: 0;\n  border-start-end-radius: 0;\n  border-end-end-radius: 0;\n}\n.buttons :global(button) :global(.icon) {\n  font-size: 20px;\n}</style>\n","<!--\n  @component\n  Similar to `PasswordInput`, but it doesn’t use `type=\"password\"` to hide the input value. Instead,\n  it relies on CSS to visually conceal the input to prevent password managers from prompting to save\n  the password.\n  @see https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/-webkit-text-security\n-->\n<script>\n  import { _ } from '@sveltia/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    monospace = true,\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 show = $state(false);\n</script>\n\n<div\n  role=\"none\"\n  class=\"sui secret-input {className}\"\n  class:flex\n  class:disabled\n  class:readonly\n  class:show\n  {hidden}\n>\n  <TextInput\n    dir=\"ltr\"\n    bind:element={inputElement}\n    {...restProps}\n    {id}\n    bind:value\n    spellcheck=\"false\"\n    {flex}\n    {monospace}\n    {hidden}\n    {disabled}\n    {readonly}\n    {required}\n    {invalid}\n  />\n  <Button\n    iconic\n    disabled={disabled || readonly}\n    pressed={show}\n    aria-label={_(show ? '_sui.secret_input.hide_secret' : '_sui.secret_input.show_secret')}\n    aria-controls={id}\n    onclick={() => {\n      show = !show;\n    }}\n  >\n    {#snippet startIcon()}\n      {#if visibilityIcon}\n        {@render visibilityIcon()}\n      {:else}\n        <Icon name={show ? 'visibility_off' : 'visibility'} />\n      {/if}\n    {/snippet}\n  </Button>\n</div>\n\n<style>.secret-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.secret-input.flex:not([hidden]) {\n  display: inline-flex;\n  width: -moz-available;\n  width: -webkit-fill-available;\n  width: stretch;\n  min-width: 0;\n}\n.secret-input.show :global(input) {\n  -webkit-text-security: none;\n}\n.secret-input :global(.text-input) {\n  flex: auto;\n  margin: 0 !important;\n  width: 0;\n  min-width: 0 !important;\n}\n.secret-input :global(input) {\n  border-start-end-radius: 0;\n  border-end-end-radius: 0;\n  -webkit-text-security: disc;\n}\n.secret-input :global(button) {\n  flex: none;\n  margin-block: 0;\n  margin-inline-start: -1px;\n  margin-inline-end: 0;\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.secret-input :global(button:last-child) {\n  border-start-start-radius: 0;\n  border-start-end-radius: 4px;\n  border-end-end-radius: 4px;\n  border-end-start-radius: 0;\n}\n.secret-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  let fontLoaded = $state(false);\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    mediaQuery.addEventListener('change', applyTheme);\n\n    const fontTimer = globalThis.setTimeout(() => {\n      fontLoaded = true;\n    }, 1000);\n\n    return () => {\n      mediaQuery.removeEventListener('change', applyTheme);\n      globalThis.clearTimeout(fontTimer);\n    };\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\n    name=\"viewport\"\n    content={[\n      'width=device-width',\n      'initial-scale=1',\n      'maximum-scale=1',\n      'interactive-widget=resizes-content',\n    ].join(', ')}\n  />\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 (href)}\n    <link rel=\"preload\" {href} as=\"style\" />\n    <link rel=\"stylesheet\" {href} />\n  {/each}\n</svelte:head>\n\n{#if !fontLoaded}\n  <!-- Preload fonts, including the icons -->\n  <div 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{/if}\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: 300;\n  --sui-font-weight-bold: 600;\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: 1px;\n  --sui-heading-margin: 0;\n  --sui-heading-font-family: var(--sui-font-family-default);\n  --sui-heading-font-weight: var(--sui-font-weight-bold);\n  --sui-heading-line-height: var(--sui-line-height-default);\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(h1) {\n  margin: var(--sui-h1-margin, var(--sui-heading-margin));\n  font-size: var(--sui-h1-font-size, 32px);\n  font-family: var(--sui-h1-font-family, var(--sui-heading-font-family));\n  font-weight: var(--sui-h1-font-weight, var(--sui-heading-font-weight));\n  line-height: var(--sui-h1-line-height, var(--sui-heading-line-height));\n}\n:global(h2) {\n  margin: var(--sui-h2-margin, var(--sui-heading-margin));\n  font-size: var(--sui-h2-font-size, 28px);\n  font-family: var(--sui-h2-font-family, var(--sui-heading-font-family));\n  font-weight: var(--sui-h2-font-weight, var(--sui-heading-font-weight));\n  line-height: var(--sui-h2-line-height, var(--sui-heading-line-height));\n}\n:global(h3) {\n  margin: var(--sui-h3-margin, var(--sui-heading-margin));\n  font-size: var(--sui-h3-font-size, 24px);\n  font-family: var(--sui-h3-font-family, var(--sui-heading-font-family));\n  font-weight: var(--sui-h3-font-weight, var(--sui-heading-font-weight));\n  line-height: var(--sui-h3-line-height, var(--sui-heading-line-height));\n}\n:global(h4) {\n  margin: var(--sui-h4-margin, var(--sui-heading-margin));\n  font-size: var(--sui-h4-font-size, 20px);\n  font-family: var(--sui-h4-font-family, var(--sui-heading-font-family));\n  font-weight: var(--sui-h4-font-weight, var(--sui-heading-font-weight));\n  line-height: var(--sui-h4-line-height, var(--sui-heading-line-height));\n}\n:global(h5) {\n  margin: var(--sui-h5-margin, var(--sui-heading-margin));\n  font-size: var(--sui-h5-font-size, 16px);\n  font-family: var(--sui-h5-font-family, var(--sui-heading-font-family));\n  font-weight: var(--sui-h5-font-weight, var(--sui-heading-font-weight));\n  line-height: var(--sui-h5-line-height, var(--sui-heading-line-height));\n}\n:global(h6) {\n  margin: var(--sui-h6-margin, var(--sui-heading-margin));\n  font-size: var(--sui-h6-font-size, 12px);\n  font-family: var(--sui-h6-font-family, var(--sui-heading-font-family));\n  font-weight: var(--sui-h6-font-weight, var(--sui-heading-font-weight));\n  line-height: var(--sui-h6-line-height, var(--sui-heading-line-height));\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  inset-inline-start: -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 { initLocales } from './services/i18n.js';\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 ResizableHandle } from './components/resizable-pane/resizable-handle.svelte';\nexport { default as ResizablePaneGroup } from './components/resizable-pane/resizable-pane-group.svelte';\nexport { default as ResizablePane } from './components/resizable-pane/resizable-pane.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 SecretInput } from './components/text-field/secret-input.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\nexport * from './typedefs.js';\n","import { IndexedDB } from '@sveltia/utils/storage';\nimport { compare } from '@sveltia/utils/string';\nimport equal from 'fast-deep-equal';\n\nimport { getRegex } from '$lib/services/utils/regex';\n\n/**\n * @import { Writable } from 'svelte/store';\n */\n\n/**\n * Build a sorted group map from a list of items.\n * @template T\n * @param {T[]} items Items to group.\n * @param {string | RegExp | boolean | undefined} pattern Pattern to extract the group key from each\n * value. When provided, the first match is used as the key; unmatched items fall back to\n * `otherKey`.\n * @param {(item: T) => any} getValue Function to get the groupable field value from an item.\n * @param {string} otherKey Fallback key for items with a null/undefined value or no regex match.\n * @returns {[string, T[]][]} Sorted array of `[groupKey, items]` pairs.\n */\nexport const buildGroupMap = (items, pattern, getValue, otherKey) => {\n  const regex = getRegex(pattern);\n  /** @type {Record<string, T[]>} */\n  const groups = {};\n\n  items.forEach((item) => {\n    const value = getValue(item);\n\n    const key =\n      value === null || value === undefined\n        ? otherKey\n        : regex\n          ? (String(value).match(regex)?.[0] ?? otherKey)\n          : String(value);\n\n    if (!(key in groups)) groups[key] = [];\n    groups[key].push(item);\n  });\n\n  return Object.entries(groups).sort(([a], [b]) => compare(a, b));\n};\n\n/**\n * Check whether a value matches a filter condition.\n * @param {any} value The value to test.\n * @param {any} pattern Expected value.\n * @param {RegExp | null | undefined} regex Compiled regex derived from the pattern, if any.\n * @returns {boolean} Whether the value matches the condition.\n */\nexport const matchesFilter = (value, pattern, regex) => {\n  if (regex) {\n    return regex.test(String(value ?? ''));\n  }\n\n  return value === pattern;\n};\n\n/**\n * Sort an array of items using a key function and apply ascending/descending order.\n * @template T\n * @param {T[]} items Items to sort in place.\n * @param {(item: T) => string | number} getKey Returns the sort key for an item. Called once per\n * item.\n * @param {boolean} isStringType Whether keys should be compared as strings (locale-aware); if\n * `false`, numeric subtraction is used instead.\n * @param {string | undefined} [order] Sort order; reverses the array when `'descending'`.\n * @returns {T[]} The sorted array (same reference).\n */\nexport const sortItemsByKey = (items, getKey, isStringType, order) => {\n  const keyedItems = items.map((item) => ({ item, key: getKey(item) }));\n\n  keyedItems.sort(({ key: aKey }, { key: bKey }) =>\n    isStringType\n      ? compare(/** @type {string} */ (aKey), /** @type {string} */ (bKey))\n      : /** @type {number} */ (aKey) - /** @type {number} */ (bKey),\n  );\n\n  if (order === 'descending') {\n    keyedItems.reverse();\n  }\n\n  items.splice(0, items.length, ...keyedItems.map(({ item }) => item));\n\n  return items;\n};\n\n/**\n * Initialize a view settings store backed by IndexedDB and subscribe to persist changes.\n * @param {{ databaseName?: string } | undefined} repository Repository info.\n * @param {string} storageKey Key used to store/retrieve settings in the database.\n * @param {Writable<Record<string, any> | undefined>} settingsStore Store to initialize and persist.\n */\nexport const initViewSettingsStorage = async (repository, storageKey, settingsStore) => {\n  const { databaseName } = repository ?? {};\n  const settingsDB = databaseName ? new IndexedDB(databaseName, 'ui-settings') : null;\n  const initial = (await settingsDB?.get(storageKey)) ?? {};\n\n  settingsStore.set(initial);\n\n  // Track the last persisted value in memory so we can skip redundant IndexedDB reads and writes\n  // every time the store changes (list views update this store frequently as users sort/filter).\n  let lastSaved = initial;\n\n  settingsStore.subscribe((_settings) => {\n    if (equal(_settings, lastSaved)) {\n      return;\n    }\n\n    lastSaved = _settings;\n\n    (async () => {\n      try {\n        await settingsDB?.set(storageKey, _settings);\n      } catch {\n        //\n      }\n    })();\n  });\n};\n","import { getAssetKind } from '$lib/services/assets/kinds';\nimport { matchesFilter } from '$lib/services/common/view';\nimport { getRegex } from '$lib/services/utils/regex';\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    return matchesFilter(value, pattern, regex);\n  });\n};\n","import { _ } from '@sveltia/i18n';\n\nimport { buildGroupMap } from '$lib/services/common/view';\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 otherKey = _('other');\n\n  return Object.fromEntries(\n    buildGroupMap(\n      assets,\n      pattern,\n      (asset) => /** @type {Record<string, any>} */ (asset)[field],\n      otherKey,\n    ),\n  );\n};\n","import equal from 'fast-deep-equal';\nimport { get, writable } from 'svelte/store';\n\nimport { selectedAssetFolder } from '$lib/services/assets/folders';\nimport { currentView, defaultView } from '$lib/services/assets/view';\nimport { initViewSettingsStorage } from '$lib/services/common/view';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import { AssetListView, BackendService } from '$lib/types/private';\n */\n\n/**\n * View settings for all the asset collection.\n * @type {Writable<Record<string, AssetListView> | undefined>}\n */\nexport const assetListSettings = writable();\n\n/**\n * Initialize {@link assetListSettings} and relevant subscribers.\n * @internal\n * @param {BackendService} _backend Backend service.\n */\nexport const initSettings = async ({ repository }) => {\n  await initViewSettingsStorage(repository, 'assets-view', assetListSettings);\n\n  selectedAssetFolder.subscribe((folder) => {\n    const view =\n      get(assetListSettings)?.[folder?.internalPath ?? '*'] ?? structuredClone(defaultView);\n\n    if (!equal(view, get(currentView))) {\n      currentView.set(view);\n    }\n  });\n\n  currentView.subscribe((view) => {\n    const path = get(selectedAssetFolder)?.internalPath ?? '*';\n    const savedView = get(assetListSettings)?.[path] ?? {};\n\n    if (!equal(view, savedView)) {\n      assetListSettings.update((_settings) => ({ ..._settings, [path]: view }));\n    }\n  });\n};\n","import { sortItemsByKey } from '$lib/services/common/view';\n\n/**\n * @import { Asset, SortingConditions } from '$lib/types/private';\n */\n\n/**\n * Get an asset’s property value.\n * @internal\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  sortItemsByKey(\n    _assets,\n    (a) => {\n      const v = getValue(a, key);\n\n      return type !== String ? Number(v ?? 0) : (v ?? '');\n    },\n    type === String,\n    order,\n  );\n\n  return _assets;\n};\n","import { _ } from '@sveltia/i18n';\nimport equal from 'fast-deep-equal';\nimport { derived, get, writable } from 'svelte/store';\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 { assetListSettings, initSettings } from '$lib/services/assets/view/settings';\nimport { sortAssets } from '$lib/services/assets/view/sort';\nimport { backend } from '$lib/services/backends';\nimport { getCollection, getCollectionLabel } from '$lib/services/contents/collection';\nimport { getCollectionFile, getCollectionFileLabel } from '$lib/services/contents/collection/files';\nimport { prefs } from '$lib/services/user/prefs.svelte';\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 * @see https://sveltiacms.app/en/docs/media/internal\n */\nexport const getFolderLabelByCollection = ({ label, collectionName, fileName, internalPath }) => {\n  if (label) {\n    return label;\n  }\n\n  if (collectionName === undefined) {\n    return _(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/**\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/**\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\nbackend.subscribe((_backend) => {\n  if (_backend && !get(assetListSettings)) {\n    initSettings(_backend);\n  }\n});\n\nlistedAssets.subscribe((assets) => {\n  selectedAssets.set([]);\n\n  if (prefs.devModeEnabled) {\n    // eslint-disable-next-line no-console\n    console.info('listedAssets', assets);\n  }\n});\n","/**\n * Open a URL in a new tab/window.\n * @param {string | undefined | null} url URL to open.\n * @param {object} [options] Options.\n * @param {boolean} [options.noopener] Whether to prevent the destination from accessing\n * `window.opener`. Defaults to `true`. Set to `false` for OAuth flows that require `postMessage`\n * communication.\n * @returns {Window | null} Opened window, if available.\n */\nexport const openNewTab = (url, { noopener = true } = {}) => {\n  if (!url) {\n    return null;\n  }\n\n  const features = noopener ? 'noopener,noreferrer' : '';\n\n  return window.open(url, '_blank', features);\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 { cmsConfig } from '$lib/services/config';\nimport { showContentOverlay } from '$lib/services/contents/editor';\nimport { openNewTab } from '$lib/services/utils/window';\n\n/**\n * @import { Readable, Writable } from 'svelte/store';\n * @import { InternalCmsConfig } 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/**\n * @type {Writable<string>}\n */\nexport const selectedPageName = writable('');\n\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(\n      // Merge multiple values of the same key with a comma, e.g. `?a=1&a=2` becomes `{ a: '1,2' }`.\n      // This is to support both `?tags=tag1,tag2` and `?tags=tag1&tags=tag2` formats for dynamic\n      // default values.\n      [...new Set(searchParams.keys())].map((key) => [key, searchParams.getAll(key).join(',')]),\n    ),\n  };\n};\n\n/**\n * Currently active view transition, if any. Used to prevent nested transitions from aborting the\n * active one, which would cause “Transition was skipped” errors in the browser console.\n * @type {ViewTransition | null}\n */\nlet activeTransition = null;\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 */\nexport const startViewTransition = (transitionType, updateContent) => {\n  // Fall back to a direct update if the View Transitions API is unavailable, or if a transition is\n  // already running (e.g. a redirect `goto()` inside `navigate()`), to avoid aborting it.\n  if (!document.startViewTransition || activeTransition) {\n    updateContent();\n    return;\n  }\n\n  const options = {\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  // Firefox for Android currently doesn’t support the options parameter of `startViewTransition`\n  // and will throw a `TypeError` if provided.\n  // @see https://developer.mozilla.org/en-US/docs/Web/API/Document/startViewTransition\n  try {\n    activeTransition = document.startViewTransition(options);\n    activeTransition.finished.finally(() => {\n      activeTransition = null;\n    });\n  } catch {\n    updateContent();\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 { path: currentPath } = parseLocation();\n\n  // If we’re already on this page AND not updating state, don’t navigate or trigger a transition\n  if (currentPath === path && !Object.keys(state).length && !replaceState) {\n    return;\n  }\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 {InternalCmsConfig} */ (\n    get(cmsConfig)\n  );\n\n  openNewTab(displayURL || siteURL || '/');\n};\n","import { _ } from '@sveltia/i18n';\nimport { isObject } from '@sveltia/utils/object';\nimport { LocalStorage } from '@sveltia/utils/storage';\nimport { get } from 'svelte/store';\n\nimport { goto, parseLocation } from '$lib/services/app/navigation';\nimport { backend, backendName } from '$lib/services/backends';\nimport { cmsConfig } from '$lib/services/config';\nimport { dataLoaded } from '$lib/services/contents';\nimport { user } from '$lib/services/user/account.svelte';\nimport { prefs } from '$lib/services/user/prefs.svelte';\n\n/**\n * @import { BackendService, InternalCmsConfig, User } from '$lib/types/private';\n */\n\n/**\n * Context of the sign-in error.\n * @typedef {'authentication' | 'dataFetch'} SignInErrorContext\n */\n\nconst MAGIC_LINK_REGEX = /^\\/signin\\/(?<encodedData>.+)/;\n\nexport const auth = $state({\n  /** @type {{ message: string, context: SignInErrorContext }} */\n  signInError: { message: '', context: 'authentication' },\n  /** Whether the user is not authenticated. */\n  unauthenticated: true,\n  /** Whether a sign-in is in progress. */\n  signingIn: false,\n});\n\n/**\n * Clear the cached user token so the sign-in form is shown on next load.\n */\nconst clearUserCache = async () => {\n  await LocalStorage.set('sveltia-cms.user', {});\n  user.account = undefined;\n  auth.unauthenticated = true;\n};\n\n/**\n * Clear the cached token for authentication/access errors so the sign-in form is shown instead of a\n * dead-end error. Don’t clear for configuration errors like missing branches or repositories where\n * the credentials are still valid.\n * @param {Error} error Exception to check if it’s an authentication error.\n */\nconst clearUserCacheIfNeeded = async (error) => {\n  const isAuthError =\n    typeof (/** @type {any} */ (error?.cause)?.status) === 'number' ||\n    error?.message === 'Not a collaborator of the repository';\n\n  if (isAuthError) {\n    await clearUserCache();\n  }\n};\n\n/**\n * Reset the sign-in error.\n */\nexport const resetError = () => {\n  auth.signInError = { 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 = /** @type {{ message: string }} */ (ex.cause)?.message || _('unexpected_error');\n\n  if (ex.name === 'NotFoundError') {\n    message = _('sign_in_error.not_project_root');\n  }\n\n  if (ex.name === 'AbortError') {\n    message = _(\n      get(backendName) === 'local'\n        ? 'sign_in_error.picker_dismissed'\n        : 'sign_in_error.authentication_aborted',\n    );\n  }\n\n  auth.signInError = { message, context };\n  // eslint-disable-next-line no-console\n  console.error(ex.name, ex.message, ex.cause);\n};\n\n/**\n * Parse a magic link URL generated for QR code sign-in to extract the token and preferences.\n * @internal\n * @returns {{ _user: { token: string } | undefined, copiedPrefs: Record<string, any> | undefined\n * }} Object containing the user token and copied preferences.\n */\nexport const parseMagicLink = () => {\n  const { path } = parseLocation();\n  const { encodedData } = path.match(MAGIC_LINK_REGEX)?.groups ?? {};\n\n  if (!encodedData) {\n    return { _user: undefined, copiedPrefs: undefined };\n  }\n\n  // Remove token from the URL\n  goto('', { replaceState: true });\n\n  /** @type {{ token: string } | undefined} */\n  let _user = undefined;\n  /** @type {Record<string, any> | undefined} */\n  let copiedPrefs = undefined;\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  return { _user, copiedPrefs };\n};\n\n/**\n * Find cached user info, including a compatible Netlify/Decap CMS user object.\n * @internal\n * @returns {Promise<Record<string, any> | undefined>} Cached user info, or undefined if not found.\n */\nexport const getUserCache = async () => {\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  return isObject(userCache) && typeof userCache.backendName === 'string' ? userCache : undefined;\n};\n\n/**\n * Get the backend instance based on the cached user info or site config.\n * @internal\n * @param {Record<string, any> | undefined} _user Cached user info.\n * @returns {BackendService | undefined} Backend instance to be used.\n */\nexport const getBackend = (_user) => {\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 {InternalCmsConfig} */ (get(cmsConfig)).backend.name;\n\n  backendName.set(_backendName);\n\n  return get(backend);\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  /** @type {Record<string, any> | undefined} */\n  let _user = undefined;\n  /** @type {Record<string, any> | undefined} */\n  let copiedPrefs = undefined;\n\n  ({ _user, copiedPrefs } = parseMagicLink());\n  _user ??= await getUserCache();\n\n  // If no cached user info is found, simply return as we cannot sign in automatically\n  if (!_user) {\n    return;\n  }\n\n  const _backend = getBackend(_user);\n\n  if (_user && _backend) {\n    // Temporarily populate the `user` store with the cache, otherwise it’s not updated in\n    // `refreshAccessToken`\n    user.account = /** @type {User} */ (_user);\n\n    const { token, refreshToken } = _user;\n\n    auth.signingIn = true;\n\n    try {\n      _user = /** @type {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.account = undefined;\n    }\n  }\n\n  auth.signingIn = false;\n  auth.unauthenticated = !_user;\n\n  if (!_user || !_backend) {\n    return;\n  }\n\n  // Use the cached user to start fetching files\n  user.account = /** @type {User} */ (_user);\n\n  // Copy user preferences passed with QR code\n  if (copiedPrefs) {\n    Object.assign(prefs, 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      auth.unauthenticated = true;\n    } else {\n      logError(ex, 'dataFetch');\n    }\n\n    await clearUserCacheIfNeeded(ex);\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  auth.signingIn = true;\n\n  try {\n    _user = await _backend.signIn({ token, auto: false });\n  } catch (/** @type {any} */ ex) {\n    auth.signingIn = false;\n    auth.unauthenticated = 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: _('sign_in_error.invalid_token') } }),\n      );\n    } else {\n      logError(ex);\n    }\n\n    return;\n  }\n\n  auth.signingIn = false;\n  auth.unauthenticated = !_user;\n\n  if (!_user) {\n    return;\n  }\n\n  user.account = _user;\n\n  try {\n    await _backend.fetchFiles();\n  } catch (/** @type {any} */ ex) {\n    logError(ex, 'dataFetch');\n    await clearUserCacheIfNeeded(ex);\n  }\n};\n\n/**\n * Sign out from the current backend.\n */\nexport const signOut = async () => {\n  await get(backend)?.signOut();\n  await clearUserCache();\n\n  backendName.set(undefined);\n  dataLoaded.set(false);\n\n  const redirectURL = get(cmsConfig)?.logout_redirect_url;\n\n  if (redirectURL) {\n    window.location.href = redirectURL;\n  }\n};\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Button, Icon, PromptDialog, Spacer } from '@sveltia/ui';\n  import { onMount } from 'svelte';\n\n  import { allBackendServices } from '$lib/services/backends';\n  import { cmsConfig } from '$lib/services/config';\n  import { auth, signInAutomatically, signInManually } from '$lib/services/user/auth.svelte';\n  import { env } from '$lib/services/user/env.svelte';\n  import { makeLink } from '$lib/services/utils/string';\n\n  /**\n   * @import { Backend, GitBackend, GiteaBackend } from '$lib/types/public';\n   */\n\n  let showTokenDialog = $state(false);\n  let token = $state('');\n\n  const configuredBackend = $derived(/** @type {Backend} */ ($cmsConfig?.backend));\n  const backendName = $derived(/** @type {string} */ (configuredBackend.name));\n  const backend = $derived(backendName ? allBackendServices[backendName] : null);\n  const isTestRepo = $derived(backendName === 'test-repo');\n  const repositoryName = $derived(\n    isTestRepo ? undefined : /** @type {GitBackend} */ (configuredBackend)?.repo?.split('/').pop(),\n  );\n  const showLocalBackendOption = $derived(env.isLocalHost && !isTestRepo);\n  const tokenAuthDisabled = $derived(\n    !isTestRepo &&\n      /** @type {GitBackend} */ (configuredBackend).auth_methods?.includes('token') === false,\n  );\n\n  /**\n   * The label to use for the Sign In button, which is usually the backend’s label but can be\n   * overridden for specific backends (e.g. Forgejo on Codeberg) to provide a better UX.\n   */\n  const signInServiceLabel = $derived.by(() => {\n    if (\n      backendName === 'gitea' &&\n      /** @type {GiteaBackend} */ (configuredBackend).base_url === 'https://codeberg.org'\n    ) {\n      return 'Codeberg';\n    }\n\n    return backend?.label;\n  });\n\n  /**\n   * Whether the Sign In button should be disabled if the configuration is missing or if the\n   * administrator has explicitly disabled the authentication method.\n   * @see https://github.com/sveltia/sveltia-cms/issues/721\n   */\n  const signInDisabled = $derived.by(() => {\n    // If OAuth authentication is explicitly disabled, the button should be disabled\n    if (\n      !isTestRepo &&\n      /** @type {GitBackend} */ (configuredBackend).auth_methods?.includes('oauth') === false\n    ) {\n      return true;\n    }\n\n    // Gitea with PKCE authentication requires an app ID. If it’s not provided, the button should be\n    // disabled. We can’t check this during config validation because token authentication doesn’t\n    // require an app ID, so we check it here instead.\n    if (backendName === 'gitea' && !(/** @type {GiteaBackend} */ (configuredBackend).app_id)) {\n      return true;\n    }\n\n    return false;\n  });\n\n  onMount(() => {\n    // Skip automatic sign-in if there’s already an error (e.g. repository access denied), so the\n    // error message is preserved and the user can try again with different credentials\n    if (!auth.signInError.message) {\n      signInAutomatically();\n    }\n  });\n</script>\n\n<div role=\"none\" class=\"buttons\">\n  {#if auth.signingIn}\n    <div role=\"alert\" class=\"message\">{_('signing_in')}</div>\n  {:else if backend}\n    {#if showLocalBackendOption}\n      <Button\n        variant=\"primary\"\n        label={_('work_with_local_repo')}\n        disabled={!env.isLocalBackendSupported}\n        onclick={async () => {\n          await signInManually('local');\n        }}\n      />\n      {#if !env.isLocalBackendSupported}\n        <div role=\"alert\">\n          {#if env.isBrave}\n            {@html makeLink(\n              _('local_workflow.disabled'),\n              'https://sveltiacms.app/en/docs/workflows/local#enabling-file-system-access-api-in-brave',\n            )}\n          {:else}\n            {_('local_workflow.unsupported_browser')}\n          {/if}\n        </div>\n      {:else if !auth.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      <Spacer />\n    {/if}\n    <Button\n      variant={showLocalBackendOption ? 'secondary' : 'primary'}\n      label={isTestRepo\n        ? _('work_with_test_repo')\n        : _('sign_in_with_x', { values: { service: signInServiceLabel } })}\n      disabled={signInDisabled}\n      onclick={async () => {\n        await signInManually(backendName);\n      }}\n    />\n    {#if !isTestRepo}\n      <Button\n        variant=\"secondary\"\n        label={_('sign_in_using_access_token', { values: { service: signInServiceLabel } })}\n        disabled={tokenAuthDisabled}\n        onclick={() => {\n          showTokenDialog = true;\n        }}\n      />\n    {/if}\n  {/if}\n  {#if auth.signInError.message && auth.signInError.context === 'authentication'}\n    <div role=\"alert\" class=\"error iconic\">\n      <Icon name=\"error\" />\n      {auth.signInError.message}\n    </div>\n  {/if}\n</div>\n\n<PromptDialog\n  bind:open={showTokenDialog}\n  bind:value={token}\n  title={_('sign_in_using_access_token')}\n  textboxAttrs={{ spellcheck: false, 'aria-label': _('personal_access_token') }}\n  okLabel={_('sign_in')}\n  okDisabled={!token.trim()}\n  onOk={async () => {\n    await signInManually(backendName, token.trim());\n  }}\n>\n  {_('sign_in_using_access_token_description')}\n  {#if backend?.repository?.tokenPageURL}\n    {@html makeLink(\n      _('sign_in_using_access_token_link', { values: { service: signInServiceLabel } }),\n      backend.repository.tokenPageURL,\n    )}\n  {/if}\n</PromptDialog>\n\n<style>\n  .buttons {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    gap: 12px;\n\n    :global {\n      .button {\n        width: 320px;\n      }\n    }\n  }\n\n  [role='alert'] {\n    &.iconic {\n      display: flex;\n      align-items: center;\n      gap: 8px;\n    }\n\n    &.error {\n      color: var(--sui-error-foreground-color);\n    }\n  }\n</style>\n","import mime from 'mime';\nimport { derived } from 'svelte/store';\n\nimport SveltiaLogo from '$lib/assets/sveltia-logo.svg?raw&inline';\nimport { cmsConfig } from '$lib/services/config';\n\n/**\n * @import { Readable } from 'svelte/store';\n */\n\nconst IMAGE_DATA_URL_REGEX = /^data:(image\\/[a-zA-Z0-9.+-]+);base64,/;\n\n/**\n * Default title for the CMS, used when `app_title` is not specified in the configuration.\n */\nexport const DEFAULT_APP_TITLE = 'Sveltia CMS';\n\n/**\n * Default logo for the CMS, used when `logo` is not specified in the configuration. This is a\n * base64-encoded SVG of the Sveltia logo, inlined to avoid an extra network request.\n */\nexport const DEFAULT_APP_LOGO_URL = `data:image/svg+xml;base64,${btoa(SveltiaLogo)}`;\n\n/**\n * The app title, derived from the CMS configuration’s `app_title` field.\n * @type {Readable<string>}\n */\nexport const appTitle = derived([cmsConfig], ([config]) => config?.app_title || DEFAULT_APP_TITLE);\n\n/**\n * The app logo URL, derived from the CMS configuration. It checks both `logo.src` and the\n * deprecated `logo_url` for backward compatibility.\n * @type {Readable<string>}\n */\nexport const appLogoURL = derived(\n  [cmsConfig],\n  ([config]) => config?.logo?.src || config?.logo_url || DEFAULT_APP_LOGO_URL,\n);\n\n/**\n * The app logo MIME type, derived from the app logo URL. It extracts the MIME type from data URLs\n * or uses the file extension for regular URLs.\n * @type {Readable<string | undefined>}\n */\nexport const appLogoType = derived(appLogoURL, (url) => {\n  const match = url.match(IMAGE_DATA_URL_REGEX);\n\n  if (match) {\n    return match[1];\n  }\n\n  return mime.getType(url) ?? undefined;\n});\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Progressbar } from '@sveltia/ui';\n  import { sanitize } from 'isomorphic-dompurify';\n  import { marked } from 'marked';\n\n  import SignIn from '$lib/components/entrance/sign-in.svelte';\n  import { appLogoURL, appTitle, DEFAULT_APP_TITLE } from '$lib/services/app/branding';\n  import { announcedPageStatus } from '$lib/services/app/navigation';\n  import { inAuthPopup } from '$lib/services/backends/git/shared/auth';\n  import { cmsConfig, cmsConfigErrors, cmsConfigLoaded } from '$lib/services/config';\n  import { dataLoaded, dataLoadedProgress } from '$lib/services/contents';\n  import { user } from '$lib/services/user/account.svelte';\n  import { auth } from '$lib/services/user/auth.svelte';\n  import { prefs, prefsError } from '$lib/services/user/prefs.svelte';\n\n  $effect(() => {\n    if ($cmsConfigLoaded) {\n      $announcedPageStatus = _('welcome_message', { values: { name: $appTitle } });\n    }\n  });\n</script>\n\n{#snippet parseMarkdown(/** @type {string} */ str)}\n  {@html sanitize(/** @type {string} */ (marked.parseInline(str)), {\n    ALLOWED_TAGS: ['a', 'code'],\n    ALLOWED_ATTR: ['href'],\n  })}\n{/snippet}\n\n<div role=\"none\" class=\"container\">\n  <div role=\"none\" class=\"inner\">\n    {#if $cmsConfigLoaded}\n      <img src={$appLogoURL} alt=\"\" class=\"logo\" />\n      <h1>{$appTitle}</h1>\n    {/if}\n    {#if $cmsConfigErrors.length}\n      <div role=\"alert\" class=\"message\">\n        <div role=\"none\">\n          {_('config.errors', { values: { count: $cmsConfigErrors.length } })}\n        </div>\n        <ul class=\"error\">\n          {#each $cmsConfigErrors as error (error)}\n            <li>\n              {@render parseMarkdown(error)}\n            </li>\n          {/each}\n        </ul>\n      </div>\n    {:else if prefsError.current}\n      <div role=\"alert\" class=\"message\">\n        {_(`prefs.error.${prefsError.current.type}`)}\n      </div>\n    {:else if !$cmsConfig || !Object.keys(prefs).length}\n      <div role=\"alert\" class=\"message\">{_('loading_cms_config')}</div>\n    {:else if auth.signInError.message && auth.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          {@render parseMarkdown(auth.signInError.message)}\n        </div>\n      </div>\n      <SignIn />\n    {:else if $inAuthPopup}\n      <div role=\"alert\" class=\"message\">{_('authorizing')}</div>\n    {:else if !user.account || auth.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{#if $cmsConfigLoaded && $appTitle !== DEFAULT_APP_TITLE}\n  <div role=\"none\" class=\"powered-by\">\n    {_('powered_by', { values: { name: DEFAULT_APP_TITLE } })}\n  </div>\n{/if}\n\n<style>\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\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      width: auto;\n      height: 160px;\n\n      @media (width < 768px) {\n        height: 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-tertiary-background-color);\n      font-size: var(--sui-font-size-default);\n      text-align: center;\n      -webkit-user-select: text;\n      user-select: text;\n      cursor: text;\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        ul {\n          margin: 12px 0 0;\n          padding: 0;\n          max-height: 160px;\n          overflow-y: auto;\n          list-style: none;\n        }\n\n        li {\n          margin: 12px;\n          padding: 0;\n        }\n      }\n    }\n  }\n\n  .powered-by {\n    position: absolute;\n    inset: auto 24px 24px;\n    color: var(--sui-tertiary-foreground-color);\n    font-size: var(--sui-font-size-small);\n    text-align: center;\n  }\n</style>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Button, Infobar } from '@sveltia/ui';\n  import { onMount } from 'svelte';\n\n  import { backend } from '$lib/services/backends';\n  import { cmsConfig } from '$lib/services/config';\n  import { openNewTab } from '$lib/services/utils/window';\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, $cmsConfig];\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        openNewTab($backend?.statusDashboardURL);\n      }}\n    />\n  </Infobar>\n{/if}\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Button, Infobar } from '@sveltia/ui';\n  import { onMount } from 'svelte';\n\n  import { version as userVersion } from '$lib/services/app';\n\n  const PACKAGE_JSON_URL = 'https://unpkg.com/@sveltia/cms/package.json';\n  const SCRIPT_URL = 'https://unpkg.com/@sveltia/cms/dist/sveltia-cms.js';\n  const CHECK_INTERVAL = 60 * 60 * 1000; // 1 hour\n  const CACHE_TIMEOUT = 10 * 60 * 1000; // 10 min\n\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. Behavior differs based on whether the script URL is\n   * pinned to a specific version or not. If not pinned and an update is available, wait 10 minutes\n   * before displaying the update notification, as redirects are cached by the UNPKG CDN. Otherwise,\n   * an older script may still be served when the user reloads the page, and the notification will\n   * persist. If pinned using a script tag or installed via npm, a reload won’t update the instance,\n   * so a console warning is shown instead.\n   * @see https://unpkg.com/#cache-behavior\n   */\n  const checkForUpdates = async () => {\n    try {\n      const response = await fetch(PACKAGE_JSON_URL);\n\n      if (!response.ok) {\n        return;\n      }\n\n      const { version: latestVersion } = await response.json();\n\n      if (!latestVersion || latestVersion === userVersion) {\n        return;\n      }\n\n      const hasUnpinnedScript = !!document.querySelector(`script[src=\"${SCRIPT_URL}\"]`);\n\n      if (hasUnpinnedScript) {\n        timeout = window.setTimeout(() => {\n          updateAvailable = true;\n        }, CACHE_TIMEOUT);\n      } else {\n        // eslint-disable-next-line no-console\n        console.warn(\n          `[Sveltia CMS] A new version (${latestVersion}) is available. ` +\n            'Update the pinned version in your script tag or package.json to upgrade.',\n        );\n      }\n    } catch {\n      //\n    }\n  };\n\n  onMount(() => {\n    if (import.meta.env.DEV) {\n      return undefined;\n    }\n\n    checkForUpdates();\n\n    interval = window.setInterval(() => {\n      checkForUpdates();\n    }, CHECK_INTERVAL);\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","import { loadModule } from '$lib/services/app/dependencies';\nimport { getAssetBlob } from '$lib/services/assets/info';\nimport { toFixed } from '$lib/services/utils/number';\n\n/**\n * @import { Asset, AssetKind, GeoCoordinates } from '$lib/types/private';\n */\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/MikeKovarik/exifr\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  const blob = isImage ? await getAssetBlob(asset) : null;\n\n  if (!blob) {\n    return { createdDate: undefined, coordinates: undefined };\n  }\n\n  /** @type {import('exifr')} */\n  const { parse } = await loadModule('exifr', 'dist/lite.esm.mjs');\n\n  const {\n    latitude,\n    longitude,\n    DateTimeOriginal,\n    CreateDate: timestamp = DateTimeOriginal,\n  } = (await parse(blob).catch(() => {})) ?? {};\n\n  return {\n    createdDate: timestamp instanceof Date ? timestamp : undefined,\n    coordinates:\n      Number.isFinite(latitude) && Number.isFinite(longitude)\n        ? { latitude: toFixed(latitude, 7), longitude: toFixed(longitude, 7) }\n        : undefined,\n  };\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 * @internal\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 * @internal\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 * @internal\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 { get } from 'svelte/store';\n\nimport { getAssetBlobURL, getAssetPublicURL } from '$lib/services/assets/info';\nimport { backend } from '$lib/services/backends';\nimport { getEntriesByAssetURL } from '$lib/services/contents/collection/entries';\nimport { getMediaMetadata } from '$lib/services/utils/media';\n\n/**\n * @import { Asset, AssetDetails, Entry } from '$lib/types/private';\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<Omit<AssetDetails, 'usedEntries'>>} Details. `usedEntries` is not included\n * because it can be expensive to fetch; use `getAssetUsedEntries` to fetch when needed.\n */\nexport const getAssetDetails = async (asset) => {\n  const { kind, path } = asset;\n  const { blobBaseURL } = get(backend)?.repository ?? {};\n  const blobURL = await getAssetBlobURL(asset);\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  };\n};\n\n/**\n * Get the list of entries using the given asset.\n * @param {Asset} asset Asset.\n * @returns {Promise<Entry[]>} List of entries using the asset.\n */\nexport const getAssetUsedEntries = async (asset) => {\n  const url =\n    getAssetPublicURL(asset, { allowSpecial: true, pathOnly: true }) ??\n    (await getAssetBlobURL(asset));\n\n  if (!url) {\n    return [];\n  }\n\n  return getEntriesByAssetURL(url);\n};\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Alert, Menu, MenuButton, MenuItem, Toast } from '@sveltia/ui';\n  import { isTextFileType } from '@sveltia/utils/file';\n\n  import { getAssetDetails } from '$lib/services/assets/details';\n  import { getAssetBlob } 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 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 (assets.length !== 1) {\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 {() => Promise<void>} func Copy function.\n   * @param {string} toastKey Toast label.\n   */\n  const doCopyAction = async (func, toastKey) => {\n    try {\n      await func();\n      toast.status = 'success';\n      toast.text = _(toastKey, { values: { count: assets.length } });\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={_('public_urls', { values: { count: assets.length } })}\n    disabled={!publicURLs.length}\n    onclick={() => {\n      doCopyAction(copyPublicURLs, 'asset_urls_copied');\n    }}\n  />\n  <MenuItem\n    label={_('file_paths', { values: { count: assets.length } })}\n    onclick={() => {\n      doCopyAction(copyFilePaths, 'asset_paths_copied');\n    }}\n  />\n  <MenuItem\n    label={_('file_data')}\n    disabled={!canCopyFileData}\n    onclick={() => {\n      doCopyAction(copyFileData, '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/account.svelte';\nimport { prefs } from '$lib/services/user/prefs.svelte';\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} */ (user.account);\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 = new Set(savedEntries.map((e) => e.id));\n\n  allEntries.update((entries) => [\n    ...entries.filter((e) => !savedEntryIds.has(e.id)),\n    ...savedEntries,\n  ]);\n\n  const excludingPaths = new Set(savedAssets.map((a) => a.path));\n\n  changes.forEach((c) => {\n    if (c.action === 'move' && c.previousPath) {\n      excludingPaths.add(c.previousPath);\n    } else if (c.action === 'delete') {\n      excludingPaths.add(c.path);\n    }\n  });\n\n  allAssets.update((assets) => [\n    ...assets.filter((a) => !excludingPaths.has(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 (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 * @internal\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 { _ } from '@sveltia/i18n';\n  import { Button, ConfirmationDialog, MenuItem } from '@sveltia/ui';\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={_('delete_assets', { values: { count: assets.length } })}\n  okLabel={_('delete')}\n  onOk={() => {\n    deleteAssets(assets);\n    onDelete?.();\n  }}\n>\n  {dialogDescription}\n</ConfirmationDialog>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Alert, Button, MenuItem, Toast } from '@sveltia/ui';\n  import { saveFile } from '@sveltia/utils/file';\n  import { sleep } from '@sveltia/utils/misc';\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_downloaded', { values: { count: assets.length } })}\n  </Alert>\n</Toast>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Divider, Menu, MenuButton, MenuItem } from '@sveltia/ui';\n\n  import { editingAsset, renamingAsset, uploadingAssets } from '$lib/services/assets';\n  import { defaultAssetDetails, getAssetDetails } from '$lib/services/assets/details';\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.svelte';\n  import { openNewTab } from '$lib/services/utils/window';\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 variant=\"ghost\" iconic popupPosition=\"bottom-right\" aria-label={_('show_edit_options')}>\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 = {\n            folder: undefined,\n            files: [],\n            originalAssets: asset ? [asset] : [],\n          };\n          $showUploadAssetsDialog = true;\n        }}\n      />\n      <Divider />\n      <MenuItem\n        label={_('view_on_live_site')}\n        disabled={!publicURL}\n        onclick={() => {\n          openNewTab(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            openNewTab(`${repoBlobURL}?plain=1`);\n          }}\n        />\n      {/if}\n    </Menu>\n  {/snippet}\n</MenuButton>\n","<script>\n  import { _, isRTL } from '@sveltia/i18n';\n  import { Button, Icon } from '@sveltia/ui';\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={isRTL() ? 'arrow_forward' : 'arrow_back'} />\n  {/snippet}\n</Button>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Toolbar, TruncatedText } from '@sveltia/ui';\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 { env } from '$lib/services/user/env.svelte';\n\n  const assets = $derived($overlaidAsset ? [$overlaidAsset] : []);\n  const useButton = $derived(!env.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 !env.isSmallScreen}\n    {@render overflowButtons()}\n  {/if}\n  <EditOptionsButton asset={$overlaidAsset}>\n    {#snippet extraItems()}\n      {#if env.isSmallScreen}\n        {@render overflowButtons()}\n      {/if}\n    {/snippet}\n  </EditOptionsButton>\n</Toolbar>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Icon } from '@sveltia/ui';\n  import { waitForVisibility } from '@sveltia/utils/element';\n  import { sleep } from '@sveltia/utils/misc';\n  import { flushSync } from 'svelte';\n\n  import { getAssetBlobURL, getAssetThumbnailURL } from '$lib/services/assets/info';\n  import { THUMBNAIL_KINDS } from '$lib/services/assets/kinds';\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   * The actual `src` applied to the media element. For the `asset`-based flow this mirrors `src`\n   * (which is set after a visibility check inside {@link updateSrc}). For an externally-provided\n   * `src` with `loading === 'lazy'`, it is deferred via {@link waitForVisibility} so that the\n   * browser does not eagerly fetch off-screen images in grid layouts.\n   * @type {string | undefined}\n   */\n  let mediaSrc = $state();\n\n  const isThumbnail = $derived(!!asset && !!variant && !controls);\n  const isImage = $derived(\n    kind === 'image' ||\n      asset?.name.endsWith('.pdf') ||\n      (isThumbnail && THUMBNAIL_KINDS.includes(kind)),\n  );\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 || !mediaSrc) {\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      // Wait a bit before revoking the thumbnail blob URL to ensure the image is rendered.\n      // Otherwise, especially on Chrome, the image may fail to render without this delay. @see\n      // https://github.com/sveltia/sveltia-cms/issues/793\n      await sleep(500);\n\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 (asset) {\n      // For the asset-based flow, `src` is set by `updateSrc` after a visibility check\n      mediaSrc = src;\n    } else if (src && mediaElement && loading === 'lazy') {\n      // For externally-provided `src`, use Intersection Observer instead of relying on the native\n      // `loading=\"lazy\"` attribute, which browsers may ignore in grid/flex layouts\n      mediaSrc = undefined;\n\n      const currentSrc = src;\n\n      (async () => {\n        await waitForVisibility(mediaElement);\n        mediaSrc = currentSrc;\n      })();\n    } else {\n      mediaSrc = src;\n    }\n  });\n\n  $effect(() => {\n    if (mediaElement && mediaSrc) {\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={mediaSrc} {alt} {...rest} bind:this={mediaElement} />\n  {:else if kind === 'video'}\n    <!-- svelte-ignore a11y_media_has_caption -->\n    <video\n      src={mediaSrc}\n      controls={controls || undefined}\n      playsinline\n      {...rest}\n      bind:this={mediaElement}\n    ></video>\n  {:else if kind === 'audio'}\n    {#if controls}\n      <audio src={mediaSrc} 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>\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  /* prettier-ignore */\n  .checkerboard img {\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) img {\n    /* hardcoded, the same color as the transparent image preview in Chrome and Firefox */\n    background-color: #e5e5e5;\n  }\n\n  :is(:global(img, video)) {\n    object-fit: contain;\n\n    &:not([src]) {\n      visibility: hidden;\n    }\n  }\n\n  .cover :is(:global(img, video)) {\n    object-fit: cover;\n    aspect-ratio: 1 / 1;\n  }\n</style>\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 { _ } from '@sveltia/i18n';\n  import { onMount } from 'svelte';\n\n  import { getUnpkgURL, loadModule } from '$lib/services/app/dependencies';\n\n  /**\n   * @import Leaflet from 'leaflet';\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   * @property {string} [class] Additional CSS classes to apply to the map container.\n   * @property {HTMLElement} [mapElement] The HTML element to bind the map to.\n   * @property {(args: { leaflet: Leaflet, map: Leaflet.Map }) => void} [onReady] Callback function\n   * invoked when the map is ready.\n   */\n\n  /** @type {Props & Record<string, any>} */\n  let {\n    /* eslint-disable prefer-const */\n    coordinates,\n    class: className = '',\n    mapElement = $bindable(),\n    onReady = undefined,\n    ...rest\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {ResizeObserver | undefined} */\n  let resizeObserver;\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 {Leaflet} */\n    const leaflet = await loadModule('leaflet', 'dist/leaflet-src.esm.js');\n    const iconUrl = `${getUnpkgURL('leaflet')}/dist/images/marker-icon-2x.png`;\n    const 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        // Set the referrer policy explicitly to avoid issues when loading tiles from OpenStreetMap.\n        // Otherwise, the global `same-origin` policy set in Sveltia CMS will apply.\n        // @see https://github.com/sveltia/sveltia-cms/issues/742\n        referrerPolicy: 'strict-origin',\n      })\n      .addTo(map);\n\n    if (coordinates) {\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\n    mapElement.querySelectorAll('a[href^=\"https:\"]').forEach((a) => {\n      a.setAttribute('target', '_blank');\n      a.setAttribute('rel', 'noopener noreferrer');\n    });\n\n    resizeObserver = new ResizeObserver(() => {\n      map?.invalidateSize();\n    });\n\n    resizeObserver.observe(mapElement);\n\n    onReady?.({ leaflet, map });\n  };\n\n  onMount(() => {\n    init();\n\n    return () => {\n      resizeObserver?.disconnect();\n    };\n  });\n</script>\n\n<div\n  role=\"application\"\n  class=\"map {className}\"\n  bind:this={mapElement}\n  aria-label={coordinates ? _('map_lat_lng', { values: coordinates }) : undefined}\n  {...rest}\n></div>\n\n<style>\n  /* Leaflet default styles copied from `node_modules/leaflet/dist/leaflet.css`. Somehow we can’t */\n  /* import it directly here; Vite emits it as a separate CSS file, which we want to avoid. */\n  /* @todo Remove unused rules. */\n  :global {\n    .leaflet-pane,\n    .leaflet-tile,\n    .leaflet-marker-icon,\n    .leaflet-marker-shadow,\n    .leaflet-tile-container,\n    .leaflet-pane > svg,\n    .leaflet-pane > canvas,\n    .leaflet-zoom-box,\n    .leaflet-image-layer,\n    .leaflet-layer {\n      position: absolute;\n      left: 0;\n      top: 0;\n    }\n\n    .leaflet-container {\n      overflow: hidden;\n      -webkit-tap-highlight-color: transparent;\n      background: #ddd;\n      outline-offset: 1px;\n      font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;\n      font-size: 12px;\n      font-size: 0.75rem;\n      line-height: 1.5;\n    }\n\n    .leaflet-tile,\n    .leaflet-marker-icon,\n    .leaflet-marker-shadow {\n      -webkit-user-select: none;\n      -moz-user-select: none;\n      user-select: none;\n      -webkit-user-drag: none;\n    }\n\n    .leaflet-tile::selection {\n      background: transparent;\n    }\n\n    .leaflet-safari .leaflet-tile {\n      image-rendering: -webkit-optimize-contrast;\n    }\n\n    .leaflet-safari .leaflet-tile-container {\n      width: 1600px;\n      height: 1600px;\n      -webkit-transform-origin: 0 0;\n      transform-origin: 0 0;\n    }\n\n    .leaflet-marker-icon,\n    .leaflet-marker-shadow {\n      display: block;\n    }\n\n    .leaflet-container .leaflet-overlay-pane svg {\n      max-width: none !important;\n      max-height: none !important;\n    }\n\n    .leaflet-container .leaflet-marker-pane img,\n    .leaflet-container .leaflet-shadow-pane img,\n    .leaflet-container .leaflet-tile-pane img,\n    .leaflet-container img.leaflet-image-layer,\n    .leaflet-container .leaflet-tile {\n      max-width: none !important;\n      max-height: none !important;\n      width: auto;\n      padding: 0;\n    }\n\n    .leaflet-container img.leaflet-tile {\n      mix-blend-mode: plus-lighter;\n    }\n\n    .leaflet-container.leaflet-touch-zoom {\n      -ms-touch-action: pan-x pan-y;\n      touch-action: pan-x pan-y;\n    }\n\n    .leaflet-container.leaflet-touch-drag {\n      -ms-touch-action: pinch-zoom;\n      touch-action: none;\n      touch-action: pinch-zoom;\n    }\n\n    .leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {\n      -ms-touch-action: none;\n      touch-action: none;\n    }\n\n    .leaflet-container a {\n      -webkit-tap-highlight-color: rgba(51, 181, 229, 0.4);\n      color: #0078a8;\n    }\n\n    .leaflet-tile {\n      filter: inherit;\n      visibility: hidden;\n    }\n\n    .leaflet-tile-loaded {\n      visibility: inherit;\n    }\n\n    .leaflet-zoom-box {\n      width: 0;\n      height: 0;\n      -moz-box-sizing: border-box;\n      box-sizing: border-box;\n      z-index: 800;\n      border: 2px dotted #38f;\n      background: rgba(255, 255, 255, 0.5);\n    }\n\n    .leaflet-overlay-pane svg {\n      -moz-user-select: none;\n      user-select: none;\n    }\n\n    .leaflet-pane {\n      z-index: 400;\n    }\n\n    .leaflet-tile-pane {\n      z-index: 200;\n    }\n\n    .leaflet-overlay-pane {\n      z-index: 400;\n    }\n\n    .leaflet-shadow-pane {\n      z-index: 500;\n    }\n\n    .leaflet-marker-pane {\n      z-index: 600;\n    }\n\n    .leaflet-tooltip-pane {\n      z-index: 650;\n    }\n\n    .leaflet-popup-pane {\n      z-index: 700;\n    }\n\n    .leaflet-map-pane canvas {\n      z-index: 100;\n    }\n\n    .leaflet-map-pane svg {\n      z-index: 200;\n    }\n\n    .leaflet-vml-shape {\n      width: 1px;\n      height: 1px;\n    }\n\n    .lvml {\n      behavior: url(#default#VML);\n      display: inline-block;\n      position: absolute;\n    }\n\n    .leaflet-control {\n      position: relative;\n      z-index: 800;\n      pointer-events: visiblePainted;\n      pointer-events: auto;\n      float: left;\n      clear: both;\n    }\n\n    .leaflet-top,\n    .leaflet-bottom {\n      position: absolute;\n      z-index: 1000;\n      pointer-events: none;\n    }\n\n    .leaflet-top {\n      top: 0;\n    }\n\n    .leaflet-right {\n      right: 0;\n    }\n\n    .leaflet-bottom {\n      bottom: 0;\n    }\n\n    .leaflet-left {\n      left: 0;\n    }\n\n    .leaflet-right .leaflet-control {\n      float: right;\n      margin-right: 10px;\n    }\n\n    .leaflet-top .leaflet-control {\n      margin-top: 10px;\n    }\n\n    .leaflet-bottom .leaflet-control {\n      margin-bottom: 10px;\n    }\n\n    .leaflet-left .leaflet-control {\n      margin-left: 10px;\n    }\n\n    .leaflet-fade-anim .leaflet-popup {\n      opacity: 0;\n      -webkit-transition: opacity 0.2s linear;\n      -moz-transition: opacity 0.2s linear;\n      transition: opacity 0.2s linear;\n    }\n\n    .leaflet-fade-anim .leaflet-map-pane .leaflet-popup {\n      opacity: 1;\n    }\n\n    .leaflet-zoom-animated {\n      -webkit-transform-origin: 0 0;\n      -ms-transform-origin: 0 0;\n      transform-origin: 0 0;\n    }\n\n    svg.leaflet-zoom-animated {\n      will-change: transform;\n    }\n\n    .leaflet-zoom-anim .leaflet-zoom-animated {\n      -webkit-transition: -webkit-transform 0.25s cubic-bezier(0, 0, 0.25, 1);\n      -moz-transition: -moz-transform 0.25s cubic-bezier(0, 0, 0.25, 1);\n      transition: transform 0.25s cubic-bezier(0, 0, 0.25, 1);\n    }\n\n    .leaflet-zoom-anim .leaflet-tile,\n    .leaflet-pan-anim .leaflet-tile {\n      -webkit-transition: none;\n      -moz-transition: none;\n      transition: none;\n    }\n\n    .leaflet-zoom-anim .leaflet-zoom-hide {\n      visibility: hidden;\n    }\n\n    .leaflet-interactive {\n      cursor: pointer;\n    }\n\n    .leaflet-grab {\n      /* stylelint-disable-next-line declaration-property-value-no-unknown */\n      cursor: -webkit-grab;\n      /* stylelint-disable-next-line declaration-property-value-no-unknown */\n      cursor: -moz-grab;\n      cursor: grab;\n    }\n\n    .leaflet-crosshair,\n    .leaflet-crosshair .leaflet-interactive {\n      cursor: crosshair;\n    }\n\n    .leaflet-popup-pane,\n    .leaflet-control {\n      cursor: auto;\n    }\n\n    .leaflet-dragging .leaflet-grab,\n    .leaflet-dragging .leaflet-grab .leaflet-interactive,\n    .leaflet-dragging .leaflet-marker-draggable {\n      cursor: move;\n      /* stylelint-disable-next-line declaration-property-value-no-unknown */\n      cursor: -webkit-grabbing;\n      /* stylelint-disable-next-line declaration-property-value-no-unknown */\n      cursor: -moz-grabbing;\n      cursor: grabbing;\n    }\n\n    .leaflet-marker-icon,\n    .leaflet-marker-shadow,\n    .leaflet-image-layer,\n    .leaflet-pane > svg path,\n    .leaflet-tile-container {\n      pointer-events: none;\n    }\n\n    .leaflet-marker-icon.leaflet-interactive,\n    .leaflet-image-layer.leaflet-interactive,\n    .leaflet-pane > svg path.leaflet-interactive,\n    svg.leaflet-image-layer.leaflet-interactive path {\n      pointer-events: visiblePainted;\n      pointer-events: auto;\n    }\n\n    .leaflet-bar {\n      box-shadow: 0 1px 5px rgba(0, 0, 0, 0.65);\n      border-radius: 4px;\n    }\n\n    .leaflet-bar a {\n      background-color: #fff;\n      border-bottom: 1px solid #ccc;\n      width: 26px;\n      height: 26px;\n      line-height: 26px;\n      display: block;\n      text-align: center;\n      text-decoration: none;\n      color: black;\n    }\n\n    .leaflet-bar a,\n    .leaflet-control-layers-toggle {\n      background-position: 50% 50%;\n      background-repeat: no-repeat;\n      display: block;\n    }\n\n    .leaflet-bar a:hover,\n    .leaflet-bar a:focus {\n      background-color: #f4f4f4;\n    }\n\n    .leaflet-bar a:first-child {\n      border-top-left-radius: 4px;\n      border-top-right-radius: 4px;\n    }\n\n    .leaflet-bar a:last-child {\n      border-bottom-left-radius: 4px;\n      border-bottom-right-radius: 4px;\n      border-bottom: none;\n    }\n\n    .leaflet-bar a.leaflet-disabled {\n      cursor: default;\n      background-color: #f4f4f4;\n      color: #bbb;\n    }\n\n    .leaflet-touch .leaflet-bar a {\n      width: 30px;\n      height: 30px;\n      line-height: 30px;\n    }\n\n    .leaflet-touch .leaflet-bar a:first-child {\n      border-top-left-radius: 2px;\n      border-top-right-radius: 2px;\n    }\n\n    .leaflet-touch .leaflet-bar a:last-child {\n      border-bottom-left-radius: 2px;\n      border-bottom-right-radius: 2px;\n    }\n\n    .leaflet-control-zoom-in,\n    .leaflet-control-zoom-out {\n      font:\n        bold 18px 'Lucida Console',\n        Monaco,\n        monospace;\n      text-indent: 1px;\n    }\n\n    .leaflet-touch .leaflet-control-zoom-in,\n    .leaflet-touch .leaflet-control-zoom-out {\n      font-size: 22px;\n    }\n\n    .leaflet-control-layers {\n      box-shadow: 0 1px 5px rgba(0, 0, 0, 0.4);\n      background: #fff;\n      border-radius: 5px;\n    }\n\n    .leaflet-control-layers-toggle {\n      background-image: url(images/layers.png);\n      width: 36px;\n      height: 36px;\n    }\n\n    .leaflet-retina .leaflet-control-layers-toggle {\n      background-image: url(images/layers-2x.png);\n      background-size: 26px 26px;\n    }\n\n    .leaflet-touch .leaflet-control-layers-toggle {\n      width: 44px;\n      height: 44px;\n    }\n\n    .leaflet-control-layers .leaflet-control-layers-list,\n    .leaflet-control-layers-expanded .leaflet-control-layers-toggle {\n      display: none;\n    }\n\n    .leaflet-control-layers-expanded .leaflet-control-layers-list {\n      display: block;\n      position: relative;\n    }\n\n    .leaflet-control-layers-expanded {\n      padding: 6px 10px 6px 6px;\n      color: #333;\n      background: #fff;\n    }\n\n    .leaflet-control-layers-scrollbar {\n      overflow-y: scroll;\n      overflow-x: hidden;\n      padding-right: 5px;\n    }\n\n    .leaflet-control-layers-selector {\n      margin-top: 2px;\n      position: relative;\n      top: 1px;\n    }\n\n    .leaflet-control-layers label {\n      display: block;\n      font-size: 13px;\n      font-size: 1.08333em;\n    }\n\n    .leaflet-control-layers-separator {\n      height: 0;\n      border-top: 1px solid #ddd;\n      margin: 5px -10px 5px -6px;\n    }\n\n    .leaflet-default-icon-path {\n      background-image: url(images/marker-icon.png);\n    }\n\n    .leaflet-container .leaflet-control-attribution {\n      background: #fff;\n      background: rgba(255, 255, 255, 0.8);\n      margin: 0;\n    }\n\n    .leaflet-control-attribution,\n    .leaflet-control-scale-line {\n      padding: 0 5px;\n      color: #333;\n      line-height: 1.4;\n    }\n\n    .leaflet-control-attribution a {\n      text-decoration: none;\n    }\n\n    .leaflet-control-attribution a:hover,\n    .leaflet-control-attribution a:focus {\n      text-decoration: underline;\n    }\n\n    .leaflet-attribution-flag {\n      display: inline !important;\n      vertical-align: baseline !important;\n      width: 1em;\n      height: 0.6669em;\n    }\n\n    .leaflet-left .leaflet-control-scale {\n      margin-left: 5px;\n    }\n\n    .leaflet-bottom .leaflet-control-scale {\n      margin-bottom: 5px;\n    }\n\n    .leaflet-control-scale-line {\n      border: 2px solid #777;\n      border-top: none;\n      line-height: 1.1;\n      padding: 2px 5px 1px;\n      white-space: nowrap;\n      -moz-box-sizing: border-box;\n      box-sizing: border-box;\n      background: rgba(255, 255, 255, 0.8);\n      text-shadow: 1px 1px #fff;\n    }\n\n    .leaflet-control-scale-line:not(:first-child) {\n      border-top: 2px solid #777;\n      border-bottom: none;\n      margin-top: -2px;\n    }\n\n    .leaflet-control-scale-line:not(:first-child):not(:last-child) {\n      border-bottom: 2px solid #777;\n    }\n\n    .leaflet-touch .leaflet-control-attribution,\n    .leaflet-touch .leaflet-control-layers,\n    .leaflet-touch .leaflet-bar {\n      box-shadow: none;\n    }\n\n    .leaflet-touch .leaflet-control-layers,\n    .leaflet-touch .leaflet-bar {\n      border: 2px solid rgba(0, 0, 0, 0.2);\n      background-clip: padding-box;\n    }\n\n    .leaflet-popup {\n      position: absolute;\n      text-align: center;\n      margin-bottom: 20px;\n    }\n\n    .leaflet-popup-content-wrapper {\n      padding: 1px;\n      text-align: left;\n      border-radius: 12px;\n    }\n\n    .leaflet-popup-content {\n      margin: 13px 24px 13px 20px;\n      line-height: 1.3;\n      font-size: 13px;\n      font-size: 1.08333em;\n      min-height: 1px;\n    }\n\n    .leaflet-popup-content p {\n      margin: 17px 0;\n      margin: 1.3em 0;\n    }\n\n    .leaflet-popup-tip-container {\n      width: 40px;\n      height: 20px;\n      position: absolute;\n      left: 50%;\n      margin-top: -1px;\n      margin-left: -20px;\n      overflow: hidden;\n      pointer-events: none;\n    }\n\n    .leaflet-popup-tip {\n      width: 17px;\n      height: 17px;\n      padding: 1px;\n\n      margin: -10px auto 0;\n      pointer-events: auto;\n\n      -webkit-transform: rotate(45deg);\n      -moz-transform: rotate(45deg);\n      -ms-transform: rotate(45deg);\n      transform: rotate(45deg);\n    }\n\n    .leaflet-popup-content-wrapper,\n    .leaflet-popup-tip {\n      background: white;\n      color: #333;\n      box-shadow: 0 3px 14px rgba(0, 0, 0, 0.4);\n    }\n\n    .leaflet-container a.leaflet-popup-close-button {\n      position: absolute;\n      top: 0;\n      right: 0;\n      border: none;\n      text-align: center;\n      width: 24px;\n      height: 24px;\n      font:\n        16px/24px Tahoma,\n        Verdana,\n        sans-serif;\n      color: #757575;\n      text-decoration: none;\n      background: transparent;\n    }\n\n    .leaflet-container a.leaflet-popup-close-button:hover,\n    .leaflet-container a.leaflet-popup-close-button:focus {\n      color: #585858;\n    }\n\n    .leaflet-popup-scrolled {\n      overflow: auto;\n    }\n\n    .leaflet-oldie .leaflet-popup-content-wrapper {\n      -ms-zoom: 1;\n      zoom: 1;\n    }\n\n    .leaflet-oldie .leaflet-popup-tip {\n      width: 24px;\n      margin: 0 auto;\n    }\n\n    .leaflet-oldie .leaflet-control-zoom,\n    .leaflet-oldie .leaflet-control-layers,\n    .leaflet-oldie .leaflet-popup-content-wrapper,\n    .leaflet-oldie .leaflet-popup-tip {\n      border: 1px solid #999;\n    }\n\n    .leaflet-div-icon {\n      background: #fff;\n      border: 1px solid #666;\n    }\n\n    .leaflet-tooltip {\n      position: absolute;\n      padding: 6px;\n      background-color: #fff;\n      border: 1px solid #fff;\n      border-radius: 3px;\n      color: #222;\n      white-space: nowrap;\n      -webkit-user-select: none;\n      -moz-user-select: none;\n      -ms-user-select: none;\n      user-select: none;\n      pointer-events: none;\n      box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);\n    }\n\n    .leaflet-tooltip.leaflet-interactive {\n      cursor: pointer;\n      pointer-events: auto;\n    }\n\n    .leaflet-tooltip-top:before,\n    .leaflet-tooltip-bottom:before,\n    .leaflet-tooltip-left:before,\n    .leaflet-tooltip-right:before {\n      position: absolute;\n      pointer-events: none;\n      border: 6px solid transparent;\n      background: transparent;\n      content: '';\n    }\n\n    .leaflet-tooltip-bottom {\n      margin-top: 6px;\n    }\n\n    .leaflet-tooltip-top {\n      margin-top: -6px;\n    }\n\n    .leaflet-tooltip-bottom:before,\n    .leaflet-tooltip-top:before {\n      left: 50%;\n      margin-left: -6px;\n    }\n\n    .leaflet-tooltip-top:before {\n      bottom: 0;\n      margin-bottom: -12px;\n      border-top-color: #fff;\n    }\n\n    .leaflet-tooltip-bottom:before {\n      top: 0;\n      margin-top: -12px;\n      margin-left: -6px;\n      border-bottom-color: #fff;\n    }\n\n    .leaflet-tooltip-left {\n      margin-left: -6px;\n    }\n\n    .leaflet-tooltip-right {\n      margin-left: 6px;\n    }\n\n    .leaflet-tooltip-left:before,\n    .leaflet-tooltip-right:before {\n      top: 50%;\n      margin-top: -6px;\n    }\n\n    .leaflet-tooltip-left:before {\n      right: 0;\n      margin-right: -12px;\n      border-left-color: #fff;\n    }\n\n    .leaflet-tooltip-right:before {\n      left: 0;\n      margin-left: -12px;\n      border-right-color: #fff;\n    }\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    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 { _, locale as appLocale } from '@sveltia/i18n';\n  import { Button } from '@sveltia/ui';\n  import { getPathInfo } from '@sveltia/utils/file';\n  import mime from 'mime';\n\n  import AssetPreview from '$lib/components/assets/shared/asset-preview.svelte';\n  import LeafletMap from '$lib/components/common/leaflet-map.svelte';\n  import { goto } from '$lib/services/app/navigation';\n  import {\n    defaultAssetDetails,\n    getAssetDetails,\n    getAssetUsedEntries,\n  } from '$lib/services/assets/details';\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 { formatDate } 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  // @todo Fetch file size and commit info on demand for GitLab\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   * Update the properties above.\n   */\n  const updateProps = async () => {\n    details = asset ? await getAssetDetails(asset) : { ...defaultAssetDetails };\n    details.usedEntries = asset ? await getAssetUsedEntries(asset) : [];\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  {#if !!size}\n    <section>\n      <h4>{_('size')}</h4>\n      <p>\n        {#key appLocale.current}\n          {formatSize(size)}\n        {/key}\n      </p>\n    </section>\n  {/if}\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\" rel=\"noopener noreferrer\">{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    {#if !usedEntries}\n      <p>{_('loading')}</p>\n    {:else}\n      {#each usedEntries as entry (entry.id)}\n        {#each getAssociatedCollections(entry) as collection (collection.name)}\n          {#key appLocale.current}\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      {:else}\n        <p>{_('sort_keys.none')}</p>\n      {/each}\n    {/if}\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, appLocale.current)}</p>\n    </section>\n  {/if}\n  {#if createdDate}\n    <section>\n      <h4>{_('created_date')}</h4>\n      <p>{formatDate(createdDate, appLocale.current)}</p>\n    </section>\n  {/if}\n  {#if coordinates}\n    <section>\n      <h4>{_('location')}</h4>\n      <LeafletMap {coordinates} />\n    </section>\n  {/if}\n</div>\n\n<style>\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 { _ } from '@sveltia/i18n';\n  import { EmptyState } from '@sveltia/ui';\n  import { isTextFileType } from '@sveltia/utils/file';\n  import { sanitize } from 'isomorphic-dompurify';\n  import { parse } from 'marked';\n  import { tick } from 'svelte';\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  /** @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    if (wrapper) {\n      if ($showAssetOverlay) {\n        moveFocus();\n      }\n    }\n  });\n</script>\n\n<div role=\"group\" class=\"wrapper\" aria-label={_('asset_editor')} bind:this={wrapper}>\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} sandbox=\"allow-scripts\"></iframe>\n        {:else if blob?.type && isTextFileType(blob.type)}\n          {#await $overlaidAsset?.text ?? blob.text() then text}\n            {#if name?.endsWith('.md')}\n              {#await parse(text, { breaks: true, async: true }) then rawHTML}\n                <div role=\"figure\" class=\"markdown\">\n                  {@html 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>\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\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 { derived } from 'svelte/store';\n\nimport { backend } from '$lib/services/backends';\nimport { cmsConfig } from '$lib/services/config';\n\n/**\n * @import { Readable } from 'svelte/store';\n * @import { GitBackend } from '$lib/types/public';\n */\n\n/**\n * Whether the skip CI configuration is explicitly set in the CMS configuration. This is used to\n * determine if the skip CI option should be shown in the UI.\n * @type {Readable<boolean>}\n */\nexport const skipCIConfigured = derived([cmsConfig, backend], ([_cmsConfig, _backend]) => {\n  if (!_cmsConfig || !_backend?.isGit) {\n    return false;\n  }\n\n  const { skip_ci: skipCI, automatic_deployments: autoDeploy } = /** @type {GitBackend} */ (\n    _cmsConfig.backend\n  );\n\n  return typeof skipCI === 'boolean' || typeof autoDeploy === 'boolean';\n});\n\n/**\n * Whether the skip CI option is enabled in the CMS configuration.\n * @type {Readable<boolean>}\n */\nexport const skipCIEnabled = derived([cmsConfig, backend], ([_cmsConfig, _backend]) => {\n  if (!_cmsConfig || !_backend?.isGit) {\n    return false;\n  }\n\n  const { skip_ci: skipCI, automatic_deployments: autoDeploy } = /** @type {GitBackend} */ (\n    _cmsConfig.backend\n  );\n\n  return skipCI === true || autoDeploy === false;\n});\n","import { get } from 'svelte/store';\n\nimport {\n  focusedAsset,\n  getAssetByInternalPath,\n  getAssetsByDirName,\n  overlaidAsset,\n} from '$lib/services/assets';\nimport { assetUpdatesToast } from '$lib/services/assets/data';\nimport { getAssetKind } from '$lib/services/assets/kinds';\nimport { skipCIConfigured, skipCIEnabled } from '$lib/services/backends/git/shared/integration';\nimport { saveChanges } from '$lib/services/backends/save';\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 * @internal\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, originalAssets } = 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 originalAsset = originalAssets?.find(\n      (a) => a.name.normalize().toLowerCase() === file.name.normalize().toLowerCase(),\n    );\n\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 * @internal\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(getAssetByInternalPath(_focusedAsset.path));\n  }\n\n  // Replace the existing asset\n  if (_overlaidAsset) {\n    overlaidAsset.set(getAssetByInternalPath(_overlaidAsset.path));\n  }\n\n  assetUpdatesToast.set({\n    ...UPDATE_TOAST_DEFAULT_STATE,\n    saved: true,\n    published: get(skipCIConfigured) && !get(skipCIEnabled),\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 { _ } from '@sveltia/i18n';\n  import { Dialog, Switch, TextArea } from '@sveltia/ui';\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          originalAssets: [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 dir=\"auto\" 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>\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/entries/index-file';\nimport { getLocalePath } from '$lib/services/contents/i18n';\nimport { createPath } from '$lib/services/utils/file';\n\n/**\n * @import { EntryDraft, InternalEntryCollection, InternalLocaleCode } from '$lib/types/private';\n * @import { I18nFileStructure } from '$lib/types/public';\n */\n\n/**\n * Build the file path based on i18n structure and locale settings.\n * @param {object} args Arguments.\n * @param {string} args.basePath Base directory path.\n * @param {string} args.path File path (slug or subpath).\n * @param {string} args.extension File extension.\n * @param {InternalLocaleCode} args.locale Locale code.\n * @param {boolean} args.omitLocale Whether to omit locale from the file path.\n * @param {I18nFileStructure} args.structure I18n structure type.\n * @returns {string} Complete file path string.\n */\nexport const buildPathByStructure = ({\n  basePath,\n  path,\n  extension,\n  locale,\n  omitLocale,\n  structure,\n}) => {\n  switch (structure) {\n    case 'multiple_folders':\n      return omitLocale\n        ? `${basePath}/${path}.${extension}`\n        : `${basePath}/${locale}/${path}.${extension}`;\n    case 'multiple_folders_i18n_root': // deprecated\n    case 'multiple_root_folders': // new name\n      return omitLocale\n        ? `${basePath}/${path}.${extension}`\n        : `${locale}/${basePath}/${path}.${extension}`;\n    case 'multiple_files':\n      return omitLocale\n        ? `${basePath}/${path}.${extension}`\n        : `${basePath}/${path}.${locale}.${extension}`;\n    default:\n      return `${basePath}/${path}.${extension}`;\n  }\n};\n\n/**\n * Determine the file path for the given entry draft depending on the collection type, i18n config\n * and entry collection’s subpath.\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 * @see https://sveltiacms.app/en/docs/i18n\n */\nexport const createEntryPath = ({ draft, locale, slug }) => {\n  const { collection, collectionFile, originalEntry, currentValues, isIndexFile } = draft;\n\n  const {\n    _i18n: { defaultLocale, structure, omitDefaultLocaleFromFilePath },\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 {InternalEntryCollection} */ (collection);\n\n  const {\n    _file: { basePath, subPath, extension },\n  } = entryCollection;\n\n  /**\n   * Support entry collection’s subpath.\n   * @see https://decapcms.org/docs/collection-folder/#folder-collections-path\n   * @see https://sveltiacms.app/en/docs/collections/entries#managing-entry-file-paths\n   */\n  let 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  // Remove extension from index file name if it already has one\n  if (isIndexFile && path?.endsWith(`.${extension}`)) {\n    path = path.slice(0, -extension.length - 1);\n  }\n\n  const pathString = buildPathByStructure({\n    basePath: /** @type {string} */ (basePath),\n    path,\n    extension,\n    locale,\n    omitLocale: omitDefaultLocaleFromFilePath && locale === defaultLocale,\n    structure,\n  });\n\n  // Remove unnecessary slashes in case `basePath` is empty\n  return createPath(pathString.split('/'));\n};\n","import { fillTemplate } from '$lib/services/common/template';\nimport { getIndexFile } from '$lib/services/contents/collection/entries/index-file';\n\n/**\n * @import {\n * EntryDraft,\n * EntryFileMap,\n * EntrySlugVariants,\n * FillTemplateOptions,\n * FlattenedEntryContent,\n * InternalEntryCollection,\n * LocaleSlugMap,\n * } from '$lib/types/private';\n */\n\n/**\n * Replace blob URLs in the value map with the actual file names (without extension) so that asset\n * fields (image, file) can be used in slug templates.\n * @param {FlattenedEntryContent} valueMap Flattened entry content.\n * @param {EntryFileMap} files Draft file map keyed by blob URL.\n * @returns {FlattenedEntryContent} Value map with blob URLs replaced.\n * @see https://github.com/sveltia/sveltia-cms/issues/710\n */\nexport const resolveBlobURLs = (valueMap, files) => {\n  const resolved = { ...valueMap };\n\n  Object.entries(resolved).forEach(([key, value]) => {\n    if (typeof value === 'string' && value.startsWith('blob:') && files[value]) {\n      resolved[key] = files[value].file.name.replace(/\\.[^.]+$/, '');\n    }\n  });\n\n  return resolved;\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, currentSlugs, currentValues, files, isIndexFile } = draft;\n\n  const {\n    _i18n: { defaultLocale },\n  } = collectionFile ?? collection;\n\n  return {\n    collection: /** @type {InternalEntryCollection} */ (collection),\n    content: {\n      ...resolveBlobURLs(currentValues[defaultLocale], files),\n      // Slug candidate for the default locale\n      _slug: currentSlugs?.[defaultLocale] ?? currentSlugs?._,\n    },\n    locale: defaultLocale,\n    isIndexFile,\n  };\n};\n\n/**\n * Get the localized slug for the given locale.\n * @internal\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 */\nexport const getLocalizedSlug = ({ draft, locale, localizingKeyPaths }) => {\n  const {\n    isNew,\n    collection,\n    collectionFile,\n    originalLocales,\n    currentSlugs,\n    currentValues,\n    files,\n    isIndexFile,\n  } = draft;\n\n  const { _type } = collection;\n\n  const {\n    identifier_field: identifierField = 'title',\n    slug: slugTemplate = `{{${identifierField}}}`,\n  } = _type === 'entry' ? collection : {};\n\n  const {\n    _i18n: { defaultLocale },\n  } = collectionFile ?? collection;\n\n  const _slug = currentSlugs?.[locale] ?? currentSlugs?._;\n\n  // When creating a new entry or enabling a locale for an existing entry, we need to fill the slug\n  // template to generate the initial slug for the new locale. For other cases, we keep the existing\n  // slug to avoid changing URLs unexpectedly.\n  if (isNew || !originalLocales[locale]) {\n    return fillTemplate(slugTemplate, {\n      collection,\n      locale,\n      content: {\n        // Merge the default locale content and localized content\n        ...resolveBlobURLs(currentValues[defaultLocale], files),\n        ...resolveBlobURLs(\n          Object.fromEntries(\n            localizingKeyPaths.map((keyPath) => [keyPath, currentValues[locale]?.[keyPath]]),\n          ),\n          files,\n        ),\n        // Slug candidate for the current locale\n        _slug,\n      },\n      isIndexFile,\n    });\n  }\n\n  return /** @type {string} */ (_slug);\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 * @internal\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 */\nexport const getLocalizedSlugs = ({ draft, defaultLocaleSlug }) => {\n  const { collection, collectionFile, currentLocales } = draft;\n  const { _type } = collection;\n\n  const {\n    identifier_field: identifierField = 'title',\n    slug: slugTemplate = `{{${identifierField}}}`,\n  } = _type === 'entry' ? collection : {};\n\n  const {\n    _i18n: {\n      defaultLocale,\n      structureMap: { i18nSingleFile, i18nSingleFileDefaultRoot },\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.replace(/^fields\\./, ''));\n\n  if (i18nSingleFile || i18nSingleFileDefaultRoot || !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 * @internal\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://sveltiacms.app/en/docs/i18n#localizing-entry-slugs\n * @see https://gohugo.io/content-management/multilingual/#bypassing-default-linking\n */\nexport const 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 { isNew, collection, collectionFile, fileName, currentSlugs, isIndexFile } = draft;\n  const { _type } = collection;\n\n  const {\n    identifier_field: identifierField = 'title',\n    slug: slugTemplate = `{{${identifierField}}}`,\n  } = _type === 'entry' ? 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    (isNew\n      ? fillTemplate(slugTemplate, fillSlugOptions)\n      : /** @type {string} */ (currentSlugs?.[defaultLocale] ?? currentSlugs?._));\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 equal from 'fast-deep-equal';\n\nimport { 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 * EntryDraft,\n * FileChange,\n * FillTemplateOptions,\n * FlattenedEntryContent,\n * InternalEntryCollection,\n * } from '$lib/types/private';\n * @import { FieldKeyPath, I18nFileStructure } 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 * List of collection structures that use multiple folders for assets.\n * @type {I18nFileStructure[]}\n * @todo Remove the legacy `multiple_folders_i18n_root` structure prior to the 1.0 release.\n */\nconst MULTI_FOLDER_STRUCTURES = [\n  'multiple_folders',\n  'multiple_folders_i18n_root', // deprecated\n  'multiple_root_folders', // new name\n];\n\n/**\n * Regex to extract the folder path from an entry file path. For example, it extracts `blog/post`\n * from `blog/post.md` or `blog/post/index.md`.\n * @type {RegExp}\n */\nconst FOLDER_PATH_REGEX = /(?<path>.+?)(?:\\/[^/]+)?$/;\n\n/**\n * Fill a template string if it contains template tags, otherwise return as-is.\n * @param {string} pathString Path string that may contain template tags.\n * @param {FillTemplateOptions} fillSlugOptions Arguments for {@link fillTemplate}.\n * @returns {string} Resolved path.\n */\nconst fillTemplateIfNeeded = (pathString, fillSlugOptions) =>\n  pathString.includes('{{') ? fillTemplate(pathString, fillSlugOptions) : pathString;\n\n/**\n * Extract the entry folder path from an entry file path. Removes file extension and the filename\n * suffix for nested entries (e.g., `/index`, `/_index`, or any custom filename from the `path`\n * config).\n * @param {string} entryFilePath Entry file path, e.g., `src/content/blog/hello-world.md`.\n * @param {string | undefined} subPath Collection’s file subPath template, e.g., `{{slug}}/index`.\n * @returns {string} Entry folder path, e.g., `src/content/blog/hello-world`.\n * @example\n * // Simple files\n * getEntryFolderPath('src/content/blog/hello-world.md', '{{slug}}')\n * // => 'src/content/blog/hello-world'\n * @example\n * // Nested files with `index`\n * getEntryFolderPath('src/content/blog/hello-world/index.md', '{{slug}}/index')\n * // => 'src/content/blog/hello-world'\n * @example\n * // Nested files with `_index`\n * getEntryFolderPath('content/learn/my-slug/_index.md', '{{slug}}/_index')\n * // => 'content/learn/my-slug'\n */\nconst getEntryFolderPath = (entryFilePath, subPath) => {\n  // Remove file extension (always present)\n  const extensionIndex = entryFilePath.lastIndexOf('.');\n  let folderPath = entryFilePath.substring(0, extensionIndex);\n  // For nested entries where the path config has a fixed filename suffix (e.g., `{{slug}}/index` or\n  // `{{slug}}/_index`), strip that last segment to get the folder path. Paths like\n  // `{{year}}/{{month}}/{{slug}}` are not nested in this sense — the slug IS the last segment, so\n  // nothing is stripped.\n  const lastSubPathSegment = subPath?.includes('/') ? subPath.split('/').at(-1) : undefined;\n\n  if (lastSubPathSegment && !lastSubPathSegment.includes('{{')) {\n    folderPath = /** @type {string} */ (folderPath.match(FOLDER_PATH_REGEX)?.groups?.path);\n  }\n\n  return folderPath;\n};\n\n/**\n * Resolve the internal asset path for entry-relative assets.\n * @param {object} args Arguments.\n * @param {string} args.internalPath Internal path from folder config.\n * @param {string | undefined} args.internalSubPath Internal sub-path from folder config.\n * @param {string} args.entryFolderPath Resolved entry folder path.\n * @param {boolean} args.isMultiFolders Whether collection uses multi-folder i18n structure.\n * @param {boolean} args.isNestedEntry Whether entry uses nested file structure.\n * @param {FillTemplateOptions} args.fillSlugOptions Arguments for template filling.\n * @returns {string} Resolved internal path.\n */\nconst resolveInternalPath = ({\n  internalPath,\n  internalSubPath,\n  entryFolderPath,\n  isMultiFolders,\n  isNestedEntry,\n  fillSlugOptions,\n}) => {\n  // We already know the entry file path, so we can resolve the internal path to the asset folder\n  // even when it’s entry-relative. We should use entryFolderPath (extracted from entryFilePath)\n  // rather than reconstructing the path from templates, because when date-related template tags are\n  // used in subPath (e.g., `{{year}}-{{month}}-{{day}}-{{slug}}/index`), the resolved path would be\n  // different from the original entry path if we filled the template again. This would cause assets\n  // saved at a later date to be stored in a different folder than the entry itself. Instead, we use\n  // the already-resolved entryFolderPath which preserves the original date context. For nested\n  // entries or multi-folder structures, use entryFolderPath. For simple entries with single-file\n  // i18n or file collections, use internalPath (shared asset folder).\n  const shouldUseEntryFolderPath = isMultiFolders || isNestedEntry;\n\n  const internalPathString = createPath([\n    shouldUseEntryFolderPath ? entryFolderPath : internalPath,\n    internalSubPath, // subfolder, e.g. `images` or an empty string\n  ]);\n\n  return resolvePath(fillTemplateIfNeeded(internalPathString, fillSlugOptions));\n};\n\n/**\n * Resolve the public asset path for entry-relative assets.\n * @param {object} args Arguments.\n * @param {string} args.publicPath Public path from folder config.\n * @param {string} args.subPathFolderPath Extracted folder path from collection’s subPath.\n * @param {string | undefined} args.subPath Collection’s file subPath template.\n * @param {boolean} args.isMultiFolders Whether collection uses multi-folder i18n structure.\n * @param {FillTemplateOptions} args.fillSlugOptions Arguments for template filling.\n * @returns {string} Resolved public path.\n */\nconst resolvePublicPath = ({\n  publicPath,\n  subPathFolderPath,\n  subPath,\n  isMultiFolders,\n  fillSlugOptions,\n}) => {\n  // Dot-only public path is a special case; the final path stored as the field value will be\n  // `./image.png` rather than `image.png`\n  if (!isMultiFolders && /^\\.?$/.test(publicPath)) {\n    return publicPath;\n  }\n\n  const publicPathString = 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` and the asset\n      // path would be `{collection}/{slug}/{file}.jpg`\n      createPath([\n        ...Array((subPath?.match(/\\//g) ?? []).length + 1).fill('..'),\n        publicPath,\n        subPathFolderPath,\n      ])\n    : publicPath;\n\n  return resolvePath(fillTemplateIfNeeded(publicPathString, fillSlugOptions));\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, internalSubPath, 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, entryFilePath } = fillSlugOptions;\n  const isMultiFolders = MULTI_FOLDER_STRUCTURES.includes(collection._i18n.structure);\n\n  const subPath =\n    collection._type === 'entry'\n      ? /** @type {InternalEntryCollection} */ (collection)._file.subPath\n      : undefined;\n\n  const subPathFolderPath = subPath?.match(FOLDER_PATH_REGEX)?.groups?.path ?? '';\n  const entryFolderPath = getEntryFolderPath(entryFilePath ?? '', subPath);\n  const isNestedEntry = subPath?.includes('/') ?? false;\n\n  const resolvedInternalPath = resolveInternalPath({\n    internalPath,\n    internalSubPath,\n    entryFolderPath,\n    isMultiFolders,\n    isNestedEntry,\n    fillSlugOptions,\n  });\n\n  const resolvedPublicPath = resolvePublicPath({\n    publicPath,\n    subPathFolderPath,\n    subPath,\n    isMultiFolders,\n    fillSlugOptions,\n  });\n\n  return { resolvedInternalPath, resolvedPublicPath };\n};\n\n/**\n * Get the information required to save an asset.\n * @internal\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 */\nexport const 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 {boolean} args.replace Whether to replace an existing 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.encodingEnabled Whether the file path encoding is enabled.\n */\nexport const replaceBlobURL = async ({\n  file,\n  folder,\n  replace,\n  blobURL,\n  draft,\n  defaultLocaleSlug,\n  keyPath,\n  content,\n  changes,\n  savingAssets,\n  encodingEnabled,\n}) => {\n  const sha = await getGitHash(file);\n\n  const dupFile = savingAssets.find(\n    (f) => f.sha === sha && (!folder.entryRelative || equal(f.folder, folder)),\n  );\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, replace ? {} : { assetNamesInSameFolder });\n\n    const update = replace && assetNamesInSameFolder.includes(fileName);\n    const assetPath = resolvedInternalPath ? `${resolvedInternalPath}/${fileName}` : fileName;\n\n    if (!update) {\n      assetNamesInSameFolder.push(fileName);\n    }\n\n    changes.push({\n      action: update ? 'update' : 'create',\n      path: assetPath,\n      data: file,\n    });\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 { stringify as stringifyTOML } from 'smol-toml';\nimport { get } from 'svelte/store';\nimport { stringify as stringifyYAML } from 'yaml';\n\nimport { cmsConfig } from '$lib/services/config';\nimport { FRONTMATTER_FORMATS } from '$lib/services/contents/file';\nimport { customFileFormatRegistry } from '$lib/services/contents/file/config';\n\n/**\n * @import { FileConfig, InternalLocaleCode } from '$lib/types/private';\n * @import { JsonFormatOptions, RawEntryContent, 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(cmsConfig)?.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) => stringifyTOML(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(cmsConfig)?.output?.yaml ?? {},\n  legacyOptions = {},\n) => {\n  const { indent_size: indent = 2, indent_sequences: indentSeq = true, quote = 'none' } = options;\n  const { quote: legacyQuote = false } = legacyOptions;\n\n  return stringifyYAML(obj, null, {\n    indent,\n    indentSeq,\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 {\n    format,\n    fmDelimiters,\n    bodyField: { key: bodyKey = 'body', inline: bodyInline = false } = {},\n    yamlQuote = false,\n  } = _file;\n\n  const [sd, ed] = fmDelimiters ?? ['---', '---'];\n  let body = '';\n\n  if (!bodyInline && bodyKey in content) {\n    body = typeof content[bodyKey] === 'string' ? content[bodyKey] : '';\n    delete content[bodyKey];\n  }\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    let head = '';\n\n    if (format === 'frontmatter' || format === 'yaml-frontmatter') {\n      head = formatYAML(content, undefined, { quote: yamlQuote });\n    } else if (format === 'toml-frontmatter') {\n      head = formatTOML(content);\n    } else if (format === 'json-frontmatter') {\n      head = formatJSON(content);\n    } else {\n      return '';\n    }\n\n    return `${sd}\\n${head}\\n${ed}\\n${!bodyInline && body ? `\\n${body}\\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 = customFileFormatRegistry.get(format)?.formatter;\n\n  if (customFormatter) {\n    return `${(await customFormatter(content)).trim()}\\n`;\n  }\n\n  if (format === 'raw') {\n    return typeof content.body === 'string' ? `${content.body}\\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 (format === 'frontmatter' || FRONTMATTER_FORMATS.includes(/** @type {any} */ (format))) {\n    return formatFrontMatter({ content, _file });\n  }\n\n  return '';\n};\n","import { isObject } from '@sveltia/utils/object';\nimport { IndexedDB } from '@sveltia/utils/storage';\nimport { get } from 'svelte/store';\n\nimport { backend } from '$lib/services/backends';\nimport { saveChanges } from '$lib/services/backends/save';\nimport {\n  contentUpdatesToast,\n  UPDATE_TOAST_DEFAULT_STATE,\n} from '$lib/services/contents/collection/data';\nimport { getEntriesByCollection } from '$lib/services/contents/collection/entries';\nimport { getIndexFile } from '$lib/services/contents/collection/entries/index-file';\nimport { getPreviousSha } from '$lib/services/contents/draft/save/changes';\nimport { serializeContent } from '$lib/services/contents/draft/save/serialize';\nimport { formatEntryFile } from '$lib/services/contents/file/format';\n\n/**\n * @import { Entry, FileChange, InternalEntryCollection } from '$lib/types/private';\n */\n\n/**\n * The default field key used to store an entry’s display order when reordering is enabled and no\n * custom key is configured.\n * @type {string}\n */\nexport const DEFAULT_ORDER_FIELD_KEY = 'order';\n\n/**\n * Get the field key used to persist an entry’s display order for the given collection.\n * @param {any} collection Collection (typically an entry collection). Anything else returns\n * `undefined`.\n * @returns {string | undefined} Field key, or `undefined` if reordering is not enabled.\n */\nexport const getOrderFieldKey = (collection) => {\n  const reorder = collection?.reorder;\n\n  if (!reorder) {\n    return undefined;\n  }\n\n  if (isObject(reorder) && typeof reorder.key === 'string' && reorder.key) {\n    return reorder.key;\n  }\n\n  return DEFAULT_ORDER_FIELD_KEY;\n};\n\n/**\n * Sort entries by the collection’s `order` field. Entries lacking a valid numeric value are placed\n * at the end while preserving their relative input order.\n * @param {Entry[]} entries Entries to sort.\n * @param {InternalEntryCollection} collection Entry collection.\n * @returns {Entry[]} New, sorted array.\n */\nexport const sortEntriesByOrderField = (entries, collection) => {\n  const orderKey = getOrderFieldKey(collection);\n\n  if (!orderKey) {\n    return [...entries];\n  }\n\n  const { defaultLocale } = collection._i18n;\n\n  // Pre-compute each entry’s numeric order value once so the comparator — which runs O(N log N)\n  // times — only does a cheap numeric comparison rather than re-walking the property chain.\n  const keyed = entries.map((entry) => {\n    const v = Number(entry.locales[defaultLocale]?.content?.[orderKey]);\n\n    return { entry, v, has: Number.isFinite(v) };\n  });\n\n  keyed.sort((a, b) => {\n    if (a.has && b.has) return a.v - b.v;\n    if (a.has) return -1;\n    if (b.has) return 1;\n    return 0;\n  });\n\n  return keyed.map(({ entry }) => entry);\n};\n\n/**\n * Build a synthetic draft object suitable for {@link serializeContent}. The draft shape is\n * identical for every entry in a given collection during reorder, so callers should build it once\n * per batch and pass it down to avoid per-entry allocations.\n * @param {InternalEntryCollection} collection Entry collection.\n * @returns {any} Synthetic draft.\n */\nconst createSyntheticDraft = (collection) => ({\n  collection,\n  collectionName: collection.name,\n  collectionFile: undefined,\n  fields: collection.fields,\n  isIndexFile: false,\n});\n\n/**\n * Build the file content for a single-file entry, taking i18n single-file structures into account.\n * @param {object} args Arguments.\n * @param {InternalEntryCollection} args.collection Entry collection.\n * @param {Entry} args.entry Entry whose locales have already been updated with the new order.\n * @param {any} args.draft Synthetic draft shared across the batch.\n * @returns {Record<string, any>} Serializable content object passed to {@link formatEntryFile}.\n */\nconst buildSingleFileContent = ({ collection, entry, draft }) => {\n  const {\n    _i18n: { i18nEnabled, defaultLocale, structureMap: { i18nSingleFileDefaultRoot } = {} },\n  } = collection;\n\n  if (!i18nEnabled) {\n    return serializeContent({\n      draft,\n      locale: '_default',\n      valueMap: entry.locales[defaultLocale].content,\n    });\n  }\n\n  const localeContents = Object.fromEntries(\n    Object.entries(entry.locales)\n      .filter(([, le]) => !!le.content)\n      .map(([locale, le]) => [locale, serializeContent({ draft, locale, valueMap: le.content })]),\n  );\n\n  if (i18nSingleFileDefaultRoot) {\n    const { lang: _lang, ...defaultContent } = localeContents[defaultLocale] ?? {};\n\n    const nonDefaultContent = Object.fromEntries(\n      Object.entries(localeContents).filter(([locale]) => locale !== defaultLocale),\n    );\n\n    return {\n      lang: [defaultLocale, ...Object.keys(nonDefaultContent)],\n      ...defaultContent,\n      ...nonDefaultContent,\n    };\n  }\n\n  // `i18nSingleFile`: nested locale keys\n  return localeContents;\n};\n\n/**\n * Apply a new order value to all locales of an entry that have content. Locales without content are\n * passed through unchanged so that they can still be referenced (e.g. for paths) without adding an\n * `order` field to an empty content object.\n * @param {Entry} entry Source entry.\n * @param {string} orderKey Order field key.\n * @param {number} newOrder New order value.\n * @returns {Entry} Updated entry (the original entry is not mutated).\n */\nconst withUpdatedOrder = (entry, orderKey, newOrder) => {\n  /** @type {Entry['locales']} */\n  const updatedLocales = Object.fromEntries(\n    Object.entries(entry.locales).map(([locale, le]) => [\n      locale,\n      le.content ? { ...le, content: { ...le.content, [orderKey]: newOrder } } : { ...le },\n    ]),\n  );\n\n  return { ...entry, locales: updatedLocales };\n};\n\n/**\n * Build a single {@link FileChange} for an entry that lives in one file (no i18n, single-file i18n,\n * or default-root single-file i18n).\n * @param {object} args Arguments.\n * @param {InternalEntryCollection} args.collection Entry collection.\n * @param {Entry} args.entry Entry whose locales already have the new order applied.\n * @param {any} args.draft Synthetic draft shared across the batch.\n * @param {IndexedDB | undefined} args.cacheDB File cache database, when available.\n * @returns {Promise<FileChange>} Update change.\n */\nconst buildSingleFileChange = async ({ collection, entry, draft, cacheDB }) => {\n  const {\n    _file,\n    _i18n: { defaultLocale },\n  } = collection;\n\n  const { slug, path } = entry.locales[defaultLocale];\n\n  const [previousSha, data] = await Promise.all([\n    getPreviousSha({ cacheDB, previousPath: path }),\n    formatEntryFile({ content: buildSingleFileContent({ collection, entry, draft }), _file }),\n  ]);\n\n  return /** @type {FileChange} */ ({ action: 'update', slug, path, previousSha, data });\n};\n\n/**\n * Build per-locale {@link FileChange} entries for an entry that lives in one file per locale.\n * Locales without content are skipped.\n * @param {object} args Arguments.\n * @param {InternalEntryCollection} args.collection Entry collection.\n * @param {Entry} args.entry Entry whose locales already have the new order applied.\n * @param {any} args.draft Synthetic draft shared across the batch.\n * @param {IndexedDB | undefined} args.cacheDB File cache database, when available.\n * @returns {Promise<FileChange[]>} Update changes.\n */\nconst buildMultiFileChanges = async ({ collection, entry, draft, cacheDB }) => {\n  const {\n    _file,\n    _i18n: { allLocales },\n  } = collection;\n\n  const localeChanges = await Promise.all(\n    allLocales.map(async (locale) => {\n      const le = entry.locales[locale];\n\n      if (!le?.content) {\n        return undefined;\n      }\n\n      const [previousSha, data] = await Promise.all([\n        getPreviousSha({ cacheDB, previousPath: le.path }),\n        formatEntryFile({\n          content: serializeContent({ draft, locale, valueMap: le.content }),\n          _file,\n        }),\n      ]);\n\n      return /** @type {FileChange} */ ({\n        action: 'update',\n        slug: le.slug,\n        path: le.path,\n        previousSha,\n        data,\n      });\n    }),\n  );\n\n  return /** @type {FileChange[]} */ (localeChanges.filter(Boolean));\n};\n\n/**\n * Resolve a usable file-cache `IndexedDB` handle: prefer the caller-provided one (so the same\n * handle is shared across composite operations like delete + renumber), otherwise open one.\n * @param {IndexedDB} [provided] Caller-provided handle.\n * @returns {IndexedDB | undefined} Cache handle, or `undefined` if no backend is configured.\n */\nconst resolveCacheDB = (provided) => {\n  if (provided) {\n    return provided;\n  }\n\n  const databaseName = get(backend)?.repository?.databaseName;\n\n  return databaseName ? new IndexedDB(databaseName, 'file-cache') : undefined;\n};\n\n/**\n * Build the {@link FileChange}s needed to renumber the given entries with new 1-based order values.\n * Entries whose order field already matches the target value are skipped so no empty commits are\n * produced. The returned `savingEntries` are clones with the new order applied.\n * @param {InternalEntryCollection} collection Entry collection.\n * @param {Entry[]} orderedEntries Entries in the desired display order.\n * @param {object} [options] Options.\n * @param {IndexedDB} [options.cacheDB] Pre-opened file-cache database to reuse.\n * @returns {Promise<{ changes: FileChange[], savingEntries: Entry[] }>} Collected changes and the\n * entries to be saved.\n */\nconst buildReorderChanges = async (collection, orderedEntries, { cacheDB } = {}) => {\n  const orderKey = getOrderFieldKey(collection);\n\n  if (!orderKey) {\n    return { changes: [], savingEntries: [] };\n  }\n\n  const {\n    _i18n: {\n      i18nEnabled,\n      defaultLocale,\n      structureMap: { i18nSingleFile, i18nSingleFileDefaultRoot } = {},\n    },\n  } = collection;\n\n  const isSingleFile = !i18nEnabled || i18nSingleFile || i18nSingleFileDefaultRoot;\n  const db = resolveCacheDB(cacheDB);\n  const savingEntries = [];\n\n  // Single pass: skip entries whose order already matches the target value (so unchanged entries\n  // don’t trigger a normalize-only commit) and re-tag the rest with the new 1-based order. The\n  // existing value is coerced to a number so that a string-typed `order` (e.g. `\"5\"`) is treated as\n  // already-correct when it matches the new numeric order.\n  // eslint-disable-next-line no-restricted-syntax\n  for (const [index, entry] of orderedEntries.entries()) {\n    const newOrder = index + 1;\n\n    if (Number(entry.locales[defaultLocale]?.content?.[orderKey]) !== newOrder) {\n      savingEntries.push(withUpdatedOrder(entry, orderKey, newOrder));\n    }\n  }\n\n  // Build the synthetic draft once for the whole batch — its shape is identical across entries.\n  const draft = createSyntheticDraft(collection);\n\n  // Build file changes in parallel\n  const perEntryChanges = await Promise.all(\n    savingEntries.map((entry) =>\n      isSingleFile\n        ? buildSingleFileChange({ collection, entry, draft, cacheDB: db }).then((change) => [\n            change,\n          ])\n        : buildMultiFileChanges({ collection, entry, draft, cacheDB: db }),\n    ),\n  );\n\n  return { changes: perEntryChanges.flat(), savingEntries };\n};\n\n/**\n * Re-save entries in the given collection with updated order values. Entries whose order field\n * value is unchanged are skipped to avoid unnecessary commits. Files are written using the\n * collection’s configured format and i18n structure.\n * @param {InternalEntryCollection} collection Entry collection.\n * @param {Entry[]} orderedEntries Entries in the desired display order. The new order value\n * assigned to each entry is its 1-based index in this list.\n * @param {object} [options] Options.\n * @param {boolean} [options.silent] When `true`, do not update the {@link contentUpdatesToast}\n * store. Useful for follow-up renumbering done as part of another operation (e.g. delete).\n * @returns {Promise<number>} Number of entries actually updated.\n */\nexport const reorderEntries = async (collection, orderedEntries, { silent = false } = {}) => {\n  const { changes, savingEntries } = await buildReorderChanges(collection, orderedEntries);\n\n  if (!changes.length) {\n    return 0;\n  }\n\n  await saveChanges({\n    changes,\n    savingEntries,\n    options: { commitType: 'update', collection },\n  });\n\n  if (!silent) {\n    contentUpdatesToast.set({\n      ...UPDATE_TOAST_DEFAULT_STATE,\n      saved: true,\n      count: savingEntries.length,\n    });\n  }\n\n  return savingEntries.length;\n};\n\n/**\n * Compute the renumbered list of remaining entries for the given collection, in the order their\n * `order` field should be persisted. Entries currently lacking a valid numeric order are placed at\n * the end. The collection’s index file (if any) is excluded.\n * @param {InternalEntryCollection} collection Entry collection.\n * @param {object} [options] Options.\n * @param {Set<string>} [options.excludeIds] IDs of entries to omit (e.g. entries about to be\n * deleted). The collection’s current entries are read from {@link getEntriesByCollection}.\n * @returns {Entry[]} Entries in the desired display order, with the index file removed.\n */\nconst computeRenumberedEntries = (collection, { excludeIds } = {}) => {\n  const indexFileName = getIndexFile(collection)?.name;\n\n  // The index file (e.g. Hugo `_index.md`) is always pinned to the top of the list by the sort\n  // pipeline regardless of its `order` value, so it should never participate in numbering.\n  const remaining = getEntriesByCollection(collection.name).filter(\n    (entry) => entry.slug !== indexFileName && !(excludeIds && excludeIds.has(entry.id)),\n  );\n\n  return sortEntriesByOrderField(remaining, collection);\n};\n\n/**\n * Build the renumber {@link FileChange}s for a collection without saving them. Useful when the\n * caller wants to bundle the renumber into another commit (e.g. delete).\n * @param {InternalEntryCollection | undefined} collection Entry collection.\n * @param {object} [options] Options.\n * @param {Set<string>} [options.excludeIds] IDs of entries to omit (e.g. entries about to be\n * deleted).\n * @param {IndexedDB} [options.cacheDB] Pre-opened file-cache database to reuse.\n * @returns {Promise<{ changes: FileChange[], savingEntries: Entry[] }>} Collected changes and the\n * entries to be saved. Empty when reordering is not enabled or nothing changed.\n */\nexport const buildRenumberChanges = async (collection, { excludeIds, cacheDB } = {}) => {\n  if (!collection || collection._type !== 'entry' || !getOrderFieldKey(collection)) {\n    return { changes: [], savingEntries: [] };\n  }\n\n  return buildReorderChanges(collection, computeRenumberedEntries(collection, { excludeIds }), {\n    cacheDB,\n  });\n};\n\n/**\n * Renumber the remaining entries in a collection after one or more entries have been deleted, so\n * that the order field stays compact (1, 2, 3, …). Entries currently lacking a valid numeric order\n * are placed at the end. Does nothing if the collection does not have reordering enabled.\n * @param {InternalEntryCollection | undefined} collection Entry collection.\n * @returns {Promise<number>} Number of entries actually updated.\n */\nexport const renumberCollectionEntries = async (collection) => {\n  if (!collection || collection._type !== 'entry' || !getOrderFieldKey(collection)) {\n    return 0;\n  }\n\n  return reorderEntries(collection, computeRenumberedEntries(collection), { silent: true });\n};\n","import equal from 'fast-deep-equal';\nimport { derived, writable } from 'svelte/store';\n\nimport { prefs } from '$lib/services/user/prefs.svelte';\n\n/**\n * Regex to match internal properties added to list items, which should be excluded from output.\n */\nexport const INTERNAL_PROP_REGEX = /\\.__sc_\\w+$/;\n\n/**\n * @import { Readable, Writable } from 'svelte/store';\n * @import { EntryDraft, FlattenedEntryContent } from '$lib/types/private';\n */\n\n/**\n * @type {Writable<EntryDraft | null | undefined>}\n */\nexport const entryDraft = writable();\n\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 user has manually interacted with the entry editor. This prevents auto-backup from\n * triggering when only programmatic changes (e.g. Lexical markdown reformatting) have occurred.\n */\nexport const entryDraftInteracted = writable(false);\n\n/**\n * Filter out internal properties from a value map.\n * @param {FlattenedEntryContent} valueMap The value map to filter.\n * @returns {FlattenedEntryContent} The filtered value map.\n */\nexport const filterRealValues = (valueMap) =>\n  Object.fromEntries(Object.entries(valueMap).filter(([key]) => !INTERNAL_PROP_REGEX.test(key)));\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  // Exclude internal properties from the value comparison\n  const currentRealValues = Object.fromEntries(\n    Object.entries(currentValues).map(([locale, valueMap]) => [locale, filterRealValues(valueMap)]),\n  );\n\n  return (\n    !equal(originalLocales, currentLocales) ||\n    !equal(originalSlugs, currentSlugs) ||\n    !equal(originalValues, currentRealValues)\n  );\n});\n\nentryDraft.subscribe((draft) => {\n  if (prefs.devModeEnabled) {\n    // eslint-disable-next-line no-console\n    console.info('entryDraft', draft);\n  }\n});\n","import { isFieldMultiple } from '$lib/services/contents/entry/fields';\nimport { MULTI_VALUE_FIELD_TYPES } from '$lib/services/contents/fields';\n\n/**\n * @import {\n * Field,\n * FieldKeyPath,\n * FieldWithSubFields,\n * FieldWithTypes,\n * ListFieldWithSubField,\n * } from '$lib/types/public';\n */\n\n/**\n * Parse a field to generate a sorted key path list.\n * @internal\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 */\nexport const parseField = ({ field, keyPath, keyPathList }) => {\n  const { widget: fieldType } = field;\n  const isList = fieldType === 'list';\n\n  keyPathList.push(keyPath);\n\n  if (isList || fieldType === 'object') {\n    const { fields: subFields } = /** @type {FieldWithSubFields} */ (field);\n    const { types, typeKey = 'type' } = /** @type {FieldWithTypes} */ (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 {ListFieldWithSubField} */ (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  } else if (fieldType && MULTI_VALUE_FIELD_TYPES.includes(fieldType) && isFieldMultiple(field)) {\n    // Only add wildcard path for multi-value field types that aren’t list/object\n    keyPathList.push(`${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 { cmsConfig } from '$lib/services/config';\nimport { getOrderFieldKey } from '$lib/services/contents/collection/entries/reorder';\nimport { INTERNAL_PROP_REGEX } from '$lib/services/contents/draft';\nimport { createKeyPathList } from '$lib/services/contents/draft/save/key-path';\nimport { getField, hasRootField, isFieldRequired } from '$lib/services/contents/entry/fields';\nimport { parseDateTimeConfig } from '$lib/services/contents/fields/date-time/config';\nimport { TOML_FORMATS } from '$lib/services/contents/file';\nimport { getOrCreate } from '$lib/services/utils/cache';\n\n/**\n * @import {\n * EntryDraft,\n * FlattenedEntryContent,\n * InternalEntryCollection,\n * InternalLocaleCode,\n * } from '$lib/types/private';\n * @import { DateTimeField, Field, RawEntryContent } from '$lib/types/public';\n */\n\n/**\n * Cache of wildcard key-path regexes used in {@link finalizeContent}, keyed by `keyPath`.\n * @type {Map<string, RegExp>}\n */\nconst wildcardKeyPathRegexCache = new Map();\n\n/**\n * Check whether a value is empty, such as `undefined`, `null`, an empty string, an empty array, or\n * an empty object.\n * @param {any} value Value to check.\n * @returns {boolean} Whether the value is empty.\n */\nexport const isValueEmpty = (value) =>\n  // Don’t use `!value` as `false` and `0` are valid values\n  value === undefined ||\n  value === null ||\n  value === '' ||\n  (Array.isArray(value) && !value.length) ||\n  (isObject(value) && !Object.keys(value).length);\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 properties added to list items\n  if (INTERNAL_PROP_REGEX.test(key)) {\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    field?.widget === 'datetime' &&\n    !parseDateTimeConfig(/** @type {DateTimeField} */ (field)).format\n  ) {\n    const tomlDate = new TomlDate(value);\n\n    // Ignore invalid dates to prevent serialization errors. This occurs when the field is optional\n    // and no value is provided, such as an empty string. In such cases, save nothing. We cannot\n    // save `null` because TOML doesn’t support it, and an empty string may not be the expected\n    // value for a date field.\n    value = tomlDate.isValid() ? tomlDate : undefined;\n  }\n\n  if (\n    omitEmptyOptionalFields &&\n    field &&\n    !isFieldRequired({ fieldConfig: field, locale }) &&\n    isValueEmpty(value)\n  ) {\n    const childKeys = Object.keys(unsortedMap).filter((_key) => _key.startsWith(`${key}.`));\n\n    if (\n      childKeys.some((_key) => !INTERNAL_PROP_REGEX.test(_key) && !isValueEmpty(unsortedMap[_key]))\n    ) {\n      // Preserve the parent because it has non-empty children\n      sortedMap[key] = value;\n    } else {\n      // Omit the empty value and remove any empty children so they are not processed later\n      childKeys.forEach((_key) => {\n        delete unsortedMap[_key];\n      });\n    }\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 {string} [args.orderKey] Property name of the entry order field. Placed right after the\n * canonical slug, ahead of all configured fields, when present in the value map.\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  orderKey,\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(cmsConfig)?.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  // Add the order field next so it appears at the top of the output\n  if (orderKey && orderKey in unsortedMap) {\n    copyProperty({ ...copyArgs, key: orderKey });\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 = getOrCreate(\n        wildcardKeyPathRegexCache,\n        keyPath,\n        () =>\n          new RegExp(\n            `^${escapeRegExp(keyPath.replaceAll('*', '\\\\d+')).replaceAll('\\\\\\\\d\\\\+', '\\\\d+')}$`,\n          ),\n      );\n\n      Object.keys(unsortedMap)\n        .filter((_keyPath) => regex.test(_keyPath))\n        .sort(([a, b]) => compare(a, b))\n        .forEach((_keyPath) => {\n          // When the wildcard path couldn’t resolve a typed list field, resolve with the concrete\n          // key path so that field metadata (e.g. `required`) is available to `copyProperty`\n          const resolvedField = field ?? getField({ ...getFieldArgs, keyPath: _keyPath });\n\n          copyProperty({ ...copyArgs, key: _keyPath, field: resolvedField });\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 {InternalEntryCollection} */ (collection);\n\n  const isTomlOutput = TOML_FORMATS.includes(_file.format);\n\n  const content = finalizeContent({\n    collectionName,\n    fileName: collectionFile?.name,\n    fields,\n    locale,\n    valueMap,\n    canonicalSlugKey,\n    orderKey: getOrderFieldKey(collection),\n    isIndexFile,\n    isTomlOutput,\n  });\n\n  // Handle a special case: top-level List field. TOML doesn’t support top-level arrays, so we\n  // ignore the `root` option for such cases.\n  if (!isTomlOutput && hasRootField(fields, 'list')) {\n    return content[fields[0].name] ?? [];\n  }\n\n  // Handle a special case: top-level KeyValue field\n  if (hasRootField(fields, 'keyvalue')) {\n    return content[fields[0].name] ?? {};\n  }\n\n  return content;\n};\n","import { 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 { cmsConfig } from '$lib/services/config';\nimport { callEventHooks } from '$lib/services/contents/draft/events';\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 { getField } from '$lib/services/contents/entry/fields';\nimport { formatEntryFile } from '$lib/services/contents/file/format';\n\n/**\n * @import {\n * Asset,\n * Entry,\n * EntryDraft,\n * EntrySlugVariants,\n * FileChange,\n * GetFieldArgs,\n * InternalEntryCollection,\n * InternalLocaleCode,\n * LocalizedEntryMap,\n * RepositoryFileInfo,\n * } from '$lib/types/private';\n */\n\n/**\n * Create base saving entry data.\n * @internal\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 */\nexport const createBaseSavingEntryData = async ({\n  draft,\n  slugs: { defaultLocaleSlug, canonicalSlug, localizedSlugs },\n}) => {\n  const _globalAssetFolder = get(globalAssetFolder);\n\n  const {\n    collection,\n    collectionName,\n    collectionFile,\n    fileName,\n    isIndexFile,\n    currentLocales,\n    currentValues,\n    files,\n  } = 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 { encode_file_path: encodingEnabled = false } = get(cmsConfig)?.output ?? {};\n  /** @type {GetFieldArgs} */\n  const getFieldArgs = { collectionName, fileName, keyPath: '', valueMap: {}, isIndexFile };\n  const replaceBlobBaseArgs = { draft, defaultLocaleSlug, changes, savingAssets };\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 only when it’s defined; if it’s undefined (e.g. the slug template\n        // has no `| localize` filter), skip the assignment to avoid wiping a user-defined field\n        // that happens to share the same key (e.g. `translationKey`).\n        if (canonicalSlug !== undefined) {\n          content[canonicalSlugKey] = canonicalSlug;\n        }\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 field = getField({ ...getFieldArgs, valueMap: content, keyPath });\n\n            const replaceBlobArgs = {\n              ...replaceBlobBaseArgs,\n              keyPath,\n              content,\n              // Enable encoding for markdown fields to support embedded images\n              encodingEnabled:\n                field?.widget === 'richtext' || field?.widget === 'markdown'\n                  ? true\n                  : encodingEnabled,\n            };\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, replace } = files[blobURL] ?? {};\n\n                if (file) {\n                  await replaceBlobURL({ ...replaceBlobArgs, file, folder, replace, 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 * @internal\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 */\nexport const 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 * @internal\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 */\nexport const getSingleFileChange = async ({ draft, savingEntry, cacheDB }) => {\n  const { collection, isNew, originalSlugs, originalEntry, collectionFile } = draft;\n\n  const {\n    _file,\n    _i18n: { i18nEnabled, defaultLocale, structureMap: { i18nSingleFileDefaultRoot } = {} },\n  } = collectionFile ?? /** @type {InternalEntryCollection} */ (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  /**\n   * Build the serialized content for the file. For `single_file_default_root`, the default locale’s\n   * fields are written at the root level and non-default locales are nested under their locale key.\n   * @returns {object} Serialized content object.\n   */\n  const buildFileContent = () => {\n    if (!i18nEnabled) {\n      return serializeContent({ draft, locale: '_default', valueMap: content });\n    }\n\n    const localeContents = Object.fromEntries(\n      Object.entries(savingEntry.locales)\n        .filter(([, le]) => !!le.content)\n        .map(([locale, le]) => [locale, serializeContent({ draft, locale, valueMap: le.content })]),\n    );\n\n    if (i18nSingleFileDefaultRoot) {\n      // Remove `lang` from default content to avoid stale/duplicate values; it’s always\n      // auto-generated from the configured locales.\n      const { lang: _lang, ...defaultContent } = localeContents[defaultLocale] ?? {};\n\n      const nonDefaultContent = Object.fromEntries(\n        Object.entries(localeContents).filter(([locale]) => locale !== defaultLocale),\n      );\n\n      return {\n        // Add `lang` field at the root level as per Lume’s convention for single-file i18n\n        // @see https://lume.land/plugins/multilanguage/#multilanguage-pages-from-a-single-file\n        lang: [defaultLocale, ...Object.keys(nonDefaultContent)],\n        ...defaultContent,\n        ...nonDefaultContent,\n      };\n    }\n\n    return localeContents;\n  };\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: buildFileContent(),\n      _file,\n    }),\n  };\n};\n\n/**\n * Get file change information for the entry draft, specifically for a multi-file entry.\n * @internal\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 */\nexport const 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 {InternalEntryCollection} */ (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 { id, collection, collectionFile } = draft;\n  const { defaultLocaleSlug } = slugs;\n\n  const {\n    _file,\n    _i18n: {\n      i18nEnabled,\n      allLocales,\n      defaultLocale,\n      structureMap: { i18nSingleFile, i18nSingleFileDefaultRoot },\n    },\n  } = collectionFile ?? /** @type {InternalEntryCollection} */ (collection);\n\n  const { localizedEntryMap, changes, savingAssets } = await createBaseSavingEntryData({\n    draft,\n    slugs,\n  });\n\n  /** @type {Entry} */\n  const savingEntry = {\n    id,\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  await callEventHooks({ type: 'preSave', draft, savingEntry });\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 || i18nSingleFileDefaultRoot) {\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 { focusedAsset, getAssetByInternalPath, 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 { UPDATE_TOAST_DEFAULT_STATE } from '$lib/services/contents/collection/data';\nimport { getEntriesByAssetURL } from '$lib/services/contents/collection/entries';\nimport {\n  getIndexFile,\n  isCollectionIndexFile,\n} from '$lib/services/contents/collection/entries/index-file';\nimport { getCollectionFilesByEntry } from '$lib/services/contents/collection/files';\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 * InternalEntryCollection,\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 * @internal\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  const localeEntries = Object.entries(locales);\n  const originalLocales = Object.fromEntries(localeEntries.map(([locale]) => [locale, true]));\n\n  const originalSlugs = Object.fromEntries(\n    localeEntries.map(([locale, { slug }]) => [locale, slug]),\n  );\n\n  const originalValues = Object.fromEntries(\n    localeEntries.map(([locale, { content }]) => [locale, content]),\n  );\n\n  return {\n    createdAt: Date.now(),\n    isNew: false,\n    canPreview: true,\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    validationMessages: {},\n    expanderStates: {},\n  };\n};\n\n/**\n * Add saving entry data to the stack.\n * @internal\n * @param {object} args Arguments.\n * @param {Partial<EntryDraft>} 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\n  const { fields: regularFields = [] } =\n    collectionFile ?? /** @type {InternalEntryCollection} */ (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 * @internal\n * @param {object} args Arguments.\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 ({ entry, savingEntries, changes }) => {\n  const draftBaseProps = getDraftBaseProps({ entry });\n\n  await Promise.all(\n    getAssociatedCollections(entry).map(async (collection) => {\n      const collectionName = collection.name;\n      const isIndexFile = isCollectionIndexFile(collection, entry);\n      const indexFile = isIndexFile ? getIndexFile(collection) : undefined;\n      const collectionFiles = getCollectionFilesByEntry(collection, entry);\n      const addDataProps = { indexFile, savingEntries, changes };\n      /** @type {Partial<EntryDraft>} */\n      const draftProps = { ...draftBaseProps, collection, collectionName, isIndexFile };\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 * @internal\n * @param {object} args Arguments.\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  _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) => collectEntryChanges({ entry, savingEntries, changes })),\n  );\n};\n\n/**\n * Update the asset and entry stores after moving or renaming assets.\n * @internal\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 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(getAssetByInternalPath(_focusedAsset.path));\n  }\n\n  // Replace the existing asset\n  if (_overlaidAsset) {\n    overlaidAsset.set(getAssetByInternalPath(_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 _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        _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 { _ } from '@sveltia/i18n';\n  import { Dialog, TextInput } from '@sveltia/ui';\n  import { getPathInfo } from '@sveltia/utils/file';\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 { getAssetUsedEntries } from '$lib/services/assets/details';\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 getAssetUsedEntries(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    {_('enter_new_name_for_asset', { values: { count: usedEntries.length } })}\n  </p>\n  <div role=\"none\">\n    <TextInput\n      dir=\"auto\"\n      bind:value={newName}\n      flex\n      {invalid}\n      aria-errormessage=\"{componentId}-error\"\n    />\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>\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, selectedAssetPathSet, selectedAssets } from '$lib/services/assets';\n  import { canPreviewAsset } from '$lib/services/assets/kinds';\n  import { listedAssets } from '$lib/services/assets/view';\n  import { env } from '$lib/services/user/env.svelte';\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 (\n      (env.isSmallScreen || env.isMediumScreen) &&\n      $focusedAsset &&\n      canPreviewAsset($focusedAsset)\n    ) {\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 !(env.isSmallScreen || env.isMediumScreen)}\n    <GridCell class=\"checkbox\">\n      <Checkbox\n        role=\"none\"\n        tabindex=\"-1\"\n        checked={$selectedAssetPathSet.has(asset.path)}\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={env.isSmallScreen}\n      checkerboard={kind === 'image'}\n    />\n  </GridCell>\n  {#if !env.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>\n  .label {\n    word-break: break-all;\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 { _, locale as appLocale } from '@sveltia/i18n';\n  import { Button, Icon, TruncatedText } from '@sveltia/ui';\n  import { getPathInfo } from '@sveltia/utils/file';\n  import { sleep } from '@sveltia/utils/misc';\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 (`${file.name}-${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.current}\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>\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: start;\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 { _, locale as appLocale } from '@sveltia/i18n';\n  import { AlertDialog, Button, FilePicker, Icon } from '@sveltia/ui';\n  import { scanFiles } from '@sveltia/utils/file';\n  import { onMount } from 'svelte';\n\n  import UploadAssetsPreview from '$lib/components/assets/shared/upload-assets-preview.svelte';\n  import { getListFormatter } from '$lib/services/contents/i18n';\n  import { env } from '$lib/services/user/env.svelte';\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    // Prevent an infinite loop\n    if (!files.length) {\n      return;\n    }\n\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  /**\n   * Handler for custom `Select` events dispatched by the drop target.\n   * @param {Event} event Event.\n   */\n  const onSelect = (event) => {\n    onDrop?.({ files: /** @type {CustomEvent} */ (event).detail.files });\n  };\n\n  onMount(() => {\n    dropTarget?.addEventListener('Select', onSelect);\n\n    return () => {\n      dropTarget?.removeEventListener('Select', onSelect);\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(appLocale.current, {\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 env.hasMouse}\n            {_('drop_files_or_click_to_browse', { values: { count: multiple ? 2 : 1 } })}\n          {:else}\n            {_('tap_to_browse')}\n          {/if}\n        </div>\n        <div role=\"none\">\n          <Button\n            variant=\"primary\"\n            label={_('choose_files', { values: { count: multiple ? 2 : 1 } })}\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\">{_('drop_files_here', { values: { count: multiple ? 2 : 1 } })}</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>\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 { _ } from '@sveltia/i18n';\n  import { Button, Icon } from '@sveltia/ui';\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>\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>\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: start;\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-block-start: 4px;\n          inset-inline-start: 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-inline-start: 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-inline-start: 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 { _ } from '@sveltia/i18n';\n  import { EmptyState, GridBody, InfiniteScroll } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\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<'contents' | 'assets' | null>}\n */\nexport const searchMode = writable(null);\n\n/**\n * @type {Writable<string>}\n */\nexport const searchTerms = writable('');\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { SearchBar } from '@sveltia/ui';\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      debounce\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      onClear={() => {\n        navigate('');\n      }}\n    />\n  {/if}\n</div>\n\n<style>\n  .wrapper {\n    display: contents;\n    --sui-textbox-border-width: 0;\n  }\n</style>\n","<script>\n  import { _, locale as appLocale } from '@sveltia/i18n';\n  import { Divider, Icon, Listbox, Option, OptionGroup } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import equal from 'fast-deep-equal';\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 { env } from '$lib/services/user/env.svelte';\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} [isSearchPage] Whether the current page is the search results page.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    isSearchPage = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const numberFormatter = $derived(Intl.NumberFormat(appLocale.current));\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      .filter(\n        ({ typedKeyPath, isAssetCollection }) =>\n          !isAssetCollection &&\n          // Exclude field-level folders\n          typedKeyPath === undefined,\n      )\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    // All asset collection folders, sorted by appearance order in the config\n    ...$allAssetFolders.filter(({ isAssetCollection }) => isAssetCollection),\n  ]);\n\n  /**\n   * Whether to show a divider after the folder at the given index.\n   * @param {number} index Index of the folder to check.\n   * @returns {boolean} Whether to show a divider after the folder at the given index.\n   */\n  const shouldShowDivider = (index) =>\n    (folders[index].collectionName === undefined &&\n      folders[index + 1]?.collectionName !== undefined) ||\n    (!folders[index].isAssetCollection && !!folders[index + 1]?.isAssetCollection);\n</script>\n\n<div role=\"none\" class=\"primary-sidebar\">\n  {#if env.isSmallScreen}\n    <header>\n      <h2>{_('assets')}</h2>\n    </header>\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, index ([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={env.isSmallScreen || isSearchPage ? false : selected}\n            label={appLocale.current ? 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={folder.icon || 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 class=\"count\" aria-label=\"({_('x_assets', { values: { count } })})\">\n                    {numberFormatter.format(count)}\n                  </span>\n                {/await}\n              {/key}\n            {/snippet}\n          </Option>\n        {/await}\n        {#if shouldShowDivider(index)}\n          <Divider />\n        {/if}\n      {/each}\n    </OptionGroup>\n    <!-- @todo Add external locations, including Cloudinary and Uploadcare -->\n  </Listbox>\n</div>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Button } from '@sveltia/ui';\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 { _, locale as appLocale } from '@sveltia/i18n';\n  import { FloatingActionButtonWrapper, Toolbar } from '@sveltia/ui';\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 { env } from '$lib/services/user/env.svelte';\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 env.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.current}\n      {$selectedAssetFolder ? getFolderLabelByCollection($selectedAssetFolder) : ''}\n    {/key}\n    {#if !env.isSmallScreen && $selectedAssetFolder?.internalPath !== undefined}\n      <span role=\"none\">/{$selectedAssetFolder.internalPath}</span>\n    {/if}\n  </h2>\n  {#if !(env.isSmallScreen || env.isMediumScreen)}\n    <PreviewAssetButton asset={$focusedAsset} />\n    <CopyAssetsButton assets={$focusedAsset ? [$focusedAsset] : []} />\n    <DownloadAssetsButton {assets} />\n    <DeleteAssetsButton\n      {assets}\n      buttonDescription={_('delete_selected_assets', { values: { count: assets.length } })}\n      dialogDescription={_(\n        assets.length > 1 && 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 !env.isSmallScreen || ($listedAssets.length && !uploadDisabled)}\n      <UploadAssetsButton label={env.isSmallScreen ? undefined : _('upload')} />\n    {/if}\n  </FloatingActionButtonWrapper>\n</Toolbar>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { EmptyState, Group } from '@sveltia/ui';\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 { env } from '$lib/services/user/env.svelte';\n</script>\n\n{#if env.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 { _ } from '@sveltia/i18n';\n  import { Menu, MenuButton, MenuItemCheckbox, MenuItemRadio } from '@sveltia/ui';\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 filter (`${filter.field}|${String(filter.pattern)}`)}\n          {@const { label: _label, field, pattern } = filter}\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 filter (`${filter.field}|${String(filter.pattern)}`)}\n          {@const { label: _label, field, pattern } = filter}\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 { _ } from '@sveltia/i18n';\n  import { Checkbox } from '@sveltia/ui';\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>\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","export default {\"collections\":\"Collections\",\"contents\":\"Contents\",\"entries\":\"Entries\",\"files\":\"Files\",\"assets\":\"Assets\",\"media\":\"Media\",\"workflow\":\"Workflow\",\"editorial_workflow\":\"Editorial Workflow\",\"menu\":\"Menu\",\"user_name\":\"User Name\",\"password\":\"Password\",\"sign_in\":\"Sign In\",\"sign_in_with_mobile\":\"Sign In with Mobile\",\"sign_in_with_mobile_instruction\":\"Scan the QR code below with your phone or tablet for passwordless sign-in. Your settings will be automatically copied.\",\"signed_in_as_x\":\"Signed In as {$name}\",\"working_with_local_repo\":\"Working with Local Repository\",\"working_with_test_repo\":\"Working with Test Repository\",\"sign_out\":\"Sign Out\",\"create\":\"New\",\"select\":\"Select\",\"select_all\":\"Select All\",\"upload\":\"Upload\",\"copy\":\"Copy\",\"download\":\"Download\",\"duplicate\":\"Duplicate\",\"delete\":\"Delete\",\"reorder\":\"Reorder\",\"cancel\":\"Cancel\",\"done\":\"Done\",\"save\":\"Save\",\"saving\":\"Saving…\",\"publish\":\"Publish\",\"publishing\":\"Publishing…\",\"rename\":\"Rename\",\"update\":\"Update\",\"replace\":\"Replace\",\"add\":\"Add\",\"remove\":\"Remove\",\"remove_x\":\"Remove {$name}\",\"clear\":\"Clear\",\"expand\":\"Expand\",\"expand_all\":\"Expand All\",\"collapse\":\"Collapse\",\"collapse_all\":\"Collapse All\",\"insert\":\"Insert\",\"restore\":\"Restore\",\"discard\":\"Discard\",\"searching\":\"Searching…\",\"no_results\":\"No results found.\",\"global\":\"Global\",\"primary\":\"Primary\",\"secondary\":\"Secondary\",\"collection\":\"Collection\",\"folder\":\"Folder\",\"api_key\":\"API Key\",\"details\":\"Details\",\"back\":\"Back\",\"loading\":\"Loading…\",\"later\":\"Later\",\"slug\":\"Slug\",\"singleton\":\"Singleton\",\"singletons\":\"Singletons\",\"clipboard_error\":\"There was an error while copying data.\",\"welcome_message\":\"Welcome to {$name}\",\"powered_by\":\"Powered by {$name}\",\"loading_cms_config\":\"Loading CMS Configuration…\",\"loading_site_data\":\"Loading Site Data…\",\"loading_site_data_error\":\"There was an error while loading site data.\",\"sign_in_with_x\":\"Sign In with {$service}\",\"sign_in_using_access_token\":\"Sign In Using Access Token\",\"sign_in_using_access_token_description\":\"Enter your token below. It must have read/write access to the repository content.\",\"sign_in_using_access_token_link\":\"You can generate a token on the <a>{$service} user settings page</a>.\",\"personal_access_token\":\"Personal Access Token\",\"authorizing\":\"Authorizing…\",\"signing_in\":\"Signing in…\",\"work_with_local_repo\":\"Work with Local Repository\",\"work_with_local_repo_description\":\"Once prompted, select the root directory of the “{$repo}” repository.\",\"work_with_local_repo_description_no_repo\":\"Once prompted, select the root directory of your Git repository.\",\"work_with_test_repo\":\"Work with Test Repository\",\"sign_in_error\":{\"not_project_root\":\"The folder you have selected is not a repository root directory. Please try again.\",\"picker_dismissed\":\"A repository root directory could not be selected. Please try again.\",\"authentication_aborted\":\"Authentication aborted. Please try again.\",\"invalid_token\":\"The provided token is invalid. Please check and try again.\",\"UNSUPPORTED_BACKEND\":\"Your Git backend is not supported by the authenticator.\",\"UNSUPPORTED_DOMAIN\":\"Your domain is not allowed to use the authenticator.\",\"MISCONFIGURED_CLIENT\":\"OAuth app client ID or secret is not configured.\",\"AUTH_CODE_REQUEST_FAILED\":\"Failed to receive an authorization code. Please try again later.\",\"CSRF_DETECTED\":\"Potential CSRF attack detected. Authentication flow aborted.\",\"TOKEN_REQUEST_FAILED\":\"Failed to request an access token. Please try again later.\",\"TOKEN_REFRESH_FAILED\":\"Failed to refresh the access token. Please try again later.\",\"MALFORMED_RESPONSE\":\"Server responded with malformed data. Please try again later.\"},\"backend_unsupported_version\":\"The {$name} backend requires {$name} {$version} or later.\",\"repository_no_access\":\"You don’t have access to the “{$repo}” repository.\",\"repository_not_found\":\"The “{$repo}” repository doesn’t exist.\",\"repository_empty\":\"The “{$repo}” repository has no branches.\",\"branch_not_found\":\"The “{$repo}” repository doesn’t have the “{$branch}” branch.\",\"unexpected_error\":\"Unexpected Error\",\"entry_parse_errors\":\".input {$count :integer} .match $count one {{There was an error while parsing an entry file. Check the browser console for details.}} * {{There were errors while parsing entry files. Check the browser console for details.}}\",\"mobile_promo_title\":\"Sveltia CMS is now available on mobile!\",\"mobile_promo_button\":\"Give it a try\",\"visit_live_site\":\"Visit Live Site\",\"switch_page\":\"Switch Page\",\"search_placeholder_contents\":\"Search for contents…\",\"search_placeholder_assets\":\"Search for assets…\",\"search_placeholder_all\":\"Search for contents and assets…\",\"create_entry_or_assets\":\"Create Entry or Assets\",\"publish_changes\":\"Publish Changes\",\"publishing_changes\":\"Publishing Changes…\",\"publishing_changes_failed\":\"Changes could not be published. Please try again later.\",\"show_notifications\":\"Show Notifications\",\"notifications\":\"Notifications\",\"show_account_menu\":\"Show Account Menu\",\"account\":\"Account\",\"live_site\":\"Live Site\",\"git_repository\":\"Git Repository\",\"settings\":\"Settings\",\"cms_config\":\"CMS Configuration\",\"show_help_menu\":\"Show Help Menu\",\"help\":\"Help\",\"keyboard_shortcuts\":\"Keyboard Shortcuts\",\"documentation\":\"Documentation\",\"release_notes\":\"Release Notes\",\"announcements\":\"Announcements\",\"version_x\":\"Version {$version}\",\"report_issue\":\"Report Issue\",\"share_feedback\":\"Share Feedback\",\"get_help\":\"Get Help\",\"donate\":\"Donate\",\"join_discord\":\"Join Us on Discord\",\"bluesky\":\"Follow Us on Bluesky\",\"update_available\":\"The latest version of Sveltia CMS is available.\",\"update_now\":\"Update Now\",\"backend_status\":{\"minor_incident\":\"{$service} is experiencing a minor incident. Your workflow may be potentially affected.\",\"major_incident\":\"{$service} is experiencing a major incident. You may want to wait until the situation has improved.\"},\"content_library\":\"Content Library\",\"asset_library\":\"Asset Library\",\"asset_location\":{\"repository\":\"Your Site\",\"external\":\"External Locations\",\"stock_photos\":\"Stock Photos\"},\"collection_assets\":\"Collection Assets\",\"entry_list\":\"Entry List\",\"file_list\":\"File List\",\"asset_list\":\"Asset List\",\"x_collection\":\"“{$collection}” Collection\",\"x_asset_folder\":\"“{$folder}” Asset Folder\",\"viewing_collection_list\":\"You’re now viewing the collection list.\",\"viewing_asset_folder_list\":\"You’re now viewing the asset folder list.\",\"viewing_x_collection\":\".input {$count :integer} .match $count 0 {{You’re now viewing the “{$collection}” collection, which has no entries yet.}} one {{You’re now viewing the “{$collection}” collection, which has one entry.}} * {{You’re now viewing the “{$collection}” collection, which has {$count} entries.}}\",\"viewing_x_asset_folder\":\".input {$count :integer} .match $count 0 {{You’re now viewing the “{$folder}” asset folder, which has no assets yet.}} one {{You’re now viewing the “{$folder}” asset folder, which has one asset.}} * {{You’re now viewing the “{$folder}” asset folder, which has {$count} assets.}}\",\"singleton_selected_announcement\":\"Press Enter to edit the “{$file}” file.\",\"collection_not_found\":\"Collection not found\",\"file_not_found\":\"File not found.\",\"x_of_x_selected\":\"{$selected} of {$total} selected\",\"switch_view\":\"Switch View\",\"list_view\":\"List View\",\"grid_view\":\"Grid View\",\"switch_to_list_view\":\"Switch to List View\",\"switch_to_grid_view\":\"Switch to Grid View\",\"sort\":\"Sort\",\"sorting_options\":\"Sorting Options\",\"sort_keys\":{\"none\":\"None\",\"name\":\"Name\",\"slug\":\"Slug\",\"commit_author\":\"Updated by\",\"commit_date\":\"Updated on\",\"_summary\":\"Summary\",\"_manual\":\"Manual\"},\"ascending\":\"{$label}, A to Z\",\"ascending_date\":\"{$label}, old to new\",\"descending\":\"{$label}, Z to A\",\"descending_date\":\"{$label}, new to old\",\"filter\":\"Filter\",\"filtering_options\":\"Filtering Options\",\"group\":\"Group\",\"grouping_options\":\"Grouping Options\",\"type\":\"Type\",\"all\":\"All\",\"image\":\"Image\",\"video\":\"Video\",\"audio\":\"Audio\",\"document\":\"Document\",\"other\":\"Other\",\"show_assets\":\"Show Assets\",\"hide_assets\":\"Hide Assets\",\"show_info\":\"Show Info\",\"hide_info\":\"Hide Info\",\"all_assets\":\"All Assets\",\"global_assets\":\"Global Assets\",\"entry_not_found\":\"Entry not found.\",\"creating_entries_disabled_by_admin\":\"Creating new entries in this collection is disabled by the administrator.\",\"creating_entries_disabled_by_quota\":\"You cannot add new entries to this collection because it has reached its limit of {$quota} entries.\",\"creating_entries_nearing_quota\":\".input {$remaining :integer} .match $remaining one {{This collection is nearing its limit of {$quota} entries. You can only create {$remaining} more entry.}} * {{This collection is nearing its limit of {$quota} entries. You can only create {$remaining} more entries.}}\",\"back_to_collection\":\"Back to Collection\",\"collection_list\":\"Collection List\",\"back_to_collection_list\":\"Back to Collection List\",\"asset_folder_list\":\"Asset Folder List\",\"back_to_asset_folder_list\":\"Back to Asset Folder List\",\"search_results\":\"Search Results\",\"search_results_for_x\":\"Search Results for “{$terms}”\",\"viewing_entry_search_results\":\".input {$count :integer} .match $count 0 {{You’re now viewing search results for “{$terms}”. We couldn’t find any entries.}} one {{You’re now viewing search results for “{$terms}”. We’ve found one entry.}} * {{You’re now viewing search results for “{$terms}”. We’ve found {$count} entries.}}\",\"viewing_asset_search_results\":\".input {$count :integer} .match $count 0 {{You’re now viewing search results for “{$terms}”. We couldn’t find any assets.}} one {{You’re now viewing search results for “{$terms}”. We’ve found one asset.}} * {{You’re now viewing search results for “{$terms}”. We’ve found {$count} assets.}}\",\"x_entries\":\".input {$count :integer} .match $count 0 {{No entries}} one {{{$count} entry}} * {{{$count} entries}}\",\"x_assets\":\".input {$count :integer} .match $count 0 {{No assets}} one {{{$count} asset}} * {{{$count} assets}}\",\"no_files_found\":\"No files found.\",\"no_entries_found\":\"No entries found.\",\"upload_assets\":\"Upload New Assets\",\"edit_options\":\"Edit Options\",\"show_edit_options\":\"Show Edit Options\",\"edit_asset\":\"Edit Asset\",\"edit_x\":\"Edit {$name}\",\"wrap_long_lines\":\"Wrap Long Lines\",\"rename_asset\":\"Rename Asset\",\"rename_x\":\"Rename {$name}\",\"enter_new_name_for_asset\":\".input {$count :integer} .match $count 0 {{Enter a new name below.}} one {{Enter a new name below. An entry using the asset will also be updated.}} * {{Enter a new name below. {$count} entries using the asset will also be updated.}}\",\"enter_new_name_for_asset_error\":{\"empty\":\"File name cannot be empty.\",\"character\":\"File name cannot contain special characters.\",\"duplicate\":\"This file name is used for another asset.\"},\"replace_asset\":\"Replace Asset\",\"replace_x\":\"Replace {$name}\",\"click_to_browse\":\"Click to browse…\",\"tap_to_browse\":\"Tap to browse…\",\"drop_files_or_click_to_browse\":\".input {$count :integer} .match $count one {{Drop a file here or click to browse…}} * {{Drop files here or click to browse…}}\",\"drop_files_or\":\".input {$count :integer} .match $count one {{Drop a file here or}} * {{Drop files here or}}\",\"drop_image_files_or\":\".input {$count :integer} .match $count one {{Drop an image file here or}} * {{Drop image files here or}}\",\"browse\":\"Browse\",\"paste\":\"Paste\",\"paste_image\":\"Paste Image\",\"no_image_in_clipboard\":\"No image found in clipboard.\",\"clipboard_access_denied\":\"Clipboard access denied.\",\"drop_files_here\":\".input {$count :integer} .match $count one {{Drop a file here}} * {{Drop files here}}\",\"unsupported_file_type\":\"Unsupported File Type\",\"dropped_file_type_mismatch\":\"The dropped file is not the {$type} type. Please try again.\",\"dropped_image_type_mismatch\":\"The dropped file is not supported. Only an AVIF, GIF, JPEG, PNG, WebP or SVG image is accepted. Please try again.\",\"choose_files\":\".input {$count :integer} .match $count one {{Choose File}} * {{Choose Files}}\",\"delete_assets\":\".input {$count :integer} .match $count one {{Delete Asset}} * {{Delete Assets}}\",\"delete_selected_assets\":\".input {$count :integer} .match $count one {{Delete Selected Asset}} * {{Delete Selected Assets}}\",\"confirm_deleting_this_asset\":\"Are you sure you want to delete this asset?\",\"confirm_deleting_selected_assets\":\".input {$count :integer} .match $count one {{Are you sure you want to delete the selected asset?}} * {{Are you sure you want to delete the selected {$count} assets?}}\",\"confirm_deleting_all_assets\":\"Are you sure you want to delete all the assets?\",\"delete_entries\":\".input {$count :integer} .match $count one {{Delete Entry}} * {{Delete Entries}}\",\"delete_selected_entries\":\".input {$count :integer} .match $count one {{Delete Selected Entry}} * {{Delete Selected Entries}}\",\"confirm_deleting_this_entry\":\"Are you sure you want to delete this entry?\",\"confirm_deleting_this_entry_with_assets\":\"Are you sure you want to delete this entry and associated assets?\",\"confirm_deleting_selected_entries\":\".input {$count :integer} .match $count one {{Are you sure you want to delete the selected entry?}} * {{Are you sure you want to delete the selected {$count} entries?}}\",\"confirm_deleting_selected_entries_with_assets\":\".input {$count :integer} .match $count one {{Are you sure you want to delete the selected entry and associated assets?}} * {{Are you sure you want to delete the selected {$count} entries and associated assets?}}\",\"confirm_deleting_all_entries\":\"Are you sure you want to delete all the entries?\",\"confirm_deleting_all_entries_with_assets\":\"Are you sure you want to delete all the entries and associated assets?\",\"reorder_entries\":\"Reorder Entries\",\"done_reordering_entries\":\"Done Reordering Entries\",\"cancel_reordering_entries\":\"Cancel Reordering Entries\",\"saving_reorder_failed\":\"Failed to save the new entry order. Please try again.\",\"processing_files\":\".input {$count :integer} .match $count one {{Processing a file. This may take a while.}} * {{Processing files. This may take a while.}}\",\"uploading_files\":\"Uploading Files\",\"confirm_replacing_file\":\"“{$name}” will be replaced with this file:\",\"confirm_uploading_files\":\".input {$count :integer} .match $count one {{This file will be saved to the “{$folder}” folder:}} * {{These {$count} files will be saved to the “{$folder}” folder:}}\",\"oversized_files\":\"Oversized Files\",\"warning_oversized_files\":\".input {$count :integer} .match $count one {{This file cannot be uploaded because it exceeds the maximum size of {$size}. Please reduce the size or select a different file.}} * {{These files cannot be uploaded because they exceed the maximum size of {$size}. Please reduce the sizes or select different files.}}\",\"file_name_conflict_confirmation\":\".input {$count :integer} .match $count one {{A file with the same name already exists in this folder. Do you want to replace it?}} * {{{$count} files with the same names already exist in this folder. Do you want to replace them?}}\",\"file_name_conflict_confirmation_with_name\":\".input {$count :integer} .input {$name :string} .match $count one {{A file named “{$name}” already exists in this folder. Do you want to replace it?}} * {{{$count} files with the same names already exist in this folder. Do you want to replace them?}}\",\"file_name_conflict_resolution\":\"File Name Conflict Resolution\",\"keep_both\":\"Keep Both\",\"uploading_files_progress\":\".input {$count :integer} .match $count one {{Uploading file…}} * {{Uploading files…}}\",\"uploading_files_failed\":\".input {$count :integer} .match $count one {{File could not be uploaded}} * {{Files could not be uploaded}}\",\"file_meta\":\"{$type} · {$size}\",\"file_meta_converted_from_x\":\"(converted from {$type})\",\"no_entries_created\":\"This collection has no entries yet.\",\"create_new_entry\":\"Create New Entry\",\"entry\":\"Entry\",\"index_file\":\"Index File\",\"no_files_in_collection\":\"No files available in this collection.\",\"asset_info\":\"Asset Info\",\"select_asset_show_info\":\"Select an asset to show the info.\",\"duplicate_entry\":\"Duplicate Entry\",\"entry_duplicated\":\"Entry has been duplicated. It’s now a new draft.\",\"entry_validation_errors\":\".input {$count :integer} .match $count one {{One field has an error. Please correct it to save the entry.}} * {{{$count} fields have an error. Please correct them to save the entry.}}\",\"entry_saved\":\".input {$count :integer} .match $count one {{Entry has been saved.}} * {{{$count} entries have been saved.}}\",\"entry_saved_and_published\":\".input {$count :integer} .match $count one {{Entry has been saved and published.}} * {{{$count} entries have been saved and published.}}\",\"entries_deleted\":\".input {$count :integer} .match $count one {{Entry has been deleted.}} * {{{$count} entries have been deleted.}}\",\"assets_saved\":\".input {$count :integer} .match $count one {{Asset has been saved.}} * {{{$count} assets have been saved.}}\",\"assets_saved_and_published\":\".input {$count :integer} .match $count one {{Asset has been saved and published.}} * {{{$count} assets have been saved and published.}}\",\"asset_urls_copied\":\".input {$count :integer} .match $count one {{Asset URL has been copied to clipboard.}} * {{{$count} asset URLs have been copied to clipboard.}}\",\"asset_paths_copied\":\".input {$count :integer} .match $count one {{Asset file path has been copied to clipboard.}} * {{{$count} asset file paths have been copied to clipboard.}}\",\"asset_data_copied\":\".input {$count :integer} .match $count one {{Asset file has been copied to clipboard.}} * {{{$count} asset files have been copied to clipboard.}}\",\"assets_downloaded\":\".input {$count :integer} .match $count one {{Asset file has been downloaded.}} * {{{$count} asset files have been downloaded.}}\",\"assets_moved\":\".input {$count :integer} .match $count one {{Asset has been moved.}} * {{{$count} assets have been moved.}}\",\"assets_renamed\":\".input {$count :integer} .match $count one {{Asset has been renamed.}} * {{{$count} assets have been renamed.}}\",\"assets_deleted\":\".input {$count :integer} .match $count one {{Asset has been deleted.}} * {{{$count} assets have been deleted.}}\",\"content_editor\":\"Content Editor\",\"restore_backup_title\":\"Restore Draft\",\"restore_backup_description\":\"This entry has a backup from {$datetime}. Do you want to restore the edited draft?\",\"draft_backup_saved\":\"Draft backup has been saved.\",\"draft_backup_restored\":\"Draft backup has been restored.\",\"draft_backup_deleted\":\"Draft backup has been deleted.\",\"cancel_editing\":\"Cancel Editing\",\"create_entry_title\":\"Creating {$name}\",\"create_entry_announcement\":\"You’re now creating a new entry in the “{$collection}” collection.\",\"edit_entry_title\":\"{$collection} › {$entry}\",\"edit_entry_announcement\":\"You’re now editing the “{$entry}” entry in the “{$collection}” collection.\",\"edit_file_announcement\":\"You’re now editing the “{$file}” file in the “{$collection}” collection.\",\"edit_singleton_announcement\":\"You’re now editing the “{$file}” file.\",\"save_and_publish\":\"Save and Publish\",\"save_without_publishing\":\"Save without Publishing\",\"show_editor_options\":\"Show Editor Options\",\"editor_options\":\"Editor Options\",\"show_preview\":\"Show Preview\",\"sync_scrolling\":\"Sync Scrolling\",\"switch_locale\":\"Switch Locale\",\"locale_content_disabled_short\":\"(disabled)\",\"locale_content_error_short\":\"(error)\",\"edit\":\"Edit\",\"preview\":\"Preview\",\"swap_panes\":\"Swap Panes\",\"edit_x_locale\":\"Edit {$locale} Content\",\"preview_x_locale\":\"Preview {$locale} Content\",\"content_preview\":\"Content Preview\",\"show_content_options_x_locale\":\"Show {$locale} Content Options\",\"content_options_x_locale\":\"{$locale} Content Options\",\"x_field\":\"“{$field}” Field\",\"show_field_options\":\"Show Field Options\",\"field_options\":\"Field Options\",\"unsupported_field_type_x\":\"Unsupported field type: {$name}\",\"enable_x_locale\":\"Enable {$locale}\",\"reenable_x_locale\":\"Reenable {$locale}\",\"disable_x_locale\":\"Disable {$locale}\",\"locale_x_has_been_disabled\":\"The {$locale} content has been disabled.\",\"locale_x_now_disabled\":\"The {$locale} content is now disabled. It will be deleted when you save the entry.\",\"view_in_repository\":\"View in Repository\",\"view_on_x\":\"View on {$service}\",\"view_on_live_site\":\"View on Live Site\",\"copy_from\":\"Copy from…\",\"copy_from_x\":\"Copy from {$locale}\",\"translation_options\":\"Translation Options\",\"translate\":\"Translate\",\"translate_fields\":\".input {$count :integer} .match $count one {{Translate Field}} * {{Translate Fields}}\",\"translate_from\":\"Translate from…\",\"translate_from_x\":\"Translate from {$locale}\",\"revert_changes\":\"Revert Changes\",\"revert_all_changes\":\"Revert All Changes\",\"edit_slug\":\"Edit Slug\",\"edit_slug_warning\":\"Changing the slug may break internal and external links to the entry. Currently, Sveltia CMS does not update references created with Relation fields, so you’ll need to manually update such references along with other links.\",\"edit_slug_error\":{\"empty\":\"The slug cannot be empty.\",\"invalid\":\"The slug cannot contain special characters, including slashes and whitespaces.\",\"duplicate\":\"This slug is used for another entry.\"},\"required\":\"Required\",\"editor\":{\"translation\":{\"none\":\"Nothing has been translated.\",\"started\":\"Translating…\",\"error\":\"There was an error while translating.\",\"complete\":\".input {$count :integer} .match $count 0 {{No field has been translated from {$source}.}} one {{Translated a field from {$source}.}} * {{Translated {$count} fields from {$source}.}}\"},\"copy\":{\"none\":\"Nothing has been copied.\",\"complete\":\".input {$count :integer} .match $count 0 {{No field has been copied from {$source}.}} one {{Copied a field from {$source}.}} * {{Copied {$count} fields from {$source}.}}\"}},\"validation\":{\"value_missing\":\"This field is required.\",\"range_underflow\":{\"datetime-local\":\"The date/time must be at or after {$min}.\",\"date\":\"The date must be on or after {$min}.\",\"time\":\"The time must be at or after {$min}.\",\"number\":\"The value must be greater than or equal to {$min}.\",\"select\":\".input {$min :integer} .match $min one {{You have to select at least {$min} option.}} * {{You have to select at least {$min} options.}}\",\"add\":\".input {$min :integer} .match $min one {{You have to add at least {$min} item.}} * {{You have to add at least {$min} items.}}\"},\"range_overflow\":{\"datetime-local\":\"The date/time must be at or before {$max}.\",\"date\":\"The date must be on or before {$max}.\",\"time\":\"The time must be at or before {$max}.\",\"number\":\"The value must be less than or equal to {$max}.\",\"select\":\".input {$max :integer} .match $max one {{You cannot select more than {$max} option.}} * {{You cannot select more than {$max} options.}}\",\"add\":\".input {$max :integer} .match $max one {{You cannot add more than {$max} item.}} * {{You cannot add more than {$max} items.}}\"},\"too_short\":\".input {$min :integer} .match $min one {{You must enter at least {$min} character.}} * {{You must enter at least {$min} characters.}}\",\"too_long\":\".input {$max :integer} .match $max one {{You cannot enter more than {$max} character.}} * {{You cannot enter more than {$max} characters.}}\",\"type_mismatch\":{\"number\":\"Please enter a number.\",\"email\":\"Please enter a valid email.\",\"url\":\"Please enter a valid URL.\"}},\"entry_sidebar\":{\"sidebar_panels\":\"Sidebar Panels\",\"validation\":{\"title\":\"Validation\",\"placeholder\":\"Validation results will be shown here.\",\"no_errors_found\":\"No errors found.\"},\"history\":{\"title\":\"History\",\"fetch_failed\":\"Failed to load history.\",\"no_history\":\"No history found.\"},\"backlinks\":{\"title\":\"Backlinks\",\"no_entries\":\"No entries are referencing this entry.\"}},\"saving_entry\":{\"error\":{\"title\":\"Error\",\"description\":\"There was an error while saving the entry. Please try again later.\"}},\"viewing_x_asset_details\":\"You’re viewing the details of the “{$name}” asset.\",\"asset_editor\":\"Asset Editor\",\"preview_unavailable\":\"Preview Unavailable.\",\"public_urls\":\".input {$count :integer} .match $count one {{Public URL}} * {{Public URLs}}\",\"file_paths\":\".input {$count :integer} .match $count one {{File Path}} * {{File Paths}}\",\"file_data\":\"File Data\",\"kind\":\"Kind\",\"size\":\"Size\",\"dimensions\":\"Dimensions\",\"duration\":\"Duration\",\"used_in\":\"Used in\",\"created_date\":\"Created Date\",\"location\":\"Location\",\"map_lat_lng\":\"Map showing latitude {$latitude}, longitude {$longitude}\",\"remove_this_item\":\"Remove This Item\",\"move_up\":\"Move Up\",\"move_down\":\"Move Down\",\"add_x\":\"Add {$name}\",\"add_item_above\":\"Add Item Above\",\"add_item_below\":\"Add Item Below\",\"select_list_type\":\"Select List Type\",\"opacity\":\"Opacity\",\"unselected_option\":\"(None)\",\"assets_dialog\":{\"title\":{\"file\":\"Select File\",\"image\":\"Select Image\"},\"search_for_file\":\"Search for Files\",\"search_for_image\":\"Search for Images\",\"locations\":\"Locations\",\"folder\":{\"field\":\"Field Assets\",\"entry\":\"Entry Assets\",\"file\":\"File Assets\",\"collection\":\"Collection Assets\",\"global\":\"Global Assets\"},\"error\":{\"invalid_key\":\"Your API Key is invalid or expired. Please double check and try again.\",\"search_fetch_failed\":\"There was an error while searching assets. Please try again later.\",\"image_fetch_failed\":\"There was an error while downloading the selected asset. Please try again later.\"},\"available_images\":\"Available Images\",\"enter_url\":\"Enter URL\",\"enter_file_url\":\"Enter URL of the file:\",\"enter_image_url\":\"Enter URL of the image:\",\"large_file\":{\"title\":\"Large File\"},\"photo_credit\":{\"title\":\"Photo Credit\",\"description\":\"Use the following credit if possible:\"},\"unsaved\":\"Unsaved\"},\"character_counter\":{\"min_max\":\".input {$count :integer} .match $count 0 {{No character entered. Minimum: {$min}. Maximum: {$max}.}} one {{{$count} character entered. Minimum: {$min}. Maximum: {$max}.}} * {{{$count} characters entered. Minimum: {$min}. Maximum: {$max}.}}\",\"min\":\".input {$count :integer} .match $count 0 {{No character entered. Minimum: {$min}.}} one {{{$count} character entered. Minimum: {$min}.}} * {{{$count} characters entered. Minimum: {$min}.}}\",\"max\":\".input {$count :integer} .match $count 0 {{No character entered. Maximum: {$max}.}} one {{{$count} character entered. Maximum: {$max}.}} * {{{$count} characters entered. Maximum: {$max}.}}\"},\"youtube_video_player\":\"YouTube video player\",\"today\":\"Today\",\"now\":\"Now\",\"editor_components\":{\"image\":\"Image\",\"src\":\"Source\",\"alt\":\"Alt Text\",\"title\":\"Title\",\"link\":\"Link\"},\"key_value\":{\"key\":\"Key\",\"value\":\"Value\",\"action\":\"Action\",\"empty_key\":\"Key is required.\",\"duplicate_key\":\"Key must be unique.\"},\"find_place\":\"Find a Place\",\"use_your_location\":\"Use Your Location\",\"geolocation_error_title\":\"Geolocation Error\",\"geolocation_error_body\":\"There was an error while retrieving your location.\",\"geolocation_unsupported\":\"Geolocation API is not supported by this browser.\",\"boolean\":{\"true\":\"Yes\",\"false\":\"No\"},\"cloud_storage\":{\"invalid\":\"The service is not configured properly.\",\"auth\":{\"api_key\":{\"key_label\":\"API Key\",\"initial\":\"Enter your {$key} for {$service}.\",\"requested\":\"Validating…\",\"error\":\"The provided {$key} is invalid. Please double check and try again.\"},\"password\":{\"initial\":\"Enter your password for {$service}.\",\"requested\":\"Signing in…\",\"error\":\"User name or password is incorrect. Please double check and try again.\"}},\"cloudinary\":{\"iframe_title\":\"Cloudinary media library\",\"activate\":{\"button_label\":\"Activate Cloudinary\",\"description\":\"After signing in, click the Sign In button again to continue.\"},\"auth_key_label\":\"API Secret\"},\"uploadcare\":{\"auth_key_label\":\"API Secret Key\"},\"aws_s3\":{\"auth_key_label\":\"Secret Access Key\"},\"cloudflare_r2\":{\"auth_key_label\":\"Secret Access Key\"},\"digitalocean_spaces\":{\"auth_key_label\":\"Secret Access Key\"}},\"config\":{\"errors\":\".input {$count :integer} .match $count one {{There is an error in the CMS configuration. Please solve the issue and try again.}} * {{There are errors in the CMS configuration. Please solve the issues and try again.}}\",\"error_locator\":{\"collection\":\"{$collection} collection\",\"file\":\"{$file} file\",\"field\":\"`{$field}` field\"},\"error\":{\"no_secure_context\":\"Sveltia CMS only works with HTTPS or localhost URLs.\",\"insecure_url\":\"The configuration file URL must use HTTPS protocol or a localhost address.\",\"insecure_urls\":\".input {$count :integer} .match $count one {{The configuration file URL must use HTTPS protocol or a localhost address.}} * {{The configuration file URLs must use HTTPS protocol or localhost addresses.}}\",\"fetch_failed\":\"The configuration file could not be retrieved.\",\"fetch_failed_not_ok\":\"HTTP response returned with status {$status}.\",\"fetch_failed_with_manual_init\":\"The configuration file could not be retrieved. To prevent the `config.yml` file from loading, add [`load_config_file: false`](https://sveltiacms.app/en/docs/api/initialization#providing-a-full-configuration) to the configuration object passed to `CMS.init()`.\",\"parse_failed\":\"The configuration file could not be parsed.\",\"parse_failed_invalid_object\":\"The configuration file is not a valid JavaScript object.\",\"parse_failed_unsupported_type\":\"The configuration file is not a valid file type. Only YAML, TOML and JSON are supported.\",\"no_collection\":\"Collections are not defined.\",\"missing_backend\":\"The backend is not defined.\",\"missing_backend_name\":\"The backend name is not defined.\",\"unsupported_known_backend\":\"The {$name} backend is [not supported](https://sveltiacms.app/en/docs/migration/netlify-decap-cms#features-not-to-be-implemented) in Sveltia CMS.\",\"unsupported_deprecated_backend\":\"The deprecated {$name} backend is [not supported](https://sveltiacms.app/en/docs/migration/netlify-decap-cms#features-not-to-be-implemented) in Sveltia CMS.\",\"unsupported_custom_backend\":\"Custom backends are [not supported](https://sveltiacms.app/en/docs/migration/netlify-decap-cms#features-not-to-be-implemented) in Sveltia CMS.\",\"unsupported_backend_suggestion\":\"Use one of the [supported backends](https://sveltiacms.app/en/docs/backends#supported-backends) instead.\",\"missing_repository\":\"The repository is not defined.\",\"invalid_repository\":\"The configured repository is invalid. It must be in “owner/repo” format.\",\"oauth_implicit_flow\":\"The configured authentication method (implicit flow) is not supported in Sveltia CMS. Use a different [authentication method](https://sveltiacms.app/en/docs/backends/BACKEND_NAME#authentication) instead.\",\"github_pkce_unsupported\":\"PKCE authorization is not yet supported due to GitHub’s limitations. Use a different [authentication method](https://sveltiacms.app/en/docs/backends/github#authentication) instead.\",\"oauth_no_app_id\":\"OAuth application ID is not defined.\",\"no_auth_methods\":\"The `auth_methods` option must contain at least one method.\",\"missing_media_folder\":\"The media folder is not defined.\",\"invalid_media_folder\":\"The configured media folder is invalid. It must be a string.\",\"invalid_public_folder\":\"The configured public folder is invalid. It must be a string.\",\"public_folder_relative_path\":\"The configured public folder is invalid. It must be an absolute path starting with “/”.\",\"public_folder_absolute_url\":\"An absolute URL for the public folder option is not supported in Sveltia CMS.\",\"invalid_asset_collections\":\"The `asset_collections` option is invalid. It must be an array.\",\"missing_asset_collection_name\":\"The asset collection {$count} must have the `name` option defined as a non-empty string.\",\"invalid_asset_collection_name\":\"The asset collection name `{$name}` is invalid. It must not contain special characters.\",\"duplicate_asset_collection_name\":\"Asset collection names must be unique, but `{$name}` is used more than once.\",\"asset_collection_invalid_media_folder\":\"The `{$name}` asset collection must have the `media_folder` option defined as a string.\",\"invalid_collection_no_options\":\"The collection must have either the `folder`, `files` or `divider` option defined.\",\"invalid_collection_multiple_options\":\"The collection cannot have the `folder`, `files` and `divider` options together.\",\"file_format_mismatch\":\"The `{$extension}` extension doesn’t match the `{$format}` format.\",\"invalid_slug_slash\":\"The slug template `{$slug}` is invalid as it cannot contain slashes. To organize entries in subfolders, use the `path` option instead of `slug`.\",\"missing_collection_name\":\"The collection {$count} must have the `name` option defined as a non-empty string.\",\"invalid_collection_name\":\"The collection name `{$name}` is invalid. It must not contain special characters.\",\"duplicate_collection_name\":\"Collection names must be unique, but `{$name}` is used more than once.\",\"missing_collection_file_name\":\"The collection file {$count} must have the `name` option defined as a non-empty string.\",\"invalid_collection_file_name\":\"The collection file name `{$name}` is invalid. It must not contain special characters.\",\"duplicate_collection_file_name\":\"Collection file names must be unique, but `{$name}` is used more than once.\",\"collection_no_fields\":\"The collection must have the `fields` option defined with at least one field.\",\"collection_file_no_fields\":\"The collection file must have the `fields` option defined with at least one field.\",\"collection_file_i18n_required\":\"The collection file must have the `i18n` option defined if the `locale` placeholder is used in the `file` path.\",\"missing_field_name\":\"The field {$count} must have the `name` option defined as a non-empty string.\",\"invalid_field_name\":\"The field name `{$name}` is invalid. It must not contain special characters. If you want to nest fields, [use Object fields instead of dot notation](https://sveltiacms.app/en/docs/troubleshooting#using-proper-naming-conventions).\",\"duplicate_field_name\":\"Field names must be unique, but `{$name}` is used more than once.\",\"missing_variable_type\":\"The variable type {$count} must have the `name` option defined as a non-empty string.\",\"invalid_variable_type\":\"The variable type name `{$name}` is invalid. It must not contain special characters.\",\"duplicate_variable_type\":\"Variable type names must be unique, but `{$name}` is used more than once.\",\"date_field_type\":\"The deprecated Date field type is not supported in Sveltia CMS. Use the DateTime field type with the `type: date` option instead.\",\"invalid_timezone\":\"Invalid timezone: {$timeZone}. Must be a valid IANA timezone identifier like `America/New_York` or `Asia/Tokyo`.\",\"unsupported_deprecated_option\":\"The deprecated `{$prop}` option is not supported in Sveltia CMS. Use the `{$newProp}` option instead.\",\"allow_multiple\":\"The `allow_multiple` option is not supported in Sveltia CMS. Use the `multiple` option instead, which defaults to `false`.\",\"invalid_list_field\":\"The List field cannot have the `field`, `fields` and `types` options together.\",\"invalid_list_variable_type\":\"The List field’s variable type is invalid. The `widget` option is set to `{$widget}` but it must be `object`.\",\"invalid_object_field\":\"The Object field cannot have the `fields` and `types` options together.\",\"object_field_missing_fields\":\"The Object field must have either the `fields` or `types` option defined.\",\"relation_field_invalid_collection\":\"The referenced `{$collection}` collection is invalid or not defined.\",\"relation_field_invalid_collection_file\":\"The referenced `{$file}` file is invalid or not defined.\",\"relation_field_missing_file_name\":\"The `file` option must be defined for a relation to a file collection.\",\"relation_field_invalid_value_field\":\"The referenced value field `{$field}` is invalid or not defined.\",\"unexpected\":\"Unexpected error\"},\"warning\":{\"oauth_no_app_id\":\"OAuth application ID is not defined. Users are required to provide an access token to sign in.\",\"editorial_workflow_unsupported\":\"Editorial workflow is not yet supported in Sveltia CMS.\",\"open_authoring_unsupported\":\"Open authoring is not yet supported in Sveltia CMS.\",\"nested_collections_unsupported\":\"Nested collections are not yet supported in Sveltia CMS.\",\"unsupported_ignored_option\":\"The `{$prop}` option is not supported in Sveltia CMS. It will be ignored.\",\"conflicting_timezone_options\":\"Both `picker_utc` and newer timezone options (`input_timezone` or `output_utc`) are set. The new options take precedence. Consider removing `picker_utc` from your configuration.\"},\"compatibility_link\":\"See the compatibility notes for details: https://sveltiacms.app/en/docs/migration/netlify-decap-cms#features-not-to-be-implemented\"},\"local_workflow\":{\"indicator\":\"Local\",\"unsupported_browser\":\"Local Workflow is not supported in your browser. Please use Chrome or Edge instead.\",\"disabled\":\"Local Workflow is disabled in your browser. <a>Here’s how to enable it</a>.\"},\"status\":{\"drafts\":\"Drafts\",\"in_review\":\"In Review\",\"ready\":\"Ready\"},\"categories\":\"Categories\",\"prefs\":{\"changes\":{\"api_key_saved\":\"API key has been saved.\",\"api_key_removed\":\"API key has been removed.\",\"api_key_invalid\":\"The provided API key is invalid. Please double check and try again.\"},\"error\":{\"permission_denied\":\"Browser storage (Cookie) access has been denied. Please check the permission and try again.\"},\"appearance\":{\"title\":\"Appearance\",\"theme\":\"Theme\",\"select_theme\":\"Select Theme\"},\"theme\":{\"auto\":\"Auto\",\"dark\":\"Dark\",\"light\":\"Light\"},\"language\":{\"title\":\"Language\",\"ui_language\":{\"title\":\"User Interface Language\",\"select_language\":\"Select Language\"}},\"contents\":{\"title\":\"Contents\",\"editor\":{\"title\":\"Editor\",\"use_draft_backup\":{\"switch_label\":\"Automatically back up entry drafts\"},\"close_on_save\":{\"switch_label\":\"Close the editor after saving a draft\"},\"close_with_escape\":{\"switch_label\":\"Close the editor with the Escape key\"}}},\"i18n\":{\"title\":\"Internationalization\",\"translators\":{\"default\":{\"title\":\"Default Translation Service\",\"select_service\":\"Select Service\"},\"api_keys\":{\"title\":\"Translation Service API Keys\",\"description\":\"Manage API keys for <a>translation services</a>.\"},\"field_label\":\"{$service} Key\",\"description\":\"Sign up for <a {$homeHref}>{$service}</a> and enter <a {$apiKeyHref}>your API Key</a> here to enable quick translation of text entry fields.\"}},\"media\":{\"title\":\"Media\",\"stock_photos\":{\"api_keys\":{\"title\":\"Stock Photo Service API Keys\",\"description\":\"Manage API keys for <a>stock photo services</a>.\"},\"field_label\":\"{$service} API Key\",\"description\":\"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.\",\"credit\":\"Photos provided by {$service}\",\"no_services\":\"No <a>stock photo services</a> are configured.\"},\"cloud_storage\":{\"api_keys\":{\"title\":\"Cloud Storage Service API Keys\",\"description\":\"Manage API keys for <a>cloud storage services</a>.\"},\"field_label\":\"{$service} API Key\",\"no_services\":\"No <a>cloud storage services</a> are configured.\"}},\"accessibility\":{\"title\":\"Accessibility\",\"underline_links\":{\"title\":\"Underline Links\",\"description\":\"Show underline for links in the entry preview and user interface labels.\",\"switch_label\":\"Always Underline Links\"}},\"advanced\":{\"title\":\"Advanced\",\"beta\":{\"title\":\"Beta Features\",\"description\":\"Enable some beta features that may be unstable or unlocalized.\",\"switch_label\":\"Join Beta Program\"},\"developer_mode\":{\"title\":\"Developer Mode\",\"description\":\"Enable some developer-oriented features, including detailed console logs and native context menus.\",\"switch_label\":\"Enable Developer Mode\"},\"deploy_hook\":{\"title\":\"Deploy Hook\",\"description\":\"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.\",\"url\":{\"field_label\":\"Hook URL\",\"saved\":\"Hook URL has been saved.\",\"removed\":\"Hook URL has been removed.\"},\"auth\":{\"field_label\":\"Authorization header (e.g. Bearer <token>) (optional)\",\"saved\":\"Authorization header has been saved.\",\"removed\":\"Authorization header has been removed.\"}}}},\"keyboard_shortcuts_\":{\"view_content_library\":\"View Content Library\",\"view_asset_library\":\"View Asset Library\",\"search\":\"Search for entries and assets\",\"create_entry\":\"Create a new entry\",\"save_entry\":\"Save an entry\",\"cancel_editing\":\"Cancel entry editing\"},\"file_type_labels\":{\"avif\":\"AVIF image\",\"bmp\":\"Bitmap image\",\"gif\":\"GIF image\",\"ico\":\"Icon\",\"jpeg\":\"JPEG image\",\"jpg\":\"JPEG image\",\"png\":\"PNG image\",\"svg\":\"SVG image\",\"tif\":\"TIFF image\",\"tiff\":\"TIFF image\",\"webp\":\"WebP image\",\"avi\":\"AVI video\",\"m4v\":\"MP4 video\",\"mov\":\"QuickTime video\",\"mp4\":\"MP4 video\",\"mpeg\":\"MPEG video\",\"mpg\":\"MPEG video\",\"ogg\":\"Ogg video\",\"ogv\":\"Ogg video\",\"ts\":\"MPEG video\",\"webm\":\"WebM video\",\"3gp\":\"3GPP video\",\"3g2\":\"3GPP2 video\",\"aac\":\"AAC audio\",\"mid\":\"MIDI\",\"midi\":\"MIDI\",\"m4a\":\"MP4 audio\",\"mp3\":\"MP3 audio\",\"oga\":\"Ogg audio\",\"opus\":\"OPUS audio\",\"wav\":\"WAV audio\",\"weba\":\"WebM audio\",\"csv\":\"CSV spreadsheet\",\"doc\":\"Word document\",\"docx\":\"Word document\",\"odp\":\"OpenDocument presentation\",\"ods\":\"OpenDocument spreadsheet\",\"odt\":\"OpenDocument text\",\"pdf\":\"PDF document\",\"ppt\":\"PowerPoint presentation\",\"pptx\":\"PowerPoint presentation\",\"rtf\":\"Rich text document\",\"xls\":\"Excel spreadsheet\",\"xlsx\":\"Excel spreadsheet\",\"html\":\"HTML text\",\"js\":\"JavaScript\",\"json\":\"JSON text\",\"md\":\"Markdown text\",\"toml\":\"TOML text\",\"yaml\":\"YAML text\",\"yml\":\"YAML text\"},\"file_size_units\":{\"b\":\"{$size} bytes\",\"kb\":\"{$size} KB\",\"mb\":\"{$size} MB\",\"gb\":\"{$size} GB\",\"tb\":\"{$size} TB\"}};","export default {\"collections\":\"コレクション\",\"contents\":\"コンテンツ\",\"entries\":\"エントリー\",\"files\":\"ファイル\",\"assets\":\"アセット\",\"media\":\"メディア\",\"workflow\":\"ワークフロー\",\"editorial_workflow\":\"編集ワークフロー\",\"menu\":\"メニュー\",\"user_name\":\"ユーザー名\",\"password\":\"パスワード\",\"sign_in\":\"ログイン\",\"sign_in_with_mobile\":\"モバイルでログイン\",\"sign_in_with_mobile_instruction\":\"以下の QR コードを携帯電話かタブレットでスキャンすると、パスワードなしでログインできます。ユーザー設定は自動的にコピーされます。\",\"signed_in_as_x\":\"{$name} としてログイン中\",\"working_with_local_repo\":\"ローカルレポジトリで作業中\",\"working_with_test_repo\":\"テストレポジトリで作業中\",\"sign_out\":\"ログアウト\",\"create\":\"新規作成\",\"select\":\"選択\",\"select_all\":\"すべて選択\",\"upload\":\"アップロード\",\"copy\":\"コピー\",\"download\":\"ダウンロード\",\"duplicate\":\"複製\",\"delete\":\"削除\",\"reorder\":\"並び替え\",\"cancel\":\"キャンセル\",\"done\":\"完了\",\"save\":\"保存\",\"saving\":\"保存中…\",\"publish\":\"公開\",\"publishing\":\"公開中…\",\"rename\":\"名前を変更\",\"update\":\"更新\",\"replace\":\"差し替え\",\"add\":\"追加\",\"remove\":\"削除\",\"remove_x\":\"{$name} を削除\",\"clear\":\"クリア\",\"expand\":\"広げる\",\"expand_all\":\"すべて広げる\",\"collapse\":\"折り畳む\",\"collapse_all\":\"すべて折り畳む\",\"insert\":\"挿入\",\"restore\":\"復元\",\"discard\":\"破棄\",\"searching\":\"検索中…\",\"no_results\":\"結果が見つかりませんでした。\",\"global\":\"グローバル\",\"primary\":\"プライマリー\",\"secondary\":\"セカンダリー\",\"collection\":\"コレクション\",\"folder\":\"フォルダー\",\"api_key\":\"API キー\",\"details\":\"詳細\",\"back\":\"戻る\",\"loading\":\"読み込み中…\",\"later\":\"後で\",\"slug\":\"スラッグ\",\"singleton\":\"シングルトン\",\"singletons\":\"シングルトン\",\"clipboard_error\":\"データのコピー中に問題が発生しました。\",\"welcome_message\":\"{$name} へようこそ\",\"powered_by\":\"Powered by {$name}\",\"loading_cms_config\":\"CMS 設定を読み込んでいます…\",\"loading_site_data\":\"サイトデータを読み込んでいます…\",\"loading_site_data_error\":\"サイトデータの読み込み中にエラーが発生しました。\",\"sign_in_with_x\":\"{$service} にログイン\",\"sign_in_using_access_token\":\"アクセストークンを使用してログイン\",\"sign_in_using_access_token_description\":\"以下にトークンを入力してください。レポジトリコンテンツへの読み取り・書き込みアクセスが必要です。\",\"sign_in_using_access_token_link\":\"<a>{$service} ユーザー設定ページ</a> でトークンを生成できます。\",\"personal_access_token\":\"個人用アクセストークン\",\"authorizing\":\"認証中…\",\"signing_in\":\"ログイン中…\",\"work_with_local_repo\":\"ローカルレポジトリで作業\",\"work_with_local_repo_description\":\"ダイアログが表示されたら、「{$repo}」レポジトリのルートディレクトリを選択してください。\",\"work_with_local_repo_description_no_repo\":\"ダイアログが表示されたら、Git レポジトリのルートディレクトリを選択してください。\",\"work_with_test_repo\":\"テストレポジトリで作業\",\"sign_in_error\":{\"not_project_root\":\"選択されたフォルダーはレポジトリのルートディレクトリではありません。再度お試しください。\",\"picker_dismissed\":\"レポジトリのルートディレクトリを選択できませんでした。再度お試しください。\",\"authentication_aborted\":\"認証が中断されました。再度お試しください。\",\"invalid_token\":\"入力されたトークンが無効です。確認して再度お試しください。\",\"UNSUPPORTED_BACKEND\":\"この認証アプリはお使いの Git バックエンドに対応していません。\",\"UNSUPPORTED_DOMAIN\":\"この認証アプリではお使いのドメインの使用は許可されていません。\",\"MISCONFIGURED_CLIENT\":\"OAuth アプリのクライアント ID またはシークレットが設定されていません。\",\"AUTH_CODE_REQUEST_FAILED\":\"認証コードを取得できませんでした。後で再度お試しください。\",\"CSRF_DETECTED\":\"CSRF 攻撃の可能性が検出されたため、認証フローは中断されました。\",\"TOKEN_REQUEST_FAILED\":\"アクセストークンを要求できませんでした。後で再度お試しください。\",\"TOKEN_REFRESH_FAILED\":\"アクセストークンの更新に失敗しました。後で再度お試しください。\",\"MALFORMED_RESPONSE\":\"サーバーから不正なデータが返されました。後で再度お試しください。\"},\"backend_unsupported_version\":\"{$name} バックエンドには {$name} {$version} 以降のバージョンが必要です。\",\"repository_no_access\":\"あなたには「{$repo}」レポジトリへのアクセス権がありません。\",\"repository_not_found\":\"「{$repo}」レポジトリは存在しません。\",\"repository_empty\":\"「{$repo}」レポジトリにはブランチがありません。\",\"branch_not_found\":\"「{$repo}」レポジトリに「{$branch}」ブランチは存在しません。\",\"unexpected_error\":\"予期せぬエラー\",\"entry_parse_errors\":\"エントリーファイルの読み込み中にエラーが発生しました。詳しくはブラウザーのコンソールを確認してください。\",\"visit_live_site\":\"管理対象サイトを開く\",\"switch_page\":\"ページを切り替え\",\"search_placeholder_contents\":\"コンテンツを検索…\",\"search_placeholder_assets\":\"アセットを検索…\",\"search_placeholder_all\":\"コンテンツとアセットを検索…\",\"create_entry_or_assets\":\"エントリーまたはアセットを作成\",\"publish_changes\":\"変更を公開\",\"publishing_changes\":\"変更を公開しています…\",\"publishing_changes_failed\":\"変更を公開できませんでした。後で再度お試しください。\",\"show_notifications\":\"通知を表示\",\"notifications\":\"通知\",\"show_account_menu\":\"アカウントメニューを表示\",\"account\":\"アカウント\",\"live_site\":\"管理対象サイト\",\"git_repository\":\"Git レポジトリ\",\"settings\":\"設定\",\"cms_config\":\"CMS 設定\",\"show_help_menu\":\"ヘルプメニューを表示\",\"help\":\"ヘルプ\",\"keyboard_shortcuts\":\"キーボードショートカット\",\"documentation\":\"ドキュメンテーション\",\"release_notes\":\"リリースノート\",\"announcements\":\"お知らせ\",\"version_x\":\"バージョン {$version}\",\"report_issue\":\"問題を報告\",\"share_feedback\":\"フィードバックを共有\",\"get_help\":\"サポート\",\"donate\":\"寄付\",\"join_discord\":\"Discord チャンネルに参加\",\"bluesky\":\"Bluesky でフォロー\",\"mobile_promo_title\":\"Sveltia CMS がモバイルに対応しました！\",\"mobile_promo_button\":\"試してみる\",\"update_available\":\"Sveltia CMS の最新版が利用可能です。\",\"update_now\":\"今すぐ更新\",\"backend_status\":{\"minor_incident\":\"{$service} で軽微な障害が発生しています。ワークフローに潜在的な影響が及ぶ可能性があります。\",\"major_incident\":\"{$service} で重大な障害が発生しています。状況が改善されるまで待った方が良いかもしれません。\"},\"content_library\":\"コンテンツライブラリ\",\"asset_library\":\"アセットライブラリ\",\"asset_location\":{\"repository\":\"あなたのサイト\",\"external\":\"外部の場所\",\"stock_photos\":\"ストックフォト\"},\"collection_assets\":\"コレクションアセット\",\"entry_list\":\"エントリーリスト\",\"file_list\":\"ファイルリスト\",\"asset_list\":\"アセットリスト\",\"x_collection\":\"「{$collection}」コレクション\",\"x_asset_folder\":\"「{$folder}」アセットフォルダー\",\"viewing_collection_list\":\"コレクションリストを表示しています。\",\"viewing_asset_folder_list\":\"アセットフォルダーリストを表示しています。\",\"viewing_x_collection\":\".input {$count :integer} .match $count 0 {{「{$collection}」コレクションを表示しています。ここにはまだエントリーがありません。}} one {{「{$collection}」コレクションを表示しています。ここにはひとつのエントリーがあります。}} * {{「{$collection}」コレクションを表示しています。ここには {$count} 個のエントリーがあります。}}\",\"viewing_x_asset_folder\":\".input {$count :integer} .match $count 0 {{「{$folder}」アセットフォルダーを表示しています。ここにはまだアセットがありません。}} one {{「{$folder}」アセットフォルダーを表示しています。ここにはひとつのアセットがあります。}} * {{「{$folder}」アセットフォルダーを表示しています。ここには {$count} 個のアセットがあります。}}\",\"singleton_selected_announcement\":\"「{$file}」ファイルを編集するには Enter キーを押してください。\",\"collection_not_found\":\"コレクションが見つかりませんでした\",\"file_not_found\":\"ファイルが見つかりませんでした\",\"x_of_x_selected\":\"{$total} 個のうち {$selected} 個を選択中\",\"switch_view\":\"ビューを切り替え\",\"list_view\":\"リストビュー\",\"grid_view\":\"グリッドビュー\",\"switch_to_list_view\":\"リストビューに切り替え\",\"switch_to_grid_view\":\"グリッドビューに切り替え\",\"sort\":\"表示順\",\"sorting_options\":\"表示順オプション\",\"sort_keys\":{\"none\":\"なし\",\"name\":\"名前\",\"slug\":\"スラッグ\",\"commit_author\":\"更新者\",\"commit_date\":\"更新日時\",\"_summary\":\"サマリー\",\"_manual\":\"手動\"},\"ascending\":\"{$label} (A–Z)\",\"ascending_date\":\"{$label} (古い順)\",\"descending\":\"{$label} (Z–A)\",\"descending_date\":\"{$label} (新しい順)\",\"filter\":\"絞り込み\",\"filtering_options\":\"絞り込みオプション\",\"group\":\"グループ化\",\"grouping_options\":\"グループ化オプション\",\"type\":\"種類\",\"all\":\"すべて\",\"image\":\"画像\",\"video\":\"動画\",\"audio\":\"音声\",\"document\":\"書類\",\"other\":\"その他\",\"show_assets\":\"アセットを表示\",\"hide_assets\":\"アセットを隠す\",\"show_info\":\"情報を表示\",\"hide_info\":\"情報を隠す\",\"all_assets\":\"すべてのアセット\",\"global_assets\":\"グローバルアセット\",\"entry_not_found\":\"エントリーが見つかりませんでした。\",\"creating_entries_disabled_by_admin\":\"このコレクションへの新しいエントリーの作成は、管理者によって無効化されています。\",\"creating_entries_disabled_by_quota\":\"このコレクションは最大の {$quota} エントリーに達したため、新しいエントリーを作成することはできません。\",\"creating_entries_nearing_quota\":\"このコレクションは {$quota} エントリーの上限に近づいています。あと {$remaining} 件のエントリーしか作成できません。\",\"back_to_collection\":\"コレクションへ戻る\",\"collection_list\":\"コレクションリスト\",\"back_to_collection_list\":\"コレクションリストへ戻る\",\"asset_folder_list\":\"アセットフォルダーリスト\",\"back_to_asset_folder_list\":\"アセットフォルダーリストへ戻る\",\"search_results\":\"検索結果\",\"search_results_for_x\":\"「{$terms}」の検索結果\",\"viewing_entry_search_results\":\".input {$count :integer} .match $count 0 {{「{$terms}」の検索結果を表示しています。エントリーは見つかりませんでした。}} * {{「{$terms}」の検索結果を表示しています。{$count} 件のエントリーが見つかりました。}}\",\"viewing_asset_search_results\":\".input {$count :integer} .match $count 0 {{「{$terms}」の検索結果を表示しています。アセットは見つかりませんでした。}} * {{「{$terms}」の検索結果を表示しています。{$count} 件のアセットが見つかりました。}}\",\"x_entries\":\"{$count} 個のエントリー\",\"x_assets\":\"{$count} 個のアセット\",\"no_files_found\":\"ファイルは見つかりませんでした。\",\"no_entries_found\":\"エントリーは見つかりませんでした。\",\"upload_assets\":\"新しいアセットをアップロード\",\"edit_options\":\"編集オプション\",\"show_edit_options\":\"編集オプションを表示\",\"edit_asset\":\"アセットを編集\",\"edit_x\":\"{$name} を編集\",\"wrap_long_lines\":\"長い行を折り返す\",\"rename_asset\":\"アセットの名前を変更\",\"rename_x\":\"{$name} の名前を変更\",\"enter_new_name_for_asset\":\".input {$count :integer} .match $count 0 {{新しい名前を以下に入力してください。}} one {{新しい名前を以下に入力してください。このアセットを使用している 1 個のエントリーも更新されます。}} * {{新しい名前を以下に入力してください。このアセットを使用している {$count} 個のエントリーも更新されます。}}\",\"enter_new_name_for_asset_error\":{\"empty\":\"ファイル名を空白にすることはできません。\",\"character\":\"ファイル名に特別な文字を含めることはできません。\",\"duplicate\":\"このファイル名は他のアセットに使われています。\"},\"replace_asset\":\"アセットを差し替え\",\"replace_x\":\"{$name} を差し替え\",\"click_to_browse\":\"クリックして参照…\",\"tap_to_browse\":\"タップして参照…\",\"drop_files_or_click_to_browse\":\"ここにファイルをドロップするかクリックして参照…\",\"drop_files_or\":\"ここにファイルをドロップするか\",\"drop_image_files_or\":\"ここに画像ファイルをドロップするか\",\"browse\":\"参照\",\"paste\":\"貼り付け\",\"paste_image\":\"画像を貼り付け\",\"no_image_in_clipboard\":\"クリップボードに画像が見つかりません。\",\"clipboard_access_denied\":\"クリップボードへのアクセスが拒否されました。\",\"drop_files_here\":\"ここにファイルをドロップ\",\"unsupported_file_type\":\"非対応ファイル形式\",\"dropped_file_type_mismatch\":\"ドロップされたファイルは {$type} 形式ではありません。再度お試しください。\",\"dropped_image_type_mismatch\":\"ドロップされたファイルはサポートされていません。AVIF、GIF、JPEG、PNG、WebP または SVG 形式の画像のみが受け入れられます。再度お試しください。\",\"choose_files\":\"ファイルを選択\",\"delete_assets\":\"アセットを削除\",\"delete_selected_assets\":\"選択されたアセットを削除\",\"confirm_deleting_this_asset\":\"このアセットを削除してもよろしいですか？\",\"confirm_deleting_selected_assets\":\".input {$count :integer} .match $count one {{選択されたアセットを削除してもよろしいですか？}} * {{選択された {$count} 個のアセットを削除してもよろしいですか？}}\",\"confirm_deleting_all_assets\":\"すべてのアセットを削除してもよろしいですか？\",\"delete_entries\":\"エントリーを削除\",\"delete_selected_entries\":\"選択されたエントリーを削除\",\"confirm_deleting_this_entry\":\"このエントリーを削除してもよろしいですか？\",\"confirm_deleting_this_entry_with_assets\":\"このエントリーと関連アセットを削除してもよろしいですか？\",\"confirm_deleting_selected_entries\":\".input {$count :integer} .match $count one {{選択されたエントリーを削除してもよろしいですか？}} * {{選択された {$count} 個のエントリーを削除してもよろしいですか？}}\",\"confirm_deleting_selected_entries_with_assets\":\".input {$count :integer} .match $count one {{選択されたエントリーと関連アセットを削除してもよろしいですか？}} * {{選択された {$count} 個のエントリーと関連アセットを削除してもよろしいですか？}}\",\"confirm_deleting_all_entries\":\"すべてのエントリーを削除してもよろしいですか？\",\"confirm_deleting_all_entries_with_assets\":\"すべてのエントリーと関連アセットを削除してもよろしいですか？\",\"reorder_entries\":\"エントリーを並び替え\",\"done_reordering_entries\":\"エントリーの並び替えを完了\",\"cancel_reordering_entries\":\"エントリーの並び替えをキャンセル\",\"saving_reorder_failed\":\"エントリーの並び替えを保存できませんでした。再度お試しください。\",\"processing_files\":\"ファイルを処理しています。これには時間がかかる場合があります。\",\"uploading_files\":\"アップロード対象ファイル\",\"confirm_replacing_file\":\"「{$name}」がこのファイルと置き換えられます:\",\"confirm_uploading_files\":\".input {$count :integer} .match $count one {{このファイルを「{$folder}」フォルダーに保存します:}} * {{これら {$count} 個のファイルを「{$folder}」フォルダーに保存します:}}\",\"oversized_files\":\"サイズ超過ファイル\",\"warning_oversized_files\":\".input {$count :integer} .match $count one {{このファイルは最大サイズ {$size} を超えているため、アップロードできません。サイズを縮小するか、他のファイルを選んでください。}} * {{これらのファイルは最大サイズ {$size} を超えているため、アップロードできません。サイズを縮小するか、他のファイルを選んでください。}}\",\"file_name_conflict_confirmation\":\".input {$count :integer} .match $count one {{同じ名前のファイルがこのフォルダーに既に存在します。置き換えますか？}} * {{{$count} 個のファイルが同じ名前でこのフォルダーに既に存在します。置き換えますか？}}\",\"file_name_conflict_confirmation_with_name\":\".input {$count :integer} .input {$name :string} .match $count one {{\\\"{$name}\\\" という名前のファイルはこのフォルダーに既に存在します。置き換えますか？}} * {{{$count} 個のファイルが同じ名前でこのフォルダーに既に存在します。置き換えますか？}}\",\"file_name_conflict_resolution\":\"ファイル名の競合解決\",\"keep_both\":\"両方とも残す\",\"uploading_files_progress\":\"ファイルをアップロード中…\",\"uploading_files_failed\":\"ファイルをアップロードできませんでした\",\"file_meta\":\"{$type} · {$size}\",\"file_meta_converted_from_x\":\"({$type} から変換)\",\"no_entries_created\":\"このコレクションにはまだエントリーがありません。\",\"create_new_entry\":\"新しいエントリーを作成\",\"entry\":\"エントリー\",\"index_file\":\"インデックスファイル\",\"no_files_in_collection\":\"このコレクションにはファイルがありません。\",\"asset_info\":\"アセット情報\",\"select_asset_show_info\":\"アセットを選択すると情報が表示されます。\",\"duplicate_entry\":\"エントリーを複製\",\"entry_duplicated\":\"エントリーが複製され、新しい下書きとなりました。\",\"entry_validation_errors\":\".input {$count :integer} .match $count one {{ひとつのフィールドにエラーがあります。エントリーを保存するには問題を修正してください。}} * {{{$count} 個のフィールドにエラーがあります。エントリーを保存するには問題を修正してください。}}\",\"entry_saved\":\".input {$count :integer} .match $count one {{エントリーが保存されました。}} * {{{$count} 件のエントリーが保存されました。}}\",\"entry_saved_and_published\":\".input {$count :integer} .match $count one {{エントリーが保存、公開されました。}} * {{{$count} 件のエントリーが保存、公開されました。}}\",\"entries_deleted\":\".input {$count :integer} .match $count one {{エントリーが削除されました。}} * {{{$count} 個のエントリーが削除されました。}}\",\"assets_saved\":\".input {$count :integer} .match $count one {{アセットが保存されました。}} * {{{$count} 個のアセットが保存されました。}}\",\"asset_saved_and_published\":\"アセットが保存、公開されました。\",\"assets_saved_and_published\":\".input {$count :integer} .match $count one {{アセットが保存、公開されました。}} * {{{$count} 個のアセットが保存、公開されました。}}\",\"asset_urls_copied\":\".input {$count :integer} .match $count one {{アセット URL がクリップボードにコピーされました。}} * {{{$count} 個のアセット URL がクリップボードにコピーされました。}}\",\"asset_paths_copied\":\".input {$count :integer} .match $count one {{アセットファイルパスがクリップボードにコピーされました。}} * {{{$count} 個のアセットファイルパスがクリップボードにコピーされました。}}\",\"asset_data_copied\":\".input {$count :integer} .match $count one {{アセットファイルがクリップボードにコピーされました。}} * {{{$count} 個のアセットファイルがクリップボードにコピーされました。}}\",\"assets_downloaded\":\".input {$count :integer} .match $count one {{アセットファイルがダウンロードされました。}} * {{{$count} 個のアセットファイルがダウンロードされました。}}\",\"assets_moved\":\".input {$count :integer} .match $count one {{アセットが移動されました。}} * {{{$count} 個のアセットが移動されました。}}\",\"assets_renamed\":\".input {$count :integer} .match $count one {{アセットの名前が変更されました。}} * {{{$count} 個のアセットの名前が変更されました。}}\",\"assets_deleted\":\".input {$count :integer} .match $count one {{アセットが削除されました。}} * {{{$count} 個のアセットが削除されました。}}\",\"content_editor\":\"コンテンツエディター\",\"restore_backup_title\":\"下書きを復元\",\"restore_backup_description\":\"このエントリーには {$datetime} に保存されたバックアップがあります。その編集済みの下書きを復元しますか？\",\"draft_backup_saved\":\"下書きのバックアップが保存されました。\",\"draft_backup_restored\":\"下書きのバックアップが復元されました。\",\"draft_backup_deleted\":\"下書きのバックアップが削除されました。\",\"cancel_editing\":\"編集をキャンセル\",\"create_entry_title\":\"{$name} を作成\",\"create_entry_announcement\":\"「{$collection}」コレクションの新しいエントリーを作成しています。\",\"edit_entry_title\":\"{$collection} › {$entry}\",\"edit_entry_announcement\":\"「{$collection}」コレクションの「{$entry}」エントリーを編集しています。\",\"edit_file_announcement\":\"「{$collection}」コレクションの「{$file}」ファイルを編集しています。\",\"edit_singleton_announcement\":\"「{$file}」ファイルを編集しています。\",\"save_and_publish\":\"保存して公開\",\"save_without_publishing\":\"公開せずに保存\",\"show_editor_options\":\"エディターオプションを表示\",\"editor_options\":\"エディターオプション\",\"show_preview\":\"プレビューを表示\",\"sync_scrolling\":\"スクロールを同期\",\"switch_locale\":\"ロケールを切り替え\",\"locale_content_disabled_short\":\"(無効)\",\"locale_content_error_short\":\"(エラー)\",\"edit\":\"編集\",\"preview\":\"プレビュー\",\"swap_panes\":\"ペインを入れ替える\",\"edit_x_locale\":\"{$locale} コンテンツを編集\",\"preview_x_locale\":\"{$locale} コンテンツをプレビュー\",\"content_preview\":\"コンテンツプレビュー\",\"show_content_options_x_locale\":\"{$locale} コンテンツのオプションを表示\",\"content_options_x_locale\":\"{$locale} コンテンツのオプション\",\"x_field\":\"「{$field}」フィールド\",\"show_field_options\":\"フィールドオプションを表示\",\"field_options\":\"フィールドオプション\",\"unsupported_field_type_x\":\"非対応フィールドタイプ: {$name}\",\"enable_x_locale\":\"{$locale} を有効化\",\"reenable_x_locale\":\"{$locale} を再度有効化\",\"disable_x_locale\":\"{$locale} を無効化\",\"locale_x_has_been_disabled\":\"{$locale} コンテンツは無効化されています。\",\"locale_x_now_disabled\":\"{$locale} コンテンツは無効化されました。エントリーを保存する際に削除されます。\",\"view_in_repository\":\"レポジトリ内で見る\",\"view_on_x\":\"{$service} で見る\",\"view_on_live_site\":\"管理対象サイトで見る\",\"copy_from\":\"他の言語からコピー…\",\"copy_from_x\":\"{$locale} からコピー\",\"translation_options\":\"翻訳オプション\",\"translate\":\"翻訳\",\"translate_fields\":\"フィールドを翻訳\",\"translate_from\":\"他の言語から翻訳…\",\"translate_from_x\":\"{$locale} から翻訳\",\"revert_changes\":\"変更を取り消す\",\"revert_all_changes\":\"すべての変更を取り消す\",\"edit_slug\":\"スラッグを編集\",\"edit_slug_warning\":\"スラッグを変更すると、エントリーへの内部・外部リンクが壊れる可能性があります。現在のところ、Sveltia CMS は Relation フィールドで作成された参照を更新しないため、そのような参照は他のリンクとともに手動で更新する必要があります。\",\"edit_slug_error\":{\"empty\":\"スラッグは空白にはできません。\",\"invalid\":\"スラッグにはスラッシュや空白を含む特殊文字を使用できません。\",\"duplicate\":\"このスラッグは他のエントリーに使われています。\"},\"required\":\"必須\",\"editor\":{\"translation\":{\"none\":\"翻訳されたフィールドはありません。\",\"started\":\"翻訳中…\",\"error\":\"翻訳中に問題が発生しました。\",\"complete\":\".input {$count :integer} .match $count 0 {{{$source} から翻訳されたフィールドはありません。}} one {{{$source} からフィールドを翻訳しました。}} * {{{$source} から {$count} 個のフィールドを翻訳しました。}}\"},\"copy\":{\"none\":\"コピーされたフィールドはありません。\",\"complete\":\".input {$count :integer} .match $count 0 {{{$source} からコピーされたフィールドはありません。}} one {{{$source} からフィールドをコピーしました。}} * {{{$source} から {$count} 個のフィールドをコピーしました。}}\"}},\"validation\":{\"value_missing\":\"この項目は必須です。\",\"range_underflow\":{\"datetime-local\":\"日時は {$min} かそれ以降でなければなりません。\",\"date\":\"日付は {$min} かそれ以降でなければなりません。\",\"time\":\"時刻は {$min} かそれ以降でなければなりません。\",\"number\":\"値は {$min} 以上でなければなりません。\",\"select\":\"少なくとも {$min} 個の項目を選択してください。\",\"add\":\"少なくとも {$min} 個の項目を追加してください。\"},\"range_overflow\":{\"datetime-local\":\"日時は {$max} かそれ以前でなければなりません。\",\"date\":\"日付は {$max} かそれ以前でなければなりません。\",\"time\":\"時刻は {$max} かそれ以前でなければなりません。\",\"number\":\"値は {$max} 以下でなければなりません。\",\"select\":\"これ以上選択できる項目はありません。最大は {$max} 個です。\",\"add\":\"これ以上追加できる項目はありません。最大は {$max} 個です。\"},\"too_short\":\"少なくとも {$min} 文字は入力してください。\",\"too_long\":\"{$max} 文字を超える入力はできません。\",\"type_mismatch\":{\"number\":\"数値を入力してください。\",\"email\":\"正しいメールアドレスを入力してください。\",\"url\":\"正しい URL を入力してください。\"}},\"entry_sidebar\":{\"sidebar_panels\":\"サイドバーパネル\",\"validation\":{\"title\":\"バリデーション\",\"placeholder\":\"検証結果がここに表示されます。\",\"no_errors_found\":\"エラーは見つかりませんでした。\"},\"history\":{\"title\":\"履歴\",\"fetch_failed\":\"履歴を読み込めませんでした。\",\"no_history\":\"履歴が見つかりませんでした。\"},\"backlinks\":{\"title\":\"バックリンク\",\"no_entries\":\"このエントリーを参照しているエントリーはありません。\"}},\"saving_entry\":{\"error\":{\"title\":\"エラー\",\"description\":\"エントリーを保存中に問題が発生しました。後で再度お試しください。\"}},\"find_place\":\"場所を検索\",\"use_your_location\":\"現在地を使用\",\"geolocation_error_title\":\"位置情報エラー\",\"geolocation_error_body\":\"あなたの現在地を取得できませんでした。\",\"geolocation_unsupported\":\"お使いのブラウザーは位置情報 API をサポートしていません。\",\"viewing_x_asset_details\":\"「{$name}」アセットの詳細を表示しています。\",\"asset_editor\":\"アセットエディター\",\"preview_unavailable\":\"プレビューは表示できません\",\"public_urls\":\"公開 URL\",\"file_paths\":\"ファイルパス\",\"file_data\":\"ファイルデータ\",\"kind\":\"種類\",\"size\":\"サイズ\",\"dimensions\":\"大きさ\",\"duration\":\"再生時間\",\"used_in\":\"使われているエントリー\",\"created_date\":\"作成日時\",\"location\":\"場所\",\"map_lat_lng\":\"緯度 {$latitude}、経度 {$longitude} の地図\",\"remove_this_item\":\"このアイテムを削除\",\"move_up\":\"上へ移動\",\"move_down\":\"下へ移動\",\"add_x\":\"{$name} を追加\",\"add_item_above\":\"上にアイテムを追加\",\"add_item_below\":\"下にアイテムを追加\",\"select_list_type\":\"リストタイプを選択\",\"opacity\":\"透明度\",\"unselected_option\":\"(なし)\",\"assets_dialog\":{\"title\":{\"file\":\"ファイルを選択\",\"image\":\"画像を選択\"},\"search_for_file\":\"ファイルを検索\",\"search_for_image\":\"画像を検索\",\"locations\":\"場所\",\"folder\":{\"field\":\"フィールドアセット\",\"entry\":\"エントリーアセット\",\"file\":\"ファイルアセット\",\"collection\":\"コレクションアセット\",\"global\":\"グローバルアセット\"},\"error\":{\"invalid_key\":\"あなたの API キーは正しくないか期限切れです。確認の上、再度お試しください。\",\"search_fetch_failed\":\"アセットを検索中に問題が発生しました。後で再度お試しください。\",\"image_fetch_failed\":\"選択されたアセットをダウンロード中に問題が発生しました。後で再度お試しください。\"},\"available_images\":\"利用可能な画像\",\"enter_url\":\"URL を入力\",\"enter_file_url\":\"ファイルの URL を入力:\",\"enter_image_url\":\"画像の URL を入力:\",\"large_file\":{\"title\":\"大きなファイル\"},\"photo_credit\":{\"title\":\"写真クレジット\",\"description\":\"可能であれば以下のクレジットを使ってください:\"},\"unsaved\":\"未保存\"},\"character_counter\":{\"min_max\":\".input {$count :integer} .match $count 0 {{文字が入力されていません。最小: {$min}。最大 {$max}。}} * {{{$count} 文字入力されています。最小: {$min}。最大 {$max}。}}\",\"min\":\".input {$count :integer} .match $count 0 {{文字が入力されていません。最小: {$min}}} * {{{$count} 文字入力されています。最小: {$min}。}}\",\"max\":\".input {$count :integer} .match $count 0 {{文字が入力されていません。最大: {$max}。}} * {{{$count} 文字入力されています。最大: {$max}。}}\"},\"youtube_video_player\":\"YouTube 動画プレーヤー\",\"today\":\"今日\",\"now\":\"現在時刻\",\"editor_components\":{\"image\":\"画像\",\"src\":\"ソース\",\"alt\":\"代替テキスト\",\"title\":\"タイトル\",\"link\":\"リンク\"},\"key_value\":{\"key\":\"キー\",\"value\":\"値\",\"action\":\"アクション\",\"empty_key\":\"キーは必須です。\",\"duplicate_key\":\"キーが重複しています。\"},\"boolean\":{\"true\":\"はい\",\"false\":\"いいえ\"},\"cloud_storage\":{\"invalid\":\"このサービスは正しく設定されていません。\",\"auth\":{\"api_key\":{\"key_label\":\"API キー\",\"initial\":\"{$service} の {$key} を入力してください。\",\"requested\":\"検証中…\",\"error\":\"入力された {$key} が無効です。確認の上、再度お試しください。\"},\"password\":{\"initial\":\"{$service} のパスワードを入力してください。\",\"requested\":\"ログイン中…\",\"error\":\"ユーザー名またはパスワードが間違っています。確認の上、再度お試しください。\"}},\"cloudinary\":{\"iframe_title\":\"Cloudinary メディアライブラリ\",\"activate\":{\"button_label\":\"Cloudinary を有効化\",\"description\":\"ログイン後、再度 Sign In ボタンをクリックして続行してください。\"},\"auth_key_label\":\"API Secret\"},\"uploadcare\":{\"auth_key_label\":\"API Secret Key\"},\"aws_s3\":{\"auth_key_label\":\"シークレットアクセスキー\"},\"cloudflare_r2\":{\"auth_key_label\":\"シークレットアクセスキー\"},\"digitalocean_spaces\":{\"auth_key_label\":\"シークレットアクセスキー\"}},\"config\":{\"errors\":\"CMS 設定に問題が見つかりました。問題を解決してから再度お試しください。\",\"error_locator\":{\"collection\":\"{$collection} コレクション\",\"file\":\"{$file} ファイル\",\"field\":\"`{$field}` フィールド\"},\"error\":{\"no_secure_context\":\"Sveltia CMS は HTTPS またはローカルホスト URL でのみ動作します。\",\"insecure_urls\":\"設定ファイルの URL は HTTPS プロトコルまたはローカルホストアドレスを使用する必要があります。\",\"fetch_failed\":\"設定ファイルを読み込めませんでした。\",\"fetch_failed_not_ok\":\"HTTP レスポンスがステータス {$status} で返されました。\",\"fetch_failed_with_manual_init\":\"設定ファイルを取得できませんでした。`config.yml` ファイルの読み込みを防ぐには、`CMS.init()` に渡される設定オブジェクトに [`load_config_file: false`](https://sveltiacms.app/en/docs/api/initialization#providing-a-full-configuration) を追加してください。\",\"parse_failed\":\"設定ファイルを解析できませんでした。\",\"parse_failed_invalid_object\":\"設定ファイルが有効な JavaScript オブジェクトではありません。\",\"parse_failed_unsupported_type\":\"設定ファイルが有効なファイル形式ではありません。サポートされているのは YAML、TOML と JSON のみです。\",\"no_collection\":\"コレクションが定義されていません。\",\"missing_backend\":\"バックエンドが定義されていません。\",\"missing_backend_name\":\"バックエンド名が定義されていません。\",\"unsupported_known_backend\":\"{$name} バックエンドは Sveltia CMS では [非対応です](https://sveltiacms.app/en/docs/migration/netlify-decap-cms#features-not-to-be-implemented)。\",\"unsupported_deprecated_backend\":\"廃止予定の {$name} バックエンドは Sveltia CMS では [非対応です](https://sveltiacms.app/en/docs/migration/netlify-decap-cms#features-not-to-be-implemented)。\",\"unsupported_custom_backend\":\"カスタムバックエンドは Sveltia CMS では [非対応です](https://sveltiacms.app/en/docs/migration/netlify-decap-cms#features-not-to-be-implemented)。\",\"unsupported_backend_suggestion\":\"[サポートされているバックエンド](https://sveltiacms.app/en/docs/backends#supported-backends) のいずれかを使用してください。\",\"missing_repository\":\"レポジトリが定義されていません。\",\"invalid_repository\":\"設定されているレポジトリが正しくありません。この設定は「owner/repo」形式でなければなりません。\",\"oauth_implicit_flow\":\"設定されている認証方式 (暗黙的フロー) は Sveltia CMS では非対応です。代わりに他の [認証方法](https://sveltiacms.app/en/docs/backends/BACKEND_NAME#authentication) を使用してください。\",\"github_pkce_unsupported\":\"GitHub の制約により PKCE 認証はまだサポートされていません。代わりに他の [認証方法](https://sveltiacms.app/en/docs/backends/github#authentication) を使用してください。\",\"oauth_no_app_id\":\"OAuth アプリケーション ID が定義されていません。\",\"no_auth_methods\":\"`auth_methods` オプションには少なくとも 1 つの認証方法を含める必要があります。\",\"missing_media_folder\":\"メディアフォルダーが定義されていません。\",\"invalid_media_folder\":\"設定されているメディアフォルダーが正しくありません。この設定は文字列でなければなりません。\",\"invalid_public_folder\":\"設定されているパブリックフォルダーが正しくありません。この設定は文字列でなければなりません。\",\"public_folder_relative_path\":\"設定されているパブリックフォルダーが正しくありません。この設定は「/」で始まる絶対パスでなければなりません。\",\"public_folder_absolute_url\":\"パブリックフォルダーオプションの絶対 URL は Sveltia CMS では非対応です。\",\"invalid_asset_collections\":\"`asset_collections` オプションが正しくありません。配列である必要があります。\",\"missing_asset_collection_name\":\"アセットコレクション {$count} には `name` オプションを空でない文字列として定義する必要があります。\",\"invalid_asset_collection_name\":\"アセットコレクション名 `{$name}` は無効です。特殊文字を含めることはできません。\",\"duplicate_asset_collection_name\":\"アセットコレクション名は一意でなければなりませんが、`{$name}` が複数回使用されています。\",\"asset_collection_invalid_media_folder\":\"`{$name}` アセットコレクションには、`media_folder` オプションを文字列として定義する必要があります。\",\"invalid_collection_no_options\":\"コレクションは `folder`、`files`、`divider` オプションのいずれかを定義する必要があります。\",\"invalid_collection_multiple_options\":\"コレクションは `folder`、`files`、`divider` オプションを同時に持つことはできません。\",\"file_format_mismatch\":\"拡張子 `{$extension}` は `{$format}` 形式と一致しません。\",\"invalid_slug_slash\":\"スラッグテンプレート `{$slug}` は無効です。スラッシュを含めることはできません。エントリーをサブフォルダーに整理するには、`slug` の代わりに `path` オプションを使用してください。\",\"missing_collection_name\":\"コレクション {$count} には `name` オプションを空でない文字列として定義する必要があります。\",\"invalid_collection_name\":\"コレクション名 `{$name}` は無効です。特殊文字を含めることはできません。\",\"duplicate_collection_name\":\"コレクション名は一意でなければなりませんが、`{$name}` が複数回使用されています。\",\"missing_collection_file_name\":\"コレクションファイル {$count} には `name` オプションを空でない文字列として定義する必要があります。\",\"invalid_collection_file_name\":\"コレクションファイル名 `{$name}` は無効です。特殊文字を含めることはできません。\",\"duplicate_collection_file_name\":\"コレクションファイル名は一意でなければなりませんが、`{$name}` が複数回使用されています。\",\"collection_no_fields\":\"コレクションには少なくとも 1 つのフィールドを定義する必要があります。\",\"collection_file_no_fields\":\"コレクションファイルには少なくとも 1 つのフィールドを定義する必要があります。\",\"collection_file_i18n_required\":\"コレクションファイルには、`file` パスで `locale` プレースホルダーを使用する場合、`i18n` オプションを定義する必要があります。\",\"missing_field_name\":\"フィールド {$count} には `name` オプションを空でない文字列として定義する必要があります。\",\"invalid_field_name\":\"フィールド名 `{$name}` は無効です。特殊文字を含めることはできません。ネストされたフィールドを作成したい場合は、[ドット表記ではなくオブジェクトフィールドを使用してください](https://sveltiacms.app/en/docs/troubleshooting#using-proper-naming-conventions)。\",\"duplicate_field_name\":\"フィールド名は一意でなければなりませんが、`{$name}` が複数回使用されています。\",\"missing_variable_type\":\"変数タイプ {$count} には `name` オプションを空でない文字列として定義する必要があります。\",\"invalid_variable_type\":\"変数タイプ名 `{$name}` は無効です。特殊文字を含めることはできません。\",\"duplicate_variable_type\":\"変数タイプ名は一意でなければなりませんが、`{$name}` が複数回使用されています。\",\"date_field_type\":\"Sveltia CMS では非推奨の Date フィールドタイプはサポートされていません。代わりに `type: date` オプション付きの DateTime フィールドタイプを使用してください。\",\"invalid_timezone\":\"無効なタイムゾーン: {$timeZone}。有効な IANA タイムゾーン識別子を使用してください。例: `America/New_York` または `Asia/Tokyo`。\",\"unsupported_deprecated_option\":\"Sveltia CMS では非推奨の `{$prop}` オプションはサポートされていません。代わりに `{$newProp}` オプションを使用してください。\",\"allow_multiple\":\"Sveltia CMS では `allow_multiple` オプションはサポートされていません。代わりにデフォルトで `false` の `multiple` オプションを使用してください。\",\"invalid_list_field\":\"List フィールドは `field`、`fields`、`types` オプションを同時に持つことはできません。\",\"invalid_list_variable_type\":\"List フィールドの変数タイプが無効です。`widget` オプションは `{$widget}` に設定されていますが、`object` でなければなりません。\",\"invalid_object_field\":\"Object フィールドは `fields` と `types` オプションを同時に持つことはできません。\",\"object_field_missing_fields\":\"Object フィールドは `fields` または `types` オプションのいずれかを定義する必要があります。\",\"relation_field_invalid_collection\":\"参照されている `{$collection}` コレクションは無効であるか定義されていません。\",\"relation_field_invalid_collection_file\":\"参照されている `{$file}` ファイルは無効であるか定義されていません。\",\"relation_field_missing_file_name\":\"ファイルコレクションへの参照には `file` オプションを定義する必要があります。\",\"relation_field_invalid_value_field\":\"参照されている値フィールド `{$field}` は無効であるか定義されていません。\",\"unexpected\":\"予期せぬ問題\"},\"warning\":{\"oauth_no_app_id\":\"OAuth アプリケーション ID が定義されていません。ユーザーがログインするにはアクセストークンを入力する必要があります。\",\"editorial_workflow_unsupported\":\"Sveltia CMS ではまだエディトリアルワークフローはサポートされていません。\",\"open_authoring_unsupported\":\"Sveltia CMS ではまだオープンオーサリングはサポートされていません。\",\"nested_collections_unsupported\":\"Sveltia CMS ではネストされたコレクションはまだサポートされていません。\",\"unsupported_ignored_option\":\"`{$prop}` オプションは Sveltia CMS ではサポートされていません。このオプションは無視されます。\",\"conflicting_timezone_options\":\"`picker_utc` と新しいタイムゾーンオプション (`input_timezone` または `output_utc`) の両方が設定されています。新しいオプションが優先されます。設定から `picker_utc` を削除することを検討してください。\"},\"compatibility_link\":\"詳しくは互換性情報をご覧ください: https://sveltiacms.app/en/docs/migration/netlify-decap-cms#features-not-to-be-implemented\"},\"local_workflow\":{\"indicator\":\"ローカル\",\"unsupported_browser\":\"お使いのブラウザーはローカルワークフローに対応していません。代わりに Chrome か Edge を使ってください。\",\"disabled\":\"お使いのブラウザーではローカルワークフローが無効化されています。<a>有効化する方法はこちら</a>。\"},\"status\":{\"drafts\":\"下書き\",\"in_review\":\"レビュー中\",\"ready\":\"公開可\"},\"categories\":\"カテゴリ\",\"prefs\":{\"changes\":{\"api_key_saved\":\"API キーが保存されました。\",\"api_key_removed\":\"API キーが削除されました。\",\"api_key_invalid\":\"入力された API キーは無効です。再度確認してお試しください。\"},\"error\":{\"permission_denied\":\"ブラウザーストレージ (Cookie) アクセスが拒否されました。許可設定を確認の上、再度お試しください。\"},\"appearance\":{\"title\":\"アピアランス\",\"theme\":\"テーマ\",\"select_theme\":\"テーマを選択\"},\"theme\":{\"auto\":\"自動\",\"dark\":\"ダーク\",\"light\":\"ライト\"},\"language\":{\"title\":\"言語\",\"ui_language\":{\"title\":\"ユーザーインターフェース言語\",\"select_language\":\"言語を選択\"}},\"contents\":{\"title\":\"コンテンツ\",\"editor\":{\"title\":\"エディター\",\"use_draft_backup\":{\"switch_label\":\"エントリーの下書きを自動的にバックアップする\"},\"close_on_save\":{\"switch_label\":\"下書き保存後にエディターを閉じる\"},\"close_with_escape\":{\"switch_label\":\"Escape キーでエディターを閉じる\"}}},\"i18n\":{\"title\":\"国際化\",\"translators\":{\"default\":{\"title\":\"デフォルト翻訳サービス\",\"select_service\":\"サービスを選択\"},\"api_keys\":{\"title\":\"翻訳サービス API キー\",\"description\":\"<a>翻訳サービス</a> の API キーを管理します。\"},\"field_label\":\"{$service} キー\",\"description\":\"<a {$homeHref}>{$service}</a> にユーザー登録して、<a {$apiKeyHref}>発行されたキー</a> をここに入力すると、テキストエントリー項目の素早い翻訳が可能となります。\"}},\"media\":{\"title\":\"メディア\",\"stock_photos\":{\"api_keys\":{\"title\":\"無料画像素材サービス API キー\",\"description\":\"<a>無料画像素材サービス</a> の API キーを管理します。\"},\"field_label\":\"{$service} API キー\",\"description\":\"<a {$homeHref}>{$service} API</a> にユーザー登録して、<a {$apiKeyHref}>発行された API キー</a> をここに入力すると、画像エントリー項目に無料のストックフォトを挿入できます。\",\"credit\":\"写真提供: {$service}\",\"no_services\":\"利用可能な <a>無料画像素材サービス</a> はありません。\"},\"cloud_storage\":{\"api_keys\":{\"title\":\"クラウドストレージサービス API キー\",\"description\":\"<a>クラウドストレージサービス</a> の API キーを管理します。\"},\"field_label\":\"{$service} API キー\",\"no_services\":\"利用可能な <a>クラウドストレージサービス</a> はありません。\"}},\"accessibility\":{\"title\":\"アクセシビリティ\",\"underline_links\":{\"title\":\"リンクに下線を付ける\",\"description\":\"エントリープレビューやユーザーインターフェイスラベル内のリンクに下線を表示します。\",\"switch_label\":\"常に下線を付ける\"}},\"advanced\":{\"title\":\"詳細\",\"beta\":{\"title\":\"ベータ機能\",\"description\":\"不安定あるいは未ローカライズの可能性がある、いくつかのベータ機能を有効化します。\",\"switch_label\":\"ベータプログラムに参加する\"},\"developer_mode\":{\"title\":\"開発者モード\",\"description\":\"詳細なコンソールログやネイティブコンテキストメニューなど、いくつかの開発者向け機能を有効化します。\",\"switch_label\":\"開発者モードを有効にする\"},\"deploy_hook\":{\"title\":\"デプロイフック\",\"description\":\"「変更を公開」を選択して手動でデプロイを実行する際に呼び出すウェブフック URL を入力してください。GitHub Actions を使用する場合は空欄のままで構いません。\",\"url\":{\"field_label\":\"フック URL\",\"saved\":\"フック URL が保存されました。\",\"removed\":\"フック URL が削除されました。\"},\"auth\":{\"field_label\":\"認証ヘッダー (例: Bearer <token>) (オプション)\",\"saved\":\"認証ヘッダーが保存されました。\",\"removed\":\"認証ヘッダーが削除されました。\"}}}},\"keyboard_shortcuts_\":{\"view_content_library\":\"コンテンツライブラリを表示\",\"view_asset_library\":\"アセットライブラリを表示\",\"search\":\"エントリーとアセットを検索\",\"create_entry\":\"新しいエントリーを作成\",\"save_entry\":\"エントリーを保存\",\"cancel_editing\":\"エントリーの編集をキャンセル\"},\"file_type_labels\":{\"avif\":\"AVIF 画像\",\"bmp\":\"Bitmap 画像\",\"gif\":\"GIF 画像\",\"ico\":\"アイコン\",\"jpeg\":\"JPEG 画像\",\"jpg\":\"JPEG 画像\",\"png\":\"PNG 画像\",\"svg\":\"SVG 画像\",\"tif\":\"TIFF 画像\",\"tiff\":\"TIFF 画像\",\"webp\":\"WebP 画像\",\"avi\":\"AVI 動画\",\"m4v\":\"MP4 動画\",\"mov\":\"QuickTime 動画\",\"mp4\":\"MP4 動画\",\"mpeg\":\"MPEG 動画\",\"mpg\":\"MPEG 動画\",\"ogg\":\"Ogg 動画\",\"ogv\":\"Ogg 動画\",\"ts\":\"MPEG 動画\",\"webm\":\"WebM 動画\",\"3gp\":\"3GPP 動画\",\"3g2\":\"3GPP2 動画\",\"aac\":\"AAC 音声\",\"mid\":\"MIDI\",\"midi\":\"MIDI\",\"m4a\":\"MP4 音声\",\"mp3\":\"MP3 音声\",\"oga\":\"Ogg 音声\",\"opus\":\"OPUS 音声\",\"wav\":\"WAV 音声\",\"weba\":\"WebM 音声\",\"csv\":\"CSV スプレッドシート\",\"doc\":\"Word ドキュメント\",\"docx\":\"Word ドキュメント\",\"odp\":\"OpenDocument プレゼンテーション\",\"ods\":\"OpenDocument スプレッドシート\",\"odt\":\"OpenDocument テキスト\",\"pdf\":\"PDF ドキュメント\",\"ppt\":\"PowerPoint プレゼンテーション\",\"pptx\":\"PowerPoint プレゼンテーション\",\"rtf\":\"リッチテキストドキュメント\",\"xls\":\"Excel スプレッドシート\",\"xlsx\":\"Excel スプレッドシート\",\"html\":\"HTML テキスト\",\"js\":\"JavaScript\",\"json\":\"JSON テキスト\",\"md\":\"Markdown テキスト\",\"toml\":\"TOML テキスト\",\"yaml\":\"YAML テキスト\",\"yml\":\"YAML テキスト\"},\"file_size_units\":{\"b\":\"{$size} バイト\",\"kb\":\"{$size} KB\",\"mb\":\"{$size} MB\",\"gb\":\"{$size} GB\",\"tb\":\"{$size} TB\"}};","import { addMessages, locale as appLocale, getLocaleFromNavigator, init } from '@sveltia/i18n';\nimport { getPathInfo } from '@sveltia/utils/file';\nimport { toStore } from 'svelte/store';\n\nimport { prefs } from '$lib/services/user/prefs.svelte';\n\n/**\n * @import { Readable } from 'svelte/store';\n */\n\n/**\n * Current application locale as a Svelte store, derived from `locale` of `sveltia-i18n`.\n * @type {Readable<string>}\n */\nexport const appLocaleStore = toStore(() => appLocale.current);\n\n/**\n * Load strings and initialize the locales.\n * @see https://github.com/sveltia/sveltia-i18n\n * @see https://vitejs.dev/guide/features.html#glob-import\n */\nexport const initAppLocale = () => {\n  // YAML files are transformed into JS objects by the `yamlToJS` Vite plugin at build time\n  const modules = import.meta.glob('$lib/locales/*.yaml', { eager: true, import: 'default' });\n\n  Object.entries(modules).forEach(([path, content]) => {\n    const locale = getPathInfo(path).filename;\n\n    addMessages(locale, /** @type {Record<string, any>} */ (content));\n  });\n\n  init({\n    fallbackLocale: 'en',\n    initialLocale: prefs.locale || (getLocaleFromNavigator() ?? '').split('-')[0] || 'en',\n  });\n};\n","import { isObject } from '@sveltia/utils/object';\n\n/**\n * @import { FilteringConditions, GroupingConditions } from '$lib/types/private';\n */\n\n/**\n * Parse a view configuration that supports both an array (Netlify/Decap CMS compatible) and an\n * object (Static CMS compatible) format.\n * @template {{ name: string, field: string, pattern: string | RegExp }} T\n * @param {T[] | Record<string, any> | undefined} config Raw configuration value.\n * @param {string} optionsKey Property name to extract the options array from when config is an\n * object.\n * @returns {{ options: T[], default?: FilteringConditions | GroupingConditions }} Parsed config.\n */\nexport const parseViewOptions = (config, optionsKey) => {\n  if (Array.isArray(config)) {\n    return { options: config };\n  }\n\n  if (isObject(config)) {\n    const options = config[optionsKey];\n    const defaultName = config.default;\n\n    if (Array.isArray(options)) {\n      const defaultItem = defaultName\n        ? options.find(({ name }) => name === defaultName)\n        : undefined;\n\n      return {\n        options,\n        default: defaultItem\n          ? { field: defaultItem.field, pattern: defaultItem.pattern }\n          : undefined,\n      };\n    }\n  }\n\n  return { options: [] };\n};\n","import { derived } from 'svelte/store';\n\nimport { matchesFilter } from '$lib/services/common/view';\nimport { selectedCollection } from '$lib/services/contents/collection';\nimport { currentView } from '$lib/services/contents/collection/view';\nimport { parseViewOptions } from '$lib/services/contents/collection/view/utils';\nimport { getPropertyValue } from '$lib/services/contents/entry/fields';\nimport { getRegex } from '$lib/services/utils/regex';\n\n/**\n * @import { Entry, FilteringConditions, InternalEntryCollection } 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 * @see https://sveltiacms.app/en/docs/collections/entries#filtering\n */\nexport const parseFilterConfig = (filters) =>\n  /** @type {{ options: ViewFilter[], default?: FilteringConditions }} */\n  (parseViewOptions(filters, 'filters'));\n\n/**\n * Filter the given entries.\n * @param {Entry[]} entries Entry list.\n * @param {InternalEntryCollection} 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 * @see https://sveltiacms.app/en/docs/collections/entries#filtering\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  // Pre-compute regexes once per filter instead of recreating them for every entry.\n  const preparedFilters = validFilters.map(({ field, pattern }) => ({\n    field,\n    pattern,\n    regex: getRegex(pattern),\n  }));\n\n  return entries.filter((entry) =>\n    preparedFilters.every(({ field, pattern, regex }) => {\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\n      if (rawValue === undefined || refValue === undefined) {\n        return false;\n      }\n\n      return matchesFilter(rawValue, pattern, regex) || matchesFilter(refValue, pattern, regex);\n    }),\n  );\n};\n\n/**\n * Initialize view filters for a collection.\n * @internal\n * @param {any} collection Collection (entry or file).\n * @param {(options: ViewFilter[]) => void} set Callback to set the filter options.\n */\nexport const initializeViewFilters = (collection, set) => {\n  // Disable filters for file/singleton collection\n  if (!collection || !('folder' in collection)) {\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\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  initializeViewFilters(collection, set);\n});\n","import { _ } from '@sveltia/i18n';\nimport { derived, get } from 'svelte/store';\n\nimport { buildGroupMap } from '$lib/services/common/view';\nimport { selectedCollection } from '$lib/services/contents/collection';\nimport { currentView } from '$lib/services/contents/collection/view';\nimport { parseViewOptions } from '$lib/services/contents/collection/view/utils';\nimport { getPropertyValue } from '$lib/services/contents/entry/fields';\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 * @see https://sveltiacms.app/en/docs/collections/entries#grouping\n */\nexport const parseGroupConfig = (filters) =>\n  /** @type {{ options: ViewGroup[], default?: GroupingConditions }} */\n  (parseViewOptions(filters, 'groups'));\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 * @see https://sveltiacms.app/en/docs/collections/entries#grouping\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 otherKey = _('other');\n\n  const sortedGroups = buildGroupMap(\n    entries,\n    pattern,\n    (entry) => getPropertyValue({ entry, locale, collectionName, key: field }),\n    otherKey,\n  ).map(([name, _entries]) => ({ name, entries: _entries }));\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 * Initialize view groups for the given collection.\n * @internal\n * @param {InternalCollection | undefined} collection Collection to initialize groups for.\n * @param {(value: ViewGroup[]) => void} set Function to set the groups.\n */\nexport const initializeViewGroups = (collection, set) => {\n  // Disable grouping for file/singleton collection\n  if (!collection || !('folder' in collection)) {\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\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  initializeViewGroups(collection, set);\n});\n","import equal from 'fast-deep-equal';\nimport { get, writable } from 'svelte/store';\n\nimport { initViewSettingsStorage } from '$lib/services/common/view';\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 entry 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  await initViewSettingsStorage(repository, 'contents-view', entryListSettings);\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","/**\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 { sortItemsByKey } from '$lib/services/common/view';\nimport { getIndexFile } from '$lib/services/contents/collection/entries/index-file';\nimport { getOrderFieldKey } from '$lib/services/contents/collection/entries/reorder';\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/fields/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 MARKDOWN_FIELD_KEYS = ['title', 'summary', 'description'];\n\n/**\n * Get a function that computes the sort key for a single entry. Pre-computing this once (O(n))\n * instead of re-computing inside the comparator (O(n log n)) avoids re-parsing dates and stripping\n * Markdown syntax on every comparison.\n * @param {object} args Arguments.\n * @param {string} args.key Sort key field path.\n * @param {StringConstructor | NumberConstructor | DateConstructor | BooleanConstructor} args.type\n * Sort key type.\n * @param {InternalCollection} args.collection Collection.\n * @param {string} args.locale Locale.\n * @param {string} args.collectionName Collection name.\n * @param {DateTimeField | undefined} args.dateFieldConfig DateTime field config, or `undefined` if\n * the field is not a DateTime field.\n * @param {boolean} args.isMarkdownField Whether the field may contain Markdown syntax.\n * @returns {(entry: Entry) => string | number} Sort key getter for one entry.\n */\nexport const getSortKeyGetter = ({\n  key,\n  type,\n  collection,\n  locale,\n  collectionName,\n  dateFieldConfig,\n  isMarkdownField,\n}) => {\n  // Special handling for summary, which uses a generated value instead of a raw field value\n  if (key === '_summary') {\n    return (/** @type {Entry} */ entry) =>\n      getEntrySummary(collection, entry, { locale, useTemplate: true });\n  }\n\n  if (dateFieldConfig) {\n    return (/** @type {Entry} */ entry) => {\n      const raw = getPropertyValue({ entry, locale, collectionName, key });\n\n      return raw ? Number(getDate(raw, dateFieldConfig) ?? 0) : 0;\n    };\n  }\n\n  if (type === String) {\n    return (/** @type {Entry} */ entry) => {\n      const raw = getPropertyValue({ entry, locale, collectionName, key });\n      const str = raw ? String(raw) : '';\n\n      return isMarkdownField ? removeMarkdownSyntax(str) : str;\n    };\n  }\n\n  return (/** @type {Entry} */ entry) => {\n    const raw = getPropertyValue({ entry, locale, collectionName, key });\n\n    return Number(raw ?? 0);\n  };\n};\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 * @see https://sveltiacms.app/en/docs/collections/entries#sorting\n */\nexport const sortEntries = (entries, collection, { key, order } = {}) => {\n  const _entries = [...entries];\n\n  if (key === undefined) {\n    return _entries;\n  }\n\n  const {\n    name: collectionName,\n    _i18n: { defaultLocale: locale },\n  } = collection;\n\n  // The `_manual` special key sorts by the collection’s reorder field. Resolve it to the actual\n  // field key so value lookup works for entries.\n  const orderFieldKey = getOrderFieldKey(collection);\n  const resolvedKey = key === '_manual' ? (orderFieldKey ?? key) : key;\n  const fieldConfig = getField({ collectionName, keyPath: resolvedKey });\n  // The reorder field stores numeric values but may not be defined under the collection’s `fields`,\n  // so it would default to a string sort. Force a numeric sort for it.\n  const isOrderKey = key === '_manual' || resolvedKey === orderFieldKey;\n  const type = isOrderKey ? Number : getSortKeyType({ key, fieldConfig });\n\n  const dateFieldConfig =\n    fieldConfig?.widget === 'datetime' ? /** @type {DateTimeField} */ (fieldConfig) : undefined;\n\n  // Check if the field is a Markdown-enabled field: we use both the field config and a hardcoded\n  // key list to determine this, as some fields may be text fields that contain Markdown syntax.\n  const isMarkdownField =\n    fieldConfig?.widget === 'richtext' ||\n    fieldConfig?.widget === 'markdown' ||\n    MARKDOWN_FIELD_KEYS.includes(key);\n\n  const getSortKey = getSortKeyGetter({\n    key: resolvedKey,\n    type,\n    collection,\n    locale,\n    collectionName,\n    dateFieldConfig,\n    isMarkdownField,\n  });\n\n  const sortKeyMap = Object.fromEntries(_entries.map((entry) => [entry.slug, getSortKey(entry)]));\n\n  sortItemsByKey(_entries, (e) => sortKeyMap[e.slug], !dateFieldConfig && type === String, order);\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 { derived, get, writable } from 'svelte/store';\n\nimport { appLocaleStore } from '$lib/services/app/i18n';\nimport { backend } from '$lib/services/backends';\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 { entryListSettings, initSettings } from '$lib/services/contents/collection/view/settings';\nimport { sortEntries } from '$lib/services/contents/collection/view/sort';\nimport { prefs } from '$lib/services/user/prefs.svelte';\n\n/**\n * @import { Readable, Writable } from 'svelte/store';\n * @import { Entry, EntryListView, InternalEntryCollection } from '$lib/types/private';\n */\n\n/**\n * @typedef {object} CollectionState\n * @property {boolean} isEntryCollection Whether the selected collection is an entry collection.\n * @property {boolean} canCreate Whether new entries can be created in the selected collection.\n * @property {boolean} canDelete Whether entries can be deleted from the selected collection.\n * @property {boolean} canReorder Whether entries in the selected collection can be reordered.\n * @property {number} quota The maximum number of entries allowed in the selected collection.\n * @property {number} remaining The number of additional entries that can be added to the selected\n * collection before reaching the quota.\n * @property {boolean} nearingQuota Whether the number of remaining entries is at or below the\n * warning threshold.\n * @property {boolean} creationDisabled Whether creating new entries is currently disabled, either\n * due to permissions or because the quota has been reached.\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 * Whether the entry collection is in reorder mode, which allows users to reorder entries with a\n * drag-and-drop UI. This is used to control the UI state and behavior when reordering entries in a\n * collection.\n * @type {Writable<boolean>}\n */\nexport const reordering = writable(false);\n\n/**\n * Pending reorder result while the entry collection is in reorder mode. The list contains the\n * collection’s entries in the order the user has arranged them in the UI. It is consumed when the\n * user confirms the reorder, then reset.\n * @type {Writable<Entry[]>}\n */\nexport const reorderedEntries = writable([]);\n\n/**\n * Whether the user has actually moved an entry while in reorder mode. The toolbar Save button uses\n * this to stay disabled until at least one move has happened, so a simple Enter → Save round-trip\n * doesn’t cause a no-op commit.\n * @type {Writable<boolean>}\n */\nexport const reorderDirty = writable(false);\n\n/**\n * View snapshot taken when entering reorder mode, restored on exit so the user’s prior sort/filter/\n * grouping returns once they finish (or cancel) reordering. `undefined` while not in reorder mode.\n * @type {EntryListView | undefined}\n */\nlet viewBeforeReorder;\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 * Threshold for when to show a warning about nearing the quota of entries in an entry collection.\n * This is used in the UI to provide feedback to users when they are close to reaching the maximum\n * number of entries allowed in a collection, based on the collection’s quota settings.\n * @type {number}\n */\nconst QUOTA_WARNING_THRESHOLD = 5;\n\n/**\n * State of the selected collection, including permissions and quota information, used for\n * controlling the UI and providing feedback to users.\n * @type {Readable<CollectionState>}\n */\nexport const collectionState = derived(\n  [listedEntries, selectedCollection],\n  ([_listedEntries, _selectedCollection]) => {\n    if (_selectedCollection?._type === 'entry') {\n      const canCreate = _selectedCollection.create ?? true;\n      const canDelete = _selectedCollection.delete ?? true;\n      const canReorder = !!_selectedCollection.reorder;\n      const quota = _selectedCollection?.limit ?? Infinity;\n      const remaining = quota < Infinity ? quota - _listedEntries.length : Infinity;\n\n      return {\n        isEntryCollection: true,\n        canCreate,\n        canDelete,\n        canReorder,\n        quota,\n        remaining,\n        nearingQuota: remaining > 0 && remaining <= QUOTA_WARNING_THRESHOLD,\n        creationDisabled: !canCreate || remaining <= 0,\n      };\n    }\n\n    return {\n      isEntryCollection: false,\n      canCreate: false,\n      canDelete: false,\n      canReorder: false,\n      quota: Infinity,\n      remaining: Infinity,\n      nearingQuota: false,\n      creationDisabled: false,\n    };\n  },\n);\n\n/**\n * Cache to avoid unnecessary re-processing in `entryGroups` derived store when only\n * `appLocale.current` changes (which is a dependency for localized sort/group labels).\n */\nlet lastListedEntries = /** @type {Entry[] | undefined} */ (undefined);\nlet lastCurrentView = /** @type {EntryListView | undefined} */ (undefined);\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.current` as a dependency because `sortEntries()` and `groupEntries()` may\n  // return localized labels\n  [listedEntries, currentView, appLocaleStore],\n  ([_listedEntries, _currentView], set) => {\n    // Use reference equality: when only `appLocale.current` changes, `listedEntries` and\n    // `currentView` retain the same references, so we can skip expensive re-computation.\n    if (_listedEntries === lastListedEntries && _currentView === lastCurrentView) {\n      return;\n    }\n\n    lastListedEntries = _listedEntries;\n    lastCurrentView = _currentView;\n\n    const collection = /** @type {InternalEntryCollection} */ (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      return;\n    }\n\n    if (_currentView.sort) {\n      entries = sortEntries(entries, collection, _currentView.sort);\n    }\n\n    if (_currentView.filters) {\n      entries = filterEntries(entries, collection, _currentView.filters);\n    }\n\n    set(groupEntries(entries, collection, _currentView.group));\n  },\n);\n\nreordering.subscribe((value) => {\n  if (!value) {\n    reorderedEntries.set([]);\n    reorderDirty.set(false);\n\n    // Restore the snapshot taken when entering reorder mode, if any.\n    if (viewBeforeReorder) {\n      currentView.set(viewBeforeReorder);\n      viewBeforeReorder = undefined;\n    }\n\n    return;\n  }\n\n  // When entering reorder mode, force the entry list to be sorted by the manual order so users see\n  // and arrange entries in the same order they will be persisted. Also clear any active filters or\n  // grouping: reordering operates on the visible entry list, and the order field is a single global\n  // sequence. Filters would cause hidden entries to retain their old order values and collide with\n  // the new 1..N numbering, while grouping splits the list into buckets that can’t be reordered\n  // across, producing global numbers that don’t match user intent.\n  const view = get(currentView);\n\n  // Snapshot so we can restore on exit.\n  viewBeforeReorder = view;\n\n  /** @type {Partial<EntryListView>} */\n  const overrides = {};\n\n  if (view.sort?.key !== '_manual') {\n    overrides.sort = { key: '_manual', order: 'ascending' };\n  }\n\n  if (view.filters?.length) {\n    overrides.filters = [];\n  }\n\n  if (view.group) {\n    overrides.group = null;\n  }\n\n  if (Object.keys(overrides).length) {\n    currentView.set({ ...view, ...overrides });\n  }\n});\n\nbackend.subscribe((_backend) => {\n  if (_backend && !get(entryListSettings)) {\n    initSettings(_backend);\n  }\n});\n\nlistedEntries.subscribe((entries) => {\n  selectedEntries.set([]);\n\n  if (prefs.devModeEnabled) {\n    // eslint-disable-next-line no-console\n    console.info('listedEntries', entries);\n  }\n});\n\nselectedCollection.subscribe((collection) => {\n  // Reset the reorder state when switching collections, to avoid accidentally reordering entries in\n  // the wrong collection or leaving the UI in a broken state if the new collection doesn’t support\n  // reordering. Discard any view snapshot first so it isn’t restored against the wrong collection,\n  // which would otherwise corrupt the new collection’s persisted view via `entryListSettings`.\n  viewBeforeReorder = undefined;\n  reordering.set(false);\n\n  if (collection && prefs.devModeEnabled) {\n    // eslint-disable-next-line no-console\n    console.info('selectedCollection', collection);\n  }\n});\n","import { _ } from '@sveltia/i18n';\nimport { unique } from '@sveltia/utils/array';\nimport { isObject } from '@sveltia/utils/object';\nimport equal from 'fast-deep-equal';\nimport { derived, get } from 'svelte/store';\n\nimport { appLocaleStore } from '$lib/services/app/i18n';\nimport { allEntries } from '$lib/services/contents';\nimport { selectedCollection } from '$lib/services/contents/collection';\nimport { getOrderFieldKey } from '$lib/services/contents/collection/entries/reorder';\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';\nimport { isNumeric } from '$lib/services/utils/number';\n\n/**\n * @import { Readable } from 'svelte/store';\n * @import { InternalEntryCollection, 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 * @see https://sveltiacms.app/en/docs/collections/entries#sorting\n */\nexport const DEFAULT_SORT_KEYS = ['title', 'name', 'date', 'author', 'description'];\n\n/**\n * Supported sort orders.\n * @type {SortOrder[]}\n */\nexport const SORT_ORDERS = ['ascending', 'descending'];\n\n/**\n * Common date field keys that require special handling in sorting.\n * @type {string[]}\n */\nexport const DATE_FIELDS = ['date', 'commit_date'];\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  _summary: String,\n  _manual: String,\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 {arr is string[]} 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: 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 } = customSortableFields;\n\n    if (!isValidArray(keys)) {\n      return { keys: [] };\n    }\n\n    if (!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 {InternalEntryCollection} 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    summary: summaryTemplate,\n  } = collection;\n\n  let { keys, defaultKey, defaultOrder } = customSortableFields\n    ? parseCustomSortableFields(customSortableFields)\n    : getDefaultSortKeys(customIdField);\n\n  // Special handling for summary field: if the collection has a summary template defined, we add\n  // `_summary` as a special sort key, which uses the generated summary value\n  if (summaryTemplate) {\n    keys.unshift('_summary');\n  }\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  // If the collection allows reordering, expose a single special `_manual` sort key that maps to\n  // the order field. We hide the raw order field key from the dropdown — even if the user listed it\n  // in `sortable_fields` — to avoid showing two equivalent options.\n  const orderKey = getOrderFieldKey(collection);\n\n  if (orderKey) {\n    keys = keys.filter((key) => key !== orderKey);\n\n    if (!keys.includes('_manual')) {\n      keys.unshift('_manual');\n    }\n\n    defaultKey = '_manual';\n    defaultOrder = 'ascending';\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 {InternalEntryCollection} 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 _(`sort_keys.${key}`);\n  }\n\n  if (key.includes('.')) {\n    return key\n      .split('.')\n      .map((_key, index, arr) => {\n        if (isNumeric(_key)) {\n          return undefined;\n        }\n\n        const keyPath = arr.slice(0, index + 1).join('.');\n\n        // @ts-ignore Hidden field doesn’t have `label` property\n        return getField({ collectionName: collection.name, keyPath })?.label || _key;\n      })\n      .filter(Boolean)\n      .join(' – ');\n  }\n\n  // @ts-ignore Hidden field doesn’t have `label` property\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.current` as a dependency because `getSortKeyLabel()` may return a localized\n  // label\n  [selectedCollection, allEntries, appLocaleStore],\n  ([collection, _allEntries], set) => {\n    // Disable sorting for file/singleton collection\n    if (!collection || !('folder' in collection)) {\n      set([]);\n\n      return;\n    }\n\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","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Divider, Menu, MenuButton, MenuItemRadio } from '@sveltia/ui';\n\n  import { DATE_FIELDS, SORT_ORDERS } from '$lib/services/contents/collection/view/sort-keys';\n  import { getField } from '$lib/services/contents/entry/fields';\n\n  /**\n   * @import { Writable } from 'svelte/store';\n   * @import { AssetListView, EntryListView } 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</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 SORT_ORDERS as order (order)}\n          <MenuItemRadio\n            label={_(\n              DATE_FIELDS.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        {#if key === '_summary' && sortKeys.length > 1}\n          <Divider />\n        {/if}\n      {/each}\n    </Menu>\n  {/snippet}\n</MenuButton>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Button, Icon, SelectButton, SelectButtonGroup } from '@sveltia/ui';\n\n  import { env } from '$lib/services/user/env.svelte';\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 env.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>\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 { _ } from '@sveltia/i18n';\nimport { derived } from 'svelte/store';\n\nimport { appLocaleStore } from '$lib/services/app/i18n';\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.current` as a dependency because it returns a localized label\n  [allAssets, appLocaleStore],\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: _(`sort_keys.${key}`) })));\n  },\n);\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Button, Divider, Icon, Spacer, Toolbar } from '@sveltia/ui';\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 { env } from '$lib/services/user/env.svelte';\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 !(env.isSmallScreen || env.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 !(env.isSmallScreen || env.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>\n  .wrapper {\n    flex: auto;\n    display: flex;\n    flex-direction: column;\n    overflow: hidden;\n    height: 100%;\n    background-color: var(--sui-primary-background-color);\n\n    @media (768px <= width) {\n      view-transition-name: page-main;\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  :global(.resizable-pane) > .wrapper {\n    border-start-start-radius: 16px;\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-start-start-radius: 16px;\n        }\n\n        [role='listbox'] {\n          padding: 12px;\n        }\n      }\n    }\n  }\n</style>\n","<script>\n  import { ResizableHandle, ResizablePane, ResizablePaneGroup } from '@sveltia/ui';\n  import { IndexedDB } from '@sveltia/utils/storage';\n  import { get } from 'svelte/store';\n\n  import { hasOverlay } from '$lib/services/app/navigation';\n  import { backend } from '$lib/services/backends';\n  import { env } from '$lib/services/user/env.svelte';\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 {string} [uiSettingsKey] Key for storing UI settings in IndexedDB. If not provided,\n   * the sidebar width will not be persisted.\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    uiSettingsKey = undefined,\n    primarySidebar = undefined,\n    main = undefined,\n    ...rest\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {HTMLElement | undefined} */\n  let container = $state();\n  /** @type {number | undefined} */\n  let sidebarWidth = $state();\n\n  /** @type {IndexedDB | null} */\n  let uiSettingsDB = null;\n\n  /**\n   * Restore the sidebar width from IndexedDB, or use the default width if not set.\n   */\n  const restoreSidebarWidth = async () => {\n    if (!uiSettingsKey) return;\n\n    const { databaseName } = get(backend)?.repository ?? {};\n\n    uiSettingsDB = databaseName ? new IndexedDB(databaseName, 'ui-settings') : null;\n    sidebarWidth = (await uiSettingsDB?.get(uiSettingsKey))?.sidebarWidth ?? 240;\n  };\n\n  /**\n   * Save the sidebar width to IndexedDB.\n   * @param {number} percent Sidebar width as a percentage of the container’s width.\n   */\n  const saveSidebarWidth = async (percent) => {\n    if (!uiSettingsDB || !uiSettingsKey || !container) return;\n\n    await uiSettingsDB.set(uiSettingsKey, {\n      ...(await uiSettingsDB.get(uiSettingsKey)),\n      sidebarWidth: Math.round(container.clientWidth * (percent / 100)),\n    });\n  };\n\n  $effect.pre(() => {\n    void [$hasOverlay];\n\n    // `ResizablePaneGroup` doesn’t work well when the container is inert, so we need to wait until\n    // the overlay is actually gone before restoring the sidebar width.\n    window.requestAnimationFrame(() => {\n      if (!$hasOverlay) {\n        restoreSidebarWidth();\n      }\n    });\n  });\n</script>\n\n<div\n  role=\"group\"\n  id=\"page-container\"\n  class=\"outer {className}\"\n  inert={$hasOverlay}\n  {...rest}\n  bind:this={container}\n>\n  {#if env.isSmallScreen || !primarySidebar || !main}\n    {@render primarySidebar?.()}\n    {@render main?.()}\n  {:else if sidebarWidth !== undefined}\n    <ResizablePaneGroup\n      onResize={({ sizes }) => {\n        saveSidebarWidth(sizes[0]);\n      }}\n    >\n      <ResizablePane defaultSize=\"{sidebarWidth}px\" minSize=\"160px\" maxSize=\"480px\">\n        {@render primarySidebar()}\n      </ResizablePane>\n      <ResizableHandle />\n      <ResizablePane>\n        {@render main()}\n      </ResizablePane>\n    </ResizablePaneGroup>\n  {/if}\n</div>\n\n<style>\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        overflow-y: auto;\n        height: 100%;\n\n        @media (width < 768px) {\n          flex: auto;\n          width: auto;\n          background-color: var(--sui-primary-background-color);\n        }\n\n        /* Mobile header */\n        header {\n          display: flex;\n          align-items: center;\n          justify-content: space-between;\n          padding: 0 10px;\n          height: var(--sui-primary-toolbar-size);\n\n          h2 {\n            padding: 0 10px;\n            font-size: var(--sui-font-size-x-large);\n          }\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: start;\n\n            @media (pointer: coarse) {\n              height: 48px;\n            }\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 { locale as appLocale } from '@sveltia/i18n';\n  import { 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 { 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.current}\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","/**\n * @typedef {Map<string, string>} NormalizedValueCache\n */\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 * @see https://stackoverflow.com/q/990904\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 * Get a normalized value, using the provided per-search cache when available.\n * @param {string} value Original value.\n * @param {NormalizedValueCache} [normalizedValueCache] Normalized value cache.\n * @returns {string} Normalized value.\n */\nconst getNormalizedValue = (value, normalizedValueCache = undefined) => {\n  if (!normalizedValueCache) {\n    return normalize(value);\n  }\n\n  const cachedValue = normalizedValueCache.get(value);\n\n  if (cachedValue !== undefined) {\n    return cachedValue;\n  }\n\n  const normalizedValue = normalize(value);\n\n  normalizedValueCache.set(value, normalizedValue);\n\n  return normalizedValue;\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 * @param {NormalizedValueCache} [args.normalizedValueCache] Normalized value cache.\n * @returns {boolean} Result of the match check.\n */\nexport const hasMatch = ({ value, terms, normalizedValueCache = undefined }) =>\n  getNormalizedValue(value, normalizedValueCache).includes(terms);\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 * @import { NormalizedValueCache } from '$lib/services/search/util';\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  /** @type {NormalizedValueCache} */\n  const normalizedValueCache = new Map();\n\n  return assets.filter((asset) => hasMatch({ value: asset.name, terms, normalizedValueCache }));\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 { _ } from '@sveltia/i18n';\n  import { EmptyState, Group, InfiniteScroll } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\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    $announcedPageStatus = _('viewing_asset_search_results', {\n      values: {\n        terms: $searchTerms,\n        count: $assetSearchResults.length,\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 { locale as appLocale } from '@sveltia/i18n';\n  import { GridCell, GridRow, TruncatedText } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\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 { Entry, InternalCollection, InternalCollectionFile } 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(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.current}\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.current}\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';\n\nimport { appLocaleStore } from '$lib/services/app/i18n';\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 * @import { NormalizedValueCache } from '$lib/services/search/util';\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 * @param {NormalizedValueCache} [args.normalizedValueCache] Normalized value cache.\n * @returns {number} Points scored for the entry based on matches.\n */\nexport const scanEntry = ({ entry, terms, normalizedValueCache = undefined }) => {\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, normalizedValueCache })) {\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, normalizedValueCache }),\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, normalizedValueCache })) {\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' &&\n          !!value &&\n          hasMatch({ value, terms, normalizedValueCache })) ||\n        (typeof value === 'number' &&\n          hasMatch({ value: String(value), terms, normalizedValueCache })),\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  /** @type {NormalizedValueCache} */\n  const normalizedValueCache = new Map();\n\n  return entries\n    .map((entry) => ({ entry, points: scanEntry({ entry, terms, normalizedValueCache }) }))\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.current` as a dependency because `getEntrySummary()` may return a localized\n  // label\n  [allEntries, searchTerms, appLocaleStore],\n  ([entries, terms]) => searchEntries({ entries, terms }),\n);\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { EmptyState, Group, InfiniteScroll } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\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    $announcedPageStatus = _('viewing_entry_search_results', {\n      values: {\n        terms: $searchTerms,\n        count: $entrySearchResults.length,\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 '@sveltia/i18n';\n  import { Toolbar } from '@sveltia/ui';\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 { env } from '$lib/services/user/env.svelte';\n</script>\n\n<div role=\"none\" class=\"wrapper\">\n  {#if !env.isSmallScreen}\n    <Toolbar variant=\"primary\">\n      <h2 role=\"none\">{_('search_results')}</h2>\n    </Toolbar>\n  {/if}\n  <div role=\"none\" class=\"results\">\n    {#if $searchMode === 'contents'}\n      <EntryResults />\n    {/if}\n    {#if $searchMode === 'assets'}\n      <AssetResults />\n    {/if}\n  </div>\n</div>\n\n<style>\n  .wrapper {\n    flex: auto;\n    display: flex;\n    flex-direction: column;\n    overflow: hidden;\n    width: 100%;\n    background-color: var(--sui-primary-background-color);\n  }\n\n  .results {\n    flex: auto;\n    overflow: auto;\n\n    :global {\n      & > .sui.group {\n        display: contents;\n\n        & > .inner > div {\n          display: contents;\n        }\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 { _ } from '@sveltia/i18n';\n  import { Toolbar } from '@sveltia/ui';\n\n  import PageContainerMainArea from '$lib/components/common/page-container-main-area.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 } from '$lib/services/app/navigation';\n  import { searchMode, searchTerms } from '$lib/services/search';\n  import { env } from '$lib/services/user/env.svelte';\n</script>\n\n<PageContainerMainArea>\n  {#snippet primaryToolbar()}\n    {#if env.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\n<style>\n  [role='search'] {\n    display: contents;\n\n    :global {\n      .sui.search-bar {\n        flex: auto;\n      }\n    }\n  }\n</style>\n","import { get } from 'svelte/store';\n\nimport { searchMode, searchTerms } from '$lib/services/search';\n\nconst ROUTE_REGEX = /^\\/search\\/(?<terms>.+)$/;\n\n/**\n * Navigate to the search results page with the given path. The path should be in the format of\n * `/search/{terms}`.\n * @param {string} path Path to navigate to.\n * @returns {boolean} Whether the path is a search route.\n */\nexport const isSearchRoute = (path) => {\n  const { groups } = path.match(ROUTE_REGEX) ?? {};\n\n  if (!groups) {\n    // Not a search route\n    return false;\n  }\n\n  const { terms } = groups;\n\n  if (terms && terms !== get(searchTerms)) {\n    searchTerms.set(terms);\n  }\n\n  if (!get(searchMode)) {\n    searchMode.set('contents');\n  }\n\n  return true;\n};\n","<script>\n  import { _, locale as appLocale } from '@sveltia/i18n';\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\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 SearchMainArea from '$lib/components/search/search-main-area.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 { isSearchRoute } from '$lib/services/search/navigation';\n  import { env } from '$lib/services/user/env.svelte';\n\n  const ROUTE_REGEX = /^\\/assets(?:\\/(?<folderPath>.+?)(?:\\/(?<fileName>[^/]+\\.[A-Za-z0-9]+))?)?$/;\n\n  let isIndexPage = $state(false);\n  let isSearchPage = $state(false);\n\n  const selectedAssetFolderLabel = $derived(\n    // `appLocale.current` is a key, because `getFolderLabelByCollection` can return a localized\n    // label\n    appLocale.current && $selectedAssetFolder\n      ? getFolderLabelByCollection($selectedAssetFolder)\n      : '',\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    isSearchPage = false;\n\n    if (!match?.groups) {\n      $showAssetOverlay = false;\n      // Check if it’s the search page, which has a different URL pattern (`#/search/{query}`)\n      isSearchPage = isSearchRoute(path);\n\n      return; // Different page\n    }\n\n    const { folderPath, fileName } = match.groups;\n\n    if (!folderPath) {\n      if (env.isSmallScreen) {\n        // Show the asset folder list only\n        $selectedAssetFolder = undefined;\n        $showAssetOverlay = false;\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      // Wait for `selectedAssetFolderLabel` to be updated\n      await sleep(100);\n\n      $showAssetOverlay = false;\n      $announcedPageStatus = _('viewing_x_asset_folder', {\n        values: {\n          folder: selectedAssetFolderLabel,\n          count: $listedAssets.length,\n        },\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    return () => {\n      $showAssetOverlay = false;\n    };\n  });\n</script>\n\n<svelte:window\n  onhashchange={(event) => {\n    updateContentFromHashChange(event, navigate, ROUTE_REGEX);\n  }}\n/>\n\n<PageContainer uiSettingsKey=\"assets-page\" aria-label={_('asset_library')}>\n  {#snippet primarySidebar()}\n    {#if !env.isSmallScreen || isIndexPage}\n      <PrimarySidebar {isSearchPage} />\n    {/if}\n  {/snippet}\n  {#snippet main()}\n    {#if isSearchPage}\n      <SearchMainArea />\n    {:else if !env.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{#if $showAssetOverlay}\n  <AssetDetailsOverlay />\n{/if}\n\n<EditAssetDialog />\n<RenameAssetDialog />\n\n<Toast bind:show={$assetUpdatesToast.saved}>\n  <Alert status=\"success\">\n    {_($assetUpdatesToast.published ? 'assets_saved_and_published' : 'assets_saved', {\n      values: { count: $assetUpdatesToast.count },\n    })}\n  </Alert>\n</Toast>\n\n<Toast bind:show={$assetUpdatesToast.moved}>\n  <Alert status=\"success\">\n    {_('assets_moved', { values: { count: $assetUpdatesToast.count } })}\n  </Alert>\n</Toast>\n\n<Toast bind:show={$assetUpdatesToast.renamed}>\n  <Alert status=\"success\">\n    {_('assets_renamed', { values: { count: $assetUpdatesToast.count } })}\n  </Alert>\n</Toast>\n\n<Toast bind:show={$assetUpdatesToast.deleted}>\n  <Alert status=\"success\">\n    {_('assets_deleted', { values: { count: $assetUpdatesToast.count } })}\n  </Alert>\n</Toast>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Alert, ConfirmationDialog, Radio, RadioGroup } from '@sveltia/ui';\n\n  import UploadAssetsPreview from '$lib/components/assets/shared/upload-assets-preview.svelte';\n  import {\n    getAssetsByDirName,\n    getDuplicateFiles,\n    processedAssets,\n    uploadingAssets,\n  } 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  let replaceFiles = $state(true);\n\n  const { files: originalFiles, folder, originalAssets } = $derived($uploadingAssets);\n  const originalAsset = $derived(originalAssets?.[0]);\n  const { processing, undersizedFiles, oversizedFiles, transformedFileMap } =\n    $derived($processedAssets);\n  const { max_file_size: maxSize } = $derived(getDefaultMediaLibraryOptions().config);\n  const assetsInSameFolder = $derived(\n    originalAsset || folder?.internalPath === undefined\n      ? []\n      : getAssetsByDirName(folder.internalPath),\n  );\n  const dupFiles = $derived(getDuplicateFiles(files, assetsInSameFolder));\n  const dupFileCount = $derived(dupFiles.length);\n\n  $effect(() => {\n    files = [...undersizedFiles];\n    replaceFiles = true;\n  });\n\n  $effect(() => {\n    if (!$showAssetOverlay) {\n      // Close the dialog\n      $uploadingAssets = { folder: undefined, files: [] };\n    }\n  });\n</script>\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    const original = originalAsset ? originalAssets : replaceFiles ? assetsInSameFolder : [];\n\n    await saveAssets({ files, folder, originalAssets: original }, { 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      {_('processing_files', { values: { count: originalFiles.length } })}\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          {_('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        {_('warning_oversized_files', {\n          values: {\n            count: oversizedFiles.length,\n            size: formatSize(/** @type {number} */ (maxSize)),\n          },\n        })}\n      </Alert>\n      <UploadAssetsPreview files={oversizedFiles} {transformedFileMap} removable={false} />\n    </div>\n  {/if}\n  {#if dupFileCount}\n    <div role=\"group\" class=\"section\">\n      {_('file_name_conflict_confirmation', { values: { count: dupFileCount } })}\n      <RadioGroup\n        aria-label={_('file_name_conflict_resolution')}\n        onChange={({ detail }) => {\n          replaceFiles = detail.value === 'replace';\n        }}\n      >\n        <Radio value=\"replace\" checked={replaceFiles}>{_('replace')}</Radio>\n        <Radio value=\"keep\" checked={!replaceFiles}>{_('keep_both')}</Radio>\n      </RadioGroup>\n    </div>\n  {/if}\n</ConfirmationDialog>\n\n<style>\n  .section {\n    display: flex;\n    flex-direction: column;\n    gap: 12px;\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 { _ } from '@sveltia/i18n';\n  import { Dialog, FilePicker } from '@sveltia/ui';\n  import mime from 'mime';\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 { env } from '$lib/services/user/env.svelte';\n\n  /** @type {FilePicker | undefined} */\n  let filePicker = $state();\n\n  const { originalAssets } = $derived($uploadingAssets);\n  // Use the first asset because replacement only supports one asset for now\n  const originalAsset = $derived(originalAssets?.[0]);\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      originalAssets,\n    };\n    $showUploadAssetsDialog = false;\n  };\n\n  $effect(() => {\n    // Open the file picker directly if drag & drop is not supported (on mobile)\n    if (!env.hasMouse && $showUploadAssetsDialog) {\n      filePicker?.open();\n    }\n  });\n\n  $effect(() => {\n    if (!$showAssetOverlay) {\n      $showUploadAssetsDialog = false;\n    }\n  });\n</script>\n\n{#if env.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 '@sveltia/i18n';\n  import { stringify } from 'yaml';\n\n  import PageContainer from '$lib/components/common/page-container.svelte';\n  import { rawCmsConfig } from '$lib/services/config';\n</script>\n\n<PageContainer aria-label={_('site_configuration_editor')}>\n  {#snippet main()}\n    <div role=\"blockquote\" aria-label={_('cms_config')}>\n      <pre>{stringify(rawCmsConfig)}</pre>\n    </div>\n  {/snippet}\n</PageContainer>\n\n<style>\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    min-height: -moz-available;\n    min-height: -webkit-fill-available;\n    min-height: stretch;\n    background-color: var(--sui-primary-background-color);\n  }\n</style>\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\nconst PATH_MATCH_REGEX = /(?<path>.+?)\\.[^.]*$/;\n\n/**\n * Copy the default locale value to other locales if the field’s i18n strategy is `duplicate`.\n * @internal\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.sourceLanguage Source locale.\n * @param {any} args.value Value to copy to other locales.\n */\nexport const copyDefaultLocaleValue = ({ getFieldArgs, fieldConfig, sourceLanguage, value }) => {\n  const { keyPath } = getFieldArgs;\n\n  Object.entries(/** @type {EntryDraft} */ (get(entryDraft)).currentValues).forEach(\n    ([targetLanguage, content]) => {\n      // Don’t duplicate the value if the parent object doesn’t exist\n      if (keyPath.includes('.')) {\n        // The regex always matches since keyPath is guaranteed to contain a dot (checked above).\n        const parentKeyPath = /** @type {string} */ (keyPath.match(PATH_MATCH_REGEX)?.groups?.path);\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}}/') && value.startsWith(`${sourceLanguage}/`)) {\n          value = `${targetLanguage}/${value.slice(sourceLanguage.length + 1)}`;\n        }\n      }\n\n      if (targetLanguage !== sourceLanguage && 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: sourceLanguage,\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  /**\n   * Check if auto-duplication should be performed for the given field.\n   * @param {Field} fieldConfig Field configuration.\n   * @returns {boolean} True if auto-duplication should be performed.\n   */\n  const shouldAutoDuplicate = (fieldConfig) =>\n    get(i18nAutoDupEnabled) && fieldConfig.i18n === 'duplicate' && sourceLanguage === defaultLocale;\n\n  /**\n   * Get field configuration for the given key path.\n   * @param {object} obj The proxy target object.\n   * @param {FieldKeyPath} keyPath The field key path.\n   * @returns {{ valueMap: any, getFieldArgs: GetFieldArgs, fieldConfig: Field | undefined }}\n   * Field info.\n   */\n  const getFieldInfo = (obj, keyPath) => {\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    return { valueMap, getFieldArgs, fieldConfig };\n  };\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 { fieldConfig, getFieldArgs } = getFieldInfo(obj, keyPath);\n\n      if (!fieldConfig) {\n        return true;\n      }\n\n      const validity = get(entryDraft)?.validities?.[sourceLanguage]?.[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: sourceLanguage })) {\n          validity.valueMissing = !value;\n        }\n      }\n\n      // Copy value to other locales\n      if (shouldAutoDuplicate(fieldConfig)) {\n        copyDefaultLocaleValue({ getFieldArgs, fieldConfig, sourceLanguage, value });\n      }\n\n      return true;\n    },\n    // eslint-disable-next-line jsdoc/require-jsdoc\n    deleteProperty: (obj, /** @type {FieldKeyPath} */ keyPath) => {\n      delete obj[keyPath];\n\n      const { fieldConfig } = getFieldInfo(obj, keyPath);\n\n      if (!fieldConfig) {\n        return true;\n      }\n\n      // Remove the property from other locales\n      if (shouldAutoDuplicate(fieldConfig)) {\n        Object.entries(/** @type {EntryDraft} */ (get(entryDraft)).currentValues).forEach(\n          ([targetLanguage, content]) => {\n            if (targetLanguage !== sourceLanguage && keyPath in content) {\n              delete content[keyPath];\n            }\n          },\n        );\n      }\n\n      return true;\n    },\n  });\n};\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 { cmsConfigVersion } from '$lib/services/config';\nimport { getOrderFieldKey } from '$lib/services/contents/collection/entries/reorder';\nimport {\n  entryDraft,\n  entryDraftInteracted,\n  entryDraftModified,\n  i18nAutoDupEnabled,\n} from '$lib/services/contents/draft';\nimport { createProxy } from '$lib/services/contents/draft/create/proxy';\nimport { prefs } from '$lib/services/user/prefs.svelte';\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?: (value?: boolean) => void }>}\n */\nexport const restoreDialogState = writable({ show: false });\n\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.cmsConfigVersion === get(cmsConfigVersion)) {\n    return backup;\n  }\n\n  // Discard the backup if the CMS 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 (!(prefs.useDraftBackup ?? true) || !get(entryDraftInteracted)) {\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      cmsConfigVersion: /** @type {string} */ (get(cmsConfigVersion)),\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 * @internal\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 */\nexport const restoreBackup = ({ backup, collectionName, fileName }) => {\n  const { currentLocales, currentSlugs, currentValues, files } = backup;\n  const fileURLs = new Map();\n\n  i18nAutoDupEnabled.set(false);\n\n  entryDraft.update((draft) => {\n    if (draft) {\n      draft.currentLocales = currentLocales;\n      draft.currentSlugs = currentSlugs;\n\n      // Reconcile a stale manual-sort order field. The backup may have been taken before another\n      // reorder/renumber operation rewrote this entry’s `order`. For existing entries, prefer the\n      // value persisted on the live entry; for new entries, drop the field entirely so\n      // `assignManualSortOrder` can compute a fresh value at save time. Without this, restoring an\n      // old backup would clobber the latest order with a stale one.\n      const orderKey = getOrderFieldKey(draft.collection);\n\n      Object.entries(currentValues).forEach(([locale, valueMap]) => {\n        if (orderKey && orderKey in valueMap) {\n          const liveOrder = draft.originalEntry?.locales[locale]?.content?.[orderKey];\n\n          if (liveOrder !== undefined) {\n            valueMap[orderKey] = liveOrder;\n          } else {\n            delete valueMap[orderKey];\n          }\n        }\n\n        Object.entries(valueMap).forEach(([keyPath, value]) => {\n          if (typeof value === 'string') {\n            [...value.matchAll(getBlobRegex('g'))].forEach(([blobURL]) => {\n              const cache = files[blobURL];\n              const { file } = cache ?? {};\n\n              if (!cache || !file) {\n                return;\n              }\n\n              let newURL = '';\n\n              if (fileURLs.has(file)) {\n                newURL = fileURLs.get(file);\n              } else {\n                // Regenerate a blob URL\n                newURL = URL.createObjectURL(file);\n\n                draft.files[newURL] = cache;\n                fileURLs.set(file, newURL);\n              }\n\n              value = value.replaceAll(blobURL, newURL);\n            });\n\n            valueMap[keyPath] = value;\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 (!(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  const { promise, resolve } = Promise.withResolvers();\n\n  restoreDialogState.set({ show: true, timestamp, resolve });\n\n  // The promise will be resolved once the Restore or Discard button is clicked on the dialog\n  /** @type {boolean | undefined} */\n  const doRestore = await promise;\n\n  if (doRestore === undefined) {\n    return;\n  }\n\n  if (doRestore) {\n    restoreBackup({ backup, collectionName, fileName });\n    entryDraftInteracted.set(true);\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 (!(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\n/** @type {string | undefined} */\nlet lastDraftId;\n\nentryDraft.subscribe((draft) => {\n  globalThis.clearTimeout(backupTimeout);\n\n  // Reset the interaction flag when a new draft is loaded or the editor is closed\n  if (draft?.id !== lastDraftId) {\n    lastDraftId = draft?.id;\n    entryDraftInteracted.set(false);\n  }\n\n  if (draft && backupDB) {\n    backupTimeout = globalThis.setTimeout(() => {\n      saveBackup(draft);\n    }, 500);\n  }\n});\n","<script>\n  import { _, locale as appLocale } from '@sveltia/i18n';\n  import { Alert, ConfirmationDialog, Toast } from '@sveltia/ui';\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.current, {\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 { 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>\n  .placeholder {\n    height: 64px;\n  }\n</style>\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 (Object.prototype.hasOwnProperty.call(source, key)) destination[key] = source[key];\n    }\n  }\n  return destination;\n}\nfunction repeat(character, count) {\n  return Array(count + 1).join(character);\n}\nfunction trimLeadingNewlines(string) {\n  return string.replace(/^\\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}\nfunction trimNewlines(string) {\n  return trimTrailingNewlines(trimLeadingNewlines(string));\n}\nvar blockElements = ['ADDRESS', 'ARTICLE', 'ASIDE', 'AUDIO', 'BLOCKQUOTE', 'BODY', 'CANVAS', 'CENTER', 'DD', 'DIR', 'DIV', 'DL', 'DT', 'FIELDSET', 'FIGCAPTION', 'FIGURE', 'FOOTER', 'FORM', 'FRAMESET', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'HEADER', 'HGROUP', 'HR', 'HTML', 'ISINDEX', 'LI', 'MAIN', 'MENU', 'NAV', 'NOFRAMES', 'NOSCRIPT', 'OL', 'OUTPUT', 'P', 'PRE', 'SECTION', 'TABLE', 'TBODY', 'TD', 'TFOOT', 'TH', 'THEAD', 'TR', 'UL'];\nfunction isBlock(node) {\n  return is(node, blockElements);\n}\nvar voidElements = ['AREA', 'BASE', 'BR', 'COL', 'COMMAND', 'EMBED', 'HR', 'IMG', 'INPUT', 'KEYGEN', 'LINK', 'META', 'PARAM', 'SOURCE', 'TRACK', 'WBR'];\nfunction isVoid(node) {\n  return is(node, voidElements);\n}\nfunction hasVoid(node) {\n  return has(node, voidElements);\n}\nvar meaningfulWhenBlankElements = ['A', 'TABLE', 'THEAD', 'TBODY', 'TFOOT', 'TH', 'TD', 'IFRAME', 'SCRIPT', 'AUDIO', 'VIDEO'];\nfunction isMeaningfulWhenBlank(node) {\n  return is(node, meaningfulWhenBlankElements);\n}\nfunction hasMeaningfulWhenBlank(node) {\n  return has(node, meaningfulWhenBlankElements);\n}\nfunction is(node, tagNames) {\n  return tagNames.indexOf(node.nodeName) >= 0;\n}\nfunction has(node, tagNames) {\n  return node.getElementsByTagName && tagNames.some(function (tagName) {\n    return node.getElementsByTagName(tagName).length;\n  });\n}\nvar markdownEscapes = [[/\\\\/g, '\\\\\\\\'], [/\\*/g, '\\\\*'], [/^-/g, '\\\\-'], [/^\\+ /g, '\\\\+ '], [/^(=+)/g, '\\\\$1'], [/^(#{1,6}) /g, '\\\\$1 '], [/`/g, '\\\\`'], [/^~~~/g, '\\\\~~~'], [/\\[/g, '\\\\['], [/\\]/g, '\\\\]'], [/^>/g, '\\\\>'], [/_/g, '\\\\_'], [/^(\\d+)\\. /g, '$1\\\\. ']];\nfunction escapeMarkdown(string) {\n  return markdownEscapes.reduce(function (accumulator, escape) {\n    return accumulator.replace(escape[0], escape[1]);\n  }, string);\n}\n\nvar rules = {};\nrules.paragraph = {\n  filter: 'p',\n  replacement: function (content) {\n    return '\\n\\n' + content + '\\n\\n';\n  }\n};\nrules.lineBreak = {\n  filter: 'br',\n  replacement: function (content, node, options) {\n    return options.br + '\\n';\n  }\n};\nrules.heading = {\n  filter: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'],\n  replacement: function (content, node, options) {\n    var hLevel = Number(node.nodeName.charAt(1));\n    if (options.headingStyle === 'setext' && hLevel < 3) {\n      var underline = repeat(hLevel === 1 ? '=' : '-', content.length);\n      return '\\n\\n' + content + '\\n' + underline + '\\n\\n';\n    } else {\n      return '\\n\\n' + repeat('#', hLevel) + ' ' + content + '\\n\\n';\n    }\n  }\n};\nrules.blockquote = {\n  filter: 'blockquote',\n  replacement: function (content) {\n    content = trimNewlines(content).replace(/^/gm, '> ');\n    return '\\n\\n' + content + '\\n\\n';\n  }\n};\nrules.list = {\n  filter: ['ul', 'ol'],\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};\nrules.listItem = {\n  filter: 'li',\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    var isParagraph = /\\n$/.test(content);\n    content = trimNewlines(content) + (isParagraph ? '\\n' : '');\n    content = content.replace(/\\n/gm, '\\n' + ' '.repeat(prefix.length)); // indent\n    return prefix + content + (node.nextSibling ? '\\n' : '');\n  }\n};\nrules.indentedCodeBlock = {\n  filter: function (node, options) {\n    return options.codeBlockStyle === 'indented' && node.nodeName === 'PRE' && node.firstChild && node.firstChild.nodeName === 'CODE';\n  },\n  replacement: function (content, node, options) {\n    return '\\n\\n    ' + node.firstChild.textContent.replace(/\\n/g, '\\n    ') + '\\n\\n';\n  }\n};\nrules.fencedCodeBlock = {\n  filter: function (node, options) {\n    return options.codeBlockStyle === 'fenced' && node.nodeName === 'PRE' && node.firstChild && node.firstChild.nodeName === 'CODE';\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    var fenceChar = options.fence.charAt(0);\n    var fenceSize = 3;\n    var fenceInCodeRegex = new RegExp('^' + fenceChar + '{3,}', 'gm');\n    var match;\n    while (match = fenceInCodeRegex.exec(code)) {\n      if (match[0].length >= fenceSize) {\n        fenceSize = match[0].length + 1;\n      }\n    }\n    var fence = repeat(fenceChar, fenceSize);\n    return '\\n\\n' + fence + language + '\\n' + code.replace(/\\n$/, '') + '\\n' + fence + '\\n\\n';\n  }\n};\nrules.horizontalRule = {\n  filter: 'hr',\n  replacement: function (content, node, options) {\n    return '\\n\\n' + options.hr + '\\n\\n';\n  }\n};\nrules.inlineLink = {\n  filter: function (node, options) {\n    return options.linkStyle === 'inlined' && node.nodeName === 'A' && node.getAttribute('href');\n  },\n  replacement: function (content, node) {\n    var href = escapeLinkDestination(node.getAttribute('href'));\n    var title = escapeLinkTitle(cleanAttribute(node.getAttribute('title')));\n    var titlePart = title ? ' \"' + title + '\"' : '';\n    return '[' + content + '](' + href + titlePart + ')';\n  }\n};\nrules.referenceLink = {\n  filter: function (node, options) {\n    return options.linkStyle === 'referenced' && node.nodeName === 'A' && node.getAttribute('href');\n  },\n  replacement: function (content, node, options) {\n    var href = escapeLinkDestination(node.getAttribute('href'));\n    var title = cleanAttribute(node.getAttribute('title'));\n    if (title) title = ' \"' + escapeLinkTitle(title) + '\"';\n    var replacement;\n    var reference;\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    this.references.push(reference);\n    return replacement;\n  },\n  references: [],\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};\nrules.emphasis = {\n  filter: ['em', 'i'],\n  replacement: function (content, node, options) {\n    if (!content.trim()) return '';\n    return options.emDelimiter + content + options.emDelimiter;\n  }\n};\nrules.strong = {\n  filter: ['strong', 'b'],\n  replacement: function (content, node, options) {\n    if (!content.trim()) return '';\n    return options.strongDelimiter + content + options.strongDelimiter;\n  }\n};\nrules.code = {\n  filter: function (node) {\n    var hasSiblings = node.previousSibling || node.nextSibling;\n    var isCodeBlock = node.parentNode.nodeName === 'PRE' && !hasSiblings;\n    return node.nodeName === 'CODE' && !isCodeBlock;\n  },\n  replacement: function (content) {\n    if (!content) return '';\n    content = content.replace(/\\r?\\n|\\r/g, ' ');\n    var extraSpace = /^`|^ .*?[^ ].* $|`$/.test(content) ? ' ' : '';\n    var delimiter = '`';\n    var matches = content.match(/`+/gm) || [];\n    while (matches.indexOf(delimiter) !== -1) delimiter = delimiter + '`';\n    return delimiter + extraSpace + content + extraSpace + delimiter;\n  }\n};\nrules.image = {\n  filter: 'img',\n  replacement: function (content, node) {\n    var alt = escapeMarkdown(cleanAttribute(node.getAttribute('alt')));\n    var src = escapeLinkDestination(node.getAttribute('src') || '');\n    var title = cleanAttribute(node.getAttribute('title'));\n    var titlePart = title ? ' \"' + escapeLinkTitle(title) + '\"' : '';\n    return src ? '![' + alt + ']' + '(' + src + titlePart + ')' : '';\n  }\n};\nfunction cleanAttribute(attribute) {\n  return attribute ? attribute.replace(/(\\n+\\s*)+/g, '\\n') : '';\n}\nfunction escapeLinkDestination(destination) {\n  var escaped = destination.replace(/([<>()])/g, '\\\\$1');\n  return escaped.indexOf(' ') >= 0 ? '<' + escaped + '>' : escaped;\n}\nfunction escapeLinkTitle(title) {\n  return title.replace(/\"/g, '\\\\\"');\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  this.blankRule = {\n    replacement: options.blankReplacement\n  };\n  this.keepReplacement = options.keepReplacement;\n  this.defaultRule = {\n    replacement: options.defaultReplacement\n  };\n  this.array = [];\n  for (var key in options.rules) this.array.push(options.rules[key]);\n}\nRules.prototype = {\n  add: function (key, rule) {\n    this.array.unshift(rule);\n  },\n  keep: function (filter) {\n    this._keep.unshift({\n      filter: filter,\n      replacement: this.keepReplacement\n    });\n  },\n  remove: function (filter) {\n    this._remove.unshift({\n      filter: filter,\n      replacement: function () {\n        return '';\n      }\n    });\n  },\n  forNode: function (node) {\n    if (node.isBlank) return this.blankRule;\n    var rule;\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    return this.defaultRule;\n  },\n  forEach: function (fn) {\n    for (var i = 0; i < this.array.length; i++) fn(this.array[i], i);\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 undefined;\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  if (!element.firstChild || isPre(element)) return;\n  var prevText = null;\n  var keepLeadingWs = false;\n  var prev = null;\n  var node = next(prev, element, isPre);\n  while (node !== element) {\n    if (node.nodeType === 3 || node.nodeType === 4) {\n      // Node.TEXT_NODE or Node.CDATA_SECTION_NODE\n      var text = node.data.replace(/[ \\r\\n\\t]+/g, ' ');\n      if ((!prevText || / $/.test(prevText.data)) && !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      node.data = text;\n      prevText = node;\n    } else if (node.nodeType === 1) {\n      // Node.ELEMENT_NODE\n      if (isBlock(node) || node.nodeName === 'BR') {\n        if (prevText) {\n          prevText.data = prevText.data.replace(/ $/, '');\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    var nextNode = next(prev, node, isPre);\n    prev = node;\n    node = nextNode;\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  node.parentNode.removeChild(node);\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  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  return canParse;\n}\nfunction createHTMLParser() {\n  var Parser = function () {};\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}\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}\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>', 'text/html');\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  return root;\n}\nvar _htmlParser;\nfunction htmlParser() {\n  _htmlParser = _htmlParser || new HTMLParser();\n  return _htmlParser;\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}\nfunction isBlank(node) {\n  return !isVoid(node) && !isMeaningfulWhenBlank(node) && /^\\s*$/i.test(node.textContent) && !hasVoid(node) && !hasMeaningfulWhenBlank(node);\n}\nfunction flankingWhitespace(node, options) {\n  if (node.isBlock || options.preformattedCode && node.isCode) {\n    return {\n      leading: '',\n      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  return {\n    leading: edges.leading,\n    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],\n    // whole string for whitespace-only strings\n    leadingAscii: m[2],\n    leadingNonAscii: m[3],\n    trailing: m[4],\n    // empty for whitespace-only strings\n    trailingNonAscii: m[5],\n    trailingAscii: m[6]\n  };\n}\nfunction isFlankedByWhitespace(side, node, options) {\n  var sibling;\n  var regExp;\n  var isFlanked;\n  if (side === 'left') {\n    sibling = node.previousSibling;\n    regExp = / $/;\n  } else {\n    sibling = node.nextSibling;\n    regExp = /^ /;\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;\nfunction TurndownService(options) {\n  if (!(this instanceof TurndownService)) return new TurndownService(options);\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}\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(input + ' is not a string, or an element/document/fragment node.');\n    }\n    if (input === '') return '';\n    var output = process.call(this, new RootNode(input, this.options));\n    return postProcess.call(this, output);\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   * 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   * 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   * 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   * 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 escapeMarkdown(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    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    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  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 whitespace.leading + rule.replacement(content, node, this.options) + whitespace.trailing;\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  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 input != null && (typeof input === 'string' || input.nodeType && (input.nodeType === 1 || input.nodeType === 9 || input.nodeType === 11));\n}\n\nexport { TurndownService as default };\n","import { escapeRegExp } from '@sveltia/utils/string';\n\nimport { TEMPLATE_TAG_REPLACE_REGEX } from '$lib/services/common/template/constants';\nimport { TRANSFORMATION_SPLIT_REGEX } from '$lib/services/common/transformations';\nimport {\n  getField,\n  getFieldDisplayValue,\n  getVisibleFieldDisplayValue,\n} from '$lib/services/contents/entry/fields';\nimport { getOrCreate } from '$lib/services/utils/cache';\n\n/**\n * @import { FlattenedEntryContent, GetFieldArgs, InternalLocaleCode } from '$lib/types/private';\n * @import { 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) => {\n  const hasSingleSubField = 'field' in field;\n  const hasMultiSubFields = 'fields' in field;\n  const hasVariableTypes = 'types' in field;\n\n  return {\n    hasSingleSubField,\n    hasMultiSubFields,\n    hasVariableTypes,\n    hasSubFields: hasSingleSubField || hasMultiSubFields || hasVariableTypes,\n  };\n};\n\n/**\n * Cache of pre-compiled regexes keyed by `keyPath:index`.\n * @type {Map<string, RegExp>}\n */\nconst listSummaryRegexCache = new Map();\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    const cacheKey = `${keyPath}:${index}`;\n\n    const keyPathRegex = getOrCreate(\n      listSummaryRegexCache,\n      cacheKey,\n      () => new RegExp(`^${escapeRegExp(keyPath)}\\\\.${index}[\\\\b\\\\.]`),\n    );\n\n    return getVisibleFieldDisplayValue({\n      valueMap,\n      locale,\n      keyPath: keyPathWithIndex,\n      keyPathRegex,\n      getFieldArgs,\n    });\n  }\n\n  /**\n   * Replacer function for template tags in the summary template. It extracts the field value based\n   * on the placeholder, applies any transformations, and returns the display value to replace the\n   * tag.\n   * @param {string} _match The entire matched template tag, e.g. `{{fields.slug | upper}}`. Unused\n   * in the function but required by the `replace` method.\n   * @param {string} placeholder The content inside the template tag, e.g. `fields.slug | upper`.\n   * @returns {string} The display value to replace the template tag in the summary.\n   */\n  const replacer = (_match, placeholder) => {\n    const [tag, ...transformations] = placeholder.split(TRANSFORMATION_SPLIT_REGEX);\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\n      if (!('field' in listFieldConfig) || listFieldConfig.field.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  return summaryTemplate.replaceAll(TEMPLATE_TAG_REPLACE_REGEX, replacer);\n};\n","/**\n * Generic Anthropic Claude API client.\n * @see https://docs.claude.com/en/api/messages\n */\n\n/**\n * @import { AiCompletionOptions } from '$lib/types/private';\n */\n\nconst apiEndpoint = 'https://api.anthropic.com/v1/messages';\n\nexport const apiLabel = 'Anthropic API';\nexport const developerURL = 'https://docs.claude.com/en/api/overview';\nexport const apiKeyURL = 'https://platform.claude.com/settings/keys';\nexport const apiKeyPattern = /sk-ant-api03-[a-zA-Z0-9-_]{80,}/;\n\n/**\n * Send a message to the Anthropic Messages API and return the response text.\n * @param {AiCompletionOptions} options Options.\n * @returns {Promise<string>} Response text.\n * @throws {Error} When the API call fails or returns an invalid response.\n */\nexport const complete = async ({\n  apiKey,\n  model,\n  systemPrompt,\n  userMessage,\n  temperature = 0.3,\n  maxTokens = 4000,\n}) => {\n  const response = await fetch(apiEndpoint, {\n    method: 'POST',\n    headers: {\n      'Content-Type': 'application/json',\n      'x-api-key': apiKey,\n      'anthropic-version': '2023-06-01',\n      // Work around for CORS issues in browsers\n      // @see https://simonwillison.net/2024/Aug/23/anthropic-dangerous-direct-browser-access/\n      'anthropic-dangerous-direct-browser-access': 'true',\n    },\n    body: JSON.stringify({\n      model,\n      max_tokens: maxTokens,\n      temperature,\n      system: systemPrompt,\n      messages: [{ role: 'user', content: userMessage }],\n    }),\n  });\n\n  if (!response.ok) {\n    const errorData = await response.json().catch(() => ({}));\n\n    throw new Error(\n      `Anthropic 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.content || !Array.isArray(data.content) || !data.content[0]) {\n    throw new Error('Invalid response format from Anthropic API.');\n  }\n\n  return data.content[0].text.trim();\n};\n","/**\n * Shared utilities for translation services.\n */\n\nimport { getLocaleLabel } from '$lib/services/contents/i18n';\n\n/**\n * @import { AiCompletionOptions, LanguagePair, TranslationOptions } from '$lib/types/private';\n */\n\n/**\n * Normalize a locale code to a language label in English that AI services can understand.\n * @param {string} locale Locale code, e.g., 'en', 'fr-FR', 'zh-CN'.\n * @returns {string | undefined} Normalized language label, e.g., 'English', 'French', 'Chinese'.\n */\nexport const normalizeLanguage = (locale) => getLocaleLabel(locale, { displayLocale: 'en' });\n\n/**\n * Generate a standardized system prompt for AI translation services.\n * @param {string} sourceLanguageName Source language name, e.g., 'English', 'Canadian French'.\n * @param {string} targetLanguageName Target language name, e.g., 'French', 'Brazilian Portuguese'.\n * @returns {string} System prompt for translation.\n */\nexport const createTranslationSystemPrompt = (sourceLanguageName, targetLanguageName) => {\n  const baseInstructions = [\n    '- CRITICAL: Leave content EXACTLY unchanged within HTML elements that have translate=\"no\"',\n    '- CRITICAL: Leave content EXACTLY unchanged within HTML elements that have class=\"notranslate\"',\n    '- CRITICAL: Leave content EXACTLY unchanged between \"notranslate\" and \"/notranslate\" comments',\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    '- If you see translate=\"no\", class=\"notranslate\", or notranslate comments, copy that content verbatim without any changes',\n  ];\n\n  const lineBreakInstructions = [\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  ];\n\n  const responseInstructions = [\n    '- Return your response as a valid JSON array containing the translated texts',\n    '- The array should contain the translated texts in the same order as provided',\n    '- VALIDATION: Before responding, double-check that any translate=\"no\", class=\"notranslate\", or notranslate comment content remains EXACTLY the same',\n  ];\n\n  const allInstructions = [...baseInstructions, ...lineBreakInstructions, ...responseInstructions];\n\n  return (\n    'You are a professional translator. Translate the given texts from ' +\n    `${sourceLanguageName} to ${targetLanguageName}. ` +\n    'Your response must be valid JSON that can be parsed directly.\\n\\n' +\n    `IMPORTANT INSTRUCTIONS:\\n${allInstructions.join('\\n')}\\n\\n` +\n    'OUTPUT FORMAT:\\n' +\n    '- Output ONLY valid JSON, nothing else\\n' +\n    '- Do NOT use markdown code blocks or formatting\\n' +\n    '- Do NOT add any explanation or commentary\\n' +\n    '- Your entire response should be parseable by JSON.parse()\\n' +\n    '- Start your response with [ and end with ]\\n\\n' +\n    'Required JSON structure:\\n' +\n    '[\"translation 1\", \"translation 2\", ...]'\n  );\n};\n\n/**\n * Create a standardized user prompt for translation requests.\n * @param {string[]} texts Array of texts to translate.\n * @returns {string} User prompt for translation.\n */\nexport const createTranslationUserPrompt = (texts) =>\n  'Translate these texts and return ONLY valid JSON (no markdown, no code blocks):\\n' +\n  `${JSON.stringify(texts)}\\n\\n` +\n  'Respond with JSON only:';\n\n/**\n * Parse and validate a JSON array of translations from an AI API response.\n * @param {string} content Raw text content from the AI response.\n * @param {number} expectedCount Expected number of translated strings.\n * @param {string} serviceLabel Label for the AI service used in error messages, e.g. `'Anthropic\n * API'`.\n * @returns {string[]} Array of translated strings.\n * @throws {Error} When the content cannot be parsed or the count doesn’t match.\n */\nexport const parseAiTranslationResponse = (content, expectedCount, serviceLabel) => {\n  let translations;\n\n  try {\n    translations = JSON.parse(content);\n  } catch {\n    throw new Error(`Failed to parse JSON response from ${serviceLabel}.`);\n  }\n\n  if (!Array.isArray(translations)) {\n    throw new Error(`Invalid JSON structure in ${serviceLabel} response.`);\n  }\n\n  if (translations.length !== expectedCount) {\n    throw new Error(\n      `Translation count mismatch: expected ${expectedCount}, got ${translations.length}`,\n    );\n  }\n\n  return translations;\n};\n\n/**\n * Check if the given source and target languages are supported.\n * @param {LanguagePair} languages Language pair.\n * @returns {Promise<boolean>} True if both source and target languages are supported.\n */\nexport const availability = async ({ sourceLanguage, targetLanguage }) =>\n  !!normalizeLanguage(sourceLanguage) && !!normalizeLanguage(targetLanguage);\n\n/**\n * Resolve and validate source and target language names from locale codes.\n * @param {string} sourceLanguage Source locale code.\n * @param {string} targetLanguage Target locale code.\n * @returns {[string, string]} Tuple of [sourceLanguageName, targetLanguageName].\n * @throws {Error} When source or target locale is not supported.\n */\nexport const resolveLanguageNames = (sourceLanguage, targetLanguage) => {\n  const sourceLangName = normalizeLanguage(sourceLanguage);\n  const targetLangName = normalizeLanguage(targetLanguage);\n\n  if (!sourceLangName) {\n    throw new Error('Source locale is not supported.');\n  }\n\n  if (!targetLangName) {\n    throw new Error('Target locale is not supported.');\n  }\n\n  return [sourceLangName, targetLangName];\n};\n\n/**\n * Create a `translate` function for an AI-based translation service.\n * @param {(options: AiCompletionOptions) => Promise<string>} complete AI completion function from\n * the service’s AI module.\n * @param {string} model Model identifier to use for translation.\n * @param {string} apiLabel Label for the service used in error messages, e.g. `'Anthropic API'`.\n * @param {object} [extraOptions] Extra options to pass to `complete`, e.g. `{ reasoning: false }`.\n * @returns {(texts: string[], options: TranslationOptions) => Promise<string[]>} Translate\n * function.\n */\nexport const createAiTranslate =\n  (complete, model, apiLabel, extraOptions = {}) =>\n  /**\n   * Translate the given texts using the AI service.\n   * @param {string[]} texts Array of original texts.\n   * @param {TranslationOptions} options Options.\n   * @returns {Promise<string[]>} Translated strings in the original order.\n   */\n  async (texts, { sourceLanguage, targetLanguage, apiKey }) => {\n    const [sourceLangName, targetLangName] = resolveLanguageNames(sourceLanguage, targetLanguage);\n\n    try {\n      const content = await complete({\n        apiKey,\n        model,\n        systemPrompt: createTranslationSystemPrompt(sourceLangName, targetLangName),\n        userMessage: createTranslationUserPrompt(texts),\n        ...extraOptions,\n      });\n\n      return parseAiTranslationResponse(content, texts.length, apiLabel);\n    } catch (error) {\n      if (error instanceof Error) {\n        throw error;\n      }\n\n      throw new Error(`Failed to translate text with ${apiLabel}.`);\n    }\n  };\n","import {\n  apiKeyPattern,\n  apiKeyURL,\n  apiLabel,\n  complete,\n  developerURL,\n} from '$lib/services/integrations/ai/anthropic';\n\nimport { availability, createAiTranslate } from './shared.js';\n\n/**\n * @import { TranslationService } from '$lib/types/private';\n */\n\nconst serviceId = 'anthropic';\nconst serviceLabel = 'Anthropic Claude';\nconst model = 'claude-haiku-4-5';\n\n/**\n * Translation service using Anthropic Claude Haiku. Supports markdown content and preserves\n * formatting.\n * @type {TranslationService}\n * @see https://docs.claude.com/en/docs/about-claude/models/overview\n * @see https://docs.claude.com/en/api/messages\n */\nexport default {\n  serviceId,\n  serviceLabel,\n  apiLabel,\n  developerURL,\n  apiKeyURL,\n  apiKeyPattern,\n  markdownSupported: true,\n  availability,\n  translate: createAiTranslate(complete, model, apiLabel),\n};\n","/**\n * Generic DeepSeek API client.\n * @see https://api-docs.deepseek.com/api/create-chat-completion\n */\n\n/**\n * @import { AiCompletionOptions } from '$lib/types/private';\n */\n\nconst apiEndpoint = 'https://api.deepseek.com/chat/completions';\n\nexport const apiLabel = 'DeepSeek API';\nexport const developerURL = 'https://api-docs.deepseek.com/';\nexport const apiKeyURL = 'https://platform.deepseek.com/api_keys';\nexport const apiKeyPattern = /sk-[a-zA-Z0-9]{32,}/;\n\n/**\n * Send a message to the DeepSeek Chat Completions API and return the response text.\n * @param {AiCompletionOptions} options Options.\n * @returns {Promise<string>} Response text.\n * @throws {Error} When the API call fails or returns an invalid response.\n */\nexport const complete = async ({\n  apiKey,\n  model,\n  systemPrompt,\n  userMessage,\n  temperature = 0.3,\n  maxTokens = 4000,\n  reasoning = true,\n}) => {\n  const response = await fetch(apiEndpoint, {\n    method: 'POST',\n    headers: {\n      'Content-Type': 'application/json',\n      Authorization: `Bearer ${apiKey}`,\n    },\n    body: JSON.stringify({\n      model,\n      messages: [\n        { role: 'system', content: systemPrompt },\n        { role: 'user', content: userMessage },\n      ],\n      temperature,\n      max_tokens: maxTokens,\n      thinking: { type: reasoning ? 'enabled' : 'disabled' },\n      stream: false,\n    }),\n  });\n\n  if (!response.ok) {\n    const errorData = await response.json().catch(() => ({}));\n\n    throw new Error(\n      `DeepSeek 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 || !Array.isArray(data.choices) || !data.choices[0]?.message?.content) {\n    throw new Error('Invalid response format from DeepSeek API.');\n  }\n\n  return data.choices[0].message.content.trim();\n};\n","import {\n  apiKeyPattern,\n  apiKeyURL,\n  apiLabel,\n  complete,\n  developerURL,\n} from '$lib/services/integrations/ai/deepseek';\n\nimport { availability, createAiTranslate } from './shared.js';\n\n/**\n * @import { TranslationService } from '$lib/types/private';\n */\n\nconst serviceId = 'deepseek';\nconst serviceLabel = 'DeepSeek';\nconst model = 'deepseek-v4-flash';\n\n/**\n * Translation service using DeepSeek. Supports markdown content and preserves formatting.\n * @type {TranslationService}\n * @see https://api-docs.deepseek.com/api/create-chat-completion\n */\nexport default {\n  serviceId,\n  serviceLabel,\n  apiLabel,\n  developerURL,\n  apiKeyURL,\n  apiKeyPattern,\n  markdownSupported: true,\n  availability,\n  translate: createAiTranslate(complete, model, apiLabel, { reasoning: false }),\n};\n","/**\n * @import { LanguagePair, TranslationOptions, 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  // Traditional Chinese variants: We should not fall back to `zh` because it’s Simplified Chinese\n  if (['zh-HK', 'zh-MO'].includes(normalizedLocale)) {\n    return 'zh-TW';\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 * Check if the given source and target languages are supported.\n * @param {LanguagePair} languages Language pair.\n * @returns {Promise<boolean>} True if both source and target languages are supported.\n */\nexport const availability = async ({ sourceLanguage, targetLanguage }) =>\n  !!normalizeLanguage(sourceLanguage) && !!normalizeLanguage(targetLanguage);\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 {TranslationOptions} 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, { sourceLanguage, targetLanguage, apiKey }) => {\n  sourceLanguage = normalizeLanguage(sourceLanguage) ?? '';\n  targetLanguage = normalizeLanguage(targetLanguage) ?? '';\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    // cspell:disable-next-line\n    // Decode apostrophes in translated text (e.g., \"Aujourd&#39;hui\" → \"Aujourd'hui\")\n    return data.translations.map((t) => t.translatedText.replace(/&#39;/g, \"'\"));\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  availability,\n  translate,\n};\n","/**\n * Generic Google Gemini API client.\n * @see https://ai.google.dev/api/generate-content\n */\n\n/**\n * @import { AiCompletionOptions } from '$lib/types/private';\n */\n\nexport const apiLabel = 'Gemini API';\nexport const developerURL = 'https://ai.google.dev/gemini-api/docs';\nexport const apiKeyURL = 'https://aistudio.google.com/api-keys';\nexport const apiKeyPattern = /AIza[a-zA-Z0-9_-]{35}/;\n\n/**\n * Send a message to the Google Gemini API and return the response text.\n * @param {AiCompletionOptions & { responseFormat?: string }} options Options. Pass\n * `responseFormat: 'application/json'` to request a JSON response directly without markdown fences.\n * @returns {Promise<string>} Response text.\n * @throws {Error} When the API call fails or returns an invalid response.\n */\nexport const complete = async ({\n  apiKey,\n  model,\n  systemPrompt,\n  userMessage,\n  temperature = 0.3,\n  maxTokens = 4000,\n  responseFormat,\n}) => {\n  const url = `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${apiKey}`;\n\n  const response = await fetch(url, {\n    method: 'POST',\n    headers: {\n      'Content-Type': 'application/json',\n    },\n    body: JSON.stringify({\n      system_instruction: { parts: [{ text: systemPrompt }] },\n      contents: [{ parts: [{ text: userMessage }] }],\n      generationConfig: {\n        temperature,\n        maxOutputTokens: maxTokens,\n        ...(responseFormat ? { responseMimeType: responseFormat } : {}),\n      },\n    }),\n  });\n\n  if (!response.ok) {\n    const errorData = await response.json().catch(() => ({}));\n\n    throw new Error(\n      `Gemini 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 (!Array.isArray(data.candidates) || !data.candidates[0]?.content?.parts?.[0]) {\n    throw new Error('Invalid response format from Gemini API.');\n  }\n\n  return data.candidates[0].content.parts[0].text.trim();\n};\n","import {\n  apiKeyPattern,\n  apiKeyURL,\n  apiLabel,\n  complete,\n  developerURL,\n} from '$lib/services/integrations/ai/google';\n\nimport { availability, createAiTranslate } from './shared.js';\n\n/**\n * @import { TranslationService } from '$lib/types/private';\n */\n\nconst serviceId = 'google-ai';\nconst serviceLabel = 'Google Gemini';\nconst model = 'gemini-3.1-flash-lite';\n\n/**\n * Translation service using Google Gemini Flash-Lite. Supports markdown content and preserves\n * formatting.\n * @type {TranslationService}\n * @see https://ai.google.dev/gemini-api/docs/models/gemini\n * @see https://ai.google.dev/api/generate-content\n */\nexport default {\n  serviceId,\n  serviceLabel,\n  apiLabel,\n  developerURL,\n  apiKeyURL,\n  apiKeyPattern,\n  markdownSupported: true,\n  availability,\n  translate: createAiTranslate(complete, model, apiLabel, { responseFormat: 'application/json' }),\n};\n","/**\n * Generic Mistral AI API client.\n * @see https://docs.mistral.ai/api\n */\n\n/**\n * @import { AiCompletionOptions } from '$lib/types/private';\n */\n\nconst apiEndpoint = 'https://api.mistral.ai/v1/chat/completions';\n\nexport const apiLabel = 'Mistral AI API';\nexport const developerURL = 'https://docs.mistral.ai/';\nexport const apiKeyURL = 'https://console.mistral.ai/home?profile_dialog=api-keys';\nexport const apiKeyPattern = /[a-zA-Z0-9]{32,}/;\n\n/**\n * Send a message to the Mistral AI Chat Completions API and return the response text.\n * @param {AiCompletionOptions} options Options.\n * @returns {Promise<string>} Response text.\n * @throws {Error} When the API call fails or returns an invalid response.\n */\nexport const complete = async ({\n  apiKey,\n  model,\n  systemPrompt,\n  userMessage,\n  temperature = 0.3,\n  maxTokens = 4000,\n  reasoning = true,\n}) => {\n  const response = await fetch(apiEndpoint, {\n    method: 'POST',\n    headers: {\n      'Content-Type': 'application/json',\n      Authorization: `Bearer ${apiKey}`,\n    },\n    body: JSON.stringify({\n      model,\n      messages: [\n        { role: 'system', content: systemPrompt },\n        { role: 'user', content: userMessage },\n      ],\n      temperature,\n      max_tokens: maxTokens,\n      reasoning_effort: reasoning ? 'high' : 'none',\n      stream: false,\n    }),\n  });\n\n  if (!response.ok) {\n    const errorData = await response.json().catch(() => ({}));\n\n    throw new Error(\n      `Mistral AI API error: ${response.status} ${response.statusText}` +\n        `${errorData.message ? ` - ${errorData.message}` : ''}`,\n    );\n  }\n\n  const data = await response.json();\n\n  if (!data.choices || !Array.isArray(data.choices) || !data.choices[0]?.message?.content) {\n    throw new Error('Invalid response format from Mistral AI API.');\n  }\n\n  return data.choices[0].message.content.trim();\n};\n","import {\n  apiKeyPattern,\n  apiKeyURL,\n  apiLabel,\n  complete,\n  developerURL,\n} from '$lib/services/integrations/ai/mistral';\n\nimport { availability, createAiTranslate } from './shared.js';\n\n/**\n * @import { TranslationService } from '$lib/types/private';\n */\n\nconst serviceId = 'mistral';\nconst serviceLabel = 'Mistral';\nconst model = 'mistral-small-latest';\n\n/**\n * Translation service using Mistral Small. Supports markdown content and preserves formatting.\n * @type {TranslationService}\n * @see https://docs.mistral.ai/api\n */\nexport default {\n  serviceId,\n  serviceLabel,\n  apiLabel,\n  developerURL,\n  apiKeyURL,\n  apiKeyPattern,\n  markdownSupported: true,\n  availability,\n  translate: createAiTranslate(complete, model, apiLabel, { reasoning: false }),\n};\n","/**\n * Generic OpenAI API client.\n * @see https://developers.openai.com/api/reference/resources/responses/methods/create\n */\n\n/**\n * @import { AiCompletionOptions } from '$lib/types/private';\n */\n\nconst apiEndpoint = 'https://api.openai.com/v1/responses';\n\nexport const apiLabel = 'OpenAI API';\nexport const developerURL = 'https://platform.openai.com/docs/overview';\nexport const apiKeyURL = 'https://platform.openai.com/api-keys';\nexport const apiKeyPattern = /sk-[a-zA-Z0-9-_]{40,}/;\n\n/**\n * Check whether an output item is a message item with array content.\n * @param {unknown} item Candidate output item.\n * @returns {item is { content: unknown[] }} True if the item is a message with content.\n */\nconst isMessageOutputItem = (item) =>\n  typeof item === 'object' &&\n  item !== null &&\n  'type' in item &&\n  item.type === 'message' &&\n  'content' in item &&\n  Array.isArray(item.content);\n\n/**\n * Check whether a message content item contains output text.\n * @param {unknown} item Candidate message content item.\n * @returns {item is { text: string }} True if the item contains output text.\n */\nconst isOutputTextItem = (item) =>\n  typeof item === 'object' &&\n  item !== null &&\n  'type' in item &&\n  item.type === 'output_text' &&\n  'text' in item &&\n  typeof item.text === 'string';\n\n/**\n * Send a message to the OpenAI Responses API and return the response text.\n * @param {AiCompletionOptions} options Options.\n * @returns {Promise<string>} Response text.\n * @throws {Error} When the API call fails or returns an invalid response.\n */\nexport const complete = async ({\n  apiKey,\n  model,\n  systemPrompt,\n  userMessage,\n  temperature = 0.3,\n  maxTokens = 4000,\n}) => {\n  const response = await fetch(apiEndpoint, {\n    method: 'POST',\n    headers: {\n      'Content-Type': 'application/json',\n      Authorization: `Bearer ${apiKey}`,\n    },\n    body: JSON.stringify({\n      model,\n      instructions: systemPrompt,\n      input: userMessage,\n      store: false,\n      temperature,\n      max_output_tokens: maxTokens,\n    }),\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 (typeof data.output_text === 'string') {\n    return data.output_text.trim();\n  }\n\n  /** @type {unknown[]} */\n  const output = Array.isArray(data.output) ? data.output : [];\n  const message = output.find(isMessageOutputItem);\n  /** @type {unknown[]} */\n  const content = Array.isArray(message?.content) ? message.content : [];\n  const textItem = content.find(isOutputTextItem);\n\n  if (typeof textItem?.text === 'string') {\n    return textItem.text.trim();\n  }\n\n  throw new Error('Invalid response format from OpenAI API.');\n};\n","import {\n  apiKeyPattern,\n  apiKeyURL,\n  apiLabel,\n  complete,\n  developerURL,\n} from '$lib/services/integrations/ai/openai';\n\nimport { availability, createAiTranslate } from './shared.js';\n\n/**\n * @import { TranslationService } from '$lib/types/private';\n */\n\nconst serviceId = 'openai';\nconst serviceLabel = 'OpenAI GPT';\nconst model = 'gpt-5.4-nano';\n\n/**\n * Translation service using OpenAI GPT Nano. Supports markdown content and preserves formatting.\n * @type {TranslationService}\n * @see https://developers.openai.com/api/reference/resources/responses/methods/create\n */\nexport default {\n  serviceId,\n  serviceLabel,\n  apiLabel,\n  developerURL,\n  apiKeyURL,\n  apiKeyPattern,\n  markdownSupported: true,\n  availability,\n  translate: createAiTranslate(complete, model, apiLabel),\n};\n","import { toStore } from 'svelte/store';\n\nimport { prefs } from '$lib/services/user/prefs.svelte';\n\nimport anthropic from './anthropic';\nimport deepseek from './deepseek';\nimport google from './google';\nimport googleAi from './google-ai';\nimport mistral from './mistral';\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. Alphabetical order by service name.\n * @type {Record<string, TranslationService>}\n */\nexport const allTranslationServices = {\n  anthropic,\n  deepseek,\n  google,\n  'google-ai': googleAi,\n  mistral,\n  openai,\n};\n\n/**\n * @type {Readable<TranslationService>}\n */\nexport const translator = toStore(() => {\n  const { defaultTranslationService = 'google' } = prefs;\n\n  return allTranslationServices[defaultTranslationService] ?? google;\n});\n","import { parse } 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 { getListFieldInfo } from '$lib/services/contents/fields/list/helper';\nimport { translator } from '$lib/services/integrations/translators';\nimport { prefs } from '$lib/services/user/prefs.svelte';\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} sourceLanguage Source locale, e.g. `en`.\n * @property {InternalLocaleCode} targetLanguage 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 field is the\n * List or Object type, 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 * @internal\n * @see https://github.com/mixmark-io/turndown\n */\nexport const turndownService = new TurndownService({\n  headingStyle: 'atx',\n  bulletListMarker: '-',\n  codeBlockStyle: 'fenced',\n});\n\n// @ts-ignore Silence a false type error\nturndownService.keep(['span', 'div']);\n\n/**\n * Get a list of fields to be copied or translated from the source locale to the target locale.\n * @internal\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 */\nexport const getCopyingFieldMap = ({ draft, options }) => {\n  const { collectionName, fileName, currentValues, isIndexFile } = draft;\n  const { sourceLanguage, targetLanguage, keyPath = '', translate = false } = options;\n  const valueMap = currentValues[sourceLanguage];\n  const getFieldArgs = { collectionName, fileName, valueMap, isIndexFile };\n\n  return Object.fromEntries(\n    Object.entries(valueMap)\n      .map(([_keyPath, value]) => {\n        const targetLocaleValue = currentValues[targetLanguage][_keyPath];\n        const field = getField({ ...getFieldArgs, keyPath: _keyPath });\n        const fieldType = field?.widget ?? 'string';\n\n        if (\n          (keyPath && !_keyPath.startsWith(keyPath)) ||\n          typeof value !== 'string' ||\n          !value ||\n          !['richtext', 'markdown', 'text', 'string', 'list'].includes(fieldType) ||\n          // prettier-ignore\n          (fieldType === 'list' &&\n          getListFieldInfo(/** @type {ListField} */ (field)).hasSubFields) ||\n          (!translate && value === targetLocaleValue) ||\n          // Skip populated fields when translating all the fields\n          (!keyPath && translate && !!targetLocaleValue)\n        ) {\n          return null;\n        }\n\n        const isMarkdown = fieldType === 'richtext' || fieldType === 'markdown';\n\n        return [_keyPath, { value, isMarkdown }];\n      })\n      .filter((entry) => !!entry),\n  );\n};\n\n/**\n * Update the toast notification.\n * @internal\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.sourceLanguage Source locale, e.g. `en`.\n */\nexport const updateToast = (status, message, { count, sourceLanguage }) => {\n  copyFromLocaleToast.set({ id: Date.now(), show: true, status, message, count, sourceLanguage });\n};\n\n/**\n * Translate the field value(s) from another locale.\n * @internal\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 */\nexport const translateFields = async ({ currentValues, options, copingFieldMap }) => {\n  const { serviceId, markdownSupported, translate } = get(translator);\n  const { sourceLanguage, targetLanguage } = options;\n  const count = Object.keys(copingFieldMap).length;\n\n  const apiKey =\n    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, sourceLanguage });\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} */ (parse(value)) : value,\n      ),\n      { apiKey, sourceLanguage, targetLanguage },\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[targetLanguage][_keyPath] =\n        // @ts-ignore Silence a false type error\n        isMarkdown && !markdownSupported ? turndownService.turndown(value) : value;\n    });\n\n    updateToast('success', 'translation.complete', { count, sourceLanguage });\n  } catch (ex) {\n    // @todo Show a detailed error message.\n    updateToast('error', 'translation.error', { count, sourceLanguage });\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 * @internal\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 */\nexport const copyFields = ({ currentValues, options, copingFieldMap }) => {\n  const { sourceLanguage, targetLanguage } = options;\n  const count = Object.keys(copingFieldMap).length;\n\n  Object.entries(copingFieldMap).forEach(([_keyPath, { value }]) => {\n    currentValues[targetLanguage][_keyPath] = value;\n  });\n\n  updateToast('success', 'copy.complete', { count, sourceLanguage });\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 { sourceLanguage, 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, sourceLanguage });\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 { _ } from '@sveltia/i18n';\n  import { MenuItem } from '@sveltia/ui';\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, LanguagePair } 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  /**\n   * Check if a menu item should be disabled.\n   * @param {LanguagePair} languages Language pair.\n   * @returns {Promise<boolean>} Whether the menu item should be disabled.\n   */\n  const isMenuDisabled = async ({ sourceLanguage, targetLanguage }) =>\n    !$entryDraft?.currentLocales[targetLanguage] ||\n    !$entryDraft.currentLocales[sourceLanguage] ||\n    (!!keyPath && !$state.snapshot($entryDraft.currentValues[sourceLanguage])[keyPath]) ||\n    (!translate &&\n      !!keyPath &&\n      $state.snapshot($entryDraft.currentValues[sourceLanguage])[keyPath] ===\n        $state.snapshot($entryDraft.currentValues[targetLanguage])[keyPath]) ||\n    (translate && !(await $translator?.availability({ sourceLanguage, targetLanguage })));\n</script>\n\n{#each otherLocales as otherLocale (otherLocale)}\n  {@const languagePair = { sourceLanguage: otherLocale, targetLanguage: locale }}\n  {#await isMenuDisabled(languagePair) then disabled}\n    <MenuItem\n      label={_(translate ? 'translate_from_x' : 'copy_from_x', {\n        values: { locale: getLocaleLabel(otherLocale) },\n      })}\n      {disabled}\n      onclick={() => {\n        copyFromLocale({ ...languagePair, keyPath, translate });\n      }}\n    />\n  {/await}\n{/each}\n","<script>\n  import { onMount } from 'svelte';\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 & Record<string, any>} */\n  let {\n    /* eslint-disable prefer-const */\n    children = undefined,\n    ...rest\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {HTMLElement | undefined} */\n  let wrapper = $state();\n\n  // eslint-disable-next-line arrow-body-style\n  onMount(() => {\n    // onUnmount\n    return () => {\n      wrapper?.dispatchEvent(new CustomEvent('Unmount'));\n    };\n  });\n</script>\n\n<section role=\"group\" class=\"field\" {...rest} bind:this={wrapper}>\n  {@render children?.()}\n</section>\n\n<style>\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      & > * {\n        margin-inline: auto !important;\n        max-width: 768px;\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: var(--sui-focus-ring-width) 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-block: 2px 0;\n          margin-inline: 2px 0;\n          color: var(--sui-error-foreground-color);\n          font-size: var(--sui-font-size-large);\n        }\n      }\n    }\n  }\n</style>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Button, Icon, Menu, MenuButton } from '@sveltia/ui';\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, LanguagePair } 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 sourceDisabled = $derived(!$entryDraft?.currentLocales[locale]);\n\n  /**\n   * Check if the translate button should be disabled.\n   * @param {LanguagePair} languages Language pair.\n   * @returns {Promise<boolean>} Whether the button should be disabled.\n   */\n  const isButtonDisabled = async ({ sourceLanguage, targetLanguage }) =>\n    sourceDisabled ||\n    !$entryDraft?.currentLocales[sourceLanguage] ||\n    !(await $translator?.availability({ sourceLanguage, targetLanguage }));\n</script>\n\n{#if otherLocales.length === 1}\n  {@const [otherLocale] = otherLocales}\n  {@const label = _('translate_from_x', {\n    values: { locale: getLocaleLabel(otherLocale) ?? otherLocale },\n  })}\n  {@const languagePair = { sourceLanguage: otherLocale, targetLanguage: locale }}\n  {#await isButtonDisabled(languagePair) then disabled}\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}\n      onclick={() => {\n        copyFromLocale({ ...languagePair, keyPath, translate: true });\n      }}\n    >\n      {#snippet startIcon()}\n        <Icon name=\"translate\" />\n      {/snippet}\n    </Button>\n  {/await}\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 {'polite' | 'off'} [live] Value for `aria-live` attribute. Default is \"polite\".\n   * @property {Snippet} children Slot content.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    id = undefined,\n    live = 'polite',\n    children,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div role=\"alert\" {id} class=\"validation\" aria-live={live}>\n  <div role=\"none\">\n    <Icon name=\"error\" />\n    {@render children()}\n  </div>\n</div>\n\n<style>\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 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 a Boolean field.\n  @see https://decapcms.org/docs/widgets/#Boolean\n  @see https://sveltiacms.app/en/docs/fields/boolean\n-->\n<script>\n  import { Switch } from '@sveltia/ui';\n\n  /**\n   * @import { FieldEditorProps } 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 {FieldEditorProps & 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 a Boolean field.\n  @see https://decapcms.org/docs/widgets/#Boolean\n  @see https://sveltiacms.app/en/docs/fields/boolean\n-->\n<script>\n  import { _ } from '@sveltia/i18n';\n\n  /**\n   * @import { FieldPreviewProps } 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 {FieldPreviewProps & 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 a Code field.\n  @see https://decapcms.org/docs/widgets/#Code\n  @see https://sveltiacms.app/en/docs/fields/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, FieldEditorProps } 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 | Record<string, string> | undefined} currentValue Field value.\n   */\n\n  /** @type {FieldEditorContext} */\n  const { valueStoreKey = 'currentValues' } = getContext('field-editor') ?? {};\n\n  /** @type {FieldEditorProps & 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 = 'plain',\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\n      lang = defaultLanguage;\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 a Code field.\n  @see https://decapcms.org/docs/widgets/#Code\n  @see https://sveltiacms.app/en/docs/fields/code\n-->\n<script>\n  import { entryDraft } from '$lib/services/contents/draft';\n\n  /**\n   * @import { FieldEditorProps } 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 | Record<string, string> | undefined} currentValue Field value.\n   */\n\n  /** @type {FieldEditorProps & 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 a Color field.\n  @see https://decapcms.org/docs/widgets/#color\n  @see https://sveltiacms.app/en/docs/fields/color\n  @todo Replace the native `<input>` with a custom component.\n-->\n<script>\n  import { _ } from '@sveltia/i18n';\n  import { Button, Slider, TextInput } from '@sveltia/ui';\n  import { untrack } from 'svelte';\n\n  /**\n   * @import { FieldEditorProps } 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 {FieldEditorProps & 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}$/i;\n  const RGBA_REGEX = /^(?<rgb>#[0-9a-f]{6})(?<a>[0-9a-f]{2})?$/i;\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          dir=\"ltr\"\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>\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: 88px;\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 a Color field.\n  @see https://decapcms.org/docs/widgets/#color\n  @see https://sveltiacms.app/en/docs/fields/color\n-->\n<script>\n  /**\n   * @import { FieldPreviewProps } 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 {FieldPreviewProps & 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})?$/i;\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>\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 a Compute field. Note that this editor is hidden in `FieldEditor` but\n  still needed to compute the value.\n-->\n<script>\n  import { TextInput } from '@sveltia/ui';\n  import { getContext, untrack } from 'svelte';\n\n  import { TEMPLATE_TAG_REPLACE_REGEX } from '$lib/services/common/template/constants';\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  import { isNumeric } from '$lib/services/utils/number';\n\n  /**\n   * @import { FieldEditorContext, FieldEditorProps } 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 {FieldEditorProps & 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 && isNumeric(index) ? 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 (!(keyPath in valueMap)) {\n      return;\n    }\n\n    const newValue = (() => {\n      if (valueTemplate === '{{index}}') {\n        return getIndex() ?? '';\n      }\n\n      return valueTemplate.replaceAll(TEMPLATE_TAG_REPLACE_REGEX, (_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  dir=\"auto\"\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 a Compute field.\n-->\n<script>\n  import { getCanonicalLocale, getDirection } from '$lib/services/contents/i18n';\n\n  /**\n   * @import { FieldPreviewProps } 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 {FieldPreviewProps & 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={getCanonicalLocale(locale)} dir={getDirection(locale)}>{currentValue}</p>\n","<!--\n  @component\n  Implement the editor for a DateTime field.\n  @see https://decapcms.org/docs/widgets/#Datetime\n  @see https://sveltiacms.app/en/docs/fields/datetime\n  @todo Replace the native `<input>` with a custom component.\n-->\n<script>\n  import { _ } from '@sveltia/i18n';\n  import { Button } from '@sveltia/ui';\n  import { untrack } from 'svelte';\n\n  import { parseDateTimeConfig } from '$lib/services/contents/fields/date-time/config';\n  import {\n    getCurrentDateTime,\n    getCurrentValue,\n    getDate,\n    getInputValue,\n  } from '$lib/services/contents/fields/date-time/helper';\n  import {\n    getInitialTimeZone,\n    getTimeZoneLabel,\n  } from '$lib/services/contents/fields/date-time/timezone';\n\n  /**\n   * @import { FieldEditorProps } 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 {FieldEditorProps & 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 { type, min, max, step, dateOnly, utc, singleCustomTimeZone } = $derived(\n    parseDateTimeConfig(fieldConfig),\n  );\n  const timeZone = $derived(getInitialTimeZone(currentValue, fieldConfig));\n\n  /**\n   * Update {@link inputValue} based on {@link currentValue}.\n   */\n  const setInputValue = () => {\n    const _inputValue = getInputValue({ currentValue, fieldConfig, timeZone });\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, timeZone });\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 timezone, 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    // Keep the displayed value in sync with the stored entry value.\n    void [currentValue];\n\n    untrack(() => {\n      setInputValue();\n    });\n  });\n\n  $effect(() => {\n    // Only update currentValue when inputValue changes (not when timezone changes)\n    void [inputValue];\n\n    untrack(() => {\n      setCurrentValue();\n    });\n  });\n</script>\n\n<div role=\"none\">\n  <input\n    {...{ type, min, max, step }}\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 !readonly}\n    <Button\n      variant=\"tertiary\"\n      label={_(dateOnly ? 'today' : 'now')}\n      onclick={() => {\n        inputValue = getCurrentDateTime(fieldConfig, timeZone);\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{#if singleCustomTimeZone}\n  <div role=\"none\" class=\"timezone\">\n    {getTimeZoneLabel(singleCustomTimeZone, getDate(currentValue, fieldConfig))}\n  </div>\n{:else if utc}\n  <div role=\"none\" class=\"timezone\">UTC</div>\n{/if}\n\n<style>\n  div {\n    display: flex;\n    align-items: center;\n  }\n\n  .timezone {\n    margin: 4px 8px 0;\n    color: var(--sui-secondary-foreground-color);\n    font-size: var(--sui-font-size-small);\n    white-space: nowrap;\n  }\n</style>\n","<!--\n  @component\n  Implement the preview for a DateTime field.\n  @see https://decapcms.org/docs/widgets/#Datetime\n  @see https://sveltiacms.app/en/docs/fields/datetime\n-->\n<script>\n  import { parseDateTimeConfig } from '$lib/services/contents/fields/date-time/config';\n  import {\n    getDate,\n    getDateTimeFieldDisplayValue,\n  } from '$lib/services/contents/fields/date-time/helper';\n  import { getTimeZoneLabel } from '$lib/services/contents/fields/date-time/timezone';\n  import { getCanonicalLocale, getDirection } from '$lib/services/contents/i18n';\n\n  /**\n   * @import { FieldPreviewProps } 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 {FieldPreviewProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    fieldConfig,\n    currentValue,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const { utc, singleCustomTimeZone } = $derived(parseDateTimeConfig(fieldConfig));\n  const displayValue = $derived(\n    getDateTimeFieldDisplayValue({ locale, fieldConfig, currentValue }),\n  );\n</script>\n\n{#if displayValue}\n  <p lang={getCanonicalLocale(locale)} dir={getDirection(locale)}>\n    {displayValue}\n    {#if singleCustomTimeZone}\n      — {getTimeZoneLabel(singleCustomTimeZone, getDate(currentValue, fieldConfig))}\n    {:else if utc}\n      — UTC\n    {/if}\n  </p>\n{/if}\n","<!--\n  @component Cloudinary media library panel component. This is a minimal implementation of the\n  Cloudinary Media Library widget embedded in an iframe. It sets up the iframe source URL with\n  necessary query parameters and handles communication with the iframe via `postMessage`. This way,\n  we don’t need to load the third-party script directly in our application.\n  @see https://cloudinary.com/documentation/media_library_widget\n  @see https://media-library.cloudinary.com/global/all.js\n-->\n<script>\n  import { _ } from '@sveltia/i18n';\n  import { Button, EmptyState } from '@sveltia/ui';\n  import { isObject } from '@sveltia/utils/object';\n  import { onMount } from 'svelte';\n\n  import {\n    CONFIG_PROPS,\n    CONSOLE_BASE_URL,\n    FRAME_ORIGIN,\n    FRAME_SRC_PARAMS,\n    getMergedLibraryOptions,\n  } from '$lib/services/integrations/media-libraries/cloud/cloudinary';\n  import { openNewTab } from '$lib/services/utils/window';\n\n  /**\n   * @import { MediaLibraryAssetKind, SelectedResource } from '$lib/types/private';\n   * @import { CloudinaryMediaLibrary, MediaField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {MediaField} [fieldConfig] File/Image field configuration.\n   * @property {MediaLibraryAssetKind} [kind] Asset kind.\n   * @property {boolean} [multiple] Whether to allow selecting multiple assets.\n   * @property {boolean} [hidden] Whether the panel is hidden.\n   * @property {(resources: SelectedResource[]) => void} onSelect Custom `Select` event handler.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    fieldConfig,\n    kind,\n    multiple = false,\n    hidden = false,\n    onSelect,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {CloudinaryMediaLibrary} */\n  const libOptions = $derived(getMergedLibraryOptions(fieldConfig) ?? {});\n\n  let mlId = '';\n  let authenticated = $state(false);\n  let consoleLoaded = $state(false);\n  /** @type {HTMLIFrameElement | undefined} */\n  let iframe = $state();\n\n  /**\n   * Set the iframe src URL with appropriate query parameters.\n   */\n  const initFrame = () => {\n    if (!iframe) {\n      return;\n    }\n\n    mlId = window.crypto.randomUUID();\n\n    const params = new URLSearchParams({\n      ...Object.fromEntries(\n        Object.entries(libOptions.config ?? {}).filter(([k]) => FRAME_SRC_PARAMS.includes(k)),\n      ),\n      ml_id: mlId,\n      pmHost: window.location.origin,\n      new_cms: 'true',\n      remove_header: 'true',\n    });\n\n    iframe.src = `${CONSOLE_BASE_URL}/cms?${params}`;\n  };\n\n  /**\n   * Send configuration message to the Cloudinary Media Library iframe.\n   */\n  const sendMessage = () => {\n    const config = {\n      ...Object.fromEntries(\n        Object.entries(libOptions.config ?? {}).filter(([k]) => CONFIG_PROPS.includes(k)),\n      ),\n      multiple,\n      max_files: fieldConfig?.max ?? libOptions.config?.max_files ?? 20,\n      folder: {\n        path: libOptions.config?.folder?.path ?? '',\n        resource_type: kind ?? 'raw',\n      },\n    };\n\n    const data = {\n      type: 'ML_WIDGET_SHOW',\n      data: { mlId, config },\n    };\n\n    // eslint-disable-next-line no-console\n    console.debug('Cloudinary Panel sending message:', data);\n\n    iframe?.contentWindow?.postMessage(JSON.stringify(data), FRAME_ORIGIN);\n  };\n\n  /**\n   * Handle asset insertion from the Cloudinary Media Library.\n   * @param {{ assets: { secure_url: string; derived?: { secure_url: string }[] }[] }} assets The\n   * inserted assets data.\n   */\n  const onInsert = ({ assets }) => {\n    const {\n      output_filename_only: outputFilenameOnly = false,\n      use_transformations: useTransformations = true,\n    } = libOptions;\n\n    /** @type {SelectedResource[]} */\n    const resources = assets.map((asset) => {\n      const url = asset.secure_url;\n\n      if (outputFilenameOnly) {\n        return { url: /** @type {string} */ (url.split('/').pop()) };\n      }\n\n      if (useTransformations) {\n        return { url: asset.derived?.[0]?.secure_url ?? url };\n      }\n\n      return { url };\n    });\n\n    onSelect(resources);\n  };\n\n  /**\n   * Handle messages received from the Cloudinary Media Library iframe.\n   * @param {MessageEvent} event The message event.\n   */\n  const onMessage = ({ origin, data }) => {\n    if (origin !== FRAME_ORIGIN) {\n      return;\n    }\n\n    if (typeof data === 'string') {\n      try {\n        data = JSON.parse(data);\n      } catch {\n        return;\n      }\n    }\n\n    if (!isObject(data)) {\n      return;\n    }\n\n    // eslint-disable-next-line no-console\n    console.debug('Cloudinary Panel received message:', data);\n\n    if (data.type === 'login' && data.consoleDomain) {\n      authenticated = true;\n    }\n\n    if (data.type === 'consoleLoaded') {\n      consoleLoaded = true;\n    }\n\n    if (data.type === 'ML_WIDGET_INSERT_DATA') {\n      onInsert(data.data);\n    }\n  };\n\n  onMount(() => {\n    initFrame();\n    window.addEventListener('message', onMessage);\n\n    return () => {\n      window.removeEventListener('message', onMessage);\n    };\n  });\n\n  $effect(() => {\n    if (libOptions && consoleLoaded) {\n      sendMessage();\n    }\n  });\n</script>\n\n<iframe\n  bind:this={iframe}\n  title={_('cloud_storage.cloudinary.iframe_title')}\n  hidden={hidden || !authenticated}\n  allow=\"camera; storage-access\"\n  sandbox=\"allow-same-origin allow-scripts allow-popups allow-forms\"\n>\n</iframe>\n\n{#if !hidden && !authenticated}\n  <EmptyState>\n    <Button\n      variant=\"primary\"\n      label={_('cloud_storage.cloudinary.activate.button_label')}\n      onclick={async () => {\n        // Let the user sign in to Cloudinary first in a separate tab, otherwise third-party cookies\n        // in the iframe won’t work, and authentication will fail. Allow `window.opener` so\n        // Cloudinary can send the login message back via `postMessage`.\n        openNewTab(`${CONSOLE_BASE_URL}/cms_login?cms=true`, { noopener: false });\n      }}\n    />\n    <div role=\"none\">{_('cloud_storage.cloudinary.activate.description')}</div>\n  </EmptyState>\n{/if}\n\n<style>\n  iframe {\n    display: block;\n    width: 100%;\n    height: 100%;\n    border: none;\n\n    &[hidden] {\n      display: none;\n    }\n  }\n</style>\n","<script>\n  import { TruncatedText } from '@sveltia/ui';\n  import { stripSlashes } from '@sveltia/utils/string';\n  import { sanitize } from 'isomorphic-dompurify';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [path] The asset path to display.\n   * @property {string} [caption] The caption for the asset. Either `path` or `caption` should be\n   * provided. The `path` will be split into segments and displayed with line breaks, while the\n   * `caption` will be displayed as is without splitting.\n   * @property {Snippet} [children] Slot content.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    path,\n    caption,\n    children = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const segments = $derived(path ? stripSlashes(path).split('/') : caption ? [caption] : []);\n  const sanitizeOptions = { ALLOWED_TAGS: ['wbr'] };\n\n  /**\n   * Get a label with `<wbr>` tags for line breaking after hyphens, underscores, and dots.\n   * @param {string} str The string to process.\n   * @returns {string} The processed string with `<wbr>` tags for line breaking.\n   */\n  const getLabel = (str) => sanitize(str.replace(/([-_.])/g, '$1<wbr>'), sanitizeOptions);\n</script>\n\n{#if segments.length}\n  <!-- Hide the asset path from screen readers because the image comes with alt text -->\n  <span class=\"name\" aria-hidden=\"true\">\n    <TruncatedText lines={2}>\n      {#each segments as segment, index (`${segment}-${index}`)}\n        {#if index === segments.length - 1}\n          <!-- File name -->\n          <strong>{@html getLabel(segment)}</strong>\n        {:else}\n          <!-- Folder name -->\n          {@html getLabel(segment)}/\n        {/if}\n      {/each}\n    </TruncatedText>\n    {@render children?.()}\n  </span>\n{/if}\n\n<style>\n  .name {\n    color: var(--sui-tertiary-foreground-color);\n\n    :global(strong) {\n      color: var(--sui-primary-foreground-color);\n      font-weight: var(--sui-font-weight-normal);\n    }\n  }\n</style>\n","<script>\n  import { Icon, Option } from '@sveltia/ui';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import { ViewType } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} value The `value` attribute of the option.\n   * @property {boolean} selected Whether the option is selected.\n   * @property {ViewType} [viewType] View type.\n   * @property {boolean} multiple Whether to allow selecting multiple assets.\n   * @property {(event: CustomEvent) => 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    value,\n    selected,\n    viewType = 'grid',\n    multiple,\n    onChange,\n    children,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div role=\"none\" class=\"wrapper {viewType}\">\n  <Option label=\"\" {value} {selected} {onChange}>\n    {#snippet startIcon()}\n      {#if multiple}\n        <span role=\"none\" class=\"icon check-background\">\n          <Icon name=\"check\" class=\"icon check\" />\n        </span>\n      {/if}\n    {/snippet}\n    {@render children?.()}\n  </Option>\n</div>\n\n<style>\n  .wrapper {\n    display: contents;\n\n    :global {\n      [role='option'] {\n        position: relative;\n\n        & > .icon.check {\n          display: none;\n        }\n\n        &[aria-selected='false'] {\n          .check-background {\n            border-color: var(--sui-checkbox-border-color);\n            background-color: var(--sui-checkbox-background-color);\n\n            .icon {\n              display: none;\n            }\n          }\n        }\n\n        &[aria-selected='true'] {\n          .check-background {\n            border-color: var(--sui-primary-accent-color);\n            color: var(--sui-primary-accent-color-inverted);\n            background-color: var(--sui-primary-accent-color);\n          }\n        }\n\n        .check-background {\n          display: flex;\n          justify-content: center;\n          align-items: center;\n          border-width: 1px;\n          border-radius: var(--sui-checkbox-border-radius);\n          width: 20px;\n          height: 20px;\n          pointer-events: none;\n\n          .icon {\n            color: inherit !important;\n            font-size: 20px;\n          }\n        }\n      }\n    }\n\n    &.grid {\n      :global {\n        .check-background {\n          position: absolute;\n          inset-block-start: 8px;\n          inset-inline-start: 8px;\n          z-index: 1;\n        }\n      }\n    }\n\n    &.list {\n      :global {\n        .check-background {\n          margin-inline-start: 16px;\n        }\n      }\n    }\n  }\n</style>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Listbox } from '@sveltia/ui';\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} [multiple] Whether to allow selecting multiple assets.\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    multiple = false,\n    onChange = undefined,\n    children = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div role=\"none\" class=\"wrapper\">\n  <Listbox\n    id={gridId}\n    class={viewType}\n    {multiple}\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>\n  .wrapper {\n    display: contents;\n\n    :global {\n      .listbox {\n        gap: 4px;\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              &:empty {\n                display: none;\n              }\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      .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 { _, locale as appLocale } from '@sveltia/i18n';\n  import { AlertDialog } from '@sveltia/ui';\n\n  import { getListFormatter } from '$lib/services/contents/i18n';\n  import { formatSize } from '$lib/services/utils/file';\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} open Whether the size limit dialog is open.\n   * @property {string[]} oversizedFileNames The names of the files that exceed the size limit.\n   * @property {number} maxSize The maximum allowed file size in bytes.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    open = $bindable(false),\n    oversizedFileNames,\n    maxSize,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<AlertDialog bind:open title={_('assets_dialog.large_file.title')}>\n  <div>\n    {_('warning_oversized_files', {\n      values: { count: oversizedFileNames.length, size: formatSize(maxSize) },\n    })}\n  </div>\n  <div>\n    {getListFormatter(appLocale.current).format(oversizedFileNames)}\n  </div>\n</AlertDialog>\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 { _ } from '@sveltia/i18n';\n  import {\n    Alert,\n    Button,\n    EmptyState,\n    InfiniteScroll,\n    SecretInput,\n    TextInput,\n    Toast,\n  } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import { sanitize } from 'isomorphic-dompurify';\n  import { onMount, untrack } from 'svelte';\n\n  import AssetPath from '$lib/components/assets/browser/asset-path.svelte';\n  import SimpleImageGridItem from '$lib/components/assets/browser/simple-image-grid-item.svelte';\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 DropZone from '$lib/components/assets/shared/drop-zone.svelte';\n  import OversizeAlertDialog from '$lib/components/assets/shared/oversize-alert-dialog.svelte';\n  import { processFile } from '$lib/services/assets/process';\n  import { cmsConfig } from '$lib/services/config';\n  import { selectAssetsView } from '$lib/services/contents/editor';\n  import { env } from '$lib/services/user/env.svelte';\n  import { prefs } from '$lib/services/user/prefs.svelte';\n\n  /**\n   * @import {\n   * ExternalAsset,\n   * MediaLibraryAssetKind,\n   * MediaLibraryFetchOptions,\n   * MediaLibraryService,\n   * SelectedResource,\n   * } from '$lib/types/private';\n   * @import { MediaField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {MediaField} [fieldConfig] File/Image field configuration.\n   * @property {MediaLibraryAssetKind} [kind] Asset kind.\n   * @property {boolean} [multiple] Whether to allow selecting multiple assets.\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 {SelectedResource[]} selectedResources Selected resources.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    kind,\n    fieldConfig = undefined,\n    multiple = false,\n    searchTerms = '',\n    serviceProps,\n    gridId = undefined,\n    selectedResources = $bindable([]),\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    list,\n    search,\n    upload,\n  } = $derived(serviceProps);\n\n  // Use the grid view for Picsum as it doesn’t provide description for the assets, and the list\n  // view relies on the description to show asset information.\n  const viewType = $derived(serviceId === 'picsum' ? 'grid' : $selectAssetsView?.type);\n  const isStockAssets = $derived(serviceType === 'stock_assets');\n  const allMediaLibraryOptions = $derived(\n    fieldConfig?.media_libraries?.all ?? $cmsConfig?.media_libraries?.all ?? {},\n  );\n  const maxSize = $derived(\n    /** @type {number} */ (allMediaLibraryOptions.max_file_size ?? Infinity),\n  );\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 listedAssets = $state(null);\n  /** @type {string | undefined} */\n  let error = $state();\n  /** @type {{ show: boolean, status: 'info' | 'error', length: number }} */\n  let uploadingToast = $state({ show: false, status: 'info', length: 0 });\n  /** @type {string[]} */\n  let oversizedFileNames = $state([]);\n  let showOversizeAlert = $state(false);\n\n  /** @type {MediaLibraryFetchOptions} */\n  const listFetchOptions = $derived({ kind, fieldConfig, apiKey, userName, password });\n\n  /**\n   * Search or list assets from the external media library.\n   * @param {string} [query] Search query.\n   */\n  const getAssets = async (query = '') => {\n    listedAssets = null;\n    query = query.trim();\n\n    try {\n      listedAssets =\n        (await (query ? search?.(query, listFetchOptions) : list?.(listFetchOptions))) ?? [];\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 return the file and credit. If hotlinking is\n   * required by the service, just return the URL instead of downloading the file.\n   * @param {ExternalAsset} asset Selected asset.\n   * @returns {Promise<SelectedResource | undefined>} The selected resource with the file or URL.\n   * @todo Support video files.\n   */\n  const getResource = async (asset) => {\n    const { downloadURL: url, fileName, credit } = asset;\n\n    if (hotlinking) {\n      return { url, credit };\n    }\n\n    try {\n      const response = await fetch(url);\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      return { url, credit, file };\n    } catch (ex) {\n      error = 'image_fetch_failed';\n      // eslint-disable-next-line no-console\n      console.error(ex);\n    }\n\n    return undefined;\n  };\n\n  /**\n   * Handle `Drop` event to upload files.\n   * @param {File[]} files Dropped files.\n   */\n  export const uploadFiles = async (files) => {\n    if (!upload) {\n      return;\n    }\n\n    const processed = await Promise.all(files.map((f) => processFile(f, allMediaLibraryOptions)));\n\n    files = processed.filter(({ oversized }) => !oversized).map(({ file }) => file);\n\n    oversizedFileNames = processed\n      .filter(({ oversized }) => oversized)\n      .map(({ file }) => file.name);\n\n    if (oversizedFileNames.length) {\n      showOversizeAlert = true;\n    }\n\n    if (!files.length) {\n      return;\n    }\n\n    uploadingToast = { show: true, status: 'info', length: files.length };\n\n    try {\n      const uploaded = await upload(files, listFetchOptions);\n      const resources = await Promise.all(uploaded.map((asset) => getResource(asset)));\n\n      selectedResources = resources.filter((r) => !!r).slice(0, multiple ? undefined : 1);\n      listedAssets = [...uploaded, ...(listedAssets ?? [])];\n    } catch {\n      uploadingToast = { show: true, status: 'error', length: files.length };\n    }\n  };\n\n  /**\n   * Check if the given asset is already selected.\n   * @param {ExternalAsset} asset The asset to check.\n   * @returns {boolean} `true` if the asset is selected, `false` otherwise.\n   */\n  const isSelected = (asset) => selectedResources.some((r) => r.url === asset.downloadURL);\n\n  /**\n   * Handle selection change of an asset.\n   * @param {ExternalAsset} asset The asset whose selection changed.\n   * @param {boolean} selected `true` if the asset is now selected, `false` otherwise.\n   */\n  const onSelectionChange = async (asset, selected) => {\n    const otherResources = selectedResources.filter((r) => r.url !== asset.downloadURL);\n\n    if (selected) {\n      const resource = await getResource(asset);\n\n      if (resource) {\n        selectedResources = [...otherResources, resource];\n      }\n    } else {\n      selectedResources = otherResources;\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 = authType === 'none' || !!apiKey || !!password;\n      listedAssets = null;\n    })();\n  });\n\n  $effect(() => {\n    void [searchTerms, hasAuthInfo];\n\n    untrack(() => {\n      if (hasAuthInfo) {\n        getAssets(searchTerms);\n      }\n    });\n  });\n</script>\n\n{#snippet content()}\n  {#if !listedAssets}\n    <EmptyState>\n      <span role=\"alert\">{_(searchTerms ? 'searching' : 'loading')}</span>\n    </EmptyState>\n  {:else if !listedAssets.length}\n    <EmptyState>\n      <span role=\"alert\">{_('no_files_found')}</span>\n    </EmptyState>\n  {:else}\n    <div role=\"none\" class=\"grid-wrapper\">\n      <SimpleImageGrid {viewType} {gridId} {multiple}>\n        <InfiniteScroll items={listedAssets ?? []} itemKey=\"id\">\n          {#snippet renderItem(/** @type {ExternalAsset} */ asset)}\n            {#await sleep() then}\n              {@const { id, previewURL, description, kind: _kind } = asset}\n              <SimpleImageGridItem\n                value={id}\n                {viewType}\n                {multiple}\n                selected={isSelected(asset)}\n                onChange={({ detail: { selected } }) => {\n                  onSelectionChange(asset, selected);\n                }}\n              >\n                <AssetPreview\n                  kind={_kind}\n                  src={previewURL}\n                  alt={description}\n                  variant=\"tile\"\n                  crossorigin=\"anonymous\"\n                />\n                {#if viewType === 'list' || (!env.isSmallScreen && !isStockAssets)}\n                  <AssetPath\n                    path={isStockAssets ? undefined : description}\n                    caption={isStockAssets ? description : undefined}\n                  />\n                {/if}\n              </SimpleImageGridItem>\n            {/await}\n          {/snippet}\n        </InfiniteScroll>\n      </SimpleImageGrid>\n    </div>\n  {/if}\n{/snippet}\n\n{#if hasAuthInfo}\n  {#if error}\n    <EmptyState>\n      <span role=\"alert\">{_(`assets_dialog.error.${error}`)}</span>\n    </EmptyState>\n  {:else if upload}\n    <DropZone accept={fieldConfig?.accept} multiple onDrop={({ files }) => uploadFiles(files)}>\n      {@render content()}\n    </DropZone>\n  {:else}\n    {@render content()}\n  {/if}\n{:else if hasConfig}\n  <EmptyState>\n    <p role=\"alert\">\n      {#if isStockAssets}\n        {@html sanitize(\n          _('prefs.media.stock_photos.description', {\n            values: {\n              service: serviceLabel,\n              homeHref: `href=\"${developerURL}\"`,\n              apiKeyHref: `href=\"${apiKeyURL}\"`,\n            },\n          })\n            // Remove invisible characters used for link detection in the locale string\n            .replace(/[\\u2068\\u2069]/g, ''),\n          { ALLOWED_TAGS: ['a'], ALLOWED_ATTR: ['href', 'target', 'rel'] },\n        )}\n      {/if}\n      {#if serviceType === 'cloud_storage'}\n        {@html sanitize(\n          _(`cloud_storage.${serviceId}.auth.${authState}`, {\n            default: _(`cloud_storage.auth.${authType}.${authState}`, {\n              values: {\n                service: serviceLabel,\n                key: _(`cloud_storage.${serviceId}.auth_key_label`, {\n                  default: _(`cloud_storage.auth.${authType}.key_label`),\n                }),\n              },\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          dir=\"ltr\"\n          flex\n          monospace\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              getAssets();\n            }\n          }}\n        />\n      </div>\n    {/if}\n    {#if authType === 'password'}\n      <div role=\"none\" class=\"input-outer\">\n        <TextInput\n          dir=\"ltr\"\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        <SecretInput\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              getAssets();\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<Toast bind:show={uploadingToast.show}>\n  <Alert status={uploadingToast.status}>\n    {#if uploadingToast.status === 'info'}\n      {_('uploading_files_progress', { values: { count: uploadingToast.length } })}\n    {/if}\n    {#if uploadingToast.status === 'error'}\n      {_('uploading_files_failed', { values: { count: uploadingToast.length } })}\n    {/if}\n  </Alert>\n</Toast>\n\n<OversizeAlertDialog bind:open={showOversizeAlert} {oversizedFileNames} {maxSize} />\n\n<style>\n  .grid-wrapper {\n    overflow-y: auto;\n    height: 100%;\n  }\n\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","<script>\n  import { _ } from '@sveltia/i18n';\n  import { EmptyState, InfiniteScroll } 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\n  import AssetPath from '$lib/components/assets/browser/asset-path.svelte';\n  import SimpleImageGridItem from '$lib/components/assets/browser/simple-image-grid-item.svelte';\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 { env } from '$lib/services/user/env.svelte';\n\n  /**\n   * @import { Asset, SelectedResource, ViewType } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} [multiple] Whether to allow selecting multiple assets.\n   * @property {Asset[]} [assets] Asset list.\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 {SelectedResource[]} [selectedResources] Selected resources.\n   * @property {(detail: { asset: Asset }) => void} [onSelect] Custom `select` event handler.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    multiple = false,\n    assets = [],\n    viewType = 'grid',\n    searchTerms = '',\n    basePath = undefined,\n    gridId = undefined,\n    checkerboard = false,\n    selectedResources = $bindable([]),\n    onSelect = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  // Split the search terms into an array of individual terms for filtering purposes. If no search\n  // terms are provided, use an empty array.\n  const searchTermsArray = $derived(searchTerms ? searchTerms.split(/\\s+/).filter(Boolean) : []);\n\n  /** @type {(Asset & { relPath: string })[]} */\n  const filteredAssets = $derived.by(() => {\n    let _assets = assets.map((asset) => {\n      const { folder, name, path } = asset;\n\n      // Compute the relative path for display and filtering purposes. If the asset is in a folder,\n      // we want to show the path relative to that folder. If the asset is not in a folder, we just\n      // show the file name.\n      const relPath =\n        basePath && !folder.entryRelative ? stripSlashes(path.replace(basePath, '')) : name;\n\n      return { ...asset, relPath };\n    });\n\n    if (searchTermsArray.length) {\n      // Filter assets by search terms in the relative path\n      _assets = _assets.filter(({ relPath }) =>\n        searchTermsArray.every((term) => normalize(relPath).includes(term)),\n      );\n    }\n\n    // Remove duplicates based on asset path to avoid Svelte key conflicts\n    // @todo better handle duplicates at the source\n    return _assets.filter(\n      (asset, index, arr) => arr.findIndex((other) => other.path === asset.path) === index,\n    );\n  });\n\n  /**\n   * Check if the given asset is already selected.\n   * @param {Asset} asset The asset to check.\n   * @returns {boolean} `true` if the asset is selected, `false` otherwise.\n   */\n  const isSelected = (asset) => selectedResources.some((r) => equal(r.asset, asset));\n\n  /**\n   * Handle selection change of an asset.\n   * @param {Asset} asset The asset whose selection changed.\n   * @param {boolean} selected `true` if the asset is now selected, `false` otherwise.\n   */\n  const onSelectionChange = (asset, selected) => {\n    const otherResources = selectedResources.filter((r) => !equal(r.asset, asset));\n\n    if (selected) {\n      selectedResources = [...otherResources, { asset }];\n      onSelect?.({ asset });\n    } else {\n      selectedResources = otherResources;\n    }\n  };\n</script>\n\n{#if filteredAssets.length}\n  <div role=\"none\" class=\"grid-wrapper\">\n    <SimpleImageGrid {multiple} {gridId} {viewType}>\n      <InfiniteScroll items={filteredAssets} itemKey=\"path\">\n        {#snippet renderItem(/** @type {Asset & { relPath: string }} */ asset)}\n          {#await sleep() then}\n            {@const { kind, unsaved, path, relPath } = asset}\n            <SimpleImageGridItem\n              value={path}\n              {viewType}\n              {multiple}\n              selected={isSelected(asset)}\n              onChange={({ detail: { selected } }) => {\n                onSelectionChange(asset, selected);\n              }}\n            >\n              {#if viewType === 'grid' && unsaved}\n                <div role=\"none\" class=\"unsaved\">{_('assets_dialog.unsaved')}</div>\n              {/if}\n              <AssetPreview {kind} {asset} alt={relPath} variant=\"tile\" {checkerboard} />\n              {#if !env.isSmallScreen || viewType === 'list'}\n                <AssetPath path={relPath}>\n                  {#if viewType === 'list' && unsaved}\n                    <div role=\"none\" class=\"unsaved\">{_('assets_dialog.unsaved')}</div>\n                  {/if}\n                </AssetPath>\n              {/if}\n            </SimpleImageGridItem>\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>\n  .grid-wrapper {\n    overflow-y: auto;\n    height: 100%;\n\n    :global {\n      [role='listbox'] {\n        background-color: transparent;\n\n        &.grid {\n          .unsaved {\n            position: absolute;\n            inset-block-start: 8px;\n            inset-inline-end: 8px;\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</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 {boolean} [multiple] Whether to allow selecting multiple assets.\n   * @property {string | undefined} [accept] Accepted file type specifiers.\n   * @property {Asset[]} [assets] Asset list.\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 {SelectedResource[]} selectedResources Selected resources.\n   * @property {(detail: { files: File[] }) => void} [onDrop] Custom `Drop` event handler.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    multiple = false,\n    accept = undefined,\n    assets = [],\n    searchTerms = '',\n    basePath = undefined,\n    selectedResources = $bindable([]),\n    onDrop,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {DropZone | undefined} */\n  let dropZone = $state();\n\n  $effect(() => {\n    if (!selectedResources.length) {\n      untrack(() => {\n        dropZone?.reset();\n      });\n    }\n  });\n</script>\n\n<DropZone bind:this={dropZone} {multiple} {accept} {onDrop}>\n  <AssetsPanel\n    {multiple}\n    {assets}\n    viewType={$selectAssetsView?.type}\n    {searchTerms}\n    {basePath}\n    gridId=\"select-assets-grid\"\n    checkerboard={true}\n    bind:selectedResources\n  />\n</DropZone>\n","import { getDuplicateFiles } from '$lib/services/assets';\n\n/**\n * @import { Asset } from '$lib/types/private';\n */\n\n/**\n * @typedef {object} DuplicatesState\n * @property {number} count Number of duplicate files.\n * @property {string} name Name of the first duplicate file.\n * @property {boolean} showDialog Whether to show the duplicates dialog.\n * @property {(value: boolean | undefined) => void} resolve Function to resolve the promise.\n */\n\n/** @type {DuplicatesState} */\nconst DEFAULT_STATE = {\n  count: 0,\n  name: '',\n  showDialog: false,\n  // eslint-disable-next-line jsdoc/require-jsdoc\n  resolve: () => {},\n};\n\n/** @type {DuplicatesState} */\nexport const duplicates = $state({ ...DEFAULT_STATE });\n\n/**\n * Check for duplicate files and ask the user if they want to replace them.\n * @param {object} args Arguments.\n * @param {File[]} args.files File list.\n * @param {Asset[]} args.listedAssets Listed assets.\n * @returns {Promise<boolean | undefined>} `true` if the user chooses to replace the existing file,\n * `false` if not, or `undefined` if the dialog is closed without making a choice. When there are no\n * duplicate files, it returns `false` immediately.\n */\nexport const checkDuplicates = async ({ files, listedAssets }) => {\n  const dupFiles = getDuplicateFiles(files, listedAssets);\n  const count = dupFiles.length;\n\n  if (!count) {\n    return false;\n  }\n\n  const { promise, resolve } = Promise.withResolvers();\n\n  Object.assign(duplicates, {\n    count,\n    name: dupFiles[0].name,\n    showDialog: true,\n    resolve,\n  });\n\n  const replace = await promise;\n\n  // Reset state\n  Object.assign(duplicates, { ...DEFAULT_STATE });\n\n  return replace;\n};\n","import { getHash } from '@sveltia/utils/crypto';\nimport { getPathInfo } from '@sveltia/utils/file';\nimport equal from 'fast-deep-equal';\nimport { get } from 'svelte/store';\n\nimport { allAssets } from '$lib/services/assets';\nimport { allAssetFolders, getAssetFolder, globalAssetFolder } from '$lib/services/assets/folders';\n\n/**\n * @import {\n * Asset,\n * AssetFolderInfo,\n * AssetLibraryFolderMap,\n * Entry,\n * TypedFieldKeyPath,\n * } from '$lib/types/private';\n */\n\n/**\n * Get the default library folder map for a File/Image field.\n * @param {object} args Arguments.\n * @param {string} args.collectionName Collection name.\n * @param {string} [args.fileName] File name.\n * @param {TypedFieldKeyPath} [args.typedKeyPath] Key path to the field.\n * @param {boolean} [args.isIndexFile] Whether the asset folder is for the special index file used\n * specifically in Hugo. It works only for field-level media folders in an entry collection.\n * @returns {AssetLibraryFolderMap} Default asset library folder map.\n */\nexport const getAssetLibraryFolderMap = ({\n  collectionName,\n  fileName,\n  typedKeyPath,\n  isIndexFile,\n}) => {\n  const fieldAssetFolder = getAssetFolder({ collectionName, fileName, typedKeyPath, isIndexFile });\n  const fileAssetFolder = fileName ? getAssetFolder({ collectionName, fileName }) : undefined;\n  const collectionAssetFolder = getAssetFolder({ collectionName });\n  const entryAssetFolder = fileAssetFolder ?? collectionAssetFolder;\n  const globalFolder = get(globalAssetFolder);\n\n  /** @type {AssetLibraryFolderMap} */\n  const map = {\n    field: {\n      folder: fieldAssetFolder,\n      enabled: fieldAssetFolder !== undefined,\n    },\n    entry: {\n      folder: entryAssetFolder,\n      enabled:\n        !!entryAssetFolder && (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: globalFolder,\n      enabled: globalFolder !== undefined,\n    },\n  };\n\n  // Add asset collection folders\n  get(allAssetFolders).forEach((folder) => {\n    if (folder.isAssetCollection && folder.collectionName) {\n      map[folder.collectionName] = { folder, enabled: true };\n    }\n  });\n\n  return map;\n};\n\n/**\n * Get the target folder path for a File/Image field.\n * @param {object} args Arguments.\n * @param {Entry | undefined} args.entry Original entry.\n * @param {AssetFolderInfo | undefined} args.folder Selected folder.\n * @returns {string | undefined} Target folder path.\n */\nexport const getTargetFolderPath = ({ entry, folder }) => {\n  const { entryRelative, internalPath, internalSubPath } = folder ?? {};\n\n  if (!entryRelative) {\n    // @todo FIXME: Replace all template tags in the path, not just `{{slug}}`\n    return internalPath?.replace('{{slug}}', entry?.slug ?? '-');\n  }\n\n  // A non-empty `internalSubPath` means the field has its own `media_folder` subfolder (e.g.\n  // `media_folder: \"images1\"`). Append it so that only assets in that specific subfolder are shown,\n  // not assets from sibling field folders (e.g. `images2`).\n  const subPath = internalSubPath || undefined;\n\n  if (entry) {\n    const entryDir = getPathInfo(Object.values(entry.locales)[0].path).dirname;\n\n    return subPath ? `${entryDir}/${subPath}` : entryDir;\n  }\n\n  // Append a placeholder because the complete path is not determined until the entry is saved\n  return subPath ? `${internalPath}/${subPath}/-` : `${internalPath}/-`;\n};\n\n/**\n * Check if a given path is in the target folder or its subfolders.\n * @param {object} args Arguments.\n * @param {string} args.path Path to check.\n * @param {string | undefined} args.folderPath Target folder path.\n * @returns {boolean} `true` if the path is in the target folder.\n */\nconst isInTargetFolder = ({ path, folderPath }) =>\n  folderPath !== undefined &&\n  (path === folderPath ||\n    // Handle the case where the target folder is a template with an unresolved placeholder\n    `${path}/-` === folderPath ||\n    path.startsWith(`${folderPath}/`));\n\n/**\n * Check if an asset is in the selected folder.\n * @param {object} args Arguments.\n * @param {Asset} args.asset Asset to check.\n * @param {AssetFolderInfo | undefined} args.folder Selected folder.\n * @param {string | undefined} args.folderPath Target folder path.\n * @returns {boolean} `true` if the asset is in the selected folder.\n */\nexport const isAssetInSelectedFolder = ({ asset, folder, folderPath }) => {\n  if (\n    folder === undefined ||\n    asset.folder?.internalPath !== folder.internalPath ||\n    asset.folder?.entryRelative !== folder.entryRelative\n  ) {\n    return false;\n  }\n\n  if (!folder.entryRelative) {\n    return isInTargetFolder({ path: asset.path, folderPath });\n  }\n\n  const { dirname } = getPathInfo(asset.path);\n\n  if (dirname === undefined) {\n    return false;\n  }\n\n  return isInTargetFolder({ path: dirname, folderPath });\n};\n\n/**\n * Get the list of assets to show in the asset library, filtered by the selected folder and kind.\n * @param {object} args Arguments.\n * @param {'image' | undefined} args.kind Asset kind.\n * @param {AssetFolderInfo | undefined} args.folder Selected folder.\n * @param {string | undefined} args.folderPath Target folder path.\n * @param {Asset[]} args.unsavedAssets Unsaved assets.\n * @returns {Asset[]} List of assets to show in the asset library.\n */\nexport const listAssets = ({ kind, folder, folderPath, unsavedAssets }) => {\n  const availableAssets = [...get(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  return availableAssets.filter((asset) => isAssetInSelectedFolder({ asset, folder, folderPath }));\n};\n\n/**\n * Check if an asset with the same hash and folder already exists in the unsaved assets.\n * @param {object} args Arguments.\n * @param {string} args.hash Hash of the file.\n * @param {AssetFolderInfo | undefined} args.folder Asset folder.\n * @param {Asset[]} args.unsavedAssets Unsaved assets.\n * @returns {Promise<boolean>} `true` if the asset already exists.\n */\nexport const hasSameAsset = async ({ hash, folder, unsavedAssets }) => {\n  const results = await Promise.all(\n    unsavedAssets.map(\n      async (asset) =>\n        !!asset.file && equal(asset.folder, folder) && (await getHash(asset.file)) === hash,\n    ),\n  );\n\n  return results.includes(true);\n};\n","import { getHash } from '@sveltia/utils/crypto';\nimport equal from 'fast-deep-equal';\nimport { sanitize } from 'isomorphic-dompurify';\nimport { get } from 'svelte/store';\n\nimport { allAssets } from '$lib/services/assets';\nimport { getAssetPublicURL } from '$lib/services/assets/info';\nimport { getAssetKind } from '$lib/services/assets/kinds';\nimport { processFile } from '$lib/services/assets/process';\nimport { getGitHash } from '$lib/services/utils/file';\n\n/**\n * @import { Asset, AssetFolderInfo, EntryDraft, SelectedResource } from '$lib/types/private';\n * @import { DefaultMediaLibraryConfig } from '$lib/types/public';\n */\n\nconst FOLDER_PATH_REGEX = /(?<path>.+?)(?:\\/[^/]+)?$/;\n\n/**\n * Get the blob URL of an unsaved file that matches the given file.\n * @internal\n * @param {object} args Arguments.\n * @param {EntryDraft} args.draft Entry draft containing the resource.\n * @param {File} args.file File to be searched.\n * @param {AssetFolderInfo} [args.folder] Asset folder for the field. When the folder is\n * entry-relative, only files in the same folder are considered a match.\n * @returns {Promise<string | undefined>} Blob URL.\n */\nexport const getExistingBlobURL = async ({ draft, file, folder }) => {\n  const hash = await getHash(file);\n  /** @type {string | undefined} */\n  let foundURL = undefined;\n\n  await Promise.all(\n    Object.entries(draft.files ?? {}).map(async ([blobURL, f]) => {\n      if (\n        !foundURL &&\n        (await getHash(f.file)) === hash &&\n        (!folder?.entryRelative || equal(f.folder, folder))\n      ) {\n        foundURL = blobURL;\n      }\n    }),\n  );\n\n  return foundURL;\n};\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 * @param {string} [args.targetFolderPath] Target folder path.\n * @returns {Promise<Asset>} Asset.\n */\nexport const convertFileItemToAsset = async ({ file, blobURL, folder, targetFolderPath }) => {\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 ? `${targetFolderPath}/${name}` : 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 * @param {object} args Arguments.\n * @param {EntryDraft} args.draft Entry draft containing the resource.\n * @param {string} [args.targetFolderPath] Target folder path.\n * @returns {Promise<Asset[]>} Assets.\n */\nexport const getUnsavedAssets = async ({ draft, targetFolderPath }) =>\n  Promise.all(\n    Object.entries(draft.files).map(async ([blobURL, { file, folder }]) =>\n      convertFileItemToAsset({ file, blobURL, folder, targetFolderPath }),\n    ),\n  );\n\n/**\n * Get the saved assets relevant to the current entry draft and folder. For entry-relative folders,\n * the result is filtered to only include assets within the current entry’s own folder, preventing\n * false duplicate detection across entries that share the same folder config template.\n * @param {EntryDraft} draft Entry draft.\n * @param {AssetFolderInfo | undefined} folder Asset folder associated with the field.\n * @returns {Asset[]} Filtered saved assets.\n */\nconst getSavedAssetsForEntry = (draft, folder) => {\n  const savedAssets = get(allAssets);\n\n  if (!folder?.entryRelative) {\n    return savedAssets;\n  }\n\n  const { originalEntry, defaultLocale, collection } = draft;\n  const entryFilePath = originalEntry?.locales[defaultLocale]?.path;\n\n  if (!entryFilePath) {\n    // New entry — no saved assets exist for this entry yet\n    return [];\n  }\n\n  const subPath = collection._type === 'entry' ? collection._file.subPath : undefined;\n  const lastSubPathSegment = subPath?.includes('/') ? subPath.split('/').at(-1) : undefined;\n  // Strip the file extension and any fixed nested filename suffix (e.g., `{{slug}}/index` → remove\n  // the trailing `index` segment) to get the entry folder path.\n  let entryFolderPath = entryFilePath.substring(0, entryFilePath.lastIndexOf('.'));\n\n  if (lastSubPathSegment && !lastSubPathSegment.includes('{{')) {\n    entryFolderPath = entryFolderPath.match(FOLDER_PATH_REGEX)?.groups?.path ?? entryFolderPath;\n  }\n\n  const expectedPrefix = [entryFolderPath, folder.internalSubPath].filter(Boolean).join('/');\n\n  return savedAssets.filter((a) => a.path.startsWith(`${expectedPrefix}/`));\n};\n\n/**\n * Process a selected resource.\n * @param {object} args Arguments.\n * @param {EntryDraft} args.draft Entry draft containing the resource.\n * @param {SelectedResource} args.resource Resource to be processed.\n * @param {DefaultMediaLibraryConfig} args.libraryConfig Configuration for the media library.\n * @returns {Promise<{ value: string | undefined, credit: string, oversizedFileName: string |\n * undefined }>} Processed resource value, credit, and file name if the file is oversized.\n */\nexport const processResource = async ({ draft, resource, libraryConfig }) => {\n  const { url, credit, replace = false } = resource;\n  let { asset, file } = resource;\n  /** @type {string | undefined} */\n  let value = '';\n  /** @type {string | undefined} */\n  let oversizedFileName = undefined;\n\n  if (file) {\n    const { folder } = resource;\n    const existingBlobURL = await getExistingBlobURL({ draft, file, folder });\n\n    if (existingBlobURL) {\n      value = existingBlobURL;\n    } else {\n      const { file: processedFile, oversized } = await processFile(file, libraryConfig ?? {});\n\n      file = processedFile;\n\n      const sha = await getGitHash(file);\n\n      // Check if the selected file has already been uploaded or is pending upload, otherwise\n      // duplicate files lead to an `each_key_duplicate` error in Svelte\n      const existingAsset = [\n        ...getSavedAssetsForEntry(draft, folder),\n        ...(await getUnsavedAssets({ draft })),\n      ].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 (oversized) {\n        oversizedFileName = file.name;\n        file = undefined;\n      } else {\n        // Set a temporary blob URL, which will be later replaced with the actual file path\n        value = URL.createObjectURL(file);\n        // Cache the file itself for later upload\n        draft.files[value] = { file, folder, replace };\n      }\n    }\n  }\n\n  if (asset) {\n    if (!asset.unsaved) {\n      value = getAssetPublicURL(asset, {\n        pathOnly: true,\n        allowSpecial: true,\n        entry: draft.originalEntry,\n      });\n    } else if (asset.file) {\n      value = await getExistingBlobURL({ draft, file: asset.file, folder: asset.folder });\n    }\n  }\n\n  if (url && !file && !asset) {\n    value = url;\n  }\n\n  return {\n    value,\n    credit: credit ? sanitize(credit, { ALLOWED_TAGS: ['a'], ALLOWED_ATTR: ['href'] }) : '',\n    oversizedFileName,\n  };\n};\n","/* eslint-disable no-await-in-loop */\n\nimport { locale as appLocale } from '@sveltia/i18n';\nimport { sleep } from '@sveltia/utils/misc';\n\n/**\n * @import {\n * ExternalAsset,\n * MediaLibraryFetchOptions,\n * MediaLibraryService,\n * } from '$lib/types/private';\n */\n\n/**\n * @typedef {object} FetchResult\n * @property {number} id Asset ID.\n * @property {string} url Page URL.\n * @property {string} alt Description.\n * @property {{ large2x: string, medium: string }} src Image URLs.\n * @property {string} photographer Photographer name.\n */\n\n/**\n * @see https://www.pexels.com/api/documentation/#photos-search__parameters__locale\n */\nconst SUPPORTED_LOCALES = [\n  'en-US,pt-BR,es-ES,ca-ES,de-DE,it-IT,fr-FR,sv-SE,id-ID,pl-PL,ja-JP,zh-TW,zh-CN,ko-KR,th-TH,nl-NL',\n  'hu-HU,vi-VN,cs-CZ,da-DK,fi-FI,uk-UA,el-GR,ro-RO,nb-NO,sk-SK,tr-TR,ru-RU',\n]\n  .join(',')\n  .split(',');\n\nconst ENDPOINT = 'https://api.pexels.com/v1';\n\n/** @type {Record<string, any>} */\nconst SEARCH_PARAMS = {\n  per_page: 80,\n};\n\nconst DESCRIPTION_REGEX = /\\/photo\\/(?<alt>.+?)-\\d+\\/$/;\n\n/**\n * Get the best matching locale supported by Pexels API.\n * @returns {string} Locale code.\n */\nexport const getLocale = () => {\n  const locale = appLocale.current.toLowerCase();\n  const [lang] = locale.split('-');\n\n  return (\n    SUPPORTED_LOCALES.find((code) => code.toLowerCase() === locale) ??\n    SUPPORTED_LOCALES.find((code) => code.split('-')[0] === lang) ??\n    'en-US'\n  );\n};\n\n/**\n * Parse API results into ExternalAsset format.\n * @param {FetchResult[]} results API results.\n * @returns {ExternalAsset[]} Assets.\n */\nexport const parseResults = (results) =>\n  results.map(({ id, url, alt, src: { large2x, medium }, photographer }) => ({\n    id: String(id),\n    description: url.match(DESCRIPTION_REGEX)?.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 * Fetch curated pictures.\n * @param {MediaLibraryFetchOptions} options Options.\n * @returns {Promise<ExternalAsset[]>} Assets.\n * @see https://www.pexels.com/api/documentation/\n * @todo Support video files.\n */\nexport const list = async ({ apiKey }) => {\n  const headers = { Authorization: apiKey };\n  const params = new URLSearchParams(SEARCH_PARAMS);\n  const response = await fetch(`${ENDPOINT}/curated?${params}`, { headers });\n\n  if (!response.ok) {\n    return Promise.reject();\n  }\n\n  /** @type {FetchResult[]} */\n  const results = (await response.json()).photos;\n\n  return parseResults(results);\n};\n\n/**\n * Search images or fetch curated pictures if no query is given.\n * @param {string} query Search query.\n * @param {MediaLibraryFetchOptions} options Options.\n * @returns {Promise<ExternalAsset[]>} Assets.\n * @see https://www.pexels.com/api/documentation/\n * @todo Support video files.\n */\nexport const search = async (query, { apiKey }) => {\n  const headers = { Authorization: apiKey };\n\n  const params = new URLSearchParams({\n    ...SEARCH_PARAMS,\n    query,\n    locale: getLocale(),\n  });\n\n  /** @type {FetchResult[]} */\n  const results = [];\n\n  for (let page = 1; page <= 2; page += 1) {\n    params.set('page', String(page));\n\n    const response = await fetch(`${ENDPOINT}/search?${params}`, { 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\n  return parseResults(results);\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  list,\n  search,\n};\n","/**\n * @import {\n * ExternalAsset,\n * MediaLibraryService,\n * } from '$lib/types/private';\n */\n\n/**\n * @typedef {object} FetchResult\n * @property {string} id Asset ID.\n * @property {number} width Image width.\n * @property {number} height Image height.\n */\n\nconst ENDPOINT = 'https://picsum.photos/v2/list';\nconst LIMIT = 100;\nconst TOTAL_PAGES = 10;\nconst FETCH_PAGES = 3;\n\n/**\n * Parse API results into ExternalAsset format.\n * @param {FetchResult[]} results API results.\n * @returns {ExternalAsset[]} Assets.\n */\nexport const parseResults = (results) =>\n  results.map(({ id, width, height }) => {\n    // Limit the maximum dimension to 1920px to avoid excessively large files, while maintaining the\n    // aspect ratio. 1920x1280 is a common resolution that provides good quality without being too\n    // large for most use cases.\n    const landscape = width >= height;\n    const [w, h] = landscape ? [1920, 1280] : [1280, 1920];\n    const [pw, ph] = landscape ? [480, 320] : [320, 480];\n\n    return {\n      id,\n      // The service doesn’t provide descriptions\n      description: '',\n      previewURL: `https://picsum.photos/id/${id}/${pw}/${ph}.webp`,\n      downloadURL: `https://picsum.photos/id/${id}/${w}/${h}.webp`,\n      fileName: `picsum-${id}.webp`,\n      kind: 'image',\n      // No credit is required as the photos are licensed under CC0\n      // https://github.com/DMarby/picsum-photos/issues/81#issuecomment-1340068800\n    };\n  });\n\n/**\n * Fetch all available pictures across all pages.\n * @returns {Promise<ExternalAsset[]>} Assets.\n * @see https://picsum.photos/#list-images\n */\nexport const list = async () => {\n  // Pick random pages from the 10 available (100 images each).\n  const pages = Array.from({ length: TOTAL_PAGES }, (_, i) => i + 1)\n    .sort(() => Math.random() - 0.5)\n    .slice(0, FETCH_PAGES);\n\n  const responses = await Promise.all(\n    pages.map((page) => fetch(`${ENDPOINT}?page=${page}&limit=${LIMIT}`)),\n  );\n\n  if (responses.some((r) => !r.ok)) {\n    return Promise.reject();\n  }\n\n  /** @type {FetchResult[][]} */\n  const pageResults = await Promise.all(responses.map((r) => r.json()));\n\n  // Randomize the results for variety, as the API returns them in the same order for the same page.\n  return parseResults(pageResults.flat().sort(() => Math.random() - 0.5));\n};\n\n/**\n * @type {MediaLibraryService}\n */\nexport default {\n  serviceType: 'stock_assets',\n  serviceId: 'picsum',\n  serviceLabel: 'Lorem Picsum',\n  serviceURL: 'https://picsum.photos/',\n  showServiceLink: true,\n  hotlinking: true,\n  authType: 'none',\n  list,\n};\n","import { locale as appLocale } from '@sveltia/i18n';\n\n/**\n * @import {\n * ExternalAsset,\n * MediaLibraryFetchOptions,\n * MediaLibraryService,\n * } from '$lib/types/private';\n */\n\n/**\n * @typedef {object} FetchResult\n * @property {number} id Asset ID.\n * @property {string} webformatURL Image URL.\n * @property {string} previewURL Preview URL.\n * @property {string} largeImageURL Large image URL.\n * @property {number} imageWidth Image width.\n * @property {number} imageHeight Image height.\n * @property {string} pageURL Page URL.\n * @property {string} tags Tags.\n * @property {string} user User name.\n */\n\n/**\n * @see https://pixabay.com/api/docs/#api_search_images\n */\nconst SUPPORTED_LOCALES =\n  'cs,da,de,en,es,fr,id,it,hu,nl,no,pl,pt,ro,sk,fi,sv,tr,vi,th,bg,ru,el,ja,ko,zh'.split(',');\n\nconst ENDPOINT = 'https://pixabay.com/api';\n\n/** @type {Record<string, any>} */\nconst SEARCH_PARAMS = {\n  image_type: 'photo',\n  min_width: 1280,\n  safesearch: true,\n  per_page: 150,\n};\n\n/**\n * Parse API results into ExternalAsset format.\n * @param {FetchResult[]} results API results.\n * @returns {ExternalAsset[]} Assets.\n */\nexport const parseResults = (results) =>\n  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 * Get the best matching locale supported by Pixabay API.\n * @returns {string} Locale code.\n */\nexport const getLocale = () => {\n  const [locale] = appLocale.current.toLowerCase().split('-');\n\n  return SUPPORTED_LOCALES.includes(locale) ? locale : 'en';\n};\n\n/**\n * Fetch curated pictures.\n * @param {MediaLibraryFetchOptions} options Options.\n * @returns {Promise<ExternalAsset[]>} Assets.\n * @see https://pixabay.com/api/docs/\n * @todo Support video files.\n */\nexport const list = async ({ apiKey }) => {\n  const params = new URLSearchParams({\n    ...SEARCH_PARAMS,\n    key: apiKey,\n    lang: getLocale(),\n    editors_choice: String(true),\n  });\n\n  const response = await fetch(`${ENDPOINT}/?${params}`);\n\n  if (!response.ok) {\n    return Promise.reject();\n  }\n\n  /** @type {FetchResult[]} */\n  const results = (await response.json()).hits;\n\n  return parseResults(results);\n};\n\n/**\n * Search images or fetch curated pictures if no query is given.\n * @param {string} query Search query.\n * @param {MediaLibraryFetchOptions} options Options.\n * @returns {Promise<ExternalAsset[]>} Assets.\n * @see https://pixabay.com/api/docs/\n * @todo Support video files.\n */\nexport const search = async (query, { apiKey }) => {\n  const params = new URLSearchParams({\n    ...SEARCH_PARAMS,\n    key: apiKey,\n    lang: getLocale(),\n    q: query,\n  });\n\n  const response = await fetch(`${ENDPOINT}/?${params}`);\n\n  if (!response.ok) {\n    return Promise.reject();\n  }\n\n  /** @type {FetchResult[]} */\n  const results = (await response.json()).hits;\n\n  return parseResults(results);\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  list,\n  search,\n};\n","/* eslint-disable no-await-in-loop */\n\nimport { locale as appLocale } from '@sveltia/i18n';\nimport { sleep } from '@sveltia/utils/misc';\n\n/**\n * @import {\n * ExternalAsset,\n * MediaLibraryFetchOptions,\n * MediaLibraryService,\n * } from '$lib/types/private';\n */\n\n/**\n * @typedef {object} FetchResult\n * @property {string} id Asset ID.\n * @property {string} description Description.\n * @property {string} alt_description Alt description.\n * @property {{ regular: string, thumb: string }} urls Image URLs.\n * @property {{ username: string, name: string }} user User info.\n */\n\n/**\n * @see https://unsplash.com/documentation#supported-languages\n */\nconst SUPPORTED_LOCALES = [\n  'af,sq,am,ar,hy,as,az,bn,ba,eu,bs,bg,yue,ca,lzh,zh-Hans,zh-Hant,hr,cs,da,prs,dv,nl,en,et,fo,fj',\n  'fil,fi,fr,fr-ca,gl,ka,de,el,gu,ht,he,hi,mww,hu,is,id,ikt,iu,iu-Latn,ga,it,ja,kn,kk,km,ko,ku,kmr',\n  'ky,lo,lv,lt,mk,mg,ms,ml,mt,mi,mr,mn-Cyrl,mn-Mong,my,ne,nb,or,ps,fa,pl,pt,pt-pt,pa,otq,ro,ru,sm',\n  'sr-Cyrl,sr-Latn,sk,sl,so,es,sw,sv,ty,ta,tt,te,th,bo,ti,to,tr,tk,uk,hsb,ur,ug,uz,vi,cy,yua,zu',\n]\n  .join(',')\n  .split(',');\n\nconst ENDPOINT = 'https://api.unsplash.com';\nconst CREDIT_LINK_PARAMS = 'utm_source=sveltia-cms&utm_medium=referral';\n\n/** @type {Record<string, any>} */\nconst SEARCH_PARAMS = {\n  per_page: 30,\n};\n\n/**\n * Get the best matching locale supported by Unsplash API.\n * @returns {string} Locale code.\n */\nexport const getLocale = () => {\n  const locale = appLocale.current.toLowerCase();\n  const [lang] = locale.split('-');\n\n  return (\n    SUPPORTED_LOCALES.find((code) => code.toLowerCase() === locale) ??\n    SUPPORTED_LOCALES.find((code) => code.split('-')[0] === lang) ??\n    'en'\n  );\n};\n\n/**\n * Parse API results into ExternalAsset format.\n * @param {FetchResult[]} results API results.\n * @returns {ExternalAsset[]} Assets.\n */\nexport const parseResults = (results) =>\n  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 * Fetch curated pictures.\n * @param {MediaLibraryFetchOptions} options Options.\n * @returns {Promise<ExternalAsset[]>} Assets.\n * @see https://unsplash.com/documentation\n * @todo Support video files.\n */\nexport const list = async ({ apiKey }) => {\n  const headers = { Authorization: `Client-ID ${apiKey}` };\n  const params = new URLSearchParams(SEARCH_PARAMS);\n  const response = await fetch(`${ENDPOINT}/photos?${params}`, { headers });\n\n  if (!response.ok) {\n    return Promise.reject();\n  }\n\n  /** @type {FetchResult[]} */\n  const results = await response.json();\n\n  return parseResults(results);\n};\n\n/**\n * Search images or fetch curated pictures if no query is given.\n * @param {string} query Search query.\n * @param {MediaLibraryFetchOptions} options Options.\n * @returns {Promise<ExternalAsset[]>} Assets.\n * @see https://unsplash.com/documentation\n * @todo Support video files.\n */\nexport const search = async (query, { apiKey }) => {\n  const headers = { Authorization: `Client-ID ${apiKey}` };\n  const params = new URLSearchParams({ ...SEARCH_PARAMS, query, lang: getLocale() });\n  /** @type {FetchResult[]} */\n  const results = [];\n\n  for (let page = 1; page <= 5; page += 1) {\n    params.set('page', String(page));\n\n    const response = await fetch(`${ENDPOINT}/search/photos?${params}`, { 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\n  return parseResults(results);\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  list,\n  search,\n};\n","import { getMediaLibraryOptions } from '$lib/services/integrations/media-libraries';\n\nimport pexels from './pexels';\nimport picsum from './picsum';\nimport pixabay from './pixabay';\nimport unsplash from './unsplash';\n\n/**\n * @import { MediaLibraryService } from '$lib/types/private';\n * @import { MediaField, StockMediaLibrary, 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  picsum,\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 {StockMediaLibrary} Options.\n */\nexport const getStockAssetMediaLibraryOptions = ({ fieldConfig } = {}) => {\n  const options = getMediaLibraryOptions({ libraryName: 'stock_assets', fieldConfig });\n\n  // Explicitly disabled\n  if (options === false) {\n    return { providers: [] };\n  }\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 { _ } from '@sveltia/i18n';\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\n  import CloudinaryPanel from '$lib/components/assets/browser/cloudinary-panel.svelte';\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 { selectAssetsView, showContentOverlay } from '$lib/services/contents/editor';\n  import { checkDuplicates } from '$lib/services/contents/fields/file/duplicates.svelte';\n  import {\n    getTargetFolderPath,\n    hasSameAsset,\n    listAssets,\n  } from '$lib/services/contents/fields/file/helper';\n  import {\n    convertFileItemToAsset,\n    getUnsavedAssets,\n  } from '$lib/services/contents/fields/file/process';\n  import { getMediaLibraryOptions } from '$lib/services/integrations/media-libraries';\n  import {\n    allStockAssetProviders,\n    getStockAssetMediaLibraryOptions,\n  } from '$lib/services/integrations/media-libraries/stock';\n  import { normalize } from '$lib/services/search/util';\n  import { env } from '$lib/services/user/env.svelte';\n  import { prefs } from '$lib/services/user/prefs.svelte';\n  import { SUPPORTED_IMAGE_TYPES } from '$lib/services/utils/media/image';\n\n  /**\n   * @import { Writable } from 'svelte/store';\n   * @import {\n   * Asset,\n   * AssetLibraryFolderMap,\n   * AssetLibraryFolderMapKey,\n   * EntryDraft,\n   * MediaLibraryAssetKind,\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 {boolean} [multiple] Whether to allow selecting multiple assets.\n   * @property {MediaLibraryAssetKind} [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 {AssetLibraryFolderMap} assetLibraryFolderMap Default asset library folder map.\n   * @property {[string, MediaLibraryService][]} enabledCloudServiceEntries List of enabled cloud\n   * storage services.\n   * @property {File[]} [pendingFiles] Files to be uploaded to the cloud service panel when the\n   * dialog opens. These are typically files dropped on the file editor when only a cloud service is\n   * available.\n   * @property {(resources: SelectedResource[]) => void} [onSelect] Custom `Select` event handler\n   * that 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    multiple = false,\n    kind,\n    // svelte-ignore state_referenced_locally\n    accept = kind === 'image' ? SUPPORTED_IMAGE_TYPES.join(',') : undefined,\n    canEnterURL = true,\n    entryDraft,\n    fieldConfig,\n    assetLibraryFolderMap,\n    enabledCloudServiceEntries,\n    onSelect = undefined,\n    pendingFiles = $bindable([]),\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const elementIdPrefix = $props.id();\n\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  /** @type {SelectedResource[]} */\n  let selectedResources = $state([]);\n  /** @type {ExternalAssetsPanel | undefined} */\n  let externalAssetsPanel = $state();\n\n  /**\n   * Sort services by their label in alphabetical order.\n   * @param {[string, { serviceLabel: string }]} a First service entry.\n   * @param {[string, { serviceLabel: string }]} b Second service entry.\n   * @returns {number} Sorting order value.\n   */\n  const sortServicesByName = (a, b) => {\n    const nameA = a[1].serviceLabel.toLowerCase();\n    const nameB = b[1].serviceLabel.toLowerCase();\n\n    return nameA.localeCompare(nameB);\n  };\n\n  const title = $derived(\n    kind === 'image' ? _('assets_dialog.title.image') : _('assets_dialog.title.file'),\n  );\n  const searchTerms = $derived(normalize(rawSearchTerms));\n  const isDefaultLibraryEnabled = $derived(\n    getMediaLibraryOptions({ fieldConfig }) !== false &&\n      Object.values(assetLibraryFolderMap).some(({ enabled }) => enabled),\n  );\n  const isDefaultLibrary = $derived(libraryName.startsWith('default-'));\n  const selectedFolder = $derived.by(() => {\n    if (!isDefaultLibrary) {\n      return undefined;\n    }\n\n    const key = /** @type {AssetLibraryFolderMapKey} */ (libraryName.replace('default-', ''));\n    const { folder } = assetLibraryFolderMap[key];\n\n    return folder;\n  });\n  const targetFolderPath = $derived(\n    getTargetFolderPath({ entry: $entryDraft?.originalEntry, folder: selectedFolder }),\n  );\n  const listedAssets = $derived(\n    listAssets({ kind, folder: selectedFolder, folderPath: targetFolderPath, unsavedAssets }),\n  );\n  const enabledStockAssetProviderEntries = $derived.by(() => {\n    const { providers = [] } = getStockAssetMediaLibraryOptions({ fieldConfig });\n\n    return Object.entries(allStockAssetProviders)\n      .filter(\n        ([serviceId, { hotlinking }]) =>\n          providers.includes(/** @type {StockAssetProviderName} */ (serviceId)) &&\n          // When hotlinking is not required, files are downloaded and then uploaded to the\n          // repository, so the default library has to be configured.\n          (hotlinking || isDefaultLibraryEnabled),\n      )\n      .sort(sortServicesByName);\n  });\n  const isEnabledMediaService = $derived(\n    enabledStockAssetProviderEntries.some(\n      ([serviceId, { authType }]) =>\n        serviceId === libraryName && (authType === 'none' || !!prefs.apiKeys?.[libraryName]),\n    ),\n  );\n  const enabledExternalServiceEntries = $derived(\n    [...enabledCloudServiceEntries, ...enabledStockAssetProviderEntries].sort(sortServicesByName),\n  );\n  const isCloudLibrary = $derived(\n    enabledCloudServiceEntries.map(([serviceId]) => serviceId).includes(libraryName),\n  );\n  const isStockLibrary = $derived(\n    enabledStockAssetProviderEntries\n      .map(([serviceId]) => serviceId)\n      .includes(/** @type {any} */ (libraryName)),\n  );\n  const Selector = $derived(env.isSmallScreen ? Select : Listbox);\n\n  /**\n   * Process a dropped file.\n   * @param {File} file File to be processed.\n   * @returns {Promise<Asset | undefined>} Processed asset or `undefined` if the file already\n   * exists.\n   */\n  const processFile = async (file) => {\n    const hash = await getHash(file);\n    const folder = selectedFolder;\n\n    if (await hasSameAsset({ hash, folder, unsavedAssets })) {\n      return undefined;\n    }\n\n    const asset = await convertFileItemToAsset({ file, folder, targetFolderPath });\n\n    droppedAssets.push(asset);\n\n    return asset;\n  };\n\n  /**\n   * Handle dropped files.\n   * @param {File[]} files File list.\n   */\n  const onDrop = async (files) => {\n    const replace = await checkDuplicates({ files, listedAssets });\n\n    if (replace === undefined) {\n      // User cancelled the dialog\n      return;\n    }\n\n    selectedResources = (await Promise.all(files.map((file) => processFile(file))))\n      .filter((asset) => !!asset)\n      .map((asset) => ({ asset, replace }));\n  };\n\n  /**\n   * Reset all the values.\n   */\n  const resetValues = () => {\n    enteredURL = '';\n    rawSearchTerms = '';\n    droppedAssets = [];\n    unsavedAssets = [];\n    selectedResources = [];\n  };\n\n  /**\n   * Handle the OK button click.\n   */\n  const onOk = () => {\n    if (!selectedResources.length) {\n      return;\n    }\n\n    const resources = $state.snapshot(selectedResources).map((resource) => {\n      const { asset: { unsaved, file, folder } = {}, replace } = resource;\n\n      return unsaved ? { file, folder, replace } : resource;\n    });\n\n    onSelect?.(resources);\n  };\n\n  $effect.pre(() => {\n    const firstDefaultLibraryId = isDefaultLibraryEnabled\n      ? Object.entries(assetLibraryFolderMap).find(([, { enabled }]) => enabled)?.[0]\n      : undefined;\n\n    if (firstDefaultLibraryId) {\n      // Select the first enabled folder\n      libraryName = `default-${firstDefaultLibraryId}`;\n    } else {\n      // Select the first available external service\n      libraryName = enabledExternalServiceEntries[0]?.[0];\n    }\n  });\n\n  $effect(() => {\n    void $entryDraft?.files;\n    // Somehow we need to snapshot `droppedAssets` here to make Svelte aware of its changes\n    void $state.snapshot(droppedAssets);\n\n    (async () => {\n      unsavedAssets = [\n        ...($entryDraft?.files\n          ? await getUnsavedAssets({ draft: $entryDraft, targetFolderPath })\n          : []),\n        ...Object.values(droppedAssets),\n      ];\n    })();\n  });\n\n  $effect(() => {\n    if (!$showContentOverlay) {\n      open = false;\n    }\n  });\n\n  // Upload pending files (e.g. dropped on the file editor) to the cloud service panel once mounted\n  $effect(() => {\n    if (externalAssetsPanel && pendingFiles.length) {\n      externalAssetsPanel.uploadFiles(pendingFiles);\n      pendingFiles = [];\n    }\n  });\n</script>\n\n{#snippet headerItems()}\n  {#if isDefaultLibrary || (isCloudLibrary && libraryName !== 'cloudinary') || (isStockLibrary && libraryName !== 'picsum')}\n    {#if $selectAssetsView}\n      <ViewSwitcher\n        currentView={(() => /** @type {Writable<SelectAssetsView>} */ (selectAssetsView))()}\n        aria-controls=\"select-assets-grid\"\n      />\n    {/if}\n    <SearchBar\n      dir=\"auto\"\n      flex={env.isSmallScreen}\n      bind:value={rawSearchTerms}\n      debounce={!isDefaultLibrary}\n      disabled={selectedResources.some((r) => r.file)}\n      aria-label={_(`assets_dialog.search_for_${kind ?? 'file'}`)}\n    />\n  {/if}\n  {#if isDefaultLibrary || (isCloudLibrary && libraryName !== 'cloudinary')}\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={!selectedResources.length}\n  keepContent={true}\n  focusInput={false}\n  bind:open\n  {onOk}\n  onClose={() => {\n    resetValues();\n  }}\n>\n  {#snippet headerExtra()}\n    {#if !env.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} class=\"service-link\">\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          selectedResources = [];\n        }}\n      >\n        {#if isDefaultLibraryEnabled}\n          <OptionGroup label={_('asset_location.repository')}>\n            {#each Object.entries(assetLibraryFolderMap) as [id, { folder, enabled }] (id)}\n              {#if enabled}\n                {@const name = `default-${id}`}\n                <Option\n                  {name}\n                  label={folder?.label ?? _(`assets_dialog.folder.${id}`)}\n                  selected={libraryName === name}\n                />\n              {/if}\n            {/each}\n          </OptionGroup>\n        {/if}\n        {#if canEnterURL || !!Object.keys(enabledCloudServiceEntries).length}\n          <OptionGroup label={_('asset_location.external')}>\n            {#each enabledCloudServiceEntries as [, { serviceId, serviceLabel }] (serviceId)}\n              <Option name={serviceId} label={serviceLabel} selected={libraryName === serviceId} />\n            {/each}\n            {#if canEnterURL}\n              <Option\n                name=\"enter-url\"\n                label={_('assets_dialog.enter_url')}\n                selected={libraryName === 'enter-url'}\n              />\n            {/if}\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} selected={libraryName === serviceId} />\n            {/each}\n          </OptionGroup>\n        {/if}\n      </Selector>\n      {#if env.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          {multiple}\n          assets={listedAssets}\n          bind:selectedResources\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            dir=\"ltr\"\n            bind:value={enteredURL}\n            flex\n            oninput={() => {\n              const url = enteredURL.trim();\n\n              selectedResources = url ? [{ url }] : [];\n            }}\n          />\n        </EmptyState>\n      {/if}\n      {#each enabledExternalServiceEntries as [serviceId, serviceProps] (serviceId)}\n        {#if serviceId === 'cloudinary'}\n          <!-- Always include the Cloudinary panel in the DOM, otherwise the iframe will be\n            destroyed when the component is unmounted and the user has to sign in again due to the\n            third-party cookie limitation. The `keepContent` prop on the `<Dialog>` is also needed\n            for that reason -->\n          <CloudinaryPanel\n            {kind}\n            {fieldConfig}\n            {multiple}\n            hidden={libraryName !== 'cloudinary'}\n            onSelect={(resources) => {\n              // Check if the dialog is open to prevent selected resources from being inserted to\n              // other fields. This is required because `CloudinaryPanel` uses messaging to\n              // communicate with the embedded iframe, which is shared by all fields using the\n              // Cloudinary media storage.\n              if (!open) {\n                return;\n              }\n\n              // Close the dialog after selection\n              selectedResources = resources;\n              onOk();\n              open = false;\n            }}\n          />\n        {:else if libraryName === serviceId}\n          <ExternalAssetsPanel\n            {kind}\n            {fieldConfig}\n            {multiple}\n            {searchTerms}\n            {serviceProps}\n            gridId=\"select-assets-grid\"\n            bind:selectedResources\n            bind:this={externalAssetsPanel}\n          />\n        {/if}\n      {/each}\n    </div>\n  </div>\n</Dialog>\n\n<FilePicker\n  bind:this={filePicker}\n  {accept}\n  {multiple}\n  onSelect={({ files }) => {\n    if (isCloudLibrary) {\n      externalAssetsPanel?.uploadFiles(files);\n    } else {\n      onDrop(files);\n    }\n  }}\n/>\n\n<style>\n  .wrapper {\n    display: flex;\n    gap: 16px;\n    height: 60dvh;\n    max-height: 800px;\n    --tile-padding: 4px;\n\n    @media (width < 768px) {\n      flex-direction: column;\n      overflow: hidden;\n      height: 72dvh;\n    }\n\n    .nav {\n      flex: none;\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  .service-link {\n    font-size: var(--sui-font-size-small);\n  }\n\n  .filter-tools {\n    display: flex;\n    gap: 8px;\n  }\n</style>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Button, ConfirmationDialog, Spacer } from '@sveltia/ui';\n\n  import { duplicates } from '$lib/services/contents/fields/file/duplicates.svelte';\n</script>\n\n<ConfirmationDialog\n  bind:open={duplicates.showDialog}\n  title={_('file_name_conflict_resolution')}\n  onCancel={() => duplicates.resolve(undefined)}\n>\n  {_('file_name_conflict_confirmation_with_name', {\n    values: { count: duplicates.count, name: duplicates.name },\n  })}\n  {#snippet footer()}\n    <Spacer flex />\n    <Button variant=\"primary\" onclick={() => duplicates.resolve(true)}>{_('replace')}</Button>\n    <Button variant=\"primary\" onclick={() => duplicates.resolve(false)}>{_('keep_both')}</Button>\n    <Button variant=\"secondary\" onclick={() => duplicates.resolve(undefined)}>{_('cancel')}</Button>\n  {/snippet}\n</ConfirmationDialog>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Button, Icon } from '@sveltia/ui';\n  import { isURL } from '@sveltia/utils/string';\n  import { untrack } from 'svelte';\n\n  import AssetPreview from '$lib/components/assets/shared/asset-preview.svelte';\n  import { getAssetByPath } from '$lib/services/assets';\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  import { createPath } from '$lib/services/utils/file';\n\n  /**\n   * @import { Asset, AssetKind, Entry } from '$lib/types/private';\n   * @import { MediaField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} value The file value (URL, blob URL, or file path).\n   * @property {string} fieldId The field ID for accessibility.\n   * @property {MediaField} fieldConfig Field configuration.\n   * @property {boolean} readonly Whether the field is readonly.\n   * @property {boolean} invalid Whether the field is invalid.\n   * @property {boolean} required Whether the field is required.\n   * @property {string} collectionName The collection name.\n   * @property {string | undefined} fileName The file name.\n   * @property {string} [typedKeyPath] Field key path for field-level media folders.\n   * @property {Entry | undefined} entry The entry object.\n   * @property {() => void} [onReplace] Event handler for replace action.\n   * @property {() => void} [onRemove] Event handler for remove action.\n   * @property {() => void} [onMoveUp] Event handler for move up action.\n   * @property {() => void} [onMoveDown] Event handler for move down action.\n   */\n\n  /** @type {Props} */\n  const {\n    value,\n    fieldId,\n    fieldConfig,\n    readonly = false,\n    invalid = false,\n    required = false,\n    collectionName = '',\n    fileName = undefined,\n    typedKeyPath = undefined,\n    entry = undefined,\n    onReplace,\n    onRemove,\n    onMoveUp,\n    onMoveDown,\n  } = $props();\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\n  const { widget: fieldType } = $derived(fieldConfig);\n  const isImageField = $derived(fieldType === 'image');\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 (!value) {\n      return '';\n    }\n\n    if (file) {\n      const { publicPath, entryRelative, hasTemplateTags } =\n        $entryDraft?.files[value]?.folder ?? {};\n\n      const _folder = entryRelative || hasTemplateTags ? '' : publicPath || '';\n\n      return createPath([_folder, decodeURI(file.name.normalize())]);\n    }\n\n    if (!value.startsWith('blob:')) {\n      const decodedValue = decodeURI(value);\n\n      // Truncate query string for display. This is mainly for Unsplash URLs which have a long query\n      // string for image parameters.\n      if (isURL(decodedValue)) {\n        // eslint-disable-next-line svelte/prefer-svelte-reactivity\n        const url = new URL(decodedValue);\n\n        if (url.search) {\n          url.search = '';\n          return `${url}…`;\n        }\n      }\n\n      return decodedValue;\n    }\n\n    return '';\n  });\n\n  /**\n   * Update properties when value changes.\n   */\n  const updateProps = async () => {\n    // Restore `file` after a draft backup is restored\n    if (value?.startsWith('blob:') && $entryDraft) {\n      file = $entryDraft.files[value]?.file;\n    }\n\n    // Update the `src` when an asset is selected\n    if (value) {\n      const getURLArgs = { value, entry, collectionName, fileName, fieldConfig, typedKeyPath };\n\n      if (isImageField && /^https?:/.test(value)) {\n        asset = undefined;\n        kind = 'image';\n        src = value;\n      } else if (!value.startsWith('blob:')) {\n        asset = getAssetByPath({ ...getURLArgs });\n        kind = undefined;\n        src = undefined;\n      }\n\n      if (!asset && !src) {\n        kind = await getMediaKind(value);\n        src = kind ? await getMediaFieldURL({ ...getURLArgs, thumbnail: true }) : undefined;\n      }\n    } else {\n      // Remove properties after the value is removed\n      asset = undefined;\n      file = undefined;\n      kind = undefined;\n      src = undefined;\n    }\n  };\n\n  $effect(() => {\n    void [value];\n\n    untrack(() => {\n      updateProps();\n    });\n  });\n</script>\n\n<div role=\"none\" class=\"filled\">\n  {#if (onMoveUp || onMoveDown) && !readonly}\n    <!-- @todo Support drag & drop sorting -->\n    <div role=\"toolbar\" class=\"reorder-controls\">\n      <Button\n        size=\"small\"\n        iconic\n        disabled={!onMoveUp}\n        aria-label={_('move_up')}\n        onclick={() => {\n          onMoveUp?.();\n        }}\n      >\n        {#snippet startIcon()}\n          <Icon name=\"arrow_upward\" />\n        {/snippet}\n      </Button>\n      <Button\n        size=\"small\"\n        iconic\n        disabled={!onMoveDown}\n        aria-label={_('move_down')}\n        onclick={() => {\n          onMoveDown?.();\n        }}\n      >\n        {#snippet startIcon()}\n          <Icon name=\"arrow_downward\" />\n        {/snippet}\n      </Button>\n    </div>\n  {/if}\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 value === '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      {#if onReplace}\n        <Button\n          disabled={readonly}\n          variant=\"tertiary\"\n          size=\"small\"\n          label={_('replace')}\n          aria-label={_(`replace_${fieldType}`)}\n          aria-controls=\"{fieldId}-value\"\n          onclick={() => {\n            onReplace();\n          }}\n        />\n      {/if}\n      {#if onRemove}\n        <Button\n          disabled={readonly}\n          variant=\"tertiary\"\n          size=\"small\"\n          label={_('remove')}\n          aria-label={_(`remove_${fieldType}`)}\n          aria-controls=\"{fieldId}-value\"\n          onclick={() => {\n            onRemove();\n          }}\n        />\n      {/if}\n    </div>\n  </div>\n</div>\n\n<style>\n  .filled {\n    display: flex !important;\n    align-items: center;\n    gap: 12px;\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      .sui.button.tertiary.small {\n        margin: var(--sui-focus-ring-width);\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  .reorder-controls {\n    flex: none !important;\n    display: flex;\n    flex-direction: column;\n    justify-content: space-evenly;\n    align-items: center;\n    gap: 4px;\n    border: 1px solid var(--sui-control-border-color);\n    border-radius: var(--sui-control-medium-border-radius);\n    height: -moz-available;\n    height: -webkit-fill-available;\n    height: stretch;\n    background-color: var(--sui-secondary-border-color);\n\n    :global(button) {\n      padding: 0;\n      height: 16px;\n    }\n  }\n</style>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Alert, Button, Icon, Toast } from '@sveltia/ui';\n  import { matchesShortcuts } from '@sveltia/utils/events';\n\n  import { env } from '$lib/services/user/env.svelte';\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} allowDrop Whether to allow dropping files.\n   * @property {boolean} invalid Whether the field is invalid.\n   * @property {boolean} readonly Whether the field is readonly.\n   * @property {boolean} processing Whether the field is processing.\n   * @property {boolean} isImageField Whether the field is an image field.\n   * @property {boolean} multiple Whether the field allows multiple files.\n   * @property {boolean} showSelectAssetsDialog Whether to show the select assets dialog.\n   * @property {boolean} replaceMode Whether the dialog is in replace mode.\n   * @property {(file: File) => void} [onFilePaste] Callback invoked when an image is pasted from\n   * the clipboard instead of opening the asset selection dialog.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    allowDrop,\n    invalid,\n    readonly,\n    processing,\n    isImageField,\n    multiple,\n    showSelectAssetsDialog = $bindable(false),\n    replaceMode = $bindable(false),\n    onFilePaste = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const toast = $state({ show: false, message: '' });\n  const disabled = $derived(readonly || processing);\n\n  /**\n   * Handle click on the paste button. If `onFilePaste` is provided, it will attempt to read an\n   * image from the clipboard and invoke the callback with the pasted file.\n   */\n  const onPasteButtonClick = async () => {\n    if (disabled || !onFilePaste) {\n      return;\n    }\n\n    try {\n      const clipboardItems = await navigator.clipboard.read();\n      /** @type {string | undefined} */\n      let imageType;\n\n      const imageItem = clipboardItems.find((item) =>\n        item.types.some((type) => {\n          const isImage = type.startsWith('image/');\n\n          if (isImage) {\n            imageType = type;\n          }\n\n          return isImage;\n        }),\n      );\n\n      if (imageItem && imageType) {\n        const blob = await imageItem.getType(imageType);\n        const ext = imageType.split('/')[1].replace('+xml', '');\n        const file = new File([blob], `pasted-image-${Date.now()}.${ext}`, { type: imageType });\n\n        onFilePaste(file);\n\n        return;\n      }\n\n      Object.assign(toast, {\n        message: _('no_image_in_clipboard'),\n        show: true,\n      });\n    } catch {\n      Object.assign(toast, {\n        message: _('clipboard_access_denied'),\n        show: true,\n      });\n    }\n  };\n</script>\n\n{#snippet buttons()}\n  <div role=\"none\" class=\"buttons\">\n    <Button\n      label={_('browse')}\n      variant=\"tertiary\"\n      size=\"small\"\n      {disabled}\n      onclick={(event) => {\n        event.stopPropagation();\n        replaceMode = false;\n        showSelectAssetsDialog = true;\n      }}\n    />\n    {#if onFilePaste}\n      <Button\n        label={_(isImageField ? 'paste' : 'paste_image')}\n        variant=\"tertiary\"\n        size=\"small\"\n        {disabled}\n        onclick={(event) => {\n          event.stopPropagation();\n          onPasteButtonClick();\n        }}\n      />\n    {/if}\n  </div>\n{/snippet}\n\n<div\n  role=\"button\"\n  class=\"empty\"\n  class:invalid\n  class:processing\n  aria-disabled={disabled || undefined}\n  tabindex={disabled ? -1 : 0}\n  onclick={() => {\n    if (env.hasMouse && !disabled) {\n      replaceMode = false;\n      showSelectAssetsDialog = true;\n    }\n  }}\n  onkeydown={(event) => {\n    if (!disabled && matchesShortcuts(event, 'Accel+V')) {\n      event.preventDefault();\n      onPasteButtonClick();\n    }\n  }}\n>\n  <Icon name=\"cloud_upload\" />\n  <div role=\"none\" class=\"label\">\n    {#if processing}\n      <div role=\"status\">\n        {_('processing_files', { values: { count: multiple ? 2 : 1 } })}\n      </div>\n    {:else if env.hasMouse}\n      {#if !allowDrop}\n        {_('click_to_browse')}\n      {:else if isImageField}\n        {_('drop_image_files_or', { values: { count: multiple ? 2 : 1 } })}\n      {:else}\n        {_('drop_files_or', { values: { count: multiple ? 2 : 1 } })}\n      {/if}\n      {@render buttons()}\n    {:else}\n      {@render buttons()}\n    {/if}\n  </div>\n</div>\n\n<Toast bind:show={toast.show}>\n  <Alert status=\"error\">\n    {toast.message}\n  </Alert>\n</Toast>\n\n<style>\n  .empty {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    gap: 4px;\n    height: 120px;\n    margin: var(--sui-focus-ring-width);\n    border-width: 1px;\n    border-style: solid;\n    border-color: var(--sui-button-tertiary-border-color, var(--sui-button-border-color));\n    border-radius: var(--sui-button-medium-border-radius);\n    color: var(--sui-button-tertiary-foreground-color, var(--sui-highlight-foreground-color));\n    background-color: var(\n      --sui-button-tertiary-background-color,\n      var(--sui-button-background-color)\n    );\n    font-family: var(--sui-control-font-family);\n    font-size: var(--sui-font-size-small);\n    cursor: pointer;\n    transition: all 200ms;\n\n    &:focus-visible {\n      z-index: 1;\n      outline: var(--sui-focus-ring-width) solid var(--sui-focus-ring-color);\n      outline-offset: var(--sui-focus-ring-offset);\n    }\n\n    &:not([aria-disabled='true']):is(:hover, :focus-visible) {\n      background-color: var(\n        --sui-button-tertiary-background-color-focus,\n        var(--sui-hover-background-color)\n      );\n    }\n\n    &:not([aria-disabled='true']):active {\n      background-color: var(\n        --sui-button-tertiary-background-color-active,\n        var(--sui-active-background-color)\n      );\n    }\n\n    :global(.icon) {\n      color: var(--sui-secondary-foreground-color);\n      font-size: 48px;\n    }\n\n    &[aria-disabled='true'] {\n      pointer-events: none !important;\n\n      :global(*) {\n        opacity: 0.5;\n      }\n    }\n\n    @media (pointer: coarse) {\n      cursor: default;\n\n      &:active,\n      &:focus {\n        /* Reset the style because the element is non-interactive on touch devices */\n        background-color: var(--sui-button-background-color) !important;\n      }\n    }\n\n    &.invalid {\n      border-color: var(--sui-error-border-color);\n    }\n  }\n\n  .label {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    flex-wrap: wrap;\n    gap: 0 4px;\n    white-space: nowrap;\n\n    :global {\n      .button {\n        margin-block: 0;\n      }\n    }\n  }\n</style>\n","<!--\n  @component\n  Implement the editor for the File and Image field types.\n  @see https://decapcms.org/docs/widgets/#File\n  @see https://decapcms.org/docs/widgets/#Image\n  @see https://sveltiacms.app/en/docs/fields/file\n  @see https://sveltiacms.app/en/docs/fields/image\n-->\n<script>\n  import { _ } from '@sveltia/i18n';\n  import { ConfirmationDialog, TextArea } from '@sveltia/ui';\n  import { flushSync, getContext } from 'svelte';\n\n  import SelectAssetsDialog from '$lib/components/assets/browser/select-assets-dialog.svelte';\n  import ConflictResolutionDialog from '$lib/components/assets/shared/conflict-resolution-dialog.svelte';\n  import DropZone from '$lib/components/assets/shared/drop-zone.svelte';\n  import OversizeAlertDialog from '$lib/components/assets/shared/oversize-alert-dialog.svelte';\n  import FileEditorItem from '$lib/components/contents/details/fields/file/file-editor-item.svelte';\n  import UploadButton from '$lib/components/contents/details/fields/file/upload-button.svelte';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { checkDuplicates } from '$lib/services/contents/fields/file/duplicates.svelte';\n  import {\n    getAssetLibraryFolderMap,\n    getTargetFolderPath,\n    listAssets,\n  } from '$lib/services/contents/fields/file/helper';\n  import { getUnsavedAssets, processResource } from '$lib/services/contents/fields/file/process';\n  import { allCloudStorageServices } from '$lib/services/integrations/media-libraries/cloud';\n  import { getDefaultMediaLibraryOptions } from '$lib/services/integrations/media-libraries/default';\n  import { isMultiple } from '$lib/services/integrations/media-libraries/shared';\n  import { SUPPORTED_IMAGE_TYPES } from '$lib/services/utils/media/image';\n\n  /**\n   * @import {\n   * Asset,\n   * AssetFolderInfo,\n   * FieldEditorContext,\n   * FieldEditorProps,\n   * SelectedResource,\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 | string[] | undefined} currentValue Field value.\n   */\n\n  /** @type {FieldEditorContext} */\n  const { fieldContext = undefined } = getContext('field-editor') ?? {};\n  const inEditorComponent = fieldContext === 'rich-text-editor-component';\n\n  /** @type {FieldEditorProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    keyPath,\n    typedKeyPath,\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 showSelectAssetsDialog = $state(false);\n  let replaceMode = $state(false);\n  let replaceIndex = $state(-1);\n  let showOversizeAlert = $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  /** @type {string[]} */\n  let oversizedFileNames = $state([]);\n  /** @type {File[]} */\n  let pendingFiles = $state([]);\n  /** @type {Asset[]} */\n  let unsavedAssets = $state([]);\n\n  const {\n    widget: fieldType,\n    // Field type-specific options\n    max = Infinity,\n    accept,\n    choose_url: canEnterURL = true,\n  } = $derived(fieldConfig);\n  const entry = $derived($entryDraft?.originalEntry);\n  const collectionName = $derived($entryDraft?.collectionName ?? '');\n  const fileName = $derived($entryDraft?.fileName);\n  const isIndexFile = $derived($entryDraft?.isIndexFile ?? false);\n  const isImageField = $derived(fieldType === 'image');\n  const kind = $derived(isImageField ? 'image' : undefined);\n  const defaultLibraryOptions = $derived(getDefaultMediaLibraryOptions({ fieldConfig }));\n  const libraryConfig = $derived(defaultLibraryOptions.config);\n  const assetLibraryFolderMap = $derived(\n    getAssetLibraryFolderMap({ collectionName, fileName, typedKeyPath, isIndexFile }),\n  );\n  const targetFolder = $derived(\n    /** @type {AssetFolderInfo} */ (\n      Object.values(assetLibraryFolderMap).find(({ enabled }) => enabled)?.folder\n    ),\n  );\n  const targetFolderPath = $derived(\n    getTargetFolderPath({ entry: $entryDraft?.originalEntry, folder: targetFolder }),\n  );\n  const listedAssets = $derived(\n    listAssets({ kind, folder: targetFolder, folderPath: targetFolderPath, unsavedAssets }),\n  );\n  // Ignore the `multiple` option when the field is used in a rich text editor component\n  const multiple = $derived(isMultiple(fieldConfig) && !inEditorComponent);\n  const maxSize = $derived(/** @type {number} */ (libraryConfig.max_file_size));\n  const showRemoveButton = $derived(\n    !required &&\n      (!fieldContext ||\n        !['rich-text-editor-component', 'single-subfield-list-field'].includes(fieldContext)),\n  );\n  const itemArgs = $derived({\n    fieldConfig,\n    readonly,\n    invalid,\n    required,\n    showRemoveButton,\n    collectionName,\n    fileName,\n    typedKeyPath,\n    entry,\n  });\n  const enabledCloudServiceEntries = $derived(\n    Object.entries(allCloudStorageServices).filter(\n      ([, { isEnabled }]) => isEnabled?.(fieldConfig) ?? true,\n    ),\n  );\n  /**\n   * Whether the default (internal) media library is available as a storage provider.\n   */\n  const isDefaultLibraryAvailable = $derived(defaultLibraryOptions.enabled && !!targetFolder);\n  /**\n   * The total number of available media storage providers (default and/or cloud).\n   */\n  const totalProviders = $derived(\n    (isDefaultLibraryAvailable ? 1 : 0) + enabledCloudServiceEntries.length,\n  );\n  /**\n   * Disable the drop zone if there are no providers or multiple providers are available, to avoid\n   * confusion about where dropped files will be stored.\n   */\n  const allowDrop = $derived(totalProviders === 1);\n\n  /**\n   * Reset the current selection.\n   */\n  const resetSelection = () => {\n    dropZone?.reset();\n\n    if (!multiple) {\n      currentValue = '';\n      flushSync();\n    }\n  };\n\n  /**\n   * Handle selected resources.\n   * @param {SelectedResource[]} selectedResources Selected resources.\n   */\n  const onResourcesSelect = async (selectedResources) => {\n    if (!$entryDraft) {\n      return;\n    }\n\n    // Save the current value so we can restore it if all resources fail validation\n    const previousValue = multiple ? undefined : currentValue;\n\n    resetSelection();\n    processing = true;\n    oversizedFileNames = [];\n\n    const resources = await Promise.all(\n      selectedResources.map((resource) =>\n        processResource({ draft: $entryDraft, resource, libraryConfig }),\n      ),\n    );\n\n    /** @type {string[]} */\n    const credits = [];\n    let hasValidResource = false;\n\n    const lastIndex = multiple\n      ? (Object.keys($entryDraft.currentValues[locale])\n          .filter((key) => key.startsWith(`${keyPath}.`))\n          .map((key) => Number(key.replace(`${keyPath}.`, '')))\n          .pop() ?? -1)\n      : -1;\n\n    resources.forEach(({ value, credit, oversizedFileName }, index) => {\n      if (value) {\n        hasValidResource = true;\n\n        if (multiple) {\n          const targetIndex = replaceMode ? replaceIndex : lastIndex + 1 + index;\n\n          $entryDraft.currentValues[locale][`${keyPath}.${targetIndex}`] = value;\n        } else {\n          // Encode spaces as `%20` when the field is used in the rich text editor component to\n          // avoid issues with Markdown parsers that do not support unencoded spaces in URLs.\n          currentValue = inEditorComponent ? value.replaceAll(' ', '%20') : value;\n        }\n      }\n\n      if (credit) {\n        credits.push(credit);\n      }\n\n      if (oversizedFileName) {\n        oversizedFileNames.push(oversizedFileName);\n      }\n    });\n\n    // Restore the previous value if no valid resources were processed, so that a failed\n    // upload/replace doesn’t leave an empty or invalid reference in the YAML\n    if (!hasValidResource && !multiple && previousValue !== undefined) {\n      currentValue = previousValue;\n    }\n\n    if (credits.length) {\n      photoCredit = credits.join('\\n');\n      showPhotoCreditDialog = true;\n    } else {\n      photoCredit = '';\n    }\n\n    if (oversizedFileNames.length) {\n      showOversizeAlert = true;\n    }\n\n    processing = false;\n  };\n\n  /**\n   * Handle drop event.\n   * @param {object} detail Drop event detail.\n   * @param {File[]} detail.files Dropped files.\n   */\n  const onDrop = async ({ files }) => {\n    if (!files.length) {\n      return;\n    }\n\n    if (isDefaultLibraryAvailable) {\n      const replace = await checkDuplicates({ files, listedAssets });\n\n      if (replace === undefined) {\n        // User cancelled the dialog\n        return;\n      }\n\n      onResourcesSelect(files.map((file) => ({ file, folder: targetFolder, replace })));\n    } else {\n      // Open the dialog and pass files to the cloud service panel for upload\n      pendingFiles = files;\n      showSelectAssetsDialog = true;\n    }\n  };\n\n  /**\n   * Remove an item from the list.\n   * @param {number} index Index of the item to remove.\n   */\n  const removeItem = (index) => {\n    if (!$entryDraft) {\n      return;\n    }\n\n    const valueMap = $state.snapshot($entryDraft.currentValues[locale]);\n    /** @type {string[]} */\n    const updatedValue = [];\n\n    for (let i = 0; ; i += 1) {\n      const currentKey = `${keyPath}.${i}`;\n      const nextKey = `${keyPath}.${i + 1}`;\n\n      if (i < index) {\n        updatedValue.push(valueMap[currentKey]);\n      } else if (nextKey in valueMap) {\n        updatedValue.push(valueMap[nextKey]);\n        $entryDraft.currentValues[locale][currentKey] = valueMap[nextKey];\n      } else {\n        $entryDraft.currentValues[locale][currentKey] = null;\n        delete $entryDraft.currentValues[locale][currentKey];\n        break;\n      }\n    }\n\n    currentValue = Object.values(updatedValue);\n  };\n\n  /**\n   * Move an item down in the list.\n   * @param {number} index Index of the item to move down.\n   */\n  const moveDown = (index) => {\n    if (!$entryDraft) {\n      return;\n    }\n\n    [\n      $entryDraft.currentValues[locale][`${keyPath}.${index}`],\n      $entryDraft.currentValues[locale][`${keyPath}.${index + 1}`],\n    ] = [\n      $entryDraft.currentValues[locale][`${keyPath}.${index + 1}`],\n      $entryDraft.currentValues[locale][`${keyPath}.${index}`],\n    ];\n  };\n\n  $effect(() => {\n    (async () => {\n      if ($entryDraft?.files) {\n        unsavedAssets = await getUnsavedAssets({ draft: $entryDraft, targetFolderPath });\n      } else {\n        unsavedAssets = [];\n      }\n    })();\n  });\n</script>\n\n{#snippet uploadButton()}\n  <UploadButton\n    {allowDrop}\n    {invalid}\n    {readonly}\n    {processing}\n    {isImageField}\n    {multiple}\n    bind:showSelectAssetsDialog\n    bind:replaceMode\n    onFilePaste={(file) => {\n      onResourcesSelect([{ file, folder: targetFolder }]);\n    }}\n  />\n{/snippet}\n\n{#snippet content()}\n  {#if !!currentValue?.length && !processing}\n    {#if multiple}\n      {#if Array.isArray(currentValue)}\n        <div role=\"none\" class=\"item-list\">\n          {#each currentValue as value, index (`${value}|${index}`)}\n            <FileEditorItem\n              {...itemArgs}\n              {value}\n              fieldId=\"{fieldId}-{index}\"\n              onReplace={() => {\n                replaceMode = true;\n                replaceIndex = index;\n                showSelectAssetsDialog = true;\n              }}\n              onRemove={() => removeItem(index)}\n              onMoveUp={index > 0 ? () => moveDown(index - 1) : undefined}\n              onMoveDown={index < currentValue.length - 1 ? () => moveDown(index) : undefined}\n            />\n          {/each}\n        </div>\n        {#if currentValue.length < max}\n          {@render uploadButton()}\n        {/if}\n      {/if}\n    {:else if typeof currentValue === 'string' && currentValue}\n      <FileEditorItem\n        {...itemArgs}\n        value={currentValue}\n        {fieldId}\n        onReplace={() => {\n          replaceMode = true;\n          showSelectAssetsDialog = true;\n        }}\n        onRemove={resetSelection}\n      />\n    {/if}\n  {:else}\n    {@render uploadButton()}\n  {/if}\n{/snippet}\n\n{#if allowDrop}\n  <DropZone\n    bind:this={dropZone}\n    {multiple}\n    disabled={readonly}\n    accept={accept ?? (isImageField ? SUPPORTED_IMAGE_TYPES.join(',') : undefined)}\n    {onDrop}\n  >\n    {@render content()}\n  </DropZone>\n{:else}\n  {@render content()}\n{/if}\n\n<SelectAssetsDialog\n  {kind}\n  multiple={replaceMode ? false : multiple}\n  {accept}\n  {canEnterURL}\n  {entryDraft}\n  {fieldConfig}\n  {assetLibraryFolderMap}\n  {enabledCloudServiceEntries}\n  bind:open={showSelectAssetsDialog}\n  bind:pendingFiles\n  onSelect={onResourcesSelect}\n/>\n\n<ConflictResolutionDialog />\n\n<OversizeAlertDialog bind:open={showOversizeAlert} {oversizedFileNames} {maxSize} />\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      dir=\"auto\"\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>\n  .item-list {\n    display: flex;\n    flex-direction: column;\n    gap: 4px;\n  }\n</style>\n","<script>\n  import { untrack } from 'svelte';\n\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 } from '$lib/types/private';\n   * @import { MediaField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} value Field value, either a URL or a file path.\n   * @property {MediaField} fieldConfig Field configuration.\n   * @property {string} [typedKeyPath] Field key path for field-level media folders.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    value,\n    fieldConfig,\n    typedKeyPath = undefined,\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 { widget: fieldType } = $derived(fieldConfig);\n  const isImageField = $derived(fieldType === 'image');\n  const entry = $derived($entryDraft?.originalEntry);\n  const collectionName = $derived($entryDraft?.collectionName ?? '');\n  const fileName = $derived($entryDraft?.fileName);\n\n  $effect(() => {\n    void [value];\n\n    untrack(async () => {\n      // Determine the kind and source URL of the media. Skip if it’s an image field because we\n      // already know it’s an image. It’s rather problematic if the path doesn’t have an extension.\n      kind = value ? (isImageField ? 'image' : await getMediaKind(value)) : undefined;\n      src = kind\n        ? await getMediaFieldURL({\n            value,\n            entry,\n            collectionName,\n            fileName,\n            fieldConfig,\n            typedKeyPath,\n          })\n        : undefined;\n    });\n  });\n</script>\n\n{#if kind && src}\n  <p>\n    <AssetPreview {kind} {src} controls={['audio', 'video'].includes(kind)} />\n  </p>\n{:else if value.trim() && !value.startsWith('blob:')}\n  <p>{value}</p>\n{/if}\n\n<style>\n  /* Remove the padding to make the image full-width on small screens */\n  @media (width < 768px) {\n    :global([role='document'] section) > p:has(:global(img)) {\n      margin-inline: calc(var(--entry-preview-padding-inline) * -1);\n    }\n  }\n</style>\n","<!--\n  @component\n  Implement the preview for the File and Image field types.\n  @see https://decapcms.org/docs/widgets/#File\n  @see https://decapcms.org/docs/widgets/#Image\n  @see https://sveltiacms.app/en/docs/fields/file\n  @see https://sveltiacms.app/en/docs/fields/image\n-->\n<script>\n  import FilePreviewItem from '$lib/components/contents/details/fields/file/file-preview-item.svelte';\n  import { isMultiple } from '$lib/services/integrations/media-libraries/shared';\n\n  /**\n   * @import { FieldPreviewProps } 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 | string[] | undefined} currentValue Field value.\n   */\n\n  /** @type {FieldPreviewProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    typedKeyPath,\n    fieldConfig,\n    currentValue,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n{#if isMultiple(fieldConfig)}\n  {#if Array.isArray(currentValue)}\n    {#each currentValue as value, index (`${value}-${index}`)}\n      <FilePreviewItem {value} {fieldConfig} {typedKeyPath} />\n    {/each}\n  {/if}\n{:else if typeof currentValue === 'string' && currentValue}\n  <FilePreviewItem value={currentValue} {fieldConfig} {typedKeyPath} />\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 a KeyValue field compatible with Static CMS.\n  @see https://staticjscms.netlify.app/docs/widget-keyvalue\n  @see https://sveltiacms.app/en/docs/fields/keyvalue\n-->\n<script>\n  import { _ } from '@sveltia/i18n';\n  import { Button, Icon, TextInput } from '@sveltia/ui';\n  import equal from 'fast-deep-equal';\n  import { getContext, untrack } from 'svelte';\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/fields/key-value/helper';\n  import { getDirection } from '$lib/services/contents/i18n';\n\n  /**\n   * @import { Writable } from 'svelte/store';\n   * @import { EntryDraft, FieldEditorContext, FieldEditorProps } 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 {FieldEditorProps & 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    // Field type-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 {number[]} */\n  let pairIds = $state([]);\n  let nextPairId = 0;\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      // Preserve existing IDs for unchanged positions; assign new IDs for new pairs\n      pairIds = updatedPairs.map((_pair, i) => {\n        if (i < pairIds.length) {\n          return pairIds[i];\n        }\n\n        nextPairId += 1;\n\n        return nextPairId - 1;\n      });\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    pairIds.push(nextPairId);\n    nextPairId += 1;\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    pairIds.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 (pairIds[index])}\n        <tr bind:this={rowElements[index]}>\n          <td class=\"key\">\n            <TextInput\n              dir=\"ltr\"\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              dir={getDirection(locale)}\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>\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: start;\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 a KeyValue field compatible with Static CMS.\n  @see https://staticjscms.netlify.app/docs/widget-keyvalue\n  @see https://sveltiacms.app/en/docs/fields/keyvalue\n-->\n<script>\n  import { _ } from '@sveltia/i18n';\n  import equal from 'fast-deep-equal';\n  import { untrack } from 'svelte';\n\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { getPairs } from '$lib/services/contents/fields/key-value/helper';\n\n  /**\n   * @import { Writable } from 'svelte/store';\n   * @import { EntryDraft, FieldPreviewProps } 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 {FieldPreviewProps & 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    // Field type-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], index (`${key}-${index}`)}\n        <tr>\n          <td>{key}</td>\n          <td>{value}</td>\n        </tr>\n      {/each}\n    </tbody>\n  </table>\n{/if}\n\n<style>\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: start;\n  }\n\n  td {\n    &:empty::after {\n      content: '\\00a0'; /* nbsp */\n    }\n  }\n</style>\n","<script>\n  import { isRTL } from '@sveltia/i18n';\n  import { Icon } from '@sveltia/ui';\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} [expanded] Whether the icon indicates an expanded state.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    expanded = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<Icon name={expanded ? 'expand_more' : isRTL() ? 'chevron_left' : 'chevron_right'} />\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Button, Icon, Menu, MenuButton, MenuItem } from '@sveltia/ui';\n\n  /**\n   * @import { ComplexListField, FieldWithTypes, ObjectField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} [disabled] Whether to disable the button.\n   * @property {ComplexListField | 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 { name: fieldName, label: labelPlural } = $derived(fieldConfig);\n  const { types } = $derived(/** @type {FieldWithTypes} */ (fieldConfig));\n  const listField = $derived(fieldConfig.widget === 'list' ? fieldConfig : undefined);\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 { _ } from '@sveltia/i18n';\n  import { Button } from '@sveltia/ui';\n\n  import ExpandIcon from '$lib/components/common/expand-icon.svelte';\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 = $bindable(),\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      aria-label={expanded ? _('collapse') : _('expand')}\n      aria-expanded={expanded}\n      aria-controls={controlId}\n      onclick={() => {\n        expanded = !expanded;\n        toggleExpanded?.();\n      }}\n    >\n      {#snippet startIcon()}\n        <ExpandIcon {expanded} />\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>\n  .header {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    height: 24px;\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) ? 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 { parseDateTimeConfig } from '$lib/services/contents/fields/date-time/config';\nimport {\n  getCurrentDateTime,\n  getCurrentValue,\n} from '$lib/services/contents/fields/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    const { singleCustomTimeZone: timeZone, outputUTC } = parseDateTimeConfig(config);\n\n    return /** @type {string} */ (\n      getCurrentValue({\n        inputValue: getCurrentDateTime(config, timeZone),\n        currentValue: '',\n        fieldConfig: config,\n        timeZone,\n        outputUTC,\n      })\n    );\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 { isMultiple } from '$lib/services/integrations/media-libraries/shared';\n\n/**\n * @import { GetDefaultValueMapFuncArgs } from '$lib/types/private';\n * @import { MediaField } from '$lib/types/public';\n */\n\n/**\n * Get the default value map for a File/Image field.\n * @param {GetDefaultValueMapFuncArgs} args Arguments.\n * @returns {Record<string, string>} Default value map.\n */\nexport const getDefaultValueMap = ({ fieldConfig, keyPath, dynamicValue }) => {\n  const config = /** @type {MediaField} */ (fieldConfig);\n  const defaultValue = config.default;\n  const multiple = isMultiple(config);\n  /** @type {string | string[]} */\n  let value = '';\n\n  if (dynamicValue !== undefined) {\n    value = multiple ? dynamicValue.split(/,\\s*/) : dynamicValue;\n  } else if (multiple) {\n    value = Array.isArray(defaultValue) ? defaultValue : [];\n  } else {\n    value = typeof defaultValue === 'string' ? defaultValue : '';\n  }\n\n  /** @type {Record<string, any>} */\n  const content = {};\n\n  if (multiple && Array.isArray(value)) {\n    value = value.map((val) => val.trim()).filter((val) => val !== '');\n\n    if (value.length) {\n      content[keyPath] = [];\n      value.forEach((val, index) => {\n        content[`${keyPath}.${index}`] = val;\n      });\n    }\n  }\n\n  if (!multiple && typeof value === 'string') {\n    content[keyPath] = value.trim();\n  }\n\n  return content;\n};\n","import { generateUUID } from '@sveltia/utils/crypto';\n\nimport { TEMPLATE_TAG_REPLACE_REGEX } from '$lib/services/common/template/constants';\nimport { user } from '$lib/services/user/account.svelte';\n\n/**\n * @import { GetDefaultValueMapFuncArgs, User } 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 { email = '', login = '', name = '' } = /** @type {User} */ (user.account);\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(TEMPLATE_TAG_REPLACE_REGEX, (_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    if (tag === 'author-email') {\n      return email;\n    }\n\n    if (tag === 'author-login') {\n      return login;\n    }\n\n    if (tag === 'author-name') {\n      return name;\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 (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 = 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 {\n * FieldKeyPath,\n * ListField,\n * ListFieldWithSubFields,\n * ListFieldWithTypes,\n * } 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 } = /** @type {ListField} */ (fieldConfig);\n  const { fields } = /** @type {ListFieldWithSubFields} */ (fieldConfig);\n  const { types } = /** @type {ListFieldWithTypes} */ (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","/**\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 (['int', 'int/string'].includes(valueType)) {\n    const parsedValue = isString ? Number.parseInt(value, 10) : value;\n\n    return Number.isInteger(parsedValue) ? { [keyPath]: parsedValue } : {};\n  }\n\n  if (['float', 'float/string'].includes(valueType)) {\n    const parsedValue = isString ? Number.parseFloat(value) : value;\n\n    return Number.isFinite(parsedValue) ? { [keyPath]: parsedValue } : {};\n  }\n\n  return {};\n};\n","import { isObject } from '@sveltia/utils/object';\nimport { flatten } from 'flat';\n\nimport { isFieldRequired } from '$lib/services/contents/entry/fields';\n\n/**\n * @import { FlattenedEntryContent, GetDefaultValueMapFuncArgs } from '$lib/types/private';\n * @import {\n * FieldKeyPath,\n * ObjectField,\n * ObjectFieldWithSubFields,\n * ObjectFieldWithTypes,\n * } 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 = ({\n  fieldConfig,\n  keyPath,\n  locale,\n  defaultLocale,\n  populateDefault,\n}) => {\n  const { default: defaultValue } = /** @type {ObjectField} */ (fieldConfig);\n  const { fields: subFields } = /** @type {ObjectFieldWithSubFields} */ (fieldConfig);\n  const { types } = /** @type {ObjectFieldWithTypes} */ (fieldConfig);\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      populateDefault?.({\n        content,\n        keyPath: [keyPath, _subField.name].join('.'),\n        fieldConfig: _subField,\n        locale,\n        defaultLocale,\n        dynamicValues: {},\n      });\n    });\n  }\n\n  return content;\n};\n","import { stripTags } from '@sveltia/utils/string';\nimport { get } from 'svelte/store';\n\nimport { cmsConfig } from '$lib/services/config';\n\n/**\n * @import { RichTextField } from '$lib/types/public';\n * @import { GetDefaultValueMapFuncArgs } from '$lib/types/private';\n */\n\n/**\n * Get the default value map for a RichText/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 = get(cmsConfig)?.field_defaults?.richtext?.default } =\n    /** @type {RichTextField} */ (fieldConfig);\n\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 (in Vitest). Use a simple regex\n      // 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 { 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/fields/boolean/defaults';\nimport { getDefaultValueMap as getCodeFieldDefaultValueMap } from '$lib/services/contents/fields/code/defaults';\nimport { getDefaultValueMap as getDateTimeFieldDefaultValueMap } from '$lib/services/contents/fields/date-time/defaults';\nimport { getDefaultValueMap as getFileFieldDefaultValueMap } from '$lib/services/contents/fields/file/defaults';\nimport { getDefaultValueMap as getHiddenFieldDefaultValueMap } from '$lib/services/contents/fields/hidden/defaults';\nimport { getDefaultValueMap as getKeyValueFieldDefaultValueMap } from '$lib/services/contents/fields/key-value/defaults';\nimport { getDefaultValueMap as getListFieldDefaultValueMap } from '$lib/services/contents/fields/list/defaults';\nimport { getDefaultValueMap as getNumberFieldDefaultValueMap } from '$lib/services/contents/fields/number/defaults';\nimport { getDefaultValueMap as getObjectFieldDefaultValueMap } from '$lib/services/contents/fields/object/defaults';\nimport { getDefaultValueMap as getRichTextFieldDefaultValueMap } from '$lib/services/contents/fields/rich-text/defaults';\nimport { getDefaultValueMap as getSelectFieldDefaultValueMap } from '$lib/services/contents/fields/select/defaults';\n\n/**\n * @import { GetDefaultValueMapFuncArgs } from '$lib/types/private';\n * @import { 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 */\nexport const GET_DEFAULT_VALUE_MAP_FUNCTIONS = {\n  boolean: getBooleanFieldDefaultValueMap,\n  code: getCodeFieldDefaultValueMap,\n  datetime: getDateTimeFieldDefaultValueMap,\n  file: getFileFieldDefaultValueMap,\n  hidden: getHiddenFieldDefaultValueMap,\n  image: getFileFieldDefaultValueMap, // alias\n  keyvalue: getKeyValueFieldDefaultValueMap,\n  list: getListFieldDefaultValueMap,\n  markdown: getRichTextFieldDefaultValueMap, // alias\n  number: getNumberFieldDefaultValueMap,\n  object: getObjectFieldDefaultValueMap,\n  relation: getSelectFieldDefaultValueMap, // alias\n  richtext: getRichTextFieldDefaultValueMap,\n  select: getSelectFieldDefaultValueMap,\n};\n","import { GET_DEFAULT_VALUE_MAP_FUNCTIONS } from '$lib/services/contents/fields/defaults';\n\n/**\n * @import {\n * FlattenedEntryContent,\n * InternalLocaleCode,\n * PopulateDefaultValueArgs,\n * } from '$lib/types/private';\n * @import { Field } from '$lib/types/public';\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 {PopulateDefaultValueArgs} args Arguments.\n * @returns {void} The `content` object is modified in place.\n */\nexport const populateDefaultValue = ({\n  content,\n  keyPath,\n  fieldConfig,\n  locale,\n  defaultLocale,\n  dynamicValues,\n}) => {\n  // @ts-ignore `default` is not defined in the Compute and custom field types\n  const { widget: fieldType = 'string', default: defaultValue, i18n = false } = fieldConfig;\n\n  // For non-default locales, only set the default value if the field is i18n-enabled\n  if (locale !== defaultLocale && [false, 'none'].includes(i18n)) {\n    return;\n  }\n\n  // The `compute` field type doesn’t have the `default` option, so we just set an empty string,\n  // otherwise the field won’t work properly\n  if (fieldType === '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  const getDefaultValue = GET_DEFAULT_VALUE_MAP_FUNCTIONS[fieldType];\n\n  if (getDefaultValue) {\n    Object.assign(\n      content,\n      getDefaultValue({\n        fieldConfig,\n        keyPath,\n        locale,\n        defaultLocale,\n        dynamicValue,\n        populateDefault: populateDefaultValue,\n      }),\n    );\n\n    return;\n  }\n\n  // Handle simple string-type fields, including the built-in `color`, `uuid`, `string` and `text`\n  // field types as well as custom field types\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 CMS configuration.\n * @param {object} args Arguments.\n * @param {Field[]} args.fields Field list of a collection.\n * @param {InternalLocaleCode} args.locale Locale.\n * @param {InternalLocaleCode} args.defaultLocale Default locale of the entry draft.\n * @param {Record<string, string>} [args.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, defaultLocale, 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      defaultLocale,\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';\nimport { getOrCreate } from '$lib/services/utils/cache';\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 * @internal\n * @param {Record<string, any>} obj Original object.\n * @param {Record<string, any>} newProps New properties.\n */\nexport const 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 * Cache of pre-compiled regexes keyed by field key path.\n * @type {Map<FieldKeyPath, RegExp>}\n */\nconst itemListRegexCache = new Map();\n\n/**\n * Traverse the given object by decoding dot-notated key path.\n * @internal\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 */\nexport const getItemList = (obj, keyPath) => {\n  const regex = getOrCreate(\n    itemListRegexCache,\n    keyPath,\n    () => new RegExp(`^${escapeRegExp(keyPath)}\\\\b(?!#)`),\n  );\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, LIST_KEY_PATH_REGEX } from '$lib/services/contents/entry/fields';\nimport { getOrCreate } from '$lib/services/utils/cache';\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 * Cache of pre-compiled regexes keyed by cleaned key path.\n * @type {Map<string, RegExp>}\n */\nconst expanderRegexCache = new Map();\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 a List field, it’s a key path of the list\n * item, e.g. `authors.0`. For an Object field, 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    const cleanKey = key.replace(/#$/, '');\n\n    // Pre-compile and cache the regex — same key path is queried on every editor render.\n    const regex = getOrCreate(\n      expanderRegexCache,\n      cleanKey,\n      () => new RegExp(`^${escapeRegExp(cleanKey)}\\\\.[^\\\\.]+$`),\n    );\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 = LIST_KEY_PATH_REGEX.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 (\n        parentConfig?.widget === 'object' &&\n        'fields' in /** @type {ObjectField} */ (parentConfig)\n      ) {\n        keys.add(`${parentKeyPath}.${parentConfig.name}#`);\n      }\n\n      if (parentConfig?.widget === 'list' && 'field' in /** @type {ListField} */ (parentConfig)) {\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","<!--\n  @component\n  Implement the editor for a List field with subfield(s).\n  @see https://decapcms.org/docs/widgets/#List\n  @see https://decapcms.org/docs/variable-type-widgets/\n  @see https://sveltiacms.app/en/docs/fields/list\n-->\n<script>\n  import { _ } from '@sveltia/i18n';\n  import { Button, Icon, Menu, MenuButton, MenuItem, Spacer, TruncatedText } from '@sveltia/ui';\n  import { isObject } from '@sveltia/utils/object';\n  import { escapeRegExp } from '@sveltia/utils/string';\n  import { unflatten } from 'flat';\n  import { getContext, onMount, untrack } from 'svelte';\n\n  import Image from '$lib/components/assets/shared/image.svelte';\n  import ExpandIcon from '$lib/components/common/expand-icon.svelte';\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/fields/object/add-item-button.svelte';\n  import ObjectHeader from '$lib/components/contents/details/fields/object/object-header.svelte';\n  import { getMediaFieldURL } from '$lib/services/assets/info';\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 { getField } from '$lib/services/contents/entry/fields';\n  import { formatSummary, getListFieldInfo } from '$lib/services/contents/fields/list/helper';\n  import { DEFAULT_I18N_CONFIG } from '$lib/services/contents/i18n/config';\n  import { env } from '$lib/services/user/env.svelte';\n\n  /**\n   * @import { FieldEditorContext, FieldEditorProps } from '$lib/types/private';\n   * @import {\n   * ComplexListField,\n   * ListFieldWithSubField,\n   * ListFieldWithSubFields,\n   * ListFieldWithTypes,\n   * } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {ComplexListField} fieldConfig Field configuration.\n   * @property {string[]} currentValue Field value.\n   */\n\n  /** @type {FieldEditorContext} */\n  const { valueStoreKey = 'currentValues' } = getContext('field-editor') ?? {};\n\n  /** @type {FieldEditorProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    keyPath,\n    typedKeyPath,\n    fieldConfig,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const fieldId = $props.id();\n\n  const {\n    name: fieldName,\n    label,\n    i18n,\n    // Field type-specific options\n    allow_add: allowAdd = true,\n    allow_remove: allowRemove = true,\n    allow_duplicate: allowDuplicate = true,\n    allow_reorder: allowReorder = true,\n    collapsed,\n    summary,\n    thumbnail: thumbnailFieldName,\n    minimize_collapsed: minimizeCollapsed = false,\n    label_singular: labelSingular,\n    max = Infinity,\n    add_to_top: addToTop = false,\n  } = $derived(/** @type {ComplexListField} */ (fieldConfig));\n  const { field } = $derived(/** @type {ListFieldWithSubField} */ (fieldConfig));\n  const { fields } = $derived(/** @type {ListFieldWithSubFields} */ (fieldConfig));\n  const { types, typeKey = 'type' } = $derived(/** @type {ListFieldWithTypes} */ (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]) => [`${fieldName}${_keyPath.slice(keyPath.length)}`, value]),\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  const hasEditableSubFields = $derived(\n    locale === defaultLocale ||\n      (hasVariableTypes\n        ? (types?.flatMap(({ fields: typeFields = [] }) => typeFields) ?? [])\n        : (fields ?? (field ? [field] : []))\n      ).some(({ i18n: subI18n = false }) => subI18n === true || subI18n === 'translate'),\n  );\n  const isAddDisabled = $derived(isDuplicateField || !hasEditableSubFields);\n\n  /**\n   * List item thumbnails.\n   * @type {(string | undefined)[]}\n   */\n  const thumbnails = $state([]);\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 field 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   */\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({ fields: subFields, locale, defaultLocale }));\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        // Track original key paths for existing items before they shift due to the insertion\n        valueList.forEach((item, i) => {\n          if (isObject(item)) {\n            item.__sc_item_original_key_path ??= `${keyPath}.${i}`;\n          }\n        });\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      if (!hasSingleSubField) {\n        // Track original key paths for existing items before they shift due to the removal\n        valueList.forEach((item, i) => {\n          if (isObject(item)) {\n            item.__sc_item_original_key_path ??= `${keyPath}.${i}`;\n          }\n        });\n      }\n\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        // Track original key paths for correct revert after reordering\n        valueList[index].__sc_item_original_key_path ??= `${keyPath}.${index}`;\n        valueList[index + 1].__sc_item_original_key_path ??= `${keyPath}.${index + 1}`;\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  /**\n   * Get the thumbnail image URL for a list item.\n   * @param {number} index List index.\n   * @returns {Promise<string | undefined>} Thumbnail image URL.\n   */\n  const getThumbnail = async (index) => {\n    if (!thumbnailFieldName) {\n      return undefined;\n    }\n\n    const fieldNameNormalized = thumbnailFieldName.replace(/^fields\\./, '');\n    const itemKeyPath = `${keyPath}.${index}`;\n\n    // For single-subfield lists (`field:` option), values are stored at the item key path directly\n    // (without the field name). `getField(itemKeyPath)` already traverses into the subfield, so we\n    // use it to validate the name match too.\n    const thumbnailKeyPath = hasSingleSubField\n      ? itemKeyPath\n      : `${itemKeyPath}.${fieldNameNormalized}`;\n\n    const thumbnailValue = valueMap[thumbnailKeyPath];\n\n    if (!thumbnailValue) {\n      return undefined;\n    }\n\n    const thumbnailFieldConfig = getField({\n      collectionName,\n      fileName,\n      valueMap,\n      keyPath: thumbnailKeyPath,\n      isIndexFile,\n    });\n\n    if (\n      thumbnailFieldConfig?.widget !== 'image' ||\n      (hasSingleSubField && thumbnailFieldConfig.name !== fieldNameNormalized)\n    ) {\n      return undefined;\n    }\n\n    return getMediaFieldURL({\n      value: thumbnailValue,\n      entry: $entryDraft?.originalEntry,\n      collectionName,\n      fileName,\n      typedKeyPath: hasSingleSubField\n        ? `${typedKeyPath}.*`\n        : `${typedKeyPath}.*.${fieldNameNormalized}`,\n    });\n  };\n\n  /**\n   * Update thumbnails for all items.\n   */\n  const updateThumbnails = async () => {\n    if (!thumbnailFieldName) {\n      return;\n    }\n\n    thumbnails.length = items.length;\n\n    items.forEach(async (_item, index) => {\n      const itemThumbnail = await getThumbnail(index);\n\n      if (thumbnails[index] !== itemThumbnail) {\n        thumbnails[index] = itemThumbnail;\n      }\n    });\n  };\n\n  $effect(() => {\n    void [items];\n\n    untrack(() => {\n      updateThumbnails();\n    });\n  });\n\n  onMount(() => {\n    initializeExpanderState();\n  });\n</script>\n\n{#snippet addPositionItems(/** @type {number} */ insertIndex, /** @type {string} */ position)}\n  {#if hasVariableTypes}\n    <MenuItem label={_(`add_item_${position}`)} 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: insertIndex, type: name })}\n          />\n        {/each}\n      {/snippet}\n    </MenuItem>\n  {:else}\n    <MenuItem\n      label={_(`add_item_${position}`)}\n      disabled={hasMaxItems}\n      onclick={() => addItem({ index: insertIndex })}\n    />\n  {/if}\n{/snippet}\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-{fieldId}-item-list\"\n    onclick={() => {\n      syncExpanderStates({ [parentExpandedKeyPath]: !parentExpanded });\n    }}\n  >\n    {#snippet startIcon()}\n      <ExpandIcon expanded={parentExpanded} />\n    {/snippet}\n  </Button>\n  <div role=\"none\" class=\"summary\" id=\"object-{fieldId}-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 add\">\n    <AddItemButton disabled={isAddDisabled} {fieldConfig} {items} {addItem} />\n  </div>\n{/if}\n<div role=\"none\" id=\"list-{fieldId}-item-list\" class=\"item-list\" class:collapsed={!parentExpanded}>\n  {#each items as item, index (isObject(item) ? (item.__sc_item_id ?? index) : index)}\n    <VisibilityObserver>\n      {@const itemKeyPath = `${keyPath}.${index}`}\n      {@const expanded = $entryDraft?.expanderStates?._[itemKeyPath] ?? 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-{fieldId}-item-{index}-body\"\n          {expanded}\n          toggleExpanded={subFields.length\n            ? () => syncExpanderStates({ [itemKeyPath]: !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={isAddDisabled}\n              >\n                {#snippet popup()}\n                  <Menu aria-label={_('list_item_options')}>\n                    {#if allowDuplicate}\n                      <MenuItem\n                        label={_('duplicate')}\n                        disabled={hasMaxItems}\n                        onclick={() => addItem({ index: index + 1, dupIndex: index })}\n                      />\n                    {/if}\n                    {@render addPositionItems(index, 'above')}\n                    {@render addPositionItems(index + 1, 'below')}\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-{fieldId}-item-{index}-body\">\n          {#if expanded}\n            {#each subFields as subField (subField.name)}\n              <VisibilityObserver>\n                <FieldEditor\n                  keyPath={hasSingleSubField ? itemKeyPath : `${itemKeyPath}.${subField.name}`}\n                  typedKeyPath={hasVariableTypes\n                    ? `${typedKeyPath}.*<${item[typeKey]}>.${subField.name}`\n                    : `${typedKeyPath}.*.${subField.name}`}\n                  {locale}\n                  fieldConfig={subField}\n                  context={hasSingleSubField ? 'single-subfield-list-field' : undefined}\n                />\n              </VisibilityObserver>\n            {/each}\n          {:else}\n            <div role=\"none\" class=\"summary\">\n              {#if thumbnails[index]}\n                <Image src={thumbnails[index]} variant=\"icon\" cover />\n              {/if}\n              <TruncatedText lines={env.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 add\">\n    <AddItemButton disabled={isAddDisabled} {fieldConfig} {items} {addItem} />\n    <Spacer flex />\n  </div>\n{/if}\n\n<style>\n  .toolbar {\n    display: flex;\n    align-items: center;\n\n    &.top.add {\n      margin-block: 8px 16px !important;\n    }\n\n    &.bottom.add {\n      margin-block: 16px 0 !important;\n    }\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      display: flex;\n      align-items: center;\n      gap: 8px;\n      padding: 8px;\n\n      &:empty {\n        display: none;\n      }\n    }\n  }\n</style>\n","<!--\n  @component\n  Implement the editor for a List field without subfield(s).\n  @see https://decapcms.org/docs/widgets/#List\n  @see https://sveltiacms.app/en/docs/fields/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  import { getDirection } from '$lib/services/contents/i18n';\n\n  /**\n   * @import { EntryDraft, FieldEditorContext, FieldEditorProps } from '$lib/types/private';\n   * @import { SimpleListField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {SimpleListField} fieldConfig Field configuration.\n   * @property {string[]} currentValue Field value.\n   */\n\n  /** @type {FieldEditorContext} */\n  const { valueStoreKey = 'currentValues' } = getContext('field-editor') ?? {};\n\n  /** @type {FieldEditorProps & 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 field without 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   * @param {string[]} [listItems] List items to set. If not provided, split {@link inputValue}.\n   */\n  const updateSimpleList = (listItems = inputValue.split(/\\n/g)) => {\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      listItems.forEach((val, index) => {\n        /** @type {EntryDraft} */ ($entryDraft)[valueStoreKey][_locale][`${keyPath}.${index}`] =\n          val;\n      });\n    });\n  };\n\n  /**\n   * Trim spaces on each line and remove any empty lines from the list.\n   */\n  const cleanUpValue = () => {\n    currentValue = inputValue\n      .split(/\\n/g)\n      .map((val) => val.trim())\n      .filter((val) => !!val);\n\n    updateSimpleList(currentValue);\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  dir={getDirection(locale)}\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  onblur={() => {\n    cleanUpValue();\n  }}\n/>\n","<!--\n  @component\n  Implement the editor for a List field.\n  @see https://decapcms.org/docs/widgets/#List\n  @see https://sveltiacms.app/en/docs/fields/list\n-->\n<script>\n  import { Group } from '@sveltia/ui';\n\n  import ListEditorComplex from '$lib/components/contents/details/fields/list/list-editor-complex.svelte';\n  import ListEditorSimple from '$lib/components/contents/details/fields/list/list-editor-simple.svelte';\n  import { getListFieldInfo } from '$lib/services/contents/fields/list/helper';\n\n  /**\n   * @import { FieldEditorProps } from '$lib/types/private';\n   * @import { ComplexListField, SimpleListField, 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 {FieldEditorProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    fieldConfig: config,\n    ...rest\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const fieldId = $props.id();\n</script>\n\n<Group aria-labelledby=\"list-{fieldId}-summary\">\n  {#if getListFieldInfo(config).hasSubFields}\n    <ListEditorComplex {...{ ...rest, fieldConfig: /** @type {ComplexListField} */ (config) }} />\n  {:else}\n    <ListEditorSimple {...{ ...rest, fieldConfig: /** @type {SimpleListField} */ (config) }} />\n  {/if}\n</Group>\n","<script>\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</script>\n\n<div role=\"group\" class=\"subsection\" aria-labelledby={label ? headerId : undefined}>\n  {#if label}\n    <div role=\"none\" id={headerId} class=\"header\">\n      {label}\n    </div>\n  {/if}\n  <div role=\"none\" class=\"items\">\n    {@render children?.()}\n  </div>\n</div>\n\n<style>\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","<script>\n  import { escapeRegExp } from '@sveltia/utils/string';\n\n  import { previews } from '$lib/components/contents/details/fields';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { isFieldMultiple } from '$lib/services/contents/entry/fields';\n  import { DEFAULT_I18N_CONFIG } from '$lib/services/contents/i18n/config';\n\n  /**\n   * @import { InternalLocaleCode, TypedFieldKeyPath } from '$lib/types/private';\n   * @import { Field, FieldKeyPath, VisibleField } 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 {TypedFieldKeyPath} typedKeyPath Typed field key path.\n   * @property {Field} fieldConfig Field configuration.\n   * @property {boolean} [showLabel] Whether to show the field label/header. Defaults to `true`.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    keyPath,\n    typedKeyPath,\n    fieldConfig,\n    showLabel = true,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const { name: fieldName, widget: fieldType = 'string', i18n = false } = $derived(fieldConfig);\n  const { label = '', preview = true } = $derived(/** @type {VisibleField} */ (fieldConfig));\n  const multiple = $derived(isFieldMultiple(fieldConfig));\n  const isList = $derived(fieldType === 'list' || multiple);\n  const collection = $derived($entryDraft?.collection);\n  const collectionFile = $derived($entryDraft?.collectionFile);\n  const valueMap = $derived($state.snapshot($entryDraft?.currentValues[locale] ?? {}));\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. Posts a message to the window to highlight the\n   * corresponding field in the editor.\n   */\n  const highlightEditorField = () => {\n    window.postMessage(\n      { type: 'highlight-editor-field', payload: { locale, keyPath } },\n      window.location.origin,\n    );\n  };\n</script>\n\n{#if fieldType !== '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-field-type={fieldType}\n    data-key-path={keyPath}\n    data-typed-key-path={typedKeyPath}\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    {#if showLabel}\n      <h4>{label || fieldName}</h4>\n    {/if}\n    {#if fieldType in previews}\n      {@const Preview = previews[fieldType]}\n      <Preview {keyPath} {typedKeyPath} {locale} {fieldConfig} {currentValue} />\n    {/if}\n  </section>\n{/if}\n\n<style>\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\n  @media (width < 768px) {\n    :global([role='document']) {\n      & > section:is([data-field-type='file'], [data-field-type='image']):has(:global(img)),\n      & > section:is([data-field-type='string']):has(:global(iframe)) {\n        overflow: visible;\n      }\n\n      & > section:is([data-field-type='file'], [data-field-type='image']) :global(img) {\n        width: 100%;\n        max-height: none !important;\n      }\n    }\n  }\n</style>\n","<!--\n  @component\n  Implement the preview for a List field with subfield(s).\n  @see https://decapcms.org/docs/widgets/#List\n  @see https://sveltiacms.app/en/docs/fields/list\n-->\n<script>\n  import { isObject } from '@sveltia/utils/object';\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 Subsection from '$lib/components/contents/details/fields/object/subsection.svelte';\n  import FieldPreview from '$lib/components/contents/details/preview/field-preview.svelte';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { getListFieldInfo } from '$lib/services/contents/fields/list/helper';\n\n  /**\n   * @import { FieldPreviewProps } from '$lib/types/private';\n   * @import {\n   * ComplexListField,\n   * ListFieldWithSubField,\n   * ListFieldWithSubFields,\n   * ListFieldWithTypes,\n   * } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {ComplexListField} fieldConfig Field configuration.\n   * @property {string[] | undefined} currentValue Field value.\n   */\n\n  /** @type {FieldPreviewProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    keyPath,\n    typedKeyPath,\n    fieldConfig,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const { name: fieldName } = $derived(fieldConfig);\n  const { field } = $derived(/** @type {ListFieldWithSubField} */ (fieldConfig));\n  const { fields } = $derived(/** @type {ListFieldWithSubFields} */ (fieldConfig));\n  const { types, typeKey = 'type' } = $derived(/** @type {ListFieldWithTypes} */ (fieldConfig));\n  const { hasSingleSubField, hasVariableTypes } = $derived(getListFieldInfo(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]) => [`${fieldName}${_keyPath.slice(keyPath.length)}`, value]),\n      ),\n    )[fieldName] ?? [],\n  );\n</script>\n\n{#each items as item, index (isObject(item) ? (item.__sc_item_id ?? index) : index)}\n  <VisibilityObserver>\n    {@const itemKeyPath = `${keyPath}.${index}`}\n    {@const subFieldName = Array.isArray(types)\n      ? $entryDraft?.currentValues[locale][`${itemKeyPath}.${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={hasSingleSubField ? itemKeyPath : `${itemKeyPath}.${subField.name}`}\n            typedKeyPath={hasVariableTypes\n              ? `${typedKeyPath}.*<${subFieldName}>.${subField.name}`\n              : `${typedKeyPath}.*.${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 a List field without subfield(s).\n  @see https://decapcms.org/docs/widgets/#List\n  @see https://sveltiacms.app/en/docs/fields/list\n-->\n<script>\n  import { getCanonicalLocale, getDirection } from '$lib/services/contents/i18n';\n\n  /**\n   * @import { FieldPreviewProps } from '$lib/types/private';\n   * @import { SimpleListField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {SimpleListField} fieldConfig Field configuration.\n   * @property {string[] | undefined} currentValue Field value.\n   */\n\n  /** @type {FieldPreviewProps & 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={getCanonicalLocale(locale)} dir={getDirection(locale)}>\n    {#each currentValue as item, index (`${item}-${index}`)}\n      <li>{item}</li>\n    {/each}\n  </ul>\n{/if}\n","<!--\n  @component\n  Implement the preview for a List field.\n  @see https://decapcms.org/docs/widgets/#List\n  @see https://sveltiacms.app/en/docs/fields/list\n-->\n<script>\n  import ListPreviewComplex from '$lib/components/contents/details/fields/list/list-preview-complex.svelte';\n  import ListPreviewSimple from '$lib/components/contents/details/fields/list/list-preview-simple.svelte';\n  import { getListFieldInfo } from '$lib/services/contents/fields/list/helper';\n\n  /**\n   * @import { FieldPreviewProps } from '$lib/types/private';\n   * @import { ComplexListField, SimpleListField, 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 {FieldPreviewProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    fieldConfig: config,\n    ...rest\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n{#if getListFieldInfo(config).hasSubFields}\n  <ListPreviewComplex {...{ ...rest, fieldConfig: /** @type {ComplexListField} */ (config) }} />\n{:else}\n  <ListPreviewSimple {...{ ...rest, fieldConfig: /** @type {SimpleListField} */ (config) }} />\n{/if}\n","// cSpell:ignore lngs\n\nimport { isObject } from '@sveltia/utils/object';\n\nimport { toFixed } from '$lib/services/utils/number';\n\n/**\n * @import { GeoJSONStoreGeometries } from 'terra-draw';\n * @import { MapField } from '$lib/types/public';\n */\n\n/**\n * Check whether a string is a valid GeoJSON geometry object for the given geometry type.\n * @param {string} value Stringified GeoJSON geometry object.\n * @param {MapField['type']} [geometryType] Expected geometry type. Default: `Point`.\n * @returns {boolean} Whether the value is valid.\n */\nexport const isValidGeoJSON = (value, geometryType = 'Point') => {\n  try {\n    const geometry = JSON.parse(value);\n\n    return (\n      isObject(geometry) && geometry.type === geometryType && Array.isArray(geometry.coordinates)\n    );\n  } catch {\n    return false;\n  }\n};\n\n/**\n * Round all coordinates in a GeoJSON geometry to the specified number of decimal places. Works for\n * Point (`[lng, lat]`), LineString (`[[lng, lat], ...]`), and Polygon (`[[[lng, lat], ...], ...]`)\n * coordinate structures.\n * @param {GeoJSONStoreGeometries['coordinates']} coordinates GeoJSON coordinates to round.\n * @param {number} decimals Number of decimal places.\n * @returns {GeoJSONStoreGeometries['coordinates']} Rounded coordinates.\n */\nexport const roundCoordinates = (coordinates, decimals) =>\n  /** @type {GeoJSONStoreGeometries['coordinates']} */ (\n    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/**\n * Compute the Leaflet-style bounding box of a non-Point GeoJSON geometry as `[[minLat, minLng],\n * [maxLat, maxLng]]`. Returns `null` if the geometry is a Point or if any coordinate value is not a\n * number.\n * @param {GeoJSONStoreGeometries} geometry GeoJSON geometry object.\n * @returns {[[number, number], [number, number]] | null} Bounding box, or `null`.\n */\nexport const getGeometryBounds = (geometry) => {\n  if (geometry.type === 'Point') {\n    return null;\n  }\n\n  // Polygon coordinates are nested one level deeper (`[[[lng, lat], ...]]`), so flatten first.\n  const pairs = geometry.type === 'Polygon' ? geometry.coordinates.flat(1) : geometry.coordinates;\n\n  if (!pairs.every((c) => typeof c[0] === 'number' && typeof c[1] === 'number')) {\n    return null;\n  }\n\n  const lats = pairs.map((c) => c[1]);\n  const lngs = pairs.map((c) => c[0]);\n\n  return [\n    [Math.min(...lats), Math.min(...lngs)],\n    [Math.max(...lats), Math.max(...lngs)],\n  ];\n};\n","<!--\n  @component\n  Implement the editor for a Map field.\n  @see https://decapcms.org/docs/widgets/#Map\n  @see https://sveltiacms.app/en/docs/fields/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 { _ } from '@sveltia/i18n';\n  import { AlertDialog, Button, Icon, Listbox, Option, SearchBar } from '@sveltia/ui';\n  import { isObject } from '@sveltia/utils/object';\n  import { untrack } from 'svelte';\n\n  import LeafletMap from '$lib/components/common/leaflet-map.svelte';\n  import { loadModule } from '$lib/services/app/dependencies';\n  import {\n    getGeometryBounds,\n    isValidGeoJSON,\n    roundCoordinates,\n  } from '$lib/services/contents/fields/map/helper';\n  import { sendRequest } from '$lib/services/utils/networking';\n  import { toFixed } from '$lib/services/utils/number';\n\n  /**\n   * @import Leaflet from 'leaflet';\n   * @import { GeoJSONStoreGeometries, TerraDraw } from 'terra-draw';\n   * @import { FieldEditorProps, GeoCoordinates } 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 {FieldEditorProps & 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 { decimals = 7, type: geometryType = 'Point', center, zoom } = $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 {Leaflet.Map | undefined} */\n  let map = undefined;\n\n  /**\n   * Load the Terra Draw libraries and initialize the draw instance once the Leaflet map is ready.\n   * We don’t bundle the libraries because of the bundle size: a Map field may not be used often and\n   * multiple services/adapters may be supported in the future.\n   * @param {object} args Arguments.\n   * @param {Leaflet} args.leaflet Leaflet library.\n   * @param {Leaflet.Map} args.map Leaflet map instance.\n   */\n  const onReady = async ({ leaflet, map: mapInstance }) => {\n    map = mapInstance;\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    /** @type {Record<string, any>} */\n    const constructors = {\n      Point: TerraDrawPointMode,\n      LineString: TerraDrawLineStringMode,\n      Polygon: TerraDrawPolygonMode,\n    };\n\n    const _draw = new TerraDraw({\n      adapter: new TerraDrawLeafletAdapter({ lib: leaflet, map }),\n      modes: [new constructors[geometryType]()],\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    // The $effect below will handle fitting the map to an existing valid value. Apply the\n    // configured center/zoom defaults here for the case where there is no valid value. Leaflet uses\n    // `[latitude, longitude]` format for coordinates, while GeoJSON uses `[longitude, latitude]`.\n    // We need to reverse the order of the coordinates when setting the view of the map.\n    if (!currentValue || !isValidGeoJSON(currentValue, geometryType)) {\n      map.setView(center ? [center[1], center[0]] : [0, 0], zoom ?? 2);\n    }\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    const snapshot = draw.getSnapshot();\n    const feature = snapshot[snapshot.length - 1];\n\n    if (!feature || changeType !== (geometryType === 'Point' ? 'create' : 'delete')) {\n      return;\n    }\n\n    inputValue = JSON.stringify({\n      type: geometryType,\n      coordinates: roundCoordinates(feature.geometry.coordinates, decimals),\n    });\n\n    // Allow to have only one feature\n    if (snapshot.length > 1) {\n      draw.removeFeatures(\n        snapshot.filter((f) => f.id !== feature.id).map((f) => /** @type {string} */ (f.id)),\n      );\n    }\n  };\n\n  /**\n   * Fit the map view to the given geometry. For a Point, the map is centered on the coordinates at\n   * zoom level 15. For a LineString or Polygon, the map is fitted to the bounding box of all\n   * coordinate pairs.\n   * @param {GeoJSONStoreGeometries} geometry GeoJSON geometry object.\n   */\n  const fitMapToGeometry = (geometry) => {\n    if (geometry.type === 'Point') {\n      const [longitude, latitude] = geometry.coordinates;\n\n      if (typeof longitude === 'number' && typeof latitude === 'number') {\n        map?.setView([latitude, longitude], 15);\n      }\n    } else {\n      const bounds = getGeometryBounds(geometry);\n\n      if (bounds) {\n        map?.fitBounds(bounds);\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      geometry = JSON.parse(newValue);\n\n      if (\n        !isObject(geometry) ||\n        geometry.type !== geometryType ||\n        !Array.isArray(geometry.coordinates)\n      ) {\n        throw new Error('Invalid object');\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      fitMapToGeometry(geometry);\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 = 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  };\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    map?.setView([latitude, longitude], 15);\n\n    if (geometryType !== 'Point') {\n      return;\n    }\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    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  $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<div role=\"none\" class=\"toolbar\">\n  <!-- @todo Replace this with `<Combobox>` -->\n  <SearchBar bind:value={searchQuery} debounce {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  <Button\n    variant=\"tertiary\"\n    label={_('clear')}\n    disabled={readonly || !currentValue}\n    onclick={() => {\n      clearValue();\n    }}\n  />\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 class=\"map-wrapper\">\n  <LeafletMap bind:mapElement inert={readonly} class={invalid ? 'invalid' : undefined} {onReady} />\n</div>\n\n<AlertDialog bind:open={showAlertDialog} title={_('geolocation_error_title')}>\n  {errorMessage}\n</AlertDialog>\n\n<style>\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-wrapper {\n    display: contents;\n\n    :global {\n      .map {\n        aspect-ratio: auto;\n        height: 400px;\n\n        &.invalid {\n          border-color: var(--sui-error-border-color);\n        }\n      }\n    }\n  }\n</style>\n","<!--\n  @component\n  Implement the preview for a Map field.\n  @see https://decapcms.org/docs/widgets/#Map\n  @see https://sveltiacms.app/en/docs/fields/map\n-->\n<script>\n  /**\n   * @import { FieldPreviewProps } 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 {FieldPreviewProps & 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>\n  pre {\n    white-space: pre-wrap;\n  }\n</style>\n","<!--\n  @component\n  Implement the editor for a Number field.\n  @see https://decapcms.org/docs/widgets/#Number\n  @see https://sveltiacms.app/en/docs/fields/number\n-->\n<script>\n  import { NumberInput } from '@sveltia/ui';\n  import { untrack } from 'svelte';\n\n  /**\n   * @import { FieldEditorProps } 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 {FieldEditorProps & 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 inputValue = $state();\n\n  const { value_type: valueType = 'int', min, max, step = 1 } = $derived(fieldConfig);\n  const isStringOutput = $derived(!['int', 'float'].includes(valueType));\n  const isFloatType = $derived(['float', 'float/string'].includes(valueType));\n\n  /**\n   * Update {@link inputValue} based on {@link currentValue}.\n   */\n  const setInputValue = () => {\n    let newValue = undefined;\n\n    if (currentValue !== undefined) {\n      if (typeof currentValue === 'number') {\n        newValue = currentValue;\n      } else if (typeof currentValue === 'string') {\n        if (!currentValue.trim()) {\n          newValue = NaN;\n        } else if (isFloatType) {\n          newValue = Number.parseFloat(currentValue);\n        } else {\n          newValue = Number.parseInt(currentValue, 10);\n        }\n\n        newValue = !Number.isNaN(newValue) ? newValue : undefined;\n      }\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}. Cast the value according to the\n   * `value_type` configuration.\n   */\n  const setCurrentValue = () => {\n    let newValue;\n\n    if (inputValue === undefined) {\n      newValue = NaN;\n    } else if (isFloatType) {\n      newValue = Number.parseFloat(String(inputValue));\n    } else {\n      newValue = Number.parseInt(String(inputValue), 10);\n    }\n\n    if (isStringOutput) {\n      newValue = Number.isNaN(newValue) ? '' : String(newValue);\n    } else if (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 [inputValue];\n\n    untrack(() => {\n      setCurrentValue();\n    });\n  });\n</script>\n\n<NumberInput\n  bind:value={inputValue}\n  {min}\n  {max}\n  {step}\n  {readonly}\n  {required}\n  {invalid}\n  aria-labelledby=\"{fieldId}-label\"\n  aria-errormessage=\"{fieldId}-error\"\n  onblur={() => {\n    // Ensure synchronization on blur\n    setInputValue();\n  }}\n/>\n","<!--\n  @component\n  Implement the preview for a Number field.\n  @see https://decapcms.org/docs/widgets/#Number\n  @see https://sveltiacms.app/en/docs/fields/number\n-->\n<script>\n  import { getCanonicalLocale, getDirection } from '$lib/services/contents/i18n';\n\n  /**\n   * @import { FieldPreviewProps } 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 {FieldPreviewProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    currentValue,\n    /* eslint-enable prefer-const */\n  } = $props();\n\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={canonicalLocale} dir={getDirection(locale)}>\n    {numberFormatter.format(Number(currentValue))}\n  </p>\n{/if}\n","import { toRaw } from '@sveltia/utils/object';\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 * @import { HiddenField } from '$lib/types/public';\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 * @param {InternalLocaleCode} targetLanguage Target locale.\n * @returns {FlattenedEntryContent} Updated content.\n */\nexport const copyDefaultLocaleValues = (content, targetLanguage) => {\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 defaultLocaleContent = toRaw(currentValues[defaultLocale]);\n  const newContent = { ...toRaw(content), ...defaultLocaleContent };\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: fieldType = '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    // field type 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 (\n      ['text', 'string', 'richtext', 'markdown'].includes(fieldType) &&\n      [true, 'translate'].includes(i18n)\n    ) {\n      newContent[keyPath] = content[keyPath] ?? '';\n    }\n\n    // Support special case for the Hidden field with `default` value set to `{{locale}}`: if the\n    // field value is `{{locale}}`, replace it with the target locale\n    if (fieldType === 'hidden' && [true, 'translate'].includes(i18n)) {\n      const { default: defaultValue } = /** @type {HiddenField} */ (field);\n\n      if (defaultValue === '{{locale}}') {\n        newContent[keyPath] = targetLanguage;\n      }\n    }\n\n    // Remove `null` values for object fields if i18n is enabled and the field is enabled in the\n    // default locale, otherwise the subfields will not be saved in the current locale\n    if (\n      fieldType === 'object' &&\n      [true, 'translate', 'duplicate'].includes(i18n) &&\n      defaultLocaleContent[keyPath] !== null\n    ) {\n      delete newContent[keyPath];\n    }\n\n    // Remove the field if i18n is disabled\n    if (\n      [false, 'none'].includes(i18n) ||\n      noI18nFieldKeys.some((key) => keyPath === key || keyPath.startsWith(`${key}.`))\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, defaultLocale, currentLocales, currentValues, validities, validationMessages } =\n      _draft;\n\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, defaultLocale });\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, locale),\n          }),\n        },\n      };\n    }\n\n    return {\n      ..._draft,\n      currentLocales: { ...currentLocales, [locale]: enabled },\n      validities: { ...validities, [locale]: {} },\n      validationMessages: { ...validationMessages, [locale]: {} },\n    };\n  });\n};\n","import { escapeRegExp } from '@sveltia/utils/string';\n\nimport { TEMPLATE_TAG_REPLACE_REGEX } from '$lib/services/common/template/constants';\nimport { TRANSFORMATION_SPLIT_REGEX } from '$lib/services/common/transformations';\nimport {\n  getFieldDisplayValue,\n  getVisibleFieldDisplayValue,\n} from '$lib/services/contents/entry/fields';\nimport { getOrCreate } from '$lib/services/utils/cache';\n\n/**\n * @import { FlattenedEntryContent, GetFieldArgs, InternalLocaleCode } from '$lib/types/private';\n * @import { FieldKeyPath } from '$lib/types/public';\n */\n\n/**\n * Cache of pre-compiled regexes keyed by field key path.\n * @type {Map<FieldKeyPath, RegExp>}\n */\nconst objectSummaryRegexCache = new Map();\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    const keyPathRegex = getOrCreate(\n      objectSummaryRegexCache,\n      keyPath,\n      () => new RegExp(`^${escapeRegExp(keyPath)}\\\\.`),\n    );\n\n    return getVisibleFieldDisplayValue({ valueMap, locale, keyPath, keyPathRegex, getFieldArgs });\n  }\n\n  /**\n   * Replacer function for template tags in the summary template. It extracts the field value based\n   * on the placeholder, applies any transformations, and returns the display value to replace the\n   * tag.\n   * @param {string} _match The entire matched template tag, e.g. `{{fields.slug | upper}}`. Unused\n   * in the function but required by the `replace` method.\n   * @param {string} placeholder The content inside the template tag, e.g. `fields.slug | upper`.\n   * @returns {string} The display value to replace the template tag.\n   */\n  const replacer = (_match, placeholder) => {\n    const [tag, ...transformations] = placeholder.split(TRANSFORMATION_SPLIT_REGEX);\n\n    return getFieldDisplayValue({\n      ...getFieldArgs,\n      keyPath: `${keyPath}.${tag.replace(/^fields\\./, '')}`,\n      locale,\n      transformations,\n    });\n  };\n\n  return summaryTemplate.replaceAll(TEMPLATE_TAG_REPLACE_REGEX, replacer);\n};\n","<!--\n  @component\n  Implement the editor for an Object field.\n  @see https://decapcms.org/docs/widgets/#Object\n  @see https://sveltiacms.app/en/docs/fields/object\n-->\n<script>\n  import { _ } from '@sveltia/i18n';\n  import { Button, Checkbox, Icon, TruncatedText } from '@sveltia/ui';\n  import { toRaw } from '@sveltia/utils/object';\n  import { getContext, onMount, tick } from 'svelte';\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/fields/object/add-item-button.svelte';\n  import ObjectHeader from '$lib/components/contents/details/fields/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 { formatSummary } from '$lib/services/contents/fields/object/helper';\n  import { DEFAULT_I18N_CONFIG } from '$lib/services/contents/i18n/config';\n  import { env } from '$lib/services/user/env.svelte';\n\n  /**\n   * @import { EntryDraft, FieldEditorContext, FieldEditorProps } from '$lib/types/private';\n   * @import {\n   * ObjectField,\n   * ObjectFieldWithSubFields,\n   * ObjectFieldWithTypes,\n   * } 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 { fieldContext, valueStoreKey = 'currentValues' } = getContext('field-editor') ?? {};\n  // Hide the header/expander if in a single subfield list field because it’s redundant\n  const hideHeader = fieldContext === 'single-subfield-list-field';\n\n  /** @type {FieldEditorProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    keyPath,\n    typedKeyPath,\n    fieldLabel,\n    fieldConfig,\n    required = true,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const fieldId = $props.id();\n\n  const {\n    name: fieldName,\n    i18n = false,\n    // Field type-specific options\n    collapsed,\n    summary,\n  } = $derived(fieldConfig);\n  const { fields } = $derived(/** @type {ObjectFieldWithSubFields} */ (fieldConfig));\n  const { types, typeKey = 'type' } = $derived(/** @type {ObjectFieldWithTypes} */ (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]) => _keyPath.startsWith(`${keyPath}.`) && value !== undefined,\n    ),\n  );\n  const canEdit = $derived(\n    fieldContext === 'rich-text-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    if (hideHeader) {\n      return;\n    }\n\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({ fields: subFields, locale, defaultLocale })) //\n        .map(([_keyPath, value]) => [`${keyPath}.${_keyPath}`, value]),\n    );\n\n    const newValueMap =\n      locale === defaultLocale ? newContent : copyDefaultLocaleValues(newContent, locale);\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-${fieldId}-summary`}\n  >\n    {#if !hideHeader}\n      <ObjectHeader\n        label={hasVariableTypes ? typeConfig?.label || typeConfig?.name : ''}\n        controlId=\"object-{fieldId}-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    {/if}\n    <div role=\"none\" class=\"item-list\" id=\"object-{fieldId}-item-list\">\n      {#if parentExpanded}\n        {#each subFields as subField (subField.name)}\n          {@const subFieldKeyPath = `${keyPath}.${subField.name}`}\n          <VisibilityObserver>\n            <FieldEditor\n              keyPath={subFieldKeyPath}\n              typedKeyPath={hasVariableTypes && typeConfig?.name\n                ? `${typedKeyPath}<${typeConfig.name}>.${subField.name}`\n                : subFieldKeyPath}\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-{fieldId}-summary\">\n            <TruncatedText lines={env.isSmallScreen ? 2 : 1}>\n              {formattedSummary}\n            </TruncatedText>\n          </div>\n        {/if}\n      {/if}\n    </div>\n  </div>\n{/if}\n\n<style>\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\n  :global(.sui.checkbox) + .wrapper {\n    & > :global(.group) {\n      margin-top: 8px;\n    }\n  }\n\n  .summary {\n    padding: 8px;\n  }\n</style>\n","<!--\n  @component\n  Implement the preview for an Object field.\n  @see https://decapcms.org/docs/widgets/#Object\n  @see https://sveltiacms.app/en/docs/fields/object\n-->\n<script>\n  import VisibilityObserver from '$lib/components/common/visibility-observer.svelte';\n  import Subsection from '$lib/components/contents/details/fields/object/subsection.svelte';\n  import FieldPreview from '$lib/components/contents/details/preview/field-preview.svelte';\n  import { entryDraft } from '$lib/services/contents/draft';\n\n  /**\n   * @import { FieldPreviewProps } from '$lib/types/private';\n   * @import {\n   * ObjectField,\n   * ObjectFieldWithSubFields,\n   * ObjectFieldWithTypes,\n   * } 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 {FieldPreviewProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    keyPath,\n    typedKeyPath,\n    fieldConfig,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const { fields } = $derived(/** @type {ObjectFieldWithSubFields} */ (fieldConfig));\n  const { types, typeKey = 'type' } = $derived(/** @type {ObjectFieldWithTypes} */ (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      {@const subFieldKeyPath = `${keyPath}.${subField.name}`}\n      <VisibilityObserver>\n        <FieldPreview\n          keyPath={subFieldKeyPath}\n          typedKeyPath={hasVariableTypes && typeConfig?.name\n            ? `${typedKeyPath}<${typeConfig.name}>.${subField.name}`\n            : subFieldKeyPath}\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   * @import { SelectFieldValue } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {SelectFieldValue[] | undefined} 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 {SelectFieldValue} 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 {SelectFieldValue} 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: /** @type {any} */ (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    onReorder={({ detail: { values } }) => {\n      updateList(({ valueList }) => {\n        valueList.splice(0, valueList.length, ...values);\n      });\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) ?? false}\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 { _ } from '@sveltia/i18n';\n  import { Option, Radio, RadioGroup, Select } from '@sveltia/ui';\n\n  /**\n   * @import { SelectFieldSelectorProps } from '$lib/types/private';\n   * @import { SelectFieldValue } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {SelectFieldValue | undefined} 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 a Select field.\n  @see https://decapcms.org/docs/widgets/#Select\n  @see https://sveltiacms.app/en/docs/fields/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/fields/select/select-multiple.svelte';\n  import SelectSingle from '$lib/components/contents/details/fields/select/select-single.svelte';\n\n  /**\n   * @import { FieldEditorProps, SelectFieldSelectorOption } 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 {FieldEditorProps & 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    // Field type-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) ? option : { 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  @component\n  Implement the editor for a Relation field.\n  @see https://decapcms.org/docs/widgets/#Relation\n  @see https://sveltiacms.app/en/docs/fields/relation\n-->\n<script>\n  import SelectEditor from '$lib/components/contents/details/fields/select/select-editor.svelte';\n  import { getEntriesByCollection } from '$lib/services/contents/collection/entries';\n  import { getCollectionFileEntry } from '$lib/services/contents/collection/files';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { getOptions } from '$lib/services/contents/fields/relation/helper';\n\n  /**\n   * @import { FieldEditorProps } 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 {FieldEditorProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    keyPath,\n    typedKeyPath,\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    // Field type-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  const currentLocaleValues = $derived($entryDraft?.currentValues[locale]);\n  const currentSlug = $derived($entryDraft?.currentSlugs[locale] ?? $entryDraft?.currentSlugs._);\n  /** @type {SelectField} */\n  const selectFieldConfig = $derived({\n    ...fieldConfig,\n    widget: 'select',\n    options: getOptions({ locale, fieldConfig, refEntries, currentLocaleValues, currentSlug }),\n  });\n</script>\n\n<div role=\"none\" class=\"wrapper\">\n  <SelectEditor\n    {locale}\n    {keyPath}\n    {typedKeyPath}\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 a Relation field.\n  @see https://decapcms.org/docs/widgets/#Relation\n  @see https://sveltiacms.app/en/docs/fields/relation\n-->\n<script>\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/fields/relation/helper';\n  import { getCanonicalLocale, getDirection, getListFormatter } from '$lib/services/contents/i18n';\n\n  /**\n   * @import { FieldPreviewProps } 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 {FieldPreviewProps & 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    // Field type-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={getCanonicalLocale(locale)} dir={getDirection(locale)}>\n    {listFormatter.format(refValues)}\n  </p>\n{/if}\n","/**\n * @import { TextEditorBlockType, TextEditorInlineType, TextEditorMode } from '@sveltia/ui';\n * @import {\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  'strikethrough',\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  strikethrough: 'strikethrough',\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","import { parseDateTimeConfig } from '$lib/services/contents/fields/date-time/config';\nimport { getInputValue } from '$lib/services/contents/fields/date-time/helper';\n\n/**\n * @import { EntryValidityState, ValidateFieldFuncArgs } from '$lib/types/private';\n * @import { DateTimeField, DateTimeInputType } from '$lib/types/public';\n */\n\n/**\n * @typedef DateTimeFieldValidationDetail\n * @property {boolean} hasMin Whether the field has a minimum value.\n * @property {boolean} hasMax Whether the field has a maximum value.\n * @property {boolean} invalid Whether the value is invalid.\n */\n\n/**\n * Validate a DateTime field value against the field configuration.\n * @param {ValidateFieldFuncArgs} args Arguments.\n * @returns {{ validity: EntryValidityState, detail: DateTimeFieldValidationDetail }} Result.\n */\nexport const validateDateTimeField = ({ fieldConfig, value }) => {\n  const config = /** @type {DateTimeField} */ (fieldConfig);\n  const { type, min, max, singleCustomTimeZone: timeZone } = parseDateTimeConfig(config);\n  const hasMin = typeof min === 'string' && !!min;\n  const hasMax = typeof max === 'string' && !!max;\n  let rangeUnderflow = false;\n  let rangeOverflow = false;\n\n  if (value && (hasMin || hasMax)) {\n    // Convert stored value to native input format for comparison\n    const inputValue = getInputValue({ currentValue: value, fieldConfig: config, timeZone });\n\n    if (inputValue) {\n      const inputElement = document.createElement('input');\n\n      inputElement.type = type;\n      if (hasMin) inputElement.min = min;\n      if (hasMax) inputElement.max = max;\n      inputElement.value = inputValue;\n\n      ({ rangeUnderflow, rangeOverflow } = inputElement.validity);\n    }\n  }\n\n  const invalid = rangeUnderflow || rangeOverflow;\n\n  return {\n    validity: { rangeUnderflow, rangeOverflow },\n    detail: { hasMin, hasMax, invalid },\n  };\n};\n\n/**\n * Intl.DateTimeFormat instance for formatting time strings in a more human-friendly way.\n */\nconst timeFormatter = new Intl.DateTimeFormat('en-GB', {\n  hour12: true,\n  timeZone: 'UTC',\n  hour: '2-digit',\n  minute: '2-digit',\n});\n\n/**\n * Format a time string (e.g. \"14:30\") to a more human-friendly format (e.g. \"2:30 PM\").\n * @param {string} value Time string in \"HH:mm\" format.\n * @returns {string} Formatted time string.\n */\nexport const formatTime = (value) =>\n  timeFormatter.format(new Date(`1970-01-01T${value}Z`)).toUpperCase();\n\n/**\n * Format a date/time string based on the field type and configuration. For date-only fields, it\n * returns the date part. For time-only fields, it returns the time part formatted in a more\n * human-friendly way. For date-time fields, it returns both parts formatted in a more\n * human-friendly way.\n * @param {DateTimeInputType} type The type of the date/time field.\n * @param {string} value Date/time string in ISO format.\n * @returns {string} Formatted date/time string.\n */\nexport const getFormattedDateTime = (type, value) => {\n  if (type === 'date') {\n    return value;\n  }\n\n  if (type === 'time') {\n    return formatTime(value);\n  }\n\n  const [datePart, timePart] = value.split('T');\n\n  return `${datePart}, ${formatTime(timePart)}`;\n};\n","import { _ } from '@sveltia/i18n';\n\nimport { isFieldMultiple } from '$lib/services/contents/entry/fields';\nimport { parseDateTimeConfig } from '$lib/services/contents/fields/date-time/config';\nimport { getFormattedDateTime } from '$lib/services/contents/fields/date-time/validate';\n\n/**\n * @import { EntryValidityState } from '$lib/types/private';\n * @import {\n * DateTimeField,\n * DateTimeInputType,\n * Field,\n * MinMaxValueField,\n * StringField,\n * TextField,\n * } from '$lib/types/public';\n */\n\n/**\n * Get the error message for a range validity error (underflow or overflow).\n * @param {object} args Arguments.\n * @param {string} args.direction `'underflow'` or `'overflow'`.\n * @param {string} args.limitKey `'min'` or `'max'`.\n * @param {string | number | undefined} args.limitValue The limit value from the field config.\n * @param {string} args.fieldType Field widget type.\n * @param {string | undefined} args.type Native input type derived from the field config.\n * @param {boolean} args.canAddMultiValue Whether the field supports adding multiple values.\n * @returns {string} Translated error message.\n */\nconst getRangeErrorMessage = ({\n  direction,\n  limitKey,\n  limitValue,\n  fieldType,\n  type,\n  canAddMultiValue,\n}) => {\n  if (fieldType === 'datetime' && typeof limitValue === 'string') {\n    return _(`validation.range_${direction}.${type}`, {\n      values: {\n        [limitKey]: getFormattedDateTime(/** @type {DateTimeInputType} */ (type), limitValue),\n      },\n    });\n  }\n\n  if (fieldType === 'number') {\n    return _(`validation.range_${direction}.number`, { values: { [limitKey]: limitValue } });\n  }\n\n  if (canAddMultiValue) {\n    return _(`validation.range_${direction}.add`, {\n      values: { [limitKey]: limitValue },\n    });\n  }\n\n  return _(`validation.range_${direction}.select`, { values: { [limitKey]: limitValue } });\n};\n\n/**\n * Get the human-readable validation error messages for a field given its current validity state.\n * @param {object} args Arguments.\n * @param {EntryValidityState} args.validity Field validity state.\n * @param {Field} args.fieldConfig Full field configuration.\n * @returns {string[]} List of translated error message strings, one per violated constraint.\n */\nexport const getFieldValidationMessages = ({ validity, fieldConfig }) => {\n  /** @type {string[]} */\n  const messages = [];\n  const { widget: fieldType = 'string' } = fieldConfig;\n  // @ts-ignore Some field types don’t have `pattern` property\n  const { pattern = /** @type {string[]} */ ([]) } = fieldConfig;\n  const isDatetime = fieldType === 'datetime';\n\n  const parsedDateTimeConf = isDatetime\n    ? parseDateTimeConfig(/** @type {DateTimeField} */ (fieldConfig))\n    : /** @type {ReturnType<typeof parseDateTimeConfig>} */ ({});\n\n  // prettier-ignore\n  const type =\n    fieldType === 'string'\n      ? /** @type {StringField} */ (fieldConfig).type ?? 'text'\n      : isDatetime\n        ? parsedDateTimeConf.type\n        : fieldType === 'number'\n          ? /** @type {'number'} */ ('number')\n          : undefined;\n\n  const { min, max } = isDatetime\n    ? parsedDateTimeConf\n    : /** @type {MinMaxValueField} */ (fieldConfig);\n\n  const canAddMultiValue =\n    fieldType === 'list' || fieldType === 'keyvalue' || isFieldMultiple(fieldConfig);\n\n  if (validity.valueMissing) {\n    messages.push(_('validation.value_missing'));\n  }\n\n  if (validity.tooShort) {\n    const { minlength } = /** @type {StringField | TextField} */ (fieldConfig);\n\n    messages.push(_('validation.too_short', { values: { min: minlength } }));\n  }\n\n  if (validity.tooLong) {\n    const { maxlength } = /** @type {StringField | TextField} */ (fieldConfig);\n\n    messages.push(_('validation.too_long', { values: { max: maxlength } }));\n  }\n\n  if (validity.rangeUnderflow) {\n    messages.push(\n      getRangeErrorMessage({\n        direction: 'underflow',\n        limitKey: 'min',\n        limitValue: min,\n        fieldType,\n        type,\n        canAddMultiValue,\n      }),\n    );\n  }\n\n  if (validity.rangeOverflow) {\n    messages.push(\n      getRangeErrorMessage({\n        direction: 'overflow',\n        limitKey: 'max',\n        limitValue: max,\n        fieldType,\n        type,\n        canAddMultiValue,\n      }),\n    );\n  }\n\n  if (validity.patternMismatch) {\n    messages.push(pattern[1]);\n  }\n\n  if (validity.typeMismatch) {\n    messages.push(_(`validation.type_mismatch.${type}`));\n  }\n\n  return messages;\n};\n","/**\n * @import { FlattenedEntryContent, LocaleValidityMap } from '$lib/types/private';\n * @import { CodeField } from '$lib/types/public';\n */\n\n/**\n * Resolve the canonical key path and current value for a code field.\n * @param {object} args Arguments.\n * @param {string} args.keyPath Field key path (may be the `.code` or `.lang` sub-key).\n * @param {any} args.value Current field value.\n * @param {FlattenedEntryContent} args.valueMap Entry values.\n * @param {CodeField} args.fieldConfig Code field configuration.\n * @param {LocaleValidityMap} args.validities Full validity map.\n * @param {string} args.locale Current locale.\n * @returns {{ skip: boolean, keyPath: string, value: any }} Whether to skip, and the resolved key\n * path and value.\n */\nexport const resolveCodeField = ({ keyPath, value, valueMap, fieldConfig, validities, locale }) => {\n  const {\n    output_code_only: outputCodeOnly = false,\n    keys: outputKeys = { code: 'code', lang: 'lang' },\n  } = fieldConfig;\n\n  const _keyPath = keyPath.match(`(.+)\\\\.(?:${outputKeys.code}|${outputKeys.lang})$`)?.[1] ?? '';\n  const resolvedKeyPath = _keyPath || keyPath;\n\n  if (resolvedKeyPath in validities[locale]) {\n    return { skip: true, keyPath: resolvedKeyPath, value };\n  }\n\n  const resolvedValue = !outputCodeOnly ? valueMap[`${resolvedKeyPath}.${outputKeys.code}`] : value;\n\n  return { skip: false, keyPath: resolvedKeyPath, value: resolvedValue };\n};\n","import { entryDraft } from '$lib/services/contents/draft';\nimport { getField } from '$lib/services/contents/entry/fields';\nimport { getPairs } from '$lib/services/contents/fields/key-value/helper';\nimport { COMPONENT_NAME_PREFIX_REGEX } from '$lib/services/contents/fields/rich-text';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import {\n * EntryDraft,\n * EntryValidityState,\n * GetFieldArgs,\n * LocaleValidityMap,\n * } from '$lib/types/private';\n */\n\nconst KEY_PATH_REGEX = /(.+?)(?:\\.[^.]*)?$/;\n\n/**\n * Validate a keyvalue field, updating `validity` in place and resolving the canonical key path.\n * @param {object} args Arguments.\n * @param {string} args.keyPath Field key path (may be a sub-key of the keyvalue parent).\n * @param {GetFieldArgs} args.getFieldArgs Base args for {@link getField}.\n * @param {EntryValidityState} args.validity Validity state to update.\n * @param {LocaleValidityMap} args.validities Full validity map.\n * @param {string} args.locale Current locale.\n * @param {boolean} args.required Whether the field is required.\n * @param {string | number} args.min Minimum allowed pairs.\n * @param {string | number} args.max Maximum allowed pairs.\n * @returns {{ skip: boolean, keyPath: string }} Whether to skip, and the resolved key path.\n */\nexport const validateKeyValueField = ({\n  keyPath,\n  getFieldArgs,\n  validity,\n  validities,\n  locale,\n  required,\n  min,\n  max,\n}) => {\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(KEY_PATH_REGEX)?.[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 { skip: true, keyPath };\n  }\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  return { skip: false, keyPath: _keyPath };\n};\n","import { escapeRegExp } from '@sveltia/utils/string';\n\nimport { getOrCreate } from '$lib/services/utils/cache';\n\n/**\n * @import { EntryValidityState, LocaleValidityMap } from '$lib/types/private';\n * @import { FieldKeyPath } from '$lib/types/public';\n */\n\n/**\n * Cache of pre-compiled list key-path regexes, keyed by field key path.\n * @type {Map<FieldKeyPath, RegExp>}\n */\nconst listKeyPathRegexCache = new Map();\n\n/**\n * Validate a list/multiple-value field, updating `validity` in place.\n * @param {object} args Arguments.\n * @param {string} args.keyPath Field key path.\n * @param {any} args.value Current field value.\n * @param {[string, any][]} args.valueEntries Entries of the value map.\n * @param {EntryValidityState} args.validity Validity state to update.\n * @param {LocaleValidityMap} args.validities Full validity map.\n * @param {string} args.locale Current locale.\n * @param {boolean} args.required Whether the field is required.\n * @param {string | number} args.min Minimum allowed items.\n * @param {string | number} args.max Maximum allowed items.\n * @returns {{ skip: boolean }} Whether the caller should skip further validation.\n */\nexport const validateListField = ({\n  keyPath,\n  value,\n  valueEntries,\n  validity,\n  validities,\n  locale,\n  required,\n  min,\n  max,\n}) => {\n  // Given that values for an array field are flatten into `field.0`, `field.1` ... `field.N`, we\n  // should validate only once against all these values\n  if (keyPath in validities[locale]) {\n    return { skip: true };\n  }\n\n  // Pre-compile and cache the regex — validateAnyField is called on every keystroke.\n  const keyPathRegex = getOrCreate(\n    listKeyPathRegexCache,\n    keyPath,\n    () => new RegExp(`^${escapeRegExp(keyPath)}\\\\.\\\\d+`),\n  );\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 like\n  // `{ field: [], field.0: 'foo', field.1: 'bar' }` in some cases. Or it can be a simple list field\n  // 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  return { skip: false };\n};\n","import { isFieldRequired } from '$lib/services/contents/entry/fields';\n\n/**\n * @import { EntryValidityState, ValidateFieldFuncArgs } from '$lib/types/private';\n * @import { NumberField } from '$lib/types/public';\n */\n\n/**\n * Validate a Number field value against the field configuration.\n * @param {ValidateFieldFuncArgs} args Arguments.\n * @returns {{ validity: EntryValidityState }} Result.\n */\nexport const validateNumberField = ({ fieldConfig, locale, value }) => {\n  const config = /** @type {NumberField} */ (fieldConfig);\n  const { value_type: valueType = 'int', min, max } = config;\n  const rangeUnderflow = typeof min === 'number' && value !== null && Number(value) < min;\n\n  const rangeOverflow =\n    !rangeUnderflow && typeof max === 'number' && value !== null && Number(value) > max;\n\n  const typeMismatch =\n    (valueType === 'int' || valueType === 'float') &&\n    isFieldRequired({ fieldConfig, locale }) &&\n    value === null;\n\n  return {\n    validity: { rangeUnderflow, rangeOverflow, typeMismatch },\n  };\n};\n","/**\n * @import { EntryValidityState, ValidateFieldFuncArgs } from '$lib/types/private';\n * @import { StringField, TextField } from '$lib/types/public';\n */\n\n/**\n * @typedef StringFieldValidationDetail\n * @property {number} count Character count.\n * @property {boolean} hasMin Whether the field has a minimum length.\n * @property {boolean} hasMax Whether the field has a maximum length.\n * @property {boolean} invalid Whether the value is invalid.\n */\n\n/**\n * Validate a String/Text field value against the field configuration.\n * @param {ValidateFieldFuncArgs} args Arguments.\n * @returns {{ validity: EntryValidityState, detail: StringFieldValidationDetail }} Result.\n */\nexport const validateStringField = ({ fieldConfig, value }) => {\n  const config = /** @type {StringField | TextField} */ (fieldConfig);\n  const { widget: fieldType = 'string', minlength, maxlength } = config;\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  let typeMismatch = false;\n\n  // Check the URL or email with native form validation\n  if (fieldType === 'string' && value) {\n    const { type = 'text', prefix, suffix } = /** @type {StringField} */ (config);\n    let trimValue = value;\n\n    // Remove the prefix/suffix before validation\n    if (prefix && trimValue.startsWith(prefix)) {\n      trimValue = trimValue.slice(prefix.length);\n    }\n\n    if (suffix && trimValue.endsWith(suffix)) {\n      trimValue = trimValue.slice(0, -suffix.length);\n    }\n\n    if (type !== 'text') {\n      const inputElement = document.createElement('input');\n\n      inputElement.type = type;\n      inputElement.value = trimValue;\n\n      ({ typeMismatch } = inputElement.validity);\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' && !typeMismatch && !trimValue.split('@')[1]?.includes('.')) {\n      typeMismatch = true;\n    }\n  }\n\n  const invalid = tooShort || tooLong || typeMismatch;\n\n  return {\n    validity: { tooShort, tooLong, typeMismatch },\n    detail: { count, hasMin, hasMax, invalid },\n  };\n};\n","import { get } from 'svelte/store';\n\nimport { entryDraft } from '$lib/services/contents/draft';\nimport { getFieldValidationMessages } from '$lib/services/contents/draft/validate/messages';\nimport {\n  getField,\n  isFieldMultiple,\n  isFieldRequired,\n  LIST_KEY_PATH_REGEX,\n} from '$lib/services/contents/entry/fields';\nimport { MEDIA_FIELD_TYPES, MIN_MAX_VALUE_FIELD_TYPES } from '$lib/services/contents/fields';\nimport { resolveCodeField } from '$lib/services/contents/fields/code/validate';\nimport { validateDateTimeField } from '$lib/services/contents/fields/date-time/validate';\nimport { validateKeyValueField } from '$lib/services/contents/fields/key-value/validate';\nimport { getListFieldInfo } from '$lib/services/contents/fields/list/helper';\nimport { validateListField } from '$lib/services/contents/fields/list/validate';\nimport { validateNumberField } from '$lib/services/contents/fields/number/validate';\nimport { COMPONENT_NAME_PREFIX_REGEX } from '$lib/services/contents/fields/rich-text';\nimport { validateStringField } from '$lib/services/contents/fields/string/validate';\nimport { getRegex } from '$lib/services/utils/regex';\n\n/**\n * @import {\n * DraftValueStoreKey,\n * EntryDraft,\n * EntryValidityState,\n * FlattenedEntryContent,\n * GetFieldArgs,\n * LocaleValidationMessagesMap,\n * LocaleValidityMap,\n * ValidateFieldFuncArgs,\n * } from '$lib/types/private';\n * @import {\n * CodeField,\n * Field,\n * FieldKeyPath,\n * ListField,\n * LocaleCode,\n * MinMaxValueField,\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 {FieldKeyPath} keyPath Field key path.\n * @property {FlattenedEntryContent} valueMap Entry values.\n * @property {any} value Field value.\n * @property {string} [componentName] Rich text editor component name.\n */\n\n/**\n * @typedef {object} ValidationResults\n * @property {boolean} valid Whether the entry draft is valid.\n * @property {LocaleValidityMap} validities Validity state for each field in each locale.\n * @property {LocaleValidationMessagesMap} validationMessages Validation messages for each field in\n * each locale.\n */\n\n/**\n * Default validity state for a field.\n * @type {EntryValidityState}\n * @internal\n */\nexport const 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\n/**\n * Map of functions to validate different field types. Each function receives the field config and\n * the current value, and returns an object with the same properties as `EntryValidityState` except\n * `valid`.\n * @type {Record<string, (args: ValidateFieldFuncArgs) => { validity: EntryValidityState }>}\n * @internal\n */\nexport const VALIDATE_FIELD_FUNCTIONS = {\n  datetime: validateDateTimeField,\n  number: validateNumberField,\n  string: validateStringField,\n  text: validateStringField,\n};\n\n/**\n * Proxy handler for validity state. Exported for testing only.\n * @internal\n */\nexport const 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 a scalar field (all non-aggregate types), updating `validity` in place.\n * @param {object} args Arguments.\n * @param {any} args.value Current field value.\n * @param {boolean} args.required Whether the field is required.\n * @param {any} args.validation Pattern validation array or undefined.\n * @param {EntryValidityState} args.validity Validity state to update.\n */\nconst validateScalarField = ({ value, required, validation, validity }) => {\n  const trimmed = typeof value === 'string' ? value.trim() : value;\n\n  if (required && (trimmed === undefined || trimmed === null || trimmed === '')) {\n    validity.valueMissing = true;\n  }\n\n  if (Array.isArray(validation)) {\n    const regex = getRegex(validation[0]);\n\n    if (regex && !regex.test(String(trimmed))) {\n      validity.patternMismatch = true;\n    }\n  }\n};\n\n/**\n * Validate each field.\n * @internal\n * @param {ValidateFieldArgs} args Arguments.\n * @returns {EntryValidityState | undefined} Field validity.\n */\nexport const validateAnyField = (args) => {\n  const { draft, locale, valueMap, componentName, validities } = args;\n  const { collection, collectionName, fileName, collectionFile, files, isIndexFile } = draft;\n  let { keyPath, value } = args;\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  // @ts-ignore Some field types don’t have `pattern` property\n  const { widget: fieldType = 'string', i18n = false, pattern: validation } = fieldConfig;\n  const multiple = isFieldMultiple(fieldConfig);\n\n  const { min = 0, max = Infinity } = /** @type {MinMaxValueField} */ (\n    MIN_MAX_VALUE_FIELD_TYPES.includes(fieldType) ? 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 rich text 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 (fieldType === 'list' || multiple) {\n    const { skip } = validateListField({\n      keyPath,\n      value,\n      valueEntries,\n      validity,\n      validities,\n      locale,\n      required,\n      min,\n      max,\n    });\n\n    if (skip) return undefined;\n  }\n\n  if (fieldType === 'object') {\n    if (required && !value) {\n      validity.valueMissing = true;\n    }\n  }\n\n  if (fieldType === 'keyvalue') {\n    const result = validateKeyValueField({\n      keyPath,\n      getFieldArgs,\n      validity,\n      validities,\n      locale,\n      required,\n      min,\n      max,\n    });\n\n    if (result.skip) return undefined;\n    keyPath = result.keyPath;\n  }\n\n  if (fieldType === 'code') {\n    const result = resolveCodeField({\n      keyPath,\n      value,\n      valueMap,\n      fieldConfig: /** @type {CodeField} */ (fieldConfig),\n      validities,\n      locale,\n    });\n\n    if (result.skip) return undefined;\n    keyPath = result.keyPath;\n    value = result.value;\n  }\n\n  if (\n    MEDIA_FIELD_TYPES.includes(fieldType) &&\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(fieldType) || multiple)) {\n    validateScalarField({ value, required, validation, validity });\n  }\n\n  const validateFieldFn = VALIDATE_FIELD_FUNCTIONS[fieldType];\n\n  if (validateFieldFn) {\n    Object.assign(validity, validateFieldFn({ fieldConfig, locale, value }).validity);\n  }\n\n  return new Proxy(validity, validityProxyHandler);\n};\n\n/**\n * Validate a single field and update the validity state.\n * @internal\n * @param {ValidateFieldArgs} args Arguments.\n * @returns {boolean} Whether the field is valid.\n */\nexport const 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 * @internal\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 */\nexport const validateList = ({ fieldConfig, validateArgs }) => {\n  const { validities, locale, keyPath } = validateArgs;\n  const valid = validities[locale][keyPath]?.valid ?? validateField(validateArgs);\n  const { widget: fieldType = 'string' } = fieldConfig;\n\n  if (fieldType === '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  if (isFieldMultiple(fieldConfig)) {\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 {ValidationResults} 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 {LocaleValidationMessagesMap} */\n  const validationMessages = {};\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      validationMessages[locale] = Object.fromEntries(\n        valueEntries.map(([keyPath]) => [keyPath, []]),\n      );\n\n      return;\n    }\n\n    const validateArgs = { draft, locale, valueMap, validities };\n\n    // Reset the state first\n    validities[locale] = {};\n    validationMessages[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 listKeyPath = keyPath.replace(LIST_KEY_PATH_REGEX, '');\n\n        const { valid: listValid, validateItems } = validateList({\n          fieldConfig,\n          validateArgs: {\n            ...validateArgs,\n            keyPath: listKeyPath,\n            value: '',\n            componentName,\n          },\n        });\n\n        if (!listValid) {\n          valid = false;\n        }\n\n        // Compute messages for the list field itself (only on first item iteration)\n        if (!(listKeyPath in validationMessages[locale])) {\n          const listValidity = validities[locale][listKeyPath];\n\n          if (listValidity) {\n            validationMessages[locale][listKeyPath] = getFieldValidationMessages({\n              validity: listValidity,\n              fieldConfig,\n            });\n          }\n        }\n\n        if (!validateItems) {\n          return;\n        }\n      }\n\n      if (!validateField({ ...validateArgs, keyPath, value, componentName })) {\n        valid = false;\n      }\n\n      const validity = validities[locale][keyPath];\n\n      if (validity) {\n        validationMessages[locale][keyPath] = getFieldValidationMessages({ validity, fieldConfig });\n      }\n    });\n  });\n\n  return { valid, validities, validationMessages };\n};\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Button, Dialog, Icon, Spacer } from '@sveltia/ui';\n  import equal from 'fast-deep-equal';\n  import { flatten, unflatten } from 'flat';\n  import { onMount, untrack } from 'svelte';\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 ObjectHeader from '$lib/components/contents/details/fields/object/object-header.svelte';\n  import { TEMPLATE_TAG_REPLACE_REGEX } from '$lib/services/common/template/constants';\n  import {\n    applyTransformations,\n    TRANSFORMATION_SPLIT_REGEX,\n  } from '$lib/services/common/transformations';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { getDefaultValues } from '$lib/services/contents/draft/defaults';\n  import { validateFields } from '$lib/services/contents/draft/validate/fields';\n\n  /**\n   * @import {\n   * DraftValueStoreKey,\n   * InternalLocaleCode,\n   * TypedFieldKeyPath,\n   * } from '$lib/types/private';\n   * @import { EditorComponentMode, Field, FieldKeyPath, RawEntryContent } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} componentName Rich text editor component name.\n   * @property {string} label Field label.\n   * @property {EditorComponentMode} [mode] Editing mode for the component. Default: `'block'`.\n   * @property {boolean} [inline] Whether the component is inline. Default: `false`.\n   * @property {boolean} [collapsed] Whether to collapse the object by default (`block` mode only).\n   * Default: `false`.\n   * @property {string} [summary] Summary template for the placeholder text (`dialog` mode only),\n   * e.g. `{{title}}`.\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    mode = 'block',\n    inline = false,\n    collapsed = false,\n    summary,\n    fields,\n    values,\n    onChange = () => undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const fieldId = $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  // Block mode only\n  /** @type {TypedFieldKeyPath} */\n  let typedKeyPath = $state('');\n  /** @type {boolean} */\n  // svelte-ignore state_referenced_locally\n  let expanded = $state(!collapsed);\n  // Dialog mode only\n  /** @type {boolean} */\n  let dialogOpen = $state(false);\n  /**\n   * Snapshot of values when dialog opens, used to restore on cancel.\n   * @type {Record<string, any> | undefined}\n   */\n  let valuesSnapshot = $state(undefined);\n  /**\n   * Whether this is a freshly inserted component (no existing values). Initialized once in\n   * `onMount` so it doesn’t change when `values` is later assigned defaults.\n   */\n  let isNewComponent = $state(false);\n\n  const keyPathPrefix = $derived(!keyPath ? '' : `${keyPath}:${fieldId}:`);\n  const typedKeyPathPrefix = $derived(!typedKeyPath ? '' : `${typedKeyPath}:${fieldId}:`);\n  /**\n   * Find the first string/text field from the fields definition.\n   * @type {Field | undefined}\n   */\n  const displayField = $derived(\n    fields.find((f) => f.widget === 'string' || f.widget === 'text' || !f.widget),\n  );\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 rich text editor component.\n   * @type {DraftValueStoreKey}\n   */\n  const valueStoreKey = 'extraValues';\n  /**\n   * Previous values for the editor component, used to detect changes (block mode only).\n   * @type {RawEntryContent | undefined}\n   */\n  let previousValues = undefined;\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  /**\n   * Open the dialog and take a snapshot of current values (dialog mode only).\n   */\n  const openDialog = () => {\n    valuesSnapshot = currentValues ? { ...currentValues } : undefined;\n    dialogOpen = true;\n  };\n\n  /**\n   * Restore values from snapshot, used on cancel (dialog mode only).\n   */\n  const restoreValues = () => {\n    if ($entryDraft && locale && keyPath && valuesSnapshot) {\n      // Clear current values\n      Object.keys($entryDraft[valueStoreKey][locale] ?? {}).forEach((key) => {\n        if (key.startsWith(keyPathPrefix)) {\n          delete $entryDraft[valueStoreKey][locale][key];\n        }\n      });\n      // Restore snapshot\n      Object.assign(\n        $entryDraft[valueStoreKey][locale],\n        Object.fromEntries(\n          Object.entries(flatten(valuesSnapshot)).map(([key, value]) => [\n            `${keyPathPrefix}${key}`,\n            value,\n          ]),\n        ),\n      );\n    }\n  };\n\n  /**\n   * Handle remove action (dialog mode only).\n   */\n  const handleRemove = () => {\n    dialogOpen = false;\n    onChange(new CustomEvent('remove'));\n  };\n\n  /**\n   * Handle OK button click. Validates fields and only closes if valid (dialog mode only).\n   */\n  const handleOk = () => {\n    const { validities: extraValidities } = validateFields('extraValues');\n\n    entryDraft.update((_draft) => {\n      if (!_draft) {\n        return _draft;\n      }\n\n      return {\n        ..._draft,\n        validities: Object.fromEntries(\n          Object.keys(_draft.validities).map((loc) => [\n            loc,\n            {\n              ..._draft.validities[loc],\n              ...extraValidities[loc],\n            },\n          ]),\n        ),\n      };\n    });\n\n    const localeValidities = extraValidities[locale] ?? {};\n\n    const thisComponentValid = !Object.entries(localeValidities).some(\n      ([key, validity]) => key.startsWith(keyPathPrefix) && !validity.valid,\n    );\n\n    if (thisComponentValid) {\n      isNewComponent = false;\n      dialogOpen = false;\n      onChange(new CustomEvent('update', { detail: currentValues }));\n      valuesSnapshot = undefined;\n    }\n  };\n\n  /**\n   * Handle Cancel button click. Restores values from snapshot and closes dialog (dialog mode only).\n   * If the component was newly inserted, remove it entirely instead of leaving it with empty state.\n   */\n  const handleCancel = () => {\n    if (isNewComponent) {\n      dialogOpen = false;\n      onChange(new CustomEvent('remove'));\n    } else {\n      restoreValues();\n      dialogOpen = false;\n      valuesSnapshot = undefined;\n    }\n  };\n\n  /**\n   * Format a summary template by replacing `{{fieldName}}` placeholders with values (dialog mode\n   * only). Supports nested properties and transformations like the CMS object field summary.\n   * @param {string} template Summary template, e.g. `{{title}} - {{linkType.url | upper}}`.\n   * @param {RawEntryContent} _values Current values (unflattened).\n   * @returns {string | null} Formatted summary, or null if template is empty or result is empty.\n   */\n  const formatSimpleSummary = (template, _values) => {\n    if (!template || !_values) {\n      return null;\n    }\n\n    const flatValues = flatten(_values);\n\n    const result = template.replaceAll(TEMPLATE_TAG_REPLACE_REGEX, (__, placeholder) => {\n      const [tag, ...transformations] = placeholder.trim().split(TRANSFORMATION_SPLIT_REGEX);\n      const fieldName = tag.replace(/^fields\\./, '');\n      let value = flatValues[fieldName];\n\n      if (value === undefined || value === null) {\n        return '';\n      }\n\n      if (transformations.length) {\n        value = applyTransformations({\n          fieldConfig: fields.find((f) => f.name === fieldName),\n          value,\n          transformations,\n          locale,\n        });\n      }\n\n      return String(value);\n    });\n\n    // Return `null` if the result (after stripping all placeholder-based content) is empty. This\n    // handles the case where all field values are empty but literal text (e.g. ' — ') remains.\n    const strippedTemplate = template.replaceAll(TEMPLATE_TAG_REPLACE_REGEX, '');\n\n    if (result !== strippedTemplate && result.trim()) {\n      return result.trim();\n    }\n\n    return null;\n  };\n\n  /**\n   * The text to display in the placeholder (dialog mode only). Priority:\n   * 1. Formatted summary template (if provided and produces non-empty result)\n   * 2. First string field’s value\n   * 3. Component label.\n   */\n  const displayText = $derived.by(() => {\n    // Fall back to the `values` prop when `currentValues` has no field data yet, e.g. on initial\n    // render or before the store has been notified with the values.\n    const hasFieldValues = fields.some((f) => currentValues?.[f.name] !== undefined);\n    const vals = hasFieldValues ? currentValues : values;\n\n    if (summary && vals) {\n      const formatted = formatSimpleSummary(summary, vals);\n\n      if (formatted) {\n        return formatted;\n      }\n    }\n\n    if (displayField && vals) {\n      const value = vals[displayField.name];\n\n      if (typeof value === 'string' && value.trim()) {\n        return value.trim();\n      }\n    }\n\n    return label;\n  });\n\n  onMount(() => {\n    window.requestAnimationFrame(() => {\n      // Get the locale and key path from the closest containers\n      const localeContainer = /** @type {HTMLElement} */ (wrapper?.closest('[data-locale]'));\n      const keyPathContainer = /** @type {HTMLElement} */ (wrapper?.closest('[data-key-path]'));\n\n      locale = /** @type {string} */ (localeContainer?.dataset.locale);\n      keyPath = /** @type {string} */ (keyPathContainer?.dataset.keyPath);\n\n      if (mode !== 'dialog') {\n        typedKeyPath = /** @type {string} */ (keyPathContainer?.dataset.typedKeyPath);\n      }\n\n      // Capture whether this is a newly inserted component (before $effect assigns defaults)\n      isNewComponent = !values;\n\n      // Auto-open dialog for freshly inserted components (dialog mode only)\n      if (mode === 'dialog' && isNewComponent) {\n        openDialog();\n      }\n    });\n\n    return () => {\n      // Remove the values and validities from the draft when the component is unmounted\n      if ($entryDraft) {\n        Object.keys($entryDraft[valueStoreKey][locale] ?? {}).forEach((key) => {\n          if (key.startsWith(keyPathPrefix)) {\n            delete $entryDraft[valueStoreKey][locale][key];\n          }\n        });\n\n        Object.keys($entryDraft.validities[locale] ?? {}).forEach((key) => {\n          if (key.startsWith(keyPathPrefix)) {\n            delete $entryDraft.validities[locale][key];\n          }\n        });\n      }\n    };\n  });\n\n  $effect(() => {\n    void [values, locale, keyPath];\n\n    untrack(() => {\n      if ($entryDraft && locale && keyPath) {\n        const { defaultLocale } = $entryDraft;\n\n        values ??= unflatten(getDefaultValues({ fields, locale, defaultLocale })) ?? {};\n        values.__sc_component_name = componentName;\n\n        if (!equal(values, currentValues)) {\n          const newEntries = Object.fromEntries(\n            Object.entries(flatten(values)).map(([key, value]) => [\n              `${keyPathPrefix}${key}`,\n              value,\n            ]),\n          );\n\n          // Use `entryDraft.update()` instead of `Object.assign()` directly so that the store\n          // notifies subscribers and `currentValues` re-derives immediately.\n          entryDraft.update((_draft) => {\n            if (!_draft) {\n              return _draft;\n            }\n\n            Object.assign(_draft[valueStoreKey][locale], newEntries);\n\n            return _draft;\n          });\n        }\n      }\n    });\n  });\n\n  // Block mode: forward onChange whenever currentValues change\n  $effect(() => {\n    if (mode === 'dialog') return;\n\n    void [currentValues];\n\n    untrack(() => {\n      if (!equal(previousValues, currentValues)) {\n        onChange(new CustomEvent('update', { detail: currentValues }));\n        previousValues = currentValues;\n      }\n    });\n  });\n</script>\n\n{#if mode === 'dialog'}\n  <!-- Dialog mode: compact placeholder that opens a dialog on click -->\n  <span\n    role=\"button\"\n    class=\"component {inline ? 'inline' : 'block'} placeholder\"\n    bind:this={wrapper}\n    contenteditable=\"false\"\n    tabindex=\"0\"\n    aria-label={label}\n    title={label}\n    data-key-path-prefix={keyPathPrefix}\n    data-component-name={componentName}\n    onclick={() => {\n      openDialog();\n    }}\n    onkeydown={(event) => {\n      if (event.key === 'Enter') {\n        event.preventDefault();\n        openDialog();\n      }\n\n      if (event.key === 'Backspace') {\n        event.preventDefault();\n        onChange(new CustomEvent('remove'));\n      }\n    }}\n  >\n    {displayText}\n  </span>\n\n  <Dialog title={label} bind:open={dialogOpen} size=\"large\" showOk={false} showCancel={false}>\n    <div role=\"none\" class=\"fields\">\n      {#if locale && keyPath}\n        {#each fields as fieldConfig (fieldConfig.name)}\n          <FieldEditor\n            {locale}\n            keyPath=\"{keyPathPrefix}{fieldConfig.name}\"\n            typedKeyPath=\"{keyPathPrefix}{fieldConfig.name}\"\n            {fieldConfig}\n            context=\"rich-text-editor-component\"\n            {valueStoreKey}\n          />\n        {/each}\n      {/if}\n    </div>\n    {#snippet footer()}\n      <Button\n        variant=\"secondary\"\n        label={_('remove')}\n        onclick={() => {\n          handleRemove();\n        }}\n      />\n      <Spacer flex={true} />\n      <Button\n        variant=\"primary\"\n        label={_(isNewComponent ? 'insert' : 'update')}\n        onclick={() => {\n          handleOk();\n        }}\n      />\n      <Button\n        variant=\"secondary\"\n        label={_('cancel')}\n        onclick={() => {\n          handleCancel();\n        }}\n      />\n    {/snippet}\n  </Dialog>\n{:else}\n  <!-- Block mode: expandable block with ObjectHeader -->\n  <!-- svelte-ignore a11y_no_noninteractive_tabindex -->\n  <div\n    role=\"group\"\n    class=\"component {inline ? 'inline' : 'block'} wrapper\"\n    bind:this={wrapper}\n    contenteditable=\"false\"\n    tabindex=\"0\"\n    aria-label={label}\n    data-key-path-prefix={keyPathPrefix}\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    <ObjectHeader {label} controlId=\"object-{fieldId}-item-list\" bind:expanded>\n      {#snippet endContent()}\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      {/snippet}\n    </ObjectHeader>\n    <div role=\"none\" class=\"item-list\" id=\"object-{fieldId}-item-list\">\n      {#if locale && keyPath && expanded}\n        {#each fields as fieldConfig (fieldConfig.name)}\n          <VisibilityObserver>\n            <FieldEditor\n              {locale}\n              keyPath=\"{keyPathPrefix}{fieldConfig.name}\"\n              typedKeyPath=\"{typedKeyPathPrefix}{fieldConfig.name}\"\n              {fieldConfig}\n              context=\"rich-text-editor-component\"\n              {valueStoreKey}\n            />\n          </VisibilityObserver>\n        {/each}\n      {/if}\n    </div>\n  </div>\n{/if}\n\n<style>\n  .component {\n    &.block {\n      display: block;\n\n      &:not(:first-child) {\n        margin-top: var(--sui-paragraph-margin);\n      }\n\n      &:not(:last-child) {\n        margin-bottom: var(--sui-paragraph-margin);\n      }\n    }\n\n    &.inline {\n      display: inline-block;\n    }\n  }\n\n  .wrapper {\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    /* 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-field-type] {\n            border-width: 0;\n          }\n\n          [data-field-type='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            .field-wrapper {\n              flex: auto;\n            }\n          }\n        }\n\n        button {\n          margin: var(--sui-focus-ring-width);\n        }\n      }\n    }\n  }\n\n  .placeholder {\n    border: dashed 1px currentColor;\n    border-color: hsl(from currentColor h s l / 0.5);\n    border-radius: 2px;\n    padding-inline: 0.4em;\n    cursor: pointer;\n    -webkit-user-select: none;\n    user-select: none;\n\n    &:hover {\n      border-color: currentColor;\n    }\n\n    &:focus {\n      outline: 2px solid var(--sui-primary-accent-color-translucent);\n      outline-offset: 1px;\n    }\n\n    &.block {\n      width: fit-content;\n    }\n\n    &.inline:not(:first-child) {\n      margin-inline-start: var(--sui-paragraph-margin);\n    }\n  }\n\n  .fields {\n    display: flex;\n    flex-direction: column;\n    gap: 16px;\n  }\n</style>\n","import { DecoratorNode, getNearestEditorFromDOMNode } from 'lexical';\nimport { flushSync, mount, tick, unmount } from 'svelte';\n\nimport EditorComponent from '$lib/components/contents/details/fields/rich-text/editor-component.svelte';\nimport {\n  isMultiLinePattern,\n  normalizeProps,\n} from '$lib/services/contents/fields/rich-text/components/utils';\n\n/**\n * @import {\n * DOMConversion,\n * DOMConversionMap,\n * DOMConversionOutput,\n * DOMExportOutput,\n * LexicalEditor,\n * NodeKey,\n * SerializedLexicalNode,\n * } from 'lexical';\n * @import { EditorComponentDefinition } from '$lib/types/public';\n */\n\nconst TAG_NAME_REGEX = /^<(?<tagName>[a-z]+)/i;\n\n/**\n * Dynamically create a custom {@link DecoratorNode} class.\n * @param {EditorComponentDefinition} componentDef Component definition passed with the\n * `CMS.registerEditorComponent()` API.\n * @returns {any} Custom node class.\n */\nexport const createCustomNodeClass = (componentDef) => {\n  const {\n    id: componentName,\n    label,\n    collapsed,\n    mode,\n    summary,\n    fields,\n    pattern,\n    toBlock,\n    toPreview,\n  } = componentDef;\n\n  const inline = !isMultiLinePattern(pattern);\n  const preview = toPreview?.({});\n  const block = toBlock({});\n\n  const tagName =\n    typeof preview === 'string'\n      ? (preview.trim().match(TAG_NAME_REGEX)?.groups?.tagName ??\n        (typeof block === 'string'\n          ? block.trim().match(TAG_NAME_REGEX)?.groups?.tagName\n          : /* v8 ignore next */ undefined))\n      : undefined;\n\n  /**\n   * Genetic custom node.\n   * @augments {DecoratorNode<null>}\n   * @see https://lexical.dev/docs/concepts/nodes#extending-decoratornode\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 inline;\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      return new CustomNode().updateFromJSON(serializedNode);\n    }\n\n    /**\n     * Export the node as JSON.\n     * @returns {SerializedLexicalNode} Output.\n     */\n    exportJSON() {\n      return {\n        ...normalizeProps(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 {{ getElement: () => HTMLElement | undefined }} */\n      let component;\n      let destroyed = false;\n\n      /**\n       * Unmount the component exactly once, regardless of how many times cleanup is triggered.\n       */\n      const cleanup = () => {\n        /* v8 ignore next */\n        if (destroyed) {\n          return;\n        }\n\n        destroyed = true;\n        unmount(component);\n      };\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        // Save the currently focused element and selection to restore after the update.\n        // This prevents the parent Lexical editor from stealing focus when updating node props.\n        const { activeElement } = document;\n        const activeEl = /** @type {HTMLElement | null} */ (activeElement);\n\n        const selection = activeEl?.matches('[contenteditable=\"true\"]')\n          ? window.getSelection()\n          : null;\n\n        const selectionRange =\n          selection && selection.rangeCount > 0 ? selection.getRangeAt(0).cloneRange() : null;\n\n        editor?.update(\n          () => {\n            if (type === 'update') {\n              try {\n                this.getWritable().__props = detail;\n              } catch {\n                //\n              }\n            }\n\n            if (type === 'remove') {\n              cleanup();\n              this.remove();\n            }\n          },\n          {\n            discrete: true,\n            /**\n             * Restore focus and selection after the Lexical update completes.\n             */\n            onUpdate: () => {\n              if (activeEl && document.body.contains(activeEl)) {\n                activeEl.focus();\n\n                if (selectionRange && selection) {\n                  selection.removeAllRanges();\n                  selection.addRange(selectionRange);\n                }\n              }\n            },\n          },\n        );\n      };\n\n      component = mount(EditorComponent, {\n        target: document.createElement('div'),\n        props: {\n          componentName,\n          label,\n          collapsed,\n          mode,\n          inline,\n          summary,\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        // Clean up when the parent field is unmounted (e.g. navigating away).\n        wrapper.closest('.field')?.addEventListener('Unmount', cleanup, { once: true });\n\n        // Clean up when the Lexical node is removed directly (e.g. keyboard Delete, undo) without\n        // going through onChange. Lexical has no destroyDOM() hook, so watch the DOM.\n        const { parentElement } = wrapper;\n\n        /* v8 ignore next */\n        if (parentElement) {\n          const observer = new MutationObserver(() => {\n            if (!wrapper.isConnected) {\n              cleanup();\n              observer.disconnect();\n            }\n          });\n\n          observer.observe(parentElement, { childList: true });\n        }\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            node: new CustomNode(\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                  node: new CustomNode({ 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  return CustomNode;\n};\n","import {\n  isMultiLinePattern,\n  normalizeProps,\n} from '$lib/services/contents/fields/rich-text/components/utils';\n\n/**\n * @import { LexicalNode } from 'lexical';\n * @import {\n * MultilineElementTransformer,\n * TextMatchTransformer,\n * Transformer,\n * } from '@lexical/markdown';\n * @import { EditorComponentDefinition } from '$lib/types/public';\n */\n\n/**\n * Create a singleline/inline or multiline transformer for the given component definition.\n * @param {object} args Arguments.\n * @param {EditorComponentDefinition} args.componentDef Component definition passed with the\n * `CMS.registerEditorComponent()` API.\n * @param {any} args.CustomNode Lexical node class implementation.\n * @returns {Transformer} Transformer.\n * @see https://decapcms.org/docs/custom-widgets/#registereditorcomponent\n * @see https://sveltiacms.app/en/docs/api/editor-components\n * @see https://lexical.dev/docs/packages/lexical-markdown#transformers\n * @see https://lexical.dev/docs/api/modules/lexical_markdown\n * @see https://github.com/sveltia/sveltia-cms/issues/410\n * @see https://github.com/decaporg/decap-cms/issues/1044\n * @see https://github.com/facebook/lexical/blob/main/packages/lexical-playground/src/plugins/MarkdownTransformers/index.ts#L75-L97\n * @see https://github.com/facebook/lexical/blob/main/packages/lexical-markdown/src/MarkdownTransformers.ts#L81-L148\n * @see https://github.com/facebook/lexical/blob/main/packages/lexical-markdown/src/MarkdownTransformers.ts#L376-L457\n * @see https://github.com/facebook/lexical/blob/main/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts#L86-L115\n * @see https://github.com/facebook/lexical/blob/main/packages/lexical-markdown/src/__tests__/unit/LexicalMarkdown.test.ts#L117-L224\n */\nexport const createTransformer = ({ componentDef, CustomNode }) => {\n  const { id: componentName, pattern, fromBlock, toBlock } = componentDef;\n  const nonGlobalPattern = new RegExp(pattern.source, pattern.flags.replace('g', ''));\n  /**\n   * Get node properties from the given regex match array.\n   * @param {RegExpMatchArray} matchArray Match array.\n   * @returns {Record<string, any>} Properties.\n   */\n  const getProps = (matchArray) => fromBlock?.(matchArray) ?? matchArray.groups ?? {};\n  /**\n   * Whether the given node is an instance of {@link CustomNode}.\n   * @param {LexicalNode} node Node.\n   * @returns {boolean} Result.\n   */\n  const isCustomNode = (node) => node instanceof CustomNode && node.getType() === componentName;\n\n  /**\n   * Convert the given node to Markdown.\n   * @param {LexicalNode} node Node.\n   * @returns {string | null} Markdown string.\n   */\n  const exportNode = (node) => {\n    if (isCustomNode(node)) {\n      return toBlock(normalizeProps(/** @type {any} */ (node).__props ?? {}));\n    }\n\n    return null;\n  };\n\n  if (isMultiLinePattern(pattern)) {\n    return /** @type {MultilineElementTransformer} */ ({\n      /* eslint-disable jsdoc/require-jsdoc */\n      type: 'multiline-element',\n      dependencies: [CustomNode],\n      // Match every line to check for a multiline pattern. It’s not great for performance, but\n      // (part of) the developer-defined `pattern` cannot be used because it can be complex\n      regExpStart: /^./,\n      regExpEnd: { optional: true, regExp: /.$/ },\n      handleImportAfterStartMatch: ({ lines, rootNode, startLineIndex }) => {\n        const fullString = lines.slice(startLineIndex).join('\\n');\n        const [matchString] = fullString.match(nonGlobalPattern) ?? [];\n\n        if (!matchString || !fullString.startsWith(matchString)) {\n          return null;\n        }\n\n        const matchArray = matchString.match(nonGlobalPattern);\n        const endLineIndex = startLineIndex + matchString.split('\\n').length - 1;\n\n        if (!matchArray) {\n          // this should not happen\n          return [false, endLineIndex];\n        }\n\n        rootNode.append(new CustomNode(getProps(matchArray)));\n\n        return [true, endLineIndex];\n      },\n      replace: () => undefined,\n      export: exportNode,\n      /* eslint-enable jsdoc/require-jsdoc */\n    });\n  }\n\n  return /** @type {TextMatchTransformer} */ ({\n    /* eslint-disable jsdoc/require-jsdoc */\n    type: 'text-match',\n    dependencies: [CustomNode],\n    importRegExp: nonGlobalPattern,\n    regExp: nonGlobalPattern,\n    replace: (textNode, matchArray) => {\n      textNode.replace(new CustomNode(getProps(matchArray)));\n    },\n    export: exportNode,\n    /* eslint-enable jsdoc/require-jsdoc */\n  });\n};\n","import { createCustomNodeClass } from '$lib/services/contents/fields/rich-text/components/custom-node';\nimport { createTransformer } from '$lib/services/contents/fields/rich-text/components/transformers';\n\n/**\n * @import { LexicalNode } from 'lexical';\n * @import { Transformer } from '@lexical/markdown';\n * @import { EditorComponentDefinition } from '$lib/types/public';\n */\n\n/**\n * Custom Lexical node features.\n * @typedef {object} LexicalNodeFeatures\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 * 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, LexicalNodeFeatures>}\n */\nexport const featureCacheMap = new Map();\n\n/**\n * Dynamically create a custom {@link DecoratorNode} class and related features for the Lexical\n * editor to enable support for rich text editor components.\n * @param {EditorComponentDefinition} componentDef Component definition passed with the\n * `CMS.registerEditorComponent()` API.\n * @returns {LexicalNodeFeatures} The {@link CustomNode} class, a method to create a new node, and\n * the transformer definition.\n * @see https://decapcms.org/docs/custom-widgets/#registereditorcomponent\n * @see https://sveltiacms.app/en/docs/api/editor-components\n */\nexport const createLexicalNodeFeatures = (componentDef) => {\n  const CustomNode = createCustomNodeClass(componentDef);\n\n  return {\n    node: CustomNode,\n    // eslint-disable-next-line jsdoc/require-jsdoc\n    createNode: (props) => new CustomNode(props),\n    transformer: createTransformer({ componentDef, CustomNode }),\n  };\n};\n\n/**\n * Text editor component implementation.\n */\nexport class EditorComponent {\n  /**\n   * Create an `EditorComponent` instance.\n   * @param {EditorComponentDefinition} componentDef Component definition passed with the\n   * `CMS.registerEditorComponent()` API.\n   */\n  constructor(componentDef) {\n    const { id } = componentDef;\n    const cache = featureCacheMap.get(id);\n    const features = cache ?? createLexicalNodeFeatures(componentDef);\n\n    if (!cache) {\n      featureCacheMap.set(id, features);\n    }\n\n    Object.assign(this, { ...componentDef, ...features });\n  }\n}\n","<!--\n  @component\n  Implement the editor for a Markdown/RichText field.\n  @see https://decapcms.org/docs/widgets/#Markdown\n  @see https://sveltiacms.app/en/docs/fields/richtext\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 { getContext, untrack } from 'svelte';\n\n  import { cmsConfig } from '$lib/services/config';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { getAssetLibraryFolderMap } from '$lib/services/contents/fields/file/helper';\n  import { processResource } from '$lib/services/contents/fields/file/process';\n  import {\n    BUILTIN_COMPONENTS,\n    BUTTON_NAME_MAP,\n    COMPONENT_NAME_PREFIX_REGEX,\n    DEFAULT_BUTTONS,\n    DEFAULT_MODES,\n    NODE_NAME_MAP,\n  } from '$lib/services/contents/fields/rich-text';\n  import { EditorComponent } from '$lib/services/contents/fields/rich-text/components';\n  import {\n    customComponentRegistry,\n    getComponentDef,\n  } from '$lib/services/contents/fields/rich-text/components/definitions';\n  import { getCanonicalLocale, getDirection } from '$lib/services/contents/i18n';\n  import { getDefaultMediaLibraryOptions } from '$lib/services/integrations/media-libraries/default';\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 { FieldEditorContext, FieldEditorProps } from '$lib/types/private';\n   * @import { EditorComponentDefinition, ImageField, 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  const DATA_URL_REGEX = /^data:(?<type>image\\/.+?);base64,.+/;\n\n  const defaultConfig = $cmsConfig?.field_defaults?.richtext ?? {};\n  /** @type {FieldEditorContext} */\n  const { fieldContext = undefined } = getContext('field-editor') ?? {};\n  const inEditorComponent = fieldContext === 'rich-text-editor-component';\n\n  /** @type {FieldEditorProps & 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  /** @type {HTMLElement | undefined} */\n  let wrapper = $state();\n  let inputValue = $state('');\n\n  let cleanupTimeout = 0;\n\n  const {\n    // Field type-specific options\n    modes: _modes = defaultConfig.modes ?? [...DEFAULT_MODES],\n    buttons: _buttons = defaultConfig.buttons ?? [...DEFAULT_BUTTONS],\n    editor_components: _editorComponents = defaultConfig.editor_components ??\n      // Include all built-in and custom components by default\n      [...BUILTIN_COMPONENTS, ...customComponentRegistry.keys()],\n    linked_images: linkedImagesEnabled = defaultConfig.linked_images ?? true,\n    minimal = defaultConfig.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.by(() => {\n    // Disable nested components\n    if (inEditorComponent) {\n      return [];\n    }\n\n    return _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(\n    components.find(({ id }) => id === 'image' || id === 'linked-image'),\n  );\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 = async ({ target, images }) => {\n    const outer = /** @type {HTMLElement} */ (target)?.closest('div');\n    const editor = getNearestEditorFromDOMNode(outer);\n\n    if (!$entryDraft || !imageComponent || !outer?.matches('.lexical-root') || !editor) {\n      return;\n    }\n\n    const draft = $entryDraft;\n    const { collectionName, fileName, isIndexFile } = draft;\n\n    const srcFieldConfig =\n      /** @type {import('@sveltia/ui').TextEditorComponent & EditorComponentDefinition} */ (\n        imageComponent\n      ).fields?.find(({ name }) => name === 'src');\n\n    const { config: libraryConfig } = getDefaultMediaLibraryOptions({\n      fieldConfig: /** @type {ImageField} */ (srcFieldConfig),\n    });\n\n    const folderMap = getAssetLibraryFolderMap({ collectionName, fileName, isIndexFile });\n    const folder = Object.values(folderMap).find(({ enabled }) => enabled)?.folder;\n\n    // eslint-disable-next-line no-restricted-syntax\n    for (const { file, src: externalSrc, alt = '' } of images) {\n      let src = externalSrc;\n\n      if (file) {\n        // eslint-disable-next-line no-await-in-loop\n        const { value } = await processResource({\n          draft,\n          resource: { file, folder },\n          libraryConfig,\n        });\n\n        src = value;\n      }\n\n      if (!src) {\n        // eslint-disable-next-line no-continue\n        continue;\n      }\n\n      const _src = src;\n\n      editor.update(() => {\n        insertNodes([imageComponent.createNode({ src: _src, alt }), createParagraphNode()]);\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      await 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_URL_REGEX);\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      await insertImages({ target, images });\n    }\n  };\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    // Skip cleanup when used as a nested component editor\n    if (!$entryDraft || inEditorComponent) {\n      return;\n    }\n\n    window.clearTimeout(cleanupTimeout);\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    cleanupTimeout = window.setTimeout(() => {\n      Object.keys($entryDraft?.extraValues[locale] ?? {}).forEach((key) => {\n        const [prefix] = key.match(COMPONENT_NAME_PREFIX_REGEX) ?? [];\n\n        if (\n          prefix?.startsWith(`${keyPath}:`) &&\n          !wrapper?.querySelector(`[data-key-path-prefix=\"${prefix}\"]`)\n        ) {\n          delete $entryDraft.extraValues[locale][key];\n        }\n      });\n    }, 500);\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={getCanonicalLocale(locale)}\n        dir={getDirection(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>\n  .wrapper {\n    --sui-paragraph-margin: 20px;\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 * @license React\n * scheduler.production.js\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\"use strict\";\nfunction push(heap, node) {\n  var index = heap.length;\n  heap.push(node);\n  a: for (; 0 < index; ) {\n    var parentIndex = (index - 1) >>> 1,\n      parent = heap[parentIndex];\n    if (0 < compare(parent, node))\n      (heap[parentIndex] = node), (heap[index] = parent), (index = parentIndex);\n    else break a;\n  }\n}\nfunction peek(heap) {\n  return 0 === heap.length ? null : heap[0];\n}\nfunction pop(heap) {\n  if (0 === heap.length) return null;\n  var first = heap[0],\n    last = heap.pop();\n  if (last !== first) {\n    heap[0] = last;\n    a: for (\n      var index = 0, length = heap.length, halfLength = length >>> 1;\n      index < halfLength;\n\n    ) {\n      var leftIndex = 2 * (index + 1) - 1,\n        left = heap[leftIndex],\n        rightIndex = leftIndex + 1,\n        right = heap[rightIndex];\n      if (0 > compare(left, last))\n        rightIndex < length && 0 > compare(right, left)\n          ? ((heap[index] = right),\n            (heap[rightIndex] = last),\n            (index = rightIndex))\n          : ((heap[index] = left),\n            (heap[leftIndex] = last),\n            (index = leftIndex));\n      else if (rightIndex < length && 0 > compare(right, last))\n        (heap[index] = right), (heap[rightIndex] = last), (index = rightIndex);\n      else break a;\n    }\n  }\n  return first;\n}\nfunction compare(a, b) {\n  var diff = a.sortIndex - b.sortIndex;\n  return 0 !== diff ? diff : a.id - b.id;\n}\nexports.unstable_now = void 0;\nif (\"object\" === typeof performance && \"function\" === typeof performance.now) {\n  var localPerformance = performance;\n  exports.unstable_now = function () {\n    return localPerformance.now();\n  };\n} else {\n  var localDate = Date,\n    initialTime = localDate.now();\n  exports.unstable_now = function () {\n    return localDate.now() - initialTime;\n  };\n}\nvar taskQueue = [],\n  timerQueue = [],\n  taskIdCounter = 1,\n  currentTask = null,\n  currentPriorityLevel = 3,\n  isPerformingWork = !1,\n  isHostCallbackScheduled = !1,\n  isHostTimeoutScheduled = !1,\n  needsPaint = !1,\n  localSetTimeout = \"function\" === typeof setTimeout ? setTimeout : null,\n  localClearTimeout = \"function\" === typeof clearTimeout ? clearTimeout : null,\n  localSetImmediate = \"undefined\" !== typeof setImmediate ? setImmediate : null;\nfunction advanceTimers(currentTime) {\n  for (var timer = peek(timerQueue); null !== timer; ) {\n    if (null === timer.callback) pop(timerQueue);\n    else if (timer.startTime <= currentTime)\n      pop(timerQueue),\n        (timer.sortIndex = timer.expirationTime),\n        push(taskQueue, timer);\n    else break;\n    timer = peek(timerQueue);\n  }\n}\nfunction handleTimeout(currentTime) {\n  isHostTimeoutScheduled = !1;\n  advanceTimers(currentTime);\n  if (!isHostCallbackScheduled)\n    if (null !== peek(taskQueue))\n      (isHostCallbackScheduled = !0),\n        isMessageLoopRunning ||\n          ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());\n    else {\n      var firstTimer = peek(timerQueue);\n      null !== firstTimer &&\n        requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n    }\n}\nvar isMessageLoopRunning = !1,\n  taskTimeoutID = -1,\n  frameInterval = 5,\n  startTime = -1;\nfunction shouldYieldToHost() {\n  return needsPaint\n    ? !0\n    : exports.unstable_now() - startTime < frameInterval\n      ? !1\n      : !0;\n}\nfunction performWorkUntilDeadline() {\n  needsPaint = !1;\n  if (isMessageLoopRunning) {\n    var currentTime = exports.unstable_now();\n    startTime = currentTime;\n    var hasMoreWork = !0;\n    try {\n      a: {\n        isHostCallbackScheduled = !1;\n        isHostTimeoutScheduled &&\n          ((isHostTimeoutScheduled = !1),\n          localClearTimeout(taskTimeoutID),\n          (taskTimeoutID = -1));\n        isPerformingWork = !0;\n        var previousPriorityLevel = currentPriorityLevel;\n        try {\n          b: {\n            advanceTimers(currentTime);\n            for (\n              currentTask = peek(taskQueue);\n              null !== currentTask &&\n              !(\n                currentTask.expirationTime > currentTime && shouldYieldToHost()\n              );\n\n            ) {\n              var callback = currentTask.callback;\n              if (\"function\" === typeof callback) {\n                currentTask.callback = null;\n                currentPriorityLevel = currentTask.priorityLevel;\n                var continuationCallback = callback(\n                  currentTask.expirationTime <= currentTime\n                );\n                currentTime = exports.unstable_now();\n                if (\"function\" === typeof continuationCallback) {\n                  currentTask.callback = continuationCallback;\n                  advanceTimers(currentTime);\n                  hasMoreWork = !0;\n                  break b;\n                }\n                currentTask === peek(taskQueue) && pop(taskQueue);\n                advanceTimers(currentTime);\n              } else pop(taskQueue);\n              currentTask = peek(taskQueue);\n            }\n            if (null !== currentTask) hasMoreWork = !0;\n            else {\n              var firstTimer = peek(timerQueue);\n              null !== firstTimer &&\n                requestHostTimeout(\n                  handleTimeout,\n                  firstTimer.startTime - currentTime\n                );\n              hasMoreWork = !1;\n            }\n          }\n          break a;\n        } finally {\n          (currentTask = null),\n            (currentPriorityLevel = previousPriorityLevel),\n            (isPerformingWork = !1);\n        }\n        hasMoreWork = void 0;\n      }\n    } finally {\n      hasMoreWork\n        ? schedulePerformWorkUntilDeadline()\n        : (isMessageLoopRunning = !1);\n    }\n  }\n}\nvar schedulePerformWorkUntilDeadline;\nif (\"function\" === typeof localSetImmediate)\n  schedulePerformWorkUntilDeadline = function () {\n    localSetImmediate(performWorkUntilDeadline);\n  };\nelse if (\"undefined\" !== typeof MessageChannel) {\n  var channel = new MessageChannel(),\n    port = channel.port2;\n  channel.port1.onmessage = performWorkUntilDeadline;\n  schedulePerformWorkUntilDeadline = function () {\n    port.postMessage(null);\n  };\n} else\n  schedulePerformWorkUntilDeadline = function () {\n    localSetTimeout(performWorkUntilDeadline, 0);\n  };\nfunction requestHostTimeout(callback, ms) {\n  taskTimeoutID = localSetTimeout(function () {\n    callback(exports.unstable_now());\n  }, ms);\n}\nexports.unstable_IdlePriority = 5;\nexports.unstable_ImmediatePriority = 1;\nexports.unstable_LowPriority = 4;\nexports.unstable_NormalPriority = 3;\nexports.unstable_Profiling = null;\nexports.unstable_UserBlockingPriority = 2;\nexports.unstable_cancelCallback = function (task) {\n  task.callback = null;\n};\nexports.unstable_forceFrameRate = function (fps) {\n  0 > fps || 125 < fps\n    ? console.error(\n        \"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"\n      )\n    : (frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5);\n};\nexports.unstable_getCurrentPriorityLevel = function () {\n  return currentPriorityLevel;\n};\nexports.unstable_next = function (eventHandler) {\n  switch (currentPriorityLevel) {\n    case 1:\n    case 2:\n    case 3:\n      var priorityLevel = 3;\n      break;\n    default:\n      priorityLevel = currentPriorityLevel;\n  }\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n};\nexports.unstable_requestPaint = function () {\n  needsPaint = !0;\n};\nexports.unstable_runWithPriority = function (priorityLevel, eventHandler) {\n  switch (priorityLevel) {\n    case 1:\n    case 2:\n    case 3:\n    case 4:\n    case 5:\n      break;\n    default:\n      priorityLevel = 3;\n  }\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n};\nexports.unstable_scheduleCallback = function (\n  priorityLevel,\n  callback,\n  options\n) {\n  var currentTime = exports.unstable_now();\n  \"object\" === typeof options && null !== options\n    ? ((options = options.delay),\n      (options =\n        \"number\" === typeof options && 0 < options\n          ? currentTime + options\n          : currentTime))\n    : (options = currentTime);\n  switch (priorityLevel) {\n    case 1:\n      var timeout = -1;\n      break;\n    case 2:\n      timeout = 250;\n      break;\n    case 5:\n      timeout = 1073741823;\n      break;\n    case 4:\n      timeout = 1e4;\n      break;\n    default:\n      timeout = 5e3;\n  }\n  timeout = options + timeout;\n  priorityLevel = {\n    id: taskIdCounter++,\n    callback: callback,\n    priorityLevel: priorityLevel,\n    startTime: options,\n    expirationTime: timeout,\n    sortIndex: -1\n  };\n  options > currentTime\n    ? ((priorityLevel.sortIndex = options),\n      push(timerQueue, priorityLevel),\n      null === peek(taskQueue) &&\n        priorityLevel === peek(timerQueue) &&\n        (isHostTimeoutScheduled\n          ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))\n          : (isHostTimeoutScheduled = !0),\n        requestHostTimeout(handleTimeout, options - currentTime)))\n    : ((priorityLevel.sortIndex = timeout),\n      push(taskQueue, priorityLevel),\n      isHostCallbackScheduled ||\n        isPerformingWork ||\n        ((isHostCallbackScheduled = !0),\n        isMessageLoopRunning ||\n          ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline())));\n  return priorityLevel;\n};\nexports.unstable_shouldYield = shouldYieldToHost;\nexports.unstable_wrapCallback = function (callback) {\n  var parentPriorityLevel = currentPriorityLevel;\n  return function () {\n    var previousPriorityLevel = currentPriorityLevel;\n    currentPriorityLevel = parentPriorityLevel;\n    try {\n      return callback.apply(this, arguments);\n    } finally {\n      currentPriorityLevel = previousPriorityLevel;\n    }\n  };\n};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/scheduler.production.js');\n} else {\n  module.exports = require('./cjs/scheduler.development.js');\n}\n","/**\n * @license React\n * react-dom.production.js\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\"use strict\";\nvar React = require(\"react\");\nfunction formatProdErrorMessage(code) {\n  var url = \"https://react.dev/errors/\" + code;\n  if (1 < arguments.length) {\n    url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n    for (var i = 2; i < arguments.length; i++)\n      url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n  }\n  return (\n    \"Minified React error #\" +\n    code +\n    \"; visit \" +\n    url +\n    \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n  );\n}\nfunction noop() {}\nvar Internals = {\n    d: {\n      f: noop,\n      r: function () {\n        throw Error(formatProdErrorMessage(522));\n      },\n      D: noop,\n      C: noop,\n      L: noop,\n      m: noop,\n      X: noop,\n      S: noop,\n      M: noop\n    },\n    p: 0,\n    findDOMNode: null\n  },\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\");\nfunction createPortal$1(children, containerInfo, implementation) {\n  var key =\n    3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n  return {\n    $$typeof: REACT_PORTAL_TYPE,\n    key: null == key ? null : \"\" + key,\n    children: children,\n    containerInfo: containerInfo,\n    implementation: implementation\n  };\n}\nvar ReactSharedInternals =\n  React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\nfunction getCrossOriginStringAs(as, input) {\n  if (\"font\" === as) return \"\";\n  if (\"string\" === typeof input)\n    return \"use-credentials\" === input ? input : \"\";\n}\nexports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n  Internals;\nexports.createPortal = function (children, container) {\n  var key =\n    2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n  if (\n    !container ||\n    (1 !== container.nodeType &&\n      9 !== container.nodeType &&\n      11 !== container.nodeType)\n  )\n    throw Error(formatProdErrorMessage(299));\n  return createPortal$1(children, container, null, key);\n};\nexports.flushSync = function (fn) {\n  var previousTransition = ReactSharedInternals.T,\n    previousUpdatePriority = Internals.p;\n  try {\n    if (((ReactSharedInternals.T = null), (Internals.p = 2), fn)) return fn();\n  } finally {\n    (ReactSharedInternals.T = previousTransition),\n      (Internals.p = previousUpdatePriority),\n      Internals.d.f();\n  }\n};\nexports.preconnect = function (href, options) {\n  \"string\" === typeof href &&\n    (options\n      ? ((options = options.crossOrigin),\n        (options =\n          \"string\" === typeof options\n            ? \"use-credentials\" === options\n              ? options\n              : \"\"\n            : void 0))\n      : (options = null),\n    Internals.d.C(href, options));\n};\nexports.prefetchDNS = function (href) {\n  \"string\" === typeof href && Internals.d.D(href);\n};\nexports.preinit = function (href, options) {\n  if (\"string\" === typeof href && options && \"string\" === typeof options.as) {\n    var as = options.as,\n      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),\n      integrity =\n        \"string\" === typeof options.integrity ? options.integrity : void 0,\n      fetchPriority =\n        \"string\" === typeof options.fetchPriority\n          ? options.fetchPriority\n          : void 0;\n    \"style\" === as\n      ? Internals.d.S(\n          href,\n          \"string\" === typeof options.precedence ? options.precedence : void 0,\n          {\n            crossOrigin: crossOrigin,\n            integrity: integrity,\n            fetchPriority: fetchPriority\n          }\n        )\n      : \"script\" === as &&\n        Internals.d.X(href, {\n          crossOrigin: crossOrigin,\n          integrity: integrity,\n          fetchPriority: fetchPriority,\n          nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n        });\n  }\n};\nexports.preinitModule = function (href, options) {\n  if (\"string\" === typeof href)\n    if (\"object\" === typeof options && null !== options) {\n      if (null == options.as || \"script\" === options.as) {\n        var crossOrigin = getCrossOriginStringAs(\n          options.as,\n          options.crossOrigin\n        );\n        Internals.d.M(href, {\n          crossOrigin: crossOrigin,\n          integrity:\n            \"string\" === typeof options.integrity ? options.integrity : void 0,\n          nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n        });\n      }\n    } else null == options && Internals.d.M(href);\n};\nexports.preload = function (href, options) {\n  if (\n    \"string\" === typeof href &&\n    \"object\" === typeof options &&\n    null !== options &&\n    \"string\" === typeof options.as\n  ) {\n    var as = options.as,\n      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin);\n    Internals.d.L(href, as, {\n      crossOrigin: crossOrigin,\n      integrity:\n        \"string\" === typeof options.integrity ? options.integrity : void 0,\n      nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n      type: \"string\" === typeof options.type ? options.type : void 0,\n      fetchPriority:\n        \"string\" === typeof options.fetchPriority\n          ? options.fetchPriority\n          : void 0,\n      referrerPolicy:\n        \"string\" === typeof options.referrerPolicy\n          ? options.referrerPolicy\n          : void 0,\n      imageSrcSet:\n        \"string\" === typeof options.imageSrcSet ? options.imageSrcSet : void 0,\n      imageSizes:\n        \"string\" === typeof options.imageSizes ? options.imageSizes : void 0,\n      media: \"string\" === typeof options.media ? options.media : void 0\n    });\n  }\n};\nexports.preloadModule = function (href, options) {\n  if (\"string\" === typeof href)\n    if (options) {\n      var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin);\n      Internals.d.m(href, {\n        as:\n          \"string\" === typeof options.as && \"script\" !== options.as\n            ? options.as\n            : void 0,\n        crossOrigin: crossOrigin,\n        integrity:\n          \"string\" === typeof options.integrity ? options.integrity : void 0\n      });\n    } else Internals.d.m(href);\n};\nexports.requestFormReset = function (form) {\n  Internals.d.r(form);\n};\nexports.unstable_batchedUpdates = function (fn, a) {\n  return fn(a);\n};\nexports.useFormState = function (action, initialState, permalink) {\n  return ReactSharedInternals.H.useFormState(action, initialState, permalink);\n};\nexports.useFormStatus = function () {\n  return ReactSharedInternals.H.useHostTransitionStatus();\n};\nexports.version = \"19.2.7\";\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom.production.js');\n} else {\n  module.exports = require('./cjs/react-dom.development.js');\n}\n","/**\n * @license React\n * react-dom-client.production.js\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/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n\"use strict\";\nvar Scheduler = require(\"scheduler\"),\n  React = require(\"react\"),\n  ReactDOM = require(\"react-dom\");\nfunction formatProdErrorMessage(code) {\n  var url = \"https://react.dev/errors/\" + code;\n  if (1 < arguments.length) {\n    url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n    for (var i = 2; i < arguments.length; i++)\n      url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n  }\n  return (\n    \"Minified React error #\" +\n    code +\n    \"; visit \" +\n    url +\n    \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n  );\n}\nfunction isValidContainer(node) {\n  return !(\n    !node ||\n    (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)\n  );\n}\nfunction getNearestMountedFiber(fiber) {\n  var node = fiber,\n    nearestMounted = fiber;\n  if (fiber.alternate) for (; node.return; ) node = node.return;\n  else {\n    fiber = node;\n    do\n      (node = fiber),\n        0 !== (node.flags & 4098) && (nearestMounted = node.return),\n        (fiber = node.return);\n    while (fiber);\n  }\n  return 3 === node.tag ? nearestMounted : null;\n}\nfunction getSuspenseInstanceFromFiber(fiber) {\n  if (13 === fiber.tag) {\n    var suspenseState = fiber.memoizedState;\n    null === suspenseState &&\n      ((fiber = fiber.alternate),\n      null !== fiber && (suspenseState = fiber.memoizedState));\n    if (null !== suspenseState) return suspenseState.dehydrated;\n  }\n  return null;\n}\nfunction getActivityInstanceFromFiber(fiber) {\n  if (31 === fiber.tag) {\n    var activityState = fiber.memoizedState;\n    null === activityState &&\n      ((fiber = fiber.alternate),\n      null !== fiber && (activityState = fiber.memoizedState));\n    if (null !== activityState) return activityState.dehydrated;\n  }\n  return null;\n}\nfunction assertIsMounted(fiber) {\n  if (getNearestMountedFiber(fiber) !== fiber)\n    throw Error(formatProdErrorMessage(188));\n}\nfunction findCurrentFiberUsingSlowPath(fiber) {\n  var alternate = fiber.alternate;\n  if (!alternate) {\n    alternate = getNearestMountedFiber(fiber);\n    if (null === alternate) throw Error(formatProdErrorMessage(188));\n    return alternate !== fiber ? null : fiber;\n  }\n  for (var a = fiber, b = alternate; ; ) {\n    var parentA = a.return;\n    if (null === parentA) break;\n    var parentB = parentA.alternate;\n    if (null === parentB) {\n      b = parentA.return;\n      if (null !== b) {\n        a = b;\n        continue;\n      }\n      break;\n    }\n    if (parentA.child === parentB.child) {\n      for (parentB = parentA.child; parentB; ) {\n        if (parentB === a) return assertIsMounted(parentA), fiber;\n        if (parentB === b) return assertIsMounted(parentA), alternate;\n        parentB = parentB.sibling;\n      }\n      throw Error(formatProdErrorMessage(188));\n    }\n    if (a.return !== b.return) (a = parentA), (b = parentB);\n    else {\n      for (var didFindChild = !1, child$0 = parentA.child; child$0; ) {\n        if (child$0 === a) {\n          didFindChild = !0;\n          a = parentA;\n          b = parentB;\n          break;\n        }\n        if (child$0 === b) {\n          didFindChild = !0;\n          b = parentA;\n          a = parentB;\n          break;\n        }\n        child$0 = child$0.sibling;\n      }\n      if (!didFindChild) {\n        for (child$0 = parentB.child; child$0; ) {\n          if (child$0 === a) {\n            didFindChild = !0;\n            a = parentB;\n            b = parentA;\n            break;\n          }\n          if (child$0 === b) {\n            didFindChild = !0;\n            b = parentB;\n            a = parentA;\n            break;\n          }\n          child$0 = child$0.sibling;\n        }\n        if (!didFindChild) throw Error(formatProdErrorMessage(189));\n      }\n    }\n    if (a.alternate !== b) throw Error(formatProdErrorMessage(190));\n  }\n  if (3 !== a.tag) throw Error(formatProdErrorMessage(188));\n  return a.stateNode.current === a ? fiber : alternate;\n}\nfunction findCurrentHostFiberImpl(node) {\n  var tag = node.tag;\n  if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;\n  for (node = node.child; null !== node; ) {\n    tag = findCurrentHostFiberImpl(node);\n    if (null !== tag) return tag;\n    node = node.sibling;\n  }\n  return null;\n}\nvar assign = Object.assign,\n  REACT_LEGACY_ELEMENT_TYPE = Symbol.for(\"react.element\"),\n  REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n  REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nSymbol.for(\"react.scope\");\nvar REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\");\nSymbol.for(\"react.legacy_hidden\");\nSymbol.for(\"react.tracing_marker\");\nvar REACT_MEMO_CACHE_SENTINEL = Symbol.for(\"react.memo_cache_sentinel\");\nSymbol.for(\"react.view_transition\");\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n  if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n  maybeIterable =\n    (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n    maybeIterable[\"@@iterator\"];\n  return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction getComponentNameFromType(type) {\n  if (null == type) return null;\n  if (\"function\" === typeof type)\n    return type.$$typeof === REACT_CLIENT_REFERENCE\n      ? null\n      : type.displayName || type.name || null;\n  if (\"string\" === typeof type) return type;\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return \"Fragment\";\n    case REACT_PROFILER_TYPE:\n      return \"Profiler\";\n    case REACT_STRICT_MODE_TYPE:\n      return \"StrictMode\";\n    case REACT_SUSPENSE_TYPE:\n      return \"Suspense\";\n    case REACT_SUSPENSE_LIST_TYPE:\n      return \"SuspenseList\";\n    case REACT_ACTIVITY_TYPE:\n      return \"Activity\";\n  }\n  if (\"object\" === typeof type)\n    switch (type.$$typeof) {\n      case REACT_PORTAL_TYPE:\n        return \"Portal\";\n      case REACT_CONTEXT_TYPE:\n        return type.displayName || \"Context\";\n      case REACT_CONSUMER_TYPE:\n        return (type._context.displayName || \"Context\") + \".Consumer\";\n      case REACT_FORWARD_REF_TYPE:\n        var innerType = type.render;\n        type = type.displayName;\n        type ||\n          ((type = innerType.displayName || innerType.name || \"\"),\n          (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n        return type;\n      case REACT_MEMO_TYPE:\n        return (\n          (innerType = type.displayName || null),\n          null !== innerType\n            ? innerType\n            : getComponentNameFromType(type.type) || \"Memo\"\n        );\n      case REACT_LAZY_TYPE:\n        innerType = type._payload;\n        type = type._init;\n        try {\n          return getComponentNameFromType(type(innerType));\n        } catch (x) {}\n    }\n  return null;\n}\nvar isArrayImpl = Array.isArray,\n  ReactSharedInternals =\n    React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n  ReactDOMSharedInternals =\n    ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n  sharedNotPendingObject = {\n    pending: !1,\n    data: null,\n    method: null,\n    action: null\n  },\n  valueStack = [],\n  index = -1;\nfunction createCursor(defaultValue) {\n  return { current: defaultValue };\n}\nfunction pop(cursor) {\n  0 > index ||\n    ((cursor.current = valueStack[index]), (valueStack[index] = null), index--);\n}\nfunction push(cursor, value) {\n  index++;\n  valueStack[index] = cursor.current;\n  cursor.current = value;\n}\nvar contextStackCursor = createCursor(null),\n  contextFiberStackCursor = createCursor(null),\n  rootInstanceStackCursor = createCursor(null),\n  hostTransitionProviderCursor = createCursor(null);\nfunction pushHostContainer(fiber, nextRootInstance) {\n  push(rootInstanceStackCursor, nextRootInstance);\n  push(contextFiberStackCursor, fiber);\n  push(contextStackCursor, null);\n  switch (nextRootInstance.nodeType) {\n    case 9:\n    case 11:\n      fiber = (fiber = nextRootInstance.documentElement)\n        ? (fiber = fiber.namespaceURI)\n          ? getOwnHostContext(fiber)\n          : 0\n        : 0;\n      break;\n    default:\n      if (\n        ((fiber = nextRootInstance.tagName),\n        (nextRootInstance = nextRootInstance.namespaceURI))\n      )\n        (nextRootInstance = getOwnHostContext(nextRootInstance)),\n          (fiber = getChildHostContextProd(nextRootInstance, fiber));\n      else\n        switch (fiber) {\n          case \"svg\":\n            fiber = 1;\n            break;\n          case \"math\":\n            fiber = 2;\n            break;\n          default:\n            fiber = 0;\n        }\n  }\n  pop(contextStackCursor);\n  push(contextStackCursor, fiber);\n}\nfunction popHostContainer() {\n  pop(contextStackCursor);\n  pop(contextFiberStackCursor);\n  pop(rootInstanceStackCursor);\n}\nfunction pushHostContext(fiber) {\n  null !== fiber.memoizedState && push(hostTransitionProviderCursor, fiber);\n  var context = contextStackCursor.current;\n  var JSCompiler_inline_result = getChildHostContextProd(context, fiber.type);\n  context !== JSCompiler_inline_result &&\n    (push(contextFiberStackCursor, fiber),\n    push(contextStackCursor, JSCompiler_inline_result));\n}\nfunction popHostContext(fiber) {\n  contextFiberStackCursor.current === fiber &&\n    (pop(contextStackCursor), pop(contextFiberStackCursor));\n  hostTransitionProviderCursor.current === fiber &&\n    (pop(hostTransitionProviderCursor),\n    (HostTransitionContext._currentValue = sharedNotPendingObject));\n}\nvar prefix, suffix;\nfunction describeBuiltInComponentFrame(name) {\n  if (void 0 === prefix)\n    try {\n      throw Error();\n    } catch (x) {\n      var match = x.stack.trim().match(/\\n( *(at )?)/);\n      prefix = (match && match[1]) || \"\";\n      suffix =\n        -1 < x.stack.indexOf(\"\\n    at\")\n          ? \" (<anonymous>)\"\n          : -1 < x.stack.indexOf(\"@\")\n            ? \"@unknown:0:0\"\n            : \"\";\n    }\n  return \"\\n\" + prefix + name + suffix;\n}\nvar reentry = !1;\nfunction describeNativeComponentFrame(fn, construct) {\n  if (!fn || reentry) return \"\";\n  reentry = !0;\n  var previousPrepareStackTrace = Error.prepareStackTrace;\n  Error.prepareStackTrace = void 0;\n  try {\n    var RunInRootFrame = {\n      DetermineComponentFrameRoot: function () {\n        try {\n          if (construct) {\n            var Fake = function () {\n              throw Error();\n            };\n            Object.defineProperty(Fake.prototype, \"props\", {\n              set: function () {\n                throw Error();\n              }\n            });\n            if (\"object\" === typeof Reflect && Reflect.construct) {\n              try {\n                Reflect.construct(Fake, []);\n              } catch (x) {\n                var control = x;\n              }\n              Reflect.construct(fn, [], Fake);\n            } else {\n              try {\n                Fake.call();\n              } catch (x$1) {\n                control = x$1;\n              }\n              fn.call(Fake.prototype);\n            }\n          } else {\n            try {\n              throw Error();\n            } catch (x$2) {\n              control = x$2;\n            }\n            (Fake = fn()) &&\n              \"function\" === typeof Fake.catch &&\n              Fake.catch(function () {});\n          }\n        } catch (sample) {\n          if (sample && control && \"string\" === typeof sample.stack)\n            return [sample.stack, control.stack];\n        }\n        return [null, null];\n      }\n    };\n    RunInRootFrame.DetermineComponentFrameRoot.displayName =\n      \"DetermineComponentFrameRoot\";\n    var namePropDescriptor = Object.getOwnPropertyDescriptor(\n      RunInRootFrame.DetermineComponentFrameRoot,\n      \"name\"\n    );\n    namePropDescriptor &&\n      namePropDescriptor.configurable &&\n      Object.defineProperty(\n        RunInRootFrame.DetermineComponentFrameRoot,\n        \"name\",\n        { value: \"DetermineComponentFrameRoot\" }\n      );\n    var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n      sampleStack = _RunInRootFrame$Deter[0],\n      controlStack = _RunInRootFrame$Deter[1];\n    if (sampleStack && controlStack) {\n      var sampleLines = sampleStack.split(\"\\n\"),\n        controlLines = controlStack.split(\"\\n\");\n      for (\n        namePropDescriptor = RunInRootFrame = 0;\n        RunInRootFrame < sampleLines.length &&\n        !sampleLines[RunInRootFrame].includes(\"DetermineComponentFrameRoot\");\n\n      )\n        RunInRootFrame++;\n      for (\n        ;\n        namePropDescriptor < controlLines.length &&\n        !controlLines[namePropDescriptor].includes(\n          \"DetermineComponentFrameRoot\"\n        );\n\n      )\n        namePropDescriptor++;\n      if (\n        RunInRootFrame === sampleLines.length ||\n        namePropDescriptor === controlLines.length\n      )\n        for (\n          RunInRootFrame = sampleLines.length - 1,\n            namePropDescriptor = controlLines.length - 1;\n          1 <= RunInRootFrame &&\n          0 <= namePropDescriptor &&\n          sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];\n\n        )\n          namePropDescriptor--;\n      for (\n        ;\n        1 <= RunInRootFrame && 0 <= namePropDescriptor;\n        RunInRootFrame--, namePropDescriptor--\n      )\n        if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {\n          if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {\n            do\n              if (\n                (RunInRootFrame--,\n                namePropDescriptor--,\n                0 > namePropDescriptor ||\n                  sampleLines[RunInRootFrame] !==\n                    controlLines[namePropDescriptor])\n              ) {\n                var frame =\n                  \"\\n\" +\n                  sampleLines[RunInRootFrame].replace(\" at new \", \" at \");\n                fn.displayName &&\n                  frame.includes(\"<anonymous>\") &&\n                  (frame = frame.replace(\"<anonymous>\", fn.displayName));\n                return frame;\n              }\n            while (1 <= RunInRootFrame && 0 <= namePropDescriptor);\n          }\n          break;\n        }\n    }\n  } finally {\n    (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);\n  }\n  return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : \"\")\n    ? describeBuiltInComponentFrame(previousPrepareStackTrace)\n    : \"\";\n}\nfunction describeFiber(fiber, childFiber) {\n  switch (fiber.tag) {\n    case 26:\n    case 27:\n    case 5:\n      return describeBuiltInComponentFrame(fiber.type);\n    case 16:\n      return describeBuiltInComponentFrame(\"Lazy\");\n    case 13:\n      return fiber.child !== childFiber && null !== childFiber\n        ? describeBuiltInComponentFrame(\"Suspense Fallback\")\n        : describeBuiltInComponentFrame(\"Suspense\");\n    case 19:\n      return describeBuiltInComponentFrame(\"SuspenseList\");\n    case 0:\n    case 15:\n      return describeNativeComponentFrame(fiber.type, !1);\n    case 11:\n      return describeNativeComponentFrame(fiber.type.render, !1);\n    case 1:\n      return describeNativeComponentFrame(fiber.type, !0);\n    case 31:\n      return describeBuiltInComponentFrame(\"Activity\");\n    default:\n      return \"\";\n  }\n}\nfunction getStackByFiberInDevAndProd(workInProgress) {\n  try {\n    var info = \"\",\n      previous = null;\n    do\n      (info += describeFiber(workInProgress, previous)),\n        (previous = workInProgress),\n        (workInProgress = workInProgress.return);\n    while (workInProgress);\n    return info;\n  } catch (x) {\n    return \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n  }\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty,\n  scheduleCallback$3 = Scheduler.unstable_scheduleCallback,\n  cancelCallback$1 = Scheduler.unstable_cancelCallback,\n  shouldYield = Scheduler.unstable_shouldYield,\n  requestPaint = Scheduler.unstable_requestPaint,\n  now = Scheduler.unstable_now,\n  getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n  ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n  UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n  NormalPriority$1 = Scheduler.unstable_NormalPriority,\n  LowPriority = Scheduler.unstable_LowPriority,\n  IdlePriority = Scheduler.unstable_IdlePriority,\n  log$1 = Scheduler.log,\n  unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,\n  rendererID = null,\n  injectedHook = null;\nfunction setIsStrictModeForDevtools(newIsStrictMode) {\n  \"function\" === typeof log$1 && unstable_setDisableYieldValue(newIsStrictMode);\n  if (injectedHook && \"function\" === typeof injectedHook.setStrictMode)\n    try {\n      injectedHook.setStrictMode(rendererID, newIsStrictMode);\n    } catch (err) {}\n}\nvar clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,\n  log = Math.log,\n  LN2 = Math.LN2;\nfunction clz32Fallback(x) {\n  x >>>= 0;\n  return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;\n}\nvar nextTransitionUpdateLane = 256,\n  nextTransitionDeferredLane = 262144,\n  nextRetryLane = 4194304;\nfunction getHighestPriorityLanes(lanes) {\n  var pendingSyncLanes = lanes & 42;\n  if (0 !== pendingSyncLanes) return pendingSyncLanes;\n  switch (lanes & -lanes) {\n    case 1:\n      return 1;\n    case 2:\n      return 2;\n    case 4:\n      return 4;\n    case 8:\n      return 8;\n    case 16:\n      return 16;\n    case 32:\n      return 32;\n    case 64:\n      return 64;\n    case 128:\n      return 128;\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n      return lanes & 261888;\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n      return lanes & 3932160;\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      return lanes & 62914560;\n    case 67108864:\n      return 67108864;\n    case 134217728:\n      return 134217728;\n    case 268435456:\n      return 268435456;\n    case 536870912:\n      return 536870912;\n    case 1073741824:\n      return 0;\n    default:\n      return lanes;\n  }\n}\nfunction getNextLanes(root, wipLanes, rootHasPendingCommit) {\n  var pendingLanes = root.pendingLanes;\n  if (0 === pendingLanes) return 0;\n  var nextLanes = 0,\n    suspendedLanes = root.suspendedLanes,\n    pingedLanes = root.pingedLanes;\n  root = root.warmLanes;\n  var nonIdlePendingLanes = pendingLanes & 134217727;\n  0 !== nonIdlePendingLanes\n    ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),\n      0 !== pendingLanes\n        ? (nextLanes = getHighestPriorityLanes(pendingLanes))\n        : ((pingedLanes &= nonIdlePendingLanes),\n          0 !== pingedLanes\n            ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n            : rootHasPendingCommit ||\n              ((rootHasPendingCommit = nonIdlePendingLanes & ~root),\n              0 !== rootHasPendingCommit &&\n                (nextLanes = getHighestPriorityLanes(rootHasPendingCommit)))))\n    : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n      0 !== nonIdlePendingLanes\n        ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n        : 0 !== pingedLanes\n          ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n          : rootHasPendingCommit ||\n            ((rootHasPendingCommit = pendingLanes & ~root),\n            0 !== rootHasPendingCommit &&\n              (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))));\n  return 0 === nextLanes\n    ? 0\n    : 0 !== wipLanes &&\n        wipLanes !== nextLanes &&\n        0 === (wipLanes & suspendedLanes) &&\n        ((suspendedLanes = nextLanes & -nextLanes),\n        (rootHasPendingCommit = wipLanes & -wipLanes),\n        suspendedLanes >= rootHasPendingCommit ||\n          (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)))\n      ? wipLanes\n      : nextLanes;\n}\nfunction checkIfRootIsPrerendering(root, renderLanes) {\n  return (\n    0 ===\n    (root.pendingLanes &\n      ~(root.suspendedLanes & ~root.pingedLanes) &\n      renderLanes)\n  );\n}\nfunction computeExpirationTime(lane, currentTime) {\n  switch (lane) {\n    case 1:\n    case 2:\n    case 4:\n    case 8:\n    case 64:\n      return currentTime + 250;\n    case 16:\n    case 32:\n    case 128:\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n      return currentTime + 5e3;\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      return -1;\n    case 67108864:\n    case 134217728:\n    case 268435456:\n    case 536870912:\n    case 1073741824:\n      return -1;\n    default:\n      return -1;\n  }\n}\nfunction claimNextRetryLane() {\n  var lane = nextRetryLane;\n  nextRetryLane <<= 1;\n  0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);\n  return lane;\n}\nfunction createLaneMap(initial) {\n  for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);\n  return laneMap;\n}\nfunction markRootUpdated$1(root, updateLane) {\n  root.pendingLanes |= updateLane;\n  268435456 !== updateLane &&\n    ((root.suspendedLanes = 0), (root.pingedLanes = 0), (root.warmLanes = 0));\n}\nfunction markRootFinished(\n  root,\n  finishedLanes,\n  remainingLanes,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes\n) {\n  var previouslyPendingLanes = root.pendingLanes;\n  root.pendingLanes = remainingLanes;\n  root.suspendedLanes = 0;\n  root.pingedLanes = 0;\n  root.warmLanes = 0;\n  root.expiredLanes &= remainingLanes;\n  root.entangledLanes &= remainingLanes;\n  root.errorRecoveryDisabledLanes &= remainingLanes;\n  root.shellSuspendCounter = 0;\n  var entanglements = root.entanglements,\n    expirationTimes = root.expirationTimes,\n    hiddenUpdates = root.hiddenUpdates;\n  for (\n    remainingLanes = previouslyPendingLanes & ~remainingLanes;\n    0 < remainingLanes;\n\n  ) {\n    var index$7 = 31 - clz32(remainingLanes),\n      lane = 1 << index$7;\n    entanglements[index$7] = 0;\n    expirationTimes[index$7] = -1;\n    var hiddenUpdatesForLane = hiddenUpdates[index$7];\n    if (null !== hiddenUpdatesForLane)\n      for (\n        hiddenUpdates[index$7] = null, index$7 = 0;\n        index$7 < hiddenUpdatesForLane.length;\n        index$7++\n      ) {\n        var update = hiddenUpdatesForLane[index$7];\n        null !== update && (update.lane &= -536870913);\n      }\n    remainingLanes &= ~lane;\n  }\n  0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);\n  0 !== suspendedRetryLanes &&\n    0 === updatedLanes &&\n    0 !== root.tag &&\n    (root.suspendedLanes |=\n      suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));\n}\nfunction markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {\n  root.pendingLanes |= spawnedLane;\n  root.suspendedLanes &= ~spawnedLane;\n  var spawnedLaneIndex = 31 - clz32(spawnedLane);\n  root.entangledLanes |= spawnedLane;\n  root.entanglements[spawnedLaneIndex] =\n    root.entanglements[spawnedLaneIndex] |\n    1073741824 |\n    (entangledLanes & 261930);\n}\nfunction markRootEntangled(root, entangledLanes) {\n  var rootEntangledLanes = (root.entangledLanes |= entangledLanes);\n  for (root = root.entanglements; rootEntangledLanes; ) {\n    var index$8 = 31 - clz32(rootEntangledLanes),\n      lane = 1 << index$8;\n    (lane & entangledLanes) | (root[index$8] & entangledLanes) &&\n      (root[index$8] |= entangledLanes);\n    rootEntangledLanes &= ~lane;\n  }\n}\nfunction getBumpedLaneForHydration(root, renderLanes) {\n  var renderLane = renderLanes & -renderLanes;\n  renderLane =\n    0 !== (renderLane & 42) ? 1 : getBumpedLaneForHydrationByLane(renderLane);\n  return 0 !== (renderLane & (root.suspendedLanes | renderLanes))\n    ? 0\n    : renderLane;\n}\nfunction getBumpedLaneForHydrationByLane(lane) {\n  switch (lane) {\n    case 2:\n      lane = 1;\n      break;\n    case 8:\n      lane = 4;\n      break;\n    case 32:\n      lane = 16;\n      break;\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      lane = 128;\n      break;\n    case 268435456:\n      lane = 134217728;\n      break;\n    default:\n      lane = 0;\n  }\n  return lane;\n}\nfunction lanesToEventPriority(lanes) {\n  lanes &= -lanes;\n  return 2 < lanes\n    ? 8 < lanes\n      ? 0 !== (lanes & 134217727)\n        ? 32\n        : 268435456\n      : 8\n    : 2;\n}\nfunction resolveUpdatePriority() {\n  var updatePriority = ReactDOMSharedInternals.p;\n  if (0 !== updatePriority) return updatePriority;\n  updatePriority = window.event;\n  return void 0 === updatePriority ? 32 : getEventPriority(updatePriority.type);\n}\nfunction runWithPriority(priority, fn) {\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    return (ReactDOMSharedInternals.p = priority), fn();\n  } finally {\n    ReactDOMSharedInternals.p = previousPriority;\n  }\n}\nvar randomKey = Math.random().toString(36).slice(2),\n  internalInstanceKey = \"__reactFiber$\" + randomKey,\n  internalPropsKey = \"__reactProps$\" + randomKey,\n  internalContainerInstanceKey = \"__reactContainer$\" + randomKey,\n  internalEventHandlersKey = \"__reactEvents$\" + randomKey,\n  internalEventHandlerListenersKey = \"__reactListeners$\" + randomKey,\n  internalEventHandlesSetKey = \"__reactHandles$\" + randomKey,\n  internalRootNodeResourcesKey = \"__reactResources$\" + randomKey,\n  internalHoistableMarker = \"__reactMarker$\" + randomKey;\nfunction detachDeletedInstance(node) {\n  delete node[internalInstanceKey];\n  delete node[internalPropsKey];\n  delete node[internalEventHandlersKey];\n  delete node[internalEventHandlerListenersKey];\n  delete node[internalEventHandlesSetKey];\n}\nfunction getClosestInstanceFromNode(targetNode) {\n  var targetInst = targetNode[internalInstanceKey];\n  if (targetInst) return targetInst;\n  for (var parentNode = targetNode.parentNode; parentNode; ) {\n    if (\n      (targetInst =\n        parentNode[internalContainerInstanceKey] ||\n        parentNode[internalInstanceKey])\n    ) {\n      parentNode = targetInst.alternate;\n      if (\n        null !== targetInst.child ||\n        (null !== parentNode && null !== parentNode.child)\n      )\n        for (\n          targetNode = getParentHydrationBoundary(targetNode);\n          null !== targetNode;\n\n        ) {\n          if ((parentNode = targetNode[internalInstanceKey])) return parentNode;\n          targetNode = getParentHydrationBoundary(targetNode);\n        }\n      return targetInst;\n    }\n    targetNode = parentNode;\n    parentNode = targetNode.parentNode;\n  }\n  return null;\n}\nfunction getInstanceFromNode(node) {\n  if (\n    (node = node[internalInstanceKey] || node[internalContainerInstanceKey])\n  ) {\n    var tag = node.tag;\n    if (\n      5 === tag ||\n      6 === tag ||\n      13 === tag ||\n      31 === tag ||\n      26 === tag ||\n      27 === tag ||\n      3 === tag\n    )\n      return node;\n  }\n  return null;\n}\nfunction getNodeFromInstance(inst) {\n  var tag = inst.tag;\n  if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return inst.stateNode;\n  throw Error(formatProdErrorMessage(33));\n}\nfunction getResourcesFromRoot(root) {\n  var resources = root[internalRootNodeResourcesKey];\n  resources ||\n    (resources = root[internalRootNodeResourcesKey] =\n      { hoistableStyles: new Map(), hoistableScripts: new Map() });\n  return resources;\n}\nfunction markNodeAsHoistable(node) {\n  node[internalHoistableMarker] = !0;\n}\nvar allNativeEvents = new Set(),\n  registrationNameDependencies = {};\nfunction registerTwoPhaseEvent(registrationName, dependencies) {\n  registerDirectEvent(registrationName, dependencies);\n  registerDirectEvent(registrationName + \"Capture\", dependencies);\n}\nfunction registerDirectEvent(registrationName, dependencies) {\n  registrationNameDependencies[registrationName] = dependencies;\n  for (\n    registrationName = 0;\n    registrationName < dependencies.length;\n    registrationName++\n  )\n    allNativeEvents.add(dependencies[registrationName]);\n}\nvar VALID_ATTRIBUTE_NAME_REGEX = RegExp(\n    \"^[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n  ),\n  illegalAttributeNameCache = {},\n  validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n  if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))\n    return !0;\n  if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;\n  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))\n    return (validatedAttributeNameCache[attributeName] = !0);\n  illegalAttributeNameCache[attributeName] = !0;\n  return !1;\n}\nfunction setValueForAttribute(node, name, value) {\n  if (isAttributeNameSafe(name))\n    if (null === value) node.removeAttribute(name);\n    else {\n      switch (typeof value) {\n        case \"undefined\":\n        case \"function\":\n        case \"symbol\":\n          node.removeAttribute(name);\n          return;\n        case \"boolean\":\n          var prefix$10 = name.toLowerCase().slice(0, 5);\n          if (\"data-\" !== prefix$10 && \"aria-\" !== prefix$10) {\n            node.removeAttribute(name);\n            return;\n          }\n      }\n      node.setAttribute(name, \"\" + value);\n    }\n}\nfunction setValueForKnownAttribute(node, name, value) {\n  if (null === value) node.removeAttribute(name);\n  else {\n    switch (typeof value) {\n      case \"undefined\":\n      case \"function\":\n      case \"symbol\":\n      case \"boolean\":\n        node.removeAttribute(name);\n        return;\n    }\n    node.setAttribute(name, \"\" + value);\n  }\n}\nfunction setValueForNamespacedAttribute(node, namespace, name, value) {\n  if (null === value) node.removeAttribute(name);\n  else {\n    switch (typeof value) {\n      case \"undefined\":\n      case \"function\":\n      case \"symbol\":\n      case \"boolean\":\n        node.removeAttribute(name);\n        return;\n    }\n    node.setAttributeNS(namespace, name, \"\" + value);\n  }\n}\nfunction getToStringValue(value) {\n  switch (typeof value) {\n    case \"bigint\":\n    case \"boolean\":\n    case \"number\":\n    case \"string\":\n    case \"undefined\":\n      return value;\n    case \"object\":\n      return value;\n    default:\n      return \"\";\n  }\n}\nfunction isCheckable(elem) {\n  var type = elem.type;\n  return (\n    (elem = elem.nodeName) &&\n    \"input\" === elem.toLowerCase() &&\n    (\"checkbox\" === type || \"radio\" === type)\n  );\n}\nfunction trackValueOnNode(node, valueField, currentValue) {\n  var descriptor = Object.getOwnPropertyDescriptor(\n    node.constructor.prototype,\n    valueField\n  );\n  if (\n    !node.hasOwnProperty(valueField) &&\n    \"undefined\" !== typeof descriptor &&\n    \"function\" === typeof descriptor.get &&\n    \"function\" === typeof descriptor.set\n  ) {\n    var get = descriptor.get,\n      set = descriptor.set;\n    Object.defineProperty(node, valueField, {\n      configurable: !0,\n      get: function () {\n        return get.call(this);\n      },\n      set: function (value) {\n        currentValue = \"\" + value;\n        set.call(this, value);\n      }\n    });\n    Object.defineProperty(node, valueField, {\n      enumerable: descriptor.enumerable\n    });\n    return {\n      getValue: function () {\n        return currentValue;\n      },\n      setValue: function (value) {\n        currentValue = \"\" + value;\n      },\n      stopTracking: function () {\n        node._valueTracker = null;\n        delete node[valueField];\n      }\n    };\n  }\n}\nfunction track(node) {\n  if (!node._valueTracker) {\n    var valueField = isCheckable(node) ? \"checked\" : \"value\";\n    node._valueTracker = trackValueOnNode(\n      node,\n      valueField,\n      \"\" + node[valueField]\n    );\n  }\n}\nfunction updateValueIfChanged(node) {\n  if (!node) return !1;\n  var tracker = node._valueTracker;\n  if (!tracker) return !0;\n  var lastValue = tracker.getValue();\n  var value = \"\";\n  node &&\n    (value = isCheckable(node)\n      ? node.checked\n        ? \"true\"\n        : \"false\"\n      : node.value);\n  node = value;\n  return node !== lastValue ? (tracker.setValue(node), !0) : !1;\n}\nfunction getActiveElement(doc) {\n  doc = doc || (\"undefined\" !== typeof document ? document : void 0);\n  if (\"undefined\" === typeof doc) return null;\n  try {\n    return doc.activeElement || doc.body;\n  } catch (e) {\n    return doc.body;\n  }\n}\nvar escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\\n\"\\\\]/g;\nfunction escapeSelectorAttributeValueInsideDoubleQuotes(value) {\n  return value.replace(\n    escapeSelectorAttributeValueInsideDoubleQuotesRegex,\n    function (ch) {\n      return \"\\\\\" + ch.charCodeAt(0).toString(16) + \" \";\n    }\n  );\n}\nfunction updateInput(\n  element,\n  value,\n  defaultValue,\n  lastDefaultValue,\n  checked,\n  defaultChecked,\n  type,\n  name\n) {\n  element.name = \"\";\n  null != type &&\n  \"function\" !== typeof type &&\n  \"symbol\" !== typeof type &&\n  \"boolean\" !== typeof type\n    ? (element.type = type)\n    : element.removeAttribute(\"type\");\n  if (null != value)\n    if (\"number\" === type) {\n      if ((0 === value && \"\" === element.value) || element.value != value)\n        element.value = \"\" + getToStringValue(value);\n    } else\n      element.value !== \"\" + getToStringValue(value) &&\n        (element.value = \"\" + getToStringValue(value));\n  else\n    (\"submit\" !== type && \"reset\" !== type) || element.removeAttribute(\"value\");\n  null != value\n    ? setDefaultValue(element, type, getToStringValue(value))\n    : null != defaultValue\n      ? setDefaultValue(element, type, getToStringValue(defaultValue))\n      : null != lastDefaultValue && element.removeAttribute(\"value\");\n  null == checked &&\n    null != defaultChecked &&\n    (element.defaultChecked = !!defaultChecked);\n  null != checked &&\n    (element.checked =\n      checked && \"function\" !== typeof checked && \"symbol\" !== typeof checked);\n  null != name &&\n  \"function\" !== typeof name &&\n  \"symbol\" !== typeof name &&\n  \"boolean\" !== typeof name\n    ? (element.name = \"\" + getToStringValue(name))\n    : element.removeAttribute(\"name\");\n}\nfunction initInput(\n  element,\n  value,\n  defaultValue,\n  checked,\n  defaultChecked,\n  type,\n  name,\n  isHydrating\n) {\n  null != type &&\n    \"function\" !== typeof type &&\n    \"symbol\" !== typeof type &&\n    \"boolean\" !== typeof type &&\n    (element.type = type);\n  if (null != value || null != defaultValue) {\n    if (\n      !(\n        (\"submit\" !== type && \"reset\" !== type) ||\n        (void 0 !== value && null !== value)\n      )\n    ) {\n      track(element);\n      return;\n    }\n    defaultValue =\n      null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n    value = null != value ? \"\" + getToStringValue(value) : defaultValue;\n    isHydrating || value === element.value || (element.value = value);\n    element.defaultValue = value;\n  }\n  checked = null != checked ? checked : defaultChecked;\n  checked =\n    \"function\" !== typeof checked && \"symbol\" !== typeof checked && !!checked;\n  element.checked = isHydrating ? element.checked : !!checked;\n  element.defaultChecked = !!checked;\n  null != name &&\n    \"function\" !== typeof name &&\n    \"symbol\" !== typeof name &&\n    \"boolean\" !== typeof name &&\n    (element.name = name);\n  track(element);\n}\nfunction setDefaultValue(node, type, value) {\n  (\"number\" === type && getActiveElement(node.ownerDocument) === node) ||\n    node.defaultValue === \"\" + value ||\n    (node.defaultValue = \"\" + value);\n}\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n  node = node.options;\n  if (multiple) {\n    multiple = {};\n    for (var i = 0; i < propValue.length; i++)\n      multiple[\"$\" + propValue[i]] = !0;\n    for (propValue = 0; propValue < node.length; propValue++)\n      (i = multiple.hasOwnProperty(\"$\" + node[propValue].value)),\n        node[propValue].selected !== i && (node[propValue].selected = i),\n        i && setDefaultSelected && (node[propValue].defaultSelected = !0);\n  } else {\n    propValue = \"\" + getToStringValue(propValue);\n    multiple = null;\n    for (i = 0; i < node.length; i++) {\n      if (node[i].value === propValue) {\n        node[i].selected = !0;\n        setDefaultSelected && (node[i].defaultSelected = !0);\n        return;\n      }\n      null !== multiple || node[i].disabled || (multiple = node[i]);\n    }\n    null !== multiple && (multiple.selected = !0);\n  }\n}\nfunction updateTextarea(element, value, defaultValue) {\n  if (\n    null != value &&\n    ((value = \"\" + getToStringValue(value)),\n    value !== element.value && (element.value = value),\n    null == defaultValue)\n  ) {\n    element.defaultValue !== value && (element.defaultValue = value);\n    return;\n  }\n  element.defaultValue =\n    null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n}\nfunction initTextarea(element, value, defaultValue, children) {\n  if (null == value) {\n    if (null != children) {\n      if (null != defaultValue) throw Error(formatProdErrorMessage(92));\n      if (isArrayImpl(children)) {\n        if (1 < children.length) throw Error(formatProdErrorMessage(93));\n        children = children[0];\n      }\n      defaultValue = children;\n    }\n    null == defaultValue && (defaultValue = \"\");\n    value = defaultValue;\n  }\n  defaultValue = getToStringValue(value);\n  element.defaultValue = defaultValue;\n  children = element.textContent;\n  children === defaultValue &&\n    \"\" !== children &&\n    null !== children &&\n    (element.value = children);\n  track(element);\n}\nfunction setTextContent(node, text) {\n  if (text) {\n    var firstChild = node.firstChild;\n    if (\n      firstChild &&\n      firstChild === node.lastChild &&\n      3 === firstChild.nodeType\n    ) {\n      firstChild.nodeValue = text;\n      return;\n    }\n  }\n  node.textContent = text;\n}\nvar unitlessNumbers = new Set(\n  \"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\n    \" \"\n  )\n);\nfunction setValueForStyle(style, styleName, value) {\n  var isCustomProperty = 0 === styleName.indexOf(\"--\");\n  null == value || \"boolean\" === typeof value || \"\" === value\n    ? isCustomProperty\n      ? style.setProperty(styleName, \"\")\n      : \"float\" === styleName\n        ? (style.cssFloat = \"\")\n        : (style[styleName] = \"\")\n    : isCustomProperty\n      ? style.setProperty(styleName, value)\n      : \"number\" !== typeof value ||\n          0 === value ||\n          unitlessNumbers.has(styleName)\n        ? \"float\" === styleName\n          ? (style.cssFloat = value)\n          : (style[styleName] = (\"\" + value).trim())\n        : (style[styleName] = value + \"px\");\n}\nfunction setValueForStyles(node, styles, prevStyles) {\n  if (null != styles && \"object\" !== typeof styles)\n    throw Error(formatProdErrorMessage(62));\n  node = node.style;\n  if (null != prevStyles) {\n    for (var styleName in prevStyles)\n      !prevStyles.hasOwnProperty(styleName) ||\n        (null != styles && styles.hasOwnProperty(styleName)) ||\n        (0 === styleName.indexOf(\"--\")\n          ? node.setProperty(styleName, \"\")\n          : \"float\" === styleName\n            ? (node.cssFloat = \"\")\n            : (node[styleName] = \"\"));\n    for (var styleName$16 in styles)\n      (styleName = styles[styleName$16]),\n        styles.hasOwnProperty(styleName$16) &&\n          prevStyles[styleName$16] !== styleName &&\n          setValueForStyle(node, styleName$16, styleName);\n  } else\n    for (var styleName$17 in styles)\n      styles.hasOwnProperty(styleName$17) &&\n        setValueForStyle(node, styleName$17, styles[styleName$17]);\n}\nfunction isCustomElement(tagName) {\n  if (-1 === tagName.indexOf(\"-\")) return !1;\n  switch (tagName) {\n    case \"annotation-xml\":\n    case \"color-profile\":\n    case \"font-face\":\n    case \"font-face-src\":\n    case \"font-face-uri\":\n    case \"font-face-format\":\n    case \"font-face-name\":\n    case \"missing-glyph\":\n      return !1;\n    default:\n      return !0;\n  }\n}\nvar aliases = new Map([\n    [\"acceptCharset\", \"accept-charset\"],\n    [\"htmlFor\", \"for\"],\n    [\"httpEquiv\", \"http-equiv\"],\n    [\"crossOrigin\", \"crossorigin\"],\n    [\"accentHeight\", \"accent-height\"],\n    [\"alignmentBaseline\", \"alignment-baseline\"],\n    [\"arabicForm\", \"arabic-form\"],\n    [\"baselineShift\", \"baseline-shift\"],\n    [\"capHeight\", \"cap-height\"],\n    [\"clipPath\", \"clip-path\"],\n    [\"clipRule\", \"clip-rule\"],\n    [\"colorInterpolation\", \"color-interpolation\"],\n    [\"colorInterpolationFilters\", \"color-interpolation-filters\"],\n    [\"colorProfile\", \"color-profile\"],\n    [\"colorRendering\", \"color-rendering\"],\n    [\"dominantBaseline\", \"dominant-baseline\"],\n    [\"enableBackground\", \"enable-background\"],\n    [\"fillOpacity\", \"fill-opacity\"],\n    [\"fillRule\", \"fill-rule\"],\n    [\"floodColor\", \"flood-color\"],\n    [\"floodOpacity\", \"flood-opacity\"],\n    [\"fontFamily\", \"font-family\"],\n    [\"fontSize\", \"font-size\"],\n    [\"fontSizeAdjust\", \"font-size-adjust\"],\n    [\"fontStretch\", \"font-stretch\"],\n    [\"fontStyle\", \"font-style\"],\n    [\"fontVariant\", \"font-variant\"],\n    [\"fontWeight\", \"font-weight\"],\n    [\"glyphName\", \"glyph-name\"],\n    [\"glyphOrientationHorizontal\", \"glyph-orientation-horizontal\"],\n    [\"glyphOrientationVertical\", \"glyph-orientation-vertical\"],\n    [\"horizAdvX\", \"horiz-adv-x\"],\n    [\"horizOriginX\", \"horiz-origin-x\"],\n    [\"imageRendering\", \"image-rendering\"],\n    [\"letterSpacing\", \"letter-spacing\"],\n    [\"lightingColor\", \"lighting-color\"],\n    [\"markerEnd\", \"marker-end\"],\n    [\"markerMid\", \"marker-mid\"],\n    [\"markerStart\", \"marker-start\"],\n    [\"overlinePosition\", \"overline-position\"],\n    [\"overlineThickness\", \"overline-thickness\"],\n    [\"paintOrder\", \"paint-order\"],\n    [\"panose-1\", \"panose-1\"],\n    [\"pointerEvents\", \"pointer-events\"],\n    [\"renderingIntent\", \"rendering-intent\"],\n    [\"shapeRendering\", \"shape-rendering\"],\n    [\"stopColor\", \"stop-color\"],\n    [\"stopOpacity\", \"stop-opacity\"],\n    [\"strikethroughPosition\", \"strikethrough-position\"],\n    [\"strikethroughThickness\", \"strikethrough-thickness\"],\n    [\"strokeDasharray\", \"stroke-dasharray\"],\n    [\"strokeDashoffset\", \"stroke-dashoffset\"],\n    [\"strokeLinecap\", \"stroke-linecap\"],\n    [\"strokeLinejoin\", \"stroke-linejoin\"],\n    [\"strokeMiterlimit\", \"stroke-miterlimit\"],\n    [\"strokeOpacity\", \"stroke-opacity\"],\n    [\"strokeWidth\", \"stroke-width\"],\n    [\"textAnchor\", \"text-anchor\"],\n    [\"textDecoration\", \"text-decoration\"],\n    [\"textRendering\", \"text-rendering\"],\n    [\"transformOrigin\", \"transform-origin\"],\n    [\"underlinePosition\", \"underline-position\"],\n    [\"underlineThickness\", \"underline-thickness\"],\n    [\"unicodeBidi\", \"unicode-bidi\"],\n    [\"unicodeRange\", \"unicode-range\"],\n    [\"unitsPerEm\", \"units-per-em\"],\n    [\"vAlphabetic\", \"v-alphabetic\"],\n    [\"vHanging\", \"v-hanging\"],\n    [\"vIdeographic\", \"v-ideographic\"],\n    [\"vMathematical\", \"v-mathematical\"],\n    [\"vectorEffect\", \"vector-effect\"],\n    [\"vertAdvY\", \"vert-adv-y\"],\n    [\"vertOriginX\", \"vert-origin-x\"],\n    [\"vertOriginY\", \"vert-origin-y\"],\n    [\"wordSpacing\", \"word-spacing\"],\n    [\"writingMode\", \"writing-mode\"],\n    [\"xmlnsXlink\", \"xmlns:xlink\"],\n    [\"xHeight\", \"x-height\"]\n  ]),\n  isJavaScriptProtocol =\n    /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i;\nfunction sanitizeURL(url) {\n  return isJavaScriptProtocol.test(\"\" + url)\n    ? \"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\"\n    : url;\n}\nfunction noop$1() {}\nvar currentReplayingEvent = null;\nfunction getEventTarget(nativeEvent) {\n  nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;\n  nativeEvent.correspondingUseElement &&\n    (nativeEvent = nativeEvent.correspondingUseElement);\n  return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;\n}\nvar restoreTarget = null,\n  restoreQueue = null;\nfunction restoreStateOfTarget(target) {\n  var internalInstance = getInstanceFromNode(target);\n  if (internalInstance && (target = internalInstance.stateNode)) {\n    var props = target[internalPropsKey] || null;\n    a: switch (((target = internalInstance.stateNode), internalInstance.type)) {\n      case \"input\":\n        updateInput(\n          target,\n          props.value,\n          props.defaultValue,\n          props.defaultValue,\n          props.checked,\n          props.defaultChecked,\n          props.type,\n          props.name\n        );\n        internalInstance = props.name;\n        if (\"radio\" === props.type && null != internalInstance) {\n          for (props = target; props.parentNode; ) props = props.parentNode;\n          props = props.querySelectorAll(\n            'input[name=\"' +\n              escapeSelectorAttributeValueInsideDoubleQuotes(\n                \"\" + internalInstance\n              ) +\n              '\"][type=\"radio\"]'\n          );\n          for (\n            internalInstance = 0;\n            internalInstance < props.length;\n            internalInstance++\n          ) {\n            var otherNode = props[internalInstance];\n            if (otherNode !== target && otherNode.form === target.form) {\n              var otherProps = otherNode[internalPropsKey] || null;\n              if (!otherProps) throw Error(formatProdErrorMessage(90));\n              updateInput(\n                otherNode,\n                otherProps.value,\n                otherProps.defaultValue,\n                otherProps.defaultValue,\n                otherProps.checked,\n                otherProps.defaultChecked,\n                otherProps.type,\n                otherProps.name\n              );\n            }\n          }\n          for (\n            internalInstance = 0;\n            internalInstance < props.length;\n            internalInstance++\n          )\n            (otherNode = props[internalInstance]),\n              otherNode.form === target.form && updateValueIfChanged(otherNode);\n        }\n        break a;\n      case \"textarea\":\n        updateTextarea(target, props.value, props.defaultValue);\n        break a;\n      case \"select\":\n        (internalInstance = props.value),\n          null != internalInstance &&\n            updateOptions(target, !!props.multiple, internalInstance, !1);\n    }\n  }\n}\nvar isInsideEventHandler = !1;\nfunction batchedUpdates$1(fn, a, b) {\n  if (isInsideEventHandler) return fn(a, b);\n  isInsideEventHandler = !0;\n  try {\n    var JSCompiler_inline_result = fn(a);\n    return JSCompiler_inline_result;\n  } finally {\n    if (\n      ((isInsideEventHandler = !1),\n      null !== restoreTarget || null !== restoreQueue)\n    )\n      if (\n        (flushSyncWork$1(),\n        restoreTarget &&\n          ((a = restoreTarget),\n          (fn = restoreQueue),\n          (restoreQueue = restoreTarget = null),\n          restoreStateOfTarget(a),\n          fn))\n      )\n        for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);\n  }\n}\nfunction getListener(inst, registrationName) {\n  var stateNode = inst.stateNode;\n  if (null === stateNode) return null;\n  var props = stateNode[internalPropsKey] || null;\n  if (null === props) return null;\n  stateNode = props[registrationName];\n  a: switch (registrationName) {\n    case \"onClick\":\n    case \"onClickCapture\":\n    case \"onDoubleClick\":\n    case \"onDoubleClickCapture\":\n    case \"onMouseDown\":\n    case \"onMouseDownCapture\":\n    case \"onMouseMove\":\n    case \"onMouseMoveCapture\":\n    case \"onMouseUp\":\n    case \"onMouseUpCapture\":\n    case \"onMouseEnter\":\n      (props = !props.disabled) ||\n        ((inst = inst.type),\n        (props = !(\n          \"button\" === inst ||\n          \"input\" === inst ||\n          \"select\" === inst ||\n          \"textarea\" === inst\n        )));\n      inst = !props;\n      break a;\n    default:\n      inst = !1;\n  }\n  if (inst) return null;\n  if (stateNode && \"function\" !== typeof stateNode)\n    throw Error(\n      formatProdErrorMessage(231, registrationName, typeof stateNode)\n    );\n  return stateNode;\n}\nvar canUseDOM = !(\n    \"undefined\" === typeof window ||\n    \"undefined\" === typeof window.document ||\n    \"undefined\" === typeof window.document.createElement\n  ),\n  passiveBrowserEventsSupported = !1;\nif (canUseDOM)\n  try {\n    var options = {};\n    Object.defineProperty(options, \"passive\", {\n      get: function () {\n        passiveBrowserEventsSupported = !0;\n      }\n    });\n    window.addEventListener(\"test\", options, options);\n    window.removeEventListener(\"test\", options, options);\n  } catch (e) {\n    passiveBrowserEventsSupported = !1;\n  }\nvar root = null,\n  startText = null,\n  fallbackText = null;\nfunction getData() {\n  if (fallbackText) return fallbackText;\n  var start,\n    startValue = startText,\n    startLength = startValue.length,\n    end,\n    endValue = \"value\" in root ? root.value : root.textContent,\n    endLength = endValue.length;\n  for (\n    start = 0;\n    start < startLength && startValue[start] === endValue[start];\n    start++\n  );\n  var minEnd = startLength - start;\n  for (\n    end = 1;\n    end <= minEnd &&\n    startValue[startLength - end] === endValue[endLength - end];\n    end++\n  );\n  return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));\n}\nfunction getEventCharCode(nativeEvent) {\n  var keyCode = nativeEvent.keyCode;\n  \"charCode\" in nativeEvent\n    ? ((nativeEvent = nativeEvent.charCode),\n      0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))\n    : (nativeEvent = keyCode);\n  10 === nativeEvent && (nativeEvent = 13);\n  return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;\n}\nfunction functionThatReturnsTrue() {\n  return !0;\n}\nfunction functionThatReturnsFalse() {\n  return !1;\n}\nfunction createSyntheticEvent(Interface) {\n  function SyntheticBaseEvent(\n    reactName,\n    reactEventType,\n    targetInst,\n    nativeEvent,\n    nativeEventTarget\n  ) {\n    this._reactName = reactName;\n    this._targetInst = targetInst;\n    this.type = reactEventType;\n    this.nativeEvent = nativeEvent;\n    this.target = nativeEventTarget;\n    this.currentTarget = null;\n    for (var propName in Interface)\n      Interface.hasOwnProperty(propName) &&\n        ((reactName = Interface[propName]),\n        (this[propName] = reactName\n          ? reactName(nativeEvent)\n          : nativeEvent[propName]));\n    this.isDefaultPrevented = (\n      null != nativeEvent.defaultPrevented\n        ? nativeEvent.defaultPrevented\n        : !1 === nativeEvent.returnValue\n    )\n      ? functionThatReturnsTrue\n      : functionThatReturnsFalse;\n    this.isPropagationStopped = functionThatReturnsFalse;\n    return this;\n  }\n  assign(SyntheticBaseEvent.prototype, {\n    preventDefault: function () {\n      this.defaultPrevented = !0;\n      var event = this.nativeEvent;\n      event &&\n        (event.preventDefault\n          ? event.preventDefault()\n          : \"unknown\" !== typeof event.returnValue && (event.returnValue = !1),\n        (this.isDefaultPrevented = functionThatReturnsTrue));\n    },\n    stopPropagation: function () {\n      var event = this.nativeEvent;\n      event &&\n        (event.stopPropagation\n          ? event.stopPropagation()\n          : \"unknown\" !== typeof event.cancelBubble &&\n            (event.cancelBubble = !0),\n        (this.isPropagationStopped = functionThatReturnsTrue));\n    },\n    persist: function () {},\n    isPersistent: functionThatReturnsTrue\n  });\n  return SyntheticBaseEvent;\n}\nvar EventInterface = {\n    eventPhase: 0,\n    bubbles: 0,\n    cancelable: 0,\n    timeStamp: function (event) {\n      return event.timeStamp || Date.now();\n    },\n    defaultPrevented: 0,\n    isTrusted: 0\n  },\n  SyntheticEvent = createSyntheticEvent(EventInterface),\n  UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),\n  SyntheticUIEvent = createSyntheticEvent(UIEventInterface),\n  lastMovementX,\n  lastMovementY,\n  lastMouseEvent,\n  MouseEventInterface = assign({}, UIEventInterface, {\n    screenX: 0,\n    screenY: 0,\n    clientX: 0,\n    clientY: 0,\n    pageX: 0,\n    pageY: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    altKey: 0,\n    metaKey: 0,\n    getModifierState: getEventModifierState,\n    button: 0,\n    buttons: 0,\n    relatedTarget: function (event) {\n      return void 0 === event.relatedTarget\n        ? event.fromElement === event.srcElement\n          ? event.toElement\n          : event.fromElement\n        : event.relatedTarget;\n    },\n    movementX: function (event) {\n      if (\"movementX\" in event) return event.movementX;\n      event !== lastMouseEvent &&\n        (lastMouseEvent && \"mousemove\" === event.type\n          ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),\n            (lastMovementY = event.screenY - lastMouseEvent.screenY))\n          : (lastMovementY = lastMovementX = 0),\n        (lastMouseEvent = event));\n      return lastMovementX;\n    },\n    movementY: function (event) {\n      return \"movementY\" in event ? event.movementY : lastMovementY;\n    }\n  }),\n  SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),\n  DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),\n  SyntheticDragEvent = createSyntheticEvent(DragEventInterface),\n  FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),\n  SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),\n  AnimationEventInterface = assign({}, EventInterface, {\n    animationName: 0,\n    elapsedTime: 0,\n    pseudoElement: 0\n  }),\n  SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),\n  ClipboardEventInterface = assign({}, EventInterface, {\n    clipboardData: function (event) {\n      return \"clipboardData\" in event\n        ? event.clipboardData\n        : window.clipboardData;\n    }\n  }),\n  SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),\n  CompositionEventInterface = assign({}, EventInterface, { data: 0 }),\n  SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface),\n  normalizeKey = {\n    Esc: \"Escape\",\n    Spacebar: \" \",\n    Left: \"ArrowLeft\",\n    Up: \"ArrowUp\",\n    Right: \"ArrowRight\",\n    Down: \"ArrowDown\",\n    Del: \"Delete\",\n    Win: \"OS\",\n    Menu: \"ContextMenu\",\n    Apps: \"ContextMenu\",\n    Scroll: \"ScrollLock\",\n    MozPrintableKey: \"Unidentified\"\n  },\n  translateToKey = {\n    8: \"Backspace\",\n    9: \"Tab\",\n    12: \"Clear\",\n    13: \"Enter\",\n    16: \"Shift\",\n    17: \"Control\",\n    18: \"Alt\",\n    19: \"Pause\",\n    20: \"CapsLock\",\n    27: \"Escape\",\n    32: \" \",\n    33: \"PageUp\",\n    34: \"PageDown\",\n    35: \"End\",\n    36: \"Home\",\n    37: \"ArrowLeft\",\n    38: \"ArrowUp\",\n    39: \"ArrowRight\",\n    40: \"ArrowDown\",\n    45: \"Insert\",\n    46: \"Delete\",\n    112: \"F1\",\n    113: \"F2\",\n    114: \"F3\",\n    115: \"F4\",\n    116: \"F5\",\n    117: \"F6\",\n    118: \"F7\",\n    119: \"F8\",\n    120: \"F9\",\n    121: \"F10\",\n    122: \"F11\",\n    123: \"F12\",\n    144: \"NumLock\",\n    145: \"ScrollLock\",\n    224: \"Meta\"\n  },\n  modifierKeyToProp = {\n    Alt: \"altKey\",\n    Control: \"ctrlKey\",\n    Meta: \"metaKey\",\n    Shift: \"shiftKey\"\n  };\nfunction modifierStateGetter(keyArg) {\n  var nativeEvent = this.nativeEvent;\n  return nativeEvent.getModifierState\n    ? nativeEvent.getModifierState(keyArg)\n    : (keyArg = modifierKeyToProp[keyArg])\n      ? !!nativeEvent[keyArg]\n      : !1;\n}\nfunction getEventModifierState() {\n  return modifierStateGetter;\n}\nvar KeyboardEventInterface = assign({}, UIEventInterface, {\n    key: function (nativeEvent) {\n      if (nativeEvent.key) {\n        var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n        if (\"Unidentified\" !== key) return key;\n      }\n      return \"keypress\" === nativeEvent.type\n        ? ((nativeEvent = getEventCharCode(nativeEvent)),\n          13 === nativeEvent ? \"Enter\" : String.fromCharCode(nativeEvent))\n        : \"keydown\" === nativeEvent.type || \"keyup\" === nativeEvent.type\n          ? translateToKey[nativeEvent.keyCode] || \"Unidentified\"\n          : \"\";\n    },\n    code: 0,\n    location: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    altKey: 0,\n    metaKey: 0,\n    repeat: 0,\n    locale: 0,\n    getModifierState: getEventModifierState,\n    charCode: function (event) {\n      return \"keypress\" === event.type ? getEventCharCode(event) : 0;\n    },\n    keyCode: function (event) {\n      return \"keydown\" === event.type || \"keyup\" === event.type\n        ? event.keyCode\n        : 0;\n    },\n    which: function (event) {\n      return \"keypress\" === event.type\n        ? getEventCharCode(event)\n        : \"keydown\" === event.type || \"keyup\" === event.type\n          ? event.keyCode\n          : 0;\n    }\n  }),\n  SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),\n  PointerEventInterface = assign({}, MouseEventInterface, {\n    pointerId: 0,\n    width: 0,\n    height: 0,\n    pressure: 0,\n    tangentialPressure: 0,\n    tiltX: 0,\n    tiltY: 0,\n    twist: 0,\n    pointerType: 0,\n    isPrimary: 0\n  }),\n  SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),\n  TouchEventInterface = assign({}, UIEventInterface, {\n    touches: 0,\n    targetTouches: 0,\n    changedTouches: 0,\n    altKey: 0,\n    metaKey: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    getModifierState: getEventModifierState\n  }),\n  SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),\n  TransitionEventInterface = assign({}, EventInterface, {\n    propertyName: 0,\n    elapsedTime: 0,\n    pseudoElement: 0\n  }),\n  SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),\n  WheelEventInterface = assign({}, MouseEventInterface, {\n    deltaX: function (event) {\n      return \"deltaX\" in event\n        ? event.deltaX\n        : \"wheelDeltaX\" in event\n          ? -event.wheelDeltaX\n          : 0;\n    },\n    deltaY: function (event) {\n      return \"deltaY\" in event\n        ? event.deltaY\n        : \"wheelDeltaY\" in event\n          ? -event.wheelDeltaY\n          : \"wheelDelta\" in event\n            ? -event.wheelDelta\n            : 0;\n    },\n    deltaZ: 0,\n    deltaMode: 0\n  }),\n  SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),\n  ToggleEventInterface = assign({}, EventInterface, {\n    newState: 0,\n    oldState: 0\n  }),\n  SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),\n  END_KEYCODES = [9, 13, 27, 32],\n  canUseCompositionEvent = canUseDOM && \"CompositionEvent\" in window,\n  documentMode = null;\ncanUseDOM &&\n  \"documentMode\" in document &&\n  (documentMode = document.documentMode);\nvar canUseTextInputEvent = canUseDOM && \"TextEvent\" in window && !documentMode,\n  useFallbackCompositionData =\n    canUseDOM &&\n    (!canUseCompositionEvent ||\n      (documentMode && 8 < documentMode && 11 >= documentMode)),\n  SPACEBAR_CHAR = String.fromCharCode(32),\n  hasSpaceKeypress = !1;\nfunction isFallbackCompositionEnd(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"keyup\":\n      return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);\n    case \"keydown\":\n      return 229 !== nativeEvent.keyCode;\n    case \"keypress\":\n    case \"mousedown\":\n    case \"focusout\":\n      return !0;\n    default:\n      return !1;\n  }\n}\nfunction getDataFromCustomEvent(nativeEvent) {\n  nativeEvent = nativeEvent.detail;\n  return \"object\" === typeof nativeEvent && \"data\" in nativeEvent\n    ? nativeEvent.data\n    : null;\n}\nvar isComposing = !1;\nfunction getNativeBeforeInputChars(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"compositionend\":\n      return getDataFromCustomEvent(nativeEvent);\n    case \"keypress\":\n      if (32 !== nativeEvent.which) return null;\n      hasSpaceKeypress = !0;\n      return SPACEBAR_CHAR;\n    case \"textInput\":\n      return (\n        (domEventName = nativeEvent.data),\n        domEventName === SPACEBAR_CHAR && hasSpaceKeypress ? null : domEventName\n      );\n    default:\n      return null;\n  }\n}\nfunction getFallbackBeforeInputChars(domEventName, nativeEvent) {\n  if (isComposing)\n    return \"compositionend\" === domEventName ||\n      (!canUseCompositionEvent &&\n        isFallbackCompositionEnd(domEventName, nativeEvent))\n      ? ((domEventName = getData()),\n        (fallbackText = startText = root = null),\n        (isComposing = !1),\n        domEventName)\n      : null;\n  switch (domEventName) {\n    case \"paste\":\n      return null;\n    case \"keypress\":\n      if (\n        !(nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) ||\n        (nativeEvent.ctrlKey && nativeEvent.altKey)\n      ) {\n        if (nativeEvent.char && 1 < nativeEvent.char.length)\n          return nativeEvent.char;\n        if (nativeEvent.which) return String.fromCharCode(nativeEvent.which);\n      }\n      return null;\n    case \"compositionend\":\n      return useFallbackCompositionData && \"ko\" !== nativeEvent.locale\n        ? null\n        : nativeEvent.data;\n    default:\n      return null;\n  }\n}\nvar supportedInputTypes = {\n  color: !0,\n  date: !0,\n  datetime: !0,\n  \"datetime-local\": !0,\n  email: !0,\n  month: !0,\n  number: !0,\n  password: !0,\n  range: !0,\n  search: !0,\n  tel: !0,\n  text: !0,\n  time: !0,\n  url: !0,\n  week: !0\n};\nfunction isTextInputElement(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return \"input\" === nodeName\n    ? !!supportedInputTypes[elem.type]\n    : \"textarea\" === nodeName\n      ? !0\n      : !1;\n}\nfunction createAndAccumulateChangeEvent(\n  dispatchQueue,\n  inst,\n  nativeEvent,\n  target\n) {\n  restoreTarget\n    ? restoreQueue\n      ? restoreQueue.push(target)\n      : (restoreQueue = [target])\n    : (restoreTarget = target);\n  inst = accumulateTwoPhaseListeners(inst, \"onChange\");\n  0 < inst.length &&\n    ((nativeEvent = new SyntheticEvent(\n      \"onChange\",\n      \"change\",\n      null,\n      nativeEvent,\n      target\n    )),\n    dispatchQueue.push({ event: nativeEvent, listeners: inst }));\n}\nvar activeElement$1 = null,\n  activeElementInst$1 = null;\nfunction runEventInBatch(dispatchQueue) {\n  processDispatchQueue(dispatchQueue, 0);\n}\nfunction getInstIfValueChanged(targetInst) {\n  var targetNode = getNodeFromInstance(targetInst);\n  if (updateValueIfChanged(targetNode)) return targetInst;\n}\nfunction getTargetInstForChangeEvent(domEventName, targetInst) {\n  if (\"change\" === domEventName) return targetInst;\n}\nvar isInputEventSupported = !1;\nif (canUseDOM) {\n  var JSCompiler_inline_result$jscomp$286;\n  if (canUseDOM) {\n    var isSupported$jscomp$inline_427 = \"oninput\" in document;\n    if (!isSupported$jscomp$inline_427) {\n      var element$jscomp$inline_428 = document.createElement(\"div\");\n      element$jscomp$inline_428.setAttribute(\"oninput\", \"return;\");\n      isSupported$jscomp$inline_427 =\n        \"function\" === typeof element$jscomp$inline_428.oninput;\n    }\n    JSCompiler_inline_result$jscomp$286 = isSupported$jscomp$inline_427;\n  } else JSCompiler_inline_result$jscomp$286 = !1;\n  isInputEventSupported =\n    JSCompiler_inline_result$jscomp$286 &&\n    (!document.documentMode || 9 < document.documentMode);\n}\nfunction stopWatchingForValueChange() {\n  activeElement$1 &&\n    (activeElement$1.detachEvent(\"onpropertychange\", handlePropertyChange),\n    (activeElementInst$1 = activeElement$1 = null));\n}\nfunction handlePropertyChange(nativeEvent) {\n  if (\n    \"value\" === nativeEvent.propertyName &&\n    getInstIfValueChanged(activeElementInst$1)\n  ) {\n    var dispatchQueue = [];\n    createAndAccumulateChangeEvent(\n      dispatchQueue,\n      activeElementInst$1,\n      nativeEvent,\n      getEventTarget(nativeEvent)\n    );\n    batchedUpdates$1(runEventInBatch, dispatchQueue);\n  }\n}\nfunction handleEventsForInputEventPolyfill(domEventName, target, targetInst) {\n  \"focusin\" === domEventName\n    ? (stopWatchingForValueChange(),\n      (activeElement$1 = target),\n      (activeElementInst$1 = targetInst),\n      activeElement$1.attachEvent(\"onpropertychange\", handlePropertyChange))\n    : \"focusout\" === domEventName && stopWatchingForValueChange();\n}\nfunction getTargetInstForInputEventPolyfill(domEventName) {\n  if (\n    \"selectionchange\" === domEventName ||\n    \"keyup\" === domEventName ||\n    \"keydown\" === domEventName\n  )\n    return getInstIfValueChanged(activeElementInst$1);\n}\nfunction getTargetInstForClickEvent(domEventName, targetInst) {\n  if (\"click\" === domEventName) return getInstIfValueChanged(targetInst);\n}\nfunction getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n  if (\"input\" === domEventName || \"change\" === domEventName)\n    return getInstIfValueChanged(targetInst);\n}\nfunction is(x, y) {\n  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is;\nfunction shallowEqual(objA, objB) {\n  if (objectIs(objA, objB)) return !0;\n  if (\n    \"object\" !== typeof objA ||\n    null === objA ||\n    \"object\" !== typeof objB ||\n    null === objB\n  )\n    return !1;\n  var keysA = Object.keys(objA),\n    keysB = Object.keys(objB);\n  if (keysA.length !== keysB.length) return !1;\n  for (keysB = 0; keysB < keysA.length; keysB++) {\n    var currentKey = keysA[keysB];\n    if (\n      !hasOwnProperty.call(objB, currentKey) ||\n      !objectIs(objA[currentKey], objB[currentKey])\n    )\n      return !1;\n  }\n  return !0;\n}\nfunction getLeafNode(node) {\n  for (; node && node.firstChild; ) node = node.firstChild;\n  return node;\n}\nfunction getNodeForCharacterOffset(root, offset) {\n  var node = getLeafNode(root);\n  root = 0;\n  for (var nodeEnd; node; ) {\n    if (3 === node.nodeType) {\n      nodeEnd = root + node.textContent.length;\n      if (root <= offset && nodeEnd >= offset)\n        return { node: node, offset: offset - root };\n      root = nodeEnd;\n    }\n    a: {\n      for (; node; ) {\n        if (node.nextSibling) {\n          node = node.nextSibling;\n          break a;\n        }\n        node = node.parentNode;\n      }\n      node = void 0;\n    }\n    node = getLeafNode(node);\n  }\n}\nfunction containsNode(outerNode, innerNode) {\n  return outerNode && innerNode\n    ? outerNode === innerNode\n      ? !0\n      : outerNode && 3 === outerNode.nodeType\n        ? !1\n        : innerNode && 3 === innerNode.nodeType\n          ? containsNode(outerNode, innerNode.parentNode)\n          : \"contains\" in outerNode\n            ? outerNode.contains(innerNode)\n            : outerNode.compareDocumentPosition\n              ? !!(outerNode.compareDocumentPosition(innerNode) & 16)\n              : !1\n    : !1;\n}\nfunction getActiveElementDeep(containerInfo) {\n  containerInfo =\n    null != containerInfo &&\n    null != containerInfo.ownerDocument &&\n    null != containerInfo.ownerDocument.defaultView\n      ? containerInfo.ownerDocument.defaultView\n      : window;\n  for (\n    var element = getActiveElement(containerInfo.document);\n    element instanceof containerInfo.HTMLIFrameElement;\n\n  ) {\n    try {\n      var JSCompiler_inline_result =\n        \"string\" === typeof element.contentWindow.location.href;\n    } catch (err) {\n      JSCompiler_inline_result = !1;\n    }\n    if (JSCompiler_inline_result) containerInfo = element.contentWindow;\n    else break;\n    element = getActiveElement(containerInfo.document);\n  }\n  return element;\n}\nfunction hasSelectionCapabilities(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return (\n    nodeName &&\n    ((\"input\" === nodeName &&\n      (\"text\" === elem.type ||\n        \"search\" === elem.type ||\n        \"tel\" === elem.type ||\n        \"url\" === elem.type ||\n        \"password\" === elem.type)) ||\n      \"textarea\" === nodeName ||\n      \"true\" === elem.contentEditable)\n  );\n}\nvar skipSelectionChangeEvent =\n    canUseDOM && \"documentMode\" in document && 11 >= document.documentMode,\n  activeElement = null,\n  activeElementInst = null,\n  lastSelection = null,\n  mouseDown = !1;\nfunction constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {\n  var doc =\n    nativeEventTarget.window === nativeEventTarget\n      ? nativeEventTarget.document\n      : 9 === nativeEventTarget.nodeType\n        ? nativeEventTarget\n        : nativeEventTarget.ownerDocument;\n  mouseDown ||\n    null == activeElement ||\n    activeElement !== getActiveElement(doc) ||\n    ((doc = activeElement),\n    \"selectionStart\" in doc && hasSelectionCapabilities(doc)\n      ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })\n      : ((doc = (\n          (doc.ownerDocument && doc.ownerDocument.defaultView) ||\n          window\n        ).getSelection()),\n        (doc = {\n          anchorNode: doc.anchorNode,\n          anchorOffset: doc.anchorOffset,\n          focusNode: doc.focusNode,\n          focusOffset: doc.focusOffset\n        })),\n    (lastSelection && shallowEqual(lastSelection, doc)) ||\n      ((lastSelection = doc),\n      (doc = accumulateTwoPhaseListeners(activeElementInst, \"onSelect\")),\n      0 < doc.length &&\n        ((nativeEvent = new SyntheticEvent(\n          \"onSelect\",\n          \"select\",\n          null,\n          nativeEvent,\n          nativeEventTarget\n        )),\n        dispatchQueue.push({ event: nativeEvent, listeners: doc }),\n        (nativeEvent.target = activeElement))));\n}\nfunction makePrefixMap(styleProp, eventName) {\n  var prefixes = {};\n  prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n  prefixes[\"Webkit\" + styleProp] = \"webkit\" + eventName;\n  prefixes[\"Moz\" + styleProp] = \"moz\" + eventName;\n  return prefixes;\n}\nvar vendorPrefixes = {\n    animationend: makePrefixMap(\"Animation\", \"AnimationEnd\"),\n    animationiteration: makePrefixMap(\"Animation\", \"AnimationIteration\"),\n    animationstart: makePrefixMap(\"Animation\", \"AnimationStart\"),\n    transitionrun: makePrefixMap(\"Transition\", \"TransitionRun\"),\n    transitionstart: makePrefixMap(\"Transition\", \"TransitionStart\"),\n    transitioncancel: makePrefixMap(\"Transition\", \"TransitionCancel\"),\n    transitionend: makePrefixMap(\"Transition\", \"TransitionEnd\")\n  },\n  prefixedEventNames = {},\n  style = {};\ncanUseDOM &&\n  ((style = document.createElement(\"div\").style),\n  \"AnimationEvent\" in window ||\n    (delete vendorPrefixes.animationend.animation,\n    delete vendorPrefixes.animationiteration.animation,\n    delete vendorPrefixes.animationstart.animation),\n  \"TransitionEvent\" in window ||\n    delete vendorPrefixes.transitionend.transition);\nfunction getVendorPrefixedEventName(eventName) {\n  if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];\n  if (!vendorPrefixes[eventName]) return eventName;\n  var prefixMap = vendorPrefixes[eventName],\n    styleProp;\n  for (styleProp in prefixMap)\n    if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)\n      return (prefixedEventNames[eventName] = prefixMap[styleProp]);\n  return eventName;\n}\nvar ANIMATION_END = getVendorPrefixedEventName(\"animationend\"),\n  ANIMATION_ITERATION = getVendorPrefixedEventName(\"animationiteration\"),\n  ANIMATION_START = getVendorPrefixedEventName(\"animationstart\"),\n  TRANSITION_RUN = getVendorPrefixedEventName(\"transitionrun\"),\n  TRANSITION_START = getVendorPrefixedEventName(\"transitionstart\"),\n  TRANSITION_CANCEL = getVendorPrefixedEventName(\"transitioncancel\"),\n  TRANSITION_END = getVendorPrefixedEventName(\"transitionend\"),\n  topLevelEventsToReactNames = new Map(),\n  simpleEventPluginEvents =\n    \"abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\n      \" \"\n    );\nsimpleEventPluginEvents.push(\"scrollEnd\");\nfunction registerSimpleEvent(domEventName, reactName) {\n  topLevelEventsToReactNames.set(domEventName, reactName);\n  registerTwoPhaseEvent(reactName, [domEventName]);\n}\nvar reportGlobalError =\n    \"function\" === typeof reportError\n      ? reportError\n      : function (error) {\n          if (\n            \"object\" === typeof window &&\n            \"function\" === typeof window.ErrorEvent\n          ) {\n            var event = new window.ErrorEvent(\"error\", {\n              bubbles: !0,\n              cancelable: !0,\n              message:\n                \"object\" === typeof error &&\n                null !== error &&\n                \"string\" === typeof error.message\n                  ? String(error.message)\n                  : String(error),\n              error: error\n            });\n            if (!window.dispatchEvent(event)) return;\n          } else if (\n            \"object\" === typeof process &&\n            \"function\" === typeof process.emit\n          ) {\n            process.emit(\"uncaughtException\", error);\n            return;\n          }\n          console.error(error);\n        },\n  concurrentQueues = [],\n  concurrentQueuesIndex = 0,\n  concurrentlyUpdatedLanes = 0;\nfunction finishQueueingConcurrentUpdates() {\n  for (\n    var endIndex = concurrentQueuesIndex,\n      i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);\n    i < endIndex;\n\n  ) {\n    var fiber = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var queue = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var update = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var lane = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    if (null !== queue && null !== update) {\n      var pending = queue.pending;\n      null === pending\n        ? (update.next = update)\n        : ((update.next = pending.next), (pending.next = update));\n      queue.pending = update;\n    }\n    0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);\n  }\n}\nfunction enqueueUpdate$1(fiber, queue, update, lane) {\n  concurrentQueues[concurrentQueuesIndex++] = fiber;\n  concurrentQueues[concurrentQueuesIndex++] = queue;\n  concurrentQueues[concurrentQueuesIndex++] = update;\n  concurrentQueues[concurrentQueuesIndex++] = lane;\n  concurrentlyUpdatedLanes |= lane;\n  fiber.lanes |= lane;\n  fiber = fiber.alternate;\n  null !== fiber && (fiber.lanes |= lane);\n}\nfunction enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n  enqueueUpdate$1(fiber, queue, update, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction enqueueConcurrentRenderForLane(fiber, lane) {\n  enqueueUpdate$1(fiber, null, null, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {\n  sourceFiber.lanes |= lane;\n  var alternate = sourceFiber.alternate;\n  null !== alternate && (alternate.lanes |= lane);\n  for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )\n    (parent.childLanes |= lane),\n      (alternate = parent.alternate),\n      null !== alternate && (alternate.childLanes |= lane),\n      22 === parent.tag &&\n        ((sourceFiber = parent.stateNode),\n        null === sourceFiber || sourceFiber._visibility & 1 || (isHidden = !0)),\n      (sourceFiber = parent),\n      (parent = parent.return);\n  return 3 === sourceFiber.tag\n    ? ((parent = sourceFiber.stateNode),\n      isHidden &&\n        null !== update &&\n        ((isHidden = 31 - clz32(lane)),\n        (sourceFiber = parent.hiddenUpdates),\n        (alternate = sourceFiber[isHidden]),\n        null === alternate\n          ? (sourceFiber[isHidden] = [update])\n          : alternate.push(update),\n        (update.lane = lane | 536870912)),\n      parent)\n    : null;\n}\nfunction getRootForUpdatedFiber(sourceFiber) {\n  if (50 < nestedUpdateCount)\n    throw (\n      ((nestedUpdateCount = 0),\n      (rootWithNestedUpdates = null),\n      Error(formatProdErrorMessage(185)))\n    );\n  for (var parent = sourceFiber.return; null !== parent; )\n    (sourceFiber = parent), (parent = sourceFiber.return);\n  return 3 === sourceFiber.tag ? sourceFiber.stateNode : null;\n}\nvar emptyContextObject = {};\nfunction FiberNode(tag, pendingProps, key, mode) {\n  this.tag = tag;\n  this.key = key;\n  this.sibling =\n    this.child =\n    this.return =\n    this.stateNode =\n    this.type =\n    this.elementType =\n      null;\n  this.index = 0;\n  this.refCleanup = this.ref = null;\n  this.pendingProps = pendingProps;\n  this.dependencies =\n    this.memoizedState =\n    this.updateQueue =\n    this.memoizedProps =\n      null;\n  this.mode = mode;\n  this.subtreeFlags = this.flags = 0;\n  this.deletions = null;\n  this.childLanes = this.lanes = 0;\n  this.alternate = null;\n}\nfunction createFiberImplClass(tag, pendingProps, key, mode) {\n  return new FiberNode(tag, pendingProps, key, mode);\n}\nfunction shouldConstruct(Component) {\n  Component = Component.prototype;\n  return !(!Component || !Component.isReactComponent);\n}\nfunction createWorkInProgress(current, pendingProps) {\n  var workInProgress = current.alternate;\n  null === workInProgress\n    ? ((workInProgress = createFiberImplClass(\n        current.tag,\n        pendingProps,\n        current.key,\n        current.mode\n      )),\n      (workInProgress.elementType = current.elementType),\n      (workInProgress.type = current.type),\n      (workInProgress.stateNode = current.stateNode),\n      (workInProgress.alternate = current),\n      (current.alternate = workInProgress))\n    : ((workInProgress.pendingProps = pendingProps),\n      (workInProgress.type = current.type),\n      (workInProgress.flags = 0),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.deletions = null));\n  workInProgress.flags = current.flags & 65011712;\n  workInProgress.childLanes = current.childLanes;\n  workInProgress.lanes = current.lanes;\n  workInProgress.child = current.child;\n  workInProgress.memoizedProps = current.memoizedProps;\n  workInProgress.memoizedState = current.memoizedState;\n  workInProgress.updateQueue = current.updateQueue;\n  pendingProps = current.dependencies;\n  workInProgress.dependencies =\n    null === pendingProps\n      ? null\n      : { lanes: pendingProps.lanes, firstContext: pendingProps.firstContext };\n  workInProgress.sibling = current.sibling;\n  workInProgress.index = current.index;\n  workInProgress.ref = current.ref;\n  workInProgress.refCleanup = current.refCleanup;\n  return workInProgress;\n}\nfunction resetWorkInProgress(workInProgress, renderLanes) {\n  workInProgress.flags &= 65011714;\n  var current = workInProgress.alternate;\n  null === current\n    ? ((workInProgress.childLanes = 0),\n      (workInProgress.lanes = renderLanes),\n      (workInProgress.child = null),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.memoizedProps = null),\n      (workInProgress.memoizedState = null),\n      (workInProgress.updateQueue = null),\n      (workInProgress.dependencies = null),\n      (workInProgress.stateNode = null))\n    : ((workInProgress.childLanes = current.childLanes),\n      (workInProgress.lanes = current.lanes),\n      (workInProgress.child = current.child),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.deletions = null),\n      (workInProgress.memoizedProps = current.memoizedProps),\n      (workInProgress.memoizedState = current.memoizedState),\n      (workInProgress.updateQueue = current.updateQueue),\n      (workInProgress.type = current.type),\n      (renderLanes = current.dependencies),\n      (workInProgress.dependencies =\n        null === renderLanes\n          ? null\n          : {\n              lanes: renderLanes.lanes,\n              firstContext: renderLanes.firstContext\n            }));\n  return workInProgress;\n}\nfunction createFiberFromTypeAndProps(\n  type,\n  key,\n  pendingProps,\n  owner,\n  mode,\n  lanes\n) {\n  var fiberTag = 0;\n  owner = type;\n  if (\"function\" === typeof type) shouldConstruct(type) && (fiberTag = 1);\n  else if (\"string\" === typeof type)\n    fiberTag = isHostHoistableType(\n      type,\n      pendingProps,\n      contextStackCursor.current\n    )\n      ? 26\n      : \"html\" === type || \"head\" === type || \"body\" === type\n        ? 27\n        : 5;\n  else\n    a: switch (type) {\n      case REACT_ACTIVITY_TYPE:\n        return (\n          (type = createFiberImplClass(31, pendingProps, key, mode)),\n          (type.elementType = REACT_ACTIVITY_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_FRAGMENT_TYPE:\n        return createFiberFromFragment(pendingProps.children, mode, lanes, key);\n      case REACT_STRICT_MODE_TYPE:\n        fiberTag = 8;\n        mode |= 24;\n        break;\n      case REACT_PROFILER_TYPE:\n        return (\n          (type = createFiberImplClass(12, pendingProps, key, mode | 2)),\n          (type.elementType = REACT_PROFILER_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_SUSPENSE_TYPE:\n        return (\n          (type = createFiberImplClass(13, pendingProps, key, mode)),\n          (type.elementType = REACT_SUSPENSE_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_SUSPENSE_LIST_TYPE:\n        return (\n          (type = createFiberImplClass(19, pendingProps, key, mode)),\n          (type.elementType = REACT_SUSPENSE_LIST_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      default:\n        if (\"object\" === typeof type && null !== type)\n          switch (type.$$typeof) {\n            case REACT_CONTEXT_TYPE:\n              fiberTag = 10;\n              break a;\n            case REACT_CONSUMER_TYPE:\n              fiberTag = 9;\n              break a;\n            case REACT_FORWARD_REF_TYPE:\n              fiberTag = 11;\n              break a;\n            case REACT_MEMO_TYPE:\n              fiberTag = 14;\n              break a;\n            case REACT_LAZY_TYPE:\n              fiberTag = 16;\n              owner = null;\n              break a;\n          }\n        fiberTag = 29;\n        pendingProps = Error(\n          formatProdErrorMessage(130, null === type ? \"null\" : typeof type, \"\")\n        );\n        owner = null;\n    }\n  key = createFiberImplClass(fiberTag, pendingProps, key, mode);\n  key.elementType = type;\n  key.type = owner;\n  key.lanes = lanes;\n  return key;\n}\nfunction createFiberFromFragment(elements, mode, lanes, key) {\n  elements = createFiberImplClass(7, elements, key, mode);\n  elements.lanes = lanes;\n  return elements;\n}\nfunction createFiberFromText(content, mode, lanes) {\n  content = createFiberImplClass(6, content, null, mode);\n  content.lanes = lanes;\n  return content;\n}\nfunction createFiberFromDehydratedFragment(dehydratedNode) {\n  var fiber = createFiberImplClass(18, null, null, 0);\n  fiber.stateNode = dehydratedNode;\n  return fiber;\n}\nfunction createFiberFromPortal(portal, mode, lanes) {\n  mode = createFiberImplClass(\n    4,\n    null !== portal.children ? portal.children : [],\n    portal.key,\n    mode\n  );\n  mode.lanes = lanes;\n  mode.stateNode = {\n    containerInfo: portal.containerInfo,\n    pendingChildren: null,\n    implementation: portal.implementation\n  };\n  return mode;\n}\nvar CapturedStacks = new WeakMap();\nfunction createCapturedValueAtFiber(value, source) {\n  if (\"object\" === typeof value && null !== value) {\n    var existing = CapturedStacks.get(value);\n    if (void 0 !== existing) return existing;\n    source = {\n      value: value,\n      source: source,\n      stack: getStackByFiberInDevAndProd(source)\n    };\n    CapturedStacks.set(value, source);\n    return source;\n  }\n  return {\n    value: value,\n    source: source,\n    stack: getStackByFiberInDevAndProd(source)\n  };\n}\nvar forkStack = [],\n  forkStackIndex = 0,\n  treeForkProvider = null,\n  treeForkCount = 0,\n  idStack = [],\n  idStackIndex = 0,\n  treeContextProvider = null,\n  treeContextId = 1,\n  treeContextOverflow = \"\";\nfunction pushTreeFork(workInProgress, totalChildren) {\n  forkStack[forkStackIndex++] = treeForkCount;\n  forkStack[forkStackIndex++] = treeForkProvider;\n  treeForkProvider = workInProgress;\n  treeForkCount = totalChildren;\n}\nfunction pushTreeId(workInProgress, totalChildren, index) {\n  idStack[idStackIndex++] = treeContextId;\n  idStack[idStackIndex++] = treeContextOverflow;\n  idStack[idStackIndex++] = treeContextProvider;\n  treeContextProvider = workInProgress;\n  var baseIdWithLeadingBit = treeContextId;\n  workInProgress = treeContextOverflow;\n  var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;\n  baseIdWithLeadingBit &= ~(1 << baseLength);\n  index += 1;\n  var length = 32 - clz32(totalChildren) + baseLength;\n  if (30 < length) {\n    var numberOfOverflowBits = baseLength - (baseLength % 5);\n    length = (\n      baseIdWithLeadingBit &\n      ((1 << numberOfOverflowBits) - 1)\n    ).toString(32);\n    baseIdWithLeadingBit >>= numberOfOverflowBits;\n    baseLength -= numberOfOverflowBits;\n    treeContextId =\n      (1 << (32 - clz32(totalChildren) + baseLength)) |\n      (index << baseLength) |\n      baseIdWithLeadingBit;\n    treeContextOverflow = length + workInProgress;\n  } else\n    (treeContextId =\n      (1 << length) | (index << baseLength) | baseIdWithLeadingBit),\n      (treeContextOverflow = workInProgress);\n}\nfunction pushMaterializedTreeId(workInProgress) {\n  null !== workInProgress.return &&\n    (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));\n}\nfunction popTreeContext(workInProgress) {\n  for (; workInProgress === treeForkProvider; )\n    (treeForkProvider = forkStack[--forkStackIndex]),\n      (forkStack[forkStackIndex] = null),\n      (treeForkCount = forkStack[--forkStackIndex]),\n      (forkStack[forkStackIndex] = null);\n  for (; workInProgress === treeContextProvider; )\n    (treeContextProvider = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null),\n      (treeContextOverflow = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null),\n      (treeContextId = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null);\n}\nfunction restoreSuspendedTreeContext(workInProgress, suspendedContext) {\n  idStack[idStackIndex++] = treeContextId;\n  idStack[idStackIndex++] = treeContextOverflow;\n  idStack[idStackIndex++] = treeContextProvider;\n  treeContextId = suspendedContext.id;\n  treeContextOverflow = suspendedContext.overflow;\n  treeContextProvider = workInProgress;\n}\nvar hydrationParentFiber = null,\n  nextHydratableInstance = null,\n  isHydrating = !1,\n  hydrationErrors = null,\n  rootOrSingletonContext = !1,\n  HydrationMismatchException = Error(formatProdErrorMessage(519));\nfunction throwOnHydrationMismatch(fiber) {\n  var error = Error(\n    formatProdErrorMessage(\n      418,\n      1 < arguments.length && void 0 !== arguments[1] && arguments[1]\n        ? \"text\"\n        : \"HTML\",\n      \"\"\n    )\n  );\n  queueHydrationError(createCapturedValueAtFiber(error, fiber));\n  throw HydrationMismatchException;\n}\nfunction prepareToHydrateHostInstance(fiber) {\n  var instance = fiber.stateNode,\n    type = fiber.type,\n    props = fiber.memoizedProps;\n  instance[internalInstanceKey] = fiber;\n  instance[internalPropsKey] = props;\n  switch (type) {\n    case \"dialog\":\n      listenToNonDelegatedEvent(\"cancel\", instance);\n      listenToNonDelegatedEvent(\"close\", instance);\n      break;\n    case \"iframe\":\n    case \"object\":\n    case \"embed\":\n      listenToNonDelegatedEvent(\"load\", instance);\n      break;\n    case \"video\":\n    case \"audio\":\n      for (type = 0; type < mediaEventTypes.length; type++)\n        listenToNonDelegatedEvent(mediaEventTypes[type], instance);\n      break;\n    case \"source\":\n      listenToNonDelegatedEvent(\"error\", instance);\n      break;\n    case \"img\":\n    case \"image\":\n    case \"link\":\n      listenToNonDelegatedEvent(\"error\", instance);\n      listenToNonDelegatedEvent(\"load\", instance);\n      break;\n    case \"details\":\n      listenToNonDelegatedEvent(\"toggle\", instance);\n      break;\n    case \"input\":\n      listenToNonDelegatedEvent(\"invalid\", instance);\n      initInput(\n        instance,\n        props.value,\n        props.defaultValue,\n        props.checked,\n        props.defaultChecked,\n        props.type,\n        props.name,\n        !0\n      );\n      break;\n    case \"select\":\n      listenToNonDelegatedEvent(\"invalid\", instance);\n      break;\n    case \"textarea\":\n      listenToNonDelegatedEvent(\"invalid\", instance),\n        initTextarea(instance, props.value, props.defaultValue, props.children);\n  }\n  type = props.children;\n  (\"string\" !== typeof type &&\n    \"number\" !== typeof type &&\n    \"bigint\" !== typeof type) ||\n  instance.textContent === \"\" + type ||\n  !0 === props.suppressHydrationWarning ||\n  checkForUnmatchedText(instance.textContent, type)\n    ? (null != props.popover &&\n        (listenToNonDelegatedEvent(\"beforetoggle\", instance),\n        listenToNonDelegatedEvent(\"toggle\", instance)),\n      null != props.onScroll && listenToNonDelegatedEvent(\"scroll\", instance),\n      null != props.onScrollEnd &&\n        listenToNonDelegatedEvent(\"scrollend\", instance),\n      null != props.onClick && (instance.onclick = noop$1),\n      (instance = !0))\n    : (instance = !1);\n  instance || throwOnHydrationMismatch(fiber, !0);\n}\nfunction popToNextHostParent(fiber) {\n  for (hydrationParentFiber = fiber.return; hydrationParentFiber; )\n    switch (hydrationParentFiber.tag) {\n      case 5:\n      case 31:\n      case 13:\n        rootOrSingletonContext = !1;\n        return;\n      case 27:\n      case 3:\n        rootOrSingletonContext = !0;\n        return;\n      default:\n        hydrationParentFiber = hydrationParentFiber.return;\n    }\n}\nfunction popHydrationState(fiber) {\n  if (fiber !== hydrationParentFiber) return !1;\n  if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1;\n  var tag = fiber.tag,\n    JSCompiler_temp;\n  if ((JSCompiler_temp = 3 !== tag && 27 !== tag)) {\n    if ((JSCompiler_temp = 5 === tag))\n      (JSCompiler_temp = fiber.type),\n        (JSCompiler_temp =\n          !(\"form\" !== JSCompiler_temp && \"button\" !== JSCompiler_temp) ||\n          shouldSetTextContent(fiber.type, fiber.memoizedProps));\n    JSCompiler_temp = !JSCompiler_temp;\n  }\n  JSCompiler_temp && nextHydratableInstance && throwOnHydrationMismatch(fiber);\n  popToNextHostParent(fiber);\n  if (13 === tag) {\n    fiber = fiber.memoizedState;\n    fiber = null !== fiber ? fiber.dehydrated : null;\n    if (!fiber) throw Error(formatProdErrorMessage(317));\n    nextHydratableInstance =\n      getNextHydratableInstanceAfterHydrationBoundary(fiber);\n  } else if (31 === tag) {\n    fiber = fiber.memoizedState;\n    fiber = null !== fiber ? fiber.dehydrated : null;\n    if (!fiber) throw Error(formatProdErrorMessage(317));\n    nextHydratableInstance =\n      getNextHydratableInstanceAfterHydrationBoundary(fiber);\n  } else\n    27 === tag\n      ? ((tag = nextHydratableInstance),\n        isSingletonScope(fiber.type)\n          ? ((fiber = previousHydratableOnEnteringScopedSingleton),\n            (previousHydratableOnEnteringScopedSingleton = null),\n            (nextHydratableInstance = fiber))\n          : (nextHydratableInstance = tag))\n      : (nextHydratableInstance = hydrationParentFiber\n          ? getNextHydratable(fiber.stateNode.nextSibling)\n          : null);\n  return !0;\n}\nfunction resetHydrationState() {\n  nextHydratableInstance = hydrationParentFiber = null;\n  isHydrating = !1;\n}\nfunction upgradeHydrationErrorsToRecoverable() {\n  var queuedErrors = hydrationErrors;\n  null !== queuedErrors &&\n    (null === workInProgressRootRecoverableErrors\n      ? (workInProgressRootRecoverableErrors = queuedErrors)\n      : workInProgressRootRecoverableErrors.push.apply(\n          workInProgressRootRecoverableErrors,\n          queuedErrors\n        ),\n    (hydrationErrors = null));\n  return queuedErrors;\n}\nfunction queueHydrationError(error) {\n  null === hydrationErrors\n    ? (hydrationErrors = [error])\n    : hydrationErrors.push(error);\n}\nvar valueCursor = createCursor(null),\n  currentlyRenderingFiber$1 = null,\n  lastContextDependency = null;\nfunction pushProvider(providerFiber, context, nextValue) {\n  push(valueCursor, context._currentValue);\n  context._currentValue = nextValue;\n}\nfunction popProvider(context) {\n  context._currentValue = valueCursor.current;\n  pop(valueCursor);\n}\nfunction scheduleContextWorkOnParentPath(parent, renderLanes, propagationRoot) {\n  for (; null !== parent; ) {\n    var alternate = parent.alternate;\n    (parent.childLanes & renderLanes) !== renderLanes\n      ? ((parent.childLanes |= renderLanes),\n        null !== alternate && (alternate.childLanes |= renderLanes))\n      : null !== alternate &&\n        (alternate.childLanes & renderLanes) !== renderLanes &&\n        (alternate.childLanes |= renderLanes);\n    if (parent === propagationRoot) break;\n    parent = parent.return;\n  }\n}\nfunction propagateContextChanges(\n  workInProgress,\n  contexts,\n  renderLanes,\n  forcePropagateEntireTree\n) {\n  var fiber = workInProgress.child;\n  null !== fiber && (fiber.return = workInProgress);\n  for (; null !== fiber; ) {\n    var list = fiber.dependencies;\n    if (null !== list) {\n      var nextFiber = fiber.child;\n      list = list.firstContext;\n      a: for (; null !== list; ) {\n        var dependency = list;\n        list = fiber;\n        for (var i = 0; i < contexts.length; i++)\n          if (dependency.context === contexts[i]) {\n            list.lanes |= renderLanes;\n            dependency = list.alternate;\n            null !== dependency && (dependency.lanes |= renderLanes);\n            scheduleContextWorkOnParentPath(\n              list.return,\n              renderLanes,\n              workInProgress\n            );\n            forcePropagateEntireTree || (nextFiber = null);\n            break a;\n          }\n        list = dependency.next;\n      }\n    } else if (18 === fiber.tag) {\n      nextFiber = fiber.return;\n      if (null === nextFiber) throw Error(formatProdErrorMessage(341));\n      nextFiber.lanes |= renderLanes;\n      list = nextFiber.alternate;\n      null !== list && (list.lanes |= renderLanes);\n      scheduleContextWorkOnParentPath(nextFiber, renderLanes, workInProgress);\n      nextFiber = null;\n    } else nextFiber = fiber.child;\n    if (null !== nextFiber) nextFiber.return = fiber;\n    else\n      for (nextFiber = fiber; null !== nextFiber; ) {\n        if (nextFiber === workInProgress) {\n          nextFiber = null;\n          break;\n        }\n        fiber = nextFiber.sibling;\n        if (null !== fiber) {\n          fiber.return = nextFiber.return;\n          nextFiber = fiber;\n          break;\n        }\n        nextFiber = nextFiber.return;\n      }\n    fiber = nextFiber;\n  }\n}\nfunction propagateParentContextChanges(\n  current,\n  workInProgress,\n  renderLanes,\n  forcePropagateEntireTree\n) {\n  current = null;\n  for (\n    var parent = workInProgress, isInsidePropagationBailout = !1;\n    null !== parent;\n\n  ) {\n    if (!isInsidePropagationBailout)\n      if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;\n      else if (0 !== (parent.flags & 262144)) break;\n    if (10 === parent.tag) {\n      var currentParent = parent.alternate;\n      if (null === currentParent) throw Error(formatProdErrorMessage(387));\n      currentParent = currentParent.memoizedProps;\n      if (null !== currentParent) {\n        var context = parent.type;\n        objectIs(parent.pendingProps.value, currentParent.value) ||\n          (null !== current ? current.push(context) : (current = [context]));\n      }\n    } else if (parent === hostTransitionProviderCursor.current) {\n      currentParent = parent.alternate;\n      if (null === currentParent) throw Error(formatProdErrorMessage(387));\n      currentParent.memoizedState.memoizedState !==\n        parent.memoizedState.memoizedState &&\n        (null !== current\n          ? current.push(HostTransitionContext)\n          : (current = [HostTransitionContext]));\n    }\n    parent = parent.return;\n  }\n  null !== current &&\n    propagateContextChanges(\n      workInProgress,\n      current,\n      renderLanes,\n      forcePropagateEntireTree\n    );\n  workInProgress.flags |= 262144;\n}\nfunction checkIfContextChanged(currentDependencies) {\n  for (\n    currentDependencies = currentDependencies.firstContext;\n    null !== currentDependencies;\n\n  ) {\n    if (\n      !objectIs(\n        currentDependencies.context._currentValue,\n        currentDependencies.memoizedValue\n      )\n    )\n      return !0;\n    currentDependencies = currentDependencies.next;\n  }\n  return !1;\n}\nfunction prepareToReadContext(workInProgress) {\n  currentlyRenderingFiber$1 = workInProgress;\n  lastContextDependency = null;\n  workInProgress = workInProgress.dependencies;\n  null !== workInProgress && (workInProgress.firstContext = null);\n}\nfunction readContext(context) {\n  return readContextForConsumer(currentlyRenderingFiber$1, context);\n}\nfunction readContextDuringReconciliation(consumer, context) {\n  null === currentlyRenderingFiber$1 && prepareToReadContext(consumer);\n  return readContextForConsumer(consumer, context);\n}\nfunction readContextForConsumer(consumer, context) {\n  var value = context._currentValue;\n  context = { context: context, memoizedValue: value, next: null };\n  if (null === lastContextDependency) {\n    if (null === consumer) throw Error(formatProdErrorMessage(308));\n    lastContextDependency = context;\n    consumer.dependencies = { lanes: 0, firstContext: context };\n    consumer.flags |= 524288;\n  } else lastContextDependency = lastContextDependency.next = context;\n  return value;\n}\nvar AbortControllerLocal =\n    \"undefined\" !== typeof AbortController\n      ? AbortController\n      : function () {\n          var listeners = [],\n            signal = (this.signal = {\n              aborted: !1,\n              addEventListener: function (type, listener) {\n                listeners.push(listener);\n              }\n            });\n          this.abort = function () {\n            signal.aborted = !0;\n            listeners.forEach(function (listener) {\n              return listener();\n            });\n          };\n        },\n  scheduleCallback$2 = Scheduler.unstable_scheduleCallback,\n  NormalPriority = Scheduler.unstable_NormalPriority,\n  CacheContext = {\n    $$typeof: REACT_CONTEXT_TYPE,\n    Consumer: null,\n    Provider: null,\n    _currentValue: null,\n    _currentValue2: null,\n    _threadCount: 0\n  };\nfunction createCache() {\n  return {\n    controller: new AbortControllerLocal(),\n    data: new Map(),\n    refCount: 0\n  };\n}\nfunction releaseCache(cache) {\n  cache.refCount--;\n  0 === cache.refCount &&\n    scheduleCallback$2(NormalPriority, function () {\n      cache.controller.abort();\n    });\n}\nvar currentEntangledListeners = null,\n  currentEntangledPendingCount = 0,\n  currentEntangledLane = 0,\n  currentEntangledActionThenable = null;\nfunction entangleAsyncAction(transition, thenable) {\n  if (null === currentEntangledListeners) {\n    var entangledListeners = (currentEntangledListeners = []);\n    currentEntangledPendingCount = 0;\n    currentEntangledLane = requestTransitionLane();\n    currentEntangledActionThenable = {\n      status: \"pending\",\n      value: void 0,\n      then: function (resolve) {\n        entangledListeners.push(resolve);\n      }\n    };\n  }\n  currentEntangledPendingCount++;\n  thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);\n  return thenable;\n}\nfunction pingEngtangledActionScope() {\n  if (\n    0 === --currentEntangledPendingCount &&\n    null !== currentEntangledListeners\n  ) {\n    null !== currentEntangledActionThenable &&\n      (currentEntangledActionThenable.status = \"fulfilled\");\n    var listeners = currentEntangledListeners;\n    currentEntangledListeners = null;\n    currentEntangledLane = 0;\n    currentEntangledActionThenable = null;\n    for (var i = 0; i < listeners.length; i++) (0, listeners[i])();\n  }\n}\nfunction chainThenableValue(thenable, result) {\n  var listeners = [],\n    thenableWithOverride = {\n      status: \"pending\",\n      value: null,\n      reason: null,\n      then: function (resolve) {\n        listeners.push(resolve);\n      }\n    };\n  thenable.then(\n    function () {\n      thenableWithOverride.status = \"fulfilled\";\n      thenableWithOverride.value = result;\n      for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);\n    },\n    function (error) {\n      thenableWithOverride.status = \"rejected\";\n      thenableWithOverride.reason = error;\n      for (error = 0; error < listeners.length; error++)\n        (0, listeners[error])(void 0);\n    }\n  );\n  return thenableWithOverride;\n}\nvar prevOnStartTransitionFinish = ReactSharedInternals.S;\nReactSharedInternals.S = function (transition, returnValue) {\n  globalMostRecentTransitionTime = now();\n  \"object\" === typeof returnValue &&\n    null !== returnValue &&\n    \"function\" === typeof returnValue.then &&\n    entangleAsyncAction(transition, returnValue);\n  null !== prevOnStartTransitionFinish &&\n    prevOnStartTransitionFinish(transition, returnValue);\n};\nvar resumedCache = createCursor(null);\nfunction peekCacheFromPool() {\n  var cacheResumedFromPreviousRender = resumedCache.current;\n  return null !== cacheResumedFromPreviousRender\n    ? cacheResumedFromPreviousRender\n    : workInProgressRoot.pooledCache;\n}\nfunction pushTransition(offscreenWorkInProgress, prevCachePool) {\n  null === prevCachePool\n    ? push(resumedCache, resumedCache.current)\n    : push(resumedCache, prevCachePool.pool);\n}\nfunction getSuspendedCache() {\n  var cacheFromPool = peekCacheFromPool();\n  return null === cacheFromPool\n    ? null\n    : { parent: CacheContext._currentValue, pool: cacheFromPool };\n}\nvar SuspenseException = Error(formatProdErrorMessage(460)),\n  SuspenseyCommitException = Error(formatProdErrorMessage(474)),\n  SuspenseActionException = Error(formatProdErrorMessage(542)),\n  noopSuspenseyCommitThenable = { then: function () {} };\nfunction isThenableResolved(thenable) {\n  thenable = thenable.status;\n  return \"fulfilled\" === thenable || \"rejected\" === thenable;\n}\nfunction trackUsedThenable(thenableState, thenable, index) {\n  index = thenableState[index];\n  void 0 === index\n    ? thenableState.push(thenable)\n    : index !== thenable && (thenable.then(noop$1, noop$1), (thenable = index));\n  switch (thenable.status) {\n    case \"fulfilled\":\n      return thenable.value;\n    case \"rejected\":\n      throw (\n        ((thenableState = thenable.reason),\n        checkIfUseWrappedInAsyncCatch(thenableState),\n        thenableState)\n      );\n    default:\n      if (\"string\" === typeof thenable.status) thenable.then(noop$1, noop$1);\n      else {\n        thenableState = workInProgressRoot;\n        if (null !== thenableState && 100 < thenableState.shellSuspendCounter)\n          throw Error(formatProdErrorMessage(482));\n        thenableState = thenable;\n        thenableState.status = \"pending\";\n        thenableState.then(\n          function (fulfilledValue) {\n            if (\"pending\" === thenable.status) {\n              var fulfilledThenable = thenable;\n              fulfilledThenable.status = \"fulfilled\";\n              fulfilledThenable.value = fulfilledValue;\n            }\n          },\n          function (error) {\n            if (\"pending\" === thenable.status) {\n              var rejectedThenable = thenable;\n              rejectedThenable.status = \"rejected\";\n              rejectedThenable.reason = error;\n            }\n          }\n        );\n      }\n      switch (thenable.status) {\n        case \"fulfilled\":\n          return thenable.value;\n        case \"rejected\":\n          throw (\n            ((thenableState = thenable.reason),\n            checkIfUseWrappedInAsyncCatch(thenableState),\n            thenableState)\n          );\n      }\n      suspendedThenable = thenable;\n      throw SuspenseException;\n  }\n}\nfunction resolveLazy(lazyType) {\n  try {\n    var init = lazyType._init;\n    return init(lazyType._payload);\n  } catch (x) {\n    if (null !== x && \"object\" === typeof x && \"function\" === typeof x.then)\n      throw ((suspendedThenable = x), SuspenseException);\n    throw x;\n  }\n}\nvar suspendedThenable = null;\nfunction getSuspendedThenable() {\n  if (null === suspendedThenable) throw Error(formatProdErrorMessage(459));\n  var thenable = suspendedThenable;\n  suspendedThenable = null;\n  return thenable;\n}\nfunction checkIfUseWrappedInAsyncCatch(rejectedReason) {\n  if (\n    rejectedReason === SuspenseException ||\n    rejectedReason === SuspenseActionException\n  )\n    throw Error(formatProdErrorMessage(483));\n}\nvar thenableState$1 = null,\n  thenableIndexCounter$1 = 0;\nfunction unwrapThenable(thenable) {\n  var index = thenableIndexCounter$1;\n  thenableIndexCounter$1 += 1;\n  null === thenableState$1 && (thenableState$1 = []);\n  return trackUsedThenable(thenableState$1, thenable, index);\n}\nfunction coerceRef(workInProgress, element) {\n  element = element.props.ref;\n  workInProgress.ref = void 0 !== element ? element : null;\n}\nfunction throwOnInvalidObjectTypeImpl(returnFiber, newChild) {\n  if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)\n    throw Error(formatProdErrorMessage(525));\n  returnFiber = Object.prototype.toString.call(newChild);\n  throw Error(\n    formatProdErrorMessage(\n      31,\n      \"[object Object]\" === returnFiber\n        ? \"object with keys {\" + Object.keys(newChild).join(\", \") + \"}\"\n        : returnFiber\n    )\n  );\n}\nfunction createChildReconciler(shouldTrackSideEffects) {\n  function deleteChild(returnFiber, childToDelete) {\n    if (shouldTrackSideEffects) {\n      var deletions = returnFiber.deletions;\n      null === deletions\n        ? ((returnFiber.deletions = [childToDelete]), (returnFiber.flags |= 16))\n        : deletions.push(childToDelete);\n    }\n  }\n  function deleteRemainingChildren(returnFiber, currentFirstChild) {\n    if (!shouldTrackSideEffects) return null;\n    for (; null !== currentFirstChild; )\n      deleteChild(returnFiber, currentFirstChild),\n        (currentFirstChild = currentFirstChild.sibling);\n    return null;\n  }\n  function mapRemainingChildren(currentFirstChild) {\n    for (var existingChildren = new Map(); null !== currentFirstChild; )\n      null !== currentFirstChild.key\n        ? existingChildren.set(currentFirstChild.key, currentFirstChild)\n        : existingChildren.set(currentFirstChild.index, currentFirstChild),\n        (currentFirstChild = currentFirstChild.sibling);\n    return existingChildren;\n  }\n  function useFiber(fiber, pendingProps) {\n    fiber = createWorkInProgress(fiber, pendingProps);\n    fiber.index = 0;\n    fiber.sibling = null;\n    return fiber;\n  }\n  function placeChild(newFiber, lastPlacedIndex, newIndex) {\n    newFiber.index = newIndex;\n    if (!shouldTrackSideEffects)\n      return (newFiber.flags |= 1048576), lastPlacedIndex;\n    newIndex = newFiber.alternate;\n    if (null !== newIndex)\n      return (\n        (newIndex = newIndex.index),\n        newIndex < lastPlacedIndex\n          ? ((newFiber.flags |= 67108866), lastPlacedIndex)\n          : newIndex\n      );\n    newFiber.flags |= 67108866;\n    return lastPlacedIndex;\n  }\n  function placeSingleChild(newFiber) {\n    shouldTrackSideEffects &&\n      null === newFiber.alternate &&\n      (newFiber.flags |= 67108866);\n    return newFiber;\n  }\n  function updateTextNode(returnFiber, current, textContent, lanes) {\n    if (null === current || 6 !== current.tag)\n      return (\n        (current = createFiberFromText(textContent, returnFiber.mode, lanes)),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, textContent);\n    current.return = returnFiber;\n    return current;\n  }\n  function updateElement(returnFiber, current, element, lanes) {\n    var elementType = element.type;\n    if (elementType === REACT_FRAGMENT_TYPE)\n      return updateFragment(\n        returnFiber,\n        current,\n        element.props.children,\n        lanes,\n        element.key\n      );\n    if (\n      null !== current &&\n      (current.elementType === elementType ||\n        (\"object\" === typeof elementType &&\n          null !== elementType &&\n          elementType.$$typeof === REACT_LAZY_TYPE &&\n          resolveLazy(elementType) === current.type))\n    )\n      return (\n        (current = useFiber(current, element.props)),\n        coerceRef(current, element),\n        (current.return = returnFiber),\n        current\n      );\n    current = createFiberFromTypeAndProps(\n      element.type,\n      element.key,\n      element.props,\n      null,\n      returnFiber.mode,\n      lanes\n    );\n    coerceRef(current, element);\n    current.return = returnFiber;\n    return current;\n  }\n  function updatePortal(returnFiber, current, portal, lanes) {\n    if (\n      null === current ||\n      4 !== current.tag ||\n      current.stateNode.containerInfo !== portal.containerInfo ||\n      current.stateNode.implementation !== portal.implementation\n    )\n      return (\n        (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, portal.children || []);\n    current.return = returnFiber;\n    return current;\n  }\n  function updateFragment(returnFiber, current, fragment, lanes, key) {\n    if (null === current || 7 !== current.tag)\n      return (\n        (current = createFiberFromFragment(\n          fragment,\n          returnFiber.mode,\n          lanes,\n          key\n        )),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, fragment);\n    current.return = returnFiber;\n    return current;\n  }\n  function createChild(returnFiber, newChild, lanes) {\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return (\n        (newChild = createFiberFromText(\n          \"\" + newChild,\n          returnFiber.mode,\n          lanes\n        )),\n        (newChild.return = returnFiber),\n        newChild\n      );\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return (\n            (lanes = createFiberFromTypeAndProps(\n              newChild.type,\n              newChild.key,\n              newChild.props,\n              null,\n              returnFiber.mode,\n              lanes\n            )),\n            coerceRef(lanes, newChild),\n            (lanes.return = returnFiber),\n            lanes\n          );\n        case REACT_PORTAL_TYPE:\n          return (\n            (newChild = createFiberFromPortal(\n              newChild,\n              returnFiber.mode,\n              lanes\n            )),\n            (newChild.return = returnFiber),\n            newChild\n          );\n        case REACT_LAZY_TYPE:\n          return (\n            (newChild = resolveLazy(newChild)),\n            createChild(returnFiber, newChild, lanes)\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return (\n          (newChild = createFiberFromFragment(\n            newChild,\n            returnFiber.mode,\n            lanes,\n            null\n          )),\n          (newChild.return = returnFiber),\n          newChild\n        );\n      if (\"function\" === typeof newChild.then)\n        return createChild(returnFiber, unwrapThenable(newChild), lanes);\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return createChild(\n          returnFiber,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n    }\n    return null;\n  }\n  function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n    var key = null !== oldFiber ? oldFiber.key : null;\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return null !== key\n        ? null\n        : updateTextNode(returnFiber, oldFiber, \"\" + newChild, lanes);\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return newChild.key === key\n            ? updateElement(returnFiber, oldFiber, newChild, lanes)\n            : null;\n        case REACT_PORTAL_TYPE:\n          return newChild.key === key\n            ? updatePortal(returnFiber, oldFiber, newChild, lanes)\n            : null;\n        case REACT_LAZY_TYPE:\n          return (\n            (newChild = resolveLazy(newChild)),\n            updateSlot(returnFiber, oldFiber, newChild, lanes)\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return null !== key\n          ? null\n          : updateFragment(returnFiber, oldFiber, newChild, lanes, null);\n      if (\"function\" === typeof newChild.then)\n        return updateSlot(\n          returnFiber,\n          oldFiber,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return updateSlot(\n          returnFiber,\n          oldFiber,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n    }\n    return null;\n  }\n  function updateFromMap(\n    existingChildren,\n    returnFiber,\n    newIdx,\n    newChild,\n    lanes\n  ) {\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return (\n        (existingChildren = existingChildren.get(newIdx) || null),\n        updateTextNode(returnFiber, existingChildren, \"\" + newChild, lanes)\n      );\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return (\n            (existingChildren =\n              existingChildren.get(\n                null === newChild.key ? newIdx : newChild.key\n              ) || null),\n            updateElement(returnFiber, existingChildren, newChild, lanes)\n          );\n        case REACT_PORTAL_TYPE:\n          return (\n            (existingChildren =\n              existingChildren.get(\n                null === newChild.key ? newIdx : newChild.key\n              ) || null),\n            updatePortal(returnFiber, existingChildren, newChild, lanes)\n          );\n        case REACT_LAZY_TYPE:\n          return (\n            (newChild = resolveLazy(newChild)),\n            updateFromMap(\n              existingChildren,\n              returnFiber,\n              newIdx,\n              newChild,\n              lanes\n            )\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return (\n          (existingChildren = existingChildren.get(newIdx) || null),\n          updateFragment(returnFiber, existingChildren, newChild, lanes, null)\n        );\n      if (\"function\" === typeof newChild.then)\n        return updateFromMap(\n          existingChildren,\n          returnFiber,\n          newIdx,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return updateFromMap(\n          existingChildren,\n          returnFiber,\n          newIdx,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n    }\n    return null;\n  }\n  function reconcileChildrenArray(\n    returnFiber,\n    currentFirstChild,\n    newChildren,\n    lanes\n  ) {\n    for (\n      var resultingFirstChild = null,\n        previousNewFiber = null,\n        oldFiber = currentFirstChild,\n        newIdx = (currentFirstChild = 0),\n        nextOldFiber = null;\n      null !== oldFiber && newIdx < newChildren.length;\n      newIdx++\n    ) {\n      oldFiber.index > newIdx\n        ? ((nextOldFiber = oldFiber), (oldFiber = null))\n        : (nextOldFiber = oldFiber.sibling);\n      var newFiber = updateSlot(\n        returnFiber,\n        oldFiber,\n        newChildren[newIdx],\n        lanes\n      );\n      if (null === newFiber) {\n        null === oldFiber && (oldFiber = nextOldFiber);\n        break;\n      }\n      shouldTrackSideEffects &&\n        oldFiber &&\n        null === newFiber.alternate &&\n        deleteChild(returnFiber, oldFiber);\n      currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n      null === previousNewFiber\n        ? (resultingFirstChild = newFiber)\n        : (previousNewFiber.sibling = newFiber);\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n    if (newIdx === newChildren.length)\n      return (\n        deleteRemainingChildren(returnFiber, oldFiber),\n        isHydrating && pushTreeFork(returnFiber, newIdx),\n        resultingFirstChild\n      );\n    if (null === oldFiber) {\n      for (; newIdx < newChildren.length; newIdx++)\n        (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),\n          null !== oldFiber &&\n            ((currentFirstChild = placeChild(\n              oldFiber,\n              currentFirstChild,\n              newIdx\n            )),\n            null === previousNewFiber\n              ? (resultingFirstChild = oldFiber)\n              : (previousNewFiber.sibling = oldFiber),\n            (previousNewFiber = oldFiber));\n      isHydrating && pushTreeFork(returnFiber, newIdx);\n      return resultingFirstChild;\n    }\n    for (\n      oldFiber = mapRemainingChildren(oldFiber);\n      newIdx < newChildren.length;\n      newIdx++\n    )\n      (nextOldFiber = updateFromMap(\n        oldFiber,\n        returnFiber,\n        newIdx,\n        newChildren[newIdx],\n        lanes\n      )),\n        null !== nextOldFiber &&\n          (shouldTrackSideEffects &&\n            null !== nextOldFiber.alternate &&\n            oldFiber.delete(\n              null === nextOldFiber.key ? newIdx : nextOldFiber.key\n            ),\n          (currentFirstChild = placeChild(\n            nextOldFiber,\n            currentFirstChild,\n            newIdx\n          )),\n          null === previousNewFiber\n            ? (resultingFirstChild = nextOldFiber)\n            : (previousNewFiber.sibling = nextOldFiber),\n          (previousNewFiber = nextOldFiber));\n    shouldTrackSideEffects &&\n      oldFiber.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    isHydrating && pushTreeFork(returnFiber, newIdx);\n    return resultingFirstChild;\n  }\n  function reconcileChildrenIterator(\n    returnFiber,\n    currentFirstChild,\n    newChildren,\n    lanes\n  ) {\n    if (null == newChildren) throw Error(formatProdErrorMessage(151));\n    for (\n      var resultingFirstChild = null,\n        previousNewFiber = null,\n        oldFiber = currentFirstChild,\n        newIdx = (currentFirstChild = 0),\n        nextOldFiber = null,\n        step = newChildren.next();\n      null !== oldFiber && !step.done;\n      newIdx++, step = newChildren.next()\n    ) {\n      oldFiber.index > newIdx\n        ? ((nextOldFiber = oldFiber), (oldFiber = null))\n        : (nextOldFiber = oldFiber.sibling);\n      var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n      if (null === newFiber) {\n        null === oldFiber && (oldFiber = nextOldFiber);\n        break;\n      }\n      shouldTrackSideEffects &&\n        oldFiber &&\n        null === newFiber.alternate &&\n        deleteChild(returnFiber, oldFiber);\n      currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n      null === previousNewFiber\n        ? (resultingFirstChild = newFiber)\n        : (previousNewFiber.sibling = newFiber);\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n    if (step.done)\n      return (\n        deleteRemainingChildren(returnFiber, oldFiber),\n        isHydrating && pushTreeFork(returnFiber, newIdx),\n        resultingFirstChild\n      );\n    if (null === oldFiber) {\n      for (; !step.done; newIdx++, step = newChildren.next())\n        (step = createChild(returnFiber, step.value, lanes)),\n          null !== step &&\n            ((currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n            null === previousNewFiber\n              ? (resultingFirstChild = step)\n              : (previousNewFiber.sibling = step),\n            (previousNewFiber = step));\n      isHydrating && pushTreeFork(returnFiber, newIdx);\n      return resultingFirstChild;\n    }\n    for (\n      oldFiber = mapRemainingChildren(oldFiber);\n      !step.done;\n      newIdx++, step = newChildren.next()\n    )\n      (step = updateFromMap(oldFiber, returnFiber, newIdx, step.value, lanes)),\n        null !== step &&\n          (shouldTrackSideEffects &&\n            null !== step.alternate &&\n            oldFiber.delete(null === step.key ? newIdx : step.key),\n          (currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n          null === previousNewFiber\n            ? (resultingFirstChild = step)\n            : (previousNewFiber.sibling = step),\n          (previousNewFiber = step));\n    shouldTrackSideEffects &&\n      oldFiber.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    isHydrating && pushTreeFork(returnFiber, newIdx);\n    return resultingFirstChild;\n  }\n  function reconcileChildFibersImpl(\n    returnFiber,\n    currentFirstChild,\n    newChild,\n    lanes\n  ) {\n    \"object\" === typeof newChild &&\n      null !== newChild &&\n      newChild.type === REACT_FRAGMENT_TYPE &&\n      null === newChild.key &&\n      (newChild = newChild.props.children);\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          a: {\n            for (var key = newChild.key; null !== currentFirstChild; ) {\n              if (currentFirstChild.key === key) {\n                key = newChild.type;\n                if (key === REACT_FRAGMENT_TYPE) {\n                  if (7 === currentFirstChild.tag) {\n                    deleteRemainingChildren(\n                      returnFiber,\n                      currentFirstChild.sibling\n                    );\n                    lanes = useFiber(\n                      currentFirstChild,\n                      newChild.props.children\n                    );\n                    lanes.return = returnFiber;\n                    returnFiber = lanes;\n                    break a;\n                  }\n                } else if (\n                  currentFirstChild.elementType === key ||\n                  (\"object\" === typeof key &&\n                    null !== key &&\n                    key.$$typeof === REACT_LAZY_TYPE &&\n                    resolveLazy(key) === currentFirstChild.type)\n                ) {\n                  deleteRemainingChildren(\n                    returnFiber,\n                    currentFirstChild.sibling\n                  );\n                  lanes = useFiber(currentFirstChild, newChild.props);\n                  coerceRef(lanes, newChild);\n                  lanes.return = returnFiber;\n                  returnFiber = lanes;\n                  break a;\n                }\n                deleteRemainingChildren(returnFiber, currentFirstChild);\n                break;\n              } else deleteChild(returnFiber, currentFirstChild);\n              currentFirstChild = currentFirstChild.sibling;\n            }\n            newChild.type === REACT_FRAGMENT_TYPE\n              ? ((lanes = createFiberFromFragment(\n                  newChild.props.children,\n                  returnFiber.mode,\n                  lanes,\n                  newChild.key\n                )),\n                (lanes.return = returnFiber),\n                (returnFiber = lanes))\n              : ((lanes = createFiberFromTypeAndProps(\n                  newChild.type,\n                  newChild.key,\n                  newChild.props,\n                  null,\n                  returnFiber.mode,\n                  lanes\n                )),\n                coerceRef(lanes, newChild),\n                (lanes.return = returnFiber),\n                (returnFiber = lanes));\n          }\n          return placeSingleChild(returnFiber);\n        case REACT_PORTAL_TYPE:\n          a: {\n            for (key = newChild.key; null !== currentFirstChild; ) {\n              if (currentFirstChild.key === key)\n                if (\n                  4 === currentFirstChild.tag &&\n                  currentFirstChild.stateNode.containerInfo ===\n                    newChild.containerInfo &&\n                  currentFirstChild.stateNode.implementation ===\n                    newChild.implementation\n                ) {\n                  deleteRemainingChildren(\n                    returnFiber,\n                    currentFirstChild.sibling\n                  );\n                  lanes = useFiber(currentFirstChild, newChild.children || []);\n                  lanes.return = returnFiber;\n                  returnFiber = lanes;\n                  break a;\n                } else {\n                  deleteRemainingChildren(returnFiber, currentFirstChild);\n                  break;\n                }\n              else deleteChild(returnFiber, currentFirstChild);\n              currentFirstChild = currentFirstChild.sibling;\n            }\n            lanes = createFiberFromPortal(newChild, returnFiber.mode, lanes);\n            lanes.return = returnFiber;\n            returnFiber = lanes;\n          }\n          return placeSingleChild(returnFiber);\n        case REACT_LAZY_TYPE:\n          return (\n            (newChild = resolveLazy(newChild)),\n            reconcileChildFibersImpl(\n              returnFiber,\n              currentFirstChild,\n              newChild,\n              lanes\n            )\n          );\n      }\n      if (isArrayImpl(newChild))\n        return reconcileChildrenArray(\n          returnFiber,\n          currentFirstChild,\n          newChild,\n          lanes\n        );\n      if (getIteratorFn(newChild)) {\n        key = getIteratorFn(newChild);\n        if (\"function\" !== typeof key) throw Error(formatProdErrorMessage(150));\n        newChild = key.call(newChild);\n        return reconcileChildrenIterator(\n          returnFiber,\n          currentFirstChild,\n          newChild,\n          lanes\n        );\n      }\n      if (\"function\" === typeof newChild.then)\n        return reconcileChildFibersImpl(\n          returnFiber,\n          currentFirstChild,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return reconcileChildFibersImpl(\n          returnFiber,\n          currentFirstChild,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n    }\n    return (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n      ? ((newChild = \"\" + newChild),\n        null !== currentFirstChild && 6 === currentFirstChild.tag\n          ? (deleteRemainingChildren(returnFiber, currentFirstChild.sibling),\n            (lanes = useFiber(currentFirstChild, newChild)),\n            (lanes.return = returnFiber),\n            (returnFiber = lanes))\n          : (deleteRemainingChildren(returnFiber, currentFirstChild),\n            (lanes = createFiberFromText(newChild, returnFiber.mode, lanes)),\n            (lanes.return = returnFiber),\n            (returnFiber = lanes)),\n        placeSingleChild(returnFiber))\n      : deleteRemainingChildren(returnFiber, currentFirstChild);\n  }\n  return function (returnFiber, currentFirstChild, newChild, lanes) {\n    try {\n      thenableIndexCounter$1 = 0;\n      var firstChildFiber = reconcileChildFibersImpl(\n        returnFiber,\n        currentFirstChild,\n        newChild,\n        lanes\n      );\n      thenableState$1 = null;\n      return firstChildFiber;\n    } catch (x) {\n      if (x === SuspenseException || x === SuspenseActionException) throw x;\n      var fiber = createFiberImplClass(29, x, null, returnFiber.mode);\n      fiber.lanes = lanes;\n      fiber.return = returnFiber;\n      return fiber;\n    } finally {\n    }\n  };\n}\nvar reconcileChildFibers = createChildReconciler(!0),\n  mountChildFibers = createChildReconciler(!1),\n  hasForceUpdate = !1;\nfunction initializeUpdateQueue(fiber) {\n  fiber.updateQueue = {\n    baseState: fiber.memoizedState,\n    firstBaseUpdate: null,\n    lastBaseUpdate: null,\n    shared: { pending: null, lanes: 0, hiddenCallbacks: null },\n    callbacks: null\n  };\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n  current = current.updateQueue;\n  workInProgress.updateQueue === current &&\n    (workInProgress.updateQueue = {\n      baseState: current.baseState,\n      firstBaseUpdate: current.firstBaseUpdate,\n      lastBaseUpdate: current.lastBaseUpdate,\n      shared: current.shared,\n      callbacks: null\n    });\n}\nfunction createUpdate(lane) {\n  return { lane: lane, tag: 0, payload: null, callback: null, next: null };\n}\nfunction enqueueUpdate(fiber, update, lane) {\n  var updateQueue = fiber.updateQueue;\n  if (null === updateQueue) return null;\n  updateQueue = updateQueue.shared;\n  if (0 !== (executionContext & 2)) {\n    var pending = updateQueue.pending;\n    null === pending\n      ? (update.next = update)\n      : ((update.next = pending.next), (pending.next = update));\n    updateQueue.pending = update;\n    update = getRootForUpdatedFiber(fiber);\n    markUpdateLaneFromFiberToRoot(fiber, null, lane);\n    return update;\n  }\n  enqueueUpdate$1(fiber, updateQueue, update, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction entangleTransitions(root, fiber, lane) {\n  fiber = fiber.updateQueue;\n  if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194048))) {\n    var queueLanes = fiber.lanes;\n    queueLanes &= root.pendingLanes;\n    lane |= queueLanes;\n    fiber.lanes = lane;\n    markRootEntangled(root, lane);\n  }\n}\nfunction enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n  var queue = workInProgress.updateQueue,\n    current = workInProgress.alternate;\n  if (\n    null !== current &&\n    ((current = current.updateQueue), queue === current)\n  ) {\n    var newFirst = null,\n      newLast = null;\n    queue = queue.firstBaseUpdate;\n    if (null !== queue) {\n      do {\n        var clone = {\n          lane: queue.lane,\n          tag: queue.tag,\n          payload: queue.payload,\n          callback: null,\n          next: null\n        };\n        null === newLast\n          ? (newFirst = newLast = clone)\n          : (newLast = newLast.next = clone);\n        queue = queue.next;\n      } while (null !== queue);\n      null === newLast\n        ? (newFirst = newLast = capturedUpdate)\n        : (newLast = newLast.next = capturedUpdate);\n    } else newFirst = newLast = capturedUpdate;\n    queue = {\n      baseState: current.baseState,\n      firstBaseUpdate: newFirst,\n      lastBaseUpdate: newLast,\n      shared: current.shared,\n      callbacks: current.callbacks\n    };\n    workInProgress.updateQueue = queue;\n    return;\n  }\n  workInProgress = queue.lastBaseUpdate;\n  null === workInProgress\n    ? (queue.firstBaseUpdate = capturedUpdate)\n    : (workInProgress.next = capturedUpdate);\n  queue.lastBaseUpdate = capturedUpdate;\n}\nvar didReadFromEntangledAsyncAction = !1;\nfunction suspendIfUpdateReadFromEntangledAsyncAction() {\n  if (didReadFromEntangledAsyncAction) {\n    var entangledActionThenable = currentEntangledActionThenable;\n    if (null !== entangledActionThenable) throw entangledActionThenable;\n  }\n}\nfunction processUpdateQueue(\n  workInProgress$jscomp$0,\n  props,\n  instance$jscomp$0,\n  renderLanes\n) {\n  didReadFromEntangledAsyncAction = !1;\n  var queue = workInProgress$jscomp$0.updateQueue;\n  hasForceUpdate = !1;\n  var firstBaseUpdate = queue.firstBaseUpdate,\n    lastBaseUpdate = queue.lastBaseUpdate,\n    pendingQueue = queue.shared.pending;\n  if (null !== pendingQueue) {\n    queue.shared.pending = null;\n    var lastPendingUpdate = pendingQueue,\n      firstPendingUpdate = lastPendingUpdate.next;\n    lastPendingUpdate.next = null;\n    null === lastBaseUpdate\n      ? (firstBaseUpdate = firstPendingUpdate)\n      : (lastBaseUpdate.next = firstPendingUpdate);\n    lastBaseUpdate = lastPendingUpdate;\n    var current = workInProgress$jscomp$0.alternate;\n    null !== current &&\n      ((current = current.updateQueue),\n      (pendingQueue = current.lastBaseUpdate),\n      pendingQueue !== lastBaseUpdate &&\n        (null === pendingQueue\n          ? (current.firstBaseUpdate = firstPendingUpdate)\n          : (pendingQueue.next = firstPendingUpdate),\n        (current.lastBaseUpdate = lastPendingUpdate)));\n  }\n  if (null !== firstBaseUpdate) {\n    var newState = queue.baseState;\n    lastBaseUpdate = 0;\n    current = firstPendingUpdate = lastPendingUpdate = null;\n    pendingQueue = firstBaseUpdate;\n    do {\n      var updateLane = pendingQueue.lane & -536870913,\n        isHiddenUpdate = updateLane !== pendingQueue.lane;\n      if (\n        isHiddenUpdate\n          ? (workInProgressRootRenderLanes & updateLane) === updateLane\n          : (renderLanes & updateLane) === updateLane\n      ) {\n        0 !== updateLane &&\n          updateLane === currentEntangledLane &&\n          (didReadFromEntangledAsyncAction = !0);\n        null !== current &&\n          (current = current.next =\n            {\n              lane: 0,\n              tag: pendingQueue.tag,\n              payload: pendingQueue.payload,\n              callback: null,\n              next: null\n            });\n        a: {\n          var workInProgress = workInProgress$jscomp$0,\n            update = pendingQueue;\n          updateLane = props;\n          var instance = instance$jscomp$0;\n          switch (update.tag) {\n            case 1:\n              workInProgress = update.payload;\n              if (\"function\" === typeof workInProgress) {\n                newState = workInProgress.call(instance, newState, updateLane);\n                break a;\n              }\n              newState = workInProgress;\n              break a;\n            case 3:\n              workInProgress.flags = (workInProgress.flags & -65537) | 128;\n            case 0:\n              workInProgress = update.payload;\n              updateLane =\n                \"function\" === typeof workInProgress\n                  ? workInProgress.call(instance, newState, updateLane)\n                  : workInProgress;\n              if (null === updateLane || void 0 === updateLane) break a;\n              newState = assign({}, newState, updateLane);\n              break a;\n            case 2:\n              hasForceUpdate = !0;\n          }\n        }\n        updateLane = pendingQueue.callback;\n        null !== updateLane &&\n          ((workInProgress$jscomp$0.flags |= 64),\n          isHiddenUpdate && (workInProgress$jscomp$0.flags |= 8192),\n          (isHiddenUpdate = queue.callbacks),\n          null === isHiddenUpdate\n            ? (queue.callbacks = [updateLane])\n            : isHiddenUpdate.push(updateLane));\n      } else\n        (isHiddenUpdate = {\n          lane: updateLane,\n          tag: pendingQueue.tag,\n          payload: pendingQueue.payload,\n          callback: pendingQueue.callback,\n          next: null\n        }),\n          null === current\n            ? ((firstPendingUpdate = current = isHiddenUpdate),\n              (lastPendingUpdate = newState))\n            : (current = current.next = isHiddenUpdate),\n          (lastBaseUpdate |= updateLane);\n      pendingQueue = pendingQueue.next;\n      if (null === pendingQueue)\n        if (((pendingQueue = queue.shared.pending), null === pendingQueue))\n          break;\n        else\n          (isHiddenUpdate = pendingQueue),\n            (pendingQueue = isHiddenUpdate.next),\n            (isHiddenUpdate.next = null),\n            (queue.lastBaseUpdate = isHiddenUpdate),\n            (queue.shared.pending = null);\n    } while (1);\n    null === current && (lastPendingUpdate = newState);\n    queue.baseState = lastPendingUpdate;\n    queue.firstBaseUpdate = firstPendingUpdate;\n    queue.lastBaseUpdate = current;\n    null === firstBaseUpdate && (queue.shared.lanes = 0);\n    workInProgressRootSkippedLanes |= lastBaseUpdate;\n    workInProgress$jscomp$0.lanes = lastBaseUpdate;\n    workInProgress$jscomp$0.memoizedState = newState;\n  }\n}\nfunction callCallback(callback, context) {\n  if (\"function\" !== typeof callback)\n    throw Error(formatProdErrorMessage(191, callback));\n  callback.call(context);\n}\nfunction commitCallbacks(updateQueue, context) {\n  var callbacks = updateQueue.callbacks;\n  if (null !== callbacks)\n    for (\n      updateQueue.callbacks = null, updateQueue = 0;\n      updateQueue < callbacks.length;\n      updateQueue++\n    )\n      callCallback(callbacks[updateQueue], context);\n}\nvar currentTreeHiddenStackCursor = createCursor(null),\n  prevEntangledRenderLanesCursor = createCursor(0);\nfunction pushHiddenContext(fiber, context) {\n  fiber = entangledRenderLanes;\n  push(prevEntangledRenderLanesCursor, fiber);\n  push(currentTreeHiddenStackCursor, context);\n  entangledRenderLanes = fiber | context.baseLanes;\n}\nfunction reuseHiddenContextOnStack() {\n  push(prevEntangledRenderLanesCursor, entangledRenderLanes);\n  push(currentTreeHiddenStackCursor, currentTreeHiddenStackCursor.current);\n}\nfunction popHiddenContext() {\n  entangledRenderLanes = prevEntangledRenderLanesCursor.current;\n  pop(currentTreeHiddenStackCursor);\n  pop(prevEntangledRenderLanesCursor);\n}\nvar suspenseHandlerStackCursor = createCursor(null),\n  shellBoundary = null;\nfunction pushPrimaryTreeSuspenseHandler(handler) {\n  var current = handler.alternate;\n  push(suspenseStackCursor, suspenseStackCursor.current & 1);\n  push(suspenseHandlerStackCursor, handler);\n  null === shellBoundary &&\n    (null === current || null !== currentTreeHiddenStackCursor.current\n      ? (shellBoundary = handler)\n      : null !== current.memoizedState && (shellBoundary = handler));\n}\nfunction pushDehydratedActivitySuspenseHandler(fiber) {\n  push(suspenseStackCursor, suspenseStackCursor.current);\n  push(suspenseHandlerStackCursor, fiber);\n  null === shellBoundary && (shellBoundary = fiber);\n}\nfunction pushOffscreenSuspenseHandler(fiber) {\n  22 === fiber.tag\n    ? (push(suspenseStackCursor, suspenseStackCursor.current),\n      push(suspenseHandlerStackCursor, fiber),\n      null === shellBoundary && (shellBoundary = fiber))\n    : reuseSuspenseHandlerOnStack(fiber);\n}\nfunction reuseSuspenseHandlerOnStack() {\n  push(suspenseStackCursor, suspenseStackCursor.current);\n  push(suspenseHandlerStackCursor, suspenseHandlerStackCursor.current);\n}\nfunction popSuspenseHandler(fiber) {\n  pop(suspenseHandlerStackCursor);\n  shellBoundary === fiber && (shellBoundary = null);\n  pop(suspenseStackCursor);\n}\nvar suspenseStackCursor = createCursor(0);\nfunction findFirstSuspended(row) {\n  for (var node = row; null !== node; ) {\n    if (13 === node.tag) {\n      var state = node.memoizedState;\n      if (\n        null !== state &&\n        ((state = state.dehydrated),\n        null === state ||\n          isSuspenseInstancePending(state) ||\n          isSuspenseInstanceFallback(state))\n      )\n        return node;\n    } else if (\n      19 === node.tag &&\n      (\"forwards\" === node.memoizedProps.revealOrder ||\n        \"backwards\" === node.memoizedProps.revealOrder ||\n        \"unstable_legacy-backwards\" === node.memoizedProps.revealOrder ||\n        \"together\" === node.memoizedProps.revealOrder)\n    ) {\n      if (0 !== (node.flags & 128)) return node;\n    } else if (null !== node.child) {\n      node.child.return = node;\n      node = node.child;\n      continue;\n    }\n    if (node === row) break;\n    for (; null === node.sibling; ) {\n      if (null === node.return || node.return === row) return null;\n      node = node.return;\n    }\n    node.sibling.return = node.return;\n    node = node.sibling;\n  }\n  return null;\n}\nvar renderLanes = 0,\n  currentlyRenderingFiber = null,\n  currentHook = null,\n  workInProgressHook = null,\n  didScheduleRenderPhaseUpdate = !1,\n  didScheduleRenderPhaseUpdateDuringThisPass = !1,\n  shouldDoubleInvokeUserFnsInHooksDEV = !1,\n  localIdCounter = 0,\n  thenableIndexCounter = 0,\n  thenableState = null,\n  globalClientIdCounter = 0;\nfunction throwInvalidHookError() {\n  throw Error(formatProdErrorMessage(321));\n}\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n  if (null === prevDeps) return !1;\n  for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)\n    if (!objectIs(nextDeps[i], prevDeps[i])) return !1;\n  return !0;\n}\nfunction renderWithHooks(\n  current,\n  workInProgress,\n  Component,\n  props,\n  secondArg,\n  nextRenderLanes\n) {\n  renderLanes = nextRenderLanes;\n  currentlyRenderingFiber = workInProgress;\n  workInProgress.memoizedState = null;\n  workInProgress.updateQueue = null;\n  workInProgress.lanes = 0;\n  ReactSharedInternals.H =\n    null === current || null === current.memoizedState\n      ? HooksDispatcherOnMount\n      : HooksDispatcherOnUpdate;\n  shouldDoubleInvokeUserFnsInHooksDEV = !1;\n  nextRenderLanes = Component(props, secondArg);\n  shouldDoubleInvokeUserFnsInHooksDEV = !1;\n  didScheduleRenderPhaseUpdateDuringThisPass &&\n    (nextRenderLanes = renderWithHooksAgain(\n      workInProgress,\n      Component,\n      props,\n      secondArg\n    ));\n  finishRenderingHooks(current);\n  return nextRenderLanes;\n}\nfunction finishRenderingHooks(current) {\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  var didRenderTooFewHooks = null !== currentHook && null !== currentHook.next;\n  renderLanes = 0;\n  workInProgressHook = currentHook = currentlyRenderingFiber = null;\n  didScheduleRenderPhaseUpdate = !1;\n  thenableIndexCounter = 0;\n  thenableState = null;\n  if (didRenderTooFewHooks) throw Error(formatProdErrorMessage(300));\n  null === current ||\n    didReceiveUpdate ||\n    ((current = current.dependencies),\n    null !== current &&\n      checkIfContextChanged(current) &&\n      (didReceiveUpdate = !0));\n}\nfunction renderWithHooksAgain(workInProgress, Component, props, secondArg) {\n  currentlyRenderingFiber = workInProgress;\n  var numberOfReRenders = 0;\n  do {\n    didScheduleRenderPhaseUpdateDuringThisPass && (thenableState = null);\n    thenableIndexCounter = 0;\n    didScheduleRenderPhaseUpdateDuringThisPass = !1;\n    if (25 <= numberOfReRenders) throw Error(formatProdErrorMessage(301));\n    numberOfReRenders += 1;\n    workInProgressHook = currentHook = null;\n    if (null != workInProgress.updateQueue) {\n      var children = workInProgress.updateQueue;\n      children.lastEffect = null;\n      children.events = null;\n      children.stores = null;\n      null != children.memoCache && (children.memoCache.index = 0);\n    }\n    ReactSharedInternals.H = HooksDispatcherOnRerender;\n    children = Component(props, secondArg);\n  } while (didScheduleRenderPhaseUpdateDuringThisPass);\n  return children;\n}\nfunction TransitionAwareHostComponent() {\n  var dispatcher = ReactSharedInternals.H,\n    maybeThenable = dispatcher.useState()[0];\n  maybeThenable =\n    \"function\" === typeof maybeThenable.then\n      ? useThenable(maybeThenable)\n      : maybeThenable;\n  dispatcher = dispatcher.useState()[0];\n  (null !== currentHook ? currentHook.memoizedState : null) !== dispatcher &&\n    (currentlyRenderingFiber.flags |= 1024);\n  return maybeThenable;\n}\nfunction checkDidRenderIdHook() {\n  var didRenderIdHook = 0 !== localIdCounter;\n  localIdCounter = 0;\n  return didRenderIdHook;\n}\nfunction bailoutHooks(current, workInProgress, lanes) {\n  workInProgress.updateQueue = current.updateQueue;\n  workInProgress.flags &= -2053;\n  current.lanes &= ~lanes;\n}\nfunction resetHooksOnUnwind(workInProgress) {\n  if (didScheduleRenderPhaseUpdate) {\n    for (\n      workInProgress = workInProgress.memoizedState;\n      null !== workInProgress;\n\n    ) {\n      var queue = workInProgress.queue;\n      null !== queue && (queue.pending = null);\n      workInProgress = workInProgress.next;\n    }\n    didScheduleRenderPhaseUpdate = !1;\n  }\n  renderLanes = 0;\n  workInProgressHook = currentHook = currentlyRenderingFiber = null;\n  didScheduleRenderPhaseUpdateDuringThisPass = !1;\n  thenableIndexCounter = localIdCounter = 0;\n  thenableState = null;\n}\nfunction mountWorkInProgressHook() {\n  var hook = {\n    memoizedState: null,\n    baseState: null,\n    baseQueue: null,\n    queue: null,\n    next: null\n  };\n  null === workInProgressHook\n    ? (currentlyRenderingFiber.memoizedState = workInProgressHook = hook)\n    : (workInProgressHook = workInProgressHook.next = hook);\n  return workInProgressHook;\n}\nfunction updateWorkInProgressHook() {\n  if (null === currentHook) {\n    var nextCurrentHook = currentlyRenderingFiber.alternate;\n    nextCurrentHook =\n      null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n  } else nextCurrentHook = currentHook.next;\n  var nextWorkInProgressHook =\n    null === workInProgressHook\n      ? currentlyRenderingFiber.memoizedState\n      : workInProgressHook.next;\n  if (null !== nextWorkInProgressHook)\n    (workInProgressHook = nextWorkInProgressHook),\n      (currentHook = nextCurrentHook);\n  else {\n    if (null === nextCurrentHook) {\n      if (null === currentlyRenderingFiber.alternate)\n        throw Error(formatProdErrorMessage(467));\n      throw Error(formatProdErrorMessage(310));\n    }\n    currentHook = nextCurrentHook;\n    nextCurrentHook = {\n      memoizedState: currentHook.memoizedState,\n      baseState: currentHook.baseState,\n      baseQueue: currentHook.baseQueue,\n      queue: currentHook.queue,\n      next: null\n    };\n    null === workInProgressHook\n      ? (currentlyRenderingFiber.memoizedState = workInProgressHook =\n          nextCurrentHook)\n      : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n  }\n  return workInProgressHook;\n}\nfunction createFunctionComponentUpdateQueue() {\n  return { lastEffect: null, events: null, stores: null, memoCache: null };\n}\nfunction useThenable(thenable) {\n  var index = thenableIndexCounter;\n  thenableIndexCounter += 1;\n  null === thenableState && (thenableState = []);\n  thenable = trackUsedThenable(thenableState, thenable, index);\n  index = currentlyRenderingFiber;\n  null ===\n    (null === workInProgressHook\n      ? index.memoizedState\n      : workInProgressHook.next) &&\n    ((index = index.alternate),\n    (ReactSharedInternals.H =\n      null === index || null === index.memoizedState\n        ? HooksDispatcherOnMount\n        : HooksDispatcherOnUpdate));\n  return thenable;\n}\nfunction use(usable) {\n  if (null !== usable && \"object\" === typeof usable) {\n    if (\"function\" === typeof usable.then) return useThenable(usable);\n    if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);\n  }\n  throw Error(formatProdErrorMessage(438, String(usable)));\n}\nfunction useMemoCache(size) {\n  var memoCache = null,\n    updateQueue = currentlyRenderingFiber.updateQueue;\n  null !== updateQueue && (memoCache = updateQueue.memoCache);\n  if (null == memoCache) {\n    var current = currentlyRenderingFiber.alternate;\n    null !== current &&\n      ((current = current.updateQueue),\n      null !== current &&\n        ((current = current.memoCache),\n        null != current &&\n          (memoCache = {\n            data: current.data.map(function (array) {\n              return array.slice();\n            }),\n            index: 0\n          })));\n  }\n  null == memoCache && (memoCache = { data: [], index: 0 });\n  null === updateQueue &&\n    ((updateQueue = createFunctionComponentUpdateQueue()),\n    (currentlyRenderingFiber.updateQueue = updateQueue));\n  updateQueue.memoCache = memoCache;\n  updateQueue = memoCache.data[memoCache.index];\n  if (void 0 === updateQueue)\n    for (\n      updateQueue = memoCache.data[memoCache.index] = Array(size), current = 0;\n      current < size;\n      current++\n    )\n      updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;\n  memoCache.index++;\n  return updateQueue;\n}\nfunction basicStateReducer(state, action) {\n  return \"function\" === typeof action ? action(state) : action;\n}\nfunction updateReducer(reducer) {\n  var hook = updateWorkInProgressHook();\n  return updateReducerImpl(hook, currentHook, reducer);\n}\nfunction updateReducerImpl(hook, current, reducer) {\n  var queue = hook.queue;\n  if (null === queue) throw Error(formatProdErrorMessage(311));\n  queue.lastRenderedReducer = reducer;\n  var baseQueue = hook.baseQueue,\n    pendingQueue = queue.pending;\n  if (null !== pendingQueue) {\n    if (null !== baseQueue) {\n      var baseFirst = baseQueue.next;\n      baseQueue.next = pendingQueue.next;\n      pendingQueue.next = baseFirst;\n    }\n    current.baseQueue = baseQueue = pendingQueue;\n    queue.pending = null;\n  }\n  pendingQueue = hook.baseState;\n  if (null === baseQueue) hook.memoizedState = pendingQueue;\n  else {\n    current = baseQueue.next;\n    var newBaseQueueFirst = (baseFirst = null),\n      newBaseQueueLast = null,\n      update = current,\n      didReadFromEntangledAsyncAction$60 = !1;\n    do {\n      var updateLane = update.lane & -536870913;\n      if (\n        updateLane !== update.lane\n          ? (workInProgressRootRenderLanes & updateLane) === updateLane\n          : (renderLanes & updateLane) === updateLane\n      ) {\n        var revertLane = update.revertLane;\n        if (0 === revertLane)\n          null !== newBaseQueueLast &&\n            (newBaseQueueLast = newBaseQueueLast.next =\n              {\n                lane: 0,\n                revertLane: 0,\n                gesture: null,\n                action: update.action,\n                hasEagerState: update.hasEagerState,\n                eagerState: update.eagerState,\n                next: null\n              }),\n            updateLane === currentEntangledLane &&\n              (didReadFromEntangledAsyncAction$60 = !0);\n        else if ((renderLanes & revertLane) === revertLane) {\n          update = update.next;\n          revertLane === currentEntangledLane &&\n            (didReadFromEntangledAsyncAction$60 = !0);\n          continue;\n        } else\n          (updateLane = {\n            lane: 0,\n            revertLane: update.revertLane,\n            gesture: null,\n            action: update.action,\n            hasEagerState: update.hasEagerState,\n            eagerState: update.eagerState,\n            next: null\n          }),\n            null === newBaseQueueLast\n              ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),\n                (baseFirst = pendingQueue))\n              : (newBaseQueueLast = newBaseQueueLast.next = updateLane),\n            (currentlyRenderingFiber.lanes |= revertLane),\n            (workInProgressRootSkippedLanes |= revertLane);\n        updateLane = update.action;\n        shouldDoubleInvokeUserFnsInHooksDEV &&\n          reducer(pendingQueue, updateLane);\n        pendingQueue = update.hasEagerState\n          ? update.eagerState\n          : reducer(pendingQueue, updateLane);\n      } else\n        (revertLane = {\n          lane: updateLane,\n          revertLane: update.revertLane,\n          gesture: update.gesture,\n          action: update.action,\n          hasEagerState: update.hasEagerState,\n          eagerState: update.eagerState,\n          next: null\n        }),\n          null === newBaseQueueLast\n            ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),\n              (baseFirst = pendingQueue))\n            : (newBaseQueueLast = newBaseQueueLast.next = revertLane),\n          (currentlyRenderingFiber.lanes |= updateLane),\n          (workInProgressRootSkippedLanes |= updateLane);\n      update = update.next;\n    } while (null !== update && update !== current);\n    null === newBaseQueueLast\n      ? (baseFirst = pendingQueue)\n      : (newBaseQueueLast.next = newBaseQueueFirst);\n    if (\n      !objectIs(pendingQueue, hook.memoizedState) &&\n      ((didReceiveUpdate = !0),\n      didReadFromEntangledAsyncAction$60 &&\n        ((reducer = currentEntangledActionThenable), null !== reducer))\n    )\n      throw reducer;\n    hook.memoizedState = pendingQueue;\n    hook.baseState = baseFirst;\n    hook.baseQueue = newBaseQueueLast;\n    queue.lastRenderedState = pendingQueue;\n  }\n  null === baseQueue && (queue.lanes = 0);\n  return [hook.memoizedState, queue.dispatch];\n}\nfunction rerenderReducer(reducer) {\n  var hook = updateWorkInProgressHook(),\n    queue = hook.queue;\n  if (null === queue) throw Error(formatProdErrorMessage(311));\n  queue.lastRenderedReducer = reducer;\n  var dispatch = queue.dispatch,\n    lastRenderPhaseUpdate = queue.pending,\n    newState = hook.memoizedState;\n  if (null !== lastRenderPhaseUpdate) {\n    queue.pending = null;\n    var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);\n    do (newState = reducer(newState, update.action)), (update = update.next);\n    while (update !== lastRenderPhaseUpdate);\n    objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);\n    hook.memoizedState = newState;\n    null === hook.baseQueue && (hook.baseState = newState);\n    queue.lastRenderedState = newState;\n  }\n  return [newState, dispatch];\n}\nfunction updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n  var fiber = currentlyRenderingFiber,\n    hook = updateWorkInProgressHook(),\n    isHydrating$jscomp$0 = isHydrating;\n  if (isHydrating$jscomp$0) {\n    if (void 0 === getServerSnapshot) throw Error(formatProdErrorMessage(407));\n    getServerSnapshot = getServerSnapshot();\n  } else getServerSnapshot = getSnapshot();\n  var snapshotChanged = !objectIs(\n    (currentHook || hook).memoizedState,\n    getServerSnapshot\n  );\n  snapshotChanged &&\n    ((hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0));\n  hook = hook.queue;\n  updateEffect(subscribeToStore.bind(null, fiber, hook, subscribe), [\n    subscribe\n  ]);\n  if (\n    hook.getSnapshot !== getSnapshot ||\n    snapshotChanged ||\n    (null !== workInProgressHook && workInProgressHook.memoizedState.tag & 1)\n  ) {\n    fiber.flags |= 2048;\n    pushSimpleEffect(\n      9,\n      { destroy: void 0 },\n      updateStoreInstance.bind(\n        null,\n        fiber,\n        hook,\n        getServerSnapshot,\n        getSnapshot\n      ),\n      null\n    );\n    if (null === workInProgressRoot) throw Error(formatProdErrorMessage(349));\n    isHydrating$jscomp$0 ||\n      0 !== (renderLanes & 127) ||\n      pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n  }\n  return getServerSnapshot;\n}\nfunction pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n  fiber.flags |= 16384;\n  fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };\n  getSnapshot = currentlyRenderingFiber.updateQueue;\n  null === getSnapshot\n    ? ((getSnapshot = createFunctionComponentUpdateQueue()),\n      (currentlyRenderingFiber.updateQueue = getSnapshot),\n      (getSnapshot.stores = [fiber]))\n    : ((renderedSnapshot = getSnapshot.stores),\n      null === renderedSnapshot\n        ? (getSnapshot.stores = [fiber])\n        : renderedSnapshot.push(fiber));\n}\nfunction updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n  inst.value = nextSnapshot;\n  inst.getSnapshot = getSnapshot;\n  checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n}\nfunction subscribeToStore(fiber, inst, subscribe) {\n  return subscribe(function () {\n    checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n  });\n}\nfunction checkIfSnapshotChanged(inst) {\n  var latestGetSnapshot = inst.getSnapshot;\n  inst = inst.value;\n  try {\n    var nextValue = latestGetSnapshot();\n    return !objectIs(inst, nextValue);\n  } catch (error) {\n    return !0;\n  }\n}\nfunction forceStoreRerender(fiber) {\n  var root = enqueueConcurrentRenderForLane(fiber, 2);\n  null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n}\nfunction mountStateImpl(initialState) {\n  var hook = mountWorkInProgressHook();\n  if (\"function\" === typeof initialState) {\n    var initialStateInitializer = initialState;\n    initialState = initialStateInitializer();\n    if (shouldDoubleInvokeUserFnsInHooksDEV) {\n      setIsStrictModeForDevtools(!0);\n      try {\n        initialStateInitializer();\n      } finally {\n        setIsStrictModeForDevtools(!1);\n      }\n    }\n  }\n  hook.memoizedState = hook.baseState = initialState;\n  hook.queue = {\n    pending: null,\n    lanes: 0,\n    dispatch: null,\n    lastRenderedReducer: basicStateReducer,\n    lastRenderedState: initialState\n  };\n  return hook;\n}\nfunction updateOptimisticImpl(hook, current, passthrough, reducer) {\n  hook.baseState = passthrough;\n  return updateReducerImpl(\n    hook,\n    currentHook,\n    \"function\" === typeof reducer ? reducer : basicStateReducer\n  );\n}\nfunction dispatchActionState(\n  fiber,\n  actionQueue,\n  setPendingState,\n  setState,\n  payload\n) {\n  if (isRenderPhaseUpdate(fiber)) throw Error(formatProdErrorMessage(485));\n  fiber = actionQueue.action;\n  if (null !== fiber) {\n    var actionNode = {\n      payload: payload,\n      action: fiber,\n      next: null,\n      isTransition: !0,\n      status: \"pending\",\n      value: null,\n      reason: null,\n      listeners: [],\n      then: function (listener) {\n        actionNode.listeners.push(listener);\n      }\n    };\n    null !== ReactSharedInternals.T\n      ? setPendingState(!0)\n      : (actionNode.isTransition = !1);\n    setState(actionNode);\n    setPendingState = actionQueue.pending;\n    null === setPendingState\n      ? ((actionNode.next = actionQueue.pending = actionNode),\n        runActionStateAction(actionQueue, actionNode))\n      : ((actionNode.next = setPendingState.next),\n        (actionQueue.pending = setPendingState.next = actionNode));\n  }\n}\nfunction runActionStateAction(actionQueue, node) {\n  var action = node.action,\n    payload = node.payload,\n    prevState = actionQueue.state;\n  if (node.isTransition) {\n    var prevTransition = ReactSharedInternals.T,\n      currentTransition = {};\n    ReactSharedInternals.T = currentTransition;\n    try {\n      var returnValue = action(prevState, payload),\n        onStartTransitionFinish = ReactSharedInternals.S;\n      null !== onStartTransitionFinish &&\n        onStartTransitionFinish(currentTransition, returnValue);\n      handleActionReturnValue(actionQueue, node, returnValue);\n    } catch (error) {\n      onActionError(actionQueue, node, error);\n    } finally {\n      null !== prevTransition &&\n        null !== currentTransition.types &&\n        (prevTransition.types = currentTransition.types),\n        (ReactSharedInternals.T = prevTransition);\n    }\n  } else\n    try {\n      (prevTransition = action(prevState, payload)),\n        handleActionReturnValue(actionQueue, node, prevTransition);\n    } catch (error$66) {\n      onActionError(actionQueue, node, error$66);\n    }\n}\nfunction handleActionReturnValue(actionQueue, node, returnValue) {\n  null !== returnValue &&\n  \"object\" === typeof returnValue &&\n  \"function\" === typeof returnValue.then\n    ? returnValue.then(\n        function (nextState) {\n          onActionSuccess(actionQueue, node, nextState);\n        },\n        function (error) {\n          return onActionError(actionQueue, node, error);\n        }\n      )\n    : onActionSuccess(actionQueue, node, returnValue);\n}\nfunction onActionSuccess(actionQueue, actionNode, nextState) {\n  actionNode.status = \"fulfilled\";\n  actionNode.value = nextState;\n  notifyActionListeners(actionNode);\n  actionQueue.state = nextState;\n  actionNode = actionQueue.pending;\n  null !== actionNode &&\n    ((nextState = actionNode.next),\n    nextState === actionNode\n      ? (actionQueue.pending = null)\n      : ((nextState = nextState.next),\n        (actionNode.next = nextState),\n        runActionStateAction(actionQueue, nextState)));\n}\nfunction onActionError(actionQueue, actionNode, error) {\n  var last = actionQueue.pending;\n  actionQueue.pending = null;\n  if (null !== last) {\n    last = last.next;\n    do\n      (actionNode.status = \"rejected\"),\n        (actionNode.reason = error),\n        notifyActionListeners(actionNode),\n        (actionNode = actionNode.next);\n    while (actionNode !== last);\n  }\n  actionQueue.action = null;\n}\nfunction notifyActionListeners(actionNode) {\n  actionNode = actionNode.listeners;\n  for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();\n}\nfunction actionStateReducer(oldState, newState) {\n  return newState;\n}\nfunction mountActionState(action, initialStateProp) {\n  if (isHydrating) {\n    var ssrFormState = workInProgressRoot.formState;\n    if (null !== ssrFormState) {\n      a: {\n        var JSCompiler_inline_result = currentlyRenderingFiber;\n        if (isHydrating) {\n          if (nextHydratableInstance) {\n            b: {\n              var JSCompiler_inline_result$jscomp$0 = nextHydratableInstance;\n              for (\n                var inRootOrSingleton = rootOrSingletonContext;\n                8 !== JSCompiler_inline_result$jscomp$0.nodeType;\n\n              ) {\n                if (!inRootOrSingleton) {\n                  JSCompiler_inline_result$jscomp$0 = null;\n                  break b;\n                }\n                JSCompiler_inline_result$jscomp$0 = getNextHydratable(\n                  JSCompiler_inline_result$jscomp$0.nextSibling\n                );\n                if (null === JSCompiler_inline_result$jscomp$0) {\n                  JSCompiler_inline_result$jscomp$0 = null;\n                  break b;\n                }\n              }\n              inRootOrSingleton = JSCompiler_inline_result$jscomp$0.data;\n              JSCompiler_inline_result$jscomp$0 =\n                \"F!\" === inRootOrSingleton || \"F\" === inRootOrSingleton\n                  ? JSCompiler_inline_result$jscomp$0\n                  : null;\n            }\n            if (JSCompiler_inline_result$jscomp$0) {\n              nextHydratableInstance = getNextHydratable(\n                JSCompiler_inline_result$jscomp$0.nextSibling\n              );\n              JSCompiler_inline_result =\n                \"F!\" === JSCompiler_inline_result$jscomp$0.data;\n              break a;\n            }\n          }\n          throwOnHydrationMismatch(JSCompiler_inline_result);\n        }\n        JSCompiler_inline_result = !1;\n      }\n      JSCompiler_inline_result && (initialStateProp = ssrFormState[0]);\n    }\n  }\n  ssrFormState = mountWorkInProgressHook();\n  ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;\n  JSCompiler_inline_result = {\n    pending: null,\n    lanes: 0,\n    dispatch: null,\n    lastRenderedReducer: actionStateReducer,\n    lastRenderedState: initialStateProp\n  };\n  ssrFormState.queue = JSCompiler_inline_result;\n  ssrFormState = dispatchSetState.bind(\n    null,\n    currentlyRenderingFiber,\n    JSCompiler_inline_result\n  );\n  JSCompiler_inline_result.dispatch = ssrFormState;\n  JSCompiler_inline_result = mountStateImpl(!1);\n  inRootOrSingleton = dispatchOptimisticSetState.bind(\n    null,\n    currentlyRenderingFiber,\n    !1,\n    JSCompiler_inline_result.queue\n  );\n  JSCompiler_inline_result = mountWorkInProgressHook();\n  JSCompiler_inline_result$jscomp$0 = {\n    state: initialStateProp,\n    dispatch: null,\n    action: action,\n    pending: null\n  };\n  JSCompiler_inline_result.queue = JSCompiler_inline_result$jscomp$0;\n  ssrFormState = dispatchActionState.bind(\n    null,\n    currentlyRenderingFiber,\n    JSCompiler_inline_result$jscomp$0,\n    inRootOrSingleton,\n    ssrFormState\n  );\n  JSCompiler_inline_result$jscomp$0.dispatch = ssrFormState;\n  JSCompiler_inline_result.memoizedState = action;\n  return [initialStateProp, ssrFormState, !1];\n}\nfunction updateActionState(action) {\n  var stateHook = updateWorkInProgressHook();\n  return updateActionStateImpl(stateHook, currentHook, action);\n}\nfunction updateActionStateImpl(stateHook, currentStateHook, action) {\n  currentStateHook = updateReducerImpl(\n    stateHook,\n    currentStateHook,\n    actionStateReducer\n  )[0];\n  stateHook = updateReducer(basicStateReducer)[0];\n  if (\n    \"object\" === typeof currentStateHook &&\n    null !== currentStateHook &&\n    \"function\" === typeof currentStateHook.then\n  )\n    try {\n      var state = useThenable(currentStateHook);\n    } catch (x) {\n      if (x === SuspenseException) throw SuspenseActionException;\n      throw x;\n    }\n  else state = currentStateHook;\n  currentStateHook = updateWorkInProgressHook();\n  var actionQueue = currentStateHook.queue,\n    dispatch = actionQueue.dispatch;\n  action !== currentStateHook.memoizedState &&\n    ((currentlyRenderingFiber.flags |= 2048),\n    pushSimpleEffect(\n      9,\n      { destroy: void 0 },\n      actionStateActionEffect.bind(null, actionQueue, action),\n      null\n    ));\n  return [state, dispatch, stateHook];\n}\nfunction actionStateActionEffect(actionQueue, action) {\n  actionQueue.action = action;\n}\nfunction rerenderActionState(action) {\n  var stateHook = updateWorkInProgressHook(),\n    currentStateHook = currentHook;\n  if (null !== currentStateHook)\n    return updateActionStateImpl(stateHook, currentStateHook, action);\n  updateWorkInProgressHook();\n  stateHook = stateHook.memoizedState;\n  currentStateHook = updateWorkInProgressHook();\n  var dispatch = currentStateHook.queue.dispatch;\n  currentStateHook.memoizedState = action;\n  return [stateHook, dispatch, !1];\n}\nfunction pushSimpleEffect(tag, inst, create, deps) {\n  tag = { tag: tag, create: create, deps: deps, inst: inst, next: null };\n  inst = currentlyRenderingFiber.updateQueue;\n  null === inst &&\n    ((inst = createFunctionComponentUpdateQueue()),\n    (currentlyRenderingFiber.updateQueue = inst));\n  create = inst.lastEffect;\n  null === create\n    ? (inst.lastEffect = tag.next = tag)\n    : ((deps = create.next),\n      (create.next = tag),\n      (tag.next = deps),\n      (inst.lastEffect = tag));\n  return tag;\n}\nfunction updateRef() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction mountEffectImpl(fiberFlags, hookFlags, create, deps) {\n  var hook = mountWorkInProgressHook();\n  currentlyRenderingFiber.flags |= fiberFlags;\n  hook.memoizedState = pushSimpleEffect(\n    1 | hookFlags,\n    { destroy: void 0 },\n    create,\n    void 0 === deps ? null : deps\n  );\n}\nfunction updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var inst = hook.memoizedState.inst;\n  null !== currentHook &&\n  null !== deps &&\n  areHookInputsEqual(deps, currentHook.memoizedState.deps)\n    ? (hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps))\n    : ((currentlyRenderingFiber.flags |= fiberFlags),\n      (hook.memoizedState = pushSimpleEffect(\n        1 | hookFlags,\n        inst,\n        create,\n        deps\n      )));\n}\nfunction mountEffect(create, deps) {\n  mountEffectImpl(8390656, 8, create, deps);\n}\nfunction updateEffect(create, deps) {\n  updateEffectImpl(2048, 8, create, deps);\n}\nfunction useEffectEventImpl(payload) {\n  currentlyRenderingFiber.flags |= 4;\n  var componentUpdateQueue = currentlyRenderingFiber.updateQueue;\n  if (null === componentUpdateQueue)\n    (componentUpdateQueue = createFunctionComponentUpdateQueue()),\n      (currentlyRenderingFiber.updateQueue = componentUpdateQueue),\n      (componentUpdateQueue.events = [payload]);\n  else {\n    var events = componentUpdateQueue.events;\n    null === events\n      ? (componentUpdateQueue.events = [payload])\n      : events.push(payload);\n  }\n}\nfunction updateEvent(callback) {\n  var ref = updateWorkInProgressHook().memoizedState;\n  useEffectEventImpl({ ref: ref, nextImpl: callback });\n  return function () {\n    if (0 !== (executionContext & 2)) throw Error(formatProdErrorMessage(440));\n    return ref.impl.apply(void 0, arguments);\n  };\n}\nfunction updateInsertionEffect(create, deps) {\n  return updateEffectImpl(4, 2, create, deps);\n}\nfunction updateLayoutEffect(create, deps) {\n  return updateEffectImpl(4, 4, create, deps);\n}\nfunction imperativeHandleEffect(create, ref) {\n  if (\"function\" === typeof ref) {\n    create = create();\n    var refCleanup = ref(create);\n    return function () {\n      \"function\" === typeof refCleanup ? refCleanup() : ref(null);\n    };\n  }\n  if (null !== ref && void 0 !== ref)\n    return (\n      (create = create()),\n      (ref.current = create),\n      function () {\n        ref.current = null;\n      }\n    );\n}\nfunction updateImperativeHandle(ref, create, deps) {\n  deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n  updateEffectImpl(4, 4, imperativeHandleEffect.bind(null, create, ref), deps);\n}\nfunction mountDebugValue() {}\nfunction updateCallback(callback, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var prevState = hook.memoizedState;\n  if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n    return prevState[0];\n  hook.memoizedState = [callback, deps];\n  return callback;\n}\nfunction updateMemo(nextCreate, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var prevState = hook.memoizedState;\n  if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n    return prevState[0];\n  prevState = nextCreate();\n  if (shouldDoubleInvokeUserFnsInHooksDEV) {\n    setIsStrictModeForDevtools(!0);\n    try {\n      nextCreate();\n    } finally {\n      setIsStrictModeForDevtools(!1);\n    }\n  }\n  hook.memoizedState = [prevState, deps];\n  return prevState;\n}\nfunction mountDeferredValueImpl(hook, value, initialValue) {\n  if (\n    void 0 === initialValue ||\n    (0 !== (renderLanes & 1073741824) &&\n      0 === (workInProgressRootRenderLanes & 261930))\n  )\n    return (hook.memoizedState = value);\n  hook.memoizedState = initialValue;\n  hook = requestDeferredLane();\n  currentlyRenderingFiber.lanes |= hook;\n  workInProgressRootSkippedLanes |= hook;\n  return initialValue;\n}\nfunction updateDeferredValueImpl(hook, prevValue, value, initialValue) {\n  if (objectIs(value, prevValue)) return value;\n  if (null !== currentTreeHiddenStackCursor.current)\n    return (\n      (hook = mountDeferredValueImpl(hook, value, initialValue)),\n      objectIs(hook, prevValue) || (didReceiveUpdate = !0),\n      hook\n    );\n  if (\n    0 === (renderLanes & 42) ||\n    (0 !== (renderLanes & 1073741824) &&\n      0 === (workInProgressRootRenderLanes & 261930))\n  )\n    return (didReceiveUpdate = !0), (hook.memoizedState = value);\n  hook = requestDeferredLane();\n  currentlyRenderingFiber.lanes |= hook;\n  workInProgressRootSkippedLanes |= hook;\n  return prevValue;\n}\nfunction startTransition(fiber, queue, pendingState, finishedState, callback) {\n  var previousPriority = ReactDOMSharedInternals.p;\n  ReactDOMSharedInternals.p =\n    0 !== previousPriority && 8 > previousPriority ? previousPriority : 8;\n  var prevTransition = ReactSharedInternals.T,\n    currentTransition = {};\n  ReactSharedInternals.T = currentTransition;\n  dispatchOptimisticSetState(fiber, !1, queue, pendingState);\n  try {\n    var returnValue = callback(),\n      onStartTransitionFinish = ReactSharedInternals.S;\n    null !== onStartTransitionFinish &&\n      onStartTransitionFinish(currentTransition, returnValue);\n    if (\n      null !== returnValue &&\n      \"object\" === typeof returnValue &&\n      \"function\" === typeof returnValue.then\n    ) {\n      var thenableForFinishedState = chainThenableValue(\n        returnValue,\n        finishedState\n      );\n      dispatchSetStateInternal(\n        fiber,\n        queue,\n        thenableForFinishedState,\n        requestUpdateLane(fiber)\n      );\n    } else\n      dispatchSetStateInternal(\n        fiber,\n        queue,\n        finishedState,\n        requestUpdateLane(fiber)\n      );\n  } catch (error) {\n    dispatchSetStateInternal(\n      fiber,\n      queue,\n      { then: function () {}, status: \"rejected\", reason: error },\n      requestUpdateLane()\n    );\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      null !== prevTransition &&\n        null !== currentTransition.types &&\n        (prevTransition.types = currentTransition.types),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction noop() {}\nfunction startHostTransition(formFiber, pendingState, action, formData) {\n  if (5 !== formFiber.tag) throw Error(formatProdErrorMessage(476));\n  var queue = ensureFormComponentIsStateful(formFiber).queue;\n  startTransition(\n    formFiber,\n    queue,\n    pendingState,\n    sharedNotPendingObject,\n    null === action\n      ? noop\n      : function () {\n          requestFormReset$1(formFiber);\n          return action(formData);\n        }\n  );\n}\nfunction ensureFormComponentIsStateful(formFiber) {\n  var existingStateHook = formFiber.memoizedState;\n  if (null !== existingStateHook) return existingStateHook;\n  existingStateHook = {\n    memoizedState: sharedNotPendingObject,\n    baseState: sharedNotPendingObject,\n    baseQueue: null,\n    queue: {\n      pending: null,\n      lanes: 0,\n      dispatch: null,\n      lastRenderedReducer: basicStateReducer,\n      lastRenderedState: sharedNotPendingObject\n    },\n    next: null\n  };\n  var initialResetState = {};\n  existingStateHook.next = {\n    memoizedState: initialResetState,\n    baseState: initialResetState,\n    baseQueue: null,\n    queue: {\n      pending: null,\n      lanes: 0,\n      dispatch: null,\n      lastRenderedReducer: basicStateReducer,\n      lastRenderedState: initialResetState\n    },\n    next: null\n  };\n  formFiber.memoizedState = existingStateHook;\n  formFiber = formFiber.alternate;\n  null !== formFiber && (formFiber.memoizedState = existingStateHook);\n  return existingStateHook;\n}\nfunction requestFormReset$1(formFiber) {\n  var stateHook = ensureFormComponentIsStateful(formFiber);\n  null === stateHook.next && (stateHook = formFiber.alternate.memoizedState);\n  dispatchSetStateInternal(\n    formFiber,\n    stateHook.next.queue,\n    {},\n    requestUpdateLane()\n  );\n}\nfunction useHostTransitionStatus() {\n  return readContext(HostTransitionContext);\n}\nfunction updateId() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction updateRefresh() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction refreshCache(fiber) {\n  for (var provider = fiber.return; null !== provider; ) {\n    switch (provider.tag) {\n      case 24:\n      case 3:\n        var lane = requestUpdateLane();\n        fiber = createUpdate(lane);\n        var root$69 = enqueueUpdate(provider, fiber, lane);\n        null !== root$69 &&\n          (scheduleUpdateOnFiber(root$69, provider, lane),\n          entangleTransitions(root$69, provider, lane));\n        provider = { cache: createCache() };\n        fiber.payload = provider;\n        return;\n    }\n    provider = provider.return;\n  }\n}\nfunction dispatchReducerAction(fiber, queue, action) {\n  var lane = requestUpdateLane();\n  action = {\n    lane: lane,\n    revertLane: 0,\n    gesture: null,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  isRenderPhaseUpdate(fiber)\n    ? enqueueRenderPhaseUpdate(queue, action)\n    : ((action = enqueueConcurrentHookUpdate(fiber, queue, action, lane)),\n      null !== action &&\n        (scheduleUpdateOnFiber(action, fiber, lane),\n        entangleTransitionUpdate(action, queue, lane)));\n}\nfunction dispatchSetState(fiber, queue, action) {\n  var lane = requestUpdateLane();\n  dispatchSetStateInternal(fiber, queue, action, lane);\n}\nfunction dispatchSetStateInternal(fiber, queue, action, lane) {\n  var update = {\n    lane: lane,\n    revertLane: 0,\n    gesture: null,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);\n  else {\n    var alternate = fiber.alternate;\n    if (\n      0 === fiber.lanes &&\n      (null === alternate || 0 === alternate.lanes) &&\n      ((alternate = queue.lastRenderedReducer), null !== alternate)\n    )\n      try {\n        var currentState = queue.lastRenderedState,\n          eagerState = alternate(currentState, action);\n        update.hasEagerState = !0;\n        update.eagerState = eagerState;\n        if (objectIs(eagerState, currentState))\n          return (\n            enqueueUpdate$1(fiber, queue, update, 0),\n            null === workInProgressRoot && finishQueueingConcurrentUpdates(),\n            !1\n          );\n      } catch (error) {\n      } finally {\n      }\n    action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n    if (null !== action)\n      return (\n        scheduleUpdateOnFiber(action, fiber, lane),\n        entangleTransitionUpdate(action, queue, lane),\n        !0\n      );\n  }\n  return !1;\n}\nfunction dispatchOptimisticSetState(fiber, throwIfDuringRender, queue, action) {\n  action = {\n    lane: 2,\n    revertLane: requestTransitionLane(),\n    gesture: null,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  if (isRenderPhaseUpdate(fiber)) {\n    if (throwIfDuringRender) throw Error(formatProdErrorMessage(479));\n  } else\n    (throwIfDuringRender = enqueueConcurrentHookUpdate(\n      fiber,\n      queue,\n      action,\n      2\n    )),\n      null !== throwIfDuringRender &&\n        scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);\n}\nfunction isRenderPhaseUpdate(fiber) {\n  var alternate = fiber.alternate;\n  return (\n    fiber === currentlyRenderingFiber ||\n    (null !== alternate && alternate === currentlyRenderingFiber)\n  );\n}\nfunction enqueueRenderPhaseUpdate(queue, update) {\n  didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate =\n    !0;\n  var pending = queue.pending;\n  null === pending\n    ? (update.next = update)\n    : ((update.next = pending.next), (pending.next = update));\n  queue.pending = update;\n}\nfunction entangleTransitionUpdate(root, queue, lane) {\n  if (0 !== (lane & 4194048)) {\n    var queueLanes = queue.lanes;\n    queueLanes &= root.pendingLanes;\n    lane |= queueLanes;\n    queue.lanes = lane;\n    markRootEntangled(root, lane);\n  }\n}\nvar ContextOnlyDispatcher = {\n  readContext: readContext,\n  use: use,\n  useCallback: throwInvalidHookError,\n  useContext: throwInvalidHookError,\n  useEffect: throwInvalidHookError,\n  useImperativeHandle: throwInvalidHookError,\n  useLayoutEffect: throwInvalidHookError,\n  useInsertionEffect: throwInvalidHookError,\n  useMemo: throwInvalidHookError,\n  useReducer: throwInvalidHookError,\n  useRef: throwInvalidHookError,\n  useState: throwInvalidHookError,\n  useDebugValue: throwInvalidHookError,\n  useDeferredValue: throwInvalidHookError,\n  useTransition: throwInvalidHookError,\n  useSyncExternalStore: throwInvalidHookError,\n  useId: throwInvalidHookError,\n  useHostTransitionStatus: throwInvalidHookError,\n  useFormState: throwInvalidHookError,\n  useActionState: throwInvalidHookError,\n  useOptimistic: throwInvalidHookError,\n  useMemoCache: throwInvalidHookError,\n  useCacheRefresh: throwInvalidHookError\n};\nContextOnlyDispatcher.useEffectEvent = throwInvalidHookError;\nvar HooksDispatcherOnMount = {\n    readContext: readContext,\n    use: use,\n    useCallback: function (callback, deps) {\n      mountWorkInProgressHook().memoizedState = [\n        callback,\n        void 0 === deps ? null : deps\n      ];\n      return callback;\n    },\n    useContext: readContext,\n    useEffect: mountEffect,\n    useImperativeHandle: function (ref, create, deps) {\n      deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n      mountEffectImpl(\n        4194308,\n        4,\n        imperativeHandleEffect.bind(null, create, ref),\n        deps\n      );\n    },\n    useLayoutEffect: function (create, deps) {\n      return mountEffectImpl(4194308, 4, create, deps);\n    },\n    useInsertionEffect: function (create, deps) {\n      mountEffectImpl(4, 2, create, deps);\n    },\n    useMemo: function (nextCreate, deps) {\n      var hook = mountWorkInProgressHook();\n      deps = void 0 === deps ? null : deps;\n      var nextValue = nextCreate();\n      if (shouldDoubleInvokeUserFnsInHooksDEV) {\n        setIsStrictModeForDevtools(!0);\n        try {\n          nextCreate();\n        } finally {\n          setIsStrictModeForDevtools(!1);\n        }\n      }\n      hook.memoizedState = [nextValue, deps];\n      return nextValue;\n    },\n    useReducer: function (reducer, initialArg, init) {\n      var hook = mountWorkInProgressHook();\n      if (void 0 !== init) {\n        var initialState = init(initialArg);\n        if (shouldDoubleInvokeUserFnsInHooksDEV) {\n          setIsStrictModeForDevtools(!0);\n          try {\n            init(initialArg);\n          } finally {\n            setIsStrictModeForDevtools(!1);\n          }\n        }\n      } else initialState = initialArg;\n      hook.memoizedState = hook.baseState = initialState;\n      reducer = {\n        pending: null,\n        lanes: 0,\n        dispatch: null,\n        lastRenderedReducer: reducer,\n        lastRenderedState: initialState\n      };\n      hook.queue = reducer;\n      reducer = reducer.dispatch = dispatchReducerAction.bind(\n        null,\n        currentlyRenderingFiber,\n        reducer\n      );\n      return [hook.memoizedState, reducer];\n    },\n    useRef: function (initialValue) {\n      var hook = mountWorkInProgressHook();\n      initialValue = { current: initialValue };\n      return (hook.memoizedState = initialValue);\n    },\n    useState: function (initialState) {\n      initialState = mountStateImpl(initialState);\n      var queue = initialState.queue,\n        dispatch = dispatchSetState.bind(null, currentlyRenderingFiber, queue);\n      queue.dispatch = dispatch;\n      return [initialState.memoizedState, dispatch];\n    },\n    useDebugValue: mountDebugValue,\n    useDeferredValue: function (value, initialValue) {\n      var hook = mountWorkInProgressHook();\n      return mountDeferredValueImpl(hook, value, initialValue);\n    },\n    useTransition: function () {\n      var stateHook = mountStateImpl(!1);\n      stateHook = startTransition.bind(\n        null,\n        currentlyRenderingFiber,\n        stateHook.queue,\n        !0,\n        !1\n      );\n      mountWorkInProgressHook().memoizedState = stateHook;\n      return [!1, stateHook];\n    },\n    useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n      var fiber = currentlyRenderingFiber,\n        hook = mountWorkInProgressHook();\n      if (isHydrating) {\n        if (void 0 === getServerSnapshot)\n          throw Error(formatProdErrorMessage(407));\n        getServerSnapshot = getServerSnapshot();\n      } else {\n        getServerSnapshot = getSnapshot();\n        if (null === workInProgressRoot)\n          throw Error(formatProdErrorMessage(349));\n        0 !== (workInProgressRootRenderLanes & 127) ||\n          pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n      }\n      hook.memoizedState = getServerSnapshot;\n      var inst = { value: getServerSnapshot, getSnapshot: getSnapshot };\n      hook.queue = inst;\n      mountEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [\n        subscribe\n      ]);\n      fiber.flags |= 2048;\n      pushSimpleEffect(\n        9,\n        { destroy: void 0 },\n        updateStoreInstance.bind(\n          null,\n          fiber,\n          inst,\n          getServerSnapshot,\n          getSnapshot\n        ),\n        null\n      );\n      return getServerSnapshot;\n    },\n    useId: function () {\n      var hook = mountWorkInProgressHook(),\n        identifierPrefix = workInProgressRoot.identifierPrefix;\n      if (isHydrating) {\n        var JSCompiler_inline_result = treeContextOverflow;\n        var idWithLeadingBit = treeContextId;\n        JSCompiler_inline_result =\n          (\n            idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))\n          ).toString(32) + JSCompiler_inline_result;\n        identifierPrefix =\n          \"_\" + identifierPrefix + \"R_\" + JSCompiler_inline_result;\n        JSCompiler_inline_result = localIdCounter++;\n        0 < JSCompiler_inline_result &&\n          (identifierPrefix += \"H\" + JSCompiler_inline_result.toString(32));\n        identifierPrefix += \"_\";\n      } else\n        (JSCompiler_inline_result = globalClientIdCounter++),\n          (identifierPrefix =\n            \"_\" +\n            identifierPrefix +\n            \"r_\" +\n            JSCompiler_inline_result.toString(32) +\n            \"_\");\n      return (hook.memoizedState = identifierPrefix);\n    },\n    useHostTransitionStatus: useHostTransitionStatus,\n    useFormState: mountActionState,\n    useActionState: mountActionState,\n    useOptimistic: function (passthrough) {\n      var hook = mountWorkInProgressHook();\n      hook.memoizedState = hook.baseState = passthrough;\n      var queue = {\n        pending: null,\n        lanes: 0,\n        dispatch: null,\n        lastRenderedReducer: null,\n        lastRenderedState: null\n      };\n      hook.queue = queue;\n      hook = dispatchOptimisticSetState.bind(\n        null,\n        currentlyRenderingFiber,\n        !0,\n        queue\n      );\n      queue.dispatch = hook;\n      return [passthrough, hook];\n    },\n    useMemoCache: useMemoCache,\n    useCacheRefresh: function () {\n      return (mountWorkInProgressHook().memoizedState = refreshCache.bind(\n        null,\n        currentlyRenderingFiber\n      ));\n    },\n    useEffectEvent: function (callback) {\n      var hook = mountWorkInProgressHook(),\n        ref = { impl: callback };\n      hook.memoizedState = ref;\n      return function () {\n        if (0 !== (executionContext & 2))\n          throw Error(formatProdErrorMessage(440));\n        return ref.impl.apply(void 0, arguments);\n      };\n    }\n  },\n  HooksDispatcherOnUpdate = {\n    readContext: readContext,\n    use: use,\n    useCallback: updateCallback,\n    useContext: readContext,\n    useEffect: updateEffect,\n    useImperativeHandle: updateImperativeHandle,\n    useInsertionEffect: updateInsertionEffect,\n    useLayoutEffect: updateLayoutEffect,\n    useMemo: updateMemo,\n    useReducer: updateReducer,\n    useRef: updateRef,\n    useState: function () {\n      return updateReducer(basicStateReducer);\n    },\n    useDebugValue: mountDebugValue,\n    useDeferredValue: function (value, initialValue) {\n      var hook = updateWorkInProgressHook();\n      return updateDeferredValueImpl(\n        hook,\n        currentHook.memoizedState,\n        value,\n        initialValue\n      );\n    },\n    useTransition: function () {\n      var booleanOrThenable = updateReducer(basicStateReducer)[0],\n        start = updateWorkInProgressHook().memoizedState;\n      return [\n        \"boolean\" === typeof booleanOrThenable\n          ? booleanOrThenable\n          : useThenable(booleanOrThenable),\n        start\n      ];\n    },\n    useSyncExternalStore: updateSyncExternalStore,\n    useId: updateId,\n    useHostTransitionStatus: useHostTransitionStatus,\n    useFormState: updateActionState,\n    useActionState: updateActionState,\n    useOptimistic: function (passthrough, reducer) {\n      var hook = updateWorkInProgressHook();\n      return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n    },\n    useMemoCache: useMemoCache,\n    useCacheRefresh: updateRefresh\n  };\nHooksDispatcherOnUpdate.useEffectEvent = updateEvent;\nvar HooksDispatcherOnRerender = {\n  readContext: readContext,\n  use: use,\n  useCallback: updateCallback,\n  useContext: readContext,\n  useEffect: updateEffect,\n  useImperativeHandle: updateImperativeHandle,\n  useInsertionEffect: updateInsertionEffect,\n  useLayoutEffect: updateLayoutEffect,\n  useMemo: updateMemo,\n  useReducer: rerenderReducer,\n  useRef: updateRef,\n  useState: function () {\n    return rerenderReducer(basicStateReducer);\n  },\n  useDebugValue: mountDebugValue,\n  useDeferredValue: function (value, initialValue) {\n    var hook = updateWorkInProgressHook();\n    return null === currentHook\n      ? mountDeferredValueImpl(hook, value, initialValue)\n      : updateDeferredValueImpl(\n          hook,\n          currentHook.memoizedState,\n          value,\n          initialValue\n        );\n  },\n  useTransition: function () {\n    var booleanOrThenable = rerenderReducer(basicStateReducer)[0],\n      start = updateWorkInProgressHook().memoizedState;\n    return [\n      \"boolean\" === typeof booleanOrThenable\n        ? booleanOrThenable\n        : useThenable(booleanOrThenable),\n      start\n    ];\n  },\n  useSyncExternalStore: updateSyncExternalStore,\n  useId: updateId,\n  useHostTransitionStatus: useHostTransitionStatus,\n  useFormState: rerenderActionState,\n  useActionState: rerenderActionState,\n  useOptimistic: function (passthrough, reducer) {\n    var hook = updateWorkInProgressHook();\n    if (null !== currentHook)\n      return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n    hook.baseState = passthrough;\n    return [passthrough, hook.queue.dispatch];\n  },\n  useMemoCache: useMemoCache,\n  useCacheRefresh: updateRefresh\n};\nHooksDispatcherOnRerender.useEffectEvent = updateEvent;\nfunction applyDerivedStateFromProps(\n  workInProgress,\n  ctor,\n  getDerivedStateFromProps,\n  nextProps\n) {\n  ctor = workInProgress.memoizedState;\n  getDerivedStateFromProps = getDerivedStateFromProps(nextProps, ctor);\n  getDerivedStateFromProps =\n    null === getDerivedStateFromProps || void 0 === getDerivedStateFromProps\n      ? ctor\n      : assign({}, ctor, getDerivedStateFromProps);\n  workInProgress.memoizedState = getDerivedStateFromProps;\n  0 === workInProgress.lanes &&\n    (workInProgress.updateQueue.baseState = getDerivedStateFromProps);\n}\nvar classComponentUpdater = {\n  enqueueSetState: function (inst, payload, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.payload = payload;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    payload = enqueueUpdate(inst, update, lane);\n    null !== payload &&\n      (scheduleUpdateOnFiber(payload, inst, lane),\n      entangleTransitions(payload, inst, lane));\n  },\n  enqueueReplaceState: function (inst, payload, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.tag = 1;\n    update.payload = payload;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    payload = enqueueUpdate(inst, update, lane);\n    null !== payload &&\n      (scheduleUpdateOnFiber(payload, inst, lane),\n      entangleTransitions(payload, inst, lane));\n  },\n  enqueueForceUpdate: function (inst, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.tag = 2;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    callback = enqueueUpdate(inst, update, lane);\n    null !== callback &&\n      (scheduleUpdateOnFiber(callback, inst, lane),\n      entangleTransitions(callback, inst, lane));\n  }\n};\nfunction checkShouldComponentUpdate(\n  workInProgress,\n  ctor,\n  oldProps,\n  newProps,\n  oldState,\n  newState,\n  nextContext\n) {\n  workInProgress = workInProgress.stateNode;\n  return \"function\" === typeof workInProgress.shouldComponentUpdate\n    ? workInProgress.shouldComponentUpdate(newProps, newState, nextContext)\n    : ctor.prototype && ctor.prototype.isPureReactComponent\n      ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)\n      : !0;\n}\nfunction callComponentWillReceiveProps(\n  workInProgress,\n  instance,\n  newProps,\n  nextContext\n) {\n  workInProgress = instance.state;\n  \"function\" === typeof instance.componentWillReceiveProps &&\n    instance.componentWillReceiveProps(newProps, nextContext);\n  \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n    instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n  instance.state !== workInProgress &&\n    classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n}\nfunction resolveClassComponentProps(Component, baseProps) {\n  var newProps = baseProps;\n  if (\"ref\" in baseProps) {\n    newProps = {};\n    for (var propName in baseProps)\n      \"ref\" !== propName && (newProps[propName] = baseProps[propName]);\n  }\n  if ((Component = Component.defaultProps)) {\n    newProps === baseProps && (newProps = assign({}, newProps));\n    for (var propName$73 in Component)\n      void 0 === newProps[propName$73] &&\n        (newProps[propName$73] = Component[propName$73]);\n  }\n  return newProps;\n}\nfunction defaultOnUncaughtError(error) {\n  reportGlobalError(error);\n}\nfunction defaultOnCaughtError(error) {\n  console.error(error);\n}\nfunction defaultOnRecoverableError(error) {\n  reportGlobalError(error);\n}\nfunction logUncaughtError(root, errorInfo) {\n  try {\n    var onUncaughtError = root.onUncaughtError;\n    onUncaughtError(errorInfo.value, { componentStack: errorInfo.stack });\n  } catch (e$74) {\n    setTimeout(function () {\n      throw e$74;\n    });\n  }\n}\nfunction logCaughtError(root, boundary, errorInfo) {\n  try {\n    var onCaughtError = root.onCaughtError;\n    onCaughtError(errorInfo.value, {\n      componentStack: errorInfo.stack,\n      errorBoundary: 1 === boundary.tag ? boundary.stateNode : null\n    });\n  } catch (e$75) {\n    setTimeout(function () {\n      throw e$75;\n    });\n  }\n}\nfunction createRootErrorUpdate(root, errorInfo, lane) {\n  lane = createUpdate(lane);\n  lane.tag = 3;\n  lane.payload = { element: null };\n  lane.callback = function () {\n    logUncaughtError(root, errorInfo);\n  };\n  return lane;\n}\nfunction createClassErrorUpdate(lane) {\n  lane = createUpdate(lane);\n  lane.tag = 3;\n  return lane;\n}\nfunction initializeClassErrorUpdate(update, root, fiber, errorInfo) {\n  var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n  if (\"function\" === typeof getDerivedStateFromError) {\n    var error = errorInfo.value;\n    update.payload = function () {\n      return getDerivedStateFromError(error);\n    };\n    update.callback = function () {\n      logCaughtError(root, fiber, errorInfo);\n    };\n  }\n  var inst = fiber.stateNode;\n  null !== inst &&\n    \"function\" === typeof inst.componentDidCatch &&\n    (update.callback = function () {\n      logCaughtError(root, fiber, errorInfo);\n      \"function\" !== typeof getDerivedStateFromError &&\n        (null === legacyErrorBoundariesThatAlreadyFailed\n          ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))\n          : legacyErrorBoundariesThatAlreadyFailed.add(this));\n      var stack = errorInfo.stack;\n      this.componentDidCatch(errorInfo.value, {\n        componentStack: null !== stack ? stack : \"\"\n      });\n    });\n}\nfunction throwException(\n  root,\n  returnFiber,\n  sourceFiber,\n  value,\n  rootRenderLanes\n) {\n  sourceFiber.flags |= 32768;\n  if (\n    null !== value &&\n    \"object\" === typeof value &&\n    \"function\" === typeof value.then\n  ) {\n    returnFiber = sourceFiber.alternate;\n    null !== returnFiber &&\n      propagateParentContextChanges(\n        returnFiber,\n        sourceFiber,\n        rootRenderLanes,\n        !0\n      );\n    sourceFiber = suspenseHandlerStackCursor.current;\n    if (null !== sourceFiber) {\n      switch (sourceFiber.tag) {\n        case 31:\n        case 13:\n          return (\n            null === shellBoundary\n              ? renderDidSuspendDelayIfPossible()\n              : null === sourceFiber.alternate &&\n                0 === workInProgressRootExitStatus &&\n                (workInProgressRootExitStatus = 3),\n            (sourceFiber.flags &= -257),\n            (sourceFiber.flags |= 65536),\n            (sourceFiber.lanes = rootRenderLanes),\n            value === noopSuspenseyCommitThenable\n              ? (sourceFiber.flags |= 16384)\n              : ((returnFiber = sourceFiber.updateQueue),\n                null === returnFiber\n                  ? (sourceFiber.updateQueue = new Set([value]))\n                  : returnFiber.add(value),\n                attachPingListener(root, value, rootRenderLanes)),\n            !1\n          );\n        case 22:\n          return (\n            (sourceFiber.flags |= 65536),\n            value === noopSuspenseyCommitThenable\n              ? (sourceFiber.flags |= 16384)\n              : ((returnFiber = sourceFiber.updateQueue),\n                null === returnFiber\n                  ? ((returnFiber = {\n                      transitions: null,\n                      markerInstances: null,\n                      retryQueue: new Set([value])\n                    }),\n                    (sourceFiber.updateQueue = returnFiber))\n                  : ((sourceFiber = returnFiber.retryQueue),\n                    null === sourceFiber\n                      ? (returnFiber.retryQueue = new Set([value]))\n                      : sourceFiber.add(value)),\n                attachPingListener(root, value, rootRenderLanes)),\n            !1\n          );\n      }\n      throw Error(formatProdErrorMessage(435, sourceFiber.tag));\n    }\n    attachPingListener(root, value, rootRenderLanes);\n    renderDidSuspendDelayIfPossible();\n    return !1;\n  }\n  if (isHydrating)\n    return (\n      (returnFiber = suspenseHandlerStackCursor.current),\n      null !== returnFiber\n        ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),\n          (returnFiber.flags |= 65536),\n          (returnFiber.lanes = rootRenderLanes),\n          value !== HydrationMismatchException &&\n            ((root = Error(formatProdErrorMessage(422), { cause: value })),\n            queueHydrationError(createCapturedValueAtFiber(root, sourceFiber))))\n        : (value !== HydrationMismatchException &&\n            ((returnFiber = Error(formatProdErrorMessage(423), {\n              cause: value\n            })),\n            queueHydrationError(\n              createCapturedValueAtFiber(returnFiber, sourceFiber)\n            )),\n          (root = root.current.alternate),\n          (root.flags |= 65536),\n          (rootRenderLanes &= -rootRenderLanes),\n          (root.lanes |= rootRenderLanes),\n          (value = createCapturedValueAtFiber(value, sourceFiber)),\n          (rootRenderLanes = createRootErrorUpdate(\n            root.stateNode,\n            value,\n            rootRenderLanes\n          )),\n          enqueueCapturedUpdate(root, rootRenderLanes),\n          4 !== workInProgressRootExitStatus &&\n            (workInProgressRootExitStatus = 2)),\n      !1\n    );\n  var wrapperError = Error(formatProdErrorMessage(520), { cause: value });\n  wrapperError = createCapturedValueAtFiber(wrapperError, sourceFiber);\n  null === workInProgressRootConcurrentErrors\n    ? (workInProgressRootConcurrentErrors = [wrapperError])\n    : workInProgressRootConcurrentErrors.push(wrapperError);\n  4 !== workInProgressRootExitStatus && (workInProgressRootExitStatus = 2);\n  if (null === returnFiber) return !0;\n  value = createCapturedValueAtFiber(value, sourceFiber);\n  sourceFiber = returnFiber;\n  do {\n    switch (sourceFiber.tag) {\n      case 3:\n        return (\n          (sourceFiber.flags |= 65536),\n          (root = rootRenderLanes & -rootRenderLanes),\n          (sourceFiber.lanes |= root),\n          (root = createRootErrorUpdate(sourceFiber.stateNode, value, root)),\n          enqueueCapturedUpdate(sourceFiber, root),\n          !1\n        );\n      case 1:\n        if (\n          ((returnFiber = sourceFiber.type),\n          (wrapperError = sourceFiber.stateNode),\n          0 === (sourceFiber.flags & 128) &&\n            (\"function\" === typeof returnFiber.getDerivedStateFromError ||\n              (null !== wrapperError &&\n                \"function\" === typeof wrapperError.componentDidCatch &&\n                (null === legacyErrorBoundariesThatAlreadyFailed ||\n                  !legacyErrorBoundariesThatAlreadyFailed.has(wrapperError)))))\n        )\n          return (\n            (sourceFiber.flags |= 65536),\n            (rootRenderLanes &= -rootRenderLanes),\n            (sourceFiber.lanes |= rootRenderLanes),\n            (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),\n            initializeClassErrorUpdate(\n              rootRenderLanes,\n              root,\n              sourceFiber,\n              value\n            ),\n            enqueueCapturedUpdate(sourceFiber, rootRenderLanes),\n            !1\n          );\n    }\n    sourceFiber = sourceFiber.return;\n  } while (null !== sourceFiber);\n  return !1;\n}\nvar SelectiveHydrationException = Error(formatProdErrorMessage(461)),\n  didReceiveUpdate = !1;\nfunction reconcileChildren(current, workInProgress, nextChildren, renderLanes) {\n  workInProgress.child =\n    null === current\n      ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)\n      : reconcileChildFibers(\n          workInProgress,\n          current.child,\n          nextChildren,\n          renderLanes\n        );\n}\nfunction updateForwardRef(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  Component = Component.render;\n  var ref = workInProgress.ref;\n  if (\"ref\" in nextProps) {\n    var propsWithoutRef = {};\n    for (var key in nextProps)\n      \"ref\" !== key && (propsWithoutRef[key] = nextProps[key]);\n  } else propsWithoutRef = nextProps;\n  prepareToReadContext(workInProgress);\n  nextProps = renderWithHooks(\n    current,\n    workInProgress,\n    Component,\n    propsWithoutRef,\n    ref,\n    renderLanes\n  );\n  key = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && key && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  return workInProgress.child;\n}\nfunction updateMemoComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  if (null === current) {\n    var type = Component.type;\n    if (\n      \"function\" === typeof type &&\n      !shouldConstruct(type) &&\n      void 0 === type.defaultProps &&\n      null === Component.compare\n    )\n      return (\n        (workInProgress.tag = 15),\n        (workInProgress.type = type),\n        updateSimpleMemoComponent(\n          current,\n          workInProgress,\n          type,\n          nextProps,\n          renderLanes\n        )\n      );\n    current = createFiberFromTypeAndProps(\n      Component.type,\n      null,\n      nextProps,\n      workInProgress,\n      workInProgress.mode,\n      renderLanes\n    );\n    current.ref = workInProgress.ref;\n    current.return = workInProgress;\n    return (workInProgress.child = current);\n  }\n  type = current.child;\n  if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n    var prevProps = type.memoizedProps;\n    Component = Component.compare;\n    Component = null !== Component ? Component : shallowEqual;\n    if (Component(prevProps, nextProps) && current.ref === workInProgress.ref)\n      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n  }\n  workInProgress.flags |= 1;\n  current = createWorkInProgress(type, nextProps);\n  current.ref = workInProgress.ref;\n  current.return = workInProgress;\n  return (workInProgress.child = current);\n}\nfunction updateSimpleMemoComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  if (null !== current) {\n    var prevProps = current.memoizedProps;\n    if (\n      shallowEqual(prevProps, nextProps) &&\n      current.ref === workInProgress.ref\n    )\n      if (\n        ((didReceiveUpdate = !1),\n        (workInProgress.pendingProps = nextProps = prevProps),\n        checkScheduledUpdateOrContext(current, renderLanes))\n      )\n        0 !== (current.flags & 131072) && (didReceiveUpdate = !0);\n      else\n        return (\n          (workInProgress.lanes = current.lanes),\n          bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n        );\n  }\n  return updateFunctionComponent(\n    current,\n    workInProgress,\n    Component,\n    nextProps,\n    renderLanes\n  );\n}\nfunction updateOffscreenComponent(\n  current,\n  workInProgress,\n  renderLanes,\n  nextProps\n) {\n  var nextChildren = nextProps.children,\n    prevState = null !== current ? current.memoizedState : null;\n  null === current &&\n    null === workInProgress.stateNode &&\n    (workInProgress.stateNode = {\n      _visibility: 1,\n      _pendingMarkers: null,\n      _retryCache: null,\n      _transitions: null\n    });\n  if (\"hidden\" === nextProps.mode) {\n    if (0 !== (workInProgress.flags & 128)) {\n      prevState =\n        null !== prevState ? prevState.baseLanes | renderLanes : renderLanes;\n      if (null !== current) {\n        nextProps = workInProgress.child = current.child;\n        for (nextChildren = 0; null !== nextProps; )\n          (nextChildren =\n            nextChildren | nextProps.lanes | nextProps.childLanes),\n            (nextProps = nextProps.sibling);\n        nextProps = nextChildren & ~prevState;\n      } else (nextProps = 0), (workInProgress.child = null);\n      return deferHiddenOffscreenComponent(\n        current,\n        workInProgress,\n        prevState,\n        renderLanes,\n        nextProps\n      );\n    }\n    if (0 !== (renderLanes & 536870912))\n      (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),\n        null !== current &&\n          pushTransition(\n            workInProgress,\n            null !== prevState ? prevState.cachePool : null\n          ),\n        null !== prevState\n          ? pushHiddenContext(workInProgress, prevState)\n          : reuseHiddenContextOnStack(),\n        pushOffscreenSuspenseHandler(workInProgress);\n    else\n      return (\n        (nextProps = workInProgress.lanes = 536870912),\n        deferHiddenOffscreenComponent(\n          current,\n          workInProgress,\n          null !== prevState ? prevState.baseLanes | renderLanes : renderLanes,\n          renderLanes,\n          nextProps\n        )\n      );\n  } else\n    null !== prevState\n      ? (pushTransition(workInProgress, prevState.cachePool),\n        pushHiddenContext(workInProgress, prevState),\n        reuseSuspenseHandlerOnStack(workInProgress),\n        (workInProgress.memoizedState = null))\n      : (null !== current && pushTransition(workInProgress, null),\n        reuseHiddenContextOnStack(),\n        reuseSuspenseHandlerOnStack(workInProgress));\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\nfunction bailoutOffscreenComponent(current, workInProgress) {\n  (null !== current && 22 === current.tag) ||\n    null !== workInProgress.stateNode ||\n    (workInProgress.stateNode = {\n      _visibility: 1,\n      _pendingMarkers: null,\n      _retryCache: null,\n      _transitions: null\n    });\n  return workInProgress.sibling;\n}\nfunction deferHiddenOffscreenComponent(\n  current,\n  workInProgress,\n  nextBaseLanes,\n  renderLanes,\n  remainingChildLanes\n) {\n  var JSCompiler_inline_result = peekCacheFromPool();\n  JSCompiler_inline_result =\n    null === JSCompiler_inline_result\n      ? null\n      : { parent: CacheContext._currentValue, pool: JSCompiler_inline_result };\n  workInProgress.memoizedState = {\n    baseLanes: nextBaseLanes,\n    cachePool: JSCompiler_inline_result\n  };\n  null !== current && pushTransition(workInProgress, null);\n  reuseHiddenContextOnStack();\n  pushOffscreenSuspenseHandler(workInProgress);\n  null !== current &&\n    propagateParentContextChanges(current, workInProgress, renderLanes, !0);\n  workInProgress.childLanes = remainingChildLanes;\n  return null;\n}\nfunction mountActivityChildren(workInProgress, nextProps) {\n  nextProps = mountWorkInProgressOffscreenFiber(\n    { mode: nextProps.mode, children: nextProps.children },\n    workInProgress.mode\n  );\n  nextProps.ref = workInProgress.ref;\n  workInProgress.child = nextProps;\n  nextProps.return = workInProgress;\n  return nextProps;\n}\nfunction retryActivityComponentWithoutHydrating(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n  current = mountActivityChildren(workInProgress, workInProgress.pendingProps);\n  current.flags |= 2;\n  popSuspenseHandler(workInProgress);\n  workInProgress.memoizedState = null;\n  return current;\n}\nfunction updateActivityComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    didSuspend = 0 !== (workInProgress.flags & 128);\n  workInProgress.flags &= -129;\n  if (null === current) {\n    if (isHydrating) {\n      if (\"hidden\" === nextProps.mode)\n        return (\n          (current = mountActivityChildren(workInProgress, nextProps)),\n          (workInProgress.lanes = 536870912),\n          bailoutOffscreenComponent(null, current)\n        );\n      pushDehydratedActivitySuspenseHandler(workInProgress);\n      (current = nextHydratableInstance)\n        ? ((current = canHydrateHydrationBoundary(\n            current,\n            rootOrSingletonContext\n          )),\n          (current = null !== current && \"&\" === current.data ? current : null),\n          null !== current &&\n            ((workInProgress.memoizedState = {\n              dehydrated: current,\n              treeContext:\n                null !== treeContextProvider\n                  ? { id: treeContextId, overflow: treeContextOverflow }\n                  : null,\n              retryLane: 536870912,\n              hydrationErrors: null\n            }),\n            (renderLanes = createFiberFromDehydratedFragment(current)),\n            (renderLanes.return = workInProgress),\n            (workInProgress.child = renderLanes),\n            (hydrationParentFiber = workInProgress),\n            (nextHydratableInstance = null)))\n        : (current = null);\n      if (null === current) throw throwOnHydrationMismatch(workInProgress);\n      workInProgress.lanes = 536870912;\n      return null;\n    }\n    return mountActivityChildren(workInProgress, nextProps);\n  }\n  var prevState = current.memoizedState;\n  if (null !== prevState) {\n    var dehydrated = prevState.dehydrated;\n    pushDehydratedActivitySuspenseHandler(workInProgress);\n    if (didSuspend)\n      if (workInProgress.flags & 256)\n        (workInProgress.flags &= -257),\n          (workInProgress = retryActivityComponentWithoutHydrating(\n            current,\n            workInProgress,\n            renderLanes\n          ));\n      else if (null !== workInProgress.memoizedState)\n        (workInProgress.child = current.child),\n          (workInProgress.flags |= 128),\n          (workInProgress = null);\n      else throw Error(formatProdErrorMessage(558));\n    else if (\n      (didReceiveUpdate ||\n        propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n      (didSuspend = 0 !== (renderLanes & current.childLanes)),\n      didReceiveUpdate || didSuspend)\n    ) {\n      nextProps = workInProgressRoot;\n      if (\n        null !== nextProps &&\n        ((dehydrated = getBumpedLaneForHydration(nextProps, renderLanes)),\n        0 !== dehydrated && dehydrated !== prevState.retryLane)\n      )\n        throw (\n          ((prevState.retryLane = dehydrated),\n          enqueueConcurrentRenderForLane(current, dehydrated),\n          scheduleUpdateOnFiber(nextProps, current, dehydrated),\n          SelectiveHydrationException)\n        );\n      renderDidSuspendDelayIfPossible();\n      workInProgress = retryActivityComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else\n      (current = prevState.treeContext),\n        (nextHydratableInstance = getNextHydratable(dehydrated.nextSibling)),\n        (hydrationParentFiber = workInProgress),\n        (isHydrating = !0),\n        (hydrationErrors = null),\n        (rootOrSingletonContext = !1),\n        null !== current &&\n          restoreSuspendedTreeContext(workInProgress, current),\n        (workInProgress = mountActivityChildren(workInProgress, nextProps)),\n        (workInProgress.flags |= 4096);\n    return workInProgress;\n  }\n  current = createWorkInProgress(current.child, {\n    mode: nextProps.mode,\n    children: nextProps.children\n  });\n  current.ref = workInProgress.ref;\n  workInProgress.child = current;\n  current.return = workInProgress;\n  return current;\n}\nfunction markRef(current, workInProgress) {\n  var ref = workInProgress.ref;\n  if (null === ref)\n    null !== current &&\n      null !== current.ref &&\n      (workInProgress.flags |= 4194816);\n  else {\n    if (\"function\" !== typeof ref && \"object\" !== typeof ref)\n      throw Error(formatProdErrorMessage(284));\n    if (null === current || current.ref !== ref)\n      workInProgress.flags |= 4194816;\n  }\n}\nfunction updateFunctionComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  Component = renderWithHooks(\n    current,\n    workInProgress,\n    Component,\n    nextProps,\n    void 0,\n    renderLanes\n  );\n  nextProps = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && nextProps && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, Component, renderLanes);\n  return workInProgress.child;\n}\nfunction replayFunctionComponent(\n  current,\n  workInProgress,\n  nextProps,\n  Component,\n  secondArg,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  workInProgress.updateQueue = null;\n  nextProps = renderWithHooksAgain(\n    workInProgress,\n    Component,\n    nextProps,\n    secondArg\n  );\n  finishRenderingHooks(current);\n  Component = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && Component && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  return workInProgress.child;\n}\nfunction updateClassComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  if (null === workInProgress.stateNode) {\n    var context = emptyContextObject,\n      contextType = Component.contextType;\n    \"object\" === typeof contextType &&\n      null !== contextType &&\n      (context = readContext(contextType));\n    context = new Component(nextProps, context);\n    workInProgress.memoizedState =\n      null !== context.state && void 0 !== context.state ? context.state : null;\n    context.updater = classComponentUpdater;\n    workInProgress.stateNode = context;\n    context._reactInternals = workInProgress;\n    context = workInProgress.stateNode;\n    context.props = nextProps;\n    context.state = workInProgress.memoizedState;\n    context.refs = {};\n    initializeUpdateQueue(workInProgress);\n    contextType = Component.contextType;\n    context.context =\n      \"object\" === typeof contextType && null !== contextType\n        ? readContext(contextType)\n        : emptyContextObject;\n    context.state = workInProgress.memoizedState;\n    contextType = Component.getDerivedStateFromProps;\n    \"function\" === typeof contextType &&\n      (applyDerivedStateFromProps(\n        workInProgress,\n        Component,\n        contextType,\n        nextProps\n      ),\n      (context.state = workInProgress.memoizedState));\n    \"function\" === typeof Component.getDerivedStateFromProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate ||\n      (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n        \"function\" !== typeof context.componentWillMount) ||\n      ((contextType = context.state),\n      \"function\" === typeof context.componentWillMount &&\n        context.componentWillMount(),\n      \"function\" === typeof context.UNSAFE_componentWillMount &&\n        context.UNSAFE_componentWillMount(),\n      contextType !== context.state &&\n        classComponentUpdater.enqueueReplaceState(context, context.state, null),\n      processUpdateQueue(workInProgress, nextProps, context, renderLanes),\n      suspendIfUpdateReadFromEntangledAsyncAction(),\n      (context.state = workInProgress.memoizedState));\n    \"function\" === typeof context.componentDidMount &&\n      (workInProgress.flags |= 4194308);\n    nextProps = !0;\n  } else if (null === current) {\n    context = workInProgress.stateNode;\n    var unresolvedOldProps = workInProgress.memoizedProps,\n      oldProps = resolveClassComponentProps(Component, unresolvedOldProps);\n    context.props = oldProps;\n    var oldContext = context.context,\n      contextType$jscomp$0 = Component.contextType;\n    contextType = emptyContextObject;\n    \"object\" === typeof contextType$jscomp$0 &&\n      null !== contextType$jscomp$0 &&\n      (contextType = readContext(contextType$jscomp$0));\n    var getDerivedStateFromProps = Component.getDerivedStateFromProps;\n    contextType$jscomp$0 =\n      \"function\" === typeof getDerivedStateFromProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate;\n    unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;\n    contextType$jscomp$0 ||\n      (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n        \"function\" !== typeof context.componentWillReceiveProps) ||\n      ((unresolvedOldProps || oldContext !== contextType) &&\n        callComponentWillReceiveProps(\n          workInProgress,\n          context,\n          nextProps,\n          contextType\n        ));\n    hasForceUpdate = !1;\n    var oldState = workInProgress.memoizedState;\n    context.state = oldState;\n    processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n    suspendIfUpdateReadFromEntangledAsyncAction();\n    oldContext = workInProgress.memoizedState;\n    unresolvedOldProps || oldState !== oldContext || hasForceUpdate\n      ? (\"function\" === typeof getDerivedStateFromProps &&\n          (applyDerivedStateFromProps(\n            workInProgress,\n            Component,\n            getDerivedStateFromProps,\n            nextProps\n          ),\n          (oldContext = workInProgress.memoizedState)),\n        (oldProps =\n          hasForceUpdate ||\n          checkShouldComponentUpdate(\n            workInProgress,\n            Component,\n            oldProps,\n            nextProps,\n            oldState,\n            oldContext,\n            contextType\n          ))\n          ? (contextType$jscomp$0 ||\n              (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n                \"function\" !== typeof context.componentWillMount) ||\n              (\"function\" === typeof context.componentWillMount &&\n                context.componentWillMount(),\n              \"function\" === typeof context.UNSAFE_componentWillMount &&\n                context.UNSAFE_componentWillMount()),\n            \"function\" === typeof context.componentDidMount &&\n              (workInProgress.flags |= 4194308))\n          : (\"function\" === typeof context.componentDidMount &&\n              (workInProgress.flags |= 4194308),\n            (workInProgress.memoizedProps = nextProps),\n            (workInProgress.memoizedState = oldContext)),\n        (context.props = nextProps),\n        (context.state = oldContext),\n        (context.context = contextType),\n        (nextProps = oldProps))\n      : (\"function\" === typeof context.componentDidMount &&\n          (workInProgress.flags |= 4194308),\n        (nextProps = !1));\n  } else {\n    context = workInProgress.stateNode;\n    cloneUpdateQueue(current, workInProgress);\n    contextType = workInProgress.memoizedProps;\n    contextType$jscomp$0 = resolveClassComponentProps(Component, contextType);\n    context.props = contextType$jscomp$0;\n    getDerivedStateFromProps = workInProgress.pendingProps;\n    oldState = context.context;\n    oldContext = Component.contextType;\n    oldProps = emptyContextObject;\n    \"object\" === typeof oldContext &&\n      null !== oldContext &&\n      (oldProps = readContext(oldContext));\n    unresolvedOldProps = Component.getDerivedStateFromProps;\n    (oldContext =\n      \"function\" === typeof unresolvedOldProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate) ||\n      (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n        \"function\" !== typeof context.componentWillReceiveProps) ||\n      ((contextType !== getDerivedStateFromProps || oldState !== oldProps) &&\n        callComponentWillReceiveProps(\n          workInProgress,\n          context,\n          nextProps,\n          oldProps\n        ));\n    hasForceUpdate = !1;\n    oldState = workInProgress.memoizedState;\n    context.state = oldState;\n    processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n    suspendIfUpdateReadFromEntangledAsyncAction();\n    var newState = workInProgress.memoizedState;\n    contextType !== getDerivedStateFromProps ||\n    oldState !== newState ||\n    hasForceUpdate ||\n    (null !== current &&\n      null !== current.dependencies &&\n      checkIfContextChanged(current.dependencies))\n      ? (\"function\" === typeof unresolvedOldProps &&\n          (applyDerivedStateFromProps(\n            workInProgress,\n            Component,\n            unresolvedOldProps,\n            nextProps\n          ),\n          (newState = workInProgress.memoizedState)),\n        (contextType$jscomp$0 =\n          hasForceUpdate ||\n          checkShouldComponentUpdate(\n            workInProgress,\n            Component,\n            contextType$jscomp$0,\n            nextProps,\n            oldState,\n            newState,\n            oldProps\n          ) ||\n          (null !== current &&\n            null !== current.dependencies &&\n            checkIfContextChanged(current.dependencies)))\n          ? (oldContext ||\n              (\"function\" !== typeof context.UNSAFE_componentWillUpdate &&\n                \"function\" !== typeof context.componentWillUpdate) ||\n              (\"function\" === typeof context.componentWillUpdate &&\n                context.componentWillUpdate(nextProps, newState, oldProps),\n              \"function\" === typeof context.UNSAFE_componentWillUpdate &&\n                context.UNSAFE_componentWillUpdate(\n                  nextProps,\n                  newState,\n                  oldProps\n                )),\n            \"function\" === typeof context.componentDidUpdate &&\n              (workInProgress.flags |= 4),\n            \"function\" === typeof context.getSnapshotBeforeUpdate &&\n              (workInProgress.flags |= 1024))\n          : (\"function\" !== typeof context.componentDidUpdate ||\n              (contextType === current.memoizedProps &&\n                oldState === current.memoizedState) ||\n              (workInProgress.flags |= 4),\n            \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n              (contextType === current.memoizedProps &&\n                oldState === current.memoizedState) ||\n              (workInProgress.flags |= 1024),\n            (workInProgress.memoizedProps = nextProps),\n            (workInProgress.memoizedState = newState)),\n        (context.props = nextProps),\n        (context.state = newState),\n        (context.context = oldProps),\n        (nextProps = contextType$jscomp$0))\n      : (\"function\" !== typeof context.componentDidUpdate ||\n          (contextType === current.memoizedProps &&\n            oldState === current.memoizedState) ||\n          (workInProgress.flags |= 4),\n        \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n          (contextType === current.memoizedProps &&\n            oldState === current.memoizedState) ||\n          (workInProgress.flags |= 1024),\n        (nextProps = !1));\n  }\n  context = nextProps;\n  markRef(current, workInProgress);\n  nextProps = 0 !== (workInProgress.flags & 128);\n  context || nextProps\n    ? ((context = workInProgress.stateNode),\n      (Component =\n        nextProps && \"function\" !== typeof Component.getDerivedStateFromError\n          ? null\n          : context.render()),\n      (workInProgress.flags |= 1),\n      null !== current && nextProps\n        ? ((workInProgress.child = reconcileChildFibers(\n            workInProgress,\n            current.child,\n            null,\n            renderLanes\n          )),\n          (workInProgress.child = reconcileChildFibers(\n            workInProgress,\n            null,\n            Component,\n            renderLanes\n          )))\n        : reconcileChildren(current, workInProgress, Component, renderLanes),\n      (workInProgress.memoizedState = context.state),\n      (current = workInProgress.child))\n    : (current = bailoutOnAlreadyFinishedWork(\n        current,\n        workInProgress,\n        renderLanes\n      ));\n  return current;\n}\nfunction mountHostRootWithoutHydrating(\n  current,\n  workInProgress,\n  nextChildren,\n  renderLanes\n) {\n  resetHydrationState();\n  workInProgress.flags |= 256;\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\nvar SUSPENDED_MARKER = {\n  dehydrated: null,\n  treeContext: null,\n  retryLane: 0,\n  hydrationErrors: null\n};\nfunction mountSuspenseOffscreenState(renderLanes) {\n  return { baseLanes: renderLanes, cachePool: getSuspendedCache() };\n}\nfunction getRemainingWorkInPrimaryTree(\n  current,\n  primaryTreeDidDefer,\n  renderLanes\n) {\n  current = null !== current ? current.childLanes & ~renderLanes : 0;\n  primaryTreeDidDefer && (current |= workInProgressDeferredLane);\n  return current;\n}\nfunction updateSuspenseComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    showFallback = !1,\n    didSuspend = 0 !== (workInProgress.flags & 128),\n    JSCompiler_temp;\n  (JSCompiler_temp = didSuspend) ||\n    (JSCompiler_temp =\n      null !== current && null === current.memoizedState\n        ? !1\n        : 0 !== (suspenseStackCursor.current & 2));\n  JSCompiler_temp && ((showFallback = !0), (workInProgress.flags &= -129));\n  JSCompiler_temp = 0 !== (workInProgress.flags & 32);\n  workInProgress.flags &= -33;\n  if (null === current) {\n    if (isHydrating) {\n      showFallback\n        ? pushPrimaryTreeSuspenseHandler(workInProgress)\n        : reuseSuspenseHandlerOnStack(workInProgress);\n      (current = nextHydratableInstance)\n        ? ((current = canHydrateHydrationBoundary(\n            current,\n            rootOrSingletonContext\n          )),\n          (current = null !== current && \"&\" !== current.data ? current : null),\n          null !== current &&\n            ((workInProgress.memoizedState = {\n              dehydrated: current,\n              treeContext:\n                null !== treeContextProvider\n                  ? { id: treeContextId, overflow: treeContextOverflow }\n                  : null,\n              retryLane: 536870912,\n              hydrationErrors: null\n            }),\n            (renderLanes = createFiberFromDehydratedFragment(current)),\n            (renderLanes.return = workInProgress),\n            (workInProgress.child = renderLanes),\n            (hydrationParentFiber = workInProgress),\n            (nextHydratableInstance = null)))\n        : (current = null);\n      if (null === current) throw throwOnHydrationMismatch(workInProgress);\n      isSuspenseInstanceFallback(current)\n        ? (workInProgress.lanes = 32)\n        : (workInProgress.lanes = 536870912);\n      return null;\n    }\n    var nextPrimaryChildren = nextProps.children;\n    nextProps = nextProps.fallback;\n    if (showFallback)\n      return (\n        reuseSuspenseHandlerOnStack(workInProgress),\n        (showFallback = workInProgress.mode),\n        (nextPrimaryChildren = mountWorkInProgressOffscreenFiber(\n          { mode: \"hidden\", children: nextPrimaryChildren },\n          showFallback\n        )),\n        (nextProps = createFiberFromFragment(\n          nextProps,\n          showFallback,\n          renderLanes,\n          null\n        )),\n        (nextPrimaryChildren.return = workInProgress),\n        (nextProps.return = workInProgress),\n        (nextPrimaryChildren.sibling = nextProps),\n        (workInProgress.child = nextPrimaryChildren),\n        (nextProps = workInProgress.child),\n        (nextProps.memoizedState = mountSuspenseOffscreenState(renderLanes)),\n        (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n          current,\n          JSCompiler_temp,\n          renderLanes\n        )),\n        (workInProgress.memoizedState = SUSPENDED_MARKER),\n        bailoutOffscreenComponent(null, nextProps)\n      );\n    pushPrimaryTreeSuspenseHandler(workInProgress);\n    return mountSuspensePrimaryChildren(workInProgress, nextPrimaryChildren);\n  }\n  var prevState = current.memoizedState;\n  if (\n    null !== prevState &&\n    ((nextPrimaryChildren = prevState.dehydrated), null !== nextPrimaryChildren)\n  ) {\n    if (didSuspend)\n      workInProgress.flags & 256\n        ? (pushPrimaryTreeSuspenseHandler(workInProgress),\n          (workInProgress.flags &= -257),\n          (workInProgress = retrySuspenseComponentWithoutHydrating(\n            current,\n            workInProgress,\n            renderLanes\n          )))\n        : null !== workInProgress.memoizedState\n          ? (reuseSuspenseHandlerOnStack(workInProgress),\n            (workInProgress.child = current.child),\n            (workInProgress.flags |= 128),\n            (workInProgress = null))\n          : (reuseSuspenseHandlerOnStack(workInProgress),\n            (nextPrimaryChildren = nextProps.fallback),\n            (showFallback = workInProgress.mode),\n            (nextProps = mountWorkInProgressOffscreenFiber(\n              { mode: \"visible\", children: nextProps.children },\n              showFallback\n            )),\n            (nextPrimaryChildren = createFiberFromFragment(\n              nextPrimaryChildren,\n              showFallback,\n              renderLanes,\n              null\n            )),\n            (nextPrimaryChildren.flags |= 2),\n            (nextProps.return = workInProgress),\n            (nextPrimaryChildren.return = workInProgress),\n            (nextProps.sibling = nextPrimaryChildren),\n            (workInProgress.child = nextProps),\n            reconcileChildFibers(\n              workInProgress,\n              current.child,\n              null,\n              renderLanes\n            ),\n            (nextProps = workInProgress.child),\n            (nextProps.memoizedState =\n              mountSuspenseOffscreenState(renderLanes)),\n            (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n              current,\n              JSCompiler_temp,\n              renderLanes\n            )),\n            (workInProgress.memoizedState = SUSPENDED_MARKER),\n            (workInProgress = bailoutOffscreenComponent(null, nextProps)));\n    else if (\n      (pushPrimaryTreeSuspenseHandler(workInProgress),\n      isSuspenseInstanceFallback(nextPrimaryChildren))\n    ) {\n      JSCompiler_temp =\n        nextPrimaryChildren.nextSibling &&\n        nextPrimaryChildren.nextSibling.dataset;\n      if (JSCompiler_temp) var digest = JSCompiler_temp.dgst;\n      JSCompiler_temp = digest;\n      nextProps = Error(formatProdErrorMessage(419));\n      nextProps.stack = \"\";\n      nextProps.digest = JSCompiler_temp;\n      queueHydrationError({ value: nextProps, source: null, stack: null });\n      workInProgress = retrySuspenseComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else if (\n      (didReceiveUpdate ||\n        propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n      (JSCompiler_temp = 0 !== (renderLanes & current.childLanes)),\n      didReceiveUpdate || JSCompiler_temp)\n    ) {\n      JSCompiler_temp = workInProgressRoot;\n      if (\n        null !== JSCompiler_temp &&\n        ((nextProps = getBumpedLaneForHydration(JSCompiler_temp, renderLanes)),\n        0 !== nextProps && nextProps !== prevState.retryLane)\n      )\n        throw (\n          ((prevState.retryLane = nextProps),\n          enqueueConcurrentRenderForLane(current, nextProps),\n          scheduleUpdateOnFiber(JSCompiler_temp, current, nextProps),\n          SelectiveHydrationException)\n        );\n      isSuspenseInstancePending(nextPrimaryChildren) ||\n        renderDidSuspendDelayIfPossible();\n      workInProgress = retrySuspenseComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else\n      isSuspenseInstancePending(nextPrimaryChildren)\n        ? ((workInProgress.flags |= 192),\n          (workInProgress.child = current.child),\n          (workInProgress = null))\n        : ((current = prevState.treeContext),\n          (nextHydratableInstance = getNextHydratable(\n            nextPrimaryChildren.nextSibling\n          )),\n          (hydrationParentFiber = workInProgress),\n          (isHydrating = !0),\n          (hydrationErrors = null),\n          (rootOrSingletonContext = !1),\n          null !== current &&\n            restoreSuspendedTreeContext(workInProgress, current),\n          (workInProgress = mountSuspensePrimaryChildren(\n            workInProgress,\n            nextProps.children\n          )),\n          (workInProgress.flags |= 4096));\n    return workInProgress;\n  }\n  if (showFallback)\n    return (\n      reuseSuspenseHandlerOnStack(workInProgress),\n      (nextPrimaryChildren = nextProps.fallback),\n      (showFallback = workInProgress.mode),\n      (prevState = current.child),\n      (digest = prevState.sibling),\n      (nextProps = createWorkInProgress(prevState, {\n        mode: \"hidden\",\n        children: nextProps.children\n      })),\n      (nextProps.subtreeFlags = prevState.subtreeFlags & 65011712),\n      null !== digest\n        ? (nextPrimaryChildren = createWorkInProgress(\n            digest,\n            nextPrimaryChildren\n          ))\n        : ((nextPrimaryChildren = createFiberFromFragment(\n            nextPrimaryChildren,\n            showFallback,\n            renderLanes,\n            null\n          )),\n          (nextPrimaryChildren.flags |= 2)),\n      (nextPrimaryChildren.return = workInProgress),\n      (nextProps.return = workInProgress),\n      (nextProps.sibling = nextPrimaryChildren),\n      (workInProgress.child = nextProps),\n      bailoutOffscreenComponent(null, nextProps),\n      (nextProps = workInProgress.child),\n      (nextPrimaryChildren = current.child.memoizedState),\n      null === nextPrimaryChildren\n        ? (nextPrimaryChildren = mountSuspenseOffscreenState(renderLanes))\n        : ((showFallback = nextPrimaryChildren.cachePool),\n          null !== showFallback\n            ? ((prevState = CacheContext._currentValue),\n              (showFallback =\n                showFallback.parent !== prevState\n                  ? { parent: prevState, pool: prevState }\n                  : showFallback))\n            : (showFallback = getSuspendedCache()),\n          (nextPrimaryChildren = {\n            baseLanes: nextPrimaryChildren.baseLanes | renderLanes,\n            cachePool: showFallback\n          })),\n      (nextProps.memoizedState = nextPrimaryChildren),\n      (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n        current,\n        JSCompiler_temp,\n        renderLanes\n      )),\n      (workInProgress.memoizedState = SUSPENDED_MARKER),\n      bailoutOffscreenComponent(current.child, nextProps)\n    );\n  pushPrimaryTreeSuspenseHandler(workInProgress);\n  renderLanes = current.child;\n  current = renderLanes.sibling;\n  renderLanes = createWorkInProgress(renderLanes, {\n    mode: \"visible\",\n    children: nextProps.children\n  });\n  renderLanes.return = workInProgress;\n  renderLanes.sibling = null;\n  null !== current &&\n    ((JSCompiler_temp = workInProgress.deletions),\n    null === JSCompiler_temp\n      ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16))\n      : JSCompiler_temp.push(current));\n  workInProgress.child = renderLanes;\n  workInProgress.memoizedState = null;\n  return renderLanes;\n}\nfunction mountSuspensePrimaryChildren(workInProgress, primaryChildren) {\n  primaryChildren = mountWorkInProgressOffscreenFiber(\n    { mode: \"visible\", children: primaryChildren },\n    workInProgress.mode\n  );\n  primaryChildren.return = workInProgress;\n  return (workInProgress.child = primaryChildren);\n}\nfunction mountWorkInProgressOffscreenFiber(offscreenProps, mode) {\n  offscreenProps = createFiberImplClass(22, offscreenProps, null, mode);\n  offscreenProps.lanes = 0;\n  return offscreenProps;\n}\nfunction retrySuspenseComponentWithoutHydrating(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n  current = mountSuspensePrimaryChildren(\n    workInProgress,\n    workInProgress.pendingProps.children\n  );\n  current.flags |= 2;\n  workInProgress.memoizedState = null;\n  return current;\n}\nfunction scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n  fiber.lanes |= renderLanes;\n  var alternate = fiber.alternate;\n  null !== alternate && (alternate.lanes |= renderLanes);\n  scheduleContextWorkOnParentPath(fiber.return, renderLanes, propagationRoot);\n}\nfunction initSuspenseListRenderState(\n  workInProgress,\n  isBackwards,\n  tail,\n  lastContentRow,\n  tailMode,\n  treeForkCount\n) {\n  var renderState = workInProgress.memoizedState;\n  null === renderState\n    ? (workInProgress.memoizedState = {\n        isBackwards: isBackwards,\n        rendering: null,\n        renderingStartTime: 0,\n        last: lastContentRow,\n        tail: tail,\n        tailMode: tailMode,\n        treeForkCount: treeForkCount\n      })\n    : ((renderState.isBackwards = isBackwards),\n      (renderState.rendering = null),\n      (renderState.renderingStartTime = 0),\n      (renderState.last = lastContentRow),\n      (renderState.tail = tail),\n      (renderState.tailMode = tailMode),\n      (renderState.treeForkCount = treeForkCount));\n}\nfunction updateSuspenseListComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    revealOrder = nextProps.revealOrder,\n    tailMode = nextProps.tail;\n  nextProps = nextProps.children;\n  var suspenseContext = suspenseStackCursor.current,\n    shouldForceFallback = 0 !== (suspenseContext & 2);\n  shouldForceFallback\n    ? ((suspenseContext = (suspenseContext & 1) | 2),\n      (workInProgress.flags |= 128))\n    : (suspenseContext &= 1);\n  push(suspenseStackCursor, suspenseContext);\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  nextProps = isHydrating ? treeForkCount : 0;\n  if (!shouldForceFallback && null !== current && 0 !== (current.flags & 128))\n    a: for (current = workInProgress.child; null !== current; ) {\n      if (13 === current.tag)\n        null !== current.memoizedState &&\n          scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n      else if (19 === current.tag)\n        scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n      else if (null !== current.child) {\n        current.child.return = current;\n        current = current.child;\n        continue;\n      }\n      if (current === workInProgress) break a;\n      for (; null === current.sibling; ) {\n        if (null === current.return || current.return === workInProgress)\n          break a;\n        current = current.return;\n      }\n      current.sibling.return = current.return;\n      current = current.sibling;\n    }\n  switch (revealOrder) {\n    case \"forwards\":\n      renderLanes = workInProgress.child;\n      for (revealOrder = null; null !== renderLanes; )\n        (current = renderLanes.alternate),\n          null !== current &&\n            null === findFirstSuspended(current) &&\n            (revealOrder = renderLanes),\n          (renderLanes = renderLanes.sibling);\n      renderLanes = revealOrder;\n      null === renderLanes\n        ? ((revealOrder = workInProgress.child), (workInProgress.child = null))\n        : ((revealOrder = renderLanes.sibling), (renderLanes.sibling = null));\n      initSuspenseListRenderState(\n        workInProgress,\n        !1,\n        revealOrder,\n        renderLanes,\n        tailMode,\n        nextProps\n      );\n      break;\n    case \"backwards\":\n    case \"unstable_legacy-backwards\":\n      renderLanes = null;\n      revealOrder = workInProgress.child;\n      for (workInProgress.child = null; null !== revealOrder; ) {\n        current = revealOrder.alternate;\n        if (null !== current && null === findFirstSuspended(current)) {\n          workInProgress.child = revealOrder;\n          break;\n        }\n        current = revealOrder.sibling;\n        revealOrder.sibling = renderLanes;\n        renderLanes = revealOrder;\n        revealOrder = current;\n      }\n      initSuspenseListRenderState(\n        workInProgress,\n        !0,\n        renderLanes,\n        null,\n        tailMode,\n        nextProps\n      );\n      break;\n    case \"together\":\n      initSuspenseListRenderState(\n        workInProgress,\n        !1,\n        null,\n        null,\n        void 0,\n        nextProps\n      );\n      break;\n    default:\n      workInProgress.memoizedState = null;\n  }\n  return workInProgress.child;\n}\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {\n  null !== current && (workInProgress.dependencies = current.dependencies);\n  workInProgressRootSkippedLanes |= workInProgress.lanes;\n  if (0 === (renderLanes & workInProgress.childLanes))\n    if (null !== current) {\n      if (\n        (propagateParentContextChanges(\n          current,\n          workInProgress,\n          renderLanes,\n          !1\n        ),\n        0 === (renderLanes & workInProgress.childLanes))\n      )\n        return null;\n    } else return null;\n  if (null !== current && workInProgress.child !== current.child)\n    throw Error(formatProdErrorMessage(153));\n  if (null !== workInProgress.child) {\n    current = workInProgress.child;\n    renderLanes = createWorkInProgress(current, current.pendingProps);\n    workInProgress.child = renderLanes;\n    for (renderLanes.return = workInProgress; null !== current.sibling; )\n      (current = current.sibling),\n        (renderLanes = renderLanes.sibling =\n          createWorkInProgress(current, current.pendingProps)),\n        (renderLanes.return = workInProgress);\n    renderLanes.sibling = null;\n  }\n  return workInProgress.child;\n}\nfunction checkScheduledUpdateOrContext(current, renderLanes) {\n  if (0 !== (current.lanes & renderLanes)) return !0;\n  current = current.dependencies;\n  return null !== current && checkIfContextChanged(current) ? !0 : !1;\n}\nfunction attemptEarlyBailoutIfNoScheduledUpdate(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  switch (workInProgress.tag) {\n    case 3:\n      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n      pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n      resetHydrationState();\n      break;\n    case 27:\n    case 5:\n      pushHostContext(workInProgress);\n      break;\n    case 4:\n      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n      break;\n    case 10:\n      pushProvider(\n        workInProgress,\n        workInProgress.type,\n        workInProgress.memoizedProps.value\n      );\n      break;\n    case 31:\n      if (null !== workInProgress.memoizedState)\n        return (\n          (workInProgress.flags |= 128),\n          pushDehydratedActivitySuspenseHandler(workInProgress),\n          null\n        );\n      break;\n    case 13:\n      var state$102 = workInProgress.memoizedState;\n      if (null !== state$102) {\n        if (null !== state$102.dehydrated)\n          return (\n            pushPrimaryTreeSuspenseHandler(workInProgress),\n            (workInProgress.flags |= 128),\n            null\n          );\n        if (0 !== (renderLanes & workInProgress.child.childLanes))\n          return updateSuspenseComponent(current, workInProgress, renderLanes);\n        pushPrimaryTreeSuspenseHandler(workInProgress);\n        current = bailoutOnAlreadyFinishedWork(\n          current,\n          workInProgress,\n          renderLanes\n        );\n        return null !== current ? current.sibling : null;\n      }\n      pushPrimaryTreeSuspenseHandler(workInProgress);\n      break;\n    case 19:\n      var didSuspendBefore = 0 !== (current.flags & 128);\n      state$102 = 0 !== (renderLanes & workInProgress.childLanes);\n      state$102 ||\n        (propagateParentContextChanges(\n          current,\n          workInProgress,\n          renderLanes,\n          !1\n        ),\n        (state$102 = 0 !== (renderLanes & workInProgress.childLanes)));\n      if (didSuspendBefore) {\n        if (state$102)\n          return updateSuspenseListComponent(\n            current,\n            workInProgress,\n            renderLanes\n          );\n        workInProgress.flags |= 128;\n      }\n      didSuspendBefore = workInProgress.memoizedState;\n      null !== didSuspendBefore &&\n        ((didSuspendBefore.rendering = null),\n        (didSuspendBefore.tail = null),\n        (didSuspendBefore.lastEffect = null));\n      push(suspenseStackCursor, suspenseStackCursor.current);\n      if (state$102) break;\n      else return null;\n    case 22:\n      return (\n        (workInProgress.lanes = 0),\n        updateOffscreenComponent(\n          current,\n          workInProgress,\n          renderLanes,\n          workInProgress.pendingProps\n        )\n      );\n    case 24:\n      pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n  }\n  return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n}\nfunction beginWork(current, workInProgress, renderLanes) {\n  if (null !== current)\n    if (current.memoizedProps !== workInProgress.pendingProps)\n      didReceiveUpdate = !0;\n    else {\n      if (\n        !checkScheduledUpdateOrContext(current, renderLanes) &&\n        0 === (workInProgress.flags & 128)\n      )\n        return (\n          (didReceiveUpdate = !1),\n          attemptEarlyBailoutIfNoScheduledUpdate(\n            current,\n            workInProgress,\n            renderLanes\n          )\n        );\n      didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;\n    }\n  else\n    (didReceiveUpdate = !1),\n      isHydrating &&\n        0 !== (workInProgress.flags & 1048576) &&\n        pushTreeId(workInProgress, treeForkCount, workInProgress.index);\n  workInProgress.lanes = 0;\n  switch (workInProgress.tag) {\n    case 16:\n      a: {\n        var props = workInProgress.pendingProps;\n        current = resolveLazy(workInProgress.elementType);\n        workInProgress.type = current;\n        if (\"function\" === typeof current)\n          shouldConstruct(current)\n            ? ((props = resolveClassComponentProps(current, props)),\n              (workInProgress.tag = 1),\n              (workInProgress = updateClassComponent(\n                null,\n                workInProgress,\n                current,\n                props,\n                renderLanes\n              )))\n            : ((workInProgress.tag = 0),\n              (workInProgress = updateFunctionComponent(\n                null,\n                workInProgress,\n                current,\n                props,\n                renderLanes\n              )));\n        else {\n          if (void 0 !== current && null !== current) {\n            var $$typeof = current.$$typeof;\n            if ($$typeof === REACT_FORWARD_REF_TYPE) {\n              workInProgress.tag = 11;\n              workInProgress = updateForwardRef(\n                null,\n                workInProgress,\n                current,\n                props,\n                renderLanes\n              );\n              break a;\n            } else if ($$typeof === REACT_MEMO_TYPE) {\n              workInProgress.tag = 14;\n              workInProgress = updateMemoComponent(\n                null,\n                workInProgress,\n                current,\n                props,\n                renderLanes\n              );\n              break a;\n            }\n          }\n          workInProgress = getComponentNameFromType(current) || current;\n          throw Error(formatProdErrorMessage(306, workInProgress, \"\"));\n        }\n      }\n      return workInProgress;\n    case 0:\n      return updateFunctionComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 1:\n      return (\n        (props = workInProgress.type),\n        ($$typeof = resolveClassComponentProps(\n          props,\n          workInProgress.pendingProps\n        )),\n        updateClassComponent(\n          current,\n          workInProgress,\n          props,\n          $$typeof,\n          renderLanes\n        )\n      );\n    case 3:\n      a: {\n        pushHostContainer(\n          workInProgress,\n          workInProgress.stateNode.containerInfo\n        );\n        if (null === current) throw Error(formatProdErrorMessage(387));\n        props = workInProgress.pendingProps;\n        var prevState = workInProgress.memoizedState;\n        $$typeof = prevState.element;\n        cloneUpdateQueue(current, workInProgress);\n        processUpdateQueue(workInProgress, props, null, renderLanes);\n        var nextState = workInProgress.memoizedState;\n        props = nextState.cache;\n        pushProvider(workInProgress, CacheContext, props);\n        props !== prevState.cache &&\n          propagateContextChanges(\n            workInProgress,\n            [CacheContext],\n            renderLanes,\n            !0\n          );\n        suspendIfUpdateReadFromEntangledAsyncAction();\n        props = nextState.element;\n        if (prevState.isDehydrated)\n          if (\n            ((prevState = {\n              element: props,\n              isDehydrated: !1,\n              cache: nextState.cache\n            }),\n            (workInProgress.updateQueue.baseState = prevState),\n            (workInProgress.memoizedState = prevState),\n            workInProgress.flags & 256)\n          ) {\n            workInProgress = mountHostRootWithoutHydrating(\n              current,\n              workInProgress,\n              props,\n              renderLanes\n            );\n            break a;\n          } else if (props !== $$typeof) {\n            $$typeof = createCapturedValueAtFiber(\n              Error(formatProdErrorMessage(424)),\n              workInProgress\n            );\n            queueHydrationError($$typeof);\n            workInProgress = mountHostRootWithoutHydrating(\n              current,\n              workInProgress,\n              props,\n              renderLanes\n            );\n            break a;\n          } else {\n            current = workInProgress.stateNode.containerInfo;\n            switch (current.nodeType) {\n              case 9:\n                current = current.body;\n                break;\n              default:\n                current =\n                  \"HTML\" === current.nodeName\n                    ? current.ownerDocument.body\n                    : current;\n            }\n            nextHydratableInstance = getNextHydratable(current.firstChild);\n            hydrationParentFiber = workInProgress;\n            isHydrating = !0;\n            hydrationErrors = null;\n            rootOrSingletonContext = !0;\n            renderLanes = mountChildFibers(\n              workInProgress,\n              null,\n              props,\n              renderLanes\n            );\n            for (workInProgress.child = renderLanes; renderLanes; )\n              (renderLanes.flags = (renderLanes.flags & -3) | 4096),\n                (renderLanes = renderLanes.sibling);\n          }\n        else {\n          resetHydrationState();\n          if (props === $$typeof) {\n            workInProgress = bailoutOnAlreadyFinishedWork(\n              current,\n              workInProgress,\n              renderLanes\n            );\n            break a;\n          }\n          reconcileChildren(current, workInProgress, props, renderLanes);\n        }\n        workInProgress = workInProgress.child;\n      }\n      return workInProgress;\n    case 26:\n      return (\n        markRef(current, workInProgress),\n        null === current\n          ? (renderLanes = getResource(\n              workInProgress.type,\n              null,\n              workInProgress.pendingProps,\n              null\n            ))\n            ? (workInProgress.memoizedState = renderLanes)\n            : isHydrating ||\n              ((renderLanes = workInProgress.type),\n              (current = workInProgress.pendingProps),\n              (props = getOwnerDocumentFromRootContainer(\n                rootInstanceStackCursor.current\n              ).createElement(renderLanes)),\n              (props[internalInstanceKey] = workInProgress),\n              (props[internalPropsKey] = current),\n              setInitialProperties(props, renderLanes, current),\n              markNodeAsHoistable(props),\n              (workInProgress.stateNode = props))\n          : (workInProgress.memoizedState = getResource(\n              workInProgress.type,\n              current.memoizedProps,\n              workInProgress.pendingProps,\n              current.memoizedState\n            )),\n        null\n      );\n    case 27:\n      return (\n        pushHostContext(workInProgress),\n        null === current &&\n          isHydrating &&\n          ((props = workInProgress.stateNode =\n            resolveSingletonInstance(\n              workInProgress.type,\n              workInProgress.pendingProps,\n              rootInstanceStackCursor.current\n            )),\n          (hydrationParentFiber = workInProgress),\n          (rootOrSingletonContext = !0),\n          ($$typeof = nextHydratableInstance),\n          isSingletonScope(workInProgress.type)\n            ? ((previousHydratableOnEnteringScopedSingleton = $$typeof),\n              (nextHydratableInstance = getNextHydratable(props.firstChild)))\n            : (nextHydratableInstance = $$typeof)),\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        markRef(current, workInProgress),\n        null === current && (workInProgress.flags |= 4194304),\n        workInProgress.child\n      );\n    case 5:\n      if (null === current && isHydrating) {\n        if (($$typeof = props = nextHydratableInstance))\n          (props = canHydrateInstance(\n            props,\n            workInProgress.type,\n            workInProgress.pendingProps,\n            rootOrSingletonContext\n          )),\n            null !== props\n              ? ((workInProgress.stateNode = props),\n                (hydrationParentFiber = workInProgress),\n                (nextHydratableInstance = getNextHydratable(props.firstChild)),\n                (rootOrSingletonContext = !1),\n                ($$typeof = !0))\n              : ($$typeof = !1);\n        $$typeof || throwOnHydrationMismatch(workInProgress);\n      }\n      pushHostContext(workInProgress);\n      $$typeof = workInProgress.type;\n      prevState = workInProgress.pendingProps;\n      nextState = null !== current ? current.memoizedProps : null;\n      props = prevState.children;\n      shouldSetTextContent($$typeof, prevState)\n        ? (props = null)\n        : null !== nextState &&\n          shouldSetTextContent($$typeof, nextState) &&\n          (workInProgress.flags |= 32);\n      null !== workInProgress.memoizedState &&\n        (($$typeof = renderWithHooks(\n          current,\n          workInProgress,\n          TransitionAwareHostComponent,\n          null,\n          null,\n          renderLanes\n        )),\n        (HostTransitionContext._currentValue = $$typeof));\n      markRef(current, workInProgress);\n      reconcileChildren(current, workInProgress, props, renderLanes);\n      return workInProgress.child;\n    case 6:\n      if (null === current && isHydrating) {\n        if ((current = renderLanes = nextHydratableInstance))\n          (renderLanes = canHydrateTextInstance(\n            renderLanes,\n            workInProgress.pendingProps,\n            rootOrSingletonContext\n          )),\n            null !== renderLanes\n              ? ((workInProgress.stateNode = renderLanes),\n                (hydrationParentFiber = workInProgress),\n                (nextHydratableInstance = null),\n                (current = !0))\n              : (current = !1);\n        current || throwOnHydrationMismatch(workInProgress);\n      }\n      return null;\n    case 13:\n      return updateSuspenseComponent(current, workInProgress, renderLanes);\n    case 4:\n      return (\n        pushHostContainer(\n          workInProgress,\n          workInProgress.stateNode.containerInfo\n        ),\n        (props = workInProgress.pendingProps),\n        null === current\n          ? (workInProgress.child = reconcileChildFibers(\n              workInProgress,\n              null,\n              props,\n              renderLanes\n            ))\n          : reconcileChildren(current, workInProgress, props, renderLanes),\n        workInProgress.child\n      );\n    case 11:\n      return updateForwardRef(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 7:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 8:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 12:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 10:\n      return (\n        (props = workInProgress.pendingProps),\n        pushProvider(workInProgress, workInProgress.type, props.value),\n        reconcileChildren(current, workInProgress, props.children, renderLanes),\n        workInProgress.child\n      );\n    case 9:\n      return (\n        ($$typeof = workInProgress.type._context),\n        (props = workInProgress.pendingProps.children),\n        prepareToReadContext(workInProgress),\n        ($$typeof = readContext($$typeof)),\n        (props = props($$typeof)),\n        (workInProgress.flags |= 1),\n        reconcileChildren(current, workInProgress, props, renderLanes),\n        workInProgress.child\n      );\n    case 14:\n      return updateMemoComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 15:\n      return updateSimpleMemoComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 19:\n      return updateSuspenseListComponent(current, workInProgress, renderLanes);\n    case 31:\n      return updateActivityComponent(current, workInProgress, renderLanes);\n    case 22:\n      return updateOffscreenComponent(\n        current,\n        workInProgress,\n        renderLanes,\n        workInProgress.pendingProps\n      );\n    case 24:\n      return (\n        prepareToReadContext(workInProgress),\n        (props = readContext(CacheContext)),\n        null === current\n          ? (($$typeof = peekCacheFromPool()),\n            null === $$typeof &&\n              (($$typeof = workInProgressRoot),\n              (prevState = createCache()),\n              ($$typeof.pooledCache = prevState),\n              prevState.refCount++,\n              null !== prevState && ($$typeof.pooledCacheLanes |= renderLanes),\n              ($$typeof = prevState)),\n            (workInProgress.memoizedState = { parent: props, cache: $$typeof }),\n            initializeUpdateQueue(workInProgress),\n            pushProvider(workInProgress, CacheContext, $$typeof))\n          : (0 !== (current.lanes & renderLanes) &&\n              (cloneUpdateQueue(current, workInProgress),\n              processUpdateQueue(workInProgress, null, null, renderLanes),\n              suspendIfUpdateReadFromEntangledAsyncAction()),\n            ($$typeof = current.memoizedState),\n            (prevState = workInProgress.memoizedState),\n            $$typeof.parent !== props\n              ? (($$typeof = { parent: props, cache: props }),\n                (workInProgress.memoizedState = $$typeof),\n                0 === workInProgress.lanes &&\n                  (workInProgress.memoizedState =\n                    workInProgress.updateQueue.baseState =\n                      $$typeof),\n                pushProvider(workInProgress, CacheContext, props))\n              : ((props = prevState.cache),\n                pushProvider(workInProgress, CacheContext, props),\n                props !== $$typeof.cache &&\n                  propagateContextChanges(\n                    workInProgress,\n                    [CacheContext],\n                    renderLanes,\n                    !0\n                  ))),\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 29:\n      throw workInProgress.pendingProps;\n  }\n  throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction markUpdate(workInProgress) {\n  workInProgress.flags |= 4;\n}\nfunction preloadInstanceAndSuspendIfNeeded(\n  workInProgress,\n  type,\n  oldProps,\n  newProps,\n  renderLanes\n) {\n  if ((type = 0 !== (workInProgress.mode & 32))) type = !1;\n  if (type) {\n    if (\n      ((workInProgress.flags |= 16777216),\n      (renderLanes & 335544128) === renderLanes)\n    )\n      if (workInProgress.stateNode.complete) workInProgress.flags |= 8192;\n      else if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n      else\n        throw (\n          ((suspendedThenable = noopSuspenseyCommitThenable),\n          SuspenseyCommitException)\n        );\n  } else workInProgress.flags &= -16777217;\n}\nfunction preloadResourceAndSuspendIfNeeded(workInProgress, resource) {\n  if (\"stylesheet\" !== resource.type || 0 !== (resource.state.loading & 4))\n    workInProgress.flags &= -16777217;\n  else if (((workInProgress.flags |= 16777216), !preloadResource(resource)))\n    if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n    else\n      throw (\n        ((suspendedThenable = noopSuspenseyCommitThenable),\n        SuspenseyCommitException)\n      );\n}\nfunction scheduleRetryEffect(workInProgress, retryQueue) {\n  null !== retryQueue && (workInProgress.flags |= 4);\n  workInProgress.flags & 16384 &&\n    ((retryQueue =\n      22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),\n    (workInProgress.lanes |= retryQueue),\n    (workInProgressSuspendedRetryLanes |= retryQueue));\n}\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n  if (!isHydrating)\n    switch (renderState.tailMode) {\n      case \"hidden\":\n        hasRenderedATailFallback = renderState.tail;\n        for (var lastTailNode = null; null !== hasRenderedATailFallback; )\n          null !== hasRenderedATailFallback.alternate &&\n            (lastTailNode = hasRenderedATailFallback),\n            (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n        null === lastTailNode\n          ? (renderState.tail = null)\n          : (lastTailNode.sibling = null);\n        break;\n      case \"collapsed\":\n        lastTailNode = renderState.tail;\n        for (var lastTailNode$106 = null; null !== lastTailNode; )\n          null !== lastTailNode.alternate && (lastTailNode$106 = lastTailNode),\n            (lastTailNode = lastTailNode.sibling);\n        null === lastTailNode$106\n          ? hasRenderedATailFallback || null === renderState.tail\n            ? (renderState.tail = null)\n            : (renderState.tail.sibling = null)\n          : (lastTailNode$106.sibling = null);\n    }\n}\nfunction bubbleProperties(completedWork) {\n  var didBailout =\n      null !== completedWork.alternate &&\n      completedWork.alternate.child === completedWork.child,\n    newChildLanes = 0,\n    subtreeFlags = 0;\n  if (didBailout)\n    for (var child$107 = completedWork.child; null !== child$107; )\n      (newChildLanes |= child$107.lanes | child$107.childLanes),\n        (subtreeFlags |= child$107.subtreeFlags & 65011712),\n        (subtreeFlags |= child$107.flags & 65011712),\n        (child$107.return = completedWork),\n        (child$107 = child$107.sibling);\n  else\n    for (child$107 = completedWork.child; null !== child$107; )\n      (newChildLanes |= child$107.lanes | child$107.childLanes),\n        (subtreeFlags |= child$107.subtreeFlags),\n        (subtreeFlags |= child$107.flags),\n        (child$107.return = completedWork),\n        (child$107 = child$107.sibling);\n  completedWork.subtreeFlags |= subtreeFlags;\n  completedWork.childLanes = newChildLanes;\n  return didBailout;\n}\nfunction completeWork(current, workInProgress, renderLanes) {\n  var newProps = workInProgress.pendingProps;\n  popTreeContext(workInProgress);\n  switch (workInProgress.tag) {\n    case 16:\n    case 15:\n    case 0:\n    case 11:\n    case 7:\n    case 8:\n    case 12:\n    case 9:\n    case 14:\n      return bubbleProperties(workInProgress), null;\n    case 1:\n      return bubbleProperties(workInProgress), null;\n    case 3:\n      renderLanes = workInProgress.stateNode;\n      newProps = null;\n      null !== current && (newProps = current.memoizedState.cache);\n      workInProgress.memoizedState.cache !== newProps &&\n        (workInProgress.flags |= 2048);\n      popProvider(CacheContext);\n      popHostContainer();\n      renderLanes.pendingContext &&\n        ((renderLanes.context = renderLanes.pendingContext),\n        (renderLanes.pendingContext = null));\n      if (null === current || null === current.child)\n        popHydrationState(workInProgress)\n          ? markUpdate(workInProgress)\n          : null === current ||\n            (current.memoizedState.isDehydrated &&\n              0 === (workInProgress.flags & 256)) ||\n            ((workInProgress.flags |= 1024),\n            upgradeHydrationErrorsToRecoverable());\n      bubbleProperties(workInProgress);\n      return null;\n    case 26:\n      var type = workInProgress.type,\n        nextResource = workInProgress.memoizedState;\n      null === current\n        ? (markUpdate(workInProgress),\n          null !== nextResource\n            ? (bubbleProperties(workInProgress),\n              preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n            : (bubbleProperties(workInProgress),\n              preloadInstanceAndSuspendIfNeeded(\n                workInProgress,\n                type,\n                null,\n                newProps,\n                renderLanes\n              )))\n        : nextResource\n          ? nextResource !== current.memoizedState\n            ? (markUpdate(workInProgress),\n              bubbleProperties(workInProgress),\n              preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n            : (bubbleProperties(workInProgress),\n              (workInProgress.flags &= -16777217))\n          : ((current = current.memoizedProps),\n            current !== newProps && markUpdate(workInProgress),\n            bubbleProperties(workInProgress),\n            preloadInstanceAndSuspendIfNeeded(\n              workInProgress,\n              type,\n              current,\n              newProps,\n              renderLanes\n            ));\n      return null;\n    case 27:\n      popHostContext(workInProgress);\n      renderLanes = rootInstanceStackCursor.current;\n      type = workInProgress.type;\n      if (null !== current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (!newProps) {\n          if (null === workInProgress.stateNode)\n            throw Error(formatProdErrorMessage(166));\n          bubbleProperties(workInProgress);\n          return null;\n        }\n        current = contextStackCursor.current;\n        popHydrationState(workInProgress)\n          ? prepareToHydrateHostInstance(workInProgress, current)\n          : ((current = resolveSingletonInstance(type, newProps, renderLanes)),\n            (workInProgress.stateNode = current),\n            markUpdate(workInProgress));\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 5:\n      popHostContext(workInProgress);\n      type = workInProgress.type;\n      if (null !== current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (!newProps) {\n          if (null === workInProgress.stateNode)\n            throw Error(formatProdErrorMessage(166));\n          bubbleProperties(workInProgress);\n          return null;\n        }\n        nextResource = contextStackCursor.current;\n        if (popHydrationState(workInProgress))\n          prepareToHydrateHostInstance(workInProgress, nextResource);\n        else {\n          var ownerDocument = getOwnerDocumentFromRootContainer(\n            rootInstanceStackCursor.current\n          );\n          switch (nextResource) {\n            case 1:\n              nextResource = ownerDocument.createElementNS(\n                \"http://www.w3.org/2000/svg\",\n                type\n              );\n              break;\n            case 2:\n              nextResource = ownerDocument.createElementNS(\n                \"http://www.w3.org/1998/Math/MathML\",\n                type\n              );\n              break;\n            default:\n              switch (type) {\n                case \"svg\":\n                  nextResource = ownerDocument.createElementNS(\n                    \"http://www.w3.org/2000/svg\",\n                    type\n                  );\n                  break;\n                case \"math\":\n                  nextResource = ownerDocument.createElementNS(\n                    \"http://www.w3.org/1998/Math/MathML\",\n                    type\n                  );\n                  break;\n                case \"script\":\n                  nextResource = ownerDocument.createElement(\"div\");\n                  nextResource.innerHTML = \"<script>\\x3c/script>\";\n                  nextResource = nextResource.removeChild(\n                    nextResource.firstChild\n                  );\n                  break;\n                case \"select\":\n                  nextResource =\n                    \"string\" === typeof newProps.is\n                      ? ownerDocument.createElement(\"select\", {\n                          is: newProps.is\n                        })\n                      : ownerDocument.createElement(\"select\");\n                  newProps.multiple\n                    ? (nextResource.multiple = !0)\n                    : newProps.size && (nextResource.size = newProps.size);\n                  break;\n                default:\n                  nextResource =\n                    \"string\" === typeof newProps.is\n                      ? ownerDocument.createElement(type, { is: newProps.is })\n                      : ownerDocument.createElement(type);\n              }\n          }\n          nextResource[internalInstanceKey] = workInProgress;\n          nextResource[internalPropsKey] = newProps;\n          a: for (\n            ownerDocument = workInProgress.child;\n            null !== ownerDocument;\n\n          ) {\n            if (5 === ownerDocument.tag || 6 === ownerDocument.tag)\n              nextResource.appendChild(ownerDocument.stateNode);\n            else if (\n              4 !== ownerDocument.tag &&\n              27 !== ownerDocument.tag &&\n              null !== ownerDocument.child\n            ) {\n              ownerDocument.child.return = ownerDocument;\n              ownerDocument = ownerDocument.child;\n              continue;\n            }\n            if (ownerDocument === workInProgress) break a;\n            for (; null === ownerDocument.sibling; ) {\n              if (\n                null === ownerDocument.return ||\n                ownerDocument.return === workInProgress\n              )\n                break a;\n              ownerDocument = ownerDocument.return;\n            }\n            ownerDocument.sibling.return = ownerDocument.return;\n            ownerDocument = ownerDocument.sibling;\n          }\n          workInProgress.stateNode = nextResource;\n          a: switch (\n            (setInitialProperties(nextResource, type, newProps), type)\n          ) {\n            case \"button\":\n            case \"input\":\n            case \"select\":\n            case \"textarea\":\n              newProps = !!newProps.autoFocus;\n              break a;\n            case \"img\":\n              newProps = !0;\n              break a;\n            default:\n              newProps = !1;\n          }\n          newProps && markUpdate(workInProgress);\n        }\n      }\n      bubbleProperties(workInProgress);\n      preloadInstanceAndSuspendIfNeeded(\n        workInProgress,\n        workInProgress.type,\n        null === current ? null : current.memoizedProps,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n      return null;\n    case 6:\n      if (current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (\"string\" !== typeof newProps && null === workInProgress.stateNode)\n          throw Error(formatProdErrorMessage(166));\n        current = rootInstanceStackCursor.current;\n        if (popHydrationState(workInProgress)) {\n          current = workInProgress.stateNode;\n          renderLanes = workInProgress.memoizedProps;\n          newProps = null;\n          type = hydrationParentFiber;\n          if (null !== type)\n            switch (type.tag) {\n              case 27:\n              case 5:\n                newProps = type.memoizedProps;\n            }\n          current[internalInstanceKey] = workInProgress;\n          current =\n            current.nodeValue === renderLanes ||\n            (null !== newProps && !0 === newProps.suppressHydrationWarning) ||\n            checkForUnmatchedText(current.nodeValue, renderLanes)\n              ? !0\n              : !1;\n          current || throwOnHydrationMismatch(workInProgress, !0);\n        } else\n          (current =\n            getOwnerDocumentFromRootContainer(current).createTextNode(\n              newProps\n            )),\n            (current[internalInstanceKey] = workInProgress),\n            (workInProgress.stateNode = current);\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 31:\n      renderLanes = workInProgress.memoizedState;\n      if (null === current || null !== current.memoizedState) {\n        newProps = popHydrationState(workInProgress);\n        if (null !== renderLanes) {\n          if (null === current) {\n            if (!newProps) throw Error(formatProdErrorMessage(318));\n            current = workInProgress.memoizedState;\n            current = null !== current ? current.dehydrated : null;\n            if (!current) throw Error(formatProdErrorMessage(557));\n            current[internalInstanceKey] = workInProgress;\n          } else\n            resetHydrationState(),\n              0 === (workInProgress.flags & 128) &&\n                (workInProgress.memoizedState = null),\n              (workInProgress.flags |= 4);\n          bubbleProperties(workInProgress);\n          current = !1;\n        } else\n          (renderLanes = upgradeHydrationErrorsToRecoverable()),\n            null !== current &&\n              null !== current.memoizedState &&\n              (current.memoizedState.hydrationErrors = renderLanes),\n            (current = !0);\n        if (!current) {\n          if (workInProgress.flags & 256)\n            return popSuspenseHandler(workInProgress), workInProgress;\n          popSuspenseHandler(workInProgress);\n          return null;\n        }\n        if (0 !== (workInProgress.flags & 128))\n          throw Error(formatProdErrorMessage(558));\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 13:\n      newProps = workInProgress.memoizedState;\n      if (\n        null === current ||\n        (null !== current.memoizedState &&\n          null !== current.memoizedState.dehydrated)\n      ) {\n        type = popHydrationState(workInProgress);\n        if (null !== newProps && null !== newProps.dehydrated) {\n          if (null === current) {\n            if (!type) throw Error(formatProdErrorMessage(318));\n            type = workInProgress.memoizedState;\n            type = null !== type ? type.dehydrated : null;\n            if (!type) throw Error(formatProdErrorMessage(317));\n            type[internalInstanceKey] = workInProgress;\n          } else\n            resetHydrationState(),\n              0 === (workInProgress.flags & 128) &&\n                (workInProgress.memoizedState = null),\n              (workInProgress.flags |= 4);\n          bubbleProperties(workInProgress);\n          type = !1;\n        } else\n          (type = upgradeHydrationErrorsToRecoverable()),\n            null !== current &&\n              null !== current.memoizedState &&\n              (current.memoizedState.hydrationErrors = type),\n            (type = !0);\n        if (!type) {\n          if (workInProgress.flags & 256)\n            return popSuspenseHandler(workInProgress), workInProgress;\n          popSuspenseHandler(workInProgress);\n          return null;\n        }\n      }\n      popSuspenseHandler(workInProgress);\n      if (0 !== (workInProgress.flags & 128))\n        return (workInProgress.lanes = renderLanes), workInProgress;\n      renderLanes = null !== newProps;\n      current = null !== current && null !== current.memoizedState;\n      renderLanes &&\n        ((newProps = workInProgress.child),\n        (type = null),\n        null !== newProps.alternate &&\n          null !== newProps.alternate.memoizedState &&\n          null !== newProps.alternate.memoizedState.cachePool &&\n          (type = newProps.alternate.memoizedState.cachePool.pool),\n        (nextResource = null),\n        null !== newProps.memoizedState &&\n          null !== newProps.memoizedState.cachePool &&\n          (nextResource = newProps.memoizedState.cachePool.pool),\n        nextResource !== type && (newProps.flags |= 2048));\n      renderLanes !== current &&\n        renderLanes &&\n        (workInProgress.child.flags |= 8192);\n      scheduleRetryEffect(workInProgress, workInProgress.updateQueue);\n      bubbleProperties(workInProgress);\n      return null;\n    case 4:\n      return (\n        popHostContainer(),\n        null === current &&\n          listenToAllSupportedEvents(workInProgress.stateNode.containerInfo),\n        bubbleProperties(workInProgress),\n        null\n      );\n    case 10:\n      return (\n        popProvider(workInProgress.type), bubbleProperties(workInProgress), null\n      );\n    case 19:\n      pop(suspenseStackCursor);\n      newProps = workInProgress.memoizedState;\n      if (null === newProps) return bubbleProperties(workInProgress), null;\n      type = 0 !== (workInProgress.flags & 128);\n      nextResource = newProps.rendering;\n      if (null === nextResource)\n        if (type) cutOffTailIfNeeded(newProps, !1);\n        else {\n          if (\n            0 !== workInProgressRootExitStatus ||\n            (null !== current && 0 !== (current.flags & 128))\n          )\n            for (current = workInProgress.child; null !== current; ) {\n              nextResource = findFirstSuspended(current);\n              if (null !== nextResource) {\n                workInProgress.flags |= 128;\n                cutOffTailIfNeeded(newProps, !1);\n                current = nextResource.updateQueue;\n                workInProgress.updateQueue = current;\n                scheduleRetryEffect(workInProgress, current);\n                workInProgress.subtreeFlags = 0;\n                current = renderLanes;\n                for (renderLanes = workInProgress.child; null !== renderLanes; )\n                  resetWorkInProgress(renderLanes, current),\n                    (renderLanes = renderLanes.sibling);\n                push(\n                  suspenseStackCursor,\n                  (suspenseStackCursor.current & 1) | 2\n                );\n                isHydrating &&\n                  pushTreeFork(workInProgress, newProps.treeForkCount);\n                return workInProgress.child;\n              }\n              current = current.sibling;\n            }\n          null !== newProps.tail &&\n            now() > workInProgressRootRenderTargetTime &&\n            ((workInProgress.flags |= 128),\n            (type = !0),\n            cutOffTailIfNeeded(newProps, !1),\n            (workInProgress.lanes = 4194304));\n        }\n      else {\n        if (!type)\n          if (\n            ((current = findFirstSuspended(nextResource)), null !== current)\n          ) {\n            if (\n              ((workInProgress.flags |= 128),\n              (type = !0),\n              (current = current.updateQueue),\n              (workInProgress.updateQueue = current),\n              scheduleRetryEffect(workInProgress, current),\n              cutOffTailIfNeeded(newProps, !0),\n              null === newProps.tail &&\n                \"hidden\" === newProps.tailMode &&\n                !nextResource.alternate &&\n                !isHydrating)\n            )\n              return bubbleProperties(workInProgress), null;\n          } else\n            2 * now() - newProps.renderingStartTime >\n              workInProgressRootRenderTargetTime &&\n              536870912 !== renderLanes &&\n              ((workInProgress.flags |= 128),\n              (type = !0),\n              cutOffTailIfNeeded(newProps, !1),\n              (workInProgress.lanes = 4194304));\n        newProps.isBackwards\n          ? ((nextResource.sibling = workInProgress.child),\n            (workInProgress.child = nextResource))\n          : ((current = newProps.last),\n            null !== current\n              ? (current.sibling = nextResource)\n              : (workInProgress.child = nextResource),\n            (newProps.last = nextResource));\n      }\n      if (null !== newProps.tail)\n        return (\n          (current = newProps.tail),\n          (newProps.rendering = current),\n          (newProps.tail = current.sibling),\n          (newProps.renderingStartTime = now()),\n          (current.sibling = null),\n          (renderLanes = suspenseStackCursor.current),\n          push(\n            suspenseStackCursor,\n            type ? (renderLanes & 1) | 2 : renderLanes & 1\n          ),\n          isHydrating && pushTreeFork(workInProgress, newProps.treeForkCount),\n          current\n        );\n      bubbleProperties(workInProgress);\n      return null;\n    case 22:\n    case 23:\n      return (\n        popSuspenseHandler(workInProgress),\n        popHiddenContext(),\n        (newProps = null !== workInProgress.memoizedState),\n        null !== current\n          ? (null !== current.memoizedState) !== newProps &&\n            (workInProgress.flags |= 8192)\n          : newProps && (workInProgress.flags |= 8192),\n        newProps\n          ? 0 !== (renderLanes & 536870912) &&\n            0 === (workInProgress.flags & 128) &&\n            (bubbleProperties(workInProgress),\n            workInProgress.subtreeFlags & 6 && (workInProgress.flags |= 8192))\n          : bubbleProperties(workInProgress),\n        (renderLanes = workInProgress.updateQueue),\n        null !== renderLanes &&\n          scheduleRetryEffect(workInProgress, renderLanes.retryQueue),\n        (renderLanes = null),\n        null !== current &&\n          null !== current.memoizedState &&\n          null !== current.memoizedState.cachePool &&\n          (renderLanes = current.memoizedState.cachePool.pool),\n        (newProps = null),\n        null !== workInProgress.memoizedState &&\n          null !== workInProgress.memoizedState.cachePool &&\n          (newProps = workInProgress.memoizedState.cachePool.pool),\n        newProps !== renderLanes && (workInProgress.flags |= 2048),\n        null !== current && pop(resumedCache),\n        null\n      );\n    case 24:\n      return (\n        (renderLanes = null),\n        null !== current && (renderLanes = current.memoizedState.cache),\n        workInProgress.memoizedState.cache !== renderLanes &&\n          (workInProgress.flags |= 2048),\n        popProvider(CacheContext),\n        bubbleProperties(workInProgress),\n        null\n      );\n    case 25:\n      return null;\n    case 30:\n      return null;\n  }\n  throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction unwindWork(current, workInProgress) {\n  popTreeContext(workInProgress);\n  switch (workInProgress.tag) {\n    case 1:\n      return (\n        (current = workInProgress.flags),\n        current & 65536\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 3:\n      return (\n        popProvider(CacheContext),\n        popHostContainer(),\n        (current = workInProgress.flags),\n        0 !== (current & 65536) && 0 === (current & 128)\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 26:\n    case 27:\n    case 5:\n      return popHostContext(workInProgress), null;\n    case 31:\n      if (null !== workInProgress.memoizedState) {\n        popSuspenseHandler(workInProgress);\n        if (null === workInProgress.alternate)\n          throw Error(formatProdErrorMessage(340));\n        resetHydrationState();\n      }\n      current = workInProgress.flags;\n      return current & 65536\n        ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n        : null;\n    case 13:\n      popSuspenseHandler(workInProgress);\n      current = workInProgress.memoizedState;\n      if (null !== current && null !== current.dehydrated) {\n        if (null === workInProgress.alternate)\n          throw Error(formatProdErrorMessage(340));\n        resetHydrationState();\n      }\n      current = workInProgress.flags;\n      return current & 65536\n        ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n        : null;\n    case 19:\n      return pop(suspenseStackCursor), null;\n    case 4:\n      return popHostContainer(), null;\n    case 10:\n      return popProvider(workInProgress.type), null;\n    case 22:\n    case 23:\n      return (\n        popSuspenseHandler(workInProgress),\n        popHiddenContext(),\n        null !== current && pop(resumedCache),\n        (current = workInProgress.flags),\n        current & 65536\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 24:\n      return popProvider(CacheContext), null;\n    case 25:\n      return null;\n    default:\n      return null;\n  }\n}\nfunction unwindInterruptedWork(current, interruptedWork) {\n  popTreeContext(interruptedWork);\n  switch (interruptedWork.tag) {\n    case 3:\n      popProvider(CacheContext);\n      popHostContainer();\n      break;\n    case 26:\n    case 27:\n    case 5:\n      popHostContext(interruptedWork);\n      break;\n    case 4:\n      popHostContainer();\n      break;\n    case 31:\n      null !== interruptedWork.memoizedState &&\n        popSuspenseHandler(interruptedWork);\n      break;\n    case 13:\n      popSuspenseHandler(interruptedWork);\n      break;\n    case 19:\n      pop(suspenseStackCursor);\n      break;\n    case 10:\n      popProvider(interruptedWork.type);\n      break;\n    case 22:\n    case 23:\n      popSuspenseHandler(interruptedWork);\n      popHiddenContext();\n      null !== current && pop(resumedCache);\n      break;\n    case 24:\n      popProvider(CacheContext);\n  }\n}\nfunction commitHookEffectListMount(flags, finishedWork) {\n  try {\n    var updateQueue = finishedWork.updateQueue,\n      lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n    if (null !== lastEffect) {\n      var firstEffect = lastEffect.next;\n      updateQueue = firstEffect;\n      do {\n        if ((updateQueue.tag & flags) === flags) {\n          lastEffect = void 0;\n          var create = updateQueue.create,\n            inst = updateQueue.inst;\n          lastEffect = create();\n          inst.destroy = lastEffect;\n        }\n        updateQueue = updateQueue.next;\n      } while (updateQueue !== firstEffect);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitHookEffectListUnmount(\n  flags,\n  finishedWork,\n  nearestMountedAncestor$jscomp$0\n) {\n  try {\n    var updateQueue = finishedWork.updateQueue,\n      lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n    if (null !== lastEffect) {\n      var firstEffect = lastEffect.next;\n      updateQueue = firstEffect;\n      do {\n        if ((updateQueue.tag & flags) === flags) {\n          var inst = updateQueue.inst,\n            destroy = inst.destroy;\n          if (void 0 !== destroy) {\n            inst.destroy = void 0;\n            lastEffect = finishedWork;\n            var nearestMountedAncestor = nearestMountedAncestor$jscomp$0,\n              destroy_ = destroy;\n            try {\n              destroy_();\n            } catch (error) {\n              captureCommitPhaseError(\n                lastEffect,\n                nearestMountedAncestor,\n                error\n              );\n            }\n          }\n        }\n        updateQueue = updateQueue.next;\n      } while (updateQueue !== firstEffect);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitClassCallbacks(finishedWork) {\n  var updateQueue = finishedWork.updateQueue;\n  if (null !== updateQueue) {\n    var instance = finishedWork.stateNode;\n    try {\n      commitCallbacks(updateQueue, instance);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n  }\n}\nfunction safelyCallComponentWillUnmount(\n  current,\n  nearestMountedAncestor,\n  instance\n) {\n  instance.props = resolveClassComponentProps(\n    current.type,\n    current.memoizedProps\n  );\n  instance.state = current.memoizedState;\n  try {\n    instance.componentWillUnmount();\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n}\nfunction safelyAttachRef(current, nearestMountedAncestor) {\n  try {\n    var ref = current.ref;\n    if (null !== ref) {\n      switch (current.tag) {\n        case 26:\n        case 27:\n        case 5:\n          var instanceToUse = current.stateNode;\n          break;\n        case 30:\n          instanceToUse = current.stateNode;\n          break;\n        default:\n          instanceToUse = current.stateNode;\n      }\n      \"function\" === typeof ref\n        ? (current.refCleanup = ref(instanceToUse))\n        : (ref.current = instanceToUse);\n    }\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n}\nfunction safelyDetachRef(current, nearestMountedAncestor) {\n  var ref = current.ref,\n    refCleanup = current.refCleanup;\n  if (null !== ref)\n    if (\"function\" === typeof refCleanup)\n      try {\n        refCleanup();\n      } catch (error) {\n        captureCommitPhaseError(current, nearestMountedAncestor, error);\n      } finally {\n        (current.refCleanup = null),\n          (current = current.alternate),\n          null != current && (current.refCleanup = null);\n      }\n    else if (\"function\" === typeof ref)\n      try {\n        ref(null);\n      } catch (error$140) {\n        captureCommitPhaseError(current, nearestMountedAncestor, error$140);\n      }\n    else ref.current = null;\n}\nfunction commitHostMount(finishedWork) {\n  var type = finishedWork.type,\n    props = finishedWork.memoizedProps,\n    instance = finishedWork.stateNode;\n  try {\n    a: switch (type) {\n      case \"button\":\n      case \"input\":\n      case \"select\":\n      case \"textarea\":\n        props.autoFocus && instance.focus();\n        break a;\n      case \"img\":\n        props.src\n          ? (instance.src = props.src)\n          : props.srcSet && (instance.srcset = props.srcSet);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitHostUpdate(finishedWork, newProps, oldProps) {\n  try {\n    var domElement = finishedWork.stateNode;\n    updateProperties(domElement, finishedWork.type, oldProps, newProps);\n    domElement[internalPropsKey] = newProps;\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction isHostParent(fiber) {\n  return (\n    5 === fiber.tag ||\n    3 === fiber.tag ||\n    26 === fiber.tag ||\n    (27 === fiber.tag && isSingletonScope(fiber.type)) ||\n    4 === fiber.tag\n  );\n}\nfunction getHostSibling(fiber) {\n  a: for (;;) {\n    for (; null === fiber.sibling; ) {\n      if (null === fiber.return || isHostParent(fiber.return)) return null;\n      fiber = fiber.return;\n    }\n    fiber.sibling.return = fiber.return;\n    for (\n      fiber = fiber.sibling;\n      5 !== fiber.tag && 6 !== fiber.tag && 18 !== fiber.tag;\n\n    ) {\n      if (27 === fiber.tag && isSingletonScope(fiber.type)) continue a;\n      if (fiber.flags & 2) continue a;\n      if (null === fiber.child || 4 === fiber.tag) continue a;\n      else (fiber.child.return = fiber), (fiber = fiber.child);\n    }\n    if (!(fiber.flags & 2)) return fiber.stateNode;\n  }\n}\nfunction insertOrAppendPlacementNodeIntoContainer(node, before, parent) {\n  var tag = node.tag;\n  if (5 === tag || 6 === tag)\n    (node = node.stateNode),\n      before\n        ? (9 === parent.nodeType\n            ? parent.body\n            : \"HTML\" === parent.nodeName\n              ? parent.ownerDocument.body\n              : parent\n          ).insertBefore(node, before)\n        : ((before =\n            9 === parent.nodeType\n              ? parent.body\n              : \"HTML\" === parent.nodeName\n                ? parent.ownerDocument.body\n                : parent),\n          before.appendChild(node),\n          (parent = parent._reactRootContainer),\n          (null !== parent && void 0 !== parent) ||\n            null !== before.onclick ||\n            (before.onclick = noop$1));\n  else if (\n    4 !== tag &&\n    (27 === tag &&\n      isSingletonScope(node.type) &&\n      ((parent = node.stateNode), (before = null)),\n    (node = node.child),\n    null !== node)\n  )\n    for (\n      insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n        node = node.sibling;\n      null !== node;\n\n    )\n      insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n        (node = node.sibling);\n}\nfunction insertOrAppendPlacementNode(node, before, parent) {\n  var tag = node.tag;\n  if (5 === tag || 6 === tag)\n    (node = node.stateNode),\n      before ? parent.insertBefore(node, before) : parent.appendChild(node);\n  else if (\n    4 !== tag &&\n    (27 === tag && isSingletonScope(node.type) && (parent = node.stateNode),\n    (node = node.child),\n    null !== node)\n  )\n    for (\n      insertOrAppendPlacementNode(node, before, parent), node = node.sibling;\n      null !== node;\n\n    )\n      insertOrAppendPlacementNode(node, before, parent), (node = node.sibling);\n}\nfunction commitHostSingletonAcquisition(finishedWork) {\n  var singleton = finishedWork.stateNode,\n    props = finishedWork.memoizedProps;\n  try {\n    for (\n      var type = finishedWork.type, attributes = singleton.attributes;\n      attributes.length;\n\n    )\n      singleton.removeAttributeNode(attributes[0]);\n    setInitialProperties(singleton, type, props);\n    singleton[internalInstanceKey] = finishedWork;\n    singleton[internalPropsKey] = props;\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nvar offscreenSubtreeIsHidden = !1,\n  offscreenSubtreeWasHidden = !1,\n  needsFormReset = !1,\n  PossiblyWeakSet = \"function\" === typeof WeakSet ? WeakSet : Set,\n  nextEffect = null;\nfunction commitBeforeMutationEffects(root, firstChild) {\n  root = root.containerInfo;\n  eventsEnabled = _enabled;\n  root = getActiveElementDeep(root);\n  if (hasSelectionCapabilities(root)) {\n    if (\"selectionStart\" in root)\n      var JSCompiler_temp = {\n        start: root.selectionStart,\n        end: root.selectionEnd\n      };\n    else\n      a: {\n        JSCompiler_temp =\n          ((JSCompiler_temp = root.ownerDocument) &&\n            JSCompiler_temp.defaultView) ||\n          window;\n        var selection =\n          JSCompiler_temp.getSelection && JSCompiler_temp.getSelection();\n        if (selection && 0 !== selection.rangeCount) {\n          JSCompiler_temp = selection.anchorNode;\n          var anchorOffset = selection.anchorOffset,\n            focusNode = selection.focusNode;\n          selection = selection.focusOffset;\n          try {\n            JSCompiler_temp.nodeType, focusNode.nodeType;\n          } catch (e$20) {\n            JSCompiler_temp = null;\n            break a;\n          }\n          var length = 0,\n            start = -1,\n            end = -1,\n            indexWithinAnchor = 0,\n            indexWithinFocus = 0,\n            node = root,\n            parentNode = null;\n          b: for (;;) {\n            for (var next; ; ) {\n              node !== JSCompiler_temp ||\n                (0 !== anchorOffset && 3 !== node.nodeType) ||\n                (start = length + anchorOffset);\n              node !== focusNode ||\n                (0 !== selection && 3 !== node.nodeType) ||\n                (end = length + selection);\n              3 === node.nodeType && (length += node.nodeValue.length);\n              if (null === (next = node.firstChild)) break;\n              parentNode = node;\n              node = next;\n            }\n            for (;;) {\n              if (node === root) break b;\n              parentNode === JSCompiler_temp &&\n                ++indexWithinAnchor === anchorOffset &&\n                (start = length);\n              parentNode === focusNode &&\n                ++indexWithinFocus === selection &&\n                (end = length);\n              if (null !== (next = node.nextSibling)) break;\n              node = parentNode;\n              parentNode = node.parentNode;\n            }\n            node = next;\n          }\n          JSCompiler_temp =\n            -1 === start || -1 === end ? null : { start: start, end: end };\n        } else JSCompiler_temp = null;\n      }\n    JSCompiler_temp = JSCompiler_temp || { start: 0, end: 0 };\n  } else JSCompiler_temp = null;\n  selectionInformation = { focusedElem: root, selectionRange: JSCompiler_temp };\n  _enabled = !1;\n  for (nextEffect = firstChild; null !== nextEffect; )\n    if (\n      ((firstChild = nextEffect),\n      (root = firstChild.child),\n      0 !== (firstChild.subtreeFlags & 1028) && null !== root)\n    )\n      (root.return = firstChild), (nextEffect = root);\n    else\n      for (; null !== nextEffect; ) {\n        firstChild = nextEffect;\n        focusNode = firstChild.alternate;\n        root = firstChild.flags;\n        switch (firstChild.tag) {\n          case 0:\n            if (\n              0 !== (root & 4) &&\n              ((root = firstChild.updateQueue),\n              (root = null !== root ? root.events : null),\n              null !== root)\n            )\n              for (\n                JSCompiler_temp = 0;\n                JSCompiler_temp < root.length;\n                JSCompiler_temp++\n              )\n                (anchorOffset = root[JSCompiler_temp]),\n                  (anchorOffset.ref.impl = anchorOffset.nextImpl);\n            break;\n          case 11:\n          case 15:\n            break;\n          case 1:\n            if (0 !== (root & 1024) && null !== focusNode) {\n              root = void 0;\n              JSCompiler_temp = firstChild;\n              anchorOffset = focusNode.memoizedProps;\n              focusNode = focusNode.memoizedState;\n              selection = JSCompiler_temp.stateNode;\n              try {\n                var resolvedPrevProps = resolveClassComponentProps(\n                  JSCompiler_temp.type,\n                  anchorOffset\n                );\n                root = selection.getSnapshotBeforeUpdate(\n                  resolvedPrevProps,\n                  focusNode\n                );\n                selection.__reactInternalSnapshotBeforeUpdate = root;\n              } catch (error) {\n                captureCommitPhaseError(\n                  JSCompiler_temp,\n                  JSCompiler_temp.return,\n                  error\n                );\n              }\n            }\n            break;\n          case 3:\n            if (0 !== (root & 1024))\n              if (\n                ((root = firstChild.stateNode.containerInfo),\n                (JSCompiler_temp = root.nodeType),\n                9 === JSCompiler_temp)\n              )\n                clearContainerSparingly(root);\n              else if (1 === JSCompiler_temp)\n                switch (root.nodeName) {\n                  case \"HEAD\":\n                  case \"HTML\":\n                  case \"BODY\":\n                    clearContainerSparingly(root);\n                    break;\n                  default:\n                    root.textContent = \"\";\n                }\n            break;\n          case 5:\n          case 26:\n          case 27:\n          case 6:\n          case 4:\n          case 17:\n            break;\n          default:\n            if (0 !== (root & 1024)) throw Error(formatProdErrorMessage(163));\n        }\n        root = firstChild.sibling;\n        if (null !== root) {\n          root.return = firstChild.return;\n          nextEffect = root;\n          break;\n        }\n        nextEffect = firstChild.return;\n      }\n}\nfunction commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) {\n  var flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitHookEffectListMount(5, finishedWork);\n      break;\n    case 1:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      if (flags & 4)\n        if (((finishedRoot = finishedWork.stateNode), null === current))\n          try {\n            finishedRoot.componentDidMount();\n          } catch (error) {\n            captureCommitPhaseError(finishedWork, finishedWork.return, error);\n          }\n        else {\n          var prevProps = resolveClassComponentProps(\n            finishedWork.type,\n            current.memoizedProps\n          );\n          current = current.memoizedState;\n          try {\n            finishedRoot.componentDidUpdate(\n              prevProps,\n              current,\n              finishedRoot.__reactInternalSnapshotBeforeUpdate\n            );\n          } catch (error$139) {\n            captureCommitPhaseError(\n              finishedWork,\n              finishedWork.return,\n              error$139\n            );\n          }\n        }\n      flags & 64 && commitClassCallbacks(finishedWork);\n      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n      break;\n    case 3:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      if (\n        flags & 64 &&\n        ((finishedRoot = finishedWork.updateQueue), null !== finishedRoot)\n      ) {\n        current = null;\n        if (null !== finishedWork.child)\n          switch (finishedWork.child.tag) {\n            case 27:\n            case 5:\n              current = finishedWork.child.stateNode;\n              break;\n            case 1:\n              current = finishedWork.child.stateNode;\n          }\n        try {\n          commitCallbacks(finishedRoot, current);\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      break;\n    case 27:\n      null === current &&\n        flags & 4 &&\n        commitHostSingletonAcquisition(finishedWork);\n    case 26:\n    case 5:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      null === current && flags & 4 && commitHostMount(finishedWork);\n      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n      break;\n    case 12:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      break;\n    case 31:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitActivityHydrationCallbacks(finishedRoot, finishedWork);\n      break;\n    case 13:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n      flags & 64 &&\n        ((finishedRoot = finishedWork.memoizedState),\n        null !== finishedRoot &&\n          ((finishedRoot = finishedRoot.dehydrated),\n          null !== finishedRoot &&\n            ((finishedWork = retryDehydratedSuspenseBoundary.bind(\n              null,\n              finishedWork\n            )),\n            registerSuspenseInstanceRetry(finishedRoot, finishedWork))));\n      break;\n    case 22:\n      flags = null !== finishedWork.memoizedState || offscreenSubtreeIsHidden;\n      if (!flags) {\n        current =\n          (null !== current && null !== current.memoizedState) ||\n          offscreenSubtreeWasHidden;\n        prevProps = offscreenSubtreeIsHidden;\n        var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n        offscreenSubtreeIsHidden = flags;\n        (offscreenSubtreeWasHidden = current) && !prevOffscreenSubtreeWasHidden\n          ? recursivelyTraverseReappearLayoutEffects(\n              finishedRoot,\n              finishedWork,\n              0 !== (finishedWork.subtreeFlags & 8772)\n            )\n          : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n        offscreenSubtreeIsHidden = prevProps;\n        offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n      }\n      break;\n    case 30:\n      break;\n    default:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n  }\n}\nfunction detachFiberAfterEffects(fiber) {\n  var alternate = fiber.alternate;\n  null !== alternate &&\n    ((fiber.alternate = null), detachFiberAfterEffects(alternate));\n  fiber.child = null;\n  fiber.deletions = null;\n  fiber.sibling = null;\n  5 === fiber.tag &&\n    ((alternate = fiber.stateNode),\n    null !== alternate && detachDeletedInstance(alternate));\n  fiber.stateNode = null;\n  fiber.return = null;\n  fiber.dependencies = null;\n  fiber.memoizedProps = null;\n  fiber.memoizedState = null;\n  fiber.pendingProps = null;\n  fiber.stateNode = null;\n  fiber.updateQueue = null;\n}\nvar hostParent = null,\n  hostParentIsContainer = !1;\nfunction recursivelyTraverseDeletionEffects(\n  finishedRoot,\n  nearestMountedAncestor,\n  parent\n) {\n  for (parent = parent.child; null !== parent; )\n    commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, parent),\n      (parent = parent.sibling);\n}\nfunction commitDeletionEffectsOnFiber(\n  finishedRoot,\n  nearestMountedAncestor,\n  deletedFiber\n) {\n  if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberUnmount)\n    try {\n      injectedHook.onCommitFiberUnmount(rendererID, deletedFiber);\n    } catch (err) {}\n  switch (deletedFiber.tag) {\n    case 26:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      deletedFiber.memoizedState\n        ? deletedFiber.memoizedState.count--\n        : deletedFiber.stateNode &&\n          ((deletedFiber = deletedFiber.stateNode),\n          deletedFiber.parentNode.removeChild(deletedFiber));\n      break;\n    case 27:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n      var prevHostParent = hostParent,\n        prevHostParentIsContainer = hostParentIsContainer;\n      isSingletonScope(deletedFiber.type) &&\n        ((hostParent = deletedFiber.stateNode), (hostParentIsContainer = !1));\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      releaseSingletonInstance(deletedFiber.stateNode);\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      break;\n    case 5:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n    case 6:\n      prevHostParent = hostParent;\n      prevHostParentIsContainer = hostParentIsContainer;\n      hostParent = null;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      if (null !== hostParent)\n        if (hostParentIsContainer)\n          try {\n            (9 === hostParent.nodeType\n              ? hostParent.body\n              : \"HTML\" === hostParent.nodeName\n                ? hostParent.ownerDocument.body\n                : hostParent\n            ).removeChild(deletedFiber.stateNode);\n          } catch (error) {\n            captureCommitPhaseError(\n              deletedFiber,\n              nearestMountedAncestor,\n              error\n            );\n          }\n        else\n          try {\n            hostParent.removeChild(deletedFiber.stateNode);\n          } catch (error) {\n            captureCommitPhaseError(\n              deletedFiber,\n              nearestMountedAncestor,\n              error\n            );\n          }\n      break;\n    case 18:\n      null !== hostParent &&\n        (hostParentIsContainer\n          ? ((finishedRoot = hostParent),\n            clearHydrationBoundary(\n              9 === finishedRoot.nodeType\n                ? finishedRoot.body\n                : \"HTML\" === finishedRoot.nodeName\n                  ? finishedRoot.ownerDocument.body\n                  : finishedRoot,\n              deletedFiber.stateNode\n            ),\n            retryIfBlockedOn(finishedRoot))\n          : clearHydrationBoundary(hostParent, deletedFiber.stateNode));\n      break;\n    case 4:\n      prevHostParent = hostParent;\n      prevHostParentIsContainer = hostParentIsContainer;\n      hostParent = deletedFiber.stateNode.containerInfo;\n      hostParentIsContainer = !0;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      break;\n    case 0:\n    case 11:\n    case 14:\n    case 15:\n      commitHookEffectListUnmount(2, deletedFiber, nearestMountedAncestor);\n      offscreenSubtreeWasHidden ||\n        commitHookEffectListUnmount(4, deletedFiber, nearestMountedAncestor);\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 1:\n      offscreenSubtreeWasHidden ||\n        (safelyDetachRef(deletedFiber, nearestMountedAncestor),\n        (prevHostParent = deletedFiber.stateNode),\n        \"function\" === typeof prevHostParent.componentWillUnmount &&\n          safelyCallComponentWillUnmount(\n            deletedFiber,\n            nearestMountedAncestor,\n            prevHostParent\n          ));\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 21:\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 22:\n      offscreenSubtreeWasHidden =\n        (prevHostParent = offscreenSubtreeWasHidden) ||\n        null !== deletedFiber.memoizedState;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      offscreenSubtreeWasHidden = prevHostParent;\n      break;\n    default:\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n  }\n}\nfunction commitActivityHydrationCallbacks(finishedRoot, finishedWork) {\n  if (\n    null === finishedWork.memoizedState &&\n    ((finishedRoot = finishedWork.alternate),\n    null !== finishedRoot &&\n      ((finishedRoot = finishedRoot.memoizedState), null !== finishedRoot))\n  ) {\n    finishedRoot = finishedRoot.dehydrated;\n    try {\n      retryIfBlockedOn(finishedRoot);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n  }\n}\nfunction commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {\n  if (\n    null === finishedWork.memoizedState &&\n    ((finishedRoot = finishedWork.alternate),\n    null !== finishedRoot &&\n      ((finishedRoot = finishedRoot.memoizedState),\n      null !== finishedRoot &&\n        ((finishedRoot = finishedRoot.dehydrated), null !== finishedRoot)))\n  )\n    try {\n      retryIfBlockedOn(finishedRoot);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n}\nfunction getRetryCache(finishedWork) {\n  switch (finishedWork.tag) {\n    case 31:\n    case 13:\n    case 19:\n      var retryCache = finishedWork.stateNode;\n      null === retryCache &&\n        (retryCache = finishedWork.stateNode = new PossiblyWeakSet());\n      return retryCache;\n    case 22:\n      return (\n        (finishedWork = finishedWork.stateNode),\n        (retryCache = finishedWork._retryCache),\n        null === retryCache &&\n          (retryCache = finishedWork._retryCache = new PossiblyWeakSet()),\n        retryCache\n      );\n    default:\n      throw Error(formatProdErrorMessage(435, finishedWork.tag));\n  }\n}\nfunction attachSuspenseRetryListeners(finishedWork, wakeables) {\n  var retryCache = getRetryCache(finishedWork);\n  wakeables.forEach(function (wakeable) {\n    if (!retryCache.has(wakeable)) {\n      retryCache.add(wakeable);\n      var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);\n      wakeable.then(retry, retry);\n    }\n  });\n}\nfunction recursivelyTraverseMutationEffects(root$jscomp$0, parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (null !== deletions)\n    for (var i = 0; i < deletions.length; i++) {\n      var childToDelete = deletions[i],\n        root = root$jscomp$0,\n        returnFiber = parentFiber,\n        parent = returnFiber;\n      a: for (; null !== parent; ) {\n        switch (parent.tag) {\n          case 27:\n            if (isSingletonScope(parent.type)) {\n              hostParent = parent.stateNode;\n              hostParentIsContainer = !1;\n              break a;\n            }\n            break;\n          case 5:\n            hostParent = parent.stateNode;\n            hostParentIsContainer = !1;\n            break a;\n          case 3:\n          case 4:\n            hostParent = parent.stateNode.containerInfo;\n            hostParentIsContainer = !0;\n            break a;\n        }\n        parent = parent.return;\n      }\n      if (null === hostParent) throw Error(formatProdErrorMessage(160));\n      commitDeletionEffectsOnFiber(root, returnFiber, childToDelete);\n      hostParent = null;\n      hostParentIsContainer = !1;\n      root = childToDelete.alternate;\n      null !== root && (root.return = null);\n      childToDelete.return = null;\n    }\n  if (parentFiber.subtreeFlags & 13886)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitMutationEffectsOnFiber(parentFiber, root$jscomp$0),\n        (parentFiber = parentFiber.sibling);\n}\nvar currentHoistableRoot = null;\nfunction commitMutationEffectsOnFiber(finishedWork, root) {\n  var current = finishedWork.alternate,\n    flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 14:\n    case 15:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        (commitHookEffectListUnmount(3, finishedWork, finishedWork.return),\n        commitHookEffectListMount(3, finishedWork),\n        commitHookEffectListUnmount(5, finishedWork, finishedWork.return));\n      break;\n    case 1:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      flags & 64 &&\n        offscreenSubtreeIsHidden &&\n        ((finishedWork = finishedWork.updateQueue),\n        null !== finishedWork &&\n          ((flags = finishedWork.callbacks),\n          null !== flags &&\n            ((current = finishedWork.shared.hiddenCallbacks),\n            (finishedWork.shared.hiddenCallbacks =\n              null === current ? flags : current.concat(flags)))));\n      break;\n    case 26:\n      var hoistableRoot = currentHoistableRoot;\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      if (flags & 4) {\n        var currentResource = null !== current ? current.memoizedState : null;\n        flags = finishedWork.memoizedState;\n        if (null === current)\n          if (null === flags)\n            if (null === finishedWork.stateNode) {\n              a: {\n                flags = finishedWork.type;\n                current = finishedWork.memoizedProps;\n                hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n                b: switch (flags) {\n                  case \"title\":\n                    currentResource =\n                      hoistableRoot.getElementsByTagName(\"title\")[0];\n                    if (\n                      !currentResource ||\n                      currentResource[internalHoistableMarker] ||\n                      currentResource[internalInstanceKey] ||\n                      \"http://www.w3.org/2000/svg\" ===\n                        currentResource.namespaceURI ||\n                      currentResource.hasAttribute(\"itemprop\")\n                    )\n                      (currentResource = hoistableRoot.createElement(flags)),\n                        hoistableRoot.head.insertBefore(\n                          currentResource,\n                          hoistableRoot.querySelector(\"head > title\")\n                        );\n                    setInitialProperties(currentResource, flags, current);\n                    currentResource[internalInstanceKey] = finishedWork;\n                    markNodeAsHoistable(currentResource);\n                    flags = currentResource;\n                    break a;\n                  case \"link\":\n                    var maybeNodes = getHydratableHoistableCache(\n                      \"link\",\n                      \"href\",\n                      hoistableRoot\n                    ).get(flags + (current.href || \"\"));\n                    if (maybeNodes)\n                      for (var i = 0; i < maybeNodes.length; i++)\n                        if (\n                          ((currentResource = maybeNodes[i]),\n                          currentResource.getAttribute(\"href\") ===\n                            (null == current.href || \"\" === current.href\n                              ? null\n                              : current.href) &&\n                            currentResource.getAttribute(\"rel\") ===\n                              (null == current.rel ? null : current.rel) &&\n                            currentResource.getAttribute(\"title\") ===\n                              (null == current.title ? null : current.title) &&\n                            currentResource.getAttribute(\"crossorigin\") ===\n                              (null == current.crossOrigin\n                                ? null\n                                : current.crossOrigin))\n                        ) {\n                          maybeNodes.splice(i, 1);\n                          break b;\n                        }\n                    currentResource = hoistableRoot.createElement(flags);\n                    setInitialProperties(currentResource, flags, current);\n                    hoistableRoot.head.appendChild(currentResource);\n                    break;\n                  case \"meta\":\n                    if (\n                      (maybeNodes = getHydratableHoistableCache(\n                        \"meta\",\n                        \"content\",\n                        hoistableRoot\n                      ).get(flags + (current.content || \"\")))\n                    )\n                      for (i = 0; i < maybeNodes.length; i++)\n                        if (\n                          ((currentResource = maybeNodes[i]),\n                          currentResource.getAttribute(\"content\") ===\n                            (null == current.content\n                              ? null\n                              : \"\" + current.content) &&\n                            currentResource.getAttribute(\"name\") ===\n                              (null == current.name ? null : current.name) &&\n                            currentResource.getAttribute(\"property\") ===\n                              (null == current.property\n                                ? null\n                                : current.property) &&\n                            currentResource.getAttribute(\"http-equiv\") ===\n                              (null == current.httpEquiv\n                                ? null\n                                : current.httpEquiv) &&\n                            currentResource.getAttribute(\"charset\") ===\n                              (null == current.charSet\n                                ? null\n                                : current.charSet))\n                        ) {\n                          maybeNodes.splice(i, 1);\n                          break b;\n                        }\n                    currentResource = hoistableRoot.createElement(flags);\n                    setInitialProperties(currentResource, flags, current);\n                    hoistableRoot.head.appendChild(currentResource);\n                    break;\n                  default:\n                    throw Error(formatProdErrorMessage(468, flags));\n                }\n                currentResource[internalInstanceKey] = finishedWork;\n                markNodeAsHoistable(currentResource);\n                flags = currentResource;\n              }\n              finishedWork.stateNode = flags;\n            } else\n              mountHoistable(\n                hoistableRoot,\n                finishedWork.type,\n                finishedWork.stateNode\n              );\n          else\n            finishedWork.stateNode = acquireResource(\n              hoistableRoot,\n              flags,\n              finishedWork.memoizedProps\n            );\n        else\n          currentResource !== flags\n            ? (null === currentResource\n                ? null !== current.stateNode &&\n                  ((current = current.stateNode),\n                  current.parentNode.removeChild(current))\n                : currentResource.count--,\n              null === flags\n                ? mountHoistable(\n                    hoistableRoot,\n                    finishedWork.type,\n                    finishedWork.stateNode\n                  )\n                : acquireResource(\n                    hoistableRoot,\n                    flags,\n                    finishedWork.memoizedProps\n                  ))\n            : null === flags &&\n              null !== finishedWork.stateNode &&\n              commitHostUpdate(\n                finishedWork,\n                finishedWork.memoizedProps,\n                current.memoizedProps\n              );\n      }\n      break;\n    case 27:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      null !== current &&\n        flags & 4 &&\n        commitHostUpdate(\n          finishedWork,\n          finishedWork.memoizedProps,\n          current.memoizedProps\n        );\n      break;\n    case 5:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      if (finishedWork.flags & 32) {\n        hoistableRoot = finishedWork.stateNode;\n        try {\n          setTextContent(hoistableRoot, \"\");\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      flags & 4 &&\n        null != finishedWork.stateNode &&\n        ((hoistableRoot = finishedWork.memoizedProps),\n        commitHostUpdate(\n          finishedWork,\n          hoistableRoot,\n          null !== current ? current.memoizedProps : hoistableRoot\n        ));\n      flags & 1024 && (needsFormReset = !0);\n      break;\n    case 6:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      if (flags & 4) {\n        if (null === finishedWork.stateNode)\n          throw Error(formatProdErrorMessage(162));\n        flags = finishedWork.memoizedProps;\n        current = finishedWork.stateNode;\n        try {\n          current.nodeValue = flags;\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      break;\n    case 3:\n      tagCaches = null;\n      hoistableRoot = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(root.containerInfo);\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      currentHoistableRoot = hoistableRoot;\n      commitReconciliationEffects(finishedWork);\n      if (flags & 4 && null !== current && current.memoizedState.isDehydrated)\n        try {\n          retryIfBlockedOn(root.containerInfo);\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      needsFormReset &&\n        ((needsFormReset = !1), recursivelyResetForms(finishedWork));\n      break;\n    case 4:\n      flags = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(\n        finishedWork.stateNode.containerInfo\n      );\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      currentHoistableRoot = flags;\n      break;\n    case 12:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      break;\n    case 31:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 13:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      finishedWork.child.flags & 8192 &&\n        (null !== finishedWork.memoizedState) !==\n          (null !== current && null !== current.memoizedState) &&\n        (globalMostRecentFallbackTime = now());\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 22:\n      hoistableRoot = null !== finishedWork.memoizedState;\n      var wasHidden = null !== current && null !== current.memoizedState,\n        prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden,\n        prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n      offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden || hoistableRoot;\n      offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || wasHidden;\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n      offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;\n      commitReconciliationEffects(finishedWork);\n      if (flags & 8192)\n        a: for (\n          root = finishedWork.stateNode,\n            root._visibility = hoistableRoot\n              ? root._visibility & -2\n              : root._visibility | 1,\n            hoistableRoot &&\n              (null === current ||\n                wasHidden ||\n                offscreenSubtreeIsHidden ||\n                offscreenSubtreeWasHidden ||\n                recursivelyTraverseDisappearLayoutEffects(finishedWork)),\n            current = null,\n            root = finishedWork;\n          ;\n\n        ) {\n          if (5 === root.tag || 26 === root.tag) {\n            if (null === current) {\n              wasHidden = current = root;\n              try {\n                if (((currentResource = wasHidden.stateNode), hoistableRoot))\n                  (maybeNodes = currentResource.style),\n                    \"function\" === typeof maybeNodes.setProperty\n                      ? maybeNodes.setProperty(\"display\", \"none\", \"important\")\n                      : (maybeNodes.display = \"none\");\n                else {\n                  i = wasHidden.stateNode;\n                  var styleProp = wasHidden.memoizedProps.style,\n                    display =\n                      void 0 !== styleProp &&\n                      null !== styleProp &&\n                      styleProp.hasOwnProperty(\"display\")\n                        ? styleProp.display\n                        : null;\n                  i.style.display =\n                    null == display || \"boolean\" === typeof display\n                      ? \"\"\n                      : (\"\" + display).trim();\n                }\n              } catch (error) {\n                captureCommitPhaseError(wasHidden, wasHidden.return, error);\n              }\n            }\n          } else if (6 === root.tag) {\n            if (null === current) {\n              wasHidden = root;\n              try {\n                wasHidden.stateNode.nodeValue = hoistableRoot\n                  ? \"\"\n                  : wasHidden.memoizedProps;\n              } catch (error) {\n                captureCommitPhaseError(wasHidden, wasHidden.return, error);\n              }\n            }\n          } else if (18 === root.tag) {\n            if (null === current) {\n              wasHidden = root;\n              try {\n                var instance = wasHidden.stateNode;\n                hoistableRoot\n                  ? hideOrUnhideDehydratedBoundary(instance, !0)\n                  : hideOrUnhideDehydratedBoundary(wasHidden.stateNode, !1);\n              } catch (error) {\n                captureCommitPhaseError(wasHidden, wasHidden.return, error);\n              }\n            }\n          } else if (\n            ((22 !== root.tag && 23 !== root.tag) ||\n              null === root.memoizedState ||\n              root === finishedWork) &&\n            null !== root.child\n          ) {\n            root.child.return = root;\n            root = root.child;\n            continue;\n          }\n          if (root === finishedWork) break a;\n          for (; null === root.sibling; ) {\n            if (null === root.return || root.return === finishedWork) break a;\n            current === root && (current = null);\n            root = root.return;\n          }\n          current === root && (current = null);\n          root.sibling.return = root.return;\n          root = root.sibling;\n        }\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((current = flags.retryQueue),\n          null !== current &&\n            ((flags.retryQueue = null),\n            attachSuspenseRetryListeners(finishedWork, current))));\n      break;\n    case 19:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 30:\n      break;\n    case 21:\n      break;\n    default:\n      recursivelyTraverseMutationEffects(root, finishedWork),\n        commitReconciliationEffects(finishedWork);\n  }\n}\nfunction commitReconciliationEffects(finishedWork) {\n  var flags = finishedWork.flags;\n  if (flags & 2) {\n    try {\n      for (\n        var hostParentFiber, parentFiber = finishedWork.return;\n        null !== parentFiber;\n\n      ) {\n        if (isHostParent(parentFiber)) {\n          hostParentFiber = parentFiber;\n          break;\n        }\n        parentFiber = parentFiber.return;\n      }\n      if (null == hostParentFiber) throw Error(formatProdErrorMessage(160));\n      switch (hostParentFiber.tag) {\n        case 27:\n          var parent = hostParentFiber.stateNode,\n            before = getHostSibling(finishedWork);\n          insertOrAppendPlacementNode(finishedWork, before, parent);\n          break;\n        case 5:\n          var parent$141 = hostParentFiber.stateNode;\n          hostParentFiber.flags & 32 &&\n            (setTextContent(parent$141, \"\"), (hostParentFiber.flags &= -33));\n          var before$142 = getHostSibling(finishedWork);\n          insertOrAppendPlacementNode(finishedWork, before$142, parent$141);\n          break;\n        case 3:\n        case 4:\n          var parent$143 = hostParentFiber.stateNode.containerInfo,\n            before$144 = getHostSibling(finishedWork);\n          insertOrAppendPlacementNodeIntoContainer(\n            finishedWork,\n            before$144,\n            parent$143\n          );\n          break;\n        default:\n          throw Error(formatProdErrorMessage(161));\n      }\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n    finishedWork.flags &= -3;\n  }\n  flags & 4096 && (finishedWork.flags &= -4097);\n}\nfunction recursivelyResetForms(parentFiber) {\n  if (parentFiber.subtreeFlags & 1024)\n    for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n      var fiber = parentFiber;\n      recursivelyResetForms(fiber);\n      5 === fiber.tag && fiber.flags & 1024 && fiber.stateNode.reset();\n      parentFiber = parentFiber.sibling;\n    }\n}\nfunction recursivelyTraverseLayoutEffects(root, parentFiber) {\n  if (parentFiber.subtreeFlags & 8772)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitLayoutEffectOnFiber(root, parentFiber.alternate, parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction recursivelyTraverseDisappearLayoutEffects(parentFiber) {\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var finishedWork = parentFiber;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 14:\n      case 15:\n        commitHookEffectListUnmount(4, finishedWork, finishedWork.return);\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 1:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        var instance = finishedWork.stateNode;\n        \"function\" === typeof instance.componentWillUnmount &&\n          safelyCallComponentWillUnmount(\n            finishedWork,\n            finishedWork.return,\n            instance\n          );\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 27:\n        releaseSingletonInstance(finishedWork.stateNode);\n      case 26:\n      case 5:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 22:\n        null === finishedWork.memoizedState &&\n          recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 30:\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      default:\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction recursivelyTraverseReappearLayoutEffects(\n  finishedRoot$jscomp$0,\n  parentFiber,\n  includeWorkInProgressEffects\n) {\n  includeWorkInProgressEffects =\n    includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 8772);\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var current = parentFiber.alternate,\n      finishedRoot = finishedRoot$jscomp$0,\n      finishedWork = parentFiber,\n      flags = finishedWork.flags;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 15:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        commitHookEffectListMount(4, finishedWork);\n        break;\n      case 1:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        current = finishedWork;\n        finishedRoot = current.stateNode;\n        if (\"function\" === typeof finishedRoot.componentDidMount)\n          try {\n            finishedRoot.componentDidMount();\n          } catch (error) {\n            captureCommitPhaseError(current, current.return, error);\n          }\n        current = finishedWork;\n        finishedRoot = current.updateQueue;\n        if (null !== finishedRoot) {\n          var instance = current.stateNode;\n          try {\n            var hiddenCallbacks = finishedRoot.shared.hiddenCallbacks;\n            if (null !== hiddenCallbacks)\n              for (\n                finishedRoot.shared.hiddenCallbacks = null, finishedRoot = 0;\n                finishedRoot < hiddenCallbacks.length;\n                finishedRoot++\n              )\n                callCallback(hiddenCallbacks[finishedRoot], instance);\n          } catch (error) {\n            captureCommitPhaseError(current, current.return, error);\n          }\n        }\n        includeWorkInProgressEffects &&\n          flags & 64 &&\n          commitClassCallbacks(finishedWork);\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 27:\n        commitHostSingletonAcquisition(finishedWork);\n      case 26:\n      case 5:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          null === current &&\n          flags & 4 &&\n          commitHostMount(finishedWork);\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 12:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        break;\n      case 31:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 4 &&\n          commitActivityHydrationCallbacks(finishedRoot, finishedWork);\n        break;\n      case 13:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 4 &&\n          commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n        break;\n      case 22:\n        null === finishedWork.memoizedState &&\n          recursivelyTraverseReappearLayoutEffects(\n            finishedRoot,\n            finishedWork,\n            includeWorkInProgressEffects\n          );\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 30:\n        break;\n      default:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction commitOffscreenPassiveMountEffects(current, finishedWork) {\n  var previousCache = null;\n  null !== current &&\n    null !== current.memoizedState &&\n    null !== current.memoizedState.cachePool &&\n    (previousCache = current.memoizedState.cachePool.pool);\n  current = null;\n  null !== finishedWork.memoizedState &&\n    null !== finishedWork.memoizedState.cachePool &&\n    (current = finishedWork.memoizedState.cachePool.pool);\n  current !== previousCache &&\n    (null != current && current.refCount++,\n    null != previousCache && releaseCache(previousCache));\n}\nfunction commitCachePassiveMountEffect(current, finishedWork) {\n  current = null;\n  null !== finishedWork.alternate &&\n    (current = finishedWork.alternate.memoizedState.cache);\n  finishedWork = finishedWork.memoizedState.cache;\n  finishedWork !== current &&\n    (finishedWork.refCount++, null != current && releaseCache(current));\n}\nfunction recursivelyTraversePassiveMountEffects(\n  root,\n  parentFiber,\n  committedLanes,\n  committedTransitions\n) {\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitPassiveMountOnFiber(\n        root,\n        parentFiber,\n        committedLanes,\n        committedTransitions\n      ),\n        (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveMountOnFiber(\n  finishedRoot,\n  finishedWork,\n  committedLanes,\n  committedTransitions\n) {\n  var flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 && commitHookEffectListMount(9, finishedWork);\n      break;\n    case 1:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    case 3:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 &&\n        ((finishedRoot = null),\n        null !== finishedWork.alternate &&\n          (finishedRoot = finishedWork.alternate.memoizedState.cache),\n        (finishedWork = finishedWork.memoizedState.cache),\n        finishedWork !== finishedRoot &&\n          (finishedWork.refCount++,\n          null != finishedRoot && releaseCache(finishedRoot)));\n      break;\n    case 12:\n      if (flags & 2048) {\n        recursivelyTraversePassiveMountEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions\n        );\n        finishedRoot = finishedWork.stateNode;\n        try {\n          var _finishedWork$memoize2 = finishedWork.memoizedProps,\n            id = _finishedWork$memoize2.id,\n            onPostCommit = _finishedWork$memoize2.onPostCommit;\n          \"function\" === typeof onPostCommit &&\n            onPostCommit(\n              id,\n              null === finishedWork.alternate ? \"mount\" : \"update\",\n              finishedRoot.passiveEffectDuration,\n              -0\n            );\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      } else\n        recursivelyTraversePassiveMountEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions\n        );\n      break;\n    case 31:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    case 13:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    case 23:\n      break;\n    case 22:\n      _finishedWork$memoize2 = finishedWork.stateNode;\n      id = finishedWork.alternate;\n      null !== finishedWork.memoizedState\n        ? _finishedWork$memoize2._visibility & 2\n          ? recursivelyTraversePassiveMountEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions\n            )\n          : recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork)\n        : _finishedWork$memoize2._visibility & 2\n          ? recursivelyTraversePassiveMountEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions\n            )\n          : ((_finishedWork$memoize2._visibility |= 2),\n            recursivelyTraverseReconnectPassiveEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions,\n              0 !== (finishedWork.subtreeFlags & 10256) || !1\n            ));\n      flags & 2048 && commitOffscreenPassiveMountEffects(id, finishedWork);\n      break;\n    case 24:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 &&\n        commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n      break;\n    default:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n  }\n}\nfunction recursivelyTraverseReconnectPassiveEffects(\n  finishedRoot$jscomp$0,\n  parentFiber,\n  committedLanes$jscomp$0,\n  committedTransitions$jscomp$0,\n  includeWorkInProgressEffects\n) {\n  includeWorkInProgressEffects =\n    includeWorkInProgressEffects &&\n    (0 !== (parentFiber.subtreeFlags & 10256) || !1);\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var finishedRoot = finishedRoot$jscomp$0,\n      finishedWork = parentFiber,\n      committedLanes = committedLanes$jscomp$0,\n      committedTransitions = committedTransitions$jscomp$0,\n      flags = finishedWork.flags;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 15:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n        commitHookEffectListMount(8, finishedWork);\n        break;\n      case 23:\n        break;\n      case 22:\n        var instance = finishedWork.stateNode;\n        null !== finishedWork.memoizedState\n          ? instance._visibility & 2\n            ? recursivelyTraverseReconnectPassiveEffects(\n                finishedRoot,\n                finishedWork,\n                committedLanes,\n                committedTransitions,\n                includeWorkInProgressEffects\n              )\n            : recursivelyTraverseAtomicPassiveEffects(\n                finishedRoot,\n                finishedWork\n              )\n          : ((instance._visibility |= 2),\n            recursivelyTraverseReconnectPassiveEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions,\n              includeWorkInProgressEffects\n            ));\n        includeWorkInProgressEffects &&\n          flags & 2048 &&\n          commitOffscreenPassiveMountEffects(\n            finishedWork.alternate,\n            finishedWork\n          );\n        break;\n      case 24:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 2048 &&\n          commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n        break;\n      default:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction recursivelyTraverseAtomicPassiveEffects(\n  finishedRoot$jscomp$0,\n  parentFiber\n) {\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n      var finishedRoot = finishedRoot$jscomp$0,\n        finishedWork = parentFiber,\n        flags = finishedWork.flags;\n      switch (finishedWork.tag) {\n        case 22:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n          flags & 2048 &&\n            commitOffscreenPassiveMountEffects(\n              finishedWork.alternate,\n              finishedWork\n            );\n          break;\n        case 24:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n          flags & 2048 &&\n            commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n          break;\n        default:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n      }\n      parentFiber = parentFiber.sibling;\n    }\n}\nvar suspenseyCommitFlag = 8192;\nfunction recursivelyAccumulateSuspenseyCommit(\n  parentFiber,\n  committedLanes,\n  suspendedState\n) {\n  if (parentFiber.subtreeFlags & suspenseyCommitFlag)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      accumulateSuspenseyCommitOnFiber(\n        parentFiber,\n        committedLanes,\n        suspendedState\n      ),\n        (parentFiber = parentFiber.sibling);\n}\nfunction accumulateSuspenseyCommitOnFiber(\n  fiber,\n  committedLanes,\n  suspendedState\n) {\n  switch (fiber.tag) {\n    case 26:\n      recursivelyAccumulateSuspenseyCommit(\n        fiber,\n        committedLanes,\n        suspendedState\n      );\n      fiber.flags & suspenseyCommitFlag &&\n        null !== fiber.memoizedState &&\n        suspendResource(\n          suspendedState,\n          currentHoistableRoot,\n          fiber.memoizedState,\n          fiber.memoizedProps\n        );\n      break;\n    case 5:\n      recursivelyAccumulateSuspenseyCommit(\n        fiber,\n        committedLanes,\n        suspendedState\n      );\n      break;\n    case 3:\n    case 4:\n      var previousHoistableRoot = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(fiber.stateNode.containerInfo);\n      recursivelyAccumulateSuspenseyCommit(\n        fiber,\n        committedLanes,\n        suspendedState\n      );\n      currentHoistableRoot = previousHoistableRoot;\n      break;\n    case 22:\n      null === fiber.memoizedState &&\n        ((previousHoistableRoot = fiber.alternate),\n        null !== previousHoistableRoot &&\n        null !== previousHoistableRoot.memoizedState\n          ? ((previousHoistableRoot = suspenseyCommitFlag),\n            (suspenseyCommitFlag = 16777216),\n            recursivelyAccumulateSuspenseyCommit(\n              fiber,\n              committedLanes,\n              suspendedState\n            ),\n            (suspenseyCommitFlag = previousHoistableRoot))\n          : recursivelyAccumulateSuspenseyCommit(\n              fiber,\n              committedLanes,\n              suspendedState\n            ));\n      break;\n    default:\n      recursivelyAccumulateSuspenseyCommit(\n        fiber,\n        committedLanes,\n        suspendedState\n      );\n  }\n}\nfunction detachAlternateSiblings(parentFiber) {\n  var previousFiber = parentFiber.alternate;\n  if (\n    null !== previousFiber &&\n    ((parentFiber = previousFiber.child), null !== parentFiber)\n  ) {\n    previousFiber.child = null;\n    do\n      (previousFiber = parentFiber.sibling),\n        (parentFiber.sibling = null),\n        (parentFiber = previousFiber);\n    while (null !== parentFiber);\n  }\n}\nfunction recursivelyTraversePassiveUnmountEffects(parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (0 !== (parentFiber.flags & 16)) {\n    if (null !== deletions)\n      for (var i = 0; i < deletions.length; i++) {\n        var childToDelete = deletions[i];\n        nextEffect = childToDelete;\n        commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n          childToDelete,\n          parentFiber\n        );\n      }\n    detachAlternateSiblings(parentFiber);\n  }\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitPassiveUnmountOnFiber(parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveUnmountOnFiber(finishedWork) {\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      finishedWork.flags & 2048 &&\n        commitHookEffectListUnmount(9, finishedWork, finishedWork.return);\n      break;\n    case 3:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    case 12:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    case 22:\n      var instance = finishedWork.stateNode;\n      null !== finishedWork.memoizedState &&\n      instance._visibility & 2 &&\n      (null === finishedWork.return || 13 !== finishedWork.return.tag)\n        ? ((instance._visibility &= -3),\n          recursivelyTraverseDisconnectPassiveEffects(finishedWork))\n        : recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    default:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n  }\n}\nfunction recursivelyTraverseDisconnectPassiveEffects(parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (0 !== (parentFiber.flags & 16)) {\n    if (null !== deletions)\n      for (var i = 0; i < deletions.length; i++) {\n        var childToDelete = deletions[i];\n        nextEffect = childToDelete;\n        commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n          childToDelete,\n          parentFiber\n        );\n      }\n    detachAlternateSiblings(parentFiber);\n  }\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    deletions = parentFiber;\n    switch (deletions.tag) {\n      case 0:\n      case 11:\n      case 15:\n        commitHookEffectListUnmount(8, deletions, deletions.return);\n        recursivelyTraverseDisconnectPassiveEffects(deletions);\n        break;\n      case 22:\n        i = deletions.stateNode;\n        i._visibility & 2 &&\n          ((i._visibility &= -3),\n          recursivelyTraverseDisconnectPassiveEffects(deletions));\n        break;\n      default:\n        recursivelyTraverseDisconnectPassiveEffects(deletions);\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n  deletedSubtreeRoot,\n  nearestMountedAncestor\n) {\n  for (; null !== nextEffect; ) {\n    var fiber = nextEffect;\n    switch (fiber.tag) {\n      case 0:\n      case 11:\n      case 15:\n        commitHookEffectListUnmount(8, fiber, nearestMountedAncestor);\n        break;\n      case 23:\n      case 22:\n        if (\n          null !== fiber.memoizedState &&\n          null !== fiber.memoizedState.cachePool\n        ) {\n          var cache = fiber.memoizedState.cachePool.pool;\n          null != cache && cache.refCount++;\n        }\n        break;\n      case 24:\n        releaseCache(fiber.memoizedState.cache);\n    }\n    cache = fiber.child;\n    if (null !== cache) (cache.return = fiber), (nextEffect = cache);\n    else\n      a: for (fiber = deletedSubtreeRoot; null !== nextEffect; ) {\n        cache = nextEffect;\n        var sibling = cache.sibling,\n          returnFiber = cache.return;\n        detachFiberAfterEffects(cache);\n        if (cache === fiber) {\n          nextEffect = null;\n          break a;\n        }\n        if (null !== sibling) {\n          sibling.return = returnFiber;\n          nextEffect = sibling;\n          break a;\n        }\n        nextEffect = returnFiber;\n      }\n  }\n}\nvar DefaultAsyncDispatcher = {\n    getCacheForType: function (resourceType) {\n      var cache = readContext(CacheContext),\n        cacheForType = cache.data.get(resourceType);\n      void 0 === cacheForType &&\n        ((cacheForType = resourceType()),\n        cache.data.set(resourceType, cacheForType));\n      return cacheForType;\n    },\n    cacheSignal: function () {\n      return readContext(CacheContext).controller.signal;\n    }\n  },\n  PossiblyWeakMap = \"function\" === typeof WeakMap ? WeakMap : Map,\n  executionContext = 0,\n  workInProgressRoot = null,\n  workInProgress = null,\n  workInProgressRootRenderLanes = 0,\n  workInProgressSuspendedReason = 0,\n  workInProgressThrownValue = null,\n  workInProgressRootDidSkipSuspendedSiblings = !1,\n  workInProgressRootIsPrerendering = !1,\n  workInProgressRootDidAttachPingListener = !1,\n  entangledRenderLanes = 0,\n  workInProgressRootExitStatus = 0,\n  workInProgressRootSkippedLanes = 0,\n  workInProgressRootInterleavedUpdatedLanes = 0,\n  workInProgressRootPingedLanes = 0,\n  workInProgressDeferredLane = 0,\n  workInProgressSuspendedRetryLanes = 0,\n  workInProgressRootConcurrentErrors = null,\n  workInProgressRootRecoverableErrors = null,\n  workInProgressRootDidIncludeRecursiveRenderUpdate = !1,\n  globalMostRecentFallbackTime = 0,\n  globalMostRecentTransitionTime = 0,\n  workInProgressRootRenderTargetTime = Infinity,\n  workInProgressTransitions = null,\n  legacyErrorBoundariesThatAlreadyFailed = null,\n  pendingEffectsStatus = 0,\n  pendingEffectsRoot = null,\n  pendingFinishedWork = null,\n  pendingEffectsLanes = 0,\n  pendingEffectsRemainingLanes = 0,\n  pendingPassiveTransitions = null,\n  pendingRecoverableErrors = null,\n  nestedUpdateCount = 0,\n  rootWithNestedUpdates = null;\nfunction requestUpdateLane() {\n  return 0 !== (executionContext & 2) && 0 !== workInProgressRootRenderLanes\n    ? workInProgressRootRenderLanes & -workInProgressRootRenderLanes\n    : null !== ReactSharedInternals.T\n      ? requestTransitionLane()\n      : resolveUpdatePriority();\n}\nfunction requestDeferredLane() {\n  if (0 === workInProgressDeferredLane)\n    if (0 === (workInProgressRootRenderLanes & 536870912) || isHydrating) {\n      var lane = nextTransitionDeferredLane;\n      nextTransitionDeferredLane <<= 1;\n      0 === (nextTransitionDeferredLane & 3932160) &&\n        (nextTransitionDeferredLane = 262144);\n      workInProgressDeferredLane = lane;\n    } else workInProgressDeferredLane = 536870912;\n  lane = suspenseHandlerStackCursor.current;\n  null !== lane && (lane.flags |= 32);\n  return workInProgressDeferredLane;\n}\nfunction scheduleUpdateOnFiber(root, fiber, lane) {\n  if (\n    (root === workInProgressRoot &&\n      (2 === workInProgressSuspendedReason ||\n        9 === workInProgressSuspendedReason)) ||\n    null !== root.cancelPendingCommit\n  )\n    prepareFreshStack(root, 0),\n      markRootSuspended(\n        root,\n        workInProgressRootRenderLanes,\n        workInProgressDeferredLane,\n        !1\n      );\n  markRootUpdated$1(root, lane);\n  if (0 === (executionContext & 2) || root !== workInProgressRoot)\n    root === workInProgressRoot &&\n      (0 === (executionContext & 2) &&\n        (workInProgressRootInterleavedUpdatedLanes |= lane),\n      4 === workInProgressRootExitStatus &&\n        markRootSuspended(\n          root,\n          workInProgressRootRenderLanes,\n          workInProgressDeferredLane,\n          !1\n        )),\n      ensureRootIsScheduled(root);\n}\nfunction performWorkOnRoot(root$jscomp$0, lanes, forceSync) {\n  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n  var shouldTimeSlice =\n      (!forceSync &&\n        0 === (lanes & 127) &&\n        0 === (lanes & root$jscomp$0.expiredLanes)) ||\n      checkIfRootIsPrerendering(root$jscomp$0, lanes),\n    exitStatus = shouldTimeSlice\n      ? renderRootConcurrent(root$jscomp$0, lanes)\n      : renderRootSync(root$jscomp$0, lanes, !0),\n    renderWasConcurrent = shouldTimeSlice;\n  do {\n    if (0 === exitStatus) {\n      workInProgressRootIsPrerendering &&\n        !shouldTimeSlice &&\n        markRootSuspended(root$jscomp$0, lanes, 0, !1);\n      break;\n    } else {\n      forceSync = root$jscomp$0.current.alternate;\n      if (\n        renderWasConcurrent &&\n        !isRenderConsistentWithExternalStores(forceSync)\n      ) {\n        exitStatus = renderRootSync(root$jscomp$0, lanes, !1);\n        renderWasConcurrent = !1;\n        continue;\n      }\n      if (2 === exitStatus) {\n        renderWasConcurrent = lanes;\n        if (root$jscomp$0.errorRecoveryDisabledLanes & renderWasConcurrent)\n          var JSCompiler_inline_result = 0;\n        else\n          (JSCompiler_inline_result = root$jscomp$0.pendingLanes & -536870913),\n            (JSCompiler_inline_result =\n              0 !== JSCompiler_inline_result\n                ? JSCompiler_inline_result\n                : JSCompiler_inline_result & 536870912\n                  ? 536870912\n                  : 0);\n        if (0 !== JSCompiler_inline_result) {\n          lanes = JSCompiler_inline_result;\n          a: {\n            var root = root$jscomp$0;\n            exitStatus = workInProgressRootConcurrentErrors;\n            var wasRootDehydrated = root.current.memoizedState.isDehydrated;\n            wasRootDehydrated &&\n              (prepareFreshStack(root, JSCompiler_inline_result).flags |= 256);\n            JSCompiler_inline_result = renderRootSync(\n              root,\n              JSCompiler_inline_result,\n              !1\n            );\n            if (2 !== JSCompiler_inline_result) {\n              if (\n                workInProgressRootDidAttachPingListener &&\n                !wasRootDehydrated\n              ) {\n                root.errorRecoveryDisabledLanes |= renderWasConcurrent;\n                workInProgressRootInterleavedUpdatedLanes |=\n                  renderWasConcurrent;\n                exitStatus = 4;\n                break a;\n              }\n              renderWasConcurrent = workInProgressRootRecoverableErrors;\n              workInProgressRootRecoverableErrors = exitStatus;\n              null !== renderWasConcurrent &&\n                (null === workInProgressRootRecoverableErrors\n                  ? (workInProgressRootRecoverableErrors = renderWasConcurrent)\n                  : workInProgressRootRecoverableErrors.push.apply(\n                      workInProgressRootRecoverableErrors,\n                      renderWasConcurrent\n                    ));\n            }\n            exitStatus = JSCompiler_inline_result;\n          }\n          renderWasConcurrent = !1;\n          if (2 !== exitStatus) continue;\n        }\n      }\n      if (1 === exitStatus) {\n        prepareFreshStack(root$jscomp$0, 0);\n        markRootSuspended(root$jscomp$0, lanes, 0, !0);\n        break;\n      }\n      a: {\n        shouldTimeSlice = root$jscomp$0;\n        renderWasConcurrent = exitStatus;\n        switch (renderWasConcurrent) {\n          case 0:\n          case 1:\n            throw Error(formatProdErrorMessage(345));\n          case 4:\n            if ((lanes & 4194048) !== lanes) break;\n          case 6:\n            markRootSuspended(\n              shouldTimeSlice,\n              lanes,\n              workInProgressDeferredLane,\n              !workInProgressRootDidSkipSuspendedSiblings\n            );\n            break a;\n          case 2:\n            workInProgressRootRecoverableErrors = null;\n            break;\n          case 3:\n          case 5:\n            break;\n          default:\n            throw Error(formatProdErrorMessage(329));\n        }\n        if (\n          (lanes & 62914560) === lanes &&\n          ((exitStatus = globalMostRecentFallbackTime + 300 - now()),\n          10 < exitStatus)\n        ) {\n          markRootSuspended(\n            shouldTimeSlice,\n            lanes,\n            workInProgressDeferredLane,\n            !workInProgressRootDidSkipSuspendedSiblings\n          );\n          if (0 !== getNextLanes(shouldTimeSlice, 0, !0)) break a;\n          pendingEffectsLanes = lanes;\n          shouldTimeSlice.timeoutHandle = scheduleTimeout(\n            commitRootWhenReady.bind(\n              null,\n              shouldTimeSlice,\n              forceSync,\n              workInProgressRootRecoverableErrors,\n              workInProgressTransitions,\n              workInProgressRootDidIncludeRecursiveRenderUpdate,\n              lanes,\n              workInProgressDeferredLane,\n              workInProgressRootInterleavedUpdatedLanes,\n              workInProgressSuspendedRetryLanes,\n              workInProgressRootDidSkipSuspendedSiblings,\n              renderWasConcurrent,\n              \"Throttled\",\n              -0,\n              0\n            ),\n            exitStatus\n          );\n          break a;\n        }\n        commitRootWhenReady(\n          shouldTimeSlice,\n          forceSync,\n          workInProgressRootRecoverableErrors,\n          workInProgressTransitions,\n          workInProgressRootDidIncludeRecursiveRenderUpdate,\n          lanes,\n          workInProgressDeferredLane,\n          workInProgressRootInterleavedUpdatedLanes,\n          workInProgressSuspendedRetryLanes,\n          workInProgressRootDidSkipSuspendedSiblings,\n          renderWasConcurrent,\n          null,\n          -0,\n          0\n        );\n      }\n    }\n    break;\n  } while (1);\n  ensureRootIsScheduled(root$jscomp$0);\n}\nfunction commitRootWhenReady(\n  root,\n  finishedWork,\n  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  lanes,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes,\n  didSkipSuspendedSiblings,\n  exitStatus,\n  suspendedCommitReason,\n  completedRenderStartTime,\n  completedRenderEndTime\n) {\n  root.timeoutHandle = -1;\n  suspendedCommitReason = finishedWork.subtreeFlags;\n  if (\n    suspendedCommitReason & 8192 ||\n    16785408 === (suspendedCommitReason & 16785408)\n  ) {\n    suspendedCommitReason = {\n      stylesheets: null,\n      count: 0,\n      imgCount: 0,\n      imgBytes: 0,\n      suspenseyImages: [],\n      waitingForImages: !0,\n      waitingForViewTransition: !1,\n      unsuspend: noop$1\n    };\n    accumulateSuspenseyCommitOnFiber(\n      finishedWork,\n      lanes,\n      suspendedCommitReason\n    );\n    var timeoutOffset =\n      (lanes & 62914560) === lanes\n        ? globalMostRecentFallbackTime - now()\n        : (lanes & 4194048) === lanes\n          ? globalMostRecentTransitionTime - now()\n          : 0;\n    timeoutOffset = waitForCommitToBeReady(\n      suspendedCommitReason,\n      timeoutOffset\n    );\n    if (null !== timeoutOffset) {\n      pendingEffectsLanes = lanes;\n      root.cancelPendingCommit = timeoutOffset(\n        commitRoot.bind(\n          null,\n          root,\n          finishedWork,\n          lanes,\n          recoverableErrors,\n          transitions,\n          didIncludeRenderPhaseUpdate,\n          spawnedLane,\n          updatedLanes,\n          suspendedRetryLanes,\n          exitStatus,\n          suspendedCommitReason,\n          null,\n          completedRenderStartTime,\n          completedRenderEndTime\n        )\n      );\n      markRootSuspended(root, lanes, spawnedLane, !didSkipSuspendedSiblings);\n      return;\n    }\n  }\n  commitRoot(\n    root,\n    finishedWork,\n    lanes,\n    recoverableErrors,\n    transitions,\n    didIncludeRenderPhaseUpdate,\n    spawnedLane,\n    updatedLanes,\n    suspendedRetryLanes\n  );\n}\nfunction isRenderConsistentWithExternalStores(finishedWork) {\n  for (var node = finishedWork; ; ) {\n    var tag = node.tag;\n    if (\n      (0 === tag || 11 === tag || 15 === tag) &&\n      node.flags & 16384 &&\n      ((tag = node.updateQueue),\n      null !== tag && ((tag = tag.stores), null !== tag))\n    )\n      for (var i = 0; i < tag.length; i++) {\n        var check = tag[i],\n          getSnapshot = check.getSnapshot;\n        check = check.value;\n        try {\n          if (!objectIs(getSnapshot(), check)) return !1;\n        } catch (error) {\n          return !1;\n        }\n      }\n    tag = node.child;\n    if (node.subtreeFlags & 16384 && null !== tag)\n      (tag.return = node), (node = tag);\n    else {\n      if (node === finishedWork) break;\n      for (; null === node.sibling; ) {\n        if (null === node.return || node.return === finishedWork) return !0;\n        node = node.return;\n      }\n      node.sibling.return = node.return;\n      node = node.sibling;\n    }\n  }\n  return !0;\n}\nfunction markRootSuspended(\n  root,\n  suspendedLanes,\n  spawnedLane,\n  didAttemptEntireTree\n) {\n  suspendedLanes &= ~workInProgressRootPingedLanes;\n  suspendedLanes &= ~workInProgressRootInterleavedUpdatedLanes;\n  root.suspendedLanes |= suspendedLanes;\n  root.pingedLanes &= ~suspendedLanes;\n  didAttemptEntireTree && (root.warmLanes |= suspendedLanes);\n  didAttemptEntireTree = root.expirationTimes;\n  for (var lanes = suspendedLanes; 0 < lanes; ) {\n    var index$6 = 31 - clz32(lanes),\n      lane = 1 << index$6;\n    didAttemptEntireTree[index$6] = -1;\n    lanes &= ~lane;\n  }\n  0 !== spawnedLane &&\n    markSpawnedDeferredLane(root, spawnedLane, suspendedLanes);\n}\nfunction flushSyncWork$1() {\n  return 0 === (executionContext & 6)\n    ? (flushSyncWorkAcrossRoots_impl(0, !1), !1)\n    : !0;\n}\nfunction resetWorkInProgressStack() {\n  if (null !== workInProgress) {\n    if (0 === workInProgressSuspendedReason)\n      var interruptedWork = workInProgress.return;\n    else\n      (interruptedWork = workInProgress),\n        (lastContextDependency = currentlyRenderingFiber$1 = null),\n        resetHooksOnUnwind(interruptedWork),\n        (thenableState$1 = null),\n        (thenableIndexCounter$1 = 0),\n        (interruptedWork = workInProgress);\n    for (; null !== interruptedWork; )\n      unwindInterruptedWork(interruptedWork.alternate, interruptedWork),\n        (interruptedWork = interruptedWork.return);\n    workInProgress = null;\n  }\n}\nfunction prepareFreshStack(root, lanes) {\n  var timeoutHandle = root.timeoutHandle;\n  -1 !== timeoutHandle &&\n    ((root.timeoutHandle = -1), cancelTimeout(timeoutHandle));\n  timeoutHandle = root.cancelPendingCommit;\n  null !== timeoutHandle &&\n    ((root.cancelPendingCommit = null), timeoutHandle());\n  pendingEffectsLanes = 0;\n  resetWorkInProgressStack();\n  workInProgressRoot = root;\n  workInProgress = timeoutHandle = createWorkInProgress(root.current, null);\n  workInProgressRootRenderLanes = lanes;\n  workInProgressSuspendedReason = 0;\n  workInProgressThrownValue = null;\n  workInProgressRootDidSkipSuspendedSiblings = !1;\n  workInProgressRootIsPrerendering = checkIfRootIsPrerendering(root, lanes);\n  workInProgressRootDidAttachPingListener = !1;\n  workInProgressSuspendedRetryLanes =\n    workInProgressDeferredLane =\n    workInProgressRootPingedLanes =\n    workInProgressRootInterleavedUpdatedLanes =\n    workInProgressRootSkippedLanes =\n    workInProgressRootExitStatus =\n      0;\n  workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors =\n    null;\n  workInProgressRootDidIncludeRecursiveRenderUpdate = !1;\n  0 !== (lanes & 8) && (lanes |= lanes & 32);\n  var allEntangledLanes = root.entangledLanes;\n  if (0 !== allEntangledLanes)\n    for (\n      root = root.entanglements, allEntangledLanes &= lanes;\n      0 < allEntangledLanes;\n\n    ) {\n      var index$4 = 31 - clz32(allEntangledLanes),\n        lane = 1 << index$4;\n      lanes |= root[index$4];\n      allEntangledLanes &= ~lane;\n    }\n  entangledRenderLanes = lanes;\n  finishQueueingConcurrentUpdates();\n  return timeoutHandle;\n}\nfunction handleThrow(root, thrownValue) {\n  currentlyRenderingFiber = null;\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  thrownValue === SuspenseException || thrownValue === SuspenseActionException\n    ? ((thrownValue = getSuspendedThenable()),\n      (workInProgressSuspendedReason = 3))\n    : thrownValue === SuspenseyCommitException\n      ? ((thrownValue = getSuspendedThenable()),\n        (workInProgressSuspendedReason = 4))\n      : (workInProgressSuspendedReason =\n          thrownValue === SelectiveHydrationException\n            ? 8\n            : null !== thrownValue &&\n                \"object\" === typeof thrownValue &&\n                \"function\" === typeof thrownValue.then\n              ? 6\n              : 1);\n  workInProgressThrownValue = thrownValue;\n  null === workInProgress &&\n    ((workInProgressRootExitStatus = 1),\n    logUncaughtError(\n      root,\n      createCapturedValueAtFiber(thrownValue, root.current)\n    ));\n}\nfunction shouldRemainOnPreviousScreen() {\n  var handler = suspenseHandlerStackCursor.current;\n  return null === handler\n    ? !0\n    : (workInProgressRootRenderLanes & 4194048) ===\n        workInProgressRootRenderLanes\n      ? null === shellBoundary\n        ? !0\n        : !1\n      : (workInProgressRootRenderLanes & 62914560) ===\n            workInProgressRootRenderLanes ||\n          0 !== (workInProgressRootRenderLanes & 536870912)\n        ? handler === shellBoundary\n        : !1;\n}\nfunction pushDispatcher() {\n  var prevDispatcher = ReactSharedInternals.H;\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  return null === prevDispatcher ? ContextOnlyDispatcher : prevDispatcher;\n}\nfunction pushAsyncDispatcher() {\n  var prevAsyncDispatcher = ReactSharedInternals.A;\n  ReactSharedInternals.A = DefaultAsyncDispatcher;\n  return prevAsyncDispatcher;\n}\nfunction renderDidSuspendDelayIfPossible() {\n  workInProgressRootExitStatus = 4;\n  workInProgressRootDidSkipSuspendedSiblings ||\n    ((workInProgressRootRenderLanes & 4194048) !==\n      workInProgressRootRenderLanes &&\n      null !== suspenseHandlerStackCursor.current) ||\n    (workInProgressRootIsPrerendering = !0);\n  (0 === (workInProgressRootSkippedLanes & 134217727) &&\n    0 === (workInProgressRootInterleavedUpdatedLanes & 134217727)) ||\n    null === workInProgressRoot ||\n    markRootSuspended(\n      workInProgressRoot,\n      workInProgressRootRenderLanes,\n      workInProgressDeferredLane,\n      !1\n    );\n}\nfunction renderRootSync(root, lanes, shouldYieldForPrerendering) {\n  var prevExecutionContext = executionContext;\n  executionContext |= 2;\n  var prevDispatcher = pushDispatcher(),\n    prevAsyncDispatcher = pushAsyncDispatcher();\n  if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes)\n    (workInProgressTransitions = null), prepareFreshStack(root, lanes);\n  lanes = !1;\n  var exitStatus = workInProgressRootExitStatus;\n  a: do\n    try {\n      if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n        var unitOfWork = workInProgress,\n          thrownValue = workInProgressThrownValue;\n        switch (workInProgressSuspendedReason) {\n          case 8:\n            resetWorkInProgressStack();\n            exitStatus = 6;\n            break a;\n          case 3:\n          case 2:\n          case 9:\n          case 6:\n            null === suspenseHandlerStackCursor.current && (lanes = !0);\n            var reason = workInProgressSuspendedReason;\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n            if (\n              shouldYieldForPrerendering &&\n              workInProgressRootIsPrerendering\n            ) {\n              exitStatus = 0;\n              break a;\n            }\n            break;\n          default:\n            (reason = workInProgressSuspendedReason),\n              (workInProgressSuspendedReason = 0),\n              (workInProgressThrownValue = null),\n              throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n        }\n      }\n      workLoopSync();\n      exitStatus = workInProgressRootExitStatus;\n      break;\n    } catch (thrownValue$165) {\n      handleThrow(root, thrownValue$165);\n    }\n  while (1);\n  lanes && root.shellSuspendCounter++;\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  executionContext = prevExecutionContext;\n  ReactSharedInternals.H = prevDispatcher;\n  ReactSharedInternals.A = prevAsyncDispatcher;\n  null === workInProgress &&\n    ((workInProgressRoot = null),\n    (workInProgressRootRenderLanes = 0),\n    finishQueueingConcurrentUpdates());\n  return exitStatus;\n}\nfunction workLoopSync() {\n  for (; null !== workInProgress; ) performUnitOfWork(workInProgress);\n}\nfunction renderRootConcurrent(root, lanes) {\n  var prevExecutionContext = executionContext;\n  executionContext |= 2;\n  var prevDispatcher = pushDispatcher(),\n    prevAsyncDispatcher = pushAsyncDispatcher();\n  workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes\n    ? ((workInProgressTransitions = null),\n      (workInProgressRootRenderTargetTime = now() + 500),\n      prepareFreshStack(root, lanes))\n    : (workInProgressRootIsPrerendering = checkIfRootIsPrerendering(\n        root,\n        lanes\n      ));\n  a: do\n    try {\n      if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n        lanes = workInProgress;\n        var thrownValue = workInProgressThrownValue;\n        b: switch (workInProgressSuspendedReason) {\n          case 1:\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 1);\n            break;\n          case 2:\n          case 9:\n            if (isThenableResolved(thrownValue)) {\n              workInProgressSuspendedReason = 0;\n              workInProgressThrownValue = null;\n              replaySuspendedUnitOfWork(lanes);\n              break;\n            }\n            lanes = function () {\n              (2 !== workInProgressSuspendedReason &&\n                9 !== workInProgressSuspendedReason) ||\n                workInProgressRoot !== root ||\n                (workInProgressSuspendedReason = 7);\n              ensureRootIsScheduled(root);\n            };\n            thrownValue.then(lanes, lanes);\n            break a;\n          case 3:\n            workInProgressSuspendedReason = 7;\n            break a;\n          case 4:\n            workInProgressSuspendedReason = 5;\n            break a;\n          case 7:\n            isThenableResolved(thrownValue)\n              ? ((workInProgressSuspendedReason = 0),\n                (workInProgressThrownValue = null),\n                replaySuspendedUnitOfWork(lanes))\n              : ((workInProgressSuspendedReason = 0),\n                (workInProgressThrownValue = null),\n                throwAndUnwindWorkLoop(root, lanes, thrownValue, 7));\n            break;\n          case 5:\n            var resource = null;\n            switch (workInProgress.tag) {\n              case 26:\n                resource = workInProgress.memoizedState;\n              case 5:\n              case 27:\n                var hostFiber = workInProgress;\n                if (\n                  resource\n                    ? preloadResource(resource)\n                    : hostFiber.stateNode.complete\n                ) {\n                  workInProgressSuspendedReason = 0;\n                  workInProgressThrownValue = null;\n                  var sibling = hostFiber.sibling;\n                  if (null !== sibling) workInProgress = sibling;\n                  else {\n                    var returnFiber = hostFiber.return;\n                    null !== returnFiber\n                      ? ((workInProgress = returnFiber),\n                        completeUnitOfWork(returnFiber))\n                      : (workInProgress = null);\n                  }\n                  break b;\n                }\n            }\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 5);\n            break;\n          case 6:\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 6);\n            break;\n          case 8:\n            resetWorkInProgressStack();\n            workInProgressRootExitStatus = 6;\n            break a;\n          default:\n            throw Error(formatProdErrorMessage(462));\n        }\n      }\n      workLoopConcurrentByScheduler();\n      break;\n    } catch (thrownValue$167) {\n      handleThrow(root, thrownValue$167);\n    }\n  while (1);\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  ReactSharedInternals.H = prevDispatcher;\n  ReactSharedInternals.A = prevAsyncDispatcher;\n  executionContext = prevExecutionContext;\n  if (null !== workInProgress) return 0;\n  workInProgressRoot = null;\n  workInProgressRootRenderLanes = 0;\n  finishQueueingConcurrentUpdates();\n  return workInProgressRootExitStatus;\n}\nfunction workLoopConcurrentByScheduler() {\n  for (; null !== workInProgress && !shouldYield(); )\n    performUnitOfWork(workInProgress);\n}\nfunction performUnitOfWork(unitOfWork) {\n  var next = beginWork(unitOfWork.alternate, unitOfWork, entangledRenderLanes);\n  unitOfWork.memoizedProps = unitOfWork.pendingProps;\n  null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction replaySuspendedUnitOfWork(unitOfWork) {\n  var next = unitOfWork;\n  var current = next.alternate;\n  switch (next.tag) {\n    case 15:\n    case 0:\n      next = replayFunctionComponent(\n        current,\n        next,\n        next.pendingProps,\n        next.type,\n        void 0,\n        workInProgressRootRenderLanes\n      );\n      break;\n    case 11:\n      next = replayFunctionComponent(\n        current,\n        next,\n        next.pendingProps,\n        next.type.render,\n        next.ref,\n        workInProgressRootRenderLanes\n      );\n      break;\n    case 5:\n      resetHooksOnUnwind(next);\n    default:\n      unwindInterruptedWork(current, next),\n        (next = workInProgress =\n          resetWorkInProgress(next, entangledRenderLanes)),\n        (next = beginWork(current, next, entangledRenderLanes));\n  }\n  unitOfWork.memoizedProps = unitOfWork.pendingProps;\n  null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction throwAndUnwindWorkLoop(\n  root,\n  unitOfWork,\n  thrownValue,\n  suspendedReason\n) {\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  resetHooksOnUnwind(unitOfWork);\n  thenableState$1 = null;\n  thenableIndexCounter$1 = 0;\n  var returnFiber = unitOfWork.return;\n  try {\n    if (\n      throwException(\n        root,\n        returnFiber,\n        unitOfWork,\n        thrownValue,\n        workInProgressRootRenderLanes\n      )\n    ) {\n      workInProgressRootExitStatus = 1;\n      logUncaughtError(\n        root,\n        createCapturedValueAtFiber(thrownValue, root.current)\n      );\n      workInProgress = null;\n      return;\n    }\n  } catch (error) {\n    if (null !== returnFiber) throw ((workInProgress = returnFiber), error);\n    workInProgressRootExitStatus = 1;\n    logUncaughtError(\n      root,\n      createCapturedValueAtFiber(thrownValue, root.current)\n    );\n    workInProgress = null;\n    return;\n  }\n  if (unitOfWork.flags & 32768) {\n    if (isHydrating || 1 === suspendedReason) root = !0;\n    else if (\n      workInProgressRootIsPrerendering ||\n      0 !== (workInProgressRootRenderLanes & 536870912)\n    )\n      root = !1;\n    else if (\n      ((workInProgressRootDidSkipSuspendedSiblings = root = !0),\n      2 === suspendedReason ||\n        9 === suspendedReason ||\n        3 === suspendedReason ||\n        6 === suspendedReason)\n    )\n      (suspendedReason = suspenseHandlerStackCursor.current),\n        null !== suspendedReason &&\n          13 === suspendedReason.tag &&\n          (suspendedReason.flags |= 16384);\n    unwindUnitOfWork(unitOfWork, root);\n  } else completeUnitOfWork(unitOfWork);\n}\nfunction completeUnitOfWork(unitOfWork) {\n  var completedWork = unitOfWork;\n  do {\n    if (0 !== (completedWork.flags & 32768)) {\n      unwindUnitOfWork(\n        completedWork,\n        workInProgressRootDidSkipSuspendedSiblings\n      );\n      return;\n    }\n    unitOfWork = completedWork.return;\n    var next = completeWork(\n      completedWork.alternate,\n      completedWork,\n      entangledRenderLanes\n    );\n    if (null !== next) {\n      workInProgress = next;\n      return;\n    }\n    completedWork = completedWork.sibling;\n    if (null !== completedWork) {\n      workInProgress = completedWork;\n      return;\n    }\n    workInProgress = completedWork = unitOfWork;\n  } while (null !== completedWork);\n  0 === workInProgressRootExitStatus && (workInProgressRootExitStatus = 5);\n}\nfunction unwindUnitOfWork(unitOfWork, skipSiblings) {\n  do {\n    var next = unwindWork(unitOfWork.alternate, unitOfWork);\n    if (null !== next) {\n      next.flags &= 32767;\n      workInProgress = next;\n      return;\n    }\n    next = unitOfWork.return;\n    null !== next &&\n      ((next.flags |= 32768), (next.subtreeFlags = 0), (next.deletions = null));\n    if (\n      !skipSiblings &&\n      ((unitOfWork = unitOfWork.sibling), null !== unitOfWork)\n    ) {\n      workInProgress = unitOfWork;\n      return;\n    }\n    workInProgress = unitOfWork = next;\n  } while (null !== unitOfWork);\n  workInProgressRootExitStatus = 6;\n  workInProgress = null;\n}\nfunction commitRoot(\n  root,\n  finishedWork,\n  lanes,\n  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes\n) {\n  root.cancelPendingCommit = null;\n  do flushPendingEffects();\n  while (0 !== pendingEffectsStatus);\n  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n  if (null !== finishedWork) {\n    if (finishedWork === root.current) throw Error(formatProdErrorMessage(177));\n    didIncludeRenderPhaseUpdate = finishedWork.lanes | finishedWork.childLanes;\n    didIncludeRenderPhaseUpdate |= concurrentlyUpdatedLanes;\n    markRootFinished(\n      root,\n      lanes,\n      didIncludeRenderPhaseUpdate,\n      spawnedLane,\n      updatedLanes,\n      suspendedRetryLanes\n    );\n    root === workInProgressRoot &&\n      ((workInProgress = workInProgressRoot = null),\n      (workInProgressRootRenderLanes = 0));\n    pendingFinishedWork = finishedWork;\n    pendingEffectsRoot = root;\n    pendingEffectsLanes = lanes;\n    pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate;\n    pendingPassiveTransitions = transitions;\n    pendingRecoverableErrors = recoverableErrors;\n    0 !== (finishedWork.subtreeFlags & 10256) ||\n    0 !== (finishedWork.flags & 10256)\n      ? ((root.callbackNode = null),\n        (root.callbackPriority = 0),\n        scheduleCallback$1(NormalPriority$1, function () {\n          flushPassiveEffects();\n          return null;\n        }))\n      : ((root.callbackNode = null), (root.callbackPriority = 0));\n    recoverableErrors = 0 !== (finishedWork.flags & 13878);\n    if (0 !== (finishedWork.subtreeFlags & 13878) || recoverableErrors) {\n      recoverableErrors = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      transitions = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      spawnedLane = executionContext;\n      executionContext |= 4;\n      try {\n        commitBeforeMutationEffects(root, finishedWork, lanes);\n      } finally {\n        (executionContext = spawnedLane),\n          (ReactDOMSharedInternals.p = transitions),\n          (ReactSharedInternals.T = recoverableErrors);\n      }\n    }\n    pendingEffectsStatus = 1;\n    flushMutationEffects();\n    flushLayoutEffects();\n    flushSpawnedWork();\n  }\n}\nfunction flushMutationEffects() {\n  if (1 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      rootMutationHasEffect = 0 !== (finishedWork.flags & 13878);\n    if (0 !== (finishedWork.subtreeFlags & 13878) || rootMutationHasEffect) {\n      rootMutationHasEffect = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      var previousPriority = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      var prevExecutionContext = executionContext;\n      executionContext |= 4;\n      try {\n        commitMutationEffectsOnFiber(finishedWork, root);\n        var priorSelectionInformation = selectionInformation,\n          curFocusedElem = getActiveElementDeep(root.containerInfo),\n          priorFocusedElem = priorSelectionInformation.focusedElem,\n          priorSelectionRange = priorSelectionInformation.selectionRange;\n        if (\n          curFocusedElem !== priorFocusedElem &&\n          priorFocusedElem &&\n          priorFocusedElem.ownerDocument &&\n          containsNode(\n            priorFocusedElem.ownerDocument.documentElement,\n            priorFocusedElem\n          )\n        ) {\n          if (\n            null !== priorSelectionRange &&\n            hasSelectionCapabilities(priorFocusedElem)\n          ) {\n            var start = priorSelectionRange.start,\n              end = priorSelectionRange.end;\n            void 0 === end && (end = start);\n            if (\"selectionStart\" in priorFocusedElem)\n              (priorFocusedElem.selectionStart = start),\n                (priorFocusedElem.selectionEnd = Math.min(\n                  end,\n                  priorFocusedElem.value.length\n                ));\n            else {\n              var doc = priorFocusedElem.ownerDocument || document,\n                win = (doc && doc.defaultView) || window;\n              if (win.getSelection) {\n                var selection = win.getSelection(),\n                  length = priorFocusedElem.textContent.length,\n                  start$jscomp$0 = Math.min(priorSelectionRange.start, length),\n                  end$jscomp$0 =\n                    void 0 === priorSelectionRange.end\n                      ? start$jscomp$0\n                      : Math.min(priorSelectionRange.end, length);\n                !selection.extend &&\n                  start$jscomp$0 > end$jscomp$0 &&\n                  ((curFocusedElem = end$jscomp$0),\n                  (end$jscomp$0 = start$jscomp$0),\n                  (start$jscomp$0 = curFocusedElem));\n                var startMarker = getNodeForCharacterOffset(\n                    priorFocusedElem,\n                    start$jscomp$0\n                  ),\n                  endMarker = getNodeForCharacterOffset(\n                    priorFocusedElem,\n                    end$jscomp$0\n                  );\n                if (\n                  startMarker &&\n                  endMarker &&\n                  (1 !== selection.rangeCount ||\n                    selection.anchorNode !== startMarker.node ||\n                    selection.anchorOffset !== startMarker.offset ||\n                    selection.focusNode !== endMarker.node ||\n                    selection.focusOffset !== endMarker.offset)\n                ) {\n                  var range = doc.createRange();\n                  range.setStart(startMarker.node, startMarker.offset);\n                  selection.removeAllRanges();\n                  start$jscomp$0 > end$jscomp$0\n                    ? (selection.addRange(range),\n                      selection.extend(endMarker.node, endMarker.offset))\n                    : (range.setEnd(endMarker.node, endMarker.offset),\n                      selection.addRange(range));\n                }\n              }\n            }\n          }\n          doc = [];\n          for (\n            selection = priorFocusedElem;\n            (selection = selection.parentNode);\n\n          )\n            1 === selection.nodeType &&\n              doc.push({\n                element: selection,\n                left: selection.scrollLeft,\n                top: selection.scrollTop\n              });\n          \"function\" === typeof priorFocusedElem.focus &&\n            priorFocusedElem.focus();\n          for (\n            priorFocusedElem = 0;\n            priorFocusedElem < doc.length;\n            priorFocusedElem++\n          ) {\n            var info = doc[priorFocusedElem];\n            info.element.scrollLeft = info.left;\n            info.element.scrollTop = info.top;\n          }\n        }\n        _enabled = !!eventsEnabled;\n        selectionInformation = eventsEnabled = null;\n      } finally {\n        (executionContext = prevExecutionContext),\n          (ReactDOMSharedInternals.p = previousPriority),\n          (ReactSharedInternals.T = rootMutationHasEffect);\n      }\n    }\n    root.current = finishedWork;\n    pendingEffectsStatus = 2;\n  }\n}\nfunction flushLayoutEffects() {\n  if (2 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      rootHasLayoutEffect = 0 !== (finishedWork.flags & 8772);\n    if (0 !== (finishedWork.subtreeFlags & 8772) || rootHasLayoutEffect) {\n      rootHasLayoutEffect = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      var previousPriority = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      var prevExecutionContext = executionContext;\n      executionContext |= 4;\n      try {\n        commitLayoutEffectOnFiber(root, finishedWork.alternate, finishedWork);\n      } finally {\n        (executionContext = prevExecutionContext),\n          (ReactDOMSharedInternals.p = previousPriority),\n          (ReactSharedInternals.T = rootHasLayoutEffect);\n      }\n    }\n    pendingEffectsStatus = 3;\n  }\n}\nfunction flushSpawnedWork() {\n  if (4 === pendingEffectsStatus || 3 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    requestPaint();\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      lanes = pendingEffectsLanes,\n      recoverableErrors = pendingRecoverableErrors;\n    0 !== (finishedWork.subtreeFlags & 10256) ||\n    0 !== (finishedWork.flags & 10256)\n      ? (pendingEffectsStatus = 5)\n      : ((pendingEffectsStatus = 0),\n        (pendingFinishedWork = pendingEffectsRoot = null),\n        releaseRootPooledCache(root, root.pendingLanes));\n    var remainingLanes = root.pendingLanes;\n    0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);\n    lanesToEventPriority(lanes);\n    finishedWork = finishedWork.stateNode;\n    if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberRoot)\n      try {\n        injectedHook.onCommitFiberRoot(\n          rendererID,\n          finishedWork,\n          void 0,\n          128 === (finishedWork.current.flags & 128)\n        );\n      } catch (err) {}\n    if (null !== recoverableErrors) {\n      finishedWork = ReactSharedInternals.T;\n      remainingLanes = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      ReactSharedInternals.T = null;\n      try {\n        for (\n          var onRecoverableError = root.onRecoverableError, i = 0;\n          i < recoverableErrors.length;\n          i++\n        ) {\n          var recoverableError = recoverableErrors[i];\n          onRecoverableError(recoverableError.value, {\n            componentStack: recoverableError.stack\n          });\n        }\n      } finally {\n        (ReactSharedInternals.T = finishedWork),\n          (ReactDOMSharedInternals.p = remainingLanes);\n      }\n    }\n    0 !== (pendingEffectsLanes & 3) && flushPendingEffects();\n    ensureRootIsScheduled(root);\n    remainingLanes = root.pendingLanes;\n    0 !== (lanes & 261930) && 0 !== (remainingLanes & 42)\n      ? root === rootWithNestedUpdates\n        ? nestedUpdateCount++\n        : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root))\n      : (nestedUpdateCount = 0);\n    flushSyncWorkAcrossRoots_impl(0, !1);\n  }\n}\nfunction releaseRootPooledCache(root, remainingLanes) {\n  0 === (root.pooledCacheLanes &= remainingLanes) &&\n    ((remainingLanes = root.pooledCache),\n    null != remainingLanes &&\n      ((root.pooledCache = null), releaseCache(remainingLanes)));\n}\nfunction flushPendingEffects() {\n  flushMutationEffects();\n  flushLayoutEffects();\n  flushSpawnedWork();\n  return flushPassiveEffects();\n}\nfunction flushPassiveEffects() {\n  if (5 !== pendingEffectsStatus) return !1;\n  var root = pendingEffectsRoot,\n    remainingLanes = pendingEffectsRemainingLanes;\n  pendingEffectsRemainingLanes = 0;\n  var renderPriority = lanesToEventPriority(pendingEffectsLanes),\n    prevTransition = ReactSharedInternals.T,\n    previousPriority = ReactDOMSharedInternals.p;\n  try {\n    ReactDOMSharedInternals.p = 32 > renderPriority ? 32 : renderPriority;\n    ReactSharedInternals.T = null;\n    renderPriority = pendingPassiveTransitions;\n    pendingPassiveTransitions = null;\n    var root$jscomp$0 = pendingEffectsRoot,\n      lanes = pendingEffectsLanes;\n    pendingEffectsStatus = 0;\n    pendingFinishedWork = pendingEffectsRoot = null;\n    pendingEffectsLanes = 0;\n    if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(331));\n    var prevExecutionContext = executionContext;\n    executionContext |= 4;\n    commitPassiveUnmountOnFiber(root$jscomp$0.current);\n    commitPassiveMountOnFiber(\n      root$jscomp$0,\n      root$jscomp$0.current,\n      lanes,\n      renderPriority\n    );\n    executionContext = prevExecutionContext;\n    flushSyncWorkAcrossRoots_impl(0, !1);\n    if (\n      injectedHook &&\n      \"function\" === typeof injectedHook.onPostCommitFiberRoot\n    )\n      try {\n        injectedHook.onPostCommitFiberRoot(rendererID, root$jscomp$0);\n      } catch (err) {}\n    return !0;\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition),\n      releaseRootPooledCache(root, remainingLanes);\n  }\n}\nfunction captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n  sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n  sourceFiber = createRootErrorUpdate(rootFiber.stateNode, sourceFiber, 2);\n  rootFiber = enqueueUpdate(rootFiber, sourceFiber, 2);\n  null !== rootFiber &&\n    (markRootUpdated$1(rootFiber, 2), ensureRootIsScheduled(rootFiber));\n}\nfunction captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error) {\n  if (3 === sourceFiber.tag)\n    captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);\n  else\n    for (; null !== nearestMountedAncestor; ) {\n      if (3 === nearestMountedAncestor.tag) {\n        captureCommitPhaseErrorOnRoot(\n          nearestMountedAncestor,\n          sourceFiber,\n          error\n        );\n        break;\n      } else if (1 === nearestMountedAncestor.tag) {\n        var instance = nearestMountedAncestor.stateNode;\n        if (\n          \"function\" ===\n            typeof nearestMountedAncestor.type.getDerivedStateFromError ||\n          (\"function\" === typeof instance.componentDidCatch &&\n            (null === legacyErrorBoundariesThatAlreadyFailed ||\n              !legacyErrorBoundariesThatAlreadyFailed.has(instance)))\n        ) {\n          sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n          error = createClassErrorUpdate(2);\n          instance = enqueueUpdate(nearestMountedAncestor, error, 2);\n          null !== instance &&\n            (initializeClassErrorUpdate(\n              error,\n              instance,\n              nearestMountedAncestor,\n              sourceFiber\n            ),\n            markRootUpdated$1(instance, 2),\n            ensureRootIsScheduled(instance));\n          break;\n        }\n      }\n      nearestMountedAncestor = nearestMountedAncestor.return;\n    }\n}\nfunction attachPingListener(root, wakeable, lanes) {\n  var pingCache = root.pingCache;\n  if (null === pingCache) {\n    pingCache = root.pingCache = new PossiblyWeakMap();\n    var threadIDs = new Set();\n    pingCache.set(wakeable, threadIDs);\n  } else\n    (threadIDs = pingCache.get(wakeable)),\n      void 0 === threadIDs &&\n        ((threadIDs = new Set()), pingCache.set(wakeable, threadIDs));\n  threadIDs.has(lanes) ||\n    ((workInProgressRootDidAttachPingListener = !0),\n    threadIDs.add(lanes),\n    (root = pingSuspendedRoot.bind(null, root, wakeable, lanes)),\n    wakeable.then(root, root));\n}\nfunction pingSuspendedRoot(root, wakeable, pingedLanes) {\n  var pingCache = root.pingCache;\n  null !== pingCache && pingCache.delete(wakeable);\n  root.pingedLanes |= root.suspendedLanes & pingedLanes;\n  root.warmLanes &= ~pingedLanes;\n  workInProgressRoot === root &&\n    (workInProgressRootRenderLanes & pingedLanes) === pingedLanes &&\n    (4 === workInProgressRootExitStatus ||\n    (3 === workInProgressRootExitStatus &&\n      (workInProgressRootRenderLanes & 62914560) ===\n        workInProgressRootRenderLanes &&\n      300 > now() - globalMostRecentFallbackTime)\n      ? 0 === (executionContext & 2) && prepareFreshStack(root, 0)\n      : (workInProgressRootPingedLanes |= pingedLanes),\n    workInProgressSuspendedRetryLanes === workInProgressRootRenderLanes &&\n      (workInProgressSuspendedRetryLanes = 0));\n  ensureRootIsScheduled(root);\n}\nfunction retryTimedOutBoundary(boundaryFiber, retryLane) {\n  0 === retryLane && (retryLane = claimNextRetryLane());\n  boundaryFiber = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);\n  null !== boundaryFiber &&\n    (markRootUpdated$1(boundaryFiber, retryLane),\n    ensureRootIsScheduled(boundaryFiber));\n}\nfunction retryDehydratedSuspenseBoundary(boundaryFiber) {\n  var suspenseState = boundaryFiber.memoizedState,\n    retryLane = 0;\n  null !== suspenseState && (retryLane = suspenseState.retryLane);\n  retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction resolveRetryWakeable(boundaryFiber, wakeable) {\n  var retryLane = 0;\n  switch (boundaryFiber.tag) {\n    case 31:\n    case 13:\n      var retryCache = boundaryFiber.stateNode;\n      var suspenseState = boundaryFiber.memoizedState;\n      null !== suspenseState && (retryLane = suspenseState.retryLane);\n      break;\n    case 19:\n      retryCache = boundaryFiber.stateNode;\n      break;\n    case 22:\n      retryCache = boundaryFiber.stateNode._retryCache;\n      break;\n    default:\n      throw Error(formatProdErrorMessage(314));\n  }\n  null !== retryCache && retryCache.delete(wakeable);\n  retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction scheduleCallback$1(priorityLevel, callback) {\n  return scheduleCallback$3(priorityLevel, callback);\n}\nvar firstScheduledRoot = null,\n  lastScheduledRoot = null,\n  didScheduleMicrotask = !1,\n  mightHavePendingSyncWork = !1,\n  isFlushingWork = !1,\n  currentEventTransitionLane = 0;\nfunction ensureRootIsScheduled(root) {\n  root !== lastScheduledRoot &&\n    null === root.next &&\n    (null === lastScheduledRoot\n      ? (firstScheduledRoot = lastScheduledRoot = root)\n      : (lastScheduledRoot = lastScheduledRoot.next = root));\n  mightHavePendingSyncWork = !0;\n  didScheduleMicrotask ||\n    ((didScheduleMicrotask = !0), scheduleImmediateRootScheduleTask());\n}\nfunction flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) {\n  if (!isFlushingWork && mightHavePendingSyncWork) {\n    isFlushingWork = !0;\n    do {\n      var didPerformSomeWork = !1;\n      for (var root$170 = firstScheduledRoot; null !== root$170; ) {\n        if (!onlyLegacy)\n          if (0 !== syncTransitionLanes) {\n            var pendingLanes = root$170.pendingLanes;\n            if (0 === pendingLanes) var JSCompiler_inline_result = 0;\n            else {\n              var suspendedLanes = root$170.suspendedLanes,\n                pingedLanes = root$170.pingedLanes;\n              JSCompiler_inline_result =\n                (1 << (31 - clz32(42 | syncTransitionLanes) + 1)) - 1;\n              JSCompiler_inline_result &=\n                pendingLanes & ~(suspendedLanes & ~pingedLanes);\n              JSCompiler_inline_result =\n                JSCompiler_inline_result & 201326741\n                  ? (JSCompiler_inline_result & 201326741) | 1\n                  : JSCompiler_inline_result\n                    ? JSCompiler_inline_result | 2\n                    : 0;\n            }\n            0 !== JSCompiler_inline_result &&\n              ((didPerformSomeWork = !0),\n              performSyncWorkOnRoot(root$170, JSCompiler_inline_result));\n          } else\n            (JSCompiler_inline_result = workInProgressRootRenderLanes),\n              (JSCompiler_inline_result = getNextLanes(\n                root$170,\n                root$170 === workInProgressRoot ? JSCompiler_inline_result : 0,\n                null !== root$170.cancelPendingCommit ||\n                  -1 !== root$170.timeoutHandle\n              )),\n              0 === (JSCompiler_inline_result & 3) ||\n                checkIfRootIsPrerendering(root$170, JSCompiler_inline_result) ||\n                ((didPerformSomeWork = !0),\n                performSyncWorkOnRoot(root$170, JSCompiler_inline_result));\n        root$170 = root$170.next;\n      }\n    } while (didPerformSomeWork);\n    isFlushingWork = !1;\n  }\n}\nfunction processRootScheduleInImmediateTask() {\n  processRootScheduleInMicrotask();\n}\nfunction processRootScheduleInMicrotask() {\n  mightHavePendingSyncWork = didScheduleMicrotask = !1;\n  var syncTransitionLanes = 0;\n  0 !== currentEventTransitionLane &&\n    shouldAttemptEagerTransition() &&\n    (syncTransitionLanes = currentEventTransitionLane);\n  for (\n    var currentTime = now(), prev = null, root = firstScheduledRoot;\n    null !== root;\n\n  ) {\n    var next = root.next,\n      nextLanes = scheduleTaskForRootDuringMicrotask(root, currentTime);\n    if (0 === nextLanes)\n      (root.next = null),\n        null === prev ? (firstScheduledRoot = next) : (prev.next = next),\n        null === next && (lastScheduledRoot = prev);\n    else if (\n      ((prev = root), 0 !== syncTransitionLanes || 0 !== (nextLanes & 3))\n    )\n      mightHavePendingSyncWork = !0;\n    root = next;\n  }\n  (0 !== pendingEffectsStatus && 5 !== pendingEffectsStatus) ||\n    flushSyncWorkAcrossRoots_impl(syncTransitionLanes, !1);\n  0 !== currentEventTransitionLane && (currentEventTransitionLane = 0);\n}\nfunction scheduleTaskForRootDuringMicrotask(root, currentTime) {\n  for (\n    var suspendedLanes = root.suspendedLanes,\n      pingedLanes = root.pingedLanes,\n      expirationTimes = root.expirationTimes,\n      lanes = root.pendingLanes & -62914561;\n    0 < lanes;\n\n  ) {\n    var index$5 = 31 - clz32(lanes),\n      lane = 1 << index$5,\n      expirationTime = expirationTimes[index$5];\n    if (-1 === expirationTime) {\n      if (0 === (lane & suspendedLanes) || 0 !== (lane & pingedLanes))\n        expirationTimes[index$5] = computeExpirationTime(lane, currentTime);\n    } else expirationTime <= currentTime && (root.expiredLanes |= lane);\n    lanes &= ~lane;\n  }\n  currentTime = workInProgressRoot;\n  suspendedLanes = workInProgressRootRenderLanes;\n  suspendedLanes = getNextLanes(\n    root,\n    root === currentTime ? suspendedLanes : 0,\n    null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n  );\n  pingedLanes = root.callbackNode;\n  if (\n    0 === suspendedLanes ||\n    (root === currentTime &&\n      (2 === workInProgressSuspendedReason ||\n        9 === workInProgressSuspendedReason)) ||\n    null !== root.cancelPendingCommit\n  )\n    return (\n      null !== pingedLanes &&\n        null !== pingedLanes &&\n        cancelCallback$1(pingedLanes),\n      (root.callbackNode = null),\n      (root.callbackPriority = 0)\n    );\n  if (\n    0 === (suspendedLanes & 3) ||\n    checkIfRootIsPrerendering(root, suspendedLanes)\n  ) {\n    currentTime = suspendedLanes & -suspendedLanes;\n    if (currentTime === root.callbackPriority) return currentTime;\n    null !== pingedLanes && cancelCallback$1(pingedLanes);\n    switch (lanesToEventPriority(suspendedLanes)) {\n      case 2:\n      case 8:\n        suspendedLanes = UserBlockingPriority;\n        break;\n      case 32:\n        suspendedLanes = NormalPriority$1;\n        break;\n      case 268435456:\n        suspendedLanes = IdlePriority;\n        break;\n      default:\n        suspendedLanes = NormalPriority$1;\n    }\n    pingedLanes = performWorkOnRootViaSchedulerTask.bind(null, root);\n    suspendedLanes = scheduleCallback$3(suspendedLanes, pingedLanes);\n    root.callbackPriority = currentTime;\n    root.callbackNode = suspendedLanes;\n    return currentTime;\n  }\n  null !== pingedLanes && null !== pingedLanes && cancelCallback$1(pingedLanes);\n  root.callbackPriority = 2;\n  root.callbackNode = null;\n  return 2;\n}\nfunction performWorkOnRootViaSchedulerTask(root, didTimeout) {\n  if (0 !== pendingEffectsStatus && 5 !== pendingEffectsStatus)\n    return (root.callbackNode = null), (root.callbackPriority = 0), null;\n  var originalCallbackNode = root.callbackNode;\n  if (flushPendingEffects() && root.callbackNode !== originalCallbackNode)\n    return null;\n  var workInProgressRootRenderLanes$jscomp$0 = workInProgressRootRenderLanes;\n  workInProgressRootRenderLanes$jscomp$0 = getNextLanes(\n    root,\n    root === workInProgressRoot ? workInProgressRootRenderLanes$jscomp$0 : 0,\n    null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n  );\n  if (0 === workInProgressRootRenderLanes$jscomp$0) return null;\n  performWorkOnRoot(root, workInProgressRootRenderLanes$jscomp$0, didTimeout);\n  scheduleTaskForRootDuringMicrotask(root, now());\n  return null != root.callbackNode && root.callbackNode === originalCallbackNode\n    ? performWorkOnRootViaSchedulerTask.bind(null, root)\n    : null;\n}\nfunction performSyncWorkOnRoot(root, lanes) {\n  if (flushPendingEffects()) return null;\n  performWorkOnRoot(root, lanes, !0);\n}\nfunction scheduleImmediateRootScheduleTask() {\n  scheduleMicrotask(function () {\n    0 !== (executionContext & 6)\n      ? scheduleCallback$3(\n          ImmediatePriority,\n          processRootScheduleInImmediateTask\n        )\n      : processRootScheduleInMicrotask();\n  });\n}\nfunction requestTransitionLane() {\n  if (0 === currentEventTransitionLane) {\n    var actionScopeLane = currentEntangledLane;\n    0 === actionScopeLane &&\n      ((actionScopeLane = nextTransitionUpdateLane),\n      (nextTransitionUpdateLane <<= 1),\n      0 === (nextTransitionUpdateLane & 261888) &&\n        (nextTransitionUpdateLane = 256));\n    currentEventTransitionLane = actionScopeLane;\n  }\n  return currentEventTransitionLane;\n}\nfunction coerceFormActionProp(actionProp) {\n  return null == actionProp ||\n    \"symbol\" === typeof actionProp ||\n    \"boolean\" === typeof actionProp\n    ? null\n    : \"function\" === typeof actionProp\n      ? actionProp\n      : sanitizeURL(\"\" + actionProp);\n}\nfunction createFormDataWithSubmitter(form, submitter) {\n  var temp = submitter.ownerDocument.createElement(\"input\");\n  temp.name = submitter.name;\n  temp.value = submitter.value;\n  form.id && temp.setAttribute(\"form\", form.id);\n  submitter.parentNode.insertBefore(temp, submitter);\n  form = new FormData(form);\n  temp.parentNode.removeChild(temp);\n  return form;\n}\nfunction extractEvents$1(\n  dispatchQueue,\n  domEventName,\n  maybeTargetInst,\n  nativeEvent,\n  nativeEventTarget\n) {\n  if (\n    \"submit\" === domEventName &&\n    maybeTargetInst &&\n    maybeTargetInst.stateNode === nativeEventTarget\n  ) {\n    var action = coerceFormActionProp(\n        (nativeEventTarget[internalPropsKey] || null).action\n      ),\n      submitter = nativeEvent.submitter;\n    submitter &&\n      ((domEventName = (domEventName = submitter[internalPropsKey] || null)\n        ? coerceFormActionProp(domEventName.formAction)\n        : submitter.getAttribute(\"formAction\")),\n      null !== domEventName && ((action = domEventName), (submitter = null)));\n    var event = new SyntheticEvent(\n      \"action\",\n      \"action\",\n      null,\n      nativeEvent,\n      nativeEventTarget\n    );\n    dispatchQueue.push({\n      event: event,\n      listeners: [\n        {\n          instance: null,\n          listener: function () {\n            if (nativeEvent.defaultPrevented) {\n              if (0 !== currentEventTransitionLane) {\n                var formData = submitter\n                  ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n                  : new FormData(nativeEventTarget);\n                startHostTransition(\n                  maybeTargetInst,\n                  {\n                    pending: !0,\n                    data: formData,\n                    method: nativeEventTarget.method,\n                    action: action\n                  },\n                  null,\n                  formData\n                );\n              }\n            } else\n              \"function\" === typeof action &&\n                (event.preventDefault(),\n                (formData = submitter\n                  ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n                  : new FormData(nativeEventTarget)),\n                startHostTransition(\n                  maybeTargetInst,\n                  {\n                    pending: !0,\n                    data: formData,\n                    method: nativeEventTarget.method,\n                    action: action\n                  },\n                  action,\n                  formData\n                ));\n          },\n          currentTarget: nativeEventTarget\n        }\n      ]\n    });\n  }\n}\nfor (\n  var i$jscomp$inline_1577 = 0;\n  i$jscomp$inline_1577 < simpleEventPluginEvents.length;\n  i$jscomp$inline_1577++\n) {\n  var eventName$jscomp$inline_1578 =\n      simpleEventPluginEvents[i$jscomp$inline_1577],\n    domEventName$jscomp$inline_1579 =\n      eventName$jscomp$inline_1578.toLowerCase(),\n    capitalizedEvent$jscomp$inline_1580 =\n      eventName$jscomp$inline_1578[0].toUpperCase() +\n      eventName$jscomp$inline_1578.slice(1);\n  registerSimpleEvent(\n    domEventName$jscomp$inline_1579,\n    \"on\" + capitalizedEvent$jscomp$inline_1580\n  );\n}\nregisterSimpleEvent(ANIMATION_END, \"onAnimationEnd\");\nregisterSimpleEvent(ANIMATION_ITERATION, \"onAnimationIteration\");\nregisterSimpleEvent(ANIMATION_START, \"onAnimationStart\");\nregisterSimpleEvent(\"dblclick\", \"onDoubleClick\");\nregisterSimpleEvent(\"focusin\", \"onFocus\");\nregisterSimpleEvent(\"focusout\", \"onBlur\");\nregisterSimpleEvent(TRANSITION_RUN, \"onTransitionRun\");\nregisterSimpleEvent(TRANSITION_START, \"onTransitionStart\");\nregisterSimpleEvent(TRANSITION_CANCEL, \"onTransitionCancel\");\nregisterSimpleEvent(TRANSITION_END, \"onTransitionEnd\");\nregisterDirectEvent(\"onMouseEnter\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onMouseLeave\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onPointerEnter\", [\"pointerout\", \"pointerover\"]);\nregisterDirectEvent(\"onPointerLeave\", [\"pointerout\", \"pointerover\"]);\nregisterTwoPhaseEvent(\n  \"onChange\",\n  \"change click focusin focusout input keydown keyup selectionchange\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onSelect\",\n  \"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\n    \" \"\n  )\n);\nregisterTwoPhaseEvent(\"onBeforeInput\", [\n  \"compositionend\",\n  \"keypress\",\n  \"textInput\",\n  \"paste\"\n]);\nregisterTwoPhaseEvent(\n  \"onCompositionEnd\",\n  \"compositionend focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onCompositionStart\",\n  \"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onCompositionUpdate\",\n  \"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \")\n);\nvar mediaEventTypes =\n    \"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\n      \" \"\n    ),\n  nonDelegatedEvents = new Set(\n    \"beforetoggle cancel close invalid load scroll scrollend toggle\"\n      .split(\" \")\n      .concat(mediaEventTypes)\n  );\nfunction processDispatchQueue(dispatchQueue, eventSystemFlags) {\n  eventSystemFlags = 0 !== (eventSystemFlags & 4);\n  for (var i = 0; i < dispatchQueue.length; i++) {\n    var _dispatchQueue$i = dispatchQueue[i],\n      event = _dispatchQueue$i.event;\n    _dispatchQueue$i = _dispatchQueue$i.listeners;\n    a: {\n      var previousInstance = void 0;\n      if (eventSystemFlags)\n        for (\n          var i$jscomp$0 = _dispatchQueue$i.length - 1;\n          0 <= i$jscomp$0;\n          i$jscomp$0--\n        ) {\n          var _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0],\n            instance = _dispatchListeners$i.instance,\n            currentTarget = _dispatchListeners$i.currentTarget;\n          _dispatchListeners$i = _dispatchListeners$i.listener;\n          if (instance !== previousInstance && event.isPropagationStopped())\n            break a;\n          previousInstance = _dispatchListeners$i;\n          event.currentTarget = currentTarget;\n          try {\n            previousInstance(event);\n          } catch (error) {\n            reportGlobalError(error);\n          }\n          event.currentTarget = null;\n          previousInstance = instance;\n        }\n      else\n        for (\n          i$jscomp$0 = 0;\n          i$jscomp$0 < _dispatchQueue$i.length;\n          i$jscomp$0++\n        ) {\n          _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0];\n          instance = _dispatchListeners$i.instance;\n          currentTarget = _dispatchListeners$i.currentTarget;\n          _dispatchListeners$i = _dispatchListeners$i.listener;\n          if (instance !== previousInstance && event.isPropagationStopped())\n            break a;\n          previousInstance = _dispatchListeners$i;\n          event.currentTarget = currentTarget;\n          try {\n            previousInstance(event);\n          } catch (error) {\n            reportGlobalError(error);\n          }\n          event.currentTarget = null;\n          previousInstance = instance;\n        }\n    }\n  }\n}\nfunction listenToNonDelegatedEvent(domEventName, targetElement) {\n  var JSCompiler_inline_result = targetElement[internalEventHandlersKey];\n  void 0 === JSCompiler_inline_result &&\n    (JSCompiler_inline_result = targetElement[internalEventHandlersKey] =\n      new Set());\n  var listenerSetKey = domEventName + \"__bubble\";\n  JSCompiler_inline_result.has(listenerSetKey) ||\n    (addTrappedEventListener(targetElement, domEventName, 2, !1),\n    JSCompiler_inline_result.add(listenerSetKey));\n}\nfunction listenToNativeEvent(domEventName, isCapturePhaseListener, target) {\n  var eventSystemFlags = 0;\n  isCapturePhaseListener && (eventSystemFlags |= 4);\n  addTrappedEventListener(\n    target,\n    domEventName,\n    eventSystemFlags,\n    isCapturePhaseListener\n  );\n}\nvar listeningMarker = \"_reactListening\" + Math.random().toString(36).slice(2);\nfunction listenToAllSupportedEvents(rootContainerElement) {\n  if (!rootContainerElement[listeningMarker]) {\n    rootContainerElement[listeningMarker] = !0;\n    allNativeEvents.forEach(function (domEventName) {\n      \"selectionchange\" !== domEventName &&\n        (nonDelegatedEvents.has(domEventName) ||\n          listenToNativeEvent(domEventName, !1, rootContainerElement),\n        listenToNativeEvent(domEventName, !0, rootContainerElement));\n    });\n    var ownerDocument =\n      9 === rootContainerElement.nodeType\n        ? rootContainerElement\n        : rootContainerElement.ownerDocument;\n    null === ownerDocument ||\n      ownerDocument[listeningMarker] ||\n      ((ownerDocument[listeningMarker] = !0),\n      listenToNativeEvent(\"selectionchange\", !1, ownerDocument));\n  }\n}\nfunction addTrappedEventListener(\n  targetContainer,\n  domEventName,\n  eventSystemFlags,\n  isCapturePhaseListener\n) {\n  switch (getEventPriority(domEventName)) {\n    case 2:\n      var listenerWrapper = dispatchDiscreteEvent;\n      break;\n    case 8:\n      listenerWrapper = dispatchContinuousEvent;\n      break;\n    default:\n      listenerWrapper = dispatchEvent;\n  }\n  eventSystemFlags = listenerWrapper.bind(\n    null,\n    domEventName,\n    eventSystemFlags,\n    targetContainer\n  );\n  listenerWrapper = void 0;\n  !passiveBrowserEventsSupported ||\n    (\"touchstart\" !== domEventName &&\n      \"touchmove\" !== domEventName &&\n      \"wheel\" !== domEventName) ||\n    (listenerWrapper = !0);\n  isCapturePhaseListener\n    ? void 0 !== listenerWrapper\n      ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n          capture: !0,\n          passive: listenerWrapper\n        })\n      : targetContainer.addEventListener(domEventName, eventSystemFlags, !0)\n    : void 0 !== listenerWrapper\n      ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n          passive: listenerWrapper\n        })\n      : targetContainer.addEventListener(domEventName, eventSystemFlags, !1);\n}\nfunction dispatchEventForPluginEventSystem(\n  domEventName,\n  eventSystemFlags,\n  nativeEvent,\n  targetInst$jscomp$0,\n  targetContainer\n) {\n  var ancestorInst = targetInst$jscomp$0;\n  if (\n    0 === (eventSystemFlags & 1) &&\n    0 === (eventSystemFlags & 2) &&\n    null !== targetInst$jscomp$0\n  )\n    a: for (;;) {\n      if (null === targetInst$jscomp$0) return;\n      var nodeTag = targetInst$jscomp$0.tag;\n      if (3 === nodeTag || 4 === nodeTag) {\n        var container = targetInst$jscomp$0.stateNode.containerInfo;\n        if (container === targetContainer) break;\n        if (4 === nodeTag)\n          for (nodeTag = targetInst$jscomp$0.return; null !== nodeTag; ) {\n            var grandTag = nodeTag.tag;\n            if (\n              (3 === grandTag || 4 === grandTag) &&\n              nodeTag.stateNode.containerInfo === targetContainer\n            )\n              return;\n            nodeTag = nodeTag.return;\n          }\n        for (; null !== container; ) {\n          nodeTag = getClosestInstanceFromNode(container);\n          if (null === nodeTag) return;\n          grandTag = nodeTag.tag;\n          if (\n            5 === grandTag ||\n            6 === grandTag ||\n            26 === grandTag ||\n            27 === grandTag\n          ) {\n            targetInst$jscomp$0 = ancestorInst = nodeTag;\n            continue a;\n          }\n          container = container.parentNode;\n        }\n      }\n      targetInst$jscomp$0 = targetInst$jscomp$0.return;\n    }\n  batchedUpdates$1(function () {\n    var targetInst = ancestorInst,\n      nativeEventTarget = getEventTarget(nativeEvent),\n      dispatchQueue = [];\n    a: {\n      var reactName = topLevelEventsToReactNames.get(domEventName);\n      if (void 0 !== reactName) {\n        var SyntheticEventCtor = SyntheticEvent,\n          reactEventType = domEventName;\n        switch (domEventName) {\n          case \"keypress\":\n            if (0 === getEventCharCode(nativeEvent)) break a;\n          case \"keydown\":\n          case \"keyup\":\n            SyntheticEventCtor = SyntheticKeyboardEvent;\n            break;\n          case \"focusin\":\n            reactEventType = \"focus\";\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"focusout\":\n            reactEventType = \"blur\";\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"beforeblur\":\n          case \"afterblur\":\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"click\":\n            if (2 === nativeEvent.button) break a;\n          case \"auxclick\":\n          case \"dblclick\":\n          case \"mousedown\":\n          case \"mousemove\":\n          case \"mouseup\":\n          case \"mouseout\":\n          case \"mouseover\":\n          case \"contextmenu\":\n            SyntheticEventCtor = SyntheticMouseEvent;\n            break;\n          case \"drag\":\n          case \"dragend\":\n          case \"dragenter\":\n          case \"dragexit\":\n          case \"dragleave\":\n          case \"dragover\":\n          case \"dragstart\":\n          case \"drop\":\n            SyntheticEventCtor = SyntheticDragEvent;\n            break;\n          case \"touchcancel\":\n          case \"touchend\":\n          case \"touchmove\":\n          case \"touchstart\":\n            SyntheticEventCtor = SyntheticTouchEvent;\n            break;\n          case ANIMATION_END:\n          case ANIMATION_ITERATION:\n          case ANIMATION_START:\n            SyntheticEventCtor = SyntheticAnimationEvent;\n            break;\n          case TRANSITION_END:\n            SyntheticEventCtor = SyntheticTransitionEvent;\n            break;\n          case \"scroll\":\n          case \"scrollend\":\n            SyntheticEventCtor = SyntheticUIEvent;\n            break;\n          case \"wheel\":\n            SyntheticEventCtor = SyntheticWheelEvent;\n            break;\n          case \"copy\":\n          case \"cut\":\n          case \"paste\":\n            SyntheticEventCtor = SyntheticClipboardEvent;\n            break;\n          case \"gotpointercapture\":\n          case \"lostpointercapture\":\n          case \"pointercancel\":\n          case \"pointerdown\":\n          case \"pointermove\":\n          case \"pointerout\":\n          case \"pointerover\":\n          case \"pointerup\":\n            SyntheticEventCtor = SyntheticPointerEvent;\n            break;\n          case \"toggle\":\n          case \"beforetoggle\":\n            SyntheticEventCtor = SyntheticToggleEvent;\n        }\n        var inCapturePhase = 0 !== (eventSystemFlags & 4),\n          accumulateTargetOnly =\n            !inCapturePhase &&\n            (\"scroll\" === domEventName || \"scrollend\" === domEventName),\n          reactEventName = inCapturePhase\n            ? null !== reactName\n              ? reactName + \"Capture\"\n              : null\n            : reactName;\n        inCapturePhase = [];\n        for (\n          var instance = targetInst, lastHostComponent;\n          null !== instance;\n\n        ) {\n          var _instance = instance;\n          lastHostComponent = _instance.stateNode;\n          _instance = _instance.tag;\n          (5 !== _instance && 26 !== _instance && 27 !== _instance) ||\n            null === lastHostComponent ||\n            null === reactEventName ||\n            ((_instance = getListener(instance, reactEventName)),\n            null != _instance &&\n              inCapturePhase.push(\n                createDispatchListener(instance, _instance, lastHostComponent)\n              ));\n          if (accumulateTargetOnly) break;\n          instance = instance.return;\n        }\n        0 < inCapturePhase.length &&\n          ((reactName = new SyntheticEventCtor(\n            reactName,\n            reactEventType,\n            null,\n            nativeEvent,\n            nativeEventTarget\n          )),\n          dispatchQueue.push({ event: reactName, listeners: inCapturePhase }));\n      }\n    }\n    if (0 === (eventSystemFlags & 7)) {\n      a: {\n        reactName =\n          \"mouseover\" === domEventName || \"pointerover\" === domEventName;\n        SyntheticEventCtor =\n          \"mouseout\" === domEventName || \"pointerout\" === domEventName;\n        if (\n          reactName &&\n          nativeEvent !== currentReplayingEvent &&\n          (reactEventType =\n            nativeEvent.relatedTarget || nativeEvent.fromElement) &&\n          (getClosestInstanceFromNode(reactEventType) ||\n            reactEventType[internalContainerInstanceKey])\n        )\n          break a;\n        if (SyntheticEventCtor || reactName) {\n          reactName =\n            nativeEventTarget.window === nativeEventTarget\n              ? nativeEventTarget\n              : (reactName = nativeEventTarget.ownerDocument)\n                ? reactName.defaultView || reactName.parentWindow\n                : window;\n          if (SyntheticEventCtor) {\n            if (\n              ((reactEventType =\n                nativeEvent.relatedTarget || nativeEvent.toElement),\n              (SyntheticEventCtor = targetInst),\n              (reactEventType = reactEventType\n                ? getClosestInstanceFromNode(reactEventType)\n                : null),\n              null !== reactEventType &&\n                ((accumulateTargetOnly =\n                  getNearestMountedFiber(reactEventType)),\n                (inCapturePhase = reactEventType.tag),\n                reactEventType !== accumulateTargetOnly ||\n                  (5 !== inCapturePhase &&\n                    27 !== inCapturePhase &&\n                    6 !== inCapturePhase)))\n            )\n              reactEventType = null;\n          } else (SyntheticEventCtor = null), (reactEventType = targetInst);\n          if (SyntheticEventCtor !== reactEventType) {\n            inCapturePhase = SyntheticMouseEvent;\n            _instance = \"onMouseLeave\";\n            reactEventName = \"onMouseEnter\";\n            instance = \"mouse\";\n            if (\"pointerout\" === domEventName || \"pointerover\" === domEventName)\n              (inCapturePhase = SyntheticPointerEvent),\n                (_instance = \"onPointerLeave\"),\n                (reactEventName = \"onPointerEnter\"),\n                (instance = \"pointer\");\n            accumulateTargetOnly =\n              null == SyntheticEventCtor\n                ? reactName\n                : getNodeFromInstance(SyntheticEventCtor);\n            lastHostComponent =\n              null == reactEventType\n                ? reactName\n                : getNodeFromInstance(reactEventType);\n            reactName = new inCapturePhase(\n              _instance,\n              instance + \"leave\",\n              SyntheticEventCtor,\n              nativeEvent,\n              nativeEventTarget\n            );\n            reactName.target = accumulateTargetOnly;\n            reactName.relatedTarget = lastHostComponent;\n            _instance = null;\n            getClosestInstanceFromNode(nativeEventTarget) === targetInst &&\n              ((inCapturePhase = new inCapturePhase(\n                reactEventName,\n                instance + \"enter\",\n                reactEventType,\n                nativeEvent,\n                nativeEventTarget\n              )),\n              (inCapturePhase.target = lastHostComponent),\n              (inCapturePhase.relatedTarget = accumulateTargetOnly),\n              (_instance = inCapturePhase));\n            accumulateTargetOnly = _instance;\n            if (SyntheticEventCtor && reactEventType)\n              b: {\n                inCapturePhase = getParent;\n                reactEventName = SyntheticEventCtor;\n                instance = reactEventType;\n                lastHostComponent = 0;\n                for (\n                  _instance = reactEventName;\n                  _instance;\n                  _instance = inCapturePhase(_instance)\n                )\n                  lastHostComponent++;\n                _instance = 0;\n                for (var tempB = instance; tempB; tempB = inCapturePhase(tempB))\n                  _instance++;\n                for (; 0 < lastHostComponent - _instance; )\n                  (reactEventName = inCapturePhase(reactEventName)),\n                    lastHostComponent--;\n                for (; 0 < _instance - lastHostComponent; )\n                  (instance = inCapturePhase(instance)), _instance--;\n                for (; lastHostComponent--; ) {\n                  if (\n                    reactEventName === instance ||\n                    (null !== instance && reactEventName === instance.alternate)\n                  ) {\n                    inCapturePhase = reactEventName;\n                    break b;\n                  }\n                  reactEventName = inCapturePhase(reactEventName);\n                  instance = inCapturePhase(instance);\n                }\n                inCapturePhase = null;\n              }\n            else inCapturePhase = null;\n            null !== SyntheticEventCtor &&\n              accumulateEnterLeaveListenersForEvent(\n                dispatchQueue,\n                reactName,\n                SyntheticEventCtor,\n                inCapturePhase,\n                !1\n              );\n            null !== reactEventType &&\n              null !== accumulateTargetOnly &&\n              accumulateEnterLeaveListenersForEvent(\n                dispatchQueue,\n                accumulateTargetOnly,\n                reactEventType,\n                inCapturePhase,\n                !0\n              );\n          }\n        }\n      }\n      a: {\n        reactName = targetInst ? getNodeFromInstance(targetInst) : window;\n        SyntheticEventCtor =\n          reactName.nodeName && reactName.nodeName.toLowerCase();\n        if (\n          \"select\" === SyntheticEventCtor ||\n          (\"input\" === SyntheticEventCtor && \"file\" === reactName.type)\n        )\n          var getTargetInstFunc = getTargetInstForChangeEvent;\n        else if (isTextInputElement(reactName))\n          if (isInputEventSupported)\n            getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n          else {\n            getTargetInstFunc = getTargetInstForInputEventPolyfill;\n            var handleEventFunc = handleEventsForInputEventPolyfill;\n          }\n        else\n          (SyntheticEventCtor = reactName.nodeName),\n            !SyntheticEventCtor ||\n            \"input\" !== SyntheticEventCtor.toLowerCase() ||\n            (\"checkbox\" !== reactName.type && \"radio\" !== reactName.type)\n              ? targetInst &&\n                isCustomElement(targetInst.elementType) &&\n                (getTargetInstFunc = getTargetInstForChangeEvent)\n              : (getTargetInstFunc = getTargetInstForClickEvent);\n        if (\n          getTargetInstFunc &&\n          (getTargetInstFunc = getTargetInstFunc(domEventName, targetInst))\n        ) {\n          createAndAccumulateChangeEvent(\n            dispatchQueue,\n            getTargetInstFunc,\n            nativeEvent,\n            nativeEventTarget\n          );\n          break a;\n        }\n        handleEventFunc && handleEventFunc(domEventName, reactName, targetInst);\n        \"focusout\" === domEventName &&\n          targetInst &&\n          \"number\" === reactName.type &&\n          null != targetInst.memoizedProps.value &&\n          setDefaultValue(reactName, \"number\", reactName.value);\n      }\n      handleEventFunc = targetInst ? getNodeFromInstance(targetInst) : window;\n      switch (domEventName) {\n        case \"focusin\":\n          if (\n            isTextInputElement(handleEventFunc) ||\n            \"true\" === handleEventFunc.contentEditable\n          )\n            (activeElement = handleEventFunc),\n              (activeElementInst = targetInst),\n              (lastSelection = null);\n          break;\n        case \"focusout\":\n          lastSelection = activeElementInst = activeElement = null;\n          break;\n        case \"mousedown\":\n          mouseDown = !0;\n          break;\n        case \"contextmenu\":\n        case \"mouseup\":\n        case \"dragend\":\n          mouseDown = !1;\n          constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n          break;\n        case \"selectionchange\":\n          if (skipSelectionChangeEvent) break;\n        case \"keydown\":\n        case \"keyup\":\n          constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n      }\n      var fallbackData;\n      if (canUseCompositionEvent)\n        b: {\n          switch (domEventName) {\n            case \"compositionstart\":\n              var eventType = \"onCompositionStart\";\n              break b;\n            case \"compositionend\":\n              eventType = \"onCompositionEnd\";\n              break b;\n            case \"compositionupdate\":\n              eventType = \"onCompositionUpdate\";\n              break b;\n          }\n          eventType = void 0;\n        }\n      else\n        isComposing\n          ? isFallbackCompositionEnd(domEventName, nativeEvent) &&\n            (eventType = \"onCompositionEnd\")\n          : \"keydown\" === domEventName &&\n            229 === nativeEvent.keyCode &&\n            (eventType = \"onCompositionStart\");\n      eventType &&\n        (useFallbackCompositionData &&\n          \"ko\" !== nativeEvent.locale &&\n          (isComposing || \"onCompositionStart\" !== eventType\n            ? \"onCompositionEnd\" === eventType &&\n              isComposing &&\n              (fallbackData = getData())\n            : ((root = nativeEventTarget),\n              (startText = \"value\" in root ? root.value : root.textContent),\n              (isComposing = !0))),\n        (handleEventFunc = accumulateTwoPhaseListeners(targetInst, eventType)),\n        0 < handleEventFunc.length &&\n          ((eventType = new SyntheticCompositionEvent(\n            eventType,\n            domEventName,\n            null,\n            nativeEvent,\n            nativeEventTarget\n          )),\n          dispatchQueue.push({ event: eventType, listeners: handleEventFunc }),\n          fallbackData\n            ? (eventType.data = fallbackData)\n            : ((fallbackData = getDataFromCustomEvent(nativeEvent)),\n              null !== fallbackData && (eventType.data = fallbackData))));\n      if (\n        (fallbackData = canUseTextInputEvent\n          ? getNativeBeforeInputChars(domEventName, nativeEvent)\n          : getFallbackBeforeInputChars(domEventName, nativeEvent))\n      )\n        (eventType = accumulateTwoPhaseListeners(targetInst, \"onBeforeInput\")),\n          0 < eventType.length &&\n            ((handleEventFunc = new SyntheticCompositionEvent(\n              \"onBeforeInput\",\n              \"beforeinput\",\n              null,\n              nativeEvent,\n              nativeEventTarget\n            )),\n            dispatchQueue.push({\n              event: handleEventFunc,\n              listeners: eventType\n            }),\n            (handleEventFunc.data = fallbackData));\n      extractEvents$1(\n        dispatchQueue,\n        domEventName,\n        targetInst,\n        nativeEvent,\n        nativeEventTarget\n      );\n    }\n    processDispatchQueue(dispatchQueue, eventSystemFlags);\n  });\n}\nfunction createDispatchListener(instance, listener, currentTarget) {\n  return {\n    instance: instance,\n    listener: listener,\n    currentTarget: currentTarget\n  };\n}\nfunction accumulateTwoPhaseListeners(targetFiber, reactName) {\n  for (\n    var captureName = reactName + \"Capture\", listeners = [];\n    null !== targetFiber;\n\n  ) {\n    var _instance2 = targetFiber,\n      stateNode = _instance2.stateNode;\n    _instance2 = _instance2.tag;\n    (5 !== _instance2 && 26 !== _instance2 && 27 !== _instance2) ||\n      null === stateNode ||\n      ((_instance2 = getListener(targetFiber, captureName)),\n      null != _instance2 &&\n        listeners.unshift(\n          createDispatchListener(targetFiber, _instance2, stateNode)\n        ),\n      (_instance2 = getListener(targetFiber, reactName)),\n      null != _instance2 &&\n        listeners.push(\n          createDispatchListener(targetFiber, _instance2, stateNode)\n        ));\n    if (3 === targetFiber.tag) return listeners;\n    targetFiber = targetFiber.return;\n  }\n  return [];\n}\nfunction getParent(inst) {\n  if (null === inst) return null;\n  do inst = inst.return;\n  while (inst && 5 !== inst.tag && 27 !== inst.tag);\n  return inst ? inst : null;\n}\nfunction accumulateEnterLeaveListenersForEvent(\n  dispatchQueue,\n  event,\n  target,\n  common,\n  inCapturePhase\n) {\n  for (\n    var registrationName = event._reactName, listeners = [];\n    null !== target && target !== common;\n\n  ) {\n    var _instance3 = target,\n      alternate = _instance3.alternate,\n      stateNode = _instance3.stateNode;\n    _instance3 = _instance3.tag;\n    if (null !== alternate && alternate === common) break;\n    (5 !== _instance3 && 26 !== _instance3 && 27 !== _instance3) ||\n      null === stateNode ||\n      ((alternate = stateNode),\n      inCapturePhase\n        ? ((stateNode = getListener(target, registrationName)),\n          null != stateNode &&\n            listeners.unshift(\n              createDispatchListener(target, stateNode, alternate)\n            ))\n        : inCapturePhase ||\n          ((stateNode = getListener(target, registrationName)),\n          null != stateNode &&\n            listeners.push(\n              createDispatchListener(target, stateNode, alternate)\n            )));\n    target = target.return;\n  }\n  0 !== listeners.length &&\n    dispatchQueue.push({ event: event, listeners: listeners });\n}\nvar NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g,\n  NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g;\nfunction normalizeMarkupForTextOrAttribute(markup) {\n  return (\"string\" === typeof markup ? markup : \"\" + markup)\n    .replace(NORMALIZE_NEWLINES_REGEX, \"\\n\")\n    .replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, \"\");\n}\nfunction checkForUnmatchedText(serverText, clientText) {\n  clientText = normalizeMarkupForTextOrAttribute(clientText);\n  return normalizeMarkupForTextOrAttribute(serverText) === clientText ? !0 : !1;\n}\nfunction setProp(domElement, tag, key, value, props, prevValue) {\n  switch (key) {\n    case \"children\":\n      \"string\" === typeof value\n        ? \"body\" === tag ||\n          (\"textarea\" === tag && \"\" === value) ||\n          setTextContent(domElement, value)\n        : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n          \"body\" !== tag &&\n          setTextContent(domElement, \"\" + value);\n      break;\n    case \"className\":\n      setValueForKnownAttribute(domElement, \"class\", value);\n      break;\n    case \"tabIndex\":\n      setValueForKnownAttribute(domElement, \"tabindex\", value);\n      break;\n    case \"dir\":\n    case \"role\":\n    case \"viewBox\":\n    case \"width\":\n    case \"height\":\n      setValueForKnownAttribute(domElement, key, value);\n      break;\n    case \"style\":\n      setValueForStyles(domElement, value, prevValue);\n      break;\n    case \"data\":\n      if (\"object\" !== tag) {\n        setValueForKnownAttribute(domElement, \"data\", value);\n        break;\n      }\n    case \"src\":\n    case \"href\":\n      if (\"\" === value && (\"a\" !== tag || \"href\" !== key)) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      if (\n        null == value ||\n        \"function\" === typeof value ||\n        \"symbol\" === typeof value ||\n        \"boolean\" === typeof value\n      ) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      value = sanitizeURL(\"\" + value);\n      domElement.setAttribute(key, value);\n      break;\n    case \"action\":\n    case \"formAction\":\n      if (\"function\" === typeof value) {\n        domElement.setAttribute(\n          key,\n          \"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')\"\n        );\n        break;\n      } else\n        \"function\" === typeof prevValue &&\n          (\"formAction\" === key\n            ? (\"input\" !== tag &&\n                setProp(domElement, tag, \"name\", props.name, props, null),\n              setProp(\n                domElement,\n                tag,\n                \"formEncType\",\n                props.formEncType,\n                props,\n                null\n              ),\n              setProp(\n                domElement,\n                tag,\n                \"formMethod\",\n                props.formMethod,\n                props,\n                null\n              ),\n              setProp(\n                domElement,\n                tag,\n                \"formTarget\",\n                props.formTarget,\n                props,\n                null\n              ))\n            : (setProp(domElement, tag, \"encType\", props.encType, props, null),\n              setProp(domElement, tag, \"method\", props.method, props, null),\n              setProp(domElement, tag, \"target\", props.target, props, null)));\n      if (\n        null == value ||\n        \"symbol\" === typeof value ||\n        \"boolean\" === typeof value\n      ) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      value = sanitizeURL(\"\" + value);\n      domElement.setAttribute(key, value);\n      break;\n    case \"onClick\":\n      null != value && (domElement.onclick = noop$1);\n      break;\n    case \"onScroll\":\n      null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n      break;\n    case \"onScrollEnd\":\n      null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n      break;\n    case \"dangerouslySetInnerHTML\":\n      if (null != value) {\n        if (\"object\" !== typeof value || !(\"__html\" in value))\n          throw Error(formatProdErrorMessage(61));\n        key = value.__html;\n        if (null != key) {\n          if (null != props.children) throw Error(formatProdErrorMessage(60));\n          domElement.innerHTML = key;\n        }\n      }\n      break;\n    case \"multiple\":\n      domElement.multiple =\n        value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n      break;\n    case \"muted\":\n      domElement.muted =\n        value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n      break;\n    case \"suppressContentEditableWarning\":\n    case \"suppressHydrationWarning\":\n    case \"defaultValue\":\n    case \"defaultChecked\":\n    case \"innerHTML\":\n    case \"ref\":\n      break;\n    case \"autoFocus\":\n      break;\n    case \"xlinkHref\":\n      if (\n        null == value ||\n        \"function\" === typeof value ||\n        \"boolean\" === typeof value ||\n        \"symbol\" === typeof value\n      ) {\n        domElement.removeAttribute(\"xlink:href\");\n        break;\n      }\n      key = sanitizeURL(\"\" + value);\n      domElement.setAttributeNS(\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:href\",\n        key\n      );\n      break;\n    case \"contentEditable\":\n    case \"spellCheck\":\n    case \"draggable\":\n    case \"value\":\n    case \"autoReverse\":\n    case \"externalResourcesRequired\":\n    case \"focusable\":\n    case \"preserveAlpha\":\n      null != value && \"function\" !== typeof value && \"symbol\" !== typeof value\n        ? domElement.setAttribute(key, \"\" + value)\n        : domElement.removeAttribute(key);\n      break;\n    case \"inert\":\n    case \"allowFullScreen\":\n    case \"async\":\n    case \"autoPlay\":\n    case \"controls\":\n    case \"default\":\n    case \"defer\":\n    case \"disabled\":\n    case \"disablePictureInPicture\":\n    case \"disableRemotePlayback\":\n    case \"formNoValidate\":\n    case \"hidden\":\n    case \"loop\":\n    case \"noModule\":\n    case \"noValidate\":\n    case \"open\":\n    case \"playsInline\":\n    case \"readOnly\":\n    case \"required\":\n    case \"reversed\":\n    case \"scoped\":\n    case \"seamless\":\n    case \"itemScope\":\n      value && \"function\" !== typeof value && \"symbol\" !== typeof value\n        ? domElement.setAttribute(key, \"\")\n        : domElement.removeAttribute(key);\n      break;\n    case \"capture\":\n    case \"download\":\n      !0 === value\n        ? domElement.setAttribute(key, \"\")\n        : !1 !== value &&\n            null != value &&\n            \"function\" !== typeof value &&\n            \"symbol\" !== typeof value\n          ? domElement.setAttribute(key, value)\n          : domElement.removeAttribute(key);\n      break;\n    case \"cols\":\n    case \"rows\":\n    case \"size\":\n    case \"span\":\n      null != value &&\n      \"function\" !== typeof value &&\n      \"symbol\" !== typeof value &&\n      !isNaN(value) &&\n      1 <= value\n        ? domElement.setAttribute(key, value)\n        : domElement.removeAttribute(key);\n      break;\n    case \"rowSpan\":\n    case \"start\":\n      null == value ||\n      \"function\" === typeof value ||\n      \"symbol\" === typeof value ||\n      isNaN(value)\n        ? domElement.removeAttribute(key)\n        : domElement.setAttribute(key, value);\n      break;\n    case \"popover\":\n      listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      setValueForAttribute(domElement, \"popover\", value);\n      break;\n    case \"xlinkActuate\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:actuate\",\n        value\n      );\n      break;\n    case \"xlinkArcrole\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:arcrole\",\n        value\n      );\n      break;\n    case \"xlinkRole\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:role\",\n        value\n      );\n      break;\n    case \"xlinkShow\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:show\",\n        value\n      );\n      break;\n    case \"xlinkTitle\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:title\",\n        value\n      );\n      break;\n    case \"xlinkType\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:type\",\n        value\n      );\n      break;\n    case \"xmlBase\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:base\",\n        value\n      );\n      break;\n    case \"xmlLang\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:lang\",\n        value\n      );\n      break;\n    case \"xmlSpace\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:space\",\n        value\n      );\n      break;\n    case \"is\":\n      setValueForAttribute(domElement, \"is\", value);\n      break;\n    case \"innerText\":\n    case \"textContent\":\n      break;\n    default:\n      if (\n        !(2 < key.length) ||\n        (\"o\" !== key[0] && \"O\" !== key[0]) ||\n        (\"n\" !== key[1] && \"N\" !== key[1])\n      )\n        (key = aliases.get(key) || key),\n          setValueForAttribute(domElement, key, value);\n  }\n}\nfunction setPropOnCustomElement(domElement, tag, key, value, props, prevValue) {\n  switch (key) {\n    case \"style\":\n      setValueForStyles(domElement, value, prevValue);\n      break;\n    case \"dangerouslySetInnerHTML\":\n      if (null != value) {\n        if (\"object\" !== typeof value || !(\"__html\" in value))\n          throw Error(formatProdErrorMessage(61));\n        key = value.__html;\n        if (null != key) {\n          if (null != props.children) throw Error(formatProdErrorMessage(60));\n          domElement.innerHTML = key;\n        }\n      }\n      break;\n    case \"children\":\n      \"string\" === typeof value\n        ? setTextContent(domElement, value)\n        : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n          setTextContent(domElement, \"\" + value);\n      break;\n    case \"onScroll\":\n      null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n      break;\n    case \"onScrollEnd\":\n      null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n      break;\n    case \"onClick\":\n      null != value && (domElement.onclick = noop$1);\n      break;\n    case \"suppressContentEditableWarning\":\n    case \"suppressHydrationWarning\":\n    case \"innerHTML\":\n    case \"ref\":\n      break;\n    case \"innerText\":\n    case \"textContent\":\n      break;\n    default:\n      if (!registrationNameDependencies.hasOwnProperty(key))\n        a: {\n          if (\n            \"o\" === key[0] &&\n            \"n\" === key[1] &&\n            ((props = key.endsWith(\"Capture\")),\n            (tag = key.slice(2, props ? key.length - 7 : void 0)),\n            (prevValue = domElement[internalPropsKey] || null),\n            (prevValue = null != prevValue ? prevValue[key] : null),\n            \"function\" === typeof prevValue &&\n              domElement.removeEventListener(tag, prevValue, props),\n            \"function\" === typeof value)\n          ) {\n            \"function\" !== typeof prevValue &&\n              null !== prevValue &&\n              (key in domElement\n                ? (domElement[key] = null)\n                : domElement.hasAttribute(key) &&\n                  domElement.removeAttribute(key));\n            domElement.addEventListener(tag, value, props);\n            break a;\n          }\n          key in domElement\n            ? (domElement[key] = value)\n            : !0 === value\n              ? domElement.setAttribute(key, \"\")\n              : setValueForAttribute(domElement, key, value);\n        }\n  }\n}\nfunction setInitialProperties(domElement, tag, props) {\n  switch (tag) {\n    case \"div\":\n    case \"span\":\n    case \"svg\":\n    case \"path\":\n    case \"a\":\n    case \"g\":\n    case \"p\":\n    case \"li\":\n      break;\n    case \"img\":\n      listenToNonDelegatedEvent(\"error\", domElement);\n      listenToNonDelegatedEvent(\"load\", domElement);\n      var hasSrc = !1,\n        hasSrcSet = !1,\n        propKey;\n      for (propKey in props)\n        if (props.hasOwnProperty(propKey)) {\n          var propValue = props[propKey];\n          if (null != propValue)\n            switch (propKey) {\n              case \"src\":\n                hasSrc = !0;\n                break;\n              case \"srcSet\":\n                hasSrcSet = !0;\n                break;\n              case \"children\":\n              case \"dangerouslySetInnerHTML\":\n                throw Error(formatProdErrorMessage(137, tag));\n              default:\n                setProp(domElement, tag, propKey, propValue, props, null);\n            }\n        }\n      hasSrcSet &&\n        setProp(domElement, tag, \"srcSet\", props.srcSet, props, null);\n      hasSrc && setProp(domElement, tag, \"src\", props.src, props, null);\n      return;\n    case \"input\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      var defaultValue = (propKey = propValue = hasSrcSet = null),\n        checked = null,\n        defaultChecked = null;\n      for (hasSrc in props)\n        if (props.hasOwnProperty(hasSrc)) {\n          var propValue$184 = props[hasSrc];\n          if (null != propValue$184)\n            switch (hasSrc) {\n              case \"name\":\n                hasSrcSet = propValue$184;\n                break;\n              case \"type\":\n                propValue = propValue$184;\n                break;\n              case \"checked\":\n                checked = propValue$184;\n                break;\n              case \"defaultChecked\":\n                defaultChecked = propValue$184;\n                break;\n              case \"value\":\n                propKey = propValue$184;\n                break;\n              case \"defaultValue\":\n                defaultValue = propValue$184;\n                break;\n              case \"children\":\n              case \"dangerouslySetInnerHTML\":\n                if (null != propValue$184)\n                  throw Error(formatProdErrorMessage(137, tag));\n                break;\n              default:\n                setProp(domElement, tag, hasSrc, propValue$184, props, null);\n            }\n        }\n      initInput(\n        domElement,\n        propKey,\n        defaultValue,\n        checked,\n        defaultChecked,\n        propValue,\n        hasSrcSet,\n        !1\n      );\n      return;\n    case \"select\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      hasSrc = propValue = propKey = null;\n      for (hasSrcSet in props)\n        if (\n          props.hasOwnProperty(hasSrcSet) &&\n          ((defaultValue = props[hasSrcSet]), null != defaultValue)\n        )\n          switch (hasSrcSet) {\n            case \"value\":\n              propKey = defaultValue;\n              break;\n            case \"defaultValue\":\n              propValue = defaultValue;\n              break;\n            case \"multiple\":\n              hasSrc = defaultValue;\n            default:\n              setProp(domElement, tag, hasSrcSet, defaultValue, props, null);\n          }\n      tag = propKey;\n      props = propValue;\n      domElement.multiple = !!hasSrc;\n      null != tag\n        ? updateOptions(domElement, !!hasSrc, tag, !1)\n        : null != props && updateOptions(domElement, !!hasSrc, props, !0);\n      return;\n    case \"textarea\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      propKey = hasSrcSet = hasSrc = null;\n      for (propValue in props)\n        if (\n          props.hasOwnProperty(propValue) &&\n          ((defaultValue = props[propValue]), null != defaultValue)\n        )\n          switch (propValue) {\n            case \"value\":\n              hasSrc = defaultValue;\n              break;\n            case \"defaultValue\":\n              hasSrcSet = defaultValue;\n              break;\n            case \"children\":\n              propKey = defaultValue;\n              break;\n            case \"dangerouslySetInnerHTML\":\n              if (null != defaultValue) throw Error(formatProdErrorMessage(91));\n              break;\n            default:\n              setProp(domElement, tag, propValue, defaultValue, props, null);\n          }\n      initTextarea(domElement, hasSrc, hasSrcSet, propKey);\n      return;\n    case \"option\":\n      for (checked in props)\n        if (\n          props.hasOwnProperty(checked) &&\n          ((hasSrc = props[checked]), null != hasSrc)\n        )\n          switch (checked) {\n            case \"selected\":\n              domElement.selected =\n                hasSrc &&\n                \"function\" !== typeof hasSrc &&\n                \"symbol\" !== typeof hasSrc;\n              break;\n            default:\n              setProp(domElement, tag, checked, hasSrc, props, null);\n          }\n      return;\n    case \"dialog\":\n      listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      listenToNonDelegatedEvent(\"cancel\", domElement);\n      listenToNonDelegatedEvent(\"close\", domElement);\n      break;\n    case \"iframe\":\n    case \"object\":\n      listenToNonDelegatedEvent(\"load\", domElement);\n      break;\n    case \"video\":\n    case \"audio\":\n      for (hasSrc = 0; hasSrc < mediaEventTypes.length; hasSrc++)\n        listenToNonDelegatedEvent(mediaEventTypes[hasSrc], domElement);\n      break;\n    case \"image\":\n      listenToNonDelegatedEvent(\"error\", domElement);\n      listenToNonDelegatedEvent(\"load\", domElement);\n      break;\n    case \"details\":\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      break;\n    case \"embed\":\n    case \"source\":\n    case \"link\":\n      listenToNonDelegatedEvent(\"error\", domElement),\n        listenToNonDelegatedEvent(\"load\", domElement);\n    case \"area\":\n    case \"base\":\n    case \"br\":\n    case \"col\":\n    case \"hr\":\n    case \"keygen\":\n    case \"meta\":\n    case \"param\":\n    case \"track\":\n    case \"wbr\":\n    case \"menuitem\":\n      for (defaultChecked in props)\n        if (\n          props.hasOwnProperty(defaultChecked) &&\n          ((hasSrc = props[defaultChecked]), null != hasSrc)\n        )\n          switch (defaultChecked) {\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              throw Error(formatProdErrorMessage(137, tag));\n            default:\n              setProp(domElement, tag, defaultChecked, hasSrc, props, null);\n          }\n      return;\n    default:\n      if (isCustomElement(tag)) {\n        for (propValue$184 in props)\n          props.hasOwnProperty(propValue$184) &&\n            ((hasSrc = props[propValue$184]),\n            void 0 !== hasSrc &&\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                propValue$184,\n                hasSrc,\n                props,\n                void 0\n              ));\n        return;\n      }\n  }\n  for (defaultValue in props)\n    props.hasOwnProperty(defaultValue) &&\n      ((hasSrc = props[defaultValue]),\n      null != hasSrc &&\n        setProp(domElement, tag, defaultValue, hasSrc, props, null));\n}\nfunction updateProperties(domElement, tag, lastProps, nextProps) {\n  switch (tag) {\n    case \"div\":\n    case \"span\":\n    case \"svg\":\n    case \"path\":\n    case \"a\":\n    case \"g\":\n    case \"p\":\n    case \"li\":\n      break;\n    case \"input\":\n      var name = null,\n        type = null,\n        value = null,\n        defaultValue = null,\n        lastDefaultValue = null,\n        checked = null,\n        defaultChecked = null;\n      for (propKey in lastProps) {\n        var lastProp = lastProps[propKey];\n        if (lastProps.hasOwnProperty(propKey) && null != lastProp)\n          switch (propKey) {\n            case \"checked\":\n              break;\n            case \"value\":\n              break;\n            case \"defaultValue\":\n              lastDefaultValue = lastProp;\n            default:\n              nextProps.hasOwnProperty(propKey) ||\n                setProp(domElement, tag, propKey, null, nextProps, lastProp);\n          }\n      }\n      for (var propKey$201 in nextProps) {\n        var propKey = nextProps[propKey$201];\n        lastProp = lastProps[propKey$201];\n        if (\n          nextProps.hasOwnProperty(propKey$201) &&\n          (null != propKey || null != lastProp)\n        )\n          switch (propKey$201) {\n            case \"type\":\n              type = propKey;\n              break;\n            case \"name\":\n              name = propKey;\n              break;\n            case \"checked\":\n              checked = propKey;\n              break;\n            case \"defaultChecked\":\n              defaultChecked = propKey;\n              break;\n            case \"value\":\n              value = propKey;\n              break;\n            case \"defaultValue\":\n              defaultValue = propKey;\n              break;\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              if (null != propKey)\n                throw Error(formatProdErrorMessage(137, tag));\n              break;\n            default:\n              propKey !== lastProp &&\n                setProp(\n                  domElement,\n                  tag,\n                  propKey$201,\n                  propKey,\n                  nextProps,\n                  lastProp\n                );\n          }\n      }\n      updateInput(\n        domElement,\n        value,\n        defaultValue,\n        lastDefaultValue,\n        checked,\n        defaultChecked,\n        type,\n        name\n      );\n      return;\n    case \"select\":\n      propKey = value = defaultValue = propKey$201 = null;\n      for (type in lastProps)\n        if (\n          ((lastDefaultValue = lastProps[type]),\n          lastProps.hasOwnProperty(type) && null != lastDefaultValue)\n        )\n          switch (type) {\n            case \"value\":\n              break;\n            case \"multiple\":\n              propKey = lastDefaultValue;\n            default:\n              nextProps.hasOwnProperty(type) ||\n                setProp(\n                  domElement,\n                  tag,\n                  type,\n                  null,\n                  nextProps,\n                  lastDefaultValue\n                );\n          }\n      for (name in nextProps)\n        if (\n          ((type = nextProps[name]),\n          (lastDefaultValue = lastProps[name]),\n          nextProps.hasOwnProperty(name) &&\n            (null != type || null != lastDefaultValue))\n        )\n          switch (name) {\n            case \"value\":\n              propKey$201 = type;\n              break;\n            case \"defaultValue\":\n              defaultValue = type;\n              break;\n            case \"multiple\":\n              value = type;\n            default:\n              type !== lastDefaultValue &&\n                setProp(\n                  domElement,\n                  tag,\n                  name,\n                  type,\n                  nextProps,\n                  lastDefaultValue\n                );\n          }\n      tag = defaultValue;\n      lastProps = value;\n      nextProps = propKey;\n      null != propKey$201\n        ? updateOptions(domElement, !!lastProps, propKey$201, !1)\n        : !!nextProps !== !!lastProps &&\n          (null != tag\n            ? updateOptions(domElement, !!lastProps, tag, !0)\n            : updateOptions(domElement, !!lastProps, lastProps ? [] : \"\", !1));\n      return;\n    case \"textarea\":\n      propKey = propKey$201 = null;\n      for (defaultValue in lastProps)\n        if (\n          ((name = lastProps[defaultValue]),\n          lastProps.hasOwnProperty(defaultValue) &&\n            null != name &&\n            !nextProps.hasOwnProperty(defaultValue))\n        )\n          switch (defaultValue) {\n            case \"value\":\n              break;\n            case \"children\":\n              break;\n            default:\n              setProp(domElement, tag, defaultValue, null, nextProps, name);\n          }\n      for (value in nextProps)\n        if (\n          ((name = nextProps[value]),\n          (type = lastProps[value]),\n          nextProps.hasOwnProperty(value) && (null != name || null != type))\n        )\n          switch (value) {\n            case \"value\":\n              propKey$201 = name;\n              break;\n            case \"defaultValue\":\n              propKey = name;\n              break;\n            case \"children\":\n              break;\n            case \"dangerouslySetInnerHTML\":\n              if (null != name) throw Error(formatProdErrorMessage(91));\n              break;\n            default:\n              name !== type &&\n                setProp(domElement, tag, value, name, nextProps, type);\n          }\n      updateTextarea(domElement, propKey$201, propKey);\n      return;\n    case \"option\":\n      for (var propKey$217 in lastProps)\n        if (\n          ((propKey$201 = lastProps[propKey$217]),\n          lastProps.hasOwnProperty(propKey$217) &&\n            null != propKey$201 &&\n            !nextProps.hasOwnProperty(propKey$217))\n        )\n          switch (propKey$217) {\n            case \"selected\":\n              domElement.selected = !1;\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                propKey$217,\n                null,\n                nextProps,\n                propKey$201\n              );\n          }\n      for (lastDefaultValue in nextProps)\n        if (\n          ((propKey$201 = nextProps[lastDefaultValue]),\n          (propKey = lastProps[lastDefaultValue]),\n          nextProps.hasOwnProperty(lastDefaultValue) &&\n            propKey$201 !== propKey &&\n            (null != propKey$201 || null != propKey))\n        )\n          switch (lastDefaultValue) {\n            case \"selected\":\n              domElement.selected =\n                propKey$201 &&\n                \"function\" !== typeof propKey$201 &&\n                \"symbol\" !== typeof propKey$201;\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                lastDefaultValue,\n                propKey$201,\n                nextProps,\n                propKey\n              );\n          }\n      return;\n    case \"img\":\n    case \"link\":\n    case \"area\":\n    case \"base\":\n    case \"br\":\n    case \"col\":\n    case \"embed\":\n    case \"hr\":\n    case \"keygen\":\n    case \"meta\":\n    case \"param\":\n    case \"source\":\n    case \"track\":\n    case \"wbr\":\n    case \"menuitem\":\n      for (var propKey$222 in lastProps)\n        (propKey$201 = lastProps[propKey$222]),\n          lastProps.hasOwnProperty(propKey$222) &&\n            null != propKey$201 &&\n            !nextProps.hasOwnProperty(propKey$222) &&\n            setProp(domElement, tag, propKey$222, null, nextProps, propKey$201);\n      for (checked in nextProps)\n        if (\n          ((propKey$201 = nextProps[checked]),\n          (propKey = lastProps[checked]),\n          nextProps.hasOwnProperty(checked) &&\n            propKey$201 !== propKey &&\n            (null != propKey$201 || null != propKey))\n        )\n          switch (checked) {\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              if (null != propKey$201)\n                throw Error(formatProdErrorMessage(137, tag));\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                checked,\n                propKey$201,\n                nextProps,\n                propKey\n              );\n          }\n      return;\n    default:\n      if (isCustomElement(tag)) {\n        for (var propKey$227 in lastProps)\n          (propKey$201 = lastProps[propKey$227]),\n            lastProps.hasOwnProperty(propKey$227) &&\n              void 0 !== propKey$201 &&\n              !nextProps.hasOwnProperty(propKey$227) &&\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                propKey$227,\n                void 0,\n                nextProps,\n                propKey$201\n              );\n        for (defaultChecked in nextProps)\n          (propKey$201 = nextProps[defaultChecked]),\n            (propKey = lastProps[defaultChecked]),\n            !nextProps.hasOwnProperty(defaultChecked) ||\n              propKey$201 === propKey ||\n              (void 0 === propKey$201 && void 0 === propKey) ||\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                defaultChecked,\n                propKey$201,\n                nextProps,\n                propKey\n              );\n        return;\n      }\n  }\n  for (var propKey$232 in lastProps)\n    (propKey$201 = lastProps[propKey$232]),\n      lastProps.hasOwnProperty(propKey$232) &&\n        null != propKey$201 &&\n        !nextProps.hasOwnProperty(propKey$232) &&\n        setProp(domElement, tag, propKey$232, null, nextProps, propKey$201);\n  for (lastProp in nextProps)\n    (propKey$201 = nextProps[lastProp]),\n      (propKey = lastProps[lastProp]),\n      !nextProps.hasOwnProperty(lastProp) ||\n        propKey$201 === propKey ||\n        (null == propKey$201 && null == propKey) ||\n        setProp(domElement, tag, lastProp, propKey$201, nextProps, propKey);\n}\nfunction isLikelyStaticResource(initiatorType) {\n  switch (initiatorType) {\n    case \"css\":\n    case \"script\":\n    case \"font\":\n    case \"img\":\n    case \"image\":\n    case \"input\":\n    case \"link\":\n      return !0;\n    default:\n      return !1;\n  }\n}\nfunction estimateBandwidth() {\n  if (\"function\" === typeof performance.getEntriesByType) {\n    for (\n      var count = 0,\n        bits = 0,\n        resourceEntries = performance.getEntriesByType(\"resource\"),\n        i = 0;\n      i < resourceEntries.length;\n      i++\n    ) {\n      var entry = resourceEntries[i],\n        transferSize = entry.transferSize,\n        initiatorType = entry.initiatorType,\n        duration = entry.duration;\n      if (transferSize && duration && isLikelyStaticResource(initiatorType)) {\n        initiatorType = 0;\n        duration = entry.responseEnd;\n        for (i += 1; i < resourceEntries.length; i++) {\n          var overlapEntry = resourceEntries[i],\n            overlapStartTime = overlapEntry.startTime;\n          if (overlapStartTime > duration) break;\n          var overlapTransferSize = overlapEntry.transferSize,\n            overlapInitiatorType = overlapEntry.initiatorType;\n          overlapTransferSize &&\n            isLikelyStaticResource(overlapInitiatorType) &&\n            ((overlapEntry = overlapEntry.responseEnd),\n            (initiatorType +=\n              overlapTransferSize *\n              (overlapEntry < duration\n                ? 1\n                : (duration - overlapStartTime) /\n                  (overlapEntry - overlapStartTime))));\n        }\n        --i;\n        bits += (8 * (transferSize + initiatorType)) / (entry.duration / 1e3);\n        count++;\n        if (10 < count) break;\n      }\n    }\n    if (0 < count) return bits / count / 1e6;\n  }\n  return navigator.connection &&\n    ((count = navigator.connection.downlink), \"number\" === typeof count)\n    ? count\n    : 5;\n}\nvar eventsEnabled = null,\n  selectionInformation = null;\nfunction getOwnerDocumentFromRootContainer(rootContainerElement) {\n  return 9 === rootContainerElement.nodeType\n    ? rootContainerElement\n    : rootContainerElement.ownerDocument;\n}\nfunction getOwnHostContext(namespaceURI) {\n  switch (namespaceURI) {\n    case \"http://www.w3.org/2000/svg\":\n      return 1;\n    case \"http://www.w3.org/1998/Math/MathML\":\n      return 2;\n    default:\n      return 0;\n  }\n}\nfunction getChildHostContextProd(parentNamespace, type) {\n  if (0 === parentNamespace)\n    switch (type) {\n      case \"svg\":\n        return 1;\n      case \"math\":\n        return 2;\n      default:\n        return 0;\n    }\n  return 1 === parentNamespace && \"foreignObject\" === type\n    ? 0\n    : parentNamespace;\n}\nfunction shouldSetTextContent(type, props) {\n  return (\n    \"textarea\" === type ||\n    \"noscript\" === type ||\n    \"string\" === typeof props.children ||\n    \"number\" === typeof props.children ||\n    \"bigint\" === typeof props.children ||\n    (\"object\" === typeof props.dangerouslySetInnerHTML &&\n      null !== props.dangerouslySetInnerHTML &&\n      null != props.dangerouslySetInnerHTML.__html)\n  );\n}\nvar currentPopstateTransitionEvent = null;\nfunction shouldAttemptEagerTransition() {\n  var event = window.event;\n  if (event && \"popstate\" === event.type) {\n    if (event === currentPopstateTransitionEvent) return !1;\n    currentPopstateTransitionEvent = event;\n    return !0;\n  }\n  currentPopstateTransitionEvent = null;\n  return !1;\n}\nvar scheduleTimeout = \"function\" === typeof setTimeout ? setTimeout : void 0,\n  cancelTimeout = \"function\" === typeof clearTimeout ? clearTimeout : void 0,\n  localPromise = \"function\" === typeof Promise ? Promise : void 0,\n  scheduleMicrotask =\n    \"function\" === typeof queueMicrotask\n      ? queueMicrotask\n      : \"undefined\" !== typeof localPromise\n        ? function (callback) {\n            return localPromise\n              .resolve(null)\n              .then(callback)\n              .catch(handleErrorInNextTick);\n          }\n        : scheduleTimeout;\nfunction handleErrorInNextTick(error) {\n  setTimeout(function () {\n    throw error;\n  });\n}\nfunction isSingletonScope(type) {\n  return \"head\" === type;\n}\nfunction clearHydrationBoundary(parentInstance, hydrationInstance) {\n  var node = hydrationInstance,\n    depth = 0;\n  do {\n    var nextNode = node.nextSibling;\n    parentInstance.removeChild(node);\n    if (nextNode && 8 === nextNode.nodeType)\n      if (((node = nextNode.data), \"/$\" === node || \"/&\" === node)) {\n        if (0 === depth) {\n          parentInstance.removeChild(nextNode);\n          retryIfBlockedOn(hydrationInstance);\n          return;\n        }\n        depth--;\n      } else if (\n        \"$\" === node ||\n        \"$?\" === node ||\n        \"$~\" === node ||\n        \"$!\" === node ||\n        \"&\" === node\n      )\n        depth++;\n      else if (\"html\" === node)\n        releaseSingletonInstance(parentInstance.ownerDocument.documentElement);\n      else if (\"head\" === node) {\n        node = parentInstance.ownerDocument.head;\n        releaseSingletonInstance(node);\n        for (var node$jscomp$0 = node.firstChild; node$jscomp$0; ) {\n          var nextNode$jscomp$0 = node$jscomp$0.nextSibling,\n            nodeName = node$jscomp$0.nodeName;\n          node$jscomp$0[internalHoistableMarker] ||\n            \"SCRIPT\" === nodeName ||\n            \"STYLE\" === nodeName ||\n            (\"LINK\" === nodeName &&\n              \"stylesheet\" === node$jscomp$0.rel.toLowerCase()) ||\n            node.removeChild(node$jscomp$0);\n          node$jscomp$0 = nextNode$jscomp$0;\n        }\n      } else\n        \"body\" === node &&\n          releaseSingletonInstance(parentInstance.ownerDocument.body);\n    node = nextNode;\n  } while (node);\n  retryIfBlockedOn(hydrationInstance);\n}\nfunction hideOrUnhideDehydratedBoundary(suspenseInstance, isHidden) {\n  var node = suspenseInstance;\n  suspenseInstance = 0;\n  do {\n    var nextNode = node.nextSibling;\n    1 === node.nodeType\n      ? isHidden\n        ? ((node._stashedDisplay = node.style.display),\n          (node.style.display = \"none\"))\n        : ((node.style.display = node._stashedDisplay || \"\"),\n          \"\" === node.getAttribute(\"style\") && node.removeAttribute(\"style\"))\n      : 3 === node.nodeType &&\n        (isHidden\n          ? ((node._stashedText = node.nodeValue), (node.nodeValue = \"\"))\n          : (node.nodeValue = node._stashedText || \"\"));\n    if (nextNode && 8 === nextNode.nodeType)\n      if (((node = nextNode.data), \"/$\" === node))\n        if (0 === suspenseInstance) break;\n        else suspenseInstance--;\n      else\n        (\"$\" !== node && \"$?\" !== node && \"$~\" !== node && \"$!\" !== node) ||\n          suspenseInstance++;\n    node = nextNode;\n  } while (node);\n}\nfunction clearContainerSparingly(container) {\n  var nextNode = container.firstChild;\n  nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling);\n  for (; nextNode; ) {\n    var node = nextNode;\n    nextNode = nextNode.nextSibling;\n    switch (node.nodeName) {\n      case \"HTML\":\n      case \"HEAD\":\n      case \"BODY\":\n        clearContainerSparingly(node);\n        detachDeletedInstance(node);\n        continue;\n      case \"SCRIPT\":\n      case \"STYLE\":\n        continue;\n      case \"LINK\":\n        if (\"stylesheet\" === node.rel.toLowerCase()) continue;\n    }\n    container.removeChild(node);\n  }\n}\nfunction canHydrateInstance(instance, type, props, inRootOrSingleton) {\n  for (; 1 === instance.nodeType; ) {\n    var anyProps = props;\n    if (instance.nodeName.toLowerCase() !== type.toLowerCase()) {\n      if (\n        !inRootOrSingleton &&\n        (\"INPUT\" !== instance.nodeName || \"hidden\" !== instance.type)\n      )\n        break;\n    } else if (!inRootOrSingleton)\n      if (\"input\" === type && \"hidden\" === instance.type) {\n        var name = null == anyProps.name ? null : \"\" + anyProps.name;\n        if (\n          \"hidden\" === anyProps.type &&\n          instance.getAttribute(\"name\") === name\n        )\n          return instance;\n      } else return instance;\n    else if (!instance[internalHoistableMarker])\n      switch (type) {\n        case \"meta\":\n          if (!instance.hasAttribute(\"itemprop\")) break;\n          return instance;\n        case \"link\":\n          name = instance.getAttribute(\"rel\");\n          if (\"stylesheet\" === name && instance.hasAttribute(\"data-precedence\"))\n            break;\n          else if (\n            name !== anyProps.rel ||\n            instance.getAttribute(\"href\") !==\n              (null == anyProps.href || \"\" === anyProps.href\n                ? null\n                : anyProps.href) ||\n            instance.getAttribute(\"crossorigin\") !==\n              (null == anyProps.crossOrigin ? null : anyProps.crossOrigin) ||\n            instance.getAttribute(\"title\") !==\n              (null == anyProps.title ? null : anyProps.title)\n          )\n            break;\n          return instance;\n        case \"style\":\n          if (instance.hasAttribute(\"data-precedence\")) break;\n          return instance;\n        case \"script\":\n          name = instance.getAttribute(\"src\");\n          if (\n            (name !== (null == anyProps.src ? null : anyProps.src) ||\n              instance.getAttribute(\"type\") !==\n                (null == anyProps.type ? null : anyProps.type) ||\n              instance.getAttribute(\"crossorigin\") !==\n                (null == anyProps.crossOrigin ? null : anyProps.crossOrigin)) &&\n            name &&\n            instance.hasAttribute(\"async\") &&\n            !instance.hasAttribute(\"itemprop\")\n          )\n            break;\n          return instance;\n        default:\n          return instance;\n      }\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) break;\n  }\n  return null;\n}\nfunction canHydrateTextInstance(instance, text, inRootOrSingleton) {\n  if (\"\" === text) return null;\n  for (; 3 !== instance.nodeType; ) {\n    if (\n      (1 !== instance.nodeType ||\n        \"INPUT\" !== instance.nodeName ||\n        \"hidden\" !== instance.type) &&\n      !inRootOrSingleton\n    )\n      return null;\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) return null;\n  }\n  return instance;\n}\nfunction canHydrateHydrationBoundary(instance, inRootOrSingleton) {\n  for (; 8 !== instance.nodeType; ) {\n    if (\n      (1 !== instance.nodeType ||\n        \"INPUT\" !== instance.nodeName ||\n        \"hidden\" !== instance.type) &&\n      !inRootOrSingleton\n    )\n      return null;\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) return null;\n  }\n  return instance;\n}\nfunction isSuspenseInstancePending(instance) {\n  return \"$?\" === instance.data || \"$~\" === instance.data;\n}\nfunction isSuspenseInstanceFallback(instance) {\n  return (\n    \"$!\" === instance.data ||\n    (\"$?\" === instance.data && \"loading\" !== instance.ownerDocument.readyState)\n  );\n}\nfunction registerSuspenseInstanceRetry(instance, callback) {\n  var ownerDocument = instance.ownerDocument;\n  if (\"$~\" === instance.data) instance._reactRetry = callback;\n  else if (\"$?\" !== instance.data || \"loading\" !== ownerDocument.readyState)\n    callback();\n  else {\n    var listener = function () {\n      callback();\n      ownerDocument.removeEventListener(\"DOMContentLoaded\", listener);\n    };\n    ownerDocument.addEventListener(\"DOMContentLoaded\", listener);\n    instance._reactRetry = listener;\n  }\n}\nfunction getNextHydratable(node) {\n  for (; null != node; node = node.nextSibling) {\n    var nodeType = node.nodeType;\n    if (1 === nodeType || 3 === nodeType) break;\n    if (8 === nodeType) {\n      nodeType = node.data;\n      if (\n        \"$\" === nodeType ||\n        \"$!\" === nodeType ||\n        \"$?\" === nodeType ||\n        \"$~\" === nodeType ||\n        \"&\" === nodeType ||\n        \"F!\" === nodeType ||\n        \"F\" === nodeType\n      )\n        break;\n      if (\"/$\" === nodeType || \"/&\" === nodeType) return null;\n    }\n  }\n  return node;\n}\nvar previousHydratableOnEnteringScopedSingleton = null;\nfunction getNextHydratableInstanceAfterHydrationBoundary(hydrationInstance) {\n  hydrationInstance = hydrationInstance.nextSibling;\n  for (var depth = 0; hydrationInstance; ) {\n    if (8 === hydrationInstance.nodeType) {\n      var data = hydrationInstance.data;\n      if (\"/$\" === data || \"/&\" === data) {\n        if (0 === depth)\n          return getNextHydratable(hydrationInstance.nextSibling);\n        depth--;\n      } else\n        (\"$\" !== data &&\n          \"$!\" !== data &&\n          \"$?\" !== data &&\n          \"$~\" !== data &&\n          \"&\" !== data) ||\n          depth++;\n    }\n    hydrationInstance = hydrationInstance.nextSibling;\n  }\n  return null;\n}\nfunction getParentHydrationBoundary(targetInstance) {\n  targetInstance = targetInstance.previousSibling;\n  for (var depth = 0; targetInstance; ) {\n    if (8 === targetInstance.nodeType) {\n      var data = targetInstance.data;\n      if (\n        \"$\" === data ||\n        \"$!\" === data ||\n        \"$?\" === data ||\n        \"$~\" === data ||\n        \"&\" === data\n      ) {\n        if (0 === depth) return targetInstance;\n        depth--;\n      } else (\"/$\" !== data && \"/&\" !== data) || depth++;\n    }\n    targetInstance = targetInstance.previousSibling;\n  }\n  return null;\n}\nfunction resolveSingletonInstance(type, props, rootContainerInstance) {\n  props = getOwnerDocumentFromRootContainer(rootContainerInstance);\n  switch (type) {\n    case \"html\":\n      type = props.documentElement;\n      if (!type) throw Error(formatProdErrorMessage(452));\n      return type;\n    case \"head\":\n      type = props.head;\n      if (!type) throw Error(formatProdErrorMessage(453));\n      return type;\n    case \"body\":\n      type = props.body;\n      if (!type) throw Error(formatProdErrorMessage(454));\n      return type;\n    default:\n      throw Error(formatProdErrorMessage(451));\n  }\n}\nfunction releaseSingletonInstance(instance) {\n  for (var attributes = instance.attributes; attributes.length; )\n    instance.removeAttributeNode(attributes[0]);\n  detachDeletedInstance(instance);\n}\nvar preloadPropsMap = new Map(),\n  preconnectsSet = new Set();\nfunction getHoistableRoot(container) {\n  return \"function\" === typeof container.getRootNode\n    ? container.getRootNode()\n    : 9 === container.nodeType\n      ? container\n      : container.ownerDocument;\n}\nvar previousDispatcher = ReactDOMSharedInternals.d;\nReactDOMSharedInternals.d = {\n  f: flushSyncWork,\n  r: requestFormReset,\n  D: prefetchDNS,\n  C: preconnect,\n  L: preload,\n  m: preloadModule,\n  X: preinitScript,\n  S: preinitStyle,\n  M: preinitModuleScript\n};\nfunction flushSyncWork() {\n  var previousWasRendering = previousDispatcher.f(),\n    wasRendering = flushSyncWork$1();\n  return previousWasRendering || wasRendering;\n}\nfunction requestFormReset(form) {\n  var formInst = getInstanceFromNode(form);\n  null !== formInst && 5 === formInst.tag && \"form\" === formInst.type\n    ? requestFormReset$1(formInst)\n    : previousDispatcher.r(form);\n}\nvar globalDocument = \"undefined\" === typeof document ? null : document;\nfunction preconnectAs(rel, href, crossOrigin) {\n  var ownerDocument = globalDocument;\n  if (ownerDocument && \"string\" === typeof href && href) {\n    var limitedEscapedHref =\n      escapeSelectorAttributeValueInsideDoubleQuotes(href);\n    limitedEscapedHref =\n      'link[rel=\"' + rel + '\"][href=\"' + limitedEscapedHref + '\"]';\n    \"string\" === typeof crossOrigin &&\n      (limitedEscapedHref += '[crossorigin=\"' + crossOrigin + '\"]');\n    preconnectsSet.has(limitedEscapedHref) ||\n      (preconnectsSet.add(limitedEscapedHref),\n      (rel = { rel: rel, crossOrigin: crossOrigin, href: href }),\n      null === ownerDocument.querySelector(limitedEscapedHref) &&\n        ((href = ownerDocument.createElement(\"link\")),\n        setInitialProperties(href, \"link\", rel),\n        markNodeAsHoistable(href),\n        ownerDocument.head.appendChild(href)));\n  }\n}\nfunction prefetchDNS(href) {\n  previousDispatcher.D(href);\n  preconnectAs(\"dns-prefetch\", href, null);\n}\nfunction preconnect(href, crossOrigin) {\n  previousDispatcher.C(href, crossOrigin);\n  preconnectAs(\"preconnect\", href, crossOrigin);\n}\nfunction preload(href, as, options) {\n  previousDispatcher.L(href, as, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href && as) {\n    var preloadSelector =\n      'link[rel=\"preload\"][as=\"' +\n      escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n      '\"]';\n    \"image\" === as\n      ? options && options.imageSrcSet\n        ? ((preloadSelector +=\n            '[imagesrcset=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(\n              options.imageSrcSet\n            ) +\n            '\"]'),\n          \"string\" === typeof options.imageSizes &&\n            (preloadSelector +=\n              '[imagesizes=\"' +\n              escapeSelectorAttributeValueInsideDoubleQuotes(\n                options.imageSizes\n              ) +\n              '\"]'))\n        : (preloadSelector +=\n            '[href=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n            '\"]')\n      : (preloadSelector +=\n          '[href=\"' +\n          escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n          '\"]');\n    var key = preloadSelector;\n    switch (as) {\n      case \"style\":\n        key = getStyleKey(href);\n        break;\n      case \"script\":\n        key = getScriptKey(href);\n    }\n    preloadPropsMap.has(key) ||\n      ((href = assign(\n        {\n          rel: \"preload\",\n          href:\n            \"image\" === as && options && options.imageSrcSet ? void 0 : href,\n          as: as\n        },\n        options\n      )),\n      preloadPropsMap.set(key, href),\n      null !== ownerDocument.querySelector(preloadSelector) ||\n        (\"style\" === as &&\n          ownerDocument.querySelector(getStylesheetSelectorFromKey(key))) ||\n        (\"script\" === as &&\n          ownerDocument.querySelector(getScriptSelectorFromKey(key))) ||\n        ((as = ownerDocument.createElement(\"link\")),\n        setInitialProperties(as, \"link\", href),\n        markNodeAsHoistable(as),\n        ownerDocument.head.appendChild(as)));\n  }\n}\nfunction preloadModule(href, options) {\n  previousDispatcher.m(href, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href) {\n    var as = options && \"string\" === typeof options.as ? options.as : \"script\",\n      preloadSelector =\n        'link[rel=\"modulepreload\"][as=\"' +\n        escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n        '\"][href=\"' +\n        escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n        '\"]',\n      key = preloadSelector;\n    switch (as) {\n      case \"audioworklet\":\n      case \"paintworklet\":\n      case \"serviceworker\":\n      case \"sharedworker\":\n      case \"worker\":\n      case \"script\":\n        key = getScriptKey(href);\n    }\n    if (\n      !preloadPropsMap.has(key) &&\n      ((href = assign({ rel: \"modulepreload\", href: href }, options)),\n      preloadPropsMap.set(key, href),\n      null === ownerDocument.querySelector(preloadSelector))\n    ) {\n      switch (as) {\n        case \"audioworklet\":\n        case \"paintworklet\":\n        case \"serviceworker\":\n        case \"sharedworker\":\n        case \"worker\":\n        case \"script\":\n          if (ownerDocument.querySelector(getScriptSelectorFromKey(key)))\n            return;\n      }\n      as = ownerDocument.createElement(\"link\");\n      setInitialProperties(as, \"link\", href);\n      markNodeAsHoistable(as);\n      ownerDocument.head.appendChild(as);\n    }\n  }\n}\nfunction preinitStyle(href, precedence, options) {\n  previousDispatcher.S(href, precedence, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href) {\n    var styles = getResourcesFromRoot(ownerDocument).hoistableStyles,\n      key = getStyleKey(href);\n    precedence = precedence || \"default\";\n    var resource = styles.get(key);\n    if (!resource) {\n      var state = { loading: 0, preload: null };\n      if (\n        (resource = ownerDocument.querySelector(\n          getStylesheetSelectorFromKey(key)\n        ))\n      )\n        state.loading = 5;\n      else {\n        href = assign(\n          { rel: \"stylesheet\", href: href, \"data-precedence\": precedence },\n          options\n        );\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForStylesheet(href, options);\n        var link = (resource = ownerDocument.createElement(\"link\"));\n        markNodeAsHoistable(link);\n        setInitialProperties(link, \"link\", href);\n        link._p = new Promise(function (resolve, reject) {\n          link.onload = resolve;\n          link.onerror = reject;\n        });\n        link.addEventListener(\"load\", function () {\n          state.loading |= 1;\n        });\n        link.addEventListener(\"error\", function () {\n          state.loading |= 2;\n        });\n        state.loading |= 4;\n        insertStylesheet(resource, precedence, ownerDocument);\n      }\n      resource = {\n        type: \"stylesheet\",\n        instance: resource,\n        count: 1,\n        state: state\n      };\n      styles.set(key, resource);\n    }\n  }\n}\nfunction preinitScript(src, options) {\n  previousDispatcher.X(src, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && src) {\n    var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n      key = getScriptKey(src),\n      resource = scripts.get(key);\n    resource ||\n      ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n      resource ||\n        ((src = assign({ src: src, async: !0 }, options)),\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForScript(src, options),\n        (resource = ownerDocument.createElement(\"script\")),\n        markNodeAsHoistable(resource),\n        setInitialProperties(resource, \"link\", src),\n        ownerDocument.head.appendChild(resource)),\n      (resource = {\n        type: \"script\",\n        instance: resource,\n        count: 1,\n        state: null\n      }),\n      scripts.set(key, resource));\n  }\n}\nfunction preinitModuleScript(src, options) {\n  previousDispatcher.M(src, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && src) {\n    var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n      key = getScriptKey(src),\n      resource = scripts.get(key);\n    resource ||\n      ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n      resource ||\n        ((src = assign({ src: src, async: !0, type: \"module\" }, options)),\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForScript(src, options),\n        (resource = ownerDocument.createElement(\"script\")),\n        markNodeAsHoistable(resource),\n        setInitialProperties(resource, \"link\", src),\n        ownerDocument.head.appendChild(resource)),\n      (resource = {\n        type: \"script\",\n        instance: resource,\n        count: 1,\n        state: null\n      }),\n      scripts.set(key, resource));\n  }\n}\nfunction getResource(type, currentProps, pendingProps, currentResource) {\n  var JSCompiler_inline_result = (JSCompiler_inline_result =\n    rootInstanceStackCursor.current)\n    ? getHoistableRoot(JSCompiler_inline_result)\n    : null;\n  if (!JSCompiler_inline_result) throw Error(formatProdErrorMessage(446));\n  switch (type) {\n    case \"meta\":\n    case \"title\":\n      return null;\n    case \"style\":\n      return \"string\" === typeof pendingProps.precedence &&\n        \"string\" === typeof pendingProps.href\n        ? ((currentProps = getStyleKey(pendingProps.href)),\n          (pendingProps = getResourcesFromRoot(\n            JSCompiler_inline_result\n          ).hoistableStyles),\n          (currentResource = pendingProps.get(currentProps)),\n          currentResource ||\n            ((currentResource = {\n              type: \"style\",\n              instance: null,\n              count: 0,\n              state: null\n            }),\n            pendingProps.set(currentProps, currentResource)),\n          currentResource)\n        : { type: \"void\", instance: null, count: 0, state: null };\n    case \"link\":\n      if (\n        \"stylesheet\" === pendingProps.rel &&\n        \"string\" === typeof pendingProps.href &&\n        \"string\" === typeof pendingProps.precedence\n      ) {\n        type = getStyleKey(pendingProps.href);\n        var styles$243 = getResourcesFromRoot(\n            JSCompiler_inline_result\n          ).hoistableStyles,\n          resource$244 = styles$243.get(type);\n        resource$244 ||\n          ((JSCompiler_inline_result =\n            JSCompiler_inline_result.ownerDocument || JSCompiler_inline_result),\n          (resource$244 = {\n            type: \"stylesheet\",\n            instance: null,\n            count: 0,\n            state: { loading: 0, preload: null }\n          }),\n          styles$243.set(type, resource$244),\n          (styles$243 = JSCompiler_inline_result.querySelector(\n            getStylesheetSelectorFromKey(type)\n          )) &&\n            !styles$243._p &&\n            ((resource$244.instance = styles$243),\n            (resource$244.state.loading = 5)),\n          preloadPropsMap.has(type) ||\n            ((pendingProps = {\n              rel: \"preload\",\n              as: \"style\",\n              href: pendingProps.href,\n              crossOrigin: pendingProps.crossOrigin,\n              integrity: pendingProps.integrity,\n              media: pendingProps.media,\n              hrefLang: pendingProps.hrefLang,\n              referrerPolicy: pendingProps.referrerPolicy\n            }),\n            preloadPropsMap.set(type, pendingProps),\n            styles$243 ||\n              preloadStylesheet(\n                JSCompiler_inline_result,\n                type,\n                pendingProps,\n                resource$244.state\n              )));\n        if (currentProps && null === currentResource)\n          throw Error(formatProdErrorMessage(528, \"\"));\n        return resource$244;\n      }\n      if (currentProps && null !== currentResource)\n        throw Error(formatProdErrorMessage(529, \"\"));\n      return null;\n    case \"script\":\n      return (\n        (currentProps = pendingProps.async),\n        (pendingProps = pendingProps.src),\n        \"string\" === typeof pendingProps &&\n        currentProps &&\n        \"function\" !== typeof currentProps &&\n        \"symbol\" !== typeof currentProps\n          ? ((currentProps = getScriptKey(pendingProps)),\n            (pendingProps = getResourcesFromRoot(\n              JSCompiler_inline_result\n            ).hoistableScripts),\n            (currentResource = pendingProps.get(currentProps)),\n            currentResource ||\n              ((currentResource = {\n                type: \"script\",\n                instance: null,\n                count: 0,\n                state: null\n              }),\n              pendingProps.set(currentProps, currentResource)),\n            currentResource)\n          : { type: \"void\", instance: null, count: 0, state: null }\n      );\n    default:\n      throw Error(formatProdErrorMessage(444, type));\n  }\n}\nfunction getStyleKey(href) {\n  return 'href=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '\"';\n}\nfunction getStylesheetSelectorFromKey(key) {\n  return 'link[rel=\"stylesheet\"][' + key + \"]\";\n}\nfunction stylesheetPropsFromRawProps(rawProps) {\n  return assign({}, rawProps, {\n    \"data-precedence\": rawProps.precedence,\n    precedence: null\n  });\n}\nfunction preloadStylesheet(ownerDocument, key, preloadProps, state) {\n  ownerDocument.querySelector('link[rel=\"preload\"][as=\"style\"][' + key + \"]\")\n    ? (state.loading = 1)\n    : ((key = ownerDocument.createElement(\"link\")),\n      (state.preload = key),\n      key.addEventListener(\"load\", function () {\n        return (state.loading |= 1);\n      }),\n      key.addEventListener(\"error\", function () {\n        return (state.loading |= 2);\n      }),\n      setInitialProperties(key, \"link\", preloadProps),\n      markNodeAsHoistable(key),\n      ownerDocument.head.appendChild(key));\n}\nfunction getScriptKey(src) {\n  return '[src=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(src) + '\"]';\n}\nfunction getScriptSelectorFromKey(key) {\n  return \"script[async]\" + key;\n}\nfunction acquireResource(hoistableRoot, resource, props) {\n  resource.count++;\n  if (null === resource.instance)\n    switch (resource.type) {\n      case \"style\":\n        var instance = hoistableRoot.querySelector(\n          'style[data-href~=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(props.href) +\n            '\"]'\n        );\n        if (instance)\n          return (\n            (resource.instance = instance),\n            markNodeAsHoistable(instance),\n            instance\n          );\n        var styleProps = assign({}, props, {\n          \"data-href\": props.href,\n          \"data-precedence\": props.precedence,\n          href: null,\n          precedence: null\n        });\n        instance = (hoistableRoot.ownerDocument || hoistableRoot).createElement(\n          \"style\"\n        );\n        markNodeAsHoistable(instance);\n        setInitialProperties(instance, \"style\", styleProps);\n        insertStylesheet(instance, props.precedence, hoistableRoot);\n        return (resource.instance = instance);\n      case \"stylesheet\":\n        styleProps = getStyleKey(props.href);\n        var instance$249 = hoistableRoot.querySelector(\n          getStylesheetSelectorFromKey(styleProps)\n        );\n        if (instance$249)\n          return (\n            (resource.state.loading |= 4),\n            (resource.instance = instance$249),\n            markNodeAsHoistable(instance$249),\n            instance$249\n          );\n        instance = stylesheetPropsFromRawProps(props);\n        (styleProps = preloadPropsMap.get(styleProps)) &&\n          adoptPreloadPropsForStylesheet(instance, styleProps);\n        instance$249 = (\n          hoistableRoot.ownerDocument || hoistableRoot\n        ).createElement(\"link\");\n        markNodeAsHoistable(instance$249);\n        var linkInstance = instance$249;\n        linkInstance._p = new Promise(function (resolve, reject) {\n          linkInstance.onload = resolve;\n          linkInstance.onerror = reject;\n        });\n        setInitialProperties(instance$249, \"link\", instance);\n        resource.state.loading |= 4;\n        insertStylesheet(instance$249, props.precedence, hoistableRoot);\n        return (resource.instance = instance$249);\n      case \"script\":\n        instance$249 = getScriptKey(props.src);\n        if (\n          (styleProps = hoistableRoot.querySelector(\n            getScriptSelectorFromKey(instance$249)\n          ))\n        )\n          return (\n            (resource.instance = styleProps),\n            markNodeAsHoistable(styleProps),\n            styleProps\n          );\n        instance = props;\n        if ((styleProps = preloadPropsMap.get(instance$249)))\n          (instance = assign({}, props)),\n            adoptPreloadPropsForScript(instance, styleProps);\n        hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n        styleProps = hoistableRoot.createElement(\"script\");\n        markNodeAsHoistable(styleProps);\n        setInitialProperties(styleProps, \"link\", instance);\n        hoistableRoot.head.appendChild(styleProps);\n        return (resource.instance = styleProps);\n      case \"void\":\n        return null;\n      default:\n        throw Error(formatProdErrorMessage(443, resource.type));\n    }\n  else\n    \"stylesheet\" === resource.type &&\n      0 === (resource.state.loading & 4) &&\n      ((instance = resource.instance),\n      (resource.state.loading |= 4),\n      insertStylesheet(instance, props.precedence, hoistableRoot));\n  return resource.instance;\n}\nfunction insertStylesheet(instance, precedence, root) {\n  for (\n    var nodes = root.querySelectorAll(\n        'link[rel=\"stylesheet\"][data-precedence],style[data-precedence]'\n      ),\n      last = nodes.length ? nodes[nodes.length - 1] : null,\n      prior = last,\n      i = 0;\n    i < nodes.length;\n    i++\n  ) {\n    var node = nodes[i];\n    if (node.dataset.precedence === precedence) prior = node;\n    else if (prior !== last) break;\n  }\n  prior\n    ? prior.parentNode.insertBefore(instance, prior.nextSibling)\n    : ((precedence = 9 === root.nodeType ? root.head : root),\n      precedence.insertBefore(instance, precedence.firstChild));\n}\nfunction adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps) {\n  null == stylesheetProps.crossOrigin &&\n    (stylesheetProps.crossOrigin = preloadProps.crossOrigin);\n  null == stylesheetProps.referrerPolicy &&\n    (stylesheetProps.referrerPolicy = preloadProps.referrerPolicy);\n  null == stylesheetProps.title && (stylesheetProps.title = preloadProps.title);\n}\nfunction adoptPreloadPropsForScript(scriptProps, preloadProps) {\n  null == scriptProps.crossOrigin &&\n    (scriptProps.crossOrigin = preloadProps.crossOrigin);\n  null == scriptProps.referrerPolicy &&\n    (scriptProps.referrerPolicy = preloadProps.referrerPolicy);\n  null == scriptProps.integrity &&\n    (scriptProps.integrity = preloadProps.integrity);\n}\nvar tagCaches = null;\nfunction getHydratableHoistableCache(type, keyAttribute, ownerDocument) {\n  if (null === tagCaches) {\n    var cache = new Map();\n    var caches = (tagCaches = new Map());\n    caches.set(ownerDocument, cache);\n  } else\n    (caches = tagCaches),\n      (cache = caches.get(ownerDocument)),\n      cache || ((cache = new Map()), caches.set(ownerDocument, cache));\n  if (cache.has(type)) return cache;\n  cache.set(type, null);\n  ownerDocument = ownerDocument.getElementsByTagName(type);\n  for (caches = 0; caches < ownerDocument.length; caches++) {\n    var node = ownerDocument[caches];\n    if (\n      !(\n        node[internalHoistableMarker] ||\n        node[internalInstanceKey] ||\n        (\"link\" === type && \"stylesheet\" === node.getAttribute(\"rel\"))\n      ) &&\n      \"http://www.w3.org/2000/svg\" !== node.namespaceURI\n    ) {\n      var nodeKey = node.getAttribute(keyAttribute) || \"\";\n      nodeKey = type + nodeKey;\n      var existing = cache.get(nodeKey);\n      existing ? existing.push(node) : cache.set(nodeKey, [node]);\n    }\n  }\n  return cache;\n}\nfunction mountHoistable(hoistableRoot, type, instance) {\n  hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n  hoistableRoot.head.insertBefore(\n    instance,\n    \"title\" === type ? hoistableRoot.querySelector(\"head > title\") : null\n  );\n}\nfunction isHostHoistableType(type, props, hostContext) {\n  if (1 === hostContext || null != props.itemProp) return !1;\n  switch (type) {\n    case \"meta\":\n    case \"title\":\n      return !0;\n    case \"style\":\n      if (\n        \"string\" !== typeof props.precedence ||\n        \"string\" !== typeof props.href ||\n        \"\" === props.href\n      )\n        break;\n      return !0;\n    case \"link\":\n      if (\n        \"string\" !== typeof props.rel ||\n        \"string\" !== typeof props.href ||\n        \"\" === props.href ||\n        props.onLoad ||\n        props.onError\n      )\n        break;\n      switch (props.rel) {\n        case \"stylesheet\":\n          return (\n            (type = props.disabled),\n            \"string\" === typeof props.precedence && null == type\n          );\n        default:\n          return !0;\n      }\n    case \"script\":\n      if (\n        props.async &&\n        \"function\" !== typeof props.async &&\n        \"symbol\" !== typeof props.async &&\n        !props.onLoad &&\n        !props.onError &&\n        props.src &&\n        \"string\" === typeof props.src\n      )\n        return !0;\n  }\n  return !1;\n}\nfunction preloadResource(resource) {\n  return \"stylesheet\" === resource.type && 0 === (resource.state.loading & 3)\n    ? !1\n    : !0;\n}\nfunction suspendResource(state, hoistableRoot, resource, props) {\n  if (\n    \"stylesheet\" === resource.type &&\n    (\"string\" !== typeof props.media ||\n      !1 !== matchMedia(props.media).matches) &&\n    0 === (resource.state.loading & 4)\n  ) {\n    if (null === resource.instance) {\n      var key = getStyleKey(props.href),\n        instance = hoistableRoot.querySelector(\n          getStylesheetSelectorFromKey(key)\n        );\n      if (instance) {\n        hoistableRoot = instance._p;\n        null !== hoistableRoot &&\n          \"object\" === typeof hoistableRoot &&\n          \"function\" === typeof hoistableRoot.then &&\n          (state.count++,\n          (state = onUnsuspend.bind(state)),\n          hoistableRoot.then(state, state));\n        resource.state.loading |= 4;\n        resource.instance = instance;\n        markNodeAsHoistable(instance);\n        return;\n      }\n      instance = hoistableRoot.ownerDocument || hoistableRoot;\n      props = stylesheetPropsFromRawProps(props);\n      (key = preloadPropsMap.get(key)) &&\n        adoptPreloadPropsForStylesheet(props, key);\n      instance = instance.createElement(\"link\");\n      markNodeAsHoistable(instance);\n      var linkInstance = instance;\n      linkInstance._p = new Promise(function (resolve, reject) {\n        linkInstance.onload = resolve;\n        linkInstance.onerror = reject;\n      });\n      setInitialProperties(instance, \"link\", props);\n      resource.instance = instance;\n    }\n    null === state.stylesheets && (state.stylesheets = new Map());\n    state.stylesheets.set(resource, hoistableRoot);\n    (hoistableRoot = resource.state.preload) &&\n      0 === (resource.state.loading & 3) &&\n      (state.count++,\n      (resource = onUnsuspend.bind(state)),\n      hoistableRoot.addEventListener(\"load\", resource),\n      hoistableRoot.addEventListener(\"error\", resource));\n  }\n}\nvar estimatedBytesWithinLimit = 0;\nfunction waitForCommitToBeReady(state, timeoutOffset) {\n  state.stylesheets &&\n    0 === state.count &&\n    insertSuspendedStylesheets(state, state.stylesheets);\n  return 0 < state.count || 0 < state.imgCount\n    ? function (commit) {\n        var stylesheetTimer = setTimeout(function () {\n          state.stylesheets &&\n            insertSuspendedStylesheets(state, state.stylesheets);\n          if (state.unsuspend) {\n            var unsuspend = state.unsuspend;\n            state.unsuspend = null;\n            unsuspend();\n          }\n        }, 6e4 + timeoutOffset);\n        0 < state.imgBytes &&\n          0 === estimatedBytesWithinLimit &&\n          (estimatedBytesWithinLimit = 62500 * estimateBandwidth());\n        var imgTimer = setTimeout(\n          function () {\n            state.waitingForImages = !1;\n            if (\n              0 === state.count &&\n              (state.stylesheets &&\n                insertSuspendedStylesheets(state, state.stylesheets),\n              state.unsuspend)\n            ) {\n              var unsuspend = state.unsuspend;\n              state.unsuspend = null;\n              unsuspend();\n            }\n          },\n          (state.imgBytes > estimatedBytesWithinLimit ? 50 : 800) +\n            timeoutOffset\n        );\n        state.unsuspend = commit;\n        return function () {\n          state.unsuspend = null;\n          clearTimeout(stylesheetTimer);\n          clearTimeout(imgTimer);\n        };\n      }\n    : null;\n}\nfunction onUnsuspend() {\n  this.count--;\n  if (0 === this.count && (0 === this.imgCount || !this.waitingForImages))\n    if (this.stylesheets) insertSuspendedStylesheets(this, this.stylesheets);\n    else if (this.unsuspend) {\n      var unsuspend = this.unsuspend;\n      this.unsuspend = null;\n      unsuspend();\n    }\n}\nvar precedencesByRoot = null;\nfunction insertSuspendedStylesheets(state, resources) {\n  state.stylesheets = null;\n  null !== state.unsuspend &&\n    (state.count++,\n    (precedencesByRoot = new Map()),\n    resources.forEach(insertStylesheetIntoRoot, state),\n    (precedencesByRoot = null),\n    onUnsuspend.call(state));\n}\nfunction insertStylesheetIntoRoot(root, resource) {\n  if (!(resource.state.loading & 4)) {\n    var precedences = precedencesByRoot.get(root);\n    if (precedences) var last = precedences.get(null);\n    else {\n      precedences = new Map();\n      precedencesByRoot.set(root, precedences);\n      for (\n        var nodes = root.querySelectorAll(\n            \"link[data-precedence],style[data-precedence]\"\n          ),\n          i = 0;\n        i < nodes.length;\n        i++\n      ) {\n        var node = nodes[i];\n        if (\n          \"LINK\" === node.nodeName ||\n          \"not all\" !== node.getAttribute(\"media\")\n        )\n          precedences.set(node.dataset.precedence, node), (last = node);\n      }\n      last && precedences.set(null, last);\n    }\n    nodes = resource.instance;\n    node = nodes.getAttribute(\"data-precedence\");\n    i = precedences.get(node) || last;\n    i === last && precedences.set(null, nodes);\n    precedences.set(node, nodes);\n    this.count++;\n    last = onUnsuspend.bind(this);\n    nodes.addEventListener(\"load\", last);\n    nodes.addEventListener(\"error\", last);\n    i\n      ? i.parentNode.insertBefore(nodes, i.nextSibling)\n      : ((root = 9 === root.nodeType ? root.head : root),\n        root.insertBefore(nodes, root.firstChild));\n    resource.state.loading |= 4;\n  }\n}\nvar HostTransitionContext = {\n  $$typeof: REACT_CONTEXT_TYPE,\n  Provider: null,\n  Consumer: null,\n  _currentValue: sharedNotPendingObject,\n  _currentValue2: sharedNotPendingObject,\n  _threadCount: 0\n};\nfunction FiberRootNode(\n  containerInfo,\n  tag,\n  hydrate,\n  identifierPrefix,\n  onUncaughtError,\n  onCaughtError,\n  onRecoverableError,\n  onDefaultTransitionIndicator,\n  formState\n) {\n  this.tag = 1;\n  this.containerInfo = containerInfo;\n  this.pingCache = this.current = this.pendingChildren = null;\n  this.timeoutHandle = -1;\n  this.callbackNode =\n    this.next =\n    this.pendingContext =\n    this.context =\n    this.cancelPendingCommit =\n      null;\n  this.callbackPriority = 0;\n  this.expirationTimes = createLaneMap(-1);\n  this.entangledLanes =\n    this.shellSuspendCounter =\n    this.errorRecoveryDisabledLanes =\n    this.expiredLanes =\n    this.warmLanes =\n    this.pingedLanes =\n    this.suspendedLanes =\n    this.pendingLanes =\n      0;\n  this.entanglements = createLaneMap(0);\n  this.hiddenUpdates = createLaneMap(null);\n  this.identifierPrefix = identifierPrefix;\n  this.onUncaughtError = onUncaughtError;\n  this.onCaughtError = onCaughtError;\n  this.onRecoverableError = onRecoverableError;\n  this.pooledCache = null;\n  this.pooledCacheLanes = 0;\n  this.formState = formState;\n  this.incompleteTransitions = new Map();\n}\nfunction createFiberRoot(\n  containerInfo,\n  tag,\n  hydrate,\n  initialChildren,\n  hydrationCallbacks,\n  isStrictMode,\n  identifierPrefix,\n  formState,\n  onUncaughtError,\n  onCaughtError,\n  onRecoverableError,\n  onDefaultTransitionIndicator\n) {\n  containerInfo = new FiberRootNode(\n    containerInfo,\n    tag,\n    hydrate,\n    identifierPrefix,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    onDefaultTransitionIndicator,\n    formState\n  );\n  tag = 1;\n  !0 === isStrictMode && (tag |= 24);\n  isStrictMode = createFiberImplClass(3, null, null, tag);\n  containerInfo.current = isStrictMode;\n  isStrictMode.stateNode = containerInfo;\n  tag = createCache();\n  tag.refCount++;\n  containerInfo.pooledCache = tag;\n  tag.refCount++;\n  isStrictMode.memoizedState = {\n    element: initialChildren,\n    isDehydrated: hydrate,\n    cache: tag\n  };\n  initializeUpdateQueue(isStrictMode);\n  return containerInfo;\n}\nfunction getContextForSubtree(parentComponent) {\n  if (!parentComponent) return emptyContextObject;\n  parentComponent = emptyContextObject;\n  return parentComponent;\n}\nfunction updateContainerImpl(\n  rootFiber,\n  lane,\n  element,\n  container,\n  parentComponent,\n  callback\n) {\n  parentComponent = getContextForSubtree(parentComponent);\n  null === container.context\n    ? (container.context = parentComponent)\n    : (container.pendingContext = parentComponent);\n  container = createUpdate(lane);\n  container.payload = { element: element };\n  callback = void 0 === callback ? null : callback;\n  null !== callback && (container.callback = callback);\n  element = enqueueUpdate(rootFiber, container, lane);\n  null !== element &&\n    (scheduleUpdateOnFiber(element, rootFiber, lane),\n    entangleTransitions(element, rootFiber, lane));\n}\nfunction markRetryLaneImpl(fiber, retryLane) {\n  fiber = fiber.memoizedState;\n  if (null !== fiber && null !== fiber.dehydrated) {\n    var a = fiber.retryLane;\n    fiber.retryLane = 0 !== a && a < retryLane ? a : retryLane;\n  }\n}\nfunction markRetryLaneIfNotHydrated(fiber, retryLane) {\n  markRetryLaneImpl(fiber, retryLane);\n  (fiber = fiber.alternate) && markRetryLaneImpl(fiber, retryLane);\n}\nfunction attemptContinuousHydration(fiber) {\n  if (13 === fiber.tag || 31 === fiber.tag) {\n    var root = enqueueConcurrentRenderForLane(fiber, 67108864);\n    null !== root && scheduleUpdateOnFiber(root, fiber, 67108864);\n    markRetryLaneIfNotHydrated(fiber, 67108864);\n  }\n}\nfunction attemptHydrationAtCurrentPriority(fiber) {\n  if (13 === fiber.tag || 31 === fiber.tag) {\n    var lane = requestUpdateLane();\n    lane = getBumpedLaneForHydrationByLane(lane);\n    var root = enqueueConcurrentRenderForLane(fiber, lane);\n    null !== root && scheduleUpdateOnFiber(root, fiber, lane);\n    markRetryLaneIfNotHydrated(fiber, lane);\n  }\n}\nvar _enabled = !0;\nfunction dispatchDiscreteEvent(\n  domEventName,\n  eventSystemFlags,\n  container,\n  nativeEvent\n) {\n  var prevTransition = ReactSharedInternals.T;\n  ReactSharedInternals.T = null;\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    (ReactDOMSharedInternals.p = 2),\n      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction dispatchContinuousEvent(\n  domEventName,\n  eventSystemFlags,\n  container,\n  nativeEvent\n) {\n  var prevTransition = ReactSharedInternals.T;\n  ReactSharedInternals.T = null;\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    (ReactDOMSharedInternals.p = 8),\n      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction dispatchEvent(\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  if (_enabled) {\n    var blockedOn = findInstanceBlockingEvent(nativeEvent);\n    if (null === blockedOn)\n      dispatchEventForPluginEventSystem(\n        domEventName,\n        eventSystemFlags,\n        nativeEvent,\n        return_targetInst,\n        targetContainer\n      ),\n        clearIfContinuousEvent(domEventName, nativeEvent);\n    else if (\n      queueIfContinuousEvent(\n        blockedOn,\n        domEventName,\n        eventSystemFlags,\n        targetContainer,\n        nativeEvent\n      )\n    )\n      nativeEvent.stopPropagation();\n    else if (\n      (clearIfContinuousEvent(domEventName, nativeEvent),\n      eventSystemFlags & 4 &&\n        -1 < discreteReplayableEvents.indexOf(domEventName))\n    ) {\n      for (; null !== blockedOn; ) {\n        var fiber = getInstanceFromNode(blockedOn);\n        if (null !== fiber)\n          switch (fiber.tag) {\n            case 3:\n              fiber = fiber.stateNode;\n              if (fiber.current.memoizedState.isDehydrated) {\n                var lanes = getHighestPriorityLanes(fiber.pendingLanes);\n                if (0 !== lanes) {\n                  var root = fiber;\n                  root.pendingLanes |= 2;\n                  for (root.entangledLanes |= 2; lanes; ) {\n                    var lane = 1 << (31 - clz32(lanes));\n                    root.entanglements[1] |= lane;\n                    lanes &= ~lane;\n                  }\n                  ensureRootIsScheduled(fiber);\n                  0 === (executionContext & 6) &&\n                    ((workInProgressRootRenderTargetTime = now() + 500),\n                    flushSyncWorkAcrossRoots_impl(0, !1));\n                }\n              }\n              break;\n            case 31:\n            case 13:\n              (root = enqueueConcurrentRenderForLane(fiber, 2)),\n                null !== root && scheduleUpdateOnFiber(root, fiber, 2),\n                flushSyncWork$1(),\n                markRetryLaneIfNotHydrated(fiber, 2);\n          }\n        fiber = findInstanceBlockingEvent(nativeEvent);\n        null === fiber &&\n          dispatchEventForPluginEventSystem(\n            domEventName,\n            eventSystemFlags,\n            nativeEvent,\n            return_targetInst,\n            targetContainer\n          );\n        if (fiber === blockedOn) break;\n        blockedOn = fiber;\n      }\n      null !== blockedOn && nativeEvent.stopPropagation();\n    } else\n      dispatchEventForPluginEventSystem(\n        domEventName,\n        eventSystemFlags,\n        nativeEvent,\n        null,\n        targetContainer\n      );\n  }\n}\nfunction findInstanceBlockingEvent(nativeEvent) {\n  nativeEvent = getEventTarget(nativeEvent);\n  return findInstanceBlockingTarget(nativeEvent);\n}\nvar return_targetInst = null;\nfunction findInstanceBlockingTarget(targetNode) {\n  return_targetInst = null;\n  targetNode = getClosestInstanceFromNode(targetNode);\n  if (null !== targetNode) {\n    var nearestMounted = getNearestMountedFiber(targetNode);\n    if (null === nearestMounted) targetNode = null;\n    else {\n      var tag = nearestMounted.tag;\n      if (13 === tag) {\n        targetNode = getSuspenseInstanceFromFiber(nearestMounted);\n        if (null !== targetNode) return targetNode;\n        targetNode = null;\n      } else if (31 === tag) {\n        targetNode = getActivityInstanceFromFiber(nearestMounted);\n        if (null !== targetNode) return targetNode;\n        targetNode = null;\n      } else if (3 === tag) {\n        if (nearestMounted.stateNode.current.memoizedState.isDehydrated)\n          return 3 === nearestMounted.tag\n            ? nearestMounted.stateNode.containerInfo\n            : null;\n        targetNode = null;\n      } else nearestMounted !== targetNode && (targetNode = null);\n    }\n  }\n  return_targetInst = targetNode;\n  return null;\n}\nfunction getEventPriority(domEventName) {\n  switch (domEventName) {\n    case \"beforetoggle\":\n    case \"cancel\":\n    case \"click\":\n    case \"close\":\n    case \"contextmenu\":\n    case \"copy\":\n    case \"cut\":\n    case \"auxclick\":\n    case \"dblclick\":\n    case \"dragend\":\n    case \"dragstart\":\n    case \"drop\":\n    case \"focusin\":\n    case \"focusout\":\n    case \"input\":\n    case \"invalid\":\n    case \"keydown\":\n    case \"keypress\":\n    case \"keyup\":\n    case \"mousedown\":\n    case \"mouseup\":\n    case \"paste\":\n    case \"pause\":\n    case \"play\":\n    case \"pointercancel\":\n    case \"pointerdown\":\n    case \"pointerup\":\n    case \"ratechange\":\n    case \"reset\":\n    case \"resize\":\n    case \"seeked\":\n    case \"submit\":\n    case \"toggle\":\n    case \"touchcancel\":\n    case \"touchend\":\n    case \"touchstart\":\n    case \"volumechange\":\n    case \"change\":\n    case \"selectionchange\":\n    case \"textInput\":\n    case \"compositionstart\":\n    case \"compositionend\":\n    case \"compositionupdate\":\n    case \"beforeblur\":\n    case \"afterblur\":\n    case \"beforeinput\":\n    case \"blur\":\n    case \"fullscreenchange\":\n    case \"focus\":\n    case \"hashchange\":\n    case \"popstate\":\n    case \"select\":\n    case \"selectstart\":\n      return 2;\n    case \"drag\":\n    case \"dragenter\":\n    case \"dragexit\":\n    case \"dragleave\":\n    case \"dragover\":\n    case \"mousemove\":\n    case \"mouseout\":\n    case \"mouseover\":\n    case \"pointermove\":\n    case \"pointerout\":\n    case \"pointerover\":\n    case \"scroll\":\n    case \"touchmove\":\n    case \"wheel\":\n    case \"mouseenter\":\n    case \"mouseleave\":\n    case \"pointerenter\":\n    case \"pointerleave\":\n      return 8;\n    case \"message\":\n      switch (getCurrentPriorityLevel()) {\n        case ImmediatePriority:\n          return 2;\n        case UserBlockingPriority:\n          return 8;\n        case NormalPriority$1:\n        case LowPriority:\n          return 32;\n        case IdlePriority:\n          return 268435456;\n        default:\n          return 32;\n      }\n    default:\n      return 32;\n  }\n}\nvar hasScheduledReplayAttempt = !1,\n  queuedFocus = null,\n  queuedDrag = null,\n  queuedMouse = null,\n  queuedPointers = new Map(),\n  queuedPointerCaptures = new Map(),\n  queuedExplicitHydrationTargets = [],\n  discreteReplayableEvents =\n    \"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset\".split(\n      \" \"\n    );\nfunction clearIfContinuousEvent(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"focusin\":\n    case \"focusout\":\n      queuedFocus = null;\n      break;\n    case \"dragenter\":\n    case \"dragleave\":\n      queuedDrag = null;\n      break;\n    case \"mouseover\":\n    case \"mouseout\":\n      queuedMouse = null;\n      break;\n    case \"pointerover\":\n    case \"pointerout\":\n      queuedPointers.delete(nativeEvent.pointerId);\n      break;\n    case \"gotpointercapture\":\n    case \"lostpointercapture\":\n      queuedPointerCaptures.delete(nativeEvent.pointerId);\n  }\n}\nfunction accumulateOrCreateContinuousQueuedReplayableEvent(\n  existingQueuedEvent,\n  blockedOn,\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  if (\n    null === existingQueuedEvent ||\n    existingQueuedEvent.nativeEvent !== nativeEvent\n  )\n    return (\n      (existingQueuedEvent = {\n        blockedOn: blockedOn,\n        domEventName: domEventName,\n        eventSystemFlags: eventSystemFlags,\n        nativeEvent: nativeEvent,\n        targetContainers: [targetContainer]\n      }),\n      null !== blockedOn &&\n        ((blockedOn = getInstanceFromNode(blockedOn)),\n        null !== blockedOn && attemptContinuousHydration(blockedOn)),\n      existingQueuedEvent\n    );\n  existingQueuedEvent.eventSystemFlags |= eventSystemFlags;\n  blockedOn = existingQueuedEvent.targetContainers;\n  null !== targetContainer &&\n    -1 === blockedOn.indexOf(targetContainer) &&\n    blockedOn.push(targetContainer);\n  return existingQueuedEvent;\n}\nfunction queueIfContinuousEvent(\n  blockedOn,\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  switch (domEventName) {\n    case \"focusin\":\n      return (\n        (queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedFocus,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"dragenter\":\n      return (\n        (queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedDrag,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"mouseover\":\n      return (\n        (queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedMouse,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"pointerover\":\n      var pointerId = nativeEvent.pointerId;\n      queuedPointers.set(\n        pointerId,\n        accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedPointers.get(pointerId) || null,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )\n      );\n      return !0;\n    case \"gotpointercapture\":\n      return (\n        (pointerId = nativeEvent.pointerId),\n        queuedPointerCaptures.set(\n          pointerId,\n          accumulateOrCreateContinuousQueuedReplayableEvent(\n            queuedPointerCaptures.get(pointerId) || null,\n            blockedOn,\n            domEventName,\n            eventSystemFlags,\n            targetContainer,\n            nativeEvent\n          )\n        ),\n        !0\n      );\n  }\n  return !1;\n}\nfunction attemptExplicitHydrationTarget(queuedTarget) {\n  var targetInst = getClosestInstanceFromNode(queuedTarget.target);\n  if (null !== targetInst) {\n    var nearestMounted = getNearestMountedFiber(targetInst);\n    if (null !== nearestMounted)\n      if (((targetInst = nearestMounted.tag), 13 === targetInst)) {\n        if (\n          ((targetInst = getSuspenseInstanceFromFiber(nearestMounted)),\n          null !== targetInst)\n        ) {\n          queuedTarget.blockedOn = targetInst;\n          runWithPriority(queuedTarget.priority, function () {\n            attemptHydrationAtCurrentPriority(nearestMounted);\n          });\n          return;\n        }\n      } else if (31 === targetInst) {\n        if (\n          ((targetInst = getActivityInstanceFromFiber(nearestMounted)),\n          null !== targetInst)\n        ) {\n          queuedTarget.blockedOn = targetInst;\n          runWithPriority(queuedTarget.priority, function () {\n            attemptHydrationAtCurrentPriority(nearestMounted);\n          });\n          return;\n        }\n      } else if (\n        3 === targetInst &&\n        nearestMounted.stateNode.current.memoizedState.isDehydrated\n      ) {\n        queuedTarget.blockedOn =\n          3 === nearestMounted.tag\n            ? nearestMounted.stateNode.containerInfo\n            : null;\n        return;\n      }\n  }\n  queuedTarget.blockedOn = null;\n}\nfunction attemptReplayContinuousQueuedEvent(queuedEvent) {\n  if (null !== queuedEvent.blockedOn) return !1;\n  for (\n    var targetContainers = queuedEvent.targetContainers;\n    0 < targetContainers.length;\n\n  ) {\n    var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.nativeEvent);\n    if (null === nextBlockedOn) {\n      nextBlockedOn = queuedEvent.nativeEvent;\n      var nativeEventClone = new nextBlockedOn.constructor(\n        nextBlockedOn.type,\n        nextBlockedOn\n      );\n      currentReplayingEvent = nativeEventClone;\n      nextBlockedOn.target.dispatchEvent(nativeEventClone);\n      currentReplayingEvent = null;\n    } else\n      return (\n        (targetContainers = getInstanceFromNode(nextBlockedOn)),\n        null !== targetContainers &&\n          attemptContinuousHydration(targetContainers),\n        (queuedEvent.blockedOn = nextBlockedOn),\n        !1\n      );\n    targetContainers.shift();\n  }\n  return !0;\n}\nfunction attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {\n  attemptReplayContinuousQueuedEvent(queuedEvent) && map.delete(key);\n}\nfunction replayUnblockedEvents() {\n  hasScheduledReplayAttempt = !1;\n  null !== queuedFocus &&\n    attemptReplayContinuousQueuedEvent(queuedFocus) &&\n    (queuedFocus = null);\n  null !== queuedDrag &&\n    attemptReplayContinuousQueuedEvent(queuedDrag) &&\n    (queuedDrag = null);\n  null !== queuedMouse &&\n    attemptReplayContinuousQueuedEvent(queuedMouse) &&\n    (queuedMouse = null);\n  queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);\n  queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);\n}\nfunction scheduleCallbackIfUnblocked(queuedEvent, unblocked) {\n  queuedEvent.blockedOn === unblocked &&\n    ((queuedEvent.blockedOn = null),\n    hasScheduledReplayAttempt ||\n      ((hasScheduledReplayAttempt = !0),\n      Scheduler.unstable_scheduleCallback(\n        Scheduler.unstable_NormalPriority,\n        replayUnblockedEvents\n      )));\n}\nvar lastScheduledReplayQueue = null;\nfunction scheduleReplayQueueIfNeeded(formReplayingQueue) {\n  lastScheduledReplayQueue !== formReplayingQueue &&\n    ((lastScheduledReplayQueue = formReplayingQueue),\n    Scheduler.unstable_scheduleCallback(\n      Scheduler.unstable_NormalPriority,\n      function () {\n        lastScheduledReplayQueue === formReplayingQueue &&\n          (lastScheduledReplayQueue = null);\n        for (var i = 0; i < formReplayingQueue.length; i += 3) {\n          var form = formReplayingQueue[i],\n            submitterOrAction = formReplayingQueue[i + 1],\n            formData = formReplayingQueue[i + 2];\n          if (\"function\" !== typeof submitterOrAction)\n            if (null === findInstanceBlockingTarget(submitterOrAction || form))\n              continue;\n            else break;\n          var formInst = getInstanceFromNode(form);\n          null !== formInst &&\n            (formReplayingQueue.splice(i, 3),\n            (i -= 3),\n            startHostTransition(\n              formInst,\n              {\n                pending: !0,\n                data: formData,\n                method: form.method,\n                action: submitterOrAction\n              },\n              submitterOrAction,\n              formData\n            ));\n        }\n      }\n    ));\n}\nfunction retryIfBlockedOn(unblocked) {\n  function unblock(queuedEvent) {\n    return scheduleCallbackIfUnblocked(queuedEvent, unblocked);\n  }\n  null !== queuedFocus && scheduleCallbackIfUnblocked(queuedFocus, unblocked);\n  null !== queuedDrag && scheduleCallbackIfUnblocked(queuedDrag, unblocked);\n  null !== queuedMouse && scheduleCallbackIfUnblocked(queuedMouse, unblocked);\n  queuedPointers.forEach(unblock);\n  queuedPointerCaptures.forEach(unblock);\n  for (var i = 0; i < queuedExplicitHydrationTargets.length; i++) {\n    var queuedTarget = queuedExplicitHydrationTargets[i];\n    queuedTarget.blockedOn === unblocked && (queuedTarget.blockedOn = null);\n  }\n  for (\n    ;\n    0 < queuedExplicitHydrationTargets.length &&\n    ((i = queuedExplicitHydrationTargets[0]), null === i.blockedOn);\n\n  )\n    attemptExplicitHydrationTarget(i),\n      null === i.blockedOn && queuedExplicitHydrationTargets.shift();\n  i = (unblocked.ownerDocument || unblocked).$$reactFormReplay;\n  if (null != i)\n    for (queuedTarget = 0; queuedTarget < i.length; queuedTarget += 3) {\n      var form = i[queuedTarget],\n        submitterOrAction = i[queuedTarget + 1],\n        formProps = form[internalPropsKey] || null;\n      if (\"function\" === typeof submitterOrAction)\n        formProps || scheduleReplayQueueIfNeeded(i);\n      else if (formProps) {\n        var action = null;\n        if (submitterOrAction && submitterOrAction.hasAttribute(\"formAction\"))\n          if (\n            ((form = submitterOrAction),\n            (formProps = submitterOrAction[internalPropsKey] || null))\n          )\n            action = formProps.formAction;\n          else {\n            if (null !== findInstanceBlockingTarget(form)) continue;\n          }\n        else action = formProps.action;\n        \"function\" === typeof action\n          ? (i[queuedTarget + 1] = action)\n          : (i.splice(queuedTarget, 3), (queuedTarget -= 3));\n        scheduleReplayQueueIfNeeded(i);\n      }\n    }\n}\nfunction defaultOnDefaultTransitionIndicator() {\n  function handleNavigate(event) {\n    event.canIntercept &&\n      \"react-transition\" === event.info &&\n      event.intercept({\n        handler: function () {\n          return new Promise(function (resolve) {\n            return (pendingResolve = resolve);\n          });\n        },\n        focusReset: \"manual\",\n        scroll: \"manual\"\n      });\n  }\n  function handleNavigateComplete() {\n    null !== pendingResolve && (pendingResolve(), (pendingResolve = null));\n    isCancelled || setTimeout(startFakeNavigation, 20);\n  }\n  function startFakeNavigation() {\n    if (!isCancelled && !navigation.transition) {\n      var currentEntry = navigation.currentEntry;\n      currentEntry &&\n        null != currentEntry.url &&\n        navigation.navigate(currentEntry.url, {\n          state: currentEntry.getState(),\n          info: \"react-transition\",\n          history: \"replace\"\n        });\n    }\n  }\n  if (\"object\" === typeof navigation) {\n    var isCancelled = !1,\n      pendingResolve = null;\n    navigation.addEventListener(\"navigate\", handleNavigate);\n    navigation.addEventListener(\"navigatesuccess\", handleNavigateComplete);\n    navigation.addEventListener(\"navigateerror\", handleNavigateComplete);\n    setTimeout(startFakeNavigation, 100);\n    return function () {\n      isCancelled = !0;\n      navigation.removeEventListener(\"navigate\", handleNavigate);\n      navigation.removeEventListener(\"navigatesuccess\", handleNavigateComplete);\n      navigation.removeEventListener(\"navigateerror\", handleNavigateComplete);\n      null !== pendingResolve && (pendingResolve(), (pendingResolve = null));\n    };\n  }\n}\nfunction ReactDOMRoot(internalRoot) {\n  this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render =\n  function (children) {\n    var root = this._internalRoot;\n    if (null === root) throw Error(formatProdErrorMessage(409));\n    var current = root.current,\n      lane = requestUpdateLane();\n    updateContainerImpl(current, lane, children, root, null, null);\n  };\nReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount =\n  function () {\n    var root = this._internalRoot;\n    if (null !== root) {\n      this._internalRoot = null;\n      var container = root.containerInfo;\n      updateContainerImpl(root.current, 2, null, root, null, null);\n      flushSyncWork$1();\n      container[internalContainerInstanceKey] = null;\n    }\n  };\nfunction ReactDOMHydrationRoot(internalRoot) {\n  this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {\n  if (target) {\n    var updatePriority = resolveUpdatePriority();\n    target = { blockedOn: null, target: target, priority: updatePriority };\n    for (\n      var i = 0;\n      i < queuedExplicitHydrationTargets.length &&\n      0 !== updatePriority &&\n      updatePriority < queuedExplicitHydrationTargets[i].priority;\n      i++\n    );\n    queuedExplicitHydrationTargets.splice(i, 0, target);\n    0 === i && attemptExplicitHydrationTarget(target);\n  }\n};\nvar isomorphicReactPackageVersion$jscomp$inline_1840 = React.version;\nif (\n  \"19.2.7\" !==\n  isomorphicReactPackageVersion$jscomp$inline_1840\n)\n  throw Error(\n    formatProdErrorMessage(\n      527,\n      isomorphicReactPackageVersion$jscomp$inline_1840,\n      \"19.2.7\"\n    )\n  );\nReactDOMSharedInternals.findDOMNode = function (componentOrElement) {\n  var fiber = componentOrElement._reactInternals;\n  if (void 0 === fiber) {\n    if (\"function\" === typeof componentOrElement.render)\n      throw Error(formatProdErrorMessage(188));\n    componentOrElement = Object.keys(componentOrElement).join(\",\");\n    throw Error(formatProdErrorMessage(268, componentOrElement));\n  }\n  componentOrElement = findCurrentFiberUsingSlowPath(fiber);\n  componentOrElement =\n    null !== componentOrElement\n      ? findCurrentHostFiberImpl(componentOrElement)\n      : null;\n  componentOrElement =\n    null === componentOrElement ? null : componentOrElement.stateNode;\n  return componentOrElement;\n};\nvar internals$jscomp$inline_2347 = {\n  bundleType: 0,\n  version: \"19.2.7\",\n  rendererPackageName: \"react-dom\",\n  currentDispatcherRef: ReactSharedInternals,\n  reconcilerVersion: \"19.2.7\"\n};\nif (\"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {\n  var hook$jscomp$inline_2348 = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n  if (\n    !hook$jscomp$inline_2348.isDisabled &&\n    hook$jscomp$inline_2348.supportsFiber\n  )\n    try {\n      (rendererID = hook$jscomp$inline_2348.inject(\n        internals$jscomp$inline_2347\n      )),\n        (injectedHook = hook$jscomp$inline_2348);\n    } catch (err) {}\n}\nexports.createRoot = function (container, options) {\n  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n  var isStrictMode = !1,\n    identifierPrefix = \"\",\n    onUncaughtError = defaultOnUncaughtError,\n    onCaughtError = defaultOnCaughtError,\n    onRecoverableError = defaultOnRecoverableError;\n  null !== options &&\n    void 0 !== options &&\n    (!0 === options.unstable_strictMode && (isStrictMode = !0),\n    void 0 !== options.identifierPrefix &&\n      (identifierPrefix = options.identifierPrefix),\n    void 0 !== options.onUncaughtError &&\n      (onUncaughtError = options.onUncaughtError),\n    void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n    void 0 !== options.onRecoverableError &&\n      (onRecoverableError = options.onRecoverableError));\n  options = createFiberRoot(\n    container,\n    1,\n    !1,\n    null,\n    null,\n    isStrictMode,\n    identifierPrefix,\n    null,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    defaultOnDefaultTransitionIndicator\n  );\n  container[internalContainerInstanceKey] = options.current;\n  listenToAllSupportedEvents(container);\n  return new ReactDOMRoot(options);\n};\nexports.hydrateRoot = function (container, initialChildren, options) {\n  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n  var isStrictMode = !1,\n    identifierPrefix = \"\",\n    onUncaughtError = defaultOnUncaughtError,\n    onCaughtError = defaultOnCaughtError,\n    onRecoverableError = defaultOnRecoverableError,\n    formState = null;\n  null !== options &&\n    void 0 !== options &&\n    (!0 === options.unstable_strictMode && (isStrictMode = !0),\n    void 0 !== options.identifierPrefix &&\n      (identifierPrefix = options.identifierPrefix),\n    void 0 !== options.onUncaughtError &&\n      (onUncaughtError = options.onUncaughtError),\n    void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n    void 0 !== options.onRecoverableError &&\n      (onRecoverableError = options.onRecoverableError),\n    void 0 !== options.formState && (formState = options.formState));\n  initialChildren = createFiberRoot(\n    container,\n    1,\n    !0,\n    initialChildren,\n    null != options ? options : null,\n    isStrictMode,\n    identifierPrefix,\n    formState,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    defaultOnDefaultTransitionIndicator\n  );\n  initialChildren.context = getContextForSubtree(null);\n  options = initialChildren.current;\n  isStrictMode = requestUpdateLane();\n  isStrictMode = getBumpedLaneForHydrationByLane(isStrictMode);\n  identifierPrefix = createUpdate(isStrictMode);\n  identifierPrefix.callback = null;\n  enqueueUpdate(options, identifierPrefix, isStrictMode);\n  options = isStrictMode;\n  initialChildren.current.lanes = options;\n  markRootUpdated$1(initialChildren, options);\n  ensureRootIsScheduled(initialChildren);\n  container[internalContainerInstanceKey] = initialChildren.current;\n  listenToAllSupportedEvents(container);\n  return new ReactDOMHydrationRoot(initialChildren);\n};\nexports.version = \"19.2.7\";\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom-client.production.js');\n} else {\n  module.exports = require('./cjs/react-dom-client.development.js');\n}\n","import { sanitize } from 'isomorphic-dompurify';\n\nimport { GLOBAL_IMAGE_REGEX } from '$lib/services/contents/fields/rich-text/constants';\nimport { getOrCreate } from '$lib/services/utils/cache';\n\n/**\n * @import { ReactElement } from 'react';\n * @import { EditorComponentDefinition } from '$lib/types/public';\n */\n\n/**\n * @typedef {string | ReactElement | undefined} ComponentPreview\n */\n\n/**\n * Sanitization options for DOMPurify to allow `blob` URLs for images, which are commonly used for\n * local previews of uploaded images. Also allow `iframe` tags with strict sandboxing for embedded\n * media previews.\n * @see https://github.com/cure53/DOMPurify/issues/549\n * @see https://github.com/cure53/DOMPurify#control-permitted-attribute-values.\n * @see https://github.com/cure53/DOMPurify/wiki/Default-TAGs-ATTRIBUTEs-allow-list-&-blocklist\n */\nexport const SANITIZE_OPTIONS = {\n  ALLOWED_URI_REGEXP: /^(?:(?:(?:f|ht)tps?|mailto|tel|blob):|[^a-z]|[a-z+.-]+(?:[^a-z+.\\-:]|$))/i,\n  ADD_TAGS: ['iframe'],\n  ADD_ATTR: ['allow', 'allowfullscreen', 'referrerpolicy', 'sandbox'],\n};\n\n/**\n * Validate and secure an iframe element.\n * @param {HTMLIFrameElement} iframe The iframe element to validate.\n * @returns {boolean} `true` if the iframe is safe and should be kept, `false` if it should be\n * removed.\n */\nconst validateIframe = (iframe) => {\n  const src = iframe.getAttribute('src')?.trim() || '';\n\n  // Require HTTPS (blocks dangerous schemes, relative paths, and HTTP)\n  if (!src.startsWith('https://')) {\n    return false;\n  }\n\n  try {\n    const url = new URL(src);\n\n    // Get current origin (handle cases where window might not be fully initialized)\n    const currentOrigin =\n      typeof window !== 'undefined' && window.location ? window.location.origin : '';\n\n    // Block same-origin iframes to prevent parent window access\n    if (currentOrigin && url.origin === currentOrigin) {\n      return false;\n    }\n  } catch {\n    // Invalid URL\n    return false;\n  }\n\n  // Enforce restrictive sandbox for cross-origin iframes. Since we already block same-origin\n  // iframes above, it’s safe to allow both `allow-scripts` and `allow-same-origin` here: the iframe\n  // can only access its own origin’s APIs (like Cache Storage for YouTube embeds), not the parent\n  // window.\n  const currentSandbox = iframe.getAttribute('sandbox') || '';\n  const sandboxTokens = new Set(currentSandbox.split(/\\s+/).filter(Boolean));\n\n  // Required for embed functionality\n  sandboxTokens.add('allow-scripts');\n  sandboxTokens.add('allow-same-origin');\n\n  // Set the enforced sandbox attribute\n  iframe.setAttribute('sandbox', Array.from(sandboxTokens).join(' '));\n\n  return true;\n};\n\n/**\n * Sanitize HTML with DOMPurify and enforce iframe security policies. This wrapper function handles\n * post-processing of iframes to ensure they are secure.\n * @param {string} html The HTML string to sanitize.\n * @param {object} [options] Additional DOMPurify options.\n * @returns {string} The sanitized HTML string with secure iframes.\n */\nexport const sanitizeRichTextHTML = (html, options = {}) => {\n  // First pass: sanitize with DOMPurify, returning a DOM element\n  const body = /** @type {HTMLBodyElement} */ (\n    sanitize(html, { ...SANITIZE_OPTIONS, ...options, RETURN_DOM: true })\n  );\n\n  // Second pass: validate and secure all iframes\n  const iframes = Array.from(body.querySelectorAll('iframe'));\n\n  iframes.forEach((iframe) => {\n    if (!validateIframe(iframe)) {\n      iframe.remove();\n    }\n  });\n\n  // Return the body’s HTML\n  return body.innerHTML;\n};\n\n/**\n * Selector for finding component placeholder elements in the rendered HTML, used by the\n * `MutationObserver` to identify where to render React element previews.\n */\nexport const COMPONENT_QUERY_SELECTOR = 'span[data-component-key]';\n\n/**\n * Selector for finding unprocessed images in the rendered HTML, used by the `MutationObserver` to\n * identify images that need to be processed (e.g. Converted to `blob` URLs for local previews). The\n * `data-processed` attribute is added to images that have already been processed to avoid\n * reprocessing on subsequent mutations.\n */\nexport const IMAGE_QUERY_SELECTOR = 'img[src]:not([data-processed])';\n\n/**\n * A simple FNV-1a 32-bit hash of a string, returned as a hex string. Used to produce stable, short,\n * attribute-safe keys from matched component text.\n * @param {string} str The string to hash.\n * @returns {string} Lowercase hex hash string.\n */\nconst hashString = (str) => {\n  /* eslint-disable no-bitwise */\n  const hash = Array.from(str).reduce(\n    (h, ch) => (((h ^ ch.charCodeAt(0)) >>> 0) * 0x01000193) >>> 0,\n    0x811c9dc5,\n  );\n  /* eslint-enable no-bitwise */\n\n  return hash.toString(16);\n};\n\n/**\n * HTML void elements that cannot have children or a closing tag. Used to avoid incorrectly\n * entering HTML block mode when a void element starts a line.\n * @see https://developer.mozilla.org/en-US/docs/Glossary/Void_element\n */\nconst VOID_ELEMENTS = new Set([\n  'area',\n  'base',\n  'br',\n  'col',\n  'embed',\n  'hr',\n  'img',\n  'input',\n  'link',\n  'meta',\n  'param',\n  'source',\n  'track',\n  'wbr',\n]);\n\n/**\n * Regex to detect the opening line of a fenced code block (backtick or tilde fence).\n */\nconst FENCE_OPEN_REGEX = /^[ ]{0,3}(`{3,}|~{3,})/;\n/**\n * Regex to detect a line that opens an HTML block element, capturing the tag name.\n */\nconst HTML_OPEN_TAG_REGEX = /^<([a-zA-Z][a-zA-Z0-9]*)(?:[\\s>])/;\n/**\n * @type {Map<string, { openRe: RegExp, closeRe: RegExp }>}\n */\nconst htmlTagRegexCache = new Map();\n\n/**\n * Split a Markdown string into logical blocks at blank lines, keeping fenced code blocks (backtick\n * or tilde fences) and HTML block elements (e.g. `<div>`) intact even when they contain blank\n * lines.\n * @param {string} markdown The full Markdown string.\n * @returns {string[]} Array of non-empty block strings.\n */\nexport const splitMarkdownBlocks = (markdown) => {\n  if (!markdown) return [];\n\n  /** @type {string[]} */\n  const blocks = [];\n  /** @type {string[]} */\n  const current = [];\n  /** @type {{ char: string, length: number } | null} */\n  let fence = null;\n  /** @type {{ tag: string, depth: number, openRe: RegExp, closeRe: RegExp } | null} */\n  let htmlBlock = null;\n\n  markdown.split('\\n').forEach((line) => {\n    if (fence) {\n      current.push(line);\n\n      // Closing fence: same char, at most 3 leading spaces, no trailing content\n      const stripped = line.trimStart();\n\n      if (\n        line.length - stripped.length <= 3 &&\n        stripped.startsWith(fence.char.repeat(fence.length)) &&\n        !/\\S/.test(stripped.slice(fence.length))\n      ) {\n        fence = null;\n      }\n    } else if (htmlBlock) {\n      current.push(line);\n\n      // Reuse pre-compiled regexes stored when the block was opened (avoids two regex allocations\n      // per line for potentially long HTML blocks).\n      const { openRe, closeRe } = htmlBlock;\n\n      htmlBlock.depth += [...line.matchAll(openRe)].length - [...line.matchAll(closeRe)].length;\n\n      if (htmlBlock.depth <= 0) {\n        htmlBlock = null;\n      }\n    } else {\n      const fenceMatch = FENCE_OPEN_REGEX.exec(line);\n\n      if (fenceMatch) {\n        current.push(line);\n        fence = { char: fenceMatch[1][0], length: fenceMatch[1].length };\n      } else {\n        const htmlOpenMatch = HTML_OPEN_TAG_REGEX.exec(line);\n\n        if (htmlOpenMatch) {\n          const tag = htmlOpenMatch[1].toLowerCase();\n\n          current.push(line);\n\n          if (!VOID_ELEMENTS.has(tag)) {\n            const tagRegexes = getOrCreate(htmlTagRegexCache, tag, () => ({\n              openRe: new RegExp(`<${tag}(?:[\\\\s>])`, 'gi'),\n              closeRe: new RegExp(`<\\\\/${tag}>`, 'gi'),\n            }));\n\n            const { openRe, closeRe } = tagRegexes;\n            const depth = [...line.matchAll(openRe)].length - [...line.matchAll(closeRe)].length;\n\n            if (depth > 0) {\n              // Store the regexes in the block so subsequent lines reuse them.\n              htmlBlock = { tag, depth, openRe, closeRe };\n            }\n          }\n        } else if (line === '') {\n          if (current.length) {\n            blocks.push(current.splice(0).join('\\n'));\n          }\n        } else {\n          current.push(line);\n        }\n      }\n    }\n  });\n\n  if (current.length) blocks.push(current.join('\\n'));\n\n  return blocks;\n};\n\n/**\n * Encode image URLs in Markdown to ensure spaces are properly handled.\n * E.g. `![alt](my image.png)` -> `![alt](my%20image.png)`.\n * @param {...any} args Arguments from the regex match.\n * @returns {string} The encoded image Markdown string.\n * @see https://github.com/markedjs/marked/issues/1639\n */\nexport const encodeImageSrc = (...args) => {\n  const { alt, src, title } = args.at(-1);\n  const eSrc = src.replaceAll(' ', '%20');\n\n  return title ? `![${alt}](${eSrc} \"${title}\")` : `![${alt}](${eSrc})`;\n};\n\n/**\n * Cache for global-flag versions of component definition patterns. Keyed by\n * `${pattern.source}|${pattern.flags}` so the same logical pattern always resolves to the same\n * global `RegExp`, even if the pattern object is recreated across reactive evaluations.\n * @type {Map<string, RegExp>}\n */\nconst globalPatternCache = new Map();\n\n/**\n * Process a Markdown string by extracting editor component instances, computing their previews and\n * replacing each match with a placeholder `<span>` keyed to the preview map.\n * @param {string | undefined} currentValue The raw Markdown field value.\n * @param {EditorComponentDefinition[]} componentDefs The resolved component definitions.\n * @returns {{ markdown: string, previewMap: Map<string, ComponentPreview> }} The processed Markdown\n * string and a map of component keys to their precomputed preview values.\n */\nexport const buildMarkdownWithPreviews = (currentValue, componentDefs) => {\n  /** @type {Map<string, ComponentPreview>} */\n  const previewMap = new Map();\n  let string = (currentValue ?? '').replace(GLOBAL_IMAGE_REGEX, encodeImageSrc);\n\n  componentDefs.forEach(({ pattern, fromBlock, toPreview }) => {\n    const patternCacheKey = `${pattern.source}|${pattern.flags}`;\n    let globalPattern = globalPatternCache.get(patternCacheKey);\n\n    if (!globalPattern) {\n      globalPattern = pattern.global ? pattern : new RegExp(pattern.source, `${pattern.flags}g`);\n      globalPatternCache.set(patternCacheKey, globalPattern);\n    }\n\n    /** @type {string[]} */\n    const keys = [];\n    /** @type {Map<string, number>} */\n    const seenHashes = new Map();\n\n    // Extract the component data and cache the preview for each instance of the component\n    string.matchAll(globalPattern).forEach((match) => {\n      const baseHash = hashString(match[0]);\n      const count = seenHashes.get(baseHash) ?? 0;\n      const key = count === 0 ? baseHash : `${baseHash}-${count}`;\n      const fieldProps = fromBlock?.(match) ?? match.groups ?? {};\n\n      keys.push(key);\n      seenHashes.set(baseHash, count + 1);\n      previewMap.set(key, toPreview?.(fieldProps));\n    });\n\n    // Replace the component syntax with a direct preview string or placeholder, depending on the\n    // type of the preview value. This allows simple text previews to be rendered directly without\n    // needing the `MutationObserver` to find and replace a placeholder element, while still\n    // supporting complex React element previews.\n    string = string.replaceAll(globalPattern, () => {\n      // `matchAll` and `replaceAll` iterate the same regex matches in order, so `keys` always has a\n      // corresponding entry — `shift()` is never `undefined`.\n      const key = /** @type {string} */ (keys.shift());\n      const preview = previewMap.get(key);\n\n      if (typeof preview === 'string') {\n        return preview;\n      }\n\n      // Return a placeholder element with a unique key that can be used by the `MutationObserver`\n      // to find the correct location to render the React element preview.\n      return `<span data-component-key=\"${key}\"></span>`;\n    });\n  });\n\n  return { markdown: string, previewMap };\n};\n","<!--\n  @component\n  Implement the preview for a Markdown/RichText field.\n  @see https://decapcms.org/docs/widgets/#Markdown\n  @see https://sveltiacms.app/en/docs/fields/richtext\n-->\n<script>\n  import { parse, use } from 'marked';\n  import markedBidi from 'marked-bidi';\n  import { isValidElement } from 'react';\n  import { createRoot } from 'react-dom/client';\n  import { onMount } from 'svelte';\n  import { SvelteMap } from 'svelte/reactivity';\n\n  import { getMediaFieldURL } from '$lib/services/assets/info';\n  import { cmsConfig } from '$lib/services/config';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { BUILTIN_COMPONENTS } from '$lib/services/contents/fields/rich-text';\n  import {\n    customComponentRegistry,\n    getComponentDef,\n  } from '$lib/services/contents/fields/rich-text/components/definitions';\n  import {\n    buildMarkdownWithPreviews,\n    COMPONENT_QUERY_SELECTOR,\n    IMAGE_QUERY_SELECTOR,\n    sanitizeRichTextHTML,\n    splitMarkdownBlocks,\n  } from '$lib/services/contents/fields/rich-text/helper';\n\n  use(markedBidi());\n\n  use({\n    renderer: {\n      // Add syntax highlighting for code blocks using Prism.js if available. This is done in the\n      // renderer to ensure it runs before sanitization, allowing the highlighted HTML to be\n      // preserved in the preview.\n      // eslint-disable-next-line jsdoc/require-jsdoc\n      code({ text, lang }) {\n        const { Prism } = /** @type {any} */ (window);\n\n        if (Prism && lang && Prism.languages[lang]) {\n          const highlighted = Prism.highlight(text, Prism.languages[lang], lang);\n\n          return `<pre><code class=\"language-${lang}\">${highlighted}</code></pre>\\n`;\n        }\n\n        return false;\n      },\n    },\n  });\n\n  /**\n   * @import { FieldPreviewProps } from '$lib/types/private';\n   * @import { MarkdownField } from '$lib/types/public';\n   * @import { ComponentPreview } from '$lib/services/contents/fields/rich-text/helper';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {MarkdownField} fieldConfig Field configuration.\n   * @property {string | undefined} currentValue Field value.\n   */\n\n  const defaultConfig = $cmsConfig?.field_defaults?.richtext ?? {};\n  /** @type {SvelteMap<HTMLElement, import('react-dom/client').Root>} */\n  const reactRoots = new SvelteMap();\n\n  /** @type {SvelteMap<string, ComponentPreview>} */\n  let previewMap = new SvelteMap();\n\n  /** @type {FieldPreviewProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    typedKeyPath,\n    fieldConfig,\n    currentValue,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {HTMLElement | undefined} */\n  let container = $state();\n  let observerReady = $state(false);\n\n  const entry = $derived($entryDraft?.originalEntry);\n  const collectionName = $derived($entryDraft?.collectionName ?? '');\n  const fileName = $derived($entryDraft?.fileName);\n  const {\n    sanitize_preview: doSanitize = defaultConfig.sanitize_preview ?? true,\n    editor_components: _editorComponents = defaultConfig.editor_components ??\n      // Include all built-in and custom components by default\n      [...BUILTIN_COMPONENTS, ...customComponentRegistry.keys()],\n    linked_images: linkedImagesEnabled = defaultConfig.linked_images ?? true,\n  } = $derived(fieldConfig);\n  const componentDefs = $derived(\n    _editorComponents\n      .map((name) =>\n        getComponentDef(name === 'image' && linkedImagesEnabled ? 'linked-image' : name),\n      )\n      .filter((def) => !!def),\n  );\n\n  const markdown = $derived.by(() => {\n    if (typeof currentValue !== 'string' || !currentValue.trim()) {\n      return '';\n    }\n\n    const { markdown: string, previewMap: newMap } = buildMarkdownWithPreviews(\n      currentValue,\n      componentDefs,\n    );\n\n    previewMap = /** @type {SvelteMap<string, ComponentPreview>} */ (newMap);\n\n    return string;\n  });\n\n  /**\n   * Render a React component preview into the specified element based on its `data-component-key`\n   * attribute.\n   * @param {HTMLElement} element The element to render the component preview into.\n   */\n  const renderComponent = (element) => {\n    const key = element.dataset.componentKey;\n    const preview = key ? previewMap.get(key) : undefined;\n\n    if (isValidElement(preview)) {\n      // Mount the React component\n      const root = createRoot(element);\n\n      reactRoots.set(element, root);\n      root.render(preview);\n    } else {\n      // Remove the placeholder if there’s no valid preview to render\n      element.remove();\n    }\n  };\n\n  /**\n   * Unmount any React component previews that are removed from the DOM.\n   * @param {HTMLElement} element The removed element to check for mounted React components.\n   */\n  const unmountRemovedRoots = (element) => {\n    [element, ...element.querySelectorAll(COMPONENT_QUERY_SELECTOR)].forEach((el) => {\n      const root = reactRoots.get(/** @type {HTMLElement} */ (el));\n\n      if (root) {\n        root.unmount();\n        reactRoots.delete(/** @type {HTMLElement} */ (el));\n      }\n    });\n  };\n\n  /**\n   * Replace the `src` of an image element with the URL from the media field. This is needed to\n   * properly display media fields in the preview, as the markdown may contain internal paths that\n   * have to be resolved to blob URLs.\n   * @param {HTMLImageElement} element The image element to replace the `src` of.\n   */\n  const replaceImageSrc = async (element) => {\n    element.dataset.processed = 'true';\n\n    const value = /** @type {string} */ (element.getAttribute('src'));\n    const url = await getMediaFieldURL({ value, entry, collectionName, fileName, typedKeyPath });\n\n    if (url) {\n      element.src = url;\n    }\n  };\n\n  /**\n   * Callback for the `MutationObserver` to detect added and removed nodes in the container. It\n   * renders component previews for added nodes and unmounts React roots for removed nodes. Also\n   * handles replacing image `src` attributes for media fields.\n   * @param {MutationRecord[]} mutations The list of mutations observed.\n   */\n  const mutationCallback = (mutations) => {\n    mutations.forEach(({ removedNodes, addedNodes }) => {\n      removedNodes.forEach((node) => {\n        if (node.nodeType === Node.ELEMENT_NODE) {\n          unmountRemovedRoots(/** @type {HTMLElement} */ (node));\n        }\n      });\n\n      addedNodes.forEach((node) => {\n        if (node.nodeType !== Node.ELEMENT_NODE) return;\n\n        const element = /** @type {HTMLElement} */ (node);\n\n        if (element.matches(COMPONENT_QUERY_SELECTOR)) {\n          renderComponent(element);\n        } else {\n          element.querySelectorAll(COMPONENT_QUERY_SELECTOR).forEach((el) => {\n            renderComponent(/** @type {HTMLElement} */ (el));\n          });\n        }\n\n        if (element.matches(IMAGE_QUERY_SELECTOR)) {\n          replaceImageSrc(/** @type {HTMLImageElement} */ (element));\n        } else {\n          element.querySelectorAll(IMAGE_QUERY_SELECTOR).forEach((img) => {\n            replaceImageSrc(/** @type {HTMLImageElement} */ (img));\n          });\n        }\n      });\n    });\n  };\n\n  /**\n   * Parse a block of markdown into HTML, replacing component placeholders with their previews and\n   * sanitizing the result if needed.\n   * @param {string} block The markdown block to parse.\n   * @returns {string} The parsed (and possibly sanitized) HTML string.\n   */\n  const parseMarkdown = (block) => {\n    const rawHTML = /** @type {string} */ (parse(block, { breaks: true }));\n\n    return doSanitize ? sanitizeRichTextHTML(rawHTML) : rawHTML;\n  };\n\n  onMount(() => {\n    const observer = new MutationObserver(mutationCallback);\n\n    // Make sure to render the markdown after the observer is set up, otherwise the callback may not\n    // be called for the initial content.\n    // @see https://github.com/sveltia/sveltia-cms/issues/805\n    observer.observe(/** @type {HTMLElement} */ (container), { childList: true, subtree: true });\n    observerReady = true;\n\n    return () => {\n      observer.disconnect();\n      reactRoots.forEach((root) => root.unmount());\n      reactRoots.clear();\n    };\n  });\n</script>\n\n<div role=\"none\" bind:this={container}>\n  {#if observerReady && markdown}\n    {#each splitMarkdownBlocks(markdown) as block, index (`${index}-${block}`)}\n      {@html parseMarkdown(block)}\n    {/each}\n  {/if}\n</div>\n\n<style>\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\n  div {\n    :global {\n      [data-component-key] {\n        display: contents;\n      }\n    }\n  }\n</style>\n","<!--\n  @component\n  Implement the preview for a Select field.\n  @see https://decapcms.org/docs/widgets/#Select\n  @see https://sveltiacms.app/en/docs/fields/select\n-->\n<script>\n  import { isObjectArray } from '@sveltia/utils/array';\n\n  import { getCanonicalLocale, getDirection, getListFormatter } from '$lib/services/contents/i18n';\n\n  /**\n   * @import { FieldPreviewProps } from '$lib/types/private';\n   * @import { SelectField, SelectFieldValue } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {SelectField} fieldConfig Field configuration.\n   * @property {SelectFieldValue | SelectFieldValue[] | undefined} currentValue Field value.\n   */\n\n  /** @type {FieldPreviewProps & 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 {SelectFieldValue | SelectFieldValue[]} 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={getCanonicalLocale(locale)} dir={getDirection(locale)}>\n    {listFormatter.format(currentValue.map(getLabel).sort())}\n  </p>\n{:else if currentValue !== undefined}\n  <p lang={getCanonicalLocale(locale)} dir={getDirection(locale)}>{getLabel(currentValue)}</p>\n{/if}\n","<script>\n  import { _ } from '@sveltia/i18n';\n\n  import { validateStringField } from '$lib/services/contents/fields/string/validate';\n\n  /**\n   * @import { InternalLocaleCode } from '$lib/types/private';\n   * @import { StringField, TextField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {StringField | TextField} fieldConfig Field configuration.\n   * @property {InternalLocaleCode} locale Current locale.\n   * @property {string | undefined} currentValue Field value.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    fieldConfig,\n    locale,\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, locale, value: currentValue }).detail,\n  );\n</script>\n\n{#if hasMin || hasMax}\n  <div\n    class=\"wrapper\"\n    aria-label={_(\n      hasMin && hasMax\n        ? 'character_counter.min_max'\n        : hasMin\n          ? 'character_counter.min'\n          : 'character_counter.max',\n      { values: { count, min: minlength, max: maxlength } },\n    )}\n  >\n    {#if hasMin}\n      {minlength}\n      <!-- eslint-disable-next-line svelte/no-useless-mustaches -->\n      {' / '}\n    {/if}\n    <span role=\"none\" class=\"count\" class:invalid>{count}</span>\n    {#if hasMax}\n      <!-- eslint-disable-next-line svelte/no-useless-mustaches -->\n      {' / '}\n      {maxlength}\n    {/if}\n  </div>\n{/if}\n\n<style>\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: end;\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 a String field.\n  @see https://decapcms.org/docs/widgets/#String\n  @see https://sveltiacms.app/en/docs/fields/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/fields/string/character-counter.svelte';\n  import { getCanonicalLocale, getDirection } from '$lib/services/contents/i18n';\n\n  /**\n   * @import { FieldEditorContext, FieldEditorProps } 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 {FieldEditorProps & 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;\n\n    // Add affixes only if value is not empty\n    if (newValue.trim() && (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={getCanonicalLocale(locale)}\n  dir={getDirection(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}`;\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 { _ } from '@sveltia/i18n';\n  import { onMount } from 'svelte';\n\n  import VisibilityObserver from '$lib/components/common/visibility-observer.svelte';\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  let embeddable = $state(true);\n\n  const embedURL = $derived(getYouTubeEmbedURL(url));\n\n  /**\n   * Listener for Content Security Policy violations. Hide the iframe if CSP is violated.\n   * @param {SecurityPolicyViolationEvent} event Event.\n   */\n  const onViolation = ({ blockedURI, violatedDirective }) => {\n    if (blockedURI === new URL(embedURL).origin && violatedDirective === 'frame-src') {\n      embeddable = false;\n      window.removeEventListener('securitypolicyviolation', onViolation);\n    }\n  };\n\n  onMount(() => {\n    window.addEventListener('securitypolicyviolation', onViolation);\n\n    return () => {\n      window.removeEventListener('securitypolicyviolation', onViolation);\n    };\n  });\n</script>\n\n<div role=\"none\">\n  {#if embeddable}\n    <VisibilityObserver>\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        sandbox=\"allow-same-origin allow-scripts\"\n      ></iframe>\n    </VisibilityObserver>\n  {:else}\n    <a href={encodeURI(url)}>{url}</a>\n  {/if}\n</div>\n\n<style>\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 a String field.\n  @see https://decapcms.org/docs/widgets/#String\n  @see https://sveltiacms.app/en/docs/fields/string\n-->\n<script>\n  import { isURL } from '@sveltia/utils/string';\n\n  import YouTubeEmbed from '$lib/components/contents/details/fields/string/youtube-embed.svelte';\n  import { getCanonicalLocale, getDirection } from '$lib/services/contents/i18n';\n  import { isYouTubeVideoURL } from '$lib/services/utils/media/video/youtube';\n\n  /**\n   * @import { FieldPreviewProps } 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 {FieldPreviewProps & 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\n  const SAFE_PROTOCOL_REGEX = /^(?:https|mailto|tel):/;\n</script>\n\n{#if typeof currentValue === 'string' && currentValue.trim()}\n  <p\n    lang={getCanonicalLocale(locale)}\n    dir={getDirection(locale)}\n    class:title={fieldName === 'title'}\n  >\n    {#if type === 'url' || isURL(currentValue)}\n      {#if isYouTubeVideoURL(currentValue)}\n        <YouTubeEmbed url={currentValue} />\n      {:else if SAFE_PROTOCOL_REGEX.test(currentValue)}\n        <a href={encodeURI(currentValue)}>{currentValue}</a>\n      {:else}\n        {currentValue}\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>\n  .title {\n    font-size: var(--sui-font-size-xxx-large);\n    font-weight: var(--sui-font-weight-bold);\n  }\n\n  /* Remove the padding to make the iframe full-width on small screens */\n  @media (width < 768px) {\n    :global([role='document'] section) > p:has(:global(iframe)) {\n      margin-inline: calc(var(--entry-preview-padding-inline) * -1);\n    }\n  }\n</style>\n","<!--\n  @component\n  Implement the editor for a Text field.\n  @see https://decapcms.org/docs/widgets/#Text\n  @see https://sveltiacms.app/en/docs/fields/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/fields/string/character-counter.svelte';\n  import { getCanonicalLocale, getDirection } from '$lib/services/contents/i18n';\n\n  /**\n   * @import { FieldEditorContext, FieldEditorProps } 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 {FieldEditorProps & 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={getCanonicalLocale(locale)}\n  dir={getDirection(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 a Text field.\n  @see https://decapcms.org/docs/widgets/#Text\n  @see https://sveltiacms.app/en/docs/fields/text\n-->\n<script>\n  import { getCanonicalLocale, getDirection } from '$lib/services/contents/i18n';\n\n  /**\n   * @import { FieldPreviewProps } 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 {FieldPreviewProps & 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={getCanonicalLocale(locale)} dir={getDirection(locale)}>{currentValue}</p>\n{/if}\n\n<style>\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 a UUID field.\n  @see https://staticjscms.netlify.app/docs/widget-uuid\n  @see https://sveltiacms.app/en/docs/fields/uuid\n-->\n<script>\n  import { TextInput } from '@sveltia/ui';\n  import { onMount } from 'svelte';\n\n  import { warnDeprecation } from '$lib/services/config/deprecations';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { getInitialValue } from '$lib/services/contents/fields/uuid/helper';\n  import { DEFAULT_I18N_CONFIG } from '$lib/services/contents/i18n/config';\n\n  /**\n   * @import { FieldEditorProps } 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 {FieldEditorProps & Props} */\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    fieldId,\n    fieldConfig,\n    currentValue = $bindable(),\n    required = true,\n    readonly = true,\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    // @todo Remove the option prior to the 1.0 release.\n    if ('read_only' in fieldConfig) {\n      warnDeprecation('uuid_read_only');\n    }\n  });\n</script>\n\n<TextInput\n  dir=\"ltr\"\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 a UUID field.\n  @see https://staticjscms.netlify.app/docs/widget-uuid\n  @see https://sveltiacms.app/en/docs/fields/uuid\n-->\n<script>\n  /**\n   * @import { FieldPreviewProps } 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 {FieldPreviewProps & 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>\n  p {\n    font-family: var(--sui-font-family-monospace);\n  }\n</style>\n","import BooleanEditor from '$lib/components/contents/details/fields/boolean/boolean-editor.svelte';\nimport BooleanPreview from '$lib/components/contents/details/fields/boolean/boolean-preview.svelte';\nimport CodeEditor from '$lib/components/contents/details/fields/code/code-editor.svelte';\nimport CodePreview from '$lib/components/contents/details/fields/code/code-preview.svelte';\nimport ColorEditor from '$lib/components/contents/details/fields/color/color-editor.svelte';\nimport ColorPreview from '$lib/components/contents/details/fields/color/color-preview.svelte';\nimport ComputeEditor from '$lib/components/contents/details/fields/compute/compute-editor.svelte';\nimport ComputePreview from '$lib/components/contents/details/fields/compute/compute-preview.svelte';\nimport DateTimeEditor from '$lib/components/contents/details/fields/date-time/date-time-editor.svelte';\nimport DateTimePreview from '$lib/components/contents/details/fields/date-time/date-time-preview.svelte';\nimport FileEditor from '$lib/components/contents/details/fields/file/file-editor.svelte';\nimport FilePreview from '$lib/components/contents/details/fields/file/file-preview.svelte';\nimport KeyValueEditor from '$lib/components/contents/details/fields/key-value/key-value-editor.svelte';\nimport KeyValuePreview from '$lib/components/contents/details/fields/key-value/key-value-preview.svelte';\nimport ListEditor from '$lib/components/contents/details/fields/list/list-editor.svelte';\nimport ListPreview from '$lib/components/contents/details/fields/list/list-preview.svelte';\nimport MapEditor from '$lib/components/contents/details/fields/map/map-editor.svelte';\nimport MapPreview from '$lib/components/contents/details/fields/map/map-preview.svelte';\nimport NumberEditor from '$lib/components/contents/details/fields/number/number-editor.svelte';\nimport NumberPreview from '$lib/components/contents/details/fields/number/number-preview.svelte';\nimport ObjectEditor from '$lib/components/contents/details/fields/object/object-editor.svelte';\nimport ObjectPreview from '$lib/components/contents/details/fields/object/object-preview.svelte';\nimport RelationEditor from '$lib/components/contents/details/fields/relation/relation-editor.svelte';\nimport RelationPreview from '$lib/components/contents/details/fields/relation/relation-preview.svelte';\nimport RichTextEditor from '$lib/components/contents/details/fields/rich-text/rich-text-editor.svelte';\nimport RichTextPreview from '$lib/components/contents/details/fields/rich-text/rich-text-preview.svelte';\nimport SelectEditor from '$lib/components/contents/details/fields/select/select-editor.svelte';\nimport SelectPreview from '$lib/components/contents/details/fields/select/select-preview.svelte';\nimport StringEditor from '$lib/components/contents/details/fields/string/string-editor.svelte';\nimport StringPreview from '$lib/components/contents/details/fields/string/string-preview.svelte';\nimport TextEditor from '$lib/components/contents/details/fields/text/text-editor.svelte';\nimport TextPreview from '$lib/components/contents/details/fields/text/text-preview.svelte';\nimport UuidEditor from '$lib/components/contents/details/fields/uuid/uuid-editor.svelte';\nimport UuidPreview from '$lib/components/contents/details/fields/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: RichTextEditor, // alias\n  number: NumberEditor,\n  object: ObjectEditor,\n  relation: RelationEditor,\n  richtext: RichTextEditor,\n  select: SelectEditor,\n  string: StringEditor,\n  text: TextEditor,\n  uuid: UuidEditor,\n};\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: RichTextPreview, // alias\n  number: NumberPreview,\n  object: ObjectPreview,\n  relation: RelationPreview,\n  richtext: RichTextPreview,\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';\nimport { isNumeric } from '$lib/services/utils/number';\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 * Resolve the original key path for a field that may be inside a reordered list item. When list\n * items are reordered, added, or removed, each item’s `__sc_item_original_key_path` property tracks\n * where it was originally located.\n * @param {Record<string, any>} valueMap Current flat value map for the locale.\n * @param {FieldKeyPath} keyPath Current field key path.\n * @returns {{ originalKeyPath: FieldKeyPath, currentPrefix: string, originalPrefix: string } |\n * undefined} The resolved paths, or `undefined` if no remapping is needed.\n */\nexport const resolveOriginalKeyPath = (valueMap, keyPath) => {\n  const parts = keyPath.split('.');\n\n  for (let i = parts.length - 1; i >= 1; i -= 1) {\n    if (isNumeric(parts[i])) {\n      const itemPrefix = parts.slice(0, i + 1).join('.');\n      const originalPrefix = valueMap[`${itemPrefix}.__sc_item_original_key_path`];\n\n      if (originalPrefix !== undefined) {\n        const suffix = parts.slice(i + 1).join('.');\n\n        return {\n          originalKeyPath: suffix ? `${originalPrefix}.${suffix}` : originalPrefix,\n          currentPrefix: itemPrefix,\n          originalPrefix,\n        };\n      }\n    }\n  }\n\n  return undefined;\n};\n\n/**\n * Revert the changes made to the given field or all the fields to the default value(s).\n * @internal\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 * @param {{ from: string, to: string }} [args.remapPrefix] When restoring values from a different\n * key path prefix (e.g. after list item reordering), remap `from` prefix to `to` prefix.\n */\nexport const revertFields = ({\n  locale,\n  isDefaultLocale,\n  keyPath,\n  getFieldArgs,\n  currentValues,\n  reset = false,\n  remapPrefix,\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          const targetKeyPath = remapPrefix\n            ? `${remapPrefix.to}${_keyPath.slice(remapPrefix.from.length)}`\n            : _keyPath;\n\n          currentValues[locale][targetKeyPath] = value;\n        }\n      }\n    }\n  });\n};\n\n/**\n * Revert the changes made to the given locale.\n * @internal\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 */\nexport const 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  /** @type {GetFieldArgs} */\n  const getFieldArgs = { collectionName, fileName, keyPath: '', isIndexFile };\n  // Resolve original key path for fields inside reordered list items\n  const resolved = keyPath ? resolveOriginalKeyPath(currentValues[locale], keyPath) : undefined;\n  const originalKeyPath = resolved?.originalKeyPath ?? keyPath;\n\n  const remapPrefix = resolved\n    ? { from: resolved.originalPrefix, to: resolved.currentPrefix }\n    : undefined;\n\n  // Remove all the current values except for i18n-duplicate ones\n  revertFields({\n    locale,\n    isDefaultLocale,\n    keyPath,\n    getFieldArgs: { ...getFieldArgs, valueMap: currentValues[locale] },\n    currentValues,\n    reset: true,\n  });\n\n  // Restore the original values, remapping key paths if the item was reordered\n  revertFields({\n    locale,\n    isDefaultLocale,\n    keyPath: originalKeyPath,\n    getFieldArgs: { ...getFieldArgs, valueMap: originalValues[locale] },\n    currentValues,\n    remapPrefix,\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 field is the\n * List or Object type, this will likely match multiple fields.\n */\nexport const revertChanges = ({ locale: targetLanguage = '', keyPath = '' } = {}) => {\n  const draft = /** @type {EntryDraft} */ (get(entryDraft));\n  const { collection, collectionFile, currentValues } = draft;\n  const { allLocales } = (collectionFile ?? collection)._i18n;\n  const locales = targetLanguage ? [targetLanguage] : allLocales;\n\n  locales.forEach((locale) => {\n    revertLocale({ draft, keyPath, locale });\n  });\n\n  entryDraft.update(() => ({ ...draft, currentValues }));\n};\n","<script>\n  import { _ } from '@sveltia/i18n';\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 { sanitize } from 'isomorphic-dompurify';\n  import { parseInline } from 'marked';\n  import { getContext, setContext } from 'svelte';\n  import { writable } from 'svelte/store';\n\n  import CopyMenuItems from '$lib/components/contents/details/editor/copy-menu-items.svelte';\n  import FieldEditorGroup from '$lib/components/contents/details/editor/field-editor-group.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/fields';\n  import { entryDraft, INTERNAL_PROP_REGEX } from '$lib/services/contents/draft';\n  import {\n    resolveOriginalKeyPath,\n    revertChanges,\n  } from '$lib/services/contents/draft/update/revert';\n  import { isFieldMultiple, isFieldRequired } from '$lib/services/contents/entry/fields';\n  import { DEFAULT_I18N_CONFIG } from '$lib/services/contents/i18n/config';\n\n  /**\n   * @import { Component } from 'svelte';\n   * @import { Writable } from 'svelte/store';\n   * @import {\n   * DraftValueStoreKey,\n   * FieldContext,\n   * FieldEditorContext,\n   * InternalLocaleCode,\n   * TypedFieldKeyPath,\n   * } from '$lib/types/private';\n   * @import {\n   * BooleanField,\n   * Field,\n   * FieldKeyPath,\n   * NumberField,\n   * StringField,\n   * VisibleField,\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 {TypedFieldKeyPath} typedKeyPath Typed field key path.\n   * @property {Field} fieldConfig Field configuration.\n   * @property {FieldContext} [context] Where the field 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    typedKeyPath,\n    fieldConfig,\n    context: fieldContext = parent.fieldContext ?? 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    sanitize(/** @type {string} */ (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    // svelte-ignore state_referenced_locally\n    /** @type {FieldEditorContext} */ ({ fieldContext, extraHint, valueStoreKey }),\n  );\n\n  const inEditorComponent = $derived(fieldContext === 'rich-text-editor-component');\n  const { name: fieldName, widget: fieldType = 'string', i18n = false } = $derived(fieldConfig);\n  const {\n    label = '',\n    comment = '',\n    hint = '',\n    readonly: readonlyOption = false,\n  } = $derived(/** @type {VisibleField} */ (fieldConfig));\n  const required = $derived(isFieldRequired({ fieldConfig, locale }));\n  const multiple = $derived(isFieldMultiple(fieldConfig));\n  const allowPrefix = $derived(['string'].includes(fieldType));\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(fieldType));\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 isList = $derived(fieldType === '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  const currentValue = $derived.by(() => {\n    const valueMap = $state.snapshot($entryDraft?.[valueStoreKey][locale] ?? {});\n    const value = valueMap[keyPath];\n\n    if (!isList) {\n      return value;\n    }\n\n    // Multiple values are flattened in the value map object\n    const list = Object.entries(valueMap).filter(([_keyPath]) => keyPathRegex.test(_keyPath));\n\n    if (list.length) {\n      return list.map(([, val]) => val).filter((val) => val !== undefined);\n    }\n\n    // Convert invalid single value to list. This is in place to handle the case when a field is\n    // changed from single to multiple. (Continue to the `$effect` block below.)\n    // @todo Move this logic to entry normalization module\n    if (multiple && value !== undefined && typeof value !== 'object') {\n      return [value];\n    }\n\n    return [];\n  });\n  const originalValue = $derived.by(() => {\n    if (isList) {\n      return Object.entries(originalValues?.[locale] ?? {})\n        .filter(([_keyPath]) => keyPathRegex.test(_keyPath))\n        .map(([, val]) => val)\n        .filter((val) => val !== undefined);\n    }\n\n    // For fields inside list items, use the original key path if the item was reordered\n    const currentMap = $state.snapshot($entryDraft?.[valueStoreKey][locale] ?? {});\n    const resolved = resolveOriginalKeyPath(currentMap, keyPath);\n\n    if (resolved) {\n      return originalValues?.[locale]?.[resolved.originalKeyPath];\n    }\n\n    return originalValues?.[locale]?.[keyPath];\n  });\n  const isRevertDisabled = $derived.by(() => {\n    if (fieldType === 'list') {\n      // For list fields, compare all flat entries under the keyPath prefix, because `currentValue`\n      // and `originalValue` may not capture complex (nested) list items correctly\n      const currentMap = $state.snapshot($entryDraft?.[valueStoreKey][locale] ?? {});\n      const originalMap = originalValues?.[locale] ?? {};\n      const keyPathPrefix = `${keyPath}.`;\n\n      const currentEntries = Object.entries(currentMap)\n        .filter(([k]) => k.startsWith(keyPathPrefix) && !INTERNAL_PROP_REGEX.test(k))\n        .sort(([a], [b]) => a.localeCompare(b));\n\n      const originalEntries = Object.entries(originalMap)\n        .filter(([k]) => k.startsWith(keyPathPrefix) && !INTERNAL_PROP_REGEX.test(k))\n        .sort(([a], [b]) => a.localeCompare(b));\n\n      return equal(currentEntries, originalEntries);\n    }\n\n    return equal(currentValue, originalValue);\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      fieldType === 'compute' ||\n      fieldType === 'uuid',\n  );\n  const invalid = $derived(validity?.valid === false);\n\n  $effect(() => {\n    // Convert invalid single value to list. This is in place to handle the case when a field is\n    // changed from single to multiple. (Continued from the `currentValue` store above.)\n    // @todo Move this logic to entry normalization module\n    if ($entryDraft && multiple && Array.isArray(currentValue)) {\n      const listItem = $entryDraft[valueStoreKey][locale]?.[`${keyPath}.0`];\n      const [value] = currentValue;\n\n      if (listItem === undefined && value !== undefined) {\n        $entryDraft[valueStoreKey][locale][`${keyPath}.0`] = value;\n        delete $entryDraft[valueStoreKey][locale][keyPath];\n      }\n    }\n  });\n\n  $effect(() => {\n    // Convert invalid list to single value. This is in place to handle the case when a field is\n    // changed from multiple to single.\n    // @todo Move this logic to entry normalization module\n    if ($entryDraft && !multiple && currentValue === undefined) {\n      const listItem = $entryDraft[valueStoreKey][locale]?.[`${keyPath}.0`];\n\n      if (listItem !== undefined) {\n        $entryDraft[valueStoreKey][locale][keyPath] = listItem;\n        // Remove all list items\n        Object.keys($entryDraft[valueStoreKey][locale]).forEach((key) => {\n          if (keyPathRegex.test(key)) {\n            delete $entryDraft[valueStoreKey][locale][key];\n          }\n        });\n      }\n    }\n  });\n</script>\n\n{#if $entryDraft && canEdit && fieldType !== 'hidden'}\n  <FieldEditorGroup\n    aria-label={_('x_field', { values: { field: fieldLabel } })}\n    data-field-type={fieldType}\n    data-key-path={keyPath}\n    data-typed-key-path={typedKeyPath}\n    hidden={fieldType === '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 && ['richtext', 'markdown', 'string', 'text', 'list', 'object'].includes(fieldType)}\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={isRevertDisabled}\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      <div role=\"none\" class=\"comment-wrapper\">\n        <p class=\"comment\">{@html _sanitize(comment)}</p>\n      </div>\n    {/if}\n    {#if validity?.valid === false}\n      <ValidationError id=\"{fieldId}-error\">\n        {$entryDraft?.validationMessages[locale][keyPath]?.join(' ')}\n      </ValidationError>\n    {/if}\n    <div role=\"none\" class=\"field-wrapper\" class:has-extra-labels={hasExtraLabels}>\n      {#if !(fieldType in editors)}\n        <div role=\"none\">{_('unsupported_field_type_x', { values: { name: fieldType } })}</div>\n      {:else if isList}\n        {@const Editor = editors[fieldType]}\n        <Editor\n          {locale}\n          {keyPath}\n          {typedKeyPath}\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[fieldType]}\n        <Editor\n          {locale}\n          {keyPath}\n          {typedKeyPath}\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} {locale} {currentValue} />\n      </div>\n    {/if}\n  </FieldEditorGroup>\n{/if}\n\n<style>\n  .field-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  .hint {\n    margin-inline: var(--sui-focus-ring-width) !important;\n    font-size: var(--sui-font-size-small);\n    line-height: var(--sui-line-height-compact);\n  }\n\n  .comment {\n    margin-block: var(--sui-focus-ring-width) !important;\n  }\n\n  .hint {\n    flex: auto;\n    margin-block: var(--sui-focus-ring-width) 0 !important;\n    color: var(--sui-tertiary-foreground-color);\n  }\n\n  .footer {\n    display: flex;\n    gap: 16px;\n    justify-content: flex-end;\n    margin-top: 4px;\n  }\n</style>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { TextInput } from '@sveltia/ui';\n  import { untrack } from 'svelte';\n\n  import FieldEditorGroup from '$lib/components/contents/details/editor/field-editor-group.svelte';\n  import ValidationError from '$lib/components/contents/details/editor/validation-error.svelte';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { DEFAULT_I18N_CONFIG } from '$lib/services/contents/i18n/config';\n\n  let {\n    /* eslint-disable prefer-const */\n    locale,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const fieldId = $props.id();\n\n  const collection = $derived($entryDraft?.collection);\n  const collectionFile = $derived($entryDraft?.collectionFile);\n  const { defaultLocale } = $derived((collectionFile ?? collection)?._i18n ?? DEFAULT_I18N_CONFIG);\n  const slugEditor = $derived($entryDraft?.slugEditor[locale]);\n  const required = $derived(slugEditor === true);\n  const readonly = $derived(slugEditor === 'readonly');\n  const validity = $derived($entryDraft?.validities[locale]._slug);\n  const invalid = $derived(!readonly && validity?.valid === false);\n\n  let inputValue = $state('');\n\n  $effect(() => {\n    if (readonly) {\n      inputValue = $entryDraft?.currentSlugs[locale] ?? '';\n    }\n  });\n\n  $effect(() => {\n    void [inputValue];\n\n    untrack(() => {\n      if ($entryDraft) {\n        // Update the slug for the current locale and for the other readonly locales\n        Object.entries($entryDraft.slugEditor).forEach(([_locale, enabled]) => {\n          if (locale === _locale || (locale === defaultLocale && enabled === 'readonly')) {\n            $entryDraft.currentSlugs[_locale] = inputValue;\n          }\n        });\n      }\n    });\n  });\n</script>\n\n{#if $entryDraft}\n  <FieldEditorGroup>\n    <header role=\"none\">\n      <h4 role=\"none\" id=\"{fieldId}-label\">{_('slug')}</h4>\n      {#if required}\n        <div class=\"required\" aria-label={_('required')}>*</div>\n      {/if}\n    </header>\n    {#if invalid}\n      <ValidationError id=\"{fieldId}-error\">\n        {#if validity?.valueMissing}\n          {_('edit_slug_error.empty')}\n        {/if}\n        {#if validity?.patternMismatch}\n          {_('edit_slug_error.invalid')}\n        {/if}\n      </ValidationError>\n    {/if}\n    <div role=\"none\" class=\"field-wrapper\">\n      <TextInput\n        dir=\"auto\"\n        bind:value={inputValue}\n        flex\n        {readonly}\n        {required}\n        {invalid}\n        aria-labelledby=\"{fieldId}-label\"\n        aria-errormessage=\"{fieldId}-error\"\n      />\n    </div>\n  </FieldEditorGroup>\n{/if}\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 SlugEditor from '$lib/components/contents/details/editor/slug-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  {#if !!$entryDraft?.slugEditor[locale]}\n    <SlugEditor {locale} />\n  {/if}\n  {#each fields as fieldConfig (fieldConfig.name)}\n    <VisibilityObserver>\n      <FieldEditor\n        keyPath={fieldConfig.name}\n        typedKeyPath={fieldConfig.name}\n        {locale}\n        {fieldConfig}\n      />\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  @see https://sveltiacms.app/en/docs/api/preview-styles\n-->\n<script>\n  import { _ } from '@sveltia/i18n';\n  import { mount } from 'svelte';\n\n  import Placeholder from '$lib/components/common/placeholder.svelte';\n  import { escapeAttr } from '$lib/services/utils/string';\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[]} styleURLs Custom stylesheet URLs 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    styleURLs,\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=\"${escapeAttr(locale)}\">\n    <head>\n      <meta charset=\"UTF-8\">\n      ${styleURLs.map((url) => `<link rel=\"stylesheet\" href=\"${escapeAttr(url)}\">`).join('\\n')}\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      const blobURL = URL.createObjectURL(new Blob([generateHTML()], { type: 'text/html' }));\n\n      iframe.addEventListener(\n        'load',\n        () => {\n          mountPlaceholder();\n          // The iframe has loaded the HTML document, so the blob URL is no longer needed\n          URL.revokeObjectURL(blobURL);\n        },\n        { once: true },\n      );\n\n      iframe.src = blobURL;\n    }\n  };\n\n  $effect(() => {\n    if (iframe) {\n      initializeIframe();\n    }\n  });\n</script>\n\n<iframe\n  class=\"preview\"\n  title={_('content_preview')}\n  sandbox=\"allow-same-origin allow-scripts\"\n  bind:this={iframe}\n></iframe>\n\n<style>\n  iframe {\n    display: block;\n    border: none;\n    width: 100%;\n    height: 100%;\n  }\n</style>\n","<script>\n  import { _ } from '@sveltia/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 { customPreviewStyleRegistry } 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</script>\n\n{#snippet children()}\n  {#each fields as fieldConfig (fieldConfig.name)}\n    <VisibilityObserver>\n      <FieldPreview\n        keyPath={fieldConfig.name}\n        typedKeyPath={fieldConfig.name}\n        {locale}\n        {fieldConfig}\n      />\n    </VisibilityObserver>\n  {/each}\n{/snippet}\n\n<VisibilityObserver>\n  {#if customPreviewStyleRegistry.size}\n    <EntryPreviewIframe {locale} styleURLs={[...customPreviewStyleRegistry]} {children} />\n  {:else}\n    <div role=\"document\" aria-label={_('content_preview')}>\n      {@render children()}\n    </div>\n  {/if}\n</VisibilityObserver>\n\n<style>\n  div {\n    --entry-preview-padding-block: 8px;\n    --entry-preview-padding-inline: 16px;\n    padding-block: var(--entry-preview-padding-block);\n    padding-inline: var(--entry-preview-padding-inline);\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 * Store unsubscribe functions to prevent memory leaks.\n * @type {{ entryEditorSettingsUnsubscribe?: () => void, selectAssetsViewUnsubscribe?: () => void }}\n */\nconst unsubscribers = {};\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  // Unsubscribe from previous subscribers to prevent memory leaks\n  unsubscribers.entryEditorSettingsUnsubscribe?.();\n  unsubscribers.selectAssetsViewUnsubscribe?.();\n\n  unsubscribers.entryEditorSettingsUnsubscribe = 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  unsubscribers.selectAssetsViewUnsubscribe = 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 { _ } from '@sveltia/i18n';\n  import { Button, EmptyState } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\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({\n    values: { locale: locale ? (getLocaleLabel(locale) ?? locale) : '' },\n  });\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>\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 { _ } from '@sveltia/i18n';\n  import { Divider, Icon, Option, Select, SelectButton, SelectButtonGroup } from '@sveltia/ui';\n  import { writable } from 'svelte/store';\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 { env } from '$lib/services/user/env.svelte';\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    env.isSmallScreen || env.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(env.isSmallScreen || env.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  const currentValue = $derived(\n    $thisPane?.mode === 'edit'\n      ? $thisPane.locale\n      : $thisPane?.mode === 'preview'\n        ? 'preview'\n        : undefined,\n  );\n</script>\n\n<div role=\"none\" class=\"wrapper\">\n  <SelectComponent\n    value={currentValue}\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 (locale)}\n        {@const label = getLocaleLabel(locale) ?? 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          value={locale}\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        {#if useDropDown}\n          <Divider />\n        {/if}\n        <OptionComponent\n          {variant}\n          {size}\n          label={_('preview')}\n          value=\"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>\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 { _ } from '@sveltia/i18n';\n  import { Button, Icon } from '@sveltia/ui';\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 { _ } from '@sveltia/i18n';\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\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, filterRealValues } 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 { env } from '$lib/services/user/env.svelte';\n  import { prefs } from '$lib/services/user/prefs.svelte';\n  import { openNewTab } from '$lib/services/utils/window';\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        originalValues[$thisPane.locale],\n        // Exclude internal properties from the comparison\n        filterRealValues($state.snapshot($entryDraft?.currentValues[$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 (env.isSmallScreen || env.isMediumScreen) && canPreview}\n        <PreviewButton {thisPane} />\n      {/if}\n    {:else if !(env.isSmallScreen || env.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) ?? $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                    openNewTab(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                      openNewTab(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>\n  .header {\n    flex: none !important;\n\n    :global {\n      & > .sui.toolbar {\n        margin-inline: 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  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} title The panel title.\n   * @property {Snippet} [children] Slot content.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    title,\n    children = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const id = $props.id();\n</script>\n\n<section role=\"group\" class=\"panel\" aria-labelledby=\"panel-{id}-label\">\n  <header>\n    <h3 id=\"panel-{id}-label\">{title}</h3>\n  </header>\n  <div>\n    {@render children?.()}\n  </div>\n</section>\n\n<style>\n  section {\n    overflow: hidden;\n    height: 100%;\n    display: flex;\n    flex-direction: column;\n  }\n\n  header {\n    flex: none;\n    display: flex;\n    align-items: center;\n    border-bottom: 1px solid var(--sui-secondary-border-color);\n    padding: 0 16px;\n    height: var(--sui-primary-toolbar-size);\n  }\n\n  h3 {\n    font-size: var(--sui-font-size-x-large);\n  }\n\n  div {\n    flex: auto;\n    overflow: auto;\n\n    :global {\n      h4 {\n        display: flex;\n        align-items: center;\n        padding: 12px 12px 8px;\n        font-size: var(--sui-font-size-large);\n      }\n\n      & > .empty {\n        padding: 16px;\n      }\n\n      .empty {\n        color: var(--sui-secondary-foreground-color);\n        font-size: var(--sui-font-size-small);\n      }\n\n      .sui.button.ref {\n        display: flex;\n        justify-content: flex-start;\n        gap: 8px;\n        padding: 8px;\n        width: -moz-available;\n        width: -webkit-fill-available;\n        width: stretch;\n        height: auto;\n      }\n    }\n  }\n</style>\n","import { escapeRegExp } from '@sveltia/utils/string';\nimport { get } from 'svelte/store';\n\nimport { collectors } from '$lib/services/config';\nimport { allEntries } from '$lib/services/contents';\nimport { getCollection } from '$lib/services/contents/collection';\nimport { getEntriesByCollection } from '$lib/services/contents/collection/entries';\nimport { getEntrySummary } from '$lib/services/contents/entry/summary';\nimport { getOptions } from '$lib/services/contents/fields/relation/helper';\n\n/**\n * @import {\n * Entry,\n * EntryBacklink,\n * FlattenedEntryContent,\n * InternalLocaleCode,\n * } from '$lib/types/private';\n * @import { FieldKeyPath, RelationField } from '$lib/types/public';\n */\n\n/**\n * Get the stored relation values for a field in a given entry content map.\n * @param {FlattenedEntryContent} content Flattened entry content.\n * @param {FieldKeyPath} keyPath Field key path.\n * @param {boolean} multiple Whether the field accepts multiple values.\n * @returns {any[]} Array of stored values.\n */\nconst getRelationValues = (content, keyPath, multiple) => {\n  if (multiple) {\n    return Object.entries(content)\n      .filter(([key]) => new RegExp(`^${escapeRegExp(keyPath)}\\\\.\\\\d+$`).test(key))\n      .map(([, value]) => value);\n  }\n\n  const value = content[keyPath];\n\n  return value !== undefined && value !== null ? [value] : [];\n};\n\n/**\n * Get the value that would be stored for the target entry in a relation field. This resolves what\n * the `value_field` template produces for a given entry.\n * @param {RelationField} fieldConfig Relation field config.\n * @param {Entry} targetEntry The target entry.\n * @param {InternalLocaleCode} locale Locale.\n * @returns {Set<any>} Set of values that represent this entry in the relation field.\n */\nconst getTargetValues = (fieldConfig, targetEntry, locale) => {\n  const { collection: refCollectionName, file: refFileName } = fieldConfig;\n  const refCollection = getCollection(refCollectionName);\n\n  if (!refCollection) {\n    return new Set();\n  }\n\n  // Build the options list for the target collection and find which values correspond to the target\n  // entry. This reuses the same logic that the relation editor widget uses.\n  const refEntries = refFileName\n    ? get(allEntries).filter((e) =>\n        Object.values(e.locales).some(({ path }) => path.includes(refFileName)),\n      )\n    : getEntriesByCollection(refCollectionName);\n\n  const options = getOptions({ locale, fieldConfig, refEntries });\n  const valueField = fieldConfig.value_field;\n  const usesSlug = !valueField || valueField === '{{slug}}' || valueField === 'slug';\n\n  if (usesSlug) {\n    return new Set([targetEntry.slug]);\n  }\n\n  // For custom value_field, find which option values this target entry would produce\n  const targetContent =\n    targetEntry.locales[locale]?.content ?? Object.values(targetEntry.locales)[0]?.content ?? {};\n\n  // If the value field is a simple field name (no template syntax), use it directly\n  if (!valueField.includes('{{') && !valueField.includes('*')) {\n    const val = targetContent[valueField];\n\n    return val !== undefined && val !== null ? new Set([val]) : new Set();\n  }\n\n  // For template-based value fields, find options whose values contain the target entry’s slug\n  const targetSlug = targetEntry.slug;\n\n  const matchingValues = new Set(\n    options.filter((o) => String(o.value).includes(targetSlug)).map((o) => o.value),\n  );\n\n  // Fallback: also check if any option value equals a simple field value\n  if (matchingValues.size === 0) {\n    const simpleKey = valueField.replace(/^{{|}}$/g, '');\n    const val = targetContent[simpleKey];\n\n    if (val !== undefined && val !== null) {\n      matchingValues.add(val);\n    }\n  }\n\n  return matchingValues;\n};\n\n/**\n * Check if a source entry references the target through the given relation field at the given key\n * path. Returns `true` if a reference is found.\n * @param {FlattenedEntryContent} content Flattened source entry content.\n * @param {FieldKeyPath} effectiveKeyPath Key path, possibly containing wildcards.\n * @param {boolean} multiple Whether the relation field is multiple.\n * @param {Set<any>} targetValues Target values to match.\n * @param {RegExp} [wildcardPattern] Pre-compiled pattern for wildcard key paths.\n * @returns {boolean} Whether a reference was found.\n */\nconst hasReference = (content, effectiveKeyPath, multiple, targetValues, wildcardPattern) => {\n  if (wildcardPattern) {\n    return Object.keys(content)\n      .filter((key) => wildcardPattern.test(key))\n      .some((key) => getRelationValues(content, key, multiple).some((v) => targetValues.has(v)));\n  }\n\n  return getRelationValues(content, effectiveKeyPath, multiple).some((v) => targetValues.has(v));\n};\n\n/**\n * Find all entries that reference the given target entry through relation fields.\n * @param {object} args Arguments.\n * @param {string} args.collectionName Target collection name.\n * @param {string} [args.fileName] Target file name (for file/singleton collections).\n * @param {Entry} args.entry Target entry.\n * @returns {EntryBacklink[]} Array of backlinks referencing the target entry.\n */\nexport const getBacklinks = ({ collectionName, fileName, entry }) => {\n  const targetCollection = getCollection(collectionName);\n\n  if (!targetCollection) {\n    return [];\n  }\n\n  const {\n    _i18n: { defaultLocale },\n  } = targetCollection;\n\n  // Find all relation fields that reference the target collection (and optionally file)\n  const relevantRelations = [...collectors.relationFields].filter(({ fieldConfig }) => {\n    if (fieldConfig.collection !== collectionName) {\n      return false;\n    }\n\n    if (fileName && fieldConfig.file && fieldConfig.file !== fileName) {\n      return false;\n    }\n\n    return true;\n  });\n\n  if (relevantRelations.length === 0) {\n    return [];\n  }\n\n  // Compute what values identify the target entry in each relation field\n  /** @type {Map<RelationField, Set<any>>} */\n  const targetValuesMap = new Map(\n    relevantRelations.map(({ fieldConfig }) => [\n      fieldConfig,\n      getTargetValues(fieldConfig, entry, defaultLocale),\n    ]),\n  );\n\n  // For each relation field, scan entries in the source collection and find matches\n  return relevantRelations.flatMap(({ fieldConfig, context }) => {\n    const sourceCollectionConfig = context.collection;\n\n    if (!sourceCollectionConfig || !('name' in sourceCollectionConfig)) {\n      return [];\n    }\n\n    const sourceCollectionName = sourceCollectionConfig.name;\n    const sourceCollection = getCollection(sourceCollectionName);\n\n    if (!sourceCollection) {\n      return [];\n    }\n\n    const sourceLocale = sourceCollection._i18n.defaultLocale;\n    /* v8 ignore next */\n    const targetValues = targetValuesMap.get(fieldConfig) ?? new Set();\n\n    if (targetValues.size === 0) {\n      return [];\n    }\n\n    // Determine the key path of the relation field in the source entry’s content. The\n    // `typedKeyPath` may contain type annotations like `blocks.*<image>.src`; strip them.\n    const typedKeyPath = context.typedKeyPath ?? '';\n\n    const keyPath = typedKeyPath\n      .replace(/<[^>]+>/g, '')\n      .replace(/\\.\\*\\./g, '.*.')\n      .replace(/\\.\\*$/, '.*');\n\n    const fieldName = fieldConfig.name;\n    const baseKeyPath = keyPath.replace(/\\*\\./g, '').replace(/\\*$/g, '');\n    const effectiveKeyPath = baseKeyPath || fieldName;\n\n    const wildcardPattern = effectiveKeyPath.includes('*')\n      ? new RegExp(`^${escapeRegExp(effectiveKeyPath).replace(/\\\\\\*/g, '\\\\d+')}$`)\n      : undefined;\n\n    const sourceEntries =\n      sourceCollectionName === collectionName\n        ? getEntriesByCollection(sourceCollectionName).filter((e) => e.slug !== entry.slug)\n        : getEntriesByCollection(sourceCollectionName);\n\n    return sourceEntries\n      .map((sourceEntry) => {\n        const content =\n          sourceEntry.locales[sourceLocale]?.content ??\n          Object.values(sourceEntry.locales)[0]?.content;\n\n        if (\n          !content ||\n          !hasReference(\n            content,\n            effectiveKeyPath,\n            !!fieldConfig.multiple,\n            targetValues,\n            wildcardPattern,\n          )\n        ) {\n          return undefined;\n        }\n\n        return /** @type {EntryBacklink} */ ({\n          collectionName: sourceCollectionName,\n          collectionLabel: sourceCollection.label ?? sourceCollectionName,\n          fieldLabel: fieldConfig.label ?? fieldName,\n          entry: sourceEntry,\n          summary: getEntrySummary(sourceCollection, sourceEntry),\n        });\n      })\n      .filter((/** @type {EntryBacklink | undefined} */ b) => !!b);\n  });\n};\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Button } from '@sveltia/ui';\n\n  import PanelContainer from '$lib/components/contents/details/sidebar/panels/panel-container.svelte';\n  import { goto } from '$lib/services/app/navigation';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { getBacklinks } from '$lib/services/contents/entry/backlinks';\n\n  /**\n   * @import { EntryBacklink } from '$lib/types/private';\n   */\n\n  /** @type {EntryBacklink[]} */\n  const backlinks = $derived.by(() => {\n    const draft = $entryDraft;\n\n    if (!draft?.originalEntry) {\n      return [];\n    }\n\n    return getBacklinks({\n      collectionName: draft.collectionName,\n      fileName: draft.fileName,\n      entry: draft.originalEntry,\n    });\n  });\n\n  /**\n   * @typedef {{ collectionLabel: string, items: EntryBacklink[] }} EntryBacklinkGroup\n   */\n\n  /** @type {EntryBacklinkGroup[]} */\n  const groupedEntries = $derived.by(() => {\n    /** @type {EntryBacklinkGroup[]} */\n    const groups = [];\n\n    backlinks.forEach((ref) => {\n      const existing = groups.find((g) => g.collectionLabel === ref.collectionLabel);\n\n      if (existing) {\n        existing.items.push(ref);\n      } else {\n        groups.push({ collectionLabel: ref.collectionLabel, items: [ref] });\n      }\n    });\n\n    return groups;\n  });\n</script>\n\n<PanelContainer title={_('entry_sidebar.backlinks.title')}>\n  {#if backlinks.length > 0}\n    {#each groupedEntries as { collectionLabel, items } (collectionLabel)}\n      <section class=\"collection\" role=\"group\">\n        <h4>{collectionLabel}</h4>\n        {#each items as ref (ref.entry.id)}\n          <Button\n            class=\"ref\"\n            variant=\"ghost\"\n            onclick={() => {\n              goto(`/collections/${ref.collectionName}/entries/${ref.entry.subPath}`, {\n                transitionType: 'forwards',\n              });\n            }}\n          >\n            <span class=\"summary\">{ref.summary}</span>\n          </Button>\n        {/each}\n      </section>\n    {/each}\n  {:else}\n    <div class=\"empty\">{_('entry_sidebar.backlinks.no_entries')}</div>\n  {/if}\n</PanelContainer>\n\n<style>\n  .collection {\n    padding: 4px;\n\n    &:not(:first-child) {\n      border-top: 2px solid var(--sui-secondary-background-color);\n    }\n  }\n</style>\n","import { get } from 'svelte/store';\n\nimport { backend } from '$lib/services/backends';\n\n/**\n * @import { Entry, FileCommit } from '$lib/types/private';\n */\n\n/**\n * @typedef {object} EntryHistory\n * @property {FileCommit[]} commits Fetched commits.\n * @property {boolean} loading Whether commits are being fetched.\n * @property {boolean} error Whether the fetch failed.\n */\n\n/** @type {Map<string, EntryHistory>} */\nconst historyCache = new Map();\n\n/**\n * Fetch the commit history for the current entry draft, using a cache to avoid redundant requests.\n * Returns immediately if the data is already cached for the same entry.\n * @param {Entry} entry The entry to fetch the history for.\n * @returns {Promise<EntryHistory>} The commit history result.\n */\nexport const fetchEntryHistory = async (entry) => {\n  const { id, locales } = entry;\n  const cached = historyCache.get(id);\n\n  if (cached) {\n    return cached;\n  }\n\n  const _backend = get(backend);\n\n  if (!_backend?.fetchFileCommits) {\n    return { commits: [], loading: false, error: false };\n  }\n\n  const paths = [...new Set(Object.values(locales).map((l) => l.path))];\n\n  try {\n    const commits = await _backend.fetchFileCommits(paths);\n    const result = { commits, loading: false, error: false };\n\n    historyCache.set(id, result);\n\n    return result;\n  } catch {\n    const result = { commits: [], loading: false, error: true };\n\n    historyCache.set(id, result);\n\n    return result;\n  }\n};\n\n/**\n * Clear the cached commit history for the given entry ID, so that the next call to\n * {@link fetchEntryHistory} fetches fresh data.\n * @param {string} entryId The ID of the entry to clear from the cache.\n */\nexport const clearEntryHistoryCache = (entryId) => {\n  historyCache.delete(entryId);\n};\n","<script>\n  import { _, locale as appLocale } from '@sveltia/i18n';\n  import { Button } from '@sveltia/ui';\n  import { onMount } from 'svelte';\n\n  import PanelContainer from '$lib/components/contents/details/sidebar/panels/panel-container.svelte';\n  import { backend } from '$lib/services/backends';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { fetchEntryHistory } from '$lib/services/contents/entry/history';\n  import { formatDate } from '$lib/services/utils/date';\n  import { openNewTab } from '$lib/services/utils/window';\n\n  /**\n   * @import { FileCommit } from '$lib/types/private';\n   */\n\n  /** @type {FileCommit[]} */\n  let commits = $state([]);\n  let loading = $state(false);\n  let error = $state(false);\n\n  /**\n   * Load the commit history for the current entry, using the external cache.\n   */\n  const load = async () => {\n    const entry = $entryDraft?.originalEntry;\n\n    if (!entry) {\n      return;\n    }\n\n    loading = true;\n    ({ commits, error } = await fetchEntryHistory(entry));\n    loading = false;\n  };\n\n  onMount(() => {\n    load();\n  });\n</script>\n\n<PanelContainer title={_('entry_sidebar.history.title')}>\n  {#if loading}\n    <div class=\"empty\">{_('loading')}</div>\n  {:else if error}\n    <div class=\"empty\">{_('entry_sidebar.history.fetch_failed')}</div>\n  {:else if commits.length > 0}\n    <div role=\"list\" class=\"commits\">\n      {#each commits as commit (commit.sha)}\n        {@const commitURL = $backend?.repository?.commitBaseURL\n          ? `${$backend.repository.commitBaseURL}/${commit.sha}`\n          : undefined}\n        <Button\n          class=\"ref\"\n          variant=\"ghost\"\n          role=\"link\"\n          disabled={!commitURL}\n          onclick={() => {\n            if (commitURL) {\n              openNewTab(commitURL);\n            }\n          }}\n        >\n          {#if commit.authorAvatarURL}\n            <img\n              class=\"avatar\"\n              src={commit.authorAvatarURL}\n              alt=\"\"\n              width=\"24\"\n              height=\"24\"\n              loading=\"lazy\"\n            />\n          {:else}\n            <span class=\"avatar placeholder\" aria-hidden=\"true\"></span>\n          {/if}\n          <span class=\"details\">\n            <span class=\"author\">{commit.authorName}</span>\n            <span class=\"date\">{formatDate(commit.date, appLocale.current)}</span>\n          </span>\n        </Button>\n      {/each}\n    </div>\n  {:else}\n    <div class=\"empty\">{_('entry_sidebar.history.no_history')}</div>\n  {/if}\n</PanelContainer>\n\n<style>\n  .commits {\n    padding: 4px;\n  }\n\n  .avatar {\n    flex: none;\n    width: 24px;\n    height: 24px;\n    border-radius: 50%;\n    background-color: var(--sui-secondary-background-color);\n  }\n\n  .details {\n    display: flex;\n    flex-direction: column;\n    gap: 2px;\n    overflow: hidden;\n    font-size: var(--sui-font-size-small);\n  }\n\n  .author {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n\n  .date {\n    color: var(--sui-tertiary-foreground-color);\n  }\n</style>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Button } from '@sveltia/ui';\n\n  import ValidationError from '$lib/components/contents/details/editor/validation-error.svelte';\n  import PanelContainer from '$lib/components/contents/details/sidebar/panels/panel-container.svelte';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { getField } from '$lib/services/contents/entry/fields';\n  import { getLocaleLabel } from '$lib/services/contents/i18n';\n\n  /**\n   * @import { EntryDraft, InternalLocaleCode } from '$lib/types/private';\n   * @import { FieldKeyPath, VisibleField } from '$lib/types/public';\n   */\n\n  const { validationMessages, collectionName, fileName, currentValues, isIndexFile, validities } =\n    $derived(/** @type {EntryDraft} */ ($entryDraft ?? {}));\n\n  const hasResults = $derived(\n    Object.values(validities ?? {}).some((map) => !!Object.keys(map).length),\n  );\n\n  const getFieldArgs = $derived({ collectionName, fileName, currentValues, isIndexFile });\n\n  /**\n   * Focuses the field in the editor corresponding to the given locale and key path.\n   * @param {object} args Arguments.\n   * @param {InternalLocaleCode} args.locale Locale code.\n   * @param {FieldKeyPath} args.keyPath Key path of the field.\n   */\n  const focusField = ({ locale, keyPath }) => {\n    window.postMessage(\n      { type: 'highlight-editor-field', payload: { locale, keyPath } },\n      window.location.origin,\n    );\n  };\n</script>\n\n<PanelContainer title={_('entry_sidebar.validation.title')}>\n  {#if validities && hasResults}\n    {#each Object.entries(validationMessages) as [locale, messagesByKey] (locale)}\n      {@const valueMap = currentValues?.[locale]}\n      {@const label = getLocaleLabel(locale)}\n      <section class=\"locale\" role=\"group\">\n        {#if label}\n          <h4>{label}</h4>\n        {/if}\n        {#if Object.values(validities[locale]).some((v) => v.valid === false)}\n          {#each Object.keys(valueMap) as keyPath (keyPath)}\n            {@const field = getField({ ...getFieldArgs, valueMap, keyPath })}\n            {@const messages = messagesByKey[keyPath] ?? []}\n            {#if messages.length}\n              <Button\n                class=\"ref\"\n                variant=\"ghost\"\n                onclick={() => {\n                  focusField({ locale, keyPath });\n                }}\n              >\n                <span class=\"summary\">\n                  {/** @type {VisibleField} */ (field)?.label || field?.name}\n                </span>\n                {#each messages as message, index (index)}\n                  <ValidationError live=\"off\">\n                    {message}\n                  </ValidationError>\n                {/each}\n              </Button>\n            {/if}\n          {/each}\n        {:else}\n          <div class=\"empty\">{_('entry_sidebar.validation.no_errors_found')}</div>\n        {/if}\n      </section>\n    {/each}\n  {:else}\n    <div class=\"empty\">{_('entry_sidebar.validation.placeholder')}</div>\n  {/if}\n</PanelContainer>\n\n<style>\n  .locale {\n    padding: 4px;\n\n    &:not(:first-child) {\n      border-top: 2px solid var(--sui-secondary-background-color);\n    }\n\n    h4,\n    .empty {\n      margin: 0 !important;\n      padding: 12px;\n    }\n\n    .summary {\n      display: block;\n      color: var(--sui-secondary-foreground-color);\n      font-size: var(--sui-font-size-small);\n      font-weight: var(--sui-heading-font-weight);\n    }\n\n    :global {\n      .sui.button.ref {\n        flex-direction: column;\n        align-items: flex-start;\n        gap: 4px;\n      }\n    }\n  }\n</style>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Icon, SelectButton, SelectButtonGroup } from '@sveltia/ui';\n\n  import BacklinksPanel from '$lib/components/contents/details/sidebar/panels/backlinks-panel.svelte';\n  import HistoryPanel from '$lib/components/contents/details/sidebar/panels/history-panel.svelte';\n  import ValidationPanel from '$lib/components/contents/details/sidebar/panels/validation-panel.svelte';\n  import { backend } from '$lib/services/backends';\n  import { collectors } from '$lib/services/config';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { entryEditorSettings } from '$lib/services/contents/editor/settings';\n\n  /**\n   * @import { Component } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} SidebarTab\n   * @property {string} key Unique key of the tab.\n   * @property {string} label Tab label.\n   * @property {string} icon Material icon name.\n   * @property {boolean} disabled Whether the tab is disabled.\n   * @property {Component} panel The panel component to render when the tab is active.\n   */\n\n  /** Whether any relation field references the current entry’s collection. */\n  const isReferenced = $derived.by(() => {\n    const collectionName = $entryDraft?.collectionName;\n    const fileName = $entryDraft?.fileName;\n\n    if (!collectionName) {\n      return false;\n    }\n\n    return [...collectors.relationFields].some(({ fieldConfig }) => {\n      if (fieldConfig.collection !== collectionName) {\n        return false;\n      }\n\n      if (fileName && fieldConfig.file && fieldConfig.file !== fileName) {\n        return false;\n      }\n\n      return true;\n    });\n  });\n\n  /** @type {SidebarTab[]} */\n  const tabs = $derived([\n    {\n      key: 'validation',\n      label: _('entry_sidebar.validation.title'),\n      icon: 'check_circle',\n      disabled: false,\n      panel: ValidationPanel,\n    },\n    {\n      key: 'history',\n      label: _('entry_sidebar.history.title'),\n      icon: 'history',\n      disabled: !$backend?.isGit || !!$entryDraft?.isNew,\n      panel: HistoryPanel,\n    },\n    {\n      key: 'backlinks',\n      label: _('entry_sidebar.backlinks.title'),\n      icon: 'article_shortcut',\n      disabled: !isReferenced,\n      panel: BacklinksPanel,\n    },\n  ]);\n\n  /** @type {string | null} */\n  let activeTab = $state($entryEditorSettings?.sidebarPanel ?? null);\n\n  /** The displayed tab, falling back to Validation if the saved tab is unavailable. */\n  const EffectiveTab = $derived(\n    activeTab ? (tabs.find((t) => t.key === activeTab) ?? tabs[0]) : null,\n  );\n\n  $effect(() => {\n    entryEditorSettings.update((view = {}) => ({ ...view, sidebarPanel: activeTab }));\n  });\n</script>\n\n<div role=\"none\" class=\"sidebar\">\n  <SelectButtonGroup\n    class=\"tabs\"\n    aria-label={_('entry_sidebar.sidebar_panels')}\n    aria-controls=\"entry-sidebar-content\"\n  >\n    {#each tabs as { key, label, icon, disabled } (key)}\n      <SelectButton\n        iconic\n        aria-label={label}\n        selected={EffectiveTab?.key === key}\n        {disabled}\n        onclick={() => {\n          activeTab = activeTab === key ? null : key;\n        }}\n      >\n        <Icon name={icon} />\n      </SelectButton>\n    {/each}\n  </SelectButtonGroup>\n  {#if EffectiveTab}\n    <div role=\"none\" class=\"content\" id=\"entry-sidebar-content\">\n      <EffectiveTab.panel />\n    </div>\n  {/if}\n</div>\n\n<style>\n  .sidebar {\n    flex: none;\n    display: flex;\n    flex-direction: row-reverse;\n\n    :global {\n      .tabs {\n        flex: none;\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        gap: 8px;\n        margin: 0;\n        padding: 8px 0;\n        width: 48px;\n\n        button {\n          border-radius: 4px !important;\n        }\n      }\n    }\n  }\n\n  .content {\n    flex: none;\n    width: 320px;\n    margin-inline-start: 8px;\n    border-radius: 16px 16px 0 0;\n    background-color: var(--sui-primary-background-color);\n  }\n</style>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Alert, Dialog, TextInput } from '@sveltia/ui';\n  import equal from 'fast-deep-equal';\n\n  import { slugify } from '$lib/services/common/slug';\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  /**\n   * @typedef {false | 'empty' | 'invalid' | 'duplicate'} SlugValidationResult\n   */\n\n  /** @type {Props} */\n  let { open = $bindable(false) } = $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, SlugValidationResult>} */\n  const validations = $state({});\n\n  const componentId = $props.id();\n\n  /**\n   * Initialize the properties.\n   */\n  const init = () => {\n    const currentSlugSet = new Set(Object.values(currentSlugs));\n\n    otherSlugs = getEntriesByCollection(collectionName)\n      .flatMap((entry) => Object.values(entry.locales).map(({ slug }) => slug))\n      .filter((slug) => !currentSlugSet.has(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  /**\n   * Validate the slug for a given locale.\n   * @param {InternalLocaleCode} locale The locale code to validate.\n   * @returns {SlugValidationResult} The validation result.\n   */\n  const validateSlug = (locale) => {\n    if (!updatedSlugs[locale].trim()) {\n      return 'empty';\n    }\n\n    if (/[/\\s]/.test(updatedSlugs[locale])) {\n      return 'invalid';\n    }\n\n    if (otherSlugs.includes(updatedSlugs[locale])) {\n      return 'duplicate';\n    }\n\n    return false;\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 = Object.fromEntries(\n      Object.entries(updatedSlugs).map(([locale, slug]) => [locale, slugify(slug, { locale })]),\n    );\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 (locale)}\n      <section>\n        {#if !['_', '_default'].includes(locale)}\n          <div role=\"none\">\n            <h3>{getLocaleLabel(locale) ?? locale}</h3>\n          </div>\n        {/if}\n        <div role=\"none\">\n          <TextInput\n            dir=\"auto\"\n            flex\n            bind:value={updatedSlugs[locale]}\n            oninput={() => {\n              validations[locale] = validateSlug(locale);\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]}\n              {_(`edit_slug_error.${validations[locale]}`)}\n            {/if}\n          </p>\n        </div>\n      </section>\n    {/each}\n  </div>\n</Dialog>\n\n<style>\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-inline-end: 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 { unique } from '@sveltia/utils/array';\nimport { IndexedDB } from '@sveltia/utils/storage';\nimport { get } from 'svelte/store';\n\nimport { allAssets } from '$lib/services/assets';\nimport { backend } from '$lib/services/backends';\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';\nimport { buildRenumberChanges } from '$lib/services/contents/collection/entries/reorder';\nimport { getPreviousSha } from '$lib/services/contents/draft/save/changes';\n\n/**\n * @import { Asset, Entry, FileChange, InternalEntryCollection } 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  const idSet = new Set(ids);\n\n  allEntries.set(_allEntries.filter((file) => !idSet.has(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    const assetPathSet = new Set(assetPaths);\n\n    allAssets.update((assets) => assets.filter((asset) => !assetPathSet.has(asset.path)));\n  }\n};\n\n/**\n * Delete entries by slugs.\n * @param {Entry[]} entries List of entries to be deleted.\n * @param {Asset[]} [assets] List of associated assets to be deleted.\n */\nexport const deleteEntries = async (entries, assets = []) => {\n  const databaseName = get(backend)?.repository?.databaseName;\n  const cacheDB = databaseName ? new IndexedDB(databaseName, 'file-cache') : undefined;\n  const changes = /** @type {FileChange[]} */ ([]);\n  const action = 'delete';\n\n  const ids = await Promise.all(\n    entries.map(async ({ id, locales, slug }) => {\n      // Remove duplicate paths for single file i18n\n      const paths = /** @type {string[]} */ (unique(Object.values(locales).map((l) => l.path)));\n\n      await Promise.all(\n        paths.map(async (path) => {\n          const previousSha = await getPreviousSha({ cacheDB, previousPath: path });\n\n          changes.push({ action, slug, path, previousSha });\n        }),\n      );\n\n      return id;\n    }),\n  );\n\n  const assetPaths = assets.map(({ path, sha }) => {\n    changes.push({ action, path, previousSha: sha });\n\n    return path;\n  });\n\n  // When the collection has manual reordering enabled, bundle the renumber updates of the remaining\n  // entries into the same commit so that delete + renumber is one atomic operation. The same\n  // file-cache handle is reused to avoid opening a second IndexedDB connection.\n  const collection = /** @type {InternalEntryCollection | undefined} */ (get(selectedCollection));\n\n  const { changes: renumberChanges, savingEntries: renumberSavingEntries } =\n    await buildRenumberChanges(collection, {\n      excludeIds: new Set(entries.map(({ id }) => id)),\n      cacheDB,\n    });\n\n  changes.push(...renumberChanges);\n\n  await saveChanges({\n    changes,\n    savingEntries: renumberSavingEntries,\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 { cmsConfig } from '$lib/services/config';\nimport {\n  getIndexFile,\n  isCollectionIndexFile,\n} from '$lib/services/contents/collection/entries/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 * InternalEntryCollection,\n * LocaleContentMap,\n * LocaleExpanderMap,\n * LocaleSlugMap,\n * } from '$lib/types/private';\n */\n\n/**\n * Tag to enable the slug editor for the default locale.\n * @internal\n */\nexport const SLUG_EDITOR_TAG = '{{fields._slug}}';\n\n/**\n * Tag to enable the slug editor for all locales.\n * @internal\n */\nexport const LOCALIZED_SLUG_EDITOR_TAG = '{{fields._slug | localize}}';\n\n/**\n * Get the `slugEditor` property for an entry draft.\n * @internal\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 {LocaleSlugMap} args.originalSlugs Original slugs for each locale.\n * @returns {Record<string, boolean | 'readonly'>} Whether to show the slug editor for each locale.\n * If the `slug` template contains the `{{fields._slug}}` tag, the slug editor will be enabled for\n * the default locale and disabled (read-only) for other locales. If the `slug` template contains\n * the `{{fields._slug | localize}}` tag, the slug editor will be enabled for all locales.\n * Otherwise, the slug editor will be disabled for all locales. Note that the slug editor will only\n * be shown for new entries in entry collections.\n * @see https://github.com/sveltia/sveltia-cms/issues/499\n */\nexport const getSlugEditorProp = ({ collection, collectionFile, originalSlugs }) => {\n  const isEntryCollection = collection._type === 'entry';\n  const { allLocales, defaultLocale } = (collectionFile ?? collection)._i18n;\n\n  // The slug editor is only relevant for entry collections\n  if (!isEntryCollection) {\n    return Object.fromEntries(allLocales.map((locale) => [locale, false]));\n  }\n\n  const {\n    identifier_field: identifierField = 'title',\n    slug: slugTemplate = `{{${identifierField}}}`,\n  } = collection;\n\n  const localizedSlugEditorEnabled = slugTemplate.includes(LOCALIZED_SLUG_EDITOR_TAG);\n  const slugEditorEnabled = slugTemplate.includes(SLUG_EDITOR_TAG) || localizedSlugEditorEnabled;\n\n  return Object.fromEntries(\n    allLocales.map((locale) => {\n      if (!slugEditorEnabled || originalSlugs._ || originalSlugs[locale]) {\n        return [locale, false];\n      }\n\n      return [locale, locale === defaultLocale || localizedSlugEditorEnabled || 'readonly'];\n    }),\n  );\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 {LocaleContentMap} [args.extraValues] Key is a locale code, value is a flattened object\n * containing field values in rich text editor components. Can be set when resetting an entry draft.\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  extraValues,\n  expanderStates,\n  isIndexFile = isCollectionIndexFile(collection, originalEntry),\n}) => {\n  const collectionName = collection.name;\n  const fileName = collectionFile?.name;\n  const { id, slug, locales } = originalEntry;\n  const isNew = id === undefined;\n\n  const { fields: regularFields = [], _i18n } =\n    collectionFile ?? /** @type {InternalEntryCollection} */ (collection);\n\n  const indexFile = isIndexFile ? getIndexFile(collection) : undefined;\n  const fields = indexFile?.fields ?? regularFields;\n\n  const canPreview =\n    indexFile?.editor?.preview ??\n    collectionFile?.editor?.preview ??\n    collection.editor?.preview ??\n    get(cmsConfig)?.editor?.preview ??\n    true;\n\n  const {\n    allLocales,\n    initialLocales,\n    defaultLocale,\n    // `canonicalSlug.key` is always set by config normalization (defaults to 'translationKey')\n    canonicalSlug: { key: canonicalSlugKey },\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, defaultLocale, dynamicValues })]\n        : [locale, structuredClone(locales?.[locale]?.content)],\n    ),\n  );\n\n  entryDraft.set({\n    id: isNew ? crypto.randomUUID() : id,\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    defaultLocale,\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: extraValues ?? Object.fromEntries(allLocales.map((locale) => [locale, {}])),\n    validities: Object.fromEntries(allLocales.map((locale) => [locale, {}])),\n    validationMessages: Object.fromEntries(allLocales.map((locale) => [locale, {}])),\n    // Any locale-agnostic view states will be put under the `_` key\n    expanderStates: expanderStates ?? { _: {} },\n    slugEditor: getSlugEditorProp({ collection, collectionFile, originalSlugs }),\n  });\n\n  restoreBackupIfNeeded({ collectionName, fileName, slug });\n};\n","import { get } from 'svelte/store';\n\nimport { getOrderFieldKey } from '$lib/services/contents/collection/entries/reorder';\nimport { entryDraft } from '$lib/services/contents/draft';\nimport { getSlugEditorProp } from '$lib/services/contents/draft/create';\nimport { showDuplicateToast } from '$lib/services/contents/editor';\nimport { getField, LIST_KEY_PATH_REGEX } from '$lib/services/contents/entry/fields';\nimport { getDefaultValueMap as getHiddenFieldDefaultValueMap } from '$lib/services/contents/fields/hidden/defaults';\nimport { getInitialValue as getInitialUuidValue } from '$lib/services/contents/fields/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  const orderFieldKey = getOrderFieldKey(collection);\n\n  Object.entries(currentValues).forEach(([locale, valueMap]) => {\n    // Remove the canonical slug\n    delete valueMap[canonicalSlugKey];\n\n    // Drop the manual sort order; a fresh value will be assigned at save time so the duplicate gets\n    // a unique order even after backup/restore round trips\n    if (orderFieldKey) {\n      delete valueMap[orderFieldKey];\n    }\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) && LIST_KEY_PATH_REGEX.test(keyPath)) {\n          delete valueMap[keyPath];\n          keyPath = keyPath.replace(LIST_KEY_PATH_REGEX, '');\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              fieldConfig: /** @type {HiddenField} */ (fieldConfig),\n              keyPath,\n              locale,\n              defaultLocale,\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    id: crypto.randomUUID(),\n    createdAt: Date.now(),\n    isNew: true,\n    originalEntry: undefined,\n    originalSlugs: {},\n    currentSlugs: {},\n    slugEditor: getSlugEditorProp({ collection, collectionFile, originalSlugs: {} }),\n  });\n\n  showDuplicateToast.set(true);\n};\n","import { get } from 'svelte/store';\n\nimport { entryDraft } from '$lib/services/contents/draft';\n\n/**\n * @import { EntryDraft, LocaleValidityMap } from '$lib/types/private';\n */\n\n/**\n * Validate the slugs and return the results. At this time, we only check if the slug is empty when\n * the slug editor is shown.\n * @internal\n * @returns {{ valid: boolean, validities: LocaleValidityMap }} Validation results.\n */\nexport const validateSlugs = () => {\n  const { currentLocales, currentSlugs, slugEditor } = /** @type {EntryDraft} */ (get(entryDraft));\n  /** @type {LocaleValidityMap} */\n  const validities = {};\n  let valid = true;\n\n  Object.entries(currentSlugs).forEach(([locale, slug]) => {\n    // Only validate slugs for locales that are currently enabled. A disabled locale’s slug is not\n    // written to disk, so an empty value should not block saving.\n    // @see https://github.com/sveltia/sveltia-cms/issues/740\n    const slugEnabled = !!currentLocales?.[locale] && !!slugEditor[locale];\n    const valueMissing = slugEnabled && !slug?.trim();\n    // A pattern mismatch is when the slug contains a forward slash or whitespace. This is not\n    // allowed because it would break the URL structure. A more detailed pattern check based on the\n    // global `slug` options can be added later if needed.\n    const patternMismatch = slugEnabled && /[/\\s]/.test(slug ?? '');\n    const invalid = valueMissing || patternMismatch;\n\n    if (invalid) {\n      valid = false;\n    }\n\n    validities[locale] = { _slug: { valueMissing, patternMismatch, valid: !invalid } };\n  });\n\n  return { valid, validities };\n};\n","import { entryDraft } from '$lib/services/contents/draft';\nimport { validateFields } from '$lib/services/contents/draft/validate/fields';\nimport { validateSlugs } from '$lib/services/contents/draft/validate/slugs';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import { EntryDraft } from '$lib/types/private';\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 {\n    valid: currentValuesValid,\n    validities: currentValuesValidities,\n    validationMessages: currentValuesMessages,\n  } = validateFields('currentValues');\n\n  const {\n    valid: extraValuesValid,\n    validities: extraValuesValidities,\n    validationMessages: extraValuesMessages,\n  } = validateFields('extraValues');\n\n  const { valid: slugsValid, validities: slugsValidities } = validateSlugs();\n\n  /** @type {Writable<EntryDraft>} */ (entryDraft).update((_draft) => ({\n    ..._draft,\n    validities: Object.fromEntries(\n      Object.keys(currentValuesValidities).map((locale) => [\n        locale,\n        {\n          ...currentValuesValidities[locale],\n          ...extraValuesValidities[locale],\n          ...slugsValidities[locale],\n        },\n      ]),\n    ),\n    validationMessages: Object.fromEntries(\n      Object.keys(currentValuesMessages).map((locale) => [\n        locale,\n        {\n          ...currentValuesMessages[locale],\n          ...extraValuesMessages[locale],\n        },\n      ]),\n    ),\n  }));\n\n  return currentValuesValid && extraValuesValid && slugsValid;\n};\n","import { get } from 'svelte/store';\n\nimport { isLastCommitPublished } from '$lib/services/backends';\nimport { skipCIConfigured, skipCIEnabled } from '$lib/services/backends/git/shared/integration';\nimport { saveChanges } from '$lib/services/backends/save';\nimport {\n  contentUpdatesToast,\n  UPDATE_TOAST_DEFAULT_STATE,\n} from '$lib/services/contents/collection/data';\nimport { getEntriesByCollection } from '$lib/services/contents/collection/entries';\nimport { getOrderFieldKey } from '$lib/services/contents/collection/entries/reorder';\nimport { entryDraft } from '$lib/services/contents/draft';\nimport { deleteBackup } from '$lib/services/contents/draft/backup';\nimport { callEventHooks } from '$lib/services/contents/draft/events';\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';\nimport { clearEntryHistoryCache } from '$lib/services/contents/entry/history';\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 published = get(skipCIConfigured) && !(skipCI ?? get(skipCIEnabled));\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 * For new entries in reorder-enabled entry collections, assign a fresh manual sort order to the\n * draft’s current values: highest existing order + 1, or 1 if no entries have one yet. Doing this\n * at save time (rather than draft creation) makes the assignment race-safe even when a draft has\n * been backed up and restored after another entry took the previously computed value. Callers must\n * gate on `draft.isNew` and `draft.collection._type === 'entry'` themselves.\n * @param {EntryDraft} draft Draft to mutate in place.\n */\nconst assignManualSortOrder = (draft) => {\n  const { collection, collectionFile, currentValues } = draft;\n  const orderKey = getOrderFieldKey(collection);\n\n  if (!orderKey) {\n    return;\n  }\n\n  const { defaultLocale } = (collectionFile ?? collection)._i18n;\n\n  const maxOrder = getEntriesByCollection(collection.name).reduce((max, entry) => {\n    const value = Number(entry.locales[defaultLocale]?.content?.[orderKey]);\n\n    return Number.isFinite(value) && value > max ? value : max;\n  }, 0);\n\n  const nextOrder = maxOrder + 1;\n\n  Object.values(currentValues).forEach((valueMap) => {\n    valueMap[orderKey] = nextOrder;\n  });\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 { isNew, collection, collectionName, fileName, currentValues, originalEntry } = draft;\n\n  if (!validateEntry()) {\n    expandInvalidFields({ collectionName, fileName, currentValues });\n\n    throw new Error('validation_failed');\n  }\n\n  if (isNew && collection._type === 'entry') {\n    assignManualSortOrder(draft);\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  await callEventHooks({ type: 'postSave', draft, savingEntry });\n\n  updateStores({ skipCI });\n  deleteBackup(collectionName, isNew ? '' : defaultLocaleSlug);\n\n  if (originalEntry) {\n    clearEntryHistoryCache(originalEntry.id);\n  }\n\n  return results.savedEntries[0];\n};\n","<script>\n  import { _, locale as appLocale } from '@sveltia/i18n';\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\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 { skipCIConfigured, skipCIEnabled } from '$lib/services/backends/git/shared/integration';\n  import { getCollectionLabel } from '$lib/services/contents/collection';\n  import { deleteEntries } from '$lib/services/contents/collection/data/delete';\n  import { getCollectionFileLabel } from '$lib/services/contents/collection/files';\n  import { collectionState } from '$lib/services/contents/collection/view';\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 { env } from '$lib/services/user/env.svelte';\n  import { prefs } from '$lib/services/user/prefs.svelte';\n  import { openNewTab } from '$lib/services/utils/window';\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 notFound = $derived($entryDraft === undefined);\n  const isNew = $derived($entryDraft?.isNew ?? true);\n  const isIndexFile = $derived($entryDraft?.isIndexFile ?? false);\n  const collection = $derived($entryDraft?.collection);\n  const entryCollection = $derived(collection?._type === 'entry' ? collection : undefined);\n  const collectionFile = $derived($entryDraft?.collectionFile);\n  const originalEntry = $derived($entryDraft?.originalEntry);\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.current` is a key, because `getCollectionLabel` can return a localized label\n    appLocale.current && collection ? getCollectionLabel(collection) : '',\n  );\n  const collectionLabelSingular = $derived(\n    // `appLocale.current` is a key, because `getCollectionLabel` can return a localized label\n    appLocale.current && 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      .flatMap((validity) => Object.values(validity).map(({ valid }) => !valid))\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          extraValues: $entryDraft?.extraValues,\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 = env.isSmallScreen ? MenuItem : Button}\n  {@const canDuplicate =\n    !isIndexFile &&\n    entryCollection?.duplicate !== false &&\n    !$collectionState.creationDisabled &&\n    // @todo Enable duplication for Hugo’s page bundles = the `path` option. We need to\n    // duplicate assets along with the entry.\n    // @see https://github.com/sveltia/sveltia-cms/issues/526\n    !entryCollection?.path}\n  {@const canDelete = entryCollection?.delete !== false}\n  {#if canDuplicate}\n    <Component\n      variant=\"ghost\"\n      label={_('duplicate')}\n      aria-label={_('duplicate_entry')}\n      onclick={() => {\n        goto(`/collections/${collectionName}/new`, {\n          replaceState: true,\n          notifyChange: false,\n          transitionType: 'forwards',\n        });\n        duplicateDraft();\n      }}\n    />\n  {/if}\n  {#if canDelete}\n    <Component\n      variant=\"ghost\"\n      label={_('delete')}\n      aria-label={_('delete_entry')}\n      onclick={() => {\n        showDeleteDialog = true;\n      }}\n    />\n  {/if}\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    {#if !notFound}\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.current\n              ? getEntrySummary(collection, originalEntry)\n              : ''}\n          {#if env.isSmallScreen}\n            {entrySummary}\n          {:else}\n            {_('edit_entry_title', {\n              values: { collection: collectionLabel, entry: entrySummary },\n            })}\n          {/if}\n        {/if}\n      </TruncatedText>\n    {/if}\n  </h2>\n  {#if !disabled && previewURL}\n    <Button\n      variant=\"tertiary\"\n      label={_('view_on_live_site')}\n      onclick={() => {\n        openNewTab(previewURL);\n      }}\n    />\n  {/if}\n  {#if !env.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 env.isSmallScreen && !disabled && !collectionFile && !isNew}\n          {@render overflowButtons()}\n        {/if}\n        <MenuItem\n          label={_('edit_slug')}\n          disabled={!!collectionFile || isNew || isIndexFile || entryCollection?.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 !(env.isSmallScreen || env.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 $skipCIConfigured}\n    <SplitButton\n      variant=\"primary\"\n      label={_($skipCIEnabled ? (saving ? 'saving' : 'save') : saving ? 'publishing' : 'publish')}\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={_($skipCIEnabled ? 'save_and_publish' : 'save_without_publishing')}\n            onclick={() => {\n              save({ skipCI: !$skipCIEnabled });\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    {_('entry_validation_errors', { values: { count: errorCount } })}\n  </Alert>\n</Toast>\n\n<Toast id={$copyFromLocaleToast.id} bind:show={$copyFromLocaleToast.show}>\n  {@const { status, message, count, sourceLanguage } = $copyFromLocaleToast}\n  <Alert {status}>\n    {_(`editor.${message}`, {\n      values: {\n        count,\n        source: sourceLanguage ? (getLocaleLabel(sourceLanguage) ?? sourceLanguage) : '',\n      },\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([originalEntry], associatedAssets);\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>\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 { _ } from '@sveltia/i18n';\n  import {\n    Alert,\n    Button,\n    EmptyState,\n    Group,\n    Icon,\n    ResizableHandle,\n    ResizablePane,\n    ResizablePaneGroup,\n    Spacer,\n    Toast,\n  } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import { onMount, tick, untrack } from 'svelte';\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 Sidebar from '$lib/components/contents/details/sidebar/sidebar.svelte';\n  import Toolbar from '$lib/components/contents/details/toolbar.svelte';\n  import { goto } from '$lib/services/app/navigation';\n  import { collectionState } from '$lib/services/contents/collection/view';\n  import { entryDraft, entryDraftInteracted } from '$lib/services/contents/draft';\n  import {\n    resetBackupToastState,\n    showBackupToastIfNeeded,\n  } from '$lib/services/contents/draft/backup';\n  import {\n    editorFirstPane,\n    editorSecondPane,\n    MIN_PANE_SIZE,\n    showContentOverlay,\n    showDuplicateToast,\n  } from '$lib/services/contents/editor';\n  import { getExpanderKeys, syncExpanderStates } from '$lib/services/contents/editor/expanders';\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 { env } from '$lib/services/user/env.svelte';\n\n  /**\n   * @import { EntryDraft, InternalLocaleCode } from '$lib/types/private';\n   * @import { FieldKeyPath } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string | undefined} [editorLocale] The locale to open the editor in.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    editorLocale = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  let restoring = false;\n  let switching = false;\n  let swapDragStartX = 0;\n  let swapDragStartY = 0;\n\n  let hidden = $state(true);\n  /** @type {HTMLElement | undefined} */\n  let wrapper = $state();\n  /** @type {HTMLElement | undefined} */\n  let firstPaneContentArea = $state();\n  /** @type {HTMLElement | undefined} */\n  let secondPaneContentArea = $state();\n\n  const notFound = $derived($entryDraft === undefined);\n  const {\n    isNew = true,\n    canPreview = true,\n    collection,\n    collectionName,\n    collectionFile,\n    fileName,\n    isIndexFile,\n    currentValues,\n  } = $derived(/** @type {EntryDraft} */ ($entryDraft ?? {}));\n  const { showPreview } = $derived($entryEditorSettings ?? {});\n  const { i18nEnabled, allLocales, defaultLocale } = $derived(\n    (collectionFile ?? collection)?._i18n ?? DEFAULT_I18N_CONFIG,\n  );\n  const paneStateKey = $derived(\n    collectionFile?.name ? [collection?.name, collectionFile.name].join('|') : collection?.name,\n  );\n  const { canCreate, quota, creationDisabled } = $derived($collectionState);\n\n  const [firstPaneSize, secondPaneSize, minPaneSize] = $derived.by(() => {\n    if (!$editorFirstPane && !$editorSecondPane) {\n      return [0, 0, 0];\n    }\n\n    if (!$editorFirstPane || !$editorSecondPane) {\n      return [$editorFirstPane ? 100 : 0, $editorSecondPane ? 100 : 0, 0];\n    }\n\n    if (\n      typeof $editorFirstPane.width === 'number' &&\n      typeof $editorSecondPane.width === 'number' &&\n      $editorFirstPane.width >= MIN_PANE_SIZE &&\n      $editorSecondPane.width >= MIN_PANE_SIZE &&\n      $editorFirstPane.width + $editorSecondPane.width === 100\n    ) {\n      return [$editorFirstPane.width, $editorSecondPane.width, MIN_PANE_SIZE];\n    }\n\n    return [50, 50, MIN_PANE_SIZE];\n  });\n\n  /**\n   * Restore the pane state from IndexedDB.\n   * @returns {Promise<boolean>} Whether the panes are restored.\n   */\n  const restorePanes = async () => {\n    let [_editorFirstPane, _editorSecondPane] =\n      $entryEditorSettings?.paneStates?.[paneStateKey ?? ''] ?? [];\n\n    // Override the locale if specified\n    if (editorLocale) {\n      _editorFirstPane = { mode: 'edit', locale: editorLocale };\n      _editorSecondPane = { mode: 'preview', locale: editorLocale };\n    }\n\n    if (\n      restoring ||\n      !_editorFirstPane ||\n      !_editorSecondPane ||\n      (!!_editorFirstPane.locale && !allLocales.includes(_editorFirstPane.locale)) ||\n      (!!_editorSecondPane.locale && !allLocales.includes(_editorSecondPane.locale)) ||\n      ((!showPreview || !canPreview) &&\n        (_editorFirstPane.mode === 'preview' || _editorSecondPane.mode === 'preview')) ||\n      // If there are only 2 locales and the first pane is not in the default locale, don’t restore\n      // the panes so that the default locale is always shown in the first pane\n      (allLocales.length === 2 && _editorFirstPane.locale !== defaultLocale)\n    ) {\n      return false;\n    }\n\n    restoring = true;\n    await tick();\n    $editorFirstPane = _editorFirstPane;\n    $editorSecondPane = env.isSmallScreen || env.isMediumScreen ? null : _editorSecondPane;\n    await tick();\n    restoring = false;\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 || switching) {\n      return;\n    }\n\n    switching = true;\n\n    if (await restorePanes()) {\n      switching = false;\n\n      return;\n    }\n\n    $editorFirstPane = { mode: 'edit', locale: $editorFirstPane?.locale ?? defaultLocale };\n\n    if (env.isSmallScreen || env.isMediumScreen) {\n      $editorSecondPane = null;\n    } else if (!showPreview || !canPreview) {\n      const otherLocales = i18nEnabled\n        ? allLocales.filter((l) => l !== $editorFirstPane?.locale)\n        : [];\n\n      $editorSecondPane = otherLocales.length ? { mode: 'edit', locale: otherLocales[0] } : null;\n    } else {\n      $editorSecondPane = { mode: 'preview', locale: $editorFirstPane.locale };\n    }\n\n    switching = false;\n  };\n\n  /**\n   * Save the pane state to IndexedDB.\n   */\n  const savePanes = () => {\n    if (!collection || restoring || !$editorFirstPane || !$editorSecondPane || !paneStateKey) {\n      return;\n    }\n\n    entryEditorSettings.update((view = {}) => ({\n      ...view,\n      paneStates: {\n        ...view.paneStates,\n        [paneStateKey]: [$editorFirstPane, $editorSecondPane],\n      },\n    }));\n  };\n\n  /**\n   * Mark the draft as manually interacted when the user performs an action in the editor body.\n   * @param {Event} event DOM event.\n   */\n  const markInteracted = (event) => {\n    if (event.isTrusted && !$entryDraftInteracted) {\n      $entryDraftInteracted = true;\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  /**\n   * Ensure the given locale’s edit pane is visible, switching panes if needed.\n   * @param {InternalLocaleCode} locale Locale code.\n   */\n  const ensureEditPaneVisible = async (locale) => {\n    const firstPane = $editorFirstPane;\n    const secondPane = $editorSecondPane;\n\n    // Already visible in an edit pane\n    if (\n      (firstPane?.mode === 'edit' && firstPane.locale === locale) ||\n      (secondPane?.mode === 'edit' && secondPane.locale === locale)\n    ) {\n      return;\n    }\n\n    // Prefer switching a preview pane to edit mode for the target locale\n    if (secondPane?.mode === 'preview') {\n      $editorSecondPane = { mode: 'edit', locale };\n    } else if (firstPane?.mode === 'preview') {\n      $editorFirstPane = { mode: 'edit', locale };\n    } else if (secondPane) {\n      // Both are edit panes for other locales; switch the second one\n      $editorSecondPane = { mode: 'edit', locale };\n    } else {\n      // Single-pane layout\n      $editorFirstPane = { mode: 'edit', locale };\n    }\n\n    // Wait for the DOM to update after the pane switch\n    await sleep(100);\n  };\n\n  /**\n   * Highlight the corresponding editor field by expanding the parent list/object(s), moving the\n   * element into the viewport, and focus any control within the field, such as a text input or\n   * button.\n   * @param {object} args Arguments.\n   * @param {InternalLocaleCode} args.locale Locale code.\n   * @param {FieldKeyPath} args.keyPath Key path of the field.\n   */\n  const highlightEditorField = async ({ locale, keyPath }) => {\n    await ensureEditPaneVisible(locale);\n\n    const valueMap = currentValues?.[locale] ?? {};\n\n    const expanderKeys = getExpanderKeys({\n      collectionName,\n      fileName,\n      valueMap,\n      keyPath,\n      isIndexFile,\n    });\n\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\"][data-locale=\"${CSS.escape(locale)}\"] ` +\n          `.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('.field-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\n  /**\n   * Called when a message event is received. If the event is a highlight event, calls\n   * {@link highlightEditorField} with the event payload.\n   * @param {MessageEvent} event The message event.\n   */\n  const onmessage = (event) => {\n    // Only accept messages from the same window to prevent potential security issues\n    if (event.source !== window) {\n      return;\n    }\n\n    if (event.data?.type === 'highlight-editor-field' && event.data.payload) {\n      highlightEditorField(event.data.payload);\n    }\n  };\n\n  onMount(() => {\n    if (!$showContentOverlay) {\n      $entryDraft = null;\n    }\n\n    window.addEventListener('message', onmessage);\n\n    return () => {\n      window.removeEventListener('message', onmessage);\n    };\n  });\n\n  $effect(() => {\n    if (paneStateKey) {\n      // Reset the editor panes\n      $editorFirstPane = null;\n      $editorSecondPane = null;\n    }\n  });\n\n  $effect(() => {\n    void [collection, showPreview, canPreview, env.isSmallScreen, env.isMediumScreen];\n\n    untrack(() => {\n      switchPanes();\n    });\n  });\n\n  $effect(() => {\n    void [$editorFirstPane, $editorSecondPane];\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{#snippet firstPane()}\n  {#if $editorFirstPane}\n    {@const { locale, mode } = $editorFirstPane}\n    <div class=\"pane-wrapper\">\n      <Group\n        class=\"pane\"\n        aria-label={_(mode === 'edit' ? 'edit_x_locale' : 'preview_x_locale', {\n          values: { locale: getLocaleLabel(locale) ?? locale },\n        })}\n        data-locale={locale}\n        data-mode={mode}\n      >\n        <PaneHeader id=\"first-pane-header\" thisPane={editorFirstPane} thatPane={editorSecondPane} />\n        <PaneBody\n          id=\"first-pane-body\"\n          thisPane={editorFirstPane}\n          bind:thisPaneContentArea={firstPaneContentArea}\n          bind:thatPaneContentArea={secondPaneContentArea}\n        />\n      </Group>\n    </div>\n  {/if}\n{/snippet}\n\n{#snippet secondPane()}\n  {#if $editorSecondPane}\n    {@const { locale, mode } = $editorSecondPane}\n    <div class=\"pane-wrapper\">\n      <Group\n        class=\"pane\"\n        aria-label={_(mode === 'edit' ? 'edit_x_locale' : 'preview_x_locale', {\n          values: { locale: getLocaleLabel(locale) ?? locale },\n        })}\n        data-locale={locale}\n        data-mode={mode}\n      >\n        <PaneHeader\n          id=\"second-pane-header\"\n          thisPane={editorSecondPane}\n          thatPane={editorFirstPane}\n        />\n        <PaneBody\n          id=\"second-pane-body\"\n          thisPane={editorSecondPane}\n          bind:thisPaneContentArea={secondPaneContentArea}\n          bind:thatPaneContentArea={firstPaneContentArea}\n        />\n      </Group>\n    </div>\n  {/if}\n{/snippet}\n\n<div\n  role=\"group\"\n  class=\"wrapper content-editor\"\n  aria-label={_('content_editor')}\n  bind:this={wrapper}\n>\n  {#key $entryDraft?.id}\n    <Toolbar disabled={isNew && creationDisabled} />\n    {#if $entryDraft === null}\n      <!-- Hide the content after saving a draft -->\n    {:else if notFound || (isNew && creationDisabled)}\n      <EmptyState>\n        <div role=\"none\">\n          {#if notFound}\n            {_('entry_not_found')}\n          {:else if !canCreate}\n            {_('creating_entries_disabled_by_admin')}\n          {:else}\n            {_('creating_entries_disabled_by_quota', { values: { quota } })}\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=\"body\" onpointerdown={markInteracted} onkeydown={markInteracted}>\n        {#key `${collectionName}|${fileName}|${isIndexFile}`}\n          <div role=\"none\" class=\"content-area\">\n            {#if $editorFirstPane && $editorSecondPane}\n              {#if firstPaneSize && secondPaneSize}\n                <ResizablePaneGroup\n                  onResize={({ sizes }) => {\n                    if ($editorFirstPane && $editorSecondPane) {\n                      [$editorFirstPane.width, $editorSecondPane.width] = sizes;\n                    }\n                  }}\n                >\n                  <ResizablePane defaultSize={firstPaneSize} minSize={minPaneSize}>\n                    {@render firstPane()}\n                  </ResizablePane>\n                  <ResizableHandle>\n                    <Button\n                      class=\"swap-button\"\n                      iconic\n                      size=\"small\"\n                      variant=\"tertiary\"\n                      aria-label={_('swap_panes')}\n                      onpointerdown={(e) => {\n                        swapDragStartX = e.clientX;\n                        swapDragStartY = e.clientY;\n                      }}\n                      onclick={(e) => {\n                        if (\n                          Math.abs(e.clientX - swapDragStartX) > 5 ||\n                          Math.abs(e.clientY - swapDragStartY) > 5\n                        ) {\n                          return;\n                        }\n\n                        [$editorFirstPane, $editorSecondPane] = [\n                          $editorSecondPane,\n                          $editorFirstPane,\n                        ];\n                      }}\n                    >\n                      <Icon name=\"swap_horiz\" />\n                    </Button>\n                  </ResizableHandle>\n                  <ResizablePane defaultSize={secondPaneSize} minSize={minPaneSize}>\n                    {@render secondPane()}\n                  </ResizablePane>\n                </ResizablePaneGroup>\n              {/if}\n            {:else if $editorFirstPane}\n              {@render firstPane()}\n            {:else if $editorSecondPane}\n              {@render secondPane()}\n            {:else}\n              <Spacer flex />\n            {/if}\n          </div>\n          <!-- @todo Enable sidebar for mobile -->\n          {#if !env.isSmallScreen}\n            <Sidebar />\n          {/if}\n        {/key}\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>\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  }\n\n  .pane-wrapper {\n    display: contents;\n\n    :global {\n      & > .pane {\n        flex: auto;\n        height: 100%;\n        overflow: hidden;\n        display: flex;\n        flex-direction: column;\n      }\n    }\n  }\n\n  .body {\n    flex: auto;\n    display: flex;\n    overflow: hidden;\n  }\n\n  .content-area {\n    flex: auto;\n    background-color: var(--sui-primary-background-color);\n\n    &:not(:only-child) {\n      border-start-end-radius: 16px; /* sidebar is present */\n    }\n\n    :global {\n      .sui.resizable-handle {\n        background-color: var(--sui-secondary-background-color); /* same as toolbar */\n\n        .swap-button {\n          position: absolute;\n          top: calc(50% - 12px);\n          margin: 0;\n          border-radius: 50%;\n          opacity: 0.5;\n\n          &:hover,\n          &:focus-visible {\n            opacity: 1;\n          }\n        }\n      }\n    }\n  }\n</style>\n","<!--\n  @component\n  Shared cells (checkbox, thumbnail image, title) used by both the read-only entry list row and the\n  reorder list row.\n-->\n<script>\n  import { locale as appLocale } from '@sveltia/i18n';\n  import { Checkbox, GridCell, Icon, TruncatedText } from '@sveltia/ui';\n\n  import Image from '$lib/components/assets/shared/image.svelte';\n  import { selectedEntryIdSet } from '$lib/services/contents/collection/entries';\n  import {\n    getIndexFile,\n    isCollectionIndexFile,\n  } from '$lib/services/contents/collection/entries/index-file';\n  import { getEntryThumbnail } from '$lib/services/contents/entry/assets';\n  import { getEntrySummary } from '$lib/services/contents/entry/summary';\n  import { env } from '$lib/services/user/env.svelte';\n\n  /**\n   * @import { Entry, InternalEntryCollection, ViewType } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {InternalEntryCollection} collection Selected collection.\n   * @property {Entry} entry Entry.\n   * @property {ViewType} viewType View type.\n   * @property {boolean} [showCheckbox] Whether to render the selection checkbox cell. Defaults to\n   * `false`; the read-only list row passes `true`, while the reorder row leaves it off.\n   * @property {(selected: boolean) => void} [onSelect] Selection change handler.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    collection,\n    entry,\n    viewType,\n    showCheckbox = false,\n    onSelect = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n{#if showCheckbox && !(env.isSmallScreen || env.isMediumScreen)}\n  <GridCell class=\"checkbox\">\n    <Checkbox\n      role=\"none\"\n      tabindex=\"-1\"\n      checked={$selectedEntryIdSet.has(entry.id)}\n      onChange={({ detail: { checked } }) => {\n        onSelect?.(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.current}\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\n<style>\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","<!--\n  @component\n  Render a read-only entry row. Clicking the row navigates to the entry edit page.\n-->\n<script>\n  import { GridRow } from '@sveltia/ui';\n\n  import EntryListItemCells from '$lib/components/contents/list/entry-list-item-cells.svelte';\n  import { goto } from '$lib/services/app/navigation';\n  import { selectedEntries } from '$lib/services/contents/collection/entries';\n  import { listedEntries } from '$lib/services/contents/collection/view';\n\n  /**\n   * @import { Entry, InternalEntryCollection, ViewType } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {InternalEntryCollection} 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  <EntryListItemCells {collection} {entry} {viewType} showCheckbox onSelect={updateSelection} />\n</GridRow>\n","<!--\n  @component\n  Render an entry row in reorder mode: draggable, with Move Up / Move Down buttons.\n-->\n<script>\n  import { _ } from '@sveltia/i18n';\n  import { Button, GridCell, GridRow, Icon } from '@sveltia/ui';\n\n  import EntryListItemCells from '$lib/components/contents/list/entry-list-item-cells.svelte';\n  import { listedEntries } from '$lib/services/contents/collection/view';\n\n  /**\n   * @import { Entry, InternalEntryCollection, ViewType } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {InternalEntryCollection} collection Selected collection.\n   * @property {Entry} entry Entry.\n   * @property {ViewType} viewType View type.\n   * @property {boolean} [dragging] Whether this item is currently being dragged.\n   * @property {boolean} [dropBefore] Whether to show a drop indicator before this item.\n   * @property {boolean} [dropAfter] Whether to show a drop indicator after this item.\n   * @property {boolean} [canMoveUp] Whether the Move Up action is available.\n   * @property {boolean} [canMoveDown] Whether the Move Down action is available.\n   * @property {() => void} [onDragStart] Drag start handler.\n   * @property {(clientY: number, rect: DOMRect) => void} [onDragOver] Drag over handler.\n   * @property {() => void} [onDrop] Drop handler.\n   * @property {() => void} [onDragEnd] Drag end handler.\n   * @property {() => void} [onMoveUp] Move up handler.\n   * @property {() => void} [onMoveDown] Move down handler.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    collection,\n    entry,\n    viewType,\n    dragging = false,\n    dropBefore = false,\n    dropAfter = false,\n    canMoveUp = false,\n    canMoveDown = false,\n    onDragStart = undefined,\n    onDragOver = undefined,\n    onDrop = undefined,\n    onDragEnd = undefined,\n    onMoveUp = undefined,\n    onMoveDown = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<GridRow\n  aria-rowindex={$listedEntries.indexOf(entry)}\n  class={[dragging && 'drag-source', dropBefore && 'drop-before', dropAfter && 'drop-after']\n    .filter(Boolean)\n    .join(' ')}\n  draggable\n  ondragstart={(/** @type {DragEvent} */ event) => {\n    onDragStart?.();\n\n    if (event.dataTransfer) {\n      event.dataTransfer.effectAllowed = 'move';\n    }\n  }}\n  ondragover={(/** @type {DragEvent & { currentTarget: HTMLElement }} */ event) => {\n    event.preventDefault();\n\n    if (event.dataTransfer) {\n      event.dataTransfer.dropEffect = 'move';\n    }\n\n    onDragOver?.(event.clientY, event.currentTarget.getBoundingClientRect());\n  }}\n  ondrop={(/** @type {DragEvent} */ event) => {\n    event.preventDefault();\n    onDrop?.();\n  }}\n  ondragend={() => {\n    onDragEnd?.();\n  }}\n>\n  <EntryListItemCells {collection} {entry} {viewType} />\n  <GridCell class=\"reorder-actions\">\n    <Button\n      variant=\"ghost\"\n      iconic\n      disabled={!canMoveUp}\n      aria-label={_('move_up')}\n      onclick={(event) => {\n        event.stopPropagation();\n        onMoveUp?.();\n      }}\n    >\n      {#snippet startIcon()}\n        <Icon name=\"arrow_upward\" />\n      {/snippet}\n    </Button>\n    <Button\n      variant=\"ghost\"\n      iconic\n      disabled={!canMoveDown}\n      aria-label={_('move_down')}\n      onclick={(event) => {\n        event.stopPropagation();\n        onMoveDown?.();\n      }}\n    >\n      {#snippet startIcon()}\n        <Icon name=\"arrow_downward\" />\n      {/snippet}\n    </Button>\n  </GridCell>\n</GridRow>\n","<!--\n  @component\n  Render the entry list in reorder mode. Each group is shown as its own `GridBody` with\n  drag-and-drop reordering. The flattened ordered entries are published to the `reorderedEntries`\n  store so the toolbar Save button can read it.\n-->\n<script>\n  import { GridBody } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import { onMount } from 'svelte';\n\n  import EntryReorderListItem from '$lib/components/contents/list/entry-reorder-list-item.svelte';\n  import { getIndexFile } from '$lib/services/contents/collection/entries/index-file';\n  import { sortEntriesByOrderField } from '$lib/services/contents/collection/entries/reorder';\n  import {\n    entryGroups,\n    reorderDirty,\n    reorderedEntries,\n  } from '$lib/services/contents/collection/view';\n\n  /**\n   * @import { Entry, InternalEntryCollection, ViewType } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {InternalEntryCollection} collection Selected entry collection.\n   * @property {ViewType} viewType View type passed through to entry items.\n   */\n\n  /** @type {Props} */\n  const { collection, viewType } = $props();\n\n  /**\n   * Mutable per-group entry lists maintained during reorder mode.\n   * @type {{ [groupName: string]: Entry[] }}\n   */\n  let reorderGroups = $state({});\n\n  /**\n   * Name of the group that contains the currently dragged entry.\n   * @type {string}\n   */\n  let dragGroupName = $state('');\n\n  /**\n   * Index of the entry currently being dragged within its group.\n   * @type {number | undefined}\n   */\n  let dragIndex = $state(undefined);\n\n  /**\n   * Insertion position during drag: the dragged entry will be placed *before* this index.\n   * @type {number | undefined}\n   */\n  let dropIndex = $state(undefined);\n\n  /**\n   * Sync the flattened ordered entries back to the shared store so the toolbar Save button can read\n   * it.\n   * @param {{ [groupName: string]: Entry[] }} groups Per-group entry lists. Defaults to the current\n   * {@link reorderGroups}.\n   */\n  const publishOrder = (groups = reorderGroups) => {\n    reorderedEntries.set($entryGroups.flatMap(({ name, entries }) => groups[name] ?? entries));\n  };\n\n  /**\n   * Move an entry within a group from one index to another.\n   * @param {string} groupName Group name.\n   * @param {number} from Source index.\n   * @param {number} to Destination index.\n   */\n  const moveEntry = (groupName, from, to) => {\n    if (from === to) return;\n\n    const group = [...(reorderGroups[groupName] ?? [])];\n    const [item] = group.splice(from, 1);\n\n    group.splice(to, 0, item);\n    reorderGroups[groupName] = group;\n    reorderDirty.set(true);\n    publishOrder();\n  };\n\n  // Snapshot the entry groups exactly once when this component mounts (i.e. when the user enters\n  // reorder mode). Any subsequent reactive updates to `$entryGroups` — for example, a background\n  // refresh after another tab’s commit — must not clobber the user’s in-progress drag arrangement.\n  // The reorder UI takes ownership of the list until Save or Cancel. `onMount` runs once and never\n  // re-subscribes, which is exactly the lifetime we need here (vs. `$effect` + `untrack`).\n  onMount(() => {\n    // Exclude the index file (e.g. Hugo `_index.md`) from reorder: it is always pinned to the top\n    // of the list regardless of its `order` value, so dragging it has no effect.\n    const indexFileName = getIndexFile(collection)?.name;\n\n    const initial = Object.fromEntries(\n      $entryGroups.map(({ name, entries }) => [\n        name,\n        sortEntriesByOrderField(\n          indexFileName ? entries.filter((entry) => entry.slug !== indexFileName) : entries,\n          collection,\n        ),\n      ]),\n    );\n\n    reorderGroups = initial;\n    publishOrder(initial);\n  });\n</script>\n\n<div role=\"none\" class=\"wrapper\">\n  {#each $entryGroups as { name, entries } (name)}\n    {#await sleep() then}\n      <GridBody label={name !== '*' ? name : undefined}>\n        {@const localEntries = reorderGroups[name] ?? entries}\n        {#each localEntries as entry, index (entry.id)}\n          <EntryReorderListItem\n            {collection}\n            {entry}\n            {viewType}\n            dragging={dragIndex === index && dragGroupName === name}\n            dropBefore={dropIndex === index &&\n              dragGroupName === name &&\n              dragIndex !== index &&\n              dragIndex !== index - 1}\n            dropAfter={dropIndex === localEntries.length &&\n              index === localEntries.length - 1 &&\n              dragGroupName === name &&\n              dragIndex !== localEntries.length - 1}\n            canMoveUp={index > 0}\n            canMoveDown={index < localEntries.length - 1}\n            onDragStart={() => {\n              dragGroupName = name;\n              dragIndex = index;\n            }}\n            onDragOver={(/** @type {number} */ clientY, /** @type {DOMRect} */ rect) => {\n              dragGroupName = name;\n              dropIndex = clientY < rect.top + rect.height / 2 ? index : index + 1;\n            }}\n            onDrop={() => {\n              if (\n                dragIndex !== undefined &&\n                dropIndex !== undefined &&\n                dropIndex !== dragIndex &&\n                dropIndex !== dragIndex + 1\n              ) {\n                moveEntry(name, dragIndex, dropIndex > dragIndex ? dropIndex - 1 : dropIndex);\n              }\n\n              dragIndex = undefined;\n              dropIndex = undefined;\n            }}\n            onDragEnd={() => {\n              dragIndex = undefined;\n              dropIndex = undefined;\n            }}\n            onMoveUp={() => {\n              if (index > 0) moveEntry(name, index, index - 1);\n            }}\n            onMoveDown={() => {\n              if (index < localEntries.length - 1) moveEntry(name, index, index + 1);\n            }}\n          />\n        {/each}\n      </GridBody>\n    {/await}\n  {/each}\n</div>\n\n<style>\n  .wrapper {\n    :global {\n      .grid-row.drag-source {\n        opacity: 0.4;\n        cursor: grabbing;\n      }\n\n      .grid-row[draggable='true']:not(.drag-source) {\n        cursor: grab;\n      }\n\n      .grid-row.drop-before .grid-cell {\n        border-top: 3px solid var(--sui-primary-accent-color) !important;\n      }\n\n      .grid-row.drop-after .grid-cell {\n        border-bottom: 3px solid var(--sui-primary-accent-color) !important;\n      }\n    }\n  }\n</style>\n","<script>\n  import { _, locale as appLocale } from '@sveltia/i18n';\n  import { Button, Icon, Menu, MenuItem, SplitButton } from '@sveltia/ui';\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 { canCreateIndexFile } from '$lib/services/contents/collection/entries';\n  import { getIndexFile } from '$lib/services/contents/collection/entries/index-file';\n  import { collectionState } from '$lib/services/contents/collection/view';\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 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.current` is a key, because `getIndexFile` can return a localized label\n    appLocale.current && $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={$collectionState.creationDisabled}\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 { _ } from '@sveltia/i18n';\n  import { EmptyState, GridBody, InfiniteScroll } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\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 EntryReorderList from '$lib/components/contents/list/entry-reorder-list.svelte';\n  import CreateEntryButton from '$lib/components/contents/toolbar/create-entry-button.svelte';\n  import { selectedCollection } from '$lib/services/contents/collection';\n  import {\n    currentView,\n    entryGroups,\n    listedEntries,\n    reordering,\n  } from '$lib/services/contents/collection/view';\n\n  /**\n   * @import { Entry, InternalEntryCollection } from '$lib/types/private';\n   */\n\n  const collection = $derived(\n    /** @type {InternalEntryCollection | undefined} */ ($selectedCollection),\n  );\n  const viewType = $derived($reordering ? 'list' : $currentView.type);\n  const allEntries = $derived($entryGroups.flatMap(({ entries }) => entries));\n</script>\n\n<ListContainer aria-label={_('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        <!-- @todo Implement custom table column option that can replace summary template -->\n        {#if $reordering}\n          <EntryReorderList {collection} {viewType} />\n        {:else}\n          {#each $entryGroups as { name, entries } (name)}\n            {#await sleep() then}\n              <GridBody label={name !== '*' ? name : undefined}>\n                <InfiniteScroll\n                  items={entries.filter(\n                    ({ locales }) =>\n                      !!(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        {/if}\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 { _ } from '@sveltia/i18n';\n  import { EmptyState, GridCell, GridRow, Icon, InfiniteScroll, TruncatedText } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\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   * @import { InternalFileCollection } from '$lib/types/private';\n   */\n\n  const files = $derived(\n    /** @type {InternalFileCollection} */ ($selectedCollection)?.files.filter(\n      isValidCollectionFile,\n    ) ?? [],\n  );\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>\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 { _ } from '@sveltia/i18n';\n  import { Icon, Option } from '@sveltia/ui';\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>\n  .wrapper {\n    display: contents;\n  }\n</style>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Alert, Button, Toast } from '@sveltia/ui';\n\n  import { backend, isLastCommitPublished } from '$lib/services/backends';\n  import { skipCIConfigured } from '$lib/services/backends/git/shared/integration';\n  import { env } from '$lib/services/user/env.svelte';\n  import { prefs } from '$lib/services/user/prefs.svelte';\n  import { isSecureURL } from '$lib/services/utils/networking';\n\n  const deployHookURL = $derived(prefs.deployHookURL);\n  const deployHookAuthHeader = $derived(prefs.deployHookAuthHeader);\n  const triggerDeployment = $derived($backend?.triggerDeployment);\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      if (deployHookURL && !isSecureURL(deployHookURL)) {\n        throw new Error('Deploy hook URL must use HTTPS or localhost');\n      }\n\n      const { ok, status } = deployHookURL\n        ? await fetch(deployHookURL, {\n            method: 'POST',\n            mode: deployHookAuthHeader ? 'cors' : 'no-cors',\n            headers: deployHookAuthHeader ? { Authorization: deployHookAuthHeader } : {},\n          })\n        : ((await triggerDeployment?.()) ?? {});\n\n      // If the `mode` is `no-cors`, the regular response status will be `0`\n      if (!ok && (deployHookAuthHeader || 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 $skipCIConfigured}\n  <Button\n    variant=\"secondary\"\n    size={env.isSmallScreen ? 'small' : 'medium'}\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 { _, locale as appLocale } from '@sveltia/i18n';\n  import { Divider, Icon, Listbox, Option, OptionGroup } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n\n  import SingletonOption from '$lib/components/contents/list/singleton-option.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 { goto } from '$lib/services/app/navigation';\n  import { cmsConfig } 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 { env } from '$lib/services/user/env.svelte';\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} [isSearchPage] Whether the current page is the search results page.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    isSearchPage = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const numberFormatter = $derived(Intl.NumberFormat(appLocale.current));\n  // @ts-ignore Dividers can be included in the collection list\n  const collections = $derived($cmsConfig?.collections?.filter(({ hide }) => !hide) ?? []);\n  const singletons = $derived($cmsConfig?.singletons ?? []);\n</script>\n\n<div role=\"none\" class=\"primary-sidebar\">\n  {#if env.isSmallScreen}\n    <header>\n      <h2>{_('contents')}</h2>\n      <PublishButton />\n    </header>\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 } = collection}\n              <Option\n                label={label || name}\n                selected={env.isSmallScreen || isSearchPage\n                  ? false\n                  : $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 = (\n                      'files' in collection ? collection.files : getEntriesByCollection(name)\n                    ).length}\n                    <span class=\"count\" aria-label=\"({_('x_entries', { values: { count } })})\">\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 env.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 class=\"count\" aria-label=\"({_('x_entries', { values: { count } })})\">\n                {numberFormatter.format(count)}\n              </span>\n            {/snippet}\n          </Option>\n        </OptionGroup>\n      {/if}\n    {/if}\n  </Listbox>\n</div>\n","<!--\n  @component\n  Save/Cancel buttons shown in the collection toolbar while the entry list is in reorder mode. Owns\n  the saving state and the error toast, so the parent toolbar only needs to render this component\n  when `$reordering` is `true`.\n-->\n<script>\n  import { _ } from '@sveltia/i18n';\n  import { Alert, Button, Toast } from '@sveltia/ui';\n\n  import { selectedCollection } from '$lib/services/contents/collection';\n  import { reorderEntries } from '$lib/services/contents/collection/entries/reorder';\n  import {\n    reorderDirty,\n    reorderedEntries,\n    reordering,\n  } from '$lib/services/contents/collection/view';\n\n  /**\n   * @import { InternalEntryCollection } from '$lib/types/private';\n   */\n\n  let saving = $state(false);\n  let errorToast = $state(false);\n</script>\n\n<Button\n  variant=\"primary\"\n  label={_('done')}\n  aria-label={_('done_reordering_entries')}\n  disabled={saving || !$reorderDirty}\n  onclick={async () => {\n    const collection = /** @type {InternalEntryCollection} */ ($selectedCollection);\n\n    saving = true;\n\n    try {\n      await reorderEntries(collection, $reorderedEntries);\n      $reordering = false;\n    } catch (/** @type {any} */ ex) {\n      // eslint-disable-next-line no-console\n      console.error(ex);\n      errorToast = true;\n    }\n\n    saving = false;\n  }}\n/>\n<Button\n  variant=\"secondary\"\n  label={_('cancel')}\n  aria-label={_('cancel_reordering_entries')}\n  disabled={saving}\n  onclick={() => {\n    $reordering = false;\n  }}\n/>\n\n<Toast bind:show={errorToast}>\n  <Alert status=\"error\">\n    {_('saving_reorder_failed')}\n  </Alert>\n</Toast>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { ConfirmationDialog } from '@sveltia/ui';\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 { open = $bindable(false) } = $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.flatMap((entry) =>\n        getAssociatedAssets({ entry, collectionName, relative: true }),\n      );\n    }\n\n    return [];\n  });\n</script>\n\n<ConfirmationDialog\n  bind:open\n  title={_('delete_entries', { values: { count: $selectedEntries.length } })}\n  okLabel={_('delete')}\n  onOk={() => {\n    deleteEntries($selectedEntries, associatedAssets);\n  }}\n>\n  {@const all = $selectedEntries.length > 1 && $selectedEntries.length === $listedEntries.length}\n  {_(\n    associatedAssets.length\n      ? all\n        ? 'confirm_deleting_all_entries_with_assets'\n        : 'confirm_deleting_selected_entries_with_assets'\n      : all\n        ? 'confirm_deleting_all_entries'\n        : 'confirm_deleting_selected_entries',\n    { values: { count: $selectedEntries.length } },\n  )}\n</ConfirmationDialog>\n","<script>\n  import { _, locale as appLocale } from '@sveltia/i18n';\n  import {\n    Button,\n    FloatingActionButtonWrapper,\n    Infobar,\n    Spacer,\n    Toolbar,\n    TruncatedText,\n  } from '@sveltia/ui';\n  import { sanitize } from 'isomorphic-dompurify';\n  import { marked } from 'marked';\n\n  import BackButton from '$lib/components/common/page-toolbar/back-button.svelte';\n  import ReorderControls from '$lib/components/contents/list/reorder-controls.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 { selectedEntries } from '$lib/services/contents/collection/entries';\n  import {\n    collectionState,\n    listedEntries,\n    reordering,\n  } from '$lib/services/contents/collection/view';\n  import { env } from '$lib/services/user/env.svelte';\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    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 collectionLabel = $derived(\n    // `appLocale.current` is a key, because `getCollectionLabel` can return a localized label\n    appLocale.current && $selectedCollection ? getCollectionLabel($selectedCollection) : name,\n  );\n  const {\n    isEntryCollection,\n    canCreate,\n    canDelete,\n    canReorder,\n    quota,\n    remaining,\n    nearingQuota,\n    creationDisabled,\n  } = $derived($collectionState);\n</script>\n\n{#if $selectedCollection}\n  <Toolbar variant=\"primary\" aria-label={_('collection')}>\n    {#if env.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 env.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 && $reordering}\n      <ReorderControls />\n    {:else if isEntryCollection}\n      {#if !env.isSmallScreen}\n        <Button\n          variant=\"ghost\"\n          label={_('delete')}\n          aria-label={_('delete_selected_entries', { values: { count: $selectedEntries.length } })}\n          disabled={!$selectedEntries.length || !canDelete}\n          onclick={() => {\n            showDeleteDialog = true;\n          }}\n        />\n      {/if}\n      {#if canReorder}\n        <Button\n          variant=\"ghost\"\n          label={_('reorder')}\n          aria-label={_('reorder_entries')}\n          disabled={!$listedEntries.length}\n          onclick={() => {\n            $reordering = true;\n          }}\n        />\n      {/if}\n      <FloatingActionButtonWrapper>\n        {#if !env.isSmallScreen || ($listedEntries.length && !creationDisabled)}\n          <CreateEntryButton\n            collectionName={name}\n            label={env.isSmallScreen ? undefined : _('create')}\n            keyShortcuts=\"Accel+E\"\n          />\n        {/if}\n      </FloatingActionButtonWrapper>\n    {/if}\n  </Toolbar>\n  {#if isEntryCollection && (creationDisabled || nearingQuota)}\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 if creationDisabled}\n        {_('creating_entries_disabled_by_quota', { values: { quota } })}\n      {:else if nearingQuota}\n        {_('creating_entries_nearing_quota', { values: { quota, remaining } })}\n      {/if}\n    </Infobar>\n  {/if}\n{/if}\n\n<DeleteEntriesDialog bind:open={showDeleteDialog} />\n\n<style>\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 { _ } from '@sveltia/i18n';\n  import { Group } from '@sveltia/ui';\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, isAssetInFolder, 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 { env } from '$lib/services/user/env.svelte';\n\n  const folder = $derived(getAssetFolder({ collectionName: $selectedCollection?.name }));\n  const assets = $derived(\n    folder ? $allAssets.filter((asset) => isAssetInFolder(asset, folder)) : [],\n  );\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 && env.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}\n        onSelect={({ asset }) => {\n          goto(`/assets/${asset.path}`, { transitionType: 'forwards' });\n        }}\n      />\n    </DropZone>\n  </Group>\n{/if}\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Menu, MenuButton, MenuItemRadio } from '@sveltia/ui';\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 group (`${group.field}|${String(group.pattern)}`)}\n        {@const { label: _label, field, pattern } = group}\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 { _ } from '@sveltia/i18n';\n  import { Button, Divider, Icon, Spacer, Toolbar } from '@sveltia/ui';\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 {\n    currentView,\n    entryGroups,\n    listedEntries,\n    reordering,\n  } 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 { env } from '$lib/services/user/env.svelte';\n\n  /**\n   * @import { InternalEntryCollection } from '$lib/types/private';\n   */\n\n  const entryCollection = $derived(\n    $selectedCollection?._type === 'entry'\n      ? /** @type {InternalEntryCollection} */ ($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 && !$reordering}\n  <Toolbar variant=\"secondary\" aria-label={_('entry_list')}>\n    {#if !(env.isSmallScreen || env.isMediumScreen)}\n      <ItemSelector\n        allItems={$entryGroups.flatMap(({ entries }) => entries)}\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 !(env.isSmallScreen || env.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 { _, locale as appLocale } from '@sveltia/i18n';\n  import { Alert, Toast } from '@sveltia/ui';\n  import { onMount } from 'svelte';\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 SearchMainArea from '$lib/components/search/search-main-area.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 { isSearchRoute } from '$lib/services/search/navigation';\n  import { env } from '$lib/services/user/env.svelte';\n\n  /**\n   * @import { InternalCollection } from '$lib/types/private';\n   */\n\n  const ROUTE_REGEX =\n    /^\\/collections(?:\\/(?<_collectionName>[^/]+)(?:\\/(?<routeType>new|entries))?(?:\\/(?<subPath>.+?))?)?$/;\n\n  let isIndexPage = $state(false);\n  let isSearchPage = $state(false);\n  let editorLocale = $state();\n\n  const MainContent = $derived('files' in ($selectedCollection ?? {}) ? 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(ROUTE_REGEX);\n\n    isIndexPage = false;\n    isSearchPage = false;\n\n    // Set the editor locale if specified in the URL params, e.g., `?_locale=fr`\n    editorLocale = params._locale;\n    delete params._locale;\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      $showContentOverlay = false;\n      // Check if it’s the search page, which has a different URL pattern (`#/search/{query}`)\n      isSearchPage = isSearchRoute(path);\n\n      return; // Different page\n    }\n\n    const { _collectionName, routeType, subPath } = match.groups;\n\n    if (!_collectionName) {\n      if (env.isSmallScreen) {\n        // Show the collection list only\n        $selectedCollection = undefined;\n        $showContentOverlay = false;\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      $showContentOverlay = false;\n      $announcedPageStatus = _('collection_not_found');\n\n      return; // Not Found\n    }\n\n    const { name: collectionName } = $selectedCollection;\n    const collectionLabel = getCollectionLabel($selectedCollection);\n    const _fileMap = '_fileMap' in $selectedCollection ? $selectedCollection._fileMap : undefined;\n\n    if (!routeType) {\n      $showContentOverlay = false;\n      $announcedPageStatus = _('viewing_x_collection', {\n        values: {\n          collection: collectionLabel,\n          count: $listedEntries.length,\n        },\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      // Entry 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.current) {\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    return () => {\n      $showContentOverlay = false;\n    };\n  });\n</script>\n\n<svelte:window\n  onhashchange={(event) => {\n    updateContentFromHashChange(event, navigate, ROUTE_REGEX);\n  }}\n/>\n\n<PageContainer uiSettingsKey=\"contents-page\" aria-label={_('content_library')}>\n  {#snippet primarySidebar()}\n    {#if !env.isSmallScreen || isIndexPage}\n      <PrimarySidebar {isSearchPage} />\n    {/if}\n  {/snippet}\n  {#snippet main()}\n    {#if isSearchPage}\n      <SearchMainArea />\n    {:else if !env.isSmallScreen || !isIndexPage}\n      <PageContainerMainArea\n        aria-label={_('x_collection', {\n          values: {\n            collection:\n              // `appLocale.current` is a key, because `getCollectionLabel` can return a localized\n              // label\n              appLocale.current && $selectedCollection\n                ? getCollectionLabel($selectedCollection)\n                : '',\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{#if $showContentOverlay}\n  <ContentDetailsOverlay {editorLocale} />\n{/if}\n\n<Toast bind:show={$contentUpdatesToast.saved}>\n  <Alert status=\"success\">\n    {_($contentUpdatesToast.published ? 'entry_saved_and_published' : 'entry_saved', {\n      values: { count: $contentUpdatesToast.count },\n    })}\n  </Alert>\n</Toast>\n\n<Toast bind:show={$contentUpdatesToast.deleted}>\n  <Alert status=\"success\">\n    {_('entries_deleted', { values: { count: $contentUpdatesToast.count } })}\n  </Alert>\n</Toast>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Option, Select } from '@sveltia/ui';\n\n  import { allTranslationServices } from '$lib/services/integrations/translators';\n  import { prefs } from '$lib/services/user/prefs.svelte';\n</script>\n\n<Select\n  aria-label={_('prefs.i18n.translators.default.select_service')}\n  value={prefs.defaultTranslationService}\n  onChange={(event) => {\n    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 { _ } from '@sveltia/i18n';\n  import { PromptDialog, Spacer } from '@sveltia/ui';\n  import { sanitize } from 'isomorphic-dompurify';\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.svelte';\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={_('translate_fields', {\n    values: { count: $translatorApiKeyDialogState.multiple ? 2 : 1 },\n  })}\n  showOk={false}\n  textboxAttrs={{\n    spellcheck: false,\n    monospace: true,\n    'aria-label': _('api_key'),\n  }}\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 sanitize(\n    _('prefs.i18n.translators.description', {\n      values: {\n        service: apiLabel,\n        homeHref: `href=\"${developerURL}\"`,\n        apiKeyHref: `href=\"${apiKeyURL}\"`,\n      },\n    })\n      // Remove invisible characters used for link detection in the locale string\n      .replace(/[\\u2068\\u2069]/g, ''),\n    { ALLOWED_TAGS: ['a'], ALLOWED_ATTR: ['href', 'target', 'rel'] },\n  )}\n</PromptDialog>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Alert, Toast } from '@sveltia/ui';\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    {_('entry_parse_errors', { values: { count: $entryParseErrors.length } })}\n  </Alert>\n</Toast>\n","import { derived, toStore, writable } from 'svelte/store';\n\nimport { backend } from '$lib/services/backends';\nimport { user } from '$lib/services/user/account.svelte';\nimport { env } from '$lib/services/user/env.svelte';\n\nexport const canShowMobileSignInDialog = derived(\n  [\n    toStore(() => env.isLargeScreen),\n    toStore(() => env.hasMouse),\n    toStore(() => env.isLocalHost),\n    backend,\n    toStore(() => user.account),\n  ],\n  ([_isLargeScreen, _hasMouse, _isLocalHost, _backend, _user]) =>\n    _isLargeScreen && _hasMouse && !_isLocalHost && !!_backend?.isGit && !!_user?.token,\n);\n\nexport const showMobileSignInDialog = writable(false);\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Button, Infobar } from '@sveltia/ui';\n  import { IndexedDB } from '@sveltia/utils/storage';\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 { _ } from '@sveltia/i18n';\n  import { Icon, SelectButton, SelectButtonGroup } from '@sveltia/ui';\n\n  import { goto, selectedPageName } from '$lib/services/app/navigation';\n  import { allAssetFolders, selectedAssetFolder } from '$lib/services/assets/folders';\n  import { backendName } from '$lib/services/backends';\n  import { cmsConfig } from '$lib/services/config';\n  import { searchMode } from '$lib/services/search';\n  import { env } from '$lib/services/user/env.svelte';\n\n  const pages = $derived.by(() => {\n    const _pages = [\n      {\n        key: 'collections',\n        label: _('contents'),\n        icon: 'article',\n        link: '/collections',\n        /** @type {string | undefined} */\n        searchMode: 'contents',\n      },\n    ];\n\n    // Hide Assets page if there is no asset folder configured\n    // @todo Remove this condition when the Asset Library supports external storage providers\n    if ($allAssetFolders.length) {\n      _pages.push({\n        key: 'assets',\n        label: _('assets'),\n        icon: 'photo',\n        link: env.isSmallScreen\n          ? '/assets'\n          : `/assets/${$selectedAssetFolder?.internalPath ?? '-/all'}`,\n        searchMode: 'assets',\n      });\n    }\n\n    if ($cmsConfig?.publish_mode === 'editorial_workflow') {\n      // _pages.push({\n      //   key: 'workflow',\n      //   label: _('editorial_workflow'),\n      //   icon: 'rebase_edit',\n      //   link: '/workflow',\n      // });\n    }\n\n    if ($backendName === 'local') {\n      // _pages.push({\n      //   key: 'config',\n      //   label: _('cms_config'),\n      //   icon: 'settings',\n      //   link: '/config',\n      // });\n    }\n\n    if (env.isSmallScreen) {\n      _pages.push({\n        key: 'menu',\n        label: _('menu'),\n        icon: 'menu',\n        link: '/menu',\n        searchMode: undefined,\n      });\n    }\n\n    return _pages;\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, searchMode: sMode }, index (key)}\n      <SelectButton\n        variant=\"ghost\"\n        iconic\n        selected={$selectedPageName === key || $searchMode === sMode}\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>\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 { _ } from '@sveltia/i18n';\n  import { BottomNavigation, Toolbar } from '@sveltia/ui';\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 { _ } from '@sveltia/i18n';\n  import { Dialog, Table, TableCell, TableRow } from '@sveltia/ui';\n\n  import { env } from '$lib/services/user/env.svelte';\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</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 (key)}\n              <kbd>{key.replace('Accel', env.isMacOS ? '⌘' : 'Ctrl')}</kbd>\n            {/each}\n          </TableCell>\n        </TableRow>\n      {/each}\n    </Table>\n  </div>\n</Dialog>\n\n<style>\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 { _ } from '@sveltia/i18n';\n  import { MenuItem } from '@sveltia/ui';\n\n  import ShortcutsDialog from '$lib/components/help/shortcuts-dialog.svelte';\n  import { env } from '$lib/services/user/env.svelte';\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 env.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.svelte';\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  // eslint-disable-next-line svelte/prefer-writable-derived\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 '@sveltia/i18n';\n\n  import PrefSwitch from '$lib/components/settings/controls/pref-switch.svelte';\n\n  /**\n   * @import { SettingsPanelOnChangeArgs } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {(detail: SettingsPanelOnChangeArgs) => void} [onChange] `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  <h3>\n    {_('prefs.accessibility.underline_links.title')}\n  </h3>\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 { _ } from '@sveltia/i18n';\n  import { TextInput } from '@sveltia/ui';\n\n  import PrefSwitch from '$lib/components/settings/controls/pref-switch.svelte';\n  import { skipCIConfigured } from '$lib/services/backends/git/shared/integration';\n  import { prefs } from '$lib/services/user/prefs.svelte';\n\n  /**\n   * @import { SettingsPanelOnChangeArgs } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {(detail: SettingsPanelOnChangeArgs) => void} [onChange] `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</script>\n\n<section>\n  <h3>\n    {_('prefs.advanced.beta.title')}\n  </h3>\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  <h3>\n    {_('prefs.advanced.developer_mode.title')}\n  </h3>\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 $skipCIConfigured}\n  <section>\n    <h3>\n      {_('prefs.advanced.deploy_hook.title')}\n    </h3>\n    <p>\n      {_('prefs.advanced.deploy_hook.description')}\n    </p>\n    <div role=\"none\">\n      <TextInput\n        dir=\"ltr\"\n        bind:value={prefs.deployHookURL}\n        flex\n        aria-label={_('prefs.advanced.deploy_hook.url.field_label')}\n        showInlineLabel={true}\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    <div role=\"none\">\n      <TextInput\n        dir=\"ltr\"\n        bind:value={prefs.deployHookAuthHeader}\n        flex\n        aria-label={_('prefs.advanced.deploy_hook.auth.field_label')}\n        showInlineLabel={true}\n        onchange={() => {\n          onChange?.({\n            message: _(\n              prefs.deployHookAuthHeader\n                ? 'prefs.advanced.deploy_hook.auth.saved'\n                : 'prefs.advanced.deploy_hook.auth.removed',\n            ),\n          });\n        }}\n      />\n    </div>\n  </section>\n{/if}\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { SelectButton, SelectButtonGroup } from '@sveltia/ui';\n\n  import { prefs } from '$lib/services/user/prefs.svelte';\n\n  /**\n   * @import { SettingsPanelOnChangeArgs } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {(detail: SettingsPanelOnChangeArgs) => void} [onChange] `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  <h3>{_('prefs.appearance.theme')}</h3>\n  <div role=\"none\">\n    <SelectButtonGroup\n      aria-label={_('prefs.appearance.select_theme')}\n      onChange={(event) => {\n        prefs.theme = event.detail.value;\n      }}\n    >\n      {#each ['auto', 'dark', 'light'] as value (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 '@sveltia/i18n';\n\n  import PrefSwitch from '$lib/components/settings/controls/pref-switch.svelte';\n\n  /**\n   * @import { SettingsPanelOnChangeArgs } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {(detail: SettingsPanelOnChangeArgs) => void} [onChange] `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  <h3>{_('prefs.contents.editor.title')}</h3>\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 { _ } from '@sveltia/i18n';\n  import { SecretInput } from '@sveltia/ui';\n  import { onMount } from 'svelte';\n\n  import { prefs } from '$lib/services/user/prefs.svelte';\n\n  /**\n   * @import {\n   * MediaLibraryService,\n   * SettingsPanelOnChangeArgs,\n   * TranslationService,\n   * } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} serviceId The ID of the service for which the API key is being input.\n   * @property {MediaLibraryService | TranslationService} service The service for which the API key\n   * is being input.\n   * @property {string} [ariaLabel] Custom aria-label for the input.\n   * @property {(detail: SettingsPanelOnChangeArgs) => void} [onChange] `change` event handler.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    serviceId,\n    service,\n    ariaLabel,\n    onChange = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const { apiKeyPattern } = $derived(service);\n\n  let value = $state('');\n\n  /**\n   * Handler for `change` event of the text input.\n   */\n  const onchange = () => {\n    const apiKey = value.trim();\n    const invalid = !!apiKey && !!apiKeyPattern && !apiKeyPattern.test(apiKey);\n\n    prefs.apiKeys ??= {};\n    prefs.apiKeys[serviceId] = invalid ? '' : apiKey;\n\n    onChange?.({\n      message: invalid\n        ? _('prefs.changes.api_key_invalid')\n        : apiKey\n          ? _('prefs.changes.api_key_saved')\n          : _('prefs.changes.api_key_removed'),\n      status: invalid ? 'error' : 'success',\n    });\n  };\n\n  onMount(() => {\n    value = prefs.apiKeys?.[serviceId] ?? '';\n  });\n</script>\n\n<SecretInput\n  bind:value\n  flex\n  autocomplete=\"off\"\n  spellcheck=\"false\"\n  aria-label={ariaLabel}\n  {onchange}\n/>\n","<script>\n  import { _ } from '@sveltia/i18n';\n\n  import ApiKeyInput from '$lib/components/settings/controls/api-key-input.svelte';\n  import TranslatorSelector from '$lib/components/settings/controls/translator-selector.svelte';\n  import { allTranslationServices } from '$lib/services/integrations/translators';\n  import { makeLink } from '$lib/services/utils/string';\n\n  /**\n   * @import { SettingsPanelOnChangeArgs } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {(detail: SettingsPanelOnChangeArgs) => void} [onChange] `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</script>\n\n<section>\n  <h3>{_('prefs.i18n.translators.default.title')}</h3>\n  <div role=\"none\">\n    <TranslatorSelector />\n  </div>\n</section>\n\n<section>\n  <h3>{_('prefs.i18n.translators.api_keys.title')}</h3>\n  <p>\n    {@html makeLink(\n      _('prefs.i18n.translators.api_keys.description'),\n      'https://sveltiacms.app/en/docs/integrations/translations',\n    )}\n  </p>\n  {#each Object.entries(allTranslationServices) as [serviceId, service] (serviceId)}\n    {@const label = service.serviceLabel}\n    <section>\n      <h4>{label}</h4>\n      <div role=\"none\">\n        <ApiKeyInput\n          {serviceId}\n          {service}\n          ariaLabel={_('prefs.i18n.translators.field_label', { values: { service: label } })}\n          {onChange}\n        />\n      </div>\n    </section>\n  {/each}\n</section>\n","<script>\n  import { _, locale as appLocale, locales as appLocales } from '@sveltia/i18n';\n  import { Option, Select } from '@sveltia/ui';\n\n  import { getLocaleLabel } from '$lib/services/contents/i18n';\n  import { prefs } from '$lib/services/user/prefs.svelte';\n\n  /**\n   * @import { SettingsPanelOnChangeArgs } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {(detail: SettingsPanelOnChangeArgs) => void} [onChange] `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  <h3>{_('prefs.language.ui_language.title')}</h3>\n  <div role=\"none\">\n    {#key appLocale.current}\n      <Select\n        aria-label={_('prefs.language.ui_language.select_language')}\n        value={appLocale.current}\n        onChange={(event) => {\n          prefs.locale = event.detail.value;\n        }}\n      >\n        {#each appLocales as locale (locale)}\n          <Option\n            label={getLocaleLabel(locale, { displayLocale: locale }) ?? locale}\n            value={locale}\n            selected={locale === appLocale.current}\n            dir=\"auto\"\n          />\n        {/each}\n      </Select>\n    {/key}\n  </div>\n</section>\n","<script>\n  import { _ } from '@sveltia/i18n';\n\n  import ApiKeyInput from '$lib/components/settings/controls/api-key-input.svelte';\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 { makeLink } from '$lib/services/utils/string';\n\n  /**\n   * @import { MediaLibraryService, SettingsPanelOnChangeArgs } from '$lib/types/private';\n   * @import { StockAssetProviderName } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {(detail: SettingsPanelOnChangeArgs) => void} [onChange] `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 enabledStockAssetProviderEntries = $derived.by(() => {\n    const { providers = [] } = getStockAssetMediaLibraryOptions();\n\n    return /** @type {[StockAssetProviderName, MediaLibraryService][]} */ (\n      Object.entries(allStockAssetProviders)\n    ).filter(([serviceId, { authType }]) => providers.includes(serviceId) && authType !== 'none');\n  });\n\n  const enabledCloudServiceEntries = $derived(\n    Object.entries(allCloudStorageServices).filter(\n      ([, { isEnabled, authType }]) => (isEnabled?.() ?? true) && authType !== 'widget',\n    ),\n  );\n</script>\n\n<section>\n  <h3>{_('prefs.media.cloud_storage.api_keys.title')}</h3>\n  <p>\n    {@html makeLink(\n      enabledCloudServiceEntries.length\n        ? _('prefs.media.cloud_storage.api_keys.description')\n        : _('prefs.media.cloud_storage.no_services'),\n      'https://sveltiacms.app/en/docs/media',\n    )}\n  </p>\n  {#each enabledCloudServiceEntries as [serviceId, service] (serviceId)}\n    {@const label = service.serviceLabel}\n    <section>\n      <h4>{label}</h4>\n      <div role=\"none\">\n        <ApiKeyInput\n          {serviceId}\n          {service}\n          ariaLabel={_('prefs.media.cloud_storage.field_label', { values: { service: label } })}\n          {onChange}\n        />\n      </div>\n    </section>\n  {/each}\n</section>\n<section>\n  <h3>{_('prefs.media.stock_photos.api_keys.title')}</h3>\n  <p>\n    {@html makeLink(\n      enabledStockAssetProviderEntries.length\n        ? _('prefs.media.stock_photos.api_keys.description')\n        : _('prefs.media.stock_photos.no_services'),\n      'https://sveltiacms.app/en/docs/integrations/stock-photos',\n    )}\n  </p>\n  {#each enabledStockAssetProviderEntries as [serviceId, service] (serviceId)}\n    {@const label = service.serviceLabel}\n    <section>\n      <h4>{label}</h4>\n      <div role=\"none\">\n        <ApiKeyInput\n          {serviceId}\n          {service}\n          ariaLabel={_('prefs.media.stock_photos.field_label', { values: { service: label } })}\n          {onChange}\n        />\n      </div>\n    </section>\n  {/each}\n</section>\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 { cmsConfig } 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([cmsConfig], ([_cmsConfig]) => [\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: (_cmsConfig?.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, Toast } from '@sveltia/ui';\n\n  /**\n   * @import { Component } from 'svelte';\n   * @import { SettingsPanelOnChangeArgs } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Component} [Panel] Panel component.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    Panel,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  let toastMessage = $state('');\n  /** @type {'success' | 'error'} */\n  let toastStatus = $state('success');\n  let showToast = $state(false);\n</script>\n\n<div class=\"container\" role=\"none\">\n  <Panel\n    onChange={(/** @type {SettingsPanelOnChangeArgs} */ { message, status }) => {\n      toastMessage = message;\n      toastStatus = status ?? 'success';\n      showToast = true;\n    }}\n  />\n</div>\n\n<Toast bind:show={showToast}>\n  <Alert status={toastStatus}>{toastMessage}</Alert>\n</Toast>\n\n<style>\n  .container {\n    display: contents;\n\n    :global {\n      section:not(:first-child) {\n        margin: 16px 0 0;\n      }\n\n      p {\n        margin-top: 0;\n      }\n\n      h3 {\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      h4 {\n        margin-bottom: 4px;\n        font-size: var(--sui-font-size-small);\n      }\n    }\n  }\n</style>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Dialog, Icon, Tab, TabList, TabPanel } from '@sveltia/ui';\n  import { get } from 'svelte/store';\n\n  import { panels } from '$lib/components/settings';\n  import PanelContainer from '$lib/components/settings/panel-container.svelte';\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</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 } (key)}\n      <TabPanel id=\"prefs-tab-{key}\">\n        <PanelContainer Panel={component} />\n      </TabPanel>\n    {/each}\n  </div>\n</Dialog>\n\n<style>\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    }\n  }\n</style>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Divider, Menu, MenuItem } from '@sveltia/ui';\n\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/account.svelte';\n  import { signOut } from '$lib/services/user/auth.svelte';\n  import { env } from '$lib/services/user/env.svelte';\n  import { prefs } from '$lib/services/user/prefs.svelte';\n  import { openNewTab } from '$lib/services/utils/window';\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.account?.login } })}\n    disabled={isLocalRepo || isTestRepo}\n    onclick={() => {\n      openNewTab(user.account?.profileURL);\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        openNewTab($backend?.repository?.treeBaseURL);\n      }}\n    />\n    <MenuItem\n      label={_('cms_config')}\n      onclick={() => {\n        goto('/config', { transitionType: 'forwards' });\n      }}\n    />\n  {/if}\n  <Divider />\n  <MenuItem\n    label={_('settings')}\n    onclick={() => {\n      if (env.isSmallScreen) {\n        goto('/settings', { transitionType: 'forwards' });\n      } else {\n        showPrefsDialog = true;\n      }\n    }}\n  />\n  <!-- When dev mode is enabled, the shortcuts menu item appears in the Help menu -->\n  {#if !prefs.devModeEnabled}\n    <ShortcutsMenuItem {menuButton} />\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 { _ } from '@sveltia/i18n';\n  import { Icon, MenuButton } from '@sveltia/ui';\n\n  import AccountMenu from '$lib/components/global/toolbar/items/account-menu.svelte';\n  import { backendName } from '$lib/services/backends';\n  import { user } from '$lib/services/user/account.svelte';\n\n  /** @type {MenuButton | undefined} */\n  let menuButton = $state();\n\n  const isLocalRepo = $derived($backendName === 'local');\n  const hasAvatar = $derived(!!user.account?.avatarURL);\n</script>\n\n<div role=\"none\" class=\"wrapper\">\n  <MenuButton\n    variant=\"ghost\"\n    iconic={!isLocalRepo}\n    label={isLocalRepo ? _('local_workflow.indicator') : undefined}\n    class={hasAvatar ? 'avatar' : ''}\n    popupPosition=\"bottom-right\"\n    aria-label={_('show_account_menu')}\n    bind:this={menuButton}\n  >\n    {#snippet endIcon()}\n      {#if isLocalRepo}\n        <Icon name=\"arrow_drop_down\" class=\"small-arrow\" />\n      {:else if hasAvatar}\n        <img class=\"avatar\" loading=\"lazy\" src={user.account?.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>\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 { _ } from '@sveltia/i18n';\n  import { Divider, Icon, Menu, MenuButton, MenuItem } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\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  /**\n   * @import { EntryCollection } from '$lib/types/public';\n   */\n\n  const entryCollections = $derived(\n    /** @type {EntryCollection[]} */ (getValidCollections({ visible: true, type: 'entry' })),\n  );\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 = true,\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 { _ } from '@sveltia/i18n';\n  import { MenuItem } from '@sveltia/ui';\n\n  import { version } from '$lib/services/app';\n  import { prefs } from '$lib/services/user/prefs.svelte';\n  import { openNewTab } from '$lib/services/utils/window';\n</script>\n\n<MenuItem\n  label={_('release_notes')}\n  onclick={() => {\n    openNewTab('https://github.com/sveltia/sveltia-cms/releases');\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>\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 { _ } from '@sveltia/i18n';\n  import { Divider, Menu, MenuItem } from '@sveltia/ui';\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 { prefs } from '$lib/services/user/prefs.svelte';\n  import { openNewTab } from '$lib/services/utils/window';\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</script>\n\n{#snippet link(/** @type {string} */ labelKey, /** @type {string} */ url)}\n  <MenuItem\n    label={_(labelKey)}\n    onclick={() => {\n      openNewTab(url);\n    }}\n  />\n{/snippet}\n\n<Menu aria-label={_('help')}>\n  <ShortcutsMenuItem {menuButton} />\n  {#if prefs.devModeEnabled}\n    {@render link('documentation', 'https://sveltiacms.app/en/docs')}\n    <ReleaseNotesMenuItem />\n    {@render link(\n      'announcements',\n      'https://github.com/sveltia/sveltia-cms/discussions/categories/announcements',\n    )}\n    <Divider />\n    {@render link('report_issue', 'https://github.com/sveltia/sveltia-cms/issues')}\n    {@render link(\n      'share_feedback',\n      'https://github.com/sveltia/sveltia-cms/discussions/categories/ideas',\n    )}\n    {@render link('get_help', 'https://github.com/sveltia/sveltia-cms/discussions/categories/q-a')}\n    {@render link('donate', 'https://github.com/sponsors/kyoshino')}\n    <Divider />\n    {@render link('bluesky', 'https://bsky.app/profile/sveltiacms.app')}\n    {@render link('join_discord', 'https://discord.com/invite/5hwCGqup5b')}\n  {/if}\n</Menu>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Icon, MenuButton } from '@sveltia/ui';\n\n  import HelpMenu from '$lib/components/global/toolbar/items/help-menu.svelte';\n  import ShortcutsDialog from '$lib/components/help/shortcuts-dialog.svelte';\n\n  /** @type {MenuButton | undefined} */\n  let menuButton = $state();\n  let showShortcutsDialog = $state(false);\n</script>\n\n<div role=\"none\" class=\"wrapper\">\n  <MenuButton\n    variant=\"ghost\"\n    iconic\n    popupPosition=\"bottom-right\"\n    aria-label={_('show_help_menu')}\n    bind:this={menuButton}\n  >\n    {#snippet endIcon()}\n      <Icon name=\"help\" />\n    {/snippet}\n    {#snippet popup()}\n      <HelpMenu {menuButton} />\n    {/snippet}\n  </MenuButton>\n</div>\n\n<ShortcutsDialog\n  bind:open={showShortcutsDialog}\n  onClose={() => {\n    menuButton?.focus();\n  }}\n/>\n\n<style>\n  .wrapper {\n    display: contents;\n  }\n</style>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Button, Icon } from '@sveltia/ui';\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 { _ } from '@sveltia/i18n';\n  import { Button } from '@sveltia/ui';\n\n  import { appLogoURL, DEFAULT_APP_LOGO_URL } from '$lib/services/app/branding';\n  import { openProductionSite } from '$lib/services/app/navigation';\n  import { cmsConfig } from '$lib/services/config';\n</script>\n\n{#if $appLogoURL !== DEFAULT_APP_LOGO_URL && ($cmsConfig?.logo?.show_in_header ?? true)}\n  <Button\n    variant=\"ghost\"\n    iconic\n    aria-label={_('visit_live_site')}\n    onclick={() => {\n      openProductionSite();\n    }}\n  >\n    <img src={$appLogoURL} alt=\"\" class=\"logo\" />\n  </Button>\n{/if}\n\n<style>\n  img {\n    width: 24px;\n    height: 24px;\n    object-fit: contain;\n  }\n</style>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Toolbar } from '@sveltia/ui';\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  import { prefs } from '$lib/services/user/prefs.svelte';\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      {#if prefs.devModeEnabled}\n        <HelpButton />\n      {/if}\n      <AccountButton />\n    </div>\n  </Toolbar>\n</div>\n\n<style>\n  .toolbar-wrapper {\n    display: contents;\n\n    &[inert] {\n      :global {\n        .sui.search-bar {\n          /* Disable the keyboard shortcut for the search bar */\n          display: none !important;\n        }\n      }\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 { _ } from '@sveltia/i18n';\n  import { Spacer, Toolbar } from '@sveltia/ui';\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  import { prefs } from '$lib/services/user/prefs.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          {#if prefs.devModeEnabled}\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>\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 { _ } from '@sveltia/i18n';\n  import { Dialog } from '@sveltia/ui';\n  import { toCanvas } from 'qrcode';\n\n  import { showMobileSignInDialog } from '$lib/services/app/onboarding';\n  import { user } from '$lib/services/user/account.svelte';\n  import { prefs } from '$lib/services/user/prefs.svelte';\n\n  /** @type {HTMLCanvasElement | undefined} */\n  let canvas = $state();\n\n  $effect(() => {\n    if (canvas && $showMobileSignInDialog) {\n      const { origin, pathname } = window.location;\n      const snapshot = $state.snapshot(prefs);\n      const encodedData = btoa(JSON.stringify({ token: user.account?.token, prefs: snapshot }));\n      const url = `${origin}${pathname}#/signin/${encodedData}`;\n\n      toCanvas(canvas, url);\n\n      if (prefs.devModeEnabled) {\n        // eslint-disable-next-line no-console\n        console.info('Mobile sign-in URL:', url);\n      }\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>\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 { _ } from '@sveltia/i18n';\n  import { onMount } from 'svelte';\n\n  import PageContainer from '$lib/components/common/page-container.svelte';\n  import SearchMainArea from '$lib/components/search/search-main-area.svelte';\n  import { parseLocation } from '$lib/services/app/navigation';\n  import { searchMode, searchTerms } from '$lib/services/search';\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 ??= 'contents';\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    <SearchMainArea />\n  {/snippet}\n</PageContainer>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Icon, Menu, MenuItem, Spacer, Toolbar } from '@sveltia/ui';\n  import { onMount } from 'svelte';\n  import { get } from 'svelte/store';\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 PanelContainer from '$lib/components/settings/panel-container.svelte';\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\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            <PanelContainer Panel={selectedPanel.component} />\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<style>\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    :global {\n      & > .container {\n        display: block;\n        padding: 16px;\n      }\n    }\n  }\n</style>\n","<script>\n  import { _ } from '@sveltia/i18n';\n  import { Group } from '@sveltia/ui';\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>\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 { searchMode } from '$lib/services/search';\n  import { env } from '$lib/services/user/env.svelte';\n\n  /** @type {Record<string, any>} */\n  const pages = $derived({\n    collections: ContentsPage,\n    assets: AssetsPage,\n    search: env.isSmallScreen\n      ? SearchPage\n      : $searchMode\n        ? { contents: ContentsPage, assets: AssetsPage }[$searchMode]\n        : 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    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 = 'contents';\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 !env.isSmallScreen}\n  <GlobalToolbar />\n{/if}\n\n<div role=\"none\" class=\"page-root\">\n  <SelectedPage />\n</div>\n\n{#if env.isSmallScreen}\n  <BottomNavigation />\n{/if}\n\n<UploadAssetsDialog />\n<UploadAssetsConfirmDialog />\n<TranslatorApiKeyDialog />\n<EntryParseErrorsToast />\n\n<style>\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","<script>\n  import { AppShell } from '@sveltia/ui';\n  import { onMount } from 'svelte';\n\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 { appLogoType, appLogoURL, appTitle } from '$lib/services/app/branding';\n  import { initAppLocale } from '$lib/services/app/i18n';\n  import { announcedPageStatus, startViewTransition } from '$lib/services/app/navigation';\n  import { backend } from '$lib/services/backends';\n  import { cmsConfigLoaded, DEV_SITE_URL, initCmsConfig } from '$lib/services/config';\n  import { dataLoaded } from '$lib/services/contents';\n  import { user } from '$lib/services/user/account.svelte';\n  import { initUserEnvDetection } from '$lib/services/user/env.svelte';\n\n  /**\n   * @import { CmsConfig } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {CmsConfig} [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  /**\n   * State to track whether the app locale has been initialized and loaded. We can’t use `isLoading`\n   * from the i18n service here because it becomes `false` as soon as Sveltia UI strings are loaded.\n   */\n  let localeLoaded = $state(false);\n\n  $effect.pre(() => {\n    initAppLocale();\n    localeLoaded = true;\n  });\n\n  $effect.pre(() => {\n    initUserEnvDetection();\n  });\n\n  $effect(() => {\n    initCmsConfig(config);\n  });\n\n  // Fix the position of the custom mount element if needed\n  // @see https://decapcms.org/docs/custom-mounting/\n  // @see https://sveltiacms.app/en/docs/customization#custom-mount-element\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\n  let transitioned = $state(false);\n\n  $effect(() => {\n    if ($dataLoaded && user.account) {\n      startViewTransition('forwards', () => {\n        transitioned = true;\n      });\n    } else {\n      startViewTransition('backwards', () => {\n        transitioned = false;\n      });\n    }\n  });\n</script>\n\n<svelte:head>\n  <meta name=\"referrer\" content=\"same-origin\" />\n  <meta name=\"robots\" content=\"noindex\" />\n  {#if $cmsConfigLoaded}\n    <title>{$appTitle}</title>\n    <link rel=\"icon\" href={$appLogoURL} type={$appLogoType} />\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.rel = 'noopener noreferrer';\n        link.target = '_blank';\n      }\n    }\n  }}\n/>\n\n<AppShell>\n  {#if localeLoaded}\n    <div role=\"none\" class=\"outer\">\n      <UpdateNotification />\n      {#if $backend}\n        <BackendStatusIndicator />\n      {/if}\n      <div role=\"none\" class=\"main\">\n        {#if user.account && $dataLoaded && transitioned}\n          <MainRouter />\n        {:else}\n          <EntrancePage />\n        {/if}\n      </div>\n    </div>\n    <div role=\"status\">{$announcedPageStatus}</div>\n  {/if}\n</AppShell>\n\n<style>\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      opacity: 1;\n    }\n\n    to {\n      transform: translateX(100%);\n      opacity: 0;\n    }\n  }\n\n  @keyframes slide-in-from-right {\n    from {\n      transform: translateX(100%);\n      opacity: 0;\n    }\n\n    to {\n      transform: translateX(0);\n      opacity: 1;\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  /* RTL-specific keyframes that mirror the depth effect */\n  @keyframes slide-out-to-left-rtl {\n    from {\n      transform: translateX(0);\n      opacity: 1;\n    }\n\n    to {\n      transform: translateX(-100%);\n      opacity: 0;\n    }\n  }\n\n  @keyframes slide-out-to-right-rtl {\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-in-from-right-rtl {\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  @keyframes slide-in-from-left-rtl {\n    from {\n      transform: translateX(-100%);\n      opacity: 0;\n    }\n\n    to {\n      transform: translateX(0);\n      opacity: 1;\n    }\n  }\n\n  @keyframes fade-out {\n    from {\n      opacity: 1;\n    }\n\n    to {\n      opacity: 0;\n    }\n  }\n\n  @keyframes fade-in {\n    from {\n      opacity: 0;\n    }\n\n    to {\n      opacity: 1;\n    }\n  }\n\n  :global {\n    html:active-view-transition-type(forwards) {\n      @media (width < 768px) {\n        &::view-transition-old(page-root) {\n          z-index: 999;\n          animation: 100ms ease-in both slide-out-to-left;\n\n          @media (prefers-reduced-motion) {\n            animation: none;\n          }\n        }\n\n        &::view-transition-new(page-root) {\n          @media (width < 768px) {\n            z-index: 1000;\n            animation: 100ms ease-in both slide-in-from-right;\n          }\n\n          @media (prefers-reduced-motion) {\n            animation: none;\n          }\n        }\n\n        &:dir(rtl) {\n          &::view-transition-old(page-root) {\n            animation: 100ms ease-in both slide-out-to-right-rtl;\n          }\n\n          &::view-transition-new(page-root) {\n            animation: 100ms ease-in both slide-in-from-left-rtl;\n          }\n        }\n      }\n    }\n\n    html:active-view-transition-type(backwards) {\n      @media (width < 768px) {\n        &::view-transition-old(page-root) {\n          z-index: 1000;\n          animation: 100ms ease-in 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-in both slide-in-from-left;\n\n          @media (prefers-reduced-motion) {\n            animation: none;\n          }\n        }\n\n        &:dir(rtl) {\n          &::view-transition-old(page-root) {\n            animation: 100ms ease-in both slide-out-to-left-rtl;\n          }\n\n          &::view-transition-new(page-root) {\n            animation: 100ms ease-in both slide-in-from-right-rtl;\n          }\n        }\n      }\n    }\n\n    html:active-view-transition-type(unknown) {\n      &::view-transition-old(page-main) {\n        animation: 100ms ease-in both fade-out;\n\n        @media (prefers-reduced-motion) {\n          animation: none;\n        }\n      }\n\n      &::view-transition-new(page-main) {\n        animation: 100ms ease-in both fade-in;\n\n        @media (prefers-reduced-motion) {\n          animation: none;\n        }\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","/* eslint-disable no-console */\n\nimport { isObject } from '@sveltia/utils/object';\nimport createClass from 'create-react-class';\nimport { createElement } from 'react';\nimport { mount } from 'svelte';\n\nimport { eventHookRegistry, SUPPORTED_EVENT_TYPES } from '$lib/services/contents/draft/events';\nimport {\n  customPreviewStyleRegistry,\n  customPreviewTemplateRegistry,\n} from '$lib/services/contents/editor';\nimport { customComponentRegistry } from '$lib/services/contents/fields/rich-text/components/definitions';\nimport { customFileFormatRegistry } from '$lib/services/contents/file/config';\n\nimport App from './components/app.svelte';\n\n/**\n * @import { ComponentType } from 'react';\n * @import {\n * AppEventListener,\n * CmsConfig,\n * CustomFieldControlProps,\n * CustomFieldPreviewProps,\n * CustomFieldSchema,\n * CustomPreviewTemplateProps,\n * EditorComponentDefinition,\n * FileFormatter,\n * FileParser,\n * } from './types/public';\n * // Don’t use `$lib` in `from` above, or type declarations will not be exported\n */\n\n/**\n * List of API functions in Netlify/Decap CMS that we don’t plan to support in Sveltia CMS, either\n * because they are undocumented or because they are incompatible with Sveltia CMS’s architecture\n * and design principles.\n */\nconst UNSUPPORTED_FUNC_NAMES = [\n  // Undocumented\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', // Removed in Decap CMS 3.1.1 as it switched from Moment.js to Day.js\n  'registerBackend',\n  'registerMediaLibrary',\n  'registerWidgetValueSerializer',\n  'removeEventListener',\n  'resolveWidget',\n  // Documented but not planned for implementation\n  'registerLocale', // https://decapcms.org/docs/configuration-options/#locale\n  'registerRemarkPlugin', // https://decapcms.org/docs/widgets/#Markdown\n];\n\n/**\n * URL for documentation on unsupported features and compatibility between Netlify/Decap CMS and\n * Sveltia CMS. When users call an unsupported API function, they will see a warning in the console\n * with a link to this documentation.\n */\nconst COMPATIBILITY_URL =\n  'https://sveltiacms.app/en/docs/migration/netlify-decap-cms#features-not-to-be-implemented';\n\nlet initialized = false;\n\n/**\n * Initialize the CMS, optionally with the given CMS configuration.\n * @param {object} [options] Options.\n * @param {CmsConfig} [options.config] Configuration to be merged with `config.yml`. Include\n * `load_config_file: false` to prevent the configuration file from being loaded.\n * @throws {TypeError} If `config` is not an object or undefined.\n * @see https://decapcms.org/docs/manual-initialization/\n * @see https://sveltiacms.app/en/docs/api/initialization\n */\nconst init = async ({ config } = {}) => {\n  if (config !== undefined && !isObject(config)) {\n    throw new TypeError('The `config` option for `CMS.init()` must be an object');\n  }\n\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.\n    // @see https://decapcms.org/docs/custom-mounting/\n    // @see https://sveltiacms.app/en/docs/customization#custom-mount-element\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 * @throws {TypeError} If `name` or `extension` is not a string, or if `methods` is not an object.\n * @throws {Error} If at least one of `fromFile` or `toFile` is not provided.\n * @see https://decapcms.org/docs/custom-formatters/\n * @see https://sveltiacms.app/en/docs/api/file-formats\n */\nconst registerCustomFormat = (name, extension, { fromFile, toFile } = {}) => {\n  if (typeof name !== 'string') {\n    throw new TypeError('The `name` option for `CMS.registerCustomFormat()` must be a string');\n  }\n\n  if (typeof extension !== 'string') {\n    throw new TypeError('The `extension` option for `CMS.registerCustomFormat()` must be a string');\n  }\n\n  if (typeof fromFile !== 'function' && typeof toFile !== 'function') {\n    throw new Error(\n      'At least one of `fromFile` or `toFile` must be provided to `CMS.registerCustomFormat()`',\n    );\n  }\n\n  if (typeof fromFile !== 'undefined' && typeof fromFile !== 'function') {\n    throw new TypeError(\n      'The `fromFile` option for `CMS.registerCustomFormat()` must be a function',\n    );\n  }\n\n  if (typeof toFile !== 'undefined' && typeof toFile !== 'function') {\n    throw new TypeError('The `toFile` option for `CMS.registerCustomFormat()` must be a function');\n  }\n\n  customFileFormatRegistry.set(name, { extension, parser: fromFile, formatter: toFile });\n};\n\n/**\n * Register a custom component.\n * @param {EditorComponentDefinition} definition Component definition.\n * @throws {TypeError} If `definition` is not an object, or if required properties are invalid.\n * @see https://decapcms.org/docs/custom-widgets/#registereditorcomponent\n * @see https://sveltiacms.app/en/docs/api/editor-components\n */\nconst registerEditorComponent = (definition) => {\n  if (!definition || typeof definition !== 'object') {\n    throw new TypeError(\n      'The `definition` option for `CMS.registerEditorComponent()` must be an object',\n    );\n  }\n\n  if (typeof definition.id !== 'string') {\n    throw new TypeError('The `definition.id` must be a string');\n  }\n\n  if (typeof definition.label !== 'string') {\n    throw new TypeError('The `definition.label` must be a string');\n  }\n\n  if (typeof definition.pattern !== 'object' || !(definition.pattern instanceof RegExp)) {\n    throw new TypeError('The `definition.pattern` must be a RegExp');\n  }\n\n  if (typeof definition.toBlock !== 'function') {\n    throw new TypeError('The `definition.toBlock` must be a function');\n  }\n\n  if (typeof definition.toPreview !== 'function') {\n    throw new TypeError('The `definition.toPreview` must be a function');\n  }\n\n  if (!Array.isArray(definition.fields)) {\n    throw new TypeError('The `definition.fields` must be an array');\n  }\n\n  customComponentRegistry.set(definition.id, definition);\n};\n\n/**\n * Register an event listener.\n * @param {AppEventListener} eventListener Event listener.\n * @throws {TypeError} If the event listener is not an object, or is missing required properties.\n * @throws {RangeError} If the event listener name is not supported.\n * @see https://decapcms.org/docs/registering-events/\n * @see https://sveltiacms.app/en/docs/api/events\n */\nconst registerEventListener = (eventListener) => {\n  if (!isObject(eventListener)) {\n    throw new TypeError('The event listener must be an object');\n  }\n\n  const { name, handler } = eventListener;\n\n  if (typeof name !== 'string' || typeof handler !== 'function') {\n    throw new TypeError(\n      'The event listener must have a string `name` property and a function `handler` property',\n    );\n  }\n\n  if (!SUPPORTED_EVENT_TYPES.includes(name)) {\n    throw new RangeError(\n      `Unsupported event listener name \"${name}\". ` +\n        `Supported names are: ${SUPPORTED_EVENT_TYPES.join(', ')}`,\n    );\n  }\n\n  eventHookRegistry.add(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 * @see https://sveltiacms.app/en/docs/api/preview-styles\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  const base = window.location.href;\n\n  if (!raw && !URL.canParse(style, base)) {\n    throw new TypeError(\n      'The `style` option for `CMS.registerPreviewStyle()` must be a valid URL or file path ' +\n        'when `raw` is false',\n    );\n  }\n\n  const url = raw\n    ? // Create a blob URL for the raw CSS string\n      URL.createObjectURL(new Blob([style], { type: 'text/css' }))\n    : // Convert relative URLs to absolute to ensure they work in the preview iframe, which has a\n      // unique blob URL as its origin\n      new URL(style, base).href;\n\n  customPreviewStyleRegistry.add(url);\n};\n\n/**\n * Register a custom preview template.\n * @param {string} name Template name.\n * @param {ComponentType<CustomPreviewTemplateProps>} component React component.\n * @throws {TypeError} If `name` is not a string or `component` is not a function.\n * @see https://decapcms.org/docs/customization/#registerpreviewtemplate\n * @see https://sveltiacms.app/en/docs/api/preview-templates\n */\nconst registerPreviewTemplate = (name, component) => {\n  console.warn('Custom preview templates are not yet supported in Sveltia CMS.');\n\n  if (typeof name !== 'string') {\n    throw new TypeError('The `name` option for `CMS.registerPreviewTemplate()` must be a string');\n  }\n\n  if (typeof component !== 'function') {\n    throw new TypeError(\n      'The `component` option for `CMS.registerPreviewTemplate()` must be a function',\n    );\n  }\n\n  customPreviewTemplateRegistry.set(name, component);\n};\n\n/**\n * Register a custom field type (widget).\n * @param {string} name Field type name.\n * @param {ComponentType<CustomFieldControlProps> | string} control Component for the edit pane.\n * @param {ComponentType<CustomFieldPreviewProps>} [preview] Component for the preview pane.\n * @param {CustomFieldSchema} [schema] Field schema.\n * @see https://decapcms.org/docs/custom-widgets/\n * @see https://sveltiacms.app/en/docs/api/field-types\n */\nconst registerFieldType = (name, control, preview, schema) => {\n  console.warn('Custom field types (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    registerFieldType,\n    registerPreviewStyle,\n    registerPreviewTemplate,\n    registerWidget: registerFieldType, // alias for backward compatibility with Netlify/Decap CMS\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 (UNSUPPORTED_FUNC_NAMES.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        console.warn(`${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// Expose React APIs for custom field types, custom preview templates and custom editor components\n// @see https://decapcms.org/docs/custom-widgets/\n// @see https://decapcms.org/docs/customization/\n// @see https://sveltiacms.app/en/docs/api/field-types\n// @see https://sveltiacms.app/en/docs/api/preview-templates\nwindow.createClass = createClass;\nwindow.createElement = createElement;\nwindow.h = createElement;\n\nconst cssLinkElement = document.querySelector('link[rel=\"stylesheet\"][href$=\"/sveltia-cms.css\"]');\n\n// Warn if an invalid stylesheet is included. Claude tends to add it when setting up Sveltia CMS.\nif (cssLinkElement) {\n  console.warn(\n    'Sveltia CMS does not require a stylesheet. Remove the invalid `<link>` tag referencing ' +\n      '`sveltia-cms.css` to avoid unnecessary network requests.',\n  );\n}\n\nconst scriptElement = /** @type {HTMLScriptElement | null} */ (\n  document.querySelector('script[src$=\"/sveltia-cms.js\"]')\n);\n\n// Warn if the CMS script comes with `type=\"module\"`. Earlier versions of Sveltia CMS were built and\n// shipped as ES modules. Therefore, some users may have added the attribute to the script tag.\n// Additionally, Claude tends to add it due to outdated/inaccurate knowledge. We recommend removing\n// the attribute from the CMS script tag to avoid unexpected behavior.\nif (scriptElement?.type === 'module') {\n  console.warn(\n    'The Sveltia CMS script is not an ES module. Remove the \"type=\"module\" attribute from the ' +\n      '`<script>` tag to avoid unexpected behavior when using the JavaScript API.',\n  );\n}\n\nconst netlifyIdentityScriptElement =\n  'script[src=\"https://identity.netlify.com/v1/netlify-identity-widget.js\"]';\n\n// Warn if Netlify Identity Widget is included, as it’s not compatible with Sveltia CMS and has been\n// officially deprecated by Netlify.\nif (document.querySelector(netlifyIdentityScriptElement)) {\n  console.warn('Netlify Identity has been deprecated. The widget is not supported in Sveltia CMS.');\n}\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 (!window.CMS_MANUAL_INIT && (document.currentScript || scriptElement || import.meta.env.DEV)) {\n  init();\n}\n"],"file":"sveltia-cms.mjs"}