@selvajs/ui 6.6.0-beta.9 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (345) hide show
  1. package/README.md +0 -3
  2. package/dist/components/ErrorScreen.svelte +1 -1
  3. package/dist/components/compute/AppLayout.svelte +73 -45
  4. package/dist/components/compute/AppLayout.svelte.d.ts +14 -2
  5. package/dist/components/compute/CollapsedPanelStrip.svelte +4 -2
  6. package/dist/components/compute/ComputeApp.svelte +6 -2
  7. package/dist/components/compute/ComputeApp.svelte.d.ts +1 -1
  8. package/dist/components/compute/ComputeMessagesDialog.svelte +3 -3
  9. package/dist/components/compute/ParameterPresetManager.svelte +1 -1
  10. package/dist/components/compute/SolveMessages.svelte +79 -88
  11. package/dist/components/compute/SolveMessages.svelte.d.ts +5 -0
  12. package/dist/components/layout/AppShell.svelte +2 -2
  13. package/dist/components/layout/FooterItemRenderer.svelte +2 -2
  14. package/dist/components/layout/FooterItemRenderer.svelte.d.ts +1 -1
  15. package/dist/components/layout/PageContent.svelte +3 -2
  16. package/dist/components/layout/PageFooter.svelte +5 -5
  17. package/dist/components/layout/PageHeader.svelte +3 -3
  18. package/dist/components/layout/SideNav.svelte +3 -3
  19. package/dist/components/layout/SubNav.svelte +2 -2
  20. package/dist/components/preview/ChartOutput.svelte +141 -50
  21. package/dist/components/preview/Group.svelte +9 -9
  22. package/dist/components/preview/HelpButton.svelte +1 -1
  23. package/dist/components/preview/ImageOutput.svelte +13 -10
  24. package/dist/components/preview/InputControl.svelte +13 -12
  25. package/dist/components/preview/OutputDisplay.svelte +26 -17
  26. package/dist/components/preview/TabBar.svelte +8 -6
  27. package/dist/components/preview/TabBar.svelte.d.ts +2 -0
  28. package/dist/components/preview/TabContent.svelte +8 -8
  29. package/dist/components/preview/TabLayout.svelte +6 -7
  30. package/dist/components/preview/inputs/CheckboxInput.svelte +1 -1
  31. package/dist/components/preview/inputs/ChecklistInput.svelte +5 -5
  32. package/dist/components/preview/inputs/ColorInput.svelte +356 -14
  33. package/dist/components/preview/inputs/ColorInput.svelte.d.ts +1 -0
  34. package/dist/components/preview/inputs/DropdownInput.svelte +3 -3
  35. package/dist/components/preview/inputs/FileInput.svelte +17 -12
  36. package/dist/components/preview/inputs/GeometryInput.svelte +4 -4
  37. package/dist/components/preview/inputs/GeometryInput.svelte.d.ts +1 -1
  38. package/dist/components/preview/inputs/NumberInput.svelte +8 -8
  39. package/dist/components/preview/inputs/OptionGlyph.svelte +1 -1
  40. package/dist/components/preview/inputs/OptionGlyph.svelte.d.ts +1 -1
  41. package/dist/components/preview/inputs/SegmentedInput.svelte +3 -2
  42. package/dist/components/preview/inputs/TextInput.svelte +5 -5
  43. package/dist/components/preview/inputs/TileInput.svelte +8 -5
  44. package/dist/components/primitives/CalculateButton.svelte +10 -4
  45. package/dist/components/primitives/Callout.svelte +8 -6
  46. package/dist/components/primitives/Callout.svelte.d.ts +4 -4
  47. package/dist/components/primitives/DataTable.svelte +1 -1
  48. package/dist/components/primitives/FilterableDropdown.svelte +13 -1
  49. package/dist/components/primitives/FilterableDropdown.svelte.d.ts +5 -0
  50. package/dist/components/primitives/ImageUploadField.svelte +1 -1
  51. package/dist/components/primitives/SolvingIndicator.svelte +242 -41
  52. package/dist/components/primitives/SolvingIndicator.svelte.d.ts +13 -5
  53. package/dist/components/primitives/alert-dialog/alert-dialog-content.svelte +1 -1
  54. package/dist/components/primitives/badge/badge.svelte +2 -2
  55. package/dist/components/primitives/badge/badge.svelte.d.ts +6 -6
  56. package/dist/components/primitives/button/button.svelte +7 -8
  57. package/dist/components/primitives/button/button.svelte.d.ts +19 -19
  58. package/dist/components/primitives/card/card.svelte +1 -1
  59. package/dist/components/primitives/card/card.svelte.d.ts +1 -1
  60. package/dist/components/primitives/checkbox/checkbox.svelte +1 -1
  61. package/dist/components/primitives/command/command-input.svelte +1 -1
  62. package/dist/components/primitives/command/command-item.svelte +1 -1
  63. package/dist/components/primitives/command/command-link-item.svelte +1 -1
  64. package/dist/components/primitives/command/command.svelte +1 -1
  65. package/dist/components/primitives/context-menu/context-menu-checkbox-item.svelte +1 -1
  66. package/dist/components/primitives/context-menu/context-menu-content.svelte +1 -1
  67. package/dist/components/primitives/context-menu/context-menu-item.svelte +1 -1
  68. package/dist/components/primitives/context-menu/context-menu-radio-item.svelte +1 -1
  69. package/dist/components/primitives/context-menu/context-menu-sub-content.svelte +1 -1
  70. package/dist/components/primitives/context-menu/context-menu-sub-trigger.svelte +1 -1
  71. package/dist/components/primitives/dialog/dialog-content.svelte +3 -3
  72. package/dist/components/primitives/drawer/Drawer.svelte +1 -1
  73. package/dist/components/primitives/dropdown-menu/dropdown-menu-checkbox-item.svelte +31 -11
  74. package/dist/components/primitives/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts +2 -0
  75. package/dist/components/primitives/dropdown-menu/dropdown-menu-content.svelte +5 -1
  76. package/dist/components/primitives/dropdown-menu/dropdown-menu-content.svelte.d.ts +2 -0
  77. package/dist/components/primitives/dropdown-menu/dropdown-menu-item.svelte +4 -2
  78. package/dist/components/primitives/dropdown-menu/dropdown-menu-item.svelte.d.ts +2 -1
  79. package/dist/components/primitives/dropdown-menu/dropdown-menu-radio-item.svelte +1 -1
  80. package/dist/components/primitives/dropdown-menu/dropdown-menu-shortcut.svelte +1 -1
  81. package/dist/components/primitives/dropdown-menu/dropdown-menu-sub-content.svelte +1 -1
  82. package/dist/components/primitives/dropdown-menu/dropdown-menu-sub-trigger.svelte +1 -1
  83. package/dist/components/primitives/index.d.ts +1 -1
  84. package/dist/components/primitives/index.js +1 -1
  85. package/dist/components/primitives/input/input.svelte +2 -2
  86. package/dist/components/primitives/input-group/input-group-input.svelte.d.ts +1 -1
  87. package/dist/components/primitives/input-group/input-group.svelte +1 -1
  88. package/dist/components/primitives/mode-toggle/mode-toggle.svelte +2 -2
  89. package/dist/components/primitives/popover/popover-content.svelte +1 -1
  90. package/dist/components/primitives/resizable/resizable-handle.svelte +2 -2
  91. package/dist/components/primitives/search/search.svelte +1 -1
  92. package/dist/components/primitives/select/select-content.svelte +1 -1
  93. package/dist/components/primitives/select/select-item.svelte +1 -1
  94. package/dist/components/primitives/select/select-trigger.svelte +1 -1
  95. package/dist/components/primitives/slider/slider.svelte +1 -1
  96. package/dist/components/primitives/switch/switch.svelte +1 -1
  97. package/dist/components/primitives/tabs/tabs-list.svelte +2 -2
  98. package/dist/components/primitives/tabs/tabs-list.svelte.d.ts +6 -6
  99. package/dist/components/primitives/tabs/tabs-trigger.svelte +2 -2
  100. package/dist/components/primitives/tabs/tabs-trigger.svelte.d.ts +6 -6
  101. package/dist/components/primitives/textarea/textarea.svelte +1 -1
  102. package/dist/components/primitives/toggle/toggle.svelte +8 -2
  103. package/dist/components/primitives/toggle/toggle.svelte.d.ts +10 -4
  104. package/dist/components/primitives/toggle-group/toggle-group-item.svelte +1 -1
  105. package/dist/components/primitives/toggle-group/toggle-group.svelte +1 -1
  106. package/dist/components/primitives/tooltip/index.d.ts +6 -0
  107. package/dist/components/primitives/tooltip/index.js +8 -0
  108. package/dist/components/primitives/tooltip/tooltip-content.svelte +34 -0
  109. package/dist/components/primitives/tooltip/tooltip-content.svelte.d.ts +10 -0
  110. package/dist/components/primitives/tooltip/tooltip-portal.svelte +7 -0
  111. package/dist/components/primitives/tooltip/tooltip-portal.svelte.d.ts +4 -0
  112. package/dist/components/primitives/tooltip/tooltip-provider.svelte +7 -0
  113. package/dist/components/primitives/tooltip/tooltip-provider.svelte.d.ts +4 -0
  114. package/dist/components/primitives/tooltip/tooltip-trigger.svelte +7 -0
  115. package/dist/components/primitives/tooltip/tooltip-trigger.svelte.d.ts +4 -0
  116. package/dist/components/primitives/tooltip/tooltip.svelte +7 -0
  117. package/dist/components/primitives/tooltip/tooltip.svelte.d.ts +4 -0
  118. package/dist/components/viewer/MeshMetadataPanel.svelte +2 -2
  119. package/dist/components/viewer/SceneManager.svelte +32 -21
  120. package/dist/components/viewer/SceneManager.svelte.d.ts +3 -1
  121. package/dist/components/viewer/Viewer.svelte +128 -178
  122. package/dist/components/viewer/Viewer.svelte.d.ts +7 -2
  123. package/dist/components/viewer/ViewerDock.svelte +404 -0
  124. package/dist/components/viewer/ViewerDock.svelte.d.ts +42 -0
  125. package/dist/composables/useFooterItem.svelte.d.ts +1 -1
  126. package/dist/composables/useFooterItem.svelte.js +1 -1
  127. package/dist/compute/liveProgress.svelte.d.ts +16 -0
  128. package/dist/compute/liveProgress.svelte.js +90 -0
  129. package/dist/compute/solving.svelte.d.ts +7 -9
  130. package/dist/compute/solving.svelte.js +56 -48
  131. package/dist/constants.d.ts +6 -8
  132. package/dist/constants.js +8 -11
  133. package/dist/contexts/hostContext.svelte.d.ts +1 -1
  134. package/dist/features/chart/plotly-compat.d.ts +15 -0
  135. package/dist/features/chart/plotly-compat.js +124 -0
  136. package/dist/i18n/messages.d.ts +17 -0
  137. package/dist/i18n/messages.js +26 -0
  138. package/dist/index.d.ts +2 -0
  139. package/dist/index.js +2 -0
  140. package/dist/public.d.ts +1 -0
  141. package/dist/public.js +1 -0
  142. package/dist/schema/visibility-rules.d.ts +7 -1
  143. package/dist/schema/visibility-rules.js +17 -0
  144. package/dist/styles/base.css +93 -86
  145. package/dist/utils/color-space.d.ts +21 -0
  146. package/dist/utils/color-space.js +90 -0
  147. package/package.json +31 -23
  148. package/src/lib/components/ErrorScreen.svelte +1 -1
  149. package/src/lib/components/compute/AppLayout.svelte +74 -46
  150. package/src/lib/components/compute/CollapsedPanelStrip.svelte +4 -2
  151. package/src/lib/components/compute/ComputeApp.svelte +6 -2
  152. package/src/lib/components/compute/ComputeMessagesDialog.svelte +4 -4
  153. package/src/lib/components/compute/ParameterPresetManager.svelte +1 -1
  154. package/src/lib/components/compute/SolveMessages.svelte +81 -90
  155. package/src/lib/components/layout/AppShell.svelte +2 -2
  156. package/src/lib/components/layout/FooterItemRenderer.svelte +2 -2
  157. package/src/lib/components/layout/PageContent.svelte +3 -2
  158. package/src/lib/components/layout/PageFooter.svelte +5 -5
  159. package/src/lib/components/layout/PageHeader.svelte +3 -3
  160. package/src/lib/components/layout/SideNav.svelte +4 -4
  161. package/src/lib/components/layout/SubNav.svelte +2 -2
  162. package/src/lib/components/preview/ChartOutput.svelte +141 -50
  163. package/src/lib/components/preview/Group.svelte +9 -9
  164. package/src/lib/components/preview/HelpButton.svelte +1 -1
  165. package/src/lib/components/preview/ImageOutput.svelte +13 -10
  166. package/src/lib/components/preview/InputControl.svelte +13 -12
  167. package/src/lib/components/preview/OutputDisplay.svelte +26 -17
  168. package/src/lib/components/preview/TabBar.svelte +8 -6
  169. package/src/lib/components/preview/TabContent.svelte +8 -8
  170. package/src/lib/components/preview/TabLayout.svelte +6 -7
  171. package/src/lib/components/preview/inputs/CheckboxInput.svelte +1 -1
  172. package/src/lib/components/preview/inputs/ChecklistInput.svelte +5 -5
  173. package/src/lib/components/preview/inputs/ColorInput.svelte +356 -14
  174. package/src/lib/components/preview/inputs/DropdownInput.svelte +3 -3
  175. package/src/lib/components/preview/inputs/FileInput.svelte +17 -12
  176. package/src/lib/components/preview/inputs/GeometryInput.svelte +4 -4
  177. package/src/lib/components/preview/inputs/NumberInput.svelte +8 -8
  178. package/src/lib/components/preview/inputs/OptionGlyph.svelte +2 -2
  179. package/src/lib/components/preview/inputs/SegmentedInput.svelte +3 -2
  180. package/src/lib/components/preview/inputs/TextInput.svelte +5 -5
  181. package/src/lib/components/preview/inputs/TileInput.svelte +8 -5
  182. package/src/lib/components/primitives/CalculateButton.svelte +10 -4
  183. package/src/lib/components/primitives/Callout.svelte +9 -7
  184. package/src/lib/components/primitives/DataTable.svelte +1 -1
  185. package/src/lib/components/primitives/FilterableDropdown.svelte +14 -2
  186. package/src/lib/components/primitives/ImageUploadField.svelte +1 -1
  187. package/src/lib/components/primitives/IssueList.svelte +1 -1
  188. package/src/lib/components/primitives/SeverityIcon.svelte +1 -1
  189. package/src/lib/components/primitives/SolvingIndicator.svelte +242 -41
  190. package/src/lib/components/primitives/StateDisplay.svelte +1 -1
  191. package/src/lib/components/primitives/alert-dialog/alert-dialog-action.svelte +2 -2
  192. package/src/lib/components/primitives/alert-dialog/alert-dialog-cancel.svelte +2 -2
  193. package/src/lib/components/primitives/alert-dialog/alert-dialog-content.svelte +2 -2
  194. package/src/lib/components/primitives/alert-dialog/alert-dialog-description.svelte +1 -1
  195. package/src/lib/components/primitives/alert-dialog/alert-dialog-footer.svelte +1 -1
  196. package/src/lib/components/primitives/alert-dialog/alert-dialog-header.svelte +1 -1
  197. package/src/lib/components/primitives/alert-dialog/alert-dialog-overlay.svelte +1 -1
  198. package/src/lib/components/primitives/alert-dialog/alert-dialog-title.svelte +1 -1
  199. package/src/lib/components/primitives/badge/badge.svelte +3 -3
  200. package/src/lib/components/primitives/button/button.svelte +7 -8
  201. package/src/lib/components/primitives/button-group/button-group-separator.svelte +2 -2
  202. package/src/lib/components/primitives/button-group/button-group-text.svelte +1 -1
  203. package/src/lib/components/primitives/button-group/button-group.svelte +1 -1
  204. package/src/lib/components/primitives/card/card-content.svelte +1 -1
  205. package/src/lib/components/primitives/card/card-description.svelte +1 -1
  206. package/src/lib/components/primitives/card/card-footer.svelte +1 -1
  207. package/src/lib/components/primitives/card/card-header.svelte +1 -1
  208. package/src/lib/components/primitives/card/card-title.svelte +1 -1
  209. package/src/lib/components/primitives/card/card.svelte +2 -2
  210. package/src/lib/components/primitives/checkbox/checkbox.svelte +2 -2
  211. package/src/lib/components/primitives/command/command-dialog.svelte +2 -2
  212. package/src/lib/components/primitives/command/command-empty.svelte +1 -1
  213. package/src/lib/components/primitives/command/command-group.svelte +1 -1
  214. package/src/lib/components/primitives/command/command-input.svelte +3 -3
  215. package/src/lib/components/primitives/command/command-item.svelte +2 -2
  216. package/src/lib/components/primitives/command/command-link-item.svelte +2 -2
  217. package/src/lib/components/primitives/command/command-list.svelte +1 -1
  218. package/src/lib/components/primitives/command/command-separator.svelte +1 -1
  219. package/src/lib/components/primitives/command/command-shortcut.svelte +1 -1
  220. package/src/lib/components/primitives/command/command.svelte +2 -2
  221. package/src/lib/components/primitives/context-menu/context-menu-checkbox-item.svelte +2 -2
  222. package/src/lib/components/primitives/context-menu/context-menu-content.svelte +2 -2
  223. package/src/lib/components/primitives/context-menu/context-menu-group-heading.svelte +1 -1
  224. package/src/lib/components/primitives/context-menu/context-menu-item.svelte +2 -2
  225. package/src/lib/components/primitives/context-menu/context-menu-label.svelte +1 -1
  226. package/src/lib/components/primitives/context-menu/context-menu-radio-item.svelte +2 -2
  227. package/src/lib/components/primitives/context-menu/context-menu-separator.svelte +1 -1
  228. package/src/lib/components/primitives/context-menu/context-menu-shortcut.svelte +1 -1
  229. package/src/lib/components/primitives/context-menu/context-menu-sub-content.svelte +2 -2
  230. package/src/lib/components/primitives/context-menu/context-menu-sub-trigger.svelte +2 -2
  231. package/src/lib/components/primitives/dialog/dialog-content.svelte +4 -4
  232. package/src/lib/components/primitives/dialog/dialog-description.svelte +1 -1
  233. package/src/lib/components/primitives/dialog/dialog-footer.svelte +1 -1
  234. package/src/lib/components/primitives/dialog/dialog-header.svelte +1 -1
  235. package/src/lib/components/primitives/dialog/dialog-overlay.svelte +1 -1
  236. package/src/lib/components/primitives/dialog/dialog-title.svelte +1 -1
  237. package/src/lib/components/primitives/drawer/Drawer.svelte +1 -1
  238. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-checkbox-item.svelte +32 -12
  239. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-content.svelte +6 -2
  240. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-group-heading.svelte +1 -1
  241. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-item.svelte +5 -3
  242. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-label.svelte +1 -1
  243. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-radio-item.svelte +2 -2
  244. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-separator.svelte +1 -1
  245. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-shortcut.svelte +2 -2
  246. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-sub-content.svelte +2 -2
  247. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-sub-trigger.svelte +2 -2
  248. package/src/lib/components/primitives/empty/empty-content.svelte +1 -1
  249. package/src/lib/components/primitives/empty/empty-description.svelte +1 -1
  250. package/src/lib/components/primitives/empty/empty-header.svelte +1 -1
  251. package/src/lib/components/primitives/empty/empty-media.svelte +1 -1
  252. package/src/lib/components/primitives/empty/empty-title.svelte +1 -1
  253. package/src/lib/components/primitives/empty/empty.svelte +1 -1
  254. package/src/lib/components/primitives/field/field-content.svelte +1 -1
  255. package/src/lib/components/primitives/field/field-description.svelte +1 -1
  256. package/src/lib/components/primitives/field/field-error.svelte +1 -1
  257. package/src/lib/components/primitives/field/field-group.svelte +1 -1
  258. package/src/lib/components/primitives/field/field-label.svelte +2 -2
  259. package/src/lib/components/primitives/field/field-legend.svelte +1 -1
  260. package/src/lib/components/primitives/field/field-separator.svelte +2 -2
  261. package/src/lib/components/primitives/field/field-set.svelte +1 -1
  262. package/src/lib/components/primitives/field/field-title.svelte +1 -1
  263. package/src/lib/components/primitives/field/field.svelte +1 -1
  264. package/src/lib/components/primitives/index.ts +1 -1
  265. package/src/lib/components/primitives/input/input.svelte +3 -3
  266. package/src/lib/components/primitives/input-group/input-group-addon.svelte +1 -1
  267. package/src/lib/components/primitives/input-group/input-group-button.svelte +2 -2
  268. package/src/lib/components/primitives/input-group/input-group-input.svelte +2 -2
  269. package/src/lib/components/primitives/input-group/input-group-text.svelte +1 -1
  270. package/src/lib/components/primitives/input-group/input-group-textarea.svelte +2 -2
  271. package/src/lib/components/primitives/input-group/input-group.svelte +2 -2
  272. package/src/lib/components/primitives/label/label.svelte +1 -1
  273. package/src/lib/components/primitives/mode-toggle/mode-toggle.svelte +2 -2
  274. package/src/lib/components/primitives/popover/popover-content.svelte +2 -2
  275. package/src/lib/components/primitives/popover/popover-description.svelte +1 -1
  276. package/src/lib/components/primitives/popover/popover-header.svelte +1 -1
  277. package/src/lib/components/primitives/popover/popover-title.svelte +1 -1
  278. package/src/lib/components/primitives/popover/popover-trigger.svelte +1 -1
  279. package/src/lib/components/primitives/resizable/resizable-handle.svelte +3 -3
  280. package/src/lib/components/primitives/resizable/resizable-pane-group.svelte +1 -1
  281. package/src/lib/components/primitives/scroll-area/scroll-area-scrollbar.svelte +1 -1
  282. package/src/lib/components/primitives/scroll-area/scroll-area.svelte +1 -1
  283. package/src/lib/components/primitives/search/search.svelte +2 -2
  284. package/src/lib/components/primitives/select/select-content.svelte +2 -2
  285. package/src/lib/components/primitives/select/select-group-heading.svelte +1 -1
  286. package/src/lib/components/primitives/select/select-item.svelte +2 -2
  287. package/src/lib/components/primitives/select/select-label.svelte +1 -1
  288. package/src/lib/components/primitives/select/select-scroll-down-button.svelte +1 -1
  289. package/src/lib/components/primitives/select/select-scroll-up-button.svelte +1 -1
  290. package/src/lib/components/primitives/select/select-separator.svelte +2 -2
  291. package/src/lib/components/primitives/select/select-trigger.svelte +2 -2
  292. package/src/lib/components/primitives/separator/separator.svelte +1 -1
  293. package/src/lib/components/primitives/slider/slider.svelte +2 -2
  294. package/src/lib/components/primitives/spinner/spinner.svelte +1 -1
  295. package/src/lib/components/primitives/switch/switch.svelte +2 -2
  296. package/src/lib/components/primitives/tabs/tabs-content.svelte +1 -1
  297. package/src/lib/components/primitives/tabs/tabs-list.svelte +3 -3
  298. package/src/lib/components/primitives/tabs/tabs-trigger.svelte +3 -3
  299. package/src/lib/components/primitives/tabs/tabs.svelte +1 -1
  300. package/src/lib/components/primitives/textarea/textarea.svelte +2 -2
  301. package/src/lib/components/primitives/toggle/toggle.svelte +9 -3
  302. package/src/lib/components/primitives/toggle-group/toggle-group-item.svelte +3 -3
  303. package/src/lib/components/primitives/toggle-group/toggle-group.svelte +3 -3
  304. package/src/lib/components/primitives/tooltip/index.ts +19 -0
  305. package/src/lib/components/primitives/tooltip/tooltip-content.svelte +34 -0
  306. package/src/lib/components/primitives/tooltip/tooltip-portal.svelte +7 -0
  307. package/src/lib/components/primitives/tooltip/tooltip-provider.svelte +7 -0
  308. package/src/lib/components/primitives/tooltip/tooltip-trigger.svelte +7 -0
  309. package/src/lib/components/primitives/tooltip/tooltip.svelte +7 -0
  310. package/src/lib/components/viewer/MeshMetadataPanel.svelte +2 -2
  311. package/src/lib/components/viewer/SceneManager.svelte +32 -21
  312. package/src/lib/components/viewer/Viewer.svelte +129 -179
  313. package/src/lib/components/viewer/ViewerDock.svelte +404 -0
  314. package/src/lib/composables/useFooterItem.svelte.ts +1 -1
  315. package/src/lib/compute/liveProgress.svelte.ts +103 -0
  316. package/src/lib/compute/solving.svelte.ts +56 -55
  317. package/src/lib/constants.ts +8 -11
  318. package/src/lib/contexts/hostContext.svelte.ts +1 -1
  319. package/src/lib/features/chart/plotly-compat.ts +141 -0
  320. package/src/lib/i18n/messages.ts +43 -0
  321. package/src/lib/index.ts +2 -0
  322. package/src/lib/public.ts +1 -0
  323. package/src/lib/schema/visibility-rules.ts +27 -1
  324. package/src/lib/styles/base.css +93 -86
  325. package/src/lib/utils/color-space.ts +107 -0
  326. package/dist/components/primitives/theme-switcher/ThemeSwitcher.svelte +0 -39
  327. package/dist/components/primitives/theme-switcher/ThemeSwitcher.svelte.d.ts +0 -3
  328. package/dist/components/primitives/theme-switcher/index.d.ts +0 -1
  329. package/dist/components/primitives/theme-switcher/index.js +0 -1
  330. package/dist/styles/themes/cyberpunk.css +0 -98
  331. package/dist/styles/themes/neutral.css +0 -72
  332. package/dist/styles/themes/ocean.css +0 -75
  333. package/dist/styles/themes/selva.css +0 -105
  334. package/dist/theme/themeStore.svelte.d.ts +0 -12
  335. package/dist/theme/themeStore.svelte.js +0 -40
  336. package/dist/theme/themes.d.ts +0 -5
  337. package/dist/theme/themes.js +0 -13
  338. package/src/lib/components/primitives/theme-switcher/ThemeSwitcher.svelte +0 -39
  339. package/src/lib/components/primitives/theme-switcher/index.ts +0 -1
  340. package/src/lib/styles/themes/cyberpunk.css +0 -98
  341. package/src/lib/styles/themes/neutral.css +0 -72
  342. package/src/lib/styles/themes/ocean.css +0 -75
  343. package/src/lib/styles/themes/selva.css +0 -105
  344. package/src/lib/theme/themeStore.svelte.ts +0 -50
  345. package/src/lib/theme/themes.ts +0 -18
