fundus 0.28.0 → 0.29.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 (179) hide show
  1. package/README.md +41 -33
  2. package/build/client/_app/immutable/chunks/{CRFKGnag.js → BCmR1_e0.js} +1 -1
  3. package/build/client/_app/immutable/chunks/BCmR1_e0.js.br +0 -0
  4. package/build/client/_app/immutable/chunks/BCmR1_e0.js.gz +0 -0
  5. package/build/client/_app/immutable/chunks/{apKHI4vq.js → C0uU_Rhe.js} +2 -2
  6. package/build/client/_app/immutable/chunks/C0uU_Rhe.js.br +0 -0
  7. package/build/client/_app/immutable/chunks/C0uU_Rhe.js.gz +0 -0
  8. package/build/client/_app/immutable/chunks/{g2rma9Ym.js → CMJ10zbJ.js} +1 -1
  9. package/build/client/_app/immutable/chunks/CMJ10zbJ.js.br +0 -0
  10. package/build/client/_app/immutable/chunks/CMJ10zbJ.js.gz +0 -0
  11. package/build/client/_app/immutable/chunks/{rtFCvv3j.js → kkVEh3_1.js} +1 -1
  12. package/build/client/_app/immutable/chunks/kkVEh3_1.js.br +2 -0
  13. package/build/client/_app/immutable/chunks/kkVEh3_1.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/{BSzEzOBI.js → wBLhaPea.js} +1 -1
  15. package/build/client/_app/immutable/chunks/wBLhaPea.js.br +0 -0
  16. package/build/client/_app/immutable/chunks/wBLhaPea.js.gz +0 -0
  17. package/build/client/_app/immutable/entry/{app.BiYJKHq5.js → app.DCXSqiQ1.js} +2 -2
  18. package/build/client/_app/immutable/entry/app.DCXSqiQ1.js.br +0 -0
  19. package/build/client/_app/immutable/entry/app.DCXSqiQ1.js.gz +0 -0
  20. package/build/client/_app/immutable/entry/start.BOUpxuMU.js +1 -0
  21. package/build/client/_app/immutable/entry/start.BOUpxuMU.js.br +0 -0
  22. package/build/client/_app/immutable/entry/start.BOUpxuMU.js.gz +0 -0
  23. package/build/client/_app/immutable/nodes/{0.kL9OGUbr.js → 0.CsqkK05g.js} +1 -1
  24. package/build/client/_app/immutable/nodes/0.CsqkK05g.js.br +0 -0
  25. package/build/client/_app/immutable/nodes/0.CsqkK05g.js.gz +0 -0
  26. package/build/client/_app/immutable/nodes/{1.DQGC5ZQg.js → 1.BVSXvtU9.js} +1 -1
  27. package/build/client/_app/immutable/nodes/1.BVSXvtU9.js.br +2 -0
  28. package/build/client/_app/immutable/nodes/1.BVSXvtU9.js.gz +0 -0
  29. package/build/client/_app/immutable/nodes/2.BJEXWmrT.js +4 -0
  30. package/build/client/_app/immutable/nodes/2.BJEXWmrT.js.br +0 -0
  31. package/build/client/_app/immutable/nodes/2.BJEXWmrT.js.gz +0 -0
  32. package/build/client/_app/immutable/nodes/{3.DkyIyoNd.js → 3.BDMmDyL1.js} +1 -1
  33. package/build/client/_app/immutable/nodes/3.BDMmDyL1.js.br +0 -0
  34. package/build/client/_app/immutable/nodes/3.BDMmDyL1.js.gz +0 -0
  35. package/build/client/_app/immutable/nodes/{4.D1JY4Ttk.js → 4.dd49_qQE.js} +1 -1
  36. package/build/client/_app/immutable/nodes/4.dd49_qQE.js.br +0 -0
  37. package/build/client/_app/immutable/nodes/4.dd49_qQE.js.gz +0 -0
  38. package/build/client/_app/version.json +1 -1
  39. package/build/client/_app/version.json.br +0 -0
  40. package/build/client/_app/version.json.gz +0 -0
  41. package/build/handler.js +7 -7
  42. package/build/index.js +7 -7
  43. package/build/server/chunks/chunks/{context.js-BZSZNuAd.js → context.js-DFZgDxCD.js} +157 -95
  44. package/build/server/chunks/chunks/context.js-DFZgDxCD.js.map +1 -0
  45. package/build/server/chunks/chunks/{contract.js-B4JdXFgm.js → contract.js-DGZXpcNX.js} +7 -7
  46. package/build/server/chunks/chunks/{contract.js-B4JdXFgm.js.map → contract.js-DGZXpcNX.js.map} +1 -1
  47. package/build/server/chunks/chunks/{core.js-BHxa3VBo.js → core.js-AGKlECJ0.js} +32 -32
  48. package/build/server/chunks/chunks/core.js-AGKlECJ0.js.map +1 -0
  49. package/build/server/chunks/chunks/{exports.js-Cncv1qoG.js → exports.js-BsVKSGJk.js} +2 -2
  50. package/build/server/chunks/chunks/{exports.js-Cncv1qoG.js.map → exports.js-BsVKSGJk.js.map} +1 -1
  51. package/build/server/chunks/chunks/{http.js-DYYKvppy.js → http.js-BQhjMaW9.js} +2 -2
  52. package/build/server/chunks/chunks/{http.js-DYYKvppy.js.map → http.js-BQhjMaW9.js.map} +1 -1
  53. package/build/server/chunks/chunks/{internal.js-C2FKw_9R.js → internal.js-DJGcNryj.js} +3 -3
  54. package/build/server/chunks/chunks/{internal.js-C2FKw_9R.js.map → internal.js-DJGcNryj.js.map} +1 -1
  55. package/build/server/chunks/chunks/internal2.js-BlXt2rfE.js.map +1 -1
  56. package/build/server/chunks/chunks/{manifest-membership.js-BkrPsM_r.js → manifest-membership.js-DkHaPk2F.js} +2 -2
  57. package/build/server/chunks/chunks/{manifest-membership.js-BkrPsM_r.js.map → manifest-membership.js-DkHaPk2F.js.map} +1 -1
  58. package/build/server/chunks/chunks/{raw-reconciliation.js-DPnNXe0b.js → raw-reconciliation.js-D2sI2C-t.js} +3 -3
  59. package/build/server/chunks/chunks/raw-reconciliation.js-D2sI2C-t.js.map +1 -0
  60. package/build/server/chunks/chunks/{raw-reconciliation2.js-DKOpJ8if.js → raw-reconciliation2.js-CMpUvuMd.js} +2 -2
  61. package/build/server/chunks/chunks/{raw-reconciliation2.js-DKOpJ8if.js.map → raw-reconciliation2.js-CMpUvuMd.js.map} +1 -1
  62. package/build/server/chunks/chunks/{shared.js-BGsWd7z-.js → shared.js-BtmYg0tL.js} +2 -2
  63. package/build/server/chunks/chunks/{shared.js-BGsWd7z-.js.map → shared.js-BtmYg0tL.js.map} +1 -1
  64. package/build/server/chunks/chunks/{utils.js-C0ADATvf.js → utils.js-CqXk0Ug6.js} +3 -3
  65. package/build/server/chunks/chunks/{utils.js-C0ADATvf.js.map → utils.js-CqXk0Ug6.js.map} +1 -1
  66. package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-Dw2MW5Tm.js → _server.ts.js-DKGD9Jk2.js} +6 -6
  67. package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-Dw2MW5Tm.js.map → _server.ts.js-DKGD9Jk2.js.map} +1 -1
  68. package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-GQDuJGug.js → _server.ts.js-C1UfF0EO.js} +7 -7
  69. package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-GQDuJGug.js.map → _server.ts.js-C1UfF0EO.js.map} +1 -1
  70. package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/{_server.ts.js-JbLSv7Xx.js → _server.ts.js-DpASkk00.js} +7 -7
  71. package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/{_server.ts.js-JbLSv7Xx.js.map → _server.ts.js-DpASkk00.js.map} +1 -1
  72. package/build/server/chunks/entries/endpoints/api/assets/_id_/reimport/{_server.ts.js-BPae-BYF.js → _server.ts.js-C3jU2vC8.js} +7 -7
  73. package/build/server/chunks/entries/endpoints/api/assets/_id_/reimport/{_server.ts.js-BPae-BYF.js.map → _server.ts.js-C3jU2vC8.js.map} +1 -1
  74. package/build/server/chunks/entries/endpoints/api/assets/_id_/retag/{_server.ts.js-BafrrUxu.js → _server.ts.js-B7OwufF3.js} +7 -7
  75. package/build/server/chunks/entries/endpoints/api/assets/_id_/retag/{_server.ts.js-BafrrUxu.js.map → _server.ts.js-B7OwufF3.js.map} +1 -1
  76. package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-UOlSNEi9.js → _server.ts.js-COhg1nYk.js} +7 -7
  77. package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-UOlSNEi9.js.map → _server.ts.js-COhg1nYk.js.map} +1 -1
  78. package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-QE1vUuAx.js → _server.ts.js-DAEE17eM.js} +7 -7
  79. package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-QE1vUuAx.js.map → _server.ts.js-DAEE17eM.js.map} +1 -1
  80. package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-DIVfppGt.js → _server.ts.js-BrZSS4gm.js} +7 -7
  81. package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-DIVfppGt.js.map → _server.ts.js-BrZSS4gm.js.map} +1 -1
  82. package/build/server/chunks/entries/endpoints/api/events/{_server.ts.js-B6R_kqP8.js → _server.ts.js-Cfst-Brd.js} +7 -7
  83. package/build/server/chunks/entries/endpoints/api/events/{_server.ts.js-B6R_kqP8.js.map → _server.ts.js-Cfst-Brd.js.map} +1 -1
  84. package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-CertbDsH.js → _server.ts.js-aN_h2Ifo.js} +7 -7
  85. package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-CertbDsH.js.map → _server.ts.js-aN_h2Ifo.js.map} +1 -1
  86. package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-DEIF3Hu2.js → _server.ts.js-CX2A66ij.js} +7 -7
  87. package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-DEIF3Hu2.js.map → _server.ts.js-CX2A66ij.js.map} +1 -1
  88. package/build/server/chunks/entries/endpoints/api/imports/{_server.ts.js-DNFsNGr4.js → _server.ts.js-CwTiaheP.js} +7 -7
  89. package/build/server/chunks/entries/endpoints/api/imports/{_server.ts.js-DNFsNGr4.js.map → _server.ts.js-CwTiaheP.js.map} +1 -1
  90. package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-DDW8XRPe.js → _server.ts.js-fIbsr_2e.js} +7 -7
  91. package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-DDW8XRPe.js.map → _server.ts.js-fIbsr_2e.js.map} +1 -1
  92. package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-C222-xli.js → _server.ts.js-Dvo1bsLi.js} +7 -7
  93. package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-C222-xli.js.map → _server.ts.js-Dvo1bsLi.js.map} +1 -1
  94. package/build/server/chunks/entries/endpoints/api/raw/adopt/{_server.ts.js-CI1P1uyd.js → _server.ts.js-VLg1G3mN.js} +7 -7
  95. package/build/server/chunks/entries/endpoints/api/raw/adopt/{_server.ts.js-CI1P1uyd.js.map → _server.ts.js-VLg1G3mN.js.map} +1 -1
  96. package/build/server/chunks/entries/endpoints/api/raw/edited/accept/{_server.ts.js-DpiUwaSh.js → _server.ts.js-DqctsOop.js} +7 -7
  97. package/build/server/chunks/entries/endpoints/api/raw/edited/accept/{_server.ts.js-DpiUwaSh.js.map → _server.ts.js-DqctsOop.js.map} +1 -1
  98. package/build/server/chunks/entries/endpoints/api/raw/edited/dismiss/{_server.ts.js-DT0VPqPT.js → _server.ts.js-CoxSU5iO.js} +7 -7
  99. package/build/server/chunks/entries/endpoints/api/raw/edited/dismiss/{_server.ts.js-DT0VPqPT.js.map → _server.ts.js-CoxSU5iO.js.map} +1 -1
  100. package/build/server/chunks/entries/endpoints/api/reconcile/{_server.ts.js-DBpHM42g.js → _server.ts.js-wUxsLZdr.js} +7 -7
  101. package/build/server/chunks/entries/endpoints/api/reconcile/{_server.ts.js-DBpHM42g.js.map → _server.ts.js-wUxsLZdr.js.map} +1 -1
  102. package/build/server/chunks/entries/endpoints/api/reveal/{_server.ts.js-Cxu5b6Au.js → _server.ts.js-BKsF0Oit.js} +7 -7
  103. package/build/server/chunks/entries/endpoints/api/reveal/{_server.ts.js-Cxu5b6Au.js.map → _server.ts.js-BKsF0Oit.js.map} +1 -1
  104. package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-W4dhMo8Y.js → _server.ts.js-Dk9oOZwM.js} +7 -7
  105. package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-W4dhMo8Y.js.map → _server.ts.js-Dk9oOZwM.js.map} +1 -1
  106. package/build/server/chunks/entries/endpoints/api/usage/{_server.ts.js-DJ_adxbT.js → _server.ts.js-DxjNmmtL.js} +7 -7
  107. package/build/server/chunks/entries/endpoints/api/usage/{_server.ts.js-DJ_adxbT.js.map → _server.ts.js-DxjNmmtL.js.map} +1 -1
  108. package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-BisoHihD.js → _server.ts.js-DD0b38VV.js} +6 -6
  109. package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-BisoHihD.js.map → _server.ts.js-DD0b38VV.js.map} +1 -1
  110. package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-D4jLLuko.js → _server.ts.js-DId6F2i_.js} +7 -7
  111. package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-D4jLLuko.js.map → _server.ts.js-DId6F2i_.js.map} +1 -1
  112. package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-Dfv2ItjT.js → _server.ts.js-DKKkGoK2.js} +7 -7
  113. package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-Dfv2ItjT.js.map → _server.ts.js-DKKkGoK2.js.map} +1 -1
  114. package/build/server/chunks/entries/{hooks.server.js-oHJX5INm.js → hooks.server.js-B5Ctvorj.js} +6 -6
  115. package/build/server/chunks/entries/{hooks.server.js-oHJX5INm.js.map → hooks.server.js-B5Ctvorj.js.map} +1 -1
  116. package/build/server/chunks/{handler-uc4GLvWI.js → handler-DwVfBx6r.js} +5 -5
  117. package/build/server/chunks/{handler-uc4GLvWI.js.map → handler-DwVfBx6r.js.map} +1 -1
  118. package/build/server/chunks/{index.js-BTlSiK4q.js → index.js-DgPuPQJn.js} +5 -5
  119. package/build/server/chunks/{index.js-BTlSiK4q.js.map → index.js-DgPuPQJn.js.map} +1 -1
  120. package/build/server/chunks/{manifest.js-BB8iIVbZ.js → manifest.js-B054EcAf.js} +31 -31
  121. package/build/server/chunks/{manifest.js-BB8iIVbZ.js.map → manifest.js-B054EcAf.js.map} +1 -1
  122. package/build/server/chunks/nodes/{0.js-CccZDEdX.js → 0.js-DoHZTmnT.js} +2 -2
  123. package/build/server/chunks/nodes/{0.js-CccZDEdX.js.map → 0.js-DoHZTmnT.js.map} +1 -1
  124. package/build/server/chunks/nodes/1.js-BcPlsloO.js +7 -0
  125. package/build/server/chunks/nodes/{1.js-_Ms77u64.js.map → 1.js-BcPlsloO.js.map} +1 -1
  126. package/build/server/chunks/nodes/{2.js-BpyFsilO.js → 2.js-5qCXkvzl.js} +2 -2
  127. package/build/server/chunks/nodes/{2.js-BpyFsilO.js.map → 2.js-5qCXkvzl.js.map} +1 -1
  128. package/build/server/chunks/nodes/3.js-D6fAMX1w.js +7 -0
  129. package/build/server/chunks/nodes/{3.js-D7RUEviu.js.map → 3.js-D6fAMX1w.js.map} +1 -1
  130. package/build/server/chunks/nodes/4.js-CGkeT0SQ.js +7 -0
  131. package/build/server/chunks/nodes/{4.js-Cfc3G2Gv.js.map → 4.js-CGkeT0SQ.js.map} +1 -1
  132. package/dist/cli.js +3 -4
  133. package/dist/core/figma-tag-links.d.ts +66 -0
  134. package/dist/core/figma-tag-links.js +97 -0
  135. package/dist/core/index.d.ts +2 -2
  136. package/dist/core/index.js +1 -1
  137. package/dist/server/cli-commands.d.ts +1 -1
  138. package/dist/server/cli-commands.js +1 -1
  139. package/dist/server/cli-figma-tags.d.ts +1 -1
  140. package/dist/server/cli-figma-tags.js +149 -88
  141. package/dist/server/figma-tags.d.ts +72 -24
  142. package/dist/server/figma-tags.js +130 -79
  143. package/dist/server/importers/figma.d.ts +20 -15
  144. package/dist/server/importers/figma.js +172 -92
  145. package/package.json +1 -1
  146. package/build/client/_app/immutable/chunks/BSzEzOBI.js.br +0 -0
  147. package/build/client/_app/immutable/chunks/BSzEzOBI.js.gz +0 -0
  148. package/build/client/_app/immutable/chunks/CRFKGnag.js.br +0 -0
  149. package/build/client/_app/immutable/chunks/CRFKGnag.js.gz +0 -0
  150. package/build/client/_app/immutable/chunks/apKHI4vq.js.br +0 -0
  151. package/build/client/_app/immutable/chunks/apKHI4vq.js.gz +0 -0
  152. package/build/client/_app/immutable/chunks/g2rma9Ym.js.br +0 -0
  153. package/build/client/_app/immutable/chunks/g2rma9Ym.js.gz +0 -0
  154. package/build/client/_app/immutable/chunks/rtFCvv3j.js.br +0 -0
  155. package/build/client/_app/immutable/chunks/rtFCvv3j.js.gz +0 -0
  156. package/build/client/_app/immutable/entry/app.BiYJKHq5.js.br +0 -0
  157. package/build/client/_app/immutable/entry/app.BiYJKHq5.js.gz +0 -0
  158. package/build/client/_app/immutable/entry/start.BGYYpgAJ.js +0 -1
  159. package/build/client/_app/immutable/entry/start.BGYYpgAJ.js.br +0 -0
  160. package/build/client/_app/immutable/entry/start.BGYYpgAJ.js.gz +0 -0
  161. package/build/client/_app/immutable/nodes/0.kL9OGUbr.js.br +0 -0
  162. package/build/client/_app/immutable/nodes/0.kL9OGUbr.js.gz +0 -0
  163. package/build/client/_app/immutable/nodes/1.DQGC5ZQg.js.br +0 -0
  164. package/build/client/_app/immutable/nodes/1.DQGC5ZQg.js.gz +0 -0
  165. package/build/client/_app/immutable/nodes/2.DXo6NZ8U.js +0 -4
  166. package/build/client/_app/immutable/nodes/2.DXo6NZ8U.js.br +0 -0
  167. package/build/client/_app/immutable/nodes/2.DXo6NZ8U.js.gz +0 -0
  168. package/build/client/_app/immutable/nodes/3.DkyIyoNd.js.br +0 -0
  169. package/build/client/_app/immutable/nodes/3.DkyIyoNd.js.gz +0 -0
  170. package/build/client/_app/immutable/nodes/4.D1JY4Ttk.js.br +0 -0
  171. package/build/client/_app/immutable/nodes/4.D1JY4Ttk.js.gz +0 -0
  172. package/build/server/chunks/chunks/context.js-BZSZNuAd.js.map +0 -1
  173. package/build/server/chunks/chunks/core.js-BHxa3VBo.js.map +0 -1
  174. package/build/server/chunks/chunks/raw-reconciliation.js-DPnNXe0b.js.map +0 -1
  175. package/build/server/chunks/nodes/1.js-_Ms77u64.js +0 -7
  176. package/build/server/chunks/nodes/3.js-D7RUEviu.js +0 -7
  177. package/build/server/chunks/nodes/4.js-Cfc3G2Gv.js +0 -7
  178. package/dist/core/figma-tag-script.d.ts +0 -154
  179. package/dist/core/figma-tag-script.js +0 -248
