@fuzdev/fuz_ui 0.169.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 (323) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +93 -0
  3. package/dist/Alert.svelte +108 -0
  4. package/dist/Alert.svelte.d.ts +16 -0
  5. package/dist/Alert.svelte.d.ts.map +1 -0
  6. package/dist/ApiDeclarationList.svelte +35 -0
  7. package/dist/ApiDeclarationList.svelte.d.ts +9 -0
  8. package/dist/ApiDeclarationList.svelte.d.ts.map +1 -0
  9. package/dist/ApiIndex.svelte +65 -0
  10. package/dist/ApiIndex.svelte.d.ts +23 -0
  11. package/dist/ApiIndex.svelte.d.ts.map +1 -0
  12. package/dist/ApiModule.svelte +124 -0
  13. package/dist/ApiModule.svelte.d.ts +22 -0
  14. package/dist/ApiModule.svelte.d.ts.map +1 -0
  15. package/dist/Breadcrumb.svelte +83 -0
  16. package/dist/Breadcrumb.svelte.d.ts +23 -0
  17. package/dist/Breadcrumb.svelte.d.ts.map +1 -0
  18. package/dist/Card.svelte +157 -0
  19. package/dist/Card.svelte.d.ts +13 -0
  20. package/dist/Card.svelte.d.ts.map +1 -0
  21. package/dist/ColorSchemeInput.svelte +65 -0
  22. package/dist/ColorSchemeInput.svelte.d.ts +11 -0
  23. package/dist/ColorSchemeInput.svelte.d.ts.map +1 -0
  24. package/dist/Contextmenu.svelte +30 -0
  25. package/dist/Contextmenu.svelte.d.ts +32 -0
  26. package/dist/Contextmenu.svelte.d.ts.map +1 -0
  27. package/dist/ContextmenuEntry.svelte +74 -0
  28. package/dist/ContextmenuEntry.svelte.d.ts +12 -0
  29. package/dist/ContextmenuEntry.svelte.d.ts.map +1 -0
  30. package/dist/ContextmenuLinkEntry.svelte +112 -0
  31. package/dist/ContextmenuLinkEntry.svelte.d.ts +12 -0
  32. package/dist/ContextmenuLinkEntry.svelte.d.ts.map +1 -0
  33. package/dist/ContextmenuRoot.svelte +372 -0
  34. package/dist/ContextmenuRoot.svelte.d.ts +71 -0
  35. package/dist/ContextmenuRoot.svelte.d.ts.map +1 -0
  36. package/dist/ContextmenuRootForSafariCompatibility.svelte +541 -0
  37. package/dist/ContextmenuRootForSafariCompatibility.svelte.d.ts +79 -0
  38. package/dist/ContextmenuRootForSafariCompatibility.svelte.d.ts.map +1 -0
  39. package/dist/ContextmenuSeparator.svelte +16 -0
  40. package/dist/ContextmenuSeparator.svelte.d.ts +4 -0
  41. package/dist/ContextmenuSeparator.svelte.d.ts.map +1 -0
  42. package/dist/ContextmenuSubmenu.svelte +116 -0
  43. package/dist/ContextmenuSubmenu.svelte.d.ts +10 -0
  44. package/dist/ContextmenuSubmenu.svelte.d.ts.map +1 -0
  45. package/dist/ContextmenuTextEntry.svelte +21 -0
  46. package/dist/ContextmenuTextEntry.svelte.d.ts +10 -0
  47. package/dist/ContextmenuTextEntry.svelte.d.ts.map +1 -0
  48. package/dist/CopyToClipboard.svelte +81 -0
  49. package/dist/CopyToClipboard.svelte.d.ts +18 -0
  50. package/dist/CopyToClipboard.svelte.d.ts.map +1 -0
  51. package/dist/DeclarationDetail.svelte +340 -0
  52. package/dist/DeclarationDetail.svelte.d.ts +8 -0
  53. package/dist/DeclarationDetail.svelte.d.ts.map +1 -0
  54. package/dist/DeclarationLink.svelte +50 -0
  55. package/dist/DeclarationLink.svelte.d.ts +8 -0
  56. package/dist/DeclarationLink.svelte.d.ts.map +1 -0
  57. package/dist/Details.svelte +51 -0
  58. package/dist/Details.svelte.d.ts +20 -0
  59. package/dist/Details.svelte.d.ts.map +1 -0
  60. package/dist/Dialog.svelte +217 -0
  61. package/dist/Dialog.svelte.d.ts +30 -0
  62. package/dist/Dialog.svelte.d.ts.map +1 -0
  63. package/dist/Dialogs.svelte +28 -0
  64. package/dist/Dialogs.svelte.d.ts +11 -0
  65. package/dist/Dialogs.svelte.d.ts.map +1 -0
  66. package/dist/Docs.svelte +179 -0
  67. package/dist/Docs.svelte.d.ts +13 -0
  68. package/dist/Docs.svelte.d.ts.map +1 -0
  69. package/dist/DocsContent.svelte +40 -0
  70. package/dist/DocsContent.svelte.d.ts +14 -0
  71. package/dist/DocsContent.svelte.d.ts.map +1 -0
  72. package/dist/DocsFooter.svelte +64 -0
  73. package/dist/DocsFooter.svelte.d.ts +15 -0
  74. package/dist/DocsFooter.svelte.d.ts.map +1 -0
  75. package/dist/DocsLink.svelte +41 -0
  76. package/dist/DocsLink.svelte.d.ts +12 -0
  77. package/dist/DocsLink.svelte.d.ts.map +1 -0
  78. package/dist/DocsList.svelte +44 -0
  79. package/dist/DocsList.svelte.d.ts +11 -0
  80. package/dist/DocsList.svelte.d.ts.map +1 -0
  81. package/dist/DocsMenu.svelte +55 -0
  82. package/dist/DocsMenu.svelte.d.ts +11 -0
  83. package/dist/DocsMenu.svelte.d.ts.map +1 -0
  84. package/dist/DocsMenuHeader.svelte +15 -0
  85. package/dist/DocsMenuHeader.svelte.d.ts +9 -0
  86. package/dist/DocsMenuHeader.svelte.d.ts.map +1 -0
  87. package/dist/DocsModulesList.svelte +32 -0
  88. package/dist/DocsModulesList.svelte.d.ts +7 -0
  89. package/dist/DocsModulesList.svelte.d.ts.map +1 -0
  90. package/dist/DocsPageLinks.svelte +61 -0
  91. package/dist/DocsPageLinks.svelte.d.ts +8 -0
  92. package/dist/DocsPageLinks.svelte.d.ts.map +1 -0
  93. package/dist/DocsPrimaryNav.svelte +93 -0
  94. package/dist/DocsPrimaryNav.svelte.d.ts +11 -0
  95. package/dist/DocsPrimaryNav.svelte.d.ts.map +1 -0
  96. package/dist/DocsSearch.svelte +48 -0
  97. package/dist/DocsSearch.svelte.d.ts +11 -0
  98. package/dist/DocsSearch.svelte.d.ts.map +1 -0
  99. package/dist/DocsSecondaryNav.svelte +63 -0
  100. package/dist/DocsSecondaryNav.svelte.d.ts +9 -0
  101. package/dist/DocsSecondaryNav.svelte.d.ts.map +1 -0
  102. package/dist/DocsTertiaryNav.svelte +118 -0
  103. package/dist/DocsTertiaryNav.svelte.d.ts +10 -0
  104. package/dist/DocsTertiaryNav.svelte.d.ts.map +1 -0
  105. package/dist/EcosystemLinks.svelte +53 -0
  106. package/dist/EcosystemLinks.svelte.d.ts +7 -0
  107. package/dist/EcosystemLinks.svelte.d.ts.map +1 -0
  108. package/dist/EcosystemLinksPanel.svelte +22 -0
  109. package/dist/EcosystemLinksPanel.svelte.d.ts +8 -0
  110. package/dist/EcosystemLinksPanel.svelte.d.ts.map +1 -0
  111. package/dist/GithubLink.svelte +75 -0
  112. package/dist/GithubLink.svelte.d.ts +14 -0
  113. package/dist/GithubLink.svelte.d.ts.map +1 -0
  114. package/dist/Glyph.svelte +28 -0
  115. package/dist/Glyph.svelte.d.ts +9 -0
  116. package/dist/Glyph.svelte.d.ts.map +1 -0
  117. package/dist/Hashlink.svelte +41 -0
  118. package/dist/Hashlink.svelte.d.ts +8 -0
  119. package/dist/Hashlink.svelte.d.ts.map +1 -0
  120. package/dist/HiddenPersonalLinks.svelte +6 -0
  121. package/dist/HiddenPersonalLinks.svelte.d.ts +27 -0
  122. package/dist/HiddenPersonalLinks.svelte.d.ts.map +1 -0
  123. package/dist/HueInput.svelte +127 -0
  124. package/dist/HueInput.svelte.d.ts +11 -0
  125. package/dist/HueInput.svelte.d.ts.map +1 -0
  126. package/dist/ImgOrSvg.svelte +58 -0
  127. package/dist/ImgOrSvg.svelte.d.ts +25 -0
  128. package/dist/ImgOrSvg.svelte.d.ts.map +1 -0
  129. package/dist/LibraryDetail.svelte +297 -0
  130. package/dist/LibraryDetail.svelte.d.ts +15 -0
  131. package/dist/LibraryDetail.svelte.d.ts.map +1 -0
  132. package/dist/LibrarySummary.svelte +151 -0
  133. package/dist/LibrarySummary.svelte.d.ts +16 -0
  134. package/dist/LibrarySummary.svelte.d.ts.map +1 -0
  135. package/dist/MdnLink.svelte +40 -0
  136. package/dist/MdnLink.svelte.d.ts +8 -0
  137. package/dist/MdnLink.svelte.d.ts.map +1 -0
  138. package/dist/Mdz.svelte +30 -0
  139. package/dist/Mdz.svelte.d.ts +10 -0
  140. package/dist/Mdz.svelte.d.ts.map +1 -0
  141. package/dist/MdzNodeView.svelte +93 -0
  142. package/dist/MdzNodeView.svelte.d.ts +9 -0
  143. package/dist/MdzNodeView.svelte.d.ts.map +1 -0
  144. package/dist/ModuleLink.svelte +48 -0
  145. package/dist/ModuleLink.svelte.d.ts +8 -0
  146. package/dist/ModuleLink.svelte.d.ts.map +1 -0
  147. package/dist/PasteFromClipboard.svelte +35 -0
  148. package/dist/PasteFromClipboard.svelte.d.ts +9 -0
  149. package/dist/PasteFromClipboard.svelte.d.ts.map +1 -0
  150. package/dist/PendingAnimation.svelte +62 -0
  151. package/dist/PendingAnimation.svelte.d.ts +13 -0
  152. package/dist/PendingAnimation.svelte.d.ts.map +1 -0
  153. package/dist/PendingButton.svelte +75 -0
  154. package/dist/PendingButton.svelte.d.ts +17 -0
  155. package/dist/PendingButton.svelte.d.ts.map +1 -0
  156. package/dist/ProjectLinks.svelte +54 -0
  157. package/dist/ProjectLinks.svelte.d.ts +19 -0
  158. package/dist/ProjectLinks.svelte.d.ts.map +1 -0
  159. package/dist/Redirect.svelte +44 -0
  160. package/dist/Redirect.svelte.d.ts +23 -0
  161. package/dist/Redirect.svelte.d.ts.map +1 -0
  162. package/dist/Spiders.svelte +57 -0
  163. package/dist/Spiders.svelte.d.ts +9 -0
  164. package/dist/Spiders.svelte.d.ts.map +1 -0
  165. package/dist/Svg.svelte +99 -0
  166. package/dist/Svg.svelte.d.ts +54 -0
  167. package/dist/Svg.svelte.d.ts.map +1 -0
  168. package/dist/Teleport.svelte +48 -0
  169. package/dist/Teleport.svelte.d.ts +15 -0
  170. package/dist/Teleport.svelte.d.ts.map +1 -0
  171. package/dist/ThemeInput.svelte +75 -0
  172. package/dist/ThemeInput.svelte.d.ts +15 -0
  173. package/dist/ThemeInput.svelte.d.ts.map +1 -0
  174. package/dist/Themed.svelte +101 -0
  175. package/dist/Themed.svelte.d.ts +24 -0
  176. package/dist/Themed.svelte.d.ts.map +1 -0
  177. package/dist/TomeContent.svelte +67 -0
  178. package/dist/TomeContent.svelte.d.ts +12 -0
  179. package/dist/TomeContent.svelte.d.ts.map +1 -0
  180. package/dist/TomeHeader.svelte +56 -0
  181. package/dist/TomeHeader.svelte.d.ts +4 -0
  182. package/dist/TomeHeader.svelte.d.ts.map +1 -0
  183. package/dist/TomeLink.svelte +29 -0
  184. package/dist/TomeLink.svelte.d.ts +10 -0
  185. package/dist/TomeLink.svelte.d.ts.map +1 -0
  186. package/dist/TomeSection.svelte +65 -0
  187. package/dist/TomeSection.svelte.d.ts +24 -0
  188. package/dist/TomeSection.svelte.d.ts.map +1 -0
  189. package/dist/TomeSectionHeader.svelte +90 -0
  190. package/dist/TomeSectionHeader.svelte.d.ts +13 -0
  191. package/dist/TomeSectionHeader.svelte.d.ts.map +1 -0
  192. package/dist/TypeLink.svelte +19 -0
  193. package/dist/TypeLink.svelte.d.ts +7 -0
  194. package/dist/TypeLink.svelte.d.ts.map +1 -0
  195. package/dist/alert.d.ts +7 -0
  196. package/dist/alert.d.ts.map +1 -0
  197. package/dist/alert.js +6 -0
  198. package/dist/api_search.svelte.d.ts +16 -0
  199. package/dist/api_search.svelte.d.ts.map +1 -0
  200. package/dist/api_search.svelte.js +61 -0
  201. package/dist/constants.d.ts +2 -0
  202. package/dist/constants.d.ts.map +1 -0
  203. package/dist/constants.js +3 -0
  204. package/dist/context_helpers.d.ts +17 -0
  205. package/dist/context_helpers.d.ts.map +1 -0
  206. package/dist/context_helpers.js +19 -0
  207. package/dist/contextmenu_helpers.d.ts +16 -0
  208. package/dist/contextmenu_helpers.d.ts.map +1 -0
  209. package/dist/contextmenu_helpers.js +39 -0
  210. package/dist/contextmenu_state.svelte.d.ts +152 -0
  211. package/dist/contextmenu_state.svelte.d.ts.map +1 -0
  212. package/dist/contextmenu_state.svelte.js +424 -0
  213. package/dist/csp.d.ts +160 -0
  214. package/dist/csp.d.ts.map +1 -0
  215. package/dist/csp.js +354 -0
  216. package/dist/csp_of_ryanatkn.d.ts +6 -0
  217. package/dist/csp_of_ryanatkn.d.ts.map +1 -0
  218. package/dist/csp_of_ryanatkn.js +14 -0
  219. package/dist/declaration.svelte.d.ts +84 -0
  220. package/dist/declaration.svelte.d.ts.map +1 -0
  221. package/dist/declaration.svelte.js +66 -0
  222. package/dist/declaration_contextmenu.d.ts +4 -0
  223. package/dist/declaration_contextmenu.d.ts.map +1 -0
  224. package/dist/declaration_contextmenu.js +14 -0
  225. package/dist/dialog.d.ts +24 -0
  226. package/dist/dialog.d.ts.map +1 -0
  227. package/dist/dialog.js +12 -0
  228. package/dist/dimensions.svelte.d.ts +5 -0
  229. package/dist/dimensions.svelte.d.ts.map +1 -0
  230. package/dist/dimensions.svelte.js +4 -0
  231. package/dist/docs_helpers.svelte.d.ts +48 -0
  232. package/dist/docs_helpers.svelte.d.ts.map +1 -0
  233. package/dist/docs_helpers.svelte.js +99 -0
  234. package/dist/helpers.d.ts +2 -0
  235. package/dist/helpers.d.ts.map +1 -0
  236. package/dist/helpers.js +16 -0
  237. package/dist/intersect.svelte.d.ts +47 -0
  238. package/dist/intersect.svelte.d.ts.map +1 -0
  239. package/dist/intersect.svelte.js +92 -0
  240. package/dist/library.svelte.d.ts +197 -0
  241. package/dist/library.svelte.d.ts.map +1 -0
  242. package/dist/library.svelte.js +130 -0
  243. package/dist/library_gen.d.ts +34 -0
  244. package/dist/library_gen.d.ts.map +1 -0
  245. package/dist/library_gen.js +123 -0
  246. package/dist/library_gen_helpers.d.ts +85 -0
  247. package/dist/library_gen_helpers.d.ts.map +1 -0
  248. package/dist/library_gen_helpers.js +188 -0
  249. package/dist/library_helpers.d.ts +54 -0
  250. package/dist/library_helpers.d.ts.map +1 -0
  251. package/dist/library_helpers.js +102 -0
  252. package/dist/logos.d.ts +134 -0
  253. package/dist/logos.d.ts.map +1 -0
  254. package/dist/logos.js +281 -0
  255. package/dist/mdz.d.ts +106 -0
  256. package/dist/mdz.d.ts.map +1 -0
  257. package/dist/mdz.js +1481 -0
  258. package/dist/mdz_components.d.ts +37 -0
  259. package/dist/mdz_components.d.ts.map +1 -0
  260. package/dist/mdz_components.js +12 -0
  261. package/dist/module.svelte.d.ts +47 -0
  262. package/dist/module.svelte.d.ts.map +1 -0
  263. package/dist/module.svelte.js +56 -0
  264. package/dist/module_contextmenu.d.ts +4 -0
  265. package/dist/module_contextmenu.d.ts.map +1 -0
  266. package/dist/module_contextmenu.js +14 -0
  267. package/dist/module_helpers.d.ts +69 -0
  268. package/dist/module_helpers.d.ts.map +1 -0
  269. package/dist/module_helpers.js +87 -0
  270. package/dist/rune_helpers.svelte.d.ts +6 -0
  271. package/dist/rune_helpers.svelte.d.ts.map +1 -0
  272. package/dist/rune_helpers.svelte.js +10 -0
  273. package/dist/storage.d.ts +13 -0
  274. package/dist/storage.d.ts.map +1 -0
  275. package/dist/storage.js +43 -0
  276. package/dist/svelte_helpers.d.ts +37 -0
  277. package/dist/svelte_helpers.d.ts.map +1 -0
  278. package/dist/svelte_helpers.js +245 -0
  279. package/dist/themer.svelte.d.ts +24 -0
  280. package/dist/themer.svelte.d.ts.map +1 -0
  281. package/dist/themer.svelte.js +43 -0
  282. package/dist/tome.d.ts +80 -0
  283. package/dist/tome.d.ts.map +1 -0
  284. package/dist/tome.js +27 -0
  285. package/dist/ts_helpers.d.ts +110 -0
  286. package/dist/ts_helpers.d.ts.map +1 -0
  287. package/dist/ts_helpers.js +533 -0
  288. package/dist/tsdoc_helpers.d.ts +98 -0
  289. package/dist/tsdoc_helpers.d.ts.map +1 -0
  290. package/dist/tsdoc_helpers.js +221 -0
  291. package/package.json +128 -0
  292. package/src/lib/alert.ts +14 -0
  293. package/src/lib/api_search.svelte.ts +85 -0
  294. package/src/lib/constants.ts +3 -0
  295. package/src/lib/context_helpers.ts +47 -0
  296. package/src/lib/contextmenu_helpers.ts +63 -0
  297. package/src/lib/contextmenu_state.svelte.ts +515 -0
  298. package/src/lib/csp.ts +576 -0
  299. package/src/lib/csp_of_ryanatkn.ts +16 -0
  300. package/src/lib/declaration.svelte.ts +102 -0
  301. package/src/lib/declaration_contextmenu.ts +22 -0
  302. package/src/lib/dialog.ts +35 -0
  303. package/src/lib/dimensions.svelte.ts +4 -0
  304. package/src/lib/docs_helpers.svelte.ts +149 -0
  305. package/src/lib/helpers.ts +10 -0
  306. package/src/lib/intersect.svelte.ts +152 -0
  307. package/src/lib/library.svelte.ts +162 -0
  308. package/src/lib/library_gen.ts +160 -0
  309. package/src/lib/library_gen_helpers.ts +262 -0
  310. package/src/lib/library_helpers.ts +123 -0
  311. package/src/lib/logos.ts +302 -0
  312. package/src/lib/mdz.ts +1819 -0
  313. package/src/lib/mdz_components.ts +34 -0
  314. package/src/lib/module.svelte.ts +78 -0
  315. package/src/lib/module_contextmenu.ts +20 -0
  316. package/src/lib/module_helpers.ts +113 -0
  317. package/src/lib/rune_helpers.svelte.ts +10 -0
  318. package/src/lib/storage.ts +48 -0
  319. package/src/lib/svelte_helpers.ts +303 -0
  320. package/src/lib/themer.svelte.ts +68 -0
  321. package/src/lib/tome.ts +38 -0
  322. package/src/lib/ts_helpers.ts +662 -0
  323. package/src/lib/tsdoc_helpers.ts +259 -0
