fundus 0.12.2 → 0.14.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 (175) hide show
  1. package/build/client/_app/immutable/assets/AssetSourceMenu.IjDdjx3o.css +1 -0
  2. package/build/client/_app/immutable/assets/AssetSourceMenu.IjDdjx3o.css.br +0 -0
  3. package/build/client/_app/immutable/assets/AssetSourceMenu.IjDdjx3o.css.gz +0 -0
  4. package/build/client/_app/immutable/chunks/77p2oEJ1.js +1 -0
  5. package/build/client/_app/immutable/chunks/77p2oEJ1.js.br +0 -0
  6. package/build/client/_app/immutable/chunks/77p2oEJ1.js.gz +0 -0
  7. package/build/client/_app/immutable/chunks/B_PWcB6g.js +108 -0
  8. package/build/client/_app/immutable/chunks/B_PWcB6g.js.br +0 -0
  9. package/build/client/_app/immutable/chunks/B_PWcB6g.js.gz +0 -0
  10. package/build/client/_app/immutable/chunks/{D-dMdMUj.js → RgXSPQ_h.js} +1 -1
  11. package/build/client/_app/immutable/chunks/RgXSPQ_h.js.br +0 -0
  12. package/build/client/_app/immutable/chunks/RgXSPQ_h.js.gz +0 -0
  13. package/build/client/_app/immutable/entry/{app.CmTIRtCw.js → app.BsvwTApt.js} +2 -2
  14. package/build/client/_app/immutable/entry/app.BsvwTApt.js.br +0 -0
  15. package/build/client/_app/immutable/entry/app.BsvwTApt.js.gz +0 -0
  16. package/build/client/_app/immutable/entry/start.BdjLMMsY.js +1 -0
  17. package/build/client/_app/immutable/entry/start.BdjLMMsY.js.br +0 -0
  18. package/build/client/_app/immutable/entry/start.BdjLMMsY.js.gz +0 -0
  19. package/build/client/_app/immutable/nodes/{0.CNULKexJ.js → 0.CjQfQrD6.js} +1 -1
  20. package/build/client/_app/immutable/nodes/0.CjQfQrD6.js.br +0 -0
  21. package/build/client/_app/immutable/nodes/0.CjQfQrD6.js.gz +0 -0
  22. package/build/client/_app/immutable/nodes/{1.Cq-r1S-6.js → 1.DyPcUKIh.js} +1 -1
  23. package/build/client/_app/immutable/nodes/1.DyPcUKIh.js.br +2 -0
  24. package/build/client/_app/immutable/nodes/1.DyPcUKIh.js.gz +0 -0
  25. package/build/client/_app/immutable/nodes/{2.B4CjEZCb.js → 2.CworwA2R.js} +1 -1
  26. package/build/client/_app/immutable/nodes/2.CworwA2R.js.br +0 -0
  27. package/build/client/_app/immutable/nodes/2.CworwA2R.js.gz +0 -0
  28. package/build/client/_app/immutable/nodes/3.BKqbML1T.js +1 -0
  29. package/build/client/_app/immutable/nodes/3.BKqbML1T.js.br +0 -0
  30. package/build/client/_app/immutable/nodes/3.BKqbML1T.js.gz +0 -0
  31. package/build/client/_app/immutable/nodes/{4.BkqPmamr.js → 4.Cmigd8CT.js} +1 -1
  32. package/build/client/_app/immutable/nodes/4.Cmigd8CT.js.br +0 -0
  33. package/build/client/_app/immutable/nodes/4.Cmigd8CT.js.gz +0 -0
  34. package/build/client/_app/version.json +1 -1
  35. package/build/client/_app/version.json.br +0 -0
  36. package/build/client/_app/version.json.gz +0 -0
  37. package/build/handler.js +7 -7
  38. package/build/index.js +7 -7
  39. package/build/server/chunks/chunks/{context.js-6YdbScn_.js → context.js-CVuTSPjH.js} +2 -2
  40. package/build/server/chunks/chunks/{context.js-6YdbScn_.js.map → context.js-CVuTSPjH.js.map} +1 -1
  41. package/build/server/chunks/chunks/{contract.js-BHQbpsFk.js → contract.js-itFN0Gon.js} +6 -2
  42. package/build/server/chunks/chunks/contract.js-itFN0Gon.js.map +1 -0
  43. package/build/server/chunks/chunks/{exports.js-ku1LJuiG.js → exports.js-B13PkE0J.js} +2 -2
  44. package/build/server/chunks/chunks/{exports.js-ku1LJuiG.js.map → exports.js-B13PkE0J.js.map} +1 -1
  45. package/build/server/chunks/chunks/{http.js-dbT0ifQ9.js → http.js-ChQRRKfZ.js} +2 -2
  46. package/build/server/chunks/chunks/{http.js-dbT0ifQ9.js.map → http.js-ChQRRKfZ.js.map} +1 -1
  47. package/build/server/chunks/chunks/{internal.js-BSRzKMSE.js → internal.js-DlKoWKM-.js} +3 -3
  48. package/build/server/chunks/chunks/{internal.js-BSRzKMSE.js.map → internal.js-DlKoWKM-.js.map} +1 -1
  49. package/build/server/chunks/chunks/internal2.js-BlXt2rfE.js.map +1 -1
  50. package/build/server/chunks/chunks/{shared.js-DgL50WRD.js → shared.js-DKt4pwWi.js} +2 -2
  51. package/build/server/chunks/chunks/{shared.js-DgL50WRD.js.map → shared.js-DKt4pwWi.js.map} +1 -1
  52. package/build/server/chunks/chunks/{utils.js-D4p4YSNW.js → utils.js-BYMC-4Wt.js} +3 -3
  53. package/build/server/chunks/chunks/{utils.js-D4p4YSNW.js.map → utils.js-BYMC-4Wt.js.map} +1 -1
  54. package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-BaMGnbi8.js → _server.ts.js-z988EDp2.js} +3 -3
  55. package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-BaMGnbi8.js.map → _server.ts.js-z988EDp2.js.map} +1 -1
  56. package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-B6YhmqYd.js → _server.ts.js-C68ru6gS.js} +4 -4
  57. package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-B6YhmqYd.js.map → _server.ts.js-C68ru6gS.js.map} +1 -1
  58. package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/{_server.ts.js-qtGGwjZ4.js → _server.ts.js-C0tk6RFk.js} +4 -4
  59. package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/{_server.ts.js-qtGGwjZ4.js.map → _server.ts.js-C0tk6RFk.js.map} +1 -1
  60. package/build/server/chunks/entries/endpoints/api/assets/_id_/reimport/{_server.ts.js-98vjovDS.js → _server.ts.js-I03oZuo8.js} +4 -4
  61. package/build/server/chunks/entries/endpoints/api/assets/_id_/reimport/{_server.ts.js-98vjovDS.js.map → _server.ts.js-I03oZuo8.js.map} +1 -1
  62. package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-CCzQEr--.js → _server.ts.js-BsQB8YDq.js} +4 -4
  63. package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-CCzQEr--.js.map → _server.ts.js-BsQB8YDq.js.map} +1 -1
  64. package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-Ca7G_5IJ.js → _server.ts.js-CJuFE6Fb.js} +4 -4
  65. package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-Ca7G_5IJ.js.map → _server.ts.js-CJuFE6Fb.js.map} +1 -1
  66. package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-DRw4ICSn.js → _server.ts.js-DuOZRRiA.js} +4 -4
  67. package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-DRw4ICSn.js.map → _server.ts.js-DuOZRRiA.js.map} +1 -1
  68. package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-Ai46jTgw.js → _server.ts.js-DGzYpQbv.js} +4 -4
  69. package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-Ai46jTgw.js.map → _server.ts.js-DGzYpQbv.js.map} +1 -1
  70. package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-NQKYbtiU.js → _server.ts.js-B045QoCA.js} +4 -4
  71. package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-NQKYbtiU.js.map → _server.ts.js-B045QoCA.js.map} +1 -1
  72. package/build/server/chunks/entries/endpoints/api/imports/{_server.ts.js-_vJ2Npqd.js → _server.ts.js-HUkVdz19.js} +4 -4
  73. package/build/server/chunks/entries/endpoints/api/imports/{_server.ts.js-_vJ2Npqd.js.map → _server.ts.js-HUkVdz19.js.map} +1 -1
  74. package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-DIn5srjK.js → _server.ts.js-ry509mom.js} +4 -4
  75. package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-DIn5srjK.js.map → _server.ts.js-ry509mom.js.map} +1 -1
  76. package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-CqFLRTP-.js → _server.ts.js-DU0J7U25.js} +4 -4
  77. package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-CqFLRTP-.js.map → _server.ts.js-DU0J7U25.js.map} +1 -1
  78. package/build/server/chunks/entries/endpoints/api/raw/adopt/{_server.ts.js-BYn_v3VS.js → _server.ts.js-AZIV2PIn.js} +4 -4
  79. package/build/server/chunks/entries/endpoints/api/raw/adopt/{_server.ts.js-BYn_v3VS.js.map → _server.ts.js-AZIV2PIn.js.map} +1 -1
  80. package/build/server/chunks/entries/endpoints/api/raw/edited/accept/{_server.ts.js-sxVzkX1S.js → _server.ts.js-CDL0hCfM.js} +4 -4
  81. package/build/server/chunks/entries/endpoints/api/raw/edited/accept/{_server.ts.js-sxVzkX1S.js.map → _server.ts.js-CDL0hCfM.js.map} +1 -1
  82. package/build/server/chunks/entries/endpoints/api/raw/edited/dismiss/{_server.ts.js-E3B6VyAs.js → _server.ts.js-B13c17fq.js} +4 -4
  83. package/build/server/chunks/entries/endpoints/api/raw/edited/dismiss/{_server.ts.js-E3B6VyAs.js.map → _server.ts.js-B13c17fq.js.map} +1 -1
  84. package/build/server/chunks/entries/endpoints/api/reconcile/{_server.ts.js-ClgS9ghS.js → _server.ts.js-BCxjyAGC.js} +4 -4
  85. package/build/server/chunks/entries/endpoints/api/reconcile/{_server.ts.js-ClgS9ghS.js.map → _server.ts.js-BCxjyAGC.js.map} +1 -1
  86. package/build/server/chunks/entries/endpoints/api/reveal/{_server.ts.js-BPUzWMNL.js → _server.ts.js-BveeMZc2.js} +4 -4
  87. package/build/server/chunks/entries/endpoints/api/reveal/{_server.ts.js-BPUzWMNL.js.map → _server.ts.js-BveeMZc2.js.map} +1 -1
  88. package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-_G6pURnx.js → _server.ts.js-BZjTd9a0.js} +4 -4
  89. package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-_G6pURnx.js.map → _server.ts.js-BZjTd9a0.js.map} +1 -1
  90. package/build/server/chunks/entries/endpoints/api/usage/{_server.ts.js-as3GcjaI.js → _server.ts.js-BbTfPvC9.js} +4 -4
  91. package/build/server/chunks/entries/endpoints/api/usage/{_server.ts.js-as3GcjaI.js.map → _server.ts.js-BbTfPvC9.js.map} +1 -1
  92. package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-CR58wymO.js → _server.ts.js-8VPJMLBk.js} +3 -3
  93. package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-CR58wymO.js.map → _server.ts.js-8VPJMLBk.js.map} +1 -1
  94. package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-Do2LOf04.js → _server.ts.js-BqR2J2sB.js} +4 -4
  95. package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-Do2LOf04.js.map → _server.ts.js-BqR2J2sB.js.map} +1 -1
  96. package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-Ckp6_SaE.js → _server.ts.js-DbA28dCY.js} +4 -4
  97. package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-Ckp6_SaE.js.map → _server.ts.js-DbA28dCY.js.map} +1 -1
  98. package/build/server/chunks/entries/{hooks.server.js-CL1tg0CT.js → hooks.server.js-9PBc_3Jh.js} +3 -3
  99. package/build/server/chunks/entries/{hooks.server.js-CL1tg0CT.js.map → hooks.server.js-9PBc_3Jh.js.map} +1 -1
  100. package/build/server/chunks/{handler-BRtsY9uB.js → handler-XxBNCHhb.js} +5 -5
  101. package/build/server/chunks/{handler-BRtsY9uB.js.map → handler-XxBNCHhb.js.map} +1 -1
  102. package/build/server/chunks/{index.js-g3JzUW3v.js → index.js-B_76Gq5Y.js} +5 -5
  103. package/build/server/chunks/{index.js-g3JzUW3v.js.map → index.js-B_76Gq5Y.js.map} +1 -1
  104. package/build/server/chunks/{manifest.js-D51Bb0-d.js → manifest.js-C2MZZt3o.js} +29 -29
  105. package/build/server/chunks/{manifest.js-D51Bb0-d.js.map → manifest.js-C2MZZt3o.js.map} +1 -1
  106. package/build/server/chunks/nodes/{0.js-B1bRRxWY.js → 0.js-BLURyWmd.js} +2 -2
  107. package/build/server/chunks/nodes/{0.js-B1bRRxWY.js.map → 0.js-BLURyWmd.js.map} +1 -1
  108. package/build/server/chunks/nodes/1.js-CITI7d3d.js +7 -0
  109. package/build/server/chunks/nodes/{1.js-BIjbx0GP.js.map → 1.js-CITI7d3d.js.map} +1 -1
  110. package/build/server/chunks/nodes/2.js-DAls5TjF.js +7 -0
  111. package/build/server/chunks/nodes/{2.js-B6X0GbFS.js.map → 2.js-DAls5TjF.js.map} +1 -1
  112. package/build/server/chunks/nodes/3.js-CesAmg_E.js +7 -0
  113. package/build/server/chunks/nodes/{3.js-CQVJ114p.js.map → 3.js-CesAmg_E.js.map} +1 -1
  114. package/build/server/chunks/nodes/{4.js-Bt9pLOHE.js → 4.js-BRlAiVnn.js} +2 -2
  115. package/build/server/chunks/nodes/{4.js-Bt9pLOHE.js.map → 4.js-BRlAiVnn.js.map} +1 -1
  116. package/dist/core/index.d.ts +1 -1
  117. package/dist/core/manifest-entry.d.ts +14 -5
  118. package/dist/runtime/components/ChromaKeyVideo.svelte +3 -0
  119. package/dist/runtime/components/Image.svelte +3 -0
  120. package/dist/runtime/components/Slice.svelte +215 -18
  121. package/dist/runtime/components/Slice.svelte.d.ts +3 -4
  122. package/dist/runtime/components/Video.svelte +3 -0
  123. package/dist/runtime/geometry.d.ts +15 -9
  124. package/dist/runtime/geometry.js +21 -14
  125. package/dist/runtime/index.d.ts +3 -0
  126. package/dist/runtime/index.js +1 -0
  127. package/dist/runtime/kind-handlers.d.ts +22 -10
  128. package/dist/runtime/kind-handlers.js +58 -21
  129. package/dist/runtime/logging.d.ts +34 -0
  130. package/dist/runtime/logging.js +27 -0
  131. package/dist/runtime/manifest.d.ts +16 -5
  132. package/dist/runtime/manifest.js +19 -8
  133. package/dist/runtime/observe-border-box-size.d.ts +1 -1
  134. package/dist/runtime/observe-border-box-size.js +2 -2
  135. package/dist/runtime/preload-registry.d.ts +20 -1
  136. package/dist/runtime/preload-registry.js +23 -2
  137. package/dist/runtime/slice-source-lifecycle.d.ts +11 -2
  138. package/dist/runtime/slice-source-lifecycle.js +21 -2
  139. package/dist/server/codegen.js +5 -1
  140. package/package.json +1 -1
  141. package/build/client/_app/immutable/assets/AssetSourceMenu.DOu9eU7n.css +0 -1
  142. package/build/client/_app/immutable/assets/AssetSourceMenu.DOu9eU7n.css.br +0 -0
  143. package/build/client/_app/immutable/assets/AssetSourceMenu.DOu9eU7n.css.gz +0 -0
  144. package/build/client/_app/immutable/chunks/BR73V5PG.js +0 -1
  145. package/build/client/_app/immutable/chunks/BR73V5PG.js.br +0 -2
  146. package/build/client/_app/immutable/chunks/BR73V5PG.js.gz +0 -0
  147. package/build/client/_app/immutable/chunks/D-dMdMUj.js.br +0 -0
  148. package/build/client/_app/immutable/chunks/D-dMdMUj.js.gz +0 -0
  149. package/build/client/_app/immutable/chunks/PGG-LyPT.js +0 -108
  150. package/build/client/_app/immutable/chunks/PGG-LyPT.js.br +0 -0
  151. package/build/client/_app/immutable/chunks/PGG-LyPT.js.gz +0 -0
  152. package/build/client/_app/immutable/entry/app.CmTIRtCw.js.br +0 -0
  153. package/build/client/_app/immutable/entry/app.CmTIRtCw.js.gz +0 -0
  154. package/build/client/_app/immutable/entry/start.M4xqAoBc.js +0 -1
  155. package/build/client/_app/immutable/entry/start.M4xqAoBc.js.br +0 -1
  156. package/build/client/_app/immutable/entry/start.M4xqAoBc.js.gz +0 -0
  157. package/build/client/_app/immutable/nodes/0.CNULKexJ.js.br +0 -0
  158. package/build/client/_app/immutable/nodes/0.CNULKexJ.js.gz +0 -0
  159. package/build/client/_app/immutable/nodes/1.Cq-r1S-6.js.br +0 -0
  160. package/build/client/_app/immutable/nodes/1.Cq-r1S-6.js.gz +0 -0
  161. package/build/client/_app/immutable/nodes/2.B4CjEZCb.js.br +0 -0
  162. package/build/client/_app/immutable/nodes/2.B4CjEZCb.js.gz +0 -0
  163. package/build/client/_app/immutable/nodes/3.DzWxKBWe.js +0 -1
  164. package/build/client/_app/immutable/nodes/3.DzWxKBWe.js.br +0 -0
  165. package/build/client/_app/immutable/nodes/3.DzWxKBWe.js.gz +0 -0
  166. package/build/client/_app/immutable/nodes/4.BkqPmamr.js.br +0 -0
  167. package/build/client/_app/immutable/nodes/4.BkqPmamr.js.gz +0 -0
  168. package/build/server/chunks/chunks/contract.js-BHQbpsFk.js.map +0 -1
  169. package/build/server/chunks/nodes/1.js-BIjbx0GP.js +0 -7
  170. package/build/server/chunks/nodes/2.js-B6X0GbFS.js +0 -7
  171. package/build/server/chunks/nodes/3.js-CQVJ114p.js +0 -7
  172. package/dist/runtime/components/SliceCanvas.svelte +0 -173
  173. package/dist/runtime/components/SliceCanvas.svelte.d.ts +0 -10
  174. package/dist/runtime/components/SliceDom.svelte +0 -161
  175. package/dist/runtime/components/SliceDom.svelte.d.ts +0 -10
