@selvajs/ui 6.5.1-beta.1 → 6.6.0-beta.3

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 (348) hide show
  1. package/dist/components/ConfirmDialog.svelte +2 -10
  2. package/dist/components/ErrorScreen.svelte +16 -26
  3. package/dist/components/compute/AppLayout.svelte +7 -13
  4. package/dist/components/compute/ComputeApp.svelte +3 -3
  5. package/dist/components/compute/ComputeMessagesDialog.svelte +23 -49
  6. package/dist/components/compute/ParameterPresetManager.svelte +24 -68
  7. package/dist/components/compute/SolveMessages.svelte +23 -31
  8. package/dist/components/layout/Pagination.svelte +2 -4
  9. package/dist/components/layout/SideNav.svelte +1 -1
  10. package/dist/components/preview/ChartOutput.svelte +1 -5
  11. package/dist/components/preview/Group.svelte +71 -102
  12. package/dist/components/preview/Group.svelte.d.ts +1 -1
  13. package/dist/components/preview/HelpButton.svelte +34 -0
  14. package/dist/components/preview/HelpButton.svelte.d.ts +8 -0
  15. package/dist/components/preview/ImageOutput.svelte +2 -4
  16. package/dist/components/preview/InputControl.svelte +45 -45
  17. package/dist/components/preview/OutputDisplay.svelte +12 -22
  18. package/dist/components/preview/TabBar.svelte +106 -22
  19. package/dist/components/preview/TabBar.svelte.d.ts +1 -0
  20. package/dist/components/preview/TabContent.svelte +27 -56
  21. package/dist/components/preview/TabLayout.svelte +3 -3
  22. package/dist/components/preview/inputs/CheckboxInput.svelte +7 -7
  23. package/dist/components/preview/inputs/CheckboxInput.svelte.d.ts +3 -0
  24. package/dist/components/preview/inputs/ColorInput.svelte +1 -1
  25. package/dist/components/preview/inputs/FileInput.svelte +10 -13
  26. package/dist/components/preview/inputs/NumberInput.svelte +37 -57
  27. package/dist/components/preview/inputs/TextInput.svelte +0 -1
  28. package/dist/components/primitives/CalculateButton.svelte +1 -1
  29. package/dist/components/primitives/Callout.svelte +11 -18
  30. package/dist/components/primitives/DataTable.svelte +3 -4
  31. package/dist/components/primitives/FilterableDropdown.svelte +42 -129
  32. package/dist/components/primitives/FilterableDropdown.svelte.d.ts +1 -1
  33. package/dist/components/primitives/IssueList.svelte +56 -0
  34. package/dist/components/primitives/IssueList.svelte.d.ts +20 -0
  35. package/dist/components/primitives/SeverityIcon.svelte +15 -0
  36. package/dist/components/primitives/SeverityIcon.svelte.d.ts +8 -0
  37. package/dist/components/primitives/SolvingIndicator.svelte +1 -29
  38. package/dist/components/primitives/StateDisplay.svelte +19 -79
  39. package/dist/components/primitives/ViewToggle.svelte +18 -33
  40. package/dist/components/primitives/alert-dialog/alert-dialog-action.svelte +9 -3
  41. package/dist/components/primitives/alert-dialog/alert-dialog-action.svelte.d.ts +6 -1
  42. package/dist/components/primitives/alert-dialog/alert-dialog-content.svelte +1 -1
  43. package/dist/components/primitives/alert-dialog/alert-dialog-overlay.svelte +1 -1
  44. package/dist/components/primitives/badge/badge.svelte +2 -2
  45. package/dist/components/primitives/badge/badge.svelte.d.ts +4 -4
  46. package/dist/components/primitives/button/button.svelte +3 -2
  47. package/dist/components/primitives/button/button.svelte.d.ts +7 -4
  48. package/dist/components/primitives/card/card-header.svelte +1 -1
  49. package/dist/components/primitives/card/card.svelte +21 -5
  50. package/dist/components/primitives/card/card.svelte.d.ts +25 -1
  51. package/dist/components/primitives/card/index.d.ts +1 -2
  52. package/dist/components/primitives/card/index.js +2 -3
  53. package/dist/components/primitives/checkbox/checkbox.svelte +1 -1
  54. package/dist/components/primitives/command/command-dialog.svelte +42 -0
  55. package/dist/components/primitives/command/command-dialog.svelte.d.ts +14 -0
  56. package/dist/components/primitives/command/command-empty.svelte +17 -0
  57. package/dist/components/primitives/command/command-empty.svelte.d.ts +4 -0
  58. package/dist/components/primitives/command/command-group.svelte +33 -0
  59. package/dist/components/primitives/command/command-group.svelte.d.ts +7 -0
  60. package/dist/components/primitives/command/command-input.svelte +36 -0
  61. package/dist/components/primitives/command/command-input.svelte.d.ts +4 -0
  62. package/dist/components/primitives/command/command-item.svelte +28 -0
  63. package/dist/components/primitives/command/command-item.svelte.d.ts +4 -0
  64. package/dist/components/primitives/command/command-link-item.svelte +21 -0
  65. package/dist/components/primitives/command/command-link-item.svelte.d.ts +4 -0
  66. package/dist/components/primitives/command/command-list.svelte +20 -0
  67. package/dist/components/primitives/command/command-list.svelte.d.ts +4 -0
  68. package/dist/components/primitives/command/command-loading.svelte +7 -0
  69. package/dist/components/primitives/command/command-loading.svelte.d.ts +4 -0
  70. package/dist/components/primitives/command/command-separator.svelte +17 -0
  71. package/dist/components/primitives/command/command-separator.svelte.d.ts +4 -0
  72. package/dist/components/primitives/command/command-shortcut.svelte +23 -0
  73. package/dist/components/primitives/command/command-shortcut.svelte.d.ts +5 -0
  74. package/dist/components/primitives/command/command.svelte +28 -0
  75. package/dist/components/primitives/command/command.svelte.d.ts +8 -0
  76. package/dist/components/primitives/command/index.d.ts +12 -0
  77. package/dist/components/primitives/command/index.js +14 -0
  78. package/dist/components/primitives/context-menu/context-menu-content.svelte +1 -1
  79. package/dist/components/primitives/context-menu/context-menu-sub-content.svelte +1 -1
  80. package/dist/components/primitives/dialog/dialog-content.svelte +5 -1
  81. package/dist/components/primitives/dialog/dialog-content.svelte.d.ts +2 -0
  82. package/dist/components/primitives/dialog/dialog-overlay.svelte +1 -1
  83. package/dist/components/primitives/dialog/dialog-title.svelte +6 -2
  84. package/dist/components/primitives/dialog/dialog-title.svelte.d.ts +5 -1
  85. package/dist/components/primitives/drawer/Drawer.svelte +1 -1
  86. package/dist/components/primitives/dropdown-menu/dropdown-menu-checkbox-group.svelte +16 -0
  87. package/dist/components/primitives/dropdown-menu/dropdown-menu-checkbox-group.svelte.d.ts +4 -0
  88. package/dist/components/primitives/dropdown-menu/dropdown-menu-checkbox-item.svelte +46 -0
  89. package/dist/components/primitives/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts +9 -0
  90. package/dist/components/primitives/dropdown-menu/dropdown-menu-content.svelte +31 -0
  91. package/dist/components/primitives/dropdown-menu/dropdown-menu-content.svelte.d.ts +10 -0
  92. package/dist/components/primitives/dropdown-menu/dropdown-menu-group-heading.svelte +22 -0
  93. package/dist/components/primitives/dropdown-menu/dropdown-menu-group-heading.svelte.d.ts +8 -0
  94. package/dist/components/primitives/dropdown-menu/dropdown-menu-group.svelte +7 -0
  95. package/dist/components/primitives/dropdown-menu/dropdown-menu-group.svelte.d.ts +4 -0
  96. package/dist/components/primitives/dropdown-menu/dropdown-menu-item.svelte +27 -0
  97. package/dist/components/primitives/dropdown-menu/dropdown-menu-item.svelte.d.ts +8 -0
  98. package/dist/components/primitives/dropdown-menu/dropdown-menu-label.svelte +24 -0
  99. package/dist/components/primitives/dropdown-menu/dropdown-menu-label.svelte.d.ts +8 -0
  100. package/dist/components/primitives/dropdown-menu/dropdown-menu-portal.svelte +7 -0
  101. package/dist/components/primitives/dropdown-menu/dropdown-menu-portal.svelte.d.ts +3 -0
  102. package/dist/components/primitives/dropdown-menu/dropdown-menu-radio-group.svelte +16 -0
  103. package/dist/components/primitives/dropdown-menu/dropdown-menu-radio-group.svelte.d.ts +4 -0
  104. package/dist/components/primitives/dropdown-menu/dropdown-menu-radio-item.svelte +36 -0
  105. package/dist/components/primitives/dropdown-menu/dropdown-menu-radio-item.svelte.d.ts +4 -0
  106. package/dist/components/primitives/dropdown-menu/dropdown-menu-separator.svelte +17 -0
  107. package/dist/components/primitives/dropdown-menu/dropdown-menu-separator.svelte.d.ts +4 -0
  108. package/dist/components/primitives/dropdown-menu/dropdown-menu-shortcut.svelte +23 -0
  109. package/dist/components/primitives/dropdown-menu/dropdown-menu-shortcut.svelte.d.ts +5 -0
  110. package/dist/components/primitives/dropdown-menu/dropdown-menu-sub-content.svelte +31 -0
  111. package/dist/components/primitives/dropdown-menu/dropdown-menu-sub-content.svelte.d.ts +10 -0
  112. package/dist/components/primitives/dropdown-menu/dropdown-menu-sub-trigger.svelte +29 -0
  113. package/dist/components/primitives/dropdown-menu/dropdown-menu-sub-trigger.svelte.d.ts +7 -0
  114. package/dist/components/primitives/dropdown-menu/dropdown-menu-sub.svelte +7 -0
  115. package/dist/components/primitives/dropdown-menu/dropdown-menu-sub.svelte.d.ts +3 -0
  116. package/dist/components/primitives/dropdown-menu/dropdown-menu-trigger.svelte +7 -0
  117. package/dist/components/primitives/dropdown-menu/dropdown-menu-trigger.svelte.d.ts +4 -0
  118. package/dist/components/primitives/dropdown-menu/dropdown-menu.svelte +7 -0
  119. package/dist/components/primitives/dropdown-menu/dropdown-menu.svelte.d.ts +3 -0
  120. package/dist/components/primitives/dropdown-menu/index.d.ts +18 -0
  121. package/dist/components/primitives/dropdown-menu/index.js +18 -0
  122. package/dist/components/primitives/{alert/alert-description.svelte → empty/empty-content.svelte} +3 -3
  123. package/dist/components/primitives/empty/empty-content.svelte.d.ts +5 -0
  124. package/dist/components/primitives/empty/empty-description.svelte +23 -0
  125. package/dist/components/primitives/{alert/alert-description.svelte.d.ts → empty/empty-description.svelte.d.ts} +4 -4
  126. package/dist/components/primitives/{alert/alert-title.svelte → empty/empty-header.svelte} +3 -3
  127. package/dist/components/primitives/empty/empty-header.svelte.d.ts +5 -0
  128. package/dist/components/primitives/empty/empty-media.svelte +41 -0
  129. package/dist/components/primitives/empty/empty-media.svelte.d.ts +26 -0
  130. package/dist/components/primitives/{card/card-action.svelte → empty/empty-title.svelte} +2 -2
  131. package/dist/components/primitives/{card/card-action.svelte.d.ts → empty/empty-title.svelte.d.ts} +3 -3
  132. package/dist/components/primitives/empty/empty.svelte +23 -0
  133. package/dist/components/primitives/empty/empty.svelte.d.ts +5 -0
  134. package/dist/components/primitives/empty/index.d.ts +7 -0
  135. package/dist/components/primitives/empty/index.js +9 -0
  136. package/dist/components/primitives/index.d.ts +10 -1
  137. package/dist/components/primitives/index.js +10 -1
  138. package/dist/components/primitives/input/input.svelte +4 -4
  139. package/dist/components/primitives/input-group/index.d.ts +7 -0
  140. package/dist/components/primitives/input-group/index.js +9 -0
  141. package/dist/components/primitives/input-group/input-group-addon.svelte +53 -0
  142. package/dist/components/primitives/input-group/input-group-addon.svelte.d.ts +32 -0
  143. package/dist/components/primitives/input-group/input-group-button.svelte +49 -0
  144. package/dist/components/primitives/input-group/input-group-button.svelte.d.ts +32 -0
  145. package/dist/components/primitives/input-group/input-group-input.svelte +25 -0
  146. package/dist/components/primitives/input-group/input-group-input.svelte.d.ts +11 -0
  147. package/dist/components/primitives/input-group/input-group-text.svelte +22 -0
  148. package/dist/components/primitives/input-group/input-group-text.svelte.d.ts +5 -0
  149. package/dist/components/primitives/input-group/input-group-textarea.svelte +23 -0
  150. package/dist/components/primitives/input-group/input-group-textarea.svelte.d.ts +3 -0
  151. package/dist/components/primitives/input-group/input-group.svelte +24 -0
  152. package/dist/components/primitives/{alert/alert-title.svelte.d.ts → input-group/input-group.svelte.d.ts} +4 -4
  153. package/dist/components/primitives/mode-toggle/mode-toggle.svelte +2 -6
  154. package/dist/components/primitives/popover/index.d.ts +9 -0
  155. package/dist/components/primitives/popover/index.js +11 -0
  156. package/dist/components/primitives/popover/popover-close.svelte +7 -0
  157. package/dist/components/primitives/popover/popover-close.svelte.d.ts +4 -0
  158. package/dist/components/primitives/popover/popover-content.svelte +31 -0
  159. package/dist/components/primitives/popover/popover-content.svelte.d.ts +10 -0
  160. package/dist/components/primitives/popover/popover-description.svelte +20 -0
  161. package/dist/components/primitives/popover/popover-description.svelte.d.ts +5 -0
  162. package/dist/components/primitives/popover/popover-header.svelte +20 -0
  163. package/dist/components/primitives/popover/popover-header.svelte.d.ts +5 -0
  164. package/dist/components/primitives/popover/popover-portal.svelte +7 -0
  165. package/dist/components/primitives/popover/popover-portal.svelte.d.ts +3 -0
  166. package/dist/components/primitives/popover/popover-title.svelte +15 -0
  167. package/dist/components/primitives/popover/popover-title.svelte.d.ts +5 -0
  168. package/dist/components/primitives/popover/popover-trigger.svelte +17 -0
  169. package/dist/components/primitives/popover/popover-trigger.svelte.d.ts +4 -0
  170. package/dist/components/primitives/popover/popover.svelte +7 -0
  171. package/dist/components/primitives/popover/popover.svelte.d.ts +3 -0
  172. package/dist/components/primitives/resizable/resizable-handle.svelte +6 -2
  173. package/dist/components/primitives/resizable/resizable-handle.svelte.d.ts +2 -0
  174. package/dist/components/primitives/resizable/resizable-pane-group.svelte +1 -4
  175. package/dist/components/primitives/scroll-area/scroll-area.svelte +1 -1
  176. package/dist/components/primitives/search/search.svelte +3 -3
  177. package/dist/components/primitives/select/select-content.svelte +1 -1
  178. package/dist/components/primitives/select/select-trigger.svelte +1 -1
  179. package/dist/components/primitives/severity.d.ts +7 -0
  180. package/dist/components/primitives/severity.js +19 -0
  181. package/dist/components/primitives/slider/slider.svelte +2 -2
  182. package/dist/components/primitives/sonner/sonner.svelte +1 -1
  183. package/dist/components/primitives/spinner/index.d.ts +1 -0
  184. package/dist/components/primitives/spinner/index.js +1 -0
  185. package/dist/components/primitives/spinner/spinner.svelte +29 -0
  186. package/dist/components/primitives/spinner/spinner.svelte.d.ts +4 -0
  187. package/dist/components/primitives/switch/switch.svelte +2 -2
  188. package/dist/components/primitives/tabs/tabs-list.svelte +27 -5
  189. package/dist/components/primitives/tabs/tabs-list.svelte.d.ts +22 -1
  190. package/dist/components/primitives/tabs/tabs-trigger.svelte +23 -5
  191. package/dist/components/primitives/tabs/tabs-trigger.svelte.d.ts +22 -1
  192. package/dist/components/primitives/tabs/tabs.svelte +6 -2
  193. package/dist/components/primitives/tabs/tabs.svelte.d.ts +5 -1
  194. package/dist/components/primitives/textarea/textarea.svelte +1 -1
  195. package/dist/components/primitives/theme-switcher/ThemeSwitcher.svelte +1 -1
  196. package/dist/components/primitives/toggle/index.d.ts +3 -0
  197. package/dist/components/primitives/toggle/index.js +5 -0
  198. package/dist/components/primitives/toggle/toggle.svelte +52 -0
  199. package/dist/components/primitives/toggle/toggle.svelte.d.ts +43 -0
  200. package/dist/components/primitives/toggle-group/index.d.ts +3 -0
  201. package/dist/components/primitives/toggle-group/index.js +5 -0
  202. package/dist/components/primitives/toggle-group/toggle-group-item.svelte +35 -0
  203. package/dist/components/primitives/toggle-group/toggle-group-item.svelte.d.ts +6 -0
  204. package/dist/components/primitives/toggle-group/toggle-group.svelte +75 -0
  205. package/dist/components/primitives/toggle-group/toggle-group.svelte.d.ts +17 -0
  206. package/dist/components/viewer/MeshMetadataDialog.svelte +3 -3
  207. package/dist/components/viewer/SceneManager.svelte +14 -5
  208. package/dist/components/viewer/Viewer.svelte +120 -171
  209. package/dist/i18n/messages.d.ts +2 -0
  210. package/dist/i18n/messages.js +4 -0
  211. package/dist/styles/base.css +43 -0
  212. package/package.json +9 -9
  213. package/src/lib/components/ConfirmDialog.svelte +2 -10
  214. package/src/lib/components/ErrorScreen.svelte +16 -26
  215. package/src/lib/components/compute/AppLayout.svelte +7 -13
  216. package/src/lib/components/compute/ComputeApp.svelte +3 -3
  217. package/src/lib/components/compute/ComputeMessagesDialog.svelte +23 -49
  218. package/src/lib/components/compute/ParameterPresetManager.svelte +24 -68
  219. package/src/lib/components/compute/SolveMessages.svelte +23 -31
  220. package/src/lib/components/layout/Pagination.svelte +2 -4
  221. package/src/lib/components/layout/SideNav.svelte +1 -1
  222. package/src/lib/components/preview/ChartOutput.svelte +1 -5
  223. package/src/lib/components/preview/Group.svelte +71 -102
  224. package/src/lib/components/preview/HelpButton.svelte +34 -0
  225. package/src/lib/components/preview/ImageOutput.svelte +2 -4
  226. package/src/lib/components/preview/InputControl.svelte +45 -45
  227. package/src/lib/components/preview/OutputDisplay.svelte +12 -22
  228. package/src/lib/components/preview/TabBar.svelte +106 -22
  229. package/src/lib/components/preview/TabContent.svelte +27 -56
  230. package/src/lib/components/preview/TabLayout.svelte +3 -3
  231. package/src/lib/components/preview/inputs/CheckboxInput.svelte +7 -7
  232. package/src/lib/components/preview/inputs/ColorInput.svelte +1 -1
  233. package/src/lib/components/preview/inputs/FileInput.svelte +10 -13
  234. package/src/lib/components/preview/inputs/NumberInput.svelte +37 -57
  235. package/src/lib/components/preview/inputs/TextInput.svelte +0 -1
  236. package/src/lib/components/primitives/CalculateButton.svelte +1 -1
  237. package/src/lib/components/primitives/Callout.svelte +11 -18
  238. package/src/lib/components/primitives/DataTable.svelte +3 -4
  239. package/src/lib/components/primitives/FilterableDropdown.svelte +42 -129
  240. package/src/lib/components/primitives/IssueList.svelte +56 -0
  241. package/src/lib/components/primitives/SeverityIcon.svelte +15 -0
  242. package/src/lib/components/primitives/SolvingIndicator.svelte +1 -29
  243. package/src/lib/components/primitives/StateDisplay.svelte +19 -79
  244. package/src/lib/components/primitives/ViewToggle.svelte +18 -33
  245. package/src/lib/components/primitives/alert-dialog/alert-dialog-action.svelte +9 -3
  246. package/src/lib/components/primitives/alert-dialog/alert-dialog-content.svelte +1 -1
  247. package/src/lib/components/primitives/alert-dialog/alert-dialog-overlay.svelte +1 -1
  248. package/src/lib/components/primitives/badge/badge.svelte +2 -2
  249. package/src/lib/components/primitives/button/button.svelte +3 -2
  250. package/src/lib/components/primitives/card/card-header.svelte +1 -1
  251. package/src/lib/components/primitives/card/card.svelte +21 -5
  252. package/src/lib/components/primitives/card/index.ts +1 -4
  253. package/src/lib/components/primitives/checkbox/checkbox.svelte +1 -1
  254. package/src/lib/components/primitives/command/command-dialog.svelte +42 -0
  255. package/src/lib/components/primitives/command/command-empty.svelte +17 -0
  256. package/src/lib/components/primitives/command/command-group.svelte +33 -0
  257. package/src/lib/components/primitives/command/command-input.svelte +36 -0
  258. package/src/lib/components/primitives/command/command-item.svelte +28 -0
  259. package/src/lib/components/primitives/command/command-link-item.svelte +21 -0
  260. package/src/lib/components/primitives/command/command-list.svelte +20 -0
  261. package/src/lib/components/primitives/command/command-loading.svelte +7 -0
  262. package/src/lib/components/primitives/command/command-separator.svelte +17 -0
  263. package/src/lib/components/primitives/command/command-shortcut.svelte +23 -0
  264. package/src/lib/components/primitives/command/command.svelte +28 -0
  265. package/src/lib/components/primitives/command/index.ts +37 -0
  266. package/src/lib/components/primitives/context-menu/context-menu-content.svelte +1 -1
  267. package/src/lib/components/primitives/context-menu/context-menu-sub-content.svelte +1 -1
  268. package/src/lib/components/primitives/dialog/dialog-content.svelte +5 -1
  269. package/src/lib/components/primitives/dialog/dialog-overlay.svelte +1 -1
  270. package/src/lib/components/primitives/dialog/dialog-title.svelte +6 -2
  271. package/src/lib/components/primitives/drawer/Drawer.svelte +1 -1
  272. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-checkbox-group.svelte +16 -0
  273. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-checkbox-item.svelte +46 -0
  274. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-content.svelte +31 -0
  275. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-group-heading.svelte +22 -0
  276. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-group.svelte +7 -0
  277. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-item.svelte +27 -0
  278. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-label.svelte +24 -0
  279. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-portal.svelte +7 -0
  280. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-radio-group.svelte +16 -0
  281. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-radio-item.svelte +36 -0
  282. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-separator.svelte +17 -0
  283. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-shortcut.svelte +23 -0
  284. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-sub-content.svelte +31 -0
  285. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-sub-trigger.svelte +29 -0
  286. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-sub.svelte +7 -0
  287. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-trigger.svelte +7 -0
  288. package/src/lib/components/primitives/dropdown-menu/dropdown-menu.svelte +7 -0
  289. package/src/lib/components/primitives/dropdown-menu/index.ts +54 -0
  290. package/src/lib/components/primitives/{alert/alert-description.svelte → empty/empty-content.svelte} +3 -3
  291. package/src/lib/components/primitives/empty/empty-description.svelte +23 -0
  292. package/src/lib/components/primitives/{alert/alert-title.svelte → empty/empty-header.svelte} +3 -3
  293. package/src/lib/components/primitives/empty/empty-media.svelte +41 -0
  294. package/src/lib/components/primitives/{card/card-action.svelte → empty/empty-title.svelte} +2 -2
  295. package/src/lib/components/primitives/empty/empty.svelte +23 -0
  296. package/src/lib/components/primitives/empty/index.ts +22 -0
  297. package/src/lib/components/primitives/index.ts +10 -1
  298. package/src/lib/components/primitives/input/input.svelte +4 -4
  299. package/src/lib/components/primitives/input-group/index.ts +22 -0
  300. package/src/lib/components/primitives/input-group/input-group-addon.svelte +53 -0
  301. package/src/lib/components/primitives/input-group/input-group-button.svelte +49 -0
  302. package/src/lib/components/primitives/input-group/input-group-input.svelte +25 -0
  303. package/src/lib/components/primitives/input-group/input-group-text.svelte +22 -0
  304. package/src/lib/components/primitives/input-group/input-group-textarea.svelte +23 -0
  305. package/src/lib/components/primitives/input-group/input-group.svelte +24 -0
  306. package/src/lib/components/primitives/mode-toggle/mode-toggle.svelte +2 -6
  307. package/src/lib/components/primitives/popover/index.ts +28 -0
  308. package/src/lib/components/primitives/popover/popover-close.svelte +7 -0
  309. package/src/lib/components/primitives/popover/popover-content.svelte +31 -0
  310. package/src/lib/components/primitives/popover/popover-description.svelte +20 -0
  311. package/src/lib/components/primitives/popover/popover-header.svelte +20 -0
  312. package/src/lib/components/primitives/popover/popover-portal.svelte +7 -0
  313. package/src/lib/components/primitives/popover/popover-title.svelte +15 -0
  314. package/src/lib/components/primitives/popover/popover-trigger.svelte +17 -0
  315. package/src/lib/components/primitives/popover/popover.svelte +7 -0
  316. package/src/lib/components/primitives/resizable/resizable-handle.svelte +6 -2
  317. package/src/lib/components/primitives/resizable/resizable-pane-group.svelte +1 -4
  318. package/src/lib/components/primitives/scroll-area/scroll-area.svelte +1 -1
  319. package/src/lib/components/primitives/search/search.svelte +3 -3
  320. package/src/lib/components/primitives/select/select-content.svelte +1 -1
  321. package/src/lib/components/primitives/select/select-trigger.svelte +1 -1
  322. package/src/lib/components/primitives/severity.ts +26 -0
  323. package/src/lib/components/primitives/slider/slider.svelte +2 -2
  324. package/src/lib/components/primitives/sonner/sonner.svelte +1 -1
  325. package/src/lib/components/primitives/spinner/index.ts +1 -0
  326. package/src/lib/components/primitives/spinner/spinner.svelte +29 -0
  327. package/src/lib/components/primitives/switch/switch.svelte +2 -2
  328. package/src/lib/components/primitives/tabs/tabs-list.svelte +27 -5
  329. package/src/lib/components/primitives/tabs/tabs-trigger.svelte +23 -5
  330. package/src/lib/components/primitives/tabs/tabs.svelte +6 -2
  331. package/src/lib/components/primitives/textarea/textarea.svelte +1 -1
  332. package/src/lib/components/primitives/theme-switcher/ThemeSwitcher.svelte +1 -1
  333. package/src/lib/components/primitives/toggle/index.ts +13 -0
  334. package/src/lib/components/primitives/toggle/toggle.svelte +52 -0
  335. package/src/lib/components/primitives/toggle-group/index.ts +10 -0
  336. package/src/lib/components/primitives/toggle-group/toggle-group-item.svelte +35 -0
  337. package/src/lib/components/primitives/toggle-group/toggle-group.svelte +75 -0
  338. package/src/lib/components/viewer/MeshMetadataDialog.svelte +3 -3
  339. package/src/lib/components/viewer/SceneManager.svelte +14 -5
  340. package/src/lib/components/viewer/Viewer.svelte +120 -171
  341. package/src/lib/i18n/messages.ts +6 -0
  342. package/src/lib/styles/base.css +43 -0
  343. package/dist/components/primitives/alert/alert.svelte +0 -44
  344. package/dist/components/primitives/alert/alert.svelte.d.ts +0 -26
  345. package/dist/components/primitives/alert/index.d.ts +0 -5
  346. package/dist/components/primitives/alert/index.js +0 -7
  347. package/src/lib/components/primitives/alert/alert.svelte +0 -44
  348. package/src/lib/components/primitives/alert/index.ts +0 -14
