@datagrok/helm 2.13.8 → 3.0.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 (360) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/css/helm.css +40 -0
  3. package/dist/137.js +2 -0
  4. package/dist/137.js.map +1 -0
  5. package/dist/323.js +2 -0
  6. package/dist/323.js.map +1 -0
  7. package/dist/657.js +2 -0
  8. package/dist/657.js.map +1 -0
  9. package/dist/782.js +2 -0
  10. package/dist/782.js.map +1 -0
  11. package/dist/884.js +2 -0
  12. package/dist/884.js.map +1 -0
  13. package/dist/94.js +2 -0
  14. package/dist/94.js.map +1 -0
  15. package/dist/libraries_bio_src_monomer-works_seq-to-molfile-worker_ts.js +16420 -0
  16. package/dist/libraries_bio_src_monomer-works_seq-to-molfile-worker_ts.js.map +1 -0
  17. package/dist/package-test.js +1 -1
  18. package/dist/package-test.js.map +1 -1
  19. package/dist/package.js +1 -1
  20. package/dist/package.js.map +1 -1
  21. package/dist/vendors-HELM_node_modules_lru-cache_dist_esm_index_js.js +1560 -0
  22. package/dist/vendors-HELM_node_modules_lru-cache_dist_esm_index_js.js.map +1 -0
  23. package/files/samples/helm-showcase.csv +56 -0
  24. package/package.json +8 -12
  25. package/src/helm-helper.ts +134 -410
  26. package/src/package-api.ts +14 -11
  27. package/src/package-test.ts +0 -2
  28. package/src/package-utils.ts +8 -298
  29. package/src/package.g.ts +2 -8
  30. package/src/package.ts +11 -31
  31. package/src/tests/helm-activity-cliffs.ts +2 -2
  32. package/src/tests/helm-input-tests.ts +83 -0
  33. package/src/tests/parse-helm-tests.ts +7 -57
  34. package/src/tests/properties-widget-tests.ts +21 -11
  35. package/src/utils/helm-grid-cell-renderer.ts +141 -151
  36. package/src/utils/index.ts +3 -7
  37. package/src/widgets/helm-input.ts +42 -12
  38. package/src/widgets/properties-widget.ts +18 -11
  39. package/webpack.config.js +1 -12
  40. package/helm/JSDraw/Pistoia.HELM-uncompressed.js +0 -9694
  41. package/helm/JSDraw/ReadMe.txt +0 -8
  42. package/helm/JSDraw/Scilligence.JSDraw2.Lite-uncompressed.js +0 -31126
  43. package/helm/dojo/package.ts +0 -41
  44. package/helm/dojo/types.ts +0 -12
  45. package/src/helm-web-editor.ts +0 -68
  46. package/src/tests/get-monomer-tests.ts +0 -214
  47. package/src/tests/helm-service-tests.ts +0 -98
  48. package/src/types/dojo.ts +0 -3
  49. package/src/types/index.ts +0 -5
  50. package/src/utils/get-monomer.ts +0 -90
  51. package/src/utils/helm-service.ts +0 -166
  52. package/test-console-output-1.log +0 -919
  53. package/test-record-1.mp4 +0 -0
  54. package/vendor/dojo-1.10.10/dijit/BackgroundIframe.js +0 -63
  55. package/vendor/dojo-1.10.10/dijit/BackgroundIframe.js.uncompressed.js +0 -116
  56. package/vendor/dojo-1.10.10/dijit/Destroyable.js +0 -35
  57. package/vendor/dojo-1.10.10/dijit/Destroyable.js.uncompressed.js +0 -83
  58. package/vendor/dojo-1.10.10/dijit/Tooltip.js +0 -240
  59. package/vendor/dojo-1.10.10/dijit/Tooltip.js.uncompressed.js +0 -612
  60. package/vendor/dojo-1.10.10/dijit/Viewport.js +0 -44
  61. package/vendor/dojo-1.10.10/dijit/Viewport.js.uncompressed.js +0 -87
  62. package/vendor/dojo-1.10.10/dijit/WidgetSet.js +0 -76
  63. package/vendor/dojo-1.10.10/dijit/WidgetSet.js.uncompressed.js +0 -247
  64. package/vendor/dojo-1.10.10/dijit/_AttachMixin.js +0 -94
  65. package/vendor/dojo-1.10.10/dijit/_AttachMixin.js.uncompressed.js +0 -238
  66. package/vendor/dojo-1.10.10/dijit/_Contained.js +0 -17
  67. package/vendor/dojo-1.10.10/dijit/_Contained.js.uncompressed.js +0 -56
  68. package/vendor/dojo-1.10.10/dijit/_Container.js +0 -47
  69. package/vendor/dojo-1.10.10/dijit/_Container.js.uncompressed.js +0 -108
  70. package/vendor/dojo-1.10.10/dijit/_CssStateMixin.js +0 -198
  71. package/vendor/dojo-1.10.10/dijit/_CssStateMixin.js.uncompressed.js +0 -372
  72. package/vendor/dojo-1.10.10/dijit/_FocusMixin.js +0 -11
  73. package/vendor/dojo-1.10.10/dijit/_FocusMixin.js.uncompressed.js +0 -66
  74. package/vendor/dojo-1.10.10/dijit/_HasDropDown.js +0 -188
  75. package/vendor/dojo-1.10.10/dijit/_HasDropDown.js.uncompressed.js +0 -472
  76. package/vendor/dojo-1.10.10/dijit/_OnDijitClickMixin.js +0 -8
  77. package/vendor/dojo-1.10.10/dijit/_OnDijitClickMixin.js.uncompressed.js +0 -31
  78. package/vendor/dojo-1.10.10/dijit/_TemplatedMixin.js +0 -90
  79. package/vendor/dojo-1.10.10/dijit/_TemplatedMixin.js.uncompressed.js +0 -205
  80. package/vendor/dojo-1.10.10/dijit/_Widget.js +0 -66
  81. package/vendor/dojo-1.10.10/dijit/_Widget.js.uncompressed.js +0 -352
  82. package/vendor/dojo-1.10.10/dijit/_WidgetBase.js +0 -353
  83. package/vendor/dojo-1.10.10/dijit/_WidgetBase.js.uncompressed.js +0 -1200
  84. package/vendor/dojo-1.10.10/dijit/_base/focus.js +0 -68
  85. package/vendor/dojo-1.10.10/dijit/_base/focus.js.uncompressed.js +0 -207
  86. package/vendor/dojo-1.10.10/dijit/_base/manager.js +0 -10
  87. package/vendor/dojo-1.10.10/dijit/_base/manager.js.uncompressed.js +0 -35
  88. package/vendor/dojo-1.10.10/dijit/_base/place.js +0 -52
  89. package/vendor/dojo-1.10.10/dijit/_base/place.js.uncompressed.js +0 -131
  90. package/vendor/dojo-1.10.10/dijit/_base/popup.js +0 -23
  91. package/vendor/dojo-1.10.10/dijit/_base/popup.js.uncompressed.js +0 -58
  92. package/vendor/dojo-1.10.10/dijit/_base/scroll.js +0 -6
  93. package/vendor/dojo-1.10.10/dijit/_base/scroll.js.uncompressed.js +0 -22
  94. package/vendor/dojo-1.10.10/dijit/_base/sniff.js +0 -3
  95. package/vendor/dojo-1.10.10/dijit/_base/sniff.js.uncompressed.js +0 -12
  96. package/vendor/dojo-1.10.10/dijit/_base/typematic.js +0 -3
  97. package/vendor/dojo-1.10.10/dijit/_base/typematic.js.uncompressed.js +0 -10
  98. package/vendor/dojo-1.10.10/dijit/_base/wai.js +0 -32
  99. package/vendor/dojo-1.10.10/dijit/_base/wai.js.uncompressed.js +0 -109
  100. package/vendor/dojo-1.10.10/dijit/_base/window.js +0 -6
  101. package/vendor/dojo-1.10.10/dijit/_base/window.js.uncompressed.js +0 -18
  102. package/vendor/dojo-1.10.10/dijit/_base.js +0 -4
  103. package/vendor/dojo-1.10.10/dijit/_base.js.uncompressed.js +0 -27
  104. package/vendor/dojo-1.10.10/dijit/a11y.js +0 -109
  105. package/vendor/dojo-1.10.10/dijit/a11y.js.uncompressed.js +0 -191
  106. package/vendor/dojo-1.10.10/dijit/a11yclick.js +0 -66
  107. package/vendor/dojo-1.10.10/dijit/a11yclick.js.uncompressed.js +0 -139
  108. package/vendor/dojo-1.10.10/dijit/focus.js +0 -188
  109. package/vendor/dojo-1.10.10/dijit/focus.js.uncompressed.js +0 -371
  110. package/vendor/dojo-1.10.10/dijit/form/Button.js +0 -49
  111. package/vendor/dojo-1.10.10/dijit/form/Button.js.uncompressed.js +0 -130
  112. package/vendor/dojo-1.10.10/dijit/form/ComboBox.js +0 -4
  113. package/vendor/dojo-1.10.10/dijit/form/ComboBox.js.uncompressed.js +0 -27
  114. package/vendor/dojo-1.10.10/dijit/form/ComboButton.js +0 -21
  115. package/vendor/dojo-1.10.10/dijit/form/ComboButton.js.uncompressed.js +0 -86
  116. package/vendor/dojo-1.10.10/dijit/form/DropDownButton.js +0 -38
  117. package/vendor/dojo-1.10.10/dijit/form/DropDownButton.js.uncompressed.js +0 -102
  118. package/vendor/dojo-1.10.10/dijit/form/ToggleButton.js +0 -7
  119. package/vendor/dojo-1.10.10/dijit/form/ToggleButton.js.uncompressed.js +0 -26
  120. package/vendor/dojo-1.10.10/dijit/form/_ButtonMixin.js +0 -50
  121. package/vendor/dojo-1.10.10/dijit/form/_ButtonMixin.js.uncompressed.js +0 -116
  122. package/vendor/dojo-1.10.10/dijit/form/_FormValueMixin.js +0 -26
  123. package/vendor/dojo-1.10.10/dijit/form/_FormValueMixin.js.uncompressed.js +0 -81
  124. package/vendor/dojo-1.10.10/dijit/form/_FormValueWidget.js +0 -24
  125. package/vendor/dojo-1.10.10/dijit/form/_FormValueWidget.js.uncompressed.js +0 -51
  126. package/vendor/dojo-1.10.10/dijit/form/_FormWidget.js +0 -22
  127. package/vendor/dojo-1.10.10/dijit/form/_FormWidget.js.uncompressed.js +0 -67
  128. package/vendor/dojo-1.10.10/dijit/form/_FormWidgetMixin.js +0 -111
  129. package/vendor/dojo-1.10.10/dijit/form/_FormWidgetMixin.js.uncompressed.js +0 -254
  130. package/vendor/dojo-1.10.10/dijit/form/_ToggleButtonMixin.js +0 -32
  131. package/vendor/dojo-1.10.10/dijit/form/_ToggleButtonMixin.js.uncompressed.js +0 -69
  132. package/vendor/dojo-1.10.10/dijit/hccss.js +0 -9
  133. package/vendor/dojo-1.10.10/dijit/hccss.js.uncompressed.js +0 -21
  134. package/vendor/dojo-1.10.10/dijit/layout/AccordionContainer.js +0 -215
  135. package/vendor/dojo-1.10.10/dijit/layout/AccordionContainer.js.uncompressed.js +0 -550
  136. package/vendor/dojo-1.10.10/dijit/layout/AccordionPane.js +0 -7
  137. package/vendor/dojo-1.10.10/dijit/layout/AccordionPane.js.uncompressed.js +0 -25
  138. package/vendor/dojo-1.10.10/dijit/layout/ContentPane.js +0 -235
  139. package/vendor/dojo-1.10.10/dijit/layout/ContentPane.js.uncompressed.js +0 -653
  140. package/vendor/dojo-1.10.10/dijit/layout/StackContainer.js +0 -171
  141. package/vendor/dojo-1.10.10/dijit/layout/StackContainer.js.uncompressed.js +0 -411
  142. package/vendor/dojo-1.10.10/dijit/layout/StackController.js +0 -194
  143. package/vendor/dojo-1.10.10/dijit/layout/StackController.js.uncompressed.js +0 -410
  144. package/vendor/dojo-1.10.10/dijit/layout/_ContentPaneResizeMixin.js +0 -99
  145. package/vendor/dojo-1.10.10/dijit/layout/_ContentPaneResizeMixin.js.uncompressed.js +0 -236
  146. package/vendor/dojo-1.10.10/dijit/layout/_LayoutWidget.js +0 -47
  147. package/vendor/dojo-1.10.10/dijit/layout/_LayoutWidget.js.uncompressed.js +0 -190
  148. package/vendor/dojo-1.10.10/dijit/layout/utils.js +0 -77
  149. package/vendor/dojo-1.10.10/dijit/layout/utils.js.uncompressed.js +0 -151
  150. package/vendor/dojo-1.10.10/dijit/main.js +0 -4
  151. package/vendor/dojo-1.10.10/dijit/main.js.uncompressed.js +0 -16
  152. package/vendor/dojo-1.10.10/dijit/nls/dijit-all_en-us.js +0 -2
  153. package/vendor/dojo-1.10.10/dijit/nls/dijit-all_en-us.js.uncompressed.js +0 -21
  154. package/vendor/dojo-1.10.10/dijit/nls/loading.js +0 -2
  155. package/vendor/dojo-1.10.10/dijit/nls/loading.js.uncompressed.js +0 -47
  156. package/vendor/dojo-1.10.10/dijit/place.js +0 -142
  157. package/vendor/dojo-1.10.10/dijit/place.js.uncompressed.js +0 -407
  158. package/vendor/dojo-1.10.10/dijit/popup.js +0 -162
  159. package/vendor/dojo-1.10.10/dijit/popup.js.uncompressed.js +0 -441
  160. package/vendor/dojo-1.10.10/dijit/registry.js +0 -79
  161. package/vendor/dojo-1.10.10/dijit/registry.js.uncompressed.js +0 -159
  162. package/vendor/dojo-1.10.10/dijit/selection.js +0 -364
  163. package/vendor/dojo-1.10.10/dijit/selection.js.uncompressed.js +0 -525
  164. package/vendor/dojo-1.10.10/dijit/typematic.js +0 -96
  165. package/vendor/dojo-1.10.10/dijit/typematic.js.uncompressed.js +0 -211
  166. package/vendor/dojo-1.10.10/dojo/NodeList-manipulate.js +0 -195
  167. package/vendor/dojo-1.10.10/dojo/NodeList-manipulate.js.uncompressed.js +0 -761
  168. package/vendor/dojo-1.10.10/dojo/Stateful.js +0 -90
  169. package/vendor/dojo-1.10.10/dojo/Stateful.js.uncompressed.js +0 -218
  170. package/vendor/dojo-1.10.10/dojo/_base/url.js +0 -87
  171. package/vendor/dojo-1.10.10/dojo/_base/url.js.uncompressed.js +0 -109
  172. package/vendor/dojo-1.10.10/dojo/cache.js +0 -9
  173. package/vendor/dojo-1.10.10/dojo/cache.js.uncompressed.js +0 -7
  174. package/vendor/dojo-1.10.10/dojo/colors.js +0 -74
  175. package/vendor/dojo-1.10.10/dojo/colors.js.uncompressed.js +0 -232
  176. package/vendor/dojo-1.10.10/dojo/cookie.js +0 -48
  177. package/vendor/dojo-1.10.10/dojo/cookie.js.uncompressed.js +0 -98
  178. package/vendor/dojo-1.10.10/dojo/date/stamp.js +0 -82
  179. package/vendor/dojo-1.10.10/dojo/date/stamp.js.uncompressed.js +0 -144
  180. package/vendor/dojo-1.10.10/dojo/dojo.js +0 -7
  181. package/vendor/dojo-1.10.10/dojo/dojo.js.uncompressed.js +0 -18680
  182. package/vendor/dojo-1.10.10/dojo/fx/Toggler.js +0 -27
  183. package/vendor/dojo-1.10.10/dojo/fx/Toggler.js.uncompressed.js +0 -101
  184. package/vendor/dojo-1.10.10/dojo/fx/easing.js +0 -165
  185. package/vendor/dojo-1.10.10/dojo/fx/easing.js.uncompressed.js +0 -276
  186. package/vendor/dojo-1.10.10/dojo/fx.js +0 -271
  187. package/vendor/dojo-1.10.10/dojo/fx.js.uncompressed.js +0 -443
  188. package/vendor/dojo-1.10.10/dojo/hccss.js +0 -26
  189. package/vendor/dojo-1.10.10/dojo/hccss.js.uncompressed.js +0 -52
  190. package/vendor/dojo-1.10.10/dojo/html.js +0 -161
  191. package/vendor/dojo-1.10.10/dojo/html.js.uncompressed.js +0 -370
  192. package/vendor/dojo-1.10.10/dojo/io/iframe.js +0 -71
  193. package/vendor/dojo-1.10.10/dojo/io/iframe.js.uncompressed.js +0 -190
  194. package/vendor/dojo-1.10.10/dojo/io/script.js +0 -112
  195. package/vendor/dojo-1.10.10/dojo/io/script.js.uncompressed.js +0 -280
  196. package/vendor/dojo-1.10.10/dojo/parser.js +0 -437
  197. package/vendor/dojo-1.10.10/dojo/parser.js.uncompressed.js +0 -915
  198. package/vendor/dojo-1.10.10/dojo/promise/all.js +0 -59
  199. package/vendor/dojo-1.10.10/dojo/promise/all.js.uncompressed.js +0 -77
  200. package/vendor/dojo-1.10.10/dojo/regexp.js +0 -32
  201. package/vendor/dojo-1.10.10/dojo/regexp.js.uncompressed.js +0 -70
  202. package/vendor/dojo-1.10.10/dojo/request/iframe.js +0 -291
  203. package/vendor/dojo-1.10.10/dojo/request/iframe.js.uncompressed.js +0 -438
  204. package/vendor/dojo-1.10.10/dojo/request/script.js +0 -129
  205. package/vendor/dojo-1.10.10/dojo/request/script.js.uncompressed.js +0 -237
  206. package/vendor/dojo-1.10.10/dojo/require.js +0 -11
  207. package/vendor/dojo-1.10.10/dojo/require.js.uncompressed.js +0 -7
  208. package/vendor/dojo-1.10.10/dojo/resources/blank.gif +0 -0
  209. package/vendor/dojo-1.10.10/dojo/string.js +0 -67
  210. package/vendor/dojo-1.10.10/dojo/string.js.uncompressed.js +0 -181
  211. package/vendor/dojo-1.10.10/dojo/touch.js +0 -191
  212. package/vendor/dojo-1.10.10/dojo/touch.js.uncompressed.js +0 -468
  213. package/vendor/dojo-1.10.10/dojo/uacss.js +0 -36
  214. package/vendor/dojo-1.10.10/dojo/uacss.js.uncompressed.js +0 -85
  215. package/vendor/dojo-1.10.10/dojo/window.js +0 -141
  216. package/vendor/dojo-1.10.10/dojo/window.js.uncompressed.js +0 -241
  217. package/vendor/dojo-1.10.10/dojox/charting/Chart.js +0 -626
  218. package/vendor/dojo-1.10.10/dojox/charting/Chart.js.uncompressed.js +0 -1220
  219. package/vendor/dojo-1.10.10/dojox/charting/Chart2D.js +0 -5
  220. package/vendor/dojo-1.10.10/dojox/charting/Chart2D.js.uncompressed.js +0 -16
  221. package/vendor/dojo-1.10.10/dojox/charting/Element.js +0 -247
  222. package/vendor/dojo-1.10.10/dojox/charting/Element.js.uncompressed.js +0 -402
  223. package/vendor/dojo-1.10.10/dojox/charting/Series.js +0 -24
  224. package/vendor/dojo-1.10.10/dojox/charting/Series.js.uncompressed.js +0 -58
  225. package/vendor/dojo-1.10.10/dojox/charting/SimpleTheme.js +0 -191
  226. package/vendor/dojo-1.10.10/dojox/charting/SimpleTheme.js.uncompressed.js +0 -577
  227. package/vendor/dojo-1.10.10/dojox/charting/Theme.js +0 -42
  228. package/vendor/dojo-1.10.10/dojox/charting/Theme.js.uncompressed.js +0 -120
  229. package/vendor/dojo-1.10.10/dojox/charting/action2d/Base.js +0 -11
  230. package/vendor/dojo-1.10.10/dojox/charting/action2d/Base.js.uncompressed.js +0 -36
  231. package/vendor/dojo-1.10.10/dojox/charting/action2d/Highlight.js +0 -77
  232. package/vendor/dojo-1.10.10/dojox/charting/action2d/Highlight.js.uncompressed.js +0 -144
  233. package/vendor/dojo-1.10.10/dojox/charting/action2d/Magnify.js +0 -58
  234. package/vendor/dojo-1.10.10/dojox/charting/action2d/Magnify.js.uncompressed.js +0 -123
  235. package/vendor/dojo-1.10.10/dojox/charting/action2d/MoveSlice.js +0 -54
  236. package/vendor/dojo-1.10.10/dojox/charting/action2d/MoveSlice.js.uncompressed.js +0 -124
  237. package/vendor/dojo-1.10.10/dojox/charting/action2d/PlotAction.js +0 -28
  238. package/vendor/dojo-1.10.10/dojox/charting/action2d/PlotAction.js.uncompressed.js +0 -74
  239. package/vendor/dojo-1.10.10/dojox/charting/action2d/Tooltip.js +0 -116
  240. package/vendor/dojo-1.10.10/dojox/charting/action2d/Tooltip.js.uncompressed.js +0 -178
  241. package/vendor/dojo-1.10.10/dojox/charting/axis2d/Base.js +0 -24
  242. package/vendor/dojo-1.10.10/dojox/charting/axis2d/Base.js.uncompressed.js +0 -83
  243. package/vendor/dojo-1.10.10/dojox/charting/axis2d/Default.js +0 -557
  244. package/vendor/dojo-1.10.10/dojox/charting/axis2d/Default.js.uncompressed.js +0 -980
  245. package/vendor/dojo-1.10.10/dojox/charting/axis2d/Invisible.js +0 -65
  246. package/vendor/dojo-1.10.10/dojox/charting/axis2d/Invisible.js.uncompressed.js +0 -224
  247. package/vendor/dojo-1.10.10/dojox/charting/axis2d/common.js +0 -91
  248. package/vendor/dojo-1.10.10/dojox/charting/axis2d/common.js.uncompressed.js +0 -164
  249. package/vendor/dojo-1.10.10/dojox/charting/plot2d/Areas.js +0 -7
  250. package/vendor/dojo-1.10.10/dojox/charting/plot2d/Areas.js.uncompressed.js +0 -14
  251. package/vendor/dojo-1.10.10/dojox/charting/plot2d/Bars.js +0 -168
  252. package/vendor/dojo-1.10.10/dojox/charting/plot2d/Bars.js.uncompressed.js +0 -311
  253. package/vendor/dojo-1.10.10/dojox/charting/plot2d/Base.js +0 -61
  254. package/vendor/dojo-1.10.10/dojox/charting/plot2d/Base.js.uncompressed.js +0 -161
  255. package/vendor/dojo-1.10.10/dojox/charting/plot2d/Bubble.js +0 -141
  256. package/vendor/dojo-1.10.10/dojox/charting/plot2d/Bubble.js.uncompressed.js +0 -242
  257. package/vendor/dojo-1.10.10/dojox/charting/plot2d/Candlesticks.js +0 -126
  258. package/vendor/dojo-1.10.10/dojox/charting/plot2d/Candlesticks.js.uncompressed.js +0 -243
  259. package/vendor/dojo-1.10.10/dojox/charting/plot2d/CartesianBase.js +0 -108
  260. package/vendor/dojo-1.10.10/dojox/charting/plot2d/CartesianBase.js.uncompressed.js +0 -290
  261. package/vendor/dojo-1.10.10/dojox/charting/plot2d/ClusteredBars.js +0 -13
  262. package/vendor/dojo-1.10.10/dojox/charting/plot2d/ClusteredBars.js.uncompressed.js +0 -14
  263. package/vendor/dojo-1.10.10/dojox/charting/plot2d/ClusteredColumns.js +0 -13
  264. package/vendor/dojo-1.10.10/dojox/charting/plot2d/ClusteredColumns.js.uncompressed.js +0 -14
  265. package/vendor/dojo-1.10.10/dojox/charting/plot2d/Columns.js +0 -153
  266. package/vendor/dojo-1.10.10/dojox/charting/plot2d/Columns.js.uncompressed.js +0 -249
  267. package/vendor/dojo-1.10.10/dojox/charting/plot2d/Default.js +0 -253
  268. package/vendor/dojo-1.10.10/dojox/charting/plot2d/Default.js.uncompressed.js +0 -472
  269. package/vendor/dojo-1.10.10/dojox/charting/plot2d/Grid.js +0 -182
  270. package/vendor/dojo-1.10.10/dojox/charting/plot2d/Grid.js.uncompressed.js +0 -356
  271. package/vendor/dojo-1.10.10/dojox/charting/plot2d/Lines.js +0 -6
  272. package/vendor/dojo-1.10.10/dojox/charting/plot2d/Lines.js.uncompressed.js +0 -12
  273. package/vendor/dojo-1.10.10/dojox/charting/plot2d/Markers.js +0 -6
  274. package/vendor/dojo-1.10.10/dojox/charting/plot2d/Markers.js.uncompressed.js +0 -12
  275. package/vendor/dojo-1.10.10/dojox/charting/plot2d/MarkersOnly.js +0 -7
  276. package/vendor/dojo-1.10.10/dojox/charting/plot2d/MarkersOnly.js.uncompressed.js +0 -13
  277. package/vendor/dojo-1.10.10/dojox/charting/plot2d/OHLC.js +0 -110
  278. package/vendor/dojo-1.10.10/dojox/charting/plot2d/OHLC.js.uncompressed.js +0 -208
  279. package/vendor/dojo-1.10.10/dojox/charting/plot2d/Pie.js +0 -303
  280. package/vendor/dojo-1.10.10/dojox/charting/plot2d/Pie.js.uncompressed.js +0 -547
  281. package/vendor/dojo-1.10.10/dojox/charting/plot2d/Scatter.js +0 -134
  282. package/vendor/dojo-1.10.10/dojox/charting/plot2d/Scatter.js.uncompressed.js +0 -207
  283. package/vendor/dojo-1.10.10/dojox/charting/plot2d/Spider.js +0 -299
  284. package/vendor/dojo-1.10.10/dojox/charting/plot2d/Spider.js.uncompressed.js +0 -537
  285. package/vendor/dojo-1.10.10/dojox/charting/plot2d/Stacked.js +0 -24
  286. package/vendor/dojo-1.10.10/dojox/charting/plot2d/Stacked.js.uncompressed.js +0 -44
  287. package/vendor/dojo-1.10.10/dojox/charting/plot2d/StackedAreas.js +0 -7
  288. package/vendor/dojo-1.10.10/dojox/charting/plot2d/StackedAreas.js.uncompressed.js +0 -14
  289. package/vendor/dojo-1.10.10/dojox/charting/plot2d/StackedBars.js +0 -22
  290. package/vendor/dojo-1.10.10/dojox/charting/plot2d/StackedBars.js.uncompressed.js +0 -33
  291. package/vendor/dojo-1.10.10/dojox/charting/plot2d/StackedColumns.js +0 -20
  292. package/vendor/dojo-1.10.10/dojox/charting/plot2d/StackedColumns.js.uncompressed.js +0 -31
  293. package/vendor/dojo-1.10.10/dojox/charting/plot2d/StackedLines.js +0 -6
  294. package/vendor/dojo-1.10.10/dojox/charting/plot2d/StackedLines.js.uncompressed.js +0 -12
  295. package/vendor/dojo-1.10.10/dojox/charting/plot2d/_PlotEvents.js +0 -68
  296. package/vendor/dojo-1.10.10/dojox/charting/plot2d/_PlotEvents.js.uncompressed.js +0 -120
  297. package/vendor/dojo-1.10.10/dojox/charting/plot2d/common.js +0 -209
  298. package/vendor/dojo-1.10.10/dojox/charting/plot2d/common.js.uncompressed.js +0 -214
  299. package/vendor/dojo-1.10.10/dojox/charting/plot2d/commonStacked.js +0 -76
  300. package/vendor/dojo-1.10.10/dojox/charting/plot2d/commonStacked.js.uncompressed.js +0 -77
  301. package/vendor/dojo-1.10.10/dojox/charting/scaler/common.js +0 -59
  302. package/vendor/dojo-1.10.10/dojox/charting/scaler/common.js.uncompressed.js +0 -70
  303. package/vendor/dojo-1.10.10/dojox/charting/scaler/linear.js +0 -220
  304. package/vendor/dojo-1.10.10/dojox/charting/scaler/linear.js.uncompressed.js +0 -262
  305. package/vendor/dojo-1.10.10/dojox/charting/scaler/primitive.js +0 -23
  306. package/vendor/dojo-1.10.10/dojox/charting/scaler/primitive.js.uncompressed.js +0 -36
  307. package/vendor/dojo-1.10.10/dojox/charting/themes/Claro.js +0 -39
  308. package/vendor/dojo-1.10.10/dojox/charting/themes/Claro.js.uncompressed.js +0 -106
  309. package/vendor/dojo-1.10.10/dojox/charting/themes/Wetland.js +0 -5
  310. package/vendor/dojo-1.10.10/dojox/charting/themes/Wetland.js.uncompressed.js +0 -12
  311. package/vendor/dojo-1.10.10/dojox/charting/themes/common.js +0 -4
  312. package/vendor/dojo-1.10.10/dojox/charting/themes/common.js.uncompressed.js +0 -3
  313. package/vendor/dojo-1.10.10/dojox/charting/widget/Legend.js +0 -102
  314. package/vendor/dojo-1.10.10/dojox/charting/widget/Legend.js.uncompressed.js +0 -165
  315. package/vendor/dojo-1.10.10/dojox/color/Palette.js +0 -163
  316. package/vendor/dojo-1.10.10/dojox/color/Palette.js.uncompressed.js +0 -460
  317. package/vendor/dojo-1.10.10/dojox/color/_base.js +0 -174
  318. package/vendor/dojo-1.10.10/dojox/color/_base.js.uncompressed.js +0 -196
  319. package/vendor/dojo-1.10.10/dojox/gfx/_base.js +0 -253
  320. package/vendor/dojo-1.10.10/dojox/gfx/_base.js.uncompressed.js +0 -1024
  321. package/vendor/dojo-1.10.10/dojox/gfx/fx.js +0 -297
  322. package/vendor/dojo-1.10.10/dojox/gfx/fx.js.uncompressed.js +0 -350
  323. package/vendor/dojo-1.10.10/dojox/gfx/gradutils.js +0 -63
  324. package/vendor/dojo-1.10.10/dojox/gfx/gradutils.js.uncompressed.js +0 -91
  325. package/vendor/dojo-1.10.10/dojox/gfx/matrix.js +0 -170
  326. package/vendor/dojo-1.10.10/dojox/gfx/matrix.js.uncompressed.js +0 -501
  327. package/vendor/dojo-1.10.10/dojox/gfx/path.js +0 -319
  328. package/vendor/dojo-1.10.10/dojox/gfx/path.js.uncompressed.js +0 -478
  329. package/vendor/dojo-1.10.10/dojox/gfx/shape.js +0 -459
  330. package/vendor/dojo-1.10.10/dojox/gfx/shape.js.uncompressed.js +0 -1091
  331. package/vendor/dojo-1.10.10/dojox/gfx/svg.js +0 -662
  332. package/vendor/dojo-1.10.10/dojox/gfx/svg.js.uncompressed.js +0 -1023
  333. package/vendor/dojo-1.10.10/dojox/gfx/utils.js +0 -199
  334. package/vendor/dojo-1.10.10/dojox/gfx/utils.js.uncompressed.js +0 -322
  335. package/vendor/dojo-1.10.10/dojox/gfx.js +0 -2
  336. package/vendor/dojo-1.10.10/dojox/gfx.js.uncompressed.js +0 -1136
  337. package/vendor/dojo-1.10.10/dojox/lang/functional/array.js +0 -151
  338. package/vendor/dojo-1.10.10/dojox/lang/functional/array.js.uncompressed.js +0 -169
  339. package/vendor/dojo-1.10.10/dojox/lang/functional/fold.js +0 -93
  340. package/vendor/dojo-1.10.10/dojox/lang/functional/fold.js.uncompressed.js +0 -125
  341. package/vendor/dojo-1.10.10/dojox/lang/functional/lambda.js +0 -81
  342. package/vendor/dojo-1.10.10/dojox/lang/functional/lambda.js.uncompressed.js +0 -132
  343. package/vendor/dojo-1.10.10/dojox/lang/functional/object.js +0 -54
  344. package/vendor/dojo-1.10.10/dojox/lang/functional/object.js.uncompressed.js +0 -78
  345. package/vendor/dojo-1.10.10/dojox/lang/functional/reversed.js +0 -61
  346. package/vendor/dojo-1.10.10/dojox/lang/functional/reversed.js.uncompressed.js +0 -77
  347. package/vendor/dojo-1.10.10/dojox/lang/functional/scan.js +0 -87
  348. package/vendor/dojo-1.10.10/dojox/lang/functional/scan.js.uncompressed.js +0 -107
  349. package/vendor/dojo-1.10.10/dojox/lang/functional.js +0 -4
  350. package/vendor/dojo-1.10.10/dojox/lang/functional.js.uncompressed.js +0 -3
  351. package/vendor/dojo-1.10.10/dojox/lang/utils.js +0 -86
  352. package/vendor/dojo-1.10.10/dojox/lang/utils.js.uncompressed.js +0 -121
  353. package/vendor/dojo-1.10.10/dojox/main.js +0 -4
  354. package/vendor/dojo-1.10.10/dojox/main.js.uncompressed.js +0 -14
  355. package/vendor/dojo-1.10.10/dojox/storage/LocalStorageProvider.js +0 -112
  356. package/vendor/dojo-1.10.10/dojox/storage/LocalStorageProvider.js.uncompressed.js +0 -208
  357. package/vendor/dojo-1.10.10/dojox/storage/Provider.js +0 -62
  358. package/vendor/dojo-1.10.10/dojox/storage/Provider.js.uncompressed.js +0 -344
  359. package/vendor/dojo-1.10.10/dojox/storage/manager.js +0 -110
  360. package/vendor/dojo-1.10.10/dojox/storage/manager.js.uncompressed.js +0 -263
