@poodle64/ui 2026.8.7

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 (387) hide show
  1. package/README.md +624 -0
  2. package/dist/components/ui/alert/alert-description.svelte +23 -0
  3. package/dist/components/ui/alert/alert-description.svelte.d.ts +9 -0
  4. package/dist/components/ui/alert/alert-title.svelte +23 -0
  5. package/dist/components/ui/alert/alert-title.svelte.d.ts +9 -0
  6. package/dist/components/ui/alert/alert.svelte +46 -0
  7. package/dist/components/ui/alert/alert.svelte.d.ts +28 -0
  8. package/dist/components/ui/alert/index.d.ts +4 -0
  9. package/dist/components/ui/alert/index.js +4 -0
  10. package/dist/components/ui/alert-dialog/alert-dialog-action.svelte +27 -0
  11. package/dist/components/ui/alert-dialog/alert-dialog-action.svelte.d.ts +9 -0
  12. package/dist/components/ui/alert-dialog/alert-dialog-cancel.svelte +27 -0
  13. package/dist/components/ui/alert-dialog/alert-dialog-cancel.svelte.d.ts +9 -0
  14. package/dist/components/ui/alert-dialog/alert-dialog-content.svelte +39 -0
  15. package/dist/components/ui/alert-dialog/alert-dialog-content.svelte.d.ts +11 -0
  16. package/dist/components/ui/alert-dialog/alert-dialog-description.svelte +20 -0
  17. package/dist/components/ui/alert-dialog/alert-dialog-description.svelte.d.ts +4 -0
  18. package/dist/components/ui/alert-dialog/alert-dialog-footer.svelte +23 -0
  19. package/dist/components/ui/alert-dialog/alert-dialog-footer.svelte.d.ts +5 -0
  20. package/dist/components/ui/alert-dialog/alert-dialog-header.svelte +23 -0
  21. package/dist/components/ui/alert-dialog/alert-dialog-header.svelte.d.ts +5 -0
  22. package/dist/components/ui/alert-dialog/alert-dialog-media.svelte +23 -0
  23. package/dist/components/ui/alert-dialog/alert-dialog-media.svelte.d.ts +5 -0
  24. package/dist/components/ui/alert-dialog/alert-dialog-overlay.svelte +20 -0
  25. package/dist/components/ui/alert-dialog/alert-dialog-overlay.svelte.d.ts +4 -0
  26. package/dist/components/ui/alert-dialog/alert-dialog-portal.svelte +7 -0
  27. package/dist/components/ui/alert-dialog/alert-dialog-portal.svelte.d.ts +3 -0
  28. package/dist/components/ui/alert-dialog/alert-dialog-title.svelte +20 -0
  29. package/dist/components/ui/alert-dialog/alert-dialog-title.svelte.d.ts +4 -0
  30. package/dist/components/ui/alert-dialog/alert-dialog-trigger.svelte +7 -0
  31. package/dist/components/ui/alert-dialog/alert-dialog-trigger.svelte.d.ts +4 -0
  32. package/dist/components/ui/alert-dialog/alert-dialog.svelte +7 -0
  33. package/dist/components/ui/alert-dialog/alert-dialog.svelte.d.ts +3 -0
  34. package/dist/components/ui/alert-dialog/index.d.ts +13 -0
  35. package/dist/components/ui/alert-dialog/index.js +15 -0
  36. package/dist/components/ui/app-dialog/app-dialog.svelte +111 -0
  37. package/dist/components/ui/app-dialog/app-dialog.svelte.d.ts +41 -0
  38. package/dist/components/ui/app-dialog/index.d.ts +2 -0
  39. package/dist/components/ui/app-dialog/index.js +2 -0
  40. package/dist/components/ui/app-shell/app-nav.svelte +299 -0
  41. package/dist/components/ui/app-shell/app-nav.svelte.d.ts +22 -0
  42. package/dist/components/ui/app-shell/app-shell.svelte +675 -0
  43. package/dist/components/ui/app-shell/app-shell.svelte.d.ts +157 -0
  44. package/dist/components/ui/app-shell/index.d.ts +6 -0
  45. package/dist/components/ui/app-shell/index.js +6 -0
  46. package/dist/components/ui/app-shell/measure.d.ts +28 -0
  47. package/dist/components/ui/app-shell/measure.js +21 -0
  48. package/dist/components/ui/app-shell/texture.d.ts +32 -0
  49. package/dist/components/ui/app-shell/texture.js +27 -0
  50. package/dist/components/ui/app-shell/types.d.ts +134 -0
  51. package/dist/components/ui/app-shell/types.js +88 -0
  52. package/dist/components/ui/arc-gauge/arc-gauge.svelte +112 -0
  53. package/dist/components/ui/arc-gauge/arc-gauge.svelte.d.ts +15 -0
  54. package/dist/components/ui/arc-gauge/index.d.ts +3 -0
  55. package/dist/components/ui/arc-gauge/index.js +2 -0
  56. package/dist/components/ui/avatar/avatar-fallback.svelte +26 -0
  57. package/dist/components/ui/avatar/avatar-fallback.svelte.d.ts +4 -0
  58. package/dist/components/ui/avatar/avatar-image.svelte +17 -0
  59. package/dist/components/ui/avatar/avatar-image.svelte.d.ts +4 -0
  60. package/dist/components/ui/avatar/avatar.svelte +31 -0
  61. package/dist/components/ui/avatar/avatar.svelte.d.ts +4 -0
  62. package/dist/components/ui/avatar/index.d.ts +4 -0
  63. package/dist/components/ui/avatar/index.js +6 -0
  64. package/dist/components/ui/badge/badge.svelte +50 -0
  65. package/dist/components/ui/badge/badge.svelte.d.ts +38 -0
  66. package/dist/components/ui/badge/index.d.ts +2 -0
  67. package/dist/components/ui/badge/index.js +2 -0
  68. package/dist/components/ui/bar-row/bar-row.svelte +42 -0
  69. package/dist/components/ui/bar-row/bar-row.svelte.d.ts +12 -0
  70. package/dist/components/ui/bar-row/index.d.ts +2 -0
  71. package/dist/components/ui/bar-row/index.js +2 -0
  72. package/dist/components/ui/button/button.svelte +89 -0
  73. package/dist/components/ui/button/button.svelte.d.ts +70 -0
  74. package/dist/components/ui/button/index.d.ts +2 -0
  75. package/dist/components/ui/button/index.js +4 -0
  76. package/dist/components/ui/card/card-action.svelte +23 -0
  77. package/dist/components/ui/card/card-action.svelte.d.ts +5 -0
  78. package/dist/components/ui/card/card-content.svelte +20 -0
  79. package/dist/components/ui/card/card-content.svelte.d.ts +5 -0
  80. package/dist/components/ui/card/card-description.svelte +20 -0
  81. package/dist/components/ui/card/card-description.svelte.d.ts +5 -0
  82. package/dist/components/ui/card/card-footer.svelte +23 -0
  83. package/dist/components/ui/card/card-footer.svelte.d.ts +5 -0
  84. package/dist/components/ui/card/card-header.svelte +23 -0
  85. package/dist/components/ui/card/card-header.svelte.d.ts +5 -0
  86. package/dist/components/ui/card/card-title.svelte +52 -0
  87. package/dist/components/ui/card/card-title.svelte.d.ts +8 -0
  88. package/dist/components/ui/card/card.svelte +25 -0
  89. package/dist/components/ui/card/card.svelte.d.ts +8 -0
  90. package/dist/components/ui/card/index.d.ts +8 -0
  91. package/dist/components/ui/card/index.js +10 -0
  92. package/dist/components/ui/checkbox/checkbox.svelte +36 -0
  93. package/dist/components/ui/checkbox/checkbox.svelte.d.ts +8 -0
  94. package/dist/components/ui/checkbox/index.d.ts +2 -0
  95. package/dist/components/ui/checkbox/index.js +2 -0
  96. package/dist/components/ui/command/command-dialog.svelte +42 -0
  97. package/dist/components/ui/command/command-dialog.svelte.d.ts +14 -0
  98. package/dist/components/ui/command/command-empty.svelte +17 -0
  99. package/dist/components/ui/command/command-empty.svelte.d.ts +4 -0
  100. package/dist/components/ui/command/command-group.svelte +33 -0
  101. package/dist/components/ui/command/command-group.svelte.d.ts +7 -0
  102. package/dist/components/ui/command/command-input.svelte +36 -0
  103. package/dist/components/ui/command/command-input.svelte.d.ts +4 -0
  104. package/dist/components/ui/command/command-item.svelte +27 -0
  105. package/dist/components/ui/command/command-item.svelte.d.ts +4 -0
  106. package/dist/components/ui/command/command-link-item.svelte +20 -0
  107. package/dist/components/ui/command/command-link-item.svelte.d.ts +4 -0
  108. package/dist/components/ui/command/command-list.svelte +20 -0
  109. package/dist/components/ui/command/command-list.svelte.d.ts +4 -0
  110. package/dist/components/ui/command/command-loading.svelte +7 -0
  111. package/dist/components/ui/command/command-loading.svelte.d.ts +4 -0
  112. package/dist/components/ui/command/command-separator.svelte +17 -0
  113. package/dist/components/ui/command/command-separator.svelte.d.ts +4 -0
  114. package/dist/components/ui/command/command-shortcut.svelte +23 -0
  115. package/dist/components/ui/command/command-shortcut.svelte.d.ts +5 -0
  116. package/dist/components/ui/command/command.svelte +28 -0
  117. package/dist/components/ui/command/command.svelte.d.ts +8 -0
  118. package/dist/components/ui/command/index.d.ts +12 -0
  119. package/dist/components/ui/command/index.js +14 -0
  120. package/dist/components/ui/command-palette/command-palette.svelte +94 -0
  121. package/dist/components/ui/command-palette/command-palette.svelte.d.ts +40 -0
  122. package/dist/components/ui/command-palette/index.d.ts +3 -0
  123. package/dist/components/ui/command-palette/index.js +2 -0
  124. package/dist/components/ui/context-column/context-column.svelte +56 -0
  125. package/dist/components/ui/context-column/context-column.svelte.d.ts +14 -0
  126. package/dist/components/ui/context-column/index.d.ts +2 -0
  127. package/dist/components/ui/context-column/index.js +2 -0
  128. package/dist/components/ui/data-table/data-table.svelte.d.ts +40 -0
  129. package/dist/components/ui/data-table/data-table.svelte.js +110 -0
  130. package/dist/components/ui/data-table/flex-render.svelte +40 -0
  131. package/dist/components/ui/data-table/flex-render.svelte.d.ts +33 -0
  132. package/dist/components/ui/data-table/index.d.ts +3 -0
  133. package/dist/components/ui/data-table/index.js +3 -0
  134. package/dist/components/ui/data-table/render-helpers.d.ts +90 -0
  135. package/dist/components/ui/data-table/render-helpers.js +99 -0
  136. package/dist/components/ui/data-table-tanstack/data-table-tanstack.svelte +247 -0
  137. package/dist/components/ui/data-table-tanstack/data-table-tanstack.svelte.d.ts +79 -0
  138. package/dist/components/ui/data-table-tanstack/index.d.ts +3 -0
  139. package/dist/components/ui/data-table-tanstack/index.js +2 -0
  140. package/dist/components/ui/data-table-toolbar/data-table-toolbar.svelte +102 -0
  141. package/dist/components/ui/data-table-toolbar/data-table-toolbar.svelte.d.ts +32 -0
  142. package/dist/components/ui/data-table-toolbar/index.d.ts +3 -0
  143. package/dist/components/ui/data-table-toolbar/index.js +2 -0
  144. package/dist/components/ui/detail-panel/detail-panel.svelte +95 -0
  145. package/dist/components/ui/detail-panel/detail-panel.svelte.d.ts +26 -0
  146. package/dist/components/ui/detail-panel/index.d.ts +2 -0
  147. package/dist/components/ui/detail-panel/index.js +2 -0
  148. package/dist/components/ui/dialog/dialog-close.svelte +11 -0
  149. package/dist/components/ui/dialog/dialog-close.svelte.d.ts +4 -0
  150. package/dist/components/ui/dialog/dialog-content.svelte +48 -0
  151. package/dist/components/ui/dialog/dialog-content.svelte.d.ts +13 -0
  152. package/dist/components/ui/dialog/dialog-description.svelte +20 -0
  153. package/dist/components/ui/dialog/dialog-description.svelte.d.ts +4 -0
  154. package/dist/components/ui/dialog/dialog-footer.svelte +35 -0
  155. package/dist/components/ui/dialog/dialog-footer.svelte.d.ts +8 -0
  156. package/dist/components/ui/dialog/dialog-header.svelte +20 -0
  157. package/dist/components/ui/dialog/dialog-header.svelte.d.ts +5 -0
  158. package/dist/components/ui/dialog/dialog-overlay.svelte +20 -0
  159. package/dist/components/ui/dialog/dialog-overlay.svelte.d.ts +4 -0
  160. package/dist/components/ui/dialog/dialog-portal.svelte +7 -0
  161. package/dist/components/ui/dialog/dialog-portal.svelte.d.ts +3 -0
  162. package/dist/components/ui/dialog/dialog-title.svelte +17 -0
  163. package/dist/components/ui/dialog/dialog-title.svelte.d.ts +4 -0
  164. package/dist/components/ui/dialog/dialog-trigger.svelte +11 -0
  165. package/dist/components/ui/dialog/dialog-trigger.svelte.d.ts +4 -0
  166. package/dist/components/ui/dialog/dialog.svelte +7 -0
  167. package/dist/components/ui/dialog/dialog.svelte.d.ts +3 -0
  168. package/dist/components/ui/dialog/index.d.ts +11 -0
  169. package/dist/components/ui/dialog/index.js +13 -0
  170. package/dist/components/ui/dialog-section/dialog-section.svelte +20 -0
  171. package/dist/components/ui/dialog-section/dialog-section.svelte.d.ts +8 -0
  172. package/dist/components/ui/dialog-section/index.d.ts +2 -0
  173. package/dist/components/ui/dialog-section/index.js +2 -0
  174. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte +16 -0
  175. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte.d.ts +4 -0
  176. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +44 -0
  177. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts +9 -0
  178. package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte +31 -0
  179. package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte.d.ts +10 -0
  180. package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +22 -0
  181. package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte.d.ts +8 -0
  182. package/dist/components/ui/dropdown-menu/dropdown-menu-group.svelte +7 -0
  183. package/dist/components/ui/dropdown-menu/dropdown-menu-group.svelte.d.ts +4 -0
  184. package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte +27 -0
  185. package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte.d.ts +8 -0
  186. package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte +27 -0
  187. package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte.d.ts +8 -0
  188. package/dist/components/ui/dropdown-menu/dropdown-menu-portal.svelte +7 -0
  189. package/dist/components/ui/dropdown-menu/dropdown-menu-portal.svelte.d.ts +3 -0
  190. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte +16 -0
  191. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte.d.ts +4 -0
  192. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +34 -0
  193. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte.d.ts +4 -0
  194. package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte +17 -0
  195. package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte.d.ts +4 -0
  196. package/dist/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte +23 -0
  197. package/dist/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte.d.ts +5 -0
  198. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +20 -0
  199. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte.d.ts +4 -0
  200. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +29 -0
  201. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte.d.ts +7 -0
  202. package/dist/components/ui/dropdown-menu/dropdown-menu-sub.svelte +7 -0
  203. package/dist/components/ui/dropdown-menu/dropdown-menu-sub.svelte.d.ts +3 -0
  204. package/dist/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +7 -0
  205. package/dist/components/ui/dropdown-menu/dropdown-menu-trigger.svelte.d.ts +4 -0
  206. package/dist/components/ui/dropdown-menu/dropdown-menu.svelte +7 -0
  207. package/dist/components/ui/dropdown-menu/dropdown-menu.svelte.d.ts +3 -0
  208. package/dist/components/ui/dropdown-menu/index.d.ts +18 -0
  209. package/dist/components/ui/dropdown-menu/index.js +18 -0
  210. package/dist/components/ui/empty-state/empty-state.svelte +44 -0
  211. package/dist/components/ui/empty-state/empty-state.svelte.d.ts +14 -0
  212. package/dist/components/ui/empty-state/index.d.ts +2 -0
  213. package/dist/components/ui/empty-state/index.js +2 -0
  214. package/dist/components/ui/error-state/error-state.svelte +52 -0
  215. package/dist/components/ui/error-state/error-state.svelte.d.ts +10 -0
  216. package/dist/components/ui/error-state/index.d.ts +2 -0
  217. package/dist/components/ui/error-state/index.js +2 -0
  218. package/dist/components/ui/info-tip/index.d.ts +2 -0
  219. package/dist/components/ui/info-tip/index.js +2 -0
  220. package/dist/components/ui/info-tip/info-tip.svelte +37 -0
  221. package/dist/components/ui/info-tip/info-tip.svelte.d.ts +10 -0
  222. package/dist/components/ui/input/index.d.ts +2 -0
  223. package/dist/components/ui/input/index.js +4 -0
  224. package/dist/components/ui/input/input.svelte +48 -0
  225. package/dist/components/ui/input/input.svelte.d.ts +13 -0
  226. package/dist/components/ui/input-group/index.d.ts +7 -0
  227. package/dist/components/ui/input-group/index.js +9 -0
  228. package/dist/components/ui/input-group/input-group-addon.svelte +53 -0
  229. package/dist/components/ui/input-group/input-group-addon.svelte.d.ts +32 -0
  230. package/dist/components/ui/input-group/input-group-button.svelte +49 -0
  231. package/dist/components/ui/input-group/input-group-button.svelte.d.ts +32 -0
  232. package/dist/components/ui/input-group/input-group-input.svelte +23 -0
  233. package/dist/components/ui/input-group/input-group-input.svelte.d.ts +11 -0
  234. package/dist/components/ui/input-group/input-group-text.svelte +22 -0
  235. package/dist/components/ui/input-group/input-group-text.svelte.d.ts +5 -0
  236. package/dist/components/ui/input-group/input-group-textarea.svelte +23 -0
  237. package/dist/components/ui/input-group/input-group-textarea.svelte.d.ts +3 -0
  238. package/dist/components/ui/input-group/input-group.svelte +24 -0
  239. package/dist/components/ui/input-group/input-group.svelte.d.ts +5 -0
  240. package/dist/components/ui/label/index.d.ts +2 -0
  241. package/dist/components/ui/label/index.js +4 -0
  242. package/dist/components/ui/label/label.svelte +20 -0
  243. package/dist/components/ui/label/label.svelte.d.ts +4 -0
  244. package/dist/components/ui/loading-state/index.d.ts +2 -0
  245. package/dist/components/ui/loading-state/index.js +2 -0
  246. package/dist/components/ui/loading-state/loading-state.svelte +28 -0
  247. package/dist/components/ui/loading-state/loading-state.svelte.d.ts +8 -0
  248. package/dist/components/ui/page-header/index.d.ts +2 -0
  249. package/dist/components/ui/page-header/index.js +2 -0
  250. package/dist/components/ui/page-header/page-header.svelte +100 -0
  251. package/dist/components/ui/page-header/page-header.svelte.d.ts +17 -0
  252. package/dist/components/ui/panel/index.d.ts +2 -0
  253. package/dist/components/ui/panel/index.js +2 -0
  254. package/dist/components/ui/panel/panel.svelte +54 -0
  255. package/dist/components/ui/panel/panel.svelte.d.ts +16 -0
  256. package/dist/components/ui/password-input/index.d.ts +2 -0
  257. package/dist/components/ui/password-input/index.js +4 -0
  258. package/dist/components/ui/password-input/password-input.svelte +48 -0
  259. package/dist/components/ui/password-input/password-input.svelte.d.ts +8 -0
  260. package/dist/components/ui/popover/index.d.ts +4 -0
  261. package/dist/components/ui/popover/index.js +6 -0
  262. package/dist/components/ui/popover/popover-content.svelte +45 -0
  263. package/dist/components/ui/popover/popover-content.svelte.d.ts +7 -0
  264. package/dist/components/ui/popover/popover-trigger.svelte +7 -0
  265. package/dist/components/ui/popover/popover-trigger.svelte.d.ts +4 -0
  266. package/dist/components/ui/popover/popover.svelte +7 -0
  267. package/dist/components/ui/popover/popover.svelte.d.ts +3 -0
  268. package/dist/components/ui/progress/index.d.ts +2 -0
  269. package/dist/components/ui/progress/index.js +4 -0
  270. package/dist/components/ui/progress/progress.svelte +30 -0
  271. package/dist/components/ui/progress/progress.svelte.d.ts +4 -0
  272. package/dist/components/ui/scorecard/index.d.ts +2 -0
  273. package/dist/components/ui/scorecard/index.js +2 -0
  274. package/dist/components/ui/scorecard/scorecard.svelte +35 -0
  275. package/dist/components/ui/scorecard/scorecard.svelte.d.ts +8 -0
  276. package/dist/components/ui/select/index.d.ts +12 -0
  277. package/dist/components/ui/select/index.js +14 -0
  278. package/dist/components/ui/select/select-content.svelte +45 -0
  279. package/dist/components/ui/select/select-content.svelte.d.ts +11 -0
  280. package/dist/components/ui/select/select-group-heading.svelte +21 -0
  281. package/dist/components/ui/select/select-group-heading.svelte.d.ts +10 -0
  282. package/dist/components/ui/select/select-group.svelte +17 -0
  283. package/dist/components/ui/select/select-group.svelte.d.ts +4 -0
  284. package/dist/components/ui/select/select-item.svelte +38 -0
  285. package/dist/components/ui/select/select-item.svelte.d.ts +4 -0
  286. package/dist/components/ui/select/select-label.svelte +20 -0
  287. package/dist/components/ui/select/select-label.svelte.d.ts +6 -0
  288. package/dist/components/ui/select/select-portal.svelte +7 -0
  289. package/dist/components/ui/select/select-portal.svelte.d.ts +3 -0
  290. package/dist/components/ui/select/select-scroll-down-button.svelte +23 -0
  291. package/dist/components/ui/select/select-scroll-down-button.svelte.d.ts +4 -0
  292. package/dist/components/ui/select/select-scroll-up-button.svelte +23 -0
  293. package/dist/components/ui/select/select-scroll-up-button.svelte.d.ts +4 -0
  294. package/dist/components/ui/select/select-separator.svelte +18 -0
  295. package/dist/components/ui/select/select-separator.svelte.d.ts +4 -0
  296. package/dist/components/ui/select/select-trigger.svelte +29 -0
  297. package/dist/components/ui/select/select-trigger.svelte.d.ts +8 -0
  298. package/dist/components/ui/select/select.svelte +11 -0
  299. package/dist/components/ui/select/select.svelte.d.ts +3 -0
  300. package/dist/components/ui/separator/index.d.ts +2 -0
  301. package/dist/components/ui/separator/index.js +4 -0
  302. package/dist/components/ui/separator/separator.svelte +23 -0
  303. package/dist/components/ui/separator/separator.svelte.d.ts +4 -0
  304. package/dist/components/ui/skeleton/index.d.ts +2 -0
  305. package/dist/components/ui/skeleton/index.js +4 -0
  306. package/dist/components/ui/skeleton/skeleton.svelte +17 -0
  307. package/dist/components/ui/skeleton/skeleton.svelte.d.ts +5 -0
  308. package/dist/components/ui/sonner/index.d.ts +1 -0
  309. package/dist/components/ui/sonner/index.js +1 -0
  310. package/dist/components/ui/sonner/sonner.svelte +34 -0
  311. package/dist/components/ui/sonner/sonner.svelte.d.ts +4 -0
  312. package/dist/components/ui/sparkline/index.d.ts +3 -0
  313. package/dist/components/ui/sparkline/index.js +2 -0
  314. package/dist/components/ui/sparkline/sparkline.svelte +90 -0
  315. package/dist/components/ui/sparkline/sparkline.svelte.d.ts +16 -0
  316. package/dist/components/ui/stat-card/index.d.ts +2 -0
  317. package/dist/components/ui/stat-card/index.js +2 -0
  318. package/dist/components/ui/stat-card/stat-card.svelte +77 -0
  319. package/dist/components/ui/stat-card/stat-card.svelte.d.ts +34 -0
  320. package/dist/components/ui/stat-list/index.d.ts +3 -0
  321. package/dist/components/ui/stat-list/index.js +2 -0
  322. package/dist/components/ui/stat-list/stat-list.svelte +80 -0
  323. package/dist/components/ui/stat-list/stat-list.svelte.d.ts +23 -0
  324. package/dist/components/ui/status/index.d.ts +1 -0
  325. package/dist/components/ui/status/index.js +1 -0
  326. package/dist/components/ui/status-badge/index.d.ts +3 -0
  327. package/dist/components/ui/status-badge/index.js +2 -0
  328. package/dist/components/ui/status-badge/status-badge.svelte +53 -0
  329. package/dist/components/ui/status-badge/status-badge.svelte.d.ts +39 -0
  330. package/dist/components/ui/switch/index.d.ts +2 -0
  331. package/dist/components/ui/switch/index.js +4 -0
  332. package/dist/components/ui/switch/switch.svelte +39 -0
  333. package/dist/components/ui/switch/switch.svelte.d.ts +4 -0
  334. package/dist/components/ui/table/index.d.ts +10 -0
  335. package/dist/components/ui/table/index.js +12 -0
  336. package/dist/components/ui/table/table-body.svelte +20 -0
  337. package/dist/components/ui/table/table-body.svelte.d.ts +5 -0
  338. package/dist/components/ui/table/table-caption.svelte +20 -0
  339. package/dist/components/ui/table/table-caption.svelte.d.ts +5 -0
  340. package/dist/components/ui/table/table-cell.svelte +20 -0
  341. package/dist/components/ui/table/table-cell.svelte.d.ts +5 -0
  342. package/dist/components/ui/table/table-classes.d.ts +15 -0
  343. package/dist/components/ui/table/table-classes.js +15 -0
  344. package/dist/components/ui/table/table-footer.svelte +20 -0
  345. package/dist/components/ui/table/table-footer.svelte.d.ts +5 -0
  346. package/dist/components/ui/table/table-head.svelte +23 -0
  347. package/dist/components/ui/table/table-head.svelte.d.ts +5 -0
  348. package/dist/components/ui/table/table-header.svelte +20 -0
  349. package/dist/components/ui/table/table-header.svelte.d.ts +5 -0
  350. package/dist/components/ui/table/table-row.svelte +23 -0
  351. package/dist/components/ui/table/table-row.svelte.d.ts +5 -0
  352. package/dist/components/ui/table/table.svelte +37 -0
  353. package/dist/components/ui/table/table.svelte.d.ts +20 -0
  354. package/dist/components/ui/tabs/index.d.ts +5 -0
  355. package/dist/components/ui/tabs/index.js +7 -0
  356. package/dist/components/ui/tabs/tabs-content.svelte +13 -0
  357. package/dist/components/ui/tabs/tabs-content.svelte.d.ts +4 -0
  358. package/dist/components/ui/tabs/tabs-list.svelte +16 -0
  359. package/dist/components/ui/tabs/tabs-list.svelte.d.ts +4 -0
  360. package/dist/components/ui/tabs/tabs-trigger.svelte +16 -0
  361. package/dist/components/ui/tabs/tabs-trigger.svelte.d.ts +4 -0
  362. package/dist/components/ui/tabs/tabs.svelte +19 -0
  363. package/dist/components/ui/tabs/tabs.svelte.d.ts +4 -0
  364. package/dist/components/ui/textarea/index.d.ts +2 -0
  365. package/dist/components/ui/textarea/index.js +4 -0
  366. package/dist/components/ui/textarea/textarea.svelte +22 -0
  367. package/dist/components/ui/textarea/textarea.svelte.d.ts +5 -0
  368. package/dist/components/ui/tile-grid/index.d.ts +2 -0
  369. package/dist/components/ui/tile-grid/index.js +2 -0
  370. package/dist/components/ui/tile-grid/tile-grid.svelte +66 -0
  371. package/dist/components/ui/tile-grid/tile-grid.svelte.d.ts +43 -0
  372. package/dist/components/ui/tooltip/index.d.ts +6 -0
  373. package/dist/components/ui/tooltip/index.js +8 -0
  374. package/dist/components/ui/tooltip/tooltip-content.svelte +52 -0
  375. package/dist/components/ui/tooltip/tooltip-content.svelte.d.ts +11 -0
  376. package/dist/components/ui/tooltip/tooltip-portal.svelte +7 -0
  377. package/dist/components/ui/tooltip/tooltip-portal.svelte.d.ts +4 -0
  378. package/dist/components/ui/tooltip/tooltip-provider.svelte +7 -0
  379. package/dist/components/ui/tooltip/tooltip-provider.svelte.d.ts +4 -0
  380. package/dist/components/ui/tooltip/tooltip-trigger.svelte +7 -0
  381. package/dist/components/ui/tooltip/tooltip-trigger.svelte.d.ts +4 -0
  382. package/dist/components/ui/tooltip/tooltip.svelte +7 -0
  383. package/dist/components/ui/tooltip/tooltip.svelte.d.ts +4 -0
  384. package/dist/styles.css +961 -0
  385. package/dist/utils.d.ts +12 -0
  386. package/dist/utils.js +5 -0
  387. package/package.json +81 -0
