fundus 0.0.3 → 0.1.0

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 (205) hide show
  1. package/README.md +28 -3
  2. package/build/client/_app/immutable/assets/{2.wavcNhPC.css → 2.ohi-TClG.css} +1 -1
  3. package/build/client/_app/immutable/assets/2.ohi-TClG.css.br +0 -0
  4. package/build/client/_app/immutable/assets/2.ohi-TClG.css.gz +0 -0
  5. package/build/client/_app/immutable/assets/3.C-toFWI4.css +1 -0
  6. package/build/client/_app/immutable/assets/3.C-toFWI4.css.br +0 -0
  7. package/build/client/_app/immutable/assets/3.C-toFWI4.css.gz +0 -0
  8. package/build/client/_app/immutable/assets/LibraryContextMenu.CMefGNE2.css +1 -0
  9. package/build/client/_app/immutable/assets/LibraryContextMenu.CMefGNE2.css.br +0 -0
  10. package/build/client/_app/immutable/assets/LibraryContextMenu.CMefGNE2.css.gz +0 -0
  11. package/build/client/_app/immutable/chunks/BA62n9FX.js +108 -0
  12. package/build/client/_app/immutable/chunks/BA62n9FX.js.br +0 -0
  13. package/build/client/_app/immutable/chunks/BA62n9FX.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/{BiIto6ft.js → CQsKwm8E.js} +1 -1
  15. package/build/client/_app/immutable/chunks/CQsKwm8E.js.br +0 -0
  16. package/build/client/_app/immutable/chunks/CQsKwm8E.js.gz +0 -0
  17. package/build/client/_app/immutable/chunks/{DQ8SXFaX.js → D9-155C9.js} +1 -1
  18. package/build/client/_app/immutable/chunks/D9-155C9.js.br +0 -0
  19. package/build/client/_app/immutable/chunks/D9-155C9.js.gz +0 -0
  20. package/build/client/_app/immutable/chunks/{CvY6YsFE.js → DVEDrSOn.js} +1 -1
  21. package/build/client/_app/immutable/chunks/DVEDrSOn.js.br +0 -0
  22. package/build/client/_app/immutable/chunks/DVEDrSOn.js.gz +0 -0
  23. package/build/client/_app/immutable/chunks/cznBUb-E.js +1 -0
  24. package/build/client/_app/immutable/chunks/cznBUb-E.js.br +0 -0
  25. package/build/client/_app/immutable/chunks/cznBUb-E.js.gz +0 -0
  26. package/build/client/_app/immutable/entry/{app.ubN0v9bN.js → app.DwQWZs1F.js} +2 -2
  27. package/build/client/_app/immutable/entry/app.DwQWZs1F.js.br +0 -0
  28. package/build/client/_app/immutable/entry/app.DwQWZs1F.js.gz +0 -0
  29. package/build/client/_app/immutable/entry/start.DEpAL_8Q.js +1 -0
  30. package/build/client/_app/immutable/entry/start.DEpAL_8Q.js.br +0 -0
  31. package/build/client/_app/immutable/entry/start.DEpAL_8Q.js.gz +0 -0
  32. package/build/client/_app/immutable/nodes/{0.Dr5ijCIl.js → 0.Sr1WDgiY.js} +1 -1
  33. package/build/client/_app/immutable/nodes/0.Sr1WDgiY.js.br +0 -0
  34. package/build/client/_app/immutable/nodes/0.Sr1WDgiY.js.gz +0 -0
  35. package/build/client/_app/immutable/nodes/{1.DiIGIRAb.js → 1.BwHqv728.js} +1 -1
  36. package/build/client/_app/immutable/nodes/1.BwHqv728.js.br +2 -0
  37. package/build/client/_app/immutable/nodes/1.BwHqv728.js.gz +0 -0
  38. package/build/client/_app/immutable/nodes/2.DidxYIU-.js +3 -0
  39. package/build/client/_app/immutable/nodes/2.DidxYIU-.js.br +0 -0
  40. package/build/client/_app/immutable/nodes/2.DidxYIU-.js.gz +0 -0
  41. package/build/client/_app/immutable/nodes/3.C1AavoTf.js +1 -0
  42. package/build/client/_app/immutable/nodes/3.C1AavoTf.js.br +0 -0
  43. package/build/client/_app/immutable/nodes/3.C1AavoTf.js.gz +0 -0
  44. package/build/client/_app/immutable/nodes/4.D8UoOONM.js +2 -0
  45. package/build/client/_app/immutable/nodes/4.D8UoOONM.js.br +0 -0
  46. package/build/client/_app/immutable/nodes/4.D8UoOONM.js.gz +0 -0
  47. package/build/client/_app/version.json +1 -1
  48. package/build/client/_app/version.json.br +0 -0
  49. package/build/client/_app/version.json.gz +0 -0
  50. package/build/handler.js +7 -7
  51. package/build/index.js +7 -7
  52. package/build/server/chunks/chunks/{context.js-Bw4WWLhG.js → context.js-CGD-b_vR.js} +24 -34
  53. package/build/server/chunks/chunks/context.js-CGD-b_vR.js.map +1 -0
  54. package/build/server/chunks/chunks/{core.js-DDntpb72.js → core.js-xfrkaQpS.js} +97 -48
  55. package/build/server/chunks/chunks/core.js-xfrkaQpS.js.map +1 -0
  56. package/build/server/chunks/chunks/{exports.js-CLTzaOxn.js → exports.js-B4E0NJIt.js} +2 -2
  57. package/build/server/chunks/chunks/{exports.js-CLTzaOxn.js.map → exports.js-B4E0NJIt.js.map} +1 -1
  58. package/build/server/chunks/chunks/{http.js-Dxoa-jtP.js → http.js-Bu-Ao0Vk.js} +2 -2
  59. package/build/server/chunks/chunks/{http.js-Dxoa-jtP.js.map → http.js-Bu-Ao0Vk.js.map} +1 -1
  60. package/build/server/chunks/chunks/{internal.js-BDBSzJId.js → internal.js-ClSxY3uX.js} +3 -3
  61. package/build/server/chunks/chunks/{internal.js-BDBSzJId.js.map → internal.js-ClSxY3uX.js.map} +1 -1
  62. package/build/server/chunks/chunks/internal2.js-BlXt2rfE.js.map +1 -1
  63. package/build/server/chunks/chunks/{library-store.js-BP8cL-qD.js → library-store.js-CZCDpai0.js} +187 -65
  64. package/build/server/chunks/chunks/library-store.js-CZCDpai0.js.map +1 -0
  65. package/build/server/chunks/chunks/{shared.js-BWXgl1Xf.js → shared.js-CHQOW_GN.js} +2 -2
  66. package/build/server/chunks/chunks/{shared.js-BWXgl1Xf.js.map → shared.js-CHQOW_GN.js.map} +1 -1
  67. package/build/server/chunks/chunks/{utils.js-9oI5Oz0w.js → utils.js-B9L6I-_K.js} +3 -3
  68. package/build/server/chunks/chunks/{utils.js-9oI5Oz0w.js.map → utils.js-B9L6I-_K.js.map} +1 -1
  69. package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-WknZVW_S.js → _server.ts.js-PO5RpNzP.js} +5 -5
  70. package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-WknZVW_S.js.map → _server.ts.js-PO5RpNzP.js.map} +1 -1
  71. package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-BrZ__-HZ.js → _server.ts.js-BmgqGEXs.js} +6 -6
  72. package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-BrZ__-HZ.js.map → _server.ts.js-BmgqGEXs.js.map} +1 -1
  73. package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/_server.ts.js-DnTOlfHs.js +35 -0
  74. package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/_server.ts.js-DnTOlfHs.js.map +1 -0
  75. package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-PqADGPXc.js → _server.ts.js-DzdC6OJE.js} +6 -6
  76. package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-PqADGPXc.js.map → _server.ts.js-DzdC6OJE.js.map} +1 -1
  77. package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-OqoE5PN-.js → _server.ts.js-DXJNoYAs.js} +6 -6
  78. package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-OqoE5PN-.js.map → _server.ts.js-DXJNoYAs.js.map} +1 -1
  79. package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-CJ08e1ho.js → _server.ts.js-CqdKXoZL.js} +6 -6
  80. package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-CJ08e1ho.js.map → _server.ts.js-CqdKXoZL.js.map} +1 -1
  81. package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-DdF3eK2I.js → _server.ts.js-DIuY66jG.js} +6 -6
  82. package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-DdF3eK2I.js.map → _server.ts.js-DIuY66jG.js.map} +1 -1
  83. package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-Cxt6jsJ5.js → _server.ts.js-D9p-cdJQ.js} +6 -6
  84. package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-Cxt6jsJ5.js.map → _server.ts.js-D9p-cdJQ.js.map} +1 -1
  85. package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-BWVM2Ntl.js → _server.ts.js-DP1x-xAW.js} +6 -6
  86. package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-BWVM2Ntl.js.map → _server.ts.js-DP1x-xAW.js.map} +1 -1
  87. package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-Z2bM-qHM.js → _server.ts.js-r1eNMvPd.js} +6 -6
  88. package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-Z2bM-qHM.js.map → _server.ts.js-r1eNMvPd.js.map} +1 -1
  89. package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-BX9H2Z34.js → _server.ts.js-D-m3BwRj.js} +6 -6
  90. package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-BX9H2Z34.js.map → _server.ts.js-D-m3BwRj.js.map} +1 -1
  91. package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-BWHDZ8mz.js → _server.ts.js-3nyAQ3f0.js} +5 -5
  92. package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-BWHDZ8mz.js.map → _server.ts.js-3nyAQ3f0.js.map} +1 -1
  93. package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-CR_7mndO.js → _server.ts.js-Ba285FiJ.js} +6 -6
  94. package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-CR_7mndO.js.map → _server.ts.js-Ba285FiJ.js.map} +1 -1
  95. package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-Cw1PDBvb.js → _server.ts.js-X354l2NP.js} +6 -6
  96. package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-Cw1PDBvb.js.map → _server.ts.js-X354l2NP.js.map} +1 -1
  97. package/build/server/chunks/entries/{hooks.server.js-BHoE0yBi.js → hooks.server.js-eZ7H27L4.js} +5 -5
  98. package/build/server/chunks/entries/{hooks.server.js-BHoE0yBi.js.map → hooks.server.js-eZ7H27L4.js.map} +1 -1
  99. package/build/server/chunks/{handler-10cx4zHn.js → handler-Dcc_-rVh.js} +5 -5
  100. package/build/server/chunks/{handler-10cx4zHn.js.map → handler-Dcc_-rVh.js.map} +1 -1
  101. package/build/server/chunks/{index.js-DvPfiC00.js → index.js-DoVHd4mf.js} +5 -5
  102. package/build/server/chunks/{index.js-DvPfiC00.js.map → index.js-DoVHd4mf.js.map} +1 -1
  103. package/build/server/chunks/{manifest.js-DoPjUnzD.js → manifest.js-C_MsDhaa.js} +27 -20
  104. package/build/server/chunks/manifest.js-C_MsDhaa.js.map +1 -0
  105. package/build/server/chunks/nodes/0.js-BP6hHAK9.js +11 -0
  106. package/build/server/chunks/nodes/{0.js-Di3qgAtW.js.map → 0.js-BP6hHAK9.js.map} +1 -1
  107. package/build/server/chunks/nodes/1.js-DKlcrAQP.js +7 -0
  108. package/build/server/chunks/nodes/{1.js-BlWSFIA8.js.map → 1.js-DKlcrAQP.js.map} +1 -1
  109. package/build/server/chunks/nodes/2.js-B-8TTZH_.js +7 -0
  110. package/build/server/chunks/nodes/2.js-B-8TTZH_.js.map +1 -0
  111. package/build/server/chunks/nodes/3.js-Cf7H6K5p.js +7 -0
  112. package/build/server/chunks/nodes/3.js-Cf7H6K5p.js.map +1 -0
  113. package/build/server/chunks/nodes/4.js-JQQZnHWZ.js +7 -0
  114. package/build/server/chunks/nodes/4.js-JQQZnHWZ.js.map +1 -0
  115. package/dist/cli.js +34 -8
  116. package/dist/core/api-types.d.ts +1 -1
  117. package/dist/core/index.d.ts +1 -1
  118. package/dist/core/index.js +1 -1
  119. package/dist/core/ingest.d.ts +9 -1
  120. package/dist/core/ingest.js +10 -19
  121. package/dist/core/plugins/registry.d.ts +16 -0
  122. package/dist/core/plugins/registry.js +52 -0
  123. package/dist/runtime/kind-handlers.d.ts +0 -6
  124. package/dist/runtime/kind-handlers.js +16 -7
  125. package/dist/server/cli-commands.d.ts +2 -1
  126. package/dist/server/cli-commands.js +42 -1
  127. package/dist/server/cli-init.d.ts +1 -1
  128. package/dist/server/cli-init.js +23 -5
  129. package/dist/server/config-loader.d.ts +3 -2
  130. package/dist/server/config-loader.js +24 -48
  131. package/dist/server/index.d.ts +2 -1
  132. package/dist/server/library-store.d.ts +11 -0
  133. package/dist/server/library-store.js +57 -0
  134. package/dist/server/operations.d.ts +3 -1
  135. package/dist/server/operations.js +5 -1
  136. package/dist/server/plugins/audio.d.ts +2 -1
  137. package/dist/server/plugins/audio.js +15 -1
  138. package/dist/server/plugins/chroma-key-video.js +2 -0
  139. package/dist/server/plugins/config.d.ts +13 -0
  140. package/dist/server/plugins/config.js +32 -0
  141. package/dist/server/plugins/contract.d.ts +17 -3
  142. package/dist/server/plugins/image.d.ts +2 -1
  143. package/dist/server/plugins/image.js +14 -1
  144. package/dist/server/plugins/slice.d.ts +2 -1
  145. package/dist/server/plugins/slice.js +14 -1
  146. package/dist/server/plugins/video.d.ts +2 -1
  147. package/dist/server/plugins/video.js +26 -1
  148. package/dist/server/plugins.d.ts +6 -6
  149. package/dist/server/plugins.js +3 -1
  150. package/dist/server/start.d.ts +15 -1
  151. package/dist/server/start.js +84 -5
  152. package/package.json +3 -1
  153. package/build/client/_app/immutable/assets/2.wavcNhPC.css.br +0 -0
  154. package/build/client/_app/immutable/assets/2.wavcNhPC.css.gz +0 -0
  155. package/build/client/_app/immutable/assets/3.Cjh_fXPY.css +0 -1
  156. package/build/client/_app/immutable/assets/3.Cjh_fXPY.css.br +0 -0
  157. package/build/client/_app/immutable/assets/3.Cjh_fXPY.css.gz +0 -0
  158. package/build/client/_app/immutable/assets/LibraryContextMenu.zyZtpKzC.css +0 -1
  159. package/build/client/_app/immutable/assets/LibraryContextMenu.zyZtpKzC.css.br +0 -0
  160. package/build/client/_app/immutable/assets/LibraryContextMenu.zyZtpKzC.css.gz +0 -0
  161. package/build/client/_app/immutable/chunks/BiIto6ft.js.br +0 -0
  162. package/build/client/_app/immutable/chunks/BiIto6ft.js.gz +0 -0
  163. package/build/client/_app/immutable/chunks/CO4RBJfa.js +0 -1
  164. package/build/client/_app/immutable/chunks/CO4RBJfa.js.br +0 -0
  165. package/build/client/_app/immutable/chunks/CO4RBJfa.js.gz +0 -0
  166. package/build/client/_app/immutable/chunks/CvY6YsFE.js.br +0 -0
  167. package/build/client/_app/immutable/chunks/CvY6YsFE.js.gz +0 -0
  168. package/build/client/_app/immutable/chunks/DL0_39Ys.js +0 -5
  169. package/build/client/_app/immutable/chunks/DL0_39Ys.js.br +0 -0
  170. package/build/client/_app/immutable/chunks/DL0_39Ys.js.gz +0 -0
  171. package/build/client/_app/immutable/chunks/DQ8SXFaX.js.br +0 -0
  172. package/build/client/_app/immutable/chunks/DQ8SXFaX.js.gz +0 -0
  173. package/build/client/_app/immutable/chunks/DjdrdRzT.js +0 -1
  174. package/build/client/_app/immutable/chunks/DjdrdRzT.js.br +0 -0
  175. package/build/client/_app/immutable/chunks/DjdrdRzT.js.gz +0 -0
  176. package/build/client/_app/immutable/entry/app.ubN0v9bN.js.br +0 -0
  177. package/build/client/_app/immutable/entry/app.ubN0v9bN.js.gz +0 -0
  178. package/build/client/_app/immutable/entry/start.BW8dBDh6.js +0 -1
  179. package/build/client/_app/immutable/entry/start.BW8dBDh6.js.br +0 -0
  180. package/build/client/_app/immutable/entry/start.BW8dBDh6.js.gz +0 -0
  181. package/build/client/_app/immutable/nodes/0.Dr5ijCIl.js.br +0 -0
  182. package/build/client/_app/immutable/nodes/0.Dr5ijCIl.js.gz +0 -0
  183. package/build/client/_app/immutable/nodes/1.DiIGIRAb.js.br +0 -3
  184. package/build/client/_app/immutable/nodes/1.DiIGIRAb.js.gz +0 -0
  185. package/build/client/_app/immutable/nodes/2.B8KYmQcV.js +0 -3
  186. package/build/client/_app/immutable/nodes/2.B8KYmQcV.js.br +0 -0
  187. package/build/client/_app/immutable/nodes/2.B8KYmQcV.js.gz +0 -0
  188. package/build/client/_app/immutable/nodes/3.B1jc7arT.js +0 -104
  189. package/build/client/_app/immutable/nodes/3.B1jc7arT.js.br +0 -0
  190. package/build/client/_app/immutable/nodes/3.B1jc7arT.js.gz +0 -0
  191. package/build/client/_app/immutable/nodes/4.BPK9n1mH.js +0 -2
  192. package/build/client/_app/immutable/nodes/4.BPK9n1mH.js.br +0 -0
  193. package/build/client/_app/immutable/nodes/4.BPK9n1mH.js.gz +0 -0
  194. package/build/server/chunks/chunks/context.js-Bw4WWLhG.js.map +0 -1
  195. package/build/server/chunks/chunks/core.js-DDntpb72.js.map +0 -1
  196. package/build/server/chunks/chunks/library-store.js-BP8cL-qD.js.map +0 -1
  197. package/build/server/chunks/manifest.js-DoPjUnzD.js.map +0 -1
  198. package/build/server/chunks/nodes/0.js-Di3qgAtW.js +0 -11
  199. package/build/server/chunks/nodes/1.js-BlWSFIA8.js +0 -7
  200. package/build/server/chunks/nodes/2.js-CO9nSPUN.js +0 -7
  201. package/build/server/chunks/nodes/2.js-CO9nSPUN.js.map +0 -1
  202. package/build/server/chunks/nodes/3.js-C2D6xpEO.js +0 -7
  203. package/build/server/chunks/nodes/3.js-C2D6xpEO.js.map +0 -1
  204. package/build/server/chunks/nodes/4.js-B3IuagJW.js +0 -7
  205. package/build/server/chunks/nodes/4.js-B3IuagJW.js.map +0 -1
@@ -1,12 +1,37 @@
1
1
  /**
2
2
  * Video plugin (server part): one ffmpeg transcode per preset.
3
3
  */
4
- import { videoPlugin } from '../../core/index.js';
4
+ import { VIDEO_BUILT_IN_PRESETS, validateVideoPreset, videoPlugin } from '../../core/index.js';
5
5
  import { probeMedia } from '../processing/media-probe.js';
6
6
  import { processVideoFile } from '../processing/video-processing.js';
7
+ import { binaryPathOverride, mergePresets } from './config.js';
7
8
  import { requireProxyField, resolveNamedPreset } from './contract.js';
