fundus 0.29.1 → 0.29.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/README.md +6 -7
  2. package/build/client/_app/immutable/chunks/{Cq3PJxJG.js → CtCLVGPE.js} +1 -1
  3. package/build/client/_app/immutable/chunks/CtCLVGPE.js.br +3 -0
  4. package/build/client/_app/immutable/chunks/CtCLVGPE.js.gz +0 -0
  5. package/build/client/_app/immutable/chunks/DYQoWdCa.js +121 -0
  6. package/build/client/_app/immutable/chunks/DYQoWdCa.js.br +0 -0
  7. package/build/client/_app/immutable/chunks/DYQoWdCa.js.gz +0 -0
  8. package/build/client/_app/immutable/chunks/Den6nsPm.js +1 -0
  9. package/build/client/_app/immutable/chunks/Den6nsPm.js.br +0 -0
  10. package/build/client/_app/immutable/chunks/Den6nsPm.js.gz +0 -0
  11. package/build/client/_app/immutable/entry/{app.Dit62aNJ.js → app.DopOo-PH.js} +2 -2
  12. package/build/client/_app/immutable/entry/app.DopOo-PH.js.br +0 -0
  13. package/build/client/_app/immutable/entry/app.DopOo-PH.js.gz +0 -0
  14. package/build/client/_app/immutable/entry/start.BVHoCzj2.js +1 -0
  15. package/build/client/_app/immutable/entry/start.BVHoCzj2.js.br +0 -0
  16. package/build/client/_app/immutable/entry/start.BVHoCzj2.js.gz +0 -0
  17. package/build/client/_app/immutable/nodes/{0.DnyKXqLr.js → 0.BQrGLMQU.js} +1 -1
  18. package/build/client/_app/immutable/nodes/0.BQrGLMQU.js.br +0 -0
  19. package/build/client/_app/immutable/nodes/0.BQrGLMQU.js.gz +0 -0
  20. package/build/client/_app/immutable/nodes/{1.Cz-4S6LF.js → 1.C_g8kBDL.js} +1 -1
  21. package/build/client/_app/immutable/nodes/1.C_g8kBDL.js.br +1 -0
  22. package/build/client/_app/immutable/nodes/1.C_g8kBDL.js.gz +0 -0
  23. package/build/client/_app/immutable/nodes/{2.C75-hsCY.js → 2.ClbmDuoO.js} +1 -1
  24. package/build/client/_app/immutable/nodes/2.ClbmDuoO.js.br +0 -0
  25. package/build/client/_app/immutable/nodes/2.ClbmDuoO.js.gz +0 -0
  26. package/build/client/_app/immutable/nodes/{3.4pSddugU.js → 3.CqeLuqBs.js} +1 -1
  27. package/build/client/_app/immutable/nodes/3.CqeLuqBs.js.br +0 -0
  28. package/build/client/_app/immutable/nodes/3.CqeLuqBs.js.gz +0 -0
  29. package/build/client/_app/immutable/nodes/{4.KoQxJEWQ.js → 4.Bx5yAlkf.js} +1 -1
  30. package/build/client/_app/immutable/nodes/4.Bx5yAlkf.js.br +0 -0
  31. package/build/client/_app/immutable/nodes/4.Bx5yAlkf.js.gz +0 -0
  32. package/build/client/_app/version.json +1 -1
  33. package/build/client/_app/version.json.br +0 -0
  34. package/build/client/_app/version.json.gz +0 -0
  35. package/build/handler.js +7 -7
  36. package/build/index.js +7 -7
  37. package/build/server/chunks/chunks/{context.js-BR2IRl9z.js → context.js-C_581OHo.js} +2 -2
  38. package/build/server/chunks/chunks/{context.js-BR2IRl9z.js.map → context.js-C_581OHo.js.map} +1 -1
  39. package/build/server/chunks/chunks/{contract.js-DHeIVVv8.js → contract.js-CkXfem6U.js} +8 -5
  40. package/build/server/chunks/chunks/contract.js-CkXfem6U.js.map +1 -0
  41. package/build/server/chunks/chunks/{exports.js-CNZgoxR0.js → exports.js--DmMivD2.js} +2 -2
  42. package/build/server/chunks/chunks/{exports.js-CNZgoxR0.js.map → exports.js--DmMivD2.js.map} +1 -1
  43. package/build/server/chunks/chunks/{http.js-dk5jbOFm.js → http.js-gzmdrjmr.js} +2 -2
  44. package/build/server/chunks/chunks/{http.js-dk5jbOFm.js.map → http.js-gzmdrjmr.js.map} +1 -1
  45. package/build/server/chunks/chunks/{internal.js-DlRiYJji.js → internal.js-Cbp0-17k.js} +3 -3
  46. package/build/server/chunks/chunks/{internal.js-DlRiYJji.js.map → internal.js-Cbp0-17k.js.map} +1 -1
  47. package/build/server/chunks/chunks/internal2.js-BlXt2rfE.js.map +1 -1
  48. package/build/server/chunks/chunks/{shared.js-C6qC0jnA.js → shared.js-BejF-VOO.js} +2 -2
  49. package/build/server/chunks/chunks/{shared.js-C6qC0jnA.js.map → shared.js-BejF-VOO.js.map} +1 -1
  50. package/build/server/chunks/chunks/{utils.js-BZ32hXFI.js → utils.js-BUczVTgL.js} +3 -3
  51. package/build/server/chunks/chunks/{utils.js-BZ32hXFI.js.map → utils.js-BUczVTgL.js.map} +1 -1
  52. package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-8jGLP2Aj.js → _server.ts.js-CCSUkwIk.js} +4 -4
  53. package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-8jGLP2Aj.js.map → _server.ts.js-CCSUkwIk.js.map} +1 -1
  54. package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-BOW9Ejim.js → _server.ts.js-Br-3jz-w.js} +5 -6
  55. package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-BOW9Ejim.js.map → _server.ts.js-Br-3jz-w.js.map} +1 -1
  56. package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/{_server.ts.js-Clac8atJ.js → _server.ts.js-IE3Wtg58.js} +5 -6
  57. package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/{_server.ts.js-Clac8atJ.js.map → _server.ts.js-IE3Wtg58.js.map} +1 -1
  58. package/build/server/chunks/entries/endpoints/api/assets/_id_/reimport/{_server.ts.js-EdHTA-SO.js → _server.ts.js-DeERkiGY.js} +5 -6
  59. package/build/server/chunks/entries/endpoints/api/assets/_id_/reimport/{_server.ts.js-EdHTA-SO.js.map → _server.ts.js-DeERkiGY.js.map} +1 -1
  60. package/build/server/chunks/entries/endpoints/api/assets/_id_/retag/{_server.ts.js-ZBCRgRYi.js → _server.ts.js-Bg3ghGrT.js} +5 -6
  61. package/build/server/chunks/entries/endpoints/api/assets/_id_/retag/{_server.ts.js-ZBCRgRYi.js.map → _server.ts.js-Bg3ghGrT.js.map} +1 -1
  62. package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-DY_e5K6d.js → _server.ts.js-C3skEzmK.js} +5 -6
  63. package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-DY_e5K6d.js.map → _server.ts.js-C3skEzmK.js.map} +1 -1
  64. package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-Cl2jxJNi.js → _server.ts.js-BKPDUSpo.js} +5 -6
  65. package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-Cl2jxJNi.js.map → _server.ts.js-BKPDUSpo.js.map} +1 -1
  66. package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-DrrZWUbd.js → _server.ts.js-Cj7U6IF9.js} +5 -6
  67. package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-DrrZWUbd.js.map → _server.ts.js-Cj7U6IF9.js.map} +1 -1
  68. package/build/server/chunks/entries/endpoints/api/events/{_server.ts.js-Bnw0HbEk.js → _server.ts.js-DXdvakNJ.js} +5 -6
  69. package/build/server/chunks/entries/endpoints/api/events/{_server.ts.js-Bnw0HbEk.js.map → _server.ts.js-DXdvakNJ.js.map} +1 -1
  70. package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-NeVn2ap9.js → _server.ts.js-E7HezGfG.js} +5 -6
  71. package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-NeVn2ap9.js.map → _server.ts.js-E7HezGfG.js.map} +1 -1
  72. package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-ENGDgoLy.js → _server.ts.js-B6Ri4rdz.js} +5 -6
  73. package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-ENGDgoLy.js.map → _server.ts.js-B6Ri4rdz.js.map} +1 -1
  74. package/build/server/chunks/entries/endpoints/api/imports/{_server.ts.js-BQVGCzBR.js → _server.ts.js-BOoeDnm0.js} +5 -6
  75. package/build/server/chunks/entries/endpoints/api/imports/{_server.ts.js-BQVGCzBR.js.map → _server.ts.js-BOoeDnm0.js.map} +1 -1
  76. package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-Pxver0Y-.js → _server.ts.js-DrmUI1s2.js} +5 -6
  77. package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-Pxver0Y-.js.map → _server.ts.js-DrmUI1s2.js.map} +1 -1
  78. package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-DYtiqzJq.js → _server.ts.js-Try_45xL.js} +5 -6
  79. package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-DYtiqzJq.js.map → _server.ts.js-Try_45xL.js.map} +1 -1
  80. package/build/server/chunks/entries/endpoints/api/raw/adopt/{_server.ts.js-lBgmEZHV.js → _server.ts.js-9dzHRtWu.js} +5 -6
  81. package/build/server/chunks/entries/endpoints/api/raw/adopt/{_server.ts.js-lBgmEZHV.js.map → _server.ts.js-9dzHRtWu.js.map} +1 -1
  82. package/build/server/chunks/entries/endpoints/api/raw/edited/accept/{_server.ts.js-BJHyONFH.js → _server.ts.js-fW6YixfD.js} +5 -6
  83. package/build/server/chunks/entries/endpoints/api/raw/edited/accept/{_server.ts.js-BJHyONFH.js.map → _server.ts.js-fW6YixfD.js.map} +1 -1
  84. package/build/server/chunks/entries/endpoints/api/raw/edited/dismiss/{_server.ts.js-Bm5XO80W.js → _server.ts.js-CaUNYjjt.js} +5 -6
  85. package/build/server/chunks/entries/endpoints/api/raw/edited/dismiss/{_server.ts.js-Bm5XO80W.js.map → _server.ts.js-CaUNYjjt.js.map} +1 -1
  86. package/build/server/chunks/entries/endpoints/api/reconcile/{_server.ts.js-B7Z20kYf.js → _server.ts.js-BnB7Val_.js} +5 -6
  87. package/build/server/chunks/entries/endpoints/api/reconcile/{_server.ts.js-B7Z20kYf.js.map → _server.ts.js-BnB7Val_.js.map} +1 -1
  88. package/build/server/chunks/entries/endpoints/api/reveal/{_server.ts.js-Cg-f37jc.js → _server.ts.js-DpTK9Nri.js} +5 -6
  89. package/build/server/chunks/entries/endpoints/api/reveal/{_server.ts.js-Cg-f37jc.js.map → _server.ts.js-DpTK9Nri.js.map} +1 -1
  90. package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-dIXZiq5l.js → _server.ts.js-G4O-NUBJ.js} +5 -6
  91. package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-dIXZiq5l.js.map → _server.ts.js-G4O-NUBJ.js.map} +1 -1
  92. package/build/server/chunks/entries/endpoints/api/usage/{_server.ts.js-CnTrS5pT.js → _server.ts.js-Dp8g688B.js} +5 -6
  93. package/build/server/chunks/entries/endpoints/api/usage/{_server.ts.js-CnTrS5pT.js.map → _server.ts.js-Dp8g688B.js.map} +1 -1
  94. package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-B7TcFRuL.js → _server.ts.js-DfQ9xywr.js} +4 -4
  95. package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-B7TcFRuL.js.map → _server.ts.js-DfQ9xywr.js.map} +1 -1
  96. package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-BkUQInqW.js → _server.ts.js-bYq4Ayyw.js} +5 -6
  97. package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-BkUQInqW.js.map → _server.ts.js-bYq4Ayyw.js.map} +1 -1
  98. package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-CshyvqOq.js → _server.ts.js-BnQ-fziQ.js} +5 -6
  99. package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-CshyvqOq.js.map → _server.ts.js-BnQ-fziQ.js.map} +1 -1
  100. package/build/server/chunks/entries/{hooks.server.js-D4DECjz_.js → hooks.server.js-DHvjD7tO.js} +4 -5
  101. package/build/server/chunks/entries/{hooks.server.js-D4DECjz_.js.map → hooks.server.js-DHvjD7tO.js.map} +1 -1
  102. package/build/server/chunks/{handler-Cna54zf6.js → handler-lpdGRHA-.js} +5 -5
  103. package/build/server/chunks/{handler-Cna54zf6.js.map → handler-lpdGRHA-.js.map} +1 -1
  104. package/build/server/chunks/{index.js-BnpHWDec.js → index.js-BJ2riKAM.js} +5 -5
  105. package/build/server/chunks/{index.js-BnpHWDec.js.map → index.js-BJ2riKAM.js.map} +1 -1
  106. package/build/server/chunks/{manifest.js-9WMEOpxH.js → manifest.js-B7CByQbP.js} +31 -31
  107. package/build/server/chunks/{manifest.js-9WMEOpxH.js.map → manifest.js-B7CByQbP.js.map} +1 -1
  108. package/build/server/chunks/nodes/{0.js-C2b1a672.js → 0.js-CIEno0O_.js} +2 -2
  109. package/build/server/chunks/nodes/{0.js-C2b1a672.js.map → 0.js-CIEno0O_.js.map} +1 -1
  110. package/build/server/chunks/nodes/1.js-BDhDlx7m.js +7 -0
  111. package/build/server/chunks/nodes/{1.js-P3Ai28oj.js.map → 1.js-BDhDlx7m.js.map} +1 -1
  112. package/build/server/chunks/nodes/{2.js-sM3j5BqB.js → 2.js-CZGajL-G.js} +2 -2
  113. package/build/server/chunks/nodes/{2.js-sM3j5BqB.js.map → 2.js-CZGajL-G.js.map} +1 -1
  114. package/build/server/chunks/nodes/3.js-B_3IVFss.js +7 -0
  115. package/build/server/chunks/nodes/{3.js-G0jV-ymM.js.map → 3.js-B_3IVFss.js.map} +1 -1
  116. package/build/server/chunks/nodes/{4.js-BUTPrI45.js → 4.js-DgUv1tIQ.js} +2 -2
  117. package/build/server/chunks/nodes/{4.js-BUTPrI45.js.map → 4.js-DgUv1tIQ.js.map} +1 -1
  118. package/dist/core/plugins/video.d.ts +1 -1
  119. package/dist/runtime/canvas.d.ts +1 -1
  120. package/dist/runtime/components/Slice.svelte +12 -16
  121. package/dist/runtime/kind-handlers.d.ts +6 -10
  122. package/dist/runtime/kind-handlers.js +29 -49
  123. package/dist/runtime/manifest.d.ts +2 -8
  124. package/dist/runtime/manifest.js +4 -5
  125. package/dist/runtime/preload-registry.d.ts +5 -7
  126. package/dist/runtime/preload-registry.js +6 -9
  127. package/dist/runtime/retained-entry.d.ts +1 -1
  128. package/dist/runtime/retained-entry.js +1 -1
  129. package/dist/runtime/slice-source-lifecycle.d.ts +2 -10
  130. package/dist/runtime/slice-source-lifecycle.js +2 -11
  131. package/dist/server/config-loader.d.ts +1 -1
  132. package/dist/server/processing/ffmpeg.js +10 -5
  133. package/package.json +2 -3
  134. package/build/client/_app/immutable/chunks/CE3cWlK6.js +0 -1
  135. package/build/client/_app/immutable/chunks/CE3cWlK6.js.br +0 -0
  136. package/build/client/_app/immutable/chunks/CE3cWlK6.js.gz +0 -0
  137. package/build/client/_app/immutable/chunks/Cq3PJxJG.js.br +0 -2
  138. package/build/client/_app/immutable/chunks/Cq3PJxJG.js.gz +0 -0
  139. package/build/client/_app/immutable/chunks/Wk7WcyQU.js +0 -121
  140. package/build/client/_app/immutable/chunks/Wk7WcyQU.js.br +0 -0
  141. package/build/client/_app/immutable/chunks/Wk7WcyQU.js.gz +0 -0
  142. package/build/client/_app/immutable/entry/app.Dit62aNJ.js.br +0 -0
  143. package/build/client/_app/immutable/entry/app.Dit62aNJ.js.gz +0 -0
  144. package/build/client/_app/immutable/entry/start.CCBu6ABN.js +0 -1
  145. package/build/client/_app/immutable/entry/start.CCBu6ABN.js.br +0 -0
  146. package/build/client/_app/immutable/entry/start.CCBu6ABN.js.gz +0 -0
  147. package/build/client/_app/immutable/nodes/0.DnyKXqLr.js.br +0 -0
  148. package/build/client/_app/immutable/nodes/0.DnyKXqLr.js.gz +0 -0
  149. package/build/client/_app/immutable/nodes/1.Cz-4S6LF.js.br +0 -0
  150. package/build/client/_app/immutable/nodes/1.Cz-4S6LF.js.gz +0 -0
  151. package/build/client/_app/immutable/nodes/2.C75-hsCY.js.br +0 -0
  152. package/build/client/_app/immutable/nodes/2.C75-hsCY.js.gz +0 -0
  153. package/build/client/_app/immutable/nodes/3.4pSddugU.js.br +0 -0
  154. package/build/client/_app/immutable/nodes/3.4pSddugU.js.gz +0 -0
  155. package/build/client/_app/immutable/nodes/4.KoQxJEWQ.js.br +0 -0
  156. package/build/client/_app/immutable/nodes/4.KoQxJEWQ.js.gz +0 -0
  157. package/build/server/chunks/chunks/contract.js-DHeIVVv8.js.map +0 -1
  158. package/build/server/chunks/nodes/1.js-P3Ai28oj.js +0 -7
  159. package/build/server/chunks/nodes/3.js-G0jV-ymM.js +0 -7