@@ -1,161 +0,0 @@
1
- <!--
2
- DOM slice backend using the entry-based API: the slicing arrives inline on the
3
- `SliceManifestEntry` (no registry, no manifest lookup). One component covers
4
- all modes (nine / three-horizontal / three-vertical / one) — the mode lives
5
- in the entry. Private: hosts render `Slice.svelte`, which dispatches between
6
- this and the canvas backend.
7
-
8
- Fills its container and measures it (ResizeObserver), then paints the complete
9
- slice through one CSS border-image. The browser still stretches the same source
10
- regions computed by `computeRenderCells`, but rasterizes them as one border
11
- image instead of separate clipped elements. Shared slice edges therefore cannot
12
- expose the background under fractional transforms.
13
- With overdraw the paint element extends past the container (negative offsets),
14
- so the root switches to overflow: visible and the baked shadow/glow draws
15
- outside the layout box.
16
- -->
17
- <script lang="ts">
18
- import type { SliceInsets, SliceManifestEntry } from '../../core/index.js';
19
- import { computeRenderCells, effectiveInsets, effectiveOverdraw } from '../geometry.js';
20
- import { observeBorderBoxSize } from '../observe-border-box-size.js';
21
- import type { LoadedSliceSnapshot } from '../slice-source-lifecycle.js';
22
-
23
- interface Props {
24
- snapshot: LoadedSliceSnapshot | null;
25
- /** Accessible label for the rendered graphic. */
26
- alt?: string;
27
- class?: string;
28
- }
29
-
30
- let { snapshot, alt = '', class: className = '' }: Props = $props();
31
-
32
- let root = $state<HTMLDivElement>();
33
- let boxWidth = $state(0);
34
- let boxHeight = $state(0);
35
-
36
- interface BorderImagePaint {
37
- left: number;
38
- top: number;
39
- width: number;
40
- height: number;
41
- slices: SliceInsets;
42
- widths: SliceInsets;
43
- }
44
-
45
- function clamp(value: number, min: number, max: number): number {
46
- return Math.max(min, Math.min(max, value));
47
- }
48
-
49
- function computeBorderImagePaint(
50
- entry: SliceManifestEntry,
51
- width: number,
52
- height: number
53
- ): BorderImagePaint | null {
54
- const cells = computeRenderCells(entry, width, height);
55
- if (cells.length === 0) return null;
56
-
57
- const effective = effectiveInsets(entry);
58
- const leftSlice = clamp(effective.left, 0, entry.sourceWidth);
59
- const rightSlice = clamp(effective.right, 0, entry.sourceWidth - leftSlice);
60
- const topSlice = clamp(effective.top, 0, entry.sourceHeight);
61
- const bottomSlice = clamp(effective.bottom, 0, entry.sourceHeight - topSlice);
62
- const slices = {
63
- top: topSlice,
64
- right: rightSlice,
65
- bottom: bottomSlice,
66
- left: leftSlice
67
- };
68
- const left = Math.min(...cells.map((cell) => cell.dx));
69
- const top = Math.min(...cells.map((cell) => cell.dy));
70
- const right = Math.max(...cells.map((cell) => cell.dx + cell.dw));
71
- const bottom = Math.max(...cells.map((cell) => cell.dy + cell.dh));
72
-
73
- return {
74
- left,
75
- top,
76
- width: right - left,
77
- height: bottom - top,
78
- slices,
79
- widths: {
80
- top: cells.find((cell) => topSlice > 0 && cell.sy === 0 && cell.sh === topSlice)?.dh ?? 0,
81
- right:
82
- cells.find(
83
- (cell) =>
84
- rightSlice > 0 && cell.sx === entry.sourceWidth - rightSlice && cell.sw === rightSlice
85
- )?.dw ?? 0,
86
- bottom:
87
- cells.find(
88
- (cell) =>
89
- bottomSlice > 0 &&
90
- cell.sy === entry.sourceHeight - bottomSlice &&
91
- cell.sh === bottomSlice
92
- )?.dh ?? 0,
93
- left: cells.find((cell) => leftSlice > 0 && cell.sx === 0 && cell.sw === leftSlice)?.dw ?? 0
94
- }
95
- };
96
- }
97
-
98
- $effect(() => {
99
- const element = root;
100
- if (!element) return;
101
- return observeBorderBoxSize(element, (width, height) => {
102
- boxWidth = width;
103
- boxHeight = height;
104
- });
105
- });
106
-
107
- const entry = $derived(snapshot?.entry ?? null);
108
- const paint = $derived(entry ? computeBorderImagePaint(entry, boxWidth, boxHeight) : null);
109
- const hasOverdraw = $derived.by(() => {
110
- if (!entry) return false;
111
- const overdraw = effectiveOverdraw(entry);
112
- return overdraw.top > 0 || overdraw.right > 0 || overdraw.bottom > 0 || overdraw.left > 0;
113
- });
114
- </script>
115
-
116
- <div
117
- bind:this={root}
118
- class="fundus-slice {className}"
119
- class:fundus-slice--overdraw={hasOverdraw}
120
- role={alt ? 'img' : undefined}
121
- aria-label={alt || undefined}
122
- >
123
- {#if entry && paint}
124
- <div
125
- class="fundus-slice__paint"
126
- style:left="{paint.left}px"
127
- style:top="{paint.top}px"
128
- style:width="{paint.width}px"
129
- style:height="{paint.height}px"
130
- style:border-image-source={`url(${JSON.stringify(entry.src)})`}
131
- style:border-image-slice={`${paint.slices.top} ${paint.slices.right} ${paint.slices.bottom} ${paint.slices.left} fill`}
132
- style:border-image-width={`${paint.widths.top}px ${paint.widths.right}px ${paint.widths.bottom}px ${paint.widths.left}px`}
133
- ></div>
134
- {/if}
135
- </div>
136
-
137
- <style>
138
- .fundus-slice {
139
- position: relative;
140
- width: 100%;
141
- height: 100%;
142
- overflow: hidden;
143
- }
144
-
145
- /* Overdraw deliberately extends the paint past the box — don't clip it. */
146
- .fundus-slice--overdraw {
147
- overflow: visible;
148
- }
149
-
150
- .fundus-slice__paint {
151
- position: absolute;
152
- box-sizing: border-box;
153
- border-width: 0;
154
- border-style: solid;
155
- border-image-repeat: stretch;
156
- pointer-events: none;
157
- /* Offload to the GPU so border-image edges don't pop as hairlines under
158
- fractional transforms. */
159
- will-change: transform;
160
- }
161
- </style>
@@ -1,10 +0,0 @@
1
- import type { LoadedSliceSnapshot } from '../slice-source-lifecycle.js';
2
- interface Props {
3
- snapshot: LoadedSliceSnapshot | null;
4
- /** Accessible label for the rendered graphic. */
5
- alt?: string;
6
- class?: string;
7
- }
8
- declare const SliceDom: import("svelte").Component<Props, {}, "">;
9
- type SliceDom = ReturnType<typeof SliceDom>;
10
- export default SliceDom;