selva-shared 0.8.1

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 (506) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +45 -0
  3. package/dist/components/AppLayout.svelte +439 -0
  4. package/dist/components/AppLayout.svelte.d.ts +17 -0
  5. package/dist/components/CollapsedPanelStrip.svelte +67 -0
  6. package/dist/components/CollapsedPanelStrip.svelte.d.ts +11 -0
  7. package/dist/components/ComputeMessages.svelte +172 -0
  8. package/dist/components/ComputeMessages.svelte.d.ts +7 -0
  9. package/dist/components/ErrorScreen.svelte +55 -0
  10. package/dist/components/ErrorScreen.svelte.d.ts +9 -0
  11. package/dist/components/StateManager.svelte +318 -0
  12. package/dist/components/StateManager.svelte.d.ts +9 -0
  13. package/dist/components/Viewer.svelte +207 -0
  14. package/dist/components/Viewer.svelte.d.ts +12 -0
  15. package/dist/components/layout/FooterItemRenderer.svelte +20 -0
  16. package/dist/components/layout/FooterItemRenderer.svelte.d.ts +7 -0
  17. package/dist/components/layout/PageContainer.svelte +36 -0
  18. package/dist/components/layout/PageContainer.svelte.d.ts +12 -0
  19. package/dist/components/layout/PageFooter.svelte +223 -0
  20. package/dist/components/layout/PageFooter.svelte.d.ts +9 -0
  21. package/dist/components/layout/PageHeader.svelte +89 -0
  22. package/dist/components/layout/PageHeader.svelte.d.ts +12 -0
  23. package/dist/components/layout/index.d.ts +3 -0
  24. package/dist/components/layout/index.js +4 -0
  25. package/dist/components/preview/ChartOutput.svelte +257 -0
  26. package/dist/components/preview/ChartOutput.svelte.d.ts +8 -0
  27. package/dist/components/preview/Group.svelte +121 -0
  28. package/dist/components/preview/Group.svelte.d.ts +23 -0
  29. package/dist/components/preview/InputControl.svelte +119 -0
  30. package/dist/components/preview/InputControl.svelte.d.ts +11 -0
  31. package/dist/components/preview/OutputDisplay.svelte +296 -0
  32. package/dist/components/preview/OutputDisplay.svelte.d.ts +9 -0
  33. package/dist/components/preview/TabBar.svelte +36 -0
  34. package/dist/components/preview/TabBar.svelte.d.ts +8 -0
  35. package/dist/components/preview/TabContent.svelte +124 -0
  36. package/dist/components/preview/TabContent.svelte.d.ts +13 -0
  37. package/dist/components/preview/TabLayout.svelte +109 -0
  38. package/dist/components/preview/TabLayout.svelte.d.ts +13 -0
  39. package/dist/components/preview/index.d.ts +3 -0
  40. package/dist/components/preview/index.js +4 -0
  41. package/dist/components/preview/inputs/CheckboxInput.svelte +29 -0
  42. package/dist/components/preview/inputs/CheckboxInput.svelte.d.ts +10 -0
  43. package/dist/components/preview/inputs/ColorInput.svelte +21 -0
  44. package/dist/components/preview/inputs/ColorInput.svelte.d.ts +7 -0
  45. package/dist/components/preview/inputs/DropdownInput.svelte +40 -0
  46. package/dist/components/preview/inputs/DropdownInput.svelte.d.ts +10 -0
  47. package/dist/components/preview/inputs/FileInput.svelte +358 -0
  48. package/dist/components/preview/inputs/FileInput.svelte.d.ts +10 -0
  49. package/dist/components/preview/inputs/NumberInput.svelte +152 -0
  50. package/dist/components/preview/inputs/NumberInput.svelte.d.ts +11 -0
  51. package/dist/components/preview/inputs/TextInput.svelte +74 -0
  52. package/dist/components/preview/inputs/TextInput.svelte.d.ts +11 -0
  53. package/dist/components/preview/inputs/index.d.ts +6 -0
  54. package/dist/components/preview/inputs/index.js +6 -0
  55. package/dist/components/ui/CalculateButton.svelte +56 -0
  56. package/dist/components/ui/CalculateButton.svelte.d.ts +9 -0
  57. package/dist/components/ui/SolvingIndicator.svelte +55 -0
  58. package/dist/components/ui/SolvingIndicator.svelte.d.ts +6 -0
  59. package/dist/components/ui/StateDisplay.svelte +106 -0
  60. package/dist/components/ui/StateDisplay.svelte.d.ts +10 -0
  61. package/dist/components/ui/alert/alert-description.svelte +23 -0
  62. package/dist/components/ui/alert/alert-description.svelte.d.ts +5 -0
  63. package/dist/components/ui/alert/alert-title.svelte +20 -0
  64. package/dist/components/ui/alert/alert-title.svelte.d.ts +5 -0
  65. package/dist/components/ui/alert/alert.svelte +44 -0
  66. package/dist/components/ui/alert/alert.svelte.d.ts +26 -0
  67. package/dist/components/ui/alert/index.d.ts +5 -0
  68. package/dist/components/ui/alert/index.js +7 -0
  69. package/dist/components/ui/alert-dialog/alert-dialog-action.svelte +18 -0
  70. package/dist/components/ui/alert-dialog/alert-dialog-action.svelte.d.ts +4 -0
  71. package/dist/components/ui/alert-dialog/alert-dialog-cancel.svelte +18 -0
  72. package/dist/components/ui/alert-dialog/alert-dialog-cancel.svelte.d.ts +4 -0
  73. package/dist/components/ui/alert-dialog/alert-dialog-content.svelte +27 -0
  74. package/dist/components/ui/alert-dialog/alert-dialog-content.svelte.d.ts +8 -0
  75. package/dist/components/ui/alert-dialog/alert-dialog-description.svelte +17 -0
  76. package/dist/components/ui/alert-dialog/alert-dialog-description.svelte.d.ts +4 -0
  77. package/dist/components/ui/alert-dialog/alert-dialog-footer.svelte +20 -0
  78. package/dist/components/ui/alert-dialog/alert-dialog-footer.svelte.d.ts +5 -0
  79. package/dist/components/ui/alert-dialog/alert-dialog-header.svelte +20 -0
  80. package/dist/components/ui/alert-dialog/alert-dialog-header.svelte.d.ts +5 -0
  81. package/dist/components/ui/alert-dialog/alert-dialog-overlay.svelte +20 -0
  82. package/dist/components/ui/alert-dialog/alert-dialog-overlay.svelte.d.ts +4 -0
  83. package/dist/components/ui/alert-dialog/alert-dialog-title.svelte +17 -0
  84. package/dist/components/ui/alert-dialog/alert-dialog-title.svelte.d.ts +4 -0
  85. package/dist/components/ui/alert-dialog/alert-dialog-trigger.svelte +7 -0
  86. package/dist/components/ui/alert-dialog/alert-dialog-trigger.svelte.d.ts +4 -0
  87. package/dist/components/ui/alert-dialog/index.d.ts +12 -0
  88. package/dist/components/ui/alert-dialog/index.js +15 -0
  89. package/dist/components/ui/badge/badge.svelte +50 -0
  90. package/dist/components/ui/badge/badge.svelte.d.ts +32 -0
  91. package/dist/components/ui/badge/index.d.ts +2 -0
  92. package/dist/components/ui/badge/index.js +2 -0
  93. package/dist/components/ui/button/button.svelte +83 -0
  94. package/dist/components/ui/button/button.svelte.d.ts +67 -0
  95. package/dist/components/ui/button/index.d.ts +2 -0
  96. package/dist/components/ui/button/index.js +4 -0
  97. package/dist/components/ui/button-group/button-group-separator.svelte +20 -0
  98. package/dist/components/ui/button-group/button-group-separator.svelte.d.ts +13 -0
  99. package/dist/components/ui/button-group/button-group-text.svelte +30 -0
  100. package/dist/components/ui/button-group/button-group-text.svelte.d.ts +11 -0
  101. package/dist/components/ui/button-group/button-group.svelte +46 -0
  102. package/dist/components/ui/button-group/button-group.svelte.d.ts +26 -0
  103. package/dist/components/ui/button-group/index.d.ts +4 -0
  104. package/dist/components/ui/button-group/index.js +6 -0
  105. package/dist/components/ui/card/card-action.svelte +20 -0
  106. package/dist/components/ui/card/card-action.svelte.d.ts +5 -0
  107. package/dist/components/ui/card/card-content.svelte +15 -0
  108. package/dist/components/ui/card/card-content.svelte.d.ts +5 -0
  109. package/dist/components/ui/card/card-description.svelte +20 -0
  110. package/dist/components/ui/card/card-description.svelte.d.ts +5 -0
  111. package/dist/components/ui/card/card-footer.svelte +20 -0
  112. package/dist/components/ui/card/card-footer.svelte.d.ts +5 -0
  113. package/dist/components/ui/card/card-header.svelte +23 -0
  114. package/dist/components/ui/card/card-header.svelte.d.ts +5 -0
  115. package/dist/components/ui/card/card-title.svelte +20 -0
  116. package/dist/components/ui/card/card-title.svelte.d.ts +5 -0
  117. package/dist/components/ui/card/card.svelte +23 -0
  118. package/dist/components/ui/card/card.svelte.d.ts +5 -0
  119. package/dist/components/ui/card/index.d.ts +8 -0
  120. package/dist/components/ui/card/index.js +10 -0
  121. package/dist/components/ui/checkbox/checkbox.svelte +36 -0
  122. package/dist/components/ui/checkbox/checkbox.svelte.d.ts +4 -0
  123. package/dist/components/ui/checkbox/index.d.ts +2 -0
  124. package/dist/components/ui/checkbox/index.js +4 -0
  125. package/dist/components/ui/collapsible/collapsible-content.svelte +7 -0
  126. package/dist/components/ui/collapsible/collapsible-content.svelte.d.ts +4 -0
  127. package/dist/components/ui/collapsible/collapsible-trigger.svelte +7 -0
  128. package/dist/components/ui/collapsible/collapsible-trigger.svelte.d.ts +4 -0
  129. package/dist/components/ui/collapsible/collapsible.svelte +11 -0
  130. package/dist/components/ui/collapsible/collapsible.svelte.d.ts +4 -0
  131. package/dist/components/ui/collapsible/index.d.ts +4 -0
  132. package/dist/components/ui/collapsible/index.js +6 -0
  133. package/dist/components/ui/context-menu/context-menu-checkbox-item.svelte +38 -0
  134. package/dist/components/ui/context-menu/context-menu-checkbox-item.svelte.d.ts +9 -0
  135. package/dist/components/ui/context-menu/context-menu-content.svelte +25 -0
  136. package/dist/components/ui/context-menu/context-menu-content.svelte.d.ts +7 -0
  137. package/dist/components/ui/context-menu/context-menu-group-heading.svelte +21 -0
  138. package/dist/components/ui/context-menu/context-menu-group-heading.svelte.d.ts +7 -0
  139. package/dist/components/ui/context-menu/context-menu-group.svelte +7 -0
  140. package/dist/components/ui/context-menu/context-menu-group.svelte.d.ts +4 -0
  141. package/dist/components/ui/context-menu/context-menu-item.svelte +27 -0
  142. package/dist/components/ui/context-menu/context-menu-item.svelte.d.ts +8 -0
  143. package/dist/components/ui/context-menu/context-menu-label.svelte +24 -0
  144. package/dist/components/ui/context-menu/context-menu-label.svelte.d.ts +8 -0
  145. package/dist/components/ui/context-menu/context-menu-radio-group.svelte +16 -0
  146. package/dist/components/ui/context-menu/context-menu-radio-group.svelte.d.ts +4 -0
  147. package/dist/components/ui/context-menu/context-menu-radio-item.svelte +31 -0
  148. package/dist/components/ui/context-menu/context-menu-radio-item.svelte.d.ts +4 -0
  149. package/dist/components/ui/context-menu/context-menu-separator.svelte +17 -0
  150. package/dist/components/ui/context-menu/context-menu-separator.svelte.d.ts +4 -0
  151. package/dist/components/ui/context-menu/context-menu-shortcut.svelte +20 -0
  152. package/dist/components/ui/context-menu/context-menu-shortcut.svelte.d.ts +5 -0
  153. package/dist/components/ui/context-menu/context-menu-sub-content.svelte +20 -0
  154. package/dist/components/ui/context-menu/context-menu-sub-content.svelte.d.ts +4 -0
  155. package/dist/components/ui/context-menu/context-menu-sub-trigger.svelte +29 -0
  156. package/dist/components/ui/context-menu/context-menu-sub-trigger.svelte.d.ts +8 -0
  157. package/dist/components/ui/context-menu/context-menu-trigger.svelte +7 -0
  158. package/dist/components/ui/context-menu/context-menu-trigger.svelte.d.ts +4 -0
  159. package/dist/components/ui/context-menu/index.d.ts +16 -0
  160. package/dist/components/ui/context-menu/index.js +19 -0
  161. package/dist/components/ui/dialog/dialog-close.svelte +7 -0
  162. package/dist/components/ui/dialog/dialog-close.svelte.d.ts +4 -0
  163. package/dist/components/ui/dialog/dialog-content.svelte +43 -0
  164. package/dist/components/ui/dialog/dialog-content.svelte.d.ts +11 -0
  165. package/dist/components/ui/dialog/dialog-description.svelte +17 -0
  166. package/dist/components/ui/dialog/dialog-description.svelte.d.ts +4 -0
  167. package/dist/components/ui/dialog/dialog-footer.svelte +20 -0
  168. package/dist/components/ui/dialog/dialog-footer.svelte.d.ts +5 -0
  169. package/dist/components/ui/dialog/dialog-header.svelte +20 -0
  170. package/dist/components/ui/dialog/dialog-header.svelte.d.ts +5 -0
  171. package/dist/components/ui/dialog/dialog-overlay.svelte +20 -0
  172. package/dist/components/ui/dialog/dialog-overlay.svelte.d.ts +4 -0
  173. package/dist/components/ui/dialog/dialog-title.svelte +17 -0
  174. package/dist/components/ui/dialog/dialog-title.svelte.d.ts +4 -0
  175. package/dist/components/ui/dialog/dialog-trigger.svelte +7 -0
  176. package/dist/components/ui/dialog/dialog-trigger.svelte.d.ts +4 -0
  177. package/dist/components/ui/dialog/index.d.ts +11 -0
  178. package/dist/components/ui/dialog/index.js +14 -0
  179. package/dist/components/ui/field/field-content.svelte +20 -0
  180. package/dist/components/ui/field/field-content.svelte.d.ts +5 -0
  181. package/dist/components/ui/field/field-description.svelte +25 -0
  182. package/dist/components/ui/field/field-description.svelte.d.ts +5 -0
  183. package/dist/components/ui/field/field-error.svelte +58 -0
  184. package/dist/components/ui/field/field-error.svelte.d.ts +12 -0
  185. package/dist/components/ui/field/field-group.svelte +23 -0
  186. package/dist/components/ui/field/field-group.svelte.d.ts +5 -0
  187. package/dist/components/ui/field/field-label.svelte +26 -0
  188. package/dist/components/ui/field/field-label.svelte.d.ts +10 -0
  189. package/dist/components/ui/field/field-legend.svelte +29 -0
  190. package/dist/components/ui/field/field-legend.svelte.d.ts +8 -0
  191. package/dist/components/ui/field/field-separator.svelte +38 -0
  192. package/dist/components/ui/field/field-separator.svelte.d.ts +9 -0
  193. package/dist/components/ui/field/field-set.svelte +24 -0
  194. package/dist/components/ui/field/field-set.svelte.d.ts +5 -0
  195. package/dist/components/ui/field/field-title.svelte +23 -0
  196. package/dist/components/ui/field/field-title.svelte.d.ts +5 -0
  197. package/dist/components/ui/field/field.svelte +53 -0
  198. package/dist/components/ui/field/field.svelte.d.ts +29 -0
  199. package/dist/components/ui/field/index.d.ts +11 -0
  200. package/dist/components/ui/field/index.js +13 -0
  201. package/dist/components/ui/index.d.ts +21 -0
  202. package/dist/components/ui/index.js +24 -0
  203. package/dist/components/ui/input/index.d.ts +2 -0
  204. package/dist/components/ui/input/index.js +4 -0
  205. package/dist/components/ui/input/input.svelte +52 -0
  206. package/dist/components/ui/input/input.svelte.d.ts +13 -0
  207. package/dist/components/ui/label/index.d.ts +2 -0
  208. package/dist/components/ui/label/index.js +4 -0
  209. package/dist/components/ui/label/label.svelte +20 -0
  210. package/dist/components/ui/label/label.svelte.d.ts +4 -0
  211. package/dist/components/ui/mode-toggle/index.d.ts +1 -0
  212. package/dist/components/ui/mode-toggle/index.js +1 -0
  213. package/dist/components/ui/mode-toggle/mode-toggle.svelte +16 -0
  214. package/dist/components/ui/mode-toggle/mode-toggle.svelte.d.ts +18 -0
  215. package/dist/components/ui/resizable/index.d.ts +4 -0
  216. package/dist/components/ui/resizable/index.js +6 -0
  217. package/dist/components/ui/resizable/resizable-handle.svelte +30 -0
  218. package/dist/components/ui/resizable/resizable-handle.svelte.d.ts +8 -0
  219. package/dist/components/ui/resizable/resizable-pane-group.svelte +20 -0
  220. package/dist/components/ui/resizable/resizable-pane-group.svelte.d.ts +7 -0
  221. package/dist/components/ui/scroll-area/index.d.ts +3 -0
  222. package/dist/components/ui/scroll-area/index.js +5 -0
  223. package/dist/components/ui/scroll-area/scroll-area-scrollbar.svelte +31 -0
  224. package/dist/components/ui/scroll-area/scroll-area-scrollbar.svelte.d.ts +4 -0
  225. package/dist/components/ui/scroll-area/scroll-area.svelte +43 -0
  226. package/dist/components/ui/scroll-area/scroll-area.svelte.d.ts +11 -0
  227. package/dist/components/ui/select/index.d.ts +11 -0
  228. package/dist/components/ui/select/index.js +14 -0
  229. package/dist/components/ui/select/select-content.svelte +40 -0
  230. package/dist/components/ui/select/select-content.svelte.d.ts +8 -0
  231. package/dist/components/ui/select/select-group-heading.svelte +21 -0
  232. package/dist/components/ui/select/select-group-heading.svelte.d.ts +10 -0
  233. package/dist/components/ui/select/select-group.svelte +7 -0
  234. package/dist/components/ui/select/select-group.svelte.d.ts +4 -0
  235. package/dist/components/ui/select/select-item.svelte +38 -0
  236. package/dist/components/ui/select/select-item.svelte.d.ts +4 -0
  237. package/dist/components/ui/select/select-label.svelte +20 -0
  238. package/dist/components/ui/select/select-label.svelte.d.ts +6 -0
  239. package/dist/components/ui/select/select-scroll-down-button.svelte +20 -0
  240. package/dist/components/ui/select/select-scroll-down-button.svelte.d.ts +4 -0
  241. package/dist/components/ui/select/select-scroll-up-button.svelte +20 -0
  242. package/dist/components/ui/select/select-scroll-up-button.svelte.d.ts +4 -0
  243. package/dist/components/ui/select/select-separator.svelte +18 -0
  244. package/dist/components/ui/select/select-separator.svelte.d.ts +4 -0
  245. package/dist/components/ui/select/select-trigger.svelte +29 -0
  246. package/dist/components/ui/select/select-trigger.svelte.d.ts +8 -0
  247. package/dist/components/ui/separator/index.d.ts +2 -0
  248. package/dist/components/ui/separator/index.js +4 -0
  249. package/dist/components/ui/separator/separator.svelte +21 -0
  250. package/dist/components/ui/separator/separator.svelte.d.ts +4 -0
  251. package/dist/components/ui/slider/index.d.ts +2 -0
  252. package/dist/components/ui/slider/index.js +4 -0
  253. package/dist/components/ui/slider/slider.svelte +52 -0
  254. package/dist/components/ui/slider/slider.svelte.d.ts +5 -0
  255. package/dist/components/ui/sonner/index.d.ts +2 -0
  256. package/dist/components/ui/sonner/index.js +2 -0
  257. package/dist/components/ui/sonner/sonner.svelte +13 -0
  258. package/dist/components/ui/sonner/sonner.svelte.d.ts +4 -0
  259. package/dist/components/ui/switch/index.d.ts +2 -0
  260. package/dist/components/ui/switch/index.js +4 -0
  261. package/dist/components/ui/switch/switch.svelte +29 -0
  262. package/dist/components/ui/switch/switch.svelte.d.ts +4 -0
  263. package/dist/components/ui/tabs/index.d.ts +5 -0
  264. package/dist/components/ui/tabs/index.js +7 -0
  265. package/dist/components/ui/tabs/tabs-content.svelte +17 -0
  266. package/dist/components/ui/tabs/tabs-content.svelte.d.ts +4 -0
  267. package/dist/components/ui/tabs/tabs-list.svelte +16 -0
  268. package/dist/components/ui/tabs/tabs-list.svelte.d.ts +4 -0
  269. package/dist/components/ui/tabs/tabs-trigger.svelte +20 -0
  270. package/dist/components/ui/tabs/tabs-trigger.svelte.d.ts +4 -0
  271. package/dist/components/ui/tabs/tabs.svelte +19 -0
  272. package/dist/components/ui/tabs/tabs.svelte.d.ts +4 -0
  273. package/dist/components/ui/textarea/index.d.ts +2 -0
  274. package/dist/components/ui/textarea/index.js +4 -0
  275. package/dist/components/ui/textarea/textarea.svelte +23 -0
  276. package/dist/components/ui/textarea/textarea.svelte.d.ts +5 -0
  277. package/dist/components/ui/theme-switcher/ThemeSwitcher.svelte +39 -0
  278. package/dist/components/ui/theme-switcher/ThemeSwitcher.svelte.d.ts +3 -0
  279. package/dist/components/ui/theme-switcher/index.d.ts +1 -0
  280. package/dist/components/ui/theme-switcher/index.js +1 -0
  281. package/dist/composables/useFooterItem.svelte.d.ts +15 -0
  282. package/dist/composables/useFooterItem.svelte.js +31 -0
  283. package/dist/constants.d.ts +6 -0
  284. package/dist/constants.js +6 -0
  285. package/dist/contexts/FOOTER_USAGE.md +164 -0
  286. package/dist/contexts/footerContext.svelte.d.ts +17 -0
  287. package/dist/contexts/footerContext.svelte.js +24 -0
  288. package/dist/dummy-output-values.d.ts +3 -0
  289. package/dist/dummy-output-values.js +53 -0
  290. package/dist/dummy-surface-chart.json +13 -0
  291. package/dist/example-schema-left-only.json +367 -0
  292. package/dist/example-schema-right-only.json +322 -0
  293. package/dist/example-schema.json +1582 -0
  294. package/dist/features/preview/handlers.d.ts +55 -0
  295. package/dist/features/preview/handlers.js +175 -0
  296. package/dist/features/preview/index.d.ts +2 -0
  297. package/dist/features/preview/index.js +2 -0
  298. package/dist/features/preview/notifications.d.ts +11 -0
  299. package/dist/features/preview/notifications.js +41 -0
  300. package/dist/index.d.ts +29 -0
  301. package/dist/index.js +39 -0
  302. package/dist/stores/themeStore.svelte.d.ts +12 -0
  303. package/dist/stores/themeStore.svelte.js +42 -0
  304. package/dist/styles/base.css +142 -0
  305. package/dist/styles/themes/cyberpunk.css +98 -0
  306. package/dist/styles/themes/neutral.css +72 -0
  307. package/dist/styles/themes/ocean.css +75 -0
  308. package/dist/styles/themes/selva.css +105 -0
  309. package/dist/themes.d.ts +5 -0
  310. package/dist/themes.js +13 -0
  311. package/dist/types/generated/index.d.ts +6 -0
  312. package/dist/types/generated/index.js +6 -0
  313. package/dist/types/generated/preset.d.ts +80 -0
  314. package/dist/types/generated/preset.js +7 -0
  315. package/dist/types/generated/schema.d.ts +451 -0
  316. package/dist/types/generated/schema.js +48 -0
  317. package/dist/utils/computeThrottle.svelte.d.ts +28 -0
  318. package/dist/utils/computeThrottle.svelte.js +93 -0
  319. package/dist/utils/debounce.d.ts +14 -0
  320. package/dist/utils/debounce.js +25 -0
  321. package/dist/utils/file-download.d.ts +26 -0
  322. package/dist/utils/file-download.js +76 -0
  323. package/dist/utils/loadScript.d.ts +14 -0
  324. package/dist/utils/loadScript.js +41 -0
  325. package/dist/utils/param-exporter.d.ts +30 -0
  326. package/dist/utils/param-exporter.js +186 -0
  327. package/dist/utils/solving.svelte.d.ts +12 -0
  328. package/dist/utils/solving.svelte.js +86 -0
  329. package/dist/utils/utils-shared.d.ts +9 -0
  330. package/dist/utils/utils-shared.js +53 -0
  331. package/dist/utils/visibility-rules.d.ts +12 -0
  332. package/dist/utils/visibility-rules.js +52 -0
  333. package/dist/utils.d.ts +12 -0
  334. package/dist/utils.js +5 -0
  335. package/package.json +70 -0
  336. package/src/lib/components/AppLayout.svelte +439 -0
  337. package/src/lib/components/CollapsedPanelStrip.svelte +67 -0
  338. package/src/lib/components/ComputeMessages.svelte +172 -0
  339. package/src/lib/components/ErrorScreen.svelte +55 -0
  340. package/src/lib/components/StateManager.svelte +318 -0
  341. package/src/lib/components/Viewer.svelte +207 -0
  342. package/src/lib/components/layout/FooterItemRenderer.svelte +20 -0
  343. package/src/lib/components/layout/PageContainer.svelte +36 -0
  344. package/src/lib/components/layout/PageFooter.svelte +223 -0
  345. package/src/lib/components/layout/PageHeader.svelte +89 -0
  346. package/src/lib/components/layout/index.ts +4 -0
  347. package/src/lib/components/preview/ChartOutput.svelte +257 -0
  348. package/src/lib/components/preview/Group.svelte +121 -0
  349. package/src/lib/components/preview/InputControl.svelte +119 -0
  350. package/src/lib/components/preview/OutputDisplay.svelte +296 -0
  351. package/src/lib/components/preview/TabBar.svelte +36 -0
  352. package/src/lib/components/preview/TabContent.svelte +124 -0
  353. package/src/lib/components/preview/TabLayout.svelte +109 -0
  354. package/src/lib/components/preview/index.ts +4 -0
  355. package/src/lib/components/preview/inputs/CheckboxInput.svelte +29 -0
  356. package/src/lib/components/preview/inputs/ColorInput.svelte +21 -0
  357. package/src/lib/components/preview/inputs/DropdownInput.svelte +40 -0
  358. package/src/lib/components/preview/inputs/FileInput.svelte +358 -0
  359. package/src/lib/components/preview/inputs/NumberInput.svelte +152 -0
  360. package/src/lib/components/preview/inputs/TextInput.svelte +74 -0
  361. package/src/lib/components/preview/inputs/index.ts +6 -0
  362. package/src/lib/components/ui/CalculateButton.svelte +56 -0
  363. package/src/lib/components/ui/SolvingIndicator.svelte +55 -0
  364. package/src/lib/components/ui/StateDisplay.svelte +106 -0
  365. package/src/lib/components/ui/alert/alert-description.svelte +23 -0
  366. package/src/lib/components/ui/alert/alert-title.svelte +20 -0
  367. package/src/lib/components/ui/alert/alert.svelte +44 -0
  368. package/src/lib/components/ui/alert/index.ts +14 -0
  369. package/src/lib/components/ui/alert-dialog/alert-dialog-action.svelte +18 -0
  370. package/src/lib/components/ui/alert-dialog/alert-dialog-cancel.svelte +18 -0
  371. package/src/lib/components/ui/alert-dialog/alert-dialog-content.svelte +27 -0
  372. package/src/lib/components/ui/alert-dialog/alert-dialog-description.svelte +17 -0
  373. package/src/lib/components/ui/alert-dialog/alert-dialog-footer.svelte +20 -0
  374. package/src/lib/components/ui/alert-dialog/alert-dialog-header.svelte +20 -0
  375. package/src/lib/components/ui/alert-dialog/alert-dialog-overlay.svelte +20 -0
  376. package/src/lib/components/ui/alert-dialog/alert-dialog-title.svelte +17 -0
  377. package/src/lib/components/ui/alert-dialog/alert-dialog-trigger.svelte +7 -0
  378. package/src/lib/components/ui/alert-dialog/index.ts +39 -0
  379. package/src/lib/components/ui/badge/badge.svelte +50 -0
  380. package/src/lib/components/ui/badge/index.ts +2 -0
  381. package/src/lib/components/ui/button/button.svelte +83 -0
  382. package/src/lib/components/ui/button/index.ts +17 -0
  383. package/src/lib/components/ui/button-group/button-group-separator.svelte +20 -0
  384. package/src/lib/components/ui/button-group/button-group-text.svelte +30 -0
  385. package/src/lib/components/ui/button-group/button-group.svelte +46 -0
  386. package/src/lib/components/ui/button-group/index.ts +13 -0
  387. package/src/lib/components/ui/card/card-action.svelte +20 -0
  388. package/src/lib/components/ui/card/card-content.svelte +15 -0
  389. package/src/lib/components/ui/card/card-description.svelte +20 -0
  390. package/src/lib/components/ui/card/card-footer.svelte +20 -0
  391. package/src/lib/components/ui/card/card-header.svelte +23 -0
  392. package/src/lib/components/ui/card/card-title.svelte +20 -0
  393. package/src/lib/components/ui/card/card.svelte +23 -0
  394. package/src/lib/components/ui/card/index.ts +25 -0
  395. package/src/lib/components/ui/checkbox/checkbox.svelte +36 -0
  396. package/src/lib/components/ui/checkbox/index.ts +6 -0
  397. package/src/lib/components/ui/collapsible/collapsible-content.svelte +7 -0
  398. package/src/lib/components/ui/collapsible/collapsible-trigger.svelte +7 -0
  399. package/src/lib/components/ui/collapsible/collapsible.svelte +11 -0
  400. package/src/lib/components/ui/collapsible/index.ts +13 -0
  401. package/src/lib/components/ui/context-menu/context-menu-checkbox-item.svelte +38 -0
  402. package/src/lib/components/ui/context-menu/context-menu-content.svelte +25 -0
  403. package/src/lib/components/ui/context-menu/context-menu-group-heading.svelte +21 -0
  404. package/src/lib/components/ui/context-menu/context-menu-group.svelte +7 -0
  405. package/src/lib/components/ui/context-menu/context-menu-item.svelte +27 -0
  406. package/src/lib/components/ui/context-menu/context-menu-label.svelte +24 -0
  407. package/src/lib/components/ui/context-menu/context-menu-radio-group.svelte +16 -0
  408. package/src/lib/components/ui/context-menu/context-menu-radio-item.svelte +31 -0
  409. package/src/lib/components/ui/context-menu/context-menu-separator.svelte +17 -0
  410. package/src/lib/components/ui/context-menu/context-menu-shortcut.svelte +20 -0
  411. package/src/lib/components/ui/context-menu/context-menu-sub-content.svelte +20 -0
  412. package/src/lib/components/ui/context-menu/context-menu-sub-trigger.svelte +29 -0
  413. package/src/lib/components/ui/context-menu/context-menu-trigger.svelte +7 -0
  414. package/src/lib/components/ui/context-menu/index.ts +51 -0
  415. package/src/lib/components/ui/dialog/dialog-close.svelte +7 -0
  416. package/src/lib/components/ui/dialog/dialog-content.svelte +43 -0
  417. package/src/lib/components/ui/dialog/dialog-description.svelte +17 -0
  418. package/src/lib/components/ui/dialog/dialog-footer.svelte +20 -0
  419. package/src/lib/components/ui/dialog/dialog-header.svelte +20 -0
  420. package/src/lib/components/ui/dialog/dialog-overlay.svelte +20 -0
  421. package/src/lib/components/ui/dialog/dialog-title.svelte +17 -0
  422. package/src/lib/components/ui/dialog/dialog-trigger.svelte +7 -0
  423. package/src/lib/components/ui/dialog/index.ts +37 -0
  424. package/src/lib/components/ui/field/field-content.svelte +20 -0
  425. package/src/lib/components/ui/field/field-description.svelte +25 -0
  426. package/src/lib/components/ui/field/field-error.svelte +58 -0
  427. package/src/lib/components/ui/field/field-group.svelte +23 -0
  428. package/src/lib/components/ui/field/field-label.svelte +26 -0
  429. package/src/lib/components/ui/field/field-legend.svelte +29 -0
  430. package/src/lib/components/ui/field/field-separator.svelte +38 -0
  431. package/src/lib/components/ui/field/field-set.svelte +24 -0
  432. package/src/lib/components/ui/field/field-title.svelte +23 -0
  433. package/src/lib/components/ui/field/field.svelte +53 -0
  434. package/src/lib/components/ui/field/index.ts +33 -0
  435. package/src/lib/components/ui/index.ts +33 -0
  436. package/src/lib/components/ui/input/index.ts +7 -0
  437. package/src/lib/components/ui/input/input.svelte +52 -0
  438. package/src/lib/components/ui/label/index.ts +7 -0
  439. package/src/lib/components/ui/label/label.svelte +20 -0
  440. package/src/lib/components/ui/mode-toggle/index.ts +1 -0
  441. package/src/lib/components/ui/mode-toggle/mode-toggle.svelte +16 -0
  442. package/src/lib/components/ui/resizable/index.ts +13 -0
  443. package/src/lib/components/ui/resizable/resizable-handle.svelte +30 -0
  444. package/src/lib/components/ui/resizable/resizable-pane-group.svelte +20 -0
  445. package/src/lib/components/ui/scroll-area/index.ts +10 -0
  446. package/src/lib/components/ui/scroll-area/scroll-area-scrollbar.svelte +31 -0
  447. package/src/lib/components/ui/scroll-area/scroll-area.svelte +43 -0
  448. package/src/lib/components/ui/select/index.ts +37 -0
  449. package/src/lib/components/ui/select/select-content.svelte +40 -0
  450. package/src/lib/components/ui/select/select-group-heading.svelte +21 -0
  451. package/src/lib/components/ui/select/select-group.svelte +7 -0
  452. package/src/lib/components/ui/select/select-item.svelte +38 -0
  453. package/src/lib/components/ui/select/select-label.svelte +20 -0
  454. package/src/lib/components/ui/select/select-scroll-down-button.svelte +20 -0
  455. package/src/lib/components/ui/select/select-scroll-up-button.svelte +20 -0
  456. package/src/lib/components/ui/select/select-separator.svelte +18 -0
  457. package/src/lib/components/ui/select/select-trigger.svelte +29 -0
  458. package/src/lib/components/ui/separator/index.ts +7 -0
  459. package/src/lib/components/ui/separator/separator.svelte +21 -0
  460. package/src/lib/components/ui/slider/index.ts +7 -0
  461. package/src/lib/components/ui/slider/slider.svelte +52 -0
  462. package/src/lib/components/ui/sonner/index.ts +2 -0
  463. package/src/lib/components/ui/sonner/sonner.svelte +13 -0
  464. package/src/lib/components/ui/switch/index.ts +7 -0
  465. package/src/lib/components/ui/switch/switch.svelte +29 -0
  466. package/src/lib/components/ui/tabs/index.ts +16 -0
  467. package/src/lib/components/ui/tabs/tabs-content.svelte +17 -0
  468. package/src/lib/components/ui/tabs/tabs-list.svelte +16 -0
  469. package/src/lib/components/ui/tabs/tabs-trigger.svelte +20 -0
  470. package/src/lib/components/ui/tabs/tabs.svelte +19 -0
  471. package/src/lib/components/ui/textarea/index.ts +7 -0
  472. package/src/lib/components/ui/textarea/textarea.svelte +23 -0
  473. package/src/lib/components/ui/theme-switcher/ThemeSwitcher.svelte +39 -0
  474. package/src/lib/components/ui/theme-switcher/index.ts +1 -0
  475. package/src/lib/composables/useFooterItem.svelte.ts +39 -0
  476. package/src/lib/constants.ts +6 -0
  477. package/src/lib/contexts/FOOTER_USAGE.md +164 -0
  478. package/src/lib/contexts/footerContext.svelte.ts +52 -0
  479. package/src/lib/dummy-output-values.ts +62 -0
  480. package/src/lib/dummy-surface-chart.json +13 -0
  481. package/src/lib/example-schema-left-only.json +367 -0
  482. package/src/lib/example-schema-right-only.json +322 -0
  483. package/src/lib/example-schema.json +1582 -0
  484. package/src/lib/features/preview/handlers.ts +243 -0
  485. package/src/lib/features/preview/index.ts +2 -0
  486. package/src/lib/features/preview/notifications.ts +52 -0
  487. package/src/lib/index.ts +52 -0
  488. package/src/lib/stores/themeStore.svelte.ts +54 -0
  489. package/src/lib/styles/base.css +142 -0
  490. package/src/lib/styles/themes/cyberpunk.css +98 -0
  491. package/src/lib/styles/themes/neutral.css +72 -0
  492. package/src/lib/styles/themes/ocean.css +75 -0
  493. package/src/lib/styles/themes/selva.css +105 -0
  494. package/src/lib/themes.ts +18 -0
  495. package/src/lib/types/generated/index.ts +6 -0
  496. package/src/lib/types/generated/preset.ts +82 -0
  497. package/src/lib/types/generated/schema.ts +527 -0
  498. package/src/lib/utils/computeThrottle.svelte.ts +117 -0
  499. package/src/lib/utils/debounce.ts +30 -0
  500. package/src/lib/utils/file-download.ts +88 -0
  501. package/src/lib/utils/loadScript.ts +52 -0
  502. package/src/lib/utils/param-exporter.ts +242 -0
  503. package/src/lib/utils/solving.svelte.ts +100 -0
  504. package/src/lib/utils/utils-shared.ts +57 -0
  505. package/src/lib/utils/visibility-rules.ts +97 -0
  506. package/src/lib/utils.ts +13 -0
