@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
@@ -7,7 +7,12 @@
7
7
  import type { PresetLabels } from '../../types/presetLabels';
8
8
  import { createSolvingIndicator } from '../../compute/solving.svelte';
9
9
  import { createRequestResponseDriver } from '@selvajs/solve/client';
10
- import type { RetainedSolveResult, SolveEventSource, SolveSession } from '@selvajs/solve/client';
10
+ import type {
11
+ RetainedSolveResult,
12
+ SolveEventSource,
13
+ SolveSession,
14
+ SolveSettlement
15
+ } from '@selvajs/solve/client';
11
16
  import SolveMessages from './SolveMessages.svelte';
12
17
  import { meshPolicy } from '@selvajs/visualization/parse';
13
18
  import type { ThreeViewer } from '@selvajs/visualization/render';
@@ -19,8 +24,8 @@
19
24
  import { type ViewerConfig } from '../viewer/Viewer.svelte';
20
25
  import StateDisplay from '../primitives/StateDisplay.svelte';
21
26
  import { setClientSlot, type ClientSlot } from '../../contexts/clientSlotContext.svelte';
22
- import type { Locale } from '../../i18n/messages';
23
- import { setLocaleContext, getLocaleContext } from '../../i18n/localeContext.svelte';
27
+ import type { Locale, ViewerMessages } from '../../i18n/messages';
28
+ import { layerLocaleContext } from '../../i18n/localeContext.svelte';
24
29
 
25
30
  import type { Snippet } from 'svelte';
26
31
 
@@ -34,8 +39,11 @@
34
39
  isEmbedded?: boolean;
35
40
  primaryColor?: string;
36
41
  showModeToggle?: boolean;
42
+ /** Host actions, listed in the panel footer's ⋯ menu after saving and loading inputs. */
37
43
  panelActions?: ActionButton[];
44
+ /** Lists "Save inputs…" in the footer menu. */
38
45
  showSaveButton?: boolean;
46
+ /** Lists "Load inputs…" in the footer menu. */
39
47
  showLoadButton?: boolean;
40
48
  /** When set, persist saved states via this callback instead of downloading a .slvp file. */
41
49
  onSaveState?: (state: ParameterPreset) => void | Promise<void>;
@@ -49,7 +57,7 @@
49
57
  footerText?: string;
50
58
  /**
51
59
  * How long one solve may take before the client aborts it (ms). Pass the same value the
52
- * 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
53
61
  * have finished.
54
62
  */
55
63
  solveDeadlineMs: number;
@@ -74,6 +82,12 @@
74
82
  */
75
83
  getSession: () => SolveSession;
76
84
  }) => void;
85
+ /**
86
+ * Once per settled solve: applied, discarded, blocked, aborted or failed. A result held
87
+ * for review counts when the user accepts or rejects it, and one a queued solve replaces
88
+ * never does. Auto-solves from input changes count too.
89
+ */
90
+ onSolved?: (settlement: SolveSettlement) => void;
77
91
  /** Hands the live three.js viewer to the host once it mounts. See `Viewer.svelte` for the contract. */
78
92
  onViewerReady?: (viewer: ThreeViewer) => void | (() => void);
79
93
  /** Viewer chrome and defaults. `backgroundColor` and `showSceneManager` are set by the layout. */
@@ -92,6 +106,14 @@
92
106
  // Language for the app's own chrome, English when unset. Does not translate
93
107
  // schema-authored labels or Grasshopper-sourced names/metadata.
94
108
  lang?: Locale;
109
+ /**
110
+ * Replaces individual strings of the app's own chrome, layered over the `lang` catalog
111
+ * (`VIEWER_MESSAGES`): reword a label, or supply every string for a language with no
112
+ * built-in catalog. Reaches every component inside, the viewer included. A `{name}`
113
+ * placeholder in the default is filled the same way in an override. The preset manager's
114
+ * strings come from `presetLabels` instead.
115
+ */
116
+ messages?: Partial<ViewerMessages>;
95
117
  }
96
118
 
97
119
  let {
@@ -123,22 +145,26 @@
123
145
  brandName,
124
146
  header,
125
147
  onReady,
148
+ onSolved,
126
149
  onViewerReady,
127
150
  viewerConfig = {},
128
151
  externalScopeKey,
129
152
  clientSlot,
130
- lang
153
+ lang,
154
+ messages
131
155
  }: Props = $props();
132
156
 
133
157
  // Reaches InputControl deep in the tree.
134
158
  // svelte-ignore state_referenced_locally
135
159
  setClientSlot(clientSlot);
136
160
 
