@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
@@ -0,0 +1,107 @@
1
+ export interface Rgb {
2
+ r: number;
3
+ g: number;
4
+ b: number;
5
+ }
6
+
7
+ /** h in [0, 360), s and v in [0, 1]. */
8
+ export interface Hsv {
9
+ h: number;
10
+ s: number;
11
+ v: number;
12
+ }
13
+
14
+ const clamp = (n: number, min: number, max: number) => Math.min(max, Math.max(min, n));
15
+
16
+ /** Accepts `#rgb`, `#rrggbb` and the same without `#`. Returns lowercase `#rrggbb`, or null. */
17
+ export function normalizeHex(input: string): string | null {
18
+ const raw = input.trim().replace(/^#/, '');
19
+ if (/^[0-9a-f]{3}$/i.test(raw)) {
20
+ return `#${raw
21
+ .split('')
22
+ .map((c) => c + c)
23
+ .join('')
24
+ .toLowerCase()}`;
25
+ }
26
+ if (/^[0-9a-f]{6}$/i.test(raw)) return `#${raw.toLowerCase()}`;
27
+ return null;
28
+ }
29
+
30
+ export function hexToRgb(hex: string): Rgb | null {
31
+ const normalized = normalizeHex(hex);
32
+ if (!normalized) return null;
33
+ return {
34
+ r: parseInt(normalized.slice(1, 3), 16),
35
+ g: parseInt(normalized.slice(3, 5), 16),
36
+ b: parseInt(normalized.slice(5, 7), 16)
37
+ };
38
+ }
39
+
40
+ export function rgbToHex({ r, g, b }: Rgb): string {
41
+ const channel = (n: number) => clamp(Math.round(n), 0, 255).toString(16).padStart(2, '0');
42
+ return `#${channel(r)}${channel(g)}${channel(b)}`;
43
+ }
44
+
45
+ export function rgbToHsv({ r, g, b }: Rgb): Hsv {
46
+ const rn = r / 255;
47
+ const gn = g / 255;
48
+ const bn = b / 255;
49
+ const max = Math.max(rn, gn, bn);
50
+ const delta = max - Math.min(rn, gn, bn);
51
+
52
+ let h = 0;
53
+ if (delta !== 0) {
54
+ if (max === rn) h = ((gn - bn) / delta) % 6;
55
+ else if (max === gn) h = (bn - rn) / delta + 2;
56
+ else h = (rn - gn) / delta + 4;
57
+ h *= 60;
58
+ if (h < 0) h += 360;
59
+ }
60
+ return { h, s: max === 0 ? 0 : delta / max, v: max };
61
+ }
62
+
63
+ export function hsvToRgb({ h, s, v }: Hsv): Rgb {
64
+ const c = v * s;
65
+ const hp = (((h % 360) + 360) % 360) / 60;
66
+ const x = c * (1 - Math.abs((hp % 2) - 1));
67
+ const [r1, g1, b1] =
68
+ hp < 1
69
+ ? [c, x, 0]
70
+ : hp < 2
71
+ ? [x, c, 0]
72
+ : hp < 3
73
+ ? [0, c, x]
74
+ : hp < 4
75
+ ? [0, x, c]
76
+ : hp < 5
77
+ ? [x, 0, c]
78
+ : [c, 0, x];
79
+ const m = v - c;
80
+ return { r: (r1 + m) * 255, g: (g1 + m) * 255, b: (b1 + m) * 255 };
81
+ }
82
+
83
+ export const hexToHsv = (hex: string): Hsv | null => {
84
+ const rgb = hexToRgb(hex);
85
+ return rgb ? rgbToHsv(rgb) : null;
86
+ };
87
+
88
+ export const hsvToHex = (hsv: Hsv): string => rgbToHex(hsvToRgb(hsv));
89
+
90
+ /** WCAG relative luminance of an sRGB color. */
91
+ function luminance({ r, g, b }: Rgb): number {
92
+ const lin = (c: number) => {
93
+ const n = c / 255;
94
+ return n <= 0.04045 ? n / 12.92 : Math.pow((n + 0.055) / 1.055, 2.4);
95
+ };
96
+ return 0.2126 * lin(r) + 0.7152 * lin(g) + 0.0722 * lin(b);
97
+ }
98
+
99
+ /** WCAG contrast ratio between two hex colors, 1 to 21. Null if either isn't a hex color. */
100
+ export function contrastRatio(a: string, b: string): number | null {
101
+ const ra = hexToRgb(a);
102
+ const rb = hexToRgb(b);
103
+ if (!ra || !rb) return null;
104
+ const la = luminance(ra);
105
+ const lb = luminance(rb);
106
+ return (Math.max(la, lb) + 0.05) / (Math.min(la, lb) + 0.05);
107
+ }
@@ -1,6 +1,7 @@
1
- import { downloadFileDataByRoot, type FileData } from '@selvajs/compute/core';
1
+ import { decodeBase64ToBinary, downloadFileDataByRoot, type FileData } from '@selvajs/compute/core';
2
2
  import { SvelteMap } from 'svelte/reactivity';
3
3
  import { APP_DEFAULTS } from '../constants';
4
+ import { saveBlob } from './host-files';
4
5
 
5
6
  export const MIME_BY_EXT: Record<string, string> = {
6
7
  '.png': 'image/png',
@@ -19,26 +20,15 @@ export const MIME_BY_EXT: Record<string, string> = {
19
20
  '.stl': 'model/stl'
20
21
  };
21
22
 
22
- function saveSingleFile(file: FileData): void {
23
+ function saveSingleFile(file: FileData): Promise<boolean> {
23
24
  const ext = (file.fileType ?? '').toLowerCase();
24
25
  const mime = MIME_BY_EXT[ext] ?? 'application/octet-stream';
25
26
 
26
- let blob: Blob;
27
- if (file.isBase64Encoded) {
28
- const binary = atob(file.data);
29
- const bytes = new Uint8Array(binary.length);
30
- for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);
31
- blob = new Blob([bytes], { type: mime });
32
- } else {
33
- blob = new Blob([file.data], { type: mime });
34
- }
27
+ const content = file.isBase64Encoded ? decodeBase64ToBinary(file.data) : file.data;
28
+ // decodeBase64ToBinary returns an ArrayBuffer-backed copy, never a SharedArrayBuffer view.
29
+ const blob = new Blob([content as BlobPart], { type: mime });
35
30
 
36
- const fullName = `${file.fileName}${file.fileType ?? ''}`;
37
- const a = document.createElement('a');
38
- a.href = URL.createObjectURL(blob);
39
- a.download = fullName;
40
- a.click();
41
- URL.revokeObjectURL(a.href);
31
+ return saveBlob(blob, `${file.fileName}${file.fileType ?? ''}`);
42
32
  }
43
33
 
44
34
  export async function downloadFiles(
@@ -53,14 +43,14 @@ export async function downloadFiles(
53
43
  return;
54
44
  }
55
45
 
56
- // A lone file is saved as itself rather than zipped — the one case that needs the DOM
57
- // directly. Everything else, including the per-root archive split, belongs to compute.
46
+ // A lone file is saved as itself rather than zipped. Everything else, including the
47
+ // per-root archive split, belongs to compute.
58
48
  if (filesArray.length === 1) {
59
- saveSingleFile(filesArray[0]);
49
+ await saveSingleFile(filesArray[0]);
60
50
  return;
61
51
  }
62
52
 
63
- await downloadFileDataByRoot(filesArray, fileName);
53
+ await downloadFileDataByRoot(filesArray, fileName, null, { saveBlob });
64
54
  } catch (error) {
65
55
  console.error('[FileDownload] Error downloading files:', error);
66
56
  throw error;
@@ -0,0 +1,61 @@
1
+ // Where a file the page offers goes, and where a file the page asks for comes from. A browser
2
+ // gets an <a download> click and a hidden <input type=file>. A host whose WebView can't do
3
+ // either safely (the Rhino panel) installs its own once at start-up, before the first save or pick.
4
+
5
+ /** Resolves false when the user cancelled. An anchor download always resolves true: it can't tell. */
6
+ export type BlobSaver = (blob: Blob, fileName: string) => Promise<boolean>;
7
+
8
+ /** `accept` is what `<input accept>` takes: `.slvp,.sps`, `image/*`. Resolves null on cancel. */
9
+ export type FilePicker = (options: { accept: string }) => Promise<File | null>;
10
+
11
+ let saver: BlobSaver = saveWithAnchor;
12
+ let picker: FilePicker = pickWithInput;
13
+
14
+ export function setBlobSaver(next: BlobSaver): void {
15
+ saver = next;
16
+ }
17
+
18
+ export function setFilePicker(next: FilePicker): void {
19
+ picker = next;
20
+ }
21
+
22
+ export function saveBlob(blob: Blob, fileName: string): Promise<boolean> {
23
+ return saver(blob, fileName);
24
+ }
25
+
26
+ export function pickFile(options: { accept: string }): Promise<File | null> {
27
+ return picker(options);
28
+ }
29
+
30
+ async function saveWithAnchor(blob: Blob, fileName: string): Promise<boolean> {
31
+ const url = URL.createObjectURL(blob);
32
+ const a = document.createElement('a');
33
+ a.href = url;
34
+ a.download = fileName;
35
+ // Firefox only downloads from an anchor that is in the document.
36
+ document.body.appendChild(a);
37
+ a.click();
38
+ a.remove();
39
+ // Revoking synchronously can abort the download: the browser pins the blob only once it starts.
40
+ setTimeout(() => URL.revokeObjectURL(url), 10_000);
41
+ return true;
42
+ }
43
+
44
+ function pickWithInput({ accept }: { accept: string }): Promise<File | null> {
45
+ return new Promise((resolve) => {
46
+ const input = document.createElement('input');
47
+ input.type = 'file';
48
+ input.accept = accept;
49
+ input.style.display = 'none';
50
+
51
+ const settle = (file: File | null) => {
52
+ input.remove();
53
+ resolve(file);
54
+ };
55
+ input.addEventListener('change', () => settle(input.files?.[0] ?? null), { once: true });
56
+ input.addEventListener('cancel', () => settle(null), { once: true });
57
+
58
+ document.body.appendChild(input);
59
+ input.click();
60
+ });
61
+ }
@@ -8,6 +8,8 @@ export function loadScript(
8
8
  src: string,
9
9
  options?: {
10
10
  crossOrigin?: string;
11
+ /** Subresource Integrity hash. A cross-origin script also needs `crossOrigin`. */
12
+ integrity?: string;
11
13
  async?: boolean;
12
14
  defer?: boolean;
13
15
  }
@@ -26,6 +28,7 @@ export function loadScript(
26
28
  const script = document.createElement('script');
27
29
  script.src = src;
28
30
  if (options?.crossOrigin) script.crossOrigin = options.crossOrigin;
31
+ if (options?.integrity) script.integrity = options.integrity;
29
32
  if (options?.async !== undefined) script.async = options.async;
30
33
  if (options?.defer !== undefined) script.defer = options.defer;
31
34
 
@@ -0,0 +1,48 @@
1
+ // Grasshopper's PDF export can't read WebP: the plugin's PDF library has no WebP decoder, and
2
+ // nothing on Windows or Rhino.Compute decodes it reliably. The browser can, so a WebP picked for
3
+ // an input that also takes PNG is re-encoded here. PNG rather than JPEG keeps transparency.
4
+
5
+ /** True when a WebP should go out as PNG: the input takes PNG, so a PNG is a valid value. */
6
+ export function shouldConvertWebp(fileEnding: string, acceptedFormats: readonly string[]): boolean {
7
+ return fileEnding === '.webp' && acceptedFormats.includes('.png');
8
+ }
9
+
10
+ /** Whether the input takes a file with this ending, counting a WebP it would get as PNG. */
11
+ export function acceptsFileEnding(fileEnding: string, acceptedFormats: readonly string[]): boolean {
12
+ const ending = fileEnding.toLowerCase();
13
+ if (acceptedFormats.length === 0 || acceptedFormats.includes(ending)) return true;
14
+ return shouldConvertWebp(ending, acceptedFormats);
15
+ }
16
+
17
+ const ascii = (bytes: Uint8Array, start: number, end: number) =>
18
+ String.fromCharCode(...bytes.subarray(start, end));
19
+
20
+ /**
21
+ * By content, not name: image CDNs serve WebP from URLs with no extension or one naming another
22
+ * format. A WebP file starts `RIFF`, a 4-byte size, then `WEBP`.
23
+ */
24
+ export async function isWebp(blob: Blob): Promise<boolean> {
25
+ if (blob.type === 'image/webp') return true;
26
+ const head = new Uint8Array(await blob.slice(0, 12).arrayBuffer());
27
+ return head.length === 12 && ascii(head, 0, 4) === 'RIFF' && ascii(head, 8, 12) === 'WEBP';
28
+ }
29
+
30
+ export async function webpToPng(blob: Blob): Promise<Blob> {
31
+ const bitmap = await createImageBitmap(blob);
32
+ try {
33
+ const canvas = document.createElement('canvas');
34
+ canvas.width = bitmap.width;
35
+ canvas.height = bitmap.height;
36
+ const context = canvas.getContext('2d');
37
+ if (!context) throw new Error('Canvas 2D context unavailable');
38
+ context.drawImage(bitmap, 0, 0);
39
+ return await new Promise<Blob>((resolve, reject) =>
40
+ canvas.toBlob(
41
+ (png) => (png ? resolve(png) : reject(new Error('PNG encoding failed'))),
42
+ 'image/png'
43
+ )
44
+ );
45
+ } finally {
46
+ bitmap.close();
47
+ }
48
+ }
@@ -1,39 +0,0 @@
1
- <script lang="ts">
2
- import { themeStore, type Theme } from '../../../theme/themeStore.svelte';
3
- import * as Select from '../select';
4
- import { Palette } from '@lucide/svelte';
5
-
6
- const themes: { value: Theme; label: string; description: string }[] = [
7
- { value: 'neutral', label: 'Neutral', description: 'Classic grayscale' },
8
- { value: 'selva', label: 'Selva', description: 'Forest green' },
9
- { value: 'ocean', label: 'Ocean', description: 'Calm blue tones' },
10
- { value: 'cyberpunk', label: 'Cyberpunk', description: 'Vibrant neon colors' }
11
- ];
12
-
13
- let value = $state(themeStore.current);
14
-
15
- $effect(() => {
16
- if (value) {
17
- themeStore.set(value as Theme);
18
- }
19
- });
20
-
21
- const triggerContent = $derived(themes.find((t) => t.value === value)?.label ?? 'Select theme');
22
- </script>
23
-
24
- <Select.Root type="single" bind:value>
25
- <Select.Trigger class="gap-2 w-35">
26
- <Palette size={14} />
27
- <span>{triggerContent}</span>
28
- </Select.Trigger>
29
- <Select.Content>
30
- {#each themes as theme (theme.value)}
31
- <Select.Item value={theme.value} label={theme.label}>
32
- <div class="flex flex-col items-start">
33
- <span class="font-medium text-sm">{theme.label}</span>
34
- <span class="text-xs text-muted-foreground">{theme.description}</span>
35
- </div>
36
- </Select.Item>
37
- {/each}
38
- </Select.Content>
39
- </Select.Root>
@@ -1,3 +0,0 @@
1
- declare const ThemeSwitcher: import("svelte").Component<Record<string, never>, {}, "">;
2
- type ThemeSwitcher = ReturnType<typeof ThemeSwitcher>;
3
- export default ThemeSwitcher;
@@ -1 +0,0 @@
1
- export { default as ThemeSwitcher } from './ThemeSwitcher.svelte';
@@ -1 +0,0 @@
1
- export { default as ThemeSwitcher } from './ThemeSwitcher.svelte';
@@ -1,126 +0,0 @@
1
- <script lang="ts">
2
- import * as Dialog from '../primitives/dialog/index.js';
3
- import { getLocaleContext } from '../../i18n/localeContext.svelte';
4
-
5
- const locale = getLocaleContext();
6
- const t = $derived(locale.messages);
7
-
8
- interface Props {
9
- open: boolean;
10
- metadata: Record<string, any> | null;
11
- meshName: string | null;
12
- onOpenChange: (open: boolean) => void;
13
- isFullscreen?: boolean;
14
- }
15
-
16
- const EXCLUDED_KEYS = new Set(['name', 'layer', 'id']);
17
-
18
- let {
19
- open = $bindable(),
20
- metadata,
21
- meshName,
22
- onOpenChange,
23
- isFullscreen = false
24
- }: Props = $props();
25
-
26
- $effect(() => {
27
- document.body.toggleAttribute('data-viewer-fullscreen', isFullscreen);
28
- });
29
-
30
- const getFilteredMetadata = () => {
31
- if (!metadata) return {};
32
- const entries = Object.entries(metadata).filter(([key]) => !EXCLUDED_KEYS.has(key));
33
- const result: Record<string, unknown> = {};
34
- for (const [key, value] of entries) {
35
- if (
36
- key === 'metadata' &&
37
- typeof value === 'object' &&
38
- value !== null &&
39
- !Array.isArray(value)
40
- ) {
41
- Object.assign(result, value);
42
- } else {
43
- result[key] = value;
44
- }
45
- }
46
- return result;
47
- };
48
- </script>
49
-
50
- <Dialog.Root bind:open {onOpenChange}>
51
- <Dialog.Content variant="flush" class="min-w-60 max-w-xs w-auto">
52
- {#if meshName}
53
- <div class="px-4 pt-3 pb-2 border-b">
54
- <Dialog.Title size="sm">{meshName}</Dialog.Title>
55
- </div>
56
- {:else}
57
- <Dialog.Title class="sr-only">{t.objectFallbackName}</Dialog.Title>
58
- {/if}
59
-
60
- <div class="max-h-80 overflow-y-auto">
61
- {#if !metadata || Object.keys(getFilteredMetadata()).length === 0}
62
- <p class="px-4 py-3 text-xs text-muted-foreground">{t.noMetadata}</p>
63
- {:else}
64
- <table class="text-xs w-full border-collapse">
65
- <tbody>
66
- {#each Object.entries(getFilteredMetadata()) as [key, value] (key)}
67
- <tr class="border-b border-border/60 transition-colors hover:bg-muted/40">
68
- <th
69
- scope="row"
70
- class="px-4 py-2 font-normal text-left align-top whitespace-nowrap text-muted-foreground"
71
- >{key}</th
72
- >
73
- <td class="px-4 py-2 text-right align-top text-foreground">
74
- {#if typeof value === 'object' && value !== null}
75
- {#if Array.isArray(value)}
76
- <div class="space-y-1 text-left">
77
- {#each value as item, index (index)}
78
- {#if typeof item === 'object'}
79
- <div class="space-y-0.5">
80
- {#each Object.entries(item) as [k, v] (k)}
81
- <div class="gap-2 flex">
82
- <span class="shrink-0 text-muted-foreground">{k}:</span>
83
- <span>{v}</span>
84
- </div>
85
- {/each}
86
- </div>
87
- {:else}
88
- <div>{item}</div>
89
- {/if}
90
- {/each}
91
- </div>
92
- {:else}
93
- <div class="space-y-0.5 text-left">
94
- {#each Object.entries(value) as [k, v] (k)}
95
- <div class="gap-2 flex">
96
- <span class="shrink-0 text-muted-foreground">{k}:</span>
97
- <span>{v}</span>
98
- </div>
99
- {/each}
100
- </div>
101
- {/if}
102
- {:else if typeof value === 'number'}
103
- <span class="font-mono">{value}</span>
104
- {:else if typeof value === 'boolean'}
105
- <span class={value ? 'text-success' : 'text-muted-foreground'}
106
- >{value ? 'true' : 'false'}</span
107
- >
108
- {:else}
109
- <span class="break-all">{value}</span>
110
- {/if}
111
- </td>
112
- </tr>
113
- {/each}
114
- </tbody>
115
- </table>
116
- {/if}
117
- </div>
118
- </Dialog.Content>
119
- </Dialog.Root>
120
-
121
- <style>
122
- :global([data-viewer-fullscreen] [data-slot='dialog-content']),
123
- :global([data-viewer-fullscreen] [data-slot='dialog-overlay']) {
124
- z-index: 10001;
125
- }
126
- </style>
@@ -1,10 +0,0 @@
1
- interface Props {
2
- open: boolean;
3
- metadata: Record<string, any> | null;
4
- meshName: string | null;
5
- onOpenChange: (open: boolean) => void;
6
- isFullscreen?: boolean;
7
- }
8
- declare const MeshMetadataDialog: import("svelte").Component<Props, {}, "open">;
9
- type MeshMetadataDialog = ReturnType<typeof MeshMetadataDialog>;
10
- export default MeshMetadataDialog;
@@ -1,98 +0,0 @@
1
- :root {
2
- --radius: 0.625rem;
3
-
4
- --background: oklch(0.98 0.01 300);
5
- --foreground: oklch(0.18 0.05 300);
6
-
7
- --card: oklch(0.97 0.015 300);
8
- --card-foreground: oklch(0.18 0.05 300);
9
-
10
- --popover: oklch(0.97 0.015 300);
11
- --popover-foreground: oklch(0.18 0.05 300);
12
-
13
- --primary: oklch(0.7 0.28 295);
14
- --primary-foreground: oklch(0.98 0 0);
15
-
16
- --secondary: oklch(0.9 0.05 300);
17
- --secondary-foreground: oklch(0.18 0.05 300);
18
-
19
- --muted: oklch(0.92 0.015 300);
20
- --muted-foreground: oklch(0.5 0.03 300);
21
-
22
- --accent: oklch(0.78 0.2 305);
23
- --accent-foreground: oklch(0.12 0.05 300);
24
-
25
- --destructive: oklch(0.62 0.25 20);
26
- --destructive-foreground: oklch(0.98 0 0);
27
-
28
- --border: oklch(0.86 0.02 300);
29
- --input: oklch(0.92 0.015 300);
30
- --ring: oklch(0.75 0.18 295);
31
-
32
- --chart-1: oklch(0.7 0.28 295);
33
- --chart-2: oklch(0.8 0.24 305);
34
- --chart-3: oklch(0.65 0.22 310);
35
- --chart-4: oklch(0.55 0.18 290);
36
- --chart-5: oklch(0.85 0.15 300);
37
-
38
- --sidebar: oklch(0.97 0.015 300);
39
- --sidebar-foreground: oklch(0.18 0.05 300);
40
- --sidebar-primary: oklch(0.7 0.28 295);
41
- --sidebar-primary-foreground: oklch(0.98 0 0);
42
- --sidebar-accent: oklch(0.92 0.015 300);
43
- --sidebar-accent-foreground: oklch(0.18 0.05 300);
44
- --sidebar-border: oklch(0.86 0.02 300);
45
- --sidebar-ring: oklch(0.75 0.18 295);
46
-
47
- --inputparam: oklch(0.86 0.02 300);
48
- --outputparam: oklch(0.86 0.04 305);
49
- --downloadparam: oklch(0.86 0.05 295);
50
- }
51
-
52
- .dark {
53
- --background: oklch(0.18 0.05 300);
54
- --foreground: oklch(0.98 0 0);
55
-
56
- --card: oklch(0.22 0.05 300);
57
- --card-foreground: oklch(0.98 0 0);
58
-
59
- --popover: oklch(0.22 0.05 300);
60
- --popover-foreground: oklch(0.98 0 0);
61
-
62
- --primary: oklch(0.7 0.28 295);
63
- --primary-foreground: oklch(0.18 0.05 300);
64
-
65
- --secondary: oklch(0.28 0.03 300);
66
- --secondary-foreground: oklch(0.98 0 0);
67
-
68
- --muted: oklch(0.28 0.03 300);
69
- --muted-foreground: oklch(0.75 0.04 300);
70
-
71
- --accent: oklch(0.22 0.05 305);
72
- --accent-foreground: oklch(0.98 0 0);
73
-
74
- --destructive: oklch(0.55 0.22 20);
75
- --destructive-foreground: oklch(0.18 0.05 300);
76
-
77
- --border: oklch(0.35 0.04 300);
78
- --input: oklch(0.3 0.03 300);
79
- --ring: oklch(0.75 0.18 295);
80
-
81
- --chart-1: oklch(0.7 0.28 295);
82
- --chart-2: oklch(0.8 0.24 305);
83
- --chart-3: oklch(0.65 0.22 310);
84
- --chart-4: oklch(0.32 0.03 300);
85
- --chart-5: oklch(0.85 0.15 300);
86
-
87
- --sidebar: oklch(0.18 0.05 300);
88
- --sidebar-foreground: oklch(0.98 0 0);
89
- --sidebar-primary: oklch(0.7 0.28 295);
90
- --sidebar-primary-foreground: oklch(0.18 0.05 300);
91
- --sidebar-accent: oklch(0.28 0.03 300);
92
- --sidebar-accent-foreground: oklch(0.98 0 0);
93
- --sidebar-border: oklch(0.35 0.04 300);
94
- --sidebar-ring: oklch(0.75 0.18 295);
95
-
96
- --inputparam: oklch(0.12 0.03 300);
97
- --outputparam: oklch(0.32 0.04 305);
98
- }
@@ -1,72 +0,0 @@
1
- :root {
2
- --radius: 0.625rem;
3
- --background: oklch(1 0 0);
4
- --foreground: oklch(0.145 0 0);
5
- --card: oklch(1 0 0);
6
- --card-foreground: oklch(0.145 0 0);
7
- --popover: oklch(1 0 0);
8
- --popover-foreground: oklch(0.145 0 0);
9
- --primary: oklch(0.205 0 0);
10
- --primary-foreground: oklch(0.985 0 0);
11
- --secondary: oklch(0.97 0 0);
12
- --secondary-foreground: oklch(0.205 0 0);
13
- --muted: oklch(0.97 0 0);
14
- --muted-foreground: oklch(0.556 0 0);
15
- --accent: oklch(0.97 0 0);
16
- --accent-foreground: oklch(0.205 0 0);
17
- --destructive: oklch(0.577 0.245 27.325);
18
- --border: oklch(87.61% 0.0001 271.152);
19
- --input: oklch(0.922 0 0);
20
- --ring: oklch(0.708 0 0);
21
- --chart-1: oklch(0.646 0.222 41.116);
22
- --chart-2: oklch(0.6 0.118 184.704);
23
- --chart-3: oklch(0.398 0.07 227.392);
24
- --chart-4: oklch(0.828 0.189 84.429);
25
- --chart-5: oklch(0.769 0.188 70.08);
26
- --sidebar: oklch(0.985 0 0);
27
- --sidebar-foreground: oklch(0.145 0 0);
28
- --sidebar-primary: oklch(0.205 0 0);
29
- --sidebar-primary-foreground: oklch(0.985 0 0);
30
- --sidebar-accent: oklch(0.97 0 0);
31
- --sidebar-accent-foreground: oklch(0.205 0 0);
32
- --sidebar-border: oklch(0.922 0 0);
33
- --sidebar-ring: oklch(0.708 0 0);
34
- --inputparam: oklch(100% 0.00011 271.152);
35
- --outputparam: oklch(100% 0.00011 271.152);
36
- }
37
-
38
- .dark {
39
- --background: oklch(0.145 0 0);
40
- --foreground: oklch(0.985 0 0);
41
- --card: oklch(0.205 0 0);
42
- --card-foreground: oklch(0.985 0 0);
43
- --popover: oklch(0.205 0 0);
44
- --popover-foreground: oklch(0.985 0 0);
45
- --primary: oklch(0.922 0 0);
46
- --primary-foreground: oklch(0.205 0 0);
47
- --secondary: oklch(0.269 0 0);
48
- --secondary-foreground: oklch(0.985 0 0);
49
- --muted: oklch(0.269 0 0);
50
- --muted-foreground: oklch(0.708 0 0);
51
- --accent: oklch(0.269 0 0);
52
- --accent-foreground: oklch(0.985 0 0);
53
- --destructive: oklch(0.704 0.191 22.216);
54
- --border: oklch(1 0 0 / 10%);
55
- --input: oklch(1 0 0 / 15%);
56
- --ring: oklch(0.556 0 0);
57
- --chart-1: oklch(0.488 0.243 264.376);
58
- --chart-2: oklch(0.696 0.17 162.48);
59
- --chart-3: oklch(0.769 0.188 70.08);
60
- --chart-4: oklch(0.627 0.265 303.9);
61
- --chart-5: oklch(0.645 0.246 16.439);
62
- --sidebar: oklch(0.205 0 0);
63
- --sidebar-foreground: oklch(0.985 0 0);
64
- --sidebar-primary: oklch(0.488 0.243 264.376);
65
- --sidebar-primary-foreground: oklch(0.985 0 0);
66
- --sidebar-accent: oklch(0.269 0 0);
67
- --sidebar-accent-foreground: oklch(0.985 0 0);
68
- --sidebar-border: oklch(1 0 0 / 10%);
69
- --sidebar-ring: oklch(0.556 0 0);
70
- --inputparam: oklch(0% 0 271.152);
71
- --outputparam: oklch(23.574% 0.00241 67.461);
72
- }