@thomasfosterau/components 0.0.0 → 0.2.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 (484) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +241 -56
  3. package/dist/canvas/VectorCanvas.svelte +320 -0
  4. package/dist/canvas/VectorCanvas.svelte.d.ts +105 -0
  5. package/dist/canvas/history.d.ts +105 -0
  6. package/dist/canvas/history.js +147 -0
  7. package/dist/canvas/index.d.ts +15 -0
  8. package/dist/canvas/index.js +14 -0
  9. package/dist/canvas/types.d.ts +91 -0
  10. package/dist/canvas/types.js +13 -0
  11. package/dist/canvas/utils.d.ts +66 -0
  12. package/dist/canvas/utils.js +114 -0
  13. package/dist/charts/Chart.svelte +300 -0
  14. package/dist/charts/Chart.svelte.d.ts +50 -0
  15. package/dist/charts/index.d.ts +11 -0
  16. package/dist/charts/index.js +10 -0
  17. package/dist/charts/types.d.ts +28 -0
  18. package/dist/charts/types.js +6 -0
  19. package/dist/citations/BookCitation.svelte +53 -0
  20. package/dist/citations/BookCitation.svelte.d.ts +41 -0
  21. package/dist/citations/ChapterCitation.svelte +38 -0
  22. package/dist/citations/ChapterCitation.svelte.d.ts +50 -0
  23. package/dist/citations/Citation.svelte +47 -0
  24. package/dist/citations/Citation.svelte.d.ts +24 -0
  25. package/dist/citations/CreditList.svelte +69 -0
  26. package/dist/citations/CreditList.svelte.d.ts +47 -0
  27. package/dist/citations/DOILink.svelte +28 -0
  28. package/dist/citations/DOILink.svelte.d.ts +19 -0
  29. package/dist/citations/Footnote.svelte +39 -0
  30. package/dist/citations/Footnote.svelte.d.ts +17 -0
  31. package/dist/citations/FootnoteList.svelte +36 -0
  32. package/dist/citations/FootnoteList.svelte.d.ts +21 -0
  33. package/dist/citations/ISBNLink.svelte +29 -0
  34. package/dist/citations/ISBNLink.svelte.d.ts +19 -0
  35. package/dist/citations/ISSNLink.svelte +29 -0
  36. package/dist/citations/ISSNLink.svelte.d.ts +19 -0
  37. package/dist/citations/Publisher.svelte +34 -0
  38. package/dist/citations/Publisher.svelte.d.ts +14 -0
  39. package/dist/citations/ReferenceList.svelte +53 -0
  40. package/dist/citations/ReferenceList.svelte.d.ts +21 -0
  41. package/dist/citations/ReportCitation.svelte +41 -0
  42. package/dist/citations/ReportCitation.svelte.d.ts +36 -0
  43. package/dist/citations/ScholarlyArticleCitation.svelte +64 -0
  44. package/dist/citations/ScholarlyArticleCitation.svelte.d.ts +41 -0
  45. package/dist/citations/ThesisCitation.svelte +35 -0
  46. package/dist/citations/ThesisCitation.svelte.d.ts +29 -0
  47. package/dist/citations/bibliography.svelte.d.ts +55 -0
  48. package/dist/citations/bibliography.svelte.js +78 -0
  49. package/dist/citations/citation.d.ts +71 -0
  50. package/dist/citations/citation.js +121 -0
  51. package/dist/citations/csl.d.ts +102 -0
  52. package/dist/citations/csl.js +20 -0
  53. package/dist/citations/index.d.ts +31 -0
  54. package/dist/citations/index.js +36 -0
  55. package/dist/citations/list-format.d.ts +34 -0
  56. package/dist/citations/list-format.js +40 -0
  57. package/dist/context.svelte.d.ts +46 -0
  58. package/dist/context.svelte.js +51 -0
  59. package/dist/data/ChatBubble.svelte +48 -0
  60. package/dist/data/ChatBubble.svelte.d.ts +33 -0
  61. package/dist/data/DataGrid.svelte +150 -0
  62. package/dist/data/DataGrid.svelte.d.ts +118 -0
  63. package/dist/data/DescriptionList.svelte +53 -0
  64. package/dist/data/DescriptionList.svelte.d.ts +26 -0
  65. package/dist/data/DescriptionRow.svelte +56 -0
  66. package/dist/data/DescriptionRow.svelte.d.ts +21 -0
  67. package/dist/data/DiffText.svelte +29 -0
  68. package/dist/data/DiffText.svelte.d.ts +19 -0
  69. package/dist/data/ItemList.svelte +80 -0
  70. package/dist/data/ItemList.svelte.d.ts +52 -0
  71. package/dist/data/LinkListItem.svelte +46 -0
  72. package/dist/data/LinkListItem.svelte.d.ts +21 -0
  73. package/dist/data/MessageThread.svelte +29 -0
  74. package/dist/data/MessageThread.svelte.d.ts +17 -0
  75. package/dist/data/Pagination.svelte +136 -0
  76. package/dist/data/Pagination.svelte.d.ts +79 -0
  77. package/dist/data/PaginationFooter.svelte +42 -0
  78. package/dist/data/PaginationFooter.svelte.d.ts +61 -0
  79. package/dist/data/ResultCount.svelte +27 -0
  80. package/dist/data/ResultCount.svelte.d.ts +18 -0
  81. package/dist/data/Table.svelte +151 -0
  82. package/dist/data/Table.svelte.d.ts +75 -0
  83. package/dist/data/TreeList.svelte +41 -0
  84. package/dist/data/TreeList.svelte.d.ts +17 -0
  85. package/dist/data/TreeListItem.svelte +29 -0
  86. package/dist/data/TreeListItem.svelte.d.ts +10 -0
  87. package/dist/data/description-context.d.ts +39 -0
  88. package/dist/data/description-context.js +36 -0
  89. package/dist/data/diff.d.ts +14 -0
  90. package/dist/data/diff.js +10 -0
  91. package/dist/data/index.d.ts +37 -0
  92. package/dist/data/index.js +37 -0
  93. package/dist/data/list-item.d.ts +30 -0
  94. package/dist/data/list-item.js +19 -0
  95. package/dist/data/pagination.d.ts +81 -0
  96. package/dist/data/pagination.js +79 -0
  97. package/dist/data/table-types.d.ts +71 -0
  98. package/dist/data/table-types.js +35 -0
  99. package/dist/feedback/ConfirmDialog.svelte +79 -0
  100. package/dist/feedback/ConfirmDialog.svelte.d.ts +82 -0
  101. package/dist/feedback/Dialog.svelte +47 -0
  102. package/dist/feedback/Dialog.svelte.d.ts +36 -0
  103. package/dist/feedback/DialogFrame.svelte +64 -0
  104. package/dist/feedback/DialogFrame.svelte.d.ts +23 -0
  105. package/dist/feedback/Drawer.svelte +43 -0
  106. package/dist/feedback/Drawer.svelte.d.ts +43 -0
  107. package/dist/feedback/LoadingBoundary.svelte +61 -0
  108. package/dist/feedback/LoadingBoundary.svelte.d.ts +34 -0
  109. package/dist/feedback/ProgressBar.svelte +46 -0
  110. package/dist/feedback/ProgressBar.svelte.d.ts +28 -0
  111. package/dist/feedback/SegmentBar.svelte +83 -0
  112. package/dist/feedback/SegmentBar.svelte.d.ts +37 -0
  113. package/dist/feedback/StatTile.svelte +77 -0
  114. package/dist/feedback/StatTile.svelte.d.ts +50 -0
  115. package/dist/feedback/Stats.svelte +18 -0
  116. package/dist/feedback/Stats.svelte.d.ts +16 -0
  117. package/dist/feedback/Steps.svelte +72 -0
  118. package/dist/feedback/Steps.svelte.d.ts +61 -0
  119. package/dist/feedback/Timeline.svelte +86 -0
  120. package/dist/feedback/Timeline.svelte.d.ts +55 -0
  121. package/dist/feedback/Toaster.svelte +78 -0
  122. package/dist/feedback/Toaster.svelte.d.ts +32 -0
  123. package/dist/feedback/index.d.ts +34 -0
  124. package/dist/feedback/index.js +29 -0
  125. package/dist/feedback/sizes.d.ts +41 -0
  126. package/dist/feedback/sizes.js +69 -0
  127. package/dist/feedback/toaster.d.ts +48 -0
  128. package/dist/feedback/toaster.js +29 -0
  129. package/dist/fields/Calendar.svelte +60 -0
  130. package/dist/fields/Calendar.svelte.d.ts +11 -0
  131. package/dist/fields/CalendarMonths.svelte +86 -0
  132. package/dist/fields/CalendarMonths.svelte.d.ts +30 -0
  133. package/dist/fields/Checkbox.svelte +33 -0
  134. package/dist/fields/Checkbox.svelte.d.ts +30 -0
  135. package/dist/fields/CheckboxGroup.svelte +41 -0
  136. package/dist/fields/CheckboxGroup.svelte.d.ts +40 -0
  137. package/dist/fields/Combobox.svelte +229 -0
  138. package/dist/fields/Combobox.svelte.d.ts +133 -0
  139. package/dist/fields/DateField.svelte +37 -0
  140. package/dist/fields/DateField.svelte.d.ts +20 -0
  141. package/dist/fields/DateInput.svelte +31 -0
  142. package/dist/fields/DateInput.svelte.d.ts +35 -0
  143. package/dist/fields/DatePicker.svelte +47 -0
  144. package/dist/fields/DatePicker.svelte.d.ts +25 -0
  145. package/dist/fields/DateRangePicker.svelte +70 -0
  146. package/dist/fields/DateRangePicker.svelte.d.ts +43 -0
  147. package/dist/fields/Dropzone.svelte +232 -0
  148. package/dist/fields/Dropzone.svelte.d.ts +103 -0
  149. package/dist/fields/FieldErrors.svelte +30 -0
  150. package/dist/fields/FieldErrors.svelte.d.ts +11 -0
  151. package/dist/fields/Fieldset.svelte +53 -0
  152. package/dist/fields/Fieldset.svelte.d.ts +27 -0
  153. package/dist/fields/FileInput.svelte +68 -0
  154. package/dist/fields/FileInput.svelte.d.ts +39 -0
  155. package/dist/fields/FormField.svelte +78 -0
  156. package/dist/fields/FormField.svelte.d.ts +29 -0
  157. package/dist/fields/ImageInput.svelte +87 -0
  158. package/dist/fields/ImageInput.svelte.d.ts +45 -0
  159. package/dist/fields/MultiSelect.svelte +112 -0
  160. package/dist/fields/MultiSelect.svelte.d.ts +75 -0
  161. package/dist/fields/NumberField.svelte +190 -0
  162. package/dist/fields/NumberField.svelte.d.ts +76 -0
  163. package/dist/fields/PasswordInput.svelte +95 -0
  164. package/dist/fields/PasswordInput.svelte.d.ts +58 -0
  165. package/dist/fields/PickerPopover.svelte +47 -0
  166. package/dist/fields/PickerPopover.svelte.d.ts +16 -0
  167. package/dist/fields/PinInput.svelte +83 -0
  168. package/dist/fields/PinInput.svelte.d.ts +66 -0
  169. package/dist/fields/PushToggle.svelte +93 -0
  170. package/dist/fields/PushToggle.svelte.d.ts +55 -0
  171. package/dist/fields/RadioGroup.svelte +88 -0
  172. package/dist/fields/RadioGroup.svelte.d.ts +41 -0
  173. package/dist/fields/RangeCalendar.svelte +51 -0
  174. package/dist/fields/RangeCalendar.svelte.d.ts +23 -0
  175. package/dist/fields/Rating.svelte +127 -0
  176. package/dist/fields/Rating.svelte.d.ts +86 -0
  177. package/dist/fields/SearchInput.svelte +58 -0
  178. package/dist/fields/SearchInput.svelte.d.ts +33 -0
  179. package/dist/fields/SegmentGroup.svelte +91 -0
  180. package/dist/fields/SegmentGroup.svelte.d.ts +20 -0
  181. package/dist/fields/Select.svelte +36 -0
  182. package/dist/fields/Select.svelte.d.ts +35 -0
  183. package/dist/fields/Slider.svelte +194 -0
  184. package/dist/fields/Slider.svelte.d.ts +100 -0
  185. package/dist/fields/TagsInput.svelte +256 -0
  186. package/dist/fields/TagsInput.svelte.d.ts +102 -0
  187. package/dist/fields/TextInput.svelte +26 -0
  188. package/dist/fields/TextInput.svelte.d.ts +36 -0
  189. package/dist/fields/Textarea.svelte +22 -0
  190. package/dist/fields/Textarea.svelte.d.ts +31 -0
  191. package/dist/fields/TimeField.svelte +30 -0
  192. package/dist/fields/TimeField.svelte.d.ts +19 -0
  193. package/dist/fields/Toggle.svelte +72 -0
  194. package/dist/fields/Toggle.svelte.d.ts +38 -0
  195. package/dist/fields/VideoInput.svelte +35 -0
  196. package/dist/fields/VideoInput.svelte.d.ts +46 -0
  197. package/dist/fields/calendar-props.d.ts +119 -0
  198. package/dist/fields/calendar-props.js +51 -0
  199. package/dist/fields/dates.d.ts +28 -0
  200. package/dist/fields/dates.js +26 -0
  201. package/dist/fields/field-types.d.ts +80 -0
  202. package/dist/fields/field-types.js +92 -0
  203. package/dist/fields/file-validation.d.ts +30 -0
  204. package/dist/fields/file-validation.js +51 -0
  205. package/dist/fields/index.d.ts +43 -0
  206. package/dist/fields/index.js +42 -0
  207. package/dist/fields/latest-search.svelte.d.ts +38 -0
  208. package/dist/fields/latest-search.svelte.js +85 -0
  209. package/dist/fields/number-format.d.ts +52 -0
  210. package/dist/fields/number-format.js +89 -0
  211. package/dist/fields/segmented-field.d.ts +128 -0
  212. package/dist/fields/segmented-field.js +52 -0
  213. package/dist/fields/slider-keys.d.ts +21 -0
  214. package/dist/fields/slider-keys.js +37 -0
  215. package/dist/formatting/Countdown.svelte +110 -0
  216. package/dist/formatting/Countdown.svelte.d.ts +35 -0
  217. package/dist/formatting/DateTime.svelte +35 -0
  218. package/dist/formatting/DateTime.svelte.d.ts +26 -0
  219. package/dist/formatting/Duration.svelte +18 -0
  220. package/dist/formatting/Duration.svelte.d.ts +20 -0
  221. package/dist/formatting/FormatList.svelte +31 -0
  222. package/dist/formatting/FormatList.svelte.d.ts +46 -0
  223. package/dist/formatting/Highlight.svelte +51 -0
  224. package/dist/formatting/Highlight.svelte.d.ts +19 -0
  225. package/dist/formatting/Number.svelte +35 -0
  226. package/dist/formatting/Number.svelte.d.ts +43 -0
  227. package/dist/formatting/RelativeTime.svelte +69 -0
  228. package/dist/formatting/RelativeTime.svelte.d.ts +26 -0
  229. package/dist/formatting/Year.svelte +39 -0
  230. package/dist/formatting/Year.svelte.d.ts +21 -0
  231. package/dist/formatting/duration.d.ts +44 -0
  232. package/dist/formatting/duration.js +125 -0
  233. package/dist/formatting/index.d.ts +15 -0
  234. package/dist/formatting/index.js +17 -0
  235. package/dist/forms/EntityForm.svelte +185 -0
  236. package/dist/forms/EntityForm.svelte.d.ts +66 -0
  237. package/dist/forms/FormActions.svelte +29 -0
  238. package/dist/forms/FormActions.svelte.d.ts +37 -0
  239. package/dist/forms/FormErrors.svelte +21 -0
  240. package/dist/forms/FormErrors.svelte.d.ts +16 -0
  241. package/dist/forms/HiddenField.svelte +22 -0
  242. package/dist/forms/HiddenField.svelte.d.ts +11 -0
  243. package/dist/forms/SearchForm.svelte +43 -0
  244. package/dist/forms/SearchForm.svelte.d.ts +36 -0
  245. package/dist/forms/entity-form.d.ts +12 -0
  246. package/dist/forms/entity-form.js +12 -0
  247. package/dist/forms/index.d.ts +14 -0
  248. package/dist/forms/index.js +14 -0
  249. package/dist/hotkeys/HotkeyBadge.svelte +39 -0
  250. package/dist/hotkeys/HotkeyBadge.svelte.d.ts +25 -0
  251. package/dist/hotkeys/HotkeyHelpDialog.svelte +68 -0
  252. package/dist/hotkeys/HotkeyHelpDialog.svelte.d.ts +35 -0
  253. package/dist/hotkeys/HotkeyProvider.svelte +92 -0
  254. package/dist/hotkeys/HotkeyProvider.svelte.d.ts +4 -0
  255. package/dist/hotkeys/context.svelte.d.ts +47 -0
  256. package/dist/hotkeys/context.svelte.js +72 -0
  257. package/dist/hotkeys/index.d.ts +28 -0
  258. package/dist/hotkeys/index.js +27 -0
  259. package/dist/hotkeys/match.d.ts +65 -0
  260. package/dist/hotkeys/match.js +135 -0
  261. package/dist/hotkeys/registry.svelte.d.ts +55 -0
  262. package/dist/hotkeys/registry.svelte.js +110 -0
  263. package/dist/hotkeys/types.d.ts +74 -0
  264. package/dist/hotkeys/types.js +18 -0
  265. package/dist/index.d.ts +37 -0
  266. package/dist/index.js +37 -0
  267. package/dist/infobox/Infobox.svelte +79 -0
  268. package/dist/infobox/Infobox.svelte.d.ts +33 -0
  269. package/dist/infobox/InfoboxHeader.svelte +35 -0
  270. package/dist/infobox/InfoboxHeader.svelte.d.ts +18 -0
  271. package/dist/infobox/InfoboxImage.svelte +38 -0
  272. package/dist/infobox/InfoboxImage.svelte.d.ts +21 -0
  273. package/dist/infobox/InfoboxRow.svelte +50 -0
  274. package/dist/infobox/InfoboxRow.svelte.d.ts +25 -0
  275. package/dist/infobox/InfoboxSection.svelte +24 -0
  276. package/dist/infobox/InfoboxSection.svelte.d.ts +12 -0
  277. package/dist/infobox/index.d.ts +21 -0
  278. package/dist/infobox/index.js +20 -0
  279. package/dist/infobox/types.d.ts +86 -0
  280. package/dist/infobox/types.js +27 -0
  281. package/dist/layout/AppShell.svelte +50 -0
  282. package/dist/layout/AppShell.svelte.d.ts +28 -0
  283. package/dist/layout/Breadcrumbs.svelte +52 -0
  284. package/dist/layout/Breadcrumbs.svelte.d.ts +18 -0
  285. package/dist/layout/Cluster.svelte +28 -0
  286. package/dist/layout/Cluster.svelte.d.ts +27 -0
  287. package/dist/layout/DetailLayout.svelte +50 -0
  288. package/dist/layout/DetailLayout.svelte.d.ts +19 -0
  289. package/dist/layout/FilterBar.svelte +40 -0
  290. package/dist/layout/FilterBar.svelte.d.ts +12 -0
  291. package/dist/layout/Fits.svelte +27 -0
  292. package/dist/layout/Fits.svelte.d.ts +13 -0
  293. package/dist/layout/Flow.svelte +46 -0
  294. package/dist/layout/Flow.svelte.d.ts +16 -0
  295. package/dist/layout/Footer.svelte +32 -0
  296. package/dist/layout/Footer.svelte.d.ts +12 -0
  297. package/dist/layout/Grid.svelte +23 -0
  298. package/dist/layout/Grid.svelte.d.ts +26 -0
  299. package/dist/layout/HStack.svelte +12 -0
  300. package/dist/layout/HStack.svelte.d.ts +34 -0
  301. package/dist/layout/Hero.svelte +76 -0
  302. package/dist/layout/Hero.svelte.d.ts +36 -0
  303. package/dist/layout/Main.svelte +30 -0
  304. package/dist/layout/Main.svelte.d.ts +15 -0
  305. package/dist/layout/Navbar.svelte +68 -0
  306. package/dist/layout/Navbar.svelte.d.ts +31 -0
  307. package/dist/layout/PageHeader.svelte +77 -0
  308. package/dist/layout/PageHeader.svelte.d.ts +33 -0
  309. package/dist/layout/Section.svelte +72 -0
  310. package/dist/layout/Section.svelte.d.ts +40 -0
  311. package/dist/layout/Sidebar.svelte +54 -0
  312. package/dist/layout/Sidebar.svelte.d.ts +27 -0
  313. package/dist/layout/Spacer.svelte +12 -0
  314. package/dist/layout/Spacer.svelte.d.ts +6 -0
  315. package/dist/layout/Tabs.svelte +85 -0
  316. package/dist/layout/Tabs.svelte.d.ts +42 -0
  317. package/dist/layout/VStack.svelte +12 -0
  318. package/dist/layout/VStack.svelte.d.ts +29 -0
  319. package/dist/layout/index.d.ts +38 -0
  320. package/dist/layout/index.js +38 -0
  321. package/dist/layout/space.d.ts +44 -0
  322. package/dist/layout/space.js +76 -0
  323. package/dist/layout/types.d.ts +52 -0
  324. package/dist/layout/types.js +27 -0
  325. package/dist/links/ContextLinks.svelte +28 -0
  326. package/dist/links/ContextLinks.svelte.d.ts +20 -0
  327. package/dist/links/EmailLink.svelte +26 -0
  328. package/dist/links/EmailLink.svelte.d.ts +20 -0
  329. package/dist/links/index.d.ts +7 -0
  330. package/dist/links/index.js +7 -0
  331. package/dist/media/Figure.svelte +26 -0
  332. package/dist/media/Figure.svelte.d.ts +12 -0
  333. package/dist/media/Image.svelte +76 -0
  334. package/dist/media/Image.svelte.d.ts +41 -0
  335. package/dist/media/Video.svelte +65 -0
  336. package/dist/media/Video.svelte.d.ts +29 -0
  337. package/dist/media/image-dimensions.d.ts +28 -0
  338. package/dist/media/image-dimensions.js +34 -0
  339. package/dist/media/index.d.ts +10 -0
  340. package/dist/media/index.js +10 -0
  341. package/dist/search/CommandPalette.svelte +257 -0
  342. package/dist/search/CommandPalette.svelte.d.ts +59 -0
  343. package/dist/search/index.d.ts +13 -0
  344. package/dist/search/index.js +13 -0
  345. package/dist/search/types.d.ts +40 -0
  346. package/dist/search/types.js +20 -0
  347. package/dist/seo/Head.svelte +190 -0
  348. package/dist/seo/Head.svelte.d.ts +86 -0
  349. package/dist/seo/JsonLd.svelte +30 -0
  350. package/dist/seo/JsonLd.svelte.d.ts +20 -0
  351. package/dist/seo/index.d.ts +18 -0
  352. package/dist/seo/index.js +17 -0
  353. package/dist/seo/json-ld.d.ts +33 -0
  354. package/dist/seo/json-ld.js +29 -0
  355. package/dist/seo/og-image.d.ts +72 -0
  356. package/dist/seo/og-image.js +82 -0
  357. package/dist/seo/types.d.ts +43 -0
  358. package/dist/seo/types.js +6 -0
  359. package/dist/theme.css +161 -0
  360. package/dist/tips/PopoverTip.svelte +80 -0
  361. package/dist/tips/PopoverTip.svelte.d.ts +33 -0
  362. package/dist/tips/Tip.svelte +91 -0
  363. package/dist/tips/Tip.svelte.d.ts +25 -0
  364. package/dist/tips/index.d.ts +15 -0
  365. package/dist/tips/index.js +14 -0
  366. package/dist/tips/tip-stack.d.ts +26 -0
  367. package/dist/tips/tip-stack.js +37 -0
  368. package/dist/tips/tip-store.svelte.d.ts +75 -0
  369. package/dist/tips/tip-store.svelte.js +158 -0
  370. package/dist/tips/types.d.ts +46 -0
  371. package/dist/tips/types.js +6 -0
  372. package/dist/ui/Accordion.svelte +75 -0
  373. package/dist/ui/Accordion.svelte.d.ts +50 -0
  374. package/dist/ui/AccordionItem.svelte +73 -0
  375. package/dist/ui/AccordionItem.svelte.d.ts +18 -0
  376. package/dist/ui/Alert.svelte +61 -0
  377. package/dist/ui/Alert.svelte.d.ts +37 -0
  378. package/dist/ui/Badge.svelte +39 -0
  379. package/dist/ui/Badge.svelte.d.ts +32 -0
  380. package/dist/ui/Button.svelte +44 -0
  381. package/dist/ui/Button.svelte.d.ts +29 -0
  382. package/dist/ui/ButtonGroup.svelte +24 -0
  383. package/dist/ui/ButtonGroup.svelte.d.ts +17 -0
  384. package/dist/ui/Card.svelte +49 -0
  385. package/dist/ui/Card.svelte.d.ts +44 -0
  386. package/dist/ui/Chip.svelte +58 -0
  387. package/dist/ui/Chip.svelte.d.ts +21 -0
  388. package/dist/ui/ConfirmButton.svelte +75 -0
  389. package/dist/ui/ConfirmButton.svelte.d.ts +48 -0
  390. package/dist/ui/ContextMenu.svelte +75 -0
  391. package/dist/ui/ContextMenu.svelte.d.ts +25 -0
  392. package/dist/ui/Disclosure.svelte +46 -0
  393. package/dist/ui/Disclosure.svelte.d.ts +22 -0
  394. package/dist/ui/Divider.svelte +47 -0
  395. package/dist/ui/Divider.svelte.d.ts +28 -0
  396. package/dist/ui/DropdownMenu.svelte +44 -0
  397. package/dist/ui/DropdownMenu.svelte.d.ts +30 -0
  398. package/dist/ui/EmptyState.svelte +37 -0
  399. package/dist/ui/EmptyState.svelte.d.ts +22 -0
  400. package/dist/ui/ExternalLink.svelte +38 -0
  401. package/dist/ui/ExternalLink.svelte.d.ts +34 -0
  402. package/dist/ui/Heading.svelte +58 -0
  403. package/dist/ui/Heading.svelte.d.ts +22 -0
  404. package/dist/ui/Link.svelte +34 -0
  405. package/dist/ui/Link.svelte.d.ts +20 -0
  406. package/dist/ui/LinkButton.svelte +51 -0
  407. package/dist/ui/LinkButton.svelte.d.ts +33 -0
  408. package/dist/ui/Menu.svelte +24 -0
  409. package/dist/ui/Menu.svelte.d.ts +13 -0
  410. package/dist/ui/MenuCheckboxItem.svelte +33 -0
  411. package/dist/ui/MenuCheckboxItem.svelte.d.ts +20 -0
  412. package/dist/ui/MenuItem.svelte +73 -0
  413. package/dist/ui/MenuItem.svelte.d.ts +21 -0
  414. package/dist/ui/MenuRadioGroup.svelte +25 -0
  415. package/dist/ui/MenuRadioGroup.svelte.d.ts +20 -0
  416. package/dist/ui/MenuRadioItem.svelte +20 -0
  417. package/dist/ui/MenuRadioItem.svelte.d.ts +15 -0
  418. package/dist/ui/MenuSeparator.svelte +27 -0
  419. package/dist/ui/MenuSeparator.svelte.d.ts +8 -0
  420. package/dist/ui/MenuSub.svelte +24 -0
  421. package/dist/ui/MenuSub.svelte.d.ts +15 -0
  422. package/dist/ui/Popover.svelte +63 -0
  423. package/dist/ui/Popover.svelte.d.ts +40 -0
  424. package/dist/ui/ShareButton.svelte +64 -0
  425. package/dist/ui/ShareButton.svelte.d.ts +39 -0
  426. package/dist/ui/Skeleton.svelte +43 -0
  427. package/dist/ui/Skeleton.svelte.d.ts +22 -0
  428. package/dist/ui/Spinner.svelte +41 -0
  429. package/dist/ui/Spinner.svelte.d.ts +35 -0
  430. package/dist/ui/Stack.svelte +36 -0
  431. package/dist/ui/Stack.svelte.d.ts +48 -0
  432. package/dist/ui/ThemeToggle.svelte +65 -0
  433. package/dist/ui/ThemeToggle.svelte.d.ts +24 -0
  434. package/dist/ui/ToggleButton.svelte +58 -0
  435. package/dist/ui/ToggleButton.svelte.d.ts +45 -0
  436. package/dist/ui/ToggleGroup.svelte +142 -0
  437. package/dist/ui/ToggleGroup.svelte.d.ts +86 -0
  438. package/dist/ui/Toolbar.svelte +40 -0
  439. package/dist/ui/Toolbar.svelte.d.ts +20 -0
  440. package/dist/ui/ToolbarButton.svelte +29 -0
  441. package/dist/ui/ToolbarButton.svelte.d.ts +21 -0
  442. package/dist/ui/ToolbarLink.svelte +21 -0
  443. package/dist/ui/ToolbarLink.svelte.d.ts +12 -0
  444. package/dist/ui/ToolbarSeparator.svelte +22 -0
  445. package/dist/ui/ToolbarSeparator.svelte.d.ts +12 -0
  446. package/dist/ui/ToolbarToggleGroup.svelte +66 -0
  447. package/dist/ui/ToolbarToggleGroup.svelte.d.ts +52 -0
  448. package/dist/ui/Tooltip.svelte +54 -0
  449. package/dist/ui/Tooltip.svelte.d.ts +35 -0
  450. package/dist/ui/VisuallyHidden.svelte +23 -0
  451. package/dist/ui/VisuallyHidden.svelte.d.ts +10 -0
  452. package/dist/ui/accordion-context.d.ts +26 -0
  453. package/dist/ui/accordion-context.js +23 -0
  454. package/dist/ui/colour-token.d.ts +41 -0
  455. package/dist/ui/colour-token.js +49 -0
  456. package/dist/ui/context-menu.d.ts +13 -0
  457. package/dist/ui/context-menu.js +13 -0
  458. package/dist/ui/index.d.ts +63 -0
  459. package/dist/ui/index.js +62 -0
  460. package/dist/ui/menu-context.d.ts +20 -0
  461. package/dist/ui/menu-context.js +22 -0
  462. package/dist/ui/menu-parts/CheckboxItemPart.svelte +26 -0
  463. package/dist/ui/menu-parts/CheckboxItemPart.svelte.d.ts +5 -0
  464. package/dist/ui/menu-parts/ItemPart.svelte +29 -0
  465. package/dist/ui/menu-parts/ItemPart.svelte.d.ts +5 -0
  466. package/dist/ui/menu-parts/RadioGroupPart.svelte +24 -0
  467. package/dist/ui/menu-parts/RadioGroupPart.svelte.d.ts +5 -0
  468. package/dist/ui/menu-parts/RadioItemPart.svelte +22 -0
  469. package/dist/ui/menu-parts/RadioItemPart.svelte.d.ts +5 -0
  470. package/dist/ui/menu-parts/SeparatorPart.svelte +16 -0
  471. package/dist/ui/menu-parts/SeparatorPart.svelte.d.ts +5 -0
  472. package/dist/ui/menu-parts/SubPart.svelte +28 -0
  473. package/dist/ui/menu-parts/SubPart.svelte.d.ts +5 -0
  474. package/dist/ui/menu-parts/menu-parts.d.ts +104 -0
  475. package/dist/ui/menu-parts/menu-parts.js +31 -0
  476. package/dist/ui/menu-parts/parts.d.ts +12 -0
  477. package/dist/ui/menu-parts/parts.js +27 -0
  478. package/dist/ui/slug.d.ts +19 -0
  479. package/dist/ui/slug.js +25 -0
  480. package/dist/ui/toggle-classes.d.ts +39 -0
  481. package/dist/ui/toggle-classes.js +36 -0
  482. package/dist/ui/tones.d.ts +103 -0
  483. package/dist/ui/tones.js +240 -0
  484. package/package.json +41 -25
