dystopia-linear-lib 1.0.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 (496) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +65 -0
  3. package/dist/components/accordion/Accordion.svelte +39 -0
  4. package/dist/components/accordion/Accordion.svelte.d.ts +4 -0
  5. package/dist/components/accordion/Accordion.types.d.ts +14 -0
  6. package/dist/components/accordion/Accordion.types.js +1 -0
  7. package/dist/components/accordion/AccordionItem.svelte +70 -0
  8. package/dist/components/accordion/AccordionItem.svelte.d.ts +4 -0
  9. package/dist/components/accordion/AccordionItem.types.d.ts +13 -0
  10. package/dist/components/accordion/AccordionItem.types.js +1 -0
  11. package/dist/components/accordion/accordion-context.d.ts +8 -0
  12. package/dist/components/accordion/accordion-context.js +12 -0
  13. package/dist/components/accordion/index.d.ts +4 -0
  14. package/dist/components/accordion/index.js +2 -0
  15. package/dist/components/alert/Alert.svelte +45 -0
  16. package/dist/components/alert/Alert.svelte.d.ts +4 -0
  17. package/dist/components/alert/Alert.types.d.ts +15 -0
  18. package/dist/components/alert/Alert.types.js +1 -0
  19. package/dist/components/alert/Alert.variants.d.ts +5 -0
  20. package/dist/components/alert/Alert.variants.js +14 -0
  21. package/dist/components/alert/index.d.ts +3 -0
  22. package/dist/components/alert/index.js +2 -0
  23. package/dist/components/avatar/Avatar.svelte +38 -0
  24. package/dist/components/avatar/Avatar.svelte.d.ts +4 -0
  25. package/dist/components/avatar/Avatar.types.d.ts +13 -0
  26. package/dist/components/avatar/Avatar.types.js +1 -0
  27. package/dist/components/avatar/index.d.ts +2 -0
  28. package/dist/components/avatar/index.js +1 -0
  29. package/dist/components/badge/Badge.svelte +11 -0
  30. package/dist/components/badge/Badge.svelte.d.ts +4 -0
  31. package/dist/components/badge/Badge.types.d.ts +7 -0
  32. package/dist/components/badge/Badge.types.js +1 -0
  33. package/dist/components/badge/Badge.variants.d.ts +5 -0
  34. package/dist/components/badge/Badge.variants.js +14 -0
  35. package/dist/components/badge/index.d.ts +3 -0
  36. package/dist/components/badge/index.js +2 -0
  37. package/dist/components/breadcrumb/Breadcrumb.svelte +9 -0
  38. package/dist/components/breadcrumb/Breadcrumb.svelte.d.ts +4 -0
  39. package/dist/components/breadcrumb/Breadcrumb.types.d.ts +6 -0
  40. package/dist/components/breadcrumb/Breadcrumb.types.js +1 -0
  41. package/dist/components/breadcrumb/BreadcrumbEllipsis.svelte +37 -0
  42. package/dist/components/breadcrumb/BreadcrumbEllipsis.svelte.d.ts +4 -0
  43. package/dist/components/breadcrumb/BreadcrumbEllipsis.types.d.ts +16 -0
  44. package/dist/components/breadcrumb/BreadcrumbEllipsis.types.js +1 -0
  45. package/dist/components/breadcrumb/BreadcrumbItem.svelte +10 -0
  46. package/dist/components/breadcrumb/BreadcrumbItem.svelte.d.ts +4 -0
  47. package/dist/components/breadcrumb/BreadcrumbItem.types.d.ts +6 -0
  48. package/dist/components/breadcrumb/BreadcrumbItem.types.js +1 -0
  49. package/dist/components/breadcrumb/BreadcrumbLink.svelte +22 -0
  50. package/dist/components/breadcrumb/BreadcrumbLink.svelte.d.ts +4 -0
  51. package/dist/components/breadcrumb/BreadcrumbLink.types.d.ts +10 -0
  52. package/dist/components/breadcrumb/BreadcrumbLink.types.js +1 -0
  53. package/dist/components/breadcrumb/BreadcrumbList.svelte +13 -0
  54. package/dist/components/breadcrumb/BreadcrumbList.svelte.d.ts +4 -0
  55. package/dist/components/breadcrumb/BreadcrumbList.types.d.ts +6 -0
  56. package/dist/components/breadcrumb/BreadcrumbList.types.js +1 -0
  57. package/dist/components/breadcrumb/BreadcrumbPage.svelte +15 -0
  58. package/dist/components/breadcrumb/BreadcrumbPage.svelte.d.ts +4 -0
  59. package/dist/components/breadcrumb/BreadcrumbPage.types.d.ts +6 -0
  60. package/dist/components/breadcrumb/BreadcrumbPage.types.js +1 -0
  61. package/dist/components/breadcrumb/BreadcrumbSeparator.svelte +28 -0
  62. package/dist/components/breadcrumb/BreadcrumbSeparator.svelte.d.ts +4 -0
  63. package/dist/components/breadcrumb/BreadcrumbSeparator.types.d.ts +7 -0
  64. package/dist/components/breadcrumb/BreadcrumbSeparator.types.js +1 -0
  65. package/dist/components/breadcrumb/index.d.ts +14 -0
  66. package/dist/components/breadcrumb/index.js +7 -0
  67. package/dist/components/button/Button.svelte +47 -0
  68. package/dist/components/button/Button.svelte.d.ts +4 -0
  69. package/dist/components/button/Button.types.d.ts +14 -0
  70. package/dist/components/button/Button.types.js +1 -0
  71. package/dist/components/button/Button.variants.d.ts +6 -0
  72. package/dist/components/button/Button.variants.js +19 -0
  73. package/dist/components/button/index.d.ts +3 -0
  74. package/dist/components/button/index.js +2 -0
  75. package/dist/components/button-group/ButtonGroup.svelte +11 -0
  76. package/dist/components/button-group/ButtonGroup.svelte.d.ts +4 -0
  77. package/dist/components/button-group/ButtonGroup.types.d.ts +7 -0
  78. package/dist/components/button-group/ButtonGroup.types.js +1 -0
  79. package/dist/components/button-group/ButtonGroup.variants.d.ts +5 -0
  80. package/dist/components/button-group/ButtonGroup.variants.js +12 -0
  81. package/dist/components/button-group/index.d.ts +3 -0
  82. package/dist/components/button-group/index.js +2 -0
  83. package/dist/components/calendar/Calendar.svelte +276 -0
  84. package/dist/components/calendar/Calendar.svelte.d.ts +4 -0
  85. package/dist/components/calendar/Calendar.types.d.ts +52 -0
  86. package/dist/components/calendar/Calendar.types.js +1 -0
  87. package/dist/components/calendar/CalendarDay.svelte +30 -0
  88. package/dist/components/calendar/CalendarDay.svelte.d.ts +4 -0
  89. package/dist/components/calendar/CalendarDay.types.d.ts +16 -0
  90. package/dist/components/calendar/CalendarDay.types.js +1 -0
  91. package/dist/components/calendar/CalendarDay.variants.d.ts +8 -0
  92. package/dist/components/calendar/CalendarDay.variants.js +31 -0
  93. package/dist/components/calendar/index.d.ts +5 -0
  94. package/dist/components/calendar/index.js +3 -0
  95. package/dist/components/card/Card.svelte +10 -0
  96. package/dist/components/card/Card.svelte.d.ts +4 -0
  97. package/dist/components/card/Card.types.d.ts +6 -0
  98. package/dist/components/card/Card.types.js +1 -0
  99. package/dist/components/card/CardContent.svelte +10 -0
  100. package/dist/components/card/CardContent.svelte.d.ts +4 -0
  101. package/dist/components/card/CardContent.types.d.ts +6 -0
  102. package/dist/components/card/CardContent.types.js +1 -0
  103. package/dist/components/card/CardDescription.svelte +10 -0
  104. package/dist/components/card/CardDescription.svelte.d.ts +4 -0
  105. package/dist/components/card/CardDescription.types.d.ts +6 -0
  106. package/dist/components/card/CardDescription.types.js +1 -0
  107. package/dist/components/card/CardFooter.svelte +10 -0
  108. package/dist/components/card/CardFooter.svelte.d.ts +4 -0
  109. package/dist/components/card/CardFooter.types.d.ts +6 -0
  110. package/dist/components/card/CardFooter.types.js +1 -0
  111. package/dist/components/card/CardHeader.svelte +10 -0
  112. package/dist/components/card/CardHeader.svelte.d.ts +4 -0
  113. package/dist/components/card/CardHeader.types.d.ts +6 -0
  114. package/dist/components/card/CardHeader.types.js +1 -0
  115. package/dist/components/card/CardTitle.svelte +10 -0
  116. package/dist/components/card/CardTitle.svelte.d.ts +4 -0
  117. package/dist/components/card/CardTitle.types.d.ts +6 -0
  118. package/dist/components/card/CardTitle.types.js +1 -0
  119. package/dist/components/card/index.d.ts +12 -0
  120. package/dist/components/card/index.js +6 -0
  121. package/dist/components/checkbox/Checkbox.svelte +74 -0
  122. package/dist/components/checkbox/Checkbox.svelte.d.ts +4 -0
  123. package/dist/components/checkbox/Checkbox.types.d.ts +15 -0
  124. package/dist/components/checkbox/Checkbox.types.js +1 -0
  125. package/dist/components/checkbox/Checkbox.variants.d.ts +5 -0
  126. package/dist/components/checkbox/Checkbox.variants.js +13 -0
  127. package/dist/components/checkbox/index.d.ts +3 -0
  128. package/dist/components/checkbox/index.js +2 -0
  129. package/dist/components/collapsible/Collapsible.svelte +64 -0
  130. package/dist/components/collapsible/Collapsible.svelte.d.ts +4 -0
  131. package/dist/components/collapsible/Collapsible.types.d.ts +13 -0
  132. package/dist/components/collapsible/Collapsible.types.js +1 -0
  133. package/dist/components/collapsible/index.d.ts +2 -0
  134. package/dist/components/collapsible/index.js +1 -0
  135. package/dist/components/combobox/Combobox.svelte +528 -0
  136. package/dist/components/combobox/Combobox.svelte.d.ts +25 -0
  137. package/dist/components/combobox/Combobox.types.d.ts +83 -0
  138. package/dist/components/combobox/Combobox.types.js +1 -0
  139. package/dist/components/combobox/Combobox.variants.d.ts +11 -0
  140. package/dist/components/combobox/Combobox.variants.js +35 -0
  141. package/dist/components/combobox/combobox-state.svelte.d.ts +69 -0
  142. package/dist/components/combobox/combobox-state.svelte.js +223 -0
  143. package/dist/components/combobox/index.d.ts +3 -0
  144. package/dist/components/combobox/index.js +2 -0
  145. package/dist/components/data-table/DataTable.svelte +113 -0
  146. package/dist/components/data-table/DataTable.svelte.d.ts +26 -0
  147. package/dist/components/data-table/DataTable.types.d.ts +32 -0
  148. package/dist/components/data-table/DataTable.types.js +1 -0
  149. package/dist/components/data-table/DataTableColumnHeader.svelte +63 -0
  150. package/dist/components/data-table/DataTableColumnHeader.svelte.d.ts +4 -0
  151. package/dist/components/data-table/DataTableColumnHeader.types.d.ts +17 -0
  152. package/dist/components/data-table/DataTableColumnHeader.types.js +1 -0
  153. package/dist/components/data-table/DataTablePagination.svelte +50 -0
  154. package/dist/components/data-table/DataTablePagination.svelte.d.ts +26 -0
  155. package/dist/components/data-table/DataTablePagination.types.d.ts +32 -0
  156. package/dist/components/data-table/DataTablePagination.types.js +1 -0
  157. package/dist/components/data-table/index.d.ts +6 -0
  158. package/dist/components/data-table/index.js +3 -0
  159. package/dist/components/date-picker/DatePicker.svelte +216 -0
  160. package/dist/components/date-picker/DatePicker.svelte.d.ts +4 -0
  161. package/dist/components/date-picker/DatePicker.types.d.ts +40 -0
  162. package/dist/components/date-picker/DatePicker.types.js +1 -0
  163. package/dist/components/date-picker/index.d.ts +2 -0
  164. package/dist/components/date-picker/index.js +1 -0
  165. package/dist/components/dialog/Dialog.svelte +179 -0
  166. package/dist/components/dialog/Dialog.svelte.d.ts +4 -0
  167. package/dist/components/dialog/Dialog.types.d.ts +21 -0
  168. package/dist/components/dialog/Dialog.types.js +1 -0
  169. package/dist/components/dialog/index.d.ts +2 -0
  170. package/dist/components/dialog/index.js +1 -0
  171. package/dist/components/drawer/Drawer.svelte +157 -0
  172. package/dist/components/drawer/Drawer.svelte.d.ts +4 -0
  173. package/dist/components/drawer/Drawer.types.d.ts +22 -0
  174. package/dist/components/drawer/Drawer.types.js +1 -0
  175. package/dist/components/drawer/Drawer.variants.d.ts +5 -0
  176. package/dist/components/drawer/Drawer.variants.js +14 -0
  177. package/dist/components/drawer/index.d.ts +3 -0
  178. package/dist/components/drawer/index.js +2 -0
  179. package/dist/components/dropdown/Dropdown.svelte +152 -0
  180. package/dist/components/dropdown/Dropdown.svelte.d.ts +4 -0
  181. package/dist/components/dropdown/Dropdown.types.d.ts +15 -0
  182. package/dist/components/dropdown/Dropdown.types.js +1 -0
  183. package/dist/components/dropdown/DropdownItem.svelte +31 -0
  184. package/dist/components/dropdown/DropdownItem.svelte.d.ts +4 -0
  185. package/dist/components/dropdown/DropdownItem.types.d.ts +8 -0
  186. package/dist/components/dropdown/DropdownItem.types.js +1 -0
  187. package/dist/components/dropdown/index.d.ts +4 -0
  188. package/dist/components/dropdown/index.js +2 -0
  189. package/dist/components/empty-state/EmptyState.svelte +37 -0
  190. package/dist/components/empty-state/EmptyState.svelte.d.ts +4 -0
  191. package/dist/components/empty-state/EmptyState.types.d.ts +16 -0
  192. package/dist/components/empty-state/EmptyState.types.js +1 -0
  193. package/dist/components/empty-state/index.d.ts +2 -0
  194. package/dist/components/empty-state/index.js +1 -0
  195. package/dist/components/helper-text/HelperText.svelte +15 -0
  196. package/dist/components/helper-text/HelperText.svelte.d.ts +4 -0
  197. package/dist/components/helper-text/HelperText.types.d.ts +8 -0
  198. package/dist/components/helper-text/HelperText.types.js +1 -0
  199. package/dist/components/helper-text/index.d.ts +2 -0
  200. package/dist/components/helper-text/index.js +1 -0
  201. package/dist/components/hover-card/HoverCard.svelte +138 -0
  202. package/dist/components/hover-card/HoverCard.svelte.d.ts +4 -0
  203. package/dist/components/hover-card/HoverCard.types.d.ts +20 -0
  204. package/dist/components/hover-card/HoverCard.types.js +1 -0
  205. package/dist/components/hover-card/index.d.ts +2 -0
  206. package/dist/components/hover-card/index.js +1 -0
  207. package/dist/components/label/Label.svelte +26 -0
  208. package/dist/components/label/Label.svelte.d.ts +4 -0
  209. package/dist/components/label/Label.types.d.ts +9 -0
  210. package/dist/components/label/Label.types.js +1 -0
  211. package/dist/components/label/index.d.ts +2 -0
  212. package/dist/components/label/index.js +1 -0
  213. package/dist/components/pagination/Pagination.svelte +85 -0
  214. package/dist/components/pagination/Pagination.svelte.d.ts +4 -0
  215. package/dist/components/pagination/Pagination.types.d.ts +41 -0
  216. package/dist/components/pagination/Pagination.types.js +1 -0
  217. package/dist/components/pagination/PaginationEllipsis.svelte +15 -0
  218. package/dist/components/pagination/PaginationEllipsis.svelte.d.ts +4 -0
  219. package/dist/components/pagination/PaginationEllipsis.types.d.ts +9 -0
  220. package/dist/components/pagination/PaginationEllipsis.types.js +1 -0
  221. package/dist/components/pagination/PaginationEllipsis.variants.d.ts +5 -0
  222. package/dist/components/pagination/PaginationEllipsis.variants.js +13 -0
  223. package/dist/components/pagination/PaginationItem.svelte +10 -0
  224. package/dist/components/pagination/PaginationItem.svelte.d.ts +4 -0
  225. package/dist/components/pagination/PaginationItem.types.d.ts +6 -0
  226. package/dist/components/pagination/PaginationItem.types.js +1 -0
  227. package/dist/components/pagination/PaginationLink.svelte +30 -0
  228. package/dist/components/pagination/PaginationLink.svelte.d.ts +4 -0
  229. package/dist/components/pagination/PaginationLink.types.d.ts +15 -0
  230. package/dist/components/pagination/PaginationLink.types.js +1 -0
  231. package/dist/components/pagination/PaginationLink.variants.d.ts +6 -0
  232. package/dist/components/pagination/PaginationLink.variants.js +18 -0
  233. package/dist/components/pagination/PaginationList.svelte +10 -0
  234. package/dist/components/pagination/PaginationList.svelte.d.ts +4 -0
  235. package/dist/components/pagination/PaginationList.types.d.ts +6 -0
  236. package/dist/components/pagination/PaginationList.types.js +1 -0
  237. package/dist/components/pagination/PaginationNext.svelte +25 -0
  238. package/dist/components/pagination/PaginationNext.svelte.d.ts +4 -0
  239. package/dist/components/pagination/PaginationNext.types.d.ts +9 -0
  240. package/dist/components/pagination/PaginationNext.types.js +1 -0
  241. package/dist/components/pagination/PaginationNext.variants.d.ts +5 -0
  242. package/dist/components/pagination/PaginationNext.variants.js +13 -0
  243. package/dist/components/pagination/PaginationPrevious.svelte +25 -0
  244. package/dist/components/pagination/PaginationPrevious.svelte.d.ts +4 -0
  245. package/dist/components/pagination/PaginationPrevious.types.d.ts +9 -0
  246. package/dist/components/pagination/PaginationPrevious.types.js +1 -0
  247. package/dist/components/pagination/PaginationPrevious.variants.d.ts +5 -0
  248. package/dist/components/pagination/PaginationPrevious.variants.js +13 -0
  249. package/dist/components/pagination/index.d.ts +18 -0
  250. package/dist/components/pagination/index.js +11 -0
  251. package/dist/components/password-field/PasswordField.svelte +69 -0
  252. package/dist/components/password-field/PasswordField.svelte.d.ts +4 -0
  253. package/dist/components/password-field/PasswordField.types.d.ts +10 -0
  254. package/dist/components/password-field/PasswordField.types.js +1 -0
  255. package/dist/components/password-field/index.d.ts +2 -0
  256. package/dist/components/password-field/index.js +1 -0
  257. package/dist/components/popover/Popover.svelte +84 -0
  258. package/dist/components/popover/Popover.svelte.d.ts +4 -0
  259. package/dist/components/popover/Popover.types.d.ts +15 -0
  260. package/dist/components/popover/Popover.types.js +1 -0
  261. package/dist/components/popover/index.d.ts +2 -0
  262. package/dist/components/popover/index.js +1 -0
  263. package/dist/components/progress/Progress.svelte +35 -0
  264. package/dist/components/progress/Progress.svelte.d.ts +4 -0
  265. package/dist/components/progress/Progress.types.d.ts +12 -0
  266. package/dist/components/progress/Progress.types.js +1 -0
  267. package/dist/components/progress/Progress.variants.d.ts +5 -0
  268. package/dist/components/progress/Progress.variants.js +13 -0
  269. package/dist/components/progress/index.d.ts +3 -0
  270. package/dist/components/progress/index.js +2 -0
  271. package/dist/components/radio/Radio.svelte +46 -0
  272. package/dist/components/radio/Radio.svelte.d.ts +4 -0
  273. package/dist/components/radio/Radio.types.d.ts +16 -0
  274. package/dist/components/radio/Radio.types.js +1 -0
  275. package/dist/components/radio/Radio.variants.d.ts +5 -0
  276. package/dist/components/radio/Radio.variants.js +13 -0
  277. package/dist/components/radio/index.d.ts +3 -0
  278. package/dist/components/radio/index.js +2 -0
  279. package/dist/components/select/Select.svelte +55 -0
  280. package/dist/components/select/Select.svelte.d.ts +4 -0
  281. package/dist/components/select/Select.types.d.ts +16 -0
  282. package/dist/components/select/Select.types.js +1 -0
  283. package/dist/components/select/Select.variants.d.ts +6 -0
  284. package/dist/components/select/Select.variants.js +18 -0
  285. package/dist/components/select/index.d.ts +3 -0
  286. package/dist/components/select/index.js +2 -0
  287. package/dist/components/separator/Separator.svelte +19 -0
  288. package/dist/components/separator/Separator.svelte.d.ts +4 -0
  289. package/dist/components/separator/Separator.types.d.ts +7 -0
  290. package/dist/components/separator/Separator.types.js +1 -0
  291. package/dist/components/separator/Separator.variants.d.ts +5 -0
  292. package/dist/components/separator/Separator.variants.js +12 -0
  293. package/dist/components/separator/index.d.ts +3 -0
  294. package/dist/components/separator/index.js +2 -0
  295. package/dist/components/sidebar/Sidebar.svelte +28 -0
  296. package/dist/components/sidebar/Sidebar.svelte.d.ts +4 -0
  297. package/dist/components/sidebar/Sidebar.types.d.ts +7 -0
  298. package/dist/components/sidebar/Sidebar.types.js +1 -0
  299. package/dist/components/sidebar/Sidebar.variants.d.ts +5 -0
  300. package/dist/components/sidebar/Sidebar.variants.js +12 -0
  301. package/dist/components/sidebar/SidebarCollapsibleItem.svelte +77 -0
  302. package/dist/components/sidebar/SidebarCollapsibleItem.svelte.d.ts +4 -0
  303. package/dist/components/sidebar/SidebarCollapsibleItem.types.d.ts +9 -0
  304. package/dist/components/sidebar/SidebarCollapsibleItem.types.js +1 -0
  305. package/dist/components/sidebar/SidebarContent.svelte +14 -0
  306. package/dist/components/sidebar/SidebarContent.svelte.d.ts +4 -0
  307. package/dist/components/sidebar/SidebarContent.types.d.ts +6 -0
  308. package/dist/components/sidebar/SidebarContent.types.js +1 -0
  309. package/dist/components/sidebar/SidebarFooter.svelte +14 -0
  310. package/dist/components/sidebar/SidebarFooter.svelte.d.ts +4 -0
  311. package/dist/components/sidebar/SidebarFooter.types.d.ts +6 -0
  312. package/dist/components/sidebar/SidebarFooter.types.js +1 -0
  313. package/dist/components/sidebar/SidebarGroup.svelte +10 -0
  314. package/dist/components/sidebar/SidebarGroup.svelte.d.ts +4 -0
  315. package/dist/components/sidebar/SidebarGroup.types.d.ts +6 -0
  316. package/dist/components/sidebar/SidebarGroup.types.js +1 -0
  317. package/dist/components/sidebar/SidebarGroupLabel.svelte +21 -0
  318. package/dist/components/sidebar/SidebarGroupLabel.svelte.d.ts +4 -0
  319. package/dist/components/sidebar/SidebarGroupLabel.types.d.ts +6 -0
  320. package/dist/components/sidebar/SidebarGroupLabel.types.js +1 -0
  321. package/dist/components/sidebar/SidebarHeader.svelte +14 -0
  322. package/dist/components/sidebar/SidebarHeader.svelte.d.ts +4 -0
  323. package/dist/components/sidebar/SidebarHeader.types.d.ts +6 -0
  324. package/dist/components/sidebar/SidebarHeader.types.js +1 -0
  325. package/dist/components/sidebar/SidebarItem.svelte +51 -0
  326. package/dist/components/sidebar/SidebarItem.svelte.d.ts +4 -0
  327. package/dist/components/sidebar/SidebarItem.types.d.ts +11 -0
  328. package/dist/components/sidebar/SidebarItem.types.js +1 -0
  329. package/dist/components/sidebar/SidebarItem.variants.d.ts +6 -0
  330. package/dist/components/sidebar/SidebarItem.variants.js +17 -0
  331. package/dist/components/sidebar/SidebarTrigger.svelte +39 -0
  332. package/dist/components/sidebar/SidebarTrigger.svelte.d.ts +4 -0
  333. package/dist/components/sidebar/SidebarTrigger.types.d.ts +8 -0
  334. package/dist/components/sidebar/SidebarTrigger.types.js +1 -0
  335. package/dist/components/sidebar/index.d.ts +20 -0
  336. package/dist/components/sidebar/index.js +11 -0
  337. package/dist/components/sidebar/sidebar-context.d.ts +8 -0
  338. package/dist/components/sidebar/sidebar-context.js +12 -0
  339. package/dist/components/skeleton/Skeleton.svelte +12 -0
  340. package/dist/components/skeleton/Skeleton.svelte.d.ts +4 -0
  341. package/dist/components/skeleton/Skeleton.types.d.ts +4 -0
  342. package/dist/components/skeleton/Skeleton.types.js +1 -0
  343. package/dist/components/skeleton/index.d.ts +2 -0
  344. package/dist/components/skeleton/index.js +1 -0
  345. package/dist/components/slider/Slider.svelte +30 -0
  346. package/dist/components/slider/Slider.svelte.d.ts +4 -0
  347. package/dist/components/slider/Slider.types.d.ts +9 -0
  348. package/dist/components/slider/Slider.types.js +1 -0
  349. package/dist/components/slider/Slider.variants.d.ts +5 -0
  350. package/dist/components/slider/Slider.variants.js +26 -0
  351. package/dist/components/slider/index.d.ts +3 -0
  352. package/dist/components/slider/index.js +2 -0
  353. package/dist/components/spinner/Spinner.svelte +24 -0
  354. package/dist/components/spinner/Spinner.svelte.d.ts +4 -0
  355. package/dist/components/spinner/Spinner.types.d.ts +10 -0
  356. package/dist/components/spinner/Spinner.types.js +1 -0
  357. package/dist/components/spinner/Spinner.variants.d.ts +5 -0
  358. package/dist/components/spinner/Spinner.variants.js +13 -0
  359. package/dist/components/spinner/index.d.ts +3 -0
  360. package/dist/components/spinner/index.js +2 -0
  361. package/dist/components/switch/Switch.svelte +37 -0
  362. package/dist/components/switch/Switch.svelte.d.ts +4 -0
  363. package/dist/components/switch/Switch.types.d.ts +13 -0
  364. package/dist/components/switch/Switch.types.js +1 -0
  365. package/dist/components/switch/Switch.variants.d.ts +8 -0
  366. package/dist/components/switch/Switch.variants.js +25 -0
  367. package/dist/components/switch/index.d.ts +3 -0
  368. package/dist/components/switch/index.js +2 -0
  369. package/dist/components/table/Table.svelte +14 -0
  370. package/dist/components/table/Table.svelte.d.ts +4 -0
  371. package/dist/components/table/Table.types.d.ts +10 -0
  372. package/dist/components/table/Table.types.js +1 -0
  373. package/dist/components/table/TableBody.svelte +10 -0
  374. package/dist/components/table/TableBody.svelte.d.ts +4 -0
  375. package/dist/components/table/TableBody.types.d.ts +6 -0
  376. package/dist/components/table/TableBody.types.js +1 -0
  377. package/dist/components/table/TableCaption.svelte +10 -0
  378. package/dist/components/table/TableCaption.svelte.d.ts +4 -0
  379. package/dist/components/table/TableCaption.types.d.ts +6 -0
  380. package/dist/components/table/TableCaption.types.js +1 -0
  381. package/dist/components/table/TableCell.svelte +13 -0
  382. package/dist/components/table/TableCell.svelte.d.ts +4 -0
  383. package/dist/components/table/TableCell.types.d.ts +6 -0
  384. package/dist/components/table/TableCell.types.js +1 -0
  385. package/dist/components/table/TableFooter.svelte +13 -0
  386. package/dist/components/table/TableFooter.svelte.d.ts +4 -0
  387. package/dist/components/table/TableFooter.types.d.ts +6 -0
  388. package/dist/components/table/TableFooter.types.js +1 -0
  389. package/dist/components/table/TableHead.svelte +17 -0
  390. package/dist/components/table/TableHead.svelte.d.ts +4 -0
  391. package/dist/components/table/TableHead.types.d.ts +6 -0
  392. package/dist/components/table/TableHead.types.js +1 -0
  393. package/dist/components/table/TableHeader.svelte +10 -0
  394. package/dist/components/table/TableHeader.svelte.d.ts +4 -0
  395. package/dist/components/table/TableHeader.types.d.ts +6 -0
  396. package/dist/components/table/TableHeader.types.js +1 -0
  397. package/dist/components/table/TableRow.svelte +17 -0
  398. package/dist/components/table/TableRow.svelte.d.ts +4 -0
  399. package/dist/components/table/TableRow.types.d.ts +11 -0
  400. package/dist/components/table/TableRow.types.js +1 -0
  401. package/dist/components/table/index.d.ts +16 -0
  402. package/dist/components/table/index.js +8 -0
  403. package/dist/components/tabs/Tabs.svelte +19 -0
  404. package/dist/components/tabs/Tabs.svelte.d.ts +4 -0
  405. package/dist/components/tabs/Tabs.types.d.ts +7 -0
  406. package/dist/components/tabs/Tabs.types.js +1 -0
  407. package/dist/components/tabs/TabsContent.svelte +24 -0
  408. package/dist/components/tabs/TabsContent.svelte.d.ts +4 -0
  409. package/dist/components/tabs/TabsContent.types.d.ts +7 -0
  410. package/dist/components/tabs/TabsContent.types.js +1 -0
  411. package/dist/components/tabs/TabsList.svelte +61 -0
  412. package/dist/components/tabs/TabsList.svelte.d.ts +4 -0
  413. package/dist/components/tabs/TabsList.types.d.ts +6 -0
  414. package/dist/components/tabs/TabsList.types.js +1 -0
  415. package/dist/components/tabs/TabsTrigger.svelte +37 -0
  416. package/dist/components/tabs/TabsTrigger.svelte.d.ts +4 -0
  417. package/dist/components/tabs/TabsTrigger.types.d.ts +8 -0
  418. package/dist/components/tabs/TabsTrigger.types.js +1 -0
  419. package/dist/components/tabs/index.d.ts +8 -0
  420. package/dist/components/tabs/index.js +4 -0
  421. package/dist/components/tabs/tabs-context.d.ts +8 -0
  422. package/dist/components/tabs/tabs-context.js +12 -0
  423. package/dist/components/text-field/TextField.svelte +53 -0
  424. package/dist/components/text-field/TextField.svelte.d.ts +4 -0
  425. package/dist/components/text-field/TextField.types.d.ts +17 -0
  426. package/dist/components/text-field/TextField.types.js +1 -0
  427. package/dist/components/text-field/TextField.variants.d.ts +6 -0
  428. package/dist/components/text-field/TextField.variants.js +18 -0
  429. package/dist/components/text-field/index.d.ts +3 -0
  430. package/dist/components/text-field/index.js +2 -0
  431. package/dist/components/textarea/Textarea.svelte +53 -0
  432. package/dist/components/textarea/Textarea.svelte.d.ts +4 -0
  433. package/dist/components/textarea/Textarea.types.d.ts +15 -0
  434. package/dist/components/textarea/Textarea.types.js +1 -0
  435. package/dist/components/textarea/Textarea.variants.d.ts +6 -0
  436. package/dist/components/textarea/Textarea.variants.js +18 -0
  437. package/dist/components/textarea/index.d.ts +3 -0
  438. package/dist/components/textarea/index.js +2 -0
  439. package/dist/components/toast/ToastItem.svelte +109 -0
  440. package/dist/components/toast/ToastItem.svelte.d.ts +17 -0
  441. package/dist/components/toast/Toaster.svelte +51 -0
  442. package/dist/components/toast/Toaster.svelte.d.ts +4 -0
  443. package/dist/components/toast/Toaster.types.d.ts +20 -0
  444. package/dist/components/toast/Toaster.types.js +1 -0
  445. package/dist/components/toast/Toaster.variants.d.ts +5 -0
  446. package/dist/components/toast/Toaster.variants.js +14 -0
  447. package/dist/components/toast/index.d.ts +4 -0
  448. package/dist/components/toast/index.js +3 -0
  449. package/dist/components/toast/toast-store.svelte.d.ts +28 -0
  450. package/dist/components/toast/toast-store.svelte.js +34 -0
  451. package/dist/components/toggle/Toggle.svelte +29 -0
  452. package/dist/components/toggle/Toggle.svelte.d.ts +4 -0
  453. package/dist/components/toggle/Toggle.types.d.ts +9 -0
  454. package/dist/components/toggle/Toggle.types.js +1 -0
  455. package/dist/components/toggle/Toggle.variants.d.ts +6 -0
  456. package/dist/components/toggle/Toggle.variants.js +18 -0
  457. package/dist/components/toggle/index.d.ts +3 -0
  458. package/dist/components/toggle/index.js +2 -0
  459. package/dist/components/tooltip/Tooltip.svelte +113 -0
  460. package/dist/components/tooltip/Tooltip.svelte.d.ts +4 -0
  461. package/dist/components/tooltip/Tooltip.types.d.ts +19 -0
  462. package/dist/components/tooltip/Tooltip.types.js +1 -0
  463. package/dist/components/tooltip/index.d.ts +2 -0
  464. package/dist/components/tooltip/index.js +1 -0
  465. package/dist/components/typography/Typography.svelte +33 -0
  466. package/dist/components/typography/Typography.svelte.d.ts +4 -0
  467. package/dist/components/typography/Typography.types.d.ts +10 -0
  468. package/dist/components/typography/Typography.types.js +1 -0
  469. package/dist/components/typography/Typography.variants.d.ts +5 -0
  470. package/dist/components/typography/Typography.variants.js +17 -0
  471. package/dist/components/typography/index.d.ts +3 -0
  472. package/dist/components/typography/index.js +2 -0
  473. package/dist/index.css +399 -0
  474. package/dist/utils/calendar-grid.d.ts +20 -0
  475. package/dist/utils/calendar-grid.js +26 -0
  476. package/dist/utils/cn.d.ts +2 -0
  477. package/dist/utils/cn.js +5 -0
  478. package/dist/utils/dismissable-layer.d.ts +12 -0
  479. package/dist/utils/dismissable-layer.js +44 -0
  480. package/dist/utils/floating.d.ts +18 -0
  481. package/dist/utils/floating.js +61 -0
  482. package/dist/utils/focus-trap.d.ts +12 -0
  483. package/dist/utils/focus-trap.js +55 -0
  484. package/dist/utils/id.d.ts +11 -0
  485. package/dist/utils/id.js +17 -0
  486. package/dist/utils/pagination-range.d.ts +18 -0
  487. package/dist/utils/pagination-range.js +34 -0
  488. package/dist/utils/portal.d.ts +5 -0
  489. package/dist/utils/portal.js +23 -0
  490. package/dist/utils/presence.svelte.d.ts +9 -0
  491. package/dist/utils/presence.svelte.js +38 -0
  492. package/dist/utils/roving-focus.d.ts +20 -0
  493. package/dist/utils/roving-focus.js +44 -0
  494. package/dist/utils/scroll-lock.d.ts +7 -0
  495. package/dist/utils/scroll-lock.js +33 -0
  496. package/package.json +108 -0