@@ -1,3 +1,17 @@
1
+ /**
2
+ * The runtime part of the type-plugin contract: per-kind preload
3
+ * strategy and its inverse release strategy. Each first-party kind registers
4
+ * a handler that knows how its delivered file is loaded — images fetch and
5
+ * retain a decoded element, slices too, media kinds (video/audio) fetch
6
+ * fully and mint an object URL — and how what it loaded is disposed (revoke
7
+ * the object URL; decoded elements have nothing to dispose). An unknown kind
8
+ * falls back to a plain full fetch: no decode, no retention.
9
+ *
10
+ * Handlers are pure strategy: refcounting, cross-holder dedup, and
11
+ * in-flight bookkeeping live in the module-wide registry
12
+ * (preload-registry.ts); kind-agnostic orchestration lives in `Manifest` and
13
+ * `retainEntry`.
14
+ */
1
15
  import { plugins } from '../core/plugins/registry.js';
2
16
  /**
3
17
  * Entry kinds whose delivered file is retained as an object URL by
@@ -46,13 +60,21 @@ function verifyByteSize(url, expected, actual) {
46
60
  }
47
61
  }
48
62
  /**
49
- * The image strategy: fetch the full file, then decode it via an
63
+ * The image and slice strategy: fetch the full file, then decode it via an
50
64
  * HTMLImageElement where a DOM exists (the browser serves the bytes from
51
- * cache); headless environments (Node tests, SSR) skip decoding.
52
- * Retains the decoded element for canvas drawing until the last holder releases.
53
- * Nothing to explicitly dispose — release drops the registry's reference.
65
+ * cache); headless environments (Node tests, SSR) skip decoding. Retains the
66
+ * decoded element until the last holder releases, so canvas drawing and
67
+ * `SliceSourceLifecycle` commit synchronously — a preloaded slice paints in
68
+ * its mount frame — and a one-slice's mounted `<img>` paints from a warm
69
+ * cache. Nothing to explicitly dispose — release drops the registry's
70
+ * reference.
71
+ *
72
+ * Deliberately not an ImageBitmap: WebKit on iOS can empty a bitmap while the
73
+ * app is in the background (memory pressure, GPU process restart) yet keep
74
+ * its size, so every later draw or texture upload from it is silently blank.
75
+ * An element whose decoded pixels were purged is decoded again from its file.
54
76
  */
