@selvajs/ui 6.6.0-beta.2 → 6.6.0-beta.20

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 (401) hide show
  1. package/README.md +0 -3
  2. package/dist/components/ErrorScreen.svelte +7 -3
  3. package/dist/components/compute/AppLayout.svelte +307 -123
  4. package/dist/components/compute/AppLayout.svelte.d.ts +28 -0
  5. package/dist/components/compute/CollapsedPanelStrip.svelte +4 -2
  6. package/dist/components/compute/ComputeApp.svelte +46 -22
  7. package/dist/components/compute/ComputeApp.svelte.d.ts +20 -3
  8. package/dist/components/compute/ComputeMessagesDialog.svelte +31 -41
  9. package/dist/components/compute/ParameterPresetManager.svelte +16 -65
  10. package/dist/components/compute/ParameterPresetManager.svelte.d.ts +4 -5
  11. package/dist/components/compute/SolveMessages.svelte +128 -121
  12. package/dist/components/compute/SolveMessages.svelte.d.ts +12 -12
  13. package/dist/components/layout/AppShell.svelte +10 -6
  14. package/dist/components/layout/FooterItemRenderer.svelte +2 -2
  15. package/dist/components/layout/FooterItemRenderer.svelte.d.ts +1 -1
  16. package/dist/components/layout/PageContent.svelte +3 -2
  17. package/dist/components/layout/PageFooter.svelte +26 -14
  18. package/dist/components/layout/PageHeader.svelte +14 -10
  19. package/dist/components/layout/SectionHeader.svelte +4 -2
  20. package/dist/components/layout/SideNav.svelte +57 -8
  21. package/dist/components/layout/SubNav.svelte +2 -2
  22. package/dist/components/preview/ChartOutput.svelte +131 -65
  23. package/dist/components/preview/Group.svelte +42 -22
  24. package/dist/components/preview/HelpButton.svelte +5 -3
  25. package/dist/components/preview/ImageOutput.svelte +435 -71
  26. package/dist/components/preview/InputControl.svelte +125 -51
  27. package/dist/components/preview/InputControl.svelte.d.ts +5 -1
  28. package/dist/components/preview/OutputDisplay.svelte +42 -28
  29. package/dist/components/preview/TabBar.svelte +8 -6
  30. package/dist/components/preview/TabBar.svelte.d.ts +2 -0
  31. package/dist/components/preview/TabContent.svelte +66 -31
  32. package/dist/components/preview/TabContent.svelte.d.ts +5 -1
  33. package/dist/components/preview/TabLayout.svelte +29 -8
  34. package/dist/components/preview/TabLayout.svelte.d.ts +5 -0
  35. package/dist/components/preview/inputs/CheckboxInput.svelte +1 -1
  36. package/dist/components/preview/inputs/ChecklistInput.svelte +11 -6
  37. package/dist/components/preview/inputs/ChecklistInput.svelte.d.ts +2 -1
  38. package/dist/components/preview/inputs/ColorInput.svelte +357 -13
  39. package/dist/components/preview/inputs/ColorInput.svelte.d.ts +2 -0
  40. package/dist/components/preview/inputs/DropdownInput.svelte +20 -5
  41. package/dist/components/preview/inputs/DropdownInput.svelte.d.ts +2 -1
  42. package/dist/components/preview/inputs/FileInput.svelte +115 -103
  43. package/dist/components/preview/inputs/GeometryInput.svelte +128 -0
  44. package/dist/components/preview/inputs/GeometryInput.svelte.d.ts +21 -0
  45. package/dist/components/preview/inputs/NumberInput.svelte +98 -16
  46. package/dist/components/preview/inputs/NumberInput.svelte.d.ts +2 -0
  47. package/dist/components/preview/inputs/OptionGlyph.svelte +29 -0
  48. package/dist/components/preview/inputs/OptionGlyph.svelte.d.ts +8 -0
  49. package/dist/components/preview/inputs/SegmentedInput.svelte +45 -0
  50. package/dist/components/preview/inputs/SegmentedInput.svelte.d.ts +12 -0
  51. package/dist/components/preview/inputs/TextInput.svelte +11 -6
  52. package/dist/components/preview/inputs/TileInput.svelte +83 -0
  53. package/dist/components/preview/inputs/TileInput.svelte.d.ts +12 -0
  54. package/dist/components/preview/inputs/index.d.ts +3 -0
  55. package/dist/components/preview/inputs/index.js +3 -0
  56. package/dist/components/primitives/CalculateButton.svelte +56 -24
  57. package/dist/components/primitives/CalculateButton.svelte.d.ts +3 -0
  58. package/dist/components/primitives/Callout.svelte +8 -6
  59. package/dist/components/primitives/Callout.svelte.d.ts +4 -4
  60. package/dist/components/primitives/DataTable.svelte +38 -4
  61. package/dist/components/primitives/DataTable.svelte.d.ts +2 -0
  62. package/dist/components/primitives/FilterableDropdown.svelte +13 -1
  63. package/dist/components/primitives/FilterableDropdown.svelte.d.ts +5 -0
  64. package/dist/components/primitives/ImageUploadField.svelte +1 -1
  65. package/dist/components/primitives/SolvingIndicator.svelte +245 -15
  66. package/dist/components/primitives/SolvingIndicator.svelte.d.ts +15 -0
  67. package/dist/components/primitives/alert-dialog/alert-dialog-content.svelte +1 -1
  68. package/dist/components/primitives/badge/badge.svelte +4 -4
  69. package/dist/components/primitives/badge/badge.svelte.d.ts +10 -10
  70. package/dist/components/primitives/button/button.svelte +10 -8
  71. package/dist/components/primitives/button/button.svelte.d.ts +20 -17
  72. package/dist/components/primitives/card/card.svelte +1 -1
  73. package/dist/components/primitives/card/card.svelte.d.ts +1 -1
  74. package/dist/components/primitives/checkbox/checkbox.svelte +1 -1
  75. package/dist/components/primitives/command/command-input.svelte +1 -1
  76. package/dist/components/primitives/command/command-item.svelte +1 -1
  77. package/dist/components/primitives/command/command-link-item.svelte +1 -1
  78. package/dist/components/primitives/command/command.svelte +1 -1
  79. package/dist/components/primitives/context-menu/context-menu-checkbox-item.svelte +1 -1
  80. package/dist/components/primitives/context-menu/context-menu-content.svelte +1 -1
  81. package/dist/components/primitives/context-menu/context-menu-item.svelte +1 -1
  82. package/dist/components/primitives/context-menu/context-menu-radio-item.svelte +1 -1
  83. package/dist/components/primitives/context-menu/context-menu-sub-content.svelte +1 -1
  84. package/dist/components/primitives/context-menu/context-menu-sub-trigger.svelte +1 -1
  85. package/dist/components/primitives/dialog/dialog-content.svelte +7 -3
  86. package/dist/components/primitives/drawer/Drawer.svelte +1 -1
  87. package/dist/components/primitives/dropdown-menu/dropdown-menu-checkbox-item.svelte +31 -11
  88. package/dist/components/primitives/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts +2 -0
  89. package/dist/components/primitives/dropdown-menu/dropdown-menu-content.svelte +5 -1
  90. package/dist/components/primitives/dropdown-menu/dropdown-menu-content.svelte.d.ts +2 -0
  91. package/dist/components/primitives/dropdown-menu/dropdown-menu-item.svelte +4 -2
  92. package/dist/components/primitives/dropdown-menu/dropdown-menu-item.svelte.d.ts +2 -1
  93. package/dist/components/primitives/dropdown-menu/dropdown-menu-radio-item.svelte +1 -1
  94. package/dist/components/primitives/dropdown-menu/dropdown-menu-shortcut.svelte +1 -1
  95. package/dist/components/primitives/dropdown-menu/dropdown-menu-sub-content.svelte +1 -1
  96. package/dist/components/primitives/dropdown-menu/dropdown-menu-sub-trigger.svelte +1 -1
  97. package/dist/components/primitives/index.d.ts +1 -1
  98. package/dist/components/primitives/index.js +1 -1
  99. package/dist/components/primitives/input/input.svelte +4 -4
  100. package/dist/components/primitives/input-group/input-group-input.svelte.d.ts +1 -1
  101. package/dist/components/primitives/input-group/input-group.svelte +1 -1
  102. package/dist/components/primitives/mode-toggle/mode-toggle.svelte +5 -2
  103. package/dist/components/primitives/popover/popover-content.svelte +1 -1
  104. package/dist/components/primitives/resizable/resizable-handle.svelte +2 -2
  105. package/dist/components/primitives/scroll-area/scroll-area.svelte +1 -1
  106. package/dist/components/primitives/search/search.svelte +2 -2
  107. package/dist/components/primitives/select/select-content.svelte +1 -1
  108. package/dist/components/primitives/select/select-item.svelte +1 -1
  109. package/dist/components/primitives/select/select-trigger.svelte +1 -1
  110. package/dist/components/primitives/slider/slider.svelte +8 -3
  111. package/dist/components/primitives/slider/slider.svelte.d.ts +5 -1
  112. package/dist/components/primitives/switch/switch.svelte +1 -1
  113. package/dist/components/primitives/tabs/tabs-list.svelte +2 -2
  114. package/dist/components/primitives/tabs/tabs-list.svelte.d.ts +6 -6
  115. package/dist/components/primitives/tabs/tabs-trigger.svelte +3 -3
  116. package/dist/components/primitives/tabs/tabs-trigger.svelte.d.ts +7 -7
  117. package/dist/components/primitives/textarea/textarea.svelte +1 -1
  118. package/dist/components/primitives/toggle/toggle.svelte +11 -3
  119. package/dist/components/primitives/toggle/toggle.svelte.d.ts +13 -4
  120. package/dist/components/primitives/toggle-group/toggle-group-item.svelte +1 -1
  121. package/dist/components/primitives/toggle-group/toggle-group.svelte +1 -1
  122. package/dist/components/primitives/tooltip/index.d.ts +6 -0
  123. package/dist/components/primitives/tooltip/index.js +8 -0
  124. package/dist/components/primitives/tooltip/tooltip-content.svelte +34 -0
  125. package/dist/components/primitives/tooltip/tooltip-content.svelte.d.ts +10 -0
  126. package/dist/components/primitives/tooltip/tooltip-portal.svelte +7 -0
  127. package/dist/components/primitives/tooltip/tooltip-portal.svelte.d.ts +4 -0
  128. package/dist/components/primitives/tooltip/tooltip-provider.svelte +7 -0
  129. package/dist/components/primitives/tooltip/tooltip-provider.svelte.d.ts +4 -0
  130. package/dist/components/primitives/tooltip/tooltip-trigger.svelte +7 -0
  131. package/dist/components/primitives/tooltip/tooltip-trigger.svelte.d.ts +4 -0
  132. package/dist/components/primitives/tooltip/tooltip.svelte +7 -0
  133. package/dist/components/primitives/tooltip/tooltip.svelte.d.ts +4 -0
  134. package/dist/components/viewer/MeshMetadataPanel.svelte +119 -0
  135. package/dist/components/viewer/MeshMetadataPanel.svelte.d.ts +9 -0
  136. package/dist/components/viewer/SceneManager.svelte +32 -21
  137. package/dist/components/viewer/SceneManager.svelte.d.ts +3 -1
  138. package/dist/components/viewer/Viewer.svelte +195 -207
  139. package/dist/components/viewer/Viewer.svelte.d.ts +7 -2
  140. package/dist/components/viewer/ViewerDock.svelte +404 -0
  141. package/dist/components/viewer/ViewerDock.svelte.d.ts +42 -0
  142. package/dist/composables/useFooterItem.svelte.d.ts +1 -1
  143. package/dist/composables/useFooterItem.svelte.js +1 -1
  144. package/dist/compute/liveProgress.svelte.d.ts +16 -0
  145. package/dist/compute/liveProgress.svelte.js +90 -0
  146. package/dist/compute/run-panel-action.d.ts +8 -0
  147. package/dist/compute/run-panel-action.js +12 -0
  148. package/dist/compute/solving.svelte.d.ts +11 -7
  149. package/dist/compute/solving.svelte.js +64 -45
  150. package/dist/compute/useSolveSession.svelte.js +3 -0
  151. package/dist/constants.d.ts +6 -8
  152. package/dist/constants.js +8 -11
  153. package/dist/contexts/hostContext.svelte.d.ts +39 -0
  154. package/dist/contexts/hostContext.svelte.js +9 -0
  155. package/dist/features/chart/plotly-compat.d.ts +15 -0
  156. package/dist/features/chart/plotly-compat.js +124 -0
  157. package/dist/i18n/localeContext.svelte.d.ts +10 -3
  158. package/dist/i18n/localeContext.svelte.js +27 -5
  159. package/dist/i18n/messages.d.ts +164 -2
  160. package/dist/i18n/messages.js +281 -11
  161. package/dist/index.d.ts +6 -1
  162. package/dist/index.js +5 -0
  163. package/dist/public.d.ts +2 -1
  164. package/dist/public.js +1 -0
  165. package/dist/schema/host-support.d.ts +29 -0
  166. package/dist/schema/host-support.js +97 -0
  167. package/dist/schema/option-display.d.ts +12 -0
  168. package/dist/schema/option-display.js +29 -0
  169. package/dist/schema/param-exporter.d.ts +4 -1
  170. package/dist/schema/param-exporter.js +10 -6
  171. package/dist/schema/visibility-rules.d.ts +7 -1
  172. package/dist/schema/visibility-rules.js +38 -0
  173. package/dist/styles/base.css +116 -83
  174. package/dist/types/actionButton.d.ts +17 -3
  175. package/dist/types/presetLabels.d.ts +3 -2
  176. package/dist/types/presetLabels.js +9 -8
  177. package/dist/utils/color-space.d.ts +21 -0
  178. package/dist/utils/color-space.js +90 -0
  179. package/dist/utils/file-download.js +10 -22
  180. package/dist/utils/host-files.d.ts +12 -0
  181. package/dist/utils/host-files.js +46 -0
  182. package/dist/utils/loadScript.d.ts +2 -0
  183. package/dist/utils/loadScript.js +2 -0
  184. package/dist/utils/webp-to-png.d.ts +10 -0
  185. package/dist/utils/webp-to-png.js +41 -0
  186. package/package.json +30 -22
  187. package/src/lib/components/ErrorScreen.svelte +7 -3
  188. package/src/lib/components/compute/AppLayout.svelte +307 -123
  189. package/src/lib/components/compute/CollapsedPanelStrip.svelte +4 -2
  190. package/src/lib/components/compute/ComputeApp.svelte +46 -22
  191. package/src/lib/components/compute/ComputeMessagesDialog.svelte +32 -42
  192. package/src/lib/components/compute/ParameterPresetManager.svelte +16 -65
  193. package/src/lib/components/compute/SolveMessages.svelte +130 -123
  194. package/src/lib/components/layout/AppShell.svelte +10 -6
  195. package/src/lib/components/layout/FooterItemRenderer.svelte +2 -2
  196. package/src/lib/components/layout/PageContent.svelte +3 -2
  197. package/src/lib/components/layout/PageFooter.svelte +26 -14
  198. package/src/lib/components/layout/PageHeader.svelte +14 -10
  199. package/src/lib/components/layout/SectionHeader.svelte +4 -2
  200. package/src/lib/components/layout/SideNav.svelte +57 -8
  201. package/src/lib/components/layout/SubNav.svelte +2 -2
  202. package/src/lib/components/preview/ChartOutput.svelte +131 -65
  203. package/src/lib/components/preview/Group.svelte +42 -22
  204. package/src/lib/components/preview/HelpButton.svelte +5 -3
  205. package/src/lib/components/preview/ImageOutput.svelte +435 -71
  206. package/src/lib/components/preview/InputControl.svelte +125 -51
  207. package/src/lib/components/preview/OutputDisplay.svelte +42 -28
  208. package/src/lib/components/preview/TabBar.svelte +8 -6
  209. package/src/lib/components/preview/TabContent.svelte +66 -31
  210. package/src/lib/components/preview/TabLayout.svelte +29 -8
  211. package/src/lib/components/preview/inputs/CheckboxInput.svelte +1 -1
  212. package/src/lib/components/preview/inputs/ChecklistInput.svelte +11 -6
  213. package/src/lib/components/preview/inputs/ColorInput.svelte +357 -13
  214. package/src/lib/components/preview/inputs/DropdownInput.svelte +20 -5
  215. package/src/lib/components/preview/inputs/FileInput.svelte +115 -103
  216. package/src/lib/components/preview/inputs/GeometryInput.svelte +128 -0
  217. package/src/lib/components/preview/inputs/NumberInput.svelte +98 -16
  218. package/src/lib/components/preview/inputs/OptionGlyph.svelte +29 -0
  219. package/src/lib/components/preview/inputs/SegmentedInput.svelte +45 -0
  220. package/src/lib/components/preview/inputs/TextInput.svelte +11 -6
  221. package/src/lib/components/preview/inputs/TileInput.svelte +83 -0
  222. package/src/lib/components/preview/inputs/index.ts +3 -0
  223. package/src/lib/components/primitives/CalculateButton.svelte +56 -24
  224. package/src/lib/components/primitives/Callout.svelte +9 -7
  225. package/src/lib/components/primitives/DataTable.svelte +38 -4
  226. package/src/lib/components/primitives/FilterableDropdown.svelte +14 -2
  227. package/src/lib/components/primitives/ImageUploadField.svelte +1 -1
  228. package/src/lib/components/primitives/IssueList.svelte +1 -1
  229. package/src/lib/components/primitives/SeverityIcon.svelte +1 -1
  230. package/src/lib/components/primitives/SolvingIndicator.svelte +245 -15
  231. package/src/lib/components/primitives/StateDisplay.svelte +1 -1
  232. package/src/lib/components/primitives/alert-dialog/alert-dialog-action.svelte +2 -2
  233. package/src/lib/components/primitives/alert-dialog/alert-dialog-cancel.svelte +2 -2
  234. package/src/lib/components/primitives/alert-dialog/alert-dialog-content.svelte +2 -2
  235. package/src/lib/components/primitives/alert-dialog/alert-dialog-description.svelte +1 -1
  236. package/src/lib/components/primitives/alert-dialog/alert-dialog-footer.svelte +1 -1
  237. package/src/lib/components/primitives/alert-dialog/alert-dialog-header.svelte +1 -1
  238. package/src/lib/components/primitives/alert-dialog/alert-dialog-overlay.svelte +1 -1
  239. package/src/lib/components/primitives/alert-dialog/alert-dialog-title.svelte +1 -1
  240. package/src/lib/components/primitives/badge/badge.svelte +5 -5
  241. package/src/lib/components/primitives/button/button.svelte +10 -8
  242. package/src/lib/components/primitives/button-group/button-group-separator.svelte +2 -2
  243. package/src/lib/components/primitives/button-group/button-group-text.svelte +1 -1
  244. package/src/lib/components/primitives/button-group/button-group.svelte +1 -1
  245. package/src/lib/components/primitives/card/card-content.svelte +1 -1
  246. package/src/lib/components/primitives/card/card-description.svelte +1 -1
  247. package/src/lib/components/primitives/card/card-footer.svelte +1 -1
  248. package/src/lib/components/primitives/card/card-header.svelte +1 -1
  249. package/src/lib/components/primitives/card/card-title.svelte +1 -1
  250. package/src/lib/components/primitives/card/card.svelte +2 -2
  251. package/src/lib/components/primitives/checkbox/checkbox.svelte +2 -2
  252. package/src/lib/components/primitives/command/command-dialog.svelte +2 -2
  253. package/src/lib/components/primitives/command/command-empty.svelte +1 -1
  254. package/src/lib/components/primitives/command/command-group.svelte +1 -1
  255. package/src/lib/components/primitives/command/command-input.svelte +3 -3
  256. package/src/lib/components/primitives/command/command-item.svelte +2 -2
  257. package/src/lib/components/primitives/command/command-link-item.svelte +2 -2
  258. package/src/lib/components/primitives/command/command-list.svelte +1 -1
  259. package/src/lib/components/primitives/command/command-separator.svelte +1 -1
  260. package/src/lib/components/primitives/command/command-shortcut.svelte +1 -1
  261. package/src/lib/components/primitives/command/command.svelte +2 -2
  262. package/src/lib/components/primitives/context-menu/context-menu-checkbox-item.svelte +2 -2
  263. package/src/lib/components/primitives/context-menu/context-menu-content.svelte +2 -2
  264. package/src/lib/components/primitives/context-menu/context-menu-group-heading.svelte +1 -1
  265. package/src/lib/components/primitives/context-menu/context-menu-item.svelte +2 -2
  266. package/src/lib/components/primitives/context-menu/context-menu-label.svelte +1 -1
  267. package/src/lib/components/primitives/context-menu/context-menu-radio-item.svelte +2 -2
  268. package/src/lib/components/primitives/context-menu/context-menu-separator.svelte +1 -1
  269. package/src/lib/components/primitives/context-menu/context-menu-shortcut.svelte +1 -1
  270. package/src/lib/components/primitives/context-menu/context-menu-sub-content.svelte +2 -2
  271. package/src/lib/components/primitives/context-menu/context-menu-sub-trigger.svelte +2 -2
  272. package/src/lib/components/primitives/dialog/dialog-content.svelte +8 -4
  273. package/src/lib/components/primitives/dialog/dialog-description.svelte +1 -1
  274. package/src/lib/components/primitives/dialog/dialog-footer.svelte +1 -1
  275. package/src/lib/components/primitives/dialog/dialog-header.svelte +1 -1
  276. package/src/lib/components/primitives/dialog/dialog-overlay.svelte +1 -1
  277. package/src/lib/components/primitives/dialog/dialog-title.svelte +1 -1
  278. package/src/lib/components/primitives/drawer/Drawer.svelte +1 -1
  279. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-checkbox-item.svelte +32 -12
  280. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-content.svelte +6 -2
  281. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-group-heading.svelte +1 -1
  282. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-item.svelte +5 -3
  283. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-label.svelte +1 -1
  284. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-radio-item.svelte +2 -2
  285. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-separator.svelte +1 -1
  286. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-shortcut.svelte +2 -2
  287. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-sub-content.svelte +2 -2
  288. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-sub-trigger.svelte +2 -2
  289. package/src/lib/components/primitives/empty/empty-content.svelte +1 -1
  290. package/src/lib/components/primitives/empty/empty-description.svelte +1 -1
  291. package/src/lib/components/primitives/empty/empty-header.svelte +1 -1
  292. package/src/lib/components/primitives/empty/empty-media.svelte +1 -1
  293. package/src/lib/components/primitives/empty/empty-title.svelte +1 -1
  294. package/src/lib/components/primitives/empty/empty.svelte +1 -1
  295. package/src/lib/components/primitives/field/field-content.svelte +1 -1
  296. package/src/lib/components/primitives/field/field-description.svelte +1 -1
  297. package/src/lib/components/primitives/field/field-error.svelte +1 -1
  298. package/src/lib/components/primitives/field/field-group.svelte +1 -1
  299. package/src/lib/components/primitives/field/field-label.svelte +2 -2
  300. package/src/lib/components/primitives/field/field-legend.svelte +1 -1
  301. package/src/lib/components/primitives/field/field-separator.svelte +2 -2
  302. package/src/lib/components/primitives/field/field-set.svelte +1 -1
  303. package/src/lib/components/primitives/field/field-title.svelte +1 -1
  304. package/src/lib/components/primitives/field/field.svelte +1 -1
  305. package/src/lib/components/primitives/index.ts +1 -1
  306. package/src/lib/components/primitives/input/input.svelte +5 -5
  307. package/src/lib/components/primitives/input-group/input-group-addon.svelte +1 -1
  308. package/src/lib/components/primitives/input-group/input-group-button.svelte +2 -2
  309. package/src/lib/components/primitives/input-group/input-group-input.svelte +2 -2
  310. package/src/lib/components/primitives/input-group/input-group-text.svelte +1 -1
  311. package/src/lib/components/primitives/input-group/input-group-textarea.svelte +2 -2
  312. package/src/lib/components/primitives/input-group/input-group.svelte +2 -2
  313. package/src/lib/components/primitives/label/label.svelte +1 -1
  314. package/src/lib/components/primitives/mode-toggle/mode-toggle.svelte +5 -2
  315. package/src/lib/components/primitives/popover/popover-content.svelte +2 -2
  316. package/src/lib/components/primitives/popover/popover-description.svelte +1 -1
  317. package/src/lib/components/primitives/popover/popover-header.svelte +1 -1
  318. package/src/lib/components/primitives/popover/popover-title.svelte +1 -1
  319. package/src/lib/components/primitives/popover/popover-trigger.svelte +1 -1
  320. package/src/lib/components/primitives/resizable/resizable-handle.svelte +3 -3
  321. package/src/lib/components/primitives/resizable/resizable-pane-group.svelte +1 -1
  322. package/src/lib/components/primitives/scroll-area/scroll-area-scrollbar.svelte +1 -1
  323. package/src/lib/components/primitives/scroll-area/scroll-area.svelte +2 -2
  324. package/src/lib/components/primitives/search/search.svelte +3 -3
  325. package/src/lib/components/primitives/select/select-content.svelte +2 -2
  326. package/src/lib/components/primitives/select/select-group-heading.svelte +1 -1
  327. package/src/lib/components/primitives/select/select-item.svelte +2 -2
  328. package/src/lib/components/primitives/select/select-label.svelte +1 -1
  329. package/src/lib/components/primitives/select/select-scroll-down-button.svelte +1 -1
  330. package/src/lib/components/primitives/select/select-scroll-up-button.svelte +1 -1
  331. package/src/lib/components/primitives/select/select-separator.svelte +2 -2
  332. package/src/lib/components/primitives/select/select-trigger.svelte +2 -2
  333. package/src/lib/components/primitives/separator/separator.svelte +1 -1
  334. package/src/lib/components/primitives/slider/slider.svelte +9 -4
  335. package/src/lib/components/primitives/spinner/spinner.svelte +1 -1
  336. package/src/lib/components/primitives/switch/switch.svelte +2 -2
  337. package/src/lib/components/primitives/tabs/tabs-content.svelte +1 -1
  338. package/src/lib/components/primitives/tabs/tabs-list.svelte +3 -3
  339. package/src/lib/components/primitives/tabs/tabs-trigger.svelte +4 -4
  340. package/src/lib/components/primitives/tabs/tabs.svelte +1 -1
  341. package/src/lib/components/primitives/textarea/textarea.svelte +2 -2
  342. package/src/lib/components/primitives/toggle/toggle.svelte +12 -4
  343. package/src/lib/components/primitives/toggle-group/toggle-group-item.svelte +3 -3
  344. package/src/lib/components/primitives/toggle-group/toggle-group.svelte +3 -3
  345. package/src/lib/components/primitives/tooltip/index.ts +19 -0
  346. package/src/lib/components/primitives/tooltip/tooltip-content.svelte +34 -0
  347. package/src/lib/components/primitives/tooltip/tooltip-portal.svelte +7 -0
  348. package/src/lib/components/primitives/tooltip/tooltip-provider.svelte +7 -0
  349. package/src/lib/components/primitives/tooltip/tooltip-trigger.svelte +7 -0
  350. package/src/lib/components/primitives/tooltip/tooltip.svelte +7 -0
  351. package/src/lib/components/viewer/MeshMetadataPanel.svelte +119 -0
  352. package/src/lib/components/viewer/SceneManager.svelte +32 -21
  353. package/src/lib/components/viewer/Viewer.svelte +196 -208
  354. package/src/lib/components/viewer/ViewerDock.svelte +404 -0
  355. package/src/lib/composables/useFooterItem.svelte.ts +1 -1
  356. package/src/lib/compute/liveProgress.svelte.ts +103 -0
  357. package/src/lib/compute/run-panel-action.ts +16 -0
  358. package/src/lib/compute/solving.svelte.ts +66 -50
  359. package/src/lib/compute/useSolveSession.svelte.ts +3 -0
  360. package/src/lib/constants.ts +8 -11
  361. package/src/lib/contexts/hostContext.svelte.ts +51 -0
  362. package/src/lib/features/chart/plotly-compat.ts +141 -0
  363. package/src/lib/i18n/localeContext.svelte.ts +40 -5
  364. package/src/lib/i18n/messages.ts +487 -13
  365. package/src/lib/index.ts +23 -0
  366. package/src/lib/public.ts +2 -0
  367. package/src/lib/schema/host-support.ts +129 -0
  368. package/src/lib/schema/option-display.ts +44 -0
  369. package/src/lib/schema/param-exporter.ts +10 -7
  370. package/src/lib/schema/visibility-rules.ts +50 -1
  371. package/src/lib/styles/base.css +116 -83
  372. package/src/lib/types/actionButton.ts +16 -3
  373. package/src/lib/types/presetLabels.ts +13 -11
  374. package/src/lib/utils/color-space.ts +107 -0
  375. package/src/lib/utils/file-download.ts +11 -21
  376. package/src/lib/utils/host-files.ts +61 -0
  377. package/src/lib/utils/loadScript.ts +3 -0
  378. package/src/lib/utils/webp-to-png.ts +48 -0
  379. package/dist/components/primitives/theme-switcher/ThemeSwitcher.svelte +0 -39
  380. package/dist/components/primitives/theme-switcher/ThemeSwitcher.svelte.d.ts +0 -3
  381. package/dist/components/primitives/theme-switcher/index.d.ts +0 -1
  382. package/dist/components/primitives/theme-switcher/index.js +0 -1
  383. package/dist/components/viewer/MeshMetadataDialog.svelte +0 -126
  384. package/dist/components/viewer/MeshMetadataDialog.svelte.d.ts +0 -10
  385. package/dist/styles/themes/cyberpunk.css +0 -98
  386. package/dist/styles/themes/neutral.css +0 -72
  387. package/dist/styles/themes/ocean.css +0 -75
  388. package/dist/styles/themes/selva.css +0 -105
  389. package/dist/theme/themeStore.svelte.d.ts +0 -12
  390. package/dist/theme/themeStore.svelte.js +0 -40
  391. package/dist/theme/themes.d.ts +0 -5
  392. package/dist/theme/themes.js +0 -13
  393. package/src/lib/components/primitives/theme-switcher/ThemeSwitcher.svelte +0 -39
  394. package/src/lib/components/primitives/theme-switcher/index.ts +0 -1
  395. package/src/lib/components/viewer/MeshMetadataDialog.svelte +0 -126
  396. package/src/lib/styles/themes/cyberpunk.css +0 -98
  397. package/src/lib/styles/themes/neutral.css +0 -72
  398. package/src/lib/styles/themes/ocean.css +0 -75
  399. package/src/lib/styles/themes/selva.css +0 -105
  400. package/src/lib/theme/themeStore.svelte.ts +0 -50
  401. package/src/lib/theme/themes.ts +0 -18
