@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,9 @@
1
+ import { Tome } from './tome.js';
2
+ type $$ComponentProps = {
3
+ tomes: Array<Tome>;
4
+ sidebar?: boolean;
5
+ };
6
+ declare const DocsSecondaryNav: import("svelte").Component<$$ComponentProps, {}, "">;
7
+ type DocsSecondaryNav = ReturnType<typeof DocsSecondaryNav>;
8
+ export default DocsSecondaryNav;
9
+ //# sourceMappingURL=DocsSecondaryNav.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocsSecondaryNav.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/DocsSecondaryNav.svelte"],"names":[],"mappings":"AAIA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAC;AAE9B,KAAK,gBAAgB,GAAI;IACxB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAuBH,QAAA,MAAM,gBAAgB,sDAAwC,CAAC;AAC/D,KAAK,gBAAgB,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC5D,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,118 @@
1
+ <script lang="ts">
2
+ import {page} from '$app/state';
3
+
4
+ import DocsModulesList from './DocsModulesList.svelte';
5
+ import DocsPageLinks from './DocsPageLinks.svelte';
6
+ import {to_tome_pathname, Tome} from './tome.js';
7
+ import {docs_links_context, DOCS_API_PATH} from './docs_helpers.svelte.js';
8
+ import {library_context} from './library.svelte.js';
9
+ import TomeLink from './TomeLink.svelte';
10
+ import ModuleLink from './ModuleLink.svelte';
11
+ import DeclarationLink from './DeclarationLink.svelte';
12
+
13
+ const {
14
+ tomes,
15
+ tomes_by_name,
16
+ sidebar = true,
17
+ }: {
18
+ tomes: Array<Tome>;
19
+ tomes_by_name: Map<string, Tome>;
20
+ sidebar?: boolean; // TODO @many dialog navs (this shouldn't exist)
21
+ } = $props();
22
+
23
+ const selected_tome = $derived(tomes.find((t) => to_tome_pathname(t) === page.url.pathname));
24
+
25
+ const tomes_related_to_selected = $derived(
26
+ selected_tome?.related_tomes
27
+ .map((name) => tomes_by_name.get(name))
28
+ .filter((t) => t !== undefined) ?? [],
29
+ );
30
+
31
+ const library = library_context.get();
32
+
33
+ const modules_related_to_selected = $derived(
34
+ selected_tome?.related_modules
35
+ .map((path) => library.lookup_module(path))
36
+ .filter((m) => m !== undefined) ?? [],
37
+ );
38
+
39
+ const declarations_related_to_selected = $derived(
40
+ selected_tome?.related_declarations
41
+ .map((name) => library.lookup_declaration(name))
42
+ .filter((d) => d !== undefined) ?? [],
43
+ );
44
+
45
+ const docs_links = docs_links_context.get();
46
+
47
+ const should_show_page_links = $derived(docs_links.docs_links.length > 0);
48
+
49
+ const at_api_root = $derived(page.url.pathname === DOCS_API_PATH);
50
+ const at_module = $derived(page.url.pathname.startsWith(DOCS_API_PATH + '/'));
51
+ </script>
52
+
53
+ <!-- TODO probably add a `nav` wrapper? around which? -->
54
+ <aside class="docs_tertiary_nav unstyled">
55
+ {#if should_show_page_links}
56
+ <DocsPageLinks {sidebar} expand_width />
57
+ {/if}
58
+ {#if at_api_root || at_module}
59
+ <DocsModulesList expand_width />
60
+ {/if}
61
+ {#if tomes_related_to_selected.length}
62
+ <section class="related_section">
63
+ <h4 class="mb_sm">related tomes</h4>
64
+ <ul class="unstyled">
65
+ {#each tomes_related_to_selected as tome (tome.name)}
66
+ <li><TomeLink name={tome.name} class="menu_item" /></li>
67
+ {/each}
68
+ </ul>
69
+ </section>
70
+ {/if}
71
+ {#if modules_related_to_selected.length}
72
+ <section class="related_section">
73
+ <h4 class="mb_sm">related modules</h4>
74
+ <ul class="unstyled">
75
+ {#each modules_related_to_selected as module (module.path)}
76
+ <li><ModuleLink module_path={module.path} class="menu_item" /></li>
77
+ {/each}
78
+ </ul>
79
+ </section>
80
+ {/if}
81
+ {#if declarations_related_to_selected.length}
82
+ <section class="related_section">
83
+ <h4 class="mb_sm">related declarations</h4>
84
+ <ul class="unstyled">
85
+ {#each declarations_related_to_selected as declaration (declaration.name)}
86
+ <li><DeclarationLink name={declaration.name} class="menu_item" /></li>
87
+ {/each}
88
+ </ul>
89
+ </section>
90
+ {/if}
91
+ </aside>
92
+
93
+ <style>
94
+ .docs_tertiary_nav {
95
+ /* TODO @many lots of duplicate code between `DocsSecondaryNav` and `DocsTertiaryNav` */
96
+ position: fixed;
97
+ right: 0;
98
+ top: var(--docs_primary_nav_height);
99
+ z-index: 1;
100
+ width: var(--docs_sidebar_width);
101
+ height: calc(100% - var(--docs_primary_nav_height));
102
+ padding: var(
103
+ --docs_secondary_nav_padding
104
+ ); /* needed with `overflow: auto` to avoid cutting off outline */
105
+ overflow: auto;
106
+ scrollbar-width: thin;
107
+ background-color: var(--fg_1);
108
+ }
109
+
110
+ /* sync this breakpoint with `/docs/+layout` */
111
+ @media (max-width: 1000px) {
112
+ .docs_tertiary_nav {
113
+ position: static;
114
+ background-color: initial;
115
+ overflow: initial;
116
+ }
117
+ }
118
+ </style>
@@ -0,0 +1,10 @@
1
+ import { Tome } from './tome.js';
2
+ type $$ComponentProps = {
3
+ tomes: Array<Tome>;
4
+ tomes_by_name: Map<string, Tome>;
5
+ sidebar?: boolean;
6
+ };
7
+ declare const DocsTertiaryNav: import("svelte").Component<$$ComponentProps, {}, "">;
8
+ type DocsTertiaryNav = ReturnType<typeof DocsTertiaryNav>;
9
+ export default DocsTertiaryNav;
10
+ //# sourceMappingURL=DocsTertiaryNav.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocsTertiaryNav.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/DocsTertiaryNav.svelte"],"names":[],"mappings":"AAOA,OAAO,EAAmB,IAAI,EAAC,MAAM,WAAW,CAAC;AAOhD,KAAK,gBAAgB,GAAI;IACxB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACnB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AA6FH,QAAA,MAAM,eAAe,sDAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
@@ -0,0 +1,53 @@
1
+ <script lang="ts">
2
+ const {
3
+ selected,
4
+ }: {
5
+ selected?: 'webdevladder.net' | 'ryanatkn.com'; // 'spiderspace.org' |
6
+ } = $props();
7
+ </script>
8
+
9
+ <ul>
10
+ <li>
11
+ <a rel="me" href="https://www.ryanatkn.com/" class:selected={selected === 'ryanatkn.com'}
12
+ >ryanatkn.com</a
13
+ >
14
+ - my homepage{#if selected === 'ryanatkn.com'}, you are here{/if}
15
+ </li>
16
+ <!-- <li>
17
+ <a rel="me" href="https://www.spiderspace.org/" class:selected={selected === 'spiderspace.org'}
18
+ >spiderspace.org</a
19
+ >
20
+ - nontechnical design videos where we'll make a social website together with
21
+ <a href="https://www.zzz.software/">Zzz</a> when it's ready, YouTube channel
22
+ <a rel="me" href="https://youtube.com/@spiderspace_8000">@spiderspace_8000</a
23
+ >{#if selected === 'spiderspace.org'}, you are here{/if}
24
+ </li> -->
25
+ <li>
26
+ GitHub as <a rel="me" href="https://github.com/ryanatkn">@ryanatkn</a> and Bluesky as
27
+ <a href="https://bsky.app/profile/ryanatkn.com">@ryanatkn.com</a>
28
+ </li>
29
+ <li>
30
+ Mastodon as
31
+ <a rel="me" href="https://fosstodon.org/@ryanatkn">@ryanatkn@fosstodon.org</a> and
32
+ <a rel="me" href="https://fosstodon.org/@webdevladder">@webdevladder@fosstodon.org</a>
33
+ </li>
34
+ <li>
35
+ <a
36
+ rel="me"
37
+ href="https://www.webdevladder.net/"
38
+ class:selected={selected === 'webdevladder.net'}>webdevladder.net</a
39
+ >
40
+ - realworld webdev with TypeScript and Svelte,
41
+ <a href="https://www.webdevladder.net/blog">blog</a>
42
+ and YouTube channels
43
+ <a rel="me" href="https://youtube.com/@webdevladder">@webdevladder</a>
44
+ and
45
+ <a rel="me" href="https://youtube.com/@webdevladder_vods">@webdevladder_vods</a>, also
46
+ @webdevladder on <a rel="me" href="https://www.reddit.com/user/webdevladder/">Reddit</a> and
47
+ <a href="https://news.ycombinator.com/user?id=webdevladder">Hacker News</a
48
+ >{#if selected === 'webdevladder.net'}, you are here{/if}
49
+ </li>
50
+ <!-- <li>
51
+ support me at <a href="https://www.ryanatkn.com/funding">ryanatkn.com/funding</a>
52
+ </li> -->
53
+ </ul>
@@ -0,0 +1,7 @@
1
+ type $$ComponentProps = {
2
+ selected?: 'webdevladder.net' | 'ryanatkn.com';
3
+ };
4
+ declare const EcosystemLinks: import("svelte").Component<$$ComponentProps, {}, "">;
5
+ type EcosystemLinks = ReturnType<typeof EcosystemLinks>;
6
+ export default EcosystemLinks;
7
+ //# sourceMappingURL=EcosystemLinks.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EcosystemLinks.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/EcosystemLinks.svelte"],"names":[],"mappings":"AAGC,KAAK,gBAAgB,GAAI;IACxB,QAAQ,CAAC,EAAE,kBAAkB,GAAG,cAAc,CAAC;CAC/C,CAAC;AAsCH,QAAA,MAAM,cAAc,sDAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
@@ -0,0 +1,22 @@
1
+ <script lang="ts">
2
+ import type {Snippet} from 'svelte';
3
+
4
+ import EcosystemLinks from './EcosystemLinks.svelte';
5
+ import ProjectLinks from './ProjectLinks.svelte';
6
+
7
+ const {
8
+ children,
9
+ }: {
10
+ children?: Snippet;
11
+ } = $props();
12
+ </script>
13
+
14
+ <section class="panel p_lg">
15
+ {#if children}
16
+ {@render children()}
17
+ {:else}
18
+ <h2 class="mt_0 mb_lg">Links</h2>
19
+ {/if}
20
+ <EcosystemLinks />
21
+ <div class="box row"><ProjectLinks /></div>
22
+ </section>
@@ -0,0 +1,8 @@
1
+ import type { Snippet } from 'svelte';
2
+ type $$ComponentProps = {
3
+ children?: Snippet;
4
+ };
5
+ declare const EcosystemLinksPanel: import("svelte").Component<$$ComponentProps, {}, "">;
6
+ type EcosystemLinksPanel = ReturnType<typeof EcosystemLinksPanel>;
7
+ export default EcosystemLinksPanel;
8
+ //# sourceMappingURL=EcosystemLinksPanel.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EcosystemLinksPanel.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/EcosystemLinksPanel.svelte"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,QAAQ,CAAC;AAKnC,KAAK,gBAAgB,GAAI;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAwBH,QAAA,MAAM,mBAAmB,sDAAwC,CAAC;AAClE,KAAK,mBAAmB,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAClE,eAAe,mBAAmB,CAAC"}
@@ -0,0 +1,75 @@
1
+ <script lang="ts">
2
+ import {strip_start} from '@fuzdev/fuz_util/string.js';
3
+ import type {SvelteHTMLElements} from 'svelte/elements';
4
+ import {DEV} from 'esm-env';
5
+
6
+ import Svg from './Svg.svelte';
7
+ import {github_logo} from './logos.js';
8
+
9
+ const {
10
+ path,
11
+ href: href_prop,
12
+ children,
13
+ class: class_prop,
14
+ ...rest
15
+ }: SvelteHTMLElements['a'] & {
16
+ /**
17
+ * GitHub path - can be a full URL or a relative path like `owner/repo` or `owner/repo/blob/main/file.ts`
18
+ * @example ryanatkn/fuz
19
+ * @example ryanatkn/fuz/blob/main/src/lib/Card.svelte
20
+ * @example https://github.com/ryanatkn/fuz/issues/123
21
+ */
22
+ path?: string;
23
+ } = $props();
24
+
25
+ if (DEV && !path && !href_prop) {
26
+ throw new Error('GithubLink requires either `path` or `href` prop');
27
+ }
28
+
29
+ const href = $derived(
30
+ href_prop ??
31
+ (path
32
+ ? path.startsWith('https://')
33
+ ? path
34
+ : `https://github.com/${strip_start(path, '/')}`
35
+ : ''),
36
+ );
37
+
38
+ // extract meaningful display text from the path
39
+ const final_children = $derived(
40
+ children ??
41
+ (() => {
42
+ if (!path) return href || '';
43
+ const path_part = strip_start(path.replace('https://github.com/', ''), '/');
44
+
45
+ // for file/tree paths like "owner/repo/blob/main/src/file.ts" -> "src/file.ts"
46
+ const blob_regex = /^[^/]+\/[^/]+\/(?:blob|tree)\/[^/]+\/(.+)$/;
47
+ const blob_match = blob_regex.exec(path_part);
48
+ if (blob_match) return blob_match[1]!;
49
+
50
+ // for issue/PR like "owner/repo/issues/123" -> "owner/repo#123"
51
+ const issue_regex = /^([^/]+\/[^/]+)\/(issues|pull)\/(\d+)/;
52
+ const issue_match = issue_regex.exec(path_part);
53
+ if (issue_match) return `${issue_match[1]}#${issue_match[3]}`;
54
+
55
+ // default to the full path (typically "owner/repo")
56
+ return path_part;
57
+ })(),
58
+ );
59
+ </script>
60
+
61
+ <!-- TODO -next-line doesnt work? -->
62
+ <!-- eslint-disable svelte/no-navigation-without-resolve -->
63
+ <a {...rest} {href} class="github_link chip white_space_nowrap {class_prop}" rel="noopener"
64
+ ><Svg
65
+ data={github_logo}
66
+ inline
67
+ size="var(--icon_size_xs)"
68
+ attrs={{class: 'mx_xs3 vertical_align_middle'}}
69
+ />
70
+ {#if typeof final_children === 'string'}
71
+ <span class="font_family_mono">{final_children}</span>
72
+ {:else if final_children}
73
+ {@render final_children()}
74
+ {/if}</a
75
+ >
@@ -0,0 +1,14 @@
1
+ import type { SvelteHTMLElements } from 'svelte/elements';
2
+ type $$ComponentProps = SvelteHTMLElements['a'] & {
3
+ /**
4
+ * GitHub path - can be a full URL or a relative path like `owner/repo` or `owner/repo/blob/main/file.ts`
5
+ * @example ryanatkn/fuz
6
+ * @example ryanatkn/fuz/blob/main/src/lib/Card.svelte
7
+ * @example https://github.com/ryanatkn/fuz/issues/123
8
+ */
9
+ path?: string;
10
+ };
11
+ declare const GithubLink: import("svelte").Component<$$ComponentProps, {}, "">;
12
+ type GithubLink = ReturnType<typeof GithubLink>;
13
+ export default GithubLink;
14
+ //# sourceMappingURL=GithubLink.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GithubLink.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/GithubLink.svelte"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AAMvD,KAAK,gBAAgB,GAAI,kBAAkB,CAAC,GAAG,CAAC,GAAG;IAClD;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAgEH,QAAA,MAAM,UAAU,sDAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
@@ -0,0 +1,28 @@
1
+ <script lang="ts">
2
+ import type {SvelteHTMLElements} from 'svelte/elements';
3
+
4
+ const {
5
+ glyph,
6
+ size,
7
+ class: class_prop,
8
+ ...rest
9
+ }: SvelteHTMLElements['span'] & {
10
+ glyph: string;
11
+ size?: string | undefined;
12
+ } = $props();
13
+
14
+ const DEFAULT_SIZE = 'var(--font_size, 1em)';
15
+ const DEFAULT_FONT_SIZE = 'var(--font_size, inherit)';
16
+
17
+ const final_size = $derived(size ?? DEFAULT_SIZE);
18
+ </script>
19
+
20
+ <span
21
+ {...rest}
22
+ class="glyph display_inline_block text_align_center line_height_1 white_space_nowrap font_weight_400 {class_prop}"
23
+ style:width={final_size}
24
+ style:height={final_size}
25
+ style:min-width={final_size}
26
+ style:min-height={final_size}
27
+ style:font-size={size ?? DEFAULT_FONT_SIZE}>{glyph}</span
28
+ >
@@ -0,0 +1,9 @@
1
+ import type { SvelteHTMLElements } from 'svelte/elements';
2
+ type $$ComponentProps = SvelteHTMLElements['span'] & {
3
+ glyph: string;
4
+ size?: string | undefined;
5
+ };
6
+ declare const Glyph: import("svelte").Component<$$ComponentProps, {}, "">;
7
+ type Glyph = ReturnType<typeof Glyph>;
8
+ export default Glyph;
9
+ //# sourceMappingURL=Glyph.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Glyph.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/Glyph.svelte"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AAEvD,KAAK,gBAAgB,GAAI,kBAAkB,CAAC,MAAM,CAAC,GAAG;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B,CAAC;AAqBH,QAAA,MAAM,KAAK,sDAAwC,CAAC;AACpD,KAAK,KAAK,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;AACtC,eAAe,KAAK,CAAC"}
@@ -0,0 +1,41 @@
1
+ <script lang="ts">
2
+ import type {SvelteHTMLElements} from 'svelte/elements';
3
+
4
+ const {
5
+ fragment,
6
+ children,
7
+ class: class_prop,
8
+ ...rest
9
+ }: SvelteHTMLElements['a'] & {fragment: string} = $props();
10
+ </script>
11
+
12
+ <a {...rest} class="hashlink {class_prop}" href="#{fragment}" aria-label="hashlink"
13
+ >{#if children}{@render children()}{:else}#{/if}</a
14
+ >
15
+ <span class="hashlink_scroll_target" id={fragment} aria-hidden="true"></span>
16
+
17
+ <style>
18
+ /* TODO @many how can this be done generically so it's composable? currently using `:global` at usage site - ideally we'd continue to use :hover instead of JS */
19
+ /* .some_parent:hover :global(.hashlink) { opacity: 1; } .some_parent { position: relative; } */
20
+
21
+ .hashlink {
22
+ font-size: var(--font_size_lg);
23
+ padding: 0 var(--space_sm);
24
+ margin-left: var(--space_sm);
25
+ opacity: 0;
26
+ transition: opacity var(--duration_2);
27
+ }
28
+
29
+ .hashlink_scroll_target {
30
+ position: absolute;
31
+ top: calc(var(--font_size, var(--font_size_md)) * -4);
32
+ left: 0;
33
+ }
34
+
35
+ /* sync this breakpoint with `Docs` */
36
+ @media (max-width: 800px) {
37
+ .hashlink {
38
+ opacity: 1;
39
+ }
40
+ }
41
+ </style>
@@ -0,0 +1,8 @@
1
+ import type { SvelteHTMLElements } from 'svelte/elements';
2
+ type $$ComponentProps = SvelteHTMLElements['a'] & {
3
+ fragment: string;
4
+ };
5
+ declare const Hashlink: import("svelte").Component<$$ComponentProps, {}, "">;
6
+ type Hashlink = ReturnType<typeof Hashlink>;
7
+ export default Hashlink;
8
+ //# sourceMappingURL=Hashlink.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Hashlink.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/Hashlink.svelte"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AAEvD,KAAK,gBAAgB,GAAI,kBAAkB,CAAC,GAAG,CAAC,GAAG;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAC,CAAC;AAmBvE,QAAA,MAAM,QAAQ,sDAAwC,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,6 @@
1
+ <div hidden>
2
+ @ryanatkn@hci.social on <a rel="me" href="https://hci.social/@ryanatkn">Mastodon</a>
3
+ </div>
4
+ <div hidden>
5
+ @webdevladder@fosstodon.org on <a rel="me" href="https://fosstodon.org/@webdevladder">Mastodon</a>
6
+ </div>
@@ -0,0 +1,27 @@
1
+ export default HiddenPersonalLinks;
2
+ type HiddenPersonalLinks = SvelteComponent<{
3
+ [x: string]: never;
4
+ }, {
5
+ [evt: string]: CustomEvent<any>;
6
+ }, {}> & {
7
+ $$bindings?: string | undefined;
8
+ };
9
+ declare const HiddenPersonalLinks: $$__sveltets_2_IsomorphicComponent<{
10
+ [x: string]: never;
11
+ }, {
12
+ [evt: string]: CustomEvent<any>;
13
+ }, {}, {}, string>;
14
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
15
+ new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
16
+ $$bindings?: Bindings;
17
+ } & Exports;
18
+ (internal: unknown, props: {
19
+ $$events?: Events;
20
+ $$slots?: Slots;
21
+ }): Exports & {
22
+ $set?: any;
23
+ $on?: any;
24
+ };
25
+ z_$$bindings?: Bindings;
26
+ }
27
+ //# sourceMappingURL=HiddenPersonalLinks.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HiddenPersonalLinks.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/HiddenPersonalLinks.svelte"],"names":[],"mappings":";;;;;;;;AAoBA;;;;mBAA+H;6CATlF,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,OAAO,OAAO,QAAQ;IAC3L,cAAc,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,WAAW,OAAO,SAAS;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACtG,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,127 @@
1
+ <script lang="ts">
2
+ import type {Hue} from '@fuzdev/fuz_util/colors.js';
3
+ import type {Snippet} from 'svelte';
4
+
5
+ let {
6
+ value = $bindable(180),
7
+ oninput,
8
+ children,
9
+ }: {
10
+ value?: Hue;
11
+ oninput?: (hue: Hue) => void;
12
+ children?: Snippet;
13
+ } = $props();
14
+
15
+ // TODO probably upstream this to belt
16
+ const parse_hue = (v: any): Hue | null => {
17
+ const t = typeof v;
18
+ if (t === 'number') return v;
19
+ if (t !== 'string') return null;
20
+ const parsed = Number(v);
21
+ if (Number.isNaN(parsed)) return null;
22
+ return parsed;
23
+ };
24
+
25
+ const update_hue = (v: Hue) => {
26
+ value = v;
27
+ oninput?.(value);
28
+ };
29
+
30
+ const on_input_event = (e: Event & {currentTarget: EventTarget & HTMLInputElement}) => {
31
+ const parsed = parse_hue(e.currentTarget.value);
32
+ if (parsed === null) return;
33
+ update_hue(parsed);
34
+ };
35
+
36
+ let el: HTMLInputElement | undefined = $state();
37
+
38
+ const set_hue_from_minimap = (e: MouseEvent & {currentTarget: EventTarget & HTMLElement}) => {
39
+ const rect = e.currentTarget.getBoundingClientRect();
40
+ const pct = (e.clientX - rect.x) / rect.width;
41
+ update_hue(Math.floor(360 * pct));
42
+ el?.focus();
43
+ };
44
+ </script>
45
+
46
+ <!-- TODO consider making this a text input or otherwise editable directly -->
47
+ <div class="hue_input" style:--hue={value}>
48
+ <label>
49
+ {#if children}<div class="title">{@render children()}</div>{/if}
50
+ <div class="preview">
51
+ hue
52
+ <input type="number" step="0" class="hue" {value} oninput={on_input_event} />
53
+ </div>
54
+ </label>
55
+ <div class="minimap_wrapper">
56
+ <div class="minimap" onclick={set_hue_from_minimap} aria-hidden="true"></div>
57
+ </div>
58
+ <input
59
+ bind:this={el}
60
+ type="range"
61
+ aria-label="hue"
62
+ {value}
63
+ oninput={on_input_event}
64
+ min="0"
65
+ max="359"
66
+ />
67
+ </div>
68
+
69
+ <style>
70
+ .hue_input {
71
+ --outline_color: hsl(var(--hue) 50% 60%);
72
+ /* TODO @many figure these variables out so they're easily customized (similar pattern in a lot of places) */
73
+ /* --thumb_background_color: hsl(var(--hue) 50% 50%); */
74
+ }
75
+ .preview {
76
+ background-color: hsl(var(--hue) 50% 50%);
77
+ height: var(--space_xl5);
78
+ margin: 0;
79
+ display: flex;
80
+ flex-direction: row;
81
+ align-items: center;
82
+ font-weight: 700;
83
+ color: var(--bg);
84
+ padding-left: var(--space_xl);
85
+ border-top-left-radius: var(--border_radius, var(--border_radius_md));
86
+ border-top-right-radius: var(--border_radius, var(--border_radius_md));
87
+ }
88
+ .minimap_wrapper {
89
+ padding: 0 var(--input_padding_x);
90
+ background: hsl(0 50% 50%) 0%;
91
+ }
92
+ .minimap {
93
+ background: linear-gradient(
94
+ 90deg,
95
+ hsl(0 50% 50%) 0%,
96
+ hsl(36 50% 50%) 10%,
97
+ hsl(72 50% 50%) 20%,
98
+ hsl(108 50% 50%) 30%,
99
+ hsl(144 50% 50%) 40%,
100
+ hsl(180 50% 50%) 50%,
101
+ hsl(216 50% 50%) 60%,
102
+ hsl(252 50% 50%) 70%,
103
+ hsl(288 50% 50%) 80%,
104
+ hsl(324 50% 50%) 90%,
105
+ hsl(360 50% 50%) 100%
106
+ );
107
+ height: var(--space_lg);
108
+ }
109
+ /* TODO generic way to make this seamless? */
110
+ input {
111
+ border-top-left-radius: 0;
112
+ border-top-right-radius: 0;
113
+ }
114
+ .hue {
115
+ width: 10rem;
116
+ min-width: 10rem;
117
+ margin-left: var(--space_lg);
118
+ font-size: var(--font_size_lg);
119
+ text-align: center;
120
+ background-color: transparent;
121
+ border: none;
122
+ border-radius: var(--border_radius, var(--border_radius_md));
123
+ /* TODO why is this necessary? */
124
+ height: var(--input_height);
125
+ color: var(--bg);
126
+ }
127
+ </style>
@@ -0,0 +1,11 @@
1
+ import type { Hue } from '@fuzdev/fuz_util/colors.js';
2
+ import type { Snippet } from 'svelte';
3
+ type $$ComponentProps = {
4
+ value?: Hue;
5
+ oninput?: (hue: Hue) => void;
6
+ children?: Snippet;
7
+ };
8
+ declare const HueInput: import("svelte").Component<$$ComponentProps, {}, "value">;
9
+ type HueInput = ReturnType<typeof HueInput>;
10
+ export default HueInput;
11
+ //# sourceMappingURL=HueInput.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HueInput.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/HueInput.svelte"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,4BAA4B,CAAC;AACpD,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,QAAQ,CAAC;AAEnC,KAAK,gBAAgB,GAAI;IACxB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AA6DH,QAAA,MAAM,QAAQ,2DAAwC,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,CAAC"}