55
- const imageHandler = {
77
+ const decodedImageHandler = {
56
78
  async preload(url, byteSize) {
57
79
  const response = await fetchCompletely(url);
58
80
  // Read the body fully so the file is actually transferred (and
@@ -68,48 +90,6 @@ const imageHandler = {
68
90
  return {};
69
91
  }
70
92
  };
71
- /**
72
- * The slice strategy: fetch the full file and retain a decoded form while
73
- * held, chosen by the entry's slicing mode. Multi-cell slices (nine,
74
- * three-*) draw through a canvas and retain the pixels as an ImageBitmap —
75
- * unlike a throwaway decode into the browser's evictable image cache, the
76
- * bitmap survives memory pressure and lets `SliceSourceLifecycle` commit
77
- * synchronously, so a preloaded slice paints in its mount frame. One-slice
78
- * sources render as a plain `<img>`, which cannot paint from a bitmap: they
79
- * retain the decoded HTMLImageElement instead — the same synchronous commit,
80
- * and its decode warms the (evictable) cache the mounted `<img>` paints
81
- * from. Release closes the bitmap; a retained element has nothing to
82
- * dispose. Slice sources are small (the insets cover every rendered size),
83
- * so retention is cheap. Environments without `createImageBitmap` retain the
84
- * decoded element for every mode.
85
- *
86
- * Bitmaps are premultiplied so WebGL uploads match the premultiplied texture a
87
- * retained element yields with `UNPACK_PREMULTIPLY_ALPHA_WEBGL` (bitmaps ignore
88
- * that flag); Canvas 2D draws either form identically.
89
- */
90
- const sliceHandler = {
91
- async preload(url, byteSize, entry) {
92
- const response = await fetchCompletely(url);
93
- const blob = await response.blob();
94
- verifyByteSize(url, byteSize, blob.size);
95
- const oneSlice = entry?.slicing?.mode === 'one';
96
- if (!oneSlice && typeof globalThis.createImageBitmap === 'function') {
97
- return {
98
- imageBitmap: await globalThis.createImageBitmap(blob, { premultiplyAlpha: 'premultiply' })
99
- };
100
- }
101
- if (typeof globalThis.Image === 'function') {
102
- const image = new globalThis.Image();
103
- image.src = url;
104
- await image.decode();
105
- return { image };
106
- }
107
- return {};
108
- },
109
- release(resources) {
110
- resources.imageBitmap?.close();
111
- }
112
- };
113
93
  /**
114
94
  * The retained-media strategy (video, chroma-key-video, audio): fetch the
115
95
  * full file and retain it as an object URL so later playback does not touch
@@ -140,8 +120,8 @@ const unknownKindHandler = {
140
120
  }
141
121
  };
142
122
  const runtimeHandlerCatalogue = {
143
- image: imageHandler,
144
- slice: sliceHandler,
123
+ image: decodedImageHandler,
124
+ slice: decodedImageHandler,
145
125
  video: retainedMediaHandler,
146
126
  'chroma-key-video': retainedMediaHandler,
147
127
  audio: retainedMediaHandler
@@ -16,12 +16,6 @@ export interface EntrySource {
16
16
  url: string;
17
17
  kind: string;
18
18
  byteSize: number;
19
- /**
20
- * The (possibly inlined) entry the source came from. Kind strategies read
21
- * per-entry metadata from it — the slice handler picks its retention form
22
- * by slicing mode. Orchestration itself never looks inside.
23
- */
24
- entry: Record<string, unknown>;
25
19
  }
26
20
  /** Reject an entry `byteSize` that is not a non-negative safe integer. */
27
21
  export declare function assertEntryByteSize(src: string, byteSize: unknown): asserts byteSize is number;
@@ -57,8 +51,8 @@ export declare class Manifest {
57
51
  * Drop this manifest's holds on everything it preloaded. Assets shared
58
52
  * with another holder (a manifest or a `retainEntry` handle) stay fully
59
53
  * alive for that holder; assets nobody holds anymore are disposed via their
60
- * kind's release strategy (retained media object URLs are revoked, slice
61
- * bitmaps closed, decoded image references dropped). Components fall back
54
+ * kind's release strategy (retained media object URLs are revoked,
55
+ * decoded image references dropped). Components fall back
62
56
  * to the network URL.
63
57
  *
64
58
  * Safe in every state: before or without `preload()` it is a no-op, and
@@ -34,8 +34,7 @@ export function collectEntrySources(entry) {
34
34
  id: record.id,
35
35
  url: record.src,
36
36
  kind: record.kind,
37
- byteSize: record.byteSize,
38
- entry: record
37
+ byteSize: record.byteSize
39
38
  });
40
39
  }
41
40
  for (const nested of Object.values(record))
@@ -97,8 +96,8 @@ export class Manifest {
97
96
  * Drop this manifest's holds on everything it preloaded. Assets shared
98
97
  * with another holder (a manifest or a `retainEntry` handle) stay fully
99
98
  * alive for that holder; assets nobody holds anymore are disposed via their
100
- * kind's release strategy (retained media object URLs are revoked, slice
101
- * bitmaps closed, decoded image references dropped). Components fall back
99
+ * kind's release strategy (retained media object URLs are revoked,
100
+ * decoded image references dropped). Components fall back
102
101
  * to the network URL.
103
102
  *
104
103
  * Safe in every state: before or without `preload()` it is a no-op, and