@@ -1,56 +1,76 @@
1
- import * as grok from 'datagrok-api/grok';
2
- import * as ui from 'datagrok-api/ui';
3
- import * as DG from 'datagrok-api/dg';
4
-
5
- import $ from 'cash-dom';
6
-
7
1
  /* eslint-disable max-len */
8
2
  import {
9
- App, Point, HelmType, IHelmBio, HelmAtom, HelmBond, HelmMol, GetMonomerFunc, GetMonomerResType,
10
- MonomerExplorer, TabDescType, MonomersFuncs, MonomerSetType, ISeqMonomer, PolymerType, MonomerType,
11
- DojoType, JSDraw2ModuleType, IHelmEditorOptions, IHelmDrawOptions,
12
- Editor,
13
- IBio,
3
+ App, Point, HelmAtom, HelmMol, MonomersFuncs,
4
+ IHelmEditorOptions,
14
5
  } from '@datagrok-libraries/bio/src/helm/types';
15
- import {HelmTabKeys, HelmTypes, MonomerTypes, PolymerTypes} from '@datagrok-libraries/bio/src/helm/consts';
16
6
  import {errInfo} from '@datagrok-libraries/bio/src/utils/err-info';
17
7
  import {ILogger} from '@datagrok-libraries/bio/src/utils/logger';