@@ -1,31 +1,261 @@
1
1
  <script lang="ts">
2
+ import { untrack } from 'svelte';
3
+ import { fade } from 'svelte/transition';
4
+ import { Check, LoaderCircle } from '@lucide/svelte';
5
+ import { EMPTY_LIVE_SOLVE, type LiveSolveState } from '@selvajs/solve/client';
6
+ import { Button } from '#lib/components/primitives/button/index.js';
7
+ import { createLiveProgress } from '#lib/compute/liveProgress.svelte.js';
2
8
  import { getLocaleContext } from '../../i18n/localeContext.svelte';
3
9
 
10
+ // The solve status in a panel's action row. It grows only as far as the solve needs: a quiet
11
+ // "up to date" row, a pill once a solve is visible, a card with progress and Abort once it is
12
+ // slow. It grows upward over the fields, so the footer never changes height.
4
13
  interface Props {
14
+ /** The raw flag: times the solve, and acknowledges one too short to show. */
15
+ isSolving: boolean;
16
+ /** `createSolvingIndicator(...).show`. */
5
17
  show: boolean;
18
+ /** `createSolvingIndicator(...).slow`. */
19
+ slow?: boolean;
20
+ /** Live progress for the card. Without it the card's bar is indeterminate. */
21
+ live?: LiveSolveState;
22
+ /** Without it the card has no Abort button; Esc still works where the host handles it. */
23
+ onabort?: () => void;
24
+ /**
25
+ * The page can't repaint mid-solve (see `createSolvingIndicator`): the pill says Esc aborts
26
+ * instead of counting seconds, and never grows into the card.
27
+ */
28
+ freezesDuringSolve?: boolean;
6
29
  }
