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 +0,0 @@
1
- {"version":3,"file":"core.js-BHxa3VBo.js","sources":["../../../../.svelte-kit/output/server/chunks/core.js"],"sourcesContent":["/** Fundus-owned file that preserves explicit empty folders in source control. */\nvar FOLDER_SENTINEL = \".gitkeep\";\nvar CONTROL_CHARACTERS$1 = /[\\u0000-\\u001f\\u007f]/;\nvar WINDOWS_FORBIDDEN_CHARACTERS$1 = /[<>:\"|?*]/;\nvar WINDOWS_RESERVED_NAME$1 = /^(con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\\..*)?$/i;\n/** Validate one human-facing folder name (a single path segment). */\nfunction folderNameError(name) {\n\tif (name.length === 0) return \"Folder names must not be empty.\";\n\tif (name !== name.trim()) return \"Folder names must not start or end with whitespace.\";\n\tif (name === \".\" || name === \"..\") return `\"${name}\" is not a valid folder name.`;\n\tif (name.includes(\"/\") || name.includes(\"\\\\\")) return \"Folder names must not contain path separators.\";\n\tif (CONTROL_CHARACTERS$1.test(name)) return \"Folder names must not contain control characters.\";\n\tif (WINDOWS_FORBIDDEN_CHARACTERS$1.test(name)) return \"Folder names must not contain Windows-reserved characters (: * ? \\\" < > |).\";\n\tif (name.endsWith(\".\")) return \"Folder names must not end with a dot.\";\n\tif (name.toLocaleLowerCase(\"en-US\") === \"root\") return `\"${name}\" is reserved for the implicit Fundus root folder.`;\n\tif (name.toLocaleLowerCase(\"en-US\") === \".gitkeep\") return `\"${name}\" is reserved for Fundus folder management.`;\n\tif (WINDOWS_RESERVED_NAME$1.test(name)) return `\"${name}\" is a reserved filesystem name.`;\n\treturn null;\n}\n/** Normalize a validated, portable relative folder path to NFC + POSIX separators. */\nfunction normalizeFolderPath(path) {\n\treturn path.split(\"/\").map((segment) => segment.normalize(\"NFC\")).join(\"/\");\n}\n/** Validate a non-root, POSIX-relative folder path. */\nfunction folderPathError(path) {\n\tif (path.length === 0) return \"The root is implicit and cannot be registered as a folder.\";\n\tif (path.startsWith(\"/\") || path.endsWith(\"/\")) return \"Folder paths must be relative and must not start or end with a slash.\";\n\tfor (const segment of path.split(\"/\")) {\n\t\tconst problem = folderNameError(segment);\n\t\tif (problem) return `Invalid folder path \"${path}\": ${problem}`;\n\t}\n\treturn null;\n}\n/** Case-insensitive, Unicode-normalized key used to prevent portable path collisions. */\nfunction portableFolderPathKey(path) {\n\treturn normalizeFolderPath(path).toLocaleLowerCase(\"en-US\");\n}\nfunction parentFolderPath(path) {\n\tconst separator = path.lastIndexOf(\"/\");\n\treturn separator === -1 ? \"\" : path.slice(0, separator);\n}\nfunction folderNameOf(path) {\n\tconst separator = path.lastIndexOf(\"/\");\n\treturn separator === -1 ? path : path.slice(separator + 1);\n}\nfunction joinFolderPath(parent, name) {\n\treturn parent === \"\" ? name : `${parent}/${name}`;\n}\nfunction folderOfRawPath(rawPath) {\n\treturn parentFolderPath(rawPath);\n}\nfunction rawFileNameOfPath(rawPath) {\n\treturn folderNameOf(rawPath);\n}\nfunction isFolderOrDescendant(path, ancestor) {\n\treturn path === ancestor || path.startsWith(`${ancestor}/`);\n}\nfunction replaceFolderPrefix(path, from, to) {\n\tif (path === from) return to;\n\treturn `${to}${path.slice(from.length)}`;\n}\n//#endregion\n//#region src/lib/core/raw-path.ts\nvar CONTROL_CHARACTERS = /[\\u0000-\\u001f\\u007f]/;\nvar WINDOWS_FORBIDDEN_CHARACTERS = /[<>:\"|?*]/;\nvar WINDOWS_RESERVED_NAME = /^(con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\\..*)?$/i;\nvar UUID_PATTERN = \"[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\";\nvar FUNDUS_TRANSACTION_NAME = new RegExp(`^(?:\\\\.fundus-replace-${UUID_PATTERN}\\\\.tmp|\\\\.fundus-delete(?:-assets)?-${UUID_PATTERN})$`, \"i\");\nvar FUNDUS_TRANSACTION_SUFFIX = new RegExp(`\\\\.fundus-(?:replace-)?${UUID_PATTERN}$`, \"i\");\n/** Whether a name is an exact Fundus-owned, short-lived transaction artifact. */\nfunction isFundusTransactionName(name) {\n\treturn FUNDUS_TRANSACTION_NAME.test(name) || FUNDUS_TRANSACTION_SUFFIX.test(name);\n}\n/** Validate one portable, externally-owned raw-file name. */\nfunction rawFileNameError(name) {\n\tif (name.length === 0) return \"Raw file names must not be empty.\";\n\tif (name !== name.normalize(\"NFC\")) return \"Raw file names must be Unicode-normalized (NFC).\";\n\tif (name !== name.trim()) return \"Raw file names must not start or end with whitespace.\";\n\tif (name === \".\" || name === \"..\") return `\"${name}\" is not a valid raw file name.`;\n\tif (name.includes(\"/\") || name.includes(\"\\\\\")) return \"Raw file names must not contain path separators.\";\n\tif (CONTROL_CHARACTERS.test(name)) return \"Raw file names must not contain control characters.\";\n\tif (WINDOWS_FORBIDDEN_CHARACTERS.test(name)) return \"Raw file names must not contain Windows-reserved characters (: * ? \\\" < > |).\";\n\tif (name.endsWith(\".\")) return \"Raw file names must not end with a dot.\";\n\tif (name.toLocaleLowerCase(\"en-US\") === \".gitkeep\") return `\"${name}\" is reserved for Fundus folder management.`;\n\tif (WINDOWS_RESERVED_NAME.test(name)) return `\"${name}\" is a reserved filesystem name.`;\n\tif (isFundusTransactionName(name)) return `\"${name}\" is reserved for Fundus transactions.`;\n\treturn null;\n}\n/** Validate a portable POSIX-relative raw path without permitting traversal. */\nfunction rawFilePathError(path) {\n\tif (path.length === 0 || path.startsWith(\"/\") || path.endsWith(\"/\") || path.includes(\"\\\\\")) return `Unsafe raw file path \"${path}\".`;\n\tconst segments = path.split(\"/\");\n\tfor (const segment of segments.slice(0, -1)) {\n\t\tconst problem = folderNameError(segment);\n\t\tif (problem) return `Invalid raw file path \"${path}\": ${problem}`;\n\t\tif (isFundusTransactionName(segment)) return `Invalid raw file path \"${path}\": \"${segment}\" is reserved for Fundus transactions.`;\n\t\tif (segment !== segment.normalize(\"NFC\")) return `Raw file path \"${path}\" is not Unicode-normalized (NFC).`;\n\t}\n\tconst fileProblem = rawFileNameError(segments.at(-1) ?? \"\");\n\treturn fileProblem ? `Invalid raw file path \"${path}\": ${fileProblem}` : null;\n}\n/** Portable case/normalization collision key for complete raw paths. */\nfunction portableRawPathKey(path) {\n\treturn normalizeFolderPath(path).toLocaleLowerCase(\"en-US\");\n}\n//#endregion\n//#region src/lib/core/plugins/audio.ts\n/** Built-in presets, always available; host config merges over them. */\nvar AUDIO_BUILT_IN_PRESETS = { default: {\n\tcodec: \"opus\",\n\tbitrateKbps: 96,\n\tcontainer: \"webm\"\n} };\n/** Each codec's muxable container — a mismatch is a config error, not an ffmpeg one. */\nvar CONTAINER_BY_CODEC = {\n\topus: \"webm\",\n\taac: \"m4a\"\n};\nfunction validateAudioPreset(name, value) {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) throw new Error(`Audio preset \"${name}\" must be an object.`);\n\tconst record = value;\n\tif (record.codec !== \"opus\" && record.codec !== \"aac\") throw new Error(`Audio preset \"${name}\" needs a \"codec\" of 'opus' | 'aac'.`);\n\tif (typeof record.bitrateKbps !== \"number\" || !Number.isInteger(record.bitrateKbps) || record.bitrateKbps <= 0) throw new Error(`Audio preset \"${name}\" needs a positive integer \"bitrateKbps\".`);\n\tconst expectedContainer = CONTAINER_BY_CODEC[record.codec];\n\tif (record.container !== expectedContainer) throw new Error(`Audio preset \"${name}\": codec '${record.codec}' requires container '${expectedContainer}'.`);\n\treturn {\n\t\tcodec: record.codec,\n\t\tbitrateKbps: record.bitrateKbps,\n\t\tcontainer: expectedContainer\n\t};\n}\nvar audioPlugin = {\n\ttype: \"audio\",\n\taccepts: [...[\n\t\t\"mp3\",\n\t\t\"wav\",\n\t\t\"m4a\",\n\t\t\"ogg\",\n\t\t\"flac\"\n\t]],\n\tdefaultParameters: () => ({ preset: \"default\" }),\n\tvalidateParameters(value) {\n\t\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) throw new Error(\"Audio parameters must be an object.\");\n\t\tconst record = value;\n\t\tif (typeof record.preset !== \"string\" || record.preset.length === 0) throw new Error(\"Audio parameters need a non-empty string \\\"preset\\\".\");\n\t\treturn { preset: record.preset };\n\t}\n};\n//#endregion\n//#region src/lib/core/asset-reference.ts\n/** Whether a value is a well-formed asset-reference marker. */\nfunction isAssetReference(value) {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value) && typeof value.$asset === \"string\" && value.$asset !== \"\";\n}\n//#endregion\n//#region src/lib/core/chroma-key.ts\n/** The upstream shader's property defaults — a freshly ingested asset starts here. */\nvar DEFAULT_CHROMA_KEY_PARAMETERS = {\n\tkeyColor: [\n\t\t0,\n\t\t1,\n\t\t0\n\t],\n\tcolorCutoff: .2,\n\tcolorFeathering: .33,\n\tmaskFeathering: 1,\n\tsharpening: .5,\n\tdespill: 1,\n\tdespillLuminanceAdd: .2,\n\tdespillCoverage: 1\n};\nvar SCALAR_KEYS = [\n\t\"colorCutoff\",\n\t\"colorFeathering\",\n\t\"maskFeathering\",\n\t\"sharpening\",\n\t\"despill\",\n\t\"despillLuminanceAdd\"\n];\nfunction clampUnit(value) {\n\treturn Math.min(1, Math.max(0, value));\n}\n/**\n* Validate an unknown chroma-key blob: every field but `despillCoverage`\n* required, every channel and scalar a finite number. Values are clamped into 0–1 (slider float artifacts\n* must not invalidate a library), non-numbers throw.\n*/\nfunction validateChromaKeyParameters(value) {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) throw new Error(\"\\\"chromaKey\\\" must be an object.\");\n\tconst record = value;\n\tconst keyColor = record.keyColor;\n\tif (!Array.isArray(keyColor) || keyColor.length !== 3 || keyColor.some((channel) => typeof channel !== \"number\" || !Number.isFinite(channel))) throw new Error(\"\\\"chromaKey.keyColor\\\" must be an array of three numbers (RGB, 0–1 each).\");\n\tconst result = { keyColor: [\n\t\tclampUnit(keyColor[0]),\n\t\tclampUnit(keyColor[1]),\n\t\tclampUnit(keyColor[2])\n\t] };\n\tfor (const key of SCALAR_KEYS) {\n\t\tconst scalar = record[key];\n\t\tif (typeof scalar !== \"number\" || !Number.isFinite(scalar)) throw new Error(`\"chromaKey.${key}\" must be a number (0–1).`);\n\t\tresult[key] = clampUnit(scalar);\n\t}\n\tconst despillCoverage = record.despillCoverage;\n\tif (despillCoverage !== void 0) {\n\t\tif (typeof despillCoverage !== \"number\" || !Number.isFinite(despillCoverage)) throw new Error(\"\\\"chromaKey.despillCoverage\\\" must be a number (0–1).\");\n\t\tresult.despillCoverage = clampUnit(despillCoverage);\n\t}\n\treturn result;\n}\n//#endregion\n//#region src/lib/core/plugins/video.ts\nvar INPUT_PATH_TOKEN = Symbol(\"Fundus FFmpeg input\");\nvar OUTPUT_PATH_TOKEN = Symbol(\"Fundus FFmpeg output\");\nfunction isCustomFfmpegVideoPreset(preset) {\n\treturn \"ffmpegArgs\" in preset;\n}\n/** Replace the validated path markers without invoking host code during processing. */\nfunction materializeFfmpegCommand(preset, paths) {\n\treturn preset.ffmpegArgs.map((argument) => {\n\t\tif (typeof argument === \"string\") return argument;\n\t\treturn argument.fundusPath === \"input\" ? paths.inputPath : paths.outputPath;\n\t});\n}\n/**\n* Built-in presets, always available; host config merges over them. The\n* default is the proven committed-video formula: H.264, slow preset, animation\n* tune, CRF 28, yuv420p, faststart MP4.\n*/\nvar VIDEO_BUILT_IN_PRESETS = { default: {\n\tcodec: \"h264\",\n\tcrf: 28,\n\tencoderPreset: \"slow\",\n\ttune: \"animation\",\n\tpixelFormat: \"yuv420p\",\n\tcontainer: \"mp4\"\n} };\nfunction validateCustomFfmpegPreset(name, record) {\n\tif (record.container !== \"mp4\") throw new Error(`Video preset \"${name}\" needs a \"container\" of 'mp4'.`);\n\tif (typeof record.ffmpegArgs !== \"function\") throw new Error(`Video preset \"${name}\" needs \"ffmpegArgs\" to be a function.`);\n\tconst mixedField = [\n\t\t\"codec\",\n\t\t\"crf\",\n\t\t\"encoderPreset\",\n\t\t\"tune\",\n\t\t\"pixelFormat\"\n\t].find((field) => record[field] !== void 0);\n\tif (mixedField) throw new Error(`Video preset \"${name}\" cannot combine \"ffmpegArgs\" with structured field \"${mixedField}\".`);\n\tlet commandArguments;\n\ttry {\n\t\tcommandArguments = record.ffmpegArgs({\n\t\t\tinput: INPUT_PATH_TOKEN,\n\t\t\toutput: OUTPUT_PATH_TOKEN\n\t\t});\n\t} catch (cause) {\n\t\tthrow new Error(`Video preset \"${name}\" threw while evaluating \"ffmpegArgs\": ${cause instanceof Error ? cause.message : String(cause)}`);\n\t}\n\tif (!Array.isArray(commandArguments) || commandArguments.some((argument) => (typeof argument !== \"string\" || argument.length === 0) && argument !== INPUT_PATH_TOKEN && argument !== OUTPUT_PATH_TOKEN)) throw new Error(`Video preset \"${name}\" has invalid \"ffmpegArgs\" output; expected non-empty strings and the supplied input/output tokens.`);\n\tconst inputCount = commandArguments.filter((argument) => argument === INPUT_PATH_TOKEN).length;\n\tconst outputCount = commandArguments.filter((argument) => argument === OUTPUT_PATH_TOKEN).length;\n\tif (inputCount !== 1 || outputCount !== 1) throw new Error(`Video preset \"${name}\" must use input and output exactly once in \"ffmpegArgs\".`);\n\treturn {\n\t\tcontainer: \"mp4\",\n\t\tffmpegArgs: commandArguments.map((argument) => {\n\t\t\tif (argument === INPUT_PATH_TOKEN) return { fundusPath: \"input\" };\n\t\t\tif (argument === OUTPUT_PATH_TOKEN) return { fundusPath: \"output\" };\n\t\t\treturn argument;\n\t\t})\n\t};\n}\nfunction validateVideoPreset(name, value) {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) throw new Error(`Video preset \"${name}\" must be an object.`);\n\tconst record = value;\n\tif (record.ffmpegCmd !== void 0) throw new Error(`Video preset \"${name}\" must define custom arguments with \"ffmpegArgs\".`);\n\tif (record.ffmpegArgs !== void 0) return validateCustomFfmpegPreset(name, record);\n\tif (record.codec !== \"h264\") throw new Error(`Video preset \"${name}\" needs a \"codec\" of 'h264'.`);\n\tif (typeof record.crf !== \"number\" || !Number.isInteger(record.crf) || record.crf < 0) throw new Error(`Video preset \"${name}\" needs an integer \"crf\" ≥ 0.`);\n\tif (typeof record.encoderPreset !== \"string\" || record.encoderPreset.length === 0) throw new Error(`Video preset \"${name}\" needs a non-empty string \"encoderPreset\".`);\n\tif (record.tune !== void 0 && (typeof record.tune !== \"string\" || record.tune.length === 0)) throw new Error(`Video preset \"${name}\" has a non-string \"tune\".`);\n\tif (typeof record.pixelFormat !== \"string\" || record.pixelFormat.length === 0) throw new Error(`Video preset \"${name}\" needs a non-empty string \"pixelFormat\".`);\n\tif (record.container !== \"mp4\") throw new Error(`Video preset \"${name}\" needs a \"container\" of 'mp4'.`);\n\treturn {\n\t\tcodec: \"h264\",\n\t\tcrf: record.crf,\n\t\tencoderPreset: record.encoderPreset,\n\t\t...record.tune !== void 0 ? { tune: record.tune } : {},\n\t\tpixelFormat: record.pixelFormat,\n\t\tcontainer: \"mp4\"\n\t};\n}\nvar VIDEO_EXTENSIONS = [\n\t\"mp4\",\n\t\"mov\",\n\t\"webm\",\n\t\"m4v\"\n];\n/** Shared by the video and chroma-key-video plugins (identical transcode inputs). */\nfunction validateVideoParameters(label, value) {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) throw new Error(`${label} parameters must be an object.`);\n\tconst record = value;\n\tif (typeof record.preset !== \"string\" || record.preset.length === 0) throw new Error(`${label} parameters need a non-empty string \"preset\".`);\n\tif (record.maxWidth !== void 0) {\n\t\tif (typeof record.maxWidth !== \"number\" || !Number.isInteger(record.maxWidth) || record.maxWidth <= 0) throw new Error(`${label} \"maxWidth\" must be a positive integer when set.`);\n\t}\n\treturn {\n\t\tpreset: record.preset,\n\t\t...record.maxWidth !== void 0 ? { maxWidth: record.maxWidth } : {}\n\t};\n}\nvar videoPlugin = {\n\ttype: \"video\",\n\taccepts: [...VIDEO_EXTENSIONS],\n\tdefaultParameters: () => ({ preset: \"default\" }),\n\tvalidateParameters(value) {\n\t\treturn validateVideoParameters(\"Video\", value);\n\t}\n};\n//#endregion\n//#region src/lib/core/plugins/chroma-key-video.ts\n/**\n* Chroma-key-video plugin (core part): a greenscreen video delivered through\n* the video plugin's transcode pipeline, plus the keying data the runtime's\n* WebGL renderer needs — chroma-key parameters and two optional image\n* references: a grayscale shape `mask` multiplied onto the keyed\n* alpha, and a static `fallback` image shown when WebGL2 is unavailable.\n*\n* The keying values and references are entry-only data: they travel into the\n* generated manifest entry but never touch the ffmpeg job, so\n* `processingParameters` narrows the job-hash input to the transcode inputs\n* (preset + maxWidth) — retuning a slider must not re-transcode the proxy.\n*/\nfunction validateOptionalReference(label, value) {\n\tif (value === void 0) return void 0;\n\tif (!isAssetReference(value)) throw new Error(`\"${label}\" must be an asset reference ({ \"$asset\": \"<id>\" }).`);\n\treturn { $asset: value.$asset };\n}\nvar chromaKeyVideoPlugin = {\n\ttype: \"chroma-key-video\",\n\taccepts: [...VIDEO_EXTENSIONS],\n\tdefaultParameters: () => ({\n\t\tpreset: \"default\",\n\t\tchromaKey: {\n\t\t\t...DEFAULT_CHROMA_KEY_PARAMETERS,\n\t\t\tkeyColor: [...DEFAULT_CHROMA_KEY_PARAMETERS.keyColor]\n\t\t}\n\t}),\n\tvalidateParameters(value) {\n\t\tconst videoParameters = validateVideoParameters(\"Chroma-key-video\", value);\n\t\tconst record = value;\n\t\tconst chromaKey = validateChromaKeyParameters(record.chromaKey);\n\t\tconst mask = validateOptionalReference(\"mask\", record.mask);\n\t\tconst fallback = validateOptionalReference(\"fallback\", record.fallback);\n\t\treturn {\n\t\t\t...videoParameters,\n\t\t\tchromaKey,\n\t\t\t...mask !== void 0 ? { mask } : {},\n\t\t\t...fallback !== void 0 ? { fallback } : {}\n\t\t};\n\t},\n\tcollectReferences(parameters) {\n\t\tconst references = [];\n\t\tif (parameters.mask) references.push({\n\t\t\tfield: \"mask\",\n\t\t\tassetId: parameters.mask.$asset,\n\t\t\texpectedTypes: [\"image\"]\n\t\t});\n\t\tif (parameters.fallback) references.push({\n\t\t\tfield: \"fallback\",\n\t\t\tassetId: parameters.fallback.$asset,\n\t\t\texpectedTypes: [\"image\"]\n\t\t});\n\t\treturn references;\n\t},\n\tprocessingParameters(parameters) {\n\t\treturn {\n\t\t\tpreset: parameters.preset,\n\t\t\t...parameters.maxWidth !== void 0 ? { maxWidth: parameters.maxWidth } : {}\n\t\t};\n\t}\n};\n//#endregion\n//#region src/lib/core/plugins/image.ts\nvar IMAGE_FORMATS = [\n\t\"webp\",\n\t\"png\",\n\t\"avif\",\n\t\"jpeg\"\n];\n/** Built-in presets, always available; host config merges over them. */\nvar IMAGE_BUILT_IN_PRESETS = { default: {\n\tformat: \"webp\",\n\tquality: 82\n} };\nfunction validateImagePreset(name, value) {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) throw new Error(`Image preset \"${name}\" must be an object.`);\n\tconst record = value;\n\tif (typeof record.format !== \"string\" || !IMAGE_FORMATS.includes(record.format)) throw new Error(`Image preset \"${name}\" needs a \"format\" of ${IMAGE_FORMATS.map((format) => `'${format}'`).join(\" | \")}.`);\n\tif (record.quality !== void 0 && typeof record.quality !== \"number\") throw new Error(`Image preset \"${name}\" has a non-number \"quality\".`);\n\treturn {\n\t\tformat: record.format,\n\t\tquality: record.quality\n\t};\n}\nvar RASTER_IMAGE_EXTENSIONS = [\n\t\"png\",\n\t\"jpg\",\n\t\"jpeg\",\n\t\"webp\",\n\t\"avif\"\n];\nvar imagePlugin = {\n\ttype: \"image\",\n\taccepts: [...RASTER_IMAGE_EXTENSIONS],\n\tdefaultParameters: () => ({ preset: \"default\" }),\n\tvalidateParameters(value) {\n\t\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) throw new Error(\"Image parameters must be an object.\");\n\t\tconst record = value;\n\t\tif (typeof record.preset !== \"string\" || record.preset.length === 0) throw new Error(\"Image parameters need a non-empty string \\\"preset\\\".\");\n\t\tif (record.targetWidth !== void 0) {\n\t\t\tif (typeof record.targetWidth !== \"number\" || !Number.isInteger(record.targetWidth) || record.targetWidth <= 0) throw new Error(\"Image \\\"targetWidth\\\" must be a positive integer when set.\");\n\t\t}\n\t\treturn {\n\t\t\tpreset: record.preset,\n\t\t\t...record.targetWidth !== void 0 ? { targetWidth: record.targetWidth } : {}\n\t\t};\n\t}\n};\n//#endregion\n//#region src/lib/core/slice-data.ts\n/**\n* The slice data model keeps the source image separate from slicing metadata\n* (Fundus tracks raw files and\n* proxy dimensions separately), so there is no `SliceSource` here.\n*\n* The geometry is stored as **insets** (border thickness in source pixels), the\n* canonical, render-ready form — equivalent to CSS `border-image-slice`.\n* `slicedAxesFor` is the single source of truth for which axes each mode uses.\n*/\nvar SLICE_MODES = [\n\t\"nine\",\n\t\"three-horizontal\",\n\t\"three-vertical\",\n\t\"one\"\n];\n/** All-zero insets — the \"no overdraw\" value. */\nfunction createZeroInsets() {\n\treturn {\n\t\ttop: 0,\n\t\tright: 0,\n\t\tbottom: 0,\n\t\tleft: 0\n\t};\n}\n/**\n* Default insets for a freshly ingested image: each border a quarter of the\n* corresponding dimension (at least 1px where the image is large enough),\n* always clamped so a center of at least one source pixel remains on each\n* axis. For an axis too small for insets + a 1px center (width/height ≤ 2)\n* the insets on that axis are 0 — structurally valid slicing for any size ≥ 1.\n*/\nfunction defaultInsetsForSize(width, height) {\n\tconst horizontal = Math.min(Math.max(1, Math.floor(width / 4)), Math.floor((width - 1) / 2));\n\tconst vertical = Math.min(Math.max(1, Math.floor(height / 4)), Math.floor((height - 1) / 2));\n\treturn {\n\t\ttop: vertical,\n\t\tright: horizontal,\n\t\tbottom: vertical,\n\t\tleft: horizontal\n\t};\n}\n/** Which source-image axes are sliced for a mode. */\nfunction slicedAxesFor(mode) {\n\treturn {\n\t\thorizontal: mode === \"nine\" || mode === \"three-horizontal\",\n\t\tvertical: mode === \"nine\" || mode === \"three-vertical\"\n\t};\n}\n/** Maximum inset on one side while preserving the opposite inset. */\nfunction maxInset(insets, side, width, height) {\n\tif (side === \"left\") return width - insets.right;\n\tif (side === \"right\") return width - insets.left;\n\tif (side === \"top\") return height - insets.bottom;\n\treturn height - insets.top;\n}\n/** Maximum overdraw on one side while preserving at least one core source pixel. */\nfunction maxOverdraw(overdraw, side, width, height) {\n\treturn maxInset(overdraw, side, width, height) - 1;\n}\n//#endregion\n//#region src/lib/core/plugins/slice.ts\nfunction clamp(value, min, max) {\n\treturn Math.max(min, Math.min(max, value));\n}\n/**\n* Overdraw that reaches past a slice inset must stay fixed during compression:\n* otherwise it would be stretched with the center or clipped afterward. Clamp\n* in runtime order so processing, previews, and emitted manifests agree.\n*/\nfunction processedSliceInsets(options) {\n\tconst axes = slicedAxesFor(options.mode);\n\tconst overdraw = options.overdraw ?? {\n\t\ttop: 0,\n\t\tright: 0,\n\t\tbottom: 0,\n\t\tleft: 0\n\t};\n\tconst fixHorizontal = axes.horizontal && (options.compression?.x ?? 0) > 0;\n\tconst fixVertical = axes.vertical && (options.compression?.y ?? 0) > 0;\n\tconst desiredLeft = fixHorizontal ? Math.max(options.insets.left, overdraw.left) : options.insets.left;\n\tconst desiredRight = fixHorizontal ? Math.max(options.insets.right, overdraw.right) : options.insets.right;\n\tconst desiredTop = fixVertical ? Math.max(options.insets.top, overdraw.top) : options.insets.top;\n\tconst desiredBottom = fixVertical ? Math.max(options.insets.bottom, overdraw.bottom) : options.insets.bottom;\n\tconst left = clamp(desiredLeft, 0, options.width);\n\tconst right = clamp(desiredRight, 0, options.width - left);\n\tconst top = clamp(desiredTop, 0, options.height);\n\treturn {\n\t\ttop,\n\t\tright,\n\t\tbottom: clamp(desiredBottom, 0, options.height - top),\n\t\tleft\n\t};\n}\nfunction hasAnySide(insets) {\n\tif (!insets) return false;\n\treturn insets.top > 0 || insets.right > 0 || insets.bottom > 0 || insets.left > 0;\n}\n/**\n* The geometry fields of a slice entry delivered at `delivered` pixels from a\n* `raw` original — shared by codegen and the editor preview so both describe\n* the image identically.\n*/\nfunction sliceEntryGeometry(parameters, delivered, raw) {\n\tconst compressed = delivered.width !== raw.width || delivered.height !== raw.height;\n\treturn {\n\t\tslicing: {\n\t\t\tmode: parameters.mode,\n\t\t\tinsets: processedSliceInsets({\n\t\t\t\t...parameters,\n\t\t\t\t...delivered\n\t\t\t}),\n\t\t\tpixelRatio: parameters.pixelRatio,\n\t\t\t...hasAnySide(parameters.overdraw) ? { overdraw: parameters.overdraw } : {}\n\t\t},\n\t\tsourceWidth: delivered.width,\n\t\tsourceHeight: delivered.height,\n\t\t...compressed ? {\n\t\t\tuncompressedWidth: raw.width,\n\t\t\tuncompressedHeight: raw.height\n\t\t} : {}\n\t};\n}\n/** Built-in presets, always available; host config merges over them. */\nvar SLICE_BUILT_IN_PRESETS = { default: {\n\tformat: \"webp\",\n\tquality: 82\n} };\nfunction validateInsets(label, value) {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) throw new Error(`Slice ${label} must be an object with top/right/bottom/left.`);\n\tconst record = value;\n\tconst sides = [\n\t\t\"top\",\n\t\t\"right\",\n\t\t\"bottom\",\n\t\t\"left\"\n\t];\n\tconst result = createZeroInsets();\n\tfor (const side of sides) {\n\t\tconst sideValue = record[side];\n\t\tif (typeof sideValue !== \"number\" || !Number.isInteger(sideValue) || sideValue < 0) throw new Error(`Slice ${label}.${side} must be a non-negative integer.`);\n\t\tresult[side] = sideValue;\n\t}\n\treturn result;\n}\nfunction validateCompression(value) {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) throw new Error(\"Slice compression must be an object with x/y percentages.\");\n\tconst record = value;\n\tconst result = {\n\t\tx: 0,\n\t\ty: 0\n\t};\n\tfor (const axis of [\"x\", \"y\"]) {\n\t\tconst axisValue = record[axis];\n\t\tif (typeof axisValue !== \"number\" || !Number.isInteger(axisValue) || axisValue < 0 || axisValue > 100) throw new Error(`Slice compression.${axis} must be an integer from 0 to 100.`);\n\t\tresult[axis] = axisValue;\n\t}\n\treturn result;\n}\nvar slicePlugin = {\n\ttype: \"slice\",\n\taccepts: [...RASTER_IMAGE_EXTENSIONS],\n\tdefaultParameters: () => ({\n\t\tmode: \"nine\",\n\t\tinsets: createZeroInsets(),\n\t\tpixelRatio: 1,\n\t\tpreset: \"default\"\n\t}),\n\tvalidateParameters(value) {\n\t\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) throw new Error(\"Slice parameters must be an object.\");\n\t\tconst record = value;\n\t\tif (typeof record.mode !== \"string\" || !SLICE_MODES.includes(record.mode)) throw new Error(`Slice \"mode\" must be one of ${SLICE_MODES.map((mode) => `'${mode}'`).join(\" | \")}.`);\n\t\tconst insets = validateInsets(\"insets\", record.insets);\n\t\tif (typeof record.pixelRatio !== \"number\" || !Number.isInteger(record.pixelRatio) || record.pixelRatio < 1) throw new Error(\"Slice \\\"pixelRatio\\\" must be an integer ≥ 1.\");\n\t\tconst overdraw = record.overdraw === void 0 ? void 0 : validateInsets(\"overdraw\", record.overdraw);\n\t\tconst compression = record.compression === void 0 ? void 0 : validateCompression(record.compression);\n\t\tif (typeof record.preset !== \"string\" || record.preset.length === 0) throw new Error(\"Slice parameters need a non-empty string \\\"preset\\\".\");\n\t\treturn {\n\t\t\tmode: record.mode,\n\t\t\tinsets,\n\t\t\tpixelRatio: record.pixelRatio,\n\t\t\t...overdraw !== void 0 ? { overdraw } : {},\n\t\t\t...compression !== void 0 ? { compression } : {},\n\t\t\tpreset: record.preset\n\t\t};\n\t}\n};\n//#endregion\n//#region src/lib/core/plugins/registry.ts\n/**\n* The composition root for Fundus asset-type plugins.\n*\n* A plugin is registered exactly once here. Environment-specific surfaces\n* (server processing, editor panels, runtime handlers) keep their imports on\n* the correct side of SvelteKit's browser/server boundary and project this\n* registered set onto their local implementation catalogues.\n*/\nvar PluginRegistry = class {\n\t#byType = /* @__PURE__ */ new Map();\n\tregister(plugin) {\n\t\tif (this.#byType.has(plugin.type)) throw new Error(`Plugin type \"${plugin.type}\" is already registered.`);\n\t\tthis.#byType.set(plugin.type, plugin);\n\t}\n\thas(type) {\n\t\treturn this.#byType.has(type);\n\t}\n\tvalues() {\n\t\treturn [...this.#byType.values()];\n\t}\n\ttypes() {\n\t\treturn [...this.#byType.keys()];\n\t}\n\t/**\n\t* Select the environment-specific implementation for every registered\n\t* plugin. Unregistered catalogue entries remain dormant; a registered\n\t* plugin without the requested facet fails immediately during startup.\n\t*/\n\tproject(catalogue, facet) {\n\t\tconst projected = Object.create(null);\n\t\tfor (const type of this.#byType.keys()) {\n\t\t\tif (!Object.hasOwn(catalogue, type)) throw new Error(`Registered plugin \"${type}\" has no ${facet}.`);\n\t\t\tprojected[type] = catalogue[type];\n\t\t}\n\t\treturn projected;\n\t}\n};\nvar plugins = new PluginRegistry();\nplugins.register(imagePlugin);\nplugins.register(slicePlugin);\nplugins.register(videoPlugin);\nplugins.register(chromaKeyVideoPlugin);\nplugins.register(audioPlugin);\n//#endregion\n//#region src/lib/core/ingest.ts\n/** The registered descriptors, in registration order. */\nvar BUILT_IN_DESCRIPTORS = plugins.values();\n/** Unique HTML file-picker accept extensions derived from descriptor claims. */\nfunction acceptedExtensions(descriptors = BUILT_IN_DESCRIPTORS) {\n\treturn [...new Set(descriptors.flatMap((descriptor) => descriptor.accepts))].sort().map((extension) => `.${extension}`);\n}\n/** HTML file-picker extensions accepted by one registered asset type. */\nfunction acceptedExtensionsForType(type, descriptors = BUILT_IN_DESCRIPTORS) {\n\treturn descriptors.find((descriptor) => descriptor.type === type)?.accepts.map((extension) => `.${extension}`).sort() ?? [];\n}\n/**\n* Types an ingested file of this extension could become — derived from the\n* descriptors' `accepts` claims. Raster images and video containers are\n* ambiguous (image/slice, video/chroma-key-video) — the editor dialog prompts\n* once, the CLI requires `--type`; audio is unambiguous.\n*/\nfunction typesForFileName(fileName, descriptors = BUILT_IN_DESCRIPTORS) {\n\tconst extension = fileName.slice(fileName.lastIndexOf(\".\") + 1).toLowerCase();\n\treturn descriptors.filter((descriptor) => descriptor.accepts.includes(extension)).map((descriptor) => descriptor.type);\n}\n//#endregion\n//#region src/lib/core/canonicalize.ts\n/**\n* Stable JSON for hash inputs: recursively sorted keys, no whitespace,\n* `undefined` object values dropped. Two parameter objects that differ only in\n* key order (or in explicitly-undefined optionals) canonicalize identically,\n* so the derived job hash — and thus the proxy file name — stays stable.\n*/\nfunction canonicalizeParameters(parameters) {\n\treturn stringify(parameters);\n}\n/** Deterministic UTF-16 code-unit ordering, independent of host locale. */\nfunction compareCodeUnits(left, right) {\n\treturn left < right ? -1 : left > right ? 1 : 0;\n}\nfunction stringify(value) {\n\tif (value === void 0) return \"null\";\n\tif (value === null || typeof value === \"number\" || typeof value === \"boolean\") return JSON.stringify(value);\n\tif (typeof value === \"string\") return JSON.stringify(value);\n\tif (Array.isArray(value)) return `[${value.map(stringify).join(\",\")}]`;\n\tif (typeof value === \"object\") {\n\t\tconst record = value;\n\t\tconst parts = [];\n\t\tfor (const key of Object.keys(record).sort()) {\n\t\t\tif (record[key] === void 0) continue;\n\t\t\tparts.push(`${JSON.stringify(key)}:${stringify(record[key])}`);\n\t\t}\n\t\treturn `{${parts.join(\",\")}}`;\n\t}\n\tthrow new Error(`Cannot canonicalize a ${typeof value} value.`);\n}\n//#endregion\nexport { isFundusTransactionName as A, normalizeFolderPath as B, validateVideoPreset as C, AUDIO_BUILT_IN_PRESETS as D, isAssetReference as E, folderNameOf as F, portableFolderPathKey as H, folderOfRawPath as I, folderPathError as L, rawFilePathError as M, FOLDER_SENTINEL as N, audioPlugin as O, folderNameError as P, isFolderOrDescendant as R, materializeFfmpegCommand as S, DEFAULT_CHROMA_KEY_PARAMETERS as T, rawFileNameOfPath as U, parentFolderPath as V, replaceFolderPrefix as W, imagePlugin as _, typesForFileName as a, VIDEO_BUILT_IN_PRESETS as b, processedSliceInsets as c, createZeroInsets as d, defaultInsetsForSize as f, IMAGE_BUILT_IN_PRESETS as g, slicedAxesFor as h, acceptedExtensionsForType as i, portableRawPathKey as j, validateAudioPreset as k, sliceEntryGeometry as l, maxOverdraw as m, compareCodeUnits as n, plugins as o, maxInset as p, acceptedExtensions as r, SLICE_BUILT_IN_PRESETS as s, canonicalizeParameters as t, slicePlugin as u, validateImagePreset as v, videoPlugin as w, isCustomFfmpegVideoPreset as x, chromaKeyVideoPlugin as y, joinFolderPath as z };\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"raw-reconciliation.js-DPnNXe0b.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
@@ -1,7 +0,0 @@
1
- const index = 1;
2
- const imports = ["_app/immutable/nodes/1.DQGC5ZQg.js","_app/immutable/chunks/DLEDBLL1.js","_app/immutable/chunks/xihTtKlq.js","_app/immutable/chunks/rtFCvv3j.js","_app/immutable/chunks/BSzEzOBI.js"];
3
- const stylesheets = [];
4
- const fonts = [];
5
-
6
- export { fonts, imports, index, stylesheets };
7
- //# sourceMappingURL=1.js-_Ms77u64.js.map
@@ -1,7 +0,0 @@
1
- const index = 3;
2
- const imports = ["_app/immutable/nodes/3.DkyIyoNd.js","_app/immutable/chunks/DLEDBLL1.js","_app/immutable/chunks/BSzEzOBI.js","_app/immutable/chunks/xihTtKlq.js","_app/immutable/chunks/rtFCvv3j.js","_app/immutable/chunks/apKHI4vq.js","_app/immutable/chunks/CRFKGnag.js","_app/immutable/chunks/g2rma9Ym.js","_app/immutable/chunks/CzxolZCO.js"];
3
- const stylesheets = ["_app/immutable/assets/ManifestSelector.Cue3sCA1.css","_app/immutable/assets/Popover.CCTioPJZ.css","_app/immutable/assets/AssetSourceMenu.DWPxyX6L.css","_app/immutable/assets/3.Dfl33dj0.css"];
4
- const fonts = [];
5
-
6
- export { fonts, imports, index, stylesheets };
7
- //# sourceMappingURL=3.js-D7RUEviu.js.map
@@ -1,7 +0,0 @@
1
- const index = 4;
2
- const imports = ["_app/immutable/nodes/4.D1JY4Ttk.js","_app/immutable/chunks/DLEDBLL1.js","_app/immutable/chunks/BSzEzOBI.js","_app/immutable/chunks/xihTtKlq.js","_app/immutable/chunks/apKHI4vq.js","_app/immutable/chunks/CzxolZCO.js"];
3
- const stylesheets = ["_app/immutable/assets/Popover.CCTioPJZ.css","_app/immutable/assets/4.C0QkCMQ4.css"];
4
- const fonts = [];
5
-
6
- export { fonts, imports, index, stylesheets };
7
- //# sourceMappingURL=4.js-Cfc3G2Gv.js.map
@@ -1,154 +0,0 @@
1
- /**
2
- * Plugin-API code that reads and writes Fundus tags inside a Figma document.
3
- * Two runtimes execute it: the Fundus Figma plugin imports these functions
4
- * directly, and the CLI serializes them (via `Function.prototype.toString`)
5
- * into a script an agent runs through Figma's MCP `use_figma` tool. The Figma
6
- * REST API cannot write plugin data, so a script is the only headless write
7
- * path.
8
- *
9
- * Serialization constrains every function listed in `SCRIPT_FUNCTIONS`: it
10
- * may reference only its parameters, the other listed functions, and the
11
- * constants in `SCRIPT_CONSTANTS` — never imports or other module scope. The
12
- * `figma` global is passed in as a parameter so tests can drive the same code
13
- * against a fake document.
14
- */
15
- /** Shared-plugin-data namespace; the REST API returns it under `sharedPluginData`. */
16
- export declare const FIGMA_TAG_NAMESPACE = "fundus";
17
- /** Key holding the node's Fundus asset id (the tag). */
18
- export declare const FIGMA_TAG_KEY = "assetId";
19
- /**
20
- * Key holding the exact label of the annotation Fundus owns on the node; empty
21
- * when it owns none. Tracking ownership out-of-band keeps the visible label
22
- * exactly equal to the tag and leaves the user's own annotations untouched.
23
- */
24
- export declare const FIGMA_ANNOTATION_LABEL_KEY = "annotationLabel";
25
- /**
26
- * Visible prefix earlier plugin builds used as the ownership marker. Still
27
- * recognized so those annotations are migrated or stripped instead of
28
- * duplicated.
29
- */
30
- export declare const LEGACY_ANNOTATION_PREFIX = "Fundus asset: ";
31
- /** The annotation fields Fundus reads and writes (a subset of Figma's `Annotation`). */
32
- export interface FigmaAnnotation {
33
- readonly label?: string;
34
- readonly labelMarkdown?: string;
35
- readonly properties?: ReadonlyArray<{
36
- readonly type: string;
37
- }>;
38
- readonly categoryId?: string;
39
- }
40
- /** The node surface Fundus uses (a structural subset of Figma's `BaseNode`). */
41
- export interface FigmaTagNode {
42
- readonly id: string;
43
- readonly name: string;
44
- readonly type: string;
45
- readonly parent: FigmaTagNode | null;
46
- getSharedPluginData(namespace: string, key: string): string;
47
- setSharedPluginData(namespace: string, key: string, value: string): void;
48
- }
49
- export interface FigmaAnnotatableNode extends FigmaTagNode {
50
- annotations: ReadonlyArray<FigmaAnnotation>;
51
- }
52
- export interface FigmaTagPage extends FigmaTagNode {
53
- loadAsync(): Promise<void>;
54
- findAll(predicate: (node: FigmaTagNode) => boolean): FigmaTagNode[];
55
- }
56
- /** The `figma` global surface the tag scripts use. */
57
- export interface FigmaTagApi {
58
- readonly root: {
59
- readonly children: ReadonlyArray<FigmaTagPage>;
60
- };
61
- getNodeByIdAsync(id: string): Promise<FigmaTagNode | null>;
62
- }
63
- export interface SetFigmaTagInput {
64
- nodeId: string;
65
- tag: string;
66
- /**
67
- * Replace a different tag on the node, rewrite the same one, or move the tag
68
- * here from the other nodes carrying it.
69
- */
70
- force: boolean;
71
- }
72
- /** A node the tag was moved away from. */
73
- export interface FigmaTagHolder {
74
- nodeId: string;
75
- nodeName: string;
76
- page: string;
77
- }
78
- export interface SetFigmaTagResult {
79
- ok: true;
80
- nodeId: string;
81
- nodeName: string;
82
- tag: string;
83
- previousTag: string | null;
84
- /** False for node types without annotation support (e.g. Group, Section). */
85
- annotated: boolean;
86
- /** Other nodes that carried the tag; forced sets clear it there. */
87
- movedFrom: FigmaTagHolder[];
88
- }
89
- export interface DeleteFigmaTagInput {
90
- nodeId: string;
91
- /** The tag the node is expected to carry; guards against a stale plan. */
92
- tag: string;
93
- }
94
- export interface DeleteFigmaTagResult {
95
- ok: true;
96
- nodeId: string;
97
- nodeName: string;
98
- removedTag: string;
99
- annotationRemoved: boolean;
100
- }
101
- /**
102
- * Whether the id names a node inside an instance (`I<instance>;<source>`).
103
- * Such nodes inherit the shared plugin data of the main component's node, so
104
- * they report its tag without being a separate taggable node.
105
- */
106
- export declare function isInstanceSublayerId(id: string): boolean;
107
- export declare function supportsAnnotations(node: FigmaTagNode): node is FigmaAnnotatableNode;
108
- /**
109
- * The annotation's shown text. Figma reports a plain-label annotation with
110
- * `labelMarkdown: ""`, so an empty markdown field falls back to `label`.
111
- */
112
- export declare function annotationText(annotation: FigmaAnnotation): string;
113
- /**
114
- * Figma returns BOTH `label` and `labelMarkdown` when reading annotations, but
115
- * the setter rejects an annotation that carries both. Re-emit a single-field
116
- * copy (non-empty markdown first), preserving `properties`/`categoryId`, so
117
- * preserved annotations can be written back without failing validation.
118
- */
119
- export declare function writableAnnotation(annotation: FigmaAnnotation): FigmaAnnotation;
120
- /** Whether this annotation is one Fundus owns — by the stored label or the legacy prefix. */
121
- export declare function isFundusAnnotation(annotation: FigmaAnnotation, ownedLabel: string): boolean;
122
- /**
123
- * Ensure the node carries exactly one Fundus annotation whose label is the tag,
124
- * preserving all others. Writes only when not already in sync, so a steady
125
- * state neither dirties the file nor adds undo steps.
126
- */
127
- export declare function writeFundusAnnotation(node: FigmaAnnotatableNode, tag: string): void;
128
- /** Remove the Fundus annotation (incl. legacy), preserving all others. */
129
- export declare function stripFundusAnnotation(node: FigmaAnnotatableNode): void;
130
- export declare function pageOfNode(node: FigmaTagNode): FigmaTagPage | null;
131
- /**
132
- * Resolve a scene node and load its page. `loadAsync` loads without
133
- * navigating, so running a script never moves anyone's canvas.
134
- */
135
- export declare function loadTaggableNode(figma: FigmaTagApi, nodeId: string): Promise<FigmaTagNode>;
136
- /**
137
- * Every other node carrying `tag`, across every page. Scripts start with only
138
- * the first page loaded, and `findAll` on an unloaded page silently misses
139
- * content, so each page is loaded first.
140
- */
141
- export declare function findTagHolders(figma: FigmaTagApi, tag: string, exceptNodeId: string): Promise<Array<{
142
- node: FigmaTagNode;
143
- page: FigmaTagPage;
144
- }>>;
145
- /** Clear the node's tag and its Fundus annotation; returns whether an annotation was removed. */
146
- export declare function clearFundusTag(node: FigmaTagNode): boolean;
147
- /**
148
- * Tag a node, re-checking the live document right before writing: the CLI's
149
- * REST snapshot can lag behind edits made since it ran.
150
- */
151
- export declare function setFundusTag(figma: FigmaTagApi, input: SetFigmaTagInput): Promise<SetFigmaTagResult>;
152
- export declare function deleteFundusTag(figma: FigmaTagApi, input: DeleteFigmaTagInput): Promise<DeleteFigmaTagResult>;
153
- export declare function buildSetTagScript(input: SetFigmaTagInput): string;
154
- export declare function buildDeleteTagScript(input: DeleteFigmaTagInput): string;
@@ -1,248 +0,0 @@
1
- /**
2
- * Plugin-API code that reads and writes Fundus tags inside a Figma document.
3
- * Two runtimes execute it: the Fundus Figma plugin imports these functions
4
- * directly, and the CLI serializes them (via `Function.prototype.toString`)
5
- * into a script an agent runs through Figma's MCP `use_figma` tool. The Figma
6
- * REST API cannot write plugin data, so a script is the only headless write
7
- * path.
8
- *
9
- * Serialization constrains every function listed in `SCRIPT_FUNCTIONS`: it
10
- * may reference only its parameters, the other listed functions, and the
11
- * constants in `SCRIPT_CONSTANTS` — never imports or other module scope. The
12
- * `figma` global is passed in as a parameter so tests can drive the same code
13
- * against a fake document.
14
- */
15
- /** Shared-plugin-data namespace; the REST API returns it under `sharedPluginData`. */
16
- export const FIGMA_TAG_NAMESPACE = 'fundus';
17
- /** Key holding the node's Fundus asset id (the tag). */
18
- export const FIGMA_TAG_KEY = 'assetId';
19
- /**
20
- * Key holding the exact label of the annotation Fundus owns on the node; empty
21
- * when it owns none. Tracking ownership out-of-band keeps the visible label
22
- * exactly equal to the tag and leaves the user's own annotations untouched.
23
- */
24
- export const FIGMA_ANNOTATION_LABEL_KEY = 'annotationLabel';
25
- /**
26
- * Visible prefix earlier plugin builds used as the ownership marker. Still
27
- * recognized so those annotations are migrated or stripped instead of
28
- * duplicated.
29
- */
30
- export const LEGACY_ANNOTATION_PREFIX = 'Fundus asset: ';
31
- /**
32
- * Whether the id names a node inside an instance (`I<instance>;<source>`).
33
- * Such nodes inherit the shared plugin data of the main component's node, so
34
- * they report its tag without being a separate taggable node.
35
- */
36
- export function isInstanceSublayerId(id) {
37
- return id.startsWith('I');
38
- }
39
- export function supportsAnnotations(node) {
40
- return 'annotations' in node;
41
- }
42
- /**
43
- * The annotation's shown text. Figma reports a plain-label annotation with
44
- * `labelMarkdown: ""`, so an empty markdown field falls back to `label`.
45
- */
46
- export function annotationText(annotation) {
47
- return annotation.labelMarkdown || annotation.label || '';
48
- }
49
- /**
50
- * Figma returns BOTH `label` and `labelMarkdown` when reading annotations, but
51
- * the setter rejects an annotation that carries both. Re-emit a single-field
52
- * copy (non-empty markdown first), preserving `properties`/`categoryId`, so
53
- * preserved annotations can be written back without failing validation.
54
- */
55
- export function writableAnnotation(annotation) {
56
- const copy = {};
57
- if (annotation.labelMarkdown)
58
- copy.labelMarkdown = annotation.labelMarkdown;
59
- else if (annotation.label !== undefined)
60
- copy.label = annotation.label;
61
- if (annotation.properties)
62
- copy.properties = annotation.properties;
63
- if (annotation.categoryId)
64
- copy.categoryId = annotation.categoryId;
65
- return copy;
66
- }
67
- /** Whether this annotation is one Fundus owns — by the stored label or the legacy prefix. */
68
- export function isFundusAnnotation(annotation, ownedLabel) {
69
- const text = annotationText(annotation);
70
- return (ownedLabel !== '' && text === ownedLabel) || text.startsWith(LEGACY_ANNOTATION_PREFIX);
71
- }
72
- /**
73
- * Ensure the node carries exactly one Fundus annotation whose label is the tag,
74
- * preserving all others. Writes only when not already in sync, so a steady
75
- * state neither dirties the file nor adds undo steps.
76
- */
77
- export function writeFundusAnnotation(node, tag) {
78
- const owned = node.getSharedPluginData(FIGMA_TAG_NAMESPACE, FIGMA_ANNOTATION_LABEL_KEY);
79
- const current = node.annotations;
80
- const ours = current.filter((annotation) => isFundusAnnotation(annotation, owned));
81
- const inSync = owned === tag && ours.length === 1 && annotationText(ours[0]) === tag;
82
- if (inSync)
83
- return;
84
- const kept = current
85
- .filter((annotation) => !isFundusAnnotation(annotation, owned) && annotationText(annotation) !== tag)
86
- .map(writableAnnotation);
87
- node.annotations = [...kept, { label: tag }];
88
- if (owned !== tag) {
89
- node.setSharedPluginData(FIGMA_TAG_NAMESPACE, FIGMA_ANNOTATION_LABEL_KEY, tag);
90
- }
91
- }
92
- /** Remove the Fundus annotation (incl. legacy), preserving all others. */
93
- export function stripFundusAnnotation(node) {
94
- const owned = node.getSharedPluginData(FIGMA_TAG_NAMESPACE, FIGMA_ANNOTATION_LABEL_KEY);
95
- const current = node.annotations;
96
- const kept = current
97
- .filter((annotation) => !isFundusAnnotation(annotation, owned))
98
- .map(writableAnnotation);
99
- if (kept.length !== current.length)
100
- node.annotations = kept;
101
- if (owned !== '')
102
- node.setSharedPluginData(FIGMA_TAG_NAMESPACE, FIGMA_ANNOTATION_LABEL_KEY, '');
103
- }
104
- export function pageOfNode(node) {
105
- let current = node;
106
- while (current && current.type !== 'PAGE')
107
- current = current.parent;
108
- return current ? current : null;
109
- }
110
- /**
111
- * Resolve a scene node and load its page. `loadAsync` loads without
112
- * navigating, so running a script never moves anyone's canvas.
113
- */
114
- export async function loadTaggableNode(figma, nodeId) {
115
- const node = await figma.getNodeByIdAsync(nodeId);
116
- const page = node ? pageOfNode(node) : null;
117
- if (!node || !page || node.type === 'PAGE') {
118
- throw new Error(`Figma node "${nodeId}" does not exist in this file.`);
119
- }
120
- await page.loadAsync();
121
- return node;
122
- }
123
- /**
124
- * Every other node carrying `tag`, across every page. Scripts start with only
125
- * the first page loaded, and `findAll` on an unloaded page silently misses
126
- * content, so each page is loaded first.
127
- */
128
- export async function findTagHolders(figma, tag, exceptNodeId) {
129
- const holders = [];
130
- for (const page of figma.root.children) {
131
- await page.loadAsync();
132
- const found = page.findAll((candidate) => candidate.id !== exceptNodeId &&
133
- !isInstanceSublayerId(candidate.id) &&
134
- candidate.getSharedPluginData(FIGMA_TAG_NAMESPACE, FIGMA_TAG_KEY) === tag);
135
- for (const node of found)
136
- holders.push({ node, page });
137
- }
138
- return holders;
139
- }
140
- /** Clear the node's tag and its Fundus annotation; returns whether an annotation was removed. */
141
- export function clearFundusTag(node) {
142
- node.setSharedPluginData(FIGMA_TAG_NAMESPACE, FIGMA_TAG_KEY, '');
143
- if (!supportsAnnotations(node)) {
144
- node.setSharedPluginData(FIGMA_TAG_NAMESPACE, FIGMA_ANNOTATION_LABEL_KEY, '');
145
- return false;
146
- }
147
- const before = node.annotations.length;
148
- stripFundusAnnotation(node);
149
- return node.annotations.length < before;
150
- }
151
- /**
152
- * Tag a node, re-checking the live document right before writing: the CLI's
153
- * REST snapshot can lag behind edits made since it ran.
154
- */
155
- export async function setFundusTag(figma, input) {
156
- const node = await loadTaggableNode(figma, input.nodeId);
157
- const previous = node.getSharedPluginData(FIGMA_TAG_NAMESPACE, FIGMA_TAG_KEY);
158
- if (!input.force && previous === input.tag) {
159
- throw new Error(`Node "${node.name}" (${node.id}) already carries tag "${input.tag}"; rerun prepare-set-tag with --force to rewrite it.`);
160
- }
161
- if (!input.force && previous !== '') {
162
- throw new Error(`Node "${node.name}" (${node.id}) already carries tag "${previous}"; rerun prepare-set-tag with --force to replace it.`);
163
- }
164
- const holders = await findTagHolders(figma, input.tag, node.id);
165
- if (!input.force && holders.length > 0) {
166
- const [holder] = holders;
167
- throw new Error(`Tag "${input.tag}" is already used by "${holder.node.name}" (${holder.node.id}) on page "${holder.page.name}"; choose another tag, or rerun prepare-set-tag with --force to move it here.`);
168
- }
169
- for (const holder of holders)
170
- clearFundusTag(holder.node);
171
- node.setSharedPluginData(FIGMA_TAG_NAMESPACE, FIGMA_TAG_KEY, input.tag);
172
- const annotated = supportsAnnotations(node);
173
- if (annotated)
174
- writeFundusAnnotation(node, input.tag);
175
- return {
176
- ok: true,
177
- nodeId: node.id,
178
- nodeName: node.name,
179
- tag: input.tag,
180
- previousTag: previous === '' ? null : previous,
181
- annotated,
182
- movedFrom: holders.map((holder) => ({
183
- nodeId: holder.node.id,
184
- nodeName: holder.node.name,
185
- page: holder.page.name
186
- }))
187
- };
188
- }
189
- export async function deleteFundusTag(figma, input) {
190
- const node = await loadTaggableNode(figma, input.nodeId);
191
- const current = node.getSharedPluginData(FIGMA_TAG_NAMESPACE, FIGMA_TAG_KEY);
192
- if (current !== input.tag) {
193
- throw new Error(current === ''
194
- ? `Node "${node.name}" (${node.id}) carries no Fundus tag.`
195
- : `Node "${node.name}" (${node.id}) carries tag "${current}", not "${input.tag}"; rerun prepare-delete-tag.`);
196
- }
197
- const annotationRemoved = clearFundusTag(node);
198
- return {
199
- ok: true,
200
- nodeId: node.id,
201
- nodeName: node.name,
202
- removedTag: input.tag,
203
- annotationRemoved
204
- };
205
- }
206
- const SCRIPT_CONSTANTS = {
207
- FIGMA_TAG_NAMESPACE,
208
- FIGMA_TAG_KEY,
209
- FIGMA_ANNOTATION_LABEL_KEY,
210
- LEGACY_ANNOTATION_PREFIX
211
- };
212
- const SCRIPT_FUNCTIONS = [
213
- isInstanceSublayerId,
214
- supportsAnnotations,
215
- annotationText,
216
- writableAnnotation,
217
- isFundusAnnotation,
218
- writeFundusAnnotation,
219
- stripFundusAnnotation,
220
- pageOfNode,
221
- loadTaggableNode,
222
- findTagHolders,
223
- clearFundusTag,
224
- setFundusTag,
225
- deleteFundusTag
226
- ];
227
- /**
228
- * A self-contained `use_figma` script body: top-level `await` and `return`,
229
- * with the `figma` global in scope. It returns the operation's JSON result
230
- * and throws, before mutating anything, when the live document disagrees.
231
- */
232
- function buildScript(summary, call) {
233
- const constants = Object.entries(SCRIPT_CONSTANTS).map(([name, value]) => `const ${name} = ${JSON.stringify(value)};`);
234
- return [
235
- `// ${summary}`,
236
- '// Generated by the fundus CLI — run it unchanged with the Figma MCP `use_figma` tool.',
237
- ...constants,
238
- ...SCRIPT_FUNCTIONS.map(String),
239
- `return await ${call};`,
240
- ''
241
- ].join('\n\n');
242
- }
243
- export function buildSetTagScript(input) {
244
- return buildScript(`Set Fundus tag ${JSON.stringify(input.tag)} on Figma node ${JSON.stringify(input.nodeId)}.`, `setFundusTag(figma, ${JSON.stringify(input)})`);
245
- }
246
- export function buildDeleteTagScript(input) {
247
- return buildScript(`Delete Fundus tag ${JSON.stringify(input.tag)} from Figma node ${JSON.stringify(input.nodeId)}.`, `deleteFundusTag(figma, ${JSON.stringify(input)})`);
248
- }