@@ -132,7 +131,7 @@ export class Manifest {
132
131
  const acquisitions = [];
133
132
  for (const [url, source] of sourceByUrl) {
134
133
  held.add(url);
135
- acquisitions.push(acquireSource(url, source.kind, source.byteSize, source.entry));
134
+ acquisitions.push(acquireSource(url, source.kind, source.byteSize));
136
135
  }
137
136
  const outcomes = await Promise.allSettled(acquisitions);
138
137
  const failure = outcomes.find((outcome) => outcome.status === 'rejected');
@@ -5,7 +5,7 @@
5
5
  * load clears the in-flight state so the URL stays retryable; the caller
6
6
  * rolls back its own hold via `releaseSource`.
7
7
  */
8
- export declare function acquireSource(url: string, kind: string, byteSize: number, sourceEntry?: Record<string, unknown>): Promise<void>;
8
+ export declare function acquireSource(url: string, kind: string, byteSize: number): Promise<void>;
9
9
  /**
10
10
  * Drop one hold on `url`. At zero holds the kind handler's release strategy
11
11
  * runs (object URL revoked) and the entry is cleared — unless the load is
@@ -20,13 +20,11 @@ export declare function releaseSource(url: string): void;
20
20
  */
21
21
  export declare function resolveRetainedSource(url: string): string;
22
22
  /**
23
- * The retained decoded source of an image or slice URL while a holder holds
24
- * it — a multi-cell slice bitmap or decoded image element — or `null` when
25
- * not (or no longer) preloaded; the consumer then
26
- * falls back to an async image load. Never returns a closed bitmap: closing
27
- * happens only when the entry is dropped from the registry.
23
+ * The retained decoded element of an image or slice URL while a holder holds
24
+ * it, or `null` when not (or no longer) preloaded; the consumer then falls
25
+ * back to an async image load.
28
26
  */
29
- export declare function resolveRetainedImageSource(url: string): ImageBitmap | HTMLImageElement | null;
27
+ export declare function resolveRetainedImageSource(url: string): HTMLImageElement | null;
30
28
  /**
31
29
  * A source's preload state, for render-time diagnostics:
32
30
  * - `loaded` — fully preloaded and held (every kind resolves non-null
@@ -26,7 +26,7 @@ const registryByUrl = new Map();
26
26
  * load clears the in-flight state so the URL stays retryable; the caller
27
27
  * rolls back its own hold via `releaseSource`.
28
28
  */
29
- export function acquireSource(url, kind, byteSize, sourceEntry) {
29
+ export function acquireSource(url, kind, byteSize) {
30
30
  let entry = registryByUrl.get(url);
31
31
  if (!entry) {
32
32
  entry = { kind, byteSize, referenceCount: 0, pending: null, resources: null };
@@ -42,7 +42,7 @@ export function acquireSource(url, kind, byteSize, sourceEntry) {
42
42
  if (!pending) {
43
43
  const acquired = entry;
44
44
  pending = runtimeHandlerFor(kind)
45
- .preload(url, byteSize, sourceEntry)
45
+ .preload(url, byteSize)
46
46
  .then((resources) => {
47
47
  acquired.pending = null;
48
48
  if (acquired.referenceCount === 0) {
@@ -92,15 +92,12 @@ export function resolveRetainedSource(url) {
92
92
  return registryByUrl.get(url)?.resources?.objectUrl ?? url;
93
93
  }
94
94
  /**
95
- * The retained decoded source of an image or slice URL while a holder holds
96
- * it — a multi-cell slice bitmap or decoded image element — or `null` when
97
- * not (or no longer) preloaded; the consumer then
98
- * falls back to an async image load. Never returns a closed bitmap: closing
99
- * happens only when the entry is dropped from the registry.
95
+ * The retained decoded element of an image or slice URL while a holder holds
96
+ * it, or `null` when not (or no longer) preloaded; the consumer then falls
97
+ * back to an async image load.
100
98
  */
101
99
  export function resolveRetainedImageSource(url) {
102
- const resources = registryByUrl.get(url)?.resources;
103
- return resources?.imageBitmap ?? resources?.image ?? null;
100
+ return registryByUrl.get(url)?.resources?.image ?? null;
104
101
  }
105
102
  export function sourceStatus(url) {
106
103
  const entry = registryByUrl.get(url);
@@ -13,7 +13,7 @@ import type { ManifestEntry } from '../core/index.js';
13
13
  */
14
14
  export type RetainedSourceOf<E extends ManifestEntry> = E extends {
15
15
  kind: 'image' | 'slice';
16
- } ? HTMLImageElement | ImageBitmap : E extends {
16
+ } ? HTMLImageElement : E extends {
17
17
  kind: 'video' | 'chroma-key-video' | 'audio';
18
18
  } ? string : never;
19
19
  /** One hold on an entry's loaded source, from `retainEntry`. */
@@ -43,7 +43,7 @@ export async function retainEntry(entry) {
43
43
  const { id, kind, src, byteSize } = entry;
44
44
  assertEntryByteSize(src, byteSize);
45
45
  try {
46
- await acquireSource(src, kind, byteSize, entry);
46
+ await acquireSource(src, kind, byteSize);
47
47
  }
48
48
  catch (cause) {
49
49
  releaseSource(src);
@@ -1,18 +1,10 @@
1
1
  import type { SliceManifestEntry } from '../core/index.js';
2
- /** What a committed slice draws from: a decoded element or a retained bitmap. */
3
- export type SliceRenderSource = HTMLImageElement | ImageBitmap;
4
2
  export interface LoadedSliceSnapshot {
5
3
  entry: SliceManifestEntry;
6
- image: SliceRenderSource;
4
+ image: HTMLImageElement;
7
5
  }
8
6
  export type SliceImageLoader = (url: string) => Promise<HTMLImageElement>;
9
- export type RetainedSliceSourceResolver = (url: string) => SliceRenderSource | null;
10
- /**
11
- * Whether a committed source can no longer be drawn: a preload-retained
12
- * bitmap is closed when its last hold is released, and drawing a closed
13
- * bitmap throws. A detached source is dropped and reloaded asynchronously.
14
- */
15
- export declare function isDetachedSliceSource(image: SliceRenderSource): boolean;
7
+ export type RetainedSliceSourceResolver = (url: string) => HTMLImageElement | null;
16
8
  export declare function loadSliceImage(url: string): Promise<HTMLImageElement>;
17
9
  /** Coordinates requested slice entries with the last image-ready snapshot. */
18
10
  export declare class SliceSourceLifecycle {
@@ -1,12 +1,4 @@
1
1
  import { resolveRetainedImageSource } from './preload-registry.js';
2
- /**
3
- * Whether a committed source can no longer be drawn: a preload-retained
4
- * bitmap is closed when its last hold is released, and drawing a closed
5
- * bitmap throws. A detached source is dropped and reloaded asynchronously.
6
- */
7
- export function isDetachedSliceSource(image) {
8
- return typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap && image.width === 0;
9
- }
10
2
  export function loadSliceImage(url) {
11
3
  const image = new Image();
12
4
  image.decoding = 'async';
@@ -32,12 +24,11 @@ export class SliceSourceLifecycle {
32
24
  return;
33
25
  this.#requestedEntry = entry;
34
26
  const displayed = this.#displayedSnapshot;
35
- if (displayed?.entry.src === entry.src && !isDetachedSliceSource(displayed.image)) {
27
+ if (displayed?.entry.src === entry.src) {
36
28
  this.#commitSnapshot({ entry, image: displayed.image });
37
29
  return;
38
30
  }
39
- // A preload-retained source (the pinned bitmap of a multi-cell slice,
40
- // the decoded element of a one-slice) commits synchronously — the slice
31
+ // A preload-retained decoded element commits synchronously — the slice
41
32
  // paints in its mount frame instead of one decode roundtrip later.
42
33
  const retained = this.#resolveRetained(entry.src);
43
34
  if (retained) {
@@ -7,7 +7,7 @@ export interface ResolvedVideoPluginConfig {
7
7
  presets: Record<string, ResolvedVideoPreset>;
8
8
  /** Absolute path of the ffmpeg binary to use; null = the bundled `ffmpeg-static`. */
9
9
  ffmpegPath: string | null;
10
- /** Absolute path of the ffprobe binary to use; null = the bundled `ffprobe-static`. */
10
+ /** Absolute path of the ffprobe binary to use; null = the bundled `@ffprobe-installer/ffprobe`. */
11
11
  ffprobePath: string | null;
12
12
  }
13
13
  export interface ResolvedAudioPluginConfig {
@@ -1,13 +1,13 @@
1
1
  /**
2
- * The ffmpeg/ffprobe toolchain layer: binary resolution (bundled `-static`
2
+ * The ffmpeg/ffprobe toolchain layer: binary resolution (bundled npm
3
3
  * packages by default, with host-config overrides) and a spawn helper.
4
4
  * Since proxies are committed, this toolchain is only needed where
5
5
  * assets are authored/processed — host builds and CI never invoke it.
6
6
  */
7
7
  import ffmpegStaticPath from 'ffmpeg-static';
8
- import { path as ffprobeStaticPath } from 'ffprobe-static';
9
8
  import { basename } from 'node:path';
10
9
  import { execFile } from 'node:child_process';
10
+ import { createRequire } from 'node:module';
11
11
  import { promisify } from 'node:util';
12
12
  export function ffmpegBinaryPath(config) {
13
13
  if (config.plugins.video.ffmpegPath)
@@ -20,10 +20,15 @@ export function ffmpegBinaryPath(config) {
20
20
  export function ffprobeBinaryPath(config) {
21
21
  if (config.plugins.video.ffprobePath)
22
22
  return config.plugins.video.ffprobePath;
23
- if (!ffprobeStaticPath) {
24
- throw new Error('ffprobe-static provides no binary for this platform — set "plugins.video.ffprobePath" in fundus.config.ts.');
23
+ // Loaded lazily: the package throws on load when no binary matches the
24
+ // platform, which must not break importing the server or the config override.
25
+ try {
26
+ const ffprobeInstaller = createRequire(import.meta.url)('@ffprobe-installer/ffprobe');
27
+ return ffprobeInstaller.path;
28
+ }
29
+ catch {
30
+ throw new Error('@ffprobe-installer/ffprobe provides no binary for this platform — set "plugins.video.ffprobePath" in fundus.config.ts.');
25
31
  }
26
- return ffprobeStaticPath;
27
32
  }
28
33
  /**
29
34
  * Run a toolchain binary with an argument array (never a shell string) and
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fundus",
3
- "version": "0.29.1",
3
+ "version": "0.29.3",
4
4
  "type": "module",
5
5
  "repository": {
6
6
  "type": "git",
@@ -49,8 +49,8 @@
49
49
  "release": "changeset publish"
50
50
  },
51
51
  "dependencies": {
52
+ "@ffprobe-installer/ffprobe": "^2.1.2",
52
53
  "ffmpeg-static": "^5.3.0",
53
- "ffprobe-static": "^3.1.0",
54
54
  "jiti": "^2.5.1",
55
55
  "open": "^11.0.0",
56
56
  "sharp": "^0.34.4"
@@ -65,7 +65,6 @@
65
65
  "@sveltejs/kit": "^2.69.2",
66
66
  "@sveltejs/package": "^2.5.8",
67
67
  "@sveltejs/vite-plugin-svelte": "^7.1.2",
68
- "@types/ffprobe-static": "^2.0.3",
69
68
  "@types/node": "^24.13.3",
70
69
  "@vitest/browser": "^3.2.7",
71
70
  "fuse.js": "^7.4.2",
@@ -1 +0,0 @@
1
- import{H as e,U as t,V as n,it as r,nt as i,r as a,t as o,tt as s}from"./DLEDBLL1.js";var c=class{constructor(e,t){this.status=e,typeof t==`string`?this.body={message:t}:t?this.body=t:this.body={message:`Error: ${e}`}}toString(){return JSON.stringify(this.body)}},l=class{constructor(e,t){try{new Headers({location:t})}catch{throw Error(`Invalid redirect location ${JSON.stringify(t)}: this string contains characters that cannot be used in HTTP headers`)}this.status=e,this.location=t}},u=class extends Error{constructor(e,t,n){super(n),this.status=e,this.text=t}};new URL(`sveltekit-internal://`);function d(e,t){return e===`/`||t===`ignore`?e:t===`never`?e.endsWith(`/`)?e.slice(0,-1):e:t===`always`&&!e.endsWith(`/`)?e+`/`:e}function f(e){return e.split(`%25`).map(decodeURI).join(`%25`)}function p(e){for(let t in e)e[t]=decodeURIComponent(e[t]);return e}function m({href:e}){return e.split(`#`)[0]}function h(){}function ee(...e){let t=5381;for(let n of e)if(typeof n==`string`){let e=n.length;for(;e;)t=t*33^n.charCodeAt(--e)}else if(ArrayBuffer.isView(n)){let e=new Uint8Array(n.buffer,n.byteOffset,n.byteLength),r=e.length;for(;r;)t=t*33^e[--r]}else throw TypeError(`value must be a string or TypedArray`);return(t>>>0).toString(36)}new TextEncoder;function g(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}var _=window.fetch;window.fetch=(e,t)=>((e instanceof Request?e.method:t?.method||`GET`)!==`GET`&&v.delete(b(e)),_(e,t));var v=new Map;function te(e,t){let n=b(e,t),r=document.querySelector(n);if(r?.textContent){r.remove();let{body:e,...t}=JSON.parse(r.textContent);r.getAttribute(`data-b64`)!==null&&(e=g(e));let i=r.getAttribute(`data-ttl`);return i&&v.set(n,{body:e,init:t,ttl:1e3*Number(i)}),Promise.resolve(new Response(e,t))}return window.fetch(e,t)}function y(e,t,n){if(v.size>0){let t=b(e,n),r=v.get(t);if(r){if(performance.now()<r.ttl&&[`default`,`force-cache`,`only-if-cached`,void 0].includes(n?.cache))return new Response(r.body,r.init);v.delete(t)}}return window.fetch(t,n)}function b(e,t){let n=`script[data-sveltekit-fetched][data-url=${JSON.stringify(e instanceof Request?e.url:e)}]`;if(t?.headers||t?.body){let e=[];t.headers&&e.push([...new Headers(t.headers)].join(`,`)),t.body&&(typeof t.body==`string`||ArrayBuffer.isView(t.body))&&e.push(t.body),n+=`[data-hash="${ee(...e)}"]`}return n}var ne=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/,re=/^\/\((?:[^)]+)\)$/;function x(e){let t=[];return{pattern:e===`/`||re.test(e)?/^\/$/:RegExp(`^${ae(e).map(e=>{let n=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(e);if(n)return t.push({name:n[1],matcher:n[2],optional:!1,rest:!0,chained:!0}),`(?:/([^]*))?`;let r=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(e);if(r)return t.push({name:r[1],matcher:r[2],optional:!0,rest:!1,chained:!0}),`(?:/([^/]+))?`;if(!e)return;let i=e.split(/\[(.+?)\](?!\])/);return`/`+i.map((e,n)=>{if(n%2){if(e.startsWith(`x+`))return se(String.fromCharCode(parseInt(e.slice(2),16)));if(e.startsWith(`u+`))return se(String.fromCharCode(...e.slice(2).split(`-`).map(e=>parseInt(e,16))));let[,r,a,o,s]=ne.exec(e);return t.push({name:o,matcher:s,optional:!!r,rest:!!a,chained:a?n===1&&i[0]===``:!1}),a?`([^]*?)`:r?`([^/]*)?`:`([^/]+?)`}return se(e)}).join(``)}).join(``)}/?$`),params:t}}function ie(e){return e!==``&&!/^\([^)]+\)$/.test(e)}function ae(e){return e.slice(1).split(`/`).filter(ie)}function oe(e,t,n){let r={},i=e.slice(1),a=i.filter(e=>e!==void 0),o=0;for(let e=0;e<t.length;e+=1){let s=t[e],c=i[e-o];if(s.chained&&s.rest&&o&&(c=i.slice(e-o,e+1).filter(e=>e).join(`/`),o=0),c===void 0)if(s.rest)c=``;else continue;if(!s.matcher||n[s.matcher](c)){r[s.name]=c;let n=t[e+1],l=i[e+1];n&&!n.rest&&n.optional&&l&&s.chained&&(o=0),!n&&!l&&Object.keys(r).length===a.length&&(o=0);continue}if(s.optional&&s.chained){o++;continue}return}if(!o)return r}function se(e){return e.normalize().replace(/[[\]]/g,`\\$&`).replace(/%/g,`%25`).replace(/\//g,`%2[Ff]`).replace(/\?/g,`%3[Ff]`).replace(/#/g,`%23`).replace(/[.*+?^${}()|\\]/g,`\\$&`)}var ce=/\[(\[)?(\.\.\.)?(\w+?)(?:=(\w+))?\]\]?/g;function le(e,t){let n=ae(e),r=e!=`/`&&e.endsWith(`/`);return`/`+n.map(n=>n.replace(ce,(n,r,i,a)=>{let o=t[a];if(!o){if(r||i&&o!==void 0)return``;throw Error(`Missing parameter '${a}' in route ${e}`)}if(o.startsWith(`/`)||o.endsWith(`/`))throw Error(`Parameter '${a}' in route ${e} cannot start or end with a slash -- this would cause an invalid route like foo//bar`);return o})).filter(Boolean).join(`/`)+(r?`/`:``)}function ue({nodes:e,server_loads:t,dictionary:n,matchers:r}){let i=new Set(t);return Object.entries(n).map(([t,[n,i,s]])=>{let{pattern:c,params:l}=x(t),u={id:t,exec:e=>{let t=c.exec(e);if(t)return oe(t,l,r)},errors:[1,...s||[]].map(t=>e[t]),layouts:[0,...i||[]].map(o),leaf:a(n)};return u.errors.length=u.layouts.length=Math.max(u.errors.length,u.layouts.length),u});function a(t){let n=t<0;return n&&(t=~t),[n,e[t]]}function o(t){return t===void 0?t:[i.has(t),e[t]]}}function de(e,t=JSON.parse){try{return t(sessionStorage[e])}catch{}}function fe(e,t,n=JSON.stringify){let r=n(t);try{sessionStorage[e]=r}catch{}}var S=globalThis.__sveltekit_a43b4m?.base??``,pe=globalThis.__sveltekit_a43b4m?.assets??S??``,me=``;function he(...e){if(!e[0].startsWith(`/`))throw Error(`Cannot use \`resolve(...)\` with a non-absolute pathname or route ID (got "${e[0]}"). \`resolve\` is only for internal pathnames and route IDs; external URLs should be used directly.`);return S+me+le(e[0],e[1])}var ge=`1790813234267`,_e=`sveltekit:snapshot`,ve=`sveltekit:scroll`,ye=`sveltekit:states`,C=`sveltekit:history`,w=`sveltekit:navigation`,T={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},E=location.origin;function be(e){if(e instanceof URL)return e;let t=document.baseURI;if(!t){let e=document.getElementsByTagName(`base`);t=e.length?e[0].href:document.URL}return new URL(e,t)}function D(){return{x:pageXOffset,y:pageYOffset}}function O(e,t){return e.getAttribute(`data-sveltekit-${t}`)}var xe={...T,"":T.hover};function Se(e){let t=e.assignedSlot??e.parentNode;return t?.nodeType===11&&(t=t.host),t}function Ce(e,t){for(;e&&e!==t;){if(e.nodeName.toUpperCase()===`A`&&e.hasAttribute(`href`))return e;e=Se(e)}}function we(e,t,n){let r;try{if(r=new URL(e instanceof SVGAElement?e.href.baseVal:e.href,document.baseURI),n&&r.hash.match(/^#[^/]/)){let e=location.hash.split(`#`)[1]||`/`;r.hash=`#${e}${r.hash}`}}catch{}let i=e instanceof SVGAElement?e.target.baseVal:e.target,a=!r||!!i||A(r,t,n)||(e.getAttribute(`rel`)||``).split(/\s+/).includes(`external`),o=r?.origin===E&&e.hasAttribute(`download`);return{url:r,external:a,target:i,download:o}}function k(e){let t=null,n=null,r=null,i=null,a=null,o=null,s=e;for(;s&&s!==document.documentElement;)r===null&&(r=O(s,`preload-code`)),i===null&&(i=O(s,`preload-data`)),t===null&&(t=O(s,`keepfocus`)),n===null&&(n=O(s,`noscroll`)),a===null&&(a=O(s,`reload`)),o===null&&(o=O(s,`replacestate`)),s=Se(s);function c(e){switch(e){case``:case`true`:return!0;case`off`:case`false`:return!1;default:return}}return{preload_code:xe[r??`off`],preload_data:xe[i??`off`],keepfocus:c(t),noscroll:c(n),reload:c(a),replace_state:c(o)}}function Te(e){let t=r(e),n=!0;function i(){n=!0,t.update(e=>e)}function a(e){n=!1,t.set(e)}function o(e){let r;return t.subscribe(t=>{(r===void 0||n&&t!==r)&&e(r=t)})}return{notify:i,set:a,subscribe:o}}var Ee={v:h};function De(){let{set:e,subscribe:t}=r(!1);async function n(){clearTimeout(void 0);try{let t=await fetch(`${pe}/_app/version.json`,{headers:{pragma:`no-cache`,"cache-control":`no-cache`}});if(!t.ok)return!1;let n=(await t.json()).version!==ge;return n&&(e(!0),Ee.v(),clearTimeout(void 0)),n}catch{return!1}}return{subscribe:t,check:n}}function A(e,t,n){return e.origin!==E||!e.pathname.startsWith(t)?!0:n?e.pathname!==location.pathname:!1}function Oe(e){}var ke=new Set([`load`,`prerender`,`csr`,`ssr`,`trailingSlash`,`config`]);[...ke],[...new Set([...ke])];function Ae(e){return e.filter(e=>e!=null)}function j(e,t){return e+`/`+t}function je(e){return e instanceof c||e instanceof u?e.status:500}function Me(e){return e instanceof u?e.text:`Internal Error`}var M,N,P,Ne=a.toString().includes(`$$`)||/function \w+\(\) \{\}/.test(a.toString()),Pe=`a:`;Ne?(M={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL(Pe)},N={current:null},P={current:!1}):(M=new class{#e=i({});get data(){return n(this.#e)}set data(e){s(this.#e,e)}#t=i(null);get form(){return n(this.#t)}set form(e){s(this.#t,e)}#n=i(null);get error(){return n(this.#n)}set error(e){s(this.#n,e)}#r=i({});get params(){return n(this.#r)}set params(e){s(this.#r,e)}#i=i({id:null});get route(){return n(this.#i)}set route(e){s(this.#i,e)}#a=i({});get state(){return n(this.#a)}set state(e){s(this.#a,e)}#o=i(-1);get status(){return n(this.#o)}set status(e){s(this.#o,e)}#s=i(new URL(Pe));get url(){return n(this.#s)}set url(e){s(this.#s,e)}},N=new class{#e=i(null);get current(){return n(this.#e)}set current(e){s(this.#e,e)}},P=new class{#e=i(!1);get current(){return n(this.#e)}set current(e){s(this.#e,e)}},Ee.v=()=>P.current=!0);function Fe(e){Object.assign(M,e)}var{onMount:Ie,tick:Le}=o,Re=new Set([`icon`,`shortcut icon`,`apple-touch-icon`]),F=null,I=de(`sveltekit:scroll`)??{},L=de(`sveltekit:snapshot`)??{},R={url:Te({}),page:Te({}),navigating:r(null),updated:De()};function ze(e){I[e]=D()}function Be(e,t){let n=e+1;for(;I[n];)delete I[n],n+=1;for(n=t+1;L[n];)delete L[n],n+=1}function z(e,t=!1){return t?location.replace(e.href):location.href=e.href,new Promise(h)}async function Ve(){if(`serviceWorker`in navigator){let e=await navigator.serviceWorker.getRegistration(S||`/`);e&&await e.update()}}var He,Ue,We,B,Ge,V,Ke={},qe={},Je=[],Ye=[],H=null;function Xe(){H?.fork?.then(e=>e?.discard()),H=null,Q={element:void 0,href:void 0}}var Ze=new Map,Qe=new Set,$e=new Set,U=new Set,W={branch:[],error:null,url:null,nav:null},et=!1,tt=!1,nt=!0,G=!1,K=!1,rt=!1,it=!1,at,q,J,Y,ot=new Set,st=new Map,ct=new Map;async function lt(e,t,n){if(globalThis.__sveltekit_a43b4m.data){let{q:e={},p:t={},l:n={},f:r={}}=globalThis.__sveltekit_a43b4m.data;for(let t in e)Ke[t]=e[t];for(let e in n)Ke[e]=n[e];for(let e in r)Ke[e]=r[e];for(let e in t)qe[e]=t[e]}document.URL!==location.href&&(location.href=location.href),V=e,await e.hooks.init?.(),He=ue(e),B=document.documentElement,Ge=t,Ue=e.nodes[0],We=e.nodes[1],Ue(),We(),q=history.state?.[C],J=history.state?.[w],q||(q=J=Date.now(),history.replaceState({...history.state,[C]:q,[w]:J},``));let r=I[q];function i(){r&&(history.scrollRestoration=`manual`,scrollTo(r.x,r.y))}n?(i(),await zt(Ge,n)):(await Z({type:`enter`,url:be(V.hash?Gt(new URL(location.href)):location.href),replace_state:!0}),i()),Rt()}function ut(){Je.length=0,it=!1}function dt(e){Ye.some(e=>e?.snapshot)&&(L[e]=Ye.map(e=>e?.snapshot?.capture()))}function ft(e){L[e]?.forEach((e,t)=>{Ye[t]?.snapshot?.restore(e)})}function pt(){ze(q),fe(ve,I),dt(J),fe(_e,L)}async function mt(e,n,r,i){let a,o;n.invalidateAll&&Xe(),await Z({type:`goto`,url:be(e),keepfocus:n.keepFocus,noscroll:n.noScroll,replace_state:n.replaceState,state:n.state,redirect_count:r,nav_token:i,accept:()=>{if(n.invalidateAll){it=!0,a=new Set;for(let[e,t]of st)for(let[n,r]of t)r.resource?.reset(),a.add(j(e,n));o=new Set;for(let[e,t]of ct)for(let n of t.keys())o.add(j(e,n))}n.invalidate&&n.invalidate.forEach(Lt)}}),n.invalidateAll&&t().then(t).then(()=>{for(let[e,t]of st)for(let[n,{resource:r}]of t)a?.has(j(e,n))&&r.start();for(let[e,t]of ct)for(let[n,{resource:r}]of t)o?.has(j(e,n))&&r.reconnect()})}async function ht(e){if(e.id!==H?.id){Xe();let t={};ot.add(t),H={id:e.id,token:t,promise:Tt({...e,preload:t}).then(e=>(ot.delete(t),e.type===`loaded`&&e.state.error&&Xe(),e)),fork:null}}return H.promise}async function gt(e){let t=(await X(e,!1))?.route;t&&await Promise.all([...t.layouts,t.leaf].filter(Boolean).map(e=>e[1]()))}async function _t(e,t,n){let r={params:W.params,route:{id:W.route?.id??null},url:new URL(location.href)};if(W={...e.state,nav:r},Fe(e.props.page),at=new V.root({target:t,props:{...e.props,stores:R,components:Ye},hydrate:n,sync:!1,transformError:void 0}),await Promise.resolve(),n){let e={from:null,to:{...r,scroll:I[q]??D()},willUnload:!1,type:`enter`,complete:Promise.resolve()};U.forEach(t=>t(e))}ft(J),tt=!0}async function vt({url:e,params:t,branch:n,errors:r,status:i,error:a,route:o,form:s}){let c=`never`;if(S&&(e.pathname===S||e.pathname===S+`/`))c=`always`;else for(let e of n)e?.slash!==void 0&&(c=e.slash);e.pathname=d(e.pathname,c),e.search=e.search;let l={type:`loaded`,state:{url:e,params:t,branch:n,error:a,route:o},props:{constructors:Ae(n).map(e=>e.node.component),page:Wt(M)}};s!==void 0&&(l.props.form=s);let u={},f=!M,p=0;for(let e=0;e<Math.max(n.length,W.branch.length);e+=1){let t=n[e],r=W.branch[e];t?.data!==r?.data&&(f=!0),t&&(u={...u,...t.data},f&&(l.props[`data_${p}`]=u),p+=1)}return(!W.url||e.href!==W.url.href||W.error!==a||s!==void 0&&s!==M.form||f)&&(l.props.page={error:a,params:t,route:{id:o?.id??null},state:{},status:i,url:new URL(e),form:s??null,data:f?u:M.data}),l}async function yt({loader:e,parent:t,url:n,params:r,route:i,server_data_node:a}){let o={dependencies:new Set,params:new Set,parent:!1,route:!1,url:!1,search_params:new Set},s=await e();return{node:s,loader:e,server:a,universal:s.universal?.load?{type:`data`,data:null,uses:o}:null,data:a?.data??null,slash:s.universal?.trailingSlash??a?.slash}}function bt(e,t,n){let r=e instanceof Request?e.url:e,i=new URL(r,n);return i.origin===n.origin&&(r=i.href.slice(n.origin.length)),{resolved:i,promise:tt?y(r,i.href,t):te(r,t)}}function xt(e,t,n,r,i,a){if(it)return!0;if(!i)return!1;if(i.parent&&e||i.route&&t||i.url&&n)return!0;for(let e of i.search_params)if(r.has(e))return!0;for(let e of i.params)if(a[e]!==W.params[e])return!0;for(let e of i.dependencies)if(Je.some(t=>t(new URL(e))))return!0;return!1}function St(e,t){return e?.type===`data`?e:e?.type===`skip`?t??null:null}function Ct(e,t){if(!e)return new Set(t.searchParams.keys());let n=new Set([...e.searchParams.keys(),...t.searchParams.keys()]);for(let r of n){let i=e.searchParams.getAll(r),a=t.searchParams.getAll(r);i.every(e=>a.includes(e))&&a.every(e=>i.includes(e))&&n.delete(r)}return n}function wt({error:e,url:t,route:n,params:r}){return{type:`loaded`,state:{error:e,url:t,route:n,params:r,branch:[]},props:{page:Wt(M),constructors:[]}}}async function Tt({id:e,invalidating:t,url:n,params:r,route:i,preload:a}){if(H?.id===e)return ot.delete(H.token),H.promise;let{errors:o,layouts:s,leaf:u}=i,d=[...s,u];o.forEach(e=>e?.().catch(h)),d.forEach(e=>e?.[1]().catch(h));let f=W.url?e!==At(W.url):!1,p=W.route?i.id!==W.route.id:!1,m=Ct(W.url,n),ee=!1,g=d.map(async(e,t)=>{if(!e)return;let a=W.branch[t];return e[1]===a?.loader&&!xt(ee,p,f,m,a.universal?.uses,r)?a:(ee=!0,yt({loader:e[1],url:n,params:r,route:i,parent:async()=>{let e={};for(let n=0;n<t;n+=1)Object.assign(e,(await g[n])?.data);return e},server_data_node:St(e[0]?{type:`skip`}:null,e[0]?a?.server:void 0)}))});for(let e of g)e.catch(h);let _=[];for(let e=0;e<d.length;e+=1)if(d[e])try{_.push(await g[e])}catch(t){if(t instanceof l)return{type:`redirect`,location:t.location};if(a&&ot.has(a))return wt({error:await $(t,{params:r,url:n,route:{id:i.id}}),url:n,params:r,route:i});let s=je(t),u;if(t instanceof c)u=t.body;else{if(await R.updated.check())return await Ve(),await z(n);u=await $(t,{params:r,url:n,route:{id:i.id}})}let d=await Et(e,_,o);return d?vt({url:n,params:r,branch:_.slice(0,d.idx).concat(d.node),errors:o,status:s,error:u,route:i}):await Mt(n,{id:i.id},u,s)}else _.push(void 0);return vt({url:n,params:r,branch:_,errors:o,status:200,error:null,route:i,form:t?void 0:null})}async function Et(e,t,n){for(;e--;)if(n[e]){let r=e;for(;!t[r];)--r;try{return{idx:r+1,node:{node:await n[e](),loader:n[e],data:{},server:null,universal:null}}}catch{continue}}}async function Dt({status:e,error:t,url:n,route:r}){let i={};try{return vt({url:n,params:i,branch:[await yt({loader:Ue,url:n,params:i,route:r,parent:()=>Promise.resolve({}),server_data_node:St(null)}),{node:await We(),loader:We,universal:null,server:null,data:null}],status:e,error:t,errors:[],route:null})}catch(t){if(t instanceof l){await mt(new URL(t.location,location.href),{},0);return}let a=await V.get_error_template(),o=await $(t,{url:n,params:i,route:r}),s=a({status:e,message:String(o?.message??``).replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`)}),c=new DOMParser().parseFromString(s,`text/html`);throw document.documentElement.replaceChild(document.adoptNode(c.head),document.head),document.documentElement.replaceChild(document.adoptNode(c.body),document.body),t}}async function Ot(e){let t=e.href;if(Ze.has(t))return Ze.get(t);let n;try{let r=(async()=>{let t=await V.hooks.reroute({url:new URL(e),fetch:async(t,n)=>bt(t,n,e).promise})??e;if(typeof t==`string`){let n=new URL(e);V.hash?n.hash=t:n.pathname=t,t=n}return t})();Ze.set(t,r),n=await r}catch{Ze.delete(t);return}return n}async function X(e,t){if(e&&!A(e,S,V.hash)){let n=await Ot(e);if(!n)return;let r=kt(n);for(let n of He){let i=n.exec(r);if(i)return{id:At(e),invalidating:t,route:n,params:p(i),url:e}}}}function kt(e){return f(V.hash?e.hash.replace(/^#/,``).replace(/[?#].+/,``):e.pathname.slice(S.length))||`/`}function At(e){return(V.hash?e.hash.replace(/^#/,``):e.pathname)+e.search}function jt({url:e,type:t,intent:n,delta:r,event:i,scroll:a}){let o=!1,s=Ut(W,n,e,t,a??null);r!==void 0&&(s.navigation.delta=r),i!==void 0&&(s.navigation.event=i);let c={...s.navigation,cancel:()=>{o=!0,s.reject(Error(`navigation cancelled`))}};return G||Qe.forEach(e=>e(c)),o?null:s}async function Z({type:n,url:r,popped:i,keepfocus:a,noscroll:o,replace_state:s,state:c={},redirect_count:l=0,nav_token:d={},accept:f=h,block:p=h,event:m}){let ee=Y;Y=d;let g=await X(r,!1),_=n===`enter`?Ut(W,g,r,n):jt({url:r,type:n,delta:i?.delta,intent:g,scroll:i?.scroll,event:m});if(!_){p(),Y===d&&(Y=ee);return}let v=q,te=J;f(),G=!0,tt&&_.navigation.type!==`enter`&&R.navigating.set(N.current=_.navigation);let y=g&&await Tt(g);if(!y){if(A(r,S,V.hash))return await z(r,s);y=await Mt(r,{id:null},await $(new u(404,`Not Found`,`Not found: ${r.pathname}`),{url:r,params:{},route:{id:null}}),404,s)}if(r=g?.url||r,Y!==d){_.reject(Error(`navigation aborted`));return}if(!y)return;if(y.type===`redirect`){if(l<20){await Z({type:n,url:new URL(y.location,r),popped:i,keepfocus:a,noscroll:o,replace_state:s,state:c,redirect_count:l+1,nav_token:d}),_.fulfil(void 0);return}if(y=await Dt({status:500,error:await $(Error(`Redirect loop`),{url:r,params:{},route:{id:null}}),url:r,route:{id:null}}),!y)return}else if(y.props.page.status>=400&&await R.updated.check())return await Ve(),await z(r,s);if(ut(),ze(v),dt(te),y.props.page.url.pathname!==r.pathname&&(r.pathname=y.props.page.url.pathname),c=i?i.state:c,!i){let e=+!s,t={[C]:q+=e,[w]:J+=e,[ye]:c};(s?history.replaceState:history.pushState).call(history,t,``,r),s||Be(q,J)}let b=g&&H?.id===g.id?H.fork:null;H?.fork&&!b?Xe():(H=null,Q={element:void 0,href:void 0}),y.props.page.state=c;let ne;if(tt){let t=(await Promise.all(Array.from($e,e=>e(_.navigation)))).filter(e=>typeof e==`function`);if(t.length>0){function e(){t.forEach(e=>{U.delete(e)})}t.push(e),t.forEach(e=>{U.add(e)})}let n=_.navigation.to;W={...y.state,nav:{params:n.params,route:n.route,url:n.url}},y.props.page&&(y.props.page.url=r),!a&&document.activeElement instanceof HTMLElement&&document.activeElement!==document.body&&document.activeElement.blur();let i=b&&await b;i?ne=i.commit():(F=null,at.$set(y.props),F&&Object.assign(y.props.page,F),Fe(y.props.page),ne=e?.()),rt=!0}else await _t(y,Ge,!1);let{activeElement:re}=document;if(await ne,await t(),await t(),Y!==d){_.reject(Error(`navigation aborted`));return}y.props.page&&F&&Object.assign(y.props.page,F);let x=null;if(nt){let e=i?i.scroll:o?D():null;e?scrollTo(e.x,e.y):(x=r.hash&&document.getElementById(Kt(r)))?x.scrollIntoView():scrollTo(0,0)}let ie=document.activeElement!==re&&document.activeElement!==document.body;!a&&!ie&&Ht(r,!x),nt=!0,G=!1,_.fulfil(void 0),_.navigation.to&&(_.navigation.to.scroll=D()),U.forEach(e=>e(_.navigation)),n===`popstate`&&ft(J),R.navigating.set(N.current=null)}async function Mt(e,t,n,r,i){return e.origin===E&&e.pathname===location.pathname&&!et?await Dt({status:r,error:n,url:e,route:t}):await z(e,i)}var Q={element:void 0,href:void 0};function Nt(){let e,t;B.addEventListener(`mousemove`,t=>{let n=t.target;clearTimeout(e),e=setTimeout(()=>{i(n,T.hover)},20)});function n(e){e.defaultPrevented||i(e.composedPath()[0],T.tap)}B.addEventListener(`mousedown`,n),B.addEventListener(`touchstart`,n,{passive:!0});let r=new IntersectionObserver(e=>{for(let t of e)t.isIntersecting&&(gt(new URL(t.target.href)),r.unobserve(t.target))},{threshold:0});async function i(e,n){let r=Ce(e,B),i=r===Q.element&&r?.href===Q.href&&n>=t;if(!r||i)return;let{url:a,external:o,download:s}=we(r,S,V.hash);if(o||s)return;let c=k(r),l=a&&At(W.url)===At(a);if(!(c.reload||l))if(n<=c.preload_data){Q={element:r,href:r.href},t=T.tap;let e=await X(a,!1);if(!e)return;ht(e)}else n<=c.preload_code&&(Q={element:r,href:r.href},t=n,gt(a))}function a(){r.disconnect();for(let e of B.querySelectorAll(`a`)){let{url:t,external:n,download:i}=we(e,S,V.hash);if(n||i)continue;let a=k(e);a.reload||(a.preload_code===T.viewport&&r.observe(e),a.preload_code===T.eager&&gt(t))}}U.add(a),a()}function $(e,t){if(e instanceof c)return e.body;let n=je(e),r=Me(e);return V.hooks.handleError({error:e,event:t,status:n,message:r})??{message:r}}function Pt(e,t){Ie(()=>(e.add(t),()=>{e.delete(t)}))}function Ft(e){Pt(U,e)}function It(e,t={}){return e=new URL(be(e)),e.origin===E?mt(e,t,0):Promise.reject(Error(`goto: invalid URL`))}function Lt(e){if(typeof e==`function`)Je.push(e);else{let{href:t}=new URL(e,location.href);Je.push(e=>e.href===t)}}function Rt(){history.scrollRestoration=`manual`,addEventListener(`beforeunload`,e=>{let t=!1;if(pt(),!G){let e=Ut(W,void 0,null,`leave`),n={...e.navigation,cancel:()=>{t=!0,e.reject(Error(`navigation cancelled`))}};Qe.forEach(e=>e(n))}t?(e.preventDefault(),e.returnValue=``):history.scrollRestoration=`auto`}),addEventListener(`visibilitychange`,()=>{document.visibilityState===`hidden`&&pt()}),navigator.connection?.saveData||Nt(),B.addEventListener(`click`,async t=>{if(t.button||t.which!==1||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.defaultPrevented)return;let n=Ce(t.composedPath()[0],B);if(!n)return;let{url:r,external:i,target:a,download:o}=we(n,S,V.hash);if(!r)return;if(a===`_parent`||a===`_top`){if(window.parent!==window)return}else if(a&&a!==`_self`)return;let s=k(n);if(!(n instanceof SVGAElement)&&r.protocol!==location.protocol&&!(r.protocol===`https:`||r.protocol===`http:`)||o)return;let[c,l]=(V.hash?r.hash.replace(/^#/,``):r.href).split(`#`),u=c===m(location);if(i||s.reload&&(!u||!l)){jt({url:r,type:`link`,event:t})?G=!0:t.preventDefault();return}if(l!==void 0&&u){let[,i]=W.url.href.split(`#`);if(i===l){if(t.preventDefault(),l===``||l===`top`&&n.ownerDocument.getElementById(`top`)===null)scrollTo({top:0});else{let e=n.ownerDocument.getElementById(decodeURIComponent(l));e&&(e.scrollIntoView(),e.focus())}return}if(K=!0,ze(q),e(r),!s.replace_state)return;K=!1}t.preventDefault(),await new Promise(e=>{requestAnimationFrame(()=>{setTimeout(e,0)}),setTimeout(e,100)}),await Z({type:`link`,url:r,keepfocus:s.keepfocus,noscroll:s.noscroll,replace_state:s.replace_state??r.href===location.href,event:t})}),B.addEventListener(`submit`,e=>{if(e.defaultPrevented)return;let t=HTMLFormElement.prototype.cloneNode.call(e.target),n=e.submitter;if((n?.formTarget||t.target)===`_blank`||(n?.formMethod||t.method)!==`get`)return;let r=new URL(n?.hasAttribute(`formaction`)&&n?.formAction||t.action);if(A(r,S,!1))return;let i=e.target,a=k(i);if(a.reload)return;e.preventDefault(),e.stopPropagation();let o=new FormData(i,n);r.search=new URLSearchParams(o).toString(),Z({type:`form`,url:r,keepfocus:a.keepfocus,noscroll:a.noscroll,replace_state:a.replace_state??r.href===location.href,event:e})}),addEventListener(`popstate`,async t=>{if(!Vt)if(t.state?.[`sveltekit:history`]){let n=t.state[C];if(Y={},n===q)return;let r=I[n],i=t.state[`sveltekit:states`]??{},a=new URL(t.state[`sveltekit:pageurl`]??location.href),o=t.state[w],s=W.url?m(location)===m(W.url):!1;if(o===J&&(rt||s)){i!==M.state&&(M.state=i),e(a),I[q]=D(),r&&scrollTo(r.x,r.y),q=n;return}let c=n-q;await Z({type:`popstate`,url:a,popped:{state:i,scroll:r,delta:c},accept:()=>{q=n,J=o},block:()=>{history.go(-c)},nav_token:Y,event:t})}else K||(e(new URL(location.href)),V.hash&&location.reload())}),addEventListener(`hashchange`,()=>{K&&(K=!1,history.replaceState({...history.state,[C]:++q,[w]:J},``,location.href))});for(let e of document.querySelectorAll(`link`))Re.has(e.rel)&&(e.href=e.href);addEventListener(`pageshow`,e=>{e.persisted&&R.navigating.set(N.current=null)});function e(e){W.url=M.url=e,R.page.set(Wt(M)),R.page.notify()}}async function zt(e,{status:t=200,error:n,node_ids:r,params:i,route:a,server_route:o,data:s,form:c}){et=!0;let u=new URL(location.href),d;({params:i={},route:a={id:null}}=await X(u,!1)||{}),d=He.find(({id:e})=>e===a.id);let f,p=!0;try{let e=r.map(async(t,n)=>{let r=s[n];return r?.uses&&(r.uses=Bt(r.uses)),yt({loader:V.nodes[t],url:u,params:i,route:a,parent:async()=>{let t={};for(let r=0;r<n;r+=1)Object.assign(t,(await e[r]).data);return t},server_data_node:St(r)})}),o=await Promise.all(e);if(d){let e=d.layouts;for(let t=0;t<e.length;t++)e[t]||o.splice(t,0,void 0)}f=await vt({url:u,params:i,branch:o,status:t,error:n,errors:d?.errors,form:c,route:d??null})}catch(t){if(t instanceof l)return await z(new URL(t.location,location.href));f=await Dt({status:je(t),error:await $(t,{url:u,params:i,route:a}),url:u,route:a}),e.textContent=``,p=!1}f&&(f.props.page&&(f.props.page.state={}),await _t(f,e,p))}function Bt(e){return{dependencies:new Set(e?.dependencies??[]),params:new Set(e?.params??[]),parent:!!e?.parent,route:!!e?.route,url:!!e?.url,search_params:new Set(e?.search_params??[])}}var Vt=!1;function Ht(e,t=!0){let n=document.querySelector(`[autofocus]`);if(n)n.focus();else{let n=Kt(e);if(n&&document.getElementById(n)){let{x:r,y:i}=D();setTimeout(()=>{let a=history.state;Vt=!0,location.replace(new URL(`#${n}`,location.href)),history.replaceState(a,``,e),t&&scrollTo(r,i),Vt=!1})}else{let e=document.body,t=e.getAttribute(`tabindex`);e.tabIndex=-1,e.focus({preventScroll:!0,focusVisible:!1}),t===null?e.removeAttribute(`tabindex`):e.setAttribute(`tabindex`,t)}let r=getSelection();if(r&&r.type!==`None`){let e=[];for(let t=0;t<r.rangeCount;t+=1)e.push(r.getRangeAt(t));setTimeout(()=>{if(r.rangeCount===e.length){for(let t=0;t<r.rangeCount;t+=1){let n=e[t],i=r.getRangeAt(t);if(n.commonAncestorContainer!==i.commonAncestorContainer||n.startContainer!==i.startContainer||n.endContainer!==i.endContainer||n.startOffset!==i.startOffset||n.endOffset!==i.endOffset)return}r.removeAllRanges()}})}}}function Ut(e,t,n,r,i=null){let a,o,s=new Promise((e,t)=>{a=e,o=t});return s.catch(h),{navigation:{from:{params:e.params,route:{id:e.route?.id??null},url:e.url,scroll:D()},to:n&&{params:t?.params??null,route:{id:t?.route?.id??null},url:n,scroll:i},willUnload:!t,type:r,complete:s},fulfil:a,reject:o}}function Wt(e){return{data:e.data,error:e.error,form:e.form,params:e.params,route:e.route,state:e.state,status:e.status,url:e.url}}function Gt(e){let t=new URL(e);return t.hash=decodeURIComponent(e.hash),t}function Kt(e){let t;if(V.hash){let[,,n]=e.hash.split(`#`,3);t=n??``}else t=e.hash.slice(1);return decodeURIComponent(t)}export{N as a,Oe as c,R as i,he as l,It as n,M as o,lt as r,P as s,Ft as t};
@@ -1,2 +0,0 @@
1
- I@�v�sK���lk�*��V�[�!c�����1��f��(Fh-]Y�"*��;�-�&av�Y虻j�4��h�M�H��I��C��/)��?#ʯmM��t9W��� ��x�#��k�C��%���H
2
- 1$O* Z�B�  }�g3`U�q����>��i1��S