{"version":3,"mappings":"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CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CAGV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CAGV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,KAAM,IAAI,CACX,CAAC,IAAK,IAAI,CACV,CAAC,KAAM,IAAI,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CAGV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CAGV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,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CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,GAAG,CAGT,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CAcV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CAGV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CAGV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,KAAK,CAGZ,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CA0CV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CAGV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CAWX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CAGV,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CAGX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CAGX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,KAAK,CACZ,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CAGZ,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CAGV,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,KAAM,IAAI,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,MAAM,CACZ,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,KAAK,CACX,CAAC,IAAK,IAAI,CACV,CAAC,IAAK,IAAI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AM,KAAK,CAAC,CAC9E,SAEJ,IAAI,EAAW,GAAU,EAAM,KAAK,CAChC,IACA,EAAS,GAAS,GAAS,EAAE,CAAE,EAAO,CAAE,EAAS,EAErD,IAAI,EAAsC,GAAyC,EAAM,KAAK,CAC1F,IACA,EAAS,GAAS,GAAS,EAAE,CAAE,EAAO,CAAE,EAAoC,EAGpF,OAAO,ECxTX,IAAW,GAAW,CAClB,MAAO,CACH,IACA,IACH,CACD,IAAO,CACH,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,KACA,KACA,IACH,CACD,GAAM,CACF,IACA,KACA,KACA,IACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACH,CACD,GAAM,CACF,IACA,KACA,IACH,CACD,GAAM,CACF,IACA,KACA,IACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACH,CACD,GAAM,CACF,IACA,KACA,KACA,IACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,KACA,KACA,IACA,IACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,KACA,IACH,CACD,GAAM,CACF,IACA,IACA,KACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACH,CACD,GAAM,CACF,IACA,KACA,KACA,IACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,KACA,KACA,IACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,KACA,KACA,IACH,CACD,GAAM,CACF,IACA,KACA,KACA,IACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,KACA,KACA,IACA,IACH,CACD,GAAM,CACF,IACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,KACA,KACA,IACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,KACA,KACA,IACH,CACD,GAAM,CACF,KACA,IACH,CACD,GAAM,CACF,IACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,KACA,KACA,IACH,CACD,GAAM,CACF,IACA,IACA,IACH,CACD,GAAM,CACF,KACA,KACA,IACA,IACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,KACA,IACA,IACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,KACA,KACA,IACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,KACA,KACA,IACH,CACD,GAAM,CACF,IACA,KACA,KACA,IACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACH,CACD,GAAM,CACF,IACA,KACA,KACA,IACH,CACD,GAAM,CACF,IACA,KACA,KACA,IACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACH,CACD,GAAM,CACF,KACA,KACA,IACA,IACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,KACA,KACA,IACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,KACA,KACA,IACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,KACA,KACA,IACA,IACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACA,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,KACA,KACA,IACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACA,KACA,KACA,IACH,CACD,GAAM,CACF,IACA,KACA,IACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,KACA,KACA,IACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,KACA,KACA,IACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACH,CACD,GAAM,CACF,IACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACA,KACA,KACA,IACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACH,CACD,GAAM,CACF,IACA,KACA,KACA,IACH,CACD,GAAM,CACF,IACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACH,CACD,GAAM,CACF,IACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,KACA,KACA,IACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACA,KACA,KACA,IACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACA,KACA,KACA,IACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,KACA,KACA,IACA,IACH,CACD,GAAM,CACF,KACA,KACA,IACA,IACH,CACD,GAAM,CACF,IACA,KACA,IACH,CACD,GAAM,CACF,KACA,KACA,IACA,IACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACH,CACD,GAAM,CACF,IACA,IACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,IACH,CACD,GAAM,CACF,IACA,KACA,IACH,CACD,GAAM,CACF,IACA,KACA,KACA,IACH,CACD,GAAM,CACF,IACA,KACH,CACD,GAAM,CACF,IACA,IACA,KACA,KACH,CACD,GAAM,CACF,IACA,KACA,IACA,KACH,CACD,GAAM,CACF,IACA,IACH,CACD,QAAS,CACL,IACA,IACA,KACA,KACH,CACD,SAAU,CACN,IACA,KACA,KACA,IACH,CACD,QAAS,CACL,IACA,IACA,KACH,CACD,SAAU,CACN,IACA,KACA,IACA,KACH,CACD,QAAS,CACL,IACA,KACA,IACA,KACH,CACD,QAAS,CACL,IACA,IACA,KACA,KACH,CACD,QAAS,CACL,IACA,KACA,IACA,KACH,CACD,QAAS,CACL,IACA,IACA,KACA,KACH,CACD,QAAS,CACL,IACA,IACA,KACA,KACH,CACD,QAAS,CACL,IACA,IACA,KACA,KACH,CACD,QAAS,CACL,IACA,IACA,KACH,CACD,QAAS,CACL,IACA,IACA,KACH,CACD,QAAS,CACL,KACA,KACA,IACA,IACH,CACD,QAAS,CACL,KACA,IACA,IACH,CACD,QAAS,CACL,IACA,IACA,KACH,CACD,QAAS,CA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,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACL,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACrB,IAAM,OACN,IAAM,OACL,GAAK,OAAU,GAAK,OACrB,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACL,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACrB,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACL,GAAK,OAAU,GAAK,OACrB,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACL,GAAK,OAAU,GAAK,OACrB,IAAM,OACN,IAAM,OACL,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACrB,IAAM,OACL,GAAK,OAAU,GAAK,OACpB,GAAK,OAAU,GAAK,OACrB,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACL,GAAK,OAAU,GAAK,OACrB,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACL,GAAK,OAAU,GAAK,OACrB,IAAM,OACL,GAAK,OAAU,GAAK,OACrB,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACL,GAAK,OAAU,GAAK,OACrB,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACN,IAAM,OACL,GAAK,OAAU,GAAK,OACrB,I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AAa,OAAQ,EAAM,OAGnE,GACE,EACA,EACA,EACA,EACD,CACH,MACF,IAAK,IACH,GACE,EACA,EACA,EACA,EACD,CACD,MACF,IAAK,IACH,GACE,EACA,EACA,EACA,EACD,CACD,MACF,IAAK,IACH,MACF,IAAK,IACH,EAAyB,EAAa,UACtC,EAAK,EAAa,UACT,EAAa,gBAAtB,KASI,EAAuB,YAAc,EACnC,GACE,EACA,EACA,EACA,EACD,EACC,EAAuB,aAAe,EACxC,GACE,EACA,EACA,EACA,GACO,EAAa,aAAe,QAAnC,GAA6C,CAAC,EAC/C,EAtBH,EAAuB,YAAc,EACnC,GACE,EACA,EACA,EACA,EACD,CACD,GAAwC,EAAc,EAAa,CAgBzE,EAAQ,MAAQ,GAAmC,EAAI,EAAa,CACpE,MACF,IAAK,IACH,GACE,EACA,EACA,EACA,EACD,CACD,EAAQ,MACN,GAA8B,EAAa,UAAW,EAAa,CACrE,MACF,QACE,GACE,EACA,EACA,EACA,EACD,EAGP,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,EACD,CACD,GAA0B,EAAG,EAAa,CAC1C,MACF,IAAK,IACH,MACF,IAAK,IACH,IAAI,EAAW,EAAa,UACnB,EAAa,gBAAtB,MAaM,EAAS,aAAe,EAC1B,GACE,EACA,EACA,EACA,EACA,EACD,EAnBD,EAAS,YAAc,EACrB,GACE,EACA,EACA,EACA,EACA,EACD,CACD,GACE,EACA,EACD,CASP,GACE,EAAQ,MACR,GACE,EAAa,UACb,EACD,CACH,MACF,IAAK,IACH,GACE,EACA,EACA,EACA,EACA,EACD,CACD,GACE,EAAQ,MACR,GAA8B,EAAa,UAAW,EAAa,CACrE,MACF,QACE,GACE,E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X,EAAa,GACb,IAAI,EAAoB,EAAK,QAAQ,cAAc,aAQnD,GAPA,IACG,GAAkB,EAAM,EAAyB,CAAC,OAAS,KAC9D,EAA2B,GACzB,EACA,EACA,CAAC,EACF,CACS,IAAN,EAAgC,CAClC,GACE,IACA,CAAC,EACD,CACA,EAAK,4BAA8B,EACnC,IACE,EACF,EAAa,EACb,MAAM,EAER,EAAsB,GACtB,GAAsC,EAC7B,IAAT,OACY,KAAT,KACI,GAAsC,EACvC,GAAoC,KAAK,MACvC,GACA,EACD,EAET,EAAa,EAGf,GADA,EAAsB,CAAC,EACb,IAAN,EAAkB,UAG1B,GAAU,IAAN,EAAkB,CACpB,GAAkB,EAAe,EAAE,CACnC,GAAkB,EAAe,EAAO,EAAG,CAAC,EAAE,CAC9C,MAEF,EAAG,CAGD,OAFA,EAAkB,EAClB,EAAsB,EACd,EAAR,CACE,IAAK,GACL,IAAK,GACH,MAAM,MAAM,EAAuB,IAAI,CAAC,CAC1C,IAAK,GACH,IAAK,EAAQ,WAAa,EAAO,MACnC,IAAK,GACH,GACE,EACA,EACA,GACA,CAAC,GACF,CACD,MAAM,EACR,IAAK,GACH,GAAsC,KACtC,MACF,IAAK,GACL,IAAK,GACH,MACF,QACE,MAAM,MAAM,EAAuB,IAAI,CAAC,CAE5C,IACG,EAAQ,YAAc,IACrB,EAAa,GAA+B,IAAM,IAAK,CACzD,GAAK,GACL,CAOA,GANA,GACE,EACA,EACA,GACA,CAAC,GACF,CACS,GAAa,EAAiB,EAAG,CAAC,EAAE,GAA1C,EAA4C,MAAM,EACtD,GAAsB,EACtB,EAAgB,cAAgB,GAC9B,GAAoB,KAClB,KACA,EACA,EACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,EACA,YACA,GACA,EACD,CACD,EACD,CACD,MAAM,EAER,GACE,EACA,EACA,GACA,GACA,GACA,EACA,GACA,GACA,GACA,GACA,EACA,KACA,GACA,EACD,EAGL,YACO,GACT,GAAsB,EAAc,CAEtC,SAAS,GACP,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CAG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EACrB,mBACE,mFACH,CACD,iBAAkB,mBAClB,UAAW,YACX,eAAgB,yBAChB,gBAAiB,0BACjB,WAAY,CACV,MAAO,aACR,CACD,aAAc,CACZ,MAAO,eACP,YAAa,wCACd,CACD,QAAS,UACV,CACD,kBAAmB,CACjB,QAAS,CACP,IAAK,6DACL,KAAM,8DACP,CACD,IAAK,CACH,IAAK,6CACL,KAAM,8CACP,CACD,IAAK,CACH,IAAK,6CACL,KAAM,8CACP,CACF,CACD,qBAAsB,uBACtB,MAAO,QACP,IAAK,MACL,kBAAmB,CACjB,MAAO,QACP,IAAK,SACL,IAAK,WACL,MAAO,QACP,KAAM,OACP,CACD,UAAW,CACT,IAAK,MACL,MAAO,QACP,OAAQ,SACR,UAAW,mBACX,cAAe,sBAChB,CACD,WAAY,eACZ,kBAAmB,oBACnB,wBAAyB,oBACzB,uBAAwB,qDACxB,wBAAyB,oDAGzB,QAAS,CACP,KAAM,MACN,MAAO,KACR,CAGD,cAAe,CACb,QAAS,0CACT,KAAM,CACJ,QAAS,CACP,UAAW,UACX,QAAS,kCACT,UAAW,cACX,MAAO,oEACR,CACD,SAAU,CACR,QAAS,qCACT,UAAW,cACX,MAAO,yEACR,CACF,CACD,WAAY,CACV,aAAc,2BACd,SAAU,CACR,aAAc,sBACd,YAAa,gEACd,CACD,eAAgB,aACjB,CACD,WAAY,CACV,eAAgB,iBACjB,CACD,OAAQ,CACN,eAAgB,oBACjB,CACD,cAAe,CACb,eAAgB,oBACjB,CACD,oBAAqB,CACnB,eAAgB,oBACjB,CACF,CAGD,OAAQ,CACN,UAAW,oFACX,YACE,oFACF,cAAe,CACb,WAAY,0BACZ,KAAM,cACN,MAAO,kBACR,CACD,MAAO,CACL,kBAAmB,uDACnB,aAAc,6EACd,cAAe,8EACf,aAAc,iDACd,oBAAqB,+CACrB,8BACE,sQACF,aAAc,8CACd,4BAA6B,2DAC7B,8BACE,2FACF,cAAe,+BACf,gBAAiB,8BACjB,qBAAsB,mCACtB,0BACE,mJACF,+BACE,8JACF,2BACE,iJACF,+BACE,2GACF,mBAAoB,iCACpB,mBACE,2EACF,oBACE,wHACF,wBACE,kLACF,gBAAiB,uCACjB,qBAAsB,mCACtB,qBAAsB,+DACtB,sBAAuB,gEACvB,4BACE,0FACF,2BACE,gFACF,8BACE,qFACF,oCACE,mFACF,qBAAsB,mEACtB,mBACE,kJACF,wBACE,oFACF,wBACE,mFACF,0BACE,wEACF,6BACE,yFACF,6BACE,wFACF,+BACE,6EACF,mBACE,+EACF,mBACE,8EACF,qBAAsB,mEACtB,sBACE,uFACF,sBACE,sFACF,wBACE,2EACF,gBACE,oIACF,8BACE,sGACF,eACE,6HACF,mBACE,iFACF,2BACE,+GACF,qBACE,0EACF,4BACE,4EACF,kCACE,sEACF,uCACE,0DACF,iCACE,yEACF,mCACE,kEACF,WAAY,mBACb,CACD,QAAS,CACP,+BAAgC,0DAChC,2BAA4B,sDAC5B,+BAAgC,2DAChC,2BACE,2EACH,CACD,mBACE,qIACH,CAGD,eAAgB,CACd,UAAW,QACX,oBACE,sFACF,SAAU,8EACX,CAGD,OAAQ,CACN,OAAQ,SACR,UAAW,YACX,MAAO,QACR,CAGD,WAAY,aACZ,MAAO,CACL,QAAS,CACP,cAAe,0BACf,gBAAiB,4BACjB,gBAAiB,sEAClB,CACD,MAAO,CACL,kBACE,8FACH,CACD,WAAY,CACV,MAAO,aACP,MAAO,QACP,aAAc,eACf,CACD,MAAO,CACL,KAAM,OACN,KAAM,OACN,MAAO,QACR,CACD,SAAU,CACR,MAAO,WACP,YAAa,CACX,MAAO,0BACP,gBAAiB,kBAClB,CACF,CACD,SAAU,CACR,MAAO,WACP,OAAQ,CACN,MAAO,SACP,iBAAkB,CAChB,aAAc,qCACf,CACD,cAAe,CACb,aAAc,wCACf,CACD,kBAAmB,CACjB,aAAc,uCACf,CACF,CACF,CACD,KAAM,CACJ,MAAO,uBACP,YAAa,CACX,QAAS,CACP,MAAO,8BACP,eAAgB,iBACjB,CACD,SAAU,CACR,MAAO,+BACP,YAAa,mDACd,CACD,YAAa,gBACb,YACE,4IACH,CACF,CACD,MAAO,CACL,MAAO,QACP,aAAc,CACZ,SAAU,CACR,MAAO,+BACP,YAAa,mDACd,CACD,YAAa,oBACb,YACE,iJACF,OAAQ,+BACR,YAAa,iDACd,CACD,cAAe,CACb,SAAU,CACR,MAAO,iCACP,YAAa,qDACd,CACD,YAAa,oBACb,YAAa,mDACd,CACF,CACD,cAAe,CACb,MAAO,gBACP,gBAAiB,CACf,MAAO,kBACP,YAAa,2EACb,aAAc,yBACf,CACF,CACD,SAAU,CACR,MAAO,WACP,KAAM,CACJ,MAAO,gBACP,YAAa,iEACb,aAAc,oBACf,CACD,eAAgB,CACd,MAAO,iBACP,YACE,qGACF,aAAc,wBACf,CACD,YAAa,CACX,MAAO,cACP,YACE,+JACF,IAAK,CACH,YAAa,WACb,MAAO,2BACP,QAAS,6BACV,CACD,KAAM,CACJ,YAAa,wDACb,MAAO,uCACP,QAAS,yCACV,CACF,CACF,CACF,CAGD,oBAAqB,CACnB,qBAAsB,uBACtB,mBAAoB,qBACpB,OAAQ,gCACR,aAAc,qBACd,WAAY,gBACZ,eAAgB,uBACjB,CAGD,iBAAkB,CAChB,KAAM,aACN,IAAK,eACL,IAAK,YACL,IAAK,OACL,KAAM,aACN,IAAK,aACL,IAAK,YACL,IAAK,YACL,IAAK,aACL,KAAM,aACN,KAAM,aACN,IAAK,YACL,IAAK,YACL,IAAK,kBACL,IAAK,YACL,KAAM,aACN,IAAK,aACL,IAAK,YACL,IAAK,YACL,GAAI,aACJ,KAAM,aACN,MAAO,aACP,MAAO,cACP,IAAK,YACL,IAAK,OACL,KAAM,OACN,IAAK,YACL,IAAK,YACL,IAAK,YACL,KAAM,aACN,IAAK,YACL,KAAM,aACN,IAAK,kBACL,IAAK,gBACL,KAAM,gBACN,IAAK,4BACL,IAAK,2BACL,IAAK,oBACL,IAAK,eACL,IAAK,0BACL,KAAM,0BACN,IAAK,qBACL,IAAK,oBACL,KAAM,oBACN,KAAM,YACN,GAAI,aACJ,KAAM,YACN,GAAI,gBACJ,KAAM,YACN,KAAM,YACN,IAAK,YACN,CAGD,gBAAiB,CACf,EAAG,eACH,GAAI,YACJ,GAAI,YACJ,GAAI,YACJ,GAAI,YACL,CACF,0BC58BY,IAAU,CAErB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AW,WACX,cAAe,cAChB,CAGD,QAAS,CACP,KAAM,KACN,MAAO,MACR,CAGD,cAAe,CACb,QAAS,uBACT,KAAM,CACJ,QAAS,CACP,UAAW,SACX,QAAS,+BACT,UAAW,OACX,MAAO,oCACR,CACD,SAAU,CACR,QAAS,6BACT,UAAW,SACX,MAAO,wCACR,CACF,CACD,WAAY,CACV,aAAc,uBACd,SAAU,CACR,aAAc,kBACd,YAAa,uCACd,CACD,eAAgB,aACjB,CACD,WAAY,CACV,eAAgB,iBACjB,CACD,OAAQ,CACN,eAAgB,eACjB,CACD,cAAe,CACb,eAAgB,eACjB,CACD,oBAAqB,CACnB,eAAgB,eACjB,CACF,CAGD,OAAQ,CACN,UAAW,wCACX,YAAa,wCACb,cAAe,CACb,WAAY,sBACZ,KAAM,cACN,MAAO,kBACR,CACD,MAAO,CACL,kBAAmB,+CACnB,aACE,uDACF,cACE,uDACF,aAAc,qBACd,oBAAqB,qCACrB,8BACE,qMACF,aAAc,qBACd,4BAA6B,uCAC7B,8BACE,6DACF,cAAe,oBACf,gBAAiB,oBACjB,qBAAsB,qBACtB,0BACE,oIACF,+BACE,0IACF,2BACE,iIACF,+BACE,gGACF,mBAAoB,mBACpB,mBACE,uDACF,oBACE,oEACF,wBACE,8HACF,gBAAiB,iCACjB,qBAAsB,uBACtB,qBACE,gDACF,sBACE,iDACF,4BACE,yDACF,2BACE,gDACF,8BACE,6DACF,oCACE,0DACF,qBAAsB,4CACtB,mBACE,uGACF,wBACE,wDACF,wBACE,2CACF,0BACE,+CACF,6BACE,4DACF,6BACE,+CACF,+BACE,mDACF,mBACE,uDACF,mBAAoB,0CACpB,qBACE,8CACF,sBACE,uDACF,sBAAuB,0CACvB,wBACE,8CACF,gBACE,sGACF,8BACE,iFACF,eACE,oGACF,mBACE,4DACF,2BACE,mFACF,qBACE,wDACF,4BACE,6DACF,kCACE,iDACF,uCACE,yCACF,iCACE,6CACF,mCACE,4CACF,WAAY,SACb,CACD,QAAS,CACP,+BACE,6CACF,2BACE,0CACF,+BACE,4CACF,2BACE,4DACH,CACD,mBACE,8GACH,CAGD,eAAgB,CACd,UAAW,OACX,oBACE,6DACF,SACE,sDACH,CAGD,OAAQ,CACN,OAAQ,MACR,UAAW,QACX,MAAO,MACR,CAGD,WAAY,OACZ,MAAO,CACL,QAAS,CACP,cAAe,kBACf,gBAAiB,kBACjB,gBAAiB,mCAClB,CACD,MAAO,CACL,kBACE,wDACH,CACD,WAAY,CACV,MAAO,SACP,MAAO,MACP,aAAc,SACf,CACD,MAAO,CACL,KAAM,KACN,KAAM,MACN,MAAO,MACR,CACD,SAAU,CACR,MAAO,KACP,YAAa,CACX,MAAO,iBACP,gBAAiB,QAClB,CACF,CACD,SAAU,CACR,MAAO,QACP,OAAQ,CACN,MAAO,QACP,iBAAkB,CAChB,aAAc,yBACf,CACD,cAAe,CACb,aAAc,mBACf,CACD,kBAAmB,CACjB,aAAc,sBACf,CACF,CACF,CACD,KAAM,CACJ,MAAO,MACP,YAAa,CACX,QAAS,CACP,MAAO,cACP,eAAgB,UACjB,CACD,SAAU,CACR,MAAO,gBACP,YAAa,gCACd,CACD,YAAa,eACb,YACE,yGACH,CACF,CACD,MAAO,CACL,MAAO,OACP,aAAc,CACZ,SAAU,CACR,MAAO,oBACP,YAAa,oCACd,CACD,YAAa,mBACb,YACE,oHACF,OAAQ,kBACR,YAAa,kCACd,CACD,cAAe,CACb,SAAU,CACR,MAAO,uBACP,YAAa,uCACd,CACD,YAAa,mBACb,YAAa,qCACd,CACF,CACD,cAAe,CACb,MAAO,WACP,gBAAiB,CACf,MAAO,aACP,YACE,4CACF,aAAc,WACf,CACF,CACD,SAAU,CACR,MAAO,KACP,KAAM,CACJ,MAAO,QACP,YACE,2CACF,aAAc,gBACf,CACD,eAAgB,CACd,MAAO,SACP,YACE,oDACF,aAAc,eACf,CACD,YAAa,CACX,MAAO,UACP,YACE,yFACF,IAAK,CACH,YAAa,UACb,MAAO,oBACP,QAAS,oBACV,CACD,KAAM,CACJ,YAAa,qCACb,MAAO,kBACP,QAAS,kBACV,CACF,CACF,CACF,CAGD,oBAAqB,CACnB,qBAAsB,gBACtB,mBAAo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","names":["next","clone","derived","get","get_store","flatten","set","is","on","text","html","element","append_styles","r","clsx","_clsx","w.select_multiple_invalid_value","isCollection","Collection","Iterator","resolveEnd","isSeq","hashString","Map","validateEntry","merge$1","isMap","has","remove","reduce","Range","Set","toJS","saveFile","Parser","parse","deepmerge","getOptions","init","formatTime","SCALAR","NODE_TYPE","BREAK","SKIP","REMOVE","visit","stringify","merge","floatNaN","floatExp","float","intIdentify","intResolve","intStringify","intOct","int","intHex","schema","schema$2","isBlock","types","standardTypes","otherTypes","mime","dayjs","dayjsCustomParseFormat","dayjsLocalizedFormat","dayjsUTC","sanitize","DOMPurify","M","T","G","_","k","m","Re","Te","Oe","we","A","ye","N","re","se","Pe","Q","Se","j","$e","_e","q","F","Le","ie","U","te","ze","Ee","Ie","Ae","oe","Ce","v","K","ae","Be","le","De","qe","ue","ve","He","Ge","pe","Ze","Ne","ce","Qe","je","Fe","Ue","We","Xe","Je","Ve","Ye","D","et","he","ke","tt","ne","W","nt","Z","rt","C","z","st","de","O","X","J","E","ge","fe","me","it","w","x","y","$","b","P","L","g","Wt","Jt","Vt","parseInline","optionCacheMap","libParseTOML","libParseYAML","createFileList","appLocale","parseAssetFileInfo","saveChanges","backendName","label","repository","rootDirHandle","BACKEND_NAME","BACKEND_LABEL","DEFAULT_API_ROOT","DEFAULT_AUTH_ROOT","DEFAULT_AUTH_PATH","getUserProfile","getTokenPageURL","signIn","signOut","getBaseURLs","checkRepositoryAccess","fetchDefaultBranchName","fetchLastCommit","commitChanges","updateStores","updateCache","fetchFileList","parseFileContents","fetchFileContents","fetchFiles","fetchBlob","appLocales","FETCH_DEFAULT_BRANCH_NAME_QUERY","FETCH_LAST_COMMIT_QUERY","STATUS_DASHBOARD_URL","STATUS_CHECK_URL","test","getLibraryOptions","parseResults","list","search","awsS3","cloudflareR2","digitaloceanSpaces","parseEntryCollection","UNSUPPORTED_OPTIONS","strings","s","d","I","R","B","V","Y","H","ht","ot","lt","ut","ct","at","dt","ft","gt","_t","pt","yt","mt","xt","Ct","St","vt","Tt","kt","Nt","bt","wt","Et","Ot","Mt","At","Pt","Dt","Ft","Lt","It","Kt","ee","Ht","zt","Rt","Bt","jt","Ut","Yt","Xt","$t","qt","Qt","Gt","Zt","xe","be","Me","Ke","tn","en","nn","rn","sn","ln","cn","an","un","fn","dn","hn","gn","_n","pn","yn","xn","mn","Cn","Sn","vn","Nn","Tn","kn","bn","wn","En","On","An","Fn","Kn","t","n","u","a","p","h","o","c","S","l","f","e","i","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","createEmptyHistoryState","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","stringifyTOML","stringifyYAML","sortKeys","root","Node","process","formatSummary","apiEndpoint","apiLabel","developerURL","apiKeyURL","apiKeyPattern","complete","normalizeLanguage","serviceId","serviceLabel","model","googleAi","google","SUPPORTED_LOCALES","ENDPOINT","SEARCH_PARAMS","getLocale","getDefaultValue","getDefaultValueMap","getBooleanFieldDefaultValueMap","getCodeFieldDefaultValueMap","getDateTimeFieldDefaultValueMap","getFileFieldDefaultValueMap","getHiddenFieldDefaultValueMap","getKeyValueFieldDefaultValueMap","getListFieldDefaultValueMap","getRichTextFieldDefaultValueMap","getNumberFieldDefaultValueMap","getObjectFieldDefaultValueMap","getSelectFieldDefaultValueMap","DecoratorNode","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,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,172,173,174,175,176,177,178,179,182,183,184,185,191,192,193,194,195,196,197,198,199,200,201,210,211,212,213,214,215,216,217,222,223,224,225,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,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,522,615,616,617,618,619,620,621,622,623,624,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740],"sources":["../../node_modules/.pnpm/@sveltia+utils@0.8.6/node_modules/@sveltia/utils/dist/object.js","../../node_modules/.pnpm/react@19.2.4/node_modules/react/cjs/react.production.js","../../node_modules/.pnpm/react@19.2.4/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/svelte@5.54.0/node_modules/svelte/src/internal/shared/utils.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/constants.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/shared/errors.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/errors.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/constants.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/warnings.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/hydration.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/reactivity/equality.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/flags/index.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/shared/clone.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/context.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/task.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/error-handling.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/reactivity/status.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/reactivity/utils.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/store/utils.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/store/shared/index.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/reactivity/store.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/reactivity/batch.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/reactivity/create-subscriber.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/blocks/boundary.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/reactivity/async.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/reactivity/deriveds.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/reactivity/sources.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/proxy.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/operations.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/elements/misc.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/elements/bindings/shared.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/reactivity/effects.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/legacy.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/runtime.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/utils.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dev/css.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/elements/events.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/reconciler.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/template.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/render.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/blocks/branches.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/blocks/await.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/blocks/if.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/blocks/key.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/blocks/css-props.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/blocks/each.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/blocks/html.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/blocks/snippet.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/blocks/svelte-component.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/timing.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/loop.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/elements/transitions.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/blocks/svelte-element.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/blocks/svelte-head.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/css.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/elements/actions.js","../../node_modules/.pnpm/svelte@5.54.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.54.0/node_modules/svelte/src/internal/shared/attributes.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/elements/class.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/elements/style.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/elements/bindings/select.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/elements/attributes.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/elements/bindings/input.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/dom/elements/bindings/this.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/internal/client/reactivity/props.js","../../node_modules/.pnpm/svelte@5.54.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.5/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.8.6/node_modules/@sveltia/utils/dist/crypto.js","../../node_modules/.pnpm/@sveltia+utils@0.8.6/node_modules/@sveltia/utils/dist/string.js","../../node_modules/.pnpm/@sveltia+utils@0.8.6/node_modules/@sveltia/utils/dist/file.js","../../node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js","../../src/lib/services/assets/folders.js","../../node_modules/.pnpm/@sveltia+utils@0.8.6/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","../../node_modules/.pnpm/deepmerge@4.3.1/node_modules/deepmerge/dist/cjs.js","../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../../node_modules/.pnpm/@formatjs+fast-memoize@2.2.7/node_modules/@formatjs/fast-memoize/lib/index.js","../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.11.4/node_modules/@formatjs/icu-messageformat-parser/lib/error.js","../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.11.4/node_modules/@formatjs/icu-messageformat-parser/lib/types.js","../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.11.4/node_modules/@formatjs/icu-messageformat-parser/lib/regex.generated.js","../../node_modules/.pnpm/@formatjs+icu-skeleton-parser@1.8.16/node_modules/@formatjs/icu-skeleton-parser/lib/date-time.js","../../node_modules/.pnpm/@formatjs+icu-skeleton-parser@1.8.16/node_modules/@formatjs/icu-skeleton-parser/lib/regex.generated.js","../../node_modules/.pnpm/@formatjs+icu-skeleton-parser@1.8.16/node_modules/@formatjs/icu-skeleton-parser/lib/number.js","../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.11.4/node_modules/@formatjs/icu-messageformat-parser/lib/time-data.generated.js","../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.11.4/node_modules/@formatjs/icu-messageformat-parser/lib/date-time-pattern-generator.js","../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.11.4/node_modules/@formatjs/icu-messageformat-parser/lib/parser.js","../../node_modules/.pnpm/@formatjs+icu-messageformat-parser@2.11.4/node_modules/@formatjs/icu-messageformat-parser/lib/index.js","../../node_modules/.pnpm/intl-messageformat@10.7.18/node_modules/intl-messageformat/lib/src/error.js","../../node_modules/.pnpm/intl-messageformat@10.7.18/node_modules/intl-messageformat/lib/src/formatters.js","../../node_modules/.pnpm/intl-messageformat@10.7.18/node_modules/intl-messageformat/lib/src/core.js","../../node_modules/.pnpm/svelte-i18n@4.0.1_svelte@5.54.0/node_modules/svelte-i18n/dist/runtime.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/nodes/identity.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/visit.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/doc/directives.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/doc/anchors.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/doc/applyReviver.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/nodes/toJS.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/nodes/Node.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/nodes/Alias.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/nodes/Scalar.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/doc/createNode.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/nodes/Collection.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/stringify/stringifyComment.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/stringify/foldFlowLines.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/stringify/stringifyString.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/stringify/stringify.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/stringify/stringifyPair.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/log.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/nodes/Pair.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/stringify/stringifyCollection.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/nodes/YAMLMap.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/schema/common/map.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/nodes/YAMLSeq.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/schema/common/seq.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/schema/common/string.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/schema/common/null.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/schema/core/bool.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/stringify/stringifyNumber.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/schema/core/float.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/schema/core/int.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/schema/core/schema.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/schema/json/schema.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/schema/yaml-1.1/float.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/schema/yaml-1.1/int.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/schema/yaml-1.1/set.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/schema/tags.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/schema/Schema.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/stringify/stringifyDocument.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/doc/Document.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/errors.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/compose/resolve-props.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/compose/util-contains-newline.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/compose/util-flow-indent-check.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/compose/util-map-includes.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/compose/resolve-block-map.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/compose/resolve-block-seq.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/compose/resolve-end.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/compose/compose-collection.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/compose/compose-scalar.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/compose/compose-node.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/compose/compose-doc.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/compose/composer.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/parse/cst-visit.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/parse/cst.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/parse/lexer.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/parse/line-counter.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/parse/parser.js","../../node_modules/.pnpm/yaml@2.8.2/node_modules/yaml/browser/dist/public-api.js","../../src/lib/services/contents/index.js","../../src/lib/services/contents/collection/files.js","../../src/lib/services/config/deprecations.js","../../node_modules/.pnpm/@sveltia+utils@0.8.6/node_modules/@sveltia/utils/dist/misc.js","../../node_modules/.pnpm/@sveltia+utils@0.8.6/node_modules/@sveltia/utils/dist/storage/indexed-db.js","../../node_modules/.pnpm/@sveltia+utils@0.8.6/node_modules/@sveltia/utils/dist/storage/local-storage.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.8.6/node_modules/@sveltia/utils/dist/array.js","../../src/lib/services/assets/kinds.js","../../src/lib/services/backends/git/shared/config.js","../../node_modules/.pnpm/dayjs@1.11.20/node_modules/dayjs/dayjs.min.js","../../node_modules/.pnpm/dayjs@1.11.20/node_modules/dayjs/plugin/customParseFormat.js","../../node_modules/.pnpm/dayjs@1.11.20/node_modules/dayjs/plugin/localizedFormat.js","../../node_modules/.pnpm/dayjs@1.11.20/node_modules/dayjs/plugin/utc.js","../../src/lib/services/contents/i18n/index.js","../../src/lib/services/utils/date.js","../../src/lib/services/contents/fields/date-time/helper.js","../../src/lib/services/common/transformations.js","../../src/lib/services/contents/fields/index.js","../../node_modules/.pnpm/dompurify@3.3.3/node_modules/dompurify/dist/purify.es.mjs","../../node_modules/.pnpm/isomorphic-dompurify@3.5.0/node_modules/isomorphic-dompurify/dist/browser.mjs","../../node_modules/.pnpm/marked@17.0.4/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","../../src/lib/services/contents/entry/summary.js","../../src/lib/services/contents/fields/relation/helper.js","../../src/lib/services/contents/fields/rich-text/components/utils.js","../../src/lib/services/contents/fields/rich-text/constants.js","../../src/lib/services/contents/fields/rich-text/components/definitions.js","../../src/lib/services/contents/fields/select/helper.js","../../src/lib/services/integrations/media-libraries/shared.js","../../src/lib/services/contents/entry/fields.js","../../node_modules/.pnpm/smol-toml@1.6.0/node_modules/smol-toml/dist/error.js","../../node_modules/.pnpm/smol-toml@1.6.0/node_modules/smol-toml/dist/util.js","../../node_modules/.pnpm/smol-toml@1.6.0/node_modules/smol-toml/dist/date.js","../../node_modules/.pnpm/smol-toml@1.6.0/node_modules/smol-toml/dist/primitive.js","../../node_modules/.pnpm/smol-toml@1.6.0/node_modules/smol-toml/dist/extract.js","../../node_modules/.pnpm/smol-toml@1.6.0/node_modules/smol-toml/dist/struct.js","../../node_modules/.pnpm/smol-toml@1.6.0/node_modules/smol-toml/dist/parse.js","../../node_modules/.pnpm/smol-toml@1.6.0/node_modules/smol-toml/dist/stringify.js","../../src/lib/services/contents/file/parse.js","../../src/lib/services/contents/file/process.js","../../src/lib/services/backends/process.js","../../src/lib/services/user/env.js","../../node_modules/.pnpm/truncate-utf8-bytes@1.0.2/node_modules/truncate-utf8-bytes/lib/truncate.js","../../node_modules/.pnpm/utf8-byte-length@1.0.5/node_modules/utf8-byte-length/browser.js","../../node_modules/.pnpm/truncate-utf8-bytes@1.0.2/node_modules/truncate-utf8-bytes/browser.js","../../node_modules/.pnpm/sanitize-filename@1.6.3/node_modules/sanitize-filename/index.js","../../src/lib/services/utils/file.js","../../src/lib/services/backends/fs/shared/files.js","../../src/lib/services/backends/fs/local.js","../../src/lib/services/backends/fs/test.js","../../src/lib/services/backends/git/gitea/constants.js","../../src/lib/services/user/index.js","../../src/lib/services/utils/networking.js","../../src/lib/services/backends/git/shared/api.js","../../src/lib/services/backends/git/gitea/user.js","../../src/lib/services/backends/git/shared/auth.js","../../src/lib/services/backends/git/gitea/auth.js","../../src/lib/services/backends/git/shared/repository.js","../../src/lib/services/backends/git/gitea/repository.js","../../src/lib/services/backends/git/shared/commits.js","../../src/lib/services/backends/git/gitea/commits.js","../../src/lib/services/backends/git/gitea/instance.js","../../src/lib/services/backends/git/shared/fetch.js","../../src/lib/services/backends/git/gitea/files.js","../../src/lib/services/user/prefs.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/index.js","../../src/lib/services/backends/git/gitlab/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/uploadcare.js","../../src/lib/services/integrations/media-libraries/cloud/index.js","../../src/lib/services/app/dependencies.js","../../src/lib/services/utils/number.js","../../src/lib/services/utils/media/image/exif.js","../../src/lib/services/utils/media/index.js","../../src/lib/services/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/misc.js","../../src/lib/services/contents/collection/entries.js","../../src/lib/services/contents/collection/index-file.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/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/common/slug.js","../../src/lib/services/common/template.js","../../src/lib/services/integrations/media-libraries/index.js","../../src/lib/services/integrations/media-libraries/default/index.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.54.0/node_modules/svelte/src/internal/disclose-version.js","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/locales/en.js","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/locales/ja.js","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/services/i18n.js","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/icon/icon.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/alert/alert.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/services/events.svelte.js","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/typography/truncated-text.svelte","../../node_modules/.pnpm/@sveltia+utils@0.8.6/node_modules/@sveltia/utils/dist/element.js","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/services/popup.svelte.js","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/util/placeholder.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/util/modal.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/util/popup.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/button/button.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/alert/infobar.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/bottom-navigation/bottom-navigation.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/button/button-group.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/button/floating-action-button-wrapper.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/services/select.svelte.js","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/services/group.svelte.js","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/button/select-button-group.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/button/select-button.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/menu/menu-button.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/button/split-button.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/divider/divider.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/divider/spacer.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/checkbox/checkbox-group.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/checkbox/checkbox.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/dialog/dialog.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/dialog/alert-dialog.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/dialog/confirmation-dialog.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/text-field/text-input.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/dialog/prompt-dialog.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/file/file-picker.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/grid/grid-body.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/grid/grid-cell.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/grid/grid-row.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/grid/grid.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/listbox/listbox.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/listbox/option-group.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/listbox/option.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/menu/menu.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/menu/menu-item.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/menu/menu-item-checkbox.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/menu/menu-item-radio.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/progressbar/progressbar.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/radio/radio-group.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/radio/radio.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/resizable-pane/resizable-handle.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/resizable-pane/resizable-pane-group.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/resizable-pane/resizable-pane.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/scroll/infinite-scroll.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/text-field/search-bar.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/select/combobox.svelte","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/easing/index.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/animate/index.js","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/select/select.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/select/select-tags.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/slider/slider.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/switch/switch.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/table/table-cell.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/table/table-row.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/table/table.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/tabs/tab-list.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/tabs/tab-panel.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/tabs/tab.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/toast/toast.svelte","../../node_modules/.pnpm/lexical@0.41.0/node_modules/lexical/Lexical.prod.mjs","../../node_modules/.pnpm/@lexical+selection@0.41.0/node_modules/@lexical/selection/LexicalSelection.prod.mjs","../../node_modules/.pnpm/@lexical+utils@0.41.0/node_modules/@lexical/utils/LexicalUtils.prod.mjs","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/prism.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-clike.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-javascript.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-markup.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-markdown.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-c.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-css.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-objectivec.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-sql.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-powershell.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-python.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-rust.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-swift.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-typescript.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-java.js","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components/prism-cpp.js","../../node_modules/.pnpm/@lexical+code@0.41.0/node_modules/@lexical/code/LexicalCode.prod.mjs","../../node_modules/.pnpm/@lexical+extension@0.41.0/node_modules/@lexical/extension/LexicalExtension.prod.mjs","../../node_modules/.pnpm/@lexical+dragon@0.41.0/node_modules/@lexical/dragon/LexicalDragon.prod.mjs","../../node_modules/.pnpm/@lexical+history@0.41.0/node_modules/@lexical/history/LexicalHistory.prod.mjs","../../node_modules/.pnpm/@lexical+link@0.41.0/node_modules/@lexical/link/LexicalLink.prod.mjs","../../node_modules/.pnpm/@lexical+list@0.41.0/node_modules/@lexical/list/LexicalList.prod.mjs","../../node_modules/.pnpm/@lexical+html@0.41.0/node_modules/@lexical/html/LexicalHtml.prod.mjs","../../node_modules/.pnpm/@lexical+clipboard@0.41.0/node_modules/@lexical/clipboard/LexicalClipboard.prod.mjs","../../node_modules/.pnpm/@lexical+rich-text@0.41.0/node_modules/@lexical/rich-text/LexicalRichText.prod.mjs","../../node_modules/.pnpm/@lexical+markdown@0.41.0/node_modules/@lexical/markdown/LexicalMarkdown.prod.mjs","../../node_modules/.pnpm/@lexical+table@0.41.0/node_modules/@lexical/table/LexicalTable.prod.mjs","../../node_modules/.pnpm/prismjs@1.30.0/node_modules/prismjs/components.js","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/text-editor/constants.js","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/text-editor/markdown.js","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/text-editor/transformers/hr.js","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/text-editor/transformers/table.js","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/text-editor/core.js","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/text-editor/lexical-root.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/text-editor/store.svelte.js","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/text-editor/toolbar/code-language-switcher.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/toolbar/toolbar.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/text-editor/toolbar/toolbar-wrapper.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/text-editor/toolbar/code-editor-toolbar.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/text-editor/code-editor.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/text-field/text-area.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/text-editor/toolbar/format-text-button.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/text-editor/toolbar/insert-image-button.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/text-editor/toolbar/insert-link-button.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/text-editor/toolbar/insert-menu-button.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/text-editor/toolbar/toggle-block-menu-item.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/text-editor/toolbar/text-editor-toolbar.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/text-editor/text-editor.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/text-field/number-input.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/text-field/secret-input.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/util/app-shell.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/util/empty-state.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/components/util/group.svelte","../../node_modules/.pnpm/@sveltia+ui@0.35.2_svelte@5.54.0/node_modules/@sveltia/ui/dist/index.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/app/navigation.js","../../src/lib/services/user/auth.js","../../src/lib/services/utils/string.js","../../src/lib/components/entrance/sign-in.svelte","../../src/lib/assets/sveltia-logo.svg?raw&inline","../../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/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/draft/save/key-path.js","../../src/lib/services/contents/draft/save/serialize.js","../../src/lib/services/contents/file/format.js","../../src/lib/services/contents/draft/save/changes.js","../../src/lib/services/assets/data/move.js","../../src/lib/components/assets/details/rename-asset-dialog.svelte","../../src/lib/components/assets/list/asset-list-item.svelte","../../src/lib/components/assets/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/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/index.js","../../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.2/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/translators/google.js","../../src/lib/services/integrations/ai/google.js","../../src/lib/services/integrations/translators/google-ai.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/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/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/contents/details/fields/file/file-editor-item.svelte","../../src/lib/components/contents/details/fields/file/upload-button.svelte","../../src/lib/services/contents/fields/file/helper.js","../../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/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/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/components/contents/details/fields/rich-text/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.14_marked@17.0.4/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.4_react@19.2.4/node_modules/react-dom/cjs/react-dom.production.js","../../node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/index.js","../../node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/cjs/react-dom-client.production.js","../../node_modules/.pnpm/react-dom@19.2.4_react@19.2.4/node_modules/react-dom/client.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/reactivity/map.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/reactivity/url-search-params.js","../../node_modules/.pnpm/svelte@5.54.0/node_modules/svelte/src/reactivity/url.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/services/contents/fields/string/validate.js","../../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/services/contents/fields/date-time/validate.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/edit-slug-dialog.svelte","../../src/lib/services/contents/collection/data/delete.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/contents/collection/view/sort-keys.js","../../src/lib/services/utils/markdown.js","../../src/lib/services/contents/collection/view/sort.js","../../src/lib/services/contents/collection/view/index.js","../../src/lib/services/contents/draft/create/index.js","../../src/lib/services/contents/draft/create/duplicate.js","../../src/lib/services/contents/fields/number/validate.js","../../src/lib/services/contents/draft/validate.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.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/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/locales/en.js","../../src/lib/locales/ja.js","../../src/lib/services/app/i18n.js","../../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, so this can be used instead. The name of `toRaw` is derived from the equivalent in Vue.\n * @param {object} obj - Proxified object.\n * @returns {object} Deproxified object.\n */\nconst toRaw = (obj) => JSON.parse(JSON.stringify(obj));\n\nexport { isObject, toRaw };\n","/**\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.4\";\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","// 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).\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');\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();\n\n// Dev-time component properties\nexport const FILENAME = Symbol('filename');\nexport const HMR = Symbol('hmr');\n\nexport const NAMESPACE_HTML = 'http://www.w3.org/1999/xhtml';\nexport const NAMESPACE_SVG = 'http://www.w3.org/2000/svg';\nexport const NAMESPACE_MATHML = 'http://www.w3.org/1998/Math/MathML';\n\n// we use a list of ignorable runtime warnings because not every runtime warning\n// can be ignored and we want to keep the validation for svelte-ignore in place\nexport const IGNORABLE_RUNTIME_WARNINGS = /** @type {const} */ ([\n\t'await_waterfall',\n\t'await_reactivity_loss',\n\t'state_snapshot_uncloneable',\n\t'binding_property_non_reactive',\n\t'hydration_attribute_changed',\n\t'hydration_html_changed',\n\t'ownership_invalid_binding',\n\t'ownership_invalid_mutation'\n]);\n\n/**\n * Whitespace inside one of these elements will not result in\n * a whitespace node being created in any circumstances. (This\n * list is almost certainly very incomplete)\n * TODO this is currently unused\n */\nexport const ELEMENTS_WITHOUT_TEXT = ['audio', 'datalist', 'dl', 'optgroup', 'select', 'video'];\n\nexport const ATTACHMENT_KEY = '@attach';\n","/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\nvar bold = 'font-weight: bold';\nvar normal = 'font-weight: normal';\n\n/**\n * Assignment to `%property%` property (%location%) will evaluate to the right-hand side, not the value of `%property%` following the assignment. This may result in unexpected behaviour.\n * @param {string} property\n * @param {string} location\n */\nexport function assignment_value_stale(property, location) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] assignment_value_stale\\n%cAssignment to \\`${property}\\` property (${location}) will evaluate to the right-hand side, not the value of \\`${property}\\` following the assignment. This may result in unexpected behaviour.\\nhttps://svelte.dev/e/assignment_value_stale`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/assignment_value_stale`);\n\t}\n}\n\n/**\n * Detected reactivity loss when reading `%name%`. This happens when state is read in an async function after an earlier `await`\n * @param {string} name\n */\nexport function await_reactivity_loss(name) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] await_reactivity_loss\\n%cDetected reactivity loss when reading \\`${name}\\`. This happens when state is read in an async function after an earlier \\`await\\`\\nhttps://svelte.dev/e/await_reactivity_loss`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/await_reactivity_loss`);\n\t}\n}\n\n/**\n * An async derived, `%name%` (%location%) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app\n * @param {string} name\n * @param {string} location\n */\nexport function await_waterfall(name, location) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] await_waterfall\\n%cAn async derived, \\`${name}\\` (${location}) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app\\nhttps://svelte.dev/e/await_waterfall`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/await_waterfall`);\n\t}\n}\n\n/**\n * `%binding%` (%location%) is binding to a non-reactive property\n * @param {string} binding\n * @param {string | undefined | null} [location]\n */\nexport function binding_property_non_reactive(binding, location) {\n\tif (DEV) {\n\t\tconsole.warn(\n\t\t\t`%c[svelte] binding_property_non_reactive\\n%c${location\n\t\t\t\t? `\\`${binding}\\` (${location}) is binding to a non-reactive property`\n\t\t\t\t: `\\`${binding}\\` is binding to a non-reactive property`}\\nhttps://svelte.dev/e/binding_property_non_reactive`,\n\t\t\tbold,\n\t\t\tnormal\n\t\t);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/binding_property_non_reactive`);\n\t}\n}\n\n/**\n * Your `console.%method%` contained `$state` proxies. Consider using `$inspect(...)` or `$state.snapshot(...)` instead\n * @param {string} method\n */\nexport function console_log_state(method) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] console_log_state\\n%cYour \\`console.${method}\\` contained \\`$state\\` proxies. Consider using \\`$inspect(...)\\` or \\`$state.snapshot(...)\\` instead\\nhttps://svelte.dev/e/console_log_state`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/console_log_state`);\n\t}\n}\n\n/**\n * %handler% should be a function. Did you mean to %suggestion%?\n * @param {string} handler\n * @param {string} suggestion\n */\nexport function event_handler_invalid(handler, suggestion) {\n\tif (DEV) {\n\t\tconsole.warn(`%c[svelte] event_handler_invalid\\n%c${handler} should be a function. Did you mean to ${suggestion}?\\nhttps://svelte.dev/e/event_handler_invalid`, bold, normal);\n\t} else {\n\t\tconsole.warn(`https://svelte.dev/e/event_handler_invalid`);\n\t}\n}\n\n/**\n * 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","/** @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 { 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 } 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\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();\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 { 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} 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, 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';\n\n/** @type {Set<Batch>} */\nconst batches = new Set();\n\n/** @type {Batch | null} */\nexport let current_batch = null;\n\n/**\n * This is needed to avoid overwriting inputs\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;\nvar source_stacks = DEV ? new Set() : null;\n\nlet uid = 1;\n\nexport class Batch {\n\t// for debugging. TODO remove once async is stable\n\tid = uid++;\n\n\t/**\n\t * The current values of any sources that are updated in this batch\n\t * They keys of this map are identical to `this.#previous`\n\t * @type {Map<Source, any>}\n\t */\n\tcurrent = new Map();\n\n\t/**\n\t * The values of any sources that are updated in this batch _before_ those updates took place.\n\t * They keys of this map are identical to `this.#current`\n\t * @type {Map<Source, any>}\n\t */\n\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 * The number of async effects that are currently in flight, _not_ inside a pending boundary\n\t */\n\t#blocking_pending = 0;\n\n\t/**\n\t * A deferred that resolves when the batch is committed, used with `settled()`\n\t * TODO replace with Promise.withResolvers once supported widely enough\n\t * @type {{ promise: Promise<void>, resolve: (value?: any) => void, reject: (reason: unknown) => void } | null}\n\t */\n\t#deferred = null;\n\n\t/**\n\t * The root effects that need to be flushed\n\t * @type {Effect[]}\n\t */\n\t#roots = [];\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\tis_fork = false;\n\n\t#decrement_queued = false;\n\n\t#is_deferred() {\n\t\treturn this.is_fork || this.#blocking_pending > 0;\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}\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 */\n\tunskip_effect(effect) {\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\tthis.schedule(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\tthis.schedule(e);\n\t\t\t}\n\t\t}\n\t}\n\n\t#process() {\n\t\tif (flush_count++ > 1000) {\n\t\t\tbatches.delete(this);\n\t\t\tinfinite_loop_guard();\n\t\t}\n\n\t\t// we only reschedule previously-deferred effects if we expect\n\t\t// to be able to run them after processing the batch\n\t\tif (!this.#is_deferred()) {\n\t\t\tfor (const e of this.#dirty_effects) {\n\t\t\t\tthis.#maybe_dirty_effects.delete(e);\n\t\t\t\tset_signal_status(e, DIRTY);\n\t\t\t\tthis.schedule(e);\n\t\t\t}\n\n\t\t\tfor (const e of this.#maybe_dirty_effects) {\n\t\t\t\tset_signal_status(e, MAYBE_DIRTY);\n\t\t\t\tthis.schedule(e);\n\t\t\t}\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\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\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\t\t} else {\n\t\t\tif (this.#pending === 0) {\n\t\t\t\tbatches.delete(this);\n\t\t\t}\n\n\t\t\t// clear effects. Those that are still needed will be rescheduled through unskipping the skipped branches.\n\t\t\tthis.#dirty_effects.clear();\n\t\t\tthis.#maybe_dirty_effects.clear();\n\n\t\t\t// append/remove branches\n\t\t\tfor (const fn of this.#commit_callbacks) fn(this);\n\t\t\tthis.#commit_callbacks.clear();\n\n\t\t\tprevious_batch = this;\n\t\t\tflush_queued_effects(render_effects);\n\t\t\tflush_queued_effects(effects);\n\t\t\tprevious_batch = null;\n\n\t\t\tthis.#deferred?.resolve();\n\t\t}\n\n\t\tvar next_batch = /** @type {Batch | null} */ (/** @type {unknown} */ (current_batch));\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\tconst batch = (next_batch ??= this);\n\t\t\tbatch.#roots.push(...this.#roots.filter((r) => !batch.#roots.includes(r)));\n\t\t}\n\n\t\tif (next_batch !== null) {\n\t\t\tbatches.add(next_batch);\n\n\t\t\tif (DEV) {\n\t\t\t\tfor (const source of this.current.keys()) {\n\t\t\t\t\t/** @type {Set<Source>} */ (source_stacks).add(source);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tnext_batch.#process();\n\t\t}\n\n\t\tif (!batches.has(this)) {\n\t\t\tthis.#commit();\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/**\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 {Source} source\n\t * @param {any} old_value\n\t */\n\tcapture(source, old_value) {\n\t\tif (old_value !== UNINITIALIZED && !this.previous.has(source)) {\n\t\t\tthis.previous.set(source, old_value);\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, source.v);\n\t\t\tbatch_values?.set(source, source.v);\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\tvar source_stacks = DEV ? new Set() : null;\n\n\t\ttry {\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 /** @type {Set<Source>} */ (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\tbatches.delete(this);\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 (const batch of batches) {\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] of this.current) {\n\t\t\t\tif (batch.current.has(source)) {\n\t\t\t\t\tif (is_earlier && value !== batch.current.get(source)) {\n\t\t\t\t\t\t// bring the value up to date\n\t\t\t\t\t\tbatch.current.set(source, value);\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\t// Re-run async/block effects that depend on distinct values changed in both batches\n\t\t\tvar others = [...batch.current.keys()].filter((s) => !this.current.has(s));\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\tif (DEV) {\n\t\t\t\t\tinvariant(batch.#roots.length === 0, 'Batch has scheduled roots');\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\t// Only apply and traverse when we know we triggered async work with marking the effects\n\t\t\t\tif (batch.#roots.length > 0) {\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 *\n\t * @param {boolean} blocking\n\t */\n\tincrement(blocking) {\n\t\tthis.#pending += 1;\n\t\tif (blocking) this.#blocking_pending += 1;\n\t}\n\n\t/**\n\t * @param {boolean} blocking\n\t * @param {boolean} skip - whether to skip updates (because this is triggered by a stale reaction)\n\t */\n\tdecrement(blocking, skip) {\n\t\tthis.#pending -= 1;\n\t\tif (blocking) this.#blocking_pending -= 1;\n\n\t\tif (this.#decrement_queued || skip) return;\n\t\tthis.#decrement_queued = true;\n\n\t\tqueue_micro_task(() => {\n\t\t\tthis.#decrement_queued = false;\n\t\t\tthis.flush();\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) {\n\t\t\t\tbatches.add(current_batch);\n\n\t\t\t\tif (!is_flushing_sync) {\n\t\t\t\t\tqueue_micro_task(() => {\n\t\t\t\t\t\tif (current_batch !== batch) {\n\t\t\t\t\t\t\t// a flushSync happened in the meantime\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\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 && batches.size === 1)) {\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(this.current);\n\n\t\t// ...and undo changes belonging to other batches\n\t\tfor (const batch of batches) {\n\t\t\tif (batch === this || batch.is_fork) continue;\n\n\t\t\tfor (const [source, previous] of batch.previous) {\n\t\t\t\tif (!batch_values.has(source)) {\n\t\t\t\t\tbatch_values.set(source, previous);\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\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\ttry {\n\t\tflushSync(() => {\n\t\t\tfor (const version of eager_versions) {\n\t\t\t\tupdate(version);\n\t\t\t}\n\t\t});\n\t} finally {\n\t\teager_versions = [];\n\t}\n}\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 version = source(0);\n\tvar initial = true;\n\tvar value = /** @type {T} */ (undefined);\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\t// revert state changes\n\tfor (var [source, value] of batch.previous) {\n\t\tsource.v = value;\n\t}\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 (!batches.has(batch)) {\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 && batches.has(batch)) {\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\tbatches.clear();\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, schedule_effect } 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';\nimport { set_signal_status } from '../../reactivity/status.js';\n\n/**\n * @typedef {{\n * \t onerror?: (error: unknown, reset: () => void) => void;\n *   failed?: (anchor: Node, error: () => unknown, reset: () => () => void) => void;\n *   pending?: (anchor: Node) => void;\n * }} BoundaryProps\n */\n\nvar flags = EFFECT_TRANSPARENT | EFFECT_PRESERVED;\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\tvar onerror = this.#props.onerror;\n\t\tlet failed = this.#props.failed;\n\n\t\t// If we have nothing to capture the error, or if we hit an error while\n\t\t// rendering the fallback, re-throw for another boundary to handle\n\t\tif (!onerror && !failed) {\n\t\t\tthrow error;\n\t\t}\n\n\t\tif (this.#main_effect) {\n\t\t\tdestroy_effect(this.#main_effect);\n\t\t\tthis.#main_effect = null;\n\t\t}\n\n\t\tif (this.#pending_effect) {\n\t\t\tdestroy_effect(this.#pending_effect);\n\t\t\tthis.#pending_effect = null;\n\t\t}\n\n\t\tif (this.#failed_effect) {\n\t\t\tdestroy_effect(this.#failed_effect);\n\t\t\tthis.#failed_effect = null;\n\t\t}\n\n\t\tif (hydrating) {\n\t\t\tset_hydrate_node(/** @type {TemplateNode} */ (this.#hydrate_open));\n\t\t\tnext();\n\t\t\tset_hydrate_node(skip_nodes());\n\t\t}\n\n\t\tvar did_reset = false;\n\t\tvar calling_on_error = false;\n\n\t\tconst reset = () => {\n\t\t\tif (did_reset) {\n\t\t\t\tw.svelte_boundary_reset_noop();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdid_reset = true;\n\n\t\t\tif (calling_on_error) {\n\t\t\t\te.svelte_boundary_reset_onerror();\n\t\t\t}\n\n\t\t\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, 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';\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\tif (async.length === 0 && pending.length === 0) {\n\t\tfn(sync.map(d));\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/** @param {Value[]} values */\n\tfunction finish(values) {\n\t\trestore();\n\n\t\ttry {\n\t\t\tfn(values);\n\t\t} catch (error) {\n\t\t\tif ((parent.f & DESTROYED) === 0) {\n\t\t\t\tinvoke_error_boundary(error, parent);\n\t\t\t}\n\t\t}\n\n\t\tunset_context();\n\t}\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(sync.map(d)));\n\t\treturn;\n\t}\n\n\tvar decrement_pending = increment_pending();\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((result) => finish([...sync.map(d), ...result]))\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\treturn value;\n\t};\n}\n\n/**\n * Reset `current_async_effect` after the `promise` resolves, so\n * that we can emit `await_reactivity_loss` warnings\n * @template T\n * @param {Promise<T>} promise\n * @returns {Promise<() => T>}\n */\nexport async function track_reactivity_loss(promise) {\n\tvar previous_async_effect = reactivity_loss_tracker;\n\tvar value = await promise;\n\n\treturn () => {\n\t\tset_reactivity_loss_tracker(previous_async_effect);\n\t\treturn value;\n\t};\n}\n\n/**\n * Used in `for await` loops in DEV, so\n * that we can emit `await_reactivity_loss` warnings\n * after each `async_iterator` result resolves and\n * after the `async_iterator` return resolves (if it runs)\n * @template T\n * @template TReturn\n * @param {Iterable<T> | AsyncIterable<T>} iterable\n * @returns {AsyncGenerator<T, TReturn | undefined>}\n */\nexport async function* for_await_track_reactivity_loss(iterable) {\n\t// This is based on the algorithms described in ECMA-262:\n\t// ForIn/OfBodyEvaluation\n\t// https://tc39.es/ecma262/multipage/ecmascript-language-statements-and-declarations.html#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset\n\t// AsyncIteratorClose\n\t// https://tc39.es/ecma262/multipage/abstract-operations.html#sec-asynciteratorclose\n\n\t/** @type {AsyncIterator<T, TReturn>} */\n\t// @ts-ignore\n\tconst iterator = iterable[Symbol.asyncIterator]?.() ?? iterable[Symbol.iterator]?.();\n\n\tif (iterator === undefined) {\n\t\tthrow new TypeError('value is not async iterable');\n\t}\n\n\t/** Whether the completion of the iterator was \"normal\", meaning it wasn't ended via `break` or a similar method */\n\tlet normal_completion = false;\n\ttry {\n\t\twhile (true) {\n\t\t\tconst { done, value } = (await track_reactivity_loss(iterator.next()))();\n\t\t\tif (done) {\n\t\t\t\tnormal_completion = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tyield value;\n\t\t}\n\t} finally {\n\t\t// If the iterator had a normal completion and `return` is defined on the iterator, call it and return the value\n\t\tif (normal_completion && iterator.return !== undefined) {\n\t\t\t// eslint-disable-next-line no-unsafe-finally\n\t\t\treturn /** @type {TReturn} */ ((await track_reactivity_loss(iterator.return()))().value);\n\t\t}\n\t}\n}\n\nexport function unset_context(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\tif (errored) {\n\t\t\t\t\tthrow errored.error;\n\t\t\t\t}\n\n\t\t\t\tif (aborted(active)) {\n\t\t\t\t\tthrow STALE_REACTION;\n\t\t\t\t}\n\n\t\t\t\trestore();\n\t\t\t\treturn fn();\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\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 boundary = /** @type {Boundary} */ (/** @type {Effect} */ (active_effect).b);\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);\n\n\treturn (skip = false) => {\n\t\tboundary.update_pending_count(-1, batch);\n\t\tbatch.decrement(blocking, skip);\n\t};\n}\n","/** @import { Derived, Effect, Source } 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} 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} 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 } 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, warned: boolean } | null}\n */\nexport let reactivity_loss_tracker = null;\n\n/** @param {{ effect: Effect, 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\tvar parent_derived =\n\t\tactive_reaction !== null && (active_reaction.f & DERIVED) !== 0\n\t\t\t? /** @type {Derived} */ (active_reaction)\n\t\t\t: null;\n\n\tif (active_effect !== null) {\n\t\t// Since deriveds are evaluated lazily, any effects created inside them are\n\t\t// created too late to ensure that the parent effect is added to the tree\n\t\tactive_effect.f |= EFFECT_PRESERVED;\n\t}\n\n\t/** @type {Derived<V>} */\n\tconst signal = {\n\t\tctx: component_context,\n\t\tdeps: null,\n\t\teffects: null,\n\t\tequals,\n\t\tf: flags,\n\t\tfn,\n\t\treactions: null,\n\t\trv: 0,\n\t\tv: /** @type {V} */ (UNINITIALIZED),\n\t\twv: 0,\n\t\tparent: parent_derived ?? active_effect,\n\t\tac: null\n\t};\n\n\tif (DEV && tracing_mode_flag) {\n\t\tsignal.created = get_error('created at');\n\t}\n\n\treturn signal;\n}\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;\n\n\t// only suspend in async deriveds created on initialisation\n\tvar should_suspend = !active_reaction;\n\n\t/** @type {Map<Batch, ReturnType<typeof deferred<V>>>} */\n\tvar deferreds = new Map();\n\n\tasync_effect(() => {\n\t\tif (DEV) {\n\t\t\treactivity_loss_tracker = {\n\t\t\t\teffect: /** @type {Effect} */ (active_effect),\n\t\t\t\twarned: false\n\t\t\t};\n\t\t}\n\n\t\tvar effect = /** @type {Effect} */ (active_effect);\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()).then(d.resolve, d.reject).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\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 (/** @type {Boundary} */ (parent.b).is_rendered()) {\n\t\t\t\tdeferreds.get(batch)?.reject(STALE_REACTION);\n\t\t\t\tdeferreds.delete(batch); // delete to ensure correct order in Map iteration below\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(STALE_REACTION);\n\t\t\t\t}\n\t\t\t\tdeferreds.clear();\n\t\t\t}\n\n\t\t\tdeferreds.set(batch, 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\tif (decrement_pending) {\n\t\t\t\t// don't trigger an update if we're only here because\n\t\t\t\t// the promise was superseded before it could resolve\n\t\t\t\tvar skip = error === STALE_REACTION;\n\t\t\t\tdecrement_pending(skip);\n\t\t\t}\n\n\t\t\tif (error === STALE_REACTION || (effect.f & DESTROYED) !== 0) {\n\t\t\t\treturn;\n\t\t\t}\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\tinternal_set(signal, value);\n\n\t\t\t\t// All prior async derived runs are now stale\n\t\t\t\tfor (const [b, d] of deferreds) {\n\t\t\t\t\tdeferreds.delete(b);\n\t\t\t\t\tif (b === batch) break;\n\t\t\t\t\td.reject(STALE_REACTION);\n\t\t\t\t}\n\n\t\t\t\tif (DEV && location !== undefined) {\n\t\t\t\t\trecent_async_deriveds.add(signal);\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tif (recent_async_deriveds.has(signal)) {\n\t\t\t\t\t\t\tw.await_waterfall(/** @type {string} */ (signal.label), location);\n\t\t\t\t\t\t\trecent_async_deriveds.delete(signal);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\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.values()) {\n\t\t\td.reject(STALE_REACTION);\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 * @param {Derived} derived\n * @returns {Effect | null}\n */\nfunction get_derived_parent_effect(derived) {\n\tvar parent = derived.parent;\n\twhile (parent !== null) {\n\t\tif ((parent.f & DERIVED) === 0) {\n\t\t\t// The original parent effect might've been destroyed but the derived\n\t\t\t// is used elsewhere now - do not return the destroyed effect in that case\n\t\t\treturn (parent.f & DESTROYED) === 0 ? /** @type {Effect} */ (parent) : null;\n\t\t}\n\t\tparent = parent.parent;\n\t}\n\treturn null;\n}\n\n/**\n * @template T\n * @param {Derived} derived\n * @returns {T}\n */\nexport function execute_derived(derived) {\n\tvar value;\n\tvar prev_active_effect = active_effect;\n\n\tset_active_effect(get_derived_parent_effect(derived));\n\n\tif (DEV) {\n\t\tlet prev_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 old_value = derived.v;\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\tderived.v = value;\n\t\t\tcurrent_batch?.capture(derived, old_value);\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\n\t\t\te.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) {\n\t\t\tupdate_effect(e);\n\t\t}\n\t}\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} from '#client/constants';\nimport * as e from '../errors.js';\nimport { legacy_mode_flag, tracing_mode_flag } from '../../flags/index.js';\nimport { includes } from '../../shared/utils.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<any>} */\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 || !includes.call(current_sources, 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\tvar old_value = source.v;\n\n\t\tif (is_destroying_effect) {\n\t\t\told_values.set(source, value);\n\t\t} else {\n\t\t\told_values.set(source, old_value);\n\t\t}\n\n\t\tsource.v = value;\n\n\t\tvar batch = Batch.ensure();\n\t\tbatch.capture(source, old_value);\n\n\t\tif (DEV) {\n\t\t\tif (tracing_mode_flag || active_effect !== null) {\n\t\t\t\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\tif (is_dirty(effect)) {\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\t// Inspect effects need to run immediately, so that the stack trace makes sense\n\t\tif (DEV && (flags & EAGER_EFFECT) !== 0) {\n\t\t\teager_effects.add(reaction);\n\t\t\tcontinue;\n\t\t}\n\n\t\tvar not_dirty = (flags & DIRTY) === 0;\n\n\t\t// don't set a DIRTY reaction to MAYBE_DIRTY\n\t\tif (not_dirty) {\n\t\t\tset_signal_status(reaction, status);\n\t\t}\n\n\t\tif ((flags & DERIVED) !== 0) {\n\t\t\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 can be reliably unmarked right away\n\t\t\t\tif (flags & CONNECTED) {\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 { Effect, TemplateNode } from '#client' */\nimport { hydrate_node, hydrating, set_hydrate_node } from './hydration.js';\nimport { DEV } from 'esm-env';\nimport { init_array_prototype_warnings } from '../dev/equality.js';\nimport { get_descriptor, is_extensible } from '../../shared/utils.js';\nimport { active_effect } from '../runtime.js';\nimport { async_mode_flag } from '../../flags/index.js';\nimport { TEXT_NODE, REACTION_RAN } 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// @ts-expect-error\n\t\telement_prototype.__click = undefined;\n\t\t// @ts-expect-error\n\t\telement_prototype.__className = undefined;\n\t\t// @ts-expect-error\n\t\telement_prototype.__attributes = null;\n\t\t// @ts-expect-error\n\t\telement_prototype.__style = undefined;\n\t\t// @ts-expect-error\n\t\telement_prototype.__e = undefined;\n\t}\n\n\tif (is_extensible(text_prototype)) {\n\t\t// @ts-expect-error\n\t\ttext_prototype.__t = undefined;\n\t}\n\n\tif (DEV) {\n\t\t// @ts-expect-error\n\t\telement_prototype.__svelte_meta = null;\n\n\t\tinit_array_prototype_warnings();\n\t}\n}\n\n/**\n * @param {string} value\n * @returns {Text}\n */\nexport function create_text(value = '') {\n\treturn document.createTextNode(value);\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n */\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 * @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\tlet options = is ? { is } : undefined;\n\treturn /** @type {T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : Element} */ (\n\t\tdocument.createElementNS(namespace ?? NAMESPACE_HTML, tag, options)\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';\n\n/**\n * @param {HTMLElement} dom\n * @param {boolean} value\n * @returns {void}\n */\nexport function autofocus(dom, value) {\n\tif (value) {\n\t\tconst body = document.body;\n\t\tdom.autofocus = true;\n\n\t\tqueue_micro_task(() => {\n\t\t\tif (document.activeElement === body) {\n\t\t\t\tdom.focus();\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * The child of a textarea actually corresponds to the defaultValue property, so we need\n * to remove it upon hydration to avoid a bug when someone resets the form value.\n * @param {HTMLTextAreaElement} dom\n * @returns {void}\n */\nexport function remove_textarea_child(dom) {\n\tif (hydrating && get_first_child(dom) !== null) {\n\t\tclear_text_content(dom);\n\t}\n}\n\nlet listening_to_form_reset = false;\n\nexport function add_form_reset_listener() {\n\tif (!listening_to_form_reset) {\n\t\tlistening_to_form_reset = true;\n\t\tdocument.addEventListener(\n\t\t\t'reset',\n\t\t\t(evt) => {\n\t\t\t\t// Needs to happen one tick later or else the dom properties of the form\n\t\t\t\t// elements have not updated to their reset values yet\n\t\t\t\tPromise.resolve().then(() => {\n\t\t\t\t\tif (!evt.defaultPrevented) {\n\t\t\t\t\t\tfor (const e of /**@type {HTMLFormElement} */ (evt.target).elements) {\n\t\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\t\te.__on_r?.();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\t// In the capture phase to guarantee we get noticed of it (no 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 { add_form_reset_listener } from '../misc.js';\n\n/**\n * Fires the handler once immediately (unless corresponding arg is set to `false`),\n * then listens to the given events until the render effect context is destroyed\n * @param {EventTarget} target\n * @param {Array<string>} events\n * @param {(event?: Event) => void} handler\n * @param {any} call_handler_immediately\n */\nexport function listen(target, events, handler, call_handler_immediately = true) {\n\tif (call_handler_immediately) {\n\t\thandler();\n\t}\n\n\tfor (var name of events) {\n\t\ttarget.addEventListener(name, handler);\n\t}\n\n\tteardown(() => {\n\t\tfor (var name of events) {\n\t\t\ttarget.removeEventListener(name, handler);\n\t\t}\n\t});\n}\n\n/**\n * @template T\n * @param {() => T} fn\n */\nexport function without_reactive_context(fn) {\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\ttry {\n\t\treturn fn();\n\t} finally {\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_effect(previous_effect);\n\t}\n}\n\n/**\n * Listen to the given event, and then instantiate a global form reset listener if not already done,\n * to notify all bindings when the form is reset\n * @param {HTMLElement} element\n * @param {string} event\n * @param {(is_reset?: true) => void} handler\n * @param {(is_reset?: true) => void} [on_reset]\n */\nexport function listen_to_event_and_reset_event(element, event, handler, on_reset = handler) {\n\telement.addEventListener(event, () => without_reactive_context(handler));\n\t// @ts-expect-error\n\tconst prev = element.__on_r;\n\tif (prev) {\n\t\t// special case for checkbox that can have multiple binds (group & checked)\n\t\t// @ts-expect-error\n\t\telement.__on_r = () => {\n\t\t\tprev();\n\t\t\ton_reset(true);\n\t\t};\n\t} else {\n\t\t// @ts-expect-error\n\t\telement.__on_r = () => on_reset(true);\n\t}\n\n\tadd_form_reset_listener();\n}\n","/** @import { 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\tREACTION_RAN,\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 } from './batch.js';\nimport { flatten, increment_pending } 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\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 = !active_reaction && (flags & BRANCH_EFFECT) !== 0 && (flags & REACTION_RAN) === 0;\n\n\tif (defer) {\n\t\t// Top-level `$effect(...)` in an unmounted component — defer until mount\n\t\tvar context = /** @type {ComponentContext} */ (component_context);\n\t\t(context.e ??= []).push(fn);\n\t} else {\n\t\t// Everything else — create immediately\n\t\treturn create_user_effect(fn);\n\t}\n}\n\n/**\n * @param {() => void | (() => void)} fn\n */\nexport function create_user_effect(fn) {\n\treturn create_effect(EFFECT | USER_EFFECT, fn);\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, () => fn(...values.map(get)));\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\tif (async.length > 0 || blockers.length > 0) {\n\t\tvar decrement_pending = increment_pending();\n\t}\n\n\tflatten(blockers, sync, async, (values) => {\n\t\tcreate_effect(EFFECT, () => fn(...values.map(get)));\n\n\t\tif (decrement_pending) {\n\t\t\tdecrement_pending();\n\t\t}\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\tset_signal_status(effect, 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\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\t\tvar transparent =\n\t\t\t(child.f & EFFECT_TRANSPARENT) !== 0 ||\n\t\t\t// If this is a branch effect without a block effect parent,\n\t\t\t// it means the parent block effect was pruned. In that case,\n\t\t\t// transparency information was transferred to the branch effect.\n\t\t\t((child.f & BRANCH_EFFECT) !== 0 && (effect.f & BLOCK_EFFECT) !== 0);\n\t\t// TODO we don't need to call pause_children recursively with a linked list in place\n\t\t// it's slightly more involved though as we have to account for `transparent` changing\n\t\t// through the tree.\n\t\tpause_children(child, transitions, transparent ? local : false);\n\t\tchild = sibling;\n\t}\n}\n\n/**\n * The opposite of `pause_effect`. We call this if (for example)\n * `x` becomes falsy then truthy: `{#if x}...{/if}`\n * @param {Effect} effect\n */\nexport function resume_effect(effect) {\n\tresume_children(effect, true);\n}\n\n/**\n * @param {Effect} effect\n * @param {boolean} local\n */\nfunction resume_children(effect, local) {\n\tif ((effect.f & INERT) === 0) return;\n\teffect.f ^= INERT;\n\n\t// If a dependency of this effect changed while it was paused,\n\t// schedule the effect to update. we don't use `is_dirty`\n\t// here because we don't want to eagerly recompute a derived like\n\t// `{#if foo}{foo.bar()}{/if}` if `foo` is now `undefined\n\tif ((effect.f & CLEAN) === 0) {\n\t\tset_signal_status(effect, DIRTY);\n\t\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\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 | Source[]}\n */\nexport let current_sources = null;\n\n/** @param {Value} value */\nexport function push_reaction_value(value) {\n\tif (active_reaction !== null && (!async_mode_flag || (active_reaction.f & DERIVED) !== 0)) {\n\t\tif (current_sources === null) {\n\t\t\tcurrent_sources = [value];\n\t\t} else {\n\t\t\tcurrent_sources.push(value);\n\t\t}\n\t}\n}\n\n/**\n * The dependencies of the reaction that is currently being executed. In many cases,\n * the dependencies are unchanged between runs, and so this will be `null` unless\n * and until a new dependency is accessed — we track this via `skipped_deps`\n * @type {null | Value[]}\n */\nlet new_deps = null;\n\nlet skipped_deps = 0;\n\n/**\n * Tracks writes that the effect it's executed in doesn't listen to yet,\n * so that the dependency can be added to the effect later on if it then reads it\n * @type {null | Source[]}\n */\nexport let untracked_writes = null;\n\n/** @param {null | Source[]} value */\nexport function set_untracked_writes(value) {\n\tuntracked_writes = value;\n}\n\n/**\n * @type {number} Used by sources and deriveds for handling updates.\n * Version starts from 1 so that unowned deriveds differentiate between a created effect and a run one for tracing\n **/\nexport let write_version = 1;\n\n/** @type {number} Used to version each read of a source of derived to avoid duplicating depedencies inside a reaction */\nlet read_version = 0;\n\nexport let update_version = read_version;\n\n/** @param {number} value */\nexport function set_update_version(value) {\n\tupdate_version = value;\n}\n\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 && includes.call(current_sources, 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\tupdate_derived_status(derived);\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 || !includes.call(current_sources, 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\n\t\t\t\t// (i.e. after an `await`)\n\t\t\t\t(active_reaction.deps ??= []).push(signal);\n\n\t\t\t\tvar reactions = signal.reactions;\n\n\t\t\t\tif (reactions === null) {\n\t\t\t\t\tsignal.reactions = [active_reaction];\n\t\t\t\t} else if (!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!reactivity_loss_tracker.warned &&\n\t\t\t(reactivity_loss_tracker.effect.f & REACTION_IS_UPDATING) === 0\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","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\nconst 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","/** @type {Map<String, Set<HTMLStyleElement>>} */\nvar all_styles = new Map();\n\n/**\n * @param {String} hash\n * @param {HTMLStyleElement} style\n */\nexport function register_style(hash, style) {\n\tvar styles = all_styles.get(hash);\n\n\tif (!styles) {\n\t\tstyles = new Set();\n\t\tall_styles.set(hash, styles);\n\t}\n\n\tstyles.add(style);\n}\n\n/**\n * @param {String} hash\n */\nexport function cleanup_styles(hash) {\n\tvar styles = all_styles.get(hash);\n\tif (!styles) return;\n\n\tfor (const style of styles) {\n\t\tstyle.remove();\n\t}\n\n\tall_styles.delete(hash);\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 of the DOM can cause sync `blur` events to fire, which can cause logic\n\t// to run inside the current `active_reaction`, which isn't what we want at all. However, on reflection,\n\t// it's probably best that all event handled by Svelte have this behaviour, as we don't really want\n\t// an event handler to run in the context of another reaction or effect.\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\n\ttry {\n\t\t/**\n\t\t * @type {unknown}\n\t\t */\n\t\tvar throw_error;\n\t\t/**\n\t\t * @type {unknown[]}\n\t\t */\n\t\tvar other_errors = [];\n\n\t\twhile (current_target !== null) {\n\t\t\t/** @type {null | Element} */\n\t\t\tvar parent_element =\n\t\t\t\tcurrent_target.assignedSlot ||\n\t\t\t\tcurrent_target.parentNode ||\n\t\t\t\t/** @type {any} */ (current_target).host ||\n\t\t\t\tnull;\n\n\t\t\ttry {\n\t\t\t\t// @ts-expect-error\n\t\t\t\tvar delegated = current_target[event_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 || parent_element === handler_element || parent_element === null) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcurrent_target = parent_element;\n\t\t}\n\n\t\tif (throw_error) {\n\t\t\tfor (let error of other_errors) {\n\t\t\t\t// Throw the rest of the errors, one-by-one on a microtask\n\t\t\t\tqueueMicrotask(() => {\n\t\t\t\t\tthrow error;\n\t\t\t\t});\n\t\t\t}\n\t\t\tthrow throw_error;\n\t\t}\n\t} finally {\n\t\t// @ts-expect-error is used above\n\t\tevent[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 } 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// @ts-expect-error\n\tif (str !== (text.__t ??= text.nodeValue)) {\n\t\t// @ts-expect-error\n\t\ttext.__t = str;\n\t\ttext.nodeValue = `${str}`;\n\t}\n}\n\n/**\n * Mounts a component to the given target and returns the exports and potentially the props (if compiled with `accessors: true`) of the component.\n * Transitions will play during the initial render unless the `intro` option is set to `false`.\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<Props>> | Component<Props, Exports, any>} component\n * @param {MountOptions<Props>} options\n * @returns {Exports}\n */\nexport function mount(component, options) {\n\treturn _mount(component, options);\n}\n\n/**\n * Hydrates a component on the given target and returns the exports and potentially the props (if compiled with `accessors: true`) of the component\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<Props>> | Component<Props, Exports, any>} component\n * @param {{} extends Props ? {\n * \t\ttarget: Document | Element | ShadowRoot;\n * \t\tprops?: Props;\n * \t\tevents?: Record<string, (e: any) => any>;\n *  \tcontext?: Map<any, any>;\n * \t\tintro?: boolean;\n * \t\trecover?: boolean;\n *\t\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 { 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 { hydrate_node, hydrating } from '../hydration.js';\nimport { create_text, should_defer_append } from '../operations.js';\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\tthis.#onscreen.set(key, offscreen.effect);\n\t\t\t\tthis.#offscreen.delete(key);\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} 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';\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\tvar branches = new BranchManager(node);\n\n\tblock(() => {\n\t\tvar batch = /** @type {Batch} */ (current_batch);\n\n\t\t// we null out `current_batch` because otherwise `save(...)` will incorrectly restore it —\n\t\t// the batch will already have been committed by the time it resolves\n\t\tbatch.deactivate();\n\t\tvar input = get_input();\n\t\tbatch.activate();\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// 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\tif (hydrating) {\n\t\t\t\t\t// `restore()` could set `hydrating` to `true`, which we very much\n\t\t\t\t\t// don't want — we want to restore everything _except_ this\n\t\t\t\t\tset_hydrating(false);\n\t\t\t\t}\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';\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 is_array(collection) ? collection : collection == null ? [] : array_from(collection);\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 { 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(this.element, options, undefined, 1, () => {\n\t\t\t\t\tanimation?.abort();\n\t\t\t\t\tanimation = undefined;\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(element, get_options(), outro, 1, () => {\n\t\t\t\tdispatch_event(element, 'introend');\n\n\t\t\t\t// Ensure we cancel the animation to prevent leaking\n\t\t\t\tintro?.abort();\n\t\t\t\tintro = current_options = undefined;\n\n\t\t\t\telement.style.overflow = overflow;\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(element, get_options(), intro, 0, () => {\n\t\t\t\tdispatch_event(element, 'outroend');\n\t\t\t\tfn?.();\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_finish Called after successfully completing the animation\n * @returns {Animation}\n */\nfunction animate(element, options, counterpart, t2, 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_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\tdispatch_event(element, is_intro ? 'introstart' : 'outrostart');\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\tdispatch_event(element, is_intro ? 'introstart' : 'outrostart');\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\tif (hydrating && is_raw_text_element(next_tag)) {\n\t\t\t\t\t\t// prevent hydration glitches\n\t\t\t\t\t\telement.append(document.createComment(''));\n\t\t\t\t\t}\n\n\t\t\t\t\t// If hydrating, use the existing ssr comment as the anchor so that the\n\t\t\t\t\t// inner open and close methods can pick up the existing nodes correctly\n\t\t\t\t\tvar child_anchor = 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\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 } from '../../reactivity/effects.js';\nimport { COMMENT_NODE, EFFECT_PRESERVED, 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\t// normally a branch is the child of a block and would have the EFFECT_PRESERVED flag,\n\t\t// but since head blocks don't necessarily only have direct branch children we add it on the block itself\n\t\tblock(() => render_fn(anchor), HEAD_EFFECT | EFFECT_PRESERVED);\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 { hydrating } from '../hydration.js';\n\n/**\n * @param {Element} dom\n * @param {boolean | number} is_html\n * @param {string | null} value\n * @param {string} [hash]\n * @param {Record<string, any>} [prev_classes]\n * @param {Record<string, any>} [next_classes]\n * @returns {Record<string, boolean> | undefined}\n */\nexport function set_class(dom, is_html, value, hash, prev_classes, next_classes) {\n\t// @ts-expect-error need to add __className to patched prototype\n\tvar prev = dom.__className;\n\n\tif (\n\t\thydrating ||\n\t\tprev !== value ||\n\t\tprev === undefined // for edge case of `class={undefined}`\n\t) {\n\t\tvar next_class_name = to_class(value, hash, next_classes);\n\n\t\tif (!hydrating || next_class_name !== dom.getAttribute('class')) {\n\t\t\t// Removing the attribute when the value is only an empty string causes\n\t\t\t// performance issues vs simply making the className an empty string. So\n\t\t\t// we should only remove the class if the value is nullish\n\t\t\t// and there no hash/directives :\n\t\t\tif (next_class_name == null) {\n\t\t\t\tdom.removeAttribute('class');\n\t\t\t} else if (is_html) {\n\t\t\t\tdom.className = next_class_name;\n\t\t\t} else {\n\t\t\t\tdom.setAttribute('class', next_class_name);\n\t\t\t}\n\t\t}\n\n\t\t// @ts-expect-error need to add __className to patched prototype\n\t\tdom.__className = value;\n\t} else if (next_classes && prev_classes !== next_classes) {\n\t\tfor (var key in next_classes) {\n\t\t\tvar is_present = !!next_classes[key];\n\n\t\t\tif (prev_classes == null || is_present !== !!prev_classes[key]) {\n\t\t\t\tdom.classList.toggle(key, is_present);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn next_classes;\n}\n","import { to_style } from '../../../shared/attributes.js';\nimport { hydrating } from '../hydration.js';\n\n/**\n * @param {Element & ElementCSSInlineStyle} dom\n * @param {Record<string, any>} prev\n * @param {Record<string, any>} next\n * @param {string} [priority]\n */\nfunction update_styles(dom, prev = {}, next, priority) {\n\tfor (var key in next) {\n\t\tvar value = next[key];\n\n\t\tif (prev[key] !== value) {\n\t\t\tif (next[key] == null) {\n\t\t\t\tdom.style.removeProperty(key);\n\t\t\t} else {\n\t\t\t\tdom.style.setProperty(key, value, priority);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * @param {Element & ElementCSSInlineStyle} dom\n * @param {string | null} value\n * @param {Record<string, any> | [Record<string, any>, Record<string, any>]} [prev_styles]\n * @param {Record<string, any> | [Record<string, any>, Record<string, any>]} [next_styles]\n */\nexport function set_style(dom, value, prev_styles, next_styles) {\n\t// @ts-expect-error\n\tvar prev = dom.__style;\n\n\tif (hydrating || prev !== value) {\n\t\tvar next_style_attr = to_style(value, next_styles);\n\n\t\tif (!hydrating || next_style_attr !== dom.getAttribute('style')) {\n\t\t\tif (next_style_attr == null) {\n\t\t\t\tdom.removeAttribute('style');\n\t\t\t} else {\n\t\t\t\tdom.style.cssText = next_style_attr;\n\t\t\t}\n\t\t}\n\n\t\t// @ts-expect-error\n\t\tdom.__style = value;\n\t} else if (next_styles) {\n\t\tif (Array.isArray(next_styles)) {\n\t\t\tupdate_styles(dom, prev_styles?.[0], next_styles[0]);\n\t\t\tupdate_styles(dom, prev_styles?.[1], next_styles[1], 'important');\n\t\t} else {\n\t\t\tupdate_styles(dom, prev_styles, next_styles);\n\t\t}\n\t}\n\n\treturn next_styles;\n}\n","import { effect, teardown } from '../../../reactivity/effects.js';\nimport { listen_to_event_and_reset_event } from './shared.js';\nimport { is } from '../../../proxy.js';\nimport { is_array } from '../../../../shared/utils.js';\nimport * as w from '../../../warnings.js';\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 { IS_XHTML, LOADING_ATTR_SYMBOL } 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// @ts-expect-error\n\tinput.__on_r = 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\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// @ts-expect-error\n\t\telement.__attributes ??= {\n\t\t\t[IS_CUSTOM_ELEMENT]: element.nodeName.includes('-'),\n\t\t\t[IS_HTML]: element.namespaceURI === NAMESPACE_HTML\n\t\t}\n\t);\n}\n\n/** @type {Map<string, string[]>} */\nvar setters_cache = new Map();\n\n/** @param {Element} element */\nfunction get_setters(element) {\n\tvar 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 setters we're not interested in\n\t// Do not use contructor.name here as that's unreliable in some browser environments\n\twhile (element_proto !== proto) {\n\t\tdescriptors = get_descriptors(proto);\n\n\t\tfor (var key in descriptors) {\n\t\t\tif (descriptors[key].set) {\n\t\t\t\tsetters.push(key);\n\t\t\t}\n\t\t}\n\n\t\tproto = get_prototype_of(proto);\n\t}\n\n\treturn setters;\n}\n\n/**\n * @param {any} element\n * @param {string} attribute\n * @param {string} value\n */\nfunction check_src_in_dev_hydration(element, attribute, value) {\n\tif (!DEV) return;\n\tif (attribute === 'srcset' && srcset_url_equal(element, value)) return;\n\tif (src_url_equal(element.getAttribute(attribute) ?? '', value)) return;\n\n\tw.hydration_attribute_changed(\n\t\tattribute,\n\t\telement.outerHTML.replace(element.innerHTML, element.innerHTML && '...'),\n\t\tString(value)\n\t);\n}\n\n/**\n * @param {string} element_src\n * @param {string} url\n * @returns {boolean}\n */\nfunction src_url_equal(element_src, url) {\n\tif (element_src === url) return true;\n\treturn new URL(element_src, document.baseURI).href === new URL(url, document.baseURI).href;\n}\n\n/** @param {string} srcset */\nfunction split_srcset(srcset) {\n\treturn srcset.split(',').map((src) => src.trim().split(' ').filter(Boolean));\n}\n\n/**\n * @param {HTMLSourceElement | HTMLImageElement} element\n * @param {string} srcset\n * @returns {boolean}\n */\nfunction srcset_url_equal(element, srcset) {\n\tvar element_urls = split_srcset(element.srcset);\n\tvar urls = split_srcset(srcset);\n\n\treturn (\n\t\turls.length === element_urls.length &&\n\t\turls.every(\n\t\t\t([url, width], i) =>\n\t\t\t\twidth === element_urls[i][1] &&\n\t\t\t\t// We need to test both ways because Vite will create an a full URL with\n\t\t\t\t// `new URL(asset, import.meta.url).href` for the client when `base: './'`, and the\n\t\t\t\t// relative URLs inside srcset are not automatically resolved to absolute URLs by\n\t\t\t\t// browsers (in contrast to img.src). This means both SSR and DOM code could\n\t\t\t\t// contain relative or absolute URLs.\n\t\t\t\t(src_url_equal(element_urls[i][0], url) || src_url_equal(url, element_urls[i][0]))\n\t\t)\n\t);\n}\n","/** @import { Batch } from '../../../reactivity/batch.js' */\nimport { DEV } from 'esm-env';\nimport { render_effect, teardown } from '../../../reactivity/effects.js';\nimport { listen_to_event_and_reset_event } from './shared.js';\nimport * as e from '../../../errors.js';\nimport { is } from '../../../proxy.js';\nimport { queue_micro_task } from '../../task.js';\nimport { hydrating } from '../../hydration.js';\nimport { tick, untrack } from '../../../runtime.js';\nimport { is_runes } from '../../../context.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 { 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 (element_or_component !== get_value(...parts)) {\n\t\t\t\t\tupdate(element_or_component, ...parts);\n\t\t\t\t\t// If this is an effect rerun (cause: each block context changes), then 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 { 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: Array<string | symbol>, name?: string }>}}\n */\nconst rest_props_handler = {\n\tget(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\treturn target.props[key];\n\t},\n\tset(target, key) {\n\t\tif (DEV) {\n\t\t\t// TODO should this happen in prod too?\n\t\t\te.props_rest_readonly(`${target.name}.${String(key)}`);\n\t\t}\n\n\t\treturn false;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\tif (key in target.props) {\n\t\t\treturn {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: target.props[key]\n\t\t\t};\n\t\t}\n\t},\n\thas(target, key) {\n\t\tif (target.exclude.includes(key)) return false;\n\t\treturn key in target.props;\n\t},\n\townKeys(target) {\n\t\treturn Reflect.ownKeys(target.props).filter((key) => !target.exclude.includes(key));\n\t}\n};\n\n/**\n * @param {Record<string, unknown>} props\n * @param {string[]} exclude\n * @param {string} [name]\n * @returns {Record<string, unknown>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function rest_props(props, exclude, name) {\n\treturn new Proxy(\n\t\tDEV ? { props, exclude, name, other: {}, to_proxy: [] } : { props, exclude },\n\t\trest_props_handler\n\t);\n}\n\n/**\n * The proxy handler for legacy $$restProps and $$props\n * @type {ProxyHandler<{ props: Record<string | symbol, unknown>, exclude: Array<string | symbol>, special: Record<string | symbol, (v?: unknown) => unknown>, version: Source<number>, parent_effect: Effect }>}}\n */\nconst legacy_rest_props_handler = {\n\tget(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\tget(target.version);\n\t\treturn key in target.special ? target.special[key]() : target.props[key];\n\t},\n\tset(target, key, value) {\n\t\tif (!(key in target.special)) {\n\t\t\tvar previous_effect = active_effect;\n\n\t\t\ttry {\n\t\t\t\tset_active_effect(target.parent_effect);\n\n\t\t\t\t// Handle props that can temporarily get out of sync with the parent\n\t\t\t\t/** @type {Record<string, (v?: unknown) => unknown>} */\n\t\t\t\ttarget.special[key] = prop(\n\t\t\t\t\t{\n\t\t\t\t\t\tget [key]() {\n\t\t\t\t\t\t\treturn target.props[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t/** @type {string} */ (key),\n\t\t\t\t\tPROPS_IS_UPDATED\n\t\t\t\t);\n\t\t\t} finally {\n\t\t\t\tset_active_effect(previous_effect);\n\t\t\t}\n\t\t}\n\n\t\ttarget.special[key](value);\n\t\tupdate(target.version); // $$props is coarse-grained: when $$props.x is updated, usages of $$props.y etc are also rerun\n\t\treturn true;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tif (target.exclude.includes(key)) return;\n\t\tif (key in target.props) {\n\t\t\treturn {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\tvalue: target.props[key]\n\t\t\t};\n\t\t}\n\t},\n\tdeleteProperty(target, key) {\n\t\t// Svelte 4 allowed for deletions on $$restProps\n\t\tif (target.exclude.includes(key)) return true;\n\t\ttarget.exclude.push(key);\n\t\tupdate(target.version);\n\t\treturn true;\n\t},\n\thas(target, key) {\n\t\tif (target.exclude.includes(key)) return false;\n\t\treturn key in target.props;\n\t},\n\townKeys(target) {\n\t\treturn Reflect.ownKeys(target.props).filter((key) => !target.exclude.includes(key));\n\t}\n};\n\n/**\n * @param {Record<string, unknown>} props\n * @param {string[]} exclude\n * @returns {Record<string, unknown>}\n */\nexport function legacy_rest_props(props, exclude) {\n\treturn new Proxy(\n\t\t{\n\t\t\tprops,\n\t\t\texclude,\n\t\t\tspecial: {},\n\t\t\tversion: source(0),\n\t\t\t// TODO this is only necessary because we need to track component\n\t\t\t// destruction inside `prop`, because of `bind:this`, but it\n\t\t\t// seems likely that we can simplify `bind:this` instead\n\t\t\tparent_effect: /** @type {Effect} */ (active_effect)\n\t\t},\n\t\tlegacy_rest_props_handler\n\t);\n}\n\n/**\n * The proxy handler for spread props. Handles the incoming array of props\n * that looks like `() => { dynamic: props }, { static: prop }, ..` and wraps\n * them so that the whole thing is passed to the component as the `$$props` argument.\n * @type {ProxyHandler<{ props: Array<Record<string | symbol, unknown> | (() => Record<string | symbol, unknown>)> }>}}\n */\nconst spread_props_handler = {\n\tget(target, key) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (typeof p === 'object' && p !== null && key in p) return p[key];\n\t\t}\n\t},\n\tset(target, key, value) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tconst desc = get_descriptor(p, key);\n\t\t\tif (desc && desc.set) {\n\t\t\t\tdesc.set(value);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\tgetOwnPropertyDescriptor(target, key) {\n\t\tlet i = target.props.length;\n\t\twhile (i--) {\n\t\t\tlet p = target.props[i];\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (typeof p === 'object' && p !== null && key in p) {\n\t\t\t\tconst descriptor = get_descriptor(p, key);\n\t\t\t\tif (descriptor && !descriptor.configurable) {\n\t\t\t\t\t// Prevent a \"Non-configurability Report Error\": The target is an array, it does\n\t\t\t\t\t// not actually contain this property. If it is now described as non-configurable,\n\t\t\t\t\t// the proxy throws a validation error. Setting it to true avoids that.\n\t\t\t\t\tdescriptor.configurable = true;\n\t\t\t\t}\n\t\t\t\treturn descriptor;\n\t\t\t}\n\t\t}\n\t},\n\thas(target, key) {\n\t\t// To prevent a false positive `is_entry_props` in the `prop` function\n\t\tif (key === STATE_SYMBOL || key === LEGACY_PROPS) return false;\n\n\t\tfor (let p of target.props) {\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (p != null && key in p) return true;\n\t\t}\n\n\t\treturn false;\n\t},\n\townKeys(target) {\n\t\t/** @type {Array<string | symbol>} */\n\t\tconst keys = [];\n\n\t\tfor (let p of target.props) {\n\t\t\tif (is_function(p)) p = p();\n\t\t\tif (!p) continue;\n\n\t\t\tfor (const key in p) {\n\t\t\t\tif (!keys.includes(key)) keys.push(key);\n\t\t\t}\n\n\t\t\tfor (const key of Object.getOwnPropertySymbols(p)) {\n\t\t\t\tif (!keys.includes(key)) keys.push(key);\n\t\t\t}\n\t\t}\n\n\t\treturn keys;\n\t}\n};\n\n/**\n * @param {Array<Record<string, unknown> | (() => Record<string, unknown>)>} props\n * @returns {any}\n */\nexport function spread_props(...props) {\n\treturn new Proxy({ props }, spread_props_handler);\n}\n\n/**\n * This function is responsible for synchronizing a possibly bound prop with the inner component state.\n * It is used whenever the compiler sees that the component writes to the prop, or when it has a default prop_value.\n * @template V\n * @param {Record<string, unknown>} props\n * @param {string} key\n * @param {number} flags\n * @param {V | (() => V)} [fallback]\n * @returns {(() => V | ((arg: V) => V) | ((arg: V, mutation: boolean) => V))}\n */\nexport function prop(props, key, flags, fallback) {\n\tvar runes = !legacy_mode_flag || (flags & PROPS_IS_RUNES) !== 0;\n\tvar bindable = (flags & PROPS_IS_BINDABLE) !== 0;\n\tvar lazy = (flags & PROPS_IS_LAZY_INITIAL) !== 0;\n\n\tvar fallback_value = /** @type {V} */ (fallback);\n\tvar fallback_dirty = true;\n\n\tvar get_fallback = () => {\n\t\tif (fallback_dirty) {\n\t\t\tfallback_dirty = false;\n\n\t\t\tfallback_value = lazy\n\t\t\t\t? untrack(/** @type {() => V} */ (fallback))\n\t\t\t\t: /** @type {V} */ (fallback);\n\t\t}\n\n\t\treturn fallback_value;\n\t};\n\n\t/** @type {((v: V) => void) | undefined} */\n\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 { 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 this$1$1 = this;\n\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        useKeys ? entry[0] : reverse ? this$1$1.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 (typeof key === 'string' && 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 = 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    return (\n      index >= 0 &&\n      (this.size !== undefined\n        ? this.size === Infinity || index < this.size\n        : this.indexOf(index) !== -1)\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 (is(this._value, searchValue)) {\n      return 0;\n    }\n    return -1;\n  };\n\n  Repeat.prototype.lastIndexOf = function lastIndexOf (searchValue) {\n    if (is(this._value, searchValue)) {\n      return this.size;\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.5\";\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 = /** @type {string} */ globalThis.crypto.randomUUID();\n\n  // Last 12 characters\n  if (length === 'short') {\n    return /** @type {string} */ (uuid.split('-').pop());\n  }\n\n  // First 8 characters\n  if (length === 'shorter') {\n    return /** @type {string} */ (uuid.split('-').shift());\n  }\n\n  // First X characters but without hyphens\n  if (typeof length === 'number') {\n    return uuid.split('-').join('').slice(0, length);\n  }\n\n  return uuid;\n};\n\n/**\n * Generate a random ID.\n * @returns {string} Generated 26-character string.\n */\nconst generateRandomId = () => {\n  const hex = generateUUID().replaceAll('-', '');\n  const { buffer } = new Uint8Array((hex.match(/../g) ?? []).map((h) => parseInt(h, 16)));\n\n  return base32Encode(buffer, 'RFC4648', { padding: false }).toLowerCase();\n};\n\n/**\n * Get the SHA hash of the given file or text.\n * @param {File | Blob | string} input - File or text.\n * @param {object} [options] - Options.\n * @param {'SHA-1' | 'SHA-256' | 'SHA-512'} [options.algorithm] - Digest algorithm. Default: SHA-1.\n * @param {'hex' | 'binary'} [options.format] - Hash format. Default: hex.\n * @returns {Promise<string>} Hash.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest\n */\nconst getHash = async (input, { algorithm = 'SHA-1', format = 'hex' } = {}) => {\n  let data;\n\n  if (typeof input === 'string') {\n    const uint8Array = new TextEncoder().encode(input);\n\n    data = uint8Array.buffer.slice(\n      uint8Array.byteOffset,\n      uint8Array.byteOffset + uint8Array.byteLength,\n    );\n  } else if (input && typeof input.arrayBuffer === 'function') {\n    // Use arrayBuffer method if available (modern browsers)\n    data = await input.arrayBuffer();\n  } else if (input && typeof input.size === 'number' && typeof input.type === 'string') {\n    // This is likely a Blob or File object without arrayBuffer method (jsdom)\n    data = await new Promise((resolve, reject) => {\n      const reader = new FileReader();\n\n      /**\n       * Handle successful file read.\n       */\n      reader.onload = function onLoad() {\n        resolve(reader.result);\n      };\n\n      /**\n       * Handle file read error.\n       */\n      reader.onerror = function onError() {\n        reject(new Error('Failed to read blob as ArrayBuffer'));\n      };\n\n      reader.readAsArrayBuffer(input);\n    });\n  } else if (input && input.constructor && input.constructor.name === 'ArrayBuffer') {\n    // Handle ArrayBuffer directly\n    data = input;\n  } else if (\n    input &&\n    // @ts-expect-error - TypedArray properties\n    input.buffer &&\n    // @ts-expect-error - TypedArray properties\n    typeof input.byteLength === 'number'\n  ) {\n    // Handle TypedArray - convert to ArrayBuffer\n    // @ts-expect-error - TypedArray properties\n    data = input.buffer.slice(input.byteOffset, input.byteOffset + input.byteLength);\n  } else {\n    throw new Error('Unsupported input type for getHash');\n  }\n\n  // Workaround for jsdom: Use Uint8Array instead of ArrayBuffer\n  // jsdom's crypto.subtle.digest has issues with ArrayBuffer instanceof checks\n  // but works correctly with Uint8Array (which is also a valid input type)\n  const finalData = new Uint8Array(data);\n  const digest = await globalThis.crypto.subtle.digest(algorithm, finalData);\n\n  if (format === 'binary') {\n    return Array.from(new Uint8Array(digest), (b) => String.fromCharCode(b)).join('');\n  }\n\n  return Array.from(new Uint8Array(digest), (b) => b.toString(16).padStart(2, '0')).join('');\n};\n\nexport { generateRandomId, generateUUID, getHash, uuidPattern };\n","/**\n * Escape the given string so it can be used safely for `new RegExp()`.\n * @param {string} string - Original string.\n * @returns {string} Escaped string.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping\n */\nconst escapeRegExp = (string) => string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n/**\n * Truncate the given string.\n * @param {string} string - Original string.\n * @param {number} max - Maximum number of characters.\n * @param {object} [options] - Options.\n * @param {string} [options.ellipsis] - Character(s) to be appended if the the truncated string is\n * longer than `max`.\n * @returns {string} Truncated string.\n */\nconst truncate = (string, max, { ellipsis = '…' } = {}) => {\n  // Don’t use `split()` because it breaks Unicode characters like emoji\n  const chars = [...string];\n  const truncated = chars.slice(0, max).join('').trim();\n\n  return `${truncated}${chars.length > max ? ellipsis : ''}`;\n};\n\n/**\n * Strip the leading and trailing slashes from the given string.\n * @param {string} string - Original string, e.g. `/foo/bar/`.\n * @returns {string} Trimmed string, e.g. `foo/bar`.\n */\nconst stripSlashes = (string) => string.replace(/^\\/+/, '').replace(/\\/+$/, '');\n\n/**\n * Remove all HTML tags from the given string so it’s safe to use in the app.\n * @param {string} string - Original string that may include tags, e.g. `<div>Hello</div>`.\n * @returns {string} Sanitized string, e.g. `Hello`.\n */\nconst stripTags = (string) =>\n  new DOMParser().parseFromString(string, 'text/html').body.textContent ?? '';\n\n/**\n * Check if the given string is a URL.\n * @param {string} string - String that might be a URL.\n * @returns {boolean} Result.\n */\nconst isURL = (string) => {\n  // @ts-ignore\n  if (typeof URL.canParse === 'function') {\n    // @ts-ignore\n    return URL.canParse(string);\n  }\n\n  try {\n    // eslint-disable-next-line no-new\n    new URL(string);\n    return true;\n  } catch {\n    return false;\n  }\n};\n\n/**\n * Compare strings for natural sorting.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare\n */\n// eslint-disable-next-line prefer-destructuring\nconst compare = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' }).compare;\n\nexport { compare, escapeRegExp, isURL, stripSlashes, stripTags, truncate };\n","import { uuidPattern } from './crypto.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    if (specifier.startsWith('.')) {\n      return file.name.endsWith(specifier);\n    }\n\n    const [type, subtype] = specifier.split('/');\n\n    if (subtype === '*') {\n      return file.type.split('/')[0] === type;\n    }\n\n    return file.type === specifier;\n  });\n};\n\n/**\n * Scan local files in nested folders and return them in a flat array, sorted by name.\n * @param {DataTransfer} dataTransfer - From `drop` event.\n * @param {object} [options] - Options.\n * @param {string} [options.accept] - Accepted file types, which is the same as the `accept`\n * property for HTML `<input type=\"file\">`.\n * @returns {Promise<File[]>} Files.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem/webkitGetAsEntry\n */\nconst scanFiles = async ({ items }, { accept } = {}) => {\n  const specifiers = accept ? accept.trim().split(/,\\s*/) : [];\n\n  /**\n   * Read files recursively from the filesystem.\n   * @param {FileSystemEntry} entry - Either a file or\n   * directory entry.\n   * @returns {Promise<File | File[] | null>} File.\n   */\n  const readEntry = (entry) =>\n    new Promise((resolve) => {\n      // Skip hidden files\n      if (entry.name.startsWith('.')) {\n        resolve(null);\n      } else if (entry.isFile) {\n        /** @type {FileSystemFileEntry} */ (entry).file(\n          (file) => {\n            resolve(isValidFileType(file, specifiers) ? file : null);\n          },\n          // Skip inaccessible files\n          () => {\n            resolve(null);\n          },\n        );\n      } else {\n        /** @type {FileSystemDirectoryEntry} */ (entry).createReader().readEntries((entries) => {\n          resolve(/** @type {Promise<File[]>} */ (Promise.all(entries.map(readEntry))));\n        });\n      }\n    });\n\n  return /** @type {File[]} */ (\n    (\n      await Promise.all(\n        [...items].map((item) => {\n          const entry = item.webkitGetAsEntry();\n\n          return entry ? readEntry(entry) : null;\n        }),\n      )\n    )\n      .flat(100000)\n      .filter(Boolean)\n  ).sort((a, b) => a.name.localeCompare(b.name));\n};\n\n/**\n * Read the given file as plaintext. On Windows, the result may include CRLF line breaks. Convert\n * any CRLF to LF to parse entries properly.\n * @param {File | Blob} file - File.\n * @returns {Promise<string>} Content.\n */\nconst readAsText = async (file) => (await file.text()).replace(/\\r\\n/g, '\\n');\n\n/**\n * Get the data URL of the given input.\n * @param {File | Blob | string} input - Input file or string.\n * @returns {Promise<string>} Data URL like `data:text/plain;base64,...`.\n */\nconst getDataURL = async (input) => {\n  const blob = typeof input === 'string' ? new Blob([input], { type: 'text/plain' }) : input;\n  const reader = new FileReader();\n\n  return new Promise((resolve) => {\n    /**\n     * Return the result once the content is read.\n     */\n    reader.onload = () => {\n      resolve(/** @type {string} */ (reader.result));\n    };\n\n    reader.readAsDataURL(blob);\n  });\n};\n\n/**\n * Encode the given input, either a file or a string, as a Base64-encoded string.\n * @param {File | Blob | string} input - Input file or string.\n * @returns {Promise<string>} Base64.\n */\nconst encodeBase64 = async (input) => (await getDataURL(input)).split(',')[1];\n\n/**\n * Decode a Base64-encoded string as a plaintext UTF-8 string. Uses `Promise` to be consistent with\n * {@link encodeBase64}.\n * @param {string} base64 - Base64-encoded string.\n * @returns {Promise<string>} Decoded string.\n * @see https://stackoverflow.com/q/21797299\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array/fromBase64\n */\nconst decodeBase64 = async (base64) => {\n  const buffer =\n    Uint8Array.fromBase64?.(base64) ?? Uint8Array.from(atob(base64), (c) => c.charCodeAt(0));\n\n  return new TextDecoder().decode(buffer);\n};\n\n/**\n * Save the given file locally.\n * @param {File | Blob} file - File to be saved.\n * @param {string} [name] - File name. Required if the `file` param is a `Blob`.\n */\nconst saveFile = (file, name) => {\n  const link = document.createElement('a');\n  const blobURL = URL.createObjectURL(file);\n\n  link.download =\n    name ?? /** @type {File} */ (file).name ?? `${Date.now()}.${file.type.split('/')[1]}`;\n  link.href = blobURL;\n  link.click();\n\n  URL.revokeObjectURL(blobURL);\n};\n\nexport {\n  decodeBase64,\n  decodeFilePath,\n  encodeBase64,\n  encodeFilePath,\n  getBlobRegex,\n  getDataURL,\n  getPathInfo,\n  isTextFileType,\n  isValidFileType,\n  readAsText,\n  saveFile,\n  scanFiles,\n};\n","'use strict';\n\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 { getPathInfo } from '@sveltia/utils/file';\nimport { derived, get, writable } from 'svelte/store';\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 = internalPath.replace(/{{.+?}}/g, '.+?');\n\n      items.push({\n        folder,\n        // `\\b` anchors the match at the end of the folder segment (sub-folder matching).\n        // When `internalPath` is empty (root), fall back to `$` to avoid a bare `\\b` anchor.\n        regexSub: new RegExp(`^${normalizedPath}${internalPath ? '\\\\b' : '$'}`),\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  return results.sort((a, b) => (b.internalPath ?? '').localeCompare(a.internalPath ?? ''));\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","/**\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","'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn Object.propertyIsEnumerable.call(target, symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n  return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n  ownKeys = Object.getOwnPropertyNames || function (o) {\n    var ar = [];\n    for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n    return ar;\n  };\n  return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose, inner;\n    if (async) {\n      if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n      dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n      if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n      dispose = value[Symbol.dispose];\n      if (async) inner = dispose;\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  var r, s = 0;\n  function next() {\n    while (r = env.stack.pop()) {\n      try {\n        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n        if (r.dispose) {\n          var result = r.dispose.call(r.value);\n          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n        }\n        else s |= 1;\n      }\n      catch (e) {\n        fail(e);\n      }\n    }\n    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n  if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n      return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n          return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n      });\n  }\n  return path;\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __esDecorate,\n  __runInitializers,\n  __propKey,\n  __setFunctionName,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n  __rewriteRelativeImportExtension,\n};\n","//\n// Main\n//\nexport function memoize(fn, options) {\n    var cache = options && options.cache ? options.cache : cacheDefault;\n    var serializer = options && options.serializer ? options.serializer : serializerDefault;\n    var strategy = options && options.strategy ? options.strategy : strategyDefault;\n    return strategy(fn, {\n        cache: cache,\n        serializer: serializer,\n    });\n}\n//\n// Strategy\n//\nfunction isPrimitive(value) {\n    return (value == null || typeof value === 'number' || typeof value === 'boolean'); // || typeof value === \"string\" 'unsafe' primitive for our needs\n}\nfunction monadic(fn, cache, serializer, arg) {\n    var cacheKey = isPrimitive(arg) ? arg : serializer(arg);\n    var computedValue = cache.get(cacheKey);\n    if (typeof computedValue === 'undefined') {\n        computedValue = fn.call(this, arg);\n        cache.set(cacheKey, computedValue);\n    }\n    return computedValue;\n}\nfunction variadic(fn, cache, serializer) {\n    var args = Array.prototype.slice.call(arguments, 3);\n    var cacheKey = serializer(args);\n    var computedValue = cache.get(cacheKey);\n    if (typeof computedValue === 'undefined') {\n        computedValue = fn.apply(this, args);\n        cache.set(cacheKey, computedValue);\n    }\n    return computedValue;\n}\nfunction assemble(fn, context, strategy, cache, serialize) {\n    return strategy.bind(context, fn, cache, serialize);\n}\nfunction strategyDefault(fn, options) {\n    var strategy = fn.length === 1 ? monadic : variadic;\n    return assemble(fn, this, strategy, options.cache.create(), options.serializer);\n}\nfunction strategyVariadic(fn, options) {\n    return assemble(fn, this, variadic, options.cache.create(), options.serializer);\n}\nfunction strategyMonadic(fn, options) {\n    return assemble(fn, this, monadic, options.cache.create(), options.serializer);\n}\n//\n// Serializer\n//\nvar serializerDefault = function () {\n    return JSON.stringify(arguments);\n};\n//\n// Cache\n//\nvar ObjectWithoutPrototypeCache = /** @class */ (function () {\n    function ObjectWithoutPrototypeCache() {\n        this.cache = Object.create(null);\n    }\n    ObjectWithoutPrototypeCache.prototype.get = function (key) {\n        return this.cache[key];\n    };\n    ObjectWithoutPrototypeCache.prototype.set = function (key, value) {\n        this.cache[key] = value;\n    };\n    return ObjectWithoutPrototypeCache;\n}());\nvar cacheDefault = {\n    create: function create() {\n        return new ObjectWithoutPrototypeCache();\n    },\n};\nexport var strategies = {\n    variadic: strategyVariadic,\n    monadic: strategyMonadic,\n};\n","export var ErrorKind;\n(function (ErrorKind) {\n    /** Argument is unclosed (e.g. `{0`) */\n    ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_CLOSING_BRACE\"] = 1] = \"EXPECT_ARGUMENT_CLOSING_BRACE\";\n    /** Argument is empty (e.g. `{}`). */\n    ErrorKind[ErrorKind[\"EMPTY_ARGUMENT\"] = 2] = \"EMPTY_ARGUMENT\";\n    /** Argument is malformed (e.g. `{foo!}``) */\n    ErrorKind[ErrorKind[\"MALFORMED_ARGUMENT\"] = 3] = \"MALFORMED_ARGUMENT\";\n    /** Expect an argument type (e.g. `{foo,}`) */\n    ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_TYPE\"] = 4] = \"EXPECT_ARGUMENT_TYPE\";\n    /** Unsupported argument type (e.g. `{foo,foo}`) */\n    ErrorKind[ErrorKind[\"INVALID_ARGUMENT_TYPE\"] = 5] = \"INVALID_ARGUMENT_TYPE\";\n    /** Expect an argument style (e.g. `{foo, number, }`) */\n    ErrorKind[ErrorKind[\"EXPECT_ARGUMENT_STYLE\"] = 6] = \"EXPECT_ARGUMENT_STYLE\";\n    /** The number skeleton is invalid. */\n    ErrorKind[ErrorKind[\"INVALID_NUMBER_SKELETON\"] = 7] = \"INVALID_NUMBER_SKELETON\";\n    /** The date time skeleton is invalid. */\n    ErrorKind[ErrorKind[\"INVALID_DATE_TIME_SKELETON\"] = 8] = \"INVALID_DATE_TIME_SKELETON\";\n    /** Exepct a number skeleton following the `::` (e.g. `{foo, number, ::}`) */\n    ErrorKind[ErrorKind[\"EXPECT_NUMBER_SKELETON\"] = 9] = \"EXPECT_NUMBER_SKELETON\";\n    /** Exepct a date time skeleton following the `::` (e.g. `{foo, date, ::}`) */\n    ErrorKind[ErrorKind[\"EXPECT_DATE_TIME_SKELETON\"] = 10] = \"EXPECT_DATE_TIME_SKELETON\";\n    /** Unmatched apostrophes in the argument style (e.g. `{foo, number, 'test`) */\n    ErrorKind[ErrorKind[\"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\"] = 11] = \"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\";\n    /** Missing select argument options (e.g. `{foo, select}`) */\n    ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_OPTIONS\"] = 12] = \"EXPECT_SELECT_ARGUMENT_OPTIONS\";\n    /** Expecting an offset value in `plural` or `selectordinal` argument (e.g `{foo, plural, offset}`) */\n    ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\"] = 13] = \"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\";\n    /** Offset value in `plural` or `selectordinal` is invalid (e.g. `{foo, plural, offset: x}`) */\n    ErrorKind[ErrorKind[\"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\"] = 14] = \"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\";\n    /** Expecting a selector in `select` argument (e.g `{foo, select}`) */\n    ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_SELECTOR\"] = 15] = \"EXPECT_SELECT_ARGUMENT_SELECTOR\";\n    /** Expecting a selector in `plural` or `selectordinal` argument (e.g `{foo, plural}`) */\n    ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_SELECTOR\"] = 16] = \"EXPECT_PLURAL_ARGUMENT_SELECTOR\";\n    /** Expecting a message fragment after the `select` selector (e.g. `{foo, select, apple}`) */\n    ErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\"] = 17] = \"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\";\n    /**\n     * Expecting a message fragment after the `plural` or `selectordinal` selector\n     * (e.g. `{foo, plural, one}`)\n     */\n    ErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\"] = 18] = \"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\";\n    /** Selector in `plural` or `selectordinal` is malformed (e.g. `{foo, plural, =x {#}}`) */\n    ErrorKind[ErrorKind[\"INVALID_PLURAL_ARGUMENT_SELECTOR\"] = 19] = \"INVALID_PLURAL_ARGUMENT_SELECTOR\";\n    /**\n     * Duplicate selectors in `plural` or `selectordinal` argument.\n     * (e.g. {foo, plural, one {#} one {#}})\n     */\n    ErrorKind[ErrorKind[\"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\"] = 20] = \"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\";\n    /** Duplicate selectors in `select` argument.\n     * (e.g. {foo, select, apple {apple} apple {apple}})\n     */\n    ErrorKind[ErrorKind[\"DUPLICATE_SELECT_ARGUMENT_SELECTOR\"] = 21] = \"DUPLICATE_SELECT_ARGUMENT_SELECTOR\";\n    /** Plural or select argument option must have `other` clause. */\n    ErrorKind[ErrorKind[\"MISSING_OTHER_CLAUSE\"] = 22] = \"MISSING_OTHER_CLAUSE\";\n    /** The tag is malformed. (e.g. `<bold!>foo</bold!>) */\n    ErrorKind[ErrorKind[\"INVALID_TAG\"] = 23] = \"INVALID_TAG\";\n    /** The tag name is invalid. (e.g. `<123>foo</123>`) */\n    ErrorKind[ErrorKind[\"INVALID_TAG_NAME\"] = 25] = \"INVALID_TAG_NAME\";\n    /** The closing tag does not match the opening tag. (e.g. `<bold>foo</italic>`) */\n    ErrorKind[ErrorKind[\"UNMATCHED_CLOSING_TAG\"] = 26] = \"UNMATCHED_CLOSING_TAG\";\n    /** The opening tag has unmatched closing tag. (e.g. `<bold>foo`) */\n    ErrorKind[ErrorKind[\"UNCLOSED_TAG\"] = 27] = \"UNCLOSED_TAG\";\n})(ErrorKind || (ErrorKind = {}));\n","export var TYPE;\n(function (TYPE) {\n    /**\n     * Raw text\n     */\n    TYPE[TYPE[\"literal\"] = 0] = \"literal\";\n    /**\n     * Variable w/o any format, e.g `var` in `this is a {var}`\n     */\n    TYPE[TYPE[\"argument\"] = 1] = \"argument\";\n    /**\n     * Variable w/ number format\n     */\n    TYPE[TYPE[\"number\"] = 2] = \"number\";\n    /**\n     * Variable w/ date format\n     */\n    TYPE[TYPE[\"date\"] = 3] = \"date\";\n    /**\n     * Variable w/ time format\n     */\n    TYPE[TYPE[\"time\"] = 4] = \"time\";\n    /**\n     * Variable w/ select format\n     */\n    TYPE[TYPE[\"select\"] = 5] = \"select\";\n    /**\n     * Variable w/ plural format\n     */\n    TYPE[TYPE[\"plural\"] = 6] = \"plural\";\n    /**\n     * Only possible within plural argument.\n     * This is the `#` symbol that will be substituted with the count.\n     */\n    TYPE[TYPE[\"pound\"] = 7] = \"pound\";\n    /**\n     * XML-like tag\n     */\n    TYPE[TYPE[\"tag\"] = 8] = \"tag\";\n})(TYPE || (TYPE = {}));\nexport var SKELETON_TYPE;\n(function (SKELETON_TYPE) {\n    SKELETON_TYPE[SKELETON_TYPE[\"number\"] = 0] = \"number\";\n    SKELETON_TYPE[SKELETON_TYPE[\"dateTime\"] = 1] = \"dateTime\";\n})(SKELETON_TYPE || (SKELETON_TYPE = {}));\n/**\n * Type Guards\n */\nexport function isLiteralElement(el) {\n    return el.type === TYPE.literal;\n}\nexport function isArgumentElement(el) {\n    return el.type === TYPE.argument;\n}\nexport function isNumberElement(el) {\n    return el.type === TYPE.number;\n}\nexport function isDateElement(el) {\n    return el.type === TYPE.date;\n}\nexport function isTimeElement(el) {\n    return el.type === TYPE.time;\n}\nexport function isSelectElement(el) {\n    return el.type === TYPE.select;\n}\nexport function isPluralElement(el) {\n    return el.type === TYPE.plural;\n}\nexport function isPoundElement(el) {\n    return el.type === TYPE.pound;\n}\nexport function isTagElement(el) {\n    return el.type === TYPE.tag;\n}\nexport function isNumberSkeleton(el) {\n    return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.number);\n}\nexport function isDateTimeSkeleton(el) {\n    return !!(el && typeof el === 'object' && el.type === SKELETON_TYPE.dateTime);\n}\nexport function createLiteralElement(value) {\n    return {\n        type: TYPE.literal,\n        value: value,\n    };\n}\nexport function createNumberElement(value, style) {\n    return {\n        type: TYPE.number,\n        value: value,\n        style: style,\n    };\n}\n","// @generated from regex-gen.ts\nexport var SPACE_SEPARATOR_REGEX = /[ \\xA0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/;\nexport var WHITE_SPACE_REGEX = /[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/;\n","/**\n * https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * Credit: https://github.com/caridy/intl-datetimeformat-pattern/blob/master/index.js\n * with some tweaks\n */\nvar DATE_TIME_REGEX = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;\n/**\n * Parse Date time skeleton into Intl.DateTimeFormatOptions\n * Ref: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * @public\n * @param skeleton skeleton string\n */\nexport function parseDateTimeSkeleton(skeleton) {\n    var result = {};\n    skeleton.replace(DATE_TIME_REGEX, function (match) {\n        var len = match.length;\n        switch (match[0]) {\n            // Era\n            case 'G':\n                result.era = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short';\n                break;\n            // Year\n            case 'y':\n                result.year = len === 2 ? '2-digit' : 'numeric';\n                break;\n            case 'Y':\n            case 'u':\n            case 'U':\n            case 'r':\n                throw new RangeError('`Y/u/U/r` (year) patterns are not supported, use `y` instead');\n            // Quarter\n            case 'q':\n            case 'Q':\n                throw new RangeError('`q/Q` (quarter) patterns are not supported');\n            // Month\n            case 'M':\n            case 'L':\n                result.month = ['numeric', '2-digit', 'short', 'long', 'narrow'][len - 1];\n                break;\n            // Week\n            case 'w':\n            case 'W':\n                throw new RangeError('`w/W` (week) patterns are not supported');\n            case 'd':\n                result.day = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'D':\n            case 'F':\n            case 'g':\n                throw new RangeError('`D/F/g` (day) patterns are not supported, use `d` instead');\n            // Weekday\n            case 'E':\n                result.weekday = len === 4 ? 'long' : len === 5 ? 'narrow' : 'short';\n                break;\n            case 'e':\n                if (len < 4) {\n                    throw new RangeError('`e..eee` (weekday) patterns are not supported');\n                }\n                result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n                break;\n            case 'c':\n                if (len < 4) {\n                    throw new RangeError('`c..ccc` (weekday) patterns are not supported');\n                }\n                result.weekday = ['short', 'long', 'narrow', 'short'][len - 4];\n                break;\n            // Period\n            case 'a': // AM, PM\n                result.hour12 = true;\n                break;\n            case 'b': // am, pm, noon, midnight\n            case 'B': // flexible day periods\n                throw new RangeError('`b/B` (period) patterns are not supported, use `a` instead');\n            // Hour\n            case 'h':\n                result.hourCycle = 'h12';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'H':\n                result.hourCycle = 'h23';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'K':\n                result.hourCycle = 'h11';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'k':\n                result.hourCycle = 'h24';\n                result.hour = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'j':\n            case 'J':\n            case 'C':\n                throw new RangeError('`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead');\n            // Minute\n            case 'm':\n                result.minute = ['numeric', '2-digit'][len - 1];\n                break;\n            // Second\n            case 's':\n                result.second = ['numeric', '2-digit'][len - 1];\n                break;\n            case 'S':\n            case 'A':\n                throw new RangeError('`S/A` (second) patterns are not supported, use `s` instead');\n            // Zone\n            case 'z': // 1..3, 4: specific non-location format\n                result.timeZoneName = len < 4 ? 'short' : 'long';\n                break;\n            case 'Z': // 1..3, 4, 5: The ISO8601 varios formats\n            case 'O': // 1, 4: milliseconds in day short, long\n            case 'v': // 1, 4: generic non-location format\n            case 'V': // 1, 2, 3, 4: time zone ID or city\n            case 'X': // 1, 2, 3, 4: The ISO8601 varios formats\n            case 'x': // 1, 2, 3, 4: The ISO8601 varios formats\n                throw new RangeError('`Z/O/v/V/X/x` (timeZone) patterns are not supported, use `z` instead');\n        }\n        return '';\n    });\n    return result;\n}\n","// @generated from regex-gen.ts\nexport var WHITE_SPACE_REGEX = /[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/i;\n","import { __assign } from \"tslib\";\nimport { WHITE_SPACE_REGEX } from './regex.generated';\nexport function parseNumberSkeletonFromString(skeleton) {\n    if (skeleton.length === 0) {\n        throw new Error('Number skeleton cannot be empty');\n    }\n    // Parse the skeleton\n    var stringTokens = skeleton\n        .split(WHITE_SPACE_REGEX)\n        .filter(function (x) { return x.length > 0; });\n    var tokens = [];\n    for (var _i = 0, stringTokens_1 = stringTokens; _i < stringTokens_1.length; _i++) {\n        var stringToken = stringTokens_1[_i];\n        var stemAndOptions = stringToken.split('/');\n        if (stemAndOptions.length === 0) {\n            throw new Error('Invalid number skeleton');\n        }\n        var stem = stemAndOptions[0], options = stemAndOptions.slice(1);\n        for (var _a = 0, options_1 = options; _a < options_1.length; _a++) {\n            var option = options_1[_a];\n            if (option.length === 0) {\n                throw new Error('Invalid number skeleton');\n            }\n        }\n        tokens.push({ stem: stem, options: options });\n    }\n    return tokens;\n}\nfunction icuUnitToEcma(unit) {\n    return unit.replace(/^(.*?)-/, '');\n}\nvar FRACTION_PRECISION_REGEX = /^\\.(?:(0+)(\\*)?|(#+)|(0+)(#+))$/g;\nvar SIGNIFICANT_PRECISION_REGEX = /^(@+)?(\\+|#+)?[rs]?$/g;\nvar INTEGER_WIDTH_REGEX = /(\\*)(0+)|(#+)(0+)|(0+)/g;\nvar CONCISE_INTEGER_WIDTH_REGEX = /^(0+)$/;\nfunction parseSignificantPrecision(str) {\n    var result = {};\n    if (str[str.length - 1] === 'r') {\n        result.roundingPriority = 'morePrecision';\n    }\n    else if (str[str.length - 1] === 's') {\n        result.roundingPriority = 'lessPrecision';\n    }\n    str.replace(SIGNIFICANT_PRECISION_REGEX, function (_, g1, g2) {\n        // @@@ case\n        if (typeof g2 !== 'string') {\n            result.minimumSignificantDigits = g1.length;\n            result.maximumSignificantDigits = g1.length;\n        }\n        // @@@+ case\n        else if (g2 === '+') {\n            result.minimumSignificantDigits = g1.length;\n        }\n        // .### case\n        else if (g1[0] === '#') {\n            result.maximumSignificantDigits = g1.length;\n        }\n        // .@@## or .@@@ case\n        else {\n            result.minimumSignificantDigits = g1.length;\n            result.maximumSignificantDigits =\n                g1.length + (typeof g2 === 'string' ? g2.length : 0);\n        }\n        return '';\n    });\n    return result;\n}\nfunction parseSign(str) {\n    switch (str) {\n        case 'sign-auto':\n            return {\n                signDisplay: 'auto',\n            };\n        case 'sign-accounting':\n        case '()':\n            return {\n                currencySign: 'accounting',\n            };\n        case 'sign-always':\n        case '+!':\n            return {\n                signDisplay: 'always',\n            };\n        case 'sign-accounting-always':\n        case '()!':\n            return {\n                signDisplay: 'always',\n                currencySign: 'accounting',\n            };\n        case 'sign-except-zero':\n        case '+?':\n            return {\n                signDisplay: 'exceptZero',\n            };\n        case 'sign-accounting-except-zero':\n        case '()?':\n            return {\n                signDisplay: 'exceptZero',\n                currencySign: 'accounting',\n            };\n        case 'sign-never':\n        case '+_':\n            return {\n                signDisplay: 'never',\n            };\n    }\n}\nfunction parseConciseScientificAndEngineeringStem(stem) {\n    // Engineering\n    var result;\n    if (stem[0] === 'E' && stem[1] === 'E') {\n        result = {\n            notation: 'engineering',\n        };\n        stem = stem.slice(2);\n    }\n    else if (stem[0] === 'E') {\n        result = {\n            notation: 'scientific',\n        };\n        stem = stem.slice(1);\n    }\n    if (result) {\n        var signDisplay = stem.slice(0, 2);\n        if (signDisplay === '+!') {\n            result.signDisplay = 'always';\n            stem = stem.slice(2);\n        }\n        else if (signDisplay === '+?') {\n            result.signDisplay = 'exceptZero';\n            stem = stem.slice(2);\n        }\n        if (!CONCISE_INTEGER_WIDTH_REGEX.test(stem)) {\n            throw new Error('Malformed concise eng/scientific notation');\n        }\n        result.minimumIntegerDigits = stem.length;\n    }\n    return result;\n}\nfunction parseNotationOptions(opt) {\n    var result = {};\n    var signOpts = parseSign(opt);\n    if (signOpts) {\n        return signOpts;\n    }\n    return result;\n}\n/**\n * https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options\n */\nexport function parseNumberSkeleton(tokens) {\n    var result = {};\n    for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {\n        var token = tokens_1[_i];\n        switch (token.stem) {\n            case 'percent':\n            case '%':\n                result.style = 'percent';\n                continue;\n            case '%x100':\n                result.style = 'percent';\n                result.scale = 100;\n                continue;\n            case 'currency':\n                result.style = 'currency';\n                result.currency = token.options[0];\n                continue;\n            case 'group-off':\n            case ',_':\n                result.useGrouping = false;\n                continue;\n            case 'precision-integer':\n            case '.':\n                result.maximumFractionDigits = 0;\n                continue;\n            case 'measure-unit':\n            case 'unit':\n                result.style = 'unit';\n                result.unit = icuUnitToEcma(token.options[0]);\n                continue;\n            case 'compact-short':\n            case 'K':\n                result.notation = 'compact';\n                result.compactDisplay = 'short';\n                continue;\n            case 'compact-long':\n            case 'KK':\n                result.notation = 'compact';\n                result.compactDisplay = 'long';\n                continue;\n            case 'scientific':\n                result = __assign(__assign(__assign({}, result), { notation: 'scientific' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));\n                continue;\n            case 'engineering':\n                result = __assign(__assign(__assign({}, result), { notation: 'engineering' }), token.options.reduce(function (all, opt) { return (__assign(__assign({}, all), parseNotationOptions(opt))); }, {}));\n                continue;\n            case 'notation-simple':\n                result.notation = 'standard';\n                continue;\n            // https://github.com/unicode-org/icu/blob/master/icu4c/source/i18n/unicode/unumberformatter.h\n            case 'unit-width-narrow':\n                result.currencyDisplay = 'narrowSymbol';\n                result.unitDisplay = 'narrow';\n                continue;\n            case 'unit-width-short':\n                result.currencyDisplay = 'code';\n                result.unitDisplay = 'short';\n                continue;\n            case 'unit-width-full-name':\n                result.currencyDisplay = 'name';\n                result.unitDisplay = 'long';\n                continue;\n            case 'unit-width-iso-code':\n                result.currencyDisplay = 'symbol';\n                continue;\n            case 'scale':\n                result.scale = parseFloat(token.options[0]);\n                continue;\n            case 'rounding-mode-floor':\n                result.roundingMode = 'floor';\n                continue;\n            case 'rounding-mode-ceiling':\n                result.roundingMode = 'ceil';\n                continue;\n            case 'rounding-mode-down':\n                result.roundingMode = 'trunc';\n                continue;\n            case 'rounding-mode-up':\n                result.roundingMode = 'expand';\n                continue;\n            case 'rounding-mode-half-even':\n                result.roundingMode = 'halfEven';\n                continue;\n            case 'rounding-mode-half-down':\n                result.roundingMode = 'halfTrunc';\n                continue;\n            case 'rounding-mode-half-up':\n                result.roundingMode = 'halfExpand';\n                continue;\n            // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width\n            case 'integer-width':\n                if (token.options.length > 1) {\n                    throw new RangeError('integer-width stems only accept a single optional option');\n                }\n                token.options[0].replace(INTEGER_WIDTH_REGEX, function (_, g1, g2, g3, g4, g5) {\n                    if (g1) {\n                        result.minimumIntegerDigits = g2.length;\n                    }\n                    else if (g3 && g4) {\n                        throw new Error('We currently do not support maximum integer digits');\n                    }\n                    else if (g5) {\n                        throw new Error('We currently do not support exact integer digits');\n                    }\n                    return '';\n                });\n                continue;\n        }\n        // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#integer-width\n        if (CONCISE_INTEGER_WIDTH_REGEX.test(token.stem)) {\n            result.minimumIntegerDigits = token.stem.length;\n            continue;\n        }\n        if (FRACTION_PRECISION_REGEX.test(token.stem)) {\n            // Precision\n            // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#fraction-precision\n            // precision-integer case\n            if (token.options.length > 1) {\n                throw new RangeError('Fraction-precision stems only accept a single optional option');\n            }\n            token.stem.replace(FRACTION_PRECISION_REGEX, function (_, g1, g2, g3, g4, g5) {\n                // .000* case (before ICU67 it was .000+)\n                if (g2 === '*') {\n                    result.minimumFractionDigits = g1.length;\n                }\n                // .### case\n                else if (g3 && g3[0] === '#') {\n                    result.maximumFractionDigits = g3.length;\n                }\n                // .00## case\n                else if (g4 && g5) {\n                    result.minimumFractionDigits = g4.length;\n                    result.maximumFractionDigits = g4.length + g5.length;\n                }\n                else {\n                    result.minimumFractionDigits = g1.length;\n                    result.maximumFractionDigits = g1.length;\n                }\n                return '';\n            });\n            var opt = token.options[0];\n            // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#trailing-zero-display\n            if (opt === 'w') {\n                result = __assign(__assign({}, result), { trailingZeroDisplay: 'stripIfInteger' });\n            }\n            else if (opt) {\n                result = __assign(__assign({}, result), parseSignificantPrecision(opt));\n            }\n            continue;\n        }\n        // https://unicode-org.github.io/icu/userguide/format_parse/numbers/skeletons.html#significant-digits-precision\n        if (SIGNIFICANT_PRECISION_REGEX.test(token.stem)) {\n            result = __assign(__assign({}, result), parseSignificantPrecision(token.stem));\n            continue;\n        }\n        var signOpts = parseSign(token.stem);\n        if (signOpts) {\n            result = __assign(__assign({}, result), signOpts);\n        }\n        var conciseScientificAndEngineeringOpts = parseConciseScientificAndEngineeringStem(token.stem);\n        if (conciseScientificAndEngineeringOpts) {\n            result = __assign(__assign({}, result), conciseScientificAndEngineeringOpts);\n        }\n    }\n    return result;\n}\n","// @generated from time-data-gen.ts\n// prettier-ignore  \nexport var timeData = {\n    \"001\": [\n        \"H\",\n        \"h\"\n    ],\n    \"419\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"AC\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"AD\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AE\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"AF\": [\n        \"H\",\n        \"hb\",\n        \"hB\",\n        \"h\"\n    ],\n    \"AG\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"AI\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"AL\": [\n        \"h\",\n        \"H\",\n        \"hB\"\n    ],\n    \"AM\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AO\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AR\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"AS\": [\n        \"h\",\n        \"H\"\n    ],\n    \"AT\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AU\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"AW\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"AX\": [\n        \"H\"\n    ],\n    \"AZ\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"BA\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"BB\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"BD\": [\n        \"h\",\n        \"hB\",\n        \"H\"\n    ],\n    \"BE\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BF\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BG\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"BH\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"BI\": [\n        \"H\",\n        \"h\"\n    ],\n    \"BJ\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BL\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"BN\": [\n        \"hb\",\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"BO\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"BQ\": [\n        \"H\"\n    ],\n    \"BR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"BS\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"BT\": [\n        \"h\",\n        \"H\"\n    ],\n    \"BW\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"BY\": [\n        \"H\",\n        \"h\"\n    ],\n    \"BZ\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CA\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"CC\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CD\": [\n        \"hB\",\n        \"H\"\n    ],\n    \"CF\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"CG\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"CH\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"CI\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"CK\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CL\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"CM\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"CN\": [\n        \"H\",\n        \"hB\",\n        \"hb\",\n        \"h\"\n    ],\n    \"CO\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"CP\": [\n        \"H\"\n    ],\n    \"CR\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"CU\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"CV\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"CW\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"CX\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CY\": [\n        \"h\",\n        \"H\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"CZ\": [\n        \"H\"\n    ],\n    \"DE\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"DG\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"DJ\": [\n        \"h\",\n        \"H\"\n    ],\n    \"DK\": [\n        \"H\"\n    ],\n    \"DM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"DO\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"DZ\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"EA\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"EC\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"EE\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"EG\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"EH\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"ER\": [\n        \"h\",\n        \"H\"\n    ],\n    \"ES\": [\n        \"H\",\n        \"hB\",\n        \"h\",\n        \"hb\"\n    ],\n    \"ET\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"FI\": [\n        \"H\"\n    ],\n    \"FJ\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"FK\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"FM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"FO\": [\n        \"H\",\n        \"h\"\n    ],\n    \"FR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GA\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GB\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"GD\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"GE\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"GF\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GG\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"GH\": [\n        \"h\",\n        \"H\"\n    ],\n    \"GI\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"GL\": [\n        \"H\",\n        \"h\"\n    ],\n    \"GM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"GN\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GP\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GQ\": [\n        \"H\",\n        \"hB\",\n        \"h\",\n        \"hb\"\n    ],\n    \"GR\": [\n        \"h\",\n        \"H\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"GT\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"GU\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"GW\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"GY\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"HK\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"HN\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"HR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"HU\": [\n        \"H\",\n        \"h\"\n    ],\n    \"IC\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"ID\": [\n        \"H\"\n    ],\n    \"IE\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"IL\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"IM\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"IN\": [\n        \"h\",\n        \"H\"\n    ],\n    \"IO\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"IQ\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"IR\": [\n        \"hB\",\n        \"H\"\n    ],\n    \"IS\": [\n        \"H\"\n    ],\n    \"IT\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"JE\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"JM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"JO\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"JP\": [\n        \"H\",\n        \"K\",\n        \"h\"\n    ],\n    \"KE\": [\n        \"hB\",\n        \"hb\",\n        \"H\",\n        \"h\"\n    ],\n    \"KG\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"KH\": [\n        \"hB\",\n        \"h\",\n        \"H\",\n        \"hb\"\n    ],\n    \"KI\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"KM\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"KN\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"KP\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"KR\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"KW\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"KY\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"KZ\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"LA\": [\n        \"H\",\n        \"hb\",\n        \"hB\",\n        \"h\"\n    ],\n    \"LB\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"LC\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"LI\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"LK\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"LR\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"LS\": [\n        \"h\",\n        \"H\"\n    ],\n    \"LT\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"LU\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"LV\": [\n        \"H\",\n        \"hB\",\n        \"hb\",\n        \"h\"\n    ],\n    \"LY\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"MA\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"MC\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"MD\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"ME\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"MF\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"MG\": [\n        \"H\",\n        \"h\"\n    ],\n    \"MH\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"MK\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"ML\": [\n        \"H\"\n    ],\n    \"MM\": [\n        \"hB\",\n        \"hb\",\n        \"H\",\n        \"h\"\n    ],\n    \"MN\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"MO\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"MP\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"MQ\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"MR\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"MS\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"MT\": [\n        \"H\",\n        \"h\"\n    ],\n    \"MU\": [\n        \"H\",\n        \"h\"\n    ],\n    \"MV\": [\n        \"H\",\n        \"h\"\n    ],\n    \"MW\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"MX\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"MY\": [\n        \"hb\",\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"MZ\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"NA\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"NC\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"NE\": [\n        \"H\"\n    ],\n    \"NF\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"NG\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"NI\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"NL\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"NO\": [\n        \"H\",\n        \"h\"\n    ],\n    \"NP\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"NR\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"NU\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"NZ\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"OM\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"PA\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"PE\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"PF\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"PG\": [\n        \"h\",\n        \"H\"\n    ],\n    \"PH\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"PK\": [\n        \"h\",\n        \"hB\",\n        \"H\"\n    ],\n    \"PL\": [\n        \"H\",\n        \"h\"\n    ],\n    \"PM\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"PN\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"PR\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"PS\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"PT\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"PW\": [\n        \"h\",\n        \"H\"\n    ],\n    \"PY\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"QA\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"RE\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"RO\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"RS\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"RU\": [\n        \"H\"\n    ],\n    \"RW\": [\n        \"H\",\n        \"h\"\n    ],\n    \"SA\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"SB\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"SC\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"SD\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"SE\": [\n        \"H\"\n    ],\n    \"SG\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"SH\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"SI\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"SJ\": [\n        \"H\"\n    ],\n    \"SK\": [\n        \"H\"\n    ],\n    \"SL\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"SM\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"SN\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"SO\": [\n        \"h\",\n        \"H\"\n    ],\n    \"SR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"SS\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"ST\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"SV\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"SX\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"SY\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"SZ\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"TA\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"TC\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"TD\": [\n        \"h\",\n        \"H\",\n        \"hB\"\n    ],\n    \"TF\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"TG\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"TH\": [\n        \"H\",\n        \"h\"\n    ],\n    \"TJ\": [\n        \"H\",\n        \"h\"\n    ],\n    \"TL\": [\n        \"H\",\n        \"hB\",\n        \"hb\",\n        \"h\"\n    ],\n    \"TM\": [\n        \"H\",\n        \"h\"\n    ],\n    \"TN\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"TO\": [\n        \"h\",\n        \"H\"\n    ],\n    \"TR\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"TT\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"TW\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"TZ\": [\n        \"hB\",\n        \"hb\",\n        \"H\",\n        \"h\"\n    ],\n    \"UA\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"UG\": [\n        \"hB\",\n        \"hb\",\n        \"H\",\n        \"h\"\n    ],\n    \"UM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"US\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"UY\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"UZ\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"VA\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"VC\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"VE\": [\n        \"h\",\n        \"H\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"VG\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"VI\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"VN\": [\n        \"H\",\n        \"h\"\n    ],\n    \"VU\": [\n        \"h\",\n        \"H\"\n    ],\n    \"WF\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"WS\": [\n        \"h\",\n        \"H\"\n    ],\n    \"XK\": [\n        \"H\",\n        \"hB\",\n        \"h\"\n    ],\n    \"YE\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"YT\": [\n        \"H\",\n        \"hB\"\n    ],\n    \"ZA\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"ZM\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"ZW\": [\n        \"H\",\n        \"h\"\n    ],\n    \"af-ZA\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"ar-001\": [\n        \"h\",\n        \"hB\",\n        \"hb\",\n        \"H\"\n    ],\n    \"ca-ES\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"en-001\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"en-HK\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"en-IL\": [\n        \"H\",\n        \"h\",\n        \"hb\",\n        \"hB\"\n    ],\n    \"en-MY\": [\n        \"h\",\n        \"hb\",\n        \"H\",\n        \"hB\"\n    ],\n    \"es-BR\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"es-ES\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"es-GQ\": [\n        \"H\",\n        \"h\",\n        \"hB\",\n        \"hb\"\n    ],\n    \"fr-CA\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"gl-ES\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"gu-IN\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"hi-IN\": [\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"it-CH\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"it-IT\": [\n        \"H\",\n        \"h\",\n        \"hB\"\n    ],\n    \"kn-IN\": [\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"ml-IN\": [\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"mr-IN\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"pa-IN\": [\n        \"hB\",\n        \"hb\",\n        \"h\",\n        \"H\"\n    ],\n    \"ta-IN\": [\n        \"hB\",\n        \"h\",\n        \"hb\",\n        \"H\"\n    ],\n    \"te-IN\": [\n        \"hB\",\n        \"h\",\n        \"H\"\n    ],\n    \"zu-ZA\": [\n        \"H\",\n        \"hB\",\n        \"hb\",\n        \"h\"\n    ]\n};\n","import { timeData } from './time-data.generated';\n/**\n * Returns the best matching date time pattern if a date time skeleton\n * pattern is provided with a locale. Follows the Unicode specification:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#table-mapping-requested-time-skeletons-to-patterns\n * @param skeleton date time skeleton pattern that possibly includes j, J or C\n * @param locale\n */\nexport function getBestPattern(skeleton, locale) {\n    var skeletonCopy = '';\n    for (var patternPos = 0; patternPos < skeleton.length; patternPos++) {\n        var patternChar = skeleton.charAt(patternPos);\n        if (patternChar === 'j') {\n            var extraLength = 0;\n            while (patternPos + 1 < skeleton.length &&\n                skeleton.charAt(patternPos + 1) === patternChar) {\n                extraLength++;\n                patternPos++;\n            }\n            var hourLen = 1 + (extraLength & 1);\n            var dayPeriodLen = extraLength < 2 ? 1 : 3 + (extraLength >> 1);\n            var dayPeriodChar = 'a';\n            var hourChar = getDefaultHourSymbolFromLocale(locale);\n            if (hourChar == 'H' || hourChar == 'k') {\n                dayPeriodLen = 0;\n            }\n            while (dayPeriodLen-- > 0) {\n                skeletonCopy += dayPeriodChar;\n            }\n            while (hourLen-- > 0) {\n                skeletonCopy = hourChar + skeletonCopy;\n            }\n        }\n        else if (patternChar === 'J') {\n            skeletonCopy += 'H';\n        }\n        else {\n            skeletonCopy += patternChar;\n        }\n    }\n    return skeletonCopy;\n}\n/**\n * Maps the [hour cycle type](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle)\n * of the given `locale` to the corresponding time pattern.\n * @param locale\n */\nfunction getDefaultHourSymbolFromLocale(locale) {\n    var hourCycle = locale.hourCycle;\n    if (hourCycle === undefined &&\n        // @ts-ignore hourCycle(s) is not identified yet\n        locale.hourCycles &&\n        // @ts-ignore\n        locale.hourCycles.length) {\n        // @ts-ignore\n        hourCycle = locale.hourCycles[0];\n    }\n    if (hourCycle) {\n        switch (hourCycle) {\n            case 'h24':\n                return 'k';\n            case 'h23':\n                return 'H';\n            case 'h12':\n                return 'h';\n            case 'h11':\n                return 'K';\n            default:\n                throw new Error('Invalid hourCycle');\n        }\n    }\n    // TODO: Once hourCycle is fully supported remove the following with data generation\n    var languageTag = locale.language;\n    var regionTag;\n    if (languageTag !== 'root') {\n        regionTag = locale.maximize().region;\n    }\n    var hourCycles = timeData[regionTag || ''] ||\n        timeData[languageTag || ''] ||\n        timeData[\"\".concat(languageTag, \"-001\")] ||\n        timeData['001'];\n    return hourCycles[0];\n}\n","var _a;\nimport { __assign } from \"tslib\";\nimport { ErrorKind } from './error';\nimport { SKELETON_TYPE, TYPE, } from './types';\nimport { SPACE_SEPARATOR_REGEX } from './regex.generated';\nimport { parseNumberSkeleton, parseNumberSkeletonFromString, parseDateTimeSkeleton, } from '@formatjs/icu-skeleton-parser';\nimport { getBestPattern } from './date-time-pattern-generator';\nvar SPACE_SEPARATOR_START_REGEX = new RegExp(\"^\".concat(SPACE_SEPARATOR_REGEX.source, \"*\"));\nvar SPACE_SEPARATOR_END_REGEX = new RegExp(\"\".concat(SPACE_SEPARATOR_REGEX.source, \"*$\"));\nfunction createLocation(start, end) {\n    return { start: start, end: end };\n}\n// #region Ponyfills\n// Consolidate these variables up top for easier toggling during debugging\nvar hasNativeStartsWith = !!String.prototype.startsWith && '_a'.startsWith('a', 1);\nvar hasNativeFromCodePoint = !!String.fromCodePoint;\nvar hasNativeFromEntries = !!Object.fromEntries;\nvar hasNativeCodePointAt = !!String.prototype.codePointAt;\nvar hasTrimStart = !!String.prototype.trimStart;\nvar hasTrimEnd = !!String.prototype.trimEnd;\nvar hasNativeIsSafeInteger = !!Number.isSafeInteger;\nvar isSafeInteger = hasNativeIsSafeInteger\n    ? Number.isSafeInteger\n    : function (n) {\n        return (typeof n === 'number' &&\n            isFinite(n) &&\n            Math.floor(n) === n &&\n            Math.abs(n) <= 0x1fffffffffffff);\n    };\n// IE11 does not support y and u.\nvar REGEX_SUPPORTS_U_AND_Y = true;\ntry {\n    var re = RE('([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)', 'yu');\n    /**\n     * legacy Edge or Xbox One browser\n     * Unicode flag support: supported\n     * Pattern_Syntax support: not supported\n     * See https://github.com/formatjs/formatjs/issues/2822\n     */\n    REGEX_SUPPORTS_U_AND_Y = ((_a = re.exec('a')) === null || _a === void 0 ? void 0 : _a[0]) === 'a';\n}\ncatch (_) {\n    REGEX_SUPPORTS_U_AND_Y = false;\n}\nvar startsWith = hasNativeStartsWith\n    ? // Native\n        function startsWith(s, search, position) {\n            return s.startsWith(search, position);\n        }\n    : // For IE11\n        function startsWith(s, search, position) {\n            return s.slice(position, position + search.length) === search;\n        };\nvar fromCodePoint = hasNativeFromCodePoint\n    ? String.fromCodePoint\n    : // IE11\n        function fromCodePoint() {\n            var codePoints = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                codePoints[_i] = arguments[_i];\n            }\n            var elements = '';\n            var length = codePoints.length;\n            var i = 0;\n            var code;\n            while (length > i) {\n                code = codePoints[i++];\n                if (code > 0x10ffff)\n                    throw RangeError(code + ' is not a valid code point');\n                elements +=\n                    code < 0x10000\n                        ? String.fromCharCode(code)\n                        : String.fromCharCode(((code -= 0x10000) >> 10) + 0xd800, (code % 0x400) + 0xdc00);\n            }\n            return elements;\n        };\nvar fromEntries = \n// native\nhasNativeFromEntries\n    ? Object.fromEntries\n    : // Ponyfill\n        function fromEntries(entries) {\n            var obj = {};\n            for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {\n                var _a = entries_1[_i], k = _a[0], v = _a[1];\n                obj[k] = v;\n            }\n            return obj;\n        };\nvar codePointAt = hasNativeCodePointAt\n    ? // Native\n        function codePointAt(s, index) {\n            return s.codePointAt(index);\n        }\n    : // IE 11\n        function codePointAt(s, index) {\n            var size = s.length;\n            if (index < 0 || index >= size) {\n                return undefined;\n            }\n            var first = s.charCodeAt(index);\n            var second;\n            return first < 0xd800 ||\n                first > 0xdbff ||\n                index + 1 === size ||\n                (second = s.charCodeAt(index + 1)) < 0xdc00 ||\n                second > 0xdfff\n                ? first\n                : ((first - 0xd800) << 10) + (second - 0xdc00) + 0x10000;\n        };\nvar trimStart = hasTrimStart\n    ? // Native\n        function trimStart(s) {\n            return s.trimStart();\n        }\n    : // Ponyfill\n        function trimStart(s) {\n            return s.replace(SPACE_SEPARATOR_START_REGEX, '');\n        };\nvar trimEnd = hasTrimEnd\n    ? // Native\n        function trimEnd(s) {\n            return s.trimEnd();\n        }\n    : // Ponyfill\n        function trimEnd(s) {\n            return s.replace(SPACE_SEPARATOR_END_REGEX, '');\n        };\n// Prevent minifier to translate new RegExp to literal form that might cause syntax error on IE11.\nfunction RE(s, flag) {\n    return new RegExp(s, flag);\n}\n// #endregion\nvar matchIdentifierAtIndex;\nif (REGEX_SUPPORTS_U_AND_Y) {\n    // Native\n    var IDENTIFIER_PREFIX_RE_1 = RE('([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)', 'yu');\n    matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) {\n        var _a;\n        IDENTIFIER_PREFIX_RE_1.lastIndex = index;\n        var match = IDENTIFIER_PREFIX_RE_1.exec(s);\n        return (_a = match[1]) !== null && _a !== void 0 ? _a : '';\n    };\n}\nelse {\n    // IE11\n    matchIdentifierAtIndex = function matchIdentifierAtIndex(s, index) {\n        var match = [];\n        while (true) {\n            var c = codePointAt(s, index);\n            if (c === undefined || _isWhiteSpace(c) || _isPatternSyntax(c)) {\n                break;\n            }\n            match.push(c);\n            index += c >= 0x10000 ? 2 : 1;\n        }\n        return fromCodePoint.apply(void 0, match);\n    };\n}\nvar Parser = /** @class */ (function () {\n    function Parser(message, options) {\n        if (options === void 0) { options = {}; }\n        this.message = message;\n        this.position = { offset: 0, line: 1, column: 1 };\n        this.ignoreTag = !!options.ignoreTag;\n        this.locale = options.locale;\n        this.requiresOtherClause = !!options.requiresOtherClause;\n        this.shouldParseSkeletons = !!options.shouldParseSkeletons;\n    }\n    Parser.prototype.parse = function () {\n        if (this.offset() !== 0) {\n            throw Error('parser can only be used once');\n        }\n        return this.parseMessage(0, '', false);\n    };\n    Parser.prototype.parseMessage = function (nestingLevel, parentArgType, expectingCloseTag) {\n        var elements = [];\n        while (!this.isEOF()) {\n            var char = this.char();\n            if (char === 123 /* `{` */) {\n                var result = this.parseArgument(nestingLevel, expectingCloseTag);\n                if (result.err) {\n                    return result;\n                }\n                elements.push(result.val);\n            }\n            else if (char === 125 /* `}` */ && nestingLevel > 0) {\n                break;\n            }\n            else if (char === 35 /* `#` */ &&\n                (parentArgType === 'plural' || parentArgType === 'selectordinal')) {\n                var position = this.clonePosition();\n                this.bump();\n                elements.push({\n                    type: TYPE.pound,\n                    location: createLocation(position, this.clonePosition()),\n                });\n            }\n            else if (char === 60 /* `<` */ &&\n                !this.ignoreTag &&\n                this.peek() === 47 // char code for '/'\n            ) {\n                if (expectingCloseTag) {\n                    break;\n                }\n                else {\n                    return this.error(ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(this.clonePosition(), this.clonePosition()));\n                }\n            }\n            else if (char === 60 /* `<` */ &&\n                !this.ignoreTag &&\n                _isAlpha(this.peek() || 0)) {\n                var result = this.parseTag(nestingLevel, parentArgType);\n                if (result.err) {\n                    return result;\n                }\n                elements.push(result.val);\n            }\n            else {\n                var result = this.parseLiteral(nestingLevel, parentArgType);\n                if (result.err) {\n                    return result;\n                }\n                elements.push(result.val);\n            }\n        }\n        return { val: elements, err: null };\n    };\n    /**\n     * A tag name must start with an ASCII lower/upper case letter. The grammar is based on the\n     * [custom element name][] except that a dash is NOT always mandatory and uppercase letters\n     * are accepted:\n     *\n     * ```\n     * tag ::= \"<\" tagName (whitespace)* \"/>\" | \"<\" tagName (whitespace)* \">\" message \"</\" tagName (whitespace)* \">\"\n     * tagName ::= [a-z] (PENChar)*\n     * PENChar ::=\n     *     \"-\" | \".\" | [0-9] | \"_\" | [a-z] | [A-Z] | #xB7 | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x37D] |\n     *     [#x37F-#x1FFF] | [#x200C-#x200D] | [#x203F-#x2040] | [#x2070-#x218F] | [#x2C00-#x2FEF] |\n     *     [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n     * ```\n     *\n     * [custom element name]: https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\n     * NOTE: We're a bit more lax here since HTML technically does not allow uppercase HTML element but we do\n     * since other tag-based engines like React allow it\n     */\n    Parser.prototype.parseTag = function (nestingLevel, parentArgType) {\n        var startPosition = this.clonePosition();\n        this.bump(); // `<`\n        var tagName = this.parseTagName();\n        this.bumpSpace();\n        if (this.bumpIf('/>')) {\n            // Self closing tag\n            return {\n                val: {\n                    type: TYPE.literal,\n                    value: \"<\".concat(tagName, \"/>\"),\n                    location: createLocation(startPosition, this.clonePosition()),\n                },\n                err: null,\n            };\n        }\n        else if (this.bumpIf('>')) {\n            var childrenResult = this.parseMessage(nestingLevel + 1, parentArgType, true);\n            if (childrenResult.err) {\n                return childrenResult;\n            }\n            var children = childrenResult.val;\n            // Expecting a close tag\n            var endTagStartPosition = this.clonePosition();\n            if (this.bumpIf('</')) {\n                if (this.isEOF() || !_isAlpha(this.char())) {\n                    return this.error(ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition()));\n                }\n                var closingTagNameStartPosition = this.clonePosition();\n                var closingTagName = this.parseTagName();\n                if (tagName !== closingTagName) {\n                    return this.error(ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(closingTagNameStartPosition, this.clonePosition()));\n                }\n                this.bumpSpace();\n                if (!this.bumpIf('>')) {\n                    return this.error(ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition()));\n                }\n                return {\n                    val: {\n                        type: TYPE.tag,\n                        value: tagName,\n                        children: children,\n                        location: createLocation(startPosition, this.clonePosition()),\n                    },\n                    err: null,\n                };\n            }\n            else {\n                return this.error(ErrorKind.UNCLOSED_TAG, createLocation(startPosition, this.clonePosition()));\n            }\n        }\n        else {\n            return this.error(ErrorKind.INVALID_TAG, createLocation(startPosition, this.clonePosition()));\n        }\n    };\n    /**\n     * This method assumes that the caller has peeked ahead for the first tag character.\n     */\n    Parser.prototype.parseTagName = function () {\n        var startOffset = this.offset();\n        this.bump(); // the first tag name character\n        while (!this.isEOF() && _isPotentialElementNameChar(this.char())) {\n            this.bump();\n        }\n        return this.message.slice(startOffset, this.offset());\n    };\n    Parser.prototype.parseLiteral = function (nestingLevel, parentArgType) {\n        var start = this.clonePosition();\n        var value = '';\n        while (true) {\n            var parseQuoteResult = this.tryParseQuote(parentArgType);\n            if (parseQuoteResult) {\n                value += parseQuoteResult;\n                continue;\n            }\n            var parseUnquotedResult = this.tryParseUnquoted(nestingLevel, parentArgType);\n            if (parseUnquotedResult) {\n                value += parseUnquotedResult;\n                continue;\n            }\n            var parseLeftAngleResult = this.tryParseLeftAngleBracket();\n            if (parseLeftAngleResult) {\n                value += parseLeftAngleResult;\n                continue;\n            }\n            break;\n        }\n        var location = createLocation(start, this.clonePosition());\n        return {\n            val: { type: TYPE.literal, value: value, location: location },\n            err: null,\n        };\n    };\n    Parser.prototype.tryParseLeftAngleBracket = function () {\n        if (!this.isEOF() &&\n            this.char() === 60 /* `<` */ &&\n            (this.ignoreTag ||\n                // If at the opening tag or closing tag position, bail.\n                !_isAlphaOrSlash(this.peek() || 0))) {\n            this.bump(); // `<`\n            return '<';\n        }\n        return null;\n    };\n    /**\n     * Starting with ICU 4.8, an ASCII apostrophe only starts quoted text if it immediately precedes\n     * a character that requires quoting (that is, \"only where needed\"), and works the same in\n     * nested messages as on the top level of the pattern. The new behavior is otherwise compatible.\n     */\n    Parser.prototype.tryParseQuote = function (parentArgType) {\n        if (this.isEOF() || this.char() !== 39 /* `'` */) {\n            return null;\n        }\n        // Parse escaped char following the apostrophe, or early return if there is no escaped char.\n        // Check if is valid escaped character\n        switch (this.peek()) {\n            case 39 /* `'` */:\n                // double quote, should return as a single quote.\n                this.bump();\n                this.bump();\n                return \"'\";\n            // '{', '<', '>', '}'\n            case 123:\n            case 60:\n            case 62:\n            case 125:\n                break;\n            case 35: // '#'\n                if (parentArgType === 'plural' || parentArgType === 'selectordinal') {\n                    break;\n                }\n                return null;\n            default:\n                return null;\n        }\n        this.bump(); // apostrophe\n        var codePoints = [this.char()]; // escaped char\n        this.bump();\n        // read chars until the optional closing apostrophe is found\n        while (!this.isEOF()) {\n            var ch = this.char();\n            if (ch === 39 /* `'` */) {\n                if (this.peek() === 39 /* `'` */) {\n                    codePoints.push(39);\n                    // Bump one more time because we need to skip 2 characters.\n                    this.bump();\n                }\n                else {\n                    // Optional closing apostrophe.\n                    this.bump();\n                    break;\n                }\n            }\n            else {\n                codePoints.push(ch);\n            }\n            this.bump();\n        }\n        return fromCodePoint.apply(void 0, codePoints);\n    };\n    Parser.prototype.tryParseUnquoted = function (nestingLevel, parentArgType) {\n        if (this.isEOF()) {\n            return null;\n        }\n        var ch = this.char();\n        if (ch === 60 /* `<` */ ||\n            ch === 123 /* `{` */ ||\n            (ch === 35 /* `#` */ &&\n                (parentArgType === 'plural' || parentArgType === 'selectordinal')) ||\n            (ch === 125 /* `}` */ && nestingLevel > 0)) {\n            return null;\n        }\n        else {\n            this.bump();\n            return fromCodePoint(ch);\n        }\n    };\n    Parser.prototype.parseArgument = function (nestingLevel, expectingCloseTag) {\n        var openingBracePosition = this.clonePosition();\n        this.bump(); // `{`\n        this.bumpSpace();\n        if (this.isEOF()) {\n            return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        if (this.char() === 125 /* `}` */) {\n            this.bump();\n            return this.error(ErrorKind.EMPTY_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        // argument name\n        var value = this.parseIdentifierIfPossible().value;\n        if (!value) {\n            return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        this.bumpSpace();\n        if (this.isEOF()) {\n            return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        switch (this.char()) {\n            // Simple argument: `{name}`\n            case 125 /* `}` */: {\n                this.bump(); // `}`\n                return {\n                    val: {\n                        type: TYPE.argument,\n                        // value does not include the opening and closing braces.\n                        value: value,\n                        location: createLocation(openingBracePosition, this.clonePosition()),\n                    },\n                    err: null,\n                };\n            }\n            // Argument with options: `{name, format, ...}`\n            case 44 /* `,` */: {\n                this.bump(); // `,`\n                this.bumpSpace();\n                if (this.isEOF()) {\n                    return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n                }\n                return this.parseArgumentOptions(nestingLevel, expectingCloseTag, value, openingBracePosition);\n            }\n            default:\n                return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n        }\n    };\n    /**\n     * Advance the parser until the end of the identifier, if it is currently on\n     * an identifier character. Return an empty string otherwise.\n     */\n    Parser.prototype.parseIdentifierIfPossible = function () {\n        var startingPosition = this.clonePosition();\n        var startOffset = this.offset();\n        var value = matchIdentifierAtIndex(this.message, startOffset);\n        var endOffset = startOffset + value.length;\n        this.bumpTo(endOffset);\n        var endPosition = this.clonePosition();\n        var location = createLocation(startingPosition, endPosition);\n        return { value: value, location: location };\n    };\n    Parser.prototype.parseArgumentOptions = function (nestingLevel, expectingCloseTag, value, openingBracePosition) {\n        var _a;\n        // Parse this range:\n        // {name, type, style}\n        //        ^---^\n        var typeStartPosition = this.clonePosition();\n        var argType = this.parseIdentifierIfPossible().value;\n        var typeEndPosition = this.clonePosition();\n        switch (argType) {\n            case '':\n                // Expecting a style string number, date, time, plural, selectordinal, or select.\n                return this.error(ErrorKind.EXPECT_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));\n            case 'number':\n            case 'date':\n            case 'time': {\n                // Parse this range:\n                // {name, number, style}\n                //              ^-------^\n                this.bumpSpace();\n                var styleAndLocation = null;\n                if (this.bumpIf(',')) {\n                    this.bumpSpace();\n                    var styleStartPosition = this.clonePosition();\n                    var result = this.parseSimpleArgStyleIfPossible();\n                    if (result.err) {\n                        return result;\n                    }\n                    var style = trimEnd(result.val);\n                    if (style.length === 0) {\n                        return this.error(ErrorKind.EXPECT_ARGUMENT_STYLE, createLocation(this.clonePosition(), this.clonePosition()));\n                    }\n                    var styleLocation = createLocation(styleStartPosition, this.clonePosition());\n                    styleAndLocation = { style: style, styleLocation: styleLocation };\n                }\n                var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n                if (argCloseResult.err) {\n                    return argCloseResult;\n                }\n                var location_1 = createLocation(openingBracePosition, this.clonePosition());\n                // Extract style or skeleton\n                if (styleAndLocation && startsWith(styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style, '::', 0)) {\n                    // Skeleton starts with `::`.\n                    var skeleton = trimStart(styleAndLocation.style.slice(2));\n                    if (argType === 'number') {\n                        var result = this.parseNumberSkeletonFromString(skeleton, styleAndLocation.styleLocation);\n                        if (result.err) {\n                            return result;\n                        }\n                        return {\n                            val: { type: TYPE.number, value: value, location: location_1, style: result.val },\n                            err: null,\n                        };\n                    }\n                    else {\n                        if (skeleton.length === 0) {\n                            return this.error(ErrorKind.EXPECT_DATE_TIME_SKELETON, location_1);\n                        }\n                        var dateTimePattern = skeleton;\n                        // Get \"best match\" pattern only if locale is passed, if not, let it\n                        // pass as-is where `parseDateTimeSkeleton()` will throw an error\n                        // for unsupported patterns.\n                        if (this.locale) {\n                            dateTimePattern = getBestPattern(skeleton, this.locale);\n                        }\n                        var style = {\n                            type: SKELETON_TYPE.dateTime,\n                            pattern: dateTimePattern,\n                            location: styleAndLocation.styleLocation,\n                            parsedOptions: this.shouldParseSkeletons\n                                ? parseDateTimeSkeleton(dateTimePattern)\n                                : {},\n                        };\n                        var type = argType === 'date' ? TYPE.date : TYPE.time;\n                        return {\n                            val: { type: type, value: value, location: location_1, style: style },\n                            err: null,\n                        };\n                    }\n                }\n                // Regular style or no style.\n                return {\n                    val: {\n                        type: argType === 'number'\n                            ? TYPE.number\n                            : argType === 'date'\n                                ? TYPE.date\n                                : TYPE.time,\n                        value: value,\n                        location: location_1,\n                        style: (_a = styleAndLocation === null || styleAndLocation === void 0 ? void 0 : styleAndLocation.style) !== null && _a !== void 0 ? _a : null,\n                    },\n                    err: null,\n                };\n            }\n            case 'plural':\n            case 'selectordinal':\n            case 'select': {\n                // Parse this range:\n                // {name, plural, options}\n                //              ^---------^\n                var typeEndPosition_1 = this.clonePosition();\n                this.bumpSpace();\n                if (!this.bumpIf(',')) {\n                    return this.error(ErrorKind.EXPECT_SELECT_ARGUMENT_OPTIONS, createLocation(typeEndPosition_1, __assign({}, typeEndPosition_1)));\n                }\n                this.bumpSpace();\n                // Parse offset:\n                // {name, plural, offset:1, options}\n                //                ^-----^\n                //\n                // or the first option:\n                //\n                // {name, plural, one {...} other {...}}\n                //                ^--^\n                var identifierAndLocation = this.parseIdentifierIfPossible();\n                var pluralOffset = 0;\n                if (argType !== 'select' && identifierAndLocation.value === 'offset') {\n                    if (!this.bumpIf(':')) {\n                        return this.error(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, createLocation(this.clonePosition(), this.clonePosition()));\n                    }\n                    this.bumpSpace();\n                    var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, ErrorKind.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE);\n                    if (result.err) {\n                        return result;\n                    }\n                    // Parse another identifier for option parsing\n                    this.bumpSpace();\n                    identifierAndLocation = this.parseIdentifierIfPossible();\n                    pluralOffset = result.val;\n                }\n                var optionsResult = this.tryParsePluralOrSelectOptions(nestingLevel, argType, expectingCloseTag, identifierAndLocation);\n                if (optionsResult.err) {\n                    return optionsResult;\n                }\n                var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n                if (argCloseResult.err) {\n                    return argCloseResult;\n                }\n                var location_2 = createLocation(openingBracePosition, this.clonePosition());\n                if (argType === 'select') {\n                    return {\n                        val: {\n                            type: TYPE.select,\n                            value: value,\n                            options: fromEntries(optionsResult.val),\n                            location: location_2,\n                        },\n                        err: null,\n                    };\n                }\n                else {\n                    return {\n                        val: {\n                            type: TYPE.plural,\n                            value: value,\n                            options: fromEntries(optionsResult.val),\n                            offset: pluralOffset,\n                            pluralType: argType === 'plural' ? 'cardinal' : 'ordinal',\n                            location: location_2,\n                        },\n                        err: null,\n                    };\n                }\n            }\n            default:\n                return this.error(ErrorKind.INVALID_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));\n        }\n    };\n    Parser.prototype.tryParseArgumentClose = function (openingBracePosition) {\n        // Parse: {value, number, ::currency/GBP }\n        //\n        if (this.isEOF() || this.char() !== 125 /* `}` */) {\n            return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n        }\n        this.bump(); // `}`\n        return { val: true, err: null };\n    };\n    /**\n     * See: https://github.com/unicode-org/icu/blob/af7ed1f6d2298013dc303628438ec4abe1f16479/icu4c/source/common/messagepattern.cpp#L659\n     */\n    Parser.prototype.parseSimpleArgStyleIfPossible = function () {\n        var nestedBraces = 0;\n        var startPosition = this.clonePosition();\n        while (!this.isEOF()) {\n            var ch = this.char();\n            switch (ch) {\n                case 39 /* `'` */: {\n                    // Treat apostrophe as quoting but include it in the style part.\n                    // Find the end of the quoted literal text.\n                    this.bump();\n                    var apostrophePosition = this.clonePosition();\n                    if (!this.bumpUntil(\"'\")) {\n                        return this.error(ErrorKind.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE, createLocation(apostrophePosition, this.clonePosition()));\n                    }\n                    this.bump();\n                    break;\n                }\n                case 123 /* `{` */: {\n                    nestedBraces += 1;\n                    this.bump();\n                    break;\n                }\n                case 125 /* `}` */: {\n                    if (nestedBraces > 0) {\n                        nestedBraces -= 1;\n                    }\n                    else {\n                        return {\n                            val: this.message.slice(startPosition.offset, this.offset()),\n                            err: null,\n                        };\n                    }\n                    break;\n                }\n                default:\n                    this.bump();\n                    break;\n            }\n        }\n        return {\n            val: this.message.slice(startPosition.offset, this.offset()),\n            err: null,\n        };\n    };\n    Parser.prototype.parseNumberSkeletonFromString = function (skeleton, location) {\n        var tokens = [];\n        try {\n            tokens = parseNumberSkeletonFromString(skeleton);\n        }\n        catch (e) {\n            return this.error(ErrorKind.INVALID_NUMBER_SKELETON, location);\n        }\n        return {\n            val: {\n                type: SKELETON_TYPE.number,\n                tokens: tokens,\n                location: location,\n                parsedOptions: this.shouldParseSkeletons\n                    ? parseNumberSkeleton(tokens)\n                    : {},\n            },\n            err: null,\n        };\n    };\n    /**\n     * @param nesting_level The current nesting level of messages.\n     *     This can be positive when parsing message fragment in select or plural argument options.\n     * @param parent_arg_type The parent argument's type.\n     * @param parsed_first_identifier If provided, this is the first identifier-like selector of\n     *     the argument. It is a by-product of a previous parsing attempt.\n     * @param expecting_close_tag If true, this message is directly or indirectly nested inside\n     *     between a pair of opening and closing tags. The nested message will not parse beyond\n     *     the closing tag boundary.\n     */\n    Parser.prototype.tryParsePluralOrSelectOptions = function (nestingLevel, parentArgType, expectCloseTag, parsedFirstIdentifier) {\n        var _a;\n        var hasOtherClause = false;\n        var options = [];\n        var parsedSelectors = new Set();\n        var selector = parsedFirstIdentifier.value, selectorLocation = parsedFirstIdentifier.location;\n        // Parse:\n        // one {one apple}\n        // ^--^\n        while (true) {\n            if (selector.length === 0) {\n                var startPosition = this.clonePosition();\n                if (parentArgType !== 'select' && this.bumpIf('=')) {\n                    // Try parse `={number}` selector\n                    var result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, ErrorKind.INVALID_PLURAL_ARGUMENT_SELECTOR);\n                    if (result.err) {\n                        return result;\n                    }\n                    selectorLocation = createLocation(startPosition, this.clonePosition());\n                    selector = this.message.slice(startPosition.offset, this.offset());\n                }\n                else {\n                    break;\n                }\n            }\n            // Duplicate selector clauses\n            if (parsedSelectors.has(selector)) {\n                return this.error(parentArgType === 'select'\n                    ? ErrorKind.DUPLICATE_SELECT_ARGUMENT_SELECTOR\n                    : ErrorKind.DUPLICATE_PLURAL_ARGUMENT_SELECTOR, selectorLocation);\n            }\n            if (selector === 'other') {\n                hasOtherClause = true;\n            }\n            // Parse:\n            // one {one apple}\n            //     ^----------^\n            this.bumpSpace();\n            var openingBracePosition = this.clonePosition();\n            if (!this.bumpIf('{')) {\n                return this.error(parentArgType === 'select'\n                    ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\n                    : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT, createLocation(this.clonePosition(), this.clonePosition()));\n            }\n            var fragmentResult = this.parseMessage(nestingLevel + 1, parentArgType, expectCloseTag);\n            if (fragmentResult.err) {\n                return fragmentResult;\n            }\n            var argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n            if (argCloseResult.err) {\n                return argCloseResult;\n            }\n            options.push([\n                selector,\n                {\n                    value: fragmentResult.val,\n                    location: createLocation(openingBracePosition, this.clonePosition()),\n                },\n            ]);\n            // Keep track of the existing selectors\n            parsedSelectors.add(selector);\n            // Prep next selector clause.\n            this.bumpSpace();\n            (_a = this.parseIdentifierIfPossible(), selector = _a.value, selectorLocation = _a.location);\n        }\n        if (options.length === 0) {\n            return this.error(parentArgType === 'select'\n                ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR\n                : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, createLocation(this.clonePosition(), this.clonePosition()));\n        }\n        if (this.requiresOtherClause && !hasOtherClause) {\n            return this.error(ErrorKind.MISSING_OTHER_CLAUSE, createLocation(this.clonePosition(), this.clonePosition()));\n        }\n        return { val: options, err: null };\n    };\n    Parser.prototype.tryParseDecimalInteger = function (expectNumberError, invalidNumberError) {\n        var sign = 1;\n        var startingPosition = this.clonePosition();\n        if (this.bumpIf('+')) {\n        }\n        else if (this.bumpIf('-')) {\n            sign = -1;\n        }\n        var hasDigits = false;\n        var decimal = 0;\n        while (!this.isEOF()) {\n            var ch = this.char();\n            if (ch >= 48 /* `0` */ && ch <= 57 /* `9` */) {\n                hasDigits = true;\n                decimal = decimal * 10 + (ch - 48);\n                this.bump();\n            }\n            else {\n                break;\n            }\n        }\n        var location = createLocation(startingPosition, this.clonePosition());\n        if (!hasDigits) {\n            return this.error(expectNumberError, location);\n        }\n        decimal *= sign;\n        if (!isSafeInteger(decimal)) {\n            return this.error(invalidNumberError, location);\n        }\n        return { val: decimal, err: null };\n    };\n    Parser.prototype.offset = function () {\n        return this.position.offset;\n    };\n    Parser.prototype.isEOF = function () {\n        return this.offset() === this.message.length;\n    };\n    Parser.prototype.clonePosition = function () {\n        // This is much faster than `Object.assign` or spread.\n        return {\n            offset: this.position.offset,\n            line: this.position.line,\n            column: this.position.column,\n        };\n    };\n    /**\n     * Return the code point at the current position of the parser.\n     * Throws if the index is out of bound.\n     */\n    Parser.prototype.char = function () {\n        var offset = this.position.offset;\n        if (offset >= this.message.length) {\n            throw Error('out of bound');\n        }\n        var code = codePointAt(this.message, offset);\n        if (code === undefined) {\n            throw Error(\"Offset \".concat(offset, \" is at invalid UTF-16 code unit boundary\"));\n        }\n        return code;\n    };\n    Parser.prototype.error = function (kind, location) {\n        return {\n            val: null,\n            err: {\n                kind: kind,\n                message: this.message,\n                location: location,\n            },\n        };\n    };\n    /** Bump the parser to the next UTF-16 code unit. */\n    Parser.prototype.bump = function () {\n        if (this.isEOF()) {\n            return;\n        }\n        var code = this.char();\n        if (code === 10 /* '\\n' */) {\n            this.position.line += 1;\n            this.position.column = 1;\n            this.position.offset += 1;\n        }\n        else {\n            this.position.column += 1;\n            // 0 ~ 0x10000 -> unicode BMP, otherwise skip the surrogate pair.\n            this.position.offset += code < 0x10000 ? 1 : 2;\n        }\n    };\n    /**\n     * If the substring starting at the current position of the parser has\n     * the given prefix, then bump the parser to the character immediately\n     * following the prefix and return true. Otherwise, don't bump the parser\n     * and return false.\n     */\n    Parser.prototype.bumpIf = function (prefix) {\n        if (startsWith(this.message, prefix, this.offset())) {\n            for (var i = 0; i < prefix.length; i++) {\n                this.bump();\n            }\n            return true;\n        }\n        return false;\n    };\n    /**\n     * Bump the parser until the pattern character is found and return `true`.\n     * Otherwise bump to the end of the file and return `false`.\n     */\n    Parser.prototype.bumpUntil = function (pattern) {\n        var currentOffset = this.offset();\n        var index = this.message.indexOf(pattern, currentOffset);\n        if (index >= 0) {\n            this.bumpTo(index);\n            return true;\n        }\n        else {\n            this.bumpTo(this.message.length);\n            return false;\n        }\n    };\n    /**\n     * Bump the parser to the target offset.\n     * If target offset is beyond the end of the input, bump the parser to the end of the input.\n     */\n    Parser.prototype.bumpTo = function (targetOffset) {\n        if (this.offset() > targetOffset) {\n            throw Error(\"targetOffset \".concat(targetOffset, \" must be greater than or equal to the current offset \").concat(this.offset()));\n        }\n        targetOffset = Math.min(targetOffset, this.message.length);\n        while (true) {\n            var offset = this.offset();\n            if (offset === targetOffset) {\n                break;\n            }\n            if (offset > targetOffset) {\n                throw Error(\"targetOffset \".concat(targetOffset, \" is at invalid UTF-16 code unit boundary\"));\n            }\n            this.bump();\n            if (this.isEOF()) {\n                break;\n            }\n        }\n    };\n    /** advance the parser through all whitespace to the next non-whitespace code unit. */\n    Parser.prototype.bumpSpace = function () {\n        while (!this.isEOF() && _isWhiteSpace(this.char())) {\n            this.bump();\n        }\n    };\n    /**\n     * Peek at the *next* Unicode codepoint in the input without advancing the parser.\n     * If the input has been exhausted, then this returns null.\n     */\n    Parser.prototype.peek = function () {\n        if (this.isEOF()) {\n            return null;\n        }\n        var code = this.char();\n        var offset = this.offset();\n        var nextCode = this.message.charCodeAt(offset + (code >= 0x10000 ? 2 : 1));\n        return nextCode !== null && nextCode !== void 0 ? nextCode : null;\n    };\n    return Parser;\n}());\nexport { Parser };\n/**\n * This check if codepoint is alphabet (lower & uppercase)\n * @param codepoint\n * @returns\n */\nfunction _isAlpha(codepoint) {\n    return ((codepoint >= 97 && codepoint <= 122) ||\n        (codepoint >= 65 && codepoint <= 90));\n}\nfunction _isAlphaOrSlash(codepoint) {\n    return _isAlpha(codepoint) || codepoint === 47; /* '/' */\n}\n/** See `parseTag` function docs. */\nfunction _isPotentialElementNameChar(c) {\n    return (c === 45 /* '-' */ ||\n        c === 46 /* '.' */ ||\n        (c >= 48 && c <= 57) /* 0..9 */ ||\n        c === 95 /* '_' */ ||\n        (c >= 97 && c <= 122) /** a..z */ ||\n        (c >= 65 && c <= 90) /* A..Z */ ||\n        c == 0xb7 ||\n        (c >= 0xc0 && c <= 0xd6) ||\n        (c >= 0xd8 && c <= 0xf6) ||\n        (c >= 0xf8 && c <= 0x37d) ||\n        (c >= 0x37f && c <= 0x1fff) ||\n        (c >= 0x200c && c <= 0x200d) ||\n        (c >= 0x203f && c <= 0x2040) ||\n        (c >= 0x2070 && c <= 0x218f) ||\n        (c >= 0x2c00 && c <= 0x2fef) ||\n        (c >= 0x3001 && c <= 0xd7ff) ||\n        (c >= 0xf900 && c <= 0xfdcf) ||\n        (c >= 0xfdf0 && c <= 0xfffd) ||\n        (c >= 0x10000 && c <= 0xeffff));\n}\n/**\n * Code point equivalent of regex `\\p{White_Space}`.\n * From: https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n */\nfunction _isWhiteSpace(c) {\n    return ((c >= 0x0009 && c <= 0x000d) ||\n        c === 0x0020 ||\n        c === 0x0085 ||\n        (c >= 0x200e && c <= 0x200f) ||\n        c === 0x2028 ||\n        c === 0x2029);\n}\n/**\n * Code point equivalent of regex `\\p{Pattern_Syntax}`.\n * See https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n */\nfunction _isPatternSyntax(c) {\n    return ((c >= 0x0021 && c <= 0x0023) ||\n        c === 0x0024 ||\n        (c >= 0x0025 && c <= 0x0027) ||\n        c === 0x0028 ||\n        c === 0x0029 ||\n        c === 0x002a ||\n        c === 0x002b ||\n        c === 0x002c ||\n        c === 0x002d ||\n        (c >= 0x002e && c <= 0x002f) ||\n        (c >= 0x003a && c <= 0x003b) ||\n        (c >= 0x003c && c <= 0x003e) ||\n        (c >= 0x003f && c <= 0x0040) ||\n        c === 0x005b ||\n        c === 0x005c ||\n        c === 0x005d ||\n        c === 0x005e ||\n        c === 0x0060 ||\n        c === 0x007b ||\n        c === 0x007c ||\n        c === 0x007d ||\n        c === 0x007e ||\n        c === 0x00a1 ||\n        (c >= 0x00a2 && c <= 0x00a5) ||\n        c === 0x00a6 ||\n        c === 0x00a7 ||\n        c === 0x00a9 ||\n        c === 0x00ab ||\n        c === 0x00ac ||\n        c === 0x00ae ||\n        c === 0x00b0 ||\n        c === 0x00b1 ||\n        c === 0x00b6 ||\n        c === 0x00bb ||\n        c === 0x00bf ||\n        c === 0x00d7 ||\n        c === 0x00f7 ||\n        (c >= 0x2010 && c <= 0x2015) ||\n        (c >= 0x2016 && c <= 0x2017) ||\n        c === 0x2018 ||\n        c === 0x2019 ||\n        c === 0x201a ||\n        (c >= 0x201b && c <= 0x201c) ||\n        c === 0x201d ||\n        c === 0x201e ||\n        c === 0x201f ||\n        (c >= 0x2020 && c <= 0x2027) ||\n        (c >= 0x2030 && c <= 0x2038) ||\n        c === 0x2039 ||\n        c === 0x203a ||\n        (c >= 0x203b && c <= 0x203e) ||\n        (c >= 0x2041 && c <= 0x2043) ||\n        c === 0x2044 ||\n        c === 0x2045 ||\n        c === 0x2046 ||\n        (c >= 0x2047 && c <= 0x2051) ||\n        c === 0x2052 ||\n        c === 0x2053 ||\n        (c >= 0x2055 && c <= 0x205e) ||\n        (c >= 0x2190 && c <= 0x2194) ||\n        (c >= 0x2195 && c <= 0x2199) ||\n        (c >= 0x219a && c <= 0x219b) ||\n        (c >= 0x219c && c <= 0x219f) ||\n        c === 0x21a0 ||\n        (c >= 0x21a1 && c <= 0x21a2) ||\n        c === 0x21a3 ||\n        (c >= 0x21a4 && c <= 0x21a5) ||\n        c === 0x21a6 ||\n        (c >= 0x21a7 && c <= 0x21ad) ||\n        c === 0x21ae ||\n        (c >= 0x21af && c <= 0x21cd) ||\n        (c >= 0x21ce && c <= 0x21cf) ||\n        (c >= 0x21d0 && c <= 0x21d1) ||\n        c === 0x21d2 ||\n        c === 0x21d3 ||\n        c === 0x21d4 ||\n        (c >= 0x21d5 && c <= 0x21f3) ||\n        (c >= 0x21f4 && c <= 0x22ff) ||\n        (c >= 0x2300 && c <= 0x2307) ||\n        c === 0x2308 ||\n        c === 0x2309 ||\n        c === 0x230a ||\n        c === 0x230b ||\n        (c >= 0x230c && c <= 0x231f) ||\n        (c >= 0x2320 && c <= 0x2321) ||\n        (c >= 0x2322 && c <= 0x2328) ||\n        c === 0x2329 ||\n        c === 0x232a ||\n        (c >= 0x232b && c <= 0x237b) ||\n        c === 0x237c ||\n        (c >= 0x237d && c <= 0x239a) ||\n        (c >= 0x239b && c <= 0x23b3) ||\n        (c >= 0x23b4 && c <= 0x23db) ||\n        (c >= 0x23dc && c <= 0x23e1) ||\n        (c >= 0x23e2 && c <= 0x2426) ||\n        (c >= 0x2427 && c <= 0x243f) ||\n        (c >= 0x2440 && c <= 0x244a) ||\n        (c >= 0x244b && c <= 0x245f) ||\n        (c >= 0x2500 && c <= 0x25b6) ||\n        c === 0x25b7 ||\n        (c >= 0x25b8 && c <= 0x25c0) ||\n        c === 0x25c1 ||\n        (c >= 0x25c2 && c <= 0x25f7) ||\n        (c >= 0x25f8 && c <= 0x25ff) ||\n        (c >= 0x2600 && c <= 0x266e) ||\n        c === 0x266f ||\n        (c >= 0x2670 && c <= 0x2767) ||\n        c === 0x2768 ||\n        c === 0x2769 ||\n        c === 0x276a ||\n        c === 0x276b ||\n        c === 0x276c ||\n        c === 0x276d ||\n        c === 0x276e ||\n        c === 0x276f ||\n        c === 0x2770 ||\n        c === 0x2771 ||\n        c === 0x2772 ||\n        c === 0x2773 ||\n        c === 0x2774 ||\n        c === 0x2775 ||\n        (c >= 0x2794 && c <= 0x27bf) ||\n        (c >= 0x27c0 && c <= 0x27c4) ||\n        c === 0x27c5 ||\n        c === 0x27c6 ||\n        (c >= 0x27c7 && c <= 0x27e5) ||\n        c === 0x27e6 ||\n        c === 0x27e7 ||\n        c === 0x27e8 ||\n        c === 0x27e9 ||\n        c === 0x27ea ||\n        c === 0x27eb ||\n        c === 0x27ec ||\n        c === 0x27ed ||\n        c === 0x27ee ||\n        c === 0x27ef ||\n        (c >= 0x27f0 && c <= 0x27ff) ||\n        (c >= 0x2800 && c <= 0x28ff) ||\n        (c >= 0x2900 && c <= 0x2982) ||\n        c === 0x2983 ||\n        c === 0x2984 ||\n        c === 0x2985 ||\n        c === 0x2986 ||\n        c === 0x2987 ||\n        c === 0x2988 ||\n        c === 0x2989 ||\n        c === 0x298a ||\n        c === 0x298b ||\n        c === 0x298c ||\n        c === 0x298d ||\n        c === 0x298e ||\n        c === 0x298f ||\n        c === 0x2990 ||\n        c === 0x2991 ||\n        c === 0x2992 ||\n        c === 0x2993 ||\n        c === 0x2994 ||\n        c === 0x2995 ||\n        c === 0x2996 ||\n        c === 0x2997 ||\n        c === 0x2998 ||\n        (c >= 0x2999 && c <= 0x29d7) ||\n        c === 0x29d8 ||\n        c === 0x29d9 ||\n        c === 0x29da ||\n        c === 0x29db ||\n        (c >= 0x29dc && c <= 0x29fb) ||\n        c === 0x29fc ||\n        c === 0x29fd ||\n        (c >= 0x29fe && c <= 0x2aff) ||\n        (c >= 0x2b00 && c <= 0x2b2f) ||\n        (c >= 0x2b30 && c <= 0x2b44) ||\n        (c >= 0x2b45 && c <= 0x2b46) ||\n        (c >= 0x2b47 && c <= 0x2b4c) ||\n        (c >= 0x2b4d && c <= 0x2b73) ||\n        (c >= 0x2b74 && c <= 0x2b75) ||\n        (c >= 0x2b76 && c <= 0x2b95) ||\n        c === 0x2b96 ||\n        (c >= 0x2b97 && c <= 0x2bff) ||\n        (c >= 0x2e00 && c <= 0x2e01) ||\n        c === 0x2e02 ||\n        c === 0x2e03 ||\n        c === 0x2e04 ||\n        c === 0x2e05 ||\n        (c >= 0x2e06 && c <= 0x2e08) ||\n        c === 0x2e09 ||\n        c === 0x2e0a ||\n        c === 0x2e0b ||\n        c === 0x2e0c ||\n        c === 0x2e0d ||\n        (c >= 0x2e0e && c <= 0x2e16) ||\n        c === 0x2e17 ||\n        (c >= 0x2e18 && c <= 0x2e19) ||\n        c === 0x2e1a ||\n        c === 0x2e1b ||\n        c === 0x2e1c ||\n        c === 0x2e1d ||\n        (c >= 0x2e1e && c <= 0x2e1f) ||\n        c === 0x2e20 ||\n        c === 0x2e21 ||\n        c === 0x2e22 ||\n        c === 0x2e23 ||\n        c === 0x2e24 ||\n        c === 0x2e25 ||\n        c === 0x2e26 ||\n        c === 0x2e27 ||\n        c === 0x2e28 ||\n        c === 0x2e29 ||\n        (c >= 0x2e2a && c <= 0x2e2e) ||\n        c === 0x2e2f ||\n        (c >= 0x2e30 && c <= 0x2e39) ||\n        (c >= 0x2e3a && c <= 0x2e3b) ||\n        (c >= 0x2e3c && c <= 0x2e3f) ||\n        c === 0x2e40 ||\n        c === 0x2e41 ||\n        c === 0x2e42 ||\n        (c >= 0x2e43 && c <= 0x2e4f) ||\n        (c >= 0x2e50 && c <= 0x2e51) ||\n        c === 0x2e52 ||\n        (c >= 0x2e53 && c <= 0x2e7f) ||\n        (c >= 0x3001 && c <= 0x3003) ||\n        c === 0x3008 ||\n        c === 0x3009 ||\n        c === 0x300a ||\n        c === 0x300b ||\n        c === 0x300c ||\n        c === 0x300d ||\n        c === 0x300e ||\n        c === 0x300f ||\n        c === 0x3010 ||\n        c === 0x3011 ||\n        (c >= 0x3012 && c <= 0x3013) ||\n        c === 0x3014 ||\n        c === 0x3015 ||\n        c === 0x3016 ||\n        c === 0x3017 ||\n        c === 0x3018 ||\n        c === 0x3019 ||\n        c === 0x301a ||\n        c === 0x301b ||\n        c === 0x301c ||\n        c === 0x301d ||\n        (c >= 0x301e && c <= 0x301f) ||\n        c === 0x3020 ||\n        c === 0x3030 ||\n        c === 0xfd3e ||\n        c === 0xfd3f ||\n        (c >= 0xfe45 && c <= 0xfe46));\n}\n","import { __assign } from \"tslib\";\nimport { ErrorKind } from './error';\nimport { Parser } from './parser';\nimport { isDateElement, isDateTimeSkeleton, isNumberElement, isNumberSkeleton, isPluralElement, isSelectElement, isTagElement, isTimeElement, } from './types';\nfunction pruneLocation(els) {\n    els.forEach(function (el) {\n        delete el.location;\n        if (isSelectElement(el) || isPluralElement(el)) {\n            for (var k in el.options) {\n                delete el.options[k].location;\n                pruneLocation(el.options[k].value);\n            }\n        }\n        else if (isNumberElement(el) && isNumberSkeleton(el.style)) {\n            delete el.style.location;\n        }\n        else if ((isDateElement(el) || isTimeElement(el)) &&\n            isDateTimeSkeleton(el.style)) {\n            delete el.style.location;\n        }\n        else if (isTagElement(el)) {\n            pruneLocation(el.children);\n        }\n    });\n}\nexport function parse(message, opts) {\n    if (opts === void 0) { opts = {}; }\n    opts = __assign({ shouldParseSkeletons: true, requiresOtherClause: true }, opts);\n    var result = new Parser(message, opts).parse();\n    if (result.err) {\n        var error = SyntaxError(ErrorKind[result.err.kind]);\n        // @ts-expect-error Assign to error object\n        error.location = result.err.location;\n        // @ts-expect-error Assign to error object\n        error.originalMessage = result.err.message;\n        throw error;\n    }\n    if (!(opts === null || opts === void 0 ? void 0 : opts.captureLocation)) {\n        pruneLocation(result.val);\n    }\n    return result.val;\n}\nexport * from './types';\n// only for testing\nexport var _Parser = Parser;\nexport { isStructurallySame } from './manipulator';\n","import { __extends } from \"tslib\";\nexport var ErrorCode;\n(function (ErrorCode) {\n    // When we have a placeholder but no value to format\n    ErrorCode[\"MISSING_VALUE\"] = \"MISSING_VALUE\";\n    // When value supplied is invalid\n    ErrorCode[\"INVALID_VALUE\"] = \"INVALID_VALUE\";\n    // When we need specific Intl API but it's not available\n    ErrorCode[\"MISSING_INTL_API\"] = \"MISSING_INTL_API\";\n})(ErrorCode || (ErrorCode = {}));\nvar FormatError = /** @class */ (function (_super) {\n    __extends(FormatError, _super);\n    function FormatError(msg, code, originalMessage) {\n        var _this = _super.call(this, msg) || this;\n        _this.code = code;\n        _this.originalMessage = originalMessage;\n        return _this;\n    }\n    FormatError.prototype.toString = function () {\n        return \"[formatjs Error: \".concat(this.code, \"] \").concat(this.message);\n    };\n    return FormatError;\n}(Error));\nexport { FormatError };\nvar InvalidValueError = /** @class */ (function (_super) {\n    __extends(InvalidValueError, _super);\n    function InvalidValueError(variableId, value, options, originalMessage) {\n        return _super.call(this, \"Invalid values for \\\"\".concat(variableId, \"\\\": \\\"\").concat(value, \"\\\". Options are \\\"\").concat(Object.keys(options).join('\", \"'), \"\\\"\"), ErrorCode.INVALID_VALUE, originalMessage) || this;\n    }\n    return InvalidValueError;\n}(FormatError));\nexport { InvalidValueError };\nvar InvalidValueTypeError = /** @class */ (function (_super) {\n    __extends(InvalidValueTypeError, _super);\n    function InvalidValueTypeError(value, type, originalMessage) {\n        return _super.call(this, \"Value for \\\"\".concat(value, \"\\\" must be of type \").concat(type), ErrorCode.INVALID_VALUE, originalMessage) || this;\n    }\n    return InvalidValueTypeError;\n}(FormatError));\nexport { InvalidValueTypeError };\nvar MissingValueError = /** @class */ (function (_super) {\n    __extends(MissingValueError, _super);\n    function MissingValueError(variableId, originalMessage) {\n        return _super.call(this, \"The intl string context variable \\\"\".concat(variableId, \"\\\" was not provided to the string \\\"\").concat(originalMessage, \"\\\"\"), ErrorCode.MISSING_VALUE, originalMessage) || this;\n    }\n    return MissingValueError;\n}(FormatError));\nexport { MissingValueError };\n","import { isArgumentElement, isDateElement, isDateTimeSkeleton, isLiteralElement, isNumberElement, isNumberSkeleton, isPluralElement, isPoundElement, isSelectElement, isTagElement, isTimeElement, } from '@formatjs/icu-messageformat-parser';\nimport { ErrorCode, FormatError, InvalidValueError, InvalidValueTypeError, MissingValueError, } from './error';\nexport var PART_TYPE;\n(function (PART_TYPE) {\n    PART_TYPE[PART_TYPE[\"literal\"] = 0] = \"literal\";\n    PART_TYPE[PART_TYPE[\"object\"] = 1] = \"object\";\n})(PART_TYPE || (PART_TYPE = {}));\nfunction mergeLiteral(parts) {\n    if (parts.length < 2) {\n        return parts;\n    }\n    return parts.reduce(function (all, part) {\n        var lastPart = all[all.length - 1];\n        if (!lastPart ||\n            lastPart.type !== PART_TYPE.literal ||\n            part.type !== PART_TYPE.literal) {\n            all.push(part);\n        }\n        else {\n            lastPart.value += part.value;\n        }\n        return all;\n    }, []);\n}\nexport function isFormatXMLElementFn(el) {\n    return typeof el === 'function';\n}\n// TODO(skeleton): add skeleton support\nexport function formatToParts(els, locales, formatters, formats, values, currentPluralValue, \n// For debugging\noriginalMessage) {\n    // Hot path for straight simple msg translations\n    if (els.length === 1 && isLiteralElement(els[0])) {\n        return [\n            {\n                type: PART_TYPE.literal,\n                value: els[0].value,\n            },\n        ];\n    }\n    var result = [];\n    for (var _i = 0, els_1 = els; _i < els_1.length; _i++) {\n        var el = els_1[_i];\n        // Exit early for string parts.\n        if (isLiteralElement(el)) {\n            result.push({\n                type: PART_TYPE.literal,\n                value: el.value,\n            });\n            continue;\n        }\n        // TODO: should this part be literal type?\n        // Replace `#` in plural rules with the actual numeric value.\n        if (isPoundElement(el)) {\n            if (typeof currentPluralValue === 'number') {\n                result.push({\n                    type: PART_TYPE.literal,\n                    value: formatters.getNumberFormat(locales).format(currentPluralValue),\n                });\n            }\n            continue;\n        }\n        var varName = el.value;\n        // Enforce that all required values are provided by the caller.\n        if (!(values && varName in values)) {\n            throw new MissingValueError(varName, originalMessage);\n        }\n        var value = values[varName];\n        if (isArgumentElement(el)) {\n            if (!value || typeof value === 'string' || typeof value === 'number') {\n                value =\n                    typeof value === 'string' || typeof value === 'number'\n                        ? String(value)\n                        : '';\n            }\n            result.push({\n                type: typeof value === 'string' ? PART_TYPE.literal : PART_TYPE.object,\n                value: value,\n            });\n            continue;\n        }\n        // Recursively format plural and select parts' option — which can be a\n        // nested pattern structure. The choosing of the option to use is\n        // abstracted-by and delegated-to the part helper object.\n        if (isDateElement(el)) {\n            var style = typeof el.style === 'string'\n                ? formats.date[el.style]\n                : isDateTimeSkeleton(el.style)\n                    ? el.style.parsedOptions\n                    : undefined;\n            result.push({\n                type: PART_TYPE.literal,\n                value: formatters\n                    .getDateTimeFormat(locales, style)\n                    .format(value),\n            });\n            continue;\n        }\n        if (isTimeElement(el)) {\n            var style = typeof el.style === 'string'\n                ? formats.time[el.style]\n                : isDateTimeSkeleton(el.style)\n                    ? el.style.parsedOptions\n                    : formats.time.medium;\n            result.push({\n                type: PART_TYPE.literal,\n                value: formatters\n                    .getDateTimeFormat(locales, style)\n                    .format(value),\n            });\n            continue;\n        }\n        if (isNumberElement(el)) {\n            var style = typeof el.style === 'string'\n                ? formats.number[el.style]\n                : isNumberSkeleton(el.style)\n                    ? el.style.parsedOptions\n                    : undefined;\n            if (style && style.scale) {\n                value =\n                    value *\n                        (style.scale || 1);\n            }\n            result.push({\n                type: PART_TYPE.literal,\n                value: formatters\n                    .getNumberFormat(locales, style)\n                    .format(value),\n            });\n            continue;\n        }\n        if (isTagElement(el)) {\n            var children = el.children, value_1 = el.value;\n            var formatFn = values[value_1];\n            if (!isFormatXMLElementFn(formatFn)) {\n                throw new InvalidValueTypeError(value_1, 'function', originalMessage);\n            }\n            var parts = formatToParts(children, locales, formatters, formats, values, currentPluralValue);\n            var chunks = formatFn(parts.map(function (p) { return p.value; }));\n            if (!Array.isArray(chunks)) {\n                chunks = [chunks];\n            }\n            result.push.apply(result, chunks.map(function (c) {\n                return {\n                    type: typeof c === 'string' ? PART_TYPE.literal : PART_TYPE.object,\n                    value: c,\n                };\n            }));\n        }\n        if (isSelectElement(el)) {\n            var opt = el.options[value] || el.options.other;\n            if (!opt) {\n                throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n            }\n            result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values));\n            continue;\n        }\n        if (isPluralElement(el)) {\n            var opt = el.options[\"=\".concat(value)];\n            if (!opt) {\n                if (!Intl.PluralRules) {\n                    throw new FormatError(\"Intl.PluralRules is not available in this environment.\\nTry polyfilling it using \\\"@formatjs/intl-pluralrules\\\"\\n\", ErrorCode.MISSING_INTL_API, originalMessage);\n                }\n                var rule = formatters\n                    .getPluralRules(locales, { type: el.pluralType })\n                    .select(value - (el.offset || 0));\n                opt = el.options[rule] || el.options.other;\n            }\n            if (!opt) {\n                throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n            }\n            result.push.apply(result, formatToParts(opt.value, locales, formatters, formats, values, value - (el.offset || 0)));\n            continue;\n        }\n    }\n    return mergeLiteral(result);\n}\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\nimport { __assign, __rest, __spreadArray } from \"tslib\";\nimport { memoize, strategies } from '@formatjs/fast-memoize';\nimport { parse, } from '@formatjs/icu-messageformat-parser';\nimport { formatToParts, PART_TYPE, } from './formatters';\n// -- MessageFormat --------------------------------------------------------\nfunction mergeConfig(c1, c2) {\n    if (!c2) {\n        return c1;\n    }\n    return __assign(__assign(__assign({}, (c1 || {})), (c2 || {})), Object.keys(c1).reduce(function (all, k) {\n        all[k] = __assign(__assign({}, c1[k]), (c2[k] || {}));\n        return all;\n    }, {}));\n}\nfunction mergeConfigs(defaultConfig, configs) {\n    if (!configs) {\n        return defaultConfig;\n    }\n    return Object.keys(defaultConfig).reduce(function (all, k) {\n        all[k] = mergeConfig(defaultConfig[k], configs[k]);\n        return all;\n    }, __assign({}, defaultConfig));\n}\nfunction createFastMemoizeCache(store) {\n    return {\n        create: function () {\n            return {\n                get: function (key) {\n                    return store[key];\n                },\n                set: function (key, value) {\n                    store[key] = value;\n                },\n            };\n        },\n    };\n}\nfunction createDefaultFormatters(cache) {\n    if (cache === void 0) { cache = {\n        number: {},\n        dateTime: {},\n        pluralRules: {},\n    }; }\n    return {\n        getNumberFormat: memoize(function () {\n            var _a;\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new ((_a = Intl.NumberFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.number),\n            strategy: strategies.variadic,\n        }),\n        getDateTimeFormat: memoize(function () {\n            var _a;\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new ((_a = Intl.DateTimeFormat).bind.apply(_a, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.dateTime),\n            strategy: strategies.variadic,\n        }),\n        getPluralRules: memoize(function () {\n            var _a;\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return new ((_a = Intl.PluralRules).bind.apply(_a, __spreadArray([void 0], args, false)))();\n        }, {\n            cache: createFastMemoizeCache(cache.pluralRules),\n            strategy: strategies.variadic,\n        }),\n    };\n}\nvar IntlMessageFormat = /** @class */ (function () {\n    function IntlMessageFormat(message, locales, overrideFormats, opts) {\n        if (locales === void 0) { locales = IntlMessageFormat.defaultLocale; }\n        var _this = this;\n        this.formatterCache = {\n            number: {},\n            dateTime: {},\n            pluralRules: {},\n        };\n        this.format = function (values) {\n            var parts = _this.formatToParts(values);\n            // Hot path for straight simple msg translations\n            if (parts.length === 1) {\n                return parts[0].value;\n            }\n            var result = parts.reduce(function (all, part) {\n                if (!all.length ||\n                    part.type !== PART_TYPE.literal ||\n                    typeof all[all.length - 1] !== 'string') {\n                    all.push(part.value);\n                }\n                else {\n                    all[all.length - 1] += part.value;\n                }\n                return all;\n            }, []);\n            if (result.length <= 1) {\n                return result[0] || '';\n            }\n            return result;\n        };\n        this.formatToParts = function (values) {\n            return formatToParts(_this.ast, _this.locales, _this.formatters, _this.formats, values, undefined, _this.message);\n        };\n        this.resolvedOptions = function () {\n            var _a;\n            return ({\n                locale: ((_a = _this.resolvedLocale) === null || _a === void 0 ? void 0 : _a.toString()) ||\n                    Intl.NumberFormat.supportedLocalesOf(_this.locales)[0],\n            });\n        };\n        this.getAst = function () { return _this.ast; };\n        // Defined first because it's used to build the format pattern.\n        this.locales = locales;\n        this.resolvedLocale = IntlMessageFormat.resolveLocale(locales);\n        if (typeof message === 'string') {\n            this.message = message;\n            if (!IntlMessageFormat.__parse) {\n                throw new TypeError('IntlMessageFormat.__parse must be set to process `message` of type `string`');\n            }\n            var _a = opts || {}, formatters = _a.formatters, parseOpts = __rest(_a, [\"formatters\"]);\n            // Parse string messages into an AST.\n            this.ast = IntlMessageFormat.__parse(message, __assign(__assign({}, parseOpts), { locale: this.resolvedLocale }));\n        }\n        else {\n            this.ast = message;\n        }\n        if (!Array.isArray(this.ast)) {\n            throw new TypeError('A message must be provided as a String or AST.');\n        }\n        // Creates a new object with the specified `formats` merged with the default\n        // formats.\n        this.formats = mergeConfigs(IntlMessageFormat.formats, overrideFormats);\n        this.formatters =\n            (opts && opts.formatters) || createDefaultFormatters(this.formatterCache);\n    }\n    Object.defineProperty(IntlMessageFormat, \"defaultLocale\", {\n        get: function () {\n            if (!IntlMessageFormat.memoizedDefaultLocale) {\n                IntlMessageFormat.memoizedDefaultLocale =\n                    new Intl.NumberFormat().resolvedOptions().locale;\n            }\n            return IntlMessageFormat.memoizedDefaultLocale;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    IntlMessageFormat.memoizedDefaultLocale = null;\n    IntlMessageFormat.resolveLocale = function (locales) {\n        if (typeof Intl.Locale === 'undefined') {\n            return;\n        }\n        var supportedLocales = Intl.NumberFormat.supportedLocalesOf(locales);\n        if (supportedLocales.length > 0) {\n            return new Intl.Locale(supportedLocales[0]);\n        }\n        return new Intl.Locale(typeof locales === 'string' ? locales : locales[0]);\n    };\n    IntlMessageFormat.__parse = parse;\n    // Default format options used as the prototype of the `formats` provided to the\n    // constructor. These are used when constructing the internal Intl.NumberFormat\n    // and Intl.DateTimeFormat instances.\n    IntlMessageFormat.formats = {\n        number: {\n            integer: {\n                maximumFractionDigits: 0,\n            },\n            currency: {\n                style: 'currency',\n            },\n            percent: {\n                style: 'percent',\n            },\n        },\n        date: {\n            short: {\n                month: 'numeric',\n                day: 'numeric',\n                year: '2-digit',\n            },\n            medium: {\n                month: 'short',\n                day: 'numeric',\n                year: 'numeric',\n            },\n            long: {\n                month: 'long',\n                day: 'numeric',\n                year: 'numeric',\n            },\n            full: {\n                weekday: 'long',\n                month: 'long',\n                day: 'numeric',\n                year: 'numeric',\n            },\n        },\n        time: {\n            short: {\n                hour: 'numeric',\n                minute: 'numeric',\n            },\n            medium: {\n                hour: 'numeric',\n                minute: 'numeric',\n                second: 'numeric',\n            },\n            long: {\n                hour: 'numeric',\n                minute: 'numeric',\n                second: 'numeric',\n                timeZoneName: 'short',\n            },\n            full: {\n                hour: 'numeric',\n                minute: 'numeric',\n                second: 'numeric',\n                timeZoneName: 'short',\n            },\n        },\n    };\n    return IntlMessageFormat;\n}());\nexport { IntlMessageFormat };\n","import { writable, derived } from 'svelte/store';\nimport deepmerge from 'deepmerge';\nimport { IntlMessageFormat } from 'intl-messageformat';\n\nfunction delve(obj, fullKey) {\n  if (fullKey == null)\n    return void 0;\n  if (fullKey in obj) {\n    return obj[fullKey];\n  }\n  const keys = fullKey.split(\".\");\n  let result = obj;\n  for (let p = 0; p < keys.length; p++) {\n    if (typeof result === \"object\") {\n      if (p > 0) {\n        const partialKey = keys.slice(p, keys.length).join(\".\");\n        if (partialKey in result) {\n          result = result[partialKey];\n          break;\n        }\n      }\n      result = result[keys[p]];\n    } else {\n      result = void 0;\n    }\n  }\n  return result;\n}\n\nconst lookupCache = {};\nconst addToCache = (path, locale, message) => {\n  if (!message)\n    return message;\n  if (!(locale in lookupCache))\n    lookupCache[locale] = {};\n  if (!(path in lookupCache[locale]))\n    lookupCache[locale][path] = message;\n  return message;\n};\nconst lookup = (path, refLocale) => {\n  if (refLocale == null)\n    return void 0;\n  if (refLocale in lookupCache && path in lookupCache[refLocale]) {\n    return lookupCache[refLocale][path];\n  }\n  const locales = getPossibleLocales(refLocale);\n  for (let i = 0; i < locales.length; i++) {\n    const locale = locales[i];\n    const message = getMessageFromDictionary(locale, path);\n    if (message) {\n      return addToCache(path, refLocale, message);\n    }\n  }\n  return void 0;\n};\n\nlet dictionary;\nconst $dictionary = writable({});\nfunction getLocaleDictionary(locale) {\n  return dictionary[locale] || null;\n}\nfunction hasLocaleDictionary(locale) {\n  return locale in dictionary;\n}\nfunction getMessageFromDictionary(locale, id) {\n  if (!hasLocaleDictionary(locale)) {\n    return null;\n  }\n  const localeDictionary = getLocaleDictionary(locale);\n  const match = delve(localeDictionary, id);\n  return match;\n}\nfunction getClosestAvailableLocale(refLocale) {\n  if (refLocale == null)\n    return void 0;\n  const relatedLocales = getPossibleLocales(refLocale);\n  for (let i = 0; i < relatedLocales.length; i++) {\n    const locale = relatedLocales[i];\n    if (hasLocaleDictionary(locale)) {\n      return locale;\n    }\n  }\n  return void 0;\n}\nfunction addMessages(locale, ...partials) {\n  delete lookupCache[locale];\n  $dictionary.update((d) => {\n    d[locale] = deepmerge.all([d[locale] || {}, ...partials]);\n    return d;\n  });\n}\nconst $locales = derived(\n  [$dictionary],\n  ([dictionary2]) => Object.keys(dictionary2)\n);\n$dictionary.subscribe((newDictionary) => dictionary = newDictionary);\n\nconst queue = {};\nfunction createLocaleQueue(locale) {\n  queue[locale] = /* @__PURE__ */ new Set();\n}\nfunction removeLoaderFromQueue(locale, loader) {\n  queue[locale].delete(loader);\n  if (queue[locale].size === 0) {\n    delete queue[locale];\n  }\n}\nfunction getLocaleQueue(locale) {\n  return queue[locale];\n}\nfunction getLocalesQueues(locale) {\n  return getPossibleLocales(locale).map((localeItem) => {\n    const localeQueue = getLocaleQueue(localeItem);\n    return [localeItem, localeQueue ? [...localeQueue] : []];\n  }).filter(([, localeQueue]) => localeQueue.length > 0);\n}\nfunction hasLocaleQueue(locale) {\n  if (locale == null)\n    return false;\n  return getPossibleLocales(locale).some(\n    (localeQueue) => {\n      var _a;\n      return (_a = getLocaleQueue(localeQueue)) == null ? void 0 : _a.size;\n    }\n  );\n}\nfunction loadLocaleQueue(locale, localeQueue) {\n  const allLoadersPromise = Promise.all(\n    localeQueue.map((loader) => {\n      removeLoaderFromQueue(locale, loader);\n      return loader().then((partial) => partial.default || partial);\n    })\n  );\n  return allLoadersPromise.then((partials) => addMessages(locale, ...partials));\n}\nconst activeFlushes = {};\nfunction flush(locale) {\n  if (!hasLocaleQueue(locale)) {\n    if (locale in activeFlushes) {\n      return activeFlushes[locale];\n    }\n    return Promise.resolve();\n  }\n  const queues = getLocalesQueues(locale);\n  activeFlushes[locale] = Promise.all(\n    queues.map(\n      ([localeName, localeQueue]) => loadLocaleQueue(localeName, localeQueue)\n    )\n  ).then(() => {\n    if (hasLocaleQueue(locale)) {\n      return flush(locale);\n    }\n    delete activeFlushes[locale];\n  });\n  return activeFlushes[locale];\n}\nfunction registerLocaleLoader(locale, loader) {\n  if (!getLocaleQueue(locale))\n    createLocaleQueue(locale);\n  const localeQueue = getLocaleQueue(locale);\n  if (getLocaleQueue(locale).has(loader))\n    return;\n  if (!hasLocaleDictionary(locale)) {\n    $dictionary.update((d) => {\n      d[locale] = {};\n      return d;\n    });\n  }\n  localeQueue.add(loader);\n}\n\nvar __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$2 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$2 = Object.prototype.propertyIsEnumerable;\nvar __objRest$1 = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp$2.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols$2)\n    for (var prop of __getOwnPropSymbols$2(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum$2.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nconst defaultFormats = {\n  number: {\n    scientific: { notation: \"scientific\" },\n    engineering: { notation: \"engineering\" },\n    compactLong: { notation: \"compact\", compactDisplay: \"long\" },\n    compactShort: { notation: \"compact\", compactDisplay: \"short\" }\n  },\n  date: {\n    short: { month: \"numeric\", day: \"numeric\", year: \"2-digit\" },\n    medium: { month: \"short\", day: \"numeric\", year: \"numeric\" },\n    long: { month: \"long\", day: \"numeric\", year: \"numeric\" },\n    full: { weekday: \"long\", month: \"long\", day: \"numeric\", year: \"numeric\" }\n  },\n  time: {\n    short: { hour: \"numeric\", minute: \"numeric\" },\n    medium: { hour: \"numeric\", minute: \"numeric\", second: \"numeric\" },\n    long: {\n      hour: \"numeric\",\n      minute: \"numeric\",\n      second: \"numeric\",\n      timeZoneName: \"short\"\n    },\n    full: {\n      hour: \"numeric\",\n      minute: \"numeric\",\n      second: \"numeric\",\n      timeZoneName: \"short\"\n    }\n  }\n};\nfunction defaultMissingKeyHandler({ locale, id }) {\n  console.warn(\n    `[svelte-i18n] The message \"${id}\" was not found in \"${getPossibleLocales(\n      locale\n    ).join('\", \"')}\".${hasLocaleQueue(getCurrentLocale()) ? `\n\nNote: there are at least one loader still registered to this locale that wasn't executed.` : \"\"}`\n  );\n}\nconst defaultOptions = {\n  fallbackLocale: null,\n  loadingDelay: 200,\n  formats: defaultFormats,\n  warnOnMissingMessages: true,\n  handleMissingMessage: void 0,\n  ignoreTag: true\n};\nconst options = defaultOptions;\nfunction getOptions() {\n  return options;\n}\nfunction init(opts) {\n  const _a = opts, { formats } = _a, rest = __objRest$1(_a, [\"formats\"]);\n  let initialLocale = opts.fallbackLocale;\n  if (opts.initialLocale) {\n    try {\n      if (IntlMessageFormat.resolveLocale(opts.initialLocale)) {\n        initialLocale = opts.initialLocale;\n      }\n    } catch (e) {\n      console.warn(\n        `[svelte-i18n] The initial locale \"${opts.initialLocale}\" is not a valid locale.`\n      );\n    }\n  }\n  if (rest.warnOnMissingMessages) {\n    delete rest.warnOnMissingMessages;\n    if (rest.handleMissingMessage == null) {\n      rest.handleMissingMessage = defaultMissingKeyHandler;\n    } else {\n      console.warn(\n        '[svelte-i18n] The \"warnOnMissingMessages\" option is deprecated. Please use the \"handleMissingMessage\" option instead.'\n      );\n    }\n  }\n  Object.assign(options, rest, { initialLocale });\n  if (formats) {\n    if (\"number\" in formats) {\n      Object.assign(options.formats.number, formats.number);\n    }\n    if (\"date\" in formats) {\n      Object.assign(options.formats.date, formats.date);\n    }\n    if (\"time\" in formats) {\n      Object.assign(options.formats.time, formats.time);\n    }\n  }\n  return $locale.set(initialLocale);\n}\n\nconst $isLoading = writable(false);\n\nvar __defProp$1 = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;\nvar __hasOwnProp$1 = Object.prototype.hasOwnProperty;\nvar __propIsEnum$1 = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues$1 = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp$1.call(b, prop))\n      __defNormalProp$1(a, prop, b[prop]);\n  if (__getOwnPropSymbols$1)\n    for (var prop of __getOwnPropSymbols$1(b)) {\n      if (__propIsEnum$1.call(b, prop))\n        __defNormalProp$1(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nlet current;\nconst internalLocale = writable(null);\nfunction getSubLocales(refLocale) {\n  return refLocale.split(\"-\").map((_, i, arr) => arr.slice(0, i + 1).join(\"-\")).reverse();\n}\nfunction getPossibleLocales(refLocale, fallbackLocale = getOptions().fallbackLocale) {\n  const locales = getSubLocales(refLocale);\n  if (fallbackLocale) {\n    return [.../* @__PURE__ */ new Set([...locales, ...getSubLocales(fallbackLocale)])];\n  }\n  return locales;\n}\nfunction getCurrentLocale() {\n  return current != null ? current : void 0;\n}\ninternalLocale.subscribe((newLocale) => {\n  current = newLocale != null ? newLocale : void 0;\n  if (typeof window !== \"undefined\" && newLocale != null) {\n    document.documentElement.setAttribute(\"lang\", newLocale);\n  }\n});\nconst set = (newLocale) => {\n  if (newLocale && getClosestAvailableLocale(newLocale) && hasLocaleQueue(newLocale)) {\n    const { loadingDelay } = getOptions();\n    let loadingTimer;\n    if (typeof window !== \"undefined\" && getCurrentLocale() != null && loadingDelay) {\n      loadingTimer = window.setTimeout(\n        () => $isLoading.set(true),\n        loadingDelay\n      );\n    } else {\n      $isLoading.set(true);\n    }\n    return flush(newLocale).then(() => {\n      internalLocale.set(newLocale);\n    }).finally(() => {\n      clearTimeout(loadingTimer);\n      $isLoading.set(false);\n    });\n  }\n  return internalLocale.set(newLocale);\n};\nconst $locale = __spreadProps(__spreadValues$1({}, internalLocale), {\n  set\n});\n\nconst getFromQueryString = (queryString, key) => {\n  const keyVal = queryString.split(\"&\").find((i) => i.indexOf(`${key}=`) === 0);\n  if (keyVal) {\n    return keyVal.split(\"=\").pop();\n  }\n  return null;\n};\nconst getFirstMatch = (base, pattern) => {\n  const match = pattern.exec(base);\n  if (!match)\n    return null;\n  return match[1] || null;\n};\nconst getLocaleFromHostname = (hostname) => {\n  if (typeof window === \"undefined\")\n    return null;\n  return getFirstMatch(window.location.hostname, hostname);\n};\nconst getLocaleFromPathname = (pathname) => {\n  if (typeof window === \"undefined\")\n    return null;\n  return getFirstMatch(window.location.pathname, pathname);\n};\nconst getLocaleFromNavigator = () => {\n  if (typeof window === \"undefined\")\n    return null;\n  return window.navigator.language || window.navigator.languages[0];\n};\nconst getLocaleFromQueryString = (search) => {\n  if (typeof window === \"undefined\")\n    return null;\n  return getFromQueryString(window.location.search.substr(1), search);\n};\nconst getLocaleFromHash = (hash) => {\n  if (typeof window === \"undefined\")\n    return null;\n  return getFromQueryString(window.location.hash.substr(1), hash);\n};\n\nconst monadicMemoize = (fn) => {\n  const cache = /* @__PURE__ */ Object.create(null);\n  const memoizedFn = (arg) => {\n    const cacheKey = JSON.stringify(arg);\n    if (cacheKey in cache) {\n      return cache[cacheKey];\n    }\n    return cache[cacheKey] = fn(arg);\n  };\n  return memoizedFn;\n};\n\nvar __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp.call(b, prop))\n      __defNormalProp(a, prop, b[prop]);\n  if (__getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(b)) {\n      if (__propIsEnum.call(b, prop))\n        __defNormalProp(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __objRest = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nconst getIntlFormatterOptions = (type, name) => {\n  const { formats } = getOptions();\n  if (type in formats && name in formats[type]) {\n    return formats[type][name];\n  }\n  throw new Error(`[svelte-i18n] Unknown \"${name}\" ${type} format.`);\n};\nconst createNumberFormatter = monadicMemoize(\n  (_a) => {\n    var _b = _a, { locale, format } = _b, options = __objRest(_b, [\"locale\", \"format\"]);\n    if (locale == null) {\n      throw new Error('[svelte-i18n] A \"locale\" must be set to format numbers');\n    }\n    if (format) {\n      options = getIntlFormatterOptions(\"number\", format);\n    }\n    return new Intl.NumberFormat(locale, options);\n  }\n);\nconst createDateFormatter = monadicMemoize(\n  (_c) => {\n    var _d = _c, { locale, format } = _d, options = __objRest(_d, [\"locale\", \"format\"]);\n    if (locale == null) {\n      throw new Error('[svelte-i18n] A \"locale\" must be set to format dates');\n    }\n    if (format) {\n      options = getIntlFormatterOptions(\"date\", format);\n    } else if (Object.keys(options).length === 0) {\n      options = getIntlFormatterOptions(\"date\", \"short\");\n    }\n    return new Intl.DateTimeFormat(locale, options);\n  }\n);\nconst createTimeFormatter = monadicMemoize(\n  (_e) => {\n    var _f = _e, { locale, format } = _f, options = __objRest(_f, [\"locale\", \"format\"]);\n    if (locale == null) {\n      throw new Error(\n        '[svelte-i18n] A \"locale\" must be set to format time values'\n      );\n    }\n    if (format) {\n      options = getIntlFormatterOptions(\"time\", format);\n    } else if (Object.keys(options).length === 0) {\n      options = getIntlFormatterOptions(\"time\", \"short\");\n    }\n    return new Intl.DateTimeFormat(locale, options);\n  }\n);\nconst getNumberFormatter = (_g = {}) => {\n  var _h = _g, {\n    locale = getCurrentLocale()\n  } = _h, args = __objRest(_h, [\n    \"locale\"\n  ]);\n  return createNumberFormatter(__spreadValues({ locale }, args));\n};\nconst getDateFormatter = (_i = {}) => {\n  var _j = _i, {\n    locale = getCurrentLocale()\n  } = _j, args = __objRest(_j, [\n    \"locale\"\n  ]);\n  return createDateFormatter(__spreadValues({ locale }, args));\n};\nconst getTimeFormatter = (_k = {}) => {\n  var _l = _k, {\n    locale = getCurrentLocale()\n  } = _l, args = __objRest(_l, [\n    \"locale\"\n  ]);\n  return createTimeFormatter(__spreadValues({ locale }, args));\n};\nconst getMessageFormatter = monadicMemoize(\n  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n  (message, locale = getCurrentLocale()) => new IntlMessageFormat(message, locale, getOptions().formats, {\n    ignoreTag: getOptions().ignoreTag\n  })\n);\n\nconst formatMessage = (id, options = {}) => {\n  var _a, _b, _c, _d;\n  let messageObj = options;\n  if (typeof id === \"object\") {\n    messageObj = id;\n    id = messageObj.id;\n  }\n  const {\n    values,\n    locale = getCurrentLocale(),\n    default: defaultValue\n  } = messageObj;\n  if (locale == null) {\n    throw new Error(\n      \"[svelte-i18n] Cannot format a message without first setting the initial locale.\"\n    );\n  }\n  let message = lookup(id, locale);\n  if (!message) {\n    message = (_d = (_c = (_b = (_a = getOptions()).handleMissingMessage) == null ? void 0 : _b.call(_a, { locale, id, defaultValue })) != null ? _c : defaultValue) != null ? _d : id;\n  } else if (typeof message !== \"string\") {\n    console.warn(\n      `[svelte-i18n] Message with id \"${id}\" must be of type \"string\", found: \"${typeof message}\". Gettin its value through the \"$format\" method is deprecated; use the \"json\" method instead.`\n    );\n    return message;\n  }\n  if (!values) {\n    return message;\n  }\n  let result = message;\n  try {\n    result = getMessageFormatter(message, locale).format(values);\n  } catch (e) {\n    if (e instanceof Error) {\n      console.warn(\n        `[svelte-i18n] Message \"${id}\" has syntax error:`,\n        e.message\n      );\n    }\n  }\n  return result;\n};\nconst formatTime = (t, options) => {\n  return getTimeFormatter(options).format(t);\n};\nconst formatDate = (d, options) => {\n  return getDateFormatter(options).format(d);\n};\nconst formatNumber = (n, options) => {\n  return getNumberFormatter(options).format(n);\n};\nconst getJSON = (id, locale = getCurrentLocale()) => {\n  return lookup(id, locale);\n};\nconst $format = derived([$locale, $dictionary], () => formatMessage);\nconst $formatTime = derived([$locale], () => formatTime);\nconst $formatDate = derived([$locale], () => formatDate);\nconst $formatNumber = derived([$locale], () => formatNumber);\nconst $getJSON = derived([$locale, $dictionary], () => getJSON);\n\nfunction unwrapFunctionStore(store) {\n  let localReference;\n  const cancel = store.subscribe((value) => localReference = value);\n  const fn = (...args) => localReference(...args);\n  fn.freeze = cancel;\n  return fn;\n}\n\nfunction defineMessages(i) {\n  return i;\n}\nfunction waitLocale(locale) {\n  return flush(locale || getCurrentLocale() || getOptions().initialLocale);\n}\n\nexport { $format as _, addMessages, $formatDate as date, defineMessages, $dictionary as dictionary, $format as format, getDateFormatter, getLocaleFromHash, getLocaleFromHostname, getLocaleFromNavigator, getLocaleFromPathname, getLocaleFromQueryString, getMessageFormatter, getNumberFormatter, getTimeFormatter, init, $isLoading as isLoading, $getJSON as json, $locale as locale, $locales as locales, $formatNumber as number, registerLocaleLoader as register, $format as t, $formatTime as time, unwrapFunctionStore, waitLocale };\n","const ALIAS = Symbol.for('yaml.alias');\nconst DOC = Symbol.for('yaml.document');\nconst MAP = Symbol.for('yaml.map');\nconst PAIR = Symbol.for('yaml.pair');\nconst SCALAR = Symbol.for('yaml.scalar');\nconst SEQ = Symbol.for('yaml.seq');\nconst NODE_TYPE = Symbol.for('yaml.node.type');\nconst isAlias = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === ALIAS;\nconst isDocument = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === DOC;\nconst isMap = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === MAP;\nconst isPair = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === PAIR;\nconst isScalar = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SCALAR;\nconst isSeq = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SEQ;\nfunction isCollection(node) {\n    if (node && typeof node === 'object')\n        switch (node[NODE_TYPE]) {\n            case MAP:\n            case SEQ:\n                return true;\n        }\n    return false;\n}\nfunction isNode(node) {\n    if (node && typeof node === 'object')\n        switch (node[NODE_TYPE]) {\n            case ALIAS:\n            case MAP:\n            case SCALAR:\n            case SEQ:\n                return true;\n        }\n    return false;\n}\nconst hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor;\n\nexport { ALIAS, DOC, MAP, NODE_TYPE, PAIR, SCALAR, SEQ, hasAnchor, isAlias, isCollection, isDocument, isMap, isNode, isPair, isScalar, isSeq };\n","import { isDocument, isNode, isPair, isCollection, isMap, isSeq, isScalar, isAlias } from './nodes/identity.js';\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove node');\n/**\n * Apply a visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n *   - `key`: For sequence values and map `Pair`, the node's index in the\n *     collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n *     `null` for the root node.\n *   - `node`: The current node.\n *   - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n *   - `undefined` (default): Do nothing and continue\n *   - `visit.SKIP`: Do not visit the children of this node, continue with next\n *     sibling\n *   - `visit.BREAK`: Terminate traversal completely\n *   - `visit.REMOVE`: Remove the current node, then continue with the next one\n *   - `Node`: Replace the current node, then continue by visiting it\n *   - `number`: While iterating the items of a sequence or map, set the index\n *     of the next step. This is useful especially if the index of the current\n *     node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nfunction visit(node, visitor) {\n    const visitor_ = initVisitor(visitor);\n    if (isDocument(node)) {\n        const cd = visit_(null, node.contents, visitor_, Object.freeze([node]));\n        if (cd === REMOVE)\n            node.contents = null;\n    }\n    else\n        visit_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisit.SKIP = SKIP;\n/** Remove the current node */\nvisit.REMOVE = REMOVE;\nfunction visit_(key, node, visitor, path) {\n    const ctrl = callVisitor(key, node, visitor, path);\n    if (isNode(ctrl) || isPair(ctrl)) {\n        replaceNode(key, path, ctrl);\n        return visit_(key, ctrl, visitor, path);\n    }\n    if (typeof ctrl !== 'symbol') {\n        if (isCollection(node)) {\n            path = Object.freeze(path.concat(node));\n            for (let i = 0; i < node.items.length; ++i) {\n                const ci = visit_(i, node.items[i], visitor, path);\n                if (typeof ci === 'number')\n                    i = ci - 1;\n                else if (ci === BREAK)\n                    return BREAK;\n                else if (ci === REMOVE) {\n                    node.items.splice(i, 1);\n                    i -= 1;\n                }\n            }\n        }\n        else if (isPair(node)) {\n            path = Object.freeze(path.concat(node));\n            const ck = visit_('key', node.key, visitor, path);\n            if (ck === BREAK)\n                return BREAK;\n            else if (ck === REMOVE)\n                node.key = null;\n            const cv = visit_('value', node.value, visitor, path);\n            if (cv === BREAK)\n                return BREAK;\n            else if (cv === REMOVE)\n                node.value = null;\n        }\n    }\n    return ctrl;\n}\n/**\n * Apply an async visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n *   - `key`: For sequence values and map `Pair`, the node's index in the\n *     collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n *     `null` for the root node.\n *   - `node`: The current node.\n *   - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n *   - `Promise`: Must resolve to one of the following values\n *   - `undefined` (default): Do nothing and continue\n *   - `visit.SKIP`: Do not visit the children of this node, continue with next\n *     sibling\n *   - `visit.BREAK`: Terminate traversal completely\n *   - `visit.REMOVE`: Remove the current node, then continue with the next one\n *   - `Node`: Replace the current node, then continue by visiting it\n *   - `number`: While iterating the items of a sequence or map, set the index\n *     of the next step. This is useful especially if the index of the current\n *     node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nasync function visitAsync(node, visitor) {\n    const visitor_ = initVisitor(visitor);\n    if (isDocument(node)) {\n        const cd = await visitAsync_(null, node.contents, visitor_, Object.freeze([node]));\n        if (cd === REMOVE)\n            node.contents = null;\n    }\n    else\n        await visitAsync_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisitAsync.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisitAsync.SKIP = SKIP;\n/** Remove the current node */\nvisitAsync.REMOVE = REMOVE;\nasync function visitAsync_(key, node, visitor, path) {\n    const ctrl = await callVisitor(key, node, visitor, path);\n    if (isNode(ctrl) || isPair(ctrl)) {\n        replaceNode(key, path, ctrl);\n        return visitAsync_(key, ctrl, visitor, path);\n    }\n    if (typeof ctrl !== 'symbol') {\n        if (isCollection(node)) {\n            path = Object.freeze(path.concat(node));\n            for (let i = 0; i < node.items.length; ++i) {\n                const ci = await visitAsync_(i, node.items[i], visitor, path);\n                if (typeof ci === 'number')\n                    i = ci - 1;\n                else if (ci === BREAK)\n                    return BREAK;\n                else if (ci === REMOVE) {\n                    node.items.splice(i, 1);\n                    i -= 1;\n                }\n            }\n        }\n        else if (isPair(node)) {\n            path = Object.freeze(path.concat(node));\n            const ck = await visitAsync_('key', node.key, visitor, path);\n            if (ck === BREAK)\n                return BREAK;\n            else if (ck === REMOVE)\n                node.key = null;\n            const cv = await visitAsync_('value', node.value, visitor, path);\n            if (cv === BREAK)\n                return BREAK;\n            else if (cv === REMOVE)\n                node.value = null;\n        }\n    }\n    return ctrl;\n}\nfunction initVisitor(visitor) {\n    if (typeof visitor === 'object' &&\n        (visitor.Collection || visitor.Node || visitor.Value)) {\n        return Object.assign({\n            Alias: visitor.Node,\n            Map: visitor.Node,\n            Scalar: visitor.Node,\n            Seq: visitor.Node\n        }, visitor.Value && {\n            Map: visitor.Value,\n            Scalar: visitor.Value,\n            Seq: visitor.Value\n        }, visitor.Collection && {\n            Map: visitor.Collection,\n            Seq: visitor.Collection\n        }, visitor);\n    }\n    return visitor;\n}\nfunction callVisitor(key, node, visitor, path) {\n    if (typeof visitor === 'function')\n        return visitor(key, node, path);\n    if (isMap(node))\n        return visitor.Map?.(key, node, path);\n    if (isSeq(node))\n        return visitor.Seq?.(key, node, path);\n    if (isPair(node))\n        return visitor.Pair?.(key, node, path);\n    if (isScalar(node))\n        return visitor.Scalar?.(key, node, path);\n    if (isAlias(node))\n        return visitor.Alias?.(key, node, path);\n    return undefined;\n}\nfunction replaceNode(key, path, node) {\n    const parent = path[path.length - 1];\n    if (isCollection(parent)) {\n        parent.items[key] = node;\n    }\n    else if (isPair(parent)) {\n        if (key === 'key')\n            parent.key = node;\n        else\n            parent.value = node;\n    }\n    else if (isDocument(parent)) {\n        parent.contents = node;\n    }\n    else {\n        const pt = isAlias(parent) ? 'alias' : 'scalar';\n        throw new Error(`Cannot replace node with ${pt} parent`);\n    }\n}\n\nexport { visit, visitAsync };\n","import { isNode } from '../nodes/identity.js';\nimport { visit } from '../visit.js';\n\nconst escapeChars = {\n    '!': '%21',\n    ',': '%2C',\n    '[': '%5B',\n    ']': '%5D',\n    '{': '%7B',\n    '}': '%7D'\n};\nconst escapeTagName = (tn) => tn.replace(/[!,[\\]{}]/g, ch => escapeChars[ch]);\nclass Directives {\n    constructor(yaml, tags) {\n        /**\n         * The directives-end/doc-start marker `---`. If `null`, a marker may still be\n         * included in the document's stringified representation.\n         */\n        this.docStart = null;\n        /** The doc-end marker `...`.  */\n        this.docEnd = false;\n        this.yaml = Object.assign({}, Directives.defaultYaml, yaml);\n        this.tags = Object.assign({}, Directives.defaultTags, tags);\n    }\n    clone() {\n        const copy = new Directives(this.yaml, this.tags);\n        copy.docStart = this.docStart;\n        return copy;\n    }\n    /**\n     * During parsing, get a Directives instance for the current document and\n     * update the stream state according to the current version's spec.\n     */\n    atDocument() {\n        const res = new Directives(this.yaml, this.tags);\n        switch (this.yaml.version) {\n            case '1.1':\n                this.atNextDocument = true;\n                break;\n            case '1.2':\n                this.atNextDocument = false;\n                this.yaml = {\n                    explicit: Directives.defaultYaml.explicit,\n                    version: '1.2'\n                };\n                this.tags = Object.assign({}, Directives.defaultTags);\n                break;\n        }\n        return res;\n    }\n    /**\n     * @param onError - May be called even if the action was successful\n     * @returns `true` on success\n     */\n    add(line, onError) {\n        if (this.atNextDocument) {\n            this.yaml = { explicit: Directives.defaultYaml.explicit, version: '1.1' };\n            this.tags = Object.assign({}, Directives.defaultTags);\n            this.atNextDocument = false;\n        }\n        const parts = line.trim().split(/[ \\t]+/);\n        const name = parts.shift();\n        switch (name) {\n            case '%TAG': {\n                if (parts.length !== 2) {\n                    onError(0, '%TAG directive should contain exactly two parts');\n                    if (parts.length < 2)\n                        return false;\n                }\n                const [handle, prefix] = parts;\n                this.tags[handle] = prefix;\n                return true;\n            }\n            case '%YAML': {\n                this.yaml.explicit = true;\n                if (parts.length !== 1) {\n                    onError(0, '%YAML directive should contain exactly one part');\n                    return false;\n                }\n                const [version] = parts;\n                if (version === '1.1' || version === '1.2') {\n                    this.yaml.version = version;\n                    return true;\n                }\n                else {\n                    const isValid = /^\\d+\\.\\d+$/.test(version);\n                    onError(6, `Unsupported YAML version ${version}`, isValid);\n                    return false;\n                }\n            }\n            default:\n                onError(0, `Unknown directive ${name}`, true);\n                return false;\n        }\n    }\n    /**\n     * Resolves a tag, matching handles to those defined in %TAG directives.\n     *\n     * @returns Resolved tag, which may also be the non-specific tag `'!'` or a\n     *   `'!local'` tag, or `null` if unresolvable.\n     */\n    tagName(source, onError) {\n        if (source === '!')\n            return '!'; // non-specific tag\n        if (source[0] !== '!') {\n            onError(`Not a valid tag: ${source}`);\n            return null;\n        }\n        if (source[1] === '<') {\n            const verbatim = source.slice(2, -1);\n            if (verbatim === '!' || verbatim === '!!') {\n                onError(`Verbatim tags aren't resolved, so ${source} is invalid.`);\n                return null;\n            }\n            if (source[source.length - 1] !== '>')\n                onError('Verbatim tags must end with a >');\n            return verbatim;\n        }\n        const [, handle, suffix] = source.match(/^(.*!)([^!]*)$/s);\n        if (!suffix)\n            onError(`The ${source} tag has no suffix`);\n        const prefix = this.tags[handle];\n        if (prefix) {\n            try {\n                return prefix + decodeURIComponent(suffix);\n            }\n            catch (error) {\n                onError(String(error));\n                return null;\n            }\n        }\n        if (handle === '!')\n            return source; // local tag\n        onError(`Could not resolve tag: ${source}`);\n        return null;\n    }\n    /**\n     * Given a fully resolved tag, returns its printable string form,\n     * taking into account current tag prefixes and defaults.\n     */\n    tagString(tag) {\n        for (const [handle, prefix] of Object.entries(this.tags)) {\n            if (tag.startsWith(prefix))\n                return handle + escapeTagName(tag.substring(prefix.length));\n        }\n        return tag[0] === '!' ? tag : `!<${tag}>`;\n    }\n    toString(doc) {\n        const lines = this.yaml.explicit\n            ? [`%YAML ${this.yaml.version || '1.2'}`]\n            : [];\n        const tagEntries = Object.entries(this.tags);\n        let tagNames;\n        if (doc && tagEntries.length > 0 && isNode(doc.contents)) {\n            const tags = {};\n            visit(doc.contents, (_key, node) => {\n                if (isNode(node) && node.tag)\n                    tags[node.tag] = true;\n            });\n            tagNames = Object.keys(tags);\n        }\n        else\n            tagNames = [];\n        for (const [handle, prefix] of tagEntries) {\n            if (handle === '!!' && prefix === 'tag:yaml.org,2002:')\n                continue;\n            if (!doc || tagNames.some(tn => tn.startsWith(prefix)))\n                lines.push(`%TAG ${handle} ${prefix}`);\n        }\n        return lines.join('\\n');\n    }\n}\nDirectives.defaultYaml = { explicit: false, version: '1.2' };\nDirectives.defaultTags = { '!!': 'tag:yaml.org,2002:' };\n\nexport { Directives };\n","import { isScalar, isCollection } from '../nodes/identity.js';\nimport { visit } from '../visit.js';\n\n/**\n * Verify that the input string is a valid anchor.\n *\n * Will throw on errors.\n */\nfunction anchorIsValid(anchor) {\n    if (/[\\x00-\\x19\\s,[\\]{}]/.test(anchor)) {\n        const sa = JSON.stringify(anchor);\n        const msg = `Anchor must not contain whitespace or control characters: ${sa}`;\n        throw new Error(msg);\n    }\n    return true;\n}\nfunction anchorNames(root) {\n    const anchors = new Set();\n    visit(root, {\n        Value(_key, node) {\n            if (node.anchor)\n                anchors.add(node.anchor);\n        }\n    });\n    return anchors;\n}\n/** Find a new anchor name with the given `prefix` and a one-indexed suffix. */\nfunction findNewAnchor(prefix, exclude) {\n    for (let i = 1; true; ++i) {\n        const name = `${prefix}${i}`;\n        if (!exclude.has(name))\n            return name;\n    }\n}\nfunction createNodeAnchors(doc, prefix) {\n    const aliasObjects = [];\n    const sourceObjects = new Map();\n    let prevAnchors = null;\n    return {\n        onAnchor: (source) => {\n            aliasObjects.push(source);\n            prevAnchors ?? (prevAnchors = anchorNames(doc));\n            const anchor = findNewAnchor(prefix, prevAnchors);\n            prevAnchors.add(anchor);\n            return anchor;\n        },\n        /**\n         * With circular references, the source node is only resolved after all\n         * of its child nodes are. This is why anchors are set only after all of\n         * the nodes have been created.\n         */\n        setAnchors: () => {\n            for (const source of aliasObjects) {\n                const ref = sourceObjects.get(source);\n                if (typeof ref === 'object' &&\n                    ref.anchor &&\n                    (isScalar(ref.node) || isCollection(ref.node))) {\n                    ref.node.anchor = ref.anchor;\n                }\n                else {\n                    const error = new Error('Failed to resolve repeated object (this should not happen)');\n                    error.source = source;\n                    throw error;\n                }\n            }\n        },\n        sourceObjects\n    };\n}\n\nexport { anchorIsValid, anchorNames, createNodeAnchors, findNewAnchor };\n","/**\n * Applies the JSON.parse reviver algorithm as defined in the ECMA-262 spec,\n * in section 24.5.1.1 \"Runtime Semantics: InternalizeJSONProperty\" of the\n * 2021 edition: https://tc39.es/ecma262/#sec-json.parse\n *\n * Includes extensions for handling Map and Set objects.\n */\nfunction applyReviver(reviver, obj, key, val) {\n    if (val && typeof val === 'object') {\n        if (Array.isArray(val)) {\n            for (let i = 0, len = val.length; i < len; ++i) {\n                const v0 = val[i];\n                const v1 = applyReviver(reviver, val, String(i), v0);\n                // eslint-disable-next-line @typescript-eslint/no-array-delete\n                if (v1 === undefined)\n                    delete val[i];\n                else if (v1 !== v0)\n                    val[i] = v1;\n            }\n        }\n        else if (val instanceof Map) {\n            for (const k of Array.from(val.keys())) {\n                const v0 = val.get(k);\n                const v1 = applyReviver(reviver, val, k, v0);\n                if (v1 === undefined)\n                    val.delete(k);\n                else if (v1 !== v0)\n                    val.set(k, v1);\n            }\n        }\n        else if (val instanceof Set) {\n            for (const v0 of Array.from(val)) {\n                const v1 = applyReviver(reviver, val, v0, v0);\n                if (v1 === undefined)\n                    val.delete(v0);\n                else if (v1 !== v0) {\n                    val.delete(v0);\n                    val.add(v1);\n                }\n            }\n        }\n        else {\n            for (const [k, v0] of Object.entries(val)) {\n                const v1 = applyReviver(reviver, val, k, v0);\n                if (v1 === undefined)\n                    delete val[k];\n                else if (v1 !== v0)\n                    val[k] = v1;\n            }\n        }\n    }\n    return reviver.call(obj, key, val);\n}\n\nexport { applyReviver };\n","import { hasAnchor } from './identity.js';\n\n/**\n * Recursively convert any node or its contents to native JavaScript\n *\n * @param value - The input value\n * @param arg - If `value` defines a `toJSON()` method, use this\n *   as its first argument\n * @param ctx - Conversion context, originally set in Document#toJS(). If\n *   `{ keep: true }` is not set, output should be suitable for JSON\n *   stringification.\n */\nfunction toJS(value, arg, ctx) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n    if (Array.isArray(value))\n        return value.map((v, i) => toJS(v, String(i), ctx));\n    if (value && typeof value.toJSON === 'function') {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n        if (!ctx || !hasAnchor(value))\n            return value.toJSON(arg, ctx);\n        const data = { aliasCount: 0, count: 1, res: undefined };\n        ctx.anchors.set(value, data);\n        ctx.onCreate = res => {\n            data.res = res;\n            delete ctx.onCreate;\n        };\n        const res = value.toJSON(arg, ctx);\n        if (ctx.onCreate)\n            ctx.onCreate(res);\n        return res;\n    }\n    if (typeof value === 'bigint' && !ctx?.keep)\n        return Number(value);\n    return value;\n}\n\nexport { toJS };\n","import { applyReviver } from '../doc/applyReviver.js';\nimport { NODE_TYPE, isDocument } from './identity.js';\nimport { toJS } from './toJS.js';\n\nclass NodeBase {\n    constructor(type) {\n        Object.defineProperty(this, NODE_TYPE, { value: type });\n    }\n    /** Create a copy of this node.  */\n    clone() {\n        const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n        if (this.range)\n            copy.range = this.range.slice();\n        return copy;\n    }\n    /** A plain JavaScript representation of this node. */\n    toJS(doc, { mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n        if (!isDocument(doc))\n            throw new TypeError('A document argument is required');\n        const ctx = {\n            anchors: new Map(),\n            doc,\n            keep: true,\n            mapAsMap: mapAsMap === true,\n            mapKeyWarned: false,\n            maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n        };\n        const res = toJS(this, '', ctx);\n        if (typeof onAnchor === 'function')\n            for (const { count, res } of ctx.anchors.values())\n                onAnchor(res, count);\n        return typeof reviver === 'function'\n            ? applyReviver(reviver, { '': res }, '', res)\n            : res;\n    }\n}\n\nexport { NodeBase };\n","import { anchorIsValid } from '../doc/anchors.js';\nimport { visit } from '../visit.js';\nimport { ALIAS, isAlias, isCollection, isPair, hasAnchor } from './identity.js';\nimport { NodeBase } from './Node.js';\nimport { toJS } from './toJS.js';\n\nclass Alias extends NodeBase {\n    constructor(source) {\n        super(ALIAS);\n        this.source = source;\n        Object.defineProperty(this, 'tag', {\n            set() {\n                throw new Error('Alias nodes cannot have tags');\n            }\n        });\n    }\n    /**\n     * Resolve the value of this alias within `doc`, finding the last\n     * instance of the `source` anchor before this node.\n     */\n    resolve(doc, ctx) {\n        let nodes;\n        if (ctx?.aliasResolveCache) {\n            nodes = ctx.aliasResolveCache;\n        }\n        else {\n            nodes = [];\n            visit(doc, {\n                Node: (_key, node) => {\n                    if (isAlias(node) || hasAnchor(node))\n                        nodes.push(node);\n                }\n            });\n            if (ctx)\n                ctx.aliasResolveCache = nodes;\n        }\n        let found = undefined;\n        for (const node of nodes) {\n            if (node === this)\n                break;\n            if (node.anchor === this.source)\n                found = node;\n        }\n        return found;\n    }\n    toJSON(_arg, ctx) {\n        if (!ctx)\n            return { source: this.source };\n        const { anchors, doc, maxAliasCount } = ctx;\n        const source = this.resolve(doc, ctx);\n        if (!source) {\n            const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n            throw new ReferenceError(msg);\n        }\n        let data = anchors.get(source);\n        if (!data) {\n            // Resolve anchors for Node.prototype.toJS()\n            toJS(source, null, ctx);\n            data = anchors.get(source);\n        }\n        /* istanbul ignore if */\n        if (data?.res === undefined) {\n            const msg = 'This should not happen: Alias anchor was not resolved?';\n            throw new ReferenceError(msg);\n        }\n        if (maxAliasCount >= 0) {\n            data.count += 1;\n            if (data.aliasCount === 0)\n                data.aliasCount = getAliasCount(doc, source, anchors);\n            if (data.count * data.aliasCount > maxAliasCount) {\n                const msg = 'Excessive alias count indicates a resource exhaustion attack';\n                throw new ReferenceError(msg);\n            }\n        }\n        return data.res;\n    }\n    toString(ctx, _onComment, _onChompKeep) {\n        const src = `*${this.source}`;\n        if (ctx) {\n            anchorIsValid(this.source);\n            if (ctx.options.verifyAliasOrder && !ctx.anchors.has(this.source)) {\n                const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n                throw new Error(msg);\n            }\n            if (ctx.implicitKey)\n                return `${src} `;\n        }\n        return src;\n    }\n}\nfunction getAliasCount(doc, node, anchors) {\n    if (isAlias(node)) {\n        const source = node.resolve(doc);\n        const anchor = anchors && source && anchors.get(source);\n        return anchor ? anchor.count * anchor.aliasCount : 0;\n    }\n    else if (isCollection(node)) {\n        let count = 0;\n        for (const item of node.items) {\n            const c = getAliasCount(doc, item, anchors);\n            if (c > count)\n                count = c;\n        }\n        return count;\n    }\n    else if (isPair(node)) {\n        const kc = getAliasCount(doc, node.key, anchors);\n        const vc = getAliasCount(doc, node.value, anchors);\n        return Math.max(kc, vc);\n    }\n    return 1;\n}\n\nexport { Alias };\n","import { SCALAR } from './identity.js';\nimport { NodeBase } from './Node.js';\nimport { toJS } from './toJS.js';\n\nconst isScalarValue = (value) => !value || (typeof value !== 'function' && typeof value !== 'object');\nclass Scalar extends NodeBase {\n    constructor(value) {\n        super(SCALAR);\n        this.value = value;\n    }\n    toJSON(arg, ctx) {\n        return ctx?.keep ? this.value : toJS(this.value, arg, ctx);\n    }\n    toString() {\n        return String(this.value);\n    }\n}\nScalar.BLOCK_FOLDED = 'BLOCK_FOLDED';\nScalar.BLOCK_LITERAL = 'BLOCK_LITERAL';\nScalar.PLAIN = 'PLAIN';\nScalar.QUOTE_DOUBLE = 'QUOTE_DOUBLE';\nScalar.QUOTE_SINGLE = 'QUOTE_SINGLE';\n\nexport { Scalar, isScalarValue };\n","import { Alias } from '../nodes/Alias.js';\nimport { isNode, isPair, MAP, SEQ, isDocument } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\n\nconst defaultTagPrefix = 'tag:yaml.org,2002:';\nfunction findTagObject(value, tagName, tags) {\n    if (tagName) {\n        const match = tags.filter(t => t.tag === tagName);\n        const tagObj = match.find(t => !t.format) ?? match[0];\n        if (!tagObj)\n            throw new Error(`Tag ${tagName} not found`);\n        return tagObj;\n    }\n    return tags.find(t => t.identify?.(value) && !t.format);\n}\nfunction createNode(value, tagName, ctx) {\n    if (isDocument(value))\n        value = value.contents;\n    if (isNode(value))\n        return value;\n    if (isPair(value)) {\n        const map = ctx.schema[MAP].createNode?.(ctx.schema, null, ctx);\n        map.items.push(value);\n        return map;\n    }\n    if (value instanceof String ||\n        value instanceof Number ||\n        value instanceof Boolean ||\n        (typeof BigInt !== 'undefined' && value instanceof BigInt) // not supported everywhere\n    ) {\n        // https://tc39.es/ecma262/#sec-serializejsonproperty\n        value = value.valueOf();\n    }\n    const { aliasDuplicateObjects, onAnchor, onTagObj, schema, sourceObjects } = ctx;\n    // Detect duplicate references to the same object & use Alias nodes for all\n    // after first. The `ref` wrapper allows for circular references to resolve.\n    let ref = undefined;\n    if (aliasDuplicateObjects && value && typeof value === 'object') {\n        ref = sourceObjects.get(value);\n        if (ref) {\n            ref.anchor ?? (ref.anchor = onAnchor(value));\n            return new Alias(ref.anchor);\n        }\n        else {\n            ref = { anchor: null, node: null };\n            sourceObjects.set(value, ref);\n        }\n    }\n    if (tagName?.startsWith('!!'))\n        tagName = defaultTagPrefix + tagName.slice(2);\n    let tagObj = findTagObject(value, tagName, schema.tags);\n    if (!tagObj) {\n        if (value && typeof value.toJSON === 'function') {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n            value = value.toJSON();\n        }\n        if (!value || typeof value !== 'object') {\n            const node = new Scalar(value);\n            if (ref)\n                ref.node = node;\n            return node;\n        }\n        tagObj =\n            value instanceof Map\n                ? schema[MAP]\n                : Symbol.iterator in Object(value)\n                    ? schema[SEQ]\n                    : schema[MAP];\n    }\n    if (onTagObj) {\n        onTagObj(tagObj);\n        delete ctx.onTagObj;\n    }\n    const node = tagObj?.createNode\n        ? tagObj.createNode(ctx.schema, value, ctx)\n        : typeof tagObj?.nodeClass?.from === 'function'\n            ? tagObj.nodeClass.from(ctx.schema, value, ctx)\n            : new Scalar(value);\n    if (tagName)\n        node.tag = tagName;\n    else if (!tagObj.default)\n        node.tag = tagObj.tag;\n    if (ref)\n        ref.node = node;\n    return node;\n}\n\nexport { createNode };\n","import { createNode } from '../doc/createNode.js';\nimport { isNode, isPair, isCollection, isScalar } from './identity.js';\nimport { NodeBase } from './Node.js';\n\nfunction collectionFromPath(schema, path, value) {\n    let v = value;\n    for (let i = path.length - 1; i >= 0; --i) {\n        const k = path[i];\n        if (typeof k === 'number' && Number.isInteger(k) && k >= 0) {\n            const a = [];\n            a[k] = v;\n            v = a;\n        }\n        else {\n            v = new Map([[k, v]]);\n        }\n    }\n    return createNode(v, undefined, {\n        aliasDuplicateObjects: false,\n        keepUndefined: false,\n        onAnchor: () => {\n            throw new Error('This should not happen, please report a bug.');\n        },\n        schema,\n        sourceObjects: new Map()\n    });\n}\n// Type guard is intentionally a little wrong so as to be more useful,\n// as it does not cover untypable empty non-string iterables (e.g. []).\nconst isEmptyPath = (path) => path == null ||\n    (typeof path === 'object' && !!path[Symbol.iterator]().next().done);\nclass Collection extends NodeBase {\n    constructor(type, schema) {\n        super(type);\n        Object.defineProperty(this, 'schema', {\n            value: schema,\n            configurable: true,\n            enumerable: false,\n            writable: true\n        });\n    }\n    /**\n     * Create a copy of this collection.\n     *\n     * @param schema - If defined, overwrites the original's schema\n     */\n    clone(schema) {\n        const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n        if (schema)\n            copy.schema = schema;\n        copy.items = copy.items.map(it => isNode(it) || isPair(it) ? it.clone(schema) : it);\n        if (this.range)\n            copy.range = this.range.slice();\n        return copy;\n    }\n    /**\n     * Adds a value to the collection. For `!!map` and `!!omap` the value must\n     * be a Pair instance or a `{ key, value }` object, which may not have a key\n     * that already exists in the map.\n     */\n    addIn(path, value) {\n        if (isEmptyPath(path))\n            this.add(value);\n        else {\n            const [key, ...rest] = path;\n            const node = this.get(key, true);\n            if (isCollection(node))\n                node.addIn(rest, value);\n            else if (node === undefined && this.schema)\n                this.set(key, collectionFromPath(this.schema, rest, value));\n            else\n                throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n        }\n    }\n    /**\n     * Removes a value from the collection.\n     * @returns `true` if the item was found and removed.\n     */\n    deleteIn(path) {\n        const [key, ...rest] = path;\n        if (rest.length === 0)\n            return this.delete(key);\n        const node = this.get(key, true);\n        if (isCollection(node))\n            return node.deleteIn(rest);\n        else\n            throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n    }\n    /**\n     * Returns item at `key`, or `undefined` if not found. By default unwraps\n     * scalar values from their surrounding node; to disable set `keepScalar` to\n     * `true` (collections are always returned intact).\n     */\n    getIn(path, keepScalar) {\n        const [key, ...rest] = path;\n        const node = this.get(key, true);\n        if (rest.length === 0)\n            return !keepScalar && isScalar(node) ? node.value : node;\n        else\n            return isCollection(node) ? node.getIn(rest, keepScalar) : undefined;\n    }\n    hasAllNullValues(allowScalar) {\n        return this.items.every(node => {\n            if (!isPair(node))\n                return false;\n            const n = node.value;\n            return (n == null ||\n                (allowScalar &&\n                    isScalar(n) &&\n                    n.value == null &&\n                    !n.commentBefore &&\n                    !n.comment &&\n                    !n.tag));\n        });\n    }\n    /**\n     * Checks if the collection includes a value with the key `key`.\n     */\n    hasIn(path) {\n        const [key, ...rest] = path;\n        if (rest.length === 0)\n            return this.has(key);\n        const node = this.get(key, true);\n        return isCollection(node) ? node.hasIn(rest) : false;\n    }\n    /**\n     * Sets a value in this collection. For `!!set`, `value` needs to be a\n     * boolean to add/remove the item from the set.\n     */\n    setIn(path, value) {\n        const [key, ...rest] = path;\n        if (rest.length === 0) {\n            this.set(key, value);\n        }\n        else {\n            const node = this.get(key, true);\n            if (isCollection(node))\n                node.setIn(rest, value);\n            else if (node === undefined && this.schema)\n                this.set(key, collectionFromPath(this.schema, rest, value));\n            else\n                throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n        }\n    }\n}\n\nexport { Collection, collectionFromPath, isEmptyPath };\n","/**\n * Stringifies a comment.\n *\n * Empty comment lines are left empty,\n * lines consisting of a single space are replaced by `#`,\n * and all other lines are prefixed with a `#`.\n */\nconst stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, '#');\nfunction indentComment(comment, indent) {\n    if (/^\\n+$/.test(comment))\n        return comment.substring(1);\n    return indent ? comment.replace(/^(?! *$)/gm, indent) : comment;\n}\nconst lineComment = (str, indent, comment) => str.endsWith('\\n')\n    ? indentComment(comment, indent)\n    : comment.includes('\\n')\n        ? '\\n' + indentComment(comment, indent)\n        : (str.endsWith(' ') ? '' : ' ') + comment;\n\nexport { indentComment, lineComment, stringifyComment };\n","const FOLD_FLOW = 'flow';\nconst FOLD_BLOCK = 'block';\nconst FOLD_QUOTED = 'quoted';\n/**\n * Tries to keep input at up to `lineWidth` characters, splitting only on spaces\n * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are\n * terminated with `\\n` and started with `indent`.\n */\nfunction foldFlowLines(text, indent, mode = 'flow', { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) {\n    if (!lineWidth || lineWidth < 0)\n        return text;\n    if (lineWidth < minContentWidth)\n        minContentWidth = 0;\n    const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);\n    if (text.length <= endStep)\n        return text;\n    const folds = [];\n    const escapedFolds = {};\n    let end = lineWidth - indent.length;\n    if (typeof indentAtStart === 'number') {\n        if (indentAtStart > lineWidth - Math.max(2, minContentWidth))\n            folds.push(0);\n        else\n            end = lineWidth - indentAtStart;\n    }\n    let split = undefined;\n    let prev = undefined;\n    let overflow = false;\n    let i = -1;\n    let escStart = -1;\n    let escEnd = -1;\n    if (mode === FOLD_BLOCK) {\n        i = consumeMoreIndentedLines(text, i, indent.length);\n        if (i !== -1)\n            end = i + endStep;\n    }\n    for (let ch; (ch = text[(i += 1)]);) {\n        if (mode === FOLD_QUOTED && ch === '\\\\') {\n            escStart = i;\n            switch (text[i + 1]) {\n                case 'x':\n                    i += 3;\n                    break;\n                case 'u':\n                    i += 5;\n                    break;\n                case 'U':\n                    i += 9;\n                    break;\n                default:\n                    i += 1;\n            }\n            escEnd = i;\n        }\n        if (ch === '\\n') {\n            if (mode === FOLD_BLOCK)\n                i = consumeMoreIndentedLines(text, i, indent.length);\n            end = i + indent.length + endStep;\n            split = undefined;\n        }\n        else {\n            if (ch === ' ' &&\n                prev &&\n                prev !== ' ' &&\n                prev !== '\\n' &&\n                prev !== '\\t') {\n                // space surrounded by non-space can be replaced with newline + indent\n                const next = text[i + 1];\n                if (next && next !== ' ' && next !== '\\n' && next !== '\\t')\n                    split = i;\n            }\n            if (i >= end) {\n                if (split) {\n                    folds.push(split);\n                    end = split + endStep;\n                    split = undefined;\n                }\n                else if (mode === FOLD_QUOTED) {\n                    // white-space collected at end may stretch past lineWidth\n                    while (prev === ' ' || prev === '\\t') {\n                        prev = ch;\n                        ch = text[(i += 1)];\n                        overflow = true;\n                    }\n                    // Account for newline escape, but don't break preceding escape\n                    const j = i > escEnd + 1 ? i - 2 : escStart - 1;\n                    // Bail out if lineWidth & minContentWidth are shorter than an escape string\n                    if (escapedFolds[j])\n                        return text;\n                    folds.push(j);\n                    escapedFolds[j] = true;\n                    end = j + endStep;\n                    split = undefined;\n                }\n                else {\n                    overflow = true;\n                }\n            }\n        }\n        prev = ch;\n    }\n    if (overflow && onOverflow)\n        onOverflow();\n    if (folds.length === 0)\n        return text;\n    if (onFold)\n        onFold();\n    let res = text.slice(0, folds[0]);\n    for (let i = 0; i < folds.length; ++i) {\n        const fold = folds[i];\n        const end = folds[i + 1] || text.length;\n        if (fold === 0)\n            res = `\\n${indent}${text.slice(0, end)}`;\n        else {\n            if (mode === FOLD_QUOTED && escapedFolds[fold])\n                res += `${text[fold]}\\\\`;\n            res += `\\n${indent}${text.slice(fold + 1, end)}`;\n        }\n    }\n    return res;\n}\n/**\n * Presumes `i + 1` is at the start of a line\n * @returns index of last newline in more-indented block\n */\nfunction consumeMoreIndentedLines(text, i, indent) {\n    let end = i;\n    let start = i + 1;\n    let ch = text[start];\n    while (ch === ' ' || ch === '\\t') {\n        if (i < start + indent) {\n            ch = text[++i];\n        }\n        else {\n            do {\n                ch = text[++i];\n            } while (ch && ch !== '\\n');\n            end = i;\n            start = i + 1;\n            ch = text[start];\n        }\n    }\n    return end;\n}\n\nexport { FOLD_BLOCK, FOLD_FLOW, FOLD_QUOTED, foldFlowLines };\n","import { Scalar } from '../nodes/Scalar.js';\nimport { foldFlowLines, FOLD_FLOW, FOLD_QUOTED, FOLD_BLOCK } from './foldFlowLines.js';\n\nconst getFoldOptions = (ctx, isBlock) => ({\n    indentAtStart: isBlock ? ctx.indent.length : ctx.indentAtStart,\n    lineWidth: ctx.options.lineWidth,\n    minContentWidth: ctx.options.minContentWidth\n});\n// Also checks for lines starting with %, as parsing the output as YAML 1.1 will\n// presume that's starting a new document.\nconst containsDocumentMarker = (str) => /^(%|---|\\.\\.\\.)/m.test(str);\nfunction lineLengthOverLimit(str, lineWidth, indentLength) {\n    if (!lineWidth || lineWidth < 0)\n        return false;\n    const limit = lineWidth - indentLength;\n    const strLen = str.length;\n    if (strLen <= limit)\n        return false;\n    for (let i = 0, start = 0; i < strLen; ++i) {\n        if (str[i] === '\\n') {\n            if (i - start > limit)\n                return true;\n            start = i + 1;\n            if (strLen - start <= limit)\n                return false;\n        }\n    }\n    return true;\n}\nfunction doubleQuotedString(value, ctx) {\n    const json = JSON.stringify(value);\n    if (ctx.options.doubleQuotedAsJSON)\n        return json;\n    const { implicitKey } = ctx;\n    const minMultiLineLength = ctx.options.doubleQuotedMinMultiLineLength;\n    const indent = ctx.indent || (containsDocumentMarker(value) ? '  ' : '');\n    let str = '';\n    let start = 0;\n    for (let i = 0, ch = json[i]; ch; ch = json[++i]) {\n        if (ch === ' ' && json[i + 1] === '\\\\' && json[i + 2] === 'n') {\n            // space before newline needs to be escaped to not be folded\n            str += json.slice(start, i) + '\\\\ ';\n            i += 1;\n            start = i;\n            ch = '\\\\';\n        }\n        if (ch === '\\\\')\n            switch (json[i + 1]) {\n                case 'u':\n                    {\n                        str += json.slice(start, i);\n                        const code = json.substr(i + 2, 4);\n                        switch (code) {\n                            case '0000':\n                                str += '\\\\0';\n                                break;\n                            case '0007':\n                                str += '\\\\a';\n                                break;\n                            case '000b':\n                                str += '\\\\v';\n                                break;\n                            case '001b':\n                                str += '\\\\e';\n                                break;\n                            case '0085':\n                                str += '\\\\N';\n                                break;\n                            case '00a0':\n                                str += '\\\\_';\n                                break;\n                            case '2028':\n                                str += '\\\\L';\n                                break;\n                            case '2029':\n                                str += '\\\\P';\n                                break;\n                            default:\n                                if (code.substr(0, 2) === '00')\n                                    str += '\\\\x' + code.substr(2);\n                                else\n                                    str += json.substr(i, 6);\n                        }\n                        i += 5;\n                        start = i + 1;\n                    }\n                    break;\n                case 'n':\n                    if (implicitKey ||\n                        json[i + 2] === '\"' ||\n                        json.length < minMultiLineLength) {\n                        i += 1;\n                    }\n                    else {\n                        // folding will eat first newline\n                        str += json.slice(start, i) + '\\n\\n';\n                        while (json[i + 2] === '\\\\' &&\n                            json[i + 3] === 'n' &&\n                            json[i + 4] !== '\"') {\n                            str += '\\n';\n                            i += 2;\n                        }\n                        str += indent;\n                        // space after newline needs to be escaped to not be folded\n                        if (json[i + 2] === ' ')\n                            str += '\\\\';\n                        i += 1;\n                        start = i + 1;\n                    }\n                    break;\n                default:\n                    i += 1;\n            }\n    }\n    str = start ? str + json.slice(start) : json;\n    return implicitKey\n        ? str\n        : foldFlowLines(str, indent, FOLD_QUOTED, getFoldOptions(ctx, false));\n}\nfunction singleQuotedString(value, ctx) {\n    if (ctx.options.singleQuote === false ||\n        (ctx.implicitKey && value.includes('\\n')) ||\n        /[ \\t]\\n|\\n[ \\t]/.test(value) // single quoted string can't have leading or trailing whitespace around newline\n    )\n        return doubleQuotedString(value, ctx);\n    const indent = ctx.indent || (containsDocumentMarker(value) ? '  ' : '');\n    const res = \"'\" + value.replace(/'/g, \"''\").replace(/\\n+/g, `$&\\n${indent}`) + \"'\";\n    return ctx.implicitKey\n        ? res\n        : foldFlowLines(res, indent, FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction quotedString(value, ctx) {\n    const { singleQuote } = ctx.options;\n    let qs;\n    if (singleQuote === false)\n        qs = doubleQuotedString;\n    else {\n        const hasDouble = value.includes('\"');\n        const hasSingle = value.includes(\"'\");\n        if (hasDouble && !hasSingle)\n            qs = singleQuotedString;\n        else if (hasSingle && !hasDouble)\n            qs = doubleQuotedString;\n        else\n            qs = singleQuote ? singleQuotedString : doubleQuotedString;\n    }\n    return qs(value, ctx);\n}\n// The negative lookbehind avoids a polynomial search,\n// but isn't supported yet on Safari: https://caniuse.com/js-regexp-lookbehind\nlet blockEndNewlines;\ntry {\n    blockEndNewlines = new RegExp('(^|(?<!\\n))\\n+(?!\\n|$)', 'g');\n}\ncatch {\n    blockEndNewlines = /\\n+(?!\\n|$)/g;\n}\nfunction blockString({ comment, type, value }, ctx, onComment, onChompKeep) {\n    const { blockQuote, commentString, lineWidth } = ctx.options;\n    // 1. Block can't end in whitespace unless the last line is non-empty.\n    // 2. Strings consisting of only whitespace are best rendered explicitly.\n    if (!blockQuote || /\\n[\\t ]+$/.test(value)) {\n        return quotedString(value, ctx);\n    }\n    const indent = ctx.indent ||\n        (ctx.forceBlockIndent || containsDocumentMarker(value) ? '  ' : '');\n    const literal = blockQuote === 'literal'\n        ? true\n        : blockQuote === 'folded' || type === Scalar.BLOCK_FOLDED\n            ? false\n            : type === Scalar.BLOCK_LITERAL\n                ? true\n                : !lineLengthOverLimit(value, lineWidth, indent.length);\n    if (!value)\n        return literal ? '|\\n' : '>\\n';\n    // determine chomping from whitespace at value end\n    let chomp;\n    let endStart;\n    for (endStart = value.length; endStart > 0; --endStart) {\n        const ch = value[endStart - 1];\n        if (ch !== '\\n' && ch !== '\\t' && ch !== ' ')\n            break;\n    }\n    let end = value.substring(endStart);\n    const endNlPos = end.indexOf('\\n');\n    if (endNlPos === -1) {\n        chomp = '-'; // strip\n    }\n    else if (value === end || endNlPos !== end.length - 1) {\n        chomp = '+'; // keep\n        if (onChompKeep)\n            onChompKeep();\n    }\n    else {\n        chomp = ''; // clip\n    }\n    if (end) {\n        value = value.slice(0, -end.length);\n        if (end[end.length - 1] === '\\n')\n            end = end.slice(0, -1);\n        end = end.replace(blockEndNewlines, `$&${indent}`);\n    }\n    // determine indent indicator from whitespace at value start\n    let startWithSpace = false;\n    let startEnd;\n    let startNlPos = -1;\n    for (startEnd = 0; startEnd < value.length; ++startEnd) {\n        const ch = value[startEnd];\n        if (ch === ' ')\n            startWithSpace = true;\n        else if (ch === '\\n')\n            startNlPos = startEnd;\n        else\n            break;\n    }\n    let start = value.substring(0, startNlPos < startEnd ? startNlPos + 1 : startEnd);\n    if (start) {\n        value = value.substring(start.length);\n        start = start.replace(/\\n+/g, `$&${indent}`);\n    }\n    const indentSize = indent ? '2' : '1'; // root is at -1\n    // Leading | or > is added later\n    let header = (startWithSpace ? indentSize : '') + chomp;\n    if (comment) {\n        header += ' ' + commentString(comment.replace(/ ?[\\r\\n]+/g, ' '));\n        if (onComment)\n            onComment();\n    }\n    if (!literal) {\n        const foldedValue = value\n            .replace(/\\n+/g, '\\n$&')\n            .replace(/(?:^|\\n)([\\t ].*)(?:([\\n\\t ]*)\\n(?![\\n\\t ]))?/g, '$1$2') // more-indented lines aren't folded\n            //                ^ more-ind. ^ empty     ^ capture next empty lines only at end of indent\n            .replace(/\\n+/g, `$&${indent}`);\n        let literalFallback = false;\n        const foldOptions = getFoldOptions(ctx, true);\n        if (blockQuote !== 'folded' && type !== Scalar.BLOCK_FOLDED) {\n            foldOptions.onOverflow = () => {\n                literalFallback = true;\n            };\n        }\n        const body = foldFlowLines(`${start}${foldedValue}${end}`, indent, FOLD_BLOCK, foldOptions);\n        if (!literalFallback)\n            return `>${header}\\n${indent}${body}`;\n    }\n    value = value.replace(/\\n+/g, `$&${indent}`);\n    return `|${header}\\n${indent}${start}${value}${end}`;\n}\nfunction plainString(item, ctx, onComment, onChompKeep) {\n    const { type, value } = item;\n    const { actualString, implicitKey, indent, indentStep, inFlow } = ctx;\n    if ((implicitKey && value.includes('\\n')) ||\n        (inFlow && /[[\\]{},]/.test(value))) {\n        return quotedString(value, ctx);\n    }\n    if (/^[\\n\\t ,[\\]{}#&*!|>'\"%@`]|^[?-]$|^[?-][ \\t]|[\\n:][ \\t]|[ \\t]\\n|[\\n\\t ]#|[\\n\\t :]$/.test(value)) {\n        // not allowed:\n        // - '-' or '?'\n        // - start with an indicator character (except [?:-]) or /[?-] /\n        // - '\\n ', ': ' or ' \\n' anywhere\n        // - '#' not preceded by a non-space char\n        // - end with ' ' or ':'\n        return implicitKey || inFlow || !value.includes('\\n')\n            ? quotedString(value, ctx)\n            : blockString(item, ctx, onComment, onChompKeep);\n    }\n    if (!implicitKey &&\n        !inFlow &&\n        type !== Scalar.PLAIN &&\n        value.includes('\\n')) {\n        // Where allowed & type not set explicitly, prefer block style for multiline strings\n        return blockString(item, ctx, onComment, onChompKeep);\n    }\n    if (containsDocumentMarker(value)) {\n        if (indent === '') {\n            ctx.forceBlockIndent = true;\n            return blockString(item, ctx, onComment, onChompKeep);\n        }\n        else if (implicitKey && indent === indentStep) {\n            return quotedString(value, ctx);\n        }\n    }\n    const str = value.replace(/\\n+/g, `$&\\n${indent}`);\n    // Verify that output will be parsed as a string, as e.g. plain numbers and\n    // booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'),\n    // and others in v1.1.\n    if (actualString) {\n        const test = (tag) => tag.default && tag.tag !== 'tag:yaml.org,2002:str' && tag.test?.test(str);\n        const { compat, tags } = ctx.doc.schema;\n        if (tags.some(test) || compat?.some(test))\n            return quotedString(value, ctx);\n    }\n    return implicitKey\n        ? str\n        : foldFlowLines(str, indent, FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction stringifyString(item, ctx, onComment, onChompKeep) {\n    const { implicitKey, inFlow } = ctx;\n    const ss = typeof item.value === 'string'\n        ? item\n        : Object.assign({}, item, { value: String(item.value) });\n    let { type } = item;\n    if (type !== Scalar.QUOTE_DOUBLE) {\n        // force double quotes on control characters & unpaired surrogates\n        if (/[\\x00-\\x08\\x0b-\\x1f\\x7f-\\x9f\\u{D800}-\\u{DFFF}]/u.test(ss.value))\n            type = Scalar.QUOTE_DOUBLE;\n    }\n    const _stringify = (_type) => {\n        switch (_type) {\n            case Scalar.BLOCK_FOLDED:\n            case Scalar.BLOCK_LITERAL:\n                return implicitKey || inFlow\n                    ? quotedString(ss.value, ctx) // blocks are not valid inside flow containers\n                    : blockString(ss, ctx, onComment, onChompKeep);\n            case Scalar.QUOTE_DOUBLE:\n                return doubleQuotedString(ss.value, ctx);\n            case Scalar.QUOTE_SINGLE:\n                return singleQuotedString(ss.value, ctx);\n            case Scalar.PLAIN:\n                return plainString(ss, ctx, onComment, onChompKeep);\n            default:\n                return null;\n        }\n    };\n    let res = _stringify(type);\n    if (res === null) {\n        const { defaultKeyType, defaultStringType } = ctx.options;\n        const t = (implicitKey && defaultKeyType) || defaultStringType;\n        res = _stringify(t);\n        if (res === null)\n            throw new Error(`Unsupported default string type ${t}`);\n    }\n    return res;\n}\n\nexport { stringifyString };\n","import { anchorIsValid } from '../doc/anchors.js';\nimport { isPair, isAlias, isNode, isScalar, isCollection } from '../nodes/identity.js';\nimport { stringifyComment } from './stringifyComment.js';\nimport { stringifyString } from './stringifyString.js';\n\nfunction createStringifyContext(doc, options) {\n    const opt = Object.assign({\n        blockQuote: true,\n        commentString: stringifyComment,\n        defaultKeyType: null,\n        defaultStringType: 'PLAIN',\n        directives: null,\n        doubleQuotedAsJSON: false,\n        doubleQuotedMinMultiLineLength: 40,\n        falseStr: 'false',\n        flowCollectionPadding: true,\n        indentSeq: true,\n        lineWidth: 80,\n        minContentWidth: 20,\n        nullStr: 'null',\n        simpleKeys: false,\n        singleQuote: null,\n        trueStr: 'true',\n        verifyAliasOrder: true\n    }, doc.schema.toStringOptions, options);\n    let inFlow;\n    switch (opt.collectionStyle) {\n        case 'block':\n            inFlow = false;\n            break;\n        case 'flow':\n            inFlow = true;\n            break;\n        default:\n            inFlow = null;\n    }\n    return {\n        anchors: new Set(),\n        doc,\n        flowCollectionPadding: opt.flowCollectionPadding ? ' ' : '',\n        indent: '',\n        indentStep: typeof opt.indent === 'number' ? ' '.repeat(opt.indent) : '  ',\n        inFlow,\n        options: opt\n    };\n}\nfunction getTagObject(tags, item) {\n    if (item.tag) {\n        const match = tags.filter(t => t.tag === item.tag);\n        if (match.length > 0)\n            return match.find(t => t.format === item.format) ?? match[0];\n    }\n    let tagObj = undefined;\n    let obj;\n    if (isScalar(item)) {\n        obj = item.value;\n        let match = tags.filter(t => t.identify?.(obj));\n        if (match.length > 1) {\n            const testMatch = match.filter(t => t.test);\n            if (testMatch.length > 0)\n                match = testMatch;\n        }\n        tagObj =\n            match.find(t => t.format === item.format) ?? match.find(t => !t.format);\n    }\n    else {\n        obj = item;\n        tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass);\n    }\n    if (!tagObj) {\n        const name = obj?.constructor?.name ?? (obj === null ? 'null' : typeof obj);\n        throw new Error(`Tag not resolved for ${name} value`);\n    }\n    return tagObj;\n}\n// needs to be called before value stringifier to allow for circular anchor refs\nfunction stringifyProps(node, tagObj, { anchors, doc }) {\n    if (!doc.directives)\n        return '';\n    const props = [];\n    const anchor = (isScalar(node) || isCollection(node)) && node.anchor;\n    if (anchor && anchorIsValid(anchor)) {\n        anchors.add(anchor);\n        props.push(`&${anchor}`);\n    }\n    const tag = node.tag ?? (tagObj.default ? null : tagObj.tag);\n    if (tag)\n        props.push(doc.directives.tagString(tag));\n    return props.join(' ');\n}\nfunction stringify(item, ctx, onComment, onChompKeep) {\n    if (isPair(item))\n        return item.toString(ctx, onComment, onChompKeep);\n    if (isAlias(item)) {\n        if (ctx.doc.directives)\n            return item.toString(ctx);\n        if (ctx.resolvedAliases?.has(item)) {\n            throw new TypeError(`Cannot stringify circular structure without alias nodes`);\n        }\n        else {\n            if (ctx.resolvedAliases)\n                ctx.resolvedAliases.add(item);\n            else\n                ctx.resolvedAliases = new Set([item]);\n            item = item.resolve(ctx.doc);\n        }\n    }\n    let tagObj = undefined;\n    const node = isNode(item)\n        ? item\n        : ctx.doc.createNode(item, { onTagObj: o => (tagObj = o) });\n    tagObj ?? (tagObj = getTagObject(ctx.doc.schema.tags, node));\n    const props = stringifyProps(node, tagObj, ctx);\n    if (props.length > 0)\n        ctx.indentAtStart = (ctx.indentAtStart ?? 0) + props.length + 1;\n    const str = typeof tagObj.stringify === 'function'\n        ? tagObj.stringify(node, ctx, onComment, onChompKeep)\n        : isScalar(node)\n            ? stringifyString(node, ctx, onComment, onChompKeep)\n            : node.toString(ctx, onComment, onChompKeep);\n    if (!props)\n        return str;\n    return isScalar(node) || str[0] === '{' || str[0] === '['\n        ? `${props} ${str}`\n        : `${props}\\n${ctx.indent}${str}`;\n}\n\nexport { createStringifyContext, stringify };\n","import { isCollection, isNode, isScalar, isSeq } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\nimport { stringify } from './stringify.js';\nimport { lineComment, indentComment } from './stringifyComment.js';\n\nfunction stringifyPair({ key, value }, ctx, onComment, onChompKeep) {\n    const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx;\n    let keyComment = (isNode(key) && key.comment) || null;\n    if (simpleKeys) {\n        if (keyComment) {\n            throw new Error('With simple keys, key nodes cannot have comments');\n        }\n        if (isCollection(key) || (!isNode(key) && typeof key === 'object')) {\n            const msg = 'With simple keys, collection cannot be used as a key value';\n            throw new Error(msg);\n        }\n    }\n    let explicitKey = !simpleKeys &&\n        (!key ||\n            (keyComment && value == null && !ctx.inFlow) ||\n            isCollection(key) ||\n            (isScalar(key)\n                ? key.type === Scalar.BLOCK_FOLDED || key.type === Scalar.BLOCK_LITERAL\n                : typeof key === 'object'));\n    ctx = Object.assign({}, ctx, {\n        allNullValues: false,\n        implicitKey: !explicitKey && (simpleKeys || !allNullValues),\n        indent: indent + indentStep\n    });\n    let keyCommentDone = false;\n    let chompKeep = false;\n    let str = stringify(key, ctx, () => (keyCommentDone = true), () => (chompKeep = true));\n    if (!explicitKey && !ctx.inFlow && str.length > 1024) {\n        if (simpleKeys)\n            throw new Error('With simple keys, single line scalar must not span more than 1024 characters');\n        explicitKey = true;\n    }\n    if (ctx.inFlow) {\n        if (allNullValues || value == null) {\n            if (keyCommentDone && onComment)\n                onComment();\n            return str === '' ? '?' : explicitKey ? `? ${str}` : str;\n        }\n    }\n    else if ((allNullValues && !simpleKeys) || (value == null && explicitKey)) {\n        str = `? ${str}`;\n        if (keyComment && !keyCommentDone) {\n            str += lineComment(str, ctx.indent, commentString(keyComment));\n        }\n        else if (chompKeep && onChompKeep)\n            onChompKeep();\n        return str;\n    }\n    if (keyCommentDone)\n        keyComment = null;\n    if (explicitKey) {\n        if (keyComment)\n            str += lineComment(str, ctx.indent, commentString(keyComment));\n        str = `? ${str}\\n${indent}:`;\n    }\n    else {\n        str = `${str}:`;\n        if (keyComment)\n            str += lineComment(str, ctx.indent, commentString(keyComment));\n    }\n    let vsb, vcb, valueComment;\n    if (isNode(value)) {\n        vsb = !!value.spaceBefore;\n        vcb = value.commentBefore;\n        valueComment = value.comment;\n    }\n    else {\n        vsb = false;\n        vcb = null;\n        valueComment = null;\n        if (value && typeof value === 'object')\n            value = doc.createNode(value);\n    }\n    ctx.implicitKey = false;\n    if (!explicitKey && !keyComment && isScalar(value))\n        ctx.indentAtStart = str.length + 1;\n    chompKeep = false;\n    if (!indentSeq &&\n        indentStep.length >= 2 &&\n        !ctx.inFlow &&\n        !explicitKey &&\n        isSeq(value) &&\n        !value.flow &&\n        !value.tag &&\n        !value.anchor) {\n        // If indentSeq === false, consider '- ' as part of indentation where possible\n        ctx.indent = ctx.indent.substring(2);\n    }\n    let valueCommentDone = false;\n    const valueStr = stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true));\n    let ws = ' ';\n    if (keyComment || vsb || vcb) {\n        ws = vsb ? '\\n' : '';\n        if (vcb) {\n            const cs = commentString(vcb);\n            ws += `\\n${indentComment(cs, ctx.indent)}`;\n        }\n        if (valueStr === '' && !ctx.inFlow) {\n            if (ws === '\\n' && 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, isAlias, isSeq, isMap } from '../../nodes/identity.js';\nimport { Scalar } from '../../nodes/Scalar.js';\n\n// If the value associated with a merge key is a single mapping node, each of\n// its key/value pairs is inserted into the current mapping, unless the key\n// already exists in it. If the value associated with the merge key is a\n// sequence, then this sequence is expected to contain mapping nodes and each\n// of these nodes is merged in turn according to its order in the sequence.\n// Keys in mapping nodes earlier in the sequence override keys specified in\n// later mapping nodes. -- http://yaml.org/type/merge.html\nconst MERGE_KEY = '<<';\nconst merge = {\n    identify: value => value === MERGE_KEY ||\n        (typeof value === 'symbol' && value.description === MERGE_KEY),\n    default: 'key',\n    tag: 'tag:yaml.org,2002:merge',\n    test: /^<<$/,\n    resolve: () => Object.assign(new Scalar(Symbol(MERGE_KEY)), {\n        addToJSMap: addMergeToJSMap\n    }),\n    stringify: () => MERGE_KEY\n};\nconst isMergeKey = (ctx, key) => (merge.identify(key) ||\n    (isScalar(key) &&\n        (!key.type || key.type === Scalar.PLAIN) &&\n        merge.identify(key.value))) &&\n    ctx?.doc.schema.tags.some(tag => tag.tag === merge.tag && tag.default);\nfunction addMergeToJSMap(ctx, map, value) {\n    value = ctx && isAlias(value) ? value.resolve(ctx.doc) : value;\n    if (isSeq(value))\n        for (const it of value.items)\n            mergeValue(ctx, map, it);\n    else if (Array.isArray(value))\n        for (const it of value)\n            mergeValue(ctx, map, it);\n    else\n        mergeValue(ctx, map, value);\n}\nfunction mergeValue(ctx, map, value) {\n    const source = ctx && isAlias(value) ? value.resolve(ctx.doc) : value;\n    if (!isMap(source))\n        throw new Error('Merge sources must be maps or map aliases');\n    const srcMap = source.toJSON(null, ctx, Map);\n    for (const [key, value] of srcMap) {\n        if (map instanceof Map) {\n            if (!map.has(key))\n                map.set(key, value);\n        }\n        else if (map instanceof Set) {\n            map.add(key);\n        }\n        else if (!Object.prototype.hasOwnProperty.call(map, key)) {\n            Object.defineProperty(map, key, {\n                value,\n                writable: true,\n                enumerable: true,\n                configurable: true\n            });\n        }\n    }\n    return map;\n}\n\nexport { addMergeToJSMap, isMergeKey, merge };\n","import { warn } from '../log.js';\nimport { isMergeKey, addMergeToJSMap } from '../schema/yaml-1.1/merge.js';\nimport { createStringifyContext } from '../stringify/stringify.js';\nimport { isNode } from './identity.js';\nimport { toJS } from './toJS.js';\n\nfunction addPairToJSMap(ctx, map, { key, value }) {\n    if (isNode(key) && key.addToJSMap)\n        key.addToJSMap(ctx, map, value);\n    // TODO: Should drop this special case for bare << handling\n    else if (isMergeKey(ctx, key))\n        addMergeToJSMap(ctx, map, value);\n    else {\n        const jsKey = toJS(key, '', ctx);\n        if (map instanceof Map) {\n            map.set(jsKey, toJS(value, jsKey, ctx));\n        }\n        else if (map instanceof Set) {\n            map.add(jsKey);\n        }\n        else {\n            const stringKey = stringifyKey(key, jsKey, ctx);\n            const jsValue = toJS(value, stringKey, ctx);\n            if (stringKey in map)\n                Object.defineProperty(map, stringKey, {\n                    value: jsValue,\n                    writable: true,\n                    enumerable: true,\n                    configurable: true\n                });\n            else\n                map[stringKey] = jsValue;\n        }\n    }\n    return map;\n}\nfunction stringifyKey(key, jsKey, ctx) {\n    if (jsKey === null)\n        return '';\n    // eslint-disable-next-line @typescript-eslint/no-base-to-string\n    if (typeof jsKey !== 'object')\n        return String(jsKey);\n    if (isNode(key) && ctx?.doc) {\n        const strCtx = createStringifyContext(ctx.doc, {});\n        strCtx.anchors = new Set();\n        for (const node of ctx.anchors.keys())\n            strCtx.anchors.add(node.anchor);\n        strCtx.inFlow = true;\n        strCtx.inStringifyKey = true;\n        const strKey = key.toString(strCtx);\n        if (!ctx.mapKeyWarned) {\n            let jsonStr = JSON.stringify(strKey);\n            if (jsonStr.length > 40)\n                jsonStr = jsonStr.substring(0, 36) + '...\"';\n            warn(ctx.doc.options.logLevel, `Keys with collection values will be stringified due to JS Object restrictions: ${jsonStr}. Set mapAsMap: true to use object keys.`);\n            ctx.mapKeyWarned = true;\n        }\n        return strKey;\n    }\n    return JSON.stringify(jsKey);\n}\n\nexport { addPairToJSMap };\n","import { createNode } from '../doc/createNode.js';\nimport { stringifyPair } from '../stringify/stringifyPair.js';\nimport { addPairToJSMap } from './addPairToJSMap.js';\nimport { NODE_TYPE, PAIR, isNode } from './identity.js';\n\nfunction createPair(key, value, ctx) {\n    const k = createNode(key, undefined, ctx);\n    const v = createNode(value, undefined, ctx);\n    return new Pair(k, v);\n}\nclass Pair {\n    constructor(key, value = null) {\n        Object.defineProperty(this, NODE_TYPE, { value: PAIR });\n        this.key = key;\n        this.value = value;\n    }\n    clone(schema) {\n        let { key, value } = this;\n        if (isNode(key))\n            key = key.clone(schema);\n        if (isNode(value))\n            value = value.clone(schema);\n        return new Pair(key, value);\n    }\n    toJSON(_, ctx) {\n        const pair = ctx?.mapAsMap ? new Map() : {};\n        return addPairToJSMap(ctx, pair, this);\n    }\n    toString(ctx, onComment, onChompKeep) {\n        return ctx?.doc\n            ? stringifyPair(this, ctx, onComment, onChompKeep)\n            : JSON.stringify(this);\n    }\n}\n\nexport { Pair, createPair };\n","import { isNode, isPair } from '../nodes/identity.js';\nimport { stringify } from './stringify.js';\nimport { lineComment, indentComment } from './stringifyComment.js';\n\nfunction stringifyCollection(collection, ctx, options) {\n    const flow = ctx.inFlow ?? collection.flow;\n    const stringify = flow ? stringifyFlowCollection : stringifyBlockCollection;\n    return stringify(collection, ctx, options);\n}\nfunction stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) {\n    const { indent, options: { commentString } } = ctx;\n    const itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null });\n    let chompKeep = false; // flag for the preceding node's status\n    const lines = [];\n    for (let i = 0; i < items.length; ++i) {\n        const item = items[i];\n        let comment = null;\n        if (isNode(item)) {\n            if (!chompKeep && item.spaceBefore)\n                lines.push('');\n            addCommentBefore(ctx, lines, item.commentBefore, chompKeep);\n            if (item.comment)\n                comment = item.comment;\n        }\n        else if (isPair(item)) {\n            const ik = isNode(item.key) ? item.key : null;\n            if (ik) {\n                if (!chompKeep && ik.spaceBefore)\n                    lines.push('');\n                addCommentBefore(ctx, lines, ik.commentBefore, chompKeep);\n            }\n        }\n        chompKeep = false;\n        let str = stringify(item, itemCtx, () => (comment = null), () => (chompKeep = true));\n        if (comment)\n            str += lineComment(str, itemIndent, commentString(comment));\n        if (chompKeep && comment)\n            chompKeep = false;\n        lines.push(blockItemPrefix + str);\n    }\n    let str;\n    if (lines.length === 0) {\n        str = flowChars.start + flowChars.end;\n    }\n    else {\n        str = lines[0];\n        for (let i = 1; i < lines.length; ++i) {\n            const line = lines[i];\n            str += line ? `\\n${indent}${line}` : '\\n';\n        }\n    }\n    if (comment) {\n        str += '\\n' + indentComment(commentString(comment), indent);\n        if (onComment)\n            onComment();\n    }\n    else if (chompKeep && onChompKeep)\n        onChompKeep();\n    return str;\n}\nfunction stringifyFlowCollection({ items }, ctx, { flowChars, itemIndent }) {\n    const { indent, indentStep, flowCollectionPadding: fcPadding, options: { commentString } } = ctx;\n    itemIndent += indentStep;\n    const itemCtx = Object.assign({}, ctx, {\n        indent: itemIndent,\n        inFlow: true,\n        type: null\n    });\n    let reqNewline = false;\n    let linesAtValue = 0;\n    const lines = [];\n    for (let i = 0; i < items.length; ++i) {\n        const item = items[i];\n        let comment = null;\n        if (isNode(item)) {\n            if (item.spaceBefore)\n                lines.push('');\n            addCommentBefore(ctx, lines, item.commentBefore, false);\n            if (item.comment)\n                comment = item.comment;\n        }\n        else if (isPair(item)) {\n            const ik = isNode(item.key) ? item.key : null;\n            if (ik) {\n                if (ik.spaceBefore)\n                    lines.push('');\n                addCommentBefore(ctx, lines, ik.commentBefore, false);\n                if (ik.comment)\n                    reqNewline = true;\n            }\n            const iv = isNode(item.value) ? item.value : null;\n            if (iv) {\n                if (iv.comment)\n                    comment = iv.comment;\n                if (iv.commentBefore)\n                    reqNewline = true;\n            }\n            else if (item.value == null && ik?.comment) {\n                comment = ik.comment;\n            }\n        }\n        if (comment)\n            reqNewline = true;\n        let str = stringify(item, itemCtx, () => (comment = null));\n        if (i < items.length - 1)\n            str += ',';\n        if (comment)\n            str += lineComment(str, itemIndent, commentString(comment));\n        if (!reqNewline && (lines.length > linesAtValue || str.includes('\\n')))\n            reqNewline = true;\n        lines.push(str);\n        linesAtValue = lines.length;\n    }\n    const { start, end } = flowChars;\n    if (lines.length === 0) {\n        return start + end;\n    }\n    else {\n        if (!reqNewline) {\n            const len = lines.reduce((sum, line) => sum + line.length + 2, 2);\n            reqNewline = ctx.options.lineWidth > 0 && len > ctx.options.lineWidth;\n        }\n        if (reqNewline) {\n            let str = start;\n            for (const line of lines)\n                str += line ? `\\n${indentStep}${indent}${line}` : '\\n';\n            return `${str}\\n${indent}${end}`;\n        }\n        else {\n            return `${start}${fcPadding}${lines.join(' ')}${fcPadding}${end}`;\n        }\n    }\n}\nfunction addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) {\n    if (comment && chompKeep)\n        comment = comment.replace(/^\\n+/, '');\n    if (comment) {\n        const ic = indentComment(commentString(comment), indent);\n        lines.push(ic.trimStart()); // Avoid double indent on first line\n    }\n}\n\nexport { stringifyCollection };\n","import { stringifyCollection } from '../stringify/stringifyCollection.js';\nimport { addPairToJSMap } from './addPairToJSMap.js';\nimport { Collection } from './Collection.js';\nimport { MAP, isPair, isScalar } from './identity.js';\nimport { Pair, createPair } from './Pair.js';\nimport { isScalarValue } from './Scalar.js';\n\nfunction findPair(items, key) {\n    const k = isScalar(key) ? key.value : key;\n    for (const it of items) {\n        if (isPair(it)) {\n            if (it.key === key || it.key === k)\n                return it;\n            if (isScalar(it.key) && it.key.value === k)\n                return it;\n        }\n    }\n    return undefined;\n}\nclass YAMLMap extends Collection {\n    static get tagName() {\n        return 'tag:yaml.org,2002:map';\n    }\n    constructor(schema) {\n        super(MAP, schema);\n        this.items = [];\n    }\n    /**\n     * A generic collection parsing method that can be extended\n     * to other node classes that inherit from YAMLMap\n     */\n    static from(schema, obj, ctx) {\n        const { keepUndefined, replacer } = ctx;\n        const map = new this(schema);\n        const add = (key, value) => {\n            if (typeof replacer === 'function')\n                value = replacer.call(obj, key, value);\n            else if (Array.isArray(replacer) && !replacer.includes(key))\n                return;\n            if (value !== undefined || keepUndefined)\n                map.items.push(createPair(key, value, ctx));\n        };\n        if (obj instanceof Map) {\n            for (const [key, value] of obj)\n                add(key, value);\n        }\n        else if (obj && typeof obj === 'object') {\n            for (const key of Object.keys(obj))\n                add(key, obj[key]);\n        }\n        if (typeof schema.sortMapEntries === 'function') {\n            map.items.sort(schema.sortMapEntries);\n        }\n        return map;\n    }\n    /**\n     * Adds a value to the collection.\n     *\n     * @param overwrite - If not set `true`, using a key that is already in the\n     *   collection will throw. Otherwise, overwrites the previous value.\n     */\n    add(pair, overwrite) {\n        let _pair;\n        if (isPair(pair))\n            _pair = pair;\n        else if (!pair || typeof pair !== 'object' || !('key' in pair)) {\n            // In TypeScript, this never happens.\n            _pair = new Pair(pair, pair?.value);\n        }\n        else\n            _pair = new Pair(pair.key, pair.value);\n        const prev = findPair(this.items, _pair.key);\n        const sortEntries = this.schema?.sortMapEntries;\n        if (prev) {\n            if (!overwrite)\n                throw new Error(`Key ${_pair.key} already set`);\n            // For scalars, keep the old node & its comments and anchors\n            if (isScalar(prev.value) && isScalarValue(_pair.value))\n                prev.value.value = _pair.value;\n            else\n                prev.value = _pair.value;\n        }\n        else if (sortEntries) {\n            const i = this.items.findIndex(item => sortEntries(_pair, item) < 0);\n            if (i === -1)\n                this.items.push(_pair);\n            else\n                this.items.splice(i, 0, _pair);\n        }\n        else {\n            this.items.push(_pair);\n        }\n    }\n    delete(key) {\n        const it = findPair(this.items, key);\n        if (!it)\n            return false;\n        const del = this.items.splice(this.items.indexOf(it), 1);\n        return del.length > 0;\n    }\n    get(key, keepScalar) {\n        const it = findPair(this.items, key);\n        const node = it?.value;\n        return (!keepScalar && isScalar(node) ? node.value : node) ?? undefined;\n    }\n    has(key) {\n        return !!findPair(this.items, key);\n    }\n    set(key, value) {\n        this.add(new Pair(key, value), true);\n    }\n    /**\n     * @param ctx - Conversion context, originally set in Document#toJS()\n     * @param {Class} Type - If set, forces the returned collection type\n     * @returns Instance of Type, Map, or Object\n     */\n    toJSON(_, ctx, Type) {\n        const map = Type ? new Type() : ctx?.mapAsMap ? new Map() : {};\n        if (ctx?.onCreate)\n            ctx.onCreate(map);\n        for (const item of this.items)\n            addPairToJSMap(ctx, map, item);\n        return map;\n    }\n    toString(ctx, onComment, onChompKeep) {\n        if (!ctx)\n            return JSON.stringify(this);\n        for (const item of this.items) {\n            if (!isPair(item))\n                throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`);\n        }\n        if (!ctx.allNullValues && this.hasAllNullValues(false))\n            ctx = Object.assign({}, ctx, { allNullValues: true });\n        return stringifyCollection(this, ctx, {\n            blockItemPrefix: '',\n            flowChars: { start: '{', end: '}' },\n            itemIndent: ctx.indent || '',\n            onChompKeep,\n            onComment\n        });\n    }\n}\n\nexport { YAMLMap, findPair };\n","import { isMap } from '../../nodes/identity.js';\nimport { YAMLMap } from '../../nodes/YAMLMap.js';\n\nconst map = {\n    collection: 'map',\n    default: true,\n    nodeClass: YAMLMap,\n    tag: 'tag:yaml.org,2002:map',\n    resolve(map, onError) {\n        if (!isMap(map))\n            onError('Expected a mapping for this tag');\n        return map;\n    },\n    createNode: (schema, obj, ctx) => YAMLMap.from(schema, obj, ctx)\n};\n\nexport { map };\n","import { createNode } from '../doc/createNode.js';\nimport { stringifyCollection } from '../stringify/stringifyCollection.js';\nimport { Collection } from './Collection.js';\nimport { SEQ, isScalar } from './identity.js';\nimport { isScalarValue } from './Scalar.js';\nimport { toJS } from './toJS.js';\n\nclass YAMLSeq extends Collection {\n    static get tagName() {\n        return 'tag:yaml.org,2002:seq';\n    }\n    constructor(schema) {\n        super(SEQ, schema);\n        this.items = [];\n    }\n    add(value) {\n        this.items.push(value);\n    }\n    /**\n     * Removes a value from the collection.\n     *\n     * `key` must contain a representation of an integer for this to succeed.\n     * It may be wrapped in a `Scalar`.\n     *\n     * @returns `true` if the item was found and removed.\n     */\n    delete(key) {\n        const idx = asItemIndex(key);\n        if (typeof idx !== 'number')\n            return false;\n        const del = this.items.splice(idx, 1);\n        return del.length > 0;\n    }\n    get(key, keepScalar) {\n        const idx = asItemIndex(key);\n        if (typeof idx !== 'number')\n            return undefined;\n        const it = this.items[idx];\n        return !keepScalar && isScalar(it) ? it.value : it;\n    }\n    /**\n     * Checks if the collection includes a value with the key `key`.\n     *\n     * `key` must contain a representation of an integer for this to succeed.\n     * It may be wrapped in a `Scalar`.\n     */\n    has(key) {\n        const idx = asItemIndex(key);\n        return typeof idx === 'number' && idx < this.items.length;\n    }\n    /**\n     * Sets a value in this collection. For `!!set`, `value` needs to be a\n     * boolean to add/remove the item from the set.\n     *\n     * If `key` does not contain a representation of an integer, this will throw.\n     * It may be wrapped in a `Scalar`.\n     */\n    set(key, value) {\n        const idx = asItemIndex(key);\n        if (typeof idx !== 'number')\n            throw new Error(`Expected a valid index, not ${key}.`);\n        const prev = this.items[idx];\n        if (isScalar(prev) && isScalarValue(value))\n            prev.value = value;\n        else\n            this.items[idx] = value;\n    }\n    toJSON(_, ctx) {\n        const seq = [];\n        if (ctx?.onCreate)\n            ctx.onCreate(seq);\n        let i = 0;\n        for (const item of this.items)\n            seq.push(toJS(item, String(i++), ctx));\n        return seq;\n    }\n    toString(ctx, onComment, onChompKeep) {\n        if (!ctx)\n            return JSON.stringify(this);\n        return stringifyCollection(this, ctx, {\n            blockItemPrefix: '- ',\n            flowChars: { start: '[', end: ']' },\n            itemIndent: (ctx.indent || '') + '  ',\n            onChompKeep,\n            onComment\n        });\n    }\n    static from(schema, obj, ctx) {\n        const { replacer } = ctx;\n        const seq = new this(schema);\n        if (obj && Symbol.iterator in Object(obj)) {\n            let i = 0;\n            for (let it of obj) {\n                if (typeof replacer === 'function') {\n                    const key = obj instanceof Set ? it : String(i++);\n                    it = replacer.call(obj, key, it);\n                }\n                seq.items.push(createNode(it, undefined, ctx));\n            }\n        }\n        return seq;\n    }\n}\nfunction asItemIndex(key) {\n    let idx = isScalar(key) ? key.value : key;\n    if (idx && typeof idx === 'string')\n        idx = Number(idx);\n    return typeof idx === 'number' && Number.isInteger(idx) && idx >= 0\n        ? idx\n        : null;\n}\n\nexport { YAMLSeq };\n","import { isSeq } from '../../nodes/identity.js';\nimport { YAMLSeq } from '../../nodes/YAMLSeq.js';\n\nconst seq = {\n    collection: 'seq',\n    default: true,\n    nodeClass: YAMLSeq,\n    tag: 'tag:yaml.org,2002:seq',\n    resolve(seq, onError) {\n        if (!isSeq(seq))\n            onError('Expected a sequence for this tag');\n        return seq;\n    },\n    createNode: (schema, obj, ctx) => YAMLSeq.from(schema, obj, ctx)\n};\n\nexport { seq };\n","import { stringifyString } from '../../stringify/stringifyString.js';\n\nconst string = {\n    identify: value => typeof value === 'string',\n    default: true,\n    tag: 'tag:yaml.org,2002:str',\n    resolve: str => str,\n    stringify(item, ctx, onComment, onChompKeep) {\n        ctx = Object.assign({ actualString: true }, ctx);\n        return stringifyString(item, ctx, onComment, onChompKeep);\n    }\n};\n\nexport { string };\n","import { Scalar } from '../../nodes/Scalar.js';\n\nconst nullTag = {\n    identify: value => value == null,\n    createNode: () => new Scalar(null),\n    default: true,\n    tag: 'tag:yaml.org,2002:null',\n    test: /^(?:~|[Nn]ull|NULL)?$/,\n    resolve: () => new Scalar(null),\n    stringify: ({ source }, ctx) => typeof source === 'string' && nullTag.test.test(source)\n        ? source\n        : ctx.options.nullStr\n};\n\nexport { nullTag };\n","import { Scalar } from '../../nodes/Scalar.js';\n\nconst boolTag = {\n    identify: value => typeof value === 'boolean',\n    default: true,\n    tag: 'tag:yaml.org,2002:bool',\n    test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,\n    resolve: str => new Scalar(str[0] === 't' || str[0] === 'T'),\n    stringify({ source, value }, ctx) {\n        if (source && boolTag.test.test(source)) {\n            const sv = source[0] === 't' || source[0] === 'T';\n            if (value === sv)\n                return source;\n        }\n        return value ? ctx.options.trueStr : ctx.options.falseStr;\n    }\n};\n\nexport { boolTag };\n","function stringifyNumber({ format, minFractionDigits, tag, value }) {\n    if (typeof value === 'bigint')\n        return String(value);\n    const num = typeof value === 'number' ? value : Number(value);\n    if (!isFinite(num))\n        return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf';\n    let n = 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        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 = { x: 2, u: 4, U: 8 }[next];\n                res += parseCharCode(source, i + 1, length, onError);\n                i += length;\n            }\n            else {\n                const raw = source.substr(i - 1, 2);\n                onError(i - 1, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n                res += raw;\n            }\n        }\n        else if (ch === ' ' || ch === '\\t') {\n            // trim trailing whitespace\n            const wsStart = i;\n            let next = source[i + 1];\n            while (next === ' ' || next === '\\t')\n                next = source[++i + 1];\n            if (next !== '\\n' && !(next === '\\r' && source[i + 2] === '\\n'))\n                res += i > wsStart ? source.slice(wsStart, i + 1) : ch;\n        }\n        else {\n            res += ch;\n        }\n    }\n    if (source[source.length - 1] !== '\"' || source.length === 1)\n        onError(source.length, 'MISSING_CHAR', 'Missing closing \"quote');\n    return res;\n}\n/**\n * Fold a single newline into a space, multiple newlines to N - 1 newlines.\n * Presumes `source[offset] === '\\n'`\n */\nfunction foldNewline(source, offset) {\n    let fold = '';\n    let ch = source[offset + 1];\n    while (ch === ' ' || ch === '\\t' || ch === '\\n' || ch === '\\r') {\n        if (ch === '\\r' && source[offset + 2] !== '\\n')\n            break;\n        if (ch === '\\n')\n            fold += '\\n';\n        offset += 1;\n        ch = source[offset + 1];\n    }\n    if (!fold)\n        fold = ' ';\n    return { fold, offset };\n}\nconst escapeCodes = {\n    '0': '\\0', // null character\n    a: '\\x07', // bell character\n    b: '\\b', // backspace\n    e: '\\x1b', // escape character\n    f: '\\f', // form feed\n    n: '\\n', // line feed\n    r: '\\r', // carriage return\n    t: '\\t', // horizontal tab\n    v: '\\v', // vertical tab\n    N: '\\u0085', // Unicode next line\n    _: '\\u00a0', // Unicode non-breaking space\n    L: '\\u2028', // Unicode line separator\n    P: '\\u2029', // Unicode paragraph separator\n    ' ': ' ',\n    '\"': '\"',\n    '/': '/',\n    '\\\\': '\\\\',\n    '\\t': '\\t'\n};\nfunction parseCharCode(source, offset, length, onError) {\n    const cc = source.substr(offset, length);\n    const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc);\n    const code = ok ? parseInt(cc, 16) : NaN;\n    if (isNaN(code)) {\n        const raw = source.substr(offset - 2, length + 2);\n        onError(offset - 2, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n        return raw;\n    }\n    return String.fromCodePoint(code);\n}\n\nexport { resolveFlowScalar };\n","import { isScalar, SCALAR } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\nimport { resolveBlockScalar } from './resolve-block-scalar.js';\nimport { resolveFlowScalar } from './resolve-flow-scalar.js';\n\nfunction composeScalar(ctx, token, tagToken, onError) {\n    const { value, type, comment, range } = token.type === 'block-scalar'\n        ? resolveBlockScalar(ctx, token, onError)\n        : resolveFlowScalar(token, ctx.options.strict, onError);\n    const tagName = tagToken\n        ? ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg))\n        : null;\n    let tag;\n    if (ctx.options.stringKeys && ctx.atKey) {\n        tag = ctx.schema[SCALAR];\n    }\n    else if (tagName)\n        tag = findScalarTagByName(ctx.schema, value, tagName, tagToken, onError);\n    else if (token.type === 'scalar')\n        tag = findScalarTagByTest(ctx, value, token, onError);\n    else\n        tag = ctx.schema[SCALAR];\n    let scalar;\n    try {\n        const res = tag.resolve(value, msg => onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg), ctx.options);\n        scalar = isScalar(res) ? res : new Scalar(res);\n    }\n    catch (error) {\n        const msg = error instanceof Error ? error.message : String(error);\n        onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg);\n        scalar = new Scalar(value);\n    }\n    scalar.range = range;\n    scalar.source = value;\n    if (type)\n        scalar.type = type;\n    if (tagName)\n        scalar.tag = tagName;\n    if (tag.format)\n        scalar.format = tag.format;\n    if (comment)\n        scalar.comment = comment;\n    return scalar;\n}\nfunction findScalarTagByName(schema, value, tagName, tagToken, onError) {\n    if (tagName === '!')\n        return schema[SCALAR]; // non-specific tag\n    const matchWithTest = [];\n    for (const tag of schema.tags) {\n        if (!tag.collection && tag.tag === tagName) {\n            if (tag.default && tag.test)\n                matchWithTest.push(tag);\n            else\n                return tag;\n        }\n    }\n    for (const tag of matchWithTest)\n        if (tag.test?.test(value))\n            return tag;\n    const kt = schema.knownTags[tagName];\n    if (kt && !kt.collection) {\n        // Ensure that the known tag is available for stringifying,\n        // but does not get used by default.\n        schema.tags.push(Object.assign({}, kt, { default: false, test: undefined }));\n        return kt;\n    }\n    onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, tagName !== 'tag:yaml.org,2002:str');\n    return schema[SCALAR];\n}\nfunction findScalarTagByTest({ atKey, directives, schema }, value, token, onError) {\n    const tag = schema.tags.find(tag => (tag.default === true || (atKey && tag.default === 'key')) &&\n        tag.test?.test(value)) || schema[SCALAR];\n    if (schema.compat) {\n        const compat = schema.compat.find(tag => tag.default && tag.test?.test(value)) ??\n            schema[SCALAR];\n        if (tag.tag !== compat.tag) {\n            const ts = directives.tagString(tag.tag);\n            const cs = directives.tagString(compat.tag);\n            const msg = `Value may be parsed as either ${ts} or ${cs}`;\n            onError(token, 'TAG_RESOLVE_FAILED', msg, true);\n        }\n    }\n    return tag;\n}\n\nexport { composeScalar };\n","function emptyScalarPosition(offset, before, pos) {\n    if (before) {\n        pos ?? (pos = before.length);\n        for (let i = pos - 1; i >= 0; --i) {\n            let st = before[i];\n            switch (st.type) {\n                case 'space':\n                case 'comment':\n                case 'newline':\n                    offset -= st.source.length;\n                    continue;\n            }\n            // Technically, an empty scalar is immediately after the last non-empty\n            // node, but it's more useful to place it after any whitespace.\n            st = before[++i];\n            while (st?.type === 'space') {\n                offset += st.source.length;\n                st = before[++i];\n            }\n            break;\n        }\n    }\n    return offset;\n}\n\nexport { emptyScalarPosition };\n","import { Alias } from '../nodes/Alias.js';\nimport { isScalar } from '../nodes/identity.js';\nimport { composeCollection } from './compose-collection.js';\nimport { composeScalar } from './compose-scalar.js';\nimport { resolveEnd } from './resolve-end.js';\nimport { emptyScalarPosition } from './util-empty-scalar-position.js';\n\nconst CN = { composeNode, composeEmptyNode };\nfunction composeNode(ctx, token, props, onError) {\n    const atKey = ctx.atKey;\n    const { spaceBefore, comment, anchor, tag } = props;\n    let node;\n    let isSrcToken = true;\n    switch (token.type) {\n        case 'alias':\n            node = composeAlias(ctx, token, onError);\n            if (anchor || tag)\n                onError(token, 'ALIAS_PROPS', 'An alias node must not specify any properties');\n            break;\n        case 'scalar':\n        case 'single-quoted-scalar':\n        case 'double-quoted-scalar':\n        case 'block-scalar':\n            node = composeScalar(ctx, token, tag, onError);\n            if (anchor)\n                node.anchor = anchor.source.substring(1);\n            break;\n        case 'block-map':\n        case 'block-seq':\n        case 'flow-collection':\n            node = composeCollection(CN, ctx, token, props, onError);\n            if (anchor)\n                node.anchor = anchor.source.substring(1);\n            break;\n        default: {\n            const message = token.type === 'error'\n                ? token.message\n                : `Unsupported token (type: ${token.type})`;\n            onError(token, 'UNEXPECTED_TOKEN', message);\n            node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError);\n            isSrcToken = false;\n        }\n    }\n    if (anchor && node.anchor === '')\n        onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n    if (atKey &&\n        ctx.options.stringKeys &&\n        (!isScalar(node) ||\n            typeof node.value !== 'string' ||\n            (node.tag && node.tag !== 'tag:yaml.org,2002:str'))) {\n        const msg = 'With stringKeys, all keys must be strings';\n        onError(tag ?? token, 'NON_STRING_KEY', msg);\n    }\n    if (spaceBefore)\n        node.spaceBefore = true;\n    if (comment) {\n        if (token.type === 'scalar' && token.source === '')\n            node.comment = comment;\n        else\n            node.commentBefore = comment;\n    }\n    // @ts-expect-error Type checking misses meaning of isSrcToken\n    if (ctx.options.keepSourceTokens && isSrcToken)\n        node.srcToken = token;\n    return node;\n}\nfunction composeEmptyNode(ctx, offset, before, pos, { spaceBefore, comment, anchor, tag, end }, onError) {\n    const token = {\n        type: 'scalar',\n        offset: emptyScalarPosition(offset, before, pos),\n        indent: -1,\n        source: ''\n    };\n    const node = composeScalar(ctx, token, tag, onError);\n    if (anchor) {\n        node.anchor = anchor.source.substring(1);\n        if (node.anchor === '')\n            onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n    }\n    if (spaceBefore)\n        node.spaceBefore = true;\n    if (comment) {\n        node.comment = comment;\n        node.range[2] = end;\n    }\n    return node;\n}\nfunction composeAlias({ options }, { offset, source, end }, onError) {\n    const alias = new Alias(source.substring(1));\n    if (alias.source === '')\n        onError(offset, 'BAD_ALIAS', 'Alias cannot be an empty string');\n    if (alias.source.endsWith(':'))\n        onError(offset + source.length - 1, 'BAD_ALIAS', 'Alias ending in : is ambiguous', true);\n    const valueEnd = offset + source.length;\n    const re = resolveEnd(end, valueEnd, options.strict, onError);\n    alias.range = [offset, valueEnd, re.offset];\n    if (re.comment)\n        alias.comment = re.comment;\n    return alias;\n}\n\nexport { composeEmptyNode, composeNode };\n","import { Document } from '../doc/Document.js';\nimport { composeNode, composeEmptyNode } from './compose-node.js';\nimport { resolveEnd } from './resolve-end.js';\nimport { resolveProps } from './resolve-props.js';\n\nfunction composeDoc(options, directives, { offset, start, value, end }, onError) {\n    const opts = Object.assign({ _directives: directives }, options);\n    const doc = new Document(undefined, opts);\n    const ctx = {\n        atKey: false,\n        atRoot: true,\n        directives: doc.directives,\n        options: doc.options,\n        schema: doc.schema\n    };\n    const props = resolveProps(start, {\n        indicator: 'doc-start',\n        next: value ?? end?.[0],\n        offset,\n        onError,\n        parentIndent: 0,\n        startOnNewline: true\n    });\n    if (props.found) {\n        doc.directives.docStart = true;\n        if (value &&\n            (value.type === 'block-map' || value.type === 'block-seq') &&\n            !props.hasNewline)\n            onError(props.end, 'MISSING_CHAR', 'Block collection cannot start on same line with directives-end marker');\n    }\n    // @ts-expect-error If Contents is set, let's trust the user\n    doc.contents = value\n        ? composeNode(ctx, value, props, onError)\n        : composeEmptyNode(ctx, props.end, start, null, props, onError);\n    const contentEnd = doc.contents.range[2];\n    const re = resolveEnd(end, contentEnd, false, onError);\n    if (re.comment)\n        doc.comment = re.comment;\n    doc.range = [offset, contentEnd, re.offset];\n    return doc;\n}\n\nexport { composeDoc };\n","import { Directives } from '../doc/directives.js';\nimport { Document } from '../doc/Document.js';\nimport { YAMLWarning, YAMLParseError } from '../errors.js';\nimport { isCollection, isPair } from '../nodes/identity.js';\nimport { composeDoc } from './compose-doc.js';\nimport { resolveEnd } from './resolve-end.js';\n\nfunction getErrorPos(src) {\n    if (typeof src === 'number')\n        return [src, src + 1];\n    if (Array.isArray(src))\n        return src.length === 2 ? src : [src[0], src[1]];\n    const { offset, source } = src;\n    return [offset, offset + (typeof source === 'string' ? source.length : 1)];\n}\nfunction parsePrelude(prelude) {\n    let comment = '';\n    let atComment = false;\n    let afterEmptyLine = false;\n    for (let i = 0; i < prelude.length; ++i) {\n        const source = prelude[i];\n        switch (source[0]) {\n            case '#':\n                comment +=\n                    (comment === '' ? '' : afterEmptyLine ? '\\n\\n' : '\\n') +\n                        (source.substring(1) || ' ');\n                atComment = true;\n                afterEmptyLine = false;\n                break;\n            case '%':\n                if (prelude[i + 1]?.[0] !== '#')\n                    i += 1;\n                atComment = false;\n                break;\n            default:\n                // This may be wrong after doc-end, but in that case it doesn't matter\n                if (!atComment)\n                    afterEmptyLine = true;\n                atComment = false;\n        }\n    }\n    return { comment, afterEmptyLine };\n}\n/**\n * Compose a stream of CST nodes into a stream of YAML Documents.\n *\n * ```ts\n * import { Composer, Parser } from 'yaml'\n *\n * const src: string = ...\n * const tokens = new Parser().parse(src)\n * const docs = new Composer().compose(tokens)\n * ```\n */\nclass Composer {\n    constructor(options = {}) {\n        this.doc = null;\n        this.atDirectives = false;\n        this.prelude = [];\n        this.errors = [];\n        this.warnings = [];\n        this.onError = (source, code, message, warning) => {\n            const pos = getErrorPos(source);\n            if (warning)\n                this.warnings.push(new YAMLWarning(pos, code, message));\n            else\n                this.errors.push(new YAMLParseError(pos, code, message));\n        };\n        // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n        this.directives = new Directives({ version: options.version || '1.2' });\n        this.options = options;\n    }\n    decorate(doc, afterDoc) {\n        const { comment, afterEmptyLine } = parsePrelude(this.prelude);\n        //console.log({ dc: doc.comment, prelude, comment })\n        if (comment) {\n            const dc = doc.contents;\n            if (afterDoc) {\n                doc.comment = doc.comment ? `${doc.comment}\\n${comment}` : comment;\n            }\n            else if (afterEmptyLine || doc.directives.docStart || !dc) {\n                doc.commentBefore = comment;\n            }\n            else if (isCollection(dc) && !dc.flow && dc.items.length > 0) {\n                let it = dc.items[0];\n                if (isPair(it))\n                    it = it.key;\n                const cb = it.commentBefore;\n                it.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n            }\n            else {\n                const cb = dc.commentBefore;\n                dc.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n            }\n        }\n        if (afterDoc) {\n            Array.prototype.push.apply(doc.errors, this.errors);\n            Array.prototype.push.apply(doc.warnings, this.warnings);\n        }\n        else {\n            doc.errors = this.errors;\n            doc.warnings = this.warnings;\n        }\n        this.prelude = [];\n        this.errors = [];\n        this.warnings = [];\n    }\n    /**\n     * Current stream status information.\n     *\n     * Mostly useful at the end of input for an empty stream.\n     */\n    streamInfo() {\n        return {\n            comment: parsePrelude(this.prelude).comment,\n            directives: this.directives,\n            errors: this.errors,\n            warnings: this.warnings\n        };\n    }\n    /**\n     * Compose tokens into documents.\n     *\n     * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n     * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n     */\n    *compose(tokens, forceDoc = false, endOffset = -1) {\n        for (const token of tokens)\n            yield* this.next(token);\n        yield* this.end(forceDoc, endOffset);\n    }\n    /** Advance the composer by one CST token. */\n    *next(token) {\n        switch (token.type) {\n            case 'directive':\n                this.directives.add(token.source, (offset, message, warning) => {\n                    const pos = getErrorPos(token);\n                    pos[0] += offset;\n                    this.onError(pos, 'BAD_DIRECTIVE', message, warning);\n                });\n                this.prelude.push(token.source);\n                this.atDirectives = true;\n                break;\n            case 'document': {\n                const doc = composeDoc(this.options, this.directives, token, this.onError);\n                if (this.atDirectives && !doc.directives.docStart)\n                    this.onError(token, 'MISSING_CHAR', 'Missing directives-end/doc-start indicator line');\n                this.decorate(doc, false);\n                if (this.doc)\n                    yield this.doc;\n                this.doc = doc;\n                this.atDirectives = false;\n                break;\n            }\n            case 'byte-order-mark':\n            case 'space':\n                break;\n            case 'comment':\n            case 'newline':\n                this.prelude.push(token.source);\n                break;\n            case 'error': {\n                const msg = token.source\n                    ? `${token.message}: ${JSON.stringify(token.source)}`\n                    : token.message;\n                const error = new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg);\n                if (this.atDirectives || !this.doc)\n                    this.errors.push(error);\n                else\n                    this.doc.errors.push(error);\n                break;\n            }\n            case 'doc-end': {\n                if (!this.doc) {\n                    const msg = 'Unexpected doc-end without preceding document';\n                    this.errors.push(new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg));\n                    break;\n                }\n                this.doc.directives.docEnd = true;\n                const end = resolveEnd(token.end, token.offset + token.source.length, this.doc.options.strict, this.onError);\n                this.decorate(this.doc, true);\n                if (end.comment) {\n                    const dc = this.doc.comment;\n                    this.doc.comment = dc ? `${dc}\\n${end.comment}` : end.comment;\n                }\n                this.doc.range[2] = end.offset;\n                break;\n            }\n            default:\n                this.errors.push(new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', `Unsupported token ${token.type}`));\n        }\n    }\n    /**\n     * Call at end of input to yield any remaining document.\n     *\n     * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n     * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n     */\n    *end(forceDoc = false, endOffset = -1) {\n        if (this.doc) {\n            this.decorate(this.doc, true);\n            yield this.doc;\n            this.doc = null;\n        }\n        else if (forceDoc) {\n            const opts = Object.assign({ _directives: this.directives }, this.options);\n            const doc = new Document(undefined, opts);\n            if (this.atDirectives)\n                this.onError(endOffset, 'MISSING_CHAR', 'Missing directives-end indicator line');\n            doc.range = [0, endOffset, endOffset];\n            this.decorate(doc, false);\n            yield doc;\n        }\n    }\n}\n\nexport { Composer };\n","const BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove item');\n/**\n * Apply a visitor to a CST document or item.\n *\n * Walks through the tree (depth-first) starting from the root, calling a\n * `visitor` function with two arguments when entering each item:\n *   - `item`: The current item, which included the following members:\n *     - `start: SourceToken[]` – Source tokens before the key or value,\n *       possibly including its anchor or tag.\n *     - `key?: Token | null` – Set for pair values. May then be `null`, if\n *       the key before the `:` separator is empty.\n *     - `sep?: SourceToken[]` – Source tokens between the key and the value,\n *       which should include the `:` map value indicator if `value` is set.\n *     - `value?: Token` – The value of a sequence item, or of a map pair.\n *   - `path`: The steps from the root to the current node, as an array of\n *     `['key' | 'value', number]` tuples.\n *\n * The return value of the visitor may be used to control the traversal:\n *   - `undefined` (default): Do nothing and continue\n *   - `visit.SKIP`: Do not visit the children of this token, continue with\n *      next sibling\n *   - `visit.BREAK`: Terminate traversal completely\n *   - `visit.REMOVE`: Remove the current item, then continue with the next one\n *   - `number`: Set the index of the next step. This is useful especially if\n *     the index of the current token has changed.\n *   - `function`: Define the next visitor for this item. After the original\n *     visitor is called on item entry, next visitors are called after handling\n *     a non-empty `key` and when exiting the item.\n */\nfunction visit(cst, visitor) {\n    if ('type' in cst && cst.type === 'document')\n        cst = { start: cst.start, value: cst.value };\n    _visit(Object.freeze([]), cst, visitor);\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current item */\nvisit.SKIP = SKIP;\n/** Remove the current item */\nvisit.REMOVE = REMOVE;\n/** Find the item at `path` from `cst` as the root */\nvisit.itemAtPath = (cst, path) => {\n    let item = cst;\n    for (const [field, index] of path) {\n        const tok = item?.[field];\n        if (tok && 'items' in tok) {\n            item = tok.items[index];\n        }\n        else\n            return undefined;\n    }\n    return item;\n};\n/**\n * Get the immediate parent collection of the item at `path` from `cst` as the root.\n *\n * Throws an error if the collection is not found, which should never happen if the item itself exists.\n */\nvisit.parentCollection = (cst, path) => {\n    const parent = visit.itemAtPath(cst, path.slice(0, -1));\n    const field = path[path.length - 1][0];\n    const coll = parent?.[field];\n    if (coll && 'items' in coll)\n        return coll;\n    throw new Error('Parent collection not found');\n};\nfunction _visit(path, item, visitor) {\n    let ctrl = visitor(item, path);\n    if (typeof ctrl === 'symbol')\n        return ctrl;\n    for (const field of ['key', 'value']) {\n        const token = item[field];\n        if (token && 'items' in token) {\n            for (let i = 0; i < token.items.length; ++i) {\n                const ci = _visit(Object.freeze(path.concat([[field, i]])), token.items[i], visitor);\n                if (typeof ci === 'number')\n                    i = ci - 1;\n                else if (ci === BREAK)\n                    return BREAK;\n                else if (ci === REMOVE) {\n                    token.items.splice(i, 1);\n                    i -= 1;\n                }\n            }\n            if (typeof ctrl === 'function' && field === 'key')\n                ctrl = ctrl(item, path);\n        }\n    }\n    return typeof ctrl === 'function' ? ctrl(item, path) : ctrl;\n}\n\nexport { visit };\n","export { createScalarToken, resolveAsScalar, setScalarValue } from './cst-scalar.js';\nexport { stringify } from './cst-stringify.js';\nexport { visit } from './cst-visit.js';\n\n/** The byte order mark */\nconst BOM = '\\u{FEFF}';\n/** Start of doc-mode */\nconst DOCUMENT = '\\x02'; // C0: Start of Text\n/** Unexpected end of flow-mode */\nconst FLOW_END = '\\x18'; // C0: Cancel\n/** Next token is a scalar value */\nconst SCALAR = '\\x1f'; // C0: Unit Separator\n/** @returns `true` if `token` is a flow or block collection */\nconst isCollection = (token) => !!token && 'items' in token;\n/** @returns `true` if `token` is a flow or block scalar; not an alias */\nconst isScalar = (token) => !!token &&\n    (token.type === 'scalar' ||\n        token.type === 'single-quoted-scalar' ||\n        token.type === 'double-quoted-scalar' ||\n        token.type === 'block-scalar');\n/* istanbul ignore next */\n/** Get a printable representation of a lexer token */\nfunction prettyToken(token) {\n    switch (token) {\n        case BOM:\n            return '<BOM>';\n        case DOCUMENT:\n            return '<DOC>';\n        case FLOW_END:\n            return '<FLOW_END>';\n        case SCALAR:\n            return '<SCALAR>';\n        default:\n            return JSON.stringify(token);\n    }\n}\n/** Identify the type of a lexer token. May return `null` for unknown tokens. */\nfunction tokenType(source) {\n    switch (source) {\n        case BOM:\n            return 'byte-order-mark';\n        case DOCUMENT:\n            return 'doc-mode';\n        case FLOW_END:\n            return 'flow-error-end';\n        case SCALAR:\n            return 'scalar';\n        case '---':\n            return 'doc-start';\n        case '...':\n            return 'doc-end';\n        case '':\n        case '\\n':\n        case '\\r\\n':\n            return 'newline';\n        case '-':\n            return 'seq-item-ind';\n        case '?':\n            return 'explicit-key-ind';\n        case ':':\n            return 'map-value-ind';\n        case '{':\n            return 'flow-map-start';\n        case '}':\n            return 'flow-map-end';\n        case '[':\n            return 'flow-seq-start';\n        case ']':\n            return 'flow-seq-end';\n        case ',':\n            return 'comma';\n    }\n    switch (source[0]) {\n        case ' ':\n        case '\\t':\n            return 'space';\n        case '#':\n            return 'comment';\n        case '%':\n            return 'directive-line';\n        case '*':\n            return 'alias';\n        case '&':\n            return 'anchor';\n        case '!':\n            return 'tag';\n        case \"'\":\n            return 'single-quoted-scalar';\n        case '\"':\n            return 'double-quoted-scalar';\n        case '|':\n        case '>':\n            return 'block-scalar-header';\n    }\n    return null;\n}\n\nexport { BOM, DOCUMENT, FLOW_END, SCALAR, isCollection, isScalar, prettyToken, tokenType };\n","import { BOM, DOCUMENT, FLOW_END, SCALAR } from './cst.js';\n\n/*\nSTART -> stream\n\nstream\n  directive -> line-end -> stream\n  indent + line-end -> stream\n  [else] -> line-start\n\nline-end\n  comment -> line-end\n  newline -> .\n  input-end -> END\n\nline-start\n  doc-start -> doc\n  doc-end -> stream\n  [else] -> indent -> block-start\n\nblock-start\n  seq-item-start -> block-start\n  explicit-key-start -> block-start\n  map-value-start -> block-start\n  [else] -> doc\n\ndoc\n  line-end -> line-start\n  spaces -> doc\n  anchor -> doc\n  tag -> doc\n  flow-start -> flow -> doc\n  flow-end -> error -> doc\n  seq-item-start -> error -> doc\n  explicit-key-start -> error -> doc\n  map-value-start -> doc\n  alias -> doc\n  quote-start -> quoted-scalar -> doc\n  block-scalar-header -> line-end -> block-scalar(min) -> line-start\n  [else] -> plain-scalar(false, min) -> doc\n\nflow\n  line-end -> flow\n  spaces -> flow\n  anchor -> flow\n  tag -> flow\n  flow-start -> flow -> flow\n  flow-end -> .\n  seq-item-start -> error -> flow\n  explicit-key-start -> flow\n  map-value-start -> flow\n  alias -> flow\n  quote-start -> quoted-scalar -> flow\n  comma -> flow\n  [else] -> plain-scalar(true, 0) -> flow\n\nquoted-scalar\n  quote-end -> .\n  [else] -> quoted-scalar\n\nblock-scalar(min)\n  newline + peek(indent < min) -> .\n  [else] -> block-scalar(min)\n\nplain-scalar(is-flow, min)\n  scalar-end(is-flow) -> .\n  peek(newline + (indent < min)) -> .\n  [else] -> plain-scalar(min)\n*/\nfunction isEmpty(ch) {\n    switch (ch) {\n        case undefined:\n        case ' ':\n        case '\\n':\n        case '\\r':\n        case '\\t':\n            return true;\n        default:\n            return false;\n    }\n}\nconst hexDigits = new Set('0123456789ABCDEFabcdef');\nconst tagChars = new Set(\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()\");\nconst flowIndicatorChars = new Set(',[]{}');\nconst invalidAnchorChars = new Set(' ,[]{}\\n\\r\\t');\nconst isNotAnchorChar = (ch) => !ch || invalidAnchorChars.has(ch);\n/**\n * Splits an input string into lexical tokens, i.e. smaller strings that are\n * easily identifiable by `tokens.tokenType()`.\n *\n * Lexing starts always in a \"stream\" context. Incomplete input may be buffered\n * until a complete token can be emitted.\n *\n * In addition to slices of the original input, the following control characters\n * may also be emitted:\n *\n * - `\\x02` (Start of Text): A document starts with the next token\n * - `\\x18` (Cancel): Unexpected end of flow-mode (indicates an error)\n * - `\\x1f` (Unit Separator): Next token is a scalar value\n * - `\\u{FEFF}` (Byte order mark): Emitted separately outside documents\n */\nclass Lexer {\n    constructor() {\n        /**\n         * Flag indicating whether the end of the current buffer marks the end of\n         * all input\n         */\n        this.atEnd = false;\n        /**\n         * Explicit indent set in block scalar header, as an offset from the current\n         * minimum indent, so e.g. set to 1 from a header `|2+`. Set to -1 if not\n         * explicitly set.\n         */\n        this.blockScalarIndent = -1;\n        /**\n         * Block scalars that include a + (keep) chomping indicator in their header\n         * include trailing empty lines, which are otherwise excluded from the\n         * scalar's contents.\n         */\n        this.blockScalarKeep = false;\n        /** Current input */\n        this.buffer = '';\n        /**\n         * Flag noting whether the map value indicator : can immediately follow this\n         * node within a flow context.\n         */\n        this.flowKey = false;\n        /** Count of surrounding flow collection levels. */\n        this.flowLevel = 0;\n        /**\n         * Minimum level of indentation required for next lines to be parsed as a\n         * part of the current scalar value.\n         */\n        this.indentNext = 0;\n        /** Indentation level of the current line. */\n        this.indentValue = 0;\n        /** Position of the next \\n character. */\n        this.lineEndPos = null;\n        /** Stores the state of the lexer if reaching the end of incpomplete input */\n        this.next = null;\n        /** A pointer to `buffer`; the current position of the lexer. */\n        this.pos = 0;\n    }\n    /**\n     * Generate YAML tokens from the `source` string. If `incomplete`,\n     * a part of the last line may be left as a buffer for the next call.\n     *\n     * @returns A generator of lexical tokens\n     */\n    *lex(source, incomplete = false) {\n        if (source) {\n            if (typeof source !== 'string')\n                throw TypeError('source is not a string');\n            this.buffer = this.buffer ? this.buffer + source : source;\n            this.lineEndPos = null;\n        }\n        this.atEnd = !incomplete;\n        let next = this.next ?? 'stream';\n        while (next && (incomplete || this.hasChars(1)))\n            next = yield* this.parseNext(next);\n    }\n    atLineEnd() {\n        let i = this.pos;\n        let ch = this.buffer[i];\n        while (ch === ' ' || ch === '\\t')\n            ch = this.buffer[++i];\n        if (!ch || ch === '#' || ch === '\\n')\n            return true;\n        if (ch === '\\r')\n            return this.buffer[i + 1] === '\\n';\n        return false;\n    }\n    charAt(n) {\n        return this.buffer[this.pos + n];\n    }\n    continueScalar(offset) {\n        let ch = this.buffer[offset];\n        if (this.indentNext > 0) {\n            let indent = 0;\n            while (ch === ' ')\n                ch = this.buffer[++indent + offset];\n            if (ch === '\\r') {\n                const next = this.buffer[indent + offset + 1];\n                if (next === '\\n' || (!next && !this.atEnd))\n                    return offset + indent + 1;\n            }\n            return ch === '\\n' || indent >= this.indentNext || (!ch && !this.atEnd)\n                ? offset + indent\n                : -1;\n        }\n        if (ch === '-' || ch === '.') {\n            const dt = this.buffer.substr(offset, 3);\n            if ((dt === '---' || dt === '...') && isEmpty(this.buffer[offset + 3]))\n                return -1;\n        }\n        return offset;\n    }\n    getLine() {\n        let end = this.lineEndPos;\n        if (typeof end !== 'number' || (end !== -1 && end < this.pos)) {\n            end = this.buffer.indexOf('\\n', this.pos);\n            this.lineEndPos = end;\n        }\n        if (end === -1)\n            return this.atEnd ? this.buffer.substring(this.pos) : null;\n        if (this.buffer[end - 1] === '\\r')\n            end -= 1;\n        return this.buffer.substring(this.pos, end);\n    }\n    hasChars(n) {\n        return this.pos + n <= this.buffer.length;\n    }\n    setNext(state) {\n        this.buffer = this.buffer.substring(this.pos);\n        this.pos = 0;\n        this.lineEndPos = null;\n        this.next = state;\n        return null;\n    }\n    peek(n) {\n        return this.buffer.substr(this.pos, n);\n    }\n    *parseNext(next) {\n        switch (next) {\n            case 'stream':\n                return yield* this.parseStream();\n            case 'line-start':\n                return yield* this.parseLineStart();\n            case 'block-start':\n                return yield* this.parseBlockStart();\n            case 'doc':\n                return yield* this.parseDocument();\n            case 'flow':\n                return yield* this.parseFlowCollection();\n            case 'quoted-scalar':\n                return yield* this.parseQuotedScalar();\n            case 'block-scalar':\n                return yield* this.parseBlockScalar();\n            case 'plain-scalar':\n                return yield* this.parsePlainScalar();\n        }\n    }\n    *parseStream() {\n        let line = this.getLine();\n        if (line === null)\n            return this.setNext('stream');\n        if (line[0] === BOM) {\n            yield* this.pushCount(1);\n            line = line.substring(1);\n        }\n        if (line[0] === '%') {\n            let dirEnd = line.length;\n            let cs = line.indexOf('#');\n            while (cs !== -1) {\n                const ch = line[cs - 1];\n                if (ch === ' ' || ch === '\\t') {\n                    dirEnd = cs - 1;\n                    break;\n                }\n                else {\n                    cs = line.indexOf('#', cs + 1);\n                }\n            }\n            while (true) {\n                const ch = line[dirEnd - 1];\n                if (ch === ' ' || ch === '\\t')\n                    dirEnd -= 1;\n                else\n                    break;\n            }\n            const n = (yield* this.pushCount(dirEnd)) + (yield* this.pushSpaces(true));\n            yield* this.pushCount(line.length - n); // possible comment\n            this.pushNewline();\n            return 'stream';\n        }\n        if (this.atLineEnd()) {\n            const sp = yield* this.pushSpaces(true);\n            yield* this.pushCount(line.length - sp);\n            yield* this.pushNewline();\n            return 'stream';\n        }\n        yield DOCUMENT;\n        return yield* this.parseLineStart();\n    }\n    *parseLineStart() {\n        const ch = this.charAt(0);\n        if (!ch && !this.atEnd)\n            return this.setNext('line-start');\n        if (ch === '-' || ch === '.') {\n            if (!this.atEnd && !this.hasChars(4))\n                return this.setNext('line-start');\n            const s = this.peek(3);\n            if ((s === '---' || s === '...') && isEmpty(this.charAt(3))) {\n                yield* this.pushCount(3);\n                this.indentValue = 0;\n                this.indentNext = 0;\n                return s === '---' ? 'doc' : 'stream';\n            }\n        }\n        this.indentValue = yield* this.pushSpaces(false);\n        if (this.indentNext > this.indentValue && !isEmpty(this.charAt(1)))\n            this.indentNext = this.indentValue;\n        return yield* this.parseBlockStart();\n    }\n    *parseBlockStart() {\n        const [ch0, ch1] = this.peek(2);\n        if (!ch1 && !this.atEnd)\n            return this.setNext('block-start');\n        if ((ch0 === '-' || ch0 === '?' || ch0 === ':') && isEmpty(ch1)) {\n            const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true));\n            this.indentNext = this.indentValue + 1;\n            this.indentValue += n;\n            return yield* this.parseBlockStart();\n        }\n        return 'doc';\n    }\n    *parseDocument() {\n        yield* this.pushSpaces(true);\n        const line = this.getLine();\n        if (line === null)\n            return this.setNext('doc');\n        let n = yield* this.pushIndicators();\n        switch (line[n]) {\n            case '#':\n                yield* this.pushCount(line.length - n);\n            // fallthrough\n            case undefined:\n                yield* this.pushNewline();\n                return yield* this.parseLineStart();\n            case '{':\n            case '[':\n                yield* this.pushCount(1);\n                this.flowKey = false;\n                this.flowLevel = 1;\n                return 'flow';\n            case '}':\n            case ']':\n                // this is an error\n                yield* this.pushCount(1);\n                return 'doc';\n            case '*':\n                yield* this.pushUntil(isNotAnchorChar);\n                return 'doc';\n            case '\"':\n            case \"'\":\n                return yield* this.parseQuotedScalar();\n            case '|':\n            case '>':\n                n += yield* this.parseBlockScalarHeader();\n                n += yield* this.pushSpaces(true);\n                yield* this.pushCount(line.length - n);\n                yield* this.pushNewline();\n                return yield* this.parseBlockScalar();\n            default:\n                return yield* this.parsePlainScalar();\n        }\n    }\n    *parseFlowCollection() {\n        let nl, sp;\n        let indent = -1;\n        do {\n            nl = yield* this.pushNewline();\n            if (nl > 0) {\n                sp = yield* this.pushSpaces(false);\n                this.indentValue = indent = sp;\n            }\n            else {\n                sp = 0;\n            }\n            sp += yield* this.pushSpaces(true);\n        } while (nl + sp > 0);\n        const line = this.getLine();\n        if (line === null)\n            return this.setNext('flow');\n        if ((indent !== -1 && indent < this.indentNext && line[0] !== '#') ||\n            (indent === 0 &&\n                (line.startsWith('---') || line.startsWith('...')) &&\n                isEmpty(line[3]))) {\n            // Allowing for the terminal ] or } at the same (rather than greater)\n            // indent level as the initial [ or { is technically invalid, but\n            // failing here would be surprising to users.\n            const atFlowEndMarker = indent === this.indentNext - 1 &&\n                this.flowLevel === 1 &&\n                (line[0] === ']' || line[0] === '}');\n            if (!atFlowEndMarker) {\n                // this is an error\n                this.flowLevel = 0;\n                yield FLOW_END;\n                return yield* this.parseLineStart();\n            }\n        }\n        let n = 0;\n        while (line[n] === ',') {\n            n += yield* this.pushCount(1);\n            n += yield* this.pushSpaces(true);\n            this.flowKey = false;\n        }\n        n += yield* this.pushIndicators();\n        switch (line[n]) {\n            case undefined:\n                return 'flow';\n            case '#':\n                yield* this.pushCount(line.length - n);\n                return 'flow';\n            case '{':\n            case '[':\n                yield* this.pushCount(1);\n                this.flowKey = false;\n                this.flowLevel += 1;\n                return 'flow';\n            case '}':\n            case ']':\n                yield* this.pushCount(1);\n                this.flowKey = true;\n                this.flowLevel -= 1;\n                return this.flowLevel ? 'flow' : 'doc';\n            case '*':\n                yield* this.pushUntil(isNotAnchorChar);\n                return 'flow';\n            case '\"':\n            case \"'\":\n                this.flowKey = true;\n                return yield* this.parseQuotedScalar();\n            case ':': {\n                const next = this.charAt(1);\n                if (this.flowKey || isEmpty(next) || next === ',') {\n                    this.flowKey = false;\n                    yield* this.pushCount(1);\n                    yield* this.pushSpaces(true);\n                    return 'flow';\n                }\n            }\n            // fallthrough\n            default:\n                this.flowKey = false;\n                return yield* this.parsePlainScalar();\n        }\n    }\n    *parseQuotedScalar() {\n        const quote = this.charAt(0);\n        let end = this.buffer.indexOf(quote, this.pos + 1);\n        if (quote === \"'\") {\n            while (end !== -1 && this.buffer[end + 1] === \"'\")\n                end = this.buffer.indexOf(\"'\", end + 2);\n        }\n        else {\n            // double-quote\n            while (end !== -1) {\n                let n = 0;\n                while (this.buffer[end - 1 - n] === '\\\\')\n                    n += 1;\n                if (n % 2 === 0)\n                    break;\n                end = this.buffer.indexOf('\"', end + 1);\n            }\n        }\n        // Only looking for newlines within the quotes\n        const qb = this.buffer.substring(0, end);\n        let nl = qb.indexOf('\\n', this.pos);\n        if (nl !== -1) {\n            while (nl !== -1) {\n                const cs = this.continueScalar(nl + 1);\n                if (cs === -1)\n                    break;\n                nl = qb.indexOf('\\n', cs);\n            }\n            if (nl !== -1) {\n                // this is an error caused by an unexpected unindent\n                end = nl - (qb[nl - 1] === '\\r' ? 2 : 1);\n            }\n        }\n        if (end === -1) {\n            if (!this.atEnd)\n                return this.setNext('quoted-scalar');\n            end = this.buffer.length;\n        }\n        yield* this.pushToIndex(end + 1, false);\n        return this.flowLevel ? 'flow' : 'doc';\n    }\n    *parseBlockScalarHeader() {\n        this.blockScalarIndent = -1;\n        this.blockScalarKeep = false;\n        let i = this.pos;\n        while (true) {\n            const ch = this.buffer[++i];\n            if (ch === '+')\n                this.blockScalarKeep = true;\n            else if (ch > '0' && ch <= '9')\n                this.blockScalarIndent = Number(ch) - 1;\n            else if (ch !== '-')\n                break;\n        }\n        return yield* this.pushUntil(ch => isEmpty(ch) || ch === '#');\n    }\n    *parseBlockScalar() {\n        let nl = this.pos - 1; // may be -1 if this.pos === 0\n        let indent = 0;\n        let ch;\n        loop: for (let i = this.pos; (ch = this.buffer[i]); ++i) {\n            switch (ch) {\n                case ' ':\n                    indent += 1;\n                    break;\n                case '\\n':\n                    nl = i;\n                    indent = 0;\n                    break;\n                case '\\r': {\n                    const next = this.buffer[i + 1];\n                    if (!next && !this.atEnd)\n                        return this.setNext('block-scalar');\n                    if (next === '\\n')\n                        break;\n                } // fallthrough\n                default:\n                    break loop;\n            }\n        }\n        if (!ch && !this.atEnd)\n            return this.setNext('block-scalar');\n        if (indent >= this.indentNext) {\n            if (this.blockScalarIndent === -1)\n                this.indentNext = indent;\n            else {\n                this.indentNext =\n                    this.blockScalarIndent + (this.indentNext === 0 ? 1 : this.indentNext);\n            }\n            do {\n                const cs = this.continueScalar(nl + 1);\n                if (cs === -1)\n                    break;\n                nl = this.buffer.indexOf('\\n', cs);\n            } while (nl !== -1);\n            if (nl === -1) {\n                if (!this.atEnd)\n                    return this.setNext('block-scalar');\n                nl = this.buffer.length;\n            }\n        }\n        // Trailing insufficiently indented tabs are invalid.\n        // To catch that during parsing, we include them in the block scalar value.\n        let i = nl + 1;\n        ch = this.buffer[i];\n        while (ch === ' ')\n            ch = this.buffer[++i];\n        if (ch === '\\t') {\n            while (ch === '\\t' || ch === ' ' || ch === '\\r' || ch === '\\n')\n                ch = this.buffer[++i];\n            nl = i - 1;\n        }\n        else if (!this.blockScalarKeep) {\n            do {\n                let i = nl - 1;\n                let ch = this.buffer[i];\n                if (ch === '\\r')\n                    ch = this.buffer[--i];\n                const lastChar = i; // Drop the line if last char not more indented\n                while (ch === ' ')\n                    ch = this.buffer[--i];\n                if (ch === '\\n' && i >= this.pos && i + 1 + indent > lastChar)\n                    nl = i;\n                else\n                    break;\n            } while (true);\n        }\n        yield SCALAR;\n        yield* this.pushToIndex(nl + 1, true);\n        return yield* this.parseLineStart();\n    }\n    *parsePlainScalar() {\n        const inFlow = this.flowLevel > 0;\n        let end = this.pos - 1;\n        let i = this.pos - 1;\n        let ch;\n        while ((ch = this.buffer[++i])) {\n            if (ch === ':') {\n                const next = this.buffer[i + 1];\n                if (isEmpty(next) || (inFlow && flowIndicatorChars.has(next)))\n                    break;\n                end = i;\n            }\n            else if (isEmpty(ch)) {\n                let next = this.buffer[i + 1];\n                if (ch === '\\r') {\n                    if (next === '\\n') {\n                        i += 1;\n                        ch = '\\n';\n                        next = this.buffer[i + 1];\n                    }\n                    else\n                        end = i;\n                }\n                if (next === '#' || (inFlow && flowIndicatorChars.has(next)))\n                    break;\n                if (ch === '\\n') {\n                    const cs = this.continueScalar(i + 1);\n                    if (cs === -1)\n                        break;\n                    i = Math.max(i, cs - 2); // to advance, but still account for ' #'\n                }\n            }\n            else {\n                if (inFlow && flowIndicatorChars.has(ch))\n                    break;\n                end = i;\n            }\n        }\n        if (!ch && !this.atEnd)\n            return this.setNext('plain-scalar');\n        yield SCALAR;\n        yield* this.pushToIndex(end + 1, true);\n        return inFlow ? 'flow' : 'doc';\n    }\n    *pushCount(n) {\n        if (n > 0) {\n            yield this.buffer.substr(this.pos, n);\n            this.pos += n;\n            return n;\n        }\n        return 0;\n    }\n    *pushToIndex(i, allowEmpty) {\n        const s = this.buffer.slice(this.pos, i);\n        if (s) {\n            yield s;\n            this.pos += s.length;\n            return s.length;\n        }\n        else if (allowEmpty)\n            yield '';\n        return 0;\n    }\n    *pushIndicators() {\n        switch (this.charAt(0)) {\n            case '!':\n                return ((yield* this.pushTag()) +\n                    (yield* this.pushSpaces(true)) +\n                    (yield* this.pushIndicators()));\n            case '&':\n                return ((yield* this.pushUntil(isNotAnchorChar)) +\n                    (yield* this.pushSpaces(true)) +\n                    (yield* this.pushIndicators()));\n            case '-': // this is an error\n            case '?': // this is an error outside flow collections\n            case ':': {\n                const inFlow = this.flowLevel > 0;\n                const ch1 = this.charAt(1);\n                if (isEmpty(ch1) || (inFlow && flowIndicatorChars.has(ch1))) {\n                    if (!inFlow)\n                        this.indentNext = this.indentValue + 1;\n                    else if (this.flowKey)\n                        this.flowKey = false;\n                    return ((yield* this.pushCount(1)) +\n                        (yield* this.pushSpaces(true)) +\n                        (yield* this.pushIndicators()));\n                }\n            }\n        }\n        return 0;\n    }\n    *pushTag() {\n        if (this.charAt(1) === '<') {\n            let i = this.pos + 2;\n            let ch = this.buffer[i];\n            while (!isEmpty(ch) && ch !== '>')\n                ch = this.buffer[++i];\n            return yield* this.pushToIndex(ch === '>' ? i + 1 : i, false);\n        }\n        else {\n            let i = this.pos + 1;\n            let ch = this.buffer[i];\n            while (ch) {\n                if (tagChars.has(ch))\n                    ch = this.buffer[++i];\n                else if (ch === '%' &&\n                    hexDigits.has(this.buffer[i + 1]) &&\n                    hexDigits.has(this.buffer[i + 2])) {\n                    ch = this.buffer[(i += 3)];\n                }\n                else\n                    break;\n            }\n            return yield* this.pushToIndex(i, false);\n        }\n    }\n    *pushNewline() {\n        const ch = this.buffer[this.pos];\n        if (ch === '\\n')\n            return yield* this.pushCount(1);\n        else if (ch === '\\r' && this.charAt(1) === '\\n')\n            return yield* this.pushCount(2);\n        else\n            return 0;\n    }\n    *pushSpaces(allowTabs) {\n        let i = this.pos - 1;\n        let ch;\n        do {\n            ch = this.buffer[++i];\n        } while (ch === ' ' || (allowTabs && ch === '\\t'));\n        const n = i - this.pos;\n        if (n > 0) {\n            yield this.buffer.substr(this.pos, n);\n            this.pos = i;\n        }\n        return n;\n    }\n    *pushUntil(test) {\n        let i = this.pos;\n        let ch = this.buffer[i];\n        while (!test(ch))\n            ch = this.buffer[++i];\n        return yield* this.pushToIndex(i, false);\n    }\n}\n\nexport { Lexer };\n","/**\n * Tracks newlines during parsing in order to provide an efficient API for\n * determining the one-indexed `{ line, col }` position for any offset\n * within the input.\n */\nclass LineCounter {\n    constructor() {\n        this.lineStarts = [];\n        /**\n         * Should be called in ascending order. Otherwise, call\n         * `lineCounter.lineStarts.sort()` before calling `linePos()`.\n         */\n        this.addNewLine = (offset) => this.lineStarts.push(offset);\n        /**\n         * Performs a binary search and returns the 1-indexed { line, col }\n         * position of `offset`. If `line === 0`, `addNewLine` has never been\n         * called or `offset` is before the first known newline.\n         */\n        this.linePos = (offset) => {\n            let low = 0;\n            let high = this.lineStarts.length;\n            while (low < high) {\n                const mid = (low + high) >> 1; // Math.floor((low + high) / 2)\n                if (this.lineStarts[mid] < offset)\n                    low = mid + 1;\n                else\n                    high = mid;\n            }\n            if (this.lineStarts[low] === offset)\n                return { line: low + 1, col: 1 };\n            if (low === 0)\n                return { line: 0, col: offset };\n            const start = this.lineStarts[low - 1];\n            return { line: low, col: offset - start + 1 };\n        };\n    }\n}\n\nexport { LineCounter };\n","import { tokenType } from './cst.js';\nimport { Lexer } from './lexer.js';\n\nfunction includesToken(list, type) {\n    for (let i = 0; i < list.length; ++i)\n        if (list[i].type === type)\n            return true;\n    return false;\n}\nfunction findNonEmptyIndex(list) {\n    for (let i = 0; i < list.length; ++i) {\n        switch (list[i].type) {\n            case 'space':\n            case 'comment':\n            case 'newline':\n                break;\n            default:\n                return i;\n        }\n    }\n    return -1;\n}\nfunction isFlowToken(token) {\n    switch (token?.type) {\n        case 'alias':\n        case 'scalar':\n        case 'single-quoted-scalar':\n        case 'double-quoted-scalar':\n        case 'flow-collection':\n            return true;\n        default:\n            return false;\n    }\n}\nfunction getPrevProps(parent) {\n    switch (parent.type) {\n        case 'document':\n            return parent.start;\n        case 'block-map': {\n            const it = parent.items[parent.items.length - 1];\n            return it.sep ?? it.start;\n        }\n        case 'block-seq':\n            return parent.items[parent.items.length - 1].start;\n        /* istanbul ignore next should not happen */\n        default:\n            return [];\n    }\n}\n/** Note: May modify input array */\nfunction getFirstKeyStartProps(prev) {\n    if (prev.length === 0)\n        return [];\n    let i = prev.length;\n    loop: while (--i >= 0) {\n        switch (prev[i].type) {\n            case 'doc-start':\n            case 'explicit-key-ind':\n            case 'map-value-ind':\n            case 'seq-item-ind':\n            case 'newline':\n                break loop;\n        }\n    }\n    while (prev[++i]?.type === 'space') {\n        /* loop */\n    }\n    return prev.splice(i, prev.length);\n}\nfunction fixFlowSeqItems(fc) {\n    if (fc.start.type === 'flow-seq-start') {\n        for (const it of fc.items) {\n            if (it.sep &&\n                !it.value &&\n                !includesToken(it.start, 'explicit-key-ind') &&\n                !includesToken(it.sep, 'map-value-ind')) {\n                if (it.key)\n                    it.value = it.key;\n                delete it.key;\n                if (isFlowToken(it.value)) {\n                    if (it.value.end)\n                        Array.prototype.push.apply(it.value.end, it.sep);\n                    else\n                        it.value.end = it.sep;\n                }\n                else\n                    Array.prototype.push.apply(it.start, it.sep);\n                delete it.sep;\n            }\n        }\n    }\n}\n/**\n * A YAML concrete syntax tree (CST) parser\n *\n * ```ts\n * const src: string = ...\n * for (const token of new Parser().parse(src)) {\n *   // token: Token\n * }\n * ```\n *\n * To use the parser with a user-provided lexer:\n *\n * ```ts\n * function* parse(source: string, lexer: Lexer) {\n *   const parser = new Parser()\n *   for (const lexeme of lexer.lex(source))\n *     yield* parser.next(lexeme)\n *   yield* parser.end()\n * }\n *\n * const src: string = ...\n * const lexer = new Lexer()\n * for (const token of parse(src, lexer)) {\n *   // token: Token\n * }\n * ```\n */\nclass Parser {\n    /**\n     * @param onNewLine - If defined, called separately with the start position of\n     *   each new line (in `parse()`, including the start of input).\n     */\n    constructor(onNewLine) {\n        /** If true, space and sequence indicators count as indentation */\n        this.atNewLine = true;\n        /** If true, next token is a scalar value */\n        this.atScalar = false;\n        /** Current indentation level */\n        this.indent = 0;\n        /** Current offset since the start of parsing */\n        this.offset = 0;\n        /** On the same line with a block map key */\n        this.onKeyLine = false;\n        /** Top indicates the node that's currently being built */\n        this.stack = [];\n        /** The source of the current token, set in parse() */\n        this.source = '';\n        /** The type of the current token, set in parse() */\n        this.type = '';\n        // Must be defined after `next()`\n        this.lexer = new Lexer();\n        this.onNewLine = onNewLine;\n    }\n    /**\n     * Parse `source` as a YAML stream.\n     * If `incomplete`, a part of the last line may be left as a buffer for the next call.\n     *\n     * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens.\n     *\n     * @returns A generator of tokens representing each directive, document, and other structure.\n     */\n    *parse(source, incomplete = false) {\n        if (this.onNewLine && this.offset === 0)\n            this.onNewLine(0);\n        for (const lexeme of this.lexer.lex(source, incomplete))\n            yield* this.next(lexeme);\n        if (!incomplete)\n            yield* this.end();\n    }\n    /**\n     * Advance the parser by the `source` of one lexical token.\n     */\n    *next(source) {\n        this.source = source;\n        if (this.atScalar) {\n            this.atScalar = false;\n            yield* this.step();\n            this.offset += source.length;\n            return;\n        }\n        const type = tokenType(source);\n        if (!type) {\n            const message = `Not a YAML token: ${source}`;\n            yield* this.pop({ type: 'error', offset: this.offset, message, source });\n            this.offset += source.length;\n        }\n        else if (type === 'scalar') {\n            this.atNewLine = false;\n            this.atScalar = true;\n            this.type = 'scalar';\n        }\n        else {\n            this.type = type;\n            yield* this.step();\n            switch (type) {\n                case 'newline':\n                    this.atNewLine = true;\n                    this.indent = 0;\n                    if (this.onNewLine)\n                        this.onNewLine(this.offset + source.length);\n                    break;\n                case 'space':\n                    if (this.atNewLine && source[0] === ' ')\n                        this.indent += source.length;\n                    break;\n                case 'explicit-key-ind':\n                case 'map-value-ind':\n                case 'seq-item-ind':\n                    if (this.atNewLine)\n                        this.indent += source.length;\n                    break;\n                case 'doc-mode':\n                case 'flow-error-end':\n                    return;\n                default:\n                    this.atNewLine = false;\n            }\n            this.offset += source.length;\n        }\n    }\n    /** Call at end of input to push out any remaining constructions */\n    *end() {\n        while (this.stack.length > 0)\n            yield* this.pop();\n    }\n    get sourceToken() {\n        const st = {\n            type: this.type,\n            offset: this.offset,\n            indent: this.indent,\n            source: this.source\n        };\n        return st;\n    }\n    *step() {\n        const top = this.peek(1);\n        if (this.type === 'doc-end' && top?.type !== 'doc-end') {\n            while (this.stack.length > 0)\n                yield* this.pop();\n            this.stack.push({\n                type: 'doc-end',\n                offset: this.offset,\n                source: this.source\n            });\n            return;\n        }\n        if (!top)\n            return yield* this.stream();\n        switch (top.type) {\n            case 'document':\n                return yield* this.document(top);\n            case 'alias':\n            case 'scalar':\n            case 'single-quoted-scalar':\n            case 'double-quoted-scalar':\n                return yield* this.scalar(top);\n            case 'block-scalar':\n                return yield* this.blockScalar(top);\n            case 'block-map':\n                return yield* this.blockMap(top);\n            case 'block-seq':\n                return yield* this.blockSequence(top);\n            case 'flow-collection':\n                return yield* this.flowCollection(top);\n            case 'doc-end':\n                return yield* this.documentEnd(top);\n        }\n        /* istanbul ignore next should not happen */\n        yield* this.pop();\n    }\n    peek(n) {\n        return this.stack[this.stack.length - n];\n    }\n    *pop(error) {\n        const token = error ?? this.stack.pop();\n        /* istanbul ignore if should not happen */\n        if (!token) {\n            const message = 'Tried to pop an empty stack';\n            yield { type: 'error', offset: this.offset, source: '', message };\n        }\n        else if (this.stack.length === 0) {\n            yield token;\n        }\n        else {\n            const top = this.peek(1);\n            if (token.type === 'block-scalar') {\n                // Block scalars use their parent rather than header indent\n                token.indent = 'indent' in top ? top.indent : 0;\n            }\n            else if (token.type === 'flow-collection' && top.type === 'document') {\n                // Ignore all indent for top-level flow collections\n                token.indent = 0;\n            }\n            if (token.type === 'flow-collection')\n                fixFlowSeqItems(token);\n            switch (top.type) {\n                case 'document':\n                    top.value = token;\n                    break;\n                case 'block-scalar':\n                    top.props.push(token); // error\n                    break;\n                case 'block-map': {\n                    const it = top.items[top.items.length - 1];\n                    if (it.value) {\n                        top.items.push({ start: [], key: token, sep: [] });\n                        this.onKeyLine = true;\n                        return;\n                    }\n                    else if (it.sep) {\n                        it.value = token;\n                    }\n                    else {\n                        Object.assign(it, { key: token, sep: [] });\n                        this.onKeyLine = !it.explicitKey;\n                        return;\n                    }\n                    break;\n                }\n                case 'block-seq': {\n                    const it = top.items[top.items.length - 1];\n                    if (it.value)\n                        top.items.push({ start: [], value: token });\n                    else\n                        it.value = token;\n                    break;\n                }\n                case 'flow-collection': {\n                    const it = top.items[top.items.length - 1];\n                    if (!it || it.value)\n                        top.items.push({ start: [], key: token, sep: [] });\n                    else if (it.sep)\n                        it.value = token;\n                    else\n                        Object.assign(it, { key: token, sep: [] });\n                    return;\n                }\n                /* istanbul ignore next should not happen */\n                default:\n                    yield* this.pop();\n                    yield* this.pop(token);\n            }\n            if ((top.type === 'document' ||\n                top.type === 'block-map' ||\n                top.type === 'block-seq') &&\n                (token.type === 'block-map' || token.type === 'block-seq')) {\n                const last = token.items[token.items.length - 1];\n                if (last &&\n                    !last.sep &&\n                    !last.value &&\n                    last.start.length > 0 &&\n                    findNonEmptyIndex(last.start) === -1 &&\n                    (token.indent === 0 ||\n                        last.start.every(st => st.type !== 'comment' || st.indent < token.indent))) {\n                    if (top.type === 'document')\n                        top.end = last.start;\n                    else\n                        top.items.push({ start: last.start });\n                    token.items.splice(-1, 1);\n                }\n            }\n        }\n    }\n    *stream() {\n        switch (this.type) {\n            case 'directive-line':\n                yield { type: 'directive', offset: this.offset, source: this.source };\n                return;\n            case 'byte-order-mark':\n            case 'space':\n            case 'comment':\n            case 'newline':\n                yield this.sourceToken;\n                return;\n            case 'doc-mode':\n            case 'doc-start': {\n                const doc = {\n                    type: 'document',\n                    offset: this.offset,\n                    start: []\n                };\n                if (this.type === 'doc-start')\n                    doc.start.push(this.sourceToken);\n                this.stack.push(doc);\n                return;\n            }\n        }\n        yield {\n            type: 'error',\n            offset: this.offset,\n            message: `Unexpected ${this.type} token in YAML stream`,\n            source: this.source\n        };\n    }\n    *document(doc) {\n        if (doc.value)\n            return yield* this.lineEnd(doc);\n        switch (this.type) {\n            case 'doc-start': {\n                if (findNonEmptyIndex(doc.start) !== -1) {\n                    yield* this.pop();\n                    yield* this.step();\n                }\n                else\n                    doc.start.push(this.sourceToken);\n                return;\n            }\n            case 'anchor':\n            case 'tag':\n            case 'space':\n            case 'comment':\n            case 'newline':\n                doc.start.push(this.sourceToken);\n                return;\n        }\n        const bv = this.startBlockValue(doc);\n        if (bv)\n            this.stack.push(bv);\n        else {\n            yield {\n                type: 'error',\n                offset: this.offset,\n                message: `Unexpected ${this.type} token in YAML document`,\n                source: this.source\n            };\n        }\n    }\n    *scalar(scalar) {\n        if (this.type === 'map-value-ind') {\n            const prev = getPrevProps(this.peek(2));\n            const start = getFirstKeyStartProps(prev);\n            let sep;\n            if (scalar.end) {\n                sep = scalar.end;\n                sep.push(this.sourceToken);\n                delete scalar.end;\n            }\n            else\n                sep = [this.sourceToken];\n            const map = {\n                type: 'block-map',\n                offset: scalar.offset,\n                indent: scalar.indent,\n                items: [{ start, key: scalar, sep }]\n            };\n            this.onKeyLine = true;\n            this.stack[this.stack.length - 1] = map;\n        }\n        else\n            yield* this.lineEnd(scalar);\n    }\n    *blockScalar(scalar) {\n        switch (this.type) {\n            case 'space':\n            case 'comment':\n            case 'newline':\n                scalar.props.push(this.sourceToken);\n                return;\n            case 'scalar':\n                scalar.source = this.source;\n                // block-scalar source includes trailing newline\n                this.atNewLine = true;\n                this.indent = 0;\n                if (this.onNewLine) {\n                    let nl = this.source.indexOf('\\n') + 1;\n                    while (nl !== 0) {\n                        this.onNewLine(this.offset + nl);\n                        nl = this.source.indexOf('\\n', nl) + 1;\n                    }\n                }\n                yield* this.pop();\n                break;\n            /* istanbul ignore next should not happen */\n            default:\n                yield* this.pop();\n                yield* this.step();\n        }\n    }\n    *blockMap(map) {\n        const it = map.items[map.items.length - 1];\n        // it.sep is true-ish if pair already has key or : separator\n        switch (this.type) {\n            case 'newline':\n                this.onKeyLine = false;\n                if (it.value) {\n                    const end = 'end' in it.value ? it.value.end : undefined;\n                    const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n                    if (last?.type === 'comment')\n                        end?.push(this.sourceToken);\n                    else\n                        map.items.push({ start: [this.sourceToken] });\n                }\n                else if (it.sep) {\n                    it.sep.push(this.sourceToken);\n                }\n                else {\n                    it.start.push(this.sourceToken);\n                }\n                return;\n            case 'space':\n            case 'comment':\n                if (it.value) {\n                    map.items.push({ start: [this.sourceToken] });\n                }\n                else if (it.sep) {\n                    it.sep.push(this.sourceToken);\n                }\n                else {\n                    if (this.atIndentedComment(it.start, map.indent)) {\n                        const prev = map.items[map.items.length - 2];\n                        const end = prev?.value?.end;\n                        if (Array.isArray(end)) {\n                            Array.prototype.push.apply(end, it.start);\n                            end.push(this.sourceToken);\n                            map.items.pop();\n                            return;\n                        }\n                    }\n                    it.start.push(this.sourceToken);\n                }\n                return;\n        }\n        if (this.indent >= map.indent) {\n            const atMapIndent = !this.onKeyLine && this.indent === map.indent;\n            const atNextItem = atMapIndent &&\n                (it.sep || it.explicitKey) &&\n                this.type !== 'seq-item-ind';\n            // For empty nodes, assign newline-separated not indented empty tokens to following node\n            let start = [];\n            if (atNextItem && it.sep && !it.value) {\n                const nl = [];\n                for (let i = 0; i < it.sep.length; ++i) {\n                    const st = it.sep[i];\n                    switch (st.type) {\n                        case 'newline':\n                            nl.push(i);\n                            break;\n                        case 'space':\n                            break;\n                        case 'comment':\n                            if (st.indent > map.indent)\n                                nl.length = 0;\n                            break;\n                        default:\n                            nl.length = 0;\n                    }\n                }\n                if (nl.length >= 2)\n                    start = it.sep.splice(nl[1]);\n            }\n            switch (this.type) {\n                case 'anchor':\n                case 'tag':\n                    if (atNextItem || it.value) {\n                        start.push(this.sourceToken);\n                        map.items.push({ start });\n                        this.onKeyLine = true;\n                    }\n                    else if (it.sep) {\n                        it.sep.push(this.sourceToken);\n                    }\n                    else {\n                        it.start.push(this.sourceToken);\n                    }\n                    return;\n                case 'explicit-key-ind':\n                    if (!it.sep && !it.explicitKey) {\n                        it.start.push(this.sourceToken);\n                        it.explicitKey = true;\n                    }\n                    else if (atNextItem || it.value) {\n                        start.push(this.sourceToken);\n                        map.items.push({ start, explicitKey: true });\n                    }\n                    else {\n                        this.stack.push({\n                            type: 'block-map',\n                            offset: this.offset,\n                            indent: this.indent,\n                            items: [{ start: [this.sourceToken], explicitKey: true }]\n                        });\n                    }\n                    this.onKeyLine = true;\n                    return;\n                case 'map-value-ind':\n                    if (it.explicitKey) {\n                        if (!it.sep) {\n                            if (includesToken(it.start, 'newline')) {\n                                Object.assign(it, { key: null, sep: [this.sourceToken] });\n                            }\n                            else {\n                                const start = getFirstKeyStartProps(it.start);\n                                this.stack.push({\n                                    type: 'block-map',\n                                    offset: this.offset,\n                                    indent: this.indent,\n                                    items: [{ start, key: null, sep: [this.sourceToken] }]\n                                });\n                            }\n                        }\n                        else if (it.value) {\n                            map.items.push({ start: [], key: null, sep: [this.sourceToken] });\n                        }\n                        else if (includesToken(it.sep, 'map-value-ind')) {\n                            this.stack.push({\n                                type: 'block-map',\n                                offset: this.offset,\n                                indent: this.indent,\n                                items: [{ start, key: null, sep: [this.sourceToken] }]\n                            });\n                        }\n                        else if (isFlowToken(it.key) &&\n                            !includesToken(it.sep, 'newline')) {\n                            const start = getFirstKeyStartProps(it.start);\n                            const key = it.key;\n                            const sep = it.sep;\n                            sep.push(this.sourceToken);\n                            // @ts-expect-error type guard is wrong here\n                            delete it.key;\n                            // @ts-expect-error type guard is wrong here\n                            delete it.sep;\n                            this.stack.push({\n                                type: 'block-map',\n                                offset: this.offset,\n                                indent: this.indent,\n                                items: [{ start, key, sep }]\n                            });\n                        }\n                        else if (start.length > 0) {\n                            // Not actually at next item\n                            it.sep = it.sep.concat(start, this.sourceToken);\n                        }\n                        else {\n                            it.sep.push(this.sourceToken);\n                        }\n                    }\n                    else {\n                        if (!it.sep) {\n                            Object.assign(it, { key: null, sep: [this.sourceToken] });\n                        }\n                        else if (it.value || atNextItem) {\n                            map.items.push({ start, key: null, sep: [this.sourceToken] });\n                        }\n                        else if (includesToken(it.sep, 'map-value-ind')) {\n                            this.stack.push({\n                                type: 'block-map',\n                                offset: this.offset,\n                                indent: this.indent,\n                                items: [{ start: [], key: null, sep: [this.sourceToken] }]\n                            });\n                        }\n                        else {\n                            it.sep.push(this.sourceToken);\n                        }\n                    }\n                    this.onKeyLine = true;\n                    return;\n                case 'alias':\n                case 'scalar':\n                case 'single-quoted-scalar':\n                case 'double-quoted-scalar': {\n                    const fs = this.flowScalar(this.type);\n                    if (atNextItem || it.value) {\n                        map.items.push({ start, key: fs, sep: [] });\n                        this.onKeyLine = true;\n                    }\n                    else if (it.sep) {\n                        this.stack.push(fs);\n                    }\n                    else {\n                        Object.assign(it, { key: fs, sep: [] });\n                        this.onKeyLine = true;\n                    }\n                    return;\n                }\n                default: {\n                    const bv = this.startBlockValue(map);\n                    if (bv) {\n                        if (bv.type === 'block-seq') {\n                            if (!it.explicitKey &&\n                                it.sep &&\n                                !includesToken(it.sep, 'newline')) {\n                                yield* this.pop({\n                                    type: 'error',\n                                    offset: this.offset,\n                                    message: 'Unexpected block-seq-ind on same line with key',\n                                    source: this.source\n                                });\n                                return;\n                            }\n                        }\n                        else if (atMapIndent) {\n                            map.items.push({ start });\n                        }\n                        this.stack.push(bv);\n                        return;\n                    }\n                }\n            }\n        }\n        yield* this.pop();\n        yield* this.step();\n    }\n    *blockSequence(seq) {\n        const it = seq.items[seq.items.length - 1];\n        switch (this.type) {\n            case 'newline':\n                if (it.value) {\n                    const end = 'end' in it.value ? it.value.end : undefined;\n                    const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n                    if (last?.type === 'comment')\n                        end?.push(this.sourceToken);\n                    else\n                        seq.items.push({ start: [this.sourceToken] });\n                }\n                else\n                    it.start.push(this.sourceToken);\n                return;\n            case 'space':\n            case 'comment':\n                if (it.value)\n                    seq.items.push({ start: [this.sourceToken] });\n                else {\n                    if (this.atIndentedComment(it.start, seq.indent)) {\n                        const prev = seq.items[seq.items.length - 2];\n                        const end = prev?.value?.end;\n                        if (Array.isArray(end)) {\n                            Array.prototype.push.apply(end, it.start);\n                            end.push(this.sourceToken);\n                            seq.items.pop();\n                            return;\n                        }\n                    }\n                    it.start.push(this.sourceToken);\n                }\n                return;\n            case 'anchor':\n            case 'tag':\n                if (it.value || this.indent <= seq.indent)\n                    break;\n                it.start.push(this.sourceToken);\n                return;\n            case 'seq-item-ind':\n                if (this.indent !== seq.indent)\n                    break;\n                if (it.value || includesToken(it.start, 'seq-item-ind'))\n                    seq.items.push({ start: [this.sourceToken] });\n                else\n                    it.start.push(this.sourceToken);\n                return;\n        }\n        if (this.indent > seq.indent) {\n            const bv = this.startBlockValue(seq);\n            if (bv) {\n                this.stack.push(bv);\n                return;\n            }\n        }\n        yield* this.pop();\n        yield* this.step();\n    }\n    *flowCollection(fc) {\n        const it = fc.items[fc.items.length - 1];\n        if (this.type === 'flow-error-end') {\n            let top;\n            do {\n                yield* this.pop();\n                top = this.peek(1);\n            } while (top?.type === 'flow-collection');\n        }\n        else if (fc.end.length === 0) {\n            switch (this.type) {\n                case 'comma':\n                case 'explicit-key-ind':\n                    if (!it || it.sep)\n                        fc.items.push({ start: [this.sourceToken] });\n                    else\n                        it.start.push(this.sourceToken);\n                    return;\n                case 'map-value-ind':\n                    if (!it || it.value)\n                        fc.items.push({ start: [], key: null, sep: [this.sourceToken] });\n                    else if (it.sep)\n                        it.sep.push(this.sourceToken);\n                    else\n                        Object.assign(it, { key: null, sep: [this.sourceToken] });\n                    return;\n                case 'space':\n                case 'comment':\n                case 'newline':\n                case 'anchor':\n                case 'tag':\n                    if (!it || it.value)\n                        fc.items.push({ start: [this.sourceToken] });\n                    else if (it.sep)\n                        it.sep.push(this.sourceToken);\n                    else\n                        it.start.push(this.sourceToken);\n                    return;\n                case 'alias':\n                case 'scalar':\n                case 'single-quoted-scalar':\n                case 'double-quoted-scalar': {\n                    const fs = this.flowScalar(this.type);\n                    if (!it || it.value)\n                        fc.items.push({ start: [], key: fs, sep: [] });\n                    else if (it.sep)\n                        this.stack.push(fs);\n                    else\n                        Object.assign(it, { key: fs, sep: [] });\n                    return;\n                }\n                case 'flow-map-end':\n                case 'flow-seq-end':\n                    fc.end.push(this.sourceToken);\n                    return;\n            }\n            const bv = this.startBlockValue(fc);\n            /* istanbul ignore else should not happen */\n            if (bv)\n                this.stack.push(bv);\n            else {\n                yield* this.pop();\n                yield* this.step();\n            }\n        }\n        else {\n            const parent = this.peek(2);\n            if (parent.type === 'block-map' &&\n                ((this.type === 'map-value-ind' && parent.indent === fc.indent) ||\n                    (this.type === 'newline' &&\n                        !parent.items[parent.items.length - 1].sep))) {\n                yield* this.pop();\n                yield* this.step();\n            }\n            else if (this.type === 'map-value-ind' &&\n                parent.type !== 'flow-collection') {\n                const prev = getPrevProps(parent);\n                const start = getFirstKeyStartProps(prev);\n                fixFlowSeqItems(fc);\n                const sep = fc.end.splice(1, fc.end.length);\n                sep.push(this.sourceToken);\n                const map = {\n                    type: 'block-map',\n                    offset: fc.offset,\n                    indent: fc.indent,\n                    items: [{ start, key: fc, sep }]\n                };\n                this.onKeyLine = true;\n                this.stack[this.stack.length - 1] = map;\n            }\n            else {\n                yield* this.lineEnd(fc);\n            }\n        }\n    }\n    flowScalar(type) {\n        if (this.onNewLine) {\n            let nl = this.source.indexOf('\\n') + 1;\n            while (nl !== 0) {\n                this.onNewLine(this.offset + nl);\n                nl = this.source.indexOf('\\n', nl) + 1;\n            }\n        }\n        return {\n            type,\n            offset: this.offset,\n            indent: this.indent,\n            source: this.source\n        };\n    }\n    startBlockValue(parent) {\n        switch (this.type) {\n            case 'alias':\n            case 'scalar':\n            case 'single-quoted-scalar':\n            case 'double-quoted-scalar':\n                return this.flowScalar(this.type);\n            case 'block-scalar-header':\n                return {\n                    type: 'block-scalar',\n                    offset: this.offset,\n                    indent: this.indent,\n                    props: [this.sourceToken],\n                    source: ''\n                };\n            case 'flow-map-start':\n            case 'flow-seq-start':\n                return {\n                    type: 'flow-collection',\n                    offset: this.offset,\n                    indent: this.indent,\n                    start: this.sourceToken,\n                    items: [],\n                    end: []\n                };\n            case 'seq-item-ind':\n                return {\n                    type: 'block-seq',\n                    offset: this.offset,\n                    indent: this.indent,\n                    items: [{ start: [this.sourceToken] }]\n                };\n            case 'explicit-key-ind': {\n                this.onKeyLine = true;\n                const prev = getPrevProps(parent);\n                const start = getFirstKeyStartProps(prev);\n                start.push(this.sourceToken);\n                return {\n                    type: 'block-map',\n                    offset: this.offset,\n                    indent: this.indent,\n                    items: [{ start, explicitKey: true }]\n                };\n            }\n            case 'map-value-ind': {\n                this.onKeyLine = true;\n                const prev = getPrevProps(parent);\n                const start = getFirstKeyStartProps(prev);\n                return {\n                    type: 'block-map',\n                    offset: this.offset,\n                    indent: this.indent,\n                    items: [{ start, key: null, sep: [this.sourceToken] }]\n                };\n            }\n        }\n        return null;\n    }\n    atIndentedComment(start, indent) {\n        if (this.type !== 'comment')\n            return false;\n        if (this.indent <= indent)\n            return false;\n        return start.every(st => st.type === 'newline' || st.type === 'space');\n    }\n    *documentEnd(docEnd) {\n        if (this.type !== 'doc-mode') {\n            if (docEnd.end)\n                docEnd.end.push(this.sourceToken);\n            else\n                docEnd.end = [this.sourceToken];\n            if (this.type === 'newline')\n                yield* this.pop();\n        }\n    }\n    *lineEnd(token) {\n        switch (this.type) {\n            case 'comma':\n            case 'doc-start':\n            case 'doc-end':\n            case 'flow-seq-end':\n            case 'flow-map-end':\n            case 'map-value-ind':\n                yield* this.pop();\n                yield* this.step();\n                break;\n            case 'newline':\n                this.onKeyLine = false;\n            // fallthrough\n            case 'space':\n            case 'comment':\n            default:\n                // all other values are errors\n                if (token.end)\n                    token.end.push(this.sourceToken);\n                else\n                    token.end = [this.sourceToken];\n                if (this.type === 'newline')\n                    yield* this.pop();\n        }\n    }\n}\n\nexport { Parser };\n","import { Composer } from './compose/composer.js';\nimport { Document } from './doc/Document.js';\nimport { prettifyError, YAMLParseError } from './errors.js';\nimport { warn } from './log.js';\nimport { isDocument } from './nodes/identity.js';\nimport { LineCounter } from './parse/line-counter.js';\nimport { Parser } from './parse/parser.js';\n\nfunction parseOptions(options) {\n    const prettyErrors = options.prettyErrors !== false;\n    const lineCounter = options.lineCounter || (prettyErrors && new LineCounter()) || null;\n    return { lineCounter, prettyErrors };\n}\n/**\n * Parse the input as a stream of YAML documents.\n *\n * Documents should be separated from each other by `...` or `---` marker lines.\n *\n * @returns If an empty `docs` array is returned, it will be of type\n *   EmptyStream and contain additional stream information. In\n *   TypeScript, you should use `'empty' in docs` as a type guard for it.\n */\nfunction parseAllDocuments(source, options = {}) {\n    const { lineCounter, prettyErrors } = parseOptions(options);\n    const parser = new Parser(lineCounter?.addNewLine);\n    const composer = new Composer(options);\n    const docs = Array.from(composer.compose(parser.parse(source)));\n    if (prettyErrors && lineCounter)\n        for (const doc of docs) {\n            doc.errors.forEach(prettifyError(source, lineCounter));\n            doc.warnings.forEach(prettifyError(source, lineCounter));\n        }\n    if (docs.length > 0)\n        return docs;\n    return Object.assign([], { empty: true }, composer.streamInfo());\n}\n/** Parse an input string into a single YAML.Document */\nfunction parseDocument(source, options = {}) {\n    const { lineCounter, prettyErrors } = parseOptions(options);\n    const parser = new Parser(lineCounter?.addNewLine);\n    const composer = new Composer(options);\n    // `doc` is always set by compose.end(true) at the very latest\n    let doc = null;\n    for (const _doc of composer.compose(parser.parse(source), true, source.length)) {\n        if (!doc)\n            doc = _doc;\n        else if (doc.options.logLevel !== 'silent') {\n            doc.errors.push(new YAMLParseError(_doc.range.slice(0, 2), 'MULTIPLE_DOCS', 'Source contains multiple documents; please use YAML.parseAllDocuments()'));\n            break;\n        }\n    }\n    if (prettyErrors && lineCounter) {\n        doc.errors.forEach(prettifyError(source, lineCounter));\n        doc.warnings.forEach(prettifyError(source, lineCounter));\n    }\n    return doc;\n}\nfunction parse(src, reviver, options) {\n    let _reviver = undefined;\n    if (typeof reviver === 'function') {\n        _reviver = reviver;\n    }\n    else if (options === undefined && reviver && typeof reviver === 'object') {\n        options = reviver;\n    }\n    const doc = parseDocument(src, options);\n    if (!doc)\n        return null;\n    doc.warnings.forEach(warning => warn(doc.options.logLevel, warning));\n    if (doc.errors.length > 0) {\n        if (doc.options.logLevel !== 'silent')\n            throw doc.errors[0];\n        else\n            doc.errors = [];\n    }\n    return doc.toJS(Object.assign({ reviver: _reviver }, options));\n}\nfunction stringify(value, replacer, options) {\n    let _replacer = null;\n    if (typeof replacer === 'function' || Array.isArray(replacer)) {\n        _replacer = replacer;\n    }\n    else if (options === undefined && replacer) {\n        options = replacer;\n    }\n    if (typeof options === 'string')\n        options = options.length;\n    if (typeof options === 'number') {\n        const indent = Math.round(options);\n        options = indent < 1 ? undefined : indent > 8 ? { indent: 8 } : { indent };\n    }\n    if (value === undefined) {\n        const { keepUndefined } = options ?? replacer ?? {};\n        if (!keepUndefined)\n            return undefined;\n    }\n    if (isDocument(value) && !_replacer)\n        return value.toString(options);\n    return new Document(value, _replacer, options).toString(options);\n}\n\nexport { parse, parseAllDocuments, parseDocument, stringify };\n","import { 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 * 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   * Database name in use.\n   * @type {string}\n   */\n  #databaseName = '';\n\n  /**\n   * Store name in use.\n   * @type {string}\n   */\n  #storeName = '';\n\n  /**\n   * Store options to be passed to `IDBDatabase.createObjectStore()`. Note that this cannot be\n   * altered after the store is created.\n   * @type {IDBObjectStoreParameters}\n   */\n  #storeOptions = {};\n\n  /**\n   * Index options to be passed to `IDBObjectStore.createIndex()`.\n   * @type {import(\"../typedefs\").DatabaseIndex[]}\n   */\n  #indexes = [];\n\n  /**\n   * Initialize a new `IndexedDB` instance.\n   * @param {string} databaseName - Database name.\n   * @param {string} storeName - Store name.\n   * @param {object} [options] - Options.\n   * @param {string | string[]} [options.keyPath] - Option for `createObjectStore()`.\n   * @param {boolean} [options.autoIncrement] - Option for `createObjectStore()`.\n   * @param {import(\"../typedefs\").DatabaseIndex[]} [options.indexes] - Arguments for\n   * `createIndex()`.\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase/createObjectStore\n   * @see https://stackoverflow.com/questions/33852508/how-to-create-an-indexeddb-composite-key\n   */\n  constructor(databaseName, storeName, { keyPath, autoIncrement, indexes = [] } = {}) {\n    this.#database = undefined;\n    this.#databaseName = databaseName;\n    this.#storeName = storeName;\n    this.#storeOptions = { keyPath, autoIncrement };\n    this.#indexes = indexes;\n  }\n\n  /**\n   * Open the database and create a store if needed.\n   * @param {number} [version] - Database version.\n   * @returns {Promise<IDBDatabase>} Database.\n   */\n  async #openDatabase(version) {\n    return new Promise((resolve) => {\n      const request = globalThis.indexedDB.open(this.#databaseName, version);\n\n      request.onupgradeneeded = () => {\n        const database = request.result;\n        const storeName = this.#storeName;\n\n        const store = database.objectStoreNames.contains(storeName)\n          ? database.transaction(storeName, 'readwrite').objectStore(storeName)\n          : database.createObjectStore(storeName, this.#storeOptions);\n\n        this.#indexes.forEach(({ name, keyPath, options }) => {\n          if (!store.indexNames.contains(name)) {\n            store.createIndex(name, keyPath, options);\n          }\n        });\n      };\n\n      request.onsuccess = () => {\n        resolve(request.result);\n      };\n    });\n  }\n\n  /**\n   * Get the database and automatically upgrade it if a new store is not created yet.\n   * @returns {Promise<IDBDatabase>} Database.\n   */\n  async #getDatabase() {\n    let upgradeNeeded = false;\n    let database = await this.#openDatabase();\n    const { version, objectStoreNames } = database;\n    const storeName = this.#storeName;\n\n    if (objectStoreNames.contains(storeName)) {\n      const store = database.transaction(storeName).objectStore(storeName);\n\n      upgradeNeeded = this.#indexes.some(({ name }) => !store.indexNames.contains(name));\n    } else {\n      upgradeNeeded = true;\n    }\n\n    if (upgradeNeeded) {\n      database.close();\n      database = await this.#openDatabase(version + 1);\n    }\n\n    // Avoid upgrade conflict\n    database.onversionchange = () => {\n      database.close();\n      this.#database = undefined;\n    };\n\n    return database;\n  }\n\n  /**\n   * Create a database if not yet initialized, then execute the given function over the store.\n   * @param {(store: IDBObjectStore) => IDBRequest | void} getRequest - Function to be executed.\n   * @returns {Promise<any | void>} Result.\n   */\n  async #query(getRequest) {\n    this.#database ??= await this.#getDatabase();\n\n    const database = /** @type {IDBDatabase} */ (this.#database);\n    const storeName = this.#storeName;\n    const transaction = database.transaction(storeName, 'readwrite');\n    const request = getRequest(transaction.objectStore(storeName));\n\n    if (request) {\n      return new Promise((resolve) => {\n        request.onsuccess = () => {\n          resolve(request.result);\n        };\n      });\n    }\n\n    return new Promise((resolve) => {\n      transaction.oncomplete = () => {\n        resolve(undefined);\n      };\n    });\n  }\n\n  /**\n   * Save a value with an out-of-line key.\n   * @param {any} key - Key.\n   * @param {any} value - Value.\n   * @returns {Promise<any>} Key.\n   */\n  async set(key, value) {\n    return this.#query((store) => store.put(value, key));\n  }\n\n  /**\n   * Save a value with an inline key.\n   * @param {any} value - Value.\n   * @returns {Promise<any>} Key.\n   */\n  async put(value) {\n    return this.#query((store) => store.put(value));\n  }\n\n  /**\n   * Save multiple records.\n   * @param {[any, any][]} records - Key/value pairs.\n   * @returns {Promise<any>} Key.\n   */\n  async saveEntries(records) {\n    return this.#query((store) => {\n      records.forEach(([key, value]) => {\n        store.put(value, key);\n      });\n    });\n  }\n\n  /**\n   * Retrieve a value by key.\n   * @param {any} key - Key.\n   * @returns {Promise<any>} Value.\n   */\n  async get(key) {\n    return this.#query((store) => store.get(key));\n  }\n\n  /**\n   * Retrieve all the keys.\n   * @returns {Promise<any[]>} Keys.\n   */\n  async keys() {\n    return this.#query((store) => store.getAllKeys());\n  }\n\n  /**\n   * Retrieve all the values.\n   * @returns {Promise<any[]>} Values.\n   */\n  async values() {\n    return this.#query((store) => store.getAll());\n  }\n\n  /**\n   * Retrieve all the records.\n   * @returns {Promise<[any, any][]>} Key/value pairs.\n   */\n  async entries() {\n    const [keys, values] = await Promise.all([this.keys(), this.values()]);\n\n    return keys.map((key, index) => [key, values[index]]);\n  }\n\n  /**\n   * Find one or more records using a cursor.\n   * @param {object} args - Arguments.\n   * @param {(record: any) => boolean} [args.callback] - A function to execute for each record.\n   * @param {string} [args.index] - Index name.\n   * @param {IDBValidKey | IDBKeyRange} [args.query] - Query option for `openCursor()`.\n   * @param {IDBCursorDirection} [args.direction] - The direction option for `openCursor()`.\n   * @param {boolean} [args.multiple] - Whether to return all matching records.\n   * @returns {Promise<any | any[]>} Found record(s).\n   */\n  async #search({\n    callback = undefined,\n    index = undefined,\n    query = undefined,\n    direction = 'next',\n    multiple = false,\n  }) {\n    return new Promise((resolve) => {\n      this.#query((store) => {\n        const request = (index ? store.index(index) : store).openCursor(query, direction);\n        /** @type {any[]} */\n        const records = [];\n\n        request.onsuccess = () => {\n          const cursor = request.result;\n\n          if (cursor) {\n            const { value } = cursor;\n\n            if (typeof callback === 'function' ? callback(value) : true) {\n              if (multiple) {\n                records.push(value);\n                cursor.continue();\n              } else {\n                resolve(value);\n              }\n            } else {\n              cursor.continue();\n            }\n          } else {\n            resolve(multiple ? records : undefined);\n          }\n        };\n      });\n    });\n  }\n\n  /**\n   * Find the first record that matches the condition.\n   * @param {(record: any) => boolean} [callback] - A function to execute for each record.\n   * @param {object} [options] - Options.\n   * @param {string} [options.index] - Index.\n   * @param {IDBValidKey | IDBKeyRange} [options.query] - Query option for `openCursor()`.\n   * @returns {Promise<any>} Found record.\n   */\n  async find(callback, { index, query } = {}) {\n    return this.#search({ callback, index, query });\n  }\n\n  /**\n   * Find the last record that matches the condition.\n   * @param {(record: any) => boolean} [callback] - A function to execute for each record.\n   * @param {object} [options] - Options.\n   * @param {string} [options.index] - Index.\n   * @param {IDBValidKey | IDBKeyRange} [options.query] - Query option for `openCursor()`.\n   * @returns {Promise<any>} Found record.\n   */\n  async findLast(callback, { index, query } = {}) {\n    return this.#search({ callback, index, query, direction: 'prev' });\n  }\n\n  /**\n   * Find all the records that match the condition.\n   * @param {(record: any) => boolean} [callback] - A function to execute for each record.\n   * @param {object} [options] - Options.\n   * @param {string} [options.index] - Index.\n   * @param {IDBValidKey | IDBKeyRange} [options.query] - Query option for `openCursor()`.\n   * @returns {Promise<any[]>} Found records.\n   */\n  async filter(callback, { index, query } = {}) {\n    return this.#search({ callback, index, query, multiple: true });\n  }\n\n  /**\n   * Delete an record by key.\n   * @param {any} key - Key.\n   * @returns {Promise<void>} Result.\n   */\n  async delete(key) {\n    await this.#query((store) => store.delete(key));\n  }\n\n  /**\n   * Delete multiple records by keys.\n   * @param {any[]} keys - Property keys.\n   * @returns {Promise<void>} Result.\n   */\n  async deleteEntries(keys) {\n    await this.#query((store) => {\n      keys.forEach((key) => {\n        store.delete(key);\n      });\n    });\n  }\n\n  /**\n   * Delete all the records.\n   * @returns {Promise<void>} Result.\n   */\n  async clear() {\n    await this.#query((store) => store.clear());\n  }\n}\n","/**\n * Implement a wrapper for the Web Storage API. These methods are async just like the experimental\n * KV Storage and automatically parse/stringify JSON data.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Storage\n * @see https://developer.chrome.com/blog/kv-storage/\n */\nexport default class LocalStorage {\n  /**\n   * Save data.\n   * @param {string} key - Storage key.\n   * @param {any} value - Serializable value.\n   * @throws {DOMException} When storage access is denied.\n   */\n  static async set(key, value) {\n    globalThis.localStorage.setItem(key, JSON.stringify(value));\n  }\n\n  /**\n   * Retrieve data by key.\n   * @param {string} key - Storage key.\n   * @returns {Promise<*>} Data.\n   * @throws {DOMException} When storage access is denied.\n   */\n  static async get(key) {\n    const cache = globalThis.localStorage.getItem(key);\n\n    return cache ? JSON.parse(cache) : null;\n  }\n\n  /**\n   * Delete data by key.\n   * @param {string} key - Storage key.\n   * @throws {DOMException} When storage access is denied.\n   */\n  static async delete(key) {\n    globalThis.localStorage.removeItem(key);\n  }\n\n  /**\n   * Clear the storage.\n   * @throws {DOMException} When storage access is denied.\n   */\n  static async clear() {\n    globalThis.localStorage.clear();\n  }\n\n  /**\n   * Get a list of storage keys.\n   * @returns {Promise<string[]>} Keys.\n   * @throws {DOMException} When storage access is denied.\n   */\n  static async keys() {\n    return Object.keys(globalThis.localStorage);\n  }\n\n  /**\n   * Get a list of storage values.\n   * @returns {Promise<*[]>} Values.\n   * @throws {DOMException} When storage access is denied.\n   */\n  static async values() {\n    return Object.values(globalThis.localStorage).map((value) => JSON.parse(value));\n  }\n\n  /**\n   * Get a list of storage entries.\n   * @returns {Promise<[string, any][]>} Entries.\n   * @throws {DOMException} When storage access is denied.\n   */\n  static async entries() {\n    return Object.entries(globalThis.localStorage).map(([key, value]) => [key, JSON.parse(value)]);\n  }\n}\n","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\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(/^(?<type>image|audio|video)\\//)?.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","!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=/\\[([^\\]]+)]|Y{1,4}|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}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[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)}}}));","import { get } from 'svelte/store';\nimport { locale as appLocale } from 'svelte-i18n';\n\n/**\n * @import { InternalI18nOptions, InternalLocaleCode, } from '$lib/types/private';\n * @import { LocaleCode } from '$lib/types/public';\n */\n\n/**\n * Get the canonical locale of the given locale that can be used for various `Intl` methods.\n * @param {InternalLocaleCode} locale Locale.\n * @returns {LocaleCode | undefined} Locale or `undefined` if not determined.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#locales_argument\n */\nexport const getCanonicalLocale = (locale) => {\n  let canonicalLocale = undefined;\n\n  if (locale !== '_default') {\n    try {\n      [canonicalLocale] = Intl.getCanonicalLocales(locale);\n    } catch {\n      //\n    }\n  }\n\n  return canonicalLocale;\n};\n\n/**\n * 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(get(appLocale) ?? '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","export const DATE_REGEX = /^\\d{4}-[01]\\d-[0-3]\\d$/;\nexport const TIME_SUFFIX_REGEX = /T00:00(?::00)?(?:\\.000)?Z$/;\n\n/**\n * Standard date format options.\n * @type {Intl.DateTimeFormatOptions}\n */\nexport const DATE_FORMAT_OPTIONS = { year: 'numeric', month: 'short', day: 'numeric' };\n\n/**\n * Standard time format options.\n * @type {Intl.DateTimeFormatOptions}\n */\nexport const TIME_FORMAT_OPTIONS = { hour: 'numeric', minute: 'numeric', hour12: true };\n\n/**\n * Standard date/time format options.\n * @type {Intl.DateTimeFormatOptions}\n */\nexport const DATE_TIME_FORMAT_OPTIONS = { ...DATE_FORMAT_OPTIONS, ...TIME_FORMAT_OPTIONS };\n","import { getDateTimeParts } from '@sveltia/utils/datetime';\nimport dayjs from 'dayjs';\nimport dayjsCustomParseFormat from 'dayjs/plugin/customParseFormat';\nimport dayjsLocalizedFormat from 'dayjs/plugin/localizedFormat';\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\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);\n\n/**\n * Parse the DateTime field configuration and return as normalized format.\n * @param {DateTimeField} fieldConfig Field config.\n * @returns {DateTimeFieldNormalizedProps} Normalized properties.\n */\nexport const parseDateTimeConfig = (fieldConfig) => {\n  const {\n    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: utc = false,\n  } = fieldConfig;\n\n  const dateFormatStr = typeof dateFormat === 'string' ? dateFormat : '';\n  const timeFormatStr = typeof timeFormat === 'string' ? timeFormat : '';\n  // The new `type` option takes precedence over the `date_format` and `time_format` options, which\n  // are supported for backward compatibility with Netlify CMS configurations\n  const dateOnly = type === 'date' || timeFormat === false;\n  const timeOnly = type === 'time' || dateFormat === false;\n  // Set a default max value if not provided to prevent issues with browsers that allow 6-digit\n  // years (Chrome, Edge and Safari)\n  const defaultMax = dateOnly ? '9999-12-31' : timeOnly ? undefined : '9999-12-31T23:59';\n\n  return {\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    utc,\n  };\n};\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 * 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 } = parseDateTimeConfig(fieldConfig);\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 parse = getParser(utc);\n    // Parse using the specified format\n    let parsed = parse(currentValue, format);\n\n    // Fallback: Try parsing without format\n    if (!parsed.isValid()) {\n      parsed = parse(currentValue);\n\n      if (!parsed.isValid()) {\n        // eslint-disable-next-line no-console\n        console.error('Invalid Date', currentValue);\n\n        return undefined;\n      }\n    }\n\n    return parsed.toDate();\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 * @returns {string} Current date/time in the ISO 8601 format.\n */\nexport const getCurrentDateTime = (fieldConfig) => {\n  const { dateOnly, timeOnly, utc } = parseDateTimeConfig(fieldConfig);\n\n  const { year, month, day, hour, minute } = getDateTimeParts({\n    timeZone: utc ? 'UTC' : undefined,\n  });\n\n  const dateStr = `${year}-${month}-${day}`;\n  const timeStr = `${hour}:${minute}`;\n\n  if (dateOnly) {\n    return dateStr;\n  }\n\n  if (timeOnly) {\n    return timeStr;\n  }\n\n  if (utc) {\n    return `${dateStr}T${timeStr}:00.000Z`;\n  }\n\n  return `${dateStr}T${timeStr}`;\n};\n\n/**\n * Get the current value given the input value.\n * @param {string | undefined} inputValue Value on the date/time input control.\n * @param {string | undefined} currentValue Value in the entry draft datastore.\n * @param {DateTimeField} fieldConfig Field configuration.\n * @returns {string | undefined} New value.\n */\nexport const getCurrentValue = (inputValue, currentValue, fieldConfig) => {\n  const { format, dateOnly, timeOnly, utc } = parseDateTimeConfig(fieldConfig);\n  const inputFormat = dateOnly ? 'YYYY-MM-DD' : timeOnly ? 'HH:mm' : 'YYYY-MM-DDTHH:mm';\n  // Append seconds (and milliseconds) for data format & framework compatibility\n  const timeSuffix = `:00${currentValue?.endsWith('.000') ? '.000' : ''}`;\n\n  if (inputValue === '') {\n    return '';\n  }\n\n  if (!inputValue) {\n    return undefined;\n  }\n\n  if (format) {\n    const parse = getParser(utc);\n    let parsed = parse(inputValue, inputFormat);\n\n    // Fallback: Try parsing without format\n    if (!parsed.isValid()) {\n      parsed = parse(inputValue);\n\n      if (!parsed.isValid()) {\n        // eslint-disable-next-line no-console\n        console.info('Invalid date', inputValue);\n\n        return '';\n      }\n    }\n\n    return parsed.format(format);\n  }\n\n  if (dateOnly) {\n    return inputValue;\n  }\n\n  if (utc) {\n    return `${inputValue}:00.000Z`;\n  }\n\n  return `${inputValue}${timeSuffix}`;\n};\n\n/**\n * Get the input value given the current value.\n * @param {string | undefined} currentValue Value in the entry draft datastore.\n * @param {DateTimeField} fieldConfig Field configuration.\n * @returns {string | undefined} New value.\n */\nexport const getInputValue = (currentValue, fieldConfig) => {\n  const { dateOnly, timeOnly, utc } = parseDateTimeConfig(fieldConfig);\n\n  // If the default value is an empty string, the input will be blank by default\n  if (!currentValue) {\n    return '';\n  }\n\n  // If the current value is the standard format, return it as is\n  const value = dateOnly\n    ? currentValue?.match(/^(?<date>\\d{4}-[01]\\d-[0-3]\\d)\\b/)?.groups?.date\n    : timeOnly\n      ? // Match both `YYYY-MM-DDTHH:mm(:ss)` and `HH:mm(:ss)` formats\n        currentValue?.match(/(?:^|T)(?<time>[0-2]\\d:[0-5]\\d)\\b/)?.groups?.time\n      : undefined;\n\n  if (value) {\n    return value;\n  }\n\n  const dateForParts = currentValue ? getDate(currentValue, fieldConfig) : new Date();\n\n  // If `getDate` returned `undefined` (parsing failed), return empty string\n  if (!dateForParts) {\n    return '';\n  }\n\n  const { year, month, day, hour, minute } = getDateTimeParts({\n    date: dateForParts,\n    timeZone: utc ? 'UTC' : undefined,\n  });\n\n  const dateStr = `${year}-${month}-${day}`;\n  const timeStr = `${hour}:${minute}`;\n\n  if (dateOnly) {\n    return dateStr;\n  }\n\n  if (timeOnly) {\n    return timeStr;\n  }\n\n  return `${dateStr}T${timeStr}`;\n};\n\n/**\n * Get the display value of a DateTime field.\n * @param {object} args Arguments.\n * @param {InternalLocaleCode} args.locale Locale code.\n * @param {DateTimeField} args.fieldConfig Field configuration.\n * @param {string | undefined} args.currentValue Stored value.\n * @returns {string} Display value.\n */\nexport const getDateTimeFieldDisplayValue = ({ locale, fieldConfig, currentValue }) => {\n  const { format, dateOnly, timeOnly, utc } = parseDateTimeConfig(fieldConfig);\n\n  if (typeof currentValue !== 'string' || !currentValue.trim()) {\n    return '';\n  }\n\n  if (format) {\n    const parse = getParser(utc);\n    // Parse using the specified format\n    let parsed = parse(currentValue, format);\n\n    // Fallback: Try parsing without format\n    if (!parsed.isValid()) {\n      parsed = parse(currentValue);\n\n      if (!parsed.isValid()) {\n        // eslint-disable-next-line no-console\n        console.error('Invalid Date', currentValue);\n\n        return '';\n      }\n    }\n\n    return parsed.format(format);\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, TIME_FORMAT_OPTIONS);\n  }\n\n  if (dateOnly) {\n    return date.toLocaleDateString(canonicalLocale, {\n      ...DATE_FORMAT_OPTIONS,\n      timeZone:\n        utc || DATE_REGEX.test(currentValue) || TIME_SUFFIX_REGEX.test(currentValue)\n          ? 'UTC'\n          : undefined,\n    });\n  }\n\n  return date.toLocaleString(canonicalLocale, {\n    ...DATE_FORMAT_OPTIONS,\n    ...TIME_FORMAT_OPTIONS,\n    timeZone: utc ? 'UTC' : undefined,\n    timeZoneName: utc ? undefined : 'short',\n  });\n};\n","import { truncate } from '@sveltia/utils/string';\nimport dayjs from 'dayjs';\nimport dayjsCustomParseFormat from 'dayjs/plugin/customParseFormat';\nimport dayjsLocalizedFormat from 'dayjs/plugin/localizedFormat';\nimport dayjsUTC from 'dayjs/plugin/utc';\n\nimport { parseDateTimeConfig } from '$lib/services/contents/fields/date-time/helper';\n\n/**\n * @import { DateTimeField, Field } from '$lib/types/public';\n */\n\n/**\n * @typedef {object} DateTimeTransformationArgs\n * @property {string} format The date format string to use for output.\n * @property {string} [timeZone] The time zone to use (`utc` for UTC, otherwise local).\n */\n\n/**\n * @typedef {object} DefaultTransformationArgs\n * @property {string} defaultValue The default value to return if the input value is falsy.\n */\n\n/**\n * @typedef {object} TernaryTransformationArgs\n * @property {string} truthyValue The value to return if the input value is truthy.\n * @property {string} falsyValue The value to return if the input value is falsy.\n */\n\n/**\n * @typedef {object} TruncateTransformationArgs\n * @property {string} max The maximum length of the string.\n * @property {string} [ellipsis] The string to append if truncation occurs.\n */\n\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>.+?)')?\\)$/;\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(/^\\d{4}-[01]\\d-[0-3]\\d$/)) ||\n    (dateOnly && !!sValue.match(/T\\d{2}:\\d{2}(?::\\d{2})?(?:\\.\\d+)?Z$/));\n\n  const date = (useUTC ? 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 * @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 }) => {\n  if (transformation === 'upper') {\n    return applyUpperCaseTransformation(value);\n  }\n\n  if (transformation === 'lower') {\n    return applyLowerCaseTransformation(value);\n  }\n\n  const dateTransformer = transformation.match(DATE_TRANSFORMATION_REGEX);\n\n  if (dateTransformer?.groups) {\n    return applyDateTransformation(\n      value,\n      /** @type {DateTimeTransformationArgs} */ (dateTransformer.groups),\n      /** @type {DateTimeField} */ (fieldConfig ?? {}),\n    );\n  }\n\n  const defaultTransformer = transformation.match(DEFAULT_TRANSFORMATION_REGEX);\n\n  if (defaultTransformer?.groups) {\n    return applyDefaultTransformation(\n      value,\n      /** @type {DefaultTransformationArgs} */ (defaultTransformer.groups),\n    );\n  }\n\n  const ternaryTransformer = transformation.match(TERNARY_TRANSFORMATION_REGEX);\n\n  if (ternaryTransformer?.groups) {\n    return ternaryTransformation(\n      value,\n      /** @type {TernaryTransformationArgs} */ (ternaryTransformer.groups),\n    );\n  }\n\n  const truncateTransformer = transformation.match(TRUNCATE_TRANSFORMATION_REGEX);\n\n  if (truncateTransformer?.groups) {\n    return applyTruncateTransformation(\n      value,\n      /** @type {TruncateTransformationArgs} */ (truncateTransformer.groups),\n    );\n  }\n\n  return String(value);\n};\n\n/**\n * Apply string transformations to the value.\n * @param {object} args Arguments.\n * @param {Field} [args.fieldConfig] Field configuration.\n * @param {any} args.value Original value.\n * @param {string[]} args.transformations List of transformations.\n * @returns {string} Transformed value.\n */\nexport const applyTransformations = ({ fieldConfig, value, transformations }) => {\n  transformations.forEach((transformation) => {\n    value = applyTransformation({ fieldConfig, value, transformation });\n  });\n\n  return value;\n};\n","/**\n * @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 = [...MULTI_VALUE_FIELD_TYPES, 'datetime', 'list', 'number'];\n","/*! @license DOMPurify 3.3.3 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.3/LICENSE */\n\nconst {\n  entries,\n  setPrototypeOf,\n  isFrozen,\n  getPrototypeOf,\n  getOwnPropertyDescriptor\n} = Object;\nlet {\n  freeze,\n  seal,\n  create\n} = Object; // eslint-disable-line import/no-mutable-exports\nlet {\n  apply,\n  construct\n} = typeof Reflect !== 'undefined' && Reflect;\nif (!freeze) {\n  freeze = function freeze(x) {\n    return x;\n  };\n}\nif (!seal) {\n  seal = function seal(x) {\n    return x;\n  };\n}\nif (!apply) {\n  apply = function apply(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 stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst regExpTest = unapply(RegExp.prototype.test);\nconst typeErrorCreate = unconstruct(TypeError);\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply(func) {\n  return function (thisArg) {\n    if (thisArg instanceof RegExp) {\n      thisArg.lastIndex = 0;\n    }\n    for (var _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  let l = array.length;\n  while (l--) {\n    let element = array[l];\n    if (typeof element === 'string') {\n      const lcElement = transformCaseFunc(element);\n      if (lcElement !== element) {\n        // Config presets (e.g. tags.js, attrs.js) are immutable.\n        if (!isFrozen(array)) {\n          array[l] = lcElement;\n        }\n        element = lcElement;\n      }\n    }\n    set[element] = true;\n  }\n  return set;\n}\n/**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\nfunction cleanArray(array) {\n  for (let index = 0; index < array.length; index++) {\n    const isPropertyExist = objectHasOwnProperty(array, index);\n    if (!isPropertyExist) {\n      array[index] = null;\n    }\n  }\n  return array;\n}\n/**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\nfunction clone(object) {\n  const newObject = create(null);\n  for (const [property, value] of entries(object)) {\n    const isPropertyExist = objectHasOwnProperty(object, property);\n    if (isPropertyExist) {\n      if (Array.isArray(value)) {\n        newObject[property] = cleanArray(value);\n      } else if (value && typeof value === 'object' && value.constructor === Object) {\n        newObject[property] = clone(value);\n      } else {\n        newObject[property] = value;\n      }\n    }\n  }\n  return newObject;\n}\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter(object, prop) {\n  while (object !== null) {\n    const desc = getOwnPropertyDescriptor(object, prop);\n    if (desc) {\n      if (desc.get) {\n        return unapply(desc.get);\n      }\n      if (typeof desc.value === 'function') {\n        return unapply(desc.value);\n      }\n    }\n    object = getPrototypeOf(object);\n  }\n  function fallbackValue() {\n    return null;\n  }\n  return fallbackValue;\n}\n\nconst html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', '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', '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', 'slot']);\nconst svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', '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', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\nconst xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n// eslint-disable-next-line unicorn/better-regex\nconst MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nconst ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nconst TMPLIT_EXPR = seal(/\\$\\{[\\w\\W]*/gm); // eslint-disable-line unicorn/better-regex\nconst DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nconst ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nconst IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nconst IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nconst ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nconst DOCTYPE_NAME = seal(/^html$/i);\nconst CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\nvar EXPRESSIONS = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  ARIA_ATTR: ARIA_ATTR,\n  ATTR_WHITESPACE: ATTR_WHITESPACE,\n  CUSTOM_ELEMENT: CUSTOM_ELEMENT,\n  DATA_ATTR: DATA_ATTR,\n  DOCTYPE_NAME: DOCTYPE_NAME,\n  ERB_EXPR: ERB_EXPR,\n  IS_ALLOWED_URI: IS_ALLOWED_URI,\n  IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n  MUSTACHE_EXPR: MUSTACHE_EXPR,\n  TMPLIT_EXPR: TMPLIT_EXPR\n});\n\n/* eslint-disable @typescript-eslint/indent */\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n  element: 1,\n  attribute: 2,\n  text: 3,\n  cdataSection: 4,\n  entityReference: 5,\n  // Deprecated\n  entityNode: 6,\n  // Deprecated\n  progressingInstruction: 7,\n  comment: 8,\n  document: 9,\n  documentType: 10,\n  documentFragment: 11,\n  notation: 12 // Deprecated\n};\nconst getGlobal = function getGlobal() {\n  return typeof window === 'undefined' ? null : window;\n};\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n  if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n    return null;\n  }\n  // Allow the callers to control the unique policy name\n  // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n  // Policy creation with duplicate names throws in Trusted Types.\n  let suffix = null;\n  const ATTR_NAME = 'data-tt-policy-suffix';\n  if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n    suffix = purifyHostElement.getAttribute(ATTR_NAME);\n  }\n  const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n  try {\n    return trustedTypes.createPolicy(policyName, {\n      createHTML(html) {\n        return html;\n      },\n      createScriptURL(scriptUrl) {\n        return scriptUrl;\n      }\n    });\n  } catch (_) {\n    // Policy creation failed (most likely another DOMPurify script has\n    // already run). Skip creating the policy, as this will only cause errors\n    // if TT are enforced.\n    console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n    return null;\n  }\n};\nconst _createHooksMap = function _createHooksMap() {\n  return {\n    afterSanitizeAttributes: [],\n    afterSanitizeElements: [],\n    afterSanitizeShadowDOM: [],\n    beforeSanitizeAttributes: [],\n    beforeSanitizeElements: [],\n    beforeSanitizeShadowDOM: [],\n    uponSanitizeAttribute: [],\n    uponSanitizeElement: [],\n    uponSanitizeShadowNode: []\n  };\n};\nfunction createDOMPurify() {\n  let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n  const DOMPurify = root => createDOMPurify(root);\n  DOMPurify.version = '3.3.3';\n  DOMPurify.removed = [];\n  if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {\n    // Not running in a browser, provide a factory function\n    // so that you can pass your own Window\n    DOMPurify.isSupported = false;\n    return DOMPurify;\n  }\n  let {\n    document\n  } = window;\n  const originalDocument = document;\n  const currentScript = originalDocument.currentScript;\n  const {\n    DocumentFragment,\n    HTMLTemplateElement,\n    Node,\n    Element,\n    NodeFilter,\n    NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n    HTMLFormElement,\n    DOMParser,\n    trustedTypes\n  } = window;\n  const ElementPrototype = Element.prototype;\n  const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n  const remove = lookupGetter(ElementPrototype, 'remove');\n  const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n  const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n  const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n  // As per issue #47, the web-components registry is inherited by a\n  // new document created via createHTMLDocument. As per the spec\n  // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n  // a new empty registry is used when creating a template contents owner\n  // document, so we use that as our parent document to ensure nothing\n  // is inherited.\n  if (typeof HTMLTemplateElement === 'function') {\n    const template = document.createElement('template');\n    if (template.content && template.content.ownerDocument) {\n      document = template.content.ownerDocument;\n    }\n  }\n  let trustedTypesPolicy;\n  let emptyHTML = '';\n  const {\n    implementation,\n    createNodeIterator,\n    createDocumentFragment,\n    getElementsByTagName\n  } = document;\n  const {\n    importNode\n  } = originalDocument;\n  let hooks = _createHooksMap();\n  /**\n   * Expose whether this browser supports running the full DOMPurify.\n   */\n  DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n  const {\n    MUSTACHE_EXPR,\n    ERB_EXPR,\n    TMPLIT_EXPR,\n    DATA_ATTR,\n    ARIA_ATTR,\n    IS_SCRIPT_OR_DATA,\n    ATTR_WHITESPACE,\n    CUSTOM_ELEMENT\n  } = EXPRESSIONS;\n  let {\n    IS_ALLOWED_URI: IS_ALLOWED_URI$1\n  } = EXPRESSIONS;\n  /**\n   * We consider the elements and attributes below to be safe. Ideally\n   * don't add any new ones but feel free to remove unwanted ones.\n   */\n  /* allowed element names */\n  let ALLOWED_TAGS = null;\n  const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n  /* Allowed attribute names */\n  let ALLOWED_ATTR = null;\n  const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n  /*\n   * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n   * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n   * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n   * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n   */\n  let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n    tagNameCheck: {\n      writable: true,\n      configurable: false,\n      enumerable: true,\n      value: null\n    },\n    attributeNameCheck: {\n      writable: true,\n      configurable: false,\n      enumerable: true,\n      value: null\n    },\n    allowCustomizedBuiltInElements: {\n      writable: true,\n      configurable: false,\n      enumerable: true,\n      value: false\n    }\n  }));\n  /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n  let FORBID_TAGS = null;\n  /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n  let FORBID_ATTR = null;\n  /* 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  /* Decide if all elements (e.g. style, script) must be children of\n   * document.body. By default, browsers might move them to document.head */\n  let FORCE_BODY = false;\n  /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n   * string (or a TrustedHTML object if Trusted Types are supported).\n   * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n   */\n  let RETURN_DOM = false;\n  /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n   * string  (or a TrustedHTML object if Trusted Types are supported) */\n  let RETURN_DOM_FRAGMENT = false;\n  /* Try to return a Trusted Type object instead of a string, return a string in\n   * case Trusted Types are not supported  */\n  let RETURN_TRUSTED_TYPE = false;\n  /* Output should be free from DOM clobbering attacks?\n   * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n   */\n  let SANITIZE_DOM = true;\n  /* Achieve full DOM Clobbering protection by isolating the namespace of named\n   * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n   *\n   * HTML/DOM spec rules that enable DOM Clobbering:\n   *   - Named Access on Window (§7.3.3)\n   *   - DOM Tree Accessors (§3.1.5)\n   *   - Form Element Parent-Child Relations (§4.10.3)\n   *   - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n   *   - HTMLCollection (§4.2.10.2)\n   *\n   * Namespace isolation is implemented by prefixing `id` and `name` attributes\n   * with a constant string, i.e., `user-content-`\n   */\n  let SANITIZE_NAMED_PROPS = false;\n  const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n  /* Keep element content when removing element? */\n  let KEEP_CONTENT = true;\n  /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n   * of importing it into a new Document and returning a sanitized copy */\n  let IN_PLACE = false;\n  /* Allow usage of profiles like html, svg and mathMl */\n  let USE_PROFILES = {};\n  /* Tags to ignore content of when KEEP_CONTENT is true */\n  let FORBID_CONTENTS = null;\n  const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n  /* Tags that are safe for data: URIs */\n  let DATA_URI_TAGS = null;\n  const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n  /* Attributes safe for values like \"javascript:\" */\n  let URI_SAFE_ATTRIBUTES = null;\n  const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n  const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n  const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n  const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n  /* Document namespace */\n  let NAMESPACE = HTML_NAMESPACE;\n  let IS_EMPTY_INPUT = false;\n  /* Allowed XHTML+XML namespaces */\n  let ALLOWED_NAMESPACES = null;\n  const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n  let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n  let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n  // Certain elements are allowed in both SVG and HTML\n  // namespace. We need to specify them explicitly\n  // so that they don't get erroneously deleted from\n  // HTML namespace.\n  const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n  /* Parsing of strict XHTML documents */\n  let PARSER_MEDIA_TYPE = null;\n  const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n  const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n  let transformCaseFunc = null;\n  /* Keep a reference to config to pass to hooks */\n  let CONFIG = null;\n  /* Ideally, do not touch anything below this line */\n  /* ______________________________________________ */\n  const formElement = document.createElement('form');\n  const isRegexOrFunction = function isRegexOrFunction(testValue) {\n    return testValue instanceof RegExp || testValue instanceof Function;\n  };\n  /**\n   * _parseConfig\n   *\n   * @param cfg optional config literal\n   */\n  // eslint-disable-next-line complexity\n  const _parseConfig = function _parseConfig() {\n    let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    if (CONFIG && CONFIG === cfg) {\n      return;\n    }\n    /* Shield configuration object from tampering */\n    if (!cfg || typeof cfg !== 'object') {\n      cfg = {};\n    }\n    /* Shield configuration object from prototype pollution */\n    cfg = clone(cfg);\n    PARSER_MEDIA_TYPE =\n    // eslint-disable-next-line unicorn/prefer-includes\n    SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n    // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n    transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n    /* Set configuration parameters */\n    ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n    ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n    ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n    URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;\n    DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;\n    FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n    FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : clone({});\n    FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : clone({});\n    USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n    ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n    ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n    ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n    ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n    SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n    SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n    WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n    RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n    RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n    RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n    FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n    SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n    SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n    KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n    IN_PLACE = cfg.IN_PLACE || false; // Default false\n    IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n    NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n    MATHML_TEXT_INTEGRATION_POINTS = cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;\n    HTML_INTEGRATION_POINTS = cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;\n    CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n    if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n      CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n    }\n    if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n      CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n    }\n    if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n      CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n    }\n    if (SAFE_FOR_TEMPLATES) {\n      ALLOW_DATA_ATTR = false;\n    }\n    if (RETURN_DOM_FRAGMENT) {\n      RETURN_DOM = true;\n    }\n    /* Parse profile info */\n    if (USE_PROFILES) {\n      ALLOWED_TAGS = addToSet({}, text);\n      ALLOWED_ATTR = 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    /* Prevent function-based ADD_ATTR / ADD_TAGS from leaking across calls */\n    if (!objectHasOwnProperty(cfg, 'ADD_TAGS')) {\n      EXTRA_ELEMENT_HANDLING.tagCheck = null;\n    }\n    if (!objectHasOwnProperty(cfg, 'ADD_ATTR')) {\n      EXTRA_ELEMENT_HANDLING.attributeCheck = null;\n    }\n    /* Merge configuration parameters */\n    if (cfg.ADD_TAGS) {\n      if (typeof cfg.ADD_TAGS === 'function') {\n        EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;\n      } else {\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 (cfg.ADD_ATTR) {\n      if (typeof cfg.ADD_ATTR === 'function') {\n        EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;\n      } else {\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 (cfg.ADD_URI_SAFE_ATTR) {\n      addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n    }\n    if (cfg.FORBID_CONTENTS) {\n      if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n        FORBID_CONTENTS = clone(FORBID_CONTENTS);\n      }\n      addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n    }\n    if (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    if (cfg.TRUSTED_TYPES_POLICY) {\n      if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n        throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n      }\n      if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n        throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n      }\n      // Overwrite existing TrustedTypes policy.\n      trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n      // Sign local variables required by `sanitize`.\n      emptyHTML = trustedTypesPolicy.createHTML('');\n    } else {\n      // Uninitialized policy, attempt to initialize the internal dompurify policy.\n      if (trustedTypesPolicy === undefined) {\n        trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n      }\n      // If creating the internal policy succeeded sign internal variables.\n      if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n        emptyHTML = trustedTypesPolicy.createHTML('');\n      }\n    }\n    // Prevent further manipulation of configuration.\n    // Not available in IE8, Safari 5, etc.\n    if (freeze) {\n      freeze(cfg);\n    }\n    CONFIG = cfg;\n  };\n  /* Keep track of all possible SVG and MathML tags\n   * so that we can perform the namespace checks\n   * correctly. */\n  const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n  const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n  /**\n   * @param element a DOM element whose namespace is being checked\n   * @returns Return false if the element has a\n   *  namespace that a spec-compliant parser would never\n   *  return. Return true otherwise.\n   */\n  const _checkValidNamespace = function _checkValidNamespace(element) {\n    let parent = getParentNode(element);\n    // In JSDOM, if we're inside shadow DOM, then parentNode\n    // can be null. We just simulate parent in this case.\n    if (!parent || !parent.tagName) {\n      parent = {\n        namespaceURI: NAMESPACE,\n        tagName: 'template'\n      };\n    }\n    const tagName = stringToLowerCase(element.tagName);\n    const parentTagName = stringToLowerCase(parent.tagName);\n    if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n      return false;\n    }\n    if (element.namespaceURI === SVG_NAMESPACE) {\n      // The only way to switch from HTML namespace to SVG\n      // is via <svg>. If it happens via any other tag, then\n      // it should be killed.\n      if (parent.namespaceURI === HTML_NAMESPACE) {\n        return tagName === 'svg';\n      }\n      // The only way to switch from MathML to SVG is via`\n      // svg if parent is either <annotation-xml> or MathML\n      // text integration points.\n      if (parent.namespaceURI === MATHML_NAMESPACE) {\n        return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n      }\n      // We only allow elements that are defined in SVG\n      // spec. All others are disallowed in SVG namespace.\n      return Boolean(ALL_SVG_TAGS[tagName]);\n    }\n    if (element.namespaceURI === MATHML_NAMESPACE) {\n      // The only way to switch from HTML namespace to MathML\n      // is via <math>. If it happens via any other tag, then\n      // it should be killed.\n      if (parent.namespaceURI === HTML_NAMESPACE) {\n        return tagName === 'math';\n      }\n      // The only way to switch from SVG to MathML is via\n      // <math> and HTML integration points\n      if (parent.namespaceURI === SVG_NAMESPACE) {\n        return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n      }\n      // We only allow elements that are defined in MathML\n      // spec. All others are disallowed in MathML namespace.\n      return Boolean(ALL_MATHML_TAGS[tagName]);\n    }\n    if (element.namespaceURI === HTML_NAMESPACE) {\n      // The only way to switch from SVG to HTML is via\n      // HTML integration points, and from MathML to HTML\n      // is via MathML text integration points\n      if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n        return false;\n      }\n      if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n        return false;\n      }\n      // We disallow tags that are specific for MathML\n      // or SVG and should never appear in HTML namespace\n      return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n    }\n    // For XHTML and XML documents that support custom namespaces\n    if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n      return true;\n    }\n    // The code should never reach this place (this means\n    // that the element somehow got namespace that is not\n    // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n    // Return false just in case.\n    return false;\n  };\n  /**\n   * _forceRemove\n   *\n   * @param node a DOM node\n   */\n  const _forceRemove = function _forceRemove(node) {\n    arrayPush(DOMPurify.removed, {\n      element: node\n    });\n    try {\n      // eslint-disable-next-line unicorn/prefer-dom-node-remove\n      getParentNode(node).removeChild(node);\n    } catch (_) {\n      remove(node);\n    }\n  };\n  /**\n   * _removeAttribute\n   *\n   * @param name an Attribute name\n   * @param element a DOM node\n   */\n  const _removeAttribute = function _removeAttribute(name, element) {\n    try {\n      arrayPush(DOMPurify.removed, {\n        attribute: element.getAttributeNode(name),\n        from: element\n      });\n    } catch (_) {\n      arrayPush(DOMPurify.removed, {\n        attribute: null,\n        from: element\n      });\n    }\n    element.removeAttribute(name);\n    // We void attribute values for unremovable \"is\" attributes\n    if (name === 'is') {\n      if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n        try {\n          _forceRemove(element);\n        } catch (_) {}\n      } else {\n        try {\n          element.setAttribute(name, '');\n        } catch (_) {}\n      }\n    }\n  };\n  /**\n   * _initDocument\n   *\n   * @param dirty - a string of dirty markup\n   * @return a DOM, filled with the dirty markup\n   */\n  const _initDocument = function _initDocument(dirty) {\n    /* Create a HTML document */\n    let doc = null;\n    let leadingWhitespace = null;\n    if (FORCE_BODY) {\n      dirty = '<remove></remove>' + dirty;\n    } else {\n      /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n      const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n      leadingWhitespace = matches && matches[0];\n    }\n    if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n      // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n      dirty = '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' + dirty + '</body></html>';\n    }\n    const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n    /*\n     * Use the DOMParser API by default, fallback later if needs be\n     * DOMParser not work for svg when has multiple root element.\n     */\n    if (NAMESPACE === HTML_NAMESPACE) {\n      try {\n        doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n      } catch (_) {}\n    }\n    /* Use createHTMLDocument in case DOMParser is not available */\n    if (!doc || !doc.documentElement) {\n      doc = implementation.createDocument(NAMESPACE, 'template', null);\n      try {\n        doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n      } catch (_) {\n        // Syntax error if dirtyPayload is invalid xml\n      }\n    }\n    const body = doc.body || doc.documentElement;\n    if (dirty && leadingWhitespace) {\n      body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n    }\n    /* Work on whole document or just its body */\n    if (NAMESPACE === HTML_NAMESPACE) {\n      return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n    }\n    return WHOLE_DOCUMENT ? doc.documentElement : body;\n  };\n  /**\n   * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n   *\n   * @param root The root element or node to start traversing on.\n   * @return The created NodeIterator\n   */\n  const _createNodeIterator = function _createNodeIterator(root) {\n    return createNodeIterator.call(root.ownerDocument || root, root,\n    // eslint-disable-next-line no-bitwise\n    NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n  };\n  /**\n   * _isClobbered\n   *\n   * @param element element to check for clobbering attacks\n   * @return true if clobbered, false if safe\n   */\n  const _isClobbered = function _isClobbered(element) {\n    return element instanceof HTMLFormElement && (typeof element.nodeName !== 'string' || typeof element.textContent !== 'string' || typeof element.removeChild !== 'function' || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== 'function' || typeof element.setAttribute !== 'function' || typeof element.namespaceURI !== 'string' || typeof element.insertBefore !== 'function' || typeof element.hasChildNodes !== 'function');\n  };\n  /**\n   * Checks whether the given object is a DOM node.\n   *\n   * @param value object to check whether it's a DOM node\n   * @return true is object is a DOM node\n   */\n  const _isNode = function _isNode(value) {\n    return typeof Node === 'function' && value instanceof Node;\n  };\n  function _executeHooks(hooks, currentNode, data) {\n    arrayForEach(hooks, hook => {\n      hook.call(DOMPurify, currentNode, data, CONFIG);\n    });\n  }\n  /**\n   * _sanitizeElements\n   *\n   * @protect nodeName\n   * @protect textContent\n   * @protect removeChild\n   * @param currentNode to check for permission to exist\n   * @return true if node was killed, false if left alive\n   */\n  const _sanitizeElements = function _sanitizeElements(currentNode) {\n    let content = null;\n    /* Execute a hook if present */\n    _executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n    /* Check if element is clobbered or can clobber */\n    if (_isClobbered(currentNode)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Now let's check the element's type and name */\n    const tagName = transformCaseFunc(currentNode.nodeName);\n    /* Execute a hook if present */\n    _executeHooks(hooks.uponSanitizeElement, currentNode, {\n      tagName,\n      allowedTags: ALLOWED_TAGS\n    });\n    /* Detect mXSS attempts abusing namespace confusion */\n    if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w!]/g, currentNode.innerHTML) && regExpTest(/<[/\\w!]/g, currentNode.textContent)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Remove any occurrence of processing instructions */\n    if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Remove any kind of possibly harmful comments */\n    if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Remove element if anything forbids its presence */\n    if (!(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function && EXTRA_ELEMENT_HANDLING.tagCheck(tagName)) && (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName])) {\n      /* Check if we have a custom element to handle */\n      if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n        if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n          return false;\n        }\n        if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n          return false;\n        }\n      }\n      /* Keep content except for bad-listed elements */\n      if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n        const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n        const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n        if (childNodes && parentNode) {\n          const childCount = childNodes.length;\n          for (let i = childCount - 1; i >= 0; --i) {\n            const childClone = cloneNode(childNodes[i], true);\n            childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n            parentNode.insertBefore(childClone, getNextSibling(currentNode));\n          }\n        }\n      }\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Check whether element has a valid namespace */\n    if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Make sure that older browsers don't get fallback-tag mXSS */\n    if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n    /* Sanitize element content to be template-safe */\n    if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n      /* Get the element's text content */\n      content = currentNode.textContent;\n      arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n        content = stringReplace(content, expr, ' ');\n      });\n      if (currentNode.textContent !== content) {\n        arrayPush(DOMPurify.removed, {\n          element: currentNode.cloneNode()\n        });\n        currentNode.textContent = content;\n      }\n    }\n    /* Execute a hook if present */\n    _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n    return false;\n  };\n  /**\n   * _isValidAttribute\n   *\n   * @param lcTag Lowercase tag name of containing element.\n   * @param lcName Lowercase attribute name.\n   * @param value Attribute value.\n   * @return Returns true if `value` is valid, otherwise false.\n   */\n  // eslint-disable-next-line complexity\n  const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n    /* 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    /* Allow valid data-* attributes: At least one character after \"-\"\n        (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n        XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n        We don't need to check the value; it's always URI safe. */\n    if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function && EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n      if (\n      // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n      // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n      // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n      _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName, 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, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {\n      return false;\n    } else ;\n    return true;\n  };\n  /**\n   * _isBasicCustomElement\n   * checks if at least one dash is included in tagName, and it's not the first char\n   * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n   *\n   * @param tagName name of the tag of the node to sanitize\n   * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n   */\n  const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n    return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n  };\n  /**\n   * _sanitizeAttributes\n   *\n   * @protect attributes\n   * @protect nodeName\n   * @protect removeAttribute\n   * @protect setAttribute\n   *\n   * @param currentNode to sanitize\n   */\n  const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n    /* Execute a hook if present */\n    _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n    const {\n      attributes\n    } = currentNode;\n    /* Check if we have attributes; if not we might have a text node */\n    if (!attributes || _isClobbered(currentNode)) {\n      return;\n    }\n    const hookEvent = {\n      attrName: '',\n      attrValue: '',\n      keepAttr: true,\n      allowedAttributes: ALLOWED_ATTR,\n      forceKeepAttr: undefined\n    };\n    let l = attributes.length;\n    /* Go backwards over all attributes; safely remove bad ones */\n    while (l--) {\n      const attr = attributes[l];\n      const {\n        name,\n        namespaceURI,\n        value: attrValue\n      } = attr;\n      const lcName = transformCaseFunc(name);\n      const initValue = attrValue;\n      let value = name === 'value' ? initValue : stringTrim(initValue);\n      /* Execute a hook if present */\n      hookEvent.attrName = lcName;\n      hookEvent.attrValue = value;\n      hookEvent.keepAttr = true;\n      hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n      _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n      value = hookEvent.attrValue;\n      /* Full DOM Clobbering protection via namespace isolation,\n       * Prefix id and name attributes with `user-content-`\n       */\n      if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n        // Remove the attribute with this value\n        _removeAttribute(name, currentNode);\n        // Prefix the value and later re-create the attribute with the sanitized value\n        value = SANITIZE_NAMED_PROPS_PREFIX + value;\n      }\n      /* Work around a security issue with comments inside attributes */\n      if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|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 approve of the attribute? */\n      if (hookEvent.forceKeepAttr) {\n        continue;\n      }\n      /* Did the hooks approve of the attribute? */\n      if (!hookEvent.keepAttr) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n      /* Work around a security issue in jQuery 3.0 */\n      if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n      /* Sanitize attribute content to be template-safe */\n      if (SAFE_FOR_TEMPLATES) {\n        arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n          value = stringReplace(value, expr, ' ');\n        });\n      }\n      /* Is `value` valid for this attribute? */\n      const lcTag = transformCaseFunc(currentNode.nodeName);\n      if (!_isValidAttribute(lcTag, lcName, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n      /* Handle attributes that require Trusted Types */\n      if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n        if (namespaceURI) ; else {\n          switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n            case 'TrustedHTML':\n              {\n                value = trustedTypesPolicy.createHTML(value);\n                break;\n              }\n            case 'TrustedScriptURL':\n              {\n                value = trustedTypesPolicy.createScriptURL(value);\n                break;\n              }\n          }\n        }\n      }\n      /* Handle invalid data-* attribute set by try-catching it */\n      if (value !== initValue) {\n        try {\n          if (namespaceURI) {\n            currentNode.setAttributeNS(namespaceURI, name, value);\n          } else {\n            /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n            currentNode.setAttribute(name, value);\n          }\n          if (_isClobbered(currentNode)) {\n            _forceRemove(currentNode);\n          } else {\n            arrayPop(DOMPurify.removed);\n          }\n        } catch (_) {\n          _removeAttribute(name, currentNode);\n        }\n      }\n    }\n    /* Execute a hook if present */\n    _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n  };\n  /**\n   * _sanitizeShadowDOM\n   *\n   * @param fragment to iterate over recursively\n   */\n  const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n    let shadowNode = null;\n    const shadowIterator = _createNodeIterator(fragment);\n    /* Execute a hook if present */\n    _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n    while (shadowNode = shadowIterator.nextNode()) {\n      /* Execute a hook if present */\n      _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n      /* Sanitize tags and elements */\n      _sanitizeElements(shadowNode);\n      /* Check attributes next */\n      _sanitizeAttributes(shadowNode);\n      /* Deep shadow DOM detected */\n      if (shadowNode.content instanceof DocumentFragment) {\n        _sanitizeShadowDOM(shadowNode.content);\n      }\n    }\n    /* Execute a hook if present */\n    _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n  };\n  // eslint-disable-next-line complexity\n  DOMPurify.sanitize = function (dirty) {\n    let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    let body = null;\n    let importedNode = null;\n    let currentNode = null;\n    let returnNode = null;\n    /* Make sure we have a string to sanitize.\n      DO NOT return early, as this will return the wrong type if\n      the user has requested a DOM object rather than a string */\n    IS_EMPTY_INPUT = !dirty;\n    if (IS_EMPTY_INPUT) {\n      dirty = '<!-->';\n    }\n    /* Stringify, in case dirty is an object */\n    if (typeof dirty !== 'string' && !_isNode(dirty)) {\n      if (typeof dirty.toString === 'function') {\n        dirty = dirty.toString();\n        if (typeof dirty !== 'string') {\n          throw typeErrorCreate('dirty is not a string, aborting');\n        }\n      } else {\n        throw typeErrorCreate('toString is not a function');\n      }\n    }\n    /* Return dirty HTML if DOMPurify cannot run */\n    if (!DOMPurify.isSupported) {\n      return dirty;\n    }\n    /* Assign config vars */\n    if (!SET_CONFIG) {\n      _parseConfig(cfg);\n    }\n    /* Clean up removed elements */\n    DOMPurify.removed = [];\n    /* Check if dirty is correctly typed for IN_PLACE */\n    if (typeof dirty === 'string') {\n      IN_PLACE = false;\n    }\n    if (IN_PLACE) {\n      /* Do some early pre-sanitization to avoid unsafe root nodes */\n      if (dirty.nodeName) {\n        const tagName = transformCaseFunc(dirty.nodeName);\n        if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n          throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n        }\n      }\n    } else if (dirty instanceof Node) {\n      /* If dirty is a DOM element, append to an empty document to avoid\n         elements being stripped by the parser */\n      body = _initDocument('<!---->');\n      importedNode = body.ownerDocument.importNode(dirty, true);\n      if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n        /* Node is already a body, use as is */\n        body = importedNode;\n      } else if (importedNode.nodeName === 'HTML') {\n        body = importedNode;\n      } else {\n        // eslint-disable-next-line unicorn/prefer-dom-node-append\n        body.appendChild(importedNode);\n      }\n    } else {\n      /* Exit directly if we have nothing to do */\n      if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n      // eslint-disable-next-line unicorn/prefer-includes\n      dirty.indexOf('<') === -1) {\n        return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n      }\n      /* Initialize the document to work on */\n      body = _initDocument(dirty);\n      /* Check we have a DOM node from the data */\n      if (!body) {\n        return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n      }\n    }\n    /* Remove first element node (ours) if FORCE_BODY is set */\n    if (body && FORCE_BODY) {\n      _forceRemove(body.firstChild);\n    }\n    /* Get node iterator */\n    const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n    /* Now start iterating over the created document */\n    while (currentNode = nodeIterator.nextNode()) {\n      /* Sanitize tags and elements */\n      _sanitizeElements(currentNode);\n      /* Check attributes next */\n      _sanitizeAttributes(currentNode);\n      /* Shadow DOM detected, sanitize it */\n      if (currentNode.content instanceof DocumentFragment) {\n        _sanitizeShadowDOM(currentNode.content);\n      }\n    }\n    /* If we sanitized `dirty` in-place, return it. */\n    if (IN_PLACE) {\n      return dirty;\n    }\n    /* Return sanitized string or DOM */\n    if (RETURN_DOM) {\n      if (RETURN_DOM_FRAGMENT) {\n        returnNode = createDocumentFragment.call(body.ownerDocument);\n        while (body.firstChild) {\n          // eslint-disable-next-line unicorn/prefer-dom-node-append\n          returnNode.appendChild(body.firstChild);\n        }\n      } else {\n        returnNode = body;\n      }\n      if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n        /*\n          AdoptNode() is not used because internal state is not reset\n          (e.g. the past names map of a HTMLFormElement), this is safe\n          in theory but we would rather not risk another attack vector.\n          The state that is cloned by importNode() is explicitly defined\n          by the specs.\n        */\n        returnNode = importNode.call(originalDocument, returnNode, true);\n      }\n      return returnNode;\n    }\n    let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n    /* Serialize doctype if allowed */\n    if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n      serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n    }\n    /* Sanitize final string template-safe */\n    if (SAFE_FOR_TEMPLATES) {\n      arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n        serializedHTML = stringReplace(serializedHTML, expr, ' ');\n      });\n    }\n    return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n  };\n  DOMPurify.setConfig = function () {\n    let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    _parseConfig(cfg);\n    SET_CONFIG = true;\n  };\n  DOMPurify.clearConfig = function () {\n    CONFIG = null;\n    SET_CONFIG = false;\n  };\n  DOMPurify.isValidAttribute = function (tag, attr, value) {\n    /* Initialize shared config vars if necessary. */\n    if (!CONFIG) {\n      _parseConfig({});\n    }\n    const lcTag = transformCaseFunc(tag);\n    const lcName = transformCaseFunc(attr);\n    return _isValidAttribute(lcTag, lcName, value);\n  };\n  DOMPurify.addHook = function (entryPoint, hookFunction) {\n    if (typeof hookFunction !== 'function') {\n      return;\n    }\n    arrayPush(hooks[entryPoint], hookFunction);\n  };\n  DOMPurify.removeHook = function (entryPoint, hookFunction) {\n    if (hookFunction !== undefined) {\n      const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n      return index === -1 ? undefined : arraySplice(hooks[entryPoint], index, 1)[0];\n    }\n    return arrayPop(hooks[entryPoint]);\n  };\n  DOMPurify.removeHooks = function (entryPoint) {\n    hooks[entryPoint] = [];\n  };\n  DOMPurify.removeAllHooks = function () {\n    hooks = _createHooksMap();\n  };\n  return DOMPurify;\n}\nvar purify = createDOMPurify();\n\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 v17.0.4 - 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 G(u){T=u}var _={exec:()=>null};function k(u,e=\"\"){let t=typeof u==\"string\"?u:u.source,n={replace:(r,i)=>{let s=typeof i==\"string\"?i:i.source;return s=s.replace(m.caret,\"$1\"),t=t.replace(r,s),n},getRegex:()=>new RegExp(t,e)};return n}var Re=(()=>{try{return!!new RegExp(\"(?<=1)(?<!1)\")}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:u=>new RegExp(`^( {0,3}${u})((?:[\t ][^\\\\n]*)?(?:\\\\n|$))`),nextBulletRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \t][^\\\\n]*)?(?:\\\\n|$))`),hrRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),fencesBeginRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}(?:\\`\\`\\`|~~~)`),headingBeginRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}#`),htmlBeginRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}<(?:[a-z].*>|!--)`,\"i\"),blockquoteBeginRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}>`)},Te=/^(?:[ \\t]*(?:\\n|$))+/,Oe=/^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/,we=/^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,A=/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,ye=/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,N=/ {0,3}(?:[*+-]|\\d{1,9}[.)])/,re=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,se=k(re).replace(/bull/g,N).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(),Pe=k(re).replace(/bull/g,N).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(),Q=/^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,Se=/^[^\\n]+/,j=/(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/,$e=k(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace(\"label\",j).replace(\"title\",/(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/).getRegex(),_e=k(/^(bull)([ \\t][^\\n]+?)?(?:\\n|$)/).replace(/bull/g,N).getRegex(),q=\"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\",F=/<!--(?:-?>|[\\s\\S]*?(?:-->|$))/,Le=k(\"^ {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\",F).replace(\"tag\",q).replace(\"attribute\",/ +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex(),ie=k(Q).replace(\"hr\",A).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]\").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",q).getRegex(),Me=k(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace(\"paragraph\",ie).getRegex(),U={blockquote:Me,code:Oe,def:$e,fences:we,heading:ye,hr:A,html:Le,lheading:se,list:_e,newline:Te,paragraph:ie,table:_,text:Se},te=k(\"^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\").replace(\"hr\",A).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\",q).getRegex(),ze={...U,lheading:Pe,table:te,paragraph:k(Q).replace(\"hr\",A).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"table\",te).replace(\"blockquote\",\" {0,3}>\").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\",q).getRegex()},Ee={...U,html:k(`^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\\\s[^'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`).replace(\"comment\",F).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:k(Q).replace(\"hr\",A).replace(\"heading\",` *#{1,6} *[^\n]`).replace(\"lheading\",se).replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"|fences\",\"\").replace(\"|list\",\"\").replace(\"|html\",\"\").replace(\"|tag\",\"\").getRegex()},Ie=/^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,Ae=/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,oe=/^( {2,}|\\\\)\\n(?!\\s*$)/,Ce=/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,v=/[\\p{P}\\p{S}]/u,K=/[\\s\\p{P}\\p{S}]/u,ae=/[^\\s\\p{P}\\p{S}]/u,Be=k(/^((?![*_])punctSpace)/,\"u\").replace(/punctSpace/g,K).getRegex(),le=/(?!~)[\\p{P}\\p{S}]/u,De=/(?!~)[\\s\\p{P}\\p{S}]/u,qe=/(?:[^\\s\\p{P}\\p{S}]|~)/u,ue=/(?![*_])[\\p{P}\\p{S}]/u,ve=/(?![*_])[\\s\\p{P}\\p{S}]/u,He=/(?:[^\\s\\p{P}\\p{S}]|[*_])/u,Ge=k(/link|precode-code|html/,\"g\").replace(\"link\",/\\[(?:[^\\[\\]`]|(?<a>`+)[^`]+\\k<a>(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)/).replace(\"precode-\",Re?\"(?<!`)()\":\"(^^|[^`])\").replace(\"code\",/(?<b>`+)[^`]+\\k<b>(?!`)/).replace(\"html\",/<(?! )[^<>]*?>/).getRegex(),pe=/^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/,Ze=k(pe,\"u\").replace(/punct/g,v).getRegex(),Ne=k(pe,\"u\").replace(/punct/g,le).getRegex(),ce=\"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)\",Qe=k(ce,\"gu\").replace(/notPunctSpace/g,ae).replace(/punctSpace/g,K).replace(/punct/g,v).getRegex(),je=k(ce,\"gu\").replace(/notPunctSpace/g,qe).replace(/punctSpace/g,De).replace(/punct/g,le).getRegex(),Fe=k(\"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)\",\"gu\").replace(/notPunctSpace/g,ae).replace(/punctSpace/g,K).replace(/punct/g,v).getRegex(),Ue=k(/^~~?(?:((?!~)punct)|[^\\s~])/,\"u\").replace(/punct/g,ue).getRegex(),Ke=\"^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)\",We=k(Ke,\"gu\").replace(/notPunctSpace/g,He).replace(/punctSpace/g,ve).replace(/punct/g,ue).getRegex(),Xe=k(/\\\\(punct)/,\"gu\").replace(/punct/g,v).getRegex(),Je=k(/^<(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(),Ve=k(F).replace(\"(?:-->|$)\",\"-->\").getRegex(),Ye=k(\"^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\",Ve).replace(\"attribute\",/\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/).getRegex(),D=/(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+[^`]*?`+(?!`)|[^\\[\\]\\\\`])*?/,et=k(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]+(?:\\n[ \\t]*)?|\\n[ \\t]*)(title))?\\s*\\)/).replace(\"label\",D).replace(\"href\",/<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/).replace(\"title\",/\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex(),he=k(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\",D).replace(\"ref\",j).getRegex(),ke=k(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\",j).getRegex(),tt=k(\"reflink|nolink(?!\\\\()\",\"g\").replace(\"reflink\",he).replace(\"nolink\",ke).getRegex(),ne=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,W={_backpedal:_,anyPunctuation:Xe,autolink:Je,blockSkip:Ge,br:oe,code:Ae,del:_,delLDelim:_,delRDelim:_,emStrongLDelim:Ze,emStrongRDelimAst:Qe,emStrongRDelimUnd:Fe,escape:Ie,link:et,nolink:ke,punctuation:Be,reflink:he,reflinkSearch:tt,tag:Ye,text:Ce,url:_},nt={...W,link:k(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\",D).getRegex(),reflink:k(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\",D).getRegex()},Z={...W,emStrongRDelimAst:je,emStrongLDelim:Ne,delLDelim:Ue,delRDelim:We,url:k(/^((?:protocol):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/).replace(\"protocol\",ne).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:k(/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|protocol:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/).replace(\"protocol\",ne).getRegex()},rt={...Z,br:k(oe).replace(\"{2,}\",\"*\").getRegex(),text:k(Z.text).replace(\"\\\\b_\",\"\\\\b_| {2,}\\\\n\").replace(/\\{2,\\}/g,\"*\").getRegex()},C={normal:U,gfm:ze,pedantic:Ee},z={normal:W,gfm:Z,breaks:rt,pedantic:nt};var st={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"},de=u=>st[u];function O(u,e){if(e){if(m.escapeTest.test(u))return u.replace(m.escapeReplace,de)}else if(m.escapeTestNoEncode.test(u))return u.replace(m.escapeReplaceNoEncode,de);return u}function X(u){try{u=encodeURI(u).replace(m.percentDecode,\"%\")}catch{return null}return u}function J(u,e){let t=u.replace(m.findPipe,(i,s,a)=>{let o=!1,l=s;for(;--l>=0&&a[l]===\"\\\\\";)o=!o;return o?\"|\":\" |\"}),n=t.split(m.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length<e;)n.push(\"\");for(;r<n.length;r++)n[r]=n[r].trim().replace(m.slashPipe,\"|\");return n}function E(u,e,t){let n=u.length;if(n===0)return\"\";let r=0;for(;r<n;){let i=u.charAt(n-r-1);if(i===e&&!t)r++;else if(i!==e&&t)r++;else break}return u.slice(0,n-r)}function ge(u,e){if(u.indexOf(e[1])===-1)return-1;let t=0;for(let n=0;n<u.length;n++)if(u[n]===\"\\\\\")n++;else if(u[n]===e[0])t++;else if(u[n]===e[1]&&(t--,t<0))return n;return t>0?-2:-1}function fe(u,e=0){let t=e,n=\"\";for(let r of u)if(r===\"\t\"){let i=4-t%4;n+=\" \".repeat(i),t+=i}else n+=r,t++;return n}function me(u,e,t,n,r){let i=e.href,s=e.title||null,a=u[1].replace(r.other.outputLinkReplace,\"$1\");n.state.inLink=!0;let o={type:u[0].charAt(0)===\"!\"?\"image\":\"link\",raw:t,href:i,title:s,text:a,tokens:n.inlineTokens(a)};return n.state.inLink=!1,o}function it(u,e,t){let n=u.match(t.other.indentCodeCompensation);if(n===null)return e;let r=n[1];return e.split(`\n`).map(i=>{let s=i.match(t.other.beginningSpace);if(s===null)return i;let[a]=s;return a.length>=r.length?i.slice(r.length):i}).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=t[0].replace(this.rules.other.codeRemoveIndent,\"\");return{type:\"code\",raw:t[0],codeBlockStyle:\"indented\",text:this.options.pedantic?n:E(n,`\n`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],r=it(n,t[3]||\"\",this.rules);return{type:\"code\",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,\"$1\"):t[2],text:r}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let r=E(n,\"#\");(this.options.pedantic||!r||this.rules.other.endingSpaceChar.test(r))&&(n=r.trim())}return{type:\"heading\",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:\"hr\",raw:E(t[0],`\n`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=E(t[0],`\n`).split(`\n`),r=\"\",i=\"\",s=[];for(;n.length>0;){let a=!1,o=[],l;for(l=0;l<n.length;l++)if(this.rules.other.blockquoteStart.test(n[l]))o.push(n[l]),a=!0;else if(!a)o.push(n[l]);else break;n=n.slice(l);let p=o.join(`\n`),c=p.replace(this.rules.other.blockquoteSetextReplace,`\n    $1`).replace(this.rules.other.blockquoteSetextReplace2,\"\");r=r?`${r}\n${p}`:p,i=i?`${i}\n${c}`:c;let d=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(c,s,!0),this.lexer.state.top=d,n.length===0)break;let h=s.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);s[s.length-1]=S,r=r.substring(0,r.length-R.raw.length)+S.raw,i=i.substring(0,i.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);s[s.length-1]=S,r=r.substring(0,r.length-h.raw.length)+S.raw,i=i.substring(0,i.length-R.raw.length)+S.raw,n=f.substring(s.at(-1).raw.length).split(`\n`);continue}}return{type:\"blockquote\",raw:r,tokens:s,text:i}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),r=n.length>1,i={type:\"list\",raw:\"\",ordered:r,start:r?+n.slice(0,-1):\"\",loose:!1,items:[]};n=r?`\\\\d{1,9}\\\\${n.slice(-1)}`:`\\\\${n}`,this.options.pedantic&&(n=r?n:\"[*+-]\");let s=this.rules.other.listItemRegex(n),a=!1;for(;e;){let l=!1,p=\"\",c=\"\";if(!(t=s.exec(e))||this.rules.block.hr.test(e))break;p=t[0],e=e.substring(p.length);let d=fe(t[2].split(`\n`,1)[0],t[1].length),h=e.split(`\n`,1)[0],R=!d.trim(),f=0;if(this.options.pedantic?(f=2,c=d.trimStart()):R?f=t[1].length+1:(f=d.search(this.rules.other.nonSpaceChar),f=f>4?1:f,c=d.slice(f),f+=t[1].length),R&&this.rules.other.blankLine.test(h)&&(p+=h+`\n`,e=e.substring(h.length+1),l=!0),!l){let S=this.rules.other.nextBulletRegex(f),V=this.rules.other.hrRegex(f),Y=this.rules.other.fencesBeginRegex(f),ee=this.rules.other.headingBeginRegex(f),xe=this.rules.other.htmlBeginRegex(f),be=this.rules.other.blockquoteBeginRegex(f);for(;e;){let H=e.split(`\n`,1)[0],I;if(h=H,this.options.pedantic?(h=h.replace(this.rules.other.listReplaceNesting,\"  \"),I=h):I=h.replace(this.rules.other.tabCharGlobal,\"    \"),Y.test(h)||ee.test(h)||xe.test(h)||be.test(h)||S.test(h)||V.test(h))break;if(I.search(this.rules.other.nonSpaceChar)>=f||!h.trim())c+=`\n`+I.slice(f);else{if(R||d.replace(this.rules.other.tabCharGlobal,\"    \").search(this.rules.other.nonSpaceChar)>=4||Y.test(d)||ee.test(d)||V.test(d))break;c+=`\n`+h}R=!h.trim(),p+=H+`\n`,e=e.substring(H.length+1),d=I.slice(f)}}i.loose||(a?i.loose=!0:this.rules.other.doubleBlankLine.test(p)&&(a=!0)),i.items.push({type:\"list_item\",raw:p,task:!!this.options.gfm&&this.rules.other.listIsTask.test(c),loose:!1,text:c,tokens:[]}),i.raw+=p}let o=i.items.at(-1);if(o)o.raw=o.raw.trimEnd(),o.text=o.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let l of i.items){if(this.lexer.state.top=!1,l.tokens=this.lexer.blockTokens(l.text,[]),l.task){if(l.text=l.text.replace(this.rules.other.listReplaceTask,\"\"),l.tokens[0]?.type===\"text\"||l.tokens[0]?.type===\"paragraph\"){l.tokens[0].raw=l.tokens[0].raw.replace(this.rules.other.listReplaceTask,\"\"),l.tokens[0].text=l.tokens[0].text.replace(this.rules.other.listReplaceTask,\"\");for(let c=this.lexer.inlineQueue.length-1;c>=0;c--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[c].src)){this.lexer.inlineQueue[c].src=this.lexer.inlineQueue[c].src.replace(this.rules.other.listReplaceTask,\"\");break}}let p=this.rules.other.listTaskCheckbox.exec(l.raw);if(p){let c={type:\"checkbox\",raw:p[0]+\" \",checked:p[0]!==\"[ ]\"};l.checked=c.checked,i.loose?l.tokens[0]&&[\"paragraph\",\"text\"].includes(l.tokens[0].type)&&\"tokens\"in l.tokens[0]&&l.tokens[0].tokens?(l.tokens[0].raw=c.raw+l.tokens[0].raw,l.tokens[0].text=c.raw+l.tokens[0].text,l.tokens[0].tokens.unshift(c)):l.tokens.unshift({type:\"paragraph\",raw:c.raw,text:c.raw,tokens:[c]}):l.tokens.unshift(c)}}if(!i.loose){let p=l.tokens.filter(d=>d.type===\"space\"),c=p.length>0&&p.some(d=>this.rules.other.anyLine.test(d.raw));i.loose=c}}if(i.loose)for(let l of i.items){l.loose=!0;for(let p of l.tokens)p.type===\"text\"&&(p.type=\"paragraph\")}return i}}html(e){let t=this.rules.block.html.exec(e);if(t)return{type:\"html\",block:!0,raw:t[0],pre:t[1]===\"pre\"||t[1]===\"script\"||t[1]===\"style\",text:t[0]}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal,\" \"),r=t[2]?t[2].replace(this.rules.other.hrefBrackets,\"$1\").replace(this.rules.inline.anyPunctuation,\"$1\"):\"\",i=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,\"$1\"):t[3];return{type:\"def\",tag:n,raw:t[0],href:r,title:i}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=J(t[1]),r=t[2].replace(this.rules.other.tableAlignChars,\"\").split(\"|\"),i=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,\"\").split(`\n`):[],s={type:\"table\",raw:t[0],header:[],align:[],rows:[]};if(n.length===r.length){for(let a of r)this.rules.other.tableAlignRight.test(a)?s.align.push(\"right\"):this.rules.other.tableAlignCenter.test(a)?s.align.push(\"center\"):this.rules.other.tableAlignLeft.test(a)?s.align.push(\"left\"):s.align.push(null);for(let a=0;a<n.length;a++)s.header.push({text:n[a],tokens:this.lexer.inline(n[a]),header:!0,align:s.align[a]});for(let a of i)s.rows.push(J(a,s.header.length).map((o,l)=>({text:o,tokens:this.lexer.inline(o),header:!1,align:s.align[l]})));return s}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:\"heading\",raw:t[0],depth:t[2].charAt(0)===\"=\"?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===`\n`?t[1].slice(0,-1):t[1];return{type:\"paragraph\",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:\"text\",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:\"escape\",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:\"html\",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let s=E(n.slice(0,-1),\"\\\\\");if((n.length-s.length)%2===0)return}else{let s=ge(t[2],\"()\");if(s===-2)return;if(s>-1){let o=(t[0].indexOf(\"!\")===0?5:4)+t[1].length+s;t[2]=t[2].substring(0,s),t[0]=t[0].substring(0,o).trim(),t[3]=\"\"}}let r=t[2],i=\"\";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(r);s&&(r=s[1],i=s[3])}else i=t[3]?t[3].slice(1,-1):\"\";return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?r=r.slice(1):r=r.slice(1,-1)),me(t,{href:r&&r.replace(this.rules.inline.anyPunctuation,\"$1\"),title:i&&i.replace(this.rules.inline.anyPunctuation,\"$1\")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let r=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal,\" \"),i=t[r.toLowerCase()];if(!i){let s=n[0].charAt(0);return{type:\"text\",raw:s,text:s}}return me(n,i,n[0],this.lexer,this.rules)}}emStrong(e,t,n=\"\"){let r=this.rules.inline.emStrongLDelim.exec(e);if(!r||r[3]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(r[1]||r[2]||\"\")||!n||this.rules.inline.punctuation.exec(n)){let s=[...r[0]].length-1,a,o,l=s,p=0,c=r[0][0]===\"*\"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+s);(r=c.exec(t))!=null;){if(a=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!a)continue;if(o=[...a].length,r[3]||r[4]){l+=o;continue}else if((r[5]||r[6])&&s%3&&!((s+o)%3)){p+=o;continue}if(l-=o,l>0)continue;o=Math.min(o,o+l+p);let d=[...r[0]][0].length,h=e.slice(0,s+r.index+d+o);if(Math.min(s,o)%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,\" \"),r=this.rules.other.nonSpaceChar.test(n),i=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return r&&i&&(n=n.substring(1,n.length-1)),{type:\"codespan\",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:\"br\",raw:t[0]}}del(e,t,n=\"\"){let r=this.rules.inline.delLDelim.exec(e);if(!r)return;if(!(r[1]||\"\")||!n||this.rules.inline.punctuation.exec(n)){let s=[...r[0]].length-1,a,o,l=s,p=this.rules.inline.delRDelim;for(p.lastIndex=0,t=t.slice(-1*e.length+s);(r=p.exec(t))!=null;){if(a=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!a||(o=[...a].length,o!==s))continue;if(r[3]||r[4]){l+=o;continue}if(l-=o,l>0)continue;o=Math.min(o,o+l);let c=[...r[0]][0].length,d=e.slice(0,s+r.index+c+o),h=d.slice(s,-s);return{type:\"del\",raw:d,text:h,tokens:this.lexer.inlineTokens(h)}}}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,r;return t[2]===\"@\"?(n=t[1],r=\"mailto:\"+n):(n=t[1],r=n),{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,r;if(t[2]===\"@\")n=t[0],r=\"mailto:\"+n;else{let i;do i=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??\"\";while(i!==t[0]);n=t[0],t[1]===\"www.\"?r=\"http://\"+t[0]:r=t[0]}return{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:\"text\",raw:t[0],text:t[0],escaped:n}}}};var x=class u{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:C.normal,inline:z.normal};this.options.pedantic?(t.block=C.pedantic,t.inline=z.pedantic):this.options.gfm&&(t.block=C.gfm,this.options.breaks?t.inline=z.breaks:t.inline=z.gfm),this.tokenizer.rules=t}static get rules(){return{block:C,inline:z}}static lex(e,t){return new u(t).lex(e)}static lexInline(e,t){return new u(t).inlineTokens(e)}lex(e){e=e.replace(m.carriageReturn,`\n`),this.blockTokens(e,this.tokens);for(let t=0;t<this.inlineQueue.length;t++){let n=this.inlineQueue[t];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){for(this.options.pedantic&&(e=e.replace(m.tabCharGlobal,\"    \").replace(m.spaceLine,\"\"));e;){let r;if(this.options.extensions?.block?.some(s=>(r=s.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let s=t.at(-1);r.raw.length===1&&s!==void 0?s.raw+=`\n`:t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(r=this.tokenizer.fences(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.heading(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.hr(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.blockquote(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.list(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.html(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.def(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title},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 s=1/0,a=e.slice(1),o;this.options.extensions.startBlock.forEach(l=>{o=l.call({lexer:this},a),typeof o==\"number\"&&o>=0&&(s=Math.min(s,o))}),s<1/0&&s>=0&&(i=e.substring(0,s+1))}if(this.state.top&&(r=this.tokenizer.paragraph(i))){let s=t.at(-1);n&&s?.type===\"paragraph\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r),n=i.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(e){let s=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n=e,r=null;if(this.tokens.links){let o=Object.keys(this.tokens.links);if(o.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)o.includes(r[0].slice(r[0].lastIndexOf(\"[\")+1,-1))&&(n=n.slice(0,r.index)+\"[\"+\"a\".repeat(r[0].length-2)+\"]\"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,r.index)+\"++\"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let i;for(;(r=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)i=r[2]?r[2].length:0,n=n.slice(0,r.index+i)+\"[\"+\"a\".repeat(r[0].length-i-2)+\"]\"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let s=!1,a=\"\";for(;e;){s||(a=\"\"),s=!1;let o;if(this.options.extensions?.inline?.some(p=>(o=p.call({lexer:this},e,t))?(e=e.substring(o.raw.length),t.push(o),!0):!1))continue;if(o=this.tokenizer.escape(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.tag(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.link(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);let p=t.at(-1);o.type===\"text\"&&p?.type===\"text\"?(p.raw+=o.raw,p.text+=o.text):t.push(o);continue}if(o=this.tokenizer.emStrong(e,n,a)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.codespan(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.br(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.del(e,n,a)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.autolink(e)){e=e.substring(o.raw.length),t.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(e))){e=e.substring(o.raw.length),t.push(o);continue}let l=e;if(this.options.extensions?.startInline){let p=1/0,c=e.slice(1),d;this.options.extensions.startInline.forEach(h=>{d=h.call({lexer:this},c),typeof d==\"number\"&&d>=0&&(p=Math.min(p,d))}),p<1/0&&p>=0&&(l=e.substring(0,p+1))}if(o=this.tokenizer.inlineText(l)){e=e.substring(o.raw.length),o.raw.slice(-1)!==\"_\"&&(a=o.raw.slice(-1)),s=!0;let p=t.at(-1);p?.type===\"text\"?(p.raw+=o.raw,p.text+=o.text):t.push(o);continue}if(e){let p=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(p);break}else throw new Error(p)}}return t}};var y=class{options;parser;constructor(e){this.options=e||T}space(e){return\"\"}code({text:e,lang:t,escaped:n}){let r=(t||\"\").match(m.notSpaceStart)?.[0],i=e.replace(m.endingNewline,\"\")+`\n`;return r?'<pre><code class=\"language-'+O(r)+'\">'+(n?i:O(i,!0))+`</code></pre>\n`:\"<pre><code>\"+(n?i:O(i,!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,r=\"\";for(let a=0;a<e.items.length;a++){let o=e.items[a];r+=this.listitem(o)}let i=t?\"ol\":\"ul\",s=t&&n!==1?' start=\"'+n+'\"':\"\";return\"<\"+i+s+`>\n`+r+\"</\"+i+`>\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 i=0;i<e.header.length;i++)n+=this.tablecell(e.header[i]);t+=this.tablerow({text:n});let r=\"\";for(let i=0;i<e.rows.length;i++){let s=e.rows[i];n=\"\";for(let a=0;a<s.length;a++)n+=this.tablecell(s[a]);r+=this.tablerow({text:n})}return r&&(r=`<tbody>${r}</tbody>`),`<table>\n<thead>\n`+t+`</thead>\n`+r+`</table>\n`}tablerow({text:e}){return`<tr>\n${e}</tr>\n`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?\"th\":\"td\";return(e.align?`<${n} align=\"${e.align}\">`:`<${n}>`)+t+`</${n}>\n`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${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 r=this.parser.parseInline(n),i=X(e);if(i===null)return r;e=i;let s='<a href=\"'+e+'\"';return t&&(s+=' title=\"'+O(t)+'\"'),s+=\">\"+r+\"</a>\",s}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=X(e);if(i===null)return O(n);e=i;let s=`<img src=\"${e}\" alt=\"${O(n)}\"`;return t&&(s+=` title=\"${O(t)}\"`),s+=\">\",s}text(e){return\"tokens\"in e&&e.tokens?this.parser.parseInline(e.tokens):\"escaped\"in e&&e.escaped?e.text:O(e.text)}};var $=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 u{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 $}static parse(e,t){return new u(t).parse(e)}static parseInline(e,t){return new u(t).parseInline(e)}parse(e){let t=\"\";for(let n=0;n<e.length;n++){let r=e[n];if(this.options.extensions?.renderers?.[r.type]){let s=r,a=this.options.extensions.renderers[s.type].call({parser:this},s);if(a!==!1||![\"space\",\"hr\",\"heading\",\"code\",\"table\",\"blockquote\",\"list\",\"html\",\"def\",\"paragraph\",\"text\"].includes(s.type)){t+=a||\"\";continue}}let i=r;switch(i.type){case\"space\":{t+=this.renderer.space(i);break}case\"hr\":{t+=this.renderer.hr(i);break}case\"heading\":{t+=this.renderer.heading(i);break}case\"code\":{t+=this.renderer.code(i);break}case\"table\":{t+=this.renderer.table(i);break}case\"blockquote\":{t+=this.renderer.blockquote(i);break}case\"list\":{t+=this.renderer.list(i);break}case\"checkbox\":{t+=this.renderer.checkbox(i);break}case\"html\":{t+=this.renderer.html(i);break}case\"def\":{t+=this.renderer.def(i);break}case\"paragraph\":{t+=this.renderer.paragraph(i);break}case\"text\":{t+=this.renderer.text(i);break}default:{let s='Token with \"'+i.type+'\" type was not found.';if(this.options.silent)return console.error(s),\"\";throw new Error(s)}}}return t}parseInline(e,t=this.renderer){let n=\"\";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let a=this.options.extensions.renderers[i.type].call({parser:this},i);if(a!==!1||![\"escape\",\"html\",\"link\",\"image\",\"strong\",\"em\",\"codespan\",\"br\",\"del\",\"text\"].includes(i.type)){n+=a||\"\";continue}}let s=i;switch(s.type){case\"escape\":{n+=t.text(s);break}case\"html\":{n+=t.html(s);break}case\"link\":{n+=t.link(s);break}case\"image\":{n+=t.image(s);break}case\"checkbox\":{n+=t.checkbox(s);break}case\"strong\":{n+=t.strong(s);break}case\"em\":{n+=t.em(s);break}case\"codespan\":{n+=t.codespan(s);break}case\"br\":{n+=t.br(s);break}case\"del\":{n+=t.del(s);break}case\"text\":{n+=t.text(s);break}default:{let a='Token with \"'+s.type+'\" type was not found.';if(this.options.silent)return console.error(a),\"\";throw new Error(a)}}}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(){return this.block?x.lex:x.lexInline}provideParser(){return this.block?b.parse:b.parseInline}};var B=class{defaults=M();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=b;Renderer=y;TextRenderer=$;Lexer=x;Tokenizer=w;Hooks=P;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case\"table\":{let i=r;for(let s of i.header)n=n.concat(this.walkTokens(s.tokens,t));for(let s of i.rows)for(let a of s)n=n.concat(this.walkTokens(a.tokens,t));break}case\"list\":{let i=r;n=n.concat(this.walkTokens(i.items,t));break}default:{let i=r;this.defaults.extensions?.childTokens?.[i.type]?this.defaults.extensions.childTokens[i.type].forEach(s=>{let a=i[s].flat(1/0);n=n.concat(this.walkTokens(a,t))}):i.tokens&&(n=n.concat(this.walkTokens(i.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let r={...n};if(r.async=this.defaults.async||r.async||!1,n.extensions&&(n.extensions.forEach(i=>{if(!i.name)throw new Error(\"extension name required\");if(\"renderer\"in i){let s=t.renderers[i.name];s?t.renderers[i.name]=function(...a){let o=i.renderer.apply(this,a);return o===!1&&(o=s.apply(this,a)),o}:t.renderers[i.name]=i.renderer}if(\"tokenizer\"in i){if(!i.level||i.level!==\"block\"&&i.level!==\"inline\")throw new Error(\"extension level must be 'block' or 'inline'\");let s=t[i.level];s?s.unshift(i.tokenizer):t[i.level]=[i.tokenizer],i.start&&(i.level===\"block\"?t.startBlock?t.startBlock.push(i.start):t.startBlock=[i.start]:i.level===\"inline\"&&(t.startInline?t.startInline.push(i.start):t.startInline=[i.start]))}\"childTokens\"in i&&i.childTokens&&(t.childTokens[i.name]=i.childTokens)}),r.extensions=t),n.renderer){let i=this.defaults.renderer||new y(this.defaults);for(let s in n.renderer){if(!(s in i))throw new Error(`renderer '${s}' does not exist`);if([\"options\",\"parser\"].includes(s))continue;let a=s,o=n.renderer[a],l=i[a];i[a]=(...p)=>{let c=o.apply(i,p);return c===!1&&(c=l.apply(i,p)),c||\"\"}}r.renderer=i}if(n.tokenizer){let i=this.defaults.tokenizer||new w(this.defaults);for(let s in n.tokenizer){if(!(s in i))throw new Error(`tokenizer '${s}' does not exist`);if([\"options\",\"rules\",\"lexer\"].includes(s))continue;let a=s,o=n.tokenizer[a],l=i[a];i[a]=(...p)=>{let c=o.apply(i,p);return c===!1&&(c=l.apply(i,p)),c}}r.tokenizer=i}if(n.hooks){let i=this.defaults.hooks||new P;for(let s in n.hooks){if(!(s in i))throw new Error(`hook '${s}' does not exist`);if([\"options\",\"block\"].includes(s))continue;let a=s,o=n.hooks[a],l=i[a];P.passThroughHooks.has(s)?i[a]=p=>{if(this.defaults.async&&P.passThroughHooksRespectAsync.has(s))return(async()=>{let d=await o.call(i,p);return l.call(i,d)})();let c=o.call(i,p);return l.call(i,c)}:i[a]=(...p)=>{if(this.defaults.async)return(async()=>{let d=await o.apply(i,p);return d===!1&&(d=await l.apply(i,p)),d})();let c=o.apply(i,p);return c===!1&&(c=l.apply(i,p)),c}}r.hooks=i}if(n.walkTokens){let i=this.defaults.walkTokens,s=n.walkTokens;r.walkTokens=function(a){let o=[];return o.push(s.call(this,a)),i&&(o=o.concat(i.call(this,a))),o}}this.defaults={...this.defaults,...r}}),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,r)=>{let i={...r},s={...this.defaults,...i},a=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&i.async===!1)return a(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 a(new Error(\"marked(): input parameter is undefined or null\"));if(typeof n!=\"string\")return a(new Error(\"marked(): input parameter is of type \"+Object.prototype.toString.call(n)+\", string expected\"));if(s.hooks&&(s.hooks.options=s,s.hooks.block=e),s.async)return(async()=>{let o=s.hooks?await s.hooks.preprocess(n):n,p=await(s.hooks?await s.hooks.provideLexer():e?x.lex:x.lexInline)(o,s),c=s.hooks?await s.hooks.processAllTokens(p):p;s.walkTokens&&await Promise.all(this.walkTokens(c,s.walkTokens));let h=await(s.hooks?await s.hooks.provideParser():e?b.parse:b.parseInline)(c,s);return s.hooks?await s.hooks.postprocess(h):h})().catch(a);try{s.hooks&&(n=s.hooks.preprocess(n));let l=(s.hooks?s.hooks.provideLexer():e?x.lex:x.lexInline)(n,s);s.hooks&&(l=s.hooks.processAllTokens(l)),s.walkTokens&&this.walkTokens(l,s.walkTokens);let c=(s.hooks?s.hooks.provideParser():e?b.parse:b.parseInline)(l,s);return s.hooks&&(c=s.hooks.postprocess(c)),c}catch(o){return a(o)}}}onError(e,t){return n=>{if(n.message+=`\nPlease report this to https://github.com/markedjs/marked.`,e){let r=\"<p>An error occurred:</p><pre>\"+O(n.message+\"\",!0)+\"</pre>\";return t?Promise.resolve(r):r}if(t)return Promise.reject(n);throw n}}};var L=new B;function g(u,e){return L.parse(u,e)}g.options=g.setOptions=function(u){return L.setOptions(u),g.defaults=L.defaults,G(g.defaults),g};g.getDefaults=M;g.defaults=T;g.use=function(...u){return L.use(...u),g.defaults=L.defaults,G(g.defaults),g};g.walkTokens=function(u,e){return L.walkTokens(u,e)};g.parseInline=L.parseInline;g.Parser=b;g.parser=b.parse;g.Renderer=y;g.TextRenderer=$;g.Lexer=x;g.lexer=x.lex;g.Tokenizer=w;g.Hooks=P;g.parse=g;var Ut=g.options,Kt=g.setOptions,Wt=g.use,Xt=g.walkTokens,Jt=g.parseInline,Vt=g,Yt=b.parse,en=x.lex;export{P as Hooks,x as Lexer,B as Marked,b as Parser,y as Renderer,$ as TextRenderer,w as Tokenizer,T as defaults,M as getDefaults,en as lexer,g as marked,Ut as options,Vt as parse,Jt as parseInline,Yt as parser,Kt as setOptions,Wt as use,Xt 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","import { getDateTimeParts } from '@sveltia/utils/datetime';\nimport { stripSlashes } from '@sveltia/utils/string';\nimport { sanitize } from 'isomorphic-dompurify';\nimport { parseInline } from 'marked';\nimport { parseEntities } from 'parse-entities';\n\nimport {\n  applyTransformations,\n  DATE_TRANSFORMATION_REGEX,\n  TERNARY_TRANSFORMATION_REGEX,\n} from '$lib/services/common/transformations';\nimport { getIndexFile, isCollectionIndexFile } from '$lib/services/contents/collection/index-file';\nimport { getField, getFieldDisplayValue } from '$lib/services/contents/entry/fields';\n\n/**\n * @import {\n * CommitAuthor,\n * Entry,\n * FlattenedEntryContent,\n * InternalCollection,\n * InternalLocaleCode,\n * RawEntryContent,\n * } from '$lib/types/private';\n */\n\n/**\n * @typedef {object} ReplacerSubContext\n * @property {string} slug Entry slug.\n * @property {string} entryPath Entry path.\n * @property {string | undefined} basePath Base path for the entry.\n * @property {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\n/**\n * Parse the given entry summary as Markdown and sanitize HTML with a few exceptions if the Markdown\n * option is enabled. Also, parse HTML character references (entities).\n * @param {string} str Original string.\n * @param {object} [options] Options.\n * @param {boolean} [options.allowMarkdown] Whether to allow Markdown and return HTML string.\n * @returns {string} Parsed string.\n */\nexport const sanitizeEntrySummary = (str, { allowMarkdown = false } = {}) => {\n  str = /** @type {string} */ (parseInline(str));\n  str = sanitize(str, { ALLOWED_TAGS: allowMarkdown ? ['strong', 'em', 'code'] : [] });\n  str = parseEntities(str);\n\n  return str.trim();\n};\n\n/**\n * Determine an entry summary from the given content. Fields other than `title` should be defined\n * with the `identifier_field` collection option as per the Netlify/Decap CMS document. We also look\n * for the `name` and `label` properties as well as a header in the Markdown `body` as a fallback.\n * @param {FlattenedEntryContent | RawEntryContent} content Content.\n * @param {object} options Options.\n * @param {string} [options.identifierField] Field name to identify the title.\n * @param {boolean} [options.useBody] Whether to fall back to a header in the Markdown `body`.\n * @returns {string} Entry summary. Can be an empty string if it cannot be determined.\n * @see https://decapcms.org/docs/configuration-options/#identifier_field\n */\nexport const getEntrySummaryFromContent = (\n  content,\n  { identifierField = 'title', useBody = true } = {},\n) => {\n  const idField = [identifierField, 'title', 'name', 'label'].find(\n    (fieldName) => typeof content[fieldName] === 'string' && !!content[fieldName].trim(),\n  );\n\n  if (idField) {\n    return content[idField].trim();\n  }\n\n  // Find a header in Markdown, excluding an anchor suffix\n  // https://vitepress.dev/guide/markdown#custom-anchors\n  if (useBody && typeof content.body === 'string') {\n    return content.body.match(/^#+\\s+(?<header>.+?)(?:\\s+\\{#.+?\\})?\\s*$/m)?.groups?.header ?? '';\n  }\n\n  return '';\n};\n\n/**\n * Replacer subroutine.\n * @param {string} tag Field name or one of special tags.\n * @param {ReplacerSubContext} context Context.\n * @returns {string | Date | undefined} Replaced value or `undefined` if the tag is not recognized.\n */\nexport const replaceSub = (tag, context) => {\n  const { slug, entryPath, basePath, 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(/\\s*\\|\\s*/);\n  const keyPath = tag.replace(/^fields\\./, '');\n  const getFieldArgs = { collectionName, valueMap, keyPath };\n  let value = replaceSub(tag, replaceSubContext);\n\n  if (value === undefined) {\n    // If the `date` transformation is defined, e.g. `{{publish_date | date('YYYY-MM')}}`, use the\n    // raw field value from the entry content. Otherwise, use the field display value. This is to\n    // avoid applying the transformation to the display value, which leads to unexpected results.\n    // Also use raw value for ternary transformations to preserve boolean truthiness.\n    value = transformations.some(\n      (t) => DATE_TRANSFORMATION_REGEX.test(t) || TERNARY_TRANSFORMATION_REGEX.test(t),\n    )\n      ? valueMap[keyPath]\n      : getFieldDisplayValue({ ...getFieldArgs, locale: defaultLocale });\n  }\n\n  if (value === undefined) {\n    return '';\n  }\n\n  if (value instanceof Date && !transformations.length) {\n    const { year, month, day } = getDateTimeParts({ date: value });\n\n    return `${year}-${month}-${day}`;\n  }\n\n  if (transformations.length) {\n    value = applyTransformations({\n      fieldConfig: getField({ ...getFieldArgs }),\n      value,\n      transformations,\n    });\n  }\n\n  return String(value);\n};\n\n/**\n * Get the given entry’s summary that can be displayed in the entry list and other places. Format it\n * with the summary template if necessary, or simply use the `title` or similar field in the entry.\n * @param {InternalCollection} collection Entry’s collection.\n * @param {Entry} entry Entry.\n * @param {object} [options] Options.\n * @param {InternalLocaleCode} [options.locale] Target locale. The default locale is used if\n * omitted.\n * @param {boolean} [options.useTemplate] Whether to use the collection’s `summary` template if\n * available.\n * @param {boolean} [options.allowMarkdown] Whether to allow Markdown and return HTML string.\n * @returns {string} Formatted entry summary.\n * @see https://decapcms.org/docs/configuration-options/#summary\n * @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(/{{(.+?)}}/g, (_match, placeholder) =>\n      replace(placeholder, replaceContext),\n    ),\n    { allowMarkdown },\n  );\n};\n","import { unique } from '@sveltia/utils/array';\nimport { compare, escapeRegExp } from '@sveltia/utils/string';\n\nimport { getCollection } from '$lib/services/contents/collection';\nimport { getEntriesByCollection } from '$lib/services/contents/collection/entries';\nimport { isCollectionIndexFile } from '$lib/services/contents/collection/index-file';\nimport { getField, getFieldDisplayValue } from '$lib/services/contents/entry/fields';\nimport { getEntrySummaryFromContent } from '$lib/services/contents/entry/summary';\n\n/**\n * @import {\n * Entry,\n * FlattenedEntryContent,\n * GetFieldArgs,\n * InternalCollection,\n * InternalLocaleCode,\n * } from '$lib/types/private';\n * @import {\n * Field,\n * FieldKeyPath,\n * ListField,\n * RelationField,\n * RelationFieldFilterOptions,\n * } from '$lib/types/public';\n */\n\n/**\n * @typedef {{ label: string, value: any, searchValue: string }} RelationOption\n */\n\n/**\n * @typedef {object} ReplacementContext\n * @property {string} slug The slug of the entry.\n * @property {InternalLocaleCode} locale The current locale.\n * @property {(keyPath: FieldKeyPath, _locale?: InternalLocaleCode) => string} getDisplayValue\n * Function to get the display value of a field.\n */\n\n/**\n * @typedef {object} FallbackContext\n * @property {FlattenedEntryContent} content Content of the entry.\n * @property {Record<InternalLocaleCode, FlattenedEntryContent>} locales Locales of the entry.\n * @property {InternalLocaleCode} defaultLocale Default locale of the entry.\n * @property {FieldKeyPath} identifierField Identifier field for the entry.\n */\n\n/**\n * @typedef {object} TemplateStrings\n * @property {string} _valueField Normalized value field template.\n * @property {string} _displayField Normalized display field template.\n * @property {string} _searchField Normalized search field template.\n * @property {string[]} allFieldNames All field names extracted from templates.\n * @property {boolean} hasListFields Whether any field names include a list wildcard (*).\n */\n\n/**\n * @type {Map<string, RelationOption[]>}\n */\nexport const optionCacheMap = new Map();\n\n/**\n * `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 */\nconst 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\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 (/{{.+?}}/.test(fieldName)) {\n    return fieldName;\n  }\n\n  if (fieldName === 'slug') {\n    // Avoid confusion with `{{slug}}`, which is the entry slug, not the `slug` field\n    return '{{fields.slug}}';\n  }\n\n  return `{{${fieldName}}}`;\n};\n\n/**\n * 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\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(/{{(.+?)}}/g)].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\n/**\n * Filter entries based on file name and entry filters.\n * @internal\n * @param {Entry[]} refEntries Reference entries.\n * @param {InternalLocaleCode} locale Current locale.\n * @param {string} [fileName] File name to filter by.\n * @param {RelationFieldFilterOptions[]} [entryFilters] Entry filters to apply.\n * @returns {{ refEntry: Entry, content: FlattenedEntryContent }[]} Filtered entries with content.\n */\nexport const filterAndPrepareEntries = (\n  refEntries,\n  locale,\n  fileName = undefined,\n  entryFilters = [],\n) =>\n  refEntries\n    .filter((refEntry) => !fileName || fileName === refEntry.slug)\n    .map((refEntry) => {\n      // Fall back to the default locale if needed\n      const { content } = refEntry.locales[locale] ?? refEntry.locales._default ?? {};\n\n      return {\n        refEntry,\n        hasContent: !!content && Object.keys(content).length > 0,\n        content: content ?? {},\n      };\n    })\n    .filter(\n      ({ hasContent, content }) =>\n        hasContent && entryFilters.every(({ field, values }) => values.includes(content[field])),\n    );\n\n/**\n * Create a single relation option for non-list fields.\n * @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\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  let regex = singleSubfieldRegexCache.get(baseFieldName);\n\n  if (!regex) {\n    regex = new RegExp(`^${escapeRegExp(baseFieldName)}.\\\\d+$`);\n    singleSubfieldRegexCache.set(baseFieldName, regex);\n  }\n\n  const items = Object.entries(content)\n    .filter(([k]) => regex.test(k))\n    .map(([k, v]) => {\n      const indexMatch = k.match(/\\.(\\d+)$/);\n\n      return { index: parseInt(indexMatch?.[1] || '0', 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  let indexRegex = complexListIndexRegexCache.get(cacheKey);\n\n  if (!indexRegex) {\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    indexRegex = new RegExp(`^${escapedBase}.([0-9]+).${escapedSub}$`);\n    complexListIndexRegexCache.set(cacheKey, indexRegex);\n  }\n\n  const listValues = Object.entries(content)\n    .filter(([k]) => indexRegex.test(k))\n    .map(([k, v]) => {\n      const indexMatch = k.match(indexRegex);\n\n      return { index: parseInt(indexMatch?.[1] || '0', 10), value: v };\n    })\n    .sort((a, b) => a.index - b.index);\n\n  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\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/**\n * Get options for a Relation field.\n * @param {InternalLocaleCode} locale Current locale.\n * @param {RelationField} fieldConfig Field configuration.\n * @param {Entry[]} refEntries Referenced entries.\n * @returns {RelationOption[]} Options.\n */\nexport const getOptions = (locale, fieldConfig, refEntries) => {\n  // 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).\n  const cacheKey = `${locale}|${getObjectId(fieldConfig)}|${getObjectId(refEntries)}`;\n  const cache = optionCacheMap.get(cacheKey);\n\n  if (cache) {\n    return cache;\n  }\n\n  const { collection: collectionName, file: fileName, filters } = fieldConfig;\n  const collection = getCollection(collectionName);\n\n  if (!collection) {\n    optionCacheMap.set(cacheKey, []);\n    return [];\n  }\n\n  const {\n    _type,\n    _i18n: { defaultLocale },\n  } = collection;\n\n  const { identifier_field: identifierField = 'title' } = _type === 'entry' ? collection : {};\n  const entryFilters = filters ?? [];\n  const templates = prepareFieldTemplates(fieldConfig, identifierField);\n  const { allFieldNames, hasListFields } = templates;\n  const filteredEntries = filterAndPrepareEntries(refEntries, locale, fileName, entryFilters);\n\n  const options = filteredEntries\n    .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  /**\n   * Get the label by value.\n   * @param {any} _value Stored value.\n   * @returns {string} Label.\n   */\n  const getLabel = (_value) => refOptions.find((o) => o.value === _value)?.label || _value;\n\n  if (multiple) {\n    const values = Object.entries(valueMap)\n      .filter(([key]) => key.match(`^${escapeRegExp(keyPath)}\\\\.\\\\d+$`))\n      .map(([, _value]) => _value);\n\n    return values.map(getLabel);\n  }\n\n  return getLabel(valueMap[keyPath]);\n};\n","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/**\n * Encode double quotes as HTML entities to prevent issues in HTML rendering.\n * @param {string} str String to escape.\n * @returns {string} Escaped string.\n */\nexport const encodeQuotes = (str) => str.replace(/\"/g, '&quot;');\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 { get } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport {\n  encodeQuotes,\n  replaceQuotes,\n} 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';\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 (\n      `<img src=\"${encodeQuotes(src)}\" alt=\"${encodeQuotes(alt)}\" ` +\n      `title=\"${encodeQuotes(title)}\">`\n    );\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\n    const img =\n      `<img src=\"${encodeQuotes(src)}\" alt=\"${encodeQuotes(alt)}\" ` +\n      `title=\"${encodeQuotes(title)}\">`;\n\n    // Return `<img>` even if `src` is empty to make sure the `tagName` below works\n    return link ? `<a href=\"${encodeQuotes(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: get(_)('editor_components.image'),\n    fields: [\n      { name: 'src', label: get(_)('editor_components.src'), widget: 'image' },\n      { name: 'alt', label: get(_)('editor_components.alt'), required: false },\n      { name: 'title', label: get(_)('editor_components.title'), required: false },\n    ],\n  };\n\n  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: get(_)('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: get(_)('editor_components.image'),\n    fields: [\n      { name: 'src', label: get(_)('editor_components.src'), widget: 'image' },\n      { name: 'alt', label: get(_)('editor_components.alt'), required: false },\n      { name: 'title', label: get(_)('editor_components.title'), required: false },\n    ],\n  };\n\n  /** @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: get(_)('editor_components.link'), required: false },\n      ],\n    },\n  };\n\n  return definitions[name];\n};\n","import { isObjectArray } from '@sveltia/utils/array';\n\n/**\n * @import { FlattenedEntryContent } from '$lib/types/private';\n * @import { FieldKeyPath, SelectField } from '$lib/types/public';\n */\n\n/**\n * @type {Map<string, any | any[]>}\n */\nconst labelCacheMap = new Map();\n\n/**\n * Get the display value for an option.\n * @param {object} args Arguments.\n * @param {SelectField} args.fieldConfig Field configuration.\n * @param {FlattenedEntryContent} args.valueMap Object holding current entry values.\n * @param {FieldKeyPath} args.keyPath Field key path, e.g. `author.name`.\n * @returns {any | any[]} Resolved field value(s).\n */\nexport const getOptionLabel = ({ fieldConfig, valueMap, keyPath }) => {\n  const { 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) && /^\\d+$/.test(key.slice(prefix.length)))\n      .map(([, _value]) => _value);\n  }\n\n  const cacheKey = multiple\n    ? `${keyPath}|${JSON.stringify(options)}|${JSON.stringify(rawValues)}`\n    : `${keyPath}|${JSON.stringify(options)}|${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 { getCollectionFile } from '$lib/services/contents/collection/files';\nimport { getIndexFile, isCollectionIndexFile } from '$lib/services/contents/collection/index-file';\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';\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\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(/^(.*?)<([^>]+)>(.*)$/);\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 * 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 numeric or a wildcard\n  // (to resolve variable-type list/object fields). For all other paths — the vast majority of calls\n  // — it is irrelevant and we can build a much cheaper string cache key that avoids serializing the\n  // full entry content.\n  const hasIndexOrWildcard = /(?:^|\\.)(\\d+|\\*)(?:\\.|$)/.test(keyPath);\n\n  const cacheKey = hasIndexOrWildcard\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 { cleanKey, typeName } = parseExplicitType(key);\n      const { widget: fieldType = 'text' } = field;\n\n      // Update explicit type if provided in this segment\n      if (typeName) {\n        currentExplicitType = typeName;\n      }\n\n      const isNumericKey = /^\\d+$/.test(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        if (!isFieldMultiple(field)) {\n          field = undefined;\n        }\n\n        return;\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      // Handle all other field types (List, Object, etc.)\n      if (subField) {\n        const subFieldName = isNumericKey || isWildcardKey ? keyPathArray[index + 1] : undefined;\n\n        // It’s possible to get a single-subfield List field with or without a subfield name (e.g.\n        // `image.0` or `image.0.src`), but when a subfield name is specified, check if it’s valid.\n        // The field could be nested (object inside object), so check recursively.\n        if (\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          field = subField;\n        } else {\n          field = undefined;\n        }\n      } else 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        // field remains unchanged.\n      } else if (subFields && !isNumericKey && cleanKey !== '') {\n        field = subFields.find(({ name }) => name === cleanKey);\n      } else if (types && (isNumericKey || isWildcardKey)) {\n        // List field type variable types - check for explicit type first, then fall back to\n        // valueMap\n        const resolvedType =\n          currentExplicitType ??\n          valueMap[[keyPathArray.slice(0, index).join('.'), cleanKey, typeKey].join('.')];\n\n        // @ts-ignore\n        field = types.find(({ name }) => name === resolvedType);\n\n        // Clear explicit type after using it\n        if (isWildcardKey) {\n          currentExplicitType = undefined;\n        }\n      } else 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          currentExplicitType ??\n          valueMap[[keyPathArray.slice(0, index).join('.'), typeKey].join('.')];\n\n        field = types\n          .find(({ name }) => name === resolvedType)\n          ?.fields?.find(({ name }) => name === cleanKey);\n\n        // Clear explicit type after using it\n        if (currentExplicitType) {\n          currentExplicitType = undefined;\n        }\n      } else {\n        // If we reach here, the list field is malformed (no `field`, `fields`, or `types`) and\n        // we’re trying to access a nested path, so return undefined\n        field = undefined;\n      }\n    }\n  });\n\n  // 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      let listItemRegex = listItemDisplayRegexCache.get(keyPath);\n\n      if (!listItemRegex) {\n        listItemRegex = new RegExp(`^${escapeRegExp(keyPath)}${String.raw`\\.\\d+$`}`);\n        listItemDisplayRegexCache.set(keyPath, listItemRegex);\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 });\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","/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n *    may be used to endorse or promote products derived from this software without\n *    specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nfunction getLineColFromPtr(string, ptr) {\n    let lines = string.slice(0, ptr).split(/\\r\\n|\\n|\\r/g);\n    return [lines.length, lines.pop().length + 1];\n}\nfunction makeCodeBlock(string, line, column) {\n    let lines = string.split(/\\r\\n|\\n|\\r/g);\n    let codeblock = '';\n    let numberLen = (Math.log10(line + 1) | 0) + 1;\n    for (let i = line - 1; i <= line + 1; i++) {\n        let l = lines[i - 1];\n        if (!l)\n            continue;\n        codeblock += i.toString().padEnd(numberLen, ' ');\n        codeblock += ':  ';\n        codeblock += l;\n        codeblock += '\\n';\n        if (i === line) {\n            codeblock += ' '.repeat(numberLen + column + 2);\n            codeblock += '^\\n';\n        }\n    }\n    return codeblock;\n}\nexport class TomlError extends Error {\n    line;\n    column;\n    codeblock;\n    constructor(message, options) {\n        const [line, column] = getLineColFromPtr(options.toml, options.ptr);\n        const codeblock = makeCodeBlock(options.toml, line, column);\n        super(`Invalid TOML document: ${message}\\n\\n${codeblock}`, options);\n        this.line = line;\n        this.column = column;\n        this.codeblock = codeblock;\n    }\n}\n","/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n *    may be used to endorse or promote products derived from this software without\n *    specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nimport { TomlError } from './error.js';\nfunction isEscaped(str, ptr) {\n    let i = 0;\n    while (str[ptr - ++i] === '\\\\')\n        ;\n    return --i && (i % 2);\n}\nexport function indexOfNewline(str, start = 0, end = str.length) {\n    let idx = str.indexOf('\\n', start);\n    if (str[idx - 1] === '\\r')\n        idx--;\n    return idx <= end ? idx : -1;\n}\nexport function skipComment(str, ptr) {\n    for (let i = ptr; i < str.length; i++) {\n        let c = str[i];\n        if (c === '\\n')\n            return i;\n        if (c === '\\r' && str[i + 1] === '\\n')\n            return i + 1;\n        if ((c < '\\x20' && c !== '\\t') || c === '\\x7f') {\n            throw new TomlError('control characters are not allowed in comments', {\n                toml: str,\n                ptr: ptr,\n            });\n        }\n    }\n    return str.length;\n}\nexport function skipVoid(str, ptr, banNewLines, banComments) {\n    let c;\n    while ((c = str[ptr]) === ' ' || c === '\\t' || (!banNewLines && (c === '\\n' || c === '\\r' && str[ptr + 1] === '\\n')))\n        ptr++;\n    return banComments || c !== '#'\n        ? ptr\n        : skipVoid(str, skipComment(str, ptr), banNewLines);\n}\nexport function skipUntil(str, ptr, sep, end, banNewLines = false) {\n    if (!end) {\n        ptr = indexOfNewline(str, ptr);\n        return ptr < 0 ? str.length : ptr;\n    }\n    for (let i = ptr; i < str.length; i++) {\n        let c = str[i];\n        if (c === '#') {\n            i = indexOfNewline(str, i);\n        }\n        else if (c === sep) {\n            return i + 1;\n        }\n        else if (c === end || (banNewLines && (c === '\\n' || (c === '\\r' && str[i + 1] === '\\n')))) {\n            return i;\n        }\n    }\n    throw new TomlError('cannot find end of structure', {\n        toml: str,\n        ptr: ptr\n    });\n}\nexport function getStringEnd(str, seek) {\n    let first = str[seek];\n    let target = first === str[seek + 1] && str[seek + 1] === str[seek + 2]\n        ? str.slice(seek, seek + 3)\n        : first;\n    seek += target.length - 1;\n    do\n        seek = str.indexOf(target, ++seek);\n    while (seek > -1 && first !== \"'\" && isEscaped(str, seek));\n    if (seek > -1) {\n        seek += target.length;\n        if (target.length > 1) {\n            if (str[seek] === first)\n                seek++;\n            if (str[seek] === first)\n                seek++;\n        }\n    }\n    return seek;\n}\n","/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n *    may be used to endorse or promote products derived from this software without\n *    specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nlet DATE_TIME_RE = /^(\\d{4}-\\d{2}-\\d{2})?[T ]?(?:(\\d{2}):\\d{2}(?::\\d{2}(?:\\.\\d+)?)?)?(Z|[-+]\\d{2}:\\d{2})?$/i;\nexport class TomlDate extends Date {\n    #hasDate = false;\n    #hasTime = false;\n    #offset = null;\n    constructor(date) {\n        let hasDate = true;\n        let hasTime = true;\n        let offset = 'Z';\n        if (typeof date === 'string') {\n            let match = date.match(DATE_TIME_RE);\n            if (match) {\n                if (!match[1]) {\n                    hasDate = false;\n                    date = `0000-01-01T${date}`;\n                }\n                hasTime = !!match[2];\n                // Make sure to use T instead of a space. Breaks in case of extreme values otherwise.\n                hasTime && date[10] === ' ' && (date = date.replace(' ', 'T'));\n                // Do not allow rollover hours.\n                if (match[2] && +match[2] > 23) {\n                    date = '';\n                }\n                else {\n                    offset = match[3] || null;\n                    date = date.toUpperCase();\n                    if (!offset && hasTime)\n                        date += 'Z';\n                }\n            }\n            else {\n                date = '';\n            }\n        }\n        super(date);\n        if (!isNaN(this.getTime())) {\n            this.#hasDate = hasDate;\n            this.#hasTime = hasTime;\n            this.#offset = offset;\n        }\n    }\n    isDateTime() {\n        return this.#hasDate && this.#hasTime;\n    }\n    isLocal() {\n        return !this.#hasDate || !this.#hasTime || !this.#offset;\n    }\n    isDate() {\n        return this.#hasDate && !this.#hasTime;\n    }\n    isTime() {\n        return this.#hasTime && !this.#hasDate;\n    }\n    isValid() {\n        return this.#hasDate || this.#hasTime;\n    }\n    toISOString() {\n        let iso = super.toISOString();\n        // Local Date\n        if (this.isDate())\n            return iso.slice(0, 10);\n        // Local Time\n        if (this.isTime())\n            return iso.slice(11, 23);\n        // Local DateTime\n        if (this.#offset === null)\n            return iso.slice(0, -1);\n        // Offset DateTime\n        if (this.#offset === 'Z')\n            return iso;\n        // This part is quite annoying: JS strips the original timezone from the ISO string representation\n        // Instead of using a \"modified\" date and \"Z\", we restore the representation \"as authored\"\n        let offset = (+(this.#offset.slice(1, 3)) * 60) + +(this.#offset.slice(4, 6));\n        offset = this.#offset[0] === '-' ? offset : -offset;\n        let offsetDate = new Date(this.getTime() - (offset * 60e3));\n        return offsetDate.toISOString().slice(0, -1) + this.#offset;\n    }\n    static wrapAsOffsetDateTime(jsDate, offset = 'Z') {\n        let date = new TomlDate(jsDate);\n        date.#offset = offset;\n        return date;\n    }\n    static wrapAsLocalDateTime(jsDate) {\n        let date = new TomlDate(jsDate);\n        date.#offset = null;\n        return date;\n    }\n    static wrapAsLocalDate(jsDate) {\n        let date = new TomlDate(jsDate);\n        date.#hasTime = false;\n        date.#offset = null;\n        return date;\n    }\n    static wrapAsLocalTime(jsDate) {\n        let date = new TomlDate(jsDate);\n        date.#hasDate = false;\n        date.#offset = null;\n        return date;\n    }\n}\n","/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n *    may be used to endorse or promote products derived from this software without\n *    specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nimport { skipVoid } from './util.js';\nimport { TomlDate } from './date.js';\nimport { TomlError } from './error.js';\nlet INT_REGEX = /^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\\d(_?\\d)*))$/;\nlet FLOAT_REGEX = /^[+-]?\\d(_?\\d)*(\\.\\d(_?\\d)*)?([eE][+-]?\\d(_?\\d)*)?$/;\nlet LEADING_ZERO = /^[+-]?0[0-9_]/;\nlet ESCAPE_REGEX = /^[0-9a-f]{2,8}$/i;\nlet ESC_MAP = {\n    b: '\\b',\n    t: '\\t',\n    n: '\\n',\n    f: '\\f',\n    r: '\\r',\n    e: '\\x1b',\n    '\"': '\"',\n    '\\\\': '\\\\',\n};\nexport function parseString(str, ptr = 0, endPtr = str.length) {\n    let isLiteral = str[ptr] === '\\'';\n    let isMultiline = str[ptr++] === str[ptr] && str[ptr] === str[ptr + 1];\n    if (isMultiline) {\n        endPtr -= 2;\n        if (str[ptr += 2] === '\\r')\n            ptr++;\n        if (str[ptr] === '\\n')\n            ptr++;\n    }\n    let tmp = 0;\n    let isEscape;\n    let parsed = '';\n    let sliceStart = ptr;\n    while (ptr < endPtr - 1) {\n        let c = str[ptr++];\n        if (c === '\\n' || (c === '\\r' && str[ptr] === '\\n')) {\n            if (!isMultiline) {\n                throw new TomlError('newlines are not allowed in strings', {\n                    toml: str,\n                    ptr: ptr - 1,\n                });\n            }\n        }\n        else if ((c < '\\x20' && c !== '\\t') || c === '\\x7f') {\n            throw new TomlError('control characters are not allowed in strings', {\n                toml: str,\n                ptr: ptr - 1,\n            });\n        }\n        if (isEscape) {\n            isEscape = false;\n            if (c === 'x' || c === 'u' || c === 'U') {\n                // Unicode escape\n                let code = str.slice(ptr, (ptr += (c === 'x' ? 2 : c === 'u' ? 4 : 8)));\n                if (!ESCAPE_REGEX.test(code)) {\n                    throw new TomlError('invalid unicode escape', {\n                        toml: str,\n                        ptr: tmp,\n                    });\n                }\n                try {\n                    parsed += String.fromCodePoint(parseInt(code, 16));\n                }\n                catch {\n                    throw new TomlError('invalid unicode escape', {\n                        toml: str,\n                        ptr: tmp,\n                    });\n                }\n            }\n            else if (isMultiline && (c === '\\n' || c === ' ' || c === '\\t' || c === '\\r')) {\n                // Multiline escape\n                ptr = skipVoid(str, ptr - 1, true);\n                if (str[ptr] !== '\\n' && str[ptr] !== '\\r') {\n                    throw new TomlError('invalid escape: only line-ending whitespace may be escaped', {\n                        toml: str,\n                        ptr: tmp,\n                    });\n                }\n                ptr = skipVoid(str, ptr);\n            }\n            else if (c in ESC_MAP) {\n                // Classic escape\n                parsed += ESC_MAP[c];\n            }\n            else {\n                throw new TomlError('unrecognized escape sequence', {\n                    toml: str,\n                    ptr: tmp,\n                });\n            }\n            sliceStart = ptr;\n        }\n        else if (!isLiteral && c === '\\\\') {\n            tmp = ptr - 1;\n            isEscape = true;\n            parsed += str.slice(sliceStart, tmp);\n        }\n    }\n    return parsed + str.slice(sliceStart, endPtr - 1);\n}\nexport function parseValue(value, toml, ptr, integersAsBigInt) {\n    // Constant values\n    if (value === 'true')\n        return true;\n    if (value === 'false')\n        return false;\n    if (value === '-inf')\n        return -Infinity;\n    if (value === 'inf' || value === '+inf')\n        return Infinity;\n    if (value === 'nan' || value === '+nan' || value === '-nan')\n        return NaN;\n    // Avoid FP representation of -0\n    if (value === '-0')\n        return integersAsBigInt ? 0n : 0;\n    // Numbers\n    let isInt = INT_REGEX.test(value);\n    if (isInt || FLOAT_REGEX.test(value)) {\n        if (LEADING_ZERO.test(value)) {\n            throw new TomlError('leading zeroes are not allowed', {\n                toml: toml,\n                ptr: ptr,\n            });\n        }\n        value = value.replace(/_/g, '');\n        let numeric = +value;\n        if (isNaN(numeric)) {\n            throw new TomlError('invalid number', {\n                toml: toml,\n                ptr: ptr,\n            });\n        }\n        if (isInt) {\n            if ((isInt = !Number.isSafeInteger(numeric)) && !integersAsBigInt) {\n                throw new TomlError('integer value cannot be represented losslessly', {\n                    toml: toml,\n                    ptr: ptr,\n                });\n            }\n            if (isInt || integersAsBigInt === true)\n                numeric = BigInt(value);\n        }\n        return numeric;\n    }\n    const date = new TomlDate(value);\n    if (!date.isValid()) {\n        throw new TomlError('invalid value', {\n            toml: toml,\n            ptr: ptr,\n        });\n    }\n    return date;\n}\n","/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n *    may be used to endorse or promote products derived from this software without\n *    specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nimport { parseString, parseValue } from './primitive.js';\nimport { parseArray, parseInlineTable } from './struct.js';\nimport { skipVoid, skipUntil, skipComment, getStringEnd } 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    let endPtr;\n    if (c === '\"' || c === \"'\") {\n        endPtr = getStringEnd(str, ptr);\n        let parsed = parseString(str, ptr, endPtr);\n        if (end) {\n            endPtr = skipVoid(str, endPtr);\n            if (str[endPtr] && str[endPtr] !== ',' && str[endPtr] !== end && str[endPtr] !== '\\n' && str[endPtr] !== '\\r') {\n                throw new TomlError('unexpected character encountered', {\n                    toml: str,\n                    ptr: endPtr,\n                });\n            }\n            endPtr += (+(str[endPtr] === ','));\n        }\n        return [parsed, endPtr];\n    }\n    endPtr = skipUntil(str, ptr, ',', end);\n    let slice = sliceAndTrimEndOf(str, ptr, endPtr - (+(str[endPtr - 1] === ',')));\n    if (!slice[0]) {\n        throw new TomlError('incomplete key-value declaration: no value specified', {\n            toml: str,\n            ptr: ptr\n        });\n    }\n    if (end && slice[1] > -1) {\n        endPtr = skipVoid(str, ptr + slice[1]);\n        endPtr += +(str[endPtr] === ',');\n    }\n    return [\n        parseValue(slice[0], str, ptr, integersAsBigInt),\n        endPtr,\n    ];\n}\n","/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n *    may be used to endorse or promote products derived from this software without\n *    specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nimport { parseString } from './primitive.js';\nimport { extractValue } from './extract.js';\nimport { getStringEnd, indexOfNewline, skipComment, skipVoid } from './util.js';\nimport { TomlError } from './error.js';\nlet KEY_PART_RE = /^[a-zA-Z0-9-_]+[ \\t]*$/;\nexport function parseKey(str, ptr, end = '=') {\n    let dot = ptr - 1;\n    let parsed = [];\n    let endPtr = str.indexOf(end, ptr);\n    if (endPtr < 0) {\n        throw new TomlError('incomplete key-value: cannot find end of key', {\n            toml: str,\n            ptr: ptr,\n        });\n    }\n    do {\n        let c = str[ptr = ++dot];\n        // If it's whitespace, ignore\n        if (c !== ' ' && c !== '\\t') {\n            // If it's a string\n            if (c === '\"' || c === '\\'') {\n                if (c === str[ptr + 1] && c === str[ptr + 2]) {\n                    throw new TomlError('multiline strings are not allowed in keys', {\n                        toml: str,\n                        ptr: ptr,\n                    });\n                }\n                let eos = getStringEnd(str, ptr);\n                if (eos < 0) {\n                    throw new TomlError('unfinished string encountered', {\n                        toml: str,\n                        ptr: ptr,\n                    });\n                }\n                dot = str.indexOf('.', eos);\n                let strEnd = str.slice(eos, dot < 0 || dot > endPtr ? endPtr : dot);\n                let newLine = indexOfNewline(strEnd);\n                if (newLine > -1) {\n                    throw new TomlError('newlines are not allowed in keys', {\n                        toml: str,\n                        ptr: ptr + dot + newLine,\n                    });\n                }\n                if (strEnd.trimStart()) {\n                    throw new TomlError('found extra tokens after the string part', {\n                        toml: str,\n                        ptr: eos,\n                    });\n                }\n                if (endPtr < eos) {\n                    endPtr = str.indexOf(end, eos);\n                    if (endPtr < 0) {\n                        throw new TomlError('incomplete key-value: cannot find end of key', {\n                            toml: str,\n                            ptr: ptr,\n                        });\n                    }\n                }\n                parsed.push(parseString(str, ptr, eos));\n            }\n            else {\n                // Normal raw key part consumption and validation\n                dot = str.indexOf('.', ptr);\n                let part = str.slice(ptr, dot < 0 || dot > endPtr ? endPtr : dot);\n                if (!KEY_PART_RE.test(part)) {\n                    throw new TomlError('only letter, numbers, dashes and underscores are allowed in keys', {\n                        toml: str,\n                        ptr: ptr,\n                    });\n                }\n                parsed.push(part.trimEnd());\n            }\n        }\n        // Until there's no more dot\n    } while (dot + 1 && dot < endPtr);\n    return [parsed, skipVoid(str, endPtr + 1, true, true)];\n}\nexport function parseInlineTable(str, ptr, depth, integersAsBigInt) {\n    let res = {};\n    let seen = new Set();\n    let c;\n    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","/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n *    may be used to endorse or promote products derived from this software without\n *    specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nimport { parseKey } from './struct.js';\nimport { extractValue } from './extract.js';\nimport { skipVoid } from './util.js';\nimport { TomlError } from './error.js';\nfunction peekTable(key, table, meta, type) {\n    let t = table;\n    let m = meta;\n    let k;\n    let hasOwn = false;\n    let state;\n    for (let i = 0; i < key.length; i++) {\n        if (i) {\n            t = hasOwn ? t[k] : (t[k] = {});\n            m = (state = m[k]).c;\n            if (type === 0 /* Type.DOTTED */ && (state.t === 1 /* Type.EXPLICIT */ || state.t === 2 /* Type.ARRAY */)) {\n                return null;\n            }\n            if (state.t === 2 /* Type.ARRAY */) {\n                let l = t.length - 1;\n                t = t[l];\n                m = m[l].c;\n            }\n        }\n        k = key[i];\n        if ((hasOwn = Object.hasOwn(t, k)) && m[k]?.t === 0 /* Type.DOTTED */ && m[k]?.d) {\n            return null;\n        }\n        if (!hasOwn) {\n            if (k === '__proto__') {\n                Object.defineProperty(t, k, { enumerable: true, configurable: true, writable: true });\n                Object.defineProperty(m, k, { enumerable: true, configurable: true, writable: true });\n            }\n            m[k] = {\n                t: i < key.length - 1 && type === 2 /* Type.ARRAY */\n                    ? 3 /* Type.ARRAY_DOTTED */\n                    : type,\n                d: false,\n                i: 0,\n                c: {},\n            };\n        }\n    }\n    state = m[k];\n    if (state.t !== type && !(type === 1 /* Type.EXPLICIT */ && state.t === 3 /* Type.ARRAY_DOTTED */)) {\n        // Bad key type!\n        return null;\n    }\n    if (type === 2 /* Type.ARRAY */) {\n        if (!state.d) {\n            state.d = true;\n            t[k] = [];\n        }\n        t[k].push(t = {});\n        state.c[state.i++] = (state = { t: 1 /* Type.EXPLICIT */, d: false, i: 0, c: {} });\n    }\n    if (state.d) {\n        // Redefining a table!\n        return null;\n    }\n    state.d = true;\n    if (type === 1 /* Type.EXPLICIT */) {\n        t = hasOwn ? t[k] : (t[k] = {});\n    }\n    else if (type === 0 /* Type.DOTTED */ && hasOwn) {\n        return null;\n    }\n    return [k, t, state.c];\n}\nexport function parse(toml, { maxDepth = 1000, integersAsBigInt } = {}) {\n    let res = {};\n    let meta = {};\n    let tbl = res;\n    let m = meta;\n    for (let ptr = skipVoid(toml, 0); ptr < toml.length;) {\n        if (toml[ptr] === '[') {\n            let isTableArray = toml[++ptr] === '[';\n            let k = parseKey(toml, ptr += +isTableArray, ']');\n            if (isTableArray) {\n                if (toml[k[1] - 1] !== ']') {\n                    throw new TomlError('expected end of table declaration', {\n                        toml: toml,\n                        ptr: k[1] - 1,\n                    });\n                }\n                k[1]++;\n            }\n            let p = peekTable(k[0], res, meta, isTableArray ? 2 /* Type.ARRAY */ : 1 /* Type.EXPLICIT */);\n            if (!p) {\n                throw new TomlError('trying to redefine an already defined table or value', {\n                    toml: toml,\n                    ptr: ptr,\n                });\n            }\n            m = p[2];\n            tbl = p[1];\n            ptr = k[1];\n        }\n        else {\n            let k = parseKey(toml, ptr);\n            let p = peekTable(k[0], tbl, m, 0 /* Type.DOTTED */);\n            if (!p) {\n                throw new TomlError('trying to redefine an already defined table or value', {\n                    toml: toml,\n                    ptr: ptr,\n                });\n            }\n            let v = extractValue(toml, k[1], void 0, maxDepth, integersAsBigInt);\n            p[1][p[0]] = v[0];\n            ptr = v[1];\n        }\n        ptr = skipVoid(toml, ptr, true);\n        if (toml[ptr] && toml[ptr] !== '\\n' && toml[ptr] !== '\\r') {\n            throw new TomlError('each key-value declaration must be followed by an end-of-line', {\n                toml: toml,\n                ptr: ptr\n            });\n        }\n        ptr = skipVoid(toml, ptr);\n    }\n    return res;\n}\n","/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n *    list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n *    this list of conditions and the following disclaimer in the\n *    documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n *    may be used to endorse or promote products derived from this software without\n *    specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nlet BARE_KEY = /^[a-z0-9-_]+$/i;\nfunction extendedTypeOf(obj) {\n    let type = typeof obj;\n    if (type === 'object') {\n        if (Array.isArray(obj))\n            return 'array';\n        if (obj instanceof Date)\n            return 'date';\n    }\n    return type;\n}\nfunction isArrayOfTables(obj) {\n    for (let i = 0; i < obj.length; i++) {\n        if (extendedTypeOf(obj[i]) !== 'object')\n            return false;\n    }\n    return obj.length != 0;\n}\nfunction formatString(s) {\n    return JSON.stringify(s).replace(/\\x7f/g, '\\\\u007f');\n}\nfunction stringifyValue(val, type, depth, numberAsFloat) {\n    if (depth === 0) {\n        throw new Error('Could not stringify the object: maximum object depth exceeded');\n    }\n    if (type === 'number') {\n        if (isNaN(val))\n            return 'nan';\n        if (val === Infinity)\n            return 'inf';\n        if (val === -Infinity)\n            return '-inf';\n        if (numberAsFloat && Number.isInteger(val))\n            return val.toFixed(1);\n        return val.toString();\n    }\n    if (type === 'bigint' || type === 'boolean') {\n        return val.toString();\n    }\n    if (type === 'string') {\n        return formatString(val);\n    }\n    if (type === 'date') {\n        if (isNaN(val.getTime())) {\n            throw new TypeError('cannot serialize invalid date');\n        }\n        return val.toISOString();\n    }\n    if (type === 'object') {\n        return stringifyInlineTable(val, depth, numberAsFloat);\n    }\n    if (type === 'array') {\n        return stringifyArray(val, depth, numberAsFloat);\n    }\n}\nfunction stringifyInlineTable(obj, depth, numberAsFloat) {\n    let keys = Object.keys(obj);\n    if (keys.length === 0)\n        return '{}';\n    let res = '{ ';\n    for (let i = 0; i < keys.length; i++) {\n        let k = keys[i];\n        if (i)\n            res += ', ';\n        res += BARE_KEY.test(k) ? k : formatString(k);\n        res += ' = ';\n        res += stringifyValue(obj[k], extendedTypeOf(obj[k]), depth - 1, numberAsFloat);\n    }\n    return res + ' }';\n}\nfunction stringifyArray(array, depth, numberAsFloat) {\n    if (array.length === 0)\n        return '[]';\n    let res = '[ ';\n    for (let i = 0; i < array.length; i++) {\n        if (i)\n            res += ', ';\n        if (array[i] === null || array[i] === void 0) {\n            throw new TypeError('arrays cannot contain null or undefined values');\n        }\n        res += stringifyValue(array[i], extendedTypeOf(array[i]), depth - 1, numberAsFloat);\n    }\n    return res + ' ]';\n}\nfunction stringifyArrayTable(array, key, depth, numberAsFloat) {\n    if (depth === 0) {\n        throw new Error('Could not stringify the object: maximum object depth exceeded');\n    }\n    let res = '';\n    for (let i = 0; i < array.length; i++) {\n        res += `${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","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 {\n  customFileFormatRegistry,\n  getFrontMatterDelimiters,\n} from '$lib/services/contents/file/config';\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    _file: { format: _format, fmDelimiters },\n  } = collectionFile ?? /** @type {InternalEntryCollection} */ (collection);\n\n  const [startDelimiter, endDelimiter] = (_format === 'frontmatter'\n    ? getFrontMatterDelimiters({ format, delimiter: fmDelimiters })\n    : fmDelimiters) ?? ['---', '---'];\n\n  const sd = escapeRegExp(startDelimiter);\n  const ed = escapeRegExp(endDelimiter);\n  const cacheKey = `${sd}|${ed}`;\n  // Front matter matching: allow an empty head\n  let regex = frontMatterRegexCache.get(cacheKey);\n\n  if (!regex) {\n    regex = new RegExp(`^${sd}\\\\n(?:(?<head>.*?)\\\\n)?${ed}$(?:\\\\n(?<body>.+))?`, 'ms');\n    frontMatterRegexCache.set(cacheKey, regex);\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 { body: text };\n  }\n\n  let parsedHead = {};\n\n  if (format === 'yaml-frontmatter') {\n    parsedHead = parseYAML(head);\n  }\n\n  if (format === 'toml-frontmatter') {\n    parsedHead = parseTOML(head);\n  }\n\n  if (format === 'json-frontmatter') {\n    // For JSON front matter, we need to add the braces back since the regex strips them\n    parsedHead = parseJSON(`{${head}}`);\n  }\n\n  return { ...parsedHead, body };\n};\n\n/**\n * Parse raw content with given file details.\n * @param {BaseEntryListItem} entry Entry file list item.\n * @returns {Promise<any>} Parsed content.\n * @throws {Error} When the content could not be parsed.\n */\nexport const parseEntryFile = async ({ text = '', path, folder: { collectionName, fileName } }) => {\n  const collection = getCollection(collectionName);\n\n  const collectionFile =\n    collection && fileName ? getCollectionFile(collection, fileName) : undefined;\n\n  if (!collection) {\n    throw new Error('Collection not found');\n  }\n\n  if (fileName && !collectionFile) {\n    throw new Error('Collection file not found');\n  }\n\n  // Normalize line breaks\n  text = text.trim().replace(/\\r\\n?/g, '\\n');\n\n  let {\n    _file: { format },\n  } = collectionFile ?? /** @type {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 (/^(?:yaml|toml|json)-frontmatter$/.test(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 { getCollectionFile } from '$lib/services/contents/collection/files';\nimport { getIndexFile } from '$lib/services/contents/collection/index-file';\nimport { hasRootField } from '$lib/services/contents/entry/fields';\nimport { parseEntryFile } from '$lib/services/contents/file/parse';\n\n/**\n * @import {\n * BaseEntryListItem,\n * Entry,\n * InternalCollection,\n * InternalEntryCollection,\n * InternalLocaleCode,\n * RawEntryContent,\n * } from '$lib/types/private';\n * @import { Field } from '$lib/types/public';\n */\n\n/**\n * Check if the given file path is Hugo’s special index file: `_index.md` or `_index.{{locale}}.md`.\n * @param {string} path File path to be tested.\n * @returns {boolean} Result.\n */\nexport const isIndexFile = (path) => /\\/_index(?:\\.[\\w-]+)?\\.md$/.test(path);\n\n/** @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    let regex = slugRegexCache.get(subPathTemplate);\n\n    if (!regex) {\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      regex = new RegExp(`^${regexPattern}$`);\n      slugRegexCache.set(subPathTemplate, regex);\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 * 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: { i18nSingleFile, i18nMultiFile, i18nMultiFolder, i18nMultiRootFolder },\n      canonicalSlug: { key: canonicalSlugKey },\n    },\n  } = collectionFile ?? /** @type {InternalEntryCollection} */ (collection);\n\n  const transformedContent = transformRawContent(rawContent, fields, i18nSingleFile);\n\n  if (!transformedContent) {\n    return;\n  }\n\n  if (shouldSkipIndexFile(path, fileName, collection, subPathTemplate, extension)) {\n    return;\n  }\n\n  const isMultiFileStructure = i18nMultiFile || i18nMultiFolder || 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) {\n    processI18nSingleFileEntry(\n      entry,\n      transformedContent,\n      path,\n      fileName,\n      subPath,\n      subPathTemplate,\n      allLocales,\n    );\n  } else if (isMultiFileStructure && locale) {\n    const wasMerged = processI18nMultiFileEntry(\n      entry,\n      transformedContent,\n      path,\n      fileName,\n      subPath,\n      subPathTemplate,\n      locale,\n      defaultLocale,\n      collectionName,\n      canonicalSlugKey,\n      entries,\n    );\n\n    if (wasMerged) {\n      return; // Entry was merged with existing, don’t add to entries array\n    }\n  }\n\n  entries.push(entry);\n};\n\n/**\n * Parse the given entry files to create a complete, serialized entry list.\n * @param {BaseEntryListItem[]} entryFiles Entry file list.\n * @returns {Promise<{ entries: Entry[], errors: Error[] }>} Entry list and error list.\n */\nexport const prepareEntries = async (entryFiles) => {\n  /** @type {Entry[]} */\n  const entries = [];\n  /** @type {Error[]} */\n  const errors = [];\n\n  await Promise.all(entryFiles.map((file) => prepareEntry({ file, entries, errors })));\n\n  return {\n    entries: entries.filter((entry) => {\n      // Override a temporary ID\n      entry.id = generateUUID();\n\n      return !!entry.slug && !!Object.keys(entry.locales).length;\n    }),\n    errors,\n  };\n};\n","import { getAssetFoldersByPath } from '$lib/services/assets/folders';\nimport { GIT_CONFIG_FILE_REGEX } from '$lib/services/backends/git/shared/config';\nimport { getEntryFoldersByPath } from '$lib/services/contents';\nimport { isIndexFile } from '$lib/services/contents/file/process';\n\n/**\n * @import {\n * BaseAssetListItem,\n * BaseConfigListItem,\n * BaseEntryListItem,\n * BaseFileList,\n * BaseFileListItemProps,\n * } from '$lib/types/private';\n */\n\n/**\n * Parse a list of all files on the repository/filesystem to create entry and asset lists, with the\n * relevant collection/file configuration added.\n * @param {BaseFileListItemProps[]} files Unfiltered file list.\n * @returns {BaseFileList} File list, including both entries and assets.\n */\nexport const createFileList = (files) => {\n  /** @type {BaseEntryListItem[]} */\n  const entryFiles = [];\n  /** @type {BaseAssetListItem[]} */\n  const assetFiles = [];\n  /** @type {BaseConfigListItem[]} */\n  const configFiles = [];\n\n  files.forEach((fileInfo) => {\n    const { path, name } = fileInfo;\n\n    if (name.startsWith('.')) {\n      // Correct Git config files that we need, such as `.gitattributes` and `.gitkeep`, to enable\n      // some features like Git LFS tracking and assets folder creation\n      if (GIT_CONFIG_FILE_REGEX.test(name)) {\n        configFiles.push({ ...fileInfo, type: 'config' });\n      }\n    } else {\n      const [entryFolder] = getEntryFoldersByPath(path);\n      const [assetFolder] = getAssetFoldersByPath(path);\n\n      // Correct entry files\n      if (entryFolder) {\n        entryFiles.push({ ...fileInfo, type: 'entry', folder: entryFolder });\n      }\n\n      // Correct asset files while excluding files already listed as entries. These files can appear\n      // in the file list when a relative media path is configured for a collection. Also exclude\n      // Hugo’s special index files.\n      if (assetFolder && !entryFiles.find((e) => e.path === path) && !isIndexFile(path)) {\n        assetFiles.push({ ...fileInfo, type: 'asset', folder: assetFolder });\n      }\n    }\n  });\n\n  const allFiles = [...entryFiles, ...assetFiles, ...configFiles];\n\n  return { entryFiles, assetFiles, configFiles, allFiles, count: allFiles.length };\n};\n","import { writable } from 'svelte/store';\n\n/**\n * Whether the app is running on localhost.\n */\nexport const isLocalHost = writable(false);\n\n/**\n * Whether the local backend is supported.\n */\nexport const isLocalBackendSupported = writable(false);\n\n/**\n * Whether the browser is Brave.\n */\nexport const isBrave = writable(false);\n\n/**\n * Whether the operating system is macOS.\n */\nexport const isMacOS = writable(false);\n\n/**\n * Whether the app is displayed on a small screen (mobile).\n */\nexport const isSmallScreen = writable(false);\n\n/**\n * Whether the app is displayed on a medium screen (tablet).\n */\nexport const isMediumScreen = writable(false);\n\n/**\n * Whether the app is displayed on a large screen (desktop).\n */\nexport const isLargeScreen = writable(false);\n\n/**\n * Whether the user has a mouse.\n */\nexport const hasMouse = writable(true);\n\n/**\n * Initialize the screen side detection. This should be called within `onMount()` 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  isLocalHost.set(hostname === '127.0.0.1' || /^(.+\\.)?localhost$/.test(hostname));\n  isLocalBackendSupported.set('showDirectoryPicker' in globalThis);\n  isBrave.set(userAgentData?.brands.some(({ brand }) => brand === 'Brave') ?? false);\n  isMacOS.set(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  /* eslint-disable jsdoc/require-jsdoc */\n  const isSmallScreenSetter = () => isSmallScreen.set(mqlSmall.matches);\n  const isMediumScreenSetter = () => isMediumScreen.set(mqlMedium.matches);\n  const isLargeScreenSetter = () => isLargeScreen.set(mqlLarge.matches);\n  const hasMouseSetter = () => hasMouse.set(mqlPointer.matches);\n  /* eslint-enable jsdoc/require-jsdoc */\n\n  isSmallScreenSetter();\n  isMediumScreenSetter();\n  isLargeScreenSetter();\n  hasMouseSetter();\n\n  mqlSmall.addEventListener('change', isSmallScreenSetter);\n  mqlMedium.addEventListener('change', isMediumScreenSetter);\n  mqlLarge.addEventListener('change', isLargeScreenSetter);\n  mqlPointer.addEventListener('change', hasMouseSetter);\n};\n","'use strict';\n\nfunction isHighSurrogate(codePoint) {\n  return codePoint >= 0xd800 && codePoint <= 0xdbff;\n}\n\nfunction isLowSurrogate(codePoint) {\n  return codePoint >= 0xdc00 && codePoint <= 0xdfff;\n}\n\n// Truncate string by size in bytes\nmodule.exports = function truncate(getLength, string, byteLength) {\n  if (typeof string !== \"string\") {\n    throw new Error(\"Input must be string\");\n  }\n\n  var charLength = string.length;\n  var curByteLength = 0;\n  var codePoint;\n  var segment;\n\n  for (var i = 0; i < charLength; i += 1) {\n    codePoint = string.charCodeAt(i);\n    segment = string[i];\n\n    if (isHighSurrogate(codePoint) && isLowSurrogate(string.charCodeAt(i + 1))) {\n      i += 1;\n      segment += string[i];\n    }\n\n    curByteLength += getLength(segment);\n\n    if (curByteLength === byteLength) {\n      return string.slice(0, i + 1);\n    }\n    else if (curByteLength > byteLength) {\n      return string.slice(0, i - segment.length + 1);\n    }\n  }\n\n  return string;\n};\n\n","'use strict';\n\nfunction isHighSurrogate(codePoint) {\n  return codePoint >= 0xd800 && codePoint <= 0xdbff;\n}\n\nfunction isLowSurrogate(codePoint) {\n  return codePoint >= 0xdc00 && codePoint <= 0xdfff;\n}\n\n// Truncate string by size in bytes\nmodule.exports = function getByteLength(string) {\n  if (typeof string !== \"string\") {\n    throw new Error(\"Input must be string\");\n  }\n\n  var charLength = string.length;\n  var byteLength = 0;\n  var codePoint = null;\n  var prevCodePoint = null;\n  for (var i = 0; i < charLength; i++) {\n    codePoint = string.charCodeAt(i);\n    // handle 4-byte non-BMP chars\n    // low surrogate\n    if (isLowSurrogate(codePoint)) {\n      // when parsing previous hi-surrogate, 3 is added to byteLength\n      if (prevCodePoint != null && isHighSurrogate(prevCodePoint)) {\n        byteLength += 1;\n      }\n      else {\n        byteLength += 3;\n      }\n    }\n    else if (codePoint <= 0x7f ) {\n      byteLength += 1;\n    }\n    else if (codePoint >= 0x80 && codePoint <= 0x7ff) {\n      byteLength += 2;\n    }\n    else if (codePoint >= 0x800 && codePoint <= 0xffff) {\n      byteLength += 3;\n    }\n    prevCodePoint = codePoint;\n  }\n\n  return byteLength;\n};\n","'use strict';\n\nvar truncate = require(\"./lib/truncate\");\nvar getLength = require(\"utf8-byte-length/browser\");\nmodule.exports = truncate.bind(null, getLength);\n","/*jshint node:true*/\n'use strict';\n\n/**\n * Replaces characters in strings that are illegal/unsafe for filenames.\n * Unsafe characters are either removed or replaced by a substitute set\n * in the optional `options` object.\n *\n * Illegal Characters on Various Operating Systems\n * / ? < > \\ : * | \"\n * https://kb.acronis.com/content/39790\n *\n * Unicode Control codes\n * C0 0x00-0x1f & C1 (0x80-0x9f)\n * http://en.wikipedia.org/wiki/C0_and_C1_control_codes\n *\n * Reserved filenames on Unix-based systems (\".\", \"..\")\n * Reserved filenames in Windows (\"CON\", \"PRN\", \"AUX\", \"NUL\", \"COM1\",\n * \"COM2\", \"COM3\", \"COM4\", \"COM5\", \"COM6\", \"COM7\", \"COM8\", \"COM9\",\n * \"LPT1\", \"LPT2\", \"LPT3\", \"LPT4\", \"LPT5\", \"LPT6\", \"LPT7\", \"LPT8\", and\n * \"LPT9\") case-insesitively and with or without filename extensions.\n *\n * Capped at 255 characters in length.\n * http://unix.stackexchange.com/questions/32795/what-is-the-maximum-allowed-filename-and-folder-size-with-ecryptfs\n *\n * @param  {String} input   Original filename\n * @param  {Object} options {replacement: String | Function }\n * @return {String}         Sanitized filename\n */\n\nvar truncate = require(\"truncate-utf8-bytes\");\n\nvar illegalRe = /[\\/\\?<>\\\\:\\*\\|\"]/g;\nvar controlRe = /[\\x00-\\x1f\\x80-\\x9f]/g;\nvar reservedRe = /^\\.+$/;\nvar windowsReservedRe = /^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\\..*)?$/i;\nvar windowsTrailingRe = /[\\. ]+$/;\n\nfunction sanitize(input, replacement) {\n  if (typeof input !== 'string') {\n    throw new Error('Input must be string');\n  }\n  var sanitized = input\n    .replace(illegalRe, replacement)\n    .replace(controlRe, replacement)\n    .replace(reservedRe, replacement)\n    .replace(windowsReservedRe, replacement)\n    .replace(windowsTrailingRe, replacement);\n  return truncate(sanitized, 255);\n}\n\nmodule.exports = function (input, options) {\n  var replacement = (options && options.replacement) || '';\n  var output = sanitize(input, replacement);\n  if (replacement === '') {\n    return output;\n  }\n  return sanitize(output, '');\n};\n","import { getHash } from '@sveltia/utils/crypto';\nimport { getPathInfo } from '@sveltia/utils/file';\nimport { compare, escapeRegExp } from '@sveltia/utils/string';\nimport sanitize from 'sanitize-filename';\nimport { get } from 'svelte/store';\nimport { _, locale as appLocale } from 'svelte-i18n';\n\nimport { slugify } from '$lib/services/common/slug';\n\n/**\n * Create a regular expression that matches the given path.\n * @param {string} path Path.\n * @param {(segment: string) => string} replacer Function to replace each path segment.\n * @returns {RegExp} Regular expression.\n */\nexport const createPathRegEx = (path, replacer) =>\n  new RegExp(`^${path.split('/').map(replacer).join('\\\\/')}(?=\\\\/|$)`);\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 = /** @type {string} */ (get(appLocale));\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 get(_)('file_size_units.b', { values: { size: formatter.format(size) } });\n  }\n\n  if (size < mb) {\n    return get(_)('file_size_units.kb', { values: { size: formatter.format(size / kb) } });\n  }\n\n  if (size < gb) {\n    return get(_)('file_size_units.mb', { values: { size: formatter.format(size / mb) } });\n  }\n\n  if (size < tb) {\n    return get(_)('file_size_units.gb', { values: { size: formatter.format(size / gb) } });\n  }\n\n  return get(_)('file_size_units.tb', { values: { size: formatter.format(size / tb) } });\n};\n\n/**\n * Check if the given file name or slug has duplicate(s) or its variant in the other names. If\n * found, rename it by prepending a number like `summer-beach-2.jpg`.\n * @param {string} name Original name.\n * @param {string[]} otherNames Other names (of files in the same folder).\n * @returns {string} Determined name.\n */\nexport const renameIfNeeded = (name, otherNames) => {\n  if (!otherNames.length) {\n    return name;\n  }\n\n  const { filename: slug, extension } = getPathInfo(name);\n\n  const regex = new RegExp(\n    `^${escapeRegExp(slug)}(?:-(?<num>\\\\d+?))?${extension ? `\\\\.${extension}` : ''}$`,\n  );\n\n  const dupName = otherNames\n    .sort((a, b) => compare(a.split('.')[0], b.split('.')[0]))\n    .findLast((p) => regex.test(p));\n\n  if (!dupName) {\n    return name;\n  }\n\n  const number = Number(dupName.match(regex)?.groups?.num ?? 0) + 1;\n\n  return `${slug}-${number}${extension ? `.${extension}` : ''}`;\n};\n\n/**\n * Format the file name for uploading, ensuring it is sanitized and optionally slugified.\n * @param {string} originalName The original file name.\n * @param {object} [options] Options.\n * @param {boolean} [options.slugificationEnabled] Whether to slugify the file name.\n * @param {string[]} [options.assetNamesInSameFolder] List of asset names in the same folder to\n * avoid name conflicts.\n * @returns {string} The formatted file name, sanitized and possibly slugified.\n */\nexport const formatFileName = (\n  originalName,\n  { slugificationEnabled = false, assetNamesInSameFolder = [] } = {},\n) => {\n  // 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\n    fileName = `${slugify(filename)}${extension ? `.${extension}` : ''}`;\n  }\n\n  return renameIfNeeded(fileName, assetNamesInSameFolder);\n};\n\n/**\n * Join the given path segments while ignoring any falsy value.\n * @param {(string | null | undefined)[]} segments List of path segments.\n * @returns {string} Path.\n */\nexport const createPath = (segments) => segments.filter(Boolean).join('/');\n\n/**\n * Resolve the given file path. This processes only dot(s) in the middle of the path; leading dots\n * like `../../foo/image.jpg` will be untouched.\n * @param {string} path Unresolved path, e.g. `foo/bar/baz/../../image.jpg`.\n * @returns {string} Resolved path, e.g. `foo/image.jpg`.\n */\nexport const resolvePath = (path) => {\n  /** @type {(string | null)[]} */\n  const segments = path.split('/');\n  let nameFound = false;\n\n  segments.forEach((segment, index) => {\n    if (segment === '.' || segment === '..') {\n      if (nameFound) {\n        segments[index] = null;\n\n        if (segment === '..') {\n          const lastIndex = segments.findLastIndex((s, i) => !!s && i < index);\n\n          if (lastIndex > -1) {\n            segments[lastIndex] = null;\n          }\n        }\n      }\n    } else {\n      nameFound = true;\n    }\n  });\n\n  return createPath(segments);\n};\n\n/**\n * Get the Blob object from the given file or blob input. If the input is a string, it is treated as\n * the file content and converted to a Blob with `text/plain` MIME type.\n * @param {File | Blob | string} input File or Blob object, or a string representing the file\n * content.\n * @returns {Blob} Blob object representing the file.\n */\nexport const getBlob = (input) =>\n  typeof input === 'string' ? new Blob([input], { type: 'text/plain' }) : input;\n\n/**\n * Get the Git object ID (SHA-1 hash) of the given file or blob.\n * @param {File | Blob | string} input File or Blob object, or a string representing the file\n * content.\n * @returns {Promise<string>} Git object ID (SHA-1 hash) of the file.\n * @see https://stackoverflow.com/a/68806436\n * @see https://github.com/Richienb/git-hash-object/blob/master/index.js\n */\nexport const getGitHash = async (input) => {\n  const file = getBlob(input);\n  const buffer = await file.arrayBuffer();\n\n  return getHash(new Blob([`blob ${buffer.byteLength}\\0`, buffer]));\n};\n","/* 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 { allEntries, allEntryFolders, dataLoaded, entryParseErrors } from '$lib/services/contents';\nimport { ESCAPED_PLACEHOLDER_REGEX } from '$lib/services/contents/file/config';\nimport { prepareEntries } from '$lib/services/contents/file/process';\nimport { isBrave } from '$lib/services/user/env';\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([...entryPaths, ...assetPaths].map((path) => stripSlashes(path ?? '')));\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 && !get(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-${Date.now()}`;\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';\nimport { writable } from 'svelte/store';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import { User } from '$lib/types/private';\n */\n\n/**\n * @type {Writable<User | null | undefined>}\n */\nexport const user = writable();\n\nuser.subscribe((_user) => {\n  (async () => {\n    try {\n      if (_user) {\n        await LocalStorage.set('sveltia-cms.user', _user);\n      } else if (_user === null) {\n        await LocalStorage.delete('sveltia-cms.user');\n      }\n    } catch {\n      //\n    }\n  })();\n});\n","import { isObject } from '@sveltia/utils/object';\n\n/**\n * @import { AuthTokens } from '$lib/types/private';\n */\n\n/**\n * A `fetch` wrapper to send an HTTP request to an API endpoint, parse the response as JSON or other\n * specified format, and handle errors gracefully.\n * @param {string} url URL.\n * @param {RequestInit} [init] Request options.\n * @param {object} [options] Options.\n * @param {'json' | 'text' | 'blob' | 'raw'} [options.responseType] Response parser type. The\n * default is `json`. Use `raw` to return a `Response` object as is.\n * @param {() => Promise<AuthTokens>} [options.refreshAccessToken] A function to refresh the OAuth\n * access token when the request fails with a 401 Unauthorized status. If this function is provided,\n * the request will be retried with the new token.\n * @returns {Promise<object | string | Blob | Response>} Response data or `Response` itself,\n * depending on the `responseType` option.\n * @throws {Error} When there was an error in the request or response.\n */\nexport const sendRequest = async (\n  url,\n  init = {},\n  { responseType = 'json', refreshAccessToken = undefined } = {},\n) => {\n  /** @type {Response} */\n  let response;\n\n  init.cache = 'no-cache';\n  init.headers = new Headers(init.headers);\n\n  if (responseType === 'json') {\n    init.headers.set('Accept', 'application/json');\n  }\n\n  if (init.method === 'POST' && isObject(init.body)) {\n    init.headers.set('Content-Type', 'application/json');\n    init.body = JSON.stringify(init.body);\n  }\n\n  try {\n    response = await fetch(url, init);\n  } catch (ex) {\n    throw new Error('Failed to send the request', { cause: ex });\n  }\n\n  if (responseType === 'raw') {\n    return response;\n  }\n\n  const { ok, status } = response;\n  /** @type {any} */\n  let result;\n\n  try {\n    if (ok && responseType === 'blob') {\n      return response.blob();\n    }\n\n    if (ok && responseType === 'text') {\n      return response.text();\n    }\n\n    result = await response.json();\n  } catch (ex) {\n    throw new Error('Failed to parse the response', { cause: ex });\n  }\n\n  // Return the parsed result for a successful response, but a GraphQL error is typically returned\n  // with 200 OK so we need to check the content for the `errors` key\n  if (ok && !(url.endsWith('/graphql') && isObject(result) && result.errors)) {\n    return result;\n  }\n\n  if (status === 401 && refreshAccessToken) {\n    const [scheme] = init.headers.get('Authorization')?.split(' ') ?? ['token'];\n    const { token } = await refreshAccessToken();\n\n    init.headers.set('Authorization', `${scheme} ${token}`);\n\n    // Retry the request with the new token. Omit `refreshAccessToken` to avoid infinite loops.\n    return sendRequest(url, init, { responseType });\n  }\n\n  if (!isObject(result)) {\n    throw new Error('Server responded with an error', { cause: { status } });\n  }\n\n  let message = '';\n\n  if (typeof result.error === 'string') {\n    message = result.error;\n  }\n\n  // Typical REST\n  if (typeof result.message === 'string') {\n    message = result.message;\n  }\n\n  if (Array.isArray(result.errors)) {\n    if (typeof result.errors[0] === 'string') {\n      message = result.errors.join(', ');\n    }\n\n    // Typical GraphQL\n    if (isObject(result.errors[0]) && typeof result.errors[0].message === 'string') {\n      message = /** @type {any[]} */ (result.errors).map((e) => e.message).join(', ');\n    }\n  }\n\n  throw new Error('Server responded with an error', { cause: { status, message } });\n};\n","import { get } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { user } from '$lib/services/user';\nimport { sendRequest } from '$lib/services/utils/networking';\n\n/**\n * @import { ApiEndpointConfig, AuthTokens, FetchApiOptions } from '$lib/types/private';\n */\n\n/**\n * Placeholder for API configuration information.\n * @type {ApiEndpointConfig}\n */\nconst API_CONFIG_INFO_PLACEHOLDER = {\n  clientId: '',\n  authScope: '',\n  authURL: '',\n  tokenURL: '',\n  authScheme: 'token',\n  restBaseURL: '',\n  graphqlBaseURL: '',\n};\n\n/**\n * Configuration for API endpoints.\n * @type {ApiEndpointConfig}\n */\nexport const apiConfig = { ...API_CONFIG_INFO_PLACEHOLDER };\n\n/**\n * Variables to be used in GraphQL queries.\n * @type {Record<string, any>}\n */\nexport const graphqlVars = {};\n\n/**\n * Refresh the OAuth access token using the refresh token.\n * @param {object} args Arguments.\n * @param {string} args.clientId OAuth application ID.\n * @param {string} args.tokenURL OAuth token request URL.\n * @param {string} args.refreshToken OAuth refresh token.\n * @returns {Promise<AuthTokens>} New access token and refresh token.\n */\nexport const refreshAccessToken = async ({ clientId, tokenURL, refreshToken }) => {\n  let response;\n  let token = '';\n\n  try {\n    response = await fetch(tokenURL, {\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        grant_type: 'refresh_token',\n        client_id: clientId,\n        refresh_token: refreshToken,\n      }),\n    });\n  } catch {\n    //\n  }\n\n  if (!response?.ok) {\n    throw new Error(get(_)('sign_in_error.TOKEN_REFRESH_FAILED'));\n  }\n\n  ({ access_token: token, refresh_token: refreshToken } = await response.json());\n\n  // Update the user store with the new token and refresh token\n  user.update((_user) => (_user ? { ..._user, token, refreshToken } : _user));\n\n  return { token, refreshToken };\n};\n\n/**\n * Send a request to the REST or GraphQL API of a Git-based service with authentication. This\n * function is a wrapper around {@link sendRequest} that automatically adds the `Authorization`\n * header with the OAuth access token. It also handles the case where the access token needs to be\n * refreshed when the request fails with a 401 Unauthorized status.\n * @param {string} path API endpoint path.\n * @param {FetchApiOptions} [options] Fetch options.\n * @returns {Promise<object | string | Blob | Response>} Response data or `Response` itself,\n * depending on the `responseType` option.\n * @throws {Error} When there was an error in the API request, e.g. OAuth app access restrictions.\n * @see https://docs.github.com/en/rest\n * @see https://docs.gitlab.com/api/rest/\n * @see https://gitea.com/api/swagger\n * @see https://codeberg.org/api/swagger\n */\nexport const fetchAPI = async (\n  path,\n  {\n    method = 'GET',\n    headers = {},\n    body = null,\n    isGraphQL = false,\n    responseType = 'json',\n    token = undefined,\n    refreshToken = undefined,\n  } = {},\n) => {\n  const { clientId, tokenURL, restBaseURL, graphqlBaseURL, authScheme = 'token' } = apiConfig;\n  const _user = get(user);\n  const baseURL = isGraphQL ? graphqlBaseURL : restBaseURL;\n\n  token ??= _user?.token;\n  refreshToken ??= _user?.refreshToken;\n  headers.Authorization = `${authScheme} ${token}`;\n\n  return sendRequest(\n    `${baseURL}${path}`,\n    { method, headers, body },\n    {\n      responseType,\n      refreshAccessToken: refreshToken\n        ? () => refreshAccessToken({ clientId, tokenURL, refreshToken })\n        : undefined,\n    },\n  );\n};\n\n/**\n * Send a request to the GraphQL API of a Git-based service. This function is a wrapper around\n * {@link fetchAPI} and automatically applies the common variables defined in {@link graphqlVars} to\n * the query. Variables can also be passed as an argument to override the defaults.\n * @param {string} query Query string.\n * @param {Record<string, any>} [variables] Any variable to be applied.\n * @returns {Promise<Record<string, any>>} Response data.\n * @see https://docs.github.com/en/graphql\n * @see https://docs.gitlab.com/api/graphql/\n */\nexport const fetchGraphQL = async (query, variables = {}) => {\n  // Normalize the query by removing line breaks and subsequent space characters. We must be careful\n  // as file paths may contain spaces.\n  query = query.replace(/\\n\\s*/g, ' ');\n\n  // Apply common variables defined in `graphqlVars` to the query\n  Object.entries(graphqlVars).forEach(([key, value]) => {\n    if (query.includes(`$${key}`)) {\n      variables[key] ??= value;\n    }\n  });\n\n  // Extract `data` from the response\n  const { data } = await /** @type {Promise<{ data: Record<string, any> }>} */ (\n    fetchAPI('', { method: 'POST', body: { query, variables }, isGraphQL: true })\n  );\n\n  return data;\n};\n","import { get } from 'svelte/store';\n\nimport { BACKEND_NAME } from '$lib/services/backends/git/gitea/constants';\nimport { fetchAPI } from '$lib/services/backends/git/shared/api';\nimport { user } from '$lib/services/user';\n\n/**\n * @import { AuthTokens, User } from '$lib/types/private';\n */\n\n/**\n * @typedef {object} UserProfileResponse\n * @property {number} id User ID.\n * @property {string} full_name User’s full name.\n * @property {string} login User’s login name.\n * @property {string} email User’s email address.\n * @property {string} avatar_url URL to the user’s avatar image.\n * @property {string} html_url URL to the user’s profile page.\n */\n\n/**\n * Retrieve the authenticated user’s profile information.\n * @param {AuthTokens} tokens Authentication tokens.\n * @returns {Promise<User>} User information.\n * @see https://docs.gitea.com/api/next/#tag/user/operation/userGetCurrent\n */\nexport const getUserProfile = async ({ token, refreshToken }) => {\n  const {\n    id,\n    full_name: name,\n    login,\n    email,\n    avatar_url: avatarURL,\n    html_url: profileURL,\n  } = /** @type {UserProfileResponse} */ (await fetchAPI('/user', { token, refreshToken }));\n\n  const _user = get(user);\n\n  // Update the tokens because these may have been renewed in `refreshAccessToken` while fetching\n  // the user info\n  if (_user?.token && _user.token !== token) {\n    token = _user.token;\n    refreshToken = _user.refreshToken;\n  }\n\n  return {\n    backendName: BACKEND_NAME,\n    id,\n    name,\n    login,\n    email,\n    avatarURL,\n    profileURL,\n    token,\n    refreshToken,\n  };\n};\n","import { generateRandomId, generateUUID, getHash } from '@sveltia/utils/crypto';\nimport { isObject } from '@sveltia/utils/object';\nimport { LocalStorage } from '@sveltia/utils/storage';\nimport { get, writable } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { cmsConfig } from '$lib/services/config';\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                ? get(_)(`sign_in_error.${result.errorCode}`, { default: result.error })\n                : result.error,\n            ),\n          }),\n        );\n      }\n\n      window.removeEventListener('message', handler);\n      clearInterval(timer);\n      popup?.close();\n    };\n\n    window.addEventListener('message', handler);\n  });\n};\n\n/**\n * Initialize the server-side Authorization Code Flow.\n * @param {object} args Arguments.\n * @param {string} args.backendName Backend name, e.g. `github`.\n * @param {string | undefined} args.siteDomain Domain of the site hosting the CMS. Could be\n * `undefined` if the `site_domain` option is not specified in the backend configuration.\n * @param {string} args.authURL Authorization site URL.\n * @param {string} args.scope Authorization scope.\n * @returns {Promise<AuthTokens>} Auth access token and refresh token.\n */\nexport const initServerSideAuth = async ({ backendName, siteDomain, authURL, scope }) => {\n  const { hostname } = window.location;\n\n  // If the site domain is not specified, use the current hostname. If the hostname is `localhost`,\n  // use `cms.netlify.com` as the default site domain.\n  // @see https://decapcms.org/docs/backends-overview/\n  siteDomain ??= hostname === 'localhost' ? 'cms.netlify.com' : hostname;\n\n  try {\n    // `siteDomain` may contain non-ASCII characters. When authenticating with Netlify, such\n    // internationalized domain names (IDNs) must be written in Punycode. Use `URL` for conversion,\n    // e.g `日本語.jp` -> `xn--wgv71a119e.jp`\n    if (new URL(authURL).origin === 'https://api.netlify.com') {\n      siteDomain = new URL(`https://${siteDomain}`).hostname;\n    }\n  } catch {\n    //\n  }\n\n  const params = new URLSearchParams({\n    provider: backendName,\n    site_id: siteDomain,\n    scope,\n  });\n\n  return authorize({\n    backendName,\n    authURL: `${authURL}?${params}`,\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  window.addEventListener('message', ({ data, origin }) => {\n    if (data === `authorizing:${provider}`) {\n      window.opener?.postMessage(\n        `authorization:${provider}:${_state}:${JSON.stringify(content)}`,\n        origin,\n      );\n    }\n  });\n\n  window.opener?.postMessage(`authorizing:${provider}`, '*');\n};\n\n/**\n * Complete the client-side Authorization Code Flow with PKCE by retrieving an access token and\n * passing it to the window opener. This code is to be called within the auth popup window and\n * basically does the same thing as the callback handler of Sveltia CMS Authenticator.\n * @param {object} args Arguments.\n * @param {string} args.backendName Backend name, e.g. `gitlab`.\n * @param {string} args.clientId OAuth application ID.\n * @param {string} args.tokenURL OAuth token request URL.\n * @param {string} args.code Authorization code.\n * @param {string} args.state Authorization state, which is a CSRF token previously set.\n * @returns {Promise<void>} None.\n * @see https://docs.gitlab.com/ee/api/oauth2.html#authorization-code-with-proof-key-for-code-exchange-pkce\n * @see https://github.com/sveltia/sveltia-cms-auth/blob/main/src/index.js\n */\nexport const finishClientSideAuth = async ({ backendName, clientId, tokenURL, code, state }) => {\n  const { origin, pathname } = new URL(window.location.href);\n  const { csrfToken, codeVerifier } = (await LocalStorage.get('sveltia-cms.auth')) ?? {};\n  const provider = backendName;\n  const redirectURL = `${origin}${pathname}`;\n\n  // Remove the temporary secret\n  await LocalStorage.delete('sveltia-cms.auth');\n\n  if (!csrfToken || !codeVerifier || state !== csrfToken) {\n    return sendMessage({\n      provider,\n      error: get(_)('sign_in_error.CSRF_DETECTED'),\n      errorCode: 'CSRF_DETECTED',\n    });\n  }\n\n  let response;\n  let token = '';\n  let refreshToken = '';\n  let error = '';\n\n  try {\n    response = await fetch(tokenURL, {\n      method: 'POST',\n      headers: {\n        Accept: 'application/json',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        grant_type: 'authorization_code',\n        client_id: clientId,\n        code,\n        redirect_uri: redirectURL,\n        code_verifier: codeVerifier,\n      }),\n    });\n  } catch {\n    //\n  }\n\n  if (!response) {\n    return sendMessage({\n      provider,\n      error: get(_)('sign_in_error.TOKEN_REQUEST_FAILED'),\n      errorCode: 'TOKEN_REQUEST_FAILED',\n    });\n  }\n\n  try {\n    ({ access_token: token, refresh_token: refreshToken, error } = await response.json());\n  } catch {\n    return sendMessage({\n      provider,\n      error: get(_)('sign_in_error.MALFORMED_RESPONSE'),\n      errorCode: 'MALFORMED_RESPONSE',\n    });\n  }\n\n  return sendMessage({ provider, token, refreshToken, error });\n};\n\n/**\n * Handle the client-side Authorization Code Flow with PKCE within the auth popup window. Redirect\n * to the authorization site or finish the flow after being redirected from the auth site.\n * @param {object} args Arguments.\n * @param {string} args.backendName Backend name, e.g. `gitlab`.\n * @param {string} args.clientId OAuth application ID.\n * @param {string} args.tokenURL OAuth token request URL.\n */\nexport const handleClientSideAuthPopup = async ({ backendName, clientId, tokenURL }) => {\n  inAuthPopup.set(true);\n\n  const { search } = window.location;\n  const { code, state } = Object.fromEntries(new URLSearchParams(search));\n\n  if (code && state) {\n    await finishClientSideAuth({ backendName, clientId, tokenURL, code, state });\n  } else {\n    const { realAuthURL } = (await LocalStorage.get('sveltia-cms.auth')) ?? {};\n\n    if (realAuthURL) {\n      window.location.href = realAuthURL;\n    }\n  }\n};\n\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, tokenURL } = 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, clientId, tokenURL });\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 { get } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { fetchAPI } from '$lib/services/backends/git/shared/api';\nimport { REPOSITORY_INFO_PLACEHOLDER } from '$lib/services/backends/git/shared/repository';\n\n/**\n * @import { RepositoryInfo } from '$lib/types/private';\n */\n\n/**\n * Placeholder for repository information.\n * @type {RepositoryInfo}\n */\nexport const repository = { ...REPOSITORY_INFO_PLACEHOLDER };\n\n/**\n * Cache for repository information to avoid multiple API calls.\n * @type {Record<string, any> | null}\n */\nlet repositoryInfoCache = null;\n\n/**\n * Reset the repository info cache. Used for testing.\n */\nexport const resetRepositoryInfoCache = () => {\n  repositoryInfoCache = null;\n};\n\n/**\n * Generate base URLs for accessing the repository’s resources.\n * @param {string} repoURL The base URL of the repository.\n * @param {string} [branch] The branch name. Could be `undefined` if the branch is not specified in\n * the CMS configuration.\n * @returns {{ treeBaseURL: string, blobBaseURL: string }} An object containing the tree base URL\n * for browsing files, and the blob base URL for accessing file contents.\n */\nexport const getBaseURLs = (repoURL, branch) => ({\n  treeBaseURL: branch ? `${repoURL}/src/branch/${branch}` : repoURL,\n  blobBaseURL: branch ? `${repoURL}/src/branch/${branch}` : '',\n});\n\n/**\n * Get the repository information.\n * @returns {Promise<Record<string, any>>} Repository information.\n * @see https://docs.gitea.com/api/next/#tag/repository/operation/repoGet\n */\nexport const getRepositoryInfo = async () => {\n  const { owner, repo } = repository;\n\n  repositoryInfoCache ??= await /** @type {Promise<Record<string, any>>} */ (\n    fetchAPI(`/repos/${owner}/${repo}`)\n  );\n\n  return repositoryInfoCache;\n};\n\n/**\n * Check if the user has access to the current repository.\n * @throws {Error} If the user is not a collaborator of the repository.\n * @see https://docs.gitea.com/api/next/#tag/repository/operation/repoGet\n */\nexport const checkRepositoryAccess = async () => {\n  const { repo } = repository;\n\n  try {\n    const { permissions } = await getRepositoryInfo();\n\n    if (!permissions?.pull) {\n      throw new Error('Not a collaborator of the repository', {\n        cause: new Error(get(_)('repository_no_access', { values: { repo } })),\n      });\n    }\n  } catch (error) {\n    if (error instanceof Error && error.message.includes('Not a collaborator')) {\n      throw error;\n    }\n\n    throw new Error('Failed to check repository access', {\n      cause: new Error(get(_)('repository_not_found', { values: { repo } })),\n    });\n  }\n};\n\n/**\n * Fetch the repository’s default branch name, which is typically `master` or `main`.\n * @returns {Promise<string>} Branch name.\n * @throws {Error} When the repository could not be found, or when the repository is empty.\n * @see https://docs.gitea.com/api/next/#tag/repository/operation/repoGet\n */\nexport const fetchDefaultBranchName = async () => {\n  const { repo, repoURL = '' } = repository;\n\n  try {\n    const { default_branch: branch } = await getRepositoryInfo();\n\n    if (!branch) {\n      throw new Error('Failed to retrieve the default branch name.', {\n        cause: new Error(get(_)('repository_empty', { values: { repo } })),\n      });\n    }\n\n    Object.assign(repository, { branch }, getBaseURLs(repoURL, branch));\n\n    return branch;\n  } catch {\n    throw new Error('Failed to retrieve the default branch name.', {\n      cause: new Error(get(_)('repository_not_found', { values: { repo } })),\n    });\n  }\n};\n","import { get } from 'svelte/store';\n\nimport { cmsConfig } from '$lib/services/config';\nimport { getCollectionLabel } from '$lib/services/contents/collection';\nimport { user } from '$lib/services/user';\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} */ (get(user));\n  const [firstSlug = ''] = changes.map((item) => item.slug).filter(Boolean);\n  const [firstPath, ...remainingPaths] = changes.map(({ path }) => path);\n  const collectionLabel = collection ? getCollectionLabel(collection, { useSingular: true }) : '';\n  // @ts-ignore\n  let message = customCommitMessages[commitType] || DEFAULT_COMMIT_MESSAGES[commitType] || '';\n\n  if (['create', 'update', 'delete'].includes(commitType)) {\n    message = message\n      .replaceAll('{{slug}}', firstSlug)\n      .replaceAll('{{collection}}', collectionLabel)\n      .replaceAll('{{path}}', firstPath)\n      .replaceAll('{{author-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    if (remainingPaths.length) {\n      message += ` +${remainingPaths.length}`;\n    }\n  }\n\n  if (['openAuthoring'].includes(commitType)) {\n    message = message\n      .replaceAll('{{message}}', commitType)\n      .replaceAll('{{author-email}}', email)\n      .replaceAll('{{author-login}}', login)\n      .replaceAll('{{author-name}}', name);\n  }\n\n  // If requested, disable automatic deployments by using the standard `[skip ci]` prefix supported\n  // by major CI/CD providers, including GitHub Actions and Cloudflare Pages. To avoid unexpected\n  // data retention, deployments for deletion commits are not skipped.\n  // https://docs.github.com/en/actions/managing-workflow-runs/skipping-workflow-runs\n  // https://docs.gitlab.com/ee/ci/pipelines/#skip-a-pipeline\n  // https://developers.cloudflare.com/pages/platform/branch-build-controls/#skip-builds\n  if (\n    !['delete', 'deleteMedia'].includes(commitType) &&\n    // 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 { encodeBase64 } from '@sveltia/utils/file';\nimport { get } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { repository } from '$lib/services/backends/git/gitea/repository';\nimport { fetchAPI } from '$lib/services/backends/git/shared/api';\nimport { createCommitMessage } from '$lib/services/backends/git/shared/commits';\nimport { user } from '$lib/services/user';\n\n/**\n * @import { CommitOptions, CommitResults, FileChange, User } from '$lib/types/private';\n */\n\n/**\n * @typedef {object} CommitResponse\n * @property {object} commit Commit information, including the commit SHA and creation date.\n * @property {string} commit.sha Commit SHA.\n * @property {string} commit.created Commit creation date in ISO format.\n * @property {({ path: string, sha: string } | 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(get(_)('branch_not_found', { values: { repo, branch } })),\n    });\n  }\n};\n\n/**\n * Save entries or assets remotely.\n * @param {FileChange[]} changes File changes to be saved.\n * @param {CommitOptions} options Commit options.\n * @returns {Promise<CommitResults>} Commit results, including the commit SHA and updated file SHAs.\n * @see https://docs.gitea.com/api/next/#tag/repository/operation/repoChangeFiles\n */\nexport const commitChanges = async (changes, options) => {\n  const { owner, repo, branch } = repository;\n  const commitMessage = createCommitMessage(changes, options);\n  const { name, email } = /** @type {User} */ (get(user));\n  const date = new Date().toJSON();\n\n  const files = await Promise.all(\n    changes.map(async ({ action, path, previousPath, previousSha, data = '' }) => ({\n      operation: action === 'move' ? 'update' : action,\n      path,\n      content: await encodeBase64(data),\n      from_path: previousPath,\n      sha: previousSha,\n    })),\n  );\n\n  const { commit, files: savedFiles } = /** @type {CommitResponse} */ (\n    await fetchAPI(`/repos/${owner}/${repo}/contents`, {\n      method: 'POST',\n      body: {\n        branch,\n        author: { name, email },\n        committer: { name, email },\n        dates: { author: date, committer: date },\n        message: commitMessage,\n        files,\n      },\n    })\n  );\n\n  return {\n    sha: commit.sha,\n    date: new Date(commit.created),\n    files: Object.fromEntries(\n      savedFiles.map((file, index) => [\n        file?.path ?? changes[index].path,\n        { sha: file?.sha ?? '' },\n      ]),\n    ),\n  };\n};\n","import { get } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { MIN_FORGEJO_VERSION, MIN_GITEA_VERSION } from '$lib/services/backends/git/gitea/constants';\nimport { repository } from '$lib/services/backends/git/gitea/repository';\nimport { fetchAPI } from '$lib/services/backends/git/shared/api';\n\n/**\n * Flag to indicate if the backend is Forgejo. This is used to determine which API endpoints to use,\n * as Gitea and Forgejo have different endpoints for fetching file contents.\n * @type {{ isForgejo: boolean }}\n */\nexport const instance = { isForgejo: false };\n\n/**\n * Check if the version of the user’s Gitea/Forgejo instance is supported. The API endpoint requires\n * authentication, meaning the user must be signed in before calling this function.\n * @throws {Error} When the detected version is unsupported.\n * @see https://docs.gitea.com/api/next/#tag/miscellaneous/operation/getVersion\n */\nexport const checkInstanceVersion = async () => {\n  const { version: 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        get(_)('backend_unsupported_version', {\n          values: { name, version: minVersion },\n        }),\n      ),\n    });\n  }\n};\n","import { getPathInfo } from '@sveltia/utils/file';\nimport { IndexedDB } from '@sveltia/utils/storage';\n\nimport { allAssets } from '$lib/services/assets';\nimport { 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 = allFiles.map(({ path }) => path);\n  const unusedPaths = Object.keys(cachedFiles).filter((path) => !usedPaths.includes(path));\n\n  // Save new entry caches\n  if (fetchingFiles.length) {\n    await cacheDB.saveEntries(Object.entries(fetchedFileMap));\n  }\n\n  // Delete old entry caches; we don’t need `await` for the deletion to finish, as it’s not critical\n  if (unusedPaths.length) {\n    cacheDB.deleteEntries(unusedPaths);\n  }\n};\n\n/**\n * Fetch file list from a backend service, download/parse all the entry files, then cache them in\n * the {@link allEntries} and {@link allAssets} stores.\n * @param {object} args Arguments.\n * @param {RepositoryInfo} args.repository Repository info.\n * @param {() => Promise<string>} args.fetchDefaultBranchName Function to fetch the repository’s\n * default branch name.\n * @param {() => Promise<{ hash: string, message: string }>} args.fetchLastCommit Function to fetch\n * the last commit’s SHA-1 hash and message.\n * @param {FetchFileListFunction} args.fetchFileList Function to fetch the repository’s complete\n * file list.\n * @param {(fetchingFiles: BaseFileListItem[]) => Promise<RepositoryContentsMap>\n * } args.fetchFileContents Function to fetch the metadata of entry/asset files as well as text file\n * contents.\n */\nexport const fetchAndParseFiles = async ({\n  repository,\n  fetchDefaultBranchName,\n  fetchLastCommit,\n  fetchFileList,\n  fetchFileContents,\n}) => {\n  const { databaseName, branch: branchName } = repository;\n  const metaDB = new IndexedDB(/** @type {string} */ (databaseName), 'meta');\n  const cacheDB = new IndexedDB(/** @type {string} */ (databaseName), 'file-cache');\n  const cachedFileEntries = await cacheDB.entries();\n  let branch = branchName;\n\n  if (!branch) {\n    branch = await fetchDefaultBranchName();\n    repository.branch = branch;\n  }\n\n  // This has to be done after the branch is determined\n  const { hash: lastHash, message } = await fetchLastCommit();\n  const fileList = await getFileList({ metaDB, lastHash, cachedFileEntries, fetchFileList });\n\n  // @todo Check if the commit has a workflow run that trigged deployment\n  isLastCommitPublished.set(!message.startsWith('[skip ci]'));\n\n  // Skip fetching files if no files found\n  if (!fileList.count) {\n    updateStores({ entries: [], assets: [], configFiles: [] });\n\n    return;\n  }\n\n  const { entryFiles, assetFiles, configFiles, allFiles } = fileList;\n  /** @type {RepositoryContentsMap} */\n  const cachedFiles = Object.fromEntries(cachedFileEntries);\n\n  restoreCachedFileData({ allFiles, cachedFiles });\n\n  const fetchingFiles = allFiles.filter(({ meta }) => !meta);\n  const fetchedFileMap = fetchingFiles.length ? await fetchFileContents(fetchingFiles) : {};\n\n  const { entries, errors } = await prepareEntries(\n    entryFiles.map(\n      (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","import { LocalStorage } from '@sveltia/utils/storage';\nimport equal from 'fast-deep-equal';\nimport { get, writable } from 'svelte/store';\nimport { locale as appLocale, locales as appLocales } from 'svelte-i18n';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import { Preferences } from '$lib/types/private';\n */\n\nconst STORAGE_KEY = 'sveltia-cms.prefs';\n\n/**\n * @type {Writable<{ type: string } | undefined>}\n */\nexport const prefsError = writable();\n\n/**\n * @type {Writable<Preferences>}\n */\nexport const prefs = writable({}, (set) => {\n  prefsError.set(undefined);\n\n  (async () => {\n    try {\n      const _prefs = (await LocalStorage.get(STORAGE_KEY)) ?? {};\n\n      _prefs.apiKeys ??= {};\n      _prefs.useDraftBackup ??= true;\n      _prefs.closeOnSave ??= true;\n      _prefs.closeWithEscape ??= true;\n      _prefs.underlineLinks ??= true;\n      _prefs.beta ??= false;\n      _prefs.devModeEnabled ??= false;\n      _prefs.defaultTranslationService ??= 'google';\n      set(_prefs);\n    } catch {\n      prefsError.set({ type: 'permission_denied' });\n    }\n  })();\n});\n\nprefs.subscribe((newPrefs) => {\n  if (!newPrefs || !Object.keys(newPrefs).length) {\n    return;\n  }\n\n  (async () => {\n    try {\n      if (!equal(newPrefs, await LocalStorage.get(STORAGE_KEY))) {\n        await LocalStorage.set(STORAGE_KEY, newPrefs);\n      }\n    } catch {\n      //\n    }\n  })();\n\n  const {\n    locale,\n    theme,\n    underlineLinks = true,\n    beta = false,\n    devModeEnabled: devMode = false,\n  } = newPrefs;\n\n  if (locale && get(appLocales).includes(locale)) {\n    appLocale.set(locale);\n  }\n\n  const autoTheming = !theme || theme === 'auto';\n  const autoTheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n\n  Object.assign(document.documentElement.dataset, {\n    theme: autoTheming ? autoTheme : theme,\n    autoTheming,\n    underlineLinks,\n    beta,\n    devMode,\n  });\n});\n","import { stripSlashes } from '@sveltia/utils/string';\nimport { get } from 'svelte/store';\n\nimport { getTokenPageURL, signIn, signOut } from '$lib/services/backends/git/gitea/auth';\nimport { commitChanges } from '$lib/services/backends/git/gitea/commits';\nimport {\n  BACKEND_LABEL,\n  BACKEND_NAME,\n  DEFAULT_API_ROOT,\n  DEFAULT_AUTH_PATH,\n  DEFAULT_AUTH_ROOT,\n} from '$lib/services/backends/git/gitea/constants';\nimport { fetchBlob, fetchFiles } from '$lib/services/backends/git/gitea/files';\nimport { getBaseURLs, repository } from '$lib/services/backends/git/gitea/repository';\nimport { apiConfig } from '$lib/services/backends/git/shared/api';\nimport { getRepoURL } from '$lib/services/backends/git/shared/repository';\nimport { cmsConfig } from '$lib/services/config';\nimport { prefs } from '$lib/services/user/prefs';\n\n/**\n * @import { ApiEndpointConfig, BackendService, RepositoryInfo } from '$lib/types/private';\n */\n\n/**\n * Initialize the Gitea/Forgejo backend.\n * @returns {RepositoryInfo | undefined} Repository info, or nothing when the configured backend is\n * not Gitea/Forgejo.\n */\nexport const init = () => {\n  const { backend } = get(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  } = 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    }),\n  );\n\n  if (get(prefs).devModeEnabled) {\n    // eslint-disable-next-line no-console\n    console.info('repositoryInfo', repository);\n  }\n\n  return repository;\n};\n\n/**\n * @type {BackendService}\n */\nexport default {\n  isGit: true,\n  name: BACKEND_NAME,\n  label: BACKEND_LABEL,\n  repository,\n  init,\n  signIn,\n  signOut,\n  fetchFiles,\n  fetchBlob,\n  commitChanges,\n};\n","export const BACKEND_NAME = 'github';\nexport const BACKEND_LABEL = 'GitHub';\n\nexport const DEFAULT_API_ROOT = 'https://api.github.com';\nexport const DEFAULT_AUTH_ROOT = 'https://api.netlify.com';\nexport const DEFAULT_AUTH_PATH = 'auth';\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 { get } from 'svelte/store';\n\nimport { BACKEND_NAME } from '$lib/services/backends/git/github/constants';\nimport { fetchAPI } from '$lib/services/backends/git/shared/api';\nimport { user } from '$lib/services/user';\n\n/**\n * @import { AuthTokens, User } from '$lib/types/private';\n */\n\n/**\n * @typedef {object} UserProfileResponse\n * @property {number} id User ID.\n * @property {string} name User’s full name.\n * @property {string} login User’s login name.\n * @property {string} email User’s email address.\n * @property {string} avatar_url URL to the user’s avatar image.\n * @property {string} html_url URL to the user’s profile page.\n */\n\n/**\n * Retrieve the authenticated user’s profile information from GitHub REST API.\n * @param {AuthTokens} tokens Authentication tokens.\n * @returns {Promise<User>} User information.\n * @see https://docs.github.com/en/rest/users/users#get-the-authenticated-user\n */\nexport const getUserProfile = async ({ token, refreshToken }) => {\n  const {\n    id,\n    name,\n    login,\n    email,\n    avatar_url: avatarURL,\n    html_url: profileURL,\n  } = /** @type {UserProfileResponse} */ (await fetchAPI('/user', { token, refreshToken }));\n\n  const _user = get(user);\n\n  // Update the tokens because these may have been renewed in `refreshAccessToken` while fetching\n  // the user info\n  if (_user?.token && _user.token !== token) {\n    token = _user.token;\n    refreshToken = _user.refreshToken;\n  }\n\n  return {\n    backendName: BACKEND_NAME,\n    id,\n    name,\n    login,\n    email,\n    avatarURL,\n    profileURL,\n    token,\n    refreshToken,\n  };\n};\n","import { 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 { get } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { fetchAPI, fetchGraphQL, graphqlVars } from '$lib/services/backends/git/shared/api';\nimport { REPOSITORY_INFO_PLACEHOLDER } from '$lib/services/backends/git/shared/repository';\nimport { user } from '$lib/services/user';\n\n/**\n * @import { RepositoryInfo } from '$lib/types/private';\n */\n\n/**\n * Placeholder for repository information.\n * @type {RepositoryInfo}\n */\nexport const repository = { ...REPOSITORY_INFO_PLACEHOLDER };\n\n/**\n * Generate base URLs for accessing the repository’s resources.\n * @param {string} repoURL The base URL of the repository.\n * @param {string} [branch] The branch name. Could be `undefined` if the branch is not specified in\n * the CMS configuration.\n * @returns {{ treeBaseURL: string, blobBaseURL: string }} An object containing the tree base URL\n * for browsing files, and the blob base URL for accessing file contents.\n */\nexport const getBaseURLs = (repoURL, branch) => ({\n  treeBaseURL: branch ? `${repoURL}/tree/${branch}` : repoURL,\n  blobBaseURL: branch ? `${repoURL}/blob/${branch}` : '',\n});\n\n/**\n * Check if the user has access to the current repository.\n * @throws {Error} If the user is not a collaborator of the repository.\n * @see https://docs.github.com/en/rest/collaborators/collaborators#check-if-a-user-is-a-repository-collaborator\n */\nexport const checkRepositoryAccess = async () => {\n  const { owner, repo } = repository;\n  const userName = /** @type {string} */ (get(user)?.login);\n\n  const { ok } = /** @type {Response} */ (\n    await fetchAPI(`/repos/${owner}/${repo}/collaborators/${encodeURIComponent(userName)}`, {\n      headers: { Accept: 'application/json' },\n      responseType: 'raw',\n    })\n  );\n\n  if (!ok) {\n    throw new Error('Not a collaborator of the repository', {\n      cause: new Error(get(_)('repository_no_access', { values: { repo } })),\n    });\n  }\n};\n\nconst FETCH_DEFAULT_BRANCH_NAME_QUERY = `\n  query($owner: String!, $repo: String!) {\n    repository(owner: $owner, name: $repo) {\n      defaultBranchRef {\n        name\n      }\n    }\n  }\n`;\n\n/**\n * Fetch the repository’s default branch name, which is typically `master` or `main`.\n * @returns {Promise<string>} Branch name.\n * @throws {Error} When the repository could not be found, or when the repository is empty.\n */\nexport const fetchDefaultBranchName = async () => {\n  const { repo, repoURL = '' } = repository;\n\n  const result = /** @type {{ repository: { defaultBranchRef?: { name: string } } }} */ (\n    await fetchGraphQL(FETCH_DEFAULT_BRANCH_NAME_QUERY)\n  );\n\n  if (!result.repository) {\n    throw new Error('Failed to retrieve the default branch name.', {\n      cause: new Error(get(_)('repository_not_found', { values: { repo } })),\n    });\n  }\n\n  const { name: branch } = result.repository.defaultBranchRef ?? {};\n\n  if (!branch) {\n    throw new Error('Failed to retrieve the default branch name.', {\n      cause: new Error(get(_)('repository_empty', { values: { repo } })),\n    });\n  }\n\n  Object.assign(repository, { branch }, getBaseURLs(repoURL, branch));\n  Object.assign(graphqlVars, { branch });\n\n  return branch;\n};\n","import { encodeBase64 } from '@sveltia/utils/file';\nimport { get } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { repository } from '$lib/services/backends/git/github/repository';\nimport { fetchGraphQL } from '$lib/services/backends/git/shared/api';\nimport { createCommitMessage } from '$lib/services/backends/git/shared/commits';\n\n/**\n * @import { CommitOptions, CommitResults, FileChange } from '$lib/types/private';\n */\n\n/**\n * @typedef {object} LastCommitResponse\n * @property {object} repository Repository information.\n * @property {object} repository.ref Reference information.\n * @property {object} repository.ref.target Target commit.\n * @property {object} repository.ref.target.history Commit history.\n * @property {{ oid: string, message: string }[]} repository.ref.target.history.nodes Nodes in the\n * commit history, containing the commit SHA-1 hash and message.\n */\n\nconst FETCH_LAST_COMMIT_QUERY = `\n  query($owner: String!, $repo: String!, $branch: String!) {\n    repository(owner: $owner, name: $repo) {\n      ref(qualifiedName: $branch) {\n        target {\n          ... on Commit {\n            history(first: 1) {\n              nodes {\n                oid\n                message\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n`;\n\n/**\n * Fetch the last commit on the repository.\n * @returns {Promise<{ hash: string, message: string }>} Commit’s SHA-1 hash and message.\n * @throws {Error} When the branch could not be found.\n */\nexport const fetchLastCommit = async () => {\n  const { repo, branch } = repository;\n  const result = /** @type {LastCommitResponse} */ (await fetchGraphQL(FETCH_LAST_COMMIT_QUERY));\n\n  if (!result.repository) {\n    throw new Error('Failed to retrieve the last commit hash.', {\n      cause: new Error(get(_)('repository_not_found', { values: { repo } })),\n    });\n  }\n\n  if (!result.repository.ref) {\n    throw new Error('Failed to retrieve the last commit hash.', {\n      cause: new Error(get(_)('branch_not_found', { values: { repo, branch } })),\n    });\n  }\n\n  const { oid: hash, message } = result.repository.ref.target.history.nodes[0];\n\n  return { hash, message };\n};\n\n/**\n * Save entries or assets remotely.\n * @param {FileChange[]} changes File changes to be saved.\n * @param {CommitOptions} options Commit options.\n * @returns {Promise<CommitResults>} Commit results, including the commit SHA and updated file SHAs.\n * @see https://github.blog/changelog/2021-09-13-a-simpler-api-for-authoring-commits/\n * @see https://docs.github.com/en/graphql/reference/mutations#createcommitonbranch\n */\nexport const commitChanges = async (changes, options) => {\n  const { owner, repo, branch } = repository;\n\n  const additions = await Promise.all(\n    changes\n      .filter(({ action }) => ['create', 'update', 'move'].includes(action))\n      .map(async ({ path, data }) => ({\n        path,\n        contents: await encodeBase64(data ?? ''),\n      })),\n  );\n\n  const deletions = changes\n    .filter(({ action }) => ['move', 'delete'].includes(action))\n    .map(({ previousPath, path }) => ({ path: previousPath ?? path }));\n\n  // Part of the query to fetch new file SHAs\n  const fileShaQuery = additions\n    .map(({ path }, index) => `file_${index}: file(path: ${JSON.stringify(path)}) { oid }`)\n    .join(' ');\n\n  const query = `\n    mutation($input: CreateCommitOnBranchInput!) {\n      createCommitOnBranch(input: $input) {\n        commit {\n          oid\n          committedDate\n          ${fileShaQuery}\n        }\n      }\n    }\n  `;\n\n  const input = {\n    branch: {\n      repositoryNameWithOwner: `${owner}/${repo}`,\n      branchName: branch,\n    },\n    expectedHeadOid: (await fetchLastCommit()).hash,\n    fileChanges: { additions, deletions },\n    message: { headline: createCommitMessage(changes, options) },\n  };\n\n  const {\n    createCommitOnBranch: { commit },\n  } = /** @type {{ createCommitOnBranch: { commit: Record<string, any> }}} */ (\n    await fetchGraphQL(query, { input })\n  );\n\n  return {\n    sha: commit.oid,\n    date: new Date(commit.committedDate),\n    files: Object.fromEntries(\n      additions.map(({ path }, index) => [path, { sha: commit[`file_${index}`]?.oid }]),\n    ),\n  };\n};\n","import { repository } from '$lib/services/backends/git/github/repository';\nimport { fetchAPI } from '$lib/services/backends/git/shared/api';\n\n/**\n * Manually trigger a deployment with GitHub Actions by dispatching the `repository_dispatch` event.\n * @returns {Promise<Response>} Response.\n * @see https://docs.github.com/en/rest/repos/repos#create-a-repository-dispatch-event\n */\nexport const triggerDeployment = async () => {\n  const { owner, repo } = repository;\n\n  return /** @type {Promise<Response>} */ (\n    fetchAPI(`/repos/${owner}/${repo}/dispatches`, {\n      method: 'POST',\n      body: { event_type: 'sveltia-cms-publish' },\n      responseType: 'raw',\n    })\n  );\n};\n","import { getPathInfo } from '@sveltia/utils/file';\nimport { sleep } from '@sveltia/utils/misc';\nimport mime from 'mime';\n\nimport { fetchLastCommit } from '$lib/services/backends/git/github/commits';\nimport {\n  checkRepositoryAccess,\n  fetchDefaultBranchName,\n  repository,\n} from '$lib/services/backends/git/github/repository';\nimport { fetchAPI, fetchGraphQL } from '$lib/services/backends/git/shared/api';\nimport { fetchAndParseFiles } from '$lib/services/backends/git/shared/fetch';\nimport { dataLoadedProgress } from '$lib/services/contents';\n\n/**\n * @import {\n * Asset,\n * BaseFileListItem,\n * BaseFileListItemProps,\n * RepositoryContentsMap,\n * } from '$lib/types/private';\n */\n\n/**\n * Fetch the repository’s complete file list, and return it in the canonical format.\n * @param {string} [lastHash] The last commit’s SHA-1 hash.\n * @returns {Promise<BaseFileListItemProps[]>} File list.\n */\nexport const fetchFileList = async (lastHash) => {\n  const { owner, repo, branch } = repository;\n\n  const result =\n    /** @type {{ tree: { type: string, path: string, sha: string, size: number }[] }} */ (\n      await fetchAPI(`/repos/${owner}/${repo}/git/trees/${lastHash ?? branch}?recursive=1`)\n    );\n\n  return result.tree\n    .filter(({ type }) => type === 'blob')\n    .map(({ path, sha, size }) => ({ path, sha, size, name: getPathInfo(path).basename }));\n};\n\n/**\n * Get a query string for fetching file contents and metadata from the repository.\n * @param {any[]} chunk Sliced `fetchingFileList`.\n * @param {number} startIndex Start index.\n * @returns {string} Query string.\n */\nexport const getFileContentsQuery = (chunk, startIndex) => {\n  const innerQuery = chunk\n    .map(({ type, path, sha }, i) => {\n      const str = [];\n      const index = startIndex + i;\n\n      if (type !== 'asset') {\n        str.push(`\n          content_${index}: object(oid: ${JSON.stringify(sha)}) {\n            ... on Blob { text }\n          }\n        `);\n      }\n\n      str.push(`\n        commit_${index}: ref(qualifiedName: $branch) {\n          target {\n            ... on Commit {\n              history(first: 1, path: ${JSON.stringify(path)}) {\n                nodes {\n                  author {\n                    name\n                    email\n                    user {\n                      id: databaseId\n                      login\n                    }\n                  }\n                  committedDate\n                }\n              }\n            }\n          }\n        }\n      `);\n\n      return str.join('');\n    })\n    .join('');\n\n  return `\n    query($owner: String!, $repo: String!, $branch: String!) {\n      repository(owner: $owner, name: $repo) {\n        ${innerQuery}\n      }\n    }\n  `;\n};\n\n/**\n * Parse the file contents from the API response.\n * @param {BaseFileListItem[]} fetchingFiles Base file list.\n * @param {Record<string, any>} results Results from the API.\n * @returns {Promise<RepositoryContentsMap>} Parsed file contents map.\n */\nexport const parseFileContents = async (fetchingFiles, results) => {\n  const entries = fetchingFiles.map(({ path, sha, size }, index) => {\n    const {\n      author: { name, email, user: _user },\n      committedDate,\n    } = results[`commit_${index}`].target.history.nodes[0];\n\n    const data = {\n      sha,\n      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 } 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';\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  } = 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    }),\n  );\n\n  Object.assign(graphqlVars, { owner, repo, branch });\n\n  if (get(prefs).devModeEnabled) {\n    // eslint-disable-next-line no-console\n    console.info('repositoryInfo', repository);\n  }\n\n  return repository;\n};\n\n/**\n * @type {BackendService}\n */\nexport default {\n  isGit: true,\n  name: BACKEND_NAME,\n  label: BACKEND_LABEL,\n  repository,\n  statusDashboardURL: STATUS_DASHBOARD_URL,\n  checkStatus,\n  init,\n  signIn,\n  signOut,\n  fetchFiles,\n  fetchBlob,\n  commitChanges,\n  triggerDeployment,\n};\n","export const BACKEND_NAME = 'gitlab';\nexport const BACKEND_LABEL = 'GitLab';\n\nexport const DEFAULT_API_ROOT = 'https://gitlab.com/api/v4';\nexport const DEFAULT_AUTH_ROOT = 'https://gitlab.com';\nexport const DEFAULT_AUTH_PATH = 'oauth/authorize';\n","import { get } from 'svelte/store';\n\nimport { BACKEND_NAME } from '$lib/services/backends/git/gitlab/constants';\nimport { fetchAPI } from '$lib/services/backends/git/shared/api';\nimport { user } from '$lib/services/user';\n\n/**\n * @import { AuthTokens, User } from '$lib/types/private';\n */\n\n/**\n * @typedef {object} UserProfileResponse\n * @property {number} id User ID.\n * @property {string} name User’s full name.\n * @property {string} username User’s login name.\n * @property {string} email User’s email address.\n * @property {string} avatar_url URL to the user’s avatar image.\n * @property {string} web_url URL to the user’s profile page.\n */\n\n/**\n * Retrieve the authenticated user’s profile information from GitLab REST API.\n * @param {AuthTokens} tokens Authentication tokens.\n * @returns {Promise<User>} User information.\n * @see https://docs.gitlab.com/api/users.html#list-current-user\n */\nexport const getUserProfile = async ({ token, refreshToken }) => {\n  const {\n    id,\n    name,\n    username: login,\n    email,\n    avatar_url: avatarURL,\n    web_url: profileURL,\n  } = /** @type {UserProfileResponse} */ (await fetchAPI('/user', { token, refreshToken }));\n\n  const _user = get(user);\n\n  // Update the tokens because these may have been renewed in `refreshAccessToken` while fetching\n  // the user info\n  if (_user?.token && _user.token !== token) {\n    token = _user.token;\n    refreshToken = _user.refreshToken;\n  }\n\n  return {\n    backendName: BACKEND_NAME,\n    id,\n    name,\n    login,\n    email,\n    avatarURL,\n    profileURL,\n    token,\n    refreshToken,\n  };\n};\n","import { 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 { get } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { fetchAPI, fetchGraphQL, graphqlVars } from '$lib/services/backends/git/shared/api';\nimport { REPOSITORY_INFO_PLACEHOLDER } from '$lib/services/backends/git/shared/repository';\nimport { user } from '$lib/services/user';\n\n/**\n * @import { RepositoryInfo } from '$lib/types/private';\n */\n\n/** @type {RepositoryInfo} */\nexport const repository = { ...REPOSITORY_INFO_PLACEHOLDER };\n\n/**\n * Generate base URLs for accessing the repository’s resources.\n * @param {string} repoURL The base URL of the repository.\n * @param {string} [branch] The branch name. Could be `undefined` if the branch is not specified in\n * the CMS configuration.\n * @returns {{ treeBaseURL: string, blobBaseURL: string }} An object containing the tree base URL\n * for browsing files, and the blob base URL for accessing file contents.\n */\nexport const getBaseURLs = (repoURL, branch) => ({\n  treeBaseURL: branch ? `${repoURL}/-/tree/${branch}` : repoURL,\n  blobBaseURL: branch ? `${repoURL}/-/blob/${branch}` : '',\n});\n\n/**\n * Check if the user has access to the current repository.\n * @throws {Error} If the user is not a collaborator of the repository.\n * @see https://docs.gitlab.com/api/members.html#get-a-member-of-a-group-or-project-including-inherited-and-invited-members\n */\nexport const checkRepositoryAccess = async () => {\n  const { owner, repo } = repository;\n  const userId = /** @type {number} */ (get(user)?.id);\n\n  const { ok } = /** @type {Response} */ (\n    await fetchAPI(`/projects/${encodeURIComponent(`${owner}/${repo}`)}/members/all/${userId}`, {\n      headers: { Accept: 'application/json' },\n      responseType: 'raw',\n    })\n  );\n\n  if (!ok) {\n    throw new Error('Not a collaborator of the repository', {\n      cause: new Error(get(_)('repository_no_access', { values: { repo } })),\n    });\n  }\n};\n\nconst FETCH_DEFAULT_BRANCH_NAME_QUERY = `\n  query($fullPath: ID!) {\n    project(fullPath: $fullPath) {\n      repository {\n        rootRef\n      }\n    }\n  }\n`;\n\n/**\n * Fetch the repository’s default branch name, which is typically `master` or `main`.\n * @returns {Promise<string>} Branch name.\n * @throws {Error} When the repository could not be found, or when the repository is empty.\n * @see https://docs.gitlab.com/api/graphql/reference/#repository\n */\nexport const fetchDefaultBranchName = async () => {\n  const { repo, repoURL = '' } = repository;\n\n  const result = /** @type {{ project: { repository?: { rootRef: string } } }} */ (\n    await fetchGraphQL(FETCH_DEFAULT_BRANCH_NAME_QUERY)\n  );\n\n  if (!result.project) {\n    throw new Error('Failed to retrieve the default branch name.', {\n      cause: new Error(get(_)('repository_not_found', { values: { repo } })),\n    });\n  }\n\n  const { rootRef: branch } = result.project.repository ?? {};\n\n  if (!branch) {\n    throw new Error('Failed to retrieve the default branch name.', {\n      cause: new Error(get(_)('repository_empty', { values: { repo } })),\n    });\n  }\n\n  Object.assign(repository, { branch }, getBaseURLs(repoURL, branch));\n  Object.assign(graphqlVars, { branch });\n\n  return branch;\n};\n","import { encodeBase64 } from '@sveltia/utils/file';\nimport { get } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { repository } from '$lib/services/backends/git/gitlab/repository';\nimport { fetchAPI, fetchGraphQL } from '$lib/services/backends/git/shared/api';\nimport { createCommitMessage } from '$lib/services/backends/git/shared/commits';\nimport { getGitHash } from '$lib/services/utils/file';\n\n/**\n * @import { CommitOptions, CommitResults, FileChange } from '$lib/types/private';\n */\n\n/**\n * @typedef {object} FetchLastCommitResponse\n * @property {object} project Project information.\n * @property {object} project.repository Repository information.\n * @property {object} project.repository.tree Tree information.\n * @property {object} project.repository.tree.lastCommit Last commit information.\n * @property {string} project.repository.tree.lastCommit.sha Commit SHA-1 hash.\n * @property {string} project.repository.tree.lastCommit.message Commit message.\n */\n\n/**\n * @typedef {object} CommitResponse\n * @property {string} id Commit SHA-1 hash.\n * @property {string} committed_date Commit date in ISO 8601 format.\n */\n\nconst FETCH_LAST_COMMIT_QUERY = `\n  query($fullPath: ID!, $branch: String!) {\n    project(fullPath: $fullPath) {\n      repository {\n        tree(ref: $branch) {\n          lastCommit {\n            sha\n            message\n          }\n        }\n      }\n    }\n  }\n`;\n\n/**\n * Fetch the last commit on the repository.\n * @returns {Promise<{ hash: string, message: string }>} Commit’s SHA-1 hash and message.\n * @throws {Error} When the branch could not be found.\n * @see https://docs.gitlab.com/api/graphql/reference/#tree\n */\nexport const fetchLastCommit = async () => {\n  const { repo, branch } = repository;\n\n  const result = /** @type {FetchLastCommitResponse} */ (\n    await fetchGraphQL(FETCH_LAST_COMMIT_QUERY)\n  );\n\n  if (!result.project) {\n    throw new Error('Failed to retrieve the last commit hash.', {\n      cause: new Error(get(_)('repository_not_found', { values: { repo } })),\n    });\n  }\n\n  const { lastCommit } = result.project.repository.tree ?? {};\n\n  if (!lastCommit) {\n    throw new Error('Failed to retrieve the last commit hash.', {\n      cause: new Error(get(_)('branch_not_found', { values: { repo, branch } })),\n    });\n  }\n\n  const { sha: hash, message } = lastCommit;\n\n  return { hash, message };\n};\n\n/**\n * Save entries or assets remotely. Note that the `commitCreate` GraphQL mutation is broken and\n * images cannot be uploaded properly, so we use the REST API instead.\n * @param {FileChange[]} changes File changes to be saved.\n * @param {CommitOptions} options Commit options.\n * @returns {Promise<CommitResults>} Commit results, including the commit SHA and updated file SHAs.\n * @see https://docs.gitlab.com/api/commits.html#create-a-commit-with-multiple-files-and-actions\n * @see https://gitlab.com/gitlab-org/gitlab/-/merge_requests/31102\n * @see https://docs.gitlab.com/api/graphql/reference/#mutationcommitcreate\n * @see https://forum.gitlab.com/t/how-to-commit-a-image-via-gitlab-commit-api/26632/4\n */\nexport const commitChanges = async (changes, options) => {\n  const { owner, repo, branch } = repository;\n\n  const actions = await Promise.all(\n    changes.map(async ({ action, path, previousPath, data = '' }) => ({\n      action,\n      content: typeof data === 'string' ? data : await encodeBase64(data),\n      encoding: typeof data === 'string' ? 'text' : 'base64',\n      file_path: path,\n      previous_path: previousPath,\n    })),\n  );\n\n  const { id: sha, committed_date: committedDate } = /** @type {CommitResponse} */ (\n    await fetchAPI(`/projects/${encodeURIComponent(`${owner}/${repo}`)}/repository/commits`, {\n      method: 'POST',\n      body: {\n        branch,\n        commit_message: createCommitMessage(changes, options),\n        actions,\n      },\n    })\n  );\n\n  // Calculate the SHA-1 hash for each file because the GitLab REST API does not return file SHAs\n  const entries = await Promise.all(\n    changes.map(async ({ path, data }) =>\n      data === undefined ? null : [path, { sha: await getGitHash(data) }],\n    ),\n  );\n\n  return {\n    sha,\n    date: new Date(committedDate),\n    files: Object.fromEntries(entries.filter((entry) => !!entry)),\n  };\n};\n","/* eslint-disable no-await-in-loop */\n\nimport { getPathInfo } from '@sveltia/utils/file';\n\nimport { fetchLastCommit } from '$lib/services/backends/git/gitlab/commits';\nimport {\n  checkRepositoryAccess,\n  fetchDefaultBranchName,\n  repository,\n} from '$lib/services/backends/git/gitlab/repository';\nimport { fetchAPI, fetchGraphQL } from '$lib/services/backends/git/shared/api';\nimport { fetchAndParseFiles } from '$lib/services/backends/git/shared/fetch';\nimport { dataLoadedProgress } from '$lib/services/contents';\n\n/**\n * @import {\n * Asset,\n * BaseFileListItem,\n * BaseFileListItemProps,\n * RepositoryContentsMap,\n * } from '$lib/types/private';\n */\n\n/**\n * @typedef {object} GitLabUserInfo\n * @property {string} [id] GitLab user ID.\n * @property {string} [username] GitLab user username.\n */\n\n/**\n * @typedef {object} GitLabCommit\n * @property {GitLabUserInfo | null} author Commit author’s GitLab user info.\n * @property {string} authorName Commit author’s full name.\n * @property {string} authorEmail Commit author’s email.\n * @property {string} committedDate Committed date.\n */\n\n/**\n * @typedef {object} FetchFileListResponse\n * @property {object} project Project information.\n * @property {object} project.repository Repository information.\n * @property {object} project.repository.tree Tree information.\n * @property {object} project.repository.tree.blobs Blobs information.\n * @property {{ type: string, path: string, sha: string }[]} project.repository.tree.blobs.nodes\n * List of file blobs.\n * @property {object} project.repository.tree.blobs.pageInfo Pagination information.\n * @property {string} project.repository.tree.blobs.pageInfo.endCursor Cursor for the next page.\n * @property {boolean} project.repository.tree.blobs.pageInfo.hasNextPage Whether there are more\n * pages to fetch.\n */\n\n/**\n * @typedef {object} BlobItem\n * @property {string} [size] Size of the blob in bytes.\n * @property {string} [rawTextBlob] Raw text content of the blob.\n */\n\n/**\n * @typedef {object} FetchBlobsResponse\n * @property {object} project Project information.\n * @property {object} project.repository Repository information.\n * @property {object} project.repository.blobs Blobs information.\n * @property {BlobItem[]} project.repository.blobs.nodes List of file blobs with their sizes and raw\n * text contents.\n */\n\n/**\n * @typedef {object} FetchCommitsResponse\n * @property {object} project Project information.\n * @property {Record<string, { lastCommit: GitLabCommit }>} project.repository Mapping of file paths\n * to their last commit information.\n */\n\nconst FETCH_FILE_LIST_QUERY = `\n  query($fullPath: ID!, $branch: String!, $cursor: String!) {\n    project(fullPath: $fullPath) {\n      repository {\n        tree(ref: $branch, recursive: true) {\n          blobs(after: $cursor) {\n            nodes {\n              type\n              path\n              sha\n            }\n            pageInfo {\n              endCursor\n              hasNextPage\n            }\n          }\n        }\n      }\n    }\n  }\n`;\n\n/**\n * Fetch the repository’s complete file list, and return it in the canonical format.\n * @returns {Promise<BaseFileListItemProps[]>} File list.\n * @see https://docs.gitlab.com/api/graphql/reference/index.html#repositorytree\n * @see https://stackoverflow.com/questions/18952935/how-to-get-subfolders-and-files-using-gitlab-api\n */\nexport const fetchFileList = async () => {\n  /** @type {{ type: string, path: string, sha: string }[]} */\n  const blobs = [];\n  let cursor = '';\n\n  // Since GitLab has a limit of 100 records per query, use pagination to fetch all the files\n  for (;;) {\n    const result = /** @type {FetchFileListResponse} */ (\n      await fetchGraphQL(FETCH_FILE_LIST_QUERY, { cursor })\n    );\n\n    const {\n      nodes,\n      pageInfo: { endCursor, hasNextPage },\n    } = result.project.repository.tree.blobs;\n\n    blobs.push(...nodes);\n    cursor = endCursor;\n\n    if (!hasNextPage) {\n      break;\n    }\n  }\n\n  // The `size` is not available here; it will be retrieved in `fetchFileContents` below\n  return blobs\n    .filter(({ type }) => type === 'blob')\n    .map(({ path, sha }) => ({ path, sha, size: 0, name: getPathInfo(path).basename }));\n};\n\nconst FETCH_BLOBS_QUERY = `\n  query($fullPath: ID!, $branch: String!, $paths: [String!]!) {\n    project(fullPath: $fullPath) {\n      repository {\n        blobs(ref: $branch, paths: $paths) {\n          nodes {\n            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    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 { 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","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 } 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';\n\n/**\n * @import { ApiEndpointConfig, BackendService, RepositoryInfo } from '$lib/types/private';\n */\n\n/**\n * Initialize the GitLab backend.\n * @returns {RepositoryInfo | undefined} Repository info, or nothing when the configured backend is\n * not GitLab.\n */\nexport const init = () => {\n  const { backend } = get(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  } = backend;\n\n  /**\n   * In GitLab terminology, an owner is called a namespace, and a repository is called a project. A\n   * namespace can contain a group and a subgroup concatenated with a `/` so we cannot simply use\n   * `split('/')` here. A project name should not contain a `/`.\n   * @see https://docs.gitlab.com/user/namespace/\n   * @see https://gitlab.com/gitlab-org/gitlab/-/merge_requests/80055\n   */\n  const { owner, repo } =\n    /** @type {string} */ (projectPath).match(/(?<owner>.+)\\/(?<repo>[^/]+)$/)?.groups ?? {};\n\n  const repoPath = `${owner}/${repo}`;\n  const authURL = `${stripSlashes(authRoot)}/${stripSlashes(authPath)}`;\n  const repoURL = getRepoURL(restApiRoot, repoPath);\n\n  Object.assign(\n    repository,\n    /** @type {RepositoryInfo} */ ({\n      service: BACKEND_NAME,\n      label: BACKEND_LABEL,\n      owner,\n      repo,\n      branch,\n      repoURL,\n      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    }),\n  );\n\n  Object.assign(graphqlVars, {\n    fullPath: repoPath,\n    branch,\n  });\n\n  if (get(prefs).devModeEnabled) {\n    // eslint-disable-next-line no-console\n    console.info('repositoryInfo', repository);\n  }\n\n  return repository;\n};\n\n/**\n * @type {BackendService}\n */\nexport default {\n  isGit: true,\n  name: BACKEND_NAME,\n  label: BACKEND_LABEL,\n  repository,\n  statusDashboardURL: STATUS_DASHBOARD_URL,\n  checkStatus,\n  init,\n  signIn,\n  signOut,\n  fetchFiles,\n  fetchBlob,\n  commitChanges,\n};\n","/* 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 iframe origin.\n */\nexport const FRAME_ORIGIN = 'https://console.cloudinary.com';\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 | undefined} Configuration object.\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) {\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 { cloud_name: cloudName, api_key: apiKey } = getLibraryOptions()?.config ?? {};\n\n  return { cloudName, apiKey };\n};\n\n/**\n * Check if Cloudinary integration is enabled.\n * @returns {boolean} True if enabled, false otherwise.\n */\nexport const isEnabled = () => {\n  const { cloudName, apiKey } = getCloudConfig();\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';\n\nimport { getAssetKind } from '$lib/services/assets/kinds';\n\n/**\n * @import { ExternalAsset, MediaLibraryFetchOptions } from '$lib/types/private';\n * @import { S3MediaLibrary } from '$lib/types/public';\n */\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 {S3MediaLibrary} 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 {S3MediaLibrary} 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 {S3MediaLibrary} 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 {S3MediaLibrary} 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 {S3MediaLibrary} 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        'x-amz-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 { get } from 'svelte/store';\n\nimport { cmsConfig } from '$lib/services/config';\n\nimport { listS3Objects, searchS3Objects, uploadToS3 } 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 | undefined} Configuration object.\n */\nexport const getLibraryOptions = (config = get(cmsConfig)) =>\n  config?.media_libraries?.aws_s3 ??\n  (config?.media_library?.name === 'aws_s3'\n    ? /** @type {S3MediaLibrary} */ (config?.media_library)\n    : undefined);\n\n/**\n * Check if Amazon S3 integration is enabled.\n * @returns {boolean} True if enabled, false otherwise.\n */\nexport const isEnabled = () => {\n  const options = getLibraryOptions();\n\n  return !!(options?.access_key_id && options?.bucket && options?.region);\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) => {\n  const { fieldConfig } = options;\n  const libOptions = getLibraryOptions(fieldConfig) ?? getLibraryOptions();\n\n  if (!libOptions) {\n    return Promise.reject(new Error('Amazon S3 configuration is not available'));\n  }\n\n  return listS3Objects(libOptions, options);\n};\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) => {\n  const { fieldConfig } = options;\n  const libOptions = getLibraryOptions(fieldConfig) ?? getLibraryOptions();\n\n  if (!libOptions) {\n    return Promise.reject(new Error('Amazon S3 configuration is not available'));\n  }\n\n  return searchS3Objects(query, libOptions, options);\n};\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) => {\n  const { fieldConfig } = options;\n  const libOptions = getLibraryOptions(fieldConfig) ?? getLibraryOptions();\n\n  if (!libOptions) {\n    return Promise.reject(new Error('Amazon S3 configuration is not available'));\n  }\n\n  return uploadToS3(files, libOptions, options);\n};\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 { get } from 'svelte/store';\n\nimport { cmsConfig } from '$lib/services/config';\n\nimport { listS3Objects, searchS3Objects, uploadToS3 } 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 Cloudflare R2 library options from site config.\n * @internal\n * @param {CmsConfig | MediaField} [config] CMS configuration or field configuration.\n * @returns {S3MediaLibrary | undefined} Configuration object.\n */\nexport const getLibraryOptions = (config = get(cmsConfig)) =>\n  config?.media_libraries?.cloudflare_r2 ??\n  (config?.media_library?.name === 'cloudflare_r2'\n    ? /** @type {S3MediaLibrary} */ (config?.media_library)\n    : undefined);\n\n/**\n * Check if Cloudflare R2 integration is enabled.\n * @returns {boolean} True if enabled, false otherwise.\n */\nexport const isEnabled = () => {\n  const options = getLibraryOptions();\n\n  return !!(options?.access_key_id && options?.bucket && options?.account_id);\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) => {\n  const { fieldConfig } = options;\n  const libOptions = getLibraryOptions(fieldConfig) ?? getLibraryOptions();\n\n  if (!libOptions) {\n    return Promise.reject(new Error('Cloudflare R2 configuration is not available'));\n  }\n\n  // R2 uses auto region\n  const config = {\n    ...libOptions,\n    region: 'auto',\n    endpoint: `https://${libOptions.account_id}.r2.cloudflarestorage.com`,\n  };\n\n  return listS3Objects(config, options);\n};\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) => {\n  const { fieldConfig } = options;\n  const libOptions = getLibraryOptions(fieldConfig) ?? getLibraryOptions();\n\n  if (!libOptions) {\n    return Promise.reject(new Error('Cloudflare R2 configuration is not available'));\n  }\n\n  // R2 uses auto region\n  const config = {\n    ...libOptions,\n    region: 'auto',\n    endpoint: `https://${libOptions.account_id}.r2.cloudflarestorage.com`,\n  };\n\n  return searchS3Objects(query, config, options);\n};\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) => {\n  const { fieldConfig } = options;\n  const libOptions = getLibraryOptions(fieldConfig) ?? getLibraryOptions();\n\n  if (!libOptions) {\n    return Promise.reject(new Error('Cloudflare R2 configuration is not available'));\n  }\n\n  // R2 uses auto region\n  const config = {\n    ...libOptions,\n    region: 'auto',\n    endpoint: `https://${libOptions.account_id}.r2.cloudflarestorage.com`,\n  };\n\n  return uploadToS3(files, config, options);\n};\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 { get } from 'svelte/store';\n\nimport { cmsConfig } from '$lib/services/config';\n\nimport { listS3Objects, searchS3Objects, uploadToS3 } 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 | undefined} Configuration object.\n */\nexport const getLibraryOptions = (config = get(cmsConfig)) =>\n  config?.media_libraries?.digitalocean_spaces ??\n  (config?.media_library?.name === 'digitalocean_spaces'\n    ? /** @type {S3MediaLibrary} */ (config?.media_library)\n    : undefined);\n\n/**\n * Check if DigitalOcean Spaces integration is enabled.\n * @returns {boolean} True if enabled, false otherwise.\n */\nexport const isEnabled = () => {\n  const options = getLibraryOptions();\n\n  return !!(options?.access_key_id && options?.bucket && options?.region);\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) => {\n  const { fieldConfig } = options;\n  const libOptions = getLibraryOptions(fieldConfig) ?? getLibraryOptions();\n\n  if (!libOptions) {\n    return Promise.reject(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  const config = {\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  return listS3Objects(config, options);\n};\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) => {\n  const { fieldConfig } = options;\n  const libOptions = getLibraryOptions(fieldConfig) ?? getLibraryOptions();\n\n  if (!libOptions) {\n    return Promise.reject(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  const config = {\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  return searchS3Objects(query, config, options);\n};\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) => {\n  const { fieldConfig } = options;\n  const libOptions = getLibraryOptions(fieldConfig) ?? getLibraryOptions();\n\n  if (!libOptions) {\n    return Promise.reject(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  const config = {\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  return uploadToS3(files, config, options);\n};\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","/* 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 | undefined} Configuration object.\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 * @returns {string | undefined} Public key.\n */\nexport const getPublicKey = () => getLibraryOptions()?.config?.publicKey;\n/**\n * Check if Uploadcare integration is enabled.\n * @returns {boolean} True if enabled, false otherwise.\n */\nexport const isEnabled = () => !!getPublicKey();\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 {\n    settings: { autoFilename = false, defaultOperations = undefined } = {},\n    config: { cdnBase = undefined } = {},\n  } = getLibraryOptions(fieldConfig) ?? getLibraryOptions() ?? {};\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 publicKey = getPublicKey();\n\n  if (!publicKey) {\n    return Promise.reject(new Error('Uploadcare public key is not configured'));\n  }\n\n  const { kind, fieldConfig, apiKey: secretKey } = options;\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 publicKey = getPublicKey();\n\n  if (!publicKey) {\n    return Promise.reject(new Error('Uploadcare public key is not configured'));\n  }\n\n  const { fieldConfig, apiKey: secretKey } = options;\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 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  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 { 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 * 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 { 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","/**\n * @import {\n * RasterImageConversionFormat,\n * RasterImageFormat,\n * VectorImageFormat,\n * } from '$lib/types/public';\n */\n\n/** @type {RasterImageFormat[]} */\nexport const RASTER_IMAGE_FORMATS = ['avif', 'gif', 'jpeg', 'png', 'webp'];\nexport const RASTER_IMAGE_TYPES = RASTER_IMAGE_FORMATS.map((format) => `image/${format}`);\nexport const RASTER_IMAGE_EXTENSION_REGEX = /\\b(?:avif|gif|jpe?g|png|webp)$/i;\n\n/** @type {VectorImageFormat[]} */\nexport const VECTOR_IMAGE_FORMATS = ['svg'];\nexport const VECTOR_IMAGE_TYPES = ['image/svg+xml'];\nexport const VECTOR_IMAGE_EXTENSION_REGEX = /\\b(?:svg)$/i;\n\nexport const SUPPORTED_IMAGE_FORMATS = [...RASTER_IMAGE_FORMATS, ...VECTOR_IMAGE_FORMATS];\nexport const SUPPORTED_IMAGE_TYPES = [...RASTER_IMAGE_TYPES, ...VECTOR_IMAGE_TYPES];\n\n/** @type {RasterImageConversionFormat[]} */\nexport const RASTER_IMAGE_CONVERSION_FORMATS = ['webp'];\n","import { loadModule } from '$lib/services/app/dependencies';\nimport { RASTER_IMAGE_CONVERSION_FORMATS } from '$lib/services/utils/media/image';\n\n/** @type {Record<string, boolean>} */\nconst encodingSupportMap = {};\n\n/**\n * Check if the browser supports `canvas.convertToBlob()` encoding for the given format. Safari\n * doesn’t support native WebP encoding, so this returns `false` if the `format` is `webp`.\n * @param {string} format Format, like `webp`.\n * @returns {Promise<boolean>} Result.\n * @see https://bugs.webkit.org/show_bug.cgi?id=183257\n */\nexport const checkIfEncodingIsSupported = async (format) => {\n  if (format in encodingSupportMap) {\n    return encodingSupportMap[format];\n  }\n\n  const type = `image/${format}`;\n  const canvas = new OffscreenCanvas(1, 1);\n  // Need this for Chrome for some reason\n  // eslint-disable-next-line no-unused-vars\n  const context = /** @type {OffscreenCanvasRenderingContext2D} */ (canvas.getContext('2d'));\n  const blob = await canvas.convertToBlob({ type });\n  const result = blob.type === type;\n\n  encodingSupportMap[format] = result;\n\n  return result;\n};\n\n/**\n * Export Canvas data as an image blob. If the browser doesn’t support native encoding for the given\n * format (e.g. WebP on Safari), use the jSquash library as fallback.\n * @param {OffscreenCanvas} canvas Canvas to be exported.\n * @param {object} [options] Options.\n * @param {string} [options.format] Format, like `webp`.\n * @param {number} [options.quality] Image quality between 0 and 100.\n * @returns {Promise<Blob>} Image blob.\n * @see https://github.com/jamsinclair/jSquash\n */\nexport const exportCanvasAsBlob = async (canvas, { format = 'webp', quality = 85 } = {}) => {\n  const type = `image/${format}`;\n\n  if (\n    !(await checkIfEncodingIsSupported(format)) &&\n    /** @type {string[]} */ (RASTER_IMAGE_CONVERSION_FORMATS).includes(format)\n  ) {\n    const context = /** @type {OffscreenCanvasRenderingContext2D} */ (canvas.getContext('2d'));\n    const imageData = context.getImageData(0, 0, canvas.width, canvas.height);\n\n    try {\n      /** @type {import('@jsquash/webp').encode} */\n      const encode = (await loadModule(`@jsquash/${format}`, 'encode.js?module')).default;\n      const buffer = await encode(imageData, { quality });\n\n      return new Blob([buffer], { type });\n    } catch {\n      //\n    }\n  }\n\n  return canvas.convertToBlob({ type, quality: quality / 100 });\n};\n","/**\n * @import { ImageFitOption, MediaDimensions } from '$lib/types/private';\n */\n\n/**\n * Calculate the size of resized canvas.\n * @param {MediaDimensions} source Source dimensions.\n * @param {{ width?: number, height?: number, fit?: ImageFitOption }} [target] Target dimensions and\n * fit option.\n * @returns {{ scale: number, width: number, height: number }} Scale and new width/height.\n */\nexport const calculateResize = (\n  { width: originalWidth, height: originalHeight },\n  {\n    width: targetWidth = originalWidth,\n    height: targetHeight = originalHeight,\n    fit = 'scale-down',\n  } = {},\n) => {\n  const original = { scale: 1, width: originalWidth, height: originalHeight };\n\n  if (originalWidth === targetHeight && originalHeight === targetHeight) {\n    return original;\n  }\n\n  const isLandscape = originalWidth > originalHeight;\n  const isSmaller = originalWidth < targetHeight || originalHeight < targetHeight;\n  let scale = 1;\n  let newWidth = 0;\n  let newHeight = 0;\n\n  if (fit === 'scale-down') {\n    if (isSmaller) {\n      return original;\n    }\n\n    fit = 'contain';\n  }\n\n  if (fit === 'contain') {\n    if (isLandscape) {\n      if (targetWidth > targetHeight) {\n        scale = targetWidth / originalWidth;\n        newWidth = targetWidth;\n      } else {\n        scale = targetHeight / originalWidth;\n        newWidth = targetHeight;\n      }\n\n      newHeight = originalHeight * scale;\n    } else {\n      if (targetWidth > targetHeight) {\n        scale = targetHeight / originalHeight;\n        newHeight = targetHeight;\n      } else {\n        scale = targetWidth / originalHeight;\n        newHeight = targetWidth;\n      }\n\n      newWidth = originalWidth * scale;\n    }\n  }\n\n  return { scale, width: newWidth, height: newHeight };\n};\n\n/**\n * Resize a Canvas based on the given dimension.\n * @param {HTMLCanvasElement | OffscreenCanvas} canvas Canvas to be resized.\n * @param {MediaDimensions} source Source dimensions.\n * @param {{ width?: number, height?: number, fit?: ImageFitOption }} [target] Target dimensions and\n * fit option.\n * @returns {{ scale: number, width: number, height: number }} Scale and new width/height.\n */\nexport const resizeCanvas = (canvas, source, target) => {\n  const { scale, width, height } = calculateResize(source, target);\n\n  canvas.width = width;\n  canvas.height = height;\n\n  return { scale, width, height };\n};\n","import { loadModule } from '$lib/services/app/dependencies';\nimport { exportCanvasAsBlob } from '$lib/services/utils/media/image/encode';\nimport { resizeCanvas } from '$lib/services/utils/media/image/resize';\n\n/**\n * @import { InternalImageTransformationOptions } from '$lib/types/private';\n */\n\n/**\n * Create an image source from a Blob URL. This function creates an `<img>` element, waits for it to\n * load, and returns the image element along with its natural dimensions.\n * @param {object} args Arguments.\n * @param {File | Blob} args.blob File or blob to be converted to an image source.\n * @returns {Promise<{ source: CanvasImageSource, naturalWidth: number, naturalHeight: number }>}\n * Image element and its natural dimensions.\n */\nexport const createImageSource = async ({ blob }) => {\n  const blobURL = URL.createObjectURL(blob);\n  const image = new Image();\n\n  return new Promise((resolve) => {\n    image.addEventListener(\n      'load',\n      () => {\n        resolve({\n          source: image,\n          naturalWidth: image.naturalWidth,\n          naturalHeight: image.naturalHeight,\n        });\n\n        URL.revokeObjectURL(blobURL);\n      },\n      { once: true },\n    );\n    image.src = blobURL;\n  });\n};\n\n/**\n * Create a video source from a Blob URL. This function creates a `<video>` element, waits for it to\n * be ready, and returns the video element along with its natural dimensions.\n * @param {object} args Arguments.\n * @param {File | Blob} args.blob File or blob to be converted to an video source.\n * @returns {Promise<{ source: CanvasImageSource, naturalWidth: number, naturalHeight: number }>}\n * Video element and its natural dimensions.\n */\nexport const createVideoSource = async ({ blob }) => {\n  const blobURL = URL.createObjectURL(blob);\n  const video = document.createElement('video');\n\n  return new Promise((resolve) => {\n    video.addEventListener(\n      'canplay',\n      () => {\n        video.pause();\n\n        resolve({\n          source: video,\n          naturalWidth: video.videoWidth,\n          naturalHeight: video.videoHeight,\n        });\n\n        URL.revokeObjectURL(blobURL);\n      },\n      { once: true },\n    );\n\n    video.muted = true;\n    video.autoplay = true;\n    video.playsInline = true;\n    video.src = blobURL;\n\n    // Add `<video>` to DOM or it won’t be rendered on canvas\n    video.style.opacity = '0';\n    video.style.pointerEvents = 'none';\n    document.body.appendChild(video);\n  });\n};\n\n/**\n * Get an image source from a Blob or File. If the Blob is a video, create a `<video>` element, and\n * return it. If it’s an image, create an `<img>` element and return it.\n * @param {File | Blob} blob File or blob to be converted to an image source.\n * @returns {Promise<{ source: CanvasImageSource, naturalWidth: number, naturalHeight: number }>}\n * Canvas image source and its natural dimensions.\n */\nexport const createSource = async (blob) => {\n  if (blob.type.startsWith('video/')) {\n    return createVideoSource({ blob });\n  }\n\n  return createImageSource({ blob });\n};\n\n/**\n * Convert the given image file to another format.\n * @param {File | Blob} blob Source file.\n * @param {InternalImageTransformationOptions} [options] Options.\n * @returns {Promise<Blob>} New image file.\n * @throws {Error} If the file is not an image.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob\n * @see https://stackoverflow.com/q/62909538\n */\nexport const transformImage = async (\n  blob,\n  { format = 'png', quality = 85, width = undefined, height = undefined, fit = 'scale-down' } = {},\n) => {\n  /** @type {CanvasImageSource} */\n  let source;\n  /** @type {number} */\n  let naturalWidth = 0;\n  /** @type {number} */\n  let naturalHeight = 0;\n\n  try {\n    source = await createImageBitmap(blob);\n    ({ width: naturalWidth, height: naturalHeight } = source);\n  } catch {\n    // Fall back to `<img>` or `<video>` when thrown; this includes SVG\n    ({ source, naturalWidth, naturalHeight } = await createSource(blob));\n  }\n\n  width ??= naturalWidth;\n  height ??= naturalHeight;\n\n  const canvas = new OffscreenCanvas(512, 512);\n  const context = /** @type {OffscreenCanvasRenderingContext2D} */ (canvas.getContext('2d'));\n\n  resizeCanvas(canvas, { width: naturalWidth, height: naturalHeight }, { fit, width, height });\n  context.drawImage(source, 0, 0, canvas.width, canvas.height);\n\n  // Clean up\n  if (source instanceof HTMLVideoElement) {\n    document.body.removeChild(source);\n  }\n\n  return exportCanvasAsBlob(canvas, { format, quality });\n};\n\n/**\n * Optimize a SVG image using the SVGO library.\n * @param {File | Blob} blob Source file.\n * @returns {Promise<Blob>} Optimized image file.\n * @see https://github.com/svg/svgo/issues/1050\n */\nexport const optimizeSVG = async (blob) => {\n  const string = await blob.text();\n\n  try {\n    /** @type {import('svgo')} */\n    const { optimize } = await loadModule('svgo', 'dist/svgo.browser.js');\n    const { data } = optimize(string);\n\n    return new Blob([data], { type: blob.type });\n  } catch {\n    //\n  }\n\n  return blob;\n};\n","import { getUnpkgURL } from '$lib/services/app/dependencies';\nimport { exportCanvasAsBlob } from '$lib/services/utils/media/image/encode';\nimport { resizeCanvas } from '$lib/services/utils/media/image/resize';\n\n/**\n * @import { InternalImageTransformationOptions } from '$lib/types/private';\n */\n\n/**\n * PDF.js distribution URL. We don’t bundle the library due to the large size and multiple files.\n * However, having it as a dependency in `package.json` allows us to include the latest version in\n * the UNPKG URL, making it faster to load the script without waiting for a redirect.\n * @see https://github.com/mozilla/pdf.js\n */\nconst PDFJS_DIST_URL = getUnpkgURL('pdfjs-dist');\nconst PDFJS_MODULE_URL = `${PDFJS_DIST_URL}/build/pdf.min.mjs`;\nconst PDFJS_WORKER_URL = `${PDFJS_DIST_URL}/build/pdf.worker.min.mjs`;\n\nconst PDFJS_GET_DOC_OPTIONS = {\n  isEvalSupported: false,\n  disableAutoFetch: true,\n  cMapUrl: `${PDFJS_DIST_URL}/cmaps/`,\n  iccUrl: `${PDFJS_DIST_URL}/iccs/`,\n  standardFontDataUrl: `${PDFJS_DIST_URL}/standard_fonts/`,\n  wasmUrl: `${PDFJS_DIST_URL}/wasm/`,\n};\n\n/**\n * Placeholder for the PDF.js module.\n * @type {import('pdfjs-dist')}\n */\nlet pdfjs;\n\n/**\n * Create a thumbnail image of a PDF document using PDF.js.\n * @param {File | Blob} blob Source file.\n * @param {InternalImageTransformationOptions} [options] Options.\n * @returns {Promise<Blob>} Thumbnail blob.\n * @throws {Error} When the rendering failed.\n * @see https://github.com/mozilla/pdf.js/blob/master/examples/webpack/main.mjs\n * @see https://github.com/mozilla/pdf.js/issues/10478\n */\nexport const renderPDF = async (\n  blob,\n  { format = 'png', quality = 85, width = undefined, height = undefined, fit = 'scale-down' } = {},\n) => {\n  // Lazily load the PDF.js library\n  if (!pdfjs) {\n    try {\n      pdfjs = await import(/* @vite-ignore */ PDFJS_MODULE_URL);\n      pdfjs.GlobalWorkerOptions.workerSrc = PDFJS_WORKER_URL;\n    } catch {\n      throw new Error('Failed to load PDF.js library');\n    }\n  }\n\n  const url = URL.createObjectURL(blob);\n  const canvas = new OffscreenCanvas(512, 512);\n  const context = /** @type {OffscreenCanvasRenderingContext2D} */ (canvas.getContext('2d'));\n\n  try {\n    const pdfDocument = await pdfjs.getDocument({ ...PDFJS_GET_DOC_OPTIONS, url }).promise;\n    const pdfPage = await pdfDocument.getPage(1);\n    const viewport = pdfPage.getViewport({ scale: 1 });\n\n    const { scale } = resizeCanvas(\n      canvas,\n      { width: viewport.width, height: viewport.height },\n      { width, height, fit },\n    );\n\n    await pdfPage.render({\n      // @ts-ignore `OffscreenCanvas` is supported\n      canvasContext: context,\n      viewport: scale === 1 ? viewport : pdfPage.getViewport({ scale }),\n    }).promise;\n\n    URL.revokeObjectURL(url);\n  } catch {\n    throw new Error('Failed to render PDF');\n  }\n\n  return exportCanvasAsBlob(canvas, { format, quality });\n};\n","import { getPathInfo } from '@sveltia/utils/file';\nimport { sleep } from '@sveltia/utils/misc';\nimport { IndexedDB } from '@sveltia/utils/storage';\nimport { escapeRegExp } from '@sveltia/utils/string';\nimport mime from 'mime';\nimport { get } from 'svelte/store';\n\nimport { getAssetByPath, 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 { getEntriesByAssetURL } from '$lib/services/contents/collection/entries';\nimport { allCloudStorageServices } from '$lib/services/integrations/media-libraries/cloud';\nimport { getMergedLibraryOptions } from '$lib/services/integrations/media-libraries/cloud/cloudinary';\nimport { createPathRegEx, encodeFilePath } from '$lib/services/utils/file';\nimport { getMediaMetadata } from '$lib/services/utils/media';\nimport { transformImage } from '$lib/services/utils/media/image/transform';\nimport { renderPDF } from '$lib/services/utils/media/pdf';\n\n/**\n * @import {\n * Asset,\n * AssetDetails,\n * Entry,\n * InternalCmsConfig,\n * InternalImageTransformationOptions,\n * } from '$lib/types/private';\n * @import { MediaField } from '$lib/types/public';\n */\n\n/**\n * Set of asset paths that are currently being requested. This is used to prevent multiple requests\n * for the same asset when the same asset is used in multiple places.\n */\nconst requestedAssetPaths = new Set();\n\n/**\n * Get the blob for the given asset.\n * @param {Asset} asset Asset.\n * @param {number} [retryCount] Retry count.\n * @returns {Promise<Blob>} Blob.\n */\nexport const getAssetBlob = async (asset, retryCount = 0) => {\n  const { file, 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/**\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 && entry) {\n      const assetFolderPath = getPathInfo(asset.path).dirname;\n      const entryFolderPath = getPathInfo(Object.values(entry.locales)[0].path).dirname;\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\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>.+?)}}/)?.groups?.tag;\n\n          return tag ? `(?<${tag}>[^/]+)` : escapeRegExp(segment);\n        }),\n        publicPath?.replaceAll(/{{(.+?)}}/g, '$<$1>') ?? '',\n      )\n    : asset.path.replace(\n        asset.folder.internalPath ?? '',\n        publicPath === '/' ? '' : (publicPath ?? ''),\n      );\n\n  if (encodingEnabled) {\n    path = encodeFilePath(path);\n  }\n\n  // Path starting with `@`, etc. cannot be linked\n  if (!path.startsWith('/') && !allowSpecial) {\n    return undefined;\n  }\n\n  if (pathOnly) {\n    return path;\n  }\n\n  return `${baseURL}${path}`;\n};\n\n/**\n * Get the 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 {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  thumbnail = false,\n}) => {\n  if (!value) {\n    return undefined;\n  }\n\n  if (/^(?:https?|data|blob):/.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 });\n\n  if (!asset) {\n    return undefined;\n  }\n\n  return (\n    (thumbnail ? await getAssetThumbnailURL(asset) : await getAssetBlobURL(asset)) ??\n    getAssetPublicURL(asset)\n  );\n};\n\n/** @type {AssetDetails} */\nexport const defaultAssetDetails = {\n  publicURL: undefined,\n  repoBlobURL: undefined,\n  dimensions: undefined,\n  duration: undefined,\n  usedEntries: [],\n};\n\n/**\n * Get the given asset’s extra info.\n * @param {Asset} asset Asset.\n * @returns {Promise<AssetDetails>} Details.\n */\nexport const getAssetDetails = async (asset) => {\n  const { kind, path } = asset;\n  const { blobBaseURL } = get(backend)?.repository ?? {};\n  const blobURL = await getAssetBlobURL(asset);\n  const url = getAssetPublicURL(asset, { allowSpecial: true, pathOnly: true }) ?? blobURL;\n  let metaData = {};\n\n  if (['image', 'video', 'audio'].includes(kind) && blobURL) {\n    metaData = await getMediaMetadata(asset, blobURL, kind);\n  }\n\n  return {\n    ...metaData,\n    publicURL: getAssetPublicURL(asset),\n    repoBlobURL: blobBaseURL ? `${blobBaseURL}/${path}` : undefined,\n    usedEntries: url ? await getEntriesByAssetURL(url) : [],\n  };\n};\n","import { 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 { getIndexFile, isCollectionIndexFile } from '$lib/services/contents/collection/index-file';\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 { picker_utc: utc = false } = config;\n  const date = getDate(fieldValue, config);\n\n  if (!isValidDate(date)) {\n    return undefined;\n  }\n\n  return getDateTimeParts({ date, timeZone: utc ? 'UTC' : undefined });\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 { 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 { getCollectionFilesByEntry } from '$lib/services/contents/collection/files';\nimport { isCollectionIndexFile } from '$lib/services/contents/collection/index-file';\nimport { getAssociatedCollections } from '$lib/services/contents/entry';\nimport { getField, getPropertyValue } from '$lib/services/contents/entry/fields';\nimport { getRegex } from '$lib/services/utils/misc';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import { Entry, FlattenedEntryContent, InternalCollectionFile } from '$lib/types/private';\n * @import { FieldKeyPath } from '$lib/types/public';\n */\n\n/**\n * Regular expression to match `![alt](src \"title\")`.\n */\nexport const MARKDOWN_IMAGE_REGEX = /!\\[.*?\\]\\((.+?)(?:\\s+\".*?\")?\\)/g;\n\n/**\n * @type {Writable<Entry[]>}\n */\nexport const selectedEntries = writable([]);\n\n/**\n * Get entries by the given collection name, while applying a filer if needed.\n * @param {string} collectionName Collection name.\n * @returns {Entry[]} Entries.\n * @see https://decapcms.org/docs/collection-folder/#filtered-folder-collections\n * @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","import { get } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { isEntryCollection } from '$lib/services/contents/collection';\nimport { getEntriesByCollection } from '$lib/services/contents/collection/entries';\n\n/**\n * @import { Entry, InternalCollection } from '$lib/types/private';\n * @import { Collection, CollectionIndexFile } from '$lib/types/public';\n */\n\n/**\n * Get the localized label for the index file. Use `try-catch` to handle cases where svelte-i18n is\n * not initialized during automated tests.\n * @returns {string} Localized label for the index file.\n */\nexport const getLocalizedLabel = () => {\n  try {\n    return get(_)('index_file');\n  } catch {\n    return 'Index File';\n  }\n};\n\n/**\n * Get the collection’s index file configuration. This function returns the index file configuration\n * if index file inclusion is enabled for the collection. If no specific configuration is provided,\n * it returns a default configuration with the `_index` file name, which is used for Hugo’s special\n * index file.\n * @param {InternalCollection | Collection} collection Collection.\n * @returns {CollectionIndexFile | undefined} Index file configuration if index file inclusion is\n * enabled for the collection, otherwise `undefined`.\n * @see https://gohugo.io/content-management/organization/#index-pages-_indexmd\n * @see https://github.com/decaporg/decap-cms/issues/7381\n * @see https://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 ?? getLocalizedLabel(),\n    icon: file.icon ?? 'home',\n    // The following properties are inherited from the collection file, collection or global config\n    fields: file.fields,\n    editor: file.editor,\n  };\n};\n\n/**\n * Check if index file inclusion (for Hugo) is enabled for the collection, and the given entry is\n * the special index file.\n * @param {InternalCollection} collection Collection.\n * @param {Entry} entry Entry.\n * @returns {boolean} Result.\n */\nexport const isCollectionIndexFile = (collection, entry) => {\n  const indexFile = getIndexFile(collection);\n\n  if (!indexFile) {\n    return false;\n  }\n\n  return entry.slug === indexFile.name;\n};\n\n/**\n * Check if index file creation is allowed in the collection.\n * @param {InternalCollection} collection Collection.\n * @returns {boolean} Result. It returns `false` if the index file already exists.\n */\nexport const canCreateIndexFile = (collection) => {\n  const indexFile = getIndexFile(collection);\n\n  if (!indexFile) {\n    return false;\n  }\n\n  return !getEntriesByCollection(collection.name).some(({ slug }) => slug === indexFile.name);\n};\n","import { getPathInfo } from '@sveltia/utils/file';\nimport { escapeRegExp, stripSlashes } from '@sveltia/utils/string';\n\nimport { warnDeprecation } from '$lib/services/config/deprecations';\nimport { isEntryCollection } from '$lib/services/contents/collection';\nimport { getIndexFile } from '$lib/services/contents/collection/index-file';\nimport { getLocalePath } from '$lib/services/contents/i18n';\n\n/**\n * @import { CustomFileFormat, FileConfig, InternalI18nOptions } from '$lib/types/private';\n * @import { Collection, CollectionFile, FileExtension, FileFormat } from '$lib/types/public';\n */\n\n/**\n * Regex to match escaped `{{variable}}` placeholders.\n */\nexport const ESCAPED_PLACEHOLDER_REGEX = /\\\\\\{\\\\\\{.+?\\\\\\}\\\\\\}/g;\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 === 'raw') {\n    return 'txt';\n  }\n\n  if (format === 'yaml' || format === 'yml') {\n    return 'yml';\n  }\n\n  if (format === 'toml') {\n    return 'toml';\n  }\n\n  if (format === 'json') {\n    return 'json';\n  }\n\n  return 'md';\n};\n\n/**\n * Detect a file format from the given entry file configuration.\n * @param {object} args Arguments.\n * @param {FileExtension} args.extension File extension.\n * @param {FileFormat} [args.format] Developer-defined file format.\n * @returns {FileFormat} Determined format.\n * @see https://decapcms.org/docs/configuration-options/#extension-and-format\n * @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 (extension === 'yaml' || extension === 'yml') {\n    return 'yaml';\n  }\n\n  if (extension === 'toml') {\n    return 'toml';\n  }\n\n  if (extension === 'json') {\n    return 'json';\n  }\n\n  if (['md', 'mkd', 'mkdn', 'mdwn', 'mdown', 'markdown'].includes(extension)) {\n    return 'frontmatter'; // auto detect\n  }\n\n  return 'yaml-frontmatter';\n};\n\n/**\n * Get 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    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  if (format === 'json-frontmatter') {\n    return ['{', '}'];\n  }\n\n  if (format === 'toml-frontmatter') {\n    return ['+++', '+++'];\n  }\n\n  if (format === 'yaml-frontmatter') {\n    return ['---', '---'];\n  }\n\n  return undefined;\n};\n\n/**\n * 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    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    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  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    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  return file.file.includes('{{locale}}')\n    ? I18N_STRUCTURES.MULTIPLE_FILES\n    : I18N_STRUCTURES.SINGLE_FILE;\n};\n\n/**\n * Creates the structure map based on i18n status and structure.\n * @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  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 * 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: omitDefaultConfigLegacy,\n    omit_default_locale_from_file_path: omitDefaultConfig = omitDefaultConfigLegacy ?? 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 (omitDefaultConfigLegacy !== 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 =\n    omitDefaultConfig && (file ? /{{locale}}[./]/.test(file.file) : structureMap.i18nMultiFile);\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 { stripSlashes } from '@sveltia/utils/string';\nimport { get, writable } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\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  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  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    : fileCollection\n      ? parseFileCollection(fileCollection, _i18n, fileCollection.files)\n      : undefined;\n\n  collectionCacheMap.set(name, collection);\n\n  return collection;\n};\n\n/**\n * Get the label for a collection. If the collection is a singleton, it returns a localized label\n * for files. Otherwise, it returns the collection’s label or name.\n * @param {InternalCollection} collection Collection object.\n * @param {object} [options] Options for label formatting.\n * @param {boolean} [options.useSingular] Whether to use a singular form of the label.\n * @returns {string} Human-readable label for the collection.\n */\nexport const getCollectionLabel = (collection, { useSingular = false } = {}) => {\n  const { _type, name, label, label_singular: singularLabel } = collection;\n\n  if (_type === 'singleton') {\n    return get(_)('files');\n  }\n\n  if (useSingular && singularLabel) {\n    return singularLabel;\n  }\n\n  return label || name;\n};\n\n/**\n * Get the index of a collection with the given name.\n * @param {string | undefined} collectionName Collection name.\n * @returns {number} Index.\n */\nexport const getCollectionIndex = (collectionName) => {\n  if (!collectionName) {\n    return -1;\n  }\n\n  // Singleton collection is always at the end\n  if (collectionName === '_singletons') {\n    return 9999999;\n  }\n\n  return get(cmsConfig)?.collections?.findIndex(({ name }) => name === collectionName) ?? -1;\n};\n","import { getPathInfo } from '@sveltia/utils/file';\nimport { compare, stripSlashes } from '@sveltia/utils/string';\n\nimport { getValidCollections } from '$lib/services/contents/collection';\nimport { getValidCollectionFiles } from '$lib/services/contents/collection/files';\n\n/**\n * @import {\n * AssetFolderInfo,\n * CollectedMediaField,\n * InternalCmsConfig,\n * TypedFieldKeyPath,\n * } from '$lib/types/private';\n * @import { Collection, CollectionDivider, CollectionFile } from '$lib/types/public';\n */\n\n/**\n * @typedef {object} NormalizeAssetFolderArgs\n * @property {string} collectionName Collection name.\n * @property {string} [fileName] Collection file name. File/singleton collection only.\n * @property {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 of\n * the collection file.\n * @property {GlobalFolders | undefined} globalFolders Global folders information.\n */\n\n/**\n * @typedef {object} GlobalFolders\n * @property {string} globalMediaFolder Normalized global `media_folder` option.\n * @property {string} globalPublicFolder Normalized global `public_folder` option.\n */\n\n/**\n * Collection-level and file-level asset folders.\n * @type {AssetFolderInfo[]}\n * @see https://decapcms.org/docs/collection-folder/#media-and-public-folder\n * @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}) => {\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  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      publicFolder === '' || /^[.@]/.test(publicFolder)\n        ? publicFolder\n        : `/${stripSlashes(publicFolder)}`,\n    entryRelative,\n    hasTemplateTags: /{{.+?}}/.test(mediaFolder),\n  };\n};\n\n/**\n * Add an asset folder for a collection or collection file if it’s not the same as the global\n * asset folder.\n * @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 * 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  } = 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  };\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  assetFolders.sort((a, b) => compare(a.internalPath ?? '', b.internalPath ?? ''));\n\n  const allFolders = [];\n\n  if (globalAssetFolder) {\n    allFolders.push(globalAssetFolder);\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        structureMap: { i18nMultiRootFolder },\n      } = normalizeI18nConfig(collection);\n\n      return {\n        collectionName,\n        folderPath,\n        folderPathMap: Object.fromEntries(\n          allLocales.map((locale) => [\n            locale,\n            i18nMultiRootFolder ? `${locale}/${folderPath}` : folderPath,\n          ]),\n        ),\n      };\n    })\n    .sort((a, b) => compare(a.folderPath ?? '', b.folderPath ?? ''));\n\n/**\n * Get file collection folders.\n * @param {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 { isObject } from '@sveltia/utils/object';\nimport merge from 'deepmerge';\nimport { get } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { parseTOML, parseYAML } from '$lib/services/contents/file/parse';\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(get(_)('config.error.parse_failed'), {\n      cause: new Error(get(_)('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(get(_)(fetchErrorKey), { cause: ex });\n  }\n\n  const { ok, status } = response;\n\n  if (!ok) {\n    throw new Error(get(_)(fetchErrorKey), {\n      cause: new Error(get(_)('config.error.fetch_failed_not_ok', { values: { status } })),\n    });\n  }\n\n  /** @type {object} */\n  let result;\n\n  try {\n    if (type === 'application/json') {\n      result = 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(get(_)('config.error.parse_failed'), { cause: ex });\n  }\n\n  if (!isObject(result)) {\n    throw new Error(get(_)('config.error.parse_failed'), {\n      cause: new Error(get(_)('config.error.parse_failed_invalid_object')),\n    });\n  }\n\n  return result;\n};\n\n/**\n * Get the path to the configuration file. Depending on the server or framework configuration, a\n * trailing slash may be removed from the CMS `/admin/` URL. In that case, we need to determine the\n * correct path to the configuration file.\n * @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 }) => {\n    try {\n      const { protocol, hostname } = new URL(href, origin);\n\n      // Check if protocol is HTTPS or if it's a localhost address\n      return protocol === 'https:' || hostname === 'localhost' || hostname === '127.0.0.1';\n    } catch {\n      // If URL parsing fails, treat as insecure\n      return false;\n    }\n  });\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(\n      get(_)(links.length > 1 ? 'config.error.insecure_urls' : 'config.error.insecure_url'),\n    );\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 { get } from 'svelte/store';\nimport { _, locale as appLocale } from 'svelte-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 $_ = get(_);\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 = /** @type {string} */ (get(appLocale));\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 { isObject } from '@sveltia/utils/object';\nimport { get } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\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 } = collectors;\n\n  if (!isObject(backend)) {\n    errors.add(get(_)('config.error.missing_backend'));\n\n    return;\n  }\n\n  const { name } = backend;\n\n  if (!name) {\n    errors.add(get(_)('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 = get(_)(`config.error.unsupported_${type}_backend`, { values: { name: label } });\n\n    errors.add(`${message} ${get(_)('config.error.unsupported_backend_suggestion')}`);\n\n    return;\n  }\n\n  if (name in gitBackendServices) {\n    const {\n      repo,\n      automatic_deployments: autoDeploy,\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 (repo === undefined) {\n      errors.add(get(_)('config.error.missing_repository'));\n    }\n\n    if (typeof repo !== 'string' || !/(.+)\\/([^/]+)$/.test(repo)) {\n      errors.add(get(_)('config.error.invalid_repository'));\n    }\n\n    if (authType === 'implicit') {\n      errors.add(get(_)('config.error.oauth_implicit_flow'));\n    }\n\n    if (name === 'github' && authType === 'pkce') {\n      errors.add(get(_)('config.error.github_pkce_unsupported'));\n    }\n\n    if ((name === 'gitea' || authType === 'pkce') && !appId) {\n      errors.add(get(_)('config.error.oauth_no_app_id'));\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","/**\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 bodyFieldType = ['code', 'markdown', 'richtext', 'text'];\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' && bodyFieldType.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 (\n    normalizedExtension === 'md' ||\n    normalizedExtension === 'markdown' ||\n    normalizedExtension === 'mdx'\n  ) {\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    // Front-matter only works with matching extension\n    return normalizedExtension !== fmFormatType;\n  }\n\n  // The 'frontmatter' auto-detect format only works with markdown extensions\n  // (already handled above), so reject it for non-markdown extensions\n  if (normalizedFormat === 'frontmatter') {\n    return true;\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  const knownFormats = ['yaml', 'toml', 'json'];\n\n  if (knownFormats.includes(normalizedFormat)) {\n    // If format is yaml/toml/json, extension should match or be custom\n    return knownFormats.includes(normalizedExtension) && normalizedExtension !== normalizedFormat;\n  }\n\n  // Unknown format - don’t enforce mismatch\n  return false;\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 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 * Parse and validate a DateTime field configuration.\n * @param {FieldParserArgs} args Arguments.\n */\nexport const parseDateTimeFieldConfig = (args) => {\n  checkUnsupportedOptions({ ...args, UNSUPPORTED_OPTIONS });\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 } = 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  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 { get } from 'svelte/store';\nimport { _ } from 'svelte-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  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  const $_ = get(_);\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 { get } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\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 } = cmsConfig;\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(get(_)('config.error.missing_media_folder'));\n    }\n  } else if (typeof media_folder !== 'string') {\n    errors.add(get(_)('config.error.invalid_media_folder'));\n  }\n\n  if (public_folder !== undefined) {\n    if (typeof public_folder !== 'string') {\n      errors.add(get(_)('config.error.invalid_public_folder'));\n    } else {\n      if (/^\\.{1,2}\\//.test(public_folder)) {\n        errors.add(get(_)('config.error.public_folder_relative_path'));\n      }\n\n      if (/^https?:/.test(public_folder)) {\n        errors.add(get(_)('config.error.public_folder_absolute_url'));\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 { getHash } from '@sveltia/utils/crypto';\nimport { isObject } from '@sveltia/utils/object';\nimport { isURL } from '@sveltia/utils/string';\nimport merge from 'deepmerge';\nimport { derived, get, writable } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\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';\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 ? VITE_SITE_URL || 'http://localhost:5174' : 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 */\nconst 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(get(_)('config.error.no_secure_context'));\n    }\n\n    /** @type {any} */\n    let rawConfig;\n\n    if (manualConfig) {\n      if (!isObject(manualConfig)) {\n        throw new Error(get(_)('config.error.parse_failed'));\n      }\n\n      rawConfig = manualConfig;\n\n      if (rawConfig.load_config_file !== false) {\n        rawConfig = merge(await 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 = config.site_url?.trim() || (DEV ? DEV_SITE_URL : window.location.origin);\n    config._baseURL = isURL(config._siteURL) ? new URL(config._siteURL).origin : '';\n\n    // Handle root collection folder variants, particularly for VitePress\n    config.collections?.forEach((collection) => {\n      if ('folder' in collection && (collection.folder === '.' || collection.folder === '/')) {\n        collection.folder = '';\n      }\n    });\n\n    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 : get(_)('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 (get(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 (get(prefs).devModeEnabled) {\n    // eslint-disable-next-line no-console\n    console.info('allEntryFolders', _allEntryFolders);\n    // eslint-disable-next-line no-console\n    console.info('allAssetFolders', _allAssetFolders);\n  }\n});\n","import 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';\n\n/**\n * @import { InternalCmsConfig } from '$lib/types/private';\n */\n\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 {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, 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  }\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    let cachedSlugRegexes = slugReplacementRegexCache.get(escapedReplacement);\n\n    if (!cachedSlugRegexes) {\n      cachedSlugRegexes = {\n        consecutivePattern: new RegExp(`${escapedReplacement}+`, 'g'),\n        trimPattern: new RegExp(`^${escapedReplacement}+|${escapedReplacement}+$`, 'g'),\n      };\n      slugReplacementRegexCache.set(escapedReplacement, cachedSlugRegexes);\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","import { generateUUID } from '@sveltia/utils/crypto';\nimport { getDateTimeParts } from '@sveltia/utils/datetime';\nimport { truncate } from '@sveltia/utils/string';\nimport { get } from 'svelte/store';\n\nimport { slugify } from '$lib/services/common/slug';\nimport {\n  applyTransformations,\n  DEFAULT_TRANSFORMATION_REGEX,\n} from '$lib/services/common/transformations';\nimport { cmsConfig } from '$lib/services/config';\nimport { getEntriesByCollection } from '$lib/services/contents/collection/entries';\nimport { getField } from '$lib/services/contents/entry/fields';\nimport { getEntrySummaryFromContent } from '$lib/services/contents/entry/summary';\nimport { renameIfNeeded } from '$lib/services/utils/file';\n\n/**\n * @import { FillTemplateOptions, GetFieldArgs } from '$lib/types/private';\n */\n\n/**\n * @typedef {object} ReplaceSubContext\n * @property {string} identifierField Field name to identify the title.\n * @property {string | undefined} basePath Base path for the entry file.\n */\n\n/**\n * @typedef {object} ReplaceContext\n * @property {FillTemplateOptions & ReplaceSubContext} replaceSubContext Context for `replaceSub`.\n * @property {GetFieldArgs} getFieldArgs Arguments for `getField`.\n */\n\nconst DATE_TIME_FIELDS = ['year', 'month', 'day', 'hour', 'minute', 'second'];\nconst TEMPLATE_REGEX = /{{(.+?)}}(?!'\\))/g;\n\n/**\n * UUID generator functions mapped by tag name.\n */\nconst UUID_TYPES = {\n  // eslint-disable-next-line jsdoc/require-jsdoc\n  uuid: () => generateUUID(),\n  // eslint-disable-next-line jsdoc/require-jsdoc\n  uuid_short: () => generateUUID('short'),\n  // eslint-disable-next-line jsdoc/require-jsdoc\n  uuid_shorter: () => generateUUID('shorter'),\n};\n\n/**\n * Handles date-time related template tags.\n * @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  const uuidGenerator = UUID_TYPES[/** @type {keyof typeof UUID_TYPES} */ (tag)];\n\n  return uuidGenerator ? uuidGenerator() : undefined;\n};\n\n/**\n * Handles slug-related template tags.\n * @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 * @param {string} tag The template tag.\n * @param {Record<string, any>} valueMap Value map object.\n * @param {string} identifierField Identifier field name.\n * @returns {any} The field value.\n */\nconst getFieldValue = (tag, valueMap, identifierField) => {\n  if (tag.startsWith('fields.')) {\n    return valueMap[tag.replace(/^fields\\./, '')];\n  }\n\n  if (tag === 'slug') {\n    return getEntrySummaryFromContent(valueMap, { identifierField });\n  }\n\n  return valueMap[tag];\n};\n\n/**\n * Template tag replacer subroutine.\n * @param {string} tag Field name or one of special tags.\n * @param {FillTemplateOptions & ReplaceSubContext} context Context for replacement.\n * @returns {any} Replaced value.\n */\nconst replaceTemplateTag = (tag, context) => {\n  const {\n    type,\n    content: valueMap,\n    currentSlug,\n    entryFilePath,\n    locale,\n    dateTimeParts = getDateTimeParts({ timeZone: 'UTC' }),\n    identifierField,\n    basePath,\n    isIndexFile = false,\n  } = context;\n\n  // Handle date-time fields\n  const dateTimeValue = handleDateTimeTag(tag, dateTimeParts);\n\n  if (dateTimeValue !== undefined) {\n    return dateTimeValue;\n  }\n\n  // Handle slug tag\n  const slugValue = handleSlugTag(tag, currentSlug, type ?? '', isIndexFile);\n\n  if (slugValue !== undefined) {\n    return slugValue;\n  }\n\n  // Handle UUID tags\n  const uuidValue = handleUuidTag(tag);\n\n  if (uuidValue !== undefined) {\n    return uuidValue;\n  }\n\n  // Handle locale tag for preview path\n  if (type === 'preview_path' && tag === 'locale') {\n    return locale;\n  }\n\n  // Handle file path related tags\n  if (type === 'preview_path' || type === 'media_folder') {\n    const filePathValue = handleFilePathTag(tag, entryFilePath, basePath);\n\n    if (filePathValue !== undefined) {\n      return filePathValue;\n    }\n  }\n\n  // Handle field values\n  return getFieldValue(tag, valueMap, identifierField);\n};\n\n/**\n * Processes transformations for a template placeholder.\n * @param {string[]} transformations Array of transformation strings.\n * @param {FillTemplateOptions & ReplaceSubContext} replaceSubContext Context for replacement.\n * @returns {{ transformations: string[], hasDefaultTransformation: boolean }} Processed result.\n */\nconst processTransformations = (transformations, replaceSubContext) => {\n  let hasDefaultTransformation = false;\n\n  transformations.forEach((tf, index) => {\n    const { defaultValue } = tf.match(DEFAULT_TRANSFORMATION_REGEX)?.groups ?? {};\n\n    if (defaultValue !== undefined) {\n      hasDefaultTransformation = true;\n\n      // Support a template tag for the `default` transformation like\n      // `{{fields.slug | default('{{fields.title}}')}}`\n      const { innerTag } = defaultValue.match(/^{{(?<innerTag>.+?)}}$/)?.groups ?? {};\n\n      if (innerTag !== undefined) {\n        transformations[index] =\n          `default('${replaceTemplateTag(innerTag, replaceSubContext) ?? ''}')`;\n      }\n    }\n  });\n\n  return { transformations, hasDefaultTransformation };\n};\n\n/**\n * Template placeholder replacer.\n * @param {string} placeholder Field name or one of special tags. May contain transformations.\n * @param {ReplaceContext} context Context for replacement.\n * @returns {string} Replaced string.\n */\nconst replaceTemplatePlaceholder = (placeholder, { replaceSubContext, getFieldArgs }) => {\n  const [tag, ...rawTransformations] = placeholder.split(/\\s*\\|\\s*/);\n  let value = replaceTemplateTag(tag, replaceSubContext);\n\n  const { transformations, hasDefaultTransformation } = processTransformations(\n    rawTransformations,\n    replaceSubContext,\n  );\n\n  // Fall back with a random ID unless the `default` transformation is defined\n  if (value === undefined && !hasDefaultTransformation) {\n    return generateUUID('short');\n  }\n\n  if (transformations.length) {\n    value = applyTransformations({\n      fieldConfig: getField({ ...getFieldArgs, keyPath: tag }),\n      value,\n      transformations,\n    });\n  }\n\n  // Return the value as is when generating the preview path or media folder path\n  if (replaceSubContext.type) {\n    return String(value);\n  }\n\n  // Slugify the value for a slug or filename. Don’t limit the length here; it will be handled later\n  // in `fillTemplate`.\n  return slugify(String(value), { maxLength: Infinity });\n};\n\n/**\n * Creates existing slugs list for uniqueness validation.\n * @param {string} collectionName Collection name.\n * @param {string | undefined} locale Locale string.\n * @returns {string[]} List of existing slugs.\n */\nconst getExistingSlugs = (collectionName, locale) =>\n  getEntriesByCollection(collectionName)\n    .map((e) => (locale ? e.locales[locale]?.slug : e.slug))\n    .filter(Boolean);\n\n/**\n * Fills a template string with values from the given options.\n * @param {string} template Template string literal containing tags like `{{title}}`.\n * @param {FillTemplateOptions} options Options.\n * @returns {string} Filled template that can be used for an entry slug, path, etc.\n * @see https://decapcms.org/docs/configuration-options/#slug-type\n * @see https://decapcms.org/docs/configuration-options/#slug\n * @see https://decapcms.org/docs/collection-folder/#media-and-public-folder\n * @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 { collection, content: valueMap, currentSlug, locale, isIndexFile = false } = options;\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  // @todo Remove the legacy option prior to the 1.0 release.\n  const slugMaxLength = legacySlugLength ?? get(cmsConfig)?.slug?.maxlength;\n\n  /** @type {ReplaceContext} */\n  const context = {\n    replaceSubContext: { ...options, identifierField, basePath },\n    getFieldArgs: { collectionName, keyPath: '', valueMap, isIndexFile },\n  };\n\n  // Use a negative lookahead assertion to support a template tag for the `default` transformation\n  // like `{{fields.slug | default('{{fields.title}}')}}`\n  let slug = template\n    .replace(TEMPLATE_REGEX, (_match, tag) => replaceTemplatePlaceholder(tag, context))\n    .trim();\n\n  // Truncate a long slug if needed\n  if (typeof slugMaxLength === 'number') {\n    slug = truncate(slug, slugMaxLength, { ellipsis: '' }).replace(/-$/, '');\n  }\n\n  // We don’t have to rename it when creating a path with a slug given\n  if (currentSlug) {\n    return slug;\n  }\n\n  return renameIfNeeded(slug, getExistingSlugs(collectionName, locale));\n};\n","import { 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>} Options.\n */\nexport const getMediaLibraryOptions = ({ libraryName = 'default', fieldConfig } = {}) => {\n  const _cmsConfig = get(cmsConfig);\n\n  // Priority 1: fieldConfig.media_libraries\n  if (fieldConfig?.media_libraries?.[libraryName]) {\n    return fieldConfig.media_libraries[libraryName];\n  }\n\n  // Priority 2: fieldConfig.media_library (legacy)\n  if (fieldConfig?.media_library) {\n    const siteLibName = _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 fieldLib;\n    }\n  }\n\n  // Priority 3: cmsConfig.media_libraries\n  if (_cmsConfig?.media_libraries?.[libraryName]) {\n    return _cmsConfig.media_libraries[libraryName];\n  }\n\n  // Priority 4: cmsConfig.media_library (legacy)\n  if (_cmsConfig?.media_library?.name === libraryName) {\n    return _cmsConfig.media_library;\n  }\n\n  return {};\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 {{ 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    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 (subType in transformations) {\n      transformation = /** @type {Record<string, any>} */ (transformations)[subType];\n    } else if (\n      'raster_image' in transformations &&\n      /** @type {string[]} */ (RASTER_IMAGE_FORMATS).includes(subType)\n    ) {\n      transformation = transformations.raster_image;\n    }\n\n    if (transformation) {\n      const { format, quality, width, height } = transformation;\n\n      const newFormat =\n        format && RASTER_IMAGE_CONVERSION_FORMATS.includes(format) ? format : 'webp';\n\n      const blob = await transformImage(file, {\n        format: newFormat,\n        quality: quality && Number.isSafeInteger(quality) ? quality : 85,\n        width: width && Number.isSafeInteger(width) ? width : undefined,\n        height: height && Number.isSafeInteger(height) ? height : undefined,\n      });\n\n      const newFileName =\n        blob.type === `image/${newFormat}`\n          ? RASTER_IMAGE_EXTENSION_REGEX.test(file.name)\n            ? file.name.replace(RASTER_IMAGE_EXTENSION_REGEX, newFormat)\n            : file.name.concat(newFormat)\n          : // Failed to transform\n            file.name;\n\n      return new File([blob], newFileName, { type: blob.type });\n    }\n  }\n\n  // Process SVG image\n  if (type === 'image' && subType === 'svg+xml' && transformations.svg?.optimize) {\n    return new File([await optimizeSVG(file)], file.name, { type: file.type });\n  }\n\n  return file;\n};\n","import { getPathInfo } from '@sveltia/utils/file';\nimport { stripSlashes } from '@sveltia/utils/string';\nimport equal from 'fast-deep-equal';\nimport { flatten } from 'flat';\nimport { derived, get, writable } from 'svelte/store';\n\nimport {\n  allAssetFolders,\n  getAssetFolder,\n  globalAssetFolder,\n  selectedAssetFolder,\n} from '$lib/services/assets/folders';\nimport { fillTemplate } from '$lib/services/common/template';\nimport { getCollection } from '$lib/services/contents/collection';\nimport { getCollectionFilesByEntry } from '$lib/services/contents/collection/files';\nimport { isCollectionIndexFile } from '$lib/services/contents/collection/index-file';\nimport { getAssociatedCollections } from '$lib/services/contents/entry';\nimport {\n  getDefaultMediaLibraryOptions,\n  transformFile,\n} from '$lib/services/integrations/media-libraries/default';\nimport { createPath, decodeFilePath, resolvePath } from '$lib/services/utils/file';\n\n/**\n * @import { Readable, Writable } from 'svelte/store';\n * @import {\n * Asset,\n * AssetFolderInfo,\n * Entry,\n * InternalCollection,\n * InternalCollectionFile,\n * ProcessedAssets,\n * UploadingAssets,\n * } from '$lib/types/private';\n */\n\n/**\n * List of all assets.\n * @type {Writable<Asset[]>}\n */\nexport const allAssets = writable([]);\n\n/**\n * 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 * Selected assets.\n * @type {Writable<Asset[]>}\n */\nexport const selectedAssets = writable([]);\n\n/**\n * Asset currently focused in the UI.\n * @type {Writable<Asset | undefined>}\n */\nexport const focusedAsset = writable();\n\n/**\n * Asset to be displayed in `<AssetDetailsOverlay>`.\n * @type {Writable<Asset | undefined>}\n */\nexport const overlaidAsset = writable();\n\n/**\n * Assets currently being uploaded.\n * @type {Writable<UploadingAssets>}\n */\nexport const uploadingAssets = writable({ folder: undefined, files: [] });\n\n/**\n * Asset currently being edited.\n * @type {Writable<Asset | undefined>}\n */\nexport const editingAsset = writable();\n\n/**\n * Asset currently being renamed.\n * @type {Writable<Asset | undefined>}\n */\nexport const renamingAsset = writable();\n\n/**\n * Asset currently being processed.\n * @type {Readable<ProcessedAssets>}\n */\nexport const processedAssets = derived([uploadingAssets], ([_uploadingAssets], set, update) => {\n  set({\n    processing: false,\n    undersizedFiles: [],\n    oversizedFiles: [],\n    transformedFileMap: new WeakMap(),\n  });\n\n  const originalFiles = _uploadingAssets.files;\n  const transformedFileMap = new WeakMap();\n  const { max_file_size: maxSize, transformations } = getDefaultMediaLibraryOptions().config;\n  /** @type {File[]} */\n  let files = [];\n\n  (async () => {\n    if (originalFiles.length && transformations) {\n      update((state) => ({ ...state, processing: true }));\n\n      files = await Promise.all(\n        originalFiles.map(async (file) => {\n          const newFile = await transformFile(file, transformations);\n\n          if (newFile !== file) {\n            transformedFileMap.set(newFile, file);\n          }\n\n          return newFile;\n        }),\n      );\n    } else {\n      files = [...originalFiles];\n    }\n\n    update(() => ({\n      processing: false,\n      undersizedFiles: files.filter(({ size }) => size <= /** @type {number} */ (maxSize)),\n      oversizedFiles: files.filter(({ size }) => size > /** @type {number} */ (maxSize)),\n      transformedFileMap,\n    }));\n  })();\n});\n\n/**\n * Find an asset 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 * @returns {Asset | undefined} Found asset.\n */\nexport const getAssetByRelativePathAndCollection = ({ path, entry, collection, file }) => {\n  const { locales } = entry;\n\n  const {\n    media_folder: mediaFolder, // e.g. `images`\n    _i18n: { defaultLocale },\n  } = file ?? collection;\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  const { entryFolder } = entryFilePath.match(/(?<entryFolder>.+?)(?:\\/[^/]+)?$/)?.groups ?? {};\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`).\n  const localPath =\n    mediaFolder && path.startsWith(`${mediaFolder}/`) ? path.slice(mediaFolder.length + 1) : path;\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 * @returns {Asset | undefined} Corresponding asset.\n */\nexport const getAssetByRelativePath = ({ path, entry }) => {\n  if (!entry) {\n    return undefined;\n  }\n\n  const assets = getAssociatedCollections(entry).flatMap((collection) => {\n    const collectionFiles = getCollectionFilesByEntry(collection, entry);\n    const args = { path, entry, collection };\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 * @returns {Asset | undefined} Corresponding asset.\n */\nexport const getAssetByAbsolutePath = ({ path, entry, collectionName, fileName }) => {\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    getAssetFolder({ collectionName, fileName }),\n    getAssetFolder({ collectionName }),\n    get(globalAssetFolder),\n    get(allAssetFolders).findLast((folder) =>\n      dirName.match(`^${(folder.publicPath ?? '').replace(/{{.+?}}/g, '.+?')}\\\\b`),\n    ),\n  ].filter((folder) => !!folder);\n\n  // Use `find` to stop scanning folders as soon as the asset is found\n  scanningFolders.find((folder) => {\n    const { publicPath, collectionName: _collectionName } = folder;\n    let { internalPath } = folder;\n\n    // Deal with template tags like `/assets/images/{{slug}}`\n    if (internalPath !== undefined && /{{.+?}}/.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 * @returns {Asset | undefined} Corresponding asset.\n */\nexport const getAssetByPath = ({ value, entry, collectionName, fileName }) => {\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 });\n  }\n\n  return getAssetByAbsolutePath({ path, entry, collectionName, fileName });\n};\n\n/**\n * Get a list of assets stored in the given collection defined folder.\n * @param {AssetFolderInfo} folder Folder info.\n * @returns {Asset[]} Assets.\n */\nexport const getAssetsByFolder = (folder) => get(allAssets).filter((a) => equal(a.folder, folder));\n\n/**\n * Get a list of assets stored in the given internal directory.\n * @param {string} dirname Directory path.\n * @returns {Asset[]} Assets.\n */\nexport const getAssetsByDirName = (dirname) =>\n  get(allAssets).filter((a) => getPathInfo(a.path).dirname === dirname);\n\n// Reset the asset selection when a different folder is selected\nselectedAssetFolder.subscribe(() => {\n  focusedAsset.set(undefined);\n});\n","import { 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/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  /** @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 Object.keys(content).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({ value: content[keyPath], entry, collectionName, thumbnail: true })\n      : undefined;\n\n    if (url) {\n      return url;\n    }\n  }\n\n  return undefined;\n};\n\n/**\n * Get a list of assets associated with the given entry.\n * @param {object} args Arguments.\n * @param {Entry} args.entry Entry.\n * @param {string} args.collectionName Name of a collection that the entry belongs to.\n * @param {string} [args.fileName] Collection file name. File/singleton collection only.\n * @param {boolean} [args.relative] Whether to only collect assets stored at a relative path.\n * @returns {Asset[]} Assets.\n */\nexport const getAssociatedAssets = ({ entry, collectionName, fileName, relative = false }) => {\n  const { locales } = entry;\n  const collection = getCollection(collectionName);\n\n  if (!collection) {\n    return [];\n  }\n\n  const isIndexFile = isCollectionIndexFile(collection, entry);\n  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 (\n            typeof value === 'string' &&\n            (relative ? isRelativePath(value) : true) &&\n            ['image', 'file'].includes(\n              getField({ collectionName, keyPath, isIndexFile })?.widget ?? 'string',\n            )\n          ) {\n            const asset = getAssetByPath({ value, entry, collectionName, fileName });\n\n            if (\n              asset &&\n              getAssetFoldersByPath(asset.path).some(\n                (f) =>\n                  f.collectionName === collectionName &&\n                  f.fileName === fileName &&\n                  (relative ? f.entryRelative : true),\n              )\n            ) {\n              return asset;\n            }\n          }\n\n          return undefined;\n        }),\n      )\n      .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';\nimport { get } from 'svelte/store';\n\nimport { getAssociatedAssets } from '$lib/services/contents/entry/assets';\nimport { user } from '$lib/services/user';\n\n/**\n * @import { 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 * 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 * @see https://immutable-js.com/docs/v5/Map/\n */\nexport const callEventHooks = async ({ type, draft, savingEntry }) => {\n  const { login = '', name = '' } = /** @type {User} */ (get(user));\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      // @ts-ignore\n      entry: 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    // 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 if (isObject(map)) {\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 const strings = {\n  ok: 'OK',\n  cancel: 'Cancel',\n  close: 'Close',\n  clear: 'Clear',\n  insert: 'Insert',\n  update: 'Update',\n  remove: 'Remove',\n  collapse: 'Collapse',\n  expand: 'Expand',\n  dismiss: 'Dismiss',\n  calendar: {\n    year: 'Year',\n    previous_decade: 'Previous Decade',\n    next_decade: 'Next Decade',\n    month: 'Month',\n    previous_month: 'Previous Month',\n    next_month: 'Next Month',\n    today: 'Today',\n  },\n  split_button: {\n    x_options: '{name} Options',\n    more_options: 'More Options',\n  },\n  combobox: {\n    select_an_option: 'Select an option…',\n    filter_options: 'Filter Options',\n    no_matching_options: 'No matching options found',\n  },\n  number_input: {\n    decrease: 'Decrease',\n    increase: 'Increase',\n  },\n  password_input: {\n    show_password: 'Show Password',\n    hide_password: 'Hide Password',\n  },\n  secret_input: {\n    show_secret: 'Show Secret',\n    hide_secret: 'Hide Secret',\n  },\n  select_tags: {\n    selected_options: 'Selected options',\n    remove_x: 'Remove {name}',\n  },\n  text_editor: {\n    text_editor: 'Text Editor',\n    code_editor: 'Code Editor',\n    text_style_options: 'Text Style Options',\n    show_text_style_options: 'Show Text Style Options',\n    paragraph: 'Paragraph',\n    heading_1: 'Heading 1',\n    heading_2: 'Heading 2',\n    heading_3: 'Heading 3',\n    heading_4: 'Heading 4',\n    heading_5: 'Heading 5',\n    heading_6: 'Heading 6',\n    bulleted_list: 'Bulleted List',\n    numbered_list: 'Numbered List',\n    blockquote: 'Block Quote',\n    code_block: 'Code Block',\n    bold: 'Bold',\n    italic: 'Italic',\n    strikethrough: 'Strikethrough',\n    code: 'Code',\n    link: 'Link',\n    insert_link: 'Insert Link',\n    update_link: 'Update Link',\n    text: 'Text',\n    url: 'URL',\n    edit_in_markdown: 'Edit in Markdown',\n    converter_error:\n      'There was an error while enabling rich text mode. Please use the plain text editor instead.',\n    language: 'Language',\n    plain_text: 'Plain Text',\n  },\n};\n","export const strings = {\n  ok: 'OK',\n  cancel: 'キャンセル',\n  close: '閉じる',\n  clear: 'クリア',\n  insert: '挿入',\n  update: '更新',\n  remove: '削除',\n  collapse: '折り畳む',\n  expand: '広げる',\n  dismiss: '閉じる',\n  calendar: {\n    year: '年',\n    previous_decade: '前の 10 年',\n    next_decade: '次の 10 年',\n    month: '月',\n    previous_month: '前月',\n    next_month: '翌月',\n    today: '今日',\n  },\n  split_button: {\n    x_options: '{name} オプション',\n    more_options: 'その他のオプション',\n  },\n  combobox: {\n    select_an_option: 'オプションを選択…',\n    filter_options: 'オプションを絞り込み',\n    no_matching_options: '一致するオプションは見つかりませんでした',\n  },\n  number_input: {\n    decrease: '減らす',\n    increase: '増やす',\n  },\n  password_input: {\n    show_password: 'パスワードを表示',\n    hide_password: 'パスワードを隠す',\n  },\n  secret_input: {\n    show_secret: 'シークレットを表示',\n    hide_secret: 'シークレットを隠す',\n  },\n  select_tags: {\n    selected_options: '選択済みのオプション',\n    remove_x: '{name} を削除',\n  },\n  text_editor: {\n    text_editor: 'テキストエディター',\n    code_editor: 'コードエディター',\n    text_style_options: 'テキストスタイルオプション',\n    show_text_style_options: 'テキストスタイルオプションを表示',\n    paragraph: '段落',\n    heading_1: '見出し 1',\n    heading_2: '見出し 2',\n    heading_3: '見出し 3',\n    heading_4: '見出し 4',\n    heading_5: '見出し 5',\n    heading_6: '見出し 6',\n    bulleted_list: '番号なしリスト',\n    numbered_list: '番号付きリスト',\n    blockquote: 'ブロック引用',\n    code_block: 'コードブロック',\n    bold: '太字',\n    italic: '斜体',\n    strikethrough: '取り消し線',\n    code: 'コード',\n    link: 'リンク',\n    insert_link: 'リンクを挿入',\n    update_link: 'リンクを更新',\n    text: 'テキスト',\n    url: 'URL',\n    edit_in_markdown: 'マークダウンで編集',\n    converter_error:\n      'リッチテキストモードを有効化中に問題が発生しました。代わりにプレーンテキストエディターを使用してください。',\n    language: '言語',\n    plain_text: 'プレーンテキスト',\n  },\n};\n","import { addMessages, locale as appLocale, init } from 'svelte-i18n';\nimport { writable } from 'svelte/store';\n\n/**\n * Whether the current document is in RTL mode.\n * @type {import('svelte/store').Writable<boolean>}\n */\nexport const isRTL = writable(false);\n\n/**\n * Load strings and initialize the locales.\n * @param {object} [init] Initialize options.\n * @param {string} [init.fallbackLocale] Fallback locale.\n * @param {string} [init.initialLocale] Initial locale.\n * @see https://github.com/kaisermann/svelte-i18n/blob/main/docs/Getting%20Started.md\n * @see https://vitejs.dev/guide/features.html#glob-import\n */\nexport const initLocales = ({ fallbackLocale = 'en', initialLocale = 'en' } = {}) => {\n  /** @type {{ [key: string]: { strings: object }}} */\n  const modules = import.meta.glob('../locales/*.js', { eager: true });\n\n  Object.entries(modules).forEach(([path, { strings }]) => {\n    const [, locale] = /** @type {string[]} */ (path.match(/([a-zA-Z-]+)\\.js/));\n\n    // Add `_sui` suffix to avoid collision with app localization\n    addMessages(locale, /** @type {any} */ ({ _sui: strings }));\n  });\n\n  init({\n    fallbackLocale,\n    initialLocale,\n  });\n};\n\n/**\n * List of RTL locales: Arabic, Persian, Hebrew, Urdu.\n * @internal\n */\nexport const RTL_LOCALES = ['ar', 'fa', 'he', 'ur'];\n\n/**\n * Get the text direction of the given locale.\n * @internal\n * @param {string | null | undefined} locale Locale code.\n * @returns {'rtl' | 'ltr'} Text direction.\n */\nexport const getDirection = (locale) =>\n  locale && RTL_LOCALES.includes(locale.split('-')[0]) ? 'rtl' : 'ltr';\n\nif (!import.meta.env.SSR) {\n  // Set the `dir` attribute on the HTML element based on the current locale.\n  // @todo Move this to Sveltia UI and then Sveltia I18N\n  appLocale.subscribe((value) => {\n    document.documentElement.dir = getDirection(value);\n  });\n\n  // Update `isRTL` store based on the current document direction.\n  new MutationObserver(() => {\n    isRTL.set(document.dir === 'rtl');\n  }).observe(document.documentElement, {\n    attributes: true,\n    attributeFilter: ['dir'],\n  });\n}\n","<!--\n  @component\n  A Material Symbols icon.\n  @see https://developers.google.com/fonts/docs/material_symbols\n-->\n<script>\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the `span` element.\n   * @property {string} [name] Icon name, e.g. `search`, `expand_more`, `close`, etc.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    name,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<span\n  {...restProps}\n  class=\"sui icon material-symbols-outlined {className}\"\n  aria-hidden={!('aria-label' in restProps)}\n>\n  {name}\n</span>\n\n<style>.icon.small-arrow {\n  overflow: hidden;\n  width: 12px;\n  text-indent: -6px;\n}</style>\n","<!--\n  @component\n  Inline alert message.\n  @see https://w3c.github.io/aria/#alert\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/alert/\n-->\n<script>\n  import Icon from '../icon/icon.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {'error' | 'warning' | 'info' | 'success'} status Alert status.\n   * @property {Snippet} [children] Primary slot content.\n   * @property {Snippet} [icon] Icon slot content.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    status,\n    children,\n    icon,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div {...restProps} role=\"alert\" class=\"sui alert {status}\">\n  {#if icon}\n    {@render icon()}\n  {:else}\n    <Icon name={status === 'success' ? 'check_circle' : status} />\n  {/if}\n  {@render children?.()}\n</div>\n\n<style>.alert {\n  display: flex;\n  align-items: center;\n  gap: var(--gap, 8px);\n  padding: var(--padding, 8px);\n  border-width: var(--border-width, var(--sui-control-medium-border-width));\n  border-style: var(--border-style, solid);\n  border-radius: var(--border-radius, var(--sui-control-medium-border-radius));\n  font-size: var(--font-size, var(--sui-font-size-default));\n}\n.alert.error {\n  border-color: var(--sui-error-border-color);\n  color: var(--sui-error-foreground-color);\n  background-color: var(--sui-error-background-color);\n}\n.alert.warning {\n  border-color: var(--sui-warning-border-color);\n  color: var(--sui-warning-foreground-color);\n  background-color: var(--sui-warning-background-color);\n}\n.alert.info {\n  border-color: var(--sui-info-border-color);\n  color: var(--sui-info-foreground-color);\n  background-color: var(--sui-info-background-color);\n}\n.alert.success {\n  border-color: var(--sui-success-border-color);\n  color: var(--sui-success-foreground-color);\n  background-color: var(--sui-success-background-color);\n}</style>\n","/**\n * @import { ActionReturn } from 'svelte/action';\n */\n\n/** @type {boolean | undefined} */\nlet _isMac;\n\n/**\n * Check if the user agent is macOS.\n * @returns {boolean} Result.\n */\nexport const 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'];\nconst CODE_RE = /^(?:Digit|Key)(.)$/;\n\n/**\n * Whether the event matches the given keyboard shortcuts.\n * @param {KeyboardEvent} event `keydown` or `keypress` event.\n * @param {string} shortcuts Keyboard shortcuts like `A` or `Ctrl+S`.\n * @returns {boolean} Result.\n * @see https://w3c.github.io/aria/#aria-keyshortcuts\n */\nexport const matchShortcuts = (event, shortcuts) => {\n  const { ctrlKey, metaKey, altKey, shiftKey, code } = event;\n\n  // The `code` property can be `undefined` in some cases\n  if (!code) {\n    return false;\n  }\n\n  const key = code.replace(CODE_RE, '$1');\n\n  return shortcuts.split(/\\s+/).some((shortcut) => {\n    const keys = shortcut.split('+');\n\n    // Check if required modifier keys are pressed\n    if (\n      (keys.includes('Ctrl') && !ctrlKey) ||\n      (keys.includes('Meta') && !metaKey) ||\n      (keys.includes('Alt') && !altKey) ||\n      (keys.includes('Shift') && !shiftKey)\n    ) {\n      return false;\n    }\n\n    // Check if unnecessary modifier keys are not pressed\n    if (\n      (!keys.includes('Ctrl') && ctrlKey) ||\n      (!keys.includes('Meta') && metaKey) ||\n      (!keys.includes('Alt') && altKey) ||\n      (!keys.includes('Shift') && shiftKey)\n    ) {\n      return false;\n    }\n\n    return keys\n      .filter((_key) => !MODIFIER_KEYS.includes(_key))\n      .every((_key) => _key.toUpperCase() === key.toUpperCase());\n  });\n};\n\n/**\n * Activate keyboard shortcuts.\n * @param {(HTMLInputElement | HTMLButtonElement)} element Element.\n * @param {string} [shortcuts] Keyboard shortcuts like `A` or `Accel+S` to focus and click the text\n * field or button. Multiple shortcuts can be defined space-separated. The `Accel` modifier will be\n * replaced with `Ctrl` on Windows/Linux and `Command` on macOS.\n * @returns {ActionReturn} Actions.\n */\nexport const activateKeyShortcuts = (element, shortcuts = '') => {\n  /** @type {string | undefined} */\n  let platformKeyShortcuts;\n  /**\n   * Pre-parsed shortcuts for fast per-event matching without string allocations.\n   * @type {{ ctrl: boolean, meta: boolean, alt: boolean, shift: boolean, nonModifierKeys: string[]\n   * }[] | undefined}\n   */\n  let parsedShortcuts;\n\n  /**\n   * Handle the event.\n   * @param {KeyboardEvent} event `keydown` event.\n   */\n  const handler = (event) => {\n    const { disabled, offsetParent } = element;\n\n    // Check shortcut match and visibility first — no layout reflow until needed\n    if (\n      !offsetParent ||\n      !parsedShortcuts?.some(({ ctrl, meta, alt, shift, nonModifierKeys }) => {\n        const { ctrlKey, metaKey, altKey, shiftKey, code } = event;\n\n        if (!code) {\n          return false;\n        }\n\n        const key = code.replace(CODE_RE, '$1').toUpperCase();\n\n        return (\n          ctrl === ctrlKey &&\n          meta === metaKey &&\n          alt === altKey &&\n          shift === shiftKey &&\n          nonModifierKeys.every((k) => k === key)\n        );\n      })\n    ) {\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    if (document.elementsFromPoint(left + 4, top + 4).includes(element)) {\n      event.preventDefault();\n\n      // Trigger click only when the element is enabled\n      if (!disabled) {\n        element.focus();\n        element.click();\n      }\n    }\n\n    if (disabled) {\n      element.style.removeProperty('pointer-events');\n    }\n  };\n\n  /**\n   * Remove the event listener.\n   */\n  const removeListener = () => {\n    globalThis.removeEventListener('keydown', handler, { capture: true });\n    element.removeAttribute('aria-keyshortcuts');\n  };\n\n  /**\n   * Add the event listener.\n   */\n  const addListener = () => {\n    platformKeyShortcuts = shortcuts\n      ? shortcuts.replace(/\\bAccel\\b/g, isMac() ? 'Meta' : 'Ctrl')\n      : undefined;\n\n    if (platformKeyShortcuts) {\n      parsedShortcuts = platformKeyShortcuts.split(/\\s+/).map((shortcut) => {\n        const parts = shortcut.split('+');\n\n        return {\n          ctrl: parts.includes('Ctrl'),\n          meta: parts.includes('Meta'),\n          alt: parts.includes('Alt'),\n          shift: parts.includes('Shift'),\n          nonModifierKeys: parts\n            .filter((k) => !MODIFIER_KEYS.includes(k))\n            .map((k) => k.toUpperCase()),\n        };\n      });\n\n      globalThis.addEventListener('keydown', handler, { capture: true });\n      element.setAttribute('aria-keyshortcuts', platformKeyShortcuts);\n    } else {\n      parsedShortcuts = undefined;\n    }\n  };\n\n  addListener();\n\n  return {\n    // eslint-disable-next-line jsdoc/require-jsdoc, no-shadow, no-unused-vars\n    update(shortcuts) {\n      removeListener();\n      addListener();\n    },\n\n    // eslint-disable-next-line jsdoc/require-jsdoc\n    destroy() {\n      removeListener();\n    },\n  };\n};\n","<script>\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {number} [lines] Number of lines.\n   * @property {Snippet} [children] Primary slot content.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    lines = 1,\n    children = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<span\n  role=\"none\"\n  class=\"sui truncated-text\"\n  style=\"-webkit-line-clamp: {lines}; line-clamp: {lines};\"\n>\n  {@render children?.()}\n</span>\n\n<style>.truncated-text {\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  overflow: hidden;\n  white-space: normal;\n  overflow-wrap: anywhere;\n}</style>\n","import { generateUUID } from './crypto.js';\n\n/**\n * Get a random ID that can be used for elements.\n * @param {string} [prefix] - Prefix to be added to the ID, e.g. `popup`.\n * @param {number} [length] - Number of characters to be used in the ID.\n * @returns {string} Generated ID.\n */\nconst generateElementId = (prefix = 'e', length = 7) => [prefix, generateUUID(length)].join('-');\n\n/**\n * Wait until the given element enters the viewport.\n * @param {HTMLElement | undefined} element - Element to observe.\n * @returns {void | Promise<void>} Promise to be resolved when the element becomes visible. If the\n * `element` is not available yet, `undefined` will be returned instead.\n */\nconst waitForVisibility = (element) => {\n  if (!element) {\n    return undefined;\n  }\n\n  return new Promise((resolve) => {\n    const observer = new IntersectionObserver(([entry]) => {\n      if (entry.isIntersecting) {\n        observer.disconnect();\n        resolve(undefined);\n      }\n    });\n\n    globalThis.requestAnimationFrame(() => {\n      observer.observe(element);\n    });\n  });\n};\n\nexport { generateElementId, waitForVisibility };\n","import { generateElementId } from '@sveltia/utils/element';\nimport { sleep } from '@sveltia/utils/misc';\nimport { on } from 'svelte/events';\nimport { get, writable } from 'svelte/store';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import { PopupPosition } from '../typedefs';\n */\n\n/**\n * Implement the popup handler.\n */\nclass Popup {\n  open = writable(false);\n\n  /**\n   * @type {Writable<{\n   * inset: string | undefined,\n   * zIndex: number | undefined,\n   * minWidth: string | undefined,\n   * maxWidth: string | undefined,\n   * height: string | undefined,\n   * }>}\n   */\n  style = writable({\n    inset: undefined,\n    zIndex: undefined,\n    minWidth: undefined,\n    maxWidth: undefined,\n    height: undefined,\n  });\n\n  observer = new IntersectionObserver((entries) => {\n    entries.forEach(({ intersectionRect, rootBounds }) => {\n      if (!intersectionRect || !rootBounds) {\n        return;\n      }\n\n      const content = /** @type {HTMLElement} */ (this.popupElement.querySelector('.content'));\n      const { scrollHeight: contentHeight, scrollWidth: contentWidth } = content;\n      const topMargin = intersectionRect.top - 8;\n      const bottomMargin = rootBounds.height - intersectionRect.bottom - 8;\n      let { position } = this;\n      let height;\n\n      // 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      const current = get(this.style);\n\n      if (\n        style.inset !== current.inset ||\n        style.zIndex !== current.zIndex ||\n        style.minWidth !== current.minWidth ||\n        style.maxWidth !== current.maxWidth ||\n        style.height !== current.height\n      ) {\n        this.style.set(style);\n      }\n    });\n  });\n\n  /**\n   * Initialize a new `Popup` instance.\n   * @param {HTMLButtonElement} anchorElement `<button>` element that triggers the popup.\n   * @param {HTMLDialogElement} popupElement `<dialog>` element to be used for the popup.\n   * @param {PopupPosition} position Where to show the popup content.\n   * @param {HTMLElement} [positionBaseElement] The base element of the `position`. If omitted, this\n   * will be the `anchorElement`.\n   */\n  constructor(anchorElement, popupElement, position, positionBaseElement) {\n    this.anchorElement = anchorElement;\n    this.popupElement = popupElement; // = backdrop\n    this.position = position;\n    this.positionBaseElement = positionBaseElement ?? anchorElement;\n    this.id = generateElementId('popup');\n\n    this.anchorElement.setAttribute('aria-controls', this.id);\n    this.popupElement.setAttribute('id', this.id);\n\n    on(anchorElement, 'click', () => {\n      if (!this.isDisabled && !this.isReadOnly) {\n        this.open.set(!get(this.open));\n      }\n    });\n\n    on(anchorElement, 'keydown', (event) => {\n      const { key, ctrlKey, metaKey, shiftKey, altKey } = event;\n      const hasModifier = shiftKey || altKey || ctrlKey || metaKey;\n\n      if (!this.isDisabled && !this.isReadOnly && ['Enter', ' '].includes(key) && !hasModifier) {\n        event.preventDefault();\n        event.stopPropagation();\n        this.open.set(!get(this.open));\n      }\n    });\n\n    on(anchorElement, 'transitionstart', () => {\n      if (this.anchorElement.closest('.hiding, .hidden, [hidden]')) {\n        this.hideImmediately();\n      }\n    });\n\n    new IntersectionObserver(([entry]) => {\n      if (!entry.isIntersecting && get(this.open)) {\n        this.hideImmediately();\n      }\n    }).observe(this.anchorElement);\n\n    // Close the popup when the backdrop, a menu item or an option is clicked\n    on(this.popupElement, 'click', (event) => {\n      event.stopPropagation();\n\n      // eslint-disable-next-line prefer-destructuring\n      const target = /** @type {HTMLElement} */ (event.target);\n\n      if (\n        get(this.open) &&\n        (target === this.popupElement || target.matches('[role^=\"menuitem\"], [role=\"option\"]'))\n      ) {\n        this.open.set(false);\n      }\n    });\n\n    on(this.popupElement, 'keydown', (event) => {\n      const { key, ctrlKey, metaKey, shiftKey, altKey } = event;\n      const hasModifier = shiftKey || altKey || ctrlKey || metaKey;\n\n      if (key === 'Escape' && !hasModifier) {\n        event.preventDefault();\n        event.stopPropagation();\n        this.open.set(false);\n      }\n    });\n\n    this.open.subscribe((open) => {\n      if (open) {\n        this.checkPosition();\n      } else if (this.anchorElement.getAttribute('aria-expanded') === 'true') {\n        this.anchorElement.focus();\n        this.anchorElement.removeAttribute('aria-controls');\n      }\n\n      this.anchorElement.setAttribute('aria-expanded', String(open));\n    });\n\n    // Update the popup width when the base element is resized\n    new ResizeObserver(() => {\n      cancelAnimationFrame(this._rafId);\n      this._rafId = requestAnimationFrame(() => this.checkPosition());\n    }).observe(this.positionBaseElement);\n  }\n\n  /**\n   * Whether the anchor element is disabled.\n   * @type {boolean}\n   */\n  get isDisabled() {\n    return this.anchorElement.matches('[aria-disabled=\"true\"]');\n  }\n\n  /**\n   * Whether the anchor element is read-only.\n   * @type {boolean}\n   */\n  get isReadOnly() {\n    return this.anchorElement.matches('[aria-readonly=\"true\"]');\n  }\n\n  /**\n   * Check the position of the anchor element.\n   */\n  checkPosition() {\n    this.observer.unobserve(this.positionBaseElement);\n    this.observer.observe(this.positionBaseElement);\n  }\n\n  /**\n   * Hide the popup immediately (when the anchor is being hidden).\n   */\n  async hideImmediately() {\n    this.popupElement.hidden = true;\n    this.open.set(false);\n    await sleep(50);\n    this.popupElement.hidden = false;\n  }\n}\n\n/**\n * Activate a new popup.\n * @param {...any} args Arguments.\n * @returns {Popup} New popup.\n */\n// @ts-ignore\nexport const activatePopup = (...args) => new Popup(...args);\n","<!--\n  @component\n  @see https://github.com/sveltejs/svelte/issues/3088\n-->\n<script>\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Snippet} [children] Primary slot content.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    children,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n{@render children?.()}\n","<!--\n  @component\n  A generic modal top-layer helper based on the HTML `<dialog>` element.\n-->\n<script>\n  import { sleep } from '@sveltia/utils/misc';\n  import { mount, onMount, unmount } from 'svelte';\n  import Placeholder from './placeholder.svelte';\n\n  /**\n   * @import { ModalProps } from '../../typedefs';\n   */\n\n  /**\n   * @type {ModalProps & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    open = $bindable(false),\n    dialog = $bindable(),\n    class: className,\n    role = 'dialog',\n    showBackdrop = false,\n    lightDismiss = false,\n    escapeDismiss = true,\n    keepContent = false,\n    children,\n    extraContent,\n    onOpening,\n    onOpen,\n    onClosing,\n    onOk,\n    onCancel,\n    onClose,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /**\n   * Focus the `<dialog>` element.\n   */\n  export const focus = () => {\n    dialog?.focus();\n  };\n\n  /**\n   * Close the modal.\n   * @param {string} returnValue Return value to be used for `<dialog>`.\n   */\n  export const close = (returnValue) => {\n    if (!dialog) {\n      return;\n    }\n\n    dialog.returnValue = returnValue;\n    open = false;\n  };\n\n  let setOpenClass = $state(false);\n  let setActiveClass = $state(false);\n  let showContent = $state(false);\n\n  /**\n   * Resolve once the transition is complete.\n   * @returns {Promise<void>} Nothing.\n   */\n  const waitForTransition = async () =>\n    new Promise((resolve) => {\n      /**\n       * Transition event listener.\n       * @param {TransitionEvent} event `transition` event.\n       */\n      const listener = (event) => {\n        if (event.target === dialog) {\n          dialog.removeEventListener('transitionend', listener);\n          resolve();\n        }\n      };\n\n      dialog?.addEventListener('transitionend', listener);\n    });\n\n  /**\n   * Show the modal.\n   */\n  const openDialog = async () => {\n    if (!dialog || dialog?.open) {\n      return;\n    }\n\n    onOpening?.(new CustomEvent('Opening'));\n    showContent = true;\n    dialog.showModal();\n    onOpen?.(new CustomEvent('Open'));\n    await sleep(0);\n    setOpenClass = true;\n    await waitForTransition();\n    setActiveClass = true;\n  };\n\n  /**\n   * Hide the modal.\n   */\n  const closeDialog = async () => {\n    if (!dialog || !dialog.open) {\n      return;\n    }\n\n    const { returnValue } = dialog;\n\n    onClosing?.(new CustomEvent('Closing'));\n    // Prevent a button behind the `<dialog>` from being clicked erroneously (Svelte bug)\n    document.body.inert = true;\n    dialog.close();\n    document.body.inert = false;\n    setActiveClass = false;\n    setOpenClass = false;\n    await waitForTransition();\n    showContent = false;\n\n    if (returnValue === 'ok') {\n      onOk?.(new CustomEvent('Ok'));\n    }\n\n    if (returnValue === 'cancel') {\n      onCancel?.(new CustomEvent('Cancel'));\n    }\n\n    onClose?.(new CustomEvent('Close', { detail: { returnValue } }));\n    dialog.returnValue = '';\n  };\n\n  $effect(() => {\n    if (open) {\n      openDialog();\n    } else {\n      closeDialog();\n    }\n  });\n\n  onMount(() => {\n    const placeholder = mount(Placeholder, {\n      target: document.querySelector('.sui.app-shell') ?? document.body,\n      // eslint-disable-next-line no-use-before-define\n      props: { children: dialogSnippet },\n    });\n\n    // onUnmount\n    return () => {\n      dialog?.close();\n      unmount(placeholder);\n    };\n  });\n</script>\n\n{#snippet dialogSnippet()}\n  <dialog\n    bind:this={dialog}\n    {...restProps}\n    inert={!setOpenClass}\n    {role}\n    class=\"sui modal {className}\"\n    class:backdrop={showBackdrop}\n    class:open={setOpenClass}\n    class:active={setActiveClass}\n    onclick={({ target }) => {\n      if (\n        dialog &&\n        lightDismiss &&\n        /** @type {HTMLElement | undefined} */ (target)?.matches('dialog')\n      ) {\n        dialog.returnValue = 'cancel';\n        open = false;\n      }\n    }}\n    oncancel={(event) => {\n      event.preventDefault();\n\n      // Escape key is pressed\n      if (dialog && escapeDismiss) {\n        dialog.returnValue = 'cancel';\n        open = false;\n      }\n    }}\n  >\n    {@render extraContent?.()}\n    {#if showContent || keepContent}\n      {@render children?.()}\n    {/if}\n  </dialog>\n{/snippet}\n\n<style>dialog {\n  position: fixed;\n  inset: 0;\n  z-index: 9999999;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  overflow: hidden;\n  outline: 0;\n  margin: 0;\n  border: 0;\n  padding: 0;\n  width: 100dvw;\n  max-width: 100dvw;\n  height: 100dvh;\n  max-height: 100dvh;\n  color: var(--sui-primary-foreground-color);\n  background: transparent;\n  -webkit-user-select: none;\n  user-select: none;\n  touch-action: none;\n  pointer-events: all;\n  cursor: default;\n}\ndialog::backdrop {\n  background: transparent;\n}\ndialog.backdrop {\n  background-color: var(--sui-popup-backdrop-color);\n}\ndialog.open {\n  transition-duration: 50ms;\n  opacity: 1;\n}\ndialog:not(.open) {\n  transition-duration: 400ms;\n  opacity: 0;\n}\ndialog[hidden] {\n  transition-duration: 1ms !important;\n}\ndialog:not(.active) {\n  pointer-events: none !important;\n}\ndialog:not(.active) :global(*) {\n  transition-duration: 0ms !important;\n  pointer-events: none !important;\n}</style>\n","<!--\n  @component\n  Generic popup helper.\n-->\n<script>\n  import { sleep } from '@sveltia/utils/misc';\n  import { onMount } from 'svelte';\n  import { writable } from 'svelte/store';\n  import { activatePopup } from '../../services/popup.svelte.js';\n  import Modal from './modal.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import { Writable } from 'svelte/store';\n   * @import { ModalProps, PopupPosition } from '../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the content element.\n   * @property {boolean} [open] Whether to open the popup.\n   * @property {boolean} [hovered] Whether the content is hovered.\n   * @property {HTMLElement} [anchor] A reference to the anchor element that opens the popup.\n   * Typically a `<button>`.\n   * @property {HTMLElement} [content] A reference to the content element.\n   * @property {PopupPosition} [position] Where to show the popup.\n   * @property {HTMLElement} [positionBaseElement] The base element of {@link position}. If omitted,\n   * this will be {@link anchor}.\n   * @property {HTMLDialogElement} [parentDialogElement] A reference to a dialog element that is\n   * already displayed. This should be provided for a nested popup.\n   * @property {boolean} [touchOptimized] Whether to show the popup at the center of the screen on\n   * mobile/tablet and ignore the defined dropdown `position`.\n   * @property {Snippet} [children] Primary slot content.\n   * @property {Snippet} [extraContent] Extra slot content.\n   * @property {(event: CustomEvent) => void} [onOpen] Custom `Open` event handler.\n   */\n\n  /**\n   * @type {ModalProps & Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    open = $bindable(false),\n    hovered = $bindable(false),\n    content = $bindable(undefined),\n    class: className,\n    showBackdrop = undefined,\n    anchor,\n    position = 'bottom-left',\n    positionBaseElement = undefined,\n    parentDialogElement = undefined,\n    touchOptimized = false,\n    children,\n    onOpen,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /**\n   * @type {boolean}\n   */\n  let initialized = $state(false);\n  /**\n   * A reference to the `<dialog>` element.\n   * @type {HTMLDialogElement | undefined}\n   */\n  let dialogElement = $state();\n  /**\n   * Whether the touch is enabled on the user device.\n   * @type {boolean}\n   */\n  let touchEnabled = $state(false);\n  /**\n   * The type of the content displayed in the popup, defined with the `aria-haspopup` attribute on\n   * the anchor element.\n   * @type {string | undefined}\n   * @see https://w3c.github.io/aria/#aria-haspopup\n   */\n  let contentType = $state();\n  /**\n   * Style to be applied to the content.\n   * @type {Writable<Record<string, any>>}\n   */\n  let style = $state(\n    writable({\n      inset: undefined,\n      zIndex: undefined,\n      width: undefined,\n      height: undefined,\n    }),\n  );\n\n  /**\n   * @type {{ style: Writable<Record<string, any>>, open: Writable<boolean>, checkPosition:\n   * () => void } | undefined}\n   */\n  let popupInstance = undefined;\n  let hoveredTimeout = 0;\n\n  /**\n   * Initialize the popup.\n   */\n  const init = () => {\n    popupInstance = activatePopup(anchor, dialogElement, position, positionBaseElement);\n\n    style = popupInstance.style;\n    popupInstance.open.subscribe((_open) => {\n      open = _open;\n    });\n\n    contentType = anchor?.getAttribute('aria-haspopup') ?? undefined;\n    initialized = true;\n  };\n\n  $effect(() => {\n    if (parentDialogElement && !dialogElement && content) {\n      dialogElement = parentDialogElement;\n      dialogElement.append(content);\n    }\n  });\n\n  $effect(() => {\n    if (anchor && dialogElement && !initialized) {\n      init();\n    }\n  });\n\n  $effect(() => {\n    if (parentDialogElement && open) {\n      popupInstance?.checkPosition();\n    }\n  });\n\n  const touch = $derived(touchOptimized && touchEnabled);\n\n  onMount(() => {\n    touchEnabled = globalThis.matchMedia('(pointer: coarse)').matches;\n  });\n</script>\n\n{#snippet contentWrapper()}\n  <div\n    bind:this={content}\n    hidden={!open}\n    role=\"none\"\n    class=\"content {className} {contentType}\"\n    class:touch\n    style:inset={$style.inset}\n    style:z-index={$style.zIndex}\n    style:min-width={$style.minWidth}\n    style:max-width={$style.maxWidth}\n    style:max-height={$style.height}\n    style:visibility={$style.inset ? undefined : 'hidden'}\n    onmouseenter={() => {\n      hovered = true;\n\n      if (parentDialogElement) {\n        window.clearTimeout(hoveredTimeout);\n      }\n    }}\n    onmouseleave={() => {\n      hovered = false;\n\n      if (parentDialogElement) {\n        hoveredTimeout = window.setTimeout(() => {\n          open = false;\n        }, 200);\n      }\n    }}\n  >\n    {@render children?.()}\n  </div>\n{/snippet}\n\n{#if parentDialogElement}\n  {@render contentWrapper()}\n{:else}\n  <Modal\n    {...restProps}\n    bind:dialog={dialogElement}\n    role=\"none\"\n    class=\"popup\"\n    bind:open\n    showBackdrop={showBackdrop ?? touch}\n    lightDismiss={true}\n    keepContent={true}\n    onOpen={async (event) => {\n      onOpen?.(event);\n\n      await sleep(100);\n\n      if (!content) {\n        return;\n      }\n\n      const target = /** @type {HTMLElement} */ (\n        content.querySelector('[tabindex]:not([aria-disabled=\"true\"])')\n      );\n\n      if (target) {\n        target.focus();\n      } else {\n        content.tabIndex = -1;\n        content.focus();\n      }\n    }}\n  >\n    {@render contentWrapper()}\n  </Modal>\n{/if}\n\n<style>.content {\n  position: absolute;\n  overflow-y: auto;\n  outline-width: 0 !important;\n  width: auto;\n  color: var(--sui-primary-foreground-color);\n  background-color: var(--sui-secondary-background-color-translucent);\n  box-shadow: 0 8px 16px var(--sui-popup-shadow-color);\n  -webkit-backdrop-filter: blur(16px);\n  backdrop-filter: blur(16px);\n  transition-property: opacity, transform;\n}\n.content.menu {\n  border-width: var(--sui-menu-border-width, 1px);\n  border-style: var(--sui-menu-border-style, solid);\n  border-color: var(--sui-menu-border-width, var(--sui-secondary-border-color));\n  border-radius: var(--sui-menu-border-radius, 4px);\n  padding: var(--sui-menu-padding, 4px);\n}\n.content.menu :global(.sui.menu) {\n  border-width: 0;\n  border-radius: 0;\n  padding: 0;\n  background-color: transparent;\n}\n.content.listbox {\n  border-width: var(--sui-listbox-border-width, 1px);\n  border-style: var(--sui-listbox-border-style, solid);\n  border-color: var(--sui-listbox-border-width, var(--sui-secondary-border-color));\n  border-radius: var(--sui-listbox-border-radius, 4px);\n  padding: var(--sui-listbox-padding, 4px);\n}\n.content.listbox :global(.sui.listbox) {\n  border-width: 0;\n  border-radius: 0;\n  padding: 0;\n  background-color: transparent;\n}\n.content.touch {\n  position: static;\n  border-width: 0 !important;\n  border-radius: 4px !important;\n  padding: 8px;\n  min-width: 320px !important;\n  max-width: calc(100dvw - 32px) !important;\n  max-height: calc(100dvh - 32px) !important;\n}\n:global(dialog.open) .content.touch {\n  transform: scale(100%) !important;\n}\n:global(dialog:not(.open)) .content.touch {\n  transform: scale(90%);\n}\n.content.touch.combobox :global(.sui.listbox) {\n  gap: 4px;\n  padding: 8px 4px !important;\n}\n:global(dialog.open) .content {\n  transition-duration: 50ms;\n  opacity: 1;\n  transform: translateY(2px);\n}\n:global(dialog:not(.open)) .content {\n  transition-duration: 300ms;\n  opacity: 0;\n  transform: translateY(-8px);\n}</style>\n","<!--\n  @component\n  A generic button widget based on the HTML `<button>` element.\n  @see https://w3c.github.io/aria/#button\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/button/\n-->\n<script>\n  import { activateKeyShortcuts } from '../../services/events.svelte.js';\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  use:activateKeyShortcuts={keyShortcuts}\n>\n  {@render startIcon?.()}\n  {#if variant === 'link'}\n    {#if label}\n      <span role=\"none\" class=\"label\">\n        <TruncatedText {lines}>\n          {label}\n        </TruncatedText>\n      </span>\n    {:else}\n      <span role=\"none\" class=\"label\">\n        {@render children?.()}\n      </span>\n    {/if}\n  {:else}\n    {#if label}\n      <span role=\"none\" class=\"label\">\n        <TruncatedText {lines}>\n          {label}\n        </TruncatedText>\n      </span>\n    {/if}\n    {@render children?.()}\n  {/if}\n  {@render endIcon?.()}\n</button>\n\n{#if popup}\n  <Popup\n    anchor={element}\n    position={popupPosition}\n    showBackdrop={showPopupBackdrop}\n    touchOptimized={true}\n  >\n    {@render popup()}\n  </Popup>\n{/if}\n\n<style>button {\n  flex: none;\n  display: inline-flex;\n  align-items: center;\n  gap: 4px;\n  margin: var(--sui-focus-ring-width);\n  border-width: 0;\n  border-style: solid;\n  border-color: transparent;\n  padding: 0;\n  color: var(--sui-control-foreground-color, inherit);\n  background-color: transparent;\n  box-shadow: none;\n  font-family: var(--sui-control-font-family);\n  font-size: var(--sui-control-font-size);\n  line-height: var(--sui-control-line-height);\n  font-weight: var(--sui-font-weight-normal, normal);\n  text-align: start;\n  cursor: pointer;\n  transition: all 200ms;\n}\nbutton[hidden] {\n  display: none !important;\n}\nbutton:not(:disabled):focus-visible {\n  z-index: 1;\n}\nbutton:is(.primary, .secondary, .tertiary, .ghost) {\n  justify-content: center;\n  border-width: 1px;\n}\nbutton:is(.primary, .secondary, .tertiary, .ghost) .label:only-child {\n  padding: 0 4px;\n}\nbutton.primary {\n  border-width: var(--sui-button-primary-border-width, 1px);\n  border-style: var(--sui-button-primary-border-style, solid);\n  border-color: var(--sui-button-primary-border-color, var(--sui-primary-accent-color));\n  color: var(--sui-button-primary-foreground-color, var(--sui-primary-accent-color-inverted));\n  background-color: var(--sui-button-primary-background-color, var(--sui-primary-accent-color));\n  font-weight: var(--sui-button-primary-font-weight, var(--sui-font-weight-normal, normal));\n}\nbutton.primary:is(:hover, :focus-visible, [aria-expanded=true]) {\n  color: var(--sui-button-primary-foreground-color-focus, var(--sui-button-primary-foreground-color, var(--sui-primary-accent-color-inverted)));\n  background-color: var(--sui-button-primary-background-color-focus, var(--sui-primary-accent-color-light));\n}\nbutton.primary:active {\n  color: var(--sui-button-primary-foreground-color-active, var(--sui-button-primary-foreground-color, var(--sui-primary-accent-color-inverted)));\n  background-color: var(--sui-button-primary-background-color-active, var(--sui-primary-accent-color-dark));\n}\nbutton.secondary {\n  border-width: var(--sui-button-secondary-border-width, 1px);\n  border-style: var(--sui-button-secondary-border-style, solid);\n  border-color: var(--sui-button-secondary-border-color, var(--sui-primary-accent-color));\n  color: var(--sui-button-secondary-foreground-color, var(--sui-primary-accent-color-text));\n  background-color: var(--sui-button-secondary-background-color, var(--sui-button-background-color));\n  font-weight: var(--sui-button-secondary-font-weight, var(--sui-font-weight-normal, normal));\n}\nbutton.secondary:is(:hover, :focus-visible, [aria-expanded=true]) {\n  color: var(--sui-button-secondary-foreground-color-focus, var(--sui-button-secondary-foreground-color, var(--sui-primary-accent-color-text)));\n  background-color: var(--sui-button-secondary-background-color-focus, var(--sui-hover-background-color));\n}\nbutton.secondary:active {\n  color: var(--sui-button-secondary-foreground-color-active, var(--sui-button-secondary-foreground-color, var(--sui-primary-accent-color-text)));\n  background-color: var(--sui-button-secondary-background-color-active, var(--sui-active-background-color));\n}\nbutton.secondary[aria-pressed=true] {\n  color: var(--sui-button-secondary-foreground-color-pressed);\n  background-color: var(--sui-button-secondary-background-color-pressed, var(--sui-primary-accent-color));\n}\nbutton.tertiary {\n  border-width: var(--sui-button-tertiary-border-width, 1px);\n  border-style: var(--sui-button-tertiary-border-style, solid);\n  border-color: var(--sui-button-tertiary-border-color, var(--sui-button-border-color));\n  color: var(--sui-button-tertiary-foreground-color, var(--sui-highlight-foreground-color));\n  background-color: var(--sui-button-tertiary-background-color, var(--sui-button-background-color));\n  font-weight: var(--sui-button-tertiary-font-weight, var(--sui-font-weight-normal, normal));\n}\nbutton.tertiary:is(:hover, :focus-visible, [aria-expanded=true]) {\n  color: var(--sui-button-tertiary-foreground-color-focus, var(--sui-button-tertiary-foreground-color, var(--sui-highlight-foreground-color)));\n  background-color: var(--sui-button-tertiary-background-color-focus, var(--sui-hover-background-color));\n}\nbutton.tertiary:active {\n  color: var(--sui-button-tertiary-foreground-color-active, var(--sui-button-tertiary-foreground-color, var(--sui-highlight-foreground-color)));\n  background-color: var(--sui-button-tertiary-background-color-active, var(--sui-active-background-color));\n}\nbutton.tertiary[aria-pressed=true] {\n  color: var(--sui-button-tertiary-foreground-color-pressed);\n  background-color: var(--sui-button-tertiary-background-color-pressed, var(--sui-selected-background-color));\n}\nbutton.ghost {\n  font-weight: var(--sui-button-ghost-font-weight, var(--sui-font-weight-normal, normal));\n}\nbutton.ghost:is(:hover, :focus-visible, [aria-expanded=true]) {\n  color: var(--sui-button-ghost-foreground-color-focus);\n  background-color: var(--sui-button-ghost-background-color-focus, var(--sui-hover-background-color));\n}\nbutton.ghost:active {\n  color: var(--sui-button-ghost-foreground-color-active);\n  background-color: var(--sui-button-ghost-background-color-active, var(--sui-active-background-color));\n}\nbutton.ghost[aria-pressed=true] {\n  color: var(--sui-button-ghost-foreground-color-pressed);\n  background-color: var(--sui-button-ghost-background-color-pressed, var(--sui-selected-background-color));\n}\nbutton.link {\n  outline: 0;\n  margin: 0;\n  border-radius: 0 !important;\n  padding: 0 !important;\n  height: auto !important;\n  color: var(--sui-button-link-foreground-color, var(--sui-primary-accent-color-text));\n}\nbutton.link .label {\n  padding: 0;\n  line-height: var(--sui-line-height-compact);\n  text-decoration: var(--sui-button-link-text-decoration, none);\n  text-underline-offset: 2px;\n  white-space: normal;\n}\n:global(:is(:root, :host)[data-underline-links='true']) button.link .label {\n  text-decoration: underline;\n}\nbutton.link:is(:hover, :focus, :active) .label {\n  text-decoration: var(--sui-button-link-text-decoration-focus, underline);\n}\nbutton.small {\n  border-radius: var(--sui-button-small-border-radius);\n  padding: var(--sui-button-small-padding);\n  height: var(--sui-button-small-height);\n  font-size: var(--sui-button-small-font-size, var(--sui-font-size-small));\n}\nbutton.small :global(.icon) {\n  font-size: var(--sui-font-size-large);\n}\nbutton.medium {\n  border-radius: var(--sui-button-medium-border-radius);\n  padding: var(--sui-button-medium-padding);\n  height: var(--sui-button-medium-height);\n  font-size: var(--sui-button-medium-font-size, var(--sui-font-size-default));\n}\nbutton.large {\n  border-radius: var(--sui-button-large-border-radius);\n  padding: var(--sui-button-large-padding);\n  height: var(--sui-button-large-height);\n  font-size: var(--sui-button-large-font-size, var(--sui-font-size-large));\n}\nbutton.pill {\n  border-radius: 80px;\n  padding: var(--sui-button-medium-pill-padding, 0 12px);\n}\nbutton.flex: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 'svelte-i18n';\n  import Button from '../button/button.svelte';\n  import Icon from '../icon/icon.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} [show] Whether to show the toast.\n   * @property {boolean} [dismissible] Whether to show the close button.\n   * @property {'error' | 'warning' | 'info' | 'success'} [status] Information status.\n   * @property {Snippet} [children] Primary slot content.\n   * @property {Snippet} [icon] Icon slot content.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    show = $bindable(true),\n    dismissible = true,\n    status = 'info',\n    children = undefined,\n    icon = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n{#if show}\n  <div role=\"none\" class=\"infobar {status}\">\n    <div role=\"alert\" class=\"message\">\n      {#if icon}\n        {@render icon()}\n      {:else}\n        <Icon name={status === 'success' ? 'check_circle' : status} />\n      {/if}\n      {@render children?.()}\n    </div>\n    {#if dismissible}\n      <div role=\"none\">\n        <Button\n          iconic\n          size=\"small\"\n          variant=\"ghost\"\n          aria-label={$_('_sui.dismiss')}\n          onclick={() => {\n            show = false;\n          }}\n        >\n          <Icon name=\"close\" />\n        </Button>\n      </div>\n    {/if}\n  </div>\n{/if}\n\n<style>.infobar {\n  flex: none;\n  display: flex;\n  align-items: center;\n  gap: var(--sui-infobar-gap, 8px);\n  border-width: var(--sui-infobar-border-width, 0 0 1px);\n  border-style: var(--sui-infobar-border-style, solid);\n  padding: var(--sui-infobar-padding, 0);\n  min-height: var(--sui-infobar-min-height, 32px);\n  font-size: var(--sui-infobar-font-size, var(--sui-font-size-small));\n}\n.infobar.info {\n  border-color: var(--sui-info-border-color);\n  color: var(--sui-info-foreground-color);\n  background-color: var(--sui-info-background-color);\n}\n.infobar.warning {\n  border-color: var(--sui-warning-border-color);\n  color: var(--sui-warning-foreground-color);\n  background-color: var(--sui-warning-background-color);\n}\n.infobar.error {\n  border-color: var(--sui-error-border-color);\n  color: var(--sui-error-foreground-color);\n  background-color: var(--sui-error-background-color);\n}\n.infobar.success {\n  border-color: var(--sui-success-border-color);\n  color: var(--sui-success-foreground-color);\n  background-color: var(--sui-success-background-color);\n}\n\n.message {\n  flex: auto;\n  display: flex;\n  align-items: center;\n  justify-content: var(--sui-infobar-message-justify-content, 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","/**\n * @import { ActionReturn } from 'svelte/action';\n */\n\nimport { generateElementId } from '@sveltia/utils/element';\nimport { sleep } from '@sveltia/utils/misc';\nimport { get } from 'svelte/store';\nimport { isRTL } from './i18n.js';\nimport { getSelectedItemDetail } from './select.svelte.js';\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 */\nclass Group {\n  /**\n   * Initialize a new `Group` instance.\n   * @param {HTMLElement} parent Parent element.\n   * @param {object} [options] Options.\n   * @param {boolean} [options.clickToSelect] Whether to select an item by clicking on it.\n   * @todo Check for added elements probably with `MutationObserver`.\n   */\n  constructor(parent, { clickToSelect = true } = {}) {\n    parent.dispatchEvent(new CustomEvent('Initializing'));\n\n    this.parent = parent;\n    this.role = /** @type {string} */ (parent.getAttribute('role'));\n    this.multi = this.parent.getAttribute('aria-multiselectable') === 'true';\n    this.id = generateElementId(this.role);\n    this.parentGroupSelector = `[role=\"group\"], [role=\"${this.role}\"]`;\n    this.clickToSelect = clickToSelect;\n\n    const { orientation, childRoles, childSelectedAttr, focusChild, selectFirst } =\n      config[this.role];\n\n    this.orientation = this.grid\n      ? 'horizontal'\n      : (this.parent.getAttribute('aria-orientation') ?? orientation);\n    this.childRoles = childRoles;\n    this.childSelectedAttr = childSelectedAttr;\n    this.childSelectedProp = childSelectedAttr.replace('aria-', '');\n    this.focusChild = focusChild;\n    this.selectFirst = selectFirst;\n\n    this.parent.tabIndex = focusChild ? -1 : 0;\n\n    // Wait a bit before the relevant components, including the `aria-controls` target are mounted\n    (async () => {\n      await sleep(100);\n      this.activate();\n    })();\n  }\n\n  /**\n   * Activate the members.\n   */\n  activate() {\n    const { parent, allMembers, selected: defaultSelected } = this;\n\n    allMembers.forEach((element, index) => {\n      // Select the first one if no member has the `selected` attribute\n      const isSelected =\n        element.getAttribute(this.childSelectedAttr) === 'true' ||\n        (defaultSelected ? element === defaultSelected : this.selectFirst && index === 0);\n\n      const controlTarget = /** @type {HTMLElement | null} */ (\n        document.querySelector(`#${element.getAttribute('aria-controls')}`)\n      );\n\n      element.id ||= `${this.id}-item-${index + 1}`;\n      element.tabIndex = isSelected ? 0 : -1;\n      element.setAttribute(this.childSelectedAttr, String(isSelected));\n\n      if (controlTarget) {\n        controlTarget.inert = !isSelected;\n        controlTarget.setAttribute('aria-labelledby', element.id);\n        controlTarget.setAttribute('aria-hidden', String(!isSelected));\n\n        if (isSelected) {\n          globalThis.setTimeout(() => {\n            try {\n              controlTarget.scrollIntoView({\n                block: 'nearest',\n                inline: 'nearest',\n                behavior: 'auto',\n              });\n            } catch {\n              controlTarget.scrollIntoView(true);\n            }\n          }, 300);\n        }\n      }\n    });\n\n    parent.addEventListener('click', (event) => {\n      this.onClick(event);\n    });\n\n    parent.addEventListener('keydown', (event) => {\n      this.onKeyDown(event);\n    });\n\n    parent.dispatchEvent(new CustomEvent('Initialized'));\n  }\n\n  /**\n   * CSS selector to retrieve the members.\n   * @type {string}\n   */\n  get selector() {\n    return this.childRoles.map((role) => `[role=\"${role}\"]`).join(',');\n  }\n\n  /**\n   * List of all the members.\n   * @type {HTMLElement[]}\n   */\n  get allMembers() {\n    return /** @type {HTMLElement[]} */ ([...this.parent.querySelectorAll(this.selector)]);\n  }\n\n  /**\n   * List of the enabled and visible members.\n   * @type {HTMLElement[]}\n   */\n  get activeMembers() {\n    return this.allMembers.filter(\n      (element) => !element.matches('[aria-disabled=\"true\"], [aria-hidden=\"true\"]'),\n    );\n  }\n\n  /**\n   * Get the currently selected member.\n   * @type {HTMLElement | undefined}\n   */\n  get selected() {\n    return this.activeMembers.find((element) =>\n      element.matches(`[${this.childSelectedAttr}=\"true\"]`),\n    );\n  }\n\n  /**\n   * Whether the parent is disabled.\n   * @type {boolean}\n   */\n  get isDisabled() {\n    return this.parent.matches('[aria-disabled=\"true\"]');\n  }\n\n  /**\n   * Whether the parent is read-only.\n   * @type {boolean}\n   */\n  get isReadOnly() {\n    return this.parent.matches('[aria-readonly=\"true\"]');\n  }\n\n  /**\n   * Whether the widget is displayed in grid mode.\n   * @type {boolean}\n   */\n  get grid() {\n    return this.role === 'grid' || (this.role === 'listbox' && this.parent.matches('.grid'));\n  }\n\n  /**\n   * Select (and move focus to) the given target.\n   * @param {(MouseEvent | KeyboardEvent)} event Triggered event.\n   * @param {HTMLElement} newTarget Target element.\n   */\n  selectTarget(event, newTarget) {\n    if (this.isDisabled || this.isReadOnly) {\n      event.preventDefault();\n\n      return;\n    }\n\n    const targetRole = newTarget.getAttribute('role');\n    const targetParent = newTarget.closest(this.parentGroupSelector);\n    const selectByClick = event.type === 'click';\n\n    const selectByKeydown =\n      event.type === 'keydown' && /** @type {KeyboardEvent} */ (event).key === ' ';\n\n    this.activeMembers.forEach((element) => {\n      const isMenuItemCheckbox = element.matches('[role=\"menuitemcheckbox\"]');\n      const isMenuItemRadio = element.matches('[role=\"menuitemradio\"]');\n\n      if (\n        (isMenuItemCheckbox || isMenuItemRadio) &&\n        (element.getAttribute('role') !== targetRole ||\n          element.closest(this.parentGroupSelector) !== targetParent)\n      ) {\n        return;\n      }\n\n      const multiSelect = isMenuItemCheckbox || this.multi;\n      const singleSelect = isMenuItemRadio || !multiSelect;\n      const isTarget = element === newTarget;\n      const isSelected = element.matches(`[${this.childSelectedAttr}=\"true\"]`);\n      const controlTargetId = element.getAttribute('aria-controls');\n      const controlTarget = controlTargetId ? document.getElementById(controlTargetId) : null;\n\n      if (multiSelect && isTarget && (selectByClick || selectByKeydown)) {\n        element.setAttribute(this.childSelectedAttr, String(!isSelected));\n        element.dispatchEvent(\n          new CustomEvent('Change', { detail: { [this.childSelectedProp]: !isSelected } }),\n        );\n\n        if (!isSelected) {\n          element.dispatchEvent(new CustomEvent('Select'));\n        }\n      }\n\n      if (\n        singleSelect &&\n        isSelected !== isTarget &&\n        (isMenuItemRadio ? selectByKeydown || selectByClick : true)\n      ) {\n        element.setAttribute(this.childSelectedAttr, String(isTarget));\n        element.dispatchEvent(\n          new CustomEvent('Change', { detail: { [this.childSelectedProp]: isTarget } }),\n        );\n\n        if (isTarget) {\n          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 = get(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 = get(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   * 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            member.textContent ??\n            '',\n        );\n\n        const hidden = !_terms.every((term) => searchValue.includes(term));\n\n        member.dispatchEvent(new CustomEvent('Toggle', { detail: { hidden } }));\n\n        return hidden;\n      })\n      .filter((hidden) => !hidden).length;\n\n    parent.dispatchEvent(\n      new CustomEvent('Filter', { detail: { matched, total: allMembers.length } }),\n    );\n  }\n}\n\n/**\n * Activate a new group.\n * @param {HTMLElement} parent Parent element.\n * @param {object} [params] Action params.\n * @returns {ActionReturn} Action.\n */\nexport const activateGroup = (parent, params) => {\n  const group = new Group(parent, params);\n\n  return {\n    /**\n     * Called whenever the params are updated.\n     * @param {any} newParams Updated params.\n     */\n    update(newParams) {\n      group.onUpdate(newParams);\n    },\n  };\n};\n","<!--\n  @component\n  A variant of `<RadioGroup>`, looking like normal buttons.\n  @see https://w3c.github.io/aria/#radiogroup\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/radio/\n-->\n<script>\n  import { activateGroup } from '../../services/group.svelte.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  use:activateGroup\n>\n  <div role=\"none\" class=\"inner\" inert={disabled}>\n    {@render children?.()}\n  </div>\n</div>\n\n<style>.select-button-group {\n  flex: none;\n  display: inline-flex;\n  align-items: center;\n  margin: var(--sui-focus-ring-width);\n}\n.select-button-group:focus-visible {\n  outline-width: 0 !important;\n}\n.select-button-group :global(button) {\n  margin: 0 !important;\n  border-radius: 0 !important;\n  color: var(--sui-primary-foreground-color);\n}\n.select-button-group :global(button:first-child) {\n  border-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  {#snippet children()}\n    {@render _children?.()}\n  {/snippet}\n  {#snippet endIcon()}\n    {#if _endIcon}\n      {@render _endIcon()}\n    {:else if iconic}\n      <Icon name=\"more_vert\" />\n    {:else}\n      <Icon name=\"arrow_drop_down\" class=\"small-arrow\" />\n    {/if}\n  {/snippet}\n</Button>\n\n<Popup\n  anchor={buttonElement}\n  position={popupPosition}\n  positionBaseElement={popupPositionBaseElement}\n  showBackdrop={showPopupBackdrop}\n>\n  {@render popup?.()}\n</Popup>\n","<!--\n  @component\n  A combination of a normal `<Button>` (default action) and an arrow-only `<MenuButton>` (different\n  actions). For example, Microsoft Word has the Paste button along with the Keep Source Formatting,\n  Match Formatting and Keep Text Only options.\n  @see https://www.google.com/search?q=split+button&tbm=isch\n-->\n<script>\n  import { _ } from 'svelte-i18n';\n  import Icon from '../icon/icon.svelte';\n  import MenuButton from '../menu/menu-button.svelte';\n  import Button from './button.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import { ButtonProps, CommonEventHandlers, PopupPosition } from '../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {PopupPosition} [popupPosition] Where to show the dropdown menu.\n   * @property {boolean} [showPopupBackdrop] Whether to show the backdrop for the popup.\n   * @property {Snippet} [chevronIcon] Chevron slot content.\n   * @property {Snippet} [popup] Popup slot content.\n   */\n\n  /**\n   * @type {ButtonProps & CommonEventHandlers & Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    hidden = false,\n    disabled = false,\n    label = '',\n    variant = undefined,\n    size = 'medium',\n    popupPosition = 'bottom-left',\n    showPopupBackdrop = false,\n    chevronIcon,\n    popup: _popup,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /**\n   * @type {HTMLElement | undefined}\n   */\n  let wrapper = $state();\n</script>\n\n<div\n  bind:this={wrapper}\n  role=\"group\"\n  class=\"sui split-button\"\n  {hidden}\n  aria-hidden={hidden}\n  aria-disabled={disabled}\n  aria-label={$_('_sui.split_button.x_options', { values: { name: label } })}\n>\n  <Button {...restProps} {hidden} {disabled} {label} {variant} {size}></Button>\n  <MenuButton\n    iconic\n    {hidden}\n    {disabled}\n    {variant}\n    {size}\n    aria-label={$_('_sui.split_button.more_options')}\n    {popupPosition}\n    popupPositionBaseElement={wrapper}\n    {showPopupBackdrop}\n  >\n    {#snippet endIcon()}\n      {#if chevronIcon}\n        {@render chevronIcon()}\n      {:else}\n        <Icon name=\"arrow_drop_down\" class=\"small-arrow\" />\n      {/if}\n    {/snippet}\n    {#snippet popup()}\n      {@render _popup?.()}\n    {/snippet}\n  </MenuButton>\n</div>\n\n<style>.split-button {\n  flex: none;\n  display: inline-flex;\n  margin: var(--sui-focus-ring-width);\n}\n.split-button :global(button) {\n  margin: 0;\n}\n.split-button :global(button.menu-button) {\n  border-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 { sleep } from '@sveltia/utils/misc';\n  import { _ } from 'svelte-i18n';\n  import Button from '../button/button.svelte';\n  import Spacer from '../divider/spacer.svelte';\n  import Icon from '../icon/icon.svelte';\n  import Modal from '../util/modal.svelte';\n\n  /**\n   * @import { DialogProps, ModalProps } from '../../typedefs';\n   */\n\n  /**\n   * @type {ModalProps & DialogProps & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    open = $bindable(false),\n    value = $bindable(''),\n    title,\n    role = 'dialog',\n    size = 'medium',\n    class: className,\n    showClose = false,\n    showOk = true,\n    showCancel = true,\n    okLabel = '',\n    okShortcuts = undefined,\n    okDisabled = false,\n    cancelLabel = '',\n    cancelShortcuts = undefined,\n    cancelDisabled = false,\n    focusInput = true,\n    children,\n    header,\n    headerExtra,\n    footer,\n    footerExtra,\n    closeIcon,\n    input: _input,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /**\n   * The ID of the drawer.\n   * @type {string}\n   */\n  const id = $props.id();\n  /**\n   * A reference to the modal component.\n   * @type {Modal | undefined}\n   */\n  let modal = $state();\n  /**\n   * @type {HTMLElement | undefined}\n   */\n  let content = $state();\n\n  $effect(() => {\n    if (open && content) {\n      (async () => {\n        await sleep(50);\n\n        if (focusInput) {\n          /** @type {HTMLInputElement | HTMLButtonElement} */ (\n            content?.querySelector('input, button.primary')\n          )?.focus();\n          /** @type {HTMLInputElement} */ (content?.querySelector('input'))?.select();\n        } else {\n          modal?.focus();\n        }\n      })();\n    }\n  });\n</script>\n\n<Modal\n  bind:this={modal}\n  {...restProps}\n  {role}\n  {id}\n  class=\"dialog\"\n  aria-label={header ? undefined : title}\n  aria-labelledby={header ? title : `${id}-title`}\n  aria-describedby=\"{id}-body\"\n  bind:open\n  showBackdrop\n>\n  <div bind:this={content} role=\"none\" class=\"content {className} {size}\">\n    {#if title || showClose || header || headerExtra}\n      <div role=\"none\" class=\"header\">\n        {#if header}\n          {@render header()}\n        {:else}\n          <div role=\"none\" id=\"{id}-title\" class=\"title\">\n            {title}\n          </div>\n          <Spacer flex={true} />\n          {@render headerExtra?.()}\n          {#if showClose}\n            <Button\n              variant=\"ghost\"\n              iconic\n              aria-label={$_('_sui.close')}\n              aria-controls={id}\n              onclick={() => {\n                modal?.close('close');\n              }}\n            >\n              {#snippet startIcon()}\n                {#if closeIcon}\n                  {@render closeIcon()}\n                {:else}\n                  <Icon name=\"close\" />\n                {/if}\n              {/snippet}\n            </Button>\n          {/if}\n        {/if}\n      </div>\n    {/if}\n    <div role=\"none\" id=\"{id}-body\" class=\"body\">\n      {@render children?.()}\n    </div>\n    {#if showOk || showCancel || footer || footerExtra}\n      <div role=\"none\" class=\"footer\">\n        {#if footer}\n          {@render footer?.()}\n        {:else}\n          {@render footerExtra?.()}\n          <Spacer flex={true} />\n          {#if showOk}\n            <Button\n              variant=\"primary\"\n              label={okLabel || $_('_sui.ok')}\n              keyShortcuts={okShortcuts}\n              disabled={okDisabled}\n              onclick={() => {\n                modal?.close('ok');\n              }}\n            />\n          {/if}\n          {#if showCancel}\n            <Button\n              variant=\"secondary\"\n              label={cancelLabel || $_('_sui.cancel')}\n              keyShortcuts={cancelShortcuts}\n              disabled={cancelDisabled}\n              onclick={() => {\n                modal?.close('cancel');\n              }}\n            />\n          {/if}\n        {/if}\n      </div>\n    {/if}\n  </div>\n</Modal>\n\n<style>.content {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n  border-radius: var(--sui-dialog-content-border-radius, 4px);\n  max-width: calc(100dvw - var(--sui-dialog-content-margin, 16px) * 2);\n  background-color: var(--sui-dialog-content-background-color, var(--sui-secondary-background-color-translucent));\n  box-shadow: var(--sui-dialog-content-box-shadow, 0 8px 16px var(--sui-popup-shadow-color));\n  -webkit-backdrop-filter: var(--sui-dialog-content-backdrop-filter, blur(16px));\n  backdrop-filter: var(--sui-dialog-content-backdrop-filter, blur(16px));\n  transition-property: transform;\n}\n:global(dialog.open) .content {\n  transition-duration: 150ms;\n  transform: scale(100%);\n}\n:global(dialog:not(.open)) .content {\n  transition-duration: 300ms;\n  transform: scale(90%);\n}\n.content.small {\n  width: var(--sui-dialog-small-content-width, var(--sui-dialog-content-width, 400px));\n  max-height: var(--sui-dialog-small-content-max-height, var(--sui-dialog-content-max-height, 400px));\n}\n@media (max-height: 400px) {\n  .content.small {\n    max-height: calc(100dvh - 32px);\n  }\n}\n.content.medium {\n  width: var(--sui-dialog-medium-content-width, var(--sui-dialog-content-width, 600px));\n  max-height: var(--sui-dialog-medium-content-max-height, var(--sui-dialog-content-max-height, 600px));\n}\n@media (max-height: 600px) {\n  .content.medium {\n    max-height: calc(100dvh - 32px);\n  }\n}\n.content.large {\n  width: var(--sui-dialog-large-content-width, var(--sui-dialog-content-width, 800px));\n  max-height: var(--sui-dialog-large-content-max-height, var(--sui-dialog-content-max-height, 800px));\n}\n@media (max-height: 800px) {\n  .content.large {\n    max-height: calc(100dvh - 32px);\n  }\n}\n.content.x-large {\n  width: var(--sui-dialog-x-large-content-width, var(--sui-dialog-content-width, 1000px));\n  max-height: var(--sui-dialog-x-large-content-max-height, var(--sui-dialog-content-max-height, 1000px));\n}\n@media (max-height: 1000px) {\n  .content.x-large {\n    max-height: calc(100dvh - 32px);\n  }\n}\n\n:is(.header, .footer) {\n  display: flex;\n  align-items: center;\n  gap: 4px;\n}\n\n.header {\n  box-sizing: content-box;\n  margin: var(--sui-dialog-header-margin, 0 16px);\n  border-width: var(--sui-dialog-header-border-width, 0 0 1px);\n  border-color: var(--sui-dialog-header-border-color, var(--sui-secondary-border-color));\n  padding: var(--sui-dialog-header-padding, 16px 8px);\n  height: var(--sui-dialog-header-height, 32px);\n}\n.header .title {\n  font-size: var(--sui-font-size-large);\n  font-weight: var(--sui-font-weight-bold);\n}\n\n.footer {\n  margin: var(--sui-dialog-footer-margin, 0 24px 24px);\n}\n@media (width < 768px) {\n  .footer {\n    margin: var(--sui-dialog-footer-margin, 0 16px 16px);\n  }\n}\n\n.body {\n  overflow: auto;\n  margin: var(--sui-dialog-body-margin, 24px 24px);\n  white-space: normal;\n  line-height: var(--sui-line-height-compact);\n}\n@media (width < 768px) {\n  .body {\n    margin: var(--sui-dialog-body-margin, 16px 16px);\n  }\n}</style>\n","<!--\n  @component\n  A modal alert dialog. It only shows the OK button, just like `window.alert()`.\n  @see https://w3c.github.io/aria/#alertdialog\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/alertdialog/\n  @see https://developer.mozilla.org/en-US/docs/Web/API/Window/alert\n-->\n<script>\n  import Dialog from './dialog.svelte';\n\n  /**\n   * @import { DialogProps, ModalProps } from '../../typedefs';\n   */\n\n  /**\n   * @type {ModalProps & DialogProps & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    open = $bindable(false),\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<Dialog {...restProps} bind:open role=\"alertdialog\" showCancel={false}></Dialog>\n","<!--\n  @component\n  A modal confirmation dialog. It shows the OK and Cancel buttons, just like `window.confirm()`.\n  @see https://w3c.github.io/aria/#alertdialog\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/alertdialog/\n  @see https://developer.mozilla.org/en-US/docs/Web/API/Window/confirm\n-->\n<script>\n  import Dialog from './dialog.svelte';\n\n  /**\n   * @import { DialogProps, ModalProps } from '../../typedefs';\n   */\n\n  /**\n   * @type {ModalProps & DialogProps & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    open = $bindable(false),\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<Dialog {...restProps} bind:open role=\"alertdialog\"></Dialog>\n","<!--\n  @component\n  A generic, single-line text field. The equivalent of the HTML `<input type=\"text\">` element.\n  @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/text\n  @see https://w3c.github.io/aria/#textbox\n-->\n<script>\n  import { activateKeyShortcuts } from '../../services/events.svelte.js';\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    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 {InputEvent} event The `input` event object.\n   */\n  const handleInput = (event) => {\n    if (debounce) {\n      clearTimeout(debounceTimer);\n      debounceTimer = /** @type {number} */ (\n        /** @type {unknown} */ (\n          setTimeout(() => {\n            fireInput(event);\n          }, timeout)\n        )\n      );\n    } else {\n      fireInput(event);\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=\"auto\"\n    name={name || undefined}\n    tabindex={disabled ? -1 : 0}\n    disabled={disabled || undefined}\n    readonly={readonly || undefined}\n    {inputmode}\n    aria-label={ariaLabel}\n    aria-hidden={hidden}\n    aria-disabled={disabled}\n    aria-readonly={readonly}\n    aria-required={required}\n    aria-invalid={invalid}\n    oninputcapture={handleInput}\n    use:activateKeyShortcuts={keyShortcuts}\n  />\n  {#if ariaLabel && showInlineLabel}\n    <span id=\"{id}-label\" class=\"label\" class:hidden={!!value} aria-hidden=\"true\">\n      <TruncatedText>\n        {ariaLabel}\n      </TruncatedText>\n    </span>\n  {/if}\n</div>\n\n<style>.text-input {\n  display: inline-flex;\n  align-items: center;\n  position: relative;\n  margin: var(--sui-focus-ring-width);\n  min-width: var(--sui-textbox-singleline-min-width);\n}\n.text-input.flex: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        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  use:activateGroup={{ clickToSelect }}\n>\n  {@render children?.()}\n</div>\n\n<style>.grid {\n  display: table;\n  margin: var(--sui-focus-ring-width);\n  width: calc(100% - var(--sui-focus-ring-width) * 2);\n}\n.grid.data {\n  border-collapse: collapse;\n}\n.grid.data :global(:is(.grid-col-header, .grid-row-header, .grid-cell)) {\n  border: 1px solid var(--sui-secondary-border-color);\n  padding: 8px 8px;\n}</style>\n","<!--\n  @component\n  A list widget with selectable options. The equivalent of the HTML `<select multiple>` element.\n  @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select\n  @see https://w3c.github.io/aria/#listbox\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/listbox/\n-->\n<script>\n  import { activateGroup } from '../../services/group.svelte.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  use:activateGroup={{ searchTerms }}\n>\n  <div role=\"none\" class=\"inner\" inert={disabled}>\n    {@render children?.()}\n  </div>\n</div>\n\n<style>[role=listbox] {\n  display: flex;\n  flex-direction: column;\n  margin: var(--sui-focus-ring-width);\n  border-width: var(--sui-listbox-border-width, 1px);\n  border-style: var(--sui-listbox-border-style, solid);\n  border-color: var(--sui-listbox-border-width, var(--sui-secondary-border-color));\n  border-radius: var(--sui-listbox-border-radius, 4px);\n  padding: var(--sui-listbox-padding, 4px);\n  min-width: var(--sui-listbox-min-width, calc(var(--sui-option-height) * 5));\n  color: var(--sui-listbox-foreground-color);\n  background-color: var(--sui-listbox-background-color);\n  font-family: var(--sui-control-font-family);\n  font-size: var(--sui-control-font-size);\n  line-height: var(--sui-control-line-height);\n}\n@media (pointer: coarse) {\n  [role=listbox] {\n    gap: 8px 0;\n  }\n}\n[role=listbox] :global([role=separator]) {\n  margin: 4px 0;\n  background-color: var(--sui-control-border-color);\n}\n[role=listbox][aria-invalid=true] {\n  border-color: var(--sui-error-border-color);\n}\n[role=listbox].tabs {\n  padding: 0;\n  border-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      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  use:activateGroup\n>\n  {@render children?.()}\n</div>\n\n<style>.menu {\n  display: flex;\n  flex-direction: column;\n  margin: 0;\n  border-width: var(--sui-menu-border-width, 1px);\n  border-style: var(--sui-menu-border-style, solid);\n  border-color: var(--sui-menu-border-width, var(--sui-secondary-border-color));\n  border-radius: var(--sui-menu-border-radius, 4px);\n  padding: var(--sui-menu-padding, 4px);\n}\n@media (pointer: coarse) {\n  .menu {\n    gap: 8px 0;\n  }\n}\n.menu :global([role=separator]) {\n  margin: var(--sui-menu-divider-margin, 4px);\n  background-color: var(--sui-menu-divider-color, var(--sui-control-border-color));\n}</style>\n","<!--\n  @component\n  A menu item widget.\n  @see https://w3c.github.io/aria/#menuitem\n-->\n<script>\n  import { onMount } from 'svelte';\n  import { isRTL } from '../../services/i18n.js';\n  import Button from '../button/button.svelte';\n  import Icon from '../icon/icon.svelte';\n  import Popup from '../util/popup.svelte';\n  import Menu from './menu.svelte';\n\n  /**\n   * @import {\n   * ButtonProps,\n   * CommonEventHandlers,\n   * MenuItemProps,\n   * PopupPosition,\n   * } from '../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {PopupPosition} [popupPosition] Where to show the dropdown menu.\n   */\n\n  /**\n   * @type {ButtonProps & MenuItemProps & CommonEventHandlers & Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    role = 'menuitem',\n    hidden = false,\n    disabled = false,\n    label = '',\n    popupPosition = 'right-top', // @todo Make this auto detect\n    children: _children,\n    startIcon: _startIcon,\n    endIcon: _endIcon,\n    chevronIcon,\n    items,\n    onmouseenter,\n    onmouseleave,\n    onclick,\n    onChange,\n    onSelect,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  let isPopupOpen = $state(false);\n  let isPopupHovered = $state(false);\n\n  /**\n   * Reference to the `<button>` element.\n   * @type {HTMLButtonElement | undefined}\n   */\n  let buttonElement = $state();\n\n  /**\n   * Reference to the `<button>` element.\n   * @type {HTMLDialogElement | undefined}\n   */\n  let dialogElement = $state();\n\n  const hasItems = $derived(role === 'menuitem' && !!items);\n\n  onMount(() => {\n    dialogElement = buttonElement?.closest('dialog') ?? undefined;\n  });\n</script>\n\n<div role=\"none\" class=\"sui menuitem {className}\" {hidden}>\n  <Button\n    bind:element={buttonElement}\n    {...restProps}\n    {role}\n    {hidden}\n    {disabled}\n    aria-haspopup={hasItems ? 'menu' : undefined}\n    aria-expanded={hasItems ? isPopupOpen : undefined}\n    onmouseenter={(event) => {\n      if (hasItems) {\n        window.setTimeout(() => {\n          isPopupOpen = true;\n        }, 200);\n      }\n\n      onmouseenter?.(event);\n    }}\n    onmouseleave={(event) => {\n      if (hasItems) {\n        window.setTimeout(() => {\n          if (!isPopupHovered) {\n            isPopupOpen = false;\n          }\n        }, 200);\n      }\n\n      onmouseleave?.(event);\n    }}\n    onclick={(event) => {\n      if (hasItems) {\n        event.preventDefault();\n        event.stopPropagation();\n        isPopupOpen = !isPopupOpen;\n      }\n\n      onclick?.(event);\n    }}\n    {onChange}\n    {onSelect}\n  >\n    {#snippet startIcon()}\n      {@render _startIcon?.()}\n    {/snippet}\n    {#snippet children()}\n      <div role=\"none\" class=\"content\" class:label={!!label}>\n        {#if label}\n          {label}\n        {:else}\n          {@render _children?.()}\n        {/if}\n      </div>\n      {#if hasItems}\n        <span role=\"none\" class=\"icon-outer\">\n          {#if chevronIcon}\n            {@render chevronIcon()}\n          {:else}\n            <Icon name={$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  {#snippet children()}\n    {@render _children?.()}\n  {/snippet}\n  {#snippet endIcon()}\n    {#if checked}\n      <Icon name=\"check\" />\n    {/if}\n  {/snippet}\n</MenuItem>\n","<!--\n  @component\n  A menu item widget with a radio. Only one item can be selected within the parent `<Menu>` or\n  `<MenuItemGroup>` component.\n  @see https://w3c.github.io/aria/#menuitemradio\n-->\n<script>\n  import Icon from '../icon/icon.svelte';\n  import MenuItem from './menu-item.svelte';\n\n  /**\n   * @import { ButtonProps, CommonEventHandlers, MenuItemProps } from '../../typedefs';\n   */\n\n  /**\n   * @type {ButtonProps & MenuItemProps & CommonEventHandlers & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    checked = $bindable(),\n    class: className,\n    hidden = false,\n    disabled = false,\n    label = '',\n    children: _children,\n    startIcon: _startIcon,\n    onChange,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<MenuItem\n  {...restProps}\n  role=\"menuitemradio\"\n  class=\"sui menu-item-radio {className}\"\n  {label}\n  {hidden}\n  {disabled}\n  aria-checked={checked}\n  onChange={(event) => {\n    onChange?.(event);\n    checked = event.detail.checked;\n  }}\n>\n  {#snippet startIcon()}\n    {@render _startIcon?.()}\n  {/snippet}\n  {#snippet children()}\n    {@render _children?.()}\n  {/snippet}\n  {#snippet endIcon()}\n    {#if checked}\n      <Icon name=\"check\" />\n    {/if}\n  {/snippet}\n</MenuItem>\n","<!--\n  @component\n  A progressbar widget.\n  @see https://w3c.github.io/aria/#progressbar\n-->\n<script>\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {number} now The `aria-valuenow` attribute on the wrapper element.\n   * @property {number} [min] The `aria-valuemin` attribute on the wrapper element.\n   * @property {number} [max] The `aria-valuemax` attribute on the wrapper element.\n   * @property {string} [text] The `aria-valuetext` attribute on the wrapper element.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    class: className,\n    now = 0,\n    min = 0,\n    max = 100,\n    text,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div\n  {...restProps}\n  role=\"progressbar\"\n  class=\"sui progressbar {className}\"\n  aria-valuenow={now}\n  aria-valuemin={min}\n  aria-valuemax={max}\n  aria-valuetext={text}\n>\n  <div role=\"none\" style:width=\"{now}%\"></div>\n</div>\n\n<style>.progressbar {\n  overflow: hidden;\n  border-width: var(--sui-progressbar-border-width, 1px);\n  border-style: var(--sui-progressbar-border-style, solid);\n  border-color: var(--sui-progressbar-border-color, var(--sui-control-border-color));\n  border-radius: var(--sui-progressbar-border-radius, 16px);\n  width: var(--sui-progressbar-width, 240px);\n  height: var(--sui-progressbar-height, 10px);\n  background-color: var(--sui-progressbar-background-color, var(--sui-secondary-background-color));\n}\n.progressbar div {\n  height: 100%;\n  background-color: var(--sui-progressbar-foreground-color, var(--sui-primary-accent-color-light));\n  transition: width 250ms;\n}</style>\n","<!--\n  @component\n  The container of `<Radio>`s.\n  @see https://w3c.github.io/aria/#radiogroup\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/radio/\n-->\n<script>\n  import { activateGroup } from '../../services/group.svelte.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  use:activateGroup\n>\n  <div role=\"none\" class=\"inner\" inert={disabled}>\n    {@render children?.()}\n  </div>\n</div>\n\n<style>.radio-group {\n  display: inline-flex;\n}\n.radio-group:focus-visible {\n  outline-width: 0 !important;\n}\n.radio-group.horizontal {\n  gap: 8px;\n  align-items: center;\n  flex-wrap: wrap;\n}\n.radio-group.vertical {\n  gap: 4px;\n  flex-direction: column;\n}\n@media (pointer: coarse) {\n  .radio-group.vertical {\n    gap: 8px;\n  }\n}\n.radio-group :global([aria-invalid=true]) :global(button) {\n  border-color: var(--sui-error-border-color);\n}\n.radio-group :global([aria-invalid=true]) :global(button[aria-checked=true]) {\n  border-color: var(--sui-error-border-color);\n}\n.radio-group :global([aria-invalid=true]) :global(button[aria-checked=true]::before) {\n  background-color: var(--sui-error-border-color);\n}\n\n.inner {\n  display: contents;\n}</style>\n","<!--\n  @component\n  The equivalent of the HTML `<input type=\"radio\">` element.\n  @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/radio\n  @see https://w3c.github.io/aria/#radio\n  @see https://www.w3.org/WAI/ARIA/apg/patterns/radio/\n-->\n<script>\n  import Button from '../button/button.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {boolean} [hidden] Whether to hide the widget.\n   * @property {boolean} [disabled] Whether to disable the widget. An alias of the `aria-disabled`\n   * attribute.\n   * @property {boolean} [checked] Whether to check the widget. An alias of the `aria-checked`\n   * attribute.\n   * @property {string} [name] The `data-name` attribute on the `<button>` element.\n   * @property {any} [value] The `data-value` attribute on the `<button>` element.\n   * @property {string} [valueType] Data type of the `value`. Typically `string`, `number` or\n   * `boolean`. Default: auto detect.\n   * @property {string} [label] Text label displayed next to the checkbox.\n   * @property {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 { getContext } from 'svelte';\n  import { isRTL } from '../../services/i18n.js';\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 currentPaneMin = $derived(\n    Math.max(\n      ctx.paneDefs[handleIndex]?.minSize ?? 0,\n      100 - ctx.paneDefs.reduce((sum, p, i) => sum + (i !== handleIndex ? p.maxSize : 0), 0),\n    ),\n  );\n  const currentPaneMax = $derived(\n    Math.min(\n      ctx.paneDefs[handleIndex]?.maxSize ?? 100,\n      100 - ctx.paneDefs.reduce((sum, p, i) => sum + (i !== handleIndex ? p.minSize : 0), 0),\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      // 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   * @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 {{ id: string, defaultSize: number | undefined, minSize: number, maxSize: number }[]}\n   */\n  const _paneDefs = $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   * 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    const totalSpecified = _paneDefs.reduce((sum, p) => sum + (p.defaultSize ?? 0), 0);\n    const unspecifiedCount = _paneDefs.filter((p) => p.defaultSize === undefined).length;\n    const remaining = Math.max(0, 100 - totalSpecified);\n    const defaultSize = unspecifiedCount > 0 ? remaining / unspecifiedCount : 0;\n    const newSizes = _paneDefs.map((p) => p.defaultSize ?? defaultSize);\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 = 0, maxSize: maxBefore = 100 } = _paneDefs[beforeIdx];\n    const { minSize: minAfter = 0, maxSize: maxAfter = 100 } = _paneDefs[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 = 0 } = _paneDefs[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      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  {...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} [defaultSize] Default size as a percentage (0–100). Panes without\n   * `defaultSize` share the remaining space equally.\n   * @property {number} [minSize] Minimum size as a percentage. Defaults to `0`.\n   * @property {number} [maxSize] Maximum size as a percentage. 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(size !== undefined ? size : (defaultSize ?? 0));\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  let loadedItemSize = $derived(itemChunkSize);\n\n  /** @type {HTMLElement | undefined} */\n  let spinner = $state(undefined);\n\n  const loading = $derived(items.length > loadedItemSize);\n\n  const observer = new IntersectionObserver(([{ isIntersecting }]) => {\n    if (isIntersecting) {\n      if (loading) {\n        loadedItemSize += itemChunkSize;\n      } else {\n        observer.disconnect();\n      }\n    }\n  });\n\n  $effect(() => {\n    if (spinner) {\n      observer.observe(spinner);\n    }\n  });\n</script>\n\n{#each items.slice(0, loadedItemSize) as item, index (item[itemKey] ?? index)}\n  {@render renderItem(item, index)}\n{/each}\n\n{#if loading}\n  <div role=\"none\" class=\"spinner\" bind:this={spinner}></div>\n{/if}\n\n<style>\n  .spinner {\n    height: 1px;\n  }\n</style>\n","<!--\n  @component\n  The equivalent of the HTML `<input type=\"search\">` element. It comes with a magnifier icon and\n  clear button.\n  @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/search\n  @see https://w3c.github.io/aria/#search\n-->\n\n<script>\n  import { _ } from 'svelte-i18n';\n  import Button from '../button/button.svelte';\n  import Icon from '../icon/icon.svelte';\n  import TextInput from './text-input.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import { CommonEventHandlers, InputEventHandlers, TextInputProps } from '../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [value] Input value.\n   * @property {Snippet} [searchIcon] Search icon slot content.\n   * @property {Snippet} [closeIcon] Close icon slot content.\n   * @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    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 'svelte-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      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 { tick } from 'svelte';\n  import { _ } from 'svelte-i18n';\n  import { flip } from 'svelte/animate';\n  import { isRTL } from '../../services/i18n.js';\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 { onMount } from 'svelte';\n  import { isRTL } from '../../services/i18n.js';\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    // 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}\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  use:activateGroup\n>\n  <div role=\"none\" class=\"inner\" inert={disabled}>\n    {@render children?.()}\n  </div>\n  <div role=\"none\" class=\"indicator\" style={indicatorStyle}></div>\n</div>\n\n<style>.tab-list {\n  flex: none;\n  position: relative;\n  display: flex;\n  align-items: center;\n  margin: var(--sui-tab-list-margin, var(--sui-focus-ring-width));\n  border-color: var(--sui-tab-list-border-color, var(--sui-control-border-color));\n  border-radius: var(--sui-tab-list-border-radius, 0);\n  background-color: var(--sui-tab-list-background-color, transparent);\n}\n.tab-list[aria-orientation=horizontal] {\n  gap: var(--sui-horizontal-tab-list-gap, var(--sui-tab-list-gap, 8px));\n  margin-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  {#snippet children()}\n    {@render _children?.()}\n  {/snippet}\n  {#snippet endIcon()}\n    {@render _endIcon?.()}\n  {/snippet}\n</Button>\n","<!--\n  @component\n  Toast/snackbar notification. Use the Popover API if possible to acquire a non-modal top layer.\n  @see https://w3c.github.io/aria/#alert\n  @see https://developer.chrome.com/blog/introducing-popover-api/\n-->\n<script>\n  import { onMount, untrack } from 'svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import { ToastPosition } from '../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string | number} [id] The toast ID. If updated, the timer that hides\n   * the toast will be reset, meaning the same toast can be displayed for a longer period of time.\n   * @property {boolean} [show] Whether to show the toast.\n   * @property {number} [duration] Duration to automatically hide the toast. Use `0` to hide it\n   * manually from the consumer.\n   * @property {ToastPosition} [position] Position of the toast.\n   * @property {Snippet} [children] Primary slot content.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    show = $bindable(false),\n    id = undefined,\n    duration = 5000,\n    position = 'auto',\n    children,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /**\n   * @type {HTMLElement | undefined}\n   */\n  let popoverBase = $state();\n  /**\n   * @type {HTMLElement | undefined}\n   */\n  let popover = $state();\n  /**\n   * @type {HTMLElement | undefined}\n   */\n  let toast = $state();\n  /**\n   * @type {number}\n   */\n  let timerId = $state(0);\n\n  onMount(() => {\n    popover =\n      /** @type {HTMLElement} */ (document.querySelector('.sui.toast-base.enabled')) ?? undefined;\n\n    if (popover) {\n      popoverBase?.remove();\n    } else {\n      popover = popoverBase;\n\n      if (popover) {\n        popover.classList.add('enabled');\n        (document.querySelector('.sui.app-shell') ?? document.body).appendChild(popover);\n\n        // Move the element to top layer\n        if (popover.showPopover) {\n          popover.popover = 'manual';\n          popover.showPopover();\n        }\n      }\n    }\n\n    return () => {\n      toast?.remove();\n    };\n  });\n\n  onMount(() => {\n    if (position === 'auto') {\n      const mql = globalThis.matchMedia('(width < 1024px)');\n\n      // eslint-disable-next-line jsdoc/require-jsdoc\n      const setMode = () => {\n        position = mql.matches\n          ? 'bottom-center'\n          : `bottom-${document.dir === 'rtl' ? 'left' : 'right'}`;\n      };\n\n      setMode();\n      mql.addEventListener('change', setMode);\n    }\n  });\n\n  $effect(() => {\n    if (popover && toast) {\n      popover.appendChild(toast);\n    }\n  });\n\n  $effect(() => {\n    void id;\n    void show;\n    void duration;\n\n    untrack(() => {\n      globalThis.clearTimeout(timerId);\n    });\n\n    if (show && duration) {\n      timerId = /** @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 * 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&&/Version\\/[\\d.]+.*Safari/.test(navigator.userAgent),c=n&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,a=n&&/Android/.test(navigator.userAgent),u=n&&/^(?=.*Chrome).*/i.test(navigator.userAgent),f=n&&a&&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,S=32,v=64,T=128,k=2047,N=1,b=2,w=3,E=4,O=5,M=6,A=l||c||d?\" \":\"​\",P=\"\\n\\n\",D=o?\" \":A,F=\"֑-߿יִ-﷽ﹰ-ﻼ\",L=\"A-Za-zÀ-ÖØ-öø-ʸ̀-֐ࠀ-῿‎Ⰰ-﬜︀-﹯﻽-￿\",I=new RegExp(\"^[^\"+L+\"]*[\"+F+\"]\"),K=new RegExp(\"^[^\"+F+\"]*[\"+L+\"]\"),z={bold:1,capitalize:1024,code:16,highlight:T,italic:2,lowercase:256,strikethrough:4,subscript:32,superscript:64,underline:8,uppercase:512},R={directionless:1,unmergeable:2},B={center:2,end:6,justify:4,left:1,right:3,start:5},W={[b]:\"center\",[M]:\"end\",[E]:\"justify\",[N]:\"left\",[w]:\"right\",[O]:\"start\"},J={normal:0,segmented:2,token:1},j={[h]:\"normal\",[_]:\"segmented\",[g]:\"token\"},U=\"$\",$=\"$config\";function V(t,e,n,r,i,o){let s=t.getFirstChild();for(;null!==s;){const t=s.__key;s.__parent===e&&(Pi(s)&&V(s,t,n,r,i,o),n.has(t)||o.delete(t),i.push(t)),s=s.getNextSibling()}}let Y=!1,q=0;function H(t){q=t.timeStamp}function G(t,e,n){const r=\"BR\"===t.nodeName,i=e.__lexicalLineBreak;return i&&(t===i||r&&t.previousSibling===i)||r&&void 0!==Po(t,n)}function X(t,e,n){const r=bs(ps(n));let i=null,o=null;null!==r&&r.anchorNode===t&&(i=r.anchorOffset,o=r.focusOffset);const s=t.nodeValue;null!==s&&$o(e,s,i,o,!1)}function Q(t,e,n){if(wr(t)){const e=t.anchor.getNode();if(e.is(n)&&t.format!==e.getFormat())return!1}return Co(e)&&n.isAttached()}function Z(t,e,n,r){for(let i=t;i&&!Us(i);i=as(i)){const t=Po(i,e);if(void 0!==t){const e=Mo(t,n);if(e)return Li(e)||!Ms(i)?void 0:[i,e]}else if(i===r)return[r,Ko(n)]}}function tt(t,e,n){Y=!0;const r=performance.now()-q>100;try{Ei(t,()=>{const i=$r()||function(t){return t.getEditorState().read(()=>{const t=$r();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,_=Z(g,t,c,l);if(!_)continue;const[p,y]=_;if(\"characterData\"===h)r&&yr(y)&&Co(g)&&Q(i,g,y)&&X(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=Ao(r),s=r.parentNode;if(null!=s&&r!==a&&null===i&&!G(r,s,t)){if(o){const t=(Ms(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];(G(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||G(n,i,t)||o.removeChild(n)}}n.takeRecords()}null!==i&&(u&&zo(i),o&&ss(t)&&i.insertRawText(f))})}finally{Y=!1}}function et(t){const e=t._observer;if(null!==e){tt(t,e.takeRecords(),e)}}function nt(t){!function(t){0===q&&ps(t).addEventListener(\"textInput\",H,!0)}(t),t._observer=new MutationObserver((e,n)=>{tt(t,e,n)})}class rt{key;parse;unparse;isEqual;defaultValue;constructor(t,e){this.key=t,this.parse=e.parse.bind(e),this.unparse=(e.unparse||ht).bind(e),this.isEqual=(e.isEqual||Object.is).bind(e),this.defaultValue=this.parse(void 0)}}function it(t,e){return new rt(t,e)}function ot(t,e,n=\"latest\"){const r=(\"latest\"===n?t.getLatest():t).__state;return r?r.getValue(e):e.defaultValue}function st(t,e,n){const r=ot(t,n,\"direct\"),i=ot(e,n,\"direct\");return n.isEqual(r,i)?null:[r,i]}function lt(t,e,n){let r;if(di(),\"function\"==typeof n){const i=t.getLatest(),o=ot(i,e);if(r=n(o),e.isEqual(o,r))return i}else r=n;const i=t.getWritable();return ut(i).updateFromKnown(e,r),i}function ct(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}=Vs(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 at{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 dt(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 at(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)}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=dt(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 ut(t){const e=t.getWritable(),n=e.__state?e.__state.getWritable(e):new at(e,ft(e));return e.__state=n,n}function ft(t){return t.__state?t.__state.sharedNodeState:lo(Is(),t.getType()).sharedNodeState}function dt(t){if(t)for(const e in t)return t}function ht(t){return t}function gt(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 _t(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 pt(t,e){const n=t.__state;return n&&n.node===t?n.getWritable(e):n}function yt(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;if(t&&e&&t.size!==e.size)return!1;const n=new Set;return!(t&&gt(n,t,e)||e&&gt(n,e,t)||t&&_t(n,t,e)||e&&_t(n,e,t))}(c,a))}function mt(t,e){const n=t.mergeWithSibling(e),r=_i()._normalizedNodes;return r.add(t.__key),r.add(e.__key),n}function xt(t){let e,n,r=t;if(\"\"!==r.__text||!r.isSimpleText()||r.isUnmergeable()){for(;null!==(e=r.getPreviousSibling())&&yr(e)&&e.isSimpleText()&&!e.isUnmergeable();){if(\"\"!==e.__text){if(yt(e,r)){r=mt(e,r);break}break}e.remove()}for(;null!==(n=r.getNextSibling())&&yr(n)&&n.isSimpleText()&&!n.isUnmergeable();){if(\"\"!==n.__text){if(yt(r,n)){r=mt(r,n);break}break}n.remove()}}else r.remove()}function Ct(t){return St(t.anchor),St(t.focus),t}function St(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),yr(r)){t.set(r.__key,i?r.getTextContentSize():0,\"text\",!0);break}if(!Pi(r))break;t.set(r.__key,i?r.getChildrenSize():0,\"element\",!0)}}let vt,Tt,kt,Nt,bt,wt,Et,Ot,Mt,At,Pt=\"\",Dt=null,Ft=null,Lt=!1,It=!1;function Kt(t,e){const n=Et.get(t);if(null!==e){const n=ee(t);n.parentNode===e&&e.removeChild(n)}if(Ot.has(t)||Tt._keyToDOMMap.delete(t),Pi(n)){const t=Ht(n,Et);zt(t,0,t.length-1,null)}void 0!==n&&ns(At,kt,Nt,n,\"destroyed\")}function zt(t,e,n,r){for(let i=e;i<=n;++i){const e=t[i];void 0!==e&&Kt(e,r)}}function Rt(t,e){t.setProperty(\"text-align\",e)}const Bt=\"40px\";function Wt(t,e){const n=vt.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)}if(0===e)return void t.style.setProperty(\"padding-inline-start\",\"\");const r=getComputedStyle(Tt._rootElement||t).getPropertyValue(\"--lexical-indent-base-value\")||Bt;t.style.setProperty(\"padding-inline-start\",`calc(${e} * ${r})`)}function Jt(t,e){const n=t.style;0===e?Rt(n,\"\"):1===e?Rt(n,\"left\"):2===e?Rt(n,\"center\"):3===e?Rt(n,\"right\"):4===e?Rt(n,\"justify\"):5===e?Rt(n,\"start\"):6===e&&Rt(n,\"end\")}function jt(t,e){const n=function(t){const e=t.__dir;if(null!==e)return e;if(Ki(t))return null;const n=t.getParentOrThrow();return Ki(n)&&null===n.__dir?\"auto\":null}(e);null!==n?t.dir=n:t.removeAttribute(\"dir\")}function Ut(e,n){const r=Ot.get(e);void 0===r&&t(60);const i=r.createDOM(vt,Tt);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,Tt),yr(r)?i.setAttribute(\"data-lexical-text\",\"true\"):Li(r)&&i.setAttribute(\"data-lexical-decorator\",\"true\"),Pi(r)){const t=r.__indent,e=r.__size;if(jt(i,r),0!==t&&Wt(i,t),0!==e){const t=e-1;$t(Ht(r,Ot),r,0,t,r.getDOMSlot(i))}const n=r.__format;0!==n&&Jt(i,n),r.isInline()||Yt(null,r,i)}else{const t=r.getTextContent();if(Li(r)){const t=r.decorate(Tt,vt);null!==t&&Xt(e,t),i.contentEditable=\"false\"}Pt+=t}return null!==n&&n.insertChild(i),ns(At,kt,Nt,r,\"created\"),i}function $t(t,e,n,r,i){const o=Pt;Pt=\"\";let s=n;for(;s<=r;++s){Ut(t[s],i);const e=Ot.get(t[s]);null!==e&&yr(e)?null===Dt&&(Dt=e.getFormat(),Ft=e.getStyle()):Pi(e)&&s<r&&!e.isInline()&&(Pt+=P)}i.element.__lexicalTextContent=Pt,Pt=o+Pt}function Vt(t,e){if(t){const n=t.__last;if(n){const t=e.get(n);if(t)return Zn(t)?\"line-break\":Li(t)&&t.isInline()?\"decorator\":null}return\"empty\"}return null}function Yt(t,e,n){const r=Vt(t,Et),i=Vt(e,Ot);r!==i&&e.getDOMSlot(n).setManagedLineBreak(i)}function qt(e,n,r){var i;Dt=null,Ft=null,function(e,n,r){const i=Pt,o=e.__size,s=n.__size;Pt=\"\";const l=r.element;if(1===o&&1===s){const t=e.__first,r=n.__first;if(t===r)Gt(t,l);else{const e=ee(t),n=Ut(r,null);try{l.replaceChild(n,e)}catch(i){if(\"object\"==typeof i&&null!=i){const o=`${i.toString()} Parent: ${l.tagName}, new child: {tag: ${n.tagName} key: ${r}}, old child: {tag: ${e.tagName}, key: ${t}}.`;throw new Error(o)}throw i}Kt(t,null)}const i=Ot.get(r);yr(i)&&null===Dt&&(Dt=i.getFormat(),Ft=i.getStyle())}else{const i=Ht(e,Et),c=Ht(n,Ot);if(i.length!==o&&t(227),c.length!==s&&t(228),0===o)0!==s&&$t(c,0,0,s-1,r);else if(0===s){if(0!==o){const t=null==r.after&&null==r.before&&null==r.element.__lexicalLineBreak;zt(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];if(t===r)u=Qt(Gt(r,o.element)),f++,d++;else{if(void 0===a&&(a=Zt(n,d)),void 0===c)c=Zt(e,f);else if(!c.has(t)){f++;continue}if(!a.has(t)){u=Qt(ee(t)),Kt(t,o.element),f++,c.delete(t);continue}if(c.has(r)){const t=cs(Tt,r);t!==u&&o.withBefore(u).insertChild(t),u=Qt(Gt(r,o.element)),f++,d++}else Ut(r,o.withBefore(u)),d++}const i=Ot.get(r);null!==i&&yr(i)?null===Dt&&(Dt=i.getFormat(),Ft=i.getStyle()):Pi(i)&&d<=l&&!i.isInline()&&(Pt+=P)}const h=f>s,g=d>l;if(h&&!g){const t=n[l+1],e=void 0===t?null:Tt.getElementByKey(t);$t(n,0,d,l,o.withBefore(e))}else g&&!h&&zt(e,f,s,o.element)}(0,i,c,o,s,r)}l.__lexicalTextContent=Pt,Pt=i+Pt}(e,n,n.getDOMSlot(r)),i=n,null==Dt||Dt===i.__textFormat||It||i.setTextFormat(Dt),function(t){null==Ft||Ft===t.__textStyle||It||t.setTextStyle(Ft)}(n)}function Ht(e,n){const r=[];let i=e.__first;for(;null!==i;){const e=n.get(i);void 0===e&&t(101),r.push(i),i=e.__next}return r}function Gt(e,n){const r=Et.get(e);let i=Ot.get(e);void 0!==r&&void 0!==i||t(61);const o=Lt||wt.has(e)||bt.has(e),s=cs(Tt,e);if(r===i&&!o){let t;if(Pi(r)){const e=s.__lexicalTextContent;\"string\"==typeof e?t=e:(t=r.getTextContent(),s.__lexicalTextContent=t)}else t=r.getTextContent();return Pt+=t,s}if(r!==i&&o&&ns(At,kt,Nt,i,\"updated\"),i.updateDOM(r,s,vt)){const r=Ut(e,null);return null===n&&t(62),n.replaceChild(r,s),Kt(e,null),r}if(Pi(r)){Pi(i)||t(334,e);const n=i.__indent;(Lt||n!==r.__indent)&&Wt(s,n);const l=i.__format;if((Lt||l!==r.__format)&&Jt(s,l),o)qt(r,i,s),Ki(i)||i.isInline()||Yt(r,i,s);else{const t=s.__lexicalTextContent;let e;\"string\"==typeof t?e=t:(e=r.getTextContent(),s.__lexicalTextContent=e),Pt+=e}if((Lt||i.__dir!==r.__dir)&&(jt(s,i),Ki(i)&&!Lt))for(const t of i.getChildren())if(Pi(t)){jt(cs(Tt,t.getKey()),t)}}else{const t=i.getTextContent();if(Li(i)){const t=i.decorate(Tt,vt);null!==t&&Xt(e,t)}Pt+=t}if(!It&&Ki(i)&&i.__cachedText!==Pt){const t=i.getWritable();t.__cachedText=Pt,i=t}return s}function Xt(t,e){let n=Tt._pendingDecorators;const r=Tt._decorators;if(null===n){if(r[t]===e)return;n=Fo(Tt)}n[t]=e}function Qt(t){let e=t.nextSibling;return null!==e&&e===Tt._blockCursorElement&&(e=e.nextSibling),e}function Zt(t,e){const n=new Set;for(let r=e;r<t.length;r++)n.add(t[r]);return n}function te(t,e,n,r,i,o){Pt=\"\",Lt=2===r,Tt=n,vt=n._config,kt=n._nodes,Nt=Tt._listeners.mutation,bt=i,wt=o,Et=t._nodeMap,Ot=e._nodeMap,It=e._readOnly,Mt=new Map(n._keyToDOMMap);const s=new Map;return At=s,Gt(\"root\",null),Tt=void 0,kt=void 0,bt=void 0,wt=void 0,Et=void 0,Ot=void 0,vt=void 0,Mt=void 0,At=void 0,s}function ee(e){const n=Mt.get(e);return void 0===n&&t(75,e),n}function ne(t){return{type:t}}const re=ne(\"SELECTION_CHANGE_COMMAND\"),ie=ne(\"SELECTION_INSERT_CLIPBOARD_NODES_COMMAND\"),oe=ne(\"CLICK_COMMAND\"),se=ne(\"BEFORE_INPUT_COMMAND\"),le=ne(\"INPUT_COMMAND\"),ce=ne(\"COMPOSITION_START_COMMAND\"),ae=ne(\"COMPOSITION_END_COMMAND\"),ue=ne(\"DELETE_CHARACTER_COMMAND\"),fe=ne(\"INSERT_LINE_BREAK_COMMAND\"),de=ne(\"INSERT_PARAGRAPH_COMMAND\"),he=ne(\"CONTROLLED_TEXT_INSERTION_COMMAND\"),ge=ne(\"PASTE_COMMAND\"),_e=ne(\"REMOVE_TEXT_COMMAND\"),pe=ne(\"DELETE_WORD_COMMAND\"),ye=ne(\"DELETE_LINE_COMMAND\"),me=ne(\"FORMAT_TEXT_COMMAND\"),xe=ne(\"UNDO_COMMAND\"),Ce=ne(\"REDO_COMMAND\"),Se=ne(\"KEYDOWN_COMMAND\"),ve=ne(\"KEY_ARROW_RIGHT_COMMAND\"),Te=ne(\"MOVE_TO_END\"),ke=ne(\"KEY_ARROW_LEFT_COMMAND\"),Ne=ne(\"MOVE_TO_START\"),be=ne(\"KEY_ARROW_UP_COMMAND\"),we=ne(\"KEY_ARROW_DOWN_COMMAND\"),Ee=ne(\"KEY_ENTER_COMMAND\"),Oe=ne(\"KEY_SPACE_COMMAND\"),Me=ne(\"KEY_BACKSPACE_COMMAND\"),Ae=ne(\"KEY_ESCAPE_COMMAND\"),Pe=ne(\"KEY_DELETE_COMMAND\"),De=ne(\"KEY_TAB_COMMAND\"),Fe=ne(\"INSERT_TAB_COMMAND\"),Le=ne(\"INDENT_CONTENT_COMMAND\"),Ie=ne(\"OUTDENT_CONTENT_COMMAND\"),Ke=ne(\"DROP_COMMAND\"),ze=ne(\"FORMAT_ELEMENT_COMMAND\"),Re=ne(\"DRAGSTART_COMMAND\"),Be=ne(\"DRAGOVER_COMMAND\"),We=ne(\"DRAGEND_COMMAND\"),Je=ne(\"COPY_COMMAND\"),je=ne(\"CUT_COMMAND\"),Ue=ne(\"SELECT_ALL_COMMAND\"),$e=ne(\"CLEAR_EDITOR_COMMAND\"),Ve=ne(\"CLEAR_HISTORY_COMMAND\"),Ye=ne(\"CAN_REDO_COMMAND\"),qe=ne(\"CAN_UNDO_COMMAND\"),He=ne(\"FOCUS_COMMAND\"),Ge=ne(\"BLUR_COMMAND\"),Xe=ne(\"KEY_MODIFIER_COMMAND\"),Qe=Object.freeze({}),Ze=[[\"keydown\",function(t,e){if(tn=t.timeStamp,en=t.key,e.isComposing())return;ls(e,Se,t)}],[\"pointerdown\",function(t,e){const n=t.target,r=t.pointerType;As(n)&&\"touch\"!==r&&\"pen\"!==r&&0===t.button&&Ei(e,()=>{uo(n)||(cn=!0)})}],[\"compositionstart\",function(t,e){ls(e,ce,t)}],[\"compositionend\",function(t,e){o?un=!0:c||!l&&!d?ls(e,ae,t):(fn=!0,dn=t.data)}],[\"input\",function(t,e){t.stopPropagation(),Ei(e,()=>{e.dispatchCommand(le,t)},{event:t}),rn=null}],[\"click\",function(t,e){Ei(e,()=>{const n=$r(),r=bs(ps(e)),i=Vr();if(r)if(wr(n)){const e=n.anchor,o=e.getNode();if(\"element\"===e.type&&0===e.offset&&n.isCollapsed()&&!Ki(o)&&1===Io().getChildrenSize()&&o.getTopLevelElementOrThrow().isEmpty()&&null!==i&&n.is(i))r.removeAllRanges(),n.dirty=!0;else if(3===t.detail&&!n.isCollapsed()){if(o!==n.focus.getNode()){const t=qs(o,t=>Pi(t)&&!t.isInline());Pi(t)&&t.select(0)}}}else if(\"touch\"===t.pointerType||\"pen\"===t.pointerType){const n=r.anchorNode;if(Ms(n)||Co(n)){zo(Ur(i,r,e,t))}}ls(e,oe,t)})}],[\"cut\",Qe],[\"copy\",Qe],[\"dragstart\",Qe],[\"dragover\",Qe],[\"dragend\",Qe],[\"paste\",Qe],[\"focus\",Qe],[\"blur\",Qe],[\"drop\",Qe]];s&&Ze.push([\"beforeinput\",(t,e)=>function(t,e){const n=t.inputType;if(\"deleteCompositionText\"===n||o&&ss(e))return;if(\"insertCompositionText\"===n)return;ls(e,se,t)}(t,e)]);let tn=0,en=null,nn=0,rn=null;const on=new WeakMap,sn=new WeakMap;let ln=!1,cn=!1,an=!1,un=!1,fn=!1,dn=\"\",hn=null,gn=[0,\"\",0,\"root\",0];function _n(t,e,n,r,i){const o=t.anchor,l=t.focus,c=o.getNode(),a=_i(),u=bs(ps(a)),f=null!==u?u.anchorNode:null,d=o.key,h=a.getElementByKey(d),g=n.length;return d!==l.key||!yr(c)||(!i&&(!s||nn<r+50)||c.isDirty()&&g<2||Bo(n))&&o.offset!==l.offset&&!c.isComposing()||xo(c)||c.isDirty()&&g>1||(i||!s)&&null!==h&&!c.isComposing()&&f!==vo(h)||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=mo(e);return 0===n?!e.canInsertTextBefore()||!r.canInsertTextBefore()&&!e.isComposing()||i||function(t){const e=t.getPreviousSibling();return(yr(e)||Pi(e)&&e.isInline())&&!e.canInsertTextAfter()}(e):n===e.getTextContentSize()&&(!e.canInsertTextAfter()||!r.canInsertTextAfter()&&!e.isComposing()||i)}(t,c)}function pn(t,e){return Co(t)&&null!==t.nodeValue&&0!==e&&e!==t.nodeValue.length}function yn(e,n,r){const{anchorNode:i,anchorOffset:o,focusNode:s,focusOffset:l}=e;ln&&(ln=!1,pn(i,o)&&pn(s,l)&&!hn)||Ei(n,()=>{if(!r)return void zo(null);if(!ho(n,i,s))return;let c=$r();if(hn&&wr(c)&&c.isCollapsed()){const t=c.anchor,e=hn.anchor;(t.key===e.key&&t.offset===e.offset+1||1===t.offset&&e.getNode().is(t.getNode().getPreviousSibling()))&&(c=hn.clone(),zo(c))}if(hn=null,wr(c)){const r=c.anchor,i=r.getNode();if(c.isCollapsed()){\"Range\"===e.type&&e.anchorNode===e.focusNode&&(c.dirty=!0);const o=ps(n).event,s=o?o.timeStamp:performance.now(),[l,a,u,f,d]=gn,h=Io(),g=!1===n.isComposing()&&\"\"===h.getTextContent();if(s<d+200&&r.offset===u&&r.key===f)mn(c,l,a);else if(\"text\"===r.type)yr(i)||t(141),xn(c,i);else if(\"element\"===r.type&&!g){Pi(i)||t(259);const e=r.getNode();e.isEmpty()?function(t,e){const n=e.getTextFormat(),r=e.getTextStyle();mn(t,n,r)}(c,e):mn(c,0,\"\")}}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(yr(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}}ls(n,re,void 0)})}function mn(t,e,n){t.format===e&&t.style===n||(t.format=e,t.style=n,t.dirty=!0)}function xn(t,e){mn(t,e.getFormat(),e.getStyle())}function Cn(t){if(!t.getTargetRanges)return null;const e=t.getTargetRanges();return 0===e.length?null:e[0]}function Sn(e){const n=e.inputType,r=Cn(e),i=_i(),o=$r();if(\"deleteContentBackward\"===n){if(null===o){const t=Vr();if(!wr(t))return!0;zo(t.clone())}if(wr(o)){const n=o.anchor.key===o.focus.key;if(s=e.timeStamp,\"MediaLast\"===en&&s<tn+30&&i.isComposing()&&n){if(Eo(null),tn=0,setTimeout(()=>{Ei(i,()=>{Eo(null)})},30),wr(o)){const e=o.anchor.getNode();e.markDirty(),yr(e)||t(142),xn(o,e)}}else{Eo(null),e.preventDefault();const t=o.anchor.getNode(),r=t.getTextContent(),s=t.canInsertTextAfter(),l=0===o.anchor.offset&&o.focus.offset===r.length;let c=f&&n&&!l&&s;if(c&&o.isCollapsed()&&(c=!Li(os(o.anchor,!0))),!c){ls(i,ue,!0);const t=$r();f&&wr(t)&&t.isCollapsed()&&(hn=t,setTimeout(()=>hn=null))}}return!0}}var s;if(!wr(o))return!0;const l=e.data;null!==rn&&Uo(!1,i,rn),o.dirty&&null===rn||!o.isCollapsed()||Ki(o.anchor.getNode())||null===r||o.applyDOMRange(r),rn=null;const a=o.anchor,u=o.focus,d=a.getNode(),h=u.getNode();if(\"insertText\"===n||\"insertTranspose\"===n){if(\"\\n\"===l)e.preventDefault(),ls(i,fe,!1);else if(l===P)e.preventDefault(),ls(i,de,void 0);else if(null==l&&e.dataTransfer){const t=e.dataTransfer.getData(\"text/plain\");e.preventDefault(),o.insertRawText(t)}else null!=l&&_n(o,r,l,e.timeStamp,!0)?(e.preventDefault(),ls(i,he,l)):rn=l;return nn=e.timeStamp,!0}switch(e.preventDefault(),n){case\"insertFromYank\":case\"insertFromDrop\":case\"insertReplacementText\":ls(i,he,e);break;case\"insertFromComposition\":Eo(null),ls(i,he,e);break;case\"insertLineBreak\":Eo(null),ls(i,fe,!1);break;case\"insertParagraph\":Eo(null),an&&!c?(an=!1,ls(i,fe,!1)):ls(i,de,void 0);break;case\"insertFromPaste\":case\"insertFromPasteAsQuotation\":ls(i,ge,e);break;case\"deleteByComposition\":(function(t,e){return t!==e||Pi(t)||Pi(e)||!mo(t)||!mo(e)})(d,h)&&ls(i,_e,e);break;case\"deleteByDrag\":case\"deleteByCut\":ls(i,_e,e);break;case\"deleteContent\":ls(i,ue,!1);break;case\"deleteWordBackward\":ls(i,pe,!0);break;case\"deleteWordForward\":ls(i,pe,!1);break;case\"deleteHardLineBackward\":case\"deleteSoftLineBackward\":ls(i,ye,!0);break;case\"deleteContentForward\":case\"deleteHardLineForward\":case\"deleteSoftLineForward\":ls(i,ye,!1);break;case\"formatStrikeThrough\":ls(i,me,\"strikethrough\");break;case\"formatBold\":ls(i,me,\"bold\");break;case\"formatItalic\":ls(i,me,\"italic\");break;case\"formatUnderline\":ls(i,me,\"underline\");break;case\"historyUndo\":ls(i,xe,void 0);break;case\"historyRedo\":ls(i,Ce,void 0)}return!0}function vn(t){if(Ms(t.target)&&uo(t.target))return!0;const e=_i(),n=$r(),r=t.data,i=Cn(t);if(null!=r&&wr(n)&&_n(n,i,r,t.timeStamp,!1)){un&&(Nn(e,r),un=!1);const i=n.anchor.getNode(),l=bs(ps(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()&&yr(i)&&null!==l.anchorNode&&i.getTextContent().slice(0,a)+r+i.getTextContent().slice(a+u)===jo(l.anchorNode)||ls(e,he,r);const d=r.length;o&&d>1&&\"insertCompositionText\"===t.inputType&&!e.isComposing()&&(n.anchor.offset-=d),f&&e.isComposing()&&(tn=0,Eo(null))}else{Uo(!1,e,null!==r?r:void 0),un&&(Nn(e,r||void 0),un=!1)}return function(){di();const t=_i();et(t)}(),!0}function Tn(t){const e=_i(),n=$r();if(wr(n)&&!e.isComposing()){const r=n.anchor,i=n.anchor.getNode();Eo(r.key),ds(qn),(t.timeStamp<tn+30||\"element\"===r.type||!n.isCollapsed()||i.getFormat()!==n.format||yr(i)&&i.getStyle()!==n.style)&&ls(e,he,D)}return!0}function kn(t){return Nn(_i(),t.data),ds(Hn),!0}function Nn(t,e){const n=t._compositionKey;if(Eo(null),null!==n&&null!=e){if(\"\"===e){const e=Mo(n),r=vo(t.getElementByKey(n));if(null!==r&&null!==r.nodeValue&&yr(e)){const n=bs(ps(t));let i=null,o=null;null!==n&&n.anchorNode===r&&(i=n.anchorOffset,o=n.focusOffset),$o(e,r.nodeValue,i,o,!0)}return}if(\"\\n\"===e[e.length-1]){const e=$r();if(wr(e)||Or(e)){if(wr(e)){const t=e.focus;e.anchor.set(t.key,t.offset,t.type)}return void ls(t,Ee,null)}}}Uo(!0,t,e)}function bn(t){const e=_i();if(null==t.key)return!0;if(fn){if(Qo(t))return Ei(e,()=>{Nn(e,dn)}),fn=!1,dn=\"\",!0;fn=!1,dn=\"\"}if(function(t){return Ho(t,\"ArrowRight\",{shiftKey:\"any\"})}(t))ls(e,ve,t);else if(function(t){return Ho(t,\"ArrowRight\",Go)}(t))ls(e,Te,t);else if(function(t){return Ho(t,\"ArrowLeft\",{shiftKey:\"any\"})}(t))ls(e,ke,t);else if(function(t){return Ho(t,\"ArrowLeft\",Go)}(t))ls(e,Ne,t);else if(function(t){return Ho(t,\"ArrowUp\",{altKey:\"any\",shiftKey:\"any\"})}(t))ls(e,be,t);else if(function(t){return Ho(t,\"ArrowDown\",{altKey:\"any\",shiftKey:\"any\"})}(t))ls(e,we,t);else if(function(t){return Ho(t,\"Enter\",{altKey:\"any\",ctrlKey:\"any\",metaKey:\"any\",shiftKey:!0})}(t))an=!0,ls(e,Ee,t);else if(function(t){return\" \"===t.key}(t))ls(e,Oe,t);else if(function(t){return i&&Ho(t,\"o\",{ctrlKey:!0})}(t))t.preventDefault(),an=!0,ls(e,fe,!0);else if(function(t){return Ho(t,\"Enter\",{altKey:\"any\",ctrlKey:\"any\",metaKey:\"any\"})}(t))an=!1,ls(e,Ee,t);else if(function(t){return Ho(t,\"Backspace\",{shiftKey:\"any\"})||i&&Ho(t,\"h\",{ctrlKey:!0})}(t))Qo(t)?ls(e,Me,t):(t.preventDefault(),ls(e,ue,!0));else if(function(t){return\"Escape\"===t.key}(t))ls(e,Ae,t);else if(function(t){return Ho(t,\"Delete\",{})||i&&Ho(t,\"d\",{ctrlKey:!0})}(t))!function(t){return\"Delete\"===t.key}(t)?(t.preventDefault(),ls(e,ue,!1)):ls(e,Pe,t);else if(function(t){return Ho(t,\"Backspace\",Xo)}(t))t.preventDefault(),ls(e,pe,!0);else if(function(t){return Ho(t,\"Delete\",Xo)}(t))t.preventDefault(),ls(e,pe,!1);else if(function(t){return i&&Ho(t,\"Backspace\",{metaKey:!0})}(t))t.preventDefault(),ls(e,ye,!0);else if(function(t){return i&&(Ho(t,\"Delete\",{metaKey:!0})||Ho(t,\"k\",{ctrlKey:!0}))}(t))t.preventDefault(),ls(e,ye,!1);else if(function(t){return Ho(t,\"b\",Go)}(t))t.preventDefault(),ls(e,me,\"bold\");else if(function(t){return Ho(t,\"u\",Go)}(t))t.preventDefault(),ls(e,me,\"underline\");else if(function(t){return Ho(t,\"i\",Go)}(t))t.preventDefault(),ls(e,me,\"italic\");else if(function(t){return Ho(t,\"Tab\",{shiftKey:\"any\"})}(t))ls(e,De,t);else if(function(t){return Ho(t,\"z\",Go)}(t))t.preventDefault(),ls(e,xe,void 0);else if(function(t){if(i)return Ho(t,\"z\",{metaKey:!0,shiftKey:!0});return Ho(t,\"y\",{ctrlKey:!0})||Ho(t,\"z\",{ctrlKey:!0,shiftKey:!0})}(t))t.preventDefault(),ls(e,Ce,void 0);else{const n=e._editorState._selection;null===n||wr(n)?Zo(t)&&(t.preventDefault(),ls(e,Ue,t)):!function(t){return Ho(t,\"c\",Go)}(t)?!function(t){return Ho(t,\"x\",Go)}(t)?Zo(t)&&(t.preventDefault(),ls(e,Ue,t)):(t.preventDefault(),ls(e,je,t)):(t.preventDefault(),ls(e,Je,t))}return function(t){return t.ctrlKey||t.shiftKey||t.altKey||t.metaKey}(t)&&e.dispatchCommand(Xe,t),!0}function wn(t){let e=t.__lexicalEventHandles;return void 0===e&&(e=[],t.__lexicalEventHandles=e),e}const En=new Map;function On(t){const e=ws(t.target);if(null===e)return;const n=_o(e.anchorNode);if(null===n)return;cn&&(cn=!1,Ei(n,()=>{const r=Vr(),i=e.anchorNode;if(Ms(i)||Co(i)){zo(Ur(r,e,n,t))}}));const r=Wo(n),i=r[r.length-1],o=i._key,s=En.get(o),l=s||i;l!==n&&yn(e,l,!1),yn(e,n,!0),n!==i?En.set(o,n):s&&En.delete(o)}function Mn(t){t._lexicalHandled=!0}function An(t){return!0===t._lexicalHandled}const Pn=()=>{};function Dn(e){const n=on.get(e);if(void 0===n)return void Pn();const r=sn.get(n);if(void 0===r)return void Pn();const i=r-1;i>=0||t(164),on.delete(e),sn.set(n,i),0===i&&n.removeEventListener(\"selectionchange\",On);const o=po(e);go(o)?(!function(t){if(null!==t._parentEditor){const e=Wo(t),n=e[e.length-1]._key;En.get(n)===t&&En.delete(n)}else En.delete(t._key)}(o),e.__lexicalEditor=null):o&&t(198);const s=wn(e);for(let t=0;t<s.length;t++)s[t]();e.__lexicalEventHandles=[]}function Fn(t,e,n){di();const r=t.__key,i=t.getParent();if(null===i)return;const o=function(t){const e=$r();if(!wr(e)||!Pi(t))return e;const{anchor:n,focus:r}=e,i=n.getNode(),o=r.getNode();gs(i,t)&&n.set(t.__key,0,\"element\");gs(o,t)&&r.set(t.__key,0,\"element\");return e}(t);let s=!1;if(wr(o)&&e){const e=o.anchor,n=o.focus;e.key===r&&(Hr(e,t,i,t.getPreviousSibling(),t.getNextSibling()),s=!0),n.key===r&&(Hr(n,t,i,t.getPreviousSibling(),t.getNextSibling()),s=!0)}else Or(o)&&e&&t.isSelected()&&t.selectPrevious();if(wr(o)&&e&&!s){const e=t.getIndexWithinParent();bo(t),Yr(o,i,e,-1)}else bo(t);n||xs(i)||i.canBeEmpty()||!i.isEmpty()||Fn(i,e),e&&o&&Ki(i)&&i.isEmpty()&&i.selectEnd()}function Ln(t){return t}const In=Symbol.for(\"ephemeral\");function Kn(t){return t[In]||!1}class zn{__type;__key;__parent;__prev;__next;__state;static getType(){const{ownNodeType:e}=Vs(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))}static importDOM;constructor(t){this.__type=this.constructor.getType(),this.__parent=null,this.__prev=null,this.__next=null,Object.defineProperty(this,\"__state\",{configurable:!0,enumerable:!1,value:void 0,writable:!0}),No(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=Mo(t);if(null===e)break;t=e.__parent}return!1}isSelected(t){const e=t||$r();if(null==e)return!1;const n=e.getNodes().some(t=>t.__key===this.__key);if(yr(this))return n;if(wr(e)&&\"element\"===e.anchor.type&&\"element\"===e.focus.type){if(e.isCollapsed())return!1;const t=this.getParent();if(Li(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:Mo(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(xs(n))return Pi(e)||e===this&&Li(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:Mo(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:Mo(t)}getNextSiblings(){const t=[];let e=this.getNextSibling();for(;null!==e;)t.push(e),e=e.getNextSibling();return t}getCommonAncestor(t){const e=Pi(this)?this:this.getParent(),n=Pi(t)?t:t.getParent(),r=e&&n?El(e,n):null;return r?r.commonAncestor:null}is(t){return null!=t&&this.__key===t.__key}isBefore(e){const n=El(this,e);return null!==n&&(\"descendant\"===n.type||(\"branch\"===n.type?-1===Nl(n):(\"same\"!==n.type&&\"ancestor\"!==n.type&&t(279),!1)))}isParentOf(t){const e=El(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=Pi(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=_i()._dirtyLeaves;return null!==t&&t.has(this.__key)}getLatest(){if(Kn(this))return this;const e=Mo(this.__key);return null===e&&t(113),e}getWritable(){if(Kn(this))return this;di();const t=gi(),e=_i(),n=t._nodeMap,r=this.__key,i=this.getLatest(),o=e._cloneNotNeeded,s=$r();if(null!==s&&s.setCachedNodes(null),o.has(r))return wo(i),i;const l=Bs(i);return o.add(r),wo(l),n.set(r,l),l}getTextContent(){return\"\"}getTextContentSize(){return this.getTextContent().length}createDOM(e,n){t(70)}updateDOM(e,n,r){t(71)}exportDOM(t){return{element:this.createDOM(t._config,t)}}exportJSON(){const t=this.__state?this.__state.toJSON():void 0;return{type:this.__type,version:1,...t}}static importJSON(e){t(18,this.name)}updateFromJSON(t){return function(t,e){const n=t.getWritable(),r=e.$;let i=r;for(const t of ft(n).flatKeys)t in e&&(void 0!==i&&i!==r||(i={...r}),i[t]=e[t]);return(n.__state||i)&&ut(t).updateFromJSON(i),n}(this,t)}static transform(){return null}remove(t){Fn(this,!0,t)}replace(e,n){di();let r=$r();null!==r&&(r=r.clone()),vs(this,e);const i=this.getLatest(),o=this.__key,s=e.__key,l=e.getWritable(),c=this.getParentOrThrow().getWritable(),a=c.__size;bo(l);const u=i.getPreviousSibling(),f=i.getNextSibling(),d=i.__prev,h=i.__next,g=i.__parent;if(Fn(i,!1,!0),null===u)c.__first=s;else{u.getWritable().__next=s}if(l.__prev=d,null===f)c.__last=s;else{f.getWritable().__prev=s}if(l.__next=h,l.__parent=g,c.__size=a,n&&(Pi(this)&&Pi(l)||t(139),this.getChildren().forEach(t=>{l.append(t)})),wr(r)){zo(r);const t=r.anchor,e=r.focus;t.key===o&&Nr(t,l),e.key===o&&Nr(e,l)}return Oo()===o&&Eo(s),l}insertAfter(t,e=!0){di(),vs(this,t);const n=this.getWritable(),r=t.getWritable(),i=r.getParent(),o=$r();let s=!1,l=!1;if(null!==i){const e=t.getIndexWithinParent();if(bo(r),wr(o)){const t=i.__key,n=o.anchor,r=o.focus;s=\"element\"===n.type&&n.key===t&&n.offset===e+1,l=\"element\"===r.type&&r.key===t&&r.offset===e+1}}const c=this.getNextSibling(),a=this.getParentOrThrow().getWritable(),u=r.__key,f=n.__next;if(null===c)a.__last=u;else{c.getWritable().__prev=u}if(a.__size++,n.__next=u,r.__next=f,r.__prev=n.__key,r.__parent=n.__parent,e&&wr(o)){const t=this.getIndexWithinParent();Yr(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){di(),vs(this,t);const n=this.getWritable(),r=t.getWritable(),i=r.__key;bo(r);const o=this.getPreviousSibling(),s=this.getParentOrThrow().getWritable(),l=n.__prev,c=this.getIndexWithinParent();if(null===o)s.__first=i;else{o.getWritable().__next=i}s.__size++,n.__prev=i,r.__prev=l,r.__next=n.__key,r.__parent=n.__parent;const a=$r();if(e&&wr(a)){Yr(a,this.getParentOrThrow(),c)}return t}isParentRequired(){return!1}createParentElementNode(){return Vi()}selectStart(){return this.selectPrevious()}selectEnd(){return this.selectNext(0,0)}selectPrevious(t,e){di();const n=this.getPreviousSibling(),r=this.getParentOrThrow();if(null===n)return r.select(0,0);if(Pi(n))return n.select();if(!yr(n)){const t=n.getIndexWithinParent()+1;return r.select(t,t)}return n.select(t,e)}selectNext(t,e){di();const n=this.getNextSibling(),r=this.getParentOrThrow();if(null===n)return r.select();if(Pi(n))return n.select(0,0);if(!yr(n)){const t=n.getIndexWithinParent();return r.select(t,t)}return n.select(t,e)}markDirty(){this.getWritable()}reconcileObservedMutation(t,e){this.markDirty()}}const Rn=\"historic\",Bn=\"history-push\",Wn=\"history-merge\",Jn=\"paste\",jn=\"collaboration\",Un=\"skip-collab\",$n=\"skip-scroll-into-view\",Vn=\"skip-dom-selection\",Yn=\"skip-selection-focus\",qn=\"composition-start\",Hn=\"composition-end\";class Gn extends zn{static getType(){return\"linebreak\"}static clone(t){return new Gn(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&&Fs(e)){const n=e.firstChild;if(n===t||n.nextSibling===t&&tr(n)){const n=e.lastChild;if(n===t||n.previousSibling===t&&tr(n))return!0}}return!1}(t)||function(t){const e=t.parentElement;if(null!==e&&Fs(e)){const n=e.firstChild;if(n===t||n.nextSibling===t&&tr(n))return!1;const r=e.lastChild;if(r===t||r.previousSibling===t&&tr(r))return!0}return!1}(t)?null:{conversion:Xn,priority:0}}}static importJSON(t){return Qn().updateFromJSON(t)}}function Xn(t){return{node:Qn()}}function Qn(){return Ss(new Gn)}function Zn(t){return t instanceof Gn}function tr(t){return Co(t)&&/^( |\\t|\\r?\\n)+$/.test(t.textContent||\"\")}function er(t,e){return 16&e?\"code\":e&T?\"mark\":32&e?\"sub\":64&e?\"sup\":null}function nr(t,e){return 1&e?\"strong\":2&e?\"em\":\"span\"}function rr(t,e,n,r,i){const o=r.classList;let s=es(i,\"base\");void 0!==s&&o.add(...s),s=es(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 z){const r=z[t];if(s=es(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 ir(t,e,n){const r=e.firstChild,i=n.isComposing(),s=t+(i?A:\"\");if(null==r)e.textContent=s;else{const t=r.nodeValue;if(t!==s)if(i||o){const[e,n,i]=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)]}(t,s);0!==n&&r.deleteData(e,n),r.insertData(e,i)}else r.nodeValue=s}}function or(t,e,n,r,i,o){ir(i,t,e);const s=o.theme.text;void 0!==s&&rr(0,0,r,t,s)}function sr(t,e){const n=document.createElement(e);return n.appendChild(t),n}class lr extends zn{__text;__format;__style;__mode;__detail;static getType(){return\"text\"}static clone(t){return new lr(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===Oo()}isSegmented(){return 2===this.getLatest().__mode}isDirectionless(){return!!(1&this.getLatest().__detail)}isUnmergeable(){return!!(2&this.getLatest().__detail)}hasFormat(t){const e=z[t];return 0!==(this.getFormat()&e)}isSimpleText(){return\"text\"===this.__type&&0===this.__mode}getTextContent(){return this.getLatest().__text}getFormatFlags(t,e){return To(this.getLatest().__format,t,e)}canHaveFormat(){return!0}isInline(){return!0}createDOM(t,e){const n=this.__format,r=er(0,n),i=nr(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));or(l,this,0,n,this.__text,t);const c=this.__style;return\"\"!==c&&(s.style.cssText=c),s}updateDOM(e,n,r){const i=this.__text,o=e.__format,s=this.__format,l=er(0,o),c=er(0,s),a=nr(0,o),u=nr(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 or(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)),ir(i,f,this);const d=r.theme.text;void 0!==d&&o!==s&&rr(0,o,s,f,d);const h=e.__style,g=this.__style;return h!==g&&(n.style.cssText=g),!1}static importDOM(){return{\"#text\":()=>({conversion:dr,priority:0}),b:()=>({conversion:ar,priority:0}),code:()=>({conversion:_r,priority:0}),em:()=>({conversion:_r,priority:0}),i:()=>({conversion:_r,priority:0}),mark:()=>({conversion:_r,priority:0}),s:()=>({conversion:_r,priority:0}),span:()=>({conversion:cr,priority:0}),strong:()=>({conversion:_r,priority:0}),sub:()=>({conversion:_r,priority:0}),sup:()=>({conversion:_r,priority:0}),u:()=>({conversion:_r,priority:0})}}static importJSON(t){return pr().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 Ms(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=sr(n,\"b\")),this.hasFormat(\"italic\")&&(n=sr(n,\"i\")),this.hasFormat(\"strikethrough\")&&(n=sr(n,\"s\")),this.hasFormat(\"underline\")&&(n=sr(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?z[t]:t,e}setDetail(t){const e=this.getWritable();return e.__detail=\"string\"==typeof t?R[t]:t,e}setStyle(t){const e=this.getWritable();return e.__style=t,e}toggleFormat(t){const e=To(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=J[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){di();let n=t,r=e;const i=$r(),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(!wr(i))return Br(s,n,s,r,\"text\",\"text\");{const t=Oo();t!==i.anchor.key&&t!==i.focus.key||Eo(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=$r();if(r&&wr(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){di();const e=this.getLatest(),n=e.getTextContent();if(\"\"===n)return[];const r=e.__key,i=Oo(),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=$r();if(wr(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=pr(a),f.__format=d,f.__style=h,f.__detail=g,f.__state=pt(e,f),_=!0):f=e.setTextContent(a);const x=[f];for(let t=1;t<c;t++){const n=pr(s[t]);n.__format=d,n.__style=h,n.__detail=g,n.__state=pt(e,n);const o=n.__key;i===r&&Eo(o),x.push(n)}const C=p?p.offset:null,S=y?y.offset:null;let v=0;for(const t of x){if(!p&&!y)break;const e=v+t.getTextContentSize();if(null!==p&&null!==C&&C<=e&&C>=v&&(p.set(t.getKey(),C-v,\"text\"),C<e&&(p=null)),null!==y&&null!==S&&S<=e&&S>=v){y.set(t.getKey(),S-v,\"text\");break}v=e}if(null!==u){!function(t){const e=t.getPreviousSibling(),n=t.getNextSibling();null!==e&&wo(e);null!==n&&wo(n)}(this);const t=u.getWritable(),e=this.getIndexWithinParent();_?(t.splice(e,0,x),this.remove()):t.splice(e,1,x),wr(m)&&Yr(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;Oo()===i&&Eo(r);const l=$r();if(wr(l)){const t=l.anchor,o=l.focus;null!==t&&t.key===i&&Gr(t,n,r,e,s),null!==o&&o.key===i&&Gr(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 cr(t){return{forChild:mr(t.style),node:null}}function ar(t){const e=t,n=\"normal\"===e.style.fontWeight;return{forChild:mr(e.style,n?void 0:\"bold\"),node:null}}const ur=new WeakMap;function fr(t){if(!Ms(t))return!1;if(\"PRE\"===t.nodeName)return!0;const e=t.style.whiteSpace;return\"string\"==typeof e&&e.startsWith(\"pre\")}function dr(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=ur.get(n))&&!fr(n);)r.push(n),n=n.parentNode;const i=void 0===e?n:e;for(let t=0;t<r.length;t++)ur.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(Qn()):\"\\t\"===n?e.push(Cr()):\"\"!==n&&e.push(pr(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=hr(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=hr(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:pr(r)}}function hr(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,Ms(n)){const t=n.style.display;if(\"\"===t&&!Ds(n)||\"\"!==t&&!t.startsWith(\"inline\"))return null}let r=n;for(;null!==(r=e?n.firstChild:n.lastChild);)n=r;if(Co(n))return n;if(\"BR\"===n.nodeName)return null}}const gr={code:\"code\",em:\"italic\",i:\"italic\",mark:\"highlight\",s:\"strikethrough\",strong:\"bold\",sub:\"subscript\",sup:\"superscript\",u:\"underline\"};function _r(t){const e=gr[t.nodeName.toLowerCase()];return void 0===e?{node:null}:{forChild:mr(t.style,e),node:null}}function pr(t=\"\"){return Ss(new lr(t))}function yr(t){return t instanceof lr}function mr(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=>yr(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 xr extends lr{static getType(){return\"tab\"}static clone(t){return new xr(t.__key)}constructor(t){super(\"\\t\",t),this.__detail=2}static importDOM(){return null}createDOM(t){const e=super.createDOM(t),n=es(t.theme,\"tab\");if(void 0!==n){e.classList.add(...n)}return e}static importJSON(t){return Cr().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 Cr(){return Ss(new xr)}function Sr(t){return t instanceof xr}class vr{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 kl(zl(Ol(this,\"next\")),zl(Ol(t,\"next\")))<0}getNode(){const e=Mo(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,fi()||(Oo()===o&&Eo(t),null!==i&&(i.setCachedNodes(null),i.dirty=!0)))}}function Tr(t,e,n){return new vr(t,e,n)}function kr(t,e){let n=e.__key,r=t.offset,i=\"element\";if(yr(e)){i=\"text\";const t=e.getTextContentSize();r>t&&(r=t)}else if(!Pi(e)){const t=e.getNextSibling();if(yr(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 Nr(t,e){if(Pi(e)){const n=e.getLastDescendant();Pi(n)||yr(n)?kr(t,n):kr(t,e)}else kr(t,e)}class br{_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(!Or(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 br(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(yr(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=Mo(t);null!==e&&n.push(e)}return fi()||(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(($r()||Vr())===this&&t[0]){const e=ul(t[0],\"next\");Al(vl(e,e))}for(const e of t)e.remove()}}function wr(t){return t instanceof Er}class Er{format;style;anchor;focus;_cachedNodes;dirty;constructor(t,e,n,r){this.anchor=t,this.focus=e,t._selection=this,e._selection=this,this._cachedNodes=null,this.format=n,this.style=r,this.dirty=!1}getCachedNodes(){return this._cachedNodes}setCachedNodes(t){this._cachedNodes=t}is(t){return!!wr(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(sl(n)){const{origin:t}=n;0===e.length?i.add(t):(o.add(t),e.push(t))}else{const{origin:t}=n;Pi(t)&&o.has(t)||e.push(t)}r&&e.push(r.caret.origin);if(ol(t.focus)&&Pi(t.focus.origin)&&null===t.focus.getNodeAtCaret())for(let n=gl(t.focus.origin,\"previous\");sl(n)&&i.has(n.origin)&&!n.origin.isEmpty()&&n.origin.is(e[e.length-1]);n=pl(n))i.delete(n.origin),e.pop();for(;e.length>1;){const t=e[e.length-1];if(!Pi(t)||o.has(t)||t.isEmpty()||i.has(t))break;e.pop()}if(0===e.length&&t.isCollapsed()){const n=zl(t.anchor),r=zl(t.anchor.getFlipped()),i=t=>rl(t)?t.origin:t.getNodeAtCaret(),o=i(n)||i(r)||(t.anchor.getNodeAtCaret()?n.origin:r.origin);e.push(o)}return e}(Wl(Dl(this),\"next\"));return fi()||(this._cachedNodes=e),e}setTextNodeRange(t,e,n,r){this.anchor.set(t.__key,e,\"text\"),this.focus.set(n.__key,r,\"text\")}getTextContent(){const t=this.getNodes();if(0===t.length)return\"\";const e=t[0],n=t[t.length-1],r=this.anchor,i=this.focus,o=r.isBefore(i),[s,l]=Ar(this);let c=\"\",a=!0;for(let u=0;u<t.length;u++){const f=t[u];if(Pi(f)&&!f.isInline())a||(c+=\"\\n\"),a=!f.isEmpty();else if(a=!1,yr(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!Li(f)&&!Zn(f)||f===n&&this.isCollapsed()||(c+=f.getTextContent())}return c}applyDOMRange(t){const e=_i(),n=e.getEditorState()._selection,r=zr(t.startContainer,t.startOffset,t.endContainer,t.endOffset,e,n);if(null===r)return;const[i,o]=r;this.anchor.set(i.key,i.offset,i.type,!0),this.focus.set(o.key,o.offset,o.type,!0),Ct(this)}clone(){const t=this.anchor,e=this.focus;return new Er(Tr(t.key,t.offset,t.type),Tr(e.key,e.offset,e.type),this.format,this.style)}toggleFormat(t){this.format=To(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=z[t];return 0!==(this.format&e)}insertRawText(t){const e=t.split(/(\\r?\\n|\\t)/),n=[],r=e.length;for(let t=0;t<r;t++){const r=e[t];\"\\n\"===r||\"\\r\\n\"===r?n.push(Qn()):\"\\t\"===r?n.push(Cr()):n.push(pr(r))}this.insertNodes(n)}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=pr();if(s.setFormat(n),s.setStyle(r),Yi(o))o.splice(0,0,[s]);else{const t=Ki(i)?Vi().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&&Ml(l,zl(Ol(l,\"next\")));const c=s.offset;let a=l.offset;const u=this.getNodes(),f=u.length;let d=u[0];yr(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&&(xo(d)||!d.canInsertTextAfter()||!g.canInsertTextAfter()&&null===d.getNextSibling())){let t=d.getNextSibling();if(yr(t)&&t.canInsertTextBefore()&&!xo(t)||(t=pr(),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&&(xo(d)||!d.canInsertTextBefore()||!g.canInsertTextBefore()&&null===d.getPreviousSibling())){let t=d.getPreviousSibling();if(yr(t)&&!xo(t)||(t=pr(),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=pr(d.getTextContent());t.setFormat(i),d.replace(t),d=t}else if(!this.isCollapsed()&&\"\"!==e){const t=_.getParent();if(!g.canInsertTextBefore()||!g.canInsertTextAfter()||Pi(t)&&(!t.canInsertTextBefore()||!t.canInsertTextAfter()))return this.insertText(\"\"),Kr(this.anchor,this.focus),void this.insertText(e)}if(1===f){if(mo(d)){const t=pr(e);return t.select(),void d.replace(t)}const t=d.getFormat(),n=d.getStyle();if(c!==a||t===i&&n===o){if(Sr(d)){const t=pr(e);return t.setFormat(i),t.setStyle(o),t.select(),void d.replace(t)}}else{if(\"\"!==d.getTextContent()){const t=pr(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))}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))}else{const t=new Set([...d.getParentKeys(),..._.getParentKeys()]),n=Pi(d)?d:d.getParentOrThrow();let r=Pi(_)?_:_.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(yr(_)&&!mo(_)&&a!==_.getTextContentSize()){if(_.isSegmented()){const t=pr(_.getTextContent());_.replace(t),_=t}Ki(l.getNode())||\"text\"!==l.type||(_=_.spliceText(0,a,\"\")),t.add(_.__key)}else{const t=_.getParentOrThrow();t.canBeEmpty()||1!==t.getChildrenSize()?_.remove():t.remove()}else t.add(_.__key);const 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)||Pi(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(mo(d))if(c===h)d.select();else{const t=pr(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));for(let e=1;e<f;e++){const n=u[e],r=n.__key;t.has(r)||n.remove()}}}removeText(){const t=$r()===this;Pl(this,Kl(Dl(this))),t&&$r()!==this&&zo(this)}formatText(t,e=null){if(this.isCollapsed())return this.toggleFormat(t),void Eo(null);const n=this.getNodes(),r=[];for(const t of n)yr(t)&&r.push(t);const i=e=>{n.forEach(n=>{if(Pi(n)){const r=n.getFormatFlags(t,e);n.setTextFormat(r)}})},o=r.length;if(0===o)return this.toggleFormat(t),Eo(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(xo(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||xo(d)||([,d]=d.splitText(h),h=0),d.setFormat(g);const m=p.getFormatFlags(t,g);y>0&&(y===p.getTextContentSize()||xo(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=$r();return wr(n)||t(134),n.insertNodes(e)}const n=(this.isBackward()?this.focus:this.anchor).getNode(),r=qs(n,Ls),i=e[e.length-1];if(Pi(r)&&\"__language\"in r){if(\"__language\"in e[0])this.insertText(e[0].getTextContent());else{const t=ni(this);r.splice(t,0,e),i.selectEnd()}return}if(!e.some(t=>(Pi(t)||Li(t))&&!t.isInline())){Pi(r)||t(211,n.constructor.name,n.getType());const o=ni(this);return r.splice(o,0,e),void i.selectEnd()}const o=function(t){const e=Vi();let n=null;for(let r=0;r<t.length;r++){const i=t[r],o=Zn(i);if(o||Li(i)&&i.isInline()||Pi(i)&&i.isInline()||yr(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=!Pi(r)||!r.isEmpty()?this.insertParagraph():null,a=l[l.length-1];let u=l[0];var f;Pi(f=u)&&Ls(f)&&!f.isEmpty()&&Pi(r)&&(!r.isEmpty()||r.canMergeWhenEmpty())&&(Pi(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=qs(s,Ls);c&&Pi(d)&&(c.canMergeWhenEmpty()||Ls(a))&&(d.append(...c.getChildren()),c.remove()),Pi(r)&&r.isEmpty()&&r.remove(),s.selectEnd();const h=Pi(r)?r.getLastChild():null;Zn(h)&&d!==r&&h.remove()}insertParagraph(){if(\"root\"===this.anchor.key){const t=Vi();return Io().splice(this.anchor.offset,0,[t]),t.select(),t}const e=ni(this),n=qs(this.anchor.getNode(),Ls);Pi(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=Qn();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]=Ar(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(yr(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(yr(n)&&(a===n.getTextContentSize()?t.shift():0!==a&&([,n]=n.splitText(a),t[0]=n,l.set(n.getKey(),0,\"text\"))),yr(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(ii(this,t,e,n))return;const r=\"move\"===t,i=_i(),o=bs(ps(i));if(!o)return;const s=i._blockCursorElement,l=i._rootElement,c=this.focus.getNode();if(null===l||null===s||!Pi(c)||c.isInline()||c.canBeEmpty()||Ns(s,i,l),this.dirty){let t=cs(i,this.anchor.key),e=cs(i,this.focus.key);\"text\"===this.anchor.type&&(t=vo(t)),\"text\"===this.focus.type&&(e=vo(e)),t&&e&&Xr(o,t,this.anchor.offset,e,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=Ki(n)?n:ms(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];gs(e,i)?r.push(e):s=!0}if(s&&r.length>0)if(e){const t=r[0];Pi(t)?t.selectStart():t.getParentOrThrow().selectStart()}else{const t=r[r.length-1];Pi(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&&ii(this,t,e,n,\"decorators\")}forwardDeletion(t,e,n){if(!n&&(\"element\"===t.type&&Pi(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(Pi(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=Cl(Ol(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(sl(e))if(e.origin.isInline());else{if(e.origin.isShadowRoot()){if(\"merge-block\"===t.type)break;if(Pi(r.anchor.origin)&&r.anchor.origin.isEmpty()){const t=zl(e);Pl(this,vl(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(ol(e)){if(Pi(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(Li(e.origin)){if(e.origin.isIsolated());else if(\"merge-next-block\"===t.type&&(e.origin.isKeyboardSelectable()||!e.origin.isInline())&&Pi(r.anchor.origin)&&r.anchor.origin.isEmpty()){r.anchor.origin.remove();const t=Jr();t.add(e.origin.getKey()),zo(t)}else e.origin.remove();return}break}}if(\"merge-block\"===t.type){const{caret:e,block:n}=t;return Pl(this,vl(!e.origin.isEmpty()&&n.isEmpty()?Fl(ul(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&&Pr(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 Fr(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 Fr(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!(Bo(t)||Dr(t))})(i.getTextContent().slice(l,c))&&(e?r.set(r.key,a,r.type):n.set(n.key,a,n.type))}}}(this,t)}}if(this.removeText(),t&&!e&&this.isCollapsed()&&\"element\"===this.anchor.type&&0===this.anchor.offset){const t=this.anchor.getNode();t.isEmpty()&&Ki(t.getParent())&&null===t.getPreviousSibling()&&Pr(this,t)}}deleteLine(t){this.isCollapsed()&&this.modify(\"extend\",t,\"lineboundary\"),this.isCollapsed()?this.deleteCharacter(t):this.removeText()}deleteWord(t){if(this.isCollapsed()){const e=this.anchor,n=e.getNode();if(this.forwardDeletion(e,n,t))return;this.modify(\"extend\",t,\"word\")}this.removeText()}isBackward(){return this.focus.isBefore(this.anchor)}getStartEndPoints(){return[this.anchor,this.focus]}}function Or(t){return t instanceof br}function Mr(t){const e=t.offset;if(\"text\"===t.type)return e;const n=t.getNode();return e===n.getChildrenSize()?n.getTextContent().length:0}function Ar(t){const e=t.getStartEndPoints();if(null===e)return[0,0];const[n,r]=e;return\"element\"===n.type&&\"element\"===r.type&&n.key===r.key&&n.offset===r.offset?[0,0]:[Mr(n),Mr(r)]}function Pr(t,e){for(let n=e;n;n=n.getParent()){if(Pi(n)){if(n.collapseAtStart(t))return!0;if(xs(n))break}if(n.getPreviousSibling())break}return!1}const Dr=(()=>{try{const t=new RegExp(\"\\\\p{Emoji}\",\"u\"),e=t.test.bind(t);if(e(\"❤️\")&&e(\"#️⃣\")&&e(\"👍\"))return e}catch(t){}return()=>!1})();function Fr(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 Lr(e,n,r,i){let o,s=n;if(Ms(e)){let l=!1;const c=e.childNodes,a=c.length,u=i._blockCursorElement;s===a&&(l=!0,s=a-1);let f=c[s],d=!1;if(f===u)f=c[s+1],d=!0;else if(null!==u){const t=u.parentNode;if(e===t){n>Array.prototype.indexOf.call(t.children,u)&&s--}}if(o=Ro(f),yr(o))s=dl(o,l?\"next\":\"previous\");else{let c=Ro(e);if(null===c)return null;if(Pi(c)){const a=i.getElementByKey(c.getKey());null===a&&t(214);const u=c.getDOMSlot(a);[c,s]=u.resolveChildIndex(c,a,e,n),Pi(c)||t(215),l&&s>=c.getChildrenSize()&&(s=Math.max(0,c.getChildrenSize()-1));let f=c.getChildAtIndex(s);if(Pi(f)&&function(t,e,n){const r=t.getParent();return null===n||null===r||!r.canBeEmpty()||r!==n.getNode()}(f,0,r)){const t=l?f.getLastDescendant():f.getFirstDescendant();null===t?c=f:(f=t,c=Pi(f)?f:f.getParentOrThrow()),s=0}yr(f)?(o=f,c=null,s=dl(f,l?\"next\":\"previous\")):f!==c&&l&&!d&&(Pi(c)||t(216),s=Math.min(c.getChildrenSize(),s+1))}else{const t=c.getIndexWithinParent();s=0===n&&Li(c)&&Ro(e)===c?t:t+1,c=c.getParentOrThrow()}if(Pi(c))return Tr(c.__key,s,\"element\")}}else o=Ro(e);return yr(o)?Tr(o.__key,dl(o,s,\"clamp\"),\"text\"):null}function Ir(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&&Pi(o)&&o.isInline()){const e=o.getPreviousSibling();yr(e)&&t.set(e.__key,e.getTextContent().length,\"text\")}}else Pi(r)&&!n&&r.isInline()?t.set(r.__key,r.getChildrenSize(),\"element\"):yr(r)&&t.set(r.__key,r.getTextContent().length,\"text\")}else if(r===i.getTextContent().length){const r=i.getNextSibling(),o=i.getParent();if(e&&Pi(r)&&r.isInline())t.set(r.__key,0,\"element\");else if((n||e)&&null===r&&Pi(o)&&o.isInline()&&!o.canInsertTextAfter()){const e=o.getNextSibling();yr(e)&&t.set(e.__key,0,\"text\")}}}function Kr(t,e,n){if(\"text\"===t.type&&\"text\"===e.type){const n=t.isBefore(e),r=t.is(e);Ir(t,n,r),Ir(e,!n,r),r&&e.set(t.key,t.offset,t.type)}}function zr(t,e,n,r,i,o){if(null===t||null===n||!ho(i,t,n))return null;const s=Lr(t,e,wr(o)?o.anchor:null,i);if(null===s)return null;const l=Lr(n,r,wr(o)?o.focus:null,i);if(null===l)return null;if(\"element\"===s.type&&\"element\"===l.type){const e=Ro(t),r=Ro(n);if(Li(e)&&Li(r))return null}return Kr(s,l),[s,l]}function Rr(t){return Pi(t)&&!t.isInline()}function Br(t,e,n,r,i,o){const s=gi(),l=new Er(Tr(t,e,i),Tr(n,r,o),0,\"\");return l.dirty=!0,s._selection=l,l}function Wr(){const t=Tr(\"root\",0,\"element\"),e=Tr(\"root\",0,\"element\");return new Er(t,e,0,\"\")}function Jr(){return new br(new Set)}function jr(t,e){return Ur(null,t,e,null)}function Ur(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=!Y&&(l||\"beforeinput\"===s||\"compositionstart\"===s||\"compositionend\"===s||\"click\"===s&&o&&3===o.detail||\"drop\"===s||void 0===s);let a,u,f,d;if(wr(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)&&wr(t)&&!ho(n,a,u))return t.clone();const h=zr(a,f,u,d,n,t);if(null===h)return null;const[g,_]=h;let p=0,y=\"\";if(wr(t)){const e=t.anchor;if(g.key===e.key)p=t.format,y=t.style;else{const t=g.getNode();yr(t)?(p=t.getFormat(),y=t.getStyle()):Pi(t)&&(p=t.getTextFormat(),y=t.getTextStyle())}}return new Er(g,_,p,y)}function $r(){return gi()._selection}function Vr(){return _i()._editorState._selection}function Yr(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\"),qr(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\")}}qr(t)}function qr(t){const e=t.anchor,n=e.offset,r=t.focus,i=r.offset,o=e.getNode(),s=r.getNode();if(t.isCollapsed()){if(!Pi(o))return;const t=o.getChildrenSize(),i=n>=t,s=i?o.getChildAtIndex(t-1):o.getChildAtIndex(n);if(yr(s)){let t=0;i&&(t=s.getTextContentSize()),e.set(s.__key,t,\"text\"),r.set(s.__key,t,\"text\")}return}if(Pi(o)){const t=o.getChildrenSize(),r=n>=t,i=r?o.getChildAtIndex(t-1):o.getChildAtIndex(n);if(yr(i)){let t=0;r&&(t=i.getTextContentSize()),e.set(i.__key,t,\"text\")}}if(Pi(s)){const t=s.getChildrenSize(),e=i>=t,n=e?s.getChildAtIndex(t-1):s.getChildAtIndex(i);if(yr(n)){let t=0;e&&(t=n.getTextContentSize()),r.set(n.__key,t,\"text\")}}}function Hr(t,e,n,r,i){let o=null,s=0,l=null;null!==r?(o=r.__key,yr(r)?(s=r.getTextContentSize(),l=\"text\"):Pi(r)&&(s=r.getChildrenSize(),l=\"element\")):null!==i&&(o=i.__key,yr(i)?l=\"text\":Pi(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 Gr(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 Xr(t,e,n,r,i){try{t.setBaseAndExtent(e,n,r,i)}catch(t){}}function Qr(t,e,n){const r=cs(t,e.getKey());if(Pi(e)){const t=e.getDOMSlot(r);return[t.element,n+t.getFirstChildOffset()]}return[r,n]}function Zr(t,e,n,r,i,s,l){const c=r.anchorNode,a=r.focusNode,u=r.anchorOffset,f=r.focusOffset,d=document.activeElement;if(i.has(jn)&&d!==s||null!==d&&fo(d))return;if(!wr(e))return void(null!==t&&ho(n,c,a)&&r.removeAllRanges());const h=e.anchor,g=e.focus,_=h.getNode(),p=g.getNode(),[y,m]=Qr(n,_,h.offset),[x,C]=Qr(n,p,g.offset),S=e.format,v=e.style,T=e.isCollapsed();let k=y,N=x,b=!1;var w,E,O,M,A;if((\"text\"===h.type?(k=vo(y),b=_.getFormat()!==S||_.getStyle()!==v):wr(t)&&\"text\"===t.anchor.type&&(b=!0),\"text\"===g.type&&(N=vo(x)),null!==k&&null!==N)&&(T&&(null===t||b||wr(t)&&(t.format!==S||t.style!==v))&&(w=S,E=v,O=m,M=h.key,A=performance.now(),gn=[w,E,O,M,A]),u!==m||f!==C||c!==k||a!==N||\"Range\"===r.type&&T||(null!==d&&s.contains(d)||i.has(Yn)||s.focus({preventScroll:!0}),\"element\"===h.type))){if(Xr(r,k,m,N,C),!o||!e.isCollapsed()||null===s||i.has(Yn)||null!==document.activeElement&&s.contains(document.activeElement)||s.focus({preventScroll:!0}),!i.has($n)&&e.isCollapsed()&&null!==s&&s===document.activeElement){const t=wr(e)&&\"element\"===e.anchor.type?k.childNodes[m]||null:r.rangeCount>0?r.getRangeAt(0):null;if(null!==t){let e;if(t instanceof Text){const n=document.createRange();n.selectNode(t),e=n.getBoundingClientRect()}else e=t.getBoundingClientRect();!function(t,e,n){const r=us(n),i=_s(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)l=0,c=ps(t).innerHeight;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=as(a)}}(n,e,s)}}ln=!0}}function ti(t){let e=$r()||Vr();null===e&&(e=Io().selectEnd()),e.insertNodes(t)}function ei(){const t=$r();return null===t?\"\":t.getTextContent()}function ni(e){let n=e;e.isCollapsed()||n.removeText();const r=$r();wr(r)&&(n=r),wr(n)||t(161);const i=n.anchor;let o=i.getNode(),s=i.offset;for(;!Ls(o);){const t=o;if([o,s]=ri(o,s),t.is(o))break}return s}function ri(t,e){const n=t.getParent();if(!n){const t=Vi();return Io().append(t),t.select(),[Io(),0]}if(yr(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(!Pi(t)||0===e)return[n,t.getIndexWithinParent()];const r=t.getChildAtIndex(e);if(r){const n=new Er(Tr(t.__key,e,\"element\"),Tr(t.__key,e,\"element\"),0,\"\"),i=t.insertNewAfter(n);i&&i.append(r,...r.getNextSiblings())}return[n,t.getIndexWithinParent()+1]}function ii(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=Ol(t.focus,n?\"previous\":\"next\"),s=\"lineboundary\"===r,l=\"move\"===e;let c=o,a=\"decorators-and-blocks\"===i;if(!Rl(c)){for(const t of c){a=!1;const{origin:e}=t;if(!Li(e)||e.isIsolated()||(c=t,!s||!e.isInline()))break}if(a)for(const t of Cl(o).iterNodeCarets(\"extend\"===e?\"shadowRoot\":\"root\")){if(sl(t))t.origin.isInline()||(c=t);else{if(Pi(t.origin))continue;Li(t.origin)&&!t.origin.isInline()&&(c=t)}break}}if(c===o)return!1;if(l&&!s&&Li(c.origin)&&c.origin.isKeyboardSelectable()){const t=Jr();return t.add(c.origin.getKey()),zo(t),!0}return c=zl(c),l&&Ml(t.anchor,c),Ml(t.focus,c),a||!s}let oi=null,si=null,li=!1,ci=!1,ai=0;const ui={characterData:!0,childList:!0,subtree:!0};function fi(){return li||null!==oi&&oi._readOnly}function di(){li&&t(13)}function hi(){ai>99&&t(14)}function gi(){return null===oi&&t(195,pi()),oi}function _i(){return null===si&&t(196,pi()),si}function pi(){let t=0;const e=new Set,n=no.version;if(\"undefined\"!=typeof window)for(const r of document.querySelectorAll(\"[contenteditable]\")){const i=po(r);if(go(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 yi(){return si}function mi(t,e,n){const r=e.__type,i=lo(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 xi(t,e){return void 0!==t&&t.__key!==e&&t.isAttached()}function Ci(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 Si(t){return vi(t,_i()._nodes)}function vi(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(Pi(s)&&Array.isArray(l))for(let t=0;t<l.length;t++){const e=vi(l[t],n);s.append(e)}return s}function Ti(t,e,n){const r=oi,i=li,o=si;oi=e,li=!0,si=t;try{return n()}finally{oi=r,li=i,si=o}}function ki(t,e){const n=t._pendingEditorState,r=t._rootElement,i=t._headless||null===r;if(null===n)return;const o=t._editorState,s=o._selection,l=n._selection,c=0!==t._dirtyType,a=oi,u=li,f=si,d=t._updating,h=t._observer;let g=null;if(t._pendingEditorState=null,t._editorState=n,!i&&c&&null!==h){si=t,oi=n,li=!1,t._updating=!0;try{const e=t._dirtyType,r=t._dirtyElements,i=t._dirtyLeaves;h.disconnect(),g=te(o,n,t,e,r,i)}catch(e){if(e instanceof Error&&t._onError(e),ci)throw e;return Zi(t,null,r,n),nt(t),t._dirtyType=2,ci=!0,ki(t,o),void(ci=!1)}finally{h.observe(r,ui),t._updating=d,oi=a,li=u,si=f}}n._readOnly||(n._readOnly=!0);const _=t._dirtyLeaves,p=t._dirtyElements,y=t._normalizedNodes,m=t._updateTags,x=t._deferred;c&&(t._dirtyType=0,t._cloneNotNeeded.clear(),t._dirtyLeaves=new Set,t._dirtyElements=new Map,t._normalizedNodes=new Set,t._updateTags=new Set),function(t,e){const n=t._decorators;let r=t._pendingDecorators||n;const i=e._nodeMap;let o;for(o in r)i.has(o)||(r===n&&(r=Fo(t)),delete r[o])}(t,n);const C=i?null:bs(ps(t));if(t._editable&&null!==C&&(c||null===l||l.dirty||!l.is(s))&&null!==r&&!m.has(Vn)){si=t,oi=n;try{if(null!==h&&h.disconnect(),c||null===l||l.dirty){const e=t._blockCursorElement;null!==e&&Ns(e,t,r),Zr(s,l,t,C,m,r)}!function(t,e,n){let r=t._blockCursorElement;if(wr(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()){ks(o.getChildAtIndex(s-1))&&(l=!0)}else{const e=o.getChildAtIndex(s);if(null!==e&&ks(e)){const n=e.getPreviousSibling();(null===n||ks(n))&&(l=!0,c=t.getElementByKey(e.__key))}}if(l){const n=t.getElementByKey(o.__key);return null===r&&(t._blockCursorElement=r=function(t){const e=t.theme,n=document.createElement(\"div\");n.contentEditable=\"false\",n.setAttribute(\"data-lexical-cursor\",\"true\");let r=e.blockCursor;if(void 0!==r){if(\"string\"==typeof r){const t=Ql(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&&Ns(r,t,e)}(t,r,l)}finally{null!==h&&h.observe(r,ui),si=f,oi=a}}null!==g&&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})}}}(t,g,m,_,o),wr(l)||null===l||null!==s&&s.is(l)||t.dispatchCommand(re,void 0);const S=t._pendingDecorators;null!==S&&(t._decorators=S,t._pendingDecorators=null,Ni(\"decorator\",t,!0,S)),function(t,e,n){const r=Lo(e),i=Lo(n);r!==i&&Ni(\"textcontent\",t,!0,i)}(t,e||o,n),Ni(\"update\",t,!0,{dirtyElements:p,dirtyLeaves:_,editorState:n,mutatedNodes:g,normalizedNodes:y,prevEditorState:e||o,tags:m}),function(t,e){if(t._deferred=[],0!==e.length){const n=t._updating;t._updating=!0;try{for(let t=0;t<e.length;t++)e[t]()}finally{t._updating=n}}}(t,x),function(t){const e=t._updates;if(0!==e.length){const n=e.shift();if(n){const[e,r]=n;wi(t,e,r)}}}(t)}function Ni(t,e,n,...r){const i=e._updating;e._updating=n;try{const n=Array.from(e._listeners[t]);for(let t=0;t<n.length;t++)n[t].apply(null,r)}finally{e._updating=i}}function bi(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),Ci(e,o.tag)),null==s?wi(e,r,o):r()}}return i}function wi(e,n,r){const i=e._updateTags;let o,s=!1,l=!1;void 0!==r&&(o=r.onUpdate,Ci(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=zi(a||c),u=!0),a._flushSync=l;const f=oi,d=li,h=si,g=e._updating;oi=a,li=!1,e._updating=!0,si=e;const _=e._headless||null===e.getRootElement();io(null);try{u&&(_?null!==c._selection&&(a._selection=c._selection.clone()):a._selection=function(t,e){const n=t.getEditorState()._selection,r=bs(ps(t));return wr(n)||null==n?Ur(n,r,t,e):n.clone()}(e,r&&r.event||null));const i=e._compositionKey;n(),s=bi(e,s),function(t,e){const n=e.getEditorState()._selection,r=t._selection;if(wr(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);yr(e)&&e.isAttached()&&e.isSimpleText()&&!e.isUnmergeable()&&xt(e)}}(a,e):function(t,e){const n=e._dirtyLeaves,r=e._dirtyElements,i=t._nodeMap,o=Oo(),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);yr(r)&&r.isAttached()&&r.isSimpleText()&&!r.isUnmergeable()&&xt(r),void 0!==r&&xi(r,o)&&mi(e,r,s),n.add(t)}if(l=e._dirtyLeaves,c=l.size,c>0){ai++;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&&xi(c,o)&&mi(e,c,s)}l=e._dirtyLeaves,c=l.size,a=e._dirtyElements,u=a.size,ai++}e._dirtyLeaves=n,e._dirtyElements=r}(a,e),bi(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()||(Pi(e)&&V(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(wr(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 Or(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 ki(e)}finally{oi=f,li=d,si=h,e._updating=g,ai=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,ki(e)):u&&ao(()=>{ki(e)}):(a._flushSync=!1,u&&(i.clear(),e._deferred=[],e._pendingEditorState=null))}function Ei(t,e,n){si===t&&void 0===n?e():wi(t,e,n)}class Oi{element;before;after;constructor(t,e,n){this.element=t,this.before=e||null,this.after=n||null}withBefore(t){return new Oi(this.element,t,this.after)}withAfter(t){return new Oi(this.element,this.before,t)}withElement(t){return this.element===t?this:new Oi(t,this.before,this.after)}insertChild(e){const n=this.before||this.getManagedLineBreak();return null!==n&&n.parentElement!==this.element&&t(222),this.element.insertBefore(e,n),this}removeChild(e){return e.parentElement!==this.element&&t(223),this.element.removeChild(e),this}replaceChild(e,n){return n.parentElement!==this.element&&t(224),this.element.replaceChild(e,n),this}getFirstChild(){const t=this.after?this.after.nextSibling:this.element.firstChild;return t===this.before||t===this.getManagedLineBreak()?null:t}getManagedLineBreak(){return this.element.__lexicalLineBreak||null}setManagedLineBreak(t){if(null===t)this.removeManagedLineBreak();else{const e=\"decorator\"===t&&(d||c||l);this.insertManagedLineBreak(e)}}removeManagedLineBreak(){const t=this.getManagedLineBreak();if(t){const e=this.element,n=\"IMG\"===t.nodeName?t.nextSibling:null;n&&e.removeChild(n),e.removeChild(t),e.__lexicalLineBreak=void 0}}insertManagedLineBreak(t){const e=this.getManagedLineBreak();if(e){if(t===(\"IMG\"===e.nodeName))return;this.removeManagedLineBreak()}const n=this.element,r=this.before,i=document.createElement(\"br\");if(n.insertBefore(i,r),t){const t=document.createElement(\"img\");t.setAttribute(\"data-lexical-linebreak\",\"true\"),t.style.cssText=\"display: inline !important; border: 0px !important; margin: 0px !important;\",t.alt=\"\",n.insertBefore(t,i),n.__lexicalLineBreak=t}else n.__lexicalLineBreak=i}getFirstChildOffset(){let t=0;for(let e=this.after;null!==e;e=e.previousSibling)t++;return t}resolveChildIndex(t,e,n,r){if(n===this.element){const e=this.getFirstChildOffset();return[t,Math.min(e+t.getChildrenSize(),Math.max(e,r))]}const i=Mi(e,n);i.push(r);const o=Mi(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 Mi(e,n){const r=[];let i=n;for(;i!==e&&null!==i;i=i.parentNode){let t=0;for(let e=i.previousSibling;null!==e;e=e.previousSibling)t++;r.push(t)}return i!==e&&t(225),r.reverse()}class Ai extends zn{__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=_i()._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(yr(e)&&t.push(e),Pi(e)){const n=e.getAllTextNodes();t.push(...n)}e=e.getNextSibling()}return t}getFirstDescendant(){let t=this.getFirstChild();for(;Pi(t);){const e=t.getFirstChild();if(null===e)break;t=e}return t}getLastDescendant(){let t=this.getLastChild();for(;Pi(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 Pi(t)&&t.getLastDescendant()||t||null}const r=e[t];return Pi(r)&&r.getFirstDescendant()||r||null}getFirstChild(){const t=this.getLatest().__first;return null===t?null:Mo(t)}getFirstChildOrThrow(){const e=this.getFirstChild();return null===e&&t(45,this.__key),e}getLastChild(){const t=this.getLatest().__last;return null===t?null:Mo(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(),Pi(i)&&r!==n-1&&!i.isInline()&&(t+=P)}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(),Pi(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=B[t];return 0!==(this.getFormat()&e)}return!1}hasTextFormat(t){const e=z[t];return 0!==(this.getTextFormat()&e)}getFormatFlags(t,e){return To(this.getLatest().__textFormat,t,e)}getTextStyle(){return this.getLatest().__textStyle}select(t,e){di();const n=$r();let r=t,i=e;const o=this.getChildrenSize();if(!this.canBeEmpty())if(0===t&&0===e){const t=this.getFirstChild();if(yr(t)||Pi(t))return t.select(0,0)}else if(!(void 0!==t&&t!==o||void 0!==e&&e!==o)){const t=this.getLastChild();if(yr(t)||Pi(t))return t.select()}void 0===r&&(r=o),void 0===i&&(i=o);const s=this.__key;return wr(n)?(n.anchor.set(s,r,\"element\"),n.focus.set(s,i,\"element\"),n.dirty=!0,n):Br(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?B[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){Kn(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;bo(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--,bo(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=$r();if(wr(t)){const e=new Set(c),n=new Set(l),{anchor:r,focus:i}=t;Di(r,e,n)&&Hr(r,r.getNode(),this,u,a),Di(i,e,n)&&Hr(i,i.getNode(),this,u,a),0!==f||this.canBeEmpty()||xs(this)||this.remove()}}return o}getDOMSlot(t){return new Oi(t)}exportDOM(t){const{element:e}=super.exportDOM(t);if(Ms(e)){const t=this.getIndent();t>0&&(e.style.paddingInlineStart=40*t+\"px\");const n=this.getDirection();n&&(e.dir=n)}return{element:e}}exportJSON(){const t={children:[],direction:this.getDirection(),format:this.getFormatType(),indent:this.getIndent(),...super.exportJSON()},e=this.getTextFormat(),n=this.getTextStyle();return 0===e&&\"\"===n||xs(this)||this.getChildren().some(yr)||(0!==e&&(t.textFormat=e),\"\"!==n&&(t.textStyle=n)),t}updateFromJSON(t){return super.updateFromJSON(t).setFormat(t.format).setIndent(t.indent).setDirection(t.direction).setTextFormat(t.textFormat||0).setTextStyle(t.textStyle||\"\")}insertNewAfter(t,e){return null}canIndent(){return!0}collapseAtStart(t){return!1}excludeFromCopy(t){return!1}canReplaceWith(t){return!0}canInsertAfter(t){return!0}canBeEmpty(){return!0}canInsertTextBefore(){return!0}canInsertTextAfter(){return!0}isInline(){return!1}isShadowRoot(){return!1}canMergeWith(t){return!1}extractWithChild(t,e,n){return!1}canMergeWhenEmpty(){return!1}reconcileObservedMutation(t,e){const n=this.getDOMSlot(t);let r=n.getFirstChild();for(let t=this.getFirstChild();t;t=t.getNextSibling()){const i=e.getElementByKey(t.getKey());null!==i&&(null==r?(n.insertChild(i),r=i):r!==i&&n.replaceChild(i,r),r=r.nextSibling)}}}function Pi(t){return t instanceof Ai}function Di(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 Fi extends zn{decorate(t,e){return null}isIsolated(){return!1}isInline(){return!0}isKeyboardSelectable(){return!0}}function Li(t){return t instanceof Fi}class Ii extends Ai{__cachedText;static getType(){return\"root\"}static clone(){return new Ii}constructor(){super(\"root\"),this.__cachedText=null}getTopLevelElementOrThrow(){t(51)}getTextContent(){const t=this.__cachedText;return!fi()&&0!==_i()._dirtyType||null===t?super.getTextContent():t}remove(){t(52)}replace(e){t(53)}insertBefore(e){t(54)}insertAfter(e){t(55)}updateDOM(t,e){return!1}splice(e,n,r){for(const e of r)Pi(e)||Li(e)||t(282);return super.splice(e,n,r)}static importJSON(t){return Io().updateFromJSON(t)}collapseAtStart(){return!0}}function Ki(t){return t instanceof Ii}function zi(t){return new Ji(new Map(t._nodeMap))}function Ri(){return new Ji(new Map([[\"root\",new Ii]]))}function Bi(e){const n=e.exportJSON(),r=e.constructor;if(n.type!==r.getType()&&t(130,r.name),Pi(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=Bi(o[t]);i.push(e)}}return n}function Wi(t){return t instanceof Ji}class Ji{_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 Ti(e&&e.editor||null,this,t)}clone(t){const e=new Ji(this._nodeMap,void 0===t?this._selection:t);return e._readOnly=!0,e}toJSON(){return Ti(null,this,()=>({root:Bi(Io())}))}}class ji extends Ai{static getType(){return\"artificial\"}createDOM(t){return document.createElement(\"div\")}}class Ui extends Ai{static getType(){return\"paragraph\"}static clone(t){return new Ui(t.__key)}createDOM(t){const e=document.createElement(\"p\"),n=es(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:$i,priority:0})}}exportDOM(t){const{element:e}=super.exportDOM(t);if(Ms(e)){this.isEmpty()&&e.append(document.createElement(\"br\"));const t=this.getFormatType();t&&(e.style.textAlign=t)}return{element:e}}static importJSON(t){return Vi().updateFromJSON(t)}exportJSON(){const t=super.exportJSON();if(void 0===t.textFormat||void 0===t.textStyle){const e=this.getChildren().find(yr);e?(t.textFormat=e.getFormat(),t.textStyle=e.getStyle()):(t.textFormat=this.getTextFormat(),t.textStyle=this.getTextStyle())}return t}insertNewAfter(t,e){const n=Vi();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||yr(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 $i(t){const e=Vi();if(t.style&&(e.setFormat(t.style.textAlign),Js(t,e)),\"\"===e.getFormatType()){const n=t.getAttribute(\"align\");n&&n&&n in B&&e.setFormat(n)}return{node:e}}function Vi(){return Ss(new Ui)}function Yi(t){return t instanceof Ui}const qi=0,Hi=1,Gi=2,Xi=3,Qi=4;function Zi(t,e,n,r){const i=t._keyToDOMMap;i.clear(),t._editorState=Ri(),t._pendingEditorState=r,t._compositionKey=null,t._dirtyType=0,t._cloneNotNeeded.clear(),t._dirtyLeaves=new Set,t._dirtyElements.clear(),t._normalizedNodes=new Set,t._updateTags=new Set,t._updates=[],t._blockCursorElement=null;const o=t._observer;null!==o&&(o.disconnect(),t._observer=null),null!==e&&(e.textContent=\"\"),null!==n&&(n.textContent=\"\",i.set(\"root\",n))}function to(t){const e=new Set,n=new Set;let r=t;for(;r;){const{ownNodeConfig:t}=Vs(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 zn&&t!==zn?t:void 0}}return e}function eo(t){const e=t||{},n=yi(),r=e.theme||{},i=void 0===t?n:e.parentEditor||null,o=e.disableEvents||!1,s=Ri(),l=e.namespace||(null!==i?i._config.namespace:Jo()),c=e.editorState,a=[Ii,lr,Gn,xr,Ui,ji,...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}Vs(e);const i=e.getType(),o=to(e);h.set(i,{exportDOM:f&&f.export?f.export.get(e):void 0,klass:e,replace:n,replaceWithKlass:r,sharedNodeState:ct(a[t]),transforms:o})}}const g=new no(s,i,h,{disableEvents:o,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(se,Sn,qi),t.registerCommand(le,vn,qi),t.registerCommand(ce,Tn,qi),t.registerCommand(ae,kn,qi),t.registerCommand(Se,bn,qi)}(g),g}class no{static version;_headless;_parentEditor;_rootElement;_editorState;_pendingEditorState;_compositionKey;_deferred;_keyToDOMMap;_updates;_updating;_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 Map,this._updates=[],this._updating=!1,this._listeners={decorator:new Set,editable:new Set,mutation:new Map,root:new Set,textcontent:new Set,update:new Set},this._commands=new Map,this._config=r,this._nodes=n,this._decorators={},this._pendingDecorators=null,this._dirtyType=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=Jo(),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){const e=this._listeners.update;return e.add(t),()=>{e.delete(t)}}registerEditableListener(t){const e=this._listeners.editable;return e.add(t),()=>{e.delete(t)}}registerDecoratorListener(t){const e=this._listeners.decorator;return e.add(t),()=>{e.delete(t)}}registerTextContentListener(t){const e=this._listeners.textcontent;return e.add(t),()=>{e.delete(t)}}registerRootListener(t){const e=this._listeners.root;return t(this._rootElement,null),e.add(t),()=>{t(null,this._rootElement),e.delete(t)}}registerCommand(e,n,r){void 0===r&&t(35);const i=this._commands;i.has(e)||i.set(e,[new Set,new Set,new Set,new Set,new Set]);const o=i.get(e);void 0===o&&t(36,String(e));const s=o[r];return s.add(n),()=>{s.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=Rs(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=Rs(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=Mo(e);t&&t.markDirty()}},null===t._pendingEditorState?{tag:Wn}: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 ls(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=es(this._config.theme,\"root\"),r=this._pendingEditorState||this._editorState;if(this._rootElement=t,Zi(this,e,t,r),null!==e&&(this._config.disableEvents||Dn(e),null!=n&&e.classList.remove(...n)),null!==t){const e=_s(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,nt(this),this._updateTags.add(Wn),ki(this),this._config.disableEvents||function(t,e){const n=t.ownerDocument;on.set(t,n);const r=sn.get(n)??0;r<1&&n.addEventListener(\"selectionchange\",On),sn.set(n,r+1),t.__lexicalEditor=e;const i=wn(t);for(let n=0;n<Ze.length;n++){const[r,o]=Ze[n],s=\"function\"==typeof o?t=>{An(t)||(Mn(t),(e.isEditable()||\"click\"===r)&&o(t,e))}:t=>{if(An(t))return;Mn(t);const n=e.isEditable();switch(r){case\"cut\":return n&&ls(e,je,t);case\"copy\":return ls(e,Je,t);case\"paste\":return n&&ls(e,ge,t);case\"dragstart\":return n&&ls(e,Re,t);case\"dragover\":return n&&ls(e,Be,t);case\"dragend\":return n&&ls(e,We,t);case\"focus\":return n&&ls(e,He,t);case\"blur\":return n&&ls(e,Ge,t);case\"drop\":return n&&ls(e,Ke,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(Wn),ki(this);Ni(\"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=zi(e),r._selection=e._selection?e._selection.clone():null),et(this);const i=this._pendingEditorState,o=this._updateTags,s=void 0!==n?n.tag:null;null===i||i.isEmpty()||(null!=s&&o.add(s),ki(this)),this._pendingEditorState=r,this._dirtyType=2,this._dirtyElements.set(\"root\",!1),this._compositionKey=null,null!=s&&o.add(s),this._updating||ki(this)}parseEditorState(t,e){return function(t,e,n){const r=Ri(),i=oi,o=li,s=si,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,oi=r,li=!1,si=e,io(null);try{const i=e._nodes;vi(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,oi=i,li=o,si=s}return r}(\"string\"==typeof t?JSON.parse(t):t,this,e)}read(t){return ki(this),this.getEditorState().read(t,{editor:this})}update(t,e){!function(t,e,n){t._updating?t._updates.push([e,n]):wi(t,e,n)}(this,t,e)}focus(t,e={}){const n=this._rootElement;null!==n&&(n.setAttribute(\"autocapitalize\",\"off\"),Ei(this,()=>{const r=$r(),i=Io();null!==r?r.dirty||zo(r.clone()):0!==i.getChildrenSize()&&(\"rootStart\"===e.defaultSelection?i.selectStart():i.selectEnd()),ds(\"focus\"),hs(()=>{n.removeAttribute(\"autocapitalize\"),t&&t()})}),null===this._pendingEditorState&&n.removeAttribute(\"autocapitalize\"))}blur(){const t=this._rootElement;null!==t&&t.blur();const e=bs(this._window);null!==e&&e.removeAllRanges()}isEditable(){return this._editable}setEditable(t){this._editable!==t&&(this._editable=t,Ni(\"editable\",this,!0,t))}toJSON(){return{editorState:this._editorState.toJSON()}}}no.version=\"0.41.0+prod.esm\";let ro=null;function io(t){ro=t}let oo=1;function so(){oo=1}function lo(e,n){const r=co(e,n);return void 0===r&&t(30,n),r}function co(t,e){return t._nodes.get(e)}const ao=\"function\"==typeof queueMicrotask?queueMicrotask:t=>{Promise.resolve().then(t)};function uo(t){return Li(Do(t))}function fo(t){const e=document.activeElement;if(!Ms(e))return!1;const n=e.nodeName;return Li(Do(t))&&(\"INPUT\"===n||\"TEXTAREA\"===n||\"true\"===e.contentEditable&&null==po(e))}function ho(t,e,n){const r=t.getRootElement();try{return null!==r&&r.contains(e)&&r.contains(n)&&null!==e&&!fo(e)&&_o(e)===t}catch(t){return!1}}function go(t){return t instanceof no}function _o(t){let e=t;for(;null!=e;){const t=po(e);if(go(t))return t;e=as(e)}return null}function po(t){return t?t.__lexicalEditor:null}function yo(t){return I.test(t)?\"rtl\":K.test(t)?\"ltr\":null}function mo(t){return Sr(t)||t.isToken()}function xo(t){return mo(t)||t.isSegmented()}function Co(t){return As(t)&&3===t.nodeType}function So(t){return As(t)&&9===t.nodeType}function vo(t){let e=t;for(;null!=e;){if(Co(e))return e;e=e.firstChild}return null}function To(t,e,n){const r=z[e];if(null!==n&&(t&r)===(n&r))return t;let i=t^r;return\"subscript\"===e?i&=~z.superscript:\"superscript\"===e?i&=~z.subscript:\"lowercase\"===e?(i&=~z.uppercase,i&=~z.capitalize):\"uppercase\"===e?(i&=~z.lowercase,i&=~z.capitalize):\"capitalize\"===e&&(i&=~z.lowercase,i&=~z.uppercase),i}function ko(t){return yr(t)||Zn(t)||Li(t)}function No(t,e){const n=function(){const t=ro;return ro=null,t}();if(null!=(e=e||n&&n.__key))return void(t.__key=e);di(),hi();const r=_i(),i=gi(),o=\"\"+oo++;i._nodeMap.set(o,t),Pi(t)?r._dirtyElements.set(o,!0):r._dirtyLeaves.add(o),r._cloneNotNeeded.add(o),r._dirtyType=1,t.__key=o}function bo(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 wo(e){hi(),Kn(e)&&t(323,e.__key,e.__type);const n=e.getLatest(),r=n.__parent,i=gi(),o=_i(),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;o._dirtyType=1,Pi(e)?l.set(c,!0):o._dirtyLeaves.add(c)}function Eo(t){di();const e=_i(),n=e._compositionKey;if(t!==n){if(e._compositionKey=t,null!==n){const t=Mo(n);null!==t&&t.getWritable()}if(null!==t){const e=Mo(t);null!==e&&e.getWritable()}}}function Oo(){if(fi())return null;return _i()._compositionKey}function Mo(t,e){const n=(e||gi())._nodeMap.get(t);return void 0===n?null:n}function Ao(t,e){const n=Po(t,_i());return void 0!==n?Mo(n,e):null}function Po(t,e){return t[`__lexicalKey_${e._key}`]}function Do(t,e){let n=t;for(;null!=n;){const t=Ao(n,e);if(null!==t)return t;n=as(n)}return null}function Fo(t){const e=t._decorators,n=Object.assign({},e);return t._pendingDecorators=n,n}function Lo(t){return t.read(()=>Io().getTextContent())}function Io(){return Ko(gi())}function Ko(t){return t._nodeMap.get(\"root\")}function zo(t){di();const e=gi();null!==t&&(t.dirty=!0,t.setCachedNodes(null)),e._selection=t}function Ro(t){const e=_i(),n=function(t,e){let n=t;for(;null!=n;){const t=Po(n,e);if(void 0!==t)return t;n=as(n)}return null}(t,e);if(null===n){return t===e.getRootElement()?Mo(\"root\"):null}return Mo(n)}function Bo(t){return/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g.test(t)}function Wo(t){const e=[];let n=t;for(;null!==n;)e.push(n),n=n._parentEditor;return e}function Jo(){return Math.random().toString(36).replace(/[^a-z]+/g,\"\").substring(0,5)}function jo(t){return Co(t)?t.nodeValue:null}function Uo(t,e,n){const r=bs(ps(e));if(null===r)return;const i=r.anchorNode;let{anchorOffset:o,focusOffset:s}=r;if(null!==i){let e=jo(i);const r=Do(i);if(null!==e&&yr(r)){if((e===A||e===D)&&n){const t=n.length;e=n,o=t,s=t}null!==e&&$o(r,e,o,s,t)}}}function $o(t,e,n,r,i){let o=t;if(o.isAttached()&&(i||!o.isDirty())){const s=o.isComposing();let a=e;if((s||i)&&(e.endsWith(A)&&(a=e.slice(0,-A.length)),i)){const t=D;let e;for(;-1!==(e=a.indexOf(t));)a=a.slice(0,e)+a.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||a!==u){if(\"\"===a){if(Eo(null),l||c||d)o.remove();else{const t=_i();setTimeout(()=>{t.update(()=>{o.isAttached()&&o.remove()})},20)}return}const e=o.getParent(),i=Vr(),u=o.getTextContentSize(),f=Oo(),h=o.getKey();if(o.isToken()||null!==f&&h===f&&!s||wr(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=$r();if(!wr(g)||null===n||null===r)return void Vo(o,a,g);if(g.setTextNodeRange(o,n,o,r),o.isSegmented()){const t=pr(o.getTextContent());o.replace(t),o=t}Vo(o,a,g)}}}function Vo(t,e,n){if(t.setTextContent(e),wr(n)){const e=t.getKey();for(const r of[\"anchor\",\"focus\"]){const i=n[r];\"text\"===i.type&&i.key===e&&(i.offset=dl(t,i.offset,\"clamp\"))}}}function Yo(t,e,n){const r=e[n]||!1;return\"any\"===r||r===t[n]}function qo(t,e){return Yo(t,e,\"altKey\")&&Yo(t,e,\"ctrlKey\")&&Yo(t,e,\"shiftKey\")&&Yo(t,e,\"metaKey\")}function Ho(t,e,n){if(!qo(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;const r=\"Key\"+e.toUpperCase();return t.code===r}const Go={ctrlKey:!i,metaKey:i},Xo={altKey:i,ctrlKey:!i};function Qo(t){return\"Backspace\"===t.key}function Zo(t){return Ho(t,\"a\",Go)}function ts(t){const e=Io();if(wr(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\"),Ct(t),t}{const t=e.select(0,e.getChildrenSize());return zo(Ct(t)),t}}function es(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=Ql(i);return n[e]=t,t}return i}function ns(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 rs(t){const e=t.getType(),n=gi();if(n._readOnly){const t=Rs(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 is(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 os(t,e){const n=t.offset;if(\"element\"===t.type){return is(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?is(r.getParentOrThrow(),e,r.getIndexWithinParent()+(e?0:1)):t}}return null}function ss(t){const e=ps(t).event,n=e&&e.inputType;return\"insertFromPaste\"===n||\"insertFromPasteAsQuotation\"===n}function ls(t,e,n){return function(t,e,n){const r=Wo(t);for(let i=4;i>=0;i--)for(let o=0;o<r.length;o++){const s=r[o],l=s._commands.get(e);if(void 0!==l){const e=l[i];if(void 0!==e){const r=Array.from(e),i=r.length;let o=!1;if(Ei(s,()=>{for(let e=0;e<i;e++)if(r[e](n,t))return void(o=!0)}),o)return o}}}return!1}(t,e,n)}function cs(e,n){const r=e._keyToDOMMap.get(n);return void 0===r&&t(75,n),r}function as(t){const e=t.assignedSlot||t.parentElement;return Ps(e)?e.host:e}function us(t){return So(t)?t:Ms(t)?t.ownerDocument:null}function fs(t){return _i()._updateTags.has(t)}function ds(t){di();_i()._updateTags.add(t)}function hs(t){di();_i()._deferred.push(t)}function gs(t,e){let n=t.getParent();for(;null!==n;){if(n.is(e))return!0;n=n.getParent()}return!1}function _s(t){const e=us(t);return e?e.defaultView:null}function ps(e){const n=e._window;return null===n&&t(78),n}function ys(t){return Pi(t)&&t.isInline()||Li(t)&&t.isInline()}function ms(t){let e=t.getParentOrThrow();for(;null!==e;){if(xs(e))return e;e=e.getParentOrThrow()}return e}function xs(t){return Ki(t)||Pi(t)&&t.isShadowRoot()}function Cs(t){const e=t.constructor.clone(t);return No(e,null),e.afterCloneFrom(t),e}function Ss(e){const n=_i(),r=e.getType(),i=co(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 vs(e,n){!Ki(e.getParent())||Pi(n)||Li(n)||t(99)}function Ts(e){const n=Mo(e);return null===n&&t(63,e),n}function ks(t){return(Li(t)||Pi(t)&&!t.canBeEmpty())&&!t.isInline()}function Ns(t,e,n){n.style.removeProperty(\"caret-color\"),e._blockCursorElement=null;const r=t.parentElement;null!==r&&r.removeChild(t)}function bs(t){return n?(t||window).getSelection():null}function ws(t){const e=_s(t);return e?e.getSelection():null}function Es(e,n){let r=e.getChildAtIndex(n);null==r&&(r=e),xs(e)&&t(102);const i=e=>{const n=e.getParentOrThrow(),o=xs(n),s=e!==r||o?Cs(e):e;if(o)return Pi(e)&&Pi(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 Os(t){return Ms(t)&&\"A\"===t.tagName}function Ms(t){return As(t)&&1===t.nodeType}function As(t){return\"object\"==typeof t&&null!==t&&\"nodeType\"in t&&\"number\"==typeof t.nodeType}function Ps(t){return As(t)&&11===t.nodeType}function Ds(t){const e=new RegExp(/^(a|abbr|acronym|b|cite|code|del|em|i|ins|kbd|label|mark|output|q|ruby|s|samp|span|strong|sub|sup|time|u|tt|var|#text)$/,\"i\");return null!==t.nodeName.match(e)}function Fs(t){const e=new RegExp(/^(address|article|aside|blockquote|canvas|dd|div|dl|dt|fieldset|figcaption|figure|footer|form|h1|h2|h3|h4|h5|h6|header|hr|li|main|nav|noscript|ol|p|pre|section|table|td|tfoot|ul|video)$/,\"i\");return null!==t.nodeName.match(e)}function Ls(t){if(Li(t)&&!t.isInline())return!0;if(!Pi(t)||xs(t))return!1;const e=t.getFirstChild(),n=null===e||Zn(e)||yr(e)||e.isInline();return!t.isInline()&&!1!==t.canBeEmpty()&&n}function Is(){return _i()}const Ks=new WeakMap,zs=new Map;function Rs(e){if(!e._readOnly&&e.isEmpty())return zs;e._readOnly||t(192);let n=Ks.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),Ks.set(e,n)),n}function Bs(t){const e=t.constructor.clone(t);return e.afterCloneFrom(t),e}function Ws(t){return(e=Bs(t))[In]=!0,e;var e}function Js(t,e){const n=parseInt(t.style.paddingInlineStart,10)||0,r=Math.round(n/40);e.setIndent(r)}function js(t){t.__lexicalUnmanaged=!0}function Us(t){return!0===t.__lexicalUnmanaged}function $s(t,e){return function(t,e){return Object.prototype.hasOwnProperty.call(t,e)}(t,e)&&t[e]!==zn[e]}function Vs(e){const n=$ in e.prototype?e.prototype[$]():void 0,r=function(e){if(!(e===zn||e.prototype instanceof zn)){let n=\"<unknown>\",r=\"<unknown>\";try{n=e.getType()}catch(t){}try{no.version&&(r=JSON.parse(no.version))}catch(t){}t(290,e.name,n,r)}return e===Fi||e===Ai||e===zn}(e),i=!r&&$s(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&&($s(e,\"getType\")||(e.getType=()=>s),$s(e,\"clone\")||(e.clone=t=>(io(t),new e)),$s(e,\"importJSON\")||(e.importJSON=o&&o.$importJSON||(t=>(new e).updateFromJSON(t))),!$s(e,\"importDOM\")&&o)){const{importDOM:t}=o;t&&(e.importDOM=()=>t)}return{ownNodeConfig:o,ownNodeType:s}}function Ys(t){const e=Is();di();return new(e.resolveRegisteredNodeAfterReplacements(e.getRegisteredNode(t)).klass)}const qs=(t,e)=>{let n=t;for(;null!=n&&!Ki(n);){if(e(n))return n;n=n.getParent()}return null},Hs={next:\"previous\",previous:\"next\"};class Gs{origin;constructor(t){this.origin=t}[Symbol.iterator](){return Tl({hasNext:ol,initial:this.getAdjacentCaret(),map:t=>t,step:t=>t.getAdjacentCaret()})}getAdjacentCaret(){return ul(this.getNodeAtCaret(),this.direction)}getSiblingCaret(){return ul(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=ul(e,this.direction)}for(const t of l.values())t.remove();return this}}class Xs extends Gs{type=\"child\";getLatest(){const t=this.origin.getLatest();return t===this.origin?this:gl(t,this.direction)}getParentCaret(t=\"root\"){return ul(tl(this.getParentAtCaret(),t),this.direction)}getFlipped(){const t=Zs(this.direction);return ul(this.getNodeAtCaret(),t)||gl(this.origin,t)}getParentAtCaret(){return this.origin}getChildCaret(){return this}isSameNodeCaret(t){return t instanceof Xs&&this.direction===t.direction&&this.origin.is(t.origin)}isSamePointCaret(t){return this.isSameNodeCaret(t)}}const Qs={root:Ki,shadowRoot:xs};function Zs(t){return Hs[t]}function tl(t,e=\"root\"){return Qs[e](t)?null:t}class el extends Gs{type=\"sibling\";getLatest(){const t=this.origin.getLatest();return t===this.origin?this:ul(t,this.direction)}getSiblingCaret(){return this}getParentAtCaret(){return this.origin.getParent()}getChildCaret(){return Pi(this.origin)?gl(this.origin,this.direction):null}getParentCaret(t=\"root\"){return ul(tl(this.getParentAtCaret(),t),this.direction)}getFlipped(){const t=Zs(this.direction);return ul(this.getNodeAtCaret(),t)||gl(this.origin.getParentOrThrow(),t)}isSamePointCaret(t){return t instanceof el&&this.direction===t.direction&&this.origin.is(t.origin)}isSameNodeCaret(t){return(t instanceof el||t instanceof nl)&&this.direction===t.direction&&this.origin.is(t.origin)}}class nl extends Gs{type=\"text\";offset;constructor(t,e){super(t),this.offset=e}getLatest(){const t=this.origin.getLatest();return t===this.origin?this:fl(t,this.direction,this.offset)}getParentAtCaret(){return this.origin.getParent()}getChildCaret(){return null}getParentCaret(t=\"root\"){return ul(tl(this.getParentAtCaret(),t),this.direction)}getFlipped(){return fl(this.origin,Zs(this.direction),this.offset)}isSamePointCaret(t){return t instanceof nl&&this.direction===t.direction&&this.origin.is(t.origin)&&this.offset===t.offset}isSameNodeCaret(t){return(t instanceof el||t instanceof nl)&&this.direction===t.direction&&this.origin.is(t.origin)}getSiblingCaret(){return ul(this.origin,this.direction)}}function rl(t){return t instanceof nl}function il(t){return t instanceof Gs}function ol(t){return t instanceof el}function sl(t){return t instanceof Xs}const ll={next:class extends nl{direction=\"next\";getNodeAtCaret(){return this.origin.getNextSibling()}insert(t){return this.origin.insertAfter(t),this}},previous:class extends nl{direction=\"previous\";getNodeAtCaret(){return this.origin.getPreviousSibling()}insert(t){return this.origin.insertBefore(t),this}}},cl={next:class extends el{direction=\"next\";getNodeAtCaret(){return this.origin.getNextSibling()}insert(t){return this.origin.insertAfter(t),this}},previous:class extends el{direction=\"previous\";getNodeAtCaret(){return this.origin.getPreviousSibling()}insert(t){return this.origin.insertBefore(t),this}}},al={next:class extends Xs{direction=\"next\";getNodeAtCaret(){return this.origin.getFirstChild()}insert(t){return this.origin.splice(0,0,[t]),this}},previous:class extends Xs{direction=\"previous\";getNodeAtCaret(){return this.origin.getLastChild()}insert(t){return this.origin.splice(this.origin.getChildrenSize(),0,[t]),this}}};function ul(t,e){return t?new cl[e](t):null}function fl(t,e,n){return t?new ll[e](t,dl(t,n)):null}function dl(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 hl(t,e){return new ml(t,e)}function gl(t,e){return Pi(t)?new al[e](t):null}function _l(t){return t&&t.getChildCaret()||t}function pl(t){return t&&_l(t.getAdjacentCaret())}class yl{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 yl(t,e,this.direction)}isCollapsed(){return this.anchor.isSamePointCaret(this.focus)}getTextSlices(){const t=t=>{const e=this[t].getLatest();return rl(e)?function(t,e){const{direction:n,origin:r}=t,i=dl(r,\"focus\"===e?Zs(n):n);return hl(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[hl(t,r.offset-t.offset),null]}return[e,n]}iterNodeCarets(t=\"root\"){const e=rl(this.anchor)?this.anchor.getSiblingCaret():this.anchor.getLatest(),n=this.focus.getLatest(),r=rl(n),i=e=>e.isSameNodeCaret(n)?null:pl(e)||e.getParentCaret(t);return Tl({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 ml{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 fl(t.setTextContent(i.slice(0,n)+i.slice(r)),e,n)}}function xl(t){return t instanceof ml}function Cl(t){return vl(t,ul(Io(),t.direction))}function Sl(t){return vl(t,t)}function vl(e,n){return e.direction!==n.direction&&t(265),new yl(e,n,e.direction)}function Tl(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 kl(e,n){const r=El(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 Nl(r)}}function Nl(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 bl(t,e){return e.is(t)}function wl(t){return Pi(t)?[t.getLatest(),null]:[t.getParent(),t.getLatest()]}function El(e,n){if(e.is(n))return{commonAncestor:e,type:\"same\"};const r=new Map;for(let[t,n]=wl(e);t;n=t,t=t.getParent())r.set(t,n);for(let[i,o]=wl(n);i;o=i,i=i.getParent()){const s=r.get(i);if(void 0!==s)return null===s?(bl(e,i)||t(276),{commonAncestor:i,type:\"ancestor\"}):null===o?(bl(n,i)||t(277),{commonAncestor:i,type:\"descendant\"}):((Pi(s)||bl(e,s))&&(Pi(o)||bl(n,o))&&i.is(s.getParent())&&i.is(o.getParent())||t(278),{a:s,b:o,commonAncestor:i,type:\"branch\"})}return null}function Ol(e,n){const{type:r,key:i,offset:o}=e,s=Ts(e.key);return\"text\"===r?(yr(s)||t(266,s.getType(),i),fl(s,n,o)):(Pi(s)||t(267,s.getType(),i),Jl(s,e.offset,n))}function Ml(e,n){const{origin:r,direction:i}=n,o=\"next\"===i;rl(n)?e.set(r.getKey(),n.offset,\"text\"):ol(n)?yr(r)?e.set(r.getKey(),dl(r,i),\"text\"):e.set(r.getParentOrThrow().getKey(),r.getIndexWithinParent()+(o?1:0),\"element\"):(sl(n)&&Pi(r)||t(268),e.set(r.getKey(),o?0:r.getChildrenSize(),\"element\"))}function Al(t){const e=$r(),n=wr(e)?e:Wr();return Pl(n,t),zo(n),n}function Pl(t,e){Ml(t.anchor,e.anchor),Ml(t.focus,e.focus)}function Dl(t){const{anchor:e,focus:n}=t,r=Ol(e,\"next\"),i=Ol(n,\"next\"),o=kl(r,i)<=0?\"next\":\"previous\";return vl(Bl(r,o),Bl(i,o))}function Fl(t){const{direction:e,origin:n}=t,r=ul(n,Zs(e)).getNodeAtCaret();return r?ul(r,e):gl(n.getParentOrThrow(),e)}function Ll(t,e=\"root\"){const n=[t];for(let r=sl(t)?t.getParentCaret(e):t.getSiblingCaret();null!==r;r=r.getParentCaret(e))n.push(Fl(r));return n}function Il(t){return!!t&&t.origin.isAttached()}function Kl(e,n=\"removeEmptySlices\"){if(e.isCollapsed())return e;const r=\"root\",i=\"next\";let o=n;const s=Wl(e,i),l=Ll(s.anchor,r),c=Ll(s.focus.getFlipped(),r),a=new Set,u=[];for(const t of s.iterNodeCarets(r))if(sl(t))a.add(t.origin.getKey());else if(ol(t)){const{origin:e}=t;Pi(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=Fl(ul(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=pr(t.getTextContent()).setStyle(t.getStyle()).setFormat(t.getFormat());r.replaceOrInsert(n),e=fl(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(Il(t)){f=zl(t);break}for(const t of c)if(Il(t)){d=zl(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(xs(i))return;!n&&e(i)&&(n=i)}return n},u=a(o,Ls),f=u&&a(s,t=>n.has(t.getKey())&&Ls(t));return u&&f?[u,f]:null}(f,d,a);if(h){const[t,e]=h;gl(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(Il);if(g){return Sl(Bl(zl(g),e.direction))}t(269,JSON.stringify(l.map(t=>t.origin.__key)))}function zl(t){const e=function(t){let e=t;for(;sl(e);){const t=pl(e);if(!sl(t))break;e=t}return e}(t.getLatest()),{direction:n}=e;if(yr(e.origin))return rl(e)?e:fl(e.origin,n,n);const r=e.getAdjacentCaret();return ol(r)&&yr(r.origin)?fl(r.origin,n,Zs(n)):e}function Rl(t){return rl(t)&&t.offset!==dl(t.origin,t.direction)}function Bl(t,e){return t.direction===e?t:t.getFlipped()}function Wl(t,e){return t.direction===e?t:vl(Bl(t.focus,e),Bl(t.anchor,e))}function Jl(t,e,n){let r=gl(t,\"next\");for(let t=0;t<e;t++){const t=r.getAdjacentCaret();if(null===t)break;r=t}return Bl(r,n)}function jl(t,e=\"root\"){let n=0,r=t,i=pl(r);for(;null===i;){if(n--,i=r.getParentCaret(e),!i)return null;r=i,i=pl(r)}return i&&[i,n]}function Ul(e){const{origin:n,offset:r,direction:i}=e;if(r===dl(n,i))return e.getSiblingCaret();if(r===dl(n,Zs(i)))return Fl(e.getSiblingCaret());const[o]=n.splitText(r);return yr(o)||t(281),Bl(ul(o,\"next\"),i)}function $l(t,e){return!0}function Vl(t,{$copyElementNode:e=Cs,$splitTextPointCaretNext:n=Ul,rootMode:r=\"shadowRoot\",$shouldSplit:i=$l}={}){if(rl(t))return n(t);const o=t.getParentCaret(r);if(o){const{origin:n}=o;if(sl(t)&&(!n.canBeEmpty()||!i(n,\"first\")))return Fl(o);const r=function(t){const e=[];for(let n=t.getAdjacentCaret();n;n=n.getAdjacentCaret())e.push(n.origin);return e}(t);(r.length>0||n.canBeEmpty()&&i(n,\"last\"))&&o.insert(e(n).splice(0,0,r))}return o}function Yl(t){return t}function ql(...t){return t}function Hl(t,e){return[t,e]}function Gl(t){return t}function Xl(t,e){if(!e||t===e)return t;for(const n in e)if(t[n]!==e[n])return{...t,...e};return t}function Ql(...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 Zl(t,...e){const n=Ql(...e);n.length>0&&t.classList.add(...n)}function tc(t,...e){const n=Ql(...e);n.length>0&&t.classList.remove(...n)}function ec(...t){return()=>{for(let e=t.length-1;e>=0;e--)t[e]();t.length=0}}export{ds as $addUpdateTag,Ss as $applyNodeReplacement,Ol as $caretFromPoint,Dl as $caretRangeFromSelection,Bs as $cloneWithProperties,Ws as $cloneWithPropertiesEphemeral,kl as $comparePointCaretNext,Cs as $copyNode,Ys as $create,Qn as $createLineBreakNode,Jr as $createNodeSelection,Vi as $createParagraphNode,Tr as $createPoint,Wr as $createRangeSelection,jr as $createRangeSelectionFromDom,Cr as $createTabNode,pr as $createTextNode,Cl as $extendCaretToRange,qs as $findMatchingParent,pl as $getAdjacentChildCaret,os as $getAdjacentNode,jl as $getAdjacentSiblingOrParentSiblingCaret,Bl as $getCaretInDirection,vl as $getCaretRange,Wl as $getCaretRangeInDirection,Ar as $getCharacterOffsets,gl as $getChildCaret,Jl as $getChildCaretAtIndex,_l as $getChildCaretOrSelf,Sl as $getCollapsedCaretRange,El as $getCommonAncestor,Nl as $getCommonAncestorResultBranchOrder,Is as $getEditor,Do as $getNearestNodeFromDOMNode,ms as $getNearestRootOrShadowRoot,Mo as $getNodeByKey,Ts as $getNodeByKeyOrThrow,Ao as $getNodeFromDOMNode,Vr as $getPreviousSelection,Io as $getRoot,$r as $getSelection,ul as $getSiblingCaret,ot as $getState,st as $getStateChange,ei as $getTextContent,dl as $getTextNodeOffset,fl as $getTextPointCaret,hl as $getTextPointCaretSlice,ut as $getWritableNodeState,gs as $hasAncestor,fs as $hasUpdateTag,ti as $insertNodes,Rr as $isBlockElementNode,sl as $isChildCaret,Li as $isDecoratorNode,Wi as $isEditorState,Pi as $isElementNode,Rl as $isExtendableTextPointCaret,ys as $isInlineElementOrDecoratorNode,ko as $isLeafNode,Zn as $isLineBreakNode,il as $isNodeCaret,Or as $isNodeSelection,Yi as $isParagraphNode,wr as $isRangeSelection,Ki as $isRootNode,xs as $isRootOrShadowRoot,ol as $isSiblingCaret,Sr as $isTabNode,yr as $isTextNode,rl as $isTextPointCaret,xl as $isTextPointCaretSlice,xo as $isTokenOrSegmented,mo as $isTokenOrTab,rs as $nodesOfType,zl as $normalizeCaret,Ct as $normalizeSelection__EXPERIMENTAL,hs as $onUpdate,Si as $parseSerializedNode,Kl as $removeTextFromCaretRange,Fl as $rewindSiblingCaret,ts as $selectAll,Eo as $setCompositionKey,Ml as $setPointFromCaret,zo as $setSelection,Al as $setSelectionFromCaretRange,lt as $setState,Vl as $splitAtPointCaretNext,Es as $splitNode,Pl as $updateRangeSelectionFromCaretRange,ji as ArtificialNode__DO_NOT_USE,se as BEFORE_INPUT_COMMAND,Ge as BLUR_COMMAND,Ye as CAN_REDO_COMMAND,qe as CAN_UNDO_COMMAND,$e as CLEAR_EDITOR_COMMAND,Ve as CLEAR_HISTORY_COMMAND,oe as CLICK_COMMAND,jn as COLLABORATION_TAG,Qi as COMMAND_PRIORITY_CRITICAL,qi as COMMAND_PRIORITY_EDITOR,Xi as COMMAND_PRIORITY_HIGH,Hi as COMMAND_PRIORITY_LOW,Gi as COMMAND_PRIORITY_NORMAL,ae as COMPOSITION_END_COMMAND,Hn as COMPOSITION_END_TAG,ce as COMPOSITION_START_COMMAND,qn as COMPOSITION_START_TAG,he as CONTROLLED_TEXT_INSERTION_COMMAND,Je as COPY_COMMAND,je as CUT_COMMAND,ue as DELETE_CHARACTER_COMMAND,ye as DELETE_LINE_COMMAND,pe as DELETE_WORD_COMMAND,We as DRAGEND_COMMAND,Be as DRAGOVER_COMMAND,Re as DRAGSTART_COMMAND,Ke as DROP_COMMAND,Fi as DecoratorNode,Ai as ElementNode,He as FOCUS_COMMAND,ze as FORMAT_ELEMENT_COMMAND,me as FORMAT_TEXT_COMMAND,Rn as HISTORIC_TAG,Wn as HISTORY_MERGE_TAG,Bn as HISTORY_PUSH_TAG,Le as INDENT_CONTENT_COMMAND,le as INPUT_COMMAND,fe as INSERT_LINE_BREAK_COMMAND,de as INSERT_PARAGRAPH_COMMAND,Fe as INSERT_TAB_COMMAND,Ls as INTERNAL_$isBlock,k as IS_ALL_FORMATTING,p as IS_BOLD,C as IS_CODE,T as IS_HIGHLIGHT,y as IS_ITALIC,m as IS_STRIKETHROUGH,S as IS_SUBSCRIPT,v as IS_SUPERSCRIPT,x as IS_UNDERLINE,we as KEY_ARROW_DOWN_COMMAND,ke as KEY_ARROW_LEFT_COMMAND,ve as KEY_ARROW_RIGHT_COMMAND,be as KEY_ARROW_UP_COMMAND,Me as KEY_BACKSPACE_COMMAND,Pe as KEY_DELETE_COMMAND,Se as KEY_DOWN_COMMAND,Ee as KEY_ENTER_COMMAND,Ae as KEY_ESCAPE_COMMAND,Xe as KEY_MODIFIER_COMMAND,Oe as KEY_SPACE_COMMAND,De as KEY_TAB_COMMAND,Gn as LineBreakNode,Te as MOVE_TO_END,Ne as MOVE_TO_START,U as NODE_STATE_KEY,Ie as OUTDENT_CONTENT_COMMAND,ge as PASTE_COMMAND,Jn as PASTE_TAG,Ui as ParagraphNode,Ce as REDO_COMMAND,_e as REMOVE_TEXT_COMMAND,Ii as RootNode,re as SELECTION_CHANGE_COMMAND,ie as SELECTION_INSERT_CLIPBOARD_NODES_COMMAND,Ue as SELECT_ALL_COMMAND,Un as SKIP_COLLAB_TAG,Vn as SKIP_DOM_SELECTION_TAG,$n as SKIP_SCROLL_INTO_VIEW_TAG,Yn as SKIP_SELECTION_FOCUS_TAG,z as TEXT_TYPE_TO_FORMAT,xr as TabNode,lr as TextNode,xe as UNDO_COMMAND,Zl as addClassNamesToElement,Ln as buildImportMap,ql as configExtension,ne as createCommand,eo as createEditor,ct as createSharedNodeState,it as createState,Hl as declarePeerDependency,Yl as defineExtension,Zs as flipDirection,us as getDOMOwnerDocument,bs as getDOMSelection,ws as getDOMSelectionFromTarget,vo as getDOMTextNode,po as getEditorPropertyFromDOMNode,_o as getNearestEditorFromDOMNode,co as getRegisteredNode,lo as getRegisteredNodeOrThrow,Vs as getStaticNodeConfig,yo as getTextDirection,to as getTransformSetFromKlass,Fs as isBlockDomNode,fi as isCurrentlyReadOnlyMode,So as isDOMDocumentNode,As as isDOMNode,Co as isDOMTextNode,Us as isDOMUnmanaged,Ps as isDocumentFragment,Ho as isExactShortcutMatch,Os as isHTMLAnchorElement,Ms as isHTMLElement,Ds as isInlineDomNode,go as isLexicalEditor,qo as isModifierMatch,fo as isSelectionCapturedInDecoratorInput,ho as isSelectionWithinEditor,Tl as makeStepwiseIterator,ec as mergeRegister,Ql as normalizeClassNames,tc as removeClassNamesFromElement,bo as removeFromParent,so as resetRandomKey,Gl as safeCast,js as setDOMUnmanaged,Js as setNodeIndentFromDOM,Xl as shallowMergeConfig,To as toggleTextFormatType};\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,$isElementNode as o,$getNodeByKey as l,$getPreviousSelection as r,$createTextNode as s,$isRangeSelection as i,$getSelection as c,$caretRangeFromSelection as f,$isTokenOrSegmented as u,$getCharacterOffsets as g,$cloneWithPropertiesEphemeral as a,$createRangeSelection as d,$findMatchingParent as p,INTERNAL_$isBlock as h,$setSelection as y,$caretFromPoint as m,$isExtendableTextPointCaret as S,$extendCaretToRange as x,$isChildCaret as T,$isDecoratorNode as w,$isRootOrShadowRoot as N,$hasAncestor as v,$isLeafNode as C}from\"lexical\";export{$cloneWithProperties,$selectAll}from\"lexical\";function K(e,...t){const n=new URL(\"https://lexical.dev/docs/error\"),o=new URLSearchParams;o.append(\"code\",e);for(const e of t)o.append(\"v\",e);throw n.search=o.toString(),Error(`Minified Lexical error #${e}; visit ${n.toString()} for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`)}const E=new Map;function P(e){let t=e;for(;null!=t;){if(t.nodeType===Node.TEXT_NODE)return t;t=t.firstChild}return null}function k(e){const t=e.parentNode;if(null==t)throw new Error(\"Should never happen\");return[t,Array.from(t.childNodes).indexOf(e)]}function I(t,n,o,l,r){const s=n.getKey(),i=l.getKey(),c=document.createRange();let f=t.getElementByKey(s),u=t.getElementByKey(i),g=o,a=r;if(e(n)&&(f=P(f)),e(l)&&(u=P(u)),void 0===n||void 0===l||null===f||null===u)return null;\"BR\"===f.nodeName&&([f,g]=k(f)),\"BR\"===u.nodeName&&([u,a]=k(u));const d=f.firstChild;f===u&&null!=d&&\"BR\"===d.nodeName&&0===g&&0===a&&(a=1);try{c.setStart(f,g),c.setEnd(u,a)}catch(e){return null}return!c.collapsed||g===a&&s===i||(c.setStart(u,a),c.setEnd(f,g)),c}function 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),s=Array.from(t.getClientRects());let i,c=s.length;s.sort((e,t)=>{const n=e.top-t.top;return Math.abs(n)<=3?e.left-t.left:n});for(let e=0;e<c;e++){const t=s[e],n=i&&i.top<=t.top&&i.top+i.height>t.top&&i.left+i.width>t.left,l=t.width+r===o.width;n||l?(s.splice(e--,1),c--):i=t}return s}function F(e){const t={};if(!e)return t;const n=e.split(\";\");for(const e of n)if(\"\"!==e){const[n,o]=e.split(/:([^]+)/);n&&o&&(t[n.trim()]=o.trim())}return t}function b(e){let t=E.get(e);return void 0===t&&(t=F(e),E.set(e,t)),t}function R(e){let t=\"\";for(const n in e)n&&(t+=`${n}: ${e[n]};`);return t}function z(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 O(e){return z(n(e)?e:e.getParentOrThrow())}function A(e){const t=O(e);return null!==t&&\"rtl\"===t.direction}function M(e,t,n=\"self\"){const o=e.getStartEndPoints();if(t.isSelected(e)&&!u(t)&&null!==o){const[l,r]=o,s=e.isBackward(),i=l.getNode(),c=r.getNode(),f=t.is(i),u=t.is(c);if(f||u){const[o,l]=g(e),r=i.is(c),f=t.is(s?c:i),u=t.is(s?i:c);let d,p=0;if(r)p=o>l?l:o,d=o>l?o:l;else if(f){p=s?l:o,d=void 0}else if(u){p=0,d=s?o:l}const h=t.__text.slice(p,d);h!==t.__text&&(\"clone\"===n&&(t=a(t)),t.__text=h)}}return t}function _(e){if(\"text\"===e.type)return e.offset===e.getNode().getTextContentSize();const t=e.getNode();return o(t)||K(177),e.offset===t.getChildrenSize()}function L(t,c,f){let u=c.getNode(),g=f;if(o(u)){const e=u.getDescendantByIndex(c.offset);null!==e&&(u=e)}for(;g>0&&null!==u;){if(o(u)){const e=u.getLastDescendant();null!==e&&(u=e)}let f=u.getPreviousSibling(),a=0;if(null===f){let e=u.getParentOrThrow(),t=e.getPreviousSibling();for(;null===t;){if(e=e.getParent(),null===e){f=null;break}t=e.getPreviousSibling()}null!==e&&(a=e.isInline()?0:2,f=t)}let d=u.getTextContent();\"\"===d&&o(u)&&!u.isInline()&&(d=\"\\n\\n\");const p=d.length;if(!e(u)||g>=p){const e=u.getParent();u.remove(),null==e||0!==e.getChildrenSize()||n(e)||e.remove(),g-=p+a,u=f}else{const n=u.getKey(),o=t.getEditorState().read(()=>{const t=l(n);return e(t)&&t.isSimpleText()?t.getTextContent():null}),f=p-g,a=d.slice(0,f);if(null!==o&&o!==d){const e=r();let t=u;if(u.isSimpleText())u.setTextContent(o);else{const e=s(o);u.replace(e),t=e}if(i(e)&&e.isCollapsed()){const n=e.anchor.offset;t.select(n,n)}}else if(u.isSimpleText()){const e=c.key===n;let t=c.offset;t<g&&(t=p);const o=e?t-g:0,l=e?t:f;if(e&&0===o){const[e]=u.splitText(o,l);e.remove()}else{const[,e]=u.splitText(o,l);e.remove()}}else{const e=s(a);u.replace(e)}g=0}}}function $(e){const t=e.getStyle(),n=F(t);E.set(t,n)}function D(t,n){(i(t)?t.isCollapsed():e(t)||o(t))||K(280);const l=b(i(t)?t.style:e(t)?t.getStyle():t.getTextStyle()),r=Object.entries(n).reduce((e,[n,o])=>(\"function\"==typeof o?e[n]=o(l[n],t):null===o?delete e[n]:e[n]=o,e),{...l}),s=R(r);i(t)||e(t)?t.setStyle(s):t.setTextStyle(s),E.set(s,r)}function U(e,t){if(i(e)&&e.isCollapsed()){D(e,t);const n=e.anchor.getNode();o(n)&&n.isEmpty()&&D(n,t)}j(e=>{D(e,t)});const n=e.getNodes();if(n.length>0){const e=new Set;for(const l of n){if(!o(l)||!l.canBeEmpty()||0!==l.getChildrenSize())continue;const n=l.getKey();e.has(n)||(e.add(n),D(l,t))}}}function j(t){const n=c();if(!n)return;const o=new Map,l=e=>o.get(e.getKey())||[0,e.getTextContentSize()];if(i(n))for(const e of f(n).getTextSlices())e&&o.set(e.caret.origin.getKey(),e.getSliceIndices());const r=n.getNodes();for(const n of r){if(!e(n)||!n.canHaveFormat())continue;const[o,r]=l(n);if(r!==o)if(u(n)||0===o&&r===n.getTextContentSize())t(n);else{t(n.splitText(o,r)[0===o?0:1])}}i(n)&&\"text\"===n.anchor.type&&\"text\"===n.focus.type&&n.anchor.key===n.focus.key&&H(n)}function H(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 V(e,t){const n=e.getFormatType(),o=e.getIndent();n!==t.getFormatType()&&t.setFormat(n),o!==t.getIndent()&&t.setIndent(o)}function W(e,t,n=V){if(null===e)return;const l=e.getStartEndPoints(),r=new Map;let s=null;if(l){const[e,t]=l;s=d(),s.anchor.set(e.key,e.offset,e.type),s.focus.set(t.key,t.offset,t.type);const n=p(e.getNode(),h),i=p(t.getNode(),h);o(n)&&r.set(n.getKey(),n),o(i)&&r.set(i.getKey(),i)}for(const t of e.getNodes())if(o(t)&&h(t))r.set(t.getKey(),t);else if(null===l){const e=p(t,h);o(e)&&r.set(e.getKey(),e)}for(const[e,o]of r){const l=t();n(o,l),o.replace(l,!0),s&&(e===s.anchor.key&&s.anchor.set(l.getKey(),s.anchor.offset,s.anchor.type),e===s.focus.key&&s.focus.set(l.getKey(),s.focus.offset,s.focus.type))}s&&e.is(c())&&y(s)}function X(e){return e.getNode().isAttached()}function q(e){let t=e;for(;null!==t&&!N(t);){const e=t.getLatest(),n=t.getParent();0===e.getChildrenSize()&&t.remove(!0),t=n}}function G(e,t,n=null){const o=e.getStartEndPoints(),l=o?o[0]:null,r=e.getNodes(),s=r.length;if(null!==l&&(0===s||1===s&&\"element\"===l.type&&0===l.getNode().getChildrenSize())){const e=\"text\"===l.type?l.getNode().getParentOrThrow():l.getNode(),o=e.getChildren();let r=t();return r.setFormat(e.getFormatType()),r.setIndent(e.getIndent()),o.forEach(e=>r.append(e)),n&&(r=n.append(r)),void e.replace(r)}let i=null,c=[];for(let o=0;o<s;o++){const l=r[o];N(l)?(J(e,c,c.length,t,n),c=[],i=l):null===i||null!==i&&v(l,i)?c.push(l):(J(e,c,c.length,t,n),c=[l])}J(e,c,c.length,t,n)}function J(e,t,n,l,s=null){if(0===t.length)return;const c=t[0],f=new Map,u=[];let g=o(c)?c:c.getParentOrThrow();g.isInline()&&(g=g.getParentOrThrow());let a=!1;for(;null!==g;){const e=g.getPreviousSibling();if(null!==e){g=e,a=!0;break}if(g=g.getParentOrThrow(),N(g))break}const d=new Set;for(let e=0;e<n;e++){const n=t[e];o(n)&&0===n.getChildrenSize()&&d.add(n.getKey())}const p=new Set;for(let e=0;e<n;e++){const n=t[e];let r=n.getParent();if(null!==r&&r.isInline()&&(r=r.getParent()),null!==r&&C(n)&&!p.has(n.getKey())){const e=r.getKey();if(void 0===f.get(e)){const t=l();t.setFormat(r.getFormatType()),t.setIndent(r.getIndent()),u.push(t),f.set(e,t),r.getChildren().forEach(e=>{t.append(e),p.add(e.getKey()),o(e)&&e.getChildrenKeys().forEach(e=>p.add(e))}),q(r)}}else if(d.has(n.getKey())){o(n)||K(179);const e=l();e.setFormat(n.getFormatType()),e.setIndent(n.getIndent()),u.push(e),n.remove(!0)}}if(null!==s)for(let e=0;e<u.length;e++){const t=u[e];s.append(t)}let h=null;if(N(g))if(a)if(null!==s)g.insertAfter(s);else for(let e=u.length-1;e>=0;e--){const t=u[e];g.insertAfter(t)}else{const e=g.getFirstChild();if(o(e)&&(g=e),null===e)if(s)g.append(s);else for(let e=0;e<u.length;e++){const t=u[e];g.append(t),h=t}else if(null!==s)e.insertBefore(s);else for(let t=0;t<u.length;t++){const n=u[t];e.insertBefore(n),h=n}}else if(s)g.insertAfter(s);else for(let e=u.length-1;e>=0;e--){const t=u[e];g.insertAfter(t),h=t}const m=r();i(m)&&X(m.anchor)&&X(m.focus)?y(m.clone()):null!==h?h.selectEnd():e.dirty=!0}function Q(e){const t=Y(e);return null!==t&&\"vertical-rl\"===t.writingMode}function Y(e){const t=e.anchor.getNode();return o(t)?z(t):O(t)}function Z(e,t){let n=Q(e)?!t:t;te(e)&&(n=!n);const l=m(e.focus,n?\"previous\":\"next\");if(S(l))return!1;for(const e of x(l)){if(T(e))return!e.origin.isInline();if(!o(e.origin)){if(w(e.origin))return!0;break}}return!1}function ee(e,t,n,o){e.modify(t?\"extend\":\"move\",n,o)}function te(e){const t=Y(e);return null!==t&&\"rtl\"===t.direction}function ne(e,t,n){const o=te(e);let l;l=Q(e)||o?!n:n,ee(e,t,l,\"character\")}function oe(e,t,n){const o=b(e.getStyle());return null!==o&&o[t]||n}function le(t,n,o=\"\"){let l=null;const r=t.getNodes(),s=t.anchor,c=t.focus,f=t.isBackward(),u=f?c.offset:s.offset,g=f?c.getNode():s.getNode();if(i(t)&&t.isCollapsed()&&\"\"!==t.style){const e=b(t.style);if(null!==e&&n in e)return e[n]}for(let t=0;t<r.length;t++){const s=r[t];if((0===t||0!==u||!s.is(g))&&e(s)){const e=oe(s,n,o);if(null===l)l=e;else if(l!==e){l=\"\";break}}}return null===l?o:l}const re=L;export{$ as $addNodeStyle,V as $copyBlockFormatIndent,H as $ensureForwardRangeSelection,j as $forEachSelectedTextNode,z as $getComputedStyleForElement,O as $getComputedStyleForParent,le as $getSelectionStyleValueForProperty,_ as $isAtNodeEnd,te as $isParentElementRTL,A as $isParentRTL,ee as $moveCaretSelection,ne as $moveCharacter,U as $patchStyleText,W as $setBlocksType,Z as $shouldOverrideDefaultCharacterSelection,M as $sliceSelectedTextNodeContent,L as $trimTextContentFromAnchor,G as $wrapNodes,I as createDOMRange,B as createRectsFromDOMRange,R as getCSSFromStyleObject,b as getStyleObjectFromCSS,re 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,getDOMTextNode as i,$getAdjacentSiblingOrParentSiblingCaret as l,$getSiblingCaret as s,$getChildCaretOrSelf as u,$findMatchingParent as c,$cloneWithProperties as a,$setSelection as f,$getPreviousSelection as d,$caretFromPoint as g,$getChildCaret as p,$getRoot as m,$createParagraphNode as h,$getAdjacentChildCaret as v,$isChildCaret as y,$normalizeCaret as w,$setSelectionFromCaretRange as E,$getCollapsedCaretRange as x,$getCaretInDirection as S,$splitAtPointCaretNext as C,$isTextPointCaret as A,$rewindSiblingCaret as N,$getState as b,$setState as P,makeStepwiseIterator as L,$isSiblingCaret as M}from\"lexical\";export{$findMatchingParent,$getAdjacentSiblingOrParentSiblingCaret,$splitNode,addClassNamesToElement,isBlockDomNode,isHTMLAnchorElement,isHTMLElement,isInlineDomNode,mergeRegister,removeClassNamesFromElement}from\"lexical\";import{createRectsFromDOMRange as R}from\"@lexical/selection\";function T(t,...e){const n=new URL(\"https://lexical.dev/docs/error\"),o=new URLSearchParams;o.append(\"code\",t);for(const t of e)o.append(\"v\",t);throw n.search=o.toString(),Error(`Minified Lexical error #${t}; visit ${n.toString()} for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`)}const B=\"undefined\"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement,_=B&&\"documentMode\"in document?document.documentMode:null,K=B&&/Mac|iPod|iPhone|iPad/.test(navigator.platform),k=B&&/^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent),$=!(!B||!(\"InputEvent\"in window)||_)&&\"getTargetRanges\"in new window.InputEvent(\"input\"),I=B&&/Version\\/[\\d.]+.*Safari/.test(navigator.userAgent),O=B&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,H=B&&/Android/.test(navigator.userAgent),j=B&&/^(?=.*Chrome).*/i.test(navigator.userAgent),D=B&&H&&j,F=B&&/AppleWebKit\\/[\\d.]+/.test(navigator.userAgent)&&K&&!j;function z(t){return`${t}px`}const U={attributes:!0,characterData:!0,childList:!0,subtree:!0};function V(e,n,o){let r=null,i=null,l=null,s=[];const u=document.createElement(\"div\");function c(){null===r&&T(182),null===i&&T(183);const{left:t,top:l}=i.getBoundingClientRect(),c=R(e,n);var a,f;u.isConnected||(f=u,(a=i).insertBefore(f,a.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=z(n.left-t);r.left!==i&&(r.left=i,d=!0);const a=z(n.top-l);r.top!==a&&(o.style.top=a,d=!0);const f=z(n.width);r.width!==f&&(o.style.width=f,d=!0);const g=z(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 a(){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 f=e.registerRootListener(function n(){const o=e.getRootElement();if(null===o)return a();const s=o.parentElement;if(!t(s))return a();a(),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,U),c()});return()=>{f(),a()}}function W(t,e,n){if(\"text\"!==t.type&&r(e)){const o=e.getDOMSlot(n);return[o.element,o.getFirstChildOffset()+t.offset]}return[i(n)||n,t.offset]}function G(t,r){let i=null,l=null,s=null,u=null,c=null,a=null,f=()=>{};function d(e){e.read(()=>{const e=n();if(!o(e))return i=null,s=null,u=null,a=null,f(),void(f=()=>{});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,v=g.getNode(),y=v.getKey(),w=g.offset,E=t.getElementByKey(m),x=t.getElementByKey(y),S=null===i||E!==l||h!==s||m!==i.getKey(),C=null===u||x!==c||w!==a||y!==u.getKey();if((S||C)&&null!==E&&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(e,n,o)),s.setEnd(...W(r,i,l)),s}(t,d,p,E,g,v,x);f(),f=V(t,e,t=>{if(void 0===r)for(const e of t){const t=e.style;\"Highlight\"!==t.background&&(t.background=\"Highlight\"),\"HighlightText\"!==t.color&&(t.color=\"HighlightText\"),t.marginTop!==z(-1.5)&&(t.marginTop=z(-1.5)),t.paddingTop!==z(4)&&(t.paddingTop=z(4)),t.paddingBottom!==z(0)&&(t.paddingBottom=z(0))}else r(t)})}i=p,l=E,s=h,u=v,c=x,a=w})}return d(t.getEditorState()),e(t.registerUpdateListener(({editorState:t})=>d(t)),()=>{f()})}function q(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=G(t,e))};return document.addEventListener(\"selectionchange\",o),()=>{null!==n&&n(),document.removeEventListener(\"selectionchange\",o)}}const J=$,Q=B,X=H,Y=D,Z=K,tt=F,et=j,nt=k,ot=O,rt=I;function it(t,e){for(const n of e)if(t.type.startsWith(n))return!0;return!1}function lt(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()}),it(s,e)?u.readAsDataURL(s):i()};i()})}function st(t,e){return Array.from(at(t,e))}function ut(t){return t?t.getAdjacentCaret():null}function ct(t,e){return Array.from(ht(t,e))}function at(t,e){return dt(\"next\",t,e)}function ft(t,e){const n=l(s(t,e));return n&&n[0]}function dt(t,e,n){const o=m(),i=e||o,c=r(i)?p(i,t):s(i,t),a=pt(i),f=n?v(u(s(n,t)))||ft(n,t):ft(i,t);let d=a;return L({hasNext:t=>null!==t,initial:c,map:t=>({depth:d,node:t.origin}),step:t=>{if(t.isSameNodeCaret(f))return null;y(t)&&d++;const e=l(t);return!e||e[0].isSameNodeCaret(f)?null:(d+=e[1],e[0])}})}function gt(t){const e=l(s(t,\"next\"));return e&&[e[0].origin,e[1]]}function pt(t){let e=-1;for(let n=t;null!==n;n=n.getParent())e++;return e}function mt(t){const e=u(s(t,\"previous\")),n=l(e,\"root\");return n&&n[0].origin}function ht(t,e){return dt(\"previous\",t,e)}function vt(t,e){let n=t;for(;null!=n;){if(n instanceof e)return n;n=n.getParent()}return null}function yt(t){const e=c(t,t=>r(t)&&!t.isInline());return r(e)||T(4,t.__key),e}function wt(t,e,n,o){const r=t=>t instanceof e;return t.registerNodeTransform(e,t=>{const e=(t=>{const e=t.getChildren();for(let t=0;t<e.length;t++){const n=e[t];if(r(n))return null}let n=t,o=t;for(;null!==n;)if(o=n,n=n.getParent(),r(n))return{child:o,parent:n};return null})(t);if(null!==e){const{child:r,parent:i}=e;if(r.is(t)){o(i,t);const e=r.getNextSiblings(),l=e.length;if(i.insertAfter(r),0!==l){const t=n(i);r.insertAfter(t);for(let n=0;n<l;n++)t.append(e[n])}i.canBeEmpty()||0!==i.getChildrenSize()||i.remove()}}})}function Et(t,e){const n=new Map,o=t._pendingEditorState;for(const[t,o]of e._nodeMap)n.set(t,a(o));o&&(o._nodeMap=n),t._dirtyType=2;const r=e._selection;f(null===r?null:r.clone())}function xt(t){const e=n()||d();let r;if(o(e))r=g(e.focus,\"next\");else{if(null!=e){const t=e.getNodes(),n=t[t.length-1];n&&(r=s(n,\"next\"))}r=r||p(m(),\"previous\").getFlipped().insert(h())}const i=St(t,r),l=v(i),u=y(l)?w(l):i;return E(x(u)),t.getLatest()}function St(t,e,n){let o=S(e,\"next\");for(let t=o;t;t=C(t,n))o=t;return A(o)&&T(283),o.insert(t.isInline()?h().append(t):t),S(s(t.getLatest(),\"next\"),e.direction)}function Ct(t,e){const n=e();return t.replace(n),n.append(t),n}function At(t,e){return null!==t&&Object.getPrototypeOf(t).constructor.name===e.name}function Nt(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 bt(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=c(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 Pt(t,e){p(t,\"next\").insert(e)}let Lt=!(nt||!Q)&&void 0;function Mt(t,e=!1){let n=1;if(function(){if(void 0===Lt){const t=document.createElement(\"div\");t.style.cssText=\"position: absolute; opacity: 0; width: 100px; left: -1000px;\",document.body.appendChild(t);const e=t.getBoundingClientRect();t.style.setProperty(\"zoom\",\"2\"),Lt=t.getBoundingClientRect().width===e.width,document.body.removeChild(t)}return Lt}()||e)for(;t;)n*=Number(window.getComputedStyle(t).getPropertyValue(\"zoom\")),t=t.parentElement;return n}function Rt(t){return null!==t._parentEditor}function Tt(t,e){return Bt(t,e,null)}function Bt(t,e,n){let o=!1;for(const i of kt(t))e(i)?null!==n&&n(i):(o=!0,r(i)&&Bt(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 kt(t))o.push(e);return n}function Kt(t){return $t(p(t,\"next\"))}function kt(t){return $t(p(t,\"previous\"))}function $t(t){return L({hasNext:M,initial:t.getAdjacentCaret(),map:t=>t.origin.getLatest(),step:t=>t.getAdjacentCaret()})}function It(t){N(s(t,\"next\")).splice(1,t.getChildren())}function Ot(t){const e=e=>b(e,t),n=(e,n)=>P(e,t,n);return{$get:e,$set:n,accessors:[e,n],makeGetterMethod:()=>function(){return e(this)},makeSetterMethod:()=>function(t){return n(this,t)},stateConfig:t}}export{_t as $descendantsMatching,st as $dfs,at as $dfsIterator,Nt as $filter,Kt as $firstToLastIterator,ut as $getAdjacentCaret,pt as $getDepth,yt as $getNearestBlockElementAncestorOrThrow,vt as $getNearestNodeOfType,mt as $getNextRightPreorderNode,gt as $getNextSiblingOrParentSibling,bt as $handleIndentAndOutdent,Pt as $insertFirst,xt as $insertNodeToNearestRoot,St as $insertNodeToNearestRootAtCaret,Rt as $isEditorIsNestedEditor,kt as $lastToFirstIterator,Et as $restoreEditorState,ct as $reverseDfs,ht as $reverseDfsIterator,Tt as $unwrapAndFilterDescendants,It as $unwrapNode,Ct as $wrapNodeInElement,J as CAN_USE_BEFORE_INPUT,Q as CAN_USE_DOM,X as IS_ANDROID,Y as IS_ANDROID_CHROME,Z as IS_APPLE,tt as IS_APPLE_WEBKIT,et as IS_CHROME,nt as IS_FIREFOX,ot as IS_IOS,rt as IS_SAFARI,Mt as calculateZoomLevel,it as isMimeType,Ot as makeStateWrapper,G as markSelection,lt as mediaFileReader,At as objectKlassEquals,V as positionNodeOnRange,wt as registerNestedElementResolver,q as selectionAlwaysOnDisplay};\n","\n/* **********************************************\n     Begin prism-core.js\n********************************************** */\n\n/// <reference lib=\"WebWorker\"/>\n\nvar _self = (typeof window !== 'undefined')\n\t? window   // if in browser\n\t: (\n\t\t(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)\n\t\t\t? self // if in worker\n\t\t\t: {}   // if in node js\n\t);\n\n/**\n * Prism: Lightweight, robust, elegant syntax highlighting\n *\n * @license MIT <https://opensource.org/licenses/MIT>\n * @author Lea Verou <https://lea.verou.me>\n * @namespace\n * @public\n */\nvar Prism = (function (_self) {\n\n\t// Private helper vars\n\tvar lang = /(?:^|\\s)lang(?:uage)?-([\\w-]+)(?=\\s|$)/i;\n\tvar uniqueId = 0;\n\n\t// The grammar object for plaintext\n\tvar plainTextGrammar = {};\n\n\n\tvar _ = {\n\t\t/**\n\t\t * By default, Prism will attempt to highlight all code elements (by calling {@link Prism.highlightAll}) on the\n\t\t * current page after the page finished loading. This might be a problem if e.g. you wanted to asynchronously load\n\t\t * additional languages or plugins yourself.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not automatically highlight all code elements on the page.\n\t\t *\n\t\t * You obviously have to change this value before the automatic highlighting started. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.manual = true;\n\t\t * // add a new <script> to load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tmanual: _self.Prism && _self.Prism.manual,\n\t\t/**\n\t\t * By default, if Prism is in a web worker, it assumes that it is in a worker it created itself, so it uses\n\t\t * `addEventListener` to communicate with its parent instance. However, if you're using Prism manually in your\n\t\t * own worker, you don't want it to do this.\n\t\t *\n\t\t * By setting this value to `true`, Prism will not add its own listeners to the worker.\n\t\t *\n\t\t * You obviously have to change this value before Prism executes. To do this, you can add an\n\t\t * empty Prism object into the global scope before loading the Prism script like this:\n\t\t *\n\t\t * ```js\n\t\t * window.Prism = window.Prism || {};\n\t\t * Prism.disableWorkerMessageHandler = true;\n\t\t * // Load Prism's script\n\t\t * ```\n\t\t *\n\t\t * @default false\n\t\t * @type {boolean}\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tdisableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,\n\n\t\t/**\n\t\t * A namespace for utility methods.\n\t\t *\n\t\t * All function in this namespace that are not explicitly marked as _public_ are for __internal use only__ and may\n\t\t * change or disappear at any time.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t */\n\t\tutil: {\n\t\t\tencode: function encode(tokens) {\n\t\t\t\tif (tokens instanceof Token) {\n\t\t\t\t\treturn new Token(tokens.type, encode(tokens.content), tokens.alias);\n\t\t\t\t} else if (Array.isArray(tokens)) {\n\t\t\t\t\treturn tokens.map(encode);\n\t\t\t\t} else {\n\t\t\t\t\treturn tokens.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\\u00a0/g, ' ');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the name of the type of the given value.\n\t\t\t *\n\t\t\t * @param {any} o\n\t\t\t * @returns {string}\n\t\t\t * @example\n\t\t\t * type(null)      === 'Null'\n\t\t\t * type(undefined) === 'Undefined'\n\t\t\t * type(123)       === 'Number'\n\t\t\t * type('foo')     === 'String'\n\t\t\t * type(true)      === 'Boolean'\n\t\t\t * type([1, 2])    === 'Array'\n\t\t\t * type({})        === 'Object'\n\t\t\t * type(String)    === 'Function'\n\t\t\t * type(/abc+/)    === 'RegExp'\n\t\t\t */\n\t\t\ttype: function (o) {\n\t\t\t\treturn Object.prototype.toString.call(o).slice(8, -1);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns a unique number for the given object. Later calls will still return the same number.\n\t\t\t *\n\t\t\t * @param {Object} obj\n\t\t\t * @returns {number}\n\t\t\t */\n\t\t\tobjId: function (obj) {\n\t\t\t\tif (!obj['__id']) {\n\t\t\t\t\tObject.defineProperty(obj, '__id', { value: ++uniqueId });\n\t\t\t\t}\n\t\t\t\treturn obj['__id'];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Creates a deep clone of the given object.\n\t\t\t *\n\t\t\t * The main intended use of this function is to clone language definitions.\n\t\t\t *\n\t\t\t * @param {T} o\n\t\t\t * @param {Record<number, any>} [visited]\n\t\t\t * @returns {T}\n\t\t\t * @template T\n\t\t\t */\n\t\t\tclone: function deepClone(o, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar clone; var id;\n\t\t\t\tswitch (_.util.type(o)) {\n\t\t\t\t\tcase 'Object':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = /** @type {Record<string, any>} */ ({});\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\tfor (var key in o) {\n\t\t\t\t\t\t\tif (o.hasOwnProperty(key)) {\n\t\t\t\t\t\t\t\tclone[key] = deepClone(o[key], visited);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tcase 'Array':\n\t\t\t\t\t\tid = _.util.objId(o);\n\t\t\t\t\t\tif (visited[id]) {\n\t\t\t\t\t\t\treturn visited[id];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t\tvisited[id] = clone;\n\n\t\t\t\t\t\t(/** @type {Array} */(/** @type {any} */(o))).forEach(function (v, i) {\n\t\t\t\t\t\t\tclone[i] = deepClone(v, visited);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn /** @type {any} */ (clone);\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn o;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.\n\t\t\t *\n\t\t\t * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @returns {string}\n\t\t\t */\n\t\t\tgetLanguage: function (element) {\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar m = lang.exec(element.className);\n\t\t\t\t\tif (m) {\n\t\t\t\t\t\treturn m[1].toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn 'none';\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Sets the Prism `language-xxxx` class of the given element.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} language\n\t\t\t * @returns {void}\n\t\t\t */\n\t\t\tsetLanguage: function (element, language) {\n\t\t\t\t// remove all `language-xxxx` classes\n\t\t\t\t// (this might leave behind a leading space)\n\t\t\t\telement.className = element.className.replace(RegExp(lang, 'gi'), '');\n\n\t\t\t\t// add the new `language-xxxx` class\n\t\t\t\t// (using `classList` will automatically clean up spaces for us)\n\t\t\t\telement.classList.add('language-' + language);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns the script element that is currently executing.\n\t\t\t *\n\t\t\t * This does __not__ work for line script element.\n\t\t\t *\n\t\t\t * @returns {HTMLScriptElement | null}\n\t\t\t */\n\t\t\tcurrentScript: function () {\n\t\t\t\tif (typeof document === 'undefined') {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tif (document.currentScript && document.currentScript.tagName === 'SCRIPT' && 1 < 2 /* hack to trip TS' flow analysis */) {\n\t\t\t\t\treturn /** @type {any} */ (document.currentScript);\n\t\t\t\t}\n\n\t\t\t\t// IE11 workaround\n\t\t\t\t// we'll get the src of the current script by parsing IE11's error stack trace\n\t\t\t\t// this will not work for inline scripts\n\n\t\t\t\ttry {\n\t\t\t\t\tthrow new Error();\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Get file src url from stack. Specifically works with the format of stack traces in IE.\n\t\t\t\t\t// A stack will look like this:\n\t\t\t\t\t//\n\t\t\t\t\t// Error\n\t\t\t\t\t//    at _.util.currentScript (http://localhost/components/prism-core.js:119:5)\n\t\t\t\t\t//    at Global code (http://localhost/components/prism-core.js:606:1)\n\n\t\t\t\t\tvar src = (/at [^(\\r\\n]*\\((.*):[^:]+:[^:]+\\)$/i.exec(err.stack) || [])[1];\n\t\t\t\t\tif (src) {\n\t\t\t\t\t\tvar scripts = document.getElementsByTagName('script');\n\t\t\t\t\t\tfor (var i in scripts) {\n\t\t\t\t\t\t\tif (scripts[i].src == src) {\n\t\t\t\t\t\t\t\treturn scripts[i];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns whether a given class is active for `element`.\n\t\t\t *\n\t\t\t * The class can be activated if `element` or one of its ancestors has the given class and it can be deactivated\n\t\t\t * if `element` or one of its ancestors has the negated version of the given class. The _negated version_ of the\n\t\t\t * given class is just the given class with a `no-` prefix.\n\t\t\t *\n\t\t\t * Whether the class is active is determined by the closest ancestor of `element` (where `element` itself is\n\t\t\t * closest ancestor) that has the given class or the negated version of it. If neither `element` nor any of its\n\t\t\t * ancestors have the given class or the negated version of it, then the default activation will be returned.\n\t\t\t *\n\t\t\t * In the paradoxical situation where the closest ancestor contains __both__ the given class and the negated\n\t\t\t * version of it, the class is considered active.\n\t\t\t *\n\t\t\t * @param {Element} element\n\t\t\t * @param {string} className\n\t\t\t * @param {boolean} [defaultActivation=false]\n\t\t\t * @returns {boolean}\n\t\t\t */\n\t\t\tisActive: function (element, className, defaultActivation) {\n\t\t\t\tvar no = 'no-' + className;\n\n\t\t\t\twhile (element) {\n\t\t\t\t\tvar classList = element.classList;\n\t\t\t\t\tif (classList.contains(className)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (classList.contains(no)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\telement = element.parentElement;\n\t\t\t\t}\n\t\t\t\treturn !!defaultActivation;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * This namespace contains all currently loaded languages and the some helper functions to create and modify languages.\n\t\t *\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\tlanguages: {\n\t\t\t/**\n\t\t\t * The grammar for plain, unformatted text.\n\t\t\t */\n\t\t\tplain: plainTextGrammar,\n\t\t\tplaintext: plainTextGrammar,\n\t\t\ttext: plainTextGrammar,\n\t\t\ttxt: plainTextGrammar,\n\n\t\t\t/**\n\t\t\t * Creates a deep copy of the language with the given id and appends the given tokens.\n\t\t\t *\n\t\t\t * If a token in `redef` also appears in the copied language, then the existing token in the copied language\n\t\t\t * will be overwritten at its original position.\n\t\t\t *\n\t\t\t * ## Best practices\n\t\t\t *\n\t\t\t * Since the position of overwriting tokens (token in `redef` that overwrite tokens in the copied language)\n\t\t\t * doesn't matter, they can technically be in any order. However, this can be confusing to others that trying to\n\t\t\t * understand the language definition because, normally, the order of tokens matters in Prism grammars.\n\t\t\t *\n\t\t\t * Therefore, it is encouraged to order overwriting tokens according to the positions of the overwritten tokens.\n\t\t\t * Furthermore, all non-overwriting tokens should be placed after the overwriting ones.\n\t\t\t *\n\t\t\t * @param {string} id The id of the language to extend. This has to be a key in `Prism.languages`.\n\t\t\t * @param {Grammar} redef The new tokens to append.\n\t\t\t * @returns {Grammar} The new language created.\n\t\t\t * @public\n\t\t\t * @example\n\t\t\t * Prism.languages['css-with-colors'] = Prism.languages.extend('css', {\n\t\t\t *     // Prism.languages.css already has a 'comment' token, so this token will overwrite CSS' 'comment' token\n\t\t\t *     // at its original position\n\t\t\t *     'comment': { ... },\n\t\t\t *     // CSS doesn't have a 'color' token, so this token will be appended\n\t\t\t *     'color': /\\b(?:red|green|blue)\\b/\n\t\t\t * });\n\t\t\t */\n\t\t\textend: function (id, redef) {\n\t\t\t\tvar lang = _.util.clone(_.languages[id]);\n\n\t\t\t\tfor (var key in redef) {\n\t\t\t\t\tlang[key] = redef[key];\n\t\t\t\t}\n\n\t\t\t\treturn lang;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Inserts tokens _before_ another token in a language definition or any other grammar.\n\t\t\t *\n\t\t\t * ## Usage\n\t\t\t *\n\t\t\t * This helper method makes it easy to modify existing languages. For example, the CSS language definition\n\t\t\t * not only defines CSS highlighting for CSS documents, but also needs to define highlighting for CSS embedded\n\t\t\t * in HTML through `<style>` elements. To do this, it needs to modify `Prism.languages.markup` and add the\n\t\t\t * appropriate tokens. However, `Prism.languages.markup` is a regular JavaScript object literal, so if you do\n\t\t\t * this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.markup.style = {\n\t\t\t *     // token\n\t\t\t * };\n\t\t\t * ```\n\t\t\t *\n\t\t\t * then the `style` token will be added (and processed) at the end. `insertBefore` allows you to insert tokens\n\t\t\t * before existing tokens. For the CSS example above, you would use it like this:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'cdata', {\n\t\t\t *     'style': {\n\t\t\t *         // token\n\t\t\t *     }\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Special cases\n\t\t\t *\n\t\t\t * If the grammars of `inside` and `insert` have tokens with the same name, the tokens in `inside`'s grammar\n\t\t\t * will be ignored.\n\t\t\t *\n\t\t\t * This behavior can be used to insert tokens after `before`:\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * Prism.languages.insertBefore('markup', 'comment', {\n\t\t\t *     'comment': Prism.languages.markup.comment,\n\t\t\t *     // tokens after 'comment'\n\t\t\t * });\n\t\t\t * ```\n\t\t\t *\n\t\t\t * ## Limitations\n\t\t\t *\n\t\t\t * The main problem `insertBefore` has to solve is iteration order. Since ES2015, the iteration order for object\n\t\t\t * properties is guaranteed to be the insertion order (except for integer keys) but some browsers behave\n\t\t\t * differently when keys are deleted and re-inserted. So `insertBefore` can't be implemented by temporarily\n\t\t\t * deleting properties which is necessary to insert at arbitrary positions.\n\t\t\t *\n\t\t\t * To solve this problem, `insertBefore` doesn't actually insert the given tokens into the target object.\n\t\t\t * Instead, it will create a new object and replace all references to the target object with the new one. This\n\t\t\t * can be done without temporarily deleting properties, so the iteration order is well-defined.\n\t\t\t *\n\t\t\t * However, only references that can be reached from `Prism.languages` or `insert` will be replaced. I.e. if\n\t\t\t * you hold the target object in a variable, then the value of the variable will not change.\n\t\t\t *\n\t\t\t * ```js\n\t\t\t * var oldMarkup = Prism.languages.markup;\n\t\t\t * var newMarkup = Prism.languages.insertBefore('markup', 'comment', { ... });\n\t\t\t *\n\t\t\t * assert(oldMarkup !== Prism.languages.markup);\n\t\t\t * assert(newMarkup === Prism.languages.markup);\n\t\t\t * ```\n\t\t\t *\n\t\t\t * @param {string} inside The property of `root` (e.g. a language id in `Prism.languages`) that contains the\n\t\t\t * object to be modified.\n\t\t\t * @param {string} before The key to insert before.\n\t\t\t * @param {Grammar} insert An object containing the key-value pairs to be inserted.\n\t\t\t * @param {Object<string, any>} [root] The object containing `inside`, i.e. the object that contains the\n\t\t\t * object to be modified.\n\t\t\t *\n\t\t\t * Defaults to `Prism.languages`.\n\t\t\t * @returns {Grammar} The new grammar object.\n\t\t\t * @public\n\t\t\t */\n\t\t\tinsertBefore: function (inside, before, insert, root) {\n\t\t\t\troot = root || /** @type {any} */ (_.languages);\n\t\t\t\tvar grammar = root[inside];\n\t\t\t\t/** @type {Grammar} */\n\t\t\t\tvar ret = {};\n\n\t\t\t\tfor (var token in grammar) {\n\t\t\t\t\tif (grammar.hasOwnProperty(token)) {\n\n\t\t\t\t\t\tif (token == before) {\n\t\t\t\t\t\t\tfor (var newToken in insert) {\n\t\t\t\t\t\t\t\tif (insert.hasOwnProperty(newToken)) {\n\t\t\t\t\t\t\t\t\tret[newToken] = insert[newToken];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Do not insert token which also occur in insert. See #1525\n\t\t\t\t\t\tif (!insert.hasOwnProperty(token)) {\n\t\t\t\t\t\t\tret[token] = grammar[token];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar old = root[inside];\n\t\t\t\troot[inside] = ret;\n\n\t\t\t\t// Update references in other language definitions\n\t\t\t\t_.languages.DFS(_.languages, function (key, value) {\n\t\t\t\t\tif (value === old && key != inside) {\n\t\t\t\t\t\tthis[key] = ret;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn ret;\n\t\t\t},\n\n\t\t\t// Traverse a language definition with Depth First Search\n\t\t\tDFS: function DFS(o, callback, type, visited) {\n\t\t\t\tvisited = visited || {};\n\n\t\t\t\tvar objId = _.util.objId;\n\n\t\t\t\tfor (var i in o) {\n\t\t\t\t\tif (o.hasOwnProperty(i)) {\n\t\t\t\t\t\tcallback.call(o, i, o[i], type || i);\n\n\t\t\t\t\t\tvar property = o[i];\n\t\t\t\t\t\tvar propertyType = _.util.type(property);\n\n\t\t\t\t\t\tif (propertyType === 'Object' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, null, visited);\n\t\t\t\t\t\t} else if (propertyType === 'Array' && !visited[objId(property)]) {\n\t\t\t\t\t\t\tvisited[objId(property)] = true;\n\t\t\t\t\t\t\tDFS(property, callback, i, visited);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tplugins: {},\n\n\t\t/**\n\t\t * This is the most high-level function in Prism’s API.\n\t\t * It fetches all the elements that have a `.language-xxxx` class and then calls {@link Prism.highlightElement} on\n\t\t * each one of them.\n\t\t *\n\t\t * This is equivalent to `Prism.highlightAllUnder(document, async, callback)`.\n\t\t *\n\t\t * @param {boolean} [async=false] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @param {HighlightCallback} [callback] Same as in {@link Prism.highlightAllUnder}.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAll: function (async, callback) {\n\t\t\t_.highlightAllUnder(document, async, callback);\n\t\t},\n\n\t\t/**\n\t\t * Fetches all the descendants of `container` that have a `.language-xxxx` class and then calls\n\t\t * {@link Prism.highlightElement} on each one of them.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-highlightall`\n\t\t * 2. `before-all-elements-highlight`\n\t\t * 3. All hooks of {@link Prism.highlightElement} for each element.\n\t\t *\n\t\t * @param {ParentNode} container The root element, whose descendants that have a `.language-xxxx` class will be highlighted.\n\t\t * @param {boolean} [async=false] Whether each element is to be highlighted asynchronously using Web Workers.\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked on each element after its highlighting is done.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightAllUnder: function (container, async, callback) {\n\t\t\tvar env = {\n\t\t\t\tcallback: callback,\n\t\t\t\tcontainer: container,\n\t\t\t\tselector: 'code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'\n\t\t\t};\n\n\t\t\t_.hooks.run('before-highlightall', env);\n\n\t\t\tenv.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector));\n\n\t\t\t_.hooks.run('before-all-elements-highlight', env);\n\n\t\t\tfor (var i = 0, element; (element = env.elements[i++]);) {\n\t\t\t\t_.highlightElement(element, async === true, env.callback);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Highlights the code inside a single element.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-sanity-check`\n\t\t * 2. `before-highlight`\n\t\t * 3. All hooks of {@link Prism.highlight}. These hooks will be run by an asynchronous worker if `async` is `true`.\n\t\t * 4. `before-insert`\n\t\t * 5. `after-highlight`\n\t\t * 6. `complete`\n\t\t *\n\t\t * Some the above hooks will be skipped if the element doesn't contain any text or there is no grammar loaded for\n\t\t * the element's language.\n\t\t *\n\t\t * @param {Element} element The element containing the code.\n\t\t * It must have a class of `language-xxxx` to be processed, where `xxxx` is a valid language identifier.\n\t\t * @param {boolean} [async=false] Whether the element is to be highlighted asynchronously using Web Workers\n\t\t * to improve performance and avoid blocking the UI when highlighting very large chunks of code. This option is\n\t\t * [disabled by default](https://prismjs.com/faq.html#why-is-asynchronous-highlighting-disabled-by-default).\n\t\t *\n\t\t * Note: All language definitions required to highlight the code must be included in the main `prism.js` file for\n\t\t * asynchronous highlighting to work. You can build your own bundle on the\n\t\t * [Download page](https://prismjs.com/download.html).\n\t\t * @param {HighlightCallback} [callback] An optional callback to be invoked after the highlighting is done.\n\t\t * Mostly useful when `async` is `true`, since in that case, the highlighting is done asynchronously.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thighlightElement: function (element, async, callback) {\n\t\t\t// Find language\n\t\t\tvar language = _.util.getLanguage(element);\n\t\t\tvar grammar = _.languages[language];\n\n\t\t\t// Set language on the element, if not present\n\t\t\t_.util.setLanguage(element, language);\n\n\t\t\t// Set language on the parent, for styling\n\t\t\tvar parent = element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre') {\n\t\t\t\t_.util.setLanguage(parent, language);\n\t\t\t}\n\n\t\t\tvar code = element.textContent;\n\n\t\t\tvar env = {\n\t\t\t\telement: element,\n\t\t\t\tlanguage: language,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tcode: code\n\t\t\t};\n\n\t\t\tfunction insertHighlightedCode(highlightedCode) {\n\t\t\t\tenv.highlightedCode = highlightedCode;\n\n\t\t\t\t_.hooks.run('before-insert', env);\n\n\t\t\t\tenv.element.innerHTML = env.highlightedCode;\n\n\t\t\t\t_.hooks.run('after-highlight', env);\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t}\n\n\t\t\t_.hooks.run('before-sanity-check', env);\n\n\t\t\t// plugins may change/add the parent/element\n\t\t\tparent = env.element.parentElement;\n\t\t\tif (parent && parent.nodeName.toLowerCase() === 'pre' && !parent.hasAttribute('tabindex')) {\n\t\t\t\tparent.setAttribute('tabindex', '0');\n\t\t\t}\n\n\t\t\tif (!env.code) {\n\t\t\t\t_.hooks.run('complete', env);\n\t\t\t\tcallback && callback.call(env.element);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_.hooks.run('before-highlight', env);\n\n\t\t\tif (!env.grammar) {\n\t\t\t\tinsertHighlightedCode(_.util.encode(env.code));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (async && _self.Worker) {\n\t\t\t\tvar worker = new Worker(_.filename);\n\n\t\t\t\tworker.onmessage = function (evt) {\n\t\t\t\t\tinsertHighlightedCode(evt.data);\n\t\t\t\t};\n\n\t\t\t\tworker.postMessage(JSON.stringify({\n\t\t\t\t\tlanguage: env.language,\n\t\t\t\t\tcode: env.code,\n\t\t\t\t\timmediateClose: true\n\t\t\t\t}));\n\t\t\t} else {\n\t\t\t\tinsertHighlightedCode(_.highlight(env.code, env.grammar, env.language));\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Low-level function, only use if you know what you’re doing. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns a string with the HTML produced.\n\t\t *\n\t\t * The following hooks will be run:\n\t\t * 1. `before-tokenize`\n\t\t * 2. `after-tokenize`\n\t\t * 3. `wrap`: On each {@link Token}.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @param {string} language The name of the language definition passed to `grammar`.\n\t\t * @returns {string} The highlighted HTML.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * Prism.highlight('var foo = true;', Prism.languages.javascript, 'javascript');\n\t\t */\n\t\thighlight: function (text, grammar, language) {\n\t\t\tvar env = {\n\t\t\t\tcode: text,\n\t\t\t\tgrammar: grammar,\n\t\t\t\tlanguage: language\n\t\t\t};\n\t\t\t_.hooks.run('before-tokenize', env);\n\t\t\tif (!env.grammar) {\n\t\t\t\tthrow new Error('The language \"' + env.language + '\" has no grammar.');\n\t\t\t}\n\t\t\tenv.tokens = _.tokenize(env.code, env.grammar);\n\t\t\t_.hooks.run('after-tokenize', env);\n\t\t\treturn Token.stringify(_.util.encode(env.tokens), env.language);\n\t\t},\n\n\t\t/**\n\t\t * This is the heart of Prism, and the most low-level function you can use. It accepts a string of text as input\n\t\t * and the language definitions to use, and returns an array with the tokenized code.\n\t\t *\n\t\t * When the language definition includes nested tokens, the function is called recursively on each of these tokens.\n\t\t *\n\t\t * This method could be useful in other contexts as well, as a very crude parser.\n\t\t *\n\t\t * @param {string} text A string with the code to be highlighted.\n\t\t * @param {Grammar} grammar An object containing the tokens to use.\n\t\t *\n\t\t * Usually a language definition like `Prism.languages.markup`.\n\t\t * @returns {TokenStream} An array of strings and tokens, a token stream.\n\t\t * @memberof Prism\n\t\t * @public\n\t\t * @example\n\t\t * let code = `var foo = 0;`;\n\t\t * let tokens = Prism.tokenize(code, Prism.languages.javascript);\n\t\t * tokens.forEach(token => {\n\t\t *     if (token instanceof Prism.Token && token.type === 'number') {\n\t\t *         console.log(`Found numeric literal: ${token.content}`);\n\t\t *     }\n\t\t * });\n\t\t */\n\t\ttokenize: function (text, grammar) {\n\t\t\tvar rest = grammar.rest;\n\t\t\tif (rest) {\n\t\t\t\tfor (var token in rest) {\n\t\t\t\t\tgrammar[token] = rest[token];\n\t\t\t\t}\n\n\t\t\t\tdelete grammar.rest;\n\t\t\t}\n\n\t\t\tvar tokenList = new LinkedList();\n\t\t\taddAfter(tokenList, tokenList.head, text);\n\n\t\t\tmatchGrammar(text, tokenList, grammar, tokenList.head, 0);\n\n\t\t\treturn toArray(tokenList);\n\t\t},\n\n\t\t/**\n\t\t * @namespace\n\t\t * @memberof Prism\n\t\t * @public\n\t\t */\n\t\thooks: {\n\t\t\tall: {},\n\n\t\t\t/**\n\t\t\t * Adds the given callback to the list of callbacks for the given hook.\n\t\t\t *\n\t\t\t * The callback will be invoked when the hook it is registered for is run.\n\t\t\t * Hooks are usually directly run by a highlight function but you can also run hooks yourself.\n\t\t\t *\n\t\t\t * One callback function can be registered to multiple hooks and the same hook multiple times.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {HookCallback} callback The callback function which is given environment variables.\n\t\t\t * @public\n\t\t\t */\n\t\t\tadd: function (name, callback) {\n\t\t\t\tvar hooks = _.hooks.all;\n\n\t\t\t\thooks[name] = hooks[name] || [];\n\n\t\t\t\thooks[name].push(callback);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Runs a hook invoking all registered callbacks with the given environment variables.\n\t\t\t *\n\t\t\t * Callbacks will be invoked synchronously and in the order in which they were registered.\n\t\t\t *\n\t\t\t * @param {string} name The name of the hook.\n\t\t\t * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.\n\t\t\t * @public\n\t\t\t */\n\t\t\trun: function (name, env) {\n\t\t\t\tvar callbacks = _.hooks.all[name];\n\n\t\t\t\tif (!callbacks || !callbacks.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0, callback; (callback = callbacks[i++]);) {\n\t\t\t\t\tcallback(env);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tToken: Token\n\t};\n\t_self.Prism = _;\n\n\n\t// Typescript note:\n\t// The following can be used to import the Token type in JSDoc:\n\t//\n\t//   @typedef {InstanceType<import(\"./prism-core\")[\"Token\"]>} Token\n\n\t/**\n\t * Creates a new token.\n\t *\n\t * @param {string} type See {@link Token#type type}\n\t * @param {string | TokenStream} content See {@link Token#content content}\n\t * @param {string|string[]} [alias] The alias(es) of the token.\n\t * @param {string} [matchedStr=\"\"] A copy of the full string this token was created from.\n\t * @class\n\t * @global\n\t * @public\n\t */\n\tfunction Token(type, content, alias, matchedStr) {\n\t\t/**\n\t\t * The type of the token.\n\t\t *\n\t\t * This is usually the key of a pattern in a {@link Grammar}.\n\t\t *\n\t\t * @type {string}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.type = type;\n\t\t/**\n\t\t * The strings or tokens contained by this token.\n\t\t *\n\t\t * This will be a token stream if the pattern matched also defined an `inside` grammar.\n\t\t *\n\t\t * @type {string | TokenStream}\n\t\t * @public\n\t\t */\n\t\tthis.content = content;\n\t\t/**\n\t\t * The alias(es) of the token.\n\t\t *\n\t\t * @type {string|string[]}\n\t\t * @see GrammarToken\n\t\t * @public\n\t\t */\n\t\tthis.alias = alias;\n\t\t// Copy of the full string this token was created from\n\t\tthis.length = (matchedStr || '').length | 0;\n\t}\n\n\t/**\n\t * A token stream is an array of strings and {@link Token Token} objects.\n\t *\n\t * Token streams have to fulfill a few properties that are assumed by most functions (mostly internal ones) that process\n\t * them.\n\t *\n\t * 1. No adjacent strings.\n\t * 2. No empty strings.\n\t *\n\t *    The only exception here is the token stream that only contains the empty string and nothing else.\n\t *\n\t * @typedef {Array<string | Token>} TokenStream\n\t * @global\n\t * @public\n\t */\n\n\t/**\n\t * Converts the given token or token stream to an HTML representation.\n\t *\n\t * The following hooks will be run:\n\t * 1. `wrap`: On each {@link Token}.\n\t *\n\t * @param {string | Token | TokenStream} o The token or token stream to be converted.\n\t * @param {string} language The name of current language.\n\t * @returns {string} The HTML representation of the token or token stream.\n\t * @memberof Token\n\t * @static\n\t */\n\tToken.stringify = function stringify(o, language) {\n\t\tif (typeof o == 'string') {\n\t\t\treturn o;\n\t\t}\n\t\tif (Array.isArray(o)) {\n\t\t\tvar s = '';\n\t\t\to.forEach(function (e) {\n\t\t\t\ts += stringify(e, language);\n\t\t\t});\n\t\t\treturn s;\n\t\t}\n\n\t\tvar env = {\n\t\t\ttype: o.type,\n\t\t\tcontent: stringify(o.content, language),\n\t\t\ttag: 'span',\n\t\t\tclasses: ['token', o.type],\n\t\t\tattributes: {},\n\t\t\tlanguage: language\n\t\t};\n\n\t\tvar aliases = o.alias;\n\t\tif (aliases) {\n\t\t\tif (Array.isArray(aliases)) {\n\t\t\t\tArray.prototype.push.apply(env.classes, aliases);\n\t\t\t} else {\n\t\t\t\tenv.classes.push(aliases);\n\t\t\t}\n\t\t}\n\n\t\t_.hooks.run('wrap', env);\n\n\t\tvar attributes = '';\n\t\tfor (var name in env.attributes) {\n\t\t\tattributes += ' ' + name + '=\"' + (env.attributes[name] || '').replace(/\"/g, '&quot;') + '\"';\n\t\t}\n\n\t\treturn '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\"' + attributes + '>' + env.content + '</' + env.tag + '>';\n\t};\n\n\t/**\n\t * @param {RegExp} pattern\n\t * @param {number} pos\n\t * @param {string} text\n\t * @param {boolean} lookbehind\n\t * @returns {RegExpExecArray | null}\n\t */\n\tfunction matchPattern(pattern, pos, text, lookbehind) {\n\t\tpattern.lastIndex = pos;\n\t\tvar match = pattern.exec(text);\n\t\tif (match && lookbehind && match[1]) {\n\t\t\t// change the match to remove the text matched by the Prism lookbehind group\n\t\t\tvar lookbehindLength = match[1].length;\n\t\t\tmatch.index += lookbehindLength;\n\t\t\tmatch[0] = match[0].slice(lookbehindLength);\n\t\t}\n\t\treturn match;\n\t}\n\n\t/**\n\t * @param {string} text\n\t * @param {LinkedList<string | Token>} tokenList\n\t * @param {any} grammar\n\t * @param {LinkedListNode<string | Token>} startNode\n\t * @param {number} startPos\n\t * @param {RematchOptions} [rematch]\n\t * @returns {void}\n\t * @private\n\t *\n\t * @typedef RematchOptions\n\t * @property {string} cause\n\t * @property {number} reach\n\t */\n\tfunction matchGrammar(text, tokenList, grammar, startNode, startPos, rematch) {\n\t\tfor (var token in grammar) {\n\t\t\tif (!grammar.hasOwnProperty(token) || !grammar[token]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar patterns = grammar[token];\n\t\t\tpatterns = Array.isArray(patterns) ? patterns : [patterns];\n\n\t\t\tfor (var j = 0; j < patterns.length; ++j) {\n\t\t\t\tif (rematch && rematch.cause == token + ',' + j) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar patternObj = patterns[j];\n\t\t\t\tvar inside = patternObj.inside;\n\t\t\t\tvar lookbehind = !!patternObj.lookbehind;\n\t\t\t\tvar greedy = !!patternObj.greedy;\n\t\t\t\tvar alias = patternObj.alias;\n\n\t\t\t\tif (greedy && !patternObj.pattern.global) {\n\t\t\t\t\t// Without the global flag, lastIndex won't work\n\t\t\t\t\tvar flags = patternObj.pattern.toString().match(/[imsuy]*$/)[0];\n\t\t\t\t\tpatternObj.pattern = RegExp(patternObj.pattern.source, flags + 'g');\n\t\t\t\t}\n\n\t\t\t\t/** @type {RegExp} */\n\t\t\t\tvar pattern = patternObj.pattern || patternObj;\n\n\t\t\t\tfor ( // iterate the token list and keep track of the current token/string position\n\t\t\t\t\tvar currentNode = startNode.next, pos = startPos;\n\t\t\t\t\tcurrentNode !== tokenList.tail;\n\t\t\t\t\tpos += currentNode.value.length, currentNode = currentNode.next\n\t\t\t\t) {\n\n\t\t\t\t\tif (rematch && pos >= rematch.reach) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar str = currentNode.value;\n\n\t\t\t\t\tif (tokenList.length > text.length) {\n\t\t\t\t\t\t// Something went terribly wrong, ABORT, ABORT!\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (str instanceof Token) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeCount = 1; // this is the to parameter of removeBetween\n\t\t\t\t\tvar match;\n\n\t\t\t\t\tif (greedy) {\n\t\t\t\t\t\tmatch = matchPattern(pattern, pos, text, lookbehind);\n\t\t\t\t\t\tif (!match || match.index >= text.length) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar from = match.index;\n\t\t\t\t\t\tvar to = match.index + match[0].length;\n\t\t\t\t\t\tvar p = pos;\n\n\t\t\t\t\t\t// find the node that contains the match\n\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\twhile (from >= p) {\n\t\t\t\t\t\t\tcurrentNode = currentNode.next;\n\t\t\t\t\t\t\tp += currentNode.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// adjust pos (and p)\n\t\t\t\t\t\tp -= currentNode.value.length;\n\t\t\t\t\t\tpos = p;\n\n\t\t\t\t\t\t// the current node is a Token, then the match starts inside another Token, which is invalid\n\t\t\t\t\t\tif (currentNode.value instanceof Token) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// find the last node which is affected by this match\n\t\t\t\t\t\tfor (\n\t\t\t\t\t\t\tvar k = currentNode;\n\t\t\t\t\t\t\tk !== tokenList.tail && (p < to || typeof k.value === 'string');\n\t\t\t\t\t\t\tk = k.next\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tremoveCount++;\n\t\t\t\t\t\t\tp += k.value.length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tremoveCount--;\n\n\t\t\t\t\t\t// replace with the new match\n\t\t\t\t\t\tstr = text.slice(pos, p);\n\t\t\t\t\t\tmatch.index -= pos;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmatch = matchPattern(pattern, 0, str, lookbehind);\n\t\t\t\t\t\tif (!match) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// eslint-disable-next-line no-redeclare\n\t\t\t\t\tvar from = match.index;\n\t\t\t\t\tvar matchStr = match[0];\n\t\t\t\t\tvar before = str.slice(0, from);\n\t\t\t\t\tvar after = str.slice(from + matchStr.length);\n\n\t\t\t\t\tvar reach = pos + str.length;\n\t\t\t\t\tif (rematch && reach > rematch.reach) {\n\t\t\t\t\t\trematch.reach = reach;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar removeFrom = currentNode.prev;\n\n\t\t\t\t\tif (before) {\n\t\t\t\t\t\tremoveFrom = addAfter(tokenList, removeFrom, before);\n\t\t\t\t\t\tpos += before.length;\n\t\t\t\t\t}\n\n\t\t\t\t\tremoveRange(tokenList, removeFrom, removeCount);\n\n\t\t\t\t\tvar wrapped = new Token(token, inside ? _.tokenize(matchStr, inside) : matchStr, alias, matchStr);\n\t\t\t\t\tcurrentNode = addAfter(tokenList, removeFrom, wrapped);\n\n\t\t\t\t\tif (after) {\n\t\t\t\t\t\taddAfter(tokenList, currentNode, after);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (removeCount > 1) {\n\t\t\t\t\t\t// at least one Token object was removed, so we have to do some rematching\n\t\t\t\t\t\t// this can only happen if the current pattern is greedy\n\n\t\t\t\t\t\t/** @type {RematchOptions} */\n\t\t\t\t\t\tvar nestedRematch = {\n\t\t\t\t\t\t\tcause: token + ',' + j,\n\t\t\t\t\t\t\treach: reach\n\t\t\t\t\t\t};\n\t\t\t\t\t\tmatchGrammar(text, tokenList, grammar, currentNode.prev, pos, nestedRematch);\n\n\t\t\t\t\t\t// the reach might have been extended because of the rematching\n\t\t\t\t\t\tif (rematch && nestedRematch.reach > rematch.reach) {\n\t\t\t\t\t\t\trematch.reach = nestedRematch.reach;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @typedef LinkedListNode\n\t * @property {T} value\n\t * @property {LinkedListNode<T> | null} prev The previous node.\n\t * @property {LinkedListNode<T> | null} next The next node.\n\t * @template T\n\t * @private\n\t */\n\n\t/**\n\t * @template T\n\t * @private\n\t */\n\tfunction LinkedList() {\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar head = { value: null, prev: null, next: null };\n\t\t/** @type {LinkedListNode<T>} */\n\t\tvar tail = { value: null, prev: head, next: null };\n\t\thead.next = tail;\n\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.head = head;\n\t\t/** @type {LinkedListNode<T>} */\n\t\tthis.tail = tail;\n\t\tthis.length = 0;\n\t}\n\n\t/**\n\t * Adds a new node with the given value to the list.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {T} value\n\t * @returns {LinkedListNode<T>} The added node.\n\t * @template T\n\t */\n\tfunction addAfter(list, node, value) {\n\t\t// assumes that node != list.tail && values.length >= 0\n\t\tvar next = node.next;\n\n\t\tvar newNode = { value: value, prev: node, next: next };\n\t\tnode.next = newNode;\n\t\tnext.prev = newNode;\n\t\tlist.length++;\n\n\t\treturn newNode;\n\t}\n\t/**\n\t * Removes `count` nodes after the given node. The given node will not be removed.\n\t *\n\t * @param {LinkedList<T>} list\n\t * @param {LinkedListNode<T>} node\n\t * @param {number} count\n\t * @template T\n\t */\n\tfunction removeRange(list, node, count) {\n\t\tvar next = node.next;\n\t\tfor (var i = 0; i < count && next !== list.tail; i++) {\n\t\t\tnext = next.next;\n\t\t}\n\t\tnode.next = next;\n\t\tnext.prev = node;\n\t\tlist.length -= i;\n\t}\n\t/**\n\t * @param {LinkedList<T>} list\n\t * @returns {T[]}\n\t * @template T\n\t */\n\tfunction toArray(list) {\n\t\tvar array = [];\n\t\tvar node = list.head.next;\n\t\twhile (node !== list.tail) {\n\t\t\tarray.push(node.value);\n\t\t\tnode = node.next;\n\t\t}\n\t\treturn array;\n\t}\n\n\n\tif (!_self.document) {\n\t\tif (!_self.addEventListener) {\n\t\t\t// in Node.js\n\t\t\treturn _;\n\t\t}\n\n\t\tif (!_.disableWorkerMessageHandler) {\n\t\t\t// In worker\n\t\t\t_self.addEventListener('message', function (evt) {\n\t\t\t\tvar message = JSON.parse(evt.data);\n\t\t\t\tvar lang = message.language;\n\t\t\t\tvar code = message.code;\n\t\t\t\tvar immediateClose = message.immediateClose;\n\n\t\t\t\t_self.postMessage(_.highlight(code, _.languages[lang], lang));\n\t\t\t\tif (immediateClose) {\n\t\t\t\t\t_self.close();\n\t\t\t\t}\n\t\t\t}, false);\n\t\t}\n\n\t\treturn _;\n\t}\n\n\t// Get current script and highlight\n\tvar script = _.util.currentScript();\n\n\tif (script) {\n\t\t_.filename = script.src;\n\n\t\tif (script.hasAttribute('data-manual')) {\n\t\t\t_.manual = true;\n\t\t}\n\t}\n\n\tfunction highlightAutomaticallyCallback() {\n\t\tif (!_.manual) {\n\t\t\t_.highlightAll();\n\t\t}\n\t}\n\n\tif (!_.manual) {\n\t\t// If the document state is \"loading\", then we'll use DOMContentLoaded.\n\t\t// If the document state is \"interactive\" and the prism.js script is deferred, then we'll also use the\n\t\t// DOMContentLoaded event because there might be some plugins or languages which have also been deferred and they\n\t\t// might take longer one animation frame to execute which can create a race condition where only some plugins have\n\t\t// been loaded when Prism.highlightAll() is executed, depending on how fast resources are loaded.\n\t\t// See https://github.com/PrismJS/prism/issues/2102\n\t\tvar readyState = document.readyState;\n\t\tif (readyState === 'loading' || readyState === 'interactive' && script && script.defer) {\n\t\t\tdocument.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback);\n\t\t} else {\n\t\t\tif (window.requestAnimationFrame) {\n\t\t\t\twindow.requestAnimationFrame(highlightAutomaticallyCallback);\n\t\t\t} else {\n\t\t\t\twindow.setTimeout(highlightAutomaticallyCallback, 16);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn _;\n\n}(_self));\n\nif (typeof module !== 'undefined' && module.exports) {\n\tmodule.exports = Prism;\n}\n\n// hack for components to work correctly in node.js\nif (typeof global !== 'undefined') {\n\tglobal.Prism = Prism;\n}\n\n// some additional documentation/types\n\n/**\n * The expansion of a simple `RegExp` literal to support additional properties.\n *\n * @typedef GrammarToken\n * @property {RegExp} pattern The regular expression of the token.\n * @property {boolean} [lookbehind=false] If `true`, then the first capturing group of `pattern` will (effectively)\n * behave as a lookbehind group meaning that the captured text will not be part of the matched text of the new token.\n * @property {boolean} [greedy=false] Whether the token is greedy.\n * @property {string|string[]} [alias] An optional alias or list of aliases.\n * @property {Grammar} [inside] The nested grammar of this token.\n *\n * The `inside` grammar will be used to tokenize the text value of each token of this kind.\n *\n * This can be used to make nested and even recursive language definitions.\n *\n * Note: This can cause infinite recursion. Be careful when you embed different languages or even the same language into\n * each another.\n * @global\n * @public\n */\n\n/**\n * @typedef Grammar\n * @type {Object<string, RegExp | GrammarToken | Array<RegExp | GrammarToken>>}\n * @property {Grammar} [rest] An optional grammar object that will be appended to this grammar.\n * @global\n * @public\n */\n\n/**\n * A function which will invoked after an element was successfully highlighted.\n *\n * @callback HighlightCallback\n * @param {Element} element The element successfully highlighted.\n * @returns {void}\n * @global\n * @public\n */\n\n/**\n * @callback HookCallback\n * @param {Object<string, any>} env The environment variables of the hook.\n * @returns {void}\n * @global\n * @public\n */\n\n\n/* **********************************************\n     Begin prism-markup.js\n********************************************** */\n\nPrism.languages.markup = {\n\t'comment': {\n\t\tpattern: /<!--(?:(?!<!--)[\\s\\S])*?-->/,\n\t\tgreedy: true\n\t},\n\t'prolog': {\n\t\tpattern: /<\\?[\\s\\S]+?\\?>/,\n\t\tgreedy: true\n\t},\n\t'doctype': {\n\t\t// https://www.w3.org/TR/xml/#NT-doctypedecl\n\t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\\]\\s*)?>/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'internal-subset': {\n\t\t\t\tpattern: /(^[^\\[]*\\[)[\\s\\S]+(?=\\]>$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t'string': {\n\t\t\t\tpattern: /\"[^\"]*\"|'[^']*'/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t'punctuation': /^<!|>$|[[\\]]/,\n\t\t\t'doctype-tag': /^DOCTYPE/i,\n\t\t\t'name': /[^\\s<>'\"]+/\n\t\t}\n\t},\n\t'cdata': {\n\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\tgreedy: true\n\t},\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'special-attr': [],\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': [\n\t\t{\n\t\t\tpattern: /&[\\da-z]{1,8};/i,\n\t\t\talias: 'named-entity'\n\t\t},\n\t\t/&#x?[\\da-f]{1,8};/i\n\t]\n};\n\nPrism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n\tPrism.languages.markup['entity'];\nPrism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function (env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&amp;/, '&');\n\t}\n});\n\nObject.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n\t/**\n\t * Adds an inlined language to markup.\n\t *\n\t * An example of an inlined language is CSS with `<style>` tags.\n\t *\n\t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addInlined('style', 'css');\n\t */\n\tvalue: function addInlined(tagName, lang) {\n\t\tvar includedCdataInside = {};\n\t\tincludedCdataInside['language-' + lang] = {\n\t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n\t\tvar inside = {\n\t\t\t'included-cdata': {\n\t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\t\t\tinside: includedCdataInside\n\t\t\t}\n\t\t};\n\t\tinside['language-' + lang] = {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\n\t\tvar def = {};\n\t\tdef[tagName] = {\n\t\t\tpattern: RegExp(/(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: inside\n\t\t};\n\n\t\tPrism.languages.insertBefore('markup', 'cdata', def);\n\t}\n});\nObject.defineProperty(Prism.languages.markup.tag, 'addAttribute', {\n\t/**\n\t * Adds an pattern to highlight languages embedded in HTML attributes.\n\t *\n\t * An example of an inlined language is CSS with `style` attributes.\n\t *\n\t * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addAttribute('style', 'css');\n\t */\n\tvalue: function (attrName, lang) {\n\t\tPrism.languages.markup.tag.inside['special-attr'].push({\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[\"'\\s])/.source + '(?:' + attrName + ')' + /\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))/.source,\n\t\t\t\t'i'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attr-name': /^[^\\s=]+/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /=[\\s\\S]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'value': {\n\t\t\t\t\t\t\tpattern: /(^=\\s*([\"']|(?![\"'])))\\S[\\s\\S]*(?=\\2$)/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: [lang, 'language-' + lang],\n\t\t\t\t\t\t\tinside: Prism.languages[lang]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/\"|'/\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\nPrism.languages.xml = Prism.languages.extend('markup', {});\nPrism.languages.ssml = Prism.languages.xml;\nPrism.languages.atom = Prism.languages.xml;\nPrism.languages.rss = Prism.languages.xml;\n\n\n/* **********************************************\n     Begin prism-css.js\n********************************************** */\n\n(function (Prism) {\n\n\tvar string = /(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/;\n\n\tPrism.languages.css = {\n\t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n\t\t'atrule': {\n\t\t\tpattern: RegExp('@[\\\\w-](?:' + /[^;{\\s\"']|\\s+(?!\\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\\s*\\{))/.source),\n\t\t\tinside: {\n\t\t\t\t'rule': /^@[\\w-]+/,\n\t\t\t\t'selector-function-argument': {\n\t\t\t\t\tpattern: /(\\bselector\\s*\\(\\s*(?![\\s)]))(?:[^()\\s]|\\s+(?![\\s)])|\\((?:[^()]|\\([^()]*\\))*\\))+(?=\\s*\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t'url': {\n\t\t\t// https://drafts.csswg.org/css-values-3/#urls\n\t\t\tpattern: RegExp('\\\\burl\\\\((?:' + string.source + '|' + /(?:[^\\\\\\r\\n()\"']|\\\\[\\s\\S])*/.source + ')\\\\)', 'i'),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^url/i,\n\t\t\t\t'punctuation': /^\\(|\\)$/,\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: RegExp('^' + string.source + '$'),\n\t\t\t\t\talias: 'url'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'selector': {\n\t\t\tpattern: RegExp('(^|[{}\\\\s])[^{}\\\\s](?:[^{};\"\\'\\\\s]|\\\\s+(?![\\\\s{])|' + string.source + ')*(?=\\\\s*\\\\{)'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: string,\n\t\t\tgreedy: true\n\t\t},\n\t\t'property': {\n\t\t\tpattern: /(^|[^-\\w\\xA0-\\uFFFF])(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*(?=\\s*:)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'important': /!important\\b/i,\n\t\t'function': {\n\t\t\tpattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\\()/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[(){};:,]/\n\t};\n\n\tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n\tvar markup = Prism.languages.markup;\n\tif (markup) {\n\t\tmarkup.tag.addInlined('style', 'css');\n\t\tmarkup.tag.addAttribute('style', 'css');\n\t}\n\n}(Prism));\n\n\n/* **********************************************\n     Begin prism-clike.js\n********************************************** */\n\nPrism.languages.clike = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|trait)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /[.\\\\]/\n\t\t}\n\t},\n\t'keyword': /\\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'function': /\\b\\w+(?=\\()/,\n\t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n\t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\n\n/* **********************************************\n     Begin prism-javascript.js\n********************************************** */\n\nPrism.languages.javascript = Prism.languages.extend('clike', {\n\t'class-name': [\n\t\tPrism.languages.clike['class-name'],\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$A-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\.(?:constructor|prototype))/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /((?:^|\\})\\s*)catch\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|assert(?=\\s*\\{)|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\\s*(?:\\{|$))|for|from(?=\\s*(?:['\"]|$))|function|(?:get|set)(?=\\s*(?:[#\\[$\\w\\xA0-\\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t],\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n\t'number': {\n\t\tpattern: RegExp(\n\t\t\t/(^|[^\\w$])/.source +\n\t\t\t'(?:' +\n\t\t\t(\n\t\t\t\t// constant\n\t\t\t\t/NaN|Infinity/.source +\n\t\t\t\t'|' +\n\t\t\t\t// binary integer\n\t\t\t\t/0[bB][01]+(?:_[01]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// octal integer\n\t\t\t\t/0[oO][0-7]+(?:_[0-7]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// hexadecimal integer\n\t\t\t\t/0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal bigint\n\t\t\t\t/\\d+(?:_\\d+)*n/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal number (integer or float) but no bigint\n\t\t\t\t/(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?/.source\n\t\t\t) +\n\t\t\t')' +\n\t\t\t/(?![\\w$])/.source\n\t\t),\n\t\tlookbehind: true\n\t},\n\t'operator': /--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/\n});\n\nPrism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|extends|implements|instanceof|interface|new)\\s+)[\\w.\\\\]+/;\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: RegExp(\n\t\t\t// lookbehind\n\t\t\t// eslint-disable-next-line regexp/no-dupe-characters-character-class\n\t\t\t/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/.source +\n\t\t\t// Regex pattern:\n\t\t\t// There are 2 regex patterns here. The RegExp set notation proposal added support for nested character\n\t\t\t// classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible\n\t\t\t// with the only syntax, so we have to define 2 different regex patterns.\n\t\t\t/\\//.source +\n\t\t\t'(?:' +\n\t\t\t/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}/.source +\n\t\t\t'|' +\n\t\t\t// `v` flag syntax. This supports 3 levels of nested character classes.\n\t\t\t/(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source +\n\t\t\t')' +\n\t\t\t// lookahead\n\t\t\t/(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/.source\n\t\t),\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'regex-source': {\n\t\t\t\tpattern: /^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'language-regex',\n\t\t\t\tinside: Prism.languages.regex\n\t\t\t},\n\t\t\t'regex-delimiter': /^\\/|\\/$/,\n\t\t\t'regex-flags': /^[a-z]+$/,\n\t\t}\n\t},\n\t// This must be declared before keyword because we use \"function\" inside the look-forward\n\t'function-variable': {\n\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,\n\t\talias: 'function'\n\t},\n\t'parameter': [\n\t\t{\n\t\t\tpattern: /(function(?:\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)?\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\))/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*=>)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*\\{)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t}\n\t],\n\t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'hashbang': {\n\t\tpattern: /^#!.*/,\n\t\tgreedy: true,\n\t\talias: 'comment'\n\t},\n\t'template-string': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'template-punctuation': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'string-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'operator', {\n\t'literal-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.markup.tag.addInlined('script', 'javascript');\n\n\t// add attribute support for all DOM events.\n\t// https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events\n\tPrism.languages.markup.tag.addAttribute(\n\t\t/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,\n\t\t'javascript'\n\t);\n}\n\nPrism.languages.js = Prism.languages.javascript;\n\n\n/* **********************************************\n     Begin prism-file-highlight.js\n********************************************** */\n\n(function () {\n\n\tif (typeof Prism === 'undefined' || typeof document === 'undefined') {\n\t\treturn;\n\t}\n\n\t// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\n\tif (!Element.prototype.matches) {\n\t\tElement.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\t}\n\n\tvar LOADING_MESSAGE = 'Loading…';\n\tvar FAILURE_MESSAGE = function (status, message) {\n\t\treturn '✖ Error ' + status + ' while fetching file: ' + message;\n\t};\n\tvar FAILURE_EMPTY_MESSAGE = '✖ Error: File does not exist or is empty';\n\n\tvar EXTENSIONS = {\n\t\t'js': 'javascript',\n\t\t'py': 'python',\n\t\t'rb': 'ruby',\n\t\t'ps1': 'powershell',\n\t\t'psm1': 'powershell',\n\t\t'sh': 'bash',\n\t\t'bat': 'batch',\n\t\t'h': 'c',\n\t\t'tex': 'latex'\n\t};\n\n\tvar STATUS_ATTR = 'data-src-status';\n\tvar STATUS_LOADING = 'loading';\n\tvar STATUS_LOADED = 'loaded';\n\tvar STATUS_FAILED = 'failed';\n\n\tvar SELECTOR = 'pre[data-src]:not([' + STATUS_ATTR + '=\"' + STATUS_LOADED + '\"])'\n\t\t+ ':not([' + STATUS_ATTR + '=\"' + STATUS_LOADING + '\"])';\n\n\t/**\n\t * Loads the given file.\n\t *\n\t * @param {string} src The URL or path of the source file to load.\n\t * @param {(result: string) => void} success\n\t * @param {(reason: string) => void} error\n\t */\n\tfunction loadFile(src, success, error) {\n\t\tvar xhr = new XMLHttpRequest();\n\t\txhr.open('GET', src, true);\n\t\txhr.onreadystatechange = function () {\n\t\t\tif (xhr.readyState == 4) {\n\t\t\t\tif (xhr.status < 400 && xhr.responseText) {\n\t\t\t\t\tsuccess(xhr.responseText);\n\t\t\t\t} else {\n\t\t\t\t\tif (xhr.status >= 400) {\n\t\t\t\t\t\terror(FAILURE_MESSAGE(xhr.status, xhr.statusText));\n\t\t\t\t\t} else {\n\t\t\t\t\t\terror(FAILURE_EMPTY_MESSAGE);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\txhr.send(null);\n\t}\n\n\t/**\n\t * Parses the given range.\n\t *\n\t * This returns a range with inclusive ends.\n\t *\n\t * @param {string | null | undefined} range\n\t * @returns {[number, number | undefined] | undefined}\n\t */\n\tfunction parseRange(range) {\n\t\tvar m = /^\\s*(\\d+)\\s*(?:(,)\\s*(?:(\\d+)\\s*)?)?$/.exec(range || '');\n\t\tif (m) {\n\t\t\tvar start = Number(m[1]);\n\t\t\tvar comma = m[2];\n\t\t\tvar end = m[3];\n\n\t\t\tif (!comma) {\n\t\t\t\treturn [start, start];\n\t\t\t}\n\t\t\tif (!end) {\n\t\t\t\treturn [start, undefined];\n\t\t\t}\n\t\t\treturn [start, Number(end)];\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tPrism.hooks.add('before-highlightall', function (env) {\n\t\tenv.selector += ', ' + SELECTOR;\n\t});\n\n\tPrism.hooks.add('before-sanity-check', function (env) {\n\t\tvar pre = /** @type {HTMLPreElement} */ (env.element);\n\t\tif (pre.matches(SELECTOR)) {\n\t\t\tenv.code = ''; // fast-path the whole thing and go to complete\n\n\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADING); // mark as loading\n\n\t\t\t// add code element with loading message\n\t\t\tvar code = pre.appendChild(document.createElement('CODE'));\n\t\t\tcode.textContent = LOADING_MESSAGE;\n\n\t\t\tvar src = pre.getAttribute('data-src');\n\n\t\t\tvar language = env.language;\n\t\t\tif (language === 'none') {\n\t\t\t\t// the language might be 'none' because there is no language set;\n\t\t\t\t// in this case, we want to use the extension as the language\n\t\t\t\tvar extension = (/\\.(\\w+)$/.exec(src) || [, 'none'])[1];\n\t\t\t\tlanguage = EXTENSIONS[extension] || extension;\n\t\t\t}\n\n\t\t\t// set language classes\n\t\t\tPrism.util.setLanguage(code, language);\n\t\t\tPrism.util.setLanguage(pre, language);\n\n\t\t\t// preload the language\n\t\t\tvar autoloader = Prism.plugins.autoloader;\n\t\t\tif (autoloader) {\n\t\t\t\tautoloader.loadLanguages(language);\n\t\t\t}\n\n\t\t\t// load file\n\t\t\tloadFile(\n\t\t\t\tsrc,\n\t\t\t\tfunction (text) {\n\t\t\t\t\t// mark as loaded\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_LOADED);\n\n\t\t\t\t\t// handle data-range\n\t\t\t\t\tvar range = parseRange(pre.getAttribute('data-range'));\n\t\t\t\t\tif (range) {\n\t\t\t\t\t\tvar lines = text.split(/\\r\\n?|\\n/g);\n\n\t\t\t\t\t\t// the range is one-based and inclusive on both ends\n\t\t\t\t\t\tvar start = range[0];\n\t\t\t\t\t\tvar end = range[1] == null ? lines.length : range[1];\n\n\t\t\t\t\t\tif (start < 0) { start += lines.length; }\n\t\t\t\t\t\tstart = Math.max(0, Math.min(start - 1, lines.length));\n\t\t\t\t\t\tif (end < 0) { end += lines.length; }\n\t\t\t\t\t\tend = Math.max(0, Math.min(end, lines.length));\n\n\t\t\t\t\t\ttext = lines.slice(start, end).join('\\n');\n\n\t\t\t\t\t\t// add data-start for line numbers\n\t\t\t\t\t\tif (!pre.hasAttribute('data-start')) {\n\t\t\t\t\t\t\tpre.setAttribute('data-start', String(start + 1));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// highlight code\n\t\t\t\t\tcode.textContent = text;\n\t\t\t\t\tPrism.highlightElement(code);\n\t\t\t\t},\n\t\t\t\tfunction (error) {\n\t\t\t\t\t// mark as failed\n\t\t\t\t\tpre.setAttribute(STATUS_ATTR, STATUS_FAILED);\n\n\t\t\t\t\tcode.textContent = error;\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t});\n\n\tPrism.plugins.fileHighlight = {\n\t\t/**\n\t\t * Executes the File Highlight plugin for all matching `pre` elements under the given container.\n\t\t *\n\t\t * Note: Elements which are already loaded or currently loading will not be touched by this method.\n\t\t *\n\t\t * @param {ParentNode} [container=document]\n\t\t */\n\t\thighlight: function highlight(container) {\n\t\t\tvar elements = (container || document).querySelectorAll(SELECTOR);\n\n\t\t\tfor (var i = 0, element; (element = elements[i++]);) {\n\t\t\t\tPrism.highlightElement(element);\n\t\t\t}\n\t\t}\n\t};\n\n\tvar logged = false;\n\t/** @deprecated Use `Prism.plugins.fileHighlight.highlight` instead. */\n\tPrism.fileHighlight = function () {\n\t\tif (!logged) {\n\t\t\tconsole.warn('Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead.');\n\t\t\tlogged = true;\n\t\t}\n\t\tPrism.plugins.fileHighlight.highlight.apply(this, arguments);\n\t};\n\n}());\n","Prism.languages.clike = {\n\t'comment': [\n\t\t{\n\t\t\tpattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t}\n\t],\n\t'string': {\n\t\tpattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|trait)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /[.\\\\]/\n\t\t}\n\t},\n\t'keyword': /\\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'function': /\\b\\w+(?=\\()/,\n\t'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n\t'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n","Prism.languages.javascript = Prism.languages.extend('clike', {\n\t'class-name': [\n\t\tPrism.languages.clike['class-name'],\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$A-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\.(?:constructor|prototype))/,\n\t\t\tlookbehind: true\n\t\t}\n\t],\n\t'keyword': [\n\t\t{\n\t\t\tpattern: /((?:^|\\})\\s*)catch\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|assert(?=\\s*\\{)|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\\s*(?:\\{|$))|for|from(?=\\s*(?:['\"]|$))|function|(?:get|set)(?=\\s*(?:[#\\[$\\w\\xA0-\\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n\t\t\tlookbehind: true\n\t\t},\n\t],\n\t// Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n\t'function': /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n\t'number': {\n\t\tpattern: RegExp(\n\t\t\t/(^|[^\\w$])/.source +\n\t\t\t'(?:' +\n\t\t\t(\n\t\t\t\t// constant\n\t\t\t\t/NaN|Infinity/.source +\n\t\t\t\t'|' +\n\t\t\t\t// binary integer\n\t\t\t\t/0[bB][01]+(?:_[01]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// octal integer\n\t\t\t\t/0[oO][0-7]+(?:_[0-7]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// hexadecimal integer\n\t\t\t\t/0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal bigint\n\t\t\t\t/\\d+(?:_\\d+)*n/.source +\n\t\t\t\t'|' +\n\t\t\t\t// decimal number (integer or float) but no bigint\n\t\t\t\t/(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?/.source\n\t\t\t) +\n\t\t\t')' +\n\t\t\t/(?![\\w$])/.source\n\t\t),\n\t\tlookbehind: true\n\t},\n\t'operator': /--|\\+\\+|\\*\\*=?|=>|&&=?|\\|\\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?\\?=?|\\?\\.?|[~:]/\n});\n\nPrism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|extends|implements|instanceof|interface|new)\\s+)[\\w.\\\\]+/;\n\nPrism.languages.insertBefore('javascript', 'keyword', {\n\t'regex': {\n\t\tpattern: RegExp(\n\t\t\t// lookbehind\n\t\t\t// eslint-disable-next-line regexp/no-dupe-characters-character-class\n\t\t\t/((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/.source +\n\t\t\t// Regex pattern:\n\t\t\t// There are 2 regex patterns here. The RegExp set notation proposal added support for nested character\n\t\t\t// classes if the `v` flag is present. Unfortunately, nested CCs are both context-free and incompatible\n\t\t\t// with the only syntax, so we have to define 2 different regex patterns.\n\t\t\t/\\//.source +\n\t\t\t'(?:' +\n\t\t\t/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}/.source +\n\t\t\t'|' +\n\t\t\t// `v` flag syntax. This supports 3 levels of nested character classes.\n\t\t\t/(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source +\n\t\t\t')' +\n\t\t\t// lookahead\n\t\t\t/(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/.source\n\t\t),\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'regex-source': {\n\t\t\t\tpattern: /^(\\/)[\\s\\S]+(?=\\/[a-z]*$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'language-regex',\n\t\t\t\tinside: Prism.languages.regex\n\t\t\t},\n\t\t\t'regex-delimiter': /^\\/|\\/$/,\n\t\t\t'regex-flags': /^[a-z]+$/,\n\t\t}\n\t},\n\t// This must be declared before keyword because we use \"function\" inside the look-forward\n\t'function-variable': {\n\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)\\s*=>))/,\n\t\talias: 'function'\n\t},\n\t'parameter': [\n\t\t{\n\t\t\tpattern: /(function(?:\\s+(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*)?\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\))/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(^|[^$\\w\\xA0-\\uFFFF])(?!\\s)[_$a-z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*=>)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /(\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*=>)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t},\n\t\t{\n\t\t\tpattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*)\\(\\s*|\\]\\s*\\(\\s*)(?!\\s)(?:[^()\\s]|\\s+(?![\\s)])|\\([^()]*\\))+(?=\\s*\\)\\s*\\{)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages.javascript\n\t\t}\n\t],\n\t'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n});\n\nPrism.languages.insertBefore('javascript', 'string', {\n\t'hashbang': {\n\t\tpattern: /^#!.*/,\n\t\tgreedy: true,\n\t\talias: 'comment'\n\t},\n\t'template-string': {\n\t\tpattern: /`(?:\\\\[\\s\\S]|\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}|(?!\\$\\{)[^\\\\`])*`/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'template-punctuation': {\n\t\t\t\tpattern: /^`|`$/,\n\t\t\t\talias: 'string'\n\t\t\t},\n\t\t\t'interpolation': {\n\t\t\t\tpattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\$\\{(?:[^{}]|\\{(?:[^{}]|\\{[^}]*\\})*\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\t\tpattern: /^\\$\\{|\\}$/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: Prism.languages.javascript\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'string-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\2)[^\\\\\\r\\n])*\\2(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property'\n\t}\n});\n\nPrism.languages.insertBefore('javascript', 'operator', {\n\t'literal-property': {\n\t\tpattern: /((?:^|[,{])[ \\t]*)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?=\\s*:)/m,\n\t\tlookbehind: true,\n\t\talias: 'property'\n\t},\n});\n\nif (Prism.languages.markup) {\n\tPrism.languages.markup.tag.addInlined('script', 'javascript');\n\n\t// add attribute support for all DOM events.\n\t// https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events\n\tPrism.languages.markup.tag.addAttribute(\n\t\t/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,\n\t\t'javascript'\n\t);\n}\n\nPrism.languages.js = Prism.languages.javascript;\n","Prism.languages.markup = {\n\t'comment': {\n\t\tpattern: /<!--(?:(?!<!--)[\\s\\S])*?-->/,\n\t\tgreedy: true\n\t},\n\t'prolog': {\n\t\tpattern: /<\\?[\\s\\S]+?\\?>/,\n\t\tgreedy: true\n\t},\n\t'doctype': {\n\t\t// https://www.w3.org/TR/xml/#NT-doctypedecl\n\t\tpattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:[^<\"'\\]]|\"[^\"]*\"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\\]\\s*)?>/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'internal-subset': {\n\t\t\t\tpattern: /(^[^\\[]*\\[)[\\s\\S]+(?=\\]>$)/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t'string': {\n\t\t\t\tpattern: /\"[^\"]*\"|'[^']*'/,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t'punctuation': /^<!|>$|[[\\]]/,\n\t\t\t'doctype-tag': /^DOCTYPE/i,\n\t\t\t'name': /[^\\s<>'\"]+/\n\t\t}\n\t},\n\t'cdata': {\n\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\tgreedy: true\n\t},\n\t'tag': {\n\t\tpattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'tag': {\n\t\t\t\tpattern: /^<\\/?[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /^<\\/?/,\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t},\n\t\t\t'special-attr': [],\n\t\t\t'attr-value': {\n\t\t\t\tpattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpattern: /^(\\s*)[\"']|[\"']$/,\n\t\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\/?>/,\n\t\t\t'attr-name': {\n\t\t\t\tpattern: /[^\\s>\\/]+/,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': /^[^\\s>\\/:]+:/\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t'entity': [\n\t\t{\n\t\t\tpattern: /&[\\da-z]{1,8};/i,\n\t\t\talias: 'named-entity'\n\t\t},\n\t\t/&#x?[\\da-f]{1,8};/i\n\t]\n};\n\nPrism.languages.markup['tag'].inside['attr-value'].inside['entity'] =\n\tPrism.languages.markup['entity'];\nPrism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;\n\n// Plugin to make entity title show the real entity, idea by Roman Komarov\nPrism.hooks.add('wrap', function (env) {\n\n\tif (env.type === 'entity') {\n\t\tenv.attributes['title'] = env.content.replace(/&amp;/, '&');\n\t}\n});\n\nObject.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n\t/**\n\t * Adds an inlined language to markup.\n\t *\n\t * An example of an inlined language is CSS with `<style>` tags.\n\t *\n\t * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addInlined('style', 'css');\n\t */\n\tvalue: function addInlined(tagName, lang) {\n\t\tvar includedCdataInside = {};\n\t\tincludedCdataInside['language-' + lang] = {\n\t\t\tpattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n\t\t\tlookbehind: true,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\t\tincludedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n\n\t\tvar inside = {\n\t\t\t'included-cdata': {\n\t\t\t\tpattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n\t\t\t\tinside: includedCdataInside\n\t\t\t}\n\t\t};\n\t\tinside['language-' + lang] = {\n\t\t\tpattern: /[\\s\\S]+/,\n\t\t\tinside: Prism.languages[lang]\n\t\t};\n\n\t\tvar def = {};\n\t\tdef[tagName] = {\n\t\t\tpattern: RegExp(/(<__[^>]*>)(?:<!\\[CDATA\\[(?:[^\\]]|\\](?!\\]>))*\\]\\]>|(?!<!\\[CDATA\\[)[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: inside\n\t\t};\n\n\t\tPrism.languages.insertBefore('markup', 'cdata', def);\n\t}\n});\nObject.defineProperty(Prism.languages.markup.tag, 'addAttribute', {\n\t/**\n\t * Adds an pattern to highlight languages embedded in HTML attributes.\n\t *\n\t * An example of an inlined language is CSS with `style` attributes.\n\t *\n\t * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as\n\t * case insensitive.\n\t * @param {string} lang The language key.\n\t * @example\n\t * addAttribute('style', 'css');\n\t */\n\tvalue: function (attrName, lang) {\n\t\tPrism.languages.markup.tag.inside['special-attr'].push({\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[\"'\\s])/.source + '(?:' + attrName + ')' + /\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))/.source,\n\t\t\t\t'i'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'attr-name': /^[^\\s=]+/,\n\t\t\t\t'attr-value': {\n\t\t\t\t\tpattern: /=[\\s\\S]+/,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'value': {\n\t\t\t\t\t\t\tpattern: /(^=\\s*([\"']|(?![\"'])))\\S[\\s\\S]*(?=\\2$)/,\n\t\t\t\t\t\t\tlookbehind: true,\n\t\t\t\t\t\t\talias: [lang, 'language-' + lang],\n\t\t\t\t\t\t\tinside: Prism.languages[lang]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpattern: /^=/,\n\t\t\t\t\t\t\t\talias: 'attr-equals'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t/\"|'/\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n});\n\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n\nPrism.languages.xml = Prism.languages.extend('markup', {});\nPrism.languages.ssml = Prism.languages.xml;\nPrism.languages.atom = Prism.languages.xml;\nPrism.languages.rss = Prism.languages.xml;\n","(function (Prism) {\n\n\t// Allow only one line break\n\tvar inner = /(?:\\\\.|[^\\\\\\n\\r]|(?:\\n|\\r\\n?)(?![\\r\\n]))/.source;\n\n\t/**\n\t * This function is intended for the creation of the bold or italic pattern.\n\t *\n\t * This also adds a lookbehind group to the given pattern to ensure that the pattern is not backslash-escaped.\n\t *\n\t * _Note:_ Keep in mind that this adds a capturing group.\n\t *\n\t * @param {string} pattern\n\t * @returns {RegExp}\n\t */\n\tfunction createInline(pattern) {\n\t\tpattern = pattern.replace(/<inner>/g, function () { return inner; });\n\t\treturn RegExp(/((?:^|[^\\\\])(?:\\\\{2})*)/.source + '(?:' + pattern + ')');\n\t}\n\n\n\tvar tableCell = /(?:\\\\.|``(?:[^`\\r\\n]|`(?!`))+``|`[^`\\r\\n]+`|[^\\\\|\\r\\n`])+/.source;\n\tvar tableRow = /\\|?__(?:\\|__)+\\|?(?:(?:\\n|\\r\\n?)|(?![\\s\\S]))/.source.replace(/__/g, function () { return tableCell; });\n\tvar tableLine = /\\|?[ \\t]*:?-{3,}:?[ \\t]*(?:\\|[ \\t]*:?-{3,}:?[ \\t]*)+\\|?(?:\\n|\\r\\n?)/.source;\n\n\n\tPrism.languages.markdown = Prism.languages.extend('markup', {});\n\tPrism.languages.insertBefore('markdown', 'prolog', {\n\t\t'front-matter-block': {\n\t\t\tpattern: /(^(?:\\s*[\\r\\n])?)---(?!.)[\\s\\S]*?[\\r\\n]---(?!.)/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /^---|---$/,\n\t\t\t\t'front-matter': {\n\t\t\t\t\tpattern: /\\S+(?:\\s+\\S+)*/,\n\t\t\t\t\talias: ['yaml', 'language-yaml'],\n\t\t\t\t\tinside: Prism.languages.yaml\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'blockquote': {\n\t\t\t// > ...\n\t\t\tpattern: /^>(?:[\\t ]*>)*/m,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'table': {\n\t\t\tpattern: RegExp('^' + tableRow + tableLine + '(?:' + tableRow + ')*', 'm'),\n\t\t\tinside: {\n\t\t\t\t'table-data-rows': {\n\t\t\t\t\tpattern: RegExp('^(' + tableRow + tableLine + ')(?:' + tableRow + ')*$'),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'table-data': {\n\t\t\t\t\t\t\tpattern: RegExp(tableCell),\n\t\t\t\t\t\t\tinside: Prism.languages.markdown\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': /\\|/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'table-line': {\n\t\t\t\t\tpattern: RegExp('^(' + tableRow + ')' + tableLine + '$'),\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'punctuation': /\\||:?-{3,}:?/\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t'table-header-row': {\n\t\t\t\t\tpattern: RegExp('^' + tableRow + '$'),\n\t\t\t\t\tinside: {\n\t\t\t\t\t\t'table-header': {\n\t\t\t\t\t\t\tpattern: RegExp(tableCell),\n\t\t\t\t\t\t\talias: 'important',\n\t\t\t\t\t\t\tinside: Prism.languages.markdown\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'punctuation': /\\|/\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'code': [\n\t\t\t{\n\t\t\t\t// Prefixed by 4 spaces or 1 tab and preceded by an empty line\n\t\t\t\tpattern: /((?:^|\\n)[ \\t]*\\n|(?:^|\\r\\n?)[ \\t]*\\r\\n?)(?: {4}|\\t).+(?:(?:\\n|\\r\\n?)(?: {4}|\\t).+)*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'keyword'\n\t\t\t},\n\t\t\t{\n\t\t\t\t// ```optional language\n\t\t\t\t// code block\n\t\t\t\t// ```\n\t\t\t\tpattern: /^```[\\s\\S]*?^```$/m,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'code-block': {\n\t\t\t\t\t\tpattern: /^(```.*(?:\\n|\\r\\n?))[\\s\\S]+?(?=(?:\\n|\\r\\n?)^```$)/m,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t},\n\t\t\t\t\t'code-language': {\n\t\t\t\t\t\tpattern: /^(```).+/,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t},\n\t\t\t\t\t'punctuation': /```/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'title': [\n\t\t\t{\n\t\t\t\t// title 1\n\t\t\t\t// =======\n\n\t\t\t\t// title 2\n\t\t\t\t// -------\n\t\t\t\tpattern: /\\S.*(?:\\n|\\r\\n?)(?:==+|--+)(?=[ \\t]*$)/m,\n\t\t\t\talias: 'important',\n\t\t\t\tinside: {\n\t\t\t\t\tpunctuation: /==+$|--+$/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t// # title 1\n\t\t\t\t// ###### title 6\n\t\t\t\tpattern: /(^\\s*)#.+/m,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'important',\n\t\t\t\tinside: {\n\t\t\t\t\tpunctuation: /^#+|#+$/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'hr': {\n\t\t\t// ***\n\t\t\t// ---\n\t\t\t// * * *\n\t\t\t// -----------\n\t\t\tpattern: /(^\\s*)([*-])(?:[\\t ]*\\2){2,}(?=\\s*$)/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'list': {\n\t\t\t// * item\n\t\t\t// + item\n\t\t\t// - item\n\t\t\t// 1. item\n\t\t\tpattern: /(^\\s*)(?:[*+-]|\\d+\\.)(?=[\\t ].)/m,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'url-reference': {\n\t\t\t// [id]: http://example.com \"Optional title\"\n\t\t\t// [id]: http://example.com 'Optional title'\n\t\t\t// [id]: http://example.com (Optional title)\n\t\t\t// [id]: <http://example.com> \"Optional title\"\n\t\t\tpattern: /!?\\[[^\\]]+\\]:[\\t ]+(?:\\S+|<(?:\\\\.|[^>\\\\])+>)(?:[\\t ]+(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\)))?/,\n\t\t\tinside: {\n\t\t\t\t'variable': {\n\t\t\t\t\tpattern: /^(!?\\[)[^\\]]+/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'string': /(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\((?:\\\\.|[^)\\\\])*\\))$/,\n\t\t\t\t'punctuation': /^[\\[\\]!:]|[<>]/\n\t\t\t},\n\t\t\talias: 'url'\n\t\t},\n\t\t'bold': {\n\t\t\t// **strong**\n\t\t\t// __strong__\n\n\t\t\t// allow one nested instance of italic text using the same delimiter\n\t\t\tpattern: createInline(/\\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\\b|\\*\\*(?:(?!\\*)<inner>|\\*(?:(?!\\*)<inner>)+\\*)+\\*\\*/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^..)[\\s\\S]+(?=..$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'punctuation': /\\*\\*|__/\n\t\t\t}\n\t\t},\n\t\t'italic': {\n\t\t\t// *em*\n\t\t\t// _em_\n\n\t\t\t// allow one nested instance of bold text using the same delimiter\n\t\t\tpattern: createInline(/\\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\\b|\\*(?:(?!\\*)<inner>|\\*\\*(?:(?!\\*)<inner>)+\\*\\*)+\\*/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^.)[\\s\\S]+(?=.$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'punctuation': /[*_]/\n\t\t\t}\n\t\t},\n\t\t'strike': {\n\t\t\t// ~~strike through~~\n\t\t\t// ~strike~\n\t\t\t// eslint-disable-next-line regexp/strict\n\t\t\tpattern: createInline(/(~~?)(?:(?!~)<inner>)+\\2/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^~~?)[\\s\\S]+(?=\\1$)/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'punctuation': /~~?/\n\t\t\t}\n\t\t},\n\t\t'code-snippet': {\n\t\t\t// `code`\n\t\t\t// ``code``\n\t\t\tpattern: /(^|[^\\\\`])(?:``[^`\\r\\n]+(?:`[^`\\r\\n]+)*``(?!`)|`[^`\\r\\n]+`(?!`))/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\talias: ['code', 'keyword']\n\t\t},\n\t\t'url': {\n\t\t\t// [example](http://example.com \"Optional title\")\n\t\t\t// [example][id]\n\t\t\t// [example] [id]\n\t\t\tpattern: createInline(/!?\\[(?:(?!\\])<inner>)+\\](?:\\([^\\s)]+(?:[\\t ]+\"(?:\\\\.|[^\"\\\\])*\")?\\)|[ \\t]?\\[(?:(?!\\])<inner>)+\\])/.source),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'operator': /^!/,\n\t\t\t\t'content': {\n\t\t\t\t\tpattern: /(^\\[)[^\\]]+(?=\\])/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: {} // see below\n\t\t\t\t},\n\t\t\t\t'variable': {\n\t\t\t\t\tpattern: /(^\\][ \\t]?\\[)[^\\]]+(?=\\]$)/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'url': {\n\t\t\t\t\tpattern: /(^\\]\\()[^\\s)]+/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: /(^[ \\t]+)\"(?:\\\\.|[^\"\\\\])*\"(?=\\)$)/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\t['url', 'bold', 'italic', 'strike'].forEach(function (token) {\n\t\t['url', 'bold', 'italic', 'strike', 'code-snippet'].forEach(function (inside) {\n\t\t\tif (token !== inside) {\n\t\t\t\tPrism.languages.markdown[token].inside.content.inside[inside] = Prism.languages.markdown[inside];\n\t\t\t}\n\t\t});\n\t});\n\n\tPrism.hooks.add('after-tokenize', function (env) {\n\t\tif (env.language !== 'markdown' && env.language !== 'md') {\n\t\t\treturn;\n\t\t}\n\n\t\tfunction walkTokens(tokens) {\n\t\t\tif (!tokens || typeof tokens === 'string') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (var i = 0, l = tokens.length; i < l; i++) {\n\t\t\t\tvar token = tokens[i];\n\n\t\t\t\tif (token.type !== 'code') {\n\t\t\t\t\twalkTokens(token.content);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t/*\n\t\t\t\t * Add the correct `language-xxxx` class to this code block. Keep in mind that the `code-language` token\n\t\t\t\t * is optional. But the grammar is defined so that there is only one case we have to handle:\n\t\t\t\t *\n\t\t\t\t * token.content = [\n\t\t\t\t *     <span class=\"punctuation\">```</span>,\n\t\t\t\t *     <span class=\"code-language\">xxxx</span>,\n\t\t\t\t *     '\\n', // exactly one new lines (\\r or \\n or \\r\\n)\n\t\t\t\t *     <span class=\"code-block\">...</span>,\n\t\t\t\t *     '\\n', // exactly one new lines again\n\t\t\t\t *     <span class=\"punctuation\">```</span>\n\t\t\t\t * ];\n\t\t\t\t */\n\n\t\t\t\tvar codeLang = token.content[1];\n\t\t\t\tvar codeBlock = token.content[3];\n\n\t\t\t\tif (codeLang && codeBlock &&\n\t\t\t\t\tcodeLang.type === 'code-language' && codeBlock.type === 'code-block' &&\n\t\t\t\t\ttypeof codeLang.content === 'string') {\n\n\t\t\t\t\t// this might be a language that Prism does not support\n\n\t\t\t\t\t// do some replacements to support C++, C#, and F#\n\t\t\t\t\tvar lang = codeLang.content.replace(/\\b#/g, 'sharp').replace(/\\b\\+\\+/g, 'pp');\n\t\t\t\t\t// only use the first word\n\t\t\t\t\tlang = (/[a-z][\\w-]*/i.exec(lang) || [''])[0].toLowerCase();\n\t\t\t\t\tvar alias = 'language-' + lang;\n\n\t\t\t\t\t// add alias\n\t\t\t\t\tif (!codeBlock.alias) {\n\t\t\t\t\t\tcodeBlock.alias = [alias];\n\t\t\t\t\t} else if (typeof codeBlock.alias === 'string') {\n\t\t\t\t\t\tcodeBlock.alias = [codeBlock.alias, alias];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcodeBlock.alias.push(alias);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twalkTokens(env.tokens);\n\t});\n\n\tPrism.hooks.add('wrap', function (env) {\n\t\tif (env.type !== 'code-block') {\n\t\t\treturn;\n\t\t}\n\n\t\tvar codeLang = '';\n\t\tfor (var i = 0, l = env.classes.length; i < l; i++) {\n\t\t\tvar cls = env.classes[i];\n\t\t\tvar match = /language-(.+)/.exec(cls);\n\t\t\tif (match) {\n\t\t\t\tcodeLang = match[1];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tvar grammar = Prism.languages[codeLang];\n\n\t\tif (!grammar) {\n\t\t\tif (codeLang && codeLang !== 'none' && Prism.plugins.autoloader) {\n\t\t\t\tvar id = 'md-' + new Date().valueOf() + '-' + Math.floor(Math.random() * 1e16);\n\t\t\t\tenv.attributes['id'] = id;\n\n\t\t\t\tPrism.plugins.autoloader.loadLanguages(codeLang, function () {\n\t\t\t\t\tvar ele = document.getElementById(id);\n\t\t\t\t\tif (ele) {\n\t\t\t\t\t\tele.innerHTML = Prism.highlight(ele.textContent, Prism.languages[codeLang], codeLang);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tenv.content = Prism.highlight(textContent(env.content), grammar, codeLang);\n\t\t}\n\t});\n\n\tvar tagPattern = RegExp(Prism.languages.markup.tag.pattern.source, 'gi');\n\n\t/**\n\t * A list of known entity names.\n\t *\n\t * This will always be incomplete to save space. The current list is the one used by lowdash's unescape function.\n\t *\n\t * @see {@link https://github.com/lodash/lodash/blob/2da024c3b4f9947a48517639de7560457cd4ec6c/unescape.js#L2}\n\t */\n\tvar KNOWN_ENTITY_NAMES = {\n\t\t'amp': '&',\n\t\t'lt': '<',\n\t\t'gt': '>',\n\t\t'quot': '\"',\n\t};\n\n\t// IE 11 doesn't support `String.fromCodePoint`\n\tvar fromCodePoint = String.fromCodePoint || String.fromCharCode;\n\n\t/**\n\t * Returns the text content of a given HTML source code string.\n\t *\n\t * @param {string} html\n\t * @returns {string}\n\t */\n\tfunction textContent(html) {\n\t\t// remove all tags\n\t\tvar text = html.replace(tagPattern, '');\n\n\t\t// decode known entities\n\t\ttext = text.replace(/&(\\w{1,8}|#x?[\\da-f]{1,8});/gi, function (m, code) {\n\t\t\tcode = code.toLowerCase();\n\n\t\t\tif (code[0] === '#') {\n\t\t\t\tvar value;\n\t\t\t\tif (code[1] === 'x') {\n\t\t\t\t\tvalue = parseInt(code.slice(2), 16);\n\t\t\t\t} else {\n\t\t\t\t\tvalue = Number(code.slice(1));\n\t\t\t\t}\n\n\t\t\t\treturn fromCodePoint(value);\n\t\t\t} else {\n\t\t\t\tvar known = KNOWN_ENTITY_NAMES[code];\n\t\t\t\tif (known) {\n\t\t\t\t\treturn known;\n\t\t\t\t}\n\n\t\t\t\t// unable to decode\n\t\t\t\treturn m;\n\t\t\t}\n\t\t});\n\n\t\treturn text;\n\t}\n\n\tPrism.languages.md = Prism.languages.markdown;\n\n}(Prism));\n","Prism.languages.c = Prism.languages.extend('clike', {\n\t'comment': {\n\t\tpattern: /\\/\\/(?:[^\\r\\n\\\\]|\\\\(?:\\r\\n?|\\n|(?![\\r\\n])))*|\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n\t\tgreedy: true\n\t},\n\t'string': {\n\t\t// https://en.cppreference.com/w/c/language/string_literal\n\t\tpattern: /\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"/,\n\t\tgreedy: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\b(?:enum|struct)\\s+(?:__attribute__\\s*\\(\\([\\s\\S]*?\\)\\)\\s*)?)\\w+|\\b[a-z]\\w*_t\\b/,\n\t\tlookbehind: true\n\t},\n\t'keyword': /\\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\\b/,\n\t'function': /\\b[a-z_]\\w*(?=\\s*\\()/i,\n\t'number': /(?:\\b0x(?:[\\da-f]+(?:\\.[\\da-f]*)?|\\.[\\da-f]+)(?:p[+-]?\\d+)?|(?:\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+)(?:e[+-]?\\d+)?)[ful]{0,4}/i,\n\t'operator': />>=?|<<=?|->|([-+&|:])\\1|[?:~]|[-+*/%&|^!=<>]=?/\n});\n\nPrism.languages.insertBefore('c', 'string', {\n\t'char': {\n\t\t// https://en.cppreference.com/w/c/language/character_constant\n\t\tpattern: /'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n]){0,32}'/,\n\t\tgreedy: true\n\t}\n});\n\nPrism.languages.insertBefore('c', 'string', {\n\t'macro': {\n\t\t// allow for multiline macro definitions\n\t\t// spaces after the # character compile fine with gcc\n\t\tpattern: /(^[\\t ]*)#\\s*[a-z](?:[^\\r\\n\\\\/]|\\/(?!\\*)|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/|\\\\(?:\\r\\n|[\\s\\S]))*/im,\n\t\tlookbehind: true,\n\t\tgreedy: true,\n\t\talias: 'property',\n\t\tinside: {\n\t\t\t'string': [\n\t\t\t\t{\n\t\t\t\t\t// highlight the path of the include statement as a string\n\t\t\t\t\tpattern: /^(#\\s*include\\s*)<[^>]+>/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\tPrism.languages.c['string']\n\t\t\t],\n\t\t\t'char': Prism.languages.c['char'],\n\t\t\t'comment': Prism.languages.c['comment'],\n\t\t\t'macro-name': [\n\t\t\t\t{\n\t\t\t\t\tpattern: /(^#\\s*define\\s+)\\w+\\b(?!\\()/i,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpattern: /(^#\\s*define\\s+)\\w+\\b(?=\\()/i,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'function'\n\t\t\t\t}\n\t\t\t],\n\t\t\t// highlight macro directives as keywords\n\t\t\t'directive': {\n\t\t\t\tpattern: /^(#\\s*)[a-z]+/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'keyword'\n\t\t\t},\n\t\t\t'directive-hash': /^#/,\n\t\t\t'punctuation': /##|\\\\(?=[\\r\\n])/,\n\t\t\t'expression': {\n\t\t\t\tpattern: /\\S[\\s\\S]*/,\n\t\t\t\tinside: Prism.languages.c\n\t\t\t}\n\t\t}\n\t}\n});\n\nPrism.languages.insertBefore('c', 'function', {\n\t// highlight predefined macros as constants\n\t'constant': /\\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\\b/\n});\n\ndelete Prism.languages.c['boolean'];\n","(function (Prism) {\n\n\tvar string = /(?:\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|'(?:\\\\(?:\\r\\n|[\\s\\S])|[^'\\\\\\r\\n])*')/;\n\n\tPrism.languages.css = {\n\t\t'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n\t\t'atrule': {\n\t\t\tpattern: RegExp('@[\\\\w-](?:' + /[^;{\\s\"']|\\s+(?!\\s)/.source + '|' + string.source + ')*?' + /(?:;|(?=\\s*\\{))/.source),\n\t\t\tinside: {\n\t\t\t\t'rule': /^@[\\w-]+/,\n\t\t\t\t'selector-function-argument': {\n\t\t\t\t\tpattern: /(\\bselector\\s*\\(\\s*(?![\\s)]))(?:[^()\\s]|\\s+(?![\\s)])|\\((?:[^()]|\\([^()]*\\))*\\))+(?=\\s*\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\talias: 'selector'\n\t\t\t\t},\n\t\t\t\t'keyword': {\n\t\t\t\t\tpattern: /(^|[^\\w-])(?:and|not|only|or)(?![\\w-])/,\n\t\t\t\t\tlookbehind: true\n\t\t\t\t}\n\t\t\t\t// See rest below\n\t\t\t}\n\t\t},\n\t\t'url': {\n\t\t\t// https://drafts.csswg.org/css-values-3/#urls\n\t\t\tpattern: RegExp('\\\\burl\\\\((?:' + string.source + '|' + /(?:[^\\\\\\r\\n()\"']|\\\\[\\s\\S])*/.source + ')\\\\)', 'i'),\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^url/i,\n\t\t\t\t'punctuation': /^\\(|\\)$/,\n\t\t\t\t'string': {\n\t\t\t\t\tpattern: RegExp('^' + string.source + '$'),\n\t\t\t\t\talias: 'url'\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t'selector': {\n\t\t\tpattern: RegExp('(^|[{}\\\\s])[^{}\\\\s](?:[^{};\"\\'\\\\s]|\\\\s+(?![\\\\s{])|' + string.source + ')*(?=\\\\s*\\\\{)'),\n\t\t\tlookbehind: true\n\t\t},\n\t\t'string': {\n\t\t\tpattern: string,\n\t\t\tgreedy: true\n\t\t},\n\t\t'property': {\n\t\t\tpattern: /(^|[^-\\w\\xA0-\\uFFFF])(?!\\s)[-_a-z\\xA0-\\uFFFF](?:(?!\\s)[-\\w\\xA0-\\uFFFF])*(?=\\s*:)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'important': /!important\\b/i,\n\t\t'function': {\n\t\t\tpattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\\()/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[(){};:,]/\n\t};\n\n\tPrism.languages.css['atrule'].inside.rest = Prism.languages.css;\n\n\tvar markup = Prism.languages.markup;\n\tif (markup) {\n\t\tmarkup.tag.addInlined('style', 'css');\n\t\tmarkup.tag.addAttribute('style', 'css');\n\t}\n\n}(Prism));\n","Prism.languages.objectivec = Prism.languages.extend('c', {\n\t'string': {\n\t\tpattern: /@?\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"/,\n\t\tgreedy: true\n\t},\n\t'keyword': /\\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\\b/,\n\t'operator': /-[->]?|\\+\\+?|!=?|<<?=?|>>?=?|==?|&&?|\\|\\|?|[~^%?*\\/@]/\n});\n\ndelete Prism.languages.objectivec['class-name'];\n\nPrism.languages.objc = Prism.languages.objectivec;\n","Prism.languages.sql = {\n\t'comment': {\n\t\tpattern: /(^|[^\\\\])(?:\\/\\*[\\s\\S]*?\\*\\/|(?:--|\\/\\/|#).*)/,\n\t\tlookbehind: true\n\t},\n\t'variable': [\n\t\t{\n\t\t\tpattern: /@([\"'`])(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])+\\1/,\n\t\t\tgreedy: true\n\t\t},\n\t\t/@[\\w.$]+/\n\t],\n\t'string': {\n\t\tpattern: /(^|[^@\\\\])(\"|')(?:\\\\[\\s\\S]|(?!\\2)[^\\\\]|\\2\\2)*\\2/,\n\t\tgreedy: true,\n\t\tlookbehind: true\n\t},\n\t'identifier': {\n\t\tpattern: /(^|[^@\\\\])`(?:\\\\[\\s\\S]|[^`\\\\]|``)*`/,\n\t\tgreedy: true,\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'punctuation': /^`|`$/\n\t\t}\n\t},\n\t'function': /\\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\\s*\\()/i, // Should we highlight user defined functions too?\n\t'keyword': /\\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\\b/i,\n\t'boolean': /\\b(?:FALSE|NULL|TRUE)\\b/i,\n\t'number': /\\b0x[\\da-f]+\\b|\\b\\d+(?:\\.\\d*)?|\\B\\.\\d+\\b/i,\n\t'operator': /[-+*\\/=%^~]|&&?|\\|\\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\\b/i,\n\t'punctuation': /[;[\\]()`,.]/\n};\n","(function (Prism) {\n\n\tvar powershell = Prism.languages.powershell = {\n\t\t'comment': [\n\t\t\t{\n\t\t\t\tpattern: /(^|[^`])<#[\\s\\S]*?#>/,\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(^|[^`])#.*/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t'string': [\n\t\t\t{\n\t\t\t\tpattern: /\"(?:`[\\s\\S]|[^`\"])*\"/,\n\t\t\t\tgreedy: true,\n\t\t\t\tinside: null // see below\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /'(?:[^']|'')*'/,\n\t\t\t\tgreedy: true\n\t\t\t}\n\t\t],\n\t\t// Matches name spaces as well as casts, attribute decorators. Force starting with letter to avoid matching array indices\n\t\t// Supports two levels of nested brackets (e.g. `[OutputType([System.Collections.Generic.List[int]])]`)\n\t\t'namespace': /\\[[a-z](?:\\[(?:\\[[^\\]]*\\]|[^\\[\\]])*\\]|[^\\[\\]])*\\]/i,\n\t\t'boolean': /\\$(?:false|true)\\b/i,\n\t\t'variable': /\\$\\w+\\b/,\n\t\t// Cmdlets and aliases. Aliases should come last, otherwise \"write\" gets preferred over \"write-host\" for example\n\t\t// Get-Command | ?{ $_.ModuleName -match \"Microsoft.PowerShell.(Util|Core|Management)\" }\n\t\t// Get-Alias | ?{ $_.ReferencedCommand.Module.Name -match \"Microsoft.PowerShell.(Util|Core|Management)\" }\n\t\t'function': [\n\t\t\t/\\b(?:Add|Approve|Assert|Backup|Block|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy|Debug|Deny|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|ForEach|Format|Get|Grant|Group|Hide|Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Move|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push|Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke|Save|Search|Select|Send|Set|Show|Skip|Sort|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Tee|Test|Trace|Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Where|Write)-[a-z]+\\b/i,\n\t\t\t/\\b(?:ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\\b/i\n\t\t],\n\t\t// per http://technet.microsoft.com/en-us/library/hh847744.aspx\n\t\t'keyword': /\\b(?:Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\\b/i,\n\t\t'operator': {\n\t\t\tpattern: /(^|\\W)(?:!|-(?:b?(?:and|x?or)|as|(?:Not)?(?:Contains|In|Like|Match)|eq|ge|gt|is(?:Not)?|Join|le|lt|ne|not|Replace|sh[lr])\\b|-[-=]?|\\+[+=]?|[*\\/%]=?)/i,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'punctuation': /[|{}[\\];(),.]/\n\t};\n\n\t// Variable interpolation inside strings, and nested expressions\n\tpowershell.string[0].inside = {\n\t\t'function': {\n\t\t\t// Allow for one level of nesting\n\t\t\tpattern: /(^|[^`])\\$\\((?:\\$\\([^\\r\\n()]*\\)|(?!\\$\\()[^\\r\\n)])*\\)/,\n\t\t\tlookbehind: true,\n\t\t\tinside: powershell\n\t\t},\n\t\t'boolean': powershell.boolean,\n\t\t'variable': powershell.variable,\n\t};\n\n}(Prism));\n","Prism.languages.python = {\n\t'comment': {\n\t\tpattern: /(^|[^\\\\])#.*/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'string-interpolation': {\n\t\tpattern: /(?:f|fr|rf)(?:(\"\"\"|''')[\\s\\S]*?\\1|(\"|')(?:\\\\.|(?!\\2)[^\\\\\\r\\n])*\\2)/i,\n\t\tgreedy: true,\n\t\tinside: {\n\t\t\t'interpolation': {\n\t\t\t\t// \"{\" <expression> <optional \"!s\", \"!r\", or \"!a\"> <optional \":\" format specifier> \"}\"\n\t\t\t\tpattern: /((?:^|[^{])(?:\\{\\{)*)\\{(?!\\{)(?:[^{}]|\\{(?!\\{)(?:[^{}]|\\{(?!\\{)(?:[^{}])+\\})+\\})+\\}/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'format-spec': {\n\t\t\t\t\t\tpattern: /(:)[^:(){}]+(?=\\}$)/,\n\t\t\t\t\t\tlookbehind: true\n\t\t\t\t\t},\n\t\t\t\t\t'conversion-option': {\n\t\t\t\t\t\tpattern: /![sra](?=[:}]$)/,\n\t\t\t\t\t\talias: 'punctuation'\n\t\t\t\t\t},\n\t\t\t\t\trest: null\n\t\t\t\t}\n\t\t\t},\n\t\t\t'string': /[\\s\\S]+/\n\t\t}\n\t},\n\t'triple-quoted-string': {\n\t\tpattern: /(?:[rub]|br|rb)?(\"\"\"|''')[\\s\\S]*?\\1/i,\n\t\tgreedy: true,\n\t\talias: 'string'\n\t},\n\t'string': {\n\t\tpattern: /(?:[rub]|br|rb)?(\"|')(?:\\\\.|(?!\\1)[^\\\\\\r\\n])*\\1/i,\n\t\tgreedy: true\n\t},\n\t'function': {\n\t\tpattern: /((?:^|\\s)def[ \\t]+)[a-zA-Z_]\\w*(?=\\s*\\()/g,\n\t\tlookbehind: true\n\t},\n\t'class-name': {\n\t\tpattern: /(\\bclass\\s+)\\w+/i,\n\t\tlookbehind: true\n\t},\n\t'decorator': {\n\t\tpattern: /(^[\\t ]*)@\\w+(?:\\.\\w+)*/m,\n\t\tlookbehind: true,\n\t\talias: ['annotation', 'punctuation'],\n\t\tinside: {\n\t\t\t'punctuation': /\\./\n\t\t}\n\t},\n\t'keyword': /\\b(?:_(?=\\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\\b/,\n\t'builtin': /\\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\\b/,\n\t'boolean': /\\b(?:False|None|True)\\b/,\n\t'number': /\\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\\b|(?:\\b\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\B\\.\\d+(?:_\\d+)*)(?:e[+-]?\\d+(?:_\\d+)*)?j?(?!\\w)/i,\n\t'operator': /[-+%=]=?|!=|:=|\\*\\*?=?|\\/\\/?=?|<[<=>]?|>[=>]?|[&|^~]/,\n\t'punctuation': /[{}[\\];(),.:]/\n};\n\nPrism.languages.python['string-interpolation'].inside['interpolation'].inside.rest = Prism.languages.python;\n\nPrism.languages.py = Prism.languages.python;\n","(function (Prism) {\n\n\tvar multilineComment = /\\/\\*(?:[^*/]|\\*(?!\\/)|\\/(?!\\*)|<self>)*\\*\\//.source;\n\tfor (var i = 0; i < 2; i++) {\n\t\t// support 4 levels of nested comments\n\t\tmultilineComment = multilineComment.replace(/<self>/g, function () { return multilineComment; });\n\t}\n\tmultilineComment = multilineComment.replace(/<self>/g, function () { return /[^\\s\\S]/.source; });\n\n\n\tPrism.languages.rust = {\n\t\t'comment': [\n\t\t\t{\n\t\t\t\tpattern: RegExp(/(^|[^\\\\])/.source + multilineComment),\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(^|[^\\\\:])\\/\\/.*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\tgreedy: true\n\t\t\t}\n\t\t],\n\t\t'string': {\n\t\t\tpattern: /b?\"(?:\\\\[\\s\\S]|[^\\\\\"])*\"|b?r(#*)\"(?:[^\"]|\"(?!\\1))*\"\\1/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'char': {\n\t\t\tpattern: /b?'(?:\\\\(?:x[0-7][\\da-fA-F]|u\\{(?:[\\da-fA-F]_*){1,6}\\}|.)|[^\\\\\\r\\n\\t'])'/,\n\t\t\tgreedy: true\n\t\t},\n\t\t'attribute': {\n\t\t\tpattern: /#!?\\[(?:[^\\[\\]\"]|\"(?:\\\\[\\s\\S]|[^\\\\\"])*\")*\\]/,\n\t\t\tgreedy: true,\n\t\t\talias: 'attr-name',\n\t\t\tinside: {\n\t\t\t\t'string': null // see below\n\t\t\t}\n\t\t},\n\n\t\t// Closure params should not be confused with bitwise OR |\n\t\t'closure-params': {\n\t\t\tpattern: /([=(,:]\\s*|\\bmove\\s*)\\|[^|]*\\||\\|[^|]*\\|(?=\\s*(?:\\{|->))/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'closure-punctuation': {\n\t\t\t\t\tpattern: /^\\||\\|$/,\n\t\t\t\t\talias: 'punctuation'\n\t\t\t\t},\n\t\t\t\trest: null // see below\n\t\t\t}\n\t\t},\n\n\t\t'lifetime-annotation': {\n\t\t\tpattern: /'\\w+/,\n\t\t\talias: 'symbol'\n\t\t},\n\n\t\t'fragment-specifier': {\n\t\t\tpattern: /(\\$\\w+:)[a-z]+/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'variable': /\\$\\w+/,\n\n\t\t'function-definition': {\n\t\t\tpattern: /(\\bfn\\s+)\\w+/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'function'\n\t\t},\n\t\t'type-definition': {\n\t\t\tpattern: /(\\b(?:enum|struct|trait|type|union)\\s+)\\w+/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'class-name'\n\t\t},\n\t\t'module-declaration': [\n\t\t\t{\n\t\t\t\tpattern: /(\\b(?:crate|mod)\\s+)[a-z][a-z_\\d]*/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'namespace'\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: /(\\b(?:crate|self|super)\\s*)::\\s*[a-z][a-z_\\d]*\\b(?:\\s*::(?:\\s*[a-z][a-z_\\d]*\\s*::)*)?/,\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'namespace',\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /::/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'keyword': [\n\t\t\t// https://github.com/rust-lang/reference/blob/master/src/keywords.md\n\t\t\t/\\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\\b/,\n\t\t\t// primitives and str\n\t\t\t// https://doc.rust-lang.org/stable/rust-by-example/primitives.html\n\t\t\t/\\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\\b/\n\t\t],\n\n\t\t// functions can technically start with an upper-case letter, but this will introduce a lot of false positives\n\t\t// and Rust's naming conventions recommend snake_case anyway.\n\t\t// https://doc.rust-lang.org/1.0.0/style/style/naming/README.html\n\t\t'function': /\\b[a-z_]\\w*(?=\\s*(?:::\\s*<|\\())/,\n\t\t'macro': {\n\t\t\tpattern: /\\b\\w+!/,\n\t\t\talias: 'property'\n\t\t},\n\t\t'constant': /\\b[A-Z_][A-Z_\\d]+\\b/,\n\t\t'class-name': /\\b[A-Z]\\w*\\b/,\n\n\t\t'namespace': {\n\t\t\tpattern: /(?:\\b[a-z][a-z_\\d]*\\s*::\\s*)*\\b[a-z][a-z_\\d]*\\s*::(?!\\s*<)/,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /::/\n\t\t\t}\n\t\t},\n\n\t\t// Hex, oct, bin, dec numbers with visual separators and type suffix\n\t\t'number': /\\b(?:0x[\\dA-Fa-f](?:_?[\\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\\d(?:_?\\d)*)?\\.)?\\d(?:_?\\d)*(?:[Ee][+-]?\\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\\b/,\n\t\t'boolean': /\\b(?:false|true)\\b/,\n\t\t'punctuation': /->|\\.\\.=|\\.{1,3}|::|[{}[\\];(),:]/,\n\t\t'operator': /[-+*\\/%!^]=?|=[=>]?|&[&=]?|\\|[|=]?|<<?=?|>>?=?|[@?]/\n\t};\n\n\tPrism.languages.rust['closure-params'].inside.rest = Prism.languages.rust;\n\tPrism.languages.rust['attribute'].inside['string'] = Prism.languages.rust['string'];\n\n}(Prism));\n","Prism.languages.swift = {\n\t'comment': {\n\t\t// Nested comments are supported up to 2 levels\n\t\tpattern: /(^|[^\\\\:])(?:\\/\\/.*|\\/\\*(?:[^/*]|\\/(?!\\*)|\\*(?!\\/)|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*\\*\\/)/,\n\t\tlookbehind: true,\n\t\tgreedy: true\n\t},\n\t'string-literal': [\n\t\t// https://docs.swift.org/swift-book/LanguageGuide/StringsAndCharacters.html\n\t\t{\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[^\"#])/.source\n\t\t\t\t+ '(?:'\n\t\t\t\t// single-line string\n\t\t\t\t+ /\"(?:\\\\(?:\\((?:[^()]|\\([^()]*\\))*\\)|\\r\\n|[^(])|[^\\\\\\r\\n\"])*\"/.source\n\t\t\t\t+ '|'\n\t\t\t\t// multi-line string\n\t\t\t\t+ /\"\"\"(?:\\\\(?:\\((?:[^()]|\\([^()]*\\))*\\)|[^(])|[^\\\\\"]|\"(?!\"\"))*\"\"\"/.source\n\t\t\t\t+ ')'\n\t\t\t\t+ /(?![\"#])/.source\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'interpolation': {\n\t\t\t\t\tpattern: /(\\\\\\()(?:[^()]|\\([^()]*\\))*(?=\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: null // see below\n\t\t\t\t},\n\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\tpattern: /^\\)|\\\\\\($/,\n\t\t\t\t\talias: 'punctuation'\n\t\t\t\t},\n\t\t\t\t'punctuation': /\\\\(?=[\\r\\n])/,\n\t\t\t\t'string': /[\\s\\S]+/\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tpattern: RegExp(\n\t\t\t\t/(^|[^\"#])(#+)/.source\n\t\t\t\t+ '(?:'\n\t\t\t\t// single-line string\n\t\t\t\t+ /\"(?:\\\\(?:#+\\((?:[^()]|\\([^()]*\\))*\\)|\\r\\n|[^#])|[^\\\\\\r\\n])*?\"/.source\n\t\t\t\t+ '|'\n\t\t\t\t// multi-line string\n\t\t\t\t+ /\"\"\"(?:\\\\(?:#+\\((?:[^()]|\\([^()]*\\))*\\)|[^#])|[^\\\\])*?\"\"\"/.source\n\t\t\t\t+ ')'\n\t\t\t\t+ '\\\\2'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'interpolation': {\n\t\t\t\t\tpattern: /(\\\\#+\\()(?:[^()]|\\([^()]*\\))*(?=\\))/,\n\t\t\t\t\tlookbehind: true,\n\t\t\t\t\tinside: null // see below\n\t\t\t\t},\n\t\t\t\t'interpolation-punctuation': {\n\t\t\t\t\tpattern: /^\\)|\\\\#+\\($/,\n\t\t\t\t\talias: 'punctuation'\n\t\t\t\t},\n\t\t\t\t'string': /[\\s\\S]+/\n\t\t\t}\n\t\t},\n\t],\n\n\t'directive': {\n\t\t// directives with conditions\n\t\tpattern: RegExp(\n\t\t\t/#/.source\n\t\t\t+ '(?:'\n\t\t\t+ (\n\t\t\t\t/(?:elseif|if)\\b/.source\n\t\t\t\t+ '(?:[ \\t]*'\n\t\t\t\t// This regex is a little complex. It's equivalent to this:\n\t\t\t\t//   (?:![ \\t]*)?(?:\\b\\w+\\b(?:[ \\t]*<round>)?|<round>)(?:[ \\t]*(?:&&|\\|\\|))?\n\t\t\t\t// where <round> is a general parentheses expression.\n\t\t\t\t+ /(?:![ \\t]*)?(?:\\b\\w+\\b(?:[ \\t]*\\((?:[^()]|\\([^()]*\\))*\\))?|\\((?:[^()]|\\([^()]*\\))*\\))(?:[ \\t]*(?:&&|\\|\\|))?/.source\n\t\t\t\t+ ')+'\n\t\t\t)\n\t\t\t+ '|'\n\t\t\t+ /(?:else|endif)\\b/.source\n\t\t\t+ ')'\n\t\t),\n\t\talias: 'property',\n\t\tinside: {\n\t\t\t'directive-name': /^#\\w+/,\n\t\t\t'boolean': /\\b(?:false|true)\\b/,\n\t\t\t'number': /\\b\\d+(?:\\.\\d+)*\\b/,\n\t\t\t'operator': /!|&&|\\|\\||[<>]=?/,\n\t\t\t'punctuation': /[(),]/\n\t\t}\n\t},\n\t'literal': {\n\t\tpattern: /#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\\b/,\n\t\talias: 'constant'\n\t},\n\t'other-directive': {\n\t\tpattern: /#\\w+\\b/,\n\t\talias: 'property'\n\t},\n\n\t'attribute': {\n\t\tpattern: /@\\w+/,\n\t\talias: 'atrule'\n\t},\n\n\t'function-definition': {\n\t\tpattern: /(\\bfunc\\s+)\\w+/,\n\t\tlookbehind: true,\n\t\talias: 'function'\n\t},\n\t'label': {\n\t\t// https://docs.swift.org/swift-book/LanguageGuide/ControlFlow.html#ID141\n\t\tpattern: /\\b(break|continue)\\s+\\w+|\\b[a-zA-Z_]\\w*(?=\\s*:\\s*(?:for|repeat|while)\\b)/,\n\t\tlookbehind: true,\n\t\talias: 'important'\n\t},\n\n\t'keyword': /\\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\\b/,\n\t'boolean': /\\b(?:false|true)\\b/,\n\t'nil': {\n\t\tpattern: /\\bnil\\b/,\n\t\talias: 'constant'\n\t},\n\n\t'short-argument': /\\$\\d+\\b/,\n\t'omit': {\n\t\tpattern: /\\b_\\b/,\n\t\talias: 'keyword'\n\t},\n\t'number': /\\b(?:[\\d_]+(?:\\.[\\de_]+)?|0x[a-f0-9_]+(?:\\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b/i,\n\n\t// A class name must start with an upper-case letter and be either 1 letter long or contain a lower-case letter.\n\t'class-name': /\\b[A-Z](?:[A-Z_\\d]*[a-z]\\w*)?\\b/,\n\t'function': /\\b[a-z_]\\w*(?=\\s*\\()/i,\n\t'constant': /\\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\\b/,\n\n\t// Operators are generic in Swift. Developers can even create new operators (e.g. +++).\n\t// https://docs.swift.org/swift-book/ReferenceManual/zzSummaryOfTheGrammar.html#ID481\n\t// This regex only supports ASCII operators.\n\t'operator': /[-+*/%=!<>&|^~?]+|\\.[.\\-+*/%=!<>&|^~?]+/,\n\t'punctuation': /[{}[\\]();,.:\\\\]/\n};\n\nPrism.languages.swift['string-literal'].forEach(function (rule) {\n\trule.inside['interpolation'].inside = Prism.languages.swift;\n});\n","(function (Prism) {\n\n\tPrism.languages.typescript = Prism.languages.extend('javascript', {\n\t\t'class-name': {\n\t\t\tpattern: /(\\b(?:class|extends|implements|instanceof|interface|new|type)\\s+)(?!keyof\\b)(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*(?:\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: null // see below\n\t\t},\n\t\t'builtin': /\\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\\b/,\n\t});\n\n\t// The keywords TypeScript adds to JavaScript\n\tPrism.languages.typescript.keyword.push(\n\t\t/\\b(?:abstract|declare|is|keyof|readonly|require)\\b/,\n\t\t// keywords that have to be followed by an identifier\n\t\t/\\b(?:asserts|infer|interface|module|namespace|type)\\b(?=\\s*(?:[{_$a-zA-Z\\xA0-\\uFFFF]|$))/,\n\t\t// This is for `import type *, {}`\n\t\t/\\btype\\b(?=\\s*(?:[\\{*]|$))/\n\t);\n\n\t// doesn't work with TS because TS is too complex\n\tdelete Prism.languages.typescript['parameter'];\n\tdelete Prism.languages.typescript['literal-property'];\n\n\t// a version of typescript specifically for highlighting types\n\tvar typeInside = Prism.languages.extend('typescript', {});\n\tdelete typeInside['class-name'];\n\n\tPrism.languages.typescript['class-name'].inside = typeInside;\n\n\tPrism.languages.insertBefore('typescript', 'function', {\n\t\t'decorator': {\n\t\t\tpattern: /@[$\\w\\xA0-\\uFFFF]+/,\n\t\t\tinside: {\n\t\t\t\t'at': {\n\t\t\t\t\tpattern: /^@/,\n\t\t\t\t\talias: 'operator'\n\t\t\t\t},\n\t\t\t\t'function': /^[\\s\\S]+/\n\t\t\t}\n\t\t},\n\t\t'generic-function': {\n\t\t\t// e.g. foo<T extends \"bar\" | \"baz\">( ...\n\t\t\tpattern: /#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\\s*\\()/,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'function': /^#?(?!\\s)[_$a-zA-Z\\xA0-\\uFFFF](?:(?!\\s)[$\\w\\xA0-\\uFFFF])*/,\n\t\t\t\t'generic': {\n\t\t\t\t\tpattern: /<[\\s\\S]+/, // everything after the first <\n\t\t\t\t\talias: 'class-name',\n\t\t\t\t\tinside: typeInside\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tPrism.languages.ts = Prism.languages.typescript;\n\n}(Prism));\n","(function (Prism) {\n\n\tvar keywords = /\\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\\s*[(){}[\\]<>=%~.:,;?+\\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\\b/;\n\n\t// full package (optional) + parent classes (optional)\n\tvar classNamePrefix = /(?:[a-z]\\w*\\s*\\.\\s*)*(?:[A-Z]\\w*\\s*\\.\\s*)*/.source;\n\n\t// based on the java naming conventions\n\tvar className = {\n\t\tpattern: RegExp(/(^|[^\\w.])/.source + classNamePrefix + /[A-Z](?:[\\d_A-Z]*[a-z]\\w*)?\\b/.source),\n\t\tlookbehind: true,\n\t\tinside: {\n\t\t\t'namespace': {\n\t\t\t\tpattern: /^[a-z]\\w*(?:\\s*\\.\\s*[a-z]\\w*)*(?:\\s*\\.)?/,\n\t\t\t\tinside: {\n\t\t\t\t\t'punctuation': /\\./\n\t\t\t\t}\n\t\t\t},\n\t\t\t'punctuation': /\\./\n\t\t}\n\t};\n\n\tPrism.languages.java = Prism.languages.extend('clike', {\n\t\t'string': {\n\t\t\tpattern: /(^|[^\\\\])\"(?:\\\\.|[^\"\\\\\\r\\n])*\"/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true\n\t\t},\n\t\t'class-name': [\n\t\t\tclassName,\n\t\t\t{\n\t\t\t\t// variables, parameters, and constructor references\n\t\t\t\t// this to support class names (or generic parameters) which do not contain a lower case letter (also works for methods)\n\t\t\t\tpattern: RegExp(/(^|[^\\w.])/.source + classNamePrefix + /[A-Z]\\w*(?=\\s+\\w+\\s*[;,=()]|\\s*(?:\\[[\\s,]*\\]\\s*)?::\\s*new\\b)/.source),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: className.inside\n\t\t\t},\n\t\t\t{\n\t\t\t\t// class names based on keyword\n\t\t\t\t// this to support class names (or generic parameters) which do not contain a lower case letter (also works for methods)\n\t\t\t\tpattern: RegExp(/(\\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\\s+)/.source + classNamePrefix + /[A-Z]\\w*\\b/.source),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: className.inside\n\t\t\t}\n\t\t],\n\t\t'keyword': keywords,\n\t\t'function': [\n\t\t\tPrism.languages.clike.function,\n\t\t\t{\n\t\t\t\tpattern: /(::\\s*)[a-z_]\\w*/,\n\t\t\t\tlookbehind: true\n\t\t\t}\n\t\t],\n\t\t'number': /\\b0b[01][01_]*L?\\b|\\b0x(?:\\.[\\da-f_p+-]+|[\\da-f_]+(?:\\.[\\da-f_p+-]+)?)\\b|(?:\\b\\d[\\d_]*(?:\\.[\\d_]*)?|\\B\\.\\d[\\d_]*)(?:e[+-]?\\d[\\d_]*)?[dfl]?/i,\n\t\t'operator': {\n\t\t\tpattern: /(^|[^.])(?:<<=?|>>>?=?|->|--|\\+\\+|&&|\\|\\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,\n\t\t\tlookbehind: true\n\t\t},\n\t\t'constant': /\\b[A-Z][A-Z_\\d]+\\b/\n\t});\n\n\tPrism.languages.insertBefore('java', 'string', {\n\t\t'triple-quoted-string': {\n\t\t\t// http://openjdk.java.net/jeps/355#Description\n\t\t\tpattern: /\"\"\"[ \\t]*[\\r\\n](?:(?:\"|\"\")?(?:\\\\.|[^\"\\\\]))*\"\"\"/,\n\t\t\tgreedy: true,\n\t\t\talias: 'string'\n\t\t},\n\t\t'char': {\n\t\t\tpattern: /'(?:\\\\.|[^'\\\\\\r\\n]){1,6}'/,\n\t\t\tgreedy: true\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('java', 'class-name', {\n\t\t'annotation': {\n\t\t\tpattern: /(^|[^.])@\\w+(?:\\s*\\.\\s*\\w+)*/,\n\t\t\tlookbehind: true,\n\t\t\talias: 'punctuation'\n\t\t},\n\t\t'generics': {\n\t\t\tpattern: /<(?:[\\w\\s,.?]|&(?!&)|<(?:[\\w\\s,.?]|&(?!&)|<(?:[\\w\\s,.?]|&(?!&)|<(?:[\\w\\s,.?]|&(?!&))*>)*>)*>)*>/,\n\t\t\tinside: {\n\t\t\t\t'class-name': className,\n\t\t\t\t'keyword': keywords,\n\t\t\t\t'punctuation': /[<>(),.:]/,\n\t\t\t\t'operator': /[?&|]/\n\t\t\t}\n\t\t},\n\t\t'import': [\n\t\t\t{\n\t\t\t\tpattern: RegExp(/(\\bimport\\s+)/.source + classNamePrefix + /(?:[A-Z]\\w*|\\*)(?=\\s*;)/.source),\n\t\t\t\tlookbehind: true,\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': className.inside.namespace,\n\t\t\t\t\t'punctuation': /\\./,\n\t\t\t\t\t'operator': /\\*/,\n\t\t\t\t\t'class-name': /\\w+/\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tpattern: RegExp(/(\\bimport\\s+static\\s+)/.source + classNamePrefix + /(?:\\w+|\\*)(?=\\s*;)/.source),\n\t\t\t\tlookbehind: true,\n\t\t\t\talias: 'static',\n\t\t\t\tinside: {\n\t\t\t\t\t'namespace': className.inside.namespace,\n\t\t\t\t\t'static': /\\b\\w+$/,\n\t\t\t\t\t'punctuation': /\\./,\n\t\t\t\t\t'operator': /\\*/,\n\t\t\t\t\t'class-name': /\\w+/\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\t'namespace': {\n\t\t\tpattern: RegExp(\n\t\t\t\t/(\\b(?:exports|import(?:\\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\\s+)(?!<keyword>)[a-z]\\w*(?:\\.[a-z]\\w*)*\\.?/\n\t\t\t\t\t.source.replace(/<keyword>/g, function () { return keywords.source; })),\n\t\t\tlookbehind: true,\n\t\t\tinside: {\n\t\t\t\t'punctuation': /\\./,\n\t\t\t}\n\t\t}\n\t});\n}(Prism));\n","(function (Prism) {\n\n\tvar keyword = /\\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\\b/;\n\tvar modName = /\\b(?!<keyword>)\\w+(?:\\s*\\.\\s*\\w+)*\\b/.source.replace(/<keyword>/g, function () { return keyword.source; });\n\n\tPrism.languages.cpp = Prism.languages.extend('c', {\n\t\t'class-name': [\n\t\t\t{\n\t\t\t\tpattern: RegExp(/(\\b(?:class|concept|enum|struct|typename)\\s+)(?!<keyword>)\\w+/.source\n\t\t\t\t\t.replace(/<keyword>/g, function () { return keyword.source; })),\n\t\t\t\tlookbehind: true\n\t\t\t},\n\t\t\t// This is intended to capture the class name of method implementations like:\n\t\t\t//   void foo::bar() const {}\n\t\t\t// However! The `foo` in the above example could also be a namespace, so we only capture the class name if\n\t\t\t// it starts with an uppercase letter. This approximation should give decent results.\n\t\t\t/\\b[A-Z]\\w*(?=\\s*::\\s*\\w+\\s*\\()/,\n\t\t\t// This will capture the class name before destructors like:\n\t\t\t//   Foo::~Foo() {}\n\t\t\t/\\b[A-Z_]\\w*(?=\\s*::\\s*~\\w+\\s*\\()/i,\n\t\t\t// This also intends to capture the class name of method implementations but here the class has template\n\t\t\t// parameters, so it can't be a namespace (until C++ adds generic namespaces).\n\t\t\t/\\b\\w+(?=\\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\\s*::\\s*\\w+\\s*\\()/\n\t\t],\n\t\t'keyword': keyword,\n\t\t'number': {\n\t\t\tpattern: /(?:\\b0b[01']+|\\b0x(?:[\\da-f']+(?:\\.[\\da-f']*)?|\\.[\\da-f']+)(?:p[+-]?[\\d']+)?|(?:\\b[\\d']+(?:\\.[\\d']*)?|\\B\\.[\\d']+)(?:e[+-]?[\\d']+)?)[ful]{0,4}/i,\n\t\t\tgreedy: true\n\t\t},\n\t\t'operator': />>=?|<<=?|->|--|\\+\\+|&&|\\|\\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\\b/,\n\t\t'boolean': /\\b(?:false|true)\\b/\n\t});\n\n\tPrism.languages.insertBefore('cpp', 'string', {\n\t\t'module': {\n\t\t\t// https://en.cppreference.com/w/cpp/language/modules\n\t\t\tpattern: RegExp(\n\t\t\t\t/(\\b(?:import|module)\\s+)/.source +\n\t\t\t\t'(?:' +\n\t\t\t\t// header-name\n\t\t\t\t/\"(?:\\\\(?:\\r\\n|[\\s\\S])|[^\"\\\\\\r\\n])*\"|<[^<>\\r\\n]*>/.source +\n\t\t\t\t'|' +\n\t\t\t\t// module name or partition or both\n\t\t\t\t/<mod-name>(?:\\s*:\\s*<mod-name>)?|:\\s*<mod-name>/.source.replace(/<mod-name>/g, function () { return modName; }) +\n\t\t\t\t')'\n\t\t\t),\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: {\n\t\t\t\t'string': /^[<\"][\\s\\S]+/,\n\t\t\t\t'operator': /:/,\n\t\t\t\t'punctuation': /\\./\n\t\t\t}\n\t\t},\n\t\t'raw-string': {\n\t\t\tpattern: /R\"([^()\\\\ ]{0,16})\\([\\s\\S]*?\\)\\1\"/,\n\t\t\talias: 'string',\n\t\t\tgreedy: true\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('cpp', 'keyword', {\n\t\t'generic-function': {\n\t\t\tpattern: /\\b(?!operator\\b)[a-z_]\\w*\\s*<(?:[^<>]|<[^<>]*>)*>(?=\\s*\\()/i,\n\t\t\tinside: {\n\t\t\t\t'function': /^\\w+/,\n\t\t\t\t'generic': {\n\t\t\t\t\tpattern: /<[\\s\\S]+/,\n\t\t\t\t\talias: 'class-name',\n\t\t\t\t\tinside: Prism.languages.cpp\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('cpp', 'operator', {\n\t\t'double-colon': {\n\t\t\tpattern: /::/,\n\t\t\talias: 'punctuation'\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('cpp', 'class-name', {\n\t\t// the base clause is an optional list of parent classes\n\t\t// https://en.cppreference.com/w/cpp/language/class\n\t\t'base-clause': {\n\t\t\tpattern: /(\\b(?:class|struct)\\s+\\w+\\s*:\\s*)[^;{}\"'\\s]+(?:\\s+[^;{}\"'\\s]+)*(?=\\s*[;{])/,\n\t\t\tlookbehind: true,\n\t\t\tgreedy: true,\n\t\t\tinside: Prism.languages.extend('cpp', {})\n\t\t}\n\t});\n\n\tPrism.languages.insertBefore('inside', 'double-colon', {\n\t\t// All untokenized words that are not namespaces should be class names\n\t\t'class-name': /\\b[a-z_]\\w*\\b(?!\\s*::)/i\n\t}, Prism.languages.cpp['base-clause']);\n\n}(Prism));\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport{isHTMLElement as t,addClassNamesToElement as e,removeClassNamesFromElement as n,$getAdjacentCaret as r,mergeRegister as i}from\"@lexical/utils\";import{ElementNode as o,$createParagraphNode as s,$isTextNode as l,$isTabNode as u,$createTabNode as c,$createLineBreakNode as g,$create as a,TextNode as f,$applyNodeReplacement as p,$getSiblingCaret as h,getTextDirection as d,$isElementNode as m,$isLineBreakNode as y,defineExtension as x,$createTextNode as _,$getNodeByKey as S,$getSelection as v,$isRangeSelection as T,$createPoint as b,INDENT_CONTENT_COMMAND as C,OUTDENT_CONTENT_COMMAND as N,INSERT_TAB_COMMAND as j,$setSelectionFromCaretRange as w,$getCaretRangeInDirection as k,$getCaretRange as A,$getTextPointCaret as L,$normalizeCaret as P,KEY_ARROW_UP_COMMAND as O,MOVE_TO_START as H,KEY_TAB_COMMAND as E,COMMAND_PRIORITY_LOW as z,$insertNodes as B,$getRoot as D,KEY_ARROW_DOWN_COMMAND as F,MOVE_TO_END as I}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 K(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 M=\"javascript\",J=()=>M;function R(e,n){for(const r of e.childNodes){if(t(r)&&r.tagName===n)return!0;R(r,n)}return!1}const $=\"data-language\",W=\"data-highlight-language\",q=\"data-theme\";class U extends o{__language;__theme;__isSyntaxHighlightSupported;static getType(){return\"code\"}static clone(t){return new U(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 n=document.createElement(\"code\");e(n,t.theme.code),n.setAttribute(\"spellcheck\",\"false\");const r=this.getLanguage();r&&(n.setAttribute($,r),this.getIsSyntaxHighlightSupported()&&n.setAttribute(W,r));const i=this.getTheme();i&&n.setAttribute(q,i);const o=this.getStyle();return o&&n.setAttribute(\"style\",o),n}updateDOM(t,e,n){const r=this.__language,i=t.__language;r?r!==i&&e.setAttribute($,r):i&&e.removeAttribute($);const o=this.__isSyntaxHighlightSupported;t.__isSyntaxHighlightSupported&&i?o&&r?r!==i&&e.setAttribute(W,r):e.removeAttribute(W):o&&r&&e.setAttribute(W,r);const s=this.__theme,l=t.__theme;s?s!==l&&e.setAttribute(q,s):l&&e.removeAttribute(q);const u=this.__style,c=t.__style;return u?u!==c&&e.setAttribute(\"style\",u):c&&e.removeAttribute(\"style\"),!1}exportDOM(t){const n=document.createElement(\"pre\");e(n,t._config.theme.code),n.setAttribute(\"spellcheck\",\"false\");const r=this.getLanguage();r&&(n.setAttribute($,r),this.getIsSyntaxHighlightSupported()&&n.setAttribute(W,r));const i=this.getTheme();i&&n.setAttribute(q,i);const o=this.getStyle();return o&&n.setAttribute(\"style\",o),{element:n}}static importDOM(){return{code:t=>null!=t.textContent&&(/\\r?\\n/.test(t.textContent)||R(t,\"BR\"))?{conversion:G,priority:1}:null,div:()=>({conversion:V,priority:1}),pre:()=>({conversion:G,priority:0}),table:t=>et(t)?{conversion:Y,priority:3}:null,td:t=>{const e=t,n=e.closest(\"table\");return e.classList.contains(\"js-file-line\")||n&&et(n)?{conversion:Z,priority:3}:null},tr:t=>{const e=t.closest(\"table\");return e&&et(e)?{conversion:Z,priority:3}:null}}}static importJSON(t){return X().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){const n=this.getChildren(),r=n.length;if(r>=2&&\"\\n\"===n[r-1].getTextContent()&&\"\\n\"===n[r-2].getTextContent()&&t.isCollapsed()&&t.anchor.key===this.__key&&t.anchor.offset===r){n[r-1].remove(),n[r-2].remove();const t=s();return this.insertAfter(t,e),t}const{anchor:i,focus:o}=t,a=(i.isBefore(o)?i:o).getNode();if(l(a)){let t=lt(a);const e=[];for(;;)if(u(t))e.push(c()),t=t.getNextSibling();else{if(!ot(t))break;{let n=0;const r=t.getTextContent(),i=t.getTextContentSize();for(;n<i&&\" \"===r[n];)n++;if(0!==n&&e.push(it(\" \".repeat(n))),n!==i)break;t=t.getNextSibling()}}const n=a.splitText(i.offset)[0],r=0===i.offset?0:1,o=n.getIndexWithinParent()+r,s=a.getParentOrThrow(),l=[g(),...e];s.splice(o,0,l);const f=e[e.length-1];f?f.select():0===i.offset?n.selectPrevious():n.getNextSibling().selectNext(0,0)}if(Q(a)){const{offset:e}=t.anchor;a.splice(e,0,[g()]),a.select(e+1,e+1)}return null}canIndent(){return!1}collapseAtStart(){const t=s();return this.getChildren().forEach(e=>t.append(e)),this.replace(t),!0}setLanguage(t){const e=this.getWritable();return e.__language=t||void 0,e}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 X(t,e){return a(U).setLanguage(t).setTheme(e)}function Q(t){return t instanceof U}function G(t){return{node:X(t.getAttribute($))}}function V(t){const e=t,n=tt(e);return n||function(t){let e=t.parentElement;for(;null!==e;){if(tt(e))return!0;e=e.parentElement}return!1}(e)?{node:n?X():null}:{node:null}}function Y(){return{node:X()}}function Z(){return{node:null}}function tt(t){return null!==t.style.fontFamily.match(\"monospace\")}function et(t){return t.classList.contains(\"js-file-line-container\")}class nt extends f{__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)}getHighlightType(){return this.getLatest().__highlightType}setHighlightType(t){const e=this.getWritable();return e.__highlightType=t||void 0,e}canHaveFormat(){return!1}createDOM(t){const n=super.createDOM(t),r=rt(t.theme,this.__highlightType);return e(n,r),n}updateDOM(t,r,i){const o=super.updateDOM(t,r,i),s=rt(i.theme,t.__highlightType),l=rt(i.theme,this.__highlightType);return s!==l&&(s&&n(r,s),l&&e(r,l)),o}static importJSON(t){return it().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 X()}}function rt(t,e){return e&&t&&t.codeHighlight&&t.codeHighlight[e]}function it(t=\"\",e){return p(new nt(t,e))}function ot(t){return t instanceof nt}function st(t,e){let n=t;for(let i=h(t,e);i&&(ot(i.origin)||u(i.origin));i=r(i))n=i.origin;return n}function lt(t){return st(t,\"previous\")}function ut(t){return st(t,\"next\")}function ct(t){const e=lt(t),n=ut(t);let r=e;for(;null!==r;){if(ot(r)){const t=d(r.getTextContent());if(null!==t)return t}if(r===n)break;r=r.getNextSibling()}const i=e.getParent();if(m(i)){const t=i.getDirection();if(\"ltr\"===t||\"rtl\"===t)return t}return null}function gt(t,e){let n=null,r=null,i=t,o=e,s=t.getTextContent();for(;;){if(0===o){if(i=i.getPreviousSibling(),null===i)break;if(ot(i)||u(i)||y(i)||K(167),y(i)){n={node:i,offset:1};break}o=Math.max(0,i.getTextContentSize()-1),s=i.getTextContent()}else o--;const t=s[o];ot(i)&&\" \"!==t&&(r={node:i,offset:o})}if(null!==r)return r;let l=null;if(e<t.getTextContentSize())ot(t)&&(l=t.getTextContent()[e]);else{const e=t.getNextSibling();ot(e)&&(l=e.getTextContent()[0])}if(null!==l&&\" \"!==l)return n;{const r=function(t,e){let n=t,r=e,i=t.getTextContent(),o=t.getTextContentSize();for(;;){if(!ot(n)||r===o){if(n=n.getNextSibling(),null===n||y(n))return null;ot(n)&&(r=0,i=n.getTextContent(),o=n.getTextContentSize())}if(ot(n)){if(\" \"!==i[r])return{node:n,offset:r};r++}}}(t,e);return null!==r?r:n}}function at(t){const e=ut(t);return y(e)&&K(168),e}const ft=x({name:\"@lexical/code\",nodes:()=>[U,nt]});!function(t){t.languages.diff={coord:[/^(?:\\*{3}|-{3}|\\+{3}).*$/m,/^@@.*@@$/m,/^\\d.*$/m]};var e={\"deleted-sign\":\"-\",\"deleted-arrow\":\"<\",\"inserted-sign\":\"+\",\"inserted-arrow\":\">\",unchanged:\" \",diff:\"!\"};Object.keys(e).forEach(function(n){var r=e[n],i=[];/^\\w+$/.test(n)||i.push(/\\w+/.exec(n)[0]),\"diff\"===n&&i.push(\"bold\"),t.languages.diff[n]={pattern:RegExp(\"^(?:[\"+r+\"].*(?:\\r\\n?|\\n|(?![\\\\s\\\\S])))+\",\"m\"),alias:i,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 pt=globalThis.Prism||window.Prism,ht={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\"},dt={cpp:\"cpp\",java:\"java\",javascript:\"js\",md:\"markdown\",plaintext:\"plain\",python:\"py\",text:\"plain\",ts:\"typescript\"};function mt(t){return dt[t]||t}function yt(t){const e=mt(t);return ht[e]||e}const xt=()=>Object.keys(pt.languages).filter(t=>\"function\"!=typeof pt.languages[t]).sort();function _t(){const t=[];for(const[e,n]of Object.entries(ht))t.push([e,n]);return t}function St(){return[]}function vt(t){return\"string\"==typeof t?t:Array.isArray(t)?t.map(vt).join(\"\"):vt(t.content)}function Tt(t,e){const n=/^diff-([\\w-]+)/i.exec(e),r=t.getTextContent();let i=pt.tokenize(r,pt.languages[n?\"diff\":e]);return n&&(i=function(t,e){const n=e,r=pt.languages[n],i={tokens:t},o=pt.languages.diff.PREFIXES;for(const t of i.tokens){if(\"string\"==typeof t||!(t.type in o)||!Array.isArray(t.content))continue;const e=t.type;let n=0;const i=()=>(n++,new pt.Token(\"prefix\",o[e],e.replace(/^(\\w+).*/,\"$1\"))),s=t.content.filter(t=>\"string\"==typeof t||\"prefix\"!==t.type),l=t.content.length-s.length,u=pt.tokenize(vt(s),r);u.unshift(i());const c=/\\r\\n|\\n/g,g=t=>{const e=[];c.lastIndex=0;let r,o=0;for(;n<l&&(r=c.exec(t));){const n=r.index+r[0].length;e.push(t.slice(o,n)),o=n,e.push(i())}if(0!==e.length)return o<t.length&&e.push(t.slice(o)),e},a=t=>{for(let e=0;e<t.length&&n<l;e++){const n=t[e];if(\"string\"==typeof n){const r=g(n);r&&(t.splice(e,1,...r),e+=r.length-1)}else if(\"string\"==typeof n.content){const t=g(n.content);t&&(n.content=t)}else Array.isArray(n.content)?a(n.content):a([n.content])}};a(u),n<l&&u.push(i()),t.content=u}return i.tokens}(i,n[1])),bt(i)}function bt(t,e){const n=[];for(const r of t)if(\"string\"==typeof r){const t=r.split(/(\\n|\\t)/),i=t.length;for(let r=0;r<i;r++){const i=t[r];\"\\n\"===i||\"\\r\\n\"===i?n.push(g()):\"\\t\"===i?n.push(c()):i.length>0&&n.push(it(i,e))}}else{const{content:t,alias:e}=r;\"string\"==typeof t?n.push(...bt([t],\"prefix\"===r.type&&\"string\"==typeof e?e:r.type)):Array.isArray(t)&&n.push(...bt(t,\"unchanged\"===r.type?void 0:r.type))}return n}const Ct={$tokenize(t,e){return Tt(t,e||this.defaultLanguage)},defaultLanguage:M,tokenize(t,e){return pt.tokenize(t,pt.languages[e||\"\"]||pt.languages[this.defaultLanguage])}};function Nt(t,e,n){const r=t.getParent();Q(r)?kt(r,e,n):ot(t)&&t.replace(_(t.__text))}function jt(t,e){const n=e.getElementByKey(t.getKey());if(null===n)return;const r=t.getChildren(),i=r.length;if(i===n.__cachedChildrenLength)return;n.__cachedChildrenLength=i;let o=\"1\",s=1;for(let t=0;t<i;t++)y(r[t])&&(o+=\"\\n\"+ ++s);n.setAttribute(\"data-gutter\",o)}const wt=new Set;function kt(t,e,n){const r=t.getKey(),i=e.getKey()+\"/\"+r;void 0===t.getLanguage()&&t.setLanguage(n.defaultLanguage);const o=t.getLanguage()||n.defaultLanguage;if(!function(t){const e=function(t){const e=/^diff-([\\w-]+)/i.exec(t);return e?e[1]:null}(t),n=e||t;try{return!!n&&pt.languages.hasOwnProperty(n)}catch(t){return!1}}(o))return t.getIsSyntaxHighlightSupported()&&t.setIsSyntaxHighlightSupported(!1),void async function(){}();t.getIsSyntaxHighlightSupported()||t.setIsSyntaxHighlightSupported(!0),wt.has(i)||(wt.add(i),e.update(()=>{!function(t,e){const n=S(t);if(!Q(n)||!n.isAttached())return;const r=v();if(!T(r))return void e();const i=r.anchor,o=i.offset,s=\"element\"===i.type&&y(n.getChildAtIndex(i.offset-1));let u=0;if(!s){const t=i.getNode();u=o+t.getPreviousSiblings().reduce((t,e)=>t+e.getTextContentSize(),0)}if(!e())return;if(s)return void i.getNode().select(o,o);n.getChildren().some(t=>{const e=l(t);if(e||y(t)){const n=t.getTextContentSize();if(e&&n>=u)return t.select(u,u),!0;u-=n}return!1})}(r,()=>{const e=S(r);if(!Q(e)||!e.isAttached())return!1;const i=e.getLanguage()||n.defaultLanguage,o=n.$tokenize(e,i),s=function(t,e){let n=0;for(;n<t.length&&At(t[n],e[n]);)n++;const r=t.length,i=e.length,o=Math.min(r,i)-n;let s=0;for(;s<o;)if(s++,!At(t[r-s],e[i-s])){s--;break}const l=n,u=r-s,c=e.slice(n,i-s);return{from:l,nodesForReplacement:c,to:u}}(e.getChildren(),o),{from:l,to:u,nodesForReplacement:c}=s;return!(l===u&&!c.length)&&(t.splice(l,u-l,c),!0)})},{onUpdate:()=>{wt.delete(i)},skipTransforms:!0}))}function At(t,e){return ot(t)&&ot(e)&&t.__text===e.__text&&t.__highlightType===e.__highlightType||u(t)&&u(e)||y(t)&&y(e)}function Lt(t){if(!T(t))return!1;const e=t.anchor.getNode(),n=Q(e)?e:e.getParent(),r=t.focus.getNode(),i=Q(r)?r:r.getParent();return Q(n)&&n.is(i)}function Pt(t){const e=t.getNodes(),n=[];if(1===e.length&&Q(e[0]))return n;let r=[];for(let t=0;t<e.length;t++){const i=e[t];ot(i)||u(i)||y(i)||K(169),y(i)?r.length>0&&(n.push(r),r=[]):r.push(i)}if(r.length>0){const e=t.isBackward()?t.anchor:t.focus,i=b(r[0].getKey(),0,\"text\");e.is(i)||n.push(r)}return n}function Ot(t){const e=v();if(!T(e)||!Lt(e))return!1;const n=Pt(e),r=n.length;if(0===r&&e.isCollapsed())return t===C&&e.insertNodes([c()]),!0;if(0===r&&t===C&&\"\\n\"===e.getTextContent()){const t=c(),n=g(),r=e.isBackward()?\"previous\":\"next\";return e.insertNodes([t,n]),w(k(A(L(t,\"next\",0),P(h(n,\"next\"))),r)),!0}for(let i=0;i<r;i++){const r=n[i];if(r.length>0){let n=r[0];if(0===i&&(n=lt(n)),t===C){const t=c();if(n.insertBefore(t),0===i){const r=e.isBackward()?\"focus\":\"anchor\",i=b(n.getKey(),0,\"text\");e[r].is(i)&&e[r].set(t.getKey(),0,\"text\")}}else u(n)&&n.remove()}}return!0}function Ht(t,e){const n=v();if(!T(n))return!1;const{anchor:r,focus:i}=n,o=r.offset,s=i.offset,l=r.getNode(),c=i.getNode(),g=t===O;if(!Lt(n)||!ot(l)&&!u(l)||!ot(c)&&!u(c))return!1;if(!e.altKey){if(n.isCollapsed()){const t=l.getParentOrThrow();if(g&&0===o&&null===l.getPreviousSibling()){if(null===t.getPreviousSibling())return t.selectPrevious(),e.preventDefault(),!0}else if(!g&&o===l.getTextContentSize()&&null===l.getNextSibling()){if(null===t.getNextSibling())return t.selectNext(),e.preventDefault(),!0}}return!1}let a,f;if(l.isBefore(c)?(a=lt(l),f=ut(c)):(a=lt(c),f=ut(l)),null==a||null==f)return!1;const p=a.getNodesBetween(f);for(let t=0;t<p.length;t++){const e=p[t];if(!ot(e)&&!u(e)&&!y(e))return!1}e.preventDefault(),e.stopPropagation();const h=g?a.getPreviousSibling():f.getNextSibling();if(!y(h))return!0;const d=g?h.getPreviousSibling():h.getNextSibling();if(null==d)return!0;const m=ot(d)||u(d)||y(d)?g?lt(d):ut(d):null;let x=null!=m?m:d;return h.remove(),p.forEach(t=>t.remove()),t===O?(p.forEach(t=>x.insertBefore(t)),x.insertBefore(h)):(x.insertAfter(h),x=h,p.forEach(t=>{x.insertAfter(t),x=t})),n.setTextNodeRange(l,o,c,s),!0}function Et(t,e){const n=v();if(!T(n))return!1;const{anchor:r,focus:i}=n,o=r.getNode(),s=i.getNode(),l=t===H;if(!Lt(n)||!ot(o)&&!u(o)||!ot(s)&&!u(s))return!1;const c=s;if(\"rtl\"===ct(c)?!l:l){const t=gt(c,i.offset);if(null!==t){const{node:e,offset:r}=t;y(e)?e.selectNext(0,0):n.setTextNodeRange(e,r,e,r)}else c.getParentOrThrow().selectStart()}else{at(c).select()}return e.preventDefault(),e.stopPropagation(),!0}function zt(t,e){if(!t.hasNodes([U,nt]))throw new Error(\"CodeHighlightPlugin: CodeNode or CodeHighlightNode not registered on editor\");null==e&&(e=Ct);const n=[];return!0!==t._headless&&n.push(t.registerMutationListener(U,e=>{t.getEditorState().read(()=>{for(const[n,r]of e)if(\"destroyed\"!==r){const e=S(n);null!==e&&jt(e,t)}})},{skipInitialization:!1})),n.push(t.registerNodeTransform(U,n=>kt(n,t,e)),t.registerNodeTransform(f,n=>Nt(n,t,e)),t.registerNodeTransform(nt,n=>Nt(n,t,e)),t.registerCommand(E,e=>{const n=function(t){const e=v();if(!T(e)||!Lt(e))return null;const n=t?N:C,r=t?N:j,i=e.anchor,o=e.focus;if(i.is(o))return r;const s=Pt(e);if(1!==s.length)return n;const l=s[0];let u,c;0===l.length&&K(285),e.isBackward()?(u=o,c=i):(u=i,c=o);const g=lt(l[0]),a=ut(l[0]),f=b(g.getKey(),0,\"text\"),p=b(a.getKey(),a.getTextContentSize(),\"text\");return u.isBefore(f)||p.isBefore(c)?n:f.isBefore(u)||c.isBefore(p)?r:n}(e.shiftKey);return null!==n&&(e.preventDefault(),t.dispatchCommand(n,void 0),!0)},z),t.registerCommand(j,()=>!!Lt(v())&&(B([c()]),!0),z),t.registerCommand(C,t=>Ot(C),z),t.registerCommand(N,t=>Ot(N),z),t.registerCommand(O,t=>{const e=v();if(!T(e)||!Lt(e))return!1;const n=D().getFirstDescendant(),{anchor:r}=e,i=r.getNode();return(!n||!i||n.getKey()!==i.getKey())&&Ht(O,t)},z),t.registerCommand(F,t=>{const e=v();if(!T(e)||!Lt(e))return!1;const n=D().getLastDescendant(),{anchor:r}=e,i=r.getNode();return(!n||!i||n.getKey()!==i.getKey())&&Ht(F,t)},z),t.registerCommand(H,t=>Et(H,t),z),t.registerCommand(I,t=>Et(I,t),z)),i(...n)}const Bt=lt,Dt=ut,Ft=at,It=gt;export{it as $createCodeHighlightNode,X as $createCodeNode,ct as $getCodeLineDirection,at as $getEndOfCodeInLine,lt as $getFirstCodeNodeOfLine,ut as $getLastCodeNodeOfLine,gt as $getStartOfCodeInLine,ot as $isCodeHighlightNode,Q as $isCodeNode,ht as CODE_LANGUAGE_FRIENDLY_NAME_MAP,dt as CODE_LANGUAGE_MAP,ft as CodeExtension,nt as CodeHighlightNode,U as CodeNode,M as DEFAULT_CODE_LANGUAGE,Ct as PrismTokenizer,_t as getCodeLanguageOptions,xt as getCodeLanguages,St as getCodeThemeOptions,J as getDefaultCodeLanguage,Ft as getEndOfCodeInLine,Bt as getFirstCodeNodeOfLine,yt as getLanguageFriendlyName,Dt as getLastCodeNodeOfLine,It as getStartOfCodeInLine,mt as normalizeCodeLang,mt as normalizeCodeLanguage,zt 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{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,FORMAT_TEXT_COMMAND as a,$isNodeSelection as d,COMMAND_PRIORITY_LOW as u,DecoratorNode as f,createState as h,$getState as l,toggleTextFormatType as g,$setState as p,TEXT_TYPE_TO_FORMAT as m,shallowMergeConfig as v,RootNode as x,TextNode as y,LineBreakNode as S,TabNode as E,ParagraphNode as b,$isEditorState as w,HISTORY_MERGE_TAG as N,createEditor as O,mergeRegister as R,$getNodeByKey as C,createCommand as D,$create as M,CLICK_COMMAND as F,isDOMNode as I,$getNodeFromDOMNode as _,addClassNamesToElement as j,$createNodeSelection as A,$setSelection as k,removeClassNamesFromElement as P,KEY_TAB_COMMAND as K,OUTDENT_CONTENT_COMMAND as $,INDENT_CONTENT_COMMAND as z,INSERT_TAB_COMMAND as U,COMMAND_PRIORITY_CRITICAL as L,$isBlockElementNode as T,$createRangeSelection as B,$normalizeSelection__EXPERIMENTAL as W}from\"lexical\";export{configExtension,declarePeerDependency,defineExtension,safeCast,shallowMergeConfig}from\"lexical\";import{$handleIndentAndOutdent as G,$getNearestBlockElementAncestorOrThrow as V}from\"@lexical/utils\";const Z=Symbol.for(\"preact-signals\");function J(){if(Y>1)return void Y--;let t,e=!1;for(;void 0!==Q;){let n=Q;for(Q=void 0,tt++;void 0!==n;){const i=n.o;if(n.o=void 0,n.f&=-3,!(8&n.f)&&st(n))try{n.c()}catch(n){e||(t=n,e=!0)}n=i}}if(tt=0,Y--,e)throw t}function H(t){if(Y>0)return t();Y++;try{return t()}finally{J()}}let q,Q;function X(t){const e=q;q=void 0;try{return t()}finally{q=e}}let Y=0,tt=0,et=0;function nt(t){if(void 0===q)return;let e=t.n;return void 0===e||e.t!==q?(e={i:0,S:t,p:q.s,n:void 0,t:q,e:void 0,x:void 0,r:e},void 0!==q.s&&(q.s.n=e),q.s=e,t.n=e,32&q.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=q.s,e.n=void 0,q.s.n=e,q.s=e),e):void 0}function it(t,e){this.v=t,this.i=0,this.n=void 0,this.t=void 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 ot(t,e){return new it(t,e)}function st(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 rt(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 ct(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 at(t,e){it.call(this,void 0),this.x=t,this.s=void 0,this.g=et-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 dt(t,e){return new at(t,e)}function ut(t){const e=t.u;if(t.u=void 0,\"function\"==typeof e){Y++;const n=q;q=void 0;try{e()}catch(e){throw t.f&=-2,t.f|=8,ft(t),e}finally{q=n,J()}}}function ft(t){for(let e=t.s;void 0!==e;e=e.n)e.S.U(e);t.x=void 0,t.s=void 0,ut(t)}function ht(t){if(q!==this)throw new Error(\"Out-of-order effect\");ct(this),q=t,this.f&=-2,8&this.f&&ft(this),J()}function lt(t,e){this.x=t,this.u=void 0,this.s=void 0,this.o=void 0,this.f=32,this.name=null==e?void 0:e.name}function gt(t,e){const n=new lt(t,e);try{n.c()}catch(t){throw n.d(),t}const i=n.d.bind(n);return i[Symbol.dispose]=i,i}function pt(t,e={}){const n={};for(const i in t){const o=e[i],s=ot(void 0===o?t[i]:o);n[i]=s}return n}it.prototype.brand=Z,it.prototype.h=function(){return!0},it.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:X(()=>{var t;null==(t=this.W)||t.call(this)}))},it.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&&X(()=>{var t;null==(t=this.Z)||t.call(this)}))}},it.prototype.subscribe=function(t){return gt(()=>{const e=this.value,n=q;q=void 0;try{t(e)}finally{q=n}},{name:\"sub\"})},it.prototype.valueOf=function(){return this.value},it.prototype.toString=function(){return this.value+\"\"},it.prototype.toJSON=function(){return this.value},it.prototype.peek=function(){const t=q;q=void 0;try{return this.value}finally{q=t}},Object.defineProperty(it.prototype,\"value\",{get(){const t=nt(this);return void 0!==t&&(t.i=this.i),this.v},set(t){if(t!==this.v){if(tt>100)throw new Error(\"Cycle detected\");this.v=t,this.i++,et++,Y++;try{for(let t=this.t;void 0!==t;t=t.x)t.t.N()}finally{J()}}}}),at.prototype=new it,at.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===et)return!0;if(this.g=et,this.f|=1,this.i>0&&!st(this))return this.f&=-2,!0;const t=q;try{rt(this),q=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 q=t,ct(this),this.f&=-2,!0},at.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)}it.prototype.S.call(this,t)},at.prototype.U=function(t){if(void 0!==this.t&&(it.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)}},at.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(at.prototype,\"value\",{get(){if(1&this.f)throw new Error(\"Cycle detected\");const t=nt(this);if(this.h(),void 0!==t&&(t.i=this.i),16&this.f)throw this.v;return this.v}}),lt.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.u=t)}finally{t()}},lt.prototype.S=function(){if(1&this.f)throw new Error(\"Cycle detected\");this.f|=1,this.f&=-9,ut(this),rt(this),Y++;const t=q;return q=this,ht.bind(this,t)},lt.prototype.N=function(){2&this.f||(this.f|=2,this.o=Q,Q=this)},lt.prototype.d=function(){this.f|=8,1&this.f||ft(this)},lt.prototype.dispose=function(){this.d()};const mt=t({build:(t,e,n)=>pt(e),config:e({defaultSelection:\"rootEnd\",disabled:!1}),name:\"@lexical/extension/AutoFocus\",register(t,e,n){const i=n.getOutput();return gt(()=>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 vt(){const t=o(),e=s(),n=r();t.clear(),t.append(n),null!==e&&n.select(),c(e)&&(e.format=0)}function xt(t,e=vt){return t.registerCommand(n,n=>(t.update(e),!0),i)}const yt=t({build:(t,e,n)=>pt(e),config:e({$onClear:vt}),name:\"@lexical/extension/ClearEditor\",register(t,e,n){const{$onClear:i}=n.getOutput();return gt(()=>xt(t,i.value))}});function St(t){const e=new Set,n=new Set;for(const i of Et(t)){const t=\"function\"==typeof i?i:i.replace;e.add(t.getType()),n.add(t)}return{nodes:n,types:e}}function Et(t){return(\"function\"==typeof t.nodes?t.nodes():t.nodes)||[]}const bt=h(\"format\",{parse:t=>\"number\"==typeof t?t:0});class wt extends f{$config(){return this.config(\"decorator-text\",{extends:f,stateConfigs:[{flat:!0,stateConfig:bt}]})}getFormat(){return l(this,bt)}getFormatFlags(t,e){return g(this.getFormat(),t,e)}hasFormat(t){const e=m[t];return 0!==(this.getFormat()&e)}setFormat(t){return p(this,bt,t)}toggleFormat(t){const e=this.getFormat(),n=g(e,t,null);return this.setFormat(n)}isInline(){return!0}createDOM(){return document.createElement(\"span\")}updateDOM(){return!1}}function Nt(t){return t instanceof wt}function Ot(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 Rt(t,e,n=Dt){for(const[i,o]of Object.entries(n))t.hasFormat(o)&&(e=Ct(e,i));return e}function Ct(t,e){const n=document.createElement(e);return n.appendChild(t),n}const Dt={b:\"bold\",code:\"code\",em:\"italic\",i:\"italic\",mark:\"highlight\",s:\"strikethrough\",strong:\"bold\",sub:\"subscript\",sup:\"superscript\",u:\"underline\"},Mt=t({name:\"@lexical/extension/DecoratorText\",nodes:()=>[wt],register:(t,e,n)=>t.registerCommand(a,t=>{const e=s();if(d(e)||c(e))for(const n of e.getNodes())Nt(n)&&n.toggleFormat(t);return!1},u)});function Ft(t,e){let n;return ot(t(),{unwatched(){n&&(n(),n=void 0)},watched(){this.value=t(),n=e(this)}})}const It=t({build:t=>Ft(()=>t.getEditorState(),e=>t.registerUpdateListener(t=>{e.value=t.editorState})),name:\"@lexical/extension/EditorState\"});function _t(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.`)}function jt(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]=jt(n[t],i[t]);return t}return e}const At=0,kt=1,Pt=2,Kt=3,$t=4,zt=5,Ut=6,Lt=7;function Tt(t){return t.id===At}function Bt(t){return t.id===Pt}function Wt(t){return function(t){return t.id===kt}(t)||_t(305,String(t.id),String(kt)),Object.assign(t,{id:Pt})}const Gt=new Set;class Vt{builder;configs;_dependency;_peerNameSet;extension;state;_signal;constructor(t,e){this.builder=t,this.extension=e,this.configs=new Set,this.state={id:At}}mergeConfigs(){let t=this.extension.config||{};const e=this.extension.mergeConfig?this.extension.mergeConfig.bind(this.extension):v;for(const n of this.configs)t=e(t,n);return t}init(t){const e=this.state;Bt(e)||_t(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:Kt,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:$t,initResult:e,registerState:n})}(o,s,i)}build(t){const e=this.state;let n;e.id!==$t&&_t(307,String(e.id),String(zt)),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:zt,output:e,registerState:n})}(e,n,i)}register(t,e){this._signal=e;const n=this.state;n.id!==zt&&_t(308,String(n.id),String(zt));const i=this.extension.register&&this.extension.register(t,n.config,n.registerState);return this.state=function(t){return Object.assign(t,{id:Ut})}(n),()=>{const t=this.state;t.id!==Lt&&_t(309,String(n.id),String(Lt)),this.state=function(t){return Object.assign(t,{id:zt})}(t),i&&i()}}afterRegistration(t){const e=this.state;let n;return e.id!==Ut&&_t(310,String(e.id),String(Ut)),this.extension.afterRegistration&&(n=this.extension.afterRegistration(t,e.config,e.registerState)),this.state=function(t){return Object.assign(t,{id:Lt})}(e),n}getSignal(){return void 0===this._signal&&_t(311),this._signal}getInitResult(){void 0===this.extension.init&&_t(312,this.extension.name);const t=this.state;return function(t){return t.id>=$t}(t)||_t(313,String(t.id),String($t)),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>=Kt}(t)||_t(314,String(t.id),String(Kt)),{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&&_t(315,this.extension.name,t.name),e.getExtensionInitDependency()}getDependency(t){const e=this.builder.getExtensionRep(t);return void 0===e&&_t(315,this.extension.name,t.name),e.getExtensionDependency()}getState(){const t=this.state;return function(t){return t.id>=Lt}(t)||_t(316,String(t.id),String(Lt)),t}getDirectDependentNames(){return this.builder.incomingEdges.get(this.extension.name)||Gt}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>=zt})(t)||_t(317,this.extension.name),this._dependency={config:t.config,init:t.initResult,output:t.output}}return this._dependency}}const Zt={tag:N};function Jt(){const t=o();t.isEmpty()&&t.append(r())}const Ht=t({config:e({setOptions:Zt,updateOptions:Zt}),init:({$initialEditorState:t=Jt})=>({$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(w(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:[x,y,S,E,b]}),qt=Symbol.for(\"@lexical/extension/LexicalBuilder\");function Qt(...t){return ne.fromExtensions(t).buildEditor()}function Xt(){}function Yt(t){throw t}function te(t){return Array.isArray(t)?t:[t]}const ee=\"0.41.0+prod.esm\";class ne{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=ee,this.roots=t;for(const e of t)this.addExtension(e)}static fromExtensions(t){const e=[te(Ht)];for(const n of t)e.push(te(n));return new ne(e)}static maybeFromEditor(t){const e=t[qt];return e&&(e.PACKAGE_VERSION!==ee&&_t(292,e.PACKAGE_VERSION,ee),e instanceof ne||_t(293)),e}static fromEditor(t){const e=ne.maybeFromEditor(t);return void 0===e&&_t(294),e}constructEditor(){const{$initialEditorState:t,onError:e,...n}=this.buildCreateEditorArgs(),i=Object.assign(O({...n,...e?{onError:t=>{e(t,i)}}:{}}),{[qt]:this});for(const t of this.sortedExtensionReps())t.build(i);return i}buildEditor(){let t=Xt;function e(){try{t()}finally{t=Xt}}const n=Object.assign(this.constructEditor(),{dispose:e,[Symbol.dispose]:e});return t=R(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&&_t(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&&_t(296);const e=te(t),[n]=e;\"string\"!=typeof n.name&&_t(297,typeof n.name);let i=this.extensionNameMap.get(n.name);if(void 0!==i&&i.extension!==n&&_t(298,n.name),!i){i=new Vt(this,n),this.extensionNameMap.set(n.name,i);const t=this.conflicts.get(n.name);\"string\"==typeof t&&_t(299,n.name,t);for(const t of n.conflictsWith||[])this.extensionNameMap.has(t)&&_t(299,n.name,t),this.conflicts.set(t,n.name);for(const t of n.dependencies||[]){const e=te(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(Bt(o))return;const s=n.extension.name;var r;Tt(o)||_t(300,s,i||\"[unknown]\"),Tt(r=o)||_t(304,String(r.id),String(At)),o=Object.assign(r,{id:kt}),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=Wt(o),n.state=o,t.push(n)};for(const t of this.extensionNameMap.values())Tt(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&&_t(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 R(...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 Et(r)){if(\"function\"!=typeof t){const e=n.get(t.replace);e&&_t(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&&jt(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=Yt),t}}function ie(t,e){const n=ne.fromEditor(t).getExtensionRep(e);return void 0===n&&_t(303,e.name),n.getExtensionDependency()}function oe(t,e){const n=ne.fromEditor(t).extensionNameMap.get(e);return n?n.getExtensionDependency():void 0}function se(t,e){const n=oe(t,e);return void 0===n&&_t(291,e),n}const re=new Set,ce=t({build(t,e,n){const i=n.getDependency(It).output,o=ot({watchedNodeKeys:new Map}),r=Ft(()=>{},()=>gt(()=>{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=C(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=dt(()=>(r.value||re).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:[It],name:\"@lexical/extension/NodeSelection\"}),ae=D(\"INSERT_HORIZONTAL_RULE_COMMAND\");class de extends f{static getType(){return\"horizontalrule\"}static clone(t){return new de(t.__key)}static importJSON(t){return fe().updateFromJSON(t)}static importDOM(){return{hr:()=>({conversion:ue,priority:0})}}exportDOM(){return{element:document.createElement(\"hr\")}}createDOM(t){const e=document.createElement(\"hr\");return j(e,t.theme.hr),e}getTextContent(){return\"\\n\"}isInline(){return!1}updateDOM(){return!1}}function ue(){return{node:fe()}}function fe(){return M(de)}function he(t){return t instanceof de}const le=t({dependencies:[It,ce],name:\"@lexical/extension/HorizontalRule\",nodes:()=>[de],register(t,e,n){const{watchNodeKey:i}=n.getDependency(ce).output,o=ot({nodeSelections:new Map}),r=t._config.theme.hrSelected??\"selected\";return R(t.registerCommand(F,t=>{if(I(t.target)){const e=_(t.target);if(he(e))return function(t,e=!1){const n=s(),i=t.isSelected(),o=t.getKey();let r;e&&d(n)?r=n:(r=A(),k(r)),i?r.delete(o):r.add(o)}(e,t.shiftKey),!0}return!1},u),t.registerMutationListener(de,(e,n)=>{H(()=>{let n=!1;const{nodeSelections:s}=o.peek();for(const[o,r]of e.entries())if(\"destroyed\"===r)s.delete(o),n=!0;else{const e=s.get(o),r=t.getElementByKey(o);e?e.domNode.value=r:(n=!0,s.set(o,{domNode:ot(r),selectedSignal:i(o)}))}n&&(o.value={nodeSelections:s})})}),gt(()=>{const t=[];for(const{domNode:e,selectedSignal:n}of o.value.nodeSelections.values())t.push(gt(()=>{const t=e.value;if(t){n.value?j(t,r):P(t,r)}}));return R(...t)}))}});function ge(t){return t.canBeEmpty()}function pe(t,e,n=ge){return R(t.registerCommand(K,e=>{const n=s();if(!c(n))return!1;e.preventDefault();const i=function(t){if(t.getNodes().filter(t=>T(t)&&t.canIndent()).length>0)return!0;const e=t.anchor,n=t.focus,i=n.isBefore(e)?n:e,o=i.getNode(),s=V(o);if(s.canIndent()){const t=s.getKey();let e=B();if(e.anchor.set(t,0,\"element\"),e.focus.set(t,0,\"element\"),e=W(e),e.anchor.is(i))return!0}return!1}(n)?e.shiftKey?$:z:U;return t.dispatchCommand(i,void 0)},i),t.registerCommand(z,()=>{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 G(e=>{if(o(e)){const n=e.getIndent()+1;(!t||n<t)&&e.setIndent(n)}})},L))}const me=t({build:(t,e,n)=>pt(e),config:e({$canIndent:ge,disabled:!1,maxIndent:null}),name:\"@lexical/extension/TabIndentation\",register(t,e,n){const{disabled:i,maxIndent:o,$canIndent:s}=n.getOutput();return gt(()=>{if(!i.value)return pe(t,o,s)})}});export{fe as $createHorizontalRuleNode,Nt as $isDecoratorTextNode,he as $isHorizontalRuleNode,mt as AutoFocusExtension,yt as ClearEditorExtension,Mt as DecoratorTextExtension,wt as DecoratorTextNode,It as EditorStateExtension,le as HorizontalRuleExtension,de as HorizontalRuleNode,ae as INSERT_HORIZONTAL_RULE_COMMAND,Ht as InitialStateExtension,ne as LexicalBuilder,ce as NodeSelectionExtension,me as TabIndentationExtension,Ot as applyFormatFromStyle,Rt as applyFormatToDom,H as batch,Qt as buildEditorFromExtensions,dt as computed,gt as effect,ie as getExtensionDependencyFromEditor,St as getKnownTypesAndNodes,oe as getPeerDependencyFromEditor,se as getPeerDependencyFromEditorOrThrow,pt as namedSignals,xt as registerClearEditor,pe as registerTabIndentation,ot as signal,X as untracked,Ft 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{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{namedSignals as t,effect as e,batch as n,getPeerDependencyFromEditor as r}from\"@lexical/extension\";import{mergeRegister as o}from\"@lexical/utils\";import{defineExtension as i,safeCast as a,configExtension as s,UNDO_COMMAND as c,COMMAND_PRIORITY_EDITOR as u,REDO_COMMAND as d,CLEAR_EDITOR_COMMAND as l,CLEAR_HISTORY_COMMAND as f,CAN_REDO_COMMAND as p,CAN_UNDO_COMMAND as h,HISTORIC_TAG as m,COMPOSITION_START_TAG as y,COMPOSITION_END_TAG as g,HISTORY_PUSH_TAG as S,HISTORY_MERGE_TAG as _,$isRangeSelection as k,$isTextNode as x,$isRootNode as C}from\"lexical\";function v(t,e,n,r,o){if(null===t||0===n.size&&0===r.size&&!o)return 0;const i=e._selection,a=t._selection;if(o)return 1;if(!(k(i)&&k(a)&&a.isCollapsed()&&i.isCollapsed()))return 0;const s=function(t,e,n){const r=t._nodeMap,o=[];for(const t of e){const e=r.get(t);void 0!==e&&o.push(e)}for(const[t,e]of n){if(!e)continue;const n=r.get(t);void 0===n||C(n)||o.push(n)}return o}(e,n,r);if(0===s.length)return 0;if(s.length>1){const n=e._nodeMap,r=n.get(i.anchor.key),o=n.get(a.anchor.key);return r&&o&&!t._nodeMap.has(r.__key)&&x(r)&&1===r.__text.length&&1===i.anchor.offset?2:0}const c=s[0],u=t._nodeMap.get(c.__key);if(!x(u)||!x(c)||u.__mode!==c.__mode)return 0;const d=u.__text,l=c.__text;if(d===l)return 0;const f=i.anchor,p=a.anchor;if(f.key!==p.key||\"text\"!==f.type)return 0;const h=f.offset,m=p.offset,y=l.length-d.length;return 1===y&&m===h-1?2:-1===y&&m===h+1?3:-1===y&&m===h?4:0}function b(t,e){let n=Date.now(),r=0,o=Date.now(),i=0,a=null;return(s,c,u,d,l,f)=>{const p=Date.now();if(f.has(y)&&(o=n,i=r,a=s),f.has(m))return r=0,n=p,2;f.has(g)&&a&&(n=o,r=i,s=a);const h=v(s,c,d,l,t.isComposing()),C=(()=>{const o=null===u||u.editor===t,i=f.has(S);if(!i&&o&&f.has(_))return 0;if(1===h)return 2;if(null===s)return 1;const a=c._selection;if(!(d.size>0||l.size>0))return null!==a?0:2;const m=\"number\"==typeof e?e:e.peek();if(!1===i&&0!==h&&h===r&&p<n+m&&o)return 0;if(1===d.size){if(function(t,e,n){const r=e._nodeMap.get(t),o=n._nodeMap.get(t),i=e._selection,a=n._selection;return!(k(i)&&k(a)&&\"element\"===i.anchor.type&&\"element\"===i.focus.type&&\"text\"===a.anchor.type&&\"text\"===a.focus.type||!x(r)||!x(o)||r.__parent!==o.__parent)&&JSON.stringify(e.read(()=>r.exportJSON()))===JSON.stringify(n.read(()=>o.exportJSON()))}(Array.from(d)[0],s,c))return 0}return 1})();return n=p,r=h,C}}function w(t){t.undoStack=[],t.redoStack=[],t.current=null}function E(t,e,n){const r=b(t,n),i=o(t.registerCommand(c,()=>(function(t,e){const n=e.redoStack,r=e.undoStack;if(0!==r.length){const o=e.current,i=r.pop();null!==o&&(n.push(o),t.dispatchCommand(p,!0)),0===r.length&&t.dispatchCommand(h,!1),e.current=i||null,i&&i.editor.setEditorState(i.editorState,{tag:m})}}(t,e),!0),u),t.registerCommand(d,()=>(function(t,e){const n=e.redoStack,r=e.undoStack;if(0!==n.length){const o=e.current;null!==o&&(r.push(o),t.dispatchCommand(h,!0));const i=n.pop();0===n.length&&t.dispatchCommand(p,!1),e.current=i||null,i&&i.editor.setEditorState(i.editorState,{tag:m})}}(t,e),!0),u),t.registerCommand(l,()=>(w(e),!1),u),t.registerCommand(f,()=>(w(e),t.dispatchCommand(p,!1),t.dispatchCommand(h,!1),!0),u),t.registerUpdateListener(({editorState:n,prevEditorState:o,dirtyLeaves:i,dirtyElements:a,tags:s})=>{const c=e.current,u=e.redoStack,d=e.undoStack,l=null===c?null:c.editorState;if(null!==c&&n===l)return;const f=r(o,n,c,i,a,s);if(1===f)0!==u.length&&(e.redoStack=[],t.dispatchCommand(p,!1)),null!==c&&(d.push({...c}),t.dispatchCommand(h,!0));else if(2===f)return;e.current={editor:t,editorState:n}}));return i}function H(){return{current:null,redoStack:[],undoStack:[]}}const M=i({build:(e,{delay:n,createInitialHistoryState:r,disabled:o})=>t({delay:n,disabled:o,historyState:r(e)}),config:a({createInitialHistoryState:H,delay:300,disabled:\"undefined\"==typeof window}),name:\"@lexical/history/History\",register:(t,n,r)=>{const o=r.getOutput();return e(()=>o.disabled.value?void 0:E(t,o.historyState.value,o.delay))}});const z=i({dependencies:[s(M,{createInitialHistoryState:()=>{throw new Error(\"SharedHistory did not inherit parent history\")},disabled:!0})],name:\"@lexical/history/SharedHistory\",register(t,o,i){const{output:a}=i.getDependency(M),s=function(t){return t?r(t,M.name):null}(t._parentEditor);if(!s)return()=>{};const c=s.output;return e(()=>n(()=>{a.delay.value=c.delay.value,a.historyState.value=c.historyState.value,a.disabled.value=c.disabled.value}))}});export{M as HistoryExtension,z as SharedHistoryExtension,H as createEmptyHistoryState,E 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 s}from\"@lexical/utils\";import{createCommand as l,ElementNode as o,$isRangeSelection as u,$applyNodeReplacement as a,$getSelection as c,$isNodeSelection as g,$isElementNode as f,$normalizeSelection__EXPERIMENTAL as d,$setSelection as h,$getChildCaret as p,$copyNode as _,$rewindSiblingCaret as m,$caretFromPoint as x,$normalizeCaret as b,$setPointFromCaret as k,defineExtension as v,shallowMergeConfig as U,COMMAND_PRIORITY_LOW as T,PASTE_COMMAND as L,safeCast as S,isDOMNode as C,getNearestEditorFromDOMNode as O,$getNearestNodeFromDOMNode as R,TextNode as N,$isTextNode as P,$isLineBreakNode as y,$createTextNode as D}from\"lexical\";import{namedSignals as I,effect as A}from\"@lexical/extension\";const w=new Set([\"http:\",\"https:\",\"mailto:\",\"sms:\",\"tel:\"]);class E extends o{__url;__target;__rel;__title;static getType(){return\"link\"}static clone(t){return new E(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:s=null}=e;this.__url=t,this.__target=r,this.__rel=i,this.__title=s}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:W,priority:1})}}static importJSON(t){return K().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=Q(t);try{const e=new URL(Q(t));if(!w.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=K(this.__url,{rel:this.__rel,target:this.__target,title:this.__title});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://\")}}function M(t){const e=x(t,\"next\");return[e,e.getFlipped()]}function F(t,e){for(const n of e)if(n.origin.isAttached()){const e=b(n);return void k(t,e)}}function J(t){const e=c();let n=null,i=null;u(e)&&(n=M(e.anchor),i=M(e.focus));for(const e of p(t,\"next\")){const n=e.origin;if(f(n)&&!n.isInline()){const i=n.getChildren();if(i.length>0){const e=_(t);e.append(...i),n.append(e)}r(n,m(e),{$shouldSplit:()=>!1})}}if(t.isEmpty()){const e=t.getParent();t.remove(),e&&e.isEmpty()&&e.remove()}u(e)&&(F(e.anchor,n),F(e.focus,i),d(e))}function W(t){let n=null;if(e(t)){const e=t.textContent;(null!==e&&\"\"!==e||t.children.length>0)&&(n=K(t.getAttribute(\"href\")||\"\",{rel:t.getAttribute(\"rel\"),target:t.getAttribute(\"target\"),title:t.getAttribute(\"title\")}))}return{node:n}}function K(t=\"\",e){return a(new E(t,e))}function B(t){return t instanceof E}class $ extends E{__isUnlinked;constructor(t=\"\",e={},n){super(t,e,n),this.__isUnlinked=void 0!==e.isUnlinked&&null!==e.isUnlinked&&e.isUnlinked}static getType(){return\"autolink\"}static clone(t){return new $(t.__url,{isUnlinked:t.__isUnlinked,rel:t.__rel,target:t.__target,title:t.__title},t.__key)}getIsUnlinked(){return this.__isUnlinked}setIsUnlinked(t){const e=this.getWritable();return e.__isUnlinked=t,e}createDOM(t){return this.__isUnlinked?document.createElement(\"span\"):super.createDOM(t)}updateDOM(t,e,n){return super.updateDOM(t,e,n)||t.__isUnlinked!==this.__isUnlinked}static importJSON(t){return z().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=z(this.__url,{isUnlinked:this.__isUnlinked,rel:this.__rel,target:this.__target,title:this.__title});return this.insertAfter(n,e),n}}function z(t=\"\",e){return a(new $(t,e))}function H(t){return t instanceof $}const j=l(\"TOGGLE_LINK_COMMAND\");function G(t,e){if(\"element\"===t.type){const n=t.getNode();f(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 Z(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:s}=e,l=void 0===e.rel?\"noreferrer\":e.rel,o=c();if(null===o||!u(o)&&!g(o))return;if(g(o)){const t=o.getNodes();if(0===t.length)return;return void t.forEach(t=>{if(null===r){const e=n(t,t=>!H(t)&&B(t));e&&(e.insertBefore(t),0===e.getChildren().length&&e.remove())}else{const e=n(t,t=>!H(t)&&B(t));if(e)e.setURL(r),void 0!==i&&e.setTarget(i),void 0!==l&&e.setRel(l);else{const e=K(r,{rel:l,target:i});t.insertBefore(e),e.append(t)}}})}if(o.isCollapsed()&&null===r)for(const t of o.getNodes()){const e=n(t,t=>!H(t)&&B(t));return void(null!==e&&(e.getChildren().forEach(t=>{e.insertBefore(t)}),e.remove()))}const a=o.extract();if(null===r){const t=new Set;return void a.forEach(e=>{const r=n(e,t=>!H(t)&&B(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())||f(r)&&e.some(e=>t.isParentOf(e)&&r.isParentOf(e)),s=r.filter(i);if(s.length===r.length)return r.forEach(e=>t.insertBefore(e)),void t.remove();const l=r.findIndex(i),o=r.findLastIndex(i),u=0===l,a=o===r.length-1;if(u)s.forEach(e=>t.insertBefore(e));else if(a)for(let e=s.length-1;e>=0;e--)t.insertAfter(s[e]);else{for(let e=s.length-1;e>=0;e--)t.insertAfter(s[e]);const e=r.slice(o+1);if(e.length>0){const n=K(t.getURL(),{rel:t.getRel(),target:t.getTarget(),title:t.getTitle()});s[s.length-1].insertAfter(n),e.forEach(t=>n.append(t))}}}(r,a),t.add(e)}})}const p=new Set,_=t=>{p.has(t.getKey())||(p.add(t.getKey()),t.setURL(r),void 0!==i&&t.setTarget(i),void 0!==l&&t.setRel(l),void 0!==s&&t.setTitle(s))};if(1===a.length){const t=a[0],e=n(t,B);if(null!==e)return _(e)}!function(t){const e=c();if(!u(e))return t();const n=d(e),r=n.isBackward(),i=G(n.anchor,r?-1:0),s=G(n.focus,r?0:-1),l=t();if(i||s){const t=c();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(s){const t=s.getParent();t&&e.focus.set(t.getKey(),s.getIndexWithinParent()+(r?0:1),\"element\")}h(d(e))}}}(()=>{let t=null;for(const e of a){if(!e.isAttached())continue;const o=n(e,B);if(o){_(o);continue}if(f(e)){if(!e.isInline())continue;if(B(e)){if(!(H(e)||null!==t&&t.getParentOrThrow().isParentOf(e))){_(e),t=e;continue}for(const t of e.getChildren())e.insertBefore(t);e.remove();continue}}const u=e.getPreviousSibling();B(u)&&u.is(t)?u.append(e):(t=K(r,{rel:l,target:i,title:s}),e.insertAfter(t),t.append(e))}})}const q=/^\\+?[0-9\\s()-]{5,}$/;function Q(t){return t.match(/^[a-z][a-z0-9+.-]*:/i)||t.match(/^[/#.]/)?t:t.includes(\"@\")?`mailto:${t}`:q.test(t)?`tel:${t}`:`https://${t}`}function V(t,e){return i(t.registerNodeTransform(E,J),A(()=>t.registerCommand(j,t=>{const n=e.validateUrl.peek(),r=e.attributes.peek();if(null===t)return Z(null),!0;if(\"string\"==typeof t)return!(void 0!==n&&!n(t))&&(Z(t,r),!0);{const{url:e,target:n,rel:i,title:s}=t;return Z(e,{...r,rel:i,target:n,title:s}),!0}},T)),A(()=>{const n=e.validateUrl.value;if(!n)return;const r=e.attributes.value;return t.registerCommand(L,e=>{const i=c();if(!u(i)||i.isCollapsed()||!s(e,ClipboardEvent))return!1;if(null===e.clipboardData)return!1;const l=e.clipboardData.getData(\"text\");return!!n(l)&&(!i.getNodes().some(t=>f(t))&&(t.dispatchCommand(j,{...r,url:l}),e.preventDefault(),!0))},T)}))}const X=v({build:(t,e,n)=>I(e),config:{attributes:void 0,validateUrl:void 0},mergeConfig(t,e){const n=U(t,e);return t.attributes&&(n.attributes=U(t.attributes,n.attributes)),n},name:\"@lexical/link/Link\",nodes:()=>[E],register:(t,e,n)=>V(t,n.getOutput())});function Y(t,r,i={}){const s=i=>{const s=i.target;if(!C(s))return;const l=O(s);if(null===l)return;let o=null,a=null;if(l.update(()=>{const t=R(s);if(null!==t){const i=n(t,f);if(!r.disabled.peek())if(B(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}(s,e);null!==t&&(o=t.href,a=t.target)}}}),null===o||\"\"===o)return;const g=t.getEditorState().read(c);if(u(g)&&!g.isCollapsed())return void i.preventDefault();const d=\"auxclick\"===i.type&&1===i.button;window.open(o,r.newTab.peek()||d||i.metaKey||i.ctrlKey||\"_blank\"===a?\"_blank\":\"_self\"),i.preventDefault()},l=t=>{1===t.button&&s(t)};return t.registerRootListener((t,e)=>{null!==e&&(e.removeEventListener(\"click\",s),e.removeEventListener(\"mouseup\",l)),null!==t&&(t.addEventListener(\"click\",s,i),t.addEventListener(\"mouseup\",l,i))})}const tt=v({build:(t,e,n)=>I(e),config:S({disabled:!1,newTab:!1}),dependencies:[X],name:\"@lexical/link/ClickableLink\",register:(t,e,n)=>Y(t,n.getOutput())});function et(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 nt(t,e){for(let n=0;n<e.length;n++){const r=e[n](t);if(r)return r}return null}const rt=/[.,;\\s]/;function it(t){return rt.test(t)}function st(t){return it(t[t.length-1])}function lt(t){return it(t[0])}function ot(t){let e=t.getPreviousSibling();return f(e)&&(e=e.getLastDescendant()),null===e||y(e)||P(e)&&st(e.getTextContent())}function ut(t){let e=t.getNextSibling();return f(e)&&(e=e.getFirstDescendant()),null===e||y(e)||P(e)&&lt(e.getTextContent())}function at(t,e,n,r){if(!(t>0?it(n[t-1]):ot(r[0])))return!1;return e<n.length?it(n[e]):ut(r[r.length-1])}function ct(t,e,n){const r=[],i=[],s=[];let l=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),l+=a):c>=n?s.push(t):i.push(t),o+=a,u.shift()}return[l,r,i,s]}function gt(t,e,n,r){const i=z(r.url,r.attributes);if(1===t.length){let s,l=t[0];0===e?[s,l]=l.splitText(n):[,s,l]=l.splitText(e,n);const o=D(r.text);return o.setFormat(s.getFormat()),o.setDetail(s.getDetail()),o.setStyle(s.getStyle()),i.append(o),s.replace(i),l}if(t.length>1){const r=t[0];let s,l=r.getTextContent().length;0===e?s=r:[,s]=r.splitText(e);const o=[];let a;for(let e=1;e<t.length;e++){const r=t[e],i=r.getTextContent().length,s=l;if(s<n)if(l+i<=n)o.push(r);else{const[t,e]=r.splitText(n-s);o.push(t),a=e}l+=i}const f=c(),d=f?f.getNodes().find(P):void 0,h=D(s.getTextContent());return h.setFormat(s.getFormat()),h.setDetail(s.getDetail()),h.setStyle(s.getStyle()),i.append(h,...o),d&&d===s&&(u(f)?h.select(f.anchor.offset,f.focus.offset):g(f)&&h.select(0,h.getTextContent().length)),s.replace(i),a}}function ft(t,e,n){const r=t.getChildren(),i=r.length;for(let e=0;e<i;e++){const i=r[e];if(!P(i)||!i.isSimpleText())return dt(t),void n(null,t.getURL())}const s=t.getTextContent(),l=nt(s,e);if(null===l||l.text!==s)return dt(t),void n(null,t.getURL());if(!ot(t)||!ut(t))return dt(t),void n(null,t.getURL());const o=t.getURL();if(o!==l.url&&(t.setURL(l.url),n(l.url,o)),l.attributes){const e=t.getRel();e!==l.attributes.rel&&(t.setRel(l.attributes.rel||null),n(l.attributes.rel||null,e));const r=t.getTarget();r!==l.attributes.target&&(t.setTarget(l.attributes.target||null),n(l.attributes.target||null,r))}}function dt(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 ht={changeHandlers:[],excludeParents:[],matchers:[]};function pt(t,e=ht){const{matchers:n,changeHandlers:r,excludeParents:s}=e,l=(t,e)=>{for(const n of r)n(t,e)};return i(t.registerNodeTransform(N,t=>{const e=t.getParentOrThrow(),r=t.getPreviousSibling();if(H(e)&&!e.getIsUnlinked())ft(e,n,l);else if(!B(e)&&!s.some(t=>t(e))){if(t.isSimpleText()&&(lt(t.getTextContent())||!H(r))){const e=function(t){const e=[t];let n=t.getNextSibling();for(;null!==n&&P(n)&&n.isSimpleText()&&(e.push(n),!/[\\s]/.test(n.getTextContent()));)n=n.getNextSibling();return e}(t);!function(t,e,n){for(const e of t){const t=e.getParent();if(H(t)&&!t.getIsUnlinked())return}let r=[...t];const i=r.map(t=>t.getTextContent()).join(\"\");let s,l=i,o=0;for(;(s=nt(l,e))&&null!==s;){const t=s.index,e=t+s.length;if(at(o+t,o+e,i,r)){const[i,,u,a]=ct(r,o+t,o+e);let c=!1;for(const t of u){const e=t.getParent();if(H(e)&&!e.getIsUnlinked()){c=!0;break}}if(c){o+=e,l=l.substring(e);continue}const g=gt(u,o+t-i,o+e-i,s);r=g?[g,...a]:a,n(s.url,null),o=0}else o+=e;l=l.substring(e)}}(e,n,l)}!function(t,e,n){const r=t.getParent(),i=t.getPreviousSibling(),s=t.getNextSibling(),l=t.getTextContent();if(!H(r)||r.getIsUnlinked()){if(H(i)&&!i.getIsUnlinked()&&i.is(t.getPreviousSibling())&&t.getParent()===i.getParent()){if(!lt(l))return dt(i),void n(null,i.getURL());if(o=l,i.isEmailURI()?/^\\.[a-zA-Z]{2,}/.test(o):/^\\.[a-zA-Z0-9]{1,}/.test(o)){const r=i.getTextContent()+l,s=nt(r,e);null!==s&&s.text===r&&(i.append(t),ft(i,e,n),n(null,i.getURL()))}}var o;!H(s)||s.getIsUnlinked()||st(l)||s.is(t.getNextSibling())&&t.getParent()===s.getParent()&&(dt(s),n(null,s.getURL()))}}(t,n,l)}}),t.registerCommand(j,t=>{const e=c();if(null!==t||!u(e))return!1;return e.extract().forEach(t=>{const e=t.getParent();H(e)&&(e.setIsUnlinked(!e.getIsUnlinked()),e.markDirty())}),!1},T))}const _t=v({config:ht,dependencies:[X],mergeConfig(t,e){const n=U(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:[$],register:pt}),mt=Z;export{z as $createAutoLinkNode,K as $createLinkNode,H as $isAutoLinkNode,B as $isLinkNode,Z as $toggleLink,_t as AutoLinkExtension,$ as AutoLinkNode,tt as ClickableLinkExtension,X as LinkExtension,E as LinkNode,j as TOGGLE_LINK_COMMAND,et as createLinkMatcherWithRegExp,Q as formatUrl,pt as registerAutoLink,Y as registerClickableLink,V as registerLink,mt 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{effect as e,namedSignals as t}from\"@lexical/extension\";import{$getNearestNodeOfType as n,removeClassNamesFromElement as r,addClassNamesToElement as i,isHTMLElement as s,mergeRegister as o,$findMatchingParent as l,calculateZoomLevel as c}from\"@lexical/utils\";import{$getSelection as a,$isRangeSelection as u,$isRootOrShadowRoot as g,$createParagraphNode as h,$isElementNode as d,$isLeafNode as f,$setPointFromCaret as p,$normalizeCaret as m,$getChildCaret as _,$isTextNode as y,ElementNode as C,buildImportMap as T,$isParagraphNode as v,$applyNodeReplacement as S,normalizeClassNames as x,$createTextNode as k,createCommand as b,COMMAND_PRIORITY_LOW as L,KEY_ARROW_DOWN_COMMAND as N,KEY_ARROW_UP_COMMAND as P,KEY_ESCAPE_COMMAND as F,KEY_SPACE_COMMAND as O,$getNearestNodeFromDOMNode as A,KEY_ARROW_LEFT_COMMAND as E,getNearestEditorFromDOMNode as I,$addUpdateTag as w,SKIP_SELECTION_FOCUS_TAG as D,SKIP_DOM_SELECTION_TAG as M,defineExtension as R,safeCast as K,$getNodeByKey as B,INSERT_PARAGRAPH_COMMAND as W,TextNode as J}from\"lexical\";import{getStyleObjectFromCSS as U}from\"@lexical/selection\";function $(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 V(e){let t=1,n=e.getParent();for(;null!=n;){if(ae(n)){const e=n.getParent();if(me(e)){t++,n=e.getParent();continue}$(40)}return t}return t}function z(e){let t=e.getParent();me(t)||$(40);let n=t;for(;null!==n;)n=n.getParent(),me(n)&&(t=n);return t}function X(e){let t=[];const n=e.getChildren().filter(ae);for(let e=0;e<n.length;e++){const r=n[e],i=r.getFirstChild();me(i)?t=t.concat(X(i)):t.push(r)}return t}function j(e){return ae(e)&&me(e.getFirstChild())}function q(e){return ce().append(e)}function H(e,t){return ae(e)&&(0===t.length||1===t.length&&e.is(t[0])&&0===e.getChildrenSize())}function G(e){const t=a();if(null!==t){let n=t.getNodes();if(u(t)){const r=t.getStartEndPoints();null===r&&$(143);const[i]=r,s=i.getNode(),o=s.getParent();if(g(s)){const e=s.getFirstChild();if(e)n=e.selectStart().getNodes();else{const e=h();s.append(e),n=e.select().getNodes()}}else if(H(s,n)){const t=pe(e);if(g(o)){s.replace(t);const e=ce();d(s)&&(e.setFormat(s.getFormatType()),e.setIndent(s.getIndent())),t.append(e)}else if(ae(s)){const e=s.getParentOrThrow();Q(t,e.getChildren()),e.replace(t)}return}}const r=new Set;for(let t=0;t<n.length;t++){const i=n[t];if(d(i)&&i.isEmpty()&&!ae(i)&&!r.has(i.getKey())){Y(i,e);continue}let s=f(i)?i.getParent():ae(i)&&i.isEmpty()?i:null;for(;null!=s;){const t=s.getKey();if(me(s)){if(!r.has(t)){const n=pe(e);Q(n,s.getChildren()),s.replace(n),r.add(t)}break}{const n=s.getParent();if(g(n)&&!r.has(t)){r.add(t),Y(s,e);break}s=n}}}}}function Q(e,t){e.splice(e.getChildrenSize(),0,t)}function Y(e,t){if(me(e))return e;const n=e.getPreviousSibling(),r=e.getNextSibling(),i=ce();let s;if(Q(i,e.getChildren()),me(n)&&t===n.getListType())n.append(i),me(r)&&t===r.getListType()&&(Q(n,r.getChildren()),r.remove()),s=n;else if(me(r)&&t===r.getListType())r.getFirstChildOrThrow().insertBefore(i),s=r;else{const n=pe(t);n.append(i),e.replace(n),s=n}i.setFormat(e.getFormatType()),i.setIndent(e.getIndent());const o=a();return u(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 Z(e,t){const n=e.getLastChild(),r=t.getFirstChild();n&&r&&j(n)&&j(r)&&(Z(n.getFirstChild(),r.getFirstChild()),r.remove());const i=t.getChildren();i.length>0&&e.append(...i),t.remove()}function ee(){const e=a();if(u(e)){const t=new Set,r=e.getNodes(),i=e.anchor.getNode();if(H(i,r))t.add(z(i));else for(let e=0;e<r.length;e++){const i=r[e];if(f(i)){const e=n(i,se);null!=e&&t.add(z(e))}}for(const n of t){let t=n;const r=X(n);for(const n of r){const r=h().setTextStyle(e.style).setTextFormat(e.format);Q(r,n.getChildren()),t.insertAfter(r),t=r,n.__key===e.anchor.key&&p(e.anchor,m(_(r,\"next\"))),n.__key===e.focus.key&&p(e.focus,m(_(r,\"next\"))),n.remove()}n.remove()}}}function te(e){const t=\"check\"!==e.getListType();let n=e.getStart();for(const r of e.getChildren())ae(r)&&(r.getValue()!==n&&r.setValue(n),t&&null!=r.getLatest().__checked&&r.setChecked(void 0),me(r.getFirstChild())||n++)}function ne(e){const t=new Set;if(j(e)||t.has(e.getKey()))return;const n=e.getParent(),r=e.getNextSibling(),i=e.getPreviousSibling();if(j(r)&&j(i)){const n=i.getFirstChild();if(me(n)){n.append(e);const i=r.getFirstChild();if(me(i)){Q(n,i.getChildren()),r.remove(),t.add(r.getKey())}}}else if(j(r)){const t=r.getFirstChild();if(me(t)){const n=t.getFirstChild();null!==n&&n.insertBefore(e)}}else if(j(i)){const t=i.getFirstChild();me(t)&&t.append(e)}else if(me(n)){const t=ce().setTextFormat(e.getTextFormat()).setTextStyle(e.getTextStyle()),s=pe(n.getListType()).setTextFormat(n.getTextFormat()).setTextStyle(n.getTextStyle());t.append(s),s.append(e),i?i.insertAfter(t):r?r.insertBefore(t):n.append(t)}}function re(e){if(j(e))return;const t=e.getParent(),n=t?t.getParent():void 0;if(me(n?n.getParent():void 0)&&ae(n)&&me(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=t.getListType(),i=ce(),s=pe(r);i.append(s),e.getPreviousSiblings().forEach(e=>s.append(e));const o=ce(),l=pe(r);o.append(l),Q(l,e.getNextSiblings()),n.insertBefore(i),n.insertAfter(o),n.replace(e)}}}function ie(e=!1){const t=a();if(!u(t)||!t.isCollapsed())return!1;const n=t.anchor.getNode();let r=null;if(ae(n)&&0===n.getChildrenSize())r=n;else if(y(n)){const e=n.getParent();ae(e)&&e.getChildren().every(e=>y(e)&&\"\"===e.getTextContent().trim())&&(r=e)}if(null===r)return!1;const i=z(r),s=r.getParent();me(s)||$(40);const o=s.getParent();let l;if(g(o))l=h(),i.insertAfter(l);else{if(!ae(o))return!1;l=ce(),o.insertAfter(l)}l.setTextStyle(t.style).setTextFormat(t.format).select();const c=r.getNextSiblings();if(c.length>0){const t=e?function(e,t){return e.getStart()+t.getIndexWithinParent()}(s,r):1,n=pe(s.getListType(),t);if(ae(l)){const e=ce();e.append(n),l.insertAfter(e)}else l.insertAfter(n);n.append(...c)}return function(e){let t=e;for(;null==t.getNextSibling()&&null==t.getPreviousSibling();){const e=t.getParent();if(null==e||!ae(e)&&!me(e))break;t=e}t.remove()}(r),!0}class se extends C{__value;__checked;$config(){return this.config(\"listitem\",{$transform:e=>{if(null==e.__checked)return;const t=e.getParent();me(t)&&\"check\"!==t.getListType()&&null!=e.getChecked()&&e.setChecked(void 0)},extends:C,importDOM:T({li:()=>({conversion:oe,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,n){!function(e,t,n){const r=t.getParent();!me(r)||\"check\"!==r.getListType()||me(t.getFirstChild())?(e.removeAttribute(\"role\"),e.removeAttribute(\"tabIndex\"),e.removeAttribute(\"aria-checked\")):(e.setAttribute(\"role\",\"checkbox\"),e.setAttribute(\"tabIndex\",\"-1\"),n&&t.__checked===n.__checked||e.setAttribute(\"aria-checked\",t.getChecked()?\"true\":\"false\"))}(t,this,e),t.value=this.__value,function(e,t,n){const s=[],o=[],l=t.list,c=l?l.listitem:void 0;let a;l&&l.nested&&(a=l.nested.listitem);void 0!==c&&s.push(...x(c));if(l){const e=n.getParent(),t=me(e)&&\"check\"===e.getListType(),r=n.getChecked();t&&!r||o.push(l.listitemUnchecked),t&&r||o.push(l.listitemChecked),t&&s.push(r?l.listitemChecked:l.listitemUnchecked)}if(void 0!==a){const e=x(a);n.getChildren().some(e=>me(e))?s.push(...e):o.push(...e)}o.length>0&&r(e,...o);s.length>0&&i(e,...s)}(t,n.theme,this);const s=e?e.__style:\"\",o=this.__style;s!==o&&(\"\"===o?t.removeAttribute(\"style\"):t.style.cssText=o),function(e,t,n){const r=U(t.__textStyle);for(const t in r)e.style.setProperty(`--listitem-marker-${t}`,r[t]);if(n)for(const t in U(n.__textStyle))t in r||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),{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(d(n)&&this.canMergeWith(n)){const e=n.getChildren();this.append(...e),n.remove()}else super.append(n)}return this}replace(e,t){if(ae(e))return super.replace(e);this.setIndent(0);const n=this.getParentOrThrow();if(!me(n))return e;if(n.__first===this.getKey())n.insertBefore(e);else if(n.__last===this.getKey())n.insertAfter(e);else{const t=pe(n.getListType());let r=this.getNextSibling();for(;r;){const e=r;r=r.getNextSibling(),t.append(e)}n.insertAfter(e),e.insertAfter(t)}return t&&(d(e)||$(139),this.getChildren().forEach(t=>{e.append(t)})),this.remove(),0===n.getChildrenSize()&&n.remove(),e}insertAfter(e,t=!0){const n=this.getParentOrThrow();if(me(n)||$(39),ae(e))return super.insertAfter(e,t);const r=this.getNextSiblings();if(n.insertAfter(e,t),0!==r.length){const i=pe(n.getListType());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&&j(t)&&j(n)&&(Z(t.getFirstChild(),n.getFirstChild()),n.remove())}insertNewAfter(e,t=!0){const n=ce().updateFromJSON(this.exportJSON()).setChecked(!this.getChecked()&&void 0);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=ae(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 me(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(;ae(t);)t=t.getParentOrThrow().getParentOrThrow(),n++;return n}setIndent(e){\"number\"!=typeof e&&$(117),(e=Math.floor(e))>=0||$(199);let t=this.getIndent();for(;t!==e;)t<e?(ne(this),t++):(re(this),t--);return this}canInsertAfter(e){return ae(e)}canReplaceWith(e){return ae(e)}canMergeWith(e){return ae(e)||v(e)}extractWithChild(e,t){if(!u(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 pe(\"bullet\")}canMergeWhenEmpty(){return!0}}function oe(e){if(e.classList.contains(\"task-list-item\"))for(const t of e.children)if(\"INPUT\"===t.tagName)return le(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 le(t.children[0]);const t=e.getAttribute(\"aria-checked\");return{node:ce(\"true\"===t||\"false\"!==t&&void 0)}}function le(e){if(!(\"checkbox\"===e.getAttribute(\"type\")))return{node:null};return{node:ce(e.hasAttribute(\"checked\"))}}function ce(e){return S(new se(void 0,e))}function ae(e){return e instanceof se}class ue extends C{__tag;__start;__listType;$config(){return this.config(\"list\",{$transform:e=>{!function(e){const t=e.getNextSibling();me(t)&&e.getListType()===t.getListType()&&Z(e,t)}(e),te(e)},extends:C,importDOM:T({ol:()=>({conversion:de,priority:0}),ul:()=>({conversion:de,priority:0})})})}constructor(e=\"number\",t=1,n){super(n);const r=fe[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,ge(r,e.theme,this),r}updateDOM(e,t,n){return e.__tag!==this.__tag||e.__listType!==this.__listType||(ge(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 s(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];ae(t)||(r===n&&(r=[...n]),r[e]=ce().append(!d(t)||me(t)||t.isInline()?t:k(t.getTextContent())))}return super.splice(e,t,r)}extractWithChild(e){return ae(e)}}function ge(e,t,n){const s=[],o=[],l=t.list;if(void 0!==l){const e=l[`${n.__tag}Depth`]||[],t=V(n)-1,r=t%e.length,i=e[r],c=l[n.__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\"===n.__listType&&s.push(g),void 0!==i){s.push(...x(i));for(let t=0;t<e.length;t++)t!==r&&o.push(n.__tag+t)}if(void 0!==a){const e=x(a);t>1?s.push(...e):o.push(...e)}}o.length>0&&r(e,...o),s.length>0&&i(e,...s)}function he(e){const t=[];for(let n=0;n<e.length;n++){const r=e[n];if(ae(r)){t.push(r);const e=r.getChildren();e.length>1&&e.forEach(e=>{me(e)&&t.push(q(e))})}else t.push(q(r))}return t}function de(e){const t=e.nodeName.toLowerCase();let n=null;if(\"ol\"===t){n=pe(\"number\",e.start)}else\"ul\"===t&&(n=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(s(t)&&t.hasAttribute(\"aria-checked\"))return!0;return!1}(e)?pe(\"check\"):pe(\"bullet\"));return{after:he,node:n}}const fe={ol:\"number\",ul:\"bullet\"};function pe(e=\"number\",t=1){return S(new ue(e,t))}function me(e){return e instanceof ue}const _e=b(\"INSERT_CHECK_LIST_COMMAND\");function ye(e,t){const n=t&&t.disableTakeFocusOnClick||!1,r=e=>{!function(e,t){Ce(e,()=>{if(s(e.target)){const n=e.target,r=I(n);null!=r&&r.isEditable()&&r.update(()=>{const e=A(n);ae(e)&&(t?(w(D),w(M)):n.focus(),e.toggleChecked())})}})}(e,n)},i=e=>{!function(e,t){Ce(e,()=>{e.preventDefault(),t&&e.stopPropagation()})}(e,n)};return o(e.registerCommand(_e,()=>(G(\"check\"),!0),L),e.registerCommand(N,t=>ve(t,e,!1),L),e.registerCommand(P,t=>ve(t,e,!0),L),e.registerCommand(F,()=>{if(null!=Te()){const t=e.getRootElement();return null!=t&&t.focus(),!0}return!1},L),e.registerCommand(O,t=>{const n=Te();return!(null==n||!e.isEditable())&&(e.update(()=>{const e=A(n);ae(e)&&(t.preventDefault(),e.toggleChecked())}),!0)},L),e.registerCommand(E,t=>e.getEditorState().read(()=>{const n=a();if(u(n)&&n.isCollapsed()){const{anchor:r}=n,i=\"element\"===r.type;if(i||0===r.offset){const n=r.getNode(),s=l(n,e=>d(e)&&!e.isInline());if(ae(s)){const r=s.getParent();if(me(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}),L),e.registerRootListener((e,t)=>{null!==e&&(e.addEventListener(\"click\",r),e.addEventListener(\"pointerdown\",i,{capture:!0}),e.addEventListener(\"mousedown\",i,{capture:!0}),e.addEventListener(\"touchstart\",i,{capture:!0,passive:!1})),null!==t&&(t.removeEventListener(\"click\",r),t.removeEventListener(\"pointerdown\",i,{capture:!0}),t.removeEventListener(\"mousedown\",i,{capture:!0}),t.removeEventListener(\"touchstart\",i,{capture:!0}))}))}function Ce(e,t){const n=e.target;if(!s(n))return;const r=n.firstChild;if(s(r)&&(\"UL\"===r.tagName||\"OL\"===r.tagName))return;const i=n.parentNode;if(!i||\"check\"!==i.__lexicalListType)return;let o=null,l=null;if(\"clientX\"in e)o=e.clientX;else if(\"touches\"in e){const t=e.touches;t.length>0&&(o=t[0].clientX,l=\"touch\")}if(null==o)return;const a=n.getBoundingClientRect(),u=o/c(n),g=window.getComputedStyle?window.getComputedStyle(n,\"::before\"):{width:\"0px\"},h=parseFloat(g.width),d=\"touch\"===l||\"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 Te(){const e=document.activeElement;return s(e)&&\"LI\"===e.tagName&&null!=e.parentNode&&\"check\"===e.parentNode.__lexicalListType?e:null}function ve(e,t,n){const r=Te();return null!=r&&t.update(()=>{const i=A(r);if(!ae(i))return;const s=function(e,t){let n=t?e.getPreviousSibling():e.getNextSibling(),r=e;for(;null==n&&ae(r);)r=r.getParentOrThrow().getParent(),null!=r&&(n=t?r.getPreviousSibling():r.getNextSibling());for(;ae(n);){const e=t?n.getLastChild():n.getFirstChild();if(!me(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 Se=b(\"UPDATE_LIST_START_COMMAND\"),xe=b(\"INSERT_UNORDERED_LIST_COMMAND\"),ke=b(\"INSERT_ORDERED_LIST_COMMAND\"),be=b(\"REMOVE_LIST_COMMAND\");function Le(e,t){return o(e.registerCommand(ke,()=>(G(\"number\"),!0),L),e.registerCommand(Se,e=>{const{listNodeKey:t,newStart:n}=e,r=B(t);return!!me(r)&&(\"number\"===r.getListType()&&(r.setStart(n),te(r)),!0)},L),e.registerCommand(xe,()=>(G(\"bullet\"),!0),L),e.registerCommand(be,()=>(ee(),!0),L),e.registerCommand(W,()=>ie(!!(t&&t.restoreNumbering)),L),e.registerNodeTransform(se,e=>{const t=e.getFirstChild();if(t){if(y(t)){const n=t.getStyle(),r=t.getFormat();e.getTextStyle()!==n&&e.setTextStyle(n),e.getTextFormat()!==r&&e.setTextFormat(r)}}else{const t=a();u(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(J,e=>{const t=e.getParent();if(ae(t)&&e.is(t.getFirstChild())){const n=e.getStyle(),r=e.getFormat();n===t.getTextStyle()&&r===t.getTextFormat()||t.setTextStyle(n).setTextFormat(r)}}))}function Ne(e){const t=e=>{const t=e.getParent();if(me(e.getFirstChild())||!me(t))return;const n=l(e,e=>ae(e)&&me(e.getParent())&&ae(e.getPreviousSibling()));if(null===n&&e.getIndent()>0)e.setIndent(0);else if(ae(n)){const r=n.getPreviousSibling();if(ae(r)){const n=function(e){let t=e,n=t.getFirstChild();for(;me(n);){const e=n.getLastChild();if(!ae(e))break;t=e,n=t.getFirstChild()}return t}(r),i=n.getParent();if(me(i)){const n=V(i);n+1<V(t)&&e.setIndent(n)}}}};return e.registerNodeTransform(ue,e=>{const n=[e];for(;n.length>0;){const e=n.shift();if(me(e))for(const r of e.getChildren())if(ae(r)){t(r);const e=r.getFirstChild();me(e)&&n.push(e)}}})}function Pe(e,t){e.update(()=>G(t))}function Fe(e){e.update(()=>ee())}const Oe=R({build:(e,n,r)=>t(n),config:K({hasStrictIndent:!1,shouldPreserveNumbering:!1}),name:\"@lexical/list/List\",nodes:()=>[ue,se],register(t,n,r){const i=r.getOutput();return o(e(()=>Le(t,{restoreNumbering:i.shouldPreserveNumbering.value})),e(()=>i.hasStrictIndent.value?Ne(t):void 0))}}),Ae=R({config:K({disableTakeFocusOnClick:!1}),dependencies:[Oe],name:\"@lexical/list/CheckList\",register:ye});export{ce as $createListItemNode,pe as $createListNode,V as $getListDepth,ie as $handleListInsertParagraph,G as $insertList,ae as $isListItemNode,me as $isListNode,ee as $removeList,Ae as CheckListExtension,_e as INSERT_CHECK_LIST_COMMAND,ke as INSERT_ORDERED_LIST_COMMAND,xe as INSERT_UNORDERED_LIST_COMMAND,Oe as ListExtension,se as ListItemNode,ue as ListNode,be as REMOVE_LIST_COMMAND,Se as UPDATE_LIST_START_COMMAND,Pe as insertList,ye as registerCheckList,Le as registerList,Ne as registerListStrictIndentTransform,Fe as removeList};\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport{$sliceSelectedTextNodeContent as e}from\"@lexical/selection\";import{isHTMLElement as n,isBlockDomNode as t}from\"@lexical/utils\";import{isDOMDocumentNode as o,$getRoot as l,$isElementNode as r,$isTextNode as i,getRegisteredNode as s,isDocumentFragment as c,$isRootOrShadowRoot as u,$isBlockElementNode as f,$createLineBreakNode as a,ArtificialNode__DO_NOT_USE as d,isInlineDomNode as p,$createParagraphNode as h}from\"lexical\";function m(e,n){const t=o(n)?n.body.childNodes:n.childNodes;let l=[];const r=[];for(const n of t)if(!w.has(n.nodeName)){const t=y(n,e,r,!1);null!==t&&(l=l.concat(t))}return function(e){for(const n of e)n.getNextSibling()instanceof d&&n.insertAfter(a());for(const n of e){const e=n.getChildren();for(const t of e)n.insertBefore(t);n.remove()}}(r),l}function g(e,n){if(\"undefined\"==typeof document||\"undefined\"==typeof window&&void 0===global.window)throw new Error(\"To use $generateHtmlFromNodes in headless mode please initialize a headless browser implementation such as JSDom before calling this function.\");const t=document.createElement(\"div\"),o=l().getChildren();for(let l=0;l<o.length;l++){x(e,o[l],t,n)}return t.innerHTML}function x(t,o,l,u=null){let f=null===u||o.isSelected(u);const a=r(o)&&o.excludeFromCopy(\"html\");let d=o;null!==u&&i(o)&&(d=e(u,o,\"clone\"));const p=r(d)?d.getChildren():[],h=s(t,d.getType());let m;m=h&&void 0!==h.exportDOM?h.exportDOM(t,d):d.exportDOM(t);const{element:g,after:w}=m;if(!g)return!1;const y=document.createDocumentFragment();for(let e=0;e<p.length;e++){const n=p[e],l=x(t,n,y,u);!f&&r(o)&&l&&o.extractWithChild(n,u,\"html\")&&(f=!0)}if(f&&!a){if((n(g)||c(g))&&g.append(y),l.append(g),w){const e=w.call(d,g);e&&(c(g)?g.replaceChildren(e):g.replaceWith(e))}}else l.append(y);return f}const w=new Set([\"STYLE\",\"SCRIPT\"]);function y(e,n,o,l,i=new Map,s){let c=[];if(w.has(e.nodeName))return c;let m=null;const g=function(e,n){const{nodeName:t}=e,o=n._htmlConversions.get(t.toLowerCase());let l=null;if(void 0!==o)for(const n of o){const t=n(e);null!==t&&(null===l||(l.priority||0)<=(t.priority||0))&&(l=t)}return null!==l?l.conversion:null}(e,n),x=g?g(e):null;let b=null;if(null!==x){b=x.after;const n=x.node;if(m=Array.isArray(n)?n[n.length-1]:n,null!==m){for(const[,e]of i)if(m=e(m,s),!m)break;m&&c.push(...Array.isArray(n)?n:[m])}null!=x.forChild&&i.set(e.nodeName,x.forChild)}const S=e.childNodes;let v=[];const N=(null==m||!u(m))&&(null!=m&&f(m)||l);for(let e=0;e<S.length;e++)v.push(...y(S[e],n,o,N,new Map(i),m));return null!=b&&(v=b(v)),t(e)&&(v=C(e,v,N?()=>{const e=new d;return o.push(e),e}:h)),null==m?v.length>0?c=c.concat(v):t(e)&&function(e){if(null==e.nextSibling||null==e.previousSibling)return!1;return p(e.nextSibling)&&p(e.previousSibling)}(e)&&(c=c.concat(a())):r(m)&&m.append(...v),c}function C(e,n,t){const o=e.style.textAlign,l=[];let r=[];for(let e=0;e<n.length;e++){const i=n[e];if(f(i))o&&!i.getFormat()&&i.setFormat(o),l.push(i);else if(r.push(i),e===n.length-1||e<n.length-1&&f(n[e+1])){const e=t();e.setFormat(o),e.append(...r),l.push(e),r=[]}}return l}export{g as $generateHtmlFromNodes,m as $generateNodesFromDOM};\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport{$generateHtmlFromNodes as t,$generateNodesFromDOM as e}from\"@lexical/html\";import{$addNodeStyle as n,$sliceSelectedTextNodeContent as o}from\"@lexical/selection\";import{objectKlassEquals as r}from\"@lexical/utils\";import{$getSelection as i,$isRangeSelection as l,$createTabNode as s,SELECTION_INSERT_CLIPBOARD_NODES_COMMAND as c,$caretFromPoint as a,$isTextPointCaret as u,$getCaretRange as f,$getChildCaret as d,$getRoot as p,$isTextNode as g,$isElementNode as m,$parseSerializedNode as h,getDOMSelection as x,COPY_COMMAND as y,COMMAND_PRIORITY_CRITICAL as w,isSelectionWithinEditor as T,$getEditor as C}from\"lexical\";function v(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 D(e,n=i()){return null==n&&v(166),l(n)&&n.isCollapsed()||0===n.getNodes().length?\"\":t(e,n)}function S(t,e=i()){return null==e&&v(166),l(e)&&e.isCollapsed()||0===e.getNodes().length?null:JSON.stringify(E(t,e))}function N(t,e){const n=t.getData(\"text/plain\")||t.getData(\"text/uri-list\");null!=n&&e.insertRawText(n)}function R(t,n,o){const r=t.getData(\"application/x-lexical-editor\");if(r)try{const t=JSON.parse(r);if(t.namespace===o._config.namespace&&Array.isArray(t.nodes)){return A(o,L(t.nodes),n)}}catch(t){console.error(t)}const c=t.getData(\"text/html\"),a=t.getData(\"text/plain\");if(c&&a!==c)try{const t=(new DOMParser).parseFromString(function(t){if(window.trustedTypes&&window.trustedTypes.createPolicy){return window.trustedTypes.createPolicy(\"lexical\",{createHTML:t=>t}).createHTML(t)}return t}(c),\"text/html\");return A(o,e(o,t),n)}catch(t){console.error(t)}const u=a||t.getData(\"text/uri-list\");if(null!=u)if(l(n)){const t=u.split(/(\\r?\\n|\\t)/);\"\"===t[t.length-1]&&t.pop();for(let e=0;e<t.length;e++){const n=i();if(l(n)){const o=t[e];\"\\n\"===o||\"\\r\\n\"===o?n.insertParagraph():\"\\t\"===o?n.insertNodes([s()]):n.insertText(o)}}}else n.insertRawText(u)}function A(t,e,n){t.dispatchCommand(c,{nodes:e,selection:n})||(n.insertNodes(e),function(t){if(l(t)&&t.isCollapsed()){const e=t.anchor;let n=null;const o=a(e,\"previous\");if(o)if(u(o))n=o.origin;else{const t=f(o,d(p(),\"next\").getFlipped());for(const e of t){if(g(e.origin)){n=e.origin;break}if(m(e.origin)&&!e.origin.isInline())break}}if(n&&g(n)){const e=n.getFormat(),o=n.getStyle();t.format===e&&t.style===o||(t.format=e,t.style=o,t.dirty=!0)}}}(n))}function P(t,e,n,r=[]){let i=null===e||n.isSelected(e);const l=m(n)&&n.excludeFromCopy(\"html\");let s=n;null!==e&&g(s)&&(s=o(e,s,\"clone\"));const c=m(s)?s.getChildren():[],a=function(t){const e=t.exportJSON(),n=t.constructor;if(e.type!==n.getType()&&v(58,n.name),m(t)){const t=e.children;Array.isArray(t)||v(59,n.name)}return e}(s);g(s)&&0===s.getTextContentSize()&&(i=!1);for(let o=0;o<c.length;o++){const r=c[o],l=P(t,e,r,a.children);!i&&m(n)&&l&&n.extractWithChild(r,e,\"clone\")&&(i=!0)}if(i&&!l)r.push(a);else if(Array.isArray(a.children))for(let t=0;t<a.children.length;t++){const e=a.children[t];r.push(e)}return i}function E(t,e){const n=[],o=p().getChildren();for(let r=0;r<o.length;r++){P(t,e,o[r],n)}return{namespace:t._config.namespace,nodes:n}}function L(t){const e=[];for(let o=0;o<t.length;o++){const r=t[o],i=h(r);g(i)&&n(i),e.push(i)}return e}let b=null;async function F(t,e,n){if(null!==b)return!1;if(null!==e)return new Promise((o,r)=>{t.update(()=>{o(M(t,e,n))})});const o=t.getRootElement(),i=t._window||window,l=i.document,s=x(i);if(null===o||null===s)return!1;const c=l.createElement(\"span\");c.style.cssText=\"position: fixed; top: -1000px;\",c.append(l.createTextNode(\"#\")),o.append(c);const a=new Range;return a.setStart(c,0),a.setEnd(c,1),s.removeAllRanges(),s.addRange(a),new Promise((e,o)=>{const s=t.registerCommand(y,o=>(r(o,ClipboardEvent)&&(s(),null!==b&&(i.clearTimeout(b),b=null),e(M(t,o,n))),!0),w);b=i.setTimeout(()=>{s(),b=null,e(!1)},50),l.execCommand(\"copy\"),c.remove()})}function M(t,e,n){if(void 0===n){const e=x(t._window),o=i();if(!o||o.isCollapsed())return!1;if(!e)return!1;const r=e.anchorNode,l=e.focusNode;if(null!==r&&null!==l&&!T(t,r,l))return!1;n=_(o)}e.preventDefault();const o=e.clipboardData;return null!==o&&(J(o,n),!0)}const O=[[\"text/html\",D],[\"application/x-lexical-editor\",S]];function _(t=i()){const e={\"text/plain\":t?t.getTextContent():\"\"};if(t){const n=C();for(const[o,r]of O){const i=r(n,t);null!==i&&(e[o]=i)}}return e}function J(t,e){for(const[n]of O)void 0===e[n]&&t.setData(n,\"\");for(const n in e){const o=e[n];void 0!==o&&t.setData(n,o)}}export{E as $generateJSONFromSelectedNodes,L as $generateNodesFromSerializedNodes,_ as $getClipboardDataFromSelection,D as $getHtmlContent,S as $getLexicalContent,N as $insertDataTransferForPlainText,R as $insertDataTransferForRichText,A as $insertGeneratedNodes,F as copyToClipboard,J as setLexicalClipboardDataTransfer};\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport{$insertDataTransferForRichText as t,copyToClipboard as e}from\"@lexical/clipboard\";import{DragonExtension as n}from\"@lexical/dragon\";import{$isParentRTL as r,$shouldOverrideDefaultCharacterSelection as o,$moveCharacter as i}from\"@lexical/selection\";import{mergeRegister as s,$findMatchingParent as a,$handleIndentAndOutdent as c,objectKlassEquals as u,addClassNamesToElement as l,isHTMLElement as d,$getNearestBlockElementAncestorOrThrow as m}from\"@lexical/utils\";import{createCommand as f,defineExtension as g,CLICK_COMMAND as p,$getSelection as h,$isNodeSelection as v,COMMAND_PRIORITY_EDITOR as C,DELETE_CHARACTER_COMMAND as y,$isRangeSelection as x,DELETE_WORD_COMMAND as D,DELETE_LINE_COMMAND as N,CONTROLLED_TEXT_INSERTION_COMMAND as w,REMOVE_TEXT_COMMAND as E,FORMAT_TEXT_COMMAND as _,FORMAT_ELEMENT_COMMAND as O,$isElementNode as P,INSERT_LINE_BREAK_COMMAND as T,INSERT_PARAGRAPH_COMMAND as F,INSERT_TAB_COMMAND as A,$createTabNode as S,$insertNodes as M,INDENT_CONTENT_COMMAND as I,OUTDENT_CONTENT_COMMAND as b,KEY_ARROW_UP_COMMAND as K,$getAdjacentNode as k,$isDecoratorNode as J,KEY_ARROW_DOWN_COMMAND as W,KEY_ARROW_LEFT_COMMAND as L,KEY_ARROW_RIGHT_COMMAND as R,KEY_BACKSPACE_COMMAND as q,KEY_DELETE_COMMAND as z,KEY_ENTER_COMMAND as X,KEY_ESCAPE_COMMAND as Y,DROP_COMMAND as B,$getNearestNodeFromDOMNode as G,$createRangeSelection as V,$isTextNode as j,$normalizeSelection__EXPERIMENTAL as H,$setSelection as Q,DRAGSTART_COMMAND as U,DRAGOVER_COMMAND as Z,SELECT_ALL_COMMAND as $,$selectAll as tt,COPY_COMMAND as et,CUT_COMMAND as nt,PASTE_COMMAND as rt,isDOMNode as ot,isSelectionCapturedInDecoratorInput as it,KEY_SPACE_COMMAND as st,KEY_TAB_COMMAND as at,ElementNode as ct,$createParagraphNode as ut,$getRoot as lt,$isRootNode as dt,PASTE_TAG as mt,setNodeIndentFromDOM as ft,$applyNodeReplacement as gt}from\"lexical\";function pt(t,e){if(void 0!==document.caretRangeFromPoint){const n=document.caretRangeFromPoint(t,e);return null===n?null:{node:n.startContainer,offset:n.startOffset}}if(\"undefined\"!==document.caretPositionFromPoint){const n=document.caretPositionFromPoint(t,e);return null===n?null:{node:n.offsetNode,offset:n.offset}}return null}const ht=\"undefined\"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement,vt=ht&&\"documentMode\"in document?document.documentMode:null,Ct=ht&&/Mac|iPod|iPhone|iPad/.test(navigator.platform),yt=!(!ht||!(\"InputEvent\"in window)||vt)&&\"getTargetRanges\"in new window.InputEvent(\"input\"),xt=ht&&/Version\\/[\\d.]+.*Safari/.test(navigator.userAgent),Dt=ht&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,Nt=ht&&/^(?=.*Chrome).*/i.test(navigator.userAgent),wt=ht&&/AppleWebKit\\/[\\d.]+/.test(navigator.userAgent)&&Ct&&!Nt,Et=f(\"DRAG_DROP_PASTE_FILE\");class _t extends ct{static getType(){return\"quote\"}static clone(t){return new _t(t.__key)}createDOM(t){const e=document.createElement(\"blockquote\");return l(e,t.theme.quote),e}updateDOM(t,e){return!1}static importDOM(){return{blockquote:t=>({conversion:St,priority:0})}}exportDOM(t){const{element:e}=super.exportDOM(t);if(d(e)){this.isEmpty()&&e.append(document.createElement(\"br\"));const t=this.getFormatType();t&&(e.style.textAlign=t);const n=this.getDirection();n&&(e.dir=n)}return{element:e}}static importJSON(t){return Ot().updateFromJSON(t)}insertNewAfter(t,e){const n=ut(),r=this.getDirection();return n.setDirection(r),this.insertAfter(n,e),n}collapseAtStart(){const t=ut();return this.getChildren().forEach(e=>t.append(e)),this.replace(t),!0}canMergeWhenEmpty(){return!0}}function Ot(){return gt(new _t)}function Pt(t){return t instanceof _t}class Tt extends ct{__tag;static getType(){return\"heading\"}static clone(t){return new Tt(t.__tag,t.__key)}constructor(t,e){super(e),this.__tag=t}getTag(){return this.__tag}setTag(t){const e=this.getWritable();return this.__tag=t,e}createDOM(t){const e=this.__tag,n=document.createElement(e),r=t.theme.heading;if(void 0!==r){const t=r[e];l(n,t)}return n}updateDOM(t,e,n){return t.__tag!==this.__tag}static importDOM(){return{h1:t=>({conversion:At,priority:0}),h2:t=>({conversion:At,priority:0}),h3:t=>({conversion:At,priority:0}),h4:t=>({conversion:At,priority:0}),h5:t=>({conversion:At,priority:0}),h6:t=>({conversion:At,priority:0}),p:t=>{const e=t.firstChild;return null!==e&&Ft(e)?{conversion:()=>({node:null}),priority:3}:null},span:t=>Ft(t)?{conversion:t=>({node:Mt(\"h1\")}),priority:3}:null}}exportDOM(t){const{element:e}=super.exportDOM(t);if(d(e)){this.isEmpty()&&e.append(document.createElement(\"br\"));const t=this.getFormatType();t&&(e.style.textAlign=t);const n=this.getDirection();n&&(e.dir=n)}return{element:e}}static importJSON(t){return Mt(t.tag).updateFromJSON(t)}updateFromJSON(t){return super.updateFromJSON(t).setTag(t.tag)}exportJSON(){return{...super.exportJSON(),tag:this.getTag()}}insertNewAfter(t,e=!0){const n=t?t.anchor.offset:0,r=this.getLastDescendant(),o=!r||t&&t.anchor.key===r.getKey()&&n===r.getTextContentSize()||!t?ut():Mt(this.getTag()),i=this.getDirection();if(o.setDirection(i),this.insertAfter(o,e),0===n&&!this.isEmpty()&&t){const t=ut();t.select(),this.replace(t,!0)}return o}collapseAtStart(){const t=this.isEmpty()?ut():Mt(this.getTag());return this.getChildren().forEach(e=>t.append(e)),this.replace(t),!0}extractWithChild(){return!0}}function Ft(t){return\"span\"===t.nodeName.toLowerCase()&&\"26pt\"===t.style.fontSize}function At(t){const e=t.nodeName.toLowerCase();let n=null;return\"h1\"!==e&&\"h2\"!==e&&\"h3\"!==e&&\"h4\"!==e&&\"h5\"!==e&&\"h6\"!==e||(n=Mt(e),null!==t.style&&(ft(t,n),n.setFormat(t.style.textAlign))),{node:n}}function St(t){const e=Ot();return null!==t.style&&(e.setFormat(t.style.textAlign),ft(t,e)),{node:e}}function Mt(t=\"h1\"){return gt(new Tt(t))}function It(t){return t instanceof Tt}function bt(t){let e=null;if(u(t,DragEvent)?e=t.dataTransfer:u(t,ClipboardEvent)&&(e=t.clipboardData),null===e)return[!1,[],!1];const n=e.types,r=n.includes(\"Files\"),o=n.includes(\"text/html\")||n.includes(\"text/plain\");return[r,Array.from(e.files),o]}function Kt(t){const e=G(t);return J(e)}function kt(t){for(const e of[\"lowercase\",\"uppercase\",\"capitalize\"])t.hasFormat(e)&&t.toggleFormat(e)}function Jt(n){return s(n.registerCommand(p,t=>{const e=h();return!!v(e)&&(e.clear(),!0)},C),n.registerCommand(y,t=>{const e=h();return x(e)?(e.deleteCharacter(t),!0):!!v(e)&&(e.deleteNodes(),!0)},C),n.registerCommand(D,t=>{const e=h();return!!x(e)&&(e.deleteWord(t),!0)},C),n.registerCommand(N,t=>{const e=h();return!!x(e)&&(e.deleteLine(t),!0)},C),n.registerCommand(w,e=>{const r=h();if(\"string\"==typeof e)null!==r&&r.insertText(e);else{if(null===r)return!1;const o=e.dataTransfer;if(null!=o)t(o,r,n);else if(x(r)){const t=e.data;return t&&r.insertText(t),!0}}return!0},C),n.registerCommand(E,()=>{const t=h();return!!x(t)&&(t.removeText(),!0)},C),n.registerCommand(_,t=>{const e=h();return!!x(e)&&(e.formatText(t),!0)},C),n.registerCommand(O,t=>{const e=h();if(!x(e)&&!v(e))return!1;const n=e.getNodes();for(const e of n){const n=a(e,t=>P(t)&&!t.isInline());null!==n&&n.setFormat(t)}return!0},C),n.registerCommand(T,t=>{const e=h();return!!x(e)&&(e.insertLineBreak(t),!0)},C),n.registerCommand(F,()=>{const t=h();return!!x(t)&&(t.insertParagraph(),!0)},C),n.registerCommand(A,()=>{const t=S(),e=h();return x(e)&&(t.setFormat(e.format),t.setStyle(e.style)),M([t]),!0},C),n.registerCommand(I,()=>c(t=>{const e=t.getIndent();t.setIndent(e+1)}),C),n.registerCommand(b,()=>c(t=>{const e=t.getIndent();e>0&&t.setIndent(Math.max(0,e-1))}),C),n.registerCommand(K,t=>{const e=h();if(v(e)){const n=e.getNodes();if(n.length>0)return t.preventDefault(),n[0].selectPrevious(),!0}else if(x(e)){const n=k(e.focus,!0);if(!t.shiftKey&&J(n)&&!n.isIsolated()&&!n.isInline())return n.selectPrevious(),t.preventDefault(),!0}return!1},C),n.registerCommand(W,t=>{const e=h();if(v(e)){const n=e.getNodes();if(n.length>0)return t.preventDefault(),n[0].selectNext(0,0),!0}else if(x(e)){if(function(t){const e=t.focus;return\"root\"===e.key&&e.offset===lt().getChildrenSize()}(e))return t.preventDefault(),!0;const n=k(e.focus,!1);if(!t.shiftKey&&J(n)&&!n.isIsolated()&&!n.isInline())return n.selectNext(),t.preventDefault(),!0}return!1},C),n.registerCommand(L,t=>{const e=h();if(v(e)){const n=e.getNodes();if(n.length>0)return t.preventDefault(),r(n[0])?n[0].selectNext(0,0):n[0].selectPrevious(),!0}if(!x(e))return!1;if(o(e,!0)){const n=t.shiftKey;return t.preventDefault(),i(e,n,!0),!0}return!1},C),n.registerCommand(R,t=>{const e=h();if(v(e)){const n=e.getNodes();if(n.length>0)return t.preventDefault(),r(n[0])?n[0].selectPrevious():n[0].selectNext(0,0),!0}if(!x(e))return!1;const n=t.shiftKey;return!!o(e,!1)&&(t.preventDefault(),i(e,n,!1),!0)},C),n.registerCommand(q,t=>{if(Kt(t.target))return!1;const e=h();if(x(e)){if(function(t){if(!t.isCollapsed())return!1;const{anchor:e}=t;if(0!==e.offset)return!1;const n=e.getNode();if(dt(n))return!1;const r=m(n);return r.getIndent()>0&&(r.is(n)||n.is(r.getFirstDescendant()))}(e))return t.preventDefault(),n.dispatchCommand(b,void 0);if(Dt&&\"ko-KR\"===navigator.language)return!1}else if(!v(e))return!1;return t.preventDefault(),n.dispatchCommand(y,!0)},C),n.registerCommand(z,t=>{if(Kt(t.target))return!1;const e=h();return!(!x(e)&&!v(e))&&(t.preventDefault(),n.dispatchCommand(y,!1))},C),n.registerCommand(X,t=>{const e=h();if(!x(e))return!1;if(kt(e),null!==t){if((Dt||xt||wt)&&yt)return!1;if(t.preventDefault(),t.shiftKey)return n.dispatchCommand(T,!1)}return n.dispatchCommand(F,void 0)},C),n.registerCommand(Y,()=>{const t=h();return!!x(t)&&(n.blur(),!0)},C),n.registerCommand(B,t=>{const[,e]=bt(t);if(e.length>0){const r=pt(t.clientX,t.clientY);if(null!==r){const{offset:t,node:o}=r,i=G(o);if(null!==i){const e=V();if(j(i))e.anchor.set(i.getKey(),t,\"text\"),e.focus.set(i.getKey(),t,\"text\");else{const t=i.getParentOrThrow().getKey(),n=i.getIndexWithinParent()+1;e.anchor.set(t,n,\"element\"),e.focus.set(t,n,\"element\")}const n=H(e);Q(n)}n.dispatchCommand(Et,e)}return t.preventDefault(),!0}const r=h();return!!x(r)},C),n.registerCommand(U,t=>{const[e]=bt(t),n=h();return!(e&&!x(n))},C),n.registerCommand(Z,t=>{const[e]=bt(t),n=h();if(e&&!x(n))return!1;const r=pt(t.clientX,t.clientY);if(null!==r){const e=G(r.node);J(e)&&t.preventDefault()}return!0},C),n.registerCommand($,()=>(tt(),!0),C),n.registerCommand(et,t=>(e(n,u(t,ClipboardEvent)?t:null),!0),C),n.registerCommand(nt,t=>(async function(t,n){await e(n,u(t,ClipboardEvent)?t:null),n.update(()=>{const t=h();x(t)?t.removeText():v(t)&&t.getNodes().forEach(t=>t.remove())})}(t,n),!0),C),n.registerCommand(rt,e=>{const[,r,o]=bt(e);if(r.length>0&&!o)return n.dispatchCommand(Et,r),!0;if(ot(e.target)&&it(e.target))return!1;return null!==h()&&(function(e,n){e.preventDefault(),n.update(()=>{const r=h(),o=u(e,InputEvent)||u(e,KeyboardEvent)?null:e.clipboardData;null!=o&&null!==r&&t(o,r,n)},{tag:mt})}(e,n),!0)},C),n.registerCommand(st,t=>{const e=h();return x(e)&&kt(e),!1},C),n.registerCommand(at,t=>{const e=h();return x(e)&&kt(e),!1},C))}const Wt=g({conflictsWith:[\"@lexical/plain-text\"],dependencies:[n],name:\"@lexical/rich-text\",nodes:()=>[Tt,_t],register:Jt});export{Mt as $createHeadingNode,Ot as $createQuoteNode,It as $isHeadingNode,Pt as $isQuoteNode,Et as DRAG_DROP_PASTE,Tt as HeadingNode,_t as QuoteNode,Wt as RichTextExtension,bt as eventFiles,Jt as registerRichText};\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport{$isParagraphNode as t,$isTextNode as e,$getRoot as n,$isElementNode as o,$isDecoratorNode as r,$isLineBreakNode as s,$getSelection as i,$createTextNode as l,$createParagraphNode as c,$createLineBreakNode as a,createState as f,$setState as g,$getState as u,$findMatchingParent as d,mergeRegister as p,COLLABORATION_TAG as h,HISTORIC_TAG as x,$isRangeSelection as m,KEY_ENTER_COMMAND as C,COMMAND_PRIORITY_LOW as T,$isRootOrShadowRoot as E,$createRangeSelection as y,$setSelection as $}from\"lexical\";import{$isListNode as v,$isListItemNode as I,ListNode as S,ListItemNode as b,$createListItemNode as w,$createListNode as F}from\"@lexical/list\";import{$isQuoteNode as L,HeadingNode as N,QuoteNode as k,$createHeadingNode as R,$isHeadingNode as M,$createQuoteNode as _}from\"@lexical/rich-text\";import{$findMatchingParent as B}from\"@lexical/utils\";import{CodeNode as j,$createCodeNode as P,$isCodeNode as A}from\"@lexical/code\";import{LinkNode as O,$isLinkNode as z,$createLinkNode as U,$isAutoLinkNode as W}from\"@lexical/link\";function D(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 K(t){const e=D(t,t=>t.type);return{element:e.element||[],multilineElement:e[\"multiline-element\"]||[],textFormat:e[\"text-format\"]||[],textMatch:e[\"text-match\"]||[]}}const q=/[!-/:-@[-`{-~\\s]/,G=/[ \\t\\n\\r\\f]/,H=/[!\"#$%&'()*+,\\-./:;<=>?@[\\]^_`{|}~]/,J=/^\\s{0,3}$/;function Q(n){if(!t(n))return!1;const o=n.getFirstChild();return null==o||1===n.getChildrenSize()&&e(o)&&J.test(o.getTextContent())}function V(t,e,n,s){for(const o of e){if(!o.export)continue;const e=o.export(t,t=>X(t,n,s));if(null!=e)return e}return o(t)?X(t,n,s):r(t)?t.getTextContent():null}function X(t,n,i,l,c){const a=[],f=t.getChildren();l||(l=[]),c||(c=[]);t:for(const t of f){for(const e of i){if(!e.export)continue;const o=e.export(t,t=>X(t,n,i,l,[...c,...l]),(t,e)=>Y(t,e,n,l,c));if(null!=o){a.push(o);continue t}}s(t)?a.push(\"\\n\"):e(t)?a.push(Y(t,t.getTextContent(),n,l,c)):o(t)?a.push(X(t,n,i,l,c)):r(t)&&a.push(t.getTextContent())}return a.join(\"\")}function Y(t,e,n,o,r){let s=0===t.getFormat()?e:function(t){return t.replace(/^\\s+|\\s+$/g,t=>[...t].map(t=>\"&#\"+t.codePointAt(0)+\";\").join(\"\"))}(e);t.hasFormat(\"code\")||(s=s.replace(/([*_`~\\\\])/g,\"\\\\$1\"));let i=\"\",l=\"\",c=\"\";const a=Z(t,!0),f=Z(t,!1),g=new Set;for(const e of n){const n=e.format[0],r=e.tag;tt(t,n)&&!g.has(n)&&(g.add(n),tt(a,n)&&o.find(t=>t.tag===r)||(o.push({format:n,tag:r}),i+=r))}for(let e=0;e<o.length;e++){const n=tt(t,o[e].format),s=tt(f,o[e].format);if(n&&s)continue;const i=[...o];for(;i.length>e;){const t=i.pop();r&&t&&r.find(e=>e.tag===t.tag)||(t&&\"string\"==typeof t.tag&&(n?s||(c+=t.tag):l+=t.tag),o.pop())}break}return s=i+s+c,l+s}function Z(t,n){const o=n?t.getPreviousSibling():t.getNextSibling();return e(o)?o:null}function tt(t,n){return e(t)&&t.hasFormat(n)}function et(t,e){const n=t.getTextContent(),o=e.fullMatchRegExpByTag[\"`\"],r=e.transformersByTag[\"`\"],s=[];let i=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,n=e+t[0].length;i||(i={content:t[2],endIndex:n,startIndex:e,tag:\"`\"}),s.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])),s=e=>{let n=0;for(let o=e-1;o>=0&&\"\\\\\"===t[o];o--)n++;return n%2==1},i=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)||s(l)||i(l)){l++;continue}let n=1;for(;l+n<t.length&&t[l+n]===e;)n++;const c=nt(e,t,l,n,!0),a=nt(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,s),c=l.length>0?function(t,e,n){const o={};let r=0,s=null;for(;r<e.length;){const i=e[r];if(!i.active||!i.canClose||0===i.length){r++;continue}const l=`${i.char}${i.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!==i.char)continue;if(l.canClose||i.canOpen){if((l.originalLength+i.originalLength)%3==0&&l.originalLength%3!=0&&i.originalLength%3!=0)continue}const c=Math.min(l.length,i.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 g=f.length,u={content:t.slice(l.index+l.length,i.index),endIndex:i.index+g,startIndex:l.index+(l.length-g),tag:f};(!s||u.startIndex<s.startIndex||u.startIndex===s.startIndex&&u.endIndex>s.endIndex)&&(s=u);for(let t=o+1;t<r;t++)e[t].active=!1;l.length-=g,i.length-=g,l.active=l.length>0,i.length>0?i.index+=g:(i.active=!1,r++);break}a||(o[l]=r-1,i.canOpen||(i.active=!1),r++)}return s}(n,l,e):null;let a=null,f=null;if(i&&c?c.startIndex<=i.startIndex&&c.endIndex>=i.endIndex?(a=c,f=e.transformersByTag[c.tag]):(a=i,f=r):i?(a=i,f=r):c&&(a=c,f=e.transformersByTag[c.tag]),!a||!f)return null;const g=[n.slice(a.startIndex,a.endIndex),a.tag,a.content];return g.index=a.startIndex,g.input=n,{endIndex:a.endIndex,match:g,startIndex:a.startIndex,transformer:f}}function nt(t,e,n,o,r){if(!ot(e,n,o,r))return!1;if(\"*\"===t)return!0;if(\"_\"===t){if(!ot(e,n,o,!r))return!0;const t=r?e[n-1]:e[n+o];return void 0!==t&&H.test(t)}return!0}function ot(t,e,n,o){const r=t[e-1],s=t[e+n],[i,l]=o?[s,r]:[r,s];return void 0!==i&&!G.test(i)&&(!H.test(i)||(void 0===l||G.test(l)||H.test(l)))}function rt(t){return e(t)&&!t.hasFormat(\"code\")}function st(t,e,n){let o=et(t,e),r=function(t,e){const n=t;let o,r,s,i;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,s=t,i=e)}return void 0===o||void 0===r||void 0===s||void 0===i?null:{endIndex:r,match:i,startIndex:o,transformer:s}}(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 s=t.getTextContent();let i,l,c;if(r[0]===s?i=t:0===e?[i,l]=t.splitText(n):[c,i,l]=t.splitText(e,n),i.setTextContent(r[2]),o)for(const t of o.format)i.hasFormat(t)||i.toggleFormat(t);return{nodeAfter:l,nodeBefore:c,transformedNode:i}}(t,o.startIndex,o.endIndex,o.transformer,o.match);rt(r.nodeAfter)&&st(r.nodeAfter,e,n),rt(r.nodeBefore)&&st(r.nodeBefore,e,n),rt(r.transformedNode)&&st(r.transformedNode,e,n)}else if(r){const o=function(t,e,n,o,r){let s,i,l;return 0===e?[s,i]=t.splitText(n):[l,s,i]=t.splitText(e,n),o.replace?{nodeAfter:i,nodeBefore:l,transformedNode:o.replace(s,r)||void 0}:null}(t,r.startIndex,r.endIndex,r.transformer,r.match);if(!o)return;rt(o.nodeAfter)&&st(o.nodeAfter,e,n),rt(o.nodeBefore)&&st(o.nodeBefore,e,n),rt(o.transformedNode)&&st(o.transformedNode,e,n)}const s=t.getTextContent().replace(/\\\\([*_`~\\\\])/g,\"$1\").replace(/&#(\\d+);/g,(t,e)=>String.fromCodePoint(e));t.setTextContent(s)}function it(t,e=!1){const o=K(t),r=function(t){const e={},n={},o=[],r=\"(?<![\\\\\\\\])\";for(const r of t){const{tag:t}=r;e[t]=r;const s=t.replace(/(\\*|\\^|\\+)/g,\"\\\\$1\");o.push(s),1===t.length?n[t]=\"`\"===t?new RegExp(\"(?<![\\\\\\\\`])(`)((?:\\\\\\\\`|[^`])+?)(`)(?!`)\"):new RegExp(`(?<![\\\\\\\\${s}])(${s})((\\\\\\\\${s})?.*?[^${s}\\\\s](\\\\\\\\${s})?)((?<!\\\\\\\\)|(?<=\\\\\\\\\\\\\\\\))(${s})(?![\\\\\\\\${s}])`):n[t]=new RegExp(`(?<!\\\\\\\\)(${s})((\\\\\\\\${s})?.*?[^\\\\s](\\\\\\\\${s})?)((?<!\\\\\\\\)|(?<=\\\\\\\\\\\\\\\\))(${s})(?!\\\\\\\\)`)}return{fullMatchRegExpByTag:n,openTagsRegExp:new RegExp(`${r}(${o.join(\"|\")})`,\"g\"),transformersByTag:e}}(o.textFormat);return(t,s)=>{const l=t.split(\"\\n\"),c=l.length,a=s||n();a.clear();for(let t=0;t<c;t++){const n=l[t],[s,i]=lt(l,t,o.multilineElement,a);s?t=i:ct(n,a,o.element,r,o.textMatch,e)}const f=a.getChildren();for(const t of f)!e&&Q(t)&&a.getChildrenSize()>1&&t.remove();null!==i()&&a.selectStart()}}function lt(t,e,n,o){for(const r of n){const{handleImportAfterStartMatch:n,regExpEnd:s,regExpStart:i,replace:l}=r,c=t[e].match(i);if(!c)continue;if(n){const s=n({lines:t,rootNode:o,startLineIndex:e,startMatch:c,transformer:r});if(null===s)continue;if(s)return s}const a=\"object\"==typeof s&&\"regExp\"in s?s.regExp:s,f=s&&\"object\"==typeof s&&\"optional\"in s?s.optional:!s;let g=e;const u=t.length;for(;g<u;){const n=a?t[g].match(a):null;if(!n&&(!f||f&&g<u-1)){g++;continue}if(n&&e===g&&n.index===c.index){g++;continue}const r=[];if(n&&e===g)r.push(t[e].slice(c[0].length,-n[0].length));else for(let o=e;o<=g;o++)if(o===e){const e=t[o].slice(c[0].length);r.push(e)}else if(o===g&&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,g];break}}return[!1,e]}function ct(e,n,o,r,s,i){const f=l(e),g=c();g.append(f),n.append(g);for(const{regExp:t,replace:n}of o){const o=e.match(t);if(o&&(f.setTextContent(e.slice(o[0].length)),!1!==n(g,[f],o,!0)))break}if(st(f,r,s),g.isAttached()&&e.length>0){const e=g.getPreviousSibling();if(!i&&(t(e)||L(e)||v(e))){let t=e;if(v(e)){const n=e.getLastDescendant();t=null==n?null:B(n,I)}null!=t&&t.getTextContentSize()>0&&(t.splice(t.getChildrenSize(),0,[a(),...g.getChildren()]),g.remove())}}}function at(t,...e){const n=new URL(\"https://lexical.dev/docs/error\"),o=new URLSearchParams;o.append(\"code\",t);for(const t of e)o.append(\"v\",t);throw n.search=o.toString(),Error(`Minified Lexical error #${t}; visit ${n.toString()} for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`)}const ft=/^(\\s*)(\\d{1,})\\.\\s/,gt=/^(\\s*)[-*+]\\s/,ut=/^(\\s*)(?:[-*+]\\s)?\\s?(\\[(\\s|x)?\\])\\s/i,dt=/^(#{1,6})\\s/,pt=/^>\\s/,ht=/^([ \\t]*`{3,})([\\w-]+)?[ \\t]?/,xt=/^[ \\t]*`{3,}$/,mt=/^[ \\t]*```[^`]+(?:(?:`{1,2}|`{4,})[^`]+)*```(?:[^`]|$)/,Ct=/^(?:\\|)(.+)(?:\\|)\\s?$/,Tt=/^(\\| ?:?-*:? ?)+\\|\\s?$/,Et=/^<[a-z_][\\w-]*(?:\\s[^<>]*)?\\/?>/i,yt=/^<\\/[a-z_][\\w-]*\\s*>/i,$t=t=>new RegExp(`(?:${t.source})$`,t.flags),vt=f(\"mdListMarker\",{parse:t=>\"string\"==typeof t&&/^[-*+]$/.test(t)?t:\"-\"}),It=f(\"mdCodeFence\",{parse:t=>\"string\"==typeof t&&/^`{3,}$/.test(t)?t:\"```\"}),St=t=>(e,n,o,r)=>{const s=t(o);s.append(...n),e.replace(s),r||s.select(0,0)};const bt=t=>(e,n,o,r)=>{const s=e.getPreviousSibling(),i=e.getNextSibling(),l=w(\"check\"===t?\"x\"===o[3]:void 0),c=o[0].trim()[0],a=\"bullet\"!==t&&\"check\"!==t||c!==vt.parse(c)?void 0:c;if(v(i)&&i.getListType()===t){a&&g(i,vt,a);const t=i.getFirstChild();null!==t?t.insertBefore(l):i.append(l),e.remove()}else if(v(s)&&s.getListType()===t)a&&g(s,vt,a),s.append(l),e.remove();else{const n=F(t,\"number\"===t?Number(o[2]):void 0);a&&g(n,vt,a),n.append(l),e.replace(n)}l.append(...n),r||l.select(0,0);const f=function(t){const e=t.match(/\\t/g),n=t.match(/ /g);let o=0;return e&&(o+=e.length),n&&(o+=Math.floor(n.length/4)),o}(o[1]);f&&l.setIndent(f)},wt=(t,e,n)=>{const o=[],r=t.getChildren();let s=0;for(const i of r)if(I(i)){if(1===i.getChildrenSize()){const t=i.getFirstChild();if(v(t)){o.push(wt(t,e,n+1));continue}}const r=\" \".repeat(4*n),l=t.getListType(),c=u(t,vt),a=\"number\"===l?`${t.getStart()+s}. `:\"check\"===l?`${c} [${i.getChecked()?\"x\":\" \"}] `:c+\" \";o.push(r+a+e(i)),s++}return o.join(\"\\n\")},Ft={dependencies:[N],export:(t,e)=>{if(!M(t))return null;const n=Number(t.getTag().slice(1));return\"#\".repeat(n)+\" \"+e(t)},regExp:dt,replace:St(t=>{const e=\"h\"+t[1].length;return R(e)}),type:\"element\"},Lt={dependencies:[k],export:(t,e)=>{if(!L(t))return null;const n=e(t).split(\"\\n\"),o=[];for(const t of n)o.push(\"> \"+t);return o.join(\"\\n\")},regExp:pt,replace:(t,e,n,o)=>{if(o){const n=t.getPreviousSibling();if(L(n))return n.splice(n.getChildrenSize(),0,[a(),...e]),void t.remove()}const r=_();r.append(...e),t.replace(r),o||r.select(0,0)},type:\"element\"},Nt={dependencies:[j],export:t=>{if(!A(t))return null;const e=t.getTextContent();let n=u(t,It);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],s=r.trim().length,i=t[n],l=o.index+r.length,c=i.slice(l),a=new RegExp(`\\`{${s},}$`);if(a.test(c)){const t=c.match(a),r=c.slice(0,c.lastIndexOf(t[0])),s=[...o];return s[2]=\"\",Nt.replace(e,null,s,t,[r],!0),[!0,n]}const f=new RegExp(`^[ \\\\t]*\\`{${s},}$`);for(let r=n+1;r<t.length;r++){const s=t[r];if(f.test(s)){const l=s.match(f),c=t.slice(n+1,r),a=i.slice(o[0].length);return a.length>0&&c.unshift(a),Nt.replace(e,null,o,l,c,!0),[!0,r]}}const g=t.slice(n+1),u=i.slice(o[0].length);return u.length>0&&g.unshift(u),Nt.replace(e,null,o,null,g,!0),[!0,t.length-1]},regExpEnd:{optional:!0,regExp:xt},regExpStart:ht,replace:(t,e,n,o,r,s)=>{let i,c;const a=n[1]?n[1].trim():\"```\",f=n[2]||void 0;if(!e&&r){if(1===r.length)o?(i=P(f),c=r[0]):(i=P(f),c=r[0].startsWith(\" \")?r[0].slice(1):r[0]);else{for(i=P(f),r.length>0&&(0===r[0].trim().length?r.shift():r[0].startsWith(\" \")&&(r[0]=r[0].slice(1)));r.length>0&&!r[r.length-1].length;)r.pop();c=r.join(\"\\n\")}g(i,It,a);const e=l(c);i.append(e),t.append(i)}else e&&St(t=>P(t?t[2]:void 0))(t,e,n,s)},type:\"multiline-element\"},kt={dependencies:[S,b],export:(t,e)=>v(t)?wt(t,e,0):null,regExp:gt,replace:bt(\"bullet\"),type:\"element\"},Rt={dependencies:[S,b],export:(t,e)=>v(t)?wt(t,e,0):null,regExp:ut,replace:bt(\"check\"),type:\"element\"},Mt={dependencies:[S,b],export:(t,e)=>v(t)?wt(t,e,0):null,regExp:ft,replace:bt(\"number\"),type:\"element\"},_t={format:[\"code\"],tag:\"`\",type:\"text-format\"},Bt={format:[\"highlight\"],tag:\"==\",type:\"text-format\"},jt={format:[\"bold\",\"italic\"],tag:\"***\",type:\"text-format\"},Pt={format:[\"bold\",\"italic\"],intraword:!1,tag:\"___\",type:\"text-format\"},At={format:[\"bold\"],tag:\"**\",type:\"text-format\"},Ot={format:[\"bold\"],intraword:!1,tag:\"__\",type:\"text-format\"},zt={format:[\"strikethrough\"],tag:\"~~\",type:\"text-format\"},Ut={format:[\"italic\"],tag:\"*\",type:\"text-format\"},Wt={format:[\"italic\"],intraword:!1,tag:\"_\",type:\"text-format\"},Dt={dependencies:[O],export:(t,e,n)=>{if(!z(t)||W(t))return null;const o=t.getTitle(),r=e(t);return o?`[${r}](${t.getURL()} \"${o}\")`:`[${r}](${t.getURL()})`},importRegExp:/(?:\\[(.+?)\\])(?:\\((?:([^()\\s]+)(?:\\s\"((?:[^\"]*\\\\\")*[^\"]*)\"\\s*)?)\\))/,regExp:/(?:\\[([^[\\]]*(?:\\[[^[\\]]*\\][^[\\]]*)*)\\])(?:\\((?:([^()\\s]+)(?:\\s\"((?:[^\"]*\\\\\")*[^\"]*)\"\\s*)?)\\))$/,replace:(t,e)=>{if(d(t,z))return;const[,n,o,r]=e,s=U(o,{title:r}),i=n.split(\"[\").length-1,c=n.split(\"]\").length-1;let a=n,f=\"\";if(i<c)return;if(i>c){const t=n.split(\"[\");f=\"[\"+t[0],a=t.slice(1).join(\"[\")}const g=l(a);return g.setFormat(t.getFormat()),s.append(g),t.replace(s),f&&s.insertBefore(l(f)),g},trigger:\")\",type:\"text-match\"},Kt=[Ft,Lt,kt,Mt],qt=[Nt],Gt=[_t,jt,Pt,At,Ot,Bt,Ut,Wt,zt],Ht=[Dt],Jt=[...Kt,...qt,...Gt,...Ht];function Qt(t,e,n,o,r){const s=t.getParent();if(!E(s)||t.getFirstChild()!==e)return!1;const i=e.getTextContent();if(!r&&\" \"!==i[n-1])return!1;for(const{regExpStart:s,replace:l,regExpEnd:c}of o){if(c&&!(\"optional\"in c)||c&&\"optional\"in c&&!c.optional)continue;const o=i.match(s);if(o){const s=r||o[0].endsWith(\" \")?n:n-1;if(o[0].length!==s)continue;const i=e.getNextSiblings(),[c,a]=e.splitText(n);if(!1!==l(t,a?[a,...i]:i,o,null,null,!1))return c.remove(),!0}}return!1}function Vt(t,e,n){const o=n.length;for(let r=e;r>=o;r--){const e=r-o;if(Xt(t,e,n,0,o)&&\" \"!==t[e+o])return e}return-1}function Xt(t,e,n,o,r){for(let s=0;s<r;s++)if(t[e+s]!==n[o+s])return!1;return!0}function Yt(t,n=Jt){const o=K(n),r=D(o.textFormat,({tag:t})=>t[t.length-1]),l=D(o.textMatch,({trigger:t})=>t);for(const e of n){const n=e.type;if(\"element\"===n||\"text-match\"===n||\"multiline-element\"===n){const n=e.dependencies;for(const e of n)t.hasNode(e)||at(173,e.getType())}}const c=(t,n,c)=>{(function(t,e,n,o){const r=t.getParent();if(!E(r)||t.getFirstChild()!==e)return!1;const s=e.getTextContent();if(\" \"!==s[n-1])return!1;for(const{regExp:r,replace:i}of o){const o=s.match(r);if(o&&o[0].length===(o[0].endsWith(\" \")?n:n-1)){const r=e.getNextSiblings(),[s,l]=e.splitText(n);if(!1!==i(t,l?[l,...r]:r,o,!1))return s.remove(),!0}}return!1})(t,n,c,o.element)||Qt(t,n,c,o.multilineElement)||function(t,e,n){let o=t.getTextContent();const r=n[o[e-1]];if(null==r)return!1;e<o.length&&(o=o.slice(0,e));for(const e of r){if(!e.replace||!e.regExp)continue;const n=o.match(e.regExp);if(null===n)continue;const r=n.index||0,s=r+n[0].length;let i;return 0===r?[i]=t.splitText(s):[,i]=t.splitText(r,s),i.selectNext(0,0),e.replace(i,n),!0}return!1}(n,c,l)||function(t,n,o){const r=t.getTextContent(),l=n-1,c=r[l],a=o[c];if(!a)return!1;for(const n of a){const{tag:o}=n,a=o.length,f=l-a+1;if(a>1&&!Xt(r,f,o,0,a))continue;if(\" \"===r[f-1])continue;const g=r[l+1];if(!1===n.intraword&&g&&!q.test(g))continue;const u=t;let d=u,p=Vt(r,f,o),h=d;for(;p<0&&(h=h.getPreviousSibling())&&!s(h);)if(e(h)){if(h.hasFormat(\"code\"))continue;const t=h.getTextContent();d=h,p=Vt(t,t.length,o)}if(p<0)continue;if(d===u&&p+a===f)continue;const x=d.getTextContent();if(p>0&&x[p-1]===c)continue;const C=x[p-1];if(!1===n.intraword&&C&&!q.test(C))continue;const T=u.getTextContent(),E=T.slice(0,f)+T.slice(l+1);u.setTextContent(E);const v=d===u?E:x;d.setTextContent(v.slice(0,p)+v.slice(p+a));const I=i(),S=y();$(S);const b=l-a*(d===u?2:1)+1;S.anchor.set(d.__key,p,\"text\"),S.focus.set(u.__key,b,\"text\");for(const t of n.format)S.hasFormat(t)||S.formatText(t);S.anchor.set(S.focus.key,S.focus.offset,S.focus.type);for(const t of n.format)S.hasFormat(t)&&S.toggleFormat(t);return m(I)&&(S.format=I.format),!0}}(n,c,r)};return p(t.registerUpdateListener(({tags:n,dirtyLeaves:o,editorState:r,prevEditorState:s})=>{if(n.has(h)||n.has(x))return;if(t.isComposing())return;const l=r.read(i),a=s.read(i);if(!m(a)||!m(l)||!l.isCollapsed()||l.is(a))return;const f=l.anchor.key,g=l.anchor.offset,u=r._nodeMap.get(f);!e(u)||!o.has(f)||1!==g&&g>a.anchor.offset+1||t.update(()=>{if(!rt(u))return;const t=u.getParent();null===t||A(t)||c(t,u,l.anchor.offset)})}),t.registerCommand(C,t=>{if(null!==t&&t.shiftKey)return!1;const n=i();if(!m(n)||!n.isCollapsed())return!1;const r=n.anchor.offset,s=n.anchor.getNode();if(!e(s)||!rt(s))return!1;const l=s.getParent();if(null===l||A(l))return!1;return r===s.getTextContent().length&&(!!Qt(l,s,r,o.multilineElement,!0)&&(null!==t&&t.preventDefault(),!0))},T))}function Zt(t,e=Jt,n,o=!1,r=!1){const s=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 s=n[t].trimEnd(),i=r[r.length-1];mt.test(s)?r.push(s):ht.test(s)||xt.test(s)?(o=!o,r.push(s)):o||\"\"===s||\"\"===i||!i||dt.test(i)||dt.test(s)||pt.test(s)||ft.test(s)||gt.test(s)||ut.test(s)||Ct.test(s)||Tt.test(s)||!e||Et.test(s)||yt.test(s)||$t(yt).test(i)||$t(Et).test(i)||xt.test(i)?r.push(s):r[r.length-1]=i+\" \"+s.trimStart()}return r.join(\"\\n\")}(t,r);return it(e,o)(s,n)}function te(t=Jt,e,o=!1){const r=function(t,e=!1){const o=K(t),r=[...o.multilineElement,...o.element],s=!e,i=o.textFormat.filter(t=>1===t.format.length).sort((t,e)=>Number(t.format.includes(\"code\"))-Number(e.format.includes(\"code\")));return t=>{const e=[],l=(t||n()).getChildren();for(let t=0;t<l.length;t++){const n=l[t],c=V(n,r,i,o.textMatch);null!=c&&e.push(s&&t>0&&!Q(n)&&!Q(l[t-1])?\"\\n\".concat(c):c)}return e.join(\"\\n\")}}(t,o);return r(e)}export{Zt as $convertFromMarkdownString,te as $convertToMarkdownString,jt as BOLD_ITALIC_STAR,Pt as BOLD_ITALIC_UNDERSCORE,At as BOLD_STAR,Ot as BOLD_UNDERSCORE,Rt as CHECK_LIST,Nt as CODE,Kt as ELEMENT_TRANSFORMERS,Ft as HEADING,Bt as HIGHLIGHT,_t as INLINE_CODE,Ut as ITALIC_STAR,Wt as ITALIC_UNDERSCORE,Dt as LINK,qt as MULTILINE_ELEMENT_TRANSFORMERS,Mt as ORDERED_LIST,Lt as QUOTE,zt as STRIKETHROUGH,Gt as TEXT_FORMAT_TRANSFORMERS,Ht as TEXT_MATCH_TRANSFORMERS,Jt as TRANSFORMERS,kt as UNORDERED_LIST,Yt 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 p,$createParagraphNode as m,$applyNodeReplacement as C,createCommand as _,$createTextNode as S,$getSelection as w,$isRangeSelection as b,$isParagraphNode as y,$createPoint as N,$getNodeByKey as v,$isElementNode as x,$normalizeSelection__EXPERIMENTAL as T,isCurrentlyReadOnlyMode as R,TEXT_TYPE_TO_FORMAT as F,$getEditor as A,$setSelection as K,SELECTION_CHANGE_COMMAND as O,getDOMSelection as k,$createRangeSelection as E,$isRootNode as M,INSERT_PARAGRAPH_COMMAND as $,KEY_ARROW_DOWN_COMMAND as W,KEY_ARROW_UP_COMMAND as z,KEY_ARROW_LEFT_COMMAND as H,KEY_ARROW_RIGHT_COMMAND as L,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 Y,CUT_COMMAND as X,FORMAT_TEXT_COMMAND as q,FORMAT_ELEMENT_COMMAND as V,CONTROLLED_TEXT_INSERTION_COMMAND as j,KEY_TAB_COMMAND as G,FOCUS_COMMAND as Q,$getPreviousSelection as Z,$getNearestNodeFromDOMNode as ee,$createRangeSelectionFromDom as te,isDOMNode as ne,$isRootOrShadowRoot as oe,$caretFromPoint as re,$isExtendableTextPointCaret as le,$extendCaretToRange as se,$isSiblingCaret as ie,$getSiblingCaret as ce,$setPointFromCaret as ae,$normalizeCaret as ue,$isChildCaret as he,$getChildCaret as de,$getAdjacentChildCaret as fe,setDOMUnmanaged as ge,COMMAND_PRIORITY_EDITOR as pe,SELECTION_INSERT_CLIPBOARD_NODES_COMMAND as me,SELECT_ALL_COMMAND as Ce,COMMAND_PRIORITY_LOW as _e,CLICK_COMMAND as Se,$getRoot as we,defineExtension as be,safeCast as ye}from\"lexical\";import{signal as Ne,effect as ve,namedSignals as xe}from\"@lexical/extension\";import{copyToClipboard as Te,$getClipboardDataFromSelection as Re}from\"@lexical/clipboard\";const Fe=/^(\\d+(?:\\.\\d+)?)px$/,Ae={BOTH:3,COLUMN:2,NO_STATUS:0,ROW:1};class Ke extends h{__colSpan;__rowSpan;__headerState;__width;__backgroundColor;__verticalAlign;static getType(){return\"tablecell\"}static clone(e){return new Ke(e.__headerState,e.__colSpan,e.__width,e.__key)}afterCloneFrom(e){super.afterCloneFrom(e),this.__rowSpan=e.__rowSpan,this.__backgroundColor=e.__backgroundColor,this.__verticalAlign=e.__verticalAlign}static importDOM(){return{td:e=>({conversion:ke,priority:0}),th:e=>({conversion:ke,priority:0})}}static importJSON(e){return Ee().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=Ae.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),Oe(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(),...Oe(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=Ae.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!==Ae.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 Oe(e){return\"middle\"===e||\"bottom\"===e}function ke(e){const t=e,n=e.nodeName.toLowerCase();let o;Fe.test(t.style.width)&&(o=parseFloat(t.style.width));let r=Ae.NO_STATUS;if(\"th\"===n){const e=t.getAttribute(\"scope\");r=\"col\"===e?Ae.COLUMN:Ae.ROW}const l=Ee(r,t.colSpan,o);l.__rowSpan=t.rowSpan;const s=t.style.backgroundColor;\"\"!==s&&(l.__backgroundColor=s);const i=t.style.verticalAlign;Oe(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\"),d=\"italic\"===c.fontStyle,C=a.includes(\"underline\");return{after:e=>{const t=[];let n=null;const o=()=>{if(n){const e=n.getFirstChild();p(e)&&1===n.getChildrenSize()&&e.remove()}};for(const r of e)f(r)||g(r)||p(r)?(g(r)&&(u&&r.toggleFormat(\"bold\"),h&&r.toggleFormat(\"strikethrough\"),d&&r.toggleFormat(\"italic\"),C&&r.toggleFormat(\"underline\")),n?n.append(r):(n=m().append(r),t.push(n))):(t.push(r),o(),n=null);return o(),0===t.length&&t.push(m()),t},node:l}}function Ee(e=Ae.NO_STATUS,t=1,n){return C(new Ke(e,t,n))}function Me(e){return e instanceof Ke}const $e=_(\"INSERT_TABLE_COMMAND\");function We(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 ze extends h{__height;static getType(){return\"tablerow\"}static clone(e){return new ze(e.__height,e.__key)}static importDOM(){return{tr:e=>({conversion:He,priority:0})}}static importJSON(e){return Le().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 He(e){const n=e;let o;return Fe.test(n.style.height)&&(o=parseFloat(n.style.height)),{after:e=>t(e,Me),node:Le(o)}}function Le(e){return C(new ze(e))}function Be(e){return e instanceof ze}const Pe=\"undefined\"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement,De=Pe&&\"documentMode\"in document?document.documentMode:null,Ie=Pe&&/^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent);function Ue(e,t,n=!0){const o=bn();for(let r=0;r<e;r++){const e=Le();for(let o=0;o<t;o++){let t=Ae.NO_STATUS;\"object\"==typeof n?(0===r&&n.rows&&(t|=Ae.ROW),0===o&&n.columns&&(t|=Ae.COLUMN)):n&&(0===r&&(t|=Ae.ROW),0===o&&(t|=Ae.COLUMN));const l=Ee(t),s=m();s.append(S()),l.append(s),e.append(l)}o.append(e)}return o}function Je(e){const t=n(e,e=>Me(e));return Me(t)?t:null}function Ye(e){const t=n(e,e=>Be(e));if(Be(t))return t;throw new Error(\"Expected table cell to be inside of table row.\")}function Xe(e){const t=n(e,e=>yn(e));if(yn(t))return t;throw new Error(\"Expected table cell to be inside of table.\")}function qe(e){const t=Ye(e);return Xe(t).getChildren().findIndex(e=>e.is(t))}function Ve(e){return Ye(e).getChildren().findIndex(t=>t.is(e))}function je(e,t){const n=Xe(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 Ge(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 Qe(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(!Be(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=Le();for(let n=0;n<t;n++){const t=e[n];Me(t)||We(12);const{above:l,below:s}=je(t,r);let i=Ae.NO_STATUS;const c=l&&l.getWidth()||s&&s.getWidth()||void 0;(l&&l.hasHeaderState(Ae.COLUMN)||s&&s.hasHeaderState(Ae.COLUMN))&&(i|=Ae.COLUMN);const a=Ee(i,1,c);a.append(m()),o.append(a)}n?s.insertAfter(o):s.insertBefore(o)}return e}Pe&&\"InputEvent\"in window&&!De&&new window.InputEvent(\"input\");const Ze=(e,t)=>e===Ae.BOTH||e===t?t:Ae.NO_STATUS;function et(e=!0){const t=w();b(t)||Rt(t)||We(188);const n=t.anchor.getNode(),o=t.focus.getNode(),[r]=wt(n),[l,,s]=wt(o),[,i,c]=_t(s,l,r),{startRow:a}=c,{startRow:u}=i;return e?nt(a+r.__rowSpan>u+l.__rowSpan?r:l,!0):nt(u<a?l:r,!1)}const tt=et;function nt(e,t=!0){const[,,n]=wt(e),[o,r]=_t(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=Le();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=Ze(t,Ae.COLUMN);c.append(Ee(n).append(m()))}else n.setRowSpan(n.__rowSpan+1)}const a=n.getChildAtIndex(t);Be(a)||We(256),a.insertAfter(c),i=c}else{const e=s,t=o[e],r=Le();for(let n=0;n<l;n++){const{cell:o,startRow:l}=t[n];if(l===e){const e=t[n].cell.__headerState,o=Ze(e,Ae.COLUMN);r.append(Ee(o).append(m()))}else o.setRowSpan(o.__rowSpan+1)}const c=n.getChildAtIndex(e);Be(c)||We(257),c.insertBefore(r),i=r}return i}function ot(e,t,n=!0,o,r){const l=e.getChildren(),s=[];for(let e=0;e<l.length;e++){const n=l[e];if(Be(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];Me(o)||We(12);const{left:l,right:i}=je(o,r);let c=Ae.NO_STATUS;(l&&l.hasHeaderState(Ae.ROW)||i&&i.hasHeaderState(Ae.ROW))&&(c|=Ae.ROW);const a=Ee(c);a.append(m()),s.push({newTableCell:a,targetCell:o})}}return s.forEach(({newTableCell:e,targetCell:t})=>{n?t.insertAfter(e):t.insertBefore(e)}),e}function rt(e=!0){const t=w();b(t)||Rt(t)||We(188);const n=t.anchor.getNode(),o=t.focus.getNode(),[r]=wt(n),[l,,s]=wt(o),[,i,c]=_t(s,l,r),{startColumn:a}=c,{startColumn:u}=i;return e?st(a+r.__colSpan>u+l.__colSpan?r:l,!0):st(u<a?l:r,!1)}const lt=rt;function st(e,t=!0,n=!0){const[,,o]=wt(e),[r,l]=_t(o,e,e),s=r.length,{startColumn:i}=l,c=t?i+e.__colSpan-1:i-1,a=o.getFirstChild();Be(a)||We(120);let u=null;function h(e=Ae.NO_STATUS){const t=Ee(e).append(m());return null===u&&(u=t),t}let d=a;e:for(let e=0;e<s;e++){if(0!==e){const e=d.getNextSibling();Be(e)||We(121),d=e}const t=r[e],n=t[c<0?0:c].cell.__headerState,o=Ze(n,Ae.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&&dt(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 it(e,t){const n=e.getChildren();for(let e=0;e<n.length;e++){const o=n[e];if(Be(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 ct(){const e=w();b(e)||Rt(e)||We(188);const[t,n]=e.isBackward()?[e.focus.getNode(),e.anchor.getNode()]:[e.anchor.getNode(),e.focus.getNode()],[o,,r]=wt(t),[l]=wt(n),[s,i,c]=_t(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&&We(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);Be(t)||We(206,String(e)),t.remove()}if(void 0!==f){const{cell:e}=f[0];dt(e)}else{const e=s[a-1],{cell:t}=e[0];dt(t)}}const at=ct;function ut(){const e=w();b(e)||Rt(e)||We(188);const t=e.anchor.getNode(),n=e.focus.getNode(),[o,,r]=wt(t),[l]=wt(n),[s,i,c]=_t(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 p=s.length;for(let e=0;e<p;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 m=s[u],C=a>h?m[a+o.__colSpan]:m[h+l.__colSpan];if(void 0!==C){const{cell:e}=C;dt(e)}else{const e=h<a?m[h-1]:m[a-1],{cell:t}=e;dt(t)}const _=r.getColWidths();if(_){const e=[..._];e.splice(d,g),r.setColWidths(e)}}const ht=ut;function dt(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 gt(e){if(0===e.length)return null;const t=Xe(e[0]),[n]=St(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);pt(r)||h.append(...r.getChildren()),r.remove()}}return 0===h.getChildrenSize()&&h.append(m()),h}function pt(e){if(1!==e.getChildrenSize())return!1;const t=e.getFirstChildOrThrow();return!(!y(t)||!t.isEmpty())}function mt(){const e=w();b(e)||Rt(e)||We(188);const t=e.anchor.getNode(),o=n(t,Me);return Me(o)||We(148),Ct(o)}function Ct(e){const[t,n,o]=wt(e),r=t.__colSpan,l=t.__rowSpan;if(1===r&&1===l)return;const[s,i]=_t(o,t,t),{startColumn:c,startRow:a}=i,u=t.__headerState&Ae.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&Ae.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(Ee(h[e]|f[0]).append(m()));t.setColSpan(1)}if(l>1){let e;for(let t=1;t<l;t++){const o=a+t,l=s[o];e=(e||n).getNextSibling(),Be(e)||We(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,Ee(h[n]|f[t]).append(m()));else for(let e=r-1;e>=0;e--)i.insertAfter(Ee(h[e]|f[t]).append(m()))}t.setRowSpan(1)}}function _t(e,t,n){const[o,r,l]=St(e,t,n);return null===r&&We(207),null===l&&We(208),[o,r,l]}function St(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];Be(o)||We(209);const c=s(e);for(let a=o.getFirstChild(),u=0;null!=a;a=a.getNextSibling()){for(Me(a)||We(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 wt(e){let t;if(e instanceof Ke)t=e;else if(\"__type\"in e){const o=n(e,Me);Me(o)||We(148),t=o}else{const o=n(e.getNode(),Me);Me(o)||We(148),t=o}const o=t.getParent();Be(o)||We(149);const r=o.getParent();return yn(r)||We(210),[t,o,r]}function bt(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 yt(e){const t=e.getChildren();let n=null;for(const e of t){if(!Be(e))return!1;if(null===n&&(n=e.getChildrenSize()),e.getChildrenSize()!==n)return!1;const t=e.getChildren();for(const e of t)if(!Me(e)||1!==e.getRowSpan()||1!==e.getColSpan())return!1}return(n||0)>0}function Nt(e,t,n){if(t===n)return;const o=e.getColumnCount();if(t<0||t>=o||n<0||n>=o)return;if(!yt(e))return;e.getChildren().filter(Be).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 vt(e){const[t,,n]=wt(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 xt(e){const[[t,o,r,l],[s,i,c,a]]=[\"anchor\",\"focus\"].map(t=>{const o=e[t].getNode(),r=n(o,Me);Me(r)||We(238,t,o.getKey(),o.getType());const l=r.getParent();Be(l)||We(239,t);const s=l.getParent();return yn(s)||We(240,t),[o,r,l,s]});return l.is(a)||We(241),{anchorCell:o,anchorNode:t,anchorRow:r,anchorTable:l,focusCell:i,focusNode:s,focusRow:c,focusTable:a}}class Tt{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 Rt(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 Tt(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(Me).forEach(e=>{const n=e.getFirstChild();y(n)&&(t|=n.getTextFormat())});const n=F[e];return 0!==(t&n)}insertNodes(e){const t=this.focus.getNode();x(t)||We(151);T(t.select(0,t.getChildrenSize())).insertNodes(e)}getShape(){const{anchorCell:e,focusCell:t}=xt(this),n=vt(e);null===n&&We(153);const o=vt(t);null===o&&We(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}=xt(this),r=o.getParents()[1];if(r!==t){if(t.isParentOf(o)){const e=r.getParent();null==e&&We(159),this.set(this.tableKey,o.getKey(),e.getKey())}else{const e=t.getParent();null==e&&We(158),this.set(this.tableKey,e.getKey(),o.getKey())}return this.getNodes()}const[l,s,i]=_t(t,n,o),{minColumn:c,maxColumn:a,minRow:u,maxRow:h}=bt(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();Be(o)||We(160),o!==f&&(d.set(o.getKey(),o),f=o),d.has(n.getKey())||Kt(n,e=>{d.set(e.getKey(),e)})}const g=Array.from(d.values());return R()||(this._cachedNodes=g),g}getTextContent(){const e=this.getNodes().filter(e=>Me(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 Rt(e){return e instanceof Tt}function Ft(){const e=N(\"root\",0,\"element\"),t=N(\"root\",0,\"element\");return new Tt(\"root\",e,t)}function At(e,t,n){e.getKey(),t.getKey(),n.getKey();const o=w(),r=Rt(o)?o.clone():Ft();return r.set(e.getKey(),t.getKey(),n.getKey()),r}function Kt(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 Ot(e,t=A()){const n=v(e);yn(n)||We(231,e);const o=$t(n,t.getElementByKey(e));return null===o&&We(232,e),{tableElement:o,tableNode:n}}class kt{focusX;focusY;listenersToRemove;table;isHighlightingCells;anchorX;anchorY;tableNodeKey;anchorCell;focusCell;anchorCellNodeKey;focusCellNodeKey;editor;tableSelection;hasHijackedSelectionStyles;isSelecting;pointerType;shouldCheckSelection;abortController;listenerOptions;nextFocus;constructor(e,t){this.isHighlightingCells=!1,this.anchorX=-1,this.anchorY=-1,this.focusX=-1,this.focusY=-1,this.listenersToRemove=new Set,this.tableNodeKey=t,this.editor=e,this.table={columns:0,domRows:[],rows:0},this.tableSelection=null,this.anchorCellNodeKey=null,this.focusCellNodeKey=null,this.anchorCell=null,this.focusCell=null,this.hasHijackedSelectionStyles=!1,this.isSelecting=!1,this.pointerType=null,this.shouldCheckSelection=!1,this.abortController=new AbortController,this.listenerOptions={signal:this.abortController.signal},this.nextFocus=null,this.trackTable()}getTable(){return this.table}removeListeners(){this.abortController.abort(\"removeListeners\"),Array.from(this.listenersToRemove).forEach(e=>e()),this.listenersToRemove.clear()}$lookup(){return Ot(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=Jt(n,o)},{editor:this.editor})});this.editor.getEditorState().read(()=>{const{tableNode:t,tableElement:n}=this.$lookup();this.table=Jt(t,n),e.observe(n,{attributes:!0,childList:!0,subtree:!0})},{editor:this.editor})}$clearHighlight(){const e=this.editor;this.isHighlightingCells=!1,this.anchorX=-1,this.anchorY=-1,this.focusX=-1,this.focusY=-1,this.tableSelection=null,this.anchorCellNodeKey=null,this.focusCellNodeKey=null,this.anchorCell=null,this.focusCell=null,this.hasHijackedSelectionStyles=!1,this.$enableHighlightStyle();const{tableNode:t,tableElement:n}=this.$lookup();Yt(e,Jt(t,n),null),null!==w()&&(K(null),e.dispatchCommand(O,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&&We(233,e.tableKey,this.tableNodeKey);const t=this.editor;this.tableSelection=e,this.isHighlightingCells=!0,this.$disableHighlightStyle(),this.updateDOMSelection(),Yt(t,this.table,this.tableSelection)}else this.$clearHighlight()}setShouldCheckSelection(){this.shouldCheckSelection=!0}getAndClearShouldCheckSelection(){return!!this.shouldCheckSelection&&(this.shouldCheckSelection=!1,!0)}setNextFocus(e){this.nextFocus=e}getAndClearNextFocus(){const{nextFocus:e}=this;return null!==e&&(this.nextFocus=null),e}updateDOMSelection(){if(null!==this.anchorCell&&null!==this.focusCell){const e=k(this.editor._window);e&&e.rangeCount>0&&e.removeAllRanges()}}$setFocusCellForSelection(e,t=!1){const n=this.editor,{tableNode:o}=this.$lookup(),r=e.x,l=e.y;if(this.focusCell=e,!this.isHighlightingCells){(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=fn(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=At(o,t,e),K(this.tableSelection),n.dispatchCommand(O,void 0),Yt(n,this.table,this.tableSelection),!0}}}return!1}$getAnchorTableCell(){return this.anchorCellNodeKey?v(this.anchorCellNodeKey):null}$getAnchorTableCellOrThrow(){const e=this.$getAnchorTableCell();return null===e&&We(234),e}$getFocusTableCell(){return this.focusCellNodeKey?v(this.focusCellNodeKey):null}$getFocusTableCellOrThrow(){const e=this.$getFocusTableCell();return null===e&&We(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=fn(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=At(t,n,n),this.anchorCellNodeKey=e}}$formatCells(e){const t=w();Rt(t)||We(236);const n=E(),o=n.anchor,r=n.focus,l=t.getNodes().filter(Me);l.length>0||We(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)}),K(t),this.editor.dispatchCommand(O,void 0)}$clearText(){const{editor:e}=this,t=v(this.tableNodeKey);if(!yn(t))throw new Error(\"Expected TableNode.\");const n=w();Rt(n)||We(253);const o=n.getNodes().filter(Me),r=t.getFirstChild(),l=t.getLastChild();if(o.length>0&&null!==r&&null!==l&&Be(r)&&Be(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=m(),n=S();t.append(n),e.append(t),e.getChildren().forEach(e=>{e!==t&&e.remove()})}}),Yt(e,this.table,null),K(null),e.dispatchCommand(O,void 0)}}const Et=\"__lexicalTableSelection\";function Mt(e){return d(e)&&\"TABLE\"===e.nodeName}function $t(e,t){if(!t)return t;const n=Mt(t)?t:e.getDOMSlot(t).element;return\"TABLE\"!==n.nodeName&&We(245,t.nodeName),n}function Wt(e){return e._window}function zt(e,t){for(let n=t,o=null;null!==n;n=n.getParent()){if(e.is(n))return o;Me(n)&&(o=n)}return null}const Ht=[[W,\"down\"],[z,\"up\"],[H,\"backward\"],[L,\"forward\"]],Lt=[D,I,U],Bt=[J,Y];function Pt(e,t,o,l){const s=o.getRootElement(),i=Wt(o);null!==s&&null!==i||We(246);const c=new kt(o,e.getKey()),a=$t(e,t);!function(e,t){null!==Dt(e)&&We(205);e[Et]=t}(a,c),c.listenersToRemove.add(()=>function(e,t){Dt(e)===t&&delete e[Et]}(a,c));const u=t=>{if(c.pointerType=t.pointerType,0!==t.button||!ne(t.target)||!i)return;const n=It(t.target);null!==n&&o.update(()=>{const o=Z();if(Ie&&t.shiftKey&&en(o,e)&&(b(o)||Rt(o))){const r=o.anchor.getNode(),l=zt(e,o.anchor.getNode());if(l)c.$setAnchorCellForSelection(dn(c,l)),c.$setFocusCellForSelection(n),an(t);else{(e.isBefore(r)?e.selectStart():e.selectEnd()).anchor.set(o.anchor.key,o.anchor.offset,o.anchor.type)}}else\"touch\"!==t.pointerType&&c.$setAnchorCellForSelection(n)}),(e=>{if(c.isSelecting)return;c.isSelecting=!0,null!==e&&null===c.anchorCell&&o.update(()=>{c.$setAnchorCellForSelection(e)});const t=()=>{c.isSelecting=!1,i.removeEventListener(\"pointerup\",t),i.removeEventListener(\"pointermove\",n)},n=e=>{if(1&~e.buttons&&c.isSelecting)return c.isSelecting=!1,i.removeEventListener(\"pointerup\",t),void i.removeEventListener(\"pointermove\",n);if(!ne(e.target))return;let r=null;const l=!(Ie||a.contains(e.target));if(l)r=Ut(a,e.target);else for(const t of document.elementsFromPoint(e.clientX,e.clientY))if(r=Ut(a,t),r)break;if(r){const e=r;null===c.anchorCell&&o.update(()=>{c.$setAnchorCellForSelection(e)}),null!==c.focusCell&&r.elem===c.focusCell.elem||(c.setNextFocus({focusCell:r,override:l}),o.dispatchCommand(O,void 0))}};i.addEventListener(\"pointerup\",t,c.listenerOptions),i.addEventListener(\"pointermove\",n,c.listenerOptions)})(n)};a.addEventListener(\"pointerdown\",u,c.listenerOptions),c.listenersToRemove.add(()=>{a.removeEventListener(\"pointerdown\",u)});const h=e=>{if(e.detail>=3&&ne(e.target)){null!==It(e.target)&&e.preventDefault()}};a.addEventListener(\"mousedown\",h,c.listenerOptions),c.listenersToRemove.add(()=>{a.removeEventListener(\"mousedown\",h)});const d=e=>{const t=e.target;0===e.button&&ne(t)&&o.update(()=>{const e=w();Rt(e)&&e.tableKey===c.tableNodeKey&&s.contains(t)&&c.$clearHighlight()})};i.addEventListener(\"pointerdown\",d,c.listenerOptions),c.listenersToRemove.add(()=>{i.removeEventListener(\"pointerdown\",d)});for(const[t,n]of Ht)c.listenersToRemove.add(o.registerCommand(t,t=>cn(o,t,n,e,c),B));c.listenersToRemove.add(o.registerCommand(P,t=>{const n=w();if(Rt(n)){const o=zt(e,n.focus.getNode());if(null!==o)return an(t),o.selectEnd(),!0}return!1},B));const f=t=>()=>{const o=w();if(!en(o,e))return!1;if(Rt(o))return c.$clearText(),!0;if(b(o)){if(!Me(zt(e,o.anchor.getNode())))return!1;const r=o.anchor.getNode(),l=o.focus.getNode(),s=e.isParentOf(r),i=e.isParentOf(l);if(s&&!i||i&&!s)return c.$clearText(),!0;const a=n(o.anchor.getNode(),e=>x(e)),u=a&&n(a,e=>x(e)&&Me(e.getParent()));if(!x(u)||!x(a))return!1;if(t===I&&null===u.getPreviousSibling())return!0}return!1};for(const e of Lt)c.listenersToRemove.add(o.registerCommand(e,f(e),B));const g=t=>{const n=w();if(!Rt(n)&&!b(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!!en(n,e)&&(!!Rt(n)&&(t&&(t.preventDefault(),t.stopPropagation()),c.$clearText(),!0))};for(const e of Bt)c.listenersToRemove.add(o.registerCommand(e,g,B));return c.listenersToRemove.add(o.registerCommand(X,e=>{const t=w();if(t){if(!Rt(t)&&!b(t))return!1;Te(o,r(e,ClipboardEvent)?e:null,Re(t));const n=g(e);return b(t)?(t.removeText(),!0):n}return!1},B)),c.listenersToRemove.add(o.registerCommand(q,t=>{const o=w();if(!en(o,e))return!1;if(Rt(o))return c.$formatCells(t),!0;if(b(o)){const e=n(o.anchor.getNode(),e=>Me(e));if(!Me(e))return!1}return!1},B)),c.listenersToRemove.add(o.registerCommand(V,t=>{const n=w();if(!Rt(n)||!en(n,e))return!1;const o=n.anchor.getNode(),r=n.focus.getNode();if(!Me(o)||!Me(r))return!1;if(function(e,t){if(Rt(e)){const n=e.anchor.getNode(),o=e.focus.getNode();if(t&&n&&o){const[e]=_t(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]=_t(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)),c.listenersToRemove.add(o.registerCommand(j,t=>{const r=w();if(!en(r,e))return!1;if(Rt(r))return c.$clearHighlight(),!1;if(b(r)){const l=n(r.anchor.getNode(),e=>Me(e));if(!Me(l))return!1;if(\"string\"==typeof t){const n=hn(o,r,e);if(n)return un(n,e,[S(t)]),!0}}return!1},B)),l&&c.listenersToRemove.add(o.registerCommand(G,t=>{const o=w();if(!b(o)||!o.isCollapsed()||!en(o,e))return!1;const r=rn(o.anchor.getNode());return!(null===r||!e.is(ln(r)))&&(an(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,Be);null===s&&We(247);for(let e=s[o]();Be(e);e=e[o]()){const t=e[r]();if(x(t))return t.selectEnd()}const i=n(s,yn);null===i&&We(248);\"next\"===t?i.selectNext():i.selectPrevious()}(r,t.shiftKey?\"previous\":\"next\"),!0)},B)),c.listenersToRemove.add(o.registerCommand(Q,t=>e.isSelected(),B)),c.listenersToRemove.add(o.registerCommand(O,()=>{const t=w(),r=Z(),l=c.getAndClearNextFocus();if(null!==l){const{focusCell:e}=l;if(Rt(t)&&t.tableKey===c.tableNodeKey)return(e.x!==c.focusX||e.y!==c.focusY)&&(c.$setFocusCellForSelection(e),!0);if(e!==c.anchorCell&&null!==c.anchorCell&&null!==c.anchorCellNodeKey&&null!==c.tableSelection)return c.$setFocusCellForSelection(e,!0),!0}if(c.getAndClearShouldCheckSelection()&&b(r)&&b(t)&&t.isCollapsed()){const o=t.anchor.getNode(),r=e.getFirstChild(),l=rn(o);if(null!==l&&Be(r)){const t=r.getFirstChild();if(Me(t)&&e.is(n(l,n=>n.is(e)||n.is(t))))return t.selectStart(),!0}}if(b(t)){const{anchor:n,focus:l}=t,s=n.getNode(),i=l.getNode(),a=rn(s),u=rn(i),h=!(!a||!e.is(ln(a))),d=!(!u||!e.is(ln(u))),f=h!==d,g=h&&d,p=t.isBackward();if(f){const n=t.clone();if(d){const[t]=_t(e,u,u),o=t[0][0].cell,r=t[t.length-1].at(-1).cell;n.focus.set(p?o.getKey():r.getKey(),p?0:r.getChildrenSize(),\"element\")}else if(h){const[t]=_t(e,a,a),o=t[0][0].cell,r=t[t.length-1].at(-1).cell;n.anchor.set(p?r.getKey():o.getKey(),p?r.getChildrenSize():0,\"element\")}K(n),qt(o,c)}else if(g&&(a.is(u)||(c.$setAnchorCellForSelection(dn(c,a)),c.$setFocusCellForSelection(dn(c,u),!0)),\"touch\"===c.pointerType&&c.isSelecting&&t.isCollapsed()&&b(r)&&r.isCollapsed())){const e=rn(r.anchor.getNode());e&&!e.is(u)&&(c.$setAnchorCellForSelection(dn(c,e)),c.$setFocusCellForSelection(dn(c,u),!0),c.pointerType=null)}}else if(t&&Rt(t)&&t.is(r)&&t.tableKey===e.getKey()){const n=k(i);if(n&&n.anchorNode&&n.focusNode){const r=ee(n.focusNode),l=r&&!e.isParentOf(r),s=ee(n.anchorNode),i=s&&e.isParentOf(s);if(l&&i&&n.rangeCount>0){const r=te(n,o);r&&(r.anchor.set(e.getKey(),t.isBackward()?e.getChildrenSize():0,\"element\"),n.removeAllRanges(),K(r))}}}return t&&!t.is(r)&&(Rt(t)||Rt(r))&&c.tableSelection&&!c.tableSelection.is(r)?(Rt(t)&&t.tableKey===c.tableNodeKey?c.$updateTableTableSelection(t):!Rt(t)&&Rt(r)&&r.tableKey===c.tableNodeKey&&c.$updateTableTableSelection(null),!1):(c.hasHijackedSelectionStyles&&!e.isSelected()?function(e,t){t.$enableHighlightStyle(),Xt(t.table,t=>{const n=t.elem;t.highlighted=!1,on(e,t),n.getAttribute(\"style\")||n.removeAttribute(\"style\")})}(o,c):!c.hasHijackedSelectionStyles&&e.isSelected()&&qt(o,c),!1)},B)),c.listenersToRemove.add(o.registerCommand($,()=>{const t=w();if(!b(t)||!t.isCollapsed()||!en(t,e))return!1;const n=hn(o,t,e);return!!n&&(un(n,e),!0)},B)),c}function Dt(e){return e[Et]||null}function It(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 Ut(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 Jt(e,t){const n=[],o={columns:0,domRows:n,rows:0};let r=$t(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 Yt(e,t,n){const o=new Set(n?n.getNodes():[]);Xt(t,(t,n)=>{const r=t.elem;o.has(n)?(t.highlighted=!0,nn(e,t)):(t.highlighted=!1,on(e,t),r.getAttribute(\"style\")||r.removeAttribute(\"style\"))})}function Xt(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=ee(r.elem);null!==l&&t(r,l,{x:n,y:e})}}}function qt(e,t){t.$disableHighlightStyle(),Xt(t.table,t=>{t.highlighted=!0,nn(e,t)})}const Vt=(e,t,n,o,r)=>{const l=\"forward\"===r;switch(r){case\"backward\":case\"forward\":return n!==(l?e.table.columns-1:0)?tn(t.getCellNodeFromCordsOrThrow(n+(l?1:-1),o,e.table),l):o!==(l?e.table.rows-1:0)?tn(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?tn(t.getCellNodeFromCordsOrThrow(n,o-1,e.table),!1):t.selectPrevious(),!0;case\"down\":return o!==e.table.rows-1?tn(t.getCellNodeFromCordsOrThrow(n,o+1,e.table),!0):t.selectNext(),!0;default:return!1}};function jt(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 Gt([e,t]){return[\"minColumn\"===e?\"maxColumn\":\"minColumn\",\"minRow\"===t?\"maxRow\":\"minRow\"]}function Qt(e,t,[n,o]){const r=t[o],l=e[r];void 0===l&&We(250,o,String(r));const s=t[n],i=l[s];return void 0===i&&We(250,n,String(s)),i}function Zt(e,t,n,o,r){const l=bt(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=jt(e,t);return null===n&&We(249,t.cell.getKey()),n}(l,n),[d,f]=Gt(h);let g=l[d],p=l[f];\"forward\"===r?g+=\"maxColumn\"===d?1:c:\"backward\"===r?g-=\"minColumn\"===d?1:u:\"down\"===r?p+=\"maxRow\"===f?1:i:\"up\"===r&&(p-=\"minRow\"===f?1:a);const m=t[p];if(void 0===m)return!1;const C=m[g];if(void 0===C)return!1;const[_,S]=function(e,t,n){const o=bt(e,t,n),r=jt(o,t);if(r)return[Qt(e,o,r),Qt(e,o,Gt(r))];const l=jt(o,n);if(l)return[Qt(e,o,Gt(l)),Qt(e,o,l)];const s=[\"minColumn\",\"minRow\"];return[Qt(e,o,s),Qt(e,o,Gt(s))]}(t,n,C),w=dn(e,_.cell),b=dn(e,S.cell);return e.$setAnchorCellForSelection(w),e.$setFocusCellForSelection(b,!0),!0}function en(e,t){if(b(e)||Rt(e)){const n=t.isParentOf(e.anchor.getNode()),o=t.isParentOf(e.focus.getNode());return n&&o}return!1}function tn(e,t){t?e.selectStart():e.selectEnd()}function nn(t,n){const o=n.elem,r=t._config.theme;Me(ee(o))||We(131),e(o,r.tableCellSelected)}function on(e,t){const n=t.elem;Me(ee(n))||We(131);const r=e._config.theme;o(n,r.tableCellSelected)}function rn(e){const t=n(e,Me);return Me(t)?t:null}function ln(e){const t=n(e,yn);return yn(t)?t:null}function sn(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(!Me(u))return!1;const h=u,d=function(e){for(const t of se(e).iterNodeCarets(\"root\")){const{origin:n}=t;if(Me(n)){if(he(t))return de(n,e.direction)}else if(!Be(n))break}return null}(ce(h,a.direction)),f=n(h,yn);if(!f||!f.is(s))return!1;const g=e.getElementByKey(h.getKey()),p=It(g);if(!g||!p)return!1;const m=Sn(e,f);if(i.table=m,d)if(\"extend\"===r){const t=It(e.getElementByKey(d.origin.getKey()));if(!t)return!1;i.$setAnchorCellForSelection(p),i.$setFocusCellForSelection(t,!0)}else{const e=ue(d);ae(o.anchor,e),ae(o.focus,e)}else if(\"extend\"===r)i.$setAnchorCellForSelection(p),i.$setFocusCellForSelection(p,!0);else{const e=function(e){const t=fe(e);return he(t)?ue(t):e}(ce(f,c.direction));ae(o.anchor,e),ae(o.focus,e)}return an(t),!0}function cn(e,t,o,r,l){if((\"up\"===o||\"down\"===o)&&function(e){const t=e.getRootElement();if(!t)return!1;return t.hasAttribute(\"aria-controls\")&&\"typeahead-menu\"===t.getAttribute(\"aria-controls\")}(e))return!1;const s=w();if(!en(s,r)){if(b(s)){if(\"backward\"===o){if(s.focus.offset>0)return!1;const e=function(e){for(let t=e,n=e;null!==n;t=n,n=n.getParent())if(x(n)){if(n!==t&&n.getFirstChild()!==t)return null;if(!n.isInline())return n}return null}(s.focus.getNode());if(!e)return!1;const n=e.getPreviousSibling();return!!yn(n)&&(an(t),t.shiftKey?s.focus.set(n.getParentOrThrow().getKey(),n.getIndexWithinParent(),\"element\"):n.selectEnd(),!0)}if(t.shiftKey&&(\"up\"===o||\"down\"===o)){const e=s.focus.getNode();if(!s.isCollapsed()&&(\"up\"===o&&!s.isBackward()||\"down\"===o&&s.isBackward())){let l=n(e,e=>yn(e));if(Me(l)&&(l=n(l,yn)),l!==r)return!1;if(!l)return!1;const i=\"down\"===o?l.getNextSibling():l.getPreviousSibling();if(!i)return!1;let c=0;\"up\"===o&&x(i)&&(c=i.getChildrenSize());let a=i;if(\"up\"===o&&x(i)){const e=i.getLastChild();a=e||i,c=g(a)?a.getTextContentSize():0}const u=s.clone();return u.focus.set(a.getKey(),c,g(a)?\"text\":\"element\"),K(u),an(t),!0}if(oe(e)){const e=\"up\"===o?s.getNodes()[s.getNodes().length-1]:s.getNodes()[0];if(e){if(null!==zt(r,e)){const e=r.getFirstDescendant(),t=r.getLastDescendant();if(!e||!t)return!1;const[n]=wt(e),[o]=wt(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(Me(r)&&(r=n(r,yn)),!r)return!1;const i=\"down\"===o?r.getNextSibling():r.getPreviousSibling();if(yn(i)&&l.tableNodeKey===i.getKey()){const e=i.getFirstDescendant(),n=i.getLastDescendant();if(!e||!n)return!1;const[r]=wt(e),[l]=wt(n),c=s.clone();return c.focus.set((\"up\"===o?r:l).getKey(),\"up\"===o?0:l.getChildrenSize(),\"element\"),an(t),K(c),!0}}}}return\"down\"===o&&mn(e)&&l.setShouldCheckSelection(),!1}if(b(s)){if(\"backward\"===o||\"forward\"===o){return sn(e,t,s,t.shiftKey?\"extend\":\"move\",\"backward\"===o,r,l)}if(s.isCollapsed()){const{anchor:i,focus:c}=s,a=n(i.getNode(),Me),u=n(c.getNode(),Me);if(!Me(a)||!a.is(u))return!1;const h=ln(a);if(h!==r&&null!=h){const n=$t(h,e.getElementByKey(h.getKey()));if(null!=n)return l.table=Jt(h,n),cn(e,t,o,h,l)}const d=e.getElementByKey(a.__key),f=e.getElementByKey(i.key);if(null==f||null==d)return!1;let g;if(\"element\"===i.type)g=f.getBoundingClientRect();else{const t=k(Wt(e));if(null===t||0===t.rangeCount)return!1;g=t.getRangeAt(0).getBoundingClientRect()}const p=\"up\"===o?a.getFirstChild():a.getLastChild();if(null==p)return!1;const m=e.getElementByKey(p.__key);if(null==m)return!1;const C=m.getBoundingClientRect();if(\"up\"===o?C.top>g.top-g.height:g.bottom+g.height>C.bottom){an(t);const e=r.getCordsFromCellNode(a,l.table);if(!t.shiftKey)return Vt(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(Rt(s)){const{anchor:i,focus:c}=s,a=n(i.getNode(),Me),u=n(c.getNode(),Me),[h]=s.getNodes();yn(h)||We(251);const d=$t(h,e.getElementByKey(h.getKey()));if(!Me(a)||!Me(u)||!yn(h)||null==d)return!1;l.$updateTableTableSelection(s);const f=Jt(h,d),g=r.getCordsFromCellNode(a,f),p=r.getDOMCellFromCordsOrThrow(g.x,g.y,f);if(l.$setAnchorCellForSelection(p),an(t),t.shiftKey){const[e,t,n]=_t(r,a,u);return Zt(l,e,t,n,o)}return u.selectEnd(),!0}return!1}function an(e){e.preventDefault(),e.stopImmediatePropagation(),e.stopPropagation()}function un(e,t,n){const o=m();\"first\"===e?t.insertBefore(o):t.insertAfter(o),o.append(...n||[]),o.selectEnd()}function hn(e,t,o){const r=o.getParent();if(!r)return;const l=k(Wt(e));if(!l)return;const s=l.anchorNode,i=e.getElementByKey(r.getKey()),c=$t(o,e.getElementByKey(o.getKey()));if(!s||!i||!c||!i.contains(s)||c.contains(s))return;const a=n(t.anchor.getNode(),e=>Me(e));if(!a)return;const u=n(a,e=>yn(e));if(!yn(u)||!u.is(o))return;const[h,d]=_t(o,a,a),f=h[0][0],g=h[h.length-1][h[0].length-1],{startRow:p,startColumn:m}=d,C=p===f.startRow&&m===f.startColumn,_=p===g.startRow&&m===g.startColumn;return C?\"first\":_?\"last\":void 0}function dn(e,t){const{tableNode:n}=e.$lookup(),o=n.getCordsFromCellNode(t,e.table);return n.getDOMCellFromCordsOrThrow(o.x,o.y,e.table)}function fn(e,t,n){return zt(e,ee(t,n))}function gn(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 pn=new WeakSet;function mn(e=A()){return pn.has(e)}function Cn(e,t){t?pn.add(e):pn.delete(e)}class _n 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 _n(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:wn,priority:1})}}static importJSON(e){return bn().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=Mt(e)?e:e.querySelector(\"table\");return Mt(t)||We(229),super.getDOMSlot(e).withElement(t).withAfter(t.querySelector(\"colgroup\"))}createDOM(t,n){const o=document.createElement(\"table\");this.__style&&(o.style.cssText=this.__style);const r=document.createElement(\"colgroup\");if(o.appendChild(r),ge(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.cssText=\"overflow-x: auto;\",n.appendChild(o),this.updateTableWrapper(null,n,o,t),n}return o}updateTableWrapper(t,n,r,l){this.__frozenColumnCount!==(t?t.__frozenColumnCount:0)&&function(t,n,r,l){l>0?(e(t,r.theme.tableFrozenColumn),n.setAttribute(\"data-lexical-frozen-column\",\"true\")):(o(t,r.theme.tableFrozenColumn),n.removeAttribute(\"data-lexical-frozen-column\"))}(n,r,l,this.__frozenColumnCount),this.__frozenRowCount!==(t?t.__frozenRowCount:0)&&function(t,n,r,l){l>0?(e(t,r.theme.tableFrozenRow),n.setAttribute(\"data-lexical-frozen-row\",\"true\")):(o(t,r.theme.tableFrozenRow),n.removeAttribute(\"data-lexical-frozen-row\"))}(n,r,l,this.__frozenRowCount)}updateTableElement(t,n,r){this.__style!==(t?t.__style:\"\")&&(n.style.cssText=this.__style),this.__rowStriping!==(!!t&&t.__rowStriping)&&function(t,n,r){r?(e(t,n.theme.tableRowStriping),t.setAttribute(\"data-lexical-row-striping\",\"true\")):(o(t,n.theme.tableRowStriping),t.removeAttribute(\"data-lexical-row-striping\"))}(n,r,this.__rowStriping),function(e,t,n,o){const r=e.querySelector(\"colgroup\");if(!r)return;const l=[];for(let e=0;e<n;e++){const t=document.createElement(\"col\"),n=o&&o[e];n&&(t.style.width=`${n}px`),l.push(t)}r.replaceChildren(...l)}(n,0,this.getColumnCount(),this.getColWidths()),gn(n,r,this.getFormatType())}updateDOM(e,t,n){const o=this.getDOMSlot(t).element;return t===o===mn()||(l(r=t)&&\"DIV\"===r.nodeName&&this.updateTableWrapper(e,t,o,n),this.updateTableElement(e,o,n),!1);var r}exportDOM(e){const t=super.exportDOM(e),{element:n}=t;return{after:n=>{if(t.after&&(n=t.after(n)),!Mt(n)&&l(n)&&(n=n.querySelector(\"table\")),!Mt(n))return null;gn(n,e._config,this.getFormatType());const[o]=St(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:!Mt(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=fn(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=ee(o.elem);return Me(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=>{Me(e)&&(t+=e.getColSpan())}),t}}function Sn(e,t){const n=e.getElementByKey(t.getKey());return null===n&&We(230),Jt(t,n)}function wn(e){const n=bn();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(!Fe.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,Be),node:n}}function bn(){return C(new _n)}function yn(e){return e instanceof _n}function Nn(e){Be(e.getParent())?e.isEmpty()&&e.append(m()):e.remove()}function vn(e){yn(e.getParent())?u(e,Me):e.remove()}function xn(e){u(e,Be);const[t]=St(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;Be(r)||We(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=Ee();e.append(m()),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 Tn(e){if(e.detail<3||!ne(e.target))return!1;const t=ee(e.target);if(null===t)return!1;const o=n(t,e=>x(e)&&!e.isInline());if(null===o)return!1;return!!Me(o.getParent())&&(o.select(0),!0)}function Rn(){const e=w();if(!b(e))return!1;const t=ln(e.anchor.getNode());if(null===t)return!1;const n=we();if(!n.is(t.getParent())||1!==n.getChildrenSize())return!1;const[o]=St(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=At(t,r.cell,s.cell);return K(i),!0}function Fn(e){return e.registerNodeTransform(Ke,e=>{if(e.getColSpan()>1||e.getRowSpan()>1){const[,,t]=wt(e),[n]=_t(t,e,e),o=n.length,r=n[0].length;let l=t.getFirstChild();Be(l)||We(175);const i=[];for(let e=0;e<o;e++){0!==e&&(l=l.getNextSibling(),Be(l)||We(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){Me(c)||We(176);const e=Ee(c.__headerState);null!==t?t.insertAfter(e):s(l,e)}}}for(const e of i)e.setColSpan(1),e.setRowSpan(1)}})}function An(e,t=!0){const n=new Map,o=(o,r,l)=>{const s=$t(o,l),i=Pt(o,s,e,t);n.set(r,[i,s])},r=e.registerMutationListener(_n,t=>{e.getEditorState().read(()=>{for(const[e,r]of t){const t=n.get(e);if(\"created\"===r||\"updated\"===r){const{tableNode:r,tableElement:l}=Ot(e);void 0===t?o(r,e,l):l!==t[1]&&(t[0].removeListeners(),n.delete(e),o(r,e,l))}else\"destroyed\"===r&&void 0!==t&&(t[0].removeListeners(),n.delete(e))}},{editor:e})},{skipInitialization:!1});return()=>{r();for(const[,[e]]of n)e.removeListeners()}}function Kn(e,t){e.hasNodes([_n])||We(255);const{hasNestedTables:o=Ne(!1),hasFitNestedTables:r=Ne(!1)}=t??{};return i(e.registerCommand($e,e=>function({rows:e,columns:t,includeHeaders:n},o){const r=w()||Z();if(!r||!b(r))return!1;if(!o&&ln(r.anchor.getNode()))return!1;const l=Ue(Number(e),Number(t),n);c(l);const s=l.getFirstDescendant();return g(s)&&s.select(),!0}(e,o.peek()),pe),e.registerCommand(me,(t,l)=>e===l&&function(e,t,o){const{nodes:r,selection:l}=e;if(!r.some(e=>yn(e)||a(e).some(e=>yn(e.node))))return!1;const s=Rt(l),i=b(l);if(!(i&&null!==n(l.anchor.getNode(),e=>Me(e))&&null!==n(l.focus.getNode(),e=>Me(e))||s))return!1;if(1===r.length&&yn(r[0]))return function(e,t){const o=t.getStartEndPoints(),r=Rt(t);if(null===o)return!1;const[l,s]=o,[i,c,a]=wt(l),u=n(s.getNode(),e=>Me(e));if(!(Me(i)&&Me(u)&&Be(c)&&yn(a)))return!1;const[h,d,f]=_t(a,i,u),[p]=St(e,null,null),C=h.length,_=C>0?h[0].length:0;let S=d.startRow,w=d.startColumn,b=p.length,y=b>0?p[0].length:0;if(r){const e=bt(h,d,f),t=e.maxRow-e.minRow+1,n=e.maxColumn-e.minColumn+1;S=e.minRow,w=e.minColumn,b=Math.min(b,t),y=Math.min(y,n)}let N=!1;const v=Math.min(C,S+b)-1,x=Math.min(_,w+y)-1,T=new Set;for(let e=S;e<=v;e++)for(let t=w;t<=x;t++){const n=h[e][t];T.has(n.cell.getKey())||(1===n.cell.__rowSpan&&1===n.cell.__colSpan||(Ct(n.cell),T.add(n.cell.getKey()),N=!0))}let[R]=St(a.getWritable(),null,null);const F=b-C+S;for(let e=0;e<F;e++){nt(R[C-1][0].cell)}const A=y-_+w;for(let e=0;e<A;e++){st(R[0][_-1].cell,!0,!1)}[R]=St(a.getWritable(),null,null);for(let e=S;e<S+b;e++)for(let t=w;t<w+y;t++){const n=e-S,o=t-w,r=p[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+b)-1,r=Math.min(t+l.__colSpan,w+y)-1;for(let l=e;l<=o;l++)for(let e=t;e<=r;e++){const t=R[l][e];n.push(t.cell)}gt(n),N=!0}const{cell:s}=R[e][t],i=l.getBackgroundColor();null!=i&&s.setBackgroundColor(i);const c=s.getChildren();l.getChildren().forEach(e=>{if(g(e)){m().append(e),s.append(e)}else s.append(e)}),c.forEach(e=>e.remove())}if(r&&N){const[e]=St(a.getWritable(),null,null);e[d.startRow][d.startColumn].cell.selectEnd()}return!0}(r[0],l);if(i&&t.peek())return function(e,t,o){const r=Rt(t)&&!t.focus.getNode().is(t.anchor.getNode()),l=b(t)&&Me(t.anchor.getNode())&&!t.anchor.getNode().is(t.focus.getNode());if(r||l)return!0;if(!o)return!1;const s=t.focus.getNode(),i=n(s,Me);if(!i)return!1;const c=On(i);if(void 0===c)return!1;const a=function(e){const t=A().getElementByKey(e.getKey());if(null===t)return 0;const n=window.getComputedStyle(t),o=n.getPropertyValue(\"padding-left\")||\"0px\",r=n.getPropertyValue(\"padding-right\")||\"0px\",l=n.getPropertyValue(\"border-left-width\")||\"0px\",s=n.getPropertyValue(\"padding-right-width\")||\"0px\";if(!(Fe.test(o)&&Fe.test(r)&&Fe.test(l)&&Fe.test(s)))return 0;const i=parseFloat(o),c=parseFloat(r),a=parseFloat(l),u=parseFloat(s);return i+c+a+u}(i),u=e.filter(yn);for(const e of u)kn(e,c,a);return!1}(r,l,o.peek());return!0}(t,o,r),pe),e.registerCommand(Ce,Rn,_e),e.registerCommand(Se,Tn,pe),e.registerNodeTransform(_n,xn),e.registerNodeTransform(ze,vn),e.registerNodeTransform(Ke,Nn))}function On(e){const t=Xe(e),n=vt(e),o=t.getColWidths();if(!n||!o)return;const{columnIndex:r,colSpan:l}=n;let s=0;for(let e=r;e<r+l;e++)s+=o[e];return s}function kn(e,t,n){const o=e.getColWidths();if(!o)return e;const r=t-n,l=o.reduce((e,t)=>e+t,0);if(l<=r)return e;const s=r/l;e.setColWidths(o.map(e=>e*s));const i=e.getChildren().filter(Be);for(const e of i){const t=e.getChildren().filter(Me);for(const e of t){const t=On(e);if(void 0!==t)for(const o of e.getChildren().filter(yn))kn(o,t,n)}}}const En=be({build:(e,t,n)=>xe(t),config:ye({hasCellBackgroundColor:!0,hasCellMerge:!0,hasFitNestedTables:!1,hasHorizontalScroll:!0,hasNestedTables:!1,hasTabHandler:!0}),name:\"@lexical/table/Table\",nodes:()=>[_n,ze,Ke],register(e,t,n){const o=n.getOutput();return i(ve(()=>{const t=o.hasHorizontalScroll.value;mn(e)!==t&&(Cn(e,t),e.registerNodeTransform(_n,()=>{})())}),Kn(e,o),ve(()=>An(e,o.hasTabHandler.value)),ve(()=>o.hasCellMerge.value?void 0:Fn(e)),ve(()=>o.hasCellBackgroundColor.value?void 0:e.registerNodeTransform(Ke,e=>{null!==e.getBackgroundColor()&&e.setBackgroundColor(null)})))}});export{_t as $computeTableMap,St as $computeTableMapSkipCellCheck,Ee as $createTableCellNode,bn as $createTableNode,Ue as $createTableNodeWithDimensions,Le as $createTableRowNode,Ft as $createTableSelection,At as $createTableSelectionFrom,it as $deleteTableColumn,ut as $deleteTableColumnAtSelection,ht as $deleteTableColumn__EXPERIMENTAL,ct as $deleteTableRowAtSelection,at as $deleteTableRow__EXPERIMENTAL,rn as $findCellNode,ln as $findTableNode,Sn as $getElementForTableNode,wt as $getNodeTriplet,Ot as $getTableAndElementByKey,Je as $getTableCellNodeFromLexicalNode,vt as $getTableCellNodeRect,Ve as $getTableColumnIndexFromTableCellNode,Xe as $getTableNodeFromLexicalNodeOrThrow,qe as $getTableRowIndexFromTableCellNode,Ye as $getTableRowNodeFromTableCellNodeOrThrow,ot as $insertTableColumn,rt as $insertTableColumnAtSelection,lt as $insertTableColumn__EXPERIMENTAL,Qe as $insertTableRow,et as $insertTableRowAtSelection,tt as $insertTableRow__EXPERIMENTAL,mn as $isScrollableTablesActive,yt as $isSimpleTable,Me as $isTableCellNode,yn as $isTableNode,Be as $isTableRowNode,Rt as $isTableSelection,gt as $mergeCells,Nt as $moveTableColumn,Ge as $removeTableRowAtIndex,mt as $unmergeCell,$e as INSERT_TABLE_COMMAND,Ae as TableCellHeaderStates,Ke as TableCellNode,En as TableExtension,_n as TableNode,kt as TableObserver,ze as TableRowNode,Pt as applyTableHandlers,It as getDOMCellFromTarget,$t as getTableElement,Dt as getTableObserverFromTableElement,Fn as registerTableCellUnmergeTransform,Kn as registerTablePlugin,An as registerTableSelectionObserver,Cn as setScrollableTablesActive};\n","var components = {\"core\":{\"meta\":{\"path\":\"components/prism-core.js\",\"option\":\"mandatory\"},\"core\":\"Core\"},\"themes\":{\"meta\":{\"path\":\"themes/{id}.css\",\"link\":\"index.html?theme={id}\",\"exclusive\":true},\"prism\":{\"title\":\"Default\",\"option\":\"default\"},\"prism-dark\":\"Dark\",\"prism-funky\":\"Funky\",\"prism-okaidia\":{\"title\":\"Okaidia\",\"owner\":\"ocodia\"},\"prism-twilight\":{\"title\":\"Twilight\",\"owner\":\"remybach\"},\"prism-coy\":{\"title\":\"Coy\",\"owner\":\"tshedor\"},\"prism-solarizedlight\":{\"title\":\"Solarized Light\",\"owner\":\"hectormatos2011 \"},\"prism-tomorrow\":{\"title\":\"Tomorrow Night\",\"owner\":\"Rosey\"}},\"languages\":{\"meta\":{\"path\":\"components/prism-{id}\",\"noCSS\":true,\"examplesPath\":\"examples/prism-{id}\",\"addCheckAll\":true},\"markup\":{\"title\":\"Markup\",\"alias\":[\"html\",\"xml\",\"svg\",\"mathml\",\"ssml\",\"atom\",\"rss\"],\"aliasTitles\":{\"html\":\"HTML\",\"xml\":\"XML\",\"svg\":\"SVG\",\"mathml\":\"MathML\",\"ssml\":\"SSML\",\"atom\":\"Atom\",\"rss\":\"RSS\"},\"option\":\"default\"},\"css\":{\"title\":\"CSS\",\"option\":\"default\",\"modify\":\"markup\"},\"clike\":{\"title\":\"C-like\",\"option\":\"default\"},\"javascript\":{\"title\":\"JavaScript\",\"require\":\"clike\",\"modify\":\"markup\",\"optional\":\"regex\",\"alias\":\"js\",\"option\":\"default\"},\"abap\":{\"title\":\"ABAP\",\"owner\":\"dellagustin\"},\"abnf\":{\"title\":\"ABNF\",\"owner\":\"RunDevelopment\"},\"actionscript\":{\"title\":\"ActionScript\",\"require\":\"javascript\",\"modify\":\"markup\",\"owner\":\"Golmote\"},\"ada\":{\"title\":\"Ada\",\"owner\":\"Lucretia\"},\"agda\":{\"title\":\"Agda\",\"owner\":\"xy-ren\"},\"al\":{\"title\":\"AL\",\"owner\":\"RunDevelopment\"},\"antlr4\":{\"title\":\"ANTLR4\",\"alias\":\"g4\",\"owner\":\"RunDevelopment\"},\"apacheconf\":{\"title\":\"Apache Configuration\",\"owner\":\"GuiTeK\"},\"apex\":{\"title\":\"Apex\",\"require\":[\"clike\",\"sql\"],\"owner\":\"RunDevelopment\"},\"apl\":{\"title\":\"APL\",\"owner\":\"ngn\"},\"applescript\":{\"title\":\"AppleScript\",\"owner\":\"Golmote\"},\"aql\":{\"title\":\"AQL\",\"owner\":\"RunDevelopment\"},\"arduino\":{\"title\":\"Arduino\",\"require\":\"cpp\",\"alias\":\"ino\",\"owner\":\"dkern\"},\"arff\":{\"title\":\"ARFF\",\"owner\":\"Golmote\"},\"armasm\":{\"title\":\"ARM Assembly\",\"alias\":\"arm-asm\",\"owner\":\"RunDevelopment\"},\"arturo\":{\"title\":\"Arturo\",\"alias\":\"art\",\"optional\":[\"bash\",\"css\",\"javascript\",\"markup\",\"markdown\",\"sql\"],\"owner\":\"drkameleon\"},\"asciidoc\":{\"alias\":\"adoc\",\"title\":\"AsciiDoc\",\"owner\":\"Golmote\"},\"aspnet\":{\"title\":\"ASP.NET (C#)\",\"require\":[\"markup\",\"csharp\"],\"owner\":\"nauzilus\"},\"asm6502\":{\"title\":\"6502 Assembly\",\"owner\":\"kzurawel\"},\"asmatmel\":{\"title\":\"Atmel AVR Assembly\",\"owner\":\"cerkit\"},\"autohotkey\":{\"title\":\"AutoHotkey\",\"owner\":\"aviaryan\"},\"autoit\":{\"title\":\"AutoIt\",\"owner\":\"Golmote\"},\"avisynth\":{\"title\":\"AviSynth\",\"alias\":\"avs\",\"owner\":\"Zinfidel\"},\"avro-idl\":{\"title\":\"Avro IDL\",\"alias\":\"avdl\",\"owner\":\"RunDevelopment\"},\"awk\":{\"title\":\"AWK\",\"alias\":\"gawk\",\"aliasTitles\":{\"gawk\":\"GAWK\"},\"owner\":\"RunDevelopment\"},\"bash\":{\"title\":\"Bash\",\"alias\":[\"sh\",\"shell\"],\"aliasTitles\":{\"sh\":\"Shell\",\"shell\":\"Shell\"},\"owner\":\"zeitgeist87\"},\"basic\":{\"title\":\"BASIC\",\"owner\":\"Golmote\"},\"batch\":{\"title\":\"Batch\",\"owner\":\"Golmote\"},\"bbcode\":{\"title\":\"BBcode\",\"alias\":\"shortcode\",\"aliasTitles\":{\"shortcode\":\"Shortcode\"},\"owner\":\"RunDevelopment\"},\"bbj\":{\"title\":\"BBj\",\"owner\":\"hyyan\"},\"bicep\":{\"title\":\"Bicep\",\"owner\":\"johnnyreilly\"},\"birb\":{\"title\":\"Birb\",\"require\":\"clike\",\"owner\":\"Calamity210\"},\"bison\":{\"title\":\"Bison\",\"require\":\"c\",\"owner\":\"Golmote\"},\"bnf\":{\"title\":\"BNF\",\"alias\":\"rbnf\",\"aliasTitles\":{\"rbnf\":\"RBNF\"},\"owner\":\"RunDevelopment\"},\"bqn\":{\"title\":\"BQN\",\"owner\":\"yewscion\"},\"brainfuck\":{\"title\":\"Brainfuck\",\"owner\":\"Golmote\"},\"brightscript\":{\"title\":\"BrightScript\",\"owner\":\"RunDevelopment\"},\"bro\":{\"title\":\"Bro\",\"owner\":\"wayward710\"},\"bsl\":{\"title\":\"BSL (1C:Enterprise)\",\"alias\":\"oscript\",\"aliasTitles\":{\"oscript\":\"OneScript\"},\"owner\":\"Diversus23\"},\"c\":{\"title\":\"C\",\"require\":\"clike\",\"owner\":\"zeitgeist87\"},\"csharp\":{\"title\":\"C#\",\"require\":\"clike\",\"alias\":[\"cs\",\"dotnet\"],\"owner\":\"mvalipour\"},\"cpp\":{\"title\":\"C++\",\"require\":\"c\",\"owner\":\"zeitgeist87\"},\"cfscript\":{\"title\":\"CFScript\",\"require\":\"clike\",\"alias\":\"cfc\",\"owner\":\"mjclemente\"},\"chaiscript\":{\"title\":\"ChaiScript\",\"require\":[\"clike\",\"cpp\"],\"owner\":\"RunDevelopment\"},\"cil\":{\"title\":\"CIL\",\"owner\":\"sbrl\"},\"cilkc\":{\"title\":\"Cilk/C\",\"require\":\"c\",\"alias\":\"cilk-c\",\"owner\":\"OpenCilk\"},\"cilkcpp\":{\"title\":\"Cilk/C++\",\"require\":\"cpp\",\"alias\":[\"cilk-cpp\",\"cilk\"],\"owner\":\"OpenCilk\"},\"clojure\":{\"title\":\"Clojure\",\"owner\":\"troglotit\"},\"cmake\":{\"title\":\"CMake\",\"owner\":\"mjrogozinski\"},\"cobol\":{\"title\":\"COBOL\",\"owner\":\"RunDevelopment\"},\"coffeescript\":{\"title\":\"CoffeeScript\",\"require\":\"javascript\",\"alias\":\"coffee\",\"owner\":\"R-osey\"},\"concurnas\":{\"title\":\"Concurnas\",\"alias\":\"conc\",\"owner\":\"jasontatton\"},\"csp\":{\"title\":\"Content-Security-Policy\",\"owner\":\"ScottHelme\"},\"cooklang\":{\"title\":\"Cooklang\",\"owner\":\"ahue\"},\"coq\":{\"title\":\"Coq\",\"owner\":\"RunDevelopment\"},\"crystal\":{\"title\":\"Crystal\",\"require\":\"ruby\",\"owner\":\"MakeNowJust\"},\"css-extras\":{\"title\":\"CSS Extras\",\"require\":\"css\",\"modify\":\"css\",\"owner\":\"milesj\"},\"csv\":{\"title\":\"CSV\",\"owner\":\"RunDevelopment\"},\"cue\":{\"title\":\"CUE\",\"owner\":\"RunDevelopment\"},\"cypher\":{\"title\":\"Cypher\",\"owner\":\"RunDevelopment\"},\"d\":{\"title\":\"D\",\"require\":\"clike\",\"owner\":\"Golmote\"},\"dart\":{\"title\":\"Dart\",\"require\":\"clike\",\"owner\":\"Golmote\"},\"dataweave\":{\"title\":\"DataWeave\",\"owner\":\"machaval\"},\"dax\":{\"title\":\"DAX\",\"owner\":\"peterbud\"},\"dhall\":{\"title\":\"Dhall\",\"owner\":\"RunDevelopment\"},\"diff\":{\"title\":\"Diff\",\"owner\":\"uranusjr\"},\"django\":{\"title\":\"Django/Jinja2\",\"require\":\"markup-templating\",\"alias\":\"jinja2\",\"owner\":\"romanvm\"},\"dns-zone-file\":{\"title\":\"DNS zone file\",\"owner\":\"RunDevelopment\",\"alias\":\"dns-zone\"},\"docker\":{\"title\":\"Docker\",\"alias\":\"dockerfile\",\"owner\":\"JustinBeckwith\"},\"dot\":{\"title\":\"DOT (Graphviz)\",\"alias\":\"gv\",\"optional\":\"markup\",\"owner\":\"RunDevelopment\"},\"ebnf\":{\"title\":\"EBNF\",\"owner\":\"RunDevelopment\"},\"editorconfig\":{\"title\":\"EditorConfig\",\"owner\":\"osipxd\"},\"eiffel\":{\"title\":\"Eiffel\",\"owner\":\"Conaclos\"},\"ejs\":{\"title\":\"EJS\",\"require\":[\"javascript\",\"markup-templating\"],\"owner\":\"RunDevelopment\",\"alias\":\"eta\",\"aliasTitles\":{\"eta\":\"Eta\"}},\"elixir\":{\"title\":\"Elixir\",\"owner\":\"Golmote\"},\"elm\":{\"title\":\"Elm\",\"owner\":\"zwilias\"},\"etlua\":{\"title\":\"Embedded Lua templating\",\"require\":[\"lua\",\"markup-templating\"],\"owner\":\"RunDevelopment\"},\"erb\":{\"title\":\"ERB\",\"require\":[\"ruby\",\"markup-templating\"],\"owner\":\"Golmote\"},\"erlang\":{\"title\":\"Erlang\",\"owner\":\"Golmote\"},\"excel-formula\":{\"title\":\"Excel Formula\",\"alias\":[\"xlsx\",\"xls\"],\"owner\":\"RunDevelopment\"},\"fsharp\":{\"title\":\"F#\",\"require\":\"clike\",\"owner\":\"simonreynolds7\"},\"factor\":{\"title\":\"Factor\",\"owner\":\"catb0t\"},\"false\":{\"title\":\"False\",\"owner\":\"edukisto\"},\"firestore-security-rules\":{\"title\":\"Firestore security rules\",\"require\":\"clike\",\"owner\":\"RunDevelopment\"},\"flow\":{\"title\":\"Flow\",\"require\":\"javascript\",\"owner\":\"Golmote\"},\"fortran\":{\"title\":\"Fortran\",\"owner\":\"Golmote\"},\"ftl\":{\"title\":\"FreeMarker Template Language\",\"require\":\"markup-templating\",\"owner\":\"RunDevelopment\"},\"gml\":{\"title\":\"GameMaker Language\",\"alias\":\"gamemakerlanguage\",\"require\":\"clike\",\"owner\":\"LiarOnce\"},\"gap\":{\"title\":\"GAP (CAS)\",\"owner\":\"RunDevelopment\"},\"gcode\":{\"title\":\"G-code\",\"owner\":\"RunDevelopment\"},\"gdscript\":{\"title\":\"GDScript\",\"owner\":\"RunDevelopment\"},\"gedcom\":{\"title\":\"GEDCOM\",\"owner\":\"Golmote\"},\"gettext\":{\"title\":\"gettext\",\"alias\":\"po\",\"owner\":\"RunDevelopment\"},\"gherkin\":{\"title\":\"Gherkin\",\"owner\":\"hason\"},\"git\":{\"title\":\"Git\",\"owner\":\"lgiraudel\"},\"glsl\":{\"title\":\"GLSL\",\"require\":\"c\",\"owner\":\"Golmote\"},\"gn\":{\"title\":\"GN\",\"alias\":\"gni\",\"owner\":\"RunDevelopment\"},\"linker-script\":{\"title\":\"GNU Linker Script\",\"alias\":\"ld\",\"owner\":\"RunDevelopment\"},\"go\":{\"title\":\"Go\",\"require\":\"clike\",\"owner\":\"arnehormann\"},\"go-module\":{\"title\":\"Go module\",\"alias\":\"go-mod\",\"owner\":\"RunDevelopment\"},\"gradle\":{\"title\":\"Gradle\",\"require\":\"clike\",\"owner\":\"zeabdelkhalek-badido18\"},\"graphql\":{\"title\":\"GraphQL\",\"optional\":\"markdown\",\"owner\":\"Golmote\"},\"groovy\":{\"title\":\"Groovy\",\"require\":\"clike\",\"owner\":\"robfletcher\"},\"haml\":{\"title\":\"Haml\",\"require\":\"ruby\",\"optional\":[\"css\",\"css-extras\",\"coffeescript\",\"erb\",\"javascript\",\"less\",\"markdown\",\"scss\",\"textile\"],\"owner\":\"Golmote\"},\"handlebars\":{\"title\":\"Handlebars\",\"require\":\"markup-templating\",\"alias\":[\"hbs\",\"mustache\"],\"aliasTitles\":{\"mustache\":\"Mustache\"},\"owner\":\"Golmote\"},\"haskell\":{\"title\":\"Haskell\",\"alias\":\"hs\",\"owner\":\"bholst\"},\"haxe\":{\"title\":\"Haxe\",\"require\":\"clike\",\"optional\":\"regex\",\"owner\":\"Golmote\"},\"hcl\":{\"title\":\"HCL\",\"owner\":\"outsideris\"},\"hlsl\":{\"title\":\"HLSL\",\"require\":\"c\",\"owner\":\"RunDevelopment\"},\"hoon\":{\"title\":\"Hoon\",\"owner\":\"matildepark\"},\"http\":{\"title\":\"HTTP\",\"optional\":[\"csp\",\"css\",\"hpkp\",\"hsts\",\"javascript\",\"json\",\"markup\",\"uri\"],\"owner\":\"danielgtaylor\"},\"hpkp\":{\"title\":\"HTTP Public-Key-Pins\",\"owner\":\"ScottHelme\"},\"hsts\":{\"title\":\"HTTP Strict-Transport-Security\",\"owner\":\"ScottHelme\"},\"ichigojam\":{\"title\":\"IchigoJam\",\"owner\":\"BlueCocoa\"},\"icon\":{\"title\":\"Icon\",\"owner\":\"Golmote\"},\"icu-message-format\":{\"title\":\"ICU Message Format\",\"owner\":\"RunDevelopment\"},\"idris\":{\"title\":\"Idris\",\"alias\":\"idr\",\"owner\":\"KeenS\",\"require\":\"haskell\"},\"ignore\":{\"title\":\".ignore\",\"owner\":\"osipxd\",\"alias\":[\"gitignore\",\"hgignore\",\"npmignore\"],\"aliasTitles\":{\"gitignore\":\".gitignore\",\"hgignore\":\".hgignore\",\"npmignore\":\".npmignore\"}},\"inform7\":{\"title\":\"Inform 7\",\"owner\":\"Golmote\"},\"ini\":{\"title\":\"Ini\",\"owner\":\"aviaryan\"},\"io\":{\"title\":\"Io\",\"owner\":\"AlesTsurko\"},\"j\":{\"title\":\"J\",\"owner\":\"Golmote\"},\"java\":{\"title\":\"Java\",\"require\":\"clike\",\"owner\":\"sherblot\"},\"javadoc\":{\"title\":\"JavaDoc\",\"require\":[\"markup\",\"java\",\"javadoclike\"],\"modify\":\"java\",\"optional\":\"scala\",\"owner\":\"RunDevelopment\"},\"javadoclike\":{\"title\":\"JavaDoc-like\",\"modify\":[\"java\",\"javascript\",\"php\"],\"owner\":\"RunDevelopment\"},\"javastacktrace\":{\"title\":\"Java stack trace\",\"owner\":\"RunDevelopment\"},\"jexl\":{\"title\":\"Jexl\",\"owner\":\"czosel\"},\"jolie\":{\"title\":\"Jolie\",\"require\":\"clike\",\"owner\":\"thesave\"},\"jq\":{\"title\":\"JQ\",\"owner\":\"RunDevelopment\"},\"jsdoc\":{\"title\":\"JSDoc\",\"require\":[\"javascript\",\"javadoclike\",\"typescript\"],\"modify\":\"javascript\",\"optional\":[\"actionscript\",\"coffeescript\"],\"owner\":\"RunDevelopment\"},\"js-extras\":{\"title\":\"JS Extras\",\"require\":\"javascript\",\"modify\":\"javascript\",\"optional\":[\"actionscript\",\"coffeescript\",\"flow\",\"n4js\",\"typescript\"],\"owner\":\"RunDevelopment\"},\"json\":{\"title\":\"JSON\",\"alias\":\"webmanifest\",\"aliasTitles\":{\"webmanifest\":\"Web App Manifest\"},\"owner\":\"CupOfTea696\"},\"json5\":{\"title\":\"JSON5\",\"require\":\"json\",\"owner\":\"RunDevelopment\"},\"jsonp\":{\"title\":\"JSONP\",\"require\":\"json\",\"owner\":\"RunDevelopment\"},\"jsstacktrace\":{\"title\":\"JS stack trace\",\"owner\":\"sbrl\"},\"js-templates\":{\"title\":\"JS Templates\",\"require\":\"javascript\",\"modify\":\"javascript\",\"optional\":[\"css\",\"css-extras\",\"graphql\",\"markdown\",\"markup\",\"sql\"],\"owner\":\"RunDevelopment\"},\"julia\":{\"title\":\"Julia\",\"owner\":\"cdagnino\"},\"keepalived\":{\"title\":\"Keepalived Configure\",\"owner\":\"dev-itsheng\"},\"keyman\":{\"title\":\"Keyman\",\"owner\":\"mcdurdin\"},\"kotlin\":{\"title\":\"Kotlin\",\"alias\":[\"kt\",\"kts\"],\"aliasTitles\":{\"kts\":\"Kotlin Script\"},\"require\":\"clike\",\"owner\":\"Golmote\"},\"kumir\":{\"title\":\"KuMir (КуМир)\",\"alias\":\"kum\",\"owner\":\"edukisto\"},\"kusto\":{\"title\":\"Kusto\",\"owner\":\"RunDevelopment\"},\"latex\":{\"title\":\"LaTeX\",\"alias\":[\"tex\",\"context\"],\"aliasTitles\":{\"tex\":\"TeX\",\"context\":\"ConTeXt\"},\"owner\":\"japborst\"},\"latte\":{\"title\":\"Latte\",\"require\":[\"clike\",\"markup-templating\",\"php\"],\"owner\":\"nette\"},\"less\":{\"title\":\"Less\",\"require\":\"css\",\"optional\":\"css-extras\",\"owner\":\"Golmote\"},\"lilypond\":{\"title\":\"LilyPond\",\"require\":\"scheme\",\"alias\":\"ly\",\"owner\":\"RunDevelopment\"},\"liquid\":{\"title\":\"Liquid\",\"require\":\"markup-templating\",\"owner\":\"cinhtau\"},\"lisp\":{\"title\":\"Lisp\",\"alias\":[\"emacs\",\"elisp\",\"emacs-lisp\"],\"owner\":\"JuanCaicedo\"},\"livescript\":{\"title\":\"LiveScript\",\"owner\":\"Golmote\"},\"llvm\":{\"title\":\"LLVM IR\",\"owner\":\"porglezomp\"},\"log\":{\"title\":\"Log file\",\"optional\":\"javastacktrace\",\"owner\":\"RunDevelopment\"},\"lolcode\":{\"title\":\"LOLCODE\",\"owner\":\"Golmote\"},\"lua\":{\"title\":\"Lua\",\"owner\":\"Golmote\"},\"magma\":{\"title\":\"Magma (CAS)\",\"owner\":\"RunDevelopment\"},\"makefile\":{\"title\":\"Makefile\",\"owner\":\"Golmote\"},\"markdown\":{\"title\":\"Markdown\",\"require\":\"markup\",\"optional\":\"yaml\",\"alias\":\"md\",\"owner\":\"Golmote\"},\"markup-templating\":{\"title\":\"Markup templating\",\"require\":\"markup\",\"owner\":\"Golmote\"},\"mata\":{\"title\":\"Mata\",\"owner\":\"RunDevelopment\"},\"matlab\":{\"title\":\"MATLAB\",\"owner\":\"Golmote\"},\"maxscript\":{\"title\":\"MAXScript\",\"owner\":\"RunDevelopment\"},\"mel\":{\"title\":\"MEL\",\"owner\":\"Golmote\"},\"mermaid\":{\"title\":\"Mermaid\",\"owner\":\"RunDevelopment\"},\"metafont\":{\"title\":\"METAFONT\",\"owner\":\"LaeriExNihilo\"},\"mizar\":{\"title\":\"Mizar\",\"owner\":\"Golmote\"},\"mongodb\":{\"title\":\"MongoDB\",\"owner\":\"airs0urce\",\"require\":\"javascript\"},\"monkey\":{\"title\":\"Monkey\",\"owner\":\"Golmote\"},\"moonscript\":{\"title\":\"MoonScript\",\"alias\":\"moon\",\"owner\":\"RunDevelopment\"},\"n1ql\":{\"title\":\"N1QL\",\"owner\":\"TMWilds\"},\"n4js\":{\"title\":\"N4JS\",\"require\":\"javascript\",\"optional\":\"jsdoc\",\"alias\":\"n4jsd\",\"owner\":\"bsmith-n4\"},\"nand2tetris-hdl\":{\"title\":\"Nand To Tetris HDL\",\"owner\":\"stephanmax\"},\"naniscript\":{\"title\":\"Naninovel Script\",\"owner\":\"Elringus\",\"alias\":\"nani\"},\"nasm\":{\"title\":\"NASM\",\"owner\":\"rbmj\"},\"neon\":{\"title\":\"NEON\",\"owner\":\"nette\"},\"nevod\":{\"title\":\"Nevod\",\"owner\":\"nezaboodka\"},\"nginx\":{\"title\":\"nginx\",\"owner\":\"volado\"},\"nim\":{\"title\":\"Nim\",\"owner\":\"Golmote\"},\"nix\":{\"title\":\"Nix\",\"owner\":\"Golmote\"},\"nsis\":{\"title\":\"NSIS\",\"owner\":\"idleberg\"},\"objectivec\":{\"title\":\"Objective-C\",\"require\":\"c\",\"alias\":\"objc\",\"owner\":\"uranusjr\"},\"ocaml\":{\"title\":\"OCaml\",\"owner\":\"Golmote\"},\"odin\":{\"title\":\"Odin\",\"owner\":\"edukisto\"},\"opencl\":{\"title\":\"OpenCL\",\"require\":\"c\",\"modify\":[\"c\",\"cpp\"],\"owner\":\"Milania1\"},\"openqasm\":{\"title\":\"OpenQasm\",\"alias\":\"qasm\",\"owner\":\"RunDevelopment\"},\"oz\":{\"title\":\"Oz\",\"owner\":\"Golmote\"},\"parigp\":{\"title\":\"PARI/GP\",\"owner\":\"Golmote\"},\"parser\":{\"title\":\"Parser\",\"require\":\"markup\",\"owner\":\"Golmote\"},\"pascal\":{\"title\":\"Pascal\",\"alias\":\"objectpascal\",\"aliasTitles\":{\"objectpascal\":\"Object Pascal\"},\"owner\":\"Golmote\"},\"pascaligo\":{\"title\":\"Pascaligo\",\"owner\":\"DefinitelyNotAGoat\"},\"psl\":{\"title\":\"PATROL Scripting Language\",\"owner\":\"bertysentry\"},\"pcaxis\":{\"title\":\"PC-Axis\",\"alias\":\"px\",\"owner\":\"RunDevelopment\"},\"peoplecode\":{\"title\":\"PeopleCode\",\"alias\":\"pcode\",\"owner\":\"RunDevelopment\"},\"perl\":{\"title\":\"Perl\",\"owner\":\"Golmote\"},\"php\":{\"title\":\"PHP\",\"require\":\"markup-templating\",\"owner\":\"milesj\"},\"phpdoc\":{\"title\":\"PHPDoc\",\"require\":[\"php\",\"javadoclike\"],\"modify\":\"php\",\"owner\":\"RunDevelopment\"},\"php-extras\":{\"title\":\"PHP Extras\",\"require\":\"php\",\"modify\":\"php\",\"owner\":\"milesj\"},\"plant-uml\":{\"title\":\"PlantUML\",\"alias\":\"plantuml\",\"owner\":\"RunDevelopment\"},\"plsql\":{\"title\":\"PL/SQL\",\"require\":\"sql\",\"owner\":\"Golmote\"},\"powerquery\":{\"title\":\"PowerQuery\",\"alias\":[\"pq\",\"mscript\"],\"owner\":\"peterbud\"},\"powershell\":{\"title\":\"PowerShell\",\"owner\":\"nauzilus\"},\"processing\":{\"title\":\"Processing\",\"require\":\"clike\",\"owner\":\"Golmote\"},\"prolog\":{\"title\":\"Prolog\",\"owner\":\"Golmote\"},\"promql\":{\"title\":\"PromQL\",\"owner\":\"arendjr\"},\"properties\":{\"title\":\".properties\",\"owner\":\"Golmote\"},\"protobuf\":{\"title\":\"Protocol Buffers\",\"require\":\"clike\",\"owner\":\"just-boris\"},\"pug\":{\"title\":\"Pug\",\"require\":[\"markup\",\"javascript\"],\"optional\":[\"coffeescript\",\"ejs\",\"handlebars\",\"less\",\"livescript\",\"markdown\",\"scss\",\"stylus\",\"twig\"],\"owner\":\"Golmote\"},\"puppet\":{\"title\":\"Puppet\",\"owner\":\"Golmote\"},\"pure\":{\"title\":\"Pure\",\"optional\":[\"c\",\"cpp\",\"fortran\"],\"owner\":\"Golmote\"},\"purebasic\":{\"title\":\"PureBasic\",\"require\":\"clike\",\"alias\":\"pbfasm\",\"owner\":\"HeX0R101\"},\"purescript\":{\"title\":\"PureScript\",\"require\":\"haskell\",\"alias\":\"purs\",\"owner\":\"sriharshachilakapati\"},\"python\":{\"title\":\"Python\",\"alias\":\"py\",\"owner\":\"multipetros\"},\"qsharp\":{\"title\":\"Q#\",\"require\":\"clike\",\"alias\":\"qs\",\"owner\":\"fedonman\"},\"q\":{\"title\":\"Q (kdb+ database)\",\"owner\":\"Golmote\"},\"qml\":{\"title\":\"QML\",\"require\":\"javascript\",\"owner\":\"RunDevelopment\"},\"qore\":{\"title\":\"Qore\",\"require\":\"clike\",\"owner\":\"temnroegg\"},\"r\":{\"title\":\"R\",\"owner\":\"Golmote\"},\"racket\":{\"title\":\"Racket\",\"require\":\"scheme\",\"alias\":\"rkt\",\"owner\":\"RunDevelopment\"},\"cshtml\":{\"title\":\"Razor C#\",\"alias\":\"razor\",\"require\":[\"markup\",\"csharp\"],\"optional\":[\"css\",\"css-extras\",\"javascript\",\"js-extras\"],\"owner\":\"RunDevelopment\"},\"jsx\":{\"title\":\"React JSX\",\"require\":[\"markup\",\"javascript\"],\"optional\":[\"jsdoc\",\"js-extras\",\"js-templates\"],\"owner\":\"vkbansal\"},\"tsx\":{\"title\":\"React TSX\",\"require\":[\"jsx\",\"typescript\"]},\"reason\":{\"title\":\"Reason\",\"require\":\"clike\",\"owner\":\"Golmote\"},\"regex\":{\"title\":\"Regex\",\"owner\":\"RunDevelopment\"},\"rego\":{\"title\":\"Rego\",\"owner\":\"JordanSh\"},\"renpy\":{\"title\":\"Ren'py\",\"alias\":\"rpy\",\"owner\":\"HyuchiaDiego\"},\"rescript\":{\"title\":\"ReScript\",\"alias\":\"res\",\"owner\":\"vmarcosp\"},\"rest\":{\"title\":\"reST (reStructuredText)\",\"owner\":\"Golmote\"},\"rip\":{\"title\":\"Rip\",\"owner\":\"ravinggenius\"},\"roboconf\":{\"title\":\"Roboconf\",\"owner\":\"Golmote\"},\"robotframework\":{\"title\":\"Robot Framework\",\"alias\":\"robot\",\"owner\":\"RunDevelopment\"},\"ruby\":{\"title\":\"Ruby\",\"require\":\"clike\",\"alias\":\"rb\",\"owner\":\"samflores\"},\"rust\":{\"title\":\"Rust\",\"owner\":\"Golmote\"},\"sas\":{\"title\":\"SAS\",\"optional\":[\"groovy\",\"lua\",\"sql\"],\"owner\":\"Golmote\"},\"sass\":{\"title\":\"Sass (Sass)\",\"require\":\"css\",\"optional\":\"css-extras\",\"owner\":\"Golmote\"},\"scss\":{\"title\":\"Sass (SCSS)\",\"require\":\"css\",\"optional\":\"css-extras\",\"owner\":\"MoOx\"},\"scala\":{\"title\":\"Scala\",\"require\":\"java\",\"owner\":\"jozic\"},\"scheme\":{\"title\":\"Scheme\",\"owner\":\"bacchus123\"},\"shell-session\":{\"title\":\"Shell session\",\"require\":\"bash\",\"alias\":[\"sh-session\",\"shellsession\"],\"owner\":\"RunDevelopment\"},\"smali\":{\"title\":\"Smali\",\"owner\":\"RunDevelopment\"},\"smalltalk\":{\"title\":\"Smalltalk\",\"owner\":\"Golmote\"},\"smarty\":{\"title\":\"Smarty\",\"require\":\"markup-templating\",\"optional\":\"php\",\"owner\":\"Golmote\"},\"sml\":{\"title\":\"SML\",\"alias\":\"smlnj\",\"aliasTitles\":{\"smlnj\":\"SML/NJ\"},\"owner\":\"RunDevelopment\"},\"solidity\":{\"title\":\"Solidity (Ethereum)\",\"alias\":\"sol\",\"require\":\"clike\",\"owner\":\"glachaud\"},\"solution-file\":{\"title\":\"Solution file\",\"alias\":\"sln\",\"owner\":\"RunDevelopment\"},\"soy\":{\"title\":\"Soy (Closure Template)\",\"require\":\"markup-templating\",\"owner\":\"Golmote\"},\"sparql\":{\"title\":\"SPARQL\",\"require\":\"turtle\",\"owner\":\"Triply-Dev\",\"alias\":\"rq\"},\"splunk-spl\":{\"title\":\"Splunk SPL\",\"owner\":\"RunDevelopment\"},\"sqf\":{\"title\":\"SQF: Status Quo Function (Arma 3)\",\"require\":\"clike\",\"owner\":\"RunDevelopment\"},\"sql\":{\"title\":\"SQL\",\"owner\":\"multipetros\"},\"squirrel\":{\"title\":\"Squirrel\",\"require\":\"clike\",\"owner\":\"RunDevelopment\"},\"stan\":{\"title\":\"Stan\",\"owner\":\"RunDevelopment\"},\"stata\":{\"title\":\"Stata Ado\",\"require\":[\"mata\",\"java\",\"python\"],\"owner\":\"RunDevelopment\"},\"iecst\":{\"title\":\"Structured Text (IEC 61131-3)\",\"owner\":\"serhioromano\"},\"stylus\":{\"title\":\"Stylus\",\"owner\":\"vkbansal\"},\"supercollider\":{\"title\":\"SuperCollider\",\"alias\":\"sclang\",\"owner\":\"RunDevelopment\"},\"swift\":{\"title\":\"Swift\",\"owner\":\"chrischares\"},\"systemd\":{\"title\":\"Systemd configuration file\",\"owner\":\"RunDevelopment\"},\"t4-templating\":{\"title\":\"T4 templating\",\"owner\":\"RunDevelopment\"},\"t4-cs\":{\"title\":\"T4 Text Templates (C#)\",\"require\":[\"t4-templating\",\"csharp\"],\"alias\":\"t4\",\"owner\":\"RunDevelopment\"},\"t4-vb\":{\"title\":\"T4 Text Templates (VB)\",\"require\":[\"t4-templating\",\"vbnet\"],\"owner\":\"RunDevelopment\"},\"tap\":{\"title\":\"TAP\",\"owner\":\"isaacs\",\"require\":\"yaml\"},\"tcl\":{\"title\":\"Tcl\",\"owner\":\"PeterChaplin\"},\"tt2\":{\"title\":\"Template Toolkit 2\",\"require\":[\"clike\",\"markup-templating\"],\"owner\":\"gflohr\"},\"textile\":{\"title\":\"Textile\",\"require\":\"markup\",\"optional\":\"css\",\"owner\":\"Golmote\"},\"toml\":{\"title\":\"TOML\",\"owner\":\"RunDevelopment\"},\"tremor\":{\"title\":\"Tremor\",\"alias\":[\"trickle\",\"troy\"],\"owner\":\"darach\",\"aliasTitles\":{\"trickle\":\"trickle\",\"troy\":\"troy\"}},\"turtle\":{\"title\":\"Turtle\",\"alias\":\"trig\",\"aliasTitles\":{\"trig\":\"TriG\"},\"owner\":\"jakubklimek\"},\"twig\":{\"title\":\"Twig\",\"require\":\"markup-templating\",\"owner\":\"brandonkelly\"},\"typescript\":{\"title\":\"TypeScript\",\"require\":\"javascript\",\"optional\":\"js-templates\",\"alias\":\"ts\",\"owner\":\"vkbansal\"},\"typoscript\":{\"title\":\"TypoScript\",\"alias\":\"tsconfig\",\"aliasTitles\":{\"tsconfig\":\"TSConfig\"},\"owner\":\"dkern\"},\"unrealscript\":{\"title\":\"UnrealScript\",\"alias\":[\"uscript\",\"uc\"],\"owner\":\"RunDevelopment\"},\"uorazor\":{\"title\":\"UO Razor Script\",\"owner\":\"jaseowns\"},\"uri\":{\"title\":\"URI\",\"alias\":\"url\",\"aliasTitles\":{\"url\":\"URL\"},\"owner\":\"RunDevelopment\"},\"v\":{\"title\":\"V\",\"require\":\"clike\",\"owner\":\"taggon\"},\"vala\":{\"title\":\"Vala\",\"require\":\"clike\",\"optional\":\"regex\",\"owner\":\"TemplarVolk\"},\"vbnet\":{\"title\":\"VB.Net\",\"require\":\"basic\",\"owner\":\"Bigsby\"},\"velocity\":{\"title\":\"Velocity\",\"require\":\"markup\",\"owner\":\"Golmote\"},\"verilog\":{\"title\":\"Verilog\",\"owner\":\"a-rey\"},\"vhdl\":{\"title\":\"VHDL\",\"owner\":\"a-rey\"},\"vim\":{\"title\":\"vim\",\"owner\":\"westonganger\"},\"visual-basic\":{\"title\":\"Visual Basic\",\"alias\":[\"vb\",\"vba\"],\"aliasTitles\":{\"vba\":\"VBA\"},\"owner\":\"Golmote\"},\"warpscript\":{\"title\":\"WarpScript\",\"owner\":\"RunDevelopment\"},\"wasm\":{\"title\":\"WebAssembly\",\"owner\":\"Golmote\"},\"web-idl\":{\"title\":\"Web IDL\",\"alias\":\"webidl\",\"owner\":\"RunDevelopment\"},\"wgsl\":{\"title\":\"WGSL\",\"owner\":\"Dr4gonthree\"},\"wiki\":{\"title\":\"Wiki markup\",\"require\":\"markup\",\"owner\":\"Golmote\"},\"wolfram\":{\"title\":\"Wolfram language\",\"alias\":[\"mathematica\",\"nb\",\"wl\"],\"aliasTitles\":{\"mathematica\":\"Mathematica\",\"nb\":\"Mathematica Notebook\"},\"owner\":\"msollami\"},\"wren\":{\"title\":\"Wren\",\"owner\":\"clsource\"},\"xeora\":{\"title\":\"Xeora\",\"require\":\"markup\",\"alias\":\"xeoracube\",\"aliasTitles\":{\"xeoracube\":\"XeoraCube\"},\"owner\":\"freakmaxi\"},\"xml-doc\":{\"title\":\"XML doc (.net)\",\"require\":\"markup\",\"modify\":[\"csharp\",\"fsharp\",\"vbnet\"],\"owner\":\"RunDevelopment\"},\"xojo\":{\"title\":\"Xojo (REALbasic)\",\"owner\":\"Golmote\"},\"xquery\":{\"title\":\"XQuery\",\"require\":\"markup\",\"owner\":\"Golmote\"},\"yaml\":{\"title\":\"YAML\",\"alias\":\"yml\",\"owner\":\"hason\"},\"yang\":{\"title\":\"YANG\",\"owner\":\"RunDevelopment\"},\"zig\":{\"title\":\"Zig\",\"owner\":\"RunDevelopment\"}},\"plugins\":{\"meta\":{\"path\":\"plugins/{id}/prism-{id}\",\"link\":\"plugins/{id}/\"},\"line-highlight\":{\"title\":\"Line Highlight\",\"description\":\"Highlights specific lines and/or line ranges.\"},\"line-numbers\":{\"title\":\"Line Numbers\",\"description\":\"Line number at the beginning of code lines.\",\"owner\":\"kuba-kubula\"},\"show-invisibles\":{\"title\":\"Show Invisibles\",\"description\":\"Show hidden characters such as tabs and line breaks.\",\"optional\":[\"autolinker\",\"data-uri-highlight\"]},\"autolinker\":{\"title\":\"Autolinker\",\"description\":\"Converts URLs and emails in code to clickable links. Parses Markdown links in comments.\"},\"wpd\":{\"title\":\"WebPlatform Docs\",\"description\":\"Makes tokens link to <a href=\\\"https://webplatform.github.io/docs/\\\">WebPlatform.org documentation</a>. The links open in a new tab.\"},\"custom-class\":{\"title\":\"Custom Class\",\"description\":\"This plugin allows you to prefix Prism's default classes (<code>.comment</code> can become <code>.namespace--comment</code>) or replace them with your defined ones (like <code>.editor__comment</code>). You can even add new classes.\",\"owner\":\"dvkndn\",\"noCSS\":true},\"file-highlight\":{\"title\":\"File Highlight\",\"description\":\"Fetch external files and highlight them with Prism. Used on the Prism website itself.\",\"noCSS\":true},\"show-language\":{\"title\":\"Show Language\",\"description\":\"Display the highlighted language in code blocks (inline code does not show the label).\",\"owner\":\"nauzilus\",\"noCSS\":true,\"require\":\"toolbar\"},\"jsonp-highlight\":{\"title\":\"JSONP Highlight\",\"description\":\"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).\",\"noCSS\":true,\"owner\":\"nauzilus\"},\"highlight-keywords\":{\"title\":\"Highlight Keywords\",\"description\":\"Adds special CSS classes for each keyword for fine-grained highlighting.\",\"owner\":\"vkbansal\",\"noCSS\":true},\"remove-initial-line-feed\":{\"title\":\"Remove initial line feed\",\"description\":\"Removes the initial line feed in code blocks.\",\"owner\":\"Golmote\",\"noCSS\":true},\"inline-color\":{\"title\":\"Inline color\",\"description\":\"Adds a small inline preview for colors in style sheets.\",\"require\":\"css-extras\",\"owner\":\"RunDevelopment\"},\"previewers\":{\"title\":\"Previewers\",\"description\":\"Previewers for angles, colors, gradients, easing and time.\",\"require\":\"css-extras\",\"owner\":\"Golmote\"},\"autoloader\":{\"title\":\"Autoloader\",\"description\":\"Automatically loads the needed languages to highlight the code blocks.\",\"owner\":\"Golmote\",\"noCSS\":true},\"keep-markup\":{\"title\":\"Keep Markup\",\"description\":\"Prevents custom markup from being dropped out during highlighting.\",\"owner\":\"Golmote\",\"optional\":\"normalize-whitespace\",\"noCSS\":true},\"command-line\":{\"title\":\"Command Line\",\"description\":\"Display a command line with a prompt and, optionally, the output/response from the commands.\",\"owner\":\"chriswells0\"},\"unescaped-markup\":{\"title\":\"Unescaped Markup\",\"description\":\"Write markup without having to escape anything.\"},\"normalize-whitespace\":{\"title\":\"Normalize Whitespace\",\"description\":\"Supports multiple operations to normalize whitespace in code blocks.\",\"owner\":\"zeitgeist87\",\"optional\":\"unescaped-markup\",\"noCSS\":true},\"data-uri-highlight\":{\"title\":\"Data-URI Highlight\",\"description\":\"Highlights data-URI contents.\",\"owner\":\"Golmote\",\"noCSS\":true},\"toolbar\":{\"title\":\"Toolbar\",\"description\":\"Attach a toolbar for plugins to easily register buttons on the top of a code block.\",\"owner\":\"mAAdhaTTah\"},\"copy-to-clipboard\":{\"title\":\"Copy to Clipboard Button\",\"description\":\"Add a button that copies the code block to the clipboard when clicked.\",\"owner\":\"mAAdhaTTah\",\"require\":\"toolbar\",\"noCSS\":true},\"download-button\":{\"title\":\"Download Button\",\"description\":\"A button in the toolbar of a code block adding a convenient way to download a code file.\",\"owner\":\"Golmote\",\"require\":\"toolbar\",\"noCSS\":true},\"match-braces\":{\"title\":\"Match braces\",\"description\":\"Highlights matching braces.\",\"owner\":\"RunDevelopment\"},\"diff-highlight\":{\"title\":\"Diff Highlight\",\"description\":\"Highlights the code inside diff blocks.\",\"owner\":\"RunDevelopment\",\"require\":\"diff\"},\"filter-highlight-all\":{\"title\":\"Filter highlightAll\",\"description\":\"Filters the elements the <code>highlightAll</code> and <code>highlightAllUnder</code> methods actually highlight.\",\"owner\":\"RunDevelopment\",\"noCSS\":true},\"treeview\":{\"title\":\"Treeview\",\"description\":\"A language with special styles to highlight file system tree structures.\",\"owner\":\"Golmote\"}}};\nif (typeof module !== 'undefined' && module.exports) { module.exports = components; }","/**\n * @import { TextEditorBlockType, TextEditorFormatType, TextEditorInlineType } from '../../typedefs';\n */\n\n/**\n * List of available buttons.\n * @type {{ [key: string]: { labelKey: string, icon: string, inline: boolean } }}\n */\nexport const 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,\n  $isHorizontalRuleNode,\n  HorizontalRuleNode,\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,\n  $convertToMarkdownString,\n  TRANSFORMERS,\n} from '@lexical/markdown';\nimport {\n  $createTableCellNode,\n  $createTableNode,\n  $createTableRowNode,\n  $isTableCellNode,\n  $isTableNode,\n  $isTableRowNode,\n  TableCellHeaderStates,\n  TableCellNode,\n  TableNode,\n  TableRowNode,\n} from '@lexical/table';\nimport { $isParagraphNode, $isTextNode } from 'lexical';\n\n/**\n * @import { ElementTransformer } from '@lexical/markdown';\n */\n\nconst TABLE_ROW_REG_EXP = /^(?:\\|)(.+)(?:\\|)\\s?$/;\nconst TABLE_ROW_DIVIDER_REG_EXP = /^(\\| ?:?-*:? ?)+\\|\\s?$/;\n\n/**\n * Returns the number of columns in the table.\n * @param {TableNode} table\n * @returns {number}\n */\nfunction getTableColumnsSize(table) {\n  const row = table.getFirstChild();\n\n  return $isTableRowNode(row) ? row.getChildrenSize() : 0;\n}\n\n/**\n * Creates a table cell with the given text content.\n * @param {string} textContent\n * @returns {TableCellNode}\n */\nconst createTableCell = (textContent) => {\n  textContent = textContent.replace(/\\\\n/g, '\\n');\n\n  const cell = $createTableCellNode(TableCellHeaderStates.NO_STATUS);\n\n  $convertFromMarkdownString(textContent, TRANSFORMERS, cell);\n\n  return cell;\n};\n\n/**\n * Maps the given text content to an array of table cells.\n * @param {string} textContent\n * @returns {TableCellNode[] | null}\n */\nconst mapToTableCells = (textContent) => {\n  const [, match] = textContent.match(TABLE_ROW_REG_EXP) ?? [];\n\n  if (!match) {\n    return null;\n  }\n\n  return match.split('|').map((text) => createTableCell(text));\n};\n\n/**\n * @type {ElementTransformer}\n */\nexport const TABLE = {\n  dependencies: [TableNode, TableRowNode, TableCellNode],\n  export: (node) => {\n    if (!$isTableNode(node)) {\n      return null;\n    }\n\n    /** @type {string[]} */\n    const output = [];\n\n    node.getChildren().forEach((row) => {\n      /** @type {string[]} */\n      const rowOutput = [];\n\n      if (!$isTableRowNode(row)) {\n        return;\n      }\n\n      let isHeaderRow = false;\n\n      row.getChildren().forEach((cell) => {\n        // It’s TableCellNode so it’s just to make flow happy\n        if ($isTableCellNode(cell)) {\n          rowOutput.push($convertToMarkdownString(TRANSFORMERS, cell).replace(/\\n/g, '\\\\n').trim());\n\n          if (cell.__headerState === TableCellHeaderStates.ROW) {\n            isHeaderRow = true;\n          }\n        }\n      });\n\n      output.push(`| ${rowOutput.join(' | ')} |`);\n\n      if (isHeaderRow) {\n        output.push(`| ${rowOutput.map(() => '---').join(' | ')} |`);\n      }\n    });\n\n    return output.join('\\n');\n  },\n  regExp: TABLE_ROW_REG_EXP,\n  replace: (parentNode, _children, [textContent]) => {\n    // Header row\n    if (TABLE_ROW_DIVIDER_REG_EXP.test(textContent)) {\n      const table = parentNode.getPreviousSibling();\n\n      if (!table || !$isTableNode(table)) {\n        return;\n      }\n\n      const rows = table.getChildren();\n      const lastRow = rows[rows.length - 1];\n\n      if (!lastRow || !$isTableRowNode(lastRow)) {\n        return;\n      }\n\n      // Add header state to row cells\n      lastRow.getChildren().forEach((cell) => {\n        if (!$isTableCellNode(cell)) {\n          return;\n        }\n\n        cell.setHeaderStyles(TableCellHeaderStates.ROW, TableCellHeaderStates.ROW);\n      });\n\n      // Remove line\n      parentNode.remove();\n\n      return;\n    }\n\n    const matchCells = mapToTableCells(textContent);\n\n    if (!matchCells) {\n      return;\n    }\n\n    const rows = [matchCells];\n    let sibling = parentNode.getPreviousSibling();\n    let maxCells = matchCells.length;\n\n    while (sibling) {\n      if (!$isParagraphNode(sibling)) {\n        break;\n      }\n\n      if (sibling.getChildrenSize() !== 1) {\n        break;\n      }\n\n      const firstChild = sibling.getFirstChild();\n\n      if (!$isTextNode(firstChild)) {\n        break;\n      }\n\n      const cells = mapToTableCells(firstChild.getTextContent());\n\n      if (!cells) {\n        break;\n      }\n\n      maxCells = Math.max(maxCells, cells.length);\n      rows.unshift(cells);\n\n      const previousSibling = sibling.getPreviousSibling();\n\n      sibling.remove();\n      sibling = previousSibling;\n    }\n\n    const table = $createTableNode();\n\n    rows.forEach((cells) => {\n      const tableRow = $createTableRowNode();\n\n      table.append(tableRow);\n\n      for (let i = 0; i < maxCells; i += 1) {\n        tableRow.append(i < cells.length ? cells[i] : createTableCell(''));\n      }\n    });\n\n    const previousSibling = parentNode.getPreviousSibling();\n\n    if ($isTableNode(previousSibling) && getTableColumnsSize(previousSibling) === maxCells) {\n      previousSibling.append(...table.getChildren());\n      parentNode.remove();\n    } else {\n      parentNode.replace(table);\n    }\n\n    table.selectEnd();\n  },\n  type: 'element',\n};\n","import {\n  $createCodeNode,\n  $isCodeHighlightNode,\n  $isCodeNode,\n  CodeHighlightNode,\n  CodeNode,\n  PrismTokenizer,\n  registerCodeHighlighting,\n} from '@lexical/code';\nimport { registerDragonSupport } from '@lexical/dragon';\nimport { HorizontalRuleNode } from '@lexical/extension';\nimport { createEmptyHistoryState, registerHistory } from '@lexical/history';\nimport { $isLinkNode, $toggleLink, LinkNode, TOGGLE_LINK_COMMAND } from '@lexical/link';\nimport {\n  $handleListInsertParagraph,\n  $insertList,\n  $isListItemNode,\n  $isListNode,\n  INSERT_ORDERED_LIST_COMMAND,\n  INSERT_UNORDERED_LIST_COMMAND,\n  ListItemNode,\n  ListNode,\n} from '@lexical/list';\nimport {\n  $convertFromMarkdownString,\n  $convertToMarkdownString,\n  TRANSFORMERS,\n} from '@lexical/markdown';\nimport {\n  $isHeadingNode,\n  $isQuoteNode,\n  HeadingNode,\n  QuoteNode,\n  registerRichText,\n} from '@lexical/rich-text';\nimport { TableCellNode, TableNode, TableRowNode } from '@lexical/table';\nimport { $getNearestNodeOfType } from '@lexical/utils';\nimport { sleep } from '@sveltia/utils/misc';\nimport {\n  $getRoot,\n  $getSelection,\n  $isRangeSelection,\n  COMMAND_PRIORITY_NORMAL,\n  ElementNode,\n  INDENT_CONTENT_COMMAND,\n  INSERT_PARAGRAPH_COMMAND,\n  OUTDENT_CONTENT_COMMAND,\n  createEditor,\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 {LexicalEditor} Editor instance.\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\n  registerRichText(editor);\n  registerDragonSupport(editor);\n  registerHistory(editor, createEmptyHistoryState(), 1000);\n\n  registerCodeHighlighting(editor, {\n    defaultLanguage,\n    // eslint-disable-next-line jsdoc/require-jsdoc\n    tokenize: (code, lang = 'plain') =>\n      window.Prism.tokenize(code, window.Prism.languages[lang] ?? window.Prism.languages.plain),\n    $tokenize: PrismTokenizer.$tokenize,\n  });\n\n  editor.registerCommand(\n    TOGGLE_LINK_COMMAND,\n    (payload) => {\n      $toggleLink(typeof payload === 'string' ? payload : null);\n\n      return true;\n    },\n    COMMAND_PRIORITY_NORMAL,\n  );\n\n  editor.registerCommand(\n    INSERT_UNORDERED_LIST_COMMAND,\n    () => {\n      $insertList('bullet');\n\n      return true;\n    },\n    COMMAND_PRIORITY_NORMAL,\n  );\n\n  editor.registerCommand(\n    INSERT_ORDERED_LIST_COMMAND,\n    () => {\n      $insertList('number');\n\n      return true;\n    },\n    COMMAND_PRIORITY_NORMAL,\n  );\n\n  // https://github.com/facebook/lexical/blob/main/packages/lexical-react/src/shared/useList.ts\n  editor.registerCommand(\n    INSERT_PARAGRAPH_COMMAND,\n    () => $handleListInsertParagraph(),\n    COMMAND_PRIORITY_NORMAL,\n  );\n\n  editor.registerUpdateListener(async () => {\n    if (editor?.isComposing()) {\n      return;\n    }\n\n    await sleep(100);\n\n    editor.update(() => {\n      // Prevent CodeNode from being removed\n      if (isCodeEditor) {\n        const root = $getRoot();\n        const children = root.getChildren();\n\n        if (children.length === 1 && !$isCodeNode(children[0])) {\n          children[0].remove();\n        }\n\n        if (children.length === 0) {\n          const node = $createCodeNode();\n\n          node.setLanguage(defaultLanguage);\n          root.append(node);\n        }\n      }\n\n      onEditorUpdate(editor);\n    });\n  });\n\n  // `editor.registerCommand(KEY_TAB_COMMAND, listener, priority)` doesn’t work for some reason, so\n  // use another method\n  editor.registerRootListener((root) => {\n    if (root) {\n      root.addEventListener('keydown', (event) => {\n        editor.update(() => {\n          if (event.key === 'Tab') {\n            const selection = $getSelection();\n\n            if (!$isRangeSelection(selection)) {\n              return;\n            }\n\n            const anchor = selection.anchor.getNode();\n\n            const parent =\n              anchor instanceof ElementNode ? anchor : $getNearestNodeOfType(anchor, ElementNode);\n\n            if ($isListItemNode(parent) && parent.canIndent()) {\n              if (!event.shiftKey) {\n                event.preventDefault();\n                editor.dispatchCommand(INDENT_CONTENT_COMMAND, undefined);\n              } else if (parent.getIndent() > 0) {\n                event.preventDefault();\n                editor.dispatchCommand(OUTDENT_CONTENT_COMMAND, undefined);\n              }\n            }\n          }\n        });\n      });\n    }\n  });\n\n  return editor;\n};\n\n/**\n * Load additional Prism syntax highlighter settings for the given programming language.\n * @param {string} lang Language name, like scss.\n */\nexport const loadCodeHighlighter = async (lang) => {\n  if (lang in window.Prism.languages) {\n    return;\n  }\n\n  const canonicalLang = Object.entries(prismComponents.languages).find(\n    // @ts-ignore\n    ([key, { alias }]) =>\n      key === lang || (Array.isArray(alias) ? alias.includes(lang) : alias === lang),\n  )?.[0];\n\n  if (!canonicalLang) {\n    return;\n  }\n\n  try {\n    // eslint-disable-next-line jsdoc/no-bad-blocks\n    await import(/* @vite-ignore */ `${prismBaseURL}/components/prism-${canonicalLang}.min.js`);\n  } catch {\n    //\n  }\n};\n\n/**\n * Convert Markdown to Lexical nodes.\n * @param {LexicalEditor} editor Editor instance.\n * @param {string} value Current Markdown value.\n * @returns {Promise<void>} Nothing.\n * @throws {Error} Failed to convert the value to Lexical nodes.\n */\nexport const convertMarkdownToLexical = async (editor, value) => {\n  // Load Prism language support on demand; the `loadLanguages` Prism utility method cannot be used\n  await Promise.all(\n    [...value.matchAll(/^```(?<lang>.+?)\\n/gm)].map(async ({ groups: { lang = '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    editorStore.editor = initEditor(editorStore.config);\n\n    lexicalRoot?.addEventListener('Update', onUpdate);\n    lexicalRoot?.addEventListener('click', onClick);\n\n    return () => {\n      lexicalRoot?.removeEventListener('Update', onUpdate);\n      lexicalRoot?.removeEventListener('click', onClick);\n    };\n  });\n\n  $effect(() => {\n    if (editorStore.editor && lexicalRoot) {\n      editorStore.editor.setRootElement(lexicalRoot);\n      editorStore.initialized = true;\n    }\n  });\n</script>\n\n<div\n  bind:this={lexicalRoot}\n  {...restProps}\n  role=\"textbox\"\n  aria-multiline=\"true\"\n  aria-hidden={hidden}\n  aria-disabled={disabled}\n  aria-readonly={readonly}\n  aria-required={required}\n  aria-invalid={invalid}\n  class=\"lexical-root\"\n  class:code={editorStore.config.isCodeEditor}\n  id=\"{editorStore.editorId}-lexical-root\"\n  contenteditable={editable}\n  {hidden}\n></div>\n\n<style>.lexical-root {\n  overflow: hidden;\n  border: 1px solid var(--sui-textbox-border-color);\n  border-radius: var(--sui-textbox-border-radius) !important;\n  padding: var(--sui-textbox-multiline-padding);\n  min-height: 8em;\n  color: var(--sui-textbox-foreground-color);\n  background-color: var(--sui-textbox-background-color);\n  font-family: var(--sui-textbox-font-family);\n  font-size: var(--sui-textbox-font-size);\n  line-height: var(--sui-textbox-multiline-line-height);\n}\n.lexical-root:not(:first-child) {\n  border-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  import { $isCodeNode as isCodeNode } from '@lexical/code';\n  import { $getNodeByKey as getNodeByKey, $getRoot as getRoot } from 'lexical';\n  import prismComponents from 'prismjs/components';\n  import { getContext } from 'svelte';\n  import { _ } from 'svelte-i18n';\n  import Option from '../../listbox/option.svelte';\n  import Select from '../../select/select.svelte';\n  import { focusEditor, loadCodeHighlighter } from '../core.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  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: 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 'svelte-i18n';\n  import CodeLanguageSwitcher from './code-language-switcher.svelte';\n  import ToolbarWrapper from './toolbar-wrapper.svelte';\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} [hidden] Whether to hide the widget.\n   * @property {boolean} [disabled] Whether to disable the widget. An alias of the `aria-disabled`\n   * attribute.\n   * @property {boolean} [readonly] Whether to make the widget read-only. An alias of the\n   * `aria-readonly` attribute.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    disabled = false,\n    readonly = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<ToolbarWrapper disabled={disabled || readonly} aria-label={$_('_sui.text_editor.code_editor')}>\n  <CodeLanguageSwitcher disabled={disabled || readonly} />\n</ToolbarWrapper>\n","<!--\n  @component\n  A code editor based on Lexical.\n-->\n<script>\n  import { setContext, untrack } from 'svelte';\n  import { _ } from 'svelte-i18n';\n  import Alert from '../alert/alert.svelte';\n  import Toast from '../toast/toast.svelte';\n  import LexicalRoot from './lexical-root.svelte';\n  import { createEditorStore } from './store.svelte.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 {string} [name] The `name` attribute on the `<textarea>` element.\n   * @property {boolean} [autoResize] Whether to automatically resize the `<textarea>` based on the\n   * content.\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {boolean} [hidden] Whether to hide the widget.\n   * @property {boolean} [disabled] Whether to disable the widget. An alias of the `aria-disabled`\n   * attribute.\n   * @property {boolean} [readonly] Whether to make the widget read-only. An alias of the\n   * `aria-readonly` attribute.\n   * @property {boolean} [required] Whether to mark the widget required. An alias of the\n   * `aria-required` attribute.\n   * @property {boolean} [invalid] Whether to mark the widget invalid. An alias of the\n   * `aria-invalid` attribute.\n   * @property {Snippet} [children] Primary slot content.\n   */\n\n  /**\n   * @type {CommonEventHandlers & InputEventHandlers & Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    value = $bindable(''),\n    flex = false,\n    name = undefined,\n    autoResize = false,\n    class: className,\n    hidden = false,\n    disabled = false,\n    readonly = false,\n    required = false,\n    invalid = false,\n    children,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div\n  role=\"none\"\n  class=\"sui text-area {className}\"\n  class:flex\n  class:disabled\n  class:readonly\n  {hidden}\n>\n  <textarea\n    {...restProps}\n    {name}\n    bind:value\n    dir=\"auto\"\n    disabled={disabled || undefined}\n    readonly={readonly || undefined}\n    aria-hidden={hidden}\n    aria-disabled={disabled}\n    aria-readonly={readonly}\n    aria-required={required}\n    aria-invalid={invalid}\n    class:auto-resize={autoResize}\n  ></textarea>\n  {#if autoResize}\n    <div class=\"clone\" aria-hidden=\"true\">{value}</div>\n  {/if}\n</div>\n\n<style>.text-area {\n  display: inline-grid;\n  margin: var(--sui-focus-ring-width);\n  min-width: var(--sui-textbox-multiline-min-width);\n}\n.text-area[hidden] {\n  display: none;\n}\n.text-area.flex: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  white-space: pre-wrap;\n}</style>\n","<script>\n  import { FORMAT_TEXT_COMMAND } from 'lexical';\n  import { getContext } from 'svelte';\n  import { _ } from 'svelte-i18n';\n  import 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 {\n    COMMAND_PRIORITY_NORMAL,\n    KEY_DOWN_COMMAND,\n    $createRangeSelection as createRangeSelection,\n    $createTextNode as createTextNode,\n    $getPreviousSelection as getPreviousSelection,\n    $getSelection as getSelection,\n    $getTextContent as getTextContent,\n    $insertNodes as insertNodes,\n    $isRangeSelection as isRangeSelection,\n    $setSelection as setSelection,\n  } from 'lexical';\n  import { getContext } from 'svelte';\n  import { _ } from 'svelte-i18n';\n  import { isMac, matchShortcuts } from '../../../services/events.svelte.js';\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 (matchShortcuts(event, 'Enter') && anchorURL) {\n      openDialog = false;\n    }\n  };\n\n  /**\n   * Handle `close` event fired on the dialog. Insert a link with the given URL and optionally text.\n   * @param {CustomEvent} event `close` event.\n   * @see https://github.com/facebook/lexical/discussions/3013\n   */\n  const onDialogClose = async (event) => {\n    if (event.detail.returnValue !== 'cancel' && dialogMode !== 'remove') {\n      if (!editorStore.editor) {\n        return;\n      }\n\n      await new Promise((resolve) => {\n        editorStore.editor?.update(async () => {\n          let _selection = getSelection() ?? getPreviousSelection()?.clone();\n\n          if (!isRangeSelection(_selection)) {\n            _selection = createRangeSelection();\n          }\n\n          if (!hasAnchor) {\n            anchorText = anchorText.trim();\n            anchorText ||= anchorURL;\n\n            const { anchor, focus } = /** @type {RangeSelection} */ (_selection);\n            const node = createTextNode(anchorText);\n            const key = node.getKey();\n\n            insertNodes([node]);\n            anchor.set(key, anchorText.length, 'text');\n            focus.set(key, 0, 'text');\n          }\n\n          setSelection(_selection);\n          resolve(undefined);\n        });\n      });\n\n      await focusEditor(editorStore.editor);\n      editorStore.editor.dispatchCommand(TOGGLE_LINK_COMMAND, anchorURL);\n    }\n\n    anchorURL = '';\n    anchorText = '';\n  };\n\n  /**\n   * Open the dialog with a keyboard shortcut: Accel+K.\n   */\n  const _registerCommand = () => {\n    editorStore.editor?.registerCommand(\n      KEY_DOWN_COMMAND,\n      (event) => {\n        if (matchShortcuts(event, isMac() ? 'Meta+K' : 'Ctrl+K')) {\n          event.preventDefault();\n          onButtonClick();\n        }\n\n        return false;\n      },\n      COMMAND_PRIORITY_NORMAL,\n    );\n  };\n\n  $effect(() => {\n    if (editorStore.editor) {\n      _registerCommand();\n    }\n  });\n</script>\n\n<Button\n  iconic\n  aria-label={$_(`_sui.text_editor.${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      id=\"{id}-url\"\n      bind:value={anchorURL}\n      flex\n      aria-label=\"URL\"\n      onkeydown={(event) => {\n        onInputKeyDown(event);\n      }}\n    />\n  </div>\n  {#if !hasAnchor}\n    <div role=\"none\">\n      <label for=\"{id}-text\">{$_('_sui.text_editor.text')}</label>\n      <TextInput\n        id=\"{id}-text\"\n        bind:value={anchorText}\n        flex\n        onkeydown={(event) => {\n          onInputKeyDown(event);\n        }}\n      />\n    </div>\n  {/if}\n  {#snippet footerExtra()}\n    {#if dialogMode !== 'create'}\n      <Button\n        variant=\"secondary\"\n        label={$_('_sui.remove')}\n        onclick={() => {\n          removeLink();\n          dialogMode = 'remove';\n          openDialog = false;\n        }}\n      />\n    {/if}\n  {/snippet}\n</Dialog>\n","<script>\n  import { $insertNodes as insertNodes } from 'lexical';\n  import { getContext } from 'svelte';\n  import { _ } from 'svelte-i18n';\n  import Icon from '../../icon/icon.svelte';\n  import MenuButton from '../../menu/menu-button.svelte';\n  import MenuItem from '../../menu/menu-item.svelte';\n  import Menu from '../../menu/menu.svelte';\n\n  /**\n   * @import { TextEditorComponent, TextEditorStore } from '../../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {TextEditorComponent[]} components Editor components.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    components,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {TextEditorStore} */\n  const editorStore = getContext('editorStore');\n</script>\n\n<MenuButton disabled={!editorStore.useRichText} label={$_('_sui.insert')}>\n  {#snippet endIcon()}\n    <Icon name=\"arrow_drop_down\" class=\"small-arrow\" />\n  {/snippet}\n  {#snippet popup()}\n    <Menu>\n      {#each components as { id, label, icon, createNode } (id)}\n        <MenuItem\n          {label}\n          onclick={() => {\n            editorStore.editor?.update(() => {\n              insertNodes([createNode()]);\n            });\n          }}\n        >\n          {#snippet startIcon()}\n            {#if icon}\n              <Icon name={icon} />\n            {/if}\n          {/snippet}\n        </MenuItem>\n      {/each}\n    </Menu>\n  {/snippet}\n</MenuButton>\n","<script>\n  import { $createCodeNode as createCodeNode } from '@lexical/code';\n  import { INSERT_ORDERED_LIST_COMMAND, INSERT_UNORDERED_LIST_COMMAND } from '@lexical/list';\n  import {\n    $createHeadingNode as createHeadingNode,\n    $createQuoteNode as createQuoteNode,\n  } from '@lexical/rich-text';\n  import { $setBlocksType as setBlocksType } from '@lexical/selection';\n  import {\n    $createParagraphNode as createParagraphNode,\n    $getSelection as getSelection,\n  } from 'lexical';\n  import { getContext } from 'svelte';\n  import { _ } from 'svelte-i18n';\n  import 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 { unique } from '@sveltia/utils/array';\n  import { getContext } from 'svelte';\n  import { _ } from 'svelte-i18n';\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 { setContext, untrack } from 'svelte';\n  import { _ } from 'svelte-i18n';\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 {TextEditorMode[]} [modes] Enabled modes.\n   * @property {(TextEditorBlockType | TextEditorInlineType)[]} [buttons] Enabled buttons.\n   * @property {TextEditorComponent[]} [components] Editor components.\n   * @property {string} [class] The `class` attribute on the wrapper element.\n   * @property {boolean} [hidden] Whether to hide the widget.\n   * @property {boolean} [disabled] Whether to disable the widget. An alias of the `aria-disabled`\n   * attribute.\n   * @property {boolean} [readonly] Whether to make the widget read-only. An alias of the\n   * `aria-readonly` attribute.\n   * @property {boolean} [required] Whether to mark the widget required. An alias of the\n   * `aria-required` attribute.\n   * @property {boolean} [invalid] Whether to mark the widget invalid. An alias of the\n   * `aria-invalid` attribute.\n   * @property {Snippet} [children] Primary slot content.\n   */\n\n  /**\n   * @type {Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    value = $bindable(''),\n    flex = false,\n    modes = ['rich-text', 'plain-text'],\n    buttons = [...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    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 { untrack } from 'svelte';\n  import { _ } from 'svelte-i18n';\n  import Button from '../button/button.svelte';\n  import Icon from '../icon/icon.svelte';\n  import TextInput from './text-input.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import { CommonEventHandlers, InputEventHandlers, TextInputProps } from '../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {number} [value] Input value.\n   * @property {number} [min] Minimum allowed value.\n   * @property {number} [max] Maximum allowed value.\n   * @property {number} [step] Value to be added or removed when using the up/down arrow key or\n   * button.\n   * @property {Snippet} [increaseIcon] Increase icon slot content.\n   * @property {Snippet} [decreaseIcon] Decrease icon slot content.\n   */\n\n  /**\n   * @type {TextInputProps & CommonEventHandlers & InputEventHandlers & Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    value = $bindable(),\n    invalid = $bindable(false),\n    flex = false,\n    min = undefined,\n    max = undefined,\n    step = 1,\n    class: className,\n    hidden = false,\n    disabled = false,\n    readonly = false,\n    required = false,\n    children,\n    increaseIcon,\n    decreaseIcon,\n    onChange,\n    ...restProps\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const id = $props.id();\n\n  let edited = $state(false);\n  let inputValue = $state('');\n\n  const maximumFractionDigits = $derived(String(step).split('.')[1]?.length || 0);\n  const isMin = $derived(typeof min === 'number' && Number(inputValue || 0) <= min);\n  const isMax = $derived(typeof max === 'number' && Number(inputValue || 0) >= max);\n\n  $effect(() => {\n    const newInputValue = String(value ?? '');\n\n    untrack(() => {\n      if (inputValue !== newInputValue) {\n        inputValue = newInputValue;\n      }\n    });\n  });\n\n  $effect(() => {\n    const newValue = inputValue.trim() ? Number(inputValue) : NaN;\n\n    value = !Number.isNaN(newValue) ? newValue : undefined;\n  });\n\n  $effect(() => {\n    if (edited) {\n      invalid =\n        (required && (value === undefined || inputValue === '')) ||\n        (inputValue !== undefined &&\n          inputValue !== '' &&\n          (Number.isNaN(Number(inputValue)) ||\n            (typeof min === 'number' && Number(inputValue || 0) < min) ||\n            (typeof max === 'number' && Number(inputValue || 0) > max)));\n    }\n  });\n\n  /**\n   * Decrease the number.\n   */\n  const decrease = () => {\n    if (isMin || Number.isNaN(Number(inputValue))) {\n      return;\n    }\n\n    inputValue = Number(Number(inputValue || 0) - step).toFixed(maximumFractionDigits);\n  };\n\n  /**\n   * Increase the number.\n   */\n  const increase = () => {\n    if (isMax || Number.isNaN(Number(inputValue))) {\n      return;\n    }\n\n    inputValue = Number(Number(inputValue || 0) + step).toFixed(maximumFractionDigits);\n  };\n</script>\n\n<div\n  role=\"none\"\n  class=\"sui number-input {className}\"\n  class:flex\n  class:disabled\n  class:readonly\n  {hidden}\n>\n  <div role=\"none\" class=\"buttons\">\n    <Button\n      iconic\n      disabled={disabled || readonly || Number.isNaN(Number(value)) || isMax}\n      aria-label={$_('_sui.number_input.increase')}\n      aria-controls={id}\n      onclick={() => {\n        increase();\n      }}\n    >\n      {#snippet startIcon()}\n        {#if increaseIcon}\n          {@render increaseIcon()}\n        {:else}\n          <Icon name=\"expand_less\" />\n        {/if}\n      {/snippet}\n    </Button>\n    <Button\n      iconic\n      disabled={disabled || readonly || Number.isNaN(Number(value)) || isMin}\n      aria-label={$_('_sui.number_input.decrease')}\n      aria-controls={id}\n      onclick={() => {\n        decrease();\n      }}\n    >\n      {#snippet startIcon()}\n        {#if decreaseIcon}\n          {@render decreaseIcon()}\n        {:else}\n          <Icon name=\"expand_more\" />\n        {/if}\n      {/snippet}\n    </Button>\n  </div>\n  <TextInput\n    {...restProps}\n    role=\"spinbutton\"\n    {id}\n    bind:value={inputValue}\n    spellcheck=\"false\"\n    {flex}\n    {hidden}\n    {disabled}\n    {readonly}\n    {required}\n    {invalid}\n    aria-valuenow={Number(value || 0)}\n    aria-valuemin={min}\n    aria-valuemax={max}\n    inputmode={maximumFractionDigits > 0 ? 'decimal' : 'numeric'}\n    onkeydown={(event) => {\n      const { key, ctrlKey, metaKey, altKey, shiftKey } = event;\n      const hasModifier = shiftKey || altKey || ctrlKey || metaKey;\n\n      if (key === 'ArrowDown' && !hasModifier) {\n        event.preventDefault();\n        decrease();\n      }\n\n      if (key === 'ArrowUp' && !hasModifier) {\n        event.preventDefault();\n        increase();\n      }\n\n      if (!edited) {\n        edited = true;\n      }\n    }}\n    oninput={() => {\n      if (!edited) {\n        edited = true;\n      }\n    }}\n    {onChange}\n  />\n</div>\n\n<style>.number-input {\n  display: inline-flex;\n  align-items: center;\n  margin: var(--sui-focus-ring-width);\n  min-width: var(--sui-textbox-singleline-min-width);\n}\n.number-input.flex: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 'svelte-i18n';\n  import Button from '../button/button.svelte';\n  import Icon from '../icon/icon.svelte';\n  import TextInput from './text-input.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import { CommonEventHandlers, InputEventHandlers, TextInputProps } from '../../typedefs';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [value] Input value.\n   * @property {Snippet} [visibilityIcon] Visibility icon slot content.\n   */\n\n  /**\n   * @type {TextInputProps & CommonEventHandlers & InputEventHandlers & Props & Record<string, any>}\n   */\n  let {\n    /* eslint-disable prefer-const */\n    value = $bindable(),\n    flex = false,\n    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    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  /** @type {HTMLElement | undefined} */\n  let fontLoader = $state();\n\n  onMount(() => {\n    const mediaQuery = globalThis.matchMedia('(prefers-color-scheme: dark)');\n    const { dataset } = document.documentElement;\n\n    /**\n     * Apply the Dark or Light theme.\n     */\n    const applyTheme = () => {\n      if (dataset.autoTheming !== 'false') {\n        dataset.theme = mediaQuery.matches ? 'dark' : 'light';\n      }\n    };\n\n    applyTheme();\n\n    // eslint-disable-next-line jsdoc/require-jsdoc\n    mediaQuery.onchange = () => {\n      applyTheme();\n    };\n\n    globalThis.setTimeout(() => {\n      fontLoader?.remove();\n    }, 1000);\n  });\n</script>\n\n<!--\n  In the viewport meta tag, we set the maximum scale to 1 to prevent zooming in on mobile devices.\n  @see https://stackoverflow.com/q/2989263\n-->\n<svelte:head>\n  <meta\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}\n    <link rel=\"preload\" {href} as=\"style\" />\n    <link rel=\"stylesheet\" {href} />\n  {/each}\n</svelte:head>\n\n<!-- Preload fonts, including the icons -->\n<div bind:this={fontLoader} class=\"font-loader\" aria-hidden=\"true\" style:opacity=\"0\">\n  Loading <strong>Sveltia</strong> <em>UI</em>\n  <span role=\"none\" class=\"material-symbols-outlined\">favorite</span>\n</div>\n\n<div\n  {...restProps}\n  role=\"none\"\n  class=\"sui app-shell {orientation}\"\n  ondragover={(event) => event.preventDefault()}\n  ondrop={(event) => event.preventDefault()}\n  oncontextmenu={(event) => {\n    // Allow context menu in developer mode\n    if (document.documentElement.matches('[data-env=\"dev\"]')) {\n      return;\n    }\n\n    // eslint-disable-next-line prefer-destructuring\n    const target = /** @type {HTMLElement} */ (event.target);\n\n    // Allow context menu on text inputs and contentEditable elements\n    if (\n      document.documentElement.matches('[data-env=\"dev\"]') ||\n      (target?.matches('input, textarea') && 'maxLength' in target) ||\n      /** @type {HTMLElement} */ (target?.closest('[role=\"textbox\"]'))?.contentEditable === 'true'\n    ) {\n      return;\n    }\n\n    event.preventDefault();\n  }}\n>\n  {@render children?.()}\n</div>\n\n<style>:global(:root),\n:global(:host) {\n  --sui-base-hue: 210;\n  --sui-highlight-foreground-color: hsl(var(--sui-foreground-color-1-hsl));\n  --sui-primary-foreground-color: hsl(var(--sui-foreground-color-2-hsl));\n  --sui-secondary-foreground-color: hsl(var(--sui-foreground-color-3-hsl));\n  --sui-tertiary-foreground-color: hsl(var(--sui-foreground-color-4-hsl));\n  --sui-disabled-foreground-color: hsl(var(--sui-foreground-color-5-hsl));\n  --sui-error-foreground-color: hsl(\n    var(--sui-error-color-hue) var(--sui-alert-foreground-color-saturation)\n      var(--sui-alert-foreground-color-lightness)\n  );\n  --sui-warning-foreground-color: hsl(\n    var(--sui-warning-color-hue) var(--sui-alert-foreground-color-saturation)\n      var(--sui-alert-foreground-color-lightness)\n  );\n  --sui-info-foreground-color: hsl(\n    var(--sui-info-color-hue) var(--sui-alert-foreground-color-saturation)\n      var(--sui-alert-foreground-color-lightness)\n  );\n  --sui-success-foreground-color: hsl(\n    var(--sui-success-color-hue) var(--sui-alert-foreground-color-saturation)\n      var(--sui-alert-foreground-color-lightness)\n  );\n  --sui-hover-background-color: hsl(var(--sui-background-color-5-hsl) / 35%);\n  --sui-selected-background-color: hsl(var(--sui-background-color-5-hsl) / 75%);\n  --sui-active-background-color: hsl(var(--sui-background-color-5-hsl) / 100%);\n  --sui-content-background-color: hsl(var(--sui-background-color-1-hsl));\n  --sui-code-background-color: hsl(var(--sui-background-color-3-hsl));\n  --sui-primary-background-color: hsl(var(--sui-background-color-2-hsl));\n  --sui-primary-background-color-translucent: hsl(var(--sui-background-color-2-hsl) / 80%);\n  --sui-secondary-background-color: hsl(var(--sui-background-color-3-hsl));\n  --sui-secondary-background-color-translucent: hsl(var(--sui-background-color-3-hsl) / 80%);\n  --sui-tertiary-background-color: hsl(var(--sui-background-color-4-hsl));\n  --sui-tertiary-background-color-translucent: hsl(var(--sui-background-color-4-hsl) / 80%);\n  --sui-disabled-background-color: hsl(var(--sui-background-color-4-hsl));\n  --sui-error-background-color: hsl(\n    var(--sui-error-color-hue) var(--sui-alert-background-color-saturation)\n      var(--sui-alert-background-color-lightness)\n  );\n  --sui-warning-background-color: hsl(\n    var(--sui-warning-color-hue) var(--sui-alert-background-color-saturation)\n      var(--sui-alert-background-color-lightness)\n  );\n  --sui-info-background-color: hsl(\n    var(--sui-info-color-hue) var(--sui-alert-background-color-saturation)\n      var(--sui-alert-background-color-lightness)\n  );\n  --sui-success-background-color: hsl(\n    var(--sui-success-color-hue) var(--sui-alert-background-color-saturation)\n      var(--sui-alert-background-color-lightness)\n  );\n  --sui-focus-ring-width: 4px;\n  --sui-primary-border-color: hsl(var(--sui-border-color-2-hsl));\n  --sui-secondary-border-color: hsl(var(--sui-border-color-3-hsl));\n  --sui-error-border-color: hsl(\n    var(--sui-error-color-hue) var(--sui-alert-border-color-saturation)\n      var(--sui-alert-border-color-lightness)\n  );\n  --sui-warning-border-color: hsl(\n    var(--sui-warning-color-hue) var(--sui-alert-border-color-saturation)\n      var(--sui-alert-border-color-lightness)\n  );\n  --sui-info-border-color: hsl(\n    var(--sui-info-color-hue) var(--sui-alert-border-color-saturation)\n      var(--sui-alert-border-color-lightness)\n  );\n  --sui-success-border-color: hsl(\n    var(--sui-success-color-hue) var(--sui-alert-border-color-saturation)\n      var(--sui-alert-border-color-lightness)\n  );\n  --sui-popup-shadow-color: hsl(var(--sui-shadow-color) / 40%);\n  --sui-popup-backdrop-color: hsl(var(--sui-shadow-color) / 40%);\n  --sui-font-family-default: \"Merriweather Sans\", sans-serif;\n  --sui-font-size-xxx-large: 24px;\n  --sui-font-size-xx-large: 20px;\n  --sui-font-size-x-large: 18px;\n  --sui-font-size-large: 16px;\n  --sui-font-size-default: 14px;\n  --sui-font-size-small: 12px;\n  --sui-font-size-x-small: 10px;\n  --sui-font-weight-normal: 325;\n  --sui-font-weight-bold: 625;\n  --sui-font-family-monospace: \"Noto Sans Mono\", monospace;\n  --sui-font-size-monospace: 0.95em;\n  --sui-line-height-default: 1.25;\n  --sui-line-height-compact: 1.5;\n  --sui-line-height-comfortable: 1.75;\n  --sui-word-spacing-normal: 0.1ex;\n  --sui-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, isRTL } 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';\nexport { initLocales, isRTL };\n\n// eslint-disable-next-line import/export\nexport * from './typedefs.js';\n","import { getAssetKind } from '$lib/services/assets/kinds';\nimport { getRegex } from '$lib/services/utils/misc';\n\n/**\n * @import { Asset, FilteringConditions } from '$lib/types/private';\n */\n\n/**\n * Filter the given assets.\n * @param {Asset[]} assets Asset list.\n * @param {FilteringConditions} [conditions] Filtering conditions.\n * @returns {Asset[]} Filtered asset list.\n */\nexport const filterAssets = (assets, { field, pattern } = { field: '', pattern: '' }) => {\n  if (!field) {\n    return assets;\n  }\n\n  if (field === 'fileType') {\n    return assets.filter(({ path }) => getAssetKind(path) === pattern);\n  }\n\n  const regex = getRegex(pattern);\n\n  return assets.filter((asset) => {\n    const value = /** @type {Record<string, any>} */ (asset)[field];\n\n    if (regex) {\n      return regex.test(String(value ?? ''));\n    }\n\n    return value === pattern;\n  });\n};\n","import { compare } from '@sveltia/utils/string';\nimport { get } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { getRegex } from '$lib/services/utils/misc';\n\n/**\n * @import { Asset, GroupingConditions } from '$lib/types/private';\n */\n\n/**\n * Group the given assets.\n * @param {Asset[]} assets Asset list.\n * @param {GroupingConditions} [conditions] Grouping conditions.\n * @returns {Record<string, Asset[]>} Grouped assets, where key is a group label and value is an\n * asset list.\n */\nexport const groupAssets = (assets, { field, pattern } = { field: '', pattern: undefined }) => {\n  if (!field) {\n    return assets.length ? { '*': assets } : {};\n  }\n\n  const regex = getRegex(pattern);\n  /** @type {Record<string, Asset[]>} */\n  const groups = {};\n  const otherKey = get(_)('other');\n\n  assets.forEach((asset) => {\n    const value = /** @type {Record<string, any>} */ (asset)[field];\n    /** @type {string} */\n    let key;\n\n    if (regex) {\n      [key = otherKey] = String(value ?? '').match(regex) ?? [];\n    } else {\n      key = value;\n    }\n\n    if (!(key in groups)) {\n      groups[key] = [];\n    }\n\n    groups[key].push(asset);\n  });\n\n  // Sort groups by key\n  return Object.fromEntries(Object.entries(groups).sort(([aKey], [bKey]) => compare(aKey, bKey)));\n};\n","import { IndexedDB } from '@sveltia/utils/storage';\nimport 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';\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  const { databaseName } = repository ?? {};\n  const settingsDB = databaseName ? new IndexedDB(databaseName, 'ui-settings') : null;\n  const storageKey = 'assets-view';\n\n  assetListSettings.set((await settingsDB?.get(storageKey)) ?? {});\n\n  assetListSettings.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  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 { compare } from '@sveltia/utils/string';\n\n/**\n * @import { Asset, SortingConditions } from '$lib/types/private';\n */\n\n/**\n * Get an asset’s property value.\n * @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  _assets.sort((a, b) => {\n    const aValue = getValue(a, key);\n    const bValue = getValue(b, key);\n\n    if (type === String) {\n      return compare(aValue, bValue);\n    }\n\n    if (type === Date) {\n      return Number(aValue) - Number(bValue);\n    }\n\n    return aValue - bValue;\n  });\n\n  if (order === 'descending') {\n    _assets.reverse();\n  }\n\n  return _assets;\n};\n","import equal from 'fast-deep-equal';\nimport { derived, get, writable } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { allAssets, selectedAssets, uploadingAssets } from '$lib/services/assets';\nimport { selectedAssetFolder } from '$lib/services/assets/folders';\nimport { filterAssets } from '$lib/services/assets/view/filter';\nimport { groupAssets } from '$lib/services/assets/view/group';\nimport { 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';\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 = ({ collectionName, fileName, internalPath }) => {\n  if (collectionName === undefined) {\n    return get(_)(internalPath === undefined ? 'all_assets' : 'global_assets');\n  }\n\n  const collection = getCollection(collectionName);\n  const collectionLabel = collection ? getCollectionLabel(collection) : collectionName;\n\n  if (!fileName) {\n    return collectionLabel;\n  }\n\n  const file = collection ? getCollectionFile(collection, fileName) : undefined;\n  const fileLabel = file ? getCollectionFileLabel(file) : fileName;\n\n  return `${collectionLabel} › ${fileLabel}`;\n};\n\n/**\n * Default view settings for the selected asset collection.\n * @type {AssetListView}\n */\nexport const defaultView = {\n  type: 'grid',\n  showInfo: true,\n  sort: {\n    key: 'name',\n    order: 'ascending',\n  },\n};\n\n/**\n * View settings for the selected asset collection.\n * @type {Writable<AssetListView>}\n */\nexport const currentView = writable({ type: 'grid', showInfo: true });\n\n/**\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 (get(prefs).devModeEnabled) {\n    // eslint-disable-next-line no-console\n    console.info('listedAssets', assets);\n  }\n});\n","import { sleep } from '@sveltia/utils/misc';\nimport { flushSync } from 'svelte';\nimport { derived, get, writable } from 'svelte/store';\n\nimport { showAssetOverlay } from '$lib/services/assets/view';\nimport { cmsConfig } from '$lib/services/config';\nimport { showContentOverlay } from '$lib/services/contents/editor';\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(searchParams),\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  window.open(displayURL || siteURL || '/', '_blank');\n};\n","import { isObject } from '@sveltia/utils/object';\nimport { LocalStorage } from '@sveltia/utils/storage';\nimport { get, writable } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { goto, parseLocation } from '$lib/services/app/navigation';\nimport { backend, backendName } from '$lib/services/backends';\nimport { cmsConfig } from '$lib/services/config';\nimport { dataLoaded } from '$lib/services/contents';\nimport { user } from '$lib/services/user';\nimport { prefs } from '$lib/services/user/prefs';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import { BackendService, InternalCmsConfig, User } from '$lib/types/private';\n */\n\n/**\n * Context of the sign-in error.\n * @typedef {'authentication' | 'dataFetch'} SignInErrorContext\n */\n\n/**\n * Sign-in error store.\n * @type {Writable<{ message: string, context: SignInErrorContext }>}\n */\nexport const signInError = writable({ message: '', context: 'authentication' });\n\n/**\n * @type {Writable<boolean>}\n */\nexport const unauthenticated = writable(true);\n\n/**\n * @type {Writable<boolean>}\n */\nexport const signingIn = writable(false);\n\n/**\n * Reset the sign-in error store.\n */\nexport const resetError = () => {\n  signInError.set({ message: '', context: 'authentication' });\n};\n\n/**\n * Log an authentication error on the UI and in the browser console.\n * @param {Error} ex Exception.\n * @param {SignInErrorContext} [context] Context of the error.\n */\nexport const logError = (ex, context = 'authentication') => {\n  let message =\n    /** @type {{ message: string }} */ (ex.cause)?.message || get(_)('unexpected_error');\n\n  if (ex.name === 'NotFoundError') {\n    message = get(_)('sign_in_error.not_project_root');\n  }\n\n  if (ex.name === 'AbortError') {\n    message = get(_)(\n      get(backendName) === 'local'\n        ? 'sign_in_error.picker_dismissed'\n        : 'sign_in_error.authentication_aborted',\n    );\n  }\n\n  signInError.set({ message, context });\n  // eslint-disable-next-line no-console\n  console.error(ex.name, ex.message, ex.cause);\n};\n\n/**\n * 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(/^\\/signin\\/(?<encodedData>.+)/)?.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  if (isObject(userCache) && typeof userCache.backendName === 'string') {\n    return userCache;\n  }\n\n  return 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.set(/** @type {User} */ (_user));\n\n    const { token, refreshToken } = _user;\n\n    signingIn.set(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.set(undefined);\n    }\n  }\n\n  signingIn.set(false);\n  unauthenticated.set(!_user);\n\n  if (!_user || !_backend) {\n    return;\n  }\n\n  // Use the cached user to start fetching files\n  user.set(/** @type {User} */ (_user));\n\n  // Copy user preferences passed with QR code\n  if (copiedPrefs) {\n    prefs.update((currentPrefs) => ({ ...currentPrefs, ...copiedPrefs }));\n  }\n\n  try {\n    await _backend.fetchFiles();\n  } catch (/** @type {any} */ ex) {\n    // The API request may fail if the cached token has been expired or revoked. Then let the user\n    // sign in again. 404 Not Found is also considered an authentication error.\n    // https://docs.github.com/en/rest/overview/troubleshooting-the-rest-api#404-not-found-for-an-existing-resource\n    if ([401, 403, 404].includes(ex.cause?.status)) {\n      unauthenticated.set(true);\n    } else {\n      logError(ex, 'dataFetch');\n    }\n  }\n};\n\n/**\n * Sign in with the given backend.\n * @param {string} _backendName Backend name to be used.\n * @param {string} [token] Personal Access Token (PAT) to be used for authentication.\n */\nexport const signInManually = async (_backendName, token) => {\n  resetError();\n  backendName.set(_backendName);\n\n  const _backend = get(backend);\n\n  if (!_backend) {\n    return;\n  }\n\n  let _user;\n\n  signingIn.set(true);\n\n  try {\n    _user = await _backend.signIn({ token, auto: false });\n  } catch (/** @type {any} */ ex) {\n    signingIn.set(false);\n    unauthenticated.set(true);\n\n    if (!!token && ex.cause?.status === 401) {\n      // If the user is signing in using a personal access token (PAT) and the token is invalid,\n      // display a specific error message.\n      logError(\n        new Error('Invalid token', { cause: { message: get(_)('sign_in_error.invalid_token') } }),\n      );\n    } else {\n      logError(ex);\n    }\n\n    return;\n  }\n\n  signingIn.set(false);\n  unauthenticated.set(!_user);\n\n  if (!_user) {\n    return;\n  }\n\n  user.set(_user);\n\n  try {\n    await _backend.fetchFiles();\n  } catch (/** @type {any} */ ex) {\n    logError(ex, 'dataFetch');\n  }\n};\n\n/**\n * Sign out from the current backend.\n */\nexport const signOut = async () => {\n  await get(backend)?.signOut();\n\n  // Leave an empty user object in the local storage to prevent the user from being signed in\n  // again automatically in `signInAutomatically`.\n  await LocalStorage.set('sveltia-cms.user', {});\n\n  backendName.set(undefined);\n  user.set(undefined);\n  unauthenticated.set(true);\n  dataLoaded.set(false);\n\n  const redirectURL = get(cmsConfig)?.logout_redirect_url;\n\n  if (redirectURL) {\n    window.location.href = redirectURL;\n  }\n};\n","import { sanitize } from 'isomorphic-dompurify';\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(str.replace('<a>', `<a href=\"${href}\" target=\"_blank\">`), LINK_SANITIZE_OPTIONS);\n","<script>\n  import { Button, Icon, PromptDialog, Spacer } from '@sveltia/ui';\n  import { onMount } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import { allBackendServices } from '$lib/services/backends';\n  import { cmsConfig } from '$lib/services/config';\n  import {\n    signInAutomatically,\n    signInError,\n    signingIn,\n    signInManually,\n  } from '$lib/services/user/auth';\n  import { isBrave, isLocalBackendSupported, isLocalHost } from '$lib/services/user/env';\n  import { makeLink } from '$lib/services/utils/string';\n\n  /**\n   * @import { GitBackend } from '$lib/types/public';\n   */\n\n  let showTokenDialog = $state(false);\n  let token = $state('');\n\n  const configuredBackendName = $derived(/** @type {string} */ ($cmsConfig?.backend?.name));\n  const configuredBackend = $derived(\n    configuredBackendName ? allBackendServices[configuredBackendName] : null,\n  );\n  const isTestRepo = $derived(configuredBackendName === 'test-repo');\n  const repositoryName = $derived(\n    isTestRepo\n      ? undefined\n      : /** @type {GitBackend} */ ($cmsConfig?.backend)?.repo?.split('/').pop(),\n  );\n  const showLocalBackendOption = $derived($isLocalHost && !isTestRepo);\n\n  onMount(() => {\n    signInAutomatically();\n  });\n</script>\n\n<div role=\"none\" class=\"buttons\">\n  {#if $signingIn}\n    <div role=\"alert\" class=\"message\">{$_('signing_in')}</div>\n  {:else if configuredBackend}\n    {#if showLocalBackendOption}\n      <Button\n        variant=\"primary\"\n        label={$_('work_with_local_repo')}\n        disabled={!$isLocalBackendSupported}\n        onclick={async () => {\n          await signInManually('local');\n        }}\n      />\n      {#if !$isLocalBackendSupported}\n        <div role=\"alert\">\n          {#if $isBrave}\n            {@html 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 !$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: configuredBackend.label } })}\n      onclick={async () => {\n        await signInManually(configuredBackendName);\n      }}\n    />\n    {#if !isTestRepo}\n      <Button\n        variant=\"secondary\"\n        label={$_('sign_in_with_x_using_token', { values: { service: configuredBackend.label } })}\n        onclick={() => {\n          showTokenDialog = true;\n        }}\n      />\n    {/if}\n  {/if}\n  {#if $signInError.message && $signInError.context === 'authentication'}\n    <div role=\"alert\" class=\"error iconic\">\n      <Icon name=\"error\" />\n      {$signInError.message}\n    </div>\n  {/if}\n</div>\n\n<PromptDialog\n  bind:open={showTokenDialog}\n  bind:value={token}\n  title={$_('sign_in_using_pat_title')}\n  textboxAttrs={{ spellcheck: false, 'aria-label': $_('personal_access_token') }}\n  okLabel={$_('sign_in')}\n  okDisabled={!token.trim()}\n  onOk={async () => {\n    await signInManually(configuredBackendName, token.trim());\n  }}\n>\n  {$_('sign_in_using_pat_description')}\n  {#if configuredBackend?.repository?.tokenPageURL}\n    {@html makeLink(\n      $_('sign_in_using_pat_link', { values: { service: configuredBackend.label } }),\n      configuredBackend.repository.tokenPageURL,\n    )}\n  {/if}\n</PromptDialog>\n\n<style lang=\"scss\">\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","export default \"<svg viewBox=\\\"0 0 800 800\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"><linearGradient id=\\\"a\\\" gradientUnits=\\\"userSpaceOnUse\\\" x1=\\\"400\\\" x2=\\\"400\\\" y1=\\\"0\\\" y2=\\\"800\\\"><stop offset=\\\"0\\\" stop-color=\\\"#f0980b\\\"/><stop offset=\\\"1\\\" stop-color=\\\"#ff1d00\\\"/></linearGradient><clipPath id=\\\"b\\\"><rect height=\\\"800\\\" rx=\\\"80\\\" width=\\\"800\\\"/></clipPath><rect fill=\\\"url(#a)\\\" height=\\\"800\\\" rx=\\\"80\\\" width=\\\"800\\\"/><g style=\\\"clip-path:url(#b);fill:none;stroke:#fff;stroke-linecap:round;stroke-linejoin:round;stroke-width:180\\\"><path d=\\\"m320-80-200 320 200 320-200 320\\\"/><path d=\\\"m400 240 200 320 200-320\\\"/></g></svg>\"","import 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\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(/^data:(image\\/[a-zA-Z0-9.+-]+);base64,/);\n\n  if (match) {\n    return match[1];\n  }\n\n  return mime.getType(url) ?? undefined;\n});\n","<script>\n  import { Progressbar } from '@sveltia/ui';\n  import { sanitize } from 'isomorphic-dompurify';\n  import { marked } from 'marked';\n  import { _ } from 'svelte-i18n';\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';\n  import { signInError, unauthenticated } from '$lib/services/user/auth';\n  import { prefs, prefsError } from '$lib/services/user/prefs';\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          {$_($cmsConfigErrors.length === 1 ? 'config.one_error' : 'config.many_errors')}\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}\n      <div role=\"alert\" class=\"message\">\n        {$_(`prefs.error.${$prefsError.type}`)}\n      </div>\n    {:else if !$cmsConfig || !$prefs}\n      <div role=\"alert\" class=\"message\">{$_('loading_cms_config')}</div>\n    {:else if $signInError.message && $signInError.context === 'dataFetch'}\n      <div role=\"alert\">\n        <div role=\"none\" class=\"message\">{$_('loading_site_data_error')}</div>\n        <div role=\"none\" class=\"error\">\n          {@render parseMarkdown($signInError.message)}\n        </div>\n      </div>\n    {:else if $inAuthPopup}\n      <div role=\"alert\" class=\"message\">{$_('authorizing')}</div>\n    {:else if !$user || $unauthenticated}\n      <SignIn />\n    {:else if !$dataLoaded}\n      <div role=\"alert\" class=\"message\">{$_('loading_site_data')}</div>\n      {#if $dataLoadedProgress !== undefined}\n        <Progressbar now={$dataLoadedProgress} />\n      {/if}\n    {/if}\n  </div>\n</div>\n\n{#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 lang=\"scss\">\n  .container {\n    position: absolute;\n    inset: 0;\n    z-index: 101;\n    flex: auto;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    gap: 16px;\n    padding: 32px;\n\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 { Button, Infobar } from '@sveltia/ui';\n  import { onMount } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import { backend } from '$lib/services/backends';\n  import { cmsConfig } from '$lib/services/config';\n\n  /**\n   * @import { BackendServiceStatus } from '$lib/types/private';\n   */\n\n  const interval = 5 * 60 * 1000; // 5 minutes\n  let timer = 0;\n\n  let mounted = $state(false);\n  /** @type {BackendServiceStatus} */\n  let status = $state('none');\n\n  /**\n   * Check if an update is available.\n   */\n  const checkStatus = async () => {\n    if (!$backend?.checkStatus) {\n      return;\n    }\n\n    status = await $backend.checkStatus();\n  };\n\n  /**\n   * Start checking the status.\n   */\n  const startChecking = () => {\n    checkStatus();\n\n    timer = window.setInterval(() => {\n      checkStatus();\n    }, interval);\n  };\n\n  /**\n   * Stop checking the status.\n   */\n  const stopChecking = () => {\n    window.clearInterval(timer);\n    status = 'none';\n  };\n\n  /**\n   * Initialize the status checker.\n   */\n  const init = () => {\n    if (mounted) {\n      // Cannot get the status of the local backend or a self-hosted Git instance\n      if ($backend?.checkStatus && !$backend.repository?.isSelfHosted) {\n        startChecking();\n      } else {\n        stopChecking();\n      }\n    }\n  };\n\n  onMount(() => {\n    mounted = true;\n\n    // onUnmount\n    return () => {\n      stopChecking();\n    };\n  });\n\n  $effect(() => {\n    void [mounted, $backend, $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        window.open($backend?.statusDashboardURL, '_blank');\n      }}\n    />\n  </Infobar>\n{/if}\n","<script>\n  import { Button, Infobar } from '@sveltia/ui';\n  import { onMount } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import { version as userVersion } from '$lib/services/app';\n\n  const checkInterval = 60 * 60 * 1000; // 1 hour\n  const cacheTimeout = 10 * 60 * 1000; // 10 min\n  let interval = 0;\n  let timeout = 0;\n\n  let updateAvailable = $state(false);\n\n  /**\n   * Check for a new version of the application. If an update is available, wait 10 minutes before\n   * displaying the update notification, as redirects are cached by the UNPKG CDN. Otherwise, an\n   * older script may still be served when the user reloads the page, and then the notification will\n   * persist.\n   * @see https://unpkg.com/#cache-behavior\n   */\n  const checkForUpdates = async () => {\n    try {\n      const response = await fetch('https://unpkg.com/@sveltia/cms/package.json');\n\n      if (!response.ok) {\n        return;\n      }\n\n      const { version: latestVersion } = await response.json();\n\n      if (latestVersion && latestVersion !== userVersion) {\n        timeout = window.setTimeout(() => {\n          updateAvailable = true;\n        }, cacheTimeout);\n      }\n    } catch {\n      //\n    }\n  };\n\n  onMount(() => {\n    // Enable update checking only if the script is installed on the site via UNPKG\n    if (\n      import.meta.env.DEV ||\n      !document.querySelector('script[src^=\"https://unpkg.com/@sveltia/cms\"]')\n    ) {\n      return undefined;\n    }\n\n    checkForUpdates();\n\n    interval = window.setInterval(() => {\n      checkForUpdates();\n    }, checkInterval);\n\n    // onUnmount\n    return () => {\n      window.clearInterval(interval);\n      window.clearTimeout(timeout);\n    };\n  });\n</script>\n\n{#if updateAvailable}\n  <Infobar --sui-infobar-message-justify-content=\"center\">\n    {$_('update_available')}\n    <Button\n      variant=\"link\"\n      label={$_('update_now')}\n      onclick={() => {\n        window.location.reload();\n      }}\n    />\n  </Infobar>\n{/if}\n","<script>\n  import { Alert, Menu, MenuButton, MenuItem, Toast } from '@sveltia/ui';\n  import { isTextFileType } from '@sveltia/utils/file';\n  import { _ } from 'svelte-i18n';\n\n  import { getAssetBlob, getAssetDetails } from '$lib/services/assets/info';\n  import { SUPPORTED_IMAGE_TYPES } from '$lib/services/utils/media/image';\n  import { transformImage } from '$lib/services/utils/media/image/transform';\n\n  /**\n   * @import { Asset, AssetDetails } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Asset[]} [assets] Selected assets.\n   * @property {boolean} [useButton] Whether to use the Button component.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    assets = [],\n    useButton = true,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {AssetDetails[]} */\n  let assetsDetailList = $state([]);\n  let canCopyFileData = $state(false);\n  /** @type {{ show: boolean, text: string, status: 'success' | 'error' }} */\n  const toast = $state({ show: false, text: '', status: 'success' });\n\n  const singleAsset = $derived(assets.length === 1);\n  const publicURLs = $derived(\n    assetsDetailList.filter(({ publicURL }) => !!publicURL).map(({ publicURL }) => publicURL),\n  );\n\n  /** @type {Blob | undefined} */\n  let assetBlob = undefined;\n\n  /**\n   * Check if the file data can be copied to clipboard. Since OSes usually support only one item,\n   * enable the menu only when one file is selected. Also check if the file type is plaintext or\n   * image and if the copy method is supported in the browser.\n   * @returns {Promise<boolean>} Result.\n   */\n  const checkCanCopyFileData = async () => {\n    assetBlob = undefined;\n\n    if (!singleAsset) {\n      return false;\n    }\n\n    const blob = await getAssetBlob(assets[0]);\n    const { type } = blob;\n\n    assetBlob = blob;\n\n    if (isTextFileType(type)) {\n      return true;\n    }\n\n    if (SUPPORTED_IMAGE_TYPES.includes(type)) {\n      return typeof navigator.clipboard.write === 'function';\n    }\n\n    return false;\n  };\n\n  /**\n   * Copy the asset public URL(s) to clipboard.\n   */\n  const copyPublicURLs = async () => {\n    await navigator.clipboard.writeText(publicURLs.join('\\n'));\n  };\n\n  /**\n   * Copy the asset file path(s) to clipboard.\n   */\n  const copyFilePaths = async () => {\n    await navigator.clipboard.writeText(assets.map(({ path }) => `/${path}`).join('\\n'));\n  };\n\n  /**\n   * Copy the file data to clipboard. Given that browsers typically support only plaintext and PNG\n   * image, convert the file if necessary.\n   */\n  const copyFileData = async () => {\n    let blob = /** @type {Blob} */ (assetBlob);\n    const { type } = blob;\n\n    if (isTextFileType(type)) {\n      await navigator.clipboard.writeText(await blob.text());\n\n      return;\n    }\n\n    if (!SUPPORTED_IMAGE_TYPES.includes(type)) {\n      throw new Error('Unsupported type');\n    }\n\n    if (type !== 'image/png') {\n      blob = await transformImage(blob);\n    }\n\n    await navigator.clipboard.write([new ClipboardItem({ 'image/png': blob })]);\n  };\n\n  /**\n   * Execute a copy action.\n   * @param {() => Promise<void>} func Copy function.\n   * @param {string} toastSingular Singular toast label.\n   * @param {string} toastPlural Plural toast label.\n   */\n  const doCopyAction = async (func, toastSingular, toastPlural) => {\n    try {\n      await func();\n      toast.status = 'success';\n      toast.text = singleAsset ? toastSingular : toastPlural;\n    } catch {\n      toast.status = 'error';\n      toast.text = $_('clipboard_error');\n    } finally {\n      toast.show = true;\n    }\n  };\n\n  $effect(() => {\n    (async () => {\n      assetsDetailList = await Promise.all(assets.map(getAssetDetails));\n      canCopyFileData = await checkCanCopyFileData();\n    })();\n  });\n</script>\n\n{#snippet menuItems()}\n  <MenuItem\n    label={singleAsset ? $_('public_url') : $_('public_urls')}\n    disabled={!publicURLs.length}\n    onclick={() => {\n      doCopyAction(copyPublicURLs, $_('asset_url_copied'), $_('asset_urls_copied'));\n    }}\n  />\n  <MenuItem\n    label={singleAsset ? $_('file_path') : $_('file_paths')}\n    onclick={() => {\n      doCopyAction(copyFilePaths, $_('asset_path_copied'), $_('asset_paths_copied'));\n    }}\n  />\n  <MenuItem\n    label={$_('file_data')}\n    disabled={!canCopyFileData}\n    onclick={() => {\n      doCopyAction(copyFileData, $_('asset_data_copied'), $_('asset_data_copied'));\n    }}\n  />\n{/snippet}\n\n{#if useButton}\n  <MenuButton\n    variant=\"ghost\"\n    disabled={!assets.length}\n    label={$_('copy')}\n    popupPosition=\"bottom-right\"\n  >\n    {#snippet popup()}\n      <Menu aria-label={$_('copy_options')}>\n        {@render menuItems()}\n      </Menu>\n    {/snippet}\n  </MenuButton>\n{:else}\n  <MenuItem disabled={!assets.length} label={$_('copy')} popupPosition=\"left-top\">\n    {#snippet items()}\n      {@render menuItems()}\n    {/snippet}\n  </MenuItem>\n{/if}\n\n<Toast bind:show={toast.show}>\n  <Alert status={toast.status}>{toast.text}</Alert>\n</Toast>\n","import { writable } from 'svelte/store';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import { UpdateToastState } from '$lib/types/private';\n */\n\n/**\n * @type {UpdateToastState}\n */\nexport const UPDATE_TOAST_DEFAULT_STATE = {\n  saved: false,\n  moved: false,\n  renamed: false,\n  deleted: false,\n  published: false,\n  count: 1,\n};\n\n/**\n * @type {Writable<UpdateToastState>}\n */\nexport const contentUpdatesToast = writable({ ...UPDATE_TOAST_DEFAULT_STATE });\n","import { writable } from 'svelte/store';\n\nimport { UPDATE_TOAST_DEFAULT_STATE } from '$lib/services/contents/collection/data';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import { UpdateToastState } from '$lib/types/private';\n */\n\n/**\n * A writable store to manage the state of the asset updates toast notification.\n * @type {Writable<UpdateToastState>}\n */\nexport const assetUpdatesToast = writable({ ...UPDATE_TOAST_DEFAULT_STATE });\n","import { IndexedDB } from '@sveltia/utils/storage';\nimport { get } from 'svelte/store';\n\nimport { allAssets } from '$lib/services/assets';\nimport { backend } from '$lib/services/backends';\nimport { allEntries } from '$lib/services/contents';\nimport { user } from '$lib/services/user';\nimport { prefs } from '$lib/services/user/prefs';\nimport { getBlob } from '$lib/services/utils/file';\n\n/**\n * @import {\n * Asset,\n * BackendService,\n * ChangeResults,\n * CommitAuthor,\n * CommitOptions,\n * CommitResults,\n * Entry,\n * FileChange,\n * RepositoryFileInfo,\n * User,\n * } from '$lib/types/private';\n */\n\n/**\n * Get the commit author information from the user store.\n * @returns {CommitAuthor | undefined} Commit author information including `name`, `email`, `id`,\n * and `login`. `undefined` for the local and test-repo backends.\n */\nexport const getCommitAuthor = () => {\n  const userData = /** @type {User} */ (get(user));\n\n  if (!userData) {\n    return undefined;\n  }\n\n  const { name, email, id, login } = userData;\n\n  if (!name || !email) {\n    return undefined;\n  }\n\n  return { name, email, id, login };\n};\n\n/**\n * Update the file cache with the given changes. This will update the file cache with the latest\n * file content and metadata, such as SHA and size, for Git-based backends.\n * @param {object} args Arguments.\n * @param {FileChange[]} args.changes Committed changes.\n * @param {CommitResults} args.commit Commit results.\n */\nexport const updateCache = async ({ changes, commit }) => {\n  const { databaseName } = get(backend)?.repository ?? {};\n\n  if (!databaseName) {\n    return;\n  }\n\n  const cacheDB = new IndexedDB(databaseName, 'file-cache');\n  const { files, author: commitAuthor, date: commitDate } = commit;\n  const meta = { commitAuthor, commitDate };\n\n  await Promise.all(\n    changes.map(async (change) => {\n      const { action, slug, path, previousPath, data } = change;\n\n      // Skip if the change is made to an asset; we only handle entries\n      if (typeof data !== 'string' || !slug) {\n        return;\n      }\n\n      // Delete the file from the cache if the action is `delete`\n      if (action === 'delete') {\n        await cacheDB.delete(path);\n        return;\n      }\n\n      // Delete the previous file from the cache if the action is `move`\n      if (action === 'move') {\n        await cacheDB.delete(previousPath);\n      }\n\n      /** @type {RepositoryFileInfo} */\n      const fileInfo = {\n        sha: files[path]?.sha,\n        size: getBlob(data).size,\n        text: data,\n        meta,\n      };\n\n      // Update the file cache with the new file content and metadata\n      await cacheDB.set(path, fileInfo);\n    }),\n  );\n};\n\n/**\n * Update the entry and asset stores with the results of the commit changes.\n * @param {object} args Arguments.\n * @param {FileChange[]} args.changes Committed changes.\n * @param {Entry[]} args.savedEntries Entries that have been saved.\n * @param {Asset[]} args.savedAssets Assets that have been saved.\n */\nexport const updateStores = ({ changes, savedEntries, savedAssets }) => {\n  const savedEntryIds = savedEntries.map((e) => e.id);\n\n  allEntries.update((entries) => [\n    ...entries.filter((e) => !savedEntryIds.includes(e.id)),\n    ...savedEntries,\n  ]);\n\n  const savedAssetsPaths = savedAssets.map((a) => a.path);\n  const movedAssetPaths = changes.filter((c) => c.action === 'move').map((c) => c.previousPath);\n  const deletedAssetPaths = changes.filter((c) => c.action === 'delete').map((c) => c.path);\n  const excludingPaths = [...savedAssetsPaths, ...movedAssetPaths, ...deletedAssetPaths];\n\n  allAssets.update((assets) => [\n    ...assets.filter((a) => !excludingPaths.includes(a.path)),\n    ...savedAssets,\n  ]);\n};\n\n/**\n * Save changes to the backend and update the file cache and stores with the results.\n * @param {object} args Arguments.\n * @param {FileChange[]} args.changes Changes to be committed.\n * @param {Entry[]} [args.savingEntries] Entries to be saved.\n * @param {Asset[]} [args.savingAssets] Assets to be saved.\n * @param {CommitOptions} args.options Options for committing changes, such as commit type.\n * @returns {Promise<ChangeResults>} Change results containing the commit information, saved\n * entries, and saved assets.\n */\nexport const saveChanges = async ({ changes, savingEntries = [], savingAssets = [], options }) => {\n  const { commitChanges } = /** @type {BackendService} */ (get(backend));\n\n  /** @type {CommitResults} */\n  const commit = {\n    ...(await commitChanges(changes, options)),\n    author: getCommitAuthor(),\n  };\n\n  if (get(prefs).devModeEnabled) {\n    // eslint-disable-next-line no-console\n    console.debug('Commit changes:', changes);\n    // eslint-disable-next-line no-console\n    console.debug('Commit results:', commit);\n  }\n\n  const { files, author: commitAuthor, date: commitDate } = commit;\n\n  const savedEntries = savingEntries.map(\n    (entry) => /** @type {Entry} */ ({ ...entry, commitAuthor, commitDate }),\n  );\n\n  const savedAssets = savingAssets.map((asset) => {\n    const { sha, file } = files[asset.path] ?? {};\n    const blobURL = file ? URL.createObjectURL(file) : undefined;\n\n    return /** @type {Asset} */ ({ ...asset, sha, blobURL, commitAuthor, commitDate });\n  });\n\n  await updateCache({ changes, commit });\n  updateStores({ changes, savedEntries, savedAssets });\n\n  return { commit, savedEntries, savedAssets };\n};\n","import { focusedAsset } from '$lib/services/assets';\nimport { assetUpdatesToast } from '$lib/services/assets/data';\nimport { saveChanges } from '$lib/services/backends/save';\nimport { UPDATE_TOAST_DEFAULT_STATE } from '$lib/services/contents/collection/data';\n\n/**\n * @import { Asset } from '$lib/types/private';\n */\n\n/**\n * Update the asset stores after deleting assets.\n * @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 { Button, ConfirmationDialog, MenuItem } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { deleteAssets } from '$lib/services/assets/data/delete';\n\n  /**\n   * @import { Asset } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Asset[]} [assets] Selected assets.\n   * @property {string} [buttonDescription] The `aria-label` attribute on the button.\n   * @property {string} [dialogDescription] Description to be displayed on the dialog.\n   * @property {(() => void) | undefined} [onDelete] Custom `delete` event handler.\n   * @property {boolean} [useButton] Whether to use the Button component.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    assets = [],\n    buttonDescription = '',\n    dialogDescription = '',\n    onDelete = undefined,\n    useButton = true,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  let showDialog = $state(false);\n\n  const Component = $derived(useButton ? Button : MenuItem);\n</script>\n\n<Component\n  variant=\"ghost\"\n  disabled={!assets.length}\n  label={$_('delete')}\n  aria-label={buttonDescription}\n  onclick={() => {\n    showDialog = true;\n  }}\n/>\n\n<ConfirmationDialog\n  bind:open={showDialog}\n  title={assets.length === 1 ? $_('delete_asset') : $_('delete_assets')}\n  okLabel={$_('delete')}\n  onOk={() => {\n    deleteAssets(assets);\n    onDelete?.();\n  }}\n>\n  {dialogDescription}\n</ConfirmationDialog>\n","<script>\n  import { Alert, Button, MenuItem, Toast } from '@sveltia/ui';\n  import { saveFile } from '@sveltia/utils/file';\n  import { sleep } from '@sveltia/utils/misc';\n  import { _ } from 'svelte-i18n';\n\n  import { getAssetBlob } from '$lib/services/assets/info';\n\n  /**\n   * @import { Asset } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Asset[]} [assets] Selected assets.\n   * @property {boolean} [useButton] Whether to use the Button component.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    assets = [],\n    useButton = true,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  let showToast = $state(false);\n\n  const Component = $derived(useButton ? Button : MenuItem);\n\n  /**\n   * Download the assets.\n   */\n  const downloadFiles = async () => {\n    // eslint-disable-next-line no-restricted-syntax\n    for (const asset of assets) {\n      // eslint-disable-next-line no-await-in-loop\n      saveFile(await getAssetBlob(asset), asset.name);\n      // eslint-disable-next-line no-await-in-loop\n      await sleep(300);\n    }\n\n    showToast = true;\n  };\n</script>\n\n<Component\n  variant=\"ghost\"\n  disabled={!assets.length}\n  label={$_('download')}\n  onclick={() => {\n    downloadFiles();\n  }}\n/>\n\n<Toast bind:show={showToast}>\n  <Alert status=\"success\">\n    {assets.length === 1 ? $_('asset_downloaded') : $_('assets_downloaded')}\n  </Alert>\n</Toast>\n","<script>\n  import { Divider, Menu, MenuButton, MenuItem } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { editingAsset, renamingAsset, uploadingAssets } from '$lib/services/assets';\n  import { defaultAssetDetails, getAssetDetails } from '$lib/services/assets/info';\n  import { canEditAsset } from '$lib/services/assets/kinds';\n  import { showUploadAssetsDialog } from '$lib/services/assets/view';\n  import { backend } from '$lib/services/backends';\n  import { prefs } from '$lib/services/user/prefs';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import { Asset, AssetDetails } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Asset} [asset] Selected asset.\n   * @property {Snippet} [extraItems] Slot content.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    asset,\n    extraItems = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {AssetDetails} */\n  let details = $state({ ...defaultAssetDetails });\n\n  const { publicURL, repoBlobURL } = $derived(details);\n\n  /**\n   * Update the properties above.\n   */\n  const updateProps = async () => {\n    details = asset ? await getAssetDetails(asset) : { ...defaultAssetDetails };\n  };\n\n  $effect(() => {\n    void [asset];\n    updateProps();\n  });\n</script>\n\n<MenuButton\n  variant=\"ghost\"\n  iconic\n  popupPosition=\"bottom-right\"\n  aria-label={$_('show_edit_options')}\n>\n  {#snippet popup()}\n    <Menu aria-label={$_('edit_options')}>\n      {@render extraItems?.()}\n      <MenuItem\n        variant=\"ghost\"\n        label={$_('edit')}\n        aria-label={$_('edit_asset')}\n        disabled={!asset || !canEditAsset(asset)}\n        onclick={() => {\n          $editingAsset = asset;\n        }}\n      />\n      <MenuItem\n        variant=\"ghost\"\n        label={$_('rename')}\n        aria-label={$_('rename_asset')}\n        disabled={!asset}\n        onclick={() => {\n          $renamingAsset = asset;\n        }}\n      />\n      <MenuItem\n        variant=\"ghost\"\n        label={$_('replace')}\n        aria-label={$_('replace_asset')}\n        disabled={!asset}\n        onclick={() => {\n          $uploadingAssets = { folder: undefined, files: [], originalAsset: asset };\n          $showUploadAssetsDialog = true;\n        }}\n      />\n      <Divider />\n      <MenuItem\n        label={$_('view_on_live_site')}\n        disabled={!publicURL}\n        onclick={() => {\n          window.open(publicURL);\n        }}\n      />\n      {#if $prefs.devModeEnabled}\n        <MenuItem\n          disabled={!$backend?.repository || !repoBlobURL}\n          label={$_('view_on_x', {\n            values: { service: $backend?.repository?.label },\n            default: $_('view_in_repository'),\n          })}\n          onclick={() => {\n            window.open(`${repoBlobURL}?plain=1`);\n          }}\n        />\n      {/if}\n    </Menu>\n  {/snippet}\n</MenuButton>\n","<script>\n  import { Button, Icon, isRTL } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [aria-label] `aria-label` property on the button.\n   * @property {boolean} [useShortcut] Whether to enable Escape keyboard shortcut. Default: `false`.\n   * @property {(event: MouseEvent) => void} [onclick] `click` event handler.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    'aria-label': ariaLabel,\n    useShortcut = false,\n    onclick = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<Button\n  variant=\"ghost\"\n  iconic\n  aria-label={ariaLabel ?? $_('back')}\n  keyShortcuts={useShortcut ? 'Escape' : undefined}\n  class=\"back\"\n  {onclick}\n>\n  {#snippet startIcon()}\n    <Icon name={$isRTL ? 'arrow_forward' : 'arrow_back'} />\n  {/snippet}\n</Button>\n","<script>\n  import { Toolbar, TruncatedText } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import CopyAssetsButton from '$lib/components/assets/toolbar/copy-assets-button.svelte';\n  import DeleteAssetsButton from '$lib/components/assets/toolbar/delete-assets-button.svelte';\n  import DownloadAssetsButton from '$lib/components/assets/toolbar/download-assets-button.svelte';\n  import EditOptionsButton from '$lib/components/assets/toolbar/edit-options-button.svelte';\n  import BackButton from '$lib/components/common/page-toolbar/back-button.svelte';\n  import { goBack } from '$lib/services/app/navigation';\n  import { overlaidAsset } from '$lib/services/assets';\n  import { selectedAssetFolder } from '$lib/services/assets/folders';\n  import { isSmallScreen } from '$lib/services/user/env';\n\n  const assets = $derived($overlaidAsset ? [$overlaidAsset] : []);\n  const useButton = $derived(!$isSmallScreen);\n</script>\n\n{#snippet overflowButtons()}\n  <CopyAssetsButton {assets} {useButton} />\n  <DownloadAssetsButton {assets} {useButton} />\n  <DeleteAssetsButton\n    {assets}\n    buttonDescription={$_('delete_asset')}\n    dialogDescription={$_('confirm_deleting_this_asset')}\n    onDelete={() => {\n      goBack(`/assets/${$selectedAssetFolder?.internalPath ?? '-/all'}`);\n    }}\n    {useButton}\n  />\n{/snippet}\n\n<Toolbar variant=\"primary\" aria-label={$_('primary')}>\n  <BackButton\n    aria-label={$_('cancel_editing')}\n    useShortcut={true}\n    onclick={() => {\n      goBack(`/assets/${$selectedAssetFolder?.internalPath ?? '-/all'}`);\n    }}\n  />\n  <h2 role=\"none\">\n    <TruncatedText>\n      {$overlaidAsset?.name}\n    </TruncatedText>\n  </h2>\n  {#if !$isSmallScreen}\n    {@render overflowButtons()}\n  {/if}\n  <EditOptionsButton asset={$overlaidAsset}>\n    {#snippet extraItems()}\n      {#if $isSmallScreen}\n        {@render overflowButtons()}\n      {/if}\n    {/snippet}\n  </EditOptionsButton>\n</Toolbar>\n","<script>\n  import { Icon } from '@sveltia/ui';\n  import { waitForVisibility } from '@sveltia/utils/element';\n  import { flushSync } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import { getAssetBlobURL, getAssetThumbnailURL } from '$lib/services/assets/info';\n  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  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 || !src) {\n      return;\n    }\n\n    if (\n      isImage\n        ? !(/** @type {HTMLImageElement} */ (mediaElement).complete)\n        : !(/** @type {HTMLMediaElement} */ (mediaElement).readyState)\n    ) {\n      // Not loaded yet; wait until it’s ready\n      await new Promise((resolve) => {\n        mediaElement?.addEventListener(\n          isImage ? 'load' : 'loadedmetadata',\n          () => {\n            resolve(undefined);\n          },\n          { once: true },\n        );\n      });\n    }\n\n    // Enable a dissolve transition\n    if (dissolve) {\n      await waitForVisibility(mediaElement);\n    }\n\n    loaded = true;\n\n    // Revoke the thumbnail blob URL\n    if (asset && isThumbnail && src.startsWith('blob:')) {\n      URL.revokeObjectURL(src);\n    }\n  };\n\n  $effect(() => {\n    if (asset && !blurImageURL) {\n      (async () => {\n        blurImageURL = await getAssetThumbnailURL(asset, { cacheOnly: true });\n      })();\n    }\n  });\n\n  $effect(() => {\n    if (mediaElement && asset) {\n      updateSrc();\n    }\n  });\n\n  $effect(() => {\n    if (mediaElement && src) {\n      checkLoaded();\n    }\n  });\n</script>\n\n<div\n  role=\"none\"\n  class=\"preview {variant}\"\n  class:cover\n  class:checkerboard\n  class:dissolve\n  class:loaded\n>\n  {#if hasError}\n    <Icon name=\"draft\" />\n  {:else if isImage}\n    <img {loading} {src} {alt} {...rest} bind:this={mediaElement} />\n  {:else if kind === 'video'}\n    <!-- svelte-ignore a11y_media_has_caption -->\n    <video {src} controls={controls || undefined} playsinline {...rest} bind:this={mediaElement}\n    ></video>\n  {:else if kind === 'audio'}\n    {#if controls}\n      <audio {src} controls playsinline {...rest} bind:this={mediaElement}></audio>\n    {:else}\n      <Icon name=\"audio_file\" />\n    {/if}\n  {:else}\n    <Icon name=\"draft\" />\n  {/if}\n  {#if blurBackground}\n    <div role=\"none\" class=\"blur\">\n      <div role=\"status\" class=\"overlay\">\n        {#if !isThumbnail && !loaded}\n          {$_('loading')}\n        {/if}\n      </div>\n      <img role=\"none\" loading=\"lazy\" src={blurImageURL} alt=\"\" class:loaded={!!blurImageURL} />\n    </div>\n  {/if}\n</div>\n\n<style lang=\"scss\">\n  .preview {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    position: relative;\n    width: 100%;\n    height: 100%;\n\n    &.tile {\n      border-width: 1px;\n      border-style: solid;\n      border-color: transparent;\n      padding: var(--tile-padding, 12px);\n\n      :global(.sui.icon) {\n        font-size: 48px;\n      }\n    }\n\n    &.icon {\n      border-radius: var(--sui-control-medium-border-radius);\n      width: var(--icon-size, 32px);\n      height: var(--icon-size, 32px);\n    }\n\n    &:is(.tile, .icon) {\n      overflow: hidden;\n      aspect-ratio: 1 / 1;\n\n      img {\n        // Prevent the image from being dragged\n        pointer-events: none;\n      }\n    }\n\n    .blur {\n      display: contents;\n\n      & > * {\n        position: absolute;\n        inset: 0;\n        pointer-events: none;\n      }\n\n      .overlay {\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        z-index: -1;\n        backdrop-filter: blur(32px) brightness(0.8);\n      }\n\n      img {\n        width: 100%;\n        height: 100%;\n        z-index: -2;\n        object-fit: cover;\n        transform: scale(1.2);\n\n        &.loaded {\n          opacity: 1;\n        }\n      }\n    }\n\n    &.cover {\n      padding: 0;\n\n      & > :is(:global(img, video)) {\n        flex: auto;\n      }\n    }\n\n    & > :is(:global(img, video)) {\n      flex: 0;\n      max-width: 100%;\n      max-height: 100%;\n    }\n\n    &.dissolve {\n      :is(:global(img, video)) {\n        opacity: 0;\n        transition: opacity 250ms;\n      }\n\n      &.loaded {\n        :is(:global(img, video)) {\n          opacity: 1;\n        }\n      }\n    }\n  }\n\n  img {\n    /* prettier-ignore */\n    .checkerboard & {\n      // hardcoded, the same color as the checkerboard in Photoshop\n      background-image:\n        linear-gradient(45deg, #ccc 25%, transparent 25%, transparent 75%, #ccc 75%),\n        linear-gradient(45deg, #ccc 25%, #fff 25%, #fff 75%, #ccc 75%);\n      background-size: 8px 8px;\n      background-position: 0 0, 4px 4px;\n    }\n\n    :not(.checkerboard) & {\n      // hardcoded, the same color as the transparent image preview in Chrome and Firefox\n      background-color: #e5e5e5;\n    }\n  }\n\n  :is(:global(img, video)) {\n    object-fit: contain;\n\n    &:not([src]) {\n      visibility: hidden;\n    }\n\n    .cover & {\n      object-fit: cover;\n      aspect-ratio: 1 / 1;\n    }\n  }\n</style>\n","<!--\n  @component\n  Implement a static map using Leaflet, showing a marker at the specified coordinates.\n  @see https://leafletjs.com/\n-->\n<script>\n  import { onMount } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import { getUnpkgURL, loadModule } from '$lib/services/app/dependencies';\n\n  /**\n   * @import 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  /**\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      })\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    new ResizeObserver(() => {\n      map?.invalidateSize();\n    }).observe(mapElement);\n\n    onReady?.({ leaflet, map });\n  };\n\n  onMount(() => {\n    init();\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 lang=\"scss\">\n  // Leaflet default styles copied from `node_modules/leaflet/dist/leaflet.css`. Somehow we cannot\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      cursor: -webkit-grab;\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      cursor: -webkit-grabbing;\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 { Button } from '@sveltia/ui';\n  import { getPathInfo } from '@sveltia/utils/file';\n  import { sleep } from '@sveltia/utils/misc';\n  import mime from 'mime';\n  import { _, locale as appLocale } from 'svelte-i18n';\n\n  import AssetPreview from '$lib/components/assets/shared/asset-preview.svelte';\n  import LeafletMap from '$lib/components/common/leaflet-map.svelte';\n  import { goto } from '$lib/services/app/navigation';\n  import { defaultAssetDetails, getAssetDetails } from '$lib/services/assets/info';\n  import { isMediaKind } from '$lib/services/assets/kinds';\n  import { getCollectionLabel } from '$lib/services/contents/collection';\n  import {\n    getCollectionFileLabel,\n    getCollectionFilesByEntry,\n  } from '$lib/services/contents/collection/files';\n  import { getAssociatedCollections } from '$lib/services/contents/entry';\n  import { getEntrySummary } from '$lib/services/contents/entry/summary';\n  import { DATE_TIME_FORMAT_OPTIONS } from '$lib/services/utils/date';\n  import { formatSize } from '$lib/services/utils/file';\n  import { formatDuration } from '$lib/services/utils/media/video';\n\n  /**\n   * @import { Asset, AssetDetails } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Asset} asset Asset.\n   * @property {boolean} [showPreview] Whether to show the media preview.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    asset,\n    showPreview = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {AssetDetails} */\n  let details = $state({ ...defaultAssetDetails });\n\n  // @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   * Format the date to a localized string.\n   * @param {Date} date Date to format.\n   * @returns {string} Formatted date string.\n   */\n  const formatDate = (date) =>\n    date.toLocaleString($appLocale ?? undefined, DATE_TIME_FORMAT_OPTIONS);\n\n  /**\n   * Update the properties above.\n   */\n  const updateProps = async () => {\n    details = asset ? await getAssetDetails(asset) : { ...defaultAssetDetails };\n  };\n\n  $effect(() => {\n    void [asset];\n    updateProps();\n  });\n</script>\n\n{#snippet usedEntryLink(\n  /** @type {Record<string, string>} */ { link, collectionLabel, entryLabel },\n)}\n  <p>\n    <Button role=\"link\" variant=\"link\" onclick={() => goto(link, { transitionType: 'forwards' })}>\n      <span role=\"none\">{collectionLabel} › {entryLabel}</span>\n    </Button>\n  </p>\n{/snippet}\n\n<div role=\"none\" class=\"detail\">\n  {#if showPreview && canPreview}\n    <div role=\"none\" class=\"preview\">\n      <AssetPreview\n        {kind}\n        {asset}\n        variant=\"tile\"\n        checkerboard={kind === 'image'}\n        controls={['audio', 'video'].includes(kind)}\n      />\n    </div>\n  {/if}\n  <section>\n    <h4>{$_('kind')}</h4>\n    <p>\n      {$_(`file_type_labels.${extension}`, {\n        default: mime.getType(path) ?? extension.toUpperCase(),\n      })}\n    </p>\n  </section>\n  {#if !!size}\n    <section>\n      <h4>{$_('size')}</h4>\n      <p>\n        {#key $appLocale}\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\">{publicURL}</a>\n      {:else}\n        –\n      {/if}\n    </p>\n  </section>\n  <section>\n    <h4>{$_('file_path')}</h4>\n    <p>\n      {#if repoBlobURL}\n        <a href={repoBlobURL}>/{path}</a>\n      {:else}\n        /{path}\n      {/if}\n    </p>\n  </section>\n  <section>\n    <h4>{$_('used_in')}</h4>\n    {#each usedEntries as entry (entry.id)}\n      {#await sleep() then}\n        {#each getAssociatedCollections(entry) as collection (collection.name)}\n          {#key $appLocale}\n            {@const collectionLabel = getCollectionLabel(collection)}\n            {#each getCollectionFilesByEntry(collection, entry) as file (file.name)}\n              {@render usedEntryLink({\n                link: `/collections/${collection.name}/entries/${file.name}`,\n                collectionLabel,\n                entryLabel: getCollectionFileLabel(file),\n              })}\n            {:else}\n              {@render usedEntryLink({\n                link: `/collections/${collection.name}/entries/${entry.subPath}`,\n                collectionLabel,\n                entryLabel: getEntrySummary(collection, entry, { useTemplate: true }),\n              })}\n            {/each}\n          {/key}\n        {/each}\n      {/await}\n    {:else}\n      <p>{$_('sort_keys.none')}</p>\n    {/each}\n  </section>\n  {#if commitAuthor}\n    <section>\n      <h4>{$_('sort_keys.commit_author')}</h4>\n      <p>{commitAuthor.name || commitAuthor.login || commitAuthor.email}</p>\n    </section>\n  {/if}\n  {#if commitDate}\n    <section>\n      <h4>{$_('sort_keys.commit_date')}</h4>\n      <p>{formatDate(commitDate)}</p>\n    </section>\n  {/if}\n  {#if createdDate}\n    <section>\n      <h4>{$_('created_date')}</h4>\n      <p>{formatDate(createdDate)}</p>\n    </section>\n  {/if}\n  {#if coordinates}\n    <section>\n      <h4>{$_('location')}</h4>\n      <LeafletMap {coordinates} />\n    </section>\n  {/if}\n</div>\n\n<style lang=\"scss\">\n  .detail {\n    flex: none;\n    overflow-x: hidden;\n    overflow-y: auto;\n    padding: 16px;\n    width: 320px;\n\n    .preview {\n      overflow: hidden;\n      margin: 0 0 16px;\n      border-radius: var(--sui-control-large-border-radius);\n      background-color: var(--sui-content-background-color);\n      aspect-ratio: 1 / 1;\n    }\n\n    section {\n      &:not(:last-child) {\n        margin: 0 0 16px;\n      }\n\n      & > :global(*) {\n        margin: 0 0 4px;\n        word-break: break-all;\n      }\n    }\n\n    h4 {\n      font-size: var(--sui-font-size-small);\n      font-weight: var(--sui-font-weight-bold);\n      color: var(--sui-secondary-foreground-color);\n    }\n  }\n</style>\n","<script>\n  import { EmptyState } from '@sveltia/ui';\n  import { isTextFileType } from '@sveltia/utils/file';\n  import { sanitize } from 'isomorphic-dompurify';\n  import { parse } from 'marked';\n  import { tick } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import Toolbar from '$lib/components/assets/details/toolbar.svelte';\n  import AssetPreview from '$lib/components/assets/shared/asset-preview.svelte';\n  import InfoPanel from '$lib/components/assets/shared/info-panel.svelte';\n  import { overlaidAsset } from '$lib/services/assets';\n  import { getAssetBlob } from '$lib/services/assets/info';\n  import { isMediaKind } from '$lib/services/assets/kinds';\n  import { showAssetOverlay } from '$lib/services/assets/view';\n\n  /** @type {HTMLElement | undefined} */\n  let wrapper = $state();\n  /** @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}></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 lang=\"scss\">\n  .wrapper {\n    position: fixed;\n    inset: 0;\n    z-index: 100;\n    display: flex;\n    flex-direction: column;\n    background-color: var(--sui-secondary-background-color);\n\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 { allAssets, focusedAsset, getAssetsByDirName, overlaidAsset } from '$lib/services/assets';\nimport { assetUpdatesToast } from '$lib/services/assets/data';\nimport { getAssetKind } from '$lib/services/assets/kinds';\nimport { backend } from '$lib/services/backends';\nimport { 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, originalAsset } = uploadingAssets;\n  const { slugify_filename: slugificationEnabled = false } = getDefaultMediaLibraryOptions().config;\n\n  const assetNamesInSameFolder =\n    folder?.internalPath !== undefined\n      ? getAssetsByDirName(folder.internalPath).map((a) => a.name.normalize())\n      : [];\n\n  return files.map((file) => {\n    const fileName =\n      originalAsset?.name ??\n      formatFileName(file.name, { slugificationEnabled, assetNamesInSameFolder });\n\n    if (!assetNamesInSameFolder.includes(fileName)) {\n      assetNamesInSameFolder.push(fileName);\n    }\n\n    return {\n      action: /** @type {CommitAction} */ (originalAsset ? 'update' : 'create'),\n      name: fileName,\n      path: originalAsset?.path ?? [folder?.internalPath, fileName].join('/'),\n      file,\n    };\n  });\n};\n\n/**\n * Update the asset stores with new assets, ensuring that focused and overlaid assets are refreshed,\n * and displays a toast notification about the asset updates.\n * @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(get(allAssets).find((a) => a.path === _focusedAsset.path));\n  }\n\n  // Replace the existing asset\n  if (_overlaidAsset) {\n    overlaidAsset.set(get(allAssets).find((a) => a.path === _overlaidAsset.path));\n  }\n\n  assetUpdatesToast.set({\n    ...UPDATE_TOAST_DEFAULT_STATE,\n    saved: true,\n    published: !!get(backend)?.isGit && !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 { Dialog, Switch, TextArea } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { editingAsset } from '$lib/services/assets';\n  import { saveAssets } from '$lib/services/assets/data/create';\n  import { getAssetBlob } from '$lib/services/assets/info';\n  import { showAssetOverlay } from '$lib/services/assets/view';\n\n  /**\n   * @import { Asset } from '$lib/types/private';\n   */\n\n  const asset = $derived($editingAsset);\n  let open = $state(false);\n  /** @type {Blob | undefined} */\n  let blob = $state();\n  /** @type {string | undefined} */\n  let originalValue = $state();\n  /** @type {string | undefined} */\n  let currentValue = $state();\n  /** @type {boolean | 'mixed'} */\n  let wrap = $state(false);\n\n  /**\n   * Initialize the state.\n   */\n  const initState = async () => {\n    blob = await getAssetBlob(/** @type {Asset} */ (asset));\n    originalValue = await blob.text();\n    currentValue = originalValue;\n    open = true;\n  };\n\n  /**\n   * Reset the state.\n   */\n  const resetState = () => {\n    $editingAsset = undefined;\n    blob = undefined;\n    originalValue = undefined;\n    currentValue = undefined;\n  };\n\n  /**\n   * Save the edited asset.\n   */\n  const saveAsset = async () => {\n    if (asset && blob && typeof currentValue === 'string') {\n      await saveAssets(\n        {\n          folder: asset.folder,\n          files: [new File([currentValue], asset.name, { type: blob.type })],\n          originalAsset: asset,\n        },\n        { commitType: 'uploadMedia' },\n      );\n    }\n  };\n\n  $effect(() => {\n    if (asset && blob === undefined) {\n      initState();\n    }\n  });\n\n  $effect(() => {\n    if (!$showAssetOverlay) {\n      open = false;\n    }\n  });\n</script>\n\n<Dialog\n  size=\"x-large\"\n  title={$_('edit_x', { values: { name: asset?.name } })}\n  bind:open\n  okLabel={$_('save')}\n  okDisabled={currentValue === originalValue}\n  okShortcuts=\"Accel+S\"\n  onOk={() => {\n    saveAsset();\n  }}\n  onClose={() => {\n    resetState();\n  }}\n>\n  <div role=\"none\" class=\"wrapper\" class:wrap>\n    <TextArea bind:value={currentValue} flex />\n  </div>\n  {#snippet footerExtra()}\n    <Switch label={$_('wrap_long_lines')} bind:checked={wrap} />\n  {/snippet}\n</Dialog>\n\n<style lang=\"scss\">\n  .wrapper {\n    display: contents;\n\n    :global {\n      textarea {\n        min-height: 40dvh;\n        max-height: 80dvh;\n        font-family: var(--sui-font-family-monospace);\n        font-size: var(--sui-font-size-monospace);\n        text-wrap: nowrap;\n        resize: vertical;\n      }\n\n      &.wrap textarea {\n        text-wrap: wrap;\n      }\n    }\n  }\n</style>\n","import { stripSlashes } from '@sveltia/utils/string';\n\nimport { fillTemplate } from '$lib/services/common/template';\nimport { getIndexFile } from '$lib/services/contents/collection/index-file';\nimport { getLocalePath } from '$lib/services/contents/i18n';\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/index-file';\n\n/**\n * @import {\n * EntryDraft,\n * EntrySlugVariants,\n * FillTemplateOptions,\n * InternalEntryCollection,\n * LocaleSlugMap,\n * } from '$lib/types/private';\n */\n\n/**\n * Get base options for {@link fillTemplate}.\n * @param {object} args Arguments.\n * @param {EntryDraft} args.draft Entry draft.\n * @returns {FillTemplateOptions} Options.\n */\nexport const getFillSlugOptions = ({ draft }) => {\n  const { collection, collectionFile, currentSlugs, currentValues, isIndexFile } = draft;\n\n  const {\n    _i18n: { defaultLocale },\n  } = collectionFile ?? collection;\n\n  return {\n    collection: /** @type {InternalEntryCollection} */ (collection),\n    content: {\n      ...currentValues[defaultLocale],\n      // Slug candidate for the default locale\n      _slug: currentSlugs?.[defaultLocale] ?? currentSlugs?._,\n    },\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 { isNew, collection, collectionFile, currentSlugs, currentValues, isIndexFile } = 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: { 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 || !draft.originalLocales[locale]) {\n    return fillTemplate(slugTemplate, {\n      collection,\n      locale,\n      content: {\n        // Merge the default locale content and localized content\n        ...currentValues[defaultLocale],\n        ...Object.fromEntries(\n          localizingKeyPaths.map((keyPath) => [keyPath, currentValues[locale]?.[keyPath]]),\n        ),\n        // 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 },\n    },\n  } = collectionFile ?? collection;\n\n  /**\n   * List of key paths that the value will be localized.\n   */\n  const localizingKeyPaths = [...slugTemplate.matchAll(/{{((?:fields\\.)?.+?)( \\| localize)?}}/g)]\n    .filter(([, , localize]) => !!localize)\n    .map(([, keyPath]) => keyPath);\n\n  if (i18nSingleFile || !localizingKeyPaths.length) {\n    return undefined;\n  }\n\n  return Object.fromEntries(\n    Object.entries(currentLocales).map(([locale]) => {\n      const slug =\n        locale === defaultLocale\n          ? defaultLocaleSlug\n          : getLocalizedSlug({ draft, locale, localizingKeyPaths });\n\n      return [locale, slug];\n    }),\n  );\n};\n\n/**\n * Get the canonical slug to be added to the content of each file when the slug is localized. It\n * helps Sveltia CMS and some frameworks to link localized files. The default property name is\n * `translationKey` used in Hugo’s multilingual support, and the default value is the default\n * locale’s slug.\n * @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 { 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 = folderPath.match(FOLDER_PATH_REGEX)?.groups?.path ?? folderPath;\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 {string} args.blobURL Blob URL of the file.\n * @param {EntryDraft} args.draft Entry draft.\n * @param {string} args.defaultLocaleSlug Default locale’s entry slug.\n * @param {FieldKeyPath} args.keyPath Field key path.\n * @param {FlattenedEntryContent} args.content Localized content.\n * @param {FileChange[]} args.changes Changeset.\n * @param {Asset[]} args.savingAssets List of assets to be saved.\n * @param {boolean} args.slugificationEnabled Whether the file name slugification is enabled.\n * @param {boolean} args.encodingEnabled Whether the file path encoding is enabled.\n */\nexport const replaceBlobURL = async ({\n  file,\n  folder,\n  blobURL,\n  draft,\n  defaultLocaleSlug,\n  keyPath,\n  content,\n  changes,\n  savingAssets,\n  slugificationEnabled,\n  encodingEnabled,\n}) => {\n  const sha = await getGitHash(file);\n  const dupFile = savingAssets.find((f) => f.sha === sha);\n\n  const {\n    savingAssetProps,\n    assetNamesInSameFolder,\n    assetFolderPaths: { resolvedInternalPath, resolvedPublicPath },\n  } = getAssetSavingInfo({ draft, defaultLocaleSlug, folder });\n\n  let fileName = '';\n\n  // Check if the file has already been added for other field or locale\n  if (dupFile) {\n    fileName = dupFile.name;\n  } else {\n    fileName = formatFileName(file.name, { slugificationEnabled, assetNamesInSameFolder });\n\n    const assetPath = resolvedInternalPath ? `${resolvedInternalPath}/${fileName}` : fileName;\n\n    assetNamesInSameFolder.push(fileName);\n    changes.push({ action: 'create', path: assetPath, data: file });\n\n    savingAssets.push({\n      ...savingAssetProps,\n      blobURL,\n      name: fileName,\n      path: assetPath,\n      sha,\n      size: file.size,\n      kind: getAssetKind(fileName),\n    });\n  }\n\n  let publicURL = resolvedPublicPath\n    ? `${resolvedPublicPath === '/' ? '' : resolvedPublicPath}/${fileName}`\n    : fileName;\n\n  if (encodingEnabled) {\n    publicURL = encodeFilePath(publicURL);\n  }\n\n  content[keyPath] = /** @type {string} */ (content[keyPath]).replaceAll(blobURL, publicURL);\n};\n","import { 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 { 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/helper';\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 * @import {\n * EntryDraft,\n * FlattenedEntryContent,\n * InternalEntryCollection,\n * InternalLocaleCode,\n * RawEntryContent,\n * } from '$lib/types/private';\n * @import { DateTimeField, Field } from '$lib/types/public';\n */\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 UUIDs added to list items\n  if (key.endsWith('.__sc_item_id')) {\n    delete unsortedMap[key];\n    return;\n  }\n\n  let value = unsortedMap[key];\n\n  // Use native date for TOML if a custom format is not defined\n  // @see https://github.com/squirrelchat/smol-toml?tab=readme-ov-file#dates\n  // @see https://toml.io/en/v1.0.0#offset-date-time\n  if (\n    isTomlOutput &&\n    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) => !_key.endsWith('.__sc_item_id') && !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 {boolean} [args.isIndexFile] Whether the corresponding entry is the collection’s special\n * index file used specifically in Hugo.\n * @param {boolean} [args.isTomlOutput] Whether the output it TOML format.\n * @returns {RawEntryContent} Unflattened entry content sorted by fields.\n */\nconst finalizeContent = ({\n  collectionName,\n  fileName,\n  fields,\n  locale,\n  valueMap,\n  canonicalSlugKey,\n  isIndexFile = false,\n  isTomlOutput = false,\n}) => {\n  /** @type {FlattenedEntryContent} */\n  const unsortedMap = toRaw(valueMap);\n  /** @type {FlattenedEntryContent} */\n  const sortedMap = {};\n\n  const { omit_empty_optional_fields: omitEmptyOptionalFields = false } =\n    get(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  // 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      let regex = wildcardKeyPathRegexCache.get(keyPath);\n\n      if (!regex) {\n        regex = new RegExp(\n          `^${escapeRegExp(keyPath.replaceAll('*', '\\\\d+')).replaceAll('\\\\\\\\d\\\\+', '\\\\d+')}$`,\n        );\n        wildcardKeyPathRegexCache.set(keyPath, regex);\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', 'toml-frontmatter'].includes(_file.format);\n\n  const content = finalizeContent({\n    collectionName,\n    fileName: collectionFile?.name,\n    fields,\n    locale,\n    valueMap,\n    canonicalSlugKey,\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 { 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 { customFileFormatRegistry } from '$lib/services/contents/file/config';\n\n/**\n * @import { FileConfig, InternalLocaleCode, RawEntryContent } from '$lib/types/private';\n * @import { JsonFormatOptions, YamlFormatOptions } from '$lib/types/public';\n */\n\n/**\n * Format the given object as a JSON document using the built-in method.\n * @param {Record<string, any>} obj Object to be formatted.\n * @param {JsonFormatOptions} [options] Options.\n * @returns {string} Formatted document.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify\n */\nexport const formatJSON = (obj, options = get(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 { format, fmDelimiters, yamlQuote = false } = _file;\n  const [sd, ed] = fmDelimiters ?? ['---', '---'];\n  const body = typeof content.body === 'string' ? content.body : '';\n\n  delete content.body;\n\n  // Support Markdown without a front matter block, particularly for VitePress\n  if (!Object.keys(content).length) {\n    return `${body}\\n`;\n  }\n\n  try {\n    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${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 (/^(?:(?:yaml|toml|json)-)?frontmatter$/.test(format)) {\n    return formatFrontMatter({ content, _file });\n  }\n\n  return '';\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';\nimport { getDefaultMediaLibraryOptions } from '$lib/services/integrations/media-libraries/default';\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 { slugify_filename: slugificationEnabled = false } = getDefaultMediaLibraryOptions().config;\n  const { encode_file_path: encodingEnabled = false } = get(cmsConfig)?.output ?? {};\n  /** @type {GetFieldArgs} */\n  const getFieldArgs = { collectionName, fileName, keyPath: '', valueMap: {}, isIndexFile };\n\n  const replaceBlobBaseArgs = {\n    draft,\n    defaultLocaleSlug,\n    changes,\n    savingAssets,\n    slugificationEnabled,\n  };\n\n  const localizedEntryMap = Object.fromEntries(\n    await Promise.all(\n      Object.entries(currentValues).map(async ([locale, content]) => {\n        const localizedSlug = localizedSlugs?.[locale];\n        const slug = localizedSlug ?? defaultLocaleSlug;\n        const path = createEntryPath({ draft, locale, slug });\n\n        if (!currentLocales[locale]) {\n          return [locale, { path }];\n        }\n\n        // Add the canonical slug\n        content[canonicalSlugKey] = canonicalSlug;\n\n        // Normalize data\n        await Promise.all(\n          Object.entries(content).map(async ([keyPath, value]) => {\n            if (value === undefined) {\n              delete content[keyPath];\n\n              return;\n            }\n\n            if (typeof value !== 'string') {\n              return;\n            }\n\n            // Remove leading & trailing whitespace\n            content[keyPath] = value.trim();\n\n            const matches = [...value.matchAll(getBlobRegex('g'))];\n\n            if (!matches.length) {\n              return;\n            }\n\n            const 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 } = files[blobURL] ?? {};\n\n                if (file) {\n                  await replaceBlobURL({ ...replaceBlobArgs, file, folder, blobURL });\n                }\n              }),\n            );\n          }),\n        );\n\n        return [locale, { slug, path, content: toRaw(content) }];\n      }),\n    ),\n  );\n\n  return { localizedEntryMap, changes, savingAssets };\n};\n\n/**\n * Get the previous SHA of the file from the cache database.\n * @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 },\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  return {\n    action: isNew ? 'create' : renamed ? 'move' : 'update',\n    slug,\n    path,\n    previousPath: renamed ? previousPath : undefined,\n    previousSha: await getPreviousSha({ cacheDB, previousPath }),\n    data: await formatEntryFile({\n      content: i18nEnabled\n        ? Object.fromEntries(\n            Object.entries(savingEntry.locales)\n              .filter(([, le]) => !!le.content)\n              .map(([locale, le]) => [\n                locale,\n                serializeContent({ draft, locale, valueMap: le.content }),\n              ]),\n          )\n        : serializeContent({ draft, locale: '_default', valueMap: content }),\n      _file,\n    }),\n  };\n};\n\n/**\n * Get file change information for the entry draft, specifically for a multi-file entry.\n * @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 },\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) {\n    changes.push(await getSingleFileChange({ ...getFileChangeArgs }));\n  } else {\n    await Promise.all(\n      allLocales.map(async (locale) => {\n        const change = await getMultiFileChange({ ...getFileChangeArgs, locale });\n\n        if (change) {\n          changes.push(change);\n        }\n      }),\n    );\n  }\n\n  return { savingEntry, savingAssets, changes };\n};\n","import { getPathInfo } from '@sveltia/utils/file';\nimport { get } from 'svelte/store';\n\nimport { allAssets, focusedAsset, overlaidAsset } from '$lib/services/assets';\nimport { assetUpdatesToast } from '$lib/services/assets/data';\nimport { getAssetFoldersByPath, globalAssetFolder } from '$lib/services/assets/folders';\nimport { getAssetBlob, getAssetPublicURL } from '$lib/services/assets/info';\nimport { saveChanges } from '$lib/services/backends/save';\nimport { UPDATE_TOAST_DEFAULT_STATE } from '$lib/services/contents/collection/data';\nimport { getEntriesByAssetURL } from '$lib/services/contents/collection/entries';\nimport { getCollectionFilesByEntry } from '$lib/services/contents/collection/files';\nimport { getIndexFile, isCollectionIndexFile } from '$lib/services/contents/collection/index-file';\nimport { createSavingEntryData } from '$lib/services/contents/draft/save/changes';\nimport { getSlugs } from '$lib/services/contents/draft/slugs';\nimport { getAssociatedCollections } from '$lib/services/contents/entry';\n\n/**\n * @import {\n * Asset,\n * AssetFolderInfo,\n * Entry,\n * EntryDraft,\n * FileChange,\n * 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    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 _allAssets = get(allAssets);\n  const focusedAssetPath = get(focusedAsset)?.path;\n  const _focusedAsset = movedAssets.find((a) => a.asset.path === focusedAssetPath);\n  const overlaidAssetPath = get(overlaidAsset)?.path;\n  const _overlaidAsset = movedAssets.find((a) => a.asset.path === overlaidAssetPath);\n\n  // Replace the existing asset\n  if (_focusedAsset) {\n    focusedAsset.set(_allAssets.find((a) => a.path === _focusedAsset.path));\n  }\n\n  // Replace the existing asset\n  if (_overlaidAsset) {\n    overlaidAsset.set(_allAssets.find((a) => a.path === _overlaidAsset.path));\n  }\n\n  assetUpdatesToast.set({\n    ...UPDATE_TOAST_DEFAULT_STATE,\n    moved: action === 'move',\n    renamed: action === 'rename',\n    count: movedAssets.length,\n  });\n};\n\n/**\n * Move or rename assets while updating links in the entries.\n * @param {'move' | 'rename'} action Action type.\n * @param {MovingAsset[]} movingAssets Assets to be moved/renamed.\n */\nexport const moveAssets = async (action, movingAssets) => {\n  const _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 { Dialog, TextInput } from '@sveltia/ui';\n  import { getPathInfo } from '@sveltia/utils/file';\n  import { _ } from 'svelte-i18n';\n\n  import { goto, parseLocation } from '$lib/services/app/navigation';\n  import { getAssetsByDirName, renamingAsset } from '$lib/services/assets';\n  import { moveAssets } from '$lib/services/assets/data/move';\n  import { getAssetDetails } from '$lib/services/assets/info';\n  import { showAssetOverlay } from '$lib/services/assets/view';\n\n  /**\n   * @import { Entry } from '$lib/types/private';\n   */\n\n  const componentId = $props.id();\n\n  let open = $state(false);\n  /** @type {{ dirname?: string, filename: string, extension?: string }} */\n  let pathInfo = $state({ filename: '' });\n  let newName = $state('');\n  /** @type {string[]} */\n  let otherNames = $state([]);\n  /** @type {Entry[]} */\n  let usedEntries = $state([]);\n\n  const asset = $derived($renamingAsset);\n  const { dirname, filename, extension } = $derived(pathInfo);\n\n  const error = $derived.by(() => {\n    if (!newName.trim()) return 'empty';\n    if (newName.includes('/')) return 'character';\n    if (otherNames.includes(`${newName}${extension ? `.${extension}` : ''}`)) return 'duplicate';\n    return undefined;\n  });\n\n  const invalid = $derived(!!error);\n\n  /**\n   * Initialize the state.\n   */\n  const initState = async () => {\n    if (asset) {\n      pathInfo = getPathInfo(asset.path);\n      newName = filename;\n      otherNames = getAssetsByDirName(/** @type {string} */ (dirname))\n        .map((a) => a.name)\n        .filter((n) => n !== asset.name);\n      ({ usedEntries } = await getAssetDetails(asset));\n      open = true;\n    }\n  };\n\n  /**\n   * Rename the asset by moving it to a new path. Also, update the URL hash silently to reflect the\n   * new asset name if the rename dialog was opened in the asset details view.\n   */\n  const renameAsset = async () => {\n    if (!asset) {\n      return;\n    }\n\n    const oldPath = asset.path;\n    const newPath = `${dirname}/${newName}${extension ? `.${extension}` : ''}`;\n\n    await moveAssets('rename', [{ asset, path: newPath }]);\n\n    if (parseLocation().path === `/assets/${oldPath}`) {\n      await goto(`/assets/${newPath}`, { replaceState: true, notifyChange: false });\n    }\n  };\n\n  $effect(() => {\n    if (asset) {\n      initState();\n    }\n  });\n\n  $effect(() => {\n    if (!$showAssetOverlay) {\n      open = false;\n      $renamingAsset = undefined;\n    }\n  });\n</script>\n\n<Dialog\n  title={$_('rename_x', { values: { name: asset?.name } })}\n  bind:open\n  okLabel={$_('rename')}\n  okDisabled={newName === filename || invalid}\n  onOk={() => {\n    renameAsset();\n  }}\n  onClose={() => {\n    $renamingAsset = undefined;\n  }}\n>\n  <p>\n    {$_(\n      usedEntries.length === 0\n        ? 'enter_new_name_for_asset'\n        : usedEntries.length === 1\n          ? 'enter_new_name_for_asset_with_one_entry'\n          : 'enter_new_name_for_asset_with_many_entries',\n      { values: { count: usedEntries.length } },\n    )}\n  </p>\n  <div role=\"none\">\n    <TextInput bind:value={newName} flex {invalid} aria-errormessage=\"{componentId}-error\" />\n    {#if extension}\n      <span role=\"none\">.{extension}</span>\n    {/if}\n  </div>\n  <div role=\"none\" class=\"error\" id=\"{componentId}-error\">\n    {#if invalid}\n      {$_(`enter_new_name_for_asset_error.${error}`)}\n    {/if}\n  </div>\n</Dialog>\n\n<style lang=\"scss\">\n  p {\n    margin: 0 0 8px;\n  }\n\n  div {\n    display: flex;\n    align-items: center;\n    gap: 4px;\n  }\n\n  .error {\n    margin: 0;\n    color: var(--sui-error-foreground-color);\n    font-size: var(--sui-font-size-small);\n  }\n</style>\n","<script>\n  import { Checkbox, GridCell, GridRow, TruncatedText } from '@sveltia/ui';\n\n  import AssetPreview from '$lib/components/assets/shared/asset-preview.svelte';\n  import { goto } from '$lib/services/app/navigation';\n  import { focusedAsset, selectedAssets } from '$lib/services/assets';\n  import { canPreviewAsset } from '$lib/services/assets/kinds';\n  import { listedAssets } from '$lib/services/assets/view';\n  import { isMediumScreen, isSmallScreen } from '$lib/services/user/env';\n\n  /**\n   * @import { Asset, ViewType } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Asset} asset Asset.\n   * @property {ViewType} viewType View type.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    asset,\n    viewType,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const { name, kind } = $derived(asset);\n\n  /**\n   * Update the asset selection.\n   * @param {boolean} selected Whether the current asset item is selected.\n   */\n  const updateSelection = (selected) => {\n    selectedAssets.update((assets) => {\n      const index = assets.indexOf(asset);\n\n      if (selected && index === -1) {\n        assets.push(asset);\n      }\n\n      if (!selected && index > -1) {\n        assets.splice(index, 1);\n      }\n\n      return assets;\n    });\n  };\n</script>\n\n<!-- @todo Add support for drag to move. -->\n\n<GridRow\n  aria-rowindex={$listedAssets.indexOf(asset)}\n  onChange={(event) => {\n    updateSelection(event.detail.selected);\n  }}\n  onfocus={() => {\n    $focusedAsset = asset;\n  }}\n  onclick={() => {\n    if (($isSmallScreen || $isMediumScreen) && $focusedAsset && canPreviewAsset($focusedAsset)) {\n      goto(`/assets/${$focusedAsset.path}`, { transitionType: 'forwards' });\n    }\n  }}\n  ondblclick={() => {\n    if ($focusedAsset && canPreviewAsset($focusedAsset)) {\n      goto(`/assets/${$focusedAsset.path}`, { transitionType: 'forwards' });\n    }\n  }}\n>\n  {#if !($isSmallScreen || $isMediumScreen)}\n    <GridCell class=\"checkbox\">\n      <Checkbox\n        role=\"none\"\n        tabindex=\"-1\"\n        checked={$selectedAssets.includes(asset)}\n        onChange={({ detail: { checked } }) => {\n          updateSelection(checked);\n        }}\n      />\n    </GridCell>\n  {/if}\n  <GridCell class=\"image\">\n    <AssetPreview\n      {kind}\n      {asset}\n      variant={viewType === 'list' ? 'icon' : 'tile'}\n      cover={$isSmallScreen}\n      checkerboard={kind === 'image'}\n    />\n  </GridCell>\n  {#if !$isSmallScreen || viewType === 'list'}\n    <GridCell class=\"title\">\n      <div role=\"none\" class=\"label\">\n        <TruncatedText lines={2}>\n          {name}\n        </TruncatedText>\n      </div>\n    </GridCell>\n  {/if}\n</GridRow>\n\n<style lang=\"scss\">\n  .label {\n    word-break: break-all;\n  }\n</style>\n","<script>\n  import AssetPreview from '$lib/components/assets/shared/asset-preview.svelte';\n\n  /**\n   * @import { Asset } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {'lazy' | 'eager'} [loading] Loading method.\n   * @property {Asset} [asset] Asset.\n   * @property {string} [src] Source URL.\n   * @property {'tile' | 'icon'} [variant] Style variant.\n   * @property {boolean} [blurBackground] Whether to show a blurred background (like Slack’s media\n   * overlay).\n   * @property {boolean} [cover] Whether to use `object-fit: cover`.\n   * @property {boolean} [checkerboard] Whether to show a checkerboard background below a\n   * transparent image.\n   * @property {string} [alt] Alt text for the image.\n   */\n\n  /** @type {Props & Record<string, any>} */\n  let {\n    /* eslint-disable prefer-const */\n    loading = 'lazy',\n    asset = undefined,\n    src = undefined,\n    variant = undefined,\n    blurBackground = false,\n    cover = false,\n    checkerboard = false,\n    alt = '',\n    ...rest\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<AssetPreview\n  kind=\"image\"\n  {loading}\n  {asset}\n  {src}\n  {variant}\n  {blurBackground}\n  {cover}\n  {checkerboard}\n  {alt}\n  {...rest}\n/>\n","<script>\n  import { Button, Icon, TruncatedText } from '@sveltia/ui';\n  import { getPathInfo } from '@sveltia/utils/file';\n  import { sleep } from '@sveltia/utils/misc';\n  import { _, locale as appLocale } from 'svelte-i18n';\n\n  import Image from '$lib/components/assets/shared/image.svelte';\n  import { formatSize } from '$lib/services/utils/file';\n  import { SUPPORTED_IMAGE_TYPES } from '$lib/services/utils/media/image';\n\n  /**\n   * @typedef {object} Props\n   * @property {File[]} files File list.\n   * @property {WeakMap<File, File>} [transformedFileMap] Mapping of transformed files and the\n   * originals.\n   * @property {boolean} [removable] Whether to show the Remove button on each row.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    files = $bindable([]),\n    transformedFileMap = undefined,\n    removable = true,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div role=\"list\" class=\"files\">\n  {#each files as file, index (`${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}\n              {$_('file_meta', {\n                values: {\n                  type: $_(`file_type_labels.${file.type.split('/')[1]}`, {\n                    default: getPathInfo(name).extension?.toUpperCase(),\n                  }),\n                  size: formatSize(size),\n                },\n              })}\n            {/key}\n            {#if originalFile && originalFile.type !== file.type}\n              {$_('file_meta_converted_from_x', {\n                values: {\n                  type: $_(`file_type_labels.${originalFile.type.split('/')[1]}`, {\n                    default: getPathInfo(originalFile.name).extension?.toUpperCase(),\n                  }),\n                },\n              })}\n            {/if}\n          </div>\n        </div>\n        <Button\n          variant=\"ghost\"\n          iconic\n          aria-label={$_('remove')}\n          hidden={!removable || files.length === 1}\n          onclick={(event) => {\n            event.stopPropagation();\n            files.splice(index, 1);\n          }}\n        >\n          <Icon name=\"close\" />\n        </Button>\n      </div>\n    {/await}\n  {/each}\n</div>\n\n<style lang=\"scss\">\n  .files {\n    display: flex;\n    flex-direction: column;\n    gap: 16px;\n    margin: 0 8px;\n  }\n\n  .file {\n    display: flex;\n    align-items: center;\n    gap: 16px;\n    overflow: hidden;\n\n    :global(.preview) {\n      flex: none;\n    }\n\n    .image {\n      flex: none;\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      width: 40px;\n      height: 40px;\n      aspect-ratio: 1 / 1;\n      object-fit: cover;\n      border-radius: var(--sui-control-medium-border-radius);\n      background-color: var(--sui-tertiary-background-color);\n    }\n\n    .info {\n      flex: auto;\n      display: flex;\n      flex-direction: column;\n      gap: 4px;\n      overflow: hidden;\n      text-align: 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 { AlertDialog, Button, FilePicker, Icon } from '@sveltia/ui';\n  import { scanFiles } from '@sveltia/utils/file';\n  import { onMount } from 'svelte';\n  import { _, locale as appLocale } from 'svelte-i18n';\n\n  import UploadAssetsPreview from '$lib/components/assets/shared/upload-assets-preview.svelte';\n  import { getListFormatter } from '$lib/services/contents/i18n';\n  import { hasMouse } from '$lib/services/user/env';\n  import { SUPPORTED_IMAGE_TYPES } from '$lib/services/utils/media/image';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [accept] The `accept` attribute for the `<input type=\"file\">`.\n   * @property {boolean} [disabled] Whether to disable new file selection.\n   * @property {boolean} [multiple] Whether to accept multiple files.\n   * @property {boolean} [showUploadButton] Whether to show the upload button.\n   * @property {boolean} [showFilePreview] Whether to show file preview after files are selected.\n   * @property {(detail: { files: File[] }) => void} [onDrop] Custom `Drop` event handler.\n   * @property {Snippet} [children] Slot content.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    accept = undefined,\n    disabled = false,\n    multiple = false,\n    showUploadButton = false,\n    showFilePreview = false,\n    onDrop = undefined,\n    children = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {HTMLElement | undefined} */\n  let dropTarget = $state();\n  let dragging = $state(false);\n  let typeMismatch = $state(false);\n  let showTypeMismatchAlertDialog = $state(false);\n  /** @type {FilePicker | undefined} */\n  let filePicker = $state();\n  /** @type {File[]}  */\n  let files = $state([]);\n\n  const showDefaultContent = $derived(showUploadButton || (showFilePreview && files.length));\n\n  /**\n   * Open the file picker to let the user choose file(s).\n   */\n  export const openFilePicker = () => {\n    filePicker?.open();\n  };\n\n  /**\n   * Reset the file list.\n   */\n  export const reset = () => {\n    // 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  onMount(() => {\n    dropTarget?.addEventListener('Select', (event) => {\n      onDrop?.({ files: /** @type {CustomEvent} */ (event).detail.files });\n    });\n  });\n\n  $effect(() => {\n    if (!showDefaultContent && typeMismatch) {\n      showTypeMismatchAlertDialog = true;\n    }\n  });\n</script>\n\n{#snippet typeMismatchAlert()}\n  {#if accept === SUPPORTED_IMAGE_TYPES.join(',')}\n    {$_('dropped_image_type_mismatch')}\n  {:else}\n    {$_('dropped_file_type_mismatch', {\n      values: {\n        type: getListFormatter(/** @type {string} */ ($appLocale), {\n          type: 'disjunction',\n        }).format(/** @type {string} */ (accept).split(/,\\s*/)),\n      },\n    })}\n  {/if}\n{/snippet}\n\n<div\n  bind:this={dropTarget}\n  role=\"none\"\n  class=\"drop-target\"\n  ondragover={(event) => {\n    event.preventDefault();\n\n    if (disabled || !event.dataTransfer) {\n      return;\n    }\n\n    event.dataTransfer.dropEffect = 'copy';\n    dragging = true;\n    typeMismatch = false;\n  }}\n  ondragleave={(event) => {\n    event.preventDefault();\n\n    if (disabled) {\n      return;\n    }\n\n    dragging = false;\n  }}\n  ondragend={(event) => {\n    event.preventDefault();\n\n    if (disabled) {\n      return;\n    }\n\n    dragging = false;\n  }}\n  ondrop={async (event) => {\n    event.preventDefault();\n\n    if (disabled || !event.dataTransfer) {\n      return;\n    }\n\n    dragging = false;\n\n    const filteredFileList = await scanFiles(event.dataTransfer, { accept });\n\n    if (filteredFileList.length) {\n      updateFileList(filteredFileList);\n    } else {\n      typeMismatch = true;\n    }\n  }}\n>\n  <!--\n    File(s) can be selected when `openFilePicker()` is called from outside the component, typically\n    with an external upload button. In that case, the file preview, if enabled, should replace the\n    default slot content.\n  -->\n  {#if showDefaultContent}\n    <div role=\"none\" class=\"content\">\n      {#if showUploadButton}\n        <div role=\"none\">\n          {#if $hasMouse}\n            {$_(multiple ? 'drop_files_or_click_to_browse' : 'drop_file_or_click_to_browse')}\n          {:else}\n            {$_('tap_to_browse')}\n          {/if}\n        </div>\n        <div role=\"none\">\n          <Button\n            variant=\"primary\"\n            label={$_(multiple ? 'choose_files' : 'choose_file')}\n            {disabled}\n            onclick={() => {\n              openFilePicker();\n            }}\n          >\n            {#snippet startIcon()}\n              <Icon name=\"cloud_upload\" />\n            {/snippet}\n          </Button>\n        </div>\n        {#if typeMismatch}\n          <div role=\"alert\">\n            {@render typeMismatchAlert()}\n          </div>\n        {/if}\n      {/if}\n      {#if showFilePreview && files.length}\n        <UploadAssetsPreview bind:files />\n      {/if}\n    </div>\n  {:else}\n    {@render children?.()}\n  {/if}\n  {#if dragging}\n    <div role=\"none\" class=\"drop-indicator\">\n      <div role=\"none\">\n        <Icon name=\"download\" />\n        <span role=\"none\">{$_(multiple ? 'drop_files_here' : 'drop_file_here')}</span>\n      </div>\n    </div>\n  {/if}\n</div>\n\n<FilePicker\n  {accept}\n  {multiple}\n  bind:this={filePicker}\n  onSelect={({ files: _files }) => {\n    updateFileList(_files);\n  }}\n/>\n\n{#if !showDefaultContent}\n  <AlertDialog bind:open={showTypeMismatchAlertDialog} title={$_('unsupported_file_type')}>\n    {@render typeMismatchAlert()}\n  </AlertDialog>\n{/if}\n\n<style lang=\"scss\">\n  .drop-target {\n    display: flex;\n    flex-direction: column;\n    position: relative;\n    overflow: hidden;\n    height: 100%;\n    pointer-events: auto;\n\n    :global {\n      & > .group {\n        overflow-y: auto;\n        padding: 16px;\n        width: 100%;\n        height: 100%;\n      }\n\n      button:not(:disabled) {\n        pointer-events: auto;\n      }\n    }\n  }\n\n  .drop-indicator {\n    position: absolute;\n    inset: 0;\n    z-index: 10;\n    border-radius: var(--sui-control-large-border-radius);\n    background-color: hsl(var(--sui-background-color-4-hsl) / 80%);\n    -webkit-backdrop-filter: blur(8px);\n    backdrop-filter: blur(8px);\n    text-align: center;\n    pointer-events: none;\n\n    div {\n      position: absolute;\n      inset: 0;\n      display: flex;\n      flex-direction: column;\n      justify-content: center;\n      align-items: center;\n      gap: 4px;\n      border: 4px dashed var(--sui-primary-accent-color);\n      border-radius: var(--sui-control-large-border-radius);\n      font-size: var(--sui-font-size-x-large);\n\n      :global(.icon) {\n        color: var(--sui-secondary-foreground-color);\n        font-size: 48px;\n      }\n    }\n  }\n\n  .content {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    gap: 16px;\n    overflow: auto;\n    height: 100%;\n    min-height: 320px;\n    text-align: center;\n  }\n</style>\n","<script>\n  import { Button, Icon } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { canCreateAsset, targetAssetFolder } from '$lib/services/assets/folders';\n  import { showUploadAssetsDialog } from '$lib/services/assets/view';\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [label] Button label. If `undefined`, the button will be iconic.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    label = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const disabled = $derived(!canCreateAsset($targetAssetFolder));\n</script>\n\n<Button\n  variant=\"primary\"\n  iconic={!label}\n  {disabled}\n  {label}\n  aria-label={$_('upload_assets')}\n  onclick={() => {\n    $showUploadAssetsDialog = true;\n  }}\n>\n  {#snippet startIcon()}\n    <Icon name=\"cloud_upload\" />\n  {/snippet}\n</Button>\n","<!--\n  @component A container for the entry list or asset list.\n-->\n<script>\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Snippet} [children] Slot content.\n   */\n\n  /** @type {Props & Record<string, any>} */\n  let {\n    /* eslint-disable prefer-const */\n    children = undefined,\n    ...rest\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div role=\"group\" class=\"list-container\" {...rest}>\n  {@render children?.()}\n</div>\n\n<style lang=\"scss\">\n  .list-container {\n    --icon-size: 36px;\n\n    flex: auto;\n    position: relative;\n    height: 100%;\n    overflow-x: hidden;\n    overflow-y: auto;\n    overscroll-behavior-y: contain;\n  }\n</style>\n","<!--\n  @component A wrapper of the `Grid` component that can display a list of entries, files or assets\n  in a simple table or grid.\n-->\n<script>\n  import { Grid } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import { ViewType } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {ViewType} viewType View type.\n   * @property {Snippet} [children] Slot content.\n   */\n\n  /** @type {Props & Record<string, any>} */\n  let {\n    /* eslint-disable prefer-const */\n    viewType,\n    children = undefined,\n    ...rest\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div role=\"none\" class=\"{viewType}-view\">\n  {#await sleep() then}\n    <Grid multiple clickToSelect={false} {...rest}>\n      {@render children?.()}\n    </Grid>\n  {/await}\n</div>\n\n<style lang=\"scss\">\n  :is(.grid-view, .list-view) {\n    display: block;\n    padding: 0 16px 16px;\n    height: 100%;\n    overflow-y: auto;\n  }\n\n  .grid-view {\n    @media (width < 768px) {\n      padding: 4px;\n    }\n\n    :global {\n      .row-group-caption {\n        display: block;\n        grid-column: 1 / -1; // span the entire row\n\n        th {\n          display: block;\n        }\n      }\n\n      .row-group:not(:first-child) .row-group-caption {\n        margin-top: 16px;\n      }\n\n      .grid-body {\n        display: grid;\n        grid-template-columns: repeat(auto-fill, minmax(var(--grid-size, 200px), 1fr));\n        gap: 16px;\n        border-width: 0;\n\n        @media (width < 768px) {\n          grid-template-columns: repeat(auto-fill, minmax(var(--grid-size, 160px), 1fr));\n          gap: 8px;\n        }\n      }\n\n      .grid-row {\n        display: block;\n        position: relative;\n        overflow: hidden;\n        height: auto;\n        text-align: 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 { EmptyState, GridBody, InfiniteScroll } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import { _ } from 'svelte-i18n';\n\n  import AssetListItem from '$lib/components/assets/list/asset-list-item.svelte';\n  import DropZone from '$lib/components/assets/shared/drop-zone.svelte';\n  import UploadAssetsButton from '$lib/components/assets/toolbar/upload-assets-button.svelte';\n  import ListContainer from '$lib/components/common/list-container.svelte';\n  import ListingGrid from '$lib/components/common/listing-grid.svelte';\n  import { uploadingAssets } from '$lib/services/assets';\n  import { canCreateAsset, targetAssetFolder } from '$lib/services/assets/folders';\n  import { assetGroups, currentView, listedAssets } from '$lib/services/assets/view';\n\n  /**\n   * @import { Asset } from '$lib/types/private';\n   */\n\n  const viewType = $derived($currentView.type);\n  const folder = $derived($targetAssetFolder);\n  const uploadDisabled = $derived(!canCreateAsset(folder));\n</script>\n\n<ListContainer aria-label={$_('asset_list')}>\n  <DropZone\n    disabled={uploadDisabled}\n    multiple={true}\n    onDrop={({ files }) => {\n      $uploadingAssets = { folder, files };\n    }}\n  >\n    {#if Object.values($assetGroups).flat(1).length}\n      <ListingGrid\n        id=\"asset-list\"\n        {viewType}\n        aria-label={$_('assets')}\n        aria-rowcount={$listedAssets.length}\n      >\n        {#each Object.entries($assetGroups) as [name, assets] (name)}\n          {#await sleep() then}\n            <GridBody label={name !== '*' ? name : undefined}>\n              <InfiniteScroll items={assets} itemKey=\"path\">\n                {#snippet renderItem(/** @type {Asset} */ asset)}\n                  {#key asset.sha}\n                    {#await sleep() then}\n                      <AssetListItem {asset} {viewType} />\n                    {/await}\n                  {/key}\n                {/snippet}\n              </InfiniteScroll>\n            </GridBody>\n          {/await}\n        {/each}\n      </ListingGrid>\n    {:else}\n      <EmptyState>\n        <span role=\"none\">{$_('no_files_found')}</span>\n        {#if !uploadDisabled}\n          <UploadAssetsButton label={$_('upload_assets')} />\n        {/if}\n      </EmptyState>\n    {/if}\n  </DropZone>\n</ListContainer>\n","import { writable } from 'svelte/store';\n\n/**\n * @import { Writable } from 'svelte/store';\n */\n\n/**\n * @type {Writable<'contents' | 'assets' | null>}\n */\nexport const searchMode = writable(null);\n\n/**\n * @type {Writable<string>}\n */\nexport const searchTerms = writable('');\n","<script>\n  import { SearchBar } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { goBack, goto, parseLocation } from '$lib/services/app/navigation';\n  import { searchMode, searchTerms } from '$lib/services/search';\n\n  /**\n   * @typedef {object} Props\n   * @property {(event: MouseEvent) => void} [onclick] `click` event handler.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    onclick = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /**\n   * Navigate to the search results page if search terms are given, or go back the previous page.\n   * @param {string} terms New search terms.\n   */\n  const navigate = (terms) => {\n    const hadTerms = !!$searchTerms;\n    const { path } = parseLocation();\n    const searching = path.startsWith('/search/');\n\n    $searchTerms = terms;\n\n    if (terms) {\n      goto(`/search/${terms}`, { replaceState: searching });\n    } else if (hadTerms && searching) {\n      goBack('/collections');\n    }\n  };\n\n  /** @type {any | undefined} */\n  let searchBar = $state();\n\n  $effect(() => {\n    // Restore search terms when the page is reloaded\n    if (searchBar && $searchTerms !== searchBar?.value) {\n      searchBar.value = $searchTerms;\n    }\n  });\n</script>\n\n<div role=\"none\" class=\"wrapper\">\n  {#if $searchMode}\n    <SearchBar\n      bind:this={searchBar}\n      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 lang=\"scss\">\n  .wrapper {\n    display: contents;\n    --sui-textbox-border-width: 0;\n  }\n</style>\n","<script>\n  import { Icon, Listbox, Option, OptionGroup } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import equal from 'fast-deep-equal';\n  import { _, locale as appLocale } from 'svelte-i18n';\n\n  import QuickSearchBar from '$lib/components/global/toolbar/items/quick-search-bar.svelte';\n  import { goto } from '$lib/services/app/navigation';\n  import { allAssets, getAssetsByFolder } from '$lib/services/assets';\n  import { allAssetFolders, selectedAssetFolder } from '$lib/services/assets/folders';\n  import { getFolderLabelByCollection } from '$lib/services/assets/view';\n  import { getCollection, getCollectionIndex } from '$lib/services/contents/collection';\n  import {\n    getCollectionFile,\n    getCollectionFileIndex,\n  } from '$lib/services/contents/collection/files';\n  import { isSmallScreen } from '$lib/services/user/env';\n\n  /**\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 ?? undefined));\n\n  const folders = $derived([\n    // All Assets, Global Assets, then collection-level, file-level folders, sorted by appearance\n    // order in the config\n    ...$allAssetFolders\n      // Exclude field-level folders\n      .filter(({ typedKeyPath }) => typedKeyPath === undefined)\n      .sort(\n        (a, b) =>\n          getCollectionFileIndex(a.collectionName, a.fileName) -\n          getCollectionFileIndex(b.collectionName, b.fileName),\n      )\n      .sort((a, b) => getCollectionIndex(a.collectionName) - getCollectionIndex(b.collectionName)),\n  ]);\n</script>\n\n<div role=\"none\" class=\"primary-sidebar\">\n  {#if $isSmallScreen}\n    <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 ([folder.collectionName, folder.fileName, folder.internalPath].join(':'))}\n        {#await sleep() then}\n          {@const { collectionName, fileName, internalPath, entryRelative, hasTemplateTags } =\n            folder}\n          {@const collection = collectionName ? getCollection(collectionName) : undefined}\n          {@const collectionFile =\n            collection && fileName ? getCollectionFile(collection, fileName) : undefined}\n          <!-- Can’t upload assets if collection assets are saved at entry-relative paths -->\n          {@const uploadDisabled = entryRelative || hasTemplateTags}\n          {@const selected = equal($selectedAssetFolder, folder)}\n          <Option\n            selected={$isSmallScreen || isSearchPage ? false : selected}\n            label={$appLocale ? getFolderLabelByCollection(folder) : ''}\n            onSelect={() => {\n              goto(`/assets/${internalPath ?? '-/all'}`, {\n                transitionType: 'forwards',\n                // An internal path can be shared by multiple collections, files and fields. Pass\n                // the folder info as history state so we can distinguish these different asset\n                // folders while keeping the URL clean.\n                state: { folder },\n              });\n            }}\n            ondragover={(event) => {\n              event.preventDefault();\n\n              if (uploadDisabled) {\n                return;\n              }\n\n              if (internalPath === undefined || selected) {\n                /** @type {DataTransfer} */ (event.dataTransfer).dropEffect = 'none';\n              } else {\n                /** @type {DataTransfer} */ (event.dataTransfer).dropEffect = 'move';\n                /** @type {HTMLElement} */ (event.target).classList.add('dragover');\n              }\n            }}\n            ondragleave={(event) => {\n              event.preventDefault();\n\n              if (uploadDisabled) {\n                return;\n              }\n\n              /** @type {HTMLElement} */ (event.target).classList.remove('dragover');\n            }}\n            ondragend={(event) => {\n              event.preventDefault();\n\n              if (uploadDisabled) {\n                return;\n              }\n\n              /** @type {HTMLElement} */ (event.target).classList.remove('dragover');\n            }}\n            ondrop={(event) => {\n              event.preventDefault();\n\n              if (uploadDisabled) {\n                return;\n              }\n\n              /** @type {HTMLElement} */ (event.target).classList.remove('dragover');\n              // @todo Move the assets while updating entries using the files, after showing a\n              // confirmation dialog.\n            }}\n          >\n            {#snippet startIcon()}\n              <Icon name={collectionFile?.icon || collection?.icon || 'folder'} />\n            {/snippet}\n            {#snippet endIcon()}\n              {#key $allAssets}\n                {#await sleep() then}\n                  {@const count = (\n                    internalPath !== undefined ? getAssetsByFolder(folder) : $allAssets\n                  ).length}\n                  <span\n                    class=\"count\"\n                    aria-label=\"({$_(\n                      count > 1 ? 'many_assets' : count === 1 ? 'one_asset' : 'no_assets',\n                      { values: { count } },\n                    )})\"\n                  >\n                    {numberFormatter.format(count)}\n                  </span>\n                {/await}\n              {/key}\n            {/snippet}\n          </Option>\n        {/await}\n      {/each}\n    </OptionGroup>\n    <!-- @todo Add external locations, including Cloudinary and Uploadcare -->\n  </Listbox>\n</div>\n","<script>\n  import { Button } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { goto } from '$lib/services/app/navigation';\n  import { canPreviewAsset } from '$lib/services/assets/kinds';\n\n  /**\n   * @import { Asset } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Asset} [asset] Selected asset.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    asset,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<Button\n  variant=\"ghost\"\n  disabled={!asset || !canPreviewAsset(asset)}\n  label={$_('preview')}\n  aria-label={$_('show_preview')}\n  onclick={() => {\n    goto(`/assets/${asset?.path}`, { transitionType: 'forwards' });\n  }}\n/>\n","<script>\n  import { FloatingActionButtonWrapper, Toolbar } from '@sveltia/ui';\n  import { _, locale as appLocale } from 'svelte-i18n';\n\n  import CopyAssetsButton from '$lib/components/assets/toolbar/copy-assets-button.svelte';\n  import DeleteAssetsButton from '$lib/components/assets/toolbar/delete-assets-button.svelte';\n  import DownloadAssetsButton from '$lib/components/assets/toolbar/download-assets-button.svelte';\n  import EditOptionsButton from '$lib/components/assets/toolbar/edit-options-button.svelte';\n  import PreviewAssetButton from '$lib/components/assets/toolbar/preview-asset-button.svelte';\n  import UploadAssetsButton from '$lib/components/assets/toolbar/upload-assets-button.svelte';\n  import BackButton from '$lib/components/common/page-toolbar/back-button.svelte';\n  import { goBack } from '$lib/services/app/navigation';\n  import { focusedAsset, selectedAssets } from '$lib/services/assets';\n  import {\n    canCreateAsset,\n    selectedAssetFolder,\n    targetAssetFolder,\n  } from '$lib/services/assets/folders';\n  import { getFolderLabelByCollection, listedAssets } from '$lib/services/assets/view';\n  import { isMediumScreen, isSmallScreen } from '$lib/services/user/env';\n\n  const assets = $derived.by(() => {\n    if ($selectedAssets.length) return $selectedAssets;\n    if ($focusedAsset) return [$focusedAsset];\n    return [];\n  });\n\n  const uploadDisabled = $derived(!canCreateAsset($targetAssetFolder));\n</script>\n\n<Toolbar variant=\"primary\" aria-label={$_('folder')}>\n  {#if $isSmallScreen}\n    <BackButton\n      aria-label={$_('back_to_asset_folder_list')}\n      onclick={() => {\n        goBack('/assets');\n      }}\n    />\n  {/if}\n  <h2 role=\"none\">\n    {#key $appLocale}\n      {$selectedAssetFolder ? getFolderLabelByCollection($selectedAssetFolder) : ''}\n    {/key}\n    {#if !$isSmallScreen && $selectedAssetFolder?.internalPath !== undefined}\n      <span role=\"none\">/{$selectedAssetFolder.internalPath}</span>\n    {/if}\n  </h2>\n  {#if !($isSmallScreen || $isMediumScreen)}\n    <PreviewAssetButton asset={$focusedAsset} />\n    <CopyAssetsButton assets={$focusedAsset ? [$focusedAsset] : []} />\n    <DownloadAssetsButton {assets} />\n    <DeleteAssetsButton\n      {assets}\n      buttonDescription={$_(\n        assets.length === 1 ? 'delete_selected_asset' : 'delete_selected_assets',\n      )}\n      dialogDescription={$_(\n        assets.length === 1\n          ? 'confirm_deleting_selected_asset'\n          : assets.length === $listedAssets.length\n            ? 'confirm_deleting_all_assets'\n            : 'confirm_deleting_selected_assets',\n        { values: { count: assets.length } },\n      )}\n    />\n    <EditOptionsButton asset={$focusedAsset} />\n  {/if}\n  <FloatingActionButtonWrapper>\n    {#if !$isSmallScreen || ($listedAssets.length && !uploadDisabled)}\n      <UploadAssetsButton label={$isSmallScreen ? undefined : $_('upload')} />\n    {/if}\n  </FloatingActionButtonWrapper>\n</Toolbar>\n","<script>\n  import { EmptyState, Group } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import InfoPanel from '$lib/components/assets/shared/info-panel.svelte';\n  import { focusedAsset } from '$lib/services/assets';\n  import { currentView } from '$lib/services/assets/view';\n  import { isLargeScreen } from '$lib/services/user/env';\n</script>\n\n{#if $isLargeScreen && $currentView.showInfo}\n  <Group id=\"asset-info\" class=\"secondary-sidebar\" aria-label={$_('asset_info')}>\n    {#if $focusedAsset}\n      <InfoPanel asset={$focusedAsset} showPreview={true} />\n    {:else}\n      <EmptyState>\n        <span role=\"none\">{$_('select_asset_show_info')}</span>\n      </EmptyState>\n    {/if}\n  </Group>\n{/if}\n","<script>\n  import { Menu, MenuButton, MenuItemCheckbox, MenuItemRadio } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  /**\n   * @import { Writable } from 'svelte/store';\n   * @import { AssetListView, EntryListView } from '$lib/types/private';\n   * @import { ViewFilter } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Writable<EntryListView | AssetListView>} currentView Current view details.\n   * @property {string} aria-controls The `aria-controls` attribute for the menu.\n   * @property {string} [label] Menu button label.\n   * @property {boolean} [disabled] Whether to disable the button.\n   * @property {boolean} [multiple] Whether to allow selecting multiple filter conditions.\n   * @property {string} [noneLabel] Label to be displayed on the None item.\n   * @property {ViewFilter[]} [filters] Filter conditions.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    currentView,\n    'aria-controls': ariaControls,\n    label = '',\n    disabled = false,\n    multiple = false,\n    noneLabel = '',\n    filters = [],\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<MenuButton variant=\"ghost\" label={label || $_('filter')} {disabled} popupPosition=\"bottom-right\">\n  {#snippet popup()}\n    <Menu aria-label={$_('filtering_options')} aria-controls={ariaControls}>\n      {#if multiple}\n        {#each filters as filter (JSON.stringify(filter))}\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 (JSON.stringify(filter))}\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 { Checkbox } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  /**\n   * @import { Writable } from 'svelte/store';\n   * @import { Asset, Entry } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {(Entry | Asset)[]} allItems All available items.\n   * @property {Writable<(Entry | Asset)[]>} selectedItems Selected items.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    allItems,\n    selectedItems,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const totalCount = $derived(allItems.length);\n  const selectedCount = $derived($selectedItems.length);\n  const anySelected = $derived(!!selectedCount);\n  const allSelected = $derived(anySelected && selectedCount === totalCount);\n</script>\n\n<div role=\"none\" class=\"wrapper\">\n  <Checkbox\n    disabled={!totalCount}\n    aria-label={$_('select_all')}\n    checked={anySelected && !allSelected ? 'mixed' : anySelected}\n    onChange={() => {\n      // Use `set` because assignment doesn’t work with Runes\n      selectedItems.set(allSelected ? [] : [...allItems]);\n    }}\n  />\n  {#if anySelected}\n    <span role=\"none\">\n      {$_('x_of_x_selected', { values: { total: totalCount, selected: selectedCount } })}\n    </span>\n  {/if}\n</div>\n\n<style lang=\"scss\">\n  .wrapper {\n    display: flex;\n    align-items: center;\n    gap: 4px;\n    margin-inline: 20px;\n  }\n\n  span {\n    color: var(--sui-secondary-foreground-color);\n    font-size: var(--sui-font-size-small);\n  }\n</style>\n","<script>\n  import { Divider, Menu, MenuButton, MenuItemRadio } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { getField } from '$lib/services/contents/entry/fields';\n\n  /**\n   * @import { Writable } from 'svelte/store';\n   * @import { AssetListView, EntryListView, SortOrder } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Writable<EntryListView | AssetListView>} currentView Current view details.\n   * @property {string} aria-controls The `aria-controls` attribute for the menu.\n   * @property {string} [label] Menu button label.\n   * @property {boolean} [disabled] Whether to disable the button.\n   * @property {{ label: string, key: string }[]} [sortKeys] Sort keys to display in the menu.\n   * @property {string | undefined} [collectionName] Current collection name.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    currentView,\n    'aria-controls': ariaControls,\n    label = '',\n    disabled = false,\n    sortKeys = [],\n    collectionName = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {SortOrder[]} */\n  const sortOrders = ['ascending', 'descending'];\n  const dateFields = ['date', 'commit_date'];\n</script>\n\n<MenuButton variant=\"ghost\" label={label || $_('sort')} {disabled} popupPosition=\"bottom-right\">\n  {#snippet popup()}\n    <Menu aria-label={$_('sorting_options')} aria-controls={ariaControls}>\n      {#each sortKeys as { key, label: _label } (key)}\n        {#each sortOrders as order (order)}\n          <MenuItemRadio\n            label={$_(\n              dateFields.includes(key) ||\n                (!!collectionName &&\n                  getField({ collectionName, keyPath: key })?.widget === 'datetime')\n                ? `${order}_date`\n                : order,\n              { values: { label: _label } },\n            )}\n            checked={$currentView.sort?.key === key && $currentView.sort.order === order}\n            onSelect={() => {\n              currentView.update((view) => ({ ...view, sort: { key, order } }));\n            }}\n          />\n        {/each}\n        {#if key === '_summary' && sortKeys.length > 1}\n          <Divider />\n        {/if}\n      {/each}\n    </Menu>\n  {/snippet}\n</MenuButton>\n","<script>\n  import { Button, Icon, SelectButton, SelectButtonGroup } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { isLargeScreen } from '$lib/services/user/env';\n\n  /**\n   * @import { Writable } from 'svelte/store';\n   * @import { AssetListView, EntryListView, SelectAssetsView } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} [disabled] Whether to disable the buttons.\n   * @property {Writable<EntryListView | AssetListView | SelectAssetsView>} currentView Current view\n   * details.\n   */\n\n  /** @type {Props & Record<string, any>} */\n  let {\n    /* eslint-disable prefer-const */\n    disabled = false,\n    currentView,\n    ...rest\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const isGridView = $derived($currentView.type === 'grid');\n</script>\n\n<div role=\"none\" class=\"wrapper\">\n  {#if $isLargeScreen}\n    <SelectButtonGroup {disabled} aria-label={$_('switch_view')} {...rest}>\n      <SelectButton\n        {disabled}\n        selected={!isGridView}\n        variant=\"ghost\"\n        iconic\n        aria-label={$_('list_view')}\n        onSelect={() => {\n          currentView.update((view) => ({ ...view, type: 'list' }));\n        }}\n      >\n        {#snippet startIcon()}\n          <Icon name=\"format_list_bulleted\" />\n        {/snippet}\n      </SelectButton>\n      <SelectButton\n        {disabled}\n        selected={isGridView}\n        variant=\"ghost\"\n        iconic\n        aria-label={$_('grid_view')}\n        onSelect={() => {\n          currentView.update((view) => ({ ...view, type: 'grid' }));\n        }}\n      >\n        {#snippet startIcon()}\n          <Icon name=\"grid_view\" />\n        {/snippet}\n      </SelectButton>\n    </SelectButtonGroup>\n  {:else}\n    <Button\n      {disabled}\n      variant=\"ghost\"\n      iconic\n      aria-label={$_(isGridView ? 'switch_to_list_view' : 'switch_to_grid_view')}\n      onclick={() => {\n        currentView.update((view) => ({ ...view, type: isGridView ? 'list' : 'grid' }));\n      }}\n    >\n      {#snippet startIcon()}\n        <Icon name={isGridView ? 'format_list_bulleted' : 'grid_view'} />\n      {/snippet}\n    </Button>\n  {/if}\n</div>\n\n<style lang=\"scss\">\n  .wrapper {\n    display: contents;\n\n    :global {\n      .select-button-group button {\n        border-radius: var(--sui-button-medium-border-radius) !important;\n      }\n    }\n  }\n</style>\n","import { derived, get } from 'svelte/store';\nimport { _, locale as appLocale } from 'svelte-i18n';\n\nimport { allAssets } from '$lib/services/assets';\n\n/**\n * @import { Readable } from 'svelte/store';\n */\n\n/**\n * List of available sort keys for the selected asset collection.\n * @type {Readable<{ key: string, label: string }[]>}\n */\nexport const sortKeys = derived(\n  // Include `appLocale` as a dependency because it returns a localized label\n  [allAssets, appLocale],\n  ([_allAssets], set) => {\n    const _sortFields = ['name'];\n\n    if (_allAssets.every((asset) => !!asset.commitAuthor)) {\n      _sortFields.push('commit_author');\n    }\n\n    if (_allAssets.every((asset) => !!asset.commitDate)) {\n      _sortFields.push('commit_date');\n    }\n\n    set(_sortFields.map((key) => ({ key, label: get(_)(`sort_keys.${key}`) })));\n  },\n);\n","<script>\n  import { Button, Divider, Icon, Spacer, Toolbar } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import FilterMenu from '$lib/components/common/page-toolbar/filter-menu.svelte';\n  import ItemSelector from '$lib/components/common/page-toolbar/item-selector.svelte';\n  import SortMenu from '$lib/components/common/page-toolbar/sort-menu.svelte';\n  import ViewSwitcher from '$lib/components/common/page-toolbar/view-switcher.svelte';\n  import { selectedAssets } from '$lib/services/assets';\n  import { ASSET_KINDS } from '$lib/services/assets/kinds';\n  import { assetGroups, currentView, listedAssets } from '$lib/services/assets/view';\n  import { sortKeys } from '$lib/services/assets/view/sort-keys';\n  import { isMediumScreen, isSmallScreen } from '$lib/services/user/env';\n\n  const hasListedAssets = $derived(!!$listedAssets.length);\n  const hasMultipleAssets = $derived($listedAssets.length > 1);\n</script>\n\n<Toolbar variant=\"secondary\" aria-label={$_('asset_list')}>\n  {#if !($isSmallScreen || $isMediumScreen)}\n    <ItemSelector allItems={Object.values($assetGroups).flat(1)} selectedItems={selectedAssets} />\n  {/if}\n  <Spacer flex />\n  <SortMenu\n    disabled={!hasMultipleAssets}\n    {currentView}\n    sortKeys={$sortKeys}\n    aria-controls=\"asset-list\"\n  />\n  <FilterMenu\n    label={$_('type')}\n    disabled={!hasMultipleAssets}\n    {currentView}\n    noneLabel={$_('all')}\n    filters={ASSET_KINDS.map((type) => ({ label: $_(type), field: 'fileType', pattern: type }))}\n    aria-controls=\"asset-list\"\n  />\n  <ViewSwitcher disabled={!hasListedAssets} {currentView} aria-controls=\"asset-list\" />\n  {#if !($isSmallScreen || $isMediumScreen)}\n    <Divider orientation=\"vertical\" />\n    <Button\n      variant=\"ghost\"\n      iconic\n      disabled={!hasListedAssets}\n      pressed={!!$currentView.showInfo}\n      aria-controls=\"asset-info\"\n      aria-expanded={!!$currentView.showInfo}\n      aria-label={$_($currentView.showInfo ? 'hide_info' : 'show_info')}\n      onclick={() => {\n        currentView.update((view) => ({\n          ...view,\n          showInfo: !$currentView.showInfo,\n        }));\n      }}\n    >\n      {#snippet startIcon()}\n        <Icon name=\"info\" />\n      {/snippet}\n    </Button>\n  {/if}\n</Toolbar>\n","<script>\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Snippet} [primaryToolbar] Primary toolbar content.\n   * @property {Snippet} [secondaryToolbar] Secondary toolbar content.\n   * @property {Snippet} [mainContent] Main content.\n   * @property {Snippet} [secondarySidebar] Secondary sidebar content.\n   */\n\n  /** @type {Props & Record<string, any>} */\n  let {\n    /* eslint-disable prefer-const */\n    primaryToolbar = undefined,\n    secondaryToolbar = undefined,\n    mainContent = undefined,\n    secondarySidebar = undefined,\n    ...rest\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div role=\"group\" class=\"wrapper\" {...rest}>\n  {@render primaryToolbar?.()}\n  <div role=\"none\" class=\"main-inner\">\n    <div role=\"none\" class=\"main-inner-main\">\n      {@render secondaryToolbar?.()}\n      {@render mainContent?.()}\n    </div>\n    {@render secondarySidebar?.()}\n  </div>\n</div>\n\n<style lang=\"scss\">\n  .wrapper {\n    flex: auto;\n    display: flex;\n    flex-direction: column;\n    overflow: hidden;\n    background-color: var(--sui-primary-background-color);\n\n    @media (768px <= width) {\n      view-transition-name: page-main;\n    }\n\n    &:not(:first-child) {\n      border-start-start-radius: 16px;\n    }\n\n    :global {\n      .sui.toolbar.primary {\n        justify-content: center;\n\n        @media (width < 768px) {\n          background-color: var(--sui-secondary-background-color);\n        }\n      }\n    }\n  }\n\n  .main-inner {\n    flex: auto;\n    display: flex;\n    overflow: hidden;\n\n    .main-inner-main {\n      flex: auto;\n      display: flex;\n      flex-direction: column;\n      overflow: hidden;\n    }\n\n    :global {\n      .secondary-sidebar {\n        flex: none;\n        overflow: auto;\n        box-sizing: content-box;\n        width: 320px;\n        background-color: var(--sui-secondary-background-color);\n\n        @media (768px <= width) {\n          border-start-start-radius: 16px;\n        }\n\n        [role='listbox'] {\n          padding: 12px;\n        }\n      }\n    }\n  }\n</style>\n","<script>\n  import { hasOverlay } from '$lib/services/app/navigation';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [class] CSS class name on the button.\n   * @property {Snippet} [primarySidebar] Primary sidebar content.\n   * @property {Snippet} [main] Main content.\n   */\n\n  /** @type {Props & Record<string, any>} */\n  let {\n    /* eslint-disable prefer-const */\n    class: className = '',\n    primarySidebar = undefined,\n    main = undefined,\n    ...rest\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div role=\"group\" id=\"page-container\" class=\"outer {className}\" inert={$hasOverlay} {...rest}>\n  {@render primarySidebar?.()}\n  {@render main?.()}\n</div>\n\n<style lang=\"scss\">\n  .outer {\n    flex: auto;\n    display: flex;\n    overflow: hidden;\n\n    &[inert] {\n      display: none;\n    }\n\n    :global {\n      .primary-sidebar {\n        display: flex;\n        flex-direction: column;\n        flex: none;\n        width: 240px;\n        overflow-y: auto;\n\n        @media (width < 768px) {\n          flex: auto;\n          width: auto;\n          background-color: var(--sui-primary-background-color);\n        }\n\n        // 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 { GridCell, GridRow, TruncatedText } from '@sveltia/ui';\n  import { locale as appLocale } from 'svelte-i18n';\n\n  import AssetPreview from '$lib/components/assets/shared/asset-preview.svelte';\n  import { goto } from '$lib/services/app/navigation';\n  import { getFolderLabelByCollection } from '$lib/services/assets/view';\n\n  /**\n   * @import { Asset } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Asset} asset Single asset.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    asset,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const { path, name, folder, kind } = $derived(asset);\n</script>\n\n<GridRow\n  onclick={() => {\n    goto(`/assets/${path}`, { transitionType: 'forwards' });\n  }}\n>\n  <GridCell class=\"image\">\n    <AssetPreview {kind} {asset} variant=\"icon\" cover />\n  </GridCell>\n  <GridCell class=\"collection\">\n    {#key $appLocale}\n      {getFolderLabelByCollection(folder)}\n    {/key}\n  </GridCell>\n  <GridCell class=\"title\">\n    <div role=\"none\" class=\"label\">\n      <TruncatedText lines={2}>\n        {name}\n      </TruncatedText>\n    </div>\n  </GridCell>\n</GridRow>\n","/**\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 * Check if the given label matches the search terms.\n * @param {object} args Arguments.\n * @param {string} args.value Value to check against.\n * @param {string} args.terms Search terms.\n * @returns {boolean} Result of the match check.\n */\nexport const hasMatch = ({ value, terms }) => normalize(value).includes(terms);\n","import { derived } from 'svelte/store';\n\nimport { allAssets } from '$lib/services/assets';\nimport { searchTerms } from '$lib/services/search';\nimport { hasMatch, normalize } from '$lib/services/search/util';\n\n/**\n * @import { Readable } from 'svelte/store';\n * @import { Asset } from '$lib/types/private';\n */\n\n/**\n * Search assets based on the given search terms.\n * @param {object} args Arguments.\n * @param {Asset[]} args.assets All assets to search in.\n * @param {string} args.terms Search terms.\n * @returns {Asset[]} Search results.\n */\nexport const searchAssets = ({ assets, terms }) => {\n  terms = normalize(terms);\n\n  if (!assets.length || !terms) {\n    return [];\n  }\n\n  return assets.filter((asset) => hasMatch({ value: asset.name, terms }));\n};\n\n/**\n * Hold asset search results for the current search terms.\n * @type {Readable<Asset[]>}\n */\nexport const assetSearchResults = derived([allAssets, searchTerms], ([assets, terms]) =>\n  searchAssets({ assets, terms }),\n);\n","<script>\n  import { EmptyState, Group, InfiniteScroll } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import { _ } from 'svelte-i18n';\n\n  import ListingGrid from '$lib/components/common/listing-grid.svelte';\n  import AssetResultItem from '$lib/components/search/asset-result-item.svelte';\n  import { announcedPageStatus } from '$lib/services/app/navigation';\n  import { searchTerms } from '$lib/services/search';\n  import { assetSearchResults } from '$lib/services/search/assets';\n\n  /**\n   * @import { Asset } from '$lib/types/private';\n   */\n\n  $effect(() => {\n    const assetCount = $assetSearchResults.length;\n\n    $announcedPageStatus = $_('viewing_asset_search_results', {\n      values: {\n        terms: $searchTerms,\n        assets:\n          assetCount > 1\n            ? $_('many_assets', { values: { count: assetCount } })\n            : assetCount === 1\n              ? $_('one_asset')\n              : $_('no_assets'),\n      },\n    });\n  });\n</script>\n\n<Group aria-labelledby=\"search-results-assets\">\n  <!-- <h3 role=\"none\" id=\"search-results-assets\">{$_('assets')}</h3> -->\n  <div role=\"none\">\n    {#if $assetSearchResults.length}\n      <ListingGrid\n        viewType=\"list\"\n        aria-label={$_('assets')}\n        aria-rowcount={$assetSearchResults.length}\n      >\n        {#key $searchTerms}\n          <InfiniteScroll items={$assetSearchResults} itemKey=\"path\">\n            {#snippet renderItem(/** @type {Asset} */ asset)}\n              {#await sleep() then}\n                <AssetResultItem {asset} />\n              {/await}\n            {/snippet}\n          </InfiniteScroll>\n        {/key}\n      </ListingGrid>\n    {:else if $searchTerms}\n      <EmptyState>\n        <span role=\"none\">{$_('no_files_found')}</span>\n      </EmptyState>\n    {/if}\n  </div>\n</Group>\n","<script>\n  import { GridCell, GridRow, TruncatedText } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import { locale as appLocale } from 'svelte-i18n';\n\n  import Image from '$lib/components/assets/shared/image.svelte';\n  import { goto } from '$lib/services/app/navigation';\n  import { getCollectionLabel } from '$lib/services/contents/collection';\n  import {\n    getCollectionFileLabel,\n    getCollectionFilesByEntry,\n  } from '$lib/services/contents/collection/files';\n  import { getAssociatedCollections } from '$lib/services/contents/entry';\n  import { getEntryThumbnail } from '$lib/services/contents/entry/assets';\n  import { getEntrySummary } from '$lib/services/contents/entry/summary';\n  import { DEFAULT_I18N_CONFIG } from '$lib/services/contents/i18n/config';\n\n  /**\n   * @import { 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}\n          {getCollectionLabel(collection)}\n        {/key}\n      </GridCell>\n      <GridCell class=\"title\">\n        <div role=\"none\" class=\"label\">\n          <TruncatedText lines={2}>\n            {#if collectionFile}\n              {getCollectionFileLabel(collectionFile)}\n            {:else}\n              {#key $appLocale}\n                {@html getEntrySummary(collection, entry, {\n                  useTemplate: true,\n                  allowMarkdown: true,\n                })}\n              {/key}\n            {/if}\n          </TruncatedText>\n        </div>\n      </GridCell>\n    </GridRow>\n  {/if}\n{/snippet}\n\n{#each getAssociatedCollections(entry) as collection (collection.name)}\n  {#await sleep() then}\n    {#each getCollectionFilesByEntry(collection, entry) as collectionFile (collectionFile.name)}\n      {#await sleep() then}\n        {@render resultRow({ collection, collectionFile })}\n      {/await}\n    {:else}\n      {@render resultRow({ collection })}\n    {/each}\n  {/await}\n{/each}\n","import { derived } from 'svelte/store';\nimport { locale as appLocale } from 'svelte-i18n';\n\nimport { allEntries } from '$lib/services/contents';\nimport { getCollectionFilesByEntry } from '$lib/services/contents/collection/files';\nimport { getAssociatedCollections } from '$lib/services/contents/entry';\nimport { getEntrySummary } from '$lib/services/contents/entry/summary';\nimport { searchTerms } from '$lib/services/search';\nimport { hasMatch, normalize } from '$lib/services/search/util';\n\n/**\n * @import { Readable } from 'svelte/store';\n * @import { Entry } from '$lib/types/private';\n */\n\n/**\n * Scan an entry for matches against the search terms.\n * @param {object} args Arguments.\n * @param {Entry} args.entry Entry to scan.\n * @param {string} args.terms Search terms.\n * @returns {number} Points scored for the entry based on matches.\n */\nexport const scanEntry = ({ entry, terms }) => {\n  // Count the number of matches, weighting the collection name and title\n  let points = 0;\n  const collections = getAssociatedCollections(entry);\n\n  if (collections.length) {\n    collections.forEach((collection) => {\n      // Check if the collection label or name matches\n      if (hasMatch({ value: collection.label || collection.name, terms })) {\n        points += 10;\n      }\n\n      // Check if the file labels or names match\n      points += getCollectionFilesByEntry(collection, entry).filter((file) =>\n        hasMatch({ value: file.label || file.name, terms }),\n      ).length;\n    });\n\n    const [collection] = collections;\n    const summary = getEntrySummary(collection, entry, { useTemplate: true, allowMarkdown: true });\n\n    // Check if the entry summary matches\n    if (hasMatch({ value: summary, terms })) {\n      points += 10;\n    }\n  }\n\n  // Check if the entry content matches\n  Object.values(entry.locales).forEach(({ content }) => {\n    points += Object.values(content).filter(\n      (value) =>\n        (typeof value === 'string' && !!value && hasMatch({ value, terms })) ||\n        (typeof value === 'number' && hasMatch({ value: String(value), terms })),\n    ).length;\n  });\n\n  return points;\n};\n\n/**\n * Search entries based on the given search terms.\n * @param {object} args Arguments.\n * @param {Entry[]} args.entries All entries to search in.\n * @param {string} args.terms Search terms.\n * @returns {Entry[]} Search results sorted by relevance.\n */\nexport const searchEntries = ({ entries, terms }) => {\n  terms = normalize(terms);\n\n  if (!entries.length || !terms) {\n    return [];\n  }\n\n  return entries\n    .map((entry) => ({ entry, points: scanEntry({ entry, terms }) }))\n    .filter(({ points }) => points > 0)\n    .sort((a, b) => b.points - a.points)\n    .map(({ entry }) => entry);\n};\n\n/**\n * Hold entry search results for the current search terms.\n * @type {Readable<Entry[]>}\n * @todo Search relation fields.\n */\nexport const entrySearchResults = derived(\n  // Include `appLocale` as a dependency because `getEntrySummary()` may return a localized label\n  [allEntries, searchTerms, appLocale],\n  ([entries, terms]) => searchEntries({ entries, terms }),\n);\n","<script>\n  import { EmptyState, Group, InfiniteScroll } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import { _ } from 'svelte-i18n';\n\n  import ListingGrid from '$lib/components/common/listing-grid.svelte';\n  import EntryResultItem from '$lib/components/search/entry-result-item.svelte';\n  import { announcedPageStatus } from '$lib/services/app/navigation';\n  import { searchTerms } from '$lib/services/search';\n  import { entrySearchResults } from '$lib/services/search/entries';\n\n  /**\n   * @import { Entry } from '$lib/types/private';\n   */\n\n  $effect(() => {\n    const entryCount = $entrySearchResults.length;\n\n    $announcedPageStatus = $_('viewing_entry_search_results', {\n      values: {\n        terms: $searchTerms,\n        entries:\n          entryCount > 1\n            ? $_('many_entries', { values: { count: entryCount } })\n            : entryCount === 1\n              ? $_('one_entry')\n              : $_('no_entries'),\n      },\n    });\n  });\n</script>\n\n<Group aria-labelledby=\"search-results-entries\">\n  <!-- <h3 role=\"none\" id=\"search-results-entries\">{$_('entries')}</h3> -->\n  <div role=\"none\">\n    {#if $entrySearchResults.length}\n      <ListingGrid\n        viewType=\"list\"\n        aria-label={$_('entries')}\n        aria-rowcount={$entrySearchResults.length}\n      >\n        {#key $searchTerms}\n          <InfiniteScroll items={$entrySearchResults} itemKey=\"id\">\n            {#snippet renderItem(/** @type {Entry} */ entry)}\n              {#await sleep() then}\n                <EntryResultItem {entry} />\n              {/await}\n            {/snippet}\n          </InfiniteScroll>\n        {/key}\n      </ListingGrid>\n    {:else if $searchTerms}\n      <EmptyState>\n        <span role=\"none\">{$_('no_entries_found')}</span>\n      </EmptyState>\n    {/if}\n  </div>\n</Group>\n","<script>\n  import { Toolbar } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import AssetResults from '$lib/components/search/asset-results.svelte';\n  import EntryResults from '$lib/components/search/entry-results.svelte';\n  import { searchMode } from '$lib/services/search';\n  import { isSmallScreen } from '$lib/services/user/env';\n</script>\n\n<div role=\"none\" class=\"wrapper\">\n  {#if !$isSmallScreen}\n    <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 lang=\"scss\">\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 { Toolbar } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\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 { isSmallScreen } from '$lib/services/user/env';\n</script>\n\n<PageContainerMainArea>\n  {#snippet primaryToolbar()}\n    {#if $isSmallScreen}\n      <Toolbar variant=\"primary\">\n        <BackButton\n          aria-label={$_(\n            $searchMode === 'assets' ? 'back_to_asset_folder_list' : 'back_to_collection_list',\n          )}\n          onclick={() => {\n            $searchTerms = '';\n            goto($searchMode === 'assets' ? '/assets' : '/collections', {\n              transitionType: 'backwards',\n            });\n          }}\n        />\n        <div role=\"search\">\n          <QuickSearchBar />\n        </div>\n      </Toolbar>\n    {/if}\n  {/snippet}\n  {#snippet mainContent()}\n    <SearchResults />\n  {/snippet}\n</PageContainerMainArea>\n\n<style lang=\"scss\">\n  [role='search'] {\n    display: contents;\n\n    :global {\n      .sui.search-bar {\n        flex: auto;\n      }\n    }\n  }\n</style>\n","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 { Alert, Toast } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import equal from 'fast-deep-equal';\n  import { onMount } from 'svelte';\n  import { _, locale as appLocale } from 'svelte-i18n';\n\n  import AssetDetailsOverlay from '$lib/components/assets/details/asset-details-overlay.svelte';\n  import EditAssetDialog from '$lib/components/assets/details/edit-asset-dialog.svelte';\n  import RenameAssetDialog from '$lib/components/assets/details/rename-asset-dialog.svelte';\n  import AssetList from '$lib/components/assets/list/asset-list.svelte';\n  import PrimarySidebar from '$lib/components/assets/list/primary-sidebar.svelte';\n  import PrimaryToolbar from '$lib/components/assets/list/primary-toolbar.svelte';\n  import SecondarySidebar from '$lib/components/assets/list/secondary-sidebar.svelte';\n  import SecondaryToolbar from '$lib/components/assets/list/secondary-toolbar.svelte';\n  import PageContainerMainArea from '$lib/components/common/page-container-main-area.svelte';\n  import PageContainer from '$lib/components/common/page-container.svelte';\n  import 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 { isSmallScreen } from '$lib/services/user/env';\n\n  const ROUTE_REGEX = /^\\/assets(?:\\/(?<folderPath>.+?)(?:\\/(?<fileName>[^/]+\\.[A-Za-z0-9]+))?)?$/;\n\n  let isIndexPage = $state(false);\n  let isSearchPage = $state(false);\n\n  const selectedAssetFolderLabel = $derived(\n    // `$appLocale` is a key, because `getFolderLabelByCollection` can return a localized label\n    $appLocale && $selectedAssetFolder ? getFolderLabelByCollection($selectedAssetFolder) : '',\n  );\n\n  /**\n   * Navigate to the asset list or asset details page given the URL hash.\n   * @todo Show Not Found page.\n   */\n  const navigate = async () => {\n    const { path } = parseLocation();\n    const match = path.match(ROUTE_REGEX);\n\n    isIndexPage = false;\n    isSearchPage = false;\n\n    if (!match?.groups) {\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 ($isSmallScreen) {\n        // Show the asset folder list only\n        $selectedAssetFolder = undefined;\n        $announcedPageStatus = $_('viewing_asset_folder_list');\n        isIndexPage = true;\n      } else {\n        // Redirect to All Assets\n        goto('/assets/-/all');\n      }\n\n      return;\n    }\n\n    const folder =\n      window.history.state?.folder ??\n      $allAssetFolders.find(({ internalPath, collectionName }) =>\n        folderPath === '-/all'\n          ? internalPath === undefined && collectionName === undefined\n          : internalPath === folderPath,\n      );\n\n    if (!folder) {\n      // Not found\n      $selectedAssetFolder = undefined;\n    } else if (!equal($selectedAssetFolder, folder)) {\n      $selectedAssetFolder = folder;\n    }\n\n    if (!fileName) {\n      const count = $listedAssets.length;\n\n      // Wait for `selectedAssetFolderLabel` to be updated\n      await sleep(100);\n\n      $announcedPageStatus = $_(\n        count > 1\n          ? 'viewing_x_asset_folder_many_assets'\n          : count === 1\n            ? 'viewing_x_asset_folder_one_asset'\n            : 'viewing_x_asset_folder_no_assets',\n        { values: { folder: selectedAssetFolderLabel, count } },\n      );\n\n      return;\n    }\n\n    $overlaidAsset = fileName\n      ? $allAssets.find((asset) => asset.path === `${folderPath}/${fileName}`)\n      : undefined;\n    $announcedPageStatus = $overlaidAsset\n      ? $_('viewing_x_asset_details', { values: { name: $overlaidAsset.name } })\n      : $_('file_not_found');\n    $showAssetOverlay = true;\n  };\n\n  onMount(() => {\n    navigate();\n  });\n</script>\n\n<svelte:window\n  onhashchange={(event) => {\n    updateContentFromHashChange(event, navigate, ROUTE_REGEX);\n  }}\n/>\n\n<PageContainer aria-label={$_('asset_library')}>\n  {#snippet primarySidebar()}\n    {#if !$isSmallScreen || isIndexPage}\n      <PrimarySidebar {isSearchPage} />\n    {/if}\n  {/snippet}\n  {#snippet main()}\n    {#if isSearchPage}\n      <SearchMainArea />\n    {:else if !$isSmallScreen || !isIndexPage}\n      <PageContainerMainArea\n        id=\"assets-container\"\n        aria-label={$_('x_asset_folder', { values: { folder: selectedAssetFolderLabel } })}\n      >\n        {#snippet primaryToolbar()}\n          <PrimaryToolbar />\n        {/snippet}\n        {#snippet secondaryToolbar()}\n          {#if $listedAssets.length}\n            <SecondaryToolbar />\n          {/if}\n        {/snippet}\n        {#snippet mainContent()}\n          <AssetList />\n        {/snippet}\n        {#snippet secondarySidebar()}\n          <SecondarySidebar />\n        {/snippet}\n      </PageContainerMainArea>\n    {/if}\n  {/snippet}\n</PageContainer>\n\n{#if $showAssetOverlay}\n  <AssetDetailsOverlay />\n{/if}\n\n<EditAssetDialog />\n<RenameAssetDialog />\n\n<Toast bind:show={$assetUpdatesToast.saved}>\n  <Alert status=\"success\">\n    {$_(\n      $assetUpdatesToast.published\n        ? $assetUpdatesToast.count === 1\n          ? 'asset_saved_and_published'\n          : 'assets_saved_and_published'\n        : $assetUpdatesToast.count === 1\n          ? 'asset_saved'\n          : 'assets_saved',\n      {\n        values: { count: $assetUpdatesToast.count },\n      },\n    )}\n  </Alert>\n</Toast>\n\n<Toast bind:show={$assetUpdatesToast.moved}>\n  <Alert status=\"success\">\n    {$_($assetUpdatesToast.count === 1 ? 'asset_moved' : 'assets_moved', {\n      values: { count: $assetUpdatesToast.count },\n    })}\n  </Alert>\n</Toast>\n\n<Toast bind:show={$assetUpdatesToast.renamed}>\n  <Alert status=\"success\">\n    {$_($assetUpdatesToast.count === 1 ? 'asset_renamed' : 'assets_renamed', {\n      values: { count: $assetUpdatesToast.count },\n    })}\n  </Alert>\n</Toast>\n\n<Toast bind:show={$assetUpdatesToast.deleted}>\n  <Alert status=\"success\">\n    {$_($assetUpdatesToast.count === 1 ? 'asset_deleted' : 'assets_deleted', {\n      values: { count: $assetUpdatesToast.count },\n    })}\n  </Alert>\n</Toast>\n","<script>\n  import { Alert, ConfirmationDialog } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import UploadAssetsPreview from '$lib/components/assets/shared/upload-assets-preview.svelte';\n  import { processedAssets, uploadingAssets } from '$lib/services/assets';\n  import { saveAssets } from '$lib/services/assets/data/create';\n  import { showAssetOverlay, showUploadAssetsConfirmDialog } from '$lib/services/assets/view';\n  import { getDefaultMediaLibraryOptions } from '$lib/services/integrations/media-libraries/default';\n  import { formatSize } from '$lib/services/utils/file';\n\n  /** @type {File[]} */\n  // eslint-disable-next-line svelte/prefer-writable-derived\n  let files = $state([]);\n\n  const { files: originalFiles, folder, originalAsset } = $derived($uploadingAssets);\n  const { processing, undersizedFiles, oversizedFiles, transformedFileMap } =\n    $derived($processedAssets);\n  const { max_file_size: maxSize } = $derived(getDefaultMediaLibraryOptions().config);\n\n  $effect(() => {\n    files = [...undersizedFiles];\n  });\n\n  $effect(() => {\n    if (!$showAssetOverlay) {\n      // Close the dialog\n      $uploadingAssets = { folder: undefined, files: [] };\n    }\n  });\n</script>\n\n<!-- @todo Confirm to replace an old image if a file with the same same exists. -->\n\n<ConfirmationDialog\n  open={$showUploadAssetsConfirmDialog}\n  title={$_(originalAsset ? 'replace_asset' : 'upload_assets')}\n  okLabel={$_(originalAsset ? 'replace' : 'upload')}\n  okDisabled={!files.length}\n  onOk={async () => {\n    await saveAssets({ files, folder, originalAsset }, { commitType: 'uploadMedia' });\n    $uploadingAssets = { folder: undefined, files: [] };\n  }}\n  onCancel={() => {\n    $uploadingAssets = { folder: undefined, files: [] };\n  }}\n>\n  {#if processing}\n    <div role=\"status\">\n      {$_(originalFiles.length === 1 ? 'processing_file' : 'processing_files')}\n    </div>\n  {/if}\n  {#if files.length}\n    <div role=\"group\" class=\"section uploading\" aria-label={$_('uploading_files')}>\n      <div role=\"none\">\n        {#if originalAsset}\n          {$_('confirm_replacing_file', {\n            values: { name: originalAsset.name },\n          })}\n        {:else}\n          {$_(files.length === 1 ? 'confirm_uploading_file' : 'confirm_uploading_files', {\n            values: { count: files.length, folder: `/${folder?.internalPath}` },\n          })}\n        {/if}\n      </div>\n      <UploadAssetsPreview bind:files {transformedFileMap} />\n    </div>\n  {/if}\n  {#if oversizedFiles.length}\n    <div role=\"group\" class=\"section oversized\" aria-label={$_('oversized_files')}>\n      <Alert status=\"warning\">\n        {$_(oversizedFiles.length === 1 ? 'warning_oversized_file' : 'warning_oversized_files', {\n          values: { size: formatSize(/** @type {number} */ (maxSize)) },\n        })}\n      </Alert>\n      <UploadAssetsPreview files={oversizedFiles} {transformedFileMap} removable={false} />\n    </div>\n  {/if}\n</ConfirmationDialog>\n\n<style lang=\"scss\">\n  .section {\n    display: flex;\n    flex-direction: column;\n    gap: 16px;\n\n    &:not(:first-child) {\n      margin-top: 16px;\n    }\n\n    & > :global(*) {\n      flex: none;\n    }\n\n    &.oversized :global(.files) {\n      opacity: 0.5;\n    }\n  }\n</style>\n","<script>\n  import { Dialog, FilePicker } from '@sveltia/ui';\n  import mime from 'mime';\n  import { _ } from 'svelte-i18n';\n\n  import DropZone from '$lib/components/assets/shared/drop-zone.svelte';\n  import { uploadingAssets } from '$lib/services/assets';\n  import { targetAssetFolder } from '$lib/services/assets/folders';\n  import { showAssetOverlay, showUploadAssetsDialog } from '$lib/services/assets/view';\n  import { hasMouse } from '$lib/services/user/env';\n\n  /** @type {FilePicker | undefined} */\n  let filePicker = $state();\n\n  const { originalAsset } = $derived($uploadingAssets);\n  const multiple = $derived(!originalAsset);\n  const accept = $derived(\n    originalAsset ? (mime.getType(originalAsset.name) ?? undefined) : undefined,\n  );\n\n  /**\n   * Update the asset list, which will show the confirmation dialog.\n   * @param {File[]} files Selected files.\n   */\n  const onSelect = (files) => {\n    if (!files.length) {\n      return;\n    }\n\n    $uploadingAssets = {\n      folder: originalAsset ? originalAsset.folder : $targetAssetFolder,\n      files,\n      originalAsset,\n    };\n    $showUploadAssetsDialog = false;\n  };\n\n  $effect(() => {\n    // Open the file picker directly if drag & drop is not supported (on mobile)\n    if (!$hasMouse && $showUploadAssetsDialog) {\n      filePicker?.open();\n    }\n  });\n\n  $effect(() => {\n    if (!$showAssetOverlay) {\n      $showUploadAssetsDialog = false;\n    }\n  });\n</script>\n\n{#if $hasMouse}\n  <Dialog\n    title={originalAsset\n      ? $_('replace_x', { values: { name: originalAsset.name } })\n      : $_('upload_assets')}\n    bind:open={$showUploadAssetsDialog}\n    showOk={false}\n  >\n    <DropZone\n      showUploadButton={true}\n      {accept}\n      {multiple}\n      onDrop={({ files }) => {\n        onSelect(files);\n      }}\n    />\n  </Dialog>\n{:else}\n  <FilePicker\n    bind:this={filePicker}\n    {accept}\n    {multiple}\n    onSelect={({ files }) => {\n      onSelect(files);\n    }}\n    onCancel={() => {\n      $showUploadAssetsDialog = false;\n    }}\n  />\n{/if}\n","<script>\n  import { _ } from 'svelte-i18n';\n  import { 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 lang=\"scss\">\n  div {\n    flex: auto;\n    overflow: auto;\n  }\n\n  pre {\n    margin: 0;\n    padding: 16px;\n    width: 100%;\n    min-width: fit-content;\n    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 equal from 'fast-deep-equal';\nimport { derived, get, writable } from 'svelte/store';\n\nimport { prefs } from '$lib/services/user/prefs';\n\n/**\n * @import { Readable, Writable } from 'svelte/store';\n * @import { EntryDraft } from '$lib/types/private';\n */\n\n/**\n * @type {Writable<EntryDraft | null | undefined>}\n */\nexport const entryDraft = writable();\n\n/**\n * Whether to enable automatic i18n duplication in proxies in {@link entryDraft}. This can be\n * temporarily disabled for performance reasons when making large changes to the values.\n */\nexport const i18nAutoDupEnabled = writable(true);\n\n/**\n * Whether the current {@link entryDraft} has been modified.\n * @type {Readable<boolean>}\n */\nexport const entryDraftModified = derived([entryDraft], ([draft]) => {\n  if (!draft) {\n    return false;\n  }\n\n  const {\n    originalLocales,\n    currentLocales,\n    originalSlugs,\n    currentSlugs,\n    originalValues,\n    currentValues,\n  } = draft;\n\n  return (\n    !equal(originalLocales, currentLocales) ||\n    !equal(originalSlugs, currentSlugs) ||\n    !equal(originalValues, currentValues)\n  );\n});\n\nentryDraft.subscribe((draft) => {\n  if (get(prefs).devModeEnabled) {\n    // eslint-disable-next-line no-console\n    console.info('entryDraft', draft);\n  }\n});\n","import { get } from 'svelte/store';\n\nimport { getCollection } from '$lib/services/contents/collection';\nimport { getCollectionFile } from '$lib/services/contents/collection/files';\nimport { entryDraft, i18nAutoDupEnabled } from '$lib/services/contents/draft';\nimport { getField, isFieldRequired } from '$lib/services/contents/entry/fields';\n\n/**\n * @import { EntryDraft, FlattenedEntryContent, GetFieldArgs } from '$lib/types/private';\n * @import { Field, FieldKeyPath, LocaleCode, RelationField } from '$lib/types/public';\n */\n\n/**\n * Copy the default locale value to other locales if the field’s i18n strategy is `duplicate`.\n * @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        const { path: parentKeyPath } = keyPath.match(/(?<path>.+?)\\.[^.]*$/)?.groups ?? {};\n\n        if (\n          !Object.keys(content).some((_keyPath) => _keyPath.startsWith(`${parentKeyPath}.`)) &&\n          !getField({ ...getFieldArgs, keyPath: parentKeyPath })\n        ) {\n          return;\n        }\n      }\n\n      // Support special case for the Relation field: if the `value_field` option is something\n      // like `{{locale}}/{{slug}}`, replace the source locale in the value with target locale\n      if (fieldConfig.widget === 'relation') {\n        const { value_field: valueField = '{{slug}}' } = /** @type {RelationField} */ (fieldConfig);\n\n        if (valueField.startsWith('{{locale}}/') && 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 { entryDraft, entryDraftModified, i18nAutoDupEnabled } from '$lib/services/contents/draft';\nimport { createProxy } from '$lib/services/contents/draft/create/proxy';\nimport { prefs } from '$lib/services/user/prefs';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import {\n * EntryDraft,\n * EntryDraftBackup,\n * LocaleContentMap,\n * LocaleSlugMap,\n * } from '$lib/types/private';\n */\n\n/**\n * @type {number | NodeJS.Timeout}\n */\nlet backupTimeout = 0;\n/**\n * @type {IndexedDB | null | undefined}\n */\nlet backupDB = undefined;\n\n/**\n * Default for {@link backupToastState}.\n */\nconst BACKUP_TOAST_DEFAULT_STATE = {\n  saved: false,\n  restored: false,\n  deleted: false,\n};\n\n/**\n * @type {Writable<{ show: boolean, timestamp?: Date, resolve?: (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  // @todo Remove the legacy `siteConfigVersion` check prior to the 1.0 release\n  if ((backup.siteConfigVersion ?? 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 (!(get(prefs).useDraftBackup ?? true)) {\n    return;\n  }\n\n  const {\n    collectionName,\n    fileName,\n    originalEntry,\n    currentLocales = {},\n    currentSlugs = {},\n    currentValues = {},\n    files,\n  } = draft;\n\n  const slug = fileName ?? originalEntry?.slug ?? '';\n\n  if (get(entryDraftModified)) {\n    /** @type {EntryDraftBackup} */\n    const backup = {\n      timestamp: new Date(),\n      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      Object.entries(currentValues).forEach(([locale, valueMap]) => {\n        Object.entries(valueMap).forEach(([keyPath, value]) => {\n          if (typeof value === 'string') {\n            [...value.matchAll(getBlobRegex('g'))].forEach(([blobURL]) => {\n              let cache = files[blobURL];\n\n              // Support `LegacyEntryFileMap`\n              // @todo Remove this before the 1.0 release\n              if (cache instanceof File) {\n                cache = { file: cache, folder: undefined };\n              }\n\n              if (!cache) {\n                return;\n              }\n\n              const { file } = cache;\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 (!(get(prefs).useDraftBackup ?? true)) {\n    return;\n  }\n\n  const backup = await getBackup(collectionName, slug);\n\n  if (!backup) {\n    return;\n  }\n\n  const { timestamp } = backup;\n\n  /** @type {boolean | undefined} */\n  const doRestore = await new Promise((resolve) => {\n    // The promise will be resolved once the Restore or Discard button is clicked on the dialog\n    restoreDialogState.set({ show: true, timestamp, resolve });\n  });\n\n  if (doRestore === undefined) {\n    return;\n  }\n\n  if (doRestore) {\n    restoreBackup({ backup, collectionName, fileName });\n  } else {\n    await deleteBackup(collectionName, slug);\n  }\n\n  backupToastState.set({ restored: doRestore, deleted: !doRestore, saved: false });\n};\n\n/**\n * Check if the current entry’s draft backup has been saved, and if so, show a toast notification.\n */\nexport const showBackupToastIfNeeded = async () => {\n  if (!(get(prefs).useDraftBackup ?? true)) {\n    return;\n  }\n\n  const draft = get(entryDraft);\n\n  if (!draft || get(backupToastState).saved) {\n    return;\n  }\n\n  const { collectionName, originalEntry } = draft;\n  const backup = await getBackup(collectionName, originalEntry?.slug);\n\n  if (backup) {\n    backupToastState.set({ restored: false, deleted: false, saved: true });\n  }\n};\n\n/**\n * Reset {@link backupToastState}.\n */\nexport const resetBackupToastState = () => {\n  backupToastState.set({ ...BACKUP_TOAST_DEFAULT_STATE });\n};\n\nbackend.subscribe((_backend) => {\n  if (_backend && !backupDB) {\n    const { databaseName } = _backend.repository ?? {};\n\n    if (databaseName) {\n      backupDB = new IndexedDB(databaseName, 'draft-backups', {\n        keyPath: ['collectionName', 'slug'], // Composite key\n      });\n\n      return;\n    }\n  }\n\n  backupDB = null;\n});\n\n// Automatically backup the draft; use a timer to avoid typing lag\nentryDraft.subscribe((draft) => {\n  globalThis.clearTimeout(backupTimeout);\n\n  if (draft && backupDB) {\n    backupTimeout = globalThis.setTimeout(() => {\n      saveBackup(draft);\n    }, 500);\n  }\n});\n","<script>\n  import { Alert, ConfirmationDialog, Toast } from '@sveltia/ui';\n  import { _, locale as appLocale } from 'svelte-i18n';\n\n  import { backupToastState, restoreDialogState } from '$lib/services/contents/draft/backup';\n  import { showContentOverlay } from '$lib/services/contents/editor';\n\n  const now = $derived(new Date());\n  const { resolve, timestamp } = $derived($restoreDialogState);\n  const sameYear = $derived(now.getUTCFullYear() === timestamp?.getUTCFullYear());\n  const sameMonth = $derived(sameYear && now.getUTCMonth() === timestamp?.getUTCMonth());\n  const sameDay = $derived(sameMonth && now.getUTCDate() === timestamp?.getUTCDate());\n  const datetime = $derived(\n    timestamp?.toLocaleString($appLocale ?? undefined, {\n      year: sameYear ? undefined : 'numeric',\n      month: sameDay ? undefined : 'short',\n      day: sameDay ? undefined : 'numeric',\n      hour: 'numeric',\n      minute: 'numeric',\n    }),\n  );\n\n  $effect(() => {\n    if (!$showContentOverlay && $restoreDialogState.show) {\n      // Close the dialog when the Content Editor is closed\n      $restoreDialogState.show = false;\n      resolve?.();\n    }\n  });\n</script>\n\n<ConfirmationDialog\n  bind:open={$restoreDialogState.show}\n  title={$_('restore_backup_title')}\n  okLabel={$_('restore')}\n  cancelLabel={$_('discard')}\n  onOk={() => {\n    resolve?.(true);\n  }}\n  onCancel={() => {\n    resolve?.(false);\n  }}\n>\n  {$_('restore_backup_description', { values: { datetime } })}\n</ConfirmationDialog>\n\n<Toast bind:show={$backupToastState.saved}>\n  <Alert status=\"info\">\n    {$_('draft_backup_saved')}\n  </Alert>\n</Toast>\n\n<Toast bind:show={$backupToastState.restored}>\n  <Alert status=\"success\">\n    {$_('draft_backup_restored')}\n  </Alert>\n</Toast>\n\n<Toast bind:show={$backupToastState.deleted}>\n  <Alert status=\"info\">\n    {$_('draft_backup_deleted')}\n  </Alert>\n</Toast>\n","<script>\n  import { waitForVisibility } from '@sveltia/utils/element';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Snippet} children Slot content.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    children,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {HTMLElement | null} */\n  let placeholder = $state(null);\n  /** @type {boolean} */\n  let visible = $state(false);\n\n  $effect(() => {\n    if (placeholder) {\n      (async () => {\n        await waitForVisibility(placeholder);\n        visible = true;\n      })();\n    }\n  });\n</script>\n\n{#if visible}\n  {@render children()}\n{:else}\n  <div class=\"placeholder\" bind:this={placeholder}></div>\n{/if}\n\n<style lang=\"scss\">\n  .placeholder {\n    height: 64px;\n  }\n</style>\n","function extend (destination) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n    for (var key in source) {\n      if (source.hasOwnProperty(key)) destination[key] = source[key];\n    }\n  }\n  return destination\n}\n\nfunction repeat (character, count) {\n  return Array(count + 1).join(character)\n}\n\nfunction trimLeadingNewlines (string) {\n  return string.replace(/^\\n*/, '')\n}\n\nfunction trimTrailingNewlines (string) {\n  // avoid match-at-end regexp bottleneck, see #370\n  var indexEnd = string.length;\n  while (indexEnd > 0 && string[indexEnd - 1] === '\\n') indexEnd--;\n  return string.substring(0, indexEnd)\n}\n\nfunction trimNewlines (string) {\n  return trimTrailingNewlines(trimLeadingNewlines(string))\n}\n\nvar blockElements = [\n  'ADDRESS', 'ARTICLE', 'ASIDE', 'AUDIO', 'BLOCKQUOTE', 'BODY', 'CANVAS',\n  'CENTER', 'DD', 'DIR', 'DIV', 'DL', 'DT', 'FIELDSET', 'FIGCAPTION', 'FIGURE',\n  'FOOTER', 'FORM', 'FRAMESET', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'HEADER',\n  'HGROUP', 'HR', 'HTML', 'ISINDEX', 'LI', 'MAIN', 'MENU', 'NAV', 'NOFRAMES',\n  'NOSCRIPT', 'OL', 'OUTPUT', 'P', 'PRE', 'SECTION', 'TABLE', 'TBODY', 'TD',\n  'TFOOT', 'TH', 'THEAD', 'TR', 'UL'\n];\n\nfunction isBlock (node) {\n  return is(node, blockElements)\n}\n\nvar voidElements = [\n  'AREA', 'BASE', 'BR', 'COL', 'COMMAND', 'EMBED', 'HR', 'IMG', 'INPUT',\n  'KEYGEN', 'LINK', 'META', 'PARAM', 'SOURCE', 'TRACK', 'WBR'\n];\n\nfunction isVoid (node) {\n  return is(node, voidElements)\n}\n\nfunction hasVoid (node) {\n  return has(node, voidElements)\n}\n\nvar meaningfulWhenBlankElements = [\n  'A', 'TABLE', 'THEAD', 'TBODY', 'TFOOT', 'TH', 'TD', 'IFRAME', 'SCRIPT',\n  'AUDIO', 'VIDEO'\n];\n\nfunction isMeaningfulWhenBlank (node) {\n  return is(node, meaningfulWhenBlankElements)\n}\n\nfunction hasMeaningfulWhenBlank (node) {\n  return has(node, meaningfulWhenBlankElements)\n}\n\nfunction is (node, tagNames) {\n  return tagNames.indexOf(node.nodeName) >= 0\n}\n\nfunction has (node, tagNames) {\n  return (\n    node.getElementsByTagName &&\n    tagNames.some(function (tagName) {\n      return node.getElementsByTagName(tagName).length\n    })\n  )\n}\n\nvar rules = {};\n\nrules.paragraph = {\n  filter: 'p',\n\n  replacement: function (content) {\n    return '\\n\\n' + content + '\\n\\n'\n  }\n};\n\nrules.lineBreak = {\n  filter: 'br',\n\n  replacement: function (content, node, options) {\n    return options.br + '\\n'\n  }\n};\n\nrules.heading = {\n  filter: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'],\n\n  replacement: function (content, node, options) {\n    var hLevel = Number(node.nodeName.charAt(1));\n\n    if (options.headingStyle === 'setext' && hLevel < 3) {\n      var underline = repeat((hLevel === 1 ? '=' : '-'), content.length);\n      return (\n        '\\n\\n' + content + '\\n' + underline + '\\n\\n'\n      )\n    } else {\n      return '\\n\\n' + repeat('#', hLevel) + ' ' + content + '\\n\\n'\n    }\n  }\n};\n\nrules.blockquote = {\n  filter: 'blockquote',\n\n  replacement: function (content) {\n    content = trimNewlines(content).replace(/^/gm, '> ');\n    return '\\n\\n' + content + '\\n\\n'\n  }\n};\n\nrules.list = {\n  filter: ['ul', 'ol'],\n\n  replacement: function (content, node) {\n    var parent = node.parentNode;\n    if (parent.nodeName === 'LI' && parent.lastElementChild === node) {\n      return '\\n' + content\n    } else {\n      return '\\n\\n' + content + '\\n\\n'\n    }\n  }\n};\n\nrules.listItem = {\n  filter: 'li',\n\n  replacement: function (content, node, options) {\n    var prefix = options.bulletListMarker + '   ';\n    var parent = node.parentNode;\n    if (parent.nodeName === 'OL') {\n      var start = parent.getAttribute('start');\n      var index = Array.prototype.indexOf.call(parent.children, node);\n      prefix = (start ? Number(start) + index : index + 1) + '.  ';\n    }\n    var isParagraph = /\\n$/.test(content);\n    content = trimNewlines(content) + (isParagraph ? '\\n' : '');\n    content = content.replace(/\\n/gm, '\\n' + ' '.repeat(prefix.length)); // indent\n    return (\n      prefix + content + (node.nextSibling ? '\\n' : '')\n    )\n  }\n};\n\nrules.indentedCodeBlock = {\n  filter: function (node, options) {\n    return (\n      options.codeBlockStyle === 'indented' &&\n      node.nodeName === 'PRE' &&\n      node.firstChild &&\n      node.firstChild.nodeName === 'CODE'\n    )\n  },\n\n  replacement: function (content, node, options) {\n    return (\n      '\\n\\n    ' +\n      node.firstChild.textContent.replace(/\\n/g, '\\n    ') +\n      '\\n\\n'\n    )\n  }\n};\n\nrules.fencedCodeBlock = {\n  filter: function (node, options) {\n    return (\n      options.codeBlockStyle === 'fenced' &&\n      node.nodeName === 'PRE' &&\n      node.firstChild &&\n      node.firstChild.nodeName === 'CODE'\n    )\n  },\n\n  replacement: function (content, node, options) {\n    var className = node.firstChild.getAttribute('class') || '';\n    var language = (className.match(/language-(\\S+)/) || [null, ''])[1];\n    var code = node.firstChild.textContent;\n\n    var fenceChar = options.fence.charAt(0);\n    var fenceSize = 3;\n    var fenceInCodeRegex = new RegExp('^' + fenceChar + '{3,}', 'gm');\n\n    var match;\n    while ((match = fenceInCodeRegex.exec(code))) {\n      if (match[0].length >= fenceSize) {\n        fenceSize = match[0].length + 1;\n      }\n    }\n\n    var fence = repeat(fenceChar, fenceSize);\n\n    return (\n      '\\n\\n' + fence + language + '\\n' +\n      code.replace(/\\n$/, '') +\n      '\\n' + fence + '\\n\\n'\n    )\n  }\n};\n\nrules.horizontalRule = {\n  filter: 'hr',\n\n  replacement: function (content, node, options) {\n    return '\\n\\n' + options.hr + '\\n\\n'\n  }\n};\n\nrules.inlineLink = {\n  filter: function (node, options) {\n    return (\n      options.linkStyle === 'inlined' &&\n      node.nodeName === 'A' &&\n      node.getAttribute('href')\n    )\n  },\n\n  replacement: function (content, node) {\n    var href = node.getAttribute('href');\n    if (href) href = href.replace(/([()])/g, '\\\\$1');\n    var title = cleanAttribute(node.getAttribute('title'));\n    if (title) title = ' \"' + title.replace(/\"/g, '\\\\\"') + '\"';\n    return '[' + content + '](' + href + title + ')'\n  }\n};\n\nrules.referenceLink = {\n  filter: function (node, options) {\n    return (\n      options.linkStyle === 'referenced' &&\n      node.nodeName === 'A' &&\n      node.getAttribute('href')\n    )\n  },\n\n  replacement: function (content, node, options) {\n    var href = node.getAttribute('href');\n    var title = cleanAttribute(node.getAttribute('title'));\n    if (title) title = ' \"' + title + '\"';\n    var replacement;\n    var reference;\n\n    switch (options.linkReferenceStyle) {\n      case 'collapsed':\n        replacement = '[' + content + '][]';\n        reference = '[' + content + ']: ' + href + title;\n        break\n      case 'shortcut':\n        replacement = '[' + content + ']';\n        reference = '[' + content + ']: ' + href + title;\n        break\n      default:\n        var id = this.references.length + 1;\n        replacement = '[' + content + '][' + id + ']';\n        reference = '[' + id + ']: ' + href + title;\n    }\n\n    this.references.push(reference);\n    return replacement\n  },\n\n  references: [],\n\n  append: function (options) {\n    var references = '';\n    if (this.references.length) {\n      references = '\\n\\n' + this.references.join('\\n') + '\\n\\n';\n      this.references = []; // Reset references\n    }\n    return references\n  }\n};\n\nrules.emphasis = {\n  filter: ['em', 'i'],\n\n  replacement: function (content, node, options) {\n    if (!content.trim()) return ''\n    return options.emDelimiter + content + options.emDelimiter\n  }\n};\n\nrules.strong = {\n  filter: ['strong', 'b'],\n\n  replacement: function (content, node, options) {\n    if (!content.trim()) return ''\n    return options.strongDelimiter + content + options.strongDelimiter\n  }\n};\n\nrules.code = {\n  filter: function (node) {\n    var hasSiblings = node.previousSibling || node.nextSibling;\n    var isCodeBlock = node.parentNode.nodeName === 'PRE' && !hasSiblings;\n\n    return node.nodeName === 'CODE' && !isCodeBlock\n  },\n\n  replacement: function (content) {\n    if (!content) return ''\n    content = content.replace(/\\r?\\n|\\r/g, ' ');\n\n    var extraSpace = /^`|^ .*?[^ ].* $|`$/.test(content) ? ' ' : '';\n    var delimiter = '`';\n    var matches = content.match(/`+/gm) || [];\n    while (matches.indexOf(delimiter) !== -1) delimiter = delimiter + '`';\n\n    return delimiter + extraSpace + content + extraSpace + delimiter\n  }\n};\n\nrules.image = {\n  filter: 'img',\n\n  replacement: function (content, node) {\n    var alt = cleanAttribute(node.getAttribute('alt'));\n    var src = node.getAttribute('src') || '';\n    var title = cleanAttribute(node.getAttribute('title'));\n    var titlePart = title ? ' \"' + title + '\"' : '';\n    return src ? '![' + alt + ']' + '(' + src + titlePart + ')' : ''\n  }\n};\n\nfunction cleanAttribute (attribute) {\n  return attribute ? attribute.replace(/(\\n+\\s*)+/g, '\\n') : ''\n}\n\n/**\n * Manages a collection of rules used to convert HTML to Markdown\n */\n\nfunction Rules (options) {\n  this.options = options;\n  this._keep = [];\n  this._remove = [];\n\n  this.blankRule = {\n    replacement: options.blankReplacement\n  };\n\n  this.keepReplacement = options.keepReplacement;\n\n  this.defaultRule = {\n    replacement: options.defaultReplacement\n  };\n\n  this.array = [];\n  for (var key in options.rules) this.array.push(options.rules[key]);\n}\n\nRules.prototype = {\n  add: function (key, rule) {\n    this.array.unshift(rule);\n  },\n\n  keep: function (filter) {\n    this._keep.unshift({\n      filter: filter,\n      replacement: this.keepReplacement\n    });\n  },\n\n  remove: function (filter) {\n    this._remove.unshift({\n      filter: filter,\n      replacement: function () {\n        return ''\n      }\n    });\n  },\n\n  forNode: function (node) {\n    if (node.isBlank) return this.blankRule\n    var rule;\n\n    if ((rule = findRule(this.array, node, this.options))) return rule\n    if ((rule = findRule(this._keep, node, this.options))) return rule\n    if ((rule = findRule(this._remove, node, this.options))) return rule\n\n    return this.defaultRule\n  },\n\n  forEach: function (fn) {\n    for (var i = 0; i < this.array.length; i++) fn(this.array[i], i);\n  }\n};\n\nfunction findRule (rules, node, options) {\n  for (var i = 0; i < rules.length; i++) {\n    var rule = rules[i];\n    if (filterValue(rule, node, options)) return rule\n  }\n  return void 0\n}\n\nfunction filterValue (rule, node, options) {\n  var filter = rule.filter;\n  if (typeof filter === 'string') {\n    if (filter === node.nodeName.toLowerCase()) return true\n  } else if (Array.isArray(filter)) {\n    if (filter.indexOf(node.nodeName.toLowerCase()) > -1) return true\n  } else if (typeof filter === 'function') {\n    if (filter.call(rule, node, options)) return true\n  } else {\n    throw new TypeError('`filter` needs to be a string, array, or function')\n  }\n}\n\n/**\n * The collapseWhitespace function is adapted from collapse-whitespace\n * by Luc Thevenard.\n *\n * The MIT License (MIT)\n *\n * Copyright (c) 2014 Luc Thevenard <lucthevenard@gmail.com>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/**\n * collapseWhitespace(options) removes extraneous whitespace from an the given element.\n *\n * @param {Object} options\n */\nfunction collapseWhitespace (options) {\n  var element = options.element;\n  var isBlock = options.isBlock;\n  var isVoid = options.isVoid;\n  var isPre = options.isPre || function (node) {\n    return node.nodeName === 'PRE'\n  };\n\n  if (!element.firstChild || isPre(element)) return\n\n  var prevText = null;\n  var keepLeadingWs = false;\n\n  var prev = null;\n  var node = next(prev, element, isPre);\n\n  while (node !== element) {\n    if (node.nodeType === 3 || node.nodeType === 4) { // Node.TEXT_NODE or Node.CDATA_SECTION_NODE\n      var text = node.data.replace(/[ \\r\\n\\t]+/g, ' ');\n\n      if ((!prevText || / $/.test(prevText.data)) &&\n          !keepLeadingWs && text[0] === ' ') {\n        text = text.substr(1);\n      }\n\n      // `text` might be empty at this point.\n      if (!text) {\n        node = remove(node);\n        continue\n      }\n\n      node.data = text;\n\n      prevText = node;\n    } else if (node.nodeType === 1) { // Node.ELEMENT_NODE\n      if (isBlock(node) || node.nodeName === 'BR') {\n        if (prevText) {\n          prevText.data = prevText.data.replace(/ $/, '');\n        }\n\n        prevText = null;\n        keepLeadingWs = false;\n      } else if (isVoid(node) || isPre(node)) {\n        // Avoid trimming space around non-block, non-BR void elements and inline PRE.\n        prevText = null;\n        keepLeadingWs = true;\n      } else if (prevText) {\n        // Drop protection if set previously.\n        keepLeadingWs = false;\n      }\n    } else {\n      node = remove(node);\n      continue\n    }\n\n    var nextNode = next(prev, node, isPre);\n    prev = node;\n    node = nextNode;\n  }\n\n  if (prevText) {\n    prevText.data = prevText.data.replace(/ $/, '');\n    if (!prevText.data) {\n      remove(prevText);\n    }\n  }\n}\n\n/**\n * remove(node) removes the given node from the DOM and returns the\n * next node in the sequence.\n *\n * @param {Node} node\n * @return {Node} node\n */\nfunction remove (node) {\n  var next = node.nextSibling || node.parentNode;\n\n  node.parentNode.removeChild(node);\n\n  return next\n}\n\n/**\n * next(prev, current, isPre) returns the next node in the sequence, given the\n * current and previous nodes.\n *\n * @param {Node} prev\n * @param {Node} current\n * @param {Function} isPre\n * @return {Node}\n */\nfunction next (prev, current, isPre) {\n  if ((prev && prev.parentNode === current) || isPre(current)) {\n    return current.nextSibling || current.parentNode\n  }\n\n  return current.firstChild || current.nextSibling || current.parentNode\n}\n\n/*\n * Set up window for Node.js\n */\n\nvar root = (typeof window !== 'undefined' ? window : {});\n\n/*\n * Parsing HTML strings\n */\n\nfunction canParseHTMLNatively () {\n  var Parser = root.DOMParser;\n  var canParse = false;\n\n  // Adapted from https://gist.github.com/1129031\n  // Firefox/Opera/IE throw errors on unsupported types\n  try {\n    // WebKit returns null on unsupported types\n    if (new Parser().parseFromString('', 'text/html')) {\n      canParse = true;\n    }\n  } catch (e) {}\n\n  return canParse\n}\n\nfunction createHTMLParser () {\n  var Parser = function () {};\n\n  {\n    if (shouldUseActiveX()) {\n      Parser.prototype.parseFromString = function (string) {\n        var doc = new window.ActiveXObject('htmlfile');\n        doc.designMode = 'on'; // disable on-page scripts\n        doc.open();\n        doc.write(string);\n        doc.close();\n        return doc\n      };\n    } else {\n      Parser.prototype.parseFromString = function (string) {\n        var doc = document.implementation.createHTMLDocument('');\n        doc.open();\n        doc.write(string);\n        doc.close();\n        return doc\n      };\n    }\n  }\n  return Parser\n}\n\nfunction shouldUseActiveX () {\n  var useActiveX = false;\n  try {\n    document.implementation.createHTMLDocument('').open();\n  } catch (e) {\n    if (root.ActiveXObject) useActiveX = true;\n  }\n  return useActiveX\n}\n\nvar HTMLParser = canParseHTMLNatively() ? root.DOMParser : createHTMLParser();\n\nfunction RootNode (input, options) {\n  var root;\n  if (typeof input === 'string') {\n    var doc = htmlParser().parseFromString(\n      // DOM parsers arrange elements in the <head> and <body>.\n      // Wrapping in a custom element ensures elements are reliably arranged in\n      // a single element.\n      '<x-turndown id=\"turndown-root\">' + input + '</x-turndown>',\n      'text/html'\n    );\n    root = doc.getElementById('turndown-root');\n  } else {\n    root = input.cloneNode(true);\n  }\n  collapseWhitespace({\n    element: root,\n    isBlock: isBlock,\n    isVoid: isVoid,\n    isPre: options.preformattedCode ? isPreOrCode : null\n  });\n\n  return root\n}\n\nvar _htmlParser;\nfunction htmlParser () {\n  _htmlParser = _htmlParser || new HTMLParser();\n  return _htmlParser\n}\n\nfunction isPreOrCode (node) {\n  return node.nodeName === 'PRE' || node.nodeName === 'CODE'\n}\n\nfunction Node (node, options) {\n  node.isBlock = isBlock(node);\n  node.isCode = node.nodeName === 'CODE' || node.parentNode.isCode;\n  node.isBlank = isBlank(node);\n  node.flankingWhitespace = flankingWhitespace(node, options);\n  return node\n}\n\nfunction isBlank (node) {\n  return (\n    !isVoid(node) &&\n    !isMeaningfulWhenBlank(node) &&\n    /^\\s*$/i.test(node.textContent) &&\n    !hasVoid(node) &&\n    !hasMeaningfulWhenBlank(node)\n  )\n}\n\nfunction flankingWhitespace (node, options) {\n  if (node.isBlock || (options.preformattedCode && node.isCode)) {\n    return { leading: '', trailing: '' }\n  }\n\n  var edges = edgeWhitespace(node.textContent);\n\n  // abandon leading ASCII WS if left-flanked by ASCII WS\n  if (edges.leadingAscii && isFlankedByWhitespace('left', node, options)) {\n    edges.leading = edges.leadingNonAscii;\n  }\n\n  // abandon trailing ASCII WS if right-flanked by ASCII WS\n  if (edges.trailingAscii && isFlankedByWhitespace('right', node, options)) {\n    edges.trailing = edges.trailingNonAscii;\n  }\n\n  return { leading: edges.leading, trailing: edges.trailing }\n}\n\nfunction edgeWhitespace (string) {\n  var m = string.match(/^(([ \\t\\r\\n]*)(\\s*))(?:(?=\\S)[\\s\\S]*\\S)?((\\s*?)([ \\t\\r\\n]*))$/);\n  return {\n    leading: m[1], // whole string for whitespace-only strings\n    leadingAscii: m[2],\n    leadingNonAscii: m[3],\n    trailing: m[4], // empty for whitespace-only strings\n    trailingNonAscii: m[5],\n    trailingAscii: m[6]\n  }\n}\n\nfunction isFlankedByWhitespace (side, node, options) {\n  var sibling;\n  var regExp;\n  var isFlanked;\n\n  if (side === 'left') {\n    sibling = node.previousSibling;\n    regExp = / $/;\n  } else {\n    sibling = node.nextSibling;\n    regExp = /^ /;\n  }\n\n  if (sibling) {\n    if (sibling.nodeType === 3) {\n      isFlanked = regExp.test(sibling.nodeValue);\n    } else if (options.preformattedCode && sibling.nodeName === 'CODE') {\n      isFlanked = false;\n    } else if (sibling.nodeType === 1 && !isBlock(sibling)) {\n      isFlanked = regExp.test(sibling.textContent);\n    }\n  }\n  return isFlanked\n}\n\nvar reduce = Array.prototype.reduce;\nvar escapes = [\n  [/\\\\/g, '\\\\\\\\'],\n  [/\\*/g, '\\\\*'],\n  [/^-/g, '\\\\-'],\n  [/^\\+ /g, '\\\\+ '],\n  [/^(=+)/g, '\\\\$1'],\n  [/^(#{1,6}) /g, '\\\\$1 '],\n  [/`/g, '\\\\`'],\n  [/^~~~/g, '\\\\~~~'],\n  [/\\[/g, '\\\\['],\n  [/\\]/g, '\\\\]'],\n  [/^>/g, '\\\\>'],\n  [/_/g, '\\\\_'],\n  [/^(\\d+)\\. /g, '$1\\\\. ']\n];\n\nfunction TurndownService (options) {\n  if (!(this instanceof TurndownService)) return new TurndownService(options)\n\n  var defaults = {\n    rules: rules,\n    headingStyle: 'setext',\n    hr: '* * *',\n    bulletListMarker: '*',\n    codeBlockStyle: 'indented',\n    fence: '```',\n    emDelimiter: '_',\n    strongDelimiter: '**',\n    linkStyle: 'inlined',\n    linkReferenceStyle: 'full',\n    br: '  ',\n    preformattedCode: false,\n    blankReplacement: function (content, node) {\n      return node.isBlock ? '\\n\\n' : ''\n    },\n    keepReplacement: function (content, node) {\n      return node.isBlock ? '\\n\\n' + node.outerHTML + '\\n\\n' : node.outerHTML\n    },\n    defaultReplacement: function (content, node) {\n      return node.isBlock ? '\\n\\n' + content + '\\n\\n' : content\n    }\n  };\n  this.options = extend({}, defaults, options);\n  this.rules = new Rules(this.options);\n}\n\nTurndownService.prototype = {\n  /**\n   * The entry point for converting a string or DOM node to Markdown\n   * @public\n   * @param {String|HTMLElement} input The string or DOM node to convert\n   * @returns A Markdown representation of the input\n   * @type String\n   */\n\n  turndown: function (input) {\n    if (!canConvert(input)) {\n      throw new TypeError(\n        input + ' is not a string, or an element/document/fragment node.'\n      )\n    }\n\n    if (input === '') return ''\n\n    var output = process.call(this, new RootNode(input, this.options));\n    return postProcess.call(this, output)\n  },\n\n  /**\n   * Add one or more plugins\n   * @public\n   * @param {Function|Array} plugin The plugin or array of plugins to add\n   * @returns The Turndown instance for chaining\n   * @type Object\n   */\n\n  use: function (plugin) {\n    if (Array.isArray(plugin)) {\n      for (var i = 0; i < plugin.length; i++) this.use(plugin[i]);\n    } else if (typeof plugin === 'function') {\n      plugin(this);\n    } else {\n      throw new TypeError('plugin must be a Function or an Array of Functions')\n    }\n    return this\n  },\n\n  /**\n   * Adds a rule\n   * @public\n   * @param {String} key The unique key of the rule\n   * @param {Object} rule The rule\n   * @returns The Turndown instance for chaining\n   * @type Object\n   */\n\n  addRule: function (key, rule) {\n    this.rules.add(key, rule);\n    return this\n  },\n\n  /**\n   * Keep a node (as HTML) that matches the filter\n   * @public\n   * @param {String|Array|Function} filter The unique key of the rule\n   * @returns The Turndown instance for chaining\n   * @type Object\n   */\n\n  keep: function (filter) {\n    this.rules.keep(filter);\n    return this\n  },\n\n  /**\n   * Remove a node that matches the filter\n   * @public\n   * @param {String|Array|Function} filter The unique key of the rule\n   * @returns The Turndown instance for chaining\n   * @type Object\n   */\n\n  remove: function (filter) {\n    this.rules.remove(filter);\n    return this\n  },\n\n  /**\n   * Escapes Markdown syntax\n   * @public\n   * @param {String} string The string to escape\n   * @returns A string with Markdown syntax escaped\n   * @type String\n   */\n\n  escape: function (string) {\n    return escapes.reduce(function (accumulator, escape) {\n      return accumulator.replace(escape[0], escape[1])\n    }, string)\n  }\n};\n\n/**\n * Reduces a DOM node down to its Markdown string equivalent\n * @private\n * @param {HTMLElement} parentNode The node to convert\n * @returns A Markdown representation of the node\n * @type String\n */\n\nfunction process (parentNode) {\n  var self = this;\n  return reduce.call(parentNode.childNodes, function (output, node) {\n    node = new Node(node, self.options);\n\n    var replacement = '';\n    if (node.nodeType === 3) {\n      replacement = node.isCode ? node.nodeValue : self.escape(node.nodeValue);\n    } else if (node.nodeType === 1) {\n      replacement = replacementForNode.call(self, node);\n    }\n\n    return join(output, replacement)\n  }, '')\n}\n\n/**\n * Appends strings as each rule requires and trims the output\n * @private\n * @param {String} output The conversion output\n * @returns A trimmed version of the ouput\n * @type String\n */\n\nfunction postProcess (output) {\n  var self = this;\n  this.rules.forEach(function (rule) {\n    if (typeof rule.append === 'function') {\n      output = join(output, rule.append(self.options));\n    }\n  });\n\n  return output.replace(/^[\\t\\r\\n]+/, '').replace(/[\\t\\r\\n\\s]+$/, '')\n}\n\n/**\n * Converts an element node to its Markdown equivalent\n * @private\n * @param {HTMLElement} node The node to convert\n * @returns A Markdown representation of the node\n * @type String\n */\n\nfunction replacementForNode (node) {\n  var rule = this.rules.forNode(node);\n  var content = process.call(this, node);\n  var whitespace = node.flankingWhitespace;\n  if (whitespace.leading || whitespace.trailing) content = content.trim();\n  return (\n    whitespace.leading +\n    rule.replacement(content, node, this.options) +\n    whitespace.trailing\n  )\n}\n\n/**\n * Joins replacement to the current output with appropriate number of new lines\n * @private\n * @param {String} output The current conversion output\n * @param {String} replacement The string to append to the output\n * @returns Joined output\n * @type String\n */\n\nfunction join (output, replacement) {\n  var s1 = trimTrailingNewlines(output);\n  var s2 = trimLeadingNewlines(replacement);\n  var nls = Math.max(output.length - s1.length, replacement.length - s2.length);\n  var separator = '\\n\\n'.substring(0, nls);\n\n  return s1 + separator + s2\n}\n\n/**\n * Determines whether an input can be converted\n * @private\n * @param {String|HTMLElement} input Describe this parameter\n * @returns Describe what it returns\n * @type String|Object|Array|Boolean|Number\n */\n\nfunction canConvert (input) {\n  return (\n    input != null && (\n      typeof input === 'string' ||\n      (input.nodeType && (\n        input.nodeType === 1 || input.nodeType === 9 || input.nodeType === 11\n      ))\n    )\n  )\n}\n\nexport default TurndownService;\n","import { escapeRegExp } from '@sveltia/utils/string';\n\nimport {\n  getField,\n  getFieldDisplayValue,\n  getVisibleFieldDisplayValue,\n} from '$lib/services/contents/entry/fields';\n\n/**\n * @import { FlattenedEntryContent, GetFieldArgs, InternalLocaleCode } from '$lib/types/private';\n * @import { 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    let keyPathRegex = listSummaryRegexCache.get(cacheKey);\n\n    if (!keyPathRegex) {\n      keyPathRegex = new RegExp(`^${escapeRegExp(keyPath)}\\\\.${index}[\\\\b\\\\.]`);\n      listSummaryRegexCache.set(cacheKey, keyPathRegex);\n    }\n\n    return getVisibleFieldDisplayValue({\n      valueMap,\n      locale,\n      keyPath: keyPathWithIndex,\n      keyPathRegex,\n      getFieldArgs,\n    });\n  }\n\n  return summaryTemplate.replaceAll(/{{(.+?)}}/g, (_match, /** @type {string} */ placeholder) => {\n    const [tag, ...transformations] = placeholder.split(/\\s*\\|\\s*/);\n    const fieldName = tag.replace(/^fields\\./, '');\n    const _keyPath = `${keyPathWithIndex}.${fieldName}`;\n\n    if (hasSingleSubField) {\n      // For single-field lists, check if the requested field name matches the actual field name\n      const listFieldConfig = /** @type {ListField} */ (getField({ ...getFieldArgs, keyPath }));\n\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","/**\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 * 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","import {\n  apiKeyPattern,\n  apiKeyURL,\n  apiLabel,\n  complete,\n  developerURL,\n} from '$lib/services/integrations/ai/anthropic';\n\nimport {\n  createTranslationSystemPrompt,\n  createTranslationUserPrompt,\n  normalizeLanguage,\n  parseAiTranslationResponse,\n} from './shared.js';\n\n/**\n * @import { LanguagePair, TranslationOptions, TranslationService } from '$lib/types/private';\n */\n\nconst serviceId = 'anthropic';\nconst serviceLabel = 'Anthropic Claude';\nconst model = 'claude-haiku-4-5';\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 Anthropic Claude Haiku 4.5.\n * Supports markdown content and preserves formatting.\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://docs.claude.com/en/docs/about-claude/models/overview\n * @see https://docs.claude.com/en/api/messages\n */\nconst translate = async (texts, { sourceLanguage, targetLanguage, apiKey }) => {\n  const sourceLanguageName = normalizeLanguage(sourceLanguage);\n  const targetLanguageName = normalizeLanguage(targetLanguage);\n\n  if (!sourceLanguageName) {\n    throw new Error('Source locale is not supported.');\n  }\n\n  if (!targetLanguageName) {\n    throw new Error('Target locale is not supported.');\n  }\n\n  try {\n    const content = await complete({\n      apiKey,\n      model,\n      systemPrompt: createTranslationSystemPrompt(sourceLanguageName, targetLanguageName),\n      userMessage: createTranslationUserPrompt(texts),\n    });\n\n    return parseAiTranslationResponse(content, texts.length, 'Anthropic API');\n  } catch (error) {\n    if (error instanceof Error) {\n      throw error;\n    }\n\n    throw new Error('Failed to translate text with Anthropic API.');\n  }\n};\n\n/**\n * @type {TranslationService}\n */\nexport default {\n  serviceId,\n  serviceLabel,\n  apiLabel,\n  developerURL,\n  apiKeyURL,\n  apiKeyPattern,\n  markdownSupported: true,\n  availability,\n  translate,\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 = 'Google AI Studio 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 {\n  createTranslationSystemPrompt,\n  createTranslationUserPrompt,\n  normalizeLanguage,\n  parseAiTranslationResponse,\n} from './shared.js';\n\n/**\n * @import { LanguagePair, TranslationOptions, TranslationService } from '$lib/types/private';\n */\n\nconst serviceId = 'google-ai';\nconst serviceLabel = 'Google Gemini';\nconst model = 'gemini-2.5-flash-lite';\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 Gemini 2.5 Flash Lite.\n * Supports markdown content and preserves formatting.\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://ai.google.dev/gemini-api/docs/models/gemini\n * @see https://ai.google.dev/api/generate-content\n */\nconst translate = async (texts, { sourceLanguage, targetLanguage, apiKey }) => {\n  const sourceLanguageName = normalizeLanguage(sourceLanguage);\n  const targetLanguageName = normalizeLanguage(targetLanguage);\n\n  if (!sourceLanguageName) {\n    throw new Error('Source locale is not supported.');\n  }\n\n  if (!targetLanguageName) {\n    throw new Error('Target locale is not supported.');\n  }\n\n  try {\n    const content = await complete({\n      apiKey,\n      model,\n      systemPrompt: createTranslationSystemPrompt(sourceLanguageName, targetLanguageName),\n      userMessage: createTranslationUserPrompt(texts),\n      responseFormat: 'application/json',\n    });\n\n    return parseAiTranslationResponse(content, texts.length, 'Gemini API');\n  } catch (error) {\n    if (error instanceof Error) {\n      throw error;\n    }\n\n    throw new Error('Failed to translate text with Gemini API.');\n  }\n};\n\n/**\n * @type {TranslationService}\n */\nexport default {\n  serviceId,\n  serviceLabel,\n  apiLabel,\n  developerURL,\n  apiKeyURL,\n  apiKeyPattern,\n  markdownSupported: true,\n  availability,\n  translate,\n};\n","/**\n * Generic OpenAI API client.\n * @see https://platform.openai.com/docs/api-reference/chat/create\n */\n\n/**\n * @import { AiCompletionOptions } from '$lib/types/private';\n */\n\nconst apiEndpoint = 'https://api.openai.com/v1/chat/completions';\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 * Send a message to the OpenAI 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}) => {\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    }),\n  });\n\n  if (!response.ok) {\n    const errorData = await response.json().catch(() => ({}));\n\n    throw new Error(\n      `OpenAI API error: ${response.status} ${response.statusText}` +\n        `${errorData.error?.message ? ` - ${errorData.error.message}` : ''}`,\n    );\n  }\n\n  const data = await response.json();\n\n  if (!data.choices || !data.choices[0] || !data.choices[0].message) {\n    throw new Error('Invalid response format from OpenAI API.');\n  }\n\n  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/openai';\n\nimport {\n  createTranslationSystemPrompt,\n  createTranslationUserPrompt,\n  normalizeLanguage,\n  parseAiTranslationResponse,\n} from './shared.js';\n\n/**\n * @import { LanguagePair, TranslationOptions, TranslationService } from '$lib/types/private';\n */\n\nconst serviceId = 'openai';\nconst serviceLabel = 'OpenAI GPT';\nconst model = 'gpt-4o-mini';\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 OpenAI GPT.\n * Supports markdown content and preserves formatting.\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://platform.openai.com/docs/api-reference/chat/create\n */\nconst translate = async (texts, { sourceLanguage, targetLanguage, apiKey }) => {\n  const sourceLanguageName = normalizeLanguage(sourceLanguage);\n  const targetLanguageName = normalizeLanguage(targetLanguage);\n\n  if (!sourceLanguageName) {\n    throw new Error('Source locale is not supported.');\n  }\n\n  if (!targetLanguageName) {\n    throw new Error('Target locale is not supported.');\n  }\n\n  try {\n    const content = await complete({\n      apiKey,\n      model,\n      systemPrompt: createTranslationSystemPrompt(sourceLanguageName, targetLanguageName),\n      userMessage: createTranslationUserPrompt(texts),\n    });\n\n    return parseAiTranslationResponse(content, texts.length, 'OpenAI API');\n  } catch (error) {\n    if (error instanceof Error) {\n      throw error;\n    }\n\n    throw new Error('Failed to translate text with OpenAI API.');\n  }\n};\n\n/**\n * @type {TranslationService}\n */\nexport default {\n  serviceId,\n  serviceLabel,\n  apiLabel,\n  developerURL,\n  apiKeyURL,\n  apiKeyPattern,\n  markdownSupported: true,\n  availability,\n  translate,\n};\n","import { derived } from 'svelte/store';\n\nimport { prefs } from '$lib/services/user/prefs';\n\nimport anthropic from './anthropic';\nimport google from './google';\nimport googleAi from './google-ai';\nimport openai from './openai';\n\n/**\n * @import { Readable } from 'svelte/store';\n * @import { TranslationService } from '$lib/types/private';\n */\n\n/**\n * List of all the supported translation services.\n * @type {Record<string, TranslationService>}\n */\nexport const allTranslationServices = {\n  google,\n  'google-ai': googleAi,\n  anthropic,\n  openai,\n};\n\n/**\n * @type {Readable<TranslationService>}\n */\nexport const translator = derived([prefs], ([$prefs]) => {\n  const { defaultTranslationService = 'google' } = $prefs;\n\n  return allTranslationServices[defaultTranslationService] ?? google;\n});\n","import { 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';\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  const countType = count === 1 ? 'one' : 'many';\n\n  const apiKey =\n    get(prefs).apiKeys?.[serviceId] ||\n    (await new Promise((resolve) => {\n      // The promise will be resolved once the user enters an API key on the dialog\n      translatorApiKeyDialogState.set({ show: true, multiple: count > 1, resolve });\n    }));\n\n  if (!apiKey) {\n    return;\n  }\n\n  updateToast('info', 'translation.started', { count, 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.${countType}`, { 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  const countType = count === 1 ? 'one' : 'many';\n\n  Object.entries(copingFieldMap).forEach(([_keyPath, { value }]) => {\n    currentValues[targetLanguage][_keyPath] = value;\n  });\n\n  updateToast('success', `copy.complete.${countType}`, { 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 { MenuItem } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { copyFromLocale } from '$lib/services/contents/draft/update/copy';\n  import { getLocaleLabel } from '$lib/services/contents/i18n';\n  import { translator } from '$lib/services/integrations/translators';\n\n  /**\n   * @import { InternalLocaleCode, 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  /**\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<section role=\"group\" class=\"field\" {...rest}>\n  {@render children?.()}\n</section>\n\n<style lang=\"scss\">\n  section {\n    padding: var(--field-editor-padding);\n\n    &:not(:last-child) {\n      border-width: 0 0 1px;\n      border-color: var(--sui-secondary-border-color);\n    }\n\n    :global {\n      & > * {\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 { Button, Icon, Menu, MenuButton } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import CopyMenuItems from '$lib/components/contents/details/editor/copy-menu-items.svelte';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { copyFromLocale } from '$lib/services/contents/draft/update/copy';\n  import { getLocaleLabel } from '$lib/services/contents/i18n';\n  import { translator } from '$lib/services/integrations/translators';\n\n  /**\n   * @import { InternalLocaleCode, 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 {Snippet} children Slot content.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    id,\n    children,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div role=\"alert\" {id} class=\"validation\" aria-live=\"polite\">\n  <div role=\"none\">\n    <Icon name=\"error\" />\n    {@render children()}\n  </div>\n</div>\n\n<style lang=\"scss\">\n  .validation {\n    color: var(--sui-error-foreground-color) !important;\n    font-size: var(--sui-font-size-small);\n\n    div {\n      display: flex;\n      align-items: center;\n      gap: 4px;\n      margin: 4px 0;\n\n      :global(.icon) {\n        flex: none;\n        font-size: 16px; /* !hardcoded */\n      }\n    }\n  }\n</style>\n","<!--\n  @component\n  Implement the editor for 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 'svelte-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 { Button, Slider, TextInput } from '@sveltia/ui';\n  import { untrack } from 'svelte';\n  import { _ } from 'svelte-i18n';\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          id=\"{id}-input\"\n          bind:value={inputValue}\n          {invalid}\n          {readonly}\n          {required}\n          aria-labelledby=\"{fieldId}-label\"\n          aria-errormessage=\"{fieldId}-error\"\n        />\n      {/if}\n      {#if enableAlpha}\n        {$_('opacity')}\n        <Slider\n          min={0}\n          max={255}\n          disabled={!inputValue}\n          bind:value={inputAlphaValue}\n          aria-label={$_('opacity')}\n        />\n      {/if}\n    </span>\n  {/if}\n  {#if !readonly && !required}\n    <Button\n      variant=\"tertiary\"\n      label={$_('clear')}\n      disabled={!inputValue}\n      aria-controls={`${id}-picker ${allowInput ? `${id}-input` : ''}`}\n      onclick={() => {\n        inputValue = '';\n        inputAlphaValue = 255;\n      }}\n    />\n  {/if}\n</div>\n\n<style lang=\"scss\">\n  div {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n\n    .value {\n      display: flex;\n      align-items: center;\n      gap: 8px;\n\n      :global {\n        .sui.text-input {\n          width: 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 lang=\"scss\">\n  .preview {\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n\n    .color {\n      display: block;\n      width: 24px;\n      height: 24px;\n      border-radius: 24px;\n    }\n  }\n</style>\n","<!--\n  @component\n  Implement the editor for 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 { entryDraft } from '$lib/services/contents/draft';\n  import { getFieldDisplayValue } from '$lib/services/contents/entry/fields';\n  import { getListFormatter } from '$lib/services/contents/i18n';\n\n  /**\n   * @import { FieldEditorContext, 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?.match(/^\\d+$/) ? Number(index) : undefined;\n  };\n\n  /**\n   * Update {@link currentValue} based on the current values.\n   */\n  const setCurrentValue = () => {\n    // Check if the `keyPath` is valid, otherwise a list item containing this compute field cannot\n    // be removed due to the `currentValue` update below\n    if (!(keyPath in valueMap)) {\n      return;\n    }\n\n    const newValue = (() => {\n      if (valueTemplate === '{{index}}') {\n        return getIndex() ?? '';\n      }\n\n      return valueTemplate.replaceAll(/{{(.+?)}}/g, (_match, tagName) => {\n        if (tagName === 'index') {\n          return String(getIndex() ?? '');\n        }\n\n        if (!tagName.startsWith('fields.')) {\n          return '';\n        }\n\n        const value = getFieldDisplayValue({\n          collectionName,\n          fileName,\n          valueMap,\n          keyPath: tagName.replace(/^fields\\./, ''),\n          locale,\n          isIndexFile,\n        });\n\n        return Array.isArray(value) ? listFormatter.format(value) : String(value);\n      });\n    })();\n\n    // Make sure to avoid infinite loops\n    if (currentValue !== newValue) {\n      currentValue = newValue;\n    }\n  };\n\n  $effect(() => {\n    void [valueMap];\n\n    untrack(() => {\n      setCurrentValue();\n    });\n  });\n</script>\n\n<TextInput\n  value={String(currentValue)}\n  flex\n  {readonly}\n  {required}\n  {invalid}\n  aria-labelledby=\"{fieldId}-label\"\n  aria-errormessage=\"{fieldId}-error\"\n/>\n","<!--\n  @component\n  Implement the preview for a Compute field.\n-->\n<script>\n  import { getCanonicalLocale } 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=\"auto\">{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 { Button } from '@sveltia/ui';\n  import { untrack } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import {\n    getCurrentDateTime,\n    getCurrentValue,\n    getDate,\n    getInputValue,\n    parseDateTimeConfig,\n  } from '$lib/services/contents/fields/date-time/helper';\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 } = $derived(parseDateTimeConfig(fieldConfig));\n\n  /**\n   * Update {@link inputValue} based on {@link currentValue}.\n   */\n  const setInputValue = () => {\n    const _inputValue = getInputValue(currentValue, fieldConfig);\n\n    // Avoid a cycle dependency & infinite loop\n    if (_inputValue !== undefined && _inputValue !== inputValue) {\n      inputValue = _inputValue;\n    }\n  };\n\n  /**\n   * Update {@link currentValue} based on {@link inputValue}.\n   */\n  const setCurrentValue = () => {\n    const _currentValue = getCurrentValue(inputValue, currentValue, fieldConfig);\n\n    // Avoid a cycle dependency & infinite loop\n    if (\n      _currentValue !== undefined &&\n      _currentValue !== currentValue &&\n      // Compare the actual date/time: if a user edits an existing entry in a different location\n      // than where it was originally written, `inputValue` and `_currentValue` may shift to the\n      // current time zone, but the epoch won’t change. Don’t update `currentValue` in that case.\n      Number(getDate(_currentValue, fieldConfig)) !== Number(getDate(currentValue, fieldConfig))\n    ) {\n      currentValue = _currentValue;\n    }\n  };\n\n  $effect(() => {\n    void [currentValue];\n\n    untrack(() => {\n      setInputValue();\n    });\n  });\n\n  $effect(() => {\n    void [inputValue];\n\n    untrack(() => {\n      setCurrentValue();\n    });\n  });\n</script>\n\n<div role=\"none\">\n  <input\n    {...{ type, 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 utc}\n    <span role=\"none\" class=\"utc\">UTC</span>\n  {/if}\n  {#if !readonly}\n    <Button\n      variant=\"tertiary\"\n      label={$_(dateOnly ? 'today' : 'now')}\n      onclick={() => {\n        const dt = getCurrentDateTime(fieldConfig);\n\n        inputValue = utc ? dt.replace(/:00\\.000Z$/, '') : dt;\n      }}\n    />\n  {/if}\n  {#if !readonly && !required}\n    <Button\n      variant=\"tertiary\"\n      label={$_('clear')}\n      disabled={!currentValue}\n      onclick={() => {\n        currentValue = '';\n      }}\n    />\n  {/if}\n</div>\n\n<style lang=\"scss\">\n  div {\n    display: flex;\n    align-items: center;\n  }\n\n  .utc {\n    margin: 0 8px;\n    color: var(--sui-secondary-foreground-color);\n    font-size: var(--sui-font-size-small);\n  }\n</style>\n","<!--\n  @component\n  Implement the preview for 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 { getDateTimeFieldDisplayValue } from '$lib/services/contents/fields/date-time/helper';\n  import { getCanonicalLocale } 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 displayValue = $derived(\n    getDateTimeFieldDisplayValue({ locale, fieldConfig, currentValue }),\n  );\n</script>\n\n{#if displayValue}\n  <p lang={getCanonicalLocale(locale)} dir=\"auto\">\n    {displayValue}\n    {#if fieldConfig.picker_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 { Button, EmptyState } from '@sveltia/ui';\n  import { isObject } from '@sveltia/utils/object';\n  import { onMount } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import {\n    CONFIG_PROPS,\n    FRAME_ORIGIN,\n    FRAME_SRC_PARAMS,\n    getMergedLibraryOptions,\n  } from '$lib/services/integrations/media-libraries/cloud/cloudinary';\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 = `https://console.cloudinary.com/console/media_library/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>\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.\n        window.open('https://console.cloudinary.com/console/media_library/cms_login?cms=true');\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 lang=\"scss\">\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 lang=\"scss\">\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 { Listbox } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} [viewType] View type.\n   * @property {string} [gridId] The `id` attribute of the inner listbox.\n   * @property {boolean} [multiple] Whether to allow selecting multiple assets.\n   * @property {boolean} [showTitle] Whether to show the file name or title under the image while in\n   * grid view.\n   * @property {(detail: { value: string }) => void} [onChange] Custom `change` event handler.\n   * @property {Snippet} [children] Slot content.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    viewType = 'grid',\n    gridId = undefined,\n    multiple = false,\n    showTitle = false,\n    onChange = undefined,\n    children = undefined,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<div role=\"none\" class=\"wrapper\" class:show-title={showTitle}>\n  <Listbox\n    id={gridId}\n    class={viewType}\n    {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 lang=\"scss\">\n  .wrapper {\n    display: contents;\n\n    :global {\n      .listbox {\n        gap: 4px;\n        overflow-x: hidden;\n        overflow-y: auto;\n        border-width: 0;\n        max-height: calc(100% - var(--sui-focus-ring-width) * 2);\n\n        .option {\n          button {\n            border-radius: var(--sui-control-medium-border-radius);\n            padding: 4px;\n            width: 100%;\n            height: auto;\n            transition: none;\n\n            &:focus-visible {\n              outline-color: transparent;\n            }\n\n            .preview {\n              flex: none;\n              border-radius: var(--sui-control-medium-border-radius);\n              aspect-ratio: 1 / 1;\n              object-fit: contain;\n            }\n          }\n        }\n\n        .name {\n          min-height: calc(var(--sui-font-size-default) * 2);\n          white-space: normal;\n          line-height: var(--sui-line-height-compact);\n        }\n      }\n\n      .listbox.grid {\n        display: grid;\n        grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));\n        height: auto;\n        max-height: none;\n\n        .option {\n          button {\n            flex-direction: column;\n            justify-content: flex-start;\n\n            .preview {\n              width: 100%;\n              height: auto;\n            }\n\n            .name {\n              flex: none;\n              margin: 4px 0 12px;\n              padding: 0 8px;\n              width: 100%;\n              min-height: calc(var(--sui-font-size-default) * 3);\n\n              &: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      &:not(.wrapper.show-title) .listbox.grid .option .name {\n        position: absolute;\n        inset-inline-start: -99999px;\n      }\n\n      .listbox.list {\n        .option {\n          button {\n            gap: 16px;\n\n            .preview {\n              width: 64px;\n            }\n\n            .name {\n              flex: auto;\n              padding-inline: 0 8px;\n            }\n          }\n\n          button[aria-selected='true'] {\n            outline-offset: -2px;\n            outline-width: 2px !important;\n            outline-style: solid;\n            outline-color: var(--sui-primary-accent-color-light);\n          }\n        }\n      }\n    }\n  }\n</style>\n","<!--\n  @component\n  Implement a panel that allows searching media files from an external media library and selecting\n  one for an image/file entry field.\n-->\n<script>\n  import {\n    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  import { _ } from 'svelte-i18n';\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 { selectAssetsView } from '$lib/services/contents/editor';\n  import { isSmallScreen } from '$lib/services/user/env';\n  import { prefs } from '$lib/services/user/prefs';\n\n  /**\n   * @import {\n   * 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\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\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   * 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    uploadingToast = { show: true, status: 'info', length: files.length };\n\n    try {\n      await upload(files, listFetchOptions);\n      getAssets();\n    } catch {\n      uploadingToast = { show: true, status: 'error', length: files.length };\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   * 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    <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' || (!$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  {/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          { 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          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          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      {$_(uploadingToast.length === 1 ? 'uploading_file_progress' : 'uploading_files_progress', {\n        values: { count: uploadingToast.length },\n      })}\n    {/if}\n    {#if uploadingToast.status === 'error'}\n      {$_(uploadingToast.length === 1 ? 'uploading_file_failed' : 'uploading_files_failed', {\n        values: { count: uploadingToast.length },\n      })}\n    {/if}\n  </Alert>\n</Toast>\n\n<style lang=\"scss\">\n  p {\n    margin: 0 0 8px;\n  }\n\n  .input-outer {\n    width: 400px;\n    max-width: 100%;\n    text-align: center;\n  }\n</style>\n","<script>\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  import { _ } from 'svelte-i18n';\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 { isSmallScreen } from '$lib/services/user/env';\n\n  /**\n   * @import { Asset, SelectedResource, ViewType } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {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  const filteredAssets = $derived(\n    (searchTerms ? assets.filter(({ name }) => normalize(name).includes(searchTerms)) : assets)\n      // Remove duplicates based on asset path to avoid Svelte key conflicts\n      // @todo better handle duplicates at the source\n      .filter((asset, index, arr) => arr.findIndex((other) => other.path === asset.path) === index),\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} showTitle={true}>\n      <InfiniteScroll items={filteredAssets} itemKey=\"path\">\n        {#snippet renderItem(/** @type {Asset} */ asset)}\n          {#await sleep() then}\n            {@const { kind, name, path, unsaved, folder } = asset}\n            <!-- Show asset path relative to the base folder, or just file name -->\n            {@const relPath =\n              basePath && !folder.entryRelative ? stripSlashes(path.replace(basePath, '')) : name}\n            <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 !$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 lang=\"scss\">\n  .grid-wrapper {\n    overflow-y: auto;\n    height: 100%;\n\n    :global {\n      [role='listbox'] {\n        background-color: transparent;\n\n        &.grid {\n          .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 { 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 { transformFile } from '$lib/services/integrations/media-libraries/default';\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\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 * @returns {Promise<string | undefined>} Blob URL.\n */\nexport const getExistingBlobURL = async ({ draft, file }) => {\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 (!foundURL && (await getHash(f.file)) === hash) {\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 * 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 { transformations, max_file_size: maxSize } = libraryConfig ?? {};\n  const { url, credit } = 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 existingBlobURL = await getExistingBlobURL({ draft, file });\n\n    if (existingBlobURL) {\n      value = existingBlobURL;\n    } else {\n      if (transformations) {\n        file = await transformFile(file, transformations);\n      }\n\n      const sha = await getGitHash(file);\n      const { folder } = resource;\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 = [...get(allAssets), ...(await getUnsavedAssets({ draft }))].find(\n        (a) => a.sha === sha && equal(a.folder, folder),\n      );\n\n      if (existingAsset) {\n        // If the selected file has already been uploaded, use the existing asset instead of\n        // uploading the same file twice\n        asset = existingAsset;\n        file = undefined;\n      } else if (file.size > /** @type {number} */ (maxSize)) {\n        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 };\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 });\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 { sleep } from '@sveltia/utils/misc';\nimport { get } from 'svelte/store';\nimport { locale as appLocale } from 'svelte-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} 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\n/**\n * Get the best matching locale supported by Pexels API.\n * @returns {string} Locale code.\n */\nexport const getLocale = () => {\n  const locale = /** @type {string} */ (get(appLocale)).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(/\\/photo\\/(?<alt>.+?)-\\d+\\/$/)?.groups?.alt.replace(/-/g, ' ') ?? alt,\n    previewURL: medium,\n    downloadURL: large2x,\n    fileName: `pexels-${photographer.split(/\\s+/).join('-').toLowerCase()}-${id}.jpg`,\n    kind: 'image',\n    credit: `<a href=\"${url}\">Photo by ${photographer} on Pexels</a>`,\n  }));\n\n/**\n * 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 { get } from 'svelte/store';\nimport { locale as appLocale } from 'svelte-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] = /** @type {string} */ (get(appLocale)).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 { sleep } from '@sveltia/utils/misc';\nimport { get } from 'svelte/store';\nimport { locale as appLocale } from 'svelte-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 {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 = /** @type {string} */ (get(appLocale)).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, StockAssetMediaLibrary, StockAssetProviderName } from '$lib/types/public';\n */\n\n/**\n * List of all the supported stock asset providers.\n * @type {Record<StockAssetProviderName, MediaLibraryService>}\n */\nexport const allStockAssetProviders = {\n  pexels,\n  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 {StockAssetMediaLibrary} Options.\n */\nexport const getStockAssetMediaLibraryOptions = ({ fieldConfig } = {}) => {\n  const options = getMediaLibraryOptions({ libraryName: 'stock_assets', fieldConfig });\n\n  const allProviderNames = /** @type {StockAssetProviderName[]} */ (\n    Object.keys(allStockAssetProviders)\n  );\n\n  const { providers } = options;\n\n  return {\n    providers: Array.isArray(providers) ? providers : allProviderNames,\n  };\n};\n","<script>\n  import {\n    Button,\n    Dialog,\n    EmptyState,\n    FilePicker,\n    Icon,\n    Listbox,\n    Option,\n    OptionGroup,\n    SearchBar,\n    Select,\n    TextInput,\n  } from '@sveltia/ui';\n  import { getHash } from '@sveltia/utils/crypto';\n  import { getPathInfo } from '@sveltia/utils/file';\n  import equal from 'fast-deep-equal';\n  import { _ } from 'svelte-i18n';\n\n  import 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 { allAssets } from '$lib/services/assets';\n  import { selectAssetsView, showContentOverlay } from '$lib/services/contents/editor';\n  import {\n    convertFileItemToAsset,\n    getUnsavedAssets,\n  } from '$lib/services/contents/fields/file/process';\n  import { allCloudStorageServices } from '$lib/services/integrations/media-libraries/cloud';\n  import {\n    allStockAssetProviders,\n    getStockAssetMediaLibraryOptions,\n  } from '$lib/services/integrations/media-libraries/stock';\n  import { normalize } from '$lib/services/search/util';\n  import { isSmallScreen } from '$lib/services/user/env';\n  import { prefs } from '$lib/services/user/prefs';\n  import { SUPPORTED_IMAGE_TYPES } from '$lib/services/utils/media/image';\n\n  /**\n   * @import { Writable } from 'svelte/store';\n   * @import {\n   * Asset,\n   * AssetFolderInfo,\n   * AssetLibraryFolderMap,\n   * AssetLibraryFolderMapKey,\n   * EntryDraft,\n   * MediaLibraryAssetKind,\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 {(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    onSelect = undefined,\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    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.by(() => {\n    const { originalEntry } = $entryDraft ?? {};\n\n    if (!selectedFolder?.entryRelative) {\n      // @todo FIXME: Replace all template tags in the path, not just `{{slug}}`\n      return selectedFolder?.internalPath?.replace('{{slug}}', originalEntry?.slug ?? '-');\n    }\n\n    if (originalEntry) {\n      // @todo FIXME: This only works with `media_folder: \"\"`\n      return getPathInfo(Object.values(originalEntry.locales)[0].path).dirname;\n    }\n\n    // Append a placeholder because the complete path is not determined until the entry is saved\n    return `${selectedFolder?.internalPath}/-`;\n  });\n  const listedAssets = $derived(\n    [...$allAssets, ...unsavedAssets]\n      .filter((asset) => !kind || kind === asset.kind)\n      .sort((a, b) => a.name.localeCompare(b.name))\n      // Unsaved assets should go first\n      .sort((a, b) => Number(!!b.unsaved) - Number(!!a.unsaved)),\n  );\n  const enabledStockAssetProviderEntries = $derived.by(() => {\n    const { providers = [] } = getStockAssetMediaLibraryOptions({ fieldConfig });\n\n    return 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 enabledCloudServiceEntries = $derived(\n    Object.entries(allCloudStorageServices).filter(([, { isEnabled }]) => isEnabled?.() ?? true),\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($isSmallScreen ? Select : Listbox);\n\n  /**\n   * Check if a given path is in the target folder or its subfolders.\n   * @param {string} path Path to check.\n   * @returns {boolean} `true` if the path is in the target folder.\n   */\n  const isInTargetFolder = (path) =>\n    targetFolderPath !== undefined &&\n    (path === targetFolderPath || path.startsWith(`${targetFolderPath}/`));\n\n  /**\n   * Check if an asset is in the selected folder.\n   * @param {Asset} asset Asset to check.\n   * @returns {boolean} `true` if the asset is in the selected folder.\n   */\n  const isAssetInSelectedFolder = (asset) => {\n    if (\n      selectedFolder === undefined ||\n      asset.folder?.internalPath !== selectedFolder.internalPath ||\n      asset.folder?.entryRelative !== selectedFolder.entryRelative\n    ) {\n      return false;\n    }\n\n    if (!selectedFolder.entryRelative) {\n      return isInTargetFolder(asset.path);\n    }\n\n    const { dirname } = getPathInfo(asset.path);\n\n    if (dirname === undefined) {\n      return false;\n    }\n\n    return isInTargetFolder(dirname);\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   * @returns {Promise<boolean>} `true` if the asset already exists.\n   */\n  const hasSameAsset = async ({ hash, folder }) => {\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\n  /**\n   * Process a dropped file.\n   * @param {File} file File to be processed.\n   * @returns {Promise<SelectedResource | undefined>} Processed asset or `undefined` if the file\n   * already exists.\n   */\n  const processFile = async (file) => {\n    const hash = await getHash(file);\n    const folder = selectedFolder;\n\n    if (await hasSameAsset({ hash, folder })) {\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    selectedResources = (await Promise.all(files.map(processFile))).filter((r) => !!r);\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 { unsaved, file, folder } = resource.asset ?? {};\n\n      return unsaved ? { file, folder } : resource;\n    });\n\n    onSelect?.(resources);\n  };\n\n  $effect.pre(() => {\n    const firstDefaultLibraryId = Object.entries(assetLibraryFolderMap).find(\n      ([, { enabled }]) => enabled,\n    )?.[0];\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</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      flex={$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 !$isSmallScreen}\n      {@render headerItems()}\n    {/if}\n  {/snippet}\n  {#snippet footerExtra()}\n    {#if isEnabledMediaService}\n      {@const { showServiceLink, serviceLabel, serviceURL } =\n        allStockAssetProviders[/** @type {StockAssetProviderName} */ (libraryName)] ?? {}}\n      {#if showServiceLink}\n        <a href={serviceURL}>\n          {$_('prefs.media.stock_photos.credit', { values: { service: serviceLabel } })}\n        </a>\n      {/if}\n    {/if}\n  {/snippet}\n  <div role=\"none\" class=\"wrapper\">\n    <div role=\"none\" class=\"nav\">\n      <Selector\n        class=\"tabs\"\n        aria-label={$_('assets_dialog.locations')}\n        aria-controls=\"{elementIdPrefix}-content-pane\"\n        filterThreshold={-1}\n        onChange={(event) => {\n          libraryName = event.detail.name;\n          selectedResources = [];\n        }}\n      >\n        {#if isDefaultLibraryEnabled}\n          <OptionGroup label={$_('asset_location.repository')}>\n            {#each Object.entries(assetLibraryFolderMap) as [id, { enabled }] (id)}\n              {#if enabled}\n                {@const name = `default-${id}`}\n                <Option\n                  {name}\n                  label={$_(`assets_dialog.folder.${id}`)}\n                  selected={libraryName === name}\n                />\n              {/if}\n            {/each}\n          </OptionGroup>\n        {/if}\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 $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.filter(isAssetInSelectedFolder)}\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            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 lang=\"scss\">\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      display: flex;\n      gap: 4px;\n\n      @media (width < 768px) {\n        flex-direction: column;\n      }\n    }\n\n    :global(.listbox) {\n      flex: none;\n      background-color: transparent;\n    }\n\n    .content-pane {\n      overflow: auto;\n      flex: auto;\n    }\n  }\n\n  .filter-tools {\n    display: flex;\n    gap: 8px;\n  }\n</style>\n","<script>\n  import { Button, Icon } from '@sveltia/ui';\n  import { isURL } from '@sveltia/utils/string';\n  import { untrack } from 'svelte';\n  import { _ } from 'svelte-i18n';\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 {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    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 };\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 lang=\"scss\">\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 { Alert, Button, Icon, Toast } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { hasMouse } from '$lib/services/user/env';\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<div role=\"none\" class=\"empty\" class:invalid class:processing>\n  <Button\n    flex\n    role=\"button\"\n    variant=\"tertiary\"\n    {disabled}\n    tabindex=\"0\"\n    onclick={() => {\n      if (!disabled) {\n        replaceMode = false;\n        showSelectAssetsDialog = true;\n      }\n    }}\n  >\n    <Icon name=\"cloud_upload\" />\n    <div role=\"none\" class=\"label\">\n      {#if processing}\n        <div role=\"status\">\n          {$_('processing_file')}\n        </div>\n      {:else if $hasMouse}\n        {#if !allowDrop}\n          {$_('click_to_browse')}\n        {:else if isImageField}\n          {$_(multiple ? 'drop_image_files_or' : 'drop_image_file_or')}\n        {:else}\n          {$_(multiple ? 'drop_files_or' : 'drop_file_or')}\n        {/if}\n        <div role=\"none\" class=\"buttons\">\n          <Button label={$_('browse')} variant=\"tertiary\" size=\"small\" {disabled} />\n          {#if onFilePaste && isImageField}\n            <Button\n              label={$_('paste')}\n              variant=\"tertiary\"\n              size=\"small\"\n              {disabled}\n              onclick={(event) => {\n                event.stopPropagation();\n                onPasteButtonClick();\n              }}\n            />\n          {/if}\n        </div>\n      {:else}\n        {$_('tap_to_browse')}\n      {/if}\n    </div>\n  </Button>\n</div>\n\n<Toast bind:show={toast.show}>\n  <Alert status=\"error\">\n    {toast.message}\n  </Alert>\n</Toast>\n\n<style lang=\"scss\">\n  .empty {\n    :global {\n      & > button {\n        flex-direction: column;\n        justify-content: center;\n        height: 120px;\n        font-size: var(--sui-font-size-small);\n\n        .icon {\n          color: var(--sui-secondary-foreground-color);\n          font-size: 48px;\n        }\n\n        &:disabled {\n          pointer-events: none !important;\n\n          :global(*) {\n            opacity: 0.5;\n          }\n        }\n      }\n    }\n\n    &.invalid {\n      :global {\n        button {\n          border-color: var(--sui-error-border-color);\n        }\n      }\n    }\n  }\n\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","import { get } from 'svelte/store';\n\nimport { getAssetFolder, globalAssetFolder } from '$lib/services/assets/folders';\n\n/**\n * @import { AssetLibraryFolderMap, TypedFieldKeyPath } 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  return {\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","<!--\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 { AlertDialog, ConfirmationDialog, TextArea } from '@sveltia/ui';\n  import { flushSync, getContext } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import SelectAssetsDialog from '$lib/components/assets/browser/select-assets-dialog.svelte';\n  import DropZone from '$lib/components/assets/shared/drop-zone.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 { getAssetLibraryFolderMap } from '$lib/services/contents/fields/file/helper';\n  import { 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 { formatSize } from '$lib/services/utils/file';\n  import { SUPPORTED_IMAGE_TYPES } from '$lib/services/utils/media/image';\n\n  /**\n   * @import {\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 showSizeLimitDialog = $state(false);\n  let showPhotoCreditDialog = $state(false);\n  let photoCredit = $state('');\n  /** @type {DropZone | undefined} */\n  let dropZone = $state();\n  let processing = $state(false);\n\n  const {\n    widget: 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 libraryConfig = $derived(getDefaultMediaLibraryOptions({ fieldConfig }).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  // 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    entry,\n  });\n  const enabledCloudServiceEntries = $derived(\n    Object.entries(allCloudStorageServices).filter(([, { isEnabled }]) => isEnabled?.() ?? true),\n  );\n  /**\n   * Disable the drop zone if there are cloud services configured to avoid confusion.\n   */\n  const allowDrop = $derived(!enabledCloudServiceEntries.length);\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    resetSelection();\n    processing = true;\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    /** @type {string[]} */\n    const oversizedFileNames = [];\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        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    if (credits.length) {\n      photoCredit = credits.join('\\n');\n      showPhotoCreditDialog = true;\n    } else {\n      photoCredit = '';\n    }\n\n    if (oversizedFileNames.length) {\n      showSizeLimitDialog = 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 = ({ files }) => {\n    if (!files.length) {\n      return;\n    }\n\n    onResourcesSelect(files.map((file) => ({ file, folder: targetFolder })));\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</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={isImageField ? 'image' : undefined}\n  multiple={replaceMode ? false : multiple}\n  {accept}\n  {canEnterURL}\n  {entryDraft}\n  {fieldConfig}\n  {assetLibraryFolderMap}\n  bind:open={showSelectAssetsDialog}\n  onSelect={onResourcesSelect}\n/>\n\n<AlertDialog bind:open={showSizeLimitDialog} title={$_('assets_dialog.large_file.title')}>\n  {$_('warning_oversized_file', { values: { size: formatSize(maxSize) } })}\n</AlertDialog>\n\n<ConfirmationDialog\n  bind:open={showPhotoCreditDialog}\n  title={$_('assets_dialog.photo_credit.title')}\n  okLabel={$_('copy')}\n  onOk={() => {\n    navigator.clipboard.writeText(photoCredit);\n  }}\n>\n  <div role=\"none\">{$_('assets_dialog.photo_credit.description')}</div>\n  <div role=\"none\">\n    <TextArea\n      flex\n      readonly\n      value={photoCredit}\n      onclick={(event) => {\n        /** @type {HTMLTextAreaElement} */ (event.target).focus();\n        /** @type {HTMLTextAreaElement} */ (event.target).select();\n      }}\n    />\n  </div>\n</ConfirmationDialog>\n\n<style lang=\"scss\">\n  .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   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    value,\n    fieldConfig,\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({ value, entry, collectionName, fileName, fieldConfig })\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 lang=\"scss\">\n  // Remove the padding to make the image full-width on small screens\n  @media (width < 768px) {\n    p:has(:global(img)) {\n      :global([role='document'] section) > & {\n        margin-inline: calc(var(--entry-preview-padding-inline) * -1);\n      }\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    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} />\n    {/each}\n  {/if}\n{:else if typeof currentValue === 'string' && currentValue}\n  <FilePreviewItem value={currentValue} {fieldConfig} />\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 { Button, Icon, TextInput } from '@sveltia/ui';\n  import equal from 'fast-deep-equal';\n  import { getContext, untrack } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import ValidationError from '$lib/components/contents/details/editor/validation-error.svelte';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import {\n    getPairs,\n    savePairs,\n    validatePairs,\n  } from '$lib/services/contents/fields/key-value/helper';\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 {HTMLTableRowElement[]} */\n  const rowElements = $state([]);\n  /** @type {boolean[]} */\n  let edited = $state([]);\n  /** @type {('empty' | 'duplicate' | undefined)[]} */\n  let validations = $state([]);\n\n  /**\n   * Update the {@link pairs} whenever the current values are changed.\n   */\n  const updatePairs = () => {\n    if (!$entryDraft) {\n      return;\n    }\n\n    const _entryDraft = /** @type {Writable<EntryDraft>} */ (entryDraft);\n    const updatedPairs = getPairs({ entryDraft: _entryDraft, valueStoreKey, keyPath, locale });\n\n    if (!equal(pairs, updatedPairs)) {\n      pairs = [...updatedPairs];\n      edited = updatedPairs.map(() => false);\n    }\n\n    if (!pairs.length && $entryDraft[valueStoreKey][locale][keyPath] !== null) {\n      // Enable validation\n      $entryDraft[valueStoreKey][locale][keyPath] = null;\n    }\n  };\n\n  /**\n   * Add an empty pair to the {@link pairs} array.\n   */\n  const addPair = () => {\n    if (!$entryDraft) {\n      return;\n    }\n\n    Object.entries($entryDraft[valueStoreKey]).forEach(([_locale, content]) => {\n      if (_locale === locale || i18n === 'duplicate') {\n        // Remove `null` added for validation\n        delete content[keyPath];\n      }\n    });\n\n    pairs.push(['', '']);\n    edited.push(false);\n\n    window.requestAnimationFrame(() => {\n      /** @type {HTMLInputElement} */ (\n        rowElements[pairs.length - 1].querySelector('input')\n      ).focus();\n    });\n  };\n\n  /**\n   * Remove a pair from {@link pairs}.\n   * @param {number} index Index in the {@link pairs} array.\n   */\n  const removePair = (index) => {\n    pairs.splice(index, 1);\n    edited.splice(index, 1);\n  };\n\n  /**\n   * Update the draft store whenever the {@link pairs} is updated.\n   */\n  const updateStore = () => {\n    validations = validatePairs({ pairs, edited });\n\n    if (!$entryDraft || validations.some(Boolean) || pairs.some(([key]) => !key.trim())) {\n      return;\n    }\n\n    const _entryDraft = /** @type {Writable<EntryDraft>} */ (entryDraft);\n\n    savePairs({ entryDraft: _entryDraft, fieldConfig, keyPath, locale, pairs });\n  };\n\n  $effect(() => {\n    void [$state.snapshot($entryDraft?.[valueStoreKey][locale])];\n\n    untrack(() => {\n      updatePairs();\n    });\n  });\n\n  $effect(() => {\n    void [$state.snapshot(pairs)];\n\n    untrack(() => {\n      updateStore();\n    });\n  });\n</script>\n\n{#if pairs.length}\n  <table>\n    <thead>\n      <tr>\n        <th scope=\"col\" class=\"key\">{keyLabel}</th>\n        <th scope=\"col\" class=\"value\">{valueLabel}</th>\n        {#if !readonly}\n          <th scope=\"col\" class=\"action\" aria-label={$_('key_value.action')}></th>\n        {/if}\n      </tr>\n    </thead>\n    <tbody>\n      {#each pairs as pair, index (`${pair[0]}-${index}`)}\n        <tr bind:this={rowElements[index]}>\n          <td class=\"key\">\n            <TextInput\n              {readonly}\n              flex\n              bind:value={pair[0]}\n              invalid={!!validations[index]}\n              aria-label={keyLabel}\n              aria-errormessage={validations[index] ? `${fieldId}-kv-error` : undefined}\n              oninput={() => {\n                edited[index] = true;\n              }}\n              onkeydown={(event) => {\n                // Move focus with Enter key\n                if (event.key === 'Enter' && !event.isComposing) {\n                  /** @type {HTMLInputElement} */ (\n                    rowElements[index].querySelector('td.value input')\n                  ).focus();\n                }\n              }}\n            />\n          </td>\n          <td class=\"value\">\n            <TextInput\n              {readonly}\n              flex\n              bind:value={pair[1]}\n              aria-label={valueLabel}\n              onkeydown={(event) => {\n                // Move focus or add a new pair with Enter key\n                if (event.key === 'Enter' && !event.isComposing) {\n                  if (index < pairs.length - 1) {\n                    /** @type {HTMLInputElement} */ (\n                      rowElements[index + 1].querySelector('input')\n                    ).focus();\n                  } else if (pairs.length < max) {\n                    addPair();\n                  }\n                }\n              }}\n            />\n          </td>\n          {#if !readonly}\n            <td class=\"action\">\n              <Button\n                variant=\"ghost\"\n                size=\"small\"\n                iconic\n                aria-label={$_('remove')}\n                onclick={() => {\n                  removePair(index);\n                }}\n              >\n                {#snippet startIcon()}\n                  <Icon name=\"close\" />\n                {/snippet}\n              </Button>\n            </td>\n          {/if}\n        </tr>\n      {/each}\n    </tbody>\n  </table>\n{/if}\n\n{#if validations.some(Boolean)}\n  <ValidationError id=\"{fieldId}-kv-error\">\n    {#if validations.includes('empty')}\n      {$_('key_value.empty_key')}\n    {/if}\n    {#if validations.includes('duplicate')}\n      {$_('key_value.duplicate_key')}\n    {/if}\n  </ValidationError>\n{/if}\n\n<div role=\"none\">\n  <Button\n    label={$_('add')}\n    variant=\"tertiary\"\n    disabled={readonly || pairs.length >= max}\n    onclick={() => {\n      addPair();\n    }}\n  />\n</div>\n\n<style lang=\"scss\">\n  table {\n    width: -moz-available;\n    width: -webkit-fill-available;\n    width: stretch;\n  }\n\n  th,\n  td {\n    border-width: 0;\n  }\n\n  th {\n    padding-block: 4px;\n    color: var(--sui-tertiary-foreground-color);\n    font-size: var(--sui-font-size-small);\n    font-weight: var(--sui-font-weight-normal);\n    text-align: 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 equal from 'fast-deep-equal';\n  import { untrack } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { getPairs } from '$lib/services/contents/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 lang=\"scss\">\n  table {\n    width: -moz-available;\n    width: -webkit-fill-available;\n    width: stretch;\n  }\n\n  th {\n    padding-block: 4px;\n    width: 50%;\n    color: var(--sui-tertiary-foreground-color);\n    background-color: var(--sui-tertiary-background-color);\n    font-size: var(--sui-font-size-small);\n    font-weight: var(--sui-font-weight-normal);\n    text-align: start;\n  }\n\n  td {\n    &:empty::after {\n      content: '\\00a0'; // nbsp\n    }\n  }\n</style>\n","<script>\n  import { Icon, isRTL } 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 { Button, Icon, Menu, MenuButton, MenuItem } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\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 { Button } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\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 lang=\"scss\">\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 {\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    return /** @type {string} */ (getCurrentValue(getCurrentDateTime(config), '', config));\n  }\n\n  return value;\n};\n\n/**\n * Get the default value map for a DateTime field.\n * @param {GetDefaultValueMapFuncArgs} args Arguments.\n * @returns {Record<FieldKeyPath, string>} Default value map.\n */\nexport const getDefaultValueMap = (args) => ({ [args.keyPath]: getDefaultValue(args) });\n","import { 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';\nimport { get } from 'svelte/store';\n\nimport { user } from '$lib/services/user';\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} */ (get(user));\n  const { default: defaultValue } = /** @type {HiddenField} */ (fieldConfig);\n  const value = dynamicValue ?? defaultValue;\n\n  if (typeof value !== 'string') {\n    return value;\n  }\n\n  return value.replaceAll(/{{(.+?)}}/g, (_match, tag) => {\n    if (tag === 'locale') {\n      return locale;\n    }\n\n    if (tag === 'datetime') {\n      return new Date().toJSON().replace(/\\d+\\.\\d+Z$/, '00.000Z');\n    }\n\n    if (tag === 'uuid') {\n      return generateUUID();\n    }\n\n    if (tag === 'uuid_short') {\n      return generateUUID('short');\n    }\n\n    if (tag === 'uuid_shorter') {\n      return generateUUID('shorter');\n    }\n\n    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 { populateDefaultValue } from '$lib/services/contents/draft/defaults';\nimport { isFieldRequired } from '$lib/services/contents/entry/fields';\n\n/**\n * @import { FlattenedEntryContent, GetDefaultValueMapFuncArgs } from '$lib/types/private';\n * @import {\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 = ({ fieldConfig, keyPath, locale, defaultLocale }) => {\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      populateDefaultValue({\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';\n\n/**\n * @import { MarkdownField } from '$lib/types/public';\n * @import { GetDefaultValueMapFuncArgs } from '$lib/types/private';\n */\n\n/**\n * Get the default value map for a 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 } = /** @type {MarkdownField} */ (fieldConfig);\n  let value = '';\n\n  if (dynamicValue !== undefined) {\n    try {\n      // Sanitize the given value to prevent XSS attacks as the preview may not be sanitized\n      value = stripTags(dynamicValue);\n    } catch {\n      // Fallback for environments where DOMParser is not available (e.g., Node.js tests)\n      // Use a simple regex to remove HTML tags as a basic sanitization measure\n      if (import.meta.env.VITEST) {\n        value = dynamicValue.replace(/<[^>]*>/g, '');\n      }\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 {\n * FlattenedEntryContent,\n * GetDefaultValueMapFuncArgs,\n * InternalLocaleCode,\n * } from '$lib/types/private';\n * @import { Field, FieldKeyPath } from '$lib/types/public';\n */\n\n/**\n * Map of functions to get default values for different field types.\n * @type {Record<string, (args: GetDefaultValueMapFuncArgs) => Record<FieldKeyPath, any>>}\n * @internal\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\n/**\n * Populate the default value for the given field. Check if a dynamic default value is specified,\n * then look for the field configuration’s `default` property.\n * @param {object} args Arguments.\n * @param {FlattenedEntryContent} args.content An object holding a new content key-value map.\n * @param {FieldKeyPath} args.keyPath Field key path, e.g. `author.name`.\n * @param {Field} args.fieldConfig Field configuration.\n * @param {InternalLocaleCode} args.locale Locale.\n * @param {InternalLocaleCode} args.defaultLocale Default locale of the entry draft.\n * @param {Record<string, string>} args.dynamicValues Dynamic default values.\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({ fieldConfig, keyPath, locale, defaultLocale, dynamicValue }),\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';\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  let regex = itemListRegexCache.get(keyPath);\n\n  if (!regex) {\n    regex = new RegExp(`^${escapeRegExp(keyPath)}\\\\b(?!#)`);\n    itemListRegexCache.set(keyPath, regex);\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 } from '$lib/services/contents/entry/fields';\n\n/**\n * @import {\n * EntryDraft,\n * FlattenedEntryContent,\n * InternalLocaleCode,\n * LocaleContentMap,\n * } from '$lib/types/private';\n * @import { FieldKeyPath, ObjectField, ListField } from '$lib/types/public';\n */\n\n/**\n * 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    // Pre-compile and cache the regex — same key path is queried on every editor render.\n    let regex = expanderRegexCache.get(cleanKey);\n\n    if (!regex) {\n      regex = new RegExp(`^${escapeRegExp(cleanKey)}\\\\.[^\\\\.]+$`);\n      expanderRegexCache.set(cleanKey, regex);\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 = /\\.\\d+$/.test(_keyPath);\n\n    if (config?.widget === 'object') {\n      if (endingWithNumber) {\n        keys.add(_keyPath);\n      }\n\n      keys.add(`${_keyPath}#`);\n    } else if (config?.widget === 'list') {\n      keys.add(endingWithNumber ? _keyPath : `${_keyPath}#`);\n    } else if (index > 0) {\n      const parentKeyPath = arr.slice(0, index).join('.');\n      const parentConfig = getField({ ...getFieldArgs, keyPath: parentKeyPath });\n\n      if (\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 { 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  import { _ } from 'svelte-i18n';\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 { isSmallScreen } from '$lib/services/user/env';\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_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\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\n      valueList.splice(index, 0, newItem);\n      expanderStateList.splice(index, 0, true);\n    });\n\n    // Expand the parent if it is collapsed to show the newly added item\n    syncExpanderStates({ [parentExpandedKeyPath]: true });\n  };\n\n  /**\n   * Remove a subfield.\n   * @param {number} index Target index.\n   */\n  const removeItem = (index) => {\n    updateComplexList(({ valueList, expanderStateList }) => {\n      valueList.splice(index, 1);\n      expanderStateList.splice(index, 1);\n    });\n  };\n\n  /**\n   * Swap a subfield with the next one.\n   * @param {number} index Target index.\n   */\n  const moveDownItem = (index) => {\n    updateComplexList(({ valueList, expanderStateList }) => {\n      if (!hasSingleSubField) {\n        // Ensure the IDs are unique before swapping\n        valueList[index].__sc_item_id ??= crypto.randomUUID();\n        valueList[index + 1].__sc_item_id ??= crypto.randomUUID();\n      }\n\n      [valueList[index], valueList[index + 1]] = [valueList[index + 1], valueList[index]];\n      [expanderStateList[index], expanderStateList[index + 1]] = [\n        expanderStateList[index + 1],\n        expanderStateList[index],\n      ];\n    });\n  };\n\n  /**\n   * Format the summary template.\n   * @param {number} index List index.\n   * @param {string} [summaryTemplate] Summary template, e.g. `{{fields.slug}}`.\n   * @returns {string} Formatted summary.\n   */\n  const _formatSummary = (index, summaryTemplate) =>\n    formatSummary({\n      collectionName,\n      fileName,\n      keyPath,\n      valueMap,\n      locale,\n      summaryTemplate,\n      hasSingleSubField,\n      index,\n      isIndexFile,\n    });\n\n  /**\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 thumbnailKeyPath = `${keyPath}.${index}.${thumbnailFieldName.replace(/^fields\\./, '')}`;\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 (thumbnailFieldConfig?.widget !== 'image') {\n      return undefined;\n    }\n\n    return getMediaFieldURL({\n      value: thumbnailValue,\n      entry: $entryDraft?.originalEntry,\n      collectionName,\n      fileName,\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<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={isDuplicateField} {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={isDuplicateField}\n              >\n                {#snippet popup()}\n                  <Menu aria-label={$_('translation_options')}>\n                    <MenuItem\n                      label={$_('duplicate')}\n                      disabled={hasMaxItems}\n                      onclick={() => addItem({ index: index + 1, dupIndex: index })}\n                    />\n                    {#if hasVariableTypes}\n                      <MenuItem label={$_('add_item_above')} disabled={hasMaxItems}>\n                        <!-- eslint-disable-next-line no-shadow -->\n                        {#snippet items()}\n                          {#each types ?? [] as { name, label: itemLabel } (name)}\n                            <MenuItem\n                              label={itemLabel || name}\n                              onclick={() => addItem({ index, type: name })}\n                            />\n                          {/each}\n                        {/snippet}\n                      </MenuItem>\n                      <MenuItem label={$_('add_item_below')} disabled={hasMaxItems}>\n                        <!-- eslint-disable-next-line no-shadow -->\n                        {#snippet items()}\n                          {#each types ?? [] as { name, label: itemLabel } (name)}\n                            <MenuItem\n                              label={itemLabel || name}\n                              onclick={() => addItem({ index: index + 1, type: name })}\n                            />\n                          {/each}\n                        {/snippet}\n                      </MenuItem>\n                    {:else}\n                      <MenuItem\n                        label={$_('add_item_above')}\n                        disabled={hasMaxItems}\n                        onclick={() => addItem({ index })}\n                      />\n                      <MenuItem\n                        label={$_('add_item_below')}\n                        disabled={hasMaxItems}\n                        onclick={() => addItem({ index: index + 1 })}\n                      />\n                    {/if}\n                  </Menu>\n                {/snippet}\n              </MenuButton>\n            {/if}\n            {#if allowRemove}\n              <Button\n                variant=\"ghost\"\n                size=\"small\"\n                iconic\n                aria-label={$_('remove')}\n                onclick={() => removeItem(index)}\n              >\n                {#snippet startIcon()}\n                  <Icon name=\"close\" />\n                {/snippet}\n              </Button>\n            {/if}\n          {/snippet}\n        </ObjectHeader>\n        <div role=\"none\" class=\"item-body\" id=\"list-{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={$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={isDuplicateField} {fieldConfig} {items} {addItem} />\n    <Spacer flex />\n  </div>\n{/if}\n\n<style lang=\"scss\">\n  .toolbar {\n    display: flex;\n    align-items: center;\n\n    &.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\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  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 lang=\"scss\">\n  .subsection {\n    margin: 16px auto;\n    border: 2px solid var(--sui-secondary-border-color);\n    border-radius: var(--sui-control-medium-border-radius);\n\n    :global(.title) {\n      font-size: inherit;\n      font-weight: var(--sui-font-weight-normal);\n    }\n  }\n\n  .header {\n    display: flex;\n    align-items: center;\n    height: 24px;\n    padding-inline: 8px;\n    color: var(--sui-secondary-foreground-color);\n    background-color: var(--sui-secondary-border-color);\n    font-size: var(--sui-font-size-small);\n    font-weight: var(--sui-font-weight-bold);\n  }\n\n  .items {\n    padding: 8px 16px;\n\n    &:empty {\n      display: none;\n    }\n  }\n</style>\n","<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 { getExpanderKeys, syncExpanderStates } from '$lib/services/contents/editor/expanders';\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   */\n\n  /** @type {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, 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 isIndexFile = $derived($entryDraft?.isIndexFile ?? false);\n  const collection = $derived($entryDraft?.collection);\n  const collectionName = $derived($entryDraft?.collectionName ?? '');\n  const collectionFile = $derived($entryDraft?.collectionFile);\n  const fileName = $derived($entryDraft?.fileName);\n  const valueMap = $derived($state.snapshot($entryDraft?.currentValues[locale] ?? {}));\n  const expanderKeys = $derived(\n    getExpanderKeys({ collectionName, fileName, valueMap, keyPath, isIndexFile }),\n  );\n  const { i18nEnabled, defaultLocale } = $derived(\n    (collectionFile ?? collection)?._i18n ?? DEFAULT_I18N_CONFIG,\n  );\n  const canTranslate = $derived(i18nEnabled && (i18n === true || i18n === 'translate'));\n  const canDuplicate = $derived(i18nEnabled && i18n === 'duplicate');\n  const keyPathRegex = $derived(new RegExp(`^${escapeRegExp(keyPath)}\\\\.\\\\d+$`));\n  // Multiple values are flattened in the value map object\n  const currentValue = $derived(\n    isList\n      ? Object.entries(valueMap)\n          .filter(([_keyPath]) => keyPathRegex.test(_keyPath))\n          .map(([, val]) => val)\n          .filter((val) => val !== undefined)\n      : valueMap[keyPath],\n  );\n\n  /**\n   * Called whenever the preview field is clicked. Highlight the corresponding editor field by\n   * expanding the parent list/object(s), moving the element into the viewport, and focus any\n   * control within the field, such as a text input or button.\n   */\n  const highlightEditorField = () => {\n    syncExpanderStates(Object.fromEntries(expanderKeys.map((key) => [key, true])));\n\n    window.requestAnimationFrame(() => {\n      const targetField = document.querySelector(\n        `.content-editor .pane[data-mode=\"edit\"] .field[data-key-path=\"${CSS.escape(keyPath)}\"]`,\n      );\n\n      if (targetField) {\n        if (typeof targetField.scrollIntoViewIfNeeded === 'function') {\n          targetField.scrollIntoViewIfNeeded();\n        } else {\n          targetField.scrollIntoView();\n        }\n\n        const widgetWrapper = targetField.querySelector('.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</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    <h4>{label || fieldName}</h4>\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 lang=\"scss\">\n  :global([role='document']) section {\n    overflow: hidden;\n    margin: 8px 0;\n    padding: 8px 0;\n\n    h4 {\n      color: var(--sui-secondary-foreground-color);\n      font-size: var(--sui-font-size-small);\n\n      &:not(:last-child) {\n        margin-bottom: 8px;\n      }\n    }\n\n    :global {\n      & > * {\n        margin-inline: auto;\n        max-width: 768px;\n      }\n\n      p {\n        margin: 8px auto 0;\n        -webkit-user-select: text;\n        user-select: text;\n      }\n\n      img {\n        max-height: 800px !important;\n      }\n    }\n  }\n\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 } 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=\"auto\">\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","<!--\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 { AlertDialog, Button, Icon, Listbox, Option, SearchBar } from '@sveltia/ui';\n  import { isObject } from '@sveltia/utils/object';\n  import { untrack } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import LeafletMap from '$lib/components/common/leaflet-map.svelte';\n  import { loadModule } from '$lib/services/app/dependencies';\n  import { sendRequest } from '$lib/services/utils/networking';\n  import { toFixed } from '$lib/services/utils/number';\n\n  /**\n   * @import 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' } = $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\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: feature.geometry.coordinates.map((coords) =>\n        Array.isArray(coords)\n          ? coords.map((c) =>\n              Array.isArray(c) ? c.map((cc) => toFixed(cc, decimals)) : toFixed(c, decimals),\n            )\n          : toFixed(coords, decimals),\n      ),\n    });\n\n    // Allow to have only one feature\n    if (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   * Update {@link inputValue} based on {@link currentValue}.\n   */\n  const setInputValue = () => {\n    if (!draw) {\n      return;\n    }\n\n    let newValue = currentValue ?? '';\n    /** @type {GeoJSONStoreGeometries | undefined} */\n    let geometry = undefined;\n\n    // Validate the value\n    try {\n      if (newValue !== undefined) {\n        geometry = JSON.parse(newValue);\n\n        if (\n          !isObject(geometry) ||\n          geometry.type !== geometryType ||\n          !Array.isArray(geometry.coordinates)\n        ) {\n          throw new Error('Invalid object');\n        }\n      }\n    } catch {\n      newValue = '';\n      geometry = undefined;\n    }\n\n    if (inputValue === newValue) {\n      return;\n    }\n\n    inputValue = newValue;\n\n    draw.clear();\n\n    if (geometry) {\n      draw.addFeatures([{ type: 'Feature', geometry, properties: { mode: drawMode } }]);\n\n      if (geometry.coordinates.every((c) => typeof c === 'number')) {\n        const [longitude, latitude] = geometry.coordinates;\n\n        map?.setView([latitude, longitude], 15);\n      }\n    }\n  };\n\n  /**\n   * Update {@link currentValue} based on {@link inputValue}.\n   */\n  const setCurrentValue = () => {\n    if (!draw) {\n      return;\n    }\n\n    const newValue = inputValue;\n\n    // Avoid a cycle dependency & infinite loop\n    if (currentValue !== newValue) {\n      currentValue = newValue;\n    }\n  };\n\n  /**\n   * Search for locations using the Nominatim API.\n   * @see https://nominatim.org/release-docs/develop/api/Search/\n   */\n  const searchLocation = 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 lang=\"scss\">\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 lang=\"scss\">\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 } 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=\"auto\">\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 } = _draft;\n    const enabled = !currentLocales[locale];\n\n    // Initialize the content for the locale\n    if (enabled && !currentValues[locale]) {\n      const { collectionName, fileName, originalValues } = _draft;\n      const newContent = getDefaultValues({ fields, locale, 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    };\n  });\n};\n","import { escapeRegExp } from '@sveltia/utils/string';\n\nimport {\n  getFieldDisplayValue,\n  getVisibleFieldDisplayValue,\n} from '$lib/services/contents/entry/fields';\n\n/**\n * @import { FlattenedEntryContent, GetFieldArgs, InternalLocaleCode } from '$lib/types/private';\n * @import { FieldKeyPath } from '$lib/types/public';\n */\n\n/**\n * 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    let keyPathRegex = objectSummaryRegexCache.get(keyPath);\n\n    if (!keyPathRegex) {\n      keyPathRegex = new RegExp(`^${escapeRegExp(keyPath)}\\\\.`);\n      objectSummaryRegexCache.set(keyPath, keyPathRegex);\n    }\n\n    return getVisibleFieldDisplayValue({ valueMap, locale, keyPath, keyPathRegex, getFieldArgs });\n  }\n\n  return summaryTemplate.replaceAll(/{{(.+?)}}/g, (_match, /** @type {string} */ placeholder) => {\n    const [tag, ...transformations] = placeholder.split(/\\s*\\|\\s*/);\n\n    return getFieldDisplayValue({\n      ...getFieldArgs,\n      keyPath: `${keyPath}.${tag.replace(/^fields\\./, '')}`,\n      locale,\n      transformations,\n    });\n  });\n};\n","<!--\n  @component\n  Implement the editor for 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 { Button, Checkbox, Icon, TruncatedText } from '@sveltia/ui';\n  import { toRaw } from '@sveltia/utils/object';\n  import { getContext, onMount, tick } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import VisibilityObserver from '$lib/components/common/visibility-observer.svelte';\n  import FieldEditor from '$lib/components/contents/details/editor/field-editor.svelte';\n  import AddItemButton from '$lib/components/contents/details/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 { isSmallScreen } from '$lib/services/user/env';\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={$isSmallScreen ? 2 : 1}>\n              {formattedSummary}\n            </TruncatedText>\n          </div>\n        {/if}\n      {/if}\n    </div>\n  </div>\n{/if}\n\n<style lang=\"scss\">\n  .wrapper {\n    border-width: 2px;\n    border-color: var(--sui-secondary-border-color);\n    border-radius: var(--sui-control-medium-border-radius);\n\n    :global(.sui.checkbox) + & {\n      & > :global(.group) {\n        margin-top: 8px;\n      }\n    }\n  }\n\n  .summary {\n    padding: 8px;\n  }\n</style>\n","<!--\n  @component\n  Implement the preview for 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 { Option, Radio, RadioGroup, Select } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\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 { 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  /** @type {SelectField} */\n  const selectFieldConfig = $derived({\n    ...fieldConfig,\n    widget: 'select',\n    options: getOptions(locale, fieldConfig, refEntries),\n  });\n</script>\n\n<div role=\"none\" class=\"wrapper\">\n  <SelectEditor\n    {locale}\n    {keyPath}\n    {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, 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=\"auto\">{listFormatter.format(refValues)}</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","<script>\n  import { Button, Icon } from '@sveltia/ui';\n  import equal from 'fast-deep-equal';\n  import { flatten, unflatten } from 'flat';\n  import { onMount, untrack } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import VisibilityObserver from '$lib/components/common/visibility-observer.svelte';\n  import FieldEditor from '$lib/components/contents/details/editor/field-editor.svelte';\n  import ObjectHeader from '$lib/components/contents/details/fields/object/object-header.svelte';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { getDefaultValues } from '$lib/services/contents/draft/defaults';\n\n  /**\n   * @import {\n   * DraftValueStoreKey,\n   * InternalLocaleCode,\n   * RawEntryContent,\n   * TypedFieldKeyPath,\n   * } from '$lib/types/private';\n   * @import { Field, FieldKeyPath } 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 {boolean} [collapsed] Whether to collapse the object by default. Default: `false`.\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    collapsed = false,\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  /** @type {TypedFieldKeyPath} */\n  let typedKeyPath = $state('');\n  /** @type {boolean} */\n  // svelte-ignore state_referenced_locally\n  let expanded = $state(!collapsed);\n\n  const keyPathPrefix = $derived(!keyPath ? '' : `${keyPath}:${fieldId}:`);\n  const typedKeyPathPrefix = $derived(!typedKeyPath ? '' : `${typedKeyPath}:${fieldId}:`);\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.\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  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      typedKeyPath = /** @type {string} */ (keyPathContainer?.dataset.typedKeyPath);\n    });\n\n    return () => {\n      // Remove the values from the draft when the component is unmounted\n      if ($entryDraft && valueStoreKey === 'extraValues') {\n        Object.keys($entryDraft[valueStoreKey][locale] ?? {}).forEach((key) => {\n          if (key.startsWith(keyPathPrefix)) {\n            delete $entryDraft[valueStoreKey][locale][key];\n          }\n        });\n      }\n    };\n  });\n\n  $effect(() => {\n    void [values, locale, keyPath];\n\n    untrack(() => {\n      if ($entryDraft && locale && keyPath) {\n        const { defaultLocale } = $entryDraft;\n\n        values ??= unflatten(getDefaultValues({ fields, locale, defaultLocale })) ?? {};\n        values.__sc_component_name = componentName;\n\n        if (!equal(values, currentValues)) {\n          Object.assign(\n            $entryDraft[valueStoreKey][locale],\n            Object.fromEntries(\n              Object.entries(flatten(values)).map(([key, value]) => [\n                `${keyPathPrefix}${key}`,\n                value,\n              ]),\n            ),\n          );\n        }\n      }\n    });\n  });\n\n  $effect(() => {\n    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<!-- svelte-ignore a11y_no_noninteractive_tabindex -->\n<div\n  role=\"group\"\n  class=\"wrapper\"\n  bind:this={wrapper}\n  contenteditable=\"false\"\n  tabindex=\"0\"\n  aria-label={label}\n  data-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\n<style lang=\"scss\">\n  .wrapper {\n    display: inline-block; // Cancel underline if the component is within a link\n    border: 1px solid var(--sui-secondary-border-color);\n    border-radius: 4px;\n    width: 100%;\n    color: var(--sui-secondary-foreground-color); // Reset color within a link\n    background-color: var(--sui-primary-background-color);\n    white-space: normal;\n    -webkit-user-select: none;\n    user-select: none;\n\n    &:focus {\n      outline-color: var(--sui-primary-accent-color-translucent);\n    }\n\n    // 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    & + :global(.wrapper) {\n      margin-top: 16px;\n    }\n  }\n</style>\n","import { DecoratorNode, getNearestEditorFromDOMNode } from 'lexical';\nimport { flushSync, mount, tick, unmount } from 'svelte';\n\nimport Component from '$lib/components/contents/details/fields/rich-text/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\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 { id: componentName, label, collapsed, fields, pattern, toBlock, toPreview } = componentDef;\n  const isMultiLine = isMultiLinePattern(pattern);\n  const preview = toPreview?.({});\n  const block = toBlock({});\n\n  const tagName =\n    typeof preview === 'string'\n      ? (preview.trim().match(/^<(?<tagName>[a-z]+)/i)?.groups?.tagName ??\n        (typeof block === 'string'\n          ? block.trim().match(/^<(?<tagName>[a-z]+)/i)?.groups?.tagName\n          : 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 !isMultiLine;\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 {Component} */\n      let component;\n\n      /**\n       * Custom `Change` event handler.\n       * @param {CustomEvent} event `Change` event.\n       */\n      const onChange = async ({ type, detail }) => {\n        await tick();\n\n        editor ??= getNearestEditorFromDOMNode(wrapper);\n\n        // 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              unmount(component);\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(Component, {\n        target: document.createElement('div'),\n        props: {\n          componentName,\n          label,\n          collapsed,\n          fields,\n          values: this.__props,\n          onChange,\n        },\n      });\n\n      // Wait for the component to be mounted\n      // @see https://svelte.dev/docs/svelte/v5-migration-guide#Components-are-no-longer-classes\n      flushSync();\n\n      wrapper = /** @type {HTMLElement} */ (component.getElement());\n\n      window.requestAnimationFrame(() => {\n        wrapper.focus();\n      });\n\n      return wrapper;\n    }\n\n    /**\n     * Export the node as a DOM node.\n     * @returns {DOMExportOutput} Output.\n     */\n    exportDOM() {\n      return { element: this.createDOM() };\n    }\n\n    /**\n     * Import a DOM node.\n     * @returns {DOMConversionMap} Conversion map.\n     */\n    static importDOM() {\n      /** @type {DOMConversionMap} */\n      const conversionMap = {};\n\n      if (tagName) {\n        /**\n         * Conversion map item.\n         * @returns {DOMConversion} Conversion.\n         */\n        conversionMap[tagName] = () => ({\n          /**\n           * Conversion.\n           * @param {HTMLElement} element Element.\n           * @returns {DOMConversionOutput} Output.\n           */\n          conversion: (element) => ({\n            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 { entryDraft } from '$lib/services/contents/draft';\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 } from '$lib/services/contents/i18n';\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 { MarkdownField } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {{ file?: File, src?: string, alt?: string }} ImageEntry\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {MarkdownField} fieldConfig Field configuration.\n   * @property {string | undefined} currentValue Field value.\n   */\n\n  /** @type {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 = [...DEFAULT_MODES],\n    buttons: _buttons = [...DEFAULT_BUTTONS],\n    editor_components:\n      // Include all built-in and custom components by default\n      _editorComponents = [...BUILTIN_COMPONENTS, ...customComponentRegistry.keys()],\n    linked_images: linkedImagesEnabled = true,\n    minimal = false,\n  } = $derived(fieldConfig);\n  const modes = $derived(_modes.map((name) => NODE_NAME_MAP[name]).filter(Boolean));\n  const buttons = $derived(\n    [\n      ..._buttons,\n      // Include `code-block` implemented as a block type\n      ...(_editorComponents.includes('code-block') ? ['code-block'] : []),\n    ]\n      // @ts-ignore\n      .map((name) => BUTTON_NAME_MAP[name])\n      .filter(Boolean),\n  );\n  const components = $derived.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 = ({ target, images }) => {\n    const outer = /** @type {HTMLElement} */ (target)?.closest('div');\n    const editor = getNearestEditorFromDOMNode(outer);\n\n    if (!imageComponent || !outer?.matches('.lexical-root') || !editor) {\n      return;\n    }\n\n    images.forEach(({ file, src, alt = '' }) => {\n      if (file) {\n        src = URL.createObjectURL(file);\n      }\n\n      // eslint-disable-next-line jsdoc/require-jsdoc\n      const onUpdate = () => {\n        if (!file || !src) {\n          return;\n        }\n\n        // Wait until the image editor component is added to the DOM\n        const observer = new MutationObserver((records) => {\n          records.forEach(({ addedNodes }) => {\n            addedNodes.forEach((node) => {\n              if (\n                node instanceof HTMLElement &&\n                node.matches('.preview') &&\n                node.querySelector(`img[src=\"${src}\"]`)\n              ) {\n                // Dispatch `Select` event so the file is processed in `FileEditor`\n                node\n                  .closest('.drop-target')\n                  ?.dispatchEvent(new CustomEvent('Select', { detail: { files: [file] } }));\n\n                if (src?.startsWith('blob:')) {\n                  URL.revokeObjectURL(src);\n                }\n\n                observer.disconnect();\n              }\n            });\n          });\n        });\n\n        observer.observe(outer, { childList: true, subtree: true });\n      };\n\n      editor.update(\n        () => {\n          insertNodes([imageComponent.createNode({ src, alt }), createParagraphNode()]);\n        },\n        { onUpdate },\n      );\n    });\n  };\n\n  /**\n   * Handle pasted file. If it’s an image, insert it to the editor content.\n   * @param {ClipboardEvent} event `paste` event.\n   */\n  const onPaste = async (event) => {\n    const { target, clipboardData } = event;\n    const pastedItems = clipboardData?.items;\n\n    if (!pastedItems) {\n      return;\n    }\n\n    /** @type {ImageEntry[]} */\n    let images = [];\n\n    const fileIndex = [...pastedItems].findIndex(\n      ({ kind, type }) => kind === 'file' && SUPPORTED_IMAGE_TYPES.includes(type),\n    );\n\n    const htmlIndex = [...pastedItems].findIndex(\n      ({ kind, type }) => kind === 'string' && type === 'text/html',\n    );\n\n    if (fileIndex > -1 && htmlIndex > -1) {\n      // Handle pasted remote files: When a remote image is copied within the browser, both file and\n      // HTML with `<img>` are added to the clipboard. Scrape the filename and alt text from the\n      // HTML content\n      const file = fileIndex > -1 ? pastedItems[fileIndex].getAsFile() : undefined;\n\n      if (!file) {\n        return;\n      }\n\n      // Clear the clipboard to prevent Lexical from pasting the HTML\n      pastedItems.clear();\n      event.stopPropagation();\n\n      let alt = '';\n      let fileName = file.name;\n\n      /** @type {?HTMLImageElement} */\n      const img = await new Promise((resolve) => {\n        pastedItems[htmlIndex].getAsString((str) => {\n          resolve(new DOMParser().parseFromString(str, 'text/html').querySelector('img'));\n        });\n      });\n\n      if (img) {\n        alt = img.alt;\n\n        if (/^https?:/.test(img.src)) {\n          const name = new URL(img.src).pathname.split('/').pop() ?? '';\n\n          if (RASTER_IMAGE_EXTENSION_REGEX.test(name) || VECTOR_IMAGE_EXTENSION_REGEX.test(name)) {\n            fileName = name;\n          }\n        }\n      }\n\n      images = [{ file: new File([file], fileName, { type: file.type }), alt }];\n    } else {\n      // Handle pasted local files\n      images = [...clipboardData.files]\n        .filter(({ type }) => SUPPORTED_IMAGE_TYPES.includes(type))\n        .map((file) => ({ file }));\n    }\n\n    if (images.length) {\n      images = images.map(({ file, alt }, index) => {\n        // Rename pasted file with generic name\n        if (file?.name === 'image.png') {\n          const { year, month, day, hour, minute, second } = getDateTimeParts();\n          const suffix = images.length > 1 ? `-${index + 1}` : '';\n          const fileName = `${year}${month}${day}-${hour}${minute}${second}${suffix}.png`;\n\n          file = new File([file], fileName, { type: file.type });\n        }\n\n        return { file, alt };\n      });\n\n      insertImages({ target, images });\n    }\n  };\n\n  /**\n   * Handle dropped file(s). If it’s an image, insert it to the editor content.\n   * @param {DragEvent} event `drop` event.\n   */\n  const onDrop = async (event) => {\n    const { target, dataTransfer } = event;\n    const droppedFiles = dataTransfer?.files;\n    /** @type {ImageEntry[]} */\n    let images = [];\n\n    if (droppedFiles?.length) {\n      // Handle dropped local files\n      images = [...droppedFiles]\n        .filter(({ type }) => SUPPORTED_IMAGE_TYPES.includes(type))\n        .map((file) => ({ file }));\n    } else {\n      // Handle dropped remote files: The clipboard doesn’t contain the file itself but the HTML may\n      // contain `<img>`; use the `src` and `alt` attributes to insert a new image. We don’t fetch\n      // the file unless a data URL is given, because it’s likely to fail due to the external site’s\n      // CORS policy\n      const html = event.dataTransfer?.getData('text/html');\n\n      if (html) {\n        const img = new DOMParser().parseFromString(html, 'text/html').querySelector('img');\n\n        if (img) {\n          const { src, alt } = img;\n          const dataMatcher = src.match(/^data:(?<type>image\\/.+?);base64,.+/);\n          /** @type {File | undefined} */\n          let file = undefined;\n\n          if (dataMatcher) {\n            const type = dataMatcher.groups?.type ?? '';\n\n            if (SUPPORTED_IMAGE_TYPES.includes(type)) {\n              try {\n                const blob = await (await fetch(src)).blob();\n                const { year, month, day, hour, minute, second } = getDateTimeParts();\n                const extension = type.split('/')[1];\n                const fileName = `${year}${month}${day}-${hour}${minute}${second}.${extension}`;\n\n                file = new File([blob], fileName, { type });\n              } catch {\n                return;\n              }\n            }\n          }\n\n          images = [{ file, src, alt }];\n        }\n      }\n    }\n\n    if (images.length) {\n      insertImages({ target, images });\n    }\n  };\n\n  /**\n   * Update {@link inputValue} based on {@link currentValue} while avoiding a cycle dependency.\n   */\n  const setInputValue = () => {\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        {modes}\n        {buttons}\n        {components}\n        bind:value={inputValue}\n        flex\n        {readonly}\n        {required}\n        {invalid}\n        aria-labelledby=\"{fieldId}-label\"\n        aria-errormessage=\"{fieldId}-error\"\n        autoResize={true}\n        onpastecapture={(/** @type {ClipboardEvent} */ event) => {\n          // Use `capture` to handle the event before Lexical does\n          onPaste(event);\n        }}\n        ondrop={(/** @type {DragEvent} */ event) => {\n          onDrop(event);\n        }}\n      />\n    {/key}\n  {/await}\n</div>\n\n<style lang=\"scss\">\n  .wrapper {\n    display: contents;\n\n    &.minimal {\n      :global {\n        :is([role='textbox'], textarea) {\n          overflow: auto;\n          max-height: 240px;\n        }\n      }\n    }\n\n    :global {\n      .sui.toolbar {\n        flex-wrap: wrap;\n        height: auto;\n        min-height: 40px;\n      }\n\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.4\";\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.4\" !==\n  isomorphicReactPackageVersion$jscomp$inline_1840\n)\n  throw Error(\n    formatProdErrorMessage(\n      527,\n      isomorphicReactPackageVersion$jscomp$inline_1840,\n      \"19.2.4\"\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.4\",\n  rendererPackageName: \"react-dom\",\n  currentDispatcherRef: ReactSharedInternals,\n  reconcilerVersion: \"19.2.4\"\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.4\";\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 { 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();\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\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 {string} name\n\t * @param {string} value\n\t * @returns {void}\n\t */\n\tset(name, value) {\n\t\tvar previous = super.getAll(name).join('');\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\tif (previous !== super.getAll(name).join('')) {\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","import { GLOBAL_IMAGE_REGEX } from '$lib/services/contents/fields/rich-text/constants';\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 `allow` and `allowfullscreen`\n * attributes for embedded 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'],\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            let tagRegexes = htmlTagRegexCache.get(tag);\n\n            if (!tagRegexes) {\n              tagRegexes = {\n                openRe: new RegExp(`<${tag}(?:[\\\\s>])`, 'gi'),\n                closeRe: new RegExp(`<\\\\/${tag}>`, 'gi'),\n              };\n              htmlTagRegexCache.set(tag, tagRegexes);\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      const key = keys.shift();\n      const preview = key ? previewMap.get(key) : undefined;\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 { sanitize } from 'isomorphic-dompurify';\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 { 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    SANITIZE_OPTIONS,\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  /** @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    fieldConfig,\n    currentValue,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  /** @type {HTMLElement | undefined} */\n  let container = $state();\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 = true,\n    editor_components:\n      // Include all built-in and custom components by default\n      _editorComponents = [...BUILTIN_COMPONENTS, ...customComponentRegistry.keys()],\n    linked_images: linkedImagesEnabled = 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 });\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 ? sanitize(rawHTML, SANITIZE_OPTIONS) : rawHTML;\n  };\n\n  onMount(() => {\n    const observer = new MutationObserver(mutationCallback);\n\n    if (container) {\n      observer.observe(container, { childList: true, subtree: true });\n    }\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 markdown}\n    {#each splitMarkdownBlocks(markdown) as block, index (`${index}-${block}`)}\n      {@html parseMarkdown(block)}\n    {/each}\n  {/if}\n</div>\n\n<style lang=\"scss\">\n  :global([role='document']) div {\n    :global {\n      :is(h1, h2, h3, h4, h5, h6, p, ul, ol) {\n        margin: 1em 0 0;\n      }\n\n      :is(video, img) {\n        max-width: 100%;\n        max-height: 100%;\n      }\n\n      :is(a:has(img)) {\n        display: inline-block;\n\n        img {\n          pointer-events: none;\n        }\n      }\n    }\n  }\n\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, 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=\"auto\">\n    {listFormatter.format(currentValue.map(getLabel).sort())}\n  </p>\n{:else if currentValue !== undefined}\n  <p lang={getCanonicalLocale(locale)} dir=\"auto\">{getLabel(currentValue)}</p>\n{/if}\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","<script>\n  import { _ } from 'svelte-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        ? count === 1\n          ? 'character_counter.min_max.one'\n          : 'character_counter.min_max.many'\n        : hasMin\n          ? count === 1\n            ? 'character_counter.min.one'\n            : 'character_counter.min.many'\n          : count === 1\n            ? 'character_counter.max.one'\n            : 'character_counter.max.many',\n      { values: { count, min: minlength, max: maxlength } },\n    )}\n  >\n    {#if hasMin}\n      {minlength}\n      <!-- 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 lang=\"scss\">\n  .wrapper {\n    flex: none;\n    color: var(--sui-tertiary-foreground-color) !important;\n    font-size: var(--sui-font-size-small);\n    line-height: var(--sui-line-height-compact);\n    text-align: 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 } 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  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 { onMount } from 'svelte';\n  import { _ } from 'svelte-i18n';\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  onMount(() => {\n    // Hide the iframe if CSP is violated\n    window.addEventListener('securitypolicyviolation', ({ blockedURI, violatedDirective }) => {\n      if (blockedURI === new URL(embedURL).origin && violatedDirective === 'frame-src') {\n        embeddable = false;\n      }\n    });\n  });\n</script>\n\n<div role=\"none\">\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      ></iframe>\n    </VisibilityObserver>\n  {:else}\n    <a href={encodeURI(url)}>{url}</a>\n  {/if}\n</div>\n\n<style lang=\"scss\">\n  iframe {\n    display: block;\n    margin: 0 auto;\n    width: 100%;\n    height: auto;\n    aspect-ratio: 16 / 9;\n  }\n</style>\n","<!--\n  @component\n  Implement the preview for 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 } 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</script>\n\n{#if typeof currentValue === 'string' && currentValue.trim()}\n  <p lang={getCanonicalLocale(locale)} dir=\"auto\" class:title={fieldName === 'title'}>\n    {#if type === 'url' || isURL(currentValue)}\n      {#if isYouTubeVideoURL(currentValue)}\n        <YouTubeEmbed url={currentValue} />\n      {:else}\n        <a href={encodeURI(currentValue)}>{currentValue}</a>\n      {/if}\n    {:else if type === 'email'}\n      <a href=\"mailto:{encodeURI(currentValue)}\">{currentValue}</a>\n    {:else}\n      {currentValue}\n    {/if}\n  </p>\n{/if}\n\n<style lang=\"scss\">\n  .title {\n    font-size: var(--sui-font-size-xxx-large);\n    font-weight: var(--sui-font-weight-bold);\n  }\n\n  // Remove the padding to make the iframe full-width on small screens\n  @media (width < 768px) {\n    p:has(:global(iframe)) {\n      :global([role='document'] section) > & {\n        margin-inline: calc(var(--entry-preview-padding-inline) * -1);\n      }\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 } 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  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 } 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=\"auto\">{currentValue}</p>\n{/if}\n\n<style lang=\"scss\">\n  p {\n    white-space: pre-wrap;\n  }\n</style>\n","import { generateRandomId, generateUUID } from '@sveltia/utils/crypto';\n\n/**\n * @import { UuidField } from '$lib/types/public';\n */\n\n/**\n * Get the initial value for a UUID field.\n * @param {UuidField} fieldConfig Field configuration.\n * @returns {string} Initial value, either a UUID or a prefixed random ID.\n */\nexport const getInitialValue = (fieldConfig) => {\n  const { prefix, use_b32_encoding: useEncoding } = fieldConfig;\n  const value = useEncoding ? generateRandomId() : generateUUID();\n\n  return prefix ? `${prefix}${value}` : value;\n};\n","<!--\n  @component\n  Implement the editor for 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  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 lang=\"scss\">\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';\n\n/**\n * @import {\n * EntryDraft,\n * GetFieldArgs,\n * InternalLocaleCode,\n * LocaleContentMap,\n * } from '$lib/types/private';\n * @import { FieldKeyPath } from '$lib/types/public';\n */\n\n/**\n * Revert the changes made to the given field or all the fields to the default value(s).\n * @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 */\nexport const revertFields = ({\n  locale,\n  isDefaultLocale,\n  keyPath,\n  getFieldArgs,\n  currentValues,\n  reset = false,\n}) => {\n  const { valueMap = {} } = getFieldArgs;\n\n  Object.entries(valueMap).forEach(([_keyPath, value]) => {\n    if (!keyPath || _keyPath.startsWith(keyPath)) {\n      const fieldConfig = getField({ ...getFieldArgs, keyPath: _keyPath });\n\n      if (isDefaultLocale || [true, 'translate'].includes(fieldConfig?.i18n ?? false)) {\n        if (reset) {\n          delete currentValues[locale][_keyPath];\n        } else {\n          currentValues[locale][_keyPath] = value;\n        }\n      }\n    }\n  });\n};\n\n/**\n * Revert the changes made to the given locale.\n * @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  const revertArgs = { keyPath, locale, isDefaultLocale, currentValues };\n  /** @type {GetFieldArgs} */\n  const getFieldArgs = { collectionName, fileName, keyPath: '', isIndexFile };\n\n  // Remove all the current values except for i18n-duplicate ones\n  revertFields({\n    ...revertArgs,\n    getFieldArgs: { ...getFieldArgs, valueMap: currentValues[locale] },\n    reset: true,\n  });\n\n  // Restore the original values\n  revertFields({\n    ...revertArgs,\n    getFieldArgs: { ...getFieldArgs, valueMap: originalValues[locale] },\n  });\n};\n\n/**\n * Revert the changes made to the given field or all the fields to the default value(s).\n * @param {object} [args] Arguments.\n * @param {InternalLocaleCode} [args.locale] Target locale, e.g. `ja`. Can be empty if reverting\n * everything.\n * @param {FieldKeyPath} [args.keyPath] Flattened (dot-notated) object keys that will be used for\n * searching the source values. Omit this if copying all the fields. If the triggered 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","import { getInputValue, parseDateTimeConfig } 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 } = 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(value, config);\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","<script>\n  import { Menu, MenuButton, MenuItem, Spacer } from '@sveltia/ui';\n  import { escapeRegExp } from '@sveltia/utils/string';\n  import equal from 'fast-deep-equal';\n  import { sanitize } from 'isomorphic-dompurify';\n  import { parseInline } from 'marked';\n  import { getContext, setContext } from 'svelte';\n  import { writable } from 'svelte/store';\n  import { _ } from 'svelte-i18n';\n\n  import CopyMenuItems from '$lib/components/contents/details/editor/copy-menu-items.svelte';\n  import 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 } from '$lib/services/contents/draft';\n  import { revertChanges } from '$lib/services/contents/draft/update/revert';\n  import { isFieldMultiple, isFieldRequired } from '$lib/services/contents/entry/fields';\n  import { MIN_MAX_VALUE_FIELD_TYPES } from '$lib/services/contents/fields';\n  import { parseDateTimeConfig } from '$lib/services/contents/fields/date-time/helper';\n  import { getFormattedDateTime } from '$lib/services/contents/fields/date-time/validate';\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   * DateTimeFieldNormalizedProps,\n   * DraftValueStoreKey,\n   * FieldContext,\n   * FieldEditorContext,\n   * InternalLocaleCode,\n   * TypedFieldKeyPath,\n   * } from '$lib/types/private';\n   * @import {\n   * BooleanField,\n   * DateTimeField,\n   * DateTimeInputType,\n   * Field,\n   * FieldKeyPath,\n   * MinMaxValueField,\n   * NumberField,\n   * StringField,\n   * TextField,\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    // @ts-ignore Some field types don’t have `pattern` property\n    pattern = /** @type {string[]} */ ([]),\n    readonly: readonlyOption = false,\n  } = $derived(/** @type {VisibleField} */ (fieldConfig));\n  const required = $derived(isFieldRequired({ fieldConfig, locale }));\n  const multiple = $derived(isFieldMultiple(fieldConfig));\n  const parsedDateTimeConfig = $derived(\n    /** @type {DateTimeFieldNormalizedProps} */ (\n      fieldType === 'datetime'\n        ? parseDateTimeConfig(/** @type {DateTimeField} */ (fieldConfig))\n        : {}\n    ),\n  );\n  /** @type {{ min?: string | number, max?: string | number }} */\n  const { min, max } = $derived.by(() => {\n    if (MIN_MAX_VALUE_FIELD_TYPES.includes(fieldType)) {\n      const { min: _min, max: _max } =\n        fieldType === 'datetime'\n          ? parsedDateTimeConfig\n          : /** @type {MinMaxValueField} */ (fieldConfig);\n\n      return { min: _min, max: _max };\n    }\n\n    return {};\n  });\n  const type = $derived.by(() => {\n    if (fieldType === 'string') {\n      return /** @type {StringField} */ (fieldConfig).type ?? 'text';\n    }\n\n    if (fieldType === 'datetime') {\n      return parsedDateTimeConfig.type;\n    }\n\n    if (fieldType === 'number') {\n      return 'number';\n    }\n\n    return undefined;\n  });\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 canAddMultiValue = $derived(fieldType === 'list' || fieldType === 'keyvalue' || multiple);\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(\n    isList\n      ? Object.entries(originalValues?.[locale] ?? {})\n          .filter(([_keyPath]) => keyPathRegex.test(_keyPath))\n          .map(([, val]) => val)\n          .filter((val) => val !== undefined)\n      : originalValues?.[locale]?.[keyPath],\n  );\n  const validity = $derived($entryDraft?.validities[locale][keyPath]);\n  const fieldLabel = $derived(label || fieldName);\n  const readonly = $derived(\n    readonlyOption ||\n      (i18n === 'duplicate' && locale !== defaultLocale) ||\n      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={equal(currentValue, originalValue) ||\n                    // Disable reversion in list items until we figure out how to handle reordering\n                    /\\.\\d+\\./.test(keyPath)}\n                  onclick={() => {\n                    revertChanges({ locale, keyPath });\n                  }}\n                />\n              {/if}\n            </Menu>\n          {/snippet}\n        </MenuButton>\n      {/if}\n    </header>\n    {#if !readonly && comment}\n      <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        {#if validity.valueMissing}\n          {$_('validation.value_missing')}\n        {/if}\n        {#if validity.tooShort}\n          {@const { minlength } = (() => /** @type {StringField | TextField} */ (fieldConfig))()}\n          {$_(minlength === 1 ? 'validation.too_short.one' : 'validation.too_short.many', {\n            values: { min: minlength },\n          })}\n        {/if}\n        {#if validity.tooLong}\n          {@const { maxlength } = (() => /** @type {StringField | TextField} */ (fieldConfig))()}\n          {$_(maxlength === 1 ? 'validation.too_long.one' : 'validation.too_long.many', {\n            values: { max: maxlength },\n          })}\n        {/if}\n        {#if validity.rangeUnderflow}\n          {@const quantity = min === 1 ? 'one' : 'many'}\n          {#if fieldType === 'datetime' && typeof min === 'string'}\n            {$_(`validation.range_underflow.${type}`, {\n              values: {\n                min: getFormattedDateTime(/** @type {DateTimeInputType} */ (type), min),\n              },\n            })}\n          {:else if fieldType === 'number'}\n            {$_('validation.range_underflow.number', { values: { min } })}\n          {:else if canAddMultiValue}\n            {$_(`validation.range_underflow.add_${quantity}`, { values: { min } })}\n          {:else}\n            {$_(`validation.range_underflow.select_${quantity}`, { values: { min } })}\n          {/if}\n        {/if}\n        {#if validity.rangeOverflow}\n          {@const quantity = max === 1 ? 'one' : 'many'}\n          {#if fieldType === 'datetime' && typeof max === 'string'}\n            {$_(`validation.range_overflow.${type}`, {\n              values: {\n                max: getFormattedDateTime(/** @type {DateTimeInputType} */ (type), max),\n              },\n            })}\n          {:else if fieldType === 'number'}\n            {$_('validation.range_overflow.number', { values: { max } })}\n          {:else if canAddMultiValue}\n            {$_(`validation.range_overflow.add_${quantity}`, { values: { max } })}\n          {:else}\n            {$_(`validation.range_overflow.select_${quantity}`, { values: { max } })}\n          {/if}\n        {/if}\n        {#if validity.patternMismatch}\n          {pattern[1]}\n        {/if}\n        {#if validity.typeMismatch}\n          {$_(`validation.type_mismatch.${type}`)}\n        {/if}\n      </ValidationError>\n    {/if}\n    <div role=\"none\" class=\"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 lang=\"scss\">\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 { TextInput } from '@sveltia/ui';\n  import { untrack } from 'svelte';\n  import { _ } from 'svelte-i18n';\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    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\n  $effect(() => {\n    if (readonly) {\n      inputValue = $entryDraft?.currentSlugs[locale] ?? '';\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          {$_('validation.value_missing')}\n        {/if}\n      </ValidationError>\n    {/if}\n    <div role=\"none\" class=\"field-wrapper\">\n      <TextInput\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 { sanitize } from 'isomorphic-dompurify';\n  import { mount } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import Placeholder from '$lib/components/common/placeholder.svelte';\n\n  /**\n   * @import { Snippet } from 'svelte';\n   * @import { InternalLocaleCode } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {InternalLocaleCode} locale Current pane’s locale.\n   * @property {string[]} 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=\"${sanitize(locale)}\">\n    <head>\n      <meta charset=\"UTF-8\">\n      ${styleURLs.map((url) => `<link rel=\"stylesheet\" href=\"${sanitize(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      iframe.addEventListener('load', mountPlaceholder, { once: true });\n      iframe.src = URL.createObjectURL(new Blob([generateHTML()], { type: 'text/html' }));\n    }\n  };\n\n  $effect(() => {\n    if (iframe) {\n      initializeIframe();\n    }\n  });\n</script>\n\n<iframe class=\"preview\" title={$_('content_preview')} bind:this={iframe}></iframe>\n\n<style lang=\"scss\">\n  iframe {\n    display: block;\n    border: none;\n    width: 100%;\n    height: 100%;\n  }\n</style>\n","<script>\n  import { _ } from 'svelte-i18n';\n\n  import VisibilityObserver from '$lib/components/common/visibility-observer.svelte';\n  import EntryPreviewIframe from '$lib/components/contents/details/preview/entry-preview-iframe.svelte';\n  import FieldPreview from '$lib/components/contents/details/preview/field-preview.svelte';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { 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 lang=\"scss\">\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 { Button, EmptyState } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import { _ } from 'svelte-i18n';\n\n  import EntryEditor from '$lib/components/contents/details/editor/entry-editor.svelte';\n  import EntryPreview from '$lib/components/contents/details/preview/entry-preview.svelte';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { toggleLocale } from '$lib/services/contents/draft/update/locale';\n  import { entryEditorSettings } from '$lib/services/contents/editor/settings';\n  import { getLocaleLabel } from '$lib/services/contents/i18n';\n\n  /**\n   * @import { Writable } from 'svelte/store';\n   * @import { EntryEditorPane } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} id The wrapper element’s `id` attribute.\n   * @property {Writable<?EntryEditorPane>} thisPane This pane’s mode and locale.\n   * @property {HTMLElement} [thisPaneContentArea] This pane’s content area.\n   * @property {HTMLElement} [thatPaneContentArea] Another pane’s content area.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    id,\n    thisPane,\n    thisPaneContentArea = $bindable(),\n    thatPaneContentArea = $bindable(),\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const { syncScrolling } = $derived($entryEditorSettings ?? {});\n  const locale = $derived($thisPane?.locale);\n  const mode = $derived($thisPane?.mode);\n  const hasContent = $derived(!!locale && !!$state.snapshot($entryDraft?.currentValues[locale]));\n  const labelOptions = $derived({\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 lang=\"scss\">\n  .wrapper {\n    display: contents;\n  }\n\n  .content {\n    --field-editor-padding: 16px;\n    flex: auto;\n    overflow-y: auto;\n    scroll-behavior: auto; /* Don’t use smooth scroll for syncing */\n    overscroll-behavior-y: contain;\n\n    @media (width < 768px) {\n      --field-editor-padding: 12px;\n    }\n  }\n</style>\n","<script>\n  import { Icon, Option, Select, SelectButton, SelectButtonGroup } from '@sveltia/ui';\n  import { writable } from 'svelte/store';\n  import { _ } from 'svelte-i18n';\n\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { entryEditorSettings } from '$lib/services/contents/editor/settings';\n  import { getLocaleLabel } from '$lib/services/contents/i18n';\n  import { DEFAULT_I18N_CONFIG } from '$lib/services/contents/i18n/config';\n  import { isMediumScreen, isSmallScreen } from '$lib/services/user/env';\n\n  /**\n   * @import { Writable } from 'svelte/store';\n   * @import { EntryEditorPane } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} id The wrapper element’s `id` attribute.\n   * @property {Writable<?EntryEditorPane>} thisPane This pane’s mode and locale.\n   * @property {Writable<?EntryEditorPane>} [thatPane] Another pane’s mode and locale.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    id,\n    thisPane,\n    thatPane = writable(null),\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const collection = $derived($entryDraft?.collection);\n  const collectionFile = $derived($entryDraft?.collectionFile);\n  const { allLocales } = $derived((collectionFile ?? collection)?._i18n ?? DEFAULT_I18N_CONFIG);\n  const listedLocales = $derived(\n    $isSmallScreen || $isMediumScreen\n      ? [...allLocales]\n      : allLocales.filter((locale) => !($thatPane?.mode === 'edit' && $thatPane.locale === locale)),\n  );\n  const hasAnyError = $derived(\n    Object.entries($entryDraft?.validities ?? {}).some(\n      ([locale, validityMap]) =>\n        listedLocales.includes(locale) &&\n        Object.values(validityMap ?? {}).some(({ valid }) => !valid),\n    ),\n  );\n  const canPreview = $derived($entryDraft?.canPreview ?? true);\n  const useDropDown = $derived($isSmallScreen || $isMediumScreen || allLocales.length >= 5);\n  const SelectComponent = $derived(useDropDown ? Select : SelectButtonGroup);\n  const OptionComponent = $derived(useDropDown ? Option : SelectButton);\n  const variant = $derived(useDropDown ? undefined : 'tertiary');\n  const size = $derived(useDropDown ? undefined : 'small');\n</script>\n\n<div role=\"none\" class=\"wrapper\">\n  <SelectComponent\n    class={hasAnyError && useDropDown ? 'error' : undefined}\n    aria-label={$_('switch_locale')}\n    aria-controls={id.replace('-header', '-body')}\n  >\n    <!-- Need an inner to style elements inside the <dialog> -->\n    <div role=\"none\" class=\"inner\">\n      {#each listedLocales as locale (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          aria-label=\"{label} {disabled\n            ? $_('locale_content_disabled_short')\n            : hasError\n              ? $_('locale_content_error_short')\n              : ''}\"\n          selected={$thisPane?.mode === 'edit' && $thisPane.locale === locale}\n          class={hasError ? 'error' : ''}\n          data-mode=\"edit\"\n          onSelect={() => {\n            $thisPane = { mode: 'edit', locale };\n\n            if ($thatPane?.mode === 'preview') {\n              $thatPane = { mode: 'preview', locale };\n            }\n          }}\n        >\n          {#snippet startIcon()}\n            {#if disabled}\n              <Icon name=\"edit_off\" />\n            {:else if hasError}\n              <Icon name=\"error\" />\n            {/if}\n          {/snippet}\n        </OptionComponent>\n      {/each}\n      {#if $thatPane?.mode === 'edit' && canPreview && $entryEditorSettings?.showPreview}\n        <OptionComponent\n          {variant}\n          {size}\n          label={$_('preview')}\n          selected={$thisPane?.mode === 'preview'}\n          data-mode=\"preview\"\n          onSelect={() => {\n            $thisPane = { mode: 'preview', locale: $thatPane?.locale ?? '' };\n          }}\n        />\n      {/if}\n    </div>\n  </SelectComponent>\n</div>\n\n<style lang=\"scss\">\n  .wrapper {\n    display: contents;\n\n    :global {\n      .combobox {\n        @media (width < 1024px) {\n          min-width: 128px;\n          --sui-textbox-height: 32px;\n          --sui-button-medium-height: 32px;\n        }\n\n        &.error [role='combobox'] {\n          border-color: var(--sui-error-border-color);\n        }\n      }\n    }\n  }\n\n  .inner {\n    display: contents;\n\n    :global {\n      :is(.error, .error button[data-mode='edit']) {\n        color: var(--sui-error-foreground-color) !important;\n      }\n    }\n  }\n</style>\n","<script>\n  import { Button, Icon } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  /**\n   * @import { Writable } from 'svelte/store';\n   * @import { EntryEditorPane } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Writable<?EntryEditorPane>} thisPane This pane’s mode and locale.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    thisPane,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<Button\n  variant=\"ghost\"\n  iconic\n  aria-label={$_('preview')}\n  pressed={$thisPane?.mode === 'preview'}\n  onclick={() => {\n    $thisPane = {\n      mode: $thisPane?.mode === 'preview' ? 'edit' : 'preview',\n      locale: $thisPane?.locale ?? '',\n    };\n  }}\n>\n  {#snippet startIcon()}\n    <Icon name=\"visibility\" />\n  {/snippet}\n</Button>\n","<script>\n  import { Divider, Menu, MenuButton, MenuItem, Spacer, Toolbar } from '@sveltia/ui';\n  import equal from 'fast-deep-equal';\n  import { writable } from 'svelte/store';\n  import { _ } from 'svelte-i18n';\n\n  import CopyMenuItems from '$lib/components/contents/details/editor/copy-menu-items.svelte';\n  import TranslateButton from '$lib/components/contents/details/editor/translate-button.svelte';\n  import LocaleSwitcher from '$lib/components/contents/details/locale-switcher.svelte';\n  import PreviewButton from '$lib/components/contents/details/preview-button.svelte';\n  import { backend } from '$lib/services/backends';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { toggleLocale } from '$lib/services/contents/draft/update/locale';\n  import { revertChanges } from '$lib/services/contents/draft/update/revert';\n  import { getEntryPreviewURL, getEntryRepoBlobURL } from '$lib/services/contents/entry';\n  import { getLocaleLabel } from '$lib/services/contents/i18n';\n  import { DEFAULT_I18N_CONFIG } from '$lib/services/contents/i18n/config';\n  import { isMediumScreen, isSmallScreen } from '$lib/services/user/env';\n  import { prefs } from '$lib/services/user/prefs';\n\n  /**\n   * @import { Writable } from 'svelte/store';\n   * @import { EntryEditorPane } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {string} id The wrapper element’s `id` attribute.\n   * @property {Writable<?EntryEditorPane>} thisPane This pane’s mode and locale.\n   * @property {Writable<?EntryEditorPane>} [thatPane] Another pane’s mode and locale.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    id,\n    thisPane,\n    thatPane = writable(null),\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const collection = $derived($entryDraft?.collection);\n  const collectionFile = $derived($entryDraft?.collectionFile);\n  const originalEntry = $derived($entryDraft?.originalEntry);\n  const originalValues = $derived($entryDraft?.originalValues ?? {});\n  const { i18nEnabled, saveAllLocales, allLocales, defaultLocale } = $derived(\n    (collectionFile ?? collection)?._i18n ?? DEFAULT_I18N_CONFIG,\n  );\n  const isLocaleEnabled = $derived($entryDraft?.currentLocales[$thisPane?.locale ?? '']);\n  const isOnlyLocale = $derived(\n    Object.values($entryDraft?.currentLocales ?? {}).filter((enabled) => enabled).length === 1,\n  );\n  const otherLocales = $derived(\n    i18nEnabled ? allLocales.filter((l) => l !== $thisPane?.locale) : [],\n  );\n  const canCopy = $derived(!!otherLocales.length);\n  const canRevert = $derived(\n    $thisPane?.locale &&\n      !equal(\n        $state.snapshot($entryDraft?.currentValues[$thisPane.locale]),\n        originalValues[$thisPane.locale],\n      ),\n  );\n  const canPreview = $derived($entryDraft?.canPreview ?? true);\n  const previewURL = $derived(\n    collection && originalEntry && $thisPane?.locale\n      ? getEntryPreviewURL(originalEntry, $thisPane.locale, collection, collectionFile)\n      : undefined,\n  );\n</script>\n\n<div role=\"none\" {id} class=\"header\">\n  <Toolbar variant=\"secondary\" aria-label={$_('secondary')}>\n    {#if i18nEnabled && allLocales.length > 1}\n      <LocaleSwitcher {id} {thisPane} {thatPane} />\n      {#if ($isSmallScreen || $isMediumScreen) && canPreview}\n        <PreviewButton {thisPane} />\n      {/if}\n    {:else if !($isSmallScreen || $isMediumScreen)}\n      <h3 role=\"none\">{$thisPane?.mode === 'preview' ? $_('preview') : $_('edit')}</h3>\n    {:else if canPreview}\n      <PreviewButton {thisPane} />\n    {/if}\n    <Spacer flex />\n    {#if $thisPane?.mode === 'edit'}\n      {@const localeLabel = getLocaleLabel($thisPane.locale) ?? $thisPane.locale}\n      {#if canCopy}\n        <TranslateButton locale={$thisPane.locale} {otherLocales} />\n      {/if}\n      <MenuButton\n        variant=\"ghost\"\n        iconic\n        popupPosition=\"bottom-right\"\n        aria-label={$_('show_content_options_x_locale', { values: { locale: localeLabel } })}\n      >\n        {#snippet popup()}\n          <Menu aria-label={$_('content_options_x_locale', { values: { locale: localeLabel } })}>\n            {#if canCopy && $thisPane?.locale}\n              <CopyMenuItems locale={$thisPane.locale} {otherLocales} />\n            {/if}\n            <MenuItem\n              label={$_('revert_changes')}\n              disabled={!canRevert}\n              onclick={() => {\n                revertChanges({ locale: $thisPane?.locale });\n              }}\n            />\n            {#if !saveAllLocales && $thisPane?.locale}\n              <Divider />\n              <MenuItem\n                label={$_(\n                  isLocaleEnabled\n                    ? 'disable_x_locale'\n                    : $state.snapshot($entryDraft?.currentValues[$thisPane.locale])\n                      ? 'reenable_x_locale'\n                      : 'enable_x_locale',\n                  { values: { locale: localeLabel } },\n                )}\n                disabled={$thisPane.locale === defaultLocale || (isLocaleEnabled && isOnlyLocale)}\n                onclick={() => {\n                  toggleLocale($thisPane?.locale ?? '');\n                }}\n              />\n            {/if}\n            {#if originalEntry && (previewURL || $prefs.devModeEnabled)}\n              <Divider />\n              {#if previewURL}\n                <MenuItem\n                  label={$_('view_on_live_site')}\n                  onclick={() => {\n                    window.open(previewURL);\n                  }}\n                />\n              {/if}\n              {#if $prefs.devModeEnabled}\n                <MenuItem\n                  disabled={!$backend?.repository?.blobBaseURL}\n                  label={$_('view_on_x', {\n                    values: { service: $backend?.repository?.label },\n                    default: $_('view_in_repository'),\n                  })}\n                  onclick={() => {\n                    if (originalEntry && $thisPane) {\n                      window.open(getEntryRepoBlobURL(originalEntry, $thisPane.locale));\n                    }\n                  }}\n                />\n              {/if}\n            {/if}\n          </Menu>\n        {/snippet}\n      </MenuButton>\n    {/if}\n  </Toolbar>\n</div>\n\n<style lang=\"scss\">\n  .header {\n    flex: none !important;\n\n    :global {\n      & > .sui.toolbar {\n        margin-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  import { Alert, Dialog, TextInput } from '@sveltia/ui';\n  import equal from 'fast-deep-equal';\n  import { _ } from 'svelte-i18n';\n\n  import { getEntriesByCollection } from '$lib/services/contents/collection/entries';\n  import { entryDraft } from '$lib/services/contents/draft';\n  import { getLocaleLabel } from '$lib/services/contents/i18n';\n\n  /**\n   * @import { EntryDraft, InternalLocaleCode } from '$lib/types/private';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} [open] Whether the dialog is open.\n   */\n\n  /** @type {Props} */\n  let { 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, false | 'empty' | 'duplicate'>} */\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  $effect(() => {\n    if (open) {\n      init();\n    }\n  });\n</script>\n\n<Dialog\n  bind:open\n  title={$_('edit_slug')}\n  okLabel={$_('update')}\n  okDisabled={equal(currentSlugs, updatedSlugs) ||\n    Object.values(validations).some((invalid) => invalid !== false)}\n  onOk={() => {\n    /** @type {EntryDraft} */ ($entryDraft).currentSlugs = updatedSlugs;\n  }}\n>\n  <Alert status=\"warning\" --font-size=\"var(--sui-font-size-small)\">\n    {$_('edit_slug_warning')}\n  </Alert>\n  <div role=\"none\" class=\"locales\">\n    {#each Object.keys(updatedSlugs) as locale (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            flex\n            bind:value={updatedSlugs[locale]}\n            oninput={() => {\n              validations[locale] = !updatedSlugs[locale].trim()\n                ? 'empty'\n                : otherSlugs.includes(updatedSlugs[locale])\n                  ? 'duplicate'\n                  : false;\n            }}\n            invalid={validations[locale] !== false}\n            aria-errormessage=\"{componentId}-{locale}-error\"\n          />\n          <p id=\"{componentId}-{locale}-error\" class=\"error\">\n            {#if validations[locale] === 'empty'}\n              {$_('edit_slug_error.empty')}\n            {/if}\n            {#if validations[locale] === 'duplicate'}\n              {$_('edit_slug_error.duplicate')}\n            {/if}\n          </p>\n        </div>\n      </section>\n    {/each}\n  </div>\n</Dialog>\n\n<style lang=\"scss\">\n  p:not(:empty) {\n    margin-top: 0;\n  }\n\n  .locales {\n    display: table;\n    margin: 16px 0 0;\n    width: 100%;\n\n    section {\n      display: table-row;\n\n      div {\n        display: table-cell;\n        vertical-align: middle;\n        white-space: nowrap;\n\n        &:last-child {\n          width: 90%;\n        }\n      }\n\n      h3 {\n        margin-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 { getPreviousSha } from '$lib/services/contents/draft/save/changes';\n\n/**\n * @import { Asset, Entry, FileChange } from '$lib/types/private';\n */\n\n/**\n * Update the stores after deleting entries.\n * @param {object} args Arguments.\n * @param {string[]} args.ids List of entry IDs.\n * @param {string[]} args.assetPaths List of associated asset paths.\n */\nexport const updateStores = ({ ids, assetPaths }) => {\n  const _allEntries = get(allEntries);\n\n  allEntries.set(_allEntries.filter((file) => !ids.includes(file.id)));\n\n  contentUpdatesToast.set({\n    ...UPDATE_TOAST_DEFAULT_STATE,\n    deleted: true,\n    count: ids.length,\n  });\n\n  if (assetPaths.length) {\n    allAssets.update((assets) => assets.filter((asset) => !assetPaths.includes(asset.path)));\n  }\n};\n\n/**\n * Delete entries by slugs.\n * @param {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  await saveChanges({\n    changes,\n    options: {\n      commitType: 'delete',\n      collection: get(selectedCollection),\n    },\n  });\n\n  updateStores({ ids, assetPaths });\n};\n","import { isObject } from '@sveltia/utils/object';\nimport { derived } from 'svelte/store';\n\nimport { selectedCollection } from '$lib/services/contents/collection';\nimport { currentView } from '$lib/services/contents/collection/view';\nimport { getPropertyValue } from '$lib/services/contents/entry/fields';\nimport { getRegex } from '$lib/services/utils/misc';\n\n/**\n * @import { Entry, FilteringConditions, 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  if (Array.isArray(filters)) {\n    return { options: filters };\n  }\n\n  if (isObject(filters)) {\n    const { filters: options, default: defaultFilterName } = filters;\n\n    if (Array.isArray(options)) {\n      const defaultFilter = defaultFilterName\n        ? options.find(({ name }) => name === defaultFilterName)\n        : undefined;\n\n      return {\n        options,\n        default: defaultFilter\n          ? { field: defaultFilter.field, pattern: defaultFilter.pattern }\n          : undefined,\n      };\n    }\n  }\n\n  return { options: [] };\n};\n\n/**\n * Filter the given entries.\n * @param {Entry[]} entries Entry list.\n * @param {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      if (regex) {\n        return regex.test(String(rawValue)) || regex.test(String(refValue));\n      }\n\n      return rawValue === pattern || refValue === pattern;\n    }),\n  );\n};\n\n/**\n * 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 { isObject } from '@sveltia/utils/object';\nimport { compare } from '@sveltia/utils/string';\nimport { derived, get } from 'svelte/store';\nimport { _ } from 'svelte-i18n';\n\nimport { selectedCollection } from '$lib/services/contents/collection';\nimport { currentView } from '$lib/services/contents/collection/view';\nimport { getPropertyValue } from '$lib/services/contents/entry/fields';\nimport { getRegex } from '$lib/services/utils/misc';\n\n/**\n * @import { Entry, GroupingConditions, InternalCollection } from '$lib/types/private';\n * @import { ViewGroup, ViewGroups } from '$lib/types/public';\n */\n\n/**\n * Parse view groups configuration. This supports both an array, which is compatible with\n * Netlify/Decap CMS, and an object, which is compatible with Static CMS.\n * @param {ViewGroup[] | ViewGroups | undefined} filters View groups configuration.\n * @returns {{ options: ViewGroup[], default?: GroupingConditions }} Parsed view groups.\n * @see https://decapcms.org/docs/configuration-options/#view_groups\n * @see https://staticjscms.netlify.app/docs/collection-overview#view-groups\n * @see https://sveltiacms.app/en/docs/collections/entries#grouping\n */\nexport const parseGroupConfig = (filters) => {\n  if (Array.isArray(filters)) {\n    return { options: filters };\n  }\n\n  if (isObject(filters)) {\n    const { groups: options, default: defaultGroupName } = filters;\n\n    if (Array.isArray(options)) {\n      const defaultGroup = defaultGroupName\n        ? options.find(({ name }) => name === defaultGroupName)\n        : undefined;\n\n      return {\n        options,\n        default: defaultGroup\n          ? { field: defaultGroup.field, pattern: defaultGroup.pattern }\n          : undefined,\n      };\n    }\n  }\n\n  return { options: [] };\n};\n\n/**\n * Group the given entries.\n * @param {Entry[]} entries Entry list.\n * @param {InternalCollection} collection Collection that the entries belong to.\n * @param {GroupingConditions | null | undefined} conditions Grouping conditions.\n * @returns {{ name: string, entries: Entry[] }[]} Grouped entries, where each group object contains\n * a name and an entry list. When ungrouped, there will still be one group object named `*`.\n * @see https://decapcms.org/docs/configuration-options/#view_groups\n * @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 regex = getRegex(pattern);\n  /** @type {Record<string, Entry[]>} */\n  const groups = {};\n  const otherKey = get(_)('other');\n\n  entries.forEach((entry) => {\n    const value = getPropertyValue({ entry, locale, collectionName, key: field });\n\n    const key =\n      value === undefined\n        ? otherKey\n        : regex\n          ? (String(value).match(regex)?.[0] ?? otherKey)\n          : String(value);\n\n    if (!(key in groups)) {\n      groups[key] = [];\n    }\n\n    groups[key].push(entry);\n  });\n\n  // Sort groups by key\n  const sortedGroups = Object.entries(groups)\n    .map(([name, _entries]) => ({ name, entries: _entries }))\n    .sort(({ name: aKey }, { name: bKey }) => compare(aKey, bKey));\n\n  // Keep the descending order if already sorted, especially on the date field\n  if (sortCondition?.key === field && sortCondition.order === 'descending') {\n    sortedGroups.reverse();\n  }\n\n  return sortedGroups;\n};\n\n/**\n * 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 { IndexedDB } from '@sveltia/utils/storage';\nimport equal from 'fast-deep-equal';\nimport { get, writable } from 'svelte/store';\n\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  const { databaseName } = repository ?? {};\n  const settingsDB = databaseName ? new IndexedDB(databaseName, 'ui-settings') : null;\n  const storageKey = 'contents-view';\n\n  entryListSettings.set((await settingsDB?.get(storageKey)) ?? {});\n\n  entryListSettings.subscribe((_settings) => {\n    (async () => {\n      try {\n        if (!equal(_settings, await settingsDB?.get(storageKey))) {\n          await settingsDB?.set(storageKey, _settings);\n        }\n      } catch {\n        //\n      }\n    })();\n  });\n\n  currentView.subscribe((view) => {\n    const { name } = get(selectedCollection) ?? {};\n    const savedView = get(entryListSettings)?.[name ?? ''] ?? {};\n\n    if (name && !equal(view, savedView)) {\n      entryListSettings.update((_settings) => ({ ..._settings, [name]: view }));\n    }\n  });\n};\n","import { unique } from '@sveltia/utils/array';\nimport { isObject } from '@sveltia/utils/object';\nimport equal from 'fast-deep-equal';\nimport { derived, get } from 'svelte/store';\nimport { _, locale as appLocale } from 'svelte-i18n';\n\nimport { allEntries } from '$lib/services/contents';\nimport { selectedCollection } from '$lib/services/contents/collection';\nimport { currentView } from '$lib/services/contents/collection/view';\nimport { entryListSettings } from '$lib/services/contents/collection/view/settings';\nimport { getField } from '$lib/services/contents/entry/fields';\n\n/**\n * @import { Readable } from 'svelte/store';\n * @import { 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 * 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};\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  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 get(_)(`sort_keys.${key}`);\n  }\n\n  if (key.includes('.')) {\n    return key\n      .split('.')\n      .map((_key, index, arr) => {\n        if (/^\\d+$/.test(_key)) {\n          return undefined;\n        }\n\n        const keyPath = arr.slice(0, index + 1).join('.');\n\n        // @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` as a dependency because `getSortKeyLabel()` may return a localized label\n  [selectedCollection, allEntries, appLocale],\n  ([collection, _allEntries], set) => {\n    // Disable sorting for file/singleton collection\n    if (!collection || !('folder' 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","/**\n * Remove some inline Markdown syntax from the given string. This covers bold, italic, strikethrough\n * and code. This function does not remove single characters like the `_` prefix in `_redirects`.\n * @param {string} str Original string.\n * @returns {string} Modified string.\n */\nexport const removeMarkdownSyntax = (str) => {\n  let result = str;\n  let changed = true;\n\n  // Keep processing until no more changes are made to handle nested cases\n  while (changed) {\n    const before = result;\n\n    // Process from innermost to outermost by trying single character patterns first\n    result = result.replaceAll(/([_*`~])([^_*`~]+)\\1/g, '$2');\n\n    // Then handle multi-character patterns (like ** or __ or ~~)\n    result = result.replaceAll(/([_*`~]{2,})(.+?)\\1/g, '$2');\n\n    changed = result !== before;\n  }\n\n  return result;\n};\n","import { compare } from '@sveltia/utils/string';\n\nimport { getIndexFile } from '$lib/services/contents/collection/index-file';\nimport { getSortKeyType } from '$lib/services/contents/collection/view/sort-keys';\nimport { getField, getPropertyValue } from '$lib/services/contents/entry/fields';\nimport { getEntrySummary } from '$lib/services/contents/entry/summary';\nimport { getDate } from '$lib/services/contents/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 markdownFieldKeys = ['title', 'summary', 'description'];\n\n/**\n * Sort the given entries.\n * @param {Entry[]} entries Entry list.\n * @param {InternalCollection} collection Collection that the entries belong to.\n * @param {SortingConditions} [conditions] Sorting conditions.\n * @returns {Entry[]} Sorted entry list.\n * @see https://decapcms.org/docs/configuration-options/#sortable_fields\n * @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  const fieldConfig = getField({ collectionName, keyPath: key });\n  const type = 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    markdownFieldKeys.includes(key);\n\n  // Pre-compute sort keys once (O(n)) instead of re-computing inside the comparator (O(n log n)).\n  // For date fields this avoids re-parsing the date string on every comparison; for markdown fields\n  // it avoids repeatedly stripping syntax from the same value.\n  const sortKeyMap = Object.fromEntries(\n    _entries.map((entry) => {\n      // Special handling for summary, which uses a generated value instead of a raw field value\n      if (key === '_summary') {\n        return [entry.slug, getEntrySummary(collection, entry, { locale, useTemplate: true })];\n      }\n\n      const raw = getPropertyValue({ entry, locale, collectionName, key });\n\n      if (dateFieldConfig) {\n        return [entry.slug, raw ? Number(getDate(raw, dateFieldConfig) ?? 0) : 0];\n      }\n\n      if (type === String) {\n        const str = raw ? String(raw) : '';\n\n        return [entry.slug, isMarkdownField ? removeMarkdownSyntax(str) : str];\n      }\n\n      return [entry.slug, Number(raw ?? 0)];\n    }),\n  );\n\n  _entries.sort((a, b) => {\n    const aKey = sortKeyMap[a.slug];\n    const bKey = sortKeyMap[b.slug];\n\n    if (dateFieldConfig || type !== String) {\n      return /** @type {number} */ (aKey) - /** @type {number} */ (bKey);\n    }\n\n    return compare(/** @type {string} */ (aKey), /** @type {string} */ (bKey));\n  });\n\n  if (order === 'descending') {\n    _entries.reverse();\n  }\n\n  const indexFileName = getIndexFile(collection)?.name;\n\n  // Index file should always be at the top\n  if (indexFileName) {\n    const index = _entries.findIndex((entry) => entry.slug === indexFileName);\n\n    if (index > -1) {\n      _entries.unshift(_entries.splice(index, 1)[0]);\n    }\n  }\n\n  return _entries;\n};\n","import equal from 'fast-deep-equal';\nimport { derived, get, writable } from 'svelte/store';\nimport { locale as appLocale } from 'svelte-i18n';\n\nimport { 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';\n\n/**\n * @import { Readable, Writable } from 'svelte/store';\n * @import { Entry, EntryListView, InternalEntryCollection } from '$lib/types/private';\n */\n\n/**\n * View settings for the selected entry collection.\n * @type {Writable<EntryListView>}\n */\nexport const currentView = writable({ type: 'list' });\n\n/**\n * List of all the entries for the selected entry collection.\n * @type {Readable<Entry[]>}\n */\nexport const listedEntries = derived(\n  [allEntries, selectedCollection],\n  ([_allEntries, _collection], set) => {\n    if (_allEntries && _collection) {\n      set(getEntriesByCollection(_collection.name));\n    } else {\n      set([]);\n    }\n  },\n);\n\n/**\n * 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<{ isEntryCollection: boolean; canCreate: boolean; canDelete: boolean; quota:\n * number; remaining: number; nearingQuota: boolean, creationDisabled: boolean }>}\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 quota = _selectedCollection?.limit ?? Infinity;\n      const remaining = quota < Infinity ? quota - _listedEntries.length : Infinity;\n\n      return {\n        isEntryCollection: true,\n        canCreate,\n        canDelete,\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      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 `appLocale`\n * 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` as a dependency because `sortEntries()` and `groupEntries()` may return\n  // localized labels\n  [listedEntries, currentView, appLocale],\n  ([_listedEntries, _currentView], set) => {\n    // Use reference equality: when only `appLocale` changes, `listedEntries` and `currentView`\n    // 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    set([]);\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      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    const groups = groupEntries(entries, collection, _currentView.group);\n\n    if (!equal(get(entryGroups), groups)) {\n      set(groups);\n    }\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 (get(prefs).devModeEnabled) {\n    // eslint-disable-next-line no-console\n    console.info('listedEntries', entries);\n  }\n});\n\nselectedCollection.subscribe((collection) => {\n  if (collection && get(prefs).devModeEnabled) {\n    // eslint-disable-next-line no-console\n    console.info('selectedCollection', collection);\n  }\n});\n","import { get } from 'svelte/store';\n\nimport { cmsConfig } from '$lib/services/config';\nimport { getIndexFile, isCollectionIndexFile } from '$lib/services/contents/collection/index-file';\nimport { entryDraft } from '$lib/services/contents/draft';\nimport { restoreBackupIfNeeded } from '$lib/services/contents/draft/backup';\nimport { createProxy } from '$lib/services/contents/draft/create/proxy';\nimport { getDefaultValues } from '$lib/services/contents/draft/defaults';\n\n/**\n * @import {\n * InternalCollection,\n * InternalCollectionFile,\n * InternalEntryCollection,\n * LocaleContentMap,\n * LocaleExpanderMap,\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 {any} args.originalEntry Entry to be edited, or a partial {@link Entry} object.\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, originalEntry }) => {\n  const { _type } = collection;\n\n  const {\n    identifier_field: identifierField = 'title',\n    slug: slugTemplate = `{{${identifierField}}}`,\n  } = _type === 'entry' ? collection : {};\n\n  const { id } = originalEntry;\n  const isNew = id === undefined;\n  const { _i18n } = collectionFile ?? collection;\n  const { allLocales, defaultLocale } = _i18n;\n  const canUseSlugEditor = _type === 'entry' && isNew;\n\n  const localizedSlugEditorEnabled =\n    canUseSlugEditor && slugTemplate.includes(LOCALIZED_SLUG_EDITOR_TAG);\n\n  const slugEditorEnabled =\n    canUseSlugEditor && (slugTemplate.includes(SLUG_EDITOR_TAG) || localizedSlugEditorEnabled);\n\n  return Object.fromEntries(\n    allLocales.map((locale) => [\n      locale,\n      slugEditorEnabled\n        ? locale === defaultLocale || localizedSlugEditorEnabled\n          ? true\n          : 'readonly'\n        : false,\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: canonicalSlugKey = 'translationKey' },\n  } = _i18n;\n\n  const enabledLocales = isNew\n    ? initialLocales\n    : allLocales.filter((locale) => !!locales?.[locale]?.content);\n\n  const originalLocales = Object.fromEntries(\n    allLocales.map((locale) => [locale, enabledLocales.includes(locale)]),\n  );\n\n  const originalSlugs = isNew\n    ? {}\n    : canonicalSlugKey in (locales?.[defaultLocale]?.content ?? {})\n      ? Object.fromEntries(allLocales.map((locale) => [locale, locales?.[locale]?.slug]))\n      : { _: locales?.[defaultLocale].slug };\n\n  /** @type {LocaleContentMap} */\n  const originalValues = Object.fromEntries(\n    enabledLocales.map((locale) =>\n      isNew\n        ? [locale, getDefaultValues({ fields, locale, 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    // Any locale-agnostic view states will be put under the `_` key\n    expanderStates: expanderStates ?? { _: {} },\n    slugEditor: getSlugEditorProp({ collection, collectionFile, originalEntry }),\n  });\n\n  restoreBackupIfNeeded({ collectionName, fileName, slug });\n};\n","import { get } from 'svelte/store';\n\nimport { entryDraft } from '$lib/services/contents/draft';\nimport { showDuplicateToast } from '$lib/services/contents/editor';\nimport { getField } from '$lib/services/contents/entry/fields';\nimport { getDefaultValueMap as getHiddenFieldDefaultValueMap } from '$lib/services/contents/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  Object.entries(currentValues).forEach(([locale, valueMap]) => {\n    // Remove the canonical slug\n    delete valueMap[canonicalSlugKey];\n\n    const getFieldArgs = { collectionName, fileName, valueMap, isIndexFile };\n\n    // Reset some unique values\n    Object.keys(valueMap).forEach((keyPath) => {\n      const fieldConfig = getField({ ...getFieldArgs, keyPath });\n\n      if (fieldConfig?.widget === 'uuid') {\n        if (locale === defaultLocale || [true, 'translate'].includes(fieldConfig?.i18n ?? false)) {\n          valueMap[keyPath] = getInitialUuidValue(/** @type {UuidField} */ (fieldConfig));\n        }\n      }\n\n      if (fieldConfig?.widget === 'hidden') {\n        // The value could be array; normalize the key path, e.g. `tags.0` -> `tags`\n        if (Array.isArray(fieldConfig.default) && keyPath.match(/\\.\\d+$/)) {\n          delete valueMap[keyPath];\n          keyPath = keyPath.replace(/\\.\\d+$/, '');\n\n          if (keyPath in valueMap) {\n            return;\n          }\n        }\n\n        if (locale === defaultLocale || [true, 'translate'].includes(fieldConfig?.i18n ?? false)) {\n          Object.assign(\n            valueMap,\n            getHiddenFieldDefaultValueMap({\n              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  });\n\n  showDuplicateToast.set(true);\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","import { escapeRegExp } from '@sveltia/utils/string';\nimport { get } from 'svelte/store';\n\nimport { entryDraft } from '$lib/services/contents/draft';\nimport { getField, isFieldMultiple, isFieldRequired } from '$lib/services/contents/entry/fields';\nimport { MEDIA_FIELD_TYPES, MIN_MAX_VALUE_FIELD_TYPES } from '$lib/services/contents/fields';\nimport { validateDateTimeField } from '$lib/services/contents/fields/date-time/validate';\nimport { getPairs } from '$lib/services/contents/fields/key-value/helper';\nimport { getListFieldInfo } from '$lib/services/contents/fields/list/helper';\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/misc';\n\n/**\n * @import { Writable } from 'svelte/store';\n * @import {\n * DraftValueStoreKey,\n * EntryDraft,\n * EntryValidityState,\n * FlattenedEntryContent,\n * GetFieldArgs,\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 * 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 * 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 * Cache of pre-compiled list key-path regexes for {@link validateAnyField}, keyed by field key\n * path.\n * @type {Map<FieldKeyPath, RegExp>}\n */\nconst listKeyPathRegexCache = new Map();\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 each field.\n * @internal\n * @param {ValidateFieldArgs} args Arguments.\n * @returns {EntryValidityState | undefined} Field validity.\n * @todo Refactor this function to reduce complexity and improve readability.\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    // Given that values for an array field are flatten into `field.0`, `field.1` ... `field.N`,\n    // we should validate only once against all these values\n    if (keyPath in validities[locale]) {\n      return undefined;\n    }\n\n    // Pre-compile and cache the regex — validateAnyField is called on every keystroke.\n    let keyPathRegex = listKeyPathRegexCache.get(keyPath);\n\n    if (!keyPathRegex) {\n      keyPathRegex = new RegExp(`^${escapeRegExp(keyPath)}\\\\.\\\\d+`);\n      listKeyPathRegexCache.set(keyPath, keyPathRegex);\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\n    // like `{ field: [], field.0: 'foo', field.1: 'bar' }` in some cases. Or it can be a simple\n    // list field like `{ field: ['foo', 'bar'] }` without the subfields.\n    const size =\n      Array.isArray(value) && !!value.length\n        ? value.length\n        : new Set(valueEntries.map(([key]) => key.match(keyPathRegex)?.[0]).filter(Boolean)).size;\n\n    if (required && !size) {\n      validity.valueMissing = true;\n    } else if (typeof min === 'number' && size < min) {\n      validity.rangeUnderflow = true;\n    } else if (typeof max === 'number' && size > max) {\n      validity.rangeOverflow = true;\n    }\n  }\n\n  if (fieldType === 'object') {\n    if (required && !value) {\n      validity.valueMissing = true;\n    }\n  }\n\n  if (fieldType === 'keyvalue') {\n    // Given that values for a KeyValue field are flatten into `field.key1`, `field.key2` ...\n    // `field.keyN`, we should validate only once against all these values. The key can be\n    // empty, so use `.*` in the regex instead of `.+`\n    const _keyPath = /** @type {string} */ (keyPath.match(/(.+?)(?:\\.[^.]*)?$/)?.[1]);\n\n    const parentFieldConfig = getField({\n      ...getFieldArgs,\n      keyPath: _keyPath.replace(COMPONENT_NAME_PREFIX_REGEX, ''), // Remove component name prefix\n    });\n\n    if (_keyPath in validities[locale] || parentFieldConfig?.widget !== 'keyvalue') {\n      return undefined;\n    }\n\n    keyPath = _keyPath;\n\n    const _entryDraft = /** @type {Writable<EntryDraft>} */ (entryDraft);\n    const pairs = getPairs({ entryDraft: _entryDraft, keyPath: _keyPath, locale });\n\n    if (required && !pairs.length) {\n      validity.valueMissing = true;\n    } else if (typeof min === 'number' && pairs.length < min) {\n      validity.rangeUnderflow = true;\n    } else if (typeof max === 'number' && pairs.length > max) {\n      validity.rangeOverflow = true;\n    }\n  }\n\n  if (fieldType === 'code') {\n    const {\n      output_code_only: outputCodeOnly = false,\n      keys: outputKeys = { code: 'code', lang: 'lang' },\n    } = /** @type {CodeField} */ (fieldConfig);\n\n    const _keyPath = keyPath.match(`(.+)\\\\.(?:${outputKeys.code}|${outputKeys.lang})$`)?.[1] ?? '';\n\n    if (_keyPath) {\n      keyPath = _keyPath;\n    }\n\n    if (keyPath in validities[locale]) {\n      return undefined;\n    }\n\n    if (!outputCodeOnly) {\n      value = valueMap[`${keyPath}.${outputKeys.code}`];\n    }\n  }\n\n  if (\n    MEDIA_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    if (typeof value === 'string') {\n      value = value.trim();\n    }\n\n    if (\n      required &&\n      (value === undefined || value === null || value === '' || (multiple && !value.length))\n    ) {\n      validity.valueMissing = true;\n    }\n\n    if (Array.isArray(validation)) {\n      const regex = getRegex(validation[0]);\n\n      if (regex && !regex.test(String(value))) {\n        validity.patternMismatch = true;\n      }\n    }\n  }\n\n  const validateField = VALIDATE_FIELD_FUNCTIONS[fieldType];\n\n  if (validateField) {\n    Object.assign(validity, validateField({ 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 {{ valid: boolean, validities: LocaleValidityMap }} Validation results.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/ValidityState\n */\nexport const validateFields = (valueStoreKey) => {\n  const draft = /** @type {EntryDraft} */ (get(entryDraft));\n  const { collectionName, fileName, isIndexFile, currentLocales } = draft;\n  /** @type {LocaleValidityMap} */\n  const validities = {};\n  /** @type {GetFieldArgs} */\n  const getFieldArgs = { collectionName, fileName, isIndexFile, keyPath: '', valueMap: {} };\n  let valid = true;\n\n  Object.entries(draft[valueStoreKey]).forEach(([locale, valueMap]) => {\n    const valueEntries = Object.entries(valueMap);\n\n    // If the locale is disabled, skip the validation and mark all fields valid\n    if (!currentLocales[locale]) {\n      validities[locale] = Object.fromEntries(\n        valueEntries.map(([keyPath]) => [keyPath, { valid: true }]),\n      );\n\n      return;\n    }\n\n    const validateArgs = { draft, locale, valueMap, validities };\n\n    // Reset the state first\n    validities[locale] = {};\n\n    valueEntries.forEach(([keyPath, value]) => {\n      const [prefix] = keyPath.match(COMPONENT_NAME_PREFIX_REGEX) ?? [];\n      const componentName = prefix ? valueMap[`${prefix}__sc_component_name`] : undefined;\n\n      const fieldConfig = getField({\n        ...getFieldArgs,\n        keyPath: keyPath.replace(COMPONENT_NAME_PREFIX_REGEX, ''), // Remove component name prefix\n        valueMap,\n        componentName,\n      });\n\n      if (!fieldConfig) {\n        return;\n      }\n\n      // Validate a list itself before the items\n      if (LIST_KEY_PATH_REGEX.test(keyPath)) {\n        const { valid: listValid, validateItems } = validateList({\n          fieldConfig,\n          validateArgs: {\n            ...validateArgs,\n            keyPath: keyPath.replace(LIST_KEY_PATH_REGEX, ''),\n            value: '',\n            componentName,\n          },\n        });\n\n        if (!listValid) {\n          valid = false;\n        }\n\n        if (!validateItems) {\n          return;\n        }\n      }\n\n      if (!validateField({ ...validateArgs, keyPath, value, componentName })) {\n        valid = false;\n      }\n    });\n  });\n\n  return { valid, validities };\n};\n\n/**\n * Validate the slugs and return the results. At this time, we only check if the slug is empty\n * when the slug editor is shown. A pattern check can be added later if needed.\n * @internal\n * @returns {{ valid: boolean, validities: LocaleValidityMap }} Validation results.\n */\nexport const validateSlugs = () => {\n  const { 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    const valueMissing = !!slugEditor[locale] && !slug?.trim();\n\n    if (valueMissing) {\n      valid = false;\n    }\n\n    validities[locale] = { _slug: { valueMissing, valid: !valueMissing } };\n  });\n\n  return { valid, validities };\n};\n\n/**\n * Validate the field values, update the validity for all the fields, and return the final results\n * as a boolean.\n * @returns {boolean} Whether the entry draft is valid.\n */\nexport const validateEntry = () => {\n  const { valid: currentValuesValid, validities: currentValuesValidities } =\n    validateFields('currentValues');\n\n  const { valid: extraValuesValid, validities: extraValuesValidities } =\n    validateFields('extraValues');\n\n  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  }));\n\n  return currentValuesValid && extraValuesValid && slugsValid;\n};\n","import { get } from 'svelte/store';\n\nimport { backend, isLastCommitPublished } from '$lib/services/backends';\nimport { 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 { 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';\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(backend)?.isGit && !(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 * Save the entry draft.\n * @param {object} [options] Options.\n * @param {boolean} [options.skipCI] Whether to disable automatic deployments for the change.\n * @returns {Promise<Entry>} Saved entry.\n * @throws {Error} When the entry could not be validated or saved.\n */\nexport const saveEntry = async ({ skipCI = undefined } = {}) => {\n  const draft = /** @type {EntryDraft} */ (get(entryDraft));\n  const { collection, isNew, collectionName, fileName, currentValues } = draft;\n\n  if (!validateEntry()) {\n    expandInvalidFields({ collectionName, fileName, currentValues });\n\n    throw new Error('validation_failed');\n  }\n\n  const slugs = getSlugs({ draft });\n  const { defaultLocaleSlug } = slugs;\n  const { savingEntry, changes, savingAssets } = await createSavingEntryData({ draft, slugs });\n  /** @type {ChangeResults} */\n  let results;\n\n  try {\n    results = await saveChanges({\n      changes,\n      savingEntries: [savingEntry],\n      savingAssets,\n      options: {\n        commitType: isNew ? 'create' : 'update',\n        collection,\n        skipCI,\n      },\n    });\n  } catch (/** @type {any} */ ex) {\n    // eslint-disable-next-line no-console\n    console.error(ex.cause ?? ex);\n\n    throw new Error('saving_failed', { cause: ex.cause ?? ex });\n  }\n\n  await callEventHooks({ type: 'postSave', draft, savingEntry });\n\n  updateStores({ skipCI });\n  deleteBackup(collectionName, isNew ? '' : defaultLocaleSlug);\n\n  return results.savedEntries[0];\n};\n","<script>\n  import {\n    Alert,\n    AlertDialog,\n    Button,\n    ConfirmationDialog,\n    Divider,\n    Menu,\n    MenuButton,\n    MenuItem,\n    MenuItemCheckbox,\n    SplitButton,\n    Toast,\n    Toolbar,\n    TruncatedText,\n  } from '@sveltia/ui';\n  import { _, locale as appLocale } from 'svelte-i18n';\n\n  import BackButton from '$lib/components/common/page-toolbar/back-button.svelte';\n  import EditSlugDialog from '$lib/components/contents/details/edit-slug-dialog.svelte';\n  import { goBack, goto } from '$lib/services/app/navigation';\n  import { getAssetFolder } from '$lib/services/assets/folders';\n  import { 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 { isMediumScreen, isSmallScreen } from '$lib/services/user/env';\n  import { prefs } from '$lib/services/user/prefs';\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} [disabled] Whether to disable controls other than the Back button.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    disabled = false,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  let showValidationToast = $state(false);\n  let showEditSlugDialog = $state(false);\n  let showDeleteDialog = $state(false);\n  let showErrorDialog = $state(false);\n  let errorMessage = $state('');\n  let saving = $state(false);\n  /** @type {MenuButton | undefined} */\n  let menuButton = $state();\n\n  const 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` is a key, because `getCollectionLabel` can return a localized label\n    $appLocale && collection ? getCollectionLabel(collection) : '',\n  );\n  const collectionLabelSingular = $derived(\n    // `$appLocale` is a key, because `getCollectionLabel` can return a localized label\n    $appLocale && collection ? getCollectionLabel(collection, { useSingular: true }) : '',\n  );\n  const canPreview = $derived($entryDraft?.canPreview ?? true);\n  const modified = $derived(isNew || $entryDraftModified);\n  const errorCount = $derived(\n    Object.values($entryDraft?.validities ?? {})\n      .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 = $isSmallScreen ? MenuItem : Button}\n  <Component\n    variant=\"ghost\"\n    label={$_('duplicate')}\n    aria-label={$_('duplicate_entry')}\n    disabled={isIndexFile ||\n      // @todo Enable duplication for Hugo’s page bundles = the `path` option. We need to duplicate\n      // assets along with the entry. @see https://github.com/sveltia/sveltia-cms/issues/526\n      !!entryCollection?.path ||\n      $collectionState.creationDisabled}\n    onclick={() => {\n      goto(`/collections/${collectionName}/new`, {\n        replaceState: true,\n        notifyChange: false,\n        transitionType: 'forwards',\n      });\n      duplicateDraft();\n    }}\n  />\n  <Component\n    variant=\"ghost\"\n    label={$_('delete')}\n    aria-label={$_('delete_entry')}\n    disabled={entryCollection?.delete === false}\n    onclick={() => {\n      showDeleteDialog = true;\n    }}\n  />\n{/snippet}\n\n<Toolbar variant=\"primary\" aria-label={$_('primary')}>\n  <BackButton\n    aria-label={$_('cancel_editing')}\n    useShortcut={$prefs.closeWithEscape}\n    onclick={() => {\n      _goBack();\n    }}\n  />\n  <h2 role=\"none\">\n    {#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\n              ? getEntrySummary(collection, originalEntry)\n              : ''}\n          {#if $isSmallScreen}\n            {entrySummary}\n          {:else}\n            {$_('edit_entry_title', {\n              values: { collection: collectionLabel, entry: entrySummary },\n            })}\n          {/if}\n        {/if}\n      </TruncatedText>\n    {/if}\n  </h2>\n  {#if !disabled && previewURL}\n    <Button\n      variant=\"tertiary\"\n      label={$_('view_on_live_site')}\n      onclick={() => {\n        window.open(previewURL);\n      }}\n    />\n  {/if}\n  {#if !$isSmallScreen && !disabled && !collectionFile && !isNew}\n    {@render overflowButtons()}\n  {/if}\n  <MenuButton\n    {disabled}\n    variant=\"ghost\"\n    iconic\n    popupPosition=\"bottom-right\"\n    aria-label={$_('show_editor_options')}\n    bind:this={menuButton}\n  >\n    {#snippet popup()}\n      <Menu aria-label={$_('editor_options')}>\n        {#if $isSmallScreen && !disabled && !collectionFile && !isNew}\n          {@render overflowButtons()}\n        {/if}\n        <MenuItem\n          label={$_('edit_slug')}\n          disabled={!!collectionFile || isNew || isIndexFile || 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 !($isSmallScreen || $isMediumScreen)}\n          <Divider />\n          <MenuItemCheckbox\n            label={$_('show_preview')}\n            checked={$entryEditorSettings?.showPreview}\n            disabled={!canPreview}\n            onChange={() => {\n              entryEditorSettings.update((view = {}) => ({\n                ...view,\n                showPreview: !view.showPreview,\n              }));\n            }}\n          />\n          <MenuItemCheckbox\n            label={$_('sync_scrolling')}\n            checked={$entryEditorSettings?.syncScrolling}\n            disabled={!canPreview && Object.keys($entryDraft?.currentValues ?? {}).length === 1}\n            onChange={() => {\n              entryEditorSettings.update((view = {}) => ({\n                ...view,\n                syncScrolling: !view.syncScrolling,\n              }));\n            }}\n          />\n        {/if}\n      </Menu>\n    {/snippet}\n  </MenuButton>\n  {#if $skipCIConfigured}\n    <SplitButton\n      variant=\"primary\"\n      label={$_(saving ? 'saving' : 'save')}\n      disabled={disabled || !modified || saving}\n      keyShortcuts=\"Accel+S\"\n      onclick={() => {\n        save();\n      }}\n    >\n      {#snippet popup()}\n        <!-- Show the opposite option: if automatic deployments are enabled, allow to disable it -->\n        <Menu>\n          <MenuItem\n            label={$_($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    {$_(errorCount === 1 ? 'entry_validation_error' : 'entry_validation_errors', {\n      values: { count: errorCount },\n    })}\n  </Alert>\n</Toast>\n\n<Toast id={$copyFromLocaleToast.id} bind:show={$copyFromLocaleToast.show}>\n  {@const { status, message, count, 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 lang=\"scss\">\n  .error {\n    margin-top: 8px;\n    border-radius: var(--sui-control-medium-border-radius);\n    padding: 12px;\n    background-color: var(--sui-secondary-background-color);\n    font-size: var(--sui-font-size-default);\n    line-height: 1.5;\n  }\n</style>\n","<script>\n  import {\n    Alert,\n    Button,\n    EmptyState,\n    Group,\n    ResizableHandle,\n    ResizablePane,\n    ResizablePaneGroup,\n    Toast,\n  } from '@sveltia/ui';\n  import { onMount, tick, untrack } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import BackupFeedback from '$lib/components/contents/details/backup-feedback.svelte';\n  import PaneBody from '$lib/components/contents/details/pane-body.svelte';\n  import PaneHeader from '$lib/components/contents/details/pane-header.svelte';\n  import Toolbar from '$lib/components/contents/details/toolbar.svelte';\n  import { goto } from '$lib/services/app/navigation';\n  import { collectionState } from '$lib/services/contents/collection/view';\n  import { entryDraft } 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 { entryEditorSettings } from '$lib/services/contents/editor/settings';\n  import { getLocaleLabel } from '$lib/services/contents/i18n';\n  import { DEFAULT_I18N_CONFIG } from '$lib/services/contents/i18n/config';\n  import { isMediumScreen, isSmallScreen } from '$lib/services/user/env';\n\n  /**\n   * @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\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 isNew = $derived($entryDraft?.isNew ?? true);\n  const collection = $derived($entryDraft?.collection);\n  const collectionFile = $derived($entryDraft?.collectionFile);\n  const { showPreview } = $derived($entryEditorSettings ?? {});\n  const { i18nEnabled, allLocales, defaultLocale } = $derived(\n    (collectionFile ?? collection)?._i18n ?? DEFAULT_I18N_CONFIG,\n  );\n  const canPreview = $derived($entryDraft?.canPreview ?? true);\n  const paneStateKey = $derived(\n    collectionFile?.name ? [collection?.name, collectionFile.name].join('|') : collection?.name,\n  );\n  const { canCreate, 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 = $isSmallScreen || $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 ($isSmallScreen || $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   * Move focus to the wrapper once the overlay is loaded.\n   */\n  const moveFocus = async () => {\n    // Wait until `inert` is updated\n    await tick();\n\n    if (wrapper) {\n      wrapper.tabIndex = 0;\n      wrapper.focus();\n    }\n  };\n\n  onMount(() => () => {\n    if (!$showContentOverlay) {\n      $entryDraft = null;\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 [showPreview, canPreview, $isSmallScreen, $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        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      {#key collection}\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              <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        {/if}\n      {/key}\n    {/if}\n  {/key}\n</div>\n\n<BackupFeedback />\n\n<Toast bind:show={$showDuplicateToast}>\n  <Alert status=\"success\">\n    {$_('entry_duplicated')}\n  </Alert>\n</Toast>\n\n<style lang=\"scss\">\n  .wrapper {\n    position: fixed;\n    inset: 0;\n    z-index: 100;\n    display: flex;\n    flex-direction: column;\n    background-color: var(--sui-secondary-background-color);\n\n    :global {\n      .sui.resizable-pane-group {\n        background-color: var(--sui-secondary-background-color); // same as toolbar\n      }\n\n      .sui.resizable-pane {\n        background-color: var(--sui-primary-background-color);\n      }\n    }\n  }\n\n  .pane-wrapper {\n    display: contents;\n\n    :global {\n      & > .group {\n        height: 100%;\n        overflow: hidden;\n        display: flex;\n        flex-direction: column;\n      }\n    }\n  }\n</style>\n","<script>\n  import { Checkbox, GridCell, GridRow, Icon, TruncatedText } from '@sveltia/ui';\n  import { locale as appLocale } from 'svelte-i18n';\n\n  import Image from '$lib/components/assets/shared/image.svelte';\n  import { goto } from '$lib/services/app/navigation';\n  import { selectedEntries } from '$lib/services/contents/collection/entries';\n  import {\n    getIndexFile,\n    isCollectionIndexFile,\n  } from '$lib/services/contents/collection/index-file';\n  import { listedEntries } from '$lib/services/contents/collection/view';\n  import { getEntryThumbnail } from '$lib/services/contents/entry/assets';\n  import { getEntrySummary } from '$lib/services/contents/entry/summary';\n  import { isMediumScreen, isSmallScreen } from '$lib/services/user/env';\n\n  /**\n   * @import { Entry, 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  {#if !($isSmallScreen || $isMediumScreen)}\n    <GridCell class=\"checkbox\">\n      <Checkbox\n        role=\"none\"\n        tabindex=\"-1\"\n        checked={$selectedEntries.includes(entry)}\n        onChange={({ detail: { checked } }) => {\n          updateSelection(checked);\n        }}\n      />\n    </GridCell>\n  {/if}\n  {#if collection._thumbnailFieldNames.length}\n    <GridCell class=\"image\">\n      {#await getEntryThumbnail(collection, entry) then src}\n        {#if src}\n          <Image {src} variant={viewType === 'list' ? 'icon' : 'tile'} cover />\n        {/if}\n      {/await}\n    </GridCell>\n  {/if}\n  <GridCell class=\"title\">\n    <div role=\"none\" class=\"label\">\n      <TruncatedText lines={2}>\n        {#key $appLocale}\n          {@html getEntrySummary(collection, entry, { useTemplate: true, allowMarkdown: true })}\n        {/key}\n        {#if isCollectionIndexFile(collection, entry)}\n          <Icon name={getIndexFile(collection)?.icon} class=\"home\" />\n        {/if}\n      </TruncatedText>\n    </div>\n  </GridCell>\n</GridRow>\n\n<style lang=\"scss\">\n  .label {\n    :global {\n      .icon.home {\n        opacity: 0.5;\n        font-size: 20px;\n        vertical-align: -4px;\n      }\n    }\n  }\n</style>\n","<script>\n  import { Button, Icon, Menu, MenuItem, SplitButton } from '@sveltia/ui';\n  import { _, locale as appLocale } from 'svelte-i18n';\n\n  import { goto } from '$lib/services/app/navigation';\n  import { allEntries } from '$lib/services/contents';\n  import { selectedCollection } from '$lib/services/contents/collection';\n  import { canCreateIndexFile, getIndexFile } from '$lib/services/contents/collection/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` is a key, because `getIndexFile` can return a localized label\n    $appLocale && $selectedCollection ? getIndexFile($selectedCollection)?.label : '',\n  );\n  const ButtonComponent = $derived(hasOptions ? SplitButton : Button);\n\n  /**\n   * Open the content editor.\n   * @param {boolean} [index] Whether to create the index file instead of a regular entry.\n   */\n  const openEditor = (index = false) => {\n    goto(`/collections/${collectionName}/new`, { state: { index }, transitionType: 'forwards' });\n  };\n</script>\n\n<ButtonComponent\n  variant=\"primary\"\n  iconic={!label}\n  disabled={$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 { EmptyState, GridBody, InfiniteScroll } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import { _ } from 'svelte-i18n';\n\n  import ListContainer from '$lib/components/common/list-container.svelte';\n  import ListingGrid from '$lib/components/common/listing-grid.svelte';\n  import EntryListItem from '$lib/components/contents/list/entry-list-item.svelte';\n  import CreateEntryButton from '$lib/components/contents/toolbar/create-entry-button.svelte';\n  import { selectedCollection } from '$lib/services/contents/collection';\n  import { currentView, entryGroups, listedEntries } from '$lib/services/contents/collection/view';\n\n  /**\n   * @import { Entry, InternalEntryCollection } from '$lib/types/private';\n   */\n\n  const collection = $derived(\n    /** @type {InternalEntryCollection | undefined} */ ($selectedCollection),\n  );\n  const viewType = $derived($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        {#each $entryGroups as { name, entries } (name)}\n          {#await sleep() then}\n            <!-- @todo Implement custom table column option that can replace summary template -->\n            <GridBody label={name !== '*' ? name : undefined}>\n              <InfiniteScroll\n                items={entries.filter(\n                  ({ locales }) => !!(locales[defaultLocale] ?? Object.values(locales)[0])?.content,\n                )}\n                itemKey=\"id\"\n              >\n                {#snippet renderItem(/** @type {Entry} */ entry)}\n                  {#await sleep() then}\n                    <EntryListItem {collection} {entry} {viewType} />\n                  {/await}\n                {/snippet}\n              </InfiniteScroll>\n            </GridBody>\n          {/await}\n        {/each}\n      </ListingGrid>\n    {:else if $listedEntries.length}\n      <EmptyState>\n        <span role=\"none\">{$_('no_entries_found')}</span>\n      </EmptyState>\n    {:else}\n      <EmptyState>\n        <span role=\"none\">{$_('no_entries_created')}</span>\n        <CreateEntryButton collectionName={collection.name} label={$_('create_new_entry')} />\n      </EmptyState>\n    {/if}\n  {:else}\n    <EmptyState>\n      <span role=\"none\">{$_('collection_not_found')}</span>\n    </EmptyState>\n  {/if}\n</ListContainer>\n","<script>\n  import { EmptyState, GridCell, GridRow, Icon, InfiniteScroll, TruncatedText } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import { _ } from 'svelte-i18n';\n\n  import ListContainer from '$lib/components/common/list-container.svelte';\n  import ListingGrid from '$lib/components/common/listing-grid.svelte';\n  import { goto } from '$lib/services/app/navigation';\n  import { selectedCollection } from '$lib/services/contents/collection';\n  import { isValidCollectionFile } from '$lib/services/contents/collection/files';\n\n  /**\n   * @import { CollectionFile } from '$lib/types/public';\n   * @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 lang=\"scss\">\n  .label {\n    display: flex;\n    align-items: center;\n    gap: 16px;\n\n    :global(.icon) {\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      border-radius: var(--sui-control-medium-border-radius);\n      width: var(--icon-size);\n      height: var(--icon-size);\n      background-color: var(--sui-secondary-background-color);\n    }\n  }\n</style>\n","<script>\n  import { Icon, Option } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { announcedPageStatus, goto } from '$lib/services/app/navigation';\n\n  /**\n   * @import { CollectionFile } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {CollectionFile} file The singleton file to display.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    file,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  const { name, label, icon } = $derived(file);\n\n  /** @type {boolean} */\n  let selected = $state(false);\n  /** @type {HTMLElement | undefined} */\n  let wrapper = $state();\n</script>\n\n<div class=\"wrapper\" bind:this={wrapper}>\n  <Option\n    bind:selected\n    label={label || name}\n    onSelect={() => {\n      // Announce the selected singleton file. The Content Editor will not open until\n      // the user presses Enter.\n      $announcedPageStatus = $_('singleton_selected_announcement', {\n        values: { file: label || name },\n      });\n    }}\n    onclick={() => {\n      goto(`/collections/_singletons/entries/${name}`, { transitionType: 'forwards' });\n      // Reset the selected state and remove the focused class from the option\n      // @todo Handle this in Sveltia UI\n      selected = false;\n      wrapper?.querySelector('[role=\"option\"]')?.classList.remove('focused');\n    }}\n  >\n    {#snippet startIcon()}\n      <Icon name={icon || 'edit_document'} />\n    {/snippet}\n  </Option>\n</div>\n\n<style lang=\"scss\">\n  .wrapper {\n    display: contents;\n  }\n</style>\n","<script>\n  import { Alert, Button, Toast } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { backend, isLastCommitPublished } from '$lib/services/backends';\n  import { skipCIConfigured } from '$lib/services/backends/git/shared/integration';\n  import { isSmallScreen } from '$lib/services/user/env';\n  import { prefs } from '$lib/services/user/prefs';\n\n  const { deployHookURL, deployHookAuthHeader } = $derived($prefs);\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      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={$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 { Divider, Icon, Listbox, Option, OptionGroup } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import { _, locale as appLocale } from 'svelte-i18n';\n\n  import SingletonOption from '$lib/components/contents/list/singleton-option.svelte';\n  import 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 { isSmallScreen } from '$lib/services/user/env';\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 ?? undefined));\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 $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={$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\n                      class=\"count\"\n                      aria-label=\"({$_(\n                        count > 1 ? 'many_entries' : count === 1 ? 'one_entry' : 'no_entries',\n                        { values: { count } },\n                      )})\"\n                    >\n                      {numberFormatter.format(count)}\n                    </span>\n                  {/key}\n                {/snippet}\n              </Option>\n            {:else if collection.divider}\n              <Divider />\n            {/if}\n          {/await}\n        {/each}\n      </OptionGroup>\n    {/if}\n    {#if singletons.length}\n      {#if $isSmallScreen || collections.length}\n        <!-- Use the user-friendly “Files” label instead of “Singletons” -->\n        <OptionGroup label={$_('files')}>\n          {#each singletons as file, index (file.name ?? index)}\n            {#await sleep() then}\n              {#if !('divider' in file)}\n                <SingletonOption {file} />\n              {:else if file.divider}\n                <Divider />\n              {/if}\n            {/await}\n          {/each}\n        </OptionGroup>\n      {:else}\n        <!-- Show the singletons just like a file collection -->\n        {@const count = singletons.length}\n        <OptionGroup label={$_('collections')}>\n          <Option\n            label={$_('files')}\n            selected={$selectedCollection?.name === '_singletons'}\n            onSelect={() => {\n              goto('/collections/_singletons', { transitionType: 'forwards' });\n            }}\n          >\n            {#snippet startIcon()}\n              <Icon name=\"bookmark_manager\" />\n            {/snippet}\n            {#snippet endIcon()}\n              <span\n                class=\"count\"\n                aria-label=\"({$_(\n                  count > 1 ? 'many_entries' : count === 1 ? 'one_entry' : 'no_entries',\n                  { values: { count } },\n                )})\"\n              >\n                {numberFormatter.format(count)}\n              </span>\n            {/snippet}\n          </Option>\n        </OptionGroup>\n      {/if}\n    {/if}\n  </Listbox>\n</div>\n","<script>\n  import { ConfirmationDialog } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { getAssetFolder } from '$lib/services/assets/folders';\n  import { selectedCollection } from '$lib/services/contents/collection';\n  import { deleteEntries } from '$lib/services/contents/collection/data/delete';\n  import { selectedEntries } from '$lib/services/contents/collection/entries';\n  import { listedEntries } from '$lib/services/contents/collection/view';\n  import { getAssociatedAssets } from '$lib/services/contents/entry/assets';\n\n  /**\n   * @typedef {object} Props\n   * @property {boolean} [open] Whether the dialog is open.\n   */\n\n  /** @type {Props} */\n  let { 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={$selectedEntries.length === 1 ? $_('delete_entry') : $_('delete_entries')}\n  okLabel={$_('delete')}\n  onOk={() => {\n    deleteEntries($selectedEntries, associatedAssets);\n  }}\n>\n  {#if $selectedEntries.length === 1}\n    {$_(\n      associatedAssets.length\n        ? 'confirm_deleting_selected_entry_with_assets'\n        : 'confirm_deleting_selected_entry',\n    )}\n  {:else if $selectedEntries.length === $listedEntries.length}\n    {$_(\n      associatedAssets.length\n        ? 'confirm_deleting_all_entries_with_assets'\n        : 'confirm_deleting_all_entries',\n    )}\n  {:else}\n    {$_(\n      associatedAssets.length\n        ? 'confirm_deleting_selected_entries_with_assets'\n        : 'confirm_deleting_selected_entries',\n      { values: { count: $selectedEntries.length } },\n    )}\n  {/if}\n</ConfirmationDialog>\n","<script>\n  import {\n    Button,\n    FloatingActionButtonWrapper,\n    Infobar,\n    Spacer,\n    Toolbar,\n    TruncatedText,\n  } from '@sveltia/ui';\n  import { sanitize } from 'isomorphic-dompurify';\n  import { marked } from 'marked';\n  import { _, locale as appLocale } from 'svelte-i18n';\n\n  import BackButton from '$lib/components/common/page-toolbar/back-button.svelte';\n  import DeleteEntriesDialog from '$lib/components/contents/shared/delete-entries-dialog.svelte';\n  import CreateEntryButton from '$lib/components/contents/toolbar/create-entry-button.svelte';\n  import { goBack } from '$lib/services/app/navigation';\n  import { getCollectionLabel, selectedCollection } from '$lib/services/contents/collection';\n  import { selectedEntries } from '$lib/services/contents/collection/entries';\n  import { collectionState, listedEntries } from '$lib/services/contents/collection/view';\n  import { isSmallScreen } from '$lib/services/user/env';\n\n  let showDeleteDialog = $state(false);\n\n  /**\n   * Parse the given string as Markdown and sanitize the result to only allow certain tags.\n   * @param {string} str Original string.\n   * @returns {string} Sanitized string.\n   */\n  const _sanitize = (str) =>\n    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` is a key, because `getCollectionLabel` can return a localized label\n    $appLocale && $selectedCollection ? getCollectionLabel($selectedCollection) : name,\n  );\n  const {\n    isEntryCollection,\n    canCreate,\n    canDelete,\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 $isSmallScreen}\n      <BackButton\n        aria-label={$_('back_to_collection_list')}\n        onclick={() => {\n          goBack('/collections');\n        }}\n      />\n    {/if}\n    <h2 role=\"none\">{collectionLabel}</h2>\n    {#if $isSmallScreen}\n      <Spacer flex />\n    {:else}\n      <div role=\"none\" class=\"description\">\n        <TruncatedText>\n          {@html _sanitize(description || '')}\n        </TruncatedText>\n      </div>\n    {/if}\n    {#if isEntryCollection}\n      {#if !$isSmallScreen}\n        <Button\n          variant=\"ghost\"\n          label={$_('delete')}\n          aria-label={$selectedEntries.length === 1\n            ? $_('delete_selected_entry')\n            : $_('delete_selected_entries')}\n          disabled={!$selectedEntries.length || !canDelete}\n          onclick={() => {\n            showDeleteDialog = true;\n          }}\n        />\n      {/if}\n      <FloatingActionButtonWrapper>\n        {#if !$isSmallScreen || ($listedEntries.length && !creationDisabled)}\n          <CreateEntryButton\n            collectionName={name}\n            label={$isSmallScreen ? undefined : $_('create')}\n            keyShortcuts=\"Accel+E\"\n          />\n        {/if}\n      </FloatingActionButtonWrapper>\n    {/if}\n  </Toolbar>\n  {#if isEntryCollection && (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_${remaining === 1 ? 'singular' : 'plural'}`, {\n          values: { quota, remaining },\n        })}\n      {/if}\n    </Infobar>\n  {/if}\n{/if}\n\n<DeleteEntriesDialog bind:open={showDeleteDialog} />\n\n<style lang=\"scss\">\n  h2 {\n    flex: none !important;\n  }\n\n  .description {\n    flex: auto;\n    font-size: var(--sui-font-size-small);\n    opacity: 0.8;\n  }\n</style>\n","<script>\n  import { Group } from '@sveltia/ui';\n  import equal from 'fast-deep-equal';\n  import { _ } from 'svelte-i18n';\n\n  import AssetsPanel from '$lib/components/assets/browser/assets-panel.svelte';\n  import DropZone from '$lib/components/assets/shared/drop-zone.svelte';\n  import { goto } from '$lib/services/app/navigation';\n  import { allAssets, uploadingAssets } from '$lib/services/assets';\n  import { getAssetFolder } from '$lib/services/assets/folders';\n  import { selectedCollection } from '$lib/services/contents/collection';\n  import { currentView } from '$lib/services/contents/collection/view';\n  import { isLargeScreen } from '$lib/services/user/env';\n\n  const folder = $derived(getAssetFolder({ collectionName: $selectedCollection?.name }));\n  const { internalPath, entryRelative, hasTemplateTags } = $derived(\n    folder ?? { internalPath: undefined, entryRelative: false, hasTemplateTags: false },\n  );\n  // Can’t upload assets if collection assets are saved at entry-relative paths\n  const uploadDisabled = $derived(entryRelative || hasTemplateTags);\n</script>\n\n{#if internalPath !== undefined && $isLargeScreen && $currentView.showMedia}\n  <Group id=\"collection-assets\" class=\"secondary-sidebar\" aria-label={$_('collection_assets')}>\n    <DropZone\n      disabled={uploadDisabled}\n      multiple={true}\n      onDrop={({ files }) => {\n        $uploadingAssets = { folder, files };\n      }}\n    >\n      <AssetsPanel\n        assets={$allAssets.filter((asset) => equal(asset.folder, folder))}\n        onSelect={({ asset }) => {\n          goto(`/assets/${asset.path}`, { transitionType: 'forwards' });\n        }}\n      />\n    </DropZone>\n  </Group>\n{/if}\n","<script>\n  import { Menu, MenuButton, MenuItemRadio } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  /**\n   * @import { Writable } from 'svelte/store';\n   * @import { AssetListView, EntryListView } from '$lib/types/private';\n   * @import { ViewGroup } from '$lib/types/public';\n   */\n\n  /**\n   * @typedef {object} Props\n   * @property {Writable<EntryListView | AssetListView>} currentView Current view details.\n   * @property {string} aria-controls The `aria-controls` attribute for the menu.\n   * @property {string} [label] Menu button label.\n   * @property {boolean} [disabled] Whether to disable the button.\n   * @property {string} [noneLabel] Label to be displayed on the None item.\n   * @property {ViewGroup[]} [groups] Group conditions.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    currentView,\n    'aria-controls': ariaControls,\n    label = '',\n    disabled = false,\n    noneLabel = '',\n    groups = [],\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n<MenuButton variant=\"ghost\" label={label || $_('group')} {disabled} popupPosition=\"bottom-right\">\n  {#snippet popup()}\n    <Menu aria-label={$_('grouping_options')} aria-controls={ariaControls}>\n      <MenuItemRadio\n        label={noneLabel || $_('sort_keys.none')}\n        checked={!$currentView.group}\n        onSelect={() => {\n          currentView.update((view) => ({\n            ...view,\n            group: null,\n          }));\n        }}\n      />\n      {#each groups as group (JSON.stringify(group))}\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 { Button, Divider, Icon, Spacer, Toolbar } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import FilterMenu from '$lib/components/common/page-toolbar/filter-menu.svelte';\n  import GroupMenu from '$lib/components/common/page-toolbar/group-menu.svelte';\n  import ItemSelector from '$lib/components/common/page-toolbar/item-selector.svelte';\n  import SortMenu from '$lib/components/common/page-toolbar/sort-menu.svelte';\n  import ViewSwitcher from '$lib/components/common/page-toolbar/view-switcher.svelte';\n  import { getAssetFolder } from '$lib/services/assets/folders';\n  import { selectedCollection } from '$lib/services/contents/collection';\n  import { selectedEntries } from '$lib/services/contents/collection/entries';\n  import { currentView, entryGroups, listedEntries } from '$lib/services/contents/collection/view';\n  import { viewFilters } from '$lib/services/contents/collection/view/filter';\n  import { viewGroups } from '$lib/services/contents/collection/view/group';\n  import { sortKeys } from '$lib/services/contents/collection/view/sort-keys';\n  import { isMediumScreen, isSmallScreen } from '$lib/services/user/env';\n\n  /**\n   * @import { 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}\n  <Toolbar variant=\"secondary\" aria-label={$_('entry_list')}>\n    {#if !($isSmallScreen || $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 !($isSmallScreen || $isMediumScreen)}\n      <Divider orientation=\"vertical\" />\n      <Button\n        variant=\"ghost\"\n        iconic\n        disabled={!hasListedEntries || !getAssetFolder({ collectionName })}\n        pressed={!!$currentView.showMedia}\n        aria-controls=\"collection-assets\"\n        aria-expanded={$currentView.showMedia}\n        aria-label={$_($currentView.showMedia ? 'hide_assets' : 'show_assets')}\n        onclick={() => {\n          currentView.update((view) => ({\n            ...view,\n            showMedia: !$currentView.showMedia,\n          }));\n        }}\n      >\n        {#snippet startIcon()}\n          <Icon name=\"photo_library\" />\n        {/snippet}\n      </Button>\n    {/if}\n  </Toolbar>\n{/if}\n","<script>\n  import { Alert, Toast } from '@sveltia/ui';\n  import { onMount } from 'svelte';\n  import { _, locale as appLocale } from 'svelte-i18n';\n\n  import PageContainerMainArea from '$lib/components/common/page-container-main-area.svelte';\n  import PageContainer from '$lib/components/common/page-container.svelte';\n  import ContentDetailsOverlay from '$lib/components/contents/details/content-details-overlay.svelte';\n  import EntryList from '$lib/components/contents/list/entry-list.svelte';\n  import FileList from '$lib/components/contents/list/file-list.svelte';\n  import PrimarySidebar from '$lib/components/contents/list/primary-sidebar.svelte';\n  import PrimaryToolbar from '$lib/components/contents/list/primary-toolbar.svelte';\n  import SecondarySidebar from '$lib/components/contents/list/secondary-sidebar.svelte';\n  import SecondaryToolbar from '$lib/components/contents/list/secondary-toolbar.svelte';\n  import 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 { isSmallScreen } from '$lib/services/user/env';\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      // 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 ($isSmallScreen) {\n        // Show the collection list only\n        $selectedCollection = undefined;\n        $announcedPageStatus = $_('viewing_collection_list');\n        isIndexPage = true;\n      } else {\n        // Redirect to the selected, first or singleton collection\n        const collection = $selectedCollection || getFirstCollection() || getSingletonCollection();\n\n        goto(`/collections/${collection?.name}`, { replaceState: true });\n      }\n\n      return;\n    }\n\n    /** @type {InternalCollection | undefined} */\n    const collection = getCollection(_collectionName);\n\n    if (!collection || collection.hide) {\n      $selectedCollection = undefined;\n    } else if ($selectedCollection?.name !== collection.name) {\n      $selectedCollection = collection;\n    }\n\n    if (!collection || !$selectedCollection) {\n      $announcedPageStatus = $_('collection_not_found');\n\n      return; // Not Found\n    }\n\n    const { name: collectionName } = $selectedCollection;\n    const collectionLabel = getCollectionLabel($selectedCollection);\n    const _fileMap = '_fileMap' in $selectedCollection ? $selectedCollection._fileMap : undefined;\n\n    if (!routeType) {\n      const count = $listedEntries.length;\n\n      $announcedPageStatus = $_(\n        count > 1\n          ? 'viewing_x_collection_many_entries'\n          : count === 1\n            ? 'viewing_x_collection_one_entry'\n            : 'viewing_x_collection_no_entries',\n        { values: { collection: collectionLabel, count } },\n      );\n\n      return;\n    }\n\n    $showContentOverlay = true;\n\n    if (_fileMap) {\n      // File/singleton collection\n      if (routeType === 'entries' && subPath) {\n        const originalEntry = getCollectionFileEntry(collectionName, subPath);\n        const collectionFile = _fileMap[subPath];\n\n        if (originalEntry) {\n          createDraft({ collection, collectionFile, originalEntry });\n        } else {\n          // File is not yet created\n          createDraft({\n            collection,\n            collectionFile,\n            originalEntry: {\n              slug: collectionFile.name,\n              locales: Object.fromEntries(\n                collectionFile._i18n.initialLocales.map((_locale) => [_locale, {}]),\n              ),\n            },\n          });\n        }\n\n        $announcedPageStatus = $_(`edit_${collection._type}_announcement`, {\n          values: {\n            collection: collectionLabel,\n            file: getCollectionFileLabel(collectionFile),\n          },\n        });\n      }\n    } else {\n      // 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) {\n          createDraft({ collection, originalEntry });\n\n          $announcedPageStatus = $_('edit_entry_announcement', {\n            values: {\n              collection: collectionLabel,\n              entry: getEntrySummary($selectedCollection, originalEntry),\n            },\n          });\n        }\n      }\n    }\n  };\n\n  onMount(() => {\n    navigate();\n  });\n</script>\n\n<svelte:window\n  onhashchange={(event) => {\n    updateContentFromHashChange(event, navigate, ROUTE_REGEX);\n  }}\n/>\n\n<PageContainer aria-label={$_('content_library')}>\n  {#snippet primarySidebar()}\n    {#if !$isSmallScreen || isIndexPage}\n      <PrimarySidebar {isSearchPage} />\n    {/if}\n  {/snippet}\n  {#snippet main()}\n    {#if isSearchPage}\n      <SearchMainArea />\n    {:else if !$isSmallScreen || !isIndexPage}\n      <PageContainerMainArea\n        aria-label={$_('x_collection', {\n          values: {\n            collection:\n              // `$appLocale` is a key, because `getCollectionLabel` can return a localized label\n              $appLocale && $selectedCollection ? getCollectionLabel($selectedCollection) : '',\n          },\n        })}\n        aria-description={$selectedCollection?.description}\n      >\n        {#snippet primaryToolbar()}\n          <PrimaryToolbar />\n        {/snippet}\n        {#snippet secondaryToolbar()}\n          {#if $selectedCollection?._type === 'entry' && $listedEntries.length}\n            <SecondaryToolbar />\n          {/if}\n        {/snippet}\n        {#snippet mainContent()}\n          <MainContent />\n        {/snippet}\n        {#snippet secondarySidebar()}\n          <SecondarySidebar />\n        {/snippet}\n      </PageContainerMainArea>\n    {/if}\n  {/snippet}\n</PageContainer>\n\n{#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  </Alert>\n</Toast>\n\n<Toast bind:show={$contentUpdatesToast.deleted}>\n  <Alert status=\"success\">\n    {$_($contentUpdatesToast.count === 1 ? 'entry_deleted' : 'entries_deleted', {\n      values: { count: $contentUpdatesToast.count },\n    })}\n  </Alert>\n</Toast>\n","<script>\n  import { Option, Select } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { allTranslationServices } from '$lib/services/integrations/translators';\n  import { prefs } from '$lib/services/user/prefs';\n</script>\n\n<Select\n  aria-label={$_('prefs.i18n.translators.default.select_service')}\n  value={$prefs.defaultTranslationService}\n  onChange={(event) => {\n    $prefs = { ...$prefs, defaultTranslationService: event.detail.value };\n  }}\n>\n  {#each Object.entries(allTranslationServices) as [key, { serviceLabel: label }] (key)}\n    <Option {label} value={key} selected={key === $prefs.defaultTranslationService} />\n  {/each}\n</Select>\n","<script>\n  import { PromptDialog, Spacer } from '@sveltia/ui';\n  import { sanitize } from 'isomorphic-dompurify';\n  import { _ } from 'svelte-i18n';\n\n  import TranslatorSelector from '$lib/components/settings/controls/translator-selector.svelte';\n  import { showContentOverlay, translatorApiKeyDialogState } from '$lib/services/contents/editor';\n  import { translator } from '$lib/services/integrations/translators';\n  import { prefs } from '$lib/services/user/prefs';\n\n  const { serviceId, apiLabel, developerURL, apiKeyURL, apiKeyPattern } = $derived($translator);\n\n  $effect(() => {\n    if (!$showContentOverlay && $translatorApiKeyDialogState.show) {\n      // Close the dialog when the Content Editor is closed\n      $translatorApiKeyDialogState.show = false;\n      $translatorApiKeyDialogState.resolve?.();\n    }\n  });\n</script>\n\n<PromptDialog\n  bind:open={$translatorApiKeyDialogState.show}\n  title={$_($translatorApiKeyDialogState.multiple ? 'translate_fields' : 'translate_field')}\n  showOk={false}\n  textboxAttrs={{\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    { ALLOWED_TAGS: ['a'], ALLOWED_ATTR: ['href', 'target', 'rel'] },\n  )}\n</PromptDialog>\n","<script>\n  import { Alert, Toast } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { entryParseErrors } from '$lib/services/contents';\n\n  let showParseErrorToast = $state(!!$entryParseErrors.length);\n</script>\n\n<Toast bind:show={showParseErrorToast}>\n  <Alert status=\"error\">\n    {$_($entryParseErrors.length === 1 ? 'entry_parse_error' : 'entry_parse_errors')}\n  </Alert>\n</Toast>\n","import { derived, writable } from 'svelte/store';\n\nimport { backend } from '$lib/services/backends';\nimport { user } from '$lib/services/user';\nimport { hasMouse, isLargeScreen, isLocalHost } from '$lib/services/user/env';\n\nexport const canShowMobileSignInDialog = derived(\n  [isLargeScreen, hasMouse, isLocalHost, backend, user],\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 { Button, Infobar } from '@sveltia/ui';\n  import { IndexedDB } from '@sveltia/utils/storage';\n  import { _ } from 'svelte-i18n';\n\n  import { showMobileSignInDialog } from '$lib/services/app/onboarding';\n  import { backend } from '$lib/services/backends';\n\n  /** @type {IndexedDB | undefined} */\n  let uiSettingsDB;\n  let showInfobar = $state(false);\n\n  $effect(() => {\n    const { databaseName } = $backend?.repository ?? {};\n\n    if (databaseName) {\n      uiSettingsDB = new IndexedDB(databaseName, 'ui-settings');\n\n      (async () => {\n        const onboardingState = (await uiSettingsDB.get('onboarding')) ?? {};\n\n        if (!onboardingState.mobileCta) {\n          showInfobar = true;\n        }\n\n        await uiSettingsDB.set('onboarding', { ...onboardingState, mobileCta: true });\n      })();\n    }\n  });\n</script>\n\n<Infobar show={showInfobar} dismissible={false} --sui-infobar-message-justify-content=\"center\">\n  {$_('mobile_promo_title')}\n  <Button\n    variant=\"link\"\n    label={$_('mobile_promo_button')}\n    onclick={() => {\n      showInfobar = false;\n      $showMobileSignInDialog = true;\n    }}\n  />\n  <Button\n    variant=\"link\"\n    label={$_('later')}\n    onclick={() => {\n      showInfobar = false;\n    }}\n  />\n</Infobar>\n","<script>\n  import { Icon, SelectButton, SelectButtonGroup } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { goto, selectedPageName } from '$lib/services/app/navigation';\n  import { 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 { isSmallScreen } from '$lib/services/user/env';\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: $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 ($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 lang=\"scss\">\n  .wrapper {\n    display: contents;\n\n    :global {\n      .sui.select-button-group {\n        gap: 4px;\n\n        @media (width < 768px) {\n          justify-content: space-evenly;\n          width: 100%;\n        }\n      }\n\n      .sui.button {\n        border-radius: var(--sui-button-medium-border-radius) !important;\n      }\n    }\n  }\n</style>\n","<script>\n  import { BottomNavigation, Toolbar } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import PageSwitcher from '$lib/components/global/toolbar/items/page-switcher.svelte';\n  import { hasOverlay } from '$lib/services/app/navigation';\n</script>\n\n<BottomNavigation inert={$hasOverlay}>\n  <Toolbar variant=\"primary\" aria-label={$_('global')}>\n    <div role=\"none\" class=\"buttons\">\n      <PageSwitcher />\n    </div>\n  </Toolbar>\n</BottomNavigation>\n","<script>\n  import { Dialog, Table, TableCell, TableRow } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { isMacOS } from '$lib/services/user/env';\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', $isMacOS ? '⌘' : 'Ctrl')}</kbd>\n            {/each}\n          </TableCell>\n        </TableRow>\n      {/each}\n    </Table>\n  </div>\n</Dialog>\n\n<style lang=\"scss\">\n  .wrapper {\n    display: contents;\n\n    :global {\n      .table-row {\n        display: flex;\n        align-items: center;\n        gap: 16px;\n        padding: 8px 0;\n        border-top: 1px solid var(--sui-secondary-border-color);\n\n        &:last-child {\n          border-bottom: 1px solid var(--sui-secondary-border-color);\n        }\n\n        .feature {\n          flex: auto;\n        }\n\n        .keys {\n          display: flex;\n          gap: 8px;\n        }\n      }\n    }\n  }\n\n  kbd {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    box-sizing: border-box;\n    border-color: var(--sui-primary-accent-color);\n    border-radius: 4px;\n    padding: 0 8px;\n    height: 32px;\n    min-width: 32px;\n    background-color: var(--sui-tertiary-background-color);\n    font-family: var(--sui-control-font-family);\n    font-size: var(--sui-control-font-size);\n    line-height: var(--sui-control-line-height);\n  }\n</style>\n","<script>\n  import { MenuItem } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import ShortcutsDialog from '$lib/components/help/shortcuts-dialog.svelte';\n  import { hasMouse } from '$lib/services/user/env';\n\n  /**\n   * @typedef {object} Props\n   * @property {import('@sveltia/ui').MenuButton} [menuButton] Menu button.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    menuButton,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  let showDialog = $state(false);\n</script>\n\n<!-- Assume the user has a physical keyboard if the pointer is mouse (on desktop) -->\n{#if $hasMouse}\n  <MenuItem\n    label={$_('keyboard_shortcuts')}\n    onclick={() => {\n      showDialog = true;\n    }}\n  />\n{/if}\n\n<ShortcutsDialog\n  bind:open={showDialog}\n  onClose={() => {\n    menuButton?.focus();\n  }}\n/>\n","<script>\n  import { Switch } from '@sveltia/ui';\n\n  import { prefs } from '$lib/services/user/prefs';\n\n  /**\n   * @typedef {object} Props\n   * @property {string} key Preference key.\n   * @property {string} label UI label on the switch.\n   * @property {boolean} [defaultValue] Default value.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    key,\n    label,\n    defaultValue = true,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  // 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 'svelte-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 { TextInput } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\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';\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        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        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 { SelectButton, SelectButtonGroup } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { prefs } from '$lib/services/user/prefs';\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 = { ...$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 'svelte-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 { SecretInput } from '@sveltia/ui';\n  import { onMount } from 'svelte';\n  import { _ } from 'svelte-i18n';\n\n  import { prefs } from '$lib/services/user/prefs';\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 'svelte-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 { Option, Select } from '@sveltia/ui';\n  import { _, locale as appLocale, locales as appLocales } from 'svelte-i18n';\n\n  import { getLocaleLabel } from '$lib/services/contents/i18n';\n  import { prefs } from '$lib/services/user/prefs';\n\n  /**\n   * @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}\n      <Select\n        aria-label={$_('prefs.language.ui_language.select_language')}\n        value={$appLocale ?? undefined}\n        onChange={(event) => {\n          $prefs = { ...$prefs, locale: event.detail.value };\n        }}\n      >\n        {#each $appLocales as locale (locale)}\n          <Option\n            label={getLocaleLabel(locale, { displayLocale: locale }) ?? locale}\n            value={locale}\n            selected={locale === $appLocale}\n            dir=\"auto\"\n          />\n        {/each}\n      </Select>\n    {/key}\n  </div>\n</section>\n","<script>\n  import { _ } from 'svelte-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 lang=\"scss\">\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 { Dialog, Icon, Tab, TabList, TabPanel } from '@sveltia/ui';\n  import { get } from 'svelte/store';\n  import { _ } from 'svelte-i18n';\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 lang=\"scss\">\n  .wrapper {\n    display: flex;\n\n    :global {\n      .sui.tab-list {\n        flex: none;\n      }\n\n      .sui.tab-panel {\n        flex: auto;\n        border-width: 0;\n      }\n    }\n  }\n</style>\n","<script>\n  import { Divider, Menu, MenuItem } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\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';\n  import { signOut } from '$lib/services/user/auth';\n  import { isSmallScreen } from '$lib/services/user/env';\n  import { prefs } from '$lib/services/user/prefs';\n\n  /**\n   * @typedef {object} Props\n   * @property {import('@sveltia/ui').MenuButton} [menuButton] Menu button.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    menuButton,\n    /* eslint-enable prefer-const */\n  } = $props();\n\n  let showPrefsDialog = $state(false);\n\n  const isLocalRepo = $derived($backendName === 'local');\n  const isTestRepo = $derived($backendName === 'test-repo');\n</script>\n\n<Menu aria-label={$_('account')}>\n  <MenuItem\n    label={isLocalRepo\n      ? $_('working_with_local_repo')\n      : isTestRepo\n        ? $_('working_with_test_repo')\n        : $_('signed_in_as_x', { values: { name: $user?.login } })}\n    disabled={isLocalRepo || isTestRepo}\n    onclick={() => {\n      window.open($user?.profileURL, '_blank');\n    }}\n  />\n  <Divider />\n  <MenuItem\n    label={$_('live_site')}\n    onclick={() => {\n      openProductionSite();\n    }}\n  />\n  {#if $prefs.devModeEnabled}\n    <MenuItem\n      label={$_('git_repository')}\n      disabled={!$backend?.repository?.treeBaseURL}\n      onclick={() => {\n        window.open($backend?.repository?.treeBaseURL);\n      }}\n    />\n    <MenuItem\n      label={$_('cms_config')}\n      onclick={() => {\n        goto('/config', { transitionType: 'forwards' });\n      }}\n    />\n  {/if}\n  <Divider />\n  <MenuItem\n    label={$_('settings')}\n    onclick={() => {\n      if ($isSmallScreen) {\n        goto('/settings', { transitionType: 'forwards' });\n      } else {\n        showPrefsDialog = true;\n      }\n    }}\n  />\n  <!-- 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 { Icon, MenuButton } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import AccountMenu from '$lib/components/global/toolbar/items/account-menu.svelte';\n  import { backendName } from '$lib/services/backends';\n  import { user } from '$lib/services/user';\n\n  /** @type {MenuButton | undefined} */\n  let menuButton = $state();\n\n  const isLocalRepo = $derived($backendName === 'local');\n  const hasAvatar = $derived(!!$user?.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?.avatarURL} alt=\"\" />\n      {:else}\n        <Icon name=\"account_circle\" />\n      {/if}\n    {/snippet}\n    {#snippet popup()}\n      <AccountMenu {menuButton} />\n    {/snippet}\n  </MenuButton>\n</div>\n\n<style lang=\"scss\">\n  .wrapper {\n    display: contents;\n\n    :global {\n      button.avatar {\n        border-width: 0;\n        background-color: transparent;\n      }\n    }\n  }\n\n  .avatar {\n    width: 32px;\n    height: 32px;\n    border-radius: 32px;\n    object-fit: cover;\n  }\n</style>\n","<script>\n  import { Divider, Icon, Menu, MenuButton, MenuItem } from '@sveltia/ui';\n  import { sleep } from '@sveltia/utils/misc';\n  import { _ } from 'svelte-i18n';\n\n  import { goto } from '$lib/services/app/navigation';\n  import { showUploadAssetsDialog } from '$lib/services/assets/view';\n  import { getValidCollections } from '$lib/services/contents/collection';\n  import { getEntriesByCollection } from '$lib/services/contents/collection/entries';\n\n  /**\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 { MenuItem } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import { version } from '$lib/services/app';\n  import { prefs } from '$lib/services/user/prefs';\n</script>\n\n<MenuItem\n  label={$_('release_notes')}\n  onclick={() => {\n    window.open('https://github.com/sveltia/sveltia-cms/releases', '_blank');\n  }}\n>\n  {#snippet endIcon()}\n    {#if $prefs.devModeEnabled}\n      <span class=\"version\" aria-label=\"({$_('version_x', { values: { version } })})\">\n        v{version}\n      </span>\n    {/if}\n  {/snippet}\n</MenuItem>\n\n<style lang=\"scss\">\n  .version {\n    border-radius: 4px;\n    padding: 0 6px;\n    color: var(--sui-secondary-foreground-color);\n    background-color: var(--sui-selected-background-color);\n    font-size: var(--sui-font-size-small);\n  }\n</style>\n","<script>\n  import { Divider, Menu, MenuItem } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import ReleaseNotesMenuItem from '$lib/components/help/release-notes-menu-item.svelte';\n  import ShortcutsMenuItem from '$lib/components/help/shortcuts-menu-item.svelte';\n  import { prefs } from '$lib/services/user/prefs';\n\n  /**\n   * @typedef {object} Props\n   * @property {import('@sveltia/ui').MenuButton} [menuButton] Menu button.\n   */\n\n  /** @type {Props} */\n  let {\n    /* eslint-disable prefer-const */\n    menuButton,\n    /* eslint-enable prefer-const */\n  } = $props();\n</script>\n\n{#snippet link(/** @type {string} */ labelKey, /** @type {string} */ url)}\n  <MenuItem\n    label={$_(labelKey)}\n    onclick={() => {\n      window.open(url, '_blank');\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    <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 { Icon, MenuButton } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\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 lang=\"scss\">\n  .wrapper {\n    display: contents;\n  }\n</style>\n","<script>\n  import { Button, Icon } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n</script>\n\n<Button\n  variant=\"ghost\"\n  iconic\n  hidden\n  aria-label={$_('show_notifications')}\n  onclick={() => {\n    // @todo Implement this!\n  }}\n>\n  {#snippet startIcon()}\n    <Icon name=\"notifications\" />\n  {/snippet}\n</Button>\n","<script>\n  import { Button } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\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 lang=\"scss\">\n  img {\n    width: 24px;\n    height: 24px;\n    object-fit: contain;\n  }\n</style>\n","<script>\n  import { Toolbar } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import AccountButton from '$lib/components/global/toolbar/items/account-button.svelte';\n  import CreateButton from '$lib/components/global/toolbar/items/create-button.svelte';\n  import HelpButton from '$lib/components/global/toolbar/items/help-button.svelte';\n  import NotificationsButton from '$lib/components/global/toolbar/items/notifications-button.svelte';\n  import PageSwitcher from '$lib/components/global/toolbar/items/page-switcher.svelte';\n  import PublishButton from '$lib/components/global/toolbar/items/publish-button.svelte';\n  import QuickSearchBar from '$lib/components/global/toolbar/items/quick-search-bar.svelte';\n  import SiteLogo from '$lib/components/global/toolbar/items/site-logo.svelte';\n  import { hasOverlay } from '$lib/services/app/navigation';\n  import { prefs } from '$lib/services/user/prefs';\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 lang=\"scss\">\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 { Spacer, Toolbar } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import PageContainerMainArea from '$lib/components/common/page-container-main-area.svelte';\n  import PageContainer from '$lib/components/common/page-container.svelte';\n  import AccountMenu from '$lib/components/global/toolbar/items/account-menu.svelte';\n  import HelpMenu from '$lib/components/global/toolbar/items/help-menu.svelte';\n  import { prefs } from '$lib/services/user/prefs';\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 lang=\"scss\">\n  .wrapper {\n    overflow-y: auto;\n    height: 100%;\n    --sui-menu-border-width: 0;\n    --sui-menu-border-radius: 0;\n    --sui-menu-padding: 8px 0;\n  }\n\n  h3 {\n    padding: 8px 16px;\n    background-color: var(--sui-tertiary-background-color);\n    color: var(--sui-secondary-foreground-color);\n    font-size: var(--sui-font-size-normal);\n  }\n</style>\n","// can-promise has a crash in some versions of react native that dont have\n// standard global objects\n// https://github.com/soldair/node-qrcode/issues/157\n\nmodule.exports = function () {\n  return typeof Promise === 'function' && Promise.prototype && Promise.prototype.then\n}\n","let toSJISFunction\nconst CODEWORDS_COUNT = [\n  0, // Not used\n  26, 44, 70, 100, 134, 172, 196, 242, 292, 346,\n  404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,\n  1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185,\n  2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706\n]\n\n/**\n * Returns the QR Code size for the specified version\n *\n * @param  {Number} version QR Code version\n * @return {Number}         size of QR code\n */\nexports.getSymbolSize = function getSymbolSize (version) {\n  if (!version) throw new Error('\"version\" cannot be null or undefined')\n  if (version < 1 || version > 40) throw new Error('\"version\" should be in range from 1 to 40')\n  return version * 4 + 17\n}\n\n/**\n * Returns the total number of codewords used to store data and EC information.\n *\n * @param  {Number} version QR Code version\n * @return {Number}         Data length in bits\n */\nexports.getSymbolTotalCodewords = function getSymbolTotalCodewords (version) {\n  return CODEWORDS_COUNT[version]\n}\n\n/**\n * Encode data with Bose-Chaudhuri-Hocquenghem\n *\n * @param  {Number} data Value to encode\n * @return {Number}      Encoded value\n */\nexports.getBCHDigit = function (data) {\n  let digit = 0\n\n  while (data !== 0) {\n    digit++\n    data >>>= 1\n  }\n\n  return digit\n}\n\nexports.setToSJISFunction = function setToSJISFunction (f) {\n  if (typeof f !== 'function') {\n    throw new Error('\"toSJISFunc\" is not a valid function.')\n  }\n\n  toSJISFunction = f\n}\n\nexports.isKanjiModeEnabled = function () {\n  return typeof toSJISFunction !== 'undefined'\n}\n\nexports.toSJIS = function toSJIS (kanji) {\n  return toSJISFunction(kanji)\n}\n","exports.L = { bit: 1 }\nexports.M = { bit: 0 }\nexports.Q = { bit: 3 }\nexports.H = { bit: 2 }\n\nfunction fromString (string) {\n  if (typeof string !== 'string') {\n    throw new Error('Param is not a string')\n  }\n\n  const lcStr = string.toLowerCase()\n\n  switch (lcStr) {\n    case 'l':\n    case 'low':\n      return exports.L\n\n    case 'm':\n    case 'medium':\n      return exports.M\n\n    case 'q':\n    case 'quartile':\n      return exports.Q\n\n    case 'h':\n    case 'high':\n      return exports.H\n\n    default:\n      throw new Error('Unknown EC Level: ' + string)\n  }\n}\n\nexports.isValid = function isValid (level) {\n  return level && typeof level.bit !== 'undefined' &&\n    level.bit >= 0 && level.bit < 4\n}\n\nexports.from = function from (value, defaultValue) {\n  if (exports.isValid(value)) {\n    return value\n  }\n\n  try {\n    return fromString(value)\n  } catch (e) {\n    return defaultValue\n  }\n}\n","function BitBuffer () {\n  this.buffer = []\n  this.length = 0\n}\n\nBitBuffer.prototype = {\n\n  get: function (index) {\n    const bufIndex = Math.floor(index / 8)\n    return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) === 1\n  },\n\n  put: function (num, length) {\n    for (let i = 0; i < length; i++) {\n      this.putBit(((num >>> (length - i - 1)) & 1) === 1)\n    }\n  },\n\n  getLengthInBits: function () {\n    return this.length\n  },\n\n  putBit: function (bit) {\n    const bufIndex = Math.floor(this.length / 8)\n    if (this.buffer.length <= bufIndex) {\n      this.buffer.push(0)\n    }\n\n    if (bit) {\n      this.buffer[bufIndex] |= (0x80 >>> (this.length % 8))\n    }\n\n    this.length++\n  }\n}\n\nmodule.exports = BitBuffer\n","/**\n * Helper class to handle QR Code symbol modules\n *\n * @param {Number} size Symbol size\n */\nfunction BitMatrix (size) {\n  if (!size || size < 1) {\n    throw new Error('BitMatrix size must be defined and greater than 0')\n  }\n\n  this.size = size\n  this.data = new Uint8Array(size * size)\n  this.reservedBit = new Uint8Array(size * size)\n}\n\n/**\n * Set bit value at specified location\n * If reserved flag is set, this bit will be ignored during masking process\n *\n * @param {Number}  row\n * @param {Number}  col\n * @param {Boolean} value\n * @param {Boolean} reserved\n */\nBitMatrix.prototype.set = function (row, col, value, reserved) {\n  const index = row * this.size + col\n  this.data[index] = value\n  if (reserved) this.reservedBit[index] = true\n}\n\n/**\n * Returns bit value at specified location\n *\n * @param  {Number}  row\n * @param  {Number}  col\n * @return {Boolean}\n */\nBitMatrix.prototype.get = function (row, col) {\n  return this.data[row * this.size + col]\n}\n\n/**\n * Applies xor operator at specified location\n * (used during masking process)\n *\n * @param {Number}  row\n * @param {Number}  col\n * @param {Boolean} value\n */\nBitMatrix.prototype.xor = function (row, col, value) {\n  this.data[row * this.size + col] ^= value\n}\n\n/**\n * Check if bit at specified location is reserved\n *\n * @param {Number}   row\n * @param {Number}   col\n * @return {Boolean}\n */\nBitMatrix.prototype.isReserved = function (row, col) {\n  return this.reservedBit[row * this.size + col]\n}\n\nmodule.exports = BitMatrix\n","/**\n * Alignment pattern are fixed reference pattern in defined positions\n * in a matrix symbology, which enables the decode software to re-synchronise\n * the coordinate mapping of the image modules in the event of moderate amounts\n * of distortion of the image.\n *\n * Alignment patterns are present only in QR Code symbols of version 2 or larger\n * and their number depends on the symbol version.\n */\n\nconst getSymbolSize = require('./utils').getSymbolSize\n\n/**\n * Calculate the row/column coordinates of the center module of each alignment pattern\n * for the specified QR Code version.\n *\n * The alignment patterns are positioned symmetrically on either side of the diagonal\n * running from the top left corner of the symbol to the bottom right corner.\n *\n * Since positions are simmetrical only half of the coordinates are returned.\n * Each item of the array will represent in turn the x and y coordinate.\n * @see {@link getPositions}\n *\n * @param  {Number} version QR Code version\n * @return {Array}          Array of coordinate\n */\nexports.getRowColCoords = function getRowColCoords (version) {\n  if (version === 1) return []\n\n  const posCount = Math.floor(version / 7) + 2\n  const size = getSymbolSize(version)\n  const intervals = size === 145 ? 26 : Math.ceil((size - 13) / (2 * posCount - 2)) * 2\n  const positions = [size - 7] // Last coord is always (size - 7)\n\n  for (let i = 1; i < posCount - 1; i++) {\n    positions[i] = positions[i - 1] - intervals\n  }\n\n  positions.push(6) // First coord is always 6\n\n  return positions.reverse()\n}\n\n/**\n * Returns an array containing the positions of each alignment pattern.\n * Each array's element represent the center point of the pattern as (x, y) coordinates\n *\n * Coordinates are calculated expanding the row/column coordinates returned by {@link getRowColCoords}\n * and filtering out the items that overlaps with finder pattern\n *\n * @example\n * For a Version 7 symbol {@link getRowColCoords} returns values 6, 22 and 38.\n * The alignment patterns, therefore, are to be centered on (row, column)\n * positions (6,22), (22,6), (22,22), (22,38), (38,22), (38,38).\n * Note that the coordinates (6,6), (6,38), (38,6) are occupied by finder patterns\n * and are not therefore used for alignment patterns.\n *\n * let pos = getPositions(7)\n * // [[6,22], [22,6], [22,22], [22,38], [38,22], [38,38]]\n *\n * @param  {Number} version QR Code version\n * @return {Array}          Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n  const coords = []\n  const pos = exports.getRowColCoords(version)\n  const posLength = pos.length\n\n  for (let i = 0; i < posLength; i++) {\n    for (let j = 0; j < posLength; j++) {\n      // Skip if position is occupied by finder patterns\n      if ((i === 0 && j === 0) || // top-left\n          (i === 0 && j === posLength - 1) || // bottom-left\n          (i === posLength - 1 && j === 0)) { // top-right\n        continue\n      }\n\n      coords.push([pos[i], pos[j]])\n    }\n  }\n\n  return coords\n}\n","const getSymbolSize = require('./utils').getSymbolSize\nconst FINDER_PATTERN_SIZE = 7\n\n/**\n * Returns an array containing the positions of each finder pattern.\n * Each array's element represent the top-left point of the pattern as (x, y) coordinates\n *\n * @param  {Number} version QR Code version\n * @return {Array}          Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n  const size = getSymbolSize(version)\n\n  return [\n    // top-left\n    [0, 0],\n    // top-right\n    [size - FINDER_PATTERN_SIZE, 0],\n    // bottom-left\n    [0, size - FINDER_PATTERN_SIZE]\n  ]\n}\n","/**\n * Data mask pattern reference\n * @type {Object}\n */\nexports.Patterns = {\n  PATTERN000: 0,\n  PATTERN001: 1,\n  PATTERN010: 2,\n  PATTERN011: 3,\n  PATTERN100: 4,\n  PATTERN101: 5,\n  PATTERN110: 6,\n  PATTERN111: 7\n}\n\n/**\n * Weighted penalty scores for the undesirable features\n * @type {Object}\n */\nconst PenaltyScores = {\n  N1: 3,\n  N2: 3,\n  N3: 40,\n  N4: 10\n}\n\n/**\n * Check if mask pattern value is valid\n *\n * @param  {Number}  mask    Mask pattern\n * @return {Boolean}         true if valid, false otherwise\n */\nexports.isValid = function isValid (mask) {\n  return mask != null && mask !== '' && !isNaN(mask) && mask >= 0 && mask <= 7\n}\n\n/**\n * Returns mask pattern from a value.\n * If value is not valid, returns undefined\n *\n * @param  {Number|String} value        Mask pattern value\n * @return {Number}                     Valid mask pattern or undefined\n */\nexports.from = function from (value) {\n  return exports.isValid(value) ? parseInt(value, 10) : undefined\n}\n\n/**\n* Find adjacent modules in row/column with the same color\n* and assign a penalty value.\n*\n* Points: N1 + i\n* i is the amount by which the number of adjacent modules of the same color exceeds 5\n*/\nexports.getPenaltyN1 = function getPenaltyN1 (data) {\n  const size = data.size\n  let points = 0\n  let sameCountCol = 0\n  let sameCountRow = 0\n  let lastCol = null\n  let lastRow = null\n\n  for (let row = 0; row < size; row++) {\n    sameCountCol = sameCountRow = 0\n    lastCol = lastRow = null\n\n    for (let col = 0; col < size; col++) {\n      let module = data.get(row, col)\n      if (module === lastCol) {\n        sameCountCol++\n      } else {\n        if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n        lastCol = module\n        sameCountCol = 1\n      }\n\n      module = data.get(col, row)\n      if (module === lastRow) {\n        sameCountRow++\n      } else {\n        if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n        lastRow = module\n        sameCountRow = 1\n      }\n    }\n\n    if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n    if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n  }\n\n  return points\n}\n\n/**\n * Find 2x2 blocks with the same color and assign a penalty value\n *\n * Points: N2 * (m - 1) * (n - 1)\n */\nexports.getPenaltyN2 = function getPenaltyN2 (data) {\n  const size = data.size\n  let points = 0\n\n  for (let row = 0; row < size - 1; row++) {\n    for (let col = 0; col < size - 1; col++) {\n      const last = data.get(row, col) +\n        data.get(row, col + 1) +\n        data.get(row + 1, col) +\n        data.get(row + 1, col + 1)\n\n      if (last === 4 || last === 0) points++\n    }\n  }\n\n  return points * PenaltyScores.N2\n}\n\n/**\n * Find 1:1:3:1:1 ratio (dark:light:dark:light:dark) pattern in row/column,\n * preceded or followed by light area 4 modules wide\n *\n * Points: N3 * number of pattern found\n */\nexports.getPenaltyN3 = function getPenaltyN3 (data) {\n  const size = data.size\n  let points = 0\n  let bitsCol = 0\n  let bitsRow = 0\n\n  for (let row = 0; row < size; row++) {\n    bitsCol = bitsRow = 0\n    for (let col = 0; col < size; col++) {\n      bitsCol = ((bitsCol << 1) & 0x7FF) | data.get(row, col)\n      if (col >= 10 && (bitsCol === 0x5D0 || bitsCol === 0x05D)) points++\n\n      bitsRow = ((bitsRow << 1) & 0x7FF) | data.get(col, row)\n      if (col >= 10 && (bitsRow === 0x5D0 || bitsRow === 0x05D)) points++\n    }\n  }\n\n  return points * PenaltyScores.N3\n}\n\n/**\n * Calculate proportion of dark modules in entire symbol\n *\n * Points: N4 * k\n *\n * k is the rating of the deviation of the proportion of dark modules\n * in the symbol from 50% in steps of 5%\n */\nexports.getPenaltyN4 = function getPenaltyN4 (data) {\n  let darkCount = 0\n  const modulesCount = data.data.length\n\n  for (let i = 0; i < modulesCount; i++) darkCount += data.data[i]\n\n  const k = Math.abs(Math.ceil((darkCount * 100 / modulesCount) / 5) - 10)\n\n  return k * PenaltyScores.N4\n}\n\n/**\n * Return mask value at given position\n *\n * @param  {Number} maskPattern Pattern reference value\n * @param  {Number} i           Row\n * @param  {Number} j           Column\n * @return {Boolean}            Mask value\n */\nfunction getMaskAt (maskPattern, i, j) {\n  switch (maskPattern) {\n    case exports.Patterns.PATTERN000: return (i + j) % 2 === 0\n    case exports.Patterns.PATTERN001: return i % 2 === 0\n    case exports.Patterns.PATTERN010: return j % 3 === 0\n    case exports.Patterns.PATTERN011: return (i + j) % 3 === 0\n    case exports.Patterns.PATTERN100: return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 === 0\n    case exports.Patterns.PATTERN101: return (i * j) % 2 + (i * j) % 3 === 0\n    case exports.Patterns.PATTERN110: return ((i * j) % 2 + (i * j) % 3) % 2 === 0\n    case exports.Patterns.PATTERN111: return ((i * j) % 3 + (i + j) % 2) % 2 === 0\n\n    default: throw new Error('bad maskPattern:' + maskPattern)\n  }\n}\n\n/**\n * Apply a mask pattern to a BitMatrix\n *\n * @param  {Number}    pattern Pattern reference number\n * @param  {BitMatrix} data    BitMatrix data\n */\nexports.applyMask = function applyMask (pattern, data) {\n  const size = data.size\n\n  for (let col = 0; col < size; col++) {\n    for (let row = 0; row < size; row++) {\n      if (data.isReserved(row, col)) continue\n      data.xor(row, col, getMaskAt(pattern, row, col))\n    }\n  }\n}\n\n/**\n * Returns the best mask pattern for data\n *\n * @param  {BitMatrix} data\n * @return {Number} Mask pattern reference number\n */\nexports.getBestMask = function getBestMask (data, setupFormatFunc) {\n  const numPatterns = Object.keys(exports.Patterns).length\n  let bestPattern = 0\n  let lowerPenalty = Infinity\n\n  for (let p = 0; p < numPatterns; p++) {\n    setupFormatFunc(p)\n    exports.applyMask(p, data)\n\n    // Calculate penalty\n    const penalty =\n      exports.getPenaltyN1(data) +\n      exports.getPenaltyN2(data) +\n      exports.getPenaltyN3(data) +\n      exports.getPenaltyN4(data)\n\n    // Undo previously applied mask\n    exports.applyMask(p, data)\n\n    if (penalty < lowerPenalty) {\n      lowerPenalty = penalty\n      bestPattern = p\n    }\n  }\n\n  return bestPattern\n}\n","const ECLevel = require('./error-correction-level')\r\n\r\nconst EC_BLOCKS_TABLE = [\r\n// L  M  Q  H\r\n  1, 1, 1, 1,\r\n  1, 1, 1, 1,\r\n  1, 1, 2, 2,\r\n  1, 2, 2, 4,\r\n  1, 2, 4, 4,\r\n  2, 4, 4, 4,\r\n  2, 4, 6, 5,\r\n  2, 4, 6, 6,\r\n  2, 5, 8, 8,\r\n  4, 5, 8, 8,\r\n  4, 5, 8, 11,\r\n  4, 8, 10, 11,\r\n  4, 9, 12, 16,\r\n  4, 9, 16, 16,\r\n  6, 10, 12, 18,\r\n  6, 10, 17, 16,\r\n  6, 11, 16, 19,\r\n  6, 13, 18, 21,\r\n  7, 14, 21, 25,\r\n  8, 16, 20, 25,\r\n  8, 17, 23, 25,\r\n  9, 17, 23, 34,\r\n  9, 18, 25, 30,\r\n  10, 20, 27, 32,\r\n  12, 21, 29, 35,\r\n  12, 23, 34, 37,\r\n  12, 25, 34, 40,\r\n  13, 26, 35, 42,\r\n  14, 28, 38, 45,\r\n  15, 29, 40, 48,\r\n  16, 31, 43, 51,\r\n  17, 33, 45, 54,\r\n  18, 35, 48, 57,\r\n  19, 37, 51, 60,\r\n  19, 38, 53, 63,\r\n  20, 40, 56, 66,\r\n  21, 43, 59, 70,\r\n  22, 45, 62, 74,\r\n  24, 47, 65, 77,\r\n  25, 49, 68, 81\r\n]\r\n\r\nconst EC_CODEWORDS_TABLE = [\r\n// L  M  Q  H\r\n  7, 10, 13, 17,\r\n  10, 16, 22, 28,\r\n  15, 26, 36, 44,\r\n  20, 36, 52, 64,\r\n  26, 48, 72, 88,\r\n  36, 64, 96, 112,\r\n  40, 72, 108, 130,\r\n  48, 88, 132, 156,\r\n  60, 110, 160, 192,\r\n  72, 130, 192, 224,\r\n  80, 150, 224, 264,\r\n  96, 176, 260, 308,\r\n  104, 198, 288, 352,\r\n  120, 216, 320, 384,\r\n  132, 240, 360, 432,\r\n  144, 280, 408, 480,\r\n  168, 308, 448, 532,\r\n  180, 338, 504, 588,\r\n  196, 364, 546, 650,\r\n  224, 416, 600, 700,\r\n  224, 442, 644, 750,\r\n  252, 476, 690, 816,\r\n  270, 504, 750, 900,\r\n  300, 560, 810, 960,\r\n  312, 588, 870, 1050,\r\n  336, 644, 952, 1110,\r\n  360, 700, 1020, 1200,\r\n  390, 728, 1050, 1260,\r\n  420, 784, 1140, 1350,\r\n  450, 812, 1200, 1440,\r\n  480, 868, 1290, 1530,\r\n  510, 924, 1350, 1620,\r\n  540, 980, 1440, 1710,\r\n  570, 1036, 1530, 1800,\r\n  570, 1064, 1590, 1890,\r\n  600, 1120, 1680, 1980,\r\n  630, 1204, 1770, 2100,\r\n  660, 1260, 1860, 2220,\r\n  720, 1316, 1950, 2310,\r\n  750, 1372, 2040, 2430\r\n]\r\n\r\n/**\r\n * Returns the number of error correction block that the QR Code should contain\r\n * for the specified version and error correction level.\r\n *\r\n * @param  {Number} version              QR Code version\r\n * @param  {Number} errorCorrectionLevel Error correction level\r\n * @return {Number}                      Number of error correction blocks\r\n */\r\nexports.getBlocksCount = function getBlocksCount (version, errorCorrectionLevel) {\r\n  switch (errorCorrectionLevel) {\r\n    case ECLevel.L:\r\n      return EC_BLOCKS_TABLE[(version - 1) * 4 + 0]\r\n    case ECLevel.M:\r\n      return EC_BLOCKS_TABLE[(version - 1) * 4 + 1]\r\n    case ECLevel.Q:\r\n      return EC_BLOCKS_TABLE[(version - 1) * 4 + 2]\r\n    case ECLevel.H:\r\n      return EC_BLOCKS_TABLE[(version - 1) * 4 + 3]\r\n    default:\r\n      return undefined\r\n  }\r\n}\r\n\r\n/**\r\n * Returns the number of error correction codewords to use for the specified\r\n * version and error correction level.\r\n *\r\n * @param  {Number} version              QR Code version\r\n * @param  {Number} errorCorrectionLevel Error correction level\r\n * @return {Number}                      Number of error correction codewords\r\n */\r\nexports.getTotalCodewordsCount = function getTotalCodewordsCount (version, errorCorrectionLevel) {\r\n  switch (errorCorrectionLevel) {\r\n    case ECLevel.L:\r\n      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 0]\r\n    case ECLevel.M:\r\n      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 1]\r\n    case ECLevel.Q:\r\n      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 2]\r\n    case ECLevel.H:\r\n      return EC_CODEWORDS_TABLE[(version - 1) * 4 + 3]\r\n    default:\r\n      return undefined\r\n  }\r\n}\r\n","const EXP_TABLE = new Uint8Array(512)\nconst LOG_TABLE = new Uint8Array(256)\n/**\n * Precompute the log and anti-log tables for faster computation later\n *\n * For each possible value in the galois field 2^8, we will pre-compute\n * the logarithm and anti-logarithm (exponential) of this value\n *\n * ref {@link https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Introduction_to_mathematical_fields}\n */\n;(function initTables () {\n  let x = 1\n  for (let i = 0; i < 255; i++) {\n    EXP_TABLE[i] = x\n    LOG_TABLE[x] = i\n\n    x <<= 1 // multiply by 2\n\n    // The QR code specification says to use byte-wise modulo 100011101 arithmetic.\n    // This means that when a number is 256 or larger, it should be XORed with 0x11D.\n    if (x & 0x100) { // similar to x >= 256, but a lot faster (because 0x100 == 256)\n      x ^= 0x11D\n    }\n  }\n\n  // Optimization: double the size of the anti-log table so that we don't need to mod 255 to\n  // stay inside the bounds (because we will mainly use this table for the multiplication of\n  // two GF numbers, no more).\n  // @see {@link mul}\n  for (let i = 255; i < 512; i++) {\n    EXP_TABLE[i] = EXP_TABLE[i - 255]\n  }\n}())\n\n/**\n * Returns log value of n inside Galois Field\n *\n * @param  {Number} n\n * @return {Number}\n */\nexports.log = function log (n) {\n  if (n < 1) throw new Error('log(' + n + ')')\n  return LOG_TABLE[n]\n}\n\n/**\n * Returns anti-log value of n inside Galois Field\n *\n * @param  {Number} n\n * @return {Number}\n */\nexports.exp = function exp (n) {\n  return EXP_TABLE[n]\n}\n\n/**\n * Multiplies two number inside Galois Field\n *\n * @param  {Number} x\n * @param  {Number} y\n * @return {Number}\n */\nexports.mul = function mul (x, y) {\n  if (x === 0 || y === 0) return 0\n\n  // should be EXP_TABLE[(LOG_TABLE[x] + LOG_TABLE[y]) % 255] if EXP_TABLE wasn't oversized\n  // @see {@link initTables}\n  return EXP_TABLE[LOG_TABLE[x] + LOG_TABLE[y]]\n}\n","const GF = require('./galois-field')\n\n/**\n * Multiplies two polynomials inside Galois Field\n *\n * @param  {Uint8Array} p1 Polynomial\n * @param  {Uint8Array} p2 Polynomial\n * @return {Uint8Array}    Product of p1 and p2\n */\nexports.mul = function mul (p1, p2) {\n  const coeff = new Uint8Array(p1.length + p2.length - 1)\n\n  for (let i = 0; i < p1.length; i++) {\n    for (let j = 0; j < p2.length; j++) {\n      coeff[i + j] ^= GF.mul(p1[i], p2[j])\n    }\n  }\n\n  return coeff\n}\n\n/**\n * Calculate the remainder of polynomials division\n *\n * @param  {Uint8Array} divident Polynomial\n * @param  {Uint8Array} divisor  Polynomial\n * @return {Uint8Array}          Remainder\n */\nexports.mod = function mod (divident, divisor) {\n  let result = new Uint8Array(divident)\n\n  while ((result.length - divisor.length) >= 0) {\n    const coeff = result[0]\n\n    for (let i = 0; i < divisor.length; i++) {\n      result[i] ^= GF.mul(divisor[i], coeff)\n    }\n\n    // remove all zeros from buffer head\n    let offset = 0\n    while (offset < result.length && result[offset] === 0) offset++\n    result = result.slice(offset)\n  }\n\n  return result\n}\n\n/**\n * Generate an irreducible generator polynomial of specified degree\n * (used by Reed-Solomon encoder)\n *\n * @param  {Number} degree Degree of the generator polynomial\n * @return {Uint8Array}    Buffer containing polynomial coefficients\n */\nexports.generateECPolynomial = function generateECPolynomial (degree) {\n  let poly = new Uint8Array([1])\n  for (let i = 0; i < degree; i++) {\n    poly = exports.mul(poly, new Uint8Array([1, GF.exp(i)]))\n  }\n\n  return poly\n}\n","const Polynomial = require('./polynomial')\n\nfunction ReedSolomonEncoder (degree) {\n  this.genPoly = undefined\n  this.degree = degree\n\n  if (this.degree) this.initialize(this.degree)\n}\n\n/**\n * Initialize the encoder.\n * The input param should correspond to the number of error correction codewords.\n *\n * @param  {Number} degree\n */\nReedSolomonEncoder.prototype.initialize = function initialize (degree) {\n  // create an irreducible generator polynomial\n  this.degree = degree\n  this.genPoly = Polynomial.generateECPolynomial(this.degree)\n}\n\n/**\n * Encodes a chunk of data\n *\n * @param  {Uint8Array} data Buffer containing input data\n * @return {Uint8Array}      Buffer containing encoded data\n */\nReedSolomonEncoder.prototype.encode = function encode (data) {\n  if (!this.genPoly) {\n    throw new Error('Encoder not initialized')\n  }\n\n  // Calculate EC for this data block\n  // extends data size to data+genPoly size\n  const paddedData = new Uint8Array(data.length + this.degree)\n  paddedData.set(data)\n\n  // The error correction codewords are the remainder after dividing the data codewords\n  // by a generator polynomial\n  const remainder = Polynomial.mod(paddedData, this.genPoly)\n\n  // return EC data blocks (last n byte, where n is the degree of genPoly)\n  // If coefficients number in remainder are less than genPoly degree,\n  // pad with 0s to the left to reach the needed number of coefficients\n  const start = this.degree - remainder.length\n  if (start > 0) {\n    const buff = new Uint8Array(this.degree)\n    buff.set(remainder, start)\n\n    return buff\n  }\n\n  return remainder\n}\n\nmodule.exports = ReedSolomonEncoder\n","/**\n * Check if QR Code version is valid\n *\n * @param  {Number}  version QR Code version\n * @return {Boolean}         true if valid version, false otherwise\n */\nexports.isValid = function isValid (version) {\n  return !isNaN(version) && version >= 1 && version <= 40\n}\n","const numeric = '[0-9]+'\nconst alphanumeric = '[A-Z $%*+\\\\-./:]+'\nlet kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' +\n  '[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|' +\n  '[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|' +\n  '[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+'\nkanji = kanji.replace(/u/g, '\\\\u')\n\nconst byte = '(?:(?![A-Z0-9 $%*+\\\\-./:]|' + kanji + ')(?:.|[\\r\\n]))+'\n\nexports.KANJI = new RegExp(kanji, 'g')\nexports.BYTE_KANJI = new RegExp('[^A-Z0-9 $%*+\\\\-./:]+', 'g')\nexports.BYTE = new RegExp(byte, 'g')\nexports.NUMERIC = new RegExp(numeric, 'g')\nexports.ALPHANUMERIC = new RegExp(alphanumeric, 'g')\n\nconst TEST_KANJI = new RegExp('^' + kanji + '$')\nconst TEST_NUMERIC = new RegExp('^' + numeric + '$')\nconst TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\\\-./:]+$')\n\nexports.testKanji = function testKanji (str) {\n  return TEST_KANJI.test(str)\n}\n\nexports.testNumeric = function testNumeric (str) {\n  return TEST_NUMERIC.test(str)\n}\n\nexports.testAlphanumeric = function testAlphanumeric (str) {\n  return TEST_ALPHANUMERIC.test(str)\n}\n","const VersionCheck = require('./version-check')\nconst Regex = require('./regex')\n\n/**\n * Numeric mode encodes data from the decimal digit set (0 - 9)\n * (byte values 30HEX to 39HEX).\n * Normally, 3 data characters are represented by 10 bits.\n *\n * @type {Object}\n */\nexports.NUMERIC = {\n  id: 'Numeric',\n  bit: 1 << 0,\n  ccBits: [10, 12, 14]\n}\n\n/**\n * Alphanumeric mode encodes data from a set of 45 characters,\n * i.e. 10 numeric digits (0 - 9),\n *      26 alphabetic characters (A - Z),\n *   and 9 symbols (SP, $, %, *, +, -, ., /, :).\n * Normally, two input characters are represented by 11 bits.\n *\n * @type {Object}\n */\nexports.ALPHANUMERIC = {\n  id: 'Alphanumeric',\n  bit: 1 << 1,\n  ccBits: [9, 11, 13]\n}\n\n/**\n * In byte mode, data is encoded at 8 bits per character.\n *\n * @type {Object}\n */\nexports.BYTE = {\n  id: 'Byte',\n  bit: 1 << 2,\n  ccBits: [8, 16, 16]\n}\n\n/**\n * The Kanji mode efficiently encodes Kanji characters in accordance with\n * the Shift JIS system based on JIS X 0208.\n * The Shift JIS values are shifted from the JIS X 0208 values.\n * JIS X 0208 gives details of the shift coded representation.\n * Each two-byte character value is compacted to a 13-bit binary codeword.\n *\n * @type {Object}\n */\nexports.KANJI = {\n  id: 'Kanji',\n  bit: 1 << 3,\n  ccBits: [8, 10, 12]\n}\n\n/**\n * Mixed mode will contain a sequences of data in a combination of any of\n * the modes described above\n *\n * @type {Object}\n */\nexports.MIXED = {\n  bit: -1\n}\n\n/**\n * Returns the number of bits needed to store the data length\n * according to QR Code specifications.\n *\n * @param  {Mode}   mode    Data mode\n * @param  {Number} version QR Code version\n * @return {Number}         Number of bits\n */\nexports.getCharCountIndicator = function getCharCountIndicator (mode, version) {\n  if (!mode.ccBits) throw new Error('Invalid mode: ' + mode)\n\n  if (!VersionCheck.isValid(version)) {\n    throw new Error('Invalid version: ' + version)\n  }\n\n  if (version >= 1 && version < 10) return mode.ccBits[0]\n  else if (version < 27) return mode.ccBits[1]\n  return mode.ccBits[2]\n}\n\n/**\n * Returns the most efficient mode to store the specified data\n *\n * @param  {String} dataStr Input data string\n * @return {Mode}           Best mode\n */\nexports.getBestModeForData = function getBestModeForData (dataStr) {\n  if (Regex.testNumeric(dataStr)) return exports.NUMERIC\n  else if (Regex.testAlphanumeric(dataStr)) return exports.ALPHANUMERIC\n  else if (Regex.testKanji(dataStr)) return exports.KANJI\n  else return exports.BYTE\n}\n\n/**\n * Return mode name as string\n *\n * @param {Mode} mode Mode object\n * @returns {String}  Mode name\n */\nexports.toString = function toString (mode) {\n  if (mode && mode.id) return mode.id\n  throw new Error('Invalid mode')\n}\n\n/**\n * Check if input param is a valid mode object\n *\n * @param   {Mode}    mode Mode object\n * @returns {Boolean} True if valid mode, false otherwise\n */\nexports.isValid = function isValid (mode) {\n  return mode && mode.bit && mode.ccBits\n}\n\n/**\n * Get mode object from its name\n *\n * @param   {String} string Mode name\n * @returns {Mode}          Mode object\n */\nfunction fromString (string) {\n  if (typeof string !== 'string') {\n    throw new Error('Param is not a string')\n  }\n\n  const lcStr = string.toLowerCase()\n\n  switch (lcStr) {\n    case 'numeric':\n      return exports.NUMERIC\n    case 'alphanumeric':\n      return exports.ALPHANUMERIC\n    case 'kanji':\n      return exports.KANJI\n    case 'byte':\n      return exports.BYTE\n    default:\n      throw new Error('Unknown mode: ' + string)\n  }\n}\n\n/**\n * Returns mode from a value.\n * If value is not a valid mode, returns defaultValue\n *\n * @param  {Mode|String} value        Encoding mode\n * @param  {Mode}        defaultValue Fallback value\n * @return {Mode}                     Encoding mode\n */\nexports.from = function from (value, defaultValue) {\n  if (exports.isValid(value)) {\n    return value\n  }\n\n  try {\n    return fromString(value)\n  } catch (e) {\n    return defaultValue\n  }\n}\n","const Utils = require('./utils')\nconst ECCode = require('./error-correction-code')\nconst ECLevel = require('./error-correction-level')\nconst Mode = require('./mode')\nconst VersionCheck = require('./version-check')\n\n// Generator polynomial used to encode version information\nconst G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0)\nconst G18_BCH = Utils.getBCHDigit(G18)\n\nfunction getBestVersionForDataLength (mode, length, errorCorrectionLevel) {\n  for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n    if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, mode)) {\n      return currentVersion\n    }\n  }\n\n  return undefined\n}\n\nfunction getReservedBitsCount (mode, version) {\n  // Character count indicator + mode indicator bits\n  return Mode.getCharCountIndicator(mode, version) + 4\n}\n\nfunction getTotalBitsFromDataArray (segments, version) {\n  let totalBits = 0\n\n  segments.forEach(function (data) {\n    const reservedBits = getReservedBitsCount(data.mode, version)\n    totalBits += reservedBits + data.getBitsLength()\n  })\n\n  return totalBits\n}\n\nfunction getBestVersionForMixedData (segments, errorCorrectionLevel) {\n  for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n    const length = getTotalBitsFromDataArray(segments, currentVersion)\n    if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, Mode.MIXED)) {\n      return currentVersion\n    }\n  }\n\n  return undefined\n}\n\n/**\n * Returns version number from a value.\n * If value is not a valid version, returns defaultValue\n *\n * @param  {Number|String} value        QR Code version\n * @param  {Number}        defaultValue Fallback value\n * @return {Number}                     QR Code version number\n */\nexports.from = function from (value, defaultValue) {\n  if (VersionCheck.isValid(value)) {\n    return parseInt(value, 10)\n  }\n\n  return defaultValue\n}\n\n/**\n * Returns how much data can be stored with the specified QR code version\n * and error correction level\n *\n * @param  {Number} version              QR Code version (1-40)\n * @param  {Number} errorCorrectionLevel Error correction level\n * @param  {Mode}   mode                 Data mode\n * @return {Number}                      Quantity of storable data\n */\nexports.getCapacity = function getCapacity (version, errorCorrectionLevel, mode) {\n  if (!VersionCheck.isValid(version)) {\n    throw new Error('Invalid QR Code version')\n  }\n\n  // Use Byte mode as default\n  if (typeof mode === 'undefined') mode = Mode.BYTE\n\n  // Total codewords for this QR code version (Data + Error correction)\n  const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n  // Total number of error correction codewords\n  const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n  // Total number of data codewords\n  const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n  if (mode === Mode.MIXED) return dataTotalCodewordsBits\n\n  const usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode, version)\n\n  // Return max number of storable codewords\n  switch (mode) {\n    case Mode.NUMERIC:\n      return Math.floor((usableBits / 10) * 3)\n\n    case Mode.ALPHANUMERIC:\n      return Math.floor((usableBits / 11) * 2)\n\n    case Mode.KANJI:\n      return Math.floor(usableBits / 13)\n\n    case Mode.BYTE:\n    default:\n      return Math.floor(usableBits / 8)\n  }\n}\n\n/**\n * Returns the minimum version needed to contain the amount of data\n *\n * @param  {Segment} data                    Segment of data\n * @param  {Number} [errorCorrectionLevel=H] Error correction level\n * @param  {Mode} mode                       Data mode\n * @return {Number}                          QR Code version\n */\nexports.getBestVersionForData = function getBestVersionForData (data, errorCorrectionLevel) {\n  let seg\n\n  const ecl = ECLevel.from(errorCorrectionLevel, ECLevel.M)\n\n  if (Array.isArray(data)) {\n    if (data.length > 1) {\n      return getBestVersionForMixedData(data, ecl)\n    }\n\n    if (data.length === 0) {\n      return 1\n    }\n\n    seg = data[0]\n  } else {\n    seg = data\n  }\n\n  return getBestVersionForDataLength(seg.mode, seg.getLength(), ecl)\n}\n\n/**\n * Returns version information with relative error correction bits\n *\n * The version information is included in QR Code symbols of version 7 or larger.\n * It consists of an 18-bit sequence containing 6 data bits,\n * with 12 error correction bits calculated using the (18, 6) Golay code.\n *\n * @param  {Number} version QR Code version\n * @return {Number}         Encoded version info bits\n */\nexports.getEncodedBits = function getEncodedBits (version) {\n  if (!VersionCheck.isValid(version) || version < 7) {\n    throw new Error('Invalid QR Code version')\n  }\n\n  let d = version << 12\n\n  while (Utils.getBCHDigit(d) - G18_BCH >= 0) {\n    d ^= (G18 << (Utils.getBCHDigit(d) - G18_BCH))\n  }\n\n  return (version << 12) | d\n}\n","const Utils = require('./utils')\n\nconst G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0)\nconst G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1)\nconst G15_BCH = Utils.getBCHDigit(G15)\n\n/**\n * Returns format information with relative error correction bits\n *\n * The format information is a 15-bit sequence containing 5 data bits,\n * with 10 error correction bits calculated using the (15, 5) BCH code.\n *\n * @param  {Number} errorCorrectionLevel Error correction level\n * @param  {Number} mask                 Mask pattern\n * @return {Number}                      Encoded format information bits\n */\nexports.getEncodedBits = function getEncodedBits (errorCorrectionLevel, mask) {\n  const data = ((errorCorrectionLevel.bit << 3) | mask)\n  let d = data << 10\n\n  while (Utils.getBCHDigit(d) - G15_BCH >= 0) {\n    d ^= (G15 << (Utils.getBCHDigit(d) - G15_BCH))\n  }\n\n  // xor final data with mask pattern in order to ensure that\n  // no combination of Error Correction Level and data mask pattern\n  // will result in an all-zero data string\n  return ((data << 10) | d) ^ G15_MASK\n}\n","const Mode = require('./mode')\n\nfunction NumericData (data) {\n  this.mode = Mode.NUMERIC\n  this.data = data.toString()\n}\n\nNumericData.getBitsLength = function getBitsLength (length) {\n  return 10 * Math.floor(length / 3) + ((length % 3) ? ((length % 3) * 3 + 1) : 0)\n}\n\nNumericData.prototype.getLength = function getLength () {\n  return this.data.length\n}\n\nNumericData.prototype.getBitsLength = function getBitsLength () {\n  return NumericData.getBitsLength(this.data.length)\n}\n\nNumericData.prototype.write = function write (bitBuffer) {\n  let i, group, value\n\n  // The input data string is divided into groups of three digits,\n  // and each group is converted to its 10-bit binary equivalent.\n  for (i = 0; i + 3 <= this.data.length; i += 3) {\n    group = this.data.substr(i, 3)\n    value = parseInt(group, 10)\n\n    bitBuffer.put(value, 10)\n  }\n\n  // If the number of input digits is not an exact multiple of three,\n  // the final one or two digits are converted to 4 or 7 bits respectively.\n  const remainingNum = this.data.length - i\n  if (remainingNum > 0) {\n    group = this.data.substr(i)\n    value = parseInt(group, 10)\n\n    bitBuffer.put(value, remainingNum * 3 + 1)\n  }\n}\n\nmodule.exports = NumericData\n","const Mode = require('./mode')\n\n/**\n * Array of characters available in alphanumeric mode\n *\n * As per QR Code specification, to each character\n * is assigned a value from 0 to 44 which in this case coincides\n * with the array index\n *\n * @type {Array}\n */\nconst ALPHA_NUM_CHARS = [\n  '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\n  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',\n  ' ', '$', '%', '*', '+', '-', '.', '/', ':'\n]\n\nfunction AlphanumericData (data) {\n  this.mode = Mode.ALPHANUMERIC\n  this.data = data\n}\n\nAlphanumericData.getBitsLength = function getBitsLength (length) {\n  return 11 * Math.floor(length / 2) + 6 * (length % 2)\n}\n\nAlphanumericData.prototype.getLength = function getLength () {\n  return this.data.length\n}\n\nAlphanumericData.prototype.getBitsLength = function getBitsLength () {\n  return AlphanumericData.getBitsLength(this.data.length)\n}\n\nAlphanumericData.prototype.write = function write (bitBuffer) {\n  let i\n\n  // Input data characters are divided into groups of two characters\n  // and encoded as 11-bit binary codes.\n  for (i = 0; i + 2 <= this.data.length; i += 2) {\n    // The character value of the first character is multiplied by 45\n    let value = ALPHA_NUM_CHARS.indexOf(this.data[i]) * 45\n\n    // The character value of the second digit is added to the product\n    value += ALPHA_NUM_CHARS.indexOf(this.data[i + 1])\n\n    // The sum is then stored as 11-bit binary number\n    bitBuffer.put(value, 11)\n  }\n\n  // If the number of input data characters is not a multiple of two,\n  // the character value of the final character is encoded as a 6-bit binary number.\n  if (this.data.length % 2) {\n    bitBuffer.put(ALPHA_NUM_CHARS.indexOf(this.data[i]), 6)\n  }\n}\n\nmodule.exports = AlphanumericData\n","const Mode = require('./mode')\n\nfunction ByteData (data) {\n  this.mode = Mode.BYTE\n  if (typeof (data) === 'string') {\n    this.data = new TextEncoder().encode(data)\n  } else {\n    this.data = new Uint8Array(data)\n  }\n}\n\nByteData.getBitsLength = function getBitsLength (length) {\n  return length * 8\n}\n\nByteData.prototype.getLength = function getLength () {\n  return this.data.length\n}\n\nByteData.prototype.getBitsLength = function getBitsLength () {\n  return ByteData.getBitsLength(this.data.length)\n}\n\nByteData.prototype.write = function (bitBuffer) {\n  for (let i = 0, l = this.data.length; i < l; i++) {\n    bitBuffer.put(this.data[i], 8)\n  }\n}\n\nmodule.exports = ByteData\n","const Mode = require('./mode')\nconst Utils = require('./utils')\n\nfunction KanjiData (data) {\n  this.mode = Mode.KANJI\n  this.data = data\n}\n\nKanjiData.getBitsLength = function getBitsLength (length) {\n  return length * 13\n}\n\nKanjiData.prototype.getLength = function getLength () {\n  return this.data.length\n}\n\nKanjiData.prototype.getBitsLength = function getBitsLength () {\n  return KanjiData.getBitsLength(this.data.length)\n}\n\nKanjiData.prototype.write = function (bitBuffer) {\n  let i\n\n  // In the Shift JIS system, Kanji characters are represented by a two byte combination.\n  // These byte values are shifted from the JIS X 0208 values.\n  // JIS X 0208 gives details of the shift coded representation.\n  for (i = 0; i < this.data.length; i++) {\n    let value = Utils.toSJIS(this.data[i])\n\n    // For characters with Shift JIS values from 0x8140 to 0x9FFC:\n    if (value >= 0x8140 && value <= 0x9FFC) {\n      // Subtract 0x8140 from Shift JIS value\n      value -= 0x8140\n\n    // For characters with Shift JIS values from 0xE040 to 0xEBBF\n    } else if (value >= 0xE040 && value <= 0xEBBF) {\n      // Subtract 0xC140 from Shift JIS value\n      value -= 0xC140\n    } else {\n      throw new Error(\n        'Invalid SJIS character: ' + this.data[i] + '\\n' +\n        'Make sure your charset is UTF-8')\n    }\n\n    // Multiply most significant byte of result by 0xC0\n    // and add least significant byte to product\n    value = (((value >>> 8) & 0xff) * 0xC0) + (value & 0xff)\n\n    // Convert result to a 13-bit binary string\n    bitBuffer.put(value, 13)\n  }\n}\n\nmodule.exports = KanjiData\n","'use strict';\n\n/******************************************************************************\n * Created 2008-08-19.\n *\n * Dijkstra path-finding functions. Adapted from the Dijkstar Python project.\n *\n * Copyright (C) 2008\n *   Wyatt Baldwin <self@wyattbaldwin.com>\n *   All rights reserved\n *\n * Licensed under the MIT license.\n *\n *   http://www.opensource.org/licenses/mit-license.php\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *****************************************************************************/\nvar dijkstra = {\n  single_source_shortest_paths: function(graph, s, d) {\n    // Predecessor map for each node that has been encountered.\n    // node ID => predecessor node ID\n    var predecessors = {};\n\n    // Costs of shortest paths from s to all nodes encountered.\n    // node ID => cost\n    var costs = {};\n    costs[s] = 0;\n\n    // Costs of shortest paths from s to all nodes encountered; differs from\n    // `costs` in that it provides easy access to the node that currently has\n    // the known shortest path from s.\n    // XXX: Do we actually need both `costs` and `open`?\n    var open = dijkstra.PriorityQueue.make();\n    open.push(s, 0);\n\n    var closest,\n        u, v,\n        cost_of_s_to_u,\n        adjacent_nodes,\n        cost_of_e,\n        cost_of_s_to_u_plus_cost_of_e,\n        cost_of_s_to_v,\n        first_visit;\n    while (!open.empty()) {\n      // In the nodes remaining in graph that have a known cost from s,\n      // find the node, u, that currently has the shortest path from s.\n      closest = open.pop();\n      u = closest.value;\n      cost_of_s_to_u = closest.cost;\n\n      // Get nodes adjacent to u...\n      adjacent_nodes = graph[u] || {};\n\n      // ...and explore the edges that connect u to those nodes, updating\n      // the cost of the shortest paths to any or all of those nodes as\n      // necessary. v is the node across the current edge from u.\n      for (v in adjacent_nodes) {\n        if (adjacent_nodes.hasOwnProperty(v)) {\n          // Get the cost of the edge running from u to v.\n          cost_of_e = adjacent_nodes[v];\n\n          // Cost of s to u plus the cost of u to v across e--this is *a*\n          // cost from s to v that may or may not be less than the current\n          // known cost to v.\n          cost_of_s_to_u_plus_cost_of_e = cost_of_s_to_u + cost_of_e;\n\n          // If we haven't visited v yet OR if the current known cost from s to\n          // v is greater than the new cost we just found (cost of s to u plus\n          // cost of u to v across e), update v's cost in the cost list and\n          // update v's predecessor in the predecessor list (it's now u).\n          cost_of_s_to_v = costs[v];\n          first_visit = (typeof costs[v] === 'undefined');\n          if (first_visit || cost_of_s_to_v > cost_of_s_to_u_plus_cost_of_e) {\n            costs[v] = cost_of_s_to_u_plus_cost_of_e;\n            open.push(v, cost_of_s_to_u_plus_cost_of_e);\n            predecessors[v] = u;\n          }\n        }\n      }\n    }\n\n    if (typeof d !== 'undefined' && typeof costs[d] === 'undefined') {\n      var msg = ['Could not find a path from ', s, ' to ', d, '.'].join('');\n      throw new Error(msg);\n    }\n\n    return predecessors;\n  },\n\n  extract_shortest_path_from_predecessor_list: function(predecessors, d) {\n    var nodes = [];\n    var u = d;\n    var predecessor;\n    while (u) {\n      nodes.push(u);\n      predecessor = predecessors[u];\n      u = predecessors[u];\n    }\n    nodes.reverse();\n    return nodes;\n  },\n\n  find_path: function(graph, s, d) {\n    var predecessors = dijkstra.single_source_shortest_paths(graph, s, d);\n    return dijkstra.extract_shortest_path_from_predecessor_list(\n      predecessors, d);\n  },\n\n  /**\n   * A very naive priority queue implementation.\n   */\n  PriorityQueue: {\n    make: function (opts) {\n      var T = dijkstra.PriorityQueue,\n          t = {},\n          key;\n      opts = opts || {};\n      for (key in T) {\n        if (T.hasOwnProperty(key)) {\n          t[key] = T[key];\n        }\n      }\n      t.queue = [];\n      t.sorter = opts.sorter || T.default_sorter;\n      return t;\n    },\n\n    default_sorter: function (a, b) {\n      return a.cost - b.cost;\n    },\n\n    /**\n     * Add a new item to the queue and ensure the highest priority element\n     * is at the front of the queue.\n     */\n    push: function (value, cost) {\n      var item = {value: value, cost: cost};\n      this.queue.push(item);\n      this.queue.sort(this.sorter);\n    },\n\n    /**\n     * Return the highest priority element in the queue.\n     */\n    pop: function () {\n      return this.queue.shift();\n    },\n\n    empty: function () {\n      return this.queue.length === 0;\n    }\n  }\n};\n\n\n// node.js module exports\nif (typeof module !== 'undefined') {\n  module.exports = dijkstra;\n}\n","const Mode = require('./mode')\nconst NumericData = require('./numeric-data')\nconst AlphanumericData = require('./alphanumeric-data')\nconst ByteData = require('./byte-data')\nconst KanjiData = require('./kanji-data')\nconst Regex = require('./regex')\nconst Utils = require('./utils')\nconst dijkstra = require('dijkstrajs')\n\n/**\n * Returns UTF8 byte length\n *\n * @param  {String} str Input string\n * @return {Number}     Number of byte\n */\nfunction getStringByteLength (str) {\n  return unescape(encodeURIComponent(str)).length\n}\n\n/**\n * Get a list of segments of the specified mode\n * from a string\n *\n * @param  {Mode}   mode Segment mode\n * @param  {String} str  String to process\n * @return {Array}       Array of object with segments data\n */\nfunction getSegments (regex, mode, str) {\n  const segments = []\n  let result\n\n  while ((result = regex.exec(str)) !== null) {\n    segments.push({\n      data: result[0],\n      index: result.index,\n      mode: mode,\n      length: result[0].length\n    })\n  }\n\n  return segments\n}\n\n/**\n * Extracts a series of segments with the appropriate\n * modes from a string\n *\n * @param  {String} dataStr Input string\n * @return {Array}          Array of object with segments data\n */\nfunction getSegmentsFromString (dataStr) {\n  const numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr)\n  const alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr)\n  let byteSegs\n  let kanjiSegs\n\n  if (Utils.isKanjiModeEnabled()) {\n    byteSegs = getSegments(Regex.BYTE, Mode.BYTE, dataStr)\n    kanjiSegs = getSegments(Regex.KANJI, Mode.KANJI, dataStr)\n  } else {\n    byteSegs = getSegments(Regex.BYTE_KANJI, Mode.BYTE, dataStr)\n    kanjiSegs = []\n  }\n\n  const segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs)\n\n  return segs\n    .sort(function (s1, s2) {\n      return s1.index - s2.index\n    })\n    .map(function (obj) {\n      return {\n        data: obj.data,\n        mode: obj.mode,\n        length: obj.length\n      }\n    })\n}\n\n/**\n * Returns how many bits are needed to encode a string of\n * specified length with the specified mode\n *\n * @param  {Number} length String length\n * @param  {Mode} mode     Segment mode\n * @return {Number}        Bit length\n */\nfunction getSegmentBitsLength (length, mode) {\n  switch (mode) {\n    case Mode.NUMERIC:\n      return NumericData.getBitsLength(length)\n    case Mode.ALPHANUMERIC:\n      return AlphanumericData.getBitsLength(length)\n    case Mode.KANJI:\n      return KanjiData.getBitsLength(length)\n    case Mode.BYTE:\n      return ByteData.getBitsLength(length)\n  }\n}\n\n/**\n * Merges adjacent segments which have the same mode\n *\n * @param  {Array} segs Array of object with segments data\n * @return {Array}      Array of object with segments data\n */\nfunction mergeSegments (segs) {\n  return segs.reduce(function (acc, curr) {\n    const prevSeg = acc.length - 1 >= 0 ? acc[acc.length - 1] : null\n    if (prevSeg && prevSeg.mode === curr.mode) {\n      acc[acc.length - 1].data += curr.data\n      return acc\n    }\n\n    acc.push(curr)\n    return acc\n  }, [])\n}\n\n/**\n * Generates a list of all possible nodes combination which\n * will be used to build a segments graph.\n *\n * Nodes are divided by groups. Each group will contain a list of all the modes\n * in which is possible to encode the given text.\n *\n * For example the text '12345' can be encoded as Numeric, Alphanumeric or Byte.\n * The group for '12345' will contain then 3 objects, one for each\n * possible encoding mode.\n *\n * Each node represents a possible segment.\n *\n * @param  {Array} segs Array of object with segments data\n * @return {Array}      Array of object with segments data\n */\nfunction buildNodes (segs) {\n  const nodes = []\n  for (let i = 0; i < segs.length; i++) {\n    const seg = segs[i]\n\n    switch (seg.mode) {\n      case Mode.NUMERIC:\n        nodes.push([seg,\n          { data: seg.data, mode: Mode.ALPHANUMERIC, length: seg.length },\n          { data: seg.data, mode: Mode.BYTE, length: seg.length }\n        ])\n        break\n      case Mode.ALPHANUMERIC:\n        nodes.push([seg,\n          { data: seg.data, mode: Mode.BYTE, length: seg.length }\n        ])\n        break\n      case Mode.KANJI:\n        nodes.push([seg,\n          { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n        ])\n        break\n      case Mode.BYTE:\n        nodes.push([\n          { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n        ])\n    }\n  }\n\n  return nodes\n}\n\n/**\n * Builds a graph from a list of nodes.\n * All segments in each node group will be connected with all the segments of\n * the next group and so on.\n *\n * At each connection will be assigned a weight depending on the\n * segment's byte length.\n *\n * @param  {Array} nodes    Array of object with segments data\n * @param  {Number} version QR Code version\n * @return {Object}         Graph of all possible segments\n */\nfunction buildGraph (nodes, version) {\n  const table = {}\n  const graph = { start: {} }\n  let prevNodeIds = ['start']\n\n  for (let i = 0; i < nodes.length; i++) {\n    const nodeGroup = nodes[i]\n    const currentNodeIds = []\n\n    for (let j = 0; j < nodeGroup.length; j++) {\n      const node = nodeGroup[j]\n      const key = '' + i + j\n\n      currentNodeIds.push(key)\n      table[key] = { node: node, lastCount: 0 }\n      graph[key] = {}\n\n      for (let n = 0; n < prevNodeIds.length; n++) {\n        const prevNodeId = prevNodeIds[n]\n\n        if (table[prevNodeId] && table[prevNodeId].node.mode === node.mode) {\n          graph[prevNodeId][key] =\n            getSegmentBitsLength(table[prevNodeId].lastCount + node.length, node.mode) -\n            getSegmentBitsLength(table[prevNodeId].lastCount, node.mode)\n\n          table[prevNodeId].lastCount += node.length\n        } else {\n          if (table[prevNodeId]) table[prevNodeId].lastCount = node.length\n\n          graph[prevNodeId][key] = getSegmentBitsLength(node.length, node.mode) +\n            4 + Mode.getCharCountIndicator(node.mode, version) // switch cost\n        }\n      }\n    }\n\n    prevNodeIds = currentNodeIds\n  }\n\n  for (let n = 0; n < prevNodeIds.length; n++) {\n    graph[prevNodeIds[n]].end = 0\n  }\n\n  return { map: graph, table: table }\n}\n\n/**\n * Builds a segment from a specified data and mode.\n * If a mode is not specified, the more suitable will be used.\n *\n * @param  {String} data             Input data\n * @param  {Mode | String} modesHint Data mode\n * @return {Segment}                 Segment\n */\nfunction buildSingleSegment (data, modesHint) {\n  let mode\n  const bestMode = Mode.getBestModeForData(data)\n\n  mode = Mode.from(modesHint, bestMode)\n\n  // Make sure data can be encoded\n  if (mode !== Mode.BYTE && mode.bit < bestMode.bit) {\n    throw new Error('\"' + data + '\"' +\n      ' cannot be encoded with mode ' + Mode.toString(mode) +\n      '.\\n Suggested mode is: ' + Mode.toString(bestMode))\n  }\n\n  // Use Mode.BYTE if Kanji support is disabled\n  if (mode === Mode.KANJI && !Utils.isKanjiModeEnabled()) {\n    mode = Mode.BYTE\n  }\n\n  switch (mode) {\n    case Mode.NUMERIC:\n      return new NumericData(data)\n\n    case Mode.ALPHANUMERIC:\n      return new AlphanumericData(data)\n\n    case Mode.KANJI:\n      return new KanjiData(data)\n\n    case Mode.BYTE:\n      return new ByteData(data)\n  }\n}\n\n/**\n * Builds a list of segments from an array.\n * Array can contain Strings or Objects with segment's info.\n *\n * For each item which is a string, will be generated a segment with the given\n * string and the more appropriate encoding mode.\n *\n * For each item which is an object, will be generated a segment with the given\n * data and mode.\n * Objects must contain at least the property \"data\".\n * If property \"mode\" is not present, the more suitable mode will be used.\n *\n * @param  {Array} array Array of objects with segments data\n * @return {Array}       Array of Segments\n */\nexports.fromArray = function fromArray (array) {\n  return array.reduce(function (acc, seg) {\n    if (typeof seg === 'string') {\n      acc.push(buildSingleSegment(seg, null))\n    } else if (seg.data) {\n      acc.push(buildSingleSegment(seg.data, seg.mode))\n    }\n\n    return acc\n  }, [])\n}\n\n/**\n * Builds an optimized sequence of segments from a string,\n * which will produce the shortest possible bitstream.\n *\n * @param  {String} data    Input string\n * @param  {Number} version QR Code version\n * @return {Array}          Array of segments\n */\nexports.fromString = function fromString (data, version) {\n  const segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n\n  const nodes = buildNodes(segs)\n  const graph = buildGraph(nodes, version)\n  const path = dijkstra.find_path(graph.map, 'start', 'end')\n\n  const optimizedSegs = []\n  for (let i = 1; i < path.length - 1; i++) {\n    optimizedSegs.push(graph.table[path[i]].node)\n  }\n\n  return exports.fromArray(mergeSegments(optimizedSegs))\n}\n\n/**\n * Splits a string in various segments with the modes which\n * best represent their content.\n * The produced segments are far from being optimized.\n * The output of this function is only used to estimate a QR Code version\n * which may contain the data.\n *\n * @param  {string} data Input string\n * @return {Array}       Array of segments\n */\nexports.rawSplit = function rawSplit (data) {\n  return exports.fromArray(\n    getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n  )\n}\n","const Utils = require('./utils')\nconst ECLevel = require('./error-correction-level')\nconst BitBuffer = require('./bit-buffer')\nconst BitMatrix = require('./bit-matrix')\nconst AlignmentPattern = require('./alignment-pattern')\nconst FinderPattern = require('./finder-pattern')\nconst MaskPattern = require('./mask-pattern')\nconst ECCode = require('./error-correction-code')\nconst ReedSolomonEncoder = require('./reed-solomon-encoder')\nconst Version = require('./version')\nconst FormatInfo = require('./format-info')\nconst Mode = require('./mode')\nconst Segments = require('./segments')\n\n/**\n * QRCode for JavaScript\n *\n * modified by Ryan Day for nodejs support\n * Copyright (c) 2011 Ryan Day\n *\n * Licensed under the MIT license:\n *   http://www.opensource.org/licenses/mit-license.php\n *\n//---------------------------------------------------------------------\n// QRCode for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n//   http://www.opensource.org/licenses/mit-license.php\n//\n// The word \"QR Code\" is registered trademark of\n// DENSO WAVE INCORPORATED\n//   http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n*/\n\n/**\n * Add finder patterns bits to matrix\n *\n * @param  {BitMatrix} matrix  Modules matrix\n * @param  {Number}    version QR Code version\n */\nfunction setupFinderPattern (matrix, version) {\n  const size = matrix.size\n  const pos = FinderPattern.getPositions(version)\n\n  for (let i = 0; i < pos.length; i++) {\n    const row = pos[i][0]\n    const col = pos[i][1]\n\n    for (let r = -1; r <= 7; r++) {\n      if (row + r <= -1 || size <= row + r) continue\n\n      for (let c = -1; c <= 7; c++) {\n        if (col + c <= -1 || size <= col + c) continue\n\n        if ((r >= 0 && r <= 6 && (c === 0 || c === 6)) ||\n          (c >= 0 && c <= 6 && (r === 0 || r === 6)) ||\n          (r >= 2 && r <= 4 && c >= 2 && c <= 4)) {\n          matrix.set(row + r, col + c, true, true)\n        } else {\n          matrix.set(row + r, col + c, false, true)\n        }\n      }\n    }\n  }\n}\n\n/**\n * Add timing pattern bits to matrix\n *\n * Note: this function must be called before {@link setupAlignmentPattern}\n *\n * @param  {BitMatrix} matrix Modules matrix\n */\nfunction setupTimingPattern (matrix) {\n  const size = matrix.size\n\n  for (let r = 8; r < size - 8; r++) {\n    const value = r % 2 === 0\n    matrix.set(r, 6, value, true)\n    matrix.set(6, r, value, true)\n  }\n}\n\n/**\n * Add alignment patterns bits to matrix\n *\n * Note: this function must be called after {@link setupTimingPattern}\n *\n * @param  {BitMatrix} matrix  Modules matrix\n * @param  {Number}    version QR Code version\n */\nfunction setupAlignmentPattern (matrix, version) {\n  const pos = AlignmentPattern.getPositions(version)\n\n  for (let i = 0; i < pos.length; i++) {\n    const row = pos[i][0]\n    const col = pos[i][1]\n\n    for (let r = -2; r <= 2; r++) {\n      for (let c = -2; c <= 2; c++) {\n        if (r === -2 || r === 2 || c === -2 || c === 2 ||\n          (r === 0 && c === 0)) {\n          matrix.set(row + r, col + c, true, true)\n        } else {\n          matrix.set(row + r, col + c, false, true)\n        }\n      }\n    }\n  }\n}\n\n/**\n * Add version info bits to matrix\n *\n * @param  {BitMatrix} matrix  Modules matrix\n * @param  {Number}    version QR Code version\n */\nfunction setupVersionInfo (matrix, version) {\n  const size = matrix.size\n  const bits = Version.getEncodedBits(version)\n  let row, col, mod\n\n  for (let i = 0; i < 18; i++) {\n    row = Math.floor(i / 3)\n    col = i % 3 + size - 8 - 3\n    mod = ((bits >> i) & 1) === 1\n\n    matrix.set(row, col, mod, true)\n    matrix.set(col, row, mod, true)\n  }\n}\n\n/**\n * Add format info bits to matrix\n *\n * @param  {BitMatrix} matrix               Modules matrix\n * @param  {ErrorCorrectionLevel}    errorCorrectionLevel Error correction level\n * @param  {Number}    maskPattern          Mask pattern reference value\n */\nfunction setupFormatInfo (matrix, errorCorrectionLevel, maskPattern) {\n  const size = matrix.size\n  const bits = FormatInfo.getEncodedBits(errorCorrectionLevel, maskPattern)\n  let i, mod\n\n  for (i = 0; i < 15; i++) {\n    mod = ((bits >> i) & 1) === 1\n\n    // vertical\n    if (i < 6) {\n      matrix.set(i, 8, mod, true)\n    } else if (i < 8) {\n      matrix.set(i + 1, 8, mod, true)\n    } else {\n      matrix.set(size - 15 + i, 8, mod, true)\n    }\n\n    // horizontal\n    if (i < 8) {\n      matrix.set(8, size - i - 1, mod, true)\n    } else if (i < 9) {\n      matrix.set(8, 15 - i - 1 + 1, mod, true)\n    } else {\n      matrix.set(8, 15 - i - 1, mod, true)\n    }\n  }\n\n  // fixed module\n  matrix.set(size - 8, 8, 1, true)\n}\n\n/**\n * Add encoded data bits to matrix\n *\n * @param  {BitMatrix}  matrix Modules matrix\n * @param  {Uint8Array} data   Data codewords\n */\nfunction setupData (matrix, data) {\n  const size = matrix.size\n  let inc = -1\n  let row = size - 1\n  let bitIndex = 7\n  let byteIndex = 0\n\n  for (let col = size - 1; col > 0; col -= 2) {\n    if (col === 6) col--\n\n    while (true) {\n      for (let c = 0; c < 2; c++) {\n        if (!matrix.isReserved(row, col - c)) {\n          let dark = false\n\n          if (byteIndex < data.length) {\n            dark = (((data[byteIndex] >>> bitIndex) & 1) === 1)\n          }\n\n          matrix.set(row, col - c, dark)\n          bitIndex--\n\n          if (bitIndex === -1) {\n            byteIndex++\n            bitIndex = 7\n          }\n        }\n      }\n\n      row += inc\n\n      if (row < 0 || size <= row) {\n        row -= inc\n        inc = -inc\n        break\n      }\n    }\n  }\n}\n\n/**\n * Create encoded codewords from data input\n *\n * @param  {Number}   version              QR Code version\n * @param  {ErrorCorrectionLevel}   errorCorrectionLevel Error correction level\n * @param  {ByteData} data                 Data input\n * @return {Uint8Array}                    Buffer containing encoded codewords\n */\nfunction createData (version, errorCorrectionLevel, segments) {\n  // Prepare data buffer\n  const buffer = new BitBuffer()\n\n  segments.forEach(function (data) {\n    // prefix data with mode indicator (4 bits)\n    buffer.put(data.mode.bit, 4)\n\n    // Prefix data with character count indicator.\n    // The character count indicator is a string of bits that represents the\n    // number of characters that are being encoded.\n    // The character count indicator must be placed after the mode indicator\n    // and must be a certain number of bits long, depending on the QR version\n    // and data mode\n    // @see {@link Mode.getCharCountIndicator}.\n    buffer.put(data.getLength(), Mode.getCharCountIndicator(data.mode, version))\n\n    // add binary data sequence to buffer\n    data.write(buffer)\n  })\n\n  // Calculate required number of bits\n  const totalCodewords = Utils.getSymbolTotalCodewords(version)\n  const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n  const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n  // Add a terminator.\n  // If the bit string is shorter than the total number of required bits,\n  // a terminator of up to four 0s must be added to the right side of the string.\n  // If the bit string is more than four bits shorter than the required number of bits,\n  // add four 0s to the end.\n  if (buffer.getLengthInBits() + 4 <= dataTotalCodewordsBits) {\n    buffer.put(0, 4)\n  }\n\n  // If the bit string is fewer than four bits shorter, add only the number of 0s that\n  // are needed to reach the required number of bits.\n\n  // After adding the terminator, if the number of bits in the string is not a multiple of 8,\n  // pad the string on the right with 0s to make the string's length a multiple of 8.\n  while (buffer.getLengthInBits() % 8 !== 0) {\n    buffer.putBit(0)\n  }\n\n  // Add pad bytes if the string is still shorter than the total number of required bits.\n  // Extend the buffer to fill the data capacity of the symbol corresponding to\n  // the Version and Error Correction Level by adding the Pad Codewords 11101100 (0xEC)\n  // and 00010001 (0x11) alternately.\n  const remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8\n  for (let i = 0; i < remainingByte; i++) {\n    buffer.put(i % 2 ? 0x11 : 0xEC, 8)\n  }\n\n  return createCodewords(buffer, version, errorCorrectionLevel)\n}\n\n/**\n * Encode input data with Reed-Solomon and return codewords with\n * relative error correction bits\n *\n * @param  {BitBuffer} bitBuffer            Data to encode\n * @param  {Number}    version              QR Code version\n * @param  {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @return {Uint8Array}                     Buffer containing encoded codewords\n */\nfunction createCodewords (bitBuffer, version, errorCorrectionLevel) {\n  // Total codewords for this QR code version (Data + Error correction)\n  const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n  // Total number of error correction codewords\n  const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n  // Total number of data codewords\n  const dataTotalCodewords = totalCodewords - ecTotalCodewords\n\n  // Total number of blocks\n  const ecTotalBlocks = ECCode.getBlocksCount(version, errorCorrectionLevel)\n\n  // Calculate how many blocks each group should contain\n  const blocksInGroup2 = totalCodewords % ecTotalBlocks\n  const blocksInGroup1 = ecTotalBlocks - blocksInGroup2\n\n  const totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks)\n\n  const dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks)\n  const dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1\n\n  // Number of EC codewords is the same for both groups\n  const ecCount = totalCodewordsInGroup1 - dataCodewordsInGroup1\n\n  // Initialize a Reed-Solomon encoder with a generator polynomial of degree ecCount\n  const rs = new ReedSolomonEncoder(ecCount)\n\n  let offset = 0\n  const dcData = new Array(ecTotalBlocks)\n  const ecData = new Array(ecTotalBlocks)\n  let maxDataSize = 0\n  const buffer = new Uint8Array(bitBuffer.buffer)\n\n  // Divide the buffer into the required number of blocks\n  for (let b = 0; b < ecTotalBlocks; b++) {\n    const dataSize = b < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2\n\n    // extract a block of data from buffer\n    dcData[b] = buffer.slice(offset, offset + dataSize)\n\n    // Calculate EC codewords for this data block\n    ecData[b] = rs.encode(dcData[b])\n\n    offset += dataSize\n    maxDataSize = Math.max(maxDataSize, dataSize)\n  }\n\n  // Create final data\n  // Interleave the data and error correction codewords from each block\n  const data = new Uint8Array(totalCodewords)\n  let index = 0\n  let i, r\n\n  // Add data codewords\n  for (i = 0; i < maxDataSize; i++) {\n    for (r = 0; r < ecTotalBlocks; r++) {\n      if (i < dcData[r].length) {\n        data[index++] = dcData[r][i]\n      }\n    }\n  }\n\n  // Apped EC codewords\n  for (i = 0; i < ecCount; i++) {\n    for (r = 0; r < ecTotalBlocks; r++) {\n      data[index++] = ecData[r][i]\n    }\n  }\n\n  return data\n}\n\n/**\n * Build QR Code symbol\n *\n * @param  {String} data                 Input string\n * @param  {Number} version              QR Code version\n * @param  {ErrorCorretionLevel} errorCorrectionLevel Error level\n * @param  {MaskPattern} maskPattern     Mask pattern\n * @return {Object}                      Object containing symbol data\n */\nfunction createSymbol (data, version, errorCorrectionLevel, maskPattern) {\n  let segments\n\n  if (Array.isArray(data)) {\n    segments = Segments.fromArray(data)\n  } else if (typeof data === 'string') {\n    let estimatedVersion = version\n\n    if (!estimatedVersion) {\n      const rawSegments = Segments.rawSplit(data)\n\n      // Estimate best version that can contain raw splitted segments\n      estimatedVersion = Version.getBestVersionForData(rawSegments, errorCorrectionLevel)\n    }\n\n    // Build optimized segments\n    // If estimated version is undefined, try with the highest version\n    segments = Segments.fromString(data, estimatedVersion || 40)\n  } else {\n    throw new Error('Invalid data')\n  }\n\n  // Get the min version that can contain data\n  const bestVersion = Version.getBestVersionForData(segments, errorCorrectionLevel)\n\n  // If no version is found, data cannot be stored\n  if (!bestVersion) {\n    throw new Error('The amount of data is too big to be stored in a QR Code')\n  }\n\n  // If not specified, use min version as default\n  if (!version) {\n    version = bestVersion\n\n  // Check if the specified version can contain the data\n  } else if (version < bestVersion) {\n    throw new Error('\\n' +\n      'The chosen QR Code version cannot contain this amount of data.\\n' +\n      'Minimum version required to store current data is: ' + bestVersion + '.\\n'\n    )\n  }\n\n  const dataBits = createData(version, errorCorrectionLevel, segments)\n\n  // Allocate matrix buffer\n  const moduleCount = Utils.getSymbolSize(version)\n  const modules = new BitMatrix(moduleCount)\n\n  // Add function modules\n  setupFinderPattern(modules, version)\n  setupTimingPattern(modules)\n  setupAlignmentPattern(modules, version)\n\n  // Add temporary dummy bits for format info just to set them as reserved.\n  // This is needed to prevent these bits from being masked by {@link MaskPattern.applyMask}\n  // since the masking operation must be performed only on the encoding region.\n  // These blocks will be replaced with correct values later in code.\n  setupFormatInfo(modules, errorCorrectionLevel, 0)\n\n  if (version >= 7) {\n    setupVersionInfo(modules, version)\n  }\n\n  // Add data codewords\n  setupData(modules, dataBits)\n\n  if (isNaN(maskPattern)) {\n    // Find best mask pattern\n    maskPattern = MaskPattern.getBestMask(modules,\n      setupFormatInfo.bind(null, modules, errorCorrectionLevel))\n  }\n\n  // Apply mask pattern\n  MaskPattern.applyMask(maskPattern, modules)\n\n  // Replace format info bits with correct values\n  setupFormatInfo(modules, errorCorrectionLevel, maskPattern)\n\n  return {\n    modules: modules,\n    version: version,\n    errorCorrectionLevel: errorCorrectionLevel,\n    maskPattern: maskPattern,\n    segments: segments\n  }\n}\n\n/**\n * QR Code\n *\n * @param {String | Array} data                 Input data\n * @param {Object} options                      Optional configurations\n * @param {Number} options.version              QR Code version\n * @param {String} options.errorCorrectionLevel Error correction level\n * @param {Function} options.toSJISFunc         Helper func to convert utf8 to sjis\n */\nexports.create = function create (data, options) {\n  if (typeof data === 'undefined' || data === '') {\n    throw new Error('No input text')\n  }\n\n  let errorCorrectionLevel = ECLevel.M\n  let version\n  let mask\n\n  if (typeof options !== 'undefined') {\n    // Use higher error correction level as default\n    errorCorrectionLevel = ECLevel.from(options.errorCorrectionLevel, ECLevel.M)\n    version = Version.from(options.version)\n    mask = MaskPattern.from(options.maskPattern)\n\n    if (options.toSJISFunc) {\n      Utils.setToSJISFunction(options.toSJISFunc)\n    }\n  }\n\n  return createSymbol(data, version, errorCorrectionLevel, mask)\n}\n","function hex2rgba (hex) {\n  if (typeof hex === 'number') {\n    hex = hex.toString()\n  }\n\n  if (typeof hex !== 'string') {\n    throw new Error('Color should be defined as hex string')\n  }\n\n  let hexCode = hex.slice().replace('#', '').split('')\n  if (hexCode.length < 3 || hexCode.length === 5 || hexCode.length > 8) {\n    throw new Error('Invalid hex color: ' + hex)\n  }\n\n  // Convert from short to long form (fff -> ffffff)\n  if (hexCode.length === 3 || hexCode.length === 4) {\n    hexCode = Array.prototype.concat.apply([], hexCode.map(function (c) {\n      return [c, c]\n    }))\n  }\n\n  // Add default alpha value\n  if (hexCode.length === 6) hexCode.push('F', 'F')\n\n  const hexValue = parseInt(hexCode.join(''), 16)\n\n  return {\n    r: (hexValue >> 24) & 255,\n    g: (hexValue >> 16) & 255,\n    b: (hexValue >> 8) & 255,\n    a: hexValue & 255,\n    hex: '#' + hexCode.slice(0, 6).join('')\n  }\n}\n\nexports.getOptions = function getOptions (options) {\n  if (!options) options = {}\n  if (!options.color) options.color = {}\n\n  const margin = typeof options.margin === 'undefined' ||\n    options.margin === null ||\n    options.margin < 0\n    ? 4\n    : options.margin\n\n  const width = options.width && options.width >= 21 ? options.width : undefined\n  const scale = options.scale || 4\n\n  return {\n    width: width,\n    scale: width ? 4 : scale,\n    margin: margin,\n    color: {\n      dark: hex2rgba(options.color.dark || '#000000ff'),\n      light: hex2rgba(options.color.light || '#ffffffff')\n    },\n    type: options.type,\n    rendererOpts: options.rendererOpts || {}\n  }\n}\n\nexports.getScale = function getScale (qrSize, opts) {\n  return opts.width && opts.width >= qrSize + opts.margin * 2\n    ? opts.width / (qrSize + opts.margin * 2)\n    : opts.scale\n}\n\nexports.getImageWidth = function getImageWidth (qrSize, opts) {\n  const scale = exports.getScale(qrSize, opts)\n  return Math.floor((qrSize + opts.margin * 2) * scale)\n}\n\nexports.qrToImageData = function qrToImageData (imgData, qr, opts) {\n  const size = qr.modules.size\n  const data = qr.modules.data\n  const scale = exports.getScale(size, opts)\n  const symbolSize = Math.floor((size + opts.margin * 2) * scale)\n  const scaledMargin = opts.margin * scale\n  const palette = [opts.color.light, opts.color.dark]\n\n  for (let i = 0; i < symbolSize; i++) {\n    for (let j = 0; j < symbolSize; j++) {\n      let posDst = (i * symbolSize + j) * 4\n      let pxColor = opts.color.light\n\n      if (i >= scaledMargin && j >= scaledMargin &&\n        i < symbolSize - scaledMargin && j < symbolSize - scaledMargin) {\n        const iSrc = Math.floor((i - scaledMargin) / scale)\n        const jSrc = Math.floor((j - scaledMargin) / scale)\n        pxColor = palette[data[iSrc * size + jSrc] ? 1 : 0]\n      }\n\n      imgData[posDst++] = pxColor.r\n      imgData[posDst++] = pxColor.g\n      imgData[posDst++] = pxColor.b\n      imgData[posDst] = pxColor.a\n    }\n  }\n}\n","const Utils = require('./utils')\n\nfunction clearCanvas (ctx, canvas, size) {\n  ctx.clearRect(0, 0, canvas.width, canvas.height)\n\n  if (!canvas.style) canvas.style = {}\n  canvas.height = size\n  canvas.width = size\n  canvas.style.height = size + 'px'\n  canvas.style.width = size + 'px'\n}\n\nfunction getCanvasElement () {\n  try {\n    return document.createElement('canvas')\n  } catch (e) {\n    throw new Error('You need to specify a canvas element')\n  }\n}\n\nexports.render = function render (qrData, canvas, options) {\n  let opts = options\n  let canvasEl = canvas\n\n  if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n    opts = canvas\n    canvas = undefined\n  }\n\n  if (!canvas) {\n    canvasEl = getCanvasElement()\n  }\n\n  opts = Utils.getOptions(opts)\n  const size = Utils.getImageWidth(qrData.modules.size, opts)\n\n  const ctx = canvasEl.getContext('2d')\n  const image = ctx.createImageData(size, size)\n  Utils.qrToImageData(image.data, qrData, opts)\n\n  clearCanvas(ctx, canvasEl, size)\n  ctx.putImageData(image, 0, 0)\n\n  return canvasEl\n}\n\nexports.renderToDataURL = function renderToDataURL (qrData, canvas, options) {\n  let opts = options\n\n  if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n    opts = canvas\n    canvas = undefined\n  }\n\n  if (!opts) opts = {}\n\n  const canvasEl = exports.render(qrData, canvas, opts)\n\n  const type = opts.type || 'image/png'\n  const rendererOpts = opts.rendererOpts || {}\n\n  return canvasEl.toDataURL(type, rendererOpts.quality)\n}\n","const Utils = require('./utils')\n\nfunction getColorAttrib (color, attrib) {\n  const alpha = color.a / 255\n  const str = attrib + '=\"' + color.hex + '\"'\n\n  return alpha < 1\n    ? str + ' ' + attrib + '-opacity=\"' + alpha.toFixed(2).slice(1) + '\"'\n    : str\n}\n\nfunction svgCmd (cmd, x, y) {\n  let str = cmd + x\n  if (typeof y !== 'undefined') str += ' ' + y\n\n  return str\n}\n\nfunction qrToPath (data, size, margin) {\n  let path = ''\n  let moveBy = 0\n  let newRow = false\n  let lineLength = 0\n\n  for (let i = 0; i < data.length; i++) {\n    const col = Math.floor(i % size)\n    const row = Math.floor(i / size)\n\n    if (!col && !newRow) newRow = true\n\n    if (data[i]) {\n      lineLength++\n\n      if (!(i > 0 && col > 0 && data[i - 1])) {\n        path += newRow\n          ? svgCmd('M', col + margin, 0.5 + row + margin)\n          : svgCmd('m', moveBy, 0)\n\n        moveBy = 0\n        newRow = false\n      }\n\n      if (!(col + 1 < size && data[i + 1])) {\n        path += svgCmd('h', lineLength)\n        lineLength = 0\n      }\n    } else {\n      moveBy++\n    }\n  }\n\n  return path\n}\n\nexports.render = function render (qrData, options, cb) {\n  const opts = Utils.getOptions(options)\n  const size = qrData.modules.size\n  const data = qrData.modules.data\n  const qrcodesize = size + opts.margin * 2\n\n  const bg = !opts.color.light.a\n    ? ''\n    : '<path ' + getColorAttrib(opts.color.light, 'fill') +\n      ' d=\"M0 0h' + qrcodesize + 'v' + qrcodesize + 'H0z\"/>'\n\n  const path =\n    '<path ' + getColorAttrib(opts.color.dark, 'stroke') +\n    ' d=\"' + qrToPath(data, size, opts.margin) + '\"/>'\n\n  const viewBox = 'viewBox=\"' + '0 0 ' + qrcodesize + ' ' + qrcodesize + '\"'\n\n  const width = !opts.width ? '' : 'width=\"' + opts.width + '\" height=\"' + opts.width + '\" '\n\n  const svgTag = '<svg xmlns=\"http://www.w3.org/2000/svg\" ' + width + viewBox + ' shape-rendering=\"crispEdges\">' + bg + path + '</svg>\\n'\n\n  if (typeof cb === 'function') {\n    cb(null, svgTag)\n  }\n\n  return svgTag\n}\n","\nconst canPromise = require('./can-promise')\n\nconst QRCode = require('./core/qrcode')\nconst CanvasRenderer = require('./renderer/canvas')\nconst SvgRenderer = require('./renderer/svg-tag.js')\n\nfunction renderCanvas (renderFunc, canvas, text, opts, cb) {\n  const args = [].slice.call(arguments, 1)\n  const argsNum = args.length\n  const isLastArgCb = typeof args[argsNum - 1] === 'function'\n\n  if (!isLastArgCb && !canPromise()) {\n    throw new Error('Callback required as last argument')\n  }\n\n  if (isLastArgCb) {\n    if (argsNum < 2) {\n      throw new Error('Too few arguments provided')\n    }\n\n    if (argsNum === 2) {\n      cb = text\n      text = canvas\n      canvas = opts = undefined\n    } else if (argsNum === 3) {\n      if (canvas.getContext && typeof cb === 'undefined') {\n        cb = opts\n        opts = undefined\n      } else {\n        cb = opts\n        opts = text\n        text = canvas\n        canvas = undefined\n      }\n    }\n  } else {\n    if (argsNum < 1) {\n      throw new Error('Too few arguments provided')\n    }\n\n    if (argsNum === 1) {\n      text = canvas\n      canvas = opts = undefined\n    } else if (argsNum === 2 && !canvas.getContext) {\n      opts = text\n      text = canvas\n      canvas = undefined\n    }\n\n    return new Promise(function (resolve, reject) {\n      try {\n        const data = QRCode.create(text, opts)\n        resolve(renderFunc(data, canvas, opts))\n      } catch (e) {\n        reject(e)\n      }\n    })\n  }\n\n  try {\n    const data = QRCode.create(text, opts)\n    cb(null, renderFunc(data, canvas, opts))\n  } catch (e) {\n    cb(e)\n  }\n}\n\nexports.create = QRCode.create\nexports.toCanvas = renderCanvas.bind(null, CanvasRenderer.render)\nexports.toDataURL = renderCanvas.bind(null, CanvasRenderer.renderToDataURL)\n\n// only svg for now.\nexports.toString = renderCanvas.bind(null, function (data, _, opts) {\n  return SvgRenderer.render(data, opts)\n})\n","<script>\n  import { Dialog } from '@sveltia/ui';\n  import { toCanvas } from 'qrcode';\n  import { _ } from 'svelte-i18n';\n\n  import { showMobileSignInDialog } from '$lib/services/app/onboarding';\n  import { user } from '$lib/services/user';\n  import { prefs } from '$lib/services/user/prefs';\n\n  /** @type {HTMLCanvasElement | undefined} */\n  let canvas = $state();\n\n  $effect(() => {\n    if (canvas && $showMobileSignInDialog) {\n      const { origin, pathname } = window.location;\n      const encodedData = btoa(JSON.stringify({ token: $user?.token, prefs: $prefs }));\n      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 lang=\"scss\">\n  canvas {\n    display: block;\n    margin: 32px auto 16px;\n    width: 200px !important;\n    height: 200px !important;\n  }\n</style>\n","<script>\n  import { onMount } from 'svelte';\n  import { _ } from 'svelte-i18n';\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 { Icon, Menu, MenuItem, Spacer, Toolbar } from '@sveltia/ui';\n  import { onMount } from 'svelte';\n  import { get } from 'svelte/store';\n  import { _ } from 'svelte-i18n';\n\n  import PageContainerMainArea from '$lib/components/common/page-container-main-area.svelte';\n  import PageContainer from '$lib/components/common/page-container.svelte';\n  import BackButton from '$lib/components/common/page-toolbar/back-button.svelte';\n  import { panels } from '$lib/components/settings';\n  import 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 lang=\"scss\">\n  .wrapper {\n    overflow-y: auto;\n    height: 100%;\n    --sui-menu-border-width: 0;\n    --sui-menu-border-radius: 0;\n    --sui-menu-padding: 8px 0;\n\n    :global {\n      & > .container {\n        display: block;\n        padding: 16px;\n      }\n    }\n  }\n</style>\n","<script>\n  import { Group } from '@sveltia/ui';\n  import { _ } from 'svelte-i18n';\n\n  import PageContainer from '$lib/components/common/page-container.svelte';\n</script>\n\n<PageContainer aria-label={$_('editorial_workflow')}>\n  {#snippet main()}\n    <div role=\"none\" class=\"columns\">\n      <Group class=\"column\" aria-labelledby=\"draft-column-title\">\n        <header role=\"none\">\n          <h3 role=\"none\" id=\"draft-column-title\">{$_('status.drafts')}</h3>\n        </header>\n      </Group>\n      <Group class=\"column\" aria-labelledby=\"review-column-title\">\n        <header role=\"none\">\n          <h3 role=\"none\" id=\"review-column-title\">{$_('status.in_review')}</h3>\n        </header>\n      </Group>\n      <Group class=\"column\" aria-labelledby=\"ready-column-title\">\n        <header role=\"none\">\n          <h3 role=\"none\" id=\"ready-column-title\">{$_('status.ready')}</h3>\n        </header>\n      </Group>\n    </div>\n  {/snippet}\n</PageContainer>\n\n<style lang=\"scss\">\n  .columns {\n    flex: auto;\n    display: flex;\n    gap: 4px;\n    background-color: var(--sui-secondary-background-color); // same as toolbar\n\n    @media (width < 768px) {\n      flex-direction: column;\n      gap: 0;\n    }\n\n    :global {\n      .column {\n        flex: auto;\n        width: calc(100% / 3);\n        background-color: var(--sui-primary-background-color);\n\n        @media (width < 768px) {\n          width: 100%;\n          height: calc(100% / 3);\n        }\n      }\n    }\n\n    header {\n      display: flex;\n      align-items: center;\n      padding: 0 16px;\n      height: 40px;\n      background-color: var(--sui-tertiary-background-color);\n\n      h3 {\n        font-size: var(--sui-font-size-x-large);\n      }\n    }\n  }\n</style>\n","<script>\n  import { onMount } from 'svelte';\n\n  import AssetsPage from '$lib/components/assets/assets-page.svelte';\n  import UploadAssetsConfirmDialog from '$lib/components/assets/shared/upload-assets-confirm-dialog.svelte';\n  import UploadAssetsDialog from '$lib/components/assets/shared/upload-assets-dialog.svelte';\n  import ConfigPage from '$lib/components/config/config-page.svelte';\n  import ContentsPage from '$lib/components/contents/contents-page.svelte';\n  import TranslatorApiKeyDialog from '$lib/components/contents/details/editor/translator-api-key-dialog.svelte';\n  import EntryParseErrorsToast from '$lib/components/contents/shared/entry-parse-errors-toast.svelte';\n  import MobilePromoInfobar from '$lib/components/global/infobars/mobile-promo-infobar.svelte';\n  import BottomNavigation from '$lib/components/global/toolbar/bottom-navigation.svelte';\n  import GlobalToolbar from '$lib/components/global/toolbar/global-toolbar.svelte';\n  import MenuPage from '$lib/components/menu/menu-page.svelte';\n  import MobileSignInDialog from '$lib/components/menu/mobile-sign-in-dialog.svelte';\n  import SearchPage from '$lib/components/search/search-page.svelte';\n  import SettingsPage from '$lib/components/settings/settings-page.svelte';\n  import WorkflowPage from '$lib/components/workflow/workflow-page.svelte';\n  import { parseLocation, selectedPageName } from '$lib/services/app/navigation';\n  import { canShowMobileSignInDialog } from '$lib/services/app/onboarding';\n  import { showAssetOverlay } from '$lib/services/assets/view';\n  import { showContentOverlay } from '$lib/services/contents/editor';\n  import { searchMode } from '$lib/services/search';\n  import { isSmallScreen } from '$lib/services/user/env';\n\n  /** @type {Record<string, any>} */\n  const pages = $derived({\n    collections: ContentsPage,\n    assets: AssetsPage,\n    search: $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    $showContentOverlay = false;\n    $showAssetOverlay = false;\n\n    const { path } = parseLocation();\n\n    const { pageName } =\n      path.match(`^\\\\/(?<pageName>${Object.keys(pages).join('|')})\\\\b`)?.groups ?? {};\n\n    if (!pageName) {\n      // Redirect any invalid page to the contents page\n      window.location.replace('#/collections');\n    } else if ($selectedPageName !== pageName) {\n      $selectedPageName = pageName;\n    }\n\n    if (pageName === 'collections') {\n      $searchMode = '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 !$isSmallScreen}\n  <GlobalToolbar />\n{/if}\n\n<div role=\"none\" class=\"page-root\">\n  <SelectedPage />\n</div>\n\n{#if $isSmallScreen}\n  <BottomNavigation />\n{/if}\n\n<UploadAssetsDialog />\n<UploadAssetsConfirmDialog />\n<TranslatorApiKeyDialog />\n<EntryParseErrorsToast />\n\n<style lang=\"scss\">\n  .page-root {\n    position: relative;\n    flex: auto;\n    display: flex;\n    flex-direction: column;\n    overflow: hidden;\n    view-transition-name: page-root;\n  }\n</style>\n","/**\n * IMPORTANT: These strings are not ready for localization. DO NOT TRANSLATE THIS FILE.\n * @see https://github.com/sveltia/sveltia-cms/blob/main/src/lib/locales/README.md\n */\nexport const strings = {\n  // Pages & Navigation\n  collections: 'Collections',\n  contents: 'Contents',\n  entries: 'Entries',\n  files: 'Files',\n  assets: 'Assets',\n  media: 'Media',\n  workflow: 'Workflow',\n  editorial_workflow: 'Editorial Workflow',\n  menu: 'Menu',\n\n  // Account\n  user_name: 'User Name',\n  password: 'Password',\n  sign_in: 'Sign In',\n  sign_in_with_mobile: 'Sign In with Mobile',\n  sign_in_with_mobile_instruction:\n    'Scan the QR code below with your phone or tablet for passwordless sign-in. Your settings will be automatically copied.',\n  signed_in_as_x: 'Signed In as {name}',\n  working_with_local_repo: 'Working with Local Repository',\n  working_with_test_repo: 'Working with Test Repository',\n  sign_out: 'Sign Out',\n\n  // Common terms\n  create: 'New',\n  select: 'Select',\n  select_all: 'Select All',\n  upload: 'Upload',\n  copy: 'Copy',\n  download: 'Download',\n  duplicate: 'Duplicate',\n  delete: 'Delete',\n  save: 'Save',\n  saving: 'Saving…',\n  rename: 'Rename',\n  update: 'Update',\n  replace: 'Replace',\n  add: 'Add',\n  remove: 'Remove',\n  remove_x: 'Remove {name}',\n  clear: 'Clear',\n  expand: 'Expand',\n  expand_all: 'Expand All',\n  collapse: 'Collapse',\n  collapse_all: 'Collapse All',\n  insert: 'Insert',\n  restore: 'Restore',\n  discard: 'Discard',\n  searching: 'Searching…',\n  no_results: 'No results found.',\n  global: 'Global',\n  primary: 'Primary',\n  secondary: 'Secondary',\n  collection: 'Collection',\n  folder: 'Folder',\n  api_key: 'API Key',\n  details: 'Details',\n  back: 'Back',\n  loading: 'Loading…',\n  later: 'Later',\n  slug: 'Slug',\n  singleton: 'Singleton',\n  singletons: 'Singletons',\n\n  // Common errors\n  clipboard_error: 'There was an error while copying data.',\n\n  // Entrance\n  welcome_message: 'Welcome to {name}',\n  powered_by: 'Powered by {name}',\n  loading_cms_config: 'Loading CMS Configuration…',\n  loading_site_data: 'Loading Site Data…',\n  loading_site_data_error: 'There was an error while loading site data.',\n  sign_in_with_x: 'Sign In with {service}',\n  sign_in_with_x_using_token: 'Sign In with {service} Using Token',\n  sign_in_using_pat_title: 'Sign In Using Personal Access Token',\n  sign_in_using_pat_description:\n    'Enter your token below. It must have read/write access to the repository content.',\n  sign_in_using_pat_link: 'You can generate a token on the <a>{service} user settings page</a>.',\n  personal_access_token: 'Personal Access Token',\n  authorizing: 'Authorizing…',\n  signing_in: 'Signing in…',\n  work_with_local_repo: 'Work with Local Repository',\n  work_with_local_repo_description:\n    'Once prompted, select the root directory of the “{repo}” repository.',\n  work_with_local_repo_description_no_repo:\n    'Once prompted, select the root directory of your Git repository.',\n  work_with_test_repo: 'Work with Test Repository',\n  sign_in_error: {\n    not_project_root:\n      'The folder you have selected is not a repository root directory. Please try again.',\n    picker_dismissed: 'A repository root directory could not be selected. Please try again.',\n    authentication_aborted: 'Authentication aborted. Please try again.',\n    invalid_token: 'The provided token is invalid. Please check and try again.',\n    // Errors defined in Sveltia CMS Authenticator\n    // https://github.com/sveltia/sveltia-cms-auth/blob/main/src/index.js\n    UNSUPPORTED_BACKEND: 'Your Git backend is not supported by the authenticator.',\n    UNSUPPORTED_DOMAIN: 'Your domain is not allowed to use the authenticator.',\n    MISCONFIGURED_CLIENT: 'OAuth app client ID or secret is not configured.',\n    AUTH_CODE_REQUEST_FAILED: 'Failed to receive an authorization code. Please try again later.',\n    CSRF_DETECTED: 'Potential CSRF attack detected. Authentication flow aborted.',\n    TOKEN_REQUEST_FAILED: 'Failed to request an access token. Please try again later.',\n    TOKEN_REFRESH_FAILED: 'Failed to refresh the access token. Please try again later.',\n    MALFORMED_RESPONSE: 'Server responded with malformed data. Please try again later.',\n  },\n  backend_unsupported_version: 'The {name} backend requires {name} {version} or later.',\n  repository_no_access: 'You don’t have access to the “{repo}” repository.',\n  repository_not_found: 'The “{repo}” repository doesn’t exist.',\n  repository_empty: 'The “{repo}” repository has no branches.',\n  branch_not_found: 'The “{repo}” repository doesn’t have the “{branch}” branch.',\n  unexpected_error: 'Unexpected Error',\n\n  // Parser errors\n  entry_parse_error:\n    'There was an error while parsing an entry file. Check the browser console for details.',\n  entry_parse_errors:\n    'There were errors while parsing entry files. Check the browser console for details.',\n\n  // Onboarding\n  mobile_promo_title: 'Sveltia CMS is now available on mobile!',\n  mobile_promo_button: 'Give it a try',\n\n  // Global toolbar\n  visit_live_site: 'Visit Live Site',\n  switch_page: 'Switch Page',\n  search_placeholder_contents: 'Search for contents…',\n  search_placeholder_assets: 'Search for assets…',\n  search_placeholder_all: 'Search for contents and assets…',\n  create_entry_or_assets: 'Create Entry or Assets',\n  publish_changes: 'Publish Changes',\n  publishing_changes: 'Publishing Changes…',\n  publishing_changes_failed: 'Changes could not be published. Please try again later.',\n  show_notifications: 'Show Notifications',\n  notifications: 'Notifications',\n  show_account_menu: 'Show Account Menu',\n  account: 'Account',\n  live_site: 'Live Site',\n  git_repository: 'Git Repository',\n  settings: 'Settings',\n  cms_config: 'CMS Configuration',\n  show_help_menu: 'Show Help Menu',\n  help: 'Help',\n  keyboard_shortcuts: 'Keyboard Shortcuts',\n  documentation: 'Documentation',\n  release_notes: 'Release Notes',\n  announcements: 'Announcements',\n  version_x: 'Version {version}',\n  report_issue: 'Report Issue',\n  share_feedback: 'Share Feedback',\n  get_help: 'Get Help',\n  join_discord: 'Join Us on Discord',\n  bluesky: 'Follow Us on Bluesky',\n\n  // Update notification\n  update_available: 'The latest version of Sveltia CMS is available.',\n  update_now: 'Update Now',\n\n  // Backend status indicator\n  backend_status: {\n    minor_incident:\n      '{service} is experiencing a minor incident. Your workflow may be potentially affected.',\n    major_incident:\n      '{service} is experiencing a major incident. You may want to wait until the situation has improved.',\n  },\n\n  // Library\n  content_library: 'Content Library',\n  asset_library: 'Asset Library',\n  asset_location: {\n    repository: 'Your Site',\n    external: 'External Locations',\n    stock_photos: 'Stock Photos',\n  },\n  collection_assets: 'Collection Assets',\n  entry_list: 'Entry List',\n  file_list: 'File List',\n  asset_list: 'Asset List',\n  x_collection: '“{collection}” Collection',\n  x_asset_folder: '“{folder}” Asset Folder',\n  viewing_collection_list: 'You’re now viewing the collection list.',\n  viewing_asset_folder_list: 'You’re now viewing the asset folder list.',\n  viewing_x_collection_many_entries:\n    'You’re now viewing the “{collection}” collection, which has {count} entries.',\n  viewing_x_collection_one_entry:\n    'You’re now viewing the “{collection}” collection, which has one entry.',\n  viewing_x_collection_no_entries:\n    'You’re now viewing the “{collection}” collection, which has no entries yet.',\n  viewing_x_asset_folder_many_assets:\n    'You’re now viewing the “{folder}” asset folder, which has {count} assets.',\n  viewing_x_asset_folder_one_asset:\n    'You’re now viewing the “{folder}” asset folder, which has one asset.',\n  viewing_x_asset_folder_no_assets:\n    'You’re now viewing the “{folder}” asset folder, which has no assets yet.',\n  singleton_selected_announcement: 'Press Enter to edit the “{file}” file.',\n  collection_not_found: 'Collection not found',\n  file_not_found: 'File not found.',\n  x_of_x_selected: '{selected} of {total} selected',\n  switch_view: 'Switch View',\n  list_view: 'List View',\n  grid_view: 'Grid View',\n  switch_to_list_view: 'Switch to List View',\n  switch_to_grid_view: 'Switch to Grid View',\n  sort: 'Sort',\n  sorting_options: 'Sorting Options',\n  sort_keys: {\n    none: 'None',\n    name: 'Name',\n    slug: 'Slug',\n    commit_author: 'Updated by',\n    commit_date: 'Updated on',\n    _summary: 'Summary',\n  },\n  ascending: '{label}, A to Z',\n  ascending_date: '{label}, old to new',\n  descending: '{label}, Z to A',\n  descending_date: '{label}, new to old',\n  filter: 'Filter',\n  filtering_options: 'Filtering Options',\n  group: 'Group', // Verb\n  grouping_options: 'Grouping Options',\n  type: 'Type',\n  all: 'All',\n  image: 'Image',\n  video: 'Video',\n  audio: 'Audio',\n  document: 'Document',\n  other: 'Other',\n  show_assets: 'Show Assets',\n  hide_assets: 'Hide Assets',\n  show_info: 'Show Info',\n  hide_info: 'Hide Info',\n  all_assets: 'All Assets',\n  global_assets: 'Global Assets',\n  entry_not_found: 'Entry not found.',\n  creating_entries_disabled_by_admin:\n    'Creating new entries in this collection is disabled by the administrator.',\n  creating_entries_disabled_by_quota:\n    'You cannot add new entries to this collection because it has reached its limit of {quota} entries.',\n  creating_entries_nearing_quota_singular:\n    'This collection is nearing its limit of {quota} entries. You can only create {remaining} more entry.',\n  creating_entries_nearing_quota_plural:\n    'This collection is nearing its limit of {quota} entries. You can only create {remaining} more entries.',\n  back_to_collection: 'Back to Collection',\n  collection_list: 'Collection List',\n  back_to_collection_list: 'Back to Collection List',\n  asset_folder_list: 'Asset Folder List',\n  back_to_asset_folder_list: 'Back to Asset Folder List',\n  search_results: 'Search Results',\n  search_results_for_x: 'Search Results for “{terms}”',\n  viewing_entry_search_results:\n    'You’re now viewing search results for “{terms}”. We’ve found {entries}.',\n  viewing_asset_search_results:\n    'You’re now viewing search results for “{terms}”. We’ve found {assets}.',\n  many_entries: '{count} entries',\n  one_entry: 'one entry',\n  no_entries: 'no entries',\n  many_assets: '{count} assets',\n  one_asset: 'one asset',\n  no_assets: 'no assets',\n  no_files_found: 'No files found.',\n  no_entries_found: 'No entries found.',\n  upload_assets: 'Upload New Assets',\n  edit_options: 'Edit Options',\n  show_edit_options: 'Show Edit Options',\n  edit_asset: 'Edit Asset',\n  edit_x: 'Edit {name}',\n  wrap_long_lines: 'Wrap Long Lines',\n  rename_asset: 'Rename Asset',\n  rename_x: 'Rename {name}',\n  enter_new_name_for_asset: 'Enter a new name below.',\n  enter_new_name_for_asset_with_one_entry:\n    'Enter a new name below. An entry using the asset will also be updated.',\n  enter_new_name_for_asset_with_many_entries:\n    'Enter a new name below. {count} entries using the asset will also be updated.',\n  enter_new_name_for_asset_error: {\n    empty: 'File name cannot be empty.',\n    character: 'File name cannot contain special characters.',\n    duplicate: 'This file name is used for another asset.',\n  },\n  replace_asset: 'Replace Asset',\n  replace_x: 'Replace {name}',\n  click_to_browse: 'Click to browse…',\n  tap_to_browse: 'Tap to browse…',\n  drop_file_or: 'Drop a file here or',\n  drop_files_or: 'Drop files here or',\n  drop_image_file_or: 'Drop an image file here or',\n  drop_image_files_or: 'Drop image files here or',\n  browse: 'Browse',\n  paste: 'Paste',\n  no_image_in_clipboard: 'No image found in clipboard.',\n  clipboard_access_denied: 'Clipboard access denied.',\n  drop_file_here: 'Drop a file here',\n  drop_files_here: 'Drop files here',\n  unsupported_file_type: 'Unsupported File Type',\n  dropped_file_type_mismatch: 'The dropped file is not the {type} type. Please try again.',\n  dropped_image_type_mismatch:\n    'The dropped file is not supported. Only an AVIF, GIF, JPEG, PNG, WebP or SVG image is accepted. Please try again.',\n  choose_file: 'Choose File',\n  choose_files: 'Choose Files',\n  delete_asset: 'Delete Asset',\n  delete_assets: 'Delete Assets',\n  delete_selected_asset: 'Delete Selected Asset',\n  delete_selected_assets: 'Delete Selected Assets',\n  confirm_deleting_this_asset: 'Are you sure you want to delete this asset?',\n  confirm_deleting_selected_asset: 'Are you sure you want to delete the selected asset?',\n  confirm_deleting_selected_assets: 'Are you sure you want to delete the selected {count} assets?',\n  confirm_deleting_all_assets: 'Are you sure you want to delete all the assets?',\n  delete_entry: 'Delete Entry',\n  delete_entries: 'Delete Entries',\n  delete_selected_entry: 'Delete Selected Entry',\n  delete_selected_entries: 'Delete Selected Entries',\n  confirm_deleting_this_entry: 'Are you sure you want to delete this entry?',\n  confirm_deleting_this_entry_with_assets:\n    'Are you sure you want to delete this entry and associated assets?',\n  confirm_deleting_selected_entry: 'Are you sure you want to delete the selected entry?',\n  confirm_deleting_selected_entry_with_assets:\n    'Are you sure you want to delete the selected entry and associated assets?',\n  confirm_deleting_selected_entries:\n    'Are you sure you want to delete the selected {count} entries?',\n  confirm_deleting_selected_entries_with_assets:\n    'Are you sure you want to delete the selected {count} entries and associated assets?',\n  confirm_deleting_all_entries: 'Are you sure you want to delete all the entries?',\n  confirm_deleting_all_entries_with_assets:\n    'Are you sure you want to delete all the entries and associated assets?',\n  processing_file: 'Processing a file. This may take a while.',\n  processing_files: 'Processing files. This may take a while.',\n  uploading_files: 'Uploading Files',\n  confirm_replacing_file: 'Are you sure you want to replace “{name}” with the following file?',\n  confirm_uploading_file:\n    'Are you sure you want to save the following file to the “{folder}” folder?',\n  confirm_uploading_files:\n    'Are you sure you want to save the following {count} files to the “{folder}” folder?',\n  oversized_files: 'Oversized Files',\n  warning_oversized_file:\n    'This file cannot be uploaded because it exceeds the maximum size of {size}. Please reduce the size or select a different file.',\n  warning_oversized_files:\n    'These files cannot be uploaded because they exceed the maximum size of {size}. Please reduce the sizes or select different files.',\n  uploading_files_progress: 'Uploading files…',\n  uploading_file_progress: 'Uploading file…',\n  uploading_files_failed: 'Files could not be uploaded',\n  uploading_file_failed: 'File could not be uploaded',\n  file_meta: '{type} · {size}',\n  file_meta_converted_from_x: '(converted from {type})',\n  no_entries_created: 'This collection has no entries yet.',\n  create_new_entry: 'Create New Entry',\n  entry: 'Entry',\n  index_file: 'Index File',\n  no_files_in_collection: 'No files available in this collection.',\n  asset_info: 'Asset Info',\n  select_asset_show_info: 'Select an asset to show the info.',\n  duplicate_entry: 'Duplicate Entry',\n  entry_duplicated: 'Entry has been duplicated. It’s now a new draft.',\n  entry_validation_error: 'One field has an error. Please correct it to save the entry.',\n  entry_validation_errors: '{count} fields have an error. Please correct them to save the entry.',\n  entry_saved: 'Entry has been saved.',\n  entry_saved_and_published: 'Entry has been saved and published.',\n  entry_deleted: 'Entry has been deleted.',\n  entries_deleted: '{count} entries have been deleted.',\n  asset_saved: 'Asset has been saved.',\n  asset_saved_and_published: 'Asset has been saved and published.',\n  assets_saved: '{count} assets have been saved.',\n  assets_saved_and_published: '{count} assets have been saved and published.',\n  asset_url_copied: 'Asset URL has been copied to clipboard.',\n  asset_urls_copied: 'Asset URLs have been copied to clipboard.',\n  asset_path_copied: 'Asset file path has been copied to clipboard.',\n  asset_paths_copied: 'Asset file paths have been copied to clipboard.',\n  asset_data_copied: 'Asset file has been copied to clipboard.',\n  asset_downloaded: 'Asset file has been downloaded.',\n  assets_downloaded: 'Asset files have been downloaded.',\n  asset_moved: 'Asset has been moved.',\n  assets_moved: '{count} assets have been moved.',\n  asset_renamed: 'Asset has been renamed.',\n  assets_renamed: '{count} assets have been renamed.',\n  asset_deleted: 'Asset has been deleted.',\n  assets_deleted: '{count} assets have been deleted.',\n\n  // Content editor\n  content_editor: 'Content Editor',\n  restore_backup_title: 'Restore Draft',\n  restore_backup_description:\n    'This entry has a backup from {datetime}. Do you want to restore the edited draft?',\n  draft_backup_saved: 'Draft backup has been saved.',\n  draft_backup_restored: 'Draft backup has been restored.',\n  draft_backup_deleted: 'Draft backup has been deleted.',\n  cancel_editing: 'Cancel Editing',\n  create_entry_title: 'Creating {name}',\n  create_entry_announcement: 'You’re now creating a new entry in the “{collection}” collection.',\n  edit_entry_title: '{collection} › {entry}',\n  edit_entry_announcement:\n    'You’re now editing the “{entry}” entry in the “{collection}” collection.',\n  edit_file_announcement: 'You’re now editing the “{file}” file in the “{collection}” collection.',\n  edit_singleton_announcement: 'You’re now editing the “{file}” file.',\n  save_and_publish: 'Save and Publish',\n  save_without_publishing: 'Save without Publishing',\n  show_editor_options: 'Show Editor Options',\n  editor_options: 'Editor Options',\n  show_preview: 'Show Preview',\n  sync_scrolling: 'Sync Scrolling',\n  switch_locale: 'Switch Locale',\n  locale_content_disabled_short: '(disabled)',\n  locale_content_error_short: '(error)',\n  edit: 'Edit',\n  preview: 'Preview',\n  edit_x_locale: 'Edit {locale} Content',\n  preview_x_locale: 'Preview {locale} Content',\n  content_preview: 'Content Preview',\n  show_content_options_x_locale: 'Show {locale} Content Options',\n  content_options_x_locale: '{locale} Content Options',\n  x_field: '“{field}” Field',\n  show_field_options: 'Show Field Options',\n  field_options: 'Field Options',\n  unsupported_field_type_x: 'Unsupported field type: {name}',\n  enable_x_locale: 'Enable {locale}',\n  reenable_x_locale: 'Reenable {locale}',\n  disable_x_locale: 'Disable {locale}',\n  locale_x_has_been_disabled: 'The {locale} content has been disabled.',\n  locale_x_now_disabled:\n    'The {locale} content is now disabled. It will be deleted when you save the entry.',\n  view_in_repository: 'View in Repository',\n  view_on_x: 'View on {service}',\n  view_on_live_site: 'View on Live Site',\n  copy_from: 'Copy from…',\n  copy_from_x: 'Copy from {locale}',\n  translation_options: 'Translation Options',\n  translate: 'Translate',\n  translate_field: 'Translate Field',\n  translate_fields: 'Translate Fields',\n  translate_from: 'Translate from…',\n  translate_from_x: 'Translate from {locale}',\n  revert_changes: 'Revert Changes',\n  revert_all_changes: 'Revert All Changes',\n  edit_slug: 'Edit Slug',\n  edit_slug_warning:\n    'Changing the slug may break internal and external links to the entry. Currently, Sveltia CMS does not update references created with Relation fields, so you’ll need to manually update such references along with other links.',\n  edit_slug_error: {\n    empty: 'The slug cannot be empty.',\n    duplicate: 'This slug is used for another entry.',\n  },\n  required: 'Required',\n  editor: {\n    translation: {\n      none: 'Nothing has been translated.',\n      started: 'Translating…',\n      error: 'There was an error while translating.',\n      complete: {\n        one: 'Translated the field from {source}.',\n        many: 'Translated {count} fields from {source}.',\n      },\n    },\n    copy: {\n      none: 'Nothing has been copied.',\n      complete: {\n        one: 'Copied the field from {source}.',\n        many: 'Copied {count} fields from {source}.',\n      },\n    },\n  },\n  validation: {\n    value_missing: 'This field is required.',\n    range_underflow: {\n      'datetime-local': 'The date/time must be at or after {min}.',\n      date: 'The date must be on or after {min}.',\n      time: 'The time must be at or after {min}.',\n      number: 'The value must be greater than or equal to {min}.',\n      select_many: 'You have to select at least {min} items.',\n      select_one: 'You have to select at least {min} item.',\n      add_many: 'You have to add at least {min} items.',\n      add_one: 'You have to add at least {min} item.',\n    },\n    range_overflow: {\n      'datetime-local': 'The date/time must be at or before {max}.',\n      date: 'The date must be on or before {max}.',\n      time: 'The time must be at or before {max}.',\n      number: 'The value must be less than or equal to {max}.',\n      select_many: 'You cannot select more than {max} items.',\n      select_one: 'You cannot select more than {max} item.',\n      add_many: 'You cannot add more than {max} items.',\n      add_one: 'You cannot add more than {max} item.',\n    },\n    too_short: {\n      one: 'You must enter at least {min} character.',\n      many: 'You must enter at least {min} characters.',\n    },\n    too_long: {\n      one: 'You cannot enter more than {max} character.',\n      many: 'You cannot enter more than {max} characters.',\n    },\n    type_mismatch: {\n      number: 'Please enter a number.',\n      email: 'Please enter a valid email.',\n      url: 'Please enter a valid URL.',\n    },\n  },\n  saving_entry: {\n    error: {\n      title: 'Error',\n      description: 'There was an error while saving the entry. Please try again later.',\n    },\n  },\n\n  // Media details\n  viewing_x_asset_details: 'You’re viewing the details of the “{name}” asset.',\n  asset_editor: 'Asset Editor',\n  preview_unavailable: 'Preview Unavailable.',\n  public_url: 'Public URL',\n  public_urls: 'Public URLs',\n  file_path: 'File Path',\n  file_paths: 'File Paths',\n  file_data: 'File Data',\n  kind: 'Kind',\n  size: 'Size',\n  dimensions: 'Dimensions',\n  duration: 'Duration',\n  used_in: 'Used in',\n  created_date: 'Created Date',\n  location: 'Location',\n  map_lat_lng: 'Map showing latitude {latitude}, longitude {longitude}',\n\n  // Fields\n  select_file: 'Select File',\n  select_image: 'Select Image',\n  replace_file: 'Replace File',\n  replace_image: 'Replace Image',\n  remove_file: 'Remove File',\n  remove_image: 'Remove Image',\n  remove_this_item: 'Remove This Item',\n  move_up: 'Move Up',\n  move_down: 'Move Down',\n  add_x: 'Add {name}',\n  add_item_above: 'Add Item Above',\n  add_item_below: 'Add Item Below',\n  select_list_type: 'Select List Type',\n  opacity: 'Opacity',\n  unselected_option: '(None)',\n  assets_dialog: {\n    title: {\n      file: 'Select File',\n      image: 'Select Image',\n    },\n    search_for_file: 'Search for Files',\n    search_for_image: 'Search for Images',\n    locations: 'Locations',\n    folder: {\n      field: 'Field Assets',\n      entry: 'Entry Assets',\n      file: 'File Assets',\n      collection: 'Collection Assets',\n      global: 'Global Assets',\n    },\n    error: {\n      invalid_key: 'Your API Key is invalid or expired. Please double check and try again.',\n      search_fetch_failed: 'There was an error while searching assets. Please try again later.',\n      image_fetch_failed:\n        'There was an error while downloading the selected asset. Please try again later.',\n    },\n    available_images: 'Available Images',\n    enter_url: 'Enter URL',\n    enter_file_url: 'Enter URL of the file:',\n    enter_image_url: 'Enter URL of the image:',\n    large_file: {\n      title: 'Large File',\n    },\n    photo_credit: {\n      title: 'Photo Credit',\n      description: 'Use the following credit if possible:',\n    },\n    unsaved: 'Unsaved',\n  },\n  character_counter: {\n    min_max: {\n      one: '{count} character entered. Minimum: {min}. Maximum: {max}.',\n      many: '{count} characters entered. Minimum: {min}. Maximum: {max}.',\n    },\n    min: {\n      one: '{count} character entered. Minimum: {min}.',\n      many: '{count} characters entered. Minimum: {min}.',\n    },\n    max: {\n      one: '{count} character entered. Maximum: {max}.',\n      many: '{count} characters entered. Maximum: {max}.',\n    },\n  },\n  youtube_video_player: 'YouTube video player',\n  today: 'Today',\n  now: 'Now',\n  editor_components: {\n    image: 'Image',\n    src: 'Source',\n    alt: 'Alt Text',\n    title: 'Title',\n    link: 'Link',\n  },\n  key_value: {\n    key: 'Key',\n    value: 'Value',\n    action: 'Action',\n    empty_key: 'Key is required.',\n    duplicate_key: 'Key must be unique.',\n  },\n  find_place: 'Find a Place',\n  use_your_location: 'Use Your Location',\n  geolocation_error_title: 'Geolocation Error',\n  geolocation_error_body: 'There was an error while retrieving your location.',\n  geolocation_unsupported: 'Geolocation API is not supported by this browser.',\n\n  // Content preview\n  boolean: {\n    true: 'Yes',\n    false: 'No',\n  },\n\n  // Integrations\n  cloud_storage: {\n    invalid: 'The service is not configured properly.',\n    auth: {\n      api_key: {\n        key_label: 'API Key',\n        initial: 'Enter your {key} for {service}.',\n        requested: 'Validating…',\n        error: 'The provided {key} is invalid. Please double check and try again.',\n      },\n      password: {\n        initial: 'Enter your password for {service}.',\n        requested: 'Signing in…',\n        error: 'User name or password is incorrect. Please double check and try again.',\n      },\n    },\n    cloudinary: {\n      iframe_title: 'Cloudinary media library',\n      activate: {\n        button_label: 'Activate Cloudinary',\n        description: 'After signing in, click the Sign In button again to continue.', // Don’t translate \"Sign In\" here\n      },\n      auth_key_label: 'API Secret',\n    },\n    uploadcare: {\n      auth_key_label: 'API Secret Key',\n    },\n    aws_s3: {\n      auth_key_label: 'Secret Access Key',\n    },\n    cloudflare_r2: {\n      auth_key_label: 'Secret Access Key',\n    },\n    digitalocean_spaces: {\n      auth_key_label: 'Secret Access Key',\n    },\n  },\n\n  // Configuration\n  config: {\n    one_error: 'There is an error in the CMS configuration. Please solve the issue and try again.',\n    many_errors:\n      'There are errors in the CMS configuration. Please solve the issues and try again.',\n    error_locator: {\n      collection: '{collection} collection',\n      file: '{file} file',\n      field: '`{field}` field',\n    },\n    error: {\n      no_secure_context: 'Sveltia CMS only works with HTTPS or localhost URLs.',\n      insecure_url: 'The configuration file URL must use HTTPS protocol or a localhost address.',\n      insecure_urls: 'The configuration file URLs must use HTTPS protocol or localhost addresses.',\n      fetch_failed: 'The configuration file could not be retrieved.',\n      fetch_failed_not_ok: 'HTTP response returned with status {status}.',\n      fetch_failed_with_manual_init:\n        '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()`.',\n      parse_failed: 'The configuration file could not be parsed.',\n      parse_failed_invalid_object: 'The configuration file is not a valid JavaScript object.',\n      parse_failed_unsupported_type:\n        'The configuration file is not a valid file type. Only YAML, TOML and JSON are supported.',\n      no_collection: 'Collections are not defined.',\n      missing_backend: 'The backend is not defined.',\n      missing_backend_name: 'The backend name is not defined.',\n      unsupported_known_backend:\n        'The {name} backend is [not supported](https://sveltiacms.app/en/docs/migration/netlify-decap-cms#features-not-to-be-implemented) in Sveltia CMS.',\n      unsupported_deprecated_backend:\n        'The deprecated {name} backend is [not supported](https://sveltiacms.app/en/docs/migration/netlify-decap-cms#features-not-to-be-implemented) in Sveltia CMS.',\n      unsupported_custom_backend:\n        'Custom backends are [not supported](https://sveltiacms.app/en/docs/migration/netlify-decap-cms#features-not-to-be-implemented) in Sveltia CMS.',\n      unsupported_backend_suggestion:\n        'Use one of the [supported backends](https://sveltiacms.app/en/docs/backends#supported-backends) instead.',\n      missing_repository: 'The repository is not defined.',\n      invalid_repository:\n        'The configured repository is invalid. It must be in “owner/repo” format.',\n      oauth_implicit_flow:\n        'The configured authentication method (implicit flow) is not supported in Sveltia CMS. Use PKCE authorization instead.',\n      github_pkce_unsupported:\n        'PKCE authorization is not yet supported due to GitHub’s limitations. Use other [authentication methods](https://sveltiacms.app/en/docs/backends/github#authentication) instead.',\n      oauth_no_app_id: 'OAuth application ID is not defined.',\n      missing_media_folder: 'The media folder is not defined.',\n      invalid_media_folder: 'The configured media folder is invalid. It must be a string.',\n      invalid_public_folder: 'The configured public folder is invalid. It must be a string.',\n      public_folder_relative_path:\n        'The configured public folder is invalid. It must be an absolute path starting with “/”.',\n      public_folder_absolute_url:\n        'An absolute URL for the public folder option is not supported in Sveltia CMS.',\n      invalid_collection_no_options:\n        'The collection must have either the `folder`, `files` or `divider` option defined.',\n      invalid_collection_multiple_options:\n        'The collection cannot have the `folder`, `files` and `divider` options together.',\n      file_format_mismatch: 'The `{extension}` extension doesn’t match the `{format}` format.',\n      invalid_slug_slash:\n        'The slug template `{slug}` is invalid as it cannot contain slashes. To organize entries in subfolders, use the `path` option instead of `slug`.',\n      missing_collection_name:\n        'The collection {count} must have the `name` option defined as a non-empty string.',\n      invalid_collection_name:\n        'The collection name `{name}` is invalid. It must not contain special characters.',\n      duplicate_collection_name:\n        'Collection names must be unique, but `{name}` is used more than once.',\n      missing_collection_file_name:\n        'The collection file {count} must have the `name` option defined as a non-empty string.',\n      invalid_collection_file_name:\n        'The collection file name `{name}` is invalid. It must not contain special characters.',\n      duplicate_collection_file_name:\n        'Collection file names must be unique, but `{name}` is used more than once.',\n      missing_field_name:\n        'The field {count} must have the `name` option defined as a non-empty string.',\n      invalid_field_name:\n        'The field name `{name}` is invalid. It must not contain special characters.',\n      duplicate_field_name: 'Field names must be unique, but `{name}` is used more than once.',\n      missing_variable_type:\n        'The variable type {count} must have the `name` option defined as a non-empty string.',\n      invalid_variable_type:\n        'The variable type name `{name}` is invalid. It must not contain special characters.',\n      duplicate_variable_type:\n        'Variable type names must be unique, but `{name}` is used more than once.',\n      date_field_type:\n        'The deprecated Date field type is not supported in Sveltia CMS. Use the DateTime field type with the `type: date` option instead.',\n      unsupported_deprecated_option:\n        'The deprecated `{prop}` option is not supported in Sveltia CMS. Use the `{newProp}` option instead.',\n      allow_multiple:\n        'The `allow_multiple` option is not supported in Sveltia CMS. Use the `multiple` option instead, which defaults to `false`.',\n      invalid_list_field:\n        'The List field cannot have the `field`, `fields` and `types` options together.',\n      invalid_list_variable_type:\n        'The List field’s variable type is invalid. The `widget` option is set to `{widget}` but it must be `object`.',\n      invalid_object_field:\n        'The Object field cannot have the `fields` and `types` options together.',\n      object_field_missing_fields:\n        'The Object field must have either the `fields` or `types` option defined.',\n      relation_field_invalid_collection:\n        'The referenced `{collection}` collection is invalid or not defined.',\n      relation_field_invalid_collection_file:\n        'The referenced `{file}` file is invalid or not defined.',\n      relation_field_missing_file_name:\n        'The `file` option must be defined for a relation to a file collection.',\n      relation_field_invalid_value_field:\n        'The referenced value field `{field}` is invalid or not defined.',\n      unexpected: 'Unexpected error',\n    },\n    warning: {\n      editorial_workflow_unsupported: 'Editorial workflow is not yet supported in Sveltia CMS.',\n      open_authoring_unsupported: 'Open authoring is not yet supported in Sveltia CMS.',\n      nested_collections_unsupported: 'Nested collections are not yet supported in Sveltia CMS.',\n      unsupported_ignored_option:\n        'The `{prop}` option is not supported in Sveltia CMS. It will be ignored.',\n    },\n    compatibility_link:\n      'See the compatibility notes for details: https://sveltiacms.app/en/docs/migration/netlify-decap-cms#features-not-to-be-implemented',\n  },\n\n  // Backends\n  local_workflow: {\n    indicator: 'Local',\n    unsupported_browser:\n      'Local Workflow is not supported in your browser. Please use Chrome or Edge instead.',\n    disabled: 'Local Workflow is disabled in your browser. <a>Here’s how to enable it</a>.',\n  },\n\n  // Editorial Workflow\n  status: {\n    drafts: 'Drafts',\n    in_review: 'In Review',\n    ready: 'Ready',\n  },\n\n  // Settings\n  categories: 'Categories',\n  prefs: {\n    changes: {\n      api_key_saved: 'API key has been saved.',\n      api_key_removed: 'API key has been removed.',\n      api_key_invalid: 'The provided API key is invalid. Please double check and try again.',\n    },\n    error: {\n      permission_denied:\n        'Browser storage (Cookie) access has been denied. Please check the permission and try again.',\n    },\n    appearance: {\n      title: 'Appearance',\n      theme: 'Theme',\n      select_theme: 'Select Theme',\n    },\n    theme: {\n      auto: 'Auto',\n      dark: 'Dark',\n      light: 'Light',\n    },\n    language: {\n      title: 'Language',\n      ui_language: {\n        title: 'User Interface Language',\n        select_language: 'Select Language',\n      },\n    },\n    contents: {\n      title: 'Contents',\n      editor: {\n        title: 'Editor',\n        use_draft_backup: {\n          switch_label: 'Automatically back up entry drafts',\n        },\n        close_on_save: {\n          switch_label: 'Close the editor after saving a draft',\n        },\n        close_with_escape: {\n          switch_label: 'Close the editor with the Escape key',\n        },\n      },\n    },\n    i18n: {\n      title: 'Internationalization',\n      translators: {\n        default: {\n          title: 'Default Translation Service',\n          select_service: 'Select Service',\n        },\n        api_keys: {\n          title: 'Translation Service API Keys',\n          description: 'Manage API keys for <a>translation services</a>.',\n        },\n        field_label: '{service} Key',\n        description:\n          'Sign up for <a {homeHref}>{service}</a> and enter <a {apiKeyHref}>your API Key</a> here to enable quick translation of text entry fields.',\n      },\n    },\n    media: {\n      title: 'Media',\n      stock_photos: {\n        api_keys: {\n          title: 'Stock Photo Service API Keys',\n          description: 'Manage API keys for <a>stock photo services</a>.',\n        },\n        field_label: '{service} API Key',\n        description:\n          'Sign up for <a {homeHref}>{service} API</a> and enter <a {apiKeyHref}>your API Key</a> here to insert free stock photos to image entry fields.',\n        credit: 'Photos provided by {service}',\n        no_services: 'No <a>stock photo services</a> are configured.',\n      },\n      cloud_storage: {\n        api_keys: {\n          title: 'Cloud Storage Service API Keys',\n          description: 'Manage API keys for <a>cloud storage services</a>.',\n        },\n        field_label: '{service} API Key',\n        no_services: 'No <a>cloud storage services</a> are configured.',\n      },\n    },\n    accessibility: {\n      title: 'Accessibility',\n      underline_links: {\n        title: 'Underline Links',\n        description: 'Show underline for links in the entry preview and user interface labels.',\n        switch_label: 'Always Underline Links',\n      },\n    },\n    advanced: {\n      title: 'Advanced',\n      beta: {\n        title: 'Beta Features',\n        description: 'Enable some beta features that may be unstable or unlocalized.',\n        switch_label: 'Join Beta Program',\n      },\n      developer_mode: {\n        title: 'Developer Mode',\n        description:\n          'Enable some developer-oriented features, including detailed console logs and native context menus.',\n        switch_label: 'Enable Developer Mode',\n      },\n      deploy_hook: {\n        title: 'Deploy Hook',\n        description:\n          'Enter a webhook URL to be called when you manually trigger a deployment by selecting Publish Changes. This can be left blank if you’re using GitHub Actions.',\n        url: {\n          field_label: 'Hook URL',\n          saved: 'Hook URL has been saved.',\n          removed: 'Hook URL has been removed.',\n        },\n        auth: {\n          field_label: 'Authorization header (e.g. Bearer <token>) (optional)',\n          saved: 'Authorization header has been saved.',\n          removed: 'Authorization header has been removed.',\n        },\n      },\n    },\n  },\n\n  // Keyboard shortcuts\n  keyboard_shortcuts_: {\n    view_content_library: 'View Content Library',\n    view_asset_library: 'View Asset Library',\n    search: 'Search for entries and assets',\n    create_entry: 'Create a new entry',\n    save_entry: 'Save an entry',\n    cancel_editing: 'Cancel entry editing',\n  },\n\n  // File types\n  file_type_labels: {\n    avif: 'AVIF image',\n    bmp: 'Bitmap image',\n    gif: 'GIF image',\n    ico: 'Icon',\n    jpeg: 'JPEG image',\n    jpg: 'JPEG image',\n    png: 'PNG image',\n    svg: 'SVG image',\n    tif: 'TIFF image',\n    tiff: 'TIFF image',\n    webp: 'WebP image',\n    avi: 'AVI video',\n    m4v: 'MP4 video',\n    mov: 'QuickTime video',\n    mp4: 'MP4 video',\n    mpeg: 'MPEG video',\n    mpg: 'MPEG video',\n    ogg: 'Ogg video',\n    ogv: 'Ogg video',\n    ts: 'MPEG video',\n    webm: 'WebM video',\n    '3gp': '3GPP video',\n    '3g2': '3GPP2 video',\n    aac: 'AAC audio',\n    mid: 'MIDI',\n    midi: 'MIDI',\n    m4a: 'MP4 audio',\n    mp3: 'MP3 audio',\n    oga: 'Ogg audio',\n    opus: 'OPUS audio',\n    wav: 'WAV audio',\n    weba: 'WebM audio',\n    csv: 'CSV spreadsheet',\n    doc: 'Word document',\n    docx: 'Word document',\n    odp: 'OpenDocument presentation',\n    ods: 'OpenDocument spreadsheet',\n    odt: 'OpenDocument text',\n    pdf: 'PDF document',\n    ppt: 'PowerPoint presentation',\n    pptx: 'PowerPoint presentation',\n    rtf: 'Rich text document',\n    xls: 'Excel spreadsheet',\n    xlsx: 'Excel spreadsheet',\n    html: 'HTML text',\n    js: 'JavaScript',\n    json: 'JSON text',\n    md: 'Markdown text',\n    toml: 'TOML text',\n    yaml: 'YAML text',\n    yml: 'YAML text',\n  },\n\n  // file size units\n  file_size_units: {\n    b: '{size} bytes',\n    kb: '{size} KB',\n    mb: '{size} MB',\n    gb: '{size} GB',\n    tb: '{size} TB',\n  },\n};\n","/**\n * IMPORTANT: These strings are not ready for localization. DO NOT TRANSLATE THIS FILE.\n * @see https://github.com/sveltia/sveltia-cms/blob/main/src/lib/locales/README.md\n */\nexport const strings = {\n  // Pages & Navigation\n  collections: 'コレクション',\n  contents: 'コンテンツ',\n  entries: 'エントリー',\n  files: 'ファイル',\n  assets: 'アセット',\n  media: 'メディア',\n  workflow: 'ワークフロー',\n  editorial_workflow: '編集ワークフロー',\n  menu: 'メニュー',\n\n  // Account\n  user_name: 'ユーザー名',\n  password: 'パスワード',\n  sign_in: 'ログイン',\n  sign_in_with_mobile: 'モバイルでログイン',\n  sign_in_with_mobile_instruction:\n    '以下の QR コードを携帯電話かタブレットでスキャンすると、パスワードなしでログインできます。ユーザー設定は自動的にコピーされます。',\n  signed_in_as_x: '{name} としてログイン中',\n  working_with_local_repo: 'ローカルレポジトリで作業中',\n  working_with_test_repo: 'テストレポジトリで作業中',\n  sign_out: 'ログアウト',\n\n  // Common terms\n  create: '新規作成',\n  select: '選択',\n  select_all: 'すべて選択',\n  upload: 'アップロード',\n  copy: 'コピー',\n  download: 'ダウンロード',\n  duplicate: '複製',\n  delete: '削除',\n  save: '保存',\n  saving: '保存中…',\n  rename: '名前を変更',\n  update: '更新',\n  replace: '差し替え',\n  add: '追加',\n  remove: '削除',\n  remove_x: '{name} を削除',\n  clear: 'クリア',\n  expand: '広げる',\n  expand_all: 'すべて広げる',\n  collapse: '折り畳む',\n  collapse_all: 'すべて折り畳む',\n  insert: '挿入',\n  restore: '復元',\n  discard: '破棄',\n  searching: '検索中…',\n  no_results: '結果が見つかりませんでした。',\n  global: 'グローバル',\n  primary: 'プライマリー',\n  secondary: 'セカンダリー',\n  collection: 'コレクション',\n  folder: 'フォルダー',\n  api_key: 'API キー',\n  details: '詳細',\n  back: '戻る',\n  loading: '読み込み中…',\n  later: '後で',\n  slug: 'スラッグ',\n  singleton: 'シングルトン',\n  singletons: 'シングルトン',\n\n  // Common errors\n  clipboard_error: 'データのコピー中に問題が発生しました。',\n\n  // Entrance\n  welcome_message: '{name} へようこそ',\n  powered_by: 'Powered by {name}',\n  loading_cms_config: 'CMS 設定を読み込んでいます…',\n  loading_site_data: 'サイトデータを読み込んでいます…',\n  loading_site_data_error: 'サイトデータの読み込み中にエラーが発生しました。',\n  sign_in_with_x: '{service} でログイン',\n  sign_in_with_x_using_token: '{service} でトークンを使用してログイン',\n  sign_in_using_pat_title: '個人用アクセストークンでログイン',\n  sign_in_using_pat_description:\n    '以下にトークンを入力してください。レポジトリコンテンツへの読み取り・書き込みアクセスが必要です。',\n  sign_in_using_pat_link: '<a>{service} ユーザー設定ページ</a> でトークンを生成できます。',\n  personal_access_token: '個人用アクセストークン',\n  authorizing: '認証中…',\n  signing_in: 'ログイン中…',\n  work_with_local_repo: 'ローカルレポジトリで作業',\n  work_with_local_repo_description:\n    'ダイアログが表示されたら、「{repo}」レポジトリのルートディレクトリを選択してください。',\n  work_with_local_repo_description_no_repo:\n    'ダイアログが表示されたら、Git レポジトリのルートディレクトリを選択してください。',\n  work_with_test_repo: 'テストレポジトリで作業',\n  sign_in_error: {\n    not_project_root:\n      '選択されたフォルダーはレポジトリのルートディレクトリではありません。再度お試しください。',\n    picker_dismissed: 'レポジトリのルートディレクトリを選択できませんでした。再度お試しください。',\n    authentication_aborted: '認証が中断されました。再度お試しください。',\n    invalid_token: '入力されたトークンが無効です。確認して再度お試しください。',\n    // Errors defined in Sveltia CMS Authenticator\n    // https://github.com/sveltia/sveltia-cms-auth/blob/main/src/index.js\n    UNSUPPORTED_BACKEND: 'この認証アプリはお使いの Git バックエンドに対応していません。',\n    UNSUPPORTED_DOMAIN: 'この認証アプリではお使いのドメインの使用は許可されていません。',\n    MISCONFIGURED_CLIENT: 'OAuth アプリのクライアント ID またはシークレットが設定されていません。',\n    AUTH_CODE_REQUEST_FAILED: '認証コードを取得できませんでした。後で再度お試しください。',\n    CSRF_DETECTED: 'CSRF 攻撃の可能性が検出されたため、認証フローは中断されました。',\n    TOKEN_REQUEST_FAILED: 'アクセストークンを要求できませんでした。後で再度お試しください。',\n    TOKEN_REFRESH_FAILED: 'アクセストークンの更新に失敗しました。後で再度お試しください。',\n    MALFORMED_RESPONSE: 'サーバーから不正なデータが返されました。後で再度お試しください。',\n  },\n  backend_unsupported_version:\n    '{name} バックエンドには {name} {version} 以降のバージョンが必要です。',\n  repository_no_access: 'あなたには「{repo}」レポジトリへのアクセス権がありません。',\n  repository_not_found: '「{repo}」レポジトリは存在しません。',\n  repository_empty: '「{repo}」レポジトリにはブランチがありません。',\n  branch_not_found: '「{repo}」レポジトリに「{branch}」ブランチは存在しません。',\n  unexpected_error: '予期せぬエラー',\n\n  // Parser errors\n  entry_parse_error:\n    'エントリーファイルの読み込み中にエラーが発生しました。詳しくはブラウザーのコンソールを確認してください。',\n  entry_parse_errors:\n    'エントリーファイルの読み込み中にエラーが発生しました。詳しくはブラウザーのコンソールを確認してください。',\n\n  // Global toolbar\n  visit_live_site: '管理対象サイトを開く',\n  switch_page: 'ページを切り替え',\n  search_placeholder_contents: 'コンテンツを検索…',\n  search_placeholder_assets: 'アセットを検索…',\n  search_placeholder_all: 'コンテンツとアセットを検索…',\n  create_entry_or_assets: 'エントリーまたはアセットを作成',\n  publish_changes: '変更を公開',\n  publishing_changes: '変更を公開しています…',\n  publishing_changes_failed: '変更を公開できませんでした。後で再度お試しください。',\n  show_notifications: '通知を表示',\n  notifications: '通知',\n  show_account_menu: 'アカウントメニューを表示',\n  account: 'アカウント',\n  live_site: '管理対象サイト',\n  git_repository: 'Git レポジトリ',\n  settings: '設定',\n  cms_config: 'CMS 設定',\n  show_help_menu: 'ヘルプメニューを表示',\n  help: 'ヘルプ',\n  keyboard_shortcuts: 'キーボードショートカット',\n  documentation: 'ドキュメンテーション',\n  release_notes: 'リリースノート',\n  announcements: 'お知らせ',\n  version_x: 'バージョン {version}',\n  report_issue: '問題を報告',\n  share_feedback: 'フィードバックを共有',\n  get_help: 'サポート',\n  join_discord: 'Discord チャンネルに参加',\n  bluesky: 'Bluesky でフォロー',\n\n  // Onboarding\n  mobile_promo_title: 'Sveltia CMS がモバイルに対応しました！',\n  mobile_promo_button: '試してみる',\n\n  // Update notification\n  update_available: 'Sveltia CMS の最新版が利用可能です。',\n  update_now: '今すぐ更新',\n\n  // Backend status indicator\n  backend_status: {\n    minor_incident:\n      '{service} で軽微な障害が発生しています。ワークフローに潜在的な影響が及ぶ可能性があります。',\n    major_incident:\n      '{service} で重大な障害が発生しています。状況が改善されるまで待った方が良いかもしれません。',\n  },\n\n  // Library\n  content_library: 'コンテンツライブラリ',\n  asset_library: 'アセットライブラリ',\n  asset_location: {\n    repository: 'あなたのサイト',\n    external: '外部の場所',\n    stock_photos: 'ストックフォト',\n  },\n  collection_assets: 'コレクションアセット',\n  entry_list: 'エントリーリスト',\n  file_list: 'ファイルリスト',\n  asset_list: 'アセットリスト',\n  x_collection: '「{collection}」コレクション',\n  x_asset_folder: '「{folder}」アセットフォルダー',\n  viewing_collection_list: 'コレクションリストを表示しています。',\n  viewing_asset_folder_list: 'アセットフォルダーリストを表示しています。',\n  viewing_x_collection_many_entries:\n    '「{collection}」コレクションを表示しています。ここには {count} 個のエントリーがあります。',\n  viewing_x_collection_one_entry:\n    '「{collection}」コレクションを表示しています。ここにはひとつのエントリーがあります。',\n  viewing_x_collection_no_entries:\n    '「{collection}」コレクションを表示しています。ここにはまだエントリーがありません。',\n  viewing_x_asset_folder_many_assets:\n    '「{folder}」アセットフォルダーを表示しています。ここには {count} 個のアセットがあります。',\n  viewing_x_asset_folder_one_asset:\n    '「{folder}」アセットフォルダーを表示しています。ここにはひとつのアセットがあります。',\n  viewing_x_asset_folder_no_assets:\n    '「{folder}」アセットフォルダーを表示しています。ここにはまだアセットがありません。',\n  singleton_selected_announcement: '「{file}」ファイルを編集するには Enter キーを押してください。',\n  collection_not_found: 'コレクションが見つかりませんでした',\n  file_not_found: 'ファイルが見つかりませんでした',\n  x_of_x_selected: '{total} 個のうち {selected} 個を選択中',\n  switch_view: 'ビューを切り替え',\n  list_view: 'リストビュー',\n  grid_view: 'グリッドビュー',\n  switch_to_list_view: 'リストビューに切り替え',\n  switch_to_grid_view: 'グリッドビューに切り替え',\n  sort: '並び替え',\n  sorting_options: '並べ替えオプション',\n  sort_keys: {\n    none: 'なし',\n    name: '名前',\n    slug: 'スラッグ',\n    commit_author: '更新者',\n    commit_date: '更新日時',\n    _summary: 'サマリー',\n  },\n  ascending: '{label} (A–Z)',\n  ascending_date: '{label} (古い順)',\n  descending: '{label} (Z–A)',\n  descending_date: '{label} (新しい順)',\n  filter: '絞り込み',\n  filtering_options: '絞り込みオプション',\n  group: 'グループ化', // Verb\n  grouping_options: 'グループ化オプション',\n  type: '種類',\n  all: 'すべて',\n  image: '画像',\n  video: '動画',\n  audio: '音声',\n  document: '書類',\n  other: 'その他',\n  show_assets: 'アセットを表示',\n  hide_assets: 'アセットを隠す',\n  show_info: '情報を表示',\n  hide_info: '情報を隠す',\n  all_assets: 'すべてのアセット',\n  global_assets: 'グローバルアセット',\n  entry_not_found: 'エントリーが見つかりませんでした。',\n  creating_entries_disabled_by_admin:\n    'このコレクションへの新しいエントリーの作成は、管理者によって無効化されています。',\n  creating_entries_disabled_by_quota:\n    'このコレクションは最大の {quota} エントリーに達したため、新しいエントリーを作成することはできません。',\n  creating_entries_nearing_quota_singular:\n    'このコレクションは {quota} エントリーの上限に近づいています。あと {remaining} 件のエントリーしか作成できません。',\n  creating_entries_nearing_quota_plural:\n    'このコレクションは {quota} エントリーの上限に近づいています。あと {remaining} 件のエントリーしか作成できません。',\n  back_to_collection: 'コレクションへ戻る',\n  collection_list: 'コレクションリスト',\n  back_to_collection_list: 'コレクションリストへ戻る',\n  asset_folder_list: 'アセットフォルダーリスト',\n  back_to_asset_folder_list: 'アセットフォルダーリストへ戻る',\n  search_results: '検索結果',\n  search_results_for_x: '「{terms}」の検索結果',\n  viewing_entry_search_results:\n    '「{terms}」の検索結果を表示しています。{entries} が見つかりました。',\n  viewing_asset_search_results:\n    '「{terms}」の検索結果を表示しています。{assets} が見つかりました。',\n  many_entries: '{count} 個のエントリー',\n  one_entry: '1 個のエントリー',\n  no_entries: '0 個のエントリー',\n  many_assets: '{count} 個のアセット',\n  one_asset: '1 個のアセット',\n  no_assets: '0 個のアセット',\n  no_files_found: 'ファイルは見つかりませんでした。',\n  no_entries_found: 'エントリーは見つかりませんでした。',\n  upload_assets: '新しいアセットをアップロード',\n  edit_options: '編集オプション',\n  show_edit_options: '編集オプションを表示',\n  edit_asset: 'アセットを編集',\n  edit_x: '{name} を編集',\n  wrap_long_lines: '長い行を折り返す',\n  rename_asset: 'アセットの名前を変更',\n  rename_x: '{name} の名前を変更',\n  enter_new_name_for_asset: '新しい名前を以下に入力してください。',\n  enter_new_name_for_asset_with_one_entry:\n    '新しい名前を以下に入力してください。このアセットを使用している 1 個のエントリーも更新されます。',\n  enter_new_name_for_asset_with_many_entries:\n    '新しい名前を以下に入力してください。このアセットを使用している {count} 個のエントリーも更新されます。',\n  enter_new_name_for_asset_error: {\n    empty: 'ファイル名を空白にすることはできません。',\n    character: 'ファイル名に特別な文字を含めることはできません。',\n    duplicate: 'このファイル名は他のアセットに使われています。',\n  },\n  replace_asset: 'アセットを差し替え',\n  replace_x: '{name} を差し替え',\n  click_to_browse: 'クリックして参照…',\n  tap_to_browse: 'タップして参照…',\n  drop_file_or: 'ここにファイルをドロップするか',\n  drop_files_or: 'ここにファイルをドロップするか',\n  drop_image_file_or: 'ここに画像ファイルをドロップするか',\n  drop_image_files_or: 'ここに画像ファイルをドロップするか',\n  browse: '参照',\n  paste: '貼り付け',\n  no_image_in_clipboard: 'クリップボードに画像が見つかりません。',\n  clipboard_access_denied: 'クリップボードへのアクセスが拒否されました。',\n  drop_file_here: 'ここにファイルをドロップ',\n  drop_files_here: 'ここにファイルをドロップ',\n  unsupported_file_type: '非対応ファイル形式',\n  dropped_file_type_mismatch:\n    'ドロップされたファイルは {type} 形式ではありません。再度お試しください。',\n  dropped_image_type_mismatch:\n    'ドロップされたファイルはサポートされていません。AVIF、GIF、JPEG、PNG、WebP または SVG 形式の画像のみが受け入れられます。再度お試しください。',\n  choose_file: 'ファイルを選択',\n  choose_files: 'ファイルを選択',\n  delete_asset: 'アセットを削除',\n  delete_assets: 'アセットを削除',\n  delete_selected_asset: '選択されたアセットを削除',\n  delete_selected_assets: '選択されたアセットを削除',\n  confirm_deleting_this_asset: 'このアセットを削除してもよろしいですか？',\n  confirm_deleting_selected_asset: '選択されたファイルを削除してもよろしいですか？',\n  confirm_deleting_selected_assets: '選択された {count} 個のファイルを削除してもよろしいですか？',\n  confirm_deleting_all_assets: 'すべてのアセットを削除してもよろしいですか？',\n  delete_entry: 'エントリーを削除',\n  delete_entries: 'エントリーを削除',\n  delete_selected_entry: '選択されたエントリーを削除',\n  delete_selected_entries: '選択されたエントリーを削除',\n  confirm_deleting_this_entry: 'このエントリーを削除してもよろしいですか？',\n  confirm_deleting_this_entry_with_assets:\n    'このエントリーと関連アセットを削除してもよろしいですか？',\n  confirm_deleting_selected_entry: '選択されたエントリーを削除してもよろしいですか？',\n  confirm_deleting_selected_entry_with_assets:\n    '選択されたエントリーと関連アセットを削除してもよろしいですか？',\n  confirm_deleting_selected_entries:\n    '選択された {count} 個のエントリーを削除してもよろしいですか？',\n  confirm_deleting_selected_entries_with_assets:\n    '選択された {count} 個のエントリーと関連アセットを削除してもよろしいですか？',\n  confirm_deleting_all_entries: 'すべてのエントリーを削除してもよろしいですか？',\n  confirm_deleting_all_entries_with_assets:\n    'すべてのエントリーと関連アセットを削除してもよろしいですか？',\n  processing_file: 'ファイルを処理しています。これには時間がかかる場合があります。',\n  processing_files: 'ファイルを処理しています。これには時間がかかる場合があります。',\n  uploading_files: 'アップロード対象ファイル',\n  confirm_replacing_file: '「{name}」を以下のファイルと差し替えてもよろしいですか？',\n  confirm_uploading_file: '以下のファイルを「{folder}」フォルダーに保存してもよろしいですか？',\n  confirm_uploading_files:\n    '以下の {count} 個のファイルを「{folder}」フォルダーに保存してもよろしいですか？',\n  oversized_files: 'サイズ超過ファイル',\n  warning_oversized_file:\n    'このファイルは最大サイズ {size} を超えているため、アップロードできません。サイズを縮小するか、他のファイルを選んでください。',\n  warning_oversized_files:\n    'これらのファイルは最大サイズ {size} を超えているため、アップロードできません。サイズを縮小するか、他のファイルを選んでください',\n  uploading_files_progress: 'ファイルをアップロード中…',\n  uploading_file_progress: 'ファイルをアップロード中…',\n  uploading_files_failed: 'ファイルをアップロードできませんでした',\n  uploading_file_failed: 'ファイルをアップロードできませんでした',\n  file_meta: '{type} · {size}',\n  file_meta_converted_from_x: '({type} から変換)',\n  no_entries_created: 'このコレクションにはまだエントリーがありません。',\n  create_new_entry: '新しいエントリーを作成',\n  entry: 'エントリー',\n  index_file: 'インデックスファイル',\n  no_files_in_collection: 'このコレクションにはファイルがありません。',\n  asset_info: 'アセット情報',\n  select_asset_show_info: 'アセットを選択すると情報が表示されます。',\n  duplicate_entry: 'エントリーを複製',\n  entry_duplicated: 'エントリーが複製され、新しい下書きとなりました。',\n  entry_validation_error:\n    'ひとつのフィールドにエラーがあります。エントリーを保存するには問題を修正してください。',\n  entry_validation_errors:\n    '{count} 個のフィールドにエラーがあります。エントリーを保存するには問題を修正してください。',\n  entry_saved: 'エントリーが保存されました。',\n  entry_saved_and_published: 'エントリーが保存、公開されました。',\n  entry_deleted: 'エントリーが削除されました。',\n  entries_deleted: '{count} 個のエントリーが削除されました。',\n  asset_saved: 'アセットが保存されました。',\n  asset_saved_and_published: 'アセットが保存、公開されました。',\n  assets_saved: '{count} 個のアセットが保存されました。',\n  assets_saved_and_published: '{count} 個のアセットが保存、公開されました。',\n  asset_url_copied: 'アセット URL がクリップボードにコピーされました。',\n  asset_urls_copied: 'アセット URL がクリップボードにコピーされました。',\n  asset_path_copied: 'アセットファイルパスがクリップボードにコピーされました。',\n  asset_paths_copied: 'アセットファイルパスがクリップボードにコピーされました。',\n  asset_data_copied: 'アセットファイルがクリップボードにコピーされました。',\n  asset_downloaded: 'アセットファイルがダウンロードされました。',\n  assets_downloaded: 'アセットファイルがダウンロードされました。',\n  asset_moved: 'アセットが移動されました。',\n  assets_moved: '{count} 個のアセットが移動されました。',\n  asset_renamed: 'アセットの名前が変更されました。',\n  assets_renamed: '{count} 個のアセットの名前が変更されました。',\n  asset_deleted: 'アセットが削除されました。',\n  assets_deleted: '{count} 個のアセットが削除されました。',\n\n  // Content editor\n  content_editor: 'コンテンツエディター',\n  restore_backup_title: '下書きを復元',\n  restore_backup_description:\n    'このエントリーには {datetime} に保存されたバックアップがあります。その編集済みの下書きを復元しますか？',\n  draft_backup_saved: '下書きのバックアップが保存されました。',\n  draft_backup_restored: '下書きのバックアップが復元されました。',\n  draft_backup_deleted: '下書きのバックアップが削除されました。',\n  cancel_editing: '編集をキャンセル',\n  create_entry_title: '{name} を作成',\n  create_entry_announcement: '「{collection}」コレクションの新しいエントリーを作成しています。',\n  edit_entry_title: '{collection} › {entry}',\n  edit_entry_announcement: '「{collection}」コレクションの「{entry}」エントリーを編集しています。',\n  edit_file_announcement: '「{collection}」コレクションの「{file}」ファイルを編集しています。',\n  edit_singleton_announcement: '「{file}」ファイルを編集しています。',\n  save_and_publish: '保存して公開',\n  save_without_publishing: '公開せずに保存',\n  show_editor_options: 'エディターオプションを表示',\n  editor_options: 'エディターオプション',\n  show_preview: 'プレビューを表示',\n  sync_scrolling: 'スクロールを同期',\n  switch_locale: 'ロケールを切り替え',\n  locale_content_disabled_short: '(無効)',\n  locale_content_error_short: '(エラー)',\n  edit: '編集',\n  preview: 'プレビュー',\n  edit_x_locale: '{locale} コンテンツを編集',\n  preview_x_locale: '{locale} コンテンツをプレビュー',\n  content_preview: 'コンテンツプレビュー',\n  show_content_options_x_locale: '{locale} コンテンツのオプションを表示',\n  content_options_x_locale: '{locale} コンテンツのオプション',\n  x_field: '「{field}」フィールド',\n  show_field_options: 'フィールドオプションを表示',\n  field_options: 'フィールドオプション',\n  unsupported_field_type_x: '非対応フィールドタイプ: {name}',\n  enable_x_locale: '{locale} を有効化',\n  reenable_x_locale: '{locale} を再度有効化',\n  disable_x_locale: '{locale} を無効化',\n  locale_x_has_been_disabled: '{locale} コンテンツは無効化されています。',\n  locale_x_now_disabled:\n    '{locale} コンテンツは無効化されました。エントリーを保存する際に削除されます。',\n  view_in_repository: 'レポジトリ内で見る',\n  view_on_x: '{service} で見る',\n  view_on_live_site: '管理対象サイトで見る',\n  copy_from: '他の言語からコピー…',\n  copy_from_x: '{locale} からコピー',\n  translation_options: '翻訳オプション',\n  translate: '翻訳',\n  translate_field: 'フィールドを翻訳',\n  translate_fields: 'フィールドを翻訳',\n  translate_from: '他の言語から翻訳…',\n  translate_from_x: '{locale} から翻訳',\n  revert_changes: '変更を取り消す',\n  revert_all_changes: 'すべての変更を取り消す',\n  edit_slug: 'スラッグを編集',\n  edit_slug_warning:\n    'スラッグを変更すると、エントリーへの内部・外部リンクが壊れる可能性があります。現在のところ、Sveltia CMS は Relation フィールドで作成された参照を更新しないため、そのような参照は他のリンクとともに手動で更新する必要があります。',\n  edit_slug_error: {\n    empty: 'スラッグは空白にはできません。',\n    duplicate: 'このスラッグは他のエントリーに使われています。',\n  },\n  required: '必須',\n  editor: {\n    translation: {\n      none: '翻訳されたフィールドはありません。',\n      started: '翻訳中…',\n      error: '翻訳中に問題が発生しました。',\n      complete: {\n        one: '{source} からフィールドを翻訳しました。',\n        many: '{source} から {count} 個のフィールドを翻訳しました。',\n      },\n    },\n    copy: {\n      none: 'コピーされたフィールドはありません。',\n      complete: {\n        one: '{source} からフィールドをコピーしました。',\n        many: '{source} から {count} 個のフィールドをコピーしました。',\n      },\n    },\n  },\n  validation: {\n    value_missing: 'この項目は必須です。',\n    range_underflow: {\n      'datetime-local': '日時は {min} かそれ以降でなければなりません。',\n      date: '日付は {min} かそれ以降でなければなりません。',\n      time: '時刻は {min} かそれ以降でなければなりません。',\n      number: '値は {min} 以上でなければなりません。',\n      select_many: '少なくとも {min} 個の項目を選択してください。',\n      select_one: '少なくとも {min} 個の項目を選択してください。',\n      add_many: '少なくとも {min} 個の項目を追加してください。',\n      add_one: '少なくとも {min} 個の項目を追加してください。',\n    },\n    range_overflow: {\n      'datetime-local': '日時は {max} かそれ以前でなければなりません。',\n      date: '日付は {max} かそれ以前でなければなりません。',\n      time: '時刻は {max} かそれ以前でなければなりません。',\n      number: '値は {max} 以下でなければなりません。',\n      select_many: '選択できるのは最大で {max} 項目です。',\n      select_one: '選択できるのは最大で {max} 項目です。',\n      add_many: '追加できるのは最大で {max} 項目です。',\n      add_one: '追加できるのは最大で {max} 項目です。',\n    },\n    too_short: {\n      one: '少なくとも {min} 文字は入力してください。',\n      many: '少なくとも {min} 文字は入力してください。',\n    },\n    too_long: {\n      one: '{max} 文字を超える入力はできません。',\n      many: '{max} 文字を超える入力はできません。',\n    },\n    type_mismatch: {\n      number: '数値を入力してください。',\n      email: '正しいメールアドレスを入力してください。',\n      url: '正しい URL を入力してください。',\n    },\n  },\n  saving_entry: {\n    error: {\n      title: 'エラー',\n      description: 'エントリーを保存中に問題が発生しました。後で再度お試しください。',\n    },\n  },\n  find_place: '場所を検索',\n  use_your_location: '現在地を使用',\n  geolocation_error_title: '位置情報エラー',\n  geolocation_error_body: 'あなたの現在地を取得できませんでした。',\n  geolocation_unsupported: 'お使いのブラウザーは位置情報 API をサポートしていません。',\n\n  // Media details\n  viewing_x_asset_details: '「{name}」アセットの詳細を表示しています。',\n  asset_editor: 'アセットエディター',\n  preview_unavailable: 'プレビューは表示できません',\n  public_url: '公開 URL',\n  public_urls: '公開 URL',\n  file_path: 'ファイルパス',\n  file_paths: 'ファイルパス',\n  file_data: 'ファイルデータ',\n  kind: '種類',\n  size: 'サイズ',\n  dimensions: '大きさ',\n  duration: '再生時間',\n  used_in: '使われているエントリー',\n  created_date: '作成日時',\n  location: '場所',\n  map_lat_lng: '緯度 {latitude}、経度 {longitude} の地図',\n\n  // Fields\n  select_file: 'ファイルを選択',\n  select_image: '画像を選択',\n  replace_file: 'ファイルを差し替え',\n  replace_image: '画像を差し替え',\n  remove_file: 'ファイルを削除',\n  remove_image: '画像を削除',\n  remove_this_item: 'このアイテムを削除',\n  move_up: '上へ移動',\n  move_down: '下へ移動',\n  add_x: '{name} を追加',\n  add_item_above: '上にアイテムを追加',\n  add_item_below: '下にアイテムを追加',\n  select_list_type: 'リストタイプを選択',\n  opacity: '透明度',\n  unselected_option: '(なし)',\n  assets_dialog: {\n    title: {\n      file: 'ファイルを選択',\n      image: '画像を選択',\n    },\n    search_for_file: 'ファイルを検索',\n    search_for_image: '画像を検索',\n    locations: '場所',\n    folder: {\n      field: 'フィールドアセット',\n      entry: 'エントリーアセット',\n      file: 'ファイルアセット',\n      collection: 'コレクションアセット',\n      global: 'グローバルアセット',\n    },\n    error: {\n      invalid_key: 'あなたの API キーは正しくないか期限切れです。確認の上、再度お試しください。',\n      search_fetch_failed: 'アセットを検索中に問題が発生しました。後で再度お試しください。',\n      image_fetch_failed:\n        '選択されたアセットをダウンロード中に問題が発生しました。後で再度お試しください。',\n    },\n    available_images: '利用可能な画像',\n    enter_url: 'URL を入力',\n    enter_file_url: 'ファイルの URL を入力:',\n    enter_image_url: '画像の URL を入力:',\n    large_file: {\n      title: '大きなファイル',\n    },\n    photo_credit: {\n      title: '写真クレジット',\n      description: '可能であれば以下のクレジットを使ってください:',\n    },\n    unsaved: '未保存',\n  },\n  character_counter: {\n    min_max: {\n      one: '{count} 文字入力されています。最小: {min}。最大 {max}。',\n      many: '{count} 文字入力されています。最小: {min}。最大 {max}。',\n    },\n    min: {\n      one: '{count} 文字入力されています。最小: {min}。',\n      many: '{count} 文字入力されています。最小: {min}。',\n    },\n    max: {\n      one: '{count} 文字入力されています。最大: {max}。',\n      many: '{count} 文字入力されています。最大: {max}。',\n    },\n  },\n  youtube_video_player: 'YouTube 動画プレーヤー',\n  today: '今日',\n  now: '現在時刻',\n  editor_components: {\n    image: '画像',\n    src: 'ソース',\n    alt: '代替テキスト',\n    title: 'タイトル',\n    link: 'リンク',\n  },\n  key_value: {\n    key: 'キー',\n    value: '値',\n    action: 'アクション',\n    empty_key: 'キーは必須です。',\n    duplicate_key: 'キーが重複しています。',\n  },\n\n  // Content preview\n  boolean: {\n    true: 'はい',\n    false: 'いいえ',\n  },\n\n  // Integrations\n  cloud_storage: {\n    invalid: 'このサービスは正しく設定されていません。',\n    auth: {\n      api_key: {\n        key_label: 'API キー',\n        initial: '{service} の {key} を入力してください。',\n        requested: '検証中…',\n        error: '入力された {key} が無効です。確認の上、再度お試しください。',\n      },\n      password: {\n        initial: '{service} のパスワードを入力してください。',\n        requested: 'ログイン中…',\n        error: 'ユーザー名またはパスワードが間違っています。確認の上、再度お試しください。',\n      },\n    },\n    cloudinary: {\n      iframe_title: 'Cloudinary メディアライブラリ',\n      activate: {\n        button_label: 'Cloudinary を有効化',\n        description: 'ログイン後、再度 Sign In ボタンをクリックして続行してください。', // Don’t translate \"Sign In\" here\n      },\n      auth_key_label: 'API Secret',\n    },\n    uploadcare: {\n      auth_key_label: 'API Secret Key',\n    },\n    aws_s3: {\n      auth_key_label: 'シークレットアクセスキー',\n    },\n    cloudflare_r2: {\n      auth_key_label: 'シークレットアクセスキー',\n    },\n    digitalocean_spaces: {\n      auth_key_label: 'シークレットアクセスキー',\n    },\n  },\n\n  // Configuration\n  config: {\n    one_error: 'CMS 設定に問題が見つかりました。問題を解決してから再度お試しください。',\n    many_errors: 'CMS 設定に問題が見つかりました。問題を解決してから再度お試しください。',\n    error_locator: {\n      collection: '{collection} コレクション',\n      file: '{file} ファイル',\n      field: '`{field}` フィールド',\n    },\n    error: {\n      no_secure_context: 'Sveltia CMS は HTTPS またはローカルホスト URL でのみ動作します。',\n      insecure_url:\n        '設定ファイルの URL は HTTPS プロトコルまたはローカルホストアドレスを使用する必要があります。',\n      insecure_urls:\n        '設定ファイルの URL は HTTPS プロトコルまたはローカルホストアドレスを使用する必要があります。',\n      fetch_failed: '設定ファイルを読み込めませんでした。',\n      fetch_failed_not_ok: 'HTTP レスポンスがステータス {status} で返されました。',\n      fetch_failed_with_manual_init:\n        '設定ファイルを取得できませんでした。`config.yml` ファイルの読み込みを防ぐには、`CMS.init()` に渡される設定オブジェクトに [`load_config_file: false`](https://sveltiacms.app/en/docs/api/initialization#providing-a-full-configuration) を追加してください。',\n      parse_failed: '設定ファイルを解析できませんでした。',\n      parse_failed_invalid_object: '設定ファイルが有効な JavaScript オブジェクトではありません。',\n      parse_failed_unsupported_type:\n        '設定ファイルが有効なファイル形式ではありません。サポートされているのは YAML、TOML と JSON のみです。',\n      no_collection: 'コレクションが定義されていません。',\n      missing_backend: 'バックエンドが定義されていません。',\n      missing_backend_name: 'バックエンド名が定義されていません。',\n      unsupported_known_backend:\n        '{name} バックエンドは Sveltia CMS では [非対応です](https://sveltiacms.app/en/docs/migration/netlify-decap-cms#features-not-to-be-implemented)。',\n      unsupported_deprecated_backend:\n        '廃止予定の {name} バックエンドは Sveltia CMS では [非対応です](https://sveltiacms.app/en/docs/migration/netlify-decap-cms#features-not-to-be-implemented)。',\n      unsupported_custom_backend:\n        'カスタムバックエンドは Sveltia CMS では [非対応です](https://sveltiacms.app/en/docs/migration/netlify-decap-cms#features-not-to-be-implemented)。',\n      unsupported_backend_suggestion:\n        '[サポートされているバックエンド](https://sveltiacms.app/en/docs/backends#supported-backends) のいずれかを使用してください。',\n      missing_repository: 'レポジトリが定義されていません。',\n      invalid_repository:\n        '設定されているレポジトリが正しくありません。この設定は「owner/repo」形式でなければなりません。',\n      oauth_implicit_flow:\n        '設定されている認証方式 (暗黙的フロー) は Sveltia CMS では非対応です。代わりに PKCE 認証を使用してください。',\n      github_pkce_unsupported:\n        'GitHub の制約により PKCE 認証はまだサポートされていません。代わりに他の [認証方法](https://sveltiacms.app/en/docs/backends/github#authentication) を使用してください。',\n      oauth_no_app_id: ' OAuth アプリケーション ID が定義されていません。',\n      missing_media_folder: 'メディアフォルダーが定義されていません。',\n      invalid_media_folder:\n        '設定されているメディアフォルダーが正しくありません。この設定は文字列でなければなりません。',\n      invalid_public_folder:\n        '設定されているパブリックフォルダーが正しくありません。この設定は文字列でなければなりません。',\n      public_folder_relative_path:\n        '設定されているパブリックフォルダーが正しくありません。この設定は「/」で始まる絶対パスでなければなりません。',\n      public_folder_absolute_url:\n        'パブリックフォルダーオプションの絶対 URL は Sveltia CMS では非対応です。',\n      invalid_collection_no_options:\n        'コレクションは `folder`、`files`、`divider` オプションのいずれかを定義する必要があります。',\n      invalid_collection_multiple_options:\n        'コレクションは `folder`、`files`、`divider` オプションを同時に持つことはできません。',\n      file_format_mismatch: '拡張子 `{extension}` は `{format}` 形式と一致しません。',\n      invalid_slug_slash:\n        'スラッグテンプレート `{slug}` は無効です。スラッシュを含めることはできません。エントリーをサブフォルダーに整理するには、`slug` の代わりに `path` オプションを使用してください。',\n      missing_collection_name:\n        'コレクション {count} には `name` オプションを空でない文字列として定義する必要があります。',\n      invalid_collection_name:\n        'コレクション名 `{name}` は無効です。特殊文字を含めることはできません。',\n      duplicate_collection_name:\n        'コレクション名は一意でなければなりませんが、`{name}` が複数回使用されています。',\n      missing_collection_file_name:\n        'コレクションファイル {count} には `name` オプションを空でない文字列として定義する必要があります。',\n      invalid_collection_file_name:\n        'コレクションファイル名 `{name}` は無効です。特殊文字を含めることはできません。',\n      duplicate_collection_file_name:\n        'コレクションファイル名は一意でなければなりませんが、`{name}` が複数回使用されています。',\n      missing_field_name:\n        'フィールド {count} には `name` オプションを空でない文字列として定義する必要があります。',\n      invalid_field_name: 'フィールド名 `{name}` は無効です。特殊文字を含めることはできません。',\n      duplicate_field_name:\n        'フィールド名は一意でなければなりませんが、`{name}` が複数回使用されています。',\n      missing_variable_type:\n        '変数タイプ {count} には `name` オプションを空でない文字列として定義する必要があります。',\n      invalid_variable_type: '変数タイプ名 `{name}` は無効です。特殊文字を含めることはできません。',\n      duplicate_variable_type:\n        '変数タイプ名は一意でなければなりませんが、`{name}` が複数回使用されています。',\n      date_field_type:\n        'Sveltia CMS では非推奨の Date フィールドタイプはサポートされていません。代わりに `type: date` オプション付きの DateTime フィールドタイプを使用してください。',\n      unsupported_deprecated_option:\n        'Sveltia CMS では非推奨の `{prop}` オプションはサポートされていません。代わりに `{newProp}` オプションを使用してください。',\n      allow_multiple:\n        'Sveltia CMS では `allow_multiple` オプションはサポートされていません。代わりにデフォルトで `false` の `multiple` オプションを使用してください。',\n      invalid_list_field:\n        'List フィールドは `field`、`fields`、`types` オプションを同時に持つことはできません。',\n      invalid_list_variable_type:\n        'List フィールドの変数タイプが無効です。`widget` オプションは `{widget}` に設定されていますが、`object` でなければなりません。',\n      invalid_object_field:\n        'Object フィールドは `fields` と `types` オプションを同時に持つことはできません。',\n      object_field_missing_fields:\n        'Object フィールドは `fields` または `types` オプションのいずれかを定義する必要があります。',\n      relation_field_invalid_collection:\n        '参照されている `{collection}` コレクションは無効であるか定義されていません。',\n      relation_field_invalid_collection_file:\n        '参照されている `{file}` ファイルは無効であるか定義されていません。',\n      relation_field_missing_file_name:\n        'ファイルコレクションへの参照には `file` オプションを定義する必要があります。',\n      relation_field_invalid_value_field:\n        '参照されている値フィールド `{field}` は無効であるか定義されていません。',\n      unexpected: '予期せぬ問題',\n    },\n    warning: {\n      editorial_workflow_unsupported:\n        'Sveltia CMS ではまだエディトリアルワークフローはサポートされていません。',\n      open_authoring_unsupported:\n        'Sveltia CMS ではまだオープンオーサリングはサポートされていません。',\n      nested_collections_unsupported:\n        'Sveltia CMS ではネストされたコレクションはまだサポートされていません。',\n      unsupported_ignored_option:\n        '`{prop}` オプションは Sveltia CMS ではサポートされていません。このオプションは無視されます。',\n    },\n    compatibility_link:\n      '詳しくは互換性情報をご覧ください: https://sveltiacms.app/en/docs/migration/netlify-decap-cms#features-not-to-be-implemented',\n  },\n\n  // Backends\n  local_workflow: {\n    indicator: 'ローカル',\n    unsupported_browser:\n      'お使いのブラウザーはローカルワークフローに対応していません。代わりに Chrome か Edge を使ってください。',\n    disabled:\n      'お使いのブラウザーではローカルワークフローが無効化されています。<a>有効化する方法はこちら</a>。',\n  },\n\n  // Editorial Workflow\n  status: {\n    drafts: '下書き',\n    in_review: 'レビュー中',\n    ready: '公開可',\n  },\n\n  // Settings\n  categories: 'カテゴリ',\n  prefs: {\n    changes: {\n      api_key_saved: 'API キーが保存されました。',\n      api_key_removed: 'API キーが削除されました。',\n      api_key_invalid: '入力された API キーは無効です。再度確認してお試しください。',\n    },\n    error: {\n      permission_denied:\n        'ブラウザーストレージ (Cookie) アクセスが拒否されました。許可設定を確認の上、再度お試しください。',\n    },\n    appearance: {\n      title: 'アピアランス',\n      theme: 'テーマ',\n      select_theme: 'テーマを選択',\n    },\n    theme: {\n      auto: '自動',\n      dark: 'ダーク',\n      light: 'ライト',\n    },\n    language: {\n      title: '言語',\n      ui_language: {\n        title: 'ユーザーインターフェース言語',\n        select_language: '言語を選択',\n      },\n    },\n    contents: {\n      title: 'コンテンツ',\n      editor: {\n        title: 'エディター',\n        use_draft_backup: {\n          switch_label: 'エントリーの下書きを自動的にバックアップする',\n        },\n        close_on_save: {\n          switch_label: '下書き保存後にエディターを閉じる',\n        },\n        close_with_escape: {\n          switch_label: 'Escape キーでエディターを閉じる',\n        },\n      },\n    },\n    i18n: {\n      title: '国際化',\n      translators: {\n        default: {\n          title: 'デフォルト翻訳サービス',\n          select_service: 'サービスを選択',\n        },\n        api_keys: {\n          title: '翻訳サービス API キー',\n          description: '<a>翻訳サービス</a> の API キーを管理します。',\n        },\n        field_label: '{service} キー',\n        description:\n          '<a {homeHref}>{service}</a> にユーザー登録して、<a {apiKeyHref}>発行されたキー</a> をここに入力すると、テキストエントリー項目の素早い翻訳が可能となります。',\n      },\n    },\n    media: {\n      title: 'メディア',\n      stock_photos: {\n        api_keys: {\n          title: '無料画像素材サービス API キー',\n          description: '<a>無料画像素材サービス</a> の API キーを管理します。',\n        },\n        field_label: '{service} API キー',\n        description:\n          '<a {homeHref}>{service} API</a> にユーザー登録して、<a {apiKeyHref}>発行された API キー</a> をここに入力すると、画像エントリー項目に無料のストックフォトを挿入できます。',\n        credit: '写真提供: {service}',\n        no_services: '利用可能な <a>無料画像素材サービス</a> はありません。',\n      },\n      cloud_storage: {\n        api_keys: {\n          title: 'クラウドストレージサービス API キー',\n          description: '<a>クラウドストレージサービス</a> の API キーを管理します。',\n        },\n        field_label: '{service} API キー',\n        no_services: '利用可能な <a>クラウドストレージサービス</a> はありません。',\n      },\n    },\n    accessibility: {\n      title: 'アクセシビリティ',\n      underline_links: {\n        title: 'リンクに下線を付ける',\n        description:\n          'エントリープレビューやユーザーインターフェイスラベル内のリンクに下線を表示します。',\n        switch_label: '常に下線を付ける',\n      },\n    },\n    advanced: {\n      title: '詳細',\n      beta: {\n        title: 'ベータ機能',\n        description:\n          '不安定あるいは未ローカライズの可能性がある、いくつかのベータ機能を有効化します。',\n        switch_label: 'ベータプログラムに参加する',\n      },\n      developer_mode: {\n        title: '開発者モード',\n        description:\n          '詳細なコンソールログやネイティブコンテキストメニューなど、いくつかの開発者向け機能を有効化します。',\n        switch_label: '開発者モードを有効にする',\n      },\n      deploy_hook: {\n        title: 'デプロイフック',\n        description:\n          '「変更を公開」を選択して手動でデプロイを実行する際に呼び出すウェブフック URL を入力してください。GitHub Actions を使用する場合は空欄のままで構いません。',\n        url: {\n          field_label: 'フック URL',\n          saved: 'フック URL が保存されました。',\n          removed: 'フック URL が削除されました。',\n        },\n        auth: {\n          field_label: '認証ヘッダー (例: Bearer <token>) (オプション)',\n          saved: '認証ヘッダーが保存されました。',\n          removed: '認証ヘッダーが削除されました。',\n        },\n      },\n    },\n  },\n\n  // Keyboard shortcuts\n  keyboard_shortcuts_: {\n    view_content_library: 'コンテンツライブラリを表示',\n    view_asset_library: 'アセットライブラリを表示',\n    search: 'エントリーとアセットを検索',\n    create_entry: '新しいエントリーを作成',\n    save_entry: 'エントリーを保存',\n    cancel_editing: 'エントリーの編集をキャンセル',\n  },\n\n  // File types\n  file_type_labels: {\n    avif: 'AVIF 画像',\n    bmp: 'Bitmap 画像',\n    gif: 'GIF 画像',\n    ico: 'アイコン',\n    jpeg: 'JPEG 画像',\n    jpg: 'JPEG 画像',\n    png: 'PNG 画像',\n    svg: 'SVG 画像',\n    tif: 'TIFF 画像',\n    tiff: 'TIFF 画像',\n    webp: 'WebP 画像',\n    avi: 'AVI 動画',\n    m4v: 'MP4 動画',\n    mov: 'QuickTime 動画',\n    mp4: 'MP4 動画',\n    mpeg: 'MPEG 動画',\n    mpg: 'MPEG 動画',\n    ogg: 'Ogg 動画',\n    ogv: 'Ogg 動画',\n    ts: 'MPEG 動画',\n    webm: 'WebM 動画',\n    '3gp': '3GPP 動画',\n    '3g2': '3GPP2 動画',\n    aac: 'AAC 音声',\n    mid: 'MIDI',\n    midi: 'MIDI',\n    m4a: 'MP4 音声',\n    mp3: 'MP3 音声',\n    oga: 'Ogg 音声',\n    opus: 'OPUS 音声',\n    wav: 'WAV 音声',\n    weba: 'WebM 音声',\n    csv: 'CSV スプレッドシート',\n    doc: 'Word ドキュメント',\n    docx: 'Word ドキュメント',\n    odp: 'OpenDocument プレゼンテーション',\n    ods: 'OpenDocument スプレッドシート',\n    odt: 'OpenDocument テキスト',\n    pdf: 'PDF ドキュメント',\n    ppt: 'PowerPoint プレゼンテーション',\n    pptx: 'PowerPoint プレゼンテーション',\n    rtf: 'リッチテキストドキュメント',\n    xls: 'Excel スプレッドシート',\n    xlsx: 'Excel スプレッドシート',\n    html: 'HTML テキスト',\n    js: 'JavaScript',\n    json: 'JSON テキスト',\n    md: 'Markdown テキスト',\n    toml: 'TOML テキスト',\n    yaml: 'YAML テキスト',\n    yml: 'YAML テキスト',\n  },\n\n  // file size units\n  file_size_units: {\n    b: '{size} バイト',\n    kb: '{size} KB',\n    mb: '{size} MB',\n    gb: '{size} GB',\n    tb: '{size} TB',\n  },\n};\n","import { initLocales } from '@sveltia/ui';\nimport { getPathInfo } from '@sveltia/utils/file';\nimport { get } from 'svelte/store';\nimport { addMessages, getLocaleFromNavigator } from 'svelte-i18n';\n\nimport { prefs } from '$lib/services/user/prefs';\n\n/**\n * Load strings and initialize the locales.\n * @see https://github.com/kaisermann/svelte-i18n/blob/main/docs/Getting%20Started.md\n * @see https://vitejs.dev/guide/features.html#glob-import\n */\nexport const initAppLocale = () => {\n  /** @type {Record<string, { strings: Record<string, string> }>} */\n  const modules = import.meta.glob('$lib/locales/*.js', { eager: true });\n\n  Object.entries(modules).forEach(([path, { strings }]) => {\n    const locale = getPathInfo(path).filename;\n\n    addMessages(locale, strings);\n  });\n\n  initLocales({\n    fallbackLocale: 'en',\n    initialLocale: get(prefs).locale || (getLocaleFromNavigator() ?? '').split('-')[0] || 'en',\n  });\n};\n","<script>\n  import { AppShell } from '@sveltia/ui';\n  import { onMount } from 'svelte';\n  import { isLoading } from 'svelte-i18n';\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';\n  import { initUserEnvDetection } from '$lib/services/user/env';\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  onMount(() => {\n    initAppLocale();\n  });\n\n  onMount(() => {\n    initCmsConfig(config);\n  });\n\n  onMount(() => {\n    initUserEnvDetection();\n  });\n\n  // Fix the position of the custom mount element if needed\n  // @see https://decapcms.org/docs/custom-mounting/\n  // @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) {\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.target = '_blank';\n      }\n    }\n  }}\n/>\n\n<AppShell>\n  {#if !$isLoading}\n    <div role=\"none\" class=\"outer\">\n      <UpdateNotification />\n      {#if $backend}\n        <BackendStatusIndicator />\n      {/if}\n      <div role=\"none\" class=\"main\">\n        {#if $user && $dataLoaded && transitioned}\n          <MainRouter />\n        {:else}\n          <EntrancePage />\n        {/if}\n      </div>\n    </div>\n  {/if}\n  <div role=\"status\">{$announcedPageStatus}</div>\n</AppShell>\n\n<style lang=\"scss\">\n  @view-transition {\n    navigation: auto;\n  }\n\n  @keyframes slide-out-to-left {\n    from {\n      transform: translateX(0);\n      filter: brightness(1);\n    }\n\n    to {\n      transform: translateX(-20%);\n      filter: brightness(0.5);\n    }\n  }\n\n  @keyframes slide-out-to-right {\n    from {\n      transform: translateX(0);\n      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 url = raw ? URL.createObjectURL(new Blob([style], { type: 'text/css' })) : style;\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\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"}