@@ -0,0 +1,41 @@
1
+ import type { Snippet, Component } from 'svelte';
2
+ type $$ComponentProps = {
3
+ open?: boolean;
4
+ /**
5
+ * Fired on every open-state change, including the ones the dialogue makes
6
+ * for itself — Escape, a click on the scrim, the close button — not only
7
+ * the ones the caller drives.
8
+ *
9
+ * `bind:open` alone cannot express that. A caller that has to reset a form,
10
+ * abort an in-flight request or clear a selection when its dialogue closes
11
+ * has nowhere to hang that work: the binding reports the new value but
12
+ * offers no moment to act on it, so the usual workaround is an `$effect`
13
+ * watching the bound variable, which also fires on the open leg. In the app
14
+ * that reported this, 12 of 28 dialogues close through a self-dismiss path,
15
+ * so it is the majority case rather than an edge.
16
+ *
17
+ * The two compose: bind for state, take this for the side effect.
18
+ */
19
+ onOpenChange?: (open: boolean) => void;
20
+ title: string;
21
+ subtitle?: string;
22
+ icon?: Component<{
23
+ class?: string;
24
+ }>;
25
+ /**
26
+ * The dialogue's measure. Named rather than free-form for the same reason
27
+ * AppShell's `content` is: a dialogue width is a design-system decision,
28
+ * and a `class` escape hatch would let every app pick its own again.
29
+ *
30
+ * `sm`/`md`/`lg` mean exactly what they always did; `xs` and `xl` extend the
31
+ * scale at its ends rather than renumbering it, so no existing call site
32
+ * changes width. Below the `sm:` breakpoint every size is full-bleed
33
+ * regardless — a phone has one width.
34
+ */
35
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
36
+ children: Snippet;
37
+ footer?: Snippet;
38
+ };
39
+ declare const AppDialog: Component<$$ComponentProps, {}, "open">;
40
+ type AppDialog = ReturnType<typeof AppDialog>;
41
+ export default AppDialog;
@@ -0,0 +1,2 @@
1
+ export { default as AppDialog } from './app-dialog.svelte';
2
+ export { default } from './app-dialog.svelte';
@@ -0,0 +1,2 @@
1
+ export { default as AppDialog } from './app-dialog.svelte';
2
+ export { default } from './app-dialog.svelte';
@@ -0,0 +1,299 @@
1
+ <script lang="ts">
2
+ /**
3
+ * The vertical navigation list.
4
+ *
5
+ * Rendered by AppShell in the rail/drawer (one element, two states — see
6
+ * app-shell.svelte) and exported in its own right so an app with a SECOND,
7
+ * route-scoped navigation column (a per-module sidebar) uses the same
8
+ * affordance rather than hand-building a near-copy.
9
+ * That was the concrete shape of the drift in the estate: one app's inner
10
+ * sidebar had reimplemented the active indicator, the group separators and
11
+ * the collapse behaviour independently of its own top bar.
12
+ *
13
+ * An item carrying `children` discloses them in place, beneath itself. That
14
+ * is the same drift arriving from the other direction: an app whose sections
15
+ * have their own navigation had nowhere to put it inside the rail, so it put
16
+ * its modules here and its per-section pages in AppShell's `sidebar` snippet,
17
+ * and shipped two left-hand columns. See `types.ts` on `children` for why the
18
+ * nested rail won over modules-on-the-top-bar, and why the depth cap is one.
19
+ */
20
+ import ChevronRight from '@lucide/svelte/icons/chevron-right';
21
+ import {
22
+ hasActiveNavChild,
23
+ isNavItemActive,
24
+ navChildren,
25
+ toGroups,
26
+ type NavChildItem,
27
+ type NavItem,
28
+ type NavSource
29
+ } from './types.js';
30
+ import { cn } from '../../../utils.js';
31
+
32
+ let {
33
+ nav,
34
+ currentPath,
35
+ collapsed = false,
36
+ label = 'Primary',
37
+ onNavigate,
38
+ firstLink = $bindable(null),
39
+ class: className
40
+ }: {
41
+ nav?: NavSource;
42
+ /** The active path. Apps pass `page.url.pathname`; see AppShell. */
43
+ currentPath?: string;
44
+ /** Icon-only mode. Labels stay in the accessible tree via sr-only text. */
45
+ collapsed?: boolean;
46
+ /** Accessible name for the landmark; distinguish a secondary column. */
47
+ label?: string;
48
+ /** Fired after any nav link activates — AppShell uses it to shut the drawer. */
49
+ onNavigate?: () => void;
50
+ /**
51
+ * The first rendered link, bound out. AppShell moves focus here when this
52
+ * list is the content of an overlay, so a keyboard user lands inside the
53
+ * thing that just opened rather than behind it.
54
+ */
55
+ firstLink?: HTMLElement | null;
56
+ class?: string;
57
+ } = $props();
58
+
59
+ const groups = $derived(toGroups(nav));
60
+
61
+ // Ids are real ids in the consumer's document, and this component renders
62
+ // more than once per page by design (the rail, plus any route-scoped second
63
+ // column). A literal would collide between the two and hand `aria-controls`
64
+ // a coin toss — the same reasoning AppShell applies to its own nav region id.
65
+ const navId = $props.id();
66
+
67
+ /**
68
+ * Disclosure state, and the two-part rule behind it.
69
+ *
70
+ * The DEFAULT is derived, never stored: a group is open when the current page
71
+ * is the parent or one of its children. That is what makes the rail show you
72
+ * where you are without an app having to seed anything, and it is correct on
73
+ * the server, on first paint, and after a palette jump or a back button —
74
+ * none of which are clicks, so none of which stored state would have seen.
75
+ *
76
+ * A deliberate toggle OVERRIDES that default for as long as the shell lives,
77
+ * which in a SvelteKit layout is the whole session: open a group you are not
78
+ * in and it stays open while you navigate; close the one you are in and it
79
+ * stays shut. Overriding rather than seeding is what keeps both halves true
80
+ * at once — an untouched group still follows the path, so walking into a new
81
+ * section opens it, while a group you made a decision about keeps it.
82
+ *
83
+ * Nothing is written to storage. A shared package writing to a fixed
84
+ * localStorage key collides with the app's own, and collides with itself the
85
+ * moment a page renders two navs — the same hazard as a literal element id.
86
+ * An app that wants disclosure to survive a reload owns that decision.
87
+ *
88
+ * Keyed by `href`, which is already this component's notion of identity — the
89
+ * `{#each}` below keys on it too, so two items sharing an href is a Svelte
90
+ * duplicate-key error before it is anything else. The consequence worth naming:
91
+ * an app that swaps its whole `nav` (a permission filter, a context switch)
92
+ * and reuses an href across variants carries the user's open/closed decision
93
+ * across that swap. That is deliberate, not an oversight — resetting on a
94
+ * changed `nav` would wipe the override every time a `$derived` nav recomputes,
95
+ * which in the apps that derive nav from a store is constantly, destroying the
96
+ * persistence this whole mechanism exists to provide. The href is the contract:
97
+ * same href, same section, same decision.
98
+ */
99
+ let overrides = $state<Record<string, boolean>>({});
100
+
101
+ function isOpen(item: NavItem): boolean {
102
+ return (
103
+ overrides[item.href] ??
104
+ (isNavItemActive(item, currentPath) || hasActiveNavChild(item, currentPath))
105
+ );
106
+ }
107
+
108
+ /** Every item that actually discloses something, by href. */
109
+ const branches = $derived(
110
+ new Map(
111
+ groups
112
+ .flatMap((group) => group.items)
113
+ .filter((item) => navChildren(item).length > 0)
114
+ .map((item) => [item.href, item] as const)
115
+ )
116
+ );
117
+
118
+ /**
119
+ * Escape closes the group focus is inside and returns focus to the control
120
+ * that opened it, rather than leaving the caret on a row that has just been
121
+ * hidden.
122
+ *
123
+ * Bound to the rows and the chevron rather than to the landmark, because a
124
+ * branch contains nothing else that can hold focus, and a keyboard listener
125
+ * on the non-interactive `<nav>` is a genuine a11y-lint finding rather than
126
+ * noise. Which branch it is comes from the event's own position, so one
127
+ * function serves every row, nested or flat.
128
+ *
129
+ * It is swallowed ONLY when it actually closed something, so Escape anywhere
130
+ * else still reaches AppShell's window handler and shuts the mobile drawer:
131
+ * the inner surface wins first, the outer one stays reachable.
132
+ */
133
+ function onNavKeydown(event: KeyboardEvent) {
134
+ if (event.key !== 'Escape') return;
135
+ const branch = (event.target as HTMLElement | null)?.closest?.('[data-branch]');
136
+ const item = branches.get(branch?.getAttribute('data-branch') ?? '');
137
+ if (!branch || !item || !isOpen(item)) return;
138
+ overrides[item.href] = false;
139
+ event.stopPropagation();
140
+ branch.querySelector<HTMLElement>('[data-ds-nav-disclosure]')?.focus();
141
+ }
142
+ </script>
143
+
144
+ <!--
145
+ The row. One snippet for both levels: a child that rendered through a second
146
+ near-copy is exactly the drift this component was extracted to end, one
147
+ nesting level down.
148
+ -->
149
+ {#snippet navLink(
150
+ item: NavItem | NavChildItem,
151
+ opts: { child?: boolean; first?: boolean; labelId?: string } = {}
152
+ )}
153
+ <!--
154
+ A declared child that IS the page WINS over its parent's prefix match, and
155
+ this ordering is the whole of that rule.
156
+
157
+ The obvious way round was wrong, and wrong in the commonest shape there is:
158
+ a parent at `/education` prefix-matches `/education/two`, so a parent whose
159
+ own child was the current page lit up as the current page too — two rows
160
+ carrying `aria-current="page"`, two tints, two edge bars. Fine while nav was
161
+ flat, because the child row did not exist to disagree with; incoherent the
162
+ moment it does, and an ARIA defect besides.
163
+
164
+ `within` is therefore computed FIRST and suppresses `active`. What the parent
165
+ keeps is the section-root behaviour that earned prefix matching in the first
166
+ place: on its own page, or on a page under it that no child row claims, it is
167
+ still the active row. A childless item never reaches this at all —
168
+ `hasActiveNavChild` is false for it — so the flat case is untouched.
169
+ -->
170
+ {@const within = hasActiveNavChild(item, currentPath)}
171
+ {@const active = !within && isNavItemActive(item, currentPath)}
172
+ <a
173
+ bind:this={
174
+ () => firstLink,
175
+ (node) => {
176
+ if (opts.first) firstLink = node;
177
+ }
178
+ }
179
+ id={opts.labelId}
180
+ href={item.href}
181
+ class="ds-nav-item"
182
+ data-active={active ? 'true' : undefined}
183
+ data-within={within ? 'true' : undefined}
184
+ data-child={opts.child ? 'true' : undefined}
185
+ aria-current={active ? 'page' : undefined}
186
+ title={collapsed ? item.label : undefined}
187
+ target={item.external ? '_blank' : undefined}
188
+ rel={item.external ? 'noreferrer noopener' : undefined}
189
+ onclick={onNavigate}
190
+ onkeydown={onNavKeydown}
191
+ >
192
+ {#if active}
193
+ <span class="ds-nav-indicator"></span>
194
+ {/if}
195
+ {#if item.icon}
196
+ <item.icon class="size-4.5 flex-none" />
197
+ {:else if collapsed}
198
+ <!-- Icon-less item, collapsed: an initial keeps the row clickable
199
+ and identifiable rather than rendering an empty target. -->
200
+ <span class="grid size-4.5 flex-none place-items-center text-xs font-semibold"
201
+ >{item.label.slice(0, 1).toUpperCase()}</span
202
+ >
203
+ {/if}
204
+ <span class={collapsed ? 'sr-only' : 'truncate'}>{item.label}</span>
205
+ {#if item.badge !== undefined && !collapsed}
206
+ <span class="ds-nav-badge">{item.badge}</span>
207
+ {/if}
208
+ </a>
209
+ {/snippet}
210
+
211
+ <nav
212
+ class={cn('ds-nav flex flex-1 flex-col gap-5 overflow-y-auto px-3 py-4', className)}
213
+ aria-label={label}
214
+ data-collapsed={collapsed ? 'true' : undefined}
215
+ >
216
+ {#each groups as group, i (group.heading ?? group.items[0]?.href ?? i)}
217
+ <div class="flex flex-col gap-1">
218
+ {#if group.heading && !collapsed}
219
+ <div class="ds-nav-heading">{group.heading}</div>
220
+ {:else if group.heading && collapsed && i > 0}
221
+ <!-- Collapsed, a heading cannot be read, so the grouping it conveyed
222
+ survives as a rule instead of vanishing. -->
223
+ <div class="border-border mx-1 mb-1 border-t" role="presentation"></div>
224
+ {/if}
225
+ {#each group.items as item, j (item.href)}
226
+ {@const first = i === 0 && j === 0}
227
+ <!--
228
+ The collapsed rail is 3.5rem of icons, and an indented tree does not
229
+ fit in it at any depth. Rather than invent a second interaction
230
+ surface for that state — a hover flyout, with its own positioning,
231
+ hover intent, touch story and focus management — a collapsed parent
232
+ renders as exactly the icon-only link it was before this feature
233
+ existed, and its children are not in the document at all.
234
+
235
+ Not merely hidden: sr-only rows a sighted user cannot reach and a
236
+ pointer user cannot click are a dead affordance, which this package
237
+ treats as worse than an absent one. The way back is the Collapse
238
+ control immediately below, which is where the user just was. The
239
+ drawer is never collapsed (see AppShell), so a phone always gets the
240
+ full tree.
241
+ -->
242
+ {@const children = collapsed ? [] : navChildren(item)}
243
+ {#if children.length > 0}
244
+ {@const open = isOpen(item)}
245
+ {@const panelId = `${navId}-${i}-${j}`}
246
+ <div class="ds-nav-branch" data-branch={item.href}>
247
+ <div class="ds-nav-row">
248
+ <!--
249
+ Two controls, because there are two actions and one of them is
250
+ navigation. The label goes to the parent's own page; the chevron
251
+ opens the section. Folding both into the link was the obvious
252
+ alternative and it cannot be made honest: `aria-expanded` on
253
+ something that navigates away announces a state the user never
254
+ gets to observe. Making the label expand-only instead was the
255
+ other, and it silently changes what `href` means the day an app
256
+ adds children to an item that already had one — precisely the
257
+ break this release is claiming not to have.
258
+ -->
259
+ {@render navLink(item, { first, labelId: `${panelId}-label` })}
260
+ <button
261
+ type="button"
262
+ class="ds-nav-disclosure"
263
+ data-ds-nav-disclosure
264
+ aria-expanded={open}
265
+ aria-controls={panelId}
266
+ aria-label={`${open ? 'Collapse' : 'Expand'} ${item.label}`}
267
+ onclick={() => (overrides[item.href] = !open)}
268
+ onkeydown={onNavKeydown}
269
+ >
270
+ <ChevronRight class="size-4" />
271
+ </button>
272
+ </div>
273
+ <!--
274
+ Rendered whether open or shut, hidden by the `hidden` attribute
275
+ rather than by an `{#if}`. `aria-controls` must resolve to a real
276
+ element to mean anything, and a reference that only exists while
277
+ the region is already open is a reference nobody needs. `hidden`
278
+ takes the rows out of the accessibility tree and out of the tab
279
+ order at the same time, so the closed state is genuinely closed.
280
+ -->
281
+ <div
282
+ class="ds-nav-children"
283
+ id={panelId}
284
+ hidden={!open}
285
+ role="group"
286
+ aria-labelledby={`${panelId}-label`}
287
+ >
288
+ {#each children as child (child.href)}
289
+ {@render navLink(child, { child: true })}
290
+ {/each}
291
+ </div>
292
+ </div>
293
+ {:else}
294
+ {@render navLink(item, { first })}
295
+ {/if}
296
+ {/each}
297
+ </div>
298
+ {/each}
299
+ </nav>
@@ -0,0 +1,22 @@
1
+ import { type NavSource } from './types.js';
2
+ type $$ComponentProps = {
3
+ nav?: NavSource;
4
+ /** The active path. Apps pass `page.url.pathname`; see AppShell. */
5
+ currentPath?: string;
6
+ /** Icon-only mode. Labels stay in the accessible tree via sr-only text. */
7
+ collapsed?: boolean;
8
+ /** Accessible name for the landmark; distinguish a secondary column. */
9
+ label?: string;
10
+ /** Fired after any nav link activates — AppShell uses it to shut the drawer. */
11
+ onNavigate?: () => void;
12
+ /**
13
+ * The first rendered link, bound out. AppShell moves focus here when this
14
+ * list is the content of an overlay, so a keyboard user lands inside the
15
+ * thing that just opened rather than behind it.
16
+ */
17
+ firstLink?: HTMLElement | null;
18
+ class?: string;
19
+ };
20
+ declare const AppNav: import("svelte").Component<$$ComponentProps, {}, "firstLink">;
21
+ type AppNav = ReturnType<typeof AppNav>;
22
+ export default AppNav;