18
8
  import {
19
- HelmConvertRes, HelmInputBase, HelmNotSupportedError, IHelmHelper, IHelmInputInitOptions
9
+ HelmConvertRes, HelmInputBase, IHelmHelper, IHelmInputInitOptions
20
10
  } from '@datagrok-libraries/bio/src/helm/helm-helper';
21
11
  import {IHelmWebEditor} from '@datagrok-libraries/bio/src/helm/types';
22
- import {IMonomerLib, IMonomerLibBase, IMonomerLinkData, IMonomerSetPlaceholder} from '@datagrok-libraries/bio/src/types/monomer-library';
23
- import {GAP_SYMBOL, GapOriginals, NOTATION} from '@datagrok-libraries/bio/src/utils/macromolecule/consts';
12
+ import {IMonomerLib, IMonomerLibBase} from '@datagrok-libraries/bio/src/types/monomer-library';
24
13
  import {ISeqHelper} from '@datagrok-libraries/bio/src/utils/seq-helper';
14
+ import type {RDModule} from '@datagrok-libraries/chem-meta/src/rdkit-api';
25
15
 
26
- import {HelmWebEditor} from './helm-web-editor';
27
- import {OrgHelmModule, ScilModule} from './types';
28
16
  import {HelmInput} from './widgets/helm-input';