@@ -0,0 +1,32 @@
1
+ import type { PaginationState, RowData, Table, TableFeatures, Table_RowModels_Paginated, Table_RowPagination } from '@tanstack/svelte-table';
2
+ import type { PaginationLabels } from '../pagination/index.js';
3
+ import type { PaginationLinkVariantProps } from '../pagination/PaginationLink.variants.js';
4
+ export interface DataTablePaginationLabels extends PaginationLabels {
5
+ /** Accessible name for the rows-per-page `<select>`. Defaults to "Rows per page". */
6
+ pageSize?: string;
7
+ }
8
+ export interface DataTablePaginationProps<TFeatures extends TableFeatures, TData extends RowData> {
9
+ /**
10
+ * The instance you created yourself via `createTable()` — this component never
11
+ * calls it internally. Must have composed `rowPaginationFeature` +
12
+ * `createPaginatedRowModel()` into its `features`.
13
+ */
14
+ table: Table<TFeatures, TData> & Table_RowPagination<TFeatures, TData> & Table_RowModels_Paginated<TFeatures, TData> & {
15
+ /** `TableState`'s `pagination` slice, read reactively — see `@tanstack/svelte-table`'s atoms-based state model. */
16
+ atoms: {
17
+ pagination: {
18
+ get(): PaginationState;
19
+ };
20
+ };
21
+ };
22
+ /** Selectable page-size values for the rows-per-page control. */
23
+ pageSizeOptions: number[];
24
+ class?: string;
25
+ classes?: {
26
+ pageSize?: string;
27
+ pagination?: string;
28
+ };
29
+ labels?: DataTablePaginationLabels;
30
+ /** Density variant, applied to both the rows-per-page select and the pagination controls. Default 'sm' — this component pairs with `DataTable`'s compact rows. */
31
+ size?: PaginationLinkVariantProps['size'];
32
+ }
@@ -0,0 +1,6 @@
1
+ export { default as DataTable } from './DataTable.svelte';
2
+ export type { DataTableProps, DataTableLabels } from './DataTable.types.js';
3
+ export { default as DataTableColumnHeader } from './DataTableColumnHeader.svelte';
4
+ export type { DataTableColumnHeaderProps, SortableColumn } from './DataTableColumnHeader.types.js';
5
+ export { default as DataTablePagination } from './DataTablePagination.svelte';
6
+ export type { DataTablePaginationProps, DataTablePaginationLabels } from './DataTablePagination.types.js';
@@ -0,0 +1,3 @@
1
+ export { default as DataTable } from './DataTable.svelte';
2
+ export { default as DataTableColumnHeader } from './DataTableColumnHeader.svelte';
3
+ export { default as DataTablePagination } from './DataTablePagination.svelte';
@@ -0,0 +1,216 @@
1
+ <script lang="ts">
2
+ import { tick } from 'svelte';
3
+ import { type CalendarDate, DateFormatter, getLocalTimeZone } from '@internationalized/date';
4
+ import { cn } from '../../utils/cn.js';
5
+ import { floating } from '../../utils/floating.js';
6
+ import { portal } from '../../utils/portal.js';
7
+ import { createPresence } from '../../utils/presence.svelte.js';
8
+ import { createDismissableLayer } from '../../utils/dismissable-layer.js';
9
+ import { createIds } from '../../utils/id.js';
10
+ import { Calendar, type CalendarRangeValue } from '../calendar/index.js';
11
+ import type { DatePickerProps } from './DatePicker.types.js';
12
+
13
+ let {
14
+ type = 'single',
15
+ value = $bindable(),
16
+ name,
17
+ class: className,
18
+ classes,
19
+ locale,
20
+ defaultMonth,
21
+ minValue,
22
+ maxValue,
23
+ isDateDisabled,
24
+ labels,
25
+ disabled = false,
26
+ invalid = false,
27
+ portalTarget,
28
+ onValueChange,
29
+ ...restProps
30
+ }: DatePickerProps = $props();
31
+
32
+ const baseId = $props.id();
33
+ const ids = createIds(baseId, 'content');
34
+
35
+ let open = $state(false);
36
+ let triggerEl = $state<HTMLButtonElement | null>(null);
37
+ let contentEl = $state<HTMLDivElement | null>(null);
38
+
39
+ const presence = createPresence(
40
+ () => open,
41
+ () => contentEl
42
+ );
43
+
44
+ const resolvedLocale = $derived(
45
+ locale ?? (typeof navigator !== 'undefined' ? navigator.language : 'en-US')
46
+ );
47
+ const formatter = $derived(new DateFormatter(resolvedLocale, { dateStyle: 'medium' }));
48
+
49
+ const formattedValue = $derived.by(() => {
50
+ if (type === 'range') {
51
+ const current = value as CalendarRangeValue | undefined;
52
+ if (!current?.start) return undefined;
53
+ const start = formatter.format(current.start.toDate(getLocalTimeZone()));
54
+ if (!current.end) return start;
55
+ return `${start} – ${formatter.format(current.end.toDate(getLocalTimeZone()))}`;
56
+ }
57
+ const current = value as CalendarDate | undefined;
58
+ return current ? formatter.format(current.toDate(getLocalTimeZone())) : undefined;
59
+ });
60
+
61
+ function close(): void {
62
+ open = false;
63
+ }
64
+
65
+ function closeAndFocusTrigger(): void {
66
+ close();
67
+ triggerEl?.focus();
68
+ }
69
+
70
+ function toggleOpen(): void {
71
+ if (!disabled) open = !open;
72
+ }
73
+
74
+ // Enter/Space need no handling here — the trigger is a real `<button>`, so
75
+ // the browser already synthesizes a `click` (→ `toggleOpen`) for both.
76
+ // Duplicating that in keydown would toggle twice and immediately re-close.
77
+ function handleTriggerKeydown(event: KeyboardEvent): void {
78
+ if (!disabled && event.key === 'ArrowDown') {
79
+ event.preventDefault();
80
+ open = true;
81
+ }
82
+ }
83
+
84
+ function handleSingleValueChange(next: CalendarDate | undefined): void {
85
+ value = next;
86
+ (onValueChange as ((value: CalendarDate | undefined) => void) | undefined)?.(next);
87
+ closeAndFocusTrigger();
88
+ }
89
+
90
+ function handleRangeValueChange(next: CalendarRangeValue): void {
91
+ value = next;
92
+ (onValueChange as ((value: CalendarRangeValue) => void) | undefined)?.(next);
93
+ if (next.end) closeAndFocusTrigger();
94
+ }
95
+
96
+ $effect(() => {
97
+ if (!open) return;
98
+
99
+ // `contentEl` is itself tracked $state, so reading it makes this effect
100
+ // re-run once the portalled panel actually mounts — see Combobox.svelte
101
+ // for the same pattern.
102
+ if (!contentEl) return;
103
+
104
+ tick().then(() => {
105
+ contentEl?.querySelector<HTMLElement>('[role="gridcell"][tabindex="0"]')?.focus();
106
+ });
107
+
108
+ return createDismissableLayer(() => [triggerEl, contentEl], {
109
+ onPointerDownOutside: close,
110
+ onEscapeKeydown: (event) => {
111
+ event.preventDefault();
112
+ closeAndFocusTrigger();
113
+ }
114
+ });
115
+ });
116
+
117
+ const triggerProps = $derived({
118
+ ...restProps,
119
+ type: 'button' as const,
120
+ disabled,
121
+ 'aria-haspopup': 'grid' as const,
122
+ 'aria-expanded': open,
123
+ 'aria-controls': ids.content,
124
+ 'aria-invalid': invalid || undefined,
125
+ 'data-invalid': invalid ? '' : undefined,
126
+ 'data-disabled': disabled ? '' : undefined,
127
+ onclick: toggleOpen,
128
+ onkeydown: handleTriggerKeydown
129
+ });
130
+ </script>
131
+
132
+ <div class={cn('inline-block', className)}>
133
+ <button
134
+ bind:this={triggerEl}
135
+ {...triggerProps}
136
+ class={cn(
137
+ 'flex h-10 w-full cursor-pointer items-center gap-tight rounded-md border border-border bg-surface px-3 text-left text-sm leading-snug text-foreground-soft transition-colors duration-150 hover:border-border-hover focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50 data-[invalid]:border-danger-border data-[invalid]:focus-visible:ring-danger',
138
+ classes?.trigger
139
+ )}
140
+ >
141
+ <svg
142
+ viewBox="0 0 24 24"
143
+ fill="none"
144
+ stroke="currentColor"
145
+ stroke-width="2"
146
+ stroke-linecap="round"
147
+ stroke-linejoin="round"
148
+ aria-hidden="true"
149
+ class="size-4 shrink-0 text-foreground-faint"
150
+ >
151
+ <rect x="3" y="4" width="18" height="18" rx="2" />
152
+ <path d="M16 2v4M8 2v4M3 10h18" />
153
+ </svg>
154
+ <span class={cn('flex-1 truncate', !formattedValue && 'text-foreground-faint')}>
155
+ {formattedValue ?? labels?.placeholder ?? 'Select date'}
156
+ </span>
157
+ </button>
158
+
159
+ {#if name}
160
+ {#if type === 'range'}
161
+ <input
162
+ type="hidden"
163
+ name={`${name}-start`}
164
+ value={(value as CalendarRangeValue | undefined)?.start?.toString() ?? ''}
165
+ />
166
+ <input
167
+ type="hidden"
168
+ name={`${name}-end`}
169
+ value={(value as CalendarRangeValue | undefined)?.end?.toString() ?? ''}
170
+ />
171
+ {:else}
172
+ <input type="hidden" {name} value={(value as CalendarDate | undefined)?.toString() ?? ''} />
173
+ {/if}
174
+ {/if}
175
+ </div>
176
+
177
+ {#if presence.current}
178
+ <div
179
+ bind:this={contentEl}
180
+ id={ids.content}
181
+ data-slot="date-picker-content"
182
+ data-state={open ? 'open' : 'closed'}
183
+ inert={!open}
184
+ use:portal={{ target: portalTarget }}
185
+ use:floating={{ reference: triggerEl, placement: 'bottom-start', offset: 6 }}
186
+ class={cn(
187
+ 'z-50 rounded-lg border border-border bg-surface p-compact shadow-sm',
188
+ classes?.content
189
+ )}
190
+ >
191
+ {#if type === 'range'}
192
+ <Calendar
193
+ type="range"
194
+ value={value as CalendarRangeValue | undefined}
195
+ locale={resolvedLocale}
196
+ {defaultMonth}
197
+ {minValue}
198
+ {maxValue}
199
+ {isDateDisabled}
200
+ labels={{ previousMonth: labels?.previousMonth, nextMonth: labels?.nextMonth }}
201
+ onValueChange={handleRangeValueChange}
202
+ />
203
+ {:else}
204
+ <Calendar
205
+ value={value as CalendarDate | undefined}
206
+ locale={resolvedLocale}
207
+ {defaultMonth}
208
+ {minValue}
209
+ {maxValue}
210
+ {isDateDisabled}
211
+ labels={{ previousMonth: labels?.previousMonth, nextMonth: labels?.nextMonth }}
212
+ onValueChange={handleSingleValueChange}
213
+ />
214
+ {/if}
215
+ </div>
216
+ {/if}
@@ -0,0 +1,4 @@
1
+ import type { DatePickerProps } from './DatePicker.types.js';
2
+ declare const DatePicker: import("svelte").Component<DatePickerProps, {}, "value">;
3
+ type DatePicker = ReturnType<typeof DatePicker>;
4
+ export default DatePicker;
@@ -0,0 +1,40 @@
1
+ import type { CalendarDate } from '@internationalized/date';
2
+ import type { HTMLButtonAttributes } from 'svelte/elements';
3
+ import type { CalendarRangeValue } from '../calendar/index.js';
4
+ /** All user-facing strings, structured so a consumer can fully localize — never hardcode English here. */
5
+ export interface DatePickerLabels {
6
+ /** Trigger text when no date is selected yet. */
7
+ placeholder?: string;
8
+ previousMonth?: string;
9
+ nextMonth?: string;
10
+ }
11
+ interface DatePickerBaseProps extends Omit<HTMLButtonAttributes, 'children' | 'value' | 'type'> {
12
+ class?: string;
13
+ classes?: {
14
+ trigger?: string;
15
+ content?: string;
16
+ };
17
+ /** BCP 47 locale used for week-start day, month/weekday, and trigger-value formatting. Defaults to the browser locale. */
18
+ locale?: string;
19
+ /** Month shown initially when there's no value to derive it from. Defaults to the current month. */
20
+ defaultMonth?: CalendarDate;
21
+ minValue?: CalendarDate;
22
+ maxValue?: CalendarDate;
23
+ isDateDisabled?: (date: CalendarDate) => boolean;
24
+ labels?: DatePickerLabels;
25
+ /** Renders a hidden input under this name for native form submission. */
26
+ name?: string;
27
+ disabled?: boolean;
28
+ invalid?: boolean;
29
+ portalTarget?: HTMLElement | string;
30
+ }
31
+ export type DatePickerProps = DatePickerBaseProps & ({
32
+ type?: 'single';
33
+ value?: CalendarDate;
34
+ onValueChange?: (value: CalendarDate | undefined) => void;
35
+ } | {
36
+ type: 'range';
37
+ value?: CalendarRangeValue;
38
+ onValueChange?: (value: CalendarRangeValue) => void;
39
+ });
40
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export { default as DatePicker } from './DatePicker.svelte';
2
+ export type { DatePickerProps, DatePickerLabels } from './DatePicker.types.js';
@@ -0,0 +1 @@
1
+ export { default as DatePicker } from './DatePicker.svelte';
@@ -0,0 +1,179 @@
1
+ <script lang="ts">
2
+ import { cn } from '../../utils/cn.js';
3
+ import { portal } from '../../utils/portal.js';
4
+ import { createPresence } from '../../utils/presence.svelte.js';
5
+ import { createDismissableLayer } from '../../utils/dismissable-layer.js';
6
+ import { focusTrap } from '../../utils/focus-trap.js';
7
+ import { lockScroll } from '../../utils/scroll-lock.js';
8
+ import { createIds } from '../../utils/id.js';
9
+ import type { DialogProps } from './Dialog.types.js';
10
+
11
+ let {
12
+ classes,
13
+ open = $bindable(false),
14
+ portalTarget,
15
+ labels,
16
+ trigger,
17
+ title,
18
+ description,
19
+ children,
20
+ ...restProps
21
+ }: DialogProps = $props();
22
+
23
+ const baseId = $props.id();
24
+ const ids = createIds(baseId, 'title', 'description', 'content');
25
+
26
+ let triggerEl = $state<HTMLButtonElement | null>(null);
27
+ let contentEl = $state<HTMLDivElement | null>(null);
28
+ const presence = createPresence(
29
+ () => open,
30
+ () => contentEl
31
+ );
32
+
33
+ // Captured with `$effect.pre` — which runs before the DOM patch that mounts
34
+ // the content — so this reads whatever had focus right before opening,
35
+ // rather than the content's own first focusable element that `focusTrap`
36
+ // moves focus to a moment later in the same update.
37
+ let restoreFocusEl: HTMLElement | null = null;
38
+ $effect.pre(() => {
39
+ if (open) restoreFocusEl = document.activeElement as HTMLElement | null;
40
+ });
41
+
42
+ function close() {
43
+ open = false;
44
+ }
45
+
46
+ $effect(() => {
47
+ if (!open) return;
48
+
49
+ const unlockScroll = lockScroll();
50
+ const destroyLayer = createDismissableLayer(() => [triggerEl, contentEl], {
51
+ onPointerDownOutside: close,
52
+ onEscapeKeydown: (event) => {
53
+ event.preventDefault();
54
+ close();
55
+ }
56
+ });
57
+
58
+ return () => {
59
+ unlockScroll();
60
+ destroyLayer();
61
+ restoreFocusEl?.focus({ preventScroll: true });
62
+ };
63
+ });
64
+
65
+ const triggerProps = $derived({
66
+ ...restProps,
67
+ type: 'button' as const,
68
+ 'aria-haspopup': 'dialog' as const,
69
+ 'aria-expanded': open,
70
+ 'aria-controls': ids.content,
71
+ 'data-state': open ? 'open' : 'closed',
72
+ class: cn(
73
+ 'inline-flex h-10 cursor-pointer items-center justify-center gap-tight rounded-md border border-border px-control-x text-sm leading-snug font-medium text-foreground-soft transition-colors duration-150 hover:bg-surface-subtle focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50',
74
+ classes?.trigger
75
+ ),
76
+ onclick: () => (open = !open)
77
+ });
78
+ </script>
79
+
80
+ <button bind:this={triggerEl} {...triggerProps}>
81
+ {@render trigger()}
82
+ </button>
83
+
84
+ {#if presence.current}
85
+ <!--
86
+ `data-slot` is what index.css hangs the default enter/exit animation on —
87
+ a `components`-layer rule, so any `animate-*` utility a consumer passes
88
+ through `classes` overrides it. See the block in index.css for why the
89
+ default isn't a utility class here.
90
+ -->
91
+ <div
92
+ aria-hidden="true"
93
+ data-slot="dialog-overlay"
94
+ data-state={open ? 'open' : 'closed'}
95
+ use:portal={{ target: portalTarget }}
96
+ class={cn('fixed inset-0 z-50 bg-foreground/40', classes?.overlay)}
97
+ ></div>
98
+ <!--
99
+ Centering lives on this wrapper, not on the content itself, so the
100
+ content's `transform` (and `translate`) stay free for a consumer's enter/
101
+ exit animation — the same principle Popover follows by positioning via
102
+ `left`/`top`. Centering the content with `-translate-x-1/2` instead would
103
+ silently break every consumer animation: Tailwind v4 compiles that to the
104
+ standalone `translate` property, which composes *on top of* any
105
+ `transform`, so a keyframe re-stating `translate(-50%, -50%)` doubles the
106
+ offset and the dialog flies in from off-centre.
107
+ -->
108
+ <!--
109
+ `focusTrap` sits here rather than on the content, and *after* `portal`:
110
+ actions on a child run before the parent is attached, so focusing the
111
+ content from its own action would fire while this subtree is still
112
+ detached from the document — where `focus()` silently does nothing. The
113
+ trap's scope is unchanged either way; the content is this wrapper's only
114
+ child.
115
+ -->
116
+ <div
117
+ use:portal={{ target: portalTarget }}
118
+ use:focusTrap={{ enabled: open }}
119
+ class="pointer-events-none fixed inset-0 z-50 flex items-center justify-center p-4"
120
+ >
121
+ <div
122
+ bind:this={contentEl}
123
+ id={ids.content}
124
+ role="dialog"
125
+ data-slot="dialog-content"
126
+ aria-modal="true"
127
+ aria-labelledby={ids.title}
128
+ aria-describedby={description ? ids.description : undefined}
129
+ data-state={open ? 'open' : 'closed'}
130
+ tabindex="-1"
131
+ inert={!open}
132
+ class={cn(
133
+ 'pointer-events-auto relative w-full max-w-md rounded-lg border border-border bg-surface p-surface shadow-sm focus-visible:outline-none',
134
+ classes?.content
135
+ )}
136
+ >
137
+ <h2
138
+ id={ids.title}
139
+ class={cn('pr-8 text-lg leading-tight font-medium text-foreground', classes?.title)}
140
+ >
141
+ {@render title()}
142
+ </h2>
143
+ {#if description}
144
+ <p
145
+ id={ids.description}
146
+ class={cn('mt-1 text-sm leading-snug text-foreground-subtle', classes?.description)}
147
+ >
148
+ {@render description()}
149
+ </p>
150
+ {/if}
151
+ <div class="mt-4">
152
+ {@render children()}
153
+ </div>
154
+ <button
155
+ type="button"
156
+ onclick={close}
157
+ aria-label={labels?.close ?? 'Close'}
158
+ class={cn(
159
+ 'absolute top-4 right-4 inline-flex size-8 cursor-pointer items-center justify-center rounded-md text-foreground-faint transition-colors duration-150 hover:bg-surface-subtle hover:text-foreground-soft focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none',
160
+ classes?.close
161
+ )}
162
+ >
163
+ <svg
164
+ viewBox="0 0 24 24"
165
+ fill="none"
166
+ stroke="currentColor"
167
+ stroke-width="2"
168
+ stroke-linecap="round"
169
+ stroke-linejoin="round"
170
+ aria-hidden="true"
171
+ class="size-4"
172
+ >
173
+ <path d="M18 6 6 18" />
174
+ <path d="m6 6 12 12" />
175
+ </svg>
176
+ </button>
177
+ </div>
178
+ </div>
179
+ {/if}
@@ -0,0 +1,4 @@
1
+ import type { DialogProps } from './Dialog.types.js';
2
+ declare const Dialog: import("svelte").Component<DialogProps, {}, "open">;
3
+ type Dialog = ReturnType<typeof Dialog>;
4
+ export default Dialog;
@@ -0,0 +1,21 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLButtonAttributes } from 'svelte/elements';
3
+ export interface DialogProps extends Omit<HTMLButtonAttributes, 'children' | 'class' | 'title'> {
4
+ classes?: {
5
+ trigger?: string;
6
+ overlay?: string;
7
+ content?: string;
8
+ title?: string;
9
+ description?: string;
10
+ close?: string;
11
+ };
12
+ open?: boolean;
13
+ portalTarget?: HTMLElement | string;
14
+ labels?: {
15
+ close?: string;
16
+ };
17
+ trigger: Snippet;
18
+ title: Snippet;
19
+ description?: Snippet;
20
+ children: Snippet;
21
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export { default as Dialog } from './Dialog.svelte';
2
+ export type { DialogProps } from './Dialog.types.js';
@@ -0,0 +1 @@
1
+ export { default as Dialog } from './Dialog.svelte';