package/README.md CHANGED
@@ -57,9 +57,6 @@ In your `app.css`:
57
57
  @import '@selvajs/ui/styles/base.css';
58
58
  ```
59
59
 
60
- Themes are available under `@selvajs/ui/styles/themes/*` — `selva`, `neutral`, `ocean`, and
61
- `cyberpunk`.
62
-
63
60
  ## Schema types
64
61
 
65
62
  Types generated from `packages/schemas/ui-schema.json` are published by `@selvajs/schemas`, not
@@ -3,7 +3,7 @@
3
3
  import * as Card from './primitives/card/index.js';
4
4
  import { Button } from './primitives/button/index.js';
5
5
  import Callout from './primitives/Callout.svelte';
6
- import { getLocaleContext } from '../i18n/localeContext.svelte';
6
+ import { getLocaleContext } from '../i18n/localeContext.svelte.js';
7
7
 
8
8
  interface Props {
9
9
  status?: number;
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">
2
2
  import type { Snippet } from 'svelte';
3
3
  import type { UISchema, SupportedTypes, ParameterPreset } from '@selvajs/schemas';
4
- import type { SolveSettlement } from '@selvajs/solve/client';
4
+ import type { LiveSolveState, SolveSettlement } from '@selvajs/solve/client';
5
5
  import type { ActionButton } from '../../types/actionButton';
6
6
  import type { PresetLabels } from '../../types/presetLabels';
7
7
  import { ChevronUp, Download, Ellipsis, Upload } from '@lucide/svelte';
@@ -11,9 +11,9 @@
11
11
  import SolvingIndicator from '../primitives/SolvingIndicator.svelte';
12
12
  import TabLayout from '../preview/TabLayout.svelte';
13
13
  import CollapsedPanelStrip from './CollapsedPanelStrip.svelte';
14
- import * as Resizable from '../primitives/resizable';
14
+ import * as Resizable from '../primitives/resizable/index.js';
15
15
  import * as DropdownMenu from '../primitives/dropdown-menu/index.js';
16
- import { Button } from '../..';
16
+ import { Button } from '../../index.js';
17
17
  import ParameterPresetManager from './ParameterPresetManager.svelte';
18
18
  import { runPanelAction } from '../../compute/run-panel-action';
19
19
  import { getLocaleContext } from '../../i18n/localeContext.svelte';
@@ -34,8 +34,20 @@
34
34
  showViewer: boolean;
35
35
  meshes?: any[];
36
36
  isSolving: boolean;
37
+ /**
38
+ * `createSolvingIndicator(...).show`, not `isSolving`: grows the action row's solve status,
39
+ * which would otherwise flash on every sub-second solve.
40
+ */
37
41
  showSolvingIndicator?: boolean;