29
17
  import {getHoveredMonomerFromEditorMol} from './utils/get-hovered';
18
+ import * as DG from 'datagrok-api/dg';
19
+ import * as grok from 'datagrok-api/grok';
20
+ import * as ui from 'datagrok-api/ui';
30
21
  /* eslint-enable max-len */
31
22
 
32
23
  import {_package} from './package';
33
- import {IEditorOptions} from '@datagrok-libraries/js-draw-lite/src/types/jsdraw2';
34
24
 
35
- declare const dojo: DojoType;
36
- declare const JSDraw2: JSDraw2ModuleType;
37
- declare const scil: ScilModule;
38
- declare const org: OrgHelmModule;
39
-
40
- const HELM_GAP_SYMBOL: string = GapOriginals[NOTATION.HELM];
25
+ // hwe migration (Phases 3-7): every editor / parse / calc path now runs through
26
+ // the standalone `@datagrok-libraries/hwe` library via its Datagrok adapter
27
+ // (`HelmHelperAdapter` over `HelmService`). The legacy forked Pistoia HELM Web
28
+ // Editor (`org.helm.webeditor` / JSDraw2 / Dojo) is gone — this class no longer
29
+ // touches any of those globals.
30
+ import {HelmHelperAdapter, bridgeMonomerLib, HelmService, PolymerTypes} from '@datagrok-libraries/hwe';
31
+ import type {IMonomerLibBaseLike, MonomersFuncsLike} from '@datagrok-libraries/hwe';
32
+ import {NOTATION} from '@datagrok-libraries/bio/src/utils/macromolecule';
33
+ import {ISeqHandler} from '@datagrok-libraries/bio/src/utils/macromolecule/seq-handler';
41
34
 