7
30
 
8
- let { show }: Props = $props();
31
+ let {
32
+ isSolving,
33
+ show,
34
+ slow = false,
35
+ live,
36
+ onabort,
37
+ freezesDuringSolve = false
38
+ }: Props = $props();
9
39
 
10
40
  const locale = getLocaleContext();
11
41
  const t = $derived(locale.messages);
42
+
43
+ const DONE_VISIBLE_MS = 1400;
44
+ // A drag fires a solve per step; one acknowledgement per this many ms is enough.
45
+ const PING_EVERY_MS = 500;
46
+
47
+ const progress = createLiveProgress(() => live ?? EMPTY_LIVE_SOLVE);
48
+ const head = $derived(progress.headline ?? progress.progress[0]);
49
+ const bar = $derived(
50
+ head?.fraction === undefined
51
+ ? undefined
52
+ : (progress.bars[head.source ?? ''] ?? { width: head.fraction, ms: 150 })
53
+ );
54
+
55
+ let startedAt = 0;
56
+ let elapsed = $state(0);
57
+ let finished = $state<{ ms: number; aborted: boolean } | null>(null);
58
+ let ping = $state(0);
59
+ let lastPingAt = 0;
60
+ // Not `show` itself at the solve's end: the host's indicator may already have dropped it.
61
+ let shownThisSolve = false;
62
+
63
+ $effect(() => {
64
+ if (show) shownThisSolve = true;
65
+ });
66
+
67
+ $effect(() => {
68
+ const solving = isSolving;
69
+ untrack(() => {
70
+ if (solving) {
71
+ startedAt = performance.now();
72
+ shownThisSolve = show;
73
+ elapsed = 0;
74
+ finished = null;
75
+ return;
76
+ }
77
+ if (!startedAt) return;
78
+ const ms = performance.now() - startedAt;
79
+ startedAt = 0;
80
+ if (shownThisSolve) {
81
+ finished = { ms, aborted: live?.ended?.kind === 'aborted' };
82
+ } else if (performance.now() - lastPingAt > PING_EVERY_MS) {
83
+ lastPingAt = performance.now();
84
+ ping++;
85
+ }
86
+ });
87
+ });
88
+
89
+ $effect(() => {
90
+ if (!finished) return;
91
+ const timer = setTimeout(() => (finished = null), DONE_VISIBLE_MS);
92
+ return () => clearTimeout(timer);
93
+ });
94
+
95
+ $effect(() => {
96
+ if (!isSolving || !show || freezesDuringSolve) return;
97
+ const tick = () => (elapsed = performance.now() - startedAt);
98
+ tick();
99
+ const id = setInterval(tick, 100);
100
+ return () => clearInterval(id);
101
+ });
102
+
103
+ // Done wins over a held `show`: the indicator outlives the solve by up to its minimum time,
104
+ // and saying "Solving" over a result that has already landed would be wrong.
105
+ const mode = $derived<'idle' | 'work' | 'card' | 'done'>(
106
+ finished ? 'done' : show ? (slow && !freezesDuringSolve ? 'card' : 'work') : 'idle'
107
+ );
108
+
109
+ const seconds = $derived(
110
+ new Intl.NumberFormat(locale.locale, { minimumFractionDigits: 1, maximumFractionDigits: 1 })
111
+ );
112
+ const fmt = (ms: number) => `${seconds.format(ms / 1000)} s`;
113
+
114
+ const announcement = $derived(
115
+ mode === 'work' || mode === 'card'
116
+ ? t.solvingEllipsis
117
+ : mode === 'done'
118
+ ? finished?.aborted
119
+ ? t.solveStopped
120
+ : t.solveDone
121
+ : ''
122
+ );
12
123
  </script>