137
- // Resolution: explicit `lang` → host-provided locale → English. Passed as a getter so
138
- // switching `lang` updates the chrome live.
139
- const hostLocale = getLocaleContext();
140
- setLocaleContext(() => lang ?? hostLocale.locale);
141
- const t = $derived(getLocaleContext().messages);
161
+ // Resolution: explicit `lang` → host-provided locale → English, with `messages` on top.
162
+ // Getters, so switching either updates the chrome live.
163
+ const locale = layerLocaleContext(
164
+ () => lang,
165
+ () => messages
166
+ );
167
+ const t = $derived(locale.messages);
142
168
 
143
169
  const resolvedScopeKey = $derived(externalScopeKey || definitionKey || schema?.id || '');
144
170
 
@@ -168,6 +194,9 @@
168
194
 
169
195
  const solvingIndicator = createSolvingIndicator(() => session.isSolving);
170
196
 
197
+ // Read at call time, so a host swapping the callback needs no resubscribe.
198
+ $effect(() => session.onSettled((settlement) => onSolved?.(settlement)));
199
+
171
200
  $effect(() => {
172
201
  onReady?.({
173
202
  loadValues: (incoming) => session.loadValues(incoming),
@@ -254,9 +283,13 @@
254
283
  {#key definitionKey}
255
284
  <AppLayout
256
285
  {schema}
286
+ showViewer={!!schema.viewerOptions?.enableRemote}
257
287
  meshes={session.meshes}
258
288
  isSolving={session.isSolving}
259
- showSolvingIndicator={schema.instanceSolve !== false && solvingIndicator.show}
289
+ showSolvingIndicator={solvingIndicator.show}
290
+ solveIsSlow={solvingIndicator.slow}
291
+ live={session.live}
292
+ onabort={() => session.abort()}
260
293
  hasPendingChanges={session.hasPendingChanges}
261
294
  hasNeverSolved={session.hasNeverSolved}
262
295
  bind:isViewerFullscreen
@@ -272,6 +305,7 @@
272
305
  {presetLabels}
273
306
  onValueChange={handleValueChange}
274
307
  oncalculate={handleCalculate}
308
+ ensureSolved={() => session.ensureSolved()}
275
309
  onLoadValues={() => session.loadValues({})}
276
310
  />
277
311
  {/key}
@@ -286,15 +320,5 @@
286
320
  onabort={() => session.abort()}
287
321
  onconfirm={() => session.acknowledge()}
288
322
  ondiscard={() => session.discard()}
289
- labels={{
290
- solving: t.solveSolving,
291
- blockedTitle: t.solveBlockedTitle,
292
- messagesTitle: t.solveMessagesTitle,
293
- blockedDescription: t.solveBlocked,
294
- messagesDescription: t.solveMessagesDescription,
295
- confirm: t.solveMessagesConfirm,
296
- discard: t.solveMessagesDiscard,
297
- abort: t.solveMessagesAbort,
298
- dismiss: t.solveMessagesDismiss
299
- }}
323
+ progressShownByHost={schema?.instanceSolve !== false}
300
324
  />
@@ -8,8 +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 '$lib/components/primitives/dialog';
12
- import IssueList, { type Issue } from '$lib/components/primitives/IssueList.svelte';
11
+ import * as Dialog from '#lib/components/primitives/dialog/index.js';
12
+ import IssueList, { type Issue } from '#lib/components/primitives/IssueList.svelte';
13
+ import { getLocaleContext } from '#lib/i18n/localeContext.svelte.js';
14
+ import { formatCount } from '#lib/i18n/messages.js';
13
15
 
14
16
  interface Props {
15
17
  /** The last solve's messages. Preferred over `errors`/`warnings` when both are given. */
@@ -23,6 +25,9 @@
23
25
 
24
26
  let { diagnostics, errors = [], warnings = [], trigger }: Props = $props();
25
27
 
28
+ const locale = getLocaleContext();
29
+ const t = $derived(locale.messages);
30
+
26
31
  let open = $state(false);
27
32
 
28
33
  const rows = $derived<SolveDiagnostic[]>(
@@ -41,26 +46,11 @@
41
46
  count: number;
42
47
  }
43
48
 
44
- const LEVELS = [
45
- {
46
- level: 'error',
47
- severity: 'error',
48
- one: 'error',
49
- many: 'errors'
50
- },
51
- {
52
- level: 'warning',
53
- severity: 'warning',
54
- one: 'warning',
55
- many: 'warnings'
56
- },
57
- {
58
- level: 'remark',
59
- severity: 'note',
60
- one: 'note',
61
- many: 'notes'
62
- }
63
- ] as const;
49
+ const levels = $derived([
50
+ { level: 'error', severity: 'error', one: t.errorCountOne, other: t.errorCountOther },
51
+ { level: 'warning', severity: 'warning', one: t.warningCountOne, other: t.warningCountOther },
52
+ { level: 'remark', severity: 'note', one: t.noteCountOne, other: t.noteCountOther }
53
+ ] as const);
64
54
 
65
55
  /**
66
56
  * One section per level that has messages, most severe first; within a level, the order the
@@ -68,23 +58,25 @@
68
58
  * branches raises the same warning 200 times, and an unstacked list buries every other message.
69
59
  */
70
60
  const sections = $derived(
71
- LEVELS.map((meta) => {
72
- // A null-prototype object rather than a Map: a local built fresh on each derive, never
73
- // reactive state, and the lint rule that steers Map → SvelteMap cannot tell them apart.
74
- const byKey: Record<string, Item> = Object.create(null);
75
- const items: Item[] = [];
76
- for (const d of rows) {
77
- if (d.level !== meta.level) continue;
78
- const key = `${d.message} ${d.source ?? ''}`;
79
- if (byKey[key]) {
80
- byKey[key].count++;
81
- } else {
82
- byKey[key] = { level: d.level, message: d.message, source: d.source, count: 1 };
83
- items.push(byKey[key]);
61
+ levels
62
+ .map((meta) => {
63
+ // A null-prototype object rather than a Map: a local built fresh on each derive, never
64
+ // reactive state, and the lint rule that steers Map → SvelteMap cannot tell them apart.
65
+ const byKey: Record<string, Item> = Object.create(null);
66
+ const items: Item[] = [];
67
+ for (const d of rows) {
68
+ if (d.level !== meta.level) continue;
69
+ const key = `${d.message} ${d.source ?? ''}`;
70
+ if (byKey[key]) {
71
+ byKey[key].count++;
72
+ } else {
73
+ byKey[key] = { level: d.level, message: d.message, source: d.source, count: 1 };
74
+ items.push(byKey[key]);
75
+ }
84
76
  }
85
- }
86
- return { ...meta, items };
87
- }).filter((section) => section.items.length > 0)
77
+ return { ...meta, items };
78
+ })
79
+ .filter((section) => section.items.length > 0)
88
80
  );
89
81
 
90
82
  const issues = $derived<Issue[]>(
@@ -106,13 +98,11 @@
106
98
 
107
99
  <Dialog.Content class="max-w-lg">
108
100
  <Dialog.Header>
109
- <Dialog.Title>Messages</Dialog.Title>
101
+ <Dialog.Title>{t.messagesTitle}</Dialog.Title>
110
102
  <Dialog.Description>
111
103
  {#each sections as section, i (section.level)}
112
104
  {#if i > 0}<span class="mx-1.5">·</span>{/if}
113
- <span
114
- >{section.items.length} {section.items.length === 1 ? section.one : section.many}</span
115
- >
105
+ <span>{formatCount(section.items.length, section.one, section.other)}</span>
116
106
  {/each}
117
107
  </Dialog.Description>
118
108
  </Dialog.Header>
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">
2
- import { Download, Upload } from '@lucide/svelte';
2
+ import { Upload } from '@lucide/svelte';
3
3
  import type { UISchema, ParameterPreset } from '@selvajs/schemas';
4
4
  import {
5
5
  createSavedState,
@@ -9,17 +9,13 @@
9
9
  importStateFromJson
10
10
  } from '../../schema/param-exporter';
11
11
  import { Button, Input, Label, Textarea, Dialog, Callout, IssueList, toast } from '../primitives';
12
-
13
- import type { ActionButton } from '../../types/actionButton';
14
12
  import { DEFAULT_PRESET_LABELS, type PresetLabels } from '../../types/presetLabels';
13
+ import { pickFile } from '../../utils/host-files';
15
14
 
16
15
  interface Props {
17
16
  schema: UISchema;
18
17
  currentValues: Record<string, unknown>;
19
18
  onLoadValues: (values: Record<string, unknown>) => void;
20
- showSaveButton?: boolean;
21
- showLoadButton?: boolean;
22
- actions?: ActionButton[];
23
19
  /** When set, persist saved states via this callback instead of downloading a .slvp file. */
24
20
  onSaveState?: (state: ParameterPreset) => void | Promise<void>;
25
21
  /** When set, the Load dialog lists these states instead of showing a file input. */
@@ -28,17 +24,7 @@
28
24
  labels?: Partial<PresetLabels>;
29
25
  }
30
26
 
31
- let {
32
- schema,
33
- currentValues,
34
- onLoadValues,
35
- showSaveButton = true,
36
- showLoadButton = true,
37
- actions = [],
38
- onSaveState,
39
- onListStates,
40
- labels
41
- }: Props = $props();
27
+ let { schema, currentValues, onLoadValues, onSaveState, onListStates, labels }: Props = $props();
42
28
 
43
29
  const t = $derived({ ...DEFAULT_PRESET_LABELS, ...labels });
44
30
 
@@ -52,13 +38,13 @@
52
38
  let showLoadDialog = $state(false);
53
39
  let loadResult = $state<PresetLoadResult | null>(null);
54
40
  let loadingPresetName = $state('');
55
- let fileInputRef = $state<HTMLInputElement | null>(null);
56
41
 
57
42
  let listedStates = $state<ParameterPreset[]>([]);
58
43
  let isLoadingList = $state(false);
59
44
  let listError = $state('');
60
45
 
61
- function openExportDialog() {
46
+ /** Opens the save dialog. The panel footer's menu calls it. */
47
+ export function openSave() {
62
48
  exportName = `State ${new Date().toLocaleDateString()}`;
63
49
  exportDescription = '';
64
50
  exportAuthor = schema.author || '';
@@ -83,7 +69,7 @@
83
69
  });
84
70
 
85
71
  if (onSaveState) await onSaveState(state);
86
- else exportStateAsJson(state);
72
+ else await exportStateAsJson(state);
87
73
  showExportDialog = false;
88
74
  }
89
75
 
@@ -100,19 +86,16 @@
100
86
  }
101
87
  }
102
88
 
103
- async function handleImport(event: Event) {
104
- const input = event.target as HTMLInputElement;
105
- if (!input.files || input.files.length === 0) return;
89
+ async function importFromFile() {
90
+ // .sps is the pre-rename extension; files with it exist on users' drives, so keep accepting it.
91
+ const file = await pickFile({ accept: '.slvp,.sps' });
92
+ if (!file) return;
106
93
 
107
94
  try {
108
- const imported = await importStateFromJson(input.files[0]);
109
- tryLoad(imported);
95
+ tryLoad(await importStateFromJson(file));
110
96
  } catch (error) {
111
97
  toast.error(t.loadImportError + (error as Error).message);
112
98
  }
113
-
114
- // Reset so re-picking the same file fires `change` again.
115
- input.value = '';
116
99
  }
117
100
 
118
101
  function confirmLoad() {
@@ -128,7 +111,8 @@
128
111
  loadResult = null;
129
112
  }
130
113
 
131
- async function openLoadDialog() {
114
+ /** Opens the load dialog. The panel footer's menu calls it. */
115
+ export async function openLoad() {
132
116
  showLoadDialog = true;
133
117
  if (!onListStates) return;
134
118
 
@@ -145,8 +129,8 @@
145
129
  }
146
130
 
147
131
  function handleLoadClick() {
148
- fileInputRef?.click();
149
132
  showLoadDialog = false;
133
+ void importFromFile();
150
134
  }
151
135
 
152
136
  function selectListedState(preset: ParameterPreset) {
@@ -155,39 +139,6 @@
155
139
  }
156
140
  </script>
157
141
 
158
- {#if showSaveButton}
159
- <Button variant="outline" size="sm" onclick={openExportDialog}>
160
- <Download class="mr-2 h-4 w-4" />
161
- {t.saveButton}
162
- </Button>
163
- {/if}
164
-
165
- {#if showLoadButton}
166
- <Button variant="outline" size="sm" onclick={openLoadDialog}>
167
- <Upload class="mr-2 h-4 w-4" />
168
- {t.loadButton}
169
- </Button>
170
- {/if}
171
-
172
- {#each actions as action (action.id)}
173
- <Button variant={action.variant ?? 'outline'} size={action.size ?? 'sm'} onclick={action.onclick}>
174
- {#if action.icon}
175
- {@const IconComponent = action.icon}
176
- <IconComponent class="mr-2 h-4 w-4" />
177
- {/if}
178
- {action.label}
179
- </Button>
180
- {/each}
181
-
182
- <!-- .sps is the pre-rename extension; files with it exist on users' drives, so keep accepting it. -->
183
- <input
184
- bind:this={fileInputRef}
185
- type="file"
186
- accept=".slvp,.sps"
187
- onchange={handleImport}
188
- class="hidden"
189
- />
190
-
191
142
  <!-- Save Dialog -->
192
143
  <Dialog.Root bind:open={showExportDialog}>
193
144
  <Dialog.Content>
@@ -225,7 +176,7 @@
225
176
 
226
177
  <Dialog.Footer>
227
178
  <Button variant="outline" onclick={() => (showExportDialog = false)}>{t.cancelButton}</Button>
228
- <Button onclick={handleExport}>{t.saveButton}</Button>
179
+ <Button onclick={handleExport}>{t.saveConfirmButton}</Button>
229
180
  </Dialog.Footer>
230
181
  </Dialog.Content>
231
182
  </Dialog.Root>
@@ -252,7 +203,7 @@
252
203
  <button
253
204
  type="button"
254
205
  onclick={() => selectListedState(preset)}
255
- 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"
256
207
  >
257
208
  <div class="text-sm font-medium">{preset.name}</div>
258
209
  {#if preset.description}