42
35
  export class HelmHelper implements IHelmHelper {
43
36
  private static instanceCount: number = 0;
44
37
 
45
38
  constructor(
46
39
  public readonly seqHelper: ISeqHelper,
47
- private readonly logger: ILogger
40
+ private readonly logger: ILogger,
41
+ // Datagrok's RDKit module (from `getRdKitModule()`), forwarded to hwe so the
42
+ // editor can render monomer structures (atom / palette / RNA-builder tooltips
43
+ // and the bond-props dialog). hwe consumes only `get_mol(...).get_svg(...)`.
44
+ private readonly rdKitModule?: RDModule,
48
45
  ) {
49
46
  // Watchdog for singleton
50
47
  if ((++HelmHelper.instanceCount) > 1)
51
48
  throw new Error(`HelmHelper must be a single.`);
52
49
  }
53
50
 
51
+ // -- hwe editor adapter --
52
+ // The adapter owns one `HelmService` reading Bio's monomer library through
53
+ // `bridgeMonomerLib`, so the editor / parser / calculators resolve exactly
54
+ // the same monomers as the rest of the platform. Built lazily on first use
55
+ // (after `completeInit` has populated `_package._libHelper`).
56
+ private _editorAdapter: HelmHelperAdapter | null = null;
57
+ private get editorAdapter(): HelmHelperAdapter {
58
+ if (this._editorAdapter === null) {
59
+ const monomerLib = _package._libHelper!.getMonomerLib() as unknown as IMonomerLibBaseLike;
60
+ const paneProviders: Map<string, (helm: string) => Promise<HTMLElement>> = new Map();
61
+ paneProviders.set('FASTA', async (helm) => this._toFastaProvider(helm));
62
+ paneProviders.set('BILN', async (helm) => this._toBilnProvider(helm));
63
+ paneProviders.set('Molecular Structure', async (helm) => this._atomicLevelProvider(helm));
64
+ paneProviders.set('Composition Analysis', async (helm) => this._compositionAnalysisProvider(helm));
65
+
66
+
67
+ const service = new HelmService({monomerLib: bridgeMonomerLib(monomerLib),
68
+ rdkitModule: this.rdKitModule, extraPanes: paneProviders});
69
+ this._editorAdapter = new HelmHelperAdapter({service, seqHelper: this.seqHelper});
70
+ }
71
+ return this._editorAdapter;
72
+ }
73
+
54
74
  createHelmInput(name?: string, options?: IHelmInputInitOptions): HelmInputBase {
55
75
  try {
56
76
  const monomerLib: IMonomerLibBase = _package._libHelper!.getMonomerLib();
@@ -63,420 +83,124 @@ export class HelmHelper implements IHelmHelper {
63
83
  }
64
84
 
65
85
  createHelmWebEditor(host?: HTMLDivElement, options?: Partial<IHelmEditorOptions>): IHelmWebEditor {
66
- return new HelmWebEditor(host, options);
67
- }
68
-
69
- createWebEditorApp(host: HTMLDivElement, helm: string): App {
70
- org.helm.webeditor.MolViewer.molscale = 0.8;
71
- const webEditorApp: App = new org.helm.webeditor.App(host, {
72
- showabout: false,
73
- mexfontsize: '90%',
74
- mexrnapinontab: true,
75
- topmargin: 20,
76
- mexmonomerstab: true,
77
- sequenceviewonly: false,
78
- mexfavoritefirst: true,
79
- mexfilter: true,
80
- currentTabKey: HelmTabKeys.Helm,
81
- overrideTabs: (tabs: Partial<TabDescType>[]): Partial<TabDescType>[] => {
82
- const res: Partial<TabDescType>[] = [...tabs,
83
- {caption: 'Placeholders', tabkey: 'placeholders'},
84
- ];
85
- return res;
86
- },
87
- onShowTab: (mex: MonomerExplorer, div: HTMLDivElement, key: string): void => {
88
- switch (key) {
89
- case 'placeholders': {
90
- this.onShowTabPlaceholders(mex, div);
91
- break;
92
- }
93
- case 'placeholders-meta': {
94
- this.onShowTabPlaceholdersMeta(mex, div);
95
- break;
96
- }
97
- case 'placeholders-sets': {
98
- this.onShowTabPlaceholdersSets(mex, div);
99
- break;
100
- }
101
- }
102
- dojo.connect(div, 'onmousedown', function(e: MouseEvent) {
103
- mex.select(e);
104
- });
105
- dojo.connect(div, 'ondblclick', function(e: MouseEvent) {
106
- mex.dblclick(e);
107
- });
108
- }
109
- });
110
- const sizes = webEditorApp.calculateSizes();
111
- webEditorApp.canvas!.resize(sizes.rightwidth - 100, sizes.topheight - 210);
112
- let s: Partial<CSSStyleDeclaration> = {width: sizes.rightwidth - 100 + 'px', height: sizes.bottomheight + 'px'};
113
- scil.apply(webEditorApp.sequence.style, s);
114
- scil.apply(webEditorApp.notation!.style, s);
115
- s = {width: sizes.rightwidth + 'px', height: (sizes.bottomheight + webEditorApp.toolbarheight) + 'px'};
116
- scil.apply(webEditorApp.properties!.parent.style, s);
117
- webEditorApp.structureview!.resize(sizes.rightwidth, sizes.bottomheight + webEditorApp.toolbarheight);
118
- webEditorApp.mex!.resize(sizes.topheight - 80);
119
- webEditorApp.canvas?.setHelm(helm);
120
- return webEditorApp;
121
- }
122
-
123
- // -- MonomerExplorer.onShowTab --
124
-
125
- public onShowTabPlaceholders(mex: MonomerExplorer, div: HTMLDivElement): void {
126
- const d = scil.Utils.createElement(div, 'div', null, {paddingTop: '5px'});
127
-
128
- /* eslint-disable max-len*/
129
- // if (this.options.canvastoolbar == false) {
130
- // const b = scil.Utils.createElement(d, 'div', '<img src=\'' + scil.Utils.imgSrc('helm/arrow.png') + '\' style=\'vertical-align:middle\'>Mouse Pointer', {cursor: 'pointer', padding: '2px', border: 'solid 1px gray', margin: '5px'});
131
- // scil.connect(b, 'onclick', function() {
132
- // mex.plugin.jsd.doCmd('lasso');
133
- // });
134
- // }
135
- /* eslint-enable max-len*/
136
-
137
- const phTabs: Partial<TabDescType>[] = [];
138
- phTabs.push({caption: 'Meta', tabkey: 'placeholders-meta'});
139
- phTabs.push({caption: 'Sets', tabkey: 'placeholders-sets'});
140
- const placeholdersTabs = new scil.Tabs(d, {
141
- onShowTab(td: HTMLTableCellElement) {
142
- mex.onShowTab(td);
143
- },
144
- tabpadding: '5px 2px 1px 2px',
145
- tabs: phTabs,
146
- marginBottom: `0`,
147
- });
86
+ return this.editorAdapter.createHelmWebEditor(host, {
87
+ ...(options?.width !== undefined ? {width: options.width} : {}),
88
+ ...(options?.height !== undefined ? {height: options.height} : {}),
89
+ }) as unknown as IHelmWebEditor;
148
90
  }
149
91
 
150
- public onShowTabPlaceholdersMeta(mex: MonomerExplorer, div: HTMLDivElement): void {
151
-
92
+ /**
93
+ * Returns the standalone hwe editor (palette + toolbar + canvas +
94
+ * Sequence/HELM/Properties/Atomic tabs) wrapped in a `LegacyAppWrapper` that
95
+ * presents the legacy Pistoia `App` shape — `canvas.getHelm(true)`,
96
+ * `canvas.helm.jsd.m.atoms[i].selected`, `sequence` / `notation` /
97
+ * `properties.parent`, etc. — so the existing dialog consumers swap in
98
+ * unchanged.
99
+ */
100
+ createWebEditorApp(host: HTMLDivElement, helm?: string): App {
101
+ return this.editorAdapter.createWebEditorApp(host, helm) as unknown as App;
152
102
  }
153
103
 
154
- public onShowTabPlaceholdersSets(mex: MonomerExplorer, div: HTMLDivElement): void {
155
- const monomerSets = _package._libHelper!.getMonomerSets();
156
-
157
- const phSet: { [polymerType: string]: { [helmType: string]: IMonomerSetPlaceholder[] } } = {};
158
- for (const ph of monomerSets.placeholders) {
159
- let ofPolymerTypeSet = phSet[ph.polymerType];
160
- if (!ofPolymerTypeSet) ofPolymerTypeSet = phSet[ph.polymerType] = {};
161
-
162
- const phHelmType = this.toHelmType(ph.polymerType, ph.monomerType);
163
- let phList = ofPolymerTypeSet[phHelmType];
164
- if (!phList) phList = ofPolymerTypeSet[phHelmType] = [];
165
- phList.push(ph);
166
- }
104
+ // -- GetMonomer (monomer-funcs hooks) --
105
+ // Delegated to the adapter. The legacy implementation patched the global
106
+ // `org.helm.webeditor.Monomers` registry so the forked editor used Bio's
107
+ // library; the hwe editor reads `bridgeMonomerLib(...)` directly, so these
108
+ // are now thin pass-throughs kept for the `IHelmHelper` contract.
167
109
 
168
- const fillPlaceholders = (
169
- parentDiv: HTMLDivElement, phList: IMonomerSetPlaceholder[], helmType: HelmType
170
- ): void => {
171
- for (const ph of phList) {
172
- const phDiv = mex.createMonomerDiv(parentDiv, ph.symbol, helmType);
173
- ui.tooltip.bind(phDiv, () => {
174
- const phTooltipDiv = ui.div([
175
- ui.table(ph.monomerLinks, (ml: IMonomerLinkData, idx: number) => {
176
- return [ml.symbol, ml.source];
177
- }, ['Symbol', 'Library source'])
178
- ]);
179
- return phTooltipDiv;
180
- });
181
- }
182
- };
183
-
184
- const polymerTypes: [string, PolymerType][] = [
185
- ['Chem', PolymerTypes.CHEM],
186
- ['Peptide', PolymerTypes.PEPTIDE],
187
- ['RNA', PolymerTypes.RNA],
188
- ['Blob', PolymerTypes.BLOB],
189
- ['G', PolymerTypes.G],
190
- ];
191
- const polymerTypeAcc = ui.accordion();
192
- for (const [name, polymerType] of polymerTypes) {
193
- if (polymerType in phSet) {
194
- polymerTypeAcc.addPane(name, () => {
195
- const polymerTypeDiv = ui.div();
196
- const ofPolymerTypeSet = phSet[polymerType];
197
- if (Object.keys(ofPolymerTypeSet).length == 1) {
198
- const [helmType, phList] = Object.entries(ofPolymerTypeSet)[0];
199
- fillPlaceholders(polymerTypeDiv, phList, helmType as HelmType);
200
- } else {
201
- const helmTypeAcc = ui.accordion();
202
- for (const [helmTypeName, helmType] of Object.entries(HelmTypes)) {
203
- if (helmType in ofPolymerTypeSet) {
204
- helmTypeAcc.addPane(helmTypeName, () => {
205
- const helmTypeDiv = ui.div();
206
-
207
- const phList = ofPolymerTypeSet[helmType];
208
- fillPlaceholders(helmTypeDiv, phList, helmType as HelmType);
209
-
210
- return helmTypeDiv;
211
- });
212
- }
213
- }
214
- polymerTypeDiv.appendChild(helmTypeAcc.root);
215
- }
216
- return polymerTypeDiv;
217
- }, true, undefined, false);
218
- }
219
- }
220
- div.appendChild(polymerTypeAcc.root);
110
+ public get originalMonomersFuncs(): MonomersFuncs | null {
111
+ return this.editorAdapter.originalMonomersFuncs as unknown as MonomersFuncs | null;
221
112
  }
222
113
 
223
- // -- GetMonomer --
224
-
225
- public originalMonomersFuncs: MonomersFuncs | null = null;
226
-
227
114
  public revertOriginalMonomersFuncs(): MonomersFuncs {
228
- const logPrefix = `Helm: revertOriginalGetMonomer()`;
229
- if (this.originalMonomersFuncs === null)
230
- throw new Error('Unable to revert original getMonomer');
231
-
232
- const monomers = org.helm.webeditor.Monomers;
233
- const overriddenMonomersFuncs: MonomersFuncs = {
234
- getMonomer: monomers.getMonomer,
235
- getMonomerSet: monomers.getMonomerSet,
236
- };
237
-
238
- monomers.getMonomer = this.originalMonomersFuncs.getMonomer;
239
- monomers.getMonomerSet = this.originalMonomersFuncs.getMonomerSet;
240
- this.originalMonomersFuncs = null;
241
-
242
- return overriddenMonomersFuncs;
115
+ return this.editorAdapter.revertOriginalMonomersFuncs() as unknown as MonomersFuncs;
243
116
  }
244
117
 
245
118
  public overrideMonomersFuncs(monomersFuncs: MonomersFuncs): MonomersFuncs {
246
- const logPrefix = `Helm: HelmHelper.overrideGetMonomer()`;
247
-
248
- if (this.originalMonomersFuncs != null)
249
- throw new Error(`${logPrefix}, originalGetMonomer is overridden already`);
250
-
251
- const monomers = org.helm.webeditor.Monomers;
252
- this.originalMonomersFuncs = {
253
- getMonomer: monomers.getMonomer.bind(monomers),
254
- getMonomerSet: monomers.getMonomerSet.bind(monomers),
255
- };
256
- monomers.getMonomer = monomersFuncs.getMonomer;
257
- monomers.getMonomerSet = monomersFuncs.getMonomerSet;
258
- return this.originalMonomersFuncs!;
119
+ return this.editorAdapter.overrideMonomersFuncs(
120
+ monomersFuncs as unknown as MonomersFuncsLike) as unknown as MonomersFuncs;
259
121
  }
260
122
 
261
123
  public buildMonomersFuncsFromLib(monomerLib: IMonomerLib): MonomersFuncs {
262
- const logPrefix = `Helm: HelmHelper.buildGetMonomerFromLib()`;
263
-
264
- return {
265
- getMonomer: (a: HelmAtom | HelmType, name?: string): GetMonomerResType => {
266
- const logPrefixInt = `${logPrefix}, org.helm.webeditor.Monomers.getMonomer()`;
267
- try {
268
- // logger.debug(`${logPrefixInt}, a: ${JSON.stringify(a, helmJsonReplacer)}, name: '${name}'`);
269
- if (name?.startsWith('[') && name.endsWith(']'))
270
- name = name.substring(1, name.length - 1);
271
- // Creates monomers in lib
272
- const dgWem = monomerLib.getWebEditorMonomer(a, name);
273
-
274
- return dgWem; //dgWem;
275
- } catch (err) {
276
- const [errMsg, errStack] = errInfo(err);
277
- this.logger.error(`${logPrefixInt}, Error: ${errMsg}`, undefined, errStack);
278
- throw err;
279
- }
280
- },
281
- getMonomerSet: (a: HelmAtom | HelmType | null): MonomerSetType | null => {
282
- // if (a == null)
283
- // return null;
284
- // const atom = a as HelmAtom;
285
- // if (atom.T === 'ATOM')
286
- // a = atom.biotype();
287
- // return monomerLib.getMonomerSet(a as HelmType);
288
- return this.originalMonomersFuncs!.getMonomerSet(a);
289
- }
290
- };
291
- }
292
-
293
- // helm2type(seqM: ISeqMonomer): HelmType {
294
- // if (seqM.polymerType == "PEPTIDE")
295
- // return org.helm.webeditor.HELM.AA;
296
- // else if (seqM.polymerType == "CHEM")
297
- // return org.helm.webeditor.HELM.CHEM;
298
- // else if (seqM.polymerType == "RNA") {
299
- // if (seqM.mt == "Branch")
300
- // return org.helm.webeditor.HELM.BASE;
301
- // if (seqM.mt == "Backbone") {
302
- // if (seqM.na == "P" || seqM.na == "p")
303
- // return org.helm.webeditor.HELM.LINKER;
304
- // else
305
- // return org.helm.webeditor.HELM.SUGAR;
306
- // }
307
- // }
308
- // throw new Error(`Not supported seq monomer ${JSON.stringify(seqM)}.`);
309
- // }
310
- private toHelmType(polymerType: PolymerType, monomerType: MonomerType, naturalAnalog?: string) {
311
- if (polymerType == PolymerTypes.PEPTIDE)
312
- return org.helm.webeditor.HELM.AA;
313
- else if (polymerType == PolymerTypes.CHEM)
314
- return org.helm.webeditor.HELM.CHEM;
315
- else if (polymerType == PolymerTypes.RNA) {
316
- if (monomerType == MonomerTypes.BRANCH)
317
- return org.helm.webeditor.HELM.BASE;
318
- if (monomerType == MonomerTypes.BACKBONE) {
319
- if (naturalAnalog == 'P' || naturalAnalog == 'p')
320
- return org.helm.webeditor.HELM.LINKER;
321
- else
322
- return org.helm.webeditor.HELM.SUGAR;
323
- }
324
- }
325
- throw new Error(`Not supported monomer polymerType: '${polymerType}', monomerType: '${monomerType}'.`);
124
+ return this.editorAdapter.buildMonomersFuncsFromLib(
125
+ monomerLib as unknown as IMonomerLibBaseLike) as unknown as MonomersFuncs;
326
126
  }
327
127
 
328
128
  public getHoveredAtom(x: number, y: number, mol: HelmMol, height: number): HelmAtom | null {
329
129
  return getHoveredMonomerFromEditorMol(x, y, mol, height);
330
130
  }
331
131
 
332
- //if molfiles are accessed too often, it is better to cache it
333
- private _molfilesEditor: Editor<unknown, IBio<unknown>, IEditorOptions> | null = null;
334
- private _molfilesEditorHost: HTMLDivElement | null = null;
335
- private get molfilesEditor(): Editor<unknown, IBio<unknown>, IEditorOptions> {
336
- if (this._molfilesEditorRemovingTimer)
337
- clearTimeout(this._molfilesEditorRemovingTimer);
338
- if (this._molfilesEditor == null) {
339
- this._molfilesEditorHost = ui.div([], {style: {width: '0px', height: '0px', position: 'fixed'}});
340
- document.documentElement.appendChild(this._molfilesEditorHost);
341
- this._molfilesEditor = new JSDraw2.Editor(this._molfilesEditorHost, {viewonly: true});
342
- }
343
- this._molfilesEditorRemovingTimer = setTimeout(() => {
344
- this.removeMolfilesEditor();
345
- }, 1000);
346
- return this._molfilesEditor;
347
- }
348
-
349
- // after batch conversion, remove the editor to avoid sliding pages
350
- private _molfilesEditorRemovingTimer: any = null;
351
- private removeMolfilesEditor(): void {
352
- if (this._molfilesEditorHost) {
353
- $(this._molfilesEditorHost).empty();
354
- this._molfilesEditorHost.remove();
355
- this._molfilesEditorHost = null;
356
- this._molfilesEditor = null;
357
- }
358
- }
359
-
360
132
  public getMolfiles(helmStrList: string[]): string[] {
361
- try {
362
- const editor = this.molfilesEditor;
363
- const resList = helmStrList.map((helmStr, i) => {
364
- //no-draw instruction to avoid time spent on rendering
365
- editor.helm && (editor.helm.noDraw = true);
366
- editor.setHelm(helmStr);
367
- const mol = editor.getMolfile();
368
- return mol;
369
- });
370
- return resList;
371
- } finally {
372
- // $(host).empty();
373
- // host.remove();
374
- }
133
+ return this.editorAdapter.getMolfiles(helmStrList);
375
134
  }
376
135
 
377
136
  public parse(helm: string, origin?: Point): HelmMol {
378
- const molHandler = new JSDraw2.MolHandler<HelmType, IHelmBio, IHelmEditorOptions>();
379
- const plugin = new org.helm.webeditor.Plugin(molHandler);
380
- org.helm.webeditor.IO.parseHelm(plugin, helm, origin ?? new JSDraw2.Point(0, 0));
381
- return plugin.jsd.m;
137
+ return this.editorAdapter.parse(helm, origin) as unknown as HelmMol;
382
138
  }
383
139
 
384
140
  removeGaps(srcHelm: string): HelmConvertRes {
385
- const monomerMap = new Map<number, number>();
386
- const mol: HelmMol = this.parse(srcHelm);
387
- for (let aI: number = mol.atoms.length - 1; aI >= 0; --aI) {
388
- const a = mol.atoms[aI];
389
- if (a.elem === HELM_GAP_SYMBOL /* '*' - original */) {
390
- // Collect all bonds connected to this gap atom, tracking which side the gap is on
391
- const connectedBonds: { bI: number, gapSide: 1 | 2 }[] = [];
392
- for (let bI: number = mol.bonds.length - 1; bI >= 0; --bI) {
393
- const b = mol.bonds[bI];
394
- if (b.a1 === a) connectedBonds.push({bI, gapSide: 1}); // gap is a1
395
- else if (b.a2 === a) connectedBonds.push({bI, gapSide: 2}); // gap is a2
396
- }
397
-
398
- if (connectedBonds.length > 2) {
399
- throw new HelmNotSupportedError(
400
- `Removing gap monomer #${aI} with ${connectedBonds.length} bonds is unsupported (max 2).`);
401
- }
402
-
403
- // Separate into backbone bonds (R1/R2) and other bonds (R3+ cross-polymer)
404
- // A backbone bond connects to the gap's R1 or R2 attachment point
405
- let backboneR1Bond: { bI: number, gapSide: 1 | 2 } | null = null; // bond using gap's R1
406
- let backboneR2Bond: { bI: number, gapSide: 1 | 2 } | null = null; // bond using gap's R2
407
- const otherBonds: number[] = []; // bond indices to just remove
408
-
409
- for (const cb of connectedBonds) {
410
- const bond = mol.bonds[cb.bI];
411
- // The R-group on the gap's side tells us which attachment point is used
412
- const gapR = cb.gapSide === 1 ? bond.r1 : bond.r2;
413
- const gapRNum = typeof gapR === 'string' ? parseInt(gapR.replace(/\D/g, '')) : gapR;
414
- if (gapRNum === 1)
415
- backboneR1Bond = cb;
416
- else if (gapRNum === 2)
417
- backboneR2Bond = cb;
418
- else
419
- otherBonds.push(cb.bI);
420
- }
421
-
422
- // Remove other (non-backbone) bonds first (iterate in reverse to keep indices valid)
423
- otherBonds.sort((a, b) => b - a);
424
- for (const bI of otherBonds)
425
- mol.bonds.splice(bI, 1);
426
-
427
- // Recalculate bond indices after splice (otherBonds were removed)
428
- // We need to adjust backboneR1Bond/R2Bond indices
429
- const adjustIdx = (origBi: number): number => {
430
- let adj = origBi;
431
- for (const removedBi of otherBonds)
432
- if (removedBi < origBi) adj--;
433
- return adj;
434
- };
435
-
436
- const r1 = backboneR1Bond ? {...backboneR1Bond, bI: adjustIdx(backboneR1Bond.bI)} : null;
437
- const r2 = backboneR2Bond ? {...backboneR2Bond, bI: adjustIdx(backboneR2Bond.bI)} : null;
438
-
439
- if (r1 && r2) {
440
- // Re-link: the neighbor on the R1 side connects directly to the neighbor on the R2 side
441
- const r1Bond = mol.bonds[r1.bI];
442
- const r2Bond = mol.bonds[r2.bI];
443
- // The "other" atom (not the gap) on each bond
444
- const r1Neighbor = r1.gapSide === 1 ? r1Bond.a2 : r1Bond.a1;
445
- const r2Neighbor = r2.gapSide === 1 ? r2Bond.a2 : r2Bond.a1;
446
- const r1NeighborR = r1.gapSide === 1 ? r1Bond.r2 : r1Bond.r1;
447
- const r1NeighborApo = r1.gapSide === 1 ? r1Bond.apo2 : r1Bond.apo1;
448
- const r2NeighborR = r2.gapSide === 1 ? r2Bond.r2 : r2Bond.r1;
449
- const r2NeighborApo = r2.gapSide === 1 ? r2Bond.apo2 : r2Bond.apo1;
450
-
451
- // Rewrite the R1 bond to connect r1Neighbor ↔ r2Neighbor directly
452
- r1Bond.a1 = r1Neighbor;
453
- r1Bond.r1 = r1NeighborR;
454
- r1Bond.apo1 = r1NeighborApo;
455
- r1Bond.a2 = r2Neighbor;
456
- r1Bond.r2 = r2NeighborR;
457
- r1Bond.apo2 = r2NeighborApo;
458
-
459
- // Remove the R2 bond (no longer needed)
460
- mol.bonds.splice(r2.bI, 1);
461
- } else if (r1 && !r2) {
462
- // Gap at the end (only R1 bond) — just remove
463
- mol.bonds.splice(r1.bI, 1);
464
- } else if (!r1 && r2) {
465
- // Gap at the start (only R2 bond) — just remove
466
- mol.bonds.splice(r2.bI, 1);
467
- }
468
- // else: isolated gap, no backbone bonds — just remove atom
469
-
470
- mol.atoms.splice(aI, 1);
471
- }
141
+ return this.editorAdapter.removeGaps(srcHelm);
142
+ }
143
+
144
+ private _singeHelmDf: DG.DataFrame | null = null;
145
+ private _getSingleHelmDf(helm: string) {
146
+ if (this._singeHelmDf === null) {
147
+ const col = DG.Column.fromStrings('helm', [helm]);
148
+ col.setTag('quality', DG.SEMTYPE.MACROMOLECULE);
149
+ col.setTag('units', 'helm');
150
+ col.setTag('.alphabetIsMultichar', 'true');
151
+ col.setTag('alphabet', 'UN');
152
+ this._singeHelmDf = DG.DataFrame.fromColumns([col]);
472
153
  }
154
+ this._singeHelmDf.col('helm')!.set(0, helm);
155
+ return this._singeHelmDf;
156
+ }
473
157
 
474
- for (let aI: number = 0; aI < mol.atoms.length; ++aI) {
475
- const a: HelmAtom = mol.atoms[aI];
476
- monomerMap.set(a.bio!.continuousId - 1, aI);
158
+ private _singleHelmSh: ISeqHandler | null = null;
159
+ private _getSingleHelmDfSh(helm: string) {
160
+ if (!this._singleHelmSh) {
161
+ const df = this._getSingleHelmDf(helm);
162
+ this._singleHelmSh = this.seqHelper.getSeqHandler(df.col('helm')!);
477
163
  }
478
-
479
- const resHelm = org.helm.webeditor.IO.getHelm(mol)!;
480
- return {srcHelm, resHelm, monomerMap};
164
+ return this._singleHelmSh;
165
+ }
166
+
167
+ private async _atomicLevelProvider(helm: string) {
168
+ const df = this._getSingleHelmDf(helm);
169
+ const semValue = DG.SemanticValue.fromTableCell(df.cell(0, 'helm')!);
170
+ const w: DG.Widget = await grok.functions.call('Bio:toAtomicLevelPanel', {sequence: semValue}) as DG.Widget;
171
+ return w.root;
172
+ }
173
+
174
+ private async _compositionAnalysisProvider(helm: string) {
175
+ const df = this._getSingleHelmDf(helm);
176
+ const semValue = DG.SemanticValue.fromTableCell(df.cell(0, 'helm')!);
177
+ const w: DG.Widget = await grok.functions.call('Bio:compositionAnalysisWidget', {sequence: semValue}) as DG.Widget;
178
+ return w.root;
179
+ }
180
+
181
+ private _toBilnProvider(helm: string) {
182
+ const parseResult = this.editorAdapter.service.parse(helm);
183
+ if (parseResult.mol.chains.length < 1 || parseResult.mol.chains.some((c) => c.polymerType !== PolymerTypes.PEPTIDE))
184
+ return ui.divText('Unsupported sequence for BILN');
185
+ const sh = this._getSingleHelmDfSh(helm);
186
+ const ta = ui.input.textArea('', {});
187
+ ta.value = sh.getConverter(NOTATION.BILN)(helm);
188
+ ta.input.setAttribute('disabled', 'true');
189
+ ta.input.style.width = '100%';
190
+ return ta.input;
191
+ }
192
+
193
+ private _toFastaProvider(helm: string) {
194
+ const parseResult = this.editorAdapter.service.parse(helm);
195
+ if (parseResult.mol.chains.length !== 1 ||
196
+ parseResult.mol.atoms.length !== parseResult.mol.bonds.filter((b) => b.kind !== 'hbond').length + 1
197
+ )
198
+ return ui.divText('Unsupported sequence for FASTA');
199
+ const sh = this._getSingleHelmDfSh(helm);
200
+ const ta = ui.input.textArea('', {});
201
+ ta.value = sh.getConverter(NOTATION.FASTA)(helm);
202
+ ta.input.setAttribute('disabled', 'true');
203
+ ta.input.style.width = '100%';
204
+ return ta.input;
481
205
  }
482
206
  }
@@ -12,35 +12,38 @@ export namespace funcs {
12
12
  return await grok.functions.call('Helm:InitHelm', {});
13
13
  }
14
14
 
15
- /**
16
- Helm renderer service
17
- */
18
- export async function getHelmService(): Promise<any> {
19
- return await grok.functions.call('Helm:GetHelmService', {});
20
- }
21
-
22
15
  export async function helmCellRenderer(): Promise<any> {
23
16
  return await grok.functions.call('Helm:HelmCellRenderer', {});
24
17
  }
25
18
 
26
19
  /**
27
- Macromolecule
28
- */
20
+ * Macromolecule
21
+ */
29
22
  export async function editMoleculeCell(cell: any ): Promise<void> {
30
23
  return await grok.functions.call('Helm:EditMoleculeCell', { cell });
31
24
  }
32
25
 
33
26
  /**
34
- Adds editor
35
- */
27
+ * Adds editor
28
+ * @param {any} mol
29
+ * semType: Macromolecule
30
+ */
36
31
  export async function openEditor(mol: any ): Promise<void> {
37
32
  return await grok.functions.call('Helm:OpenEditor', { mol });
38
33
  }
39
34
 
35
+ /**
36
+ * @param {any} sequence
37
+ * semType: Macromolecule
38
+ */
40
39
  export async function propertiesWidget(sequence: any ): Promise<any> {
41
40
  return await grok.functions.call('Helm:PropertiesWidget', { sequence });
42
41
  }
43
42
 
43
+ /**
44
+ * @param {DG.Column} col
45
+ * semType: Macromolecule
46
+ */
44
47
  export async function getMolfiles(col: DG.Column ): Promise<DG.Column> {
45
48
  return await grok.functions.call('Helm:GetMolfiles', { col });
46
49
  }
@@ -10,11 +10,9 @@ import {runTests, tests, TestContext, initAutoTests as initTests} from '@datagro
10
10
  import './tests/_first-tests';
11
11
  import './tests/helm-tests';
12
12
  import './tests/findMonomers-tests';
13
- import './tests/helm-service-tests';
14
13
  import './tests/renderers-tests';
15
14
  import './tests/get-molfiles-tests';
16
15
  import './tests/properties-widget-tests';
17
- import './tests/get-monomer-tests';
18
16
  import './tests/parse-helm-tests';
19
17
  import './tests/helm-web-editor-tests';
20
18
  import './tests/helm-input-tests';