@@ -0,0 +1,86 @@
1
+ import { ToggleGroup } from 'bits-ui';
2
+ import type { Snippet } from 'svelte';
3
+ import type { HTMLAttributes } from 'svelte/elements';
4
+ import { type ToggleGroupItem } from './toggle-classes.ts';
5
+ import { type ButtonVariant, type Size, type Tone } from './tones.ts';
6
+ declare function $$render<V extends string>(): {
7
+ props: Omit<HTMLAttributes<HTMLDivElement>, "onchange" | "children"> & ({
8
+ items: readonly ToggleGroupItem<V>[];
9
+ /** Accessible name of the group ("View", "Formatting"); omit when `labelId` names it. */
10
+ label?: string | undefined;
11
+ /** `FieldControl`: the visible label's id; the group is `aria-labelledby` it. */
12
+ labelId?: string | undefined;
13
+ /** `FieldControl`: space-separated ids for `aria-describedby`. */
14
+ describedBy?: string | undefined;
15
+ /** `FieldControl`: the field is in error. */
16
+ invalid?: boolean | undefined;
17
+ /** Posts the selection with a form: one hidden input per selected value. */
18
+ name?: string | undefined;
19
+ /** @defaultValue `'horizontal'` */
20
+ orientation?: "horizontal" | "vertical" | undefined;
21
+ /** @defaultValue `true` */
22
+ loop?: boolean | undefined;
23
+ /**
24
+ * Colour of a pressed item.
25
+ * @defaultValue `'primary'`
26
+ */
27
+ tone?: Tone | undefined;
28
+ /**
29
+ * Look of an unpressed item.
30
+ * @defaultValue `'solid'`
31
+ */
32
+ variant?: ButtonVariant | undefined;
33
+ /** @defaultValue `'md'` */
34
+ size?: Size | undefined;
35
+ /** Stretch to the container's width, items sharing it equally. */
36
+ block?: boolean | undefined;
37
+ /** A check mark (`aria-hidden`) on pressed items, a second non-colour cue. */
38
+ showCheck?: boolean | undefined;
39
+ /** Show icon-only items' labels in a tooltip on hover and focus. */
40
+ tooltip?: boolean | undefined;
41
+ disabled?: boolean | undefined;
42
+ /** Per-item content in place of icon + label; the label stays the name unless you render it. */
43
+ item?: Snippet<[ToggleGroupItem<V>, {
44
+ pressed: boolean;
45
+ }]> | undefined;
46
+ } & ({
47
+ type: "single";
48
+ /** The selected value, `''` for none. Bindable. */
49
+ value?: V | "" | undefined;
50
+ onValueChange?: ((value: V | "") => void) | undefined;
51
+ /**
52
+ * Keep one item selected: pressing the selected item does nothing.
53
+ * @defaultValue `false`
54
+ */
55
+ required?: boolean | undefined;
56
+ } | {
57
+ type: "multiple";
58
+ /** The selected values. Bindable. */
59
+ value?: readonly V[] | undefined;
60
+ onValueChange?: ((value: V[]) => void) | undefined;
61
+ /** `FieldControl`: accepted for the spread; a multiple group may be empty. */
62
+ required?: boolean | undefined;
63
+ }));
64
+ exports: {};
65
+ bindings: "value";
66
+ slots: {};
67
+ events: {};
68
+ };
69
+ declare class __sveltets_Render<V extends string> {
70
+ props(): ReturnType<typeof $$render<V>>['props'];
71
+ events(): ReturnType<typeof $$render<V>>['events'];
72
+ slots(): ReturnType<typeof $$render<V>>['slots'];
73
+ bindings(): "value";
74
+ exports(): {};
75
+ }
76
+ interface $$IsomorphicComponent {
77
+ new <V extends string>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<V>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<V>['props']>, ReturnType<__sveltets_Render<V>['events']>, ReturnType<__sveltets_Render<V>['slots']>> & {
78
+ $$bindings?: ReturnType<__sveltets_Render<V>['bindings']>;
79
+ } & ReturnType<__sveltets_Render<V>['exports']>;
80
+ <V extends string>(internal: unknown, props: ReturnType<__sveltets_Render<V>['props']> & {}): ReturnType<__sveltets_Render<V>['exports']>;
81
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
82
+ }
83
+ /** A set of toggle buttons answering one question, exclusively or independently, on bits-ui `ToggleGroup`. */
84
+ declare const ToggleGroup: $$IsomorphicComponent;
85
+ type ToggleGroup<V extends string> = InstanceType<typeof ToggleGroup<V>>;
86
+ export default ToggleGroup;
@@ -0,0 +1,40 @@
1
+ <!-- @component
2
+ A `role="toolbar"` on bits-ui `Toolbar`: one Tab stop, arrow keys between its controls.
3
+ -->
4
+ <!--
5
+ Toolbar — an editor's formatting row, a table's bulk-action bar, a canvas
6
+ tool palette (APG Toolbar). Its controls are `ToolbarButton`,
7
+ `ToolbarLink`, `ToolbarToggleGroup` and `ToolbarSeparator`, all bits-ui
8
+ toolbar parts, so the whole row is ONE Tab stop with arrow keys within it.
9
+ A plain `Button` or a nested `ToggleGroup` inside it would each add Tab
10
+ stops of their own and break that.
11
+
12
+ A toolbar is a composite widget. For a cluster of independent actions
13
+ ("Save | Save as… | Discard") where each should be its own Tab stop, use
14
+ `ButtonGroup`.
15
+
16
+ ARIA and keyboard contract: bits-ui's `role="toolbar"` and roving
17
+ tabindex; ← / → (↑ / ↓ when vertical), Home / End, wrapping with `loop`.
18
+ We add the name (`label` → `aria-label`) and `aria-orientation`.
19
+ -->
20
+ <script lang="ts">import { Toolbar } from "bits-ui";
21
+ let { label, orientation = "horizontal", loop = true, children, class: className, ...rest } = $props();
22
+ </script>
23
+
24
+ <Toolbar.Root {orientation} {loop}>
25
+ {#snippet child({ props })}
26
+ <div
27
+ {...rest}
28
+ {...props}
29
+ aria-label={label}
30
+ aria-orientation={orientation}
31
+ class={[
32
+ 'rounded-box bg-base-200 inline-flex items-center gap-1 p-1',
33
+ orientation === 'vertical' && 'flex-col',
34
+ className,
35
+ ]}
36
+ >
37
+ {@render children()}
38
+ </div>
39
+ {/snippet}
40
+ </Toolbar.Root>
@@ -0,0 +1,20 @@
1
+ import { Toolbar } from 'bits-ui';
2
+ import type { Snippet } from 'svelte';
3
+ import type { HTMLAttributes } from 'svelte/elements';
4
+ interface Props extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
5
+ /** Accessible name ("Formatting", "Bulk actions"). */
6
+ label: string;
7
+ /** @defaultValue `'horizontal'` */
8
+ orientation?: 'horizontal' | 'vertical' | undefined;
9
+ /**
10
+ * Arrow keys wrap from the last control to the first.
11
+ * @defaultValue `true`
12
+ */
13
+ loop?: boolean | undefined;
14
+ /** The controls: `ToolbarButton`, `ToolbarLink`, `ToolbarToggleGroup`, `ToolbarSeparator`. */
15
+ children: Snippet<[]>;
16
+ }
17
+ /** A `role="toolbar"` on bits-ui `Toolbar`: one Tab stop, arrow keys between its controls. */
18
+ declare const Toolbar: import("svelte").Component<Props, {}, "">;
19
+ type Toolbar = ReturnType<typeof Toolbar>;
20
+ export default Toolbar;
@@ -0,0 +1,29 @@
1
+ <!-- @component
2
+ A button inside a `Toolbar`: one of its roving-focus controls, wearing the library's `Button`.
3
+ -->
4
+ <!--
5
+ ToolbarButton — rendered through bits-ui `Toolbar.Button`'s `child`
6
+ snippet onto `Button`, so the button look and the `loading` contract stay
7
+ one implementation. `iconOnly` hides the text visually; it stays the
8
+ accessible name (never `title`).
9
+ -->
10
+ <script lang="ts">import { Toolbar } from "bits-ui";
11
+ import Button from "./Button.svelte";
12
+ let { tone, variant = "ghost", size = "sm", icon, iconOnly = false, children, disabled, class: className, ...rest } = $props();
13
+ </script>
14
+
15
+ <Toolbar.Button {...disabled == null ? {} : { disabled }}>
16
+ {#snippet child({ props })}
17
+ <Button
18
+ {...rest}
19
+ {...props}
20
+ {tone}
21
+ {variant}
22
+ {size}
23
+ {icon}
24
+ class={[iconOnly && 'btn-square', className]}
25
+ >
26
+ {#if iconOnly}<span class="sr-only">{@render children()}</span>{:else}{@render children()}{/if}
27
+ </Button>
28
+ {/snippet}
29
+ </Toolbar.Button>
@@ -0,0 +1,21 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLButtonAttributes } from 'svelte/elements';
3
+ import type { ButtonVariant, Size, Tone } from './tones.ts';
4
+ interface Props extends Omit<HTMLButtonAttributes, 'type' | 'children'> {
5
+ /** Semantic colour. */
6
+ tone?: Tone | undefined;
7
+ /** @defaultValue `'ghost'` */
8
+ variant?: ButtonVariant | undefined;
9
+ /** @defaultValue `'sm'` */
10
+ size?: Size | undefined;
11
+ /** Leading icon. */
12
+ icon?: Snippet<[]> | undefined;
13
+ /** Hide the text visually; it remains the accessible name. */
14
+ iconOnly?: boolean | undefined;
15
+ /** The button text; its accessible name. */
16
+ children: Snippet<[]>;
17
+ }
18
+ /** A button inside a `Toolbar`: one of its roving-focus controls, wearing the library's `Button`. */
19
+ declare const ToolbarButton: import("svelte").Component<Props, {}, "">;
20
+ type ToolbarButton = ReturnType<typeof ToolbarButton>;
21
+ export default ToolbarButton;
@@ -0,0 +1,21 @@
1
+ <!-- @component
2
+ A link inside a `Toolbar`: one of its roving-focus controls, resolved through the components context.
3
+ -->
4
+ <!--
5
+ ToolbarLink — bits-ui `Toolbar.Link`, styled as a small ghost button, with
6
+ `href` resolved through `getComponentsContext().href()` like every other
7
+ link in the library.
8
+ -->
9
+ <script lang="ts">import { Toolbar } from "bits-ui";
10
+ import { getComponentsContext } from "../context.svelte.js";
11
+ let { href, children, class: className, ...rest } = $props();
12
+ const context = getComponentsContext();
13
+ </script>
14
+
15
+ <Toolbar.Link>
16
+ {#snippet child({ props })}
17
+ <a {...rest} {...props} href={context.href(href)} class={['btn btn-ghost btn-sm', className]}>
18
+ {@render children()}
19
+ </a>
20
+ {/snippet}
21
+ </Toolbar.Link>
@@ -0,0 +1,12 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAnchorAttributes } from 'svelte/elements';
3
+ interface Props extends Omit<HTMLAnchorAttributes, 'children'> {
4
+ /** App-relative path, resolved through the context's `href()`. */
5
+ href: string;
6
+ /** The link text; its accessible name. */
7
+ children: Snippet<[]>;
8
+ }
9
+ /** A link inside a `Toolbar`: one of its roving-focus controls, resolved through the components context. */
10
+ declare const ToolbarLink: import("svelte").Component<Props, {}, "">;
11
+ type ToolbarLink = ReturnType<typeof ToolbarLink>;
12
+ export default ToolbarLink;
@@ -0,0 +1,22 @@
1
+ <!-- @component
2
+ A rule between groups of controls in a `Toolbar`, perpendicular to it.
3
+ -->
4
+ <!--
5
+ ToolbarSeparator — `role="separator"` with the perpendicular
6
+ `aria-orientation` (a vertical rule in a horizontal toolbar). Not
7
+ focusable, so the arrow keys skip it.
8
+ -->
9
+ <script lang="ts">let { toolbarOrientation = "horizontal", class: className, ...rest } = $props();
10
+ const vertical = $derived(toolbarOrientation === "horizontal");
11
+ export {};
12
+ </script>
13
+
14
+ <div
15
+ {...rest}
16
+ role="separator"
17
+ aria-orientation={vertical ? 'vertical' : 'horizontal'}
18
+ class={[
19
+ vertical ? 'bg-base-300 mx-1 h-6 w-px self-center' : 'bg-base-300 my-1 h-px w-6 self-center',
20
+ className,
21
+ ]}
22
+ ></div>
@@ -0,0 +1,12 @@
1
+ import type { HTMLAttributes } from 'svelte/elements';
2
+ interface Props extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
3
+ /**
4
+ * The orientation of the enclosing toolbar; the rule runs across it.
5
+ * @defaultValue `'horizontal'`
6
+ */
7
+ toolbarOrientation?: 'horizontal' | 'vertical' | undefined;
8
+ }
9
+ /** A rule between groups of controls in a `Toolbar`, perpendicular to it. */
10
+ declare const ToolbarSeparator: import("svelte").Component<Props, {}, "">;
11
+ type ToolbarSeparator = ReturnType<typeof ToolbarSeparator>;
12
+ export default ToolbarSeparator;
@@ -0,0 +1,66 @@
1
+ <!-- @component
2
+ A set of toggles inside a `Toolbar` (Bold / Italic, alignment), sharing the toolbar's single Tab stop.
3
+ -->
4
+ <!--
5
+ ToolbarToggleGroup — `ToggleGroup`'s props and look, built on bits-ui
6
+ `Toolbar.Group` / `Toolbar.GroupItem` rather than a nested
7
+ `ToggleGroup`: a nested group keeps its own roving focus, which the
8
+ toolbar knows nothing about, and the toolbar's one Tab stop breaks. Here
9
+ the items are toolbar controls, so ← / → run across the whole toolbar.
10
+
11
+ `type="multiple"`: a `role="group"` of `aria-pressed` buttons.
12
+ `type="single"`: the items are `radio`s, so the group is overridden to a
13
+ `radiogroup`; as in the APG toolbar example, the arrows only move focus
14
+ across the toolbar and Space / Enter selects. With `required`, pressing
15
+ the selected item does nothing.
16
+ -->
17
+ <script lang="ts" generics="V extends string">import { Toolbar } from "bits-ui";
18
+ import { toggleClasses, toggleSetters } from "./toggle-classes.js";
19
+ import { buttonSize } from "./tones.js";
20
+ let { type, items, label, value = $bindable(), onValueChange, required = false, tone = "primary", variant = "ghost", size = "sm", disabled = false, class: className } = $props();
21
+ const setters = toggleSetters({
22
+ required: () => required,
23
+ assign: (next) => value = next,
24
+ notify: () => onValueChange
25
+ });
26
+ </script>
27
+
28
+ {#snippet group({ props }: { props: Record<string, unknown> })}
29
+ <div
30
+ {...props}
31
+ role={type === 'single' ? 'radiogroup' : 'group'}
32
+ aria-label={label}
33
+ class={['inline-flex items-center gap-0.5', className]}
34
+ >
35
+ {#each items as entry (entry.value)}
36
+ <Toolbar.GroupItem value={entry.value} disabled={entry.disabled ?? false}>
37
+ {#snippet child({ props: itemProps, pressed })}
38
+ <button
39
+ {...itemProps}
40
+ type="button"
41
+ class={['btn', buttonSize[size], toggleClasses(pressed, tone, variant), entry.iconOnly && 'btn-square']}
42
+ >
43
+ {@render entry.icon?.()}
44
+ {#if entry.iconOnly}<span class="sr-only">{entry.label}</span>{:else}{entry.label}{/if}
45
+ </button>
46
+ {/snippet}
47
+ </Toolbar.GroupItem>
48
+ {/each}
49
+ </div>
50
+ {/snippet}
51
+
52
+ {#if type === 'single'}
53
+ <Toolbar.Group
54
+ type="single"
55
+ bind:value={() => (typeof value === 'string' ? value : ''), setters.single}
56
+ {disabled}
57
+ child={group}
58
+ />
59
+ {:else}
60
+ <Toolbar.Group
61
+ type="multiple"
62
+ bind:value={() => [...(Array.isArray(value) ? value : [])], setters.multiple}
63
+ {disabled}
64
+ child={group}
65
+ />
66
+ {/if}
@@ -0,0 +1,52 @@
1
+ import { type ToggleGroupItem } from './toggle-classes.ts';
2
+ import { type ButtonVariant, type Size, type Tone } from './tones.ts';
3
+ declare function $$render<V extends string>(): {
4
+ props: {
5
+ items: readonly ToggleGroupItem<V>[];
6
+ /** Accessible name of the set ("Text style", "Alignment"). */
7
+ label: string;
8
+ /** @defaultValue `'primary'` */
9
+ tone?: Tone | undefined;
10
+ /** @defaultValue `'ghost'` */
11
+ variant?: ButtonVariant | undefined;
12
+ /** @defaultValue `'sm'` */
13
+ size?: Size | undefined;
14
+ disabled?: boolean | undefined;
15
+ class?: string | undefined;
16
+ } & ({
17
+ type: "single";
18
+ /** The selected value, `''` for none. Bindable. */
19
+ value?: V | "" | undefined;
20
+ onValueChange?: ((value: V | "") => void) | undefined;
21
+ /** Pressing the selected item does nothing. */
22
+ required?: boolean | undefined;
23
+ } | {
24
+ type: "multiple";
25
+ /** The selected values. Bindable. */
26
+ value?: readonly V[] | undefined;
27
+ onValueChange?: ((value: V[]) => void) | undefined;
28
+ required?: undefined;
29
+ });
30
+ exports: {};
31
+ bindings: "value";
32
+ slots: {};
33
+ events: {};
34
+ };
35
+ declare class __sveltets_Render<V extends string> {
36
+ props(): ReturnType<typeof $$render<V>>['props'];
37
+ events(): ReturnType<typeof $$render<V>>['events'];
38
+ slots(): ReturnType<typeof $$render<V>>['slots'];
39
+ bindings(): "value";
40
+ exports(): {};
41
+ }
42
+ interface $$IsomorphicComponent {
43
+ new <V extends string>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<V>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<V>['props']>, ReturnType<__sveltets_Render<V>['events']>, ReturnType<__sveltets_Render<V>['slots']>> & {
44
+ $$bindings?: ReturnType<__sveltets_Render<V>['bindings']>;
45
+ } & ReturnType<__sveltets_Render<V>['exports']>;
46
+ <V extends string>(internal: unknown, props: ReturnType<__sveltets_Render<V>['props']> & {}): ReturnType<__sveltets_Render<V>['exports']>;
47
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
48
+ }
49
+ /** A set of toggles inside a `Toolbar` (Bold / Italic, alignment), sharing the toolbar's single Tab stop. */
50
+ declare const ToolbarToggleGroup: $$IsomorphicComponent;
51
+ type ToolbarToggleGroup<V extends string> = InstanceType<typeof ToolbarToggleGroup<V>>;
52
+ export default ToolbarToggleGroup;
@@ -0,0 +1,54 @@
1
+ <!-- @component
2
+ Supplementary text on hover and on keyboard focus, on bits-ui’s `Tooltip`.
3
+ -->
4
+ <!--
5
+ Tooltip — supplementary text on hover and on keyboard focus, on bits-ui's
6
+ `Tooltip`.
7
+
8
+ Provider-free by design. bits-ui's `Tooltip.Root` requires a
9
+ `Tooltip.Provider` ancestor (it reads the shared open-delay state from
10
+ context and throws without it), which means every consuming app would have
11
+ to remember to mount one in its root layout before a single tooltip works.
12
+ This component mounts its own, so `<Tooltip text="…">{trigger}</Tooltip>` is
13
+ the whole API. The cost is that the "skip the delay for the next tooltip"
14
+ behaviour is per-tooltip rather than app-wide, which is a fair trade for a
15
+ primitive that always works.
16
+
17
+ ARIA contract: bits-ui wires `aria-describedby` from the trigger to the
18
+ content — DESCRIBED, not labelled, because a tooltip supplements a name it
19
+ must never be the only source of. An icon-only control still needs its own
20
+ accessible name (`VisuallyHidden`, or `aria-label`); a tooltip is not it,
21
+ since a tooltip is unreachable to touch users entirely.
22
+
23
+ The trigger renders through bits-ui's `child` snippet, so the caller's own
24
+ element keeps its semantics instead of being wrapped in another button.
25
+ -->
26
+ <script lang="ts">import { Tooltip } from "bits-ui";
27
+ let { text, content, side = "top", sideOffset = 6, openDelay = 400, open = $bindable(false), class: className, children } = $props();
28
+ </script>
29
+
30
+ <Tooltip.Provider delayDuration={openDelay}>
31
+ <Tooltip.Root bind:open>
32
+ <Tooltip.Trigger>
33
+ {#snippet child({ props })}
34
+ {@render children({ props })}
35
+ {/snippet}
36
+ </Tooltip.Trigger>
37
+ <Tooltip.Portal>
38
+ <Tooltip.Content
39
+ {side}
40
+ {sideOffset}
41
+ class={[
42
+ 'bg-neutral text-neutral-content rounded-box z-50 max-w-xs px-3 py-1.5 text-sm shadow-md',
43
+ className,
44
+ ]}
45
+ >
46
+ {#if content}
47
+ {@render content()}
48
+ {:else if text !== undefined}
49
+ {text}
50
+ {/if}
51
+ </Tooltip.Content>
52
+ </Tooltip.Portal>
53
+ </Tooltip.Root>
54
+ </Tooltip.Provider>
@@ -0,0 +1,35 @@
1
+ import { Tooltip } from 'bits-ui';
2
+ import type { Snippet } from 'svelte';
3
+ interface Props {
4
+ /** The tooltip's text. Ignored when `content` is given. */
5
+ text?: string | undefined;
6
+ /** Richer tooltip content, in place of `text`. */
7
+ content?: Snippet<[]> | undefined;
8
+ /**
9
+ * Preferred side of the trigger; flipped on collision.
10
+ * @defaultValue `'top'`
11
+ */
12
+ side?: 'top' | 'right' | 'bottom' | 'left' | undefined;
13
+ /**
14
+ * Distance in pixels from the trigger.
15
+ * @defaultValue `6`
16
+ */
17
+ sideOffset?: number | undefined;
18
+ /**
19
+ * Milliseconds of hover before it opens.
20
+ * @defaultValue `400`
21
+ */
22
+ openDelay?: number | undefined;
23
+ /** Whether the tooltip is open. Bindable. */
24
+ open?: boolean | undefined;
25
+ /** Extra classes on the content bubble. */
26
+ class?: string | undefined;
27
+ /** The trigger — the caller's own element, spreading `props` onto it. */
28
+ children: Snippet<[{
29
+ props: Record<string, unknown>;
30
+ }]>;
31
+ }
32
+ /** Supplementary text on hover and on keyboard focus, on bits-ui’s `Tooltip`. */
33
+ declare const Tooltip: import("svelte").Component<Props, {}, "open">;
34
+ type Tooltip = ReturnType<typeof Tooltip>;
35
+ export default Tooltip;
@@ -0,0 +1,23 @@
1
+ <!-- @component
2
+ Content for assistive technology only: in the DOM and the accessibility tree, clipped out of the visual rendering.
3
+ -->
4
+ <!--
5
+ VisuallyHidden — content for assistive technology only: present in the
6
+ accessibility tree and in the DOM, clipped out of the visual rendering.
7
+
8
+ The canonical use is a name for something conveyed graphically — an icon-only
9
+ button, a star rating, a status dot — so that what a screen reader announces
10
+ matches what a sighted reader sees, rather than `aria-label` guessing at it.
11
+ Use it for content that must be READ. Content that must merely be reachable
12
+ (a skip link) wants `sr-only focus:not-sr-only` instead, which this component
13
+ supports because the caller's `class` is merged last by Svelte's class array.
14
+
15
+ The clipping itself is Tailwind's `sr-only` utility, which this package does
16
+ NOT ship — it comes from the consumer's Tailwind build, the same as every
17
+ other class here. See the README's `@source` note.
18
+ -->
19
+ <script lang="ts">let { children, class: className, ...rest } = $props();
20
+ export {};
21
+ </script>
22
+
23
+ <span {...rest} class={['sr-only', className]}>{@render children()}</span>
@@ -0,0 +1,10 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ interface Props extends HTMLAttributes<HTMLSpanElement> {
4
+ /** What assistive technology reads; any inline markup. */
5
+ children: Snippet<[]>;
6
+ }
7
+ /** Content for assistive technology only: in the DOM and the accessibility tree, clipped out of the visual rendering. */
8
+ declare const VisuallyHidden: import("svelte").Component<Props, {}, "">;
9
+ type VisuallyHidden = ReturnType<typeof VisuallyHidden>;
10
+ export default VisuallyHidden;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * How an {@link AccordionItem} learns its enclosing `Accordion`'s settings.
3
+ *
4
+ * `headingLevel`, `variant`, `joined`, `searchable` and the open state are
5
+ * the group's, never an item's: an item reads them from context so a stack
6
+ * cannot drift into mixed heading levels or markers. Getters, not values, so
7
+ * a change to the `Accordion`'s props reaches every item.
8
+ *
9
+ * @module
10
+ */
11
+ import type { DisclosureVariant, HeadingLevel } from './tones.ts';
12
+ /** What an `Accordion` lends its items. */
13
+ export interface AccordionContext {
14
+ readonly headingLevel: () => HeadingLevel;
15
+ readonly variant: () => DisclosureVariant;
16
+ readonly joined: () => boolean;
17
+ readonly searchable: () => boolean;
18
+ /** Whether the item with this value is open. */
19
+ readonly isOpen: (value: string) => boolean;
20
+ /** Whether closing this open item is refused (`type="single"` with `required`). */
21
+ readonly isLocked: (value: string) => boolean;
22
+ }
23
+ /** Lend `context` to the `AccordionItem`s below. */
24
+ export declare function setAccordionContext(context: AccordionContext): void;
25
+ /** The enclosing `Accordion`'s settings; throws outside one, where an item has no group to belong to. */
26
+ export declare function getAccordionContext(): AccordionContext;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * How an {@link AccordionItem} learns its enclosing `Accordion`'s settings.
3
+ *
4
+ * `headingLevel`, `variant`, `joined`, `searchable` and the open state are
5
+ * the group's, never an item's: an item reads them from context so a stack
6
+ * cannot drift into mixed heading levels or markers. Getters, not values, so
7
+ * a change to the `Accordion`'s props reaches every item.
8
+ *
9
+ * @module
10
+ */
11
+ import { getContext, setContext } from 'svelte';
12
+ const ACCORDION_KEY = Symbol.for('@thomasfosterau/components/accordion');
13
+ /** Lend `context` to the `AccordionItem`s below. */
14
+ export function setAccordionContext(context) {
15
+ setContext(ACCORDION_KEY, context);
16
+ }
17
+ /** The enclosing `Accordion`'s settings; throws outside one, where an item has no group to belong to. */
18
+ export function getAccordionContext() {
19
+ const context = getContext(ACCORDION_KEY);
20
+ if (context === undefined)
21
+ throw new Error('AccordionItem must be rendered inside an Accordion.');
22
+ return context;
23
+ }
@@ -0,0 +1,41 @@
1
+ /**
2
+ * The colour-token indirection: how a component takes a colour it does not
3
+ * own.
4
+ *
5
+ * Some things are coloured by their subject rather than by a semantic tone —
6
+ * a political party, a taxon rank, a project label. The colour belongs to the
7
+ * consuming application, not to this library, and it is never an inline hex
8
+ * here: the app's theme declares one custom property per subject
9
+ * (`--party-alp`, `--rank-genus`, …) in **both** its light and dark themes,
10
+ * and hands a component the property's NAME.
11
+ *
12
+ * The helpers below turn that name into the single custom property the
13
+ * component's Tailwind classes read (`bg-(--badge-colour)`,
14
+ * `border-(--chip-colour)`), with the theme's `neutral` colour as the
15
+ * fallback for a token the theme has no entry for. The only inline style
16
+ * any component in this package emits is that one variable indirection —
17
+ * the colour value itself stays in the stylesheet.
18
+ *
19
+ * @module
20
+ */
21
+ /** The custom property {@link Badge} binds a `colourToken` to. */
22
+ export declare const BADGE_COLOUR_PROPERTY = "--badge-colour";
23
+ /** The custom property {@link Chip} binds a `colourToken` to. */
24
+ export declare const CHIP_COLOUR_PROPERTY = "--chip-colour";
25
+ /**
26
+ * The inline `style` binding `property` to the theme token `token`, falling
27
+ * back to `--color-neutral` when the theme declares no such token.
28
+ *
29
+ * `token` is validated rather than trusted: a value that is not a custom
30
+ * property name is dropped entirely, so nothing a caller passes can break out
31
+ * of the `var()` it is interpolated into and inject further declarations.
32
+ *
33
+ * Returns `undefined` when there is no token, so a component can hand the
34
+ * result straight to `style` and emit no attribute at all.
35
+ *
36
+ * ```svelte
37
+ * <span style={colourTokenStyle(BADGE_COLOUR_PROPERTY, '--party-alp')}
38
+ * class="bg-(--badge-colour)/15 border-(--badge-colour)">…</span>
39
+ * ```
40
+ */
41
+ export declare function colourTokenStyle(property: string, token: string | undefined): string | undefined;