9
+ export const videoConfigDefinition = {
10
+ namespace: 'video',
11
+ resolve: ({ projectRoot, value }) => ({
12
+ presets: mergePresets({
13
+ label: 'video',
14
+ builtIn: VIDEO_BUILT_IN_PRESETS,
15
+ pluginConfig: value,
16
+ validatePreset: validateVideoPreset
17
+ }),
18
+ ffmpegPath: binaryPathOverride({
19
+ projectRoot,
20
+ pluginConfig: value,
21
+ label: 'video',
22
+ key: 'ffmpegPath'
23
+ }),
24
+ ffprobePath: binaryPathOverride({
25
+ projectRoot,
26
+ pluginConfig: value,
27
+ label: 'video',
28
+ key: 'ffprobePath'
29
+ })
30
+ })
31
+ };
8
32
  export const videoServerPlugin = {
9
33
  descriptor: videoPlugin,
34
+ configDefinitions: [videoConfigDefinition],
10
35
  pluginConfig: (config) => config.plugins.video,
11
36
  presets: (config) => config.plugins.video.presets,
12
37
  resolvePreset: (parameters, config) => resolveNamedPreset('video', parameters.preset, config.plugins.video.presets),
@@ -1,11 +1,11 @@
1
1
  /**
2
- * The server-side plugin registry: the ONE map that binds an asset
3
- * type to its server plugin (core descriptor + config slice + presets +
4
- * processing + entry building — plugins/contract.ts). The pipeline
2
+ * The server-side view of the central plugin registry. This module binds each
3
+ * available server implementation (core descriptor + config slice + presets +
4
+ * processing + entry building — plugins/contract.ts), then projects the
5
+ * centrally registered set onto that catalogue. The pipeline
5
6
  * orchestrators (processor, codegen, check, store, operations) are
6
- * type-agnostic and take the registry as a parameter defaulting to this map,
7
- * so a new asset type is a descriptor + one `ServerAssetTypePlugin` + one
8
- * entry here — and tests can extend the registry without touching them.
7
+ * type-agnostic and take the registry as a parameter defaulting to this map.
8
+ * Tests can extend the resulting registry without touching the orchestrators.
9
9
  */
10
10
  import type { AssetTypePluginDescriptor } from '../core/index.js';
11
11
  import type { ServerAssetTypePlugin, ServerPluginRegistry } from './plugins/contract.js';
@@ -1,15 +1,17 @@
1
+ import { plugins } from '../core/plugins/registry.js';
1
2
  import { audioServerPlugin } from './plugins/audio.js';
2
3
  import { chromaKeyVideoServerPlugin } from './plugins/chroma-key-video.js';
3
4
  import { imageServerPlugin } from './plugins/image.js';
4
5
  import { sliceServerPlugin } from './plugins/slice.js';
5
6
  import { videoServerPlugin } from './plugins/video.js';
6
- export const serverPluginsByType = {
7
+ const serverPluginCatalogue = {
7
8
  [imageServerPlugin.descriptor.type]: imageServerPlugin,
8
9
  [sliceServerPlugin.descriptor.type]: sliceServerPlugin,
9
10
  [videoServerPlugin.descriptor.type]: videoServerPlugin,
10
11
  [chromaKeyVideoServerPlugin.descriptor.type]: chromaKeyVideoServerPlugin,
11
12
  [audioServerPlugin.descriptor.type]: audioServerPlugin
12
13
  };
14
+ export const serverPluginsByType = plugins.project(serverPluginCatalogue, 'server implementation');
13
15
  export function serverPluginForType(type, registry = serverPluginsByType) {
14
16
  const plugin = registry[type];
15
17
  if (!plugin) {
@@ -1 +1,15 @@
1
- export declare function runStart(projectRoot: string): Promise<void>;
1
+ export declare const DEFAULT_PORT = 7583;
2
+ interface StartBannerOptions {
3
+ port: number;
4
+ projectRoot: string;
5
+ color?: boolean;
6
+ terminalWidth?: number;
7
+ }
8
+ export interface RunStartOptions {
9
+ openBrowser?: boolean;
10
+ port?: number;
11
+ }
12
+ /** Format the human startup summary without pulling a terminal UI dependency into the CLI. */
13
+ export declare function formatStartBanner({ port, projectRoot, color, terminalWidth }: StartBannerOptions): string;
14
+ export declare function runStart(projectRoot: string, { openBrowser, port }?: RunStartOptions): Promise<void>;
15
+ export {};
@@ -2,9 +2,72 @@
2
2
  import { existsSync } from 'node:fs';
3
3
  import { resolve } from 'node:path';
4
4
  import { fileURLToPath } from 'node:url';
5
+ import open from 'open';
5
6
  import { startServer } from './server.js';
6
- export async function runStart(projectRoot) {
7
- process.env.FUNDUS_PROJECT_ROOT = resolve(projectRoot);
7
+ export const DEFAULT_PORT = 7583;
8
+ function ansi(code, value, enabled) {
9
+ return enabled ? `\u001b[${code}m${value}\u001b[0m` : value;
10
+ }
11
+ function truncateEnd(value, maxLength) {
12
+ if (value.length <= maxLength)
13
+ return value;
14
+ if (maxLength <= 1)
15
+ return '…'.slice(0, maxLength);
16
+ return `${value.slice(0, maxLength - 1)}…`;
17
+ }
18
+ function truncateMiddle(value, maxLength) {
19
+ if (value.length <= maxLength)
20
+ return value;
21
+ if (maxLength <= 1)
22
+ return '…'.slice(0, maxLength);
23
+ const remainingLength = maxLength - 1;
24
+ const startLength = Math.floor(remainingLength / 2);
25
+ const endLength = remainingLength - startLength;
26
+ return `${value.slice(0, startLength)}…${value.slice(-endLength)}`;
27
+ }
28
+ /** Format the human startup summary without pulling a terminal UI dependency into the CLI. */
29
+ export function formatStartBanner({ port, projectRoot, color = false, terminalWidth }) {
30
+ const url = `http://127.0.0.1:${port}`;
31
+ const brand = '◆ Fundus';
32
+ const ready = 'Ready · press Ctrl+C to stop';
33
+ const editorPrefix = 'Editor ';
34
+ const projectPrefix = 'Project ';
35
+ const preferredContentWidth = Math.max(42, brand.length, editorPrefix.length + url.length, projectPrefix.length + projectRoot.length, ready.length);
36
+ const availableContentWidth = Number.isFinite(terminalWidth) && terminalWidth !== undefined
37
+ ? Math.max(1, Math.floor(terminalWidth) - 4)
38
+ : preferredContentWidth;
39
+ const contentWidth = Math.min(preferredContentWidth, availableContentWidth);
40
+ const displayedBrand = truncateEnd(brand, contentWidth);
41
+ const displayedEditorPrefix = truncateEnd(editorPrefix, contentWidth);
42
+ const displayedUrl = truncateEnd(url, Math.max(0, contentWidth - displayedEditorPrefix.length));
43
+ const editor = `${displayedEditorPrefix}${displayedUrl}`;
44
+ const displayedProjectPrefix = truncateEnd(projectPrefix, contentWidth);
45
+ const displayedProjectRoot = truncateMiddle(projectRoot, Math.max(0, contentWidth - displayedProjectPrefix.length));
46
+ const project = `${displayedProjectPrefix}${displayedProjectRoot}`;
47
+ const displayedReady = truncateEnd(ready, contentWidth);
48
+ const border = (value) => ansi('2', value, color);
49
+ const styledPrefix = (displayed, full, label, gap) => displayed === full ? `${ansi('2', label, color)}${gap}` : ansi('2', displayed, color);
50
+ const row = (plain, styled = plain) => `${border('│')} ${styled}${' '.repeat(contentWidth - plain.length)} ${border('│')}`;
51
+ const empty = row('');
52
+ return [
53
+ '',
54
+ border(`╭${'─'.repeat(contentWidth + 2)}╮`),
55
+ empty,
56
+ row(displayedBrand, displayedBrand === brand
57
+ ? `${ansi('38;2;24;152;243', '◆', color)} ${ansi('1', 'Fundus', color)}`
58
+ : ansi('1', displayedBrand, color)),
59
+ empty,
60
+ row(editor, `${styledPrefix(displayedEditorPrefix, editorPrefix, 'Editor', ' ')}${ansi('4;36', displayedUrl, color)}`),
61
+ row(project, `${styledPrefix(displayedProjectPrefix, projectPrefix, 'Project', ' ')}${displayedProjectRoot}`),
62
+ empty,
63
+ row(displayedReady, ansi('32', displayedReady, color)),
64
+ empty,
65
+ border(`╰${'─'.repeat(contentWidth + 2)}╯`)
66
+ ].join('\n');
67
+ }
68
+ export async function runStart(projectRoot, { openBrowser = true, port = DEFAULT_PORT } = {}) {
69
+ const resolvedProjectRoot = resolve(projectRoot);
70
+ process.env.FUNDUS_PROJECT_ROOT = resolvedProjectRoot;
8
71
  process.env.FUNDUS_BODY_SIZE_LIMIT ??= 'Infinity';
9
72
  process.env.FUNDUS_ADAPTER_BODY_SIZE_LIMIT = process.env.FUNDUS_BODY_SIZE_LIMIT;
10
73
  process.env.FUNDUS_ADAPTER_PROTOCOL_HEADER = 'x-fundus-proto';
@@ -16,9 +79,25 @@ export async function runStart(projectRoot) {
16
79
  if (typeof module.handler !== 'function') {
17
80
  throw new Error(`The packaged Fundus handler at ${fileURLToPath(handlerUrl)} is invalid.`);
18
81
  }
19
- const configuredPort = Number(process.env.FUNDUS_API_PORT ?? 5176);
20
- const server = await startServer({ handler: module.handler, port: configuredPort });
21
- console.log(`fundus editor: http://127.0.0.1:${server.port} (project: ${process.env.FUNDUS_PROJECT_ROOT})`);
82
+ const server = await startServer({ handler: module.handler, port });
83
+ const editorUrl = `http://127.0.0.1:${server.port}`;
84
+ console.log(formatStartBanner({
85
+ port: server.port,
86
+ projectRoot: resolvedProjectRoot,
87
+ terminalWidth: process.stdout.columns,
88
+ color: process.stdout.isTTY === true &&
89
+ process.env.NO_COLOR === undefined &&
90
+ process.env.TERM !== 'dumb'
91
+ }));
92
+ if (openBrowser) {
93
+ try {
94
+ await open(editorUrl);
95
+ }
96
+ catch (cause) {
97
+ console.warn(`Fundus could not open the editor in your browser. Open ${editorUrl} manually.\n` +
98
+ (cause instanceof Error ? cause.message : String(cause)));
99
+ }
100
+ }
22
101
  let signalStop;
23
102
  const stopForSignal = () => {
24
103
  signalStop ??= server.stop().then(() => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fundus",
3
- "version": "0.0.3",
3
+ "version": "0.1.0",
4
4
  "type": "module",
5
5
  "repository": {
6
6
  "type": "git",
@@ -39,6 +39,7 @@
39
39
  "build": "npm run build:package && npm run build:app",
40
40
  "test": "npm run build && vitest run",
41
41
  "smoke:pack": "node scripts/smoke-packed.mjs",
42
+ "smoke:e2e": "npm run build && node scripts/smoke-sveltekit.mjs",
42
43
  "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json && tsc --noEmit",
43
44
  "lint": "prettier --check .",
44
45
  "format": "prettier --write .",
@@ -51,6 +52,7 @@
51
52
  "ffmpeg-static": "^5.3.0",
52
53
  "ffprobe-static": "^3.1.0",
53
54
  "jiti": "^2.5.1",
55
+ "open": "^11.0.0",
54
56
  "sharp": "^0.34.4"
55
57
  },
56
58
  "peerDependencies": {
@@ -1 +0,0 @@
1
- .fundus-slice.svelte-1820t2z{width:100%;height:100%;position:relative;overflow:hidden}.fundus-slice--overdraw.svelte-1820t2z{overflow:visible}.fundus-slice__cell.svelte-1820t2z{position:absolute;overflow:hidden}.fundus-slice__cell.svelte-1820t2z img:where(.svelte-1820t2z){pointer-events:none;-webkit-user-select:none;user-select:none;max-width:none;max-height:none;position:absolute}.fundus-slice-canvas.svelte-xdsbrz{width:100%;height:100%;position:relative}canvas.svelte-xdsbrz{pointer-events:none;display:block;position:absolute}.fundus-chroma-key-video.svelte-r30mxh{width:100%;height:100%;position:relative}canvas.svelte-r30mxh,img.svelte-r30mxh{width:100%;height:100%;display:block}video.svelte-r30mxh{visibility:hidden;pointer-events:none;width:100%;height:100%;position:absolute;inset:0}.icon.svelte-jamecx{display:block}.scrub-number.svelte-nhap92{flex:1;min-width:0;display:flex;position:relative}.input.svelte-nhap92{width:100%;min-width:0;color:var(--text);font-variant-numeric:tabular-nums;appearance:textfield;background:0 0;border:none;outline:none;flex:1;margin:0;padding:0;font-size:11px}.scrub-number.right.svelte-nhap92 .input:where(.svelte-nhap92){text-align:right}.input.svelte-nhap92::-webkit-outer-spin-button{appearance:none;margin:0}.input.svelte-nhap92::-webkit-inner-spin-button{appearance:none;margin:0}.scrub-surface.svelte-nhap92{cursor:ew-resize;touch-action:none;position:absolute;inset:0}.number-field.svelte-368zap{flex-direction:column;gap:4px;min-width:0;display:flex}.caption.svelte-368zap{letter-spacing:.27px;color:#ffffffb2;-webkit-user-select:none;user-select:none;font-size:9px;font-weight:500;line-height:14px}.number-input.svelte-368zap{border-radius:4px;align-items:center;gap:4px;min-width:0;height:24px;padding:0 6px 0 0;display:flex;position:relative;overflow:hidden}.number-input.svelte-368zap:focus-within{border-color:var(--accent)}.fill.svelte-368zap{pointer-events:none;z-index:0;background:#4a4a4a;height:100%;position:absolute;top:0;left:0}.icon-slot.svelte-368zap{z-index:1;width:24px;height:24px;color:var(--text-dim);-webkit-user-select:none;user-select:none;flex:none;justify-content:center;align-items:center;font-size:11px;font-weight:500;display:flex;position:relative}.number-input.svelte-368zap .scrub-number{z-index:1}.select-field.svelte-bczi6w{flex-direction:column;gap:4px;min-width:0;display:flex}.caption.svelte-bczi6w{letter-spacing:.27px;color:#ffffffb2;-webkit-user-select:none;user-select:none;font-size:9px;font-weight:500;line-height:14px}.select-input.svelte-bczi6w{border-radius:4px;align-items:center;gap:4px;min-width:0;height:24px;padding:0 6px 0 0;display:flex}.select-input.svelte-bczi6w:focus-within{border-color:var(--accent)}.icon-slot.svelte-bczi6w{width:24px;height:24px;color:var(--text-dim);-webkit-user-select:none;user-select:none;flex:none;justify-content:center;align-items:center;font-size:11px;font-weight:500;display:flex}select.svelte-bczi6w{width:100%;min-width:0;height:100%;color:var(--text);background:0 0;border:none;outline:none;flex:1;margin:0;padding:0;font-size:11px}section.svelte-m9vwwu{border-bottom:1px solid var(--border-soft);padding:12px}.hint.svelte-m9vwwu{color:var(--text-faint);margin:4px 0 0;font-size:11px}.info.svelte-m9vwwu{font-variant-numeric:tabular-nums;margin:0}.file.svelte-m9vwwu{color:var(--text-dim);word-break:break-all}section.svelte-1by8n8t{border-bottom:1px solid var(--border-soft);padding:12px}.field.svelte-1by8n8t{margin-bottom:8px}section.svelte-1yd7n22{border-bottom:1px solid var(--border-soft);padding:12px}.modes.svelte-1yd7n22{flex-direction:column;gap:4px;display:flex}.modes.svelte-1yd7n22 button:where(.svelte-1yd7n22){text-align:left;background:var(--panel-raised);color:var(--text);border-radius:var(--radius);border:1px solid #0000;padding:6px 10px}.modes.svelte-1yd7n22 button:where(.svelte-1yd7n22):hover{border-color:var(--border)}.modes.svelte-1yd7n22 button.on:where(.svelte-1yd7n22){background:var(--accent-soft);border-color:var(--accent);color:var(--accent);font-weight:600}.insets.svelte-1yd7n22{grid-template-columns:1fr 1fr;gap:8px;min-width:0;display:grid}section.svelte-ij1927{border-bottom:1px solid var(--border-soft);padding:12px}.field.svelte-ij1927{margin-bottom:8px}.picker.svelte-56kutb{flex-direction:column;gap:4px;min-width:0;margin-bottom:8px;display:flex}.caption.svelte-56kutb{letter-spacing:.27px;color:#ffffffb2;-webkit-user-select:none;user-select:none;font-size:9px;font-weight:500;line-height:14px}.reference-input.svelte-56kutb{border-radius:4px;align-items:center;min-width:0;height:24px;padding:0;display:flex;position:relative}.reference-input.svelte-56kutb:focus-within{border-color:var(--accent)}.current.svelte-56kutb{min-width:0;height:100%;color:var(--text);text-align:left;background:0 0;border:none;outline:none;flex:1;align-items:center;gap:4px;padding:0 6px 0 0;display:flex}.current.empty.svelte-56kutb{color:var(--text-faint)}.preview-slot.svelte-56kutb{box-sizing:border-box;background:#4a4a4a;border-radius:3px 0 0 3px;flex:none;justify-content:center;align-items:center;width:24px;height:24px;margin-left:-1px;padding:2px;display:flex;overflow:hidden}.preview.svelte-56kutb{object-fit:contain;width:100%;height:100%}.missing-preview.svelte-56kutb{color:var(--warning);font-weight:700}.clear.svelte-56kutb{border:none;border-left:1px solid var(--border-soft);width:24px;height:24px;color:var(--text-dim);background:0 0;border-radius:0 3px 3px 0;outline:none;flex:none;padding:0}.clear.svelte-56kutb:hover{color:var(--danger)}.id.svelte-56kutb,.placeholder.svelte-56kutb{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.dangling.svelte-56kutb{color:var(--warning)}.dropdown.svelte-56kutb{z-index:10;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);max-height:240px;padding:4px;position:absolute;top:calc(100% + 4px);left:0;right:0;overflow-y:auto;box-shadow:0 8px 24px #00000080}.option.svelte-56kutb{border-radius:var(--radius);width:100%;color:var(--text);text-align:left;background:0 0;border:none;align-items:center;gap:6px;padding:4px 6px;display:flex}.option.svelte-56kutb .thumbnail:where(.svelte-56kutb){object-fit:contain;background:var(--canvas);border-radius:3px;flex:none;width:24px;height:24px}.option.svelte-56kutb:hover{background:var(--panel-raised)}.option.selected.svelte-56kutb{background:var(--accent-soft);color:var(--accent)}.hint.svelte-56kutb{color:var(--text-faint);margin:4px;font-size:11px}.color-field.svelte-gjs979{flex-direction:column;gap:4px;min-width:0;display:flex}.caption.svelte-gjs979{letter-spacing:.27px;color:#ffffffb2;-webkit-user-select:none;user-select:none;font-size:9px;font-weight:500;line-height:14px}.color-input.svelte-gjs979{border-radius:4px;align-items:center;gap:4px;min-width:0;height:24px;padding:0 6px 0 0;display:flex}.color-input.svelte-gjs979:focus-within{border-color:var(--accent)}.swatch-slot.svelte-gjs979{flex:none;justify-content:center;align-items:center;width:24px;height:24px;display:flex}.swatch.svelte-gjs979{cursor:pointer;background:0 0;border:1px solid #ffffff3d;border-radius:3px;width:16px;height:16px;margin:0;padding:0;overflow:hidden}.swatch.svelte-gjs979::-webkit-color-swatch-wrapper{padding:0}.swatch.svelte-gjs979::-webkit-color-swatch{border:none}.hex-input.svelte-gjs979{width:100%;min-width:0;color:var(--text);font-variant-numeric:tabular-nums;text-transform:uppercase;background:0 0;border:none;outline:none;flex:1;margin:0;padding:0;font-size:11px}section.svelte-rsjkek{border-bottom:1px solid var(--border-soft);padding:12px}.field.svelte-rsjkek{margin-bottom:8px}section.svelte-3jblpy{border-bottom:1px solid var(--border-soft);padding:12px}.field.svelte-3jblpy{margin-bottom:8px}.canvas.svelte-1jfrg6d{flex-direction:column;height:100%;min-height:0;display:flex}.toolbar.svelte-1jfrg6d{flex:none;align-items:center;gap:8px;padding:8px 0;display:flex}.toolbar.svelte-1jfrg6d button:where(.svelte-1jfrg6d){background:var(--panel-raised);border:1px solid var(--border);color:var(--text);border-radius:var(--radius);padding:4px 10px}.toolbar.svelte-1jfrg6d button:where(.svelte-1jfrg6d):hover{border-color:var(--accent)}.toolbar.svelte-1jfrg6d button.active:where(.svelte-1jfrg6d){background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.zoom.svelte-1jfrg6d{text-align:center;min-width:44px;color:var(--text-dim);font-variant-numeric:tabular-nums}.dims.svelte-1jfrg6d{color:var(--text-dim);font-variant-numeric:tabular-nums;margin-left:auto}.viewport.svelte-1jfrg6d{touch-action:none;cursor:grab;border:1px solid var(--border);border-radius:var(--radius-large);flex:1;min-height:0;position:relative;overflow:hidden}.viewport.panning.svelte-1jfrg6d{cursor:grabbing}.image-wrap.svelte-1jfrg6d{transform-origin:0 0;position:absolute;top:0;left:0;box-shadow:0 0 0 1px #ffffff14}.image-wrap.svelte-1jfrg6d img:where(.svelte-1jfrg6d){width:100%;height:100%;image-rendering:pixelated;pointer-events:none;-webkit-user-select:none;user-select:none;display:block}.center-rect.svelte-1jfrg6d{pointer-events:none;position:absolute}.center-rect.side-edges.svelte-1jfrg6d{border-left:1px dashed #0d99ff99;border-right:1px dashed #0d99ff99}.center-rect.cap-edges.svelte-1jfrg6d{border-top:1px dashed #0d99ff99;border-bottom:1px dashed #0d99ff99}.overdraw-band.svelte-1jfrg6d{pointer-events:none;background:#38bdf829;position:absolute}.line.svelte-1jfrg6d{background:var(--accent);touch-action:none;position:absolute}.line.overdraw-line.svelte-1jfrg6d{background:#38bdf8 padding-box content-box}.line.overdraw-line.svelte-1jfrg6d .tag:where(.svelte-1jfrg6d){background:#38bdf8}.line.v.svelte-1jfrg6d{cursor:ew-resize;box-sizing:content-box;background-clip:content-box;width:1px;height:100%;margin-left:-.5px;padding:0 7px;top:0;transform:translate(-7px)}.line.h.svelte-1jfrg6d{cursor:ns-resize;box-sizing:content-box;background-clip:content-box;width:100%;height:1px;margin-top:-.5px;padding:7px 0;left:0;transform:translateY(-7px)}.line.active.svelte-1jfrg6d{background-color:var(--text);background-clip:content-box}.tag.svelte-1jfrg6d{background:var(--accent);color:var(--text);font-variant-numeric:tabular-nums;pointer-events:none;border-radius:4px;padding:1px 5px;font-size:11px;font-weight:600;position:absolute}.line.v.svelte-1jfrg6d .tag:where(.svelte-1jfrg6d){top:4px;left:50%;transform:translate(-50%)}.line.h.svelte-1jfrg6d .tag:where(.svelte-1jfrg6d){top:50%;left:4px;transform:translateY(-50%)}.line.v.overdraw-line.svelte-1jfrg6d .tag:where(.svelte-1jfrg6d){top:auto;bottom:4px}.line.h.overdraw-line.svelte-1jfrg6d .tag:where(.svelte-1jfrg6d){left:auto;right:4px}.preview-panel.svelte-1mjaycs{flex-direction:column;height:100%;min-height:0;display:flex}.bar.svelte-1mjaycs{flex:none;align-items:center;gap:10px;padding:8px 0;display:flex}.size.svelte-1mjaycs{color:var(--text-dim);font-variant-numeric:tabular-nums}.backends.svelte-1mjaycs{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);gap:2px;margin-left:auto;padding:2px;display:inline-flex}.backends.svelte-1mjaycs button:where(.svelte-1mjaycs){color:var(--text-dim);background:0 0;border:none;border-radius:4px;padding:2px 8px}.backends.svelte-1mjaycs button.on:where(.svelte-1mjaycs){background:var(--accent-soft);color:var(--accent);font-weight:600}.reset.svelte-1mjaycs{background:var(--panel-raised);border:1px solid var(--border);color:var(--text);border-radius:var(--radius);padding:4px 10px}.reset.svelte-1mjaycs:hover{border-color:var(--accent)}.stage.svelte-1mjaycs{border:1px solid var(--border);border-radius:var(--radius-large);flex:1;min-height:0;padding:24px;overflow:auto}.box.svelte-1mjaycs{position:relative;box-shadow:0 0 0 1px #ffffff1f}.box.svelte-1mjaycs .fill{position:absolute;inset:0}.handle.svelte-1mjaycs{touch-action:none;background:0 0;position:absolute}.handle.edge-right.svelte-1mjaycs{cursor:ew-resize;width:10px;height:100%;top:0;right:-4px}.handle.edge-bottom.svelte-1mjaycs{cursor:ns-resize;width:100%;height:10px;bottom:-4px;left:0}.handle.corner.svelte-1mjaycs{cursor:nwse-resize;background:var(--accent);width:16px;height:16px;box-shadow:0 0 0 2px var(--canvas);border-radius:3px;bottom:-6px;right:-6px}.manifest-selector.svelte-151zph4{flex-direction:column;gap:4px;width:100%;display:flex}.manifest-option.svelte-151zph4{border-color:var(--border-soft);width:100%;height:28px;color:var(--text-dim);cursor:pointer;border-radius:4px;align-items:center;gap:7px;padding:2px 7px;display:flex}.manifest-option.svelte-151zph4:hover{border-color:var(--manifest-color);background:color-mix(in srgb, var(--manifest-color) 10%, var(--panel-raised));color:var(--text)}.manifest-option.svelte-151zph4:focus-within{border-color:var(--manifest-color)}.manifest-option.selected.svelte-151zph4{border-color:var(--manifest-color);background:color-mix(in srgb, var(--manifest-color) 20%, var(--panel-raised));color:var(--text)}.manifest-option.passive.svelte-151zph4{border-color:var(--manifest-color);border-style:dashed}input.svelte-151zph4{width:14px;height:14px;accent-color:var(--manifest-color);flex:none;margin:0}.marker.svelte-151zph4{border:1px solid color-mix(in srgb, var(--manifest-color) 70%, var(--border));background:color-mix(in srgb, var(--manifest-color) 24%, var(--panel));border-radius:3px;flex:none;justify-content:center;align-items:center;width:18px;height:18px;font-size:12px;display:inline-flex}.color-dot.svelte-151zph4{background:var(--manifest-color);border-radius:50%;width:8px;height:8px}.name.svelte-151zph4,.via.svelte-151zph4{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.name.svelte-151zph4{font-size:11px;font-weight:500}.via.svelte-151zph4{color:var(--text-faint);margin-left:auto;font-size:9px}.detail.svelte-xy8zsr{flex:1;grid-template-columns:224px 1fr 280px;min-height:0;display:grid}.center.svelte-xy8zsr{flex-direction:column;min-width:0;min-height:0;padding:12px 16px;display:flex}.center.empty.svelte-xy8zsr,.empty.svelte-xy8zsr{color:var(--text-dim);flex:1;justify-content:center;align-items:center;display:flex}.tabs.svelte-xy8zsr{flex:none;gap:4px;margin-bottom:4px;display:inline-flex}.tabs.svelte-xy8zsr button:where(.svelte-xy8zsr){border-radius:var(--radius);color:var(--text-dim);background:0 0;border:none;padding:4px 10px}.tabs.svelte-xy8zsr button.on:where(.svelte-xy8zsr){background:var(--accent-soft);color:var(--accent)}.pane.svelte-xy8zsr{flex:1;min-height:0}.image-stage.svelte-xy8zsr{border:1px solid var(--border);border-radius:8px;justify-content:center;align-items:center;display:flex;overflow:auto}.image-stage.svelte-xy8zsr img{object-fit:contain;max-width:90%;max-height:90%}.preview-column.svelte-xy8zsr{flex-direction:column;align-items:center;gap:8px;display:flex}.video-frame.svelte-xy8zsr{width:min(90%,480px)}.video-frame.svelte-xy8zsr video{width:100%;height:100%}.compare-row.svelte-xy8zsr{justify-content:center;align-items:flex-start;gap:16px;width:100%;max-width:760px;display:flex}.compare.svelte-xy8zsr{flex-direction:column;flex:1 1 0;align-items:center;gap:6px;min-width:0;margin:0;display:flex}.compare.svelte-xy8zsr figcaption:where(.svelte-xy8zsr){text-transform:uppercase;letter-spacing:.06em;color:var(--text-faint);font-size:10px}.compare.svelte-xy8zsr .video-frame:where(.svelte-xy8zsr){width:100%}.audio-frame.svelte-xy8zsr{width:min(90%,480px);height:128px}.stage-hint.svelte-xy8zsr{color:var(--text-dim)}.inspector.svelte-xy8zsr{background:var(--panel);border-left:1px solid var(--border);overflow-y:auto}.inspector.svelte-xy8zsr section:where(.svelte-xy8zsr){border-bottom:1px solid var(--border-soft);padding:12px}.inspector.svelte-xy8zsr h2:where(.svelte-xy8zsr){word-break:break-all;margin:0;font-size:13px}.raw.svelte-xy8zsr{color:var(--text-dim);word-break:break-all;margin:4px 0 0}.warning.svelte-xy8zsr{color:var(--warning);margin:8px 0 0;font-size:11px}.hint.svelte-xy8zsr{color:var(--text-faint);margin:0;font-size:11px}.inspector.svelte-xy8zsr h4:where(.svelte-xy8zsr){text-transform:uppercase;letter-spacing:.06em;color:var(--text-faint);margin:8px 0 4px;font-size:10px}.reference-row.svelte-xy8zsr{border-radius:var(--radius);color:var(--text-dim);align-items:center;gap:6px;min-width:0;padding:3px 4px;display:flex}.reference-row.svelte-xy8zsr:hover{background:var(--panel-raised);color:var(--text)}.reference-field.svelte-xy8zsr{color:var(--text-faint);font-size:11px}.reference-arrow.svelte-xy8zsr{color:var(--text-faint);flex:none}.reference-asset.svelte-xy8zsr{color:var(--accent);text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.rename.svelte-xy8zsr{gap:8px;margin-bottom:8px;display:flex}.rename.svelte-xy8zsr input:where(.svelte-xy8zsr){flex:1;min-width:0}.danger.svelte-xy8zsr{width:100%}
@@ -1 +0,0 @@
1
- .backdrop.svelte-1f5yh58{z-index:100;background:#0000008c;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.dialog.svelte-1f5yh58{background:var(--panel);border:1px solid var(--border);border-radius:8px;width:360px;padding:16px;box-shadow:0 12px 32px #00000080}h2.svelte-1f5yh58{margin:0 0 4px;font-size:12px}.file-name.svelte-1f5yh58{color:var(--text-dim);font-variant-numeric:tabular-nums;margin:0}.destination.svelte-1f5yh58{color:var(--text-faint);margin:2px 0 16px}.row.svelte-1f5yh58{align-items:center;gap:8px;margin-bottom:8px;display:flex}.label.svelte-1f5yh58{width:48px;color:var(--text-dim);flex:none}.row.svelte-1f5yh58 input:where(.svelte-1f5yh58){flex:1}.segmented.svelte-1f5yh58{border:1px solid var(--border);border-radius:var(--radius);display:inline-flex;overflow:hidden}.segmented.svelte-1f5yh58 button:where(.svelte-1f5yh58){background:var(--panel-raised);color:var(--text-dim);border:none;padding:4px 12px}.segmented.svelte-1f5yh58 button.on:where(.svelte-1f5yh58){background:var(--accent);color:var(--text)}.hint.svelte-1f5yh58{color:var(--text-dim);margin:4px 0 0;font-size:11px}.hint.warn.svelte-1f5yh58,.error.svelte-1f5yh58{color:var(--warning)}.actions.svelte-1f5yh58{justify-content:flex-end;gap:8px;margin-top:16px;display:flex}.playback.svelte-nchstv{align-items:center;gap:6px;width:100%;display:flex}.btn.svelte-nchstv{background:var(--panel-raised);border-radius:var(--radius);width:28px;height:28px;color:var(--text);border:1px solid #0000;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.btn.svelte-nchstv:hover:not(:disabled){border-color:var(--border)}.btn.svelte-nchstv:focus-visible{border-color:var(--accent);outline:none}.btn.svelte-nchstv:disabled{opacity:.4;cursor:not-allowed}.btn.active.svelte-nchstv{background:var(--accent-soft);color:var(--accent)}.btn.svelte-nchstv svg:where(.svelte-nchstv){width:16px;height:16px;display:block}.time.svelte-nchstv{color:var(--text-dim);font-variant-numeric:tabular-nums;flex:none;font-size:11px}.volume-group.svelte-nchstv{align-items:center;gap:6px;margin-left:auto;display:inline-flex}.range.svelte-nchstv{appearance:none;background:var(--panel-raised);cursor:pointer;border-radius:999px;height:4px}.range.scrub.svelte-nchstv{flex:1;min-width:0;margin:0 2px}.range.volume.svelte-nchstv{flex:none;width:72px}.range.svelte-nchstv:disabled{opacity:.4;cursor:not-allowed}.range.svelte-nchstv::-webkit-slider-thumb{appearance:none;background:var(--accent);border:none;border-radius:50%;width:12px;height:12px}.range.svelte-nchstv::-moz-range-thumb{background:var(--accent);border:none;border-radius:50%;width:12px;height:12px}.range.svelte-nchstv:focus-visible{outline:none}.range.svelte-nchstv:focus-visible::-webkit-slider-thumb{box-shadow:0 0 0 3px var(--accent-soft)}.range.svelte-nchstv:focus-visible::-moz-range-thumb{box-shadow:0 0 0 3px var(--accent-soft)}.audio-waveform.svelte-1liihyn{flex-direction:column;gap:8px;width:100%;height:100%;min-height:0;display:flex}.wave.svelte-1liihyn{cursor:pointer;touch-action:none;flex:1;width:100%;min-height:0;display:block}.footer.svelte-1liihyn{flex:none;align-items:center;display:flex}h3.svelte-1ol624f{letter-spacing:0;text-transform:none;color:#fff;margin:0 0 10px;font-size:11px;font-weight:400}.directory.svelte-ftwms1{background:var(--panel);border-right:1px solid var(--border);flex-direction:column;width:220px;min-width:180px;max-width:320px;min-height:0;display:flex}header.svelte-ftwms1{border-bottom:1px solid var(--border-soft);align-items:center;height:40px;padding:0 8px 0 12px;display:flex}header.svelte-ftwms1 strong:where(.svelte-ftwms1){font-size:11px}.actions.svelte-ftwms1{margin-left:auto;display:flex}.icon-button.svelte-ftwms1{width:24px;height:24px;color:var(--text-dim);border-radius:var(--radius-small);background:0 0;border:0}.icon-button.svelte-ftwms1:hover:not(:disabled){background:var(--panel-raised);color:var(--text)}.icon-button.danger.svelte-ftwms1:hover:not(:disabled){color:var(--danger)}.icon-button.svelte-ftwms1:disabled{opacity:.3;cursor:default}.tree.svelte-ftwms1{padding:6px 4px;overflow:auto}.folder-row.svelte-ftwms1,.asset-row.svelte-ftwms1{padding-left:calc((var(--depth) + 2) * 14px);display:flex}.row.svelte-ftwms1{color:var(--text-dim);border-radius:var(--radius-small);text-align:left;background:0 0;border:0;align-items:center;gap:6px;min-width:0;height:28px;display:flex}.row.special.svelte-ftwms1{width:100%;padding:0 8px}.row.folder.svelte-ftwms1{flex:1;padding:0 8px 0 2px}.row.asset.svelte-ftwms1{cursor:grab;flex:1;padding:0 8px 0 2px}.row.asset.svelte-ftwms1:active{cursor:grabbing}.row.svelte-ftwms1:hover,.row.selected.svelte-ftwms1{background:var(--panel-raised);color:var(--text)}.row.asset.current.svelte-ftwms1,.row.selected.svelte-ftwms1{background:var(--accent-soft);color:var(--accent)}.row.drop-target.svelte-ftwms1{outline:1px solid var(--accent);background:var(--accent-soft)}.glyph.svelte-ftwms1{width:14px;color:var(--text-faint);flex:none;justify-content:center;align-items:center;display:flex}.asset-glyph.svelte-ftwms1{font-size:7px}.asset-warning.svelte-ftwms1{color:var(--warning);flex:none;margin-left:auto}.label.svelte-ftwms1{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.count.svelte-ftwms1{color:var(--text-faint);margin-left:auto;font-size:10px}.dialog-row.svelte-ftwms1{align-items:center;gap:8px;display:flex}.dialog-row.svelte-ftwms1 span:where(.svelte-ftwms1){width:44px;color:var(--text-dim)}.dialog-row.svelte-ftwms1 input:where(.svelte-ftwms1){flex:1}.dialog-path.svelte-ftwms1,.dialog-text.svelte-ftwms1,.dialog-warning.svelte-ftwms1{margin:8px 0 0}.dialog-path.svelte-ftwms1{color:var(--text-faint)}.dialog-warning.svelte-ftwms1{color:var(--warning)}.context-menu.svelte-10jgqdh{z-index:200;background:var(--panel-raised);border:1px solid var(--border);border-radius:6px;width:168px;padding:4px;position:fixed;box-shadow:0 8px 24px #00000073}button.svelte-10jgqdh{width:100%;color:var(--text);font:inherit;text-align:left;background:0 0;border:0;border-radius:4px;padding:6px 8px}button.svelte-10jgqdh:hover,button.svelte-10jgqdh:focus-visible{background:var(--accent-soft);outline:none}button.danger.svelte-10jgqdh{color:var(--danger)}
@@ -1 +0,0 @@
1
- import{J as e,P as t,Y as n}from"./CNRz3sSw.js";async function r(e){if(!e.ok){let t=`${e.status} ${e.statusText}`;try{let n=await e.json();n.error?.message&&(t=n.error.message)}catch{}throw Error(t)}return await e.json()}async function i(){return r(await fetch(`/api/state`))}async function a(e,t,n,i){let a=new FormData;return a.set(`file`,e),a.set(`type`,t),a.set(`id`,n),a.set(`folder`,i),r(await fetch(`/api/assets`,{method:`POST`,body:a}))}async function o(e){return r(await fetch(`/api/folders`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:e})}))}async function s(e,t){return r(await fetch(`/api/folders/${encodeURIComponent(e)}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:t})}))}async function c(e,t){return r(await fetch(`/api/folders/${encodeURIComponent(e)}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({parent:t})}))}async function l(e){return r(await fetch(`/api/folders/${encodeURIComponent(e)}`,{method:`DELETE`}))}async function u(e,t){return r(await fetch(`/api/assets/${encodeURIComponent(e)}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}))}async function d(e,t){return r(await fetch(`/api/assets/move`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({assetIds:e,folder:t})}))}async function f(e){return r(await fetch(`/api/assets/${encodeURIComponent(e)}`,{method:`DELETE`}))}async function p(e){return r(await fetch(`/api/assets/delete`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({assetIds:e})}))}async function m(e){return r(await fetch(`/api/manifests`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:e})}))}async function h(e){return r(await fetch(`/api/manifests/${encodeURIComponent(e)}`,{method:`DELETE`}))}async function g(e,t){return r(await fetch(`/api/manifests/${encodeURIComponent(e)}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}))}var _=new class{#e=Promise.resolve();#t=n(null);get state(){return t(this.#t)}set state(t){e(this.#t,t,!0)}#n=n(!1);get saving(){return t(this.#n)}set saving(t){e(this.#n,t,!0)}#r=n(null);get error(){return t(this.#r)}set error(t){e(this.#r,t,!0)}#i=n(!1);get loaded(){return t(this.#i)}set loaded(t){e(this.#i,t,!0)}async refresh(){try{this.state=await i(),this.error=null}catch(e){this.error=e instanceof Error?e.message:String(e)}finally{this.loaded=!0}}mutate(e){let t=this.#e.then(async()=>{this.saving=!0,this.error=null;try{let t=await e();return this.state=t,t}catch(e){throw this.error=e instanceof Error?e.message:String(e),e}finally{this.saving=!1}});return this.#e=t.then(()=>{},()=>{}),t}get manifestNames(){return Object.keys(this.state?.library.manifests??{}).sort()}manifestAppearance(e){return this.state?.library.manifests[e]??{}}get generalIssues(){return this.state?.issues.filter(e=>e.assetId===void 0).map(e=>e.message)??[]}assetById(e){return this.state?.assets.find(t=>t.id===e)??null}};export{p as a,d as c,g as d,s as f,f as i,c as l,o as n,l as o,a as p,m as r,h as s,_ as t,u};
@@ -1,5 +0,0 @@
1
- import{$ as e,B as t,E as n,G as r,I as i,J as a,K as o,L as s,M as c,N as l,O as u,P as d,S as f,T as p,U as m,W as h,X as g,Y as _,a as v,b as y,c as b,d as x,et as S,g as C,h as w,i as T,it as E,j as D,k as O,l as k,s as A,w as j,z as M}from"./CNRz3sSw.js";import"./CvY6YsFE.js";import"./xihTtKlq.js";import{f as N,l as P,n as ee,o as F,p as I,t as L}from"./CO4RBJfa.js";import{i as R,m as te,r as ne,t as re}from"./BiIto6ft.js";var z=/[\u0000-\u001f\u007f]/,B=/[<>:"|?*]/,V=/^(con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\..*)?$/i;function H(e){return e.length===0?`Folder names must not be empty.`:e===e.trim()?e===`.`||e===`..`?`"${e}" is not a valid folder name.`:e.includes(`/`)||e.includes(`\\`)?`Folder names must not contain path separators.`:z.test(e)?`Folder names must not contain control characters.`:B.test(e)?`Folder names must not contain Windows-reserved characters (: * ? " < > |).`:e.endsWith(`.`)?`Folder names must not end with a dot.`:e.toLocaleLowerCase(`en-US`)===`root`?`"${e}" is reserved for the implicit Fundus root folder.`:e.toLocaleLowerCase(`en-US`)===`.gitkeep`?`"${e}" is reserved for Fundus folder management.`:V.test(e)?`"${e}" is a reserved filesystem name.`:null:`Folder names must not start or end with whitespace.`}function U(e){return e.split(`/`).map(e=>e.normalize(`NFC`)).join(`/`)}function W(e){return U(e).toLocaleLowerCase(`en-US`)}function ie(e){let t=e.lastIndexOf(`/`);return t===-1?``:e.slice(0,t)}function ae(e){let t=e.lastIndexOf(`/`);return t===-1?e:e.slice(t+1)}function oe(e,t){return e===``?t:`${e}/${t}`}function G(e,t){return e===t||e.startsWith(`${t}/`)}var K=u(`<p class="error svelte-1f5yh58">This file type is not supported (raster images, video, or audio).</p>`),se=u(`<button> </button>`),q=u(`<p class="hint warn svelte-1f5yh58"> </p>`),J=u(`<p class="hint warn svelte-1f5yh58">An asset with this id already exists.</p>`),Y=u(`<div class="row svelte-1f5yh58"><span class="label svelte-1f5yh58">Type</span> <div class="segmented svelte-1f5yh58"></div></div> <label class="row svelte-1f5yh58"><span class="label svelte-1f5yh58">Id</span> <input class="control svelte-1f5yh58" type="text" spellcheck="false"/></label> <!> <!>`,1),ce=u(`<div class="backdrop svelte-1f5yh58" role="presentation"><div class="dialog svelte-1f5yh58" role="dialog" aria-label="Import asset" tabindex="-1"><h2 class="svelte-1f5yh58">Import asset</h2> <p class="file-name svelte-1f5yh58"> </p> <p class="destination svelte-1f5yh58"> </p> <!> <div class="actions svelte-1f5yh58"><button class="control">Cancel</button> <button class="control primary"> </button></div></div></div>`);function X(i,s){S(s,!0);let l=g(()=>R(s.file.name)),u=_(`image`),m=_(`asset`),v=_(!1),y=_(null);t(()=>{a(u,R(s.file.name)[0]??`image`,!0),a(m,ne(s.file.name),!0)});let x=g(()=>L.state?.assets.some(e=>e.id===d(m))??!1),w=g(()=>te(d(m))),T=g(()=>d(w)===null),D=g(()=>d(T)&&!d(x)&&d(l).length>0&&!d(v));async function O(){if(!d(D))return;let e=d(m),t=d(u);a(v,!0),a(y,null);try{await L.mutate(()=>I(s.file,t,e,s.folder)),s.onDone(e)}catch(e){a(y,e instanceof Error?e.message:String(e),!0)}finally{a(v,!1)}}var k=ce(),N=h(k),P=o(h(N),2),ee=h(P,!0);E(P);var F=o(P,2),re=h(F);E(F);var z=o(F,2),B=e=>{n(e,K())},V=e=>{var t=Y(),i=r(t),s=o(h(i),2);f(s,20,()=>d(l),e=>e,(e,t)=>{var r=se();let i;var o=h(r,!0);E(r),M(()=>{r.disabled=d(v),i=C(r,1,`svelte-1f5yh58`,null,i,{on:d(u)===t}),p(o,t)}),c(`click`,r,()=>a(u,t,!0)),n(e,r)}),E(s),E(i);var g=o(i,2),_=o(h(g),2);b(_),E(g);var S=o(g,2),D=e=>{var t=q(),r=h(t,!0);E(t),M(()=>p(r,d(w))),n(e,t)},O=e=>{n(e,J())};j(S,e=>{d(T)?d(x)&&e(O,1):e(D)});var k=o(S,2),N=e=>{var t=q(),r=h(t,!0);E(t),M(()=>p(r,d(y))),n(e,t)};j(k,e=>{d(y)&&e(N)}),M(()=>_.disabled=d(v)),A(_,()=>d(m),e=>a(m,e)),n(e,t)};j(z,e=>{d(l).length===0?e(B):e(V,-1)});var H=o(z,2),U=h(H),W=o(U,2),ie=h(W,!0);E(W),E(H),E(N),E(k),M(()=>{p(ee,s.file.name),p(re,`Destination: ${(s.folder||`Root`)??``}`),W.disabled=!d(D),p(ie,d(v)?`Importing…`:`Import`)}),c(`click`,k,function(...e){s.onCancel?.apply(this,e)}),c(`click`,N,e=>e.stopPropagation()),c(`keydown`,N,e=>{e.key===`Escape`&&s.onCancel()}),c(`click`,U,function(...e){s.onCancel?.apply(this,e)}),c(`click`,W,()=>void O()),n(i,k),e()}D([`click`,`keydown`]);function Z(e){let t=Number.isFinite(e)&&e>0?Math.floor(e):0;return`${Math.floor(t/60)}:${(t%60).toString().padStart(2,`0`)}`}var le=O(`<svg viewBox="0 0 16 16" aria-hidden="true" class="svelte-nchstv"><rect x="4.5" y="3.5" width="2.5" height="9" fill="currentColor"></rect><rect x="9" y="3.5" width="2.5" height="9" fill="currentColor"></rect></svg>`),ue=O(`<svg viewBox="0 0 16 16" aria-hidden="true" class="svelte-nchstv"><path d="M5 3.3v9.4l7-4.7z" fill="currentColor"></path></svg>`),de=u(`<span class="time svelte-nchstv"> </span> <input class="range scrub svelte-nchstv" type="range" min="0" step="0.01" aria-label="Seek"/> <span class="time svelte-nchstv"> </span>`,1),fe=u(`<span class="time svelte-nchstv"> </span>`),pe=O(`<svg viewBox="0 0 16 16" aria-hidden="true" class="svelte-nchstv"><path d="M2.5 6h2l3-2.5v9l-3-2.5h-2z" fill="currentColor"></path><path d="M10 6l3.5 4M13.5 6 10 10" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round"></path></svg>`),me=O(`<svg viewBox="0 0 16 16" aria-hidden="true" class="svelte-nchstv"><path d="M2.5 6h2l3-2.5v9l-3-2.5h-2z" fill="currentColor"></path><path d="M10 5.6a3.4 3.4 0 0 1 0 4.8" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round"></path><path d="M11.8 3.9a6 6 0 0 1 0 8.2" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round"></path></svg>`),he=u(`<div class="volume-group svelte-nchstv"><button class="btn svelte-nchstv" type="button"><!></button> <input class="range volume svelte-nchstv" type="range" min="0" max="1" step="0.01" aria-label="Volume"/></div>`),ge=u(`<div><button class="btn svelte-nchstv" type="button"><!></button> <button class="btn svelte-nchstv" type="button" aria-label="Stop"><svg viewBox="0 0 16 16" aria-hidden="true" class="svelte-nchstv"><rect x="4" y="4" width="8" height="8" rx="1" fill="currentColor"></rect></svg></button> <button type="button" aria-label="Loop"><svg viewBox="0 0 16 16" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round" class="svelte-nchstv"><path d="M4.4 4.5H9A3.5 3.5 0 0 1 12.5 8"></path><path d="M2.4 6.4 4.3 4.4 6.3 6.1"></path><path d="M11.6 11.5H7A3.5 3.5 0 0 1 3.5 8"></path><path d="M13.6 9.6 11.7 11.6 9.7 9.9"></path></svg></button> <!> <!></div>`);function _e(i,s){S(s,!0);let l=T(s,`media`,7),u=T(s,`showScrub`,3,!1),f=T(s,`showVolume`,3,!0),m=_(!1),v=_(0),y=_(0),w=_(!1),D=_(1),O=_(!1),A=_(!1),N=!1,P=null,ee=g(()=>Z(d(v))),F=g(()=>Z(d(y))),I=g(()=>d(y)>0),L=g(()=>d(O)?0:d(D));t(()=>{if(!l()){a(m,!1);return}let e=l();a(m,!e.paused),a(v,e.currentTime,!0),a(y,Number.isFinite(e.duration)?e.duration:0,!0),a(w,e.loop,!0),a(D,e.volume,!0),a(O,e.muted,!0);function t(){a(m,!0)}function n(){a(m,!1)}function r(){d(A)||a(v,e.currentTime,!0)}function i(){a(y,Number.isFinite(e.duration)?e.duration:0,!0)}function o(){a(D,e.volume,!0),a(O,e.muted,!0)}return e.addEventListener(`play`,t),e.addEventListener(`playing`,t),e.addEventListener(`pause`,n),e.addEventListener(`ended`,n),e.addEventListener(`timeupdate`,r),e.addEventListener(`seeked`,r),e.addEventListener(`loadedmetadata`,i),e.addEventListener(`durationchange`,i),e.addEventListener(`volumechange`,o),()=>{P===e&&(a(A,!1),N=!1,P=null),e.removeEventListener(`play`,t),e.removeEventListener(`playing`,t),e.removeEventListener(`pause`,n),e.removeEventListener(`ended`,n),e.removeEventListener(`timeupdate`,r),e.removeEventListener(`seeked`,r),e.removeEventListener(`loadedmetadata`,i),e.removeEventListener(`durationchange`,i),e.removeEventListener(`volumechange`,o)}});function R(){l()&&(l().paused?l().play():l().pause())}function te(){l()&&(l().pause(),l().currentTime=0)}function ne(){l()&&(l().loop=!l().loop,a(w,l().loop,!0))}function re(){l()&&(l().muted=!l().muted)}function z(e){if(!l())return;let t=e.currentTarget.valueAsNumber;l().volume=t,l().muted=t===0}function B(){!l()||d(A)||(a(A,!0),N=!l().paused,P=l(),l().pause())}function V(e){let t=P??l();if(!t)return;let n=e.currentTarget.valueAsNumber;Number.isFinite(t.duration)&&(t.currentTime=n),a(v,n,!0)}function H(){if(!d(A))return;let e=P;a(A,!1),N&&e&&l()===e&&e.play(),N=!1,P=null}t(()=>{if(d(A))return window.addEventListener(`pointerup`,H),window.addEventListener(`pointercancel`,H),()=>{window.removeEventListener(`pointerup`,H),window.removeEventListener(`pointercancel`,H)}});var U=ge(),W=h(U),ie=h(W),ae=e=>{n(e,le())},oe=e=>{n(e,ue())};j(ie,e=>{d(m)?e(ae):e(oe,-1)}),E(W);var G=o(W,2),K=o(G,2);let se;var q=o(K,2),J=e=>{var t=de(),i=r(t),a=h(i,!0);E(i);var s=o(i,2);b(s);var u=o(s,2),f=h(u,!0);E(u),M(()=>{p(a,d(ee)),k(s,`max`,d(I)?d(y):0),x(s,d(v)),s.disabled=!l()||!d(I),p(f,d(F))}),c(`pointerdown`,s,B),c(`input`,s,V),n(e,t)},Y=e=>{var t=fe(),r=h(t);E(t),M(()=>p(r,`${d(ee)??``} / ${d(F)??``}`)),n(e,t)};j(q,e=>{u()?e(J):d(I)&&e(Y,1)});var ce=o(q,2),X=e=>{var t=he(),r=h(t),i=h(r),a=e=>{n(e,pe())},s=e=>{n(e,me())};j(i,e=>{d(O)||d(D)===0?e(a):e(s,-1)}),E(r);var u=o(r,2);b(u),E(t),M(()=>{r.disabled=!l(),k(r,`aria-label`,d(O)?`Unmute`:`Mute`),x(u,d(L)),u.disabled=!l()}),c(`click`,r,re),c(`input`,u,z),n(e,t)};j(ce,e=>{f()&&e(X)}),E(U),M(()=>{C(U,1,`playback ${s.class??``??``}`,`svelte-nchstv`),W.disabled=!l(),k(W,`aria-label`,d(m)?`Pause`:`Play`),G.disabled=!l(),se=C(K,1,`btn svelte-nchstv`,null,se,{active:d(w)}),K.disabled=!l(),k(K,`aria-pressed`,d(w))}),c(`click`,W,R),c(`click`,G,te),c(`click`,K,ne),n(i,U),e()}D([`click`,`pointerdown`,`input`]);var ve=null;function ye(){return ve||=new AudioContext,ve}var Q=null;function be(e){let t=e.numberOfChannels;if(t===1)return e.getChannelData(0);let n=e.length,r=new Float32Array(n);for(let i=0;i<t;i++){let t=e.getChannelData(i);for(let e=0;e<n;e++)r[e]+=t[e]}for(let e=0;e<n;e++)r[e]/=t;return r}function xe(e,t){let n=new Float32Array(t),r=new Float32Array(t),i=e.length/t;for(let a=0;a<t;a++){let t=Math.floor(a*i),o=Math.min(e.length,Math.floor((a+1)*i)),s=0,c=0;for(let n=t;n<o;n++){let t=e[n];t<s&&(s=t),t>c&&(c=t)}n[a]=s,r[a]=c}return{min:n,max:r}}function Se(e,t,n){return Math.min(n,Math.max(t,e))}var Ce=u(`<div class="footer svelte-1liihyn"><!></div>`),we=u(`<div><canvas class="wave svelte-1liihyn" role="button" tabindex="0" aria-label="Audio waveform — click or press Enter to play; arrow keys scrub"></canvas> <!></div>`);function Te(r,i){S(i,!0);let l=T(i,`loop`,3,!1),u=T(i,`showControls`,3,!1),f=_(void 0),p=_(null),m=_(!1),g=_(0),y=_(0),b=`idle`,x=null,w=null,D=0,O=1,k=`#0d99ff`,A=`#7a7a7a`,N=`#f24822`,P=0;function ee(){if(!d(f))return;let e=getComputedStyle(d(f));k=e.getPropertyValue(`--accent`).trim()||k,A=e.getPropertyValue(`--text-faint`).trim()||A,N=e.getPropertyValue(`--danger`).trim()||N}function F(){if(!d(f))return;let e=d(f).getBoundingClientRect();O=window.devicePixelRatio||1;let t=Math.max(1,Math.round(e.width*O)),n=Math.max(1,Math.round(e.height*O));(d(f).width!==t||d(f).height!==n)&&(d(f).width=t,d(f).height=n,w=null),ee()}function I(){if(!d(f))return;let e=d(f).getContext(`2d`);if(!e)return;let t=d(f).width,n=d(f).height,r=n/2;if(e.clearRect(0,0,t,n),b!==`ready`||!x){e.strokeStyle=b===`error`?N:A,e.lineWidth=Math.max(1,O),e.beginPath(),e.moveTo(0,r),e.lineTo(t,r),e.stroke();return}let i=Math.max(1,Math.floor(t));(!w||D!==i)&&(w=xe(x,i),D=i);let a=d(y)>0?Se(d(g)/d(y),0,1):0,o=a*t,s=r*.9,c=t/i;e.lineWidth=1;for(let t=0;t<i;t++){let n=t*c,i=r-w.max[t]*s,a=r-w.min[t]*s;e.strokeStyle=n<=o?k:A,e.beginPath(),e.moveTo(n+.5,Math.min(i,r-.5)),e.lineTo(n+.5,Math.max(a,r+.5)),e.stroke()}a>0&&(e.strokeStyle=k,e.lineWidth=Math.max(1,O),e.beginPath(),e.moveTo(o,0),e.lineTo(o,n),e.stroke())}function L(){P&&=(cancelAnimationFrame(P),0)}function R(){d(p)&&a(g,d(p).currentTime,!0),I(),d(m)&&(P=requestAnimationFrame(R))}async function te(e){b=`loading`,I();try{let t=await(await fetch(e)).arrayBuffer(),n=await ye().decodeAudioData(t);if(e!==i.src)return;x=be(n),d(y)||a(y,n.duration,!0),b=`ready`,w=null,I()}catch{if(e!==i.src)return;b=`error`,I()}}function ne(e){if(e.preventDefault(),e.stopPropagation(),!d(f)||!d(p))return;let t=d(f).getBoundingClientRect(),n=Se((e.clientX-t.left)/t.width,0,1),r=d(p).duration;Number.isFinite(r)&&r>0&&(d(p).currentTime=n*r),d(p).play()}function re(){d(p)&&(d(p).paused?d(p).play():d(p).pause())}function z(e){if(d(p)){if(e.key===`Enter`||e.key===` `){e.preventDefault(),re();return}if(e.key===`ArrowRight`||e.key===`ArrowLeft`){let t=d(p).duration;if(!Number.isFinite(t)||t<=0)return;e.preventDefault();let n=e.key===`ArrowRight`?5:-5;d(p).currentTime=Se(d(p).currentTime+n,0,t)}}}t(()=>{let e=d(p);e&&(e.loop=l())}),t(()=>{let e=i.src,t=d(f);if(!t)return;b=`idle`,x=null,w=null,D=0,a(g,0),a(y,0),a(m,!1);let n=new Audio(e);n.preload=`metadata`,n.loop=s(()=>l());function r(){Q&&Q!==n&&Q.pause(),Q=n,a(m,!0),L(),P=requestAnimationFrame(R)}function o(){Q===n&&(Q=null),a(m,!1),L(),I()}function c(){Q===n&&(Q=null),a(m,!1),L(),I()}function u(){a(g,n.currentTime,!0),d(m)||I()}function h(){Number.isFinite(n.duration)&&a(y,n.duration,!0),I()}n.addEventListener(`play`,r),n.addEventListener(`pause`,o),n.addEventListener(`ended`,c),n.addEventListener(`timeupdate`,u),n.addEventListener(`loadedmetadata`,h),n.addEventListener(`durationchange`,h),n.addEventListener(`seeked`,u),a(p,n,!0);let _=new ResizeObserver(()=>{F(),I()});_.observe(t);let v=new IntersectionObserver(t=>{t.some(e=>e.isIntersecting)&&(v.disconnect(),te(e))});return v.observe(t),F(),I(),()=>{L(),_.disconnect(),v.disconnect(),n.removeEventListener(`play`,r),n.removeEventListener(`pause`,o),n.removeEventListener(`ended`,c),n.removeEventListener(`timeupdate`,u),n.removeEventListener(`loadedmetadata`,h),n.removeEventListener(`durationchange`,h),n.removeEventListener(`seeked`,u),n.pause(),Q===n&&(Q=null),n.removeAttribute(`src`),n.load(),a(p,null)}});var B=we(),V=h(B);v(V,e=>a(f,e),()=>d(f));var H=o(V,2),U=e=>{var t=Ce();_e(h(t),{get media(){return d(p)}}),E(t),n(e,t)};j(H,e=>{u()&&e(U)}),E(B),M(()=>C(B,1,`audio-waveform ${i.class??``??``}`,`svelte-1liihyn`)),c(`click`,V,ne),c(`keydown`,V,z),n(r,B),e()}D([`click`,`keydown`]);var Ee=u(`<h3 class="svelte-1ol624f"><!></h3>`);function De(e,t){var r=Ee();y(h(r),()=>t.children),E(r),n(e,r)}function Oe(e,t){return e!==t&&!G(t,e)&&ie(e)!==t}function ke(e,t,n){return e&&t!==null&&Oe(t,n)}var Ae=O(`<svg viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path d="M1.25 4.25A1.75 1.75 0 0 1 3 2.5h2.45c.55 0 1.06.26 1.39.7l.6.8H13a1.75 1.75 0 0 1 1.75 1.75v5.5A1.75 1.75 0 0 1 13 13H3a1.75 1.75 0 0 1-1.75-1.75v-7Z" fill="currentColor"></path><path d="M1.75 6h12.5" stroke="currentColor" stroke-opacity="0.35"></path></svg>`);function je(e,t){let r=T(t,`size`,3,14);var i=Ae();M(()=>{k(i,`width`,r()),k(i,`height`,r())}),n(e,i)}var Me=u(`<span class="asset-warning svelte-ftwms1">⚠</span>`),Ne=u(`<div class="asset-row svelte-ftwms1"><button class="row asset current svelte-ftwms1" draggable="true" aria-current="page"><span class="glyph asset-glyph svelte-ftwms1">◆</span> <span class="label svelte-ftwms1"> </span> <!></button></div>`),Pe=u(`<div class="folder-row svelte-ftwms1"><button draggable="true"><span class="glyph svelte-ftwms1"><!></span><span class="label svelte-ftwms1"> </span><span class="count svelte-ftwms1"> </span></button></div> <!>`,1),Fe=u(`<p class="dialog-warning svelte-ftwms1"> </p>`),Ie=u(`<p class="dialog-warning svelte-ftwms1">A sibling folder with this name already exists.</p>`),Le=u(`<label class="dialog-row svelte-ftwms1"><span class="svelte-ftwms1">Name</span> <input class="control svelte-ftwms1" spellcheck="false"/></label> <p class="dialog-path svelte-ftwms1"> </p> <!> <!> <!>`,1),Re=u(`<p class="dialog-text svelte-ftwms1">Delete <strong> </strong> </p> <!> <!>`,1),ze=u(`<aside class="directory svelte-ftwms1" aria-label="Asset folders"><header class="svelte-ftwms1"><strong class="svelte-ftwms1">Folders</strong> <div class="actions svelte-ftwms1"><button class="icon-button svelte-ftwms1">+</button> <button class="icon-button svelte-ftwms1">✎</button> <button class="icon-button danger svelte-ftwms1">×</button></div></header> <div class="tree svelte-ftwms1"><button><span class="glyph svelte-ftwms1">▦</span><span class="label svelte-ftwms1">All Assets</span><span class="count svelte-ftwms1"> </span></button> <button><span class="glyph svelte-ftwms1">⌂</span><span class="label svelte-ftwms1">Root</span><span class="count svelte-ftwms1"> </span></button> <!> <!></div></aside> <!> <!>`,1);function Be(s,u){S(u,!0);let m=T(u,`activeAsset`,3,null),y=T(u,`sharedDraggedFolder`,3,null),x=_(null),D=_(null),O=g(()=>y()??d(D)),I=g(()=>L.state?.library.folders??[]),R=g(()=>L.state?.assets??[]),te=g(()=>[...d(I)].sort((e,t)=>e.localeCompare(t)));function ne(e){return d(R).filter(t=>t.folder===e).length}function z(e,t){let n=e.dataTransfer?.types.includes(`application/x-fundus-assets`)??!1,r=ke(e.dataTransfer?.types.includes(`application/x-fundus-folder`)??!1,d(O),t);!n&&!r||(e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect=`move`),a(x,t,!0))}function B(e,t){e.preventDefault(),a(x,null);let n=e.dataTransfer?.getData(`application/x-fundus-assets`);if(n){try{let e=JSON.parse(n);Array.isArray(e)&&e.every(e=>typeof e==`string`)&&u.onMoveAssets(e,t)}catch{}return}let r=e.dataTransfer?.getData(`application/x-fundus-folder`)||d(O);r&&Oe(r,t)&&U(r,t)}function V(e,t){m()||u.selectedFolder!==null&&G(u.selectedFolder,e)&&u.onSelect(`${t}${u.selectedFolder.slice(e.length)}`)}async function U(e,t){let n=oe(t,ae(e));try{await L.mutate(()=>P(e,t)),V(e,n)}catch{}finally{a(D,null),u.onFolderDragEnd?.()}}let K=_(null),se=_(``),q=_(null),J=_(null),Y=_(``),ce=_(void 0),X=_(!1),Z=_(null),le=g(()=>u.selectedFolder!==null&&u.selectedFolder!==``?u.selectedFolder:null),ue=g(()=>d(Y)===``?null:H(d(Y))),de=g(()=>oe(d(K)===`rename`?ie(d(q)??``):d(se),d(Y).normalize(`NFC`))),fe=g(()=>d(Y)!==``&&d(I).some(e=>e!==(d(K)===`rename`?d(q):null)&&W(e)===W(d(de)))),pe=g(()=>d(Y)!==``&&!d(ue)&&!d(fe)&&!d(X));function me(e=u.selectedFolder??``){a(se,e,!0),a(Y,``),a(Z,null),a(K,`create`),i().then(()=>d(ce)?.focus())}let he=0;t(()=>{u.createRequest!==null&&u.createRequest.id!==he&&(he=u.createRequest.id,me(u.createRequest.parent))});function ge(e,t,n=null){e.preventDefault(),e.stopPropagation(),u.onContextMenu(e.clientX,e.clientY,t,n)}function _e(e){e!==null&&(a(q,e,!0),a(Y,ae(e),!0),a(Z,null),a(K,`rename`),i().then(()=>d(ce)?.focus()))}let ve=0;t(()=>{u.renameRequest!==null&&u.renameRequest.id!==ve&&(ve=u.renameRequest.id,_e(u.renameRequest.path))});function ye(e){e!==null&&(a(J,e,!0),a(Z,null),a(K,`delete`))}let Q=0;t(()=>{u.deleteRequest!==null&&u.deleteRequest.id!==Q&&(Q=u.deleteRequest.id,ye(u.deleteRequest.path))});function be(){d(X)||(a(K,null),a(Z,null))}async function xe(){if(d(pe)){a(X,!0),a(Z,null);try{if(d(K)===`create`){let e=d(de);await L.mutate(()=>ee(e)),m()||u.onSelect(e)}else if(d(K)===`rename`&&d(q)!==null){let e=d(q),t=d(de);await L.mutate(()=>N(e,d(Y))),V(e,t)}a(K,null)}catch(e){a(Z,e instanceof Error?e.message:String(e),!0)}finally{a(X,!1)}}}let Se=g(()=>d(J)===null?[]:d(I).filter(e=>G(e,d(J)??``))),Ce=g(()=>d(J)===null?[]:d(R).filter(e=>G(e.folder,d(J)??``))),we=g(()=>new Set(d(Ce).map(e=>e.id))),Te=g(()=>d(Ce).flatMap(e=>e.references.incoming.filter(e=>!d(we).has(e.assetId)).map(t=>`${t.assetId}.${t.field} → ${e.id}`)));async function Ee(){if(d(J)===null)return;let e=d(J),t=ie(e),n=m()!==null&&G(m().folder,e);a(X,!0),a(Z,null);try{await L.mutate(()=>F(e)),n?u.onActiveAssetDeleted?.(t):!m()&&u.selectedFolder!==null&&G(u.selectedFolder,e)&&u.onSelect(t),a(K,null)}catch(e){a(Z,e instanceof Error?e.message:String(e),!0)}finally{a(X,!1)}}function De(e){m()&&(e.dataTransfer?.setData(`application/x-fundus-assets`,JSON.stringify([m().id])),e.dataTransfer&&(e.dataTransfer.effectAllowed=`move`))}var Ae=ze(),Be=r(Ae),Ve=h(Be),He=o(h(Ve),2),Ue=h(He),We=o(Ue,2),Ge=o(We,2);E(He),E(Ve);var Ke=o(Ve,2),qe=h(Ke);let Je;var Ye=o(h(qe),2),Xe=h(Ye,!0);E(Ye),E(qe);var $=o(qe,2);let Ze;var Qe=o(h($),2),$e=h(Qe,!0);E(Qe),E($);var et=o($,2),tt=e=>{var t=Ne();w(t,``,{},{"--depth":0});var r=h(t),i=o(h(r),2),a=h(i,!0);E(i);var s=o(i,2),c=e=>{var t=Me();M(e=>k(t,`title`,e),[()=>m().warnings.join(`
2
- `)]),n(e,t)};j(s,e=>{m().warnings.length>0&&e(c)}),E(r),E(t),M(()=>{k(r,`title`,m().id),p(a,m().id)}),l(`dragstart`,r,De),n(e,t)};j(et,e=>{m()?.folder===``&&e(tt)}),f(o(et,2),16,()=>d(te),e=>e,(e,t)=>{let i=g(()=>t.split(`/`).length-1);var s=Pe(),f=r(s);let _;var v=h(f);let y;var b=h(v);je(h(b),{}),E(b);var S=o(b),T=h(S,!0);E(S);var O=o(S),A=h(O,!0);E(O),E(v),E(f);var N=o(f,2),P=e=>{var t=Ne();let r;var a=h(t),s=o(h(a),2),c=h(s,!0);E(s);var u=o(s,2),f=e=>{var t=Me();M(e=>k(t,`title`,e),[()=>m().warnings.join(`
3
- `)]),n(e,t)};j(u,e=>{m().warnings.length>0&&e(f)}),E(a),E(t),M(()=>{r=w(t,``,r,{"--depth":d(i)+1}),k(a,`title`,m().id),p(c,m().id)}),l(`dragstart`,a,De),n(e,t)};j(N,e=>{m()?.folder===t&&e(P)}),M((e,n)=>{_=w(f,``,_,{"--depth":d(i)}),y=C(v,1,`row folder svelte-ftwms1`,null,y,{selected:!m()&&u.selectedFolder===t,"drop-target":d(x)===t}),k(S,`title`,t),p(T,e),p(A,n)},[()=>ae(t),()=>ne(t)]),c(`click`,v,()=>u.onSelect(t)),c(`contextmenu`,v,e=>ge(e,t,t)),l(`dragstart`,v,e=>{a(D,t,!0),u.onFolderDragStart?.(t),e.dataTransfer?.setData(`application/x-fundus-folder`,t),e.dataTransfer&&(e.dataTransfer.effectAllowed=`move`)}),l(`dragend`,v,()=>{a(D,null),u.onFolderDragEnd?.(),a(x,null)}),l(`dragover`,v,e=>z(e,t)),l(`dragleave`,v,()=>a(x,null)),l(`drop`,v,e=>B(e,t)),n(e,s)}),E(Ke),E(Be);var nt=o(Be,2),rt=e=>{{let t=g(()=>d(K)===`create`?`Create folder`:`Rename folder`),i=g(()=>d(X)?`Saving…`:d(K)===`create`?`Create`:`Rename`),s=g(()=>!d(pe));re(e,{get title(){return d(t)},get confirmLabel(){return d(i)},get confirmDisabled(){return d(s)},get busy(){return d(X)},onConfirm:()=>void xe(),onCancel:be,children:(e,t)=>{var i=Le(),s=r(i),l=o(h(s),2);b(l),v(l,e=>a(ce,e),()=>d(ce)),E(s);var u=o(s,2),f=h(u,!0);E(u);var m=o(u,2),g=e=>{var t=Fe(),r=h(t,!0);E(t),M(()=>p(r,d(ue))),n(e,t)};j(m,e=>{d(ue)&&e(g)});var _=o(m,2),y=e=>{n(e,Ie())};j(_,e=>{d(fe)&&e(y)});var x=o(_,2),S=e=>{var t=Fe(),r=h(t,!0);E(t),M(()=>p(r,d(Z))),n(e,t)};j(x,e=>{d(Z)&&e(S)}),M(()=>{l.disabled=d(X),p(f,d(de)||`Root`)}),c(`keydown`,l,e=>e.key===`Enter`&&void xe()),A(l,()=>d(Y),e=>a(Y,e)),n(e,i)},$$slots:{default:!0}})}};j(nt,e=>{(d(K)===`create`||d(K)===`rename`)&&e(rt)});var it=o(nt,2),at=e=>{{let t=g(()=>d(X)?`Deleting…`:`Delete recursively`);re(e,{title:`Delete folder`,get confirmLabel(){return d(t)},danger:!0,get busy(){return d(X)},onConfirm:()=>void Ee(),onCancel:be,children:(e,t)=>{var i=Re(),a=r(i),s=o(h(a)),c=h(s,!0);E(s);var l=o(s);E(a);var u=o(a,2),f=e=>{var t=Fe(),r=h(t);E(t),M(e=>p(r,`This leaves ${d(Te).length??``} external reference(s) dangling:
4
- ${e??``}`),[()=>d(Te).join(`, `)]),n(e,t)};j(u,e=>{d(Te).length>0&&e(f)});var m=o(u,2),g=e=>{var t=Fe(),r=h(t,!0);E(t),M(()=>p(r,d(Z))),n(e,t)};j(m,e=>{d(Z)&&e(g)}),M(()=>{p(c,d(J)),p(l,`, ${d(Se).length-1} descendant folder(s),
5
- and ${d(Ce).length??``} asset(s)? Raw and proxy files are removed.`)}),n(e,i)},$$slots:{default:!0}})}};j(it,e=>{d(K)===`delete`&&d(J)!==null&&e(at)}),M(e=>{k(Ue,`title`,m()?`Create folder beside the current asset`:`Create child folder`),k(We,`title`,m()?`Rename the current asset folder`:`Rename selected folder`),We.disabled=d(le)===null,k(Ge,`title`,m()?`Delete the current asset folder`:`Delete selected folder`),Ge.disabled=d(le)===null,Je=C(qe,1,`row special svelte-ftwms1`,null,Je,{selected:!m()&&u.selectedFolder===null}),p(Xe,d(R).length),Ze=C($,1,`row special svelte-ftwms1`,null,Ze,{selected:!m()&&u.selectedFolder===``,"drop-target":d(x)===``}),p($e,e)},[()=>ne(``)]),c(`contextmenu`,Be,e=>ge(e,``)),c(`click`,Ue,()=>me()),c(`click`,We,()=>_e(d(le))),c(`click`,Ge,()=>ye(d(le))),c(`click`,qe,()=>u.onSelect(null)),c(`click`,$,()=>u.onSelect(``)),l(`dragover`,$,e=>z(e,``)),l(`dragleave`,$,()=>a(x,null)),l(`drop`,$,e=>B(e,``)),n(s,Ae),e()}D([`contextmenu`,`click`,`keydown`]);var Ve=u(`<button role="menuitem" class="svelte-10jgqdh">Rename</button>`),He=u(`<button class="danger svelte-10jgqdh" role="menuitem">Delete Directory</button>`),Ue=u(`<div class="context-menu svelte-10jgqdh" role="menu" aria-label="Library actions" tabindex="-1"><button role="menuitem" class="svelte-10jgqdh">New Directory</button> <!> <button role="menuitem" class="svelte-10jgqdh">Import File</button> <!></div>`);function We(t,r){S(r,!0);let i=g(()=>Math.max(8,Math.min(r.x,window.innerWidth-176))),a=g(()=>2+ +!!r.onRenameDirectory+ +!!r.onDeleteDirectory),s=g(()=>Math.max(8,Math.min(r.y,window.innerHeight-(d(a)*32+8))));function u(e){e(),r.onClose()}var f=Ue();l(`click`,m,function(...e){r.onClose?.apply(this,e)}),l(`blur`,m,function(...e){r.onClose?.apply(this,e)}),l(`keydown`,m,e=>e.key===`Escape`&&r.onClose()),l(`resize`,m,function(...e){r.onClose?.apply(this,e)}),l(`scroll`,m,function(...e){r.onClose?.apply(this,e)});let p;var _=h(f),v=o(_,2),y=e=>{var t=Ve();c(`click`,t,()=>u(r.onRenameDirectory)),n(e,t)};j(v,e=>{r.onRenameDirectory&&e(y)});var b=o(v,2),x=o(b,2),C=e=>{var t=He();c(`click`,t,()=>u(r.onDeleteDirectory)),n(e,t)};j(x,e=>{r.onDeleteDirectory&&e(C)}),E(f),M(()=>p=w(f,``,p,{left:`${d(i)}px`,top:`${d(s)}px`})),c(`contextmenu`,f,e=>e.preventDefault()),c(`click`,_,()=>u(r.onNewDirectory)),c(`click`,b,()=>u(r.onImportFile)),n(t,f),e()}D([`contextmenu`,`click`]);export{Oe as a,_e as c,G as d,oe as f,ke as i,X as l,Be as n,De as o,ie as p,je as r,Te as s,We as t,ae as u};
@@ -1 +0,0 @@
1
- function e(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} kB`:`${(e/(1024*1024)).toFixed(2)} MB`}function t(e){return`${(e/1e3).toFixed(2)} s`}function n(e,t){let{maxWidth:n,...r}=e;return t===null||!Number.isFinite(t)||t<=0?r:{...r,maxWidth:Math.round(t)}}export{t as n,n as r,e as t};
@@ -1 +0,0 @@
1
- import{n as e,s as t}from"../chunks/CvY6YsFE.js";export{t as load_css,e as start};
@@ -1,3 +0,0 @@
1
- v��۪Z��d�_\�s�n�/�#}��Ʀ5)�ũ-++ۙ�����c���[7����4�R���b���7$�u�T�V�
2
- j�ݮ���|�P��w����g�I���� �
3
- m1ei����M���-��������o�M��X$����b��"b�G���dA�&!���~OTbx'>� �$ h���$&k��x5.��6��洅�3L���9���1R�24�N+���;eqw
@@ -1,3 +0,0 @@
1
- import{$ as e,A as t,B as n,D as r,E as i,G as a,I as o,J as s,K as c,M as l,N as u,O as d,P as f,S as p,T as m,U as h,W as g,X as _,Y as v,a as y,c as b,et as x,f as S,g as ee,h as C,i as te,it as w,j as T,l as E,o as ne,q as re,rt as ie,s as ae,u as oe,w as D,z as O}from"../chunks/CNRz3sSw.js";import{c as se,t as ce}from"../chunks/CvY6YsFE.js";import"../chunks/xihTtKlq.js";import{a as le,c as ue,l as de,t as k,u as fe}from"../chunks/CO4RBJfa.js";import{a as pe,d as me,f as he,i as ge,l as _e,n as ve,o as ye,p as be,r as xe,s as Se,t as Ce,u as we}from"../chunks/DL0_39Ys.js";import{m as Te,n as Ee,t as De}from"../chunks/BiIto6ft.js";function A(e){return Array.isArray?Array.isArray(e):je(e)===`[object Array]`}function Oe(e){if(typeof e==`string`)return e;if(typeof e==`bigint`)return e.toString();let t=e+``;return t==`0`&&1/e==-1/0?`-0`:t}function ke(e){return e==null?``:Oe(e)}function j(e){return typeof e==`string`}function M(e){return typeof e==`number`}function N(e){return e===!0||e===!1||Ae(e)&&je(e)==`[object Boolean]`}function P(e){return typeof e==`object`}function Ae(e){return P(e)&&e!==null}function F(e){return e!=null}function I(e){return!e.trim().length}function je(e){return e==null?e===void 0?`[object Undefined]`:`[object Null]`:Object.prototype.toString.call(e)}var L=`Incorrect 'index' type`,R=`Invalid doc index: must be a non-negative integer within the bounds of the docs array`,z=e=>`Invalid value for key ${e}`,B=e=>`Pattern length exceeds max of ${e}.`,Me=e=>`Missing ${e} property in key`,V=e=>`Property 'weight' in key '${e}' must be a positive integer`,H=`Fuse.match does not support useTokenSearch: token search requires corpus-level statistics (df, fieldCount) that a one-off string comparison does not have. Use new Fuse(...).search(...) instead.`,U=Object.prototype.hasOwnProperty,W=class{constructor(e){this._keys=[],this._keyMap={};let t=0;e.forEach(e=>{let n=G(e);this._keys.push(n),this._keyMap[n.id]=n,t+=n.weight}),this._keys.forEach(e=>{e.weight/=t})}get(e){return this._keyMap[e]}keys(){return this._keys}toJSON(){return JSON.stringify(this._keys)}};function G(e){let t=null,n=null,r=null,i=1,a=null;if(j(e)||A(e))r=e,t=Ne(e),n=Pe(e);else{if(!U.call(e,`name`))throw Error(Me(`name`));let o=e.name;if(r=o,U.call(e,`weight`)&&e.weight!==void 0&&(i=e.weight,i<=0))throw Error(V(Pe(o)));t=Ne(o),n=Pe(o),a=e.getFn??null}return{path:t,id:n,weight:i,src:r,getFn:a}}function Ne(e){return A(e)?e:e.split(`.`)}function Pe(e){return A(e)?e.join(`.`):e}function Fe(e,t){let n=[],r=!1,i=(e,t,a,o)=>{if(F(e))if(!t[a])n.push(o===void 0?e:{v:e,i:o});else{let s=e[t[a]];if(!F(s))return;if(a===t.length-1&&(j(s)||M(s)||N(s)||typeof s==`bigint`))n.push(o===void 0?ke(s):{v:ke(s),i:o});else if(A(s)){r=!0;for(let e=0,n=s.length;e<n;e+=1)i(s[e],t,a+1,e)}else t.length&&i(s,t,a+1,o)}};return i(e,j(t)?t.split(`.`):t,0),r?n:n[0]}var Ie={includeMatches:!1,findAllMatches:!1,minMatchCharLength:1},Le={isCaseSensitive:!1,ignoreDiacritics:!1,includeScore:!1,keys:[],shouldSort:!0,sortFn:(e,t)=>e.score===t.score?e.idx<t.idx?-1:1:e.score<t.score?-1:1},Re={location:0,threshold:.6,distance:100},K={useExtendedSearch:!1,useTokenSearch:!1,tokenize:void 0,tokenMatch:`any`,getFn:Fe,ignoreLocation:!1,ignoreFieldNorm:!1,fieldNormWeight:1},q=Object.freeze({...Le,...Ie,...Re,...K});function ze(e=1,t=3){let n=new Map,r=10**t;return{get(t){let i=1,a=!1;for(let e=0;e<t.length;e++)t.charCodeAt(e)===32?a||=(i++,!0):a=!1;if(n.has(i))return n.get(i);let o=Math.round(r/i**(.5*e))/r;return n.set(i,o),o},clear(){n.clear()}}}var J=class{constructor({getFn:e=q.getFn,fieldNormWeight:t=q.fieldNormWeight}={}){this.norm=ze(t,3),this.getFn=e,this.isCreated=!1,this.docs=[],this.keys=[],this._keysMap={},this.setIndexRecords()}setSources(e=[]){this.docs=e}setIndexRecords(e=[]){this.records=e}setKeys(e=[]){this.keys=e,this._keysMap={},e.forEach((e,t)=>{this._keysMap[e.id]=t})}create(){if(this.isCreated||!this.docs.length)return;this.isCreated=!0;let e=this.docs.length;this.records=Array(e);let t=0;if(j(this.docs[0]))for(let n=0;n<e;n++){let e=this._createStringRecord(this.docs[n],n);e&&(this.records[t++]=e)}else for(let n=0;n<e;n++)this.records[t++]=this._createObjectRecord(this.docs[n],n);this.records.length=t,this.norm.clear()}add(e,t){if(!Number.isInteger(t)||t<0)throw Error(R);if(j(e)){let n=this._createStringRecord(e,t);return n&&this.records.push(n),n}let n=this._createObjectRecord(e,t);return this.records.push(n),n}removeAt(e){if(!Number.isInteger(e)||e<0)throw Error(R);for(let t=0,n=this.records.length;t<n;t+=1)if(this.records[t].i===e){this.records.splice(t,1);break}for(let t=0,n=this.records.length;t<n;t+=1)this.records[t].i>e&&--this.records[t].i}removeAll(e){let t=new Set;for(let n of e)Number.isInteger(n)&&n>=0&&t.add(n);if(t.size===0)return;this.records=this.records.filter(e=>!t.has(e.i));let n=Array.from(t).sort((e,t)=>e-t);for(let e of this.records){let t=0,r=n.length;for(;t<r;){let i=t+r>>>1;n[i]<e.i?t=i+1:r=i}e.i-=t}}getValueForItemAtKeyId(e,t){return e[this._keysMap[t]]}size(){return this.records.length}_createStringRecord(e,t){return!F(e)||I(e)?null:{v:e,i:t,n:this.norm.get(e)}}_createObjectRecord(e,t){let n={i:t,$:{}};for(let t=0,r=this.keys.length;t<r;t++){let r=this.keys[t],i=r.getFn?r.getFn(e):this.getFn(e,r.path);if(F(i)){if(A(i)){let e=[];for(let t=0,n=i.length;t<n;t+=1){let n=i[t];if(F(n)){if(j(n)){if(!I(n)){let r={v:n,i:t,n:this.norm.get(n)};e.push(r)}}else if(F(n.v)){let t=j(n.v)?n.v:ke(n.v);if(!I(t)){let r={v:t,i:n.i,n:this.norm.get(t)};e.push(r)}}}}n.$[t]=e}else if(j(i)&&!I(i)){let e={v:i,n:this.norm.get(i)};n.$[t]=e}}}return n}toJSON(){return{keys:this.keys.map(({getFn:e,...t})=>t),records:this.records}}};function Be(e,t,{getFn:n=q.getFn,fieldNormWeight:r=q.fieldNormWeight}={}){let i=new J({getFn:n,fieldNormWeight:r});return i.setKeys(e.map(G)),i.setSources(t),i.create(),i}function Ve(e,{getFn:t=q.getFn,fieldNormWeight:n=q.fieldNormWeight}={}){let{keys:r,records:i}=e,a=new J({getFn:t,fieldNormWeight:n});return a.setKeys(r),a.setIndexRecords(i),a}function Y(e=[],t=q.minMatchCharLength){let n=[],r=-1,i=-1,a=0;for(let o=e.length;a<o;a+=1){let o=e[a];o&&r===-1?r=a:!o&&r!==-1&&(i=a-1,i-r+1>=t&&n.push([r,i]),r=-1)}return e[a-1]&&a-r>=t&&n.push([r,a-1]),n}function He(e,t,n,{location:r=q.location,distance:i=q.distance,threshold:a=q.threshold,findAllMatches:o=q.findAllMatches,minMatchCharLength:s=q.minMatchCharLength,includeMatches:c=q.includeMatches,ignoreLocation:l=q.ignoreLocation}={}){if(t.length>32)throw Error(B(32));let u=t.length,d=e.length,f=Math.max(0,Math.min(r,d)),p=a,m=f,h=(e,t)=>{let n=e/u;if(l)return n;let r=Math.abs(f-t);return i?n+r/i:r?1:n},g=s>1||c,_=g?Array(d):[],v;for(;(v=e.indexOf(t,m))>-1;){let e=h(0,v);if(p=Math.min(e,p),m=v+u,g){let e=0;for(;e<u;)_[v+e]=1,e+=1}}m=-1;let y=[],b=1,x=0,S=u+d,ee=1<<u-1;for(let t=0;t<u;t+=1){let r=0,i=S;for(;r<i;)h(t,f+i)<=p?r=i:S=i,i=Math.floor((S-r)/2+r);S=i;let a=Math.max(1,f-i+1),s=o?d:Math.min(f+i,d)+u,c=Array(s+2);c[s+1]=(1<<t)-1;for(let r=s;r>=a;--r){let i=r-1,o=n[e[i]];if(c[r]=(c[r+1]<<1|1)&o,t&&(c[r]|=(y[r+1]|y[r])<<1|1|y[r+1]),c[r]&ee&&(b=h(t,i),b<=p)){if(p=b,m=i,x=t,m<=f)break;a=Math.max(1,2*f-m)}}if(h(t+1,f)>p)break;y=c}if(g&&m>=0){let t=Math.min(d-1,m+u-1+x);for(let r=m;r<=t;r+=1)n[e[r]]&&(_[r]=1)}let C={isMatch:m>=0,score:Math.max(.001,b)};if(g){let e=Y(_,s);e.length?c&&(C.indices=e):C.isMatch=!1}return C}function Ue(e){let t={};for(let n=0,r=e.length;n<r;n+=1){let i=e.charAt(n);t[i]=(t[i]||0)|1<<r-n-1}return t}function We(e){if(e.length<=1)return e;e.sort((e,t)=>e[0]-t[0]||e[1]-t[1]);let t=[e[0]];for(let n=1,r=e.length;n<r;n+=1){let r=t[t.length-1],i=e[n];i[0]<=r[1]+1?r[1]=Math.max(r[1],i[1]):t.push(i)}return t}var Ge={ł:`l`,Ł:`L`,đ:`d`,Đ:`D`,ø:`o`,Ø:`O`,ħ:`h`,Ħ:`H`,ŧ:`t`,Ŧ:`T`,ı:`i`,ß:`ss`},Ke=RegExp(`[`+Object.keys(Ge).join(``)+`]`,`g`),X=typeof String.prototype.normalize==`function`?e=>e.normalize(`NFD`).replace(/[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09FE\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C04\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F]/g,``).replace(Ke,e=>Ge[e]):e=>e,qe=class{constructor(e,{location:t=q.location,threshold:n=q.threshold,distance:r=q.distance,includeMatches:i=q.includeMatches,findAllMatches:a=q.findAllMatches,minMatchCharLength:o=q.minMatchCharLength,isCaseSensitive:s=q.isCaseSensitive,ignoreDiacritics:c=q.ignoreDiacritics,ignoreLocation:l=q.ignoreLocation}={}){if(this.options={location:t,threshold:n,distance:r,includeMatches:i,findAllMatches:a,minMatchCharLength:o,isCaseSensitive:s,ignoreDiacritics:c,ignoreLocation:l},e=s?e:e.toLowerCase(),e=c?X(e):e,this.pattern=e,this.chunks=[],!this.pattern.length)return;let u=(e,t)=>{this.chunks.push({pattern:e,alphabet:Ue(e),startIndex:t})},d=this.pattern.length;if(d>32){let e=0,t=d%32,n=d-t;for(;e<n;)u(this.pattern.substr(e,32),e),e+=32;if(t){let e=d-32;u(this.pattern.substr(e),e)}}else u(this.pattern,0)}searchIn(e){let{isCaseSensitive:t,ignoreDiacritics:n,includeMatches:r}=this.options;if(e=t?e:e.toLowerCase(),e=n?X(e):e,this.pattern===e){let t={isMatch:!0,score:0};return r&&(t.indices=[[0,e.length-1]]),t}let{location:i,distance:a,threshold:o,findAllMatches:s,minMatchCharLength:c,ignoreLocation:l}=this.options,u=[],d=0,f=!1;this.chunks.forEach(({pattern:t,alphabet:n,startIndex:p})=>{let{isMatch:m,score:h,indices:g}=He(e,t,n,{location:i+p,distance:a,threshold:o,findAllMatches:s,minMatchCharLength:c,includeMatches:r,ignoreLocation:l});m&&(f=!0),d+=h,m&&g&&u.push(...g)});let p={isMatch:f,score:f?d/this.chunks.length:1};return f&&r&&(p.indices=We(u)),p}},Je=new Set([`fuzzy`,`include`]);function Ye(e){return e.startsWith(`inverse`)}var Z=[{type:`exact`,multiRegex:/^="(.*)"$/,singleRegex:/^=(.*)$/,create:e=>({type:`exact`,search(t){let n=t===e;return{isMatch:n,score:+!n,indices:[0,e.length-1]}}})},{type:`include`,multiRegex:/^'"(.*)"$/,singleRegex:/^'(.*)$/,create:e=>({type:`include`,search(t){let n=0,r,i=[],a=e.length;for(;(r=t.indexOf(e,n))>-1;)n=r+a,i.push([r,n-1]);let o=!!i.length;return{isMatch:o,score:+!o,indices:i}}})},{type:`prefix-exact`,multiRegex:/^\^"(.*)"$/,singleRegex:/^\^(.*)$/,create:e=>({type:`prefix-exact`,search(t){let n=t.startsWith(e);return{isMatch:n,score:+!n,indices:[0,e.length-1]}}})},{type:`inverse-prefix-exact`,multiRegex:/^!\^"(.*)"$/,singleRegex:/^!\^(.*)$/,create:e=>({type:`inverse-prefix-exact`,search(t){let n=!t.startsWith(e);return{isMatch:n,score:+!n,indices:[0,t.length-1]}}})},{type:`inverse-suffix-exact`,multiRegex:/^!"(.*)"\$$/,singleRegex:/^!(.*)\$$/,create:e=>({type:`inverse-suffix-exact`,search(t){let n=!t.endsWith(e);return{isMatch:n,score:+!n,indices:[0,t.length-1]}}})},{type:`suffix-exact`,multiRegex:/^"(.*)"\$$/,singleRegex:/^(.*)\$$/,create:e=>({type:`suffix-exact`,search(t){let n=t.endsWith(e);return{isMatch:n,score:+!n,indices:[t.length-e.length,t.length-1]}}})},{type:`inverse-exact`,multiRegex:/^!"(.*)"$/,singleRegex:/^!(.*)$/,create:e=>({type:`inverse-exact`,search(t){let n=t.indexOf(e)===-1;return{isMatch:n,score:+!n,indices:[0,t.length-1]}}})},{type:`fuzzy`,multiRegex:/^"(.*)"$/,singleRegex:/^(.*)$/,create:(e,t={})=>{let n=new qe(e,{location:t.location??q.location,threshold:t.threshold??q.threshold,distance:t.distance??q.distance,includeMatches:t.includeMatches??q.includeMatches,findAllMatches:t.findAllMatches??q.findAllMatches,minMatchCharLength:t.minMatchCharLength??q.minMatchCharLength,isCaseSensitive:t.isCaseSensitive??q.isCaseSensitive,ignoreDiacritics:t.ignoreDiacritics??q.ignoreDiacritics,ignoreLocation:t.ignoreLocation??q.ignoreLocation});return{type:`fuzzy`,search(e){return n.searchIn(e)}}}}],Xe=Z.length,Ze=`\0`,Qe=`|`;function $e(e){let t=[],n=e.length,r=0;for(;r<n;){for(;r<n&&e[r]===` `;)r++;if(r>=n)break;let i=r;for(;i<n&&e[i]!==` `&&e[i]!==`"`;)i++;if(i<n&&e[i]===`"`){for(i++;i<n;){if(e[i]===`"`){let t=i+1;if(t>=n||e[t]===` `){i++;break}if(e[t]===`$`&&(t+1>=n||e[t+1]===` `)){i+=2;break}}i++}t.push(e.substring(r,i)),r=i}else{for(;i<n&&e[i]!==` `;)i++;t.push(e.substring(r,i)),r=i}}return t}function et(e,t){let n=e.match(t);return n?n[1]:null}function tt(e,t={}){return e.replace(/\\\|/g,Ze).split(Qe).map(e=>{let n=$e(e.replace(/\u0000/g,`|`).trim()).filter(e=>e&&!!e.trim()),r=[];for(let e=0,i=n.length;e<i;e+=1){let i=n[e],a=!1,o=-1;for(;!a&&++o<Xe;){let e=Z[o],n=et(i,e.multiRegex);n&&(r.push(e.create(n,t)),a=!0)}if(!a)for(o=-1;++o<Xe;){let e=Z[o],n=et(i,e.singleRegex);if(n){r.push(e.create(n,t));break}}}return r})}var nt=class{constructor(e,{isCaseSensitive:t=q.isCaseSensitive,ignoreDiacritics:n=q.ignoreDiacritics,includeMatches:r=q.includeMatches,minMatchCharLength:i=q.minMatchCharLength,ignoreLocation:a=q.ignoreLocation,findAllMatches:o=q.findAllMatches,location:s=q.location,threshold:c=q.threshold,distance:l=q.distance}={}){this.query=null,this.options={isCaseSensitive:t,ignoreDiacritics:n,includeMatches:r,minMatchCharLength:i,findAllMatches:o,ignoreLocation:a,location:s,threshold:c,distance:l},e=t?e:e.toLowerCase(),e=n?X(e):e,this.pattern=e,this.query=tt(this.pattern,this.options)}static condition(e,t){return t.useExtendedSearch}searchIn(e){let t=this.query;if(!t)return{isMatch:!1,score:1};let{includeMatches:n,isCaseSensitive:r,ignoreDiacritics:i}=this.options;e=r?e:e.toLowerCase(),e=i?X(e):e;let a=0,o=[],s=0,c=!1;for(let r=0,i=t.length;r<i;r+=1){let i=t[r];o.length=0,a=0,c=!1;for(let t=0,r=i.length;t<r;t+=1){let r=i[t],{isMatch:l,indices:u,score:d}=r.search(e);if(l)a+=1,s+=d,Ye(r.type)&&(c=!0),n&&(Je.has(r.type)?o.push(...u):o.push(u));else{s=0,a=0,o.length=0,c=!1;break}}if(a){let e={isMatch:!0,score:s/a};return c&&(e.hasInverse=!0),n&&(e.indices=We(o)),e}}return{isMatch:!1,score:1}}},rt=[];function it(...e){rt.push(...e)}function at(e,t){for(let n=0,r=rt.length;n<r;n+=1){let r=rt[n];if(r.condition(e,t))return new r(e,t)}return new qe(e,t)}var Q={AND:`$and`,OR:`$or`},ot={PATH:`$path`,PATTERN:`$val`},st=e=>!!(e[Q.AND]||e[Q.OR]),ct=e=>!!e[ot.PATH],lt=e=>!A(e)&&P(e)&&!st(e),ut=e=>({[Q.AND]:Object.keys(e).map(t=>({[t]:e[t]}))});function dt(e,t,{auto:n=!0}={}){let r=e=>{if(j(e)){let r={keyId:null,pattern:e};return n&&(r.searcher=at(e,t)),r}let i=Object.keys(e),a=ct(e);if(!a&&i.length>1&&!st(e))return r(ut(e));if(lt(e)){let r=a?e[ot.PATH]:i[0],o=a?e[ot.PATTERN]:e[r];if(!j(o))throw Error(z(r));let s={keyId:Pe(r),pattern:o};return n&&(s.searcher=at(o,t)),s}let o={children:[],operator:i[0]};return i.forEach(t=>{let n=e[t];A(n)&&n.forEach(e=>{o.children.push(r(e))})}),o};return st(e)||(e=ut(e)),r(e)}function ft(e,{ignoreFieldNorm:t=q.ignoreFieldNorm}){let n=1;return e.forEach(({key:e,norm:r,score:i})=>{let a=e?e.weight:null;n*=(i===0&&a?2**-52:i)**+((a||1)*(t?1:r))}),n}function pt(e,{ignoreFieldNorm:t=q.ignoreFieldNorm}){e.forEach(e=>{e.score=ft(e.matches,{ignoreFieldNorm:t})})}var mt=class{constructor(e){this.limit=e,this.heap=[]}get size(){return this.heap.length}shouldInsert(e){return this.size<this.limit||e<this.heap[0].score}insert(e){this.size<this.limit?(this.heap.push(e),this._bubbleUp(this.size-1)):e.score<this.heap[0].score&&(this.heap[0]=e,this._sinkDown(0))}extractSorted(e){return this.heap.sort(e)}_bubbleUp(e){let t=this.heap;for(;e>0;){let n=e-1>>1;if(t[e].score<=t[n].score)break;let r=t[e];t[e]=t[n],t[n]=r,e=n}}_sinkDown(e){let t=this.heap,n=t.length,r=e;do{e=r;let i=2*e+1,a=2*e+2;if(i<n&&t[i].score>t[r].score&&(r=i),a<n&&t[a].score>t[r].score&&(r=a),r!==e){let n=t[e];t[e]=t[r],t[r]=n}}while(r!==e)}};function ht(e){let t=[];return e.matches.forEach(e=>{if(!F(e.indices)||!e.indices.length)return;let n={indices:e.indices,value:e.value};e.key&&(n.key=e.key.id),e.idx>-1&&(n.refIndex=e.idx),t.push(n)}),t}function gt(e,t,{includeMatches:n=q.includeMatches,includeScore:r=q.includeScore}={}){return e.map(e=>{let{idx:i}=e,a={item:t[i],refIndex:i};return n&&(a.matches=ht(e)),r&&(a.score=e.score),a})}var _t=/[\p{L}\p{M}\p{N}_]+/gu,vt=new WeakSet;function yt(e){vt.has(e)||(vt.add(e),console.warn(`[Fuse] tokenize regex ${e} lacks the global flag; only the first match per text will be returned. Add the 'g' flag.`))}function bt(e){if(typeof e==`function`){let t=!1;return n=>{let r=e(n);if(!t&&(t=!0,!Array.isArray(r)||r.some(e=>typeof e!=`string`)))throw Error(`[Fuse] tokenize function must return string[]; received ${Array.isArray(r)?`array containing non-strings`:typeof r}.`);return r}}return e instanceof RegExp?(e.global||yt(e),t=>t.match(e)||[]):e=>e.match(_t)||[]}function xt({isCaseSensitive:e=!1,ignoreDiacritics:t=!1,tokenize:n}={}){let r=bt(n);return{tokenize(n){return e||(n=n.toLowerCase()),t&&(n=X(n)),r(n)}}}var St=class{static condition(e,t){return t.useTokenSearch}constructor(e,t){this.options=t,this.analyzer=xt({isCaseSensitive:t.isCaseSensitive,ignoreDiacritics:t.ignoreDiacritics,tokenize:t.tokenize});let n=this.analyzer.tokenize(e),{df:r,fieldCount:i}=t._invertedIndex;this.termSearchers=[],this.idfWeights=[];for(let e of n){this.termSearchers.push(new qe(e,{location:t.location,threshold:t.threshold,distance:t.distance,includeMatches:t.includeMatches,findAllMatches:t.findAllMatches,minMatchCharLength:t.minMatchCharLength,isCaseSensitive:t.isCaseSensitive,ignoreDiacritics:t.ignoreDiacritics,ignoreLocation:!0}));let n=r.get(e)||0,a=Math.log(1+(i-n+.5)/(n+.5));this.idfWeights.push(a)}this.combineAll=t.tokenMatch===`all`,this.numTerms=this.termSearchers.length,this.useMask=this.numTerms<=31}searchIn(e){if(!this.termSearchers.length)return{isMatch:!1,score:1};let t=[],n=0,r=0,i=0,a=0,o=this.combineAll&&!this.useMask?new Set:null;for(let s=0;s<this.termSearchers.length;s++){let c=this.termSearchers[s].searchIn(e),l=this.idfWeights[s];r+=l,c.isMatch&&(i++,n+=l*(1-c.score),c.indices&&t.push(...c.indices),this.combineAll&&(this.useMask?a|=1<<s:o.add(s)))}if(i===0)return{isMatch:!1,score:1};let s=r>0?1-n/r:0,c={isMatch:!0,score:Math.max(.001,s)};return this.options.includeMatches&&t.length&&(c.indices=We(t)),this.combineAll&&(this.useMask?c.matchedMask=a:c.matchedTerms=o,c.termCount=this.numTerms),c}};function Ct(e,t,n,r){let i=r.tokenize(t);if(!i.length)return;e.fieldCount++,e.docFieldCount.set(n,(e.docFieldCount.get(n)||0)+1);let a=new Set(i),o=e.docTermFieldHits.get(n);o||(o=new Map,e.docTermFieldHits.set(n,o));for(let t of a)o.set(t,(o.get(t)||0)+1),e.df.set(t,(e.df.get(t)||0)+1)}function wt(e,t,n,r){let{i,v:a,$:o}=t;if(a!==void 0){Ct(e,a,i,r);return}if(o)for(let t=0;t<n;t++){let n=o[t];if(n)if(Array.isArray(n))for(let t of n)Ct(e,t.v,i,r);else Ct(e,n.v,i,r)}}function Tt(e,t,n){let r={fieldCount:0,df:new Map,docFieldCount:new Map,docTermFieldHits:new Map};for(let i of e)wt(r,i,t,n);return r}function Et(e,t,n,r){wt(e,t,n,r)}function Dt(e,t){let n=e.docFieldCount.get(t);if(n===void 0)return;e.fieldCount-=n,e.docFieldCount.delete(t);let r=e.docTermFieldHits.get(t);if(r){for(let[t,n]of r){let r=(e.df.get(t)||0)-n;r<=0?e.df.delete(t):e.df.set(t,r)}e.docTermFieldHits.delete(t)}}function Ot(e,t){if(t.length===0)return;let n=Array.from(new Set(t)).sort((e,t)=>e-t);for(let t of n)Dt(e,t);let r=e=>{let t=0,r=n.length;for(;t<r;){let i=t+r>>>1;n[i]<e?t=i+1:r=i}return e-t},i=n[0],a=new Map;for(let[t,n]of e.docFieldCount)a.set(t>i?r(t):t,n);e.docFieldCount=a;let o=new Map;for(let[t,n]of e.docTermFieldHits)o.set(t>i?r(t):t,n);e.docTermFieldHits=o}var $=class{constructor(e,t,n){this.options={...q,...t},this.options.useExtendedSearch,this.options.useTokenSearch,this._keyStore=new W(this.options.keys),this._docs=e,this._myIndex=null,this._invertedIndex=null,this.setCollection(e,n),this._lastQuery=null,this._lastSearcher=null}_getSearcher(e){if(this._lastQuery===e)return this._lastSearcher;let t=at(e,this._invertedIndex?{...this.options,_invertedIndex:this._invertedIndex}:this.options);return this._lastQuery=e,this._lastSearcher=t,t}setCollection(e,t){if(this._docs=e,t&&!(t instanceof J))throw Error(L);if(this._myIndex=t||Be(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight}),this.options.useTokenSearch){let e=xt({isCaseSensitive:this.options.isCaseSensitive,ignoreDiacritics:this.options.ignoreDiacritics,tokenize:this.options.tokenize});this._invertedIndex=Tt(this._myIndex.records,this._myIndex.keys.length,e)}this._invalidateSearcherCache()}add(e){if(!F(e))return;this._docs.push(e);let t=this._myIndex.add(e,this._docs.length-1);if(this._invertedIndex&&t){let e=xt({isCaseSensitive:this.options.isCaseSensitive,ignoreDiacritics:this.options.ignoreDiacritics,tokenize:this.options.tokenize});Et(this._invertedIndex,t,this._myIndex.keys.length,e)}this._invalidateSearcherCache()}remove(e=()=>!1){let t=[],n=[];for(let r=0,i=this._docs.length;r<i;r+=1)e(this._docs[r],r)&&(t.push(this._docs[r]),n.push(r));if(n.length){this._invertedIndex&&Ot(this._invertedIndex,n);let e=new Set(n);this._docs=this._docs.filter((t,n)=>!e.has(n)),this._myIndex.removeAll(n),this._invalidateSearcherCache()}return t}removeAt(e){if(!Number.isInteger(e)||e<0||e>=this._docs.length)throw Error(R);this._invertedIndex&&Ot(this._invertedIndex,[e]);let t=this._docs.splice(e,1)[0];return this._myIndex.removeAt(e),this._invalidateSearcherCache(),t}_invalidateSearcherCache(){this._lastQuery=null,this._lastSearcher=null}getIndex(){return this._myIndex}search(e,t){let{limit:n=-1}=t||{},{includeMatches:r,includeScore:i,shouldSort:a,sortFn:o,ignoreFieldNorm:s}=this.options;if(j(e)&&!e.trim()){let e=this._docs.map((e,t)=>({item:e,refIndex:t}));return M(n)&&n>-1&&(e=e.slice(0,n)),e}let c=M(n)&&n>0&&j(e),l;if(c){let t=new mt(n);j(this._docs[0])?this._searchStringList(e,{heap:t,ignoreFieldNorm:s}):this._searchObjectList(e,{heap:t,ignoreFieldNorm:s}),l=t.extractSorted(o)}else l=j(e)?j(this._docs[0])?this._searchStringList(e):this._searchObjectList(e):this._searchLogical(e),pt(l,{ignoreFieldNorm:s}),a&&l.sort(o),M(n)&&n>-1&&(l=l.slice(0,n));return gt(l,this._docs,{includeMatches:r,includeScore:i})}_searchStringList(e,{heap:t,ignoreFieldNorm:n}={}){let r=this._getSearcher(e),i=this.options.useTokenSearch&&this.options.tokenMatch===`all`,{records:a}=this._myIndex,o=t?null:[];return a.forEach(({v:e,i:a,n:s})=>{if(!F(e))return;let c=r.searchIn(e);if(c.isMatch){let r={score:c.score,value:e,norm:s,indices:c.indices};i&&(r.matchedMask=c.matchedMask,r.matchedTerms=c.matchedTerms,r.termCount=c.termCount);let l=[r];if(!i||this._coversAllTokens(l)){let r={item:e,idx:a,matches:l};t?(r.score=ft(r.matches,{ignoreFieldNorm:n}),t.shouldInsert(r.score)&&t.insert(r)):o.push(r)}}}),o}_searchLogical(e){let t=dt(e,this.options),n=(e,t,r)=>{if(!(`children`in e)){let{keyId:n,searcher:i}=e,a;return n===null?(a=[],this._myIndex.keys.forEach((e,n)=>{a.push(...this._findMatches({key:e,value:t[n],searcher:i}))})):a=this._findMatches({key:this._keyStore.get(n),value:this._myIndex.getValueForItemAtKeyId(t,n),searcher:i}),a&&a.length?[{idx:r,item:t,matches:a}]:[]}let{children:i,operator:a}=e,o=[];for(let e=0,s=i.length;e<s;e+=1){let s=i[e],c=n(s,t,r);if(c.length)o.push(...c);else if(a===Q.AND)return[]}return o},r=this._myIndex.records,i=new Map,a=[];return r.forEach(({$:e,i:r})=>{if(F(e)){let o=n(t,e,r);o.length&&(i.has(r)||(i.set(r,{idx:r,item:e,matches:[]}),a.push(i.get(r))),o.forEach(({matches:e})=>{i.get(r).matches.push(...e)}))}}),a}_searchObjectList(e,{heap:t,ignoreFieldNorm:n}={}){let r=this._getSearcher(e),i=this.options.useTokenSearch&&this.options.tokenMatch===`all`,{keys:a,records:o}=this._myIndex,s=t?null:[];return o.forEach(({$:e,i:o})=>{if(!F(e))return;let c=[],l=!1,u=!1;if(a.forEach((t,n)=>{let i=this._findMatches({key:t,value:e[n],searcher:r});i.length?(c.push(...i),i[0].hasInverse&&(u=!0)):l=!0}),!(u&&l)&&c.length&&(!i||this._coversAllTokens(c))){let r={idx:o,item:e,matches:c};t?(r.score=ft(r.matches,{ignoreFieldNorm:n}),t.shouldInsert(r.score)&&t.insert(r)):s.push(r)}}),s}_findMatches({key:e,value:t,searcher:n}){if(!F(t))return[];let r=[];if(A(t))t.forEach(({v:t,i,n:a})=>{if(!F(t))return;let o=n.searchIn(t);if(o.isMatch){let n={score:o.score,key:e,value:t,idx:i,norm:a,indices:o.indices,hasInverse:o.hasInverse};o.termCount!==void 0&&(n.matchedMask=o.matchedMask,n.matchedTerms=o.matchedTerms,n.termCount=o.termCount),r.push(n)}});else{let{v:i,n:a}=t,o=n.searchIn(i);if(o.isMatch){let t={score:o.score,key:e,value:i,norm:a,indices:o.indices,hasInverse:o.hasInverse};o.termCount!==void 0&&(t.matchedMask=o.matchedMask,t.matchedTerms=o.matchedTerms,t.termCount=o.termCount),r.push(t)}}return r}_coversAllTokens(e){let t=e.length?e[0].termCount:void 0;if(t===void 0)return!0;if(t<=31){let n=0;for(let t=0;t<e.length;t++)n|=e[t].matchedMask||0;return n===2**t-1}let n=new Set;for(let t=0;t<e.length;t++){let r=e[t].matchedTerms;if(r)for(let e of r)n.add(e)}return n.size===t}};$.version=`7.4.2`,$.createIndex=Be,$.parseIndex=Ve,$.config=q,$.match=function(e,t,n){if(n&&n.useTokenSearch)throw Error(H);return at(e,{...q,...n}).searchIn(t)},$.parseQuery=dt,it(nt),it(St),$.use=function(...e){e.forEach(e=>it(e))};var kt=$,At=d(`<button role="menuitem" class="svelte-109nkvw">Rename…</button>`),jt=d(`<div class="context-menu svelte-109nkvw" role="menu" aria-label="Asset actions" tabindex="-1"><!> <button class="danger svelte-109nkvw" role="menuitem"> </button></div>`);function Mt(t,n){x(n,!0);let r=_(()=>Math.max(8,Math.min(n.x,window.innerWidth-176))),a=_(()=>n.onRename?2:1),o=_(()=>Math.max(8,Math.min(n.y,window.innerHeight-(f(a)*32+8))));function s(e){e(),n.onClose()}var d=jt();u(`click`,h,function(...e){n.onClose?.apply(this,e)}),u(`blur`,h,function(...e){n.onClose?.apply(this,e)}),u(`keydown`,h,e=>e.key===`Escape`&&n.onClose()),u(`resize`,h,function(...e){n.onClose?.apply(this,e)}),u(`scroll`,h,function(...e){n.onClose?.apply(this,e)});let p;var v=g(d),y=e=>{var t=At();l(`click`,t,()=>s(n.onRename)),i(e,t)};D(v,e=>{n.onRename&&e(y)});var b=c(v,2),S=g(b,!0);w(b),w(d),O(()=>{p=C(d,``,p,{left:`${f(r)}px`,top:`${f(o)}px`}),m(S,n.assetCount===1?`Delete Asset`:`Delete ${n.assetCount} Assets`)}),l(`contextmenu`,d,e=>e.preventDefault()),l(`click`,b,()=>s(n.onDelete)),i(t,d),e()}T([`contextmenu`,`click`]);var Nt=d(`<span class="emoji svelte-1b4m5oj"> </span>`),Pt=d(`<span><!> <span class="name svelte-1b4m5oj"> </span></span>`);function Ft(t,n){x(n,!0);let r=te(n,`variant`,3,`chip`),a=te(n,`passive`,3,!1),o=te(n,`via`,19,()=>[]),s=_(()=>k.manifestAppearance(n.name)),l=_(()=>f(s).color??`var(--accent)`),u=_(()=>a()?`${n.name} — passive member${o().length>0?`, via ${o().join(`, `)}`:``}`:n.name);var d=Pt();let p;var h=g(d),v=e=>{var t=Nt(),n=g(t,!0);w(t),O(()=>m(n,f(s).emoji)),i(e,t)};D(h,e=>{f(s).emoji&&e(v)});var y=c(h,2),b=g(y,!0);w(y),w(d),O(()=>{p=ee(d,1,`manifest-label ${r()??``}`,`svelte-1b4m5oj`,p,{passive:a()}),C(d,`--manifest-color: ${f(l)??``}`),E(d,`title`,f(u)),m(b,n.name)}),i(t,d),e()}var It=d(`<span class="selection-summary svelte-1uha8ag"> </span> <button class="control">Select all shown</button> <button class="control">Clear</button>`,1),Lt=d(`<button class="control">Select All</button>`),Rt=d(`<option> </option>`),zt=d(`<div class="empty svelte-1uha8ag">Loading library…</div>`),Bt=d(`<div class="empty svelte-1uha8ag"> </div>`),Vt=d(`<button draggable="true"><span class="folder-card-icon svelte-1uha8ag"><!></span> <span class="folder-card-details svelte-1uha8ag"><strong class="svelte-1uha8ag"> </strong> <span class="svelte-1uha8ag"> </span></span> <span class="folder-card-arrow svelte-1uha8ag">›</span></button>`),Ht=d(`<section class="section folder-section svelte-1uha8ag"><!> <div class="folder-grid svelte-1uha8ag"></div></section>`),Ut=d(`<span class="section-emoji svelte-1uha8ag"> </span>`),Wt=d(`<!> `,1),Gt=d(`<video playsinline="" preload="metadata" class="svelte-1uha8ag"></video>`,2),Kt=d(`<img loading="lazy" class="svelte-1uha8ag"/>`),qt=d(`<span class="badge warning svelte-1uha8ag">⚠</span>`),Jt=d(`<a draggable="true"><input class="asset-select svelte-1uha8ag" type="checkbox"/> <div class="thumbnail checkerboard svelte-1uha8ag"><!></div> <div class="meta svelte-1uha8ag"><span class="id svelte-1uha8ag"> </span> <span class="type-badge svelte-1uha8ag"> </span></div> <div class="badges svelte-1uha8ag"><!> <!> <!></div></a>`),Yt=d(`<section class="section svelte-1uha8ag"><!> <div class="grid svelte-1uha8ag"></div></section>`),Xt=d(`<!> <!>`,1),Zt=d(`<div class="drop-hint svelte-1uha8ag"> </div>`),Qt=d(`<p class="dialog-warning svelte-1uha8ag"> </p>`),$t=d(`<p class="dialog-warning svelte-1uha8ag">An asset with this ID already exists.</p>`),en=d(`<label class="dialog-row svelte-1uha8ag"><span class="svelte-1uha8ag">ID</span> <input class="control svelte-1uha8ag" spellcheck="false"/></label> <!> <!> <!> <!>`,1),tn=d(`<p class="dialog-text svelte-1uha8ag"> </p> <!> <!>`,1),nn=d(`<div class="library-view svelte-1uha8ag"><!> <div role="application" aria-label="Asset library — drop a file anywhere to import it"><div class="selection-bar svelte-1uha8ag"><!> <button class="control import svelte-1uha8ag">Import file</button> <input type="file" hidden=""/></div> <div class="filter-bar svelte-1uha8ag"><select class="control" aria-label="Sort"><option>Sort alphabetically</option><option>Sort by type</option><option>Sort by manifest</option></select> <select class="control" aria-label="Filter by type"><option>All types</option><!></select> <select class="control" aria-label="Filter by manifest"><option>All manifests</option><!></select> <div class="control search svelte-1uha8ag"><svg class="search-icon svelte-1uha8ag" viewBox="0 0 16 16" aria-hidden="true"><circle cx="7" cy="7" r="4.5"></circle><path d="m10.5 10.5 3 3"></path></svg> <input class="search-input svelte-1uha8ag" type="search" placeholder="Search assets and folders…" aria-label="Search assets and folders" spellcheck="false"/> <kbd class="svelte-1uha8ag"> </kbd></div> <label class="toggle svelte-1uha8ag"><input type="checkbox"/> Warnings only</label></div> <!> <!></div></div> <!> <!> <!> <!> <!>`,1);function rn(d,C){x(C,!0);let te=`fundus.gallery.sort`,T=`fundus.gallery.folder`;function A(){try{let e=localStorage.getItem(te);if(e===`type`||e===`manifest`||e===`alphabetical`)return e}catch{}return`alphabetical`}let Oe=v(re(A()));function ke(){try{let e=localStorage.getItem(T);return e===null||e===`__all__`?null:e}catch{return null}}let j=v(re(ke())),M=v(`all`),N=v(`all`),P=v(``),Ae=v(!1),F=v(!1),I=v(null),je=v(``),L=v(null),R=v(null),z=v(null),B=v(``),Me=v(void 0),V=v(re([])),H=v(null),U=v(null),W=v(!1),G=v(null),Ne=v(null),Pe=0,Fe=v(null),Ie=0,Le=v(null),Re=0,K=v(re([])),q=v(null),ze=v(void 0),J=v(void 0),Be=Ee().join(`,`),Ve=/Mac|iPhone|iPad/.test(navigator.platform)?`⌘K`:`Ctrl K`;n(()=>{try{localStorage.setItem(te,f(Oe))}catch{}}),n(()=>{try{localStorage.setItem(T,f(j)??`__all__`)}catch{}});let Y=_(()=>k.state?.assets??[]),He=_(()=>f(z)!==null&&f(B)!==f(z)?Te(f(B)):null),Ue=_(()=>f(z)!==null&&f(Y).some(e=>e.id!==f(z)&&e.id===f(B))),We=_(()=>f(z)!==null&&f(B)!==f(z)&&f(He)===null&&!f(Ue)&&!f(W)),Ge=_(()=>f(z)===null?[]:(f(Y).find(e=>e.id===f(z))?.references.incoming??[]).map(e=>`${e.assetId}.${e.field} → ${f(z)}`)),Ke=_(()=>new Set(f(V))),X=_(()=>f(V).flatMap(e=>(f(Y).find(t=>t.id===e)?.references.incoming??[]).filter(e=>!f(Ke).has(e.assetId)).map(t=>`${t.assetId}.${t.field} → ${e}`))),qe=_(()=>k.state?.library.folders??[]),Je=_(()=>k.manifestNames),Ye=_(()=>[...new Set(f(Y).map(e=>e.type))].sort()),Z=_(()=>f(P).trim()),Xe=_(()=>new kt(f(Y),{keys:[{name:`id`,weight:.5},{name:`raw`,weight:.2},{name:`folder`,weight:.1},{name:`manifests`,weight:.08},{name:`passiveManifests.manifest`,weight:.07},{name:`type`,weight:.05}],threshold:.35,ignoreLocation:!0,ignoreDiacritics:!0})),Ze=_(()=>f(Z)===``?null:new Set(f(Xe).search(f(Z)).map(({item:e})=>e.id))),Qe=_(()=>f(qe).map(e=>({path:e,name:we(e)}))),$e=_(()=>new kt(f(Qe),{keys:[{name:`name`,weight:.7},{name:`path`,weight:.3}],threshold:.35,ignoreLocation:!0,ignoreDiacritics:!0})),et=_(()=>f(Z)===``?null:new Set(f($e).search(f(Z)).map(({item:e})=>e.path))),tt=_(()=>f(j)===null?[]:f(qe).filter(e=>be(e)===f(j)).sort((e,t)=>e.localeCompare(t))),nt=_(()=>f(et)===null?f(tt):f(tt).filter(e=>f(et).has(e)));n(()=>{k.state&&f(j)!==null&&f(j)!==``&&!f(qe).includes(f(j))&&s(j,null)});let rt=_(()=>f(Y).filter(e=>!(f(j)!==null&&e.folder!==f(j)||f(Ze)!==null&&!f(Ze).has(e.id)||f(M)!==`all`&&e.type!==f(M)||f(N)!==`all`&&!e.manifests.includes(f(N))&&!e.passiveManifests.some(e=>e.manifest===f(N))||f(Ae)&&e.warnings.length===0))),it=(e,t)=>e.id.localeCompare(t.id),at=_(()=>{let e=[...f(rt)].sort(it);if(f(Oe)===`alphabetical`)return[{key:`all`,heading:null,assets:e}];if(f(Oe)===`type`)return[...new Set(e.map(e=>e.type))].sort().map(t=>({key:t,heading:t,assets:e.filter(e=>e.type===t)}));let t=[];for(let n of f(Je)){let r=e.filter(e=>e.manifests.includes(n)||e.passiveManifests.some(e=>e.manifest===n));r.length>0&&t.push({key:n,heading:n,emoji:k.manifestAppearance(n).emoji,assets:r})}let n=e.filter(e=>e.manifests.length===0&&e.passiveManifests.length===0);return n.length>0&&t.push({key:`__no-manifest__`,heading:`No manifest`,assets:n}),t}),Q=_(()=>[...new Set(f(at).flatMap(e=>e.assets.map(e=>e.id)))]);n(()=>{let e=new Set(f(Y).map(e=>e.id)),t=f(K).filter(t=>e.has(t));t.length!==f(K).length&&s(K,t,!0)});function ot(e){s(j,e,!0),s(K,[],!0),s(q,null)}function st(e,t){if(t&&f(q)!==null){let t=f(Q).indexOf(f(q)),n=f(Q).indexOf(e);if(t!==-1&&n!==-1){let r=Math.min(t,n),i=Math.max(t,n);s(K,[...new Set([...f(K),...f(Q).slice(r,i+1)])],!0),s(q,e,!0);return}}s(K,f(K).includes(e)?f(K).filter(t=>t!==e):[...f(K),e],!0),s(q,e,!0)}function ct(){s(K,[...f(Q)],!0),s(q,f(Q).at(-1)??null,!0)}function lt(e,t){if(!e.dataTransfer||t.length<2)return;let n=[...document.querySelectorAll(`.card[data-asset-id]`)],r=t.map(e=>n.find(t=>t.dataset.assetId===e)).filter(e=>e!==void 0);if(r.length<2)return;let i=document.createElement(`div`),a=44/(r.length-1),o=Math.min(r[0].offsetWidth,180),s=r[0].offsetHeight;Object.assign(i.style,{position:`fixed`,left:`-10000px`,top:`-10000px`,width:`${o+44}px`,height:`${s+44}px`,pointerEvents:`none`});for(let[e,t]of r.entries()){let n=t.cloneNode(!0);n.querySelector(`.asset-select`)?.remove(),n.removeAttribute(`href`),n.setAttribute(`aria-hidden`,`true`),Object.assign(n.style,{position:`absolute`,left:`${e*a}px`,top:`${e*a}px`,width:`${o}px`,height:`${s}px`,boxSizing:`border-box`,opacity:`1`}),i.append(n)}let c=document.createElement(`span`);c.textContent=String(t.length),Object.assign(c.style,{position:`absolute`,right:`0`,top:`0`,minWidth:`28px`,height:`28px`,padding:`0 7px`,boxSizing:`border-box`,borderRadius:`14px`,background:`var(--accent)`,color:`var(--text)`,font:`600 13px/28px system-ui, sans-serif`,textAlign:`center`,boxShadow:`0 2px 8px rgba(0, 0, 0, 0.35)`}),i.append(c),document.body.append(i),e.dataTransfer.setDragImage(i,24,24),requestAnimationFrame(()=>i.remove())}function ut(e){e.preventDefault(),s(F,!1);let t=e.dataTransfer?.files?.[0];t&&(s(je,f(j)??``,!0),s(I,t,!0))}function dt(e){s(je,e,!0),f(ze)?.click()}function ft(e){Pe+=1,s(Ne,{id:Pe,parent:e},!0)}function pt(e){Ie+=1,s(Fe,{id:Ie,path:e},!0)}function mt(e){Re+=1,s(Le,{id:Re,path:e},!0)}function ht(e){e.preventDefault(),s(R,null),s(L,{x:e.clientX,y:e.clientY,parent:f(j)??``,renamePath:null},!0)}function gt(e,t){e.preventDefault(),e.stopPropagation(),s(R,null),s(L,{x:e.clientX,y:e.clientY,parent:t,renamePath:t},!0)}function _t(e,t){e.preventDefault(),e.stopPropagation(),s(L,null);let n=f(K).includes(t)?[...f(K)]:[t];f(K).includes(t)||(s(K,[t],!0),s(q,t,!0)),s(R,{x:e.clientX,y:e.clientY,assetIds:n},!0)}function vt(e){s(z,e,!0),s(B,e,!0),s(G,null),o().then(()=>{f(Me)?.focus(),f(Me)?.select()})}function yt(e){s(V,[...new Set(e)],!0),s(G,null)}function bt(){f(W)||(s(z,null),s(V,[],!0),s(G,null))}async function xt(){if(!f(We)||f(z)===null)return;let e=f(z),t=f(B);s(W,!0),s(G,null);try{await k.mutate(()=>fe(e,{renameTo:t})),s(K,f(K).map(n=>n===e?t:n),!0),s(q,f(q)===e?t:f(q),!0),s(z,null)}catch(e){s(G,e instanceof Error?e.message:String(e),!0)}finally{s(W,!1)}}async function St(){if(f(V).length===0)return;let e=[...f(V)];s(W,!0),s(G,null);try{await k.mutate(()=>le(e));let t=new Set(e);s(K,f(K).filter(e=>!t.has(e)),!0),f(q)!==null&&t.has(f(q))&&s(q,null),s(V,[],!0)}catch(e){s(G,e instanceof Error?e.message:String(e),!0)}finally{s(W,!1)}}function Ct(e){return f(Y).filter(t=>t.folder===e).length}function wt(e){let t=e.currentTarget,n=t.files?.[0];t.value=``,n&&s(I,n,!0)}async function Tt(e){s(I,null),await ce(se(`/asset/[id]`,{id:e}))}async function Et(e,t){let n=e.filter(e=>k.assetById(e)?.folder!==t);if(n.length!==0)try{await k.mutate(()=>ue(n,t)),s(K,[],!0),s(q,null)}catch{}}function Dt(e,t){let n=e.dataTransfer?.types.includes(`application/x-fundus-assets`)??!1,r=ge(e.dataTransfer?.types.includes(`application/x-fundus-folder`)??!1,f(H),t);!n&&!r||(e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect=`move`),s(U,t,!0))}function Ot(e,t){e.preventDefault(),s(U,null);let n=e.dataTransfer?.getData(`application/x-fundus-assets`);if(n){try{let e=JSON.parse(n);Array.isArray(e)&&e.every(e=>typeof e==`string`)&&Et(e,t)}catch{}return}let r=e.dataTransfer?.getData(`application/x-fundus-folder`);r&&pe(r,t)&&$(r,t)}async function $(e,t){let n=he(t,we(e));try{await k.mutate(()=>de(e,t)),f(j)!==null&&me(f(j),e)&&ot(`${n}${f(j).slice(e.length)}`)}catch{}finally{s(H,null),s(U,null)}}function At(e){e&&e.play().catch(()=>{})}function jt(e){e&&(e.pause(),e.currentTime=0)}function Nt(e){e.defaultPrevented||e.altKey||e.shiftKey||!e.metaKey&&!e.ctrlKey||e.key.toLowerCase()!==`k`||document.querySelector(`[role="dialog"]`)!==null||(e.preventDefault(),f(J)?.focus(),f(J)?.select())}var Pt=nn();u(`keydown`,h,Nt),u(`dragenter`,h,e=>{e.dataTransfer?.types.includes(`Files`)&&(e.preventDefault(),s(F,!0))}),u(`dragover`,h,e=>{e.dataTransfer?.types.includes(`Files`)&&(e.preventDefault(),s(F,!0))}),u(`drop`,h,ut);var rn=a(Pt),an=g(rn);ve(an,{get selectedFolder(){return f(j)},get createRequest(){return f(Ne)},get renameRequest(){return f(Fe)},get deleteRequest(){return f(Le)},onSelect:ot,onMoveAssets:(e,t)=>void Et(e,t),get sharedDraggedFolder(){return f(H)},onFolderDragStart:e=>s(H,e,!0),onFolderDragEnd:()=>s(H,null),onContextMenu:(e,t,n,r)=>{s(R,null),s(L,{x:e,y:t,parent:n,renamePath:r},!0)}});var on=c(an,2);let sn;var cn=g(on),ln=g(cn),un=e=>{var t=It(),n=a(t),r=g(n);w(n);var o=c(n,2),u=c(o,2);O(()=>m(r,`${f(K).length??``} selected`)),l(`click`,o,ct),l(`click`,u,()=>{s(K,[],!0),s(q,null)}),i(e,t)},dn=e=>{var t=Lt();O(()=>t.disabled=f(Q).length===0),l(`click`,t,ct),i(e,t)};D(ln,e=>{f(K).length>0?e(un):e(dn,-1)});var fn=c(ln,2),pn=c(fn,2);y(pn,e=>s(ze,e),()=>f(ze)),w(cn);var mn=c(cn,2),hn=g(mn),gn=g(hn);gn.value=gn.__value=`alphabetical`;var _n=c(gn);_n.value=_n.__value=`type`;var vn=c(_n);vn.value=vn.__value=`manifest`,w(hn);var yn=c(hn,2),bn=g(yn);bn.value=bn.__value=`all`,p(c(bn),16,()=>f(Ye),e=>e,(e,t)=>{var n=Rt(),r=g(n,!0);w(n);var a={};O(()=>{m(r,t),a!==(a=t)&&(n.value=(n.__value=t)??``)}),i(e,n)}),w(yn);var xn=c(yn,2),Sn=g(xn);Sn.value=Sn.__value=`all`,p(c(Sn),16,()=>f(Je),e=>e,(e,t)=>{let n=_(()=>k.manifestAppearance(t).emoji);var r=Rt(),a=g(r,!0);w(r);var o={};O(()=>{m(a,f(n)?`${f(n)} ${t}`:t),o!==(o=t)&&(r.value=(r.__value=t)??``)}),i(e,r)}),w(xn);var Cn=c(xn,2),wn=c(g(Cn),2);b(wn),y(wn,e=>s(J,e),()=>f(J));var Tn=c(wn,2),En=g(Tn,!0);w(Tn),w(Cn);var Dn=c(Cn,2),On=g(Dn);b(On),ie(),w(Dn),w(mn);var kn=c(mn,2),An=e=>{i(e,zt())},jn=e=>{var t=Bt(),n=g(t,!0);w(t),O(()=>m(n,f(Y).length===0?`No assets yet — drop an image anywhere to import it.`:`Nothing matches the current filters.`)),i(e,t)},Mn=e=>{var n=Xt(),o=a(n),d=e=>{var n=Ht(),r=g(n);ye(r,{children:(e,n)=>{ie(),i(e,t(`Folders`))},$$slots:{default:!0}});var a=c(r,2);p(a,20,()=>f(nt),e=>e,(e,t)=>{var n=Vt();let r;var a=g(n);xe(g(a),{size:18}),w(a);var o=c(a,2),d=g(o),p=g(d,!0);w(d);var h=c(d,2),_=g(h);w(h),w(o),ie(2),w(n),O((e,i)=>{r=ee(n,1,`folder-card svelte-1uha8ag`,null,r,{"drop-target":f(U)===t,"dragging-folder":f(H)===t}),m(p,e),m(_,`${i??``} assets`)},[()=>we(t),()=>Ct(t)]),l(`click`,n,()=>ot(t)),l(`contextmenu`,n,e=>gt(e,t)),u(`dragstart`,n,e=>{s(H,t,!0),e.dataTransfer?.setData(`application/x-fundus-folder`,t),e.dataTransfer&&(e.dataTransfer.effectAllowed=`move`)}),u(`dragend`,n,()=>{s(H,null),s(U,null)}),u(`dragover`,n,e=>Dt(e,t)),u(`dragleave`,n,()=>s(U,null)),u(`drop`,n,e=>Ot(e,t)),i(e,n)}),w(a),w(n),i(e,n)};D(o,e=>{f(nt).length>0&&e(d)});var h=c(o,2),v=e=>{var t=r();p(a(t),17,()=>f(at),e=>e.key,(e,t)=>{var n=Yt(),r=g(n),o=e=>{ye(e,{children:(e,n)=>{var r=Wt(),o=a(r),s=e=>{var n=Ut(),r=g(n,!0);w(n),O(()=>m(r,f(t).emoji)),i(e,n)};D(o,e=>{f(t).emoji&&e(s)});var l=c(o,1,!0);O(()=>m(l,f(t).heading)),i(e,r)},$$slots:{default:!0}})};D(r,e=>{f(t).heading&&e(o)});var s=c(r,2);p(s,21,()=>f(t).assets,e=>e.id,(e,t)=>{var n=Jt();let r;var a=g(n);b(a);var o=c(a,2),s=g(o),d=e=>{var n=Gt();n.muted=!0,O(()=>E(n,`src`,f(t).proxy?.url??f(t).rawUrl)),u(`pointerenter`,n,e=>At(e.currentTarget)),u(`pointerleave`,n,e=>jt(e.currentTarget)),i(e,n)},h=e=>{{let n=_(()=>f(t).proxy?.url??f(t).rawUrl);Se(e,{get src(){return f(n)}})}},v=e=>{var n=Kt();O(()=>{E(n,`src`,f(t).proxy?.url??f(t).rawUrl),E(n,`alt`,f(t).id)}),i(e,n)};D(s,e=>{f(t).type===`video`||f(t).type===`chroma-key-video`?e(d):f(t).type===`audio`?e(h,1):e(v,-1)}),w(o);var y=c(o,2),x=g(y),S=g(x,!0);w(x);var C=c(x,2),te=g(C,!0);w(C),w(y);var T=c(y,2),ne=g(T);p(ne,16,()=>f(t).manifests,e=>e,(e,t)=>{Ft(e,{get name(){return t}})});var re=c(ne,2);p(re,17,()=>f(t).passiveManifests,e=>e.manifest,(e,t)=>{Ft(e,{get name(){return f(t).manifest},passive:!0,get via(){return f(t).via}})}),p(c(re,2),16,()=>f(t).warnings,e=>e,(e,t)=>{var n=qt();O(()=>E(n,`title`,t)),i(e,n)}),w(T),w(n),O((e,i,o)=>{r=ee(n,1,`card svelte-1uha8ag`,null,r,e),E(n,`data-asset-id`,f(t).id),E(n,`href`,i),oe(a,o),E(a,`aria-label`,`Select ${f(t).id}`),m(S,f(t).id),m(te,f(t).type)},[()=>({selected:f(K).includes(f(t).id)}),()=>se(`/asset/[id]`,{id:f(t).id}),()=>f(K).includes(f(t).id)]),l(`contextmenu`,n,e=>_t(e,f(t).id)),l(`click`,n,e=>{(f(K).length>0||e.metaKey||e.ctrlKey||e.shiftKey)&&(e.preventDefault(),st(f(t).id,e.shiftKey))}),u(`dragstart`,n,e=>{let n=f(K).includes(f(t).id)?f(K):[f(t).id];e.dataTransfer?.setData(`application/x-fundus-assets`,JSON.stringify(n)),e.dataTransfer&&(e.dataTransfer.effectAllowed=`move`),lt(e,n)}),u(`focus`,n,e=>At(e.currentTarget.querySelector(`video`))),u(`blur`,n,e=>jt(e.currentTarget.querySelector(`video`))),l(`click`,a,e=>{e.stopPropagation(),st(f(t).id,e.shiftKey)}),i(e,n)}),w(s),w(n),i(e,n)}),i(e,t)};D(h,e=>{f(rt).length>0&&e(v)}),i(e,n)};D(kn,e=>{k.state?f(rt).length===0&&f(nt).length===0?e(jn,1):e(Mn,-1):e(An)});var Nn=c(kn,2),Pn=e=>{var t=Zt(),n=g(t);w(t),O(()=>m(n,`Drop to import into ${(f(j)||`Root`)??``}`)),i(e,t)};D(Nn,e=>{f(F)&&e(Pn)}),w(on),w(rn);var Fn=c(rn,2),In=e=>{{let t=_(()=>f(L).renamePath===null?void 0:()=>pt(f(L)?.renamePath??``)),n=_(()=>f(L).renamePath===null?void 0:()=>mt(f(L)?.renamePath??``));Ce(e,{get x(){return f(L).x},get y(){return f(L).y},onNewDirectory:()=>ft(f(L)?.parent??``),get onRenameDirectory(){return f(t)},onImportFile:()=>dt(f(L)?.parent??``),get onDeleteDirectory(){return f(n)},onClose:()=>s(L,null)})}};D(Fn,e=>{f(L)&&e(In)});var Ln=c(Fn,2),Rn=e=>{{let t=_(()=>f(R).assetIds.length===1?()=>vt(f(R)?.assetIds[0]??``):void 0);Mt(e,{get x(){return f(R).x},get y(){return f(R).y},get assetCount(){return f(R).assetIds.length},get onRename(){return f(t)},onDelete:()=>yt(f(R)?.assetIds??[]),onClose:()=>s(R,null)})}};D(Ln,e=>{f(R)&&e(Rn)});var zn=c(Ln,2),Bn=e=>{{let t=_(()=>f(W)?`Renaming…`:`Rename`),n=_(()=>!f(We));De(e,{title:`Rename asset`,get confirmLabel(){return f(t)},get confirmDisabled(){return f(n)},get busy(){return f(W)},onConfirm:()=>void xt(),onCancel:bt,children:(e,t)=>{var n=en(),r=a(n),o=c(g(r),2);b(o),y(o,e=>s(Me,e),()=>f(Me)),w(r);var u=c(r,2),d=e=>{var t=Qt(),n=g(t,!0);w(t),O(()=>m(n,f(He))),i(e,t)};D(u,e=>{f(He)&&e(d)});var p=c(u,2),h=e=>{i(e,$t())};D(p,e=>{f(Ue)&&e(h)});var _=c(p,2),v=e=>{var t=Qt(),n=g(t);w(t),O(e=>m(n,`Renaming leaves ${f(Ge).length??``} reference(s) pointing to the old ID:
2
- ${e??``}`),[()=>f(Ge).join(`, `)]),i(e,t)};D(_,e=>{f(Ge).length>0&&e(v)});var x=c(_,2),S=e=>{var t=Qt(),n=g(t,!0);w(t),O(()=>m(n,f(G))),i(e,t)};D(x,e=>{f(G)&&e(S)}),O(()=>o.disabled=f(W)),l(`keydown`,o,e=>e.key===`Enter`&&void xt()),ae(o,()=>f(B),e=>s(B,e)),i(e,n)},$$slots:{default:!0}})}};D(zn,e=>{f(z)!==null&&e(Bn)});var Vn=c(zn,2),Hn=e=>{{let t=_(()=>f(V).length===1?`Delete asset`:`Delete ${f(V).length} assets`),n=_(()=>f(W)?`Deleting…`:f(V).length===1?`Delete asset`:`Delete ${f(V).length} assets`);De(e,{get title(){return f(t)},get confirmLabel(){return f(n)},danger:!0,get busy(){return f(W)},onConfirm:()=>void St(),onCancel:bt,children:(e,t)=>{var n=tn(),r=a(n),o=g(r);w(r);var s=c(r,2),l=e=>{var t=Qt(),n=g(t);w(t),O(e=>m(n,`This leaves ${f(X).length??``} external reference(s) dangling:
3
- ${e??``}`),[()=>f(X).join(`, `)]),i(e,t)};D(s,e=>{f(X).length>0&&e(l)});var u=c(s,2),d=e=>{var t=Qt(),n=g(t,!0);w(t),O(()=>m(n,f(G))),i(e,t)};D(u,e=>{f(G)&&e(d)}),O(e=>m(o,`Delete ${e??``}? Their raw files and proxies are removed.`),[()=>f(V).join(`, `)]),i(e,n)},$$slots:{default:!0}})}};D(Vn,e=>{f(V).length>0&&e(Hn)});var Un=c(Vn,2),Wn=e=>{_e(e,{get file(){return f(I)},get folder(){return f(je)},onDone:e=>void Tt(e),onCancel:()=>s(I,null)})};D(Un,e=>{f(I)&&e(Wn)}),O(()=>{sn=ee(on,1,`page svelte-1uha8ag`,null,sn,{dragging:f(F)}),E(pn,`accept`,Be),m(En,Ve)}),l(`contextmenu`,on,ht),u(`dragleave`,on,e=>{e.relatedTarget===null&&s(F,!1)}),l(`click`,fn,()=>dt(f(j)??``)),l(`change`,pn,wt),S(hn,()=>f(Oe),e=>s(Oe,e)),S(yn,()=>f(M),e=>s(M,e)),S(xn,()=>f(N),e=>s(N,e)),l(`keydown`,wn,e=>{e.key===`Escape`&&(e.stopPropagation(),f(P)===``?e.currentTarget.blur():s(P,``))}),ae(wn,()=>f(P),e=>s(P,e)),ne(On,()=>f(Ae),e=>s(Ae,e)),i(d,Pt),e()}T([`contextmenu`,`click`,`change`,`keydown`]);export{rn as component};