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

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 (444) hide show
  1. package/dist/components/ConfirmDialog.svelte +2 -10
  2. package/dist/components/ErrorScreen.svelte +21 -27
  3. package/dist/components/compute/AppLayout.svelte +286 -116
  4. package/dist/components/compute/AppLayout.svelte.d.ts +22 -0
  5. package/dist/components/compute/ComputeApp.svelte +45 -24
  6. package/dist/components/compute/ComputeApp.svelte.d.ts +19 -2
  7. package/dist/components/compute/ComputeMessagesDialog.svelte +47 -83
  8. package/dist/components/compute/ParameterPresetManager.svelte +37 -130
  9. package/dist/components/compute/ParameterPresetManager.svelte.d.ts +4 -5
  10. package/dist/components/compute/SolveMessages.svelte +131 -77
  11. package/dist/components/compute/SolveMessages.svelte.d.ts +7 -12
  12. package/dist/components/layout/AppShell.svelte +10 -6
  13. package/dist/components/layout/PageFooter.svelte +23 -11
  14. package/dist/components/layout/PageHeader.svelte +11 -7
  15. package/dist/components/layout/Pagination.svelte +2 -4
  16. package/dist/components/layout/SectionHeader.svelte +4 -2
  17. package/dist/components/layout/SideNav.svelte +56 -7
  18. package/dist/components/preview/ChartOutput.svelte +35 -25
  19. package/dist/components/preview/Group.svelte +92 -103
  20. package/dist/components/preview/Group.svelte.d.ts +1 -1
  21. package/dist/components/preview/HelpButton.svelte +36 -0
  22. package/dist/components/preview/HelpButton.svelte.d.ts +8 -0
  23. package/dist/components/preview/ImageOutput.svelte +430 -71
  24. package/dist/components/preview/InputControl.svelte +163 -90
  25. package/dist/components/preview/InputControl.svelte.d.ts +5 -1
  26. package/dist/components/preview/OutputDisplay.svelte +28 -33
  27. package/dist/components/preview/TabBar.svelte +106 -22
  28. package/dist/components/preview/TabBar.svelte.d.ts +1 -0
  29. package/dist/components/preview/TabContent.svelte +63 -57
  30. package/dist/components/preview/TabContent.svelte.d.ts +5 -1
  31. package/dist/components/preview/TabLayout.svelte +27 -5
  32. package/dist/components/preview/TabLayout.svelte.d.ts +5 -0
  33. package/dist/components/preview/inputs/CheckboxInput.svelte +7 -7
  34. package/dist/components/preview/inputs/CheckboxInput.svelte.d.ts +3 -0
  35. package/dist/components/preview/inputs/ChecklistInput.svelte +7 -2
  36. package/dist/components/preview/inputs/ChecklistInput.svelte.d.ts +2 -1
  37. package/dist/components/preview/inputs/ColorInput.svelte +4 -2
  38. package/dist/components/preview/inputs/ColorInput.svelte.d.ts +1 -0
  39. package/dist/components/preview/inputs/DropdownInput.svelte +19 -4
  40. package/dist/components/preview/inputs/DropdownInput.svelte.d.ts +2 -1
  41. package/dist/components/preview/inputs/FileInput.svelte +112 -108
  42. package/dist/components/preview/inputs/GeometryInput.svelte +128 -0
  43. package/dist/components/preview/inputs/GeometryInput.svelte.d.ts +21 -0
  44. package/dist/components/preview/inputs/NumberInput.svelte +123 -61
  45. package/dist/components/preview/inputs/NumberInput.svelte.d.ts +2 -0
  46. package/dist/components/preview/inputs/OptionGlyph.svelte +29 -0
  47. package/dist/components/preview/inputs/OptionGlyph.svelte.d.ts +8 -0
  48. package/dist/components/preview/inputs/SegmentedInput.svelte +44 -0
  49. package/dist/components/preview/inputs/SegmentedInput.svelte.d.ts +12 -0
  50. package/dist/components/preview/inputs/TextInput.svelte +8 -4
  51. package/dist/components/preview/inputs/TileInput.svelte +80 -0
  52. package/dist/components/preview/inputs/TileInput.svelte.d.ts +12 -0
  53. package/dist/components/preview/inputs/index.d.ts +3 -0
  54. package/dist/components/preview/inputs/index.js +3 -0
  55. package/dist/components/primitives/CalculateButton.svelte +56 -24
  56. package/dist/components/primitives/CalculateButton.svelte.d.ts +3 -0
  57. package/dist/components/primitives/Callout.svelte +11 -18
  58. package/dist/components/primitives/DataTable.svelte +38 -5
  59. package/dist/components/primitives/DataTable.svelte.d.ts +2 -0
  60. package/dist/components/primitives/FilterableDropdown.svelte +42 -129
  61. package/dist/components/primitives/FilterableDropdown.svelte.d.ts +1 -1
  62. package/dist/components/primitives/IssueList.svelte +56 -0
  63. package/dist/components/primitives/IssueList.svelte.d.ts +20 -0
  64. package/dist/components/primitives/SeverityIcon.svelte +15 -0
  65. package/dist/components/primitives/SeverityIcon.svelte.d.ts +8 -0
  66. package/dist/components/primitives/SolvingIndicator.svelte +43 -42
  67. package/dist/components/primitives/SolvingIndicator.svelte.d.ts +6 -0
  68. package/dist/components/primitives/StateDisplay.svelte +19 -79
  69. package/dist/components/primitives/ViewToggle.svelte +18 -33
  70. package/dist/components/primitives/alert-dialog/alert-dialog-action.svelte +9 -3
  71. package/dist/components/primitives/alert-dialog/alert-dialog-action.svelte.d.ts +6 -1
  72. package/dist/components/primitives/alert-dialog/alert-dialog-content.svelte +1 -1
  73. package/dist/components/primitives/alert-dialog/alert-dialog-overlay.svelte +1 -1
  74. package/dist/components/primitives/badge/badge.svelte +2 -2
  75. package/dist/components/primitives/badge/badge.svelte.d.ts +4 -4
  76. package/dist/components/primitives/button/button.svelte +6 -2
  77. package/dist/components/primitives/button/button.svelte.d.ts +10 -4
  78. package/dist/components/primitives/card/card-header.svelte +1 -1
  79. package/dist/components/primitives/card/card.svelte +21 -5
  80. package/dist/components/primitives/card/card.svelte.d.ts +25 -1
  81. package/dist/components/primitives/card/index.d.ts +1 -2
  82. package/dist/components/primitives/card/index.js +2 -3
  83. package/dist/components/primitives/checkbox/checkbox.svelte +1 -1
  84. package/dist/components/primitives/command/command-dialog.svelte +42 -0
  85. package/dist/components/primitives/command/command-dialog.svelte.d.ts +14 -0
  86. package/dist/components/primitives/command/command-empty.svelte +17 -0
  87. package/dist/components/primitives/command/command-empty.svelte.d.ts +4 -0
  88. package/dist/components/primitives/command/command-group.svelte +33 -0
  89. package/dist/components/primitives/command/command-group.svelte.d.ts +7 -0
  90. package/dist/components/primitives/command/command-input.svelte +36 -0
  91. package/dist/components/primitives/command/command-input.svelte.d.ts +4 -0
  92. package/dist/components/primitives/command/command-item.svelte +28 -0
  93. package/dist/components/primitives/command/command-item.svelte.d.ts +4 -0
  94. package/dist/components/primitives/command/command-link-item.svelte +21 -0
  95. package/dist/components/primitives/command/command-link-item.svelte.d.ts +4 -0
  96. package/dist/components/primitives/command/command-list.svelte +20 -0
  97. package/dist/components/primitives/command/command-list.svelte.d.ts +4 -0
  98. package/dist/components/primitives/command/command-loading.svelte +7 -0
  99. package/dist/components/primitives/command/command-loading.svelte.d.ts +4 -0
  100. package/dist/components/primitives/command/command-separator.svelte +17 -0
  101. package/dist/components/primitives/command/command-separator.svelte.d.ts +4 -0
  102. package/dist/components/primitives/command/command-shortcut.svelte +23 -0
  103. package/dist/components/primitives/command/command-shortcut.svelte.d.ts +5 -0
  104. package/dist/components/primitives/command/command.svelte +28 -0
  105. package/dist/components/primitives/command/command.svelte.d.ts +8 -0
  106. package/dist/components/primitives/command/index.d.ts +12 -0
  107. package/dist/components/primitives/command/index.js +14 -0
  108. package/dist/components/primitives/context-menu/context-menu-content.svelte +1 -1
  109. package/dist/components/primitives/context-menu/context-menu-sub-content.svelte +1 -1
  110. package/dist/components/primitives/dialog/dialog-content.svelte +11 -3
  111. package/dist/components/primitives/dialog/dialog-content.svelte.d.ts +2 -0
  112. package/dist/components/primitives/dialog/dialog-overlay.svelte +1 -1
  113. package/dist/components/primitives/dialog/dialog-title.svelte +6 -2
  114. package/dist/components/primitives/dialog/dialog-title.svelte.d.ts +5 -1
  115. package/dist/components/primitives/drawer/Drawer.svelte +2 -2
  116. package/dist/components/primitives/dropdown-menu/dropdown-menu-checkbox-group.svelte +16 -0
  117. package/dist/components/primitives/dropdown-menu/dropdown-menu-checkbox-group.svelte.d.ts +4 -0
  118. package/dist/components/primitives/dropdown-menu/dropdown-menu-checkbox-item.svelte +46 -0
  119. package/dist/components/primitives/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts +9 -0
  120. package/dist/components/primitives/dropdown-menu/dropdown-menu-content.svelte +31 -0
  121. package/dist/components/primitives/dropdown-menu/dropdown-menu-content.svelte.d.ts +10 -0
  122. package/dist/components/primitives/dropdown-menu/dropdown-menu-group-heading.svelte +22 -0
  123. package/dist/components/primitives/dropdown-menu/dropdown-menu-group-heading.svelte.d.ts +8 -0
  124. package/dist/components/primitives/dropdown-menu/dropdown-menu-group.svelte +7 -0
  125. package/dist/components/primitives/dropdown-menu/dropdown-menu-group.svelte.d.ts +4 -0
  126. package/dist/components/primitives/dropdown-menu/dropdown-menu-item.svelte +27 -0
  127. package/dist/components/primitives/dropdown-menu/dropdown-menu-item.svelte.d.ts +8 -0
  128. package/dist/components/primitives/dropdown-menu/dropdown-menu-label.svelte +24 -0
  129. package/dist/components/primitives/dropdown-menu/dropdown-menu-label.svelte.d.ts +8 -0
  130. package/dist/components/primitives/dropdown-menu/dropdown-menu-portal.svelte +7 -0
  131. package/dist/components/primitives/dropdown-menu/dropdown-menu-portal.svelte.d.ts +3 -0
  132. package/dist/components/primitives/dropdown-menu/dropdown-menu-radio-group.svelte +16 -0
  133. package/dist/components/primitives/dropdown-menu/dropdown-menu-radio-group.svelte.d.ts +4 -0
  134. package/dist/components/primitives/dropdown-menu/dropdown-menu-radio-item.svelte +36 -0
  135. package/dist/components/primitives/dropdown-menu/dropdown-menu-radio-item.svelte.d.ts +4 -0
  136. package/dist/components/primitives/dropdown-menu/dropdown-menu-separator.svelte +17 -0
  137. package/dist/components/primitives/dropdown-menu/dropdown-menu-separator.svelte.d.ts +4 -0
  138. package/dist/components/primitives/dropdown-menu/dropdown-menu-shortcut.svelte +23 -0
  139. package/dist/components/primitives/dropdown-menu/dropdown-menu-shortcut.svelte.d.ts +5 -0
  140. package/dist/components/primitives/dropdown-menu/dropdown-menu-sub-content.svelte +31 -0
  141. package/dist/components/primitives/dropdown-menu/dropdown-menu-sub-content.svelte.d.ts +10 -0
  142. package/dist/components/primitives/dropdown-menu/dropdown-menu-sub-trigger.svelte +29 -0
  143. package/dist/components/primitives/dropdown-menu/dropdown-menu-sub-trigger.svelte.d.ts +7 -0
  144. package/dist/components/primitives/dropdown-menu/dropdown-menu-sub.svelte +7 -0
  145. package/dist/components/primitives/dropdown-menu/dropdown-menu-sub.svelte.d.ts +3 -0
  146. package/dist/components/primitives/dropdown-menu/dropdown-menu-trigger.svelte +7 -0
  147. package/dist/components/primitives/dropdown-menu/dropdown-menu-trigger.svelte.d.ts +4 -0
  148. package/dist/components/primitives/dropdown-menu/dropdown-menu.svelte +7 -0
  149. package/dist/components/primitives/dropdown-menu/dropdown-menu.svelte.d.ts +3 -0
  150. package/dist/components/primitives/dropdown-menu/index.d.ts +18 -0
  151. package/dist/components/primitives/dropdown-menu/index.js +18 -0
  152. package/dist/components/primitives/{alert/alert-description.svelte → empty/empty-content.svelte} +3 -3
  153. package/dist/components/primitives/empty/empty-content.svelte.d.ts +5 -0
  154. package/dist/components/primitives/empty/empty-description.svelte +23 -0
  155. package/dist/components/primitives/{alert/alert-description.svelte.d.ts → empty/empty-description.svelte.d.ts} +4 -4
  156. package/dist/components/primitives/{alert/alert-title.svelte → empty/empty-header.svelte} +3 -3
  157. package/dist/components/primitives/empty/empty-header.svelte.d.ts +5 -0
  158. package/dist/components/primitives/empty/empty-media.svelte +41 -0
  159. package/dist/components/primitives/empty/empty-media.svelte.d.ts +26 -0
  160. package/dist/components/primitives/{card/card-action.svelte → empty/empty-title.svelte} +2 -2
  161. package/dist/components/primitives/{card/card-action.svelte.d.ts → empty/empty-title.svelte.d.ts} +3 -3
  162. package/dist/components/primitives/empty/empty.svelte +23 -0
  163. package/dist/components/primitives/empty/empty.svelte.d.ts +5 -0
  164. package/dist/components/primitives/empty/index.d.ts +7 -0
  165. package/dist/components/primitives/empty/index.js +9 -0
  166. package/dist/components/primitives/index.d.ts +10 -1
  167. package/dist/components/primitives/index.js +10 -1
  168. package/dist/components/primitives/input/input.svelte +4 -4
  169. package/dist/components/primitives/input-group/index.d.ts +7 -0
  170. package/dist/components/primitives/input-group/index.js +9 -0
  171. package/dist/components/primitives/input-group/input-group-addon.svelte +53 -0
  172. package/dist/components/primitives/input-group/input-group-addon.svelte.d.ts +32 -0
  173. package/dist/components/primitives/input-group/input-group-button.svelte +49 -0
  174. package/dist/components/primitives/input-group/input-group-button.svelte.d.ts +32 -0
  175. package/dist/components/primitives/input-group/input-group-input.svelte +25 -0
  176. package/dist/components/primitives/input-group/input-group-input.svelte.d.ts +11 -0
  177. package/dist/components/primitives/input-group/input-group-text.svelte +22 -0
  178. package/dist/components/primitives/input-group/input-group-text.svelte.d.ts +5 -0
  179. package/dist/components/primitives/input-group/input-group-textarea.svelte +23 -0
  180. package/dist/components/primitives/input-group/input-group-textarea.svelte.d.ts +3 -0
  181. package/dist/components/primitives/input-group/input-group.svelte +24 -0
  182. package/dist/components/primitives/{alert/alert-title.svelte.d.ts → input-group/input-group.svelte.d.ts} +4 -4
  183. package/dist/components/primitives/mode-toggle/mode-toggle.svelte +6 -7
  184. package/dist/components/primitives/popover/index.d.ts +9 -0
  185. package/dist/components/primitives/popover/index.js +11 -0
  186. package/dist/components/primitives/popover/popover-close.svelte +7 -0
  187. package/dist/components/primitives/popover/popover-close.svelte.d.ts +4 -0
  188. package/dist/components/primitives/popover/popover-content.svelte +31 -0
  189. package/dist/components/primitives/popover/popover-content.svelte.d.ts +10 -0
  190. package/dist/components/primitives/popover/popover-description.svelte +20 -0
  191. package/dist/components/primitives/popover/popover-description.svelte.d.ts +5 -0
  192. package/dist/components/primitives/popover/popover-header.svelte +20 -0
  193. package/dist/components/primitives/popover/popover-header.svelte.d.ts +5 -0
  194. package/dist/components/primitives/popover/popover-portal.svelte +7 -0
  195. package/dist/components/primitives/popover/popover-portal.svelte.d.ts +3 -0
  196. package/dist/components/primitives/popover/popover-title.svelte +15 -0
  197. package/dist/components/primitives/popover/popover-title.svelte.d.ts +5 -0
  198. package/dist/components/primitives/popover/popover-trigger.svelte +17 -0
  199. package/dist/components/primitives/popover/popover-trigger.svelte.d.ts +4 -0
  200. package/dist/components/primitives/popover/popover.svelte +7 -0
  201. package/dist/components/primitives/popover/popover.svelte.d.ts +3 -0
  202. package/dist/components/primitives/resizable/resizable-handle.svelte +6 -2
  203. package/dist/components/primitives/resizable/resizable-handle.svelte.d.ts +2 -0
  204. package/dist/components/primitives/resizable/resizable-pane-group.svelte +1 -4
  205. package/dist/components/primitives/scroll-area/scroll-area.svelte +1 -1
  206. package/dist/components/primitives/search/search.svelte +3 -3
  207. package/dist/components/primitives/select/select-content.svelte +1 -1
  208. package/dist/components/primitives/select/select-trigger.svelte +1 -1
  209. package/dist/components/primitives/severity.d.ts +7 -0
  210. package/dist/components/primitives/severity.js +19 -0
  211. package/dist/components/primitives/slider/slider.svelte +8 -3
  212. package/dist/components/primitives/slider/slider.svelte.d.ts +5 -1
  213. package/dist/components/primitives/sonner/sonner.svelte +1 -1
  214. package/dist/components/primitives/spinner/index.d.ts +1 -0
  215. package/dist/components/primitives/spinner/index.js +1 -0
  216. package/dist/components/primitives/spinner/spinner.svelte +29 -0
  217. package/dist/components/primitives/spinner/spinner.svelte.d.ts +4 -0
  218. package/dist/components/primitives/switch/switch.svelte +2 -2
  219. package/dist/components/primitives/tabs/tabs-list.svelte +27 -5
  220. package/dist/components/primitives/tabs/tabs-list.svelte.d.ts +22 -1
  221. package/dist/components/primitives/tabs/tabs-trigger.svelte +23 -5
  222. package/dist/components/primitives/tabs/tabs-trigger.svelte.d.ts +22 -1
  223. package/dist/components/primitives/tabs/tabs.svelte +6 -2
  224. package/dist/components/primitives/tabs/tabs.svelte.d.ts +5 -1
  225. package/dist/components/primitives/textarea/textarea.svelte +1 -1
  226. package/dist/components/primitives/theme-switcher/ThemeSwitcher.svelte +1 -1
  227. package/dist/components/primitives/toggle/index.d.ts +3 -0
  228. package/dist/components/primitives/toggle/index.js +5 -0
  229. package/dist/components/primitives/toggle/toggle.svelte +54 -0
  230. package/dist/components/primitives/toggle/toggle.svelte.d.ts +46 -0
  231. package/dist/components/primitives/toggle-group/index.d.ts +3 -0
  232. package/dist/components/primitives/toggle-group/index.js +5 -0
  233. package/dist/components/primitives/toggle-group/toggle-group-item.svelte +35 -0
  234. package/dist/components/primitives/toggle-group/toggle-group-item.svelte.d.ts +6 -0
  235. package/dist/components/primitives/toggle-group/toggle-group.svelte +75 -0
  236. package/dist/components/primitives/toggle-group/toggle-group.svelte.d.ts +17 -0
  237. package/dist/components/viewer/MeshMetadataPanel.svelte +119 -0
  238. package/dist/components/viewer/MeshMetadataPanel.svelte.d.ts +9 -0
  239. package/dist/components/viewer/SceneManager.svelte +14 -5
  240. package/dist/components/viewer/Viewer.svelte +243 -221
  241. package/dist/components/viewer/Viewer.svelte.d.ts +3 -0
  242. package/dist/compute/run-panel-action.d.ts +8 -0
  243. package/dist/compute/run-panel-action.js +12 -0
  244. package/dist/compute/solving.svelte.d.ts +11 -7
  245. package/dist/compute/solving.svelte.js +64 -45
  246. package/dist/compute/useSolveSession.svelte.js +3 -0
  247. package/dist/constants.d.ts +6 -8
  248. package/dist/constants.js +7 -9
  249. package/dist/contexts/hostContext.svelte.d.ts +39 -0
  250. package/dist/contexts/hostContext.svelte.js +9 -0
  251. package/dist/i18n/localeContext.svelte.d.ts +10 -3
  252. package/dist/i18n/localeContext.svelte.js +27 -5
  253. package/dist/i18n/messages.d.ts +150 -2
  254. package/dist/i18n/messages.js +261 -11
  255. package/dist/index.d.ts +4 -1
  256. package/dist/index.js +3 -0
  257. package/dist/public.d.ts +1 -1
  258. package/dist/schema/host-support.d.ts +29 -0
  259. package/dist/schema/host-support.js +97 -0
  260. package/dist/schema/option-display.d.ts +12 -0
  261. package/dist/schema/option-display.js +29 -0
  262. package/dist/schema/param-exporter.d.ts +4 -1
  263. package/dist/schema/param-exporter.js +10 -6
  264. package/dist/schema/visibility-rules.js +21 -0
  265. package/dist/styles/base.css +80 -10
  266. package/dist/types/actionButton.d.ts +17 -3
  267. package/dist/types/presetLabels.d.ts +3 -2
  268. package/dist/types/presetLabels.js +9 -8
  269. package/dist/utils/file-download.js +10 -22
  270. package/dist/utils/host-files.d.ts +12 -0
  271. package/dist/utils/host-files.js +46 -0
  272. package/dist/utils/loadScript.d.ts +2 -0
  273. package/dist/utils/loadScript.js +2 -0
  274. package/dist/utils/webp-to-png.d.ts +10 -0
  275. package/dist/utils/webp-to-png.js +41 -0
  276. package/package.json +14 -14
  277. package/src/lib/components/ConfirmDialog.svelte +2 -10
  278. package/src/lib/components/ErrorScreen.svelte +21 -27
  279. package/src/lib/components/compute/AppLayout.svelte +286 -116
  280. package/src/lib/components/compute/ComputeApp.svelte +45 -24
  281. package/src/lib/components/compute/ComputeMessagesDialog.svelte +47 -83
  282. package/src/lib/components/compute/ParameterPresetManager.svelte +37 -130
  283. package/src/lib/components/compute/SolveMessages.svelte +131 -77
  284. package/src/lib/components/layout/AppShell.svelte +10 -6
  285. package/src/lib/components/layout/PageFooter.svelte +23 -11
  286. package/src/lib/components/layout/PageHeader.svelte +11 -7
  287. package/src/lib/components/layout/Pagination.svelte +2 -4
  288. package/src/lib/components/layout/SectionHeader.svelte +4 -2
  289. package/src/lib/components/layout/SideNav.svelte +56 -7
  290. package/src/lib/components/preview/ChartOutput.svelte +35 -25
  291. package/src/lib/components/preview/Group.svelte +92 -103
  292. package/src/lib/components/preview/HelpButton.svelte +36 -0
  293. package/src/lib/components/preview/ImageOutput.svelte +430 -71
  294. package/src/lib/components/preview/InputControl.svelte +163 -90
  295. package/src/lib/components/preview/OutputDisplay.svelte +28 -33
  296. package/src/lib/components/preview/TabBar.svelte +106 -22
  297. package/src/lib/components/preview/TabContent.svelte +63 -57
  298. package/src/lib/components/preview/TabLayout.svelte +27 -5
  299. package/src/lib/components/preview/inputs/CheckboxInput.svelte +7 -7
  300. package/src/lib/components/preview/inputs/ChecklistInput.svelte +7 -2
  301. package/src/lib/components/preview/inputs/ColorInput.svelte +4 -2
  302. package/src/lib/components/preview/inputs/DropdownInput.svelte +19 -4
  303. package/src/lib/components/preview/inputs/FileInput.svelte +112 -108
  304. package/src/lib/components/preview/inputs/GeometryInput.svelte +128 -0
  305. package/src/lib/components/preview/inputs/NumberInput.svelte +123 -61
  306. package/src/lib/components/preview/inputs/OptionGlyph.svelte +29 -0
  307. package/src/lib/components/preview/inputs/SegmentedInput.svelte +44 -0
  308. package/src/lib/components/preview/inputs/TextInput.svelte +8 -4
  309. package/src/lib/components/preview/inputs/TileInput.svelte +80 -0
  310. package/src/lib/components/preview/inputs/index.ts +3 -0
  311. package/src/lib/components/primitives/CalculateButton.svelte +56 -24
  312. package/src/lib/components/primitives/Callout.svelte +11 -18
  313. package/src/lib/components/primitives/DataTable.svelte +38 -5
  314. package/src/lib/components/primitives/FilterableDropdown.svelte +42 -129
  315. package/src/lib/components/primitives/IssueList.svelte +56 -0
  316. package/src/lib/components/primitives/SeverityIcon.svelte +15 -0
  317. package/src/lib/components/primitives/SolvingIndicator.svelte +43 -42
  318. package/src/lib/components/primitives/StateDisplay.svelte +19 -79
  319. package/src/lib/components/primitives/ViewToggle.svelte +18 -33
  320. package/src/lib/components/primitives/alert-dialog/alert-dialog-action.svelte +9 -3
  321. package/src/lib/components/primitives/alert-dialog/alert-dialog-content.svelte +1 -1
  322. package/src/lib/components/primitives/alert-dialog/alert-dialog-overlay.svelte +1 -1
  323. package/src/lib/components/primitives/badge/badge.svelte +2 -2
  324. package/src/lib/components/primitives/button/button.svelte +6 -2
  325. package/src/lib/components/primitives/card/card-header.svelte +1 -1
  326. package/src/lib/components/primitives/card/card.svelte +21 -5
  327. package/src/lib/components/primitives/card/index.ts +1 -4
  328. package/src/lib/components/primitives/checkbox/checkbox.svelte +1 -1
  329. package/src/lib/components/primitives/command/command-dialog.svelte +42 -0
  330. package/src/lib/components/primitives/command/command-empty.svelte +17 -0
  331. package/src/lib/components/primitives/command/command-group.svelte +33 -0
  332. package/src/lib/components/primitives/command/command-input.svelte +36 -0
  333. package/src/lib/components/primitives/command/command-item.svelte +28 -0
  334. package/src/lib/components/primitives/command/command-link-item.svelte +21 -0
  335. package/src/lib/components/primitives/command/command-list.svelte +20 -0
  336. package/src/lib/components/primitives/command/command-loading.svelte +7 -0
  337. package/src/lib/components/primitives/command/command-separator.svelte +17 -0
  338. package/src/lib/components/primitives/command/command-shortcut.svelte +23 -0
  339. package/src/lib/components/primitives/command/command.svelte +28 -0
  340. package/src/lib/components/primitives/command/index.ts +37 -0
  341. package/src/lib/components/primitives/context-menu/context-menu-content.svelte +1 -1
  342. package/src/lib/components/primitives/context-menu/context-menu-sub-content.svelte +1 -1
  343. package/src/lib/components/primitives/dialog/dialog-content.svelte +11 -3
  344. package/src/lib/components/primitives/dialog/dialog-overlay.svelte +1 -1
  345. package/src/lib/components/primitives/dialog/dialog-title.svelte +6 -2
  346. package/src/lib/components/primitives/drawer/Drawer.svelte +2 -2
  347. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-checkbox-group.svelte +16 -0
  348. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-checkbox-item.svelte +46 -0
  349. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-content.svelte +31 -0
  350. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-group-heading.svelte +22 -0
  351. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-group.svelte +7 -0
  352. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-item.svelte +27 -0
  353. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-label.svelte +24 -0
  354. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-portal.svelte +7 -0
  355. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-radio-group.svelte +16 -0
  356. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-radio-item.svelte +36 -0
  357. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-separator.svelte +17 -0
  358. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-shortcut.svelte +23 -0
  359. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-sub-content.svelte +31 -0
  360. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-sub-trigger.svelte +29 -0
  361. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-sub.svelte +7 -0
  362. package/src/lib/components/primitives/dropdown-menu/dropdown-menu-trigger.svelte +7 -0
  363. package/src/lib/components/primitives/dropdown-menu/dropdown-menu.svelte +7 -0
  364. package/src/lib/components/primitives/dropdown-menu/index.ts +54 -0
  365. package/src/lib/components/primitives/{alert/alert-description.svelte → empty/empty-content.svelte} +3 -3
  366. package/src/lib/components/primitives/empty/empty-description.svelte +23 -0
  367. package/src/lib/components/primitives/{alert/alert-title.svelte → empty/empty-header.svelte} +3 -3
  368. package/src/lib/components/primitives/empty/empty-media.svelte +41 -0
  369. package/src/lib/components/primitives/{card/card-action.svelte → empty/empty-title.svelte} +2 -2
  370. package/src/lib/components/primitives/empty/empty.svelte +23 -0
  371. package/src/lib/components/primitives/empty/index.ts +22 -0
  372. package/src/lib/components/primitives/index.ts +10 -1
  373. package/src/lib/components/primitives/input/input.svelte +4 -4
  374. package/src/lib/components/primitives/input-group/index.ts +22 -0
  375. package/src/lib/components/primitives/input-group/input-group-addon.svelte +53 -0
  376. package/src/lib/components/primitives/input-group/input-group-button.svelte +49 -0
  377. package/src/lib/components/primitives/input-group/input-group-input.svelte +25 -0
  378. package/src/lib/components/primitives/input-group/input-group-text.svelte +22 -0
  379. package/src/lib/components/primitives/input-group/input-group-textarea.svelte +23 -0
  380. package/src/lib/components/primitives/input-group/input-group.svelte +24 -0
  381. package/src/lib/components/primitives/mode-toggle/mode-toggle.svelte +6 -7
  382. package/src/lib/components/primitives/popover/index.ts +28 -0
  383. package/src/lib/components/primitives/popover/popover-close.svelte +7 -0
  384. package/src/lib/components/primitives/popover/popover-content.svelte +31 -0
  385. package/src/lib/components/primitives/popover/popover-description.svelte +20 -0
  386. package/src/lib/components/primitives/popover/popover-header.svelte +20 -0
  387. package/src/lib/components/primitives/popover/popover-portal.svelte +7 -0
  388. package/src/lib/components/primitives/popover/popover-title.svelte +15 -0
  389. package/src/lib/components/primitives/popover/popover-trigger.svelte +17 -0
  390. package/src/lib/components/primitives/popover/popover.svelte +7 -0
  391. package/src/lib/components/primitives/resizable/resizable-handle.svelte +6 -2
  392. package/src/lib/components/primitives/resizable/resizable-pane-group.svelte +1 -4
  393. package/src/lib/components/primitives/scroll-area/scroll-area.svelte +1 -1
  394. package/src/lib/components/primitives/search/search.svelte +3 -3
  395. package/src/lib/components/primitives/select/select-content.svelte +1 -1
  396. package/src/lib/components/primitives/select/select-trigger.svelte +1 -1
  397. package/src/lib/components/primitives/severity.ts +26 -0
  398. package/src/lib/components/primitives/slider/slider.svelte +8 -3
  399. package/src/lib/components/primitives/sonner/sonner.svelte +1 -1
  400. package/src/lib/components/primitives/spinner/index.ts +1 -0
  401. package/src/lib/components/primitives/spinner/spinner.svelte +29 -0
  402. package/src/lib/components/primitives/switch/switch.svelte +2 -2
  403. package/src/lib/components/primitives/tabs/tabs-list.svelte +27 -5
  404. package/src/lib/components/primitives/tabs/tabs-trigger.svelte +23 -5
  405. package/src/lib/components/primitives/tabs/tabs.svelte +6 -2
  406. package/src/lib/components/primitives/textarea/textarea.svelte +1 -1
  407. package/src/lib/components/primitives/theme-switcher/ThemeSwitcher.svelte +1 -1
  408. package/src/lib/components/primitives/toggle/index.ts +13 -0
  409. package/src/lib/components/primitives/toggle/toggle.svelte +54 -0
  410. package/src/lib/components/primitives/toggle-group/index.ts +10 -0
  411. package/src/lib/components/primitives/toggle-group/toggle-group-item.svelte +35 -0
  412. package/src/lib/components/primitives/toggle-group/toggle-group.svelte +75 -0
  413. package/src/lib/components/viewer/MeshMetadataPanel.svelte +119 -0
  414. package/src/lib/components/viewer/SceneManager.svelte +14 -5
  415. package/src/lib/components/viewer/Viewer.svelte +243 -221
  416. package/src/lib/compute/run-panel-action.ts +16 -0
  417. package/src/lib/compute/solving.svelte.ts +66 -50
  418. package/src/lib/compute/useSolveSession.svelte.ts +3 -0
  419. package/src/lib/constants.ts +7 -9
  420. package/src/lib/contexts/hostContext.svelte.ts +51 -0
  421. package/src/lib/i18n/localeContext.svelte.ts +40 -5
  422. package/src/lib/i18n/messages.ts +453 -13
  423. package/src/lib/index.ts +21 -0
  424. package/src/lib/public.ts +1 -0
  425. package/src/lib/schema/host-support.ts +129 -0
  426. package/src/lib/schema/option-display.ts +44 -0
  427. package/src/lib/schema/param-exporter.ts +10 -7
  428. package/src/lib/schema/visibility-rules.ts +23 -0
  429. package/src/lib/styles/base.css +80 -10
  430. package/src/lib/types/actionButton.ts +16 -3
  431. package/src/lib/types/presetLabels.ts +13 -11
  432. package/src/lib/utils/file-download.ts +11 -21
  433. package/src/lib/utils/host-files.ts +61 -0
  434. package/src/lib/utils/loadScript.ts +3 -0
  435. package/src/lib/utils/webp-to-png.ts +48 -0
  436. package/dist/components/primitives/alert/alert.svelte +0 -44
  437. package/dist/components/primitives/alert/alert.svelte.d.ts +0 -26
  438. package/dist/components/primitives/alert/index.d.ts +0 -5
  439. package/dist/components/primitives/alert/index.js +0 -7
  440. package/dist/components/viewer/MeshMetadataDialog.svelte +0 -126
  441. package/dist/components/viewer/MeshMetadataDialog.svelte.d.ts +0 -10
  442. package/src/lib/components/primitives/alert/alert.svelte +0 -44
  443. package/src/lib/components/primitives/alert/index.ts +0 -14
  444. package/src/lib/components/viewer/MeshMetadataDialog.svelte +0 -126