@@ -1,7 +1,7 @@
1
1
  import { lookup } from 'node:dns/promises';
2
2
  import { isIP } from 'node:net';
3
3
  import sharp from 'sharp';
4
- import { isInstanceSublayerId, isValidAssetId } from '../../core/index.js';
4
+ import { figmaLinksFromRest, figmaTagEntries, fundusTagLink, isValidAssetId } from '../../core/index.js';
5
5
  import { SourceImportError, invalidInput } from './contract.js';
6
6
  import { requestPinnedHttps } from './pinned-https.js';
7
7
  const MAX_DOWNLOAD_BYTES = 50 * 1024 * 1024;
@@ -9,6 +9,9 @@ const MAX_PIXELS = 32_000_000;
9
9
  const MAX_REDIRECTS = 3;
10
10
  const REQUEST_TIMEOUT_MS = 30_000;
11
11
  const PNG_SIGNATURE = Uint8Array.from([137, 80, 78, 71, 13, 10, 26, 10]);
12
+ /** Worst case per API call: 3 attempts × 30 s timeout + 2 waits × 10 s = 110 s. */
13
+ const FIGMA_RATE_LIMIT_ATTEMPTS = 3;
14
+ const FIGMA_RATE_LIMIT_MAX_WAIT_SECONDS = 10;
12
15
  function record(value) {
13
16
  return typeof value === 'object' && value !== null && !Array.isArray(value)
14
17
  ? value
@@ -130,17 +133,19 @@ function retryAfter(response) {
130
133
  const seconds = Number(raw);
131
134
  return Number.isSafeInteger(seconds) ? seconds : undefined;
132
135
  }
133
- function upstreamStatusError(response) {
136
+ function upstreamStatusError(response, scope) {
134
137
  if (response.status === 401)
135
138
  return new SourceImportError('unauthorized', 'Figma authentication failed.');
136
139
  if (response.status === 403)
137
- return new SourceImportError('forbidden', 'Figma authentication or access failed. The token may be invalid or expired, or it may not have access to this file.');
140
+ return new SourceImportError('forbidden', scope
141
+ ? `Figma authentication or access failed. The token may be invalid or expired, may lack the ${scope} scope, or may not have access to this file.`
142
+ : 'Figma authentication or access failed. The token may be invalid or expired, or it may not have access to this file.');
138
143
  if (response.status === 404)
139
144
  return new SourceImportError('not-found', 'The Figma file or node was not found.');
140
145
  if (response.status === 429) {
141
146
  return new SourceImportError('rate-limited', 'Figma rate-limited this request.', retryAfter(response));
142
147
  }
143
- return new SourceImportError('upstream-failed', `Figma export failed with status ${response.status}.`);
148
+ return new SourceImportError('upstream-failed', `Figma request failed with status ${response.status}.`);
144
149
  }
145
150
  function isForbiddenIpv4(address) {
146
151
  const parts = address.split('.').map(Number);
@@ -248,22 +253,22 @@ export async function resolveSafeDownloadTarget(value) {
248
253
  export async function assertSafeDownloadUrl(value) {
249
254
  return (await resolveSafeDownloadTarget(value)).url;
250
255
  }
251
- async function fetchWithDeadline(fetcher, url, init, consume) {
256
+ async function fetchWithDeadline(fetcher, url, init, scope) {
252
257
  const controller = new AbortController();
253
258
  const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
254
259
  try {
255
260
  const response = await fetcher(url, { ...init, signal: controller.signal });
256
261
  if (!response.ok)
257
- throw upstreamStatusError(response);
258
- return await consume(response);
262
+ throw upstreamStatusError(response, scope);
263
+ return new Uint8Array(await response.arrayBuffer());
259
264
  }
260
265
  catch (cause) {
261
266
  if (controller.signal.aborted || (cause instanceof Error && cause.name === 'AbortError')) {
262
- throw new SourceImportError('download-timeout', 'Figma export timed out.');
267
+ throw new SourceImportError('download-timeout', 'Figma request timed out.');
263
268
  }
264
269
  if (cause instanceof SourceImportError)
265
270
  throw cause;
266
- throw new SourceImportError('upstream-failed', 'Figma export request failed.');
271
+ throw new SourceImportError('upstream-failed', 'Figma request failed.');
267
272
  }
268
273
  finally {
269
274
  clearTimeout(timeout);
@@ -383,50 +388,40 @@ async function validatePng(bytes) {
383
388
  throw new SourceImportError('image-too-large', 'Figma export exceeds the 32 megapixel limit.');
384
389
  }
385
390
  }
386
- /**
387
- * Every taggable node in a REST document tree (`plugin_data=shared`), in
388
- * document order. Nodes inside instances are skipped: they echo the main
389
- * component node's tag, and Fundus imports only plain `12:34` node ids.
390
- */
391
- export function figmaDocumentNodes(document) {
392
- const nodes = [];
393
- const visit = (value, page) => {
394
- const current = record(value);
395
- if (!current)
396
- return;
397
- const name = typeof current.name === 'string' ? current.name : '';
398
- const pageName = current.type === 'CANVAS' ? name : page;
399
- if (typeof current.id === 'string' &&
400
- current.type !== 'DOCUMENT' &&
401
- current.type !== 'CANVAS' &&
402
- !isInstanceSublayerId(current.id)) {
403
- const shared = record(current.sharedPluginData);
404
- const fundus = shared ? record(shared.fundus) : null;
405
- const tag = fundus && typeof fundus.assetId === 'string' ? fundus.assetId : '';
406
- nodes.push({
407
- nodeId: current.id,
408
- nodeName: name,
409
- page: pageName,
410
- tag: tag === '' ? null : tag
411
- });
391
+ async function fetchFigmaApiBytes(endpoint, init, scope, context) {
392
+ for (let attempt = 1;; attempt++) {
393
+ try {
394
+ return await fetchWithDeadline(context.fetch, endpoint, init, scope);
412
395
  }
413
- if (Array.isArray(current.children)) {
414
- for (const child of current.children)
415
- visit(child, pageName);
396
+ catch (cause) {
397
+ const wait = cause instanceof SourceImportError && cause.code === 'rate-limited'
398
+ ? cause.retryAfterSeconds
399
+ : undefined;
400
+ if (wait === undefined ||
401
+ wait > FIGMA_RATE_LIMIT_MAX_WAIT_SECONDS ||
402
+ attempt >= FIGMA_RATE_LIMIT_ATTEMPTS) {
403
+ throw cause;
404
+ }
405
+ await new Promise((resolve) => setTimeout(resolve, wait * 1000));
416
406
  }
417
- };
418
- visit(record(document), '');
419
- return nodes;
407
+ }
420
408
  }
421
- /** The whole document tree of a Figma file, including every node's shared plugin data. */
422
- export async function fetchFigmaDocument(fileKey, context) {
409
+ async function requestFigmaApi(endpoint, context, request) {
423
410
  const token = context.config.import.figma.token;
424
411
  if (!token) {
425
412
  throw new SourceImportError('not-configured', 'Figma access is not configured.');
426
413
  }
427
- const endpoint = new URL(`https://api.figma.com/v1/files/${encodeURIComponent(fileKey)}`);
428
- endpoint.searchParams.set('plugin_data', 'shared');
429
- const jsonBytes = await fetchWithDeadline(context.fetch, endpoint, { redirect: 'error', headers: { 'X-Figma-Token': token } }, async (response) => new Uint8Array(await response.arrayBuffer()));
414
+ const jsonBytes = await fetchFigmaApiBytes(endpoint, {
415
+ method: request.method ?? 'GET',
416
+ redirect: 'error',
417
+ headers: {
418
+ 'X-Figma-Token': token,
419
+ ...(request.body !== undefined ? { 'Content-Type': 'application/json' } : {})
420
+ },
421
+ ...(request.body !== undefined ? { body: JSON.stringify(request.body) } : {})
422
+ }, request.scope, context);
423
+ if (jsonBytes.byteLength === 0)
424
+ return {};
430
425
  let payload;
431
426
  try {
432
427
  payload = JSON.parse(new TextDecoder().decode(jsonBytes));
@@ -435,56 +430,144 @@ export async function fetchFigmaDocument(fileKey, context) {
435
430
  throw new SourceImportError('invalid-response', 'Figma returned an invalid response.');
436
431
  }
437
432
  const body = record(payload);
438
- if (!body || body.err || (typeof body.status === 'number' && body.status >= 400)) {
433
+ if (!body ||
434
+ body.err ||
435
+ body.error === true ||
436
+ (typeof body.status === 'number' && body.status >= 400)) {
437
+ throw new SourceImportError('invalid-response', request.errorMessage);
438
+ }
439
+ // Figma reports rejected batch entries (e.g. "Url already exists") in `errors` with HTTP 200.
440
+ if (Array.isArray(body.errors) && body.errors.length > 0) {
441
+ const reasons = body.errors.map((entry) => {
442
+ const reason = record(entry)?.error;
443
+ return typeof reason === 'string' ? reason : 'unknown error';
444
+ });
445
+ throw new SourceImportError('upstream-failed', `Figma rejected the request: ${reasons.join('; ')}`);
446
+ }
447
+ return body;
448
+ }
449
+ function figmaFileEndpoint(fileKey, path) {
450
+ return new URL(`https://api.figma.com/v1/files/${encodeURIComponent(fileKey)}${path}`);
451
+ }
452
+ /** Every Fundus tag link in the file (orphaned ones included); each entry has its `linkId`. */
453
+ export async function listFigmaTagEntries(fileKey, context) {
454
+ const body = await requestFigmaApi(figmaFileEndpoint(fileKey, '/dev_resources'), context, {
455
+ scope: 'file_dev_resources:read',
456
+ errorMessage: 'Figma returned an invalid response.'
457
+ });
458
+ const links = figmaLinksFromRest(body);
459
+ if (!links) {
460
+ throw new SourceImportError('invalid-response', 'Figma returned an invalid Dev Resources list.');
461
+ }
462
+ return figmaTagEntries(links).filter((entry) => entry.linkId !== undefined);
463
+ }
464
+ /** The requested nodes that exist; Figma answers deleted or unknown ids with `null` (dropped). */
465
+ export async function fetchFigmaNodeSummaries(fileKey, nodeIds, context) {
466
+ if (nodeIds.length === 0)
467
+ return [];
468
+ const endpoint = figmaFileEndpoint(fileKey, '/nodes');
469
+ endpoint.searchParams.set('ids', nodeIds.join(','));
470
+ endpoint.searchParams.set('depth', '1');
471
+ const body = await requestFigmaApi(endpoint, context, {
472
+ scope: 'file_content:read',
473
+ errorMessage: 'Figma returned an invalid response.'
474
+ });
475
+ const nodes = record(body.nodes);
476
+ if (!nodes)
439
477
  throw new SourceImportError('invalid-response', 'Figma returned an invalid response.');
478
+ const summaries = [];
479
+ for (const nodeId of nodeIds) {
480
+ if (nodes[nodeId] === null)
481
+ continue;
482
+ const document = record(record(nodes[nodeId])?.document);
483
+ if (!document || typeof document.name !== 'string' || typeof document.type !== 'string') {
484
+ throw new SourceImportError('invalid-response', 'Figma did not return the requested node.');
485
+ }
486
+ summaries.push({ nodeId, nodeName: document.name, nodeType: document.type });
440
487
  }
441
- return body.document;
488
+ return summaries;
442
489
  }
443
- export async function resolveTagToNode(fileKey, tag, context) {
444
- const document = await fetchFigmaDocument(fileKey, context);
445
- const matches = figmaDocumentNodes(document).filter((node) => node.tag === tag);
446
- if (matches.length === 0) {
447
- throw new SourceImportError('not-found', `No Figma node is tagged "${tag}" in this file.`);
448
- }
449
- if (matches.length > 1) {
450
- throw new SourceImportError('ambiguous-tag', `More than one Figma node is tagged "${tag}" in this file.`);
451
- }
452
- return matches[0].nodeId;
490
+ export async function createFigmaTagLink(fileKey, nodeId, tag, context) {
491
+ await requestFigmaApi(new URL('https://api.figma.com/v1/dev_resources'), context, {
492
+ scope: 'file_dev_resources:write',
493
+ errorMessage: 'Figma could not create the tag link.',
494
+ method: 'POST',
495
+ body: { dev_resources: [{ ...fundusTagLink(tag), file_key: fileKey, node_id: nodeId }] }
496
+ });
453
497
  }
454
- async function materialize(source, context) {
455
- const token = context.config.import.figma.token;
456
- if (!token) {
457
- throw new SourceImportError('not-configured', 'Figma access is not configured.');
458
- }
459
- const endpoint = new URL(`https://api.figma.com/v1/images/${encodeURIComponent(source.fileKey)}`);
460
- endpoint.searchParams.set('ids', source.nodeId);
461
- endpoint.searchParams.set('format', source.format);
462
- endpoint.searchParams.set('scale', String(source.scale));
463
- const jsonBytes = await fetchWithDeadline(context.fetch, endpoint, { redirect: 'error', headers: { 'X-Figma-Token': token } }, async (response) => new Uint8Array(await response.arrayBuffer()));
464
- let payload;
465
- try {
466
- payload = JSON.parse(new TextDecoder().decode(jsonBytes));
467
- }
468
- catch {
469
- throw new SourceImportError('invalid-response', 'Figma returned an invalid response.');
498
+ export async function deleteFigmaDevResource(fileKey, linkId, context) {
499
+ await requestFigmaApi(figmaFileEndpoint(fileKey, `/dev_resources/${encodeURIComponent(linkId)}`), context, {
500
+ scope: 'file_dev_resources:write',
501
+ errorMessage: 'Figma could not delete the tag link.',
502
+ method: 'DELETE'
503
+ });
504
+ }
505
+ /** Export URLs for the nodes in one `/images` call; `null` for a node Figma cannot render. */
506
+ async function exportImageUrls(fileKey, nodeIds, scale, context) {
507
+ const endpoint = new URL(`https://api.figma.com/v1/images/${encodeURIComponent(fileKey)}`);
508
+ endpoint.searchParams.set('ids', nodeIds.join(','));
509
+ endpoint.searchParams.set('format', 'png');
510
+ endpoint.searchParams.set('scale', String(scale));
511
+ const body = await requestFigmaApi(endpoint, context, {
512
+ scope: 'file_content:read',
513
+ errorMessage: 'Figma could not render this node.'
514
+ });
515
+ const images = record(body.images);
516
+ const urls = {};
517
+ for (const nodeId of nodeIds) {
518
+ if (!images || !Object.hasOwn(images, nodeId)) {
519
+ throw new SourceImportError('invalid-response', 'Figma did not return the requested node.');
520
+ }
521
+ const imageUrl = images[nodeId];
522
+ urls[nodeId] = typeof imageUrl === 'string' && imageUrl.length > 0 ? imageUrl : null;
470
523
  }
471
- const body = record(payload);
472
- if (!body || body.err || (typeof body.status === 'number' && body.status >= 400)) {
473
- throw new SourceImportError('invalid-response', 'Figma could not render this node.');
524
+ return urls;
525
+ }
526
+ /**
527
+ * The one renderable node carrying `tag`. All candidates go into a single
528
+ * `/images` call, which answers deleted nodes with `null`; a live but
529
+ * unrenderable second candidate therefore goes unnoticed.
530
+ */
531
+ export async function resolveTaggedNode(fileKey, tag, scale, context) {
532
+ const candidates = [
533
+ ...new Set((await listFigmaTagEntries(fileKey, context))
534
+ .filter((entry) => entry.tag === tag)
535
+ .map((entry) => entry.nodeId))
536
+ ];
537
+ if (candidates.length === 0) {
538
+ throw new SourceImportError('not-found', `No Figma node is tagged "${tag}" in this file.`);
474
539
  }
475
- const images = record(body.images);
476
- if (!images || !Object.hasOwn(images, source.nodeId)) {
477
- throw new SourceImportError('invalid-response', 'Figma did not return the requested node.');
540
+ const urls = await exportImageUrls(fileKey, candidates, scale, context);
541
+ const live = candidates.flatMap((nodeId) => {
542
+ const imageUrl = urls[nodeId];
543
+ return imageUrl ? [{ nodeId, imageUrl }] : [];
544
+ });
545
+ if (live.length === 0) {
546
+ throw new SourceImportError('not-found', `Every Figma node tagged "${tag}" (${candidates.join(', ')}) is deleted or cannot be rendered.`);
478
547
  }
479
- const imageUrl = images[source.nodeId];
480
- if (typeof imageUrl !== 'string' || imageUrl.length === 0) {
481
- throw new SourceImportError('invalid-response', 'Figma could not render the requested node.');
548
+ if (live.length > 1) {
549
+ throw new SourceImportError('ambiguous-tag', `More than one Figma node is tagged "${tag}" in this file (${live.map((node) => node.nodeId).join(', ')}).`);
482
550
  }
551
+ return live[0];
552
+ }
553
+ async function downloadRaw(source, imageUrl, context) {
483
554
  const bytes = await downloadExport(context.httpsTransport ?? requestPinnedHttps, imageUrl);
484
555
  await validatePng(bytes);
485
556
  const importSource = { importer: 'figma', parameters: source };
486
557
  return { bytes, extension: 'png', importSource };
487
558
  }
559
+ async function importNode(source, context) {
560
+ const urls = await exportImageUrls(source.fileKey, [source.nodeId], source.scale, context);
561
+ const imageUrl = urls[source.nodeId];
562
+ if (!imageUrl) {
563
+ throw new SourceImportError('invalid-response', 'Figma could not render the requested node.');
564
+ }
565
+ return downloadRaw(source, imageUrl, context);
566
+ }
567
+ async function importTag(source, context) {
568
+ const { nodeId, imageUrl } = await resolveTaggedNode(source.fileKey, source.fundusTag, source.scale, context);
569
+ return downloadRaw({ ...source, nodeId }, imageUrl, context);
570
+ }
488
571
  export const figmaSourceImporter = {
489
572
  kind: 'figma',
490
573
  label: 'Figma',
@@ -495,18 +578,16 @@ export const figmaSourceImporter = {
495
578
  if (!fileKey) {
496
579
  throw new SourceImportError('not-configured', 'Figma tag import needs a fileKey or import.figma.defaultFileKey in fundus.config.');
497
580
  }
498
- const nodeId = await resolveTagToNode(fileKey, input.tag, context);
499
- return materialize({
581
+ return importTag({
500
582
  mode: 'tag',
501
583
  fileKey,
502
584
  fundusTag: input.tag,
503
- nodeId,
504
585
  format: 'png',
505
586
  scale: input.scale ?? context.config.import.figma.defaults.scale
506
587
  }, context);
507
588
  }
508
589
  const parsed = parseFigmaSelectionUrl(input.url);
509
- return materialize({
590
+ return importNode({
510
591
  fileKey: parsed.fileKey,
511
592
  nodeId: parsed.nodeId,
512
593
  format: 'png',
@@ -515,10 +596,9 @@ export const figmaSourceImporter = {
515
596
  },
516
597
  validateSourceParameters: validateFigmaSourceParameters,
517
598
  async reimportRaw(source, context) {
518
- if (source.mode === 'tag') {
519
- const nodeId = await resolveTagToNode(source.fileKey, source.fundusTag, context);
520
- return materialize({ ...source, nodeId }, context);
521
- }
522
- return materialize(source, context);
599
+ // The stored nodeId is not consulted: the tag link decides where the tag lives now.
600
+ if (source.mode === 'tag')
601
+ return importTag(source, context);
602
+ return importNode(source, context);
523
603
  }
524
604
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fundus",
3
- "version": "0.28.0",
3
+ "version": "0.29.0",
4
4
  "type": "module",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1 +0,0 @@
1
- import{c as e,r as t}from"../chunks/BSzEzOBI.js";export{e as load_css,t as start};
@@ -1,4 +0,0 @@
1
- import{$ as e,A as t,D as n,F as r,I as i,K as a,L as o,M as s,N as c,O as l,P as u,Q as d,R as f,S as p,T as m,U as h,V as g,W as _,X as v,Z as y,a as b,b as x,c as S,dt as C,et as w,f as T,ft as E,g as D,j as O,l as ee,m as te,nt as k,ot as A,p as j,q as M,r as N,rt as P,s as ne,st as F,tt as I,u as re,ut as ie,w as ae,y as oe,z as L}from"../chunks/DLEDBLL1.js";import{l as se,n as ce}from"../chunks/BSzEzOBI.js";import"../chunks/xihTtKlq.js";import{t as le}from"../chunks/rtFCvv3j.js";import{$ as ue,F as de,I as fe,J as pe,M as me,P as he,W as ge,X as _e,Z as ve,d as ye,k as be,l as xe,m as Se,o as Ce,ot as we,st as Te,t as R,tt as Ee,u as De}from"../chunks/apKHI4vq.js";import{a as Oe,b as ke,c as Ae,d as je,f as Me,g as Ne,h as Pe,i as Fe,m as Ie,n as Le,o as Re,p as ze,r as Be,s as Ve,t as He,u as Ue,v as We,x as Ge,y as Ke}from"../chunks/CRFKGnag.js";import{a as qe}from"../chunks/g2rma9Ym.js";import{t as Je}from"../chunks/BhqXGxdj.js";import{i as Ye,n as Xe,t as Ze}from"../chunks/CzxolZCO.js";function z(e){return Array.isArray?Array.isArray(e):U(e)===`[object Array]`}function Qe(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 $e(e){return e==null?``:Qe(e)}function B(e){return typeof e==`string`}function et(e){return typeof e==`number`}function tt(e){return e===!0||e===!1||rt(e)&&U(e)==`[object Boolean]`}function nt(e){return typeof e==`object`}function rt(e){return nt(e)&&e!==null}function V(e){return e!=null}function H(e){return!e.trim().length}function U(e){return e==null?e===void 0?`[object Undefined]`:`[object Null]`:Object.prototype.toString.call(e)}var W=`Incorrect 'index' type`,G=`Invalid doc index: must be a non-negative integer within the bounds of the docs array`,it=e=>`Invalid value for key ${e}`,K=e=>`Pattern length exceeds max of ${e}.`,at=e=>`Missing ${e} property in key`,ot=e=>`Property 'weight' in key '${e}' must be a positive integer`,q=`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.`,J=Object.prototype.hasOwnProperty,st=class{constructor(e){this._keys=[],this._keyMap={};let t=0;e.forEach(e=>{let n=ct(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 ct(e){let t=null,n=null,r=null,i=1,a=null;if(B(e)||z(e))r=e,t=lt(e),n=ut(e);else{if(!J.call(e,`name`))throw Error(at(`name`));let o=e.name;if(r=o,J.call(e,`weight`)&&e.weight!==void 0&&(i=e.weight,i<=0))throw Error(ot(ut(o)));t=lt(o),n=ut(o),a=e.getFn??null}return{path:t,id:n,weight:i,src:r,getFn:a}}function lt(e){return z(e)?e:e.split(`.`)}function ut(e){return z(e)?e.join(`.`):e}function dt(e,t){let n=[],r=!1,i=(e,t,a,o)=>{if(V(e))if(!t[a])n.push(o===void 0?e:{v:e,i:o});else{let s=e[t[a]];if(!V(s))return;if(a===t.length-1&&(B(s)||et(s)||tt(s)||typeof s==`bigint`))n.push(o===void 0?$e(s):{v:$e(s),i:o});else if(z(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,B(t)?t.split(`.`):t,0),r?n:n[0]}var ft={includeMatches:!1,findAllMatches:!1,minMatchCharLength:1},pt={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},Y={location:0,threshold:.6,distance:100},mt={useExtendedSearch:!1,useTokenSearch:!1,tokenize:void 0,tokenMatch:`any`,getFn:dt,ignoreLocation:!1,ignoreFieldNorm:!1,fieldNormWeight:1},X=Object.freeze({...pt,...ft,...Y,...mt});function ht(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 gt=class{constructor({getFn:e=X.getFn,fieldNormWeight:t=X.fieldNormWeight}={}){this.norm=ht(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(B(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(G);if(B(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(G);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!V(e)||H(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(V(i)){if(z(i)){let e=[];for(let t=0,n=i.length;t<n;t+=1){let n=i[t];if(V(n)){if(B(n)){if(!H(n)){let r={v:n,i:t,n:this.norm.get(n)};e.push(r)}}else if(V(n.v)){let t=B(n.v)?n.v:$e(n.v);if(!H(t)){let r={v:t,i:n.i,n:this.norm.get(t)};e.push(r)}}}}n.$[t]=e}else if(B(i)&&!H(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 _t(e,t,{getFn:n=X.getFn,fieldNormWeight:r=X.fieldNormWeight}={}){let i=new gt({getFn:n,fieldNormWeight:r});return i.setKeys(e.map(ct)),i.setSources(t),i.create(),i}function vt(e,{getFn:t=X.getFn,fieldNormWeight:n=X.fieldNormWeight}={}){let{keys:r,records:i}=e,a=new gt({getFn:t,fieldNormWeight:n});return a.setKeys(r),a.setIndexRecords(i),a}function Z(e=[],t=X.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 yt(e,t,n,{location:r=X.location,distance:i=X.distance,threshold:a=X.threshold,findAllMatches:o=X.findAllMatches,minMatchCharLength:s=X.minMatchCharLength,includeMatches:c=X.includeMatches,ignoreLocation:l=X.ignoreLocation}={}){if(t.length>32)throw Error(K(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,C=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]&C&&(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 w={isMatch:m>=0,score:Math.max(.001,b)};if(g){let e=Z(_,s);e.length?c&&(w.indices=e):w.isMatch=!1}return w}function bt(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 xt(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 St={ł:`l`,Ł:`L`,đ:`d`,Đ:`D`,ø:`o`,Ø:`O`,ħ:`h`,Ħ:`H`,ŧ:`t`,Ŧ:`T`,ı:`i`,ß:`ss`},Ct=RegExp(`[`+Object.keys(St).join(``)+`]`,`g`),wt=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(Ct,e=>St[e]):e=>e,Tt=class{constructor(e,{location:t=X.location,threshold:n=X.threshold,distance:r=X.distance,includeMatches:i=X.includeMatches,findAllMatches:a=X.findAllMatches,minMatchCharLength:o=X.minMatchCharLength,isCaseSensitive:s=X.isCaseSensitive,ignoreDiacritics:c=X.ignoreDiacritics,ignoreLocation:l=X.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?wt(e):e,this.pattern=e,this.chunks=[],!this.pattern.length)return;let u=(e,t)=>{this.chunks.push({pattern:e,alphabet:bt(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?wt(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}=yt(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=xt(u)),p}},Et=new Set([`fuzzy`,`include`]);function Dt(e){return e.startsWith(`inverse`)}var Ot=[{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 Tt(e,{location:t.location??X.location,threshold:t.threshold??X.threshold,distance:t.distance??X.distance,includeMatches:t.includeMatches??X.includeMatches,findAllMatches:t.findAllMatches??X.findAllMatches,minMatchCharLength:t.minMatchCharLength??X.minMatchCharLength,isCaseSensitive:t.isCaseSensitive??X.isCaseSensitive,ignoreDiacritics:t.ignoreDiacritics??X.ignoreDiacritics,ignoreLocation:t.ignoreLocation??X.ignoreLocation});return{type:`fuzzy`,search(e){return n.searchIn(e)}}}}],kt=Ot.length,At=`\0`,jt=`|`;function Mt(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 Q(e,t){let n=e.match(t);return n?n[1]:null}function Nt(e,t={}){return e.replace(/\\\|/g,At).split(jt).map(e=>{let n=Mt(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<kt;){let e=Ot[o],n=Q(i,e.multiRegex);n&&(r.push(e.create(n,t)),a=!0)}if(!a)for(o=-1;++o<kt;){let e=Ot[o],n=Q(i,e.singleRegex);if(n){r.push(e.create(n,t));break}}}return r})}var Pt=class{constructor(e,{isCaseSensitive:t=X.isCaseSensitive,ignoreDiacritics:n=X.ignoreDiacritics,includeMatches:r=X.includeMatches,minMatchCharLength:i=X.minMatchCharLength,ignoreLocation:a=X.ignoreLocation,findAllMatches:o=X.findAllMatches,location:s=X.location,threshold:c=X.threshold,distance:l=X.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?wt(e):e,this.pattern=e,this.query=Nt(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?wt(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,Dt(r.type)&&(c=!0),n&&(Et.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=xt(o)),e}}return{isMatch:!1,score:1}}},Ft=[];function It(...e){Ft.push(...e)}function Lt(e,t){for(let n=0,r=Ft.length;n<r;n+=1){let r=Ft[n];if(r.condition(e,t))return new r(e,t)}return new Tt(e,t)}var Rt={AND:`$and`,OR:`$or`},zt={PATH:`$path`,PATTERN:`$val`},Bt=e=>!!(e[Rt.AND]||e[Rt.OR]),Vt=e=>!!e[zt.PATH],Ht=e=>!z(e)&&nt(e)&&!Bt(e),Ut=e=>({[Rt.AND]:Object.keys(e).map(t=>({[t]:e[t]}))});function Wt(e,t,{auto:n=!0}={}){let r=e=>{if(B(e)){let r={keyId:null,pattern:e};return n&&(r.searcher=Lt(e,t)),r}let i=Object.keys(e),a=Vt(e);if(!a&&i.length>1&&!Bt(e))return r(Ut(e));if(Ht(e)){let r=a?e[zt.PATH]:i[0],o=a?e[zt.PATTERN]:e[r];if(!B(o))throw Error(it(r));let s={keyId:ut(r),pattern:o};return n&&(s.searcher=Lt(o,t)),s}let o={children:[],operator:i[0]};return i.forEach(t=>{let n=e[t];z(n)&&n.forEach(e=>{o.children.push(r(e))})}),o};return Bt(e)||(e=Ut(e)),r(e)}function Gt(e,{ignoreFieldNorm:t=X.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 Kt(e,{ignoreFieldNorm:t=X.ignoreFieldNorm}){e.forEach(e=>{e.score=Gt(e.matches,{ignoreFieldNorm:t})})}var qt=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 Jt(e){let t=[];return e.matches.forEach(e=>{if(!V(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 Yt(e,t,{includeMatches:n=X.includeMatches,includeScore:r=X.includeScore}={}){return e.map(e=>{let{idx:i}=e,a={item:t[i],refIndex:i};return n&&(a.matches=Jt(e)),r&&(a.score=e.score),a})}var Xt=/[\p{L}\p{M}\p{N}_]+/gu,Zt=new WeakSet;function Qt(e){Zt.has(e)||(Zt.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 $t(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||Qt(e),t=>t.match(e)||[]):e=>e.match(Xt)||[]}function en({isCaseSensitive:e=!1,ignoreDiacritics:t=!1,tokenize:n}={}){let r=$t(n);return{tokenize(n){return e||(n=n.toLowerCase()),t&&(n=wt(n)),r(n)}}}var tn=class{static condition(e,t){return t.useTokenSearch}constructor(e,t){this.options=t,this.analyzer=en({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 Tt(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=xt(t)),this.combineAll&&(this.useMask?c.matchedMask=a:c.matchedTerms=o,c.termCount=this.numTerms),c}};function nn(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 rn(e,t,n,r){let{i,v:a,$:o}=t;if(a!==void 0){nn(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)nn(e,t.v,i,r);else nn(e,n.v,i,r)}}function an(e,t,n){let r={fieldCount:0,df:new Map,docFieldCount:new Map,docTermFieldHits:new Map};for(let i of e)rn(r,i,t,n);return r}function on(e,t,n,r){rn(e,t,n,r)}function sn(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 cn(e,t){if(t.length===0)return;let n=Array.from(new Set(t)).sort((e,t)=>e-t);for(let t of n)sn(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 ln=class{constructor(e,t,n){this.options={...X,...t},this.options.useExtendedSearch,this.options.useTokenSearch,this._keyStore=new st(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=Lt(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 gt))throw Error(W);if(this._myIndex=t||_t(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight}),this.options.useTokenSearch){let e=en({isCaseSensitive:this.options.isCaseSensitive,ignoreDiacritics:this.options.ignoreDiacritics,tokenize:this.options.tokenize});this._invertedIndex=an(this._myIndex.records,this._myIndex.keys.length,e)}this._invalidateSearcherCache()}add(e){if(!V(e))return;this._docs.push(e);let t=this._myIndex.add(e,this._docs.length-1);if(this._invertedIndex&&t){let e=en({isCaseSensitive:this.options.isCaseSensitive,ignoreDiacritics:this.options.ignoreDiacritics,tokenize:this.options.tokenize});on(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&&cn(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(G);this._invertedIndex&&cn(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(B(e)&&!e.trim()){let e=this._docs.map((e,t)=>({item:e,refIndex:t}));return et(n)&&n>-1&&(e=e.slice(0,n)),e}let c=et(n)&&n>0&&B(e),l;if(c){let t=new qt(n);B(this._docs[0])?this._searchStringList(e,{heap:t,ignoreFieldNorm:s}):this._searchObjectList(e,{heap:t,ignoreFieldNorm:s}),l=t.extractSorted(o)}else l=B(e)?B(this._docs[0])?this._searchStringList(e):this._searchObjectList(e):this._searchLogical(e),Kt(l,{ignoreFieldNorm:s}),a&&l.sort(o),et(n)&&n>-1&&(l=l.slice(0,n));return Yt(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(!V(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=Gt(r.matches,{ignoreFieldNorm:n}),t.shouldInsert(r.score)&&t.insert(r)):o.push(r)}}}),o}_searchLogical(e){let t=Wt(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===Rt.AND)return[]}return o},r=this._myIndex.records,i=new Map,a=[];return r.forEach(({$:e,i:r})=>{if(V(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(!V(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=Gt(r.matches,{ignoreFieldNorm:n}),t.shouldInsert(r.score)&&t.insert(r)):s.push(r)}}),s}_findMatches({key:e,value:t,searcher:n}){if(!V(t))return[];let r=[];if(z(t))t.forEach(({v:t,i,n:a})=>{if(!V(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}};ln.version=`7.4.2`,ln.createIndex=_t,ln.parseIndex=vt,ln.config=X,ln.match=function(e,t,n){if(n&&n.useTokenSearch)throw Error(q);return Lt(e,{...X,...n}).searchIn(t)},ln.parseQuery=Wt,It(Pt),It(tn),ln.use=function(...e){e.forEach(e=>It(e))};var un=ln;function dn(e,t){return t.length===0?!0:e===`edited`?t.includes(`changed`):e===`new`&&t.includes(`new`)}function fn(e){return JSON.stringify(e.map(e=>e.id).sort())}function pn(e){return e.requestStatus===`idle`||e.requestedAssetSetKey!==e.assetSetKey||e.requestedRefreshRevision!==e.refreshRevision}function mn(e,t){return t===`all`||e===`unused`}function hn(e){return Number(e.view===`duplicates`)+Number(e.type.length>0)+Number(e.manifest.length>0)+Number(e.changes.length>0)+Number(e.usageAvailable&&e.usage!==`all`)+Number(e.warningsOnly)}function gn(e,t=!1){return t||e.defaultPrevented||e.isComposing||e.altKey||!e.metaKey&&!e.ctrlKey||e.key.toLowerCase()!==`a`?null:e.shiftKey?`deselect-all`:`select-all`}function _n(e){let t=new Map(e.map(e=>[e.id,e])),n=new Map;for(let r of e){if(r.proxy===null){n.set(r.id,null);continue}let e=0,i=new Set([r.id]),a=[r];for(let n of a){e+=n.proxy?.fileSize??0;for(let e of n.references.outgoing){if(i.has(e.assetId))continue;i.add(e.assetId);let n=t.get(e.assetId);n&&a.push(n)}}n.set(r.id,e)}return n}var vn=new Set([`id`,`folder`,`type`,`source`,`size`,`gitStatus`,`warnings`]),yn={column:`id`,direction:`asc`};function bn(e,t){return e.column===t?{column:t,direction:e.direction===`asc`?`desc`:`asc`}:{column:t,direction:`asc`}}function $(e){return e.warnings.length+ +(e.duplicateIds.length>0)}function xn(e){return e===`new`?0:e===`edited`?1:2}function Sn(e){let t=Ie(e);return t===`file`?0:t===`figma-link`?1:2}function Cn(e,t,n){switch(n){case`id`:return e.id.localeCompare(t.id);case`folder`:return e.folder.localeCompare(t.folder);case`type`:return e.type.localeCompare(t.type);case`source`:return Sn(e)-Sn(t);case`gitStatus`:return xn(e.gitStatus)-xn(t.gitStatus);case`warnings`:return $(e)-$(t)}}function wn(e,t,n){let r=t.direction===`asc`?1:-1,i=(e,t)=>e.id.localeCompare(t.id);return[...e].sort((e,a)=>{if(t.column===`size`){let t=n.get(e.id)??null,o=n.get(a.id)??null;if(t===null||o===null)return t===null?o===null?i(e,a):1:-1;let s=(t-o)*r;return s===0?i(e,a):s}let o=Cn(e,a,t.column)*r;return o===0?i(e,a):o})}var Tn=`fundus-library-view-mode`,En=`fundus-library-table-sort`,Dn=`fundus-library-table-preview-height`;function On(e){return e===`card`||e===`table`?e:`card`}function kn(e){let t=e?.split(`:`)??[];if(t.length!==2)return{...yn};let[n,r]=t;return!vn.has(n)||r!==`asc`&&r!==`desc`?{...yn}:{column:n,direction:r}}function An(e){return`${e.column}:${e.direction}`}function jn(e){let t=Number.parseInt(e??``,10);return Number.isFinite(t)?Math.min(96,Math.max(24,t)):24}function Mn(e,t,n,r){if(!e.dataTransfer||n<2||t.length<2)return;let i=document.createElement(`div`),a=44/(t.length-1),o=Math.min(180,Math.max(r,t[0].offsetWidth)),s=t[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,n]of t.entries()){let t=n.cloneNode(!0);t.querySelector(`.asset-select`)?.remove(),t.removeAttribute(`href`),t.setAttribute(`aria-hidden`,`true`),Object.assign(t.style,{position:`absolute`,left:`${e*a}px`,top:`${e*a}px`,width:`${o}px`,height:`${s}px`,boxSizing:`border-box`,opacity:`1`}),i.append(t)}let c=document.createElement(`span`);c.textContent=String(n),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())}var Nn=(e,t)=>e.id.localeCompare(t.id);function Pn(e){let t=new Map(e.map(e=>[e.id,e])),n=new Map(e.map(e=>[e.id,new Set(e.duplicateIds)])),r=new Set(t.keys()),i=[];for(let a of[...e].sort(Nn)){if(!r.delete(a.id))continue;let e=[],o=[a];for(;o.length>0;){let i=o.pop();if(i){e.push(i);for(let e of n.get(i.id)??[]){let a=t.get(e);!a||!n.get(e)?.has(i.id)||!r.delete(e)||o.push(a)}}}i.push(e.sort(Nn))}return i}function Fn(e,t){let n=t.trim();if(n===``)return e;let r=e.findIndex(e=>e.id===n);return r<=0?e:[e[r],...e.slice(0,r),...e.slice(r+1)]}function In(e,t){let n=t.trim();if(n===``)return e;let r=[],i=[];for(let t of e)t.assets.some(e=>e.id===n)?r.push({...t,assets:Fn(t.assets,n)}):i.push(t);return[...r,...i]}var Ln=u(`<button role="menuitem" class="svelte-109nkvw">Rename</button>`),Rn=u(`<button role="menuitem" class="svelte-109nkvw">Refresh</button>`),zn=u(`<div class="context-menu svelte-109nkvw" role="menu" aria-label="Asset actions" tabindex="-1"><!> <!> <!> <button class="danger svelte-109nkvw" role="menuitem"> </button> <hr class="svelte-109nkvw"/> <!></div>`);function Bn(n,r){F(r,!0);let i=P(()=>Math.max(8,Math.min(r.x,window.innerWidth-176))),o=P(()=>r.assetCount===1&&r.copyOptions.length>0),c=P(()=>2+ +!!g(o)+ +!!r.onRename+ +!!r.onRefresh),l=P(()=>Math.max(8,Math.min(r.y,window.innerHeight-(g(c)*32+17)))),u=/Mac|iPhone|iPad/.test(navigator.platform)?`Open in Finder`:/Win/.test(navigator.platform)?`Open in Explorer`:`Open in File Manager`;function d(e){e(),r.onClose()}var p=zn();L(`click`,v,function(...e){r.onClose?.apply(this,e)}),L(`blur`,v,function(...e){r.onClose?.apply(this,e)}),L(`keydown`,v,e=>e.key===`Escape`&&r.onClose()),L(`resize`,v,function(...e){r.onClose?.apply(this,e)}),L(`scroll`,v,function(...e){r.onClose?.apply(this,e)});let m;var h=y(p),_=e=>{{let t=P(()=>[r.copyOptions.slice(0,1).map(e=>({label:e,value:e})),r.copyOptions.slice(1).map(e=>({label:e,value:e}))]);Ve(e,{label:`Copy Asset ID`,get sections(){return g(t)},alwaysSubmenu:!0,onSelect:e=>d(()=>r.onCopy(e))})}};t(h,e=>{g(o)&&e(_)});var b=e(h,2),x=e=>{var t=Ln();f(`click`,t,()=>d(r.onRename)),s(e,t)};t(b,e=>{r.onRename&&e(x)});var S=e(b,2),w=e=>{var t=Rn();f(`click`,t,()=>d(r.onRefresh)),s(e,t)};t(S,e=>{r.onRefresh&&e(w)});var T=e(S,2),E=y(T,!0);C(T);var D=e(T,4);{let e=P(()=>[[{label:`Raw`,value:`raw`},{label:`Proxy`,value:`proxy`,disabled:!r.hasProxy,title:r.hasProxy?void 0:`No proxy is available for this asset.`}]]);Ve(D,{get label(){return u},get sections(){return g(e)},alwaysSubmenu:!0,onSelect:e=>d(()=>r.onReveal(e))})}C(p),a(()=>{m=oe(p,``,m,{left:`${g(i)}px`,top:`${g(l)}px`}),O(E,r.assetCount===1?`Delete Asset`:`Delete ${r.assetCount} Assets`)}),f(`contextmenu`,p,e=>e.preventDefault()),f(`click`,T,()=>d(r.onDelete)),s(n,p),A()}o([`contextmenu`,`click`]);var Vn=u(`<div class="backdrop svelte-10soaow" role="presentation"><div class="dialog svelte-10soaow" role="dialog" aria-modal="true" tabindex="-1"><h2 class="svelte-10soaow"> </h2> <p role="status" aria-live="polite" class="svelte-10soaow"> </p> <div class="progress svelte-10soaow" role="progressbar" aria-valuemin="0"><span class="svelte-10soaow"></span></div></div></div>`);function Hn(t,n){F(n,!0);let r,i=P(()=>Math.max(1,n.max)),o=P(()=>Math.min(g(i),Math.max(0,n.value))),c=P(()=>g(o)/g(i)*100);N(()=>r.focus());var l=Vn(),u=y(l),d=y(u),p=y(d,!0);C(d);var m=e(d,2),h=y(m,!0);C(m);var _=e(m,2),v=y(_);let b;C(_),C(u),ne(u,e=>r=e,()=>r),C(l),a(()=>{j(u,`aria-label`,n.title),O(p,n.title),O(h,n.message),j(_,`aria-valuemax`,g(i)),j(_,`aria-valuenow`,g(o)),b=oe(v,``,b,{width:`${g(c)}%`})}),f(`keydown`,u,e=>{e.preventDefault(),e.stopPropagation()}),s(t,l),A()}o([`keydown`]);var Un=u(`<span class="emoji svelte-1b4m5oj"> </span>`),Wn=u(`<span><!> <span class="name svelte-1b4m5oj"> </span></span>`);function Gn(n,r){F(r,!0);let i=b(r,`variant`,3,`chip`),o=b(r,`passive`,3,!1),c=b(r,`via`,19,()=>[]),l=P(()=>R.manifestAppearance(r.name)),u=P(()=>g(l).color??`var(--accent)`),d=P(()=>o()?`${r.name} — passive member${c().length>0?`, via ${c().join(`, `)}`:``}`:r.name);var f=Wn();let p;var m=y(f),h=e=>{var t=Un(),n=y(t,!0);C(t),a(()=>O(n,g(l).emoji)),s(e,t)};t(m,e=>{g(l).emoji&&e(h)});var _=e(m,2),v=y(_,!0);C(_),C(f),a(()=>{p=x(f,1,`manifest-label ${i()??``}`,`svelte-1b4m5oj`,p,{passive:o()}),oe(f,`--manifest-color: ${g(u)??``}`),j(f,`title`,g(d)),O(v,r.name)}),s(n,f),A()}function Kn(e){return[e.id,...e.manifests.map(t=>`${t}.${e.id}`)]}async function qn(e,t,n){let r=[...new Set(e)],i=[];for(let[e,a]of r.entries()){n(a,e+1,r.length);try{await t(a)}catch(e){i.push({assetId:a,message:e instanceof Error?e.message:String(e)})}}return{assetCount:r.length,failures:i}}var Jn=u(`<!>`,1),Yn=u(`<div><span class="icon-slot svelte-dr99ka"><!></span> <select class="svelte-dr99ka"><!></select></div>`);function Xn(t,n){F(n,!0);let r=b(n,`value`,15),i=b(n,`active`,3,!1);var o=Yn();let c;var l=y(o);qe(y(l),{get name(){return n.icon},size:14}),C(l);var u=e(l,2);re(u,()=>{var e=y(u),t=Jn();m(d(t),()=>n.children),s(e,t)}),C(o),a(()=>{c=x(o,1,`browse-select control svelte-dr99ka`,null,c,{"filter-active":i()}),j(l,`title`,n.label),j(u,`aria-label`,n.label)}),f(`change`,u,()=>n.onChange?.(r())),D(u,r),s(t,o),A()}o([`change`]);var Zn=u(`<span class="selected-count svelte-1yxb8yh"> </span>`),Qn=u(`<button type="button" aria-haspopup="dialog"><span class="icon-slot svelte-1yxb8yh"><!></span> <span class="summary svelte-1yxb8yh"> </span> <!> <!></button>`),$n=u(`<label><input type="checkbox" class="svelte-1yxb8yh"/> <span class="svelte-1yxb8yh"> </span></label>`),er=u(`<div class="multi-select-menu svelte-1yxb8yh"><div class="menu-header svelte-1yxb8yh"><span> </span> <button type="button" class="svelte-1yxb8yh">Clear</button></div> <div class="options svelte-1yxb8yh" role="group"></div></div>`);function tr(r,i){F(i,!0);let o=k(!1),c=null,l=!1,u=new Set,d=!1,m,h=P(()=>i.selected.length===0?i.allLabel:i.selected.length===1?i.options.find(e=>e.value===i.selected[0])?.label??i.selected[0]:`${i.selected.length} selected`);function _(e){let t=i.selected.includes(e)?i.selected.filter(t=>t!==e):[...i.selected,e];i.onChange?.(i.options.filter(e=>t.includes(e.value)).map(e=>e.value))}function b(e){u.has(e)!==l&&(l?u.add(e):u.delete(e),i.onChange?.(i.options.filter(e=>u.has(e.value)).map(e=>e.value)))}function S(e,t){!e.isPrimary||e.button!==0||(e.preventDefault(),m&&clearTimeout(m),c=e.pointerId,l=!i.selected.includes(t),u=new Set(i.selected),d=!0,b(t))}function w(e,t){e.pointerId===c&&b(t)}function E(e){e.pointerId===c&&(c=null,m=setTimeout(()=>{d=!1},0))}function D(e){d&&(e.preventDefault(),d=!1,m&&clearTimeout(m))}function ee(e,t){let n=t.target?.closest(`[data-option-value]`);return n&&e.contains(n)?n.dataset.optionValue:void 0}function M(e){function t(t){let n=ee(e,t);n!==void 0&&S(t,n)}function n(t){let n=ee(e,t);n!==void 0&&w(t,n)}return e.addEventListener(`pointerdown`,t),e.addEventListener(`pointerover`,n),e.addEventListener(`click`,D),{destroy(){e.removeEventListener(`pointerdown`,t),e.removeEventListener(`pointerover`,n),e.removeEventListener(`click`,D)}}}L(`pointerup`,v,E),L(`pointercancel`,v,E),Ze(r,{get label(){return i.label},get open(){return g(o)},set open(e){I(o,e,!0)},trigger:(n,r)=>{let o=()=>(r?.()).toggle,c=()=>(r?.()).open;var l=Qn();let u;var d=y(l);qe(y(d),{get name(){return i.icon},size:14}),C(d);var p=e(d,2),m=y(p,!0);C(p);var _=e(p,2),v=e=>{var t=Zn(),n=y(t,!0);C(t),a(()=>{j(t,`aria-label`,`${i.selected.length} selected`),O(n,i.selected.length)}),s(e,t)};t(_,e=>{i.selected.length>1&&e(v)}),qe(e(_,2),{name:`chevron-down`,size:12}),C(l),a(()=>{u=x(l,1,`multi-select-trigger control svelte-1yxb8yh`,null,u,{"filter-active":i.selected.length>0}),j(l,`aria-expanded`,c()),j(d,`title`,i.label),O(m,g(h))}),f(`click`,l,function(...e){o()?.apply(this,e)}),s(n,l)},children:(t,r)=>{var o=er(),c=y(o),l=y(c),u=y(l,!0);C(l);var d=e(l,2);C(c);var m=e(c,2);n(m,21,()=>i.options,e=>e.value,(t,n)=>{var r=$n();let o;var c=y(r);T(c);var l=e(c,2),u=y(l,!0);C(l),C(r),a((e,t)=>{j(r,`data-option-value`,g(n).value),o=x(r,1,`svelte-1yxb8yh`,null,o,e),te(c,t),O(u,g(n).label)},[()=>({selected:i.selected.includes(g(n).value)}),()=>i.selected.includes(g(n).value)]),f(`change`,c,()=>_(g(n).value)),s(t,r)}),C(m),p(m,e=>M?.(e)),C(o),a(()=>{O(u,i.label),d.disabled=i.selected.length===0,j(m,`aria-label`,i.label)}),f(`click`,d,()=>i.onChange?.([])),s(t,o)},$$slots:{trigger:!0,default:!0}}),A()}o([`click`,`change`]);var nr=u(`<label><span class="icon-slot svelte-sa6meb"><input type="checkbox" class="svelte-sa6meb"/></span> <span class="value svelte-sa6meb"> </span></label>`);function rr(t,n){F(n,!0);let r=b(n,`checked`,15,!1);var i=nr();let o;var c=y(i),l=y(c);T(l),C(c);var u=e(c,2),d=y(u,!0);C(u),C(i),a(()=>{o=x(i,1,`browse-checkbox svelte-sa6meb`,null,o,{"filter-active":r()}),j(l,`aria-label`,n.label),O(d,n.text)}),f(`change`,l,e=>n.onChange?.(e)),S(l,r),s(t,i),A()}o([`change`]);var ir=u(`<th class="svelte-xqfdxl"><button type="button" class="th-sort svelte-xqfdxl"><span> </span> <svg class="sort-arrows svelte-xqfdxl" viewBox="0 0 8 12" aria-hidden="true"><path d="M4 0.5 7.2 4.5H0.8Z"></path><path d="M4 11.5 0.8 7.5h6.4Z"></path></svg></button></th>`),ar=u(`<span class="badge warning svelte-xqfdxl"> </span>`),or=u(`<span class="badge duplicate svelte-xqfdxl"> </span>`),sr=u(`<tr draggable="true"><td class="col-select svelte-xqfdxl"><input type="checkbox" class="svelte-xqfdxl"/></td><td class="col-preview svelte-xqfdxl"><div class="row-thumb checkerboard svelte-xqfdxl"><!></div></td><td class="col-id svelte-xqfdxl"><a class="svelte-xqfdxl"> </a></td><td class="col-folder svelte-xqfdxl"> </td><td class="svelte-xqfdxl"><span class="type-badge svelte-xqfdxl"> </span></td><td class="col-source svelte-xqfdxl"> </td><td class="col-size svelte-xqfdxl"> </td><td class="col-manifests svelte-xqfdxl"><!> <!></td><td class="col-git svelte-xqfdxl"><!></td><td class="col-warnings svelte-xqfdxl"><!> <!></td></tr>`),cr=u(`<table class="library-table svelte-xqfdxl"><thead class="svelte-xqfdxl"><tr><th class="col-select svelte-xqfdxl"><input type="checkbox" aria-label="Select all displayed assets" class="svelte-xqfdxl"/></th><th class="svelte-xqfdxl">Preview</th><!><!><!><!><!><th class="svelte-xqfdxl">Manifests</th><!><!></tr></thead><tbody class="svelte-xqfdxl"></tbody></table>`);function lr(r,i){F(i,!0);let o=(t,n=E,r=E)=>{var o=ir(),c=y(o),l=y(c),u=y(l,!0);C(l);var d=e(l,2),p=y(d);let m;var h=e(p);let g;C(d),C(c),C(o),a(()=>{j(o,`aria-sort`,i.sort.column===n()?i.sort.direction===`asc`?`ascending`:`descending`:void 0),O(u,r()),m=x(p,0,`svelte-xqfdxl`,null,m,{active:i.sort.column===n()&&i.sort.direction===`asc`}),g=x(h,0,`svelte-xqfdxl`,null,g,{active:i.sort.column===n()&&i.sort.direction===`desc`})}),f(`click`,c,()=>i.onSort(n())),s(t,o)},l={file:`File`,"figma-link":`Figma Link`,"figma-tag":`Figma Tag`},u=P(()=>new Set(i.selectedAssetIds)),p=P(()=>i.assets.length>0&&i.assets.every(e=>g(u).has(e.id))),m=P(()=>i.assets.some(e=>g(u).has(e.id)));function h(e,t){let n=e.target;n instanceof Element&&n.closest(`a, input, button`)!==null||(i.selectedAssetIds.length>0||e.metaKey||e.ctrlKey||e.shiftKey?i.onToggleSelection(t,e.shiftKey):i.onOpen(t))}var _=cr(),v=y(_),b=y(v),S=y(b),w=y(S);T(w),C(S);var D=e(S,2);o(D,()=>`id`,()=>`Asset ID`);var ee=e(D);o(ee,()=>`folder`,()=>`Path`);var k=e(ee);o(k,()=>`type`,()=>`Type`);var M=e(k);o(M,()=>`source`,()=>`Source`);var N=e(M);o(N,()=>`size`,()=>`Size`);var ne=e(N,2);o(ne,()=>`gitStatus`,()=>`Git status`),o(e(ne),()=>`warnings`,()=>`Warnings`),C(b),C(v);var I=e(v);n(I,21,()=>i.assets,e=>e.id,(r,o)=>{let p=P(()=>je[g(o).type]?.thumbnail),m=P(()=>i.sizesByAssetId.get(g(o).id));var _=sr();let v;var b=y(_),S=y(b);T(S),C(b);var w=e(b),E=y(w),D=y(E),ee=e=>{var t=c();ae(d(t),()=>g(p),(e,t)=>{t(e,{get asset(){return g(o)}})}),s(e,t)};t(D,e=>{g(p)&&e(ee)}),C(E),C(w);var k=e(w),A=y(k),M=y(A,!0);C(A),C(k);var N=e(k),ne=y(N,!0);C(N);var F=e(N),I=y(F),re=y(I,!0);C(I),C(F);var ie=e(F),oe=y(ie,!0);C(ie);var se=e(ie),ce=y(se,!0);C(se);var le=e(se),ue=y(le);n(ue,16,()=>g(o).manifests,e=>e,(e,t)=>{Gn(e,{get name(){return t}})}),n(e(ue,2),17,()=>g(o).passiveManifests,e=>e.manifest,(e,t)=>{Gn(e,{get name(){return g(t).manifest},passive:!0,get via(){return g(t).via}})}),C(le);var de=e(le),fe=y(de),pe=e=>{{let t=P(()=>`${g(o).gitStatus===`new`?`New`:`Edited`} on ${i.gitBranch??`the current Git branch`}`);Je(e,{get kind(){return g(o).gitStatus},get title(){return g(t)}})}};t(fe,e=>{g(o).gitStatus&&e(pe)}),C(de);var me=e(de),he=y(me),ge=e=>{var t=ar(),n=y(t);C(t),a(e=>{j(t,`title`,e),O(n,`⚠ ${g(o).warnings.length??``}`)},[()=>g(o).warnings.join(`
2
- `)]),s(e,t)};t(he,e=>{g(o).warnings.length>0&&e(ge)});var _e=e(he,2),ve=e=>{var t=or(),n=y(t);C(t),a(e=>{j(t,`title`,e),O(n,`${g(o).duplicateIds.length??``} duplicate${g(o).duplicateIds.length===1?``:`s`}`)},[()=>`Potential duplicates: ${g(o).duplicateIds.join(`, `)}`]),s(e,t)};t(_e,e=>{g(o).duplicateIds.length>0&&e(ve)}),C(me),C(_),a((e,t,n,r,i)=>{v=x(_,1,`asset-row svelte-xqfdxl`,null,v,e),j(_,`data-asset-id`,g(o).id),te(S,t),j(S,`aria-label`,`Select ${g(o).id}`),j(E,`data-drag-thumb`,g(o).id),j(A,`href`,n),O(M,g(o).id),O(ne,g(o).folder===``?`/`:g(o).folder),O(re,g(o).type),O(oe,r),O(ce,i)},[()=>({selected:g(u).has(g(o).id)}),()=>g(u).has(g(o).id),()=>i.assetHref(g(o).id),()=>l[Ie(g(o))],()=>g(m)==null?`—`:Ye(g(m))]),f(`click`,_,e=>h(e,g(o).id)),f(`contextmenu`,_,e=>i.onRowContextMenu(e,g(o).id)),L(`dragstart`,_,e=>i.onRowDragStart(e,g(o).id)),f(`click`,S,e=>{e.stopPropagation(),i.onToggleSelection(g(o).id,e.shiftKey)}),f(`click`,A,e=>{(i.selectedAssetIds.length>0||e.metaKey||e.ctrlKey||e.shiftKey)&&(e.preventDefault(),i.onToggleSelection(g(o).id,e.shiftKey))}),s(r,_)}),C(I),C(_),a(()=>{oe(_,`--table-thumb-height: ${i.thumbnailHeight}px`),te(w,g(p)),w.indeterminate=g(m)&&!g(p)}),f(`change`,w,()=>i.onToggleAll(!g(p))),s(r,_),A()}o([`click`,`change`,`contextmenu`]);var ur=u(`<span class="selection-summary svelte-1uha8ag"> </span>`),dr=u(`<button class="control selection-action svelte-1uha8ag">Clear</button>`),fr=u(`<option>Sort alphabetically</option> <option>Sort by type</option> <option>Sort by manifest</option>`,1),pr=u(`<span class="filter-count svelte-1uha8ag"> </span>`),mr=u(`<button type="button" aria-haspopup="dialog"><!> <span>Filters</span> <!></button>`),hr=u(`<div class="filter-field svelte-1uha8ag"><span class="svelte-1uha8ag">Unused</span> <!></div>`),gr=u(`<div class="filters-popover svelte-1uha8ag"><div class="popover-header svelte-1uha8ag"><strong class="svelte-1uha8ag">Filters</strong> <button type="button" class="clear-filters svelte-1uha8ag">Clear all</button></div> <div class="filter-grid svelte-1uha8ag"><div class="filter-field svelte-1uha8ag"><span class="svelte-1uha8ag">Type</span> <!></div> <div class="filter-field svelte-1uha8ag"><span class="svelte-1uha8ag">Manifest</span> <!></div> <div class="filter-field svelte-1uha8ag"><span class="svelte-1uha8ag">Git status</span> <!></div></div> <div class="filter-grid filter-options-grid svelte-1uha8ag"><div class="filter-field svelte-1uha8ag"><span class="svelte-1uha8ag">Duplicates</span> <!></div> <!> <div class="filter-field svelte-1uha8ag"><span class="svelte-1uha8ag">Warnings</span> <!></div></div></div>`),_r=r(`<rect class="svelte-1uha8ag"></rect>`),vr=u(`<button type="button" class="control primary import-trigger svelte-1uha8ag" aria-haspopup="dialog"><!> <span>Import</span> <!></button>`),yr=u(`<div class="empty svelte-1uha8ag">Loading library…</div>`),br=u(`<div class="empty svelte-1uha8ag" role="status">Analyzing asset usage…</div>`),xr=u(`<div class="empty usage-error svelte-1uha8ag" role="alert"><span> </span> <button class="control">Retry</button></div>`),Sr=u(`<div class="empty svelte-1uha8ag"> </div>`),Cr=u(`<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>`),wr=u(`<section class="section folder-section svelte-1uha8ag"><!> <div class="folder-grid svelte-1uha8ag"></div></section>`),Tr=u(`<span class="section-emoji svelte-1uha8ag"> </span>`),Er=u(`<!> `,1),Dr=u(`<span class="badge warning svelte-1uha8ag">⚠</span>`),Or=u(`<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>`),kr=u(`<section class="section svelte-1uha8ag"><!> <div class="grid svelte-1uha8ag"></div></section>`),Ar=u(`<!> <!>`,1),jr=u(`<div class="drop-hint svelte-1uha8ag"> </div>`),Mr=u(`<p class="dialog-warning svelte-1uha8ag"> </p>`),Nr=u(`<p class="dialog-warning svelte-1uha8ag">An asset with this ID already exists.</p>`),Pr=u(`<label class="dialog-row svelte-1uha8ag"><span class="svelte-1uha8ag">ID</span> <input class="control svelte-1uha8ag" spellcheck="false"/></label> <!> <!> <!> <!>`,1),Fr=u(`<p class="dialog-text svelte-1uha8ag"> </p> <!> <!>`,1),Ir=u(`<div class="library-view svelte-1uha8ag"><!> <div role="application" aria-label="Asset library — drop a file anywhere to import it"><div class="library-toolbar svelte-1uha8ag"><div class="selection-controls svelte-1uha8ag"><!> <button class="control selection-action svelte-1uha8ag">Select all</button> <!></div> <!> <!> <div><span class="search-icon-slot 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></span> <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> <div class="control view-toggle svelte-1uha8ag" role="group" aria-label="Library view"><button type="button" aria-label="Card view"><!></button> <button type="button" aria-label="Table view"><!></button></div> <label class="preview-size-control control svelte-1uha8ag"><svg class="preview-size-icon dense svelte-1uha8ag" viewBox="0 0 14 14" aria-hidden="true"></svg> <input class="preview-size-range svelte-1uha8ag" type="range" aria-label="Preview size"/> <svg class="preview-size-icon roomy svelte-1uha8ag" viewBox="0 0 14 14" aria-hidden="true"><rect x="0.75" y="0.75" width="5.25" height="5.25" class="svelte-1uha8ag"></rect><rect x="8" y="0.75" width="5.25" height="5.25" class="svelte-1uha8ag"></rect><rect x="0.75" y="8" width="5.25" height="5.25" class="svelte-1uha8ag"></rect><rect x="8" y="8" width="5.25" height="5.25" class="svelte-1uha8ag"></rect></svg></label> <!> <input type="file" hidden=""/></div> <!> <!></div></div> <!> <!> <!> <!> <!> <!> <!>`,1);function Lr(r,o){F(o,!0);let u=We(le.url),p=k(w(u.sort)),m=k(w(u.folder)),b=k(w(u.type)),S=k(w(u.manifest)),E=k(w(u.changes)),D=k(w(u.usage)),N=k(w({status:`idle`})),re=new Ge(e=>{I(N,e,!0)}),Ie=!1,Ve=null,Ye=-1,z=k(w(u.query)),Qe=k(w(u.warningsOnly)),$e=k(w(u.view)),B=k(!1),et=k(!1),tt=k(!1),nt=k(null),rt=k(null),V=k(``),H=k(null),U=k(null),W=k(null),G=k(``),it=k(void 0),K=k(w([])),at=k(null),ot=k(null),q=k(!1),J=k(null),st=0,ct=k(null),lt=0,ut=k(null),dt=0,ft=k(null),pt=0,Y=k(w([])),mt=k(null),X=k(null),ht=k(void 0),gt=k(void 0),_t=`fundus-library-preview-card-width`,vt=k(w(kt())),Z=k(w(At())),yt=k(w(jt())),bt=k(w(Mt())),xt=Se().join(`,`),St=/Mac|iPhone|iPad/.test(navigator.platform)?`⌘K`:`Ctrl K`,Ct=P(()=>g(Z)===`card`?64:24),wt=P(()=>g(Z)===`card`?368:96),Tt=P(()=>g(Z)===`card`?8:4),Et=P(()=>g(Z)===`card`?g(vt):g(bt)),Dt=P(()=>(g(Et)-g(Ct))/(g(wt)-g(Ct))*100),Ot=P(()=>hn({view:g($e),type:g(b),manifest:g(S),changes:g(E),usage:g(D),usageAvailable:R.usageAvailable===!0,warningsOnly:g(Qe)}));function kt(){try{let e=Number.parseInt(localStorage.getItem(_t)??``,10);return Number.isFinite(e)?Math.min(368,Math.max(64,e)):160}catch{return 160}}function At(){try{return On(localStorage.getItem(Tn))}catch{return On(null)}}function jt(){try{return kn(localStorage.getItem(En))}catch{return kn(null)}}function Mt(){try{return jn(localStorage.getItem(Dn))}catch{return jn(null)}}M(()=>{try{localStorage.setItem(_t,String(g(vt)))}catch{}}),M(()=>{try{localStorage.setItem(Tn,g(Z))}catch{}}),M(()=>{try{localStorage.setItem(En,An(g(yt)))}catch{}}),M(()=>{try{localStorage.setItem(Dn,String(g(bt)))}catch{}}),M(()=>{let e=We(le.url);_(()=>yn(e))});let Q=P(()=>R.state?.assets??[]),Nt=P(()=>g(W)!==null&&g(G)!==g(W)?be(g(G)):null),Pt=P(()=>g(W)!==null&&g(Q).some(e=>e.id!==g(W)&&e.id===g(G))),Ft=P(()=>g(W)!==null&&g(G)!==g(W)&&g(Nt)===null&&!g(Pt)&&!g(q)),It=P(()=>g(W)===null?[]:(g(Q).find(e=>e.id===g(W))?.references.incoming??[]).map(e=>`${e.assetId}.${e.field} → ${g(W)}`)),Lt=P(()=>new Set(g(K))),Rt=P(()=>g(K).flatMap(e=>(g(Q).find(t=>t.id===e)?.references.incoming??[]).filter(e=>!g(Lt).has(e.assetId)).map(t=>`${t.assetId}.${t.field} → ${e}`))),zt=P(()=>R.state?.library.folders??[]),Bt=P(()=>R.manifestNames),Vt=P(()=>[...new Set(g(Q).map(e=>e.type))].sort()),Ht=P(()=>g(Vt).map(e=>({value:e,label:e}))),Ut=P(()=>g(Bt).map(e=>{let t=R.manifestAppearance(e).emoji;return{value:e,label:t?`${t} ${e}`:e}})),Wt=[{value:`changed`,label:`Changed`},{value:`new`,label:`New`}],Gt=P(()=>g(z).trim()),Kt=P(()=>new un(g(Q),{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})),qt=P(()=>g(Gt)===``?null:new Set(g(Kt).search(g(Gt)).map(({item:e})=>e.id))),Jt=P(()=>g(zt).map(e=>({path:e,name:me(e)}))),Yt=P(()=>new un(g(Jt),{keys:[{name:`name`,weight:.7},{name:`path`,weight:.3}],threshold:.35,ignoreLocation:!0,ignoreDiacritics:!0})),Xt=P(()=>g(Gt)===``?null:new Set(g(Yt).search(g(Gt)).map(({item:e})=>e.path))),Zt=P(()=>g(N).status===`resolved`||g(N).status===`refreshing`||g(N).status===`failed`&&g(N).value?new Map(g(N).value?.assets.map(e=>[e.assetId,e.status])):new Map),Qt=P(()=>fn(g(Q)));M(()=>{if(!(R.usageAvailable===!0&&g(D)===`unused`)){g(N).status!==`idle`&&re.cancel(),Ve=null,Ye=-1;return}let e=R.usageRefreshRevision;if(!R.saving&&pn({requestStatus:g(N).status,requestedAssetSetKey:Ve,assetSetKey:g(Qt),requestedRefreshRevision:Ye,refreshRevision:e})){let t=Ie;Ie=!0,Ve=g(Qt),Ye=e,re.run(()=>pe({forceFresh:t}),{retainResult:!0})}});let $t=P(()=>g(m)===null?[]:g(zt).filter(e=>fe(e)===g(m)).sort((e,t)=>e.localeCompare(t))),en=P(()=>g(Xt)===null?g($t):g($t).filter(e=>g(Xt).has(e)));M(()=>{R.state&&g(m)!==null&&g(m)!==``&&!g(zt).includes(g(m))&&vn(g(m))});let tn=P(()=>g(Q).filter(e=>!(g(m)!==null&&e.folder!==g(m)||g(qt)!==null&&!g(qt).has(e.id)||g(b).length>0&&!g(b).includes(e.type)||!dn(e.gitStatus,g(E))||R.usageAvailable===!0&&g(D)===`unused`&&!mn(g(Zt).get(e.id),g(D))||g(S).length>0&&!g(S).some(t=>e.manifests.includes(t)||e.passiveManifests.some(e=>e.manifest===t))||g(Qe)&&e.warnings.length===0||g($e)===`duplicates`&&e.duplicateIds.length===0))),nn=(e,t)=>e.id.localeCompare(t.id),rn=P(()=>{let e=[...g(tn)].sort(nn);if(g($e)===`duplicates`)return Pn(e).map(e=>{let t=e.map(e=>e.id);return{key:`duplicates:${t.join(`\0`)}`,heading:t.join(`, `),assets:e}});if(g(p)===`alphabetical`)return[{key:`all`,heading:null,assets:e}];if(g(p)===`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 g(Bt)){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:R.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}),an=P(()=>In(g(rn),g(Gt))),on=P(()=>_n(g(Q))),sn=P(()=>g(Z)===`table`?Fn(wn(g(tn),g(yt),g(on)),g(Gt)):[]),cn=P(()=>g(Z)===`table`?g(sn).map(e=>e.id):[...new Set(g(an).flatMap(e=>e.assets.map(e=>e.id)))]);M(()=>{let e=new Set(g(Q).map(e=>e.id)),t=g(Y).filter(t=>e.has(t));t.length!==g(Y).length&&I(Y,t,!0)});function ln(){return{folder:g(m),sort:g(p),type:g(b),manifest:g(S),changes:g(E),usage:g(D),query:g(z),warningsOnly:g(Qe),view:g($e)}}async function vn(e){await h(),g(m)===e&&R.state&&!R.state.library.folders.includes(e)&&$({folder:null},!0)}function yn(e){let t=Ke(g(m),e.folder,{selectedAssetIds:g(Y),lastSelectedAssetId:g(X)});I(Y,t.selectedAssetIds,!0),I(X,t.lastSelectedAssetId,!0),I(m,e.folder,!0),I(p,e.sort,!0),I(b,e.type,!0),I(S,e.manifest,!0),I(E,e.changes,!0),I(D,e.usage,!0),I(z,e.query,!0),I(Qe,e.warningsOnly,!0),I($e,e.view,!0)}function $(e,t){let n={...ln(),...e};yn(n);let r=ke(le.url,n);r.href!==le.url.href&&ce(r,{replaceState:t,noScroll:!0,keepFocus:!0})}function xn(){$({view:`all`,type:[],manifest:[],changes:[],usage:`all`,warningsOnly:!1},!0)}function Sn(e,t=!1){ze.begin(),$({folder:e},t)}function Cn(e,t){if(t&&g(X)!==null){let t=g(cn).indexOf(g(X)),n=g(cn).indexOf(e);if(t!==-1&&n!==-1){let r=Math.min(t,n),i=Math.max(t,n);I(Y,[...new Set([...g(Y),...g(cn).slice(r,i+1)])],!0),I(X,e,!0);return}}I(Y,g(Y).includes(e)?g(Y).filter(t=>t!==e):[...g(Y),e],!0),I(X,e,!0)}function Nn(){I(Y,[...g(cn)],!0),I(X,g(cn).at(-1)??null,!0)}function Ln(){I(Y,[],!0),I(X,null)}function Rn(e,t){let n=[...document.querySelectorAll(`.card[data-asset-id]`)];Mn(e,t.map(e=>n.find(t=>t.dataset.assetId===e)).filter(e=>e!==void 0),t.length,0)}function zn(e,t){let n=g(Y).includes(t)?g(Y):[t];e.dataTransfer?.setData(`application/x-fundus-assets`,JSON.stringify(n)),e.dataTransfer&&(e.dataTransfer.effectAllowed=`move`),Mn(e,n.map(e=>document.querySelector(`[data-drag-thumb="${CSS.escape(e)}"]`)).filter(e=>e instanceof HTMLElement),n.length,120)}function Vn(e){e.preventDefault(),I(tt,!1);let t=e.dataTransfer?.files?.[0];t&&(I(V,g(m)??``,!0),I(nt,t,!0))}function Un(e){I(V,e,!0),g(ht)?.click()}function Wn(e){lt+=1,I(ct,{id:lt,parent:e},!0)}function Jn(e){dt+=1,I(ut,{id:dt,path:e},!0)}function Yn(e){pt+=1,I(ft,{id:pt,path:e},!0)}function Zn(e){e.preventDefault(),I(U,null),I(H,{x:e.clientX,y:e.clientY,parent:g(m)??``,renamePath:null},!0)}function Qn(e,t){e.preventDefault(),e.stopPropagation(),I(U,null),I(H,{x:e.clientX,y:e.clientY,parent:t,renamePath:t},!0)}function $n(e,t){e.preventDefault(),e.stopPropagation(),I(H,null);let n=g(Y).includes(t)?[...g(Y)]:[t];g(Y).includes(t)||(I(Y,[t],!0),I(X,t,!0)),I(U,{x:e.clientX,y:e.clientY,assetIds:n,targetAssetId:t},!0)}function er(e){let t=R.assetById(e);return t!==null&&Ne(t)}function nr(e){return Pe(e.map(e=>R.assetById(e)))}async function ir(e){if(!(g(mt)!==null||e.length===0))try{let t=await qn(e,e=>R.mutateFromServer(()=>Ee(e),{dependencies:[`asset:${e}`]}),(e,t,n)=>I(mt,{assetId:e,position:t,total:n},!0));if(t.failures.length===0)return;R.error=t.failures.length===1?`Could not refresh "${t.failures[0].assetId}": ${t.failures[0].message}`:`Could not refresh ${t.failures.length} of ${t.assetCount} assets: ${t.failures.map(({assetId:e,message:t})=>`${e}: ${t}`).join(`; `)}`}finally{I(mt,null)}}function ar(e){st+=1,I(W,e,!0),I(G,e,!0),I(J,null),h().then(()=>{g(it)?.focus(),g(it)?.select()})}function or(e){st+=1,I(K,[...new Set(e)],!0),I(J,null)}async function sr(e,t){try{await we(e,t),R.error=null}catch(e){R.error=e instanceof Error?e.message:String(e)}}function cr(e){let t=R.assetById(e);return t?Kn(t):[e]}async function Lr(e){try{await navigator.clipboard.writeText(e),R.error=null}catch(e){R.error=`Could not copy asset ID: ${e instanceof Error?e.message:String(e)}`}}async function Rr(e){try{await Te(e),R.error=null}catch(e){R.error=e instanceof Error?e.message:String(e)}}function zr(){g(q)||(st+=1,I(W,null),I(K,[],!0),I(J,null))}async function Br(){if(!g(Ft)||g(W)===null)return;let e=g(W),t=g(G);I(q,!0),I(J,null);let n=R.mutate(()=>ue(e,{renameTo:t}),ye(e,{renameTo:t}),{dependencies:[`asset:${e}`,`asset:${t}`],invalidatesOnFailure:[`asset:${e}`,`asset:${t}`]});I(Y,g(Y).map(n=>n===e?t:n),!0),I(X,g(X)===e?t:g(X),!0),I(W,null);let r=++st;I(q,!1);try{await n}catch(n){let i=R.assetById(e)!==null;i&&(I(Y,g(Y).map(n=>n===t?e:n),!0),I(X,g(X)===t?e:g(X),!0)),i&&st===r&&(I(W,e,!0),I(G,t,!0),I(J,n instanceof Error?n.message:String(n),!0))}finally{I(q,!1)}}async function Vr(){if(g(K).length===0)return;let e=[...g(K)],t=[...g(Y)],n=g(X);I(q,!0),I(J,null);let r=R.mutate(()=>ge(e),Ce(e),{dependencies:e.map(e=>`asset:${e}`),invalidatesOnFailure:e.map(e=>`asset:${e}`)}),i=new Set(e);I(Y,g(Y).filter(e=>!i.has(e)),!0),g(X)!==null&&i.has(g(X))&&I(X,null);let a=[...g(Y)],o=g(X);I(K,[],!0);let s=++st;I(q,!1);try{await r}catch(r){let i=new Set(e.filter(e=>R.assetById(e)));i.size>0&&g(Y).length===a.length&&g(Y).every((e,t)=>e===a[t])&&g(X)===o&&(I(Y,t.filter(e=>i.has(e)),!0),I(X,n!==null&&i.has(n)?n:null,!0)),i.size>0&&st===s&&(I(K,e.filter(e=>i.has(e)),!0),I(J,r instanceof Error?r.message:String(r),!0))}finally{I(q,!1)}}function Hr(e){return g(Q).filter(t=>t.folder===e).length}function Ur(e){let t=e.currentTarget,n=t.files?.[0];t.value=``,n&&I(nt,n,!0)}async function Wr(e){I(nt,null),I(rt,null),await ce(se(`/asset/[id]`,{id:e}))}async function Gr(e,t){let n=e.filter(e=>R.assetById(e)?.folder!==t);if(n.length===0)return;let r=[...new Set([t,...n.flatMap(e=>{let t=R.assetById(e)?.folder;return t===void 0?[]:[t]})])],i=[...g(Y)],a=g(X),o=R.mutate(()=>_e(n,t),xe(n,t),{dependencies:[...n.map(e=>`asset:${e}`),...r.map(e=>`folder:${e}`)]});I(Y,[],!0),I(X,null);try{await o}catch{n.some(e=>R.assetById(e)?.folder!==t)&&g(Y).length===0&&g(X)===null&&(I(Y,i,!0),I(X,a,!0))}}function Kr(e,t){let n=e.dataTransfer?.types.includes(`application/x-fundus-assets`)??!1,r=Oe(e.dataTransfer?.types.includes(`application/x-fundus-folder`)??!1,g(at),t,g(zt));!n&&!r||(e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect=`move`),I(ot,t,!0))}function qr(e,t){e.preventDefault(),I(ot,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`)&&Gr(e,t)}catch{}return}let r=e.dataTransfer?.getData(`application/x-fundus-folder`);r&&Re(r,t,g(zt))&&Jr(r,t)}async function Jr(e,t){let n=de(t,me(e)),r=g(m),i=r,a=R.mutate(()=>ve(e,t),De(e,t),{dependencies:[`folder:${e}`,`folder:${t}`,`folder:${n}`],invalidatesOnFailure:[`folder:${e}`,`folder:${n}`]});g(m)!==null&&he(g(m),e)&&(i=`${n}${g(m).slice(e.length)}`,Sn(i,!0));try{await a}catch{g(m)===i&&g(zt).some(t=>he(t,e))&&Sn(r,!0)}finally{I(at,null),I(ot,null)}}function Yr(e){e&&e.play().catch(()=>{})}function Xr(e){e&&(e.pause(),e.currentTime=0)}function Zr(e){e.defaultPrevented||e.altKey||e.shiftKey||!e.metaKey&&!e.ctrlKey||e.key.toLowerCase()!==`k`||document.querySelector(`[role="dialog"]`)!==null||(e.preventDefault(),g(gt)?.focus(),g(gt)?.select())}function Qr(e){Zr(e);let t=e.target,n=gn(e,t instanceof Element&&t.closest(`input, textarea, select, [contenteditable]:not([contenteditable="false"]), [role="menu"]`)!==null||document.querySelector(`[role="dialog"]`)!==null);n!==null&&(e.preventDefault(),n===`select-all`?Nn():Ln())}var $r=Ir();L(`keydown`,v,Qr),L(`dragenter`,v,e=>{e.dataTransfer?.types.includes(`Files`)&&(e.preventDefault(),I(tt,!0))}),L(`dragover`,v,e=>{e.dataTransfer?.types.includes(`Files`)&&(e.preventDefault(),I(tt,!0))}),L(`drop`,v,Vn);var ei=d($r),ti=y(ei);Be(ti,{get selectedFolder(){return g(m)},get createRequest(){return g(ct)},get renameRequest(){return g(ut)},get deleteRequest(){return g(ft)},onSelect:Sn,onMoveAssets:(e,t)=>void Gr(e,t),get sharedDraggedFolder(){return g(at)},onFolderDragStart:e=>I(at,e,!0),onFolderDragEnd:()=>I(at,null),onContextMenu:(e,t,n,r)=>{I(U,null),I(H,{x:e,y:t,parent:n,renamePath:r},!0)}});var ni=e(ti,2);let ri;var ii=y(ni),ai=y(ii),oi=y(ai),si=e=>{var t=ur(),n=y(t);C(t),a(()=>O(n,`${g(Y).length??``} selected`)),s(e,t)};t(oi,e=>{g(Y).length>0&&e(si)});var ci=e(oi,2),li=e(ci,2),ui=e=>{var t=dr();f(`click`,t,Ln),s(e,t)};t(li,e=>{g(Y).length>0&&e(ui)}),C(ai);var di=e(ai,2),fi=t=>{Xn(t,{label:`Sort`,icon:`sort`,onChange:e=>$({sort:e},!0),get value(){return g(p)},set value(e){I(p,e,!0)},children:(t,n)=>{var r=fr(),i=d(r);i.value=i.__value=`alphabetical`;var a=e(i,2);a.value=a.__value=`type`;var o=e(a,2);o.value=o.__value=`manifest`,s(t,r)},$$slots:{default:!0}})};t(di,e=>{g(Z)===`card`&&e(fi)});var pi=e(di,2);Ze(pi,{portal:!0,surface:`panel`,label:`Filter assets`,get open(){return g(B)},set open(e){I(B,e,!0)},trigger:(n,r)=>{let i=()=>(r?.()).toggle,o=()=>(r?.()).open;var c=mr();let l;var u=y(c);qe(u,{name:`list-filter`,size:14});var d=e(u,4),p=e=>{var t=pr(),n=y(t,!0);C(t),a(()=>O(n,g(Ot))),s(e,t)};t(d,e=>{g(Ot)>0&&e(p)}),C(c),a(()=>{l=x(c,1,`control toolbar-button svelte-1uha8ag`,null,l,{active:g(Ot)>0}),j(c,`aria-expanded`,o())}),f(`click`,c,function(...e){i()?.apply(this,e)}),s(n,c)},children:(n,r)=>{var i=gr(),o=y(i),c=e(y(o),2);C(o);var l=e(o,2),u=y(l);tr(e(y(u),2),{label:`Filter by type`,icon:`asset-type`,allLabel:`All types`,get options(){return g(Ht)},get selected(){return g(b)},onChange:e=>$({type:e},!0)}),C(u);var d=e(u,2);tr(e(y(d),2),{label:`Filter by manifest`,icon:`manifest`,allLabel:`All manifests`,get options(){return g(Ut)},get selected(){return g(S)},onChange:e=>$({manifest:e},!0)}),C(d);var p=e(d,2);tr(e(y(p),2),{label:`Filter by Git status`,icon:`git-branch`,allLabel:`Any status`,get options(){return Wt},get selected(){return g(E)},onChange:e=>$({changes:e},!0)}),C(p),C(l);var m=e(l,2),h=y(m),_=e(y(h),2);{let e=P(()=>g($e)===`duplicates`);rr(_,{label:`Show duplicates only`,text:`Potential matches`,get checked(){return g(e)},onChange:e=>$({view:e.currentTarget.checked?`duplicates`:`all`},!0)})}C(h);var v=e(h,2),x=t=>{var n=hr(),r=e(y(n),2);{let e=P(()=>g(D)===`unused`);rr(r,{label:`Show unused assets only`,text:`Not referenced`,get checked(){return g(e)},onChange:e=>$({usage:e.currentTarget.checked?`unused`:`all`},!0)})}C(n),s(t,n)};t(v,e=>{R.usageAvailable===!0&&e(x)});var w=e(v,2);rr(e(y(w),2),{label:`Show warnings only`,text:`Needs attention`,get checked(){return g(Qe)},onChange:e=>{I(Qe,e.currentTarget.checked,!0),$({warningsOnly:g(Qe)},!0)}}),C(w),C(m),C(i),a(()=>c.disabled=g(Ot)===0),f(`click`,c,xn),s(n,i)},$$slots:{trigger:!0,default:!0}});var mi=e(pi,2);let hi;var gi=e(y(mi),2);T(gi),ne(gi,e=>I(gt,e),()=>g(gt));var _i=e(gi,2),vi=y(_i,!0);C(_i),C(mi);var yi=e(mi,2),bi=y(yi);let xi;qe(y(bi),{name:`layout-grid`,size:14}),C(bi);var Si=e(bi,2);let Ci;qe(y(Si),{name:`table`,size:14}),C(Si),C(yi);var wi=e(yi,2),Ti=y(wi);n(Ti,20,()=>Array(9),l,(e,t,n)=>{var r=_r();j(r,`x`,n%3*4.5+.5),a(e=>j(r,`y`,e),[()=>Math.floor(n/3)*4.5+.5]),s(e,r)}),C(Ti);var Ei=e(Ti,2);T(Ei),ie(2),C(wi);var Di=e(wi,2);Ze(Di,{align:`right`,portal:!0,padding:`compact`,label:`Import assets`,get open(){return g(et)},set open(e){I(et,e,!0)},trigger:(t,n)=>{let r=()=>(n?.()).toggle,i=()=>(n?.()).open;var o=vr(),c=y(o);qe(c,{name:`plus`,size:14}),qe(e(c,4),{name:`chevron-down`,size:12}),C(o),a(()=>j(o,`aria-expanded`,i())),f(`click`,o,function(...e){r()?.apply(this,e)}),s(t,o)},children:(e,t)=>{He(e,{onFile:()=>{I(et,!1),Un(g(m)??``)},onFigma:()=>{I(et,!1),I(rt,g(m)??``,!0)}})},$$slots:{trigger:!0,default:!0}});var Oi=e(Di,2);ne(Oi,e=>I(ht,e),()=>g(ht)),C(ii);var ki=e(ii,2),Ai=e=>{s(e,yr())},ji=e=>{s(e,br())},Mi=t=>{var n=xr(),r=y(n),i=y(r,!0);C(r);var o=e(r,2);C(n),a(()=>O(i,g(N).error)),f(`click`,o,()=>void re.run(()=>pe({forceFresh:!0}),{retainResult:!0})),s(t,n)},Ni=e=>{var t=Sr(),n=y(t,!0);C(t),a(()=>O(n,g(Q).length===0?`No assets yet — drop an image anywhere to import it.`:`Nothing matches the current filters.`)),s(e,t)},Pi=r=>{var o=Ar(),l=d(o),u=t=>{var r=wr(),o=y(r);Me(o,{children:(e,t)=>{ie(),s(e,i(`Folders`))},$$slots:{default:!0}});var c=e(o,2);n(c,20,()=>g(en),e=>e,(t,n)=>{var r=Cr();let i;var o=y(r);Fe(y(o),{size:18}),C(o);var c=e(o,2),l=y(c),u=y(l,!0);C(l);var d=e(l,2),p=y(d);C(d),C(c),ie(2),C(r),a((e,t)=>{i=x(r,1,`folder-card svelte-1uha8ag`,null,i,{"drop-target":g(ot)===n,"dragging-folder":g(at)===n}),O(u,e),O(p,`${t??``} assets`)},[()=>me(n),()=>Hr(n)]),f(`click`,r,()=>Sn(n)),f(`contextmenu`,r,e=>Qn(e,n)),L(`dragstart`,r,e=>{I(at,n,!0),e.dataTransfer?.setData(`application/x-fundus-folder`,n),e.dataTransfer&&(e.dataTransfer.effectAllowed=`move`)}),L(`dragend`,r,()=>{I(at,null),I(ot,null)}),L(`dragover`,r,e=>Kr(e,n)),L(`dragleave`,r,()=>I(ot,null)),L(`drop`,r,e=>qr(e,n)),s(t,r)}),C(c),C(r),s(t,r)};t(l,e=>{g(en).length>0&&e(u)});var p=e(l,2),m=r=>{var i=c(),o=d(i),l=e=>{{let t=P(()=>R.state?.gitBranch??null);lr(e,{get assets(){return g(sn)},get sort(){return g(yt)},get sizesByAssetId(){return g(on)},get thumbnailHeight(){return g(bt)},get selectedAssetIds(){return g(Y)},get gitBranch(){return g(t)},assetHref:e=>se(`/asset/[id]`,{id:e}),onOpen:e=>void ce(se(`/asset/[id]`,{id:e})),onSort:e=>I(yt,bn(g(yt),e),!0),onToggleSelection:Cn,onToggleAll:e=>e?Nn():Ln(),onRowContextMenu:$n,onRowDragStart:zn})}},u=r=>{var i=c();n(d(i),17,()=>g(an),e=>e.key,(r,i)=>{var o=kr(),l=y(o),u=n=>{Me(n,{children:(n,r)=>{var o=Er(),c=d(o),l=e=>{var t=Tr(),n=y(t,!0);C(t),a(()=>O(n,g(i).emoji)),s(e,t)};t(c,e=>{g(i).emoji&&e(l)});var u=e(c,1,!0);a(()=>O(u,g(i).heading)),s(n,o)},$$slots:{default:!0}})};t(l,e=>{g(i).heading&&e(u)});var p=e(l,2);n(p,21,()=>g(i).assets,e=>e.id,(r,i)=>{let o=P(()=>je[g(i).type]?.thumbnail);var l=Or();let u;var p=y(l),m=e=>{{let t=P(()=>`${g(i).gitStatus===`new`?`New`:`Edited`} on ${R.state?.gitBranch??`the current Git branch`}`);Je(e,{get kind(){return g(i).gitStatus},overlay:!0,get title(){return g(t)}})}};t(p,e=>{g(i).gitStatus&&e(m)});var h=e(p,2);T(h);var _=e(h,2),v=y(_),b=e=>{var t=c();ae(d(t),()=>g(o),(e,t)=>{t(e,{get asset(){return g(i)}})}),s(e,t)};t(v,e=>{g(o)&&e(b)}),C(_);var S=e(_,2),w=y(S),E=y(w,!0);C(w);var D=e(w,2),ee=y(D,!0);C(D),C(S);var k=e(S,2),A=y(k);n(A,16,()=>g(i).manifests,e=>e,(e,t)=>{Gn(e,{get name(){return t}})});var M=e(A,2);n(M,17,()=>g(i).passiveManifests,e=>e.manifest,(e,t)=>{Gn(e,{get name(){return g(t).manifest},passive:!0,get via(){return g(t).via}})}),n(e(M,2),16,()=>g(i).warnings,e=>e,(e,t)=>{var n=Dr();a(()=>j(n,`title`,t)),s(e,n)}),C(k),C(l),a((e,t,n)=>{u=x(l,1,`card svelte-1uha8ag`,null,u,e),j(l,`data-asset-id`,g(i).id),j(l,`href`,t),te(h,n),j(h,`aria-label`,`Select ${g(i).id}`),O(E,g(i).id),O(ee,g(i).type)},[()=>({selected:g(Y).includes(g(i).id)}),()=>se(`/asset/[id]`,{id:g(i).id}),()=>g(Y).includes(g(i).id)]),f(`contextmenu`,l,e=>$n(e,g(i).id)),f(`click`,l,e=>{(g(Y).length>0||e.metaKey||e.ctrlKey||e.shiftKey)&&(e.preventDefault(),Cn(g(i).id,e.shiftKey))}),L(`dragstart`,l,e=>{let t=g(Y).includes(g(i).id)?g(Y):[g(i).id];e.dataTransfer?.setData(`application/x-fundus-assets`,JSON.stringify(t)),e.dataTransfer&&(e.dataTransfer.effectAllowed=`move`),Rn(e,t)}),L(`focus`,l,e=>Yr(e.currentTarget.querySelector(`video`))),L(`blur`,l,e=>Xr(e.currentTarget.querySelector(`video`))),f(`click`,h,e=>{e.stopPropagation(),Cn(g(i).id,e.shiftKey)}),s(r,l)}),C(p),C(o),s(r,o)}),s(r,i)};t(o,e=>{g(Z)===`table`?e(l):e(u,-1)}),s(r,i)};t(p,e=>{g(tn).length>0&&e(m)}),s(r,o)};t(ki,e=>{R.state?R.usageAvailable===!0&&g(D)===`unused`&&g(N).status===`loading`?e(ji,1):R.usageAvailable===!0&&g(D)===`unused`&&g(N).status===`failed`?e(Mi,2):g(tn).length===0&&g(en).length===0?e(Ni,3):e(Pi,-1):e(Ai)});var Fi=e(ki,2),Ii=e=>{var t=jr(),n=y(t);C(t),a(()=>O(n,`Drop to import into ${(g(m)||`Root`)??``}`)),s(e,t)};t(Fi,e=>{g(tt)&&e(Ii)}),C(ni),C(ei);var Li=e(ei,2),Ri=e=>{{let t=P(()=>g(H).renamePath===null?void 0:()=>Jn(g(H)?.renamePath??``)),n=P(()=>g(H).renamePath===null?void 0:()=>Yn(g(H)?.renamePath??``));Le(e,{get x(){return g(H).x},get y(){return g(H).y},onReveal:()=>void Rr(g(H)?.renamePath??g(H)?.parent??``),onNewDirectory:()=>Wn(g(H)?.parent??``),get onRenameDirectory(){return g(t)},onImportFile:()=>Un(g(H)?.parent??``),onImportFigma:()=>I(rt,g(H)?.parent??``,!0),get onDeleteDirectory(){return g(n)},onClose:()=>I(H,null)})}};t(Li,e=>{g(H)&&e(Ri)});var zi=e(Li,2),Bi=e=>{{let t=P(()=>cr(g(U).targetAssetId)),n=P(()=>!!R.assetById(g(U).targetAssetId)?.proxy),r=P(()=>g(U).assetIds.length===1&&!er(g(U).targetAssetId)?()=>ar(g(U)?.assetIds[0]??``):void 0),i=P(()=>nr(g(U).assetIds)?()=>void ir(g(U)?.assetIds??[]):void 0);Bn(e,{get x(){return g(U).x},get y(){return g(U).y},get assetCount(){return g(U).assetIds.length},get copyOptions(){return g(t)},onCopy:e=>void Lr(e),get hasProxy(){return g(n)},onReveal:e=>void sr(g(U)?.targetAssetId??``,e),get onRename(){return g(r)},get onRefresh(){return g(i)},onDelete:()=>or(g(U)?.assetIds??[]),onClose:()=>I(U,null)})}};t(zi,e=>{g(U)&&e(Bi)});var Vi=e(zi,2),Hi=e=>{{let t=P(()=>`Refreshing ${g(mt).assetId}…`);Hn(e,{title:`Refreshing`,get message(){return g(t)},get value(){return g(mt).position},get max(){return g(mt).total}})}};t(Vi,e=>{g(mt)!==null&&e(Hi)});var Ui=e(Vi,2),Wi=n=>{{let r=P(()=>g(q)?`Renaming…`:`Rename`),i=P(()=>!g(Ft));Xe(n,{title:`Rename asset`,get confirmLabel(){return g(r)},get confirmDisabled(){return g(i)},get busy(){return g(q)},onConfirm:()=>void Br(),onCancel:zr,children:(n,r)=>{var i=Pr(),o=d(i),c=e(y(o),2);T(c),ne(c,e=>I(it,e),()=>g(it)),C(o);var l=e(o,2),u=e=>{var t=Mr(),n=y(t,!0);C(t),a(()=>O(n,g(Nt))),s(e,t)};t(l,e=>{g(Nt)&&e(u)});var f=e(l,2),p=e=>{s(e,Nr())};t(f,e=>{g(Pt)&&e(p)});var m=e(f,2),h=e=>{var t=Mr(),n=y(t);C(t),a(e=>O(n,`Renaming leaves ${g(It).length??``} reference(s) pointing to the old ID:
3
- ${e??``}`),[()=>g(It).join(`, `)]),s(e,t)};t(m,e=>{g(It).length>0&&e(h)});var _=e(m,2),v=e=>{var t=Mr(),n=y(t,!0);C(t),a(()=>O(n,g(J))),s(e,t)};t(_,e=>{g(J)&&e(v)}),a(()=>c.disabled=g(q)),ee(c,()=>g(G),e=>I(G,e)),s(n,i)},$$slots:{default:!0}})}};t(Ui,e=>{g(W)!==null&&e(Wi)});var Gi=e(Ui,2),Ki=n=>{{let r=P(()=>g(K).length===1?`Delete asset`:`Delete ${g(K).length} assets`),i=P(()=>g(q)?`Deleting…`:g(K).length===1?`Delete asset`:`Delete ${g(K).length} assets`);Xe(n,{get title(){return g(r)},get confirmLabel(){return g(i)},danger:!0,get busy(){return g(q)},onConfirm:()=>void Vr(),onCancel:zr,children:(n,r)=>{var i=Fr(),o=d(i),c=y(o);C(o);var l=e(o,2),u=e=>{var t=Mr(),n=y(t);C(t),a(e=>O(n,`This leaves ${g(Rt).length??``} external reference(s) dangling:
4
- ${e??``}`),[()=>g(Rt).join(`, `)]),s(e,t)};t(l,e=>{g(Rt).length>0&&e(u)});var f=e(l,2),p=e=>{var t=Mr(),n=y(t,!0);C(t),a(()=>O(n,g(J))),s(e,t)};t(f,e=>{g(J)&&e(p)}),a(e=>O(c,`Delete ${e??``}? Their raw files and proxies are removed.`),[()=>g(K).join(`, `)]),s(n,i)},$$slots:{default:!0}})}};t(Gi,e=>{g(K).length>0&&e(Ki)});var qi=e(Gi,2),Ji=e=>{Ue(e,{get file(){return g(nt)},get folder(){return g(V)},onDone:e=>void Wr(e),onCancel:()=>I(nt,null)})};t(qi,e=>{g(nt)&&e(Ji)});var Yi=e(qi,2),Xi=e=>{Ae(e,{get folder(){return g(rt)},onDone:e=>void Wr(e),onCancel:()=>I(rt,null)})};t(Yi,e=>{g(rt)!==null&&e(Xi)}),a(()=>{ri=x(ni,1,`page svelte-1uha8ag`,null,ri,{dragging:g(tt)}),oe(ni,`--preview-card-width: ${g(vt)}px; --preview-card-height: ${g(vt)*.6}px`),ci.disabled=g(cn).length===0,hi=x(mi,1,`control search svelte-1uha8ag`,null,hi,{"filter-active":g(Gt)!==``}),O(vi,St),xi=x(bi,1,`view-toggle-button svelte-1uha8ag`,null,xi,{active:g(Z)===`card`}),j(bi,`aria-pressed`,g(Z)===`card`),Ci=x(Si,1,`view-toggle-button svelte-1uha8ag`,null,Ci,{active:g(Z)===`table`}),j(Si,`aria-pressed`,g(Z)===`table`),j(wi,`title`,`Preview size: ${g(Et)}px`),j(Ei,`min`,g(Ct)),j(Ei,`max`,g(wt)),j(Ei,`step`,g(Tt)),oe(Ei,`--preview-size-progress: ${g(Dt)}%`),j(Ei,`aria-valuetext`,g(Z)===`card`?`${g(vt)}px wide cards`:`${g(bt)}px tall rows`),j(Oi,`accept`,xt)}),f(`contextmenu`,ni,Zn),L(`dragleave`,ni,e=>{e.relatedTarget===null&&I(tt,!1)}),f(`click`,ci,Nn),f(`input`,gi,()=>$({query:g(z)},!0)),f(`keydown`,gi,e=>{e.key===`Escape`&&(e.stopPropagation(),g(z)===``?e.currentTarget.blur():$({query:``},!0))}),ee(gi,()=>g(z),e=>I(z,e)),f(`click`,bi,()=>I(Z,`card`)),f(`click`,Si,()=>I(Z,`table`)),ee(Ei,()=>g(Z)===`card`?g(vt):g(bt),e=>{g(Z)===`card`?I(vt,e,!0):I(bt,e,!0)}),f(`change`,Oi,Ur),s(r,$r),A()}o([`contextmenu`,`click`,`input`,`keydown`,`change`]);export{Lr as component};