@@ -0,0 +1,451 @@
1
+ /**
2
+ * This file was automatically generated from schemas/ui-schema.json.
3
+ * DO NOT MODIFY IT BY HAND. Instead, modify the source JSON Schema file,
4
+ * and run `npm run generate:ts` in the schemas directory to regenerate this file.
5
+ */
6
+ export type GrasshopperParamType = 'number' | 'integer' | 'boolean' | 'text' | 'valueList' | 'file' | 'color' | 'generic';
7
+ export type InputNumberLayoutItem = LayoutItemBase & {
8
+ type: 'input';
9
+ widgetType: 'number';
10
+ config?: NumberWidgetConfig;
11
+ [k: string]: unknown | undefined;
12
+ };
13
+ export type InputTextLayoutItem = LayoutItemBase & {
14
+ type: 'input';
15
+ widgetType: 'text';
16
+ config?: TextWidgetConfig;
17
+ [k: string]: unknown | undefined;
18
+ };
19
+ export type InputDropdownLayoutItem = LayoutItemBase & {
20
+ type: 'input';
21
+ widgetType: 'dropdown';
22
+ config: DropdownWidgetConfig;
23
+ [k: string]: unknown | undefined;
24
+ };
25
+ export type InputCheckboxLayoutItem = LayoutItemBase & {
26
+ type: 'input';
27
+ widgetType: 'checkbox';
28
+ config?: CheckboxWidgetConfig;
29
+ [k: string]: unknown | undefined;
30
+ };
31
+ export type InputFileLayoutItem = LayoutItemBase & {
32
+ type: 'input';
33
+ widgetType: 'file';
34
+ config?: FileInputWidgetConfig;
35
+ [k: string]: unknown | undefined;
36
+ };
37
+ export type InputColorLayoutItem = LayoutItemBase & {
38
+ type: 'input';
39
+ widgetType: 'color';
40
+ config?: ColorWidgetConfig;
41
+ [k: string]: unknown | undefined;
42
+ };
43
+ export type OutputTextLayoutItem = LayoutItemBase & {
44
+ type: 'output';
45
+ widgetType: 'text';
46
+ [k: string]: unknown | undefined;
47
+ };
48
+ export type OutputNumberLayoutItem = LayoutItemBase & {
49
+ type: 'output';
50
+ widgetType: 'number';
51
+ [k: string]: unknown | undefined;
52
+ };
53
+ export type OutputFileLayoutItem = LayoutItemBase & {
54
+ type: 'output';
55
+ widgetType: 'file';
56
+ config?: FileWidgetConfig;
57
+ [k: string]: unknown | undefined;
58
+ };
59
+ export type OutputChartLayoutItem = LayoutItemBase & {
60
+ type: 'output';
61
+ widgetType: 'chart';
62
+ config?: ChartWidgetConfig;
63
+ [k: string]: unknown | undefined;
64
+ };
65
+ export type LayoutItem = InputNumberLayoutItem | InputTextLayoutItem | InputDropdownLayoutItem | InputCheckboxLayoutItem | InputFileLayoutItem | InputColorLayoutItem | OutputTextLayoutItem | OutputNumberLayoutItem | OutputFileLayoutItem | OutputChartLayoutItem | LineBreakLayoutItem;
66
+ export type LayoutConfig = TabbedLayoutConfig | FlatLayoutConfig;
67
+ export type GrasshopperInputStructure = 'item' | 'list' | 'tree';
68
+ /**
69
+ * Schema definitions for Selva UI configuration
70
+ */
71
+ export interface SelvaUISchema {
72
+ [k: string]: unknown | undefined;
73
+ }
74
+ export interface VisibilityRule {
75
+ /**
76
+ * Parameter ID to watch for changes
77
+ */
78
+ paramId: string;
79
+ /**
80
+ * Comparison operator
81
+ */
82
+ operator: 'equals' | 'notEquals' | 'greaterThan' | 'lessThan' | 'greaterThanOrEqual' | 'lessThanOrEqual' | 'in' | 'notIn' | 'between' | 'matches';
83
+ /**
84
+ * Value to compare against (used for equals, notEquals, greaterThan, lessThan, greaterThanOrEqual, lessThanOrEqual)
85
+ */
86
+ value?: {
87
+ [k: string]: unknown | undefined;
88
+ };
89
+ /**
90
+ * Array of values (used for 'in', 'notIn' operators, or [min, max] for 'between')
91
+ */
92
+ values?: unknown[];
93
+ }
94
+ export interface VisibilityCondition {
95
+ /**
96
+ * Evaluation mode: 'all' = AND (all rules must pass), 'any' = OR (at least one rule must pass)
97
+ */
98
+ mode?: 'all' | 'any';
99
+ /**
100
+ * List of rules to evaluate
101
+ *
102
+ * @minItems 1
103
+ */
104
+ rules: [VisibilityRule, ...VisibilityRule[]];
105
+ /**
106
+ * Action to apply when condition is met: 'show' makes visible and enabled, 'hide' removes from view, 'disable' makes visible but greyed out and non-interactive
107
+ */
108
+ action?: 'show' | 'hide' | 'disable';
109
+ /**
110
+ * Default value to set for the parameter when condition is met. The value should be compatible with the parameter type (number, string, boolean, etc.)
111
+ */
112
+ defaultValue?: {
113
+ [k: string]: unknown | undefined;
114
+ };
115
+ }
116
+ export interface GroupVisibilityCondition {
117
+ /**
118
+ * Evaluation mode: 'all' = AND (all rules must pass), 'any' = OR (at least one rule must pass)
119
+ */
120
+ mode?: 'all' | 'any';
121
+ /**
122
+ * List of rules to evaluate
123
+ *
124
+ * @minItems 1
125
+ */
126
+ rules: [VisibilityRule, ...VisibilityRule[]];
127
+ /**
128
+ * Action to apply when condition is met: 'show' makes group visible, 'hide' removes group from view
129
+ */
130
+ action?: 'show' | 'hide';
131
+ }
132
+ export interface NumberWidgetConfig {
133
+ minimum?: number;
134
+ maximum?: number;
135
+ stepSize?: number;
136
+ placeholder?: string;
137
+ renderAsSlider?: boolean;
138
+ }
139
+ export interface TextWidgetConfig {
140
+ placeholder?: string;
141
+ required?: boolean;
142
+ /**
143
+ * Maximum character length for text input
144
+ */
145
+ maxLength?: number;
146
+ /**
147
+ * Regex pattern for validation (e.g., email, phone)
148
+ */
149
+ pattern?: string;
150
+ /**
151
+ * Custom error message shown when pattern validation fails
152
+ */
153
+ customErrorMessage?: string;
154
+ }
155
+ export interface DropdownWidgetConfig {
156
+ /**
157
+ * Key-value pairs for dropdown options
158
+ */
159
+ options: {
160
+ [k: string]: string | undefined;
161
+ };
162
+ required?: boolean;
163
+ }
164
+ export interface CheckboxWidgetConfig {
165
+ }
166
+ export interface FileWidgetConfig {
167
+ buttonLabel?: string;
168
+ /**
169
+ * File format hint (e.g., '3dm') for setting download extension
170
+ */
171
+ fileFormat?: string;
172
+ }
173
+ export interface FileInputWidgetConfig {
174
+ /**
175
+ * List of accepted file extensions (e.g., ['.3dm', '.step'])
176
+ */
177
+ acceptedFormats?: string[];
178
+ /**
179
+ * Which mode is active by default when both are allowed
180
+ */
181
+ defaultInputMode?: 'upload' | 'url';
182
+ /**
183
+ * Which input modes the end user can choose from. If omitted, both are allowed.
184
+ */
185
+ allowedInputModes?: ('upload' | 'url')[];
186
+ }
187
+ export interface ColorWidgetConfig {
188
+ }
189
+ export interface LayoutItemBase {
190
+ /**
191
+ * Unique identifier for this layout item in the UI tree (not the parameter ID)
192
+ */
193
+ id: string;
194
+ /**
195
+ * References the Grasshopper component InstanceGuid (Data Source)
196
+ */
197
+ paramId: string;
198
+ displayName?: string;
199
+ description?: string;
200
+ order?: number;
201
+ span?: number;
202
+ /**
203
+ * Base visibility (static). If false, item is always hidden regardless of conditions.
204
+ */
205
+ visible?: boolean;
206
+ visibilityCondition?: VisibilityCondition;
207
+ [k: string]: unknown | undefined;
208
+ }
209
+ export interface ChartWidgetConfig {
210
+ }
211
+ export interface LineBreakLayoutItem {
212
+ /**
213
+ * Unique identifier for this layout item in the UI tree
214
+ */
215
+ id: string;
216
+ type: 'linebreak';
217
+ }
218
+ export interface GroupConfig {
219
+ id: string;
220
+ label: string;
221
+ description?: string;
222
+ order?: number;
223
+ collapsed?: boolean;
224
+ columns?: number;
225
+ items: LayoutItem[];
226
+ visibilityCondition?: GroupVisibilityCondition;
227
+ }
228
+ export interface TabConfig {
229
+ id: string;
230
+ label: string;
231
+ icon?: string;
232
+ order?: number;
233
+ groups: GroupConfig[];
234
+ /**
235
+ * Horizontal region where this tab should be positioned in multi-column layouts
236
+ */
237
+ position?: 'left' | 'center' | 'right';
238
+ }
239
+ export interface TabbedLayoutConfig {
240
+ type: 'tabbed';
241
+ gap?: number;
242
+ tabs: TabConfig[];
243
+ }
244
+ export interface FlatLayoutConfig {
245
+ type: 'flat';
246
+ gap?: number;
247
+ groups: GroupConfig[];
248
+ }
249
+ export interface DiscoveredInput {
250
+ /**
251
+ * Grasshopper parameter instance GUID
252
+ */
253
+ id: string;
254
+ name: string;
255
+ nickname: string;
256
+ description: string;
257
+ type: GrasshopperParamType;
258
+ default?: unknown;
259
+ minimum?: number;
260
+ maximum?: number;
261
+ stepSize?: number;
262
+ atLeast?: number;
263
+ atMost?: number;
264
+ treeAccess?: boolean;
265
+ /**
266
+ * Key-value pairs for dropdown/selection options
267
+ */
268
+ options?: {
269
+ [k: string]: string | undefined;
270
+ };
271
+ [k: string]: unknown | undefined;
272
+ }
273
+ export interface DiscoveredOutput {
274
+ /**
275
+ * Grasshopper component instance GUID
276
+ */
277
+ id: string;
278
+ nickname: string;
279
+ description?: string;
280
+ /**
281
+ * Output display type in UI: 'text' for text/console output, 'number' for numeric output, 'file' for downloadable files, 'html' for rendered HTML (e.g. Plotly charts)
282
+ */
283
+ type: 'text' | 'number' | 'file' | 'chart';
284
+ }
285
+ export interface DiscoveredParameters {
286
+ sessionId: string;
287
+ timestamp: string;
288
+ /**
289
+ * List of input parameters available for UI building
290
+ */
291
+ inputs: DiscoveredInput[];
292
+ /**
293
+ * List of output components available for UI building
294
+ */
295
+ outputs: DiscoveredOutput[];
296
+ [k: string]: unknown | undefined;
297
+ }
298
+ export interface SchemaInput {
299
+ /**
300
+ * Grasshopper parameter instance GUID
301
+ */
302
+ id: string;
303
+ nickname: string;
304
+ paramType: GrasshopperParamType;
305
+ description?: string;
306
+ default?: unknown;
307
+ /**
308
+ * Grasshopper data access mode: 'item' = Item Access, 'list' = List Access, 'tree' = Tree Access. Defaults to 'item'.
309
+ */
310
+ inputStructure?: 'item' | 'list' | 'tree';
311
+ }
312
+ export interface SchemaOutput {
313
+ /**
314
+ * Grasshopper parameter instance GUID
315
+ */
316
+ id: string;
317
+ nickname: string;
318
+ description?: string;
319
+ /**
320
+ * Output display type
321
+ */
322
+ type: 'text' | 'number' | 'file' | 'chart';
323
+ }
324
+ export interface ViewerOptions {
325
+ /**
326
+ * If true, display mesh data is sent to the web preview for local rendering
327
+ */
328
+ enableLocal?: boolean;
329
+ /**
330
+ * If true, enables remote rendering via Rhino Compute
331
+ */
332
+ enableRemote?: boolean;
333
+ /**
334
+ * Background color for the 3D viewer as hex string (e.g., '#ffffff')
335
+ */
336
+ backgroundColor?: string;
337
+ }
338
+ export interface UISchema {
339
+ id: string;
340
+ name: string;
341
+ description?: string;
342
+ /**
343
+ * Grasshopper document file name (e.g., 'myfile.gh')
344
+ */
345
+ projectFileName?: string;
346
+ /**
347
+ * Grasshopper document unique identifier (GUID)
348
+ */
349
+ documentId?: string;
350
+ /**
351
+ * Version of Selva plugin that created/last modified this schema
352
+ */
353
+ pluginVersion?: string;
354
+ /**
355
+ * User-defined tags for organizing schemas (e.g., ['architecture', 'facade'])
356
+ */
357
+ tags?: string[];
358
+ /**
359
+ * Category for organizing schemas (e.g., 'architecture', 'structural', 'mechanical')
360
+ */
361
+ category?: string;
362
+ /**
363
+ * User or organization who created the schema
364
+ */
365
+ author?: string;
366
+ /**
367
+ * Organization/company name
368
+ */
369
+ organization?: string;
370
+ /**
371
+ * Semantic version of the schema format (MAJOR.MINOR.PATCH)
372
+ */
373
+ schemaVersion?: string;
374
+ /**
375
+ * Minimum plugin version required to load this schema
376
+ */
377
+ minPluginVersion?: string;
378
+ created?: string;
379
+ /**
380
+ * Last modification timestamp
381
+ */
382
+ lastModified?: string;
383
+ viewerOptions?: ViewerOptions1;
384
+ /**
385
+ * If true, changes trigger immediate solving. If false, user must press Calculate button.
386
+ */
387
+ instanceSolve?: boolean;
388
+ inputs: SchemaInput[];
389
+ /**
390
+ * All output components (print, bake, file download)
391
+ */
392
+ outputs: SchemaOutput[];
393
+ layout: LayoutConfig;
394
+ }
395
+ /**
396
+ * Configuration for the 3D viewer
397
+ */
398
+ export interface ViewerOptions1 {
399
+ /**
400
+ * If true, display mesh data is sent to the web preview for local rendering
401
+ */
402
+ enableLocal?: boolean;
403
+ /**
404
+ * If true, enables remote rendering via Rhino Compute
405
+ */
406
+ enableRemote?: boolean;
407
+ /**
408
+ * Background color for the 3D viewer as hex string (e.g., '#ffffff')
409
+ */
410
+ backgroundColor?: string;
411
+ }
412
+ export interface SessionState {
413
+ sessionId: string;
414
+ active: boolean;
415
+ lastUpdate: string;
416
+ mode: 'builder' | 'preview';
417
+ [k: string]: unknown | undefined;
418
+ }
419
+ export interface RuntimeValues {
420
+ timestamp: string;
421
+ values: {
422
+ [k: string]: unknown | undefined;
423
+ };
424
+ [k: string]: unknown | undefined;
425
+ }
426
+ export interface ValidationIssueMessage {
427
+ paramId: string;
428
+ /**
429
+ * warning = can still load, error = cannot load
430
+ */
431
+ severity: 'warning' | 'error';
432
+ message: string;
433
+ details?: {
434
+ expected?: string;
435
+ actual?: string;
436
+ [k: string]: unknown | undefined;
437
+ };
438
+ }
439
+ export declare const ACCEPTED_FILE_FORMATS: readonly [".3dm", ".stp", ".step", ".fbx", ".obj", ".dxf", ".stl"];
440
+ export declare function isInputLayoutItem(item: LayoutItem): item is InputNumberLayoutItem | InputTextLayoutItem | InputDropdownLayoutItem | InputCheckboxLayoutItem | InputFileLayoutItem | InputColorLayoutItem;
441
+ export declare function isOutputLayoutItem(item: LayoutItem): item is OutputTextLayoutItem | OutputNumberLayoutItem | OutputFileLayoutItem | OutputChartLayoutItem;
442
+ export declare function isLineBreakLayoutItem(item: LayoutItem): item is LineBreakLayoutItem;
443
+ export declare function isNumberWidget(item: LayoutItem): item is InputNumberLayoutItem;
444
+ export declare function isTextWidget(item: LayoutItem): item is InputTextLayoutItem;
445
+ export declare function isDropdownWidget(item: LayoutItem): item is InputDropdownLayoutItem;
446
+ export declare function isCheckboxWidget(item: LayoutItem): item is InputCheckboxLayoutItem;
447
+ export declare function isFileWidget(item: LayoutItem): item is InputFileLayoutItem;
448
+ export declare function isColorWidget(item: LayoutItem): item is InputColorLayoutItem;
449
+ export type InputLayoutItem = InputNumberLayoutItem | InputTextLayoutItem | InputDropdownLayoutItem | InputCheckboxLayoutItem | InputFileLayoutItem | InputColorLayoutItem;
450
+ export type OutputLayoutItem = OutputTextLayoutItem | OutputNumberLayoutItem | OutputFileLayoutItem | OutputChartLayoutItem;
451
+ export type SupportedTypes = string | number | boolean;
@@ -0,0 +1,48 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated from schemas/ui-schema.json.
4
+ * DO NOT MODIFY IT BY HAND. Instead, modify the source JSON Schema file,
5
+ * and run `npm run generate:ts` in the schemas directory to regenerate this file.
6
+ */
7
+ // ============================================================================
8
+ // CONSTANTS (from schema)
9
+ // ============================================================================
10
+ export const ACCEPTED_FILE_FORMATS = [
11
+ ".3dm",
12
+ ".stp",
13
+ ".step",
14
+ ".fbx",
15
+ ".obj",
16
+ ".dxf",
17
+ ".stl"
18
+ ];
19
+ // ============================================================================
20
+ // TYPE GUARDS
21
+ // ============================================================================
22
+ export function isInputLayoutItem(item) {
23
+ return item.type === 'input';
24
+ }
25
+ export function isOutputLayoutItem(item) {
26
+ return item.type === 'output';
27
+ }
28
+ export function isLineBreakLayoutItem(item) {
29
+ return item.type === 'linebreak';
30
+ }
31
+ export function isNumberWidget(item) {
32
+ return item.type === 'input' && item.widgetType === 'number';
33
+ }
34
+ export function isTextWidget(item) {
35
+ return item.type === 'input' && item.widgetType === 'text';
36
+ }
37
+ export function isDropdownWidget(item) {
38
+ return item.type === 'input' && item.widgetType === 'dropdown';
39
+ }
40
+ export function isCheckboxWidget(item) {
41
+ return item.type === 'input' && item.widgetType === 'checkbox';
42
+ }
43
+ export function isFileWidget(item) {
44
+ return item.type === 'input' && item.widgetType === 'file';
45
+ }
46
+ export function isColorWidget(item) {
47
+ return item.type === 'input' && item.widgetType === 'color';
48
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Compute throttle utility for managing async compute requests.
3
+ *
4
+ * Features:
5
+ * - Only one request in-flight at a time
6
+ * - Latest values always sent (no queue, just "latest wins")
7
+ * - AbortController support to cancel stale requests
8
+ * - Configurable timeout with automatic abort
9
+ *
10
+ * Flow:
11
+ * 1. User changes value → request sent immediately
12
+ * 2. User changes value while request in-flight → current request aborted, new one starts
13
+ * 3. Result: server never overwhelmed, always processing latest values
14
+ */
15
+ export interface ComputeThrottleOptions {
16
+ /** Timeout in milliseconds. Default: 60000 (60 seconds) */
17
+ timeout?: number;
18
+ }
19
+ export declare function createComputeThrottle<T>(computeFn: (values: T, signal: AbortSignal) => Promise<void>, options?: ComputeThrottleOptions): {
20
+ /** Trigger a compute with the given values */
21
+ trigger: (values: T) => void;
22
+ /** Whether a compute is currently in progress */
23
+ readonly isComputing: boolean;
24
+ /** Whether there are pending values waiting to be sent */
25
+ readonly hasPending: boolean;
26
+ /** Cancel any in-flight request */
27
+ cancel: () => void;
28
+ };
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Compute throttle utility for managing async compute requests.
3
+ *
4
+ * Features:
5
+ * - Only one request in-flight at a time
6
+ * - Latest values always sent (no queue, just "latest wins")
7
+ * - AbortController support to cancel stale requests
8
+ * - Configurable timeout with automatic abort
9
+ *
10
+ * Flow:
11
+ * 1. User changes value → request sent immediately
12
+ * 2. User changes value while request in-flight → current request aborted, new one starts
13
+ * 3. Result: server never overwhelmed, always processing latest values
14
+ */
15
+ export function createComputeThrottle(computeFn, options = {}) {
16
+ const { timeout = 60000 } = options;
17
+ let isComputing = $state(false);
18
+ let pendingValues = $state(null);
19
+ let currentAbortController = null;
20
+ function abortCurrent() {
21
+ if (currentAbortController) {
22
+ currentAbortController.abort();
23
+ currentAbortController = null;
24
+ }
25
+ }
26
+ async function executeCompute(values) {
27
+ // Abort any existing request
28
+ abortCurrent();
29
+ // Create new abort controller with timeout
30
+ currentAbortController = new AbortController();
31
+ const signal = currentAbortController.signal;
32
+ // Set up timeout
33
+ const timeoutId = setTimeout(() => {
34
+ if (currentAbortController) {
35
+ currentAbortController.abort(new Error(`Request timed out after ${timeout}ms`));
36
+ }
37
+ }, timeout);
38
+ isComputing = true;
39
+ try {
40
+ await computeFn(values, signal);
41
+ }
42
+ catch (err) {
43
+ // Re-throw unless it's an abort (which we handle silently for cancellation)
44
+ if (err instanceof Error && err.name === 'AbortError') {
45
+ // Check if there are pending values - if so, this was intentional cancellation
46
+ if (pendingValues === null) {
47
+ // Timeout or manual cancel without pending values - rethrow
48
+ throw err;
49
+ }
50
+ // Otherwise, silently ignore - we're about to process pending values
51
+ }
52
+ else {
53
+ throw err;
54
+ }
55
+ }
56
+ finally {
57
+ clearTimeout(timeoutId);
58
+ isComputing = false;
59
+ currentAbortController = null;
60
+ // If values changed while we were computing, send the latest
61
+ if (pendingValues !== null) {
62
+ const next = pendingValues;
63
+ pendingValues = null;
64
+ executeCompute(next);
65
+ }
66
+ }
67
+ }
68
+ function trigger(values) {
69
+ if (isComputing) {
70
+ // Store latest values and abort current request
71
+ pendingValues = values;
72
+ abortCurrent();
73
+ }
74
+ else {
75
+ // No request in-flight, send immediately
76
+ executeCompute(values);
77
+ }
78
+ }
79
+ function cancel() {
80
+ pendingValues = null;
81
+ abortCurrent();
82
+ }
83
+ return {
84
+ trigger,
85
+ get isComputing() {
86
+ return isComputing;
87
+ },
88
+ get hasPending() {
89
+ return pendingValues !== null;
90
+ },
91
+ cancel
92
+ };
93
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Debounce utility - delays function execution until after a specified wait time
3
+ * has elapsed since the last time it was invoked.
4
+ *
5
+ * Use this for text inputs, search boxes, etc. where you want to wait for user
6
+ * to finish typing before executing.
7
+ *
8
+ * For sliders, use throttle() instead to get immediate feedback with rate limiting.
9
+ *
10
+ * @param func The function to debounce
11
+ * @param wait The delay in milliseconds
12
+ * @returns A debounced version of the function
13
+ */
14
+ export declare function debounce<T extends (...args: any[]) => any>(func: T, wait: number): (...args: Parameters<T>) => void;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Debounce utility - delays function execution until after a specified wait time
3
+ * has elapsed since the last time it was invoked.
4
+ *
5
+ * Use this for text inputs, search boxes, etc. where you want to wait for user
6
+ * to finish typing before executing.
7
+ *
8
+ * For sliders, use throttle() instead to get immediate feedback with rate limiting.
9
+ *
10
+ * @param func The function to debounce
11
+ * @param wait The delay in milliseconds
12
+ * @returns A debounced version of the function
13
+ */
14
+ export function debounce(func, wait) {
15
+ let timeout = null;
16
+ return function (...args) {
17
+ if (timeout !== null) {
18
+ clearTimeout(timeout);
19
+ }
20
+ timeout = setTimeout(() => {
21
+ func(...args);
22
+ timeout = null;
23
+ }, wait);
24
+ };
25
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Wrapper utilities for file downloads from Grasshopper outputs
3
+ * Uses the core package implementation for file handling
4
+ */
5
+ import { type FileData } from 'selva-compute';
6
+ /**
7
+ * Download file(s) from Grasshopper outputs
8
+ * Single files are downloaded directly, multiple files are packaged as ZIP
9
+ */
10
+ export declare function downloadFiles(fileData: FileData | FileData[], fileName?: string): Promise<void>;
11
+ /**
12
+ * Check if data is FileData
13
+ */
14
+ export declare function isFileData(data: unknown): data is FileData;
15
+ /**
16
+ * Check if data is FileData array
17
+ */
18
+ export declare function isFileDataArray(data: unknown): data is FileData[];
19
+ /**
20
+ * Format file size for display
21
+ */
22
+ export declare function formatFileSize(bytes: number): string;
23
+ /**
24
+ * Get approximate file size from base64 string
25
+ */
26
+ export declare function getBase64FileSize(base64: string): number;