38
- /** `SolvingIndicator`'s `placement`; `inline` puts it in the action row. */
42
+ /** `createSolvingIndicator(...).slow`: the solve status grows into a card with progress. */
43
+ solveIsSlow?: boolean;
44
+ /** The session's live channel: step, count and bar for that card. */
45
+ live?: LiveSolveState;
46
+ /** Abort in that card. The host's `SolveMessages` should then take `progressShownByHost`. */
47
+ onabort?: () => void;
48
+ /** As passed to `createSolvingIndicator`. */
49
+ freezesDuringSolve?: boolean;
50
+ /** @deprecated Ignored: the solving status always sits in the action row. */
39
51
  solvingIndicatorPlacement?: 'floating' | 'inline';
40
52
  /** Rendered above the action row, for a host that keeps the solve's messages in the flow. */
41
53
  solveMessages?: Snippet;
@@ -68,7 +80,10 @@
68
80
  meshes = [],
69
81
  isSolving,
70
82
  showSolvingIndicator = false,
71
- solvingIndicatorPlacement = 'floating',
83
+ solveIsSlow = false,
84
+ live,
85
+ onabort,
86
+ freezesDuringSolve = false,
72
87
  solveMessages,
73
88
  hasPendingChanges = false,
74
89
  hasNeverSolved = false,