13
124
 
14
- {#if show}
125
+ <div class="h-9 min-w-0 relative flex-1">
126
+ <!-- The live region stays mounted: a screen reader only announces text that changes inside a
127
+ region it already knows about, so one created together with its text says nothing. -->
128
+ <div role="status" aria-live="polite" aria-atomic="true" class="sr-only">{announcement}</div>
129
+
15
130
  <div
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"
131
+ class="inset-x-0 bottom-0 backdrop-blur-md ease-out absolute z-10 overflow-hidden border border-border-strong transition-all duration-300 motion-reduce:transition-none {mode ===
132
+ 'card'
133
+ ? 'h-24 shadow-md rounded-lg bg-card/75'
134
+ : mode === 'idle'
135
+ ? 'h-9 shadow-sm rounded-md bg-card/90'
136
+ : 'h-9 shadow-md rounded-md bg-card/75'}"
137
+ data-testid="solve-status"
138
+ data-state={mode}
17
139
  >
18
- <div class="h-5 w-5 relative flex shrink-0 items-center justify-center">
19
- <div
20
- class="animate-ping absolute h-full w-full rounded-full bg-primary-foreground opacity-30"
21
- ></div>
140
+ {#if mode === 'card'}
22
141
  <div
23
- class="h-3 w-3 animate-spin rounded-full border-2 border-primary-foreground border-t-transparent"
24
- ></div>
25
- </div>
26
- <div class="leading-tight flex flex-col">
27
- <span class="text-sm font-semibold">{t.solving}</span>
28
- <span class="text-xs opacity-70">{t.solvingSubtitle}</span>
29
- </div>
142
+ class="px-3 gap-2 flex h-full flex-col justify-center"
143
+ in:fade={{ duration: 150, delay: 80 }}
144
+ >
145
+ <div class="gap-2 min-w-0 flex items-center">
146
+ <LoaderCircle
147
+ class="size-4 animate-spin shrink-0 text-muted-foreground"
148
+ aria-hidden="true"
149
+ />
150
+ <span class="text-sm font-medium min-w-0 flex-1 truncate">{head?.label ?? t.solving}</span
151
+ >
152
+ {#if head?.done !== undefined && head?.total !== undefined}
153
+ <span class="text-xs shrink-0 text-muted-foreground tabular-nums">
154
+ {head.done} / {head.total}
155
+ </span>
156
+ {/if}
157
+ </div>
158
+ <div
159
+ class="h-1 overflow-hidden rounded-full bg-muted"
160
+ role="progressbar"
161
+ aria-label={head?.label ?? t.solving}
162
+ aria-valuemin={0}
163
+ aria-valuemax={100}
164
+ aria-valuenow={bar ? Math.round(bar.width * 100) : undefined}
165
+ >
166
+ {#if bar}
167
+ <div
168
+ class="h-full w-(--bar-width) rounded-full bg-primary transition-all duration-(--bar-ms) ease-linear"
169
+ style:--bar-width="{bar.width * 100}%"
170
+ style:--bar-ms="{bar.ms}ms"
171
+ ></div>
172
+ {:else}
173
+ <div class="animate-pulse h-full w-1/3 rounded-full bg-primary/60"></div>
174
+ {/if}
175
+ </div>
176
+ <div class="gap-2 flex items-center">
177
+ <span class="text-xs text-muted-foreground tabular-nums">{fmt(elapsed)}</span>
178
+ {#if onabort}
179
+ <Button
180
+ variant="outline"
181
+ size="xs"
182
+ class="ml-auto shrink-0"
183
+ onclick={onabort}
184
+ aria-keyshortcuts="Escape"
185
+ title={t.solveMessagesEscHint}
186
+ >
187
+ {t.solveMessagesAbort}
188
+ <kbd
189
+ class="px-1 rounded-sm border border-border font-sans text-2xs text-muted-foreground"
190
+ >
191
+ Esc
192
+ </kbd>
193
+ </Button>
194
+ {/if}
195
+ </div>
196
+ </div>
197
+ {:else if mode === 'work'}
198
+ <div class="px-3 gap-2 flex h-full items-center" in:fade={{ duration: 150, delay: 80 }}>
199
+ <LoaderCircle
200
+ class="size-4 animate-spin shrink-0 text-muted-foreground"
201
+ aria-hidden="true"
202
+ />
203
+ {#if freezesDuringSolve}
204
+ <span class="text-sm font-medium shrink-0">{t.solvingEllipsis}</span>
205
+ <span class="text-xs min-w-0 truncate text-muted-foreground" data-testid="solve-esc-hint">
206
+ {t.solveMessagesEscHint}
207
+ </span>
208
+ {:else}
209
+ <span class="text-sm font-medium shrink-0">{t.solving}</span>
210
+ <span class="text-xs text-muted-foreground tabular-nums">{fmt(elapsed)}</span>
211
+ {/if}
212
+ </div>
213
+ {:else if mode === 'done' && finished}
214
+ <div class="px-3 gap-2 flex h-full items-center" in:fade={{ duration: 150, delay: 80 }}>
215
+ {#if finished.aborted}
216
+ <span class="text-sm font-medium min-w-0 truncate">{t.solveStopped}</span>
217
+ {:else}
218
+ <Check class="size-4 shrink-0 text-success" aria-hidden="true" />
219
+ <span class="text-sm font-medium shrink-0">{t.solveDone}</span>
220
+ <span class="text-xs text-muted-foreground tabular-nums">{fmt(finished.ms)}</span>
221
+ {/if}
222
+ </div>
223
+ {:else}
224
+ <div class="px-3 gap-2 flex h-full items-center" in:fade={{ duration: 150 }}>
225
+ <span class="size-1.5 relative shrink-0 rounded-full bg-success">
226
+ {#key ping}
227
+ {#if ping > 0}
228
+ <span class="solve-ping inset-0 absolute rounded-full border-2 border-success"></span>
229
+ {/if}
230
+ {/key}
231
+ </span>
232
+ <span class="text-sm min-w-0 truncate text-muted-foreground">{t.upToDate}</span>
233
+ </div>
234
+ {/if}
30
235
  </div>
31
- {/if}
236
+ </div>
237
+
238
+ <style>
239
+ /* One ring that grows and fades: the result landed faster than an indicator could show. */
240
+ .solve-ping {
241
+ animation: solve-ping 0.6s ease-out forwards;
242
+ }
243
+
244
+ @keyframes solve-ping {
245
+ from {
246
+ transform: scale(1);
247
+ opacity: 0.9;
248
+ }
249
+ to {
250
+ transform: scale(3.2);
251
+ opacity: 0;
252
+ }
253
+ }
254
+
255
+ @media (prefers-reduced-motion: reduce) {
256
+ .solve-ping {
257
+ animation: none;
258
+ opacity: 0;
259
+ }
260
+ }
261
+ </style>
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import { Inbox } from '@lucide/svelte';
3
- import { cn } from '$lib/utils.js';
3
+ import { cn } from '#lib/utils.js';
4
4
  import * as Empty from './empty';
5
5
  import { Spinner } from './spinner';
6
6
  import SeverityIcon from './SeverityIcon.svelte';
@@ -4,8 +4,8 @@
4
4
  buttonVariants,
5
5
  type ButtonSize,
6
6
  type ButtonVariant
7
- } from '$lib/components/primitives/button/index.js';
8
- import { cn } from '$lib/utils.js';
7
+ } from '#lib/components/primitives/button/index.js';
8
+ import { cn } from '#lib/utils.js';
9
9
 
10
10
  let {
11
11
  ref = $bindable(null),
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">
2
2
  import { AlertDialog as AlertDialogPrimitive } from 'bits-ui';
3
- import { buttonVariants } from '$lib/components/primitives/button/index.js';
4
- import { cn } from '$lib/utils.js';
3
+ import { buttonVariants } from '#lib/components/primitives/button/index.js';
4
+ import { cn } from '#lib/utils.js';
5
5
 
6
6
  let {
7
7
  ref = $bindable(null),
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">
2
2
  import { AlertDialog as AlertDialogPrimitive } from 'bits-ui';
3
3
  import AlertDialogOverlay from './alert-dialog-overlay.svelte';
4
- import { cn, type WithoutChild, type WithoutChildrenOrChild } from '$lib/utils.js';
4
+ import { cn, type WithoutChild, type WithoutChildrenOrChild } from '#lib/utils.js';
5
5
 
6
6
  let {
7
7
  ref = $bindable(null),
@@ -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-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',
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 sm:max-w-lg fixed start-1/2 top-1/2 z-50 grid max-h-dialog w-screen-inset -translate-x-1/2 -translate-y-1/2 overflow-y-auto rounded-xl border bg-raised shadow-popover duration-200',
23
23
  className
24
24
  )}
25
25
  {...restProps}
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import { AlertDialog as AlertDialogPrimitive } from 'bits-ui';
3
- import { cn } from '$lib/utils.js';
3
+ import { cn } from '#lib/utils.js';
4
4
 
5
5
  let {
6
6
  ref = $bindable(null),
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">
2
- import { cn, type WithElementRef } from '$lib/utils.js';
2
+ import { cn, type WithElementRef } from '#lib/utils.js';
3
3
  import type { HTMLAttributes } from 'svelte/elements';
4
4
 
5
5
  let {
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import type { HTMLAttributes } from 'svelte/elements';
3
- import { cn, type WithElementRef } from '$lib/utils.js';
3
+ import { cn, type WithElementRef } from '#lib/utils.js';
4
4
 
5
5
  let {
6
6
  ref = $bindable(null),
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import { AlertDialog as AlertDialogPrimitive } from 'bits-ui';
3
- import { cn } from '$lib/utils.js';
3
+ import { cn } from '#lib/utils.js';
4
4
 
5
5
  let {
6
6
  ref = $bindable(null),
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import { AlertDialog as AlertDialogPrimitive } from 'bits-ui';
3
- import { cn } from '$lib/utils.js';
3
+ import { cn } from '#lib/utils.js';
4
4
 
5
5
  let {
6
6
  ref = $bindable(null),
@@ -2,15 +2,15 @@
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 focus-visible:ring-3 [&>svg]:pointer-events-none [&>svg]:size-3',
5
+ base: 'focus-visible:border-ring focus-visible:ring-ring 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
- 'bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90 border-transparent',
10
+ 'bg-secondary text-secondary-foreground [a&]:hover:bg-selected 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-destructive-foreground',
13
- outline: 'text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground'
12
+ 'bg-destructive [a&]:hover:bg-destructive/90 dark:bg-destructive/70 border-transparent text-destructive-foreground',
13
+ outline: 'text-foreground [a&]:hover:bg-hover [a&]:hover:text-foreground'
14
14
  }
15
15
  },
16
16
  defaultVariants: {
@@ -23,7 +23,7 @@
23
23
 
24
24
  <script lang="ts">
25
25
  import type { HTMLAnchorAttributes } from 'svelte/elements';
26
- import { cn, type WithElementRef } from '$lib/utils.js';
26
+ import { cn, type WithElementRef } from '#lib/utils.js';
27
27
 
28
28
  let {
29
29
  ref = $bindable(null),
@@ -1,21 +1,23 @@
1
1
  <script lang="ts" module>
2
- import { cn, type WithElementRef } from '$lib/utils';
2
+ import { cn, type WithElementRef } from '#lib/utils.js';
3
3
  import type { HTMLAnchorAttributes, HTMLButtonAttributes } from 'svelte/elements';
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-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",
7
+ base: "focus-visible:border-ring focus-visible:ring-ring 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
- 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-destructive-foreground',
11
+ destructive: 'bg-destructive shadow-xs hover:bg-destructive/90 text-destructive-foreground',
13
12
  outline:
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
- secondary: 'bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80',
16
- ghost: 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50',
13
+ 'border border-border-strong bg-transparent shadow-xs hover:bg-hover hover:text-foreground',
14
+ // Outline with an opaque dark fill: the translucent one washes out over the light 3D canvas.
15
+ overlay:
16
+ 'border border-border-strong bg-raised shadow-raised hover:bg-muted hover:text-foreground',
17
+ secondary: 'bg-secondary text-secondary-foreground shadow-xs hover:bg-selected',
18
+ ghost: 'hover:bg-hover hover:text-foreground',
17
19
  dashed:
18
- 'border border-dashed border-input bg-background text-muted-foreground hover:bg-muted hover:text-foreground',
20
+ 'border border-dashed border-border-strong bg-transparent text-muted-foreground hover:border-input hover:bg-hover hover:text-foreground',
19
21
  link: 'text-primary underline-offset-4 hover:underline'
20
22
  },
21
23
  size: {
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">
2
- import { cn } from '$lib/utils.js';
2
+ import { cn } from '#lib/utils.js';
3
3
  import type { ComponentProps } from 'svelte';
4
- import { Separator } from '$lib/components/primitives/separator/index.js';
4
+ import { Separator } from '#lib/components/primitives/separator/index.js';
5
5
 
6
6
  let {
7
7
  ref = $bindable(null),
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">
2
- import { cn, type WithElementRef } from '$lib/utils.js';
2
+ import { cn, type WithElementRef } from '#lib/utils.js';
3
3
  import type { HTMLAttributes } from 'svelte/elements';
4
4
  import type { Snippet } from 'svelte';
5
5
 
@@ -20,7 +20,7 @@
20
20
  </script>
21
21
 
22
22
  <script lang="ts">
23
- import { cn, type WithElementRef } from '$lib/utils.js';
23
+ import { cn, type WithElementRef } from '#lib/utils.js';
24
24
  import type { HTMLAttributes } from 'svelte/elements';
25
25
 
26
26
  let {
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import type { HTMLAttributes } from 'svelte/elements';
3
- import { cn, type WithElementRef } from '$lib/utils.js';
3
+ import { cn, type WithElementRef } from '#lib/utils.js';
4
4
 
5
5
  let {
6
6
  ref = $bindable(null),
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import type { HTMLAttributes } from 'svelte/elements';
3
- import { cn, type WithElementRef } from '$lib/utils.js';
3
+ import { cn, type WithElementRef } from '#lib/utils.js';
4
4
 
5
5
  let {
6
6
  ref = $bindable(null),
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">
2
- import { cn, type WithElementRef } from '$lib/utils.js';
2
+ import { cn, type WithElementRef } from '#lib/utils.js';
3
3
  import type { HTMLAttributes } from 'svelte/elements';
4
4
 
5
5
  let {
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">
2
- import { cn, type WithElementRef } from '$lib/utils.js';
2
+ import { cn, type WithElementRef } from '#lib/utils.js';
3
3
  import type { HTMLAttributes } from 'svelte/elements';
4
4
 
5
5
  let {
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import type { HTMLAttributes } from 'svelte/elements';
3
- import { cn, type WithElementRef } from '$lib/utils.js';
3
+ import { cn, type WithElementRef } from '#lib/utils.js';
4
4
 
5
5
  let {
6
6
  ref = $bindable(null),
@@ -2,7 +2,7 @@
2
2
  import { tv, type VariantProps } from 'tailwind-variants';
3
3
 
4
4
  export const cardVariants = tv({
5
- base: 'shadow-sm flex flex-col rounded-xl border bg-card text-card-foreground',
5
+ base: 'shadow-raised flex flex-col rounded-xl border bg-card text-card-foreground',
6
6
  variants: {
7
7
  variant: {
8
8
  default: 'gap-6 py-6',
@@ -18,7 +18,7 @@
18
18
 
19
19
  <script lang="ts">
20
20
  import type { HTMLAttributes } from 'svelte/elements';
21
- import { cn, type WithElementRef } from '$lib/utils.js';
21
+ import { cn, type WithElementRef } from '#lib/utils.js';
22
22
 
23
23
  let {
24
24
  ref = $bindable(null),
@@ -2,7 +2,7 @@
2
2
  import { Checkbox as CheckboxPrimitive } from 'bits-ui';
3
3
  import CheckIcon from '@lucide/svelte/icons/check';
4
4
  import MinusIcon from '@lucide/svelte/icons/minus';
5
- import { cn, type WithoutChildrenOrChild } from '$lib/utils.js';
5
+ import { cn, type WithoutChildrenOrChild } from '#lib/utils.js';
6
6
 
7
7
  let {
8
8
  ref = $bindable(null),
@@ -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-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',
20
+ 'peer size-4 shadow-xs flex shrink-0 items-center justify-center rounded-sm border border-input bg-field transition-shadow outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring 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:aria-invalid:ring-destructive/40 dark:data-[state=checked]:bg-primary',
21
21
  className
22
22
  )}
23
23
  bind:checked
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
- import * as Dialog from '$lib/components/primitives/dialog/index.js';
3
- import { cn, type WithoutChildrenOrChild } from '$lib/utils.js';
2
+ import * as Dialog from '#lib/components/primitives/dialog/index.js';
3
+ import { cn, type WithoutChildrenOrChild } from '#lib/utils.js';
4
4
  import Command from './command.svelte';
5
5
  import type { Command as CommandPrimitive, Dialog as DialogPrimitive } from 'bits-ui';
6
6
  import type { Snippet } from 'svelte';
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import { Command as CommandPrimitive } from 'bits-ui';
3
- import { cn } from '$lib/utils.js';
3
+ import { cn } from '#lib/utils.js';
4
4
 
5
5
  let {
6
6
  ref = $bindable(null),
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import { Command as CommandPrimitive, useId } from 'bits-ui';
3
- import { cn } from '$lib/utils.js';
3
+ import { cn } from '#lib/utils.js';
4
4
 
5
5
  let {
6
6
  ref = $bindable(null),
@@ -1,8 +1,8 @@
1
1
  <script lang="ts">
2
2
  import { Command as CommandPrimitive } from 'bits-ui';
3
- import * as InputGroup from '$lib/components/primitives/input-group/index.js';
3
+ import * as InputGroup from '#lib/components/primitives/input-group/index.js';
4
4
  import SearchIcon from '@lucide/svelte/icons/search';
5
- import { cn } from '$lib/utils.js';
5
+ import { cn } from '#lib/utils.js';
6
6
 
7
7
  let {
8
8
  ref = $bindable(null),
@@ -14,7 +14,7 @@
14
14
 
15
15
  <div data-slot="command-input-wrapper" class="p-1 pb-0">
16
16
  <InputGroup.Root
17
- class="h-8! *:data-[slot=input-group-addon]:pl-2! rounded-lg! border-input/30 bg-input/30 shadow-none!"
17
+ class="h-8! *:data-[slot=input-group-addon]:pl-2! rounded-inner! border-border-strong bg-field shadow-none!"
18
18
  >
19
19
  <CommandPrimitive.Input
20
20
  {value}
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">
2
2
  import { Command as CommandPrimitive } from 'bits-ui';
3
3
  import CheckIcon from '@lucide/svelte/icons/check';
4
- import { cn } from '$lib/utils.js';
4
+ import { cn } from '#lib/utils.js';
5
5
 
6
6
  let {
7
7
  ref = $bindable(null),
@@ -15,7 +15,7 @@
15
15
  bind:ref
16
16
  data-slot="command-item"
17
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",
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-inner outline-hidden select-none in-data-[slot=dialog-content]:rounded-lg! data-selected:bg-selected data-selected:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 data-selected:*:[svg]:text-foreground",
19
19
  'data-disabled:pointer-events-none data-disabled:opacity-50',
20
20
  className
21
21
  )}
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import { Command as CommandPrimitive } from 'bits-ui';
3
- import { cn } from '$lib/utils.js';
3
+ import { cn } from '#lib/utils.js';
4
4
 
5
5
  let {
6
6
  ref = $bindable(null),
@@ -13,7 +13,7 @@
13
13
  bind:ref
14
14
  data-slot="command-item"
15
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",
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-inner outline-hidden select-none in-data-[slot=dialog-content]:rounded-lg! data-selected:bg-selected data-selected:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 data-selected:*:[svg]:text-foreground",
17
17
  'data-disabled:pointer-events-none data-disabled:opacity-50',
18
18
  className
19
19
  )}
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import { Command as CommandPrimitive } from 'bits-ui';
3
- import { cn } from '$lib/utils.js';
3
+ import { cn } from '#lib/utils.js';
4
4
 
5
5
  let {
6
6
  ref = $bindable(null),