@@ -0,0 +1,99 @@
1
+ <script lang="ts" module>
2
+ import {ensure_end} from '@fuzdev/fuz_util/string.js';
3
+ import type {SvelteHTMLElements} from 'svelte/elements';
4
+
5
+ export interface SvgData {
6
+ /**
7
+ * Raw svg markup string that's inserted unsafely as a child of the `svg` element.
8
+ * This is an escape hatch for non-`path` markup -
9
+ * generally, you should instead use the `paths` property to avoid security/CSP implications.
10
+ */
11
+ raw?: string | null;
12
+ /**
13
+ * List of svg `path` attribute objects. The `d` attribute is required.
14
+ */
15
+ paths?: Array<{d: string} & SvelteHTMLElements['path']> | null;
16
+ attrs?: SvelteHTMLElements['svg'] | null;
17
+ fill?: string | null;
18
+ width?: string | null;
19
+ height?: string | null;
20
+ label?: string | null;
21
+ /**
22
+ * Defaults to `"0 0 100 100"`.
23
+ */
24
+ viewBox?: string | null;
25
+ }
26
+ </script>
27
+
28
+ <script lang="ts">
29
+ const {
30
+ data,
31
+ fill,
32
+ size = 'var(--font_size, auto)',
33
+ width,
34
+ height,
35
+ label,
36
+ inline,
37
+ shrink = true,
38
+ attrs,
39
+ }: {
40
+ data: SvgData;
41
+ /**
42
+ * Overrides `data.fill`.
43
+ */
44
+ fill?: string | null;
45
+ /**
46
+ * Sets both the `width` and `height` of the svg. Overridden by the `width` and `height` props.
47
+ */
48
+ size?: string;
49
+ /**
50
+ * Sets the `width` of the svg. Overrides `size`.
51
+ */
52
+ width?: string;
53
+ /**
54
+ * Sets the `height` of the svg. Overrides `size`.
55
+ */
56
+ height?: string;
57
+ label?: string;
58
+ /**
59
+ * Renders the SVG as an inline block with spacing appropriate for text. Defaults to `false`.
60
+ */
61
+ inline?: boolean;
62
+ shrink?: boolean;
63
+ attrs?: SvelteHTMLElements['svg'];
64
+ } = $props();
65
+
66
+ const final_fill = $derived(fill ?? data.fill ?? 'var(--text_color, #000)'); // can be overridden by each path's `fill` attribute
67
+ const final_width = $derived(width ?? size); // TODO @many default value? `100%` or omitted or something else?
68
+ const final_height = $derived(height ?? size); // TODO @many default value? `100%` or omitted or something else?
69
+
70
+ // merge `style` so users don't accidentally clobber any style data - maybe support other attrs or somehow clean this up?
71
+ const style = $derived(
72
+ data.attrs?.style && attrs?.style
73
+ ? ensure_end(data.attrs.style, ';') + ' ' + attrs.style
74
+ : (data.attrs?.style ?? attrs?.style),
75
+ );
76
+
77
+ // TODO dont use @html
78
+ </script>
79
+
80
+ <svg
81
+ viewBox={data.viewBox ?? '0 0 100 100'}
82
+ {...data.attrs}
83
+ {...attrs}
84
+ aria-label={label ?? data.label}
85
+ class:display_inline_block={inline}
86
+ class:position_relative={inline}
87
+ style:width={final_width}
88
+ style:height={final_height}
89
+ style:top={inline ? '0.1em' : undefined}
90
+ style:flex-shrink={shrink ? 1 : 0}
91
+ {style}
92
+ >
93
+ {#if data.raw}{@html data.raw}{/if}<!-- eslint-disable-line svelte/no-at-html-tags -->
94
+ {#if data.paths}
95
+ {#each data.paths as path (path)}
96
+ <path fill={final_fill} {...path} />
97
+ {/each}
98
+ {/if}
99
+ </svg>
@@ -0,0 +1,54 @@
1
+ import type { SvelteHTMLElements } from 'svelte/elements';
2
+ export interface SvgData {
3
+ /**
4
+ * Raw svg markup string that's inserted unsafely as a child of the `svg` element.
5
+ * This is an escape hatch for non-`path` markup -
6
+ * generally, you should instead use the `paths` property to avoid security/CSP implications.
7
+ */
8
+ raw?: string | null;
9
+ /**
10
+ * List of svg `path` attribute objects. The `d` attribute is required.
11
+ */
12
+ paths?: Array<{
13
+ d: string;
14
+ } & SvelteHTMLElements['path']> | null;
15
+ attrs?: SvelteHTMLElements['svg'] | null;
16
+ fill?: string | null;
17
+ width?: string | null;
18
+ height?: string | null;
19
+ label?: string | null;
20
+ /**
21
+ * Defaults to `"0 0 100 100"`.
22
+ */
23
+ viewBox?: string | null;
24
+ }
25
+ type $$ComponentProps = {
26
+ data: SvgData;
27
+ /**
28
+ * Overrides `data.fill`.
29
+ */
30
+ fill?: string | null;
31
+ /**
32
+ * Sets both the `width` and `height` of the svg. Overridden by the `width` and `height` props.
33
+ */
34
+ size?: string;
35
+ /**
36
+ * Sets the `width` of the svg. Overrides `size`.
37
+ */
38
+ width?: string;
39
+ /**
40
+ * Sets the `height` of the svg. Overrides `size`.
41
+ */
42
+ height?: string;
43
+ label?: string;
44
+ /**
45
+ * Renders the SVG as an inline block with spacing appropriate for text. Defaults to `false`.
46
+ */
47
+ inline?: boolean;
48
+ shrink?: boolean;
49
+ attrs?: SvelteHTMLElements['svg'];
50
+ };
51
+ declare const Svg: import("svelte").Component<$$ComponentProps, {}, "">;
52
+ type Svg = ReturnType<typeof Svg>;
53
+ export default Svg;
54
+ //# sourceMappingURL=Svg.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Svg.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/Svg.svelte"],"names":[],"mappings":"AAIC,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AAExD,MAAM,WAAW,OAAO;IACvB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;IAC/D,KAAK,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IACzC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,KAAK,gBAAgB,GAAI;IACxB,IAAI,EAAE,OAAO,CAAC;IACd;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;CAClC,CAAC;AAyCH,QAAA,MAAM,GAAG,sDAAwC,CAAC;AAClD,KAAK,GAAG,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC;AAClC,eAAe,GAAG,CAAC"}
@@ -0,0 +1,48 @@
1
+ <script lang="ts">
2
+ import {onDestroy, type Snippet} from 'svelte';
3
+
4
+ const {
5
+ to,
6
+ onmove,
7
+ children,
8
+ }: {
9
+ /**
10
+ * Defaults to `undefined` to lessen friction with SSR.
11
+ * We may want to change this to optionally accept a string selector,
12
+ * but that didn't seem to be the best API for the `Dialog`.
13
+ */
14
+ to?: HTMLElement | undefined | null;
15
+ onmove?: (el: HTMLElement, to: HTMLElement) => void;
16
+ children: Snippet;
17
+ } = $props();
18
+
19
+ let el: HTMLElement | undefined | null = $state();
20
+
21
+ $effect(() => {
22
+ if (el && to) {
23
+ move(el, to);
24
+ }
25
+ });
26
+
27
+ let moved = $state(false);
28
+
29
+ const move = (el: HTMLElement, to: HTMLElement): void => {
30
+ moved = true;
31
+ to.appendChild(el);
32
+ onmove?.(el, to);
33
+ };
34
+
35
+ onDestroy(() => {
36
+ el?.parentNode?.removeChild(el);
37
+ });
38
+ </script>
39
+
40
+ <div class="teleport" bind:this={el} hidden={!moved}>
41
+ {@render children()}
42
+ </div>
43
+
44
+ <style>
45
+ .teleport {
46
+ display: contents;
47
+ }
48
+ </style>
@@ -0,0 +1,15 @@
1
+ import { type Snippet } from 'svelte';
2
+ type $$ComponentProps = {
3
+ /**
4
+ * Defaults to `undefined` to lessen friction with SSR.
5
+ * We may want to change this to optionally accept a string selector,
6
+ * but that didn't seem to be the best API for the `Dialog`.
7
+ */
8
+ to?: HTMLElement | undefined | null;
9
+ onmove?: (el: HTMLElement, to: HTMLElement) => void;
10
+ children: Snippet;
11
+ };
12
+ declare const Teleport: import("svelte").Component<$$ComponentProps, {}, "">;
13
+ type Teleport = ReturnType<typeof Teleport>;
14
+ export default Teleport;
15
+ //# sourceMappingURL=Teleport.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Teleport.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/Teleport.svelte"],"names":[],"mappings":"AAGA,OAAO,EAAY,KAAK,OAAO,EAAC,MAAM,QAAQ,CAAC;AAE9C,KAAK,gBAAgB,GAAI;IACxB;;;;OAIG;IACH,EAAE,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,CAAC;IACpC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,KAAK,IAAI,CAAC;IACpD,QAAQ,EAAE,OAAO,CAAC;CAClB,CAAC;AAuCH,QAAA,MAAM,QAAQ,sDAAwC,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,75 @@
1
+ <script lang="ts">
2
+ import {swallow} from '@fuzdev/fuz_util/dom.js';
3
+ import type {Theme} from '@fuzdev/fuz_css/theme.js';
4
+ import {default_themes} from '@fuzdev/fuz_css/themes.js';
5
+
6
+ import {themer_context} from './themer.svelte.js';
7
+
8
+ const {
9
+ selected_theme = themer_context.get(),
10
+ themes = default_themes,
11
+ enable_editing = false,
12
+ select = (theme) => {
13
+ selected_theme.theme = theme;
14
+ },
15
+ onselect,
16
+ onedit,
17
+ }: {
18
+ selected_theme?: {theme: Theme};
19
+ themes?: Array<Theme>;
20
+ enable_editing?: boolean;
21
+ select?: ((theme: Theme) => void | boolean) | null;
22
+ onselect?: (theme: Theme) => void;
23
+ onedit?: (theme: Theme) => void;
24
+ } = $props();
25
+ </script>
26
+
27
+ <menu class="theme_input unstyled">
28
+ {#each themes as theme (theme.name)}
29
+ <!-- TODO @many proper equality check, won't work when we allow editing, need an id or unique names and a deep equality check -->
30
+ {@const selected = theme.name === selected_theme.theme.name}
31
+ <li class="row" role="none">
32
+ <button
33
+ type="button"
34
+ class="theme_button color_a"
35
+ role="menuitemradio"
36
+ aria-label="{theme.name} theme"
37
+ aria-checked={selected}
38
+ class:selected
39
+ onclick={(e) => {
40
+ swallow(e);
41
+ if (select?.(theme) !== false) {
42
+ onselect?.(theme);
43
+ }
44
+ }}
45
+ >
46
+ {theme.name}
47
+ </button>
48
+ {#if enable_editing}
49
+ <button
50
+ type="button"
51
+ class="icon_button plain ml_sm"
52
+ onclick={(e) => {
53
+ swallow(e);
54
+ onedit?.(theme);
55
+ }}>•••</button
56
+ >
57
+ {/if}
58
+ </li>
59
+ {/each}
60
+ </menu>
61
+
62
+ <style>
63
+ .theme_button {
64
+ flex: 1;
65
+ border-radius: 0;
66
+ }
67
+ li:first-child .theme_button {
68
+ border-top-left-radius: var(--border_radius_sm);
69
+ border-top-right-radius: var(--border_radius_sm);
70
+ }
71
+ li:last-child .theme_button {
72
+ border-bottom-left-radius: var(--border_radius_sm);
73
+ border-bottom-right-radius: var(--border_radius_sm);
74
+ }
75
+ </style>
@@ -0,0 +1,15 @@
1
+ import type { Theme } from '@fuzdev/fuz_css/theme.js';
2
+ type $$ComponentProps = {
3
+ selected_theme?: {
4
+ theme: Theme;
5
+ };
6
+ themes?: Array<Theme>;
7
+ enable_editing?: boolean;
8
+ select?: ((theme: Theme) => void | boolean) | null;
9
+ onselect?: (theme: Theme) => void;
10
+ onedit?: (theme: Theme) => void;
11
+ };
12
+ declare const ThemeInput: import("svelte").Component<$$ComponentProps, {}, "">;
13
+ type ThemeInput = ReturnType<typeof ThemeInput>;
14
+ export default ThemeInput;
15
+ //# sourceMappingURL=ThemeInput.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeInput.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/ThemeInput.svelte"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,0BAA0B,CAAC;AAKnD,KAAK,gBAAgB,GAAI;IACxB,cAAc,CAAC,EAAE;QAAC,KAAK,EAAE,KAAK,CAAA;KAAC,CAAC;IAChC,MAAM,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC;IACnD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAClC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAChC,CAAC;AA+CH,QAAA,MAAM,UAAU,sDAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
@@ -0,0 +1,101 @@
1
+ <script lang="ts" module>
2
+ let mounted = false;
3
+ </script>
4
+
5
+ <script lang="ts">
6
+ import {onMount, type Snippet} from 'svelte';
7
+ import {render_theme_style, type Theme} from '@fuzdev/fuz_css/theme.js';
8
+ import {DEFAULT_THEME} from '@fuzdev/fuz_css/themes.js';
9
+ import {DEV} from 'esm-env';
10
+
11
+ import {
12
+ load_color_scheme as default_load_color_scheme,
13
+ save_color_scheme as default_save_color_scheme,
14
+ sync_color_scheme as default_sync_color_scheme,
15
+ save_theme as default_save_theme,
16
+ load_theme as default_load_theme,
17
+ themer_context,
18
+ Themer,
19
+ } from './themer.svelte.js';
20
+ import {effect_with_count} from './rune_helpers.svelte.js';
21
+
22
+ const {
23
+ sync_color_scheme = default_sync_color_scheme,
24
+ load_color_scheme = default_load_color_scheme,
25
+ save_color_scheme = default_save_color_scheme,
26
+ load_theme = default_load_theme,
27
+ save_theme = default_save_theme,
28
+ theme_fallback,
29
+ themer = new Themer(load_theme(theme_fallback), load_color_scheme()),
30
+ children,
31
+ }: {
32
+ sync_color_scheme?: typeof default_sync_color_scheme;
33
+ load_color_scheme?: typeof default_load_color_scheme;
34
+ save_color_scheme?: typeof default_save_color_scheme;
35
+ load_theme?: typeof default_load_theme;
36
+ save_theme?: typeof default_save_theme;
37
+ theme_fallback?: Theme | undefined;
38
+ /**
39
+ * A reactive class containing the selected theme and color scheme.
40
+ * Defaults to the first default theme.
41
+ * The class reference is not reactive
42
+ * because it's set in context without a wrapper, use `{#key theme}` if it changes.
43
+ * @nonreactive
44
+ */
45
+ themer?: Themer;
46
+ children: Snippet<[themer: Themer, style: string | null, theme_style_html: string | null]>;
47
+ } = $props();
48
+
49
+ // In dev mode only, warn about misuse of the singleton `Themed`.
50
+ if (DEV) {
51
+ onMount(() => {
52
+ if (mounted) {
53
+ console.warn('more than one Themed was mounted'); // eslint-disable-line no-console
54
+ }
55
+ mounted = true;
56
+ return () => {
57
+ mounted = false;
58
+ };
59
+ });
60
+ }
61
+
62
+ /**
63
+ * `Themed` adds global color scheme and theme support to the page.
64
+ * It also sets in the Svelte context a reactive `themer` containing the theme and color scheme.
65
+ */
66
+
67
+ themer_context.set(themer);
68
+
69
+ const selected_theme_name = $derived(themer.theme.name);
70
+ const style = $derived(
71
+ selected_theme_name === DEFAULT_THEME.name // TODO @many proper equality check, won't work when we allow editing, need an id or unique names and a deep equality check
72
+ ? null
73
+ : render_theme_style(themer.theme),
74
+ );
75
+ const theme_style_html = $derived(style ? `<style>${style}</style>` : null);
76
+
77
+ effect_with_count((count) => {
78
+ const v = themer.color_scheme;
79
+ if (count === 1) return;
80
+ sync_color_scheme(v);
81
+ });
82
+ effect_with_count((count) => {
83
+ const v = themer.color_scheme;
84
+ if (count === 1) return;
85
+ save_color_scheme(v); // helper may change, so is separate from `sync_color_scheme`
86
+ });
87
+ effect_with_count((count) => {
88
+ const v = themer.theme;
89
+ if (count === 1) return;
90
+ save_theme(v);
91
+ });
92
+
93
+ // TODO @many @html making me nervous
94
+ </script>
95
+
96
+ <!-- eslint-disable svelte/no-at-html-tags -->
97
+ <svelte:head>
98
+ {#if theme_style_html}{@html theme_style_html}{/if}
99
+ </svelte:head>
100
+
101
+ {@render children(themer, style, theme_style_html)}
@@ -0,0 +1,24 @@
1
+ import { type Snippet } from 'svelte';
2
+ import { type Theme } from '@fuzdev/fuz_css/theme.js';
3
+ import { load_color_scheme as default_load_color_scheme, save_color_scheme as default_save_color_scheme, sync_color_scheme as default_sync_color_scheme, save_theme as default_save_theme, load_theme as default_load_theme, Themer } from './themer.svelte.js';
4
+ type $$ComponentProps = {
5
+ sync_color_scheme?: typeof default_sync_color_scheme;
6
+ load_color_scheme?: typeof default_load_color_scheme;
7
+ save_color_scheme?: typeof default_save_color_scheme;
8
+ load_theme?: typeof default_load_theme;
9
+ save_theme?: typeof default_save_theme;
10
+ theme_fallback?: Theme | undefined;
11
+ /**
12
+ * A reactive class containing the selected theme and color scheme.
13
+ * Defaults to the first default theme.
14
+ * The class reference is not reactive
15
+ * because it's set in context without a wrapper, use `{#key theme}` if it changes.
16
+ * @nonreactive
17
+ */
18
+ themer?: Themer;
19
+ children: Snippet<[themer: Themer, style: string | null, theme_style_html: string | null]>;
20
+ };
21
+ declare const Themed: import("svelte").Component<$$ComponentProps, {}, "">;
22
+ type Themed = ReturnType<typeof Themed>;
23
+ export default Themed;
24
+ //# sourceMappingURL=Themed.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Themed.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/Themed.svelte"],"names":[],"mappings":"AAMA,OAAO,EAAU,KAAK,OAAO,EAAC,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAqB,KAAK,KAAK,EAAC,MAAM,0BAA0B,CAAC;AAIxE,OAAO,EACL,iBAAiB,IAAI,yBAAyB,EAC9C,iBAAiB,IAAI,yBAAyB,EAC9C,iBAAiB,IAAI,yBAAyB,EAC9C,UAAU,IAAI,kBAAkB,EAChC,UAAU,IAAI,kBAAkB,EAEhC,MAAM,EACN,MAAM,oBAAoB,CAAC;AAG5B,KAAK,gBAAgB,GAAI;IACxB,iBAAiB,CAAC,EAAE,OAAO,yBAAyB,CAAC;IACrD,iBAAiB,CAAC,EAAE,OAAO,yBAAyB,CAAC;IACrD,iBAAiB,CAAC,EAAE,OAAO,yBAAyB,CAAC;IACrD,UAAU,CAAC,EAAE,OAAO,kBAAkB,CAAC;IACvC,UAAU,CAAC,EAAE,OAAO,kBAAkB,CAAC;IACvC,cAAc,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IACnC;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;CAC3F,CAAC;AA+EH,QAAA,MAAM,MAAM,sDAAwC,CAAC;AACrD,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;AACxC,eAAe,MAAM,CAAC"}
@@ -0,0 +1,67 @@
1
+ <script lang="ts">
2
+ import type {Snippet} from 'svelte';
3
+ import {page} from '$app/state';
4
+ import {resolve} from '$app/paths';
5
+
6
+ import TomeHeader from './TomeHeader.svelte';
7
+ import {tome_context, type Tome} from './tome.js';
8
+ import {DOCS_PATH_DEFAULT, docs_links_context, docs_slugify} from './docs_helpers.svelte.js';
9
+ import {intersect} from './intersect.svelte.js';
10
+
11
+ const {
12
+ tome,
13
+ docs_path = DOCS_PATH_DEFAULT,
14
+ header,
15
+ children,
16
+ }: {
17
+ tome: Tome;
18
+ docs_path?: string;
19
+ header?: Snippet;
20
+ children: Snippet;
21
+ } = $props();
22
+
23
+ const docs_links = docs_links_context.get();
24
+
25
+ tome_context.set(tome); // TODO make reactive?
26
+
27
+ const fragment = docs_slugify(tome.name);
28
+
29
+ const at_root = $derived(page.url.pathname === resolve(docs_path as any));
30
+ </script>
31
+
32
+ <section
33
+ class="tome_content width_upto_md mb_xl9"
34
+ {@attach intersect(() =>
35
+ at_root
36
+ ? ({intersecting}) => {
37
+ if (intersecting) {
38
+ docs_links.fragments_onscreen.add(fragment);
39
+ } else {
40
+ docs_links.fragments_onscreen.delete(fragment);
41
+ }
42
+ }
43
+ : null,
44
+ )}
45
+ >
46
+ <header
47
+ class="mb_xl3 position_sticky top_0"
48
+ {@attach intersect(() =>
49
+ at_root
50
+ ? null
51
+ : ({intersecting}) => {
52
+ if (intersecting) {
53
+ docs_links.fragments_onscreen.add(fragment);
54
+ } else {
55
+ docs_links.fragments_onscreen.delete(fragment);
56
+ }
57
+ },
58
+ )}
59
+ >
60
+ {#if header}
61
+ {@render header()}
62
+ {:else}
63
+ <TomeHeader />
64
+ {/if}
65
+ </header>
66
+ {@render children()}
67
+ </section>
@@ -0,0 +1,12 @@
1
+ import type { Snippet } from 'svelte';
2
+ import { type Tome } from './tome.js';
3
+ type $$ComponentProps = {
4
+ tome: Tome;
5
+ docs_path?: string;
6
+ header?: Snippet;
7
+ children: Snippet;
8
+ };
9
+ declare const TomeContent: import("svelte").Component<$$ComponentProps, {}, "">;
10
+ type TomeContent = ReturnType<typeof TomeContent>;
11
+ export default TomeContent;
12
+ //# sourceMappingURL=TomeContent.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TomeContent.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/TomeContent.svelte"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,QAAQ,CAAC;AAKpC,OAAO,EAAe,KAAK,IAAI,EAAC,MAAM,WAAW,CAAC;AAIjD,KAAK,gBAAgB,GAAI;IACxB,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CAClB,CAAC;AA4DH,QAAA,MAAM,WAAW,sDAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
@@ -0,0 +1,56 @@
1
+ <script lang="ts">
2
+ import {page} from '$app/state';
3
+ import {onDestroy} from 'svelte';
4
+ import {DEV} from 'esm-env';
5
+ import type {SvelteHTMLElements} from 'svelte/elements';
6
+
7
+ import {tome_context} from './tome.js';
8
+ import Hashlink from './Hashlink.svelte';
9
+ import {docs_links_context, docs_slugify, to_docs_path_info} from './docs_helpers.svelte.js';
10
+
11
+ // eslint-disable-next-line @typescript-eslint/no-duplicate-type-constituents
12
+ const props: SvelteHTMLElements['h1'] | SvelteHTMLElements['h2'] = $props();
13
+
14
+ const tome = tome_context.get(); // TODO make reactive?
15
+ if (DEV && !tome) throw Error('TomeHeader expects a tome in context'); // eslint-disable-line @typescript-eslint/no-unnecessary-condition
16
+
17
+ const docs_links = docs_links_context.get();
18
+
19
+ const fragment = docs_slugify(tome.name);
20
+ const path_slug = docs_slugify(tome.name);
21
+ const id = docs_links.add(fragment, tome.name, page.url.pathname);
22
+
23
+ onDestroy(() => {
24
+ docs_links.remove(id);
25
+ });
26
+
27
+ const {path, path_is_selected} = $derived(to_docs_path_info(path_slug, page.url.pathname));
28
+ </script>
29
+
30
+ <svelte:element this={path_is_selected ? 'h1' : 'h2'} {...props} class="tome_header">
31
+ {#if path_is_selected}
32
+ {@render content(tome.name)}
33
+ {:else}
34
+ <!-- eslint-disable-next-line svelte/no-navigation-without-resolve -->
35
+ <a href={path}>{@render content(tome.name)}</a>
36
+ {/if}
37
+ <Hashlink {fragment} />
38
+ </svelte:element>
39
+
40
+ {#snippet content(name: string)}
41
+ {name}
42
+ {/snippet}
43
+
44
+ <style>
45
+ .tome_header {
46
+ position: relative;
47
+ display: flex;
48
+ align-items: center;
49
+ justify-content: space-between;
50
+ margin-top: var(--space_xl4);
51
+ }
52
+ /* TODO @many how can this be done composably? currently using `:global` at usage site - ideally we'd continue to use :hover instead of JS */
53
+ .tome_header:hover :global(.hashlink) {
54
+ opacity: 1;
55
+ }
56
+ </style>
@@ -0,0 +1,4 @@
1
+ declare const TomeHeader: import("svelte").Component<import("svelte/elements").HTMLAttributes<HTMLHeadingElement>, {}, "">;
2
+ type TomeHeader = ReturnType<typeof TomeHeader>;
3
+ export default TomeHeader;
4
+ //# sourceMappingURL=TomeHeader.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TomeHeader.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/TomeHeader.svelte"],"names":[],"mappings":"AA4DA,QAAA,MAAM,UAAU,kGAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
@@ -0,0 +1,29 @@
1
+ <script lang="ts">
2
+ import {DEV} from 'esm-env';
3
+ import type {SvelteHTMLElements} from 'svelte/elements';
4
+
5
+ import {get_tome_by_name, to_tome_pathname} from './tome.js';
6
+ import {DOCS_PATH_DEFAULT} from './docs_helpers.svelte.js';
7
+
8
+ const {
9
+ name,
10
+ docs_path = DOCS_PATH_DEFAULT,
11
+ hash,
12
+ children,
13
+ class: class_prop = 'chip',
14
+ ...rest
15
+ }: SvelteHTMLElements['a'] & {
16
+ name: string; // TODO type, generate from `tomes`?
17
+ docs_path?: string;
18
+ hash?: string;
19
+ } = $props();
20
+
21
+ if (DEV) get_tome_by_name(name); // throws if not found
22
+
23
+ // TODO add contextmenu behavior
24
+ </script>
25
+
26
+ <!-- eslint-disable-next-line svelte/no-navigation-without-resolve -->
27
+ <a {...rest} class="tome_link {class_prop}" href={to_tome_pathname(name, docs_path, hash)}
28
+ >{#if children}{@render children()}{:else}{name}{/if}</a
29
+ >
@@ -0,0 +1,10 @@
1
+ import type { SvelteHTMLElements } from 'svelte/elements';
2
+ type $$ComponentProps = SvelteHTMLElements['a'] & {
3
+ name: string;
4
+ docs_path?: string;
5
+ hash?: string;
6
+ };
7
+ declare const TomeLink: import("svelte").Component<$$ComponentProps, {}, "">;
8
+ type TomeLink = ReturnType<typeof TomeLink>;
9
+ export default TomeLink;
10
+ //# sourceMappingURL=TomeLink.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TomeLink.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/TomeLink.svelte"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AAKvD,KAAK,gBAAgB,GAAI,kBAAkB,CAAC,GAAG,CAAC,GAAG;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AA2BH,QAAA,MAAM,QAAQ,sDAAwC,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,CAAC"}