@@ -150,6 +165,14 @@
150
165
  return () => mqMobile.removeEventListener('change', update);
151
166
  });
152
167
 
168
+ // Without a viewer there's nothing to sit beside, so a narrow host (a docked Rhino panel) gets
169
+ // the phone's single edge-to-edge column instead of a card floating in its own margins.
170
+ const STACK_BELOW_WIDTH = 900;
171
+ let rootWidth = $state(0);
172
+ const stacked = $derived(
173
+ isMobile || (!hasViewer && rootWidth > 0 && rootWidth < STACK_BELOW_WIDTH)
174
+ );
175
+
153
176
  let leftCollapsed = $state(false);
154
177
  let rightCollapsed = $state(false);
155
178
  let leftPaneRef = $state<{ expand: () => void } | null>(null);
@@ -255,9 +278,9 @@
255
278
  <!-- One primary action and one menu. A definition that solves on every change has no Calculate,
256
279
  so the menu sits alone at the end of the row. -->
257
280
  {#snippet footer()}
258
- {#if solveMessages}
259
- <div class="px-2">{@render solveMessages()}</div>
260
- {/if}
281
+ <!-- No wrapper: it would always render (the messages' live region is never empty) and pick up
282
+ the drawer footer's row padding, leaving a gap above Calculate with nothing in it. -->
283
+ {@render solveMessages?.()}
261
284
  {#if schema.instanceSolve === false}
262
285
  <CalculateButton
263
286
  {hasPendingChanges}
@@ -266,13 +289,18 @@
266
289
  {oncalculate}
267
290
  trailing={hasMenu ? actionsMenu : undefined}
268
291
  />
269
- {:else if hasMenu || solvingIndicatorPlacement === 'inline'}
270
- <div class="mt-3 pb-3 pt-2 px-2 gap-2 flex items-center border-t border-border/50">
271
- {#if solvingIndicatorPlacement === 'inline'}
272
- <SolvingIndicator show={showSolvingIndicator} placement="inline" />
273
- {/if}
292
+ {:else}
293
+ <div class="mt-3 pb-3 pt-2 px-2 gap-2 flex items-center border-t border-border">
294
+ <SolvingIndicator
295
+ {isSolving}
296
+ show={showSolvingIndicator}
297
+ slow={solveIsSlow}
298
+ {live}
299
+ {onabort}
300
+ {freezesDuringSolve}
301
+ />
274
302
  {#if hasMenu}
275
- <div class="ml-auto">{@render actionsMenu()}</div>
303
+ {@render actionsMenu()}
276
304
  {/if}
277
305
  </div>
278
306
  {/if}
@@ -287,9 +315,9 @@
287
315
  )}
288
316
  <div class="panel-content-wrapper">
289
317
  {#if schema.layout.type === 'tabbed'}
290
- <TabLayout {schema} {values} {onValueChange} {panelFilter} {requestedTabId} bare={isMobile} />
318
+ <TabLayout {schema} {values} {onValueChange} {panelFilter} {requestedTabId} bare={stacked} />
291
319
  {/if}
292
- {#if hostsFooter && !isMobile}
320
+ {#if hostsFooter && !stacked}
293
321
  <div class="panel-footer px-1">
294
322
  {@render footer()}
295
323
  </div>
@@ -306,15 +334,16 @@
306
334
 
307
335
  <main
308
336
  data-layout-root
309
- class="min-h-0 sm:flex-row sm:py-(--page-py) flex flex-1 flex-col overflow-hidden {leftCollapsed
310
- ? 'sm:pl-0'
311
- : 'sm:pl-(--page-px)'} {rightCollapsed ? 'sm:pr-0' : 'sm:pr-(--page-px)'}"
337
+ class="min-h-0 flex flex-1 flex-col overflow-hidden {stacked
338
+ ? ''
339
+ : `sm:flex-row sm:py-2 ${leftCollapsed ? 'sm:pl-0' : 'sm:pl-2'} ${rightCollapsed ? 'sm:pr-0' : 'sm:pr-2'}`}"
312
340
  class:fullscreen-layout={isViewerFullscreen}
313
341
  class:relative={isMobile}
314
- class:mobile-root={isMobile}
342
+ class:mobile-root={stacked}
343
+ bind:clientWidth={rootWidth}
315
344
  >
316
- {#if isMobile}
317
- {#if hasViewer}
345
+ {#if stacked}
346
+ {#if isMobile && hasViewer}
318
347
  <!-- Ends above the drawer rather than behind it, so the model stays centred in what is
319
348
  visible. It jumps straight to its new size: animating it would resize the canvas,
320
349
  and its render targets, on every frame of the drawer's slide. -->
@@ -322,20 +351,20 @@
322
351
  <Viewer
323
352
  {meshes}
324
353
  bind:isFullscreen={isViewerFullscreen}
325
- {isSolving}
326
354
  drawerOpen={drawer === 'full'}
327
355
  {logoUrl}
328
356
  {onViewerReady}
329
357
  viewerConfig={{
330
358
  ...viewerConfig,
331
- backgroundColor: schema?.viewerOptions?.backgroundColor,
359
+ backgroundColor: schema?.viewerOptions?.backgroundColor ?? viewerConfig.backgroundColor,
360
+ look: schema?.viewerOptions?.look ?? viewerConfig.look,
332
361
  showSceneManager: false
333
362
  }}
334
363
  />
335
364
  </div>
336
365
 
337
366
  <div
338
- class="drawer-container rounded-t-2xl z-40 border-t bg-background shadow-sheet drawer-{drawer}"
367
+ class="drawer-container z-40 rounded-t-xl border-t bg-background shadow-sheet drawer-{drawer}"
339
368
  >
340
369
  <!-- Named by its visible label; aria-expanded carries the open/closed state. -->
341
370
  <button
@@ -381,7 +410,7 @@
381
410
  </div>
382
411
  {:else}
383
412
  <div class="flex flex-1 flex-col overflow-hidden">
384
- <div class="px-3 pt-3 flex-1 overflow-y-auto">
413
+ <div class="px-3 pt-3 sm:px-5 flex-1 overflow-y-auto">
385
414
  {#if hasLeftPanel}
386
415
  {@render panelContent(hasRightPanel ? 'left' : undefined, requestedLeftTabId, false)}
387
416
  {/if}
@@ -401,7 +430,7 @@
401
430
  {/if}
402
431
  {:else if !hasViewer && !isTwoPanelMode && hasLeftPanel !== hasRightPanel}
403
432
  <!-- Single centered panel (left-only or right-only), no viewer -->
404
- <div class="min-h-0 flex h-full flex-1 justify-center">
433
+ <div class="min-h-0 p-1 flex h-full flex-1 justify-center">
405
434
  <div class="min-h-0 flex h-full w-4/5 flex-col">
406
435
  {@render panelContent(
407
436
  hasRightPanel ? 'right' : undefined,
@@ -428,7 +457,7 @@
428
457
  <Resizable.PaneGroup
429
458
  direction="horizontal"
430
459
  autoSaveId="selva-layout-{layoutKey}"
431
- class="min-h-0 flex-1"
460
+ class="min-h-0 m-1 flex-1"
432
461
  >
433
462
  {#if hasLeftPanel}
434
463
  <Resizable.Pane
@@ -441,7 +470,6 @@
441
470
  collapsedSize={0}
442
471
  onCollapse={() => (leftCollapsed = true)}
443
472
  onExpand={() => (leftCollapsed = false)}
444
- class="ml-1"
445
473
  >
446
474
  <div
447
475
  class="min-h-0 flex h-full flex-col {isViewerFullscreen || leftCollapsed
@@ -454,6 +482,7 @@
454
482
  <Resizable.Handle
455
483
  withHandle
456
484
  line={false}
485
+ class="translate-x-1.5 z-20"
457
486
  data-collapsed={leftCollapsed}
458
487
  onclick={() => {
459
488
  if (leftCollapsed) leftPaneRef?.expand();
@@ -462,30 +491,34 @@
462
491
  {/if}
463
492
 
464
493
  {#if hasViewer}
465
- <Resizable.Pane order={2} minSize={20} class="min-h-0 mx-1 flex flex-col">
494
+ <Resizable.Pane order={2} minSize={20} class="min-h-0 flex flex-col">
466
495
  <Viewer
467
496
  {meshes}
468
497
  bind:isFullscreen={isViewerFullscreen}
469
- {isSolving}
470
498
  {logoUrl}
471
499
  {onViewerReady}
472
500
  viewerConfig={{
473
501
  ...viewerConfig,
474
- backgroundColor: schema?.viewerOptions?.backgroundColor
502
+ backgroundColor:
503
+ schema?.viewerOptions?.backgroundColor ?? viewerConfig.backgroundColor,
504
+ look: schema?.viewerOptions?.look ?? viewerConfig.look
475
505
  }}
476
506
  />
477
507
  </Resizable.Pane>
478
508
  {/if}
479
509
 
480
510
  {#if hasRightPanel}
481
- <Resizable.Handle
482
- withHandle
483
- line={false}
484
- data-collapsed={rightCollapsed}
485
- onclick={() => {
486
- if (rightCollapsed) rightPaneRef?.expand();
487
- }}
488
- />
511
+ {#if hasViewer || !hasLeftPanel}
512
+ <Resizable.Handle
513
+ withHandle
514
+ line={false}
515
+ class="-translate-x-1.5 z-20"
516
+ data-collapsed={rightCollapsed}
517
+ onclick={() => {
518
+ if (rightCollapsed) rightPaneRef?.expand();
519
+ }}
520
+ />
521
+ {/if}
489
522
  <Resizable.Pane
490
523
  bind:this={rightPaneRef}
491
524
  order={3}
@@ -496,7 +529,6 @@
496
529
  collapsedSize={0}
497
530
  onCollapse={() => (rightCollapsed = true)}
498
531
  onExpand={() => (rightCollapsed = false)}
499
- class="mr-1"
500
532
  >
501
533
  <div
502
534
  class="min-h-0 flex h-full flex-col {isViewerFullscreen || rightCollapsed
@@ -523,10 +555,6 @@
523
555
  {/if}
524
556
  </div>
525
557
  {/if}
526
-
527
- {#if solvingIndicatorPlacement === 'floating'}
528
- <SolvingIndicator show={showSolvingIndicator} />
529
- {/if}
530
558
  </main>
531
559
 
532
560
  <!-- The save, load and validation dialogs; the footer's menu opens them. -->
@@ -1,6 +1,6 @@
1
1
  import type { Snippet } from 'svelte';
2
2
  import type { UISchema, SupportedTypes, ParameterPreset } from '@selvajs/schemas';
3
- import type { SolveSettlement } from '@selvajs/solve/client';
3
+ import type { LiveSolveState, SolveSettlement } from '@selvajs/solve/client';
4
4
  import type { ActionButton } from '../../types/actionButton';
5
5
  import type { PresetLabels } from '../../types/presetLabels';
6
6
  import type { ThreeViewer } from '@selvajs/visualization/render';
@@ -14,8 +14,20 @@ interface Props {
14
14
  showViewer: boolean;
15
15
  meshes?: any[];
16
16
  isSolving: boolean;
17
+ /**
18
+ * `createSolvingIndicator(...).show`, not `isSolving`: grows the action row's solve status,
19
+ * which would otherwise flash on every sub-second solve.
20
+ */
17
21
  showSolvingIndicator?: boolean;
18
- /** `SolvingIndicator`'s `placement`; `inline` puts it in the action row. */
22
+ /** `createSolvingIndicator(...).slow`: the solve status grows into a card with progress. */
23
+ solveIsSlow?: boolean;
24
+ /** The session's live channel: step, count and bar for that card. */
25
+ live?: LiveSolveState;
26
+ /** Abort in that card. The host's `SolveMessages` should then take `progressShownByHost`. */
27
+ onabort?: () => void;
28
+ /** As passed to `createSolvingIndicator`. */
29
+ freezesDuringSolve?: boolean;
30
+ /** @deprecated Ignored: the solving status always sits in the action row. */
19
31
  solvingIndicatorPlacement?: 'floating' | 'inline';
20
32
  /** Rendered above the action row, for a host that keeps the solve's messages in the flow. */
21
33
  solveMessages?: Snippet;
@@ -20,12 +20,14 @@
20
20
  [
21
21
  'gap-1 py-2 lg:py-3 lg:flex-col lg:w-auto px-2 lg:px-0',
22
22
  'flex w-full shrink-0 flex-row items-center',
23
- 'backdrop-blur-sm bg-background/90 cursor-pointer'
23
+ 'backdrop-blur-sm bg-background/90 cursor-pointer',
24
+ side === 'left' ? 'lg:border-r' : 'lg:border-l',
25
+ 'border-border'
24
26
  ].join(' ')
25
27
  );
26
28
 
27
29
  const tabButtonClass =
28
- 'w-8 h-8 rounded cursor-pointer flex shrink-0 items-center justify-center text-muted-foreground transition-colors hover:bg-accent hover:text-foreground';
30
+ 'w-8 h-8 rounded-md cursor-pointer flex shrink-0 items-center justify-center text-muted-foreground transition-colors hover:bg-hover hover:text-foreground';
29
31
  </script>
30
32
 
31
33
  <div
@@ -57,7 +57,7 @@
57
57
  footerText?: string;
58
58
  /**
59
59
  * How long one solve may take before the client aborts it (ms). Pass the same value the
60
- * server enforces (`COMPUTE_SOLVE_DEADLINE_MS`), or the client aborts solves that would
60
+ * server enforces for this definition's compute server, or the client aborts solves that would
61
61
  * have finished.
62
62
  */
63
63
  solveDeadlineMs: number;
@@ -286,7 +286,10 @@
286
286
  showViewer={!!schema.viewerOptions?.enableRemote}
287
287
  meshes={session.meshes}
288
288
  isSolving={session.isSolving}
289
- showSolvingIndicator={schema.instanceSolve !== false && solvingIndicator.show}
289
+ showSolvingIndicator={solvingIndicator.show}
290
+ solveIsSlow={solvingIndicator.slow}
291
+ live={session.live}
292
+ onabort={() => session.abort()}
290
293
  hasPendingChanges={session.hasPendingChanges}
291
294
  hasNeverSolved={session.hasNeverSolved}
292
295
  bind:isViewerFullscreen
@@ -317,4 +320,5 @@
317
320
  onabort={() => session.abort()}
318
321
  onconfirm={() => session.acknowledge()}
319
322
  ondiscard={() => session.discard()}
323
+ progressShownByHost={schema?.instanceSolve !== false}
320
324
  />
@@ -36,7 +36,7 @@ interface Props {
36
36
  footerText?: string;
37
37
  /**
38
38
  * How long one solve may take before the client aborts it (ms). Pass the same value the
39
- * server enforces (`COMPUTE_SOLVE_DEADLINE_MS`), or the client aborts solves that would
39
+ * server enforces for this definition's compute server, or the client aborts solves that would
40
40
  * have finished.
41
41
  */
42
42
  solveDeadlineMs: number;
@@ -8,10 +8,10 @@
8
8
 
9
9
  import type { Snippet } from 'svelte';
10
10
  import type { SolveDiagnostic } from '@selvajs/solve/shared';
11
- import * as Dialog from '../primitives/dialog';
11
+ import * as Dialog from '../primitives/dialog/index.js';
12
12
  import IssueList, { type Issue } from '../primitives/IssueList.svelte';
13
- import { getLocaleContext } from '../../i18n/localeContext.svelte';
14
- import { formatCount } from '../../i18n/messages';
13
+ import { getLocaleContext } from '../../i18n/localeContext.svelte.js';
14
+ import { formatCount } from '../../i18n/messages.js';
15
15
 
16
16
  interface Props {
17
17
  /** The last solve's messages. Preferred over `errors`/`warnings` when both are given. */
@@ -203,7 +203,7 @@
203
203
  <button
204
204
  type="button"
205
205
  onclick={() => selectListedState(preset)}
206
- class="p-3 w-full rounded-lg border text-left transition-colors hover:bg-muted"
206
+ class="p-3 w-full rounded-lg border text-left transition-colors hover:bg-hover"
207
207
  >
208
208
  <div class="text-sm font-medium">{preset.name}</div>
209
209
  {#if preset.description}