@@ -5,6 +5,9 @@
5
5
  // Only the strings @selvajs/ui renders itself. Names coming from a Grasshopper
6
6
  // definition — meshes, layers, metadata keys — live in the user's .gh file and
7
7
  // cannot be translated here.
8
+ //
9
+ // A `{name}` in a message is a placeholder the component fills in. Pairs ending in
10
+ // `One`/`Other` are the singular and plural forms of one message.
8
11
 
9
12
  export type Locale = 'en' | 'de';
10
13
 
@@ -33,6 +36,15 @@ export interface ViewerMessages {
33
36
  viewBottom: string;
34
37
  viewIso: string;
35
38
 
39
+ // Display looks
40
+ lookTechnical: string;
41
+ lookStudio: string;
42
+ lookShowcase: string;
43
+ lookArctic: string;
44
+ lookXray: string;
45
+ lookLineart: string;
46
+ lookWireframe: string;
47
+
36
48
  // Scene manager
37
49
  searchObjects: string;
38
50
  clearSearch: string;
@@ -61,12 +73,14 @@ export interface ViewerMessages {
61
73
  solveMessagesConfirm: string;
62
74
  solveMessagesDiscard: string;
63
75
  solveMessagesAbort: string;
76
+ /** Stands in for Abort where the page can't take a click mid-solve. */
77
+ solveMessagesEscHint: string;
64
78
  solveMessagesDismiss: string;
65
79
  solveSolving: string;
66
80
  parametersTab: string;
67
81
  moreTab: string;
68
- expandPanel: string;
69
- collapsePanel: string;
82
+ scrollTabsBack: string;
83
+ scrollTabsForward: string;
70
84
  /** `{side}` is replaced with `panelSideLeft` / `panelSideRight`. */
71
85
  expandSidePanel: string;
72
86
  panelSideLeft: string;
@@ -80,6 +94,152 @@ export interface ViewerMessages {
80
94
  pressToCalculate: string;
81
95
  calculate: string;
82
96
  upToDate: string;
97
+ /** The panel footer's ⋯ menu: saving and loading inputs, plus the host's own actions. */
98
+ moreActions: string;
99
+ /** Under a menu action that solves before it runs, while the inputs have changed. */
100
+ calculatesFirst: string;
101
+
102
+ // Footer and message centre
103
+ /** `{count}` is replaced with the number of errors. */
104
+ errorCountOne: string;
105
+ errorCountOther: string;
106
+ /** `{count}` is replaced with the number of warnings. */
107
+ warningCountOne: string;
108
+ warningCountOther: string;
109
+ /** `{count}` is replaced with the number of notes. */
110
+ noteCountOne: string;
111
+ noteCountOther: string;
112
+ /** `{count}` is replaced with the number of messages. */
113
+ lastSolveMessagesOne: string;
114
+ lastSolveMessagesOther: string;
115
+ messagesTitle: string;
116
+ /** `{name}` is replaced with the copyright holder, `{year}` with the current year. */
117
+ copyright: string;
118
+ close: string;
119
+ toggleTheme: string;
120
+ errorTitle: string;
121
+ goHome: string;
122
+
123
+ // Input fields
124
+ selectOption: string;
125
+ noOptionsYet: string;
126
+ /** `{min}` is replaced with the field's minimum. */
127
+ minValue: string;
128
+ /** `{max}` is replaced with the field's maximum. */
129
+ maxValue: string;
130
+ fineDragHint: string;
131
+ /** `{max}` is replaced with the field's character limit. */
132
+ maxLength: string;
133
+ invalidFormat: string;
134
+ invalidPattern: string;
135
+
136
+ // Geometry input (Rhino only)
137
+ /** The pick button when the input takes several kinds of object. */
138
+ geometryPickAnyOne: string;
139
+ geometryPickAnyOther: string;
140
+ /** Shown while Rhino's viewport prompt for a pick is open. */
141
+ geometryPicking: string;
142
+ /** Where this page may not pick, such as a browser tab beside the Rhino panel. */
143
+ geometryPickInPanel: string;
144
+ geometryPickAgain: string;
145
+ geometryClear: string;
146
+ // The pick button when the input takes one kind: `One` picks a single object, `Other` several.
147
+ geometryPickPointOne: string;
148
+ geometryPickPointOther: string;
149
+ geometryPickPointCloudOne: string;
150
+ geometryPickPointCloudOther: string;
151
+ geometryPickCurveOne: string;
152
+ geometryPickCurveOther: string;
153
+ geometryPickLineOne: string;
154
+ geometryPickLineOther: string;
155
+ geometryPickPlaneOne: string;
156
+ geometryPickPlaneOther: string;
157
+ geometryPickSurfaceOne: string;
158
+ geometryPickSurfaceOther: string;
159
+ geometryPickPolysurfaceOne: string;
160
+ geometryPickPolysurfaceOther: string;
161
+ geometryPickExtrusionOne: string;
162
+ geometryPickExtrusionOther: string;
163
+ geometryPickMeshOne: string;
164
+ geometryPickMeshOther: string;
165
+ geometryPickSubdOne: string;
166
+ geometryPickSubdOther: string;
167
+ geometryPickBlockOne: string;
168
+ geometryPickBlockOther: string;
169
+
170
+ // File input
171
+ fileModeUpload: string;
172
+ fileModeUrl: string;
173
+ fileUrlLabel: string;
174
+ fetchFile: string;
175
+ fetchingFile: string;
176
+ fileUrlPublic: string;
177
+ chooseFile: string;
178
+ /** `{formats}` is replaced with the accepted extensions. */
179
+ acceptedFormats: string;
180
+ /** `{ext}` is replaced with the file's extension. */
181
+ uploadedFile: string;
182
+ /** `{ext}` is replaced with the file's extension, `{size}` with its size in MB. */
183
+ uploadedFileSize: string;
184
+ /** `{ext}` is replaced with the file's extension, `{size}` with its size in KB. */
185
+ fileLoaded: string;
186
+ urlInvalid: string;
187
+ urlProtocolUnsupported: string;
188
+ /** `{status}` is replaced with the HTTP status the server answered with. */
189
+ urlServerError: string;
190
+ /** `{ext}` is replaced with the rejected extension, `{formats}` with the accepted ones. */
191
+ fileFormatNotAccepted: string;
192
+ /** `{size}` is replaced with the file's size in MB, `{max}` with the limit in MB. */
193
+ fileTooLarge: string;
194
+ fileTooLargeUseUpload: string;
195
+ fileReadFailed: string;
196
+ /** `{host}` is replaced with the URL's host name. */
197
+ urlUnreachable: string;
198
+ urlUnreachableHint: string;
199
+ urlHintSharePoint: string;
200
+ urlHintGoogleDrive: string;
201
+ urlHintDropbox: string;
202
+ unknownError: string;
203
+
204
+ // Outputs
205
+ waitingForData: string;
206
+ waitingForFiles: string;
207
+ /** `{count}` is replaced with the number of files. */
208
+ fileCount: string;
209
+ duplicateFilesTitle: string;
210
+ duplicatePathsOne: string;
211
+ duplicatePathsOther: string;
212
+ duplicateFilesHint: string;
213
+ downloadFile: string;
214
+ /** `{count}` is replaced with the number of files. */
215
+ downloadFiles: string;
216
+ downloading: string;
217
+ downloadFailed: string;
218
+ copy: string;
219
+ copied: string;
220
+ chartReceiving: string;
221
+ chartRenderFailed: string;
222
+ /** `{error}` is replaced with the browser's reason. */
223
+ fullscreenUnavailable: string;
224
+ /** `{error}` is replaced with the browser's reason. */
225
+ exitFullscreenFailed: string;
226
+
227
+ // Image output
228
+ imageViewer: string;
229
+ imageLoading: string;
230
+ /** `{ext}` is replaced with the file's extension, `{formats}` with the supported ones. */
231
+ imageUnsupported: string;
232
+ imageUnknownFormat: string;
233
+ /** `{file}` is replaced with the file's name. */
234
+ imageDecodeFailed: string;
235
+ previousImage: string;
236
+ nextImage: string;
237
+ zoomHint: string;
238
+ zoomIn: string;
239
+ zoomOut: string;
240
+ zoomFit: string;
241
+ zoomActual: string;
242
+ downloadImage: string;
83
243
  }
84
244
 
85
245
  const en: ViewerMessages = {
@@ -105,6 +265,14 @@ const en: ViewerMessages = {
105
265
  viewBottom: 'Bottom',
106
266
  viewIso: 'Isometric',
107
267
 
268
+ lookTechnical: 'Technical',
269
+ lookStudio: 'Studio',
270
+ lookShowcase: 'Showcase',
271
+ lookArctic: 'Arctic',
272
+ lookXray: 'X-Ray',
273
+ lookLineart: 'Line Art',
274
+ lookWireframe: 'Wireframe',
275
+
108
276
  searchObjects: 'Search objects...',
109
277
  clearSearch: 'Clear search',
110
278
  expandLayer: 'Expand layer',
@@ -121,7 +289,7 @@ const en: ViewerMessages = {
121
289
  objectFallbackName: 'Object',
122
290
  noMetadata: 'No metadata',
123
291
 
124
- loadingSchema: 'Loading schema...',
292
+ loadingSchema: 'Loading…',
125
293
  solveBlocked: 'The definition stopped this solve. No results were produced.',
126
294
  solveBlockedTitle: 'Solve stopped',
127
295
  solveMessagesTitle: 'Solve messages',
@@ -129,12 +297,13 @@ const en: ViewerMessages = {
129
297
  solveMessagesConfirm: 'Continue',
130
298
  solveMessagesDiscard: 'Discard',
131
299
  solveMessagesAbort: 'Abort',
300
+ solveMessagesEscHint: 'Esc aborts the solve',
132
301
  solveMessagesDismiss: 'Dismiss',
133
302
  solveSolving: 'Solving…',
134
303
  parametersTab: 'Parameters',
135
304
  moreTab: 'More',
136
- expandPanel: 'Expand panel',
137
- collapsePanel: 'Collapse panel',
305
+ scrollTabsBack: 'Previous tabs',
306
+ scrollTabsForward: 'More tabs',
138
307
  expandSidePanel: 'Expand {side} panel',
139
308
  panelSideLeft: 'left',
140
309
  panelSideRight: 'right',
@@ -142,10 +311,128 @@ const en: ViewerMessages = {
142
311
 
143
312
  solving: 'Solving',
144
313
  solvingEllipsis: 'Solving...',
145
- solvingSubtitle: 'Grasshopper is calculating...',
314
+ solvingSubtitle: 'This can take a moment…',
146
315
  pressToCalculate: 'Press to calculate',
147
316
  calculate: 'Calculate',
148
- upToDate: 'Up to date'
317
+ upToDate: 'Up to date',
318
+ moreActions: 'More actions',
319
+ calculatesFirst: 'Calculates first',
320
+
321
+ errorCountOne: '{count} error',
322
+ errorCountOther: '{count} errors',
323
+ warningCountOne: '{count} warning',
324
+ warningCountOther: '{count} warnings',
325
+ noteCountOne: '{count} note',
326
+ noteCountOther: '{count} notes',
327
+ lastSolveMessagesOne: '{count} message from the last solve',
328
+ lastSolveMessagesOther: '{count} messages from the last solve',
329
+ messagesTitle: 'Messages',
330
+ copyright: 'by {name} © {year}',
331
+ close: 'Close',
332
+ toggleTheme: 'Toggle theme',
333
+ errorTitle: 'Error',
334
+ goHome: 'Go Home',
335
+
336
+ selectOption: 'Select an option...',
337
+ noOptionsYet: 'No options available yet.',
338
+ minValue: 'Minimum value is {min}',
339
+ maxValue: 'Maximum value is {max}',
340
+ fineDragHint: 'Hold Shift to drag finely',
341
+ maxLength: 'Maximum {max} characters allowed',
342
+ invalidFormat: 'Invalid format',
343
+ invalidPattern: 'Invalid validation pattern configured',
344
+
345
+ geometryPickAnyOne: 'Pick an object',
346
+ geometryPickAnyOther: 'Pick objects',
347
+ geometryPicking: 'Pick in the viewport, Esc to cancel',
348
+ geometryPickInPanel: 'Pick in the Rhino panel',
349
+ geometryPickAgain: 'Pick again',
350
+ geometryClear: 'Clear',
351
+ geometryPickPointOne: 'Pick a point',
352
+ geometryPickPointOther: 'Pick points',
353
+ geometryPickPointCloudOne: 'Pick a point cloud',
354
+ geometryPickPointCloudOther: 'Pick point clouds',
355
+ geometryPickCurveOne: 'Pick a curve',
356
+ geometryPickCurveOther: 'Pick curves',
357
+ geometryPickLineOne: 'Pick a line',
358
+ geometryPickLineOther: 'Pick lines',
359
+ geometryPickPlaneOne: 'Pick a plane',
360
+ geometryPickPlaneOther: 'Pick planes',
361
+ geometryPickSurfaceOne: 'Pick a surface',
362
+ geometryPickSurfaceOther: 'Pick surfaces',
363
+ geometryPickPolysurfaceOne: 'Pick a polysurface',
364
+ geometryPickPolysurfaceOther: 'Pick polysurfaces',
365
+ geometryPickExtrusionOne: 'Pick an extrusion',
366
+ geometryPickExtrusionOther: 'Pick extrusions',
367
+ geometryPickMeshOne: 'Pick a mesh',
368
+ geometryPickMeshOther: 'Pick meshes',
369
+ geometryPickSubdOne: 'Pick a SubD',
370
+ geometryPickSubdOther: 'Pick SubDs',
371
+ geometryPickBlockOne: 'Pick a block',
372
+ geometryPickBlockOther: 'Pick blocks',
373
+
374
+ fileModeUpload: 'Upload',
375
+ fileModeUrl: 'URL',
376
+ fileUrlLabel: 'File URL',
377
+ fetchFile: 'Fetch',
378
+ fetchingFile: 'Fetching...',
379
+ fileUrlPublic: 'URL must be publicly accessible (no login required).',
380
+ chooseFile: 'Choose File or Drag & Drop',
381
+ acceptedFormats: 'Accepted formats: {formats}',
382
+ uploadedFile: 'Uploaded file ({ext})',
383
+ uploadedFileSize: 'Uploaded file ({ext}, {size}MB)',
384
+ fileLoaded: 'Loaded {ext} ({size} KB)',
385
+ urlInvalid: 'Invalid URL — make sure it starts with https://',
386
+ urlProtocolUnsupported: 'Only http:// and https:// URLs are supported.',
387
+ urlServerError: 'Server returned {status}. Check the URL is correct and publicly accessible.',
388
+ fileFormatNotAccepted: 'File format "{ext}" is not accepted. Allowed: {formats}',
389
+ fileTooLarge: 'File too large: {size}MB (max {max}MB).',
390
+ fileTooLargeUseUpload: 'Download it and use Upload instead.',
391
+ fileReadFailed: 'Failed to read the downloaded file.',
392
+ urlUnreachable:
393
+ 'Could not reach "{host}" — the file may not exist, or the server does not allow browser access.',
394
+ urlUnreachableHint:
395
+ 'Check that the URL is correct and the file is publicly accessible. If the server requires login, download the file and use the Upload option instead.',
396
+ urlHintSharePoint:
397
+ 'SharePoint/OneDrive blocks browser access. Open the file in SharePoint, use "Download" to save it locally, then upload it here.',
398
+ urlHintGoogleDrive:
399
+ 'Google Drive blocks browser access. Use "Download" in Google Drive to save the file locally, then upload it here.',
400
+ urlHintDropbox:
401
+ 'Dropbox links may block browser access. Try changing "?dl=0" to "?dl=1" in the URL, or download and upload instead.',
402
+ unknownError: 'Unknown error',
403
+
404
+ waitingForData: 'Waiting for data...',
405
+ waitingForFiles: 'Waiting for file data...',
406
+ fileCount: '{count} files',
407
+ duplicateFilesTitle: 'Duplicate file names detected',
408
+ duplicatePathsOne: 'The following path appears more than once:',
409
+ duplicatePathsOther: 'The following paths appear more than once:',
410
+ duplicateFilesHint:
411
+ 'Rename outputs in your Grasshopper definition so each file has a unique name.',
412
+ downloadFile: 'Download File',
413
+ downloadFiles: 'Download {count} Files',
414
+ downloading: 'Downloading...',
415
+ downloadFailed: 'Download failed',
416
+ copy: 'Copy',
417
+ copied: 'Copied!',
418
+ chartReceiving: 'Receiving chart data...',
419
+ chartRenderFailed: 'Failed to render chart',
420
+ fullscreenUnavailable: 'Fullscreen unavailable: {error}',
421
+ exitFullscreenFailed: 'Exit fullscreen failed: {error}',
422
+
423
+ imageViewer: 'image viewer',
424
+ imageLoading: 'Loading image…',
425
+ imageUnsupported: 'Unsupported image format: {ext}. Supported: {formats}',
426
+ imageUnknownFormat: '(unknown)',
427
+ imageDecodeFailed: "Couldn't decode {file}",
428
+ previousImage: 'Previous image',
429
+ nextImage: 'Next image',
430
+ zoomHint: 'Hold Ctrl or ⌘ and scroll to zoom',
431
+ zoomIn: 'Zoom in',
432
+ zoomOut: 'Zoom out',
433
+ zoomFit: 'Fit',
434
+ zoomActual: 'Actual pixels',
435
+ downloadImage: 'Download image'
149
436
  };
150
437
 
151
438
  const de: ViewerMessages = {
@@ -171,6 +458,14 @@ const de: ViewerMessages = {
171
458
  viewBottom: 'Unten',
172
459
  viewIso: 'Isometrisch',
173
460
 
461
+ lookTechnical: 'Technisch',
462
+ lookStudio: 'Studio',
463
+ lookShowcase: 'Präsentation',
464
+ lookArctic: 'Arktis',
465
+ lookXray: 'Röntgen',
466
+ lookLineart: 'Strichzeichnung',
467
+ lookWireframe: 'Drahtgitter',
468
+
174
469
  searchObjects: 'Objekte suchen...',
175
470
  clearSearch: 'Suche löschen',
176
471
  expandLayer: 'Ebene aufklappen',
@@ -187,7 +482,7 @@ const de: ViewerMessages = {
187
482
  objectFallbackName: 'Objekt',
188
483
  noMetadata: 'Keine Metadaten',
189
484
 
190
- loadingSchema: 'Schema wird geladen...',
485
+ loadingSchema: 'Wird geladen…',
191
486
  solveBlocked: 'Die Definition hat diese Berechnung gestoppt. Es wurden keine Ergebnisse erzeugt.',
192
487
  solveBlockedTitle: 'Berechnung gestoppt',
193
488
  solveMessagesTitle: 'Meldungen zur Berechnung',
@@ -196,12 +491,13 @@ const de: ViewerMessages = {
196
491
  solveMessagesConfirm: 'Weiter',
197
492
  solveMessagesDiscard: 'Verwerfen',
198
493
  solveMessagesAbort: 'Abbrechen',
494
+ solveMessagesEscHint: 'Esc bricht die Berechnung ab',
199
495
  solveMessagesDismiss: 'Schliessen',
200
496
  solveSolving: 'Berechnung läuft…',
201
497
  parametersTab: 'Parameter',
202
498
  moreTab: 'Mehr',
203
- expandPanel: 'Bereich aufklappen',
204
- collapsePanel: 'Bereich zuklappen',
499
+ scrollTabsBack: 'Vorherige Tabs',
500
+ scrollTabsForward: 'Weitere Tabs',
205
501
  expandSidePanel: '{side} Bereich aufklappen',
206
502
  panelSideLeft: 'Linken',
207
503
  panelSideRight: 'Rechten',
@@ -209,10 +505,129 @@ const de: ViewerMessages = {
209
505
 
210
506
  solving: 'Berechnung läuft',
211
507
  solvingEllipsis: 'Berechnung läuft...',
212
- solvingSubtitle: 'Grasshopper berechnet...',
213
- pressToCalculate: 'Zum Berechnen klicken',
508
+ solvingSubtitle: 'Das kann einen Moment dauern…',
509
+ pressToCalculate: 'Berechnen',
214
510
  calculate: 'Berechnen',
215
- upToDate: 'Aktuell'
511
+ upToDate: 'Berechnet',
512
+ moreActions: 'Weitere Aktionen',
513
+ calculatesFirst: 'Berechnet zuerst',
514
+
515
+ errorCountOne: '{count} Fehler',
516
+ errorCountOther: '{count} Fehler',
517
+ warningCountOne: '{count} Warnung',
518
+ warningCountOther: '{count} Warnungen',
519
+ noteCountOne: '{count} Hinweis',
520
+ noteCountOther: '{count} Hinweise',
521
+ lastSolveMessagesOne: '{count} Meldung der letzten Berechnung',
522
+ lastSolveMessagesOther: '{count} Meldungen der letzten Berechnung',
523
+ messagesTitle: 'Meldungen',
524
+ copyright: 'von {name} © {year}',
525
+ close: 'Schliessen',
526
+ toggleTheme: 'Farbschema wechseln',
527
+ errorTitle: 'Fehler',
528
+ goHome: 'Zur Startseite',
529
+
530
+ selectOption: 'Option wählen…',
531
+ noOptionsYet: 'Noch keine Optionen verfügbar.',
532
+ minValue: 'Der kleinste erlaubte Wert ist {min}',
533
+ maxValue: 'Der grösste erlaubte Wert ist {max}',
534
+ fineDragHint: 'Umschalttaste halten für feine Schritte',
535
+ maxLength: 'Höchstens {max} Zeichen erlaubt',
536
+ invalidFormat: 'Ungültiges Format',
537
+ invalidPattern: 'Ungültiges Prüfmuster hinterlegt',
538
+
539
+ geometryPickAnyOne: 'Objekt wählen',
540
+ geometryPickAnyOther: 'Objekte wählen',
541
+ geometryPicking: 'Im Ansichtsfenster wählen, Esc bricht ab',
542
+ geometryPickInPanel: 'Im Rhino-Panel wählen',
543
+ geometryPickAgain: 'Neu wählen',
544
+ geometryClear: 'Leeren',
545
+ geometryPickPointOne: 'Punkt wählen',
546
+ geometryPickPointOther: 'Punkte wählen',
547
+ geometryPickPointCloudOne: 'Punktwolke wählen',
548
+ geometryPickPointCloudOther: 'Punktwolken wählen',
549
+ geometryPickCurveOne: 'Kurve wählen',
550
+ geometryPickCurveOther: 'Kurven wählen',
551
+ geometryPickLineOne: 'Linie wählen',
552
+ geometryPickLineOther: 'Linien wählen',
553
+ geometryPickPlaneOne: 'Ebene wählen',
554
+ geometryPickPlaneOther: 'Ebenen wählen',
555
+ geometryPickSurfaceOne: 'Fläche wählen',
556
+ geometryPickSurfaceOther: 'Flächen wählen',
557
+ geometryPickPolysurfaceOne: 'Flächenverband wählen',
558
+ geometryPickPolysurfaceOther: 'Flächenverbände wählen',
559
+ geometryPickExtrusionOne: 'Extrusion wählen',
560
+ geometryPickExtrusionOther: 'Extrusionen wählen',
561
+ geometryPickMeshOne: 'Netz wählen',
562
+ geometryPickMeshOther: 'Netze wählen',
563
+ geometryPickSubdOne: 'SubD wählen',
564
+ geometryPickSubdOther: 'SubDs wählen',
565
+ geometryPickBlockOne: 'Block wählen',
566
+ geometryPickBlockOther: 'Blöcke wählen',
567
+
568
+ fileModeUpload: 'Hochladen',
569
+ fileModeUrl: 'URL',
570
+ fileUrlLabel: 'Datei-URL',
571
+ fetchFile: 'Abrufen',
572
+ fetchingFile: 'Wird abgerufen…',
573
+ fileUrlPublic: 'Die URL muss öffentlich erreichbar sein (ohne Anmeldung).',
574
+ chooseFile: 'Datei wählen oder hierher ziehen',
575
+ acceptedFormats: 'Erlaubte Formate: {formats}',
576
+ uploadedFile: 'Hochgeladene Datei ({ext})',
577
+ uploadedFileSize: 'Hochgeladene Datei ({ext}, {size} MB)',
578
+ fileLoaded: '{ext} geladen ({size} KB)',
579
+ urlInvalid: 'Ungültige URL – sie muss mit https:// beginnen',
580
+ urlProtocolUnsupported: 'Nur http://- und https://-URLs werden unterstützt.',
581
+ urlServerError:
582
+ 'Der Server antwortete mit {status}. Ist die URL korrekt und öffentlich erreichbar?',
583
+ fileFormatNotAccepted: 'Dateiformat „{ext}“ ist nicht erlaubt. Erlaubt: {formats}',
584
+ fileTooLarge: 'Datei zu gross: {size} MB (höchstens {max} MB).',
585
+ fileTooLargeUseUpload: 'Datei herunterladen und stattdessen über „Hochladen“ einfügen.',
586
+ fileReadFailed: 'Die heruntergeladene Datei konnte nicht gelesen werden.',
587
+ urlUnreachable:
588
+ '„{host}“ ist nicht erreichbar – die Datei existiert vielleicht nicht, oder der Server erlaubt keinen Zugriff aus dem Browser.',
589
+ urlUnreachableHint:
590
+ 'Prüfen, ob die URL stimmt und die Datei öffentlich erreichbar ist. Verlangt der Server eine Anmeldung: Datei herunterladen und über „Hochladen“ einfügen.',
591
+ urlHintSharePoint:
592
+ 'SharePoint/OneDrive sperrt den Zugriff aus dem Browser. Datei in SharePoint öffnen, mit „Herunterladen“ lokal speichern und hier hochladen.',
593
+ urlHintGoogleDrive:
594
+ 'Google Drive sperrt den Zugriff aus dem Browser. Datei in Google Drive mit „Herunterladen“ lokal speichern und hier hochladen.',
595
+ urlHintDropbox:
596
+ 'Dropbox-Links sperren den Zugriff aus dem Browser oft. In der URL „?dl=0“ durch „?dl=1“ ersetzen oder die Datei herunterladen und hochladen.',
597
+ unknownError: 'Unbekannter Fehler',
598
+
599
+ waitingForData: 'Noch keine Daten',
600
+ waitingForFiles: 'Noch keine Dateien',
601
+ fileCount: '{count} Dateien',
602
+ duplicateFilesTitle: 'Doppelte Dateinamen',
603
+ duplicatePathsOne: 'Dieser Pfad kommt mehrfach vor:',
604
+ duplicatePathsOther: 'Diese Pfade kommen mehrfach vor:',
605
+ duplicateFilesHint:
606
+ 'Ausgaben in der Grasshopper-Definition umbenennen, damit jede Datei einen eindeutigen Namen hat.',
607
+ downloadFile: 'Datei herunterladen',
608
+ downloadFiles: '{count} Dateien herunterladen',
609
+ downloading: 'Wird heruntergeladen…',
610
+ downloadFailed: 'Download fehlgeschlagen',
611
+ copy: 'Kopieren',
612
+ copied: 'Kopiert!',
613
+ chartReceiving: 'Diagrammdaten werden empfangen…',
614
+ chartRenderFailed: 'Diagramm konnte nicht dargestellt werden',
615
+ fullscreenUnavailable: 'Vollbild nicht verfügbar: {error}',
616
+ exitFullscreenFailed: 'Vollbild konnte nicht beendet werden: {error}',
617
+
618
+ imageViewer: 'Bildbetrachter',
619
+ imageLoading: 'Bild wird geladen…',
620
+ imageUnsupported: 'Bildformat nicht unterstützt: {ext}. Unterstützt: {formats}',
621
+ imageUnknownFormat: '(unbekannt)',
622
+ imageDecodeFailed: '{file} konnte nicht gelesen werden',
623
+ previousImage: 'Vorheriges Bild',
624
+ nextImage: 'Nächstes Bild',
625
+ zoomHint: 'Zum Zoomen Strg oder ⌘ halten und scrollen',
626
+ zoomIn: 'Vergrössern',
627
+ zoomOut: 'Verkleinern',
628
+ zoomFit: 'Einpassen',
629
+ zoomActual: 'Originalgrösse',
630
+ downloadImage: 'Bild herunterladen'
216
631
  };
217
632
 
218
633
  export const VIEWER_MESSAGES: Record<Locale, ViewerMessages> = { en, de };
@@ -223,3 +638,28 @@ export const DEFAULT_LOCALE: Locale = 'en';
223
638
  export function messagesFor(locale: Locale | undefined): ViewerMessages {
224
639
  return VIEWER_MESSAGES[locale ?? DEFAULT_LOCALE] ?? VIEWER_MESSAGES[DEFAULT_LOCALE];
225
640
  }
641
+
642
+ /** Layers a host's partial overrides over a full catalog. An `undefined` entry keeps the base string. */
643
+ export function withOverrides(
644
+ base: ViewerMessages,
645
+ overrides: Partial<ViewerMessages> | undefined
646
+ ): ViewerMessages {
647
+ if (!overrides) return base;
648
+ const merged = { ...base };
649
+ for (const [key, value] of Object.entries(overrides) as [keyof ViewerMessages, string][]) {
650
+ if (value !== undefined) merged[key] = value;
651
+ }
652
+ return merged;
653
+ }
654
+
655
+ /** Fills each `{name}` placeholder from `vars`; an unknown placeholder is left as written. */
656
+ export function formatMessage(template: string, vars: Record<string, string | number>): string {
657
+ return template.replace(/\{(\w+)\}/g, (placeholder, name: string) =>
658
+ name in vars ? String(vars[name]) : placeholder
659
+ );
660
+ }
661
+
662
+ /** Picks the singular or plural form for `count` and fills its `{count}`. */
663
+ export function formatCount(count: number, one: string, other: string): string {
664
+ return formatMessage(count === 1 ? one : other, { count });
665
+ }
package/src/lib/index.ts CHANGED
@@ -19,6 +19,17 @@ export { default as Viewer } from './components/viewer/Viewer.svelte';
19
19
  export * from './schema/defaults';
20
20
  export * from './schema/dynamic-value-list';
21
21
  export * from './schema/traversal';
22
+ export {
23
+ type UIHost,
24
+ type ElementKind,
25
+ HOST_LABELS,
26
+ isGeometryParamType,
27
+ layoutItemKind,
28
+ hostsFor,
29
+ isSupportedOn,
30
+ valuelessInputIds,
31
+ unsupportedItems
32
+ } from './schema/host-support';
22
33
  export * from './compute/solving.svelte';
23
34
 
24
35
  // Solve Session seam. Re-exported so transports outside this package — e.g.
@@ -30,6 +41,7 @@ export {
30
41
  createRequestResponseDriver,
31
42
  type SolveSession,
32
43
  type SolveSessionArgs,
44
+ type SolveSettlement,
33
45
  type SolveDriver,
34
46
  type SolveReporter,
35
47
  type LiveSolveState,
@@ -53,10 +65,19 @@ export {
53
65
 
54
66
  export * from './contexts/footerContext.svelte';
55
67
  export * from './contexts/clientSlotContext.svelte';
68
+ export * from './contexts/hostContext.svelte';
56
69
  export * from './composables/useFooterItem.svelte';
57
70
 
58
71
  export * from './utils';
59
72
  export { randomId } from './utils/randomId';
73
+ export {
74
+ saveBlob,
75
+ pickFile,
76
+ setBlobSaver,
77
+ setFilePicker,
78
+ type BlobSaver,
79
+ type FilePicker
80
+ } from './utils/host-files';
60
81
 
61
82
  // UI-specific runtime types (not from schema)
62
83
  export type { ActionButton } from './types/actionButton';
package/src/lib/public.ts CHANGED
@@ -55,6 +55,7 @@ export {
55
55
  createRequestResponseDriver,
56
56
  type SolveSession,
57
57
  type SolveSessionArgs,
58
+ type SolveSettlement,
58
59
  type SolveDriver,
59
60
  type SolveReporter,
60
61
  type LiveSolveState,