@@ -0,0 +1,56 @@
1
+ <script lang="ts" module>
2
+ import type { Severity } from './severity';
3
+
4
+ export interface Issue {
5
+ severity: Severity;
6
+ message: string;
7
+ /** A second, quieter line: expected vs actual, a path, a hint. */
8
+ detail?: string;
9
+ /** What raised it, such as the component's nickname. */
10
+ source?: string;
11
+ /** How many times the same message came in; shown as ×n above 1. */
12
+ count?: number;
13
+ }
14
+ </script>
15
+
16
+ <script lang="ts">
17
+ import { cn } from '$lib/utils.js';
18
+ import SeverityIcon from './SeverityIcon.svelte';
19
+
20
+ interface Props {
21
+ issues: readonly Issue[];
22
+ /** `boxed` draws a bordered, divided list; `plain` is for surfaces that already have a frame. */
23
+ variant?: 'boxed' | 'plain';
24
+ class?: string;
25
+ }
26
+
27
+ let { issues, variant = 'boxed', class: className }: Props = $props();
28
+ </script>
29
+
30
+ <ul
31
+ class={cn(
32
+ 'text-sm',
33
+ variant === 'boxed' ? 'divide-y rounded-lg border' : 'gap-2 flex flex-col',
34
+ className
35
+ )}
36
+ >
37
+ {#each issues as issue, i (i)}
38
+ <li class={cn('gap-2 flex items-start', variant === 'boxed' && 'px-3 py-2')}>
39
+ <SeverityIcon severity={issue.severity} class="mt-0.5" />
40
+ <div class="min-w-0 flex-1">
41
+ <p class="wrap-anywhere">
42
+ {issue.message}
43
+ {#if issue.count && issue.count > 1}
44
+ <span class="ml-1 text-xs text-muted-foreground tabular-nums">×{issue.count}</span>
45
+ {/if}
46
+ </p>
47
+ {#if issue.source}
48
+ <p class="text-xs text-muted-foreground">{issue.source}</p>
49
+ {/if}
50
+ {#if issue.detail}
51
+ <p class="mt-0.5 text-xs wrap-anywhere text-muted-foreground">{issue.detail}</p>
52
+ {/if}
53
+ </div>
54
+ </li>
55
+ {/each}
56
+ </ul>
@@ -0,0 +1,15 @@
1
+ <script lang="ts">
2
+ import { cn } from '$lib/utils.js';
3
+ import { SEVERITY_ICON, SEVERITY_TEXT, type Severity } from './severity';
4
+
5
+ interface Props {
6
+ severity: Severity;
7
+ class?: string;
8
+ }
9
+
10
+ let { severity, class: className }: Props = $props();
11
+
12
+ const Icon = $derived(SEVERITY_ICON[severity]);
13
+ </script>
14
+
15
+ <Icon class={cn('size-4 shrink-0', SEVERITY_TEXT[severity], className)} aria-hidden="true" />
@@ -13,7 +13,7 @@
13
13
 
14
14
  {#if show}
15
15
  <div
16
- class="bottom-6 left-6 gap-3 px-5 py-3 shadow-xl fixed z-50 flex animate-[selva-slideInLeft_0.2s_ease-out] items-center rounded-lg border border-primary/20 bg-primary text-primary-foreground"
16
+ class="bottom-6 left-6 gap-3 px-5 py-3 shadow-xl animate-in fade-in slide-in-from-left fixed z-50 flex items-center rounded-lg border border-primary/20 bg-primary text-primary-foreground duration-200"
17
17
  >
18
18
  <div class="h-5 w-5 relative flex shrink-0 items-center justify-center">
19
19
  <div
@@ -29,31 +29,3 @@
29
29
  </div>
30
30
  </div>
31
31
  {/if}
32
-
33
- <style>
34
- @keyframes selva-slideInLeft {
35
- from {
36
- transform: translateX(-110%);
37
- opacity: 0;
38
- }
39
- to {
40
- transform: translateX(0);
41
- opacity: 1;
42
- }
43
- }
44
-
45
- @keyframes selva-sweep {
46
- 0% {
47
- width: 0%;
48
- margin-left: 0%;
49
- }
50
- 50% {
51
- width: 60%;
52
- margin-left: 20%;
53
- }
54
- 100% {
55
- width: 0%;
56
- margin-left: 100%;
57
- }
58
- }
59
- </style>
@@ -1,6 +1,9 @@
1
1
  <script lang="ts">
2
- import { Loader, AlertCircle, AlertTriangle, Inbox } from '@lucide/svelte';
3
- import * as Card from '$lib/components/primitives/card';
2
+ import { Inbox } from '@lucide/svelte';
3
+ import { cn } from '$lib/utils.js';
4
+ import * as Empty from './empty';
5
+ import { Spinner } from './spinner';
6
+ import SeverityIcon from './SeverityIcon.svelte';
4
7
 
5
8
  interface StateDisplayProps {
6
9
  type: 'loading' | 'error' | 'warning' | 'empty';
@@ -18,89 +21,26 @@
18
21
  class: className = ''
19
22
  }: StateDisplayProps = $props();
20
23
 
21
- const sizeClasses = {
22
- small: {
23
- container: 'p-6 gap-3',
24
- icon: 'w-8 h-8',
25
- title: 'text-sm font-semibold',
26
- message: 'text-xs'
27
- },
28
- medium: {
29
- container: 'p-12 gap-4',
30
- icon: 'w-12 h-12',
31
- title: 'text-lg font-semibold',
32
- message: 'text-sm'
33
- },
34
- large: {
35
- container: 'p-16 gap-6',
36
- icon: 'w-16 h-16',
37
- title: 'text-2xl font-bold',
38
- message: 'text-base'
39
- }
40
- };
41
-
42
- /* Fully semantic, contrast-safe mappings */
43
- const typeClasses = {
44
- loading: {
45
- icon: 'text-primary',
46
- title: 'text-primary-foreground',
47
- message: 'text-primary-foreground/80',
48
- border: 'border-primary',
49
- background: 'bg-primary/15'
50
- },
51
- error: {
52
- icon: 'text-destructive',
53
- title: 'text-destructive-foreground',
54
- message: 'text-destructive-foreground/80',
55
- border: 'border-destructive',
56
- background: 'bg-destructive/15'
57
- },
58
- warning: {
59
- icon: 'text-accent',
60
- title: 'text-accent-foreground',
61
- message: 'text-accent-foreground/80',
62
- border: 'border-accent',
63
- background: 'bg-accent/15'
64
- },
65
- empty: {
66
- icon: 'text-neutral',
67
- title: 'text-neutral-foreground',
68
- message: 'text-neutral-foreground/80',
69
- border: 'border-neutral',
70
- background: 'bg-neutral/15'
71
- }
72
- };
73
-
74
- const sizeConfig = $derived(sizeClasses[size]);
75
- const typeConfig = $derived(typeClasses[type]);
24
+ // Size only changes the breathing room; the look comes from Empty and the severity tokens.
25
+ const PADDING = { small: 'p-4', medium: 'p-8', large: 'p-12' } as const;
76
26
  </script>
77
27
 
78
- <Card.Root class="rounded-lg border-2 {typeConfig.border} {typeConfig.background} {className}">
79
- <Card.Content
80
- class="flex flex-col items-center justify-center text-center {sizeConfig.container}"
81
- >
82
- <div class="{sizeConfig.icon} {typeConfig.icon}">
28
+ <Empty.Root class={cn(PADDING[size], className)}>
29
+ <Empty.Header>
30
+ <Empty.Media variant="icon">
83
31
  {#if type === 'loading'}
84
- <Loader class="animate-spin h-full w-full" />
85
- {:else if type === 'error'}
86
- <AlertCircle class="h-full w-full" />
87
- {:else if type === 'warning'}
88
- <AlertTriangle class="h-full w-full" />
32
+ <Spinner />
89
33
  {:else if type === 'empty'}
90
- <Inbox class="h-full w-full" />
34
+ <Inbox />
35
+ {:else}
36
+ <SeverityIcon severity={type} />
91
37
  {/if}
92
- </div>
93
-
38
+ </Empty.Media>
94
39
  {#if title}
95
- <h3 class="{sizeConfig.title} {typeConfig.title} mt-1">
96
- {title}
97
- </h3>
40
+ <Empty.Title>{title}</Empty.Title>
98
41
  {/if}
99
-
100
42
  {#if message}
101
- <p class="{sizeConfig.message} {typeConfig.message} max-w-md leading-relaxed">
102
- {message}
103
- </p>
43
+ <Empty.Description>{message}</Empty.Description>
104
44
  {/if}
105
- </Card.Content>
106
- </Card.Root>
45
+ </Empty.Header>
46
+ </Empty.Root>
@@ -1,5 +1,6 @@
1
1
  <script lang="ts">
2
2
  import { Grid2x2, List } from '@lucide/svelte';
3
+ import * as ToggleGroup from './toggle-group';
3
4
 
4
5
  type ViewMode = 'grid' | 'list';
5
6
 
@@ -10,38 +11,22 @@
10
11
  }
11
12
 
12
13
  let { mode, onChange, size = 'md' }: Props = $props();
13
-
14
- const btnClass = $derived(
15
- size === 'sm'
16
- ? 'flex h-7 w-7 items-center justify-center rounded-md transition-colors'
17
- : 'flex h-8 w-8 items-center justify-center rounded-md transition-colors'
18
- );
19
- const iconClass = $derived(size === 'sm' ? 'h-3.5 w-3.5' : 'h-4 w-4');
20
14
  </script>
21
15
 
22
- <div class="gap-0.5 p-0.5 inline-flex rounded-md border border-border bg-card">
23
- <button
24
- type="button"
25
- title="Grid view"
26
- aria-label="Grid view"
27
- aria-pressed={mode === 'grid'}
28
- onclick={() => onChange('grid')}
29
- class="{btnClass} {mode === 'grid'
30
- ? 'bg-muted text-foreground'
31
- : 'text-muted-foreground hover:text-foreground'}"
32
- >
33
- <Grid2x2 class={iconClass} />
34
- </button>
35
- <button
36
- type="button"
37
- title="List view"
38
- aria-label="List view"
39
- aria-pressed={mode === 'list'}
40
- onclick={() => onChange('list')}
41
- class="{btnClass} {mode === 'list'
42
- ? 'bg-muted text-foreground'
43
- : 'text-muted-foreground hover:text-foreground'}"
44
- >
45
- <List class={iconClass} />
46
- </button>
47
- </div>
16
+ <ToggleGroup.Root
17
+ type="single"
18
+ variant="outline"
19
+ size={size === 'sm' ? 'sm' : 'default'}
20
+ value={mode}
21
+ onValueChange={(next) => {
22
+ // A single-select group emits '' when the active item is clicked again; keep the mode.
23
+ if (next === 'grid' || next === 'list') onChange(next);
24
+ }}
25
+ >
26
+ <ToggleGroup.Item value="grid" aria-label="Grid view" title="Grid view">
27
+ <Grid2x2 />
28
+ </ToggleGroup.Item>
29
+ <ToggleGroup.Item value="list" aria-label="List view" title="List view">
30
+ <List />
31
+ </ToggleGroup.Item>
32
+ </ToggleGroup.Root>
@@ -1,18 +1,24 @@
1
1
  <script lang="ts">
2
2
  import { AlertDialog as AlertDialogPrimitive } from 'bits-ui';
3
- import { buttonVariants } from '$lib/components/primitives/button/index.js';
3
+ import {
4
+ buttonVariants,
5
+ type ButtonSize,
6
+ type ButtonVariant
7
+ } from '$lib/components/primitives/button/index.js';
4
8
  import { cn } from '$lib/utils.js';
5
9
 
6
10
  let {
7
11
  ref = $bindable(null),
8
12
  class: className,
13
+ variant = 'default',
14
+ size = 'default',
9
15
  ...restProps
10
- }: AlertDialogPrimitive.ActionProps = $props();
16
+ }: AlertDialogPrimitive.ActionProps & { variant?: ButtonVariant; size?: ButtonSize } = $props();
11
17
  </script>
12
18
 
13
19
  <AlertDialogPrimitive.Action
14
20
  bind:ref
15
21
  data-slot="alert-dialog-action"
16
- class={cn(buttonVariants(), className)}
22
+ class={cn(buttonVariants({ variant, size }), className)}
17
23
  {...restProps}
18
24
  />
@@ -19,7 +19,7 @@
19
19
  bind:ref
20
20
  data-slot="alert-dialog-content"
21
21
  class={cn(
22
- 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 gap-4 p-6 shadow-lg sm:max-w-lg fixed start-[50%] top-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] rounded-lg border bg-background duration-200',
22
+ 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 gap-4 p-6 shadow-lg sm:max-w-lg fixed start-1/2 top-1/2 z-50 grid w-full max-w-screen-inset -translate-x-1/2 -translate-y-1/2 rounded-lg border bg-background duration-200',
23
23
  className
24
24
  )}
25
25
  {...restProps}
@@ -13,7 +13,7 @@
13
13
  bind:ref
14
14
  data-slot="alert-dialog-overlay"
15
15
  class={cn(
16
- 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 inset-0 bg-black/50 fixed z-50',
16
+ 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 inset-0 fixed z-50 bg-overlay',
17
17
  className
18
18
  )}
19
19
  {...restProps}
@@ -2,14 +2,14 @@
2
2
  import { type VariantProps, tv } from 'tailwind-variants';
3
3
 
4
4
  export const badgeVariants = tv({
5
- base: 'focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&>svg]:pointer-events-none [&>svg]:size-3',
5
+ base: 'focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition focus-visible:ring-3 [&>svg]:pointer-events-none [&>svg]:size-3',
6
6
  variants: {
7
7
  variant: {
8
8
  default: 'bg-primary text-primary-foreground [a&]:hover:bg-primary/90 border-transparent',
9
9
  secondary:
10
10
  'bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90 border-transparent',
11
11
  destructive:
12
- 'bg-destructive [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/70 border-transparent text-white',
12
+ 'bg-destructive [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/70 border-transparent text-destructive-foreground',
13
13
  outline: 'text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground'
14
14
  }
15
15
  },
@@ -4,12 +4,12 @@
4
4
  import { type VariantProps, tv } from 'tailwind-variants';
5
5
 
6
6
  export const buttonVariants = tv({
7
- base: "focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium outline-none transition-all focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
7
+ base: "focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium outline-none transition-all focus-visible:ring-3 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
8
8
  variants: {
9
9
  variant: {
10
10
  default: 'bg-primary text-primary-foreground shadow-xs hover:bg-primary/90',
11
11
  destructive:
12
- 'bg-destructive shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 text-white',
12
+ 'bg-destructive shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 text-destructive-foreground',
13
13
  outline:
14
14
  'bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 border',
15
15
  secondary: 'bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80',
@@ -20,6 +20,7 @@
20
20
  },
21
21
  size: {
22
22
  default: 'h-9 px-4 py-2 has-[>svg]:px-3',
23
+ xs: 'h-7 gap-1 rounded-md px-3 text-xs has-[>svg]:px-2',
23
24
  sm: 'h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5',
24
25
  lg: 'h-10 rounded-md px-6 has-[>svg]:px-4',
25
26
  icon: 'size-9',
@@ -14,7 +14,7 @@
14
14
  bind:this={ref}
15
15
  data-slot="card-header"
16
16
  class={cn(
17
- 'gap-1.5 px-6 [.border-b]:pb-6 @container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start has-data-[slot=card-action]:grid-cols-[1fr_auto]',
17
+ 'gap-1.5 px-6 [.border-b]:pb-6 @container/card-header grid auto-rows-min items-start',
18
18
  className
19
19
  )}
20
20
  {...restProps}
@@ -1,3 +1,21 @@
1
+ <script lang="ts" module>
2
+ import { tv, type VariantProps } from 'tailwind-variants';
3
+
4
+ export const cardVariants = tv({
5
+ base: 'shadow-sm flex flex-col rounded-xl border bg-card text-card-foreground',
6
+ variants: {
7
+ variant: {
8
+ default: 'gap-6 py-6',
9
+ /** No padding or gap: for a card whose children draw their own edges, like a tab panel. */
10
+ flush: 'gap-0 overflow-hidden'
11
+ }
12
+ },
13
+ defaultVariants: { variant: 'default' }
14
+ });
15
+
16
+ export type CardVariant = VariantProps<typeof cardVariants>['variant'];
17
+ </script>
18
+
1
19
  <script lang="ts">
2
20
  import type { HTMLAttributes } from 'svelte/elements';
3
21
  import { cn, type WithElementRef } from '$lib/utils.js';
@@ -5,18 +23,16 @@
5
23
  let {
6
24
  ref = $bindable(null),
7
25
  class: className,
26
+ variant = 'default',
8
27
  children,
9
28
  ...restProps
10
- }: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();
29
+ }: WithElementRef<HTMLAttributes<HTMLDivElement>> & { variant?: CardVariant } = $props();
11
30
  </script>
12
31
 
13
32
  <div
14
33
  bind:this={ref}
15
34
  data-slot="card"
16
- class={cn(
17
- 'gap-6 py-6 shadow-sm flex flex-col rounded-xl border bg-card text-card-foreground',
18
- className
19
- )}
35
+ class={cn(cardVariants({ variant }), className)}
20
36
  {...restProps}
21
37
  >
22
38
  {@render children?.()}
@@ -4,7 +4,6 @@ import Description from './card-description.svelte';
4
4
  import Footer from './card-footer.svelte';
5
5
  import Header from './card-header.svelte';
6
6
  import Title from './card-title.svelte';
7
- import Action from './card-action.svelte';
8
7
 
9
8
  export {
10
9
  Root,
@@ -13,13 +12,11 @@ export {
13
12
  Footer,
14
13
  Header,
15
14
  Title,
16
- Action,
17
15
  //
18
16
  Root as Card,
19
17
  Content as CardContent,
20
18
  Description as CardDescription,
21
19
  Footer as CardFooter,
22
20
  Header as CardHeader,
23
- Title as CardTitle,
24
- Action as CardAction
21
+ Title as CardTitle
25
22
  };
@@ -17,7 +17,7 @@
17
17
  bind:ref
18
18
  data-slot="checkbox"
19
19
  class={cn(
20
- 'peer size-4 shadow-xs flex shrink-0 items-center justify-center rounded-[4px] border border-input transition-shadow outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:bg-input/30 dark:aria-invalid:ring-destructive/40 dark:data-[state=checked]:bg-primary',
20
+ 'peer size-4 shadow-xs flex shrink-0 items-center justify-center rounded-sm border border-input transition-shadow outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:bg-input/30 dark:aria-invalid:ring-destructive/40 dark:data-[state=checked]:bg-primary',
21
21
  className
22
22
  )}
23
23
  bind:checked
@@ -0,0 +1,42 @@
1
+ <script lang="ts">
2
+ import * as Dialog from '$lib/components/primitives/dialog/index.js';
3
+ import { cn, type WithoutChildrenOrChild } from '$lib/utils.js';
4
+ import Command from './command.svelte';
5
+ import type { Command as CommandPrimitive, Dialog as DialogPrimitive } from 'bits-ui';
6
+ import type { Snippet } from 'svelte';
7
+
8
+ let {
9
+ open = $bindable(false),
10
+ ref = $bindable(null),
11
+ value = $bindable(''),
12
+ title = 'Command Palette',
13
+ description = 'Search for a command to run...',
14
+ showCloseButton = false,
15
+ portalProps,
16
+ children,
17
+ class: className,
18
+ ...restProps
19
+ }: WithoutChildrenOrChild<DialogPrimitive.RootProps> &
20
+ WithoutChildrenOrChild<CommandPrimitive.RootProps> & {
21
+ portalProps?: DialogPrimitive.PortalProps;
22
+ children: Snippet;
23
+ title?: string;
24
+ description?: string;
25
+ showCloseButton?: boolean;
26
+ class?: string;
27
+ } = $props();
28
+ </script>
29
+
30
+ <Dialog.Root bind:open {...restProps}>
31
+ <Dialog.Header class="sr-only">
32
+ <Dialog.Title>{title}</Dialog.Title>
33
+ <Dialog.Description>{description}</Dialog.Description>
34
+ </Dialog.Header>
35
+ <Dialog.Content
36
+ class={cn('translate-y-0 p-0 top-1/3 overflow-hidden rounded-xl!', className)}
37
+ {showCloseButton}
38
+ {portalProps}
39
+ >
40
+ <Command {...restProps} bind:value bind:ref {children} />
41
+ </Dialog.Content>
42
+ </Dialog.Root>
@@ -0,0 +1,17 @@
1
+ <script lang="ts">
2
+ import { Command as CommandPrimitive } from 'bits-ui';
3
+ import { cn } from '$lib/utils.js';
4
+
5
+ let {
6
+ ref = $bindable(null),
7
+ class: className,
8
+ ...restProps
9
+ }: CommandPrimitive.EmptyProps = $props();
10
+ </script>
11
+
12
+ <CommandPrimitive.Empty
13
+ bind:ref
14
+ data-slot="command-empty"
15
+ class={cn('py-6 text-sm text-center', className)}
16
+ {...restProps}
17
+ />
@@ -0,0 +1,33 @@
1
+ <script lang="ts">
2
+ import { Command as CommandPrimitive, useId } from 'bits-ui';
3
+ import { cn } from '$lib/utils.js';
4
+
5
+ let {
6
+ ref = $bindable(null),
7
+ class: className,
8
+ children,
9
+ heading,
10
+ value,
11
+ ...restProps
12
+ }: CommandPrimitive.GroupProps & {
13
+ heading?: string;
14
+ } = $props();
15
+ </script>
16
+
17
+ <CommandPrimitive.Group
18
+ bind:ref
19
+ data-slot="command-group"
20
+ class={cn(
21
+ 'p-1 **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium overflow-hidden text-foreground **:[[cmdk-group-heading]]:text-muted-foreground',
22
+ className
23
+ )}
24
+ value={value ?? heading ?? `----${useId()}`}
25
+ {...restProps}
26
+ >
27
+ {#if heading}
28
+ <CommandPrimitive.GroupHeading class="px-2 py-1.5 text-xs font-medium text-muted-foreground">
29
+ {heading}
30
+ </CommandPrimitive.GroupHeading>
31
+ {/if}
32
+ <CommandPrimitive.GroupItems {children} />
33
+ </CommandPrimitive.Group>
@@ -0,0 +1,36 @@
1
+ <script lang="ts">
2
+ import { Command as CommandPrimitive } from 'bits-ui';
3
+ import * as InputGroup from '$lib/components/primitives/input-group/index.js';
4
+ import SearchIcon from '@lucide/svelte/icons/search';
5
+ import { cn } from '$lib/utils.js';
6
+
7
+ let {
8
+ ref = $bindable(null),
9
+ class: className,
10
+ value = $bindable(''),
11
+ ...restProps
12
+ }: CommandPrimitive.InputProps = $props();
13
+ </script>
14
+
15
+ <div data-slot="command-input-wrapper" class="p-1 pb-0">
16
+ <InputGroup.Root
17
+ class="h-8! *:data-[slot=input-group-addon]:pl-2! rounded-lg! border-input/30 bg-input/30 shadow-none!"
18
+ >
19
+ <CommandPrimitive.Input
20
+ {value}
21
+ data-slot="command-input"
22
+ class={cn(
23
+ 'text-sm w-full outline-hidden disabled:cursor-not-allowed disabled:opacity-50',
24
+ className
25
+ )}
26
+ {...restProps}
27
+ >
28
+ {#snippet child({ props })}
29
+ <InputGroup.Input {...props} bind:value bind:ref />
30
+ {/snippet}
31
+ </CommandPrimitive.Input>
32
+ <InputGroup.Addon>
33
+ <SearchIcon class="size-4 shrink-0 opacity-50" />
34
+ </InputGroup.Addon>
35
+ </InputGroup.Root>
36
+ </div>
@@ -0,0 +1,28 @@
1
+ <script lang="ts">
2
+ import { Command as CommandPrimitive } from 'bits-ui';
3
+ import CheckIcon from '@lucide/svelte/icons/check';
4
+ import { cn } from '$lib/utils.js';
5
+
6
+ let {
7
+ ref = $bindable(null),
8
+ class: className,
9
+ children,
10
+ ...restProps
11
+ }: CommandPrimitive.ItemProps = $props();
12
+ </script>
13
+
14
+ <CommandPrimitive.Item
15
+ bind:ref
16
+ data-slot="command-item"
17
+ class={cn(
18
+ "gap-2 px-2 py-1.5 text-sm [&_svg:not([class*='size-'])]:size-4 group/command-item relative flex cursor-default items-center rounded-sm outline-hidden select-none in-data-[slot=dialog-content]:rounded-lg! data-selected:bg-muted data-selected:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 data-selected:*:[svg]:text-foreground",
19
+ 'data-disabled:pointer-events-none data-disabled:opacity-50',
20
+ className
21
+ )}
22
+ {...restProps}
23
+ >
24
+ {@render children?.()}
25
+ <CheckIcon
26
+ class="ml-auto opacity-0 group-has-data-[slot=command-shortcut]/command-item:hidden group-data-[checked=true]/command-item:opacity-100"
27
+ />
28
+ </CommandPrimitive.Item>
@@ -0,0 +1,21 @@
1
+ <script lang="ts">
2
+ import { Command as CommandPrimitive } from 'bits-ui';
3
+ import { cn } from '$lib/utils.js';
4
+
5
+ let {
6
+ ref = $bindable(null),
7
+ class: className,
8
+ ...restProps
9
+ }: CommandPrimitive.LinkItemProps = $props();
10
+ </script>
11
+
12
+ <CommandPrimitive.LinkItem
13
+ bind:ref
14
+ data-slot="command-item"
15
+ class={cn(
16
+ "gap-2 px-2 py-1.5 text-sm [&_svg:not([class*='size-'])]:size-4 group/command-item relative flex cursor-default items-center rounded-sm outline-hidden select-none in-data-[slot=dialog-content]:rounded-lg! data-selected:bg-muted data-selected:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 data-selected:*:[svg]:text-foreground",
17
+ 'data-disabled:pointer-events-none data-disabled:opacity-50',
18
+ className
19
+ )}
20
